Skip to content

QA: run_qa v1.6 form + ExplicitImports#219

Merged
ChrisRackauckas merged 4 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run-qa-v16-explicit-imports
Jul 2, 2026
Merged

QA: run_qa v1.6 form + ExplicitImports#219
ChrisRackauckas merged 4 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-run-qa-v16-explicit-imports

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Brings this repo's QA onto the SciMLTesting 1.6 run_qa form with ExplicitImports enabled (explicit_imports = true).

What changed

  • test/qa/qa.jl — replaces the hand-rolled Aqua + ExplicitImports body with a single run_qa(DeepEquilibriumNetworks; explicit_imports = true, ...). The Doctests testset is kept verbatim (run_qa does not cover doctests).
    • Aqua: the old Aqua.test_all(...; ambiguities = false) + separate Aqua.test_ambiguities(...; recursive = false) is preserved as aqua_kwargs = (; ambiguities = (; recursive = false)) (no recursive sweep into deps; only the package's own methods).
  • test/qa/Project.toml — drops ExplicitImports (now transitive via SciMLTesting) plus the now-unused SafeTestsets and SciMLSensitivity; keeps Aqua (the ambiguities child-process check needs Aqua a direct dep); SciMLTesting compat → "1.6".
  • Project.toml (root) — drops the now-unused ExplicitImports test extra; SciMLTesting compat → "1.6".

ExplicitImports findings

The prior qa.jl ran only three EI checks (no_implicit_imports, no_stale_explicit_imports, all_qualified_accesses_via_owners). run_qa(... explicit_imports = true) runs all six, which surfaced the two public-API checks. All four standard checks pass with no ignores. The two public-API checks fail only on other packages' not-yet-public names, ignored with documented per-source lists (they go away as those base libs mark the names public):

  • all_qualified_accesses_are_public: DEStats, NLStats (SciMLBase); Fix1 (Base); apply, initialstates, replicate, setup, update_state (LuxCore); getproperty (Lux.LuxOps).
  • all_explicit_imports_are_public: AbstractNonlinearAlgorithm, AbstractODEAlgorithm, _unwrap_val (SciMLBase); solve (CommonSolve).

No findings were fixed by source edits and none require @test_broken — 0 hard fails.

Verification

Run locally against released SciMLTesting 1.6.0 (Pkg resolves it; no dev-from-branch), QA group via the run_tests folder model:

Julia Quality Assurance Doctests
1.10 (lts) 17/17 Pass 1/1 Pass
1.12 (the "1" lane) 17/17 Pass 1/1 Pass

0 Fail / 0 Error / 0 Broken on both lanes.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 25, 2026 08:31
Convert the hand-rolled test/qa/qa.jl Aqua + ExplicitImports body to the
SciMLTesting 1.6 `run_qa` form with `explicit_imports = true`.

- Aqua: `Aqua.test_all(...; ambiguities = false)` + a separate
  `test_ambiguities(...; recursive = false)` becomes
  `aqua_kwargs = (; ambiguities = (; recursive = false))`, preserving the
  intent (no recursive ambiguities sweep into deps, only the package's own).
- ExplicitImports: now runs all six checks (the prior body ran only three and
  never the two public-API checks). The newly-surfaced public-API findings are
  other packages' not-yet-public names, ignored with documented per-source
  lists (SciMLBase / Base / LuxCore / Lux.LuxOps / CommonSolve). No
  @test_broken needed: 0 hard fails on lts and latest.
- Doctests testset kept as-is (run_qa does not cover doctests).
- Deps: qa env drops ExplicitImports (transitive via SciMLTesting), plus the
  now-unused SafeTestsets and SciMLSensitivity; keeps Aqua (the ambiguities
  child-process check needs Aqua a direct dep); SciMLTesting compat -> "1.6".
  Root Project.toml drops the now-unused ExplicitImports test extra and bumps
  SciMLTesting compat -> "1.6".

Verified locally against released SciMLTesting 1.6.0 (no dev-from-branch):
Quality Assurance 17/17 + Doctests 1/1, 0 Fail/Error/Broken on Julia 1.10
(lts) and Julia 1.12 (the "1" lane).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…b make-public)

SciMLTesting 1.7.0 runs the two public-API ExplicitImports checks
(check_all_qualified_accesses_are_public / check_all_explicit_imports_are_public)
only on Julia >= 1.11 (skipped on the lts), and the base libraries SciMLBase
3.24.0 / CommonSolve 0.2.9 / LuxCore 1.5.3 / ArrayInterface 7.26.0 made most of
the previously-ignored names public. The per-repo public-API ignore-lists are
therefore largely redundant.

- Empty both public-API ignore-lists down to only the names that the checks
  still flag as non-public on Julia 1.12 against the registered releases:
  - all_qualified_accesses_are_public: keep :DEStats (SciMLBase). Dropped
    :NLStats (now public, SciMLBase), :Fix1 (now public, Base),
    :apply/:initialstates/:replicate/:setup/:update_state (now public, LuxCore),
    :getproperty (now public, Lux.LuxOps).
  - all_explicit_imports_are_public: keep :AbstractNonlinearAlgorithm,
    :_unwrap_val (SciMLBase). Dropped :AbstractODEAlgorithm (now public,
    SciMLBase) and :solve (now public, CommonSolve).
- Bump SciMLTesting compat 1.6 -> 1.7 in the root and qa Project.toml so the
  released 1.7 (with the lts public-check skip) is resolved.

Verified against registered releases (no dev), clean depots:
- Julia 1.12 (>= 1.11, public checks RUN): Quality Assurance 17/17 pass,
  0 Fail/Error/Broken (SciMLBase 3.24.0, CommonSolve 0.2.9, ArrayInterface
  7.26.0, LuxCore 1.5.3, SciMLTesting 1.7.0).
- Julia 1.10 (lts, public checks SKIPPED by SciMLTesting 1.7): Quality
  Assurance 15/15 pass (= 17 minus the 2 skipped public-API checks),
  0 Fail/Error/Broken.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DEStats and AbstractNonlinearAlgorithm became public in SciMLBase 3.27.0,
so drop them from the ExplicitImports public-API ignore lists. The
all_qualified_accesses_are_public ignore is now empty (removed). Only
_unwrap_val remains in all_explicit_imports_are_public (SciMLBase internal,
not yet declared public).

No DiffEqBase.X -> SciMLBase.X source migration was needed: src has no
qualified DiffEqBase accesses, and DEStats was already accessed as
SciMLBase.DEStats.

Also add SteadyStateDiffEq to the isolated test/qa env deps. Moving QA into
test/qa/ (this PR) dropped it from the env, breaking the src/layers.jl
doctest's `using ...SteadyStateDiffEq...` (it was implicitly available in
the root test env before, as a direct package dep). Restores the doctest.

Verified on Julia 1.12 (public-API checks active, registered SciMLBase
3.27.0 / DiffEqBase 7.6.0 / SciMLTesting 1.7.0): QA 17/17 + Doctests 1/1.
Verified on Julia 1.10 (public-API checks skipped per SciMLTesting >=1.11
gate): QA 15/15 + Doctests 1/1.

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
The only remaining ExplicitImports exception was
`all_explicit_imports_are_public = (; ignore = (:_unwrap_val,))`.
`SciMLBase._unwrap_val` is a `_`-prefixed internal that will not be made
public, so instead of ignoring it, reproduce it locally (it is trivially
`_unwrap_val(::Val{B}) where {B} = B; _unwrap_val(B) = B`) and drop the
SciMLBase import of it.

With that, all six EI checks pass with no ignore lists at all, so the
entire `ei_kwargs` block is removed.

Verified on Julia 1.12.6 against released SciMLBase 3.30.0 /
SciMLTesting 1.7.0 / ExplicitImports 1.15.0: run_qa Quality Assurance
17/17 pass, 0 fail/error/broken; all 6 EI checks (no_implicit_imports,
no_stale_explicit_imports, all_explicit_imports_are_public,
all_qualified_accesses_are_public, both via_owners) pass clean.

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