Skip to content

Fix master CI: replace removed ODEFunction syms kwarg with SymbolCache via sys#167

Merged
ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-master-ci
May 10, 2026
Merged

Fix master CI: replace removed ODEFunction syms kwarg with SymbolCache via sys#167
ChrisRackauckas merged 2 commits into
SciML:mainfrom
ChrisRackauckas-Claude:fix-master-ci

Conversation

@ChrisRackauckas-Claude
Copy link
Copy Markdown

Please ignore until reviewed by @ChrisRackauckas.

Problem

master is red because DifferenceEquations itself fails to precompile:

ERROR: LoadError: MethodError: no method matching (SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize})(::DifferenceEquations.var"#10#11"; syms::Nothing)
    @ ~/work/DifferenceEquations.jl/DifferenceEquations.jl/src/precompilation.jl:19

(failing run: 25613839863)

The syms keyword on ODEFunction was removed in newer SciMLBase versions; symbol metadata now flows through a SymbolCache attached via the sys keyword (powered by SymbolicIndexingInterface). LinearStateSpaceProblem and QuadraticStateSpaceProblem were still constructing their placeholder ODEFunction with syms = syms, which fails as soon as the deps resolve to a SymbolicIndexingInterface-era SciMLBase.

Fix

  • In LinearStateSpaceProblem / QuadraticStateSpaceProblem, keep the user-facing syms = ... keyword for backwards compatibility, but translate to sys = syms === nothing ? nothing : SymbolCache(collect(syms)) when constructing the placeholder ODEFunction.
  • Add SymbolicIndexingInterface as an explicit dep with compat = "0.3" and import SymbolCache explicitly (so ExplicitImports checks still pass).

Verification

  • Pkg.precompile() now succeeds on Julia 1.10 and 1.12.
  • The DataFrame test from test/sciml_interfaces.jl still produces the expected column names:
    prob = LinearStateSpaceProblem(...; syms = (:a, :b))
    df = DataFrame(solve(prob))
    propertynames(df) == [:timestamp, :a, :b]  # passes
  • The :plotting given noise testset (also from sciml_interfaces.jl) now runs and passes.

Other downstream test failures observed locally (MethodError: no method matching size(::ZeroTangent) in RecursiveArrayToolsZygoteExt, ensemble plotting BoundsError) are independent issues unmasked by precompilation working again — they'll be addressed in follow-up PRs to keep this one focused on unbreaking master.

Test plan

  • CI passes on Julia 1, 1.10 (lts), and pre

🤖 Generated with Claude Code

The `syms` keyword was removed from `ODEFunction` in newer SciMLBase
versions, causing `DifferenceEquations` itself to fail to precompile
on master with `MethodError: no method matching ODEFunction{false,
AutoSpecialize}(...; syms=...)`. SymbolicIndexingInterface's
`SymbolCache` is now the supported way to attach state symbol names
and is consumed via the `sys` keyword.

Translate `syms = ...` (still accepted on `LinearStateSpaceProblem`/
`QuadraticStateSpaceProblem` for backwards compatibility) into
`sys = SymbolCache(collect(syms))` when constructing the placeholder
`ODEFunction`. Add `SymbolicIndexingInterface` as an explicit
dependency.

Verified `DataFrame(sol)` still produces `[:timestamp, :a, :b]`
column names as expected by `test/sciml_interfaces.jl`.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
The new SymbolicIndexingInterface 0.3 dependency added in this PR is
incompatible with the DiffEqBase v6 / RecursiveArrayTools v2 stack the
docs project was pinned to (RAT v2 only allows SII 0.1-0.2.2). Widen
docs DiffEqBase compat to "6.145, 7" so it matches the main package.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
@ChrisRackauckas ChrisRackauckas marked this pull request as ready for review May 10, 2026 21:18
@ChrisRackauckas ChrisRackauckas merged commit 63f7236 into SciML:main May 10, 2026
7 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.

2 participants