@@ -681,6 +681,31 @@ function (f::Initial)(x)
681681 return result
682682end
683683
684+ function add_initialization_parameters (sys:: AbstractSystem )
685+ is_time_dependent (sys) || return sys
686+ @assert ! has_systems (sys) || isempty (get_systems (sys))
687+ eqs = equations (sys)
688+ if ! (eqs isa Vector{Equation})
689+ eqs = Equation[x for x in eqs if x isa Equation]
690+ end
691+ obs, eqs = unhack_observed (observed (sys), eqs)
692+ all_uvars = Set {BasicSymbolic} ()
693+ for x in Iterators. flatten ((unknowns (sys), Iterators. map (eq -> eq. lhs, obs)))
694+ x = unwrap (x)
695+ if iscall (x) && operation (x) == getindex
696+ push! (all_uvars, arguments (x)[1 ])
697+ else
698+ push! (all_uvars, x)
699+ end
700+ end
701+ all_uvars = collect (all_uvars)
702+ initials = map (Initial (), all_uvars)
703+ # existing_initials = filter(x -> iscall(x) && (operation(x) isa Initial), parameters(sys))
704+ @set! sys. ps = unique! ([get_ps (sys); initials])
705+ @set! sys. defaults = merge (get_defaults (sys), Dict (initials .=> zero_var .(initials)))
706+ return sys
707+ end
708+
684709"""
685710$(TYPEDSIGNATURES)
686711
@@ -713,6 +738,7 @@ function complete(sys::AbstractSystem; split = true, flatten = true)
713738 @set! newsys. parent = complete (sys; split = false , flatten = false )
714739 end
715740 sys = newsys
741+ sys = add_initialization_parameters (sys)
716742 end
717743 if split && has_index_cache (sys)
718744 @set! sys. index_cache = IndexCache (sys)
0 commit comments