From 4459e1a5131cce3426843742189a73b29596cee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sun, 14 Dec 2025 10:16:40 +0100 Subject: [PATCH 1/4] Implement default_cache --- src/MOI_wrapper/MOI_wrapper.jl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/MOI_wrapper/MOI_wrapper.jl b/src/MOI_wrapper/MOI_wrapper.jl index af0497ad..928a4332 100644 --- a/src/MOI_wrapper/MOI_wrapper.jl +++ b/src/MOI_wrapper/MOI_wrapper.jl @@ -86,7 +86,7 @@ function MOI.Utilities.set_from_constants( return NormNuclearCone(row_dim, col_dim) end -const OptimizerCache{T} = MOI.Utilities.GenericModel{ +const OptimizerCache = MOI.Utilities.GenericModel{ Cdouble, MOI.Utilities.ObjectiveContainer{Cdouble}, MOI.Utilities.VariablesContainer{Cdouble}, @@ -155,6 +155,10 @@ mutable struct Optimizer <: MOI.AbstractOptimizer Optimizer() = new(nothing, MOISolution(), false, Dict{Symbol,Any}()) end +function MOI.default_cache(::Optimizer, ::Type{Cdouble}) + return MOI.Utilities.UniversalFallback(OptimizerCache()) +end + function MOI.get(::Optimizer, ::MOI.Bridges.ListOfNonstandardBridges) return Type[ ScaledPSDConeBridge{Cdouble}, @@ -290,8 +294,8 @@ end function MOI.optimize!( dest::Optimizer, - src::MOI.Utilities.UniversalFallback{OptimizerCache{T}}, -) where {T} + src::MOI.Utilities.UniversalFallback{OptimizerCache}, +) linear_solver = get(dest.options, :linear_solver, DirectSolver) @assert T == scsint_t(linear_solver) # The real stuff starts here. @@ -488,7 +492,7 @@ end function MOI.optimize!(dest::Optimizer, src::MOI.ModelLike) linear_solver = get(dest.options, :linear_solver, DirectSolver) T = scsint_t(linear_solver) - cache = MOI.Utilities.UniversalFallback(OptimizerCache{T}()) + cache = MOI.Utilities.UniversalFallback(OptimizerCache()) index_map = MOI.copy_to(cache, src) MOI.optimize!(dest, cache) return index_map, false From 7932fe9d170374be43b423bf44d5d52071cb7fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Legat?= Date: Sun, 14 Dec 2025 11:50:13 +0100 Subject: [PATCH 2/4] Fix --- src/MOI_wrapper/MOI_wrapper.jl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/MOI_wrapper/MOI_wrapper.jl b/src/MOI_wrapper/MOI_wrapper.jl index 928a4332..cc7df89b 100644 --- a/src/MOI_wrapper/MOI_wrapper.jl +++ b/src/MOI_wrapper/MOI_wrapper.jl @@ -86,7 +86,7 @@ function MOI.Utilities.set_from_constants( return NormNuclearCone(row_dim, col_dim) end -const OptimizerCache = MOI.Utilities.GenericModel{ +const OptimizerCache{T} = MOI.Utilities.GenericModel{ Cdouble, MOI.Utilities.ObjectiveContainer{Cdouble}, MOI.Utilities.VariablesContainer{Cdouble}, @@ -156,7 +156,9 @@ mutable struct Optimizer <: MOI.AbstractOptimizer end function MOI.default_cache(::Optimizer, ::Type{Cdouble}) - return MOI.Utilities.UniversalFallback(OptimizerCache()) + linear_solver = get(dest.options, :linear_solver, DirectSolver) + T = scsint_t(linear_solver) + return MOI.Utilities.UniversalFallback(OptimizerCache{T}()) end function MOI.get(::Optimizer, ::MOI.Bridges.ListOfNonstandardBridges) @@ -294,9 +296,10 @@ end function MOI.optimize!( dest::Optimizer, - src::MOI.Utilities.UniversalFallback{OptimizerCache}, -) + src::MOI.Utilities.UniversalFallback{OptimizerCache{T}}, +) where {T} linear_solver = get(dest.options, :linear_solver, DirectSolver) + # TODO otherwise, just convert the inner indices, no big deal @assert T == scsint_t(linear_solver) # The real stuff starts here. MOI.empty!(dest) From 8d8149e6fd25c5110a186c2a0cef41c501407d58 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 15 Dec 2025 08:49:18 +1300 Subject: [PATCH 3/4] Update src/MOI_wrapper/MOI_wrapper.jl --- src/MOI_wrapper/MOI_wrapper.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOI_wrapper/MOI_wrapper.jl b/src/MOI_wrapper/MOI_wrapper.jl index cc7df89b..6f19feec 100644 --- a/src/MOI_wrapper/MOI_wrapper.jl +++ b/src/MOI_wrapper/MOI_wrapper.jl @@ -155,7 +155,7 @@ mutable struct Optimizer <: MOI.AbstractOptimizer Optimizer() = new(nothing, MOISolution(), false, Dict{Symbol,Any}()) end -function MOI.default_cache(::Optimizer, ::Type{Cdouble}) +function MOI.default_cache(dest::Optimizer, ::Type{Cdouble}) linear_solver = get(dest.options, :linear_solver, DirectSolver) T = scsint_t(linear_solver) return MOI.Utilities.UniversalFallback(OptimizerCache{T}()) From a5d1d626d4880d91b521f565d1079c2610993b21 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Mon, 15 Dec 2025 08:57:37 +1300 Subject: [PATCH 4/4] Update src/MOI_wrapper/MOI_wrapper.jl --- src/MOI_wrapper/MOI_wrapper.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOI_wrapper/MOI_wrapper.jl b/src/MOI_wrapper/MOI_wrapper.jl index 6f19feec..2b46f158 100644 --- a/src/MOI_wrapper/MOI_wrapper.jl +++ b/src/MOI_wrapper/MOI_wrapper.jl @@ -495,7 +495,7 @@ end function MOI.optimize!(dest::Optimizer, src::MOI.ModelLike) linear_solver = get(dest.options, :linear_solver, DirectSolver) T = scsint_t(linear_solver) - cache = MOI.Utilities.UniversalFallback(OptimizerCache()) + cache = MOI.Utilities.UniversalFallback(OptimizerCache{T}()) index_map = MOI.copy_to(cache, src) MOI.optimize!(dest, cache) return index_map, false