Skip to content

PyWavelets 1.1.0

Compare
Choose a tag to compare
@grlee77 grlee77 released this 18 Oct 19:01
v1.1.0

PyWavelets 1.1.0

.. contents::

We are very pleased to announce the release of PyWavelets 1.1.

This release includes enhanced functionality for both the stationary wavelet
transforms (swt, swt2, swtn) as well as the continuous wavelet
transform (cwt). In addition, there are a handful of bug fixes as
described in more detail below.

This release has dropped Python 2.7 support and now requires Python >= 3.5.

In addition to these changes to the software itself, a paper describing
PyWavelets was recently published in The Journal of Open Source Software:
https://joss.theoj.org/papers/10.21105/joss.01237

New features

  • All swt functions now have a new trim_approx option that can be used
    to exclude the approximation coefficients from all but the final level of
    decomposition. This mode makes the output of these functions consistent with
    the format of the output from the corresponding wavedec functions.

  • All swt functions also now have a new norm option that, when set to
    True and used in combination with trim_approx=True, gives a partition
    of variance across the transform coefficients. In other words, the sum of
    the variances of all coefficients is equal to the variance of the original
    data. This partitioning of variance makes the swt transform more similar
    to the multiple-overlap DWT (MODWT) described in Percival and Walden's book,
    "Wavelet Methods for Time Series Analysis". (#476)

    A demo of this new swt functionality is available at
    https://github.com/PyWavelets/pywt/blob/master/demo/swt_variance.py

  • The continuous wavelet transform (cwt) now offers an FFT-based
    implementation in addition to the previous convolution based one. The new
    method argument can be set to either 'conv' or 'fft' to select
    between these two implementations. (#490).

  • The cwt now also has axis support so that CWTs can be applied in
    batch along any axis of an n-dimensional array. This enables faster batch
    transformation of signals. (#509)

Backwards incompatible changes

  • When the input to cwt is single precision, the computations are now
    performed in single precision. This was done both for efficiency and to make
    cwt handle dtypes consistently with the discrete transforms in
    PyWavelets. This is a change from the prior behaviour of always performing
    the cwt in double precision. (#507)

  • When using complex-valued wavelets with the cwt, the output will now be
    the complex conjugate of the result that was produced by PyWavelets 1.0.x.
    This was done to account for a bug described below. The magnitude of the
    cwt coefficients will still match those from previous releases. (#439)

Bugs Fixed

  • For a cwt with complex wavelets, the results in PyWavelets 1.0.x releases
    matched the output of Matlab R2012a's cwt. Howveer, older Matlab releases
    like R2012a had a phase that was of opposite sign to that given in textbook
    definitions of the CWT (Eq. 2 of Torrence and Compo's review article, "A
    Practical Guide to Wavelet Analysis"). Consequently, the wavelet coefficients
    were the complex conjugates of the expected result. This was validated by
    comparing the results of a transform using cmor1.0-1.0 as compared to the
    cwt implementation available in Matlab R2017b as well as the function
    wt.m from the Lancaster University Physics department's
    MODA toolbox <https://github.com/luphysics/MODA>_. (#439)

  • For some boundary modes and data sizes, round-trip dwt/idwt can
    result in an output that has one additional coefficient. Prior to this
    relese, this could cause a failure during WaveletPacket or
    WaveletPacket2D reconstruction. These wavelet packet transforms have now
    been fixed and round-trip wavelet packet transforms always preserve the
    original data shape. (#448)

  • All inverse transforms now handle mixed precision coefficients consistently.
    Prior to this release some inverse transform raised an error upon
    encountering mixed precision dtypes in the wavelet subbands. In release 1.1,
    when the user-provided coefficients are a mixture of single and double
    precision, all coefficients will be promoted to double precision. (#450)

  • A bug that caused a failure for iswtn when using user-provided axes
    with non-uniform shape along the transformed axes has been fixed. (#462)

Other changes

  • The PyWavelet test suite now uses pytest rather than nose. (#477)

  • Cython code has been updated to use language_level=3. (#435)

  • PyWavelets has adopted the SciPy Code of Conduct. (#521)