Skip to content

Commit eea8d53

Browse files
committed
Add more convenient constructor for ArrayOfSimilarArrays
1 parent 675fe81 commit eea8d53

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/array_of_similar_arrays.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ implicitly have equal size/axes.
4040
4141
Constructors:
4242
43-
ArrayOfSimilarArrays{N}(flat_data::AbstractArray)
43+
ArrayOfSimilarArrays{T,M,N}(flat_data::AbstractArray)
44+
ArrayOfSimilarArrays{T,M}(flat_data::AbstractArray)
4445
4546
The following type aliases are defined:
4647
@@ -64,6 +65,14 @@ struct ArrayOfSimilarArrays{
6465
P = typeof(conv_parent)
6566
new{T,M,N,L,P}(conv_parent)
6667
end
68+
69+
function ArrayOfSimilarArrays{T,M}(flat_data::AbstractArray{U,L}) where {T,M,L,U}
70+
size_inner, size_outer = split_tuple(size(flat_data), Val{M}())
71+
N = length(size_outer)
72+
conv_parent = _convert_elype(T, flat_data)
73+
P = typeof(conv_parent)
74+
new{T,M,N,L,P}(conv_parent)
75+
end
6776
end
6877

6978
export ArrayOfSimilarArrays
@@ -81,6 +90,7 @@ ArrayOfSimilarArrays(A::AbstractArray{<:AbstractArray{T,M},N}) where {T,M,N} =
8190

8291

8392
Base.convert(R::Type{ArrayOfSimilarArrays{T,M,N}}, flatview::AbstractArray{U,L}) where {T,M,N,L,U} = R(flatview)
93+
Base.convert(R::Type{ArrayOfSimilarArrays{T,M}}, flatview::AbstractArray{U,L}) where {T,M,L,U} = R(flatview)
8494

8595
Base.convert(R::Type{ArrayOfSimilarArrays{T,M,N}}, A::AbstractArray{<:AbstractArray{U,M},N}) where {T,M,N,U} = R(A)
8696
Base.convert(R::Type{ArrayOfSimilarArrays{T}}, A::AbstractArray{<:AbstractArray{U,M},N}) where {T,M,N,U} = R(A)

test/array_of_similar_arrays.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,14 @@ using UnsafeArrays
7171

7272
@testset "construct/convert from flat array" begin
7373
test_from_flat(ArrayOfSimilarArrays{Float64,2,3}, ArrayOfSimilarArrays{Float64,2,3,5,Array{Float64,5}}, Val(5))
74+
test_from_flat(ArrayOfSimilarArrays{Float64,2}, ArrayOfSimilarArrays{Float64,2,3,5,Array{Float64,5}}, Val(5))
7475
test_from_flat(ArrayOfSimilarVectors{Float64}, ArrayOfSimilarVectors{Float64,2,3,Array{Float64,3}}, Val(3))
7576
test_from_flat(VectorOfSimilarArrays{Float64}, VectorOfSimilarArrays{Float64,2,3,Array{Float64,3}}, Val(3))
7677
test_from_flat(VectorOfSimilarVectors{Float64}, VectorOfSimilarVectors{Float64,Array{Float64,2}}, Val(2))
7778
test_from_flat(VectorOfSimilarVectors, VectorOfSimilarVectors{Float64,Array{Float64,2}}, Val(2))
7879

7980
test_from_flat(ArrayOfSimilarArrays{Float32,2,3}, ArrayOfSimilarArrays{Float32,2,3,5,Array{Float32,5}}, Val(5))
81+
test_from_flat(ArrayOfSimilarArrays{Float32,2}, ArrayOfSimilarArrays{Float32,2,3,5,Array{Float32,5}}, Val(5))
8082
test_from_flat(ArrayOfSimilarVectors{Float32}, ArrayOfSimilarVectors{Float32,2,3,Array{Float32,3}}, Val(3))
8183
test_from_flat(VectorOfSimilarArrays{Float32}, VectorOfSimilarArrays{Float32,2,3,Array{Float32,3}}, Val(3))
8284
test_from_flat(VectorOfSimilarVectors{Float32}, VectorOfSimilarVectors{Float32,Array{Float32,2}}, Val(2))

0 commit comments

Comments
 (0)