Skip to content

QA: run_qa v1.6 form + ExplicitImports - #160

Merged
ChrisRackauckas merged 6 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa/run_qa-v1.6-explicit-imports
Jul 3, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports#160
ChrisRackauckas merged 6 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa/run_qa-v1.6-explicit-imports

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member

Please ignore until reviewed by @ChrisRackauckas.

Brings this repo's QA group onto the SciMLTesting 1.6 run_qa form with ExplicitImports enabled. Replaces the hand-rolled test/qa/qa_tests.jl (Aqua subset) and test/qa/explicit_imports_tests.jl (2 EI checks) with a single test/qa/qa.jl calling run_qa(ModelOrderReduction; explicit_imports = true, ...).

Aqua

run_qa runs the full Aqua.test_all (11 sub-checks) — superset of the previous hand-rolled subset. All pass; no aqua_broken markers or aqua_kwargs tweaks needed. (The old file's commented-out find_persistent_tasks_deps and treat_as_own = [] were no-ops; test_all runs persistent_tasks and piracies and both pass.)

ExplicitImports (newly enabled, all 6 checks)

  • no_implicit_imports — pass
  • no_stale_explicit_imports — pass
  • all_explicit_imports_via_owners — pass
  • all_explicit_imports_are_public — pass
  • all_qualified_accesses_via_ownersignore-list (10 names): third-party symbolic-stack names accessed via a re-exporter, owner differs. get_eqs/get_initial_conditions/get_iv/get_observed/get_unknowns/get_var_to_name/topsort_equations (owner ModelingToolkitBase, via ModelingToolkit); scalarize/unwrap (owner SymbolicUtils, via Symbolics); getname (owner SymbolicIndexingInterface, via Symbolics).
  • all_qualified_accesses_are_publicignore-list (14 names): third-party non-public internal API. Same MTK names as above plus getname/scalarize/unwrap/rhss/value (Symbolics) and isadd/ismul (SymbolicUtils).

These are internal symbolic-stack names ModelingToolkit/Symbolics re-export but neither own nor mark public; ModelOrderReduction uses them as internal API. Each ignore is documented with its source package in qa.jl. They will fall away as the base libs mark them public.

JET

jet = false in run_qa. Whole-package JET (report_package/test_package) hits a toplevel invalid redefinition of constant ModelOrderReduction.TSVD: the package exports a TSVD struct whose name collides with the TSVD dependency package under JET's toplevel virtualizer (a structural collision, not a type-stability issue; fixing it would mean renaming a public export). JET coverage stays in the existing targeted report_call checks in test/qa/jet_tests.jl, which sidestep the toplevel re-eval and pass (5/5). JET remains a direct dep for that file.

Deps (test/qa/Project.toml)

  • Drop ExplicitImports (transitive via SciMLTesting).
  • Keep Aqua (the ambiguities child-process needs it as a direct dep) and JET (used by jet_tests.jl).
  • Bump SciMLTesting compat to "1.6".

Local verification (released SciMLTesting 1.6.0, Julia 1.10, GROUP=QA)

QA/jet_tests.jl | Pass: 5  Total: 5
QA/qa.jl        | Pass: 17 Total: 17   (Aqua 11 + ExplicitImports 6)

0 Fail / 0 Error / 0 Broken. Runic-clean.

🤖 Generated with Claude Code

ChrisRackauckas and others added 2 commits June 25, 2026 08:07
Replace the hand-rolled Aqua + ExplicitImports QA files (qa_tests.jl,
explicit_imports_tests.jl) with a single qa.jl on the SciMLTesting 1.6
`run_qa` form, with ExplicitImports enabled (all six checks).

- Aqua: `run_qa` runs the full `Aqua.test_all` (11 checks); no broken
  markers or aqua_kwargs tweaks needed — all pass.
- ExplicitImports: `explicit_imports = true`. Two checks needed ignore
  lists for third-party symbolic-stack internal names re-exported but not
  owned/public by ModelingToolkit/Symbolics (documented per source pkg);
  the other four checks pass unmodified.
- JET: `jet = false` in run_qa. Whole-package JET hits a toplevel
  `invalid redefinition of constant ModelOrderReduction.TSVD` (the exported
  `TSVD` struct collides with the `TSVD` dependency package under JET's
  toplevel virtualizer). The existing targeted `report_call` checks in
  jet_tests.jl provide the JET coverage and stay as a separate group file.

test/qa/Project.toml: drop ExplicitImports (transitive via SciMLTesting),
keep Aqua (ambiguities child-proc needs it direct) and JET (jet_tests.jl),
bump SciMLTesting compat to "1.6".

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`Symbolics.rhss` is an undocumented one-line internal helper
(`rhss(xs) = map(x->x.rhs, xs)`, not exported). Replace the single use in
deim.jl with the equivalent comprehension and drop its ExplicitImports
non-public allow-list entry, so we don't depend on a Symbolics internal.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas and others added 2 commits June 26, 2026 16:28
SciMLTesting 1.7 runs the two public-API ExplicitImports checks
(check_all_qualified_accesses_are_public / check_all_explicit_imports_are_public)
only on Julia >= 1.11, and the base-lib make-public releases (ModelingToolkit
11.29, Symbolics 7.28+, SymbolicUtils 4.36, SciMLBase 3.24) marked most of the
previously-ignored names public.

Verified against registered releases on Julia 1.12: of the 13
all_qualified_accesses_are_public ignores, only :topsort_equations (still
non-public in ModelingToolkit) and :getname (re-exported by Symbolics from
SymbolicIndexingInterface, non-public) remain flagged. The other 11 are now
public and removed. QA group passes 17/17 on 1.12 and 15/15 on 1.10 (public
checks skipped on the LTS). The all_qualified_accesses_via_owners list is a
distinct (non public-API) check and is left untouched.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLTesting 1.7 gates the two public-API ExplicitImports checks
(check_all_qualified_accesses_are_public / check_all_explicit_imports_are_public)
to Julia >= 1.11, which is the regime in which the stripped public-API
ignore lists are correct. Raising the floor from "1.6" to "1.7" ensures
CI resolves a SciMLTesting that runs those checks rather than potentially
an older release.

Verified against the registered releases (SciMLBase 3.27.0, DiffEqBase 7.6.0,
ModelingToolkit 11.29.0, Symbolics 7.29.0, SymbolicUtils 4.36.0,
SciMLTesting 1.7.0, ExplicitImports 1.15.0):

- Julia 1.12 (public-API checks run): emptying both public-API ignore lists
  leaves exactly two survivors flagged by all_qualified_accesses_are_public --
  topsort_equations (non-public in ModelingToolkit) and getname (re-exported
  by Symbolics from SymbolicIndexingInterface, non-public). Neither is a
  SciMLBase-owned name, so no DiffEqBase.X -> SciMLBase.X migration applies;
  both are restored. all_explicit_imports_are_public passes with an empty
  ignore list. QA group: 17/17 pass.
- Julia 1.10 (public-API checks skipped on the LTS): QA group 15/15 pass.

ModelOrderReduction's source makes no qualified SciMLBase/DiffEqBase accesses,
so steps 2 (caller-migrate) is a no-op for this package.

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 27, 2026 20:59
… ignores

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…non-public re-exports)

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas
ChrisRackauckas merged commit b2b999f into SciML:main Jul 3, 2026
10 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