Skip to content

Commit 18f7a6b

Browse files
Add compatibility support for supports_opt_cache_interface
This change updates all uses of supports_opt_cache_interface to check for availability in both SciMLBase and OptimizationBase packages, ensuring compatibility regardless of which package defines the function. Changes made: - Updated all optimization algorithm packages to use isdefined checks - Applied to both simple single-line and complex macro-generated definitions - Covers 20+ files across the entire optimization ecosystem This addresses compatibility issues where supports_opt_cache_interface might be defined in either SciMLBase or OptimizationBase depending on version combinations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 627344c commit 18f7a6b

File tree

20 files changed

+122
-27
lines changed

20 files changed

+122
-27
lines changed

lib/OptimizationBBO/src/OptimizationBBO.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ abstract type BBO end
99

1010
SciMLBase.requiresbounds(::BBO) = true
1111
SciMLBase.allowsbounds(::BBO) = true
12-
SciMLBase.supports_opt_cache_interface(opt::BBO) = true
12+
if isdefined(SciMLBase, :supports_opt_cache_interface)
13+
SciMLBase.supports_opt_cache_interface(opt::BBO) = true
14+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
15+
OptimizationBase.supports_opt_cache_interface(opt::BBO) = true
16+
end
1317

1418
for j in string.(BlackBoxOptim.SingleObjectiveMethodNames)
1519
eval(Meta.parse("Base.@kwdef struct BBO_" * j * " <: BBO method=:" * j * " end"))

lib/OptimizationCMAEvolutionStrategy/src/OptimizationCMAEvolutionStrategy.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ export CMAEvolutionStrategyOpt
99
struct CMAEvolutionStrategyOpt end
1010

1111
SciMLBase.allowsbounds(::CMAEvolutionStrategyOpt) = true
12-
SciMLBase.supports_opt_cache_interface(opt::CMAEvolutionStrategyOpt) = true
12+
if isdefined(SciMLBase, :supports_opt_cache_interface)
13+
SciMLBase.supports_opt_cache_interface(opt::CMAEvolutionStrategyOpt) = true
14+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
15+
OptimizationBase.supports_opt_cache_interface(opt::CMAEvolutionStrategyOpt) = true
16+
end
1317
SciMLBase.requiresgradient(::CMAEvolutionStrategyOpt) = false
1418
SciMLBase.requireshessian(::CMAEvolutionStrategyOpt) = false
1519
SciMLBase.requiresconsjac(::CMAEvolutionStrategyOpt) = false

lib/OptimizationEvolutionary/src/OptimizationEvolutionary.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ using Optimization.SciMLBase
66

77
SciMLBase.allowsbounds(opt::Evolutionary.AbstractOptimizer) = true
88
SciMLBase.allowsconstraints(opt::Evolutionary.AbstractOptimizer) = true
9-
SciMLBase.supports_opt_cache_interface(opt::Evolutionary.AbstractOptimizer) = true
9+
if isdefined(SciMLBase, :supports_opt_cache_interface)
10+
SciMLBase.supports_opt_cache_interface(opt::Evolutionary.AbstractOptimizer) = true
11+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
12+
OptimizationBase.supports_opt_cache_interface(opt::Evolutionary.AbstractOptimizer) = true
13+
end
1014
SciMLBase.requiresgradient(opt::Evolutionary.AbstractOptimizer) = false
1115
SciMLBase.requiresgradient(opt::Evolutionary.NSGA2) = false
1216
SciMLBase.requireshessian(opt::Evolutionary.AbstractOptimizer) = false

lib/OptimizationGCMAES/src/OptimizationGCMAES.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ struct GCMAESOpt end
1111
SciMLBase.requiresbounds(::GCMAESOpt) = true
1212
SciMLBase.allowsbounds(::GCMAESOpt) = true
1313
SciMLBase.allowscallback(::GCMAESOpt) = false
14-
SciMLBase.supports_opt_cache_interface(opt::GCMAESOpt) = true
14+
if isdefined(SciMLBase, :supports_opt_cache_interface)
15+
SciMLBase.supports_opt_cache_interface(opt::GCMAESOpt) = true
16+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
17+
OptimizationBase.supports_opt_cache_interface(opt::GCMAESOpt) = true
18+
end
1519
SciMLBase.requiresgradient(::GCMAESOpt) = true
1620
SciMLBase.requireshessian(::GCMAESOpt) = false
1721
SciMLBase.requiresconsjac(::GCMAESOpt) = false

lib/OptimizationIpopt/src/OptimizationIpopt.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ const DenseOrSparse{T} = Union{Matrix{T}, SparseMatrixCSC{T}}
1313

1414
struct IpoptOptimizer end
1515

16-
function SciMLBase.supports_opt_cache_interface(alg::IpoptOptimizer)
17-
true
16+
if isdefined(SciMLBase, :supports_opt_cache_interface)
17+
function SciMLBase.supports_opt_cache_interface(alg::IpoptOptimizer)
18+
true
19+
end
20+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
21+
function OptimizationBase.supports_opt_cache_interface(alg::IpoptOptimizer)
22+
true
23+
end
1824
end
1925

2026
function SciMLBase.requiresgradient(opt::IpoptOptimizer)

lib/OptimizationMOI/src/OptimizationMOI.jl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,16 @@ end
283283
include("nlp.jl")
284284
include("moi.jl")
285285

286-
function SciMLBase.supports_opt_cache_interface(alg::Union{MOI.AbstractOptimizer,
287-
MOI.OptimizerWithAttributes})
288-
true
286+
if isdefined(SciMLBase, :supports_opt_cache_interface)
287+
function SciMLBase.supports_opt_cache_interface(alg::Union{MOI.AbstractOptimizer,
288+
MOI.OptimizerWithAttributes})
289+
true
290+
end
291+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
292+
function OptimizationBase.supports_opt_cache_interface(alg::Union{MOI.AbstractOptimizer,
293+
MOI.OptimizerWithAttributes})
294+
true
295+
end
289296
end
290297

291298
function SciMLBase.__init(prob::OptimizationProblem,

lib/OptimizationManopt/src/OptimizationManopt.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ internal state.
1212
"""
1313
abstract type AbstractManoptOptimizer end
1414

15-
SciMLBase.supports_opt_cache_interface(opt::AbstractManoptOptimizer) = true
15+
if isdefined(SciMLBase, :supports_opt_cache_interface)
16+
SciMLBase.supports_opt_cache_interface(opt::AbstractManoptOptimizer) = true
17+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
18+
OptimizationBase.supports_opt_cache_interface(opt::AbstractManoptOptimizer) = true
19+
end
1620

1721
function __map_optimizer_args!(cache::OptimizationCache,
1822
opt::AbstractManoptOptimizer;

lib/OptimizationMetaheuristics/src/OptimizationMetaheuristics.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ using Optimization.SciMLBase
77
SciMLBase.requiresbounds(opt::Metaheuristics.AbstractAlgorithm) = true
88
SciMLBase.allowsbounds(opt::Metaheuristics.AbstractAlgorithm) = true
99
SciMLBase.allowscallback(opt::Metaheuristics.AbstractAlgorithm) = false
10-
SciMLBase.supports_opt_cache_interface(opt::Metaheuristics.AbstractAlgorithm) = true
10+
if isdefined(SciMLBase, :supports_opt_cache_interface)
11+
SciMLBase.supports_opt_cache_interface(opt::Metaheuristics.AbstractAlgorithm) = true
12+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
13+
OptimizationBase.supports_opt_cache_interface(opt::Metaheuristics.AbstractAlgorithm) = true
14+
end
1115

1216
function initial_population!(opt, cache, bounds, f)
1317
opt_init = deepcopy(opt)

lib/OptimizationMultistartOptimization/src/OptimizationMultistartOptimization.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ using Optimization.SciMLBase
77
SciMLBase.requiresbounds(opt::MultistartOptimization.TikTak) = true
88
SciMLBase.allowsbounds(opt::MultistartOptimization.TikTak) = true
99
SciMLBase.allowscallback(opt::MultistartOptimization.TikTak) = false
10-
SciMLBase.supports_opt_cache_interface(opt::MultistartOptimization.TikTak) = true
10+
if isdefined(SciMLBase, :supports_opt_cache_interface)
11+
SciMLBase.supports_opt_cache_interface(opt::MultistartOptimization.TikTak) = true
12+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
13+
OptimizationBase.supports_opt_cache_interface(opt::MultistartOptimization.TikTak) = true
14+
end
1115

1216
function SciMLBase.__init(prob::SciMLBase.OptimizationProblem,
1317
opt::MultistartOptimization.TikTak,

lib/OptimizationNLopt/src/OptimizationNLopt.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ using Optimization: deduce_retcode
88
(f::NLopt.Algorithm)() = f
99

1010
SciMLBase.allowsbounds(opt::Union{NLopt.Algorithm, NLopt.Opt}) = true
11-
SciMLBase.supports_opt_cache_interface(opt::Union{NLopt.Algorithm, NLopt.Opt}) = true
11+
if isdefined(SciMLBase, :supports_opt_cache_interface)
12+
SciMLBase.supports_opt_cache_interface(opt::Union{NLopt.Algorithm, NLopt.Opt}) = true
13+
elseif isdefined(OptimizationBase, :supports_opt_cache_interface)
14+
OptimizationBase.supports_opt_cache_interface(opt::Union{NLopt.Algorithm, NLopt.Opt}) = true
15+
end
1216

1317
function SciMLBase.requiresgradient(opt::Union{NLopt.Algorithm, NLopt.Opt})
1418
# https://github.com/JuliaOpt/NLopt.jl/blob/master/src/NLopt.jl#L18C7-L18C16

0 commit comments

Comments
 (0)