@@ -598,24 +598,42 @@ function SciMLBase.remake_initialization_data(
598598    return  SciMLBase. remake_initialization_data (sys, odefn, newu0, t0, newp, newu0, newp)
599599end 
600600
601- function  promote_u0_p (u0, p:: MTKParameters , t0)
602-     u0 =  DiffEqBase. promote_u0 (u0, p. tunable, t0)
603-     u0 =  DiffEqBase. promote_u0 (u0, p. initials, t0)
601+ promote_type_with_nothing (:: Type{T} , :: Nothing ) where  {T} =  T
602+ promote_type_with_nothing (:: Type{T} , :: SizedVector{0} ) where  {T} =  T
603+ function  promote_type_with_nothing (:: Type{T} , :: AbstractArray{T2} ) where  {T, T2}
604+     promote_type (T, T2)
605+ end 
604606
605-     if  ! isempty (p. tunable)
606-         tunables =  DiffEqBase. promote_u0 (p. tunable, u0, t0)
607-         p =  SciMLStructures. replace (SciMLStructures. Tunable (), p, tunables)
608-     end 
609-     if  ! isempty (p. initials)
610-         initials =  DiffEqBase. promote_u0 (p. initials, u0, t0)
611-         p =  SciMLStructures. replace (SciMLStructures. Initials (), p, initials)
607+ promote_with_nothing (:: Type , :: Nothing ) =  nothing 
608+ promote_with_nothing (:: Type , x:: SizedVector{0} ) =  x
609+ promote_with_nothing (:: Type{T} , x:: AbstractArray{T} ) where  {T} =  x
610+ function  promote_with_nothing (:: Type{T} , x:: AbstractArray{T2} ) where  {T, T2}
611+     if  ArrayInterface. ismutable (x)
612+         y =  similar (x, T)
613+         copyto! (y, x)
614+         return  y
615+     else 
616+         yT =  similar_type (x, T)
617+         return  yT (x)
612618    end 
613- 
614-     return  u0, p
619+ end 
620+ function  promote_with_nothing (:: Type{T} , p:: MTKParameters ) where  {T}
621+     tunables =  promote_with_nothing (T, p. tunable)
622+     p =  SciMLStructures. replace (SciMLStructures. Tunable (), p, tunables)
623+     initials =  promote_with_nothing (T, p. initials)
624+     p =  SciMLStructures. replace (SciMLStructures. Initials (), p, initials)
625+     return  p
615626end 
616627
617628function  promote_u0_p (u0, p, t0)
618-     return  DiffEqBase. promote_u0 (u0, p, t0), DiffEqBase. promote_u0 (p, u0, t0)
629+     T =  Union{}
630+     T =  promote_type_with_nothing (T, u0)
631+     T =  promote_type_with_nothing (T, p. tunable)
632+     T =  promote_type_with_nothing (T, p. initials)
633+ 
634+     u0 =  promote_with_nothing (T, u0)
635+     p =  promote_with_nothing (T, p)
636+     return  u0, p
619637end 
620638
621639function  SciMLBase. late_binding_update_u0_p (
0 commit comments