diff --git a/Project.toml b/Project.toml index 06f6433..25cb60c 100644 --- a/Project.toml +++ b/Project.toml @@ -13,10 +13,13 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [compat] Catalyst = "15" -DiffEqBase = "6" +DiffEqBase = "6, 7" MacroTools = "^0.5.5" +OrdinaryDiffEq = "6, 7" Reexport = "1" RuntimeGeneratedFunctions = "0.5" +SteadyStateDiffEq = "1, 2" +Sundials = "4, 5, 6" julia = "1.10" [extras] diff --git a/src/FiniteStateProjection.jl b/src/FiniteStateProjection.jl index 5f2f82e..96b6507 100644 --- a/src/FiniteStateProjection.jl +++ b/src/FiniteStateProjection.jl @@ -14,6 +14,25 @@ RuntimeGeneratedFunctions.init(@__MODULE__) export FSPSystem, DefaultIndexHandler, SteadyState +# Julia 1.12 removed the `mt` field on `Base.MethodList`, breaking +# `MacroTools.prettify`'s `unresolve` step (FluxML/MacroTools.jl#216). +# Replicate `MacroTools.prettify` locally with a 1.12-safe `unresolve` +# so generated CME RHS expressions can still be tidied for display. +_unresolve1(x) = x +@static if VERSION >= v"1.12-" + _unresolve1(f::Function) = nameof(f) +else + _unresolve1(f::Function) = methods(f).mt.name +end +_unresolve(ex) = MacroTools.prewalk(_unresolve1, ex) +function _prettify(ex; lines = false, alias = true) + ex = lines ? ex : MacroTools.striplines(ex) + ex = MacroTools.flatten(ex) + ex = _unresolve(ex) + ex = MacroTools.resyntax(ex) + return alias ? MacroTools.alias_gensyms(ex) : ex +end + abstract type AbstractIndexHandler end include("fspsystem.jl") diff --git a/src/build_rhs.jl b/src/build_rhs.jl index 045c7c5..2332580 100644 --- a/src/build_rhs.jl +++ b/src/build_rhs.jl @@ -104,7 +104,7 @@ function build_rhs_ex(sys::FSPSystem; striplines::Bool = false) striplines && (ex = MacroTools.striplines(ex)) - ex = ex |> MacroTools.flatten |> MacroTools.prettify + ex = ex |> MacroTools.flatten |> _prettify return ex end diff --git a/src/build_rhs_ss.jl b/src/build_rhs_ss.jl index 66dca46..ba2c2dd 100644 --- a/src/build_rhs_ss.jl +++ b/src/build_rhs_ss.jl @@ -43,7 +43,7 @@ function build_rhs_ex_ss(sys::FSPSystem; striplines::Bool = false) striplines && (ex = MacroTools.striplines(ex)) - ex = ex |> MacroTools.flatten |> MacroTools.prettify + ex = ex |> MacroTools.flatten |> _prettify return ex end