@@ -638,24 +638,44 @@ function SciMLBase.remake_initialization_data(
638
638
return SciMLBase. remake_initialization_data (sys, odefn, newu0, t0, newp, newu0, newp)
639
639
end
640
640
641
- function promote_u0_p (u0, p:: MTKParameters , t0)
642
- u0 = DiffEqBase. promote_u0 (u0, p. tunable, t0)
643
- u0 = DiffEqBase. promote_u0 (u0, p. initials, t0)
641
+ promote_type_with_nothing (:: Type{T} , :: Nothing ) where {T} = T
642
+ promote_type_with_nothing (:: Type{T} , :: SizedVector{0} ) where {T} = T
643
+ function promote_type_with_nothing (:: Type{T} , :: AbstractArray{T2} ) where {T, T2}
644
+ promote_type (T, T2)
645
+ end
646
+ function promote_type_with_nothing (:: Type{T} , p:: MTKParameters ) where {T}
647
+ promote_type_with_nothing (promote_type_with_nothing (T, p. tunable), p. initials)
648
+ end
644
649
645
- if ! isempty (p. tunable)
646
- tunables = DiffEqBase. promote_u0 (p. tunable, u0, t0)
647
- p = SciMLStructures. replace (SciMLStructures. Tunable (), p, tunables)
648
- end
649
- if ! isempty (p. initials)
650
- initials = DiffEqBase. promote_u0 (p. initials, u0, t0)
651
- p = SciMLStructures. replace (SciMLStructures. Initials (), p, initials)
650
+ promote_with_nothing (:: Type , :: Nothing ) = nothing
651
+ promote_with_nothing (:: Type , x:: SizedVector{0} ) = x
652
+ promote_with_nothing (:: Type{T} , x:: AbstractArray{T} ) where {T} = x
653
+ function promote_with_nothing (:: Type{T} , x:: AbstractArray{T2} ) where {T, T2}
654
+ if ArrayInterface. ismutable (x)
655
+ y = similar (x, T)
656
+ copyto! (y, x)
657
+ return y
658
+ else
659
+ yT = similar_type (x, T)
660
+ return yT (x)
652
661
end
653
-
654
- return u0, p
662
+ end
663
+ function promote_with_nothing (:: Type{T} , p:: MTKParameters ) where {T}
664
+ tunables = promote_with_nothing (T, p. tunable)
665
+ p = SciMLStructures. replace (SciMLStructures. Tunable (), p, tunables)
666
+ initials = promote_with_nothing (T, p. initials)
667
+ p = SciMLStructures. replace (SciMLStructures. Initials (), p, initials)
668
+ return p
655
669
end
656
670
657
671
function promote_u0_p (u0, p, t0)
658
- return DiffEqBase. promote_u0 (u0, p, t0), DiffEqBase. promote_u0 (p, u0, t0)
672
+ T = Union{}
673
+ T = promote_type_with_nothing (T, u0)
674
+ T = promote_type_with_nothing (T, p)
675
+
676
+ u0 = promote_with_nothing (T, u0)
677
+ p = promote_with_nothing (T, p)
678
+ return u0, p
659
679
end
660
680
661
681
function SciMLBase. late_binding_update_u0_p (
0 commit comments