This is the release note of v5.0.0b2. See [here](https://github.com/cupy/cupy/milestone/28?closed=1) for the complete list of solved issues and merged PRs.
Highlights
- CuPy now supports [DLPack](https://github.com/dmlc/dlpack) to improve interoperability between frameworks. You can convert between `cupy.ndarray` and DLPack tensor using `array.toDlpack()` and `cupy.fromDlpack(tensor)`. See [the documentation](https://docs-cupy.chainer.org/en/latest/reference/generated/cupy.ndarray.html#cupy.ndarray.toDlpack) for details.
- CuPy ndarray now implements [`__array_ufunc__` protocol](https://docs.scipy.org/doc/numpy-1.14.5/neps/ufunc-overrides.html) to improve interoperability with NumPy. It makes NumPy ufuncs applicable to CuPy ndarrays directly (for example, `numpy.exp(cupy.ones(3))` will call `cupy.exp` to compute the exponential, and return CuPy ndarray).
- CuPy now supports CUDA 9.2 and NumPy 1.14.
- More NumPy/SciPy compatible methods have been implemented: `cupy.linalg.matrix_power`, `cupy.random.laplace`, `cupy.corrcoef`, `cupy.cov`, `cupy.i0`, `cupy.sinc`, `cupyx.scipy.special.*` and more.
- `cupy.einsum` has been rewritten to use cuBLAS. This significantly reduces the memory usage and also improves the performance.
- Allocation strategy of pinned memory has been improved to reduce host memory usage.
- Fixed bugs in multiple functions with arrays with complex dtypes.
New Features
- Support DLPack (1082)
- Implement `cupy.corrcoef` and `cupy.cov` (1110, thanks tsurumeso!)
- Allow more natural fusion notation (1167)
- Implement special functions (1233)
- Implement `__array_ufunc__` (1247, thanks martindurant!)
- Improve performance of batch normalization (1260)
- Add complex dtype to sparse matrix (1277, thanks chengts95!)
- Add cuDNN API for tensor operations and reduction (1319, thanks kashif!)
- Add distribution `laplace` (1321)
- Implement `cupy.linalg.matrix_power` (1374, thanks ericmjl!)
Enhancements
- Reduce Python function call in `ElementwiseKernel` (725)
- Check cuDNN convolution algorithm (890)
- Remove memory copy in `diag` function (1129)
- Fix `linalg.matrix_rank` casting for Windows (1217)
- Use cuBLAS in `cupy.einsum` (1218)
- Add `divmod` function to `cupy` namespace (1286)
- Improve ndarray initializing performance (1341)
- Fix type of return value of fused function (1349)
- Support composition of fused functions (1350)
- Support weak reference to CuPy array (1355)
- Remove `cupy_stdint.h` (1361)
- Round-up pooled memory allocation size with clp2 (1372)
- Reduce GPU memory usage in (de)convotion (1381)
- Support `'f'` and `'c'` in the `order` option of ndarray (1385)
Bug Fixes
- Fix `OutOfMemoryError` raised even when there are sufficient large freeable chunks (1256, thanks hyabe!)
- Fix `astype` for complex dtypes (1279)
- Fix `real` and `imag` for zero-dim arrays (1280)
- Support rounding for complex types (1282)
- Support `expm1`, `log1p`, `log2` for complex type (1283)
- Fix unary functions in misc for complex (1284)
- Fix binary functions in misc to support complex types (1285)
- Fix view of zerodim ndarray (1287)
- Catch C++ exceptions from Thrust (1289)
- Fix `real`, `imag` of non-contiguous complex arrays (1303)
- Fix `rint` syntax error (1311)
- Skip `einsum` test for NumPy versions with broken einsum (1334)
- Fix type of reduction (1354)
- Fix to accept longer order names (1393)
Documentation
- Add NumPy 1.14 to supported versions (1139)
- Update README to encourage use of wheels (1208)
- Improve sparse docs to show conversion from/to SciPy (1213)
- Force displaying known methods which are mis-recognized as attributes by Sphinx (1250)
- Expand reference on differences in zero-dimensional arrays (1254)
- Fix typo in sparse matrix docs (1307)
- Split `LICENSE` file (1325)
- Fix typo in profiler docs (1327)
- Reorganize license file (1330)
- Fix typos in `zeros` and `zeros_like` (1357)
- Update requirements for v5.0.0b2 / v4.2 release (1369)
Installation
- Use define macro in `setup.py` (1121)
- Support bundling dependent DLLs for Windows wheel support (1253)
- Remove deprecated `imp.load_source` in `setup.py` (1329, thanks vilyaair!)
- Add license file to wheel (1333)
Tests
- Sparse complex ufunc (1312)
- Add scipy_name to testing helper functions (1339)