diff --git a/docs/src/submodules/Utilities/overview.md b/docs/src/submodules/Utilities/overview.md index 4192bfd9a6..fbeb038084 100644 --- a/docs/src/submodules/Utilities/overview.md +++ b/docs/src/submodules/Utilities/overview.md @@ -199,6 +199,11 @@ with model cache MOIU.GenericModel{Float64,MOIU.ModelFunctionConstraints{Float64 with optimizer MOIU.GenericOptimizer{Float64,MOIU.VectorOfConstraints{MOI.VectorAffineFunction{Float64},MOI.Complements}} ``` +!!! info + Calling `MOI.empty!(model)` also resets the state to `EMPTY_OPTIMIZER`. + So after emptying a model, the modification will only be applied to the + cache. + Use [`Utilities.drop_optimizer`](@ref) to go from any state to `NO_OPTIMIZER`: ```jldoctest pathoptimizer julia> MOI.Utilities.drop_optimizer(model) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index 3970cd0e21..9e0738fa46 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -270,6 +270,7 @@ function MOI.empty!(m::CachingOptimizer) MOI.empty!(m.model_cache) if m.state == ATTACHED_OPTIMIZER MOI.empty!(m.optimizer) + m.state = EMPTY_OPTIMIZER end m.model_to_optimizer_map = IndexMap() m.optimizer_to_model_map = IndexMap() diff --git a/test/Utilities/cachingoptimizer.jl b/test/Utilities/cachingoptimizer.jl index 9a2f3d0cb2..66ceb85692 100644 --- a/test/Utilities/cachingoptimizer.jl +++ b/test/Utilities/cachingoptimizer.jl @@ -349,6 +349,14 @@ end in mode MANUAL with model cache $(MOIU.Model{Float64}) with optimizer nothing""") + + MOI.empty!(s) + MOIU.reset_optimizer(m, s) + @test MOIU.state(m) == MOIU.EMPTY_OPTIMIZER + MOIU.attach_optimizer(m) + @test MOIU.state(m) == MOIU.ATTACHED_OPTIMIZER + MOI.empty!(m) + @test MOIU.state(m) == MOIU.EMPTY_OPTIMIZER end @testset "CachingOptimizer AUTOMATIC mode" begin @@ -486,6 +494,9 @@ end in mode AUTOMATIC with model cache $(MOIU.Model{Float64}) with optimizer $(MOIU.MockOptimizer{MOIU.Model{Float64}})""") + + MOI.empty!(m) + @test MOIU.state(m) == MOIU.EMPTY_OPTIMIZER end @testset "Constructor with optimizer" begin