@@ -14,7 +14,8 @@ include("utils.jl")
14
14
15
15
# Technically we know the length of CartesianIndices but we need to convert it first, so here we
16
16
# don't put it in OffsetAxisKnownLength.
17
- const OffsetAxisKnownLength = Union{Integer, UnitRange, Base. OneTo, IdentityUnitRange, IdOffsetRange}
17
+ # TODO : add CartesianIndices to OffsetAxisKnownLength
18
+ const OffsetAxisKnownLength = Union{Integer, AbstractUnitRange, IdOffsetRange}
18
19
const OffsetAxis = Union{OffsetAxisKnownLength, CartesianIndices, Colon}
19
20
const ArrayInitializer = Union{UndefInitializer, Missing, Nothing}
20
21
96
97
for FT in (:OffsetArray , :OffsetVector , :OffsetMatrix )
97
98
# The only route out to inner constructor
98
99
@eval function $FT (A:: AbstractArray{T} , offsets:: NTuple{N, Integer} ) where {T, N}
99
- ndims (A) == N || throw (DimensionMismatch (" The number of offsets should equal ndims(A) = $(ndims (A)) " ))
100
+ ndims (A) == N || throw (DimensionMismatch (" The number of offsets $(N) should equal ndims(A) = $(ndims (A)) " ))
100
101
OffsetArray {T, ndims(A), typeof(A)} (A, offsets)
101
102
end
102
103
# nested OffsetArrays
@@ -119,32 +120,25 @@ for FT in (:OffsetArray, :OffsetVector, :OffsetMatrix)
119
120
end
120
121
121
122
# array initialization
122
- OffsetArray {T,N} (init:: ArrayInitializer , inds:: NTuple{N, OffsetAxisKnownLength} ) where {T,N} =
123
- OffsetArray (Array {T,N} (init, map (_indexlength, inds)), map (_indexoffset, inds))
124
- OffsetArray {T,N} (init:: ArrayInitializer , inds:: Vararg{OffsetAxisKnownLength,N} ) where {T,N} = OffsetArray {T,N} (init, inds)
125
- function OffsetArray {T, N} (init:: ArrayInitializer , inds:: NTuple{N, Union{OffsetAxisKnownLength, CartesianIndices}} ) where {T, N}
126
- OffsetArray {T, N} (init, _expandCartesianIndices (inds))
123
+ function OffsetArray {T,N} (init:: ArrayInitializer , inds:: NTuple{N, OffsetAxisKnownLength} ) where {T,N}
124
+ AA = Array {T,N} (init, map (_indexlength, inds))
125
+ OffsetArray {T, N, typeof(AA)} (AA, map (_indexoffset, inds))
127
126
end
128
- function OffsetArray {T, N} (init:: ArrayInitializer , inds:: Vararg{ Union{OffsetAxisKnownLength, CartesianIndices}} ) where {T, N}
129
- OffsetArray {T, N} (init, inds)
130
- end
131
- function OffsetArray {T, N} (init :: ArrayInitializer , inds :: CartesianIndices{N} ) where {T,N}
132
- OffsetArray {T, N} (init, convert (Tuple{Vararg{AbstractUnitRange{Int}}}, inds) )
127
+ function OffsetArray {T, N} (init:: ArrayInitializer , inds:: NTuple{NT, Union{OffsetAxisKnownLength, CartesianIndices}} ) where {T, N, NT }
128
+ # NT is probably not the actual dimension of the array; CartesianIndices might contain multiple dimensions
129
+ indsN = _expandCartesianIndices (inds)
130
+ length (indsN) == N || throw ( DimensionMismatch ( " The number of offsets $( length (indsN)) should equal ndims(A) = $N " ))
131
+ OffsetArray {T, N} (init, indsN )
133
132
end
133
+ OffsetArray {T,N} (init:: ArrayInitializer , inds:: Union{OffsetAxisKnownLength, CartesianIndices} ...) where {T,N} = OffsetArray {T,N} (init, inds)
134
134
135
135
OffsetArray {T} (init:: ArrayInitializer , inds:: NTuple{N, OffsetAxisKnownLength} ) where {T,N} = OffsetArray {T,N} (init, inds)
136
- OffsetArray {T} (init:: ArrayInitializer , inds:: Vararg{OffsetAxisKnownLength,N} ) where {T,N} = OffsetArray {T,N} (init, inds)
137
136
function OffsetArray {T} (init:: ArrayInitializer , inds:: NTuple{N, Union{OffsetAxisKnownLength, CartesianIndices}} ) where {T, N}
138
137
# N is probably not the actual dimension of the array; CartesianIndices might contain multiple dimensions
139
138
indsN = _expandCartesianIndices (inds)
140
139
OffsetArray {T, length(indsN)} (init, indsN)
141
140
end
142
- function OffsetArray {T} (init:: ArrayInitializer , inds:: Vararg{Union{OffsetAxisKnownLength, CartesianIndices}, N} ) where {T, N}
143
- OffsetArray {T} (init, inds)
144
- end
145
- function OffsetArray {T} (init:: ArrayInitializer , inds:: CartesianIndices{N} ) where {T,N}
146
- OffsetArray {T, N} (init, convert (Tuple{Vararg{AbstractUnitRange{Int}}}, inds))
147
- end
141
+ OffsetArray {T} (init:: ArrayInitializer , inds:: Union{OffsetAxisKnownLength, CartesianIndices} ...) where {T} = OffsetArray {T} (init, inds)
148
142
149
143
Base. IndexStyle (:: Type{OA} ) where {OA<: OffsetArray } = IndexStyle (parenttype (OA))
150
144
parenttype (:: Type{OffsetArray{T,N,AA}} ) where {T,N,AA} = AA
0 commit comments