Skip to content

build: migrate to Symbolics 7 / SciMLBase 3 / MTKBase stack#125

Merged
oameye merged 7 commits into
mainfrom
symbolicsv7-upgrade
Jul 25, 2026
Merged

build: migrate to Symbolics 7 / SciMLBase 3 / MTKBase stack#125
oameye merged 7 commits into
mainfrom
symbolicsv7-upgrade

Conversation

@oameye

@oameye oameye commented May 25, 2026

Copy link
Copy Markdown
Member

Compat bumps: Symbolics 7, SymbolicUtils 4, SciMLBase 3, OrdinaryDiffEqTsit5 2, OrdinaryDiffEqRosenbrock 2, ModelingToolkitBase 1, HarmonicBalance 0.17, QuestBase 0.4. LinearSolve, NonlinearSolve, and SteadyStateDiffEq are pinned to the versions that widen their SciMLBase compat to 3 (3.75 / 4.17 / 2.10). Bump HSS itself to v0.5.0.

ModelingToolkit weakdep is replaced with ModelingToolkitBase across the SteadyStateDiffEq extension test, which now uses mtkcompile instead of the removed structural_simplify.

Latexify is no longer re-exported from Symbolics 7, so it is added as a direct weakdep and the PlotsExt trigger becomes [Plots, Latexify].

QuantumCumulants extension and its tests (input_output.jl) are temporarily disabled because the latest QC release (0.4.3) caps SymbolicUtils at 3 and SciMLBase at 2. Re-enable when QC supports the new stack.

Symbolics 7's substitute no longer auto-folds numeric Const wrappers, so the numerical extraction points (transform_solutions, Lorentzian_spectrum, LinearResponse response.jl, and TimeEvolution ODEProblem) now go through Symbolics.substitute(...; fold=Val{true}()) plus Symbolics.value (or SymbolicUtils.unwrap_const) to return concrete Float64s.

A [sources] block points test sandboxes at the local HarmonicBalance and QuestBase clones so the upgrade can be validated end to end without registering the bumped versions first.

Checklist

Thank you for contributing to HarmonicSteadyState.jl! Please make sure you have finished the following tasks before finishing the PR.

  • Appropriate tests were added and tested locally by running: make test.
  • Any code changes should be julia formatted by running: make format.
  • All documents (in docs/ folder) related to code changes were updated and able to build locally by running: make docs.

Request for a review after you have completed all the tasks. If you have not finished them all, you can also open a Draft Pull Request to let the others know this on-going work.

Description

Describe the proposed change here.

Related issues or PRs

Please mention the related issues or PRs here. If the PR fixes an issue, use the keyword close/closes/closed/fix/fixes/fixed/resolve/resolves/resolved followed by the issue id, e.g. fix #[id]

Additional context

oameye added 7 commits May 25, 2026 13:28
Compat bumps: Symbolics 7, SymbolicUtils 4, SciMLBase 3, OrdinaryDiffEqTsit5 2,
OrdinaryDiffEqRosenbrock 2, ModelingToolkitBase 1, HarmonicBalance 0.17,
QuestBase 0.4. LinearSolve, NonlinearSolve, and SteadyStateDiffEq are pinned
to the versions that widen their SciMLBase compat to 3 (3.75 / 4.17 / 2.10).
Bump HSS itself to v0.5.0.

ModelingToolkit weakdep is replaced with ModelingToolkitBase across the
SteadyStateDiffEq extension test, which now uses `mtkcompile` instead of the
removed `structural_simplify`.

Latexify is no longer re-exported from Symbolics 7, so it is added as a
direct weakdep and the PlotsExt trigger becomes `[Plots, Latexify]`.

QuantumCumulants extension and its tests (`input_output.jl`) are temporarily
disabled because the latest QC release (0.4.3) caps SymbolicUtils at 3 and
SciMLBase at 2. Re-enable when QC supports the new stack.

Symbolics 7's `substitute` no longer auto-folds numeric Const wrappers, so
the numerical extraction points (`transform_solutions`, `Lorentzian_spectrum`,
LinearResponse `response.jl`, and TimeEvolution `ODEProblem`) now go through
`Symbolics.substitute(...; fold=Val{true}())` plus `Symbolics.value` (or
`SymbolicUtils.unwrap_const`) to return concrete `Float64`s.

A `[sources]` block points test sandboxes at the local HarmonicBalance and
QuestBase clones so the upgrade can be validated end to end without
registering the bumped versions first.
Switch [sources] from local paths to git url and branch rev so CI can resolve the unreleased QuestBase 0.4 and HarmonicBalance. Set julia compat to 1.12 and run Tests and Documentation on 1.12 only. Widen BijectiveHilbert to allow 0.6 and OrderedCollections to allow v2. Add the QuestBase source to the docs environment. Add an informational codecov config. Apply JuliaFormatter v2.
PlotsExt is not loaded in the docs environment because its Latexify trigger is absent, so Base.get_extension returned nothing and makedocs rejected the modules vector with a TypeError. Filter nothing out of the modules list.
API.md documents PlotsExt functions (plot, plot_phase_diagram, plot_spaghetti, ...). PlotsExt only loads when both Plots and Latexify are present, so without Latexify the @docs blocks failed with a docs_block error. Add Latexify to the docs environment and load it in make.jl, and build the makedocs modules list as a Vector{Module} filtered of unloaded extensions.
…r cumulants

Re-enable the QuantumCumulants weak dependency, extension and tests, which were dropped during the Symbolics 7 migration because QuantumCumulants 0.4 capped SymbolicUtils and SciMLBase. QuantumCumulants 0.7 supports the new stack.

Fix the moment-to-real-variable conversion for QuantumCumulants 0.7: averages now render operator products with spaces and use an ASCII apostrophe for the adjoint. Strip spaces and map both the apostrophe and the prime to the superscript plus when building variable names, so second-order cumulants (e.g. a⁺aᵣ) work in addition to first order.

Update examples and tests to the QuantumCumulants 0.7 parameter idiom (@variables instead of the removed @rnumbers / @cnumbers).
QuestBase 0.4.0 solves symbolic systems with `Symbolics.symbolic_linear_solve`,
whose nested fraction denominators grow without bound on the van der Pol limit
cycle system. That exhausted the CI runner's memory and killed the job partway
through the limit cycle tests. 0.4.1 solves via fraction-free Bareiss
elimination instead, so require it rather than letting the resolver pick 0.4.0.

The docs environment pinned QuestBase to a git branch that no longer exists now
that the work is released; use the registered version there too.
@oameye
oameye merged commit 013e96d into main Jul 25, 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.

1 participant