==============================
PyWavelets 0.4.0 Release Notes
==============================

.. contents::

PyWavelets 0.4.0 is the culmination of 6 months of work.  In addition to
several new features, some changes and deprecations have been made to streamline
the API.

This release requires Python 2.6, 2.7 or 3.3-3.5 and NumPy 1.6.2 or greater.

Highlights of this release include:

- 1D and 2D inverse stationary wavelet transforms
- Substantially faster 2D and nD discrete wavelet transforms
- Complex number support
- nD versions of the multilevel DWT and IDWT


New features
============

1D and 2D inverse stationary wavelet transforms
-----------------------------------------------
1D (``iswt``) and 2D (``iswt2``) inverse stationary wavelet transforms were
added.  These currently only support even length inputs.


Faster 2D and nD wavelet transforms
-----------------------------------
The multidimensional DWT and IDWT code was refactored and is now an order of
magnitude faster than in previous releases.  The following functions benefit:
``dwt2``, ``idwt2``, ``dwtn``, ``idwtn``.


Complex floating point support
------------------------------
64 and 128-bit complex data types are now supported by all wavelet transforms.


nD implementation of the multilevel DWT and IDWT
------------------------------------------------
The existing 1D and 2D multilevel transforms were supplemented with an nD
implementation.


Wavelet transforms can be applied along a specific axis/axes
------------------------------------------------------------
All wavelet transform functions now support explicit specification of the axis
or axes upon which to perform the transform.


Example Datasets
----------------
Two additional 2D grayscale images were added (`camera`, `ascent`).  The
previously existing 1D ECG data (`ecg`) and the 2D aerial image (`aero`)
used in the demos can also now be imported via functions defined in
`pywt.data` (e.g. ``camera = pywt.data.camera()``)


Deprecated features
===================

A number of functions have been renamed, the old names are deprecated and will
be removed in a future release:

- ``intwave``, renamed to ``integrate_wavelet``
- ``centrfrq``, renamed to ``central_frequency``
- ``scal2frq``, renamed to ``scale2frequency``
- ``orthfilt``, renamed to ``orthogonal_filter_bank``

Integration of general signals (i.e. not wavelets) with ``integrate_wavelet``
is deprecated.

The ``MODES`` object and its attributes are deprecated.  The new name is
``Modes``, and the attribute names are expanded:

- ``zpd``, renamed to ``zero``
- ``cpd``, renamed to ``constant``
- ``sp1``, renamed to ``smooth``
- ``sym``, renamed to ``symmetric``
- ``ppd``, renamed to ``periodic``
- ``per``, renamed to ``periodization``

Backwards incompatible changes
==============================

``idwt`` no longer takes a ``correct_size`` parameter. As a consequence,
``idwt2`` inputs must match exactly in length. For multilevel transforms, where
arrays differing in size by one element may be produced, use the ``waverec``
functions from the ``multilevel`` module instead.

Bugs Fixed
==========

float32 inputs were not always respected. All transforms now return float32
outputs when called using float32 inputs.

Incorrect detail coefficients were returned by `downcoef` when `level > 1`.

Other changes
=============

Much of the API documentation is now autogenerated from the corresponding
function docstrings.  The numpydoc sphinx extension is now needed to build the
documentation.

Authors
=======

* Thomas Arildsen +
* François Boulogne
* Ralf Gommers
* Gregory R. Lee
* Michael Marino +
* Aaron O'Leary +
* Daniele Tricoli +
* Kai Wohlfahrt

A total of 8 people contributed to this release.
People with a "+" by their names contributed a patch for the first time.
This list of names is automatically generated, and may not be fully complete.


Issues closed for v0.4.0
------------------------

- `#46 <https://github.com/PyWavelets/pywt/issues/46>`__: Independent test comparison
- `#95 <https://github.com/PyWavelets/pywt/issues/95>`__: Simplify Matlab tests
- `#97 <https://github.com/PyWavelets/pywt/issues/97>`__: BUG: erroneous detail coefficients returned by downcoef with...
- `#140 <https://github.com/PyWavelets/pywt/issues/140>`__: demo/dwt_signal_decomposition.py : TypeError: object of type...
- `#141 <https://github.com/PyWavelets/pywt/issues/141>`__: Documentation needs update: ImportError: cannot import name 'multilevel'


Pull requests for v0.4.0
------------------------

- `#55 <https://github.com/PyWavelets/pywt/pull/55>`__: [RFC] Api changes
- `#59 <https://github.com/PyWavelets/pywt/pull/59>`__: Refactor convolution.c.src
- `#64 <https://github.com/PyWavelets/pywt/pull/64>`__: MAINT: make LH, HL variable names in idwt2 consistent with dwt2
- `#67 <https://github.com/PyWavelets/pywt/pull/67>`__: ENH: add wavedecn and waverecn functions
- `#68 <https://github.com/PyWavelets/pywt/pull/68>`__: ENH: Faster dwtn and idwtn
- `#88 <https://github.com/PyWavelets/pywt/pull/88>`__: DOC minor edit about possible naming
- `#93 <https://github.com/PyWavelets/pywt/pull/93>`__: Added implementation of iswt and iswt2
- `#98 <https://github.com/PyWavelets/pywt/pull/98>`__: fix downcoef detail coefficients for level > 1
- `#99 <https://github.com/PyWavelets/pywt/pull/99>`__: complex support in all dwt and idwt related functions
- `#100 <https://github.com/PyWavelets/pywt/pull/100>`__: replace mlabwrap with python-matlab-bridge in Matlab tests
- `#102 <https://github.com/PyWavelets/pywt/pull/102>`__: Replace some .src expansion with macros
- `#104 <https://github.com/PyWavelets/pywt/pull/104>`__: Faster idwtn/dwtn
- `#106 <https://github.com/PyWavelets/pywt/pull/106>`__: make sure transforms respect float32 dtype
- `#109 <https://github.com/PyWavelets/pywt/pull/109>`__: DOC: fix broken link in sidebar for html docs.
- `#112 <https://github.com/PyWavelets/pywt/pull/112>`__: Complex fix
- `#113 <https://github.com/PyWavelets/pywt/pull/113>`__: TST: don't build .exe installers on Appveyor anymore, only wheels.
- `#116 <https://github.com/PyWavelets/pywt/pull/116>`__: [RFC] ENH: Add axis argument to dwt
- `#117 <https://github.com/PyWavelets/pywt/pull/117>`__: MAINT: remove deprecated for loop syntax from Cython code
- `#121 <https://github.com/PyWavelets/pywt/pull/121>`__: Fix typo
- `#123 <https://github.com/PyWavelets/pywt/pull/123>`__: MAINT: remove some unused imports
- `#124 <https://github.com/PyWavelets/pywt/pull/124>`__: switch travis from python 3.5-dev to 3.5
- `#130 <https://github.com/PyWavelets/pywt/pull/130>`__: Add axis argument to multidim
- `#138 <https://github.com/PyWavelets/pywt/pull/138>`__: WIP: Documentation updates for v0.4.0
- `#139 <https://github.com/PyWavelets/pywt/pull/139>`__: Autogenerate function API docs
- `#142 <https://github.com/PyWavelets/pywt/pull/142>`__: fix broken docstring examples in _multilevel.py
- `#143 <https://github.com/PyWavelets/pywt/pull/143>`__: handle None properly in waverec
- `#144 <https://github.com/PyWavelets/pywt/pull/144>`__: Add importable images
- `#145 <https://github.com/PyWavelets/pywt/pull/145>`__: DOC: Document MSVC versions
