@@ -888,7 +888,8 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
888888 for p in parameters (sys)
889889 if is_parameter_solvable (p, parammap, defs, guesses)]
890890
891- pvarmap = if parammap === nothing || parammap == SciMLBase. NullParameters () || ! (eltype (parammap) <: Pair ) && isempty (parammap)
891+ pvarmap = if parammap === nothing || parammap == SciMLBase. NullParameters () ||
892+ ! (eltype (parammap) <: Pair ) && isempty (parammap)
892893 defs
893894 else
894895 merge (defs, todict (parammap))
@@ -1592,6 +1593,22 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem,
15921593 end
15931594
15941595 u0map = merge (ModelingToolkit. guesses (sys), todict (guesses), todict (u0map))
1596+ fullmap = merge (u0map, parammap)
1597+ u0T = Union{}
1598+ for sym in unknowns (isys)
1599+ haskey (fullmap, sym) || continue
1600+ symbolic_type (fullmap[sym]) == NotSymbolic () || continue
1601+ u0T = promote_type (u0T, typeof (fullmap[sym]))
1602+ end
1603+ for eq in observed (isys)
1604+ haskey (fullmap, eq. lhs) || continue
1605+ symbolic_type (fullmap[eq. lhs]) == NotSymbolic () || continue
1606+ u0T = promote_type (u0T, typeof (fullmap[eq. lhs]))
1607+ end
1608+ if u0T != Union{}
1609+ u0map = Dict (k => symbolic_type (v) == NotSymbolic () ? u0T (v) : v
1610+ for (k, v) in u0map)
1611+ end
15951612 if neqs == nunknown
15961613 NonlinearProblem (isys, u0map, parammap; kwargs... )
15971614 else
0 commit comments