Skip to content

QA: run_qa v1.6 form + ExplicitImports#113

Merged
ChrisRackauckas merged 3 commits into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6-explicitimports
Jun 27, 2026
Merged

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

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Brings CurveFit.jl's QA onto the SciMLTesting run_qa v1.6 form with ExplicitImports enabled, consolidating the previously scattered hand-rolled QA into a single test/qa/ group wired via the run_tests() folder model.

What changed

  • test/qa/qa.jl (new) — run_qa(CurveFit; explicit_imports = true, ei_kwargs = ...). Runs Aqua (test_all, all sub-checks) plus the six ExplicitImports checks. No JET (matches the prior QA, which ran Aqua + EI only). No aqua_broken/jet_broken/ei_broken: every check is a genuine PASS.
  • test/qa/Project.toml (new, replaces test/nopre/Project.toml) — Aqua + SafeTestsets + SciMLTesting + Test + CurveFit (path source). ExplicitImports is transitive via SciMLTesting (dropped as a direct test dep). SciMLTesting compat "1.6".
  • Removed test/nopre/ (hand-rolled Aqua.test_all group) and test/explicit_imports.jl (raw EI checks that ran inside Core) — both subsumed by run_qa.
  • test/test_groups.toml — replace the nopre group with QA (in_all = false, versions 1/lts), matching the QA folder. Same two (group × version) CI cells as before.
  • Root Project.toml — drop ExplicitImports from [extras]/[targets].test (only the removed Core file used it), bump SciMLTesting compat to "1.6", and raise the PrecompileTools floor "1""1.1" (see below).

ExplicitImports findings (6 checks)

Check Result
no_implicit_imports PASS
no_stale_explicit_imports PASS
all_explicit_imports_via_owners PASS
all_qualified_accesses_via_owners PASS
all_explicit_imports_are_public PASS (with ignores)
all_qualified_accesses_are_public PASS (with ignores)

The two public-API checks ignore upstream non-public names that CurveFit qualifies/imports, documented inline by source package — these go public as the base libraries declare their APIs:

  • SciMLBase: AbstractLinearAlgorithm, AbstractNonlinearAlgorithm, successful_retcode; SciMLBase.ReturnCode: Success, T
  • NonlinearSolveBase: AutoSpecializeCallable, NonlinearSolvePolyAlgorithmCache, Utils, get_fu; NonlinearSolveBase.Utils: clean_sprint_struct
  • StatsAPI: coef, confint, dof, dof_residual, fitted, nobs, predict, residuals, rss, stderror, vcov
  • CommonSolve: init, solve, solve!
  • Base: rtoldefault

No own (CurveFit) non-public names needed ignoring. 0 hard FAILs, 0 known-broken.

Coverage note: the old test/explicit_imports.jl also ran check_no_self_qualified_accesses (passing), which is not part of the standardized run_qa 6-check set, so it is not carried over.

PrecompileTools floor bump (Downgrade fix)

CurveFit explicit-imports only the PrecompileTools macros (using PrecompileTools: @compile_workload, @setup_workload). On PrecompileTools 1.0.0, the macro expansion references the bare PrecompileTools module name, which is undefined under a macro-only import → UndefVarError: PrecompileTools not defined on the Downgrade(lts) lane. Verified locally: breaks on 1.0.0, clean on 1.1.0. Floor raised to "1.1".

Verification (local, Julia 1.10, released SciMLTesting 1.6.0)

  • QA via run_tests() folder model (GROUP=QA): Quality Assurance | 17 17 — Aqua 11 (Method ambiguity, Unbound type params, Undefined exports, Project.toml compare, Stale deps, Compat bounds ×4, Piracy, Persistent tasks), ExplicitImports 6. 0 fail/error/broken.
  • Core via Pkg.test() (GROUP=Core): all pass, Testing CurveFit tests passed (exit 0) — root env resolves without ExplicitImports.

🤖 Generated with Claude Code

ChrisRackauckas and others added 3 commits June 25, 2026 07:23
Consolidate the scattered hand-rolled QA into a single SciMLTesting `run_qa`
v1.6 QA group, wired via the run_tests folder model.

- Add test/qa/qa.jl: `run_qa(CurveFit; explicit_imports = true, ...)` runs Aqua
  (test_all, all sub-checks pass) and the six ExplicitImports checks. The two
  public-API checks ignore upstream non-public names (SciMLBase,
  NonlinearSolveBase[.Utils], SciMLBase.ReturnCode, StatsAPI, CommonSolve, Base),
  documented inline by source package. No JET (matches the prior QA, which ran
  Aqua + EI only). No aqua_broken/jet_broken/ei_broken: every check is a real PASS.
- Add test/qa/Project.toml: Aqua + SafeTestsets + SciMLTesting + Test + CurveFit
  (path source). ExplicitImports is transitive via SciMLTesting. SciMLTesting
  compat "1.6".
- Remove test/nopre/ (the hand-rolled Aqua.test_all group) and
  test/explicit_imports.jl (raw EI checks in Core) — both subsumed by run_qa.
- test_groups.toml: replace the `nopre` group with `QA` (in_all = false,
  versions 1/lts), matching the QA folder.
- Root Project.toml: drop ExplicitImports from [extras]/[targets].test (only
  the removed Core file used it; QA gets it via SciMLTesting), bump SciMLTesting
  compat to "1.6", and raise the PrecompileTools floor "1" -> "1.1": CurveFit
  explicit-imports only the PrecompileTools macros (@compile_workload/
  @setup_workload), and on 1.0.0 their expansion references the bare
  `PrecompileTools` module name -> UndefVarError on the Downgrade(lts) lane
  (verified locally; fixed at 1.1.0).

Verified locally on Julia 1.10 vs released SciMLTesting 1.6.0:
- QA via run_tests folder model (GROUP=QA): 17/17 pass (Aqua 11, EI 6), 0 fail/
  error/broken.
- Core via Pkg.test (GROUP=Core): all pass, exit 0 (root env resolves without
  ExplicitImports).

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLTesting 1.7.0 runs the two public-API ExplicitImports checks
(all_qualified_accesses_are_public, all_explicit_imports_are_public)
only on Julia >= 1.11 and skips them on the LTS, and SciMLBase 3.24.0 /
CommonSolve 0.2.9 / StatsAPI now declare the names CurveFit accessed as
public. Empty both public-API ignore-lists and restore only the names
still genuinely non-public against the registered releases, verified by
running the QA group on Julia 1.12 (17/17 pass) and 1.10 (15/15 pass,
public checks skipped):

  all_explicit_imports_are_public:
    AbstractLinearAlgorithm, AbstractNonlinearAlgorithm (SciMLBase)
  all_qualified_accesses_are_public:
    AutoSpecializeCallable, NonlinearSolvePolyAlgorithmCache, Utils,
    get_fu, clean_sprint_struct (NonlinearSolveBase[.Utils]); rtoldefault (Base)

Dropped (now public): CommonSolve init/solve/solve!,
SciMLBase.ReturnCode Success/T/successful_retcode, the StatsAPI
coef..vcov block.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SciMLBase 3.27.0 declares the abstract algorithm types `@public`
(AbstractNonlinearAlgorithm, AbstractLinearAlgorithm, ...), so CurveFit's
two explicit imports of those names are now public. Empty the
all_explicit_imports_are_public ignore-list entirely (it held only those
two SciMLBase names) and raise the compat floors that pin the make-public
releases:

  - SciMLBase 3.x floor 3.1 -> 3.27 (the version that declares the abstract
    algorithm types public; v2 branch 2.90 kept for un-migrated users)
  - SciMLTesting 1.6 -> 1.7 (root + test/qa), the release that gates the two
    public-API ExplicitImports checks to Julia >= 1.11

CurveFit's source imports the abstract algorithm types directly from
SciMLBase already, so there is no DiffEqBase.X -> SciMLBase.X caller
migration to do here.

all_qualified_accesses_are_public retains only genuinely-still-non-public
upstream names that the source qualifies:
  - NonlinearSolveBase: AutoSpecializeCallable, NonlinearSolvePolyAlgorithmCache,
    get_fu, and Utils(.clean_sprint_struct)  (none @public/exported in 2.31.2)
  - Base.rtoldefault

Verified against the registered releases (SciMLBase 3.27.0, SciMLTesting
1.7.0, NonlinearSolveBase 2.31.2, ExplicitImports 1.15.0, CommonSolve 0.2.9):
  - Julia 1.12 (public-API checks RUN): QA group 17/17 pass, 0 fail
  - Julia 1.10 (public-API checks skipped by SciMLTesting 1.7): 15/15 pass

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
@ChrisRackauckas ChrisRackauckas merged commit be38bdc into SciML:master Jun 27, 2026
18 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