@@ -678,21 +678,22 @@ end
678
678
679
679
function add_initialization_parameters (sys:: AbstractSystem )
680
680
@assert ! has_systems (sys) || isempty (get_systems (sys))
681
+ is_initializesystem (sys) && return sys
682
+
681
683
all_initialvars = Set {BasicSymbolic} ()
682
684
# 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)
696
697
end
697
698
end
698
699
for eq in parameter_dependencies (sys)
@@ -722,15 +723,8 @@ Returns true if the parameter `p` is of the form `Initial(x)`.
722
723
"""
723
724
function isinitial (p)
724
725
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 ]))
734
728
end
735
729
736
730
"""
@@ -1345,20 +1339,8 @@ function parameters(sys::AbstractSystem; initial_parameters = false)
1345
1339
systems = get_systems (sys)
1346
1340
result = unique (isempty (systems) ? ps :
1347
1341
[ps; reduce (vcat, namespace_parameters .(systems))])
1348
- if ! initial_parameters
1349
- if is_time_dependent (sys)
1350
- # time-dependent systems have `Initial` parameters for all their
1351
- # unknowns/pdeps, all of which should be hidden.
1352
- filter! (x -> ! iscall (x) || ! isa (operation (x), Initial), result)
1353
- else
1354
- # time-independent systems only have `Initial` parameters for
1355
- # pdeps. Any other `Initial` parameters should be kept (e.g. initialization
1356
- # systems)
1357
- filter! (
1358
- x -> ! iscall (x) || ! isa (operation (x), Initial) ||
1359
- ! has_parameter_dependency_with_lhs (sys, only (arguments (x))),
1360
- result)
1361
- end
1342
+ if ! initial_parameters && ! is_initializesystem (sys)
1343
+ filter! (x -> ! iscall (x) || ! isa (operation (x), Initial), result)
1362
1344
end
1363
1345
return result
1364
1346
end
0 commit comments