@@ -4,7 +4,7 @@ using LinearAlgebra
4
4
import LinearAlgebra: (\ ),
5
5
cholesky, cholesky!, det, diag, ishermitian, isposdef,
6
6
issuccess, issymmetric, ldlt, ldlt!, logdet, Symmetric, Hermitian, lu
7
- using .. SuiteSparseGraphBLAS: AbstractGBMatrix, AbstractGBVector, unsafepack!, unsafeunpack!, GBMatrix,
7
+ using .. SuiteSparseGraphBLAS: AbstractGBMatrix, AbstractGBVector, unsafepack!, unsafeunpack!, GBMatrix,
8
8
GBVector, AbstractGBArray, LibGraphBLAS, ColMajor, sparsitystatus,
9
9
_sizedjlmalloc, increment!, isshallow, nnz, tempunpack!, storedeltype
10
10
using SuiteSparseGraphBLAS
@@ -66,11 +66,11 @@ function CHOLMOD.Dense(A::AbstractGBMatrix)
66
66
end
67
67
end
68
68
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 ))
71
71
l = ptr[end ] - 1
72
72
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 )),
74
74
SuiteSparseGraphBLAS. _copytoraw (unsafe_wrap (Array, Ptr {T} (s. x), (l + 1 ,), own = false ))
75
75
end
76
76
@@ -82,24 +82,24 @@ function GBVector{T, F}(D::CHOLMOD.Dense{T}; fill = defaultfill(F)) where {T, F}
82
82
SuiteSparseGraphBLAS. unsafepack! (A, D, false ; order = ColMajor ())
83
83
return A
84
84
end
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 }
86
86
@assert size (S, 2 ) == 1
87
87
s = unsafe_load (pointer (S))
88
88
if s. stype != 0
89
89
throw (ArgumentError (" matrix has stype != 0. Convert to matrix " *
90
90
" with stype == 0 before converting to GBMatrix" ))
91
91
end
92
- nrow, ncol, ptr, idx, vals = _extract_args (s, T)
92
+ nrow, ncol, ptr, idx, vals = _extract_args (s, T, I )
93
93
A = GBVector {T} (nrow; fill)
94
94
SuiteSparseGraphBLAS. unsafepack! (
95
- A, ptr, idx, vals, false ;
95
+ A, ptr, idx, vals, false ;
96
96
order = ColMajor (), jumbled = s. sorted == 0 )
97
97
return A
98
98
end
99
99
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} =
101
101
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} =
103
103
GBVector {T, F} (D; fill)
104
104
105
105
for Mat ∈ [:GBMatrix , :GBMatrixC , :GBMatrixR ]
@@ -111,23 +111,23 @@ for Mat ∈ [:GBMatrix, :GBMatrixC, :GBMatrixR]
111
111
SuiteSparseGraphBLAS. unsafepack! (A, D, false ; order = ColMajor ())
112
112
return A
113
113
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 }
115
115
s = unsafe_load (pointer (S))
116
116
if s. stype != 0
117
117
throw (ArgumentError (" matrix has stype != 0. Convert to matrix " *
118
118
" with stype == 0 before converting to GBMatrix" ))
119
119
end
120
- nrow, ncol, ptr, idx, vals = _extract_args (s, T)
120
+ nrow, ncol, ptr, idx, vals = _extract_args (s, T, I )
121
121
A = $ Mat {T} (nrow, ncol; fill)
122
122
SuiteSparseGraphBLAS. unsafepack! (
123
- A, ptr, idx, vals, false ;
123
+ A, ptr, idx, vals, false ;
124
124
order = ColMajor (), jumbled = s. sorted == 0 )
125
125
return A
126
126
end
127
127
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} =
129
129
$ 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} =
131
131
$ Mat {T, F} (D; fill)
132
132
133
133
function LinearAlgebra. Symmetric {Float64,<:$Mat{Float64}} (S:: Sparse{Float64} )
@@ -137,7 +137,7 @@ for Mat ∈ [:GBMatrix, :GBMatrixC, :GBMatrixR]
137
137
Symmetric (A, s. stype > 0 ? :U : :L )
138
138
end
139
139
convert (T:: Type{Symmetric{Float64,<:$Mat{Float64}}} , A:: Sparse{Float64} ) = T (A)
140
-
140
+
141
141
function LinearAlgebra. Hermitian {Tv,<:$Mat{Tv}} (A:: Sparse{Tv} ) where Tv<: VTypes
142
142
s = unsafe_load (pointer (A))
143
143
ishermitian (A) || throw (ArgumentError (" matrix is not Hermitian" ))
183
183
function CHOLMOD. getLd! (S:: AbstractGBMatrix )
184
184
nz = nnz (S)
185
185
colptr, rowvals, nonzeros, repack! = tempunpack! (
186
- S, SuiteSparseGraphBLAS. Sparse ();
186
+ S, SuiteSparseGraphBLAS. Sparse ();
187
187
order = ColMajor ()
188
188
)
189
189
d = Vector {eltype(S)} (undef, size (S, 1 ))
@@ -264,7 +264,7 @@ function LinearAlgebra.lu(A::GBRealHermSymComplexHermF64SSL)
264
264
return lu (copy (A))
265
265
end
266
266
267
- # TODO : Improve these, to use better promotion:
267
+ # TODO : Improve these, to use better promotion:
268
268
Base.:* (A:: Symmetric{Float64,G} ,
269
269
B:: AbstractGBArray ) where {G<: AbstractGBMatrix } = GBMatrix (Sparse (A)* Sparse (B))
270
270
Base.:* (A:: Hermitian{ComplexF64,<:GBMatrix} ,
@@ -278,4 +278,4 @@ Base.:*(A::AbstractGBArray{ComplexF64},
278
278
B:: Hermitian{ComplexF64,<:AbstractGBMatrix} ) = GBMatrix (Sparse (A)* Sparse (B))
279
279
Base.:* (A:: AbstractGBArray{Float64} ,
280
280
B:: Hermitian{Float64,<:AbstractGBMatrix} ) = GBMatrix (Sparse (A)* Sparse (B))
281
- end
281
+ end
0 commit comments