Migrate QA to SciMLTesting 2.4 - #102
Closed
ChrisRackauckas-Claude wants to merge 1 commit into
Closed
Conversation
Moves both compatibility constraints to SciMLTesting 2.4 and cuts the QA exception list from ~30 entries to 5 by fixing the underlying accesses: - `timedepentdtmin` is owned by and public in DiffEqBase; it was reached through OrdinaryDiffEqCore at both call sites. - `Base.dotview` / `Base.broadcastable` / `Base.materialize!` now go through `Base.Broadcast`, where the first two are public. - `DiffEqBase.NAN_CHECK` on a scalar dt is `isnan`. - The controller-protocol names are public in the resolved OrdinaryDiffEqCore, so those entries were stale. The five that remain carry their reason inline. `Broadcasted` and `materialize!` have no public spelling in `Base.Broadcast`; `fix_dt_at_bounds!` and `handle_tstop!` are public only from the unreleased OrdinaryDiffEqCore 4.13, above the 4.4 compat floor; `failfactor_default` awaits SciML/OrdinaryDiffEq.jl#4111. `DiffEqBase.DEFAULT_VERBOSE` is not public but is defined as `DEVerbosity()`, and `DEVerbosity` is, so the default verbosity is spelled `DEVerbosity()`. This keeps the exact value -- `DEVerbosity(Minimal())` differs in five toggles. SciMLLogging becomes a direct dependency so `None()` comes from its owner. Documents the developer extension interface v1 and renders it, with a worked example, in the developer docs. `docs/make.jl` drops `warnonly` and enables doctests with `checkdocs = :exports`. Adds a mock solver extension to the test suite implementing that interface -- algorithm type, cache, `init_cache`, `_perform_step!` -- and a nested rollback testset. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
ChrisRackauckas-Claude
force-pushed
the
codex/scimltesting-24-operator-splitting
branch
from
August 4, 2026 09:40
d22655a to
6d995fb
Compare
Member
Author
|
Superseded by #108, which includes the SciMLTesting 2.4 QA migration without package-specific strict-QA exceptions and adds the direct developer-interface documentation work. |
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.
Ignore until reviewed by @ChrisRackauckas.
Migrates both compatibility constraints to SciMLTesting 2.4, cuts the QA exception list down to five documented entries by fixing the underlying accesses, documents the developer extension interface v1, and enables strict docs/doctests.
QA
The
run_qacall previously carried ~30 ignore entries. Most are gone because the access itself was corrected rather than listed:timedepentdtminis owned by and public inDiffEqBase; it was being reached throughOrdinaryDiffEqCore. Fixed at both call sites (src/utils.jl,src/integrator.jl).src/config_tree.jlreached the broadcast machinery throughBase.dotviewandbroadcastableare public inBase.Broadcast, so they are now accessed there.DiffEqBase.NAN_CHECKon a scalardtisisnan;SciMLBase.check_errorusesisnandirectly.stepsize_controller!,step_accept_controller!,increment_accept!,setup_controller_cache, …) are public in the resolved OrdinaryDiffEqCore, so their entries were stale.Five entries remain, each with the reason inline in
test/qa/qa.jl:Broadcasted,materialize!—Base.Broadcastmarksdotview,broadcastableandBroadcastStylepublic but not these two, and there is no alias for either.TreeOption's.=overload needs both.fix_dt_at_bounds!,handle_tstop!— public as of the unreleased OrdinaryDiffEqCore 4.13. The[compat]floor is 4.4 and the newest registered 4.x is 4.12, so the check still resolves a version without them.failfactor_default— Make failfactor_default and qmax_first_step_default public OrdinaryDiffEq.jl#4111 makes this public alongside the rest of the per-algorithm controller defaults (gamma_default,qmin_default, … are already public).Verbosity
DiffEqBase.DEFAULT_VERBOSEis not public, but it is defined asconst DEFAULT_VERBOSE = DEVerbosity()andDEVerbosityis public, soDiffEqBase.DEVerbosity()is used instead. This is the same value — notDEVerbosity(Minimal()), which differs in five toggles (dense_output_saveat,newton_convergence,mismatched_input_output_type,near_singular,state_dependent_delay) and would have been a silent behavior change.SciMLLoggingbecomes a direct dependency soNone()comes from its owner rather than throughDiffEqBase.Documentation
docs/make.jldropswarnonly = trueand turns ondoctest = truewithcheckdocs = :exports. Docstrings forOperatorSplittingProblem,GenericSplitFunction,LieTrotterGodunovandStrangMarchukgained argument sections, and the developer extension interface v1 (AbstractOperatorSplittingAlgorithm,AbstractOperatorSplittingCache,init_cache,_perform_step!, the synchronizer entry points) is now documented and rendered indocs/src/devdocs/index.md, including a workedReverseLieTrotterGodunovexample.Tests
test/operator_splitting_api.jlgains a mock solver extension implementing exactly that interface — algorithm type withinner_algs, concrete cache,init_cache,_perform_step!— sweeping the operators in reverse order. It asserts the cache type (so the mock really is the one stepping), a successful solve, and first-order convergence: measured errors overdt∈ {0.1, 0.05, 0.01, 0.005} are 2.019e-6, 1.019e-6, 2.053e-7, 1.027e-7.Note that reverse order does not give a different answer than
LieTrotterGodunovon the reference problem —trueAis a multiple of the identity, so the two operators commute and the sweep order cancels out exactly (the two agree to 5.6e-20). An assertion that the results differ would be testing floating-point noise, so there isn't one.A second testset covers nested rollback restoring child buffers.
Local verification
GROUP=Core Pkg.test()on Julia 1.12.6 — all groups pass (adaptivity70,alias_u013,backward35,config_tree140,consistency27,convergence90,failure_escalation20,operator_splitting_api1341,sync9)test/qa/qa.jlon Julia 1.12.6 (20/20) and 1.10.11 LTS (18/18)docs/make.jlunder the new strict settings — exit 0, no doctest or cross-reference failuressrc,test,docs🤖 Generated with Claude Code
https://claude.ai/code/session_015jcWBstA52cVLXo1L38ZPm