From ffa24606aadf6f8321ce7c2458fddae3224827a3 Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 24 Nov 2021 12:27:37 +1300 Subject: [PATCH 1/3] Fix bug in CachingOptimizer ConstraintPrimal --- src/Utilities/cachingoptimizer.jl | 10 ++++++++-- test/Utilities/cachingoptimizer.jl | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index 2542ac1da1..8a3175a1fe 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -907,7 +907,10 @@ function MOI.get( attr, model.model_to_optimizer_map[index], ) - catch + catch err + if err isa MOI.ResultIndexBoundsError + rethrow(err) + end return get_fallback(model, attr, index) end end @@ -929,7 +932,10 @@ function MOI.get( attr, [model.model_to_optimizer_map[i] for i in indices], ) - catch + catch err + if err isa MOI.ResultIndexBoundsError + rethrow(err) + end return [get_fallback(model, attr, i) for i in indices] end end diff --git a/test/Utilities/cachingoptimizer.jl b/test/Utilities/cachingoptimizer.jl index 08fb022f64..324cc9e00c 100644 --- a/test/Utilities/cachingoptimizer.jl +++ b/test/Utilities/cachingoptimizer.jl @@ -845,6 +845,14 @@ function test_ConstraintPrimal_fallback() MOI.optimize!(model) @test MOI.get(model, MOI.ConstraintPrimal(), c) == 1.2 @test MOI.get(model, MOI.ConstraintPrimal(), [c]) == [1.2] + @test_throws( + MOI.ResultIndexBoundsError(MOI.ConstraintPrimal(2), 1), + MOI.get(model, MOI.ConstraintPrimal(2), c), + ) + @test_throws( + MOI.ResultIndexBoundsError(MOI.ConstraintPrimal(2), 1), + MOI.get(model, MOI.ConstraintPrimal(2), [c]), + ) return end From 7dd7620219aaa1a9c484c86ea1d66be1f761e4cc Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 24 Nov 2021 13:48:46 +1300 Subject: [PATCH 2/3] Fix --- src/Utilities/cachingoptimizer.jl | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index 8a3175a1fe..2826f56413 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -901,16 +901,14 @@ function MOI.get( "optimizer is attached.", ) end + MOI.check_result_index_bounds(model, attr) try return MOI.get( model.optimizer, attr, model.model_to_optimizer_map[index], ) - catch err - if err isa MOI.ResultIndexBoundsError - rethrow(err) - end + catch return get_fallback(model, attr, index) end end @@ -926,16 +924,14 @@ function MOI.get( "optimizer is attached.", ) end + MOI.check_result_index_bounds(model, attr) try return MOI.get( model.optimizer, attr, [model.model_to_optimizer_map[i] for i in indices], ) - catch err - if err isa MOI.ResultIndexBoundsError - rethrow(err) - end + catch return [get_fallback(model, attr, i) for i in indices] end end From 97190aaf4bd9d16ffc6f97634880ec6a4d28c45b Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Wed, 24 Nov 2021 14:30:08 +1300 Subject: [PATCH 3/3] Update cachingoptimizer.jl --- test/Utilities/cachingoptimizer.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Utilities/cachingoptimizer.jl b/test/Utilities/cachingoptimizer.jl index 324cc9e00c..44211802d2 100644 --- a/test/Utilities/cachingoptimizer.jl +++ b/test/Utilities/cachingoptimizer.jl @@ -814,6 +814,8 @@ MOI.get(::_ConstraintPrimal1310, ::MOI.ListOfModelAttributesSet) = [] MOI.get(::_ConstraintPrimal1310, ::MOI.PrimalStatus) = MOI.FEASIBLE_POINT +MOI.get(::_ConstraintPrimal1310, ::MOI.ResultCount) = 1 + function MOI.optimize!(::_ConstraintPrimal1310, model::MOI.ModelLike) index_map = MOI.IndexMap() for x in MOI.get(model, MOI.ListOfVariableIndices())