@@ -156,81 +156,81 @@ MemoryLayout(::Type{<:ReshapedArray{T,N,A,DIMS}}) where {T,N,A,DIMS} = reshapedl
156
156
157
157
158
158
@inline MemoryLayout (A:: Type{<:SubArray{T,N,P,I}} ) where {T,N,P,I} =
159
- subarraylayout (MemoryLayout (P), I)
160
- subarraylayout (_1, _2) = UnknownLayout ()
161
- subarraylayout (_1, _2, _3)= UnknownLayout ()
162
- subarraylayout (:: DenseColumnMajor , :: Type {<: Tuple{<:Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex}} }) =
159
+ sublayout (MemoryLayout (P), I)
160
+ sublayout (_1, _2) = UnknownLayout ()
161
+ sublayout (_1, _2, _3)= UnknownLayout ()
162
+ sublayout (:: DenseColumnMajor , :: Type {<: Tuple{<:Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex}} }) =
163
163
DenseColumnMajor () # A[:] is DenseColumnMajor if A is DenseColumnMajor
164
- subarraylayout (ml:: AbstractColumnMajor , inds) = _column_subarraylayout1 (ml, inds)
165
- subarraylayout (:: AbstractRowMajor , :: Type{<:Tuple{<:Any}} ) =
164
+ sublayout (ml:: AbstractColumnMajor , inds) = _column_sublayout1 (ml, inds)
165
+ sublayout (:: AbstractRowMajor , :: Type{<:Tuple{<:Any}} ) =
166
166
UnknownLayout () # A[:] does not have any structure if A is AbstractRowMajor
167
- subarraylayout (ml:: AbstractRowMajor , inds) = _row_subarraylayout1 (ml, tuple_type_reverse (inds))
168
- subarraylayout (ml:: AbstractStridedLayout , inds) = _strided_subarraylayout (ml, inds)
167
+ sublayout (ml:: AbstractRowMajor , inds) = _row_sublayout1 (ml, tuple_type_reverse (inds))
168
+ sublayout (ml:: AbstractStridedLayout , inds) = _strided_sublayout (ml, inds)
169
169
170
- _column_subarraylayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
170
+ _column_sublayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
171
171
DenseColumnMajor () # view(A,1,1,2) is a scalar, which we include in DenseColumnMajor
172
- _column_subarraylayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Slice =
172
+ _column_sublayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Slice =
173
173
DenseColumnMajor () # view(A,:,1,2) is a DenseColumnMajor vector
174
- _column_subarraylayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
174
+ _column_sublayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
175
175
DenseColumnMajor () # view(A,1:3,1,2) is a DenseColumnMajor vector
176
- _column_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
176
+ _column_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
177
177
DenseColumnMajor () # view(A,1,1,2) is a scalar, which we include in DenseColumnMajor
178
- _column_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
178
+ _column_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
179
179
DenseColumnMajor () # view(A,1:3,1,2) is a DenseColumnMajor vector
180
- _column_subarraylayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Slice =
181
- _column_subarraylayout (DenseColumnMajor (), DenseColumnMajor (), tuple_type_tail (inds))
182
- _column_subarraylayout1 (par:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
183
- _column_subarraylayout (par, ColumnMajor (), tuple_type_tail (inds))
184
- _column_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
185
- _column_subarraylayout (par, ColumnMajor (), tuple_type_tail (inds))
186
- _column_subarraylayout1 (par:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
187
- _column_subarraylayout (par, StridedLayout (), tuple_type_tail (inds))
188
- _column_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
189
- _column_subarraylayout (par, StridedLayout (), tuple_type_tail (inds))
190
- _column_subarraylayout1 (par, inds) = UnknownLayout ()
191
- _column_subarraylayout (par, ret, :: Type{<:Tuple{}} ) = ret
192
- _column_subarraylayout (par, ret, :: Type{<:Tuple{I}} ) where I = UnknownLayout ()
193
- _column_subarraylayout (:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
180
+ _column_sublayout1 (:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Slice =
181
+ _column_sublayout (DenseColumnMajor (), DenseColumnMajor (), tuple_type_tail (inds))
182
+ _column_sublayout1 (par:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
183
+ _column_sublayout (par, ColumnMajor (), tuple_type_tail (inds))
184
+ _column_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
185
+ _column_sublayout (par, ColumnMajor (), tuple_type_tail (inds))
186
+ _column_sublayout1 (par:: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
187
+ _column_sublayout (par, StridedLayout (), tuple_type_tail (inds))
188
+ _column_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
189
+ _column_sublayout (par, StridedLayout (), tuple_type_tail (inds))
190
+ _column_sublayout1 (par, inds) = UnknownLayout ()
191
+ _column_sublayout (par, ret, :: Type{<:Tuple{}} ) = ret
192
+ _column_sublayout (par, ret, :: Type{<:Tuple{I}} ) where I = UnknownLayout ()
193
+ _column_sublayout (:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
194
194
DenseColumnMajor () # A[:,1:3,1,2] is DenseColumnMajor if A is DenseColumnMajor
195
- _column_subarraylayout (par:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I, Vararg{Int}}} ) where I<: Slice =
195
+ _column_sublayout (par:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I, Vararg{Int}}} ) where I<: Slice =
196
196
DenseColumnMajor ()
197
- _column_subarraylayout (par:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Slice =
198
- _column_subarraylayout (par, DenseColumnMajor (), tuple_type_tail (inds))
199
- _column_subarraylayout (par, :: AbstractColumnMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
200
- _column_subarraylayout (par, ColumnMajor (), tuple_type_tail (inds))
201
- _column_subarraylayout (par, :: AbstractStridedLayout , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
202
- _column_subarraylayout (par, StridedLayout (), tuple_type_tail (inds))
203
-
204
- _row_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
197
+ _column_sublayout (par:: DenseColumnMajor , :: DenseColumnMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Slice =
198
+ _column_sublayout (par, DenseColumnMajor (), tuple_type_tail (inds))
199
+ _column_sublayout (par, :: AbstractColumnMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
200
+ _column_sublayout (par, ColumnMajor (), tuple_type_tail (inds))
201
+ _column_sublayout (par, :: AbstractStridedLayout , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
202
+ _column_sublayout (par, StridedLayout (), tuple_type_tail (inds))
203
+
204
+ _row_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{Int,AbstractCartesianIndex} =
205
205
DenseColumnMajor () # view(A,1,1,2) is a scalar, which we include in DenseColumnMajor
206
- _row_subarraylayout1 (:: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Slice =
206
+ _row_sublayout1 (:: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Slice =
207
207
DenseColumnMajor () # view(A,1,2,:) is a DenseColumnMajor vector
208
- _row_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
208
+ _row_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: AbstractUnitRange{Int} =
209
209
DenseColumnMajor () # view(A,1,2,1:3) is a DenseColumnMajor vector
210
- _row_subarraylayout1 (:: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Slice =
211
- _row_subarraylayout (DenseRowMajor (), DenseRowMajor (), tuple_type_tail (inds))
212
- _row_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
213
- _row_subarraylayout (par, RowMajor (), tuple_type_tail (inds))
214
- _row_subarraylayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
215
- _row_subarraylayout (par, StridedLayout (), tuple_type_tail (inds))
216
- _row_subarraylayout1 (par, inds) = UnknownLayout ()
217
- _row_subarraylayout (par, ret, :: Type{<:Tuple{}} ) = ret
218
- _row_subarraylayout (par, ret, :: Type{<:Tuple{I}} ) where I = UnknownLayout ()
219
- _row_subarraylayout (:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
210
+ _row_sublayout1 (:: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Slice =
211
+ _row_sublayout (DenseRowMajor (), DenseRowMajor (), tuple_type_tail (inds))
212
+ _row_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: AbstractUnitRange{Int} =
213
+ _row_sublayout (par, RowMajor (), tuple_type_tail (inds))
214
+ _row_sublayout1 (par, inds:: Type{<:Tuple{I,Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
215
+ _row_sublayout (par, StridedLayout (), tuple_type_tail (inds))
216
+ _row_sublayout1 (par, inds) = UnknownLayout ()
217
+ _row_sublayout (par, ret, :: Type{<:Tuple{}} ) = ret
218
+ _row_sublayout (par, ret, :: Type{<:Tuple{I}} ) where I = UnknownLayout ()
219
+ _row_sublayout (:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I,Vararg{Int}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
220
220
DenseRowMajor () # A[1,2,1:3,:] is DenseRowMajor if A is DenseRowMajor
221
- _row_subarraylayout (par:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I, Vararg{Int}}} ) where I<: Slice =
221
+ _row_sublayout (par:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I, Vararg{Int}}} ) where I<: Slice =
222
222
DenseRowMajor ()
223
- _row_subarraylayout (par:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Slice =
224
- _row_subarraylayout (par, DenseRowMajor (), tuple_type_tail (inds))
225
- _row_subarraylayout (par:: AbstractRowMajor , :: AbstractRowMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
226
- _row_subarraylayout (par, RowMajor (), tuple_type_tail (inds))
227
- _row_subarraylayout (par:: AbstractRowMajor , :: AbstractStridedLayout , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
228
- _row_subarraylayout (par, StridedLayout (), tuple_type_tail (inds))
229
-
230
- _strided_subarraylayout (par, inds) = UnknownLayout ()
231
- _strided_subarraylayout (par, :: Type{<:Tuple{}} ) = StridedLayout ()
232
- _strided_subarraylayout (par, inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
233
- _strided_subarraylayout (par, tuple_type_tail (inds))
223
+ _row_sublayout (par:: DenseRowMajor , :: DenseRowMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Slice =
224
+ _row_sublayout (par, DenseRowMajor (), tuple_type_tail (inds))
225
+ _row_sublayout (par:: AbstractRowMajor , :: AbstractRowMajor , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{AbstractUnitRange{Int},Int,AbstractCartesianIndex} =
226
+ _row_sublayout (par, RowMajor (), tuple_type_tail (inds))
227
+ _row_sublayout (par:: AbstractRowMajor , :: AbstractStridedLayout , inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
228
+ _row_sublayout (par, StridedLayout (), tuple_type_tail (inds))
229
+
230
+ _strided_sublayout (par, inds) = UnknownLayout ()
231
+ _strided_sublayout (par, :: Type{<:Tuple{}} ) = StridedLayout ()
232
+ _strided_sublayout (par, inds:: Type{<:Tuple{I, Vararg{Any}}} ) where I<: Union{RangeIndex,AbstractCartesianIndex} =
233
+ _strided_sublayout (par, tuple_type_tail (inds))
234
234
235
235
# MemoryLayout of transposed and adjoint matrices
236
236
struct ConjLayout{ML<: MemoryLayout } <: MemoryLayout end
@@ -241,7 +241,7 @@ conjlayout(::Type{<:Complex}, ::ML) where ML<:AbstractStridedLayout = ConjLayout
241
241
conjlayout (:: Type{<:Real} , M:: MemoryLayout ) = M
242
242
243
243
244
- subarraylayout (:: ConjLayout{ML} , t:: Type{<:Tuple} ) where ML = ConjLayout {typeof(subarraylayout (ML(), t))} ()
244
+ sublayout (:: ConjLayout{ML} , t:: Type{<:Tuple} ) where ML = ConjLayout {typeof(sublayout (ML(), t))} ()
245
245
246
246
MemoryLayout (:: Type{Transpose{T,P}} ) where {T,P} = transposelayout (MemoryLayout (P))
247
247
MemoryLayout (:: Type{Adjoint{T,P}} ) where {T,P} = adjointlayout (T, MemoryLayout (P))
@@ -299,8 +299,8 @@ symmetriclayout(::ML) where ML<:AbstractRowMajor = SymmetricLayout{ML}()
299
299
transposelayout (S:: SymmetricLayout ) = S
300
300
adjointlayout (:: Type{T} , S:: SymmetricLayout ) where T<: Real = S
301
301
adjointlayout (:: Type{T} , S:: HermitianLayout ) where T = S
302
- subarraylayout (S:: SymmetricLayout , :: Type{<:Tuple{<:Slice,<:Slice}} ) = S
303
- subarraylayout (S:: HermitianLayout , :: Type{<:Tuple{<:Slice,<:Slice}} ) = S
302
+ sublayout (S:: SymmetricLayout , :: Type{<:Tuple{<:Slice,<:Slice}} ) = S
303
+ sublayout (S:: HermitianLayout , :: Type{<:Tuple{<:Slice,<:Slice}} ) = S
304
304
305
305
symmetricdata (A:: Symmetric ) = A. data
306
306
symmetricdata (A:: Hermitian{<:Real} ) = A. data
@@ -314,6 +314,8 @@ hermitiandata(V::Transpose{<:Real}) = hermitiandata(parent(V))
314
314
315
315
symmetricuplo (A:: Symmetric ) = A. uplo
316
316
symmetricuplo (A:: Hermitian ) = A. uplo
317
+ symmetricuplo (A:: Adjoint ) = symmetricuplo (parent (A))
318
+ symmetricuplo (A:: Transpose ) = A. uplo
317
319
symmetricuplo (A:: SubArray{<:Any, 2, <:Any, <:Tuple{<:Slice,<:Slice}} ) = symmetricuplo (parent (A))
318
320
319
321
# MemoryLayout of triangular matrices
@@ -395,7 +397,7 @@ triangularlayout(_, ::MemoryLayout) = UnknownLayout()
395
397
triangularlayout (:: Type{Tri} , :: ML ) where {Tri, ML<: AbstractColumnMajor } = Tri {ML} ()
396
398
triangularlayout (:: Type{Tri} , :: ML ) where {Tri, ML<: AbstractRowMajor } = Tri {ML} ()
397
399
triangularlayout (:: Type{Tri} , :: ML ) where {Tri, ML<: ConjLayout{<:AbstractRowMajor} } = Tri {ML} ()
398
- subarraylayout (layout:: TriangularLayout , :: Type{<:Tuple{<:Union{Slice,Base.OneTo},<:Union{Slice,Base.OneTo}}} ) = layout
400
+ sublayout (layout:: TriangularLayout , :: Type{<:Tuple{<:Union{Slice,Base.OneTo},<:Union{Slice,Base.OneTo}}} ) = layout
399
401
conjlayout (:: Type{<:Complex} , :: TriangularLayout{UPLO,UNIT,ML} ) where {UPLO,UNIT,ML} =
400
402
TriangularLayout {UPLO,UNIT,ConjLayout{ML}} ()
401
403
@@ -445,7 +447,7 @@ MemoryLayout(::Type{<:AbstractFill}) = FillLayout()
445
447
MemoryLayout (:: Type{<:Zeros} ) = ZerosLayout ()
446
448
diagonallayout (:: ML ) where ML<: AbstractFillLayout = DiagonalLayout {ML} ()
447
449
# all sub arrays are same
448
- subarraylayout (L:: AbstractFillLayout , inds:: Type ) = L
450
+ sublayout (L:: AbstractFillLayout , inds:: Type ) = L
449
451
reshapedlayout (L:: AbstractFillLayout , _) = L
450
452
adjointlayout (:: Type , L:: AbstractFillLayout ) = L
451
453
transposelayout (L:: AbstractFillLayout ) = L
0 commit comments