From c091367397d62dd20c14ef698b6e4f1b80415ed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 3 Apr 2026 21:02:51 +0200 Subject: [PATCH 1/3] Extract set instead of caching it --- src/bridge.jl | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/bridge.jl b/src/bridge.jl index c0d5611..d8292ad 100644 --- a/src/bridge.jl +++ b/src/bridge.jl @@ -15,19 +15,17 @@ from the iterators for each combination and converts each expanded expression to the type `F` declared by the `FunctionGenerator{F}` type parameter. If the expanded expression cannot be converted to `F`, an error is thrown. """ -struct FunctionGeneratorBridge{T,F,S,VS<:MOI.Utilities.VectorLinearSet} <: - MOI.Bridges.Constraint.AbstractBridge +struct FunctionGeneratorBridge{T,F,S} <: MOI.Bridges.Constraint.AbstractBridge constraints::Vector{MOI.ConstraintIndex{F,S}} func::FunctionGenerator{F} - set::VS end function MOI.Bridges.Constraint.bridge_constraint( - ::Type{FunctionGeneratorBridge{T,F,S,VS}}, + ::Type{FunctionGeneratorBridge{T,F,S}}, model::MOI.ModelLike, func::FunctionGenerator{F}, - set::VS, -) where {T,F,S,VS<:MOI.Utilities.VectorLinearSet} + set::MOI.Utilities.VectorLinearSet, +) where {T,F,S} scalar_set = S(zero(T)) constraints = MOI.ConstraintIndex{F,S}[] sizes = Tuple(length.(func.iterators)) @@ -44,7 +42,7 @@ function MOI.Bridges.Constraint.bridge_constraint( ) push!(constraints, ci) end - return FunctionGeneratorBridge{T,F,S,VS}(constraints, func, set) + return FunctionGeneratorBridge{T,F,S}(constraints, func, set) end function MOI.supports_constraint( @@ -61,7 +59,7 @@ function MOI.Bridges.Constraint.concrete_bridge_type( VS::Type{<:MOI.Utilities.VectorLinearSet}, ) where {T,F} S = MOI.Utilities.scalar_set_type(VS, T) - return FunctionGeneratorBridge{T,F,S,VS} + return FunctionGeneratorBridge{T,F,S} end function MOI.Bridges.added_constraint_types( @@ -103,7 +101,10 @@ function MOI.get( ::MOI.ConstraintSet, bridge::FunctionGeneratorBridge, ) - return bridge.set + return MOI.Utilities.set_with_dimension( + MOI.Utilities.vector_set_type(S), + length(bridge.constraints), + ) end function MOI.delete(model::MOI.ModelLike, bridge::FunctionGeneratorBridge) From f67d1b17508afd4c11947ea4df7bb0842cc887c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 3 Apr 2026 21:04:30 +0200 Subject: [PATCH 2/3] Fix --- src/bridge.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridge.jl b/src/bridge.jl index d8292ad..395f087 100644 --- a/src/bridge.jl +++ b/src/bridge.jl @@ -42,7 +42,7 @@ function MOI.Bridges.Constraint.bridge_constraint( ) push!(constraints, ci) end - return FunctionGeneratorBridge{T,F,S}(constraints, func, set) + return FunctionGeneratorBridge{T,F,S}(constraints, func) end function MOI.supports_constraint( From 8d8652644150a2249ec7bf087d2c34c11fb4ec79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Fri, 3 Apr 2026 21:05:11 +0200 Subject: [PATCH 3/3] Fix --- src/bridge.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bridge.jl b/src/bridge.jl index 395f087..fbef641 100644 --- a/src/bridge.jl +++ b/src/bridge.jl @@ -99,8 +99,8 @@ end function MOI.get( ::MOI.ModelLike, ::MOI.ConstraintSet, - bridge::FunctionGeneratorBridge, -) + bridge::FunctionGeneratorBridge{T,F,S}, +) where {T,F,S} return MOI.Utilities.set_with_dimension( MOI.Utilities.vector_set_type(S), length(bridge.constraints),