@@ -678,21 +678,22 @@ end
678678
679679function add_initialization_parameters (sys:: AbstractSystem )
680680 @assert ! has_systems (sys) || isempty (get_systems (sys))
681+ is_initializesystem (sys) && return sys
682+
681683 all_initialvars = Set {BasicSymbolic} ()
682684 # time-independent systems don't initialize unknowns
683- if is_time_dependent (sys)
684- eqs = equations (sys)
685- if ! (eqs isa Vector{Equation})
686- eqs = Equation[x for x in eqs if x isa Equation]
687- end
688- obs, eqs = unhack_observed (observed (sys), eqs)
689- for x in Iterators. flatten ((unknowns (sys), Iterators. map (eq -> eq. lhs, obs)))
690- x = unwrap (x)
691- if iscall (x) && operation (x) == getindex
692- push! (all_initialvars, arguments (x)[1 ])
693- else
694- push! (all_initialvars, x)
695- end
685+ # but may initialize parameters using guesses for unknowns
686+ eqs = equations (sys)
687+ if ! (eqs isa Vector{Equation})
688+ eqs = Equation[x for x in eqs if x isa Equation]
689+ end
690+ obs, eqs = unhack_observed (observed (sys), eqs)
691+ for x in Iterators. flatten ((unknowns (sys), Iterators. map (eq -> eq. lhs, obs)))
692+ x = unwrap (x)
693+ if iscall (x) && operation (x) == getindex
694+ push! (all_initialvars, arguments (x)[1 ])
695+ else
696+ push! (all_initialvars, x)
696697 end
697698 end
698699 for eq in parameter_dependencies (sys)
@@ -722,15 +723,8 @@ Returns true if the parameter `p` is of the form `Initial(x)`.
722723"""
723724function isinitial (p)
724725 p = unwrap (p)
725- if iscall (p)
726- operation (p) isa Initial && return true
727- if operation (p) === getindex
728- operation (arguments (p)[1 ]) isa Initial && return true
729- end
730- else
731- return false
732- end
733- return false
726+ return iscall (p) && (operation (p) isa Initial ||
727+ operation (p) === getindex && isinitial (arguments (p)[1 ]))
734728end
735729
736730"""
@@ -1331,20 +1325,8 @@ function parameters(sys::AbstractSystem; initial_parameters = false)
13311325 systems = get_systems (sys)
13321326 result = unique (isempty (systems) ? ps :
13331327 [ps; reduce (vcat, namespace_parameters .(systems))])
1334- if ! initial_parameters
1335- if is_time_dependent (sys)
1336- # time-dependent systems have `Initial` parameters for all their
1337- # unknowns/pdeps, all of which should be hidden.
1338- filter! (x -> ! iscall (x) || ! isa (operation (x), Initial), result)
1339- else
1340- # time-independent systems only have `Initial` parameters for
1341- # pdeps. Any other `Initial` parameters should be kept (e.g. initialization
1342- # systems)
1343- filter! (
1344- x -> ! iscall (x) || ! isa (operation (x), Initial) ||
1345- ! has_parameter_dependency_with_lhs (sys, only (arguments (x))),
1346- result)
1347- end
1328+ if ! initial_parameters && ! is_initializesystem (sys)
1329+ filter! (x -> ! iscall (x) || ! isa (operation (x), Initial), result)
13481330 end
13491331 return result
13501332end
0 commit comments