5
5
6
6
An array that contains arrays that have the same size/axes. The array is
7
7
internally stored in flattened form as some kind of array of dimension
8
- `M + N`. The flattened form can be accessed via `parent (A)`.
8
+ `M + N`. The flattened form can be accessed via `flatview (A)`.
9
9
10
10
Subtypes must implement (in addition to typical array operations):
11
11
12
- parent (A::SomeArrayOfSimilarArrays)::AbstractArray{T,M+N}
12
+ flatview (A::SomeArrayOfSimilarArrays)::AbstractArray{T,M+N}
13
13
14
14
The following type aliases are defined:
15
15
@@ -40,7 +40,7 @@ implicitly have equal size/axes.
40
40
41
41
Constructors:
42
42
43
- ArrayOfSimilarArrays{N}(parent ::AbstractArray)
43
+ ArrayOfSimilarArrays{N}(flatview ::AbstractArray)
44
44
45
45
The following type aliases are defined:
46
46
@@ -57,10 +57,10 @@ struct ArrayOfSimilarArrays{
57
57
} <: AbstractArrayOfSimilarArrays{T,M,N}
58
58
data:: P
59
59
60
- function ArrayOfSimilarArrays {T,M,N} (parent :: AbstractArray{U,L} ) where {T,M,N,L,U}
61
- size_inner, size_outer = split_tuple (size (parent ), Val {M} ())
62
- require_ndims (parent , _add_vals (Val {M} (), Val {N} ()))
63
- conv_parent = _convert_elype (T, parent )
60
+ function ArrayOfSimilarArrays {T,M,N} (flatview :: AbstractArray{U,L} ) where {T,M,N,L,U}
61
+ size_inner, size_outer = split_tuple (size (flatview ), Val {M} ())
62
+ require_ndims (flatview , _add_vals (Val {M} (), Val {N} ()))
63
+ conv_parent = _convert_elype (T, flatview )
64
64
P = typeof (conv_parent)
65
65
new {T,M,N,L,P} (conv_parent)
66
66
end
@@ -80,7 +80,7 @@ ArrayOfSimilarArrays(A::AbstractArray{<:AbstractArray{T,M},N}) where {T,M,N} =
80
80
ArrayOfSimilarArrays {T,M,N} (A)
81
81
82
82
83
- Base. convert (R:: Type{ArrayOfSimilarArrays{T,M,N}} , parent :: AbstractArray{U,L} ) where {T,M,N,L,U} = R (parent )
83
+ Base. convert (R:: Type{ArrayOfSimilarArrays{T,M,N}} , flatview :: AbstractArray{U,L} ) where {T,M,N,L,U} = R (flatview )
84
84
85
85
Base. convert (R:: Type{ArrayOfSimilarArrays{T,M,N}} , A:: AbstractArray{<:AbstractArray{U,M},N} ) where {T,M,N,U} = R (A)
86
86
Base. convert (R:: Type{ArrayOfSimilarArrays{T}} , A:: AbstractArray{<:AbstractArray{U,M},N} ) where {T,M,N,U} = R (A)
@@ -114,7 +114,14 @@ import Base.==
114
114
(A. data == B. data)
115
115
116
116
117
- Base. parent (A:: ArrayOfSimilarArrays ) = A. data
117
+ """
118
+ flatview(A::ArrayOfSimilarArrays{T,M,N,L,P})::P
119
+
120
+ Returns the array of dimensionality `L = M + N` wrapped by `A`. The shape of
121
+ the result may be freely changed without breaking the inner consistency of
122
+ `A`.
123
+ """
124
+ flatview (A:: ArrayOfSimilarArrays ) = A. data
118
125
119
126
120
127
Base. size (A:: ArrayOfSimilarArrays{T,M,N} ) where {T,M,N} = split_tuple (size (A. data), Val {M} ())[2 ]
@@ -196,8 +203,8 @@ const VectorOfSimilarArrays{
196
203
197
204
export VectorOfSimilarArrays
198
205
199
- VectorOfSimilarArrays {T} (parent :: AbstractArray{U,L} ) where {T,U,L} =
200
- ArrayOfSimilarArrays {T,length(Base.front(size(parent ))),1} (parent )
206
+ VectorOfSimilarArrays {T} (flatview :: AbstractArray{U,L} ) where {T,U,L} =
207
+ ArrayOfSimilarArrays {T,length(Base.front(size(flatview ))),1} (flatview )
201
208
202
209
VectorOfSimilarArrays {T} (A:: AbstractVector{<:AbstractArray{U,M}} ) where {T,M,U} =
203
210
VectorOfSimilarArrays {T,M} (A)
@@ -206,7 +213,7 @@ VectorOfSimilarArrays(A::AbstractVector{<:AbstractArray{T,M}}) where {T,M} =
206
213
VectorOfSimilarArrays {T,M} (A)
207
214
208
215
209
- Base. convert (R:: Type{VectorOfSimilarArrays{T}} , parent :: AbstractArray{U,L} ) where {T,U,L} = R (parent )
216
+ Base. convert (R:: Type{VectorOfSimilarArrays{T}} , flatview :: AbstractArray{U,L} ) where {T,U,L} = R (flatview )
210
217
Base. convert (R:: Type{VectorOfSimilarArrays{T}} , A:: AbstractVector{<:AbstractArray{U,M}} ) where {T,M,U} = R (A)
211
218
Base. convert (R:: Type{VectorOfSimilarArrays} , A:: AbstractVector{<:AbstractArray{T,M}} ) where {T,M} = R (A)
212
219
@@ -245,8 +252,8 @@ const ArrayOfSimilarVectors{
245
252
246
253
export ArrayOfSimilarVectors
247
254
248
- ArrayOfSimilarVectors {T} (parent :: AbstractArray{U,L} ) where {T,U,L} =
249
- ArrayOfSimilarArrays {T,1,length(Base.front(size(parent )))} (parent )
255
+ ArrayOfSimilarVectors {T} (flatview :: AbstractArray{U,L} ) where {T,U,L} =
256
+ ArrayOfSimilarArrays {T,1,length(Base.front(size(flatview )))} (flatview )
250
257
251
258
ArrayOfSimilarVectors {T} (A:: AbstractArray{<:AbstractVector{U},N} ) where {T,N,U} =
252
259
ArrayOfSimilarVectors {T,N} (A)
@@ -255,7 +262,7 @@ ArrayOfSimilarVectors(A::AbstractArray{<:AbstractVector{T},N}) where {T,N} =
255
262
ArrayOfSimilarVectors {T,N} (A)
256
263
257
264
258
- Base. convert (R:: Type{ArrayOfSimilarVectors{T}} , parent :: AbstractArray{U,L} ) where {T,U,L} = R (parent )
265
+ Base. convert (R:: Type{ArrayOfSimilarVectors{T}} , flatview :: AbstractArray{U,L} ) where {T,U,L} = R (flatview )
259
266
Base. convert (R:: Type{ArrayOfSimilarVectors{T}} , A:: AbstractArray{<:AbstractVector{U},N} ) where {T,N,U} = R (A)
260
267
Base. convert (R:: Type{ArrayOfSimilarVectors} , A:: AbstractArray{<:AbstractVector{T},N} ) where {T,N} = R (A)
261
268
@@ -299,20 +306,20 @@ const VectorOfSimilarVectors{
299
306
300
307
export VectorOfSimilarVectors
301
308
302
- VectorOfSimilarVectors {T} (parent :: AbstractArray{U,2} ) where {T,U} =
303
- ArrayOfSimilarArrays {T,1,1} (parent )
309
+ VectorOfSimilarVectors {T} (flatview :: AbstractArray{U,2} ) where {T,U} =
310
+ ArrayOfSimilarArrays {T,1,1} (flatview )
304
311
305
- VectorOfSimilarVectors (parent :: AbstractArray{T,2} ) where {T} =
306
- VectorOfSimilarVectors {T} (parent )
312
+ VectorOfSimilarVectors (flatview :: AbstractArray{T,2} ) where {T} =
313
+ VectorOfSimilarVectors {T} (flatview )
307
314
308
315
VectorOfSimilarVectors {T} (A:: AbstractVector{<:AbstractVector{U}} ) where {T,U} =
309
316
ArrayOfSimilarArrays {T,1} (A)
310
317
311
318
VectorOfSimilarVectors (A:: AbstractVector{<:AbstractVector{T}} ) where {T} =
312
319
VectorOfSimilarVectors {T} (A)
313
320
314
- Base. convert (R:: Type{VectorOfSimilarVectors{T}} , parent :: AbstractArray{U,2} ) where {T,U} = R (parent )
315
- Base. convert (R:: Type{VectorOfSimilarVectors} , parent :: AbstractArray{T,2} ) where {T} = R (parent )
321
+ Base. convert (R:: Type{VectorOfSimilarVectors{T}} , flatview :: AbstractArray{U,2} ) where {T,U} = R (flatview )
322
+ Base. convert (R:: Type{VectorOfSimilarVectors} , flatview :: AbstractArray{T,2} ) where {T} = R (flatview )
316
323
Base. convert (R:: Type{VectorOfSimilarVectors{T}} , A:: AbstractVector{<:AbstractVector{U}} ) where {T,U} = R (A)
317
324
Base. convert (R:: Type{VectorOfSimilarVectors} , A:: AbstractVector{<:AbstractVector{T}} ) where {T} = R (A)
318
325
0 commit comments