From 645aa530571693e36c2d5130f09ef39257230225 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Wed, 4 Mar 2020 21:18:58 -0500 Subject: [PATCH] Rebase of #28526 on master (#34989) * fix \ SparseVector * split (\) for sparsevector; test for Factor and Symmetric Sparse Matrix Co-authored-by: Chi Po Choi --- stdlib/SuiteSparse/src/cholmod.jl | 3 ++- stdlib/SuiteSparse/test/cholmod.jl | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/stdlib/SuiteSparse/src/cholmod.jl b/stdlib/SuiteSparse/src/cholmod.jl index 699de4398e70c..3254dc1a2d444 100644 --- a/stdlib/SuiteSparse/src/cholmod.jl +++ b/stdlib/SuiteSparse/src/cholmod.jl @@ -1713,7 +1713,8 @@ end (\)(L::Factor, B::Sparse) = spsolve(CHOLMOD_A, L, B) # When right hand side is sparse, we have to ensure that the rhs is not marked as symmetric. -(\)(L::Factor, B::SparseVecOrMat) = sparse(spsolve(CHOLMOD_A, L, Sparse(B, 0))) +(\)(L::Factor, B::SparseMatrixCSC) = sparse(spsolve(CHOLMOD_A, L, Sparse(B, 0))) +(\)(L::Factor, B::SparseVector) = sparse(spsolve(CHOLMOD_A, L, Sparse(B))) \(adjL::Adjoint{<:Any,<:Factor}, B::Dense) = (L = adjL.parent; solve(CHOLMOD_A, L, B)) \(adjL::Adjoint{<:Any,<:Factor}, B::Sparse) = (L = adjL.parent; spsolve(CHOLMOD_A, L, B)) diff --git a/stdlib/SuiteSparse/test/cholmod.jl b/stdlib/SuiteSparse/test/cholmod.jl index c19c3726dd979..419efc70f303c 100644 --- a/stdlib/SuiteSparse/test/cholmod.jl +++ b/stdlib/SuiteSparse/test/cholmod.jl @@ -706,6 +706,16 @@ end @test A\view(Matrix(1.0I, 5, 5), :, :) ≈ Matrix(Diagonal(x)) end +@testset "Test \\ for Factor and SparseVecOrMat" begin + sparseI = sparse(1.0I, 100, 100) + sparseb = sprandn(100, 0.5) + sparseB = sprandn(100, 100, 0.5) + chI = cholesky(sparseI) + @test chI \ sparseb ≈ sparseb + @test chI \ sparseB ≈ sparseB + @test chI \ sparseI ≈ sparseI +end + @testset "Real factorization and complex rhs" begin A = sprandn(5, 5, 0.4) |> t -> t't + I B = complex.(randn(5, 2), randn(5, 2))