Skip to content

Commit ad53183

Browse files
committed
Fix ODAEProblem's observed
1 parent 8f7e24b commit ad53183

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/structural_transformation/codegen.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ function build_torn_function(
315315
if expression
316316
expr, states
317317
else
318-
observedfun = let sys=sys, dict=Dict(), assignments=assignments, deps=deps, bf_states=bf_states, var2assignment=var2assignment
318+
observedfun = let sys=sys, dict=Dict(), assignments=assignments, deps=(deps, invdeps), bf_states=bf_states, var2assignment=var2assignment
319319
function generated_observed(obsvar, u, p, t)
320320
obs = get!(dict, value(obsvar)) do
321321
build_observed_function(sys, obsvar, var_eq_matching, var_sccs,
@@ -365,6 +365,7 @@ function build_observed_function(
365365
checkbounds=true,
366366
)
367367

368+
is_not_prepended_assignment = trues(length(assignments))
368369
if (isscalar = !(ts isa AbstractVector))
369370
ts = [ts]
370371
end
@@ -412,7 +413,10 @@ function build_observed_function(
412413
torn_vars = map(i->map(v->fullvars[v], var_sccs[i]), subset)
413414
u0map = defaults(sys)
414415
assignments = copy(assignments)
415-
solves = gen_nlsolve.(torn_eqs, torn_vars, (u0map,), (assignments,), (deps,), (var2assignment,); checkbounds=checkbounds)
416+
solves = map(zip(torn_eqs, torn_vars)) do (eqs, vars)
417+
gen_nlsolve!(is_not_prepended_assignment, eqs, vars,
418+
u0map, assignments, deps, var2assignment; checkbounds=checkbounds)
419+
end
416420
else
417421
solves = []
418422
end
@@ -434,10 +438,10 @@ function build_observed_function(
434438
[],
435439
pre(Let(
436440
[
437-
assignments
438441
collect(Iterators.flatten(solves))
439442
map(eq -> eq.lhseq.rhs, obs[1:maxidx])
440443
subs
444+
assignments[is_not_prepended_assignment]
441445
],
442446
isscalar ? ts[1] : MakeArray(ts, output_type)
443447
))

0 commit comments

Comments
 (0)