@@ -241,6 +241,7 @@ function tearing_reassemble(state::TearingState, var_eq_matching; simplify = fal
241
241
# removed_vars = Int[]
242
242
removed_obs = Int[]
243
243
diff_to_var = invview (var_to_diff)
244
+ dummy_sub = Dict ()
244
245
for var in 1 : length (fullvars)
245
246
dv = var_to_diff[var]
246
247
dv === nothing && continue
@@ -253,7 +254,8 @@ function tearing_reassemble(state::TearingState, var_eq_matching; simplify = fal
253
254
push! (removed_obs, idx)
254
255
end
255
256
for eq in 𝑑neighbors (graph, dv)
256
- neweqs[eq] = substitute (neweqs[eq], fullvars[dv] => v_t)
257
+ dummy_sub[dd] = v_t
258
+ neweqs[eq] = substitute (neweqs[eq], dd => v_t)
257
259
end
258
260
fullvars[dv] = v_t
259
261
# update the structural information
@@ -592,8 +594,12 @@ function tearing_reassemble(state::TearingState, var_eq_matching; simplify = fal
592
594
deleteat! (oldobs, sort! (removed_obs))
593
595
@set! sys. substitutions = Substitutions (subeqs, deps)
594
596
595
- der2expr = Dict (eq. lhs => eq. rhs for eq in equations (sys) if isdiffeq (eq))
596
- obs = substitute .([oldobs; subeqs], (der2expr,))
597
+ obs_sub = dummy_sub
598
+ for eq in equations (sys)
599
+ isdiffeq (eq) || continue
600
+ obs_sub[eq. lhs] = eq. rhs
601
+ end
602
+ obs = substitute .([oldobs; subeqs], (obs_sub,))
597
603
@set! sys. observed = obs
598
604
@set! state. sys = sys
599
605
@set! sys. tearing_state = state
0 commit comments