<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hello all,</div><div><br></div><div dir="ltr">We are
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:<br><br>- `scikit-image <<a href="https://scikit-image.org">https://scikit-image.org</a>>`_ - image processing in Python<br>- `imagehash <<a href="https://github.com/JohannesBuchner/imagehash">https://github.com/JohannesBuchner/imagehash</a>>`_ - perceptual image hashing<br>-
`pyradiomics <<a href="https://github.com/Radiomics/pyradiomics">https://github.com/Radiomics/pyradiomics</a>>`_ -
extraction of Radiomics features from 2D and 3D images and binary masks<br>- `tomopy <<a href="https://github.com/tomopy/tomopy">https://github.com/tomopy/tomopy</a>>`_ - Tomographic Reconstruction in Python<br>- `SpikeSort <<a href="https://github.com/btel/SpikeSort">https://github.com/btel/SpikeSort</a>>`_ - Spike sorting library implemented in Python/NumPy/PyTables<br>- `ODL <<a href="https://github.com/odlgroup/odl">https://github.com/odlgroup/odl</a>>`_ - operator discretization library<br><br>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).<br></div><div dir="ltr"><br></div><div>A summary of
changes and contributors is given below. A more comprehensive list of specific issues and
pull requests closed is available in the release notes at:<div><a href="https://github.com/PyWavelets/pywt/blob/master/doc/release/1.0.0-notes.rst">https://github.com/PyWavelets/pywt/blob/master/doc/release/1.0.0-notes.rst</a></div></div><div dir="ltr"><br>New features<br>============<br><br>New 1D test signals<br>-------------------<br>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')``.<br>These signals have been validated
to match the test signals of the same name from the `Wavelab
<<a href="https://statweb.stanford.edu/~wavelab">https://statweb.stanford.edu/~wavelab</a>>`_ toolbox (with the kind
permission of Dr. David Donoho).<br><br>C99 complex support<br>-------------------<br>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.</div><div dir="ltr"><br>The user can set the
environment variable ``USE_C99_COMPLEX`` to 0 or 1 to manually disable
or enable C99 support at compile time.<br><br>complex-valued CWT<br>------------------<br>The continuous wavelet transform, ``cwt``, now also accepts complex-valued data.<br><br>More flexible specification of some continuous wavelets<br>-------------------------------------------------------<br>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.<br><br>Fully Separable Discrete Wavelet Transfrom<br>------------------------------------------<br>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<br>single axis prior to moving on to the next.<br><br>New thresholding methods<br>------------------------<br>``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.<br><br>New anti-symmetric boundary modes<br>---------------------------------<br>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``). </div><div dir="ltr"><br>New functions to ravel and unravel wavedecn coefficients<br>--------------------------------------------------------<br>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``.<br><br>New functions to determine multilevel DWT coefficient shapes and sizes<br>----------------------------------------------------------------------<br>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.<br><br>Deprecated features<br>===================<br><br>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<br>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.<br><br>Backwards incompatible changes<br>==============================<br><br>Python 2.6, 3.3 and 3.4 are no longer supported.<br><br>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.<br><br>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.<br><br>Bugs Fixed<br>==========<br><br>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``).<br><br>Calling ``pywt.threshold`` with ``mode='soft'`` now works properly for complex-valued inputs.<br><br>A segfault when running multiple `swt2` or `swtn` transforms concurrently has been fixed.<br><br>Several instances of deprecated numpy multi-indexing that caused warnings in numpy >=1.15 have been resolved.<br><br>The
2d inverse stationary wavelet transform, `iswt2`, now supports
non-square inputs (an unnecessary check for square inputs was removed).<br><br>Wavelet packets no longer convert float32 to float64 upon assignment to nodes.<br><br>Doctests have been updated to also work with NumPy >= 1.14,<br><br>Indexing conventions have been updated to avoid FutureWarnings in NumPy 1.15.<br><br><br>Other changes<br>=============<br><br>Python 3.7 is now officially supported.<br><br><br>Authors<br>=======<br><br>* 0-tree +<br>* Jacopo Antonello +<br>* Matthew Brett +<br>* Saket Choudhary +<br>* Michael V. DePalatis +<br>* Daniel Goertzen +<br>* Ralf Gommers<br>* Mark Harfouche +<br>* John Kirkham +<br>* Dawid Laszuk +<br>* Gregory R. Lee<br>* Michel Pelletier +<br>* Balint Reczey +<br>* SylvainLan +<br>* Daniele Tricoli<br>* Kai Wohlfahrt<br><br>A total of 16 people contributed to this release.<br>People with a "+" by their names contributed a patch for the first time.<br>This list of names is automatically generated, and may not be fully complete.<br></div><div dir="ltr"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>