Skip to content

Commit 242bd31

Browse files
feat: add initialization parameters in complete
1 parent d691527 commit 242bd31

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/systems/abstractsystem.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,31 @@ function (f::Initial)(x)
681681
return result
682682
end
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

Comments
 (0)