Skip to content

Commit d36c2cf

Browse files
authored
SuiteSparse:GraphBLAS v740 branch (#58)
* SuiteSparse:GraphBLAS v740 branch * Use non-variadic functions for get and set for greater compatibility * black * Install GraphBLAS from conda-forge
1 parent 49acb10 commit d36c2cf

File tree

7 files changed

+91
-24
lines changed

7 files changed

+91
-24
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
# os: ["ubuntu-latest"]
2020
# source: ["source"]
2121
python-version: ["3.8", "3.9", "3.10", "3.11"]
22-
graphblas-version: ["7.3.3"]
22+
graphblas-version: ["7.4.0"]
2323
steps:
2424
- name: Checkout
2525
uses: actions/checkout@v3

suitesparse_graphblas/__init__.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
_c_double = ffi.typeof("double")
1313

1414

15+
# It is strongly recommended to use the non-variadic version of functions to be
16+
# compatible with the most number of architectures. For example, you should use
17+
# GxB_Matrix_Option_get_INT32 instead of GxB_Matrix_Option_get.
1518
if _is_osx_arm64 or _is_ppc64le:
1619

1720
def vararg(val):
@@ -38,8 +41,8 @@ def vararg(val):
3841

3942
def is_initialized():
4043
"""Is GraphBLAS initialized via GrB_init or GxB_init?"""
41-
mode = ffi.new("GrB_Mode*")
42-
return lib.GxB_Global_Option_get(lib.GxB_MODE, vararg(mode)) != lib.GrB_PANIC
44+
mode = ffi.new("int32_t*")
45+
return lib.GxB_Global_Option_get_INT32(lib.GxB_MODE, mode) != lib.GrB_PANIC
4346

4447

4548
def supports_complex():
@@ -246,8 +249,8 @@ def __init__(self):
246249
@property
247250
def is_enabled(self):
248251
"""Is burble enabled?"""
249-
val_ptr = ffi.new("bool*")
250-
info = lib.GxB_Global_Option_get(lib.GxB_BURBLE, vararg(val_ptr))
252+
val_ptr = ffi.new("int32_t*")
253+
info = lib.GxB_Global_Option_get_INT32(lib.GxB_BURBLE, val_ptr)
251254
if info != lib.GrB_SUCCESS:
252255
raise _error_code_lookup[info](
253256
"Failed to get burble status (has GraphBLAS been initialized?"
@@ -256,15 +259,15 @@ def is_enabled(self):
256259

257260
def enable(self):
258261
"""Enable diagnostic output"""
259-
info = lib.GxB_Global_Option_set(lib.GxB_BURBLE, vararg(ffi.cast("int", 1)))
262+
info = lib.GxB_Global_Option_set_INT32(lib.GxB_BURBLE, ffi.cast("int32_t", 1))
260263
if info != lib.GrB_SUCCESS:
261264
raise _error_code_lookup[info](
262265
"Failed to enable burble (has GraphBLAS been initialized?"
263266
)
264267

265268
def disable(self):
266269
"""Disable diagnostic output"""
267-
info = lib.GxB_Global_Option_set(lib.GxB_BURBLE, vararg(ffi.cast("int", 0)))
270+
info = lib.GxB_Global_Option_set_INT32(lib.GxB_BURBLE, ffi.cast("int32_t", 0))
268271
if info != lib.GrB_SUCCESS:
269272
raise _error_code_lookup[info](
270273
"Failed to disable burble (has GraphBLAS been initialized?"

suitesparse_graphblas/io/serialize.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import numpy as np
22

3-
from suitesparse_graphblas import check_status, ffi, lib, vararg
3+
from suitesparse_graphblas import check_status, ffi, lib
44
from suitesparse_graphblas.utils import claim_buffer
55

66

@@ -22,7 +22,7 @@ def get_serialize_desc(compression=lib.GxB_COMPRESSION_DEFAULT, level=None, nthr
2222
if nthreads is not None:
2323
check_status(
2424
desc,
25-
lib.GxB_Desc_set(desc[0], lib.GxB_NTHREADS, vararg(ffi.cast("int", nthreads))),
25+
lib.GxB_Desc_set_INT32(desc[0], lib.GxB_NTHREADS, ffi.cast("int32_t", nthreads)),
2626
)
2727
if compression is not None:
2828
if level is not None and compression in {
@@ -32,7 +32,7 @@ def get_serialize_desc(compression=lib.GxB_COMPRESSION_DEFAULT, level=None, nthr
3232
compression += level
3333
check_status(
3434
desc,
35-
lib.GxB_Desc_set(desc[0], lib.GxB_COMPRESSION, vararg(ffi.cast("int", compression))),
35+
lib.GxB_Desc_set_INT32(desc[0], lib.GxB_COMPRESSION, ffi.cast("int32_t", compression)),
3636
)
3737
return desc
3838

suitesparse_graphblas/matrix.py

+12-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from suitesparse_graphblas import check_status, ffi, lib, vararg
1+
from suitesparse_graphblas import check_status, ffi, lib
22

33
from .io.serialize import deserialize_matrix as deserialize # noqa
44
from .io.serialize import serialize_matrix as serialize # noqa
@@ -108,8 +108,8 @@ def format(A):
108108
True
109109
110110
"""
111-
format = ffi.new("GxB_Format_Value*")
112-
check_status(A, lib.GxB_Matrix_Option_get(A[0], lib.GxB_FORMAT, vararg(format)))
111+
format = ffi.new("int32_t*")
112+
check_status(A, lib.GxB_Matrix_Option_get_INT32(A[0], lib.GxB_FORMAT, format))
113113
return format[0]
114114

115115

@@ -122,24 +122,22 @@ def set_format(A, format):
122122
True
123123
124124
"""
125-
format_val = ffi.cast("GxB_Format_Value", format)
126-
check_status(A, lib.GxB_Matrix_Option_set(A[0], lib.GxB_FORMAT, vararg(format_val)))
125+
format_val = ffi.cast("int32_t", format)
126+
check_status(A, lib.GxB_Matrix_Option_set_INT32(A[0], lib.GxB_FORMAT, format_val))
127127

128128

129129
def sparsity_status(A):
130130
"""Get the sparsity status of the matrix."""
131131
sparsity_status = ffi.new("int32_t*")
132-
check_status(
133-
A, lib.GxB_Matrix_Option_get(A[0], lib.GxB_SPARSITY_STATUS, vararg(sparsity_status))
134-
)
132+
check_status(A, lib.GxB_Matrix_Option_get_INT32(A[0], lib.GxB_SPARSITY_STATUS, sparsity_status))
135133
return sparsity_status[0]
136134

137135

138136
def sparsity_control(A):
139137
"""Get the sparsity control of the matrix."""
140138
sparsity_control = ffi.new("int32_t*")
141139
check_status(
142-
A, lib.GxB_Matrix_Option_get(A[0], lib.GxB_SPARSITY_CONTROL, vararg(sparsity_control))
140+
A, lib.GxB_Matrix_Option_get_INT32(A[0], lib.GxB_SPARSITY_CONTROL, sparsity_control)
143141
)
144142
return sparsity_control[0]
145143

@@ -148,34 +146,34 @@ def set_sparsity_control(A, sparsity):
148146
"""Set the sparsity control of the matrix."""
149147
sparsity_control = ffi.cast("int32_t", sparsity)
150148
check_status(
151-
A, lib.GxB_Matrix_Option_set(A[0], lib.GxB_SPARSITY_CONTROL, vararg(sparsity_control))
149+
A, lib.GxB_Matrix_Option_set_INT32(A[0], lib.GxB_SPARSITY_CONTROL, sparsity_control)
152150
)
153151

154152

155153
def hyper_switch(A):
156154
"""Get the hyper switch of the matrix."""
157155
hyper_switch = ffi.new("double*")
158-
check_status(A, lib.GxB_Matrix_Option_get(A[0], lib.GxB_HYPER_SWITCH, vararg(hyper_switch)))
156+
check_status(A, lib.GxB_Matrix_Option_get_FP64(A[0], lib.GxB_HYPER_SWITCH, hyper_switch))
159157
return hyper_switch[0]
160158

161159

162160
def set_hyper_switch(A, hyper_switch):
163161
"""Set the hyper switch of the matrix."""
164162
hyper_switch = ffi.cast("double", hyper_switch)
165-
check_status(A, lib.GxB_Matrix_Option_set(A[0], lib.GxB_HYPER_SWITCH, vararg(hyper_switch)))
163+
check_status(A, lib.GxB_Matrix_Option_set_FP64(A[0], lib.GxB_HYPER_SWITCH, hyper_switch))
166164

167165

168166
def bitmap_switch(A):
169167
"""Get the bitmap switch of the matrix."""
170168
bitmap_switch = ffi.new("double*")
171-
check_status(A, lib.GxB_Matrix_Option_get(A[0], lib.GxB_BITMAP_SWITCH, vararg(bitmap_switch)))
169+
check_status(A, lib.GxB_Matrix_Option_get_FP64(A[0], lib.GxB_BITMAP_SWITCH, bitmap_switch))
172170
return bitmap_switch[0]
173171

174172

175173
def set_bitmap_switch(A, bitmap_switch):
176174
"""Set the bitmap switch of the matrix."""
177175
bitmap_switch = ffi.cast("double", bitmap_switch)
178-
check_status(A, lib.GxB_Matrix_Option_set(A[0], lib.GxB_BITMAP_SWITCH, vararg(bitmap_switch)))
176+
check_status(A, lib.GxB_Matrix_Option_set_FP64(A[0], lib.GxB_BITMAP_SWITCH, bitmap_switch))
179177

180178

181179
def set_bool(A, value, i, j):

suitesparse_graphblas/suitesparse_graphblas.h

+22
Original file line numberDiff line numberDiff line change
@@ -3099,13 +3099,27 @@ extern GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp bina
30993099

31003100
/* core */
31013101
extern GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...);
3102+
extern GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, char **value);
3103+
extern GrB_Info GxB_Global_Option_get_FP64(GxB_Option_Field field, double *value);
3104+
extern GrB_Info GxB_Global_Option_get_FUNCTION(GxB_Option_Field field, void **value);
3105+
extern GrB_Info GxB_Global_Option_get_INT32(GxB_Option_Field field, int32_t *value);
3106+
extern GrB_Info GxB_Global_Option_get_INT64(GxB_Option_Field field, int64_t *value);
31023107
extern GrB_Info GxB_Global_Option_set(GxB_Option_Field field, ...);
3108+
extern GrB_Info GxB_Global_Option_set_FP64(GxB_Option_Field field, double value);
3109+
extern GrB_Info GxB_Global_Option_set_FP64_ARRAY(GxB_Option_Field field, double *value);
3110+
extern GrB_Info GxB_Global_Option_set_FUNCTION(GxB_Option_Field field, void *value);
3111+
extern GrB_Info GxB_Global_Option_set_INT32(GxB_Option_Field field, int32_t value);
3112+
extern GrB_Info GxB_Global_Option_set_INT64_ARRAY(GxB_Option_Field field, int64_t *value);
31033113
extern GrB_Info GxB_deserialize_type_name(char *type_name, const void *blob, GrB_Index blob_size);
31043114
extern GrB_Info GxB_init(GrB_Mode mode, void *(*user_malloc_function)(size_t), void *(*user_calloc_function)(size_t, size_t), void *(*user_realloc_function)(void *, size_t), void (*user_free_function)(void *));
31053115

31063116
/* descriptor */
31073117
extern GrB_Info GxB_Desc_get(GrB_Descriptor desc, GrB_Desc_Field field, ...);
3118+
extern GrB_Info GxB_Desc_get_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double *value);
3119+
extern GrB_Info GxB_Desc_get_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t *value);
31083120
extern GrB_Info GxB_Desc_set(GrB_Descriptor desc, GrB_Desc_Field field, ...);
3121+
extern GrB_Info GxB_Desc_set_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double value);
3122+
extern GrB_Info GxB_Desc_set_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t value);
31093123
extern GrB_Info GxB_Descriptor_fprint(GrB_Descriptor descriptor, const char *name, GxB_Print_Level pr, FILE *f);
31103124
extern GrB_Info GxB_Descriptor_get(GrB_Desc_Value *val, GrB_Descriptor desc, GrB_Desc_Field field);
31113125

@@ -3162,7 +3176,11 @@ extern void GxB_Matrix_Iterator_getIndex(GxB_Iterator iterator, GrB_Index *row,
31623176
extern GrB_Info GxB_Col_subassign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, GrB_Index j, const GrB_Descriptor desc);
31633177
extern GrB_Info GxB_Matrix_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GrB_Descriptor desc);
31643178
extern GrB_Info GxB_Matrix_Option_get(GrB_Matrix A, GxB_Option_Field field, ...);
3179+
extern GrB_Info GxB_Matrix_Option_get_FP64(GrB_Matrix A, GxB_Option_Field field, double *value);
3180+
extern GrB_Info GxB_Matrix_Option_get_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t *value);
31653181
extern GrB_Info GxB_Matrix_Option_set(GrB_Matrix A, GxB_Option_Field field, ...);
3182+
extern GrB_Info GxB_Matrix_Option_set_FP64(GrB_Matrix A, GxB_Option_Field field, double value);
3183+
extern GrB_Info GxB_Matrix_Option_set_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t value);
31663184
extern GrB_Info GxB_Matrix_apply_BinaryOp1st(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Matrix A, const GrB_Descriptor desc);
31673185
extern GrB_Info GxB_Matrix_apply_BinaryOp1st_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Matrix A, const GrB_Descriptor desc);
31683186
extern GrB_Info GxB_Matrix_apply_BinaryOp1st_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Matrix A, const GrB_Descriptor desc);
@@ -3356,7 +3374,11 @@ extern GrB_Info GxB_UnaryOp_ztype_name(char *type_name, const GrB_UnaryOp unaryo
33563374
/* vector */
33573375
extern GrB_Info GxB_Vector_Iterator_attach(GxB_Iterator iterator, GrB_Vector v, GrB_Descriptor desc);
33583376
extern GrB_Info GxB_Vector_Option_get(GrB_Vector A, GxB_Option_Field field, ...);
3377+
extern GrB_Info GxB_Vector_Option_get_FP64(GrB_Vector v, GxB_Option_Field field, double *value);
3378+
extern GrB_Info GxB_Vector_Option_get_INT32(GrB_Vector v, GxB_Option_Field field, int32_t *value);
33593379
extern GrB_Info GxB_Vector_Option_set(GrB_Vector A, GxB_Option_Field field, ...);
3380+
extern GrB_Info GxB_Vector_Option_set_FP64(GrB_Vector v, GxB_Option_Field field, double value);
3381+
extern GrB_Info GxB_Vector_Option_set_INT32(GrB_Vector v, GxB_Option_Field field, int32_t value);
33603382
extern GrB_Info GxB_Vector_apply_BinaryOp1st(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Vector u, const GrB_Descriptor desc);
33613383
extern GrB_Info GxB_Vector_apply_BinaryOp1st_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Vector u, const GrB_Descriptor desc);
33623384
extern GrB_Info GxB_Vector_apply_BinaryOp1st_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Vector u, const GrB_Descriptor desc);

suitesparse_graphblas/suitesparse_graphblas_arm64.h

+22
Original file line numberDiff line numberDiff line change
@@ -3099,13 +3099,27 @@ extern GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp bina
30993099

31003100
/* core */
31013101
extern GrB_Info GxB_Global_Option_get(GxB_Option_Field field, char *);
3102+
extern GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, char **value);
3103+
extern GrB_Info GxB_Global_Option_get_FP64(GxB_Option_Field field, double *value);
3104+
extern GrB_Info GxB_Global_Option_get_FUNCTION(GxB_Option_Field field, void **value);
3105+
extern GrB_Info GxB_Global_Option_get_INT32(GxB_Option_Field field, int32_t *value);
3106+
extern GrB_Info GxB_Global_Option_get_INT64(GxB_Option_Field field, int64_t *value);
31023107
extern GrB_Info GxB_Global_Option_set(GxB_Option_Field field, char *);
3108+
extern GrB_Info GxB_Global_Option_set_FP64(GxB_Option_Field field, double value);
3109+
extern GrB_Info GxB_Global_Option_set_FP64_ARRAY(GxB_Option_Field field, double *value);
3110+
extern GrB_Info GxB_Global_Option_set_FUNCTION(GxB_Option_Field field, void *value);
3111+
extern GrB_Info GxB_Global_Option_set_INT32(GxB_Option_Field field, int32_t value);
3112+
extern GrB_Info GxB_Global_Option_set_INT64_ARRAY(GxB_Option_Field field, int64_t *value);
31033113
extern GrB_Info GxB_deserialize_type_name(char *type_name, const void *blob, GrB_Index blob_size);
31043114
extern GrB_Info GxB_init(GrB_Mode mode, void *(*user_malloc_function)(size_t), void *(*user_calloc_function)(size_t, size_t), void *(*user_realloc_function)(void *, size_t), void (*user_free_function)(void *));
31053115

31063116
/* descriptor */
31073117
extern GrB_Info GxB_Desc_get(GrB_Descriptor desc, GrB_Desc_Field field, char *);
3118+
extern GrB_Info GxB_Desc_get_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double *value);
3119+
extern GrB_Info GxB_Desc_get_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t *value);
31083120
extern GrB_Info GxB_Desc_set(GrB_Descriptor desc, GrB_Desc_Field field, char *);
3121+
extern GrB_Info GxB_Desc_set_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double value);
3122+
extern GrB_Info GxB_Desc_set_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t value);
31093123
extern GrB_Info GxB_Descriptor_fprint(GrB_Descriptor descriptor, const char *name, GxB_Print_Level pr, FILE *f);
31103124
extern GrB_Info GxB_Descriptor_get(GrB_Desc_Value *val, GrB_Descriptor desc, GrB_Desc_Field field);
31113125

@@ -3162,7 +3176,11 @@ extern void GxB_Matrix_Iterator_getIndex(GxB_Iterator iterator, GrB_Index *row,
31623176
extern GrB_Info GxB_Col_subassign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, GrB_Index j, const GrB_Descriptor desc);
31633177
extern GrB_Info GxB_Matrix_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GrB_Descriptor desc);
31643178
extern GrB_Info GxB_Matrix_Option_get(GrB_Matrix A, GxB_Option_Field field, char *);
3179+
extern GrB_Info GxB_Matrix_Option_get_FP64(GrB_Matrix A, GxB_Option_Field field, double *value);
3180+
extern GrB_Info GxB_Matrix_Option_get_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t *value);
31653181
extern GrB_Info GxB_Matrix_Option_set(GrB_Matrix A, GxB_Option_Field field, char *);
3182+
extern GrB_Info GxB_Matrix_Option_set_FP64(GrB_Matrix A, GxB_Option_Field field, double value);
3183+
extern GrB_Info GxB_Matrix_Option_set_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t value);
31663184
extern GrB_Info GxB_Matrix_apply_BinaryOp1st(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Matrix A, const GrB_Descriptor desc);
31673185
extern GrB_Info GxB_Matrix_apply_BinaryOp1st_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Matrix A, const GrB_Descriptor desc);
31683186
extern GrB_Info GxB_Matrix_apply_BinaryOp1st_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Matrix A, const GrB_Descriptor desc);
@@ -3356,7 +3374,11 @@ extern GrB_Info GxB_UnaryOp_ztype_name(char *type_name, const GrB_UnaryOp unaryo
33563374
/* vector */
33573375
extern GrB_Info GxB_Vector_Iterator_attach(GxB_Iterator iterator, GrB_Vector v, GrB_Descriptor desc);
33583376
extern GrB_Info GxB_Vector_Option_get(GrB_Vector A, GxB_Option_Field field, char *);
3377+
extern GrB_Info GxB_Vector_Option_get_FP64(GrB_Vector v, GxB_Option_Field field, double *value);
3378+
extern GrB_Info GxB_Vector_Option_get_INT32(GrB_Vector v, GxB_Option_Field field, int32_t *value);
33593379
extern GrB_Info GxB_Vector_Option_set(GrB_Vector A, GxB_Option_Field field, char *);
3380+
extern GrB_Info GxB_Vector_Option_set_FP64(GrB_Vector v, GxB_Option_Field field, double value);
3381+
extern GrB_Info GxB_Vector_Option_set_INT32(GrB_Vector v, GxB_Option_Field field, int32_t value);
33603382
extern GrB_Info GxB_Vector_apply_BinaryOp1st(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Vector u, const GrB_Descriptor desc);
33613383
extern GrB_Info GxB_Vector_apply_BinaryOp1st_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Vector u, const GrB_Descriptor desc);
33623384
extern GrB_Info GxB_Vector_apply_BinaryOp1st_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Vector u, const GrB_Descriptor desc);

0 commit comments

Comments
 (0)