|
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