From b5df61a190ce88ac3a6b46f7cf010a3170fa1ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20S=C3=A1nchez=20Ram=C3=ADrez?= Date: Fri, 9 Feb 2024 21:32:29 +0100 Subject: [PATCH] Fix stack overflow on `sum` of large number of `EinExpr`s --- src/SizedEinExpr.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SizedEinExpr.jl b/src/SizedEinExpr.jl index a0c35ec..1f0bf9e 100644 --- a/src/SizedEinExpr.jl +++ b/src/SizedEinExpr.jl @@ -57,9 +57,9 @@ parsuminds(sexpr::SizedEinExpr) = parsuminds(sexpr.path) Base.sum!(sexpr::SizedEinExpr, inds) = sum!(sexpr.path, inds) Base.sum(sexpr::SizedEinExpr, inds) = sum(sexpr.path, inds) -function Base.sum(sexpr::Vector{SizedEinExpr{L}}; skip = L[]) where {L} +function Base.sum(sexpr::Vector{SizedEinExpr{L}}; skip=L[]) where {L} path = sum(map(x -> x.path, sexpr); skip) - size = @compat(allequal(Iterators.map(x -> x.size, sexpr))) ? first(sexpr).size : merge(map(x -> x.size, sexpr)...) + size = @compat(allequal(Iterators.map(x -> x.size, sexpr))) ? first(sexpr).size : mapreduce(x -> x.size, merge!, sexpr; init=Dict{L,Int}()) # size = merge(map(x -> x.size, sexpr)...) SizedEinExpr(path, size) end