test: restore working MTKBase BVP assertions - #4843
Conversation
|
Investigation scratchpad:
|
|
CI classification: the non-Runic reds are all present on the exact base commit The Runic failure is also reproduced on clean master and is confined to |
|
More specifically, the Catalyst job’s seven errors are all “Unexpected Pass” from stale |
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
7cbbc00 to
cbd487c
Compare
|
Independent clean-main audit after rebasing onto current master:
The lease-protected rebase push updated the branch from |
The "Parameter estimation" testset in bvproblem.jl accounts for essentially the entire memory peak of the file, and is the cause of the MTKBase/InterfaceII CI runner OOM. `dt = 1e-3` over `tspan = (0, 1)` builds a 1001-point collocation mesh — 4004 Ipopt variables and 26010 Lagrangian-Hessian nonzeros — differentiated by a fallback sparse `SecondOrder` AD. That mesh dates from when the test was added (2026-02-26), while the MIRK interpolation bug fixed by BoundaryValueDiffEq.jl SciML#452 was still present; a fine mesh limits interpolation error at the 51 `EvalAt` cost points. SciML#452 merged 2026-03-30 and the `dt` was never revisited. It now buys nothing: dt = 1e-3 7.20 GiB 3m34 α = 1.8000275184 γ = 6.4998637712 dt = 1e-2 2.15 GiB 1m02 α = 1.8000278445 γ = 6.4998629391 Same answer to six significant figures for 70% less memory and 71% less time. Also remove the `if @isdefined(ModelingToolkit)` gate. It currently makes CI error rather than skip: the `else` branch is `@test_broken solve(...)`, and the solve now succeeds and returns an ODESolution, which `@test_broken` reports as "Expression evaluated to non-Boolean". This is the same failure mode SciML#4843 fixed, at a fifth site it missed. The gated-off path is not broken — run with only ModelingToolkitBase loaded, both assertions pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The "Parameter estimation" testset in bvproblem.jl accounts for essentially the entire memory peak of the file, and is the cause of the MTKBase/InterfaceII CI runner OOM. `dt = 1e-3` over `tspan = (0, 1)` builds a 1001-point collocation mesh — 4004 Ipopt variables and 26010 Lagrangian-Hessian nonzeros — differentiated by a fallback sparse `SecondOrder` AD. That mesh dates from when the test was added (2026-02-26), while the MIRK interpolation bug fixed by BoundaryValueDiffEq.jl SciML#452 was still present; a fine mesh limits interpolation error at the 51 `EvalAt` cost points. SciML#452 merged 2026-03-30 and the `dt` was never revisited. It now buys nothing: dt = 1e-3 7.20 GiB 3m34 α = 1.8000275184 γ = 6.4998637712 dt = 1e-2 2.15 GiB 1m02 α = 1.8000278445 γ = 6.4998629391 Same answer to six significant figures for 70% less memory and 71% less time. Also remove the `if @isdefined(ModelingToolkit)` gate. It currently makes CI error rather than skip: the `else` branch is `@test_broken solve(...)`, and the solve now succeeds and returns an ODESolution, which `@test_broken` reports as "Expression evaluated to non-Boolean". This is the same failure mode SciML#4843 fixed, at a fifth site it missed. The gated-off path is not broken — run with only ModelingToolkitBase loaded, both assertions pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ignore this PR until it has been reviewed by @ChrisRackauckas.
Summary
Cause
Commit f71cc7d wrapped four successful BVP solves in Test.@test_broken. A successful solve returns a solution object, not a Boolean, so Test reports each case as an error rather than a broken test.
This is the same failure in BoundaryValueDiffEq clean master run https://github.com/SciML/BoundaryValueDiffEq.jl/actions/runs/30342212061 and PR #541. The PR #541 shooting changes are unrelated.
Verification
Using Julia 1.11 and the official ModelingToolkitBase InterfaceII group with local BoundaryValueDiffEqCore, BoundaryValueDiffEqMIRK, and BoundaryValueDiffEqAscher:
A bisect from 3c2e4a7 to a35a814 identified f71cc7d as the first bad commit.
The changed file passes Runic and git diff --check. Whole-repository Runic currently fails on unchanged master in src/systems/clock_inference.jl; that independent FormatCheck regression is intentionally not mixed into this focused PR.