Skip to content

Commit 08d3450

Browse files
committed
fix mapreduce
1 parent 6609672 commit 08d3450

2 files changed

Lines changed: 16 additions & 1 deletion

File tree

lib/RecursiveArrayToolsRaggedArrays/src/RecursiveArrayToolsRaggedArrays.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1521,7 +1521,11 @@ end
15211521
Base.map(f, A::AbstractRaggedVectorOfArray) = map(f, A.u)
15221522

15231523
function Base.mapreduce(f, op, A::AbstractRaggedVectorOfArray; kwargs...)
1524-
return mapreduce(f, op, view(A, ntuple(_ -> :, ndims(A))...); kwargs...)
1524+
# For full reduction (no kwargs): safely recurse over u to handle ragged inner shapes.
1525+
# The view-based approach uses size(A.u[1]) for all columns, which fails when inner
1526+
# arrays are themselves ragged with different column counts.
1527+
isempty(kwargs) || return mapreduce(f, op, view(A, ntuple(_ -> :, ndims(A))...); kwargs...)
1528+
return mapreduce(u -> mapreduce(f, op, u), op, A.u)
15251529
end
15261530
function Base.mapreduce(
15271531
f, op, A::AbstractRaggedVectorOfArray{T, 1, <:AbstractVector{T}}; kwargs...

lib/RecursiveArrayToolsRaggedArrays/test/runtests.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,4 +1016,15 @@ using Test
10161016
src[:, 1] .= 99.0
10171017
@test dst[:, 1] == [1.0, 1.0]
10181018
end
1019+
1020+
@testset "mapreduce over nested ragged arrays" begin
1021+
# Outer array whose inner RaggedVoA elements have different column counts.
1022+
# mapreduce must recurse over A.u rather than building a fixed-shape view.
1023+
inner1 = RaggedVectorOfArray([ones(3), ones(3)]) # 2 columns
1024+
inner2 = RaggedVectorOfArray([ones(3), ones(3), ones(3)]) # 3 columns — ragged!
1025+
u = RaggedVectorOfArray([inner1, inner2])
1026+
1027+
@test mapreduce(identity, +, u) == 15.0 # (2+3)*3
1028+
end
1029+
10191030
end

0 commit comments

Comments
 (0)