Skip to content

Commit 48afea0

Browse files
committed
fix inference issue on julia v1.10
1 parent e1e0c07 commit 48afea0

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

lib/RecursiveArrayToolsRaggedArrays/src/RecursiveArrayToolsRaggedArrays.jl

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,12 +1520,28 @@ end
15201520

15211521
Base.map(f, A::AbstractRaggedVectorOfArray) = map(f, A.u)
15221522

1523-
function Base.mapreduce(f, op, A::AbstractRaggedVectorOfArray; 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.
1523+
# Named functor used by the nested-ragged mapreduce to ensure type-stable dispatch.
1524+
struct _RaggedMapReduce{F, Op}
1525+
f::F
1526+
op::Op
1527+
end
1528+
@inline (w::_RaggedMapReduce)(u) = mapreduce(w.f, w.op, u)
1529+
1530+
# When inner elements are themselves ragged, the view-based approach fails: view uses
1531+
# size(A.u[1]) for every column, causing BoundsErrors when inner shapes differ.
1532+
# We recurse element-by-element instead. Dispatching on the type of A.u (rather than
1533+
# using an if-check at runtime) keeps inference type-stable down to Julia 1.10.
1534+
function Base.mapreduce(
1535+
f, op,
1536+
A::AbstractRaggedVectorOfArray{T, N, <:AbstractVector{<:AbstractRaggedVectorOfArray}};
1537+
kwargs...
1538+
) where {T, N}
15271539
isempty(kwargs) || return mapreduce(f, op, view(A, ntuple(_ -> :, ndims(A))...); kwargs...)
1528-
return mapreduce(u -> mapreduce(f, op, u), op, A.u)
1540+
return mapreduce(_RaggedMapReduce(f, op), op, A.u)
1541+
end
1542+
1543+
function Base.mapreduce(f, op, A::AbstractRaggedVectorOfArray; kwargs...)
1544+
return mapreduce(f, op, view(A, ntuple(_ -> :, ndims(A))...); kwargs...)
15291545
end
15301546
function Base.mapreduce(
15311547
f, op, A::AbstractRaggedVectorOfArray{T, 1, <:AbstractVector{T}}; kwargs...

0 commit comments

Comments
 (0)