@@ -65,13 +65,13 @@ map!{Tf,N}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, Bs::Vararg{SparseVecOrMa
65
65
(_checksameshape (C, A, Bs... ); _noshapecheck_map! (f, C, A, Bs... ))
66
66
function _noshapecheck_map! {Tf,N} (f:: Tf , C:: SparseVecOrMat , A:: SparseVecOrMat , Bs:: Vararg{SparseVecOrMat,N} )
67
67
fofzeros = f (_zeros_eltypes (A, Bs... )... )
68
- fpreszeros = fofzeros == zero (fofzeros)
68
+ fpreszeros = _iszero (fofzeros)
69
69
return fpreszeros ? _map_zeropres! (f, C, A, Bs... ) :
70
70
_map_notzeropres! (f, fofzeros, C, A, Bs... )
71
71
end
72
72
function _noshapecheck_map {Tf,N} (f:: Tf , A:: SparseVecOrMat , Bs:: Vararg{SparseVecOrMat,N} )
73
73
fofzeros = f (_zeros_eltypes (A, Bs... )... )
74
- fpreszeros = fofzeros == zero (fofzeros)
74
+ fpreszeros = _iszero (fofzeros)
75
75
maxnnzC = fpreszeros ? min (length (A), _sumnnzs (A, Bs... )) : length (A)
76
76
entrytypeC = Base. Broadcast. _broadcast_type (Any, f, A, Bs... )
77
77
indextypeC = _promote_indtype (A, Bs... )
@@ -86,7 +86,7 @@ function broadcast!{Tf,N}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, Bs::Varar
86
86
_aresameshape (C, A, Bs... ) && return _noshapecheck_map! (f, C, A, Bs... )
87
87
Base. Broadcast. check_broadcast_indices (indices (C), A, Bs... )
88
88
fofzeros = f (_zeros_eltypes (A, Bs... )... )
89
- fpreszeros = fofzeros == zero (fofzeros)
89
+ fpreszeros = _iszero (fofzeros)
90
90
return fpreszeros ? _broadcast_zeropres! (f, C, A, Bs... ) :
91
91
_broadcast_notzeropres! (f, fofzeros, C, A, Bs... )
92
92
end
@@ -99,7 +99,7 @@ broadcast{Tf,N}(f::Tf, A::SparseVecOrMat, Bs::Vararg{SparseVecOrMat,N}) =
99
99
_diffshape_broadcast (f, A, Bs... )
100
100
function _diffshape_broadcast {Tf,N} (f:: Tf , A:: SparseVecOrMat , Bs:: Vararg{SparseVecOrMat,N} )
101
101
fofzeros = f (_zeros_eltypes (A, Bs... )... )
102
- fpreszeros = fofzeros == zero (fofzeros)
102
+ fpreszeros = _iszero (fofzeros)
103
103
indextypeC = _promote_indtype (A, Bs... )
104
104
entrytypeC = Base. Broadcast. _broadcast_type (Any, f, A, Bs... )
105
105
shapeC = to_shape (Base. Broadcast. broadcast_indices (A, Bs... ))
111
111
# helper functions for map[!]/broadcast[!] entry points (and related methods below)
112
112
@inline _sumnnzs (A) = nnz (A)
113
113
@inline _sumnnzs (A, Bs... ) = nnz (A) + _sumnnzs (Bs... )
114
+ @inline _iszero (x) = x == 0
115
+ @inline _iszero (x:: Number ) = Base. iszero (x)
116
+ @inline _iszero (x:: AbstractArray ) = Base. iszero (x)
114
117
@inline _zeros_eltypes (A) = (zero (eltype (A)),)
115
118
@inline _zeros_eltypes (A, Bs... ) = (zero (eltype (A)), _zeros_eltypes (Bs... )... )
116
119
@inline _promote_indtype (A) = indtype (A)
@@ -159,7 +162,7 @@ function _map_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat)
159
162
setcolptr! (C, j, Ck)
160
163
for Ak in colrange (A, j)
161
164
Cx = f (storedvals (A)[Ak])
162
- if Cx != zero ( eltype (C) )
165
+ if ! _iszero (Cx )
163
166
Ck > spaceC && (spaceC = expandstorage! (C, Ck + nnz (A) - (Ak - 1 )))
164
167
storedinds (C)[Ck] = storedinds (A)[Ak]
165
168
storedvals (C)[Ck] = Cx
@@ -240,7 +243,7 @@ function _map_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B::Spar
240
243
# cases are equally or more likely than the Ai < Bi and Bi < Ai cases. Hence
241
244
# the ordering of the conditional chain above differs from that in the
242
245
# corresponding broadcast code (below).
243
- if Cx != zero ( eltype (C) )
246
+ if ! _iszero (Cx )
244
247
Ck > spaceC && (spaceC = expandstorage! (C, Ck + (nnz (A) - (Ak - 1 )) + (nnz (B) - (Bk - 1 ))))
245
248
storedinds (C)[Ck] = Ci
246
249
storedvals (C)[Ck] = Cx
@@ -305,7 +308,7 @@ function _map_zeropres!{Tf,N}(f::Tf, C::SparseVecOrMat, As::Vararg{SparseVecOrMa
305
308
# rows = _updaterow_all(rowsentinel, activerows, rows, ks, stopks, As)
306
309
vals, ks, rows = _fusedupdate_all (rowsentinel, activerow, rows, ks, stopks, As)
307
310
Cx = f (vals... )
308
- if Cx != zero ( eltype (C) )
311
+ if ! _iszero (Cx )
309
312
Ck > spaceC && (spaceC = expandstorage! (C, Ck + min (length (C), _sumnnzs (As... )) - (sum (ks) - N)))
310
313
storedinds (C)[Ck] = activerow
311
314
storedvals (C)[Ck] = Cx
@@ -461,7 +464,7 @@ function _broadcast_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B
461
464
# pattern) the Ai < Bi and Bi < Ai cases are equally or more likely than the
462
465
# Ai == Bi and termination cases. Hence the ordering of the conditional
463
466
# chain above differs from that in the corresponding map code.
464
- if Cx != zero ( eltype (C) )
467
+ if ! _iszero (Cx )
465
468
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), A, B)))
466
469
storedinds (C)[Ck] = Ci
467
470
storedvals (C)[Ck] = Cx
@@ -483,7 +486,7 @@ function _broadcast_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B
483
486
# B's jth column without storing every entry in C's jth column
484
487
while Bk < stopBk
485
488
Cx = f (Ax, storedvals (B)[Bk])
486
- if Cx != zero ( eltype (C) )
489
+ if ! _iszero (Cx )
487
490
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), A, B)))
488
491
storedinds (C)[Ck] = storedinds (B)[Bk]
489
492
storedvals (C)[Ck] = Cx
@@ -502,7 +505,7 @@ function _broadcast_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B
502
505
else
503
506
Cx = fvAzB
504
507
end
505
- if Cx != zero ( eltype (C) )
508
+ if ! _iszero (Cx )
506
509
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), A, B)))
507
510
storedinds (C)[Ck] = Ci
508
511
storedvals (C)[Ck] = Cx
@@ -524,7 +527,7 @@ function _broadcast_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B
524
527
# A's jth column without storing every entry in C's jth column
525
528
while Ak < stopAk
526
529
Cx = f (storedvals (A)[Ak], Bx)
527
- if Cx != zero ( eltype (C) )
530
+ if ! _iszero (Cx )
528
531
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), A, B)))
529
532
storedinds (C)[Ck] = storedinds (A)[Ak]
530
533
storedvals (C)[Ck] = Cx
@@ -543,7 +546,7 @@ function _broadcast_zeropres!{Tf}(f::Tf, C::SparseVecOrMat, A::SparseVecOrMat, B
543
546
else
544
547
Cx = fzAvB
545
548
end
546
- if Cx != zero ( eltype (C) )
549
+ if ! _iszero (Cx )
547
550
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), A, B)))
548
551
storedinds (C)[Ck] = Ci
549
552
storedvals (C)[Ck] = Cx
@@ -674,7 +677,7 @@ function _broadcast_zeropres!{Tf,N}(f::Tf, C::SparseVecOrMat, As::Vararg{SparseV
674
677
# rows = _updaterow_all(rowsentinel, activerows, rows, ks, stopks, As)
675
678
args, ks, rows = _fusedupdatebc_all (rowsentinel, activerow, rows, defargs, ks, stopks, As)
676
679
Cx = f (args... )
677
- if Cx != zero ( eltype (C) )
680
+ if ! _iszero (Cx )
678
681
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), As)))
679
682
storedinds (C)[Ck] = activerow
680
683
storedvals (C)[Ck] = Cx
@@ -695,7 +698,7 @@ function _broadcast_zeropres!{Tf,N}(f::Tf, C::SparseVecOrMat, As::Vararg{SparseV
695
698
else
696
699
Cx = defaultCx
697
700
end
698
- if Cx != zero ( eltype (C) )
701
+ if ! _iszero (Cx )
699
702
Ck > spaceC && (spaceC = expandstorage! (C, _unchecked_maxnnzbcres (size (C), As)))
700
703
storedinds (C)[Ck] = Ci
701
704
storedvals (C)[Ck] = Cx
0 commit comments