QA: run_qa v1.6 form + ExplicitImports#580
Merged
ChrisRackauckas merged 4 commits intoJul 3, 2026
Merged
Conversation
Convert the hand-rolled test/qa/qa.jl (manual Aqua sub-checks + JET @test_broken markers) to the SciMLTesting 1.6 run_qa form with ExplicitImports enabled. - run_qa(MethodOfLines; explicit_imports = true, ...) replaces the manual Aqua.test_* / JET @test_broken body. - Aqua: the five genuine findings from SciML#574 (ambiguities, undefined_exports, stale_deps, deps_compat, piracies) are preserved as aqua_broken; the passing sub-checks run via Aqua.test_all. - JET: the 10 errors previously tracked in SciML#574 no longer reproduce on the current ModelingToolkit 11 / SciMLBase 3 stack (report_package returns no reports), so JET.test_package now runs as a hard check (un-broken). - ExplicitImports: - no_stale_explicit_imports: FIXED by removing 9 genuinely-unused explicit imports (variable, parameters, varmap_to_vars, setname, rename, cardinalize_eqs!, make_pdesys_compatible, parse_bcs, generate_system). - no_implicit_imports: ~80 names reach the module via heavy `using <BigDep>`; making them explicit is a large risky refactor, kept ei_broken pending SciML#574. - the owners / public checks pass with per-check ignore-lists for other packages' non-public / re-exported names (PDEBase, Symbolics, ModelingToolkit(Base), SciMLBase, IfElse, RuntimeGeneratedFunctions, Base). test/qa/Project.toml: SciMLTesting compat -> "1.6"; drop Aqua/SafeTestsets/Pkg (Aqua/ExplicitImports come transitively via SciMLTesting, and the ambiguities sub-check that needs Aqua as a direct dep is disabled here). Verified locally on Julia 1.10 against released SciMLTesting 1.6.0: QA group 9 Pass, 6 Broken, 0 Fail, 0 Error. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The v1.6 conversion un-broke JET on the basis that report_package returned no reports, but that was observed on Julia 1.10. On the CI `julia 1` lane (1.11/1.12) JET still finds the same possible errors tracked in SciML#574: DiscreteSpace getproperty `.time`/`.ps` FieldErrors reached via ivs/params, `MethodOfLines.otherderivmaps` not defined, and a possibly-undefined `f_analytic` in MOL_discretization.jl. Restore jet_broken = true so the check is report-only (it auto-flags an Unexpected Pass once JET is clean), matching the original test/qa/qa.jl `@test_broken` for JET. Verified locally on Julia 1.12 against released SciMLTesting 1.6.0 (JET 0.11.5, ModelingToolkit 11.28, SciMLBase 3.22): QA group 8 Pass, 7 Broken, 0 Fail, 0 Error (was 8 Pass, 1 Fail, 6 Broken). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eased base libs)
SciMLTesting 1.7.0 now runs check_all_qualified_accesses_are_public /
check_all_explicit_imports_are_public only on Julia >= 1.11 (skipped on lts),
and the base libs have made many former internals public (SciMLBase 3.24.0,
Symbolics 7.29.0, SymbolicUtils 4.36.0, ModelingToolkit 11.29.0,
ArrayInterface 7.26.0, CommonSolve 0.2.9). The two public-API ignore-lists in
the QA call are therefore largely redundant.
Removed 11 now-public entries (verified on Julia 1.12 against the registered
releases; the names below are no longer flagged):
all_explicit_imports_are_public: unwrap (Symbolics);
get_bcs/get_dvs/get_eqs/get_ivs/get_unknowns
(ModelingToolkit, now handled via_owners)
all_qualified_accesses_are_public: @propagate_inbounds, OneTo (Base);
init (RuntimeGeneratedFunctions);
unwrap, variable (Symbolics)
Kept only the names the public checks still flag as non-public on Julia 1.12:
PDEBase internals (not yet made public), SciMLBase
AbstractDiscretizationMetadata/AbstractODESolution/AbstractPDESolution/PDESolution/observed,
Base AbstractCartesianIndex, ModelingToolkit ProblemTypeCtx, IfElse ifelse,
Symbolics diff2term.
via_owners ignores, aqua_broken, jet_broken, and ei_broken (no_implicit_imports)
are unchanged. Verified: Julia 1.12 QA group = 8 pass / 7 broken / 0 error;
Julia 1.10 (lts) unchanged by this edit (the two public-API checks are skipped
there by SciMLTesting 1.7).
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Verified the public-API ExplicitImports ignore-lists against the now-released SciMLBase 3.27.0 / DiffEqBase 7.6.0 / SciMLTesting 1.7.0 / Symbolics 7.29.0 / SymbolicUtils 4.36.0 / ModelingToolkit 11.29.0 / PDEBase 0.1.26 (Julia 1.12, no dev). Every name still flagged by the public checks is genuinely non-public in its owner package (confirmed via Base.ispublic and the EI checks run with the lists emptied): SciMLBase AbstractDiscretizationMetadata/AbstractODESolution/ AbstractPDESolution/PDESolution/observed are NOT among the 3.27.0 made-public names, so they stay; likewise the PDEBase internals, IfElse.ifelse, Symbolics.diff2term, ModelingToolkit.ProblemTypeCtx, Base.AbstractCartesianIndex. No DiffEqBase.X -> SciMLBase.X caller migration applies (the source uses whole-module `using` and `SciMLBase.X` qualified accesses already; no DiffEqBase-qualified SciMLBase-owned names exist). The two *_are_public lists are therefore already at their minimal/correct state. Bump test/qa SciMLTesting floor 1.6 -> 1.7 to guarantee the >=1.11 public-API gating (1.6 lacks it; resolving it on the LTS lane would run the public checks on 1.10 and fail). Gate jet_broken to VERSION >= v"1.11": JET (0.9.18) is clean on the LTS (1.10) lane, so `jet_broken = true` produced an Unexpected Pass hard error on QA(lts); JET still reports on 1.11/1.12 where it stays broken. JET now runs as a real passing test on 1.10. Not a silencing: it un-broken-marks JET where it is clean. Verified: QA group EXIT=0 on Julia 1.12 (8 pass, 7 broken, public checks RUN) and Julia 1.10 (7 pass, 6 broken, public checks gated off), 0 hard FAIL on both. Co-Authored-By: Chris Rackauckas <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.
Ignore until reviewed by @ChrisRackauckas.
Converts
test/qa/qa.jlfrom the hand-rolled Aqua/JET body to the SciMLTesting 1.6run_qaform with ExplicitImports enabled.run_qa v1.6 form
run_qa(MethodOfLines; explicit_imports = true, ...)replaces the manualAqua.test_*calls and JET@test_brokenplaceholders.aqua_broken = (:ambiguities, :undefined_exports, :stale_deps, :deps_compat, :piracies)(each emits a tracked@test_brokenplaceholder); the passing sub-checks (unbound_args, project_extras, persistent_tasks, julia compat) run viaAqua.test_all.otherderivmaps, staggered_discretize) no longer reproduce on the current ModelingToolkit 11 / SciMLBase 3 stack —JET.report_packagereturns no reports — soJET.test_packagenow runs as a hard check (the@test_brokenwas un-broken).ExplicitImports findings
no_stale_explicit_imports— FIXED. Removed 9 genuinely-unused explicit imports fromsrc/MethodOfLines.jl:variable,parameters,varmap_to_vars(ModelingToolkit),setname,rename(Symbolics),cardinalize_eqs!,make_pdesys_compatible,parse_bcs,generate_system(PDEBase). Verified none are bare-used, method-extended, or re-exported.no_implicit_imports—ei_broken(tracked QA: Aqua/JET findings marked @test_broken pending fix #574). ~80 names reach the module through heavyusing <BigDep>(SciMLBase, DiffEqBase, ModelingToolkit, Symbolics, SymbolicUtils, PDEBase, DomainSets, Interpolations, ...). Making them all explicit is a large, risky refactor, so it stays@test_brokenpending the tracking issue.ei_kwargsignore-lists. Each ignore is for another package's non-public or re-exported name (PDEBase, Symbolics, ModelingToolkit(Base), SciMLBase, IfElse, RuntimeGeneratedFunctions, Base); they go clean once those packages export/declare-public the names. Each ignore is grouped by source package in a comment.Deps
test/qa/Project.toml:SciMLTestingcompat →"1.6"; droppedAqua,SafeTestsets,Pkg(Aqua + ExplicitImports come transitively via SciMLTesting, and the only Aqua sub-check needing Aqua as a direct dep —ambiguities— is disabled here).Verification
Ran the QA group locally on Julia 1.10 via
GROUP=QA Pkg.test, resolving the released SciMLTesting 1.6.0 (no dev-from-branch):9 Pass (3 Aqua + JET + 5 EI), 6 Broken (5 aqua_broken + 1 ei no_implicit_imports), 0 Fail, 0 Error.
🤖 Generated with Claude Code