@@ -589,13 +589,31 @@ function SciMLBase.remake_initialization_data(
589
589
return SciMLBase. remake_initialization_data (sys, kws, newu0, t0, newp, newu0, newp)
590
590
end
591
591
592
+ function promote_u0_p (u0, p:: MTKParameters , t0)
593
+ u0 = DiffEqBase. promote_u0 (u0, p. tunable, t0)
594
+ u0 = DiffEqBase. promote_u0 (u0, p. initials, t0)
595
+
596
+ tunables = DiffEqBase. promote_u0 (p. tunable, u0, t0)
597
+ initials = DiffEqBase. promote_u0 (p. initials, u0, t0)
598
+ p = SciMLStructures. replace (SciMLStructures. Tunable (), p, tunables)
599
+ p = SciMLStructures. replace (SciMLStructures. Initials (), p, initials)
600
+
601
+ return u0, p
602
+ end
603
+
604
+ function promote_u0_p (u0, p:: AbstractArray , t0)
605
+ return DiffEqBase. promote_u0 (u0, p, t0), DiffEqBase. promote_u0 (p, u0, t0)
606
+ end
607
+
592
608
function SciMLBase. late_binding_update_u0_p (
593
609
prob, sys:: AbstractSystem , u0, p, t0, newu0, newp)
594
610
supports_initialization (sys) || return newu0, newp
595
611
596
612
initdata = prob. f. initialization_data
597
613
meta = initdata === nothing ? nothing : initdata. metadata
598
614
615
+ newu0, newp = promote_u0_p (newu0, newp, t0)
616
+
599
617
# non-symbolic u0 updates initials...
600
618
if ! (eltype (u0) <: Pair )
601
619
# if `p` is not provided or is symbolic
@@ -605,12 +623,7 @@ function SciMLBase.late_binding_update_u0_p(
605
623
meta = initdata. metadata
606
624
meta isa InitializationMetadata || return newu0, newp
607
625
newp = p === missing ? copy (newp) : newp
608
- initials, repack, alias = SciMLStructures. canonicalize (
609
- SciMLStructures. Initials (), newp)
610
- if eltype (initials) != eltype (newu0)
611
- initials = DiffEqBase. promote_u0 (initials, newu0, t0)
612
- newp = repack (initials)
613
- end
626
+
614
627
if length (newu0) != length (prob. u0)
615
628
throw (ArgumentError (" Expected `newu0` to be of same length as unknowns ($(length (prob. u0)) ). Got $(typeof (newu0)) of length $(length (newu0)) " ))
616
629
end
@@ -619,17 +632,6 @@ function SciMLBase.late_binding_update_u0_p(
619
632
end
620
633
621
634
newp = p === missing ? copy (newp) : newp
622
- newu0 = DiffEqBase. promote_u0 (newu0, newp, t0)
623
- tunables, repack, alias = SciMLStructures. canonicalize (SciMLStructures. Tunable (), newp)
624
- if eltype (tunables) != eltype (newu0)
625
- tunables = DiffEqBase. promote_u0 (tunables, newu0, t0)
626
- newp = repack (tunables)
627
- end
628
- initials, repack, alias = SciMLStructures. canonicalize (SciMLStructures. Initials (), newp)
629
- if eltype (initials) != eltype (newu0)
630
- initials = DiffEqBase. promote_u0 (initials, newu0, t0)
631
- newp = repack (initials)
632
- end
633
635
634
636
allsyms = all_symbols (sys)
635
637
for (k, v) in u0
0 commit comments