Skip to content

Commit 40b6d5b

Browse files
committed
Streamline similar
1 parent 799771c commit 40b6d5b

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

src/core.jl

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,19 +230,13 @@ Base.convert{T,N}(::Type{Array{T,N}}, A::AxisArray{T,N}) = convert(Array{T,N}, A
230230
# AxisArray. But if we're changing dimensions, there's no way it can know how
231231
# to keep track of the axes, so just punt and return a regular old Array.
232232
# TODO: would it feel more consistent to return an AxisArray without any axes?
233-
Base.similar{T}(A::AxisArray{T}) = (d = similar(A.data, T); AxisArray(d, A.axes))
234-
Base.similar{T}(A::AxisArray{T}, S::Type) = (d = similar(A.data, S); AxisArray(d, A.axes))
235-
Base.similar{T}(A::AxisArray{T}, S::Type, ::Tuple{}) = (d = similar(A.data, S); AxisArray(d, A.axes))
236-
Base.similar{T}(A::AxisArray{T}, dims::Int) = similar(A, T, (dims,))
237-
Base.similar{T}(A::AxisArray{T}, dims::Int...) = similar(A, T, dims)
238-
Base.similar{T}(A::AxisArray{T}, dims::Tuple{Vararg{Int}}) = similar(A, T, dims)
239-
Base.similar{T}(A::AxisArray{T}, S::Type, dims::Int...) = similar(A.data, S, dims)
240-
Base.similar{T}(A::AxisArray{T}, S::Type, dims::Tuple{Vararg{Int}}) = similar(A.data, S, dims)
233+
Base.similar{S}(A::AxisArray, ::Type{S}) = (d = similar(A.data, S); AxisArray(d, A.axes))
234+
Base.similar{S,N}(A::AxisArray, ::Type{S}, dims::Dims{N}) = similar(A.data, S, dims)
241235
# If, however, we pass Axis objects containing the new axis for that dimension,
242236
# we can return a similar AxisArray with an appropriately modified size
243-
Base.similar{T}(A::AxisArray{T}, axs::Axis...) = similar(A, T, axs)
244-
Base.similar{T}(A::AxisArray{T}, S::Type, axs::Axis...) = similar(A, S, axs)
245-
@generated function Base.similar{T,N}(A::AxisArray{T,N}, S::Type, axs::Tuple{Vararg{Axis}})
237+
Base.similar{T}(A::AxisArray{T}, ax1::Axis, axs::Axis...) = similar(A, T, (ax1, axs...))
238+
Base.similar{S}(A::AxisArray, ::Type{S}, ax1::Axis, axs::Axis...) = similar(A, S, (ax1, axs...))
239+
@generated function Base.similar{T,S,N}(A::AxisArray{T,N}, ::Type{S}, axs::Tuple{Axis,Vararg{Axis}})
246240
inds = Expr(:tuple)
247241
ax = Expr(:tuple)
248242
for d=1:N

0 commit comments

Comments
 (0)