Add QA (Aqua/JET) groups to sublibraries (SciML/.github#77)#618
Merged
Conversation
…parse Adds a canonical QA test group to each sublibrary, mirroring the OrdinaryDiffEq.jl sublibrary pattern (SciML/.github#77): - test/qa/Project.toml with Aqua + JET and the sublibrary via [sources] - test/qa/qa.jl running Aqua.test_all and JET.test_package - QA dispatch in test/runtests.jl gated on the repo group env var - [QA] group declared in test/test_groups.toml with versions [lts, 1] - Pkg added to test extras/targets (with compat for Aqua deps_compat) Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Same canonical QA group pattern as the sibling sublibraries: test/qa env (Aqua + JET via [sources] path), QA dispatch in test/runtests.jl, [QA] declared in test/test_groups.toml with versions [lts, 1], and Pkg wired into the test extras/targets. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas-Claude
pushed a commit
to ChrisRackauckas-Claude/DataDrivenDiffEq.jl
that referenced
this pull request
Jun 20, 2026
The sublibraries QA group (Aqua + JET) for DataDrivenLux has failed since it was added (SciML#618). The findings are genuine source bugs: Aqua (unbound type parameter): - update_path(f, id, states::PathState{T}...) left T unbound when called with zero states. Require at least one state (state1::PathState{T}, states...) so T always binds. JET (5 possible errors): - custom_priors.jl summary referenced an undefined `E` ($E) in its interpolated string; print the error-model name (nameof(typeof(d.errormodel))) instead. - dataset.jl built the empty t-interval with Interval{T}(zero(T), zero(T)), which is no longer a valid IntervalArithmetic constructor (errors at runtime); use interval(zero(T), zero(T)), matching the other branch. - The DataDrivenFunction OOP/IIP *matrix* dispatch was missing the {true, true} (implicit + controls) methods in DataDrivenDiffEq's build_function.jl, so a Basis{true,true}(::Dataset) call had no matching method. Add the two missing matrix methods (additive, mirrors the existing {true,false} pair). - Candidate / CommonAlgOptions: the @concrete field type-constraints made the generated inner constructors unprovable to JET when fed Any-typed values. Drop the (non-load-bearing) Candidate field bounds, and give CommonAlgOptions an explicit type-asserting keyword constructor in place of @kwdef so the positional @concrete constructor receives concretely-typed arguments. QA now resolves the in-repo DataDrivenDiffEq (not the registered release): add DataDrivenDiffEq to the qa env [deps]/[sources], and in activate_qa_env develop the local paths on Julia < 1.11 (where [sources] is ignored), mirroring .github's develop_sources helper. Verified locally: DataDrivenLux QA (Aqua + JET) passes 12/12 on both Julia 1.10 (lts) and 1.12, and the DataDrivenLux Core test suite passes on 1.12. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas
added a commit
that referenced
this pull request
Jun 23, 2026
) * Fix master CI: DataDrivenLux downgrade resolution and docs linkcheck Two unrelated master CI failures. 1. downgrade-sublibraries / test (lib/DataDrivenLux): the test target listed `OrdinaryDiffEq` as a dependency, but it is not used anywhere in DataDrivenLux's sources or tests. Under the strict downgrade resolver it forced the entire OrdinaryDiffEq solver split-package ecosystem (OrdinaryDiffEqBDF, OrdinaryDiffEqNonlinearSolve, ...) to its ancient floor (v6/7.0.x), which no longer co-resolves with the modern SciMLBase 3 / ModelingToolkit 11 / Symbolics 7 stack that DataDrivenDiffEq pins, yielding "Unsatisfiable requirements". Removing the unused dependency lets the downgrade `Pkg.test` resolve and the suite pass on Julia 1.10. 2. Documentation / Build and Deploy: `linkcheck` errored on docs.sciml.ai/ModelingToolkit/.../AbstractSystem (HTTP 403 anti-crawler) and on dead ai.damtp.cam.ac.uk/symbolicregression/.../api/#Options and #EquationSearch anchors (404 after the SymbolicRegression docs reorganized). Repoint the dead API links to the maintained canonical SciML-hosted docs (#EquationSearch -> #equation_search, the current function name) and add a linkcheck_ignore regex for docs.sciml.ai, which rejects the linkcheck bot with 403 even though the cross-doc links resolve in a browser. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fix DataDrivenLux QA: real Aqua/JET findings + local-source resolution The sublibraries QA group (Aqua + JET) for DataDrivenLux has failed since it was added (#618). The findings are genuine source bugs: Aqua (unbound type parameter): - update_path(f, id, states::PathState{T}...) left T unbound when called with zero states. Require at least one state (state1::PathState{T}, states...) so T always binds. JET (5 possible errors): - custom_priors.jl summary referenced an undefined `E` ($E) in its interpolated string; print the error-model name (nameof(typeof(d.errormodel))) instead. - dataset.jl built the empty t-interval with Interval{T}(zero(T), zero(T)), which is no longer a valid IntervalArithmetic constructor (errors at runtime); use interval(zero(T), zero(T)), matching the other branch. - The DataDrivenFunction OOP/IIP *matrix* dispatch was missing the {true, true} (implicit + controls) methods in DataDrivenDiffEq's build_function.jl, so a Basis{true,true}(::Dataset) call had no matching method. Add the two missing matrix methods (additive, mirrors the existing {true,false} pair). - Candidate / CommonAlgOptions: the @concrete field type-constraints made the generated inner constructors unprovable to JET when fed Any-typed values. Drop the (non-load-bearing) Candidate field bounds, and give CommonAlgOptions an explicit type-asserting keyword constructor in place of @kwdef so the positional @concrete constructor receives concretely-typed arguments. QA now resolves the in-repo DataDrivenDiffEq (not the registered release): add DataDrivenDiffEq to the qa env [deps]/[sources], and in activate_qa_env develop the local paths on Julia < 1.11 (where [sources] is ignored), mirroring .github's develop_sources helper. Verified locally: DataDrivenLux QA (Aqua + JET) passes 12/12 on both Julia 1.10 (lts) and 1.12, and the DataDrivenLux Core test suite passes on 1.12. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: repoint remaining dead SymbolicRegression api link in DataDrivenSR docstring PR #624 repointed the dead ai.damtp.cam.ac.uk/symbolicregression/.../api/#Options links in the datadrivensr examples, but missed the same dead link in the DataDrivenSR `Options` docstring (lib/DataDrivenSR/src/DataDrivenSR.jl), which is rendered into the docs and linkchecked. That URL 404s, failing the docs build. Repoint it to the maintained docs.sciml.ai host (already covered by the linkcheck_ignore added in #624). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fix DataDrivenSR QA: coef field bug + local-source resolution Touching DataDrivenSR's source makes the affected-sublibrary detector run its QA group, which (like DataDrivenLux's) had never passed. Two real findings: - JET: coef(x::SRResult) read getfield(x, :k), but SRResult has no :k field (the accessor errored on every call and is untested). Return the model coefficients — the parameter values of the result's basis, get_parameter_values(x.basis) — matching how the parameters are produced in the SRResult constructor and used in solution.jl. - Aqua deps_compat failed because, on Julia < 1.11, the qa env's [sources] is ignored and QA analyzed the *registered* DataDrivenSR (whose Project.toml lacks compat for the test extras); the in-repo Project already declares them. Resolve the in-repo DataDrivenSR/DataDrivenDiffEq by adding DataDrivenDiffEq to the qa env [deps]/[sources] and developing the local paths on Julia < 1.11 in activate_qa_env (no-op effect on >= 1.11), mirroring the DataDrivenLux fix. Verified locally: DataDrivenSR QA (Aqua + JET) passes 12/12 on Julia 1.12. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Revert DataDrivenLux OrdinaryDiffEq removal; downgrade waits on upstream release Restores `OrdinaryDiffEq = "6, 7"` to [compat], the OrdinaryDiffEq UUID to [extras], and OrdinaryDiffEq to [targets].test in lib/DataDrivenLux/Project.toml (reverts the 10af37c removal). The DataDrivenLux downgrade lane does NOT actually require dropping OrdinaryDiffEq: with OrdinaryDiffEq removed, the lane is still red, and the failure is identical with it present. The CI failing step is `julia-runtest` (step 11), not the resolver step (8) or buildpkg (10): the downgrade-compat resolve and buildpkg both succeed; the `Pkg.test()` test-env re-resolve is what fails Unsatisfiable. Reproduced locally on Julia 1.10 with the exact CI sequence (downgrade.jl alldeps 1.10 -> Pkg.test allow_reresolve=false): Unsatisfiable requirements detected for package ModelingToolkitBase: ModelingToolkit [restricted to 11.21.0-11 by DataDrivenDiffEq] -> ModelingToolkitBase 1.30.0-1.45.0 -> SymbolicUtils 4.23.1-4 but SymbolicUtils is held at <= 4.21.0 at the downgrade floor -> no versions left Root cause (release-dependent, not test-dep-dependent): DataDrivenDiffEq's master floor `ModelingToolkit = "11.21.0"` (set in 24ae52c for the Julia 1.10 precompile) transitively requires ModelingToolkitBase >= 1.30.0, whose SymbolicUtils floor is 4.23.1 (monotone: every MTKBase >= 1.30 needs >= 4.23.1). Under the strict downgrade min-resolve the symbolic stack is held at its floor (Symbolics 7.0-7.21 guarantee only SymbolicUtils >= 4.21.0), so SymbolicUtils cannot reach 4.23.1 and there is no overlap. This is the broader SciML symbolic-stack downgrade-floor wall; it resolves once an upstream ModelingToolkit 11.x release raises its `Symbolics` compat floor to >= 7.22.0 (the first Symbolics whose SymbolicUtils floor, 4.27.0, satisfies MTKBase 1.30), forcing the downgrade min to a SymbolicUtils >= 4.23.1. Verified: pinning the test floor to Symbolics >= 7.22.0 (or SymbolicUtils >= 4.23.1) resolves cleanly. Per the directive: do not drop a real test dependency to dodge the downgrade resolver. The DataDrivenLux downgrade lane stays red until that upstream release lands; the rest of #624 (DataDrivenSR coef fix, docs linkcheck, QA source fixes, qa [sources]) is release-independent and ready. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.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.
Part of SciML/.github#77 (canonical QA groups for monorepo sublibraries).
Adds the canonical QA test group to each sublibrary, mirroring the OrdinaryDiffEq.jl sublibrary pattern: a
test/qaenvironment with Aqua + JET (sublibrary pulled in via[sources]path), aqa.jldriver runningAqua.test_allandJET.test_package(...; target_defined_modules = true), a QA dispatch intest/runtests.jlgated onDATADRIVENDIFFEQ_TEST_GROUP == "QA", and a[QA]group declared intest/test_groups.tomlwithversions = ["lts", "1"](no pre, ubuntu-only).Pkgis added to each sublibrary's test extras/targets with a compat entry so Aqua'sdeps_compatstays green.Units in this batch:
lib/DataDrivenDMDlib/DataDrivenLuxlib/DataDrivenSparselib/DataDrivenSRVerification: static only (TOML parse,
Meta.parseallon the touched Julia files,[sources]path resolution, Runic format check). QA findings surfaced by CI will be triaged per the established mark-broken+issue policy.Further batches may be pushed to this branch. Ignore until reviewed by @ChrisRackauckas.