Skip to content

QA: run_qa v1.6 form + ExplicitImports#156

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

QA: run_qa v1.6 form + ExplicitImports#156
ChrisRackauckas merged 3 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6-explicitimports

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

This PR should be ignored until reviewed by @ChrisRackauckas.

Brings this repo's QA group onto the SciMLTesting v1.6 run_qa form with ExplicitImports enabled, converting test/qa/qa.jl from hand-rolled per-check Aqua calls.

ExplicitImports findings (6 checks)

Check Result Action
no_implicit_imports broken 37 implicit names from heavy whole-module using (CUDA/Flux/Zygote/DiffEqBase-reexport/etc.); making them explicit is a deliberate refactor. ei_broken = (:no_implicit_imports,), tracked in #155 (auto-flags once resolved).
all_qualified_accesses_via_owners fixed AbstractODEAlgorithm / AbstractODEProblem were accessed via DiffEqBase.<name> but are owned by SciMLBase (DiffEqBase only reexports them). Switched the three subtype annotations in src/HighDimPDE.jl to SciMLBase.<name>.
all_qualified_accesses_are_public ignored 6 non-public names from other packages (SciMLBase: AbstractODEAlgorithm, AbstractODEProblem, AbstractSciMLProblem; Flux/Flux.Optimise: AbstractOptimiser, Optimise, params). Added to the check's ignore list with source pkg documented; these go public as the base libs add public/exports.
no_stale_explicit_imports pass
all_explicit_imports_via_owners pass
all_explicit_imports_are_public pass

Also: pre-existing Aqua stale_deps fix

Test was in the package [deps] but is never imported by src/ — a genuine stale dep (this failure reproduces on unmodified main with the old qa.jl too). Test is a test-only stdlib already present in [extras]/[targets].test; removed it from [deps].

Deps

  • SciMLTesting [compat] floor bumped to "1.6" in root and test/qa/Project.toml.
  • ExplicitImports stays transitive via SciMLTesting (not added directly). Aqua kept (ambiguities sub-check needs it as a direct dep). No JET (not used).

Local verification (Julia 1.11, released SciMLTesting 1.6.0)

Test Summary:     | Pass  Broken  Total     Time
Quality Assurance |   16       1     17  1m41.9s

0 Fail / 0 Error. The 1 Broken is the intended no_implicit_imports placeholder.

🤖 Generated with Claude Code

ChrisRackauckas and others added 2 commits June 25, 2026 06:06
Convert test/qa/qa.jl from hand-rolled per-check Aqua calls to the
SciMLTesting v1.6 run_qa form, enabling ExplicitImports (the six EI
checks) alongside the Aqua suite.

ExplicitImports findings:
- all_qualified_accesses_via_owners: FIXED. `AbstractODEAlgorithm` and
  `AbstractODEProblem` were accessed via `DiffEqBase.<name>` but are
  owned by SciMLBase (DiffEqBase only reexports them). Switched the
  three subtype annotations in src/HighDimPDE.jl to `SciMLBase.<name>`.
- all_qualified_accesses_are_public: IGNORED. Six names are non-public
  in their owner packages (SciMLBase: AbstractODEAlgorithm,
  AbstractODEProblem, AbstractSciMLProblem; Flux/Flux.Optimise:
  AbstractOptimiser, Optimise, params). Added to the check's `ignore`
  list with the source package documented per name; these go public as
  the base libs add `public`/exports.
- no_implicit_imports: BROKEN. 37 implicit names from heavy whole-module
  `using` of CUDA/Flux/Zygote/DiffEqBase(reexport)/etc.; making them
  explicit is a deliberate refactor, tracked in SciML#155. Marked
  ei_broken = (:no_implicit_imports,) (auto-flags once resolved).
- no_stale_explicit_imports, all_explicit_imports_via_owners,
  all_explicit_imports_are_public: PASS.

Also fixes a pre-existing Aqua stale_deps failure (reproduces on
unmodified main): `Test` was listed in the package `[deps]` but is
never imported by the source; it is a test-only stdlib already present
in `[extras]`/`[targets].test`. Removed it from `[deps]`.

Bumped SciMLTesting [compat] floor to "1.6" in both the root and
test/qa Project.toml.

Local QA group (Julia 1.11, released SciMLTesting 1.6.0): 16 Pass,
1 Broken (no_implicit_imports), 0 Fail, 0 Error.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLBase 3.24.0 declared AbstractODEAlgorithm, AbstractODEProblem and
AbstractSciMLProblem public, and SciMLTesting 1.7.0 runs the two public-API
ExplicitImports checks only on Julia >= 1.11. Drop those three SciMLBase
entries from all_qualified_accesses_are_public; verified on Julia 1.12 that
the check passes with only the three Flux internals (params, Optimise,
Flux.Optimise.AbstractOptimiser) remaining, which Flux has not declared public.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The QA (julia 1 = 1.12) lane is red on Aqua test_undefined_exports, which
flags du_cache/u_cache/user_cache. These are owned by SciMLBase, re-exported
by DiffEqBase, and re-exported again here via `@reexport using DiffEqBase`.
On Julia <=1.11 the binding resolves and Aqua passes; Julia 1.12's
binding-partition change makes the double-reexported names report
`isdefined == false`, so Aqua reports them as undefined exports. The names are
absent from src/ -- this is a 1.12-only artifact of the SciMLBase->DiffEqBase
reexport chain, fixable only upstream, and reproduces on unmodified main (the
old hand-rolled qa.jl already called Aqua.test_undefined_exports). Not
introduced by the run_qa conversion.

Mark it `aqua_broken = (:undefined_exports,)` (run_qa disables the sub-check in
Aqua.test_all and emits a tracked @test_broken) with a comment + issue ref so
the lane is green and the placeholder is removed once the upstream chain is
fixed. Tracked in SciML#157.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor Author

Fixed the red QA (julia 1) lane.

Root cause (verified locally, not introduced by this conversion): on Julia 1.12 Aqua test_undefined_exports flags du_cache/u_cache/user_cache. These are owned by SciMLBase, re-exported by DiffEqBase, then re-exported again here via @reexport using DiffEqBase. On Julia <=1.11 the binding resolves (isdefined == true, Aqua passes); Julia 1.12's binding-partition change makes the double-reexported names report isdefined == false, so they look like undefined exports. They are absent from src/ — purely a 1.12 artifact of the SciMLBase->DiffEqBase reexport chain.

Pre-existing: reproduces on unmodified main (scheduled run 28211297790, job 83573031987 — the old hand-rolled qa.jl already ran Aqua.test_undefined_exports). This conversion didn't introduce it; it actually fixed the stale_deps failure that main also had on that lane.

Fix: aqua_broken = (:undefined_exports,) with a comment + tracking issue #157. run_qa disables the sub-check in Aqua.test_all and emits a tracked @test_broken; remove the entry once the upstream reexport chain is fixed on 1.12.

Local verification (released SciMLTesting 1.7.0):

  • Julia 1.12.6 (the gated lane): Quality Assurance | 15 Pass, 2 Broken, 0 Fail, 0 Error (the 2 broken = undefined_exports + no_implicit_imports placeholder).
  • Julia 1.10: confirmed du_cache etc. resolve (Undefined exports: Symbol[]), i.e. the failure is genuinely 1.12-only.

Note: CI only schedules QA (julia 1); there is no QA (lts) lane (grouped-tests.yml@v1).

@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review July 3, 2026 00:36
@ChrisRackauckas ChrisRackauckas merged commit 3d35e5b into SciML:main Jul 3, 2026
10 of 17 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