Skip to content

Commit ebbf923

Browse files
committed
fix up part of umfpack tests, hyperpack
1 parent c51ee58 commit ebbf923

File tree

6 files changed

+487
-405
lines changed

6 files changed

+487
-405
lines changed

src/pack.jl

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ function _packbitmap!(
6767
else
6868
throw(ArgumentError("order must be either RowMajor() or ColMajor()"))
6969
end
70-
7170
end
7271

7372
function _packcscmatrix!(
@@ -146,6 +145,60 @@ function _packcsrmatrix!(
146145
return A
147146
end
148147

148+
function _packhypermatrix!(
149+
A::AbstractGBArray{T}, ptr::Vector{Ti}, idx1::Vector{Ti}, idx2::Vector{Ti}, values::Vector{T};
150+
desc = nothing, order = ColMajor()
151+
) where {T}
152+
desc = _handledescriptor(desc)
153+
valsize = length(A) * sizeof(T)
154+
ptrsize = length(ptr) * sizeof(Ti)
155+
idx1size = length(idx1) * sizeof(Ti)
156+
idx2size = length(idx2) * sizeof(Ti)
157+
nvec = length(ptr) - 1
158+
isiso = (length(values) == 1) && (length(A) != 1)
159+
ptrpointer = Ref{Ptr{LibGraphBLAS.GrB_Index}}(pointer(ptr))
160+
idx1pointer = Ref{Ptr{LibGraphBLAS.GrB_Index}}(pointer(idx1))
161+
idx2pointer = Ref{Ptr{LibGraphBLAS.GrB_Index}}(pointer(idx2))
162+
valpointer = Ref{Ptr{Cvoid}}(pointer(values))
163+
164+
if order === ColMajor()
165+
@wraperror LibGraphBLAS.GxB_Matrix_pack_HyperCSC(
166+
A,
167+
ptrpointer,
168+
idx1pointer,
169+
idx2pointer,
170+
valpointer,
171+
ptrsize,
172+
idx1size,
173+
idx2size,
174+
valsize,
175+
isiso,
176+
nvec,
177+
false,
178+
desc
179+
)
180+
elseif order === RowMajor()
181+
@wraperror LibGraphBLAS.GxB_Matrix_pack_HyperCSR(
182+
A,
183+
ptrpointer,
184+
idx1pointer,
185+
idx2pointer,
186+
valpointer,
187+
ptrsize,
188+
idx1size,
189+
idx2size,
190+
valsize,
191+
isiso,
192+
nvec,
193+
false,
194+
desc
195+
)
196+
else
197+
throw(ArgumentError("order must be either RowMajor() or ColMajor()"))
198+
end
199+
200+
end
201+
149202
function makeshallow!(A)
150203
ccall((:GB_make_shallow, libgraphblas), Cvoid, (LibGraphBLAS.GrB_Matrix,), parent(A))
151204
end
@@ -184,6 +237,16 @@ function unsafepack!(
184237
return A
185238
end
186239

240+
function unsafepack!(
241+
A::AbstractGBArray, ptr, idx1, idx2, values, shallow::Bool = true;
242+
order = ColMajor(), decrementindices = true
243+
)
244+
_packhypermatrix!(A, ptr, idx1, idx2, values; decrementindices)
245+
shallow && makeshallow!(A)
246+
LibGraphBLAS.GxB_Matrix_Option_set(A, LibGraphBLAS.GxB_FORMAT, option_toconst(storageorder(A)))
247+
return A
248+
end
249+
187250
function unsafepack!(A::AbstractGBArray, S::SparseMatrixCSC, shallow::Bool = true; decrementindices = true)
188251
unsafepack!(A, getcolptr(S), getrowval(S), getnzval(S), shallow; decrementindices)
189252
end

src/random.jl

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ Any input which supports `eltype(typeorrange)`.
2222
- `GBMatrix`
2323
"""
2424
function gbrand(
25-
rng::AbstractRNG, typeorrange, nrows::Integer, ncols::Integer, density::AbstractFloat;
25+
rng::AbstractRNG, fn::F, typeorrange, nrows::Integer, ncols::Integer, density::AbstractFloat;
2626
symmetric=false, pattern=false, skewsymmetric=false, hermitian=false, nodiagonal=false
27-
)
27+
) where F
2828
type = eltype(typeorrange)
2929
A = GBMatrix{type}(nrows, ncols)
3030
(type <: Unsigned || type == Bool) && (skewsymmetric = false)
@@ -52,7 +52,7 @@ function gbrand(
5252
if pattern
5353
x = one(type)
5454
else
55-
x = rand(rng, typeorrange)
55+
x = fn(rng, typeorrange)
5656
end
5757
A[i, j] = x
5858
symmetric && (A[j, i] = x)
@@ -68,7 +68,27 @@ function gbrand(
6868
symmetric=false, pattern=false, skewsymmetric=false, hermitian=false, nodiagonal=false
6969
)
7070
return gbrand(
71-
default_rng(), typeorrange, nrows, ncols, density;
71+
default_rng(), rand, typeorrange, nrows, ncols, density;
72+
symmetric, pattern, skewsymmetric, hermitian, nodiagonal
73+
)
74+
end
75+
76+
function gbrandn(
77+
rng::AbstractRNG, type::DataType, nrows::Integer, ncols::Integer, density::AbstractFloat;
78+
symmetric=false, pattern=false, skewsymmetric=false, hermitian=false, nodiagonal=false
79+
)
80+
return gbrand(
81+
rng, randn, type, nrows, ncols, density;
7282
symmetric, pattern, skewsymmetric, hermitian, nodiagonal
7383
)
7484
end
85+
86+
function gbrandn(
87+
type::DataType, nrows::Integer, ncols::Integer, density::AbstractFloat;
88+
symmetric=false, pattern=false, skewsymmetric=false, hermitian=false, nodiagonal=false
89+
)
90+
return gbrand(
91+
default_rng(), randn, type, nrows, ncols, density;
92+
symmetric, pattern, skewsymmetric, hermitian, nodiagonal
93+
)
94+
end

src/unpack.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,9 @@ function _unpackhypermatrix!(
281281
isjumbled,
282282
desc
283283
)
284-
colptr = unsafe_wrap(Array, Ptr{Int64}(colptr[]), size(A, 2) + 1)
285-
colidx = unsafe_wrap(Array, Ptr{Int64}(colidx), colidxsize[])
284+
nvec = nvec[]
285+
colptr = unsafe_wrap(Array, Ptr{Int64}(colptr[]), nvec + 1)
286+
colidx = unsafe_wrap(Array, Ptr{Int64}(colidx), nvec)
286287
rowidx = unsafe_wrap(Array, Ptr{Int64}(rowidx), nnonzeros)
287288
nstored = isiso[] ? 1 : nnonzeros
288289
vals = unsafe_wrap(Array, Ptr{T}(values[]), nstored)
@@ -343,8 +344,9 @@ desc = _handledescriptor(desc)
343344
isjumbled,
344345
desc
345346
)
346-
rowptr = unsafe_wrap(Array, Ptr{Int64}(rowptr[]), size(A, 2) + 1)
347-
rowidx = unsafe_wrap(Array, Ptr{Int64}(rowidx[]), rowidxsize[])
347+
nvec = nvec[] + 1
348+
rowptr = unsafe_wrap(Array, Ptr{Int64}(rowptr[]), nvec + 1)
349+
rowidx = unsafe_wrap(Array, Ptr{Int64}(rowidx[]), nvec)
348350
colidx = unsafe_wrap(Array, Ptr{Int64}(colidx[]), nnonzeros)
349351
nstored = isiso[] ? 1 : nnonzeros
350352
vals = unsafe_wrap(Array, Ptr{T}(values[]), nstored)

test/Manifest.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# This file is machine-generated - editing it directly is not advised
22

3-
julia_version = "1.8.1"
3+
julia_version = "1.8.2"
44
manifest_format = "2.0"
5-
project_hash = "0e610cf8435f78ad82784147cc6e89c101047f5f"
5+
project_hash = "361dc7471c854e70013567d84463ce04c149fb88"
66

77
[[deps.ArgTools]]
88
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
@@ -168,6 +168,10 @@ version = "1.3.0"
168168
deps = ["LinearAlgebra", "SparseArrays"]
169169
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
170170

171+
[[deps.SuiteSparse]]
172+
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
173+
uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
174+
171175
[[deps.SuiteSparse_jll]]
172176
deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"]
173177
uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
@@ -181,7 +185,7 @@ version = "1.0.0"
181185
[[deps.Tar]]
182186
deps = ["ArgTools", "SHA"]
183187
uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
184-
version = "1.10.0"
188+
version = "1.10.1"
185189

186190
[[deps.Test]]
187191
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]

test/Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000"
55
KLU = "ef3ab10e-7fda-4108-b977-705223b18434"
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
77
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
8+
Serialization = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
89
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
10+
SuiteSparse = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
911
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1012

1113
[compat]

0 commit comments

Comments
 (0)