File tree Expand file tree Collapse file tree 3 files changed +35
-1
lines changed
Expand file tree Collapse file tree 3 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -174,7 +174,6 @@ function number_of_variables(map::Map)
174174 num += length_of_vector_of_variables(map, MOI. VariableIndex(- i))
175175 end
176176 end
177- count(bridge -> bridge != = nothing , map. bridges)
178177 end
179178 return num
180179end
Original file line number Diff line number Diff line change @@ -760,6 +760,11 @@ function _get_all_including_bridged(
760760 ret = MOI. VariableIndex[]
761761 for inner_variable in MOI. get(b. model, attr)
762762 outer_variable = get(inner_to_outer, inner_variable, missing )
763+ # If there is a chain of variable bridges, the `outer_variable` may need
764+ # to be mapped.
765+ while haskey(inner_to_outer, outer_variable)
766+ outer_variable = inner_to_outer[outer_variable]
767+ end
763768 if ismissing(outer_variable)
764769 # inner_variable does not exist in inner_to_outer, which means that
765770 # it is not bridged. Pass through unchanged.
Original file line number Diff line number Diff line change @@ -1422,6 +1422,36 @@ function test_fallback_delete_objective_bridge()
14221422 return
14231423end
14241424
1425+ struct Model2714 <: MOI.ModelLike
1426+ dimensions:: Vector{Int}
1427+ Model2714() = new(Int[])
1428+ end
1429+
1430+ MOI. is_empty(model:: Model2714 ) = isempty(model. dimensions)
1431+
1432+ function MOI. supports_add_constrained_variables(
1433+ :: Model2714 ,
1434+ :: Type{MOI.Nonnegatives} ,
1435+ )
1436+ return true
1437+ end
1438+
1439+ function MOI. add_constrained_variables(model:: Model2714 , set:: MOI.Nonnegatives )
1440+ n = MOI. dimension(set)
1441+ x = MOI. VariableIndex(sum(model. dimensions) .+ (1 : n))
1442+ push!(model. dimensions, n)
1443+ F, S = MOI. VectorOfVariables, MOI. Nonnegatives
1444+ return x, MOI. ConstraintIndex{F,S}(length(model. dimensions))
1445+ end
1446+
1447+ function test_issue_2714()
1448+ model = MOI. instantiate(Model2714; with_bridge_type = Float64)
1449+ t, _ = MOI. add_constrained_variable(model, MOI. LessThan(10.0 ))
1450+ @test MOI. get(model, MOI. NumberOfVariables()) == 1
1451+ @test MOI. get(model, MOI. ListOfVariableIndices()) == [t]
1452+ return
1453+ end
1454+
14251455end # module
14261456
14271457TestBridgeOptimizer. runtests()
You can’t perform that action at this time.
0 commit comments