Skip to content

Commit 7c09821

Browse files
committed
Optimize identity map and broadcast
1 parent a45514c commit 7c09821

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

src/array_of_similar_arrays.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ function deepmap(f::Base.Callable, A::ArrayOfSimilarArrays{T,M,N}) where {T,M,N}
221221
end
222222

223223

224+
Base.map(::typeof(identity), A::ArrayOfSimilarArrays) = deepcopy(A)
225+
Base.Broadcast.broadcasted(::typeof(identity), A::ArrayOfSimilarArrays) = deepcopy(A)
226+
224227

225228
Base.@pure _result_is_nested(idxs_outer::Tuple, idxs_inner::Tuple) =
226229
Val{!(Base.index_dimsum(idxs_outer...) isa Tuple{}) && !(Base.index_dimsum(idxs_inner...) isa Tuple{})}()

src/vector_of_arrays.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,11 @@ function deepmap(f::Base.Callable, A::VectorOfArrays)
419419
end
420420

421421

422+
Base.map(::typeof(identity), A::VectorOfArrays) = deepcopy(A)
423+
Base.Broadcast.broadcasted(::typeof(identity), A::VectorOfArrays) = deepcopy(A)
424+
425+
426+
422427
"""
423428
VectorOfVectors{T,...} = VectorOfArrays{T,1,...}
424429

test/array_of_similar_arrays.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,4 +353,15 @@ using StatsBase: cov2cor
353353

354354
@test @inferred(ArraysOfArrays._innerlength(VSV)) == N
355355
end
356+
357+
@testset "map and broadcast" begin
358+
A_flat = rand(2,3,4,5,6)
359+
A = nestedview(A_flat, 2)
360+
361+
for do_map in (map, broadcast)
362+
@test @inferred(do_map(identity, A)) == A
363+
do_map(identity, A) isa ArrayOfSimilarArrays
364+
@test do_map(identity, A) !== A
365+
end
366+
end
356367
end

test/vector_of_arrays.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,4 +334,14 @@ using ArraysOfArrays: full_consistency_checks, append_elemptr!, element_ptr
334334
@test @inferred(map(Float32, VoA1.data)) == VoA2.data
335335

336336
end
337+
338+
@testset "map and broadcast" begin
339+
A = VectorOfArrays(ref_AoA2(Float32, 4))
340+
341+
for do_map in (map, broadcast)
342+
@test @inferred(do_map(identity, A)) == A
343+
do_map(identity, A) isa VectorOfArrays
344+
@test do_map(identity, A) !== A
345+
end
346+
end
337347
end

0 commit comments

Comments
 (0)