From d6f4710da079e983827fd0e1aabb1597cb19fe2a Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 07:38:50 -0400 Subject: [PATCH 1/3] QA: run_qa v1.6 form + ExplicitImports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrite the QA group's hand-rolled Aqua body (test/qa/qa.jl) onto the SciMLTesting 1.6 `run_qa` form and enable the ExplicitImports checks. - test/qa/qa.jl: replace the 8 individual `Aqua.test_*` calls with `run_qa(DataInterpolations; explicit_imports = true, ...)`. run_qa runs the full `Aqua.test_all` (Aqua + ExplicitImports come from SciMLTesting's own deps) plus the 6 ExplicitImports checks. No aqua_kwargs / aqua_broken needed: Aqua.test_all passes with defaults (including recursive ambiguities and persistent_tasks, which the old find_persistent_tasks_deps body did not exercise). No JET (none in the prior qa.jl). No ei_broken. - src/DataInterpolations.jl: make the implicit `using` lines explicit (`using X: X, names...`) so check_no_implicit_imports passes by FIX rather than suppression. The exact set ExplicitImports flagged: LinearAlgebra{Tridiagonal,dot,norm,normalize!}, RecipesBase{@recipe,@series}, PrettyTables{pretty_table}, ForwardDiff, EnumX{@enumx}. - ei_kwargs ignores (documented, not broken markers): * no_implicit_imports / no_stale_explicit_imports: allow_unanalyzable = (DataInterpolations.ExtrapolationType,) — the @enumx-generated submodule has dynamic includes ExplicitImports cannot statically analyze. * all_qualified_accesses_are_public: ignore ForwardDiff.{Dual,derivative, value} (not public in ForwardDiff) and Base.{front,require_one_based_indexing} (Base internals flagged non-public on the Julia 1.10 LTS lane only). - test/qa/Project.toml: bump SciMLTesting compat floor to 1.6 (the run_qa v1.6 form + EI defaults). Aqua kept as a direct dep (Aqua.test_all's ambiguities child-process needs it). ExplicitImports stays transitive via SciMLTesting (not added). Verified locally against released SciMLTesting 1.6.0 (resolved by Pkg, no dev-from-branch): QA group green on both lanes — Julia 1.10 (lts): Quality Assurance | 17 pass 0 fail 0 error 0 broken Julia 1.12 ("1"): Quality Assurance | 17 pass 0 fail 0 error 0 broken plus QA/alloc_tests.jl 8/8 (unchanged sibling file). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- src/DataInterpolations.jl | 9 +++++---- test/qa/Project.toml | 2 +- test/qa/qa.jl | 31 ++++++++++++++++++++----------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/DataInterpolations.jl b/src/DataInterpolations.jl index 3f17dc0b..ffaf8157 100644 --- a/src/DataInterpolations.jl +++ b/src/DataInterpolations.jl @@ -4,10 +4,11 @@ module DataInterpolations abstract type AbstractInterpolation{T} end -using LinearAlgebra, RecipesBase -using PrettyTables -using ForwardDiff -using EnumX +using LinearAlgebra: LinearAlgebra, Tridiagonal, dot, norm, normalize! +using RecipesBase: RecipesBase, @recipe, @series +using PrettyTables: PrettyTables, pretty_table +using ForwardDiff: ForwardDiff +using EnumX: EnumX, @enumx import FindFirstFunctions import FindFirstFunctions: Guesser diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 16d4e70f..59bb85e0 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -14,6 +14,6 @@ DataInterpolations = {path = "../.."} AllocCheck = "0.2" Aqua = "0.8" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" StaticArrays = "1.9.7" Test = "1" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 19c936b5..409c5b48 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,11 +1,20 @@ -using DataInterpolations, Aqua -@testset "Aqua" begin - Aqua.find_persistent_tasks_deps(DataInterpolations) - Aqua.test_ambiguities(DataInterpolations, recursive = false) - Aqua.test_deps_compat(DataInterpolations) - Aqua.test_piracies(DataInterpolations) - Aqua.test_project_extras(DataInterpolations) - Aqua.test_stale_deps(DataInterpolations) - Aqua.test_unbound_args(DataInterpolations) - Aqua.test_undefined_exports(DataInterpolations) -end +using SciMLTesting, DataInterpolations, Test + +run_qa( + DataInterpolations; + explicit_imports = true, + ei_kwargs = (; + # `@enumx ExtrapolationType ...` generates a submodule with dynamic includes + # that ExplicitImports cannot statically analyze; allow it to be unanalyzable + # rather than failing the import-graph checks. + no_implicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), + no_stale_explicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), + # Non-public names accessed by qualified-access that vary by package version: + # * ForwardDiff.{Dual,derivative,value} are not marked public in ForwardDiff. + # * Base.{front,require_one_based_indexing} are Base internals flagged as + # non-public on Julia 1.10 (the LTS lane); newer Julia marks them public. + all_qualified_accesses_are_public = (; + ignore = (:Dual, :derivative, :value, :front, :require_one_based_indexing), + ), + ), +) From 53204dcf4610760adc33b322f2d997db5fc25771 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Fri, 26 Jun 2026 15:16:47 -0400 Subject: [PATCH 2/3] QA: sweep redundant public-API EI ignores after SciMLTesting 1.7 SciMLTesting 1.7 runs the two public-API ExplicitImports checks (all_qualified_accesses_are_public / all_explicit_imports_are_public) only on Julia >= 1.11, skipping them on the 1.10 LTS. The Base internal `:front` was only ever flagged on 1.10, so it is now inert and removed. Verified against registered releases (SciMLTesting 1.7.0): * Julia 1.12: QA group 17/17, public checks green. * Julia 1.11: QA group 17/17 (Base.require_one_based_indexing is still non-public there, so it is retained; it became public in >= 1.12). * Julia 1.10: public checks correctly skipped. ForwardDiff.{Dual,derivative,value} stay ignored (non-public in a non-SciML dependency we cannot annotate). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/qa.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 409c5b48..b57a682e 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -9,12 +9,12 @@ run_qa( # rather than failing the import-graph checks. no_implicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), no_stale_explicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), - # Non-public names accessed by qualified-access that vary by package version: + # Non-public qualified accesses we cannot annotate ourselves: # * ForwardDiff.{Dual,derivative,value} are not marked public in ForwardDiff. - # * Base.{front,require_one_based_indexing} are Base internals flagged as - # non-public on Julia 1.10 (the LTS lane); newer Julia marks them public. + # * Base.require_one_based_indexing is a Base internal still flagged as + # non-public on Julia 1.11; newer Julia (>= 1.12) marks it public. all_qualified_accesses_are_public = (; - ignore = (:Dual, :derivative, :value, :front, :require_one_based_indexing), + ignore = (:Dual, :derivative, :value, :require_one_based_indexing), ), ), ) From e1ac0e31910fb1d230a735e5940bfa13b88d835a Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Fri, 26 Jun 2026 23:47:59 -0400 Subject: [PATCH 3/3] QA: bump SciMLTesting floor to 1.7 and drop inert require_one_based_indexing ignore SciMLTesting 1.7 runs the two public-API ExplicitImports checks (all_qualified_accesses_are_public / all_explicit_imports_are_public) only on Julia >= 1.11, so bump test/qa compat floor 1.6 -> 1.7 to admit it. The CI matrix is [lts, 1, pre] = Julia 1.10, 1.12, 1.13; there is no 1.11 lane. Base.require_one_based_indexing is public on Julia >= 1.12, so the public-API check never flags it on any lane that runs those checks (1.12 and 1.13); it was retained only for a 1.11 lane that CI does not run. Dropping it from the ignore list leaves the genuine survivors ForwardDiff.{Dual,derivative,value} (non-public in ForwardDiff, a non-SciML dependency we cannot annotate). DataInterpolations does not depend on DiffEqBase or SciMLBase, so there is no DiffEqBase.X -> SciMLBase.X caller migration to do. Verified against registered releases (SciMLTesting 1.7.0, DataInterpolations 9.0.0 developed from branch, no dev of SciMLTesting): * Julia 1.12: Quality Assurance 17/17 (public checks run; emptying the public-API ignore surfaced only ForwardDiff Dual/derivative/value, which are restored). * Julia 1.10: Quality Assurance 15/15 (public checks correctly skipped). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/Project.toml | 2 +- test/qa/qa.jl | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 59bb85e0..8bd513e3 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -14,6 +14,6 @@ DataInterpolations = {path = "../.."} AllocCheck = "0.2" Aqua = "0.8" SafeTestsets = "0.0.1, 0.1" -SciMLTesting = "1.6" +SciMLTesting = "1.7" StaticArrays = "1.9.7" Test = "1" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index b57a682e..10ac9ce4 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -9,12 +9,9 @@ run_qa( # rather than failing the import-graph checks. no_implicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), no_stale_explicit_imports = (; allow_unanalyzable = (DataInterpolations.ExtrapolationType,)), - # Non-public qualified accesses we cannot annotate ourselves: - # * ForwardDiff.{Dual,derivative,value} are not marked public in ForwardDiff. - # * Base.require_one_based_indexing is a Base internal still flagged as - # non-public on Julia 1.11; newer Julia (>= 1.12) marks it public. - all_qualified_accesses_are_public = (; - ignore = (:Dual, :derivative, :value, :require_one_based_indexing), - ), + # ForwardDiff.{Dual,derivative,value} are not marked public in ForwardDiff, + # so the public-API check flags them; keep them allowed until ForwardDiff + # declares them public. + all_qualified_accesses_are_public = (; ignore = (:Dual, :derivative, :value)), ), )