Skip to content

Commit 9548149

Browse files
authored
Use axes instead of 1:size (#602)
This generally makes it easier to read code, as one doesn't need to look up variable definitions from elsewhere.
1 parent ae727fe commit 9548149

File tree

7 files changed

+109
-109
lines changed

7 files changed

+109
-109
lines changed

src/higherorderfns.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const SpBroadcasted2{Style<:SPVM,Axes,F,Args<:Tuple{SparseVecOrMat,SparseVecOrMa
119119
@inline numcols(A::AbstractSparseMatrixCSC) = size(A, 2)
120120
# numrows and numcols respectively yield size(A, 1) and size(A, 2), but avoid a branch
121121
@inline columns(A::AbstractCompressedVector) = 1
122-
@inline columns(A::AbstractSparseMatrixCSC) = 1:size(A, 2)
122+
@inline columns(A::AbstractSparseMatrixCSC) = axes(A,2)
123123
@inline colrange(A::AbstractCompressedVector, j) = 1:length(nonzeroinds(A))
124124
@inline colrange(A::AbstractSparseMatrixCSC, j) = nzrange(A, j)
125125
@inline colstartind(A::AbstractCompressedVector, j) = one(indtype(A))
@@ -311,7 +311,7 @@ function _densestructure!(A::AbstractSparseMatrixCSC)
311311
expandstorage!(A, nnzA)
312312
copyto!(getcolptr(A), 1:size(A, 1):(nnzA + 1))
313313
for k in _densecoloffsets(A)
314-
copyto!(rowvals(A), k + 1, 1:size(A, 1))
314+
copyto!(rowvals(A), k + 1, axes(A,1))
315315
end
316316
return A
317317
end

src/linalg.jl

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ function _spmatmul!(C, A, B, α, β)
8484
nzv = nonzeros(A)
8585
rv = rowvals(A)
8686
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
87-
for k in 1:size(C, 2)
88-
@inbounds for col in 1:size(A, 2)
87+
for k in axes(C, 2)
88+
@inbounds for col in axes(A,2)
8989
αxj = B[col,k] * α
9090
for j in nzrange(A, col)
9191
C[rv[j], k] += nzv[j]*αxj
@@ -105,8 +105,8 @@ function _At_or_Ac_mul_B!(tfun::Function, C, A, B, α, β)
105105
nzv = nonzeros(A)
106106
rv = rowvals(A)
107107
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
108-
for k in 1:size(C, 2)
109-
@inbounds for col in 1:size(A, 2)
108+
for k in axes(C, 2)
109+
@inbounds for col in axes(A,2)
110110
tmp = zero(eltype(C))
111111
for j in nzrange(A, col)
112112
tmp += tfun(nzv[j])*B[rv[j],k]
@@ -139,10 +139,10 @@ function _spmul!(C::StridedMatrix, X::DenseMatrixUnion, A::SparseMatrixCSCUnion2
139139
rv = rowvals(A)
140140
nzv = nonzeros(A)
141141
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
142-
@inbounds for col in 1:size(A, 2), k in nzrange(A, col)
142+
@inbounds for col in axes(A,2), k in nzrange(A, col)
143143
Aiα = nzv[k] * α
144144
rvk = rv[k]
145-
@simd for multivec_row in 1:mX
145+
@simd for multivec_row in axes(X,1)
146146
C[multivec_row, col] += X[multivec_row, rvk] * Aiα
147147
end
148148
end
@@ -159,7 +159,7 @@ function _spmul!(C::StridedMatrix, X::AdjOrTrans{<:Any,<:DenseMatrixUnion}, A::S
159159
rv = rowvals(A)
160160
nzv = nonzeros(A)
161161
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
162-
for multivec_row in 1:mX, col in 1:size(A, 2)
162+
for multivec_row in axes(X,1), col in axes(C, 2)
163163
@inbounds for k in nzrange(A, col)
164164
C[multivec_row, col] += X[multivec_row, rv[k]] * nzv[k] * α
165165
end
@@ -178,10 +178,10 @@ function _A_mul_Bt_or_Bc!(tfun::Function, C::StridedMatrix, A::AbstractMatrix, B
178178
rv = rowvals(B)
179179
nzv = nonzeros(B)
180180
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
181-
@inbounds for col in 1:size(B, 2), k in nzrange(B, col)
181+
@inbounds for col in axes(B, 2), k in nzrange(B, col)
182182
Biα = tfun(nzv[k]) * α
183183
rvk = rv[k]
184-
@simd for multivec_col in 1:mA
184+
@simd for multivec_col in axes(A,1)
185185
C[multivec_col, rvk] += A[multivec_col, col] * Biα
186186
end
187187
end
@@ -267,7 +267,7 @@ function spmatmul(A::SparseOrTri, B::Union{SparseOrTri,AbstractCompressedVector,
267267
@inbounds begin
268268
ip = 1
269269
xb = fill(false, mA)
270-
for i in 1:nB
270+
for i in axes(B,2)
271271
if ip + mA - 1 > nnzC
272272
nnzC += max(mA, nnzC>>2)
273273
resize!(rowvalC, nnzC)
@@ -322,7 +322,7 @@ function spcolmul!(rowvalC, nzvalC, xb, i, ip, A, B)
322322
end
323323
else
324324
# scan result vector (effort O(mA))
325-
for k = 1:mA
325+
for k in axes(A,1)
326326
if xb[k]
327327
xb[k] = false
328328
rowvalC[ip0] = k
@@ -557,7 +557,7 @@ function dot(A::AbstractSparseMatrixCSC{T1,S1},B::AbstractSparseMatrixCSC{T2,S2}
557557
m, n = size(A)
558558
size(B) == (m,n) || throw(DimensionMismatch("matrices must have the same dimensions"))
559559
r = dot(zero(T1), zero(T2))
560-
@inbounds for j = 1:n
560+
@inbounds for j in axes(A,2)
561561
ia = getcolptr(A)[j]; ia_nxt = getcolptr(A)[j+1]
562562
ib = getcolptr(B)[j]; ib_nxt = getcolptr(B)[j+1]
563563
if ia < ia_nxt && ib < ib_nxt
@@ -595,7 +595,7 @@ function dot(x::AbstractVector{T1}, A::AbstractSparseMatrixCSC{T2}, y::AbstractV
595595
rowvals = getrowval(A)
596596
nzvals = getnzval(A)
597597

598-
@inbounds @simd for col in 1:n
598+
@inbounds @simd for col in axes(A,2)
599599
ycol = y[col]
600600
for j in nzrange(A, col)
601601
row = rowvals[j]
@@ -653,7 +653,7 @@ function dot(A::Union{DenseMatrixUnion,WrapperMatrixTypes{<:Any,Union{DenseMatri
653653
end
654654
rows = rowvals(B)
655655
vals = nonzeros(B)
656-
@inbounds for j in 1:n
656+
@inbounds for j in axes(A,2)
657657
for ridx in nzrange(B, j)
658658
i = rows[ridx]
659659
v = vals[ridx]
@@ -744,8 +744,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, tf
744744
if uploc == 'U'
745745
if tfun === identity
746746
# forward multiplication for UpperTriangular SparseCSC matrices
747-
for k = 1:ncolB
748-
for j = 1:nrowB
747+
for k in axes(B,2)
748+
for j in axes(B,1)
749749
i1 = ia[j]
750750
i2 = ia[j + 1] - 1
751751
done = unit
@@ -773,8 +773,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, tf
773773
end
774774
else # tfun in (adjoint, transpose)
775775
# backward multiplication with adjoint and transpose of LowerTriangular CSC matrices
776-
for k = 1:ncolB
777-
for j = nrowB:-1:1
776+
for k in axes(B,2)
777+
for j in reverse(axes(B,1))
778778
i1 = ia[j]
779779
i2 = ia[j + 1] - 1
780780
akku = Z
@@ -800,8 +800,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, tf
800800
else # uploc == 'L'
801801
if tfun === identity
802802
# backward multiplication for LowerTriangular SparseCSC matrices
803-
for k = 1:ncolB
804-
for j = nrowB:-1:1
803+
for k in axes(B,2)
804+
for j in reverse(axes(B,1))
805805
i1 = ia[j]
806806
i2 = ia[j + 1] - 1
807807
done = unit
@@ -829,8 +829,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, tf
829829
end
830830
else # tfun in (adjoint, transpose)
831831
# forward multiplication for adjoint and transpose of LowerTriangular CSC matrices
832-
for k = 1:ncolB
833-
for j = 1:nrowB
832+
for k in axes(B,2)
833+
for j in axes(B,1)
834834
i1 = ia[j]
835835
i2 = ia[j + 1] - 1
836836
akku = Z
@@ -873,8 +873,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, ::
873873
Z = zero(eltype(C))
874874

875875
if uploc == 'U'
876-
for k = 1:ncolB
877-
for j = 1:nrowB
876+
for k in axes(B,2)
877+
for j in axes(B,1)
878878
i1 = ia[j]
879879
i2 = ia[j + 1] - 1
880880
done = unit
@@ -901,8 +901,8 @@ function LinearAlgebra.generic_trimatmul!(C::StridedVecOrMat, uploc, isunitc, ::
901901
joff += nrowB
902902
end
903903
else # uploc == 'L'
904-
for k = 1:ncolB
905-
for j = nrowB:-1:1
904+
for k in axes(B,2)
905+
for j in reverse(axes(B,1))
906906
i1 = ia[j]
907907
i2 = ia[j + 1] - 1
908908
done = unit
@@ -954,8 +954,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, tf
954954
if uploc == 'L'
955955
if tfun === identity
956956
# forward substitution for LowerTriangular CSC matrices
957-
for k in 1:ncolB
958-
for j = 1:nrowB
957+
for k in axes(B,2)
958+
for j in axes(B,1)
959959
i1 = ia[j]
960960
i2 = ia[j + 1] - one(eltype(ia))
961961

@@ -983,8 +983,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, tf
983983
end
984984
else # tfun in (adjoint, transpose)
985985
# backward substitution for adjoint and transpose of LowerTriangular CSC matrices
986-
for k in 1:ncolB
987-
for j = nrowB:-1:1
986+
for k in axes(B,2)
987+
for j in reverse(axes(B,1))
988988
i1 = ia[j]
989989
i2 = ia[j + 1] - 1
990990
akku = B[j,k]
@@ -1013,8 +1013,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, tf
10131013
else # uploc == 'U'
10141014
if tfun === identity
10151015
# backward substitution for UpperTriangular CSC matrices
1016-
for k in 1:ncolB
1017-
for j = nrowB:-1:1
1016+
for k in axes(B,2)
1017+
for j in reverse(axes(B,1))
10181018
i1 = ia[j]
10191019
i2 = ia[j + 1] - one(eltype(ia))
10201020

@@ -1042,8 +1042,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, tf
10421042
end
10431043
else # tfun in (adjoint, transpose)
10441044
# forward substitution for adjoint and transpose of UpperTriangular CSC matrices
1045-
for k in 1:ncolB
1046-
for j = 1:nrowB
1045+
for k in axes(B,2)
1046+
for j in axes(B,1)
10471047
i1 = ia[j]
10481048
i2 = ia[j + 1] - 1
10491049
akku = B[j,k]
@@ -1091,8 +1091,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, ::
10911091

10921092
if uploc == 'L'
10931093
# forward substitution for LowerTriangular CSC matrices
1094-
for k in 1:ncolB
1095-
for j = 1:nrowB
1094+
for k in axes(B,2)
1095+
for j in axes(B,1)
10961096
i1 = ia[j]
10971097
i2 = ia[j + 1] - one(eltype(ia))
10981098

@@ -1120,8 +1120,8 @@ function LinearAlgebra.generic_trimatdiv!(C::StridedVecOrMat, uploc, isunitc, ::
11201120
end
11211121
else # uploc == 'U'
11221122
# backward substitution for UpperTriangular CSC matrices
1123-
for k in 1:ncolB
1124-
for j = nrowB:-1:1
1123+
for k in axes(B,2)
1124+
for j in reverse(axes(B,1))
11251125
i1 = ia[j]
11261126
i2 = ia[j + 1] - one(eltype(ia))
11271127

@@ -1176,8 +1176,8 @@ function _mul!(nzrang::Function, diagop::Function, odiagop::Function, C::Strided
11761176
nzv = nonzeros(A)
11771177
let z = T(0), sumcol=z, αxj=z, aarc=z, α = α
11781178
β != one(β) && LinearAlgebra._rmul_or_fill!(C, β)
1179-
@inbounds for k = 1:m
1180-
for col = 1:n
1179+
@inbounds for k in axes(B,2)
1180+
for col in axes(B,1)
11811181
αxj = B[col,k] * α
11821182
sumcol = z
11831183
for j = nzrang(A, col)
@@ -1224,7 +1224,7 @@ function _dot(x::AbstractVector, A::AbstractSparseMatrixCSC, y::AbstractVector,
12241224
r = zero(T)
12251225
rvals = getrowval(A)
12261226
nzvals = getnzval(A)
1227-
@inbounds for col in 1:n
1227+
@inbounds for col in axes(A,2)
12281228
ycol = y[col]
12291229
xcol = x[col]
12301230
if _isnotzero(ycol) && _isnotzero(xcol)
@@ -1280,7 +1280,7 @@ function _dot(x::SparseVector, A::AbstractSparseMatrixCSC, y::SparseVector, rang
12801280
end
12811281
end
12821282
# diagonal
1283-
for i in 1:m
1283+
for i in axes(A,1)
12841284
r1 = Int(Acolptr[i])
12851285
r2 = Int(Acolptr[i+1]-1)
12861286
r1 > r2 && continue
@@ -1320,10 +1320,10 @@ function ldiv!(D::Diagonal{T}, A::AbstractSparseMatrixCSC{T}) where {T}
13201320
nonz = nonzeros(A)
13211321
Arowval = rowvals(A)
13221322
b = D.diag
1323-
for i=1:length(b)
1323+
for i=axes(b,1)
13241324
iszero(b[i]) && throw(SingularException(i))
13251325
end
1326-
@inbounds for col in 1:size(A, 2), p in nzrange(A, col)
1326+
@inbounds for col in axes(A,2), p in nzrange(A, col)
13271327
nonz[p] = b[Arowval[p]] \ nonz[p]
13281328
end
13291329
A
@@ -1543,7 +1543,7 @@ function opnorm(A::AbstractSparseMatrixCSC, p::Real=2)
15431543
Tsum = promote_type(Float64,Tnorm)
15441544
if p==1
15451545
nA::Tsum = 0
1546-
for j=1:n
1546+
for j in axes(A,2)
15471547
colSum::Tsum = 0
15481548
for i in nzrange(A, j)
15491549
colSum += abs(nonzeros(A)[i])
@@ -1555,7 +1555,7 @@ function opnorm(A::AbstractSparseMatrixCSC, p::Real=2)
15551555
throw(ArgumentError("2-norm not yet implemented for sparse matrices. Try opnorm(Array(A)) or opnorm(A, p) where p=1 or Inf."))
15561556
elseif p==Inf
15571557
rowSum = zeros(Tsum,m)
1558-
for i=1:length(nonzeros(A))
1558+
for i in axes(nonzeros(A),1)
15591559
rowSum[rowvals(A)[i]] += abs(nonzeros(A)[i])
15601560
end
15611561
return convert(Tnorm, maximum(rowSum))
@@ -1689,7 +1689,7 @@ function opnormestinv(A::AbstractSparseMatrixCSC{T}, t::Integer = min(2,maximum(
16891689
h_max = zero(real(eltype(Z)))
16901690
h = zeros(real(eltype(Z)), n)
16911691
h_ind = 0
1692-
for i = 1:n
1692+
for i in axes(A,1)
16931693
h[i] = norm(Z[i,1:t], Inf)
16941694
if h[i] > h_max
16951695
h_max = h[i]
@@ -1779,11 +1779,11 @@ const _DenseKronGroup = Union{Number, Vector, Matrix, AdjOrTrans{<:Any,<:VecOrMa
17791779
resize!(rowvalC, nnzC)
17801780

17811781
col = 1
1782-
@inbounds for j = 1:nA
1782+
@inbounds for j in axes(A,2)
17831783
startA = getcolptr(A)[j]
17841784
stopA = getcolptr(A)[j+1] - 1
17851785
lA = stopA - startA + 1
1786-
for i = 1:nB
1786+
for i in axes(B,2)
17871787
startB = getcolptr(B)[i]
17881788
stopB = getcolptr(B)[i+1] - 1
17891789
lB = stopB - startB + 1
@@ -1899,7 +1899,7 @@ function mul!(C::AbstractSparseMatrixCSC, A::AbstractSparseMatrixCSC, D::Diagona
18991899
Cnzval = nonzeros(C)
19001900
Anzval = nonzeros(A)
19011901
resize!(Cnzval, length(Anzval))
1902-
for col in 1:n, p in nzrange(A, col)
1902+
for col in axes(A,2), p in nzrange(A, col)
19031903
@inbounds Cnzval[p] = Anzval[p] * b[col]
19041904
end
19051905
C
@@ -1916,7 +1916,7 @@ function mul!(C::AbstractSparseMatrixCSC, D::Diagonal, A::AbstractSparseMatrixCS
19161916
Anzval = nonzeros(A)
19171917
Arowval = rowvals(A)
19181918
resize!(Cnzval, length(Anzval))
1919-
for col in 1:n, p in nzrange(A, col)
1919+
for col in axes(A,2), p in nzrange(A, col)
19201920
@inbounds Cnzval[p] = b[Arowval[p]] * Anzval[p]
19211921
end
19221922
C
@@ -1953,7 +1953,7 @@ function rmul!(A::AbstractSparseMatrixCSC, D::Diagonal)
19531953
szD = size(D, 1)
19541954
(n == szD) || throw(DimensionMismatch("A has size ($m, $n) but D has size ($szD, $szD)"))
19551955
Anzval = nonzeros(A)
1956-
@inbounds for col in 1:n, p in nzrange(A, col)
1956+
@inbounds for col in axes(A,2), p in nzrange(A, col)
19571957
Anzval[p] = Anzval[p] * D.diag[col]
19581958
end
19591959
return A
@@ -1965,7 +1965,7 @@ function lmul!(D::Diagonal, A::AbstractSparseMatrixCSC)
19651965
(m == ds2) || throw(DimensionMismatch("D has size ($ds2, $ds2) but A has size ($m, $n)"))
19661966
Anzval = nonzeros(A)
19671967
Arowval = rowvals(A)
1968-
@inbounds for col in 1:n, p in nzrange(A, col)
1968+
@inbounds for col in axes(A,2), p in nzrange(A, col)
19691969
Anzval[p] = D.diag[Arowval[p]] * Anzval[p]
19701970
end
19711971
return A
@@ -1983,7 +1983,7 @@ function ldiv!(C::AbstractSparseMatrixCSC, D::Diagonal, A::AbstractSparseMatrixC
19831983
Anzval = nonzeros(A)
19841984
Arowval = rowvals(A)
19851985
resize!(Cnzval, length(Anzval))
1986-
for col in 1:n, p in nzrange(A, col)
1986+
for col in axes(A,2), p in nzrange(A, col)
19871987
@inbounds Cnzval[p] = b[Arowval[p]] \ Anzval[p]
19881988
end
19891989
C
@@ -2000,7 +2000,7 @@ function LinearAlgebra._rdiv!(C::AbstractSparseMatrixCSC, A::AbstractSparseMatri
20002000
Cnzval = nonzeros(C)
20012001
Anzval = nonzeros(A)
20022002
resize!(Cnzval, length(Anzval))
2003-
for col in 1:n, p in nzrange(A, col)
2003+
for col in axes(A,2), p in nzrange(A, col)
20042004
@inbounds Cnzval[p] = Anzval[p] / b[col]
20052005
end
20062006
C

src/solvers/cholmod.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ function Sparse{Tv, Ti}(A::SparseMatrixCSC{<:Any}, stype::Integer) where {Tv<:VT
10251025
# Need to remove any non real elements in the diagonal because, in contrast to
10261026
# BLAS/LAPACK these are not ignored by CHOLMOD. If even tiny imaginary parts are
10271027
# present CHOLMOD will fail with a non-positive definite/zero pivot error.
1028-
for j = 1:size(A, 2)
1028+
for j = axes(A, 2)
10291029
for ip = getcolptr(A)[j]:getcolptr(A)[j + 1] - 1
10301030
v = nonzeros(A)[ip]
10311031
unsafe_store!(Ptr{Tv}(s.x), rowvals(A)[ip] == j ? Complex(real(v)) : v, ip)

0 commit comments

Comments
 (0)