@@ -315,7 +315,7 @@ function build_torn_function(
315
315
if expression
316
316
expr, states
317
317
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
319
319
function generated_observed (obsvar, u, p, t)
320
320
obs = get! (dict, value (obsvar)) do
321
321
build_observed_function (sys, obsvar, var_eq_matching, var_sccs,
@@ -365,6 +365,7 @@ function build_observed_function(
365
365
checkbounds= true ,
366
366
)
367
367
368
+ is_not_prepended_assignment = trues (length (assignments))
368
369
if (isscalar = ! (ts isa AbstractVector))
369
370
ts = [ts]
370
371
end
@@ -412,7 +413,10 @@ function build_observed_function(
412
413
torn_vars = map (i-> map (v-> fullvars[v], var_sccs[i]), subset)
413
414
u0map = defaults (sys)
414
415
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
416
420
else
417
421
solves = []
418
422
end
@@ -434,10 +438,10 @@ function build_observed_function(
434
438
[],
435
439
pre (Let (
436
440
[
437
- assignments
438
441
collect (Iterators. flatten (solves))
439
442
map (eq -> eq. lhs← eq. rhs, obs[1 : maxidx])
440
443
subs
444
+ assignments[is_not_prepended_assignment]
441
445
],
442
446
isscalar ? ts[1 ] : MakeArray (ts, output_type)
443
447
))
0 commit comments