Skip to content

QA: run_qa v1.6 form + ExplicitImports#232

Draft
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6
Draft

QA: run_qa v1.6 form + ExplicitImports#232
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:qa-run_qa-v1.6

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Converts the hand-rolled test/qa/qa.jl (raw Aqua.test_* + per-function JET.report_call) to the SciMLTesting 1.6 run_qa form and enables the ExplicitImports checks.

ExplicitImports findings (run locally vs released SciMLTesting 1.6.0)

Check Outcome
no_stale_explicit_imports fixed — removed stale ArrayInterface.allowed_getindex (imported, never used)
no_implicit_imports broken (#231) — ~31 implicit names from using LinearAlgebra, SparseArrays, Printf, PrecompileTools; explicit refactor deferred
all_explicit_imports_via_owners pass
all_qualified_accesses_via_owners ignoreBlasFloat/chkstride1/libblastrampoline reached via LinearAlgebra.BLAS (owners: LinearAlgebra / libblastrampoline_jll)
all_qualified_accesses_are_public ignore — Base / LinearAlgebra(.BLAS/.LAPACK) non-public names (@aliasscope, @assume_effects, @blasfunc, @propagate_inbounds, chkfinite, chklapackerror, gebal!, gesv!, rcswap!, stegr!, ...)
all_explicit_imports_are_public ignore — non-public names imported from LinearAlgebra / ArrayInterface / Base (BlasInt, checksquare, ismutable, allowed_setindex!, typename) + Stegr submodule's @blasfunc/stegr!

All ignored names are other packages' internals that will become public as the base libs declare them; only own-package surface is otherwise touched.

Analyzability fix

ExplicitImports could not analyze the module because of the dynamic for i in 1:13; include("exp_generated/exp_$i.jl"); end in src/exp_noalloc.jl (UnanalyzableModuleException). Replaced it with 13 literal includes. Verified the Higham2005 matrix exponential still matches Base exp to ~6.7e-16 and expv is unchanged. This unblocked no_implicit_imports and no_stale_explicit_imports.

Deps

  • test/qa/Project.toml: SciMLTesting compat → "1.6". Aqua + ExplicitImports are transitive via SciMLTesting; Aqua is kept a direct dep so the test_ambiguities child process can resolve it. JET kept for the JET check.
  • Root Project.toml: SciMLTesting compat → "1.6".

Verification

QA group on Julia 1.10 (lts), released SciMLTesting 1.6.0 (Pkg.test, GROUP=QA, folder model):

Test Summary: | Pass  Broken  Total
QA/qa.jl      |   17       1     18
Testing ExponentialUtilities tests passed

(the one Broken is no_implicit_imports, tracked in #231).

Pre-existing JET-on-1.12 caveat

On Julia 1.12 the JET typo check reports pre-existing "local variable may be undefined" findings (kiops order/kest, Higham2005 ilo/ihi/scale/bal). master is already red on the QA(1)/1.12 lane today, and the source-level fixes live in the still-open draft #229. This PR does not bundle that numerical-source fix (out of scope, belongs in #229) and does not use jet_broken (it would turn the clean lts JET lane into an Unexpected-Pass error). The lts QA lane is fully green; the 1.12 JET red is pre-existing and tracked by #229.

🤖 Generated with Claude Code

Convert the hand-rolled test/qa/qa.jl (raw Aqua.test_* + per-function
JET.report_call) to the SciMLTesting 1.6 `run_qa` form and enable the
ExplicitImports checks.

ExplicitImports findings (run vs released SciMLTesting 1.6.0):
  * no_stale_explicit_imports: removed the genuinely stale
    `ArrayInterface.allowed_getindex` import (never referenced; only
    `ismutable`/`allowed_setindex!` are used).
  * Made the `for i in 1:13 include("exp_generated/exp_$i.jl")` dynamic
    include in exp_noalloc.jl static (13 literal includes) so the module is
    analyzable — this unblocked no_implicit_imports and
    no_stale_explicit_imports (previously UnanalyzableModuleException).
    Verified Higham2005 matrix-exp still matches Base `exp` to ~6.7e-16.
  * all_qualified_accesses_via_owners / all_qualified_accesses_are_public /
    all_explicit_imports_are_public: ignore-listed other packages' non-public
    names (Base / LinearAlgebra(.BLAS/.LAPACK, incl. Stegr submodule) /
    ArrayInterface / libblastrampoline_jll); they go public as the base libs
    declare them.
  * no_implicit_imports: ~31 implicit names from `using LinearAlgebra,
    SparseArrays, Printf, PrecompileTools`. Making them explicit is a large
    refactor; marked ei_broken and tracked in SciML#231 (auto-flags when fixed).

Deps: test/qa/Project.toml SciMLTesting compat -> "1.6" (Aqua + ExplicitImports
are transitive via SciMLTesting; Aqua kept a direct dep so the ambiguities
sub-check's child process can resolve it; JET kept for the JET check). Root
Project.toml SciMLTesting compat -> "1.6".

QA group on Julia 1.10 (lts), released SciMLTesting 1.6.0:
  Quality Assurance | 17 Pass, 1 Broken, 0 Fail, 0 Error (no_implicit_imports
  broken per SciML#231). On Julia 1.12 the JET typo check reports pre-existing
  "may be undefined" findings (kiops order/kest, Higham2005 ilo/ihi/scale/bal);
  master is already red there and the source fixes live in draft PR SciML#229.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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