# 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.