From 3e597df18a93d717a086ffeea00e2b4750a12932 Mon Sep 17 00:00:00 2001 From: Chi Po Choi Date: Tue, 7 Aug 2018 02:05:00 -0700 Subject: [PATCH 1/2] fix \ SparseVector --- stdlib/SuiteSparse/src/cholmod.jl | 2 +- stdlib/SuiteSparse/test/cholmod.jl | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/stdlib/SuiteSparse/src/cholmod.jl b/stdlib/SuiteSparse/src/cholmod.jl index 699de4398e70c..4715391aa5f71 100644 --- a/stdlib/SuiteSparse/src/cholmod.jl +++ b/stdlib/SuiteSparse/src/cholmod.jl @@ -1713,7 +1713,7 @@ 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::SparseVecOrMat) = 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..fec1d6a2da58b 100644 --- a/stdlib/SuiteSparse/test/cholmod.jl +++ b/stdlib/SuiteSparse/test/cholmod.jl @@ -706,6 +706,15 @@ 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 +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)) From 0a92f6fbcef8e26a66a174ff5f81071535ba76a0 Mon Sep 17 00:00:00 2001 From: Chi Po Choi Date: Wed, 8 Aug 2018 06:47:35 -0700 Subject: [PATCH 2/2] split (\) for sparsevector; test for Factor and Symmetric Sparse Matrix --- stdlib/SuiteSparse/src/cholmod.jl | 3 ++- stdlib/SuiteSparse/test/cholmod.jl | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/stdlib/SuiteSparse/src/cholmod.jl b/stdlib/SuiteSparse/src/cholmod.jl index 4715391aa5f71..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))) +(\)(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 fec1d6a2da58b..419efc70f303c 100644 --- a/stdlib/SuiteSparse/test/cholmod.jl +++ b/stdlib/SuiteSparse/test/cholmod.jl @@ -713,6 +713,7 @@ end chI = cholesky(sparseI) @test chI \ sparseb ≈ sparseb @test chI \ sparseB ≈ sparseB + @test chI \ sparseI ≈ sparseI end @testset "Real factorization and complex rhs" begin