Skip to content

Commit 96faa98

Browse files
fix: handle type promotion in InitializationProblem with observed
1 parent d7755bf commit 96faa98

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 18 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,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

Comments
 (0)