Skip to content

Commit b5c4894

Browse files
fix: handle type promotion in InitializationProblem with observed
1 parent ec24ef4 commit b5c4894

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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,19 @@ 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+
u0T = promote_type(u0T, typeof(fullmap[sym]))
1601+
end
1602+
for eq in observed(isys)
1603+
haskey(fullmap, eq.lhs) || continue
1604+
u0T = promote_type(u0T, typeof(fullmap[eq.lhs]))
1605+
end
1606+
if u0T != Union{}
1607+
u0map = Dict(k => u0T(v) for (k, v) in u0map)
1608+
end
15951609
if neqs == nunknown
15961610
NonlinearProblem(isys, u0map, parammap; kwargs...)
15971611
else

0 commit comments

Comments
 (0)