From 275f03aaf17a2ef78b23fd1ae214878351ebda1d Mon Sep 17 00:00:00 2001 From: odow Date: Thu, 14 Dec 2023 16:26:07 +1300 Subject: [PATCH] Update --- docs/src/submodules/Bridges/reference.md | 1 + src/Bridges/Constraint/bridges/soc_to_psd.jl | 5 --- src/Bridges/Constraint/set_map.jl | 45 +++++++++----------- 3 files changed, 20 insertions(+), 31 deletions(-) diff --git a/docs/src/submodules/Bridges/reference.md b/docs/src/submodules/Bridges/reference.md index 3a02b90743..a3c75ff2cd 100644 --- a/docs/src/submodules/Bridges/reference.md +++ b/docs/src/submodules/Bridges/reference.md @@ -36,6 +36,7 @@ Bridges.Constraint.SingleBridgeOptimizer Bridges.Constraint.add_all_bridges Bridges.Constraint.FlipSignBridge Bridges.Constraint.AbstractToIntervalBridge +Bridges.Constraint.MultiSetMapBridge Bridges.Constraint.SetMapBridge Bridges.Constraint.conversion_cost ``` diff --git a/src/Bridges/Constraint/bridges/soc_to_psd.jl b/src/Bridges/Constraint/bridges/soc_to_psd.jl index 2b78d2cff0..df695beb7d 100644 --- a/src/Bridges/Constraint/bridges/soc_to_psd.jl +++ b/src/Bridges/Constraint/bridges/soc_to_psd.jl @@ -244,11 +244,6 @@ function MOI.Bridges.inverse_map_set( return MOI.RotatedSecondOrderCone(2) end -function _rsoc_to_psd_too_small_message(n) - return "Unable to bridge RotatedSecondOrderCone to PSD because the " * - "dimension is too small: got $n, expected >= 2." -end - function MOI.Bridges.map_function(::Type{<:RSOCtoPSDBridge{T}}, func) where {T} scalars = MOI.Utilities.eachscalar(func) if length(scalars) < 2 diff --git a/src/Bridges/Constraint/set_map.jl b/src/Bridges/Constraint/set_map.jl index 98334fc504..ddf89d52d5 100644 --- a/src/Bridges/Constraint/set_map.jl +++ b/src/Bridges/Constraint/set_map.jl @@ -8,11 +8,13 @@ abstract type MultiSetMapBridge{T,S1,G} <: AbstractBridge end Same as `SetMapBridge` but the output constraint type does not only depend on -the input constraint type. When subtyping `MultiSetMapBridge`, -`added_constraint_types` and `supports` should additionally be implemented by -the bridge. For instance, if a bridge `BridgeType` may create either a -constraint of type `F2`-in-`S2` or `F3`-in-`S3`, these methods may be -implemented as follows: +the input constraint type. + +When subtyping `MultiSetMapBridge`, `added_constraint_types` and `supports` +should additionally be implemented by the bridge. + +For example, if a bridge `BridgeType` may create either a constraint of type +`F2`-in-`S2` or `F3`-in-`S3`, these methods should be implemented as follows: ```julia function MOI.Bridges.added_constraint_types( ::Type{<:BridgeType{T,F2,F3}}, @@ -26,7 +28,7 @@ function MOI.supports( ::Type{<:BridgeType{T,F2,F3}}, ) where {T,F2,F3} return MOI.supports(model, attr, MOI.ConstraintIndex{F2,S2}) || - MOI.supports(model, attr, MOI.ConstraintIndex{F3,S3}) + MOI.supports(model, attr, MOI.ConstraintIndex{F3,S3}) end ``` """ @@ -68,30 +70,21 @@ end # Attributes, Bridge acting as a model -_get(::MOI.ConstraintIndex, ::MOI.NumberOfConstraints) = 0 -_get(::MOI.ConstraintIndex{F,S}, ::MOI.NumberOfConstraints{F,S}) where {F,S} = 1 -function _get( - ::MOI.ConstraintIndex, - ::MOI.ListOfConstraintIndices{F,S}, -) where {F,S} - return MOI.ConstraintIndex{F,S}[] -end -function _get( - ci::MOI.ConstraintIndex{F,S}, - ::MOI.ListOfConstraintIndices{F,S}, -) where {F,S} - return [ci] -end - function MOI.get( bridge::MultiSetMapBridge, - attr::MOI.NumberOfConstraints, -)::Int64 - return _get(bridge.constraint, attr) + ::MOI.NumberOfConstraints{F,S}, +)::Int64 where {F,S} + return bridge.constraint isa MOI.ConstraintIndex{F,S} ? 1 : 0 end -function MOI.get(bridge::MultiSetMapBridge, attr::MOI.ListOfConstraintIndices) - return _get(bridge.constraint, attr) +function MOI.get( + bridge::MultiSetMapBridge, + ::MOI.ListOfConstraintIndices{F,S}, +) where {F,S} + if bridge.constraint isa MOI.ConstraintIndex{F,S} + return MOI.ConstraintIndex{F,S}[bridge.constraint] + end + return MOI.ConstraintIndex{F,S}[] end # References