PyWavelets 1.0.0 Release Notes¶
Contents
We are very pleased to announce the release of PyWavelets 1.0. We view this version number as a milestone in the project’s now more than a decade long history. It reflects that PyWavelets has stabilized over the past few years, and is now a mature package which a lot of other important packages depend on. A listing of those package won’t be complete, but some we are aware of are:
scikit-image - image processing in Python
imagehash - perceptual image hashing
pyradiomics - extraction of Radiomics features from 2D and 3D images and binary masks
tomopy - Tomographic Reconstruction in Python
SpikeSort - Spike sorting library implemented in Python/NumPy/PyTables
ODL - operator discretization library
This release requires Python 2.7 or >=3.5 and NumPy 1.9.1 or greater. The 1.0 release will be the last release supporting Python 2.7. It will be a Long Term Support (LTS) release, meaning that we will backport critical bug fixes to 1.0.x for as long as Python itself does so (i.e. until 1 Jan 2020).
New features¶
New 1D test signals¶
Many common synthetic 1D test signals have been implemented in the new
function pywt.data.demo_signals
to encourage reproducible research. To get
a list of the available signals, call pywt.data.demo_signals('list')
.
These signals have been validated to match the test signals of the same name
from the Wavelab toolbox (with the
kind permission of Dr. David Donoho).
C99 complex support¶
The Cython modules and underlying C library can now be built with C99 complex
support when supported by the compiler. Doing so improves performance when
running wavelet transforms on complex-valued data. On POSIX systems
(Linux, Mac OS X), C99 complex support is enabled by default at build time.
The user can set the environment variable USE_C99_COMPLEX
to 0 or 1 to
manually disable or enable C99 support at compile time.
complex-valued CWT¶
The continuous wavelet transform, cwt
, now also accepts complex-valued
data.
More flexible specification of some continuous wavelets¶
The continous wavelets "cmor"
, "shan"
and "fbsp"
now let the user
specify attributes such as their center frequency and bandwidth that were
previously fixed. See more on this in the section on deprecated features.
Fully Separable Discrete Wavelet Transfrom¶
A new variant of the multilevel n-dimensional DWT has been implemented. It is
known as the fully separable wavelet transform (FSWT). The functions
fswavedecn
fswaverecn
correspond to the forward and inverse transforms,
respectively. This differs from the existing wavedecn
and waverecn
in
dimensions >= 2 in that all levels of decomposition are performed along a
single axis prior to moving on to the next.
New thresholding methods¶
pywt.threshold
now supports non-negative Garotte thresholding
(mode='garotte'
). There is also a new function pywt.threshold_firm
that implements firm (semi-soft) thresholding. Both of the these new
thresholding methods are intermediate between soft and hard thresholding.
New anti-symmetric boundary modes¶
Two new boundary handling modes for the discrete wavelet transforms have been
implemented. These correspond to whole-sample and half-sample anti-symmetric
boundary conditions (antisymmetric
and antireflect
).
New functions to ravel and unravel wavedecn coefficients¶
The function ravel_coeffs
can be used to ravel all coefficients from
wavedec
, wavedec2
or wavedecn
into a single 1D array. Unraveling
back into a list of individual n-dimensional coefficients can be performed by
unravel_coeffs
.
New functions to determine multilevel DWT coefficient shapes and sizes¶
The new function wavedecn_size
outputs the total number of coefficients
that will be produced by a wavedecn
decomposition. The function
wavedecn_shapes
returns full shape information for all coefficient arrays
produced by wavedecn
. These functions provide the size/shape information
without having to explicitly compute a transform.
Deprecated features¶
The continous wavelets with names "cmor"
, "shan"
and "fbsp"
should now be modified to include formerly hard-coded attributes such as their
center frequency and bandwidth. Use of the bare names “cmor”. “shan” and
“fbsp” is now deprecated. For “cmor” (and “shan”), the form of the wavelet
name is now “cmorB-C” (“shanB-C”) where B and C are floats representing the
bandwidth frequency and center frequency. For “fbsp” the form should now
incorporate three floats as in “fbspM-B-C” where M is the spline order and B
and C are the bandwidth and center frequencies.
Backwards incompatible changes¶
Python 2.6, 3.3 and 3.4 are no longer supported.
The order of coefficients returned by swt2
and input to iswt2
have been
reversed so that the decomposition levels are now returned in descending rather
than ascending order. This makes these 2D stationary wavelet functions
consistent with all of the other multilevel discrete transforms in PyWavelets.
For wavedec
, wavedec2
and wavedecn
, the ability for the user to
specify a level
that is greater than the value returned by
dwt_max_level
has been restored. A UserWarning
is raised instead of a
ValueError
in this case.
Bugs Fixed¶
Assigning new data to the Node
or Node2D
no longer forces a cast to
float64
when the data is one of the other dtypes supported by the dwt
(float32
, complex64
, complex128
).
Calling pywt.threshold
with mode='soft'
now works properly for
complex-valued inputs.
A segfault when running multiple swt2 or swtn transforms concurrently has been fixed.
Several instances of deprecated numpy multi-indexing that caused warnings in numpy >=1.15 have been resolved.
The 2d inverse stationary wavelet transform, iswt2, now supports non-square inputs (an unnecessary check for square inputs was removed).
Wavelet packets no longer convert float32 to float64 upon assignment to nodes.
Doctests have been updated to also work with NumPy >= 1.14,
Indexing conventions have been updated to avoid FutureWarnings in NumPy 1.15.
Other changes¶
Python 3.7 is now officially supported.