Skip to content

Commit

Permalink
Rebase of #28526 on master (#34989)
Browse files Browse the repository at this point in the history
* fix \ SparseVector

* split (\) for sparsevector;
test for Factor and Symmetric Sparse Matrix

Co-authored-by: Chi Po Choi <[email protected]>
  • Loading branch information
2 people authored and KristofferC committed Apr 11, 2020
1 parent 4ee90e7 commit 76c0355
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
3 changes: 2 additions & 1 deletion stdlib/SuiteSparse/src/cholmod.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
10 changes: 10 additions & 0 deletions stdlib/SuiteSparse/test/cholmod.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down

0 comments on commit 76c0355

Please sign in to comment.