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.
  (:issue:`211`, :issue:`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 (:issue:`247`)


Enhancements
~~~~~~~~~~~~
- Remove ``numpydoc`` package from Bottleneck source distribution
- :func:`bottleneck.slow.reduce.nansum` and
  :func:`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 (:issue:`213`)
- Test suite now uses ``pytest`` as ``nose`` is deprecated (:issue:`222`)
- ``python setup.py build_ext --inplace`` is now incremental (:issue:`224`)
- ``python setup.py clean`` now cleans all artifacts (:issue:`226`)
- Compiler feature support now identified by testing rather than
  hardcoding (:issue:`227`)
- The ``BN_OPT_3`` macro allows selective use of ``-O3`` at the function
  level (:issue:`223`)
- Contributors are now automatically cited in the release notes (:issue:`244`)

Performance
~~~~~~~~~~~
- Speed up :func:`bottleneck.reduce.anynan` and
  :func:`bottleneck.reduce.allnan` by 2x via ``BN_OPT_3`` (:issue:`223`)
- All functions covered by ``asv`` benchmarks
- :func:`bottleneck.nonreduce.replace` speedup of 4x via more explicit
  typing (:issue:`239`)
- :func:`bottleneck.reduce.median` up to 2x faster for Fortran-ordered
  arrays (:issue:`248`)


Bug Fixes
~~~~~~~~~

- Documentation fails to build on Python 3 (:issue:`170`)
- :func:`bottleneck.benchmark.bench` crashes on python 3.6.3,
  numpy 1.13.3 (:issue:`175`)
- :func:`bottleneck.nonreduce_axis.push` raises when :code:`n=None` is
  explicitly passed (:issue:`178`)
- :func:`bottleneck.reduce.nansum` wrong output when
  :code:`a = np.ones((2, 2))[..., np.newaxis]` same issue of other reduce
  functions (:issue:`183`)
- Silenced FutureWarning from NumPy in the slow version of move
  functions (:issue:`194`)
- Installing bottleneck onto a system that does not already have Numpy
  (:issue:`195`)
- Memory leaked when input was not a NumPy array (:issue:`201`)
- Tautological comparison in :func:`bottleneck.move.move_rank` removed
  (:issue:`207`, :issue:`212`)

Cleanup
~~~~~~~

- The ``ez_setup.py`` module is no longer packaged (:issue:`211`)
- Building documentation is now self-contained in ``make doc`` (:issue:`214`)
- Codebase now ``flake8`` compliant and run on every commit
- Codebase now uses ``black`` for autoformatting (:issue:`253`)

Contributors
~~~~~~~~~~~~

.. contributors:: v1.2.1..v1.3.0
