|
161 | 161 | ## reduce ## |
162 | 162 | ############ |
163 | 163 |
|
164 | | -@inline reduce(op, a::StaticArray; kw...) = mapreduce(identity, op, a; kw...) |
| 164 | +@inline reduce(op, a::StaticArray; dims=:, kw...) = _reduce(op, a, dims, kw.data) |
| 165 | + |
| 166 | +@inline _reduce(op, a::StaticArray, dims=:, kw::NamedTuple=NamedTuple()) = _mapreduce(identity, op, dims, kw, Size(a), a) |
165 | 167 |
|
166 | 168 | ####################### |
167 | 169 | ## related functions ## |
|
186 | 188 | # TODO: change to use Base.reduce_empty/Base.reduce_first |
187 | 189 | @inline iszero(a::StaticArray{<:Tuple,T}) where {T} = reduce((x,y) -> x && iszero(y), a, init=true) |
188 | 190 |
|
189 | | -@inline sum(a::StaticArray{<:Tuple,T}; dims=:) where {T} = reduce(+, a; dims=dims) |
190 | | -@inline sum(f, a::StaticArray{<:Tuple,T}; dims=:) where {T} = mapreduce(f, +, a; dims=dims) |
191 | | -@inline sum(f::Union{Function, Type}, a::StaticArray{<:Tuple,T}; dims=:) where {T} = mapreduce(f, +, a; dims=dims) # avoid ambiguity |
| 191 | +@inline sum(a::StaticArray{<:Tuple,T}; dims=:) where {T} = _reduce(+, a, dims) |
| 192 | +@inline sum(f, a::StaticArray{<:Tuple,T}; dims=:) where {T} = _mapreduce(f, +, dims, NamedTuple(), Size(a), a) |
| 193 | +@inline sum(f::Union{Function, Type}, a::StaticArray{<:Tuple,T}; dims=:) where {T} = _mapreduce(f, +, dims, NamedTuple(), Size(a), a) # avoid ambiguity |
192 | 194 |
|
193 | 195 | @inline prod(a::StaticArray{<:Tuple,T}; dims=:) where {T} = reduce(*, a; dims=dims) |
194 | 196 | @inline prod(f, a::StaticArray{<:Tuple,T}; dims=:) where {T} = mapreduce(f, *, a; dims=dims) |
|
0 commit comments