@@ -163,26 +163,29 @@ end
163
163
#
164
164
_defaultdimname (i) = i == 1 ? (:row ) : i == 2 ? (:col ) : i == 3 ? (:page ) : Symbol (:dim_ , i)
165
165
166
- default_axes (A:: AbstractArray ) = _default_axes (A, indices (A), ())
167
- _default_axes {T,N} (A:: AbstractArray{T,N} , inds, axs:: NTuple{N,Axis} ) = axs
168
- @inline _default_axes {T,N,M} (A:: AbstractArray{T,N} , inds, axs:: NTuple{M,Axis} ) =
169
- _default_axes (A, inds, (axs... , _nextaxistype (axs)(inds[M+ 1 ])))
170
166
# Why doesn't @pure work here?
171
167
@generated function _nextaxistype {M} (axs:: NTuple{M,Axis} )
172
168
name = _defaultdimname (M+ 1 )
173
169
:(Axis{$ (Expr (:quote , name))})
174
170
end
175
171
176
- AxisArray (A:: AbstractArray , axs:: Axis... ) = AxisArray (A, axs)
172
+
173
+ @inline default_axes (A:: AbstractArray , args= indices (A)) = _default_axes (A, args, ())
174
+ _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{} , axs:: NTuple{N,Axis} ) = axs
175
+ _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{Any, Vararg{Any}} , axs:: NTuple{N,Axis} ) = throw (ArgumentError (" too many axes provided" ))
176
+ _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{Axis, Vararg{Any}} , axs:: NTuple{N,Axis} ) = throw (ArgumentError (" too many axes provided" ))
177
+ @inline _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{} , axs:: Tuple ) =
178
+ _default_axes (A, args, (axs... , _nextaxistype (axs)(indices (A, length (axs)+ 1 ))))
179
+ @inline _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{Any, Vararg{Any}} , axs:: Tuple ) =
180
+ _default_axes (A, Base. tail (args), (axs... , _nextaxistype (axs)(args[1 ])))
181
+ @inline _default_axes {T,N} (A:: AbstractArray{T,N} , args:: Tuple{Axis, Vararg{Any}} , axs:: Tuple ) =
182
+ _default_axes (A, Base. tail (args), (axs... , args[1 ]))
183
+
177
184
function AxisArray {T,N} (A:: AbstractArray{T,N} , axs:: NTuple{N,Axis} )
178
185
checksizes (axs, _size (A)) || throw (ArgumentError (" the length of each axis must match the corresponding size of data" ))
179
186
checknames (axisnames (axs... )... )
180
187
AxisArray {T,N,typeof(A),typeof(axs)} (A, axs)
181
188
end
182
- function AxisArray {L} (A:: AbstractArray , axs:: NTuple{L,Axis} )
183
- newaxs = _default_axes (A, indices (A), axs)
184
- AxisArray (A, newaxs)
185
- end
186
189
187
190
@inline checksizes (axs, sz) =
188
191
(length (axs[1 ]) == sz[1 ]) & checksizes (tail (axs), tail (sz))
@@ -202,7 +205,8 @@ checknames() = ()
202
205
# Simple non-type-stable constructors to specify just the name or axis values
203
206
AxisArray (A:: AbstractArray ) = AxisArray (A, ()) # Disambiguation
204
207
AxisArray (A:: AbstractArray , names:: Symbol... ) = (inds = indices (A); AxisArray (A, ntuple (i-> Axis {names[i]} (inds[i]), length (names))))
205
- AxisArray (A:: AbstractArray , vects:: AbstractVector... ) = AxisArray (A, ntuple (i-> Axis {_defaultdimname(i)} (vects[i]), length (vects)))
208
+ AxisArray (A:: AbstractArray , vects:: Union{AbstractVector, Axis} ...) = AxisArray (A, vects)
209
+ AxisArray (A:: AbstractArray , vects:: Tuple{Vararg{Union{AbstractVector, Axis}}} ) = AxisArray (A, default_axes (A, vects))
206
210
function AxisArray {T,N} (A:: AbstractArray{T,N} , names:: NTuple{N,Symbol} , steps:: NTuple{N,Number} , offsets:: NTuple{N,Number} = map (zero, steps))
207
211
axs = ntuple (i-> Axis {names[i]} (range (offsets[i], steps[i], size (A,i))), N)
208
212
AxisArray (A, axs... )
0 commit comments