@@ -4,7 +4,7 @@ using LinearAlgebra
44import LinearAlgebra: (\ ),
55 cholesky, cholesky!, det, diag, ishermitian, isposdef,
66 issuccess, issymmetric, ldlt, ldlt!, logdet, Symmetric, Hermitian, lu
7- using .. SuiteSparseGraphBLAS: AbstractGBMatrix, AbstractGBVector, unsafepack!, unsafeunpack!, GBMatrix,
7+ using .. SuiteSparseGraphBLAS: AbstractGBMatrix, AbstractGBVector, unsafepack!, unsafeunpack!, GBMatrix,
88GBVector, AbstractGBArray, LibGraphBLAS, ColMajor, sparsitystatus,
99_sizedjlmalloc, increment!, isshallow, nnz, tempunpack!, storedeltype
1010using SuiteSparseGraphBLAS
@@ -66,11 +66,11 @@ function CHOLMOD.Dense(A::AbstractGBMatrix)
6666 end
6767end
6868
69- function _extract_args (s, :: Type{T} ) where {T<: CHOLMOD.VTypes }
70- ptr = SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, s. p, (s. ncol + 1 ,), own = false ))
69+ function _extract_args (s, :: Type{T} , :: Type{I} ) where {T<: CHOLMOD.VTypes , I <: CHOLMOD.ITypes }
70+ ptr = SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, Ptr {I} ( s. p) , (s. ncol + 1 ,), own = false ))
7171 l = ptr[end ] - 1
7272 return s. nrow, s. ncol, ptr,
73- SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, s. i, (l + 1 ,), own = false )),
73+ SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, Ptr {I} ( s. i) , (l + 1 ,), own = false )),
7474 SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, Ptr {T} (s. x), (l + 1 ,), own = false ))
7575end
7676
@@ -82,24 +82,24 @@ function GBVector{T, F}(D::CHOLMOD.Dense{T}; fill = defaultfill(F)) where {T, F}
8282 SuiteSparseGraphBLAS. unsafepack! (A, D, false ; order = ColMajor ())
8383 return A
8484end
85- function GBVector {T, F} (S:: CHOLMOD.Sparse{T} ; fill = defaultfill (F)) where {T, F}
85+ function GBVector {T, F} (S:: CHOLMOD.Sparse{T, I } ; fill = defaultfill (F)) where {T, F, I }
8686 @assert size (S, 2 ) == 1
8787 s = unsafe_load (pointer (S))
8888 if s. stype != 0
8989 throw (ArgumentError (" matrix has stype != 0. Convert to matrix " *
9090 " with stype == 0 before converting to GBMatrix" ))
9191 end
92- nrow, ncol, ptr, idx, vals = _extract_args (s, T)
92+ nrow, ncol, ptr, idx, vals = _extract_args (s, T, I )
9393 A = GBVector {T} (nrow; fill)
9494 SuiteSparseGraphBLAS. unsafepack! (
95- A, ptr, idx, vals, false ;
95+ A, ptr, idx, vals, false ;
9696 order = ColMajor (), jumbled = s. sorted == 0 )
9797 return A
9898end
9999
100- GBVector {T} (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
100+ GBVector {T} (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
101101 GBVector {T, F} (D; fill)
102- GBVector (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
102+ GBVector (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
103103 GBVector {T, F} (D; fill)
104104
105105for Mat ∈ [:GBMatrix , :GBMatrixC , :GBMatrixR ]
@@ -111,23 +111,23 @@ for Mat ∈ [:GBMatrix, :GBMatrixC, :GBMatrixR]
111111 SuiteSparseGraphBLAS. unsafepack! (A, D, false ; order = ColMajor ())
112112 return A
113113 end
114- function $Mat {T, F} (S:: CHOLMOD.Sparse{T} ; fill = defaultfill (F)) where {T, F}
114+ function $Mat {T, F} (S:: CHOLMOD.Sparse{T, I } ; fill = defaultfill (F)) where {T, F, I }
115115 s = unsafe_load (pointer (S))
116116 if s. stype != 0
117117 throw (ArgumentError (" matrix has stype != 0. Convert to matrix " *
118118 " with stype == 0 before converting to GBMatrix" ))
119119 end
120- nrow, ncol, ptr, idx, vals = _extract_args (s, T)
120+ nrow, ncol, ptr, idx, vals = _extract_args (s, T, I )
121121 A = $ Mat {T} (nrow, ncol; fill)
122122 SuiteSparseGraphBLAS. unsafepack! (
123- A, ptr, idx, vals, false ;
123+ A, ptr, idx, vals, false ;
124124 order = ColMajor (), jumbled = s. sorted == 0 )
125125 return A
126126 end
127127
128- $ Mat {T} (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
128+ $ Mat {T} (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
129129 $ Mat {T, F} (D; fill)
130- $ Mat (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
130+ $ Mat (D:: Union{CHOLMOD.Sparse{T}, CHOLMOD.Dense{T}} ; fill:: F = defaultfill (T)) where {T, F} =
131131 $ Mat {T, F} (D; fill)
132132
133133 function LinearAlgebra. Symmetric {Float64,<:$Mat{Float64}} (S:: Sparse{Float64} )
@@ -137,7 +137,7 @@ for Mat ∈ [:GBMatrix, :GBMatrixC, :GBMatrixR]
137137 Symmetric (A, s. stype > 0 ? :U : :L )
138138 end
139139 convert (T:: Type{Symmetric{Float64,<:$Mat{Float64}}} , A:: Sparse{Float64} ) = T (A)
140-
140+
141141 function LinearAlgebra. Hermitian {Tv,<:$Mat{Tv}} (A:: Sparse{Tv} ) where Tv<: VTypes
142142 s = unsafe_load (pointer (A))
143143 ishermitian (A) || throw (ArgumentError (" matrix is not Hermitian" ))
183183function CHOLMOD. getLd! (S:: AbstractGBMatrix )
184184 nz = nnz (S)
185185 colptr, rowvals, nonzeros, repack! = tempunpack! (
186- S, SuiteSparseGraphBLAS. Sparse ();
186+ S, SuiteSparseGraphBLAS. Sparse ();
187187 order = ColMajor ()
188188 )
189189 d = Vector {eltype(S)} (undef, size (S, 1 ))
@@ -264,7 +264,7 @@ function LinearAlgebra.lu(A::GBRealHermSymComplexHermF64SSL)
264264 return lu (copy (A))
265265end
266266
267- # TODO : Improve these, to use better promotion:
267+ # TODO : Improve these, to use better promotion:
268268Base.:* (A:: Symmetric{Float64,G} ,
269269 B:: AbstractGBArray ) where {G<: AbstractGBMatrix } = GBMatrix (Sparse (A)* Sparse (B))
270270Base.:* (A:: Hermitian{ComplexF64,<:GBMatrix} ,
@@ -278,4 +278,4 @@ Base.:*(A::AbstractGBArray{ComplexF64},
278278 B:: Hermitian{ComplexF64,<:AbstractGBMatrix} ) = GBMatrix (Sparse (A)* Sparse (B))
279279Base.:* (A:: AbstractGBArray{Float64} ,
280280 B:: Hermitian{Float64,<:AbstractGBMatrix} ) = GBMatrix (Sparse (A)* Sparse (B))
281- end
281+ end
0 commit comments