# Bottleneck 1.3.0

Release date: 2019-11-12

## Project Updates

- Bottleneck has a new maintainer, Christopher Whelan (`@qwhelan` on GitHub).

- Documentation now hosted at https://bottleneck.readthedocs.io

- 1.3.x will be the last release to support Python 2.7

- Bottleneck now supports and is tested against Python 3.7 and 3.8. (#211, #268)

- The `LICENSE` file has been restructured to only include the license for the Bottleneck project to aid license audit tools. There has been no change to the licensing of Bottleneck.

  - Licenses for other projects incorporated by Bottleneck are now reproduced in full in separate files in the `LICENSES/` directory (eg, `LICENSES/NUMPY_LICENSE`)

  - All licenses have been updated. Notably, setuptools is now MIT licensed and no longer under the ambiguous dual PSF/Zope license.

- Bottleneck now uses PEP 518 for specifying build dependencies, with per Python version specifications (#247)

## Enhancements

- Remove `numpydoc` package from Bottleneck source distribution

- `bottleneck.slow.reduce.nansum()` and `bottleneck.slow.reduce.ss()` now longer coerce output to have the same dtype as input

- Test (tox, travis, appveyor) against latest `numpy` (in conda)

- Performance benchmarking also available via `asv`

- `versioneer` now used for versioning (#213)

- Test suite now uses `pytest` as `nose` is deprecated (#222)

- `python setup.py build_ext --inplace` is now incremental (#224)

- `python setup.py clean` now cleans all artifacts (#226)

- Compiler feature support now identified by testing rather than hardcoding (#227)

- The `BN_OPT_3` macro allows selective use of `-O3` at the function level (#223)

- Contributors are now automatically cited in the release notes (#244)

## Performance

- Speed up `bottleneck.reduce.anynan()` and `bottleneck.reduce.allnan()` by 2x via `BN_OPT_3` (#223)

- All functions covered by `asv` benchmarks

- `bottleneck.nonreduce.replace()` speedup of 4x via more explicit typing (#239)

- `bottleneck.reduce.median()` up to 2x faster for Fortran-ordered arrays (#248)

## Bug Fixes

- Documentation fails to build on Python 3 (#170)

- `bottleneck.benchmark.bench()` crashes on python 3.6.3, numpy 1.13.3 (#175)

- `bottleneck.nonreduce_axis.push()` raises when `n=None` is explicitly passed (#178)

- `bottleneck.reduce.nansum()` wrong output when `a = np.ones((2, 2))[..., np.newaxis]` same issue of other reduce functions (#183)

- Silenced FutureWarning from NumPy in the slow version of move functions (#194)

- Installing bottleneck onto a system that does not already have Numpy (#195)

- Memory leaked when input was not a NumPy array (#201)

- Tautological comparison in `bottleneck.move.move_rank()` removed (#207, #212)

## Cleanup

- The `ez_setup.py` module is no longer packaged (#211)

- Building documentation is now self-contained in `make doc` (#214)

- Codebase now `flake8` compliant and run on every commit

- Codebase now uses `black` for autoformatting (#253)

## Contributors