@@ -5,7 +5,8 @@ module HigherOrderFns
5
5
# This module provides higher order functions specialized for sparse arrays,
6
6
# particularly map[!]/broadcast[!] for SparseVectors and SparseMatrixCSCs at present.
7
7
import Base: map, map!, broadcast, broadcast!
8
- import Base. Broadcast: containertype, promote_containertype, broadcast_indices, broadcast_c
8
+ import Base. Broadcast: containertype, promote_containertype,
9
+ broadcast_indices, broadcast_c, broadcast!_c
9
10
10
11
using Base: front, tail, to_shape
11
12
using .. SparseArrays: SparseVector, SparseMatrixCSC, AbstractSparseArray, indtype
@@ -850,11 +851,15 @@ promote_containertype(::Type{Tuple}, ::Type{AbstractSparseArray}) = Array
850
851
promote_containertype (:: Type{AbstractSparseArray} , :: Type{Array} ) = Array
851
852
promote_containertype (:: Type{AbstractSparseArray} , :: Type{Tuple} ) = Array
852
853
853
- # broadcast entry point for combinations of sparse arrays and other types
854
- function broadcast_c (f, :: Type{AbstractSparseArray} , mixedargs... )
854
+ # broadcast[!] entry points for combinations of sparse arrays and other types
855
+ @inline function broadcast_c {N} (f, :: Type{AbstractSparseArray} , mixedargs:: Vararg{Any,N} )
855
856
parevalf, passedargstup = capturescalars (f, mixedargs)
856
857
return broadcast (parevalf, passedargstup... )
857
858
end
859
+ @inline function broadcast!_c {N} (f, :: Type{AbstractSparseArray} , dest:: SparseVecOrMat , mixedsrcargs:: Vararg{Any,N} )
860
+ parevalf, passedsrcargstup = capturescalars (f, mixedsrcargs)
861
+ return broadcast! (parevalf, dest, passedsrcargstup... )
862
+ end
858
863
# capturescalars takes a function (f) and a tuple of mixed sparse vectors/matrices and
859
864
# broadcast scalar arguments (mixedargs), and returns a function (parevalf) and a reduced
860
865
# argument tuple (passedargstup) containing only the sparse vectors/matrices in mixedargs
0 commit comments