From 65e95eff40a0562368e01e49b1caa0984d52e42a Mon Sep 17 00:00:00 2001 From: ChrisRackauckas Date: Wed, 8 Jul 2026 04:22:44 +0000 Subject: [PATCH] Fix docs dependency resolution --- docs/Project.toml | 2 +- lib/OptimizationSpeedMapping/Project.toml | 2 +- .../src/OptimizationSpeedMapping.jl | 46 +++++++++++++------ .../test/core_tests.jl | 17 ++++++- 4 files changed, 51 insertions(+), 16 deletions(-) diff --git a/docs/Project.toml b/docs/Project.toml index f6ccf5451..2f2ed28e0 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -159,7 +159,7 @@ IterTools = "1" Juniper = "0.9" Lux = "1" MLUtils = "0.4.4" -Manifolds = "0.10" +Manifolds = "0.11" Manopt = "0.5" ModelingToolkit = "10.23, 11" NLPModels = "0.21, 0.22" diff --git a/lib/OptimizationSpeedMapping/Project.toml b/lib/OptimizationSpeedMapping/Project.toml index eb1446b83..e7172bb53 100644 --- a/lib/OptimizationSpeedMapping/Project.toml +++ b/lib/OptimizationSpeedMapping/Project.toml @@ -21,7 +21,7 @@ Pkg = "1" Reexport = "1.2" SafeTestsets = "0.1" SciMLBase = "2.122.1, 3" -SpeedMapping = "0.3" +SpeedMapping = "0.4" Test = "1.10" julia = "1.10" diff --git a/lib/OptimizationSpeedMapping/src/OptimizationSpeedMapping.jl b/lib/OptimizationSpeedMapping/src/OptimizationSpeedMapping.jl index 1d149f000..50b89401d 100644 --- a/lib/OptimizationSpeedMapping/src/OptimizationSpeedMapping.jl +++ b/lib/OptimizationSpeedMapping/src/OptimizationSpeedMapping.jl @@ -13,13 +13,22 @@ SciMLBase.allowscallback(::SpeedMappingOpt) = false SciMLBase.has_init(opt::SpeedMappingOpt) = true SciMLBase.requiresgradient(opt::SpeedMappingOpt) = true +function _retcode(opt_res) + status = opt_res.status + status === :first_order && return SciMLBase.ReturnCode.Success + status === :max_time && return SciMLBase.ReturnCode.MaxTime + status in (:max_iter, :max_eval) && return SciMLBase.ReturnCode.MaxIters + return SciMLBase.ReturnCode.Failure +end + function __map_optimizer_args( - cache::OptimizationBase.OptimizationCache, opt::SpeedMappingOpt; + cache::OptimizationBase.OptimizationCache, + opt::SpeedMappingOpt; callback = nothing, maxiters::Union{Number, Nothing} = nothing, maxtime::Union{Number, Nothing} = nothing, abstol::Union{Number, Nothing} = nothing, - reltol::Union{Number, Nothing} = nothing + reltol::Union{Number, Nothing} = nothing, ) # add optimiser options from kwargs @@ -37,14 +46,16 @@ function __map_optimizer_args( if !isnothing(abstol) @SciMLMessage( lazy"common abstol is currently not used by $(opt)", - cache.verbose, :unsupported_kwargs + cache.verbose, + :unsupported_kwargs ) end if !isnothing(reltol) @SciMLMessage( lazy"common reltol is currently not used by $(opt)", - cache.verbose, :unsupported_kwargs + cache.verbose, + :unsupported_kwargs ) end @@ -66,26 +77,35 @@ function SciMLBase.__solve(cache::OptimizationCache{O}) where {O <: SpeedMapping maxiters = OptimizationBase._check_and_convert_maxiters(cache.solver_args.maxiters) maxtime = OptimizationBase._check_and_convert_maxtime(cache.solver_args.maxtime) opt_args = __map_optimizer_args( - cache, cache.opt, maxiters = maxiters, + cache, + cache.opt, + maxiters = maxiters, maxtime = maxtime, abstol = cache.solver_args.abstol, - reltol = cache.solver_args.reltol; cache.solver_args... + reltol = cache.solver_args.reltol; + cache.solver_args..., ) t0 = time() opt_res = SpeedMapping.speedmapping( - cache.u0; f = _loss, (g!) = cache.f.grad, + cache.u0; + f = _loss, + (g!) = cache.f.grad, lower = cache.lb, - upper = cache.ub, opt_args... + upper = cache.ub, + opt_args..., ) t1 = time() - opt_ret = opt_res.converged ? SciMLBase.ReturnCode.Success : - SciMLBase.ReturnCode.Failure + opt_ret = _retcode(opt_res) stats = OptimizationBase.OptimizationStats(; time = t1 - t0) return SciMLBase.build_solution( - cache, cache.opt, - opt_res.minimizer, _loss(opt_res.minimizer); - original = opt_res, retcode = opt_ret, stats = stats + cache, + cache.opt, + opt_res.minimizer, + _loss(opt_res.minimizer); + original = opt_res, + retcode = opt_ret, + stats = stats, ) end diff --git a/lib/OptimizationSpeedMapping/test/core_tests.jl b/lib/OptimizationSpeedMapping/test/core_tests.jl index a898c3941..c43668573 100644 --- a/lib/OptimizationSpeedMapping/test/core_tests.jl +++ b/lib/OptimizationSpeedMapping/test/core_tests.jl @@ -1,4 +1,4 @@ -using OptimizationSpeedMapping, OptimizationBase, ForwardDiff +using OptimizationSpeedMapping, OptimizationBase, ForwardDiff, SciMLBase using Test @testset "OptimizationSpeedMapping.jl" begin @@ -10,6 +10,8 @@ using Test prob = OptimizationProblem(f, x0, _p) sol = solve(prob, SpeedMappingOpt()) @test 10 * sol.objective < l1 + @test SciMLBase.successful_retcode(sol) + @test hasproperty(sol.original, :status) prob = OptimizationProblem(f, x0, _p; lb = [-1.0, -1.0], ub = [1.5, 1.5]) sol = solve(prob, SpeedMappingOpt()) @@ -38,4 +40,17 @@ using Test sol = OptimizationBase.solve!(cache) @test sol.u ≈ [2.0] atol = 1.0e-3 end + + @testset "return code mapping" begin + @test OptimizationSpeedMapping._retcode((status = :first_order,)) == + SciMLBase.ReturnCode.Success + @test OptimizationSpeedMapping._retcode((status = :max_time,)) == + SciMLBase.ReturnCode.MaxTime + @test OptimizationSpeedMapping._retcode((status = :max_iter,)) == + SciMLBase.ReturnCode.MaxIters + @test OptimizationSpeedMapping._retcode((status = :max_eval,)) == + SciMLBase.ReturnCode.MaxIters + @test OptimizationSpeedMapping._retcode((status = :failure,)) == + SciMLBase.ReturnCode.Failure + end end