From 8911029040a8b4185259b15ecfdaf58d3e147df4 Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 4 Aug 2021 16:30:29 +1200 Subject: [PATCH 1/4] Test getting CanonicalConstraintFunction --- src/Bridges/Constraint/function_conversion.jl | 12 ++++++++++++ src/Test/test_basic_constraint.jl | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/Bridges/Constraint/function_conversion.jl b/src/Bridges/Constraint/function_conversion.jl index 184c9bccc7..dcbd95e29b 100644 --- a/src/Bridges/Constraint/function_conversion.jl +++ b/src/Bridges/Constraint/function_conversion.jl @@ -49,6 +49,18 @@ function MOI.set( return end +function MOI.get( + model::MOI.ModelLike, + ::MOI.CanonicalConstraintFunction, + bridge::AbstractFunctionConversionBridge, +) + f = MOI.get(model, MOI.ConstraintFunction()) + if !MOI.Utilities.is_canonical(f) + return MOI.Utilities.canonical(f) + end + return f +end + """ invariant_under_function_conversion(attr::MOI.AbstractConstraintAttribute) diff --git a/src/Test/test_basic_constraint.jl b/src/Test/test_basic_constraint.jl index ed5ce276f6..9bab161480 100644 --- a/src/Test/test_basic_constraint.jl +++ b/src/Test/test_basic_constraint.jl @@ -164,6 +164,8 @@ function _basic_constraint_test_helper( ### if _supports(config, MOI.ConstraintFunction) @test MOI.get(model, MOI.ConstraintFunction(), c) ≈ constraint_function + @test MOI.get(model, MOI.CanonicalConstraintFunction(), c) ≈ + constraint_function end ### ### Test MOI.ConstraintSet From 4f59ef8dd27bc12cc824ee07b4647ef809fbd42b Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Wed, 4 Aug 2021 16:49:51 +1200 Subject: [PATCH 2/4] Update function_conversion.jl --- src/Bridges/Constraint/function_conversion.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bridges/Constraint/function_conversion.jl b/src/Bridges/Constraint/function_conversion.jl index dcbd95e29b..a02c2f0a48 100644 --- a/src/Bridges/Constraint/function_conversion.jl +++ b/src/Bridges/Constraint/function_conversion.jl @@ -54,7 +54,7 @@ function MOI.get( ::MOI.CanonicalConstraintFunction, bridge::AbstractFunctionConversionBridge, ) - f = MOI.get(model, MOI.ConstraintFunction()) + f = MOI.get(model, MOI.ConstraintFunction(), bridge) if !MOI.Utilities.is_canonical(f) return MOI.Utilities.canonical(f) end From 68182eb4781b7c585d5749847f32c2790fda7fae Mon Sep 17 00:00:00 2001 From: odow Date: Thu, 5 Aug 2021 11:30:08 +1200 Subject: [PATCH 3/4] ConstraintFunction is never not canonical --- src/Bridges/Constraint/function_conversion.jl | 12 ------------ src/Bridges/Constraint/functionize.jl | 7 +++---- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/src/Bridges/Constraint/function_conversion.jl b/src/Bridges/Constraint/function_conversion.jl index dcbd95e29b..184c9bccc7 100644 --- a/src/Bridges/Constraint/function_conversion.jl +++ b/src/Bridges/Constraint/function_conversion.jl @@ -49,18 +49,6 @@ function MOI.set( return end -function MOI.get( - model::MOI.ModelLike, - ::MOI.CanonicalConstraintFunction, - bridge::AbstractFunctionConversionBridge, -) - f = MOI.get(model, MOI.ConstraintFunction()) - if !MOI.Utilities.is_canonical(f) - return MOI.Utilities.canonical(f) - end - return f -end - """ invariant_under_function_conversion(attr::MOI.AbstractConstraintAttribute) diff --git a/src/Bridges/Constraint/functionize.jl b/src/Bridges/Constraint/functionize.jl index 97f135b121..29b8857c3c 100644 --- a/src/Bridges/Constraint/functionize.jl +++ b/src/Bridges/Constraint/functionize.jl @@ -89,11 +89,10 @@ end function MOI.get( model::MOI.ModelLike, - attr::MOI.ConstraintFunction, + attr::Union{MOI.CanonicalConstraintFunction,MOI.ConstraintFunction}, b::ScalarFunctionizeBridge, ) - f = MOIU.canonical(MOI.get(model, attr, b.constraint)) - return convert(MOI.SingleVariable, f) + return convert(MOI.SingleVariable, MOI.get(model, attr, b.constraint)) end # vector version @@ -201,7 +200,7 @@ end function MOI.get( model::MOI.ModelLike, - attr::MOI.ConstraintFunction, + attr::Union{MOI.CanonicalConstraintFunction,MOI.ConstraintFunction}, b::VectorFunctionizeBridge, ) f = MOI.get(model, attr, b.constraint) From e86f6cc32c9af83874c5ca46fe67092087563981 Mon Sep 17 00:00:00 2001 From: odow Date: Fri, 6 Aug 2021 10:30:26 +1200 Subject: [PATCH 4/4] Fix --- src/Bridges/Constraint/functionize.jl | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Bridges/Constraint/functionize.jl b/src/Bridges/Constraint/functionize.jl index 29b8857c3c..956dd05dc3 100644 --- a/src/Bridges/Constraint/functionize.jl +++ b/src/Bridges/Constraint/functionize.jl @@ -89,7 +89,15 @@ end function MOI.get( model::MOI.ModelLike, - attr::Union{MOI.CanonicalConstraintFunction,MOI.ConstraintFunction}, + attr::MOI.CanonicalConstraintFunction, + b::ScalarFunctionizeBridge, +) + return convert(MOI.SingleVariable, MOI.get(model, attr, b.constraint)) +end + +function MOI.get( + model::MOI.ModelLike, + attr::MOI.ConstraintFunction, b::ScalarFunctionizeBridge, ) return convert(MOI.SingleVariable, MOI.get(model, attr, b.constraint)) @@ -200,7 +208,16 @@ end function MOI.get( model::MOI.ModelLike, - attr::Union{MOI.CanonicalConstraintFunction,MOI.ConstraintFunction}, + attr::MOI.CanonicalConstraintFunction, + b::VectorFunctionizeBridge, +) + f = MOI.get(model, attr, b.constraint) + return MOIU.convert_approx(MOI.VectorOfVariables, f) +end + +function MOI.get( + model::MOI.ModelLike, + attr::MOI.ConstraintFunction, b::VectorFunctionizeBridge, ) f = MOI.get(model, attr, b.constraint)