@@ -178,9 +178,22 @@ function change_independent_variable(
178
178
return ex:: T
179
179
end
180
180
181
+ # overload to specifically handle equations, which can be an equation or a connection
182
+ function transform (eq:: Equation , systems_map)
183
+ if eq. rhs isa Connection
184
+ eq = connect ((systems_map[nameof (s)] for s in eq. rhs. systems). .. )
185
+ else
186
+ eq = transform (eq)
187
+ end
188
+ return eq:: Equation
189
+ end
190
+
181
191
# Use the utility function to transform everything in the system!
182
192
function transform (sys:: AbstractODESystem )
183
- eqs = map (transform, get_eqs (sys))
193
+ systems = map (transform, get_systems (sys)) # recurse through subsystems
194
+ # transform equations and connections
195
+ systems_map = Dict (get_name (s) => s for s in systems)
196
+ eqs = map (eq -> transform (eq, systems_map):: Equation , get_eqs (sys))
184
197
unknowns = map (transform, get_unknowns (sys))
185
198
unknowns = filter (var -> ! isequal (var, iv2), unknowns) # remove e.g. u
186
199
ps = map (transform, get_ps (sys))
@@ -191,19 +204,19 @@ function change_independent_variable(
191
204
defaults = Dict (transform (var) => transform (val)
192
205
for (var, val) in get_defaults (sys))
193
206
guesses = Dict (transform (var) => transform (val) for (var, val) in get_guesses (sys))
207
+ connector_type = get_connector_type (sys)
194
208
assertions = Dict (transform (ass) => msg for (ass, msg) in get_assertions (sys))
195
- systems = get_systems (sys) # save before reconstructing system
196
209
wascomplete = iscomplete (sys) # save before reconstructing system
197
210
sys = typeof (sys)( # recreate system with transformed fields
198
211
eqs, iv2, unknowns, ps; observed, initialization_eqs,
199
- parameter_dependencies, defaults, guesses,
212
+ parameter_dependencies, defaults, guesses, connector_type,
200
213
assertions, name = nameof (sys), description = description (sys)
201
214
)
202
- systems = map (transform, systems) # recurse through subsystems
203
215
sys = compose (sys, systems) # rebuild hierarchical system
204
216
if wascomplete
205
217
wasflat = isempty (systems)
206
- sys = complete (sys; flatten = wasflat) # complete output if input was complete
218
+ wassplit = is_split (sys)
219
+ sys = complete (sys; split = wassplit, flatten = wasflat) # complete output if input was complete
207
220
end
208
221
return sys
209
222
end
0 commit comments