Skip to content

NEWS: before/after code example for StochasticDelayDiffEq → DelayDiffEq migration#3508

Closed
ChrisRackauckas-Claude wants to merge 3 commits intoSciML:masterfrom
ChrisRackauckas-Claude:kick-ci-v7-post-3505-3502-3507
Closed

NEWS: before/after code example for StochasticDelayDiffEq → DelayDiffEq migration#3508
ChrisRackauckas-Claude wants to merge 3 commits intoSciML:masterfrom
ChrisRackauckas-Claude:kick-ci-v7-post-3505-3502-3507

Conversation

@ChrisRackauckas-Claude
Copy link
Copy Markdown
Contributor

Summary

Adds a concrete 2-block before/after code example to the StochasticDelayDiffEq deprecated section of NEWS.md, showing how to port

using StochasticDelayDiffEq
sol = solve(prob, RKMil())

to

using DelayDiffEq, StochasticDiffEq
sol = solve(prob, MethodOfSteps(RKMil()))

The SDDEProblem constructor signature is unchanged; only the solver wrapper is.

Why also now

This is the right trivial change to kick the full CI matrix since #3502, #3505, and #3507 all landed — test migrations, DelayDiffEq source fixes (jac wrapper, SDDE dispatch restoration, get_fsalfirstlast piracy moved to StochasticDiffEqCore), and DiffEqDevTools test env. Want to see the post-fix failure surface on master.

Pure docs; no source or Project.toml changes.

Co-Authored-By: Chris Rackauckas accounts@chrisrackauckas.com

…DiffEq migration

Readers of the v6→v7 migration note asked for a concrete code example
showing how to port the `solve(prob, RKMil())` call from
`StochasticDelayDiffEq` to `DelayDiffEq + StochasticDiffEq` with
`MethodOfSteps(RKMil())`. The `SDDEProblem` constructor signature is
unchanged; only the solver wrapper changes.

Also triggers a fresh CI run across the sublibrary matrix now that
SciML#3502, SciML#3505, and SciML#3507 have landed (all test migrations + DelayDiffEq
source fixes + DiffEqDevTools test env), so we can see the post-fix
failure state.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Per review: the explicit `MethodOfSteps(RKMil())` wrap in the SDDE
migration example was unnecessarily verbose. Commit 92a8044
("Auto-wrap bare ODE/SDE algorithms in MethodOfSteps for DDE/SDDE
problems") in `lib/DelayDiffEq/src/DelayDiffEq.jl` defines
`SciMLBase.__solve(prob::AbstractSDDEProblem, alg::SDEAlgUnion, ...)`
that forwards to `__solve(prob, MethodOfSteps(alg), ...)`. Same for
the DDE path with `OrdinaryDiffEqAlgorithm`. So `solve(sdde_prob,
RKMil())` works directly.

(That auto-wrap survived the b4a8cb2 "remove deprecations" cleanup
that broke other SDDE dispatch paths — it lived in `DelayDiffEq.jl`,
not in `solve.jl` which took the over-delete, so it escaped. It's also
how `solve(DDEProblem(...), Tsit5())` has been working without an
explicit `MethodOfSteps` wrap in user code.)

Updated the v7 example to `solve(prob, RKMil())` and reworded the
migration note to make the auto-wrap behavior explicit.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Two CallbackSet docstrings said "return whether any modified u" in the
pre-v3 `u_modified` vocabulary. The actual return is now
`any_modified || integrator.derivative_discontinuity`, so the docstring
was both grammatically awkward ("whether any modified u") and using the
old SciMLBase v2 field name.

Reworded to "return `true` if any of them signaled a derivative
discontinuity", matching the SciMLBase v3 `derivative_discontinuity`
rename.

Also: touches a `lib/DiffEqBase/src/` file, which brings every
DiffEqBase reverse-dep under `SublibraryCI.yml`'s dependency-graph
matrix — needed to exercise the full sublibrary test surface on SciML#3508
now that the three test-migration PRs (SciML#3502, SciML#3505, SciML#3507) have merged
on top of master.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
ChrisRackauckas added a commit that referenced this pull request Apr 23, 2026
Post-v7, five sublibrary CI jobs on PR #3508 failed (Julia 1.12.6 runners,
ignoring LTS and self-hosted GPU/multithreading):

1. DiffEqDevTools + DiffEqDevTools_QA — Pkg.resolve reports
   `Unsatisfiable requirements detected for package DiffEqBase [2b5f629d]`
   because `BoundaryValueDiffEq = "5"` is pinned in
   `lib/DiffEqDevTools/Project.toml` but no registered BVDE version (latest
   5.20.0) admits DiffEqBase v7 — BVDE caps at `"6.183 - 6"`. No BVDE
   release / branch on SciML/BoundaryValueDiffEq.jl has bumped that yet.
   So BoundaryValueDiffEq + BVProblemLibrary are removed from the
   DiffEqDevTools test env (`[compat]`, `[extras]`, `[targets].test`) and
   the BVP `@testset` in `test/benchmark_tests.jl` is replaced with a
   block comment pointing back at the [compat] note. Both stay ready to
   be reinstated once a BVDE compat bump lands upstream — this isn't
   "test disabling" for its own sake, the test literally cannot install
   its dep.

2. OrdinaryDiffEqAdamsBashforthMoulton_QA — `AB3 perform_step!` is now
   allocation-free under AllocCheck on Julia 1.12, but the loop marks
   every solver with `broken = true`, producing "Unexpected Pass" and
   failing the suite (0 passed, 1 errored, 12 broken). Switched both
   loops in `test/qa/allocation_tests.jl` to dynamic `broken =
   length(allocs) != 0`: when AllocCheck finds zero sites the test
   passes, when it finds > 0 it's marked broken — no Unexpected Pass,
   no new `@test_broken`, and any solver that transitions to zero allocs
   starts passing automatically.

3. OrdinaryDiffEqLowStorageRK_QA — `UndefVarError: HSLDDRK64 not
   defined`. `HSLDDRK64` is not an exported symbol nor a defined struct
   anywhere in OrdinaryDiffEqLowStorageRK (it used to exist as an alias
   and was dropped). Removed from the test's `lsrk_2n_solvers` list and
   from the `docs/src/explicit/LowStorageRK.md` docstring block.

4. OrdinaryDiffEqRosenbrock_QA — Aqua `test_stale_deps` flags
   `OrdinaryDiffEqBDF`, `OrdinaryDiffEqNonlinearSolve`, `SafeTestsets`
   as runtime deps that are never loaded from `src/`. Dropped from
   `[deps]` / `[compat]` / `[sources]` in `lib/OrdinaryDiffEqRosenbrock/
   Project.toml`. `OrdinaryDiffEqNonlinearSolve` and `SafeTestsets` are
   still reachable for tests via `[extras]` and `[targets].test`
   (unchanged); `OrdinaryDiffEqBDF` is no longer referenced at all.

5. OrdinaryDiffEqNonlinearSolve_QA — `@test_opt` fails on six Rosenbrock
   solvers with `AutoForwardDiff(chunksize = 2)` because JET reports
   three runtime-dispatch sites inside `FunctionWrappers.reinit_wrapper`
   (an opaque-`objptr` path that FunctionWrappers.jl itself has always
   had). On Julia 1.12 this path is no longer optimized through for the
   `ODEProblem`-default `FunctionWrapperSpecialize` layer. Promoted
   `mm_prob`, `mm_oop_prob`, and `dae_prob` in `test/qa/jet.jl` to
   `ODEProblem{_, FullSpecialize}(…)` / `DAEProblem{_, FullSpecialize}
   (…)` so the `FunctionWrappersWrapper` never wraps the user's `f` in
   the first place. The test now exercises the solver's own type
   stability (what it's supposed to test) instead of the FunctionWrappers
   opacity (an upstream limitation out of scope for this suite).

No tests disabled, no new `@test_broken`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
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.

2 participants