Skip to content

Commit 6cc9816

Browse files
Merge pull request #2963 from AayushSabharwal/as/varmap-promote
fix: promote buffer in `_varmap_to_vars`
2 parents ca85342 + 43e072f commit 6cc9816

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/variables.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,16 +201,19 @@ function _varmap_to_vars(varmap::Dict, varlist; defaults = Dict(), check = false
201201
defaults = canonicalize_varmap(defaults; toterm)
202202
varmap = merge(defaults, varmap)
203203
values = Dict()
204+
205+
T = Union{}
204206
for var in varlist
205207
var = unwrap(var)
206208
val = unwrap(fixpoint_sub(var, varmap; operator = Symbolics.Operator))
207209
if !isequal(val, var)
208210
values[var] = val
211+
T = promote_type(T, typeof(val))
209212
end
210213
end
211214
missingvars = setdiff(varlist, collect(keys(values)))
212215
check && (isempty(missingvars) || throw(MissingVariablesError(missingvars)))
213-
return [values[unwrap(var)] for var in varlist]
216+
return [T(values[unwrap(var)]) for var in varlist]
214217
end
215218

216219
function varmap_with_toterm(varmap; toterm = Symbolics.diff2term)

test/odesystem.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,14 +1170,14 @@ end
11701170
@test getname(unknowns(sys, x)) == :sys₊x
11711171
@test size(unknowns(sys, x)) == size(x)
11721172

1173-
# Issue#2667
1173+
# Issue#2667 and Issue#2953
11741174
@testset "ForwardDiff through ODEProblem constructor" begin
11751175
@parameters P
11761176
@variables x(t)
11771177
sys = structural_simplify(ODESystem([D(x) ~ P], t, [x], [P]; name = :sys))
11781178

11791179
function x_at_1(P)
1180-
prob = ODEProblem(sys, [x => 0.0], (0.0, 1.0), [sys.P => P])
1180+
prob = ODEProblem(sys, [x => P], (0.0, 1.0), [sys.P => P])
11811181
return solve(prob, Tsit5())(1.0)
11821182
end
11831183

0 commit comments

Comments
 (0)