@@ -676,23 +676,27 @@ function SymbolicUtils.maketerm(::Type{<:BasicSymbolic}, ::Initial, args, meta)
676676    return  metadata (val, meta)
677677end 
678678
679+ supports_initialization (sys:: AbstractSystem ) =  true 
680+ 
679681function  add_initialization_parameters (sys:: AbstractSystem )
680682    @assert  ! has_systems (sys) ||  isempty (get_systems (sys))
683+     supports_initialization (sys) ||  return  sys
684+     is_initializesystem (sys) &&  return  sys
685+ 
681686    all_initialvars =  Set {BasicSymbolic} ()
682687    #  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 
688+     #  but may initialize parameters using guesses for unknowns
689+     eqs =  equations (sys)
690+     if  ! (eqs isa  Vector{Equation})
691+         eqs =  Equation[x for  x in  eqs if  x isa  Equation]
692+     end 
693+     obs, eqs =  unhack_observed (observed (sys), eqs)
694+     for  x in  Iterators. flatten ((unknowns (sys), Iterators. map (eq ->  eq. lhs, obs)))
695+         x =  unwrap (x)
696+         if  iscall (x) &&  operation (x) ==  getindex
697+             push! (all_initialvars, arguments (x)[1 ])
698+         else 
699+             push! (all_initialvars, x)
696700        end 
697701    end 
698702    for  eq in  parameter_dependencies (sys)
@@ -722,15 +726,8 @@ Returns true if the parameter `p` is of the form `Initial(x)`.
722726""" 
723727function  isinitial (p)
724728    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 
729+     return  iscall (p) &&  (operation (p) isa  Initial || 
730+             operation (p) ===  getindex &&  isinitial (arguments (p)[1 ]))
734731end 
735732
736733""" 
@@ -744,7 +741,8 @@ the global structure of the system.
744741One property to note is that if a system is complete, the system will no longer 
745742namespace its subsystems or variables, i.e. `isequal(complete(sys).v.i, v.i)`. 
746743""" 
747- function  complete (sys:: AbstractSystem ; split =  true , flatten =  true )
744+ function  complete (
745+         sys:: AbstractSystem ; split =  true , flatten =  true , add_initial_parameters =  true )
748746    newunknowns =  OrderedSet ()
749747    newparams =  OrderedSet ()
750748    iv =  has_iv (sys) ?  get_iv (sys) :  nothing 
@@ -765,7 +763,9 @@ function complete(sys::AbstractSystem; split = true, flatten = true)
765763            @set!  newsys. parent =  complete (sys; split =  false , flatten =  false )
766764        end 
767765        sys =  newsys
768-         sys =  add_initialization_parameters (sys)
766+         if  add_initial_parameters
767+             sys =  add_initialization_parameters (sys)
768+         end 
769769    end 
770770    if  split &&  has_index_cache (sys)
771771        @set!  sys. index_cache =  IndexCache (sys)
@@ -1345,20 +1345,8 @@ function parameters(sys::AbstractSystem; initial_parameters = false)
13451345    systems =  get_systems (sys)
13461346    result =  unique (isempty (systems) ?  ps : 
13471347                    [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 
1348+     if  ! initial_parameters &&  ! is_initializesystem (sys)
1349+         filter! (x ->  ! iscall (x) ||  ! isa (operation (x), Initial), result)
13621350    end 
13631351    return  result
13641352end 
0 commit comments