Skip to content

Bridges fail test_constraint_ConstraintPrimalStart #1433

@odow

Description

@odow

Fairly sure this is a bug in the bridges somewhere that isn't accounting for the fact that ConstraintPrimalStart and ConstraintDualStart can be Nothing:

using Ipopt
const MOI = Ipopt.MOI

julia> MOI.Test.test_constraint_ConstraintPrimalStart(
           MOI.Bridges.full_bridge_optimizer(
               MOI.Utilities.CachingOptimizer(
                   MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
                   Ipopt.Optimizer(), 
               ),
               Float64,
           ), 
           MOI.Test.Config(),
       )
Error During Test at /Users/oscar/.julia/dev/MathOptInterface/src/Test/test_constraint.jl:737
  Test threw exception
  Expression: MOI.get(model, MOI.ConstraintPrimalStart(), c) === nothing
  MethodError: no method matching +(::Nothing, ::Float64)
  Closest candidates are:
    +(::Any, ::Any, ::Any, ::Any...) at operators.jl:560
    +(::Union{MathOptInterface.ScalarAffineFunction{T}, MathOptInterface.ScalarQuadraticFunction{T}}, ::T) where T at /Users/oscar/.julia/dev/MathOptInterface/src/Utilities/functions.jl:1752
    +(::Base.TwicePrecision, ::Number) at twiceprecision.jl:267
    ...
  Stacktrace:
    [1] _broadcast_getindex_evalf
      @ ./broadcast.jl:648 [inlined]
    [2] _broadcast_getindex
      @ ./broadcast.jl:621 [inlined]
    [3] getindex
      @ ./broadcast.jl:575 [inlined]
    [4] copy
      @ ./broadcast.jl:922 [inlined]
    [5] materialize
      @ ./broadcast.jl:883 [inlined]
    [6] get(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, attr::MathOptInterface.ConstraintPrimalStart, bridge::MathOptInterface.Bridges.Constraint.ScalarizeBridge{Float64, MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.GreaterThan{Float64}})
      @ MathOptInterface.Bridges.Constraint ~/.julia/dev/MathOptInterface/src/Bridges/Constraint/scalarize.jl:134
    [7] (::MathOptInterface.Bridges.var"#55#56"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, MathOptInterface.ConstraintPrimalStart})(bridge::MathOptInterface.Bridges.Constraint.ScalarizeBridge{Float64, MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.GreaterThan{Float64}})
      @ MathOptInterface.Bridges ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:1212
    [8] (::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives}, MathOptInterface.Bridges.var"#55#56"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, MathOptInterface.ConstraintPrimalStart}})()
      @ MathOptInterface.Bridges ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:291
    [9] call_in_context(map::MathOptInterface.Bridges.Variable.Map, bridge_index::Int64, f::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives}, MathOptInterface.Bridges.var"#55#56"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, MathOptInterface.ConstraintPrimalStart}})
      @ MathOptInterface.Bridges.Variable ~/.julia/dev/MathOptInterface/src/Bridges/Variable/map.jl:455
   [10] call_in_context
      @ ~/.julia/dev/MathOptInterface/src/Bridges/Variable/map.jl:486 [inlined]
   [11] call_in_context
      @ ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:288 [inlined]
   [12] get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, attr::MathOptInterface.ConstraintPrimalStart, ci::MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives})
      @ MathOptInterface.Bridges ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:1212
   [13] test_constraint_ConstraintPrimalStart(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Ipopt.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, #unused#::MathOptInterface.Test.Config{Float64})
      @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/test_constraint.jl:737
   [14] top-level scope
      @ REPL[10]:1
   [15] eval
      @ ./boot.jl:360 [inlined]
   [16] eval_user_input(ast::Any, backend::REPL.REPLBackend)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:139
   [17] repl_backend_loop(backend::REPL.REPLBackend)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:200
   [18] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:185
   [19] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:317
   [20] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/REPL/src/REPL.jl:305
   [21] (::Base.var"#874#876"{Bool, Bool, Bool})(REPL::Module)
      @ Base ./client.jl:387
   [22] #invokelatest#2
      @ ./essentials.jl:708 [inlined]
   [23] invokelatest
      @ ./essentials.jl:706 [inlined]
   [24] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base ./client.jl:372
   [25] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:302
   [26] _start()
      @ Base ./client.jl:485
ERROR: There was an error during testing

This also happens with test_constraint_ConstraintPrimalStart.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions