Skip to content

Chaining bridges doesn't work #1185

@chriscoey

Description

@chriscoey

If I run ]test on Hypatia on the branch https://github.com/chriscoey/Hypatia.jl/blob/318a20dd7f9c19ac62eb6914e1bdf6624439c25e/test/moi.jl#L76, with MOI dev'd on branch from #1178, I get an error from MOI:

  Test threw exception
  Expression: ≈(MOI.get(model, MOI.ConstraintPrimal(), gmc), [2.0; 2.0], atol = atol, rtol = rtol)
  
  Stacktrace:
   [1] throw_if_not_valid at /Users/coey/.julia/dev/MathOptInterface/src/indextypes.jl:75 [inlined]
   [2] get(::MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.RelativeEntropyBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.GeoMeantoRelEntrBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Utilities.CachingOptimizer{Hypatia.Optimizer{Float64},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}}, ::MathOptInterface.ConstraintPrimal, ::MathOptInterface.ConstraintIndex{MathOptInterface.VectorOfVariables,MathOptInterface.GeometricMeanCone}) at /Users/coey/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:919
   [3] _geomean3test(::MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.RelativeEntropyBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.GeoMeantoRelEntrBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Utilities.CachingOptimizer{Hypatia.Optimizer{Float64},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}}, ::MathOptInterface.Test.TestConfig{Float64}, ::Bool) at /Users/coey/.julia/dev/MathOptInterface/src/Test/contconic.jl:1546
   [4] geomean3vtest(::MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.RelativeEntropyBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.GeoMeantoRelEntrBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Utilities.CachingOptimizer{Hypatia.Optimizer{Float64},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}}, ::MathOptInterface.Test.TestConfig{Float64}) at /Users/coey/.julia/dev/MathOptInterface/src/Test/contconic.jl:1556
   [5] macro expansion at /Users/coey/.julia/dev/MathOptInterface/src/Test/config.jl:48 [inlined]
   [6] macro expansion at /Users/coey/julia/usr/share/julia/stdlib/v1.5/Test/src/Test.jl:1115 [inlined]
   [7] geomeantest(::MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.RelativeEntropyBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{MathOptInterface.Bridges.Constraint.GeoMeantoRelEntrBridge{Float64,F,G,H} where H where G where F,MathOptInterface.Utilities.CachingOptimizer{Hypatia.Optimizer{Float64},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}}, ::MathOptInterface.Test.TestConfig{Float64}, ::Array{String,1}) at /Users/coey/.julia/dev/MathOptInterface/src/Test/config.jl:48

specifically, excluding all conic tests except the geomean tests, the failure happens on the second line below but not the first:

MOIT.contconictest(MOI.Bridges.Constraint.GeoMeantoRelEntr{T}(MOI.Bridges.Constraint.RelativeEntropy{T}(optimizer)), config, conic_exclude)
MOIT.contconictest(MOI.Bridges.Constraint.RelativeEntropy{T}(MOI.Bridges.Constraint.GeoMeantoRelEntr{T}(optimizer)), config, conic_exclude)

with the only difference being the order of application of those two bridges. The first line successfully bridges the geomean cone to exponential cones via the relative entropy cone (see #1178).
@blegat my guess is this isn't a problem introduced in #1178 so hopefully it doesn't block that.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions