Skip to content

Commit da06ff6

Browse files
committed
fix ambiguity
1 parent c03c15f commit da06ff6

File tree

2 files changed

+43
-25
lines changed

2 files changed

+43
-25
lines changed

src/array/indexing.jl

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22

33
#### getindex/view ####
44

5-
6-
const SelectorOrStandard = Union{SelectorOrInterval,StandardIndices}
7-
const DimensionIndsArrays = Union{AbstractArray{<:Dimension},AbstractArray{<:DimTuple}}
8-
const DimensionalIndices = Union{DimTuple,DimIndices,DimSelectors,Dimension,DimensionIndsArrays}
9-
const _DimIndicesAmb = Union{AbstractArray{Union{}},DimIndices{<:Integer},DimSelectors{<:Integer}}
10-
115
for f in (:getindex, :view, :dotview)
126
_dim_f = Symbol(:_dim_, f)
137
if f === :view

src/dimindices.jl

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,6 @@ Base.similar(A::AbstractDimArrayGenerator, ::Type{T}, D::DimTuple) where T =
1111
Base.similar(A::AbstractDimArrayGenerator, ::Type{T}, D::Tuple{}) where T =
1212
dimconstructor(D)(A; data=similar(Array{T}, ()), dims=(), refdims=(), metadata=NoMetadata())
1313

14-
# Indexing that returns a new object with the same number of dims
15-
for f in (:getindex, :dotview, :view)
16-
T = Union{Colon,AbstractVector}
17-
@eval @propagate_inbounds function Base.$f(di::AbstractDimArrayGenerator, i1::$T, i2::$T, Is::$T...)
18-
I = (i1, i2, Is...)
19-
newdims, _ = slicedims(dims(di), I)
20-
rebuild(di; dims=newdims)
21-
end
22-
@eval @propagate_inbounds Base.$f(di::AbstractDimArrayGenerator{<:Any,1}, i::$T) =
23-
rebuild(di; dims=(dims(di, 1)[i],))
24-
@eval @propagate_inbounds Base.$f(dg::AbstractDimArrayGenerator, i::Integer) =
25-
Base.$f(dg, Tuple(CartesianIndices(dg)[i])...)
26-
if f == :view
27-
@eval @propagate_inbounds Base.$f(A::AbstractDimArrayGenerator) = A
28-
else
29-
@eval @propagate_inbounds Base.$f(::AbstractDimArrayGenerator) = ()
30-
end
31-
end
32-
3314
@inline Base.permutedims(A::AbstractDimArrayGenerator{<:Any,2}) =
3415
rebuild(A; dims=reverse(dims(A)))
3516
@inline Base.permutedims(A::AbstractDimArrayGenerator{<:Any,1}) =
@@ -454,3 +435,46 @@ function mergedims(A::DimExtensionArray, dim_pairs::Pair...)
454435
data_merged = reshape(parent(Aperm), map(length, dims_new))
455436
return DimArray(data_merged, dims_new)
456437
end
438+
439+
const SelectorOrStandard = Union{SelectorOrInterval,StandardIndices}
440+
const DimensionIndsArrays = Union{AbstractArray{<:Dimension},AbstractArray{<:DimTuple}}
441+
const DimensionalIndices = Union{DimTuple,DimIndices,DimSelectors,Dimension,DimensionIndsArrays}
442+
const _DimIndicesAmb = Union{AbstractArray{Union{}},DimIndices{<:Integer},DimSelectors{<:Integer}}
443+
444+
# Indexing that returns a new object with the same number of dims
445+
for f in (:getindex, :dotview, :view)
446+
T = Union{Colon,AbstractVector}
447+
_dim_f = Symbol(:_dim_, f)
448+
@eval begin
449+
@propagate_inbounds function Base.$f(di::AbstractDimArrayGenerator, i1::$T, i2::$T, Is::$T...)
450+
I = (i1, i2, Is...)
451+
newdims, _ = slicedims(dims(di), I)
452+
rebuild(di; dims=newdims)
453+
end
454+
@propagate_inbounds function Base.$f(
455+
di::AbstractDimArrayGenerator,
456+
i1::DimensionalIndices,
457+
i2::DimensionalIndices,
458+
Is::DimensionalIndices...
459+
)
460+
rebuild(di; dims=newdims)
461+
end
462+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator, i::DimIndices) = $_dim_f(A, i)
463+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator, i::DimSelectors) = $_dim_f(A, i)
464+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator, i::DimensionalIndices) = $_dim_f(A, i)
465+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator, i::_DimIndicesAmb) = $_dim_f(A, i)
466+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator{<:Any,1}, i::DimIndices) = $_dim_f(A, i)
467+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator{<:Any,1}, i::DimSelectors) = $_dim_f(A, i)
468+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator{<:Any,1}, i::DimensionalIndices) = $_dim_f(A, i)
469+
@propagate_inbounds Base.$f(A::AbstractDimArrayGenerator{<:Any,1}, i::_DimIndicesAmb) = $_dim_f(A, i)
470+
@propagate_inbounds Base.$f(di::AbstractDimArrayGenerator{<:Any,1}, i::$T) =
471+
rebuild(di; dims=(dims(di, 1)[i],))
472+
@propagate_inbounds Base.$f(dg::AbstractDimArrayGenerator, i::Integer) =
473+
Base.$f(dg, Tuple(CartesianIndices(dg)[i])...)
474+
end
475+
if f == :view
476+
@eval @propagate_inbounds Base.$f(A::AbstractDimArrayGenerator) = A
477+
else
478+
@eval @propagate_inbounds Base.$f(::AbstractDimArrayGenerator) = ()
479+
end
480+
end

0 commit comments

Comments
 (0)