QA: run_qa v1.6 form + ExplicitImports#122
Open
ChrisRackauckas-Claude wants to merge 4 commits into
Open
Conversation
Convert the hand-rolled test/qa to the SciMLTesting 1.6 run_qa form with ExplicitImports enabled (all 6 checks). - test/qa/qa.jl: single run_qa(SimpleDiffEq; explicit_imports = true, ...) body. This adds Aqua (8 sub-checks, all pass) + the JET test_package typo check (clean, 0 reports) on top of the ExplicitImports checks, replacing the separate hand-rolled explicit_imports_tests.jl (no_implicit_imports + no_stale_explicit_imports only). - ExplicitImports: the 4 newly enabled owner/public checks flag names that SimpleDiffEq imports/accesses through DiffEqBase (which re-exports SciMLBase's solver-extension API and FastBroadcast's @..). These are other packages' non-public names, ignored per-check via ei_kwargs with the source pkg documented. The 2 originally run checks still pass. - root Project.toml: add LinearAlgebra = "1" compat (fixes Aqua deps_compat for the stdlib dep), drop ExplicitImports (now transitive via SciMLTesting), bump SciMLTesting compat to "1.6". - test/qa/Project.toml: add Aqua as a direct dep (Aqua.test_ambiguities spawns a child process that does `using Aqua`, so it must be a direct dep), drop ExplicitImports (transitive via SciMLTesting), bump SciMLTesting to "1.6". - Preserve the existing JET report_opt integrator type-stability tests (renamed jet_tests.jl -> jet_type_stability_tests.jl); these are a distinct, passing check the run_qa test_package mode does not cover. Verified locally against released SciMLTesting 1.6.0 on Julia 1.11 and 1.10 (LTS): QA/qa.jl 18/18, QA/jet_type_stability_tests.jl 8/8, 0 fail/error/broken. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The run_qa JET typo check (newly enabled by this conversion) is clean on Julia 1.10/1.11 (JET 0.9.x) but surfaces 36 reports on Julia 1.12 (JET 0.11.x). The src/ is byte-identical to master, so the findings predate this PR; the conversion only turned the JET check on. One is a genuine latent bug (src/euler/euler.jl:199 reads `length(u)` before `u` is assigned in the in-place interpolant); the rest are `may be undefined` reports on correlated-branch control flow (`q11`, `cur_t`) that JET 0.9 proved safe but JET 0.11 cannot. Gate `jet_broken` on `VERSION >= v"1.12"` so the QA(julia 1 = 1.12) lane records Broken (green) while these stand, and the still-clean 1.10/1.11 lts lanes keep running the hard test_package check. A blanket jet_broken would record an Unexpected-Pass error on 1.10/1.11. The marker auto-flips to an error once the reports are resolved. Tracked in SciML#123. Verified locally (CI-equivalent path-developed SimpleDiffEq, SciMLTesting 1.6.0): QA/qa.jl 18/18 on 1.10 (LTS) and 1.11; 17 pass + 1 broken on 1.12. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…I EI cleanup The make-public releases are live (SciMLBase 3.27.0, DiffEqBase 7.6.0, SciMLTesting 1.7.0). Finish the public-API ExplicitImports cleanup: - Migrate qualified accesses / imports of SciMLBase-owned names that are now public in 3.27.0 off DiffEqBase onto SciMLBase: `build_solution`, `is_diagonal_noise`, `AbstractSDEAlgorithm`, `AbstractODEAlgorithm`, and the method-extended trait predicates (`isadaptive`, `isautodifferentiable`, `allowscomplex`, `allows_arbitrary_number_types`). Add SciMLBase to [deps] and set compat `SciMLBase = "3.27"`. SciMLBase re-exports these identically through DiffEqBase (same function objects), so dispatch and behavior are unchanged (verified with ODE/SDE solves on Julia 1.12). - Bump DiffEqBase floor to "7" (6.x pins SciMLBase 2.x, which predates these public names) in both the package and the QA env; bump QA SciMLTesting to "1.7". - Empty the public-API EI ignore lists (`all_qualified_accesses_are_public`, `all_explicit_imports_are_public`), then restore only the names that remain non-public in their accessed module: `@..` (FastBroadcast's, re-exported by DiffEqBase) and the SciMLBase solver-extension internals that are not among the names SciMLBase declared public (`AbstractODEIntegrator`, `ConstantInterpolation`, `DEIntegrator`, `__init`, `__solve`, `calculate_solution_errors!`, `has_analytic`). `ODE_DEFAULT_NORM` drops out of the lists (now public in DiffEqBase 7.6). The `*_via_owners` ignores are left untouched. Verified Julia 1.12 (public checks run): 17 pass, 1 broken (the pre-existing JET 1.12 marker, SciML#123), 0 fail/error. Verified Julia 1.10 (public checks skip via the SciMLTesting 1.7 >=1.11 gate): 16 pass, 0 fail/error/broken. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Migrate the eight solver-extension names SimpleDiffEq accessed through DiffEqBase (which only re-exports them) to their owner SciMLBase, now that SciMLBase 3.30 declares them public: __init, __solve, has_analytic, calculate_solution_errors!, AbstractODEIntegrator, DEIntegrator, ConstantInterpolation. The re-export shares the owner binding so the change is behavior-preserving (verified solve(SimpleRK4/SimpleEuler/SimpleFunctionMap) produce identical results). Import @.. from its owner FastBroadcast instead of DiffEqBase (added as a direct dep) and use it unqualified so the explicit-import is not stale. With every flagged name now reached through its public owner, all six ExplicitImports checks pass with no ignore lists, so drop the entire ei_kwargs block (and the stale AbstractODEAlgorithm/AbstractSDEAlgorithm/ build_solution/is_diagonal_noise ignore entries, which were already accessed via SciMLBase). The jet_broken=VERSION>=1.12 marker is unrelated to EI and kept (tracked in SciML#123). Verified GROUP=QA on Julia 1.12 (SciMLBase 3.30.0, SciMLTesting 1.7.0): 17 pass / 1 broken (the SciML#123 JET marker) / 0 fail / 0 error. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Please ignore until reviewed by @ChrisRackauckas.
Brings
test/qaonto the SciMLTesting 1.6run_qaform with ExplicitImports enabled (all 6 checks).Changes
test/qa/qa.jl(new): singlerun_qa(SimpleDiffEq; explicit_imports = true, ei_kwargs = ...)body. Replaces the hand-rolledexplicit_imports_tests.jl(which ran onlyno_implicit_imports+no_stale_explicit_imports) and adds the standard Aqua suite + the JETtest_packagetypo check on top of the full ExplicitImports check set.test/qa/explicit_imports_tests.jlremoved (subsumed byrun_qa).test/qa/jet_tests.jl->test/qa/jet_type_stability_tests.jl: the existing JETreport_optintegrator type-stability tests are preserved unchanged. They are a distinct check therun_qatest_packagemode does not cover, and all pass, so they are kept as their own file in the QA group (folder-discovery runs every.jlintest/qa).Project.toml: addLinearAlgebra = "1"compat (fixes the Aquadeps_compatcheck for the stdlib dep — newly run now that Aqua is in the suite); dropExplicitImportsfrom deps/compat/targets (now transitive via SciMLTesting); bumpSciMLTestingcompat to"1.6".test/qa/Project.toml: addAquaas a direct dep (Aqua.test_ambiguitiesspawns a child process that doesusing Aqua, so it must be a direct dep, not just transitive via SciMLTesting); dropExplicitImports(transitive via SciMLTesting); bumpSciMLTestingto"1.6".ExplicitImports findings
The 2 originally run checks (
no_implicit_imports,no_stale_explicit_imports) still pass with no ignores.The 4 newly enabled owner/public checks flag names that
SimpleDiffEqimports/accesses throughDiffEqBase, which re-exports SciMLBase's solver-extension API and FastBroadcast's@..macro. These are other packages' non-public names, so per the conversion policy they are ignored per-check viaei_kwargsignorelists (no source change, no risky refactor), with the owning package documented in comments:@..— owned by / non-public in FastBroadcast (re-exported by DiffEqBase)AbstractODEAlgorithm,AbstractODEIntegrator,AbstractSDEAlgorithm,ConstantInterpolation,DEIntegrator,ODE_DEFAULT_NORM,__init,__solve,build_solution,calculate_solution_errors!,has_analytic,is_diagonal_noise,isadaptive,allows_arbitrary_number_types,allowscomplex,isautodifferentiable— owned by / non-public in SciMLBase (re-exported by DiffEqBase)No
@test_broken,aqua_broken,jet_broken, orei_brokenmarkers are needed: Aqua passes all 8 sub-checks, JETreport_packagereturns 0 reports, and the ExplicitImports findings are resolved by the documented ignore-lists.Verification
Run locally against released SciMLTesting 1.6.0 (Pkg-resolved, no dev-from-branch) on Julia 1.11 and 1.10 (LTS):
0 fail / 0 error / 0 broken on both lanes.
🤖 Generated with Claude Code