From 6607736dd77fc96678ac1f85728057609b21c39d Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Tue, 19 Mar 2019 10:47:51 +0100 Subject: [PATCH 1/7] overload MOI.set & MOI.supports for ConstraintAttribute in bridgeoptimizer --- src/Bridges/bridgeoptimizer.jl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index ca7b9290b0..2096e229ae 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -236,6 +236,16 @@ function MOI.get(b::AbstractBridgeOptimizer, MOI.get(b.model, attr, ci) end end +function MOI.supports(b::AbstractBridgeOptimizer, + attr::MOI.AbstractConstraintAttribute, + IndexType::Type{<:MOI.Index}) + return MOI.supports(b.model, attr, IndexType) +end +function MOI.set(b::AbstractBridgeOptimizer, + attr::MOI.AbstractConstraintAttribute, + index::MOI.Index, value) + return MOI.set(b.model, attr, index, value) +end ## Setting names function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, Index::Type{<:CI}) From 0f960754d2b75868f7667148ce2b62d6090278de Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Fri, 29 Mar 2019 15:28:12 +0100 Subject: [PATCH 2/7] branch if is_bridged --- src/Bridges/bridgeoptimizer.jl | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 2096e229ae..5e295da1da 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -239,12 +239,25 @@ end function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, IndexType::Type{<:MOI.Index}) - return MOI.supports(b.model, attr, IndexType) + if is_bridged(b, IndexType) + return MOI.supports(b.bridged, attr, IndexType) + else + return MOI.supports(b.model, attr, IndexType) + end end + function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, index::MOI.Index, value) - return MOI.set(b.model, attr, index, value) + if is_bridged(b, typeof(index)) + if MOI.is_set_by_optimize(attr) + return MOI.set(b, attr, bridge(b, index), value) + else + return MOI.set(b.bridged, attr, index, value) + end + else + return MOI.set(b.model, attr, index, value) + end end ## Setting names function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, From a3cbd38c8d9169bf6888e98675864402561c8e43 Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Sun, 31 Mar 2019 14:29:59 +0200 Subject: [PATCH 3/7] fix --- src/Bridges/bridgeoptimizer.jl | 62 ++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 5e295da1da..42bae8ab59 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -222,15 +222,21 @@ function MOI.set(b::AbstractBridgeOptimizer, return MOI.set(b.model, attr, indices, values) end +# function MOI.get(::MOI.ModelLike, attr::MOI.AbstractConstraintAttribute, +# bridge::AbstractBridge) +# throw(ArgumentError("Constraint bridge of type `$(typeof(bridge))` does not support accessing the attribute `$attr`.")) +# end + # Constraint attributes function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, ci::CI) if is_bridged(b, typeof(ci)) - if MOI.is_set_by_optimize(attr) - MOI.get(b, attr, bridge(b, ci)) - else + if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || + attr isa MOI.ConstraintSet MOI.get(b.bridged, attr, ci) + else + MOI.get(b, attr, bridge(b, ci)) end else MOI.get(b.model, attr, ci) @@ -238,9 +244,14 @@ function MOI.get(b::AbstractBridgeOptimizer, end function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, - IndexType::Type{<:MOI.Index}) + IndexType::Type{CI{F, S}}) where {F,S} if is_bridged(b, IndexType) - return MOI.supports(b.bridged, attr, IndexType) + if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || + attr isa MOI.ConstraintSet + return MOI.supports(b.bridged, attr, IndexType) + else + return MOI.supports(b, attr, concrete_bridge_type(b, F, S)) + end else return MOI.supports(b.model, attr, IndexType) end @@ -248,34 +259,35 @@ end function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, - index::MOI.Index, value) + index::CI, value) if is_bridged(b, typeof(index)) - if MOI.is_set_by_optimize(attr) - return MOI.set(b, attr, bridge(b, index), value) - else + if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || + attr isa MOI.ConstraintName return MOI.set(b.bridged, attr, index, value) + else + return MOI.set(b, attr, bridge(b, index), value) end else return MOI.set(b.model, attr, index, value) end end ## Setting names -function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, - Index::Type{<:CI}) - if is_bridged(b, Index) - return MOI.supports(b.bridged, attr, Index) - else - return MOI.supports(b.model, attr, Index) - end -end -function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, - constraint_index::CI, name::String) - if is_bridged(b, typeof(constraint_index)) - MOI.set(b.bridged, attr, constraint_index, name) - else - MOI.set(b.model, attr, constraint_index, name) - end -end +# function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, +# Index::Type{<:CI}) +# if is_bridged(b, Index) +# return MOI.supports(b.bridged, attr, Index) +# else +# return MOI.supports(b.model, attr, Index) +# end +# end +# function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, +# constraint_index::CI, name::String) +# if is_bridged(b, typeof(constraint_index)) +# MOI.set(b.bridged, attr, constraint_index, name) +# else +# MOI.set(b.model, attr, constraint_index, name) +# end +# end ## Setting functions and sets function MOI.set(b::AbstractBridgeOptimizer, ::MOI.ConstraintSet, constraint_index::CI{F, S}, set::S) where {F, S} From b389a834168f6e6a2127c62748098ada3ba1fa55 Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Mon, 1 Apr 2019 17:33:41 +0200 Subject: [PATCH 4/7] fix --- src/Bridges/bridgeoptimizer.jl | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 42bae8ab59..bf583d7689 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -222,11 +222,6 @@ function MOI.set(b::AbstractBridgeOptimizer, return MOI.set(b.model, attr, indices, values) end -# function MOI.get(::MOI.ModelLike, attr::MOI.AbstractConstraintAttribute, -# bridge::AbstractBridge) -# throw(ArgumentError("Constraint bridge of type `$(typeof(bridge))` does not support accessing the attribute `$attr`.")) -# end - # Constraint attributes function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, @@ -246,8 +241,7 @@ function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, IndexType::Type{CI{F, S}}) where {F,S} if is_bridged(b, IndexType) - if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || - attr isa MOI.ConstraintSet + if attr isa MOI.ConstraintName return MOI.supports(b.bridged, attr, IndexType) else return MOI.supports(b, attr, concrete_bridge_type(b, F, S)) @@ -261,8 +255,7 @@ function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, index::CI, value) if is_bridged(b, typeof(index)) - if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || - attr isa MOI.ConstraintName + if attr isa MOI.ConstraintName return MOI.set(b.bridged, attr, index, value) else return MOI.set(b, attr, bridge(b, index), value) From 51b37eefb547dbe92af695dd6019fd1388bc9650 Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Tue, 2 Apr 2019 17:58:13 +0200 Subject: [PATCH 5/7] fix --- src/Bridges/bridgeoptimizer.jl | 80 +++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index bf583d7689..1425f2c43a 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -227,25 +227,16 @@ function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, ci::CI) if is_bridged(b, typeof(ci)) - if attr isa MOI.ConstraintName || attr isa MOI.ConstraintFunction || - attr isa MOI.ConstraintSet - MOI.get(b.bridged, attr, ci) - else - MOI.get(b, attr, bridge(b, ci)) - end + return MOI.get(b, attr, bridge(b, ci)) else - MOI.get(b.model, attr, ci) + return MOI.get(b.model, attr, ci) end end function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, IndexType::Type{CI{F, S}}) where {F,S} if is_bridged(b, IndexType) - if attr isa MOI.ConstraintName - return MOI.supports(b.bridged, attr, IndexType) - else - return MOI.supports(b, attr, concrete_bridge_type(b, F, S)) - end + return MOI.supports(b, attr, concrete_bridge_type(b, F, S)) else return MOI.supports(b.model, attr, IndexType) end @@ -255,32 +246,53 @@ function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.AbstractConstraintAttribute, index::CI, value) if is_bridged(b, typeof(index)) - if attr isa MOI.ConstraintName - return MOI.set(b.bridged, attr, index, value) - else - return MOI.set(b, attr, bridge(b, index), value) - end + return MOI.set(b, attr, bridge(b, index), value) else return MOI.set(b.model, attr, index, value) end end -## Setting names -# function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, -# Index::Type{<:CI}) -# if is_bridged(b, Index) -# return MOI.supports(b.bridged, attr, Index) -# else -# return MOI.supports(b.model, attr, Index) -# end -# end -# function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, -# constraint_index::CI, name::String) -# if is_bridged(b, typeof(constraint_index)) -# MOI.set(b.bridged, attr, constraint_index, name) -# else -# MOI.set(b.model, attr, constraint_index, name) -# end -# end +## Getting and Setting names +function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, + constraint_index::CI) + if is_bridged(b, typeof(constraint_index)) + return MOI.get(b.bridged, attr, constraint_index) + else + return MOI.get(b.model, attr, constraint_index) + end +end + +function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, + Index::Type{CI{F, S}}) where {F,S} + if is_bridged(b, Index) + return MOI.supports(b.bridged, attr, Index) + else + return MOI.supports(b.model, attr, Index) + end +end +function MOI.set(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, + constraint_index::CI, name::String) + if is_bridged(b, typeof(constraint_index)) + MOI.set(b.bridged, attr, constraint_index, name) + else + MOI.set(b.model, attr, constraint_index, name) + end +end +## Getting functions and sets +function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintSet, ci::CI) + if is_bridged(b, typeof(ci)) + return MOI.get(b.bridged, attr, ci) + else + return MOI.get(b.model, attr, ci) + end +end +function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintFunction, + ci::CI) + if is_bridged(b, typeof(ci)) + return MOI.get(b.bridged, attr, ci) + else + return MOI.get(b.model, attr, ci) + end +end ## Setting functions and sets function MOI.set(b::AbstractBridgeOptimizer, ::MOI.ConstraintSet, constraint_index::CI{F, S}, set::S) where {F, S} From 098b5a21eb5003f0df182b926fb53fe819daac42 Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Mon, 8 Apr 2019 10:35:05 +0200 Subject: [PATCH 6/7] typos --- src/Bridges/bridgeoptimizer.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 1425f2c43a..7056654e6c 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -262,7 +262,7 @@ function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, end function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, - Index::Type{CI{F, S}}) where {F,S} + Index::Type{<:CI}) if is_bridged(b, Index) return MOI.supports(b.bridged, attr, Index) else @@ -286,7 +286,7 @@ function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintSet, ci::CI) end end function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintFunction, - ci::CI) + ci::CI) if is_bridged(b, typeof(ci)) return MOI.get(b.bridged, attr, ci) else From 1f1503f02fd31287628336c0319ca2bd2afce3c3 Mon Sep 17 00:00:00 2001 From: Guillaume Marques Date: Mon, 8 Apr 2019 11:05:28 +0200 Subject: [PATCH 7/7] fix ambiguous name method error --- src/Bridges/bridgeoptimizer.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Bridges/bridgeoptimizer.jl b/src/Bridges/bridgeoptimizer.jl index 7056654e6c..1444dc71c7 100644 --- a/src/Bridges/bridgeoptimizer.jl +++ b/src/Bridges/bridgeoptimizer.jl @@ -262,7 +262,7 @@ function MOI.get(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, end function MOI.supports(b::AbstractBridgeOptimizer, attr::MOI.ConstraintName, - Index::Type{<:CI}) + Index::Type{CI{F,S}}) where {F,S} if is_bridged(b, Index) return MOI.supports(b.bridged, attr, Index) else