Deprecations:
- Changed e.g. `reduce_rows` to `reduce_rowwise` and deprecate the former
Updates:
- Added `x.ss.selectk(how, k)` methods for vectors and matrices
- `how` can be `"random"`, `"first"`, `"last"`. Vector also supports `"largest"` and `"smallest"`
- Allow operators to be given as strings, such as `A.mxm(B, 'min.+[float]')`
- Also added from_string functions such as `gb.binary.from_string('+')`
- `x | y`, `x & y`, `x ^ y`, and `~x` infix is only value-y for bool dtypes
- `x | y` and `x ^ y` uses ewise_add, `x & y` uses ewise_mult
- Add `op.commutes_to` and `op.is_commutative` to binaryops, monoids, and semirings
- Support slices from SuiteSparse (can now perform huge slices on huge objects!)
- Recorder now logs exceptional C calls and their errors
- Improved `get_semiring(monoid, binaryop)` to better handle ops from numpy namespaces.
- Make `dtype=` an optional positional argument (like NumPy does), not keyword-only
- Map numpy ops in e.g. gb.binary.numpy to GraphBLAS ops (by default)
Fixes:
- Fixed `truediv` on complex dtypes
- Fixed displaying of `nan` in reprs
- Fixed repr of large iso-valued objects
- Fixed types of `land`, `lor`, and `lxor` binary operators (not bool only)