Skip to content

Commit 589cd1e

Browse files
fix: fix substitute duplicating equations
1 parent 415f62e commit 589cd1e

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

src/systems/abstractsystem.jl

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2934,12 +2934,12 @@ function Symbolics.substitute(sys::AbstractSystem, rules::Union{Vector{<:Pair},
29342934
elseif sys isa ODESystem
29352935
rules = todict(map(r -> Symbolics.unwrap(r[1]) => Symbolics.unwrap(r[2]),
29362936
collect(rules)))
2937-
eqs = fast_substitute(equations(sys), rules)
2938-
pdeps = fast_substitute(parameter_dependencies(sys), rules)
2937+
eqs = fast_substitute(get_eqs(sys), rules)
2938+
pdeps = fast_substitute(get_parameter_dependencies(sys), rules)
29392939
defs = Dict(fast_substitute(k, rules) => fast_substitute(v, rules)
2940-
for (k, v) in defaults(sys))
2940+
for (k, v) in get_defaults(sys))
29412941
guess = Dict(fast_substitute(k, rules) => fast_substitute(v, rules)
2942-
for (k, v) in guesses(sys))
2942+
for (k, v) in get_guesses(sys))
29432943
subsys = map(s -> substitute(s, rules), get_systems(sys))
29442944
ODESystem(eqs, get_iv(sys); name = nameof(sys), defaults = defs,
29452945
guesses = guess, parameter_dependencies = pdeps, systems = subsys)
@@ -2948,14 +2948,34 @@ function Symbolics.substitute(sys::AbstractSystem, rules::Union{Vector{<:Pair},
29482948
end
29492949
end
29502950

2951+
struct InvalidParameterDependenciesType
2952+
got::Any
2953+
end
2954+
2955+
function Base.showerror(io::IO, err::InvalidParameterDependenciesType)
2956+
print(
2957+
io, "Parameter dependencies must be a `Dict`, or an array of `Pair` or `Equation`.")
2958+
if err.got !== nothing
2959+
print(io, " Got ", err.got)
2960+
end
2961+
end
2962+
29512963
function process_parameter_dependencies(pdeps, ps)
29522964
if pdeps === nothing || isempty(pdeps)
29532965
return Equation[], ps
2954-
elseif eltype(pdeps) <: Pair
2955-
pdeps = [lhs ~ rhs for (lhs, rhs) in pdeps]
29562966
end
2957-
if !(eltype(pdeps) <: Equation)
2958-
error("Parameter dependencies must be a `Dict`, `Vector{Pair}` or `Vector{Equation}`")
2967+
if pdeps isa Dict
2968+
pdeps = [k ~ v for (k, v) in pdeps]
2969+
else
2970+
pdeps isa AbstractArray || throw(InvalidParameterDependenciesType(pdeps))
2971+
pdeps = [if p isa Pair
2972+
p[1] ~ p[2]
2973+
elseif p isa Equation
2974+
p
2975+
else
2976+
error("Parameter dependencies must be a `Dict`, `Vector{Pair}` or `Vector{Equation}`")
2977+
end
2978+
for p in pdeps]
29592979
end
29602980
lhss = BasicSymbolic[]
29612981
for p in pdeps

0 commit comments

Comments
 (0)