Skip to content

Releases: python-graphblas/python-graphblas

2024.2.0

07 Feb 15:58
8f36d46
Compare
Choose a tag to compare

Highlights

  • Add support for numba 0.59, which supports Python 3.12 (#536)
    • Python-graphblas and its dependencies now fully support Python 3.12

Expired deprecations

  • Remove deprecated Matrix.from_values, Vector.from_values, matrix.to_values, and vector_to_values (#529)
    • Use Matrix.from_coo, Vector.from_coo, matrix.to_coo, and vector.to_coo instead
  • Remove deprecated gb.io.from_numpy and gb.io.to_numpy (#528)
    • Use Matrix.from_dense, Vector.from_dense, matrix.to_dense, and vector.to_dense instead
  • Remove deprecated gb.core.agg (#527)
    • Use gb.core.operator.agg instead

Maintenance

2023.12.0

13 Dec 19:31
e673d60
Compare
Choose a tag to compare

Highlights

  • Support semiring(A @ B @ C) that applies semiring to both matmuls (#501)
    • Also, do the same for ewise infix such as monoid(A & B & C)
    • but don't allow mixing ewise-add and ewise-multiply such as monoid(A | B & C)

Enhancements

  • Support Matrix power to the 0th power, A.power(0) (#518)
    • This results in a dense diagonal Matrix where the diagonal value is gotten from the identity of the semiring's binary operator (if it has an identity)
  • Add gb.MAX_SIZE, which is GrB_INDEX_MAX + 1 (#519)
    • This can be more convenient to use e.g. Matrix(int, MAX_SIZE, MAX_SIZE)
  • Better handle dtypes (especially UDTs) in ewise_union (#517)

Bug fixes

  • Fix the default return type of some aggregators such as agg.count (#524)
  • Fix test status badge in README (#526)

Maintenance

2023.10.0

18 Oct 17:22
228faa1
Compare
Choose a tag to compare

Highlights

  • First release to officially support SuiteSparse:GraphBLAS 8 (#456, #488, #504, #511, #512)
  • Newly affiliated with NumFOCUS and pyOpenSci (#482, #510)
  • We have a new logo, check it out! (#506)

Expired deprecations

  • Removed gb.io.draw; use gb.viz.draw instead (#485)
  • Removed A.ss.scan_rowwise, A.ss.selectk_rowwise, A.ss.compactify_rowwise, and A.ss.*_columnwise variants (#486)
    • Use e.g. A.ss.scan(order="row") instead

Enhancements

  • Support SuiteSparse:GraphBLAS 8 (#456)
    • Document and improve using the JIT for user-defined operators defined in C (#512)
    • Document gb.ss.config options (#504)
    • Document gb.ss.context (#488)
    • Test against python-suitesparse-graphblas 8.0.2.1, 8.2.0.1, 8.2.1.0 (#511)
  • Add matrix.power(k) to compute e.g. A @ A @ A @ ... using repeated squaring with arbitrary semiring (#483)
  • Add matrix.setdiag(x, k=0) to set a diagonal of a matrix; supports mask and accum (#493)
  • Add gb.ss.burble to enable SuiteSparse:GraphBLAS diagnostics; may be used as a context (#514)
  • Add CSS to better stylize matrices in online docs (#502)
  • Add .thunk_type attribute to SelectOp and IndexUnaryOp (#512)
  • Add badge for pyOpenSci affiliation; we were peer reviewed! (#482)
  • Add badge for NumFOCUS affiliation; we were added as an affiliated project! (#510)
  • Created logo and color palette for python-graphblas! Notebook added that creates it (#506)

Bug fixes

  • Allow scalar.__index__ for integral dtypes only (#481)
  • Fix broken link to graphblas.org (#503)

Maintenance

  • Drop support for:
  • Add support for:
  • Drop usage of coveralls (use codecov instead) (#509)

New contributors

2023.7.0

07 Jul 21:04
f14cbac
Compare
Choose a tag to compare

Enhancements

  • Prepare for SuiteSparse:GraphBLAS 8 (#478, #456)
    • Version 8 added SuiteSparse-specific context objects and JIT
    • Support coming in the next release of python-graphblas
  • Documentation improvements:
    • Add section about relationships to other Python libraries to README (#442)
    • Fix images to show up in README on PyPI (#450)
    • Fix to use double backticks instead of single backticks in docs (#454)
    • Blacken docs (#455)
    • Add conversions to/from awkward-array to API reference docs (#457)
    • Fix command to create conda environment in contributor guide docs (#462)
    • Clarify meaning and usage of monoids in GraphBLAS (#469)
    • Update copyright to include "and contributors" (#470)
  • Add support for the following versions of dependencies (#464, #478, others):
    • fast_matrix_market 1.6, 1.7, and 1.8
    • awkward 2.2 and 2.3
    • numpy 1.25
    • scipy 1.11

Maintenance

  • Include conftest.py in MANIFEST.in so sdist can run tests propertly (#451)
  • Disable linting github action and rely on pre-commit.ci instead (#451)

2023.5.0

03 May 15:16
096c5ed
Compare
Choose a tag to compare

Highlights

  • Add support for Python 3.11 (#423)
  • Allow Numba to be optional (#423)
    • User-defined functions (UDFs) still require numba
  • Update how to install python-graphblas and dependencies via pip.
    • The recommended way to install python-graphblas via pip is now:
      • pip install python-graphblas[suitesparse] (also installs suitesparse-graphblas)
      • pip install python-graphblas[suitespars-udf] (also installs numba)
      • pip install python-graphblas[default] (also installs pandas and scipy)
      • pip install python-graphblas[all] (installs every optional dependency including for testing and viz)
    • pip install python-graphblas will keep its current behavior for about a year
      • This currently installs suitesparse-graphblas and numba, which may be dropped as required dependencies in 2024.3.0
      • Release 2024.3.0 or later will probably only depend on numpy, donfig and pyyaml

Enhancements

  • Document parameters to operator methods register_new and register_anonymous (#446)
  • Update userguide/operations.rst to be copy/paste-able (added outputs) (#440)
  • Specify which versions of the GraphBLAS C API we support, and add version policy to FAQ (#441)
  • Add link to FAQ to README (#439)
  • Add logo, matrix, and graph SVGs to README (#432)
  • Convert logo SVGs to use path instead of font for better consistency (#447)
  • Minfied all PNGs and SVGs in documentation (#423, #447)

Maintenance

  • Split io.py into multiple files (#448)
  • Begin using https://pre-commit-ci for running git pre-commit (#432)
  • .github/workflows/imports.yml now randomizes Python version and OS (#423)
  • Marked poorly covered code with comments # NOT COVERED, # BRANCH NOT COVERED, and # FLAKY COVERAGE
  • Dropped support for sparse 0.12
  • Support networkx 3.1, numpy 1.24, numba 0.57, pandas 2.0, fast_matrix_market 1.5

2023.3.0

31 Mar 19:56
abb1c78
Compare
Choose a tag to compare

Deprecations

  • Deprecate graphblas.core.agg namespace (#420)
    • Use graphblas.core.operator.agg namespace instead
    • Will be removed in version 2023.11.0 or later

Enhancements

  • Read Matrix Market files much faster with fast_matrix_market (new optional dependency) (#391)
  • Add Python version badges and description of optional dependencies in README.md (#404)
  • Split API references into separate pages for better navigation experience (#413)

Bug fixes

  • Improve import times (which regressed in version 2023.2.0) (#419)
  • Fix html repr of infix expressions (#418)
  • Fix broken link in documentation (fundamentals.rst) (#397)
  • Fix logo in our docs and pin documentation dependency versions (#400)
  • Fix documentation website rendering issue with right panel (#413)

Maintenance

PSA: suitesparse-graphblas v7.4.3.2 now has wheels for Windows, MacOS, and Linux 🎉

2023.2.0

27 Feb 12:13
7be68cf
Compare
Choose a tag to compare

Expired deprecations

  • Remove deprecated Matrix.new, Vector.new, and Scalar.new constructors (#380)
    • Use e.g Matrix(...) and Vector(...) instead
  • Remove deprecated require_monoid= argument in ewise_add (#377)
  • Remove deprecated io.from_scipy_sparse_matrix and io.to_scipy_sparse_matrix (#393)
    • Use e.g. io.from_scipy_sparse instead

Deprecations

  • Deprecate io.from_numpy and io.to_numpy (#382)
    • Use e.g. the new methods Vector.from_dense and Matrix.to_dense instead
    • Wil be removed in version 2023.10.0 or later

Enhancements

  • Add from_dense and to_dense methods to Vector and Matrix to convert between NumPy arrays (#382)
  • Add from_scalar to Vector and Matrix to create fully dense objects from a scalar (#382)
  • Improve inferring sub-array dtypes when constructing objects (#381)
  • .wait now returns self so it can be used with method-chaining (#379)
  • Add op.is_idempotent property to Monoids that means op(x, x) == x (#388)
  • Support complex dtypes on Windows (#394, #395)
  • io.to_pydata_sparse(v) now returns 1d sparse array for Vector inputs (#395)

2023.1.0

25 Jan 18:33
e34b6dd
Compare
Choose a tag to compare

Deprecations

  • Move operators specific to SuiteSparse:GraphBLAS to .ss namespaces (and deprecate previous locations)
    • Unary: erf, erfc, frexpe, frexpx, lgamma, tgamma, positioni, positioni1, positionj, positionj1
    • Binary: firsti, firsti1, firstj, firstj1, secondi, secondi1, secondj, secondj1
    • Semirings that use deprecated binary operators such as any_firsti
    • Aggregators: argmin, argmax, first, last, first_index, last_index
    • Use e.g. gb.unary.ss.erf or gb.agg.ss.argmin instead
    • Will be removed in version 2023.9.0 or later

Enhancements

  • Support computation on scalars (#358)
    • gb.unary.exp(1)
    • s.ewise_add(t)
  • Add conversions to and from pydata/sparse objects (#347)
  • Add Matrix.from_edgelist and matrix.to_edgelist to handle (row, col) pairs or (row, col, val) triples (#374)
  • Add Vector.from_pairs to handle (index, value) pairs (#374)
  • Add default of 1.0 for values in Vector.from_* and Matrix.from_* methods (#375)
  • Add contributor guidelines and dev-requirements.txt (#345)
  • Add more to FAQ documentation (#367)
  • Give informative errors for bad descriptor options (#353)

Maintenance

  • Use setuptools-git-versioning for versions; remove use of versioneer.py (#362)
  • Determine supported dependency versions (#368)
    • Add script scripts/check_versions.sh to easily see if there are new versions of dependencies (#366)
  • Move package metadata and build info from setup.py to pyproject.toml (#366)
  • Add config for PyLint (not enabled by default) (#354, #369)
  • Add ruff linter to git pre-commit (#354, #373)
  • Add black-jupyter to git pre-commit (#366)
  • New GitHub Action just for testing imports (#357)
  • New GitHub Action for linting (#354, #359)
  • Make readthedocs fail if there's a warning building the docs (#361)
  • Add --no-mapnumpy to pytest options and other CI improvements (#365)
  • Randomize versions of dependencies to test against (#368, #371)

2023.1.0a0

25 Jan 17:36
2078110
Compare
Choose a tag to compare
2023.1.0a0 Pre-release
Pre-release

This is a pre-release; see 2023.1.0

2022.12.0

28 Dec 16:20
75a9a71
Compare
Choose a tag to compare

Highlights

  • Add implementation-specific descriptors! (#343)
    • Descriptor customization is now fully exposed for all methods via **opts keyword arguments
    • Example: C(axb_method="gustavson", nthreads=8) << A @ B
    • Example: A.reduce_scalar().new(nthreads=4)
    • See graphblas/core/ss/descriptor.py:get_descriptor for SuiteSparse:GraphBLAS descriptors
    • Other GraphBLAS implementations can have their own custom descriptors

Expired deprecations

  • mask.mask has been removed; use mask.parent instead (#344)
  • matrix.ss.diag has been removed; use vector.diag or Matrix.ss.build_diag instead (#342)
  • vector.ss.diag has been removed; use matrix.diag or Vector.ss.build_diag instead (#342)

Enhancements

  • Update to require SuiteSparse:GraphBLAS 7.4.0 (#351)
  • Remove use of GxB variadic functions (and vararg function) for increased compatibility (#351)
    • For example, we now use typed versions such as GxB_Matrix_option_get_INT32
  • Remove pygraphblas conversions (such as matrix.to_pygraphblas) (#348)
    • These have not been tested or working for a long time due to pygraphblas being defunct and unsupported
  • Update environment.yml for developers
    • Add sparse and ipykernel (#346)
    • Add many optional dependencies not installed by default (#350)

Bug fixes

  • Handle deprecations from NumPy 1.24, such as using np.bool_ instead of np.bool8 (#349)
  • Support different architectures such as ARM by removing use of variadic functions (#351)

New contributors