1- module LinearSolveSparseArrays
1+ module LinearSolveSparseArraysExt
22
33using LinearSolve, LinearAlgebra
44using SparseArrays
@@ -11,12 +11,44 @@ using SparseArrays: AbstractSparseMatrixCSC, nonzeros, rowvals, getcolptr
1111include (" ../src/KLU/klu.jl" )
1212
1313LinearSolve. issparsematrixcsc (A:: AbstractSparseMatrixCSC ) = true
14+ LinearSolve. issparsematrix (A:: AbstractSparseArray ) = true
15+ LinearSolve. make_SparseMatrixCSC (A:: AbstractSparseArray ) = SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A), nonzeros (A))
16+ LinearSolve. makeempty_SparaseMatrixCSC (A:: AbstractSparseArray ) = SparseMatrixCSC (0 , 0 , [1 ], Int[], eltype (A)[])
17+
18+ function LinearSolve. init_cacheval (alg:: RFLUFactorization ,
19+ A:: Union{AbstractSparseArray, LinearSolve.SciMLOperators.AbstractSciMLOperator} , b, u, Pl, Pr,
20+ maxiters:: Int ,
21+ abstol, reltol, verbose:: Bool , assumptions:: OperatorAssumptions )
22+ nothing , nothing
23+ end
24+
25+
26+ function LinearSolve. init_cacheval (
27+ alg:: QRFactorization , A:: Symmetric{<:Number, <:SparseMatrixCSC} , b, u, Pl, Pr,
28+ maxiters:: Int , abstol, reltol, verbose:: Bool ,
29+ assumptions:: OperatorAssumptions )
30+ return nothing
31+ end
1432
1533function LinearSolve. handle_sparsematrixcsc_lu (A:: AbstractSparseMatrixCSC )
1634 lu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A), nonzeros (A)),
1735 check = false )
1836end
1937
38+ function LinearSolve. defaultalg (
39+ A:: Symmetric{<:Number, <:SparseMatrixCSC} , b, :: OperatorAssumptions{Bool} )
40+ LinearSolve. DefaultLinearSolver (LinearSolve. DefaultAlgorithmChoice. CHOLMODFactorization)
41+ end
42+
43+ function LinearSolve. defaultalg (A:: AbstractSparseMatrixCSC{Tv, Ti} , b,
44+ assump:: OperatorAssumptions{Bool} ) where {Tv, Ti}
45+ if assump. issq
46+ DefaultLinearSolver (DefaultAlgorithmChoice. SparspakFactorization)
47+ else
48+ error (" Generic number sparse factorization for non-square is not currently handled" )
49+ end
50+ end
51+
2052function LinearSolve. init_cacheval (alg:: GenericFactorization ,
2153 A:: Union {Hermitian{T, <: SparseMatrixCSC },
2254 Symmetric{T, <: SparseMatrixCSC }}, b, u, Pl, Pr,
@@ -46,7 +78,7 @@ function LinearSolve.init_cacheval(alg::UMFPACKFactorization, A::AbstractSparseA
4678 rowvals (A), nonzeros (A)))
4779end
4880
49- function SciMLBase. solve! (cache:: LinearCache , alg:: UMFPACKFactorization ; kwargs... )
81+ function SciMLBase. solve! (cache:: LinearSolve. LinearCache , alg:: UMFPACKFactorization ; kwargs... )
5082 A = cache. A
5183 A = convert (AbstractMatrix, A)
5284 if cache. isfresh
@@ -101,7 +133,7 @@ function LinearSolve.init_cacheval(alg::KLUFactorization, A::AbstractSparseArray
101133end
102134
103135# TODO : guard this against errors
104- function SciMLBase. solve! (cache:: LinearCache , alg:: KLUFactorization ; kwargs... )
136+ function SciMLBase. solve! (cache:: LinearSolve. LinearCache , alg:: KLUFactorization ; kwargs... )
105137 A = cache. A
106138 A = convert (AbstractMatrix, A)
107139 if cache. isfresh
@@ -146,11 +178,11 @@ function LinearSolve.init_cacheval(alg::CHOLMODFactorization,
146178end
147179
148180function LinearSolve. init_cacheval (alg:: NormalCholeskyFactorization ,
149- A:: Union {AbstractSparseArray, GPUArraysCore. AnyGPUArray,
181+ A:: Union {AbstractSparseArray, LinearSolve . GPUArraysCore. AnyGPUArray,
150182 Symmetric{<: Number , <: AbstractSparseArray }}, b, u, Pl, Pr,
151183 maxiters:: Int , abstol, reltol, verbose:: Bool ,
152184 assumptions:: OperatorAssumptions )
153- ArrayInterface. cholesky_instance (convert (AbstractMatrix, A))
185+ LinearSolve . ArrayInterface. cholesky_instance (convert (AbstractMatrix, A))
154186end
155187
156188# Specialize QR for the non-square case
@@ -170,16 +202,16 @@ function LinearSolve._ldiv!(x::AbstractVector,
170202end
171203
172204# Ambiguity removal
173- function LinearSolve. _ldiv! (:: SVector ,
205+ function LinearSolve. _ldiv! (:: LinearSolve. SVector ,
174206 A:: Union {SparseArrays. CHOLMOD. Factor, LinearAlgebra. QR,
175207 LinearAlgebra. QRCompactWY, SparseArrays. SPQR. QRSparse},
176208 b:: AbstractVector )
177209 (A \ b)
178210end
179- function LinearSolve. _ldiv! (:: SVector ,
211+ function LinearSolve. _ldiv! (:: LinearSolve. SVector ,
180212 A:: Union {SparseArrays. CHOLMOD. Factor, LinearAlgebra. QR,
181213 LinearAlgebra. QRCompactWY, SparseArrays. SPQR. QRSparse},
182- b:: SVector )
214+ b:: LinearSolve. SVector )
183215 (A \ b)
184216end
185217
0 commit comments