Repository navigation
Releases
Releases · GraphBLAS/python-suitesparse-graphblas
10.5.2.0
Highlights
-
SuiteSparse:GraphBLAS 10.5.2, a bug-fix release (#160). Fixes include:
GrB_selectwith a built-inVALUE*operator of a different type than the input (e.g. anINT8matrix withGrB_VALUEEQ_FP64) kept the wrong entries or values.GxB_Matrix_reshapesilently corrupted indices when a new dimension exceeded 2^32.GxB_*_sortcould take quadratic time on already-sorted input.- The historical
GxB_*_importmethods checked the size ofAxincorrectly. - Not in GraphBLAS's ChangeLog: a memory arena created by
GxB_arena_initwithout areallocfunction had its memory freed by the default arena'sfree, which could crash.
See the GraphBLAS 10.5.2 release notes.
Changes to lib (#160)
- Removed:
GxB_NONBLOCKING_GPUandGxB_BLOCKING_GPU. GraphBLAS 10.5.2 made them historical aliases ofGrB_NONBLOCKINGandGrB_BLOCKING; use those instead. The development branch of python-graphblas references them and needs an update. The released python-graphblas 2025.2.0 requiressuitesparse-graphblas <10, so it is unaffected. - Added:
GxB_NARENAS_GPU.
Maintenance
cibuildwheel 4.3.3 and gh-action-pypi-publish 1.14.3, both with fixes for the eMudhra CA compromise, and zizmor 1.31.1. (#160)
10.5.1.1
Highlights
- Python 3.15: wheels for CPython 3.15 and free-threaded 3.15t (#157, #159)
- WebAssembly wheels for Pyodide (PEP 783
pyemscripten, Python 3.13 and 3.14), so
await micropip.install("suitesparse-graphblas")works in Pyodide 314 (Python 3.14) and
0.29.4+ (Python 3.13), and in JupyterLite. GraphBLAS runs single-threaded there. (#158) - Memory-safety fixes: NumPy ≥ 2.5 allocates array data with a different allocator, so
serialize_matrix/serialize_vectorandbinreadcould abort on free-threaded 3.15 or
underPYTHONMALLOC=debug. Arrays that share memory with GraphBLAS now carry a NumPy
memory handler (NEP 49) that matches the GraphBLAS allocator (including GraphBLAS ≥ 10.4
memory arenas) that frees them. (#157)
suitesparse_graphblas.utils (#157)
- New
give_buffer(...): a context manager that hands an array's data to a GraphBLAS
function that takes ownership (e.g.GxB_Matrix_pack_CSR,GxB_Vector_load). It copies
when GraphBLAS can't own the data, and commits only if GraphBLAS actually took it. - New
empty(...): allocates an array that GraphBLAS can always take ownership of. - New
can_unclaim_buffer(array, arena=None). claim_bufferandclaim_buffer_2dtake an optionalarenaargument.- Behavior change:
unclaim_buffernow raisesValueErrorwhen GraphBLAS can't safely
own the data: a view, a read-only array, an object dtype, or memory from another allocator
(e.g. NumPy-allocated arrays withmemory_manager="c", or a custom NumPy memory handler).
Usegive_buffer, or checkcan_unclaim_bufferfirst.
Other fixes
initialize()raises if GraphBLAS fails to initialize, instead of continuing silently. (#157)binreadallocates with GraphBLAS's allocator instead of libcmalloc, and reads iso
matrices correctly.binwriterestores the matrix if writing fails. (#157)
Platform and packaging changes
- macOS arm64 wheels now require macOS 15 (previously 14), because GitHub is retiring
its macOS 14 runners. (#159) - PyPy wheels now target PyPy 8.0 (
pypy311_pp80). PyPy 7.3 can't install them and will
build from the sdist. Windows PyPy wheels are no longer built. (#159) - Wheels no longer include build-only
.c/.hsources, so they are smaller. (#158) - Releases are now published with PyPI Trusted Publishing instead of an API token. (#157)
Maintenance
cibuildwheel 4.3. GitHub Actions are pinned to commit SHAs with least-privilege permissions,
and actionlint/zizmor/pysentry checks were added. pytest is stricter (warnings are errors),
and new memory tests run under PYTHONMALLOC=debug. suitesparse.sh now stops at the first
failure and uses the CMake option names GraphBLAS honors (GRAPHBLAS_COMPACT,
GRAPHBLAS_JITINIT). (#157, #158, #159)