Skip to content

Commit d0f4433

Browse files
Merge pull request #79 from SciML/as/remake-buffer-arraysym
fix: make `remake_buffer` work for array symbolics
2 parents 71408bb + f5e96c6 commit d0f4433

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

src/remake.jl

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,24 @@ function remake_buffer(sys, oldbuffer::AbstractArray, vals::Dict)
1919
if ArrayInterface.ismutable(oldbuffer) && !isa(oldbuffer, MArray)
2020
elT = Union{}
2121
for val in values(vals)
22-
elT = promote_type(elT, typeof(val))
22+
if val isa AbstractArray
23+
valT = eltype(val)
24+
else
25+
valT = typeof(val)
26+
end
27+
elT = promote_type(elT, valT)
2328
end
2429

2530
newbuffer = similar(oldbuffer, elT)
2631
copyto!(newbuffer, oldbuffer)
27-
setu(sys, collect(keys(vals)))(newbuffer, elT.(values(vals)))
32+
for (k, v) in vals
33+
if v isa AbstractArray
34+
v = elT.(v)
35+
else
36+
v = elT(v)
37+
end
38+
setu(sys, k)(newbuffer, v)
39+
end
2840
else
2941
mutbuffer = remake_buffer(sys, collect(oldbuffer), vals)
3042
newbuffer = similar_type(oldbuffer, eltype(mutbuffer))(mutbuffer)

test/downstream/Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
[deps]
2+
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
23
SymbolicIndexingInterface = "2efcf032-c050-4f8e-a9bb-153293bab1f5"
34
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using ModelingToolkit
2+
using ModelingToolkit: t_nounits as t
3+
using SymbolicIndexingInterface
4+
5+
@variables x(t)[1:2] y(t)
6+
@named sys = ODESystem(Equation[], t, [x, y], [])
7+
sys = complete(sys)
8+
9+
u0 = [1.0, 2.0, 3.0]
10+
newu0 = remake_buffer(sys, u0, Dict(x => [5.0, 6.0], y => 7.0))
11+
@test newu0 == [5.0, 6.0, 7.0]

0 commit comments

Comments
 (0)