diff --git a/_typos.toml b/_typos.toml index 5d65cd549..3e0d30e0e 100644 --- a/_typos.toml +++ b/_typos.toml @@ -8,7 +8,9 @@ extend-ignore-re = [ "exemples", "choses", "certains", - "remplace" + "remplace", + "maintenant", + "construit" ] [files] diff --git a/docs/.gitignore b/docs/.gitignore index 0587d7400..7779fda19 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,4 +1,8 @@ build/ node_modules/ package-lock.json -Manifest.toml \ No newline at end of file +Manifest.toml +src/notebooks/ +src/scripts/ +src/getting-started/guided-tour.md +!src/assets/Manifest.toml \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml index 7bd92d6e5..7f084481f 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,23 +1,24 @@ [deps] ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" -BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" CTBase = "54762871-cc72-4466-b8e8-f6c8b58076cd" CTDirect = "790bbbee-bee9-49ee-8912-a9de031322d5" CTFlows = "1c39547c-7794-42f7-af83-d98194f657c2" +CTLie = "6880e05b-3a7d-4cac-887c-30cb52c5fdde" CTModels = "34c4fa32-2049-4079-8329-de33c2a22e2d" CTParser = "32681960-a1b1-40db-9bff-a1ca817385d1" CTSolvers = "d3e8d392-8e4b-4d9b-8e92-d7d4e3650ef6" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterInterLinks = "d12716ef-a0f6-4df4-a9f1-a5a34e75c656" DocumenterVitepress = "4710194d-e776-4893-9690-8d956a29c365" -LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2" +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306" +LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" MadNCL = "434a0bcb-5a7c-42b2-a9d3-9e3f760e7af0" MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" MadNLPGPU = "d72a61cc-809d-412f-99be-fd81f4b8a598" @@ -25,38 +26,42 @@ MarkdownAST = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" NLPModelsIpopt = "f4238b75-b362-5c4c-b852-0801c9a21d71" NLPModelsKnitro = "bec4dd0d-7755-52d5-9a02-22f0ffc7efcb" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" +OptimalControl = "5f98b655-cc9a-415a-b60e-744165666948" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" UnoSolver = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05" [compat] ADNLPModels = "0.8" -BenchmarkTools = "1" -CTBase = "=0.18.8" +CTBase = "0.28" CTDirect = "1" -CTFlows = "0.8" -CTModels = "=0.10.1" +CTFlows = "0.16" +CTLie = "0.1" +CTModels = "0.15" CTParser = "0.8" CTSolvers = "0.4" -CUDA = "5" +CUDA = "5, 6" CommonSolve = "0.2" -DataFrames = "1" +DifferentiationInterface = "0.7" Documenter = "1" DocumenterInterLinks = "1" DocumenterVitepress = "0.3" -LiveServer = "1" -ExaModels = "0.9" +ExaModels = "0.11" +ForwardDiff = "0.10, 1" JLD2 = "0.6" JSON3 = "1" Literate = "2" +LiveServer = "1" MadNCL = "0.2" -MadNLP = "0.9" -MadNLPGPU = "0.8" +MadNLP = "0.9, 0.10" +MadNLPGPU = "0.8, 0.10" MarkdownAST = "0.1" NLPModelsIpopt = "0.11" NLPModelsKnitro = "0.10" NonlinearSolve = "4" -OrdinaryDiffEq = "6" +OrdinaryDiffEq = "6, 7" +OrdinaryDiffEqTsit5 = "2" Plots = "1" UnoSolver = "0.3" julia = "1.10" diff --git a/docs/api_reference.jl b/docs/api_reference.jl index a8932b5f9..3855ea941 100644 --- a/docs/api_reference.jl +++ b/docs/api_reference.jl @@ -1,72 +1,308 @@ -# ============================================================================== -# OptimalControl API Reference Generator -# ============================================================================== +# Thematic API reference manifest. # -# This file generates the API reference documentation for OptimalControl. -# It uses CTBase.automatic_reference_documentation to scan source files -# and generate documentation pages. +# Each theme is a literal, hand-maintained list of symbols — no scraping of +# docs/reports/99-api-coverage.md. That file is prose meant for a human to +# read and copy from, not a machine-parseable format: an earlier version of +# this script tried to extract symbols from it automatically and silently +# picked up names from sentences that explicitly said *not* to document them +# (e.g. "solve_explicit ... not documented as available"), and lost the +# module qualification some symbols need to resolve in `@docs` (a bare +# `constraint` does not resolve; `CTModels.Components.constraint` does). # -# ============================================================================== +# When 99-api-coverage.md changes, update the lists below by hand and rerun +# `julia --project=docs docs/make.jl` to check the completeness error and the +# build log for new "undefined binding" / "no docs found" warnings. -""" - generate_api_reference(src_dir::String, ext_dir::String) +const EXCLUDE_SYMBOLS = [:include, :eval, :OptimalControl] + +# Re-exported purely as escape hatches for generated code / cross-package +# qualification (see docs/reports/99-api-coverage.md §1 "Module aliases"). +# They carry no docstring of their own (`@doc` on a bare module without one +# resolves to Julia's generic "here are its exports" filler, identical across +# all of them — not worth transcluding). Described in prose on qualified.md +# instead of `@docs`, so they need an explicit exemption from the +# completeness check below. +const MODULE_ALIASES = [:CTBase, :CTLie, :CTFlows, :CTModels, :ADNLPModels, :ExaModels] + +const API_THEMES = [ + ( + id="modelling", title="Modelling", + symbols=[ + Symbol("@def"), Symbol("@init"), + :time!, :state!, :control!, :variable!, :dynamics!, :objective!, + Symbol("CTModels.Building.constraint!"), :time_dependence!, + :build, :build_initial_guess, + ], + ), + ( + id="problem", title="Problem", + symbols=[ + # Dimensions and names + :state_dimension, :state_name, :state_components, + :control_dimension, :control_name, :control_components, + :variable_dimension, :variable_name, :variable_components, + :components, :dimension, :name, + # Generic component accessors + :index, :expression, :criterion, + # Times + :initial_time, :final_time, :times, :time_name, + :initial_time_name, :final_time_name, + :has_fixed_initial_time, :has_free_initial_time, + :has_fixed_final_time, :has_free_final_time, + :is_initial_time_fixed, :is_initial_time_free, + :is_final_time_fixed, :is_final_time_free, + # Dynamics and cost + :dynamics, :mayer, :lagrange, :has_mayer_cost, :has_lagrange_cost, + :is_mayer_cost_defined, :is_lagrange_cost_defined, + # Constraints + Symbol("CTModels.Models.constraint"), :constraints, + :path_constraints_nl, :boundary_constraints_nl, + :state_constraints_box, :control_constraints_box, + :variable_constraints_box, :dim_path_constraints_nl, + :dim_boundary_constraints_nl, :dim_state_constraints_box, + :dim_control_constraints_box, :dim_variable_constraints_box, + # Definition + :definition, :has_abstract_definition, :is_abstractly_defined, + # Traits + :is_autonomous, :is_nonautonomous, :is_variable, :is_nonvariable, + :has_variable, :has_control, :is_control_free, + ], + ), + ( + id="solving", title="Solving", + symbols=[ + :solve, :methods, :discretize, :ocp_model, :nlp_model, + :ocp_solution, :get_build_examodel, + ], + ), + ( + id="options", title="Options and strategies", + symbols=[ + :route_to, :bypass, :force, + :options, :option_names, :option_type, :option_default, + :option_defaults, :option_description, :option_value, + :option_source, :has_option, + :is_user, :is_default, :is_computed, + :id, :metadata, :create_registry, :strategy_ids, :type_from_id, + Symbol("CTBase.Strategies.parameter"), + :default_parameter, :available_parameters, + :CPU, :GPU, + :describe, + ], + ), + ( + id="solution", title="Solution", + symbols=[ + # Trajectories + :state, :control, :costate, + Symbol("CTModels.Solutions.variable"), :time_grid, + # Objective + Symbol("CTModels.Solutions.objective"), + # Status + :status, :message, :successful, :iterations, + :constraints_violation, :infos, :model, + # Emptiness + :is_empty, :is_empty_time_grid, + # Duals + :dual, :path_constraints_dual, :boundary_constraints_dual, + :state_constraints_lb_dual, :state_constraints_ub_dual, + :control_constraints_lb_dual, :control_constraints_ub_dual, + :variable_constraints_lb_dual, :variable_constraints_ub_dual, + :dim_dual_state_constraints_box, :dim_dual_control_constraints_box, + :dim_dual_variable_constraints_box, + ], + ), + ( + id="flows", title="Flows", + symbols=[ + :Flow, :control_law, :pseudo_hamiltonian, + :MultiPhaseFlow, :MultiPhaseStateFlow, :MultiPhaseHamiltonianFlow, + :AnyMultiPhaseFlow, + :n_phases, :get_flow, :get_flows, :get_switching_time, + :get_switching_times, :get_jump, :get_jumps, + :SciML, :AbstractIntegrator, :AbstractIntegrationResult, + :final_state, :evaluate_at, + ], + ), + ( + id="geometry", title="Geometry", + symbols=[ + :ad, :Lift, :Poisson, Symbol("∂ₜ"), + :dg_ad_backend, Symbol("dg_ad_backend!"), + Symbol("@Lie"), + ], + ), + ( + id="types", title="Types", + symbols=[ + # Vector fields + :AbstractVectorField, :VectorField, :AbstractControlledVectorField, + :ControlledVectorField, :ComposedVectorField, :controlled_vector_field, + # Hamiltonians + :AbstractHamiltonian, :Hamiltonian, :ComposedHamiltonian, + :AbstractHamiltonianVectorField, :HamiltonianVectorField, + :AbstractPseudoHamiltonian, :PseudoHamiltonian, + # Pseudo-Hamiltonian fields + :AbstractPseudoHamiltonianVectorField, :PseudoHamiltonianVectorField, + # Control laws + :AbstractControlLaw, :ControlLaw, :OpenLoop, :ClosedLoop, :DynClosedLoop, + # Constraints and multipliers + :AbstractPathConstraint, :PathConstraint, :StateConstraint, + :ControlConstraint, :MixedConstraint, :AbstractMultiplier, :Multiplier, + ], + ), + ( + id="io", title="Plotting and I/O", + symbols=[:plot, Symbol("plot!"), :export_ocp_solution, :import_ocp_solution], + ), + ( + id="qualified", title="Qualified access", + symbols=[ + Symbol("CTModels.Building.PreModel"), Symbol("CTModels.Models.Model"), + Symbol("CTModels.Solutions.Solution"), Symbol("CTModels.Solutions.AbstractSolution"), + Symbol("CTModels.Init.AbstractInitialGuess"), Symbol("CTModels.Init.InitialGuess"), + Symbol("CTSolvers.Modelers.ADNLP"), Symbol("CTSolvers.Modelers.Exa"), + Symbol("CTSolvers.Solvers.Ipopt"), Symbol("CTSolvers.Solvers.MadNLP"), + Symbol("CTSolvers.Solvers.MadNCL"), Symbol("CTSolvers.Solvers.Knitro"), + Symbol("CTSolvers.Solvers.Uno"), + Symbol("CTSolvers.DOCP.AbstractDiscretizer"), Symbol("CTSolvers.DOCP.DiscretizedModel"), + Symbol("CTSolvers.Modelers.AbstractNLPModeler"), Symbol("CTSolvers.Solvers.AbstractNLPSolver"), + :LiftedHamiltonianFunction, + Symbol("CTBase.Exceptions.CTException"), Symbol("CTBase.Exceptions.IncorrectArgument"), + Symbol("CTBase.Exceptions.PreconditionError"), Symbol("CTBase.Exceptions.NotImplemented"), + Symbol("CTBase.Exceptions.ParsingError"), Symbol("CTBase.Exceptions.AmbiguousDescription"), + Symbol("CTBase.Exceptions.ExtensionError"), + Symbol("CTBase.Core.NotProvided"), Symbol("CTBase.Core.NotProvidedType"), + Symbol("CTBase.Core.ctNumber"), + Symbol("CTBase.Strategies.AbstractStrategy"), Symbol("CTBase.Strategies.StrategyRegistry"), + Symbol("CTBase.Strategies.StrategyMetadata"), Symbol("CTBase.Strategies.StrategyOptions"), + Symbol("CTBase.Strategies.RoutedOption"), Symbol("CTBase.Strategies.BypassValue"), + Symbol("CTBase.Strategies.AbstractStrategyParameter"), + Symbol("CTBase.Options.OptionDefinition"), Symbol("CTBase.Options.OptionValue"), + ], + ), +] + +# Symbols exported by `names(OptimalControl)` are checked for full coverage +# below. Theme entries that are module-qualified (e.g. `CTModels.Solutions.variable`) +# stand in for the bare exported name (`variable`) for that check — see +# `_bare_name`. +_bare_name(s::Symbol) = Symbol(split(String(s), ".")[end]) + +const _COVERED_BARE_NAMES = let + covered = Set{Symbol}() + for theme in API_THEMES + for s in theme.symbols + push!(covered, _bare_name(s)) + end + end + covered +end + +let + exported = Set(setdiff(names(OptimalControl), (:OptimalControl,))) + covered = union(_COVERED_BARE_NAMES, MODULE_ALIASES) + missing_syms = setdiff(exported, covered) + # `qualified` intentionally lists names not in `names(OptimalControl)` + # (they are only reachable as `OptimalControl.X`), so they are excluded + # from the stale check. + qualified_bare = Set(_bare_name(s) for s in first(t.symbols for t in API_THEMES if t.id == "qualified")) + stale_syms = setdiff(covered, union(exported, qualified_bare)) + + if !isempty(missing_syms) + error("API reference is missing exported symbols: $missing_syms") + end + if !isempty(stale_syms) + error("API reference contains stale symbols: $stale_syms") + end +end + +function _generate_theme_page(docs_src, theme) + page = joinpath(docs_src, "api", "$(theme.id).md") + mkpath(dirname(page)) + open(page, "w") do io + println(io, "# [$(theme.title)](@id api-$(theme.id))") + println(io) + if theme.id == "qualified" + println( + io, + "These names are not exported by `using OptimalControl`, but they are " * + "reachable as `OptimalControl.X`.", + ) + println(io) + println( + io, + "A handful of module names are re-exported purely as escape hatches for " * + "generated code and cross-package qualification — `CTBase`, `CTLie`, " * + "`CTFlows`, `CTModels`, `ADNLPModels`, `ExaModels`. They carry no " * + "documentation of their own; see [Ecosystem](@ref api-ecosystem) for what " * + "each package is for.", + ) + println(io) + println( + io, + "`CTDirect.Collocation` (the ADNLP/Exa discretizer, selected via " * + "`discretizer=CTDirect.Collocation()`) has no docstring upstream yet — " * + "tracked in [control-toolbox/CTDirect.jl#623]" * + "(https://github.com/control-toolbox/CTDirect.jl/issues/623).", + ) + println(io) + end + println(io, "```@docs; canonical=true") + for s in theme.symbols + println(io, s) + end + println(io, "```") + end + return theme.title => "api/$(theme.id).md" +end -Generate the API reference documentation for OptimalControl. -Returns the list of pages. -""" function generate_api_reference(src_dir::String, ext_dir::String) - # Helper to build absolute paths + docs_src = abspath(joinpath(@__DIR__, "src")) src(files...) = [abspath(joinpath(src_dir, f)) for f in files] - ext(files...) = [abspath(joinpath(ext_dir, f)) for f in files] + mkpath(joinpath(docs_src, "api")) - # Symbols to exclude from documentation - EXCLUDE_SYMBOLS = Symbol[:include, :eval] + pages = [_generate_theme_page(docs_src, t) for t in API_THEMES] - pages = [ - CTBase.automatic_reference_documentation(; - subdirectory="api", - primary_modules=[ - OptimalControl => src( - joinpath("helpers", "component_checks.jl"), - joinpath("helpers", "component_completion.jl"), - joinpath("helpers", "descriptive_routing.jl"), - joinpath("helpers", "kwarg_extraction.jl"), - joinpath("helpers", "methods.jl"), - joinpath("helpers", "print.jl"), - joinpath("helpers", "registry.jl"), - joinpath("helpers", "strategy_builders.jl"), - joinpath("solve", "canonical.jl"), - joinpath("solve", "descriptive.jl"), - joinpath("solve", "dispatch.jl"), - joinpath("solve", "explicit.jl"), - joinpath("solve", "mode.jl"), - joinpath("solve", "mode_detection.jl"), - ), - ], - external_modules_to_document=[CTBase, CTModels, CTSolvers], - exclude=EXCLUDE_SYMBOLS, - public=false, - private=true, - title="Private", - title_in_menu="Private", - filename="private", - ), - ] + helpers = src( + joinpath("helpers", "component_checks.jl"), + joinpath("helpers", "component_completion.jl"), + joinpath("helpers", "descriptive_routing.jl"), + joinpath("helpers", "describe.jl"), + joinpath("helpers", "kwarg_extraction.jl"), + joinpath("helpers", "methods.jl"), + joinpath("helpers", "print.jl"), + joinpath("helpers", "registry.jl"), + joinpath("helpers", "strategy_builders.jl"), + joinpath("solve", "canonical.jl"), + joinpath("solve", "descriptive.jl"), + joinpath("solve", "dispatch.jl"), + joinpath("solve", "explicit.jl"), + joinpath("solve", "mode.jl"), + joinpath("solve", "mode_detection.jl"), + ) + + internals = CTBase.automatic_reference_documentation(; + subdirectory="api", + primary_modules=[OptimalControl => helpers], + external_modules_to_document=[CTBase, CTModels, CTSolvers], + exclude=EXCLUDE_SYMBOLS, + public=false, + private=true, + title="Internals", + title_in_menu="Internals", + filename="internals", + ) + push!(pages, internals) return pages end -""" - with_api_reference(f::Function, src_dir::String, ext_dir::String) - -Generates the API reference, executes `f(pages)`, and cleans up generated files. -""" function with_api_reference(f::Function, src_dir::String, ext_dir::String) pages = generate_api_reference(src_dir, ext_dir) try f(pages) finally - # Clean up generated files docs_src = abspath(joinpath(@__DIR__, "src")) _cleanup_pages(docs_src, pages) end diff --git a/docs/attic/README.md b/docs/attic/README.md new file mode 100644 index 000000000..8394551bb --- /dev/null +++ b/docs/attic/README.md @@ -0,0 +1,4 @@ +# docs/attic + +Pre-v2.1 documentation pages kept here for harvesting. +This directory is deleted in PR 12. diff --git a/docs/src/example-control-and-variable.md b/docs/attic/example-control-and-variable.md similarity index 100% rename from docs/src/example-control-and-variable.md rename to docs/attic/example-control-and-variable.md diff --git a/docs/src/example-control-free.md b/docs/attic/example-control-free.md similarity index 100% rename from docs/src/example-control-free.md rename to docs/attic/example-control-free.md diff --git a/docs/src/example-double-integrator-energy.md b/docs/attic/example-double-integrator-energy.md similarity index 100% rename from docs/src/example-double-integrator-energy.md rename to docs/attic/example-double-integrator-energy.md diff --git a/docs/src/example-double-integrator-time.md b/docs/attic/example-double-integrator-time.md similarity index 100% rename from docs/src/example-double-integrator-time.md rename to docs/attic/example-double-integrator-time.md diff --git a/docs/src/example-singular-control.md b/docs/attic/example-singular-control.md similarity index 100% rename from docs/src/example-singular-control.md rename to docs/attic/example-singular-control.md diff --git a/docs/src/example-state-constraint.md b/docs/attic/example-state-constraint.md similarity index 100% rename from docs/src/example-state-constraint.md rename to docs/attic/example-state-constraint.md diff --git a/docs/src/manual-abstract.md b/docs/attic/manual-abstract.md similarity index 100% rename from docs/src/manual-abstract.md rename to docs/attic/manual-abstract.md diff --git a/docs/src/manual-ai-llm.md b/docs/attic/manual-ai-llm.md similarity index 100% rename from docs/src/manual-ai-llm.md rename to docs/attic/manual-ai-llm.md diff --git a/docs/src/manual-differential-geometry.md b/docs/attic/manual-differential-geometry.md similarity index 100% rename from docs/src/manual-differential-geometry.md rename to docs/attic/manual-differential-geometry.md diff --git a/docs/src/manual-flow-ocp.md b/docs/attic/manual-flow-ocp.md similarity index 100% rename from docs/src/manual-flow-ocp.md rename to docs/attic/manual-flow-ocp.md diff --git a/docs/src/manual-flow-others.md b/docs/attic/manual-flow-others.md similarity index 100% rename from docs/src/manual-flow-others.md rename to docs/attic/manual-flow-others.md diff --git a/docs/src/manual-initial-guess.md b/docs/attic/manual-initial-guess.md similarity index 100% rename from docs/src/manual-initial-guess.md rename to docs/attic/manual-initial-guess.md diff --git a/docs/src/manual-macro-free.md b/docs/attic/manual-macro-free.md similarity index 100% rename from docs/src/manual-macro-free.md rename to docs/attic/manual-macro-free.md diff --git a/docs/src/manual-model.md b/docs/attic/manual-model.md similarity index 100% rename from docs/src/manual-model.md rename to docs/attic/manual-model.md diff --git a/docs/src/manual-plot.md b/docs/attic/manual-plot.md similarity index 100% rename from docs/src/manual-plot.md rename to docs/attic/manual-plot.md diff --git a/docs/src/manual-solution.md b/docs/attic/manual-solution.md similarity index 100% rename from docs/src/manual-solution.md rename to docs/attic/manual-solution.md diff --git a/docs/src/manual-solve-advanced.md b/docs/attic/manual-solve-advanced.md similarity index 100% rename from docs/src/manual-solve-advanced.md rename to docs/attic/manual-solve-advanced.md diff --git a/docs/src/manual-solve-explicit.md b/docs/attic/manual-solve-explicit.md similarity index 100% rename from docs/src/manual-solve-explicit.md rename to docs/attic/manual-solve-explicit.md diff --git a/docs/src/manual-solve-gpu.md b/docs/attic/manual-solve-gpu.md similarity index 100% rename from docs/src/manual-solve-gpu.md rename to docs/attic/manual-solve-gpu.md diff --git a/docs/src/manual-solve.md b/docs/attic/manual-solve.md similarity index 100% rename from docs/src/manual-solve.md rename to docs/attic/manual-solve.md diff --git a/docs/src/api/public.md b/docs/attic/public.md similarity index 100% rename from docs/src/api/public.md rename to docs/attic/public.md diff --git a/docs/src/api/subpackages.md b/docs/attic/subpackages.md similarity index 100% rename from docs/src/api/subpackages.md rename to docs/attic/subpackages.md diff --git a/docs/src/tutorial.md b/docs/attic/tutorial.md similarity index 100% rename from docs/src/tutorial.md rename to docs/attic/tutorial.md diff --git a/docs/inventories/.gitkeep b/docs/inventories/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docs/inventories/ExaModels.toml b/docs/inventories/ExaModels.toml new file mode 100644 index 000000000..e006ed6c0 --- /dev/null +++ b/docs/inventories/ExaModels.toml @@ -0,0 +1,8 @@ +# DocInventory version 1 +project = "ExaModels" + +# Placeholder: exanauts.github.io/ExaModels.jl/stable/objects.inv currently 404s +# (checked 2026-08-15), so there is no reachable source to harvest real entries +# from. This empty inventory keeps the build green; @extref ExaModels ... will +# report "not found" (not a build Error) until either the upstream site comes +# back or this file is populated with real entries. diff --git a/docs/inventories/MadNLP.toml b/docs/inventories/MadNLP.toml new file mode 100644 index 000000000..11733ede5 --- /dev/null +++ b/docs/inventories/MadNLP.toml @@ -0,0 +1,8 @@ +# DocInventory version 1 +project = "MadNLP" + +# Placeholder: madnlp.github.io/MadNLP.jl/stable/objects.inv currently 404s +# (checked 2026-08-15), so there is no reachable source to harvest real entries +# from. This empty inventory keeps the build green; @extref MadNLP ... will +# report "not found" (not a build Error) until either the upstream site comes +# back or this file is populated with real entries. diff --git a/docs/make.jl b/docs/make.jl index c8a45afd7..3236b6d26 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,5 +1,7 @@ # to run the documentation generation: # julia --project=. docs/make.jl +# to serve the documentation: +# npx serve docs/build/1 --listen 5173 pushfirst!(LOAD_PATH, joinpath(@__DIR__, "..")) pushfirst!(LOAD_PATH, joinpath(@__DIR__)) @@ -8,6 +10,7 @@ using OptimalControl using CTBase using CTDirect using CTFlows +using CTLie using CTModels using CTParser using CTSolvers @@ -39,63 +42,11 @@ using JLD2 using Plots # -links = InterLinks( - "CTBase" => ( - "https://control-toolbox.org/CTBase.jl/stable/", - "https://control-toolbox.org/CTBase.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTBase.toml"), - ), - "CTDirect" => ( - "https://control-toolbox.org/CTDirect.jl/stable/", - "https://control-toolbox.org/CTDirect.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTDirect.toml"), - ), - "CTFlows" => ( - "https://control-toolbox.org/CTFlows.jl/stable/", - "https://control-toolbox.org/CTFlows.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTFlows.toml"), - ), - "CTModels" => ( - "https://control-toolbox.org/CTModels.jl/stable/", - "https://control-toolbox.org/CTModels.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTModels.toml"), - ), - "CTParser" => ( - "https://control-toolbox.org/CTParser.jl/stable/", - "https://control-toolbox.org/CTParser.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTParser.toml"), - ), - "CTSolvers" => ( - "https://control-toolbox.org/CTSolvers.jl/stable/", - "https://control-toolbox.org/CTSolvers.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "CTSolvers.toml"), - ), - "ADNLPModels" => ( - "https://jso.dev/ADNLPModels.jl/stable/", - "https://jso.dev/ADNLPModels.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "ADNLPModels.toml"), - ), - "NLPModelsIpopt" => ( - "https://jso.dev/NLPModelsIpopt.jl/stable/", - "https://jso.dev/NLPModelsIpopt.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "NLPModelsIpopt.toml"), - ), - "ExaModels" => ( - "https://exanauts.github.io/ExaModels.jl/stable/", - "https://exanauts.github.io/ExaModels.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "ExaModels.toml"), - ), - "MadNLP" => ( - "https://madnlp.github.io/MadNLP.jl/stable/", - "https://madnlp.github.io/MadNLP.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "MadNLP.toml"), - ), - "Tutorials" => ( - "https://control-toolbox.org/Tutorials.jl/stable/", - "https://control-toolbox.org/Tutorials.jl/stable/objects.inv", - joinpath(@__DIR__, "inventories", "Tutorials.toml"), - ), -) +function _ext(pkg, sym) + m = Base.get_extension(pkg, sym) + isnothing(m) && @warn "Extension $sym of $pkg is not loaded" + return m +end # to add docstrings from external packages const CTModelsJLD = Base.get_extension(CTModels, :CTModelsJLD) @@ -105,24 +56,31 @@ const CTSolversIpopt = Base.get_extension(CTSolvers, :CTSolversIpopt) const CTSolversKnitro = Base.get_extension(CTSolvers, :CTSolversKnitro) const CTSolversMadNLP = Base.get_extension(CTSolvers, :CTSolversMadNLP) const CTSolversMadNCL = Base.get_extension(CTSolvers, :CTSolversMadNCL) -const CTFlowsODE = Base.get_extension(CTFlows, :CTFlowsODE) -Modules = [ + +Modules = Any[ CTBase, + CTLie, CTFlows, CTDirect, CTModels, CTSolvers, CTParser, OptimalControl, - CTModelsJLD, - CTModelsJSON, - CTModelsPlots, - CTSolversIpopt, - CTSolversKnitro, - CTSolversMadNLP, - CTSolversMadNCL, - CTFlowsODE, ] + +for (pkg, syms) in [ + CTModels => (:CTModelsJLD, :CTModelsJSON, :CTModelsPlots), + CTSolvers => (:CTSolversIpopt, :CTSolversKnitro, + :CTSolversMadNLP, :CTSolversMadNCL), + CTFlows => (:CTFlowsPlots, :CTFlowsSciMLFlows, + :CTFlowsSciMLIntegrator), +] + for s in syms + m = _ext(pkg, s) + isnothing(m) || push!(Modules, m) + end +end + for Module in Modules isnothing(DocMeta.getdocmeta(Module, :DocTestSetup)) && DocMeta.setdocmeta!(Module, :DocTestSetup, :(using $Module); recursive=true) @@ -153,7 +111,7 @@ cp( Draft = false ``` =# -draft = false # Draft mode: skip @example execution globally; tutorial overrides below +draft = true # Draft mode: skip @example execution globally; guided tour overrides below # ═══════════════════════════════════════════════════════════════════════════════ # Load extensions @@ -175,12 +133,78 @@ ext_dir = abspath(joinpath(@__DIR__, "..", "ext")) include("api_reference.jl") # ═══════════════════════════════════════════════════════════════════════════════ -# Literate: generate tutorial.md, tutorial.ipynb, tutorial.jl +# InterLinks +# ═══════════════════════════════════════════════════════════════════════════════ +links = InterLinks( + "CTBase" => ( + "https://control-toolbox.org/CTBase.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTBase", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTBase.jl/stable/objects.inv", + ), + "CTDirect" => ( + "https://control-toolbox.org/CTDirect.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTDirect.jl", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTDirect.jl/stable/objects.inv", + ), + "CTFlows" => ( + "https://control-toolbox.org/CTFlows.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTFlows.jl", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTFlows.jl/stable/objects.inv", + ), + "CTLie" => ( + "https://control-toolbox.org/CTLie.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTLie", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTLie.jl/stable/objects.inv", + ), + "CTModels" => ( + "https://control-toolbox.org/CTModels.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTModels.jl", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTModels.jl/stable/objects.inv", + ), + "CTParser" => ( + "https://control-toolbox.org/CTParser.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTParser.jl", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTParser.jl/stable/objects.inv", + ), + "CTSolvers" => ( + "https://control-toolbox.org/CTSolvers.jl/stable/", + joinpath(@__DIR__, "..", "..", "CTSolvers", "docs", "build", "1", "objects.inv"), + "https://control-toolbox.org/CTSolvers.jl/stable/objects.inv", + ), + "ADNLPModels" => ( + "https://jso.dev/ADNLPModels.jl/stable/", + joinpath(@__DIR__, "inventories", "ADNLPModels.toml"), + "https://jso.dev/ADNLPModels.jl/stable/objects.inv", + ), + "NLPModelsIpopt" => ( + "https://jso.dev/NLPModelsIpopt.jl/stable/", + joinpath(@__DIR__, "inventories", "NLPModelsIpopt.toml"), + "https://jso.dev/NLPModelsIpopt.jl/stable/objects.inv", + ), + "ExaModels" => ( + "https://exanauts.github.io/ExaModels.jl/stable/", + joinpath(@__DIR__, "inventories", "ExaModels.toml"), + "https://exanauts.github.io/ExaModels.jl/stable/objects.inv", + ), + "MadNLP" => ( + "https://madnlp.github.io/MadNLP.jl/stable/", + joinpath(@__DIR__, "inventories", "MadNLP.toml"), + "https://madnlp.github.io/MadNLP.jl/stable/objects.inv", + ), + "Tutorials" => ( + "https://control-toolbox.org/Tutorials.jl/stable/", + joinpath(@__DIR__, "inventories", "Tutorials.toml"), + "https://control-toolbox.org/Tutorials.jl/stable/objects.inv", + ), +) + +# ═══════════════════════════════════════════════════════════════════════════════ +# Literate: generate getting-started/guided-tour.md and sidecar files # ═══════════════════════════════════════════════════════════════════════════════ using Literate LITERATE_DIR = joinpath(@__DIR__, "src-literate") -MD_OUTPUT = joinpath(@__DIR__, "src") +MD_OUTPUT = joinpath(@__DIR__, "src", "getting-started") NB_OUTPUT = joinpath(@__DIR__, "src", "notebooks") JL_OUTPUT = joinpath(@__DIR__, "src", "scripts") mkpath(NB_OUTPUT) @@ -188,14 +212,15 @@ mkpath(JL_OUTPUT) for file in ["tutorial.jl"] INPUT = joinpath(LITERATE_DIR, file) - # Inject @meta Draft=false so the tutorial executes even with global draft=true - function tutorial_postprocess(content) - # return "```@meta\nDraft = false\n```\n\n" * content - return content - end - Literate.markdown(INPUT, MD_OUTPUT; documenter=true, postprocess=tutorial_postprocess) - Literate.notebook(INPUT, NB_OUTPUT; execute=false) - Literate.script(INPUT, JL_OUTPUT) + # No Draft=false override: the guided tour is real tutorial content, not + # yet written/debugged (that's PR 11's job) — it must stay skipped under + # the global draft=true like every other stub page until then. Forcing + # it to execute early surfaced several unrelated runtime bugs + # (docs/reports/01-infrastructure.md's own PR 2 scope is "a green build + # with mostly empty pages"). + Literate.markdown(INPUT, MD_OUTPUT; name="guided-tour") + Literate.notebook(INPUT, NB_OUTPUT; name="guided-tour", execute=false) + Literate.script(INPUT, JL_OUTPUT; name="guided-tour") end # ═══════════════════════════════════════════════════════════════════════════════ @@ -203,10 +228,9 @@ end # ═══════════════════════════════════════════════════════════════════════════════ with_api_reference(src_dir, ext_dir) do api_pages - # add api/public.md + # add api/ecosystem.md to the generated API pages api_pages_final = copy(api_pages) - pushfirst!(api_pages_final, "Public" => joinpath("api", "public.md")) - push!(api_pages_final, "Subpackages" => joinpath("api", "subpackages.md")) + push!(api_pages_final, "Ecosystem" => "api/ecosystem.md") # build documentation return makedocs(; @@ -219,38 +243,53 @@ with_api_reference(src_dir, ext_dir) do api_pages ), pages=[ # index.md is the VitePress root — not listed here - "Guided tour" => "tutorial.md", - "Examples" => [ - "Energy minimisation" => "example-double-integrator-energy.md", - "Time minimisation" => "example-double-integrator-time.md", - "Control-free problems" => "example-control-free.md", - "Control and variable" => "example-control-and-variable.md", - "Singular control" => "example-singular-control.md", - "State constraint" => "example-state-constraint.md", + "Getting started" => [ + "Installation" => "getting-started/installation.md", + "First problem" => "getting-started/first-problem.md", + "Guided tour" => "getting-started/guided-tour.md", + ], + "Modelling" => [ + "Formulation" => "modelling/formulation.md", + "Abstract syntax (@def)" => "modelling/abstract-syntax.md", + "Functional API" => "modelling/functional-api.md", + "No control" => "modelling/without-control.md", + "Inspect a problem" => "modelling/inspect.md", + "With AI" => "modelling/with-ai.md", + ], + "Solve (direct)" => [ + "Overview" => "solve/overview.md", + "Initial guess" => "solve/initial-guess.md", + "Choosing a method" => "solve/choosing-a-method.md", + "Options" => "solve/options.md", + "Explicit mode" => "solve/explicit-mode.md", + "GPU" => "solve/gpu.md", + ], + "Results" => [ + "Solution object" => "results/solution.md", + "Plot" => "results/plot.md", + "Save & load" => "results/save-load.md", + ], + "Flows (indirect)" => [ + "Overview" => "flows/overview.md", + "From an OCP" => "flows/from-ocp.md", + "From Hamiltonians" => "flows/from-hamiltonians.md", + "Simulation" => "flows/simulation.md", + "Accessors" => "flows/accessors.md", + "Multi-phase" => "flows/multi-phase.md", + "Constrained arcs" => "flows/constrained-arcs.md", + "Shooting" => "flows/shooting.md", ], - "Manual" => [ - "Define a problem" => [ - "Abstract syntax (@def)" => "manual-abstract.md", - "Functional API (macro-free)" => "manual-macro-free.md", - ], - "Use AI" => "manual-ai-llm.md", - "Problem characteristics" => "manual-model.md", - "Set an initial guess" => "manual-initial-guess.md", - "Solve a problem" => [ - "Basic usage" => "manual-solve.md", - "Advanced options" => "manual-solve-advanced.md", - "Explicit mode" => "manual-solve-explicit.md", - "GPU solving" => "manual-solve-gpu.md", - ], - "Solution characteristics" => "manual-solution.md", - "Plot a solution" => "manual-plot.md", - "Differential geometry tools" => "manual-differential-geometry.md", - "Compute flows" => [ - "From optimal control problems" => "manual-flow-ocp.md", - "From Hamiltonians and others" => "manual-flow-others.md", - ], + "Geometry" => [ + "Overview" => "geometry/overview.md", + "Lift" => "geometry/lift.md", + "ad" => "geometry/ad.md", + "Poisson" => "geometry/poisson.md", + "@Lie" => "geometry/lie-macro.md", + "AD backend" => "geometry/ad-backend.md", ], + "Examples" => "examples/gallery.md", "API Reference" => api_pages_final, + "Migrating to v2.1" => "migration.md", ], plugins=[links], ) diff --git a/docs/reports/09-api-reference.md b/docs/reports/09-api-reference.md index 220263543..2a8388038 100644 --- a/docs/reports/09-api-reference.md +++ b/docs/reports/09-api-reference.md @@ -170,16 +170,49 @@ Judgement calls, recorded so they are not re-argued: ## Acceptance criteria -- [ ] `docs/src/api/public.md` and `api/subpackages.md` are deleted. -- [ ] Every theme page is generated at build time and removed by `_cleanup_pages`. -- [ ] The completeness check runs and reports **zero** missing and **zero** stale symbols. -- [ ] `api/ecosystem.md` lists all seven packages including **CTLie**, and every link +- [x] `docs/src/api/public.md` and `api/subpackages.md` are deleted. +- [x] Every theme page is generated at build time and removed by `_cleanup_pages`. +- [x] The completeness check runs and reports **zero** missing and **zero** stale symbols. +- [x] `api/ecosystem.md` lists all seven packages including **CTLie**, and every link resolves through `InterLinks`. -- [ ] The Internals page is titled "Internals" and includes `describe`. -- [ ] No `@docs` block anywhere under `docs/src/` outside `api/` — the guides link to the +- [x] The Internals page is titled "Internals" and includes `describe`. +- [x] No `@docs` block anywhere under `docs/src/` outside `api/` — the guides link to the reference, they do not inline it (this deletes the inline block currently at the end of `attic/manual-macro-free.md`). -- [ ] `docs/make.jl`'s API node is built from the manifest, not from a literal list. +- [x] `docs/make.jl`'s API node is built from the manifest, not from a literal list. + +Verified by an independent full rebuild (`julia --project=docs docs/make.jl` + +`npx vitepress build build/1`), not just re-checked against the diff: all seven criteria hold, +and this rework also fixes the 10 unresolved self-`@ref`s for `solve`/`methods`/`describe` on +the old `api/private.md` found while auditing PR 2's build. + +The manifest itself was rewritten as a literal, hand-maintained `API_THEMES` array (per this +report's own example) rather than parsed from `99-api-coverage.md` at build time — an earlier +draft scraped that file's prose and picked up 46 symbols that don't actually resolve in +`@docs` (bare `constraint`/`objective`/`variable`/`parameter` etc. need module qualification; +six others — `solve_explicit`, `solve_descriptive`, `SolveMode`, `display_ocp_configuration`, +`get_full_strategy_registry`, `will_solver_print` — are explicitly listed in +`99-api-coverage.md` §12 as **not** documented as available, but the scraper picked them up +from the sentence saying so anyway, since it does not understand negation in prose). All of +these are fixed now: zero "undefined binding" / "no docs found" / "duplicate docs found" +warnings on a full rebuild, one genuine upstream gap found and filed +([`CTDirect.jl#623`](https://github.com/control-toolbox/CTDirect.jl/issues/623): +`Collocation` has no docstring at all), and the six module aliases (`CTBase`, `CTLie`, +`CTFlows`, `CTModels`, `ADNLPModels`, `ExaModels`) moved from `@docs` to prose on +`api/qualified.md`, since `@doc` on a bare module without its own docstring only returns +Julia's generic "here are its exports" filler. + +Not fixed here, and out of scope for this PR: a large number of "cannot resolve `@ref`" +warnings on the generated theme pages, from sibling-package docstrings whose own "See also" +cross-references use bare `@ref` (correct only within their own doc build, not when the +docstring is reused here). This is **not** permanent upstream debt: CTBase 0.29, CTModels +0.16, CTFlows 0.17, CTLie and CTSolvers 0.5 have already migrated these to self-referencing +`@extref` (verified — zero bare `@ref` left in CTBase/CTModels/CTLie/CTSolvers `src/`, 15 +residual in CTFlows). The warnings persist only because `docs/Project.toml` is pinned to +older versions (`CTBase = "0.28"`, `CTModels = "0.15"`, …) — itself blocked on CTDirect and +CTParser not yet accepting the newer sibling releases, the same blocker tracked in +`.reports/upgrade-v2.1.0-beta.md`. Once that unblocks and the compat pins move, most of these +warnings should disappear on their own. `warnonly=true` tolerates them in the meantime. ## Outgoing links diff --git a/docs/reports/README.md b/docs/reports/README.md index e2b1cf1d6..afb94a790 100644 --- a/docs/reports/README.md +++ b/docs/reports/README.md @@ -49,9 +49,9 @@ Status legend: ⬜ not started · 🟡 in progress · ✅ merged | # | PR | Section | Spec | Depends on | Status | | --- | --- | --- | --- | --- | --- | | 1 | `docs: specification reports` | — | all of this directory | — | ✅ | -| 2 | `docs: infrastructure` | build + skeleton | [`01`](01-infrastructure.md) | 1 | ⬜ | -| 3 | `feat: deprecation shims` | `src/deprecated.jl` | [`10`](10-migration.md) §1 | 1 | ⬜ | -| 4 | `docs: API reference` | API reference | [`09`](09-api-reference.md) | 2 | ⬜ | +| 2 | [`docs: infrastructure`](https://github.com/control-toolbox/OptimalControl.jl/pull/854) | build + skeleton | [`01`](01-infrastructure.md) | 1 | 🟡 open, build verified green | +| 3 | [`feat: deprecation shims`](https://github.com/control-toolbox/OptimalControl.jl/pull/855) | `src/deprecated.jl` | [`10`](10-migration.md) §1 | 1 | 🟡 open, all acceptance criteria met | +| 4 | [`docs: API reference`](https://github.com/control-toolbox/OptimalControl.jl/pull/856) | API reference | [`09`](09-api-reference.md) | 2 | 🟡 open, all acceptance criteria met | | 5 | `docs: modelling` | Modelling | [`03`](03-modelling.md) | 2 | ⬜ | | 6 | `docs: solve` | Solve (direct) | [`04`](04-solve-direct.md) | 5 | ⬜ | | 7 | `docs: results` | Results | [`07`](07-results.md) | 6 | ⬜ | diff --git a/docs/src-literate/tutorial.jl b/docs/src-literate/tutorial.jl index 0ff118039..103256ef6 100644 --- a/docs/src-literate/tutorial.jl +++ b/docs/src-literate/tutorial.jl @@ -83,7 +83,7 @@ xf = [0, 0]; # ### The `@def` macro # -#md # The [`@def`](@ref manual-abstract-syntax) macro lets us write the problem almost exactly as the mathematics: +#md # The [`@def`](@ref modelling-abstract-syntax) macro lets us write the problem almost exactly as the mathematics: #nb # The [`@def`](https://control-toolbox.org/OptimalControl.jl/stable/manual-abstract.html) macro lets us write the problem almost exactly as the mathematics: # # Each line of the `@def` block mirrors a piece of the mathematical formulation — time, state, control, dynamics, boundary conditions, then cost — in the same order one would write them on paper. Unicode symbols (`∈`, `R²`, `ẋ`, `∫`, `→`) make the code read like the maths; plain ASCII alternatives (`R^2`, `derivative`, `integral`, `=>`) are available for keyboards or workflows that prefer them. @@ -104,7 +104,7 @@ end # ### The same problem with the macro-free (functional) API # -#md # The [functional API](@ref manual-macro-free) builds the *same* model step by step with plain functions — useful for programmatic problem generation or macro-free library code. +#md # The [functional API](@ref modelling-functional-api) builds the *same* model step by step with plain functions — useful for programmatic problem generation or macro-free library code. #nb # The [functional API](https://control-toolbox.org/OptimalControl.jl/stable/manual-macro-free.html) builds the *same* model step by step with plain functions — useful for programmatic problem generation or macro-free library code. pre = OptimalControl.PreModel() @@ -195,7 +195,7 @@ println("iterations, @init guess: ", iterations(sol)) # In this case both guesses give **1 iteration**: the double integrator is a *linear-quadratic* problem, so the NLP is quadratic and Ipopt solves it in a single step regardless of the starting point. Warm-starting only pays off on genuinely nonlinear problems — we will see this with the **Goddard rocket** in the next section. -#md # For all the ways to specify an initial guess, see [Set an initial guess](@ref manual-initial-guess). +#md # For all the ways to specify an initial guess, see [Set an initial guess](@ref solve-initial-guess). #nb # For all the ways to specify an initial guess, see [Set an initial guess](https://control-toolbox.org/OptimalControl.jl/stable/manual-initial-guess.html). #md # !!! note #md # There is currently no way to initialise the costate directly — only state, control and variable can be provided through `@init`. The solver initialises the adjoint internally (as we saw above). Costate initialisation is a planned feature. @@ -266,7 +266,7 @@ end # ### Choosing a solver is trivial # -#md # `solve` uses the defaults (collocation, ADNLP modeler, Ipopt, CPU). Switching solver is just loading a package and passing a token (see [Solve a problem](@ref manual-solve)): +#md # `solve` uses the defaults (collocation, ADNLP modeler, Ipopt, CPU). Switching solver is just loading a package and passing a token (see [Solve a problem](@ref solve-overview)): #nb # `solve` uses the defaults (collocation, ADNLP modeler, Ipopt, CPU). Switching solver is just loading a package and passing a token (see [Solve a problem](https://control-toolbox.org/OptimalControl.jl/stable/manual-solve.html)): using MadNLP @@ -382,7 +382,7 @@ catch e println("Exception: ", first(sprint(showerror, e), 400)) end -#md # For the full GPU setup, see [Solve on GPU](@ref manual-solve-gpu). +#md # For the full GPU setup, see [Solve on GPU](@ref solve-gpu). #nb # For the full GPU setup, see [Solve on GPU](https://control-toolbox.org/OptimalControl.jl/stable/manual-solve-gpu.html). #src ============================================================================ @@ -467,12 +467,12 @@ println("shoot S(p0) = ", S(p0_sol)) # Reconstruct the indirect solution from the flow and overlay it with the direct solution: -indirect_sol = φ((t0, tf), x0, p0_sol; saveat=range(t0, tf, 100)) +indirect_sol = φ((t0, tf), x0, p0_sol) plt_compare = plot(direct_sol; label="direct", size=(800, 600)) plot!(plt_compare, indirect_sol; label="indirect") -#md # See [Compute flows from optimal control problems](@ref manual-flow-ocp) for the flow construction, and the [indirect simple shooting tutorial](@extref tutorial-indirect-simple-shooting). +#md # See [Compute flows from optimal control problems](@ref flows-from-ocp) for the flow construction, and the [indirect simple shooting tutorial](@extref tutorial-indirect-simple-shooting). #nb # See [Compute flows from optimal control problems](https://control-toolbox.org/OptimalControl.jl/stable/manual-flow-ocp.html) for the flow construction, and the [indirect simple shooting tutorial](https://control-toolbox.org/Tutorials.jl/stable/). #src ============================================================================ @@ -480,15 +480,15 @@ plot!(plt_compare, indirect_sol; label="indirect") #src ============================================================================ # # **Variables & parameters.** Beyond the control, one can optimise **parameters** naturally, both in an OCP (the `variable` keyword of the DSL) and in a differential-constraint optimisation problem **without any control** (a *control-free* problem). -#md # See [control-free problems](@ref example-control-free). +#md # See [control-free problems](@ref examples-gallery). #nb # See [control-free problems](https://control-toolbox.org/OptimalControl.jl/stable/example-control-free.html). #src NOTE(v1): parameter estimation is only *mentioned* here. The worked example is an #src extension (out of v1) — see .reports/tutorial-brainstorming.md "Extensions futures". # # **Advanced examples** (each does both direct and indirect): # -#md # - Singular control (control-affine systems) — [singular control](@ref example-singular-control) -#md # - State constraint — [state constraint](@ref example-state-constraint) +#md # - Singular control (control-affine systems) — [singular control](@ref examples-gallery) +#md # - State constraint — [state constraint](@ref examples-gallery) #md # - Goddard problem — free final time, a singular arc, a state constraint and a structured shooting all at once — [Goddard tutorial](@extref Tutorials tutorial-goddard) #nb # - Singular control (control-affine systems) — #nb # - State constraint — diff --git a/docs/src-literate/tutorial_pre.jl b/docs/src-literate/tutorial_pre.jl deleted file mode 100644 index 9bcc04004..000000000 --- a/docs/src-literate/tutorial_pre.jl +++ /dev/null @@ -1,2 +0,0 @@ -pushfirst!(LOAD_PATH, joinpath(@__DIR__, "..")) -pushfirst!(LOAD_PATH, joinpath(@__DIR__, "..", "..")) diff --git a/docs/src/api/ecosystem.md b/docs/src/api/ecosystem.md new file mode 100644 index 000000000..39db5951b --- /dev/null +++ b/docs/src/api/ecosystem.md @@ -0,0 +1,13 @@ +# [Ecosystem](@id api-ecosystem) + +Everything documented in this API reference is reachable from `using OptimalControl`. +OptimalControl is the user-facing entry point of the control-toolbox ecosystem; it +re-exports and wires together the lower-level packages below. + +- [CTBase](@extref CTBase index) +- [CTDirect](@extref CTDirect index) +- [CTFlows](@extref CTFlows index) +- [CTLie](@extref CTLie index) +- [CTModels](@extref CTModels index) +- [CTParser](@extref CTParser index) +- [CTSolvers](@extref CTSolvers index) diff --git a/docs/src/assets/Manifest.toml b/docs/src/assets/Manifest.toml index a97b8026e..357b9cc78 100644 --- a/docs/src/assets/Manifest.toml +++ b/docs/src/assets/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.12.6" manifest_format = "2.0" -project_hash = "f162caf2a328205a3f9b513ec41770aa8fc3ac1b" +project_hash = "dda4f3934c82d9777bee29d127aad4a323bf2ab9" [[deps.ADNLPModels]] deps = ["ADTypes", "ForwardDiff", "LinearAlgebra", "NLPModels", "Requires", "ReverseDiff", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings"] @@ -11,9 +11,9 @@ uuid = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" version = "0.8.13" [[deps.ADTypes]] -git-tree-sha1 = "ec6be48a85c93d995563b84bff8a86bc98df45ce" +git-tree-sha1 = "5970c86505ae9c07bf5bc521ef2bbbb3849e8b7b" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.22.2" +version = "1.23.0" weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] [deps.ADTypes.extensions] @@ -101,9 +101,9 @@ version = "1.1.2" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "60f11b38ebeabd984f5535838d91e197d97202f0" +git-tree-sha1 = "b79a0bd275c2036b3ab9ed42ddef6f5eb48e1902" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.28.1" +version = "7.29.0" [deps.ArrayInterface.extensions] ArrayInterfaceAMDGPUExt = "AMDGPU" @@ -169,28 +169,21 @@ version = "0.6.1" uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" -[[deps.BenchmarkTools]] -deps = ["Compat", "JSON", "Logging", "PrecompileTools", "Printf", "Profile", "Statistics", "UUIDs"] -git-tree-sha1 = "9670d3febc2b6da60a0ae57846ba74670290653f" -uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "1.8.0" +[[deps.BinaryHeaps]] +git-tree-sha1 = "25718f410ed710fda29a8122eb8f9dcdb640c5fc" +uuid = "b2a6c25c-c996-4615-94ab-6e519ffb8690" +version = "1.0.4" [[deps.BitFlags]] git-tree-sha1 = "bbe1079eecf9c9fbb52765193ad2bae27ae09bc8" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.10" -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.6" - [[deps.BracketingNonlinearSolve]] -deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "7ad7171d693ae5552ac43862e7f6b61df4471c2b" +deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging"] +git-tree-sha1 = "1988c711ecd5b5d970355491a726bc355de9ba6e" uuid = "70df07ce-3d50-431d-a3e7-ca6ddb60ac1e" -version = "1.12.1" +version = "1.12.5" weakdeps = ["ChainRulesCore", "ForwardDiff"] [deps.BracketingNonlinearSolve.extensions] @@ -208,51 +201,58 @@ git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.5.0" -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] -git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.7" - [[deps.CTBase]] -deps = ["DocStringExtensions"] -git-tree-sha1 = "d0b5663ca6343c475bb9fc54520c9a4a34425c30" +deps = ["ADTypes", "DocStringExtensions"] +git-tree-sha1 = "20c6e9ee2beda7262dfd1903a0ac3af00f2fe9d0" uuid = "54762871-cc72-4466-b8e8-f6c8b58076cd" -version = "0.18.8" +version = "0.28.9-beta" [deps.CTBase.extensions] + CTBaseDifferentiationInterface = ["DifferentiationInterface"] + CTBasePlots = ["Plots"] CoveragePostprocessing = ["Coverage"] - DocumenterReference = ["Documenter", "MarkdownAST", "Markdown"] + DocumenterReference = ["Documenter", "Markdown", "MarkdownAST"] TestRunner = ["Test"] [deps.CTBase.weakdeps] Coverage = "a2441757-f6aa-5fb2-8edb-039e3f45d037" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" MarkdownAST = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" + Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.CTDirect]] -deps = ["ADNLPModels", "CTModels", "CTSolvers", "DocStringExtensions", "ExaModels", "SolverCore", "SparseArrays", "SparseConnectivityTracer"] -git-tree-sha1 = "be35471ebed785f222afaaecad16ba78ba626a6d" +deps = ["ADNLPModels", "CTBase", "CTModels", "CTParser", "CTSolvers", "DocStringExtensions", "ExaModels", "SolverCore", "SparseArrays", "SparseConnectivityTracer"] +git-tree-sha1 = "f8e3825bffc9618fc395fb1615ba54f7cf93f831" uuid = "790bbbee-bee9-49ee-8912-a9de031322d5" -version = "1.0.12" +version = "1.1.0-beta" [[deps.CTFlows]] -deps = ["CTBase", "CTModels", "DocStringExtensions", "ForwardDiff", "LinearAlgebra", "MLStyle", "MacroTools"] -git-tree-sha1 = "b555d36b668dc149334a50b835df91a301bad8ac" +deps = ["ADTypes", "CTBase", "CTModels", "CTSolvers", "CommonSolve", "DocStringExtensions", "GPUArraysCore", "RecipesBase"] +git-tree-sha1 = "b6baf4ab49152b914ddbab9573628ff8323b1245" uuid = "1c39547c-7794-42f7-af83-d98194f657c2" -version = "0.8.25" -weakdeps = ["OrdinaryDiffEq"] +version = "0.16.3-beta" +weakdeps = ["Plots", "SciMLBase", "StaticArrays"] [deps.CTFlows.extensions] - CTFlowsODE = "OrdinaryDiffEq" + CTFlowsPlots = ["Plots"] + CTFlowsSciMLFlows = ["SciMLBase"] + CTFlowsSciMLIntegrator = ["SciMLBase"] + CTFlowsStaticArrays = ["StaticArrays"] + +[[deps.CTLie]] +deps = ["CTBase", "DocStringExtensions", "MacroTools"] +git-tree-sha1 = "0d2430616c9d327132554d6c35b9c96826629da9" +uuid = "6880e05b-3a7d-4cac-887c-30cb52c5fdde" +version = "0.1.5-beta" [[deps.CTModels]] deps = ["CTBase", "DocStringExtensions", "LinearAlgebra", "MLStyle", "MacroTools", "OrderedCollections", "Parameters", "RecipesBase"] -git-tree-sha1 = "77f34892988d4a5f7e0ca1fe6e0c21255a9e4478" +git-tree-sha1 = "fab733098cfbf9b90b45444628776d8abcb390a3" uuid = "34c4fa32-2049-4079-8329-de33c2a22e2d" -version = "0.10.1" +version = "0.15.3-beta" weakdeps = ["JLD2", "JSON3", "Plots"] [deps.CTModels.extensions] @@ -267,50 +267,69 @@ uuid = "32681960-a1b1-40db-9bff-a1ca817385d1" version = "0.8.17-beta" [[deps.CTSolvers]] -deps = ["ADNLPModels", "CTBase", "CTModels", "CommonSolve", "DocStringExtensions", "ExaModels", "KernelAbstractions", "NLPModels", "SolverCore"] -git-tree-sha1 = "72b7ad3cd1430fc3ec1a6290b607d6f8bd3904b7" +deps = ["CTBase", "CTModels", "CommonSolve", "DocStringExtensions", "KernelAbstractions", "SolverCore"] +git-tree-sha1 = "7526cb348b58dd866ed0cee7fd6d957c407b6bc4" uuid = "d3e8d392-8e4b-4d9b-8e92-d7d4e3650ef6" -version = "0.4.17" +version = "0.4.34-beta" [deps.CTSolvers.extensions] + CTSolversADNLPModels = "ADNLPModels" CTSolversCUDA = "CUDA" CTSolversEnzyme = "Enzyme" - CTSolversIpopt = "NLPModelsIpopt" - CTSolversKnitro = "NLPModelsKnitro" - CTSolversMadNCL = ["MadNCL", "MadNLP"] - CTSolversMadNLP = ["MadNLP"] - CTSolversMadNLPGPU = "MadNLPGPU" - CTSolversUno = "UnoSolver" + CTSolversExaModels = ["ExaModels"] + CTSolversForwardDiff = "ForwardDiff" + CTSolversIpopt = ["NLPModels", "NLPModelsIpopt"] + CTSolversKnitro = ["NLPModels", "NLPModelsKnitro"] + CTSolversMadNCL = ["MadNCL", "MadNLP", "NLPModels"] + CTSolversMadNLP = ["MadNLP", "NLPModels"] + CTSolversMadNLPGPU = ["MadNLPGPU", "CUDA", "CUDSS"] + CTSolversOrdinaryDiffEqTsit5 = "OrdinaryDiffEqTsit5" + CTSolversSciMLIntegrator = ["DiffEqBase", "SciMLBase"] + CTSolversUno = ["NLPModels", "UnoSolver"] CTSolversZygote = "Zygote" [deps.CTSolvers.weakdeps] + ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" MadNCL = "434a0bcb-5a7c-42b2-a9d3-9e3f760e7af0" MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" MadNLPGPU = "d72a61cc-809d-412f-99be-fd81f4b8a598" + NLPModels = "a4795742-8479-5a88-8948-cc11e1c8c1a6" NLPModelsIpopt = "f4238b75-b362-5c4c-b852-0801c9a21d71" NLPModelsKnitro = "bec4dd0d-7755-52d5-9a02-22f0ffc7efcb" + OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a" + SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" UnoSolver = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.CUDA]] -deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Compiler_jll", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "ExprTools", "GPUArrays", "GPUCompiler", "GPUToolbox", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "demumble_jll"] -git-tree-sha1 = "54751d09f9acf05ea7b7ee6baa6a99677c788880" +deps = ["CUDACore", "CUDATools", "Reexport", "cuBLAS", "cuFFT", "cuRAND", "cuSOLVER", "cuSPARSE"] +git-tree-sha1 = "1e543921b03c9f373e795d76205924deb048ac84" uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" -version = "5.11.3" +version = "6.2.1" - [deps.CUDA.extensions] +[[deps.CUDACore]] +deps = ["Adapt", "BFloat16s", "CEnum", "CUDA_Compiler_jll", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "ExprTools", "GPUArrays", "GPUCompiler", "GPUToolbox", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVPTX_LLVM_Backend_jll", "PrecompileTools", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "StaticArrays"] +git-tree-sha1 = "fb8744c38decc0247c71646020cddd80d0063e4b" +uuid = "bd0ed864-bdfe-4181-a5ed-ce625a5fdea2" +version = "6.2.1" +weakdeps = ["CUDA", "ChainRulesCore", "EnzymeCore", "SpecialFunctions"] + + [deps.CUDACore.extensions] ChainRulesCoreExt = "ChainRulesCore" EnzymeCoreExt = "EnzymeCore" - SparseMatricesCSRExt = "SparseMatricesCSR" SpecialFunctionsExt = "SpecialFunctions" - [deps.CUDA.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" - SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" +[[deps.CUDATools]] +deps = ["CUDACore", "CUDA_Compiler_jll", "CUPTI", "Crayons", "GPUCompiler", "LLVM", "NVML", "NVTX", "PrecompileTools", "Preferences", "PrettyTables", "Printf", "Statistics", "demumble_jll"] +git-tree-sha1 = "e7e94c3ac5cb939935948808e53209f3c5263a95" +uuid = "9ec180c6-1c07-47c7-9e6e-ebefa4d1f6d0" +version = "6.2.1" [[deps.CUDA_Compiler_jll]] deps = ["Artifacts", "CUDA_Driver_jll", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] @@ -319,10 +338,10 @@ uuid = "d1e2174e-dfdc-576e-b43e-73b79eb1aca8" version = "0.4.4+1" [[deps.CUDA_Driver_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "TOML"] -git-tree-sha1 = "ff4a0abf98be36d9fa15ca7e968df562a210ab4b" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "901cc2d895842b2ddef81715cb70fffc3b5028ae" uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" -version = "13.3.0+1" +version = "13.3.1+0" [[deps.CUDA_Runtime_Discovery]] deps = ["Libdl"] @@ -332,21 +351,15 @@ version = "2.1.0" [[deps.CUDA_Runtime_jll]] deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "c0314d9fb0ebd00e404feba4c3fbc04c9975abc1" +git-tree-sha1 = "2e0352eb2a8321e46e1de54059bed9be8fd9391c" uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" -version = "0.21.0+1" +version = "0.23.0+1" -[[deps.CUDSS]] -deps = ["CEnum", "CUDA", "CUDSS_jll", "GPUToolbox", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "2d193125a15d15db83d16ab9a02ae4bf7027a18e" -uuid = "45b445bb-4962-46a0-9369-b4df9d0f772e" -version = "0.6.5" - -[[deps.CUDSS_jll]] -deps = ["Artifacts", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "b40ab570473a4bf8694c7922a22c2def848ccfcf" -uuid = "4889d778-9329-5762-9fec-0578a5d30366" -version = "0.7.1+0" +[[deps.CUPTI]] +deps = ["CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUToolbox"] +git-tree-sha1 = "167e95cf9b83ab1cd2af1362faf7aebe0b193e27" +uuid = "9e67e8f6-ba02-4b6c-a7db-3b11ae1e7ab7" +version = "6.2.1" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] @@ -381,17 +394,11 @@ git-tree-sha1 = "34d9873079e4cb3d0c62926a225136824677073f" uuid = "55437552-ac27-4d47-9aa3-63184e8fd398" version = "1.0.0" -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.13" - [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +git-tree-sha1 = "970758a3d591a2a5c2a907c53f2e2f8c1b1d3537" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.8" +version = "0.7.9" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] @@ -426,9 +433,9 @@ uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.13.1" [[deps.CommonSolve]] -git-tree-sha1 = "eeaad7cef88554c2fa56b5a3f71cfd5cb708c662" +git-tree-sha1 = "cf963add2340ad9960e5eb22844e61ad8f931fe1" uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.11" +version = "0.2.13" [[deps.CommonSubexpressions]] deps = ["MacroTools"] @@ -436,11 +443,6 @@ git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.1" -[[deps.CommonWorldInvalidations]] -git-tree-sha1 = "cde75cb34c9ee07b4c37981b0f32378d0dc19ffe" -uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" -version = "1.1.1" - [[deps.Compat]] deps = ["TOML", "UUIDs"] git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" @@ -466,15 +468,15 @@ weakdeps = ["InverseFunctions"] CompositionsBaseInverseFunctionsExt = "InverseFunctions" [[deps.ConcreteStructs]] -git-tree-sha1 = "23a2ac1ab2a39460d4feecddf09b02e9019d6dd5" +git-tree-sha1 = "804fc3ca1cbfdd5aa52ae3149c0cb0555f875eec" uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" -version = "0.2.6" +version = "0.2.7" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] -git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" +git-tree-sha1 = "3c9be947934c38475bafe822c6d61aaed17f0738" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.5.1" +version = "2.6.0" [[deps.ConstructionBase]] git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" @@ -496,12 +498,6 @@ git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.6.3" -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - [[deps.Crayons]] git-tree-sha1 = "54b76cbb40d9a0f5368c880725b2f141da77c94f" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" @@ -512,12 +508,6 @@ git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.16.0" -[[deps.DataFrames]] -deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "5fab31e2e01e70ad66e3e24c968c264d1cf166d6" -uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.2" - [[deps.DataStructures]] deps = ["OrderedCollections"] git-tree-sha1 = "b0bc6d2cad1fed8b7fd59a1551a991cb3d2809e6" @@ -547,10 +537,10 @@ uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "BracketingNonlinearSolve", "ConcreteStructs", "DocStringExtensions", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] -git-tree-sha1 = "9d333db14895e8c7d4857ed228eb1e72d3b302ec" +deps = ["ArrayInterface", "BracketingNonlinearSolve", "ConcreteStructs", "DocStringExtensions", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "RespecializeParams", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "c0484d1fe39e1d86216d7a4eac3eb827b916ef55" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.218.0" +version = "7.15.0" [deps.DiffEqBase.extensions] DiffEqBaseCUDAExt = "CUDA" @@ -721,34 +711,26 @@ uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" version = "0.0.20230411+1" [[deps.ExaModels]] -deps = ["NLPModels", "Printf", "SolverCore"] -git-tree-sha1 = "59cb2c3630989ad8081fef9d920f9fe84b5f2f2c" +deps = ["Adapt", "NLPModels", "Printf", "SolverCore"] +git-tree-sha1 = "dcca978ca344d939bb87df2ac315adac32d34d45" uuid = "1037b233-b668-4ce9-9b63-f9f681f55dd2" -version = "0.9.7" +version = "0.11.2" [deps.ExaModels.extensions] - ExaModelsAMDGPU = "AMDGPU" - ExaModelsCUDA = "CUDA" - ExaModelsIpopt = ["MathOptInterface", "NLPModelsIpopt"] ExaModelsJuMP = "JuMP" ExaModelsKernelAbstractions = "KernelAbstractions" - ExaModelsLinearAlgebra = "LinearAlgebra" ExaModelsMOI = "MathOptInterface" - ExaModelsMadNLP = ["MadNLP", "MathOptInterface"] + ExaModelsMetal = "Metal" ExaModelsOneAPI = "oneAPI" ExaModelsOpenCL = "OpenCL" ExaModelsSpecialFunctions = "SpecialFunctions" [deps.ExaModels.weakdeps] - AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" - NLPModelsIpopt = "f4238b75-b362-5c4c-b852-0801c9a21d71" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" @@ -761,30 +743,15 @@ version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e6c4a6407a949e79a9d3f249bf49e6987c80e01f" +git-tree-sha1 = "f4d39eee89f1e58c26bf447f1d4156c0125d6838" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.8.2+0" - -[[deps.ExponentialUtilities]] -deps = ["Adapt", "ArrayInterface", "GPUArraysCore", "GenericSchur", "LinearAlgebra", "PrecompileTools", "Printf", "SparseArrays", "libblastrampoline_jll"] -git-tree-sha1 = "a3c8b66f8813b721a45bfe3cf32acf793aed78bb" -uuid = "d4d017d3-3776-5f7e-afef-a10c40355c18" -version = "1.31.0" -weakdeps = ["StaticArrays"] - - [deps.ExponentialUtilities.extensions] - ExponentialUtilitiesStaticArraysExt = "StaticArrays" +version = "2.8.3+0" [[deps.ExprTools]] git-tree-sha1 = "d2e49e7efd29719d6f28b891b0e0e159daa9d2b4" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" version = "0.1.11" -[[deps.ExproniconLite]] -git-tree-sha1 = "c13f0b150373771b0fdc1713c97860f8df12e6c2" -uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" -version = "0.10.14" - [[deps.FFMPEG]] deps = ["FFMPEG_jll"] git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" @@ -799,30 +766,27 @@ version = "8.1.2+0" [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra"] -git-tree-sha1 = "52216cc6b2e5b11ac6623ff2398ac00faf1c6e42" +git-tree-sha1 = "6a97f3e08655ea9df1a946e378770c4d3fb3c4e9" uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" -version = "1.3.4" -weakdeps = ["Polyester", "Static"] +version = "1.3.6" [deps.FastBroadcast.extensions] FastBroadcastPolyesterExt = "Polyester" FastBroadcastStaticExt = "Static" + [deps.FastBroadcast.weakdeps] + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + Static = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" + [[deps.FastClosures]] git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" version = "0.3.2" -[[deps.FastGaussQuadrature]] -deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "4916117dd032ec5959b7633aedbbac408ca5ddeb" -uuid = "442a2c76-b920-505d-bb47-c5924d526838" -version = "1.3.0" - [[deps.FastPower]] -git-tree-sha1 = "33a6dfb7ad41394b15e90c10c216181dba06cf15" +git-tree-sha1 = "eb92a563909f2d4cb2911e0e2cb247ad17c6e9ae" uuid = "a4df4552-cc26-4903-aec0-212e50a0e84b" -version = "1.3.4" +version = "1.4.1" [deps.FastPower.extensions] FastPowerEnzymeExt = "Enzyme" @@ -874,11 +838,17 @@ version = "1.17.0" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +[[deps.FindFirstFunctions]] +deps = ["PrecompileTools"] +git-tree-sha1 = "bba475ce782fc77777f539cf0b7c029207798db1" +uuid = "64ca27bc-2ba2-4a57-88aa-44e436879224" +version = "3.2.1" + [[deps.FiniteDiff]] deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "07e98e3f332ee60179813dd9cdf21412e3c0a96a" +git-tree-sha1 = "5031f23e040bf17082e5b52422d77b5e844eefb1" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.32.0" +version = "2.33.0" [deps.FiniteDiff.extensions] FiniteDiffBandedMatricesExt = "BandedMatrices" @@ -911,9 +881,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "244d838cae8f4f40bd7b0478a4912e265c50857d" +git-tree-sha1 = "1b86cca764a61dcac4fef4c5e16e378e5ed6953c" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.4.2" +version = "1.4.5" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -937,10 +907,10 @@ uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" version = "1.1.3" [[deps.FunctionWrappersWrappers]] -deps = ["FunctionWrappers", "PrecompileTools", "TruncatedStacktraces"] -git-tree-sha1 = "70a6ddcf65ee666a6873ba4bf1b02dc721474b38" +deps = ["FunctionWrappers", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "daced009d54a7cf502a9b5ed2f615c341f78af6f" uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" -version = "1.10.1" +version = "1.12.1" [deps.FunctionWrappersWrappers.extensions] FunctionWrappersWrappersEnzymeExt = ["Enzyme", "EnzymeCore"] @@ -964,9 +934,9 @@ version = "3.4.1+1" [[deps.GPUArrays]] deps = ["Adapt", "GPUArraysCore", "KernelAbstractions", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "ScopedValues", "Serialization", "SparseArrays", "Statistics"] -git-tree-sha1 = "4ea5e2aecfd52e595ff6c343410e32f83f5b9bbf" +git-tree-sha1 = "d9da1147842d01fca43d076310bbef82f4a671b2" uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "11.5.8" +version = "11.5.10" weakdeps = ["JLD2"] [deps.GPUArrays.extensions] @@ -979,19 +949,21 @@ uuid = "46192b85-c4d5-4398-a991-12ede77f4527" version = "0.2.0" [[deps.GPUCompiler]] -deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] -git-tree-sha1 = "b863a2e71f89328e2af69069490aec2448106e59" +deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "PrecompileTools", "Preferences", "REPL", "Scratch", "Serialization", "TOML", "Tracy", "UUIDs"] +git-tree-sha1 = "5e54ec63c34bcc878558b173c411b8efe6b08344" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "1.17.1" +version = "1.23.0" [deps.GPUCompiler.weakdeps] + AMDGPU_LLVM_Backend_jll = "cc5c0156-bd05-5a77-8a68-bb0aafb29019" LLVMDowngrader_jll = "f52de702-fb25-5922-94ba-81dd59b07444" + NVPTX_LLVM_Backend_jll = "ef6e0fe3-e6ef-59c0-bde6-4989574699e0" [[deps.GPUToolbox]] deps = ["LLVM"] -git-tree-sha1 = "a589b6c1a0eff953571f5d8b0474f5020831114d" +git-tree-sha1 = "872be1bbf430be3764d39b4251ca1690fb18c6e0" uuid = "096a3bc2-3ced-46d0-87f4-dd12716f4bfc" -version = "1.1.1" +version = "3.0.0" [[deps.GR]] deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] @@ -1011,12 +983,6 @@ git-tree-sha1 = "6fada551286ab6ea4ca1628cb2de9f166a2ec966" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.73.26+0" -[[deps.GenericSchur]] -deps = ["LinearAlgebra", "Printf"] -git-tree-sha1 = "a694e2a57394e409f7a11ee0977362a9fafcb8c7" -uuid = "c145ed77-6b09-5dd9-b285-bf645a82121e" -version = "0.5.6" - [[deps.GettextRuntime_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" @@ -1043,15 +1009,15 @@ version = "3.7.1+0" [[deps.Git_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "0dd4cfb426924210c8f42742751cbde74b27bfa3" +git-tree-sha1 = "7b16700f9e313c0d972d1222ede50a2076aa0770" uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.54.0+0" +version = "2.55.0+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" +git-tree-sha1 = "090526e65de8f69648ac156daae153de8b56df62" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.86.3+0" +version = "2.88.3+0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1066,9 +1032,9 @@ version = "1.0.2" [[deps.HSL_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4c7f8674babdebebb99ba9b20686711c5f48a395" +git-tree-sha1 = "4c6a01c7d6e6b5b726ba76951e76526b2cb39b13" uuid = "017b0a0e-03f4-516a-9b91-836bbd1904dd" -version = "4.0.6+0" +version = "4.0.8+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] @@ -1089,9 +1055,9 @@ version = "0.2.0" [[deps.HiGHS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Zlib_jll", "libblastrampoline_jll"] -git-tree-sha1 = "2d9747b79d17c4320fe48048a3a768fe6d6d82de" +git-tree-sha1 = "5b9e398d6e4ed7e1f9a801a6f50ecca92dab0e10" uuid = "8fd58aa0-07eb-5a78-9b36-339c94fd15ea" -version = "1.15.1+1" +version = "1.15.0+0" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] @@ -1105,24 +1071,6 @@ git-tree-sha1 = "0ee181ec08df7d7c911901ea38baf16f755114dc" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" version = "1.0.0" -[[deps.IfElse]] -git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" -uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -version = "0.1.1" - -[[deps.InlineStrings]] -git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" -uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" -version = "1.4.5" - - [deps.InlineStrings.extensions] - ArrowTypesExt = "ArrowTypes" - ParsersExt = "Parsers" - - [deps.InlineStrings.weakdeps] - ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" - Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" - [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" @@ -1144,11 +1092,6 @@ weakdeps = ["Dates", "Test"] InverseFunctionsDatesExt = "Dates" InverseFunctionsTestExt = "Test" -[[deps.InvertedIndices]] -git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" -uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.3.1" - [[deps.Ipopt]] deps = ["Ipopt_jll", "LinearAlgebra", "OpenBLAS32_jll", "PrecompileTools"] git-tree-sha1 = "f8443766032a81e1f2cddfd4f624a5650067f0d0" @@ -1163,9 +1106,9 @@ version = "1.15.0" [[deps.Ipopt_jll]] deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "MUMPS_seq_jll", "SPRAL_jll", "libblastrampoline_jll"] -git-tree-sha1 = "8e9d217c63a8c8af96949300180ba0558f7f88b5" +git-tree-sha1 = "d58bb7f6393b8ec1f6fb39eb6c1a7a83b8f8b521" uuid = "9cc047cb-c261-5740-88fc-0cf96f7bdcc7" -version = "300.1400.1901+0" +version = "300.1400.1902+0" [[deps.IrrationalConstants]] git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" @@ -1201,9 +1144,9 @@ version = "1.8.0" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "c89d196f5ffb64bfbf80985b699ea913b0d2c211" +git-tree-sha1 = "c7345ab1a7ca4dc8a02c9f6510da0d9857bbe513" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.6.1" +version = "1.7.1" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] @@ -1223,17 +1166,11 @@ version = "1.14.3" [deps.JSON3.weakdeps] ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" -[[deps.Jieko]] -deps = ["ExproniconLite"] -git-tree-sha1 = "2f05ed29618da60c06a87e9c033982d4f71d0b6c" -uuid = "ae98c720-c025-4a4a-838c-29b094483192" -version = "0.2.1" - [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1dae3057da6f2b9c857afef03177bbdc7c4afe92" +git-tree-sha1 = "037babc10853eeb8e585418922246cb97b8e5b74" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.2.0+0" +version = "3.2.0+1" [[deps.JuliaNVTXCallbacks_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1248,9 +1185,9 @@ version = "1.12.0" [[deps.KNITRO]] deps = ["KNITRO_jll", "Libdl"] -git-tree-sha1 = "f09b537872fa7a9c932a7555e3a0fde16b976abe" +git-tree-sha1 = "e7664b502391505b389450fbf688d6a6e42a0f6d" uuid = "67920dd8-b58e-52a8-8622-53c4cffbe346" -version = "1.3.0" +version = "1.3.1" [deps.KNITRO.extensions] KNITROMathOptInterfaceExt = ["MathOptInterface"] @@ -1278,9 +1215,9 @@ weakdeps = ["EnzymeCore", "LinearAlgebra", "SparseArrays"] [[deps.Krylov]] deps = ["LinearAlgebra", "Printf", "SparseArrays"] -git-tree-sha1 = "fc2e5bc665dfa1be33fac60b5762d462bccfae7b" +git-tree-sha1 = "71e740d00d71cdb15145d7fe0d6000ec70534598" uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" -version = "0.10.8" +version = "0.10.9" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1302,9 +1239,9 @@ version = "4.1.0+0" [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "PrecompileTools", "Preferences", "Printf", "Unicode"] -git-tree-sha1 = "39c054c8fd8cef1d405ba7e399d70710fdbae46c" +git-tree-sha1 = "c16e849ea9402330fd9945138bc4247b2d603848" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "9.11.0" +version = "9.12.0" weakdeps = ["BFloat16s"] [deps.LLVM.extensions] @@ -1312,9 +1249,9 @@ weakdeps = ["BFloat16s"] [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "8886105e8ed2aa53062ae99870840a1e3622aaac" +git-tree-sha1 = "7304136286a564be0f909ecf209d1105e6ddf613" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.44+0" +version = "0.0.45+0" [[deps.LLVMLoopInfo]] git-tree-sha1 = "2e5c102cfc41f48ae4740c7eca7743cc7e7b75ea" @@ -1350,12 +1287,6 @@ version = "0.16.11" SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.17" - [[deps.LazilyInitializedFields]] git-tree-sha1 = "0f2da712350b020bc3957f269c9caad516383ee0" uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" @@ -1439,19 +1370,15 @@ version = "2.42.0+0" [[deps.LineSearch]] deps = ["ADTypes", "CommonSolve", "ConcreteStructs", "FastClosures", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "SciMLBase", "SciMLJacobianOperators", "StaticArraysCore"] -git-tree-sha1 = "0ddc77c97e42b3024a1646278bdaafee0bd61583" +git-tree-sha1 = "2e05027f5a68891d997fcad60d11ce48d09208d0" uuid = "87fe0de2-c867-4266-b59a-2f0a94fc965b" -version = "0.1.12" -weakdeps = ["LineSearches"] +version = "0.1.14" [deps.LineSearch.extensions] LineSearchLineSearchesExt = "LineSearches" -[[deps.LineSearches]] -deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Printf"] -git-tree-sha1 = "cef1ba655e8c1f65af9d96c4fffe18bf1a3a3291" -uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" -version = "7.7.1" + [deps.LineSearch.weakdeps] + LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -1460,9 +1387,9 @@ version = "1.12.0" [[deps.LinearOperators]] deps = ["FastClosures", "LinearAlgebra", "Printf", "SparseArrays", "TimerOutputs"] -git-tree-sha1 = "4170853dfdb5ac1374ffb5fcf79c24ba5f0bb8e3" +git-tree-sha1 = "74f1bd5c1afef5a2d24a2b7917d3cb4b989a3ec6" uuid = "5c8ed15e-5a4c-59e4-a42b-c7e8811fb125" -version = "2.14.1" +version = "2.14.2" [deps.LinearOperators.extensions] LinearOperatorsAMDGPUExt = "AMDGPU" @@ -1485,76 +1412,96 @@ version = "2.14.1" TSVD = "9449cd9e-2762-5aa3-a617-5413e99d722e" [[deps.LinearSolve]] -deps = ["ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "97a6bf19ef32518268ba15f166fc030df43b619a" +deps = ["AMD", "ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "PureKLU", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "Setfield", "SparseArrays", "SparseColumnPivotedQR", "StaticArraysCore"] +git-tree-sha1 = "8ea4977471ea6e9b507e5e98d9cfcde3234f33e9" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "3.79.0" +version = "5.10.0" [deps.LinearSolve.extensions] LinearSolveAMDGPUExt = "AMDGPU" LinearSolveAlgebraicMultigridExt = "AlgebraicMultigrid" + LinearSolveArnoldiMethodExt = "ArnoldiMethod" + LinearSolveArpackExt = "Arpack" LinearSolveBLISExt = ["blis_jll", "LAPACK_jll"] LinearSolveBandedMatricesExt = "BandedMatrices" LinearSolveBlockDiagonalsExt = "BlockDiagonals" - LinearSolveCUDAExt = "CUDA" + LinearSolveCUDAExt = ["cuSOLVER"] LinearSolveCUDSSExt = "CUDSS" - LinearSolveCUSOLVERRFExt = ["CUSOLVERRF", "SparseArrays"] + LinearSolveCUSOLVERRFExt = "CUSOLVERRF" LinearSolveChainRulesCoreExt = "ChainRulesCore" - LinearSolveCliqueTreesExt = ["CliqueTrees", "SparseArrays"] + LinearSolveCliqueTreesExt = "CliqueTrees" + LinearSolveConjugateGradientsExt = "ConjugateGradients" LinearSolveElementalExt = "Elemental" - LinearSolveEnzymeExt = ["EnzymeCore", "SparseArrays"] + LinearSolveEnzymeExt = "EnzymeCore" LinearSolveFastAlmostBandedMatricesExt = "FastAlmostBandedMatrices" LinearSolveFastLapackInterfaceExt = "FastLapackInterface" LinearSolveForwardDiffExt = "ForwardDiff" - LinearSolveGinkgoExt = ["Ginkgo", "SparseArrays"] + LinearSolveGinkgoExt = "Ginkgo" + LinearSolveHSLExt = "HSL" LinearSolveHYPREExt = "HYPRE" LinearSolveIterativeSolversExt = "IterativeSolvers" + LinearSolveJacobiDavidsonExt = "JacobiDavidson" LinearSolveKernelAbstractionsExt = "KernelAbstractions" LinearSolveKrylovKitExt = "KrylovKit" + LinearSolveMUMPSExt = "MUMPS" LinearSolveMetalExt = "Metal" LinearSolveMooncakeExt = "Mooncake" - LinearSolvePETScExt = ["PETSc", "SparseArrays", "SparseMatricesCSR"] - LinearSolvePETScMPIExt = ["PETSc", "PartitionedArrays", "SparseArrays", "SparseMatricesCSR"] - LinearSolveParUExt = ["ParU_jll", "SparseArrays"] - LinearSolvePardisoExt = ["Pardiso", "SparseArrays"] - LinearSolveRecursiveFactorizationExt = "RecursiveFactorization" - LinearSolveSTRUMPACKExt = ["SparseArrays", "STRUMPACK_jll"] - LinearSolveSparseArraysExt = "SparseArrays" - LinearSolveSparspakExt = ["SparseArrays", "Sparspak"] + LinearSolvePETScExt = ["PETSc", "SparseMatricesCSR"] + LinearSolvePETScMPIExt = ["PETSc", "PartitionedArrays", "SparseMatricesCSR"] + LinearSolveParUExt = "ParU_jll" + LinearSolvePardisoExt = "Pardiso" + LinearSolvePartitionedSolversExt = ["PartitionedArrays", "PartitionedSolvers"] + LinearSolvePureUMFPACKExt = "PureUMFPACK" + LinearSolveRecursiveFactorizationExt = ["RecursiveFactorization", "TriangularSolve"] + LinearSolveSTRUMPACKExt = "STRUMPACK_jll" + LinearSolveSparspakExt = "Sparspak" + LinearSolveSpecializingFactorizationsExt = "SpecializingFactorizations" + LinearSolveSuperLUDISTExt = "SuperLUDIST" [deps.LinearSolve.weakdeps] AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" AlgebraicMultigrid = "2169fc97-5a83-5252-b627-83903c6c433c" + ArnoldiMethod = "ec485272-7323-5ecc-a04f-4719b315124d" + Arpack = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" BandedMatrices = "aae01518-5342-5314-be14-df237901396f" BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" CUSOLVERRF = "a8cc9031-bad2-4722-94f5-40deabb4245c" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + ConjugateGradients = "f59de78d-195d-4e7b-a078-2e47da4c3ad6" Elemental = "902c3f28-d1ec-5e7e-8399-a24c3845ee38" EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" FastLapackInterface = "29a986be-02c6-4525-aec4-84b980013641" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Ginkgo = "4c8bd3c9-ead9-4b5e-a625-08f1338ba0ec" + HSL = "34c5aeac-e683-54a6-a0e9-6e0fdc586c50" HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" + JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb" + JacobiDavidson = "11c68b98-9c9b-11e8-267b-bbb95576cead" KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" LAPACK_jll = "51474c39-65e3-53ba-86ba-03b1b862ec14" + MUMPS = "55d2b088-9f4e-11e9-26c0-150b02ea6a46" Metal = "dde4c033-4e86-420c-a63e-0dd931031962" Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" PETSc = "ace2c81b-2b5f-4b1e-a30d-d662738edfe0" ParU_jll = "9e0b026c-e8ce-559c-a2c4-6a3d5c955bc9" Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" PartitionedArrays = "5a9dfac6-5c52-46f7-8278-5e2210713be9" + PartitionedSolvers = "11b65f7f-80ac-401b-9ef2-3db765482d62" + PureUMFPACK = "b7e1f0a2-3c4d-4e5f-9a0b-1c2d3e4f5a6b" RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" STRUMPACK_jll = "86fbd0b9-476f-557c-b766-62c724b42d8c" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" Sparspak = "e56a9233-b9d6-4f03-8d0f-1825330902ac" + SpecializingFactorizations = "fa08b7a1-13d3-4faf-875d-5cbc1520e3f3" + SuperLUDIST = "4cd002a6-0da4-410d-a012-232df062f478" + TriangularSolve = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf" blis_jll = "6136c539-28a5-5bf0-87cc-b183200dce32" + cuSOLVER = "887afef0-6a32-4de5-add4-7827692ba8fc" [[deps.Literate]] deps = ["Base64", "IOCapture", "JSON", "REPL"] @@ -1618,9 +1565,9 @@ version = "0.4.17" [[deps.MUMPS_seq_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "METIS_jll", "libblastrampoline_jll"] -git-tree-sha1 = "afbaaa0fa2f001ad8091e27885d69973f8eae3d7" +git-tree-sha1 = "fc1daa0ab5a0d7a0a34d5168a711cbf02b2cb0cc" uuid = "d7ed1dd3-d0ae-5e8e-bfb4-87a502085b8d" -version = "500.800.200+0" +version = "500.900.100+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" @@ -1629,19 +1576,19 @@ version = "0.5.16" [[deps.MadNCL]] deps = ["Atomix", "KernelAbstractions", "LinearAlgebra", "MadNLP", "NLPModels", "Printf", "Random", "SparseArrays"] -git-tree-sha1 = "cbb996d397b63f551bfbeaabfae4af5640326ab2" +git-tree-sha1 = "3adaab83430683ac6ddf9be8a599c27b83bcb735" uuid = "434a0bcb-5a7c-42b2-a9d3-9e3f760e7af0" -version = "0.2.2" -weakdeps = ["MadNLPGPU"] +version = "0.2.3" +weakdeps = ["CUDA", "MadNLPGPU"] [deps.MadNCL.extensions] - MadNCLCUDAExt = ["MadNLPGPU"] + MadNCLCUDAExt = ["CUDA", "MadNLPGPU"] [[deps.MadNLP]] deps = ["LDLFactorizations", "LinearAlgebra", "Logging", "MUMPS_seq_jll", "NLPModels", "OpenBLAS32_jll", "Pkg", "PrecompileTools", "Printf", "SolverCore", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "badbb19b4a53f15f44bbbd082676db999c388927" +git-tree-sha1 = "9a7c3a95174ae16c7d2b0b98c2b03af3d308ce98" uuid = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" -version = "0.9.2" +version = "0.10.1" [deps.MadNLP.extensions] MadNLPMOI = "MathOptInterface" @@ -1650,21 +1597,22 @@ version = "0.9.2" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" [[deps.MadNLPGPU]] -deps = ["AMD", "CUDA", "CUDSS", "KernelAbstractions", "LinearAlgebra", "MadNLP", "Metis", "SparseArrays"] -git-tree-sha1 = "d4c03441c0ba6f95dcf619a9a76ed3ee2d068cf8" +deps = ["AMD", "Adapt", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "MadNLP", "Metis", "SparseArrays"] +git-tree-sha1 = "8f4e95c7165a73b5093a80ade40ea3a0c9c1a5b5" uuid = "d72a61cc-809d-412f-99be-fd81f4b8a598" -version = "0.8.0" +version = "0.10.2" [deps.MadNLPGPU.extensions] MadNLPGPUAMDGPUExt = "AMDGPU" + MadNLPGPUCUDAExt = ["CUDACore", "CUDSS", "cuBLAS", "cuSOLVER", "cuSPARSE"] [deps.MadNLPGPU.weakdeps] AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" - -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" + CUDACore = "bd0ed864-bdfe-4181-a5ed-ce625a5fdea2" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + cuBLAS = "182d3088-87b7-4494-8cad-fc6afaa545bc" + cuSOLVER = "887afef0-6a32-4de5-add4-7827692ba8fc" + cuSPARSE = "b26da814-b3bc-49ef-b0ee-c816305aa060" [[deps.Markdown]] deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] @@ -1730,21 +1678,15 @@ version = "1.2.0" uuid = "a63ad114-7e13-5084-954f-fe012c677804" version = "1.11.0" -[[deps.Moshi]] -deps = ["ExproniconLite", "Jieko"] -git-tree-sha1 = "60beb0717782a3bbe0f7df56decad0ef89048c23" -uuid = "2e0e35c7-a2e4-4343-998d-7ef72827ed2d" -version = "0.3.12" - [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2025.11.4" [[deps.MuladdMacro]] deps = ["PrecompileTools"] -git-tree-sha1 = "e8dcbeef032ba2f9051a44ac22b4e54e3a1a0099" +git-tree-sha1 = "283bf85d4a767481dd924dff0eee1735e95f449e" uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" -version = "0.2.6" +version = "0.2.7" [[deps.NLPModels]] deps = ["FastClosures", "LinearAlgebra", "LinearOperators", "Printf", "SparseArrays"] @@ -1770,11 +1712,17 @@ git-tree-sha1 = "3a6ec5add6f5a95d598648432ac06126157ba11c" uuid = "e01155f1-5c6f-4375-a9d8-616dd036575f" version = "0.8.0" -[[deps.NLSolversBase]] -deps = ["ADTypes", "DifferentiationInterface", "FiniteDiff", "LinearAlgebra"] -git-tree-sha1 = "b3f76b463c7998473062992b246045e6961a074e" -uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "8.0.0" +[[deps.NVML]] +deps = ["CEnum", "CUDACore", "GPUToolbox", "Libdl"] +git-tree-sha1 = "c170a13e18b68b6e1c5853f17afbf84fa9d50418" +uuid = "611af6d1-644e-4c5d-bd58-854d7d1254b9" +version = "6.2.1" + +[[deps.NVPTX_LLVM_Backend_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "6a1ec02404e66d69b1b6bc884299a4c80f932c6d" +uuid = "ef6e0fe3-e6ef-59c0-bde6-4989574699e0" +version = "22.1.7+1" [[deps.NVTX]] deps = ["JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] @@ -1810,9 +1758,9 @@ version = "20.12.2+0" [[deps.NonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "NonlinearSolveBase", "NonlinearSolveFirstOrder", "NonlinearSolveQuasiNewton", "NonlinearSolveSpectralMethods", "PrecompileTools", "Preferences", "Reexport", "SciMLBase", "Setfield", "SimpleNonlinearSolve", "StaticArraysCore", "SymbolicIndexingInterface"] -git-tree-sha1 = "a6c5719bbb42985c72f4cacbfa49e86bab850d66" +git-tree-sha1 = "b5cc52c89a7e2b0c5b83e887b1b2441b9c18506a" uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" -version = "4.19.1" +version = "4.27.0" [deps.NonlinearSolve.extensions] NonlinearSolveFastLevenbergMarquardtExt = "FastLevenbergMarquardt" @@ -1842,10 +1790,10 @@ version = "4.19.1" Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" [[deps.NonlinearSolveBase]] -deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "Compat", "ConcreteStructs", "DifferentiationInterface", "EnzymeCore", "FastClosures", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "LogExpFunctions", "Markdown", "MaybeInplace", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] -git-tree-sha1 = "cb824030a0d5769555704db95ee3cbe0f76ed53d" +deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "Compat", "ConcreteStructs", "DifferentiationInterface", "EnumX", "EnzymeCore", "FastClosures", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "LogExpFunctions", "Markdown", "MaybeInplace", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "RespecializeParams", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] +git-tree-sha1 = "b7b455a41da55a45b0f050c119adb15da39db893" uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0" -version = "2.30.3" +version = "2.45.0" [deps.NonlinearSolveBase.extensions] NonlinearSolveBaseBandedMatricesExt = "BandedMatrices" @@ -1874,26 +1822,26 @@ version = "2.30.3" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" [[deps.NonlinearSolveFirstOrder]] -deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConcreteStructs", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "ce68820a4f421fb5bee7ec4dcf875aff33886bfb" +deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConcreteStructs", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "73b85c08fdc2ee79526405d8e67b31a9d99873d5" uuid = "5959db7a-ea39-4486-b5fe-2dd0bf03d60d" -version = "2.1.1" +version = "2.4.0" [[deps.NonlinearSolveQuasiNewton]] -deps = ["ArrayInterface", "CommonSolve", "ConcreteStructs", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLOperators", "StaticArraysCore"] -git-tree-sha1 = "538432ca1aea8bf63db02929bf870501f8a7c64c" +deps = ["ArrayInterface", "CommonSolve", "ConcreteStructs", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "StaticArraysCore"] +git-tree-sha1 = "e6599aceb5fc5ca3de1978765003afc5593fe35c" uuid = "9a2c21bd-3a47-402d-9113-8faf9a0ee114" -version = "1.13.1" +version = "1.15.1" weakdeps = ["ForwardDiff"] [deps.NonlinearSolveQuasiNewton.extensions] NonlinearSolveQuasiNewtonForwardDiffExt = "ForwardDiff" [[deps.NonlinearSolveSpectralMethods]] -deps = ["CommonSolve", "ConcreteStructs", "LineSearch", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "a3781e12becdf0ce5520bd97ec617e879bf4e9f2" +deps = ["CommonSolve", "ConcreteStructs", "LineSearch", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging"] +git-tree-sha1 = "344e673a0364838836c8f9bc9ea8da5f99e91f2b" uuid = "26075421-4e9a-44e1-8bd1-420ed7ad02b2" -version = "1.7.1" +version = "1.8.0" weakdeps = ["ForwardDiff"] [deps.NonlinearSolveSpectralMethods.extensions] @@ -1923,9 +1871,9 @@ version = "0.8.7+0" [[deps.OpenSSH_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll"] -git-tree-sha1 = "b862f484cf659efabffd601c5c920e981c942b63" +git-tree-sha1 = "2da18ab26a6eb38b374c16b157d5a4cc3ab74e02" uuid = "9bd350c2-7e96-507f-8002-3f2e150b4e1b" -version = "10.4.1+0" +version = "10.5.1+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] @@ -1944,6 +1892,12 @@ git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.6+0" +[[deps.OptimalControl]] +deps = ["ADNLPModels", "CTBase", "CTDirect", "CTFlows", "CTLie", "CTModels", "CTParser", "CTSolvers", "CommonSolve", "DifferentiationInterface", "DocStringExtensions", "ExaModels", "ForwardDiff", "LinearAlgebra", "NLPModels", "RecipesBase", "Reexport", "SolverCore"] +path = ".." +uuid = "5f98b655-cc9a-415a-b60e-744165666948" +version = "2.1.0-beta" + [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" @@ -1956,202 +1910,83 @@ uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.8.2" [[deps.OrdinaryDiffEq]] -deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FillArrays", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "InteractiveUtils", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "MacroTools", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqAdamsBashforthMoulton", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqDefault", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqExplicitRK", "OrdinaryDiffEqExponentialRK", "OrdinaryDiffEqExtrapolation", "OrdinaryDiffEqFIRK", "OrdinaryDiffEqFeagin", "OrdinaryDiffEqFunctionMap", "OrdinaryDiffEqHighOrderRK", "OrdinaryDiffEqIMEXMultistep", "OrdinaryDiffEqLinear", "OrdinaryDiffEqLowOrderRK", "OrdinaryDiffEqLowStorageRK", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqNordsieck", "OrdinaryDiffEqPDIRK", "OrdinaryDiffEqPRK", "OrdinaryDiffEqQPRK", "OrdinaryDiffEqRKN", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "OrdinaryDiffEqSSPRK", "OrdinaryDiffEqStabilizedIRK", "OrdinaryDiffEqStabilizedRK", "OrdinaryDiffEqSymplecticRK", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "SparseArrays", "Static", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"] -git-tree-sha1 = "47271adac597af08263b6ea2669e93040b45c4d0" +deps = ["ADTypes", "CommonSolve", "DiffEqBase", "DocStringExtensions", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqDefault", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "SciMLBase", "SciMLLogging"] +git-tree-sha1 = "da227ccbb64503939fa067b169817eec404c04f4" uuid = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" -version = "6.111.0" - -[[deps.OrdinaryDiffEqAdamsBashforthMoulton]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqLowOrderRK", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "2e44acb684dfcdc2e41851a988733e30b28a8478" -uuid = "89bda076-bce5-4f1c-845f-551c83cdda9a" -version = "1.11.0" +version = "7.6.0" [[deps.OrdinaryDiffEqBDF]] deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqSDIRK", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] -git-tree-sha1 = "d7f69947e070a6a89aaf583e8aa2fada199fc292" +git-tree-sha1 = "b21629b54e21c37605b53aa2c4b0ac1f90fc349d" uuid = "6ad6398a-0878-4a85-9266-38940aa047c8" -version = "1.26.0" +version = "2.4.2" [[deps.OrdinaryDiffEqCore]] -deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "ConcreteStructs", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "Polyester", "PrecompileTools", "Preferences", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Static", "SymbolicIndexingInterface", "TruncatedStacktraces"] -git-tree-sha1 = "c0a22f012d3e98fd78afafe8e5152ace7a2276bc" +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "BinaryHeaps", "CommonSolve", "ConstructionBase", "DiffEqBase", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FindFirstFunctions", "FunctionWrappers", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "PrecompileTools", "Preferences", "Printf", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "882e0c75c79c058d2dc2f20f8b809d26ec032808" uuid = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" -version = "3.33.1" +version = "4.14.3" [deps.OrdinaryDiffEqCore.extensions] OrdinaryDiffEqCoreMooncakeExt = "Mooncake" + OrdinaryDiffEqCorePolyesterExt = "Polyester" OrdinaryDiffEqCoreSparseArraysExt = "SparseArrays" [deps.OrdinaryDiffEqCore.weakdeps] Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.OrdinaryDiffEqDefault]] -deps = ["ADTypes", "DiffEqBase", "EnumX", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "PrecompileTools", "Preferences", "Reexport", "SciMLBase"] -git-tree-sha1 = "5fbd116f93790ce79c4beff8206e1b8e45c492a2" +deps = ["ADTypes", "DiffEqBase", "EnumX", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "PrecompileTools", "Preferences", "SciMLBase"] +git-tree-sha1 = "577f453cd7cf893cef584f7372b78a59e227416d" uuid = "50262376-6c5a-4cf5-baba-aaf4f84d72d7" -version = "1.14.0" +version = "2.4.4" [[deps.OrdinaryDiffEqDifferentiation]] deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqCore", "SciMLBase", "SciMLOperators", "SparseMatrixColorings", "StaticArraysCore"] -git-tree-sha1 = "f3976b6baeb64051f41ed461a1933b7501a4f38e" +git-tree-sha1 = "d9d3cc8c585a8698548a9a7349590ac0455936ea" uuid = "4302a76b-040a-498a-8c04-15b101fed76b" -version = "2.9.0" +version = "3.7.0" weakdeps = ["SparseArrays"] [deps.OrdinaryDiffEqDifferentiation.extensions] OrdinaryDiffEqDifferentiationSparseArraysExt = "SparseArrays" -[[deps.OrdinaryDiffEqExplicitRK]] -deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] -git-tree-sha1 = "54346c3d7a9932ab11743a99afed8a3ff0a65fea" -uuid = "9286f039-9fbf-40e8-bf65-aa933bdc4db0" -version = "1.12.0" - -[[deps.OrdinaryDiffEqExponentialRK]] -deps = ["ADTypes", "DiffEqBase", "ExponentialUtilities", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "RecursiveArrayTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "32fb54c8000c82fd32c55f7bf52f4651a3bd0e61" -uuid = "e0540318-69ee-4070-8777-9e2de6de23de" -version = "1.15.0" - -[[deps.OrdinaryDiffEqExtrapolation]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "FastPower", "LinearSolve", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "57bf89f5b144f6e5af1146fb7aee1544c6b76950" -uuid = "becaefa8-8ca2-5cf9-886d-c06f3d2bd2c4" -version = "1.18.0" - -[[deps.OrdinaryDiffEqFIRK]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "FastGaussQuadrature", "FastPower", "LinearAlgebra", "LinearSolve", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators"] -git-tree-sha1 = "3339f3a26974a37666c74b95bdb54aefc63b9a56" -uuid = "5960d6e9-dd7a-4743-88e7-cf307b64f125" -version = "1.26.0" - -[[deps.OrdinaryDiffEqFeagin]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "302999c99bc454cf274d39b9ba3c2415f6fbb1cb" -uuid = "101fe9f7-ebb6-4678-b671-3a81e7194747" -version = "1.10.0" - -[[deps.OrdinaryDiffEqFunctionMap]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "2d2d59f9e530bca2f99934ecfde5430f6ad54bfe" -uuid = "d3585ca7-f5d3-4ba6-8057-292ed1abd90f" -version = "1.11.0" - -[[deps.OrdinaryDiffEqHighOrderRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "a6fef72198944e64e0d818f2cc46275e663370c9" -uuid = "d28bc4f8-55e1-4f49-af69-84c1a99f0f58" -version = "1.12.0" - -[[deps.OrdinaryDiffEqIMEXMultistep]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Reexport", "SciMLBase"] -git-tree-sha1 = "bd5440f7f09ce75df59e7f5d2f5b8e52d24aae3c" -uuid = "9f002381-b378-40b7-97a6-27a27c83f129" -version = "1.14.0" - -[[deps.OrdinaryDiffEqLinear]] -deps = ["DiffEqBase", "ExponentialUtilities", "LinearAlgebra", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators"] -git-tree-sha1 = "a1217ddfc979da3a2d9cf11b083688562e8ef333" -uuid = "521117fe-8c41-49f8-b3b6-30780b3f0fb5" -version = "1.12.0" - -[[deps.OrdinaryDiffEqLowOrderRK]] -deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "68a5e7e1b37933841e823a588deff3ec3e757a00" -uuid = "1344f307-1e59-4825-a18e-ace9aa3fa4c6" -version = "1.13.0" - -[[deps.OrdinaryDiffEqLowStorageRK]] -deps = ["Adapt", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "076ac77cee882b2f4858292dde748c8b2ab908e7" -uuid = "b0944070-b475-4768-8dec-fb6eb410534d" -version = "1.15.0" - [[deps.OrdinaryDiffEqNonlinearSolve]] -deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "FastClosures", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "PreallocationTools", "RecursiveArrayTools", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "SparseArrays", "StaticArraysCore"] -git-tree-sha1 = "82dde00dc43d5a4762cf50fa070b654cc38a2e87" +deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "DiffEqBase", "FastBroadcast", "FastClosures", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MuladdMacro", "NonlinearSolve", "NonlinearSolveBase", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "PreallocationTools", "RecursiveArrayTools", "SciMLBase", "SciMLOperators", "SciMLPublic", "SimpleNonlinearSolve", "SparseArrays", "StaticArraysCore"] +git-tree-sha1 = "3275d1bd77357116c50ac566d286a79dedd077d6" uuid = "127b3ac7-2247-4354-8eb6-78cf4e7c58e8" -version = "1.28.0" - -[[deps.OrdinaryDiffEqNordsieck]] -deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqTsit5", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "21117475cb0d27942d31e4b8a27337392ae680b0" -uuid = "c9986a66-5c92-4813-8696-a7ec84c806c8" -version = "1.11.0" - -[[deps.OrdinaryDiffEqPDIRK]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Polyester", "Reexport", "SciMLBase"] -git-tree-sha1 = "1aaaa4851bbe72497c9d01d69fa36396ddeb0a0a" -uuid = "5dd0a6cf-3d4b-4314-aa06-06d4e299bc89" -version = "1.14.0" - -[[deps.OrdinaryDiffEqPRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "Reexport", "SciMLBase"] -git-tree-sha1 = "1fe4f58f170c68b187ac42dc5f00932bb162ddfa" -uuid = "5b33eab2-c0f1-4480-b2c3-94bc1e80bda1" -version = "1.10.0" - -[[deps.OrdinaryDiffEqQPRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "275900d64ab7be5f1bca8c7bfd48166838b6ab44" -uuid = "04162be5-8125-4266-98ed-640baecc6514" -version = "1.10.0" - -[[deps.OrdinaryDiffEqRKN]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "edf3411246d6030e165a5fba513cbdcde5c72f79" -uuid = "af6ede74-add8-4cfd-b1df-9a4dbb109d7a" -version = "1.12.0" +version = "2.8.0" [[deps.OrdinaryDiffEqRosenbrock]] -deps = ["ADTypes", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "3579d9272c286ffcceee794c5752e8cc7c3ae514" +deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqRosenbrockTableaus", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "9315d0c76c4411c47f037e5f16f90135abe4607f" uuid = "43230ef6-c299-4910-a778-202eb28ce4ce" -version = "1.31.1" +version = "2.6.5" + +[[deps.OrdinaryDiffEqRosenbrockTableaus]] +git-tree-sha1 = "0ecd1c905c82963f8748e82b6d2bf16d2b1bdf2b" +uuid = "b4bd8bb3-f80f-41d2-9b21-73a655b304b9" +version = "2.4.1" [[deps.OrdinaryDiffEqSDIRK]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] -git-tree-sha1 = "c5e26fbadbad137fa2b7e3161a290a1becfec502" +deps = ["ADTypes", "CommonSolve", "ConstructionBase", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "805c050714d23064eb4f8ee8793604d294938dc0" uuid = "2d112036-d095-4a1e-ab9a-08536f3ecdbf" -version = "1.14.0" - -[[deps.OrdinaryDiffEqSSPRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] -git-tree-sha1 = "4ec0be19f8115889f61643fc25f6e3af5cd4c9e7" -uuid = "669c94d9-1f4b-4b64-b377-1aa079aa2388" -version = "1.14.0" - -[[deps.OrdinaryDiffEqStabilizedIRK]] -deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqStabilizedRK", "RecursiveArrayTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "226226d334fe295885df6ecb2d110c22ead79983" -uuid = "e3e12d00-db14-5390-b879-ac3dd2ef6296" -version = "1.14.0" - -[[deps.OrdinaryDiffEqStabilizedRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArraysCore"] -git-tree-sha1 = "764e11fb6a26ee8f2d2d10778d531fd708f35d28" -uuid = "358294b1-0aab-51c3-aafe-ad5ab194a2ad" -version = "1.11.1" - -[[deps.OrdinaryDiffEqSymplecticRK]] -deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "b18a4e7973e73e84cfd79222e2389565b323b588" -uuid = "fa646aed-7ef9-47eb-84c4-9443fc8cbfa8" -version = "1.13.0" +version = "2.8.2" [[deps.OrdinaryDiffEqTsit5]] -deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static", "TruncatedStacktraces"] -git-tree-sha1 = "6bd89fce8a0b198ac9fe98dc80362a92a2a13ae5" +deps = ["CommonSolve", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "db5053109dc3b5edfcff31a286c39cf83cc2a609" uuid = "b1df2697-797e-41e3-8120-5422d3b24e4a" -version = "1.12.0" +version = "2.1.3" [[deps.OrdinaryDiffEqVerner]] -deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static", "TruncatedStacktraces"] -git-tree-sha1 = "58dc7756825ca46e5a601a5aeba7d26a071d373a" +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "f7ffc12bf6572a1c55fc58d297d864e6d6cb99e6" uuid = "79d7bb75-1356-48c1-b8c0-6832512096c2" -version = "1.14.0" +version = "2.2.2" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] @@ -2160,21 +1995,21 @@ version = "10.44.0+1" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "58e5ed5e386e156bd93e86b305ebd21ac63d2d04" +git-tree-sha1 = "7126b66b721a605a2fec966a2874c5ed53258eb3" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.57.1+0" +version = "1.58.0+0" [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +git-tree-sha1 = "0ed04c372da78ff5b98e35e3bd4f4ca9931299cc" uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" +version = "0.13.1" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "32a4e09c5f29402573d673901778a0e03b0807b9" +git-tree-sha1 = "3de8f5e6e90ebfa8d6d1f86997d6cdcd6a912ff3" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.8.6" +version = "2.8.7" [[deps.Pixman_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] @@ -2223,36 +2058,17 @@ version = "1.41.6" ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" -[[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "16bbc30b5ebea91e9ce1671adc03de2832cff552" -uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.19" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.2" - -[[deps.PooledArrays]] -deps = ["DataAPI", "Future"] -git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" -uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" -version = "1.4.3" - [[deps.PreallocationTools]] -deps = ["Adapt", "ArrayInterface", "PrecompileTools"] -git-tree-sha1 = "920abd8738c02528d1078885e07bbd57939fc949" +deps = ["Adapt", "ArrayInterface", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "5e1c95fb1366c7f92c44839b22fc362257895a34" uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" -version = "1.3.0" -weakdeps = ["EnzymeCore", "ForwardDiff", "ReverseDiff", "SparseConnectivityTracer"] +version = "1.5.0" +weakdeps = ["EnzymeCore", "ForwardDiff", "ReverseDiff"] [deps.PreallocationTools.extensions] PreallocationToolsEnzymeCoreExt = "EnzymeCore" PreallocationToolsForwardDiffExt = "ForwardDiff" PreallocationToolsReverseDiffExt = "ReverseDiff" - PreallocationToolsSparseConnectivityTracerExt = "SparseConnectivityTracer" [[deps.PrecompileTools]] deps = ["Preferences"] @@ -2268,9 +2084,9 @@ version = "1.5.2" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "7cf039cf79bb41afda7336edf2f3ca2115c44f76" +git-tree-sha1 = "4ac881f5432bd93463a41767a814a45245be22b6" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.4.2" +version = "3.4.6" [deps.PrettyTables.extensions] PrettyTablesExcelExt = "XLSX" @@ -2285,16 +2101,21 @@ deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" version = "1.11.0" -[[deps.Profile]] -deps = ["StyledStrings"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" -version = "1.11.0" - [[deps.PtrArrays]] git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" version = "1.4.0" +[[deps.PureKLU]] +deps = ["LinearAlgebra", "PrecompileTools", "SparseArrays"] +git-tree-sha1 = "ef341b8e734ffa12c0464a58ca1c8a214d7a4235" +uuid = "0c0d3e7f-3a8b-4f7e-b6f1-9a4d2e7c1f01" +version = "1.4.1" +weakdeps = ["ForwardDiff"] + + [deps.PureKLU.extensions] + PureKLUForwardDiffExt = "ForwardDiff" + [[deps.Qt6Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] git-tree-sha1 = "144895f6166994730ee7ff8113b981fc360638f1" @@ -2360,18 +2181,20 @@ uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" version = "0.6.12" [[deps.RecursiveArrayTools]] -deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "LinearAlgebra", "PrecompileTools", "RecipesBase", "StaticArraysCore", "SymbolicIndexingInterface"] -git-tree-sha1 = "d0282d612f22dcad7b81cf487b746e63aa2a6709" +deps = ["Adapt", "ArrayInterface", "GPUArraysCore", "LinearAlgebra", "PrecompileTools", "RecipesBase", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "ed53f3c9075d1317f1f6c1cf8636c88b24ab2dd6" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.54.0" +version = "4.4.0" [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsCUDAExt = "CUDA" RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" RecursiveArrayToolsFastBroadcastPolyesterExt = ["FastBroadcast", "Polyester"] RecursiveArrayToolsForwardDiffExt = "ForwardDiff" RecursiveArrayToolsKernelAbstractionsExt = "KernelAbstractions" RecursiveArrayToolsMeasurementsExt = "Measurements" RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" + RecursiveArrayToolsMooncakeExt = "Mooncake" RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] RecursiveArrayToolsStatisticsExt = "Statistics" @@ -2381,11 +2204,13 @@ version = "3.54.0" RecursiveArrayToolsZygoteExt = "Zygote" [deps.RecursiveArrayTools.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" @@ -2418,6 +2243,12 @@ git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" +[[deps.RespecializeParams]] +deps = ["FunctionWrappersWrappers"] +git-tree-sha1 = "a6b8358681ac20a448dc762770487e25c98a5085" +uuid = "9fe22ead-9e00-4db2-8b46-706a60d40f5e" +version = "1.2.0" + [[deps.ReverseDiff]] deps = ["ChainRulesCore", "DiffResults", "DiffRules", "ForwardDiff", "FunctionWrappers", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "Random", "SpecialFunctions", "StaticArrays", "Statistics"] git-tree-sha1 = "f5f3c09103951beae390666a18e084655996370b" @@ -2426,19 +2257,14 @@ version = "1.17.0" [[deps.RuntimeGeneratedFunctions]] deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "0e3eba2ca347b001baade9fb830623e04da64b38" +git-tree-sha1 = "65c9e1142f0372bfc16ba14b9edd57737fe0039f" uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.22" +version = "0.5.24" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - [[deps.SPRAL_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "METIS_jll", "libblastrampoline_jll"] git-tree-sha1 = "139fa63f03a16b3d859d925ee9149dfc15f21ece" @@ -2446,10 +2272,10 @@ uuid = "319450e9-13b8-58e8-aa9f-8fd1420848ab" version = "2025.9.18+0" [[deps.SciMLBase]] -deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "a017ed325ac5e11438c888864fe83b124bb171b7" +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FindFirstFunctions", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "LoggingExtras", "Markdown", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "Random", "RecipesBase", "RecursiveArrayTools", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] +git-tree-sha1 = "55e5c9c07804723db7924afdebfc9075294c71cc" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.155.1" +version = "3.47.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" @@ -2457,8 +2283,8 @@ version = "2.155.1" SciMLBaseDistributionsExt = "Distributions" SciMLBaseEnzymeExt = "Enzyme" SciMLBaseForwardDiffExt = "ForwardDiff" - SciMLBaseMLStyleExt = "MLStyle" - SciMLBaseMakieExt = "Makie" + SciMLBaseFunctionPropertiesExt = "FunctionProperties" + SciMLBaseMakieExt = ["Makie", "GeometryBasics"] SciMLBaseMeasurementsExt = "Measurements" SciMLBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" SciMLBaseMooncakeExt = "Mooncake" @@ -2466,9 +2292,10 @@ version = "2.155.1" SciMLBasePyCallExt = "PyCall" SciMLBasePythonCallExt = "PythonCall" SciMLBaseRCallExt = "RCall" - SciMLBaseReverseDiffExt = "ReverseDiff" + SciMLBaseReverseDiffExt = ["ReverseDiff", "ForwardDiff"] + SciMLBaseStaticArraysExt = "StaticArrays" SciMLBaseTrackerExt = "Tracker" - SciMLBaseZygoteExt = ["Zygote", "ChainRulesCore"] + SciMLBaseZygoteExt = ["Zygote", "ChainRulesCore", "ZygoteRules", "FillArrays"] [deps.SciMLBase.weakdeps] ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" @@ -2476,8 +2303,10 @@ version = "2.155.1" DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078" + FunctionProperties = "f62d2435-5019-4c03-9749-2d4c77af0cbc" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" @@ -2487,51 +2316,51 @@ version = "2.155.1" PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" RCall = "6f49c342-dc21-5d91-9882-a32aef131414" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444" [[deps.SciMLJacobianOperators]] deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DifferentiationInterface", "FastClosures", "LinearAlgebra", "SciMLBase", "SciMLOperators"] -git-tree-sha1 = "396fd0f85b71f87111618e1cbe6608a1bcc8a447" +git-tree-sha1 = "ad167d716fc134c0873c76ba0469ede56a678732" uuid = "19f34311-ddf3-4b8b-af20-060888a46c0e" -version = "0.1.16" +version = "0.1.17" [[deps.SciMLLogging]] deps = ["Logging", "LoggingExtras", "Preferences"] -git-tree-sha1 = "4e1e21f14a284f892eb62923a356c70a2a0c68e1" +git-tree-sha1 = "36be2198d9dc476ac27efb1fe0f789d9e1dca01c" uuid = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1" -version = "1.10.1" +version = "2.0.4" weakdeps = ["Tracy"] [deps.SciMLLogging.extensions] SciMLLoggingTracyExt = "Tracy" [[deps.SciMLOperators]] -deps = ["Accessors", "Adapt", "ArrayInterface", "DocStringExtensions", "LinearAlgebra"] -git-tree-sha1 = "10e4313d1bce847140611c12469ce532ffbdf3dd" +deps = ["Accessors", "Adapt", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "SciMLPublic"] +git-tree-sha1 = "144473d0a737d9c1e1bf2dc5ea824dc1be864f33" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "1.25.0" +version = "1.27.0" [deps.SciMLOperators.extensions] SciMLOperatorsLoopVectorizationExt = "LoopVectorization" SciMLOperatorsSparseArraysExt = "SparseArrays" - SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" [deps.SciMLOperators.weakdeps] LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" [[deps.SciMLPublic]] -git-tree-sha1 = "24ff31136f3f991b74fbef71d5c638e2881d29d2" +git-tree-sha1 = "cf9aaf8b9ed5db993259ea8b24cf2b7ba9bd3b79" uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" -version = "1.2.3" +version = "1.2.4" [[deps.SciMLStructures]] deps = ["ArrayInterface", "PrecompileTools"] -git-tree-sha1 = "14d4ca3d334637233b9f730d2b9e6061e6338122" +git-tree-sha1 = "53bf620cb2c3763d41495b2a145611c6ca400dcd" uuid = "53ae85a6-f571-4167-b2af-e1d143709226" -version = "1.10.3" +version = "1.10.4" [[deps.ScopedValues]] deps = ["HashArrayMappedTries", "Logging"] @@ -2545,12 +2374,6 @@ git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" uuid = "6c6a2e73-6563-6170-7368-637461726353" version = "1.3.0" -[[deps.SentinelArrays]] -deps = ["Dates", "Random"] -git-tree-sha1 = "084c47c7c5ce5cfecefa0a98dff69eb3646b5a80" -uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.10" - [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" @@ -2573,10 +2396,10 @@ uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" version = "1.2.0" [[deps.SimpleNonlinearSolve]] -deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "08d8bafd57b7ea16dc1f69a8bd57db23a2ceb686" +deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "bb811cd81991c786a590cc9d00a7add142f5a8b7" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "2.12.0" +version = "2.14.0" [deps.SimpleNonlinearSolve.extensions] SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" @@ -2613,6 +2436,16 @@ deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" version = "1.12.0" +[[deps.SparseColumnPivotedQR]] +deps = ["LinearAlgebra", "PrecompileTools", "SparseArrays"] +git-tree-sha1 = "ee8155fd93f0efc510e4523850bd9e0bb6e03199" +uuid = "a57abbd0-fea5-4d57-96be-5e525945e8e4" +version = "2.1.6" +weakdeps = ["AMD"] + + [deps.SparseColumnPivotedQR.extensions] + SparseColumnPivotedQRAMDExt = "AMD" + [[deps.SparseConnectivityTracer]] deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] git-tree-sha1 = "ad4d1275eeb223cbd4d362563954a661fe12d2f7" @@ -2635,28 +2468,31 @@ version = "1.2.2" [[deps.SparseMatrixColorings]] deps = ["ADTypes", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "Random", "SparseArrays"] -git-tree-sha1 = "1c1be8c6fdfaf9b6c9e156c509e672953b8e6af7" +git-tree-sha1 = "f63d76c7b7c329cf11badd564fd8ba877b09c3fe" uuid = "0a514795-09f3-496d-8182-132a7b665d35" -version = "0.4.26" +version = "0.4.27" [deps.SparseMatrixColorings.extensions] - SparseMatrixColoringsCUDAExt = "CUDA" + SparseMatrixColoringsCUDAExt = ["CUDA", "cuSPARSE"] SparseMatrixColoringsCliqueTreesExt = "CliqueTrees" SparseMatrixColoringsColorsExt = "Colors" + SparseMatrixColoringsGPUArraysExt = "GPUArrays" SparseMatrixColoringsJuMPExt = ["JuMP", "MathOptInterface"] [deps.SparseMatrixColorings.weakdeps] CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + cuSPARSE = "b26da814-b3bc-49ef-b0ee-c816305aa060" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f" +git-tree-sha1 = "c3ac026e735264e9bdc6a9bcbd1b1e781b36e3bc" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.8.0" +version = "2.8.3" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -2668,31 +2504,11 @@ git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" version = "1.0.4" -[[deps.Static]] -deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] -git-tree-sha1 = "5ef96deaf82834d64e1456c6a6665ca4188afd48" -uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.4.4" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "SciMLPublic", "Static"] -git-tree-sha1 = "2a635e15d5035c53b345077c947f31ff91744078" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.10.0" - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" - - [deps.StaticArrayInterface.weakdeps] - OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +git-tree-sha1 = "fac51faf3bb96e8bc0bf6f9f39ca4955652776bb" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.18" +version = "1.9.19" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -2726,17 +2542,11 @@ git-tree-sha1 = "e4d7a1a0edc20af42689ea6f4f3587a2175d50ee" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.12" -[[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "5316097111523c9a970596a5b33cfea5f92e8581" -uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.5.9" - [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "532e983cd333609f95d618c744fc40d01ea6e17a" +git-tree-sha1 = "8a90c1d77c3277a5d43b83927b3cbe2c70a37484" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.6" +version = "0.4.7" [[deps.StructTypes]] deps = ["Dates", "UUIDs"] @@ -2746,9 +2556,9 @@ version = "1.11.0" [[deps.StructUtils]] deps = ["Dates", "UUIDs"] -git-tree-sha1 = "82bee338d650aa515f31866c460cb7e3bcef90b8" +git-tree-sha1 = "2d0fc55c61321ba245c47be599570d11bac50303" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" -version = "2.8.2" +version = "2.8.5" [deps.StructUtils.extensions] StructUtilsMeasurementsExt = ["Measurements"] @@ -2775,9 +2585,9 @@ version = "7.8.3+2" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "73048fd086b7a169bbd7232bf60bfd43240691eb" +git-tree-sha1 = "2167b9913f3013a1485bdc9bb249123eb8b53cb0" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.51" +version = "0.3.54" weakdeps = ["PrettyTables"] [deps.SymbolicIndexingInterface.extensions] @@ -2816,12 +2626,6 @@ deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" version = "1.11.0" -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "7c73336785b21f723f5b143f6e99cf6c43b37dc1" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.6" - [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] git-tree-sha1 = "3748bd928e68c7c346b52125cf41fff0de6937d0" @@ -2858,9 +2662,9 @@ uuid = "781d530d-4396-4725-bb49-402e4bee1e77" version = "1.4.0" [[deps.URIs]] -git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" +git-tree-sha1 = "908fec9df6c5de98548ead82a468c95ccf6cd263" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.6.1" +version = "1.7.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -2884,9 +2688,9 @@ version = "0.4.1" [[deps.UnoSolver]] deps = ["LinearAlgebra", "OpenBLAS32_jll", "SolverCore", "Uno_jll"] -git-tree-sha1 = "6a37f3063c1092270e056567cefbbe378014c11f" +git-tree-sha1 = "6787f703903f0b2457b80c49ffe1b05c3d965b56" uuid = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05" -version = "0.3.0" +version = "0.3.6" [deps.UnoSolver.extensions] UnoSolverMathOptInterfaceExt = "MathOptInterface" @@ -2898,9 +2702,9 @@ version = "0.3.0" [[deps.Uno_jll]] deps = ["ASL_jll", "Artifacts", "CompilerSupportLibraries_jll", "HSL_jll", "HiGHS_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl", "METIS_jll", "MUMPS_seq_jll", "SPRAL_jll", "libblastrampoline_jll"] -git-tree-sha1 = "3530444c365f78f2d84af6224e4fffbd9e115e49" +git-tree-sha1 = "e21ef3d2f6bbde8997a682c4874fde8dfbb9a051" uuid = "396d5378-14f1-5ab1-981d-48acd51740ed" -version = "2.7.0+0" +version = "2.8.0+0" [[deps.UnsafeAtomics]] git-tree-sha1 = "0f30765c32d66d58e41f4cb5624d4fc8a82ec13b" @@ -2990,9 +2794,9 @@ version = "6.0.2+0" [[deps.Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] -git-tree-sha1 = "a376af5c7ae60d29825164db40787f15c80c7c54" +git-tree-sha1 = "dcb316b3ce0941f195537dda56bea4517fcd3ff5" uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.8.3+0" +version = "1.8.4+0" [[deps.Xorg_libXinerama_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] @@ -3095,6 +2899,46 @@ git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+1" +[[deps.cuBLAS]] +deps = ["Adapt", "BFloat16s", "CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUArrays", "GPUToolbox", "LLVM", "LinearAlgebra"] +git-tree-sha1 = "956ec13ca1fecd0f3efddf5fbba5b49f5734fda8" +uuid = "182d3088-87b7-4494-8cad-fc6afaa545bc" +version = "6.2.1" +weakdeps = ["EnzymeCore"] + + [deps.cuBLAS.extensions] + EnzymeCoreExt = "EnzymeCore" + +[[deps.cuFFT]] +deps = ["AbstractFFTs", "CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUToolbox", "LinearAlgebra", "Reexport"] +git-tree-sha1 = "cdb0f4950da00258c4b7287eebf938f8a0c4c708" +uuid = "533571aa-0936-420e-b4be-9c66f5f626ca" +version = "6.2.1" + +[[deps.cuRAND]] +deps = ["CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUToolbox", "Random", "Random123", "RandomNumbers"] +git-tree-sha1 = "f35b68bd1b4ed8181c976319573cf7f9267443ef" +uuid = "20fd9a0b-12d5-4c2f-a8af-7c34e9e60431" +version = "6.2.1" + +[[deps.cuSOLVER]] +deps = ["CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUToolbox", "LinearAlgebra", "SparseArrays", "cuBLAS", "cuSPARSE"] +git-tree-sha1 = "ff74a5683a5fd786a05b48f1438bf6fcdd959ac3" +uuid = "887afef0-6a32-4de5-add4-7827692ba8fc" +version = "6.2.1" + +[[deps.cuSPARSE]] +deps = ["Adapt", "CEnum", "CUDACore", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "GPUArrays", "GPUToolbox", "KernelAbstractions", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "df9bed2b4b891cf837e35c6d03707548233edd50" +uuid = "b26da814-b3bc-49ef-b0ee-c816305aa060" +version = "6.2.1" + + [deps.cuSPARSE.extensions] + SparseMatricesCSRExt = "SparseMatricesCSR" + + [deps.cuSPARSE.weakdeps] + SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" + [[deps.demumble_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "6498e3581023f8e530f34760d18f75a69e3a4ea8" @@ -3115,9 +2959,9 @@ version = "0.61.1+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "850b06095ee71f0135d644ffd8a52850699581ed" +git-tree-sha1 = "ef17c47d22224aaecc76e597ab21a072e025cf7b" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.13.3+0" +version = "3.14.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] diff --git a/docs/src/assets/Project.toml b/docs/src/assets/Project.toml index 7bd92d6e5..7f084481f 100644 --- a/docs/src/assets/Project.toml +++ b/docs/src/assets/Project.toml @@ -1,23 +1,24 @@ [deps] ADNLPModels = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" -BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" CTBase = "54762871-cc72-4466-b8e8-f6c8b58076cd" CTDirect = "790bbbee-bee9-49ee-8912-a9de031322d5" CTFlows = "1c39547c-7794-42f7-af83-d98194f657c2" +CTLie = "6880e05b-3a7d-4cac-887c-30cb52c5fdde" CTModels = "34c4fa32-2049-4079-8329-de33c2a22e2d" CTParser = "32681960-a1b1-40db-9bff-a1ca817385d1" CTSolvers = "d3e8d392-8e4b-4d9b-8e92-d7d4e3650ef6" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterInterLinks = "d12716ef-a0f6-4df4-a9f1-a5a34e75c656" DocumenterVitepress = "4710194d-e776-4893-9690-8d956a29c365" -LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" ExaModels = "1037b233-b668-4ce9-9b63-f9f681f55dd2" +ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306" +LiveServer = "16fef848-5104-11e9-1b77-fb7a48bbb589" MadNCL = "434a0bcb-5a7c-42b2-a9d3-9e3f760e7af0" MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6" MadNLPGPU = "d72a61cc-809d-412f-99be-fd81f4b8a598" @@ -25,38 +26,42 @@ MarkdownAST = "d0879d2d-cac2-40c8-9cee-1863dc0c7391" NLPModelsIpopt = "f4238b75-b362-5c4c-b852-0801c9a21d71" NLPModelsKnitro = "bec4dd0d-7755-52d5-9a02-22f0ffc7efcb" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" +OptimalControl = "5f98b655-cc9a-415a-b60e-744165666948" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" UnoSolver = "1baa60ac-02f7-4b39-a7a8-2f4f58486b05" [compat] ADNLPModels = "0.8" -BenchmarkTools = "1" -CTBase = "=0.18.8" +CTBase = "0.28" CTDirect = "1" -CTFlows = "0.8" -CTModels = "=0.10.1" +CTFlows = "0.16" +CTLie = "0.1" +CTModels = "0.15" CTParser = "0.8" CTSolvers = "0.4" -CUDA = "5" +CUDA = "5, 6" CommonSolve = "0.2" -DataFrames = "1" +DifferentiationInterface = "0.7" Documenter = "1" DocumenterInterLinks = "1" DocumenterVitepress = "0.3" -LiveServer = "1" -ExaModels = "0.9" +ExaModels = "0.11" +ForwardDiff = "0.10, 1" JLD2 = "0.6" JSON3 = "1" Literate = "2" +LiveServer = "1" MadNCL = "0.2" -MadNLP = "0.9" -MadNLPGPU = "0.8" +MadNLP = "0.9, 0.10" +MadNLPGPU = "0.8, 0.10" MarkdownAST = "0.1" NLPModelsIpopt = "0.11" NLPModelsKnitro = "0.10" NonlinearSolve = "4" -OrdinaryDiffEq = "6" +OrdinaryDiffEq = "6, 7" +OrdinaryDiffEqTsit5 = "2" Plots = "1" UnoSolver = "0.3" julia = "1.10" diff --git a/docs/src/examples/gallery.md b/docs/src/examples/gallery.md new file mode 100644 index 000000000..ca19defb6 --- /dev/null +++ b/docs/src/examples/gallery.md @@ -0,0 +1,4 @@ +# [Example gallery](@id examples-gallery) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/accessors.md b/docs/src/flows/accessors.md new file mode 100644 index 000000000..9faa69c93 --- /dev/null +++ b/docs/src/flows/accessors.md @@ -0,0 +1,4 @@ +# [Accessors](@id flows-accessors) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/constrained-arcs.md b/docs/src/flows/constrained-arcs.md new file mode 100644 index 000000000..20b9478d4 --- /dev/null +++ b/docs/src/flows/constrained-arcs.md @@ -0,0 +1,4 @@ +# [Constrained arcs](@id flows-constrained-arcs) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/from-hamiltonians.md b/docs/src/flows/from-hamiltonians.md new file mode 100644 index 000000000..415a1a728 --- /dev/null +++ b/docs/src/flows/from-hamiltonians.md @@ -0,0 +1,4 @@ +# [From Hamiltonians](@id flows-from-hamiltonians) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/from-ocp.md b/docs/src/flows/from-ocp.md new file mode 100644 index 000000000..9e66db8cf --- /dev/null +++ b/docs/src/flows/from-ocp.md @@ -0,0 +1,4 @@ +# [From an OCP](@id flows-from-ocp) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/multi-phase.md b/docs/src/flows/multi-phase.md new file mode 100644 index 000000000..6d1c51e36 --- /dev/null +++ b/docs/src/flows/multi-phase.md @@ -0,0 +1,4 @@ +# [Multi-phase](@id flows-multi-phase) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/overview.md b/docs/src/flows/overview.md new file mode 100644 index 000000000..b76d28fae --- /dev/null +++ b/docs/src/flows/overview.md @@ -0,0 +1,4 @@ +# [Overview](@id flows-overview) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/shooting.md b/docs/src/flows/shooting.md new file mode 100644 index 000000000..87c094252 --- /dev/null +++ b/docs/src/flows/shooting.md @@ -0,0 +1,4 @@ +# [Shooting](@id flows-shooting) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/flows/simulation.md b/docs/src/flows/simulation.md new file mode 100644 index 000000000..da8d18576 --- /dev/null +++ b/docs/src/flows/simulation.md @@ -0,0 +1,4 @@ +# [Simulation](@id flows-simulation) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/ad-backend.md b/docs/src/geometry/ad-backend.md new file mode 100644 index 000000000..0c49ad85e --- /dev/null +++ b/docs/src/geometry/ad-backend.md @@ -0,0 +1,4 @@ +# [AD backend](@id geometry-ad-backend) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/ad.md b/docs/src/geometry/ad.md new file mode 100644 index 000000000..66de7e3f5 --- /dev/null +++ b/docs/src/geometry/ad.md @@ -0,0 +1,4 @@ +# [ad](@id geometry-ad) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/lie-macro.md b/docs/src/geometry/lie-macro.md new file mode 100644 index 000000000..b5c46a2a8 --- /dev/null +++ b/docs/src/geometry/lie-macro.md @@ -0,0 +1,4 @@ +# [@Lie](@id geometry-lie-macro) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/lift.md b/docs/src/geometry/lift.md new file mode 100644 index 000000000..259b231ea --- /dev/null +++ b/docs/src/geometry/lift.md @@ -0,0 +1,4 @@ +# [Lift](@id geometry-lift) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/overview.md b/docs/src/geometry/overview.md new file mode 100644 index 000000000..4cdd3e74c --- /dev/null +++ b/docs/src/geometry/overview.md @@ -0,0 +1,4 @@ +# [Overview](@id geometry-overview) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/geometry/poisson.md b/docs/src/geometry/poisson.md new file mode 100644 index 000000000..b4d5e02f0 --- /dev/null +++ b/docs/src/geometry/poisson.md @@ -0,0 +1,4 @@ +# [Poisson](@id geometry-poisson) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/getting-started/first-problem.md b/docs/src/getting-started/first-problem.md new file mode 100644 index 000000000..af7d5221c --- /dev/null +++ b/docs/src/getting-started/first-problem.md @@ -0,0 +1,4 @@ +# [First problem](@id getting-started-first-problem) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/getting-started/installation.md b/docs/src/getting-started/installation.md new file mode 100644 index 000000000..4b10d9af9 --- /dev/null +++ b/docs/src/getting-started/installation.md @@ -0,0 +1,4 @@ +# [Installation](@id getting-started-installation) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/index.md b/docs/src/index.md index 59c814c27..c0af087c1 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -38,10 +38,10 @@ sol = solve(ocp) plot(sol) ``` -- For more details, see the [basic example tutorial](@ref example-double-integrator-energy). -- The [`@def`](@ref) macro defines the problem. See the [abstract syntax tutorial](@ref manual-abstract-syntax). -- The [`solve`](@ref) function has many options. See the [solve tutorial](@ref manual-solve). -- The [`plot`](@ref) function is flexible. See the [plot tutorial](@ref manual-plot). +- For more details, see the [example gallery](@ref examples-gallery). +- The `@def` macro defines the problem. See the [abstract syntax guide](@ref modelling-abstract-syntax). +- The `solve` function has many options. See the [solve overview](@ref solve-overview). +- The `plot` function is flexible. See the [plot guide](@ref results-plot). ## [Mathematical formulation](@id math-formulation) diff --git a/docs/src/migration.md b/docs/src/migration.md new file mode 100644 index 000000000..86c6ca334 --- /dev/null +++ b/docs/src/migration.md @@ -0,0 +1,4 @@ +# [Migrating to v2.1](@id migration) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/abstract-syntax.md b/docs/src/modelling/abstract-syntax.md new file mode 100644 index 000000000..e65fa27b1 --- /dev/null +++ b/docs/src/modelling/abstract-syntax.md @@ -0,0 +1,4 @@ +# [Abstract syntax](@id modelling-abstract-syntax) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/formulation.md b/docs/src/modelling/formulation.md new file mode 100644 index 000000000..8bafce8d3 --- /dev/null +++ b/docs/src/modelling/formulation.md @@ -0,0 +1,4 @@ +# [Formulation](@id modelling-formulation) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/functional-api.md b/docs/src/modelling/functional-api.md new file mode 100644 index 000000000..686d47e9c --- /dev/null +++ b/docs/src/modelling/functional-api.md @@ -0,0 +1,4 @@ +# [Functional API](@id modelling-functional-api) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/inspect.md b/docs/src/modelling/inspect.md new file mode 100644 index 000000000..037dd09cc --- /dev/null +++ b/docs/src/modelling/inspect.md @@ -0,0 +1,4 @@ +# [Inspect a problem](@id modelling-inspect) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/with-ai.md b/docs/src/modelling/with-ai.md new file mode 100644 index 000000000..9bffd36a9 --- /dev/null +++ b/docs/src/modelling/with-ai.md @@ -0,0 +1,4 @@ +# [With AI](@id modelling-with-ai) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/modelling/without-control.md b/docs/src/modelling/without-control.md new file mode 100644 index 000000000..6c4d426a5 --- /dev/null +++ b/docs/src/modelling/without-control.md @@ -0,0 +1,4 @@ +# [No control](@id modelling-without-control) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/notebooks/tutorial.ipynb b/docs/src/notebooks/tutorial.ipynb deleted file mode 100644 index 464dc3e9b..000000000 --- a/docs/src/notebooks/tutorial.ipynb +++ /dev/null @@ -1,745 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# OptimalControl.jl — a guided tour\n", - "\n", - "\n", - "This tutorial is a guided tour of [OptimalControl.jl](https://control-toolbox.org/OptimalControl.jl), part of the [control-toolbox](https://control-toolbox.org) ecosystem. We follow two problems end to end: a simple **double integrator** for modelling, initialisation and the **indirect** (Pontryagin) method, and the **Goddard rocket** for the **direct** method in depth, grid continuation and GPU solving. Advanced topics are linked at the end.\n", - "\n", - "It is written for readers with a background in optimal control, ODEs or optimisation. By the end you will be able to define an optimal control problem, solve it by both the direct and indirect methods, and visualise the result — all in a few lines of code." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The problem, and installing the tools\n", - "\n", - "An **optimal control problem** (OCP) in Bolza form reads\n", - "\n", - "$$\n", - "J(x, u) = g(x(t_0), x(t_f)) + \\int_{t_0}^{t_f} f^{0}(t, x(t), u(t))\\,\\mathrm{d}t \\;\\to\\; \\min,\n", - "$$\n", - "\n", - "subject to the controlled dynamics $\\dot{x}(t) = f(t, x(t), u(t))$ and, possibly, box / path / boundary constraints. When $g = 0$ the cost is of **Lagrange** form; when $f^0 = 0$, of **Mayer** form.\n", - "\n", - "More generally, the times $t_0$ and $t_f$ may be free (optimisation variables), and a vector $v$ of additional parameters can enter the cost, dynamics and constraints. The full problem then reads\n", - "\n", - "$$\n", - "\\min_{x,u,v}\\; g(x(t_0), x(t_f), v) + \\int_{t_0}^{t_f} f^{0}(t, x(t), u(t), v)\\,\\mathrm{d}t,\n", - "$$\n", - "\n", - "subject to $\\dot{x}(t) = f(t, x(t), u(t), v)$, box / path / boundary constraints.\n", - "\n", - "OptimalControl.jl is the core of the [control-toolbox](https://control-toolbox.org) ecosystem, a modular suite of Julia packages — CTBase (base types & exceptions), CTParser (DSL parsing), CTModels (problem data structures), CTDirect (discretisation & NLP transcription), CTFlows (Hamiltonian flows for indirect methods), and CTSolvers (solver orchestration) — that can also be used individually.\n", - "\n", - "Installation is a single package:\n", - "\n", - "```julia\n", - "import Pkg\n", - "Pkg.add(\"OptimalControl\")\n", - "```\n", - "\n", - "We load OptimalControl.jl to model the problem, a solver backend ([NLPModelsIpopt.jl](https://jso.dev/NLPModelsIpopt.jl)), and [Plots.jl](https://docs.juliaplots.org)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "using OptimalControl\n", - "using NLPModelsIpopt\n", - "using Plots" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Defining a problem: `@def` vs macro-free\n", - "\n", - "Our running example: a wagon of unit mass on a frictionless rail, state $x = (q, v)$ (position, velocity), acceleration controlled by a force $u$. We start at $(-1, 0)$, must reach $(0, 0)$ at $t_f = 1$, and minimise the transfer energy\n", - "\n", - "$$\n", - "\\frac{1}{2}\\int_0^1 u^2(t)\\,\\mathrm{d}t,\n", - "$$\n", - "\n", - "subject to the dynamics\n", - "\n", - "$$\n", - "\\dot{q}(t) = v(t), \\qquad \\dot{v}(t) = u(t).\n", - "$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "t0 = 0;\n", - "tf = 1;\n", - "x0 = [-1, 0];\n", - "xf = [0, 0];" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The `@def` macro\n", - "\n", - "The [`@def`](https://control-toolbox.org/OptimalControl.jl/stable/manual-abstract.html) macro lets us write the problem almost exactly as the mathematics:\n", - "\n", - "Each line of the `@def` block mirrors a piece of the mathematical formulation — time, state, control, dynamics, boundary conditions, then cost — in the same order one would write them on paper. Unicode symbols (`∈`, `R²`, `ẋ`, `∫`, `→`) make the code read like the maths; plain ASCII alternatives (`R^2`, `derivative`, `integral`, `=>`) are available for keyboards or workflows that prefer them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ocp = @def begin\n", - " t ∈ [t0, tf], time\n", - " x = (q, v) ∈ R², state\n", - " u ∈ R, control\n", - "\n", - " x(t0) == x0\n", - " x(tf) == xf\n", - "\n", - " ẋ(t) == [v(t), u(t)]\n", - "\n", - " 0.5∫(u(t)^2) → min\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The same problem with the macro-free (functional) API\n", - "\n", - "The [functional API](https://control-toolbox.org/OptimalControl.jl/stable/manual-macro-free.html) builds the *same* model step by step with plain functions — useful for programmatic problem generation or macro-free library code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pre = OptimalControl.PreModel()\n", - "\n", - "time!(pre; t0=t0, tf=tf)\n", - "state!(pre, 2, \"x\", [\"q\", \"v\"])\n", - "control!(pre, 1)\n", - "\n", - "function f_energy!(dx, t, x, u, v)\n", - " dx[1] = x[2]\n", - " dx[2] = u[1]\n", - " return nothing\n", - "end\n", - "dynamics!(pre, f_energy!)\n", - "\n", - "function boundary_energy!(b, x0_, xf_, v)\n", - " b[1] = x0_[1] - x0[1]\n", - " b[2] = x0_[2] - x0[2]\n", - " b[3] = xf_[1] - xf[1]\n", - " b[4] = xf_[2] - xf[2]\n", - " return nothing\n", - "end\n", - "constraint!(pre, :boundary; f=boundary_energy!, lb=zeros(4), ub=zeros(4), label=:endpoint)\n", - "\n", - "lagrange_energy(t, x, u, v) = 0.5 * u[1]^2\n", - "objective!(pre, :min; lagrange=lagrange_energy)\n", - "\n", - "time_dependence!(pre; autonomous=true)\n", - "\n", - "ocp_func = build(pre)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### What the macro actually does\n", - "\n", - "**Key message:** `@def` *translates the expression* into the very same functional calls, and **additionally records the symbolic definition**. We can see the difference directly: the macro keeps the DSL expression, whereas the functional API stores an empty definition." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "definition(ocp) # the macro records the full DSL expression" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "has_abstract_definition(ocp_func) # false: functional API stores no abstract definition" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Two things to keep in mind:** (1) in the functional API, callbacks are always vector-valued — even when the control is scalar, one writes `u[1]` — not `u` — inside `f_energy!` or `lagrange_energy`; (2) the functional API currently works only with the `:adnlp` modeler, **not** `:exa` (needed for GPU solving) — one more reason to prefer `@def` when GPU execution is contemplated (more in the GPU section)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## First solve, initial guess, and the costate\n", - "\n", - "Solving is one call, plotting another." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "direct_sol = solve(ocp)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot(direct_sol; size=(800, 600))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The default initial guess\n", - "\n", - "With no initial guess, every variable is initialised to `0.1`. We can *see* the initial guess without optimising, by stopping the solver immediately with `max_iter=0`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sol_init = solve(ocp; init=nothing, max_iter=0, display=false)\n", - "plot(sol_init; size=(800, 600))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Notice the right-hand column: the costate is already there.** Even though we only ever provide the state, control and (optional) variable, the solver initialises the **adjoint** internally. After optimisation, this right-column costate is exactly the **adjoint $p$ of Pontryagin's Maximum Principle** — the same $p$ we will reuse to start the indirect method in the indirect section. This closes the loop between the direct and indirect methods." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Providing our own initial guess\n", - "\n", - "The recommended way to provide an initial guess is the `@init` macro, using the labels from the `@def` block (`q`, `v`, `u` here):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ig = @init ocp begin\n", - " q(t) := -1 + t\n", - " v(t) := 0\n", - " u(t) := 0\n", - "end\n", - "\n", - "sol = solve(ocp; init=ig, display=false)\n", - "println(\"iterations, default guess: \", iterations(direct_sol))\n", - "println(\"iterations, @init guess: \", iterations(sol))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this case both guesses give **1 iteration**: the double integrator is a *linear-quadratic* problem, so the NLP is quadratic and Ipopt solves it in a single step regardless of the starting point. Warm-starting only pays off on genuinely nonlinear problems — we will see this with the **Goddard rocket** in the next section." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For all the ways to specify an initial guess, see [Set an initial guess](https://control-toolbox.org/OptimalControl.jl/stable/manual-initial-guess.html).\n", - "**Note:** there is currently no way to initialise the costate directly — only state, control and variable can be provided through `@init`. The solver initialises the adjoint internally (as we saw above). Costate initialisation is a planned feature." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Direct method in depth: Goddard\n", - "\n", - "### Discretise optimal control problems\n", - "\n", - "The **direct** method turns the infinite-dimensional OCP into a finite-dimensional nonlinear program (NLP) by discretising time (Runge–Kutta / collocation) on a grid, then hands the NLP to a solver. It is robust and easy to use.\n", - "\n", - "Concretely, time is discretised on a uniform grid $t_0 < t_1 < \\dots < t_N = t_f$ with step $h = (t_f - t_0)/N$. The (explicit) Euler scheme, for instance, replaces the dynamics by\n", - "\n", - "$$\n", - "x_{i} = x_{i-1} + h\\,f(t_{i-1}, x_{i-1}, u_{i-1}), \\quad i = 1, \\dots, N,\n", - "$$\n", - "\n", - "and the integral cost by the corresponding rectangle sum\n", - "\n", - "$$\n", - "h\\sum_{i=0}^{N-1} f^{0}(t_i, x_i, u_i).\n", - "$$\n", - "\n", - "The continuous OCP thus becomes a finite-dimensional NLP in the variables $X = (x_0, \\dots, x_N, u_0, \\dots, u_N)$, which is passed to an NLP solver such as [Ipopt](https://coin-or.github.io/Ipopt). Higher-order schemes (midpoint, Gauss–Legendre collocation) follow the same principle with different quadrature and interpolation formulas — `solve` defaults to the second-order `:midpoint` scheme, not Euler.\n", - "\n", - "### The Goddard rocket problem\n", - "\n", - "To demonstrate convergence behaviour and warm-starting, we need a genuinely nonlinear problem. The **Goddard rocket** — maximise the final altitude, with free final time and a singular arc — is a classic test case." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Goddard data and dynamics (F0: drift, F1: thrust)\n", - "const r0 = 1\n", - "const v0 = 0\n", - "const m0 = 1\n", - "const mf = 0.6\n", - "const Cd = 310\n", - "const Tmax = 3.5\n", - "const β = 500\n", - "const b = 2\n", - "\n", - "F0(x) = begin\n", - " r, v, m = x\n", - " D = Cd * v^2 * exp(-β * (r - 1))\n", - " [v, -D/m - 1/r^2, 0]\n", - "end\n", - "F1(x) = begin\n", - " r, v, m = x\n", - " [0, Tmax/m, -b*Tmax]\n", - "end\n", - "\n", - "goddard = @def begin\n", - " tf ∈ R, variable\n", - " t ∈ [t0, tf], time\n", - " x = (r, v, m) ∈ R³, state\n", - " u ∈ R, control\n", - "\n", - " x(t0) == [r0, v0, m0]\n", - " m(tf) == mf\n", - " 0 ≤ u(t) ≤ 1\n", - " r(t) ≥ r0\n", - "\n", - " ẋ(t) == F0(x(t)) + u(t) * F1(x(t))\n", - "\n", - " r(tf) → max\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Choosing a solver is trivial\n", - "\n", - "`solve` uses the defaults (collocation, ADNLP modeler, Ipopt, CPU). Switching solver is just loading a package and passing a token (see [Solve a problem](https://control-toolbox.org/OptimalControl.jl/stable/manual-solve.html)):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "using MadNLP\n", - "\n", - "sol_ipopt = solve(goddard; grid_size=250, display=false)\n", - "sol_madnlp = solve(goddard, :madnlp; grid_size=250, display=false)\n", - "\n", - "println(\"Ipopt : r(tf) = \", objective(sol_ipopt), \", \", iterations(sol_ipopt), \" iters\")\n", - "println(\"MadNLP : r(tf) = \", objective(sol_madnlp), \", \", iterations(sol_madnlp), \" iters\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The available methods and their options can be inspected with `methods()` and `describe(:collocation)`; we will not dwell on them here." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Grid continuation by warm-starting\n", - "\n", - "A solution can be passed **directly** as the initial guess of another solve — it is interpolated onto the new grid. This makes discrete continuation trivial and ties back to the initialisation above. On this nonlinear problem it genuinely **pays**: we compare reaching a fine grid of 1000 two ways:\n", - "\n", - "1. **cold start** — solve `grid_size=1000` directly;\n", - "2. **cascade** — solve `grid_size=50` first, then `grid_size=1000` warm-started with that solution." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# solutions computed once, reused for iteration counts and the overlay plot\n", - "sol_cold = solve(goddard; grid_size=1000, display=false)\n", - "\n", - "# warm cascade: grid 50 first, then grid 1000 initialised from it\n", - "s50 = solve(goddard; grid_size=50, display=false)\n", - "s1000 = solve(goddard; grid_size=1000, init=s50, display=false)\n", - "\n", - "println(\"cold grid 1000 : \", iterations(sol_cold), \" iters\")\n", - "println(\"cascade grid 50 (warm-up): \", iterations(s50), \" iters\")\n", - "println(\"cascade grid 1000 (warm) : \", iterations(s1000), \" iters\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Message:** what matters is the iteration count *at the expensive grid* — the warm-started `iterations(s1000)` is well below the cold `iterations(sol_cold)`, even though the cheap `grid_size=50` warm-up adds iterations of its own to the running total; since a grid-50 iteration is far cheaper than a grid-1000 iteration, the cascade still wins on wall-clock time. Overlay the successive solutions to watch convergence:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt = plot(s50; label=\"50\", size=(800, 800))\n", - "plot!(plt, s1000; label=\"1000\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is grid-refinement warm-starting. The very same mechanism drives **parametric** continuation (homotopy on a physical parameter, e.g. maximum thrust): ." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Comparison with a bang-bang strategy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How much better is the optimal solution compared to a naive strategy? We simulate **full thrust until fuel depletion, then coast to apogee** — a bang-bang profile with no optimisation, just two ODE integrations with callbacks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "using OrdinaryDiffEq # ODE solver (callbacks for the bang-bang simulation)\n", - "\n", - "# Phase 1: u = 1, stop when m = mf (fuel depleted)\n", - "bang1!(dx, x, p, t) = (dx[:] = F0(x) + F1(x))\n", - "cb_fuel = ContinuousCallback((u, t, int) -> u[3] - mf, terminate!)\n", - "sol_bang1 = solve(\n", - " ODEProblem(bang1!, [r0, v0, m0], (t0, 100.0)),\n", - " Tsit5();\n", - " callback=cb_fuel,\n", - " reltol=1e-8,\n", - " abstol=1e-8,\n", - ")\n", - "t1_bang, x1_bang = sol_bang1.t[end], sol_bang1[:, end]\n", - "\n", - "# Phase 2: u = 0, stop when v = 0 (apogee)\n", - "bang2!(dx, x, p, t) = (dx[:] = F0(x))\n", - "cb_apogee = ContinuousCallback((u, t, int) -> u[2], terminate!)\n", - "sol_bang2 = solve(\n", - " ODEProblem(bang2!, x1_bang, (t1_bang, 1000.0)),\n", - " Tsit5();\n", - " callback=cb_apogee,\n", - " reltol=1e-8,\n", - " abstol=1e-8,\n", - ")\n", - "tf_bang, rf_bang = sol_bang2.t[end], sol_bang2[1, end]\n", - "\n", - "println(\n", - " \"Bang-bang: r(tf) = \",\n", - " round(rf_bang; digits=6),\n", - " \" (t1=\",\n", - " round(t1_bang; digits=4),\n", - " \", tf=\",\n", - " round(tf_bang; digits=4),\n", - " \")\",\n", - ")\n", - "println(\n", - " \"Optimal: r(tf) = \",\n", - " round(objective(sol_cold); digits=6),\n", - " \" ( tf=\",\n", - " round(variable(sol_cold); digits=4),\n", - " \")\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The optimal thrust profile uses a **singular arc** — it does not simply push at the maximum. Overlaying the two trajectories on the altitude–velocity plane makes the difference visible:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# assemble the bang-bang trajectory as (t, r, v, m) for plotting\n", - "t_bang = [sol_bang1.t; sol_bang2.t]\n", - "r_bang = [sol_bang1[1, :]; sol_bang2[1, :]]\n", - "\n", - "plt_bang = plot(sol_cold; label=\"optimal\", linewidth=2, color=1)\n", - "plot!(plt_bang[1], t_bang, r_bang; label=\"bang-bang\", linestyle=:dash, linewidth=2, color=2)\n", - "plot(plt_bang[1]; legend=:bottomright, xlabel=\"time\", ylabel=\"altitude\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solving on a GPU\n", - "\n", - "Moving to the GPU is a single token, `:gpu`, which auto-completes to `(:collocation, :exa, :madnlp, :gpu)`. It requires the `:exa` modeler (hence `@def`, not the macro-free API — cf. the definition section) plus a CUDA-capable GPU.\n", - "\n", - "In a seminar or on Binder there is usually **no functional GPU**, so the call is *expected to fail* — that is the pedagogical point: the `:gpu` token needs a specific setup. We wrap it in a `try/catch` so the tour keeps running and shows the raised exception." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "using MadNLPGPU\n", - "using CUDA\n", - "\n", - "try\n", - " global sol_gpu = solve(goddard, :gpu; grid_size=1000, display=false)\n", - " println(\"GPU solve succeeded — a functional GPU is available.\")\n", - "catch e\n", - " println(\"GPU solve failed, as expected without a functional GPU.\")\n", - " println(\"CUDA.functional() = \", CUDA.functional())\n", - " println(\"Exception: \", first(sprint(showerror, e), 400))\n", - "end" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For the full GPU setup, see [Solve on GPU](https://control-toolbox.org/OptimalControl.jl/stable/manual-solve-gpu.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## The indirect method\n", - "\n", - "We now return to the **double integrator** `ocp` from the earlier sections. Its shooting has just two unknowns and is initialised by the direct costate above, which makes it ideal to *see* the indirect method. (The Goddard shooting is a *structured multi-arc* problem — see the links in the last section.)\n", - "\n", - "In control-toolbox we systematically pair the direct method with the **indirect** one, based on Pontryagin's Maximum Principle (PMP), with pseudo-Hamiltonian\n", - "\n", - "$$\n", - "H(x,p,u) = p\\,f(x,u) + p^0 f^0(x,u) \\qquad (\\text{normal case } p^0 = -1).\n", - "$$\n", - "\n", - "The PMP gives the maximising control in feedback form\n", - "\n", - "$$\n", - "u(x,p) = \\arg\\max_u H,\n", - "$$\n", - "\n", - "and the optimal trajectory solves a boundary value problem that we recast as a **shooting equation**\n", - "\n", - "$$\n", - "S(p_0) = 0.\n", - "$$\n", - "\n", - "The indirect method proceeds in three steps:\n", - "\n", - "1. **Maximising control.** The PMP yields the control in feedback form $u(x, p) = \\arg\\max_u H(x, p, u)$. Substituting back gives the maximised Hamiltonian\n", - "\n", - " $$\n", - " \\mathbf{H}(x, p) = H(x, p, u(x, p)).\n", - " $$\n", - "\n", - "2. **Boundary value problem.** The optimal trajectory satisfies the Hamiltonian system\n", - "\n", - " $$\n", - " \\dot{x} = \\nabla_p \\mathbf{H}, \\qquad \\dot{p} = -\\nabla_x \\mathbf{H},\n", - " $$\n", - "\n", - " with boundary conditions $x(t_0) = x_0$, $x(t_f) = x_f$.\n", - "\n", - "3. **Shooting function.** Let $\\varphi_{t_0, x_0, p_0}(\\cdot)$ denote the flow of the Hamiltonian vector field from $(x_0, p_0)$. The shooting function\n", - "\n", - " $$\n", - " S(p_0) = \\pi(\\varphi_{t_0, x_0, p_0}(t_f)) - x_f, \\qquad \\pi(x, p) = x,\n", - " $$\n", - "\n", - " measures the miss at $t_f$: solving the BVP reduces to finding $p_0$ such that $S(p_0) = 0$.\n", - "\n", - "For the energy problem, $H = p_1 v + p_2 u - u^2/2$, so the maximiser is $u = p_2$." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "using OrdinaryDiffEq # ODE solver (Hamiltonian flow)\n", - "using NonlinearSolve # nonlinear equations (shooting)\n", - "\n", - "# maximising control in feedback form\n", - "u_max(x, p) = p[2]\n", - "\n", - "# Hamiltonian flow of the OCP\n", - "φ = Flow(ocp, u_max);\n", - "\n", - "# state projection π(x, p) = x\n", - "proj((x, p)) = x\n", - "\n", - "# shooting function\n", - "S(p0) = proj(φ(t0, x0, p0, tf)) - xf" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**The shooting is initialised with the costate of the direct solution** — the very adjoint we highlighted above:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nle!(s, p0, _) = (s[:] = S(p0))\n", - "\n", - "p_of_t = costate(direct_sol) # costate as a function of time\n", - "p0_guess = p_of_t(t0) # initial costate from the direct method\n", - "\n", - "prob = NonlinearProblem(nle!, p0_guess)\n", - "shooting_sol = solve(prob; show_trace=Val(true))\n", - "p0_sol = shooting_sol.u\n", - "\n", - "println(\"costate p0 = \", p0_sol)\n", - "println(\"shoot S(p0) = \", S(p0_sol))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Reconstruct the indirect solution from the flow and overlay it with the direct solution:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "indirect_sol = φ((t0, tf), x0, p0_sol; saveat=range(t0, tf, 100))\n", - "\n", - "plt_compare = plot(direct_sol; label=\"direct\", size=(800, 600))\n", - "plot!(plt_compare, indirect_sol; label=\"indirect\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "See [Compute flows from optimal control problems](https://control-toolbox.org/OptimalControl.jl/stable/manual-flow-ocp.html) for the flow construction, and the [indirect simple shooting tutorial](https://control-toolbox.org/Tutorials.jl/stable/)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Going further\n", - "\n", - "**Variables & parameters.** Beyond the control, one can optimise **parameters** naturally, both in an OCP (the `variable` keyword of the DSL) and in a differential-constraint optimisation problem **without any control** (a *control-free* problem).\n", - "See [control-free problems](https://control-toolbox.org/OptimalControl.jl/stable/example-control-free.html).\n", - "\n", - "**Advanced examples** (each does both direct and indirect):\n", - "\n", - "- Singular control (control-affine systems) — \n", - "- State constraint — \n", - "- Goddard problem — free final time, a singular arc, a state constraint and a structured shooting all at once — \n", - "\n", - "**Discrete continuation** — warm-starting across a family of problems (homotopy on a physical parameter), the grown-up version of the grid continuation above: ." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "\n", - "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.12.6", - "language": "julia", - "name": "julia-1.12" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.12.6" - } - }, - "nbformat": 4, - "nbformat_minor": 3 -} \ No newline at end of file diff --git a/docs/src/results/plot.md b/docs/src/results/plot.md new file mode 100644 index 000000000..d6d495535 --- /dev/null +++ b/docs/src/results/plot.md @@ -0,0 +1,4 @@ +# [Plot](@id results-plot) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/results/save-load.md b/docs/src/results/save-load.md new file mode 100644 index 000000000..609b17333 --- /dev/null +++ b/docs/src/results/save-load.md @@ -0,0 +1,4 @@ +# [Save & load](@id results-save-load) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/results/solution.md b/docs/src/results/solution.md new file mode 100644 index 000000000..dea62acdf --- /dev/null +++ b/docs/src/results/solution.md @@ -0,0 +1,4 @@ +# [Solution object](@id results-solution) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/scripts/tutorial.jl b/docs/src/scripts/tutorial.jl deleted file mode 100644 index e9aa6dbb5..000000000 --- a/docs/src/scripts/tutorial.jl +++ /dev/null @@ -1,226 +0,0 @@ -using OptimalControl -using NLPModelsIpopt -using Plots - -t0 = 0; -tf = 1; -x0 = [-1, 0]; -xf = [0, 0]; - -ocp = @def begin - t ∈ [t0, tf], time - x = (q, v) ∈ R², state - u ∈ R, control - - x(t0) == x0 - x(tf) == xf - - ẋ(t) == [v(t), u(t)] - - 0.5∫(u(t)^2) → min -end - -pre = OptimalControl.PreModel() - -time!(pre; t0=t0, tf=tf) -state!(pre, 2, "x", ["q", "v"]) -control!(pre, 1) - -function f_energy!(dx, t, x, u, v) - dx[1] = x[2] - dx[2] = u[1] - return nothing -end -dynamics!(pre, f_energy!) - -function boundary_energy!(b, x0_, xf_, v) - b[1] = x0_[1] - x0[1] - b[2] = x0_[2] - x0[2] - b[3] = xf_[1] - xf[1] - b[4] = xf_[2] - xf[2] - return nothing -end -constraint!(pre, :boundary; f=boundary_energy!, lb=zeros(4), ub=zeros(4), label=:endpoint) - -lagrange_energy(t, x, u, v) = 0.5 * u[1]^2 -objective!(pre, :min; lagrange=lagrange_energy) - -time_dependence!(pre; autonomous=true) - -ocp_func = build(pre) - -definition(ocp) # the macro records the full DSL expression - -has_abstract_definition(ocp_func) # false: functional API stores no abstract definition - -direct_sol = solve(ocp) - -plot(direct_sol; size=(800, 600)) - -sol_init = solve(ocp; init=nothing, max_iter=0, display=false) -plot(sol_init; size=(800, 600)) - -ig = @init ocp begin - q(t) := -1 + t - v(t) := 0 - u(t) := 0 -end - -sol = solve(ocp; init=ig, display=false) -println("iterations, default guess: ", iterations(direct_sol)) -println("iterations, @init guess: ", iterations(sol)) - -# Goddard data and dynamics (F0: drift, F1: thrust) -const r0 = 1 -const v0 = 0 -const m0 = 1 -const mf = 0.6 -const Cd = 310 -const Tmax = 3.5 -const β = 500 -const b = 2 - -F0(x) = begin - r, v, m = x - D = Cd * v^2 * exp(-β * (r - 1)) - [v, -D/m - 1/r^2, 0] -end -F1(x) = begin - r, v, m = x - [0, Tmax/m, -b*Tmax] -end - -goddard = @def begin - tf ∈ R, variable - t ∈ [t0, tf], time - x = (r, v, m) ∈ R³, state - u ∈ R, control - - x(t0) == [r0, v0, m0] - m(tf) == mf - 0 ≤ u(t) ≤ 1 - r(t) ≥ r0 - - ẋ(t) == F0(x(t)) + u(t) * F1(x(t)) - - r(tf) → max -end - -using MadNLP - -sol_ipopt = solve(goddard; grid_size=250, display=false) -sol_madnlp = solve(goddard, :madnlp; grid_size=250, display=false) - -println("Ipopt : r(tf) = ", objective(sol_ipopt), ", ", iterations(sol_ipopt), " iters") -println("MadNLP : r(tf) = ", objective(sol_madnlp), ", ", iterations(sol_madnlp), " iters") - -# solutions computed once, reused for iteration counts and the overlay plot -sol_cold = solve(goddard; grid_size=1000, display=false) - -# warm cascade: grid 50 first, then grid 1000 initialised from it -s50 = solve(goddard; grid_size=50, display=false) -s1000 = solve(goddard; grid_size=1000, init=s50, display=false) - -println("cold grid 1000 : ", iterations(sol_cold), " iters") -println("cascade grid 50 (warm-up): ", iterations(s50), " iters") -println("cascade grid 1000 (warm) : ", iterations(s1000), " iters") - -plt = plot(s50; label="50", size=(800, 800)) -plot!(plt, s1000; label="1000") - -using OrdinaryDiffEq # ODE solver (callbacks for the bang-bang simulation) - -# Phase 1: u = 1, stop when m = mf (fuel depleted) -bang1!(dx, x, p, t) = (dx[:] = F0(x) + F1(x)) -cb_fuel = ContinuousCallback((u, t, int) -> u[3] - mf, terminate!) -sol_bang1 = solve( - ODEProblem(bang1!, [r0, v0, m0], (t0, 100.0)), - Tsit5(); - callback=cb_fuel, - reltol=1e-8, - abstol=1e-8, -) -t1_bang, x1_bang = sol_bang1.t[end], sol_bang1[:, end] - -# Phase 2: u = 0, stop when v = 0 (apogee) -bang2!(dx, x, p, t) = (dx[:] = F0(x)) -cb_apogee = ContinuousCallback((u, t, int) -> u[2], terminate!) -sol_bang2 = solve( - ODEProblem(bang2!, x1_bang, (t1_bang, 1000.0)), - Tsit5(); - callback=cb_apogee, - reltol=1e-8, - abstol=1e-8, -) -tf_bang, rf_bang = sol_bang2.t[end], sol_bang2[1, end] - -println( - "Bang-bang: r(tf) = ", - round(rf_bang; digits=6), - " (t1=", - round(t1_bang; digits=4), - ", tf=", - round(tf_bang; digits=4), - ")", -) -println( - "Optimal: r(tf) = ", - round(objective(sol_cold); digits=6), - " ( tf=", - round(variable(sol_cold); digits=4), - ")", -) - -# assemble the bang-bang trajectory as (t, r, v, m) for plotting -t_bang = [sol_bang1.t; sol_bang2.t] -r_bang = [sol_bang1[1, :]; sol_bang2[1, :]] - -plt_bang = plot(sol_cold; label="optimal", linewidth=2, color=1) -plot!(plt_bang[1], t_bang, r_bang; label="bang-bang", linestyle=:dash, linewidth=2, color=2) -plot(plt_bang[1]; legend=:bottomright, xlabel="time", ylabel="altitude") - -using MadNLPGPU -using CUDA - -try - global sol_gpu = solve(goddard, :gpu; grid_size=1000, display=false) - println("GPU solve succeeded — a functional GPU is available.") -catch e - println("GPU solve failed, as expected without a functional GPU.") - println("CUDA.functional() = ", CUDA.functional()) - println("Exception: ", first(sprint(showerror, e), 400)) -end - -using OrdinaryDiffEq # ODE solver (Hamiltonian flow) -using NonlinearSolve # nonlinear equations (shooting) - -# maximising control in feedback form -u_max(x, p) = p[2] - -# Hamiltonian flow of the OCP -φ = Flow(ocp, u_max); - -# state projection π(x, p) = x -proj((x, p)) = x - -# shooting function -S(p0) = proj(φ(t0, x0, p0, tf)) - xf - -nle!(s, p0, _) = (s[:] = S(p0)) - -p_of_t = costate(direct_sol) # costate as a function of time -p0_guess = p_of_t(t0) # initial costate from the direct method - -prob = NonlinearProblem(nle!, p0_guess) -shooting_sol = solve(prob; show_trace=Val(true)) -p0_sol = shooting_sol.u - -println("costate p0 = ", p0_sol) -println("shoot S(p0) = ", S(p0_sol)) - -indirect_sol = φ((t0, tf), x0, p0_sol; saveat=range(t0, tf, 100)) - -plt_compare = plot(direct_sol; label="direct", size=(800, 600)) -plot!(plt_compare, indirect_sol; label="indirect") - -# This file was generated using Literate.jl, https://github.com/fredrikekre/Literate.jl diff --git a/docs/src/solve/choosing-a-method.md b/docs/src/solve/choosing-a-method.md new file mode 100644 index 000000000..5c273f537 --- /dev/null +++ b/docs/src/solve/choosing-a-method.md @@ -0,0 +1,4 @@ +# [Choosing a method](@id solve-choosing-a-method) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/solve/explicit-mode.md b/docs/src/solve/explicit-mode.md new file mode 100644 index 000000000..c4437e77b --- /dev/null +++ b/docs/src/solve/explicit-mode.md @@ -0,0 +1,4 @@ +# [Explicit mode](@id solve-explicit-mode) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/solve/gpu.md b/docs/src/solve/gpu.md new file mode 100644 index 000000000..9ec304d47 --- /dev/null +++ b/docs/src/solve/gpu.md @@ -0,0 +1,4 @@ +# [GPU](@id solve-gpu) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/solve/initial-guess.md b/docs/src/solve/initial-guess.md new file mode 100644 index 000000000..c8841ad90 --- /dev/null +++ b/docs/src/solve/initial-guess.md @@ -0,0 +1,4 @@ +# [Initial guess](@id solve-initial-guess) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/solve/options.md b/docs/src/solve/options.md new file mode 100644 index 000000000..ad69ba1f7 --- /dev/null +++ b/docs/src/solve/options.md @@ -0,0 +1,4 @@ +# [Options](@id solve-options) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports). diff --git a/docs/src/solve/overview.md b/docs/src/solve/overview.md new file mode 100644 index 000000000..527fac4ba --- /dev/null +++ b/docs/src/solve/overview.md @@ -0,0 +1,4 @@ +# [Overview](@id solve-overview) + +!!! warning "Under construction" + This page is being written. See the [specification reports](https://github.com/control-toolbox/OptimalControl.jl/tree/main/docs/reports).