Skip to content

QA: run_qa v1.6 form + ExplicitImports#165

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

QA: run_qa v1.6 form + ExplicitImports#165
ChrisRackauckas-Claude wants to merge 5 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/qa.jl onto SciMLTesting 1.6's run_qa and enables the ExplicitImports checks (explicit_imports = true). Replaces the hand-rolled SafeTestsets + Aqua.test_all + JET.test_package layout.

What changed

  • test/qa/qa.jl: run_qa(SymbolicNumericIntegration; explicit_imports = true, jet_kwargs = (; target_defined_modules = true), aqua_broken = (:piracies,), ei_kwargs = (...), ei_broken = (:no_implicit_imports,)).
  • test/qa/Project.toml: add SciMLTesting (compat "1.6"), drop SafeTestsets (run_qa owns the testset). ExplicitImports is transitive via SciMLTesting; Aqua stays a direct dep because its ambiguities sub-check spawns a child process.
  • src/SymbolicNumericIntegration.jl: drop the unused coeff from using Symbolics: ... (was a stale explicit import).

Preserved tracked-broken findings

ExplicitImports findings (Julia 1.10, ExplicitImports 1.15.0)

  • no_stale_explicit_imports: fixed by removing coeff.
  • all_explicit_imports_via_owners: passes.
  • all_qualified_accesses_via_owners: ignore :coef, :scalarize, :toexpr, :unwrap (re-exports — coef owned by StatsAPI via DataDrivenSparse; scalarize/toexpr/unwrap owned by SymbolicUtils[.Code] via Symbolics).
  • all_qualified_accesses_are_public: ignore 9 upstream non-public names (DataDrivenDiffEq AbstractDataDrivenAlgorithm; DataDrivenSparse active_set!, coef; SymbolicUtils Sym; Symbolics derivative, scalarize, toexpr, unwrap, value).
  • all_explicit_imports_are_public: ignore 4 upstream non-public names (SymbolicUtils BasicSymbolic, issym; Symbolics get_variables, value).
  • no_implicit_imports: many heavy-using names across the Symbolics / SymbolicUtils / DataDriven stacks (macros + module bindings used for qualified access). Marked ei_broken = (:no_implicit_imports,) and tracked in QA: ExplicitImports no_implicit_imports findings (tracked @test_broken) #164 rather than a risky mass using X: name refactor.

Local verification

Ran the QA group against released SciMLTesting 1.6.0 (no dev-from-branch), local source developed into the qa env:

Test Summary:     | Pass  Broken  Total     Time
Quality Assurance |   16       2     18  2m40.0s

0 Fail / 0 Error. The 2 Broken are the intended piracies (#156) and no_implicit_imports (#164) placeholders; both auto-flag an Unexpected Pass once fixed.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 25, 2026 07:27
Convert test/qa/qa.jl from the hand-rolled SafeTestsets + Aqua.test_all +
JET.test_package layout to SciMLTesting 1.6's run_qa, and turn on the
ExplicitImports checks (explicit_imports = true).

- Aqua: piracies stays disabled and tracked via aqua_broken = (:piracies,)
  (was Aqua.test_all(...; piracies = false) + @test_broken false), issue SciML#156.
- JET: still runs (jet_kwargs = (; target_defined_modules = true)).
- ExplicitImports (6 checks):
  - no_stale_explicit_imports: drop unused `coeff` from the Symbolics import.
  - all_qualified_accesses_via_owners / *_are_public / all_explicit_imports_are_public:
    ignore upstream non-public / re-exported names (Symbolics, SymbolicUtils,
    DataDrivenDiffEq, DataDrivenSparse) via per-check ei_kwargs ignore-lists.
  - no_implicit_imports: many heavy-`using` names across the Symbolics/DataDriven
    stacks; marked ei_broken = (:no_implicit_imports,) and tracked in issue SciML#164
    rather than a risky mass explicit-import refactor.

qa env: add SciMLTesting (compat "1.6"), drop SafeTestsets (run_qa owns the
testset); ExplicitImports comes in transitively via SciMLTesting; Aqua stays a
direct dep (its ambiguities sub-check spawns a child process).

Verified locally against released SciMLTesting 1.6.0 (Aqua 0.8.16, JET 0.9.18,
ExplicitImports 1.15.0): Quality Assurance | 16 Pass, 2 Broken, 0 Fail/Error.

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

SciMLTesting 1.7 runs check_all_qualified_accesses_are_public and
check_all_explicit_imports_are_public only on Julia >= 1.11. With the
released Symbolics 7.29.0 / SymbolicUtils 4.36.0 now declaring several
formerly-internal names public, the per-repo public-API ignore lists are
largely redundant.

Emptied both public-API ignore lists and re-verified on Julia 1.12
(>= 1.11, where the checks run) against the registered releases, then
restored only the names still flagged as non-public:

  all_qualified_accesses_are_public: AbstractDataDrivenAlgorithm
  (DataDrivenDiffEq), Sym (SymbolicUtils), active_set!/coef
  (DataDrivenSparse), toexpr (Symbolics)
  all_explicit_imports_are_public: issym (SymbolicUtils)

Removed (now public): derivative, scalarize, unwrap, value
(all_qualified_accesses_are_public); BasicSymbolic, get_variables, value
(all_explicit_imports_are_public).

The all_qualified_accesses_via_owners ignore, aqua_broken, and ei_broken
are left untouched. Verified: Julia 1.12 QA group green for both public
checks; Julia 1.10 (lts) skips them per SciMLTesting 1.7.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The public-API ExplicitImports checks (all_qualified_accesses_are_public /
all_explicit_imports_are_public) are gated to Julia >= 1.11 starting in
SciMLTesting 1.7. Bump the qa env compat floor so CI resolves the gating
release rather than an older SciMLTesting that would skip those checks.

Verified against the registered make-public releases (SciMLBase 3.27.0,
SciMLTesting 1.7.0, Symbolics 7.29.0, SymbolicUtils 4.36.0):
- Julia 1.12 (public-API checks run): 16 pass, 2 broken, 0 fail. The
  emptied public-API ignore lists flag exactly 6 survivors, all from
  packages outside the make-public scope and kept ALLOWED:
  AbstractDataDrivenAlgorithm (DataDrivenDiffEq); Sym, issym (SymbolicUtils);
  active_set!, coef (DataDrivenSparse); toexpr (Symbolics).
- Julia 1.10 (public-API checks skipped via the 1.7 gate): 14 pass,
  2 broken, 0 fail.

This package has no SciMLBase/DiffEqBase dependency, so no caller migration
applies; the restored ignore lists are unchanged from the prior commit.

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 21:00
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
…non-public re-exports)

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