Skip to content

SciPy 1.6.0

Compare
Choose a tag to compare
@tylerjereddy tylerjereddy released this 31 Dec 15:02
· 62 commits to maintenance/1.6.x since this release
v1.6.0

SciPy 1.6.0 Release Notes

SciPy 1.6.0 is the culmination of 6 months of hard work. It contains
many new features, numerous bug-fixes, improved test coverage and better
documentation. There have been a number of deprecations and API changes
in this release, which are documented below. All users are encouraged to
upgrade to this release, as there are a large number of bug-fixes and
optimizations. Before upgrading, we recommend that users check that
their own code does not use deprecated SciPy functionality (to do so,
run your code with python -Wd and check for DeprecationWarning s).
Our development attention will now shift to bug-fix releases on the
1.6.x branch, and on adding new features on the master branch.

This release requires Python 3.7+ and NumPy 1.16.5 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • scipy.ndimage improvements: Fixes and ehancements to boundary extension
    modes for interpolation functions. Support for complex-valued inputs in many
    filtering and interpolation functions. New grid_mode option for
    scipy.ndimage.zoom to enable results consistent with scikit-image's
    rescale.
  • scipy.optimize.linprog has fast, new methods for large, sparse problems
    from the HiGHS library.
  • scipy.stats improvements including new distributions, a new test, and
    enhancements to existing distributions and tests

New features

scipy.special improvements

scipy.special now has improved support for 64-bit LAPACK backend

scipy.odr improvements

scipy.odr now has support for 64-bit integer BLAS

scipy.odr.ODR has gained an optional overwrite argument so that existing
files may be overwritten.

scipy.integrate improvements

Some renames of functions with poor names were done, with the old names
retained without being in the reference guide for backwards compatibility
reasons:

  • integrate.simps was renamed to integrate.simpson
  • integrate.trapz was renamed to integrate.trapezoid
  • integrate.cumtrapz was renamed to integrate.cumulative_trapezoid

scipy.cluster improvements

scipy.cluster.hierarchy.DisjointSet has been added for incremental
connectivity queries.

scipy.cluster.hierarchy.dendrogram return value now also includes leaf color
information in leaves_color_list.

scipy.interpolate improvements

scipy.interpolate.interp1d has a new method nearest-up, similar to the
existing method nearest but rounds half-integers up instead of down.

scipy.io improvements

Support has been added for reading arbitrary bit depth integer PCM WAV files
from 1- to 32-bit, including the commonly-requested 24-bit depth.

scipy.linalg improvements

The new function scipy.linalg.matmul_toeplitz uses the FFT to compute the
product of a Toeplitz matrix with another matrix.

scipy.linalg.sqrtm and scipy.linalg.logm have performance improvements
thanks to additional Cython code.

Python LAPACK wrappers have been added for pptrf, pptrs, ppsv,
pptri, and ppcon.

scipy.linalg.norm and the svd family of functions will now use 64-bit
integer backends when available.

scipy.ndimage improvements

scipy.ndimage.convolve, scipy.ndimage.correlate and their 1d counterparts
now accept both complex-valued images and/or complex-valued filter kernels. All
convolution-based filters also now accept complex-valued inputs
(e.g. gaussian_filter, uniform_filter, etc.).

Multiple fixes and enhancements to boundary handling were introduced to
scipy.ndimage interpolation functions (i.e. affine_transform,
geometric_transform, map_coordinates, rotate, shift, zoom).

A new boundary mode, grid-wrap was added which wraps images periodically,
using a period equal to the shape of the input image grid. This is in contrast
to the existing wrap mode which uses a period that is one sample smaller
than the original signal extent along each dimension.

A long-standing bug in the reflect boundary condition has been fixed and
the mode grid-mirror was introduced as a synonym for reflect.

A new boundary mode, grid-constant is now available. This is similar to
the existing ndimage constant mode, but interpolation will still performed
at coordinate values outside of the original image extent. This
grid-constant mode is consistent with OpenCV's BORDER_CONSTANT mode
and scikit-image's constant mode.

Spline pre-filtering (used internally by ndimage interpolation functions
when order >= 2), now supports all boundary modes rather than always
defaulting to mirror boundary conditions. The standalone functions
spline_filter and spline_filter1d have analytical boundary conditions
that match modes mirror, grid-wrap and reflect.

scipy.ndimage interpolation functions now accept complex-valued inputs. In
this case, the interpolation is applied independently to the real and
imaginary components.

The ndimage tutorials
(https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html) have been
updated with new figures to better clarify the exact behavior of all of the
interpolation boundary modes.

scipy.ndimage.zoom now has a grid_mode option that changes the coordinate
of the center of the first pixel along an axis from 0 to 0.5. This allows
resizing in a manner that is consistent with the behavior of scikit-image's
resize and rescale functions (and OpenCV's cv2.resize).

scipy.optimize improvements

scipy.optimize.linprog has fast, new methods for large, sparse problems from
the HiGHS C++ library. method='highs-ds' uses a high performance dual
revised simplex implementation (HSOL), method='highs-ipm' uses an
interior-point method with crossover, and method='highs' chooses between
the two automatically. These methods are typically much faster and often exceed
the accuracy of other linprog methods, so we recommend explicitly
specifying one of these three method values when using linprog.

scipy.optimize.quadratic_assignment has been added for approximate solution
of the quadratic assignment problem.

scipy.optimize.linear_sum_assignment now has a substantially reduced overhead
for small cost matrix sizes

scipy.optimize.least_squares has improved performance when the user provides
the jacobian as a sparse jacobian already in csr_matrix format

scipy.optimize.linprog now has an rr_method argument for specification
of the method used for redundancy handling, and a new method for this purpose
is available based on the interpolative decomposition approach.

scipy.signal improvements

scipy.signal.gammatone has been added to design FIR or IIR filters that
model the human auditory system.

scipy.signal.iircomb has been added to design IIR peaking/notching comb
filters that can boost/attenuate a frequency from a signal.

scipy.signal.sosfilt performance has been improved to avoid some previously-
observed slowdowns

scipy.signal.windows.taylor has been added--the Taylor window function is
commonly used in radar digital signal processing

scipy.signal.gauss_spline now supports list type input for consistency
with other related SciPy functions

scipy.signal.correlation_lags has been added to allow calculation of the lag/
displacement indices array for 1D cross-correlation.

scipy.sparse improvements

A solver for the minimum weight full matching problem for bipartite graphs,
also known as the linear assignment problem, has been added in
scipy.sparse.csgraph.min_weight_full_bipartite_matching. In particular, this
provides functionality analogous to that of
scipy.optimize.linear_sum_assignment, but with improved performance for sparse
inputs, and the ability to handle inputs whose dense representations would not
fit in memory.

The time complexity of scipy.sparse.block_diag has been improved dramatically
from quadratic to linear.

scipy.sparse.linalg improvements

The vendored version of SuperLU has been updated

scipy.fft improvements

The vendored pocketfft library now supports compiling with ARM neon vector
extensions and has improved thread pool behavior.

scipy.spatial improvements

The python implementation of KDTree has been dropped and KDTree is now
implemented in terms of cKDTree. You can now expect cKDTree-like
performance by default. This also means sys.setrecursionlimit no longer
needs to be increased for querying large trees.

transform.Rotation has been updated with support for Modified Rodrigues
Parameters alongside the existing rotation representations (PR gh-12667).

scipy.spatial.transform.Rotation has been partially cythonized, with some
performance improvements observed

scipy.spatial.distance.cdist has improved performance with the minkowski
metric, especially for p-norm values of 1 or 2.

scipy.stats improvements

New distributions have been added to scipy.stats:

  • The asymmetric Laplace continuous distribution has been added as
    scipy.stats.laplace_asymmetric.
  • The negative hypergeometric distribution has been added as scipy.stats.nhypergeom.
  • The multivariate t distribution has been added as scipy.stats.multivariate_t.
  • The multivariate hypergeometric distribution has been added as scipy.stats.multivariate_hypergeom.

The fit method has been overridden for several distributions (laplace,
pareto, rayleigh, invgauss, logistic, gumbel_l,
gumbel_r); they now use analytical, distribution-specific maximum
likelihood estimation results for greater speed and accuracy than the generic
(numerical optimization) implementation.

The one-sample Cramér-von Mises test has been added as
scipy.stats.cramervonmises.

An option to compute one-sided p-values was added to scipy.stats.ttest_1samp,
scipy.stats.ttest_ind_from_stats, scipy.stats.ttest_ind and
scipy.stats.ttest_rel.

The function scipy.stats.kendalltau now has an option to compute Kendall's
tau-c (also known as Stuart's tau-c), and support has been added for exact
p-value calculations for sample sizes > 171.

stats.trapz was renamed to stats.trapezoid, with the former name retained
as an alias for backwards compatibility reasons.

The function scipy.stats.linregress now includes the standard error of the
intercept in its return value.

The _logpdf, _sf, and _isf methods have been added to
scipy.stats.nakagami; _sf and _isf methods also added to
scipy.stats.gumbel_r

The sf method has been added to scipy.stats.levy and scipy.stats.levy_l
for improved precision.

scipy.stats.binned_statistic_dd performance improvements for the following
computed statistics: max, min, median, and std.

We gratefully acknowledge the Chan-Zuckerberg Initiative Essential Open Source
Software for Science program for supporting many of these improvements to
scipy.stats.

Deprecated features

scipy.spatial changes

Calling KDTree.query with k=None to find all neighbours is deprecated.
Use KDTree.query_ball_point instead.

distance.wminkowski was deprecated; use distance.minkowski and supply
weights with the w keyword instead.

Backwards incompatible changes

scipy changes

Using scipy.fft as a function aliasing numpy.fft.fft was removed after
being deprecated in SciPy 1.4.0. As a result, the scipy.fft submodule
must be explicitly imported now, in line with other SciPy subpackages.

scipy.signal changes

The output of decimate, lfilter_zi, lfiltic, sos2tf, and
sosfilt_zi have been changed to match numpy.result_type of their inputs.

The window function slepian was removed. It had been deprecated since SciPy
1.1.

scipy.spatial changes

cKDTree.query now returns 64-bit rather than 32-bit integers on Windows,
making behaviour consistent between platforms (PR gh-12673).

scipy.stats changes

The frechet_l and frechet_r distributions were removed. They were
deprecated since SciPy 1.0.

Other changes

setup_requires was removed from setup.py. This means that users
invoking python setup.py install without having numpy already installed
will now get an error, rather than having numpy installed for them via
easy_install. This install method was always fragile and problematic, users
are encouraged to use pip when installing from source.

  • Fixed a bug in scipy.optimize.dual_annealing accept_reject calculation
    that caused uphill jumps to be accepted less frequently.
  • The time required for (un)pickling of scipy.stats.rv_continuous,
    scipy.stats.rv_discrete, and scipy.stats.rv_frozen has been significantly
    reduced (gh12550). Inheriting subclasses should note that __setstate__ no
    longer calls __init__ upon unpickling.

Authors

  • @endolith
  • @vkk800
  • aditya +
  • George Bateman +
  • Christoph Baumgarten
  • Peter Bell
  • Tobias Biester +
  • Keaton J. Burns +
  • Evgeni Burovski
  • Rüdiger Busche +
  • Matthias Bussonnier
  • Dominic C +
  • Corallus Caninus +
  • CJ Carey
  • Thomas A Caswell
  • chapochn +
  • Lucía Cheung
  • Zach Colbert +
  • Coloquinte +
  • Yannick Copin +
  • Devin Crowley +
  • Terry Davis +
  • Michaël Defferrard +
  • devonwp +
  • Didier +
  • divenex +
  • Thomas Duvernay +
  • Eoghan O'Connell +
  • Gökçen Eraslan
  • Kristian Eschenburg +
  • Ralf Gommers
  • Thomas Grainger +
  • GreatV +
  • Gregory Gundersen +
  • h-vetinari +
  • Matt Haberland
  • Mark Harfouche +
  • He He +
  • Alex Henrie
  • Chun-Ming Huang +
  • Martin James McHugh III +
  • Alex Izvorski +
  • Joey +
  • ST John +
  • Jonas Jonker +
  • Julius Bier Kirkegaard
  • Marcin Konowalczyk +
  • Konrad0
  • Sam Van Kooten +
  • Sergey Koposov +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Loïc Estève
  • Jean-Luc Margot +
  • MarkusKoebis +
  • Nikolay Mayorov
  • G. D. McBain
  • Andrew McCluskey +
  • Nicholas McKibben
  • Sturla Molden
  • Denali Molitor +
  • Eric Moore
  • Shashaank N +
  • Prashanth Nadukandi +
  • nbelakovski +
  • Andrew Nelson
  • Nick +
  • Nikola Forró +
  • odidev
  • ofirr +
  • Sambit Panda
  • Dima Pasechnik
  • Tirth Patel +
  • Matti Picus
  • Paweł Redzyński +
  • Vladimir Philipenko +
  • Philipp Thölke +
  • Ilhan Polat
  • Eugene Prilepin +
  • Vladyslav Rachek
  • Ram Rachum +
  • Tyler Reddy
  • Martin Reinecke +
  • Simon Segerblom Rex +
  • Lucas Roberts
  • Benjamin Rowell +
  • Eli Rykoff +
  • Atsushi Sakai
  • Moritz Schulte +
  • Daniel B. Smith
  • Steve Smith +
  • Jan Soedingrekso +
  • Victor Stinner +
  • Jose Storopoli +
  • Diana Sukhoverkhova +
  • Søren Fuglede Jørgensen
  • taoky +
  • Mike Taves +
  • Ian Thomas +
  • Will Tirone +
  • Frank Torres +
  • Seth Troisi
  • Ronald van Elburg +
  • Hugo van Kemenade
  • Paul van Mulbregt
  • Saul Ivan Rivas Vega +
  • Pauli Virtanen
  • Jan Vleeshouwers
  • Samuel Wallan
  • Warren Weckesser
  • Ben West +
  • Eric Wieser
  • WillTirone +
  • Levi John Wolf +
  • Zhiqing Xiao
  • Rory Yorke +
  • Yun Wang (Maigo) +
  • Egor Zemlyanoy +
  • ZhihuiChen0903 +
  • Jacob Zhong +

A total of 122 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.