@@ -593,7 +593,7 @@ function tearing_reassemble(state::TearingState, var_eq_matching,
593593 @set! sys. unknowns = unknowns
594594
595595 obs, subeqs, deps = cse_and_array_hacks (
596- obs, subeqs, unknowns, neweqs; cse = cse_hack, array = array_hack)
596+ sys, obs, subeqs, unknowns, neweqs; cse = cse_hack, array = array_hack)
597597
598598 @set! sys. eqs = neweqs
599599 @set! sys. observed = obs
@@ -627,7 +627,7 @@ if all `p[i]` are present and the unscalarized form is used in any equation (obs
627627not) we first count the number of times the scalarized form of each observed variable
628628occurs in observed equations (and unknowns if it's split).
629629"""
630- function cse_and_array_hacks (obs, subeqs, unknowns, neweqs; cse = true , array = true )
630+ function cse_and_array_hacks (sys, obs, subeqs, unknowns, neweqs; cse = true , array = true )
631631 # HACK 1
632632 # mapping of rhs to temporary CSE variable
633633 # `f(...) => tmpvar` in above example
@@ -725,6 +725,11 @@ function cse_and_array_hacks(obs, subeqs, unknowns, neweqs; cse = true, array =
725725 for eq in neweqs
726726 vars! (all_vars, eq. rhs)
727727 end
728+
729+ # also count unscalarized variables used in callbacks
730+ for ev in Iterators. flatten ((continuous_events (sys), discrete_events (sys)))
731+ vars! (all_vars, ev)
732+ end
728733 obs_arr_eqs = Equation[]
729734 for (arrvar, cnt) in arr_obs_occurrences
730735 cnt == length (arrvar) || continue
0 commit comments