Skip to content

Raise SciMLOperators public API floors and resolve cache ambiguity - #1060

Merged
ChrisRackauckas merged 3 commits into
SciML:masterfrom
ChrisRackauckas-Claude:agent/raise-scimloperators-public-floor
Jul 13, 2026
Merged

Raise SciMLOperators public API floors and resolve cache ambiguity#1060
ChrisRackauckas merged 3 commits into
SciML:masterfrom
ChrisRackauckas-Claude:agent/raise-scimloperators-public-floor

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Jul 13, 2026

Copy link
Copy Markdown
Member

Ignore this PR until it has been reviewed by @ChrisRackauckas.

Summary

  • require SciMLOperators 1.24, the first registered release that declares AbstractSciMLOperator public, in every subpackage that directly imports it
  • remove the now-obsolete ExplicitImports allowlist entries from NonlinearSolveBase, NonlinearSolveQuasiNewton, and SciMLJacobianOperators
  • add the missing Nothing specialization for JacobianCache{<:AbstractSciMLOperator}, resolving its intersection with the generic deprecated call method
  • cover the operator-cache dispatch with an in-place MatrixOperator regression test
  • patch-bump NonlinearSolveBase to 2.34.3, NonlinearSolveFirstOrder to 2.2.1, NonlinearSolveQuasiNewton to 1.14.1, and SciMLJacobianOperators to 0.1.16

SciMLOperators commit a28a25ac5f81e3922351fecc2535e2b264ec8f2c made AbstractSciMLOperator public. Registry and tree-history verification show that release 1.23.0 predates that commit and release 1.24.0 contains it. Establishing that public API floor permits the operator-specific disambiguation without relying on dependency internals.

The minimum-compatible sublibrary environments also depend on julia-actions/julia-downgrade-compat#55, stacked on #54, so direct local runtime dependencies are retained and resolved while producing the downgraded manifest.

Process

  1. Reproduced NonlinearSolveBase QA on exact upstream 579761dd26ccd522fae20b29cef8e9ed945569c5.
  2. Traced the owner-package public declaration and mapped it to the first registered release.
  3. Located every direct AbstractSciMLOperator consumer and raised its SciMLOperators floor.
  4. Removed only the corresponding QA exceptions and patch-bumped the affected subpackages.
  5. Added the operator-cache method required to make the dispatch lattice unambiguous and exercised it directly.
  6. Exercised minimum-compatible and latest-compatible environments locally.

Local verification

  • Final combined head, Julia 1.10.11 minimum-compatible NonlinearSolveBase Core: 112/112 passed, including the operator-cache regression 1/1.
  • Julia 1.10 minimum-compatible downgrade (alldeps), with SciMLOperators 1.24.0:
    • SciMLJacobianOperators Core passed.
    • NonlinearSolveQuasiNewton Core passed.
    • NonlinearSolveFirstOrder Core passed with NonlinearSolveBase 2.34.2 and SciMLJacobianOperators 0.1.16; its largest matrix, TrustRegion, passed 1596/1596 and the final SciMLOperator Jacobian set passed 14/14.
  • Julia 1.12 latest-compatible NonlinearSolveBase Core: 112/112 passed, including the operator-cache regression 1/1.
  • SciMLJacobianOperators QA: 16/16 passed.
  • NonlinearSolveQuasiNewton QA: 16/16 passed.
  • Final combined head, whole-repository Runic: all 372 tracked Julia files passed.
  • Final combined head, NonlinearSolveBase QA: method ambiguity passed 1/1 and all_explicit_imports_are_public passed 1/1. The complete result is 17 passed / 1 errored because upstream master independently accesses the non-public FunctionWrappersWrappers.SingleCacheStorage; that public-API migration remains separate work.

Require the first SciMLOperators release that declares AbstractSciMLOperator public, then remove the obsolete QA allowlist entry.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Align the subpackages that directly use AbstractSciMLOperator with the first release that declares it public, and remove the corresponding QA exceptions.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Add the missing Nothing-specialized method for AbstractSciMLOperator caches and cover that dispatch directly.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title Raise SciMLOperators public API floor Raise SciMLOperators public API floors and resolve cache ambiguity Jul 13, 2026
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Validation record for final head fe95e3ad8f466dba0655fce97b6f4c71651bcd4e:

  • Julia 1.10.11 minimum-compatible NonlinearSolveBase Core: 112/112 passed; operator-cache regression 1/1.
  • Julia 1.10 minimum-compatible SciMLJacobianOperators, NonlinearSolveQuasiNewton, and NonlinearSolveFirstOrder Core: passed. FirstOrder included TrustRegion 1596/1596 and SciMLOperator Jacobians 14/14.
  • SciMLJacobianOperators and NonlinearSolveQuasiNewton QA: 16/16 each.
  • Whole-repository Runic: 372/372 files passed.
  • NonlinearSolveBase QA: 17 passed / 1 errored. Method ambiguity passed 1/1 and all_explicit_imports_are_public passed 1/1. The sole error is the independently reproduced upstream-master use of non-public FunctionWrappersWrappers.SingleCacheStorage; it is not skipped or allowlisted here.

The minimum-compatible path-source resolution used the fix in julia-actions/julia-downgrade-compat#55, stacked on #54.

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

Early exact-head CI downgrade classification for fe95e3ad8f466dba0655fce97b6f4c71651bcd4e:

  • Root Downgrade Core (job 86897330129) resolves registry SciMLOperators 1.22.0 as an explicit requirement, then Pkg.test develops in-tree NonlinearSolveQuasiNewton 1.14.1, whose corrected public-API floor requires SciMLOperators >=1.24; resolution therefore reports no versions left.
  • SimpleNonlinearSolve downgrade (job 86897427666) has the same shape through its in-tree NonlinearSolveBase 2.34.3 dependency: the generated manifest pins SciMLOperators 1.22.0, while the developed path package requires >=1.24.

These are the direct path-source dependency-resolution cases fixed and covered by julia-actions/julia-downgrade-compat#55 (stacked on #54). #55 passes its full 136/136 local suites on Julia 1.10/current and both exact-head CI jobs. The NonlinearSolve code/tests did not execute in these two failing jobs; this is the declared action prerequisite, not a runtime failure. Remaining exact-head jobs continue to run.

@ChrisRackauckas
ChrisRackauckas marked this pull request as ready for review July 13, 2026 19:36
@ChrisRackauckas
ChrisRackauckas merged commit 41681c5 into SciML:master Jul 13, 2026
91 of 101 checks passed

Copy link
Copy Markdown
Member Author

Terminal CI audit for fe95e3ad8:

  • All six root Core failures reach the pre-existing Broyden robustness regression. Generalized Rosenbrock function | alg #4 returns residual 4.4 instead of <= 1e-3; the Ubuntu current/LTS jobs also see the already documented environment-sensitive Brown unexpected pass. The generalized-Rosenbrock root and focused fix are in Restore dense pinv fallback for inverse Jacobian init #1058, while the Brown bookkeeping variability is tracked in Brown bad-Broyden broken test is environment-sensitive #1056. These jobs do not exercise a failure in this PR's SciMLOperators floor/ambiguity changes.
  • NonlinearSolveBase QA now passes the JacobianCache ambiguity added here (Method ambiguity | 1 Pass). Its sole remaining error is the clean-main public-API violation FunctionWrappersWrappers.SingleCacheStorage, whose owning-package prerequisite is FunctionWrappersWrappers.jl#70.
  • CUDA reports DimensionMismatch: array could not be broadcast to match destination at test/gpu/cuda_tests__item1.jl:34 and :44. Clean master 579761dd2 has the exact same two errors in job 86844917359; this PR's corresponding job is 86897553024. A separate clean-main reproduce/bisect/fix audit is queued; no GPU assertion is being changed or silenced here.
  • The two root downgrade jobs remain the previously classified resolver mismatch: the old action pins SciMLOperators 1.22 before the local sublibraries requiring 1.24 are developed, so package tests never start. [Stacked on #54] Resolve direct path-source dependencies julia-actions/julia-downgrade-compat#55 is the workflow prerequisite.

Every intended sublibrary Core/QA lane relevant to the changed floors passed, along with downstream, documentation, Runic, and spell checks. This comment only classifies observed logs; it does not suppress any failure.

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