From 4c5c9f1cf10e50048c4621b4288de6d19f296099 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Thu, 25 Jun 2026 06:13:06 -0400 Subject: [PATCH 1/3] QA: run_qa v1.6 form + ExplicitImports Convert the hand-rolled test/qa/qa.jl (Aqua.test_all + JET.report_package with manual @test_broken placeholders) onto SciMLTesting 1.6.0's run_qa, and enable the ExplicitImports checks (explicit_imports = true). Preserved tracked-broken findings (issue #70): - Aqua undefined_exports (symbolic_steady_states) -> aqua_broken = (:undefined_exports,) - Aqua stale_deps (ReactionNetworkImporters, PolynomialRoots, ModelingToolkit, SBMLToolkit) -> aqua_broken = (:stale_deps,) - Aqua deps_compat extras (Pkg missing [compat]) -> preserved as the non-broken aqua_kwargs tweak deps_compat = (check_extras = false,) - JET report-mode + @test_broken -> jet_broken = true. Verified locally the finding still reproduces (14 reports) only with the original invocation (target_defined_modules = true, NO target_modules narrowing), so jet_kwargs overrides the run_qa default to drop target_modules. ExplicitImports findings (6 checks vs released SciMLTesting 1.6.0): - no_stale_explicit_imports: FIXED. `using PrecompileTools: @setup_workload, @compile_workload` was imported but never used (no workload block exists); removed the import and dropped PrecompileTools from [deps]/[compat]. - no_implicit_imports: ei_broken. The package `using`s several large deps (Catalyst, Oscar, JuMP, Graphs, DynamicPolynomials, Satisfiability, ...) and relies on ~75 of their exported names implicitly; making each explicit is a large refactor (tracked in issue #70). - all_qualified_accesses_via_owners / all_qualified_accesses_are_public: ignore non-public names accessed from other packages via Mod.name (BasicSymbolic [SymbolicUtils via Symbolics], Library [CDDLib], Optimizer [HiGHS], assemble_oderhs/cycles/get_networkproperties/symmap_to_varmap [Catalyst], n_positive_roots [Hecke]). - all_explicit_imports_via_owners / all_explicit_imports_are_public: pass. Deps: test/qa/Project.toml SciMLTesting compat -> "1.6"; dropped unused SafeTestsets; kept Aqua (ambiguities child-proc needs it direct) and JET. Local verification (Julia 1.10, released SciMLTesting 1.6.0): Quality Assurance | Pass: 13 Broken: 4 Total: 17 (0 Fail, 0 Error) Ignore until reviewed by @ChrisRackauckas. Co-Authored-By: Chris Rackauckas Co-Authored-By: Claude Opus 4.8 (1M context) --- Project.toml | 2 - src/CatalystNetworkAnalysis.jl | 2 - test/qa/Project.toml | 4 +- test/qa/qa.jl | 71 ++++++++++++++++++++++------------ 4 files changed, 48 insertions(+), 31 deletions(-) diff --git a/Project.toml b/Project.toml index 33db05a..dba2e55 100644 --- a/Project.toml +++ b/Project.toml @@ -21,7 +21,6 @@ Nemo = "2edaba10-b0f1-5616-af89-8c11ac63239a" Oscar = "f1435218-dba5-11e9-1e4d-f1a5fab5fc13" Polyhedra = "67491407-f73d-577b-9b50-8179a7c68029" PolynomialRoots = "3a141323-8675-5d76-9d11-e1df1406c778" -PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a" ReactionNetworkImporters = "b4db0fb7-de2a-5028-82bf-5021f5cfa881" SBMLToolkit = "86080e66-c8ac-44c2-a1a0-9adaadfe4a4e" Satisfiability = "160ab843-0bc6-4ba4-9585-b7478b70f443" @@ -47,7 +46,6 @@ Nemo = "0.47, 0.54, 0.56" Oscar = "1.1.1, 1.7" Polyhedra = "0.7.8, 0.8" PolynomialRoots = "1.0.0" -PrecompileTools = "1.2.1" ReactionNetworkImporters = "0.15.1, 1.3" SBMLImporter = "4" SBMLToolkit = "0.1.29" diff --git a/src/CatalystNetworkAnalysis.jl b/src/CatalystNetworkAnalysis.jl index d874e76..ffcaf4c 100644 --- a/src/CatalystNetworkAnalysis.jl +++ b/src/CatalystNetworkAnalysis.jl @@ -1,7 +1,5 @@ module CatalystNetworkAnalysis -using PrecompileTools: @setup_workload, @compile_workload - using Catalyst using Satisfiability # For siphon detection diff --git a/test/qa/Project.toml b/test/qa/Project.toml index 437192e..2a8a32a 100644 --- a/test/qa/Project.toml +++ b/test/qa/Project.toml @@ -2,7 +2,6 @@ Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" CatalystNetworkAnalysis = "5fe4a9df-d2e2-44a6-8bda-0abe10269b5a" JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" -SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SciMLTesting = "09d9d899-5365-40a9-917a-5f67fddea283" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -12,7 +11,6 @@ CatalystNetworkAnalysis = {path = "../.."} [compat] Aqua = "0.8" JET = "0.9, 0.10, 0.11" -SafeTestsets = "0.0.1, 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 6f7a342..6827382 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -1,26 +1,49 @@ -using CatalystNetworkAnalysis, Aqua, JET +using SciMLTesting, CatalystNetworkAnalysis, JET using Test -@testset "Aqua" begin - # undefined_exports, stale_deps and the deps_compat extras check disabled: - # genuine findings tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 - # (marked @test_broken below). All other Aqua sub-checks still run and pass. - Aqua.test_all( - CatalystNetworkAnalysis; - undefined_exports = false, - stale_deps = false, - deps_compat = (check_extras = false,), - ) - @test_broken false # Aqua undefined_exports: symbolic_steady_states — tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 - @test_broken false # Aqua stale_deps: ReactionNetworkImporters, PolynomialRoots, ModelingToolkit, SBMLToolkit — tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 - @test_broken false # Aqua deps_compat extras: Pkg missing [compat] — tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 -end - -@testset "JET" begin - # JET reports genuine errors (Nemo.ZZMatrix no-matching-method, undefined - # bindings) tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 — - # run in report mode and @test_broken the assertion so QA stays green and - # auto-flags once fixed. - rep = JET.report_package(CatalystNetworkAnalysis; target_defined_modules = true) - @test_broken isempty(JET.get_reports(rep)) # JET: 12 possible errors — tracked in https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 -end +# deps_compat keeps deps/weakdeps/julia checks running but disables the extras +# check: no [compat] for the `Pkg` extra — tracked in +# https://github.com/SciML/CatalystNetworkAnalysis.jl/issues/70 +# +# aqua_broken sub-checks (tracked in issue #70): +# undefined_exports: symbolic_steady_states exported but flagged undefined +# stale_deps: ReactionNetworkImporters, PolynomialRoots, ModelingToolkit, SBMLToolkit +# +# jet_broken: ~14 possible errors (report mode + @test_broken) — issue #70 +# +# ExplicitImports: +# no_implicit_imports is ei_broken — the package `using`s several large +# dependencies (Catalyst, Oscar, JuMP, Graphs, DynamicPolynomials, +# Satisfiability, ...) and relies on ~75 of their exported names implicitly; +# making every one explicit is a large refactor tracked in issue #70. +# The qualified-access ignore-lists below are names that are not public in +# their *source* packages (other people's packages) but are accessed +# intentionally via Mod.name; ignored per ExplicitImports' public-API checks. +run_qa( + CatalystNetworkAnalysis; + explicit_imports = true, + # jet_broken uses report_package; match the original invocation + # (target_defined_modules only, no target_modules narrowing) so the genuine + # ~14 reports are still surfaced as @test_broken rather than filtered out. + jet_kwargs = (; target_defined_modules = true), + aqua_kwargs = (; deps_compat = (check_extras = false,)), + aqua_broken = (:undefined_exports, :stale_deps), + jet_broken = true, + ei_kwargs = (; + # BasicSymbolic is owned by SymbolicUtils, re-exported by Symbolics. + all_qualified_accesses_via_owners = (; ignore = (:BasicSymbolic,)), + all_qualified_accesses_are_public = (; + ignore = ( + :BasicSymbolic, # SymbolicUtils (via Symbolics) + :Library, # CDDLib + :Optimizer, # HiGHS + :assemble_oderhs, # Catalyst + :cycles, # Catalyst + :get_networkproperties, # Catalyst + :n_positive_roots, # Hecke + :symmap_to_varmap, # Catalyst + ), + ), + ), + ei_broken = (:no_implicit_imports,), +) From 2a42f10b470eaa455ba1d03b9b9157bd1b85c121 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 28 Jun 2026 08:02:47 -0400 Subject: [PATCH 2/3] QA: migrate re-export-gap accesses to public owners + drop now-public ignores Co-Authored-By: Chris Rackauckas --- src/CatalystNetworkAnalysis.jl | 2 ++ src/utils.jl | 2 +- test/qa/qa.jl | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/CatalystNetworkAnalysis.jl b/src/CatalystNetworkAnalysis.jl index ffcaf4c..33ec7d4 100644 --- a/src/CatalystNetworkAnalysis.jl +++ b/src/CatalystNetworkAnalysis.jl @@ -21,6 +21,8 @@ using MixedSubdivisions, DynamicPolynomials using Polyhedra import CDDLib +import SymbolicUtils + include("persistence.jl") export ispersistent, minimalsiphons, iscritical, isconservative, isconsistent include("concordance.jl") diff --git a/src/utils.jl b/src/utils.jl index 0848f08..92a9059 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -133,7 +133,7 @@ function ratematrix(rs::ReactionSystem, rates::Vector{T} = reactionrates(rs)) wh complexes, D = reactioncomplexes(rs) n = length(complexes) rxns = reactions(rs) - ratematrix = (T <: Symbolics.BasicSymbolic) ? zeros(Any, n, n) : zeros(T, n, n) + ratematrix = (T <: SymbolicUtils.BasicSymbolic) ? zeros(Any, n, n) : zeros(T, n, n) for r in 1:length(rxns) rxn = rxns[r] diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 6827382..934ea58 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -34,7 +34,6 @@ run_qa( all_qualified_accesses_via_owners = (; ignore = (:BasicSymbolic,)), all_qualified_accesses_are_public = (; ignore = ( - :BasicSymbolic, # SymbolicUtils (via Symbolics) :Library, # CDDLib :Optimizer, # HiGHS :assemble_oderhs, # Catalyst From 632918b2aa585b4222e76fc8314672d21e31e0f4 Mon Sep 17 00:00:00 2001 From: ChrisRackauckas-Claude Date: Sun, 28 Jun 2026 10:46:51 -0400 Subject: [PATCH 3/3] QA: thorough EI ignore re-clean (drop stale incl via_owners, migrate non-public re-exports) Co-Authored-By: Chris Rackauckas --- test/qa/qa.jl | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/qa/qa.jl b/test/qa/qa.jl index 934ea58..93d2ca4 100644 --- a/test/qa/qa.jl +++ b/test/qa/qa.jl @@ -30,8 +30,6 @@ run_qa( aqua_broken = (:undefined_exports, :stale_deps), jet_broken = true, ei_kwargs = (; - # BasicSymbolic is owned by SymbolicUtils, re-exported by Symbolics. - all_qualified_accesses_via_owners = (; ignore = (:BasicSymbolic,)), all_qualified_accesses_are_public = (; ignore = ( :Library, # CDDLib