@@ -72,15 +72,45 @@ function MOI.Bridges.added_constraint_types(::Type{<:SetMapBridge})
7272 return Tuple{Type,Type}[]
7373end
7474
75+ # Get a primal function, going from bridged-space -> user-space
76+ # => use inverse_map_function
7577function MOI. get (
7678 model:: MOI.ModelLike ,
77- attr:: Union{MOI.ConstraintFunction,MOI.ConstraintPrimal} ,
79+ attr:: Union {
80+ MOI. ConstraintFunction,
81+ MOI. ConstraintPrimal,
82+ MOI. ConstraintPrimalStart,
83+ },
7884 bridge:: SetMapBridge ,
7985)
8086 f = MOI. get (model, attr, bridge. constraint)
81- return MOI. Bridges. map_function (bridge, f)
87+ if f === nothing
88+ return nothing
89+ end
90+ return MOI. Bridges. inverse_map_function (bridge, f)
91+ end
92+
93+ # Set a primal function, going from user-space -> bridged-space
94+ # => use map_function
95+ function MOI. set (
96+ model:: MOI.ModelLike ,
97+ attr:: MOI.ConstraintPrimalStart ,
98+ bridge:: SetMapBridge ,
99+ value,
100+ )
101+ if value === nothing
102+ MOI. set (model, attr, bridge. constraint, value)
103+ else
104+ bridged_value = MOI. Bridges. map_function (bridge, value)
105+ MOI. set (model, attr, bridge. constraint, bridged_value)
106+ end
107+ return
82108end
83109
110+ # Get a primal set, going from bridged-space -> user-space
111+ # => well we should use inverse_map_set, but for some reason, the convention
112+ # is reversed in Variable.SetMapBridge and Constraint.SetMapBridge
113+ # => use map_set instead
84114function MOI. get (
85115 model:: MOI.ModelLike ,
86116 attr:: MOI.ConstraintSet ,
@@ -90,6 +120,10 @@ function MOI.get(
90120 return MOI. Bridges. map_set (bridge, set)
91121end
92122
123+ # Set a primal set, going from user-space -> bridged-space
124+ # => well we should use map_set, but for some reason, the convention is
125+ # reversed in Variable.SetMapBridge and Constraint.SetMapBridge
126+ # => use inverse_map_set instead
93127function MOI. set (
94128 model:: MOI.ModelLike ,
95129 attr:: MOI.ConstraintSet ,
@@ -101,15 +135,37 @@ function MOI.set(
101135 return
102136end
103137
138+ # Get a dual function, going from bridged-space -> user-space
139+ # => use inverse_adjoint_map_function
104140function MOI. get (
105141 model:: MOI.ModelLike ,
106- attr:: MOI.ConstraintDual ,
142+ attr:: Union{ MOI.ConstraintDual,MOI.ConstraintDualStart} ,
107143 bridge:: SetMapBridge ,
108144)
109145 value = MOI. get (model, attr, bridge. constraint)
146+ if value === nothing
147+ return nothing
148+ end
110149 return MOI. Bridges. inverse_adjoint_map_function (typeof (bridge), value)
111150end
112151
152+ # Set a dual function, going from user-space -> bridged-space
153+ # => use adjoint_map_function
154+ function MOI. set (
155+ model:: MOI.ModelLike ,
156+ attr:: MOI.ConstraintDualStart ,
157+ bridge:: SetMapBridge ,
158+ value,
159+ )
160+ if value === nothing
161+ MOI. set (model, attr, bridge. constraint, value)
162+ else
163+ bridged_value = MOI. Bridges. adjoint_map_function (bridge, value)
164+ MOI. set (model, attr, bridge. constraint, bridged_value)
165+ end
166+ return
167+ end
168+
113169function MOI. supports (
114170 model:: MOI.ModelLike ,
115171 attr:: MOI.VariablePrimalStart ,
@@ -200,6 +256,14 @@ function MOI.set(
200256 return
201257end
202258
259+ function MOI. supports (
260+ model:: MOI.ModelLike ,
261+ attr:: Union{MOI.ConstraintPrimalStart,MOI.ConstraintDualStart} ,
262+ :: Type{<:SetMapBridge{T,S1}} ,
263+ ) where {T,S1<: MOI.AbstractScalarSet }
264+ return MOI. supports (model, attr, MOI. ConstraintIndex{MOI. VariableIndex,S1})
265+ end
266+
203267# MOI.AbstractVectorSet
204268
205269function _add_constrained_var (model, set:: MOI.AbstractVectorSet )
@@ -265,6 +329,15 @@ function MOI.set(
265329 return
266330end
267331
332+ function MOI. supports (
333+ model:: MOI.ModelLike ,
334+ attr:: Union{MOI.ConstraintPrimalStart,MOI.ConstraintDualStart} ,
335+ :: Type{<:SetMapBridge{T,S1}} ,
336+ ) where {T,S1<: MOI.AbstractVectorSet }
337+ CI = MOI. ConstraintIndex{MOI. VectorOfVariables,S1}
338+ return MOI. supports (model, attr, CI)
339+ end
340+
268341function MOI. Bridges. bridged_function (
269342 bridge:: SetMapBridge{T} ,
270343 i:: MOI.Bridges.IndexInVector ,
0 commit comments