From a92831e9b097434d6979d2c0593c2ce69e2c3762 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Thu, 25 Jun 2026 05:41:45 -0400 Subject: [PATCH 1/2] QA: run_qa v1.6 form + ExplicitImports Convert test/qa/qa.jl from the hand-rolled Aqua/JET body to the SciMLTesting 1.6 run_qa form and enable the ExplicitImports checks. - run_qa(DiffEqPhysics; explicit_imports = true, ...): Aqua + the six ExplicitImports checks now run via the shared harness (Aqua and ExplicitImports come from SciMLTesting's own deps). - ExplicitImports: 4 checks pass as-is. all_qualified_accesses_are_public and all_explicit_imports_are_public flag only OTHER packages' non-public names (ForwardDiff: GradientConfig/derivative/gradient/gradient!; RecipesBase: plot; Base: depwarn (Julia 1.10 only); SciMLBase: AbstractDynamicalODEProblem, AbstractSciMLSolution, FunctionArgumentsError, NullParameters, TooFewArgumentsError, TooManyArgumentsError, numargs). All are genuinely used (not stale), so they are ignored via ei_kwargs with the source pkg documented. - Aqua stale_deps: FIXED -- DiffEqCallbacks was declared in [deps] but never used anywhere in src or tests; removed from root [deps]/[compat]. Drops the prior stale_deps @test_broken. - Aqua deps_compat: the prior @test_broken is now stale (deps_compat passes); dropped. - JET: still reports genuine errors in src/plot.jl (RecipesBase.plot has no inferable method for OrbitPlot; DiffEqPhysics.plot/plot! undefined in plot_orbits). JET 0.11 (the `1` lane) surfaces these; JET 0.9 (the only version installable on the `lts` lane) does not. Kept as a static tracked @test_broken (issue #118) rather than run_qa's version-auto-flagging jet_broken, which would Unexpected-Pass on lts and hard-FAIL on `1`. JET dropped from the qa env (no longer run there). - Removed the orphan test/explicit_imports.jl (its two checks, previously run in the Core group, are now part of the QA run_qa six) and the now-unused root ExplicitImports test dep. - qa Project.toml: SciMLTesting compat -> "1.6"; dropped JET and SafeTestsets (unused); kept Aqua (the ambiguities sub-check needs it a direct dep). Verified locally vs released SciMLTesting 1.6.0 (no dev-from-branch): release (Julia 1.12): Quality Assurance 17 pass / 0 fail-error; JET 1 broken. lts (Julia 1.10): Quality Assurance 17 pass / 0 fail-error; JET 1 broken. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 8 ++------ test/explicit_imports.jl | 8 -------- test/qa/Project.toml | 6 +----- test/qa/qa.jl | 44 +++++++++++++++++++++++++++------------- 4 files changed, 33 insertions(+), 33 deletions(-) delete mode 100644 test/explicit_imports.jl diff --git a/Project.toml b/Project.toml index 42e1773..18c451f 100644 --- a/Project.toml +++ b/Project.toml @@ -5,7 +5,6 @@ authors = ["Chris Rackauckas "] [deps] DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" -DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" @@ -15,8 +14,6 @@ StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" [compat] DiffEqBase = "7" -DiffEqCallbacks = "4.16.0" -ExplicitImports = "1" ForwardDiff = "1.0.1" LinearAlgebra = "1" OrdinaryDiffEq = "7" @@ -26,14 +23,13 @@ RecursiveArrayTools = "4" Reexport = "1.2.2" SafeTestsets = "0.1, 1" SciMLBase = "3.1.0" -SciMLTesting = "1" +SciMLTesting = "1.6" StaticArrays = "1" StaticArraysCore = "1.4.3" Test = "1" julia = "1.10" [extras] -ExplicitImports = "7d51a73a-1435-4ff3-83d9-f097790105c7" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -43,4 +39,4 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["ExplicitImports", "LinearAlgebra", "OrdinaryDiffEq", "Random", "SafeTestsets", "SciMLTesting", "StaticArrays", "Test"] +test = ["LinearAlgebra", "OrdinaryDiffEq", "Random", "SafeTestsets", "SciMLTesting", "StaticArrays", "Test"] diff --git a/test/explicit_imports.jl b/test/explicit_imports.jl deleted file mode 100644 index 5d656d2..0000000 --- a/test/explicit_imports.jl +++ /dev/null @@ -1,8 +0,0 @@ -using ExplicitImports -using DiffEqPhysics -using Test - -@testset "ExplicitImports" begin - @test check_no_implicit_imports(DiffEqPhysics) === nothing - @test check_no_stale_explicit_imports(DiffEqPhysics) === nothing -end diff --git a/test/qa/Project.toml b/test/qa/Project.toml index b637fe4..bb98e4b 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -1,8 +1,6 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" DiffEqPhysics = "055956cb-9e8b-5191-98cc-73ae4a59e68a" -JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" -SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -11,8 +9,6 @@ DiffEqPhysics = {path = "../.."} [compat] Aqua = "0.8" -JET = "0.9,0.10,0.11" -SafeTestsets = "0.1, 1" -SciMLTesting = "1" +SciMLTesting = "1.6" Test = "1" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 95cf10f..310e9e1 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,17 +1,33 @@ -using DiffEqPhysics, Aqua, JET, Test +using SciMLTesting, DiffEqPhysics, Test -@testset "Aqua" begin - # stale_deps and deps_compat fail on genuine Project.toml hygiene findings, - # marked @test_broken below pending fix; see - # https://github.com/SciML/DiffEqPhysics.jl/issues/118 - Aqua.test_all(DiffEqPhysics; stale_deps = false, deps_compat = false) - @test_broken false # Aqua stale_deps: DiffEqCallbacks declared but unused — see https://github.com/SciML/DiffEqPhysics.jl/issues/118 - @test_broken false # Aqua deps_compat: Pkg extra missing a [compat] entry — see https://github.com/SciML/DiffEqPhysics.jl/issues/118 -end +run_qa( + DiffEqPhysics; + explicit_imports = true, + ei_kwargs = (; + all_qualified_accesses_are_public = (; + ignore = ( + :GradientConfig, :derivative, :gradient, :gradient!, # ForwardDiff: not public + :plot, # RecipesBase: not public + :depwarn, # Base: not public (Julia 1.10) + ), + ), + all_explicit_imports_are_public = (; + ignore = ( + # SciMLBase: not public (exported/public-declared upstream pending) + :AbstractDynamicalODEProblem, :AbstractSciMLSolution, :FunctionArgumentsError, + :NullParameters, :TooFewArgumentsError, :TooManyArgumentsError, :numargs, + ), + ), + ), +) -@testset "JET" begin - # JET.test_package reports genuine errors in src/plot.jl (RecipesBase.plot / - # DiffEqPhysics.plot not defined); marked @test_broken pending fix, see - # https://github.com/SciML/DiffEqPhysics.jl/issues/118 - @test_broken false # JET: no matching method `plot(::OrbitPlot)` / `DiffEqPhysics.plot` not defined in src/plot.jl — see https://github.com/SciML/DiffEqPhysics.jl/issues/118 +# JET reports genuine errors in src/plot.jl (RecipesBase.plot has no inferable +# method for OrbitPlot, and DiffEqPhysics.plot / plot! are undefined in +# plot_orbits). The finding is JET-analysis-version dependent (JET 0.11 on the +# `1` lane surfaces it; JET 0.9, the only version installable on the `lts` lane, +# does not), so it is kept as a static tracked @test_broken rather than run_qa's +# version-auto-flagging jet_broken (which would Unexpected-Pass on lts and hard-FAIL +# on `1`). Pending fix, see https://github.com/SciML/DiffEqPhysics.jl/issues/118 +@testset "JET (broken)" begin + @test_broken false # JET: no method `plot(::OrbitPlot)` / `DiffEqPhysics.plot` undefined in src/plot.jl — https://github.com/SciML/DiffEqPhysics.jl/issues/118 end From 948c0add22218ea75929e20a534e64d2d5913940 Mon Sep 17 00:00:00 2001 From: Chris Rackauckas Date: Fri, 26 Jun 2026 15:13:00 -0400 Subject: [PATCH 2/2] 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, and SciMLBase 3.24.0 made the previously-internal names public. Verified on Julia 1.12 against registered releases: - all_explicit_imports_are_public: all 7 SciMLBase names (AbstractDynamicalODEProblem, AbstractSciMLSolution, FunctionArgumentsError, NullParameters, TooFewArgumentsError, TooManyArgumentsError, numargs) are now public in SciMLBase 3.24.0 -> ignore-list dropped entirely. - all_qualified_accesses_are_public: dropped :depwarn (public in Base on >=1.11); kept the 4 ForwardDiff names (GradientConfig/derivative/gradient/gradient!) and :plot (RecipesBase), which remain non-public upstream. QA group green on 1.12 (17/17); public-API checks correctly skipped on lts. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/qa.jl | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 310e9e1..c2dcccc 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -8,14 +8,6 @@ run_qa( ignore = ( :GradientConfig, :derivative, :gradient, :gradient!, # ForwardDiff: not public :plot, # RecipesBase: not public - :depwarn, # Base: not public (Julia 1.10) - ), - ), - all_explicit_imports_are_public = (; - ignore = ( - # SciMLBase: not public (exported/public-declared upstream pending) - :AbstractDynamicalODEProblem, :AbstractSciMLSolution, :FunctionArgumentsError, - :NullParameters, :TooFewArgumentsError, :TooManyArgumentsError, :numargs, ), ), ),