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`](https://github.com/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)