@@ -2517,6 +2517,7 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
2517
2517
end
2518
2518
end
2519
2519
2520
+ # collect fields common to all system types
2520
2521
eqs = union (get_eqs (basesys), get_eqs (sys))
2521
2522
sts = union (get_unknowns (basesys), get_unknowns (sys))
2522
2523
ps = union (get_ps (basesys), get_ps (sys))
@@ -2529,16 +2530,19 @@ function extend(sys::AbstractSystem, basesys::AbstractSystem; name::Symbol = nam
2529
2530
devs = union (get_discrete_events (basesys), get_discrete_events (sys))
2530
2531
defs = merge (get_defaults (basesys), get_defaults (sys)) # prefer `sys`
2531
2532
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)
2532
2537
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))
2541
2543
end
2544
+
2545
+ return T (args... ; kwargs... )
2542
2546
end
2543
2547
2544
2548
function Base.:(& )(sys:: AbstractSystem , basesys:: AbstractSystem ; name:: Symbol = nameof (sys))
0 commit comments