92
92
93
93
for (T, S) in [(:KeyedVecOrMat , :KeyedVecOrMat ), # KeyedArray gives ambiguities
94
94
(:KeyedVecOrMat , :AbstractVecOrMat ), (:AbstractVecOrMat , :KeyedVecOrMat ),
95
- (:NdaKaVoM , :NdaKaVoM ), # These are needed because hcat(NamedDimsArray...) relies on similar()
95
+ (:NdaKaVoM , :NdaKaVoM ),
96
96
(:NdaKaVoM , :KeyedVecOrMat ), (:KeyedVecOrMat , :NdaKaVoM ),
97
- (:NdaKaVoM , :AbstractVecOrMat ), (:AbstractVecOrMat , :NdaKaVoM ) ]
97
+ (:NdaKaVoM , :AbstractVecOrMat ), (:AbstractVecOrMat , :NdaKaVoM ),
98
+ ]
98
99
99
100
@eval function Base. vcat (A:: $T , B:: $S , Cs:: AbstractVecOrMat... )
100
101
data = vcat (keyless (A), keyless (B), keyless .(Cs)... )
@@ -118,13 +119,23 @@ for (T, S) in [ (:KeyedArray, :KeyedArray),
118
119
(:KeyedArray , :NamedDimsArray ), (:NamedDimsArray , :KeyedArray ),
119
120
(:NdaKa , :NdaKa ),
120
121
(:NdaKa , :KeyedArray ), (:KeyedArray , :NdaKa ),
121
- (:NdaKa , :AbstractArray ), (:AbstractArray , :NdaKa ) ]
122
+ (:NdaKa , :AbstractArray ), (:AbstractArray , :NdaKa ),
123
+ ]
122
124
123
125
@eval function Base. cat (A:: $T , B:: $S , Cs:: AbstractArray... ; dims)
124
- # numerical_dims = hasnames(A) || hasnames(B) ? ... todo!
125
- data = cat (keyless (A), keyless (B), keyless .(Cs)... ; dims= dims)
126
+ numerical_dims, data = if any (hasnames .((A, B, Cs... )))
127
+ old_names = NamedDims. unify_names_longest (dimnames (A), dimnames (B), dimnames .(Cs)... )
128
+ new_names = NamedDims. expand_dimnames (old_names, dims)
129
+ α = NamedDims. dim (new_names, dims)
130
+ β = cat (keyless (A), keyless (B), keyless .(Cs)... ; dims= dims)
131
+ α, β
132
+ else
133
+ α = val_strip (dims)
134
+ β = cat (keyless (A), keyless (B), keyless .(Cs)... ; dims= numerical_dims)
135
+ α, β
136
+ end
126
137
new_keys = ntuple (ndims (data)) do d
127
- if d in dims
138
+ if d in numerical_dims
128
139
key_vcat (keys_or_axes (A,d), keys_or_axes (B,d), keys_or_axes .(Cs,d)... )
129
140
else
130
141
unify_one (keys_or_axes (A,d), keys_or_axes (B,d), keys_or_axes .(Cs,d)... )
@@ -134,6 +145,8 @@ for (T, S) in [ (:KeyedArray, :KeyedArray),
134
145
end
135
146
136
147
end
148
+ val_strip (dims:: Val{d} ) where {d} = d
149
+ val_strip (dims) = dims
137
150
key_vcat (a:: AbstractVector , b:: AbstractVector ) = vcat (a,b)
138
151
key_vcat (a:: Base.OneTo , b:: Base.OneTo ) = Base. OneTo (a. stop + b. stop)
139
152
key_vcat (a,b,cs... ) = key_vcat (key_vcat (a,b),cs... )
0 commit comments