From 7b440ff6b36d4436bb4322eb1cace6fefd03b2f5 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 07:26:49 -0400 Subject: [PATCH 1/2] QA: run_qa v1.6 form + ExplicitImports Convert test/qa/qa.jl to the SciMLTesting v1.6 run_qa form. Aqua and ExplicitImports are auto-detected from SciMLTesting's own deps; JET is opt-in via `using JET`. Enable ExplicitImports (`explicit_imports = true`) and run all six EI checks. Findings: - no_implicit_imports: kept tracked-broken via `ei_broken = (:no_implicit_imports,)`. The 24 implicit names come from heavy re-exporting umbrellas (ModelingToolkit, DomainSets, OrdinaryDiffEq, Interpolations) whose owner packages (Symbolics/ModelingToolkitBase/IntervalSets/SciMLBase/CommonSolve) reshuffle names across releases, and two flagged names (`limit`, `domain`) are local definitions. Tracked in SciML/PDESystemLibrary.jl#63. - all_qualified_accesses_are_public: ignore `seed!` (Random.seed!, canonical stdlib API not declared `public`). - The other four EI checks pass. JET typo-mode config and its rationale comment are preserved. SciMLTesting compat bumped to "1.6". ExplicitImports is not added to the QA deps (transitive via SciMLTesting); Aqua and JET remain direct deps (Aqua.test_ambiguities child-proc needs Aqua direct; JET runs). Verified locally on Julia 1.10 against released SciMLTesting 1.6.0 with the local package developed by path (mirroring the run_tests folder-model lane): Quality Assurance 17 Pass, 1 Broken, 0 Fail, 0 Error. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- test/qa/Project.toml | 2 +- test/qa/qa.jl | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 8d42226..025db42 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -11,5 +11,5 @@ PDESystemLibrary = {path = "../.."} [compat] SafeTestsets = "0.1, 1" -SciMLTesting = "1" +SciMLTesting = "1.6" julia = "1.10" diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 2c50f5d..5bcefde 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,5 +1,6 @@ -using PDESystemLibrary, Aqua, JET +using PDESystemLibrary, Test using SciMLTesting +using JET # JET runs in `:typo` mode (the SciMLTesting `run_qa` default). The library's # problem builders construct symbolic expressions from `@variables`/`@parameters`; @@ -8,7 +9,23 @@ using SciMLTesting # analysis emits spurious `no matching method found` union-split reports for `+/-/*/cos/sin` # on scalar variables that are always `Num` at runtime. Typo mode still catches real # undefined-name errors without these dependency-inference false positives. +# +# ExplicitImports findings: +# * no_implicit_imports: tracked-broken. The module `using`s the symbolic/solver +# umbrellas (ModelingToolkit, DomainSets, OrdinaryDiffEq, Interpolations) that +# re-export from Symbolics/ModelingToolkitBase/IntervalSets/SciMLBase/CommonSolve, +# so a `using X: name` rewrite would pin owner packages that reshuffle names across +# releases. Two entries (`limit`, `domain`) are also local definitions EI flags +# conservatively, so a blanket explicit-import rewrite would be wrong. Tracked in +# https://github.com/SciML/PDESystemLibrary.jl/issues/63 ; kept broken +# (auto-flags Unexpected Pass once resolved). +# * all_qualified_accesses_are_public: `Random.seed!` is the canonical seeding API +# but the Random stdlib does not declare it `public`; ignored. run_qa( - PDESystemLibrary; Aqua = Aqua, JET = JET, jet = true, - jet_kwargs = (; target_modules = (PDESystemLibrary,), mode = :typo) + PDESystemLibrary; explicit_imports = true, + jet_kwargs = (; target_modules = (PDESystemLibrary,), mode = :typo), + ei_kwargs = (; + all_qualified_accesses_are_public = (; ignore = (:seed!,)), # Random.seed! (Random stdlib, not declared public) + ), + ei_broken = (:no_implicit_imports,) ) From 1e2000ba94cc8a82c031f84bfd0709e9006a8b2c Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sat, 27 Jun 2026 09:24:53 -0400 Subject: [PATCH 2/2] Fix Downgrade CI: raise OrdinaryDiffEqCore floor to 4.4 (ImplicitDiscreteSolve precompile) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Downgrade lane resolved ImplicitDiscreteSolve v2.1.1 + OrdinaryDiffEqCore v4.3.0 on Julia 1.10. IDS 2.1.1's controller.jl:50 references `OrdinaryDiffEqCore.CommonControllerOptions{T, NLPType}` (2 type params), but that type only gained its second parameter in OrdinaryDiffEqCore 4.4.0 — so the floored v4.3.0 gives `too many parameters for type`, failing precompilation of ImplicitDiscreteSolve and cascading into ModelingToolkitBase/ModelingToolkit/ MethodOfLines/PDESystemLibrary. IDS itself fixed this in 2.1.2 by raising its own OrdinaryDiffEqCore compat to 4.4.0, but at min-resolution the broken pair is still reachable transitively. Pin OrdinaryDiffEqCore >= 4.4 (test-target extra + compat) to keep the downgrade resolve on the working pair. Verified on Julia 1.10: the downgrade resolve now picks OrdinaryDiffEqCore 4.4.0 + ImplicitDiscreteSolve 2.1.2, and the full test-target stack (ModelingToolkit, MethodOfLines, OrdinaryDiffEq, PDESystemLibrary) precompiles and loads (all_systems = 427). Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index b7ba701..f49d2cb 100644 --- a/Project.toml +++ b/Project.toml @@ -23,6 +23,7 @@ ModelingToolkit = "9.7.1, 10, 11.27" NonlinearSolve = "4.12" OptimizationOptimJL = "0.3, 0.4" OrdinaryDiffEq = "6.80.0, 7" +OrdinaryDiffEqCore = "4.4" OrdinaryDiffEqSDIRK = "1.7, 2" Random = "1" SafeTestsets = "0.1" @@ -36,9 +37,10 @@ Lux = "b2108857-7c20-44ae-9111-449ecde12c47" MethodOfLines = "94925ecb-adb7-4558-8ed8-f975c56a0bf4" NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e" +OrdinaryDiffEqCore = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "SafeTestsets", "SciMLTesting"] +test = ["Test", "MethodOfLines", "Lux", "NonlinearSolve", "OptimizationOptimJL", "OrdinaryDiffEqCore", "SafeTestsets", "SciMLTesting"]