Skip to content

Getting ConstraintFunction on norm cones with nonlinear functions fails #2323

@blegat

Description

@blegat

Found when doing JuliaSmoothOptimizers/NLPModelsJuMP.jl#171

test_basic_VectorNonlinearFunction_NormInfinityCone: Error During Test at /home/blegat/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:255
  Got exception outside of a @test
  MethodError: no method matching +(::MathOptInterface.ScalarNonlinearFunction, ::MathOptInterface.ScalarNonlinearFunction)
  
  Closest candidates are:
    +(::Any, ::Any, ::Any, ::Any...)
     @ Base operators.jl:578
    +(::MutableArithmetics.Zero, ::Any)
     @ MutableArithmetics ~/.julia/packages/MutableArithmetics/K9YPJ/src/rewrite.jl:60
    +(::Any, ::MutableArithmetics.Zero)
     @ MutableArithmetics ~/.julia/packages/MutableArithmetics/K9YPJ/src/rewrite.jl:61
  
  Stacktrace:
    [1] add_sum(x::MathOptInterface.ScalarNonlinearFunction, y::MathOptInterface.ScalarNonlinearFunction)
      @ Base ./reduce.jl:24
    [2] BottomRF
      @ ./reduce.jl:81 [inlined]
    [3] _foldl_impl
      @ ./reduce.jl:62 [inlined]
    [4] foldl_impl
      @ ./reduce.jl:48 [inlined]
    [5] mapfoldl_impl
      @ ./reduce.jl:44 [inlined]
    [6] #mapfoldl#288
      @ ./reduce.jl:170 [inlined]
    [7] mapfoldl
      @ ./reduce.jl:170 [inlined]
    [8] #mapreduce#292
      @ ./reduce.jl:302 [inlined]
    [9] mapreduce
      @ ./reduce.jl:302 [inlined]
   [10] #sum#295
      @ ./reduce.jl:530 [inlined]
   [11] sum
      @ ./reduce.jl:530 [inlined]
   [12] #sum#296
      @ ./reduce.jl:559 [inlined]
   [13] sum
      @ ./reduce.jl:559 [inlined]
   [14] inverse_map_function(#unused#::Type{MathOptInterface.Bridges.Constraint.NormInfinityBridge{Float64, MathOptInterface.VectorNonlinearFunction, MathOptInterface.VectorNonlinearFunction}}, func::MathOptInterface.VectorNonlinearFunction)
      @ MathOptInterface.Bridges.Constraint ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Constraint/bridges/norm_infinity.jl:79
   [15] get(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, attr::MathOptInterface.ConstraintFunction, bridge::MathOptInterface.Bridges.Constraint.NormInfinityBridge{Float64, MathOptInterface.VectorNonlinearFunction, MathOptInterface.VectorNonlinearFunction})
      @ MathOptInterface.Bridges.Constraint ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Constraint/set_map.jl:105
   [16] (::MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}})(bridge::MathOptInterface.Bridges.Constraint.NormInfinityBridge{Float64, MathOptInterface.VectorNonlinearFunction, MathOptInterface.VectorNonlinearFunction})
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:335
   [17] (::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormInfinityCone}, MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}}})()
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:320
   [18] call_in_context(map::MathOptInterface.Bridges.Variable.Map, bridge_index::Int64, f::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormInfinityCone}, MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}}})
      @ MathOptInterface.Bridges.Variable ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Variable/map.jl:473
   [19] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Variable/map.jl:504 [inlined]
   [20] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:317 [inlined]
   [21] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:332 [inlined]
   [22] get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, attr::MathOptInterface.ConstraintFunction, ci::MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormInfinityCone})
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:1331
   [23] _basic_constraint_test_helper(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64}, #unused#::Type{MathOptInterface.VectorNonlinearFunction}, #unused#::Type{MathOptInterface.NormInfinityCone})
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/test_basic_constraint.jl:227
   [24] test_basic_VectorNonlinearFunction_NormInfinityCone(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64})
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/test_basic_constraint.jl:361
   [25] macro expansion
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:261 [inlined]
   [26] macro expansion
      @ ~/.julia/juliaup/julia-1.9.3+0.x64.linux.gnu/share/julia/stdlib/v1.9/Test/src/Test.jl:1498 [inlined]
   [27] runtests(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64}; include::Vector{String}, exclude::Vector{Regex}, warn_unsupported::Bool, exclude_tests_after::VersionNumber)
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:256
   [28] runtests
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:220 [inlined]
   [29] test_runtests()
      @ Main.TestMOI ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:27
   [30] macro expansion
      @ ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:136 [inlined]
   [31] macro expansion
      @ ~/.julia/juliaup/julia-1.9.3+0.x64.linux.gnu/share/julia/stdlib/v1.9/Test/src/Test.jl:1498 [inlined]
   [32] runtests()
      @ Main.TestMOI ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:136
   [33] top-level scope
      @ ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:145
   [34] include(fname::String)
      @ Base.MainInclude ./client.jl:478
   [35] top-level scope
      @ REPL[4]:1
   [36] eval
      @ ./boot.jl:370 [inlined]
   [37] eval
      @ ./Base.jl:68 [inlined]
   [38] repleval(m::Module, code::Expr, #unused#::String)
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:229
   [39] (::VSCodeServer.var"#110#112"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:192
   [40] with_logstate(f::Function, logstate::Any)
      @ Base.CoreLogging ./logging.jl:514
   [41] with_logger
      @ ./logging.jl:626 [inlined]
   [42] (::VSCodeServer.var"#109#111"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:193
   [43] #invokelatest#2
      @ ./essentials.jl:819 [inlined]
   [44] invokelatest(::Any)
      @ Base ./essentials.jl:816
   [45] macro expansion
      @ ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/eval.jl:34 [inlined]
   [46] (::VSCodeServer.var"#62#63")()
      @ VSCodeServer ./task.jl:514
test_basic_VectorNonlinearFunction_NormOneCone: Error During Test at /home/blegat/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:255
  Got exception outside of a @test
  MethodError: no method matching +(::MathOptInterface.ScalarNonlinearFunction, ::MathOptInterface.ScalarNonlinearFunction)
  
  Closest candidates are:
    +(::Any, ::Any, ::Any, ::Any...)
     @ Base operators.jl:578
    +(::MutableArithmetics.Zero, ::Any)
     @ MutableArithmetics ~/.julia/packages/MutableArithmetics/K9YPJ/src/rewrite.jl:60
    +(::Any, ::MutableArithmetics.Zero)
     @ MutableArithmetics ~/.julia/packages/MutableArithmetics/K9YPJ/src/rewrite.jl:61
  
  Stacktrace:
    [1] add_sum(x::MathOptInterface.ScalarNonlinearFunction, y::MathOptInterface.ScalarNonlinearFunction)
      @ Base ./reduce.jl:24
    [2] BottomRF
      @ ./reduce.jl:81 [inlined]
    [3] _foldl_impl
      @ ./reduce.jl:62 [inlined]
    [4] foldl_impl
      @ ./reduce.jl:48 [inlined]
    [5] mapfoldl_impl
      @ ./reduce.jl:44 [inlined]
    [6] #mapfoldl#288
      @ ./reduce.jl:170 [inlined]
    [7] mapfoldl
      @ ./reduce.jl:170 [inlined]
    [8] #mapreduce#292
      @ ./reduce.jl:302 [inlined]
    [9] mapreduce
      @ ./reduce.jl:302 [inlined]
   [10] #sum#295
      @ ./reduce.jl:530 [inlined]
   [11] sum
      @ ./reduce.jl:530 [inlined]
   [12] #sum#296
      @ ./reduce.jl:559 [inlined]
   [13] sum(a::MathOptInterface.Utilities.ScalarFunctionIterator{MathOptInterface.VectorNonlinearFunction, Nothing})
      @ Base ./reduce.jl:559
   [14] get(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, #unused#::MathOptInterface.ConstraintFunction, c::MathOptInterface.Bridges.Constraint.NormOneBridge{Float64, MathOptInterface.VectorNonlinearFunction, MathOptInterface.VectorNonlinearFunction})
      @ MathOptInterface.Bridges.Constraint ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Constraint/bridges/norm_one.jl:119
   [15] (::MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}})(bridge::MathOptInterface.Bridges.Constraint.NormOneBridge{Float64, MathOptInterface.VectorNonlinearFunction, MathOptInterface.VectorNonlinearFunction})
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:335
   [16] (::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormOneCone}, MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}}})()
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:320
   [17] call_in_context(map::MathOptInterface.Bridges.Variable.Map, bridge_index::Int64, f::MathOptInterface.Bridges.var"#1#2"{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormOneCone}, MathOptInterface.Bridges.var"#3#4"{typeof(MathOptInterface.get), MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.ConstraintFunction, Tuple{}}})
      @ MathOptInterface.Bridges.Variable ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Variable/map.jl:473
   [18] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/Variable/map.jl:504 [inlined]
   [19] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:317 [inlined]
   [20] call_in_context
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:332 [inlined]
   [21] get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, attr::MathOptInterface.ConstraintFunction, ci::MathOptInterface.ConstraintIndex{MathOptInterface.VectorNonlinearFunction, MathOptInterface.NormOneCone})
      @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/pgWRA/src/Bridges/bridge_optimizer.jl:1331
   [22] _basic_constraint_test_helper(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64}, #unused#::Type{MathOptInterface.VectorNonlinearFunction}, #unused#::Type{MathOptInterface.NormOneCone})
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/test_basic_constraint.jl:227
   [23] test_basic_VectorNonlinearFunction_NormOneCone(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64})
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/test_basic_constraint.jl:361
   [24] macro expansion
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:261 [inlined]
   [25] macro expansion
      @ ~/.julia/juliaup/julia-1.9.3+0.x64.linux.gnu/share/julia/stdlib/v1.9/Test/src/Test.jl:1498 [inlined]
   [26] runtests(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{NLPModelsJuMP.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, config::MathOptInterface.Test.Config{Float64}; include::Vector{String}, exclude::Vector{Regex}, warn_unsupported::Bool, exclude_tests_after::VersionNumber)
      @ MathOptInterface.Test ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:256
   [27] runtests
      @ ~/.julia/packages/MathOptInterface/pgWRA/src/Test/Test.jl:220 [inlined]
   [28] test_runtests()
      @ Main.TestMOI ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:27
   [29] macro expansion
      @ ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:136 [inlined]
   [30] macro expansion
      @ ~/.julia/juliaup/julia-1.9.3+0.x64.linux.gnu/share/julia/stdlib/v1.9/Test/src/Test.jl:1498 [inlined]
   [31] runtests()
      @ Main.TestMOI ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:136
   [32] top-level scope
      @ ~/.julia/dev/NLPModelsJuMP/test/MOI_wrapper.jl:145
   [33] include(fname::String)
      @ Base.MainInclude ./client.jl:478
   [34] top-level scope
      @ REPL[4]:1
   [35] eval
      @ ./boot.jl:370 [inlined]
   [36] eval
      @ ./Base.jl:68 [inlined]
   [37] repleval(m::Module, code::Expr, #unused#::String)
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:229
   [38] (::VSCodeServer.var"#110#112"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:192
   [39] with_logstate(f::Function, logstate::Any)
      @ Base.CoreLogging ./logging.jl:514
   [40] with_logger
      @ ./logging.jl:626 [inlined]
   [41] (::VSCodeServer.var"#109#111"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
      @ VSCodeServer ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/repl.jl:193
   [42] #invokelatest#2
      @ ./essentials.jl:819 [inlined]
   [43] invokelatest(::Any)
      @ Base ./essentials.jl:816
   [44] macro expansion
      @ ~/.vscode-oss/extensions/julialang.language-julia-1.54.2-universal/scripts/packages/VSCodeServer/src/eval.jl:34 [inlined]
   [45] (::VSCodeServer.var"#62#63")()
      @ VSCodeServer ./task.jl:514

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions