Skip to content

QA: run_qa v1.6 form + ExplicitImports#302

Open
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa/run_qa-v1.6-explicit-imports
Open

QA: run_qa v1.6 form + ExplicitImports#302
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa/run_qa-v1.6-explicit-imports

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Ignore until reviewed by @ChrisRackauckas.

Brings test/qa onto the SciMLTesting run_qa v1.6 form and enables the ExplicitImports checks (explicit_imports = true). Verified locally on Julia 1.10 against the released SciMLTesting 1.6.0 (no dev-from-branch): the QA group is 15 Pass, 2 Broken, 0 Fail / 0 Error.

Test Summary:     | Pass  Broken  Total
Quality Assurance |   15       2     17

Aqua mapping (every prior check preserved)

The hand-rolled test/qa/qa.jl ran an explicit Aqua body; run_qa runs Aqua.test_all, which covers the same sub-checks:

old hand-rolled call new form
test_ambiguities(recursive = false) aqua_kwargs = (; ambiguities = (; recursive = false))
find_persistent_tasks_deps, test_deps_compat, test_project_extras, test_stale_deps, test_unbound_args default Aqua.test_all sub-checks
test_piracies(treat_as_own = []) default (empty treat_as_own), dropped
test_undefined_exports(broken = true) aqua_broken = (:undefined_exports,) (tracked, see below)

ExplicitImports findings

  • Pass: no_stale_explicit_imports, all_explicit_imports_via_owners, all_explicit_imports_are_public.
  • Pass with documented ignore-lists (ei_kwargs): all_qualified_accesses_via_owners and all_qualified_accesses_are_public flag qualified accesses to dependency-internal names that are non-owner / non-public; each is ignored with a source-package comment:
    • AbstractSystem (ModelingToolkit / owned by ModelingToolkitBase), DynamicPPL (Turing), unwrap (Symbolics / SymbolicUtils), AbstractMCMCEnsemble (AbstractMCMC), LN_SBPLX (NLopt), successful_retcode (SciMLBase). These go public as the base libs declare them.
  • Broken (tracked): no_implicit_imports reports ~52 names from the package's intentional heavy @reexport using / bulk-using of the SciML stack. A mass using X: a, b rewrite is risky (part of the API is the reexported stack), so it is left @test_broken via ei_broken = (:no_implicit_imports,) — auto-flags an Unexpected Pass once made explicit. Tracked in QA: ExplicitImports no_implicit_imports — make reexported SciML-stack imports explicit #301.

Tracked-broken issues

Deps

test/qa/Project.toml: SciMLTesting compat floor "1" -> "1.6" (the broken-marker + ExplicitImports kwargs need 1.6.0). Aqua kept as a direct dep (the ambiguities sub-check spawns a child process that needs Aqua present); ExplicitImports comes transitively through SciMLTesting (not listed). No JET (the prior body had none).

🤖 Generated with Claude Code

Convert test/qa/qa.jl from the hand-rolled Aqua body to the SciMLTesting
run_qa v1.6 form and enable the ExplicitImports checks.

Aqua mapping (preserves every prior check):
- test_ambiguities(recursive = false) -> aqua_kwargs ambiguities recursive = false
- find_persistent_tasks_deps / deps_compat / project_extras / stale_deps /
  unbound_args -> default Aqua.test_all sub-checks
- test_piracies(treat_as_own = []) -> default (empty), dropped
- test_undefined_exports(broken = true) -> aqua_broken = (:undefined_exports,),
  tracked in SciML#300 (`Variable`/`rotate!` leak dead
  through @reexport)

ExplicitImports (explicit_imports = true):
- no_stale_explicit_imports, all_explicit_imports_via_owners,
  all_explicit_imports_are_public: pass
- all_qualified_accesses_via_owners / all_qualified_accesses_are_public:
  pass with documented per-name ignore-lists for dependency-internal qualified
  accesses (AbstractSystem, DynamicPPL, unwrap, AbstractMCMCEnsemble, LN_SBPLX,
  successful_retcode)
- no_implicit_imports: many heavy reexport / bulk-using names; left
  @test_broken via ei_broken, tracked in SciML#301

test/qa/Project.toml: SciMLTesting compat floor -> "1.6" (the broken-marker and
ExplicitImports kwargs require 1.6.0). Aqua kept as a direct dep (the ambiguities
sub-check spawns a child process that needs it); ExplicitImports comes transitively
through SciMLTesting.

Verified locally on Julia 1.10 against released SciMLTesting 1.6.0 (no dev-from-branch):
QA group is 15 Pass, 2 Broken (undefined_exports + 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>
@ChrisRackauckas-Claude ChrisRackauckas-Claude marked this pull request as ready for review June 29, 2026 09:51
ExplicitImports findings against the released stack (SciMLBase 3.30,
ModelingToolkit 11.29, Symbolics 7.29) no longer flag three names that
the conversion commit had ignored, so the ignore-lists are trimmed to
only the genuinely-irreducible external API:

- all_qualified_accesses_via_owners: dropped :AbstractSystem (now owned
  by ModelingToolkit) and :unwrap (now owned by Symbolics). Only
  :DynamicPPL remains (reached through Turing's re-export; DynamicPPL is
  not a direct dependency).
- all_qualified_accesses_are_public: dropped :AbstractSystem,
  :successful_retcode (now public in SciMLBase) and :unwrap (now public
  in Symbolics). The kept three are genuinely non-public external names:
  :AbstractMCMCEnsemble (AbstractMCMC), :DynamicPPL (Turing submodule
  re-export), :LN_SBPLX (NLopt algorithm constant).

No source change was needed: src already qualifies these through their
public owners (SciMLBase.successful_retcode, ModelingToolkit.AbstractSystem,
Symbolics.unwrap), so the public/owner checks now pass without an ignore.

no_implicit_imports stays @test_broken (ei_broken): the module
deliberately `@reexport`s the SciML stack (DifferentialEquations,
ModelingToolkit, Distributions, Plots), so converting the 47 implicit
names to explicit imports would break the intended public surface and
mis-attribute owners (e.g. solve/remake to SciMLExpectations). Tracked in
SciML#301. undefined_exports stays aqua_broken
(SciML#300).

Verified GROUP=QA locally on Julia 1.12 against released SciMLTesting
1.7.0: QA/qa.jl is 15 Pass, 2 Broken (no_implicit_imports +
undefined_exports), 0 Fail / 0 Error. The two trimmed public/owner
checks pass with no Unexpected Pass.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
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