From c63cf1aa3cd50287220f884ea486d45430738024 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Fri, 19 Jun 2026 05:13:10 -0400 Subject: [PATCH 1/3] Fix docs Euler import (OrdinaryDiffEq v7 split) and raise OrdinaryDiffEqBDF downgrade floor Two master-CI failures, two independent fixes: Documentation build (UndefVarError: `Euler` not defined): OrdinaryDiffEq v7 split out the low-order RK solvers and no longer re-exports `Euler` from the umbrella (verified: with OrdinaryDiffEq v7.0.1, isdefined(OrdinaryDiffEq, :Euler) == false; `Euler` now lives in OrdinaryDiffEqLowOrderRK). The docs examples in integrating.md and uncertainty_quantification.md call `Euler()` with only `using OrdinaryDiffEq`, so the @example blocks errored. Add OrdinaryDiffEqLowOrderRK to docs/Project.toml and `using` it in both pages. Higher-order solvers (Tsit5, Rodas5P, Rosenbrock23, Vern7) are still re-exported by the umbrella and need no change. Downgrade (Core) (MethodError: no method matching _initialize_dae! for the NonlinearSolve-backed BrownFullBasicInit in saving_tests.jl's "fail gracefully" DAE test): the `_initialize_dae!(..., BrownFullBasicInit{..., GeneralizedFirstOrderAlgorithm})` dispatch is implemented in OrdinaryDiffEqBDF and first appears in v1.7.0. The previous compat floor "1.3.0" let the downgrade resolve OrdinaryDiffEqBDF v1.3.0, which lacks the method, so the test errored instead of returning ReturnCode.InitialFailure. Bisected locally on Julia 1.10: BDF 1.6.0 errors, BDF 1.7.0 passes; raise the floor to 1.7.0 (a lower-bound raise is downgrade-safe and the repo already allows BDF v2). Verified locally on Julia 1.10 that the fail-gracefully test returns InitialFailure with the bumped floor, and on Julia 1.12 that the integrating.md example runs with the docs env. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 4 ++-- docs/Project.toml | 2 ++ docs/src/integrating.md | 2 +- docs/src/uncertainty_quantification.md | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index a27bd762..b0fe7742 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "DiffEqCallbacks" uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def" -version = "4.18.0" +version = "4.18.1" authors = ["Chris Rackauckas "] [deps] @@ -36,7 +36,7 @@ LinearAlgebra = "1.10" Markdown = "1.10" NonlinearSolve = "3.14, 4" ODEProblemLibrary = "1.0.0" -OrdinaryDiffEqBDF = "1.3.0, 2" +OrdinaryDiffEqBDF = "1.7.0, 2" OrdinaryDiffEqLowOrderRK = "1.2.0, 2" OrdinaryDiffEqNonlinearSolve = "1.5.0, 2" OrdinaryDiffEqRosenbrock = "1.8.0, 2" diff --git a/docs/Project.toml b/docs/Project.toml index 44422195..5a9c1d3d 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -5,6 +5,7 @@ Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +OrdinaryDiffEqLowOrderRK = "1344f307-1e59-4825-a18e-ace9aa3fa4c6" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" [compat] @@ -13,4 +14,5 @@ DiffEqCallbacks = "4" Documenter = "1" NonlinearSolve = "3, 4" OrdinaryDiffEq = "6.88, 7" +OrdinaryDiffEqLowOrderRK = "1.2.0, 2" Plots = "1.36" diff --git a/docs/src/integrating.md b/docs/src/integrating.md index 27b3d905..206ac9c5 100644 --- a/docs/src/integrating.md +++ b/docs/src/integrating.md @@ -45,7 +45,7 @@ IntegratingGKSumCallback ## Example ```@example integrating -using OrdinaryDiffEq, DiffEqCallbacks, Test +using OrdinaryDiffEq, OrdinaryDiffEqLowOrderRK, DiffEqCallbacks, Test prob = ODEProblem((u, p, t) -> [1.0], [0.0], (0.0, 1.0)) integrated = IntegrandValues(Float64, Vector{Float64}) sol = solve(prob, Euler(), diff --git a/docs/src/uncertainty_quantification.md b/docs/src/uncertainty_quantification.md index d77abf03..cf55d611 100644 --- a/docs/src/uncertainty_quantification.md +++ b/docs/src/uncertainty_quantification.md @@ -14,7 +14,7 @@ In this example we will determine our uncertainty when solving the FitzHugh-Nagu model with the `Euler()` method. We define the FitzHugh-Nagumo model: ```@example probnum -using DiffEqCallbacks, OrdinaryDiffEq, Plots +using DiffEqCallbacks, OrdinaryDiffEq, OrdinaryDiffEqLowOrderRK, Plots gr(fmt = :png) function fitz(du, u, p, t) From 8f946b1b8445736e7cfdf7afc8255c9f4443f75f Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 20 Jun 2026 07:51:57 -0400 Subject: [PATCH 2/3] Raise DiffEqBase downgrade floor to 6.211.0 (fixes Downgrade Core) The strict Downgrade (Core) job still failed after the OrdinaryDiffEqBDF floor bump: the "fail gracefully" DAE test in saving_tests.jl errored with a MethodError for _initialize_dae!(..., BrownFullBasicInit{..., GeneralizedFirstOrderAlgorithm}, ::Val{false}) even with OrdinaryDiffEqBDF v1.8.0 resolved -- so the BDF floor was not the real cause. Root cause (reproduced locally on Julia 1.10 with the CI-resolved downgrade stack): DiffEqBase v6.190.2's DiffEqBaseChainRulesCoreExt defines ChainRulesCore.rrule(::typeof(numargs), f), and SciMLBase v2.146.0's SciMLBaseChainRulesCoreExt defines the same rrule for SciMLBase.numargs. With both floors resolved together the duplicate definition raises "Method overwriting is not permitted during Module precompilation" while loading DiffEqBaseChainRulesCoreExt, which fails the extension and cascades so the OrdinaryDiffEqNonlinearSolve _initialize_dae! methods for BrownFullBasicInit are never available -- hence the MethodError (the listed candidates were only the OrdinaryDiffEqCore CheckInit/OverrideInit/NoInit methods). DiffEqBase removed rrule(numargs) from its ext in v6.211.0 (verified: present in 6.210.0, absent from 6.211.0; SciMLBase owns it now). Raising the floor to 6.211.0 drops the version range that double-defines it; SciMLBase 2.146.0 still provides the rrule, so nothing is lost. A lower-bound raise is downgrade-safe. Verified locally on Julia 1.10: with DiffEqBase pinned to 6.211.0 against the CI downgrade stack (SciMLBase 2.146.0, OrdinaryDiffEqBDF 1.8.0, OrdinaryDiffEqNonlinearSolve 1.12.0, NonlinearSolveFirstOrder 1.9.0) the stack precompiles with no method-overwriting error and the "fail gracefully" testset passes 4/4 (sol.retcode == ReturnCode.InitialFailure). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index b0fe7742..ff6e1b8f 100644 --- a/Project.toml +++ b/Project.toml @@ -28,7 +28,7 @@ Aqua = "0.8" ConcreteStructs = "0.2.3" DataInterpolations = "5, 6, 7, 8" DataStructures = "0.18.13, 0.19.0" -DiffEqBase = "6.190.2, 7" +DiffEqBase = "6.211.0, 7" DifferentiationInterface = "0.7.3" ForwardDiff = "0.10.36" Functors = "0.5" From b1ff7887cfea78d87b6f89cd3519c9af4455b28d Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Mon, 22 Jun 2026 21:21:37 -0400 Subject: [PATCH 3/3] test_groups: exclude AD and QA from the "All" aggregate (in_all=false) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The AD group (SciMLSensitivity/Zygote/Enzyme) was folded into "All", so the secondary-OS/aggregate legs globbed test/AD/ and failed on windows-latest (Enzyme is unreliable off Linux): AD/integrating_sensitivity_tests.jl errored, sinking the Core (windows) job. Mark [AD] in_all=false so it runs only as its own Linux, non-prerelease group; mark [QA] in_all=false explicitly (QA is always its own lane). All coverage is preserved — AD/QA still run as named groups. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/test_groups.toml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test_groups.toml b/test/test_groups.toml index e25a68a7..a16f411f 100644 --- a/test/test_groups.toml +++ b/test/test_groups.toml @@ -2,10 +2,15 @@ versions = ["1", "lts", "pre"] os = ["ubuntu-latest", "macos-latest", "windows-latest"] +# QA is its own CI lane, never part of the "All" aggregate. [QA] versions = ["lts", "1"] +in_all = false -# SciMLSensitivity/Zygote/Tracker-backed AD tests. The AD stack does not -# support prerelease Julia; deps live in test/AD/Project.toml. +# SciMLSensitivity/Zygote/Tracker-backed AD tests. The AD stack does not support +# prerelease Julia and is unreliable off Linux (e.g. Enzyme on windows), so the AD +# group runs on its own (Linux, non-prerelease) and is excluded from "All" — otherwise +# the All/secondary-OS legs glob test/AD/ and fail on Windows. Deps: test/AD/Project.toml. [AD] versions = ["lts", "1"] +in_all = false