Deprecations
- `require_monoid=` keyword in `ewise_add` has been deprecated (236)
- New behavior is like `require_monoid=False` and will no longer raise
Improvements
- Add `IndexUnaryOp` and `gb.indexunary` namespace (229)
- Apply works with both `IndexUnaryOp` and `SelectOp`
- Add UDF support for `IndexUnaryOp` and `SelectOp` (233)
- Add `x.get` method to Scalar, Vector, and Matrix objects, with optional default value (241)
- These return a Python scalar of the element at the location, or default value if element is missing
- Make aggregators callable (242)
- `agg.sum(A)` same as `A.reduce_scalar(agg.sum)`
- `agg.max(A, rowwise=True)` same as `A.reduce_rowwise(agg.max)`
- Add `mask.new()`, which can also merge two masks efficiently (240)
- The result is True wherever the mask(s) would have been applied, and empty otherwise
- `complement=True` returns the complement
- Allow `A << 1` to create dense (iso-valued) matrices (this used to raise) (243)
- Add "index" and "value" strings to Vector repr (226)
- Add `cbrt` from SuiteSparse:GraphBLAS 7.1.0 to compute principal cube root (244)
- For example, `cbrt(-8) == -2`, and the result is a float
- Also, add numpy ufuncs `cbrt`, `float_power`, and `positive` to the `numpy` namespaces (237)
- `op.from_string` now includes aggregators (last priority) (235)
- e.g., `op.from_string("count")` now works
- Allow record dtypes to be created via dicts, such as `{'x': int, 'y': float}` (227)
- Allow scalars with record dtypes to be created from dicts (228)
- e.g., `Scalar.from_value({'x': 1, 'y': True}, dtype=udt)`
- Added `scripts/` folder in repo to help developers/contributors perform useful tasks (231)