Skip to content

docs: fix master doc build (Attractors floor + latest SciML API adaption)#1490

Draft
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:docs-attractors-compat-floor
Draft

docs: fix master doc build (Attractors floor + latest SciML API adaption)#1490
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:docs-attractors-compat-floor

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Summary

The Documentation workflow on master (job build) was failing. The build runs all @example blocks and aggregates errors, and the full run surfaced 47 failing blocks across ~10 doc pages — all caused by breaking API changes in the latest SciML stack (OrdinaryDiffEq v2 / SciMLBase 3 / BifurcationKit 0.8 / SciMLLogging 2 / Attractors 1.38). This PR fixes them.

Fixes

  1. Attractors floor (original commit). Attractors < 1.38.2 calls DynamicalSystemsBase.referenced_sciml_model with no fallback; the rename broke the dynamical_systems_basins block. Added Attractors as a direct docs dep with a 1.38.2 compat floor.

  2. verbose = false (Bool) rejected by solve. DiffEqBase's _process_verbose_param(::Bool) now throws ArgumentError. Replaced with verbose = SciMLLogging.None() (added SciMLLogging as a docs dep + per-page import). Affected: optimization_ode_param_fitting.md, behaviour_optimisation.md, global_sensitivity_analysis.md, turing_ode_param_fitting.md, ode_fitting_oscillation.md.

  3. Rodas5P(autodiff = false) (Bool) rejected. Replaced with autodiff = AutoFiniteDiff() (added ADTypes docs dep + import) in dynamical_systems.md.

  4. EnsembleProblem prob_func signature change. Now prob_func(prob, ctx) with ctx::EnsembleContext (index is ctx.sim_id), not prob_func(prob, i, repeat). Updated ode_simulation_performance.md, ensemble_simulations.md, noise_modelling_approaches.md, turing_ode_param_fitting.md.

  5. Solver precs keyword moved to LinearSolve. Rodas5P(linsolve = KrylovJL_GMRES(precs = ...)) with the new 2-arg precs(A, p) -> (Pl, Pr) signature, replacing the old 9-arg OrdinaryDiffEq form, in ode_simulation_performance.md.

  6. BifurcationKit rename. PeriodicOrbitOCollProblemCollocation in bifurcationkit_periodic_orbits.md.

  7. LBFGSB export ambiguity. Both Optim and OptimizationLBFGSB now export LBFGSB, giving UndefVarError ambiguity. Qualified as OptimizationLBFGSB.LBFGSB() in likelihood_profiler.md.

No tolerances were loosened and no blocks were skipped/disabled — every fix migrates the example to the current API.

Verification

On Julia 1.12 (the Documentation workflow's version), against the resolved docs environment, I ran each changed @example chain's load-bearing blocks end-to-end and confirmed they execute without error:

  • verbose = SciMLLogging.None() optimization loss loop (loss = 0.0 at the true parameters).
  • prob_func(prob, ctx) + EnsembleProblem solve (5 trajectories, all Success).
  • Rodas5P(autodiff = AutoFiniteDiff())lyapunovspectrum (largest exponent positive → chaotic, as the page states).
  • incompletelu(A, p) + KrylovJL_GMRES(precs = ...) + concrete_jac = true solve completes (sparse problem).
  • Full BifurcationKit periodic-orbit tutorial: bifurcationdiagramCollocation(50, 4)continuation(...) returns a valid Branch.
  • OptimizationLBFGSB.LBFGSB() resolves cleanly with both Optim and OptimizationLBFGSB loaded.

Please ignore until reviewed by @ChrisRackauckas.

The Documentation workflow on master fails in the `dynamical_systems_basins`
`@example` block of `docs/src/steady_state_functionality/dynamical_systems.md`,
where `basins_of_attraction` errors with:

    UndefVarError: `referenced_sciml_model` not defined in `Attractors`
    @ Attractors .../src/mapping/attractor_mapping.jl:220

This is a version-skew between two DynamicalSystems-ecosystem packages.
DynamicalSystemsBase renamed `referrenced_sciml_model` -> `referenced_sciml_model`
(fixing the misspelling). Attractors 1.37.0 (the version the docs env resolved to)
calls `DynamicalSystemsBase.referenced_sciml_model` directly with no fallback, so
when paired with a DynamicalSystemsBase that only had the renamed/old symbol it threw.

Attractors 1.38.2 added an `isdefined(DynamicalSystemsBase, :referenced_sciml_model)`
guard that works with both the old (`referrenced_sciml_model`) and new
(`referenced_sciml_model`) names. Add `Attractors` as a direct docs dependency with
a `1.38.2` compat floor so the docs environment can no longer resolve to the broken
`Attractors < 1.38.2`. The page already uses `AttractorsViaRecurrences`,
`basins_of_attraction`, and `heatmap_basins_attractors` directly, so making
Attractors an explicit dependency is natural.

Verified locally on Julia 1.12: the failing `@example` block runs successfully with
Attractors 1.38.4 (resolved under the new floor), producing the two expected
fixed-point attractors with no UndefVarError.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@isaacsas isaacsas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assuming docs build with this I approve.

@TorkelE

TorkelE commented Jun 20, 2026

Copy link
Copy Markdown
Member

Is this the one that was solved here?
JuliaDynamics/Attractors.jl#211

The Documentation `build` job had many `@example` blocks failing after the
latest SciML stack (OrdinaryDiffEq v2 / SciMLBase 3 / BifurcationKit 0.8 /
SciMLLogging 2) introduced breaking API changes. Adapt the doc code:

- `verbose = false` (Bool) is rejected by `solve` (DiffEqBase
  `_process_verbose_param`). Use `verbose = SciMLLogging.None()`; add
  `SciMLLogging` as a docs dependency and import it in the affected pages.
- `Rodas5P(autodiff = false)` (Bool) is rejected; use
  `autodiff = AutoFiniteDiff()` (add `ADTypes` docs dep + import).
- `EnsembleProblem` `prob_func` is now called as `prob_func(prob, ctx)`
  (where `ctx::EnsembleContext` exposes `ctx.sim_id`), not
  `prob_func(prob, i, repeat)`.
- The OrdinaryDiffEq solver-level `precs` keyword moved to the LinearSolve
  linsolve: `Rodas5P(linsolve = KrylovJL_GMRES(precs = ...))` with the new
  2-argument `precs(A, p) -> (Pl, Pr)` signature.
- BifurcationKit renamed `PeriodicOrbitOCollProblem` to `Collocation`.
- `LBFGSB` is now exported by both `Optim` and `OptimizationLBFGSB`, causing
  an ambiguity `UndefVarError`; qualify it as `OptimizationLBFGSB.LBFGSB()`.

Each changed block was verified locally on Julia 1.12 (the Documentation
workflow's version) by running it against the resolved docs environment.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title docs: floor Attractors at 1.38.2 to fix master doc build docs: fix master doc build (Attractors floor + latest SciML API adaption) Jun 20, 2026
@TorkelE

TorkelE commented Jun 20, 2026

Copy link
Copy Markdown
Member

This ais already handled in #1488, but I just need SciML/OrdinaryDiffEq.jl#3766 to be merged first.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants