Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking changes for MOI 0.10.0 #114

Merged
merged 15 commits into from
Sep 7, 2021
Merged

Breaking changes for MOI 0.10.0 #114

merged 15 commits into from
Sep 7, 2021

Conversation

odow
Copy link
Member

@odow odow commented May 3, 2021

No description provided.

@odow
Copy link
Member Author

odow commented May 20, 2021

@blegat current failures are

     Testing Running tests...
linear14: Error During Test at /Users/oscar/.julia/dev/MathOptInterface/src/Test/config.jl:72
  Got exception outside of a @test
  BoundsError: attempt to access 1-element Vector{Int32} at index [2]
  Stacktrace:
    [1] setindex!
      @ ./array.jl:839 [inlined]
    [2] _load_terms(colptr::Vector{Int32}, rowval::Vector{Int32}, nzval::Vector{Float64}, index_map::MathOptInterface.Utilities.IdentityMap, terms::Vector{MathOptInterface.ScalarAffineTerm{Float64}}, offset::Int64)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:148
    [3] load_terms
      @ ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:162 [inlined]
    [4] _load_constraints(dest::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap, offset::Int64, func_sets::Vector{Tuple{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:278
    [5] final_touch(model::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:309
    [6] final_touch
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:819 [inlined]
    [7] default_copy_to(dest::MathOptInterface.Utilities.GenericOptimizer{Float64, MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}}, src::MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}, copy_names::Bool, filter_constraints::Nothing)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:661
    [8] #automatic_copy_to#127
      @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:28 [inlined]
    [9] automatic_copy_to
      @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:27 [inlined]
   [10] #copy_to#225
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
   [11] copy_to
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
   [12] copy_to(dest::Clp.Optimizer, src::MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}; copy_names::Bool)
      @ Clp ~/.julia/dev/Clp/src/MOI_wrapper/MOI_wrapper.jl:352
   [13] attach_optimizer(model::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:193
   [14] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:286
   [15] optimize!
      @ ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:319 [inlined]
   [16] linear14test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
      @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:2513
   [17] macro expansion
      @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
   [18] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [19] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
      @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
   [20] test_contlinear()
      @ Main.TestMOIWrapper ~/.julia/dev/Clp/test/MOI_wrapper.jl:61
   [21] macro expansion
      @ ~/.julia/dev/Clp/test/runtests.jl:9 [inlined]
   [22] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [23] runtests(mod::Module)
      @ Main ~/.julia/dev/Clp/test/runtests.jl:9
   [24] top-level scope
      @ ~/.julia/dev/Clp/test/MOI_wrapper.jl:338
   [25] include(fname::String)
      @ Base.MainInclude ./client.jl:444
   [26] macro expansion
      @ ~/.julia/dev/Clp/test/runtests.jl:15 [inlined]
   [27] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [28] top-level scope
      @ ~/.julia/dev/Clp/test/runtests.jl:15
   [29] include(fname::String)
      @ Base.MainInclude ./client.jl:444
   [30] top-level scope
      @ none:6
   [31] eval
      @ ./boot.jl:360 [inlined]
   [32] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:261
   [33] _start()
      @ Base ./client.jl:485
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:513
  Expression: (MOI.get(model, MOI.ObjectiveValue()), 3, atol = atol, rtol = rtol)
   Evaluated: 4.0  3 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:513
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:519
  Expression: (MOI.get(model, MOI.VariablePrimal(), v), [1, 1, 0], atol = atol, rtol = rtol)
   Evaluated: [0.0, 2.0, 0.0]  [1, 1, 0] (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:519
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:528
  Expression: (MOI.get(model, MOI.ConstraintPrimal(), vc1), 1, atol = atol, rtol = rtol)
   Evaluated: 0.0  1 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:528
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:531
  Expression: (MOI.get(model, MOI.ConstraintPrimal(), vc2), 1, atol = atol, rtol = rtol)
   Evaluated: 2.0  1 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:531
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:540
  Expression: (MOI.get(model, MOI.ConstraintDual(), c), -(T(3 // 2)), atol = atol, rtol = rtol)
   Evaluated: -2.0  -1.5 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:540
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:542
  Expression: (MOI.get(model, MOI.ConstraintDual(), c2), T(1 // 2), atol = atol, rtol = rtol)
   Evaluated: 1.0  0.5 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:542
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear1: Test Failed at /Users/oscar/.julia/dev/MathOptInterface/src/Test/contlinear.jl:549
  Expression: (MOI.get(model, MOI.ConstraintDual(), vc3), T(3 // 2), atol = atol, rtol = rtol)
   Evaluated: 1.0  1.5 (atol=1.4901161193847656e-8, rtol=1.4901161193847656e-8)
Stacktrace:
 [1] linear1test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:549
 [2] macro expansion
   @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
 [3] macro expansion
   @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
 [4] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
   @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
linear5: Error During Test at /Users/oscar/.julia/dev/MathOptInterface/src/Test/config.jl:72
  Got exception outside of a @test
  BoundsError: attempt to access 1-element Vector{Int32} at index [2]
  Stacktrace:
    [1] setindex!
      @ ./array.jl:839 [inlined]
    [2] _load_terms(colptr::Vector{Int32}, rowval::Vector{Int32}, nzval::Vector{Float64}, index_map::MathOptInterface.Utilities.IdentityMap, terms::Vector{MathOptInterface.ScalarAffineTerm{Float64}}, offset::Int64)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:148
    [3] load_terms
      @ ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:162 [inlined]
    [4] _load_constraints(dest::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap, offset::Int64, func_sets::Vector{Tuple{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:278
    [5] final_touch(model::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:309
    [6] final_touch
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:819 [inlined]
    [7] default_copy_to(dest::MathOptInterface.Utilities.GenericOptimizer{Float64, MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}}, src::MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}, copy_names::Bool, filter_constraints::Nothing)
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:661
    [8] #automatic_copy_to#127
      @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:28 [inlined]
    [9] automatic_copy_to
      @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:27 [inlined]
   [10] #copy_to#225
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
   [11] copy_to
      @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
   [12] copy_to(dest::Clp.Optimizer, src::MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}; copy_names::Bool)
      @ Clp ~/.julia/dev/Clp/src/MOI_wrapper/MOI_wrapper.jl:352
   [13] attach_optimizer(model::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:193
   [14] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}})
      @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:286
   [15] optimize!
      @ ~/.julia/dev/MathOptInterface/src/Bridges/bridge_optimizer.jl:319 [inlined]
   [16] linear5test(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64})
      @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/contlinear.jl:1141
   [17] macro expansion
      @ ~/.julia/dev/MathOptInterface/src/Test/config.jl:73 [inlined]
   [18] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [19] contlineartest(model::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}}}}, config::MathOptInterface.Test.TestConfig{Float64}, exclude::Vector{String})
      @ MathOptInterface.Test ~/.julia/dev/MathOptInterface/src/Test/config.jl:73
   [20] test_contlinear()
      @ Main.TestMOIWrapper ~/.julia/dev/Clp/test/MOI_wrapper.jl:61
   [21] macro expansion
      @ ~/.julia/dev/Clp/test/runtests.jl:9 [inlined]
   [22] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [23] runtests(mod::Module)
      @ Main ~/.julia/dev/Clp/test/runtests.jl:9
   [24] top-level scope
      @ ~/.julia/dev/Clp/test/MOI_wrapper.jl:338
   [25] include(fname::String)
      @ Base.MainInclude ./client.jl:444
   [26] macro expansion
      @ ~/.julia/dev/Clp/test/runtests.jl:15 [inlined]
   [27] macro expansion
      @ /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/Test/src/Test.jl:1151 [inlined]
   [28] top-level scope
      @ ~/.julia/dev/Clp/test/runtests.jl:15
   [29] include(fname::String)
      @ Base.MainInclude ./client.jl:444
   [30] top-level scope
      @ none:6
   [31] eval
      @ ./boot.jl:360 [inlined]
   [32] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:261
   [33] _start()
      @ Base ./client.jl:485
(clb_dual, c_dual) = ([1.0, 0.5], -0.5)
(clb_dual, c_dual) = ([-1.0, -0.5], -0.5)
(clb_dual, c_dual) = ([2.0, 1.0], -1.0)
(clb_dual, c_dual) = ([2.0, 1.0], -1.0)
(clb_dual, c_dual) = ([-2.0, -1.0], -1.0)
(clb_dual, c_dual) = ([2.0, 1.0], -1.0)
Test Summary:                    | Pass  Fail  Error  Total
MathOptInterface                 | 1134     7      2   1143
  test_All_parameters            |   27                  27
  test_Nonexistant_unbounded_ray |    1                   1
  test_RawOptimizerAttribute     |    6                   6
  test_SolverName                |    1                   1
  test_basicconstraint           |  132                 132
  test_contlinear                |  486     7      2    495
    linear8a                     |   13                  13
    linear14                     |   34            1     35
    linear6                      |   34                  34
    linear4                      |   24                  24
    linear3                      |   32                  32
    linear9                      |   20                  20
    linear8c                     |   13                  13
    linear1                      |  108     7           115
    linear2                      |   26                  26
    linear12                     |   17                  17
    linear7                      |   22                  22
    linear8b                     |   12                  12
    linear10b                    |   21                  21
    linear10                     |   43                  43
    linear15                     |   11                  11
    linear5                      |   24            1     25
    linear13                     |   16                  16
    linear11                     |   16                  16
  test_copy_to_bug               |    1                   1
  test_emptytest                 |   12                  12
  test_farkas_dual_max           |    7                   7
  test_farkas_dual_max_ii        |    7                   7
  test_farkas_dual_min           |    7                   7
  test_farkas_dual_min_equalto   |    7                   7
  test_farkas_dual_min_ii        |    7                   7
  test_farkas_dual_min_interval  |    7                   7
  test_nametest                  |  110                 110
  test_options_after_empty!      |    3                   3
  test_supports_default_copy_to  |    4                   4
  test_unittest                  |  298                 298
  test_validtest                 |   11                  11
ERROR: LoadError: Some tests did not pass: 1134 passed, 7 failed, 2 errored, 0 broken.
in expression starting at /Users/oscar/.julia/dev/Clp/test/runtests.jl:14
ERROR: Package Clp errored during testing

@odow
Copy link
Member Author

odow commented May 20, 2021

julia> using Clp

julia> const MOI = Clp.MOI
MathOptInterface

julia> model = MOI.Utilities.CachingOptimizer(
           MOI.Utilities.Model{Float64}(),
           Clp.Optimizer(),
       )
MOIU.CachingOptimizer{Clp.Optimizer, MOIU.GenericModel{Float64, MOIU.ModelFunctionConstraints{Float64}}}
in state EMPTY_OPTIMIZER
in mode AUTOMATIC
with model cache MOIU.GenericModel{Float64, MOIU.ModelFunctionConstraints{Float64}}
with optimizer Clp.Optimizer

julia> x = MOI.add_variables(model, 2)
2-element Vector{MathOptInterface.VariableIndex}:
 MathOptInterface.VariableIndex(1)
 MathOptInterface.VariableIndex(2)

julia> MOI.add_constraint(
           model,
           MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.(1.0, x), 0.0),
           MOI.EqualTo(0.0),
       )
MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.EqualTo{Float64}}(1)

julia> MOI.delete(model, x[1])

julia> MOI.optimize!(model)
ERROR: BoundsError: attempt to access 1-element Vector{Int32} at index [2]
Stacktrace:
  [1] setindex!
    @ ./array.jl:839 [inlined]
  [2] _load_terms(colptr::Vector{Int32}, rowval::Vector{Int32}, nzval::Vector{Float64}, index_map::MathOptInterface.Utilities.IdentityMap, terms::Vector{MathOptInterface.ScalarAffineTerm{Float64}}, offset::Int64)
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:148
  [3] load_terms
    @ ~/.julia/dev/MathOptInterface/src/Utilities/sparse_matrix.jl:162 [inlined]
  [4] _load_constraints(dest::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap, offset::Int64, func_sets::Vector{Tuple{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.EqualTo{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:278
  [5] final_touch(model::MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}, index_map::MathOptInterface.Utilities.IndexMap)
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/matrix_of_constraints.jl:309
  [6] final_touch
    @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:819 [inlined]
  [7] default_copy_to(dest::MathOptInterface.Utilities.GenericOptimizer{Float64, MathOptInterface.Utilities.MatrixOfConstraints{Float64, MathOptInterface.Utilities.MutableSparseMatrixCSC{Float64, Int32, MathOptInterface.Utilities.ZeroBasedIndexing}, MathOptInterface.Utilities.Box{Float64}, Clp._LPProductOfSets{Float64}}}, src::MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}, copy_names::Bool, filter_constraints::Nothing)
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:661
  [8] #automatic_copy_to#127
    @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:28 [inlined]
  [9] automatic_copy_to
    @ ~/.julia/dev/MathOptInterface/src/Utilities/copy.jl:27 [inlined]
 [10] #copy_to#225
    @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
 [11] copy_to
    @ ~/.julia/dev/MathOptInterface/src/Utilities/model.jl:815 [inlined]
 [12] copy_to(dest::Clp.Optimizer, src::MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}; copy_names::Bool)
    @ Clp ~/.julia/dev/Clp/src/MOI_wrapper/MOI_wrapper.jl:352
 [13] attach_optimizer(model::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:193
 [14] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{Clp.Optimizer, MathOptInterface.Utilities.GenericModel{Float64, MathOptInterface.Utilities.ModelFunctionConstraints{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/dev/MathOptInterface/src/Utilities/cachingoptimizer.jl:286
 [15] top-level scope
    @ REPL[228]:1

@odow odow mentioned this pull request May 24, 2021
@odow
Copy link
Member Author

odow commented May 24, 2021

Tests passing on master:
image

@odow odow marked this pull request as ready for review May 25, 2021 01:40
@odow odow changed the title WIP: Breaking changes for MOI 0.10.0 DNMY: Breaking changes for MOI 0.10.0 May 25, 2021
@odow
Copy link
Member Author

odow commented May 25, 2021

@blegat, can you clarify how Clp is intended to use MatrixOfConstraints?

No bridges

If there are no bridges, JuMP will use:

MOI.Utilities.CachingOptimizer(
    MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
    Clp.Optimizer(),
)

On copy_to, Clp will create an OptimizerCache, copy from Model to OptimizerCache, and then from OptimizerCache to `Optimizer.

Bridge Option 1

Option 1 is what we currently have:

MOI.Utilities.CachingOptimizer(
    MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
    MOI.full_bridge_optimizer(
        MOI.Utilities.CachingOptimizer(
            MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
            Clp.Optimizer(),
        ),
        Float64,
    )
)

Bridge Option 2

The other option is to have the OptimizerCache as the inner optimizer.

MOI.Utilities.CachingOptimizer(
    MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}()),
    MOI.full_bridge_optimizer(
        MOI.Utilities.CachingOptimizer(
            MOI.Utilities.UniversalFallback(Clp.OptimizerCache()),
            Clp.Optimizer(),
        ),
        Float64,
    )
)

But now if we attach the Clp.Optimizer, then add a new constraint, we have to re-bridge everything because the OptimizerCache doesn't support the incremental interface. (I think there's also a bug: the MatrixOfConstraints should throw and error if the incremental interface is called after copy_to has been called.

@blegat
Copy link
Member

blegat commented Jun 3, 2021

We should go with option 1. If you are going to modify, etc... through bridging, it's not even clear what's the best option as modifying through bridge might be slow.

@codecov
Copy link

codecov bot commented Jun 26, 2021

Codecov Report

Merging #114 (c1235e8) into master (54ce473) will decrease coverage by 1.05%.
The diff coverage is 81.66%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master     #114      +/-   ##
==========================================
- Coverage   89.78%   88.73%   -1.06%     
==========================================
  Files           2        2              
  Lines         333      284      -49     
==========================================
- Hits          299      252      -47     
+ Misses         34       32       -2     
Impacted Files Coverage Δ
src/MOI_wrapper/MOI_wrapper.jl 89.36% <81.66%> (-0.98%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 54ce473...c1235e8. Read the comment docs.

@odow odow changed the title DNMY: Breaking changes for MOI 0.10.0 Breaking changes for MOI 0.10.0 Sep 7, 2021
@odow odow merged commit c1ace9d into master Sep 7, 2021
@odow odow deleted the od/moi10 branch September 7, 2021 22:16
@odow odow mentioned this pull request Nov 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants