@@ -648,7 +648,25 @@ function SciMLBase.late_binding_update_u0_p(
648
648
newu0, newp = promote_u0_p (newu0, newp, t0)
649
649
650
650
# non-symbolic u0 updates initials...
651
- if ! (eltype (u0) <: Pair )
651
+ if eltype (u0) <: Pair
652
+ syms = []
653
+ vals = []
654
+ allsyms = all_symbols (sys)
655
+ for (k, v) in u0
656
+ v === nothing && continue
657
+ (symbolic_type (v) == NotSymbolic () && ! is_array_of_symbolics (v)) || continue
658
+ if k isa Symbol
659
+ k2 = symbol_to_symbolic (sys, k; allsyms)
660
+ # if it is returned as-is, there is no match so skip it
661
+ k2 === k && continue
662
+ k = k2
663
+ end
664
+ is_parameter (sys, Initial (k)) || continue
665
+ push! (syms, Initial (k))
666
+ push! (vals, v)
667
+ end
668
+ newp = setp_oop (sys, syms)(newp, vals)
669
+ else
652
670
# if `p` is not provided or is symbolic
653
671
p === missing || eltype (p) <: Pair || return newu0, newp
654
672
(newu0 === nothing || isempty (newu0)) && return newu0, newp
@@ -661,27 +679,27 @@ function SciMLBase.late_binding_update_u0_p(
661
679
throw (ArgumentError (" Expected `newu0` to be of same length as unknowns ($(length (prob. u0)) ). Got $(typeof (newu0)) of length $(length (newu0)) " ))
662
680
end
663
681
newp = meta. set_initial_unknowns! (newp, newu0)
664
- return newu0, newp
665
- end
666
-
667
- syms = []
668
- vals = []
669
- allsyms = all_symbols (sys)
670
- for (k, v) in u0
671
- v === nothing && continue
672
- (symbolic_type (v) == NotSymbolic () && ! is_array_of_symbolics (v)) || continue
673
- if k isa Symbol
674
- k2 = symbol_to_symbolic (sys, k; allsyms)
675
- # if it is returned as-is, there is no match so skip it
676
- k2 === k && continue
677
- k = k2
682
+ end
683
+
684
+ if eltype (p) <: Pair
685
+ syms = []
686
+ vals = []
687
+ for (k, v) in p
688
+ v === nothing && continue
689
+ (symbolic_type (v) == NotSymbolic () && ! is_array_of_symbolics (v)) || continue
690
+ if k isa Symbol
691
+ k2 = symbol_to_symbolic (sys, k; allsyms)
692
+ # if it is returned as-is, there is no match so skip it
693
+ k2 === k && continue
694
+ k = k2
695
+ end
696
+ is_parameter (sys, Initial (k)) || continue
697
+ push! (syms, Initial (k))
698
+ push! (vals, v)
678
699
end
679
- is_parameter (sys, Initial (k)) || continue
680
- push! (syms, Initial (k))
681
- push! (vals, v)
700
+ newp = setp_oop (sys, syms)(newp, vals)
682
701
end
683
702
684
- newp = setp_oop (sys, syms)(newp, vals)
685
703
return newu0, newp
686
704
end
687
705
0 commit comments