Skip to content

Commit 3765e0b

Browse files
More fixes
1 parent bdc44a3 commit 3765e0b

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

src/abstractsparse.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ Supertype for matrix with compressed sparse row (CSR).
4848
"""
4949
abstract type AbstractSparseMatrixCSR{Tv,Ti<:Integer} <: AbstractSparseMatrix{Tv,Ti} end
5050

51+
const AbstractSparseMatrixCSCOrCSR{Tv,Ti} = Union{AbstractSparseMatrixCSR{Tv,Ti}, AbstractSparseMatrixCSC{Tv,Ti}}
52+
5153
"""
5254
issparse(S)
5355

src/sparsematrix.jl

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ struct SparseMatrixCSC{Tv,Ti<:Integer} <: AbstractSparseMatrixCSC{Tv,Ti}
2626
function SparseMatrixCSC{Tv,Ti}(m::Integer, n::Integer, colptr::Vector{Ti},
2727
rowval::Vector{Ti}, nzval::Vector{Tv}) where {Tv,Ti<:Integer}
2828
sparse_check_Ti(m, n, Ti)
29-
_goodbuffers(Int(m), Int(n), colptr, rowval, nzval) ||
29+
_goodbufferscsc(Int(m), Int(n), colptr, rowval, nzval) ||
3030
throw(ArgumentError("Invalid buffers for SparseMatrixCSC construction n=$n, colptr=$(summary(colptr)), rowval=$(summary(rowval)), nzval=$(summary(nzval))"))
3131
new(Int(m), Int(n), colptr, rowval, nzval)
3232
end
@@ -73,7 +73,7 @@ struct FixedSparseCSC{Tv,Ti<:Integer} <: AbstractSparseMatrixCSC{Tv,Ti}
7373
rowval::ReadOnly{Ti,1,Vector{Ti}},
7474
nzval::Vector{Tv}) where {Tv,Ti<:Integer}
7575
sparse_check_Ti(m, n, Ti)
76-
_goodbuffers(Int(m), Int(n), parent(colptr), parent(rowval), nzval) ||
76+
_goodbufferscsc(Int(m), Int(n), parent(colptr), parent(rowval), nzval) ||
7777
throw(ArgumentError("Invalid buffers for FixedSparseCSC construction n=$n, colptr=$(summary(colptr)), rowval=$(summary(rowval)), nzval=$(summary(nzval))"))
7878
new(Int(m), Int(n), colptr, rowval, nzval)
7979
end
@@ -164,15 +164,21 @@ end
164164

165165
size(S::SorF) = (getfield(S, :m), getfield(S, :n))
166166

167-
_goodbuffers(S::AbstractSparseMatrixCSC) = _goodbuffers(size(S)..., getcolptr(S), getrowval(S), nonzeros(S))
168-
_checkbuffers(S::AbstractSparseMatrixCSC) = (@assert _goodbuffers(S); S)
167+
_goodbuffers(S::AbstractSparseMatrixCSC) = _goodbufferscsc(size(S)..., getcolptr(S), getrowval(S), nonzeros(S))
168+
_goodbuffers(S::AbstractSparseMatrixCSR) = _goodbufferscsr(size(S)..., getrowptr(S), getcolval(S), nonzeros(S))
169+
_checkbuffers(S::AbstractSparseMatrixCSCOrCSR) = (@assert _goodbuffers(S); S)
169170
_checkbuffers(S::Union{Adjoint, Transpose}) = (_checkbuffers(parent(S)); S)
170171

171-
function _goodbuffers(m, n, colptr, rowval, nzval)
172+
function _goodbufferscsc(m, n, colptr, rowval, nzval)
172173
(length(colptr) == n + 1 && colptr[end] - 1 == length(rowval) == length(nzval))
173174
# stronger check for debugging purposes
174175
# && all(issorted(@view rowval[colptr[i]:colptr[i+1]-1]) for i=1:n)
175176
end
177+
function _goodbufferscsr(m, n, rowptr, colval, nzval)
178+
(length(rowptr) == m + 1 && rowptr[end] - 1 == length(colval) == length(nzval))
179+
# stronger check for debugging purposes
180+
# && all(issorted(@view rowval[colptr[i]:colptr[i+1]-1]) for i=1:n)
181+
end
176182

177183
# Define an alias for views of a SparseMatrixCSC which include all rows and a unit range of the columns.
178184
# Also define a union of SparseMatrixCSC and this view since many methods can be defined efficiently for
@@ -1535,11 +1541,9 @@ end
15351541
function _computerowptrs_halfperm!(X::AbstractSparseMatrixCSR{Tv,Ti}, A::AbstractSparseMatrixCSR{TvA,Ti}) where {Tv,TvA,Ti}
15361542
# Compute `transpose(A[q,:])`'s column counts. Store shifted forward one position in getcolptr(X).
15371543
fill!(getrowptr(X), 0)
1538-
@show colvals(A)
15391544
for k in 1:nnz(A)
15401545
getrowptr(X)[colvals(A)[k]+1] += 1
15411546
end
1542-
@show getrowptr(X)
15431547
# Compute `transpose(A[q,:])`'s column pointers. Store shifted forward one position in getcolptr(X).
15441548
getrowptr(X)[1] = 1
15451549
countsum = 1
@@ -1647,7 +1651,7 @@ function ftranspose(A::MatrixType, f::Function, eltype::Type{Tv} = TvA) where {T
16471651
Vector{Ti}(undef, 0),
16481652
Vector{Tv}(undef, 0))
16491653
sizehint!(X, nnz(A))
1650-
return halfperm!(X, A, 1:size(A, 2), f)
1654+
return halfperm!(X, A, 1:size(A, 1), f)
16511655
end
16521656

16531657
adjoint(A::AbstractSparseMatrixCSC) = Adjoint(A)

test/transeposecscmat.jl renamed to test/transposecscmat.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ SparseArrays.nonzeros(A::TransposeSparseMatrixCSC) = nonzeros(A.A.parent)
4343
@test typeof(ATTAT) <: SparseArrays.AbstractSparseMatrixCSR
4444
@test all(ATTAT .== A*A')
4545

46-
A = TransposeSparseMatrixCSC(sprandn(3,2,0.5))
46+
A = TransposeSparseMatrixCSC(sprandn(3,2,0.5))
4747
B1 = TransposeSparseMatrixCSC(sprandn(3,4,0.5))
4848
B2 = TransposeSparseMatrixCSC(sprandn(3,3,0.5))
4949
B3 = TransposeSparseMatrixCSC(sprandn(4,3,0.5))

0 commit comments

Comments
 (0)