@@ -178,9 +178,22 @@ function change_independent_variable(
178178 return ex:: T
179179 end
180180
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+
181191 # Use the utility function to transform everything in the system!
182192 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))
184197 unknowns = map (transform, get_unknowns (sys))
185198 unknowns = filter (var -> ! isequal (var, iv2), unknowns) # remove e.g. u
186199 ps = map (transform, get_ps (sys))
@@ -191,19 +204,19 @@ function change_independent_variable(
191204 defaults = Dict (transform (var) => transform (val)
192205 for (var, val) in get_defaults (sys))
193206 guesses = Dict (transform (var) => transform (val) for (var, val) in get_guesses (sys))
207+ connector_type = get_connector_type (sys)
194208 assertions = Dict (transform (ass) => msg for (ass, msg) in get_assertions (sys))
195- systems = get_systems (sys) # save before reconstructing system
196209 wascomplete = iscomplete (sys) # save before reconstructing system
197210 sys = typeof (sys)( # recreate system with transformed fields
198211 eqs, iv2, unknowns, ps; observed, initialization_eqs,
199- parameter_dependencies, defaults, guesses,
212+ parameter_dependencies, defaults, guesses, connector_type,
200213 assertions, name = nameof (sys), description = description (sys)
201214 )
202- systems = map (transform, systems) # recurse through subsystems
203215 sys = compose (sys, systems) # rebuild hierarchical system
204216 if wascomplete
205217 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
207220 end
208221 return sys
209222 end
0 commit comments