Skip to content

Commit 6da7c90

Browse files
committed
Special case Sym in variable collection
Fix #701
1 parent 7223bc8 commit 6da7c90

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

src/systems/diffeqs/odesystem.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,25 @@ function ODESystem(eqs, iv=nothing; kwargs...)
137137
end
138138

139139
function collect_vars!(states, parameters, expr, iv)
140-
for var in vars(expr)
141-
if isparameter(var) || isparameter(var.op)
142-
isequal(var, iv) || push!(parameters, var)
143-
else
144-
push!(states, var)
140+
if expr isa Sym
141+
collect_var!(states, parameters, expr, iv)
142+
else
143+
for var in vars(expr)
144+
collect_var!(states, parameters, var, iv)
145145
end
146146
end
147147
return nothing
148148
end
149149

150+
function collect_var!(states, parameters, var, iv)
151+
if isparameter(var) || isparameter(var.op)
152+
isequal(var, iv) || push!(parameters, var)
153+
else
154+
push!(states, var)
155+
end
156+
return nothing
157+
end
158+
150159
Base.:(==)(sys1::ODESystem, sys2::ODESystem) =
151160
_eq_unordered(sys1.eqs, sys2.eqs) && isequal(sys1.iv, sys2.iv) &&
152161
_eq_unordered(sys1.states, sys2.states) && _eq_unordered(sys1.ps, sys2.ps)

test/odesystem.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,11 @@ sys = ODESystem(eqs)
211211
@test all(isequal.(states(sys), [x, y, z]))
212212
@test all(isequal.(parameters(sys), [σ, β]))
213213
@test equations(sys) == eqs
214+
215+
# issue 701
216+
using ModelingToolkit
217+
@parameters t a
218+
@variables x(t)
219+
@derivatives D'~t
220+
sys = ODESystem([D(x) ~ a])
221+
@test sys.eqs[1].rhs isa Sym

0 commit comments

Comments
 (0)