Skip to content

Fix QA: drop stale Test dep and resolve re-exported integrator accessors#152

Draft
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-fix-stale-test-dep-undefined-exports
Draft

Fix QA: drop stale Test dep and resolve re-exported integrator accessors#152
ChrisRackauckas-Claude wants to merge 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:qa-fix-stale-test-dep-undefined-exports

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

What

Fixes the failing QA CI group (Aqua) and the GPU CI harness error on main.

1. test_stale_deps — stale Test dependency

Test is declared in the package's [deps] but is never using'd anywhere in src/. It only belongs in [extras]/[targets] (where it is already correctly listed for the test target). Removed it from [deps]. Its [compat] entry is kept, since Test is still an extra and Aqua's test_deps_compat requires compat for extras.

2. test_undefined_exportsdu_cache, u_cache, user_cache

These three SciMLBase integrator-interface accessors are exported by many of the packages HighDimPDE using's (DiffEqBase, SciMLBase, the StochasticDiffEq and NonlinearSolve stacks). Because several using'd modules export the same names and the module never disambiguates, the bindings are left ambiguous/unresolved inside HighDimPDE. On Julia 1.12+, an unresolved using-imported name reports isdefined(m, name) == false, so Aqua.test_undefined_exports flags them even though the functions genuinely exist. Importing them explicitly from the canonical source (using DiffEqBase: du_cache, u_cache, user_cache) resolves the bindings to a real definition. They remain part of the public surface re-exported via @reexport using DiffEqBase.

3. GROUP="GPU" CI harness error

The standalone GPU.yml workflow runs the suite with GROUP="GPU", but the v1.2 folder-discovery run_tests() only accepts All/Core/QA plus groups declared in test/test_groups.toml (Core, QA) — so it raised ArgumentError: GROUP="GPU" is not a declared group. GPU is a capability lane, not a folder of files: it runs the same Core test files on a CUDA-equipped runner so the CUDA.functional()-gated testsets in reflect.jl/MCSample.jl self-activate. That cannot be a separate folder, so this switches test/runtests.jl to explicit-args run_tests (the DeepEquilibriumNetworks.jl convention): core = the 9 Core files in their original order; groups = {"GPU" => core_body}; qa = test/qa; all = ["Core"]. GROUP="GPU" now routes to the Core body, exactly matching the pre-v1.2 dispatcher where GPU fell into the non-QA branch. test_groups.toml is unchanged.

No tests were skipped, disabled, or weakened.

Status of every check this PR controls (verified)

On this PR branch CI is green for everything HighDimPDE actually controls:

  • QA (julia 1) ✅, QA (julia lts) ✅ — the Aqua fix above.
  • Core (julia lts, all OSes) ✅ — passes (including the full DeepBSDE AD path).
  • Downgrade (Core) ✅, Runic Format Check ✅, Runic Suggestions ✅, typos/SpellCheck ✅.
  • GPU Tests: with the harness fix the suite now runs and passes on the self-hosted runner (Testing HighDimPDE tests passed). The job's only remaining red is in the post-test codecov/codecov-action step, which crashes with error: could not lock config file /home/<user>/.gitconfig: File exists (exit 255) — a self-hosted-runner infrastructure issue (stale lock on the shared runner $HOME), independent of HighDimPDE source and not silenced by fail_ci_if_error: false because the action errors before the upload. This needs runner-side fixing, not a HighDimPDE change.

Pre-existing, out of scope: Core on Julia 1.12 / 1.13 is a Julia compiler codegen segfault

The Core group on Julia 1.12 (julia 1) and 1.13.0-rc1 (julia pre), all OSes, fails with signal 11 (segfault) — not a HighDimPDE logic bug and not introduced here. It is a Julia 1.12+ LLVM codegen crash while JIT-compiling the Zygote/Tracker adjoint of the DeepBSDE SDE solve.

Reproduced locally on Julia 1.12.6 with CI-identical resolved deps (Flux 0.16.10, Zygote 0.7.11, Tracker 0.2.38, StochasticDiffEq 7.0.0, SciMLSensitivity 7.112.0, SciMLBase 3.21.0, RecursiveArrayTools 4.3.1). The crash signature is identical to CI:

emit_unboxed_coercion at src/intrinsics.cpp:394 [inlined]
emit_unbox at src/intrinsics.cpp:458
emit_condition at src/codegen.cpp:6089
emit_function at src/codegen.cpp:9294
jl_compile_method_internal at src/gf.c:3516
...
neural_sde at src/DeepBSDE.jl:157 [inlined]
predict_n_sde at src/DeepBSDE.jl:179 [inlined]
loss_n_sde at src/DeepBSDE.jl:185 [inlined]
#solve#26 at src/DeepBSDE.jl:193

The exact same code path and deps pass on Julia 1.10 (lts) — the only differentiator is the Julia version, which is set by the central grouped-tests.yml matrix, not by HighDimPDE. There is no dependency to cap (lts is green with identical versions), and lowering the julia compat floor would not be honest (the package works on 1.12 apart from this compiler crash). Tracking this as an upstream Julia codegen bug; out of scope for this QA/CI-harness fix.

Please ignore until reviewed by @ChrisRackauckas.

ChrisRackauckas and others added 2 commits June 15, 2026 10:38
The QA (Aqua) CI group fails on two findings:

- test_stale_deps: `Test` is declared in `[deps]` but never `using`'d in
  `src/`; it belongs only in `[extras]`/`[targets]` (where it already is).
  Removed it from `[deps]` (its `[compat]` entry stays, valid for the extra).

- test_undefined_exports: `du_cache`, `u_cache`, `user_cache` are exported by
  many of the `using`'d packages (DiffEqBase, SciMLBase, the StochasticDiffEq
  and NonlinearSolve stacks), so their bindings are ambiguous/unresolved in
  this module. On Julia 1.12+ an unresolved `using`-imported name reports
  `isdefined == false`, so Aqua flags them even though the functions exist.
  Importing them from the canonical source (DiffEqBase) resolves the bindings;
  they remain part of the public surface re-exported via `@reexport DiffEqBase`.

Verified locally: full Aqua qa.jl testset passes (11/11) on Julia 1.12.6 and
the key checks pass on Julia 1.10.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…n_tests

The GPU.yml workflow runs the suite with GROUP="GPU", but the folder-discovery
run_tests() only accepts All/Core/QA plus groups declared in test_groups.toml
(Core, QA), so it errored: GROUP="GPU" is not a declared group. GPU is a
capability lane, not a folder of files — it runs the *same* Core files on a
CUDA-equipped runner so the CUDA.functional()-gated testsets in reflect.jl /
MCSample.jl self-activate. This cannot be expressed as a separate folder.

Switch to explicit-args run_tests (the DeepEquilibriumNetworks.jl convention):
core = the 9 Core files in their original runtests order; groups = {"GPU" =>
core_body}; qa = test/qa; all = ["Core"]. GROUP=GPU now routes to the Core
body, matching the pre-v1.2 dispatcher where GPU fell into the non-QA branch.

Verified locally on Julia 1.10 against SciMLTesting v1.2: GROUP=GPU -> Core,
GROUP=Core -> Core, GROUP=All -> Core, GROUP=QA -> QA. Runic-clean.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants