@@ -2517,6 +2517,7 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
25172517 end
25182518 end
25192519
2520+ # collect fields common to all system types
25202521 eqs = union (get_eqs (basesys), get_eqs (sys))
25212522 sts = union (get_unknowns (basesys), get_unknowns (sys))
25222523 ps = union (get_ps (basesys), get_ps (sys))
@@ -2529,16 +2530,19 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
25292530 devs = union (get_discrete_events (basesys), get_discrete_events (sys))
25302531 defs = merge (get_defaults (basesys), get_defaults (sys)) # prefer `sys`
25312532 syss = union (get_systems (basesys), get_systems (sys))
2533+ args = length (ivs) == 0 ? (eqs, sts, ps) : (eqs, ivs[1 ], sts, ps)
2534+ kwargs = (parameter_dependencies = dep_ps, observed = obs, continuous_events = cevs,
2535+ discrete_events = devs, defaults = defs, systems = syss,
2536+ name = name, gui_metadata = gui_metadata)
25322537
2533- if length (ivs) == 0
2534- T (eqs, sts, ps, observed = obs, defaults = defs, name = name, systems = syss,
2535- continuous_events = cevs, discrete_events = devs, gui_metadata = gui_metadata,
2536- parameter_dependencies = dep_ps)
2537- elseif length (ivs) == 1
2538- T (eqs, ivs[1 ], sts, ps, observed = obs, defaults = defs, name = name,
2539- systems = syss, continuous_events = cevs, discrete_events = devs,
2540- gui_metadata = gui_metadata, parameter_dependencies = dep_ps)
2538+ # collect fields specific to some system types
2539+ if basesys isa ODESystem
2540+ ieqs = union (get_initialization_eqs (basesys), get_initialization_eqs (sys))
2541+ guesses = merge (get_guesses (basesys), get_guesses (sys)) # prefer `sys`
2542+ kwargs = merge (kwargs, (initialization_eqs = ieqs, guesses = guesses))
25412543 end
2544+
2545+ return T (args... ; kwargs... )
25422546end
25432547
25442548function Base.:(& )(sys:: AbstractSystem , basesys:: AbstractSystem ; name:: Symbol = nameof (sys))
0 commit comments