NEWS: before/after code example for StochasticDelayDiffEq → DelayDiffEq migration#3508
Closed
ChrisRackauckas-Claude wants to merge 3 commits intoSciML:masterfrom
Closed
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a concrete 2-block before/after code example to the
StochasticDelayDiffEq deprecatedsection ofNEWS.md, showing how to portto
The
SDDEProblemconstructor 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_fsalfirstlastpiracy 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