@@ -132,6 +132,10 @@ const AbstractComponentMatrix = Union{ComponentMatrix, AdjOrTransComponentMatrix
132132
133133
134134# # Constructor helpers
135+ allocate_numeric_container (x) = allocate_numeric_container (recursive_eltype (x))
136+ allocate_numeric_container (:: Type{T} ) where {T<: Number } = T[]
137+ allocate_numeric_container (:: Type ) = []
138+
135139# For making ComponentArrays from named tuples
136140make_carray_args (:: NamedTuple{(), Tuple{}} ) = (Any[], FlatAxis ())
137141make_carray_args (:: Type{T} , :: NamedTuple{(), Tuple{}} ) where {T} = (T[], FlatAxis ())
@@ -142,8 +146,7 @@ function make_carray_args(nt)
142146end
143147make_carray_args (:: Type{T} , nt) where {T} = make_carray_args (Vector{T}, nt)
144148function make_carray_args (A:: Type{<:AbstractArray} , nt)
145- T = recursive_eltype (nt)
146- init = isbitstype (T) ? T[] : []
149+ init = allocate_numeric_container (nt)
147150 data, idx = make_idx (init, nt, 0 )
148151 return (A (data), Axis (idx))
149152end
@@ -153,8 +156,8 @@ function make_idx(data, nt::Union{NamedTuple, AbstractDict}, last_val)
153156 len = recursive_length (nt)
154157 kvs = []
155158 lv = 0
156- for (k,v) in zip ( keys (nt), values (nt) )
157- (_,val) = make_idx (data, v, lv)
159+ for (k, v) in pairs (nt )
160+ (_, val) = make_idx (data, v, lv)
158161 push! (kvs, k => val)
159162 lv = val
160163 end
@@ -170,14 +173,14 @@ make_idx(data, x, last_val) = (
170173 ViewAxis (last_index (last_val) + 1 )
171174)
172175make_idx (data, x:: ComponentVector , last_val) = (
173- pushcat ! (data, x),
176+ append ! (data, x),
174177 ViewAxis (
175178 last_index (last_val) .+ (1 : length (x)),
176179 getaxes (x)[1 ]
177180 )
178181)
179182function make_idx (data, x:: AbstractArray , last_val)
180- pushcat ! (data, x)
183+ append ! (data, x)
181184 out = last_index (last_val) .+ (1 : length (x))
182185 return (data, ViewAxis (out, ShapedAxis (size (x))))
183186end
@@ -186,7 +189,7 @@ function make_idx(data, x::A, last_val) where {A<:AbstractArray{<:Union{NamedTup
186189 if eltype (x) |> isconcretetype
187190 out = ()
188191 for elem in x
189- (_, out) = make_idx (data, elem, last_val)
192+ _, out = make_idx (data, elem, last_val)
190193 end
191194 return (
192195 data,
@@ -222,8 +225,6 @@ function _update_field(x, pair)
222225 return x_copy
223226end
224227
225- pushcat! (a, b) = reduce ((x1,x2) -> push! (x1,x2), b; init= a)
226-
227228# Reshape ComponentArrays with ShapedAxis axes
228229maybe_reshape (data, :: NotShapedOrPartitionedAxis... ) = data
229230function maybe_reshape (data, axs:: AbstractAxis... )
0 commit comments