From f39016d3cab365e1982b46795a7701a8dc8771a7 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 08:17:15 -0400 Subject: [PATCH] QA: run_qa v1.6 form + ExplicitImports Convert the hand-rolled test/qa/qa.jl (Aqua + ExplicitImports + JET) onto the SciMLTesting run_qa v1.6 form and enable the full ExplicitImports check set (explicit_imports = true). - Aqua: run_qa runs Aqua.test_all (11/11 sub-checks pass; no aqua_broken). - JET: preserve target_modules + toplevel_logger = nothing via jet_kwargs (mode = :typo); JET passes (1/1, no jet_broken). - ExplicitImports: all 6 checks now run. no_implicit_imports, no_stale_explicit_imports, all_explicit_imports_via_owners and all_qualified_accesses_via_owners pass clean. The two *_are_public checks are satisfied with documented ei_kwargs ignore-lists for non-public names owned by other packages (Base, ArrayInterface, WeightInitializers, Static, LuxCore) plus one own non-public name (return_init_as). No ei_broken needed. test/qa/Project.toml: drop ExplicitImports (now transitive via SciMLTesting), keep Aqua (Aqua.test_ambiguities child-proc needs it a direct dep), keep JET, bump SciMLTesting compat to 1.6. Root Project.toml SciMLTesting compat -> 1.6. Verified locally on Julia 1.10 vs released SciMLTesting 1.6.0 via the folder model (GROUP=QA): 18/18 pass, 0 FAIL/ERROR/BROKEN. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 2 +- test/qa/Project.toml | 4 +-- test/qa/qa.jl | 60 ++++++++++++++++++++++++++++---------------- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/Project.toml b/Project.toml index 559bf250..a2200d4d 100644 --- a/Project.toml +++ b/Project.toml @@ -50,7 +50,7 @@ Random = "1.10" Reexport = "1.2.2" SafeTestsets = "0.1" SciMLBase = "2.51, 3" -SciMLTesting = "1" +SciMLTesting = "1.6" SparseArrays = "1.10" Static = "1.2.0" Statistics = "1.10" diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 54c4d2f7..3cfb6563 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -1,6 +1,5 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" -ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" ReservoirComputing = "7c2d2b1e-3dd4-11ea-355a-8f6a8116e294" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" @@ -12,9 +11,8 @@ ReservoirComputing = {path = "../.."} [compat] Aqua = "0.8" -ExplicitImports = "1.14.0" JET = "0.9, 0.10.10, 0.11" SafeTestsets = "0.1" -SciMLTesting = "1" +SciMLTesting = "1.6" Test = "1" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index f127799d..5857bd4e 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,24 +1,42 @@ -using ReservoirComputing, Aqua, ExplicitImports, JET -using Test +using SciMLTesting, ReservoirComputing, Test +using JET -@testset "Aqua" begin - Aqua.find_persistent_tasks_deps(ReservoirComputing) - Aqua.test_ambiguities(ReservoirComputing; recursive = false) - Aqua.test_deps_compat(ReservoirComputing) - Aqua.test_piracies(ReservoirComputing) - Aqua.test_project_extras(ReservoirComputing) - Aqua.test_stale_deps(ReservoirComputing) - Aqua.test_unbound_args(ReservoirComputing) - Aqua.test_undefined_exports(ReservoirComputing) -end - -@testset "ExplicitImports" begin - @test check_no_implicit_imports(ReservoirComputing) === nothing - @test check_no_stale_explicit_imports(ReservoirComputing) === nothing -end - -JET.test_package( +run_qa( ReservoirComputing; - target_modules = (ReservoirComputing,), - toplevel_logger = nothing + explicit_imports = true, + jet_kwargs = (; + target_modules = (ReservoirComputing,), + mode = :typo, + toplevel_logger = nothing, + ), + ei_kwargs = (; + all_qualified_accesses_are_public = (; + ignore = ( + :OneTo, # Base (non-public) + :tail, # Base (non-public) + :aos_to_soa, # ArrayInterface (non-public) + :Partial, # WeightInitializers.PartialFunction (non-public) + :default_rng, # WeightInitializers.Utils (non-public) + :ones, # WeightInitializers.DeviceAgnostic (non-public) + :rand, # WeightInitializers.DeviceAgnostic (non-public) + :zeros, # WeightInitializers.DeviceAgnostic (non-public) + ), + ), + all_explicit_imports_are_public = (; + ignore = ( + :return_init_as, # ReservoirComputing (own non-public name) + :DeviceAgnostic, # WeightInitializers (non-public) + :PartialFunction, # WeightInitializers (non-public) + :Utils, # WeightInitializers (non-public) + :StaticInteger, # Static (non-public) + :apply, # LuxCore (non-public) + :initialparameters, # LuxCore (non-public) + :initialstates, # LuxCore (non-public) + :outputsize, # LuxCore (non-public) + :replicate, # LuxCore (non-public) + :setup, # LuxCore (non-public) + :statelength, # LuxCore (non-public) + ), + ), + ) )