Skip to content

Allow LinearSolve 5 in root tests - #571

Merged
ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:agent/allow-linearsolve-5-tests
Jul 28, 2026
Merged

ChrisRackauckas merged 1 commit into
SciML:masterfrom
ChrisRackauckas-Claude:agent/allow-linearsolve-5-tests

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member

Please ignore this draft until reviewed by @ChrisRackauckas.

Summary

Diagnosis

The failing downstream job developed current NonlinearSolveFirstOrder, which requires LinearSolve 5, while the BoundaryValueDiffEq root test project restricted LinearSolve to major 3. A clean resolver replay reproduced the empty intersection.

A resolver bisect from NonlinearSolve commit c802a160 to current master identified 6a7687f5 (SciML/NonlinearSolve.jl#1039) as the first commit that exposes the stale ceiling. That NonlinearSolve change legitimately needs LinearSolve 4.3 or newer for its linear-solve workspace behavior, so the owner fix is to broaden this test-only BoundaryValueDiffEq range rather than revert NonlinearSolve.

Local validation

  • Exact downstream replay with current NonlinearSolve master paths (1d51c8dac), NonlinearSolveFirstOrder 2.2.4, and LinearSolve 5.2.0: GROUP=All Pkg.test() passed; observed root totals were 163 pass and 4 unchanged pre-existing broken cases, with outer Pkg.test reporting tests passed.
  • Clean one-line tree with no path dependencies in Project.toml independently resolved LinearSolve 5.2.0, NonlinearSolveFirstOrder 2.2.2, NonlinearSolveBase 2.37.0, and SciMLJacobianOperators 0.1.16; GROUP=All Pkg.test() passed with the same observed root totals and outer success.
  • Whole-repository Runic check passed.
  • git diff --check passed.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Diagnostic scratchpad:

  1. Reproduced the NonlinearSolve #1100 BoundaryValueDiffEq/All failure on clean BoundaryValueDiffEq master before tests: NonlinearSolveFirstOrder 2.2.4 fixed LinearSolve to major 5 while the root test Project allowed only 3.87.
  2. Resolver-bisected NonlinearSolve from c802a160 to current master. First exposing commit: 6a7687f542cde52b4bfeef5b473c6156c8d453a1 (#1039), which intentionally raises the LinearSolve floor for the quasi-Newton linear workspace.
  3. Kept the owner patch to the single test-only compat line; no source or runtime dependency changes.
  4. Ran both the exact current-master path replay and a second unpolluted registered-dependency GROUP=All run. Both outer Pkg.test processes exited successfully; Runic and diff checks also passed.

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1.11)

Time benchmarks
master b49ec00... master / b49ec00...
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK2() 0.588 ± 0.0028 s 0.582 ± 0.0041 s 1.01 ± 0.0087
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK3() 12.2 ± 0.23 ms 12.2 ± 0.18 ms 1 ± 0.024
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK4() 2.67 ± 0.076 ms 2.66 ± 0.082 ms 1 ± 0.042
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK5() 3.21 ± 0.082 ms 3.19 ± 0.088 ms 1.01 ± 0.038
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK6() 1.54 ± 0.049 ms 1.54 ± 0.045 ms 0.999 ± 0.043
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = false) 1.53 ± 0.07 ms 1.51 ± 0.059 ms 1.01 ± 0.062
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = true) 3.1 ± 0.098 ms 3.14 ± 0.097 ms 0.987 ± 0.044
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = false) 0.0389 ± 0.0026 s 0.0396 ± 0.0027 s 0.982 ± 0.095
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = true) 0.0591 ± 0.0019 s 0.0592 ± 0.002 s 0.999 ± 0.046
Simple Pendulum/IIP/Shooting(Tsit5()) 0.18 ± 0.073 ms 0.185 ± 0.072 ms 0.974 ± 0.55
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK2() 0.721 ± 0.011 s 0.732 ± 0.0039 s 0.985 ± 0.017
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK3() 15.4 ± 4.1 ms 15.7 ± 4.2 ms 0.984 ± 0.37
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK4() 3.19 ± 0.15 ms 3.2 ± 0.14 ms 0.997 ± 0.063
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK5() 3.86 ± 0.23 ms 3.85 ± 0.2 ms 1 ± 0.08
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK6() 1.86 ± 0.11 ms 1.85 ± 0.1 ms 1 ± 0.081
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = false) 3.25 ± 0.44 ms 3.25 ± 0.42 ms 1 ± 0.19
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = true) 6.33 ± 5.3 ms 6.39 ± 5 ms 0.991 ± 1.1
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = false) 0.0812 ± 0.0033 s 0.0854 ± 0.0027 s 0.952 ± 0.048
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = true) 0.128 ± 0.0037 s 0.126 ± 0.0044 s 1.01 ± 0.046
Simple Pendulum/OOP/Shooting(Tsit5()) 0.595 ± 0.041 ms 0.594 ± 0.039 ms 1 ± 0.095
time_to_load 7.43 ± 0.13 s 7.29 ± 0.06 s 1.02 ± 0.02
Memory benchmarks
master b49ec00... master / b49ec00...
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK2() 0.389 M allocs: 0.0443 GB 0.389 M allocs: 0.0443 GB 1
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK3() 0.0436 M allocs: 4.88 MB 0.0436 M allocs: 4.88 MB 1
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK4() 15.7 k allocs: 1.65 MB 15.7 k allocs: 1.65 MB 1
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK5() 22.1 k allocs: 2.04 MB 22.1 k allocs: 2.04 MB 1
Simple Pendulum/IIP/BoundaryValueDiffEqMIRK.MIRK6() 12.8 k allocs: 1.05 MB 12.8 k allocs: 1.05 MB 1
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = false) 25.5 k allocs: 1.82 MB 25.5 k allocs: 1.82 MB 1
Simple Pendulum/IIP/MultipleShooting(10, Tsit5; grid_coarsening = true) 0.049 M allocs: 3.39 MB 0.049 M allocs: 3.39 MB 1
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = false) 0.553 M allocs: 0.0535 GB 0.553 M allocs: 0.0535 GB 1
Simple Pendulum/IIP/MultipleShooting(100, Tsit5; grid_coarsening = true) 0.833 M allocs: 0.0778 GB 0.833 M allocs: 0.0778 GB 1
Simple Pendulum/IIP/Shooting(Tsit5()) 4.64 k allocs: 0.224 MB 4.64 k allocs: 0.224 MB 1
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK2() 0.89 M allocs: 0.984 GB 0.89 M allocs: 0.984 GB 1
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK3() 0.0932 M allocs: 24.8 MB 0.0932 M allocs: 24.8 MB 1
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK4() 0.0324 M allocs: 3.96 MB 0.0324 M allocs: 3.96 MB 1
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK5() 0.045 M allocs: 4.99 MB 0.045 M allocs: 4.99 MB 1
Simple Pendulum/OOP/BoundaryValueDiffEqMIRK.MIRK6() 25.3 k allocs: 2.17 MB 25.3 k allocs: 2.17 MB 1
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = false) 0.142 M allocs: 10.2 MB 0.142 M allocs: 10.2 MB 1
Simple Pendulum/OOP/MultipleShooting(10, Tsit5; grid_coarsening = true) 0.266 M allocs: 18.7 MB 0.266 M allocs: 18.7 MB 1
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = false) 2.52 M allocs: 0.279 GB 2.52 M allocs: 0.279 GB 1
Simple Pendulum/OOP/MultipleShooting(100, Tsit5; grid_coarsening = true) 3.82 M allocs: 0.404 GB 3.82 M allocs: 0.404 GB 1
Simple Pendulum/OOP/Shooting(Tsit5()) 0.0373 M allocs: 1.69 MB 0.0373 M allocs: 1.69 MB 1
time_to_load 0.159 k allocs: 11.2 kB 0.159 k allocs: 11.2 kB 1

@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review July 28, 2026 08:23
@ChrisRackauckas
ChrisRackauckas merged commit 219b502 into SciML:master Jul 28, 2026
23 of 27 checks passed
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.

3 participants