|
1 | | -## ComponentArrays |
| 1 | +const CombinedAnyDims = Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}} |
| 2 | +const AnyCombinedAnyDims = Tuple{<:CombinedOrRegularAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}} |
| 3 | +const CombinedCombinedAnyDims = Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}} |
| 4 | + |
2 | 5 | # Similar |
3 | 6 | Base.similar(x::ComponentArray) = ComponentArray(similar(getdata(x)), getaxes(x)...) |
4 | 7 | Base.similar(x::ComponentArray, ::Type{T}) where T = ComponentArray(similar(getdata(x), T), getaxes(x)...) |
5 | | -function Base.similar(x::AbstractArray, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
6 | | - arr = similar(getdata(x), length.(_array_axis.(dims))) |
7 | | - return ComponentArray(arr, _component_axis.(dims)...) |
8 | | -end |
9 | | -function Base.similar(x::AbstractArray, dims::Tuple{<:Union{Integer,AbstractUnitRange}, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
10 | | - arr = similar(getdata(x), length.(_array_axis.(dims))) |
11 | | - return ComponentArray(arr, _component_axis.(dims)...) |
12 | | -end |
13 | | -function Base.similar(x::AbstractArray, dims::Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
14 | | - arr = similar(getdata(x), length.(_array_axis.(dims))) |
15 | | - return ComponentArray(arr, _component_axis.(dims)...) |
16 | | -end |
17 | | -function Base.similar(x::AbstractArray, ::Type{T}, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) where {T} |
18 | | - arr = similar(getdata(x), T, length.(_array_axis.(dims))) |
19 | | - return ComponentArray(arr, _component_axis.(dims)...) |
20 | | -end |
21 | | -function Base.similar(x::AbstractArray, ::Type{T}, dims::Tuple{<:Union{Integer,AbstractUnitRange}, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) where {T} |
22 | | - arr = similar(getdata(x), T, length.(_array_axis.(dims))) |
23 | | - return ComponentArray(arr, _component_axis.(dims)...) |
24 | | -end |
25 | | -function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
26 | | - arr = similar(x, length.(_array_axis.(dims))) |
27 | | - return ComponentArray(arr, _component_axis.(dims)...) |
28 | | -end |
29 | | -function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedOrRegularAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
30 | | - arr = similar(x, length.(_array_axis.(dims))) |
31 | | - return ComponentArray(arr, _component_axis.(dims)...) |
32 | | -end |
33 | | -function Base.similar(x::Type{<:AbstractArray}, dims::Tuple{<:CombinedAxis, <:CombinedAxis, Vararg{<:CombinedOrRegularAxis}}) |
34 | | - arr = similar(x, length.(_array_axis.(dims))) |
35 | | - return ComponentArray(arr, _component_axis.(dims)...) |
36 | | -end |
| 8 | +Base.similar(x::AbstractArray, dims::CombinedAnyDims) = _similar(x, dims) |
| 9 | +Base.similar(x::AbstractArray, dims::AnyCombinedAnyDims) = _similar(x, dims) |
| 10 | +Base.similar(x::AbstractArray, dims::CombinedCombinedAnyDims) = _similar(x, dims) |
| 11 | +Base.similar(x::AbstractArray, ::Type{T}, dims::CombinedAnyDims) where {T} = _similar(x, T, dims) |
| 12 | +Base.similar(x::AbstractArray, ::Type{T}, dims::AnyCombinedAnyDims) where {T} = _similar(x, T, dims) |
| 13 | +Base.similar(x::AbstractArray, ::Type{T}, dims::CombinedCombinedAnyDims) where {T} = _similar(x, T, dims) |
| 14 | +Base.similar(x::Type{<:AbstractArray}, dims::CombinedAnyDims) = _similar(x, dims) |
| 15 | +Base.similar(x::Type{<:AbstractArray}, dims::AnyCombinedAnyDims) = _similar(x, dims) |
| 16 | +Base.similar(x::Type{<:AbstractArray}, dims::CombinedCombinedAnyDims) = _similar(x, dims) |
| 17 | + |
| 18 | +_similar(x::AbstractArray, dims) = ComponentArray(similar(getdata(x), length.(_array_axis.(dims))), _component_axis.(dims)...) |
| 19 | +_similar(x::Type, dims) = ComponentArray(similar(x, length.(_array_axis.(dims))), _component_axis.(dims)...) |
| 20 | +_similar(x, T, dims) = ComponentArray(similar(getdata(x), T, length.(_array_axis.(dims))), _component_axis.(dims)...) |
37 | 21 |
|
38 | 22 |
|
39 | 23 | Base.zero(x::ComponentArray) = zero.(x) |
|
0 commit comments