Skip to content

Commit 7cd32de

Browse files
committed
Fix out-of-bounds state indexing in code gen
1 parent c84e5fa commit 7cd32de

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,19 @@ function generate_jacobian(sys::AbstractODESystem, dvs = states(sys), ps = param
6868
end
6969

7070
function generate_function(sys::AbstractODESystem, dvs = states(sys), ps = parameters(sys); kwargs...)
71-
dvs = vcat(dvs, map(eq->eq.lhs, observed(sys)))
7271
# optimization
73-
dvs′ = makesym.(value.(dvs), states=dvs)
74-
ps′ = makesym.(value.(ps), states=dvs)
72+
obsvars = map(eq->eq.lhs, observed(sys))
73+
fulldvs = [dvs; obsvars]
74+
fulldvs′ = makesym.(value.(fulldvs))
7575

76-
sub = Dict(dvs .=> dvs′)
76+
sub = Dict(fulldvs .=> fulldvs′)
7777
# substitute x(t) by just x
7878
rhss = [substitute(deq.rhs, sub) for deq equations(sys)]
7979
obss = [makesym(value(eq.lhs)) ~ substitute(eq.rhs, sub) for eq observed(sys)]
8080

81+
dvs′ = fulldvs′[1:length(dvs)]
82+
ps′ = makesym.(value.(ps), states=())
83+
8184
# TODO: add an optional check on the ordering of observed equations
8285
return build_function(Let(obss, rhss), dvs′, ps′, sys.iv;
8386
conv = ODEToExpr(sys),kwargs...)

src/utils.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ Symbol("z⦗t⦘")
222222
"""
223223
function tosymbol(t::Term; states=nothing, escape=true)
224224
if operation(t) isa Sym
225-
if states !== nothing && !(any(isequal(t), states))
225+
if states !== nothing && !(t in states)
226226
return nameof(operation(t))
227227
end
228228
op = nameof(operation(t))

0 commit comments

Comments
 (0)