PyWavelets 1.2.0 Release Notes

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

This release has new discrete wavelet transforms features incleading a series of multiresolution analysis functions (details below).

PyWavelets has dropped support for Python 3.5 and 3.6 and now supports Python 3.7-3.10.

We also now provide aarch64 linux wheels as well as universal2 and arm64 wheels that are compatible with Apple’s M1 processors.

New features

  • There is a new series of multilevel stationary wavelet transforms (mra, mra2 and mran) suited for multiresolution analysis of 1D, 2D or nD signals, respectively. This MRA analysis is also known as the additive wavelet decomposition because the corresponding inverse functions (imra, imra2 or imran) reconstruct the original signal by simple addition of the components. These are a good alternative to the use of the existing SWT functions when it is important to have features aligned across wavelet scales (see the new demo in demo/mra_vs_swt.py).

  • There is now an n-dimensional implementation available for the wavelet packet transforms (see class WaveletPacketND).

Backwards incompatible changes

  • The image returned by pywt.data.camera has been replaced by a similar, CC0-licensed image because the original image was determined to only be licensed for non-commercial use. Any users who still need the prior camera image for non-commercial use can find it many places online by performing a web search for “cameraman test image”.

Bugs Fixed

  • Add input length check in dwt_single for reflect modes.

  • Demos were updated for compatibility with recent Matplotlib versions.

  • Removed deprecated import from imp.

Other changes

  • PyWavelets has dropped support for Python 3.5 and 3.6 in this release.

Authors

  • ElConno +

  • Ralf Gommers

  • Gregory R. Lee

  • Jakub Mandula +

  • nperraud +

  • ossdev07 +

A total of 6 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 v1.2

  • #235: Build issue: cython not recognized

  • #545: Request: add __reduce__ method for WaveletPacket object

  • #554: imp is deprecated

Pull requests for v1.2

  • #393: Wavelet packets: extend to nD and support subsets of the axes

  • #525: WIP: test against Python 3.8

  • #527: Multiresolution Analysis

  • #540: remove unused distutils import from __init__.py

  • #546: ENH: make Wavelet, WaveletPacket, WaveletPacket2D and ContinuousWavelet…

  • #547: ContinuousWavelet: add tests for dtype and remove unused **kwargs

  • #552: Cython 3.0 compatibility: explicitly call import_array()

  • #559: MAINT: bump minimum Python version to 3.7

  • #567: Documentation about trim_approx in swt2 is wrong

  • #571: improve documentation of padding in coeffs_to_array

  • #572: Replace camera image with a CC0-licensed equivalent

  • #573: switch from terrify to multibuild for OS X setup on Travis

  • #578: Add Python 3.9 to CI and classifiers

  • #584: MAINT: remove use of deprecated np.int/float aliases

  • #598: Add input length check in dwt_single for reflect modes

  • #601: Add wheel building and deployment via GitHub Actions and cibuildwheel

  • #604: MAINT: update pyproject.toml and setup.py for Python 3.10

  • #608: BLD: update Cython build dependency to recent release and <3.0

  • #609: MAINT: fix `origin=’image’` calls that Matplotlib no longer…

  • #610: Update GitHub Actions workflow to build Python 3.10 wheels

  • #611: MAINT: fix doc build issues