Skip to content

QA: run_qa v1.6 form + ExplicitImports#580

Merged
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6
Jul 3, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports#580
ChrisRackauckas merged 4 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Ignore until reviewed by @ChrisRackauckas.

Converts test/qa/qa.jl from the hand-rolled Aqua/JET body to the SciMLTesting 1.6 run_qa form with ExplicitImports enabled.

run_qa v1.6 form

  • run_qa(MethodOfLines; explicit_imports = true, ...) replaces the manual Aqua.test_* calls and JET @test_broken placeholders.
  • Aqua: the five genuine findings tracked in QA: Aqua/JET findings marked @test_broken pending fix #574 are preserved via aqua_broken = (:ambiguities, :undefined_exports, :stale_deps, :deps_compat, :piracies) (each emits a tracked @test_broken placeholder); the passing sub-checks (unbound_args, project_extras, persistent_tasks, julia compat) run via Aqua.test_all.
  • JET: the 10 errors previously tracked in QA: Aqua/JET findings marked @test_broken pending fix #574 (DiscreteSpace fields, otherderivmaps, staggered_discretize) no longer reproduce on the current ModelingToolkit 11 / SciMLBase 3 stack — JET.report_package returns no reports — so JET.test_package now runs as a hard check (the @test_broken was un-broken).

ExplicitImports findings

  • no_stale_explicit_imports — FIXED. Removed 9 genuinely-unused explicit imports from src/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_importsei_broken (tracked QA: Aqua/JET findings marked @test_broken pending fix #574). ~80 names reach the module through heavy using <BigDep> (SciMLBase, DiffEqBase, ModelingToolkit, Symbolics, SymbolicUtils, PDEBase, DomainSets, Interpolations, ...). Making them all explicit is a large, risky refactor, so it stays @test_broken pending the tracking issue.
  • owners / public checks — pass via ei_kwargs ignore-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: SciMLTesting compat → "1.6"; dropped Aqua, 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):

Test Summary: | Pass  Broken  Total     Time
QA            |    9       6     15  3m05.5s
     Testing MethodOfLines tests passed

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

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>
ChrisRackauckas and others added 3 commits June 25, 2026 10:54
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>
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review June 29, 2026 09:51
@ChrisRackauckas ChrisRackauckas merged commit 590b350 into SciML:master Jul 3, 2026
14 of 65 checks passed
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