Skip to content

Commit 2b3a763

Browse files
authored
[Bridges] add support for VariableName in variable bridges (#2822)
1 parent 6479b1f commit 2b3a763

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/Bridges/Variable/bridges/ParameterToEqualToBridge.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,29 @@ function MOI.Bridges.inverse_adjoint_map_function(
5858
)
5959
return f
6060
end
61+
62+
function MOI.supports(
63+
::MOI.ModelLike,
64+
::MOI.VariableName,
65+
::Type{<:ParameterToEqualToBridge},
66+
)
67+
return true
68+
end
69+
70+
function MOI.get(
71+
model::MOI.ModelLike,
72+
attr::MOI.VariableName,
73+
bridge::ParameterToEqualToBridge,
74+
)
75+
return MOI.get(model, attr, bridge.variable)
76+
end
77+
78+
function MOI.set(
79+
model::MOI.ModelLike,
80+
attr::MOI.VariableName,
81+
bridge::ParameterToEqualToBridge,
82+
name::String,
83+
)
84+
MOI.set(model, attr, bridge.variable, name)
85+
return
86+
end

src/Bridges/bridge_optimizer.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,6 +1751,10 @@ function MOI.get(
17511751
vi::MOI.VariableIndex,
17521752
)
17531753
if is_bridged(b, vi)
1754+
bridge_ = bridge(b, vi)
1755+
if MOI.supports(b, MOI.VariableName(), typeof(bridge_))
1756+
return MOI.get(b, MOI.VariableName(), bridge_)
1757+
end
17541758
return get(b.var_to_name, vi, "")
17551759
else
17561760
return MOI.get(b.model, attr, vi)
@@ -1764,8 +1768,13 @@ function MOI.set(
17641768
name::String,
17651769
)
17661770
if is_bridged(b, vi)
1767-
b.var_to_name[vi] = name
1768-
b.name_to_var = nothing # Invalidate the name map.
1771+
bridge_ = bridge(b, vi)
1772+
if MOI.supports(b, MOI.VariableName(), typeof(bridge_))
1773+
MOI.set(b, MOI.VariableName(), bridge_, name)
1774+
else
1775+
b.var_to_name[vi] = name
1776+
b.name_to_var = nothing # Invalidate the name map.
1777+
end
17691778
else
17701779
MOI.set(b.model, attr, vi, name)
17711780
end

test/Bridges/bridge_optimizer.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,6 +1570,28 @@ function test_issue_2817c()
15701570
return
15711571
end
15721572

1573+
function test_issue_2762_success()
1574+
inner = MOI.Utilities.Model{Float64}()
1575+
model = MOI.Bridges.Variable.ParameterToEqualTo{Float64}(inner)
1576+
p, _ = MOI.add_constrained_variable(model, MOI.Parameter(1.0))
1577+
MOI.set(model, MOI.VariableName(), p, "p")
1578+
@test MOI.get(model, MOI.VariableName(), p) == "p"
1579+
x = only(MOI.get(inner, MOI.ListOfVariableIndices()))
1580+
@test MOI.get(inner, MOI.VariableName(), x) == "p"
1581+
return
1582+
end
1583+
1584+
function test_issue_2762_fail()
1585+
inner = MOI.Utilities.Model{Float64}()
1586+
model = MOI.Bridges.Variable.NonposToNonneg{Float64}(inner)
1587+
y, _ = MOI.add_constrained_variables(model, MOI.Nonpositives(2))
1588+
MOI.set(model, MOI.VariableName(), y[1], "y1")
1589+
@test MOI.get(model, MOI.VariableName(), y[1]) == "y1"
1590+
x = MOI.get(inner, MOI.ListOfVariableIndices())
1591+
@test all(isempty, MOI.get(inner, MOI.VariableName(), x))
1592+
return
1593+
end
1594+
15731595
end # module
15741596

15751597
TestBridgeOptimizer.runtests()

0 commit comments

Comments
 (0)