From 8802f2b648d269762492e21717dfe53e165a44f0 Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 23 Mar 2022 12:24:11 +1300 Subject: [PATCH 1/2] Relax AbstractOptimizer requirement in instantiate --- src/Utilities/cachingoptimizer.jl | 2 +- src/instantiate.jl | 6 +++--- test/FileFormats/FileFormats.jl | 17 +++++++++++++++++ test/instantiate.jl | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index e193406716..1021123d65 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -92,7 +92,7 @@ mutable struct CachingOptimizer{O,M<:MOI.ModelLike} <: MOI.AbstractOptimizer function CachingOptimizer( cache::MOI.ModelLike, - optimizer::MOI.AbstractOptimizer, + optimizer::MOI.ModelLike, ) @assert MOI.is_empty(optimizer) model = new{typeof(optimizer),typeof(cache)}( diff --git a/src/instantiate.jl b/src/instantiate.jl index 7f72f0fb2c..29fe48a804 100644 --- a/src/instantiate.jl +++ b/src/instantiate.jl @@ -55,18 +55,18 @@ const _INSTANTIATE_NOT_CALLABLE_MESSAGE = _instantiate_and_check(optimizer_constructor) Create an instance of optimizer by calling `optimizer_constructor`. -Then check that the type returned is an empty [`AbstractOptimizer`](@ref). +Then check that the type returned is an empty [`ModelLike`](@ref). """ function _instantiate_and_check(optimizer_constructor) if !applicable(optimizer_constructor) error(_INSTANTIATE_NOT_CALLABLE_MESSAGE) end optimizer = optimizer_constructor() - if !isa(optimizer, AbstractOptimizer) + if !isa(optimizer, ModelLike) error( "The provided `optimizer_constructor` returned an object of type " * "$(typeof(optimizer)). Expected a " * - "MathOptInterface.AbstractOptimizer.", + "MathOptInterface.ModelLike.", ) end if !is_empty(optimizer) diff --git a/test/FileFormats/FileFormats.jl b/test/FileFormats/FileFormats.jl index 0ff94c923e..b2d2eb7661 100644 --- a/test/FileFormats/FileFormats.jl +++ b/test/FileFormats/FileFormats.jl @@ -49,6 +49,23 @@ function test_copying() end end +function test_instantiate() + models = [ + MOI.FileFormats.CBF.Model, + MOI.FileFormats.LP.Model, + MOI.FileFormats.MOF.Model, + MOI.FileFormats.MPS.Model, + MOI.FileFormats.SDPA.Model, + ] + for src in models + model = MOI.instantiate(src) + @test model isa src + bridged = MOI.instantiate(src; with_bridge_type = Float64) + @test bridged isa MOI.Bridges.LazyBridgeOptimizer + end + return +end + function test_compressed_open() for cs in [MOI.FileFormats.Bzip2(), MOI.FileFormats.Gzip()] for open_type in ["a", "r+", "w+", "a+"] diff --git a/test/instantiate.jl b/test/instantiate.jl index 0bf9c81b9b..70cbe3a680 100644 --- a/test/instantiate.jl +++ b/test/instantiate.jl @@ -67,7 +67,7 @@ function _test_instantiate(T) err = ErrorException( "The provided `optimizer_constructor` returned an object of type " * - "$Int. Expected a MathOptInterface.AbstractOptimizer.", + "$Int. Expected a MathOptInterface.ModelLike.", ) h() = 1 @test_throws err MOI.instantiate(h) From 9d902de9833c64a3dbcf16a8649693be3ef01152 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Wed, 23 Mar 2022 12:32:04 +1300 Subject: [PATCH 2/2] Update cachingoptimizer.jl --- src/Utilities/cachingoptimizer.jl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Utilities/cachingoptimizer.jl b/src/Utilities/cachingoptimizer.jl index 1021123d65..0ecc908863 100644 --- a/src/Utilities/cachingoptimizer.jl +++ b/src/Utilities/cachingoptimizer.jl @@ -90,10 +90,7 @@ mutable struct CachingOptimizer{O,M<:MOI.ModelLike} <: MOI.AbstractOptimizer ) end - function CachingOptimizer( - cache::MOI.ModelLike, - optimizer::MOI.ModelLike, - ) + function CachingOptimizer(cache::MOI.ModelLike, optimizer::MOI.ModelLike) @assert MOI.is_empty(optimizer) model = new{typeof(optimizer),typeof(cache)}( optimizer,