QA: run_qa v1.6 form + ExplicitImports#542
Merged
ChrisRackauckas merged 4 commits intoJul 3, 2026
Merged
Conversation
Convert the hand-rolled QA suite (test/jet/runtests.jl: manual Aqua + ExplicitImports + JET) onto the SciMLTesting v1.6 run_qa folder model under test/qa, and enable the full ExplicitImports check set. - test/qa/qa.jl: run_qa(Sundials; explicit_imports = true, ...). Aqua keeps the NVector piracies treat_as_own. The six ExplicitImports checks now run; the new owners/public checks are satisfied with per-check ignore-lists for names owned by / non-public in upstream deps (DiffEqBase re-exporting SciMLBase, SciMLBase internals, ReturnCode members, DataStructures, Base), documented by source package. - JET: kept as the prior narrow report_call constructor smoke test (version- stable, green on LTS and Julia 1). run_qa's whole-package report_package JET is version-divergent (JET 0.11 flags guarded conditionally-assigned locals in __init that JET 0.9 does not), so it is neither green nor broken on both CI lanes; left as jet = false and tracked in SciML#541 for a separate solver-init fix. - test/qa/Project.toml: SciMLTesting compat 1.6; ExplicitImports dropped (transitive via SciMLTesting); Aqua kept (ambiguities child-proc) and JET kept (constructor smoke); Sundials pinned via [sources]. - QA.yml + dependabot.yml point at test/qa; remove dead test/jet, test/jet_test.jl, test/qa_test.jl duplicates. Verified locally against released SciMLTesting 1.6.0 (no dev-from-branch): Julia 1.10 (lts) and 1.12 (release "1") both run 17 QA (Aqua + 6 EI) + 5 JET checks with 0 fail / 0 error / 0 broken. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…se 3.24) The two public-API ExplicitImports checks (all_qualified_accesses_are_public, all_explicit_imports_are_public) now run only on Julia >= 1.11 (SciMLTesting 1.7), so the per-repo VERSION-gated ignore blocks are obsolete (none existed here). Against the registered releases on 1.12, cconvert/unsafe_convert are now public in Base, and the SciMLBase.ReturnCode names (ConvergenceFailure, Default, Failure, InitialFailure, MaxIters, Success, Terminated, Unstable) are now public via SciMLBase 3.24.0 -- drop all 10 from all_qualified_accesses_are_public. The remaining qualified-access/explicit-import ignores stay: those names are accessed through DiffEqBase's re-export of SciMLBase, and the public-API check evaluates publicness in the import-site module (DiffEqBase 7.5.7), which has not re-declared them public even where SciMLBase now does. Verified QA green on 1.12 (17/17) and on 1.10 LTS (15/15, public checks skipped); JET testset 5/5 both. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The make-public releases are live: SciMLBase 3.27.0, DiffEqBase 7.6.0, and SciMLTesting 1.7.0 (which gates the two public-API ExplicitImports checks to Julia >= 1.11). Finish the EI public-API cleanup against those registered releases. Caller-migration (src/): rewrite the SciMLBase-owned names that are now public in SciMLBase 3.27 from the DiffEqBase re-export to SciMLBase directly -- AbstractODEAlgorithm, AbstractDAEAlgorithm, AbstractODEProblem, AbstractDAEProblem, AbstractNonlinearProblem, build_solution, has_jac, and check_error!. The __init/__solve method-definition heads stay on DiffEqBase (those names are not public in SciMLBase), and AbstractSteadyStateProblem stays on DiffEqBase as well (still non-public). qa.jl: empty all_qualified_accesses_are_public and all_explicit_imports_are_public, then restore only the names the public checks still flag on Julia 1.12 against the registered releases -- @pure (Base), FasterForward (DataStructures), the SciMLBase-owned solver-extension hooks SciMLBase 3.27 has not yet declared public (AbstractODEIntegrator, AbstractSteadyStateProblem, HermiteInterpolation, LinearInterpolation, __init, __solve, calculate_solution_errors!, has_analytic, has_reinit, initialize_dae!, postamble!, solution_new_retcode), and AbstractSciMLOperator (SciMLOperators, via SciMLBase re-export, not yet public). The previously-ignored DiffEqBase-owned names (CallbackCache, ODE_DEFAULT_PROG_MESSAGE, apply_callback!, apply_discrete_callback!, find_first_continuous_callback, get_tstops*, max_vector_callback_length) are now public in DiffEqBase 7.6 and pass without an ignore. The *_via_owners ignores are left untouched. Verified Julia 1.12 (public checks run): Quality Assurance 17/17, JET 5/5. Verified Julia 1.10 LTS (public checks skipped): Quality Assurance 15/15, JET 5/5. Resolved against SciMLBase 3.27.0, DiffEqBase 7.6.0, SciMLTesting 1.7.0 on both. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…non-public re-exports) 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.
Converts the hand-rolled QA suite (
test/jet/runtests.jl: manual Aqua + ExplicitImports + JET) onto the SciMLTesting v1.6run_qafolder model undertest/qa, and enables the full ExplicitImports check set.What changed
test/qa/qa.jl—run_qa(Sundials; explicit_imports = true, ...). Aqua keeps theNVectortreat_as_ownpiracies tweak. All six ExplicitImports checks now run (previously onlyno_implicit_imports,no_stale_explicit_imports, andall_explicit_imports_via_ownersran).test/qa/Project.toml—SciMLTestingcompat1.6;ExplicitImportsdropped (transitive via SciMLTesting);Aquakept (ambiguities child-proc) andJETkept (constructor smoke);Sundialspinned via[sources].QA.yml/dependabot.yml— point attest/qa; remove the deadtest/jet,test/jet_test.jl,test/qa_test.jlduplicates.ExplicitImports findings
no_implicit_importsandno_stale_explicit_importspass unchanged (no fixes needed). The four owners/public checks are satisfied with per-checkignore-lists, all for names owned by / non-public in upstream deps that Sundials legitimately uses (they will stop being flagged once those packages mark the names public):all_explicit_imports_via_owners:AbstractSciMLOperator(owner SciMLOperators, imported via the SciMLBase re-export).all_qualified_accesses_via_owners: 20 SciMLBase-owned names accessed asDiffEqBase.X(DiffEqBase re-exports SciMLBase).all_qualified_accesses_are_public: 47 non-public names — DiffEqBase, SciMLBase,SciMLBase.ReturnCodemembers, DataStructures (FasterForward), and threeBasenames (@pure,cconvert,unsafe_convert).all_explicit_imports_are_public:AbstractSciMLOperator(SciMLBase),get_tstops,get_tstops_array(DiffEqBase).No names were dropped: all are still used; the lists only mark them as known upstream-non-public.
JET
Kept as the prior narrow
JET.report_callconstructor smoke test (version-stable, green on LTS and Julia1);run_qais called withjet = false.run_qa's default whole-packagereport_packageJET is version-divergent — JET 0.11 (Julia >= 1.11) flags guarded conditionally-assigned locals in the solver__initpaths that JET 0.9 (LTS) does not — so neitherjet = truenorjet_broken = trueis green-or-broken on both CI lanes. Tracked in #541 for a separate, full-suite-validated solver-init fix.Verification
Run locally against released SciMLTesting 1.6.0 (Pkg resolves it; no dev-from-branch):
Quality Assurance | 17 pass+JET static analysis | 5 pass1):Quality Assurance | 17 pass+JET static analysis | 5 pass0 fail / 0 error / 0 broken on both.
🤖 Generated with Claude Code