From f229e1f758120fd8e5c1f72c8d13650fba488282 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Mon, 17 Dec 2018 02:08:27 -0500 Subject: [PATCH] Fix #20409: rank for sparse matrices. --- stdlib/SuiteSparse/src/spqr.jl | 1 + stdlib/SuiteSparse/test/spqr.jl | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/stdlib/SuiteSparse/src/spqr.jl b/stdlib/SuiteSparse/src/spqr.jl index d9ca5364e906b..02d64685a4e54 100644 --- a/stdlib/SuiteSparse/src/spqr.jl +++ b/stdlib/SuiteSparse/src/spqr.jl @@ -346,6 +346,7 @@ _ret_size(F::QRSparse, b::AbstractVector) = (size(F, 2),) _ret_size(F::QRSparse, B::AbstractMatrix) = (size(F, 2), size(B, 2)) LinearAlgebra.rank(F::QRSparse) = reduce(max, view(F.R.rowval, 1:nnz(F.R)), init = eltype(F.R.rowval)(0)) +LinearAlgebra.rank(S::SparseMatrixCSC) = rank(qr(S)) function (\)(F::QRSparse{T}, B::VecOrMat{Complex{T}}) where T<:LinearAlgebra.BlasReal # |z1|z3| reinterpret |x1|x2|x3|x4| transpose |x1|y1| reshape |x1|y1|x3|y3| diff --git a/stdlib/SuiteSparse/test/spqr.jl b/stdlib/SuiteSparse/test/spqr.jl index 53ec785213a0b..8f86188ae8e16 100644 --- a/stdlib/SuiteSparse/test/spqr.jl +++ b/stdlib/SuiteSparse/test/spqr.jl @@ -100,8 +100,11 @@ end end @testset "rank" begin - @test rank(qr(sprandn(10, 5, 1.0)*sprandn(5, 10, 1.0))) == 5 + S = sprandn(10, 5, 1.0)*sprandn(5, 10, 1.0) + @test rank(qr(S)) == 5 + @test rank(S) == 5 @test all(iszero, (rank(qr(spzeros(10, i))) for i in 1:10)) + @test all(iszero, (rank(spzeros(10, i)) for i in 1:10)) end end