Scipy Versions Save

SciPy library main repository

v1.9.0rc3

1 year ago

SciPy 1.9.0 Release Notes

Note: SciPy 1.9.0 is not released yet!

SciPy 1.9.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.9.x branch, and on adding new features on the main branch.

This release requires Python 3.8-3.11 and NumPy 1.18.5 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • We have modernized our build system to use meson, substantially improving our build performance, and providing better build-time configuration and cross-compilation support,
  • Added scipy.optimize.milp, new function for mixed-integer linear programming,
  • Added scipy.stats.fit for fitting discrete and continuous distributions to data,
  • Tensor-product spline interpolation modes were added to scipy.interpolate.RegularGridInterpolator,
  • A new global optimizer (DIviding RECTangles algorithm) scipy.optimize.direct.

New features

scipy.interpolate improvements

  • Speed up the RBFInterpolator evaluation with high dimensional interpolants.
  • Added new spline based interpolation methods for scipy.interpolate.RegularGridInterpolator and its tutorial.
  • scipy.interpolate.RegularGridInterpolator and scipy.interpolate.interpn now accept descending ordered points.
  • RegularGridInterpolator now handles length-1 grid axes.
  • The BivariateSpline subclasses have a new method partial_derivative which constructs a new spline object representing a derivative of an original spline. This mirrors the corresponding functionality for univariate splines, splder and BSpline.derivative, and can substantially speed up repeated evaluation of derivatives.

scipy.linalg improvements

  • scipy.linalg.expm now accepts nD arrays. Its speed is also improved.
  • Minimum required LAPACK version is bumped to 3.7.1.

scipy.fft improvements

  • Added uarray multimethods for scipy.fft.fht and scipy.fft.ifht to allow provision of third party backend implementations such as those recently added to CuPy.

scipy.optimize improvements

  • A new global optimizer, scipy.optimize.direct (DIviding RECTangles algorithm) was added. For problems with inexpensive function evaluations, like the ones in the SciPy benchmark suite, direct is competitive with the best other solvers in SciPy (dual_annealing and differential_evolution) in terms of execution time. See gh-14300 <https://github.com/scipy/scipy/pull/14300>__ for more details.

  • Add a full_output parameter to scipy.optimize.curve_fit to output additional solution information.

  • Add a integrality parameter to scipy.optimize.differential_evolution, enabling integer constraints on parameters.

  • Add a vectorized parameter to call a vectorized objective function only once per iteration. This can improve minimization speed by reducing interpreter overhead from the multiple objective function calls.

  • The default method of scipy.optimize.linprog is now 'highs'.

  • Added scipy.optimize.milp, new function for mixed-integer linear programming.

  • Added Newton-TFQMR method to newton_krylov.

  • Added support for the Bounds class in shgo and dual_annealing for a more uniform API across scipy.optimize.

  • Added the vectorized keyword to differential_evolution.

  • approx_fprime now works with vector-valued functions.

scipy.signal improvements

  • The new window function scipy.signal.windows.kaiser_bessel_derived was added to compute the Kaiser-Bessel derived window.
  • Single-precision hilbert operations are now faster as a result of more consistent dtype handling.

scipy.sparse improvements

  • Add a copy parameter to scipy.sparce.csgraph.laplacian. Using inplace computation with copy=False reduces the memory footprint.
  • Add a dtype parameter to scipy.sparce.csgraph.laplacian for type casting.
  • Add a symmetrized parameter to scipy.sparce.csgraph.laplacian to produce symmetric Laplacian for directed graphs.
  • Add a form parameter to scipy.sparce.csgraph.laplacian taking one of the three values: array, or function, or lo determining the format of the output Laplacian:
    • array is a numpy array (backward compatible default);
    • function is a pointer to a lambda-function evaluating the Laplacian-vector or Laplacian-matrix product;
    • lo results in the format of the LinearOperator.

scipy.sparse.linalg improvements

  • lobpcg performance improvements for small input cases.

scipy.spatial improvements

  • Add an order parameter to scipy.spatial.transform.Rotation.from_quat and scipy.spatial.transform.Rotation.as_quat to specify quaternion format.

scipy.stats improvements

  • scipy.stats.monte_carlo_test performs one-sample Monte Carlo hypothesis tests to assess whether a sample was drawn from a given distribution. Besides reproducing the results of hypothesis tests like scipy.stats.ks_1samp, scipy.stats.normaltest, and scipy.stats.cramervonmises without small sample size limitations, it makes it possible to perform similar tests using arbitrary statistics and distributions.

  • Several scipy.stats functions support new axis (integer or tuple of integers) and nan_policy ('raise', 'omit', or 'propagate'), and keepdims arguments. These functions also support masked arrays as inputs, even if they do not have a scipy.stats.mstats counterpart. Edge cases for multidimensional arrays, such as when axis-slices have no unmasked elements or entire inputs are of size zero, are handled consistently.

  • Add a weight parameter to scipy.stats.hmean.

  • Several improvements have been made to scipy.stats.levy_stable. Substantial improvement has been made for numerical evaluation of the pdf and cdf, resolving #12658 and #14944. The improvement is particularly dramatic for stability parameter alpha close to or equal to 1 and for alpha below but approaching its maximum value of 2. The alternative fast Fourier transform based method for pdf calculation has also been updated to use the approach of Wang and Zhang from their 2008 conference paper Simpson’s rule based FFT method to compute densities of stable distribution, making this method more competitive with the default method. In addition, users now have the option to change the parametrization of the Levy Stable distribution to Nolan's "S0" parametrization which is used internally by SciPy's pdf and cdf implementations. The "S0" parametrization is described in Nolan's paper Numerical calculation of stable densities and distribution functions upon which SciPy's implementation is based. "S0" has the advantage that delta and gamma are proper location and scale parameters. With delta and gamma fixed, the location and scale of the resulting distribution remain unchanged as alpha and beta change. This is not the case for the default "S1" parametrization. Finally, more options have been exposed to allow users to trade off between runtime and accuracy for both the default and FFT methods of pdf and cdf calculation. More information can be found in the documentation here (to be linked).

  • Added scipy.stats.fit for fitting discrete and continuous distributions to data.

  • The methods "pearson" and "tippet" from scipy.stats.combine_pvalues have been fixed to return the correct p-values, resolving #15373. In addition, the documentation for scipy.stats.combine_pvalues has been expanded and improved.

  • Unlike other reduction functions, stats.mode didn't consume the axis being operated on and failed for negative axis inputs. Both the bugs have been fixed. Note that stats.mode will now consume the input axis and return an ndarray with the axis dimension removed.

  • Replaced implementation of scipy.stats.ncf with the implementation from Boost for improved reliability.

  • Add a bits parameter to scipy.stats.qmc.Sobol. It allows to use from 0 to 64 bits to compute the sequence. Default is None which corresponds to 30 for backward compatibility. Using a higher value allow to sample more points. Note: bits does not affect the output dtype.

  • Add a integers method to scipy.stats.qmc.QMCEngine. It allows sampling integers using any QMC sampler.

  • Improved the fit speed and accuracy of stats.pareto.

  • Added qrvs method to NumericalInversePolynomial to match the situation for NumericalInverseHermite.

  • Faster random variate generation for gennorm and nakagami.

  • lloyd_centroidal_voronoi_tessellation has been added to allow improved sample distributions via iterative application of Voronoi diagrams and centering operations

  • Add scipy.stats.qmc.PoissonDisk to sample using the Poisson disk sampling method. It guarantees that samples are separated from each other by a given radius.

  • Add scipy.stats.pmean to calculate the weighted power mean also called generalized mean.

Deprecated features

  • Due to collision with the shape parameter n of several distributions, use of the distribution moment method with keyword argument n is deprecated. Keyword n is replaced with keyword order.
  • Similarly, use of the distribution interval method with keyword arguments alpha is deprecated. Keyword alpha is replaced with keyword confidence.
  • The 'simplex', 'revised simplex', and 'interior-point' methods of scipy.optimize.linprog are deprecated. Methods highs, highs-ds, or highs-ipm should be used in new code.
  • Support for non-numeric arrays has been deprecated from stats.mode. pandas.DataFrame.mode can be used instead.
  • The function spatial.distance.kulsinski has been deprecated in favor of spatial.distance.kulczynski1.
  • The maxiter keyword of the truncated Newton (TNC) algorithm has been deprecated in favour of maxfun.
  • The vertices keyword of Delauney.qhull now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.
  • The extradoc keyword of rv_continuous, rv_discrete and rv_sample now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.

Expired Deprecations

There is an ongoing effort to follow through on long-standing deprecations. The following previously deprecated features are affected:

  • Object arrays in sparse matrices now raise an error.
  • Inexact indices into sparse matrices now raise an error.
  • Passing radius=None to scipy.spatial.SphericalVoronoi now raises an error (not adding radius defaults to 1, as before).
  • Several BSpline methods now raise an error if inputs have ndim > 1.
  • The _rvs method of statistical distributions now requires a size parameter.
  • Passing a fillvalue that cannot be cast to the output type in scipy.signal.convolve2d now raises an error.
  • scipy.spatial.distance now enforces that the input vectors are one-dimensional.
  • Removed stats.itemfreq.
  • Removed stats.median_absolute_deviation.
  • Removed n_jobs keyword argument and use of k=None from kdtree.query.
  • Removed right keyword from interpolate.PPoly.extend.
  • Removed debug keyword from scipy.linalg.solve_*.
  • Removed class _ppform scipy.interpolate.
  • Removed BSR methods matvec and matmat.
  • Removed mlab truncation mode from cluster.dendrogram.
  • Removed cluster.vq.py_vq2.
  • Removed keyword arguments ftol and xtol from optimize.minimize(method='Nelder-Mead').
  • Removed signal.windows.hanning.
  • Removed LAPACK gegv functions from linalg; this raises the minimally required LAPACK version to 3.7.1.
  • Removed spatial.distance.matching.
  • Removed the alias scipy.random for numpy.random.
  • Removed docstring related functions from scipy.misc (docformat, inherit_docstring_from, extend_notes_in_docstring, replace_notes_in_docstring, indentcount_lines, filldoc, unindent_dict, unindent_string).
  • Removed linalg.pinv2.

Backwards incompatible changes

  • Several scipy.stats functions now convert np.matrix to np.ndarrays before the calculation is performed. In this case, the output will be a scalar or np.ndarray of appropriate shape rather than a 2D np.matrix. Similarly, while masked elements of masked arrays are still ignored, the output will be a scalar or np.ndarray rather than a masked array with mask=False.
  • The default method of scipy.optimize.linprog is now 'highs', not 'interior-point' (which is now deprecated), so callback functions and some options are no longer supported with the default method. With the default method, the x attribute of the returned OptimizeResult is now None (instead of a non-optimal array) when an optimal solution cannot be found (e.g. infeasible problem).
  • For scipy.stats.combine_pvalues, the sign of the test statistic returned for the method "pearson" has been flipped so that higher values of the statistic now correspond to lower p-values, making the statistic more consistent with those of the other methods and with the majority of the literature.
  • scipy.linalg.expm due to historical reasons was using the sparse implementation and thus was accepting sparse arrays. Now it only works with nDarrays. For sparse usage, scipy.sparse.linalg.expm needs to be used explicitly.
  • The definition of scipy.stats.circvar has reverted to the one that is standard in the literature; note that this is not the same as the square of scipy.stats.circstd.
  • Remove inheritance to QMCEngine in MultinomialQMC and MultivariateNormalQMC. It removes the methods fast_forward and reset.
  • Init of MultinomialQMC now require the number of trials with n_trials. Hence, MultinomialQMC.random output has now the correct shape (n, pvals).
  • Several function-specific warnings (F_onewayConstantInputWarning, F_onewayBadInputSizesWarning, PearsonRConstantInputWarning, PearsonRNearConstantInputWarning, SpearmanRConstantInputWarning, and BootstrapDegenerateDistributionWarning) have been replaced with more general warnings.

Other changes

  • A draft developer CLI is available for SciPy, leveraging the doit, click and rich-click tools. For more details, see gh-15959.

  • The SciPy contributor guide has been reorganized and updated (see #15947 for details).

  • QUADPACK Fortran routines in scipy.integrate, which power scipy.integrate.quad, have been marked as recursive. This should fix rare issues in multivariate integration (nquad and friends) and obviate the need for compiler-specific compile flags (/recursive for ifort etc). Please file an issue if this change turns out problematic for you. This is also true for FITPACK routines in scipy.interpolate, which power splrep, splev etc., and *UnivariateSpline and *BivariateSpline classes.

  • the USE_PROPACK environment variable has been renamed to SCIPY_USE_PROPACK; setting to a non-zero value will enable the usage of the PROPACK library as before

  • Building SciPy on windows with MSVC now requires at least the vc142 toolset (available in Visual Studio 2019 and higher).

Lazy access to subpackages

Before this release, all subpackages of SciPy (cluster, fft, ndimage, etc.) had to be explicitly imported. Now, these subpackages are lazily loaded as soon as they are accessed, so that the following is possible (if desired for interactive use, it's not actually recommended for code, see :ref:scipy-api): import scipy as sp; sp.fft.dct([1, 2, 3]). Advantages include: making it easier to navigate SciPy in interactive terminals, reducing subpackage import conflicts (which before required import networkx.linalg as nla; import scipy.linalg as sla), and avoiding repeatedly having to update imports during teaching & experimentation. Also see the related community specification document.

SciPy switched to Meson as its build system

This is the first release that ships with Meson as the build system. When installing with pip or pypa/build, Meson will be used (invoked via the meson-python build hook). This change brings significant benefits - most importantly much faster build times, but also better support for cross-compilation and cleaner build logs.

Note:

This release still ships with support for numpy.distutils-based builds as well. Those can be invoked through the setup.py command-line interface (e.g., python setup.py install). It is planned to remove numpy.distutils support before the 1.10.0 release.

When building from source, a number of things have changed compared to building with numpy.distutils:

  • New build dependencies: meson, ninja, and pkg-config. setuptools and wheel are no longer needed.
  • BLAS and LAPACK libraries that are supported haven't changed, however the discovery mechanism has: that is now using pkg-config instead of hardcoded paths or a site.cfg file.
  • The build defaults to using OpenBLAS. See :ref:blas-lapack-selection for details.

The two CLIs that can be used to build wheels are pip and build. In addition, the SciPy repo contains a python dev.py CLI for any kind of development task (see its --help for details). For a comparison between old (distutils) and new (meson) build commands, see :ref:meson-faq.

For more information on the introduction of Meson support in SciPy, see gh-13615 <https://github.com/scipy/scipy/issues/13615>__ and this blog post <https://labs.quansight.org/blog/2021/07/moving-scipy-to-meson/>__.

Authors

  • endolith (12)
  • Caio Agiani (2) +
  • Emmy Albert (1) +
  • Joseph Albert (1)
  • Tania Allard (3)
  • Carsten Allefeld (1) +
  • Kartik Anand (1) +
  • Virgile Andreani (2) +
  • Weh Andreas (1) +
  • Francesco Andreuzzi (5) +
  • Kian-Meng Ang (2) +
  • Gerrit Ansmann (1)
  • Ar-Kareem (1) +
  • Shehan Atukorala (1) +
  • avishai231 (1) +
  • Blair Azzopardi (1)
  • Sayantika Banik (2) +
  • Ross Barnowski (9)
  • Christoph Baumgarten (3)
  • Nickolai Belakovski (1)
  • Peter Bell (9)
  • Sebastian Berg (3)
  • Bharath (1) +
  • bobcatCA (2) +
  • boussoffara (2) +
  • Islem BOUZENIA (1) +
  • Jake Bowhay (41) +
  • Matthew Brett (11)
  • Dietrich Brunn (2) +
  • Michael Burkhart (2) +
  • Evgeni Burovski (96)
  • Matthias Bussonnier (20)
  • Dominic C (1)
  • Cameron (1) +
  • CJ Carey (3)
  • Thomas A Caswell (2)
  • Ali Cetin (2) +
  • Hood Chatham (5) +
  • Klesk Chonkin (1)
  • Craig Citro (1) +
  • Dan Cogswell (1) +
  • Luigi Cruz (1) +
  • Anirudh Dagar (5)
  • Brandon David (1)
  • deepakdinesh1123 (1) +
  • Denton DeLoss (1) +
  • derbuihan (2) +
  • Sameer Deshmukh (13) +
  • Niels Doucet (1) +
  • DWesl (8)
  • eytanadler (30) +
  • Thomas J. Fan (5)
  • Isuru Fernando (3)
  • Joseph Fox-Rabinovitz (1)
  • Ryan Gibson (4) +
  • Ralf Gommers (323)
  • Srinivas Gorur-Shandilya (1) +
  • Alex Griffing (2)
  • h-vetinari (5)
  • Matt Haberland (459)
  • Tristan Hearn (1) +
  • Jonathan Helgert (1) +
  • Samuel Hinton (1) +
  • Jake (1) +
  • Stewart Jamieson (1) +
  • Jan-Hendrik Müller (1)
  • Yikun Jiang (1) +
  • JuliaMelle01 (1) +
  • jyuv (12) +
  • Toshiki Kataoka (1)
  • Chris Keefe (1) +
  • Robert Kern (4)
  • Andrew Knyazev (11)
  • Matthias Koeppe (4) +
  • Sergey Koposov (1)
  • Volodymyr Kozachynskyi (1) +
  • Yotaro Kubo (2) +
  • Jacob Lapenna (1) +
  • Peter Mahler Larsen (8)
  • Eric Larson (4)
  • Laurynas Mikšys (1) +
  • Antony Lee (1)
  • Gregory R. Lee (2)
  • lerichi (1) +
  • Tim Leslie (2)
  • P. L. Lim (1)
  • Smit Lunagariya (43)
  • lutefiskhotdish (1) +
  • Cong Ma (12)
  • Syrtis Major (1)
  • Nicholas McKibben (18)
  • Melissa Weber Mendonça (10)
  • Mark Mikofski (1)
  • Jarrod Millman (13)
  • Harsh Mishra (6)
  • ML-Nielsen (3) +
  • Matthew Murray (1) +
  • Andrew Nelson (50)
  • Dimitri Papadopoulos Orfanos (1) +
  • Evgueni Ovtchinnikov (2) +
  • Sambit Panda (1)
  • Nick Papior (2)
  • Tirth Patel (43)
  • Petar Mlinarić (1)
  • petroselo (1) +
  • Ilhan Polat (64)
  • Anthony Polloreno (1)
  • Amit Portnoy (1) +
  • Quentin Barthélemy (9)
  • Patrick N. Raanes (1) +
  • Tyler Reddy (174)
  • Pamphile Roy (197)
  • Vivek Roy (2) +
  • sabonerune (1) +
  • Niyas Sait (2) +
  • Atsushi Sakai (25)
  • Mazen Sayed (1) +
  • Eduardo Schettino (5) +
  • Daniel Schmitz (6) +
  • Eli Schwartz (4) +
  • SELEE (2) +
  • Namami Shanker (4)
  • siddhantwahal (1) +
  • Gagandeep Singh (8)
  • Soph (1) +
  • Shivnaren Srinivasan (1) +
  • Scott Staniewicz (1) +
  • Leo C. Stein (4)
  • Albert Steppi (7)
  • Christopher Strickland (1) +
  • Kai Striega (4)
  • Søren Fuglede Jørgensen (1)
  • Aleksandr Tagilov (1) +
  • Masayuki Takagi (1) +
  • Sai Teja (1) +
  • Ewout ter Hoeven (2) +
  • Will Tirone (2)
  • Bas van Beek (7)
  • Dhruv Vats (1)
  • H. Vetinari (6)
  • Arthur Volant (1)
  • Samuel Wallan (5)
  • Stefan van der Walt (8)
  • Warren Weckesser (83)
  • Anreas Weh (1)
  • Nils Werner (1)
  • Aviv Yaish (1) +
  • Dowon Yi (1)
  • Rory Yorke (1)
  • Yosshi999 (1) +
  • yuanx749 (2) +
  • Gang Zhao (23)
  • ZhihuiChen0903 (1)
  • Pavel Zun (1) +
  • David Zwicker (1) +

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

v1.9.0rc2

1 year ago

SciPy 1.9.0 Release Notes

Note: SciPy 1.9.0 is not released yet!

SciPy 1.9.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.9.x branch, and on adding new features on the main branch.

This release requires Python 3.8+ and NumPy 1.18.5 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • We have modernized our build system to use meson, substantially reducing our source build times
  • Added scipy.optimize.milp, new function for mixed-integer linear programming.
  • Added scipy.stats.fit for fitting discrete and continuous distributions to data.
  • Tensor-product spline interpolation modes were added to scipy.interpolate.RegularGridInterpolator.
  • A new global optimizer (DIviding RECTangles algorithm) scipy.optimize.direct

New features

scipy.interpolate improvements

  • Speed up the RBFInterpolator evaluation with high dimensional interpolants.
  • Added new spline based interpolation methods for scipy.interpolate.RegularGridInterpolator and its tutorial.
  • scipy.interpolate.RegularGridInterpolator and scipy.interpolate.interpn now accept descending ordered points.
  • RegularGridInterpolator now handles length-1 grid axes.
  • The BivariateSpline subclasses have a new method partial_derivative which constructs a new spline object representing a derivative of an original spline. This mirrors the corresponding functionality for univariate splines, splder and BSpline.derivative, and can substantially speed up repeated evaluation of derivatives.

scipy.linalg improvements

  • scipy.linalg.expm now accepts nD arrays. Its speed is also improved.
  • Minimum required LAPACK version is bumped to 3.7.1.

scipy.fft improvements

  • Added uarray multimethods for scipy.fft.fht and scipy.fft.ifht to allow provision of third party backend implementations such as those recently added to CuPy.

scipy.optimize improvements

  • A new global optimizer, scipy.optimize.direct (DIviding RECTangles algorithm) was added. For problems with inexpensive function evaluations, like the ones in the SciPy benchmark suite, direct is competitive with the best other solvers in SciPy (dual_annealing and differential_evolution) in terms of execution time. See gh-14300 <https://github.com/scipy/scipy/pull/14300>__ for more details.

  • Add a full_output parameter to scipy.optimize.curve_fit to output additional solution information.

  • Add a integrality parameter to scipy.optimize.differential_evolution, enabling integer constraints on parameters.

  • Add a vectorized parameter to call a vectorized objective function only once per iteration. This can improve minimization speed by reducing interpreter overhead from the multiple objective function calls.

  • The default method of scipy.optimize.linprog is now 'highs'.

  • Added scipy.optimize.milp, new function for mixed-integer linear programming.

  • Added Newton-TFQMR method to newton_krylov.

  • Added support for the Bounds class in shgo and dual_annealing for a more uniform API across scipy.optimize.

  • Added the vectorized keyword to differential_evolution.

  • approx_fprime now works with vector-valued functions.

scipy.signal improvements

  • The new window function scipy.signal.windows.kaiser_bessel_derived was added to compute the Kaiser-Bessel derived window.
  • Single-precision hilbert operations are now faster as a result of more consistent dtype handling.

scipy.sparse improvements

  • Add a copy parameter to scipy.sparce.csgraph.laplacian. Using inplace computation with copy=False reduces the memory footprint.
  • Add a dtype parameter to scipy.sparce.csgraph.laplacian for type casting.
  • Add a symmetrized parameter to scipy.sparce.csgraph.laplacian to produce symmetric Laplacian for directed graphs.
  • Add a form parameter to scipy.sparce.csgraph.laplacian taking one of the three values: array, or function, or lo determining the format of the output Laplacian:
    • array is a numpy array (backward compatible default);
    • function is a pointer to a lambda-function evaluating the Laplacian-vector or Laplacian-matrix product;
    • lo results in the format of the LinearOperator.

scipy.sparse.linalg improvements

  • lobpcg performance improvements for small input cases.

scipy.spatial improvements

  • Add an order parameter to scipy.spatial.transform.Rotation.from_quat and scipy.spatial.transform.Rotation.as_quat to specify quaternion format.

scipy.stats improvements

  • scipy.stats.monte_carlo_test performs one-sample Monte Carlo hypothesis tests to assess whether a sample was drawn from a given distribution. Besides reproducing the results of hypothesis tests like scipy.stats.ks_1samp, scipy.stats.normaltest, and scipy.stats.cramervonmises without small sample size limitations, it makes it possible to perform similar tests using arbitrary statistics and distributions.

  • Several scipy.stats functions support new axis (integer or tuple of integers) and nan_policy ('raise', 'omit', or 'propagate'), and keepdims arguments. These functions also support masked arrays as inputs, even if they do not have a scipy.stats.mstats counterpart. Edge cases for multidimensional arrays, such as when axis-slices have no unmasked elements or entire inputs are of size zero, are handled consistently.

  • Add a weight parameter to scipy.stats.hmean.

  • Several improvements have been made to scipy.stats.levy_stable. Substantial improvement has been made for numerical evaluation of the pdf and cdf, resolving #12658 and #14944. The improvement is particularly dramatic for stability parameter alpha close to or equal to 1 and for alpha below but approaching its maximum value of 2. The alternative fast Fourier transform based method for pdf calculation has also been updated to use the approach of Wang and Zhang from their 2008 conference paper Simpson’s rule based FFT method to compute densities of stable distribution, making this method more competitive with the default method. In addition, users now have the option to change the parametrization of the Levy Stable distribution to Nolan's "S0" parametrization which is used internally by SciPy's pdf and cdf implementations. The "S0" parametrization is described in Nolan's paper Numerical calculation of stable densities and distribution functions upon which SciPy's implementation is based. "S0" has the advantage that delta and gamma are proper location and scale parameters. With delta and gamma fixed, the location and scale of the resulting distribution remain unchanged as alpha and beta change. This is not the case for the default "S1" parametrization. Finally, more options have been exposed to allow users to trade off between runtime and accuracy for both the default and FFT methods of pdf and cdf calculation. More information can be found in the documentation here (to be linked).

  • Added scipy.stats.fit for fitting discrete and continuous distributions to data.

  • The methods "pearson" and "tippet" from scipy.stats.combine_pvalues have been fixed to return the correct p-values, resolving #15373. In addition, the documentation for scipy.stats.combine_pvalues has been expanded and improved.

  • Unlike other reduction functions, stats.mode didn't consume the axis being operated on and failed for negative axis inputs. Both the bugs have been fixed. Note that stats.mode will now consume the input axis and return an ndarray with the axis dimension removed.

  • Replaced implementation of scipy.stats.ncf with the implementation from Boost for improved reliability.

  • Add a bits parameter to scipy.stats.qmc.Sobol. It allows to use from 0 to 64 bits to compute the sequence. Default is None which corresponds to 30 for backward compatibility. Using a higher value allow to sample more points. Note: bits does not affect the output dtype.

  • Add a integers method to scipy.stats.qmc.QMCEngine. It allows sampling integers using any QMC sampler.

  • Improved the fit speed and accuracy of stats.pareto.

  • Added qrvs method to NumericalInversePolynomial to match the situation for NumericalInverseHermite.

  • Faster random variate generation for gennorm and nakagami.

  • lloyd_centroidal_voronoi_tessellation has been added to allow improved sample distributions via iterative application of Voronoi diagrams and centering operations

  • Add scipy.stats.qmc.PoissonDisk to sample using the Poisson disk sampling method. It guarantees that samples are separated from each other by a given radius.

  • Add scipy.stats.pmean to calculate the weighted power mean also called generalized mean.

Deprecated features

  • Due to collision with the shape parameter n of several distributions, use of the distribution moment method with keyword argument n is deprecated. Keyword n is replaced with keyword order.
  • Similarly, use of the distribution interval method with keyword arguments alpha is deprecated. Keyword alpha is replaced with keyword confidence.
  • The 'simplex', 'revised simplex', and 'interior-point' methods of scipy.optimize.linprog are deprecated. Methods highs, highs-ds, or highs-ipm should be used in new code.
  • Support for non-numeric arrays has been deprecated from stats.mode. pandas.DataFrame.mode can be used instead.
  • The function spatial.distance.kulsinski has been deprecated in favor of spatial.distance.kulczynski1.
  • The maxiter keyword of the truncated Newton (TNC) algorithm has been deprecated in favour of maxfun.
  • The vertices keyword of Delauney.qhull now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.
  • The extradoc keyword of rv_continuous, rv_discrete and rv_sample now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.

Expired Deprecations

There is an ongoing effort to follow through on long-standing deprecations. The following previously deprecated features are affected:

  • Object arrays in sparse matrices now raise an error.
  • Inexact indices into sparse matrices now raise an error.
  • Passing radius=None to scipy.spatial.SphericalVoronoi now raises an error (not adding radius defaults to 1, as before).
  • Several BSpline methods now raise an error if inputs have ndim > 1.
  • The _rvs method of statistical distributions now requires a size parameter.
  • Passing a fillvalue that cannot be cast to the output type in scipy.signal.convolve2d now raises an error.
  • scipy.spatial.distance now enforces that the input vectors are one-dimensional.
  • Removed stats.itemfreq.
  • Removed stats.median_absolute_deviation.
  • Removed n_jobs keyword argument and use of k=None from kdtree.query.
  • Removed right keyword from interpolate.PPoly.extend.
  • Removed debug keyword from scipy.linalg.solve_*.
  • Removed class _ppform scipy.interpolate.
  • Removed BSR methods matvec and matmat.
  • Removed mlab truncation mode from cluster.dendrogram.
  • Removed cluster.vq.py_vq2.
  • Removed keyword arguments ftol and xtol from optimize.minimize(method='Nelder-Mead').
  • Removed signal.windows.hanning.
  • Removed LAPACK gegv functions from linalg; this raises the minimally required LAPACK version to 3.7.1.
  • Removed spatial.distance.matching.
  • Removed the alias scipy.random for numpy.random.
  • Removed docstring related functions from scipy.misc (docformat, inherit_docstring_from, extend_notes_in_docstring, replace_notes_in_docstring, indentcount_lines, filldoc, unindent_dict, unindent_string).
  • Removed linalg.pinv2.

Backwards incompatible changes

  • Several scipy.stats functions now convert np.matrix to np.ndarrays before the calculation is performed. In this case, the output will be a scalar or np.ndarray of appropriate shape rather than a 2D np.matrix. Similarly, while masked elements of masked arrays are still ignored, the output will be a scalar or np.ndarray rather than a masked array with mask=False.
  • The default method of scipy.optimize.linprog is now 'highs', not 'interior-point' (which is now deprecated), so callback functions and some options are no longer supported with the default method. With the default method, the x attribute of the returned OptimizeResult is now None (instead of a non-optimal array) when an optimal solution cannot be found (e.g. infeasible problem).
  • For scipy.stats.combine_pvalues, the sign of the test statistic returned for the method "pearson" has been flipped so that higher values of the statistic now correspond to lower p-values, making the statistic more consistent with those of the other methods and with the majority of the literature.
  • scipy.linalg.expm due to historical reasons was using the sparse implementation and thus was accepting sparse arrays. Now it only works with nDarrays. For sparse usage, scipy.sparse.linalg.expm needs to be used explicitly.
  • The definition of scipy.stats.circvar has reverted to the one that is standard in the literature; note that this is not the same as the square of scipy.stats.circstd.
  • Remove inheritance to QMCEngine in MultinomialQMC and MultivariateNormalQMC. It removes the methods fast_forward and reset.
  • Init of MultinomialQMC now require the number of trials with n_trials. Hence, MultinomialQMC.random output has now the correct shape (n, pvals).
  • Several function-specific warnings (F_onewayConstantInputWarning, F_onewayBadInputSizesWarning, PearsonRConstantInputWarning, PearsonRNearConstantInputWarning, SpearmanRConstantInputWarning, and BootstrapDegenerateDistributionWarning) have been replaced with more general warnings.

Other changes

  • A draft developer CLI is available for SciPy, leveraging the doit, click and rich-click tools. For more details, see gh-15959.

  • The SciPy contributor guide has been reorganized and updated (see #15947 for details).

  • QUADPACK Fortran routines in scipy.integrate, which power scipy.integrate.quad, have been marked as recursive. This should fix rare issues in multivariate integration (nquad and friends) and obviate the need for compiler-specific compile flags (/recursive for ifort etc). Please file an issue if this change turns out problematic for you. This is also true for FITPACK routines in scipy.interpolate, which power splrep, splev etc., and *UnivariateSpline and *BivariateSpline classes.

  • the USE_PROPACK environment variable has been renamed to SCIPY_USE_PROPACK; setting to a non-zero value will enable the usage of the PROPACK library as before

Lazy access to subpackages

Before this release, all subpackages of SciPy (cluster, fft, ndimage, etc.) had to be explicitly imported. Now, these subpackages are lazily loaded as soon as they are accessed, so that the following is possible (if desired for interactive use, it's not actually recommended for code, see :ref:scipy-api): import scipy as sp; sp.fft.dct([1, 2, 3]). Advantages include: making it easier to navigate SciPy in interactive terminals, reducing subpackage import conflicts (which before required import networkx.linalg as nla; import scipy.linalg as sla), and avoiding repeatedly having to update imports during teaching & experimentation. Also see the related community specification document.

SciPy switched to Meson as its build system

This is the first release that ships with Meson as the build system. When installing with pip or pypa/build, Meson will be used (invoked via the meson-python build hook). This change brings significant benefits - most importantly much faster build times, but also better support for cross-compilation and cleaner build logs.

Note:

This release still ships with support for numpy.distutils-based builds as well. Those can be invoked through the setup.py command-line interface (e.g., python setup.py install). It is planned to remove numpy.distutils support before the 1.10.0 release.

When building from source, a number of things have changed compared to building with numpy.distutils:

  • New build dependencies: meson, ninja, and pkg-config. setuptools and wheel are no longer needed.
  • BLAS and LAPACK libraries that are supported haven't changed, however the discovery mechanism has: that is now using pkg-config instead of hardcoded paths or a site.cfg file.
  • The build defaults to using OpenBLAS. See :ref:blas-lapack-selection for details.

The two CLIs that can be used to build wheels are pip and build. In addition, the SciPy repo contains a python dev.py CLI for any kind of development task (see its --help for details). For a comparison between old (distutils) and new (meson) build commands, see :ref:meson-faq.

For more information on the introduction of Meson support in SciPy, see gh-13615 <https://github.com/scipy/scipy/issues/13615>__ and this blog post <https://labs.quansight.org/blog/2021/07/moving-scipy-to-meson/>__.

Authors

  • endolith (12)
  • Caio Agiani (2) +
  • Emmy Albert (1) +
  • Joseph Albert (1)
  • Tania Allard (3)
  • Carsten Allefeld (1) +
  • Kartik Anand (1) +
  • Virgile Andreani (2) +
  • Weh Andreas (1) +
  • Francesco Andreuzzi (5) +
  • Kian-Meng Ang (2) +
  • Gerrit Ansmann (1)
  • Ar-Kareem (1) +
  • Shehan Atukorala (1) +
  • avishai231 (1) +
  • Blair Azzopardi (1)
  • Sayantika Banik (2) +
  • Ross Barnowski (9)
  • Christoph Baumgarten (3)
  • Nickolai Belakovski (1)
  • Peter Bell (9)
  • Sebastian Berg (3)
  • Bharath (1) +
  • bobcatCA (2) +
  • boussoffara (2) +
  • Islem BOUZENIA (1) +
  • Jake Bowhay (41) +
  • Matthew Brett (11)
  • Dietrich Brunn (2) +
  • Michael Burkhart (2) +
  • Evgeni Burovski (96)
  • Matthias Bussonnier (20)
  • Dominic C (1)
  • Cameron (1) +
  • CJ Carey (3)
  • Thomas A Caswell (2)
  • Ali Cetin (2) +
  • Hood Chatham (5) +
  • Klesk Chonkin (1)
  • Craig Citro (1) +
  • Dan Cogswell (1) +
  • Luigi Cruz (1) +
  • Anirudh Dagar (5)
  • Brandon David (1)
  • deepakdinesh1123 (1) +
  • Denton DeLoss (1) +
  • derbuihan (2) +
  • Sameer Deshmukh (13) +
  • Niels Doucet (1) +
  • DWesl (8)
  • eytanadler (30) +
  • Thomas J. Fan (5)
  • Isuru Fernando (3)
  • Joseph Fox-Rabinovitz (1)
  • Ryan Gibson (4) +
  • Ralf Gommers (314)
  • Srinivas Gorur-Shandilya (1) +
  • Alex Griffing (2)
  • h-vetinari (3)
  • Matt Haberland (446)
  • Tristan Hearn (1) +
  • Jonathan Helgert (1) +
  • Samuel Hinton (1) +
  • Jake (1) +
  • Stewart Jamieson (1) +
  • Jan-Hendrik Müller (1)
  • Yikun Jiang (1) +
  • JuliaMelle01 (1) +
  • jyuv (12) +
  • Toshiki Kataoka (1)
  • Chris Keefe (1) +
  • Robert Kern (4)
  • Andrew Knyazev (11)
  • Matthias Koeppe (4) +
  • Sergey Koposov (1)
  • Volodymyr Kozachynskyi (1) +
  • Yotaro Kubo (2) +
  • Jacob Lapenna (1) +
  • Peter Mahler Larsen (8)
  • Eric Larson (4)
  • Laurynas Mikšys (1) +
  • Antony Lee (1)
  • Gregory R. Lee (2)
  • lerichi (1) +
  • Tim Leslie (2)
  • P. L. Lim (1)
  • Smit Lunagariya (43)
  • lutefiskhotdish (1) +
  • Cong Ma (12)
  • Syrtis Major (1)
  • Nicholas McKibben (17)
  • Melissa Weber Mendonça (10)
  • Mark Mikofski (1)
  • Jarrod Millman (13)
  • Harsh Mishra (6)
  • ML-Nielsen (3) +
  • Matthew Murray (1) +
  • Andrew Nelson (50)
  • Dimitri Papadopoulos Orfanos (1) +
  • Evgueni Ovtchinnikov (2) +
  • Sambit Panda (1)
  • Nick Papior (2)
  • Tirth Patel (43)
  • Petar Mlinarić (1)
  • petroselo (1) +
  • Ilhan Polat (64)
  • Anthony Polloreno (1)
  • Amit Portnoy (1) +
  • Quentin Barthélemy (9)
  • Patrick N. Raanes (1) +
  • Tyler Reddy (144)
  • Pamphile Roy (197)
  • Vivek Roy (2) +
  • sabonerune (1) +
  • Niyas Sait (2) +
  • Atsushi Sakai (25)
  • Mazen Sayed (1) +
  • Eduardo Schettino (5) +
  • Daniel Schmitz (6) +
  • Eli Schwartz (4) +
  • SELEE (2) +
  • Namami Shanker (4)
  • siddhantwahal (1) +
  • Gagandeep Singh (8)
  • Soph (1) +
  • Shivnaren Srinivasan (1) +
  • Scott Staniewicz (1) +
  • Leo C. Stein (4)
  • Albert Steppi (7)
  • Christopher Strickland (1) +
  • Kai Striega (4)
  • Søren Fuglede Jørgensen (1)
  • Aleksandr Tagilov (1) +
  • Masayuki Takagi (1) +
  • Sai Teja (1) +
  • Ewout ter Hoeven (2) +
  • Will Tirone (2)
  • Bas van Beek (7)
  • Dhruv Vats (1)
  • H. Vetinari (6)
  • Arthur Volant (1)
  • Samuel Wallan (5)
  • Stefan van der Walt (8)
  • Warren Weckesser (83)
  • Anreas Weh (1)
  • Nils Werner (1)
  • Aviv Yaish (1) +
  • Dowon Yi (1)
  • Rory Yorke (1)
  • Yosshi999 (1) +
  • yuanx749 (2) +
  • Gang Zhao (23)
  • ZhihuiChen0903 (1)
  • Pavel Zun (1) +
  • David Zwicker (1) +

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

v1.9.0rc1

1 year ago

SciPy 1.9.0 Release Notes

Note: SciPy 1.9.0 is not released yet!

SciPy 1.9.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.9.x branch, and on adding new features on the main branch.

This release requires Python 3.8+ and NumPy 1.18.5 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • We have modernized our build system to use meson, substantially reducing our source build times
  • Added scipy.optimize.milp, new function for mixed-integer linear programming.
  • Added scipy.stats.fit for fitting discrete and continuous distributions to data.
  • Tensor-product spline interpolation modes were added to scipy.interpolate.RegularGridInterpolator.
  • A new global optimizer (DIviding RECTangles algorithm) scipy.optimize.direct

New features

scipy.interpolate improvements

  • Speed up the RBFInterpolator evaluation with high dimensional interpolants.
  • Added new spline based interpolation methods for scipy.interpolate.RegularGridInterpolator and its tutorial.
  • scipy.interpolate.RegularGridInterpolator and scipy.interpolate.interpn now accept descending ordered points.
  • RegularGridInterpolator now handles length-1 grid axes.
  • The BivariateSpline subclasses have a new method partial_derivative which constructs a new spline object representing a derivative of an original spline. This mirrors the corresponding functionality for univariate splines, splder and BSpline.derivative, and can substantially speed up repeated evaluation of derivatives.

scipy.linalg improvements

  • scipy.linalg.expm now accepts nD arrays. Its speed is also improved.
  • Minimum required LAPACK version is bumped to 3.7.1.

scipy.fft improvements

  • Added uarray multimethods for scipy.fft.fht and scipy.fft.ifht to allow provision of third party backend implementations such as those recently added to CuPy.

scipy.optimize improvements

  • A new global optimizer, scipy.optimize.direct (DIviding RECTangles algorithm) was added. For problems with inexpensive function evaluations, like the ones in the SciPy benchmark suite, direct is competitive with the best other solvers in SciPy (dual_annealing and differential_evolution) in terms of execution time. See gh-14300 <https://github.com/scipy/scipy/pull/14300>__ for more details.

  • Add a full_output parameter to scipy.optimize.curve_fit to output additional solution information.

  • Add a integrality parameter to scipy.optimize.differential_evolution, enabling integer constraints on parameters.

  • Add a vectorized parameter to call a vectorized objective function only once per iteration. This can improve minimization speed by reducing interpreter overhead from the multiple objective function calls.

  • The default method of scipy.optimize.linprog is now 'highs'.

  • Added scipy.optimize.milp, new function for mixed-integer linear programming.

  • Added Newton-TFQMR method to newton_krylov.

  • Added support for the Bounds class in shgo and dual_annealing for a more uniform API across scipy.optimize.

  • Added the vectorized keyword to differential_evolution.

  • approx_fprime now works with vector-valued functions.

scipy.signal improvements

  • The new window function scipy.signal.windows.kaiser_bessel_derived was added to compute the Kaiser-Bessel derived window.
  • Single-precision hilbert operations are now faster as a result of more consistent dtype handling.

scipy.sparse improvements

  • Add a copy parameter to scipy.sparce.csgraph.laplacian. Using inplace computation with copy=False reduces the memory footprint.
  • Add a dtype parameter to scipy.sparce.csgraph.laplacian for type casting.
  • Add a symmetrized parameter to scipy.sparce.csgraph.laplacian to produce symmetric Laplacian for directed graphs.
  • Add a form parameter to scipy.sparce.csgraph.laplacian taking one of the three values: array, or function, or lo determining the format of the output Laplacian:
    • array is a numpy array (backward compatible default);
    • function is a pointer to a lambda-function evaluating the Laplacian-vector or Laplacian-matrix product;
    • lo results in the format of the LinearOperator.

scipy.sparse.linalg improvements

  • lobpcg performance improvements for small input cases.

scipy.spatial improvements

  • Add an order parameter to scipy.spatial.transform.Rotation.from_quat and scipy.spatial.transform.Rotation.as_quat to specify quaternion format.

scipy.stats improvements

  • scipy.stats.monte_carlo_test performs one-sample Monte Carlo hypothesis tests to assess whether a sample was drawn from a given distribution. Besides reproducing the results of hypothesis tests like scipy.stats.ks_1samp, scipy.stats.normaltest, and scipy.stats.cramervonmises without small sample size limitations, it makes it possible to perform similar tests using arbitrary statistics and distributions.

  • Several scipy.stats functions support new axis (integer or tuple of integers) and nan_policy ('raise', 'omit', or 'propagate'), and keepdims arguments. These functions also support masked arrays as inputs, even if they do not have a scipy.stats.mstats counterpart. Edge cases for multidimensional arrays, such as when axis-slices have no unmasked elements or entire inputs are of size zero, are handled consistently.

  • Add a weight parameter to scipy.stats.hmean.

  • Several improvements have been made to scipy.stats.levy_stable. Substantial improvement has been made for numerical evaluation of the pdf and cdf, resolving #12658 and #14944. The improvement is particularly dramatic for stability parameter alpha close to or equal to 1 and for alpha below but approaching its maximum value of 2. The alternative fast Fourier transform based method for pdf calculation has also been updated to use the approach of Wang and Zhang from their 2008 conference paper Simpson’s rule based FFT method to compute densities of stable distribution, making this method more competitive with the default method. In addition, users now have the option to change the parametrization of the Levy Stable distribution to Nolan's "S0" parametrization which is used internally by SciPy's pdf and cdf implementations. The "S0" parametrization is described in Nolan's paper Numerical calculation of stable densities and distribution functions upon which SciPy's implementation is based. "S0" has the advantage that delta and gamma are proper location and scale parameters. With delta and gamma fixed, the location and scale of the resulting distribution remain unchanged as alpha and beta change. This is not the case for the default "S1" parametrization. Finally, more options have been exposed to allow users to trade off between runtime and accuracy for both the default and FFT methods of pdf and cdf calculation. More information can be found in the documentation here (to be linked).

  • Added scipy.stats.fit for fitting discrete and continuous distributions to data.

  • The methods "pearson" and "tippet" from scipy.stats.combine_pvalues have been fixed to return the correct p-values, resolving #15373. In addition, the documentation for scipy.stats.combine_pvalues has been expanded and improved.

  • Unlike other reduction functions, stats.mode didn't consume the axis being operated on and failed for negative axis inputs. Both the bugs have been fixed. Note that stats.mode will now consume the input axis and return an ndarray with the axis dimension removed.

  • Replaced implementation of scipy.stats.ncf with the implementation from Boost for improved reliability.

  • Add a bits parameter to scipy.stats.qmc.Sobol. It allows to use from 0 to 64 bits to compute the sequence. Default is None which corresponds to 30 for backward compatibility. Using a higher value allow to sample more points. Note: bits does not affect the output dtype.

  • Add a integers method to scipy.stats.qmc.QMCEngine. It allows sampling integers using any QMC sampler.

  • Improved the fit speed and accuracy of stats.pareto.

  • Added qrvs method to NumericalInversePolynomial to match the situation for NumericalInverseHermite.

  • Faster random variate generation for gennorm and nakagami.

  • lloyd_centroidal_voronoi_tessellation has been added to allow improved sample distributions via iterative application of Voronoi diagrams and centering operations

  • Add scipy.stats.qmc.PoissonDisk to sample using the Poisson disk sampling method. It guarantees that samples are separated from each other by a given radius.

  • Add scipy.stats.pmean to calculate the weighted power mean also called generalized mean.

Deprecated features

  • Due to collision with the shape parameter n of several distributions, use of the distribution moment method with keyword argument n is deprecated. Keyword n is replaced with keyword order.
  • Similarly, use of the distribution interval method with keyword arguments alpha is deprecated. Keyword alpha is replaced with keyword confidence.
  • The 'simplex', 'revised simplex', and 'interior-point' methods of scipy.optimize.linprog are deprecated. Methods highs, highs-ds, or highs-ipm should be used in new code.
  • Support for non-numeric arrays has been deprecated from stats.mode. pandas.DataFrame.mode can be used instead.
  • The function spatial.distance.kulsinski has been deprecated in favor of spatial.distance.kulczynski1.
  • The maxiter keyword of the truncated Newton (TNC) algorithm has been deprecated in favour of maxfun.
  • The vertices keyword of Delauney.qhull now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.
  • The extradoc keyword of rv_continuous, rv_discrete and rv_sample now raises a DeprecationWarning, after having been deprecated in documentation only for a long time.

Expired Deprecations

There is an ongoing effort to follow through on long-standing deprecations. The following previously deprecated features are affected:

  • Object arrays in sparse matrices now raise an error.
  • Inexact indices into sparse matrices now raise an error.
  • Passing radius=None to scipy.spatial.SphericalVoronoi now raises an error (not adding radius defaults to 1, as before).
  • Several BSpline methods now raise an error if inputs have ndim > 1.
  • The _rvs method of statistical distributions now requires a size parameter.
  • Passing a fillvalue that cannot be cast to the output type in scipy.signal.convolve2d now raises an error.
  • scipy.spatial.distance now enforces that the input vectors are one-dimensional.
  • Removed stats.itemfreq.
  • Removed stats.median_absolute_deviation.
  • Removed n_jobs keyword argument and use of k=None from kdtree.query.
  • Removed right keyword from interpolate.PPoly.extend.
  • Removed debug keyword from scipy.linalg.solve_*.
  • Removed class _ppform scipy.interpolate.
  • Removed BSR methods matvec and matmat.
  • Removed mlab truncation mode from cluster.dendrogram.
  • Removed cluster.vq.py_vq2.
  • Removed keyword arguments ftol and xtol from optimize.minimize(method='Nelder-Mead').
  • Removed signal.windows.hanning.
  • Removed LAPACK gegv functions from linalg; this raises the minimally required LAPACK version to 3.7.1.
  • Removed spatial.distance.matching.
  • Removed the alias scipy.random for numpy.random.
  • Removed docstring related functions from scipy.misc (docformat, inherit_docstring_from, extend_notes_in_docstring, replace_notes_in_docstring, indentcount_lines, filldoc, unindent_dict, unindent_string).
  • Removed linalg.pinv2.

Backwards incompatible changes

  • Several scipy.stats functions now convert np.matrix to np.ndarrays before the calculation is performed. In this case, the output will be a scalar or np.ndarray of appropriate shape rather than a 2D np.matrix. Similarly, while masked elements of masked arrays are still ignored, the output will be a scalar or np.ndarray rather than a masked array with mask=False.
  • The default method of scipy.optimize.linprog is now 'highs', not 'interior-point' (which is now deprecated), so callback functions and some options are no longer supported with the default method.
  • For scipy.stats.combine_pvalues, the sign of the test statistic returned for the method "pearson" has been flipped so that higher values of the statistic now correspond to lower p-values, making the statistic more consistent with those of the other methods and with the majority of the literature.
  • scipy.linalg.expm due to historical reasons was using the sparse implementation and thus was accepting sparse arrays. Now it only works with nDarrays. For sparse usage, scipy.sparse.linalg.expm needs to be used explicitly.
  • The definition of scipy.stats.circvar has reverted to the one that is standard in the literature; note that this is not the same as the square of scipy.stats.circstd.
  • Remove inheritance to QMCEngine in MultinomialQMC and MultivariateNormalQMC. It removes the methods fast_forward and reset.
  • Init of MultinomialQMC now require the number of trials with n_trials. Hence, MultinomialQMC.random output has now the correct shape (n, pvals).
  • Several function-specific warnings (F_onewayConstantInputWarning, F_onewayBadInputSizesWarning, PearsonRConstantInputWarning, PearsonRNearConstantInputWarning, SpearmanRConstantInputWarning, and BootstrapDegenerateDistributionWarning) have been replaced with more general warnings.

Other changes

  • A draft developer CLI is available for SciPy, leveraging the doit, click and rich-click tools. For more details, see gh-15959.

  • The SciPy contributor guide has been reorganized and updated (see #15947 for details).

  • QUADPACK Fortran routines in scipy.integrate, which power scipy.integrate.quad, have been marked as recursive. This should fix rare issues in multivariate integration (nquad and friends) and obviate the need for compiler-specific compile flags (/recursive for ifort etc). Please file an issue if this change turns out problematic for you. This is also true for FITPACK routines in scipy.interpolate, which power splrep, splev etc., and *UnivariateSpline and *BivariateSpline classes.

  • the USE_PROPACK environment variable has been renamed to SCIPY_USE_PROPACK; setting to a non-zero value will enable the usage of the PROPACK library as before

Lazy access to subpackages

Before this release, all subpackages of SciPy (cluster, fft, ndimage, etc.) had to be explicitly imported. Now, these subpackages are lazily loaded as soon as they are accessed, so that the following is possible (if desired for interactive use, it's not actually recommended for code, see :ref:scipy-api): import scipy as sp; sp.fft.dct([1, 2, 3]). Advantages include: making it easier to navigate SciPy in interactive terminals, reducing subpackage import conflicts (which before required import networkx.linalg as nla; import scipy.linalg as sla), and avoiding repeatedly having to update imports during teaching & experimentation. Also see the related community specification document.

SciPy switched to Meson as its build system

This is the first release that ships with Meson as the build system. When installing with pip or pypa/build, Meson will be used (invoked via the meson-python build hook). This change brings significant benefits - most importantly much faster build times, but also better support for cross-compilation and cleaner build logs.

Note:

This release still ships with support for numpy.distutils-based builds as well. Those can be invoked through the setup.py command-line interface (e.g., python setup.py install). It is planned to remove numpy.distutils support before the 1.10.0 release.

When building from source, a number of things have changed compared to building with numpy.distutils:

  • New build dependencies: meson, ninja, and pkg-config. setuptools and wheel are no longer needed.
  • BLAS and LAPACK libraries that are supported haven't changed, however the discovery mechanism has: that is now using pkg-config instead of hardcoded paths or a site.cfg file.
  • The build defaults to using OpenBLAS. See :ref:blas-lapack-selection for details.

The two CLIs that can be used to build wheels are pip and build. In addition, the SciPy repo contains a python dev.py CLI for any kind of development task (see its --help for details). For a comparison between old (distutils) and new (meson) build commands, see :ref:meson-faq.

For more information on the introduction of Meson support in SciPy, see gh-13615 <https://github.com/scipy/scipy/issues/13615>__ and this blog post <https://labs.quansight.org/blog/2021/07/moving-scipy-to-meson/>__.

Authors

  • endolith (12)
  • Caio Agiani (2) +
  • Emmy Albert (1) +
  • Joseph Albert (1)
  • Tania Allard (3)
  • Carsten Allefeld (1) +
  • Kartik Anand (1) +
  • Virgile Andreani (2) +
  • Weh Andreas (1) +
  • Francesco Andreuzzi (5) +
  • Kian-Meng Ang (2) +
  • Gerrit Ansmann (1)
  • Ar-Kareem (1) +
  • Shehan Atukorala (1) +
  • avishai231 (1) +
  • Blair Azzopardi (1)
  • Sayantika Banik (2) +
  • Ross Barnowski (8)
  • Christoph Baumgarten (3)
  • Nickolai Belakovski (1)
  • Peter Bell (9)
  • Sebastian Berg (2)
  • Bharath (1) +
  • bobcatCA (2) +
  • boussoffara (2) +
  • Islem BOUZENIA (1) +
  • Jake Bowhay (41) +
  • Matthew Brett (11)
  • Dietrich Brunn (2) +
  • Michael Burkhart (2) +
  • Evgeni Burovski (96)
  • Matthias Bussonnier (20)
  • Dominic C (1)
  • Cameron (1) +
  • CJ Carey (3)
  • Thomas A Caswell (2)
  • Ali Cetin (2) +
  • Hood Chatham (5) +
  • Klesk Chonkin (1)
  • Craig Citro (1) +
  • Dan Cogswell (1) +
  • Luigi Cruz (1) +
  • Anirudh Dagar (5)
  • Brandon David (1)
  • deepakdinesh1123 (1) +
  • Denton DeLoss (1) +
  • derbuihan (2) +
  • Sameer Deshmukh (13) +
  • Niels Doucet (1) +
  • DWesl (8)
  • eytanadler (30) +
  • Thomas J. Fan (5)
  • Isuru Fernando (3)
  • Joseph Fox-Rabinovitz (1)
  • Ryan Gibson (4) +
  • Ralf Gommers (308)
  • Srinivas Gorur-Shandilya (1) +
  • Alex Griffing (2)
  • h-vetinari (3)
  • Matt Haberland (442)
  • Tristan Hearn (1) +
  • Jonathan Helgert (1) +
  • Samuel Hinton (1) +
  • Jake (1) +
  • Stewart Jamieson (1) +
  • Jan-Hendrik Müller (1)
  • Yikun Jiang (1) +
  • JuliaMelle01 (1) +
  • jyuv (12) +
  • Chris Keefe (1) +
  • Robert Kern (4)
  • Andrew Knyazev (11)
  • Matthias Koeppe (4) +
  • Sergey Koposov (1)
  • Volodymyr Kozachynskyi (1) +
  • Yotaro Kubo (2) +
  • Jacob Lapenna (1) +
  • Peter Mahler Larsen (8)
  • Eric Larson (4)
  • Laurynas Mikšys (1) +
  • Antony Lee (1)
  • Gregory R. Lee (2)
  • lerichi (1) +
  • Tim Leslie (2)
  • P. L. Lim (1)
  • Smit Lunagariya (43)
  • lutefiskhotdish (1) +
  • Cong Ma (12)
  • Syrtis Major (1)
  • Nicholas McKibben (17)
  • Melissa Weber Mendonça (10)
  • Mark Mikofski (1)
  • Jarrod Millman (13)
  • Harsh Mishra (6)
  • ML-Nielsen (3) +
  • Matthew Murray (1) +
  • Andrew Nelson (50)
  • Dimitri Papadopoulos Orfanos (1) +
  • Evgueni Ovtchinnikov (2) +
  • Sambit Panda (1)
  • Nick Papior (2)
  • Tirth Patel (43)
  • Petar Mlinarić (1)
  • petroselo (1) +
  • Ilhan Polat (64)
  • Anthony Polloreno (1)
  • Amit Portnoy (1) +
  • Quentin Barthélemy (9)
  • Patrick N. Raanes (1) +
  • Tyler Reddy (121)
  • Pamphile Roy (196)
  • Vivek Roy (2) +
  • Niyas Sait (2) +
  • Atsushi Sakai (25)
  • Mazen Sayed (1) +
  • Eduardo Schettino (5) +
  • Daniel Schmitz (6) +
  • Eli Schwartz (3) +
  • SELEE (2) +
  • Namami Shanker (4)
  • siddhantwahal (1) +
  • Gagandeep Singh (8)
  • Soph (1) +
  • Shivnaren Srinivasan (1) +
  • Scott Staniewicz (1) +
  • Leo C. Stein (4)
  • Albert Steppi (7)
  • Christopher Strickland (1) +
  • Kai Striega (4)
  • Søren Fuglede Jørgensen (1)
  • Aleksandr Tagilov (1) +
  • Masayuki Takagi (1) +
  • Sai Teja (1) +
  • Ewout ter Hoeven (2) +
  • Will Tirone (2)
  • Bas van Beek (7)
  • Dhruv Vats (1)
  • H. Vetinari (4)
  • Arthur Volant (1)
  • Samuel Wallan (5)
  • Stefan van der Walt (8)
  • Warren Weckesser (83)
  • Anreas Weh (1)
  • Nils Werner (1)
  • Aviv Yaish (1) +
  • Dowon Yi (1)
  • Rory Yorke (1)
  • Yosshi999 (1) +
  • yuanx749 (2) +
  • Gang Zhao (23)
  • ZhihuiChen0903 (1)
  • Pavel Zun (1) +
  • David Zwicker (1) +

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

v1.8.1

2 years ago

SciPy 1.8.1 Release Notes

SciPy 1.8.1 is a bug-fix release with no new features compared to 1.8.0. Notably, usage of Pythran has been restored for Windows builds/binaries.

Authors

  • Henry Schreiner
  • Maximilian Nöthe
  • Sebastian Berg (1)
  • Sameer Deshmukh (1) +
  • Niels Doucet (1) +
  • DWesl (4)
  • Isuru Fernando (1)
  • Ralf Gommers (4)
  • Matt Haberland (1)
  • Andrew Nelson (1)
  • Dimitri Papadopoulos Orfanos (1) +
  • Tirth Patel (3)
  • Tyler Reddy (46)
  • Pamphile Roy (7)
  • Niyas Sait (1) +
  • H. Vetinari (2)
  • Warren Weckesser (1)

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

v1.8.0

2 years ago

SciPy 1.8.0 Release Notes

SciPy 1.8.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.8.x branch, and on adding new features on the master branch.

This release requires Python 3.8+ and NumPy 1.17.3 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • A sparse array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases.
  • The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. It is currently default-off due to potential issues on Windows that we aim to resolve in the next release, but can be optionally enabled at runtime for friendly testing with an environment variable setting of USE_PROPACK=1.
  • A new scipy.stats.sampling submodule that leverages the UNU.RAN C library to sample from arbitrary univariate non-uniform continuous and discrete distributions
  • All namespaces that were private but happened to miss underscores in their names have been deprecated.

New features

scipy.fft improvements

Added an orthogonalize=None parameter to the real transforms in scipy.fft which controls whether the modified definition of DCT/DST is used without changing the overall scaling.

scipy.fft backend registration is now smoother, operating with a single registration call and no longer requiring a context manager.

scipy.integrate improvements

scipy.integrate.quad_vec introduces a new optional keyword-only argument, args. args takes in a tuple of extra arguments if any (default is args=()), which is then internally used to pass into the callable function (needing these extra arguments) which we wish to integrate.

scipy.interpolate improvements

scipy.interpolate.BSpline has a new method, design_matrix, which constructs a design matrix of b-splines in the sparse CSR format.

A new method from_cubic in BSpline class allows to convert a CubicSpline object to BSpline object.

scipy.linalg improvements

scipy.linalg gained three new public array structure investigation functions. scipy.linalg.bandwidth returns information about the bandedness of an array and can be used to test for triangular structure discovery, while scipy.linalg.issymmetric and scipy.linalg.ishermitian test the array for exact and approximate symmetric/Hermitian structure.

scipy.optimize improvements

scipy.optimize.check_grad introduces two new optional keyword only arguments, direction and seed. direction can take values, 'all' (default), in which case all the one hot direction vectors will be used for verifying the input analytical gradient function and 'random', in which case a random direction vector will be used for the same purpose. seed (default is None) can be used for reproducing the return value of check_grad function. It will be used only when direction='random'.

The scipy.optimize.minimize TNC method has been rewritten to use Cython bindings. This also fixes an issue with the callback altering the state of the optimization.

Added optional parameters target_accept_rate and stepwise_factor for adapative step size adjustment in basinhopping.

The epsilon argument to approx_fprime is now optional so that it may have a default value consistent with most other functions in scipy.optimize.

scipy.signal improvements

Add analog argument, default False, to zpk2sos, and add new pairing option 'minimal' to construct analog and minimal discrete SOS arrays. tf2sos uses zpk2sos; add analog argument here as well, and pass it on to zpk2sos.

savgol_coeffs and savgol_filter now work for even window lengths.

Added the Chirp Z-transform and Zoom FFT available as scipy.signal.CZT and scipy.signal.ZoomFFT.

scipy.sparse improvements

An array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases. Please refer to the scipy.sparse docstring for more information.

maximum_flow introduces optional keyword only argument, method which accepts either, 'edmonds-karp' (Edmonds Karp algorithm) or 'dinic' (Dinic's algorithm). Moreover, 'dinic' is used as default value for method which means that Dinic's algorithm is used for computing maximum flow unless specified. See, the comparison between the supported algorithms in this comment <https://github.com/scipy/scipy/pull/14358#issue-684212523>_.

Parameters atol, btol now default to 1e-6 in scipy.sparse.linalg.lsmr to match with default values in scipy.sparse.linalg.lsqr.

Add the Transpose-Free Quasi-Minimal Residual algorithm (TFQMR) for general nonsingular non-Hermitian linear systems in scipy.sparse.linalg.tfqmr.

The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. For some problems, this may be faster and/or more accurate than the default, ARPACK. PROPACK functionality is currently opt-in--you must specify USE_PROPACK=1 at runtime to use it due to potential issues on Windows that we aim to resolve in the next release.

sparse.linalg iterative solvers now have a nonzero initial guess option, which may be specified as x0 = 'Mb'.

The trace method has been added for sparse matrices.

scipy.spatial improvements

scipy.spatial.transform.Rotation now supports item assignment and has a new concatenate method.

Add scipy.spatial.distance.kulczynski1 in favour of scipy.spatial.distance.kulsinski which will be deprecated in the next release.

scipy.spatial.distance.minkowski now also supports 0<p<1.

scipy.special improvements

The new function scipy.special.log_expit computes the logarithm of the logistic sigmoid function. The function is formulated to provide accurate results for large positive and negative inputs, so it avoids the problems that would occur in the naive implementation log(expit(x)).

A suite of five new functions for elliptic integrals: scipy.special.ellipr{c,d,f,g,j}. These are the Carlson symmetric elliptic integrals <https://dlmf.nist.gov/19.16>_, which have computational advantages over the classical Legendre integrals. Previous versions included some elliptic integrals from the Cephes library (scipy.special.ellip{k,km1,kinc,e,einc}) but was missing the integral of third kind (Legendre's Pi), which can be evaluated using the new Carlson functions. The new Carlson elliptic integral functions can be evaluated in the complex plane, whereas the Cephes library's functions are only defined for real inputs.

Several defects in scipy.special.hyp2f1 have been corrected. Approximately correct values are now returned for z near exp(+-i*pi/3), fixing #8054 <https://github.com/scipy/scipy/issues/8054>. Evaluation for such z is now calculated through a series derived by López and Temme (2013) <https://arxiv.org/abs/1306.2046> that converges in these regions. In addition, degenerate cases with one or more of a, b, and/or c a non-positive integer are now handled in a manner consistent with mpmath's hyp2f1 implementation <https://mpmath.org/doc/current/functions/hypergeometric.html>, which fixes #7340 <https://github.com/scipy/scipy/issues/7340>. These fixes were made as part of an effort to rewrite the Fortran 77 implementation of hyp2f1 in Cython piece by piece. This rewriting is now roughly 50% complete.

scipy.stats improvements

scipy.stats.qmc.LatinHypercube introduces two new optional keyword-only arguments, optimization and strength. optimization is either None or random-cd. In the latter, random permutations are performed to improve the centered discrepancy. strength is either 1 or 2. 1 corresponds to the classical LHS while 2 has better sub-projection properties. This construction is referred to as an orthogonal array based LHS of strength 2. In both cases, the output is still a LHS.

scipy.stats.qmc.Halton is faster as the underlying Van der Corput sequence was ported to Cython.

The alternative parameter was added to the kendalltau and somersd functions to allow one-sided hypothesis testing. Similarly, the masked versions of skewtest, kurtosistest, ttest_1samp, ttest_ind, and ttest_rel now also have an alternative parameter.

Add scipy.stats.gzscore to calculate the geometrical z score.

Random variate generators to sample from arbitrary univariate non-uniform continuous and discrete distributions have been added to the new scipy.stats.sampling submodule. Implementations of a C library UNU.RAN <http://statmath.wu.ac.at/software/unuran/>_ are used for performance. The generators added are:

  • TransformedDensityRejection
  • DiscreteAliasUrn
  • NumericalInversePolynomial
  • DiscreteGuideTable
  • SimpleRatioUniforms

The binned_statistic set of functions now have improved performance for the std, min, max, and median statistic calculations.

somersd and _tau_b now have faster Pythran-based implementations.

Some general efficiency improvements to handling of nan values in several stats functions.

Added the Tukey-Kramer test as scipy.stats.tukey_hsd.

Improved performance of scipy.stats.argus rvs method.

Added the parameter keepdims to scipy.stats.variation and prevent the undesirable return of a masked array from the function in some cases.

permutation_test performs an exact or randomized permutation test of a given statistic on provided data.

Deprecated features

Clear split between public and private API

SciPy has always documented what its public API consisted of in :ref:its API reference docs <scipy-api>, however there never was a clear split between public and private namespaces in the code base. In this release, all namespaces that were private but happened to miss underscores in their names have been deprecated. These include (as examples, there are many more):

  • scipy.signal.spline
  • scipy.ndimage.filters
  • scipy.ndimage.fourier
  • scipy.ndimage.measurements
  • scipy.ndimage.morphology
  • scipy.ndimage.interpolation
  • scipy.sparse.linalg.solve
  • scipy.sparse.linalg.eigen
  • scipy.sparse.linalg.isolve

All functions and other objects in these namespaces that were meant to be public are accessible from their respective public namespace (e.g. scipy.signal). The design principle is that any public object must be accessible from a single namespace only; there are a few exceptions, mostly for historical reasons (e.g., stats and stats.distributions overlap). For other libraries aiming to provide a SciPy-compatible API, it is now unambiguous what namespace structure to follow. See gh-14360 <https://github.com/scipy/scipy/issues/14360>_ for more details.

Other deprecations

NumericalInverseHermite has been deprecated from scipy.stats and moved to the scipy.stats.sampling submodule. It now uses the C implementation of the UNU.RAN library so the result of methods like ppf may vary slightly. Parameter tol has been deprecated and renamed to u_resolution. The parameter max_intervals has also been deprecated and will be removed in a future release of SciPy.

Backwards incompatible changes

  • SciPy has raised the minimum compiler versions to GCC 6.3 on linux and VS2019 on windows. In particular, this means that SciPy may now use C99 and C++14 features. For more details see here <https://docs.scipy.org/doc/scipy/reference/dev/toolchain.html>_.
  • The result for empty bins for scipy.stats.binned_statistic with the builtin 'std' metric is now nan, for consistency with np.std.
  • The function scipy.spatial.distance.wminkowski has been removed. To achieve the same results as before, please use the minkowski distance function with the (optional) w= keyword-argument for the given weight.

Other changes

Some Fortran 77 code was modernized to be compatible with NAG's nagfor Fortran compiler (see, e.g., PR 13229 <https://github.com/scipy/scipy/pull/13229>_).

threadpoolctl may now be used by our test suite to substantially improve the efficiency of parallel test suite runs.

Authors

  • @endolith
  • adamadanandy +
  • akeemlh +
  • Anton Akhmerov
  • Marvin Albert +
  • alegresor +
  • Andrew Annex +
  • Pantelis Antonoudiou +
  • Ross Barnowski +
  • Christoph Baumgarten
  • Stephen Becker +
  • Nickolai Belakovski
  • Peter Bell
  • berberto +
  • Georgii Bocharov +
  • Evgeni Burovski
  • Matthias Bussonnier
  • CJ Carey
  • Justin Charlong +
  • Hood Chatham +
  • Dennis Collaris +
  • David Cottrell +
  • cruyffturn +
  • da-woods +
  • Anirudh Dagar
  • Tiger Du +
  • Thomas Duvernay
  • Dani El-Ayyass +
  • Castedo Ellerman +
  • Donnie Erb +
  • Andreas Esders-Kopecky +
  • Livio F +
  • Isuru Fernando
  • Evelyn Fitzgerald +
  • Sara Fridovich-Keil +
  • Mark E Fuller +
  • Ralf Gommers
  • Kevin Richard Green +
  • guiweber +
  • Nitish Gupta +
  • h-vetinari
  • Matt Haberland
  • J. Hariharan +
  • Charles Harris
  • Jonathan Helgert +
  • Trever Hines
  • Nadav Horesh
  • Ian Hunt-Isaak +
  • ich +
  • Itrimel +
  • Jan-Hendrik Müller +
  • Jebby993 +
  • Yikun Jiang +
  • Evan W Jones +
  • Nathaniel Jones +
  • Jeffrey Kelling +
  • Malik Idrees Hasan Khan +
  • Paul Kienzle
  • Sergey B Kirpichev
  • Kadatatlu Kishore +
  • Andrew Knyazev
  • Ravin Kumar +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Tim Leslie
  • lezcano +
  • Xingyu Liu
  • Christian Lorentzen
  • Lorenzo +
  • Smit Lunagariya +
  • Lv101Magikarp +
  • Yair M +
  • Cong Ma
  • Lorenzo Maffioli +
  • majiang +
  • Brian McFee +
  • Nicholas McKibben
  • John Speed Meyers +
  • millivolt9 +
  • Jarrod Millman
  • Harsh Mishra +
  • Boaz Mohar +
  • naelsondouglas +
  • Andrew Nelson
  • Nico Schlömer
  • Thomas Nowotny +
  • nullptr +
  • Teddy Ort +
  • Nick Papior
  • ParticularMiner +
  • Dima Pasechnik
  • Tirth Patel
  • Matti Picus
  • Ilhan Polat
  • Adrian Price-Whelan +
  • Quentin Barthélemy +
  • Sundar R +
  • Judah Rand +
  • Tyler Reddy
  • Renal-Of-Loon +
  • Frederic Renner +
  • Pamphile Roy
  • Bharath Saiguhan +
  • Atsushi Sakai
  • Eric Schanet +
  • Sebastian Wallkötter
  • serge-sans-paille
  • Reshama Shaikh +
  • Namami Shanker
  • siddhantwahal +
  • Walter Simson +
  • Gagandeep Singh +
  • Leo C. Stein +
  • Albert Steppi
  • Kai Striega
  • Diana Sukhoverkhova
  • Søren Fuglede Jørgensen
  • Masayuki Takagi +
  • Mike Taves
  • Ben Thompson +
  • Bas van Beek
  • Jacob Vanderplas
  • Dhruv Vats +
  • H. Vetinari +
  • Thomas Viehmann +
  • Pauli Virtanen
  • Vlad +
  • Arthur Volant
  • Samuel Wallan
  • Stefan van der Walt
  • Warren Weckesser
  • Josh Wilson
  • Haoyin Xu +
  • Rory Yorke
  • Egor Zemlyanoy
  • Gang Zhao +
  • 赵丰 (Zhao Feng) +

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

v1.8.0rc4

2 years ago

SciPy 1.8.0 Release Notes

Note: SciPy 1.8.0 is not released yet!

SciPy 1.8.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.8.x branch, and on adding new features on the master branch.

This release requires Python 3.8+ and NumPy 1.17.3 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • A sparse array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases.
  • The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. It is currently default-off due to potential issues on Windows that we aim to resolve in the next release, but can be optionally enabled at runtime for friendly testing with an environment variable setting of USE_PROPACK=1.
  • A new scipy.stats.sampling submodule that leverages the UNU.RAN C library to sample from arbitrary univariate non-uniform continuous and discrete distributions
  • All namespaces that were private but happened to miss underscores in their names have been deprecated.

New features

scipy.fft improvements

Added an orthogonalize=None parameter to the real transforms in scipy.fft which controls whether the modified definition of DCT/DST is used without changing the overall scaling.

scipy.fft backend registration is now smoother, operating with a single registration call and no longer requiring a context manager.

scipy.integrate improvements

scipy.integrate.quad_vec introduces a new optional keyword-only argument, args. args takes in a tuple of extra arguments if any (default is args=()), which is then internally used to pass into the callable function (needing these extra arguments) which we wish to integrate.

scipy.interpolate improvements

scipy.interpolate.BSpline has a new method, design_matrix, which constructs a design matrix of b-splines in the sparse CSR format.

A new method from_cubic in BSpline class allows to convert a CubicSpline object to BSpline object.

scipy.linalg improvements

scipy.linalg gained three new public array structure investigation functions. scipy.linalg.bandwidth returns information about the bandedness of an array and can be used to test for triangular structure discovery, while scipy.linalg.issymmetric and scipy.linalg.ishermitian test the array for exact and approximate symmetric/Hermitian structure.

scipy.optimize improvements

scipy.optimize.check_grad introduces two new optional keyword only arguments, direction and seed. direction can take values, 'all' (default), in which case all the one hot direction vectors will be used for verifying the input analytical gradient function and 'random', in which case a random direction vector will be used for the same purpose. seed (default is None) can be used for reproducing the return value of check_grad function. It will be used only when direction='random'.

The scipy.optimize.minimize TNC method has been rewritten to use Cython bindings. This also fixes an issue with the callback altering the state of the optimization.

Added optional parameters target_accept_rate and stepwise_factor for adapative step size adjustment in basinhopping.

The epsilon argument to approx_fprime is now optional so that it may have a default value consistent with most other functions in scipy.optimize.

scipy.signal improvements

Add analog argument, default False, to zpk2sos, and add new pairing option 'minimal' to construct analog and minimal discrete SOS arrays. tf2sos uses zpk2sos; add analog argument here as well, and pass it on to zpk2sos.

savgol_coeffs and savgol_filter now work for even window lengths.

Added the Chirp Z-transform and Zoom FFT available as scipy.signal.CZT and scipy.signal.ZoomFFT.

scipy.sparse improvements

An array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases. Please refer to the scipy.sparse docstring for more information.

maximum_flow introduces optional keyword only argument, method which accepts either, 'edmonds-karp' (Edmonds Karp algorithm) or 'dinic' (Dinic's algorithm). Moreover, 'dinic' is used as default value for method which means that Dinic's algorithm is used for computing maximum flow unless specified. See, the comparison between the supported algorithms in this comment <https://github.com/scipy/scipy/pull/14358#issue-684212523>_.

Parameters atol, btol now default to 1e-6 in scipy.sparse.linalg.lsmr to match with default values in scipy.sparse.linalg.lsqr.

Add the Transpose-Free Quasi-Minimal Residual algorithm (TFQMR) for general nonsingular non-Hermitian linear systems in scipy.sparse.linalg.tfqmr.

The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. For some problems, this may be faster and/or more accurate than the default, ARPACK. PROPACK functionality is currently opt-in--you must specify USE_PROPACK=1 at runtime to use it due to potential issues on Windows that we aim to resolve in the next release.

sparse.linalg iterative solvers now have a nonzero initial guess option, which may be specified as x0 = 'Mb'.

The trace method has been added for sparse matrices.

scipy.spatial improvements

scipy.spatial.transform.Rotation now supports item assignment and has a new concatenate method.

Add scipy.spatial.distance.kulczynski1 in favour of scipy.spatial.distance.kulsinski which will be deprecated in the next release.

scipy.spatial.distance.minkowski now also supports 0<p<1.

scipy.special improvements

The new function scipy.special.log_expit computes the logarithm of the logistic sigmoid function. The function is formulated to provide accurate results for large positive and negative inputs, so it avoids the problems that would occur in the naive implementation log(expit(x)).

A suite of five new functions for elliptic integrals: scipy.special.ellipr{c,d,f,g,j}. These are the Carlson symmetric elliptic integrals <https://dlmf.nist.gov/19.16>_, which have computational advantages over the classical Legendre integrals. Previous versions included some elliptic integrals from the Cephes library (scipy.special.ellip{k,km1,kinc,e,einc}) but was missing the integral of third kind (Legendre's Pi), which can be evaluated using the new Carlson functions. The new Carlson elliptic integral functions can be evaluated in the complex plane, whereas the Cephes library's functions are only defined for real inputs.

Several defects in scipy.special.hyp2f1 have been corrected. Approximately correct values are now returned for z near exp(+-i*pi/3), fixing #8054 <https://github.com/scipy/scipy/issues/8054>. Evaluation for such z is now calculated through a series derived by López and Temme (2013) <https://arxiv.org/abs/1306.2046> that converges in these regions. In addition, degenerate cases with one or more of a, b, and/or c a non-positive integer are now handled in a manner consistent with mpmath's hyp2f1 implementation <https://mpmath.org/doc/current/functions/hypergeometric.html>, which fixes #7340 <https://github.com/scipy/scipy/issues/7340>. These fixes were made as part of an effort to rewrite the Fortran 77 implementation of hyp2f1 in Cython piece by piece. This rewriting is now roughly 50% complete.

scipy.stats improvements

scipy.stats.qmc.LatinHypercube introduces two new optional keyword-only arguments, optimization and strength. optimization is either None or random-cd. In the latter, random permutations are performed to improve the centered discrepancy. strength is either 1 or 2. 1 corresponds to the classical LHS while 2 has better sub-projection properties. This construction is referred to as an orthogonal array based LHS of strength 2. In both cases, the output is still a LHS.

scipy.stats.qmc.Halton is faster as the underlying Van der Corput sequence was ported to Cython.

The alternative parameter was added to the kendalltau and somersd functions to allow one-sided hypothesis testing. Similarly, the masked versions of skewtest, kurtosistest, ttest_1samp, ttest_ind, and ttest_rel now also have an alternative parameter.

Add scipy.stats.gzscore to calculate the geometrical z score.

Random variate generators to sample from arbitrary univariate non-uniform continuous and discrete distributions have been added to the new scipy.stats.sampling submodule. Implementations of a C library UNU.RAN <http://statmath.wu.ac.at/software/unuran/>_ are used for performance. The generators added are:

  • TransformedDensityRejection
  • DiscreteAliasUrn
  • NumericalInversePolynomial
  • DiscreteGuideTable
  • SimpleRatioUniforms

The binned_statistic set of functions now have improved performance for the std, min, max, and median statistic calculations.

somersd and _tau_b now have faster Pythran-based implementations.

Some general efficiency improvements to handling of nan values in several stats functions.

Added the Tukey-Kramer test as scipy.stats.tukey_hsd.

Improved performance of scipy.stats.argus rvs method.

Added the parameter keepdims to scipy.stats.variation and prevent the undesirable return of a masked array from the function in some cases.

permutation_test performs an exact or randomized permutation test of a given statistic on provided data.

Deprecated features

Clear split between public and private API

SciPy has always documented what its public API consisted of in :ref:its API reference docs <scipy-api>, however there never was a clear split between public and private namespaces in the code base. In this release, all namespaces that were private but happened to miss underscores in their names have been deprecated. These include (as examples, there are many more):

  • scipy.signal.spline
  • scipy.ndimage.filters
  • scipy.ndimage.fourier
  • scipy.ndimage.measurements
  • scipy.ndimage.morphology
  • scipy.ndimage.interpolation
  • scipy.sparse.linalg.solve
  • scipy.sparse.linalg.eigen
  • scipy.sparse.linalg.isolve

All functions and other objects in these namespaces that were meant to be public are accessible from their respective public namespace (e.g. scipy.signal). The design principle is that any public object must be accessible from a single namespace only; there are a few exceptions, mostly for historical reasons (e.g., stats and stats.distributions overlap). For other libraries aiming to provide a SciPy-compatible API, it is now unambiguous what namespace structure to follow. See gh-14360 <https://github.com/scipy/scipy/issues/14360>_ for more details.

Other deprecations

NumericalInverseHermite has been deprecated from scipy.stats and moved to the scipy.stats.sampling submodule. It now uses the C implementation of the UNU.RAN library so the result of methods like ppf may vary slightly. Parameter tol has been deprecated and renamed to u_resolution. The parameter max_intervals has also been deprecated and will be removed in a future release of SciPy.

Backwards incompatible changes

  • SciPy has raised the minimum compiler versions to GCC 6.3 on linux and VS2019 on windows. In particular, this means that SciPy may now use C99 and C++14 features. For more details see here <https://docs.scipy.org/doc/scipy/reference/dev/toolchain.html>_.
  • The result for empty bins for scipy.stats.binned_statistic with the builtin 'std' metric is now nan, for consistency with np.std.
  • The function scipy.spatial.distance.wminkowski has been removed. To achieve the same results as before, please use the minkowski distance function with the (optional) w= keyword-argument for the given weight.

Other changes

Some Fortran 77 code was modernized to be compatible with NAG's nagfor Fortran compiler (see, e.g., PR 13229 <https://github.com/scipy/scipy/pull/13229>_).

threadpoolctl may now be used by our test suite to substantially improve the efficiency of parallel test suite runs.

Authors

  • @endolith
  • adamadanandy +
  • akeemlh +
  • Anton Akhmerov
  • Marvin Albert +
  • alegresor +
  • Andrew Annex +
  • Pantelis Antonoudiou +
  • Ross Barnowski +
  • Christoph Baumgarten
  • Stephen Becker +
  • Nickolai Belakovski
  • Peter Bell
  • berberto +
  • Georgii Bocharov +
  • Evgeni Burovski
  • Matthias Bussonnier
  • CJ Carey
  • Justin Charlong +
  • Hood Chatham +
  • Dennis Collaris +
  • David Cottrell +
  • cruyffturn +
  • da-woods +
  • Anirudh Dagar
  • Tiger Du +
  • Thomas Duvernay
  • Dani El-Ayyass +
  • Castedo Ellerman +
  • Donnie Erb +
  • Andreas Esders-Kopecky +
  • Livio F +
  • Isuru Fernando
  • Evelyn Fitzgerald +
  • Sara Fridovich-Keil +
  • Mark E Fuller +
  • Ralf Gommers
  • Kevin Richard Green +
  • guiweber +
  • Nitish Gupta +
  • h-vetinari
  • Matt Haberland
  • J. Hariharan +
  • Charles Harris
  • Jonathan Helgert +
  • Trever Hines
  • Nadav Horesh
  • Ian Hunt-Isaak +
  • ich +
  • Itrimel +
  • Jan-Hendrik Müller +
  • Jebby993 +
  • Yikun Jiang +
  • Evan W Jones +
  • Nathaniel Jones +
  • Jeffrey Kelling +
  • Malik Idrees Hasan Khan +
  • Paul Kienzle
  • Sergey B Kirpichev
  • Kadatatlu Kishore +
  • Andrew Knyazev
  • Ravin Kumar +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Tim Leslie
  • lezcano +
  • Xingyu Liu
  • Christian Lorentzen
  • Lorenzo +
  • Smit Lunagariya +
  • Lv101Magikarp +
  • Yair M +
  • Cong Ma
  • Lorenzo Maffioli +
  • majiang +
  • Brian McFee +
  • Nicholas McKibben
  • John Speed Meyers +
  • millivolt9 +
  • Jarrod Millman
  • Harsh Mishra +
  • Boaz Mohar +
  • naelsondouglas +
  • Andrew Nelson
  • Nico Schlömer
  • Thomas Nowotny +
  • nullptr +
  • Teddy Ort +
  • Nick Papior
  • ParticularMiner +
  • Dima Pasechnik
  • Tirth Patel
  • Matti Picus
  • Ilhan Polat
  • Adrian Price-Whelan +
  • Quentin Barthélemy +
  • Sundar R +
  • Judah Rand +
  • Tyler Reddy
  • Renal-Of-Loon +
  • Frederic Renner +
  • Pamphile Roy
  • Bharath Saiguhan +
  • Atsushi Sakai
  • Eric Schanet +
  • Sebastian Wallkötter
  • serge-sans-paille
  • Reshama Shaikh +
  • Namami Shanker
  • siddhantwahal +
  • Walter Simson +
  • Gagandeep Singh +
  • Leo C. Stein +
  • Albert Steppi
  • Kai Striega
  • Diana Sukhoverkhova
  • Søren Fuglede Jørgensen
  • Masayuki Takagi +
  • Mike Taves
  • Ben Thompson +
  • Bas van Beek
  • Jacob Vanderplas
  • Dhruv Vats +
  • H. Vetinari +
  • Thomas Viehmann +
  • Pauli Virtanen
  • Vlad +
  • Arthur Volant
  • Samuel Wallan
  • Stefan van der Walt
  • Warren Weckesser
  • Josh Wilson
  • Haoyin Xu +
  • Rory Yorke
  • Egor Zemlyanoy
  • Gang Zhao +
  • 赵丰 (Zhao Feng) +

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

v1.8.0rc3

2 years ago

SciPy 1.8.0 Release Notes

Note: SciPy 1.8.0 is not released yet!

SciPy 1.8.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.8.x branch, and on adding new features on the master branch.

This release requires Python 3.8+ and NumPy 1.17.3 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • A sparse array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases.
  • The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. It is currently default-off due to potential issues on Windows that we aim to resolve in the next release, but can be optionally enabled at runtime for friendly testing with an environment variable setting of USE_PROPACK=1.
  • A new scipy.stats.sampling submodule that leverages the UNU.RAN C library to sample from arbitrary univariate non-uniform continuous and discrete distributions
  • All namespaces that were private but happened to miss underscores in their names have been deprecated.

New features

scipy.fft improvements

Added an orthogonalize=None parameter to the real transforms in scipy.fft which controls whether the modified definition of DCT/DST is used without changing the overall scaling.

scipy.fft backend registration is now smoother, operating with a single registration call and no longer requiring a context manager.

scipy.integrate improvements

scipy.integrate.quad_vec introduces a new optional keyword-only argument, args. args takes in a tuple of extra arguments if any (default is args=()), which is then internally used to pass into the callable function (needing these extra arguments) which we wish to integrate.

scipy.interpolate improvements

scipy.interpolate.BSpline has a new method, design_matrix, which constructs a design matrix of b-splines in the sparse CSR format.

A new method from_cubic in BSpline class allows to convert a CubicSpline object to BSpline object.

scipy.linalg improvements

scipy.linalg gained three new public array structure investigation functions. scipy.linalg.bandwidth returns information about the bandedness of an array and can be used to test for triangular structure discovery, while scipy.linalg.issymmetric and scipy.linalg.ishermitian test the array for exact and approximate symmetric/Hermitian structure.

scipy.optimize improvements

scipy.optimize.check_grad introduces two new optional keyword only arguments, direction and seed. direction can take values, 'all' (default), in which case all the one hot direction vectors will be used for verifying the input analytical gradient function and 'random', in which case a random direction vector will be used for the same purpose. seed (default is None) can be used for reproducing the return value of check_grad function. It will be used only when direction='random'.

The scipy.optimize.minimize TNC method has been rewritten to use Cython bindings. This also fixes an issue with the callback altering the state of the optimization.

Added optional parameters target_accept_rate and stepwise_factor for adapative step size adjustment in basinhopping.

The epsilon argument to approx_fprime is now optional so that it may have a default value consistent with most other functions in scipy.optimize.

scipy.signal improvements

Add analog argument, default False, to zpk2sos, and add new pairing option 'minimal' to construct analog and minimal discrete SOS arrays. tf2sos uses zpk2sos; add analog argument here as well, and pass it on to zpk2sos.

savgol_coeffs and savgol_filter now work for even window lengths.

Added the Chirp Z-transform and Zoom FFT available as scipy.signal.CZT and scipy.signal.ZoomFFT.

scipy.sparse improvements

An array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases. Please refer to the scipy.sparse docstring for more information.

maximum_flow introduces optional keyword only argument, method which accepts either, 'edmonds-karp' (Edmonds Karp algorithm) or 'dinic' (Dinic's algorithm). Moreover, 'dinic' is used as default value for method which means that Dinic's algorithm is used for computing maximum flow unless specified. See, the comparison between the supported algorithms in this comment.

Parameters atol, btol now default to 1e-6 in scipy.sparse.linalg.lsmr to match with default values in scipy.sparse.linalg.lsqr.

Add the Transpose-Free Quasi-Minimal Residual algorithm (TFQMR) for general nonsingular non-Hermitian linear systems in scipy.sparse.linalg.tfqmr.

The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. For some problems, this may be faster and/or more accurate than the default, ARPACK. PROPACK functionality is currently opt-in--you must specify USE_PROPACK=1 at runtime to use it due to potential issues on Windows that we aim to resolve in the next release.

sparse.linalg iterative solvers now have a nonzero initial guess option, which may be specified as x0 = 'Mb'.

The trace method has been added for sparse matrices.

scipy.spatial improvements

scipy.spatial.transform.Rotation now supports item assignment and has a new concatenate method.

Add scipy.spatial.distance.kulczynski1 in favour of scipy.spatial.distance.kulsinski which will be deprecated in the next release.

scipy.spatial.distance.minkowski now also supports 0<p<1.

scipy.special improvements

The new function scipy.special.log_expit computes the logarithm of the logistic sigmoid function. The function is formulated to provide accurate results for large positive and negative inputs, so it avoids the problems that would occur in the naive implementation log(expit(x)).

A suite of five new functions for elliptic integrals: scipy.special.ellipr{c,d,f,g,j}. These are the Carlson symmetric elliptic integrals <https://dlmf.nist.gov/19.16>_, which have computational advantages over the classical Legendre integrals. Previous versions included some elliptic integrals from the Cephes library (scipy.special.ellip{k,km1,kinc,e,einc}) but was missing the integral of third kind (Legendre's Pi), which can be evaluated using the new Carlson functions. The new Carlson elliptic integral functions can be evaluated in the complex plane, whereas the Cephes library's functions are only defined for real inputs.

Several defects in scipy.special.hyp2f1 have been corrected. Approximately correct values are now returned for z near exp(+-i*pi/3), fixing #8054 <https://github.com/scipy/scipy/issues/8054>. Evaluation for such z is now calculated through a series derived by López and Temme (2013) <https://arxiv.org/abs/1306.2046> that converges in these regions. In addition, degenerate cases with one or more of a, b, and/or c a non-positive integer are now handled in a manner consistent with mpmath's hyp2f1 implementation <https://mpmath.org/doc/current/functions/hypergeometric.html>, which fixes #7340 <https://github.com/scipy/scipy/issues/7340>. These fixes were made as part of an effort to rewrite the Fortran 77 implementation of hyp2f1 in Cython piece by piece. This rewriting is now roughly 50% complete.

scipy.stats improvements

scipy.stats.qmc.LatinHypercube introduces two new optional keyword-only arguments, optimization and strength. optimization is either None or random-cd. In the latter, random permutations are performed to improve the centered discrepancy. strength is either 1 or 2. 1 corresponds to the classical LHS while 2 has better sub-projection properties. This construction is referred to as an orthogonal array based LHS of strength 2. In both cases, the output is still a LHS.

scipy.stats.qmc.Halton is faster as the underlying Van der Corput sequence was ported to Cython.

The alternative parameter was added to the kendalltau and somersd functions to allow one-sided hypothesis testing. Similarly, the masked versions of skewtest, kurtosistest, ttest_1samp, ttest_ind, and ttest_rel now also have an alternative parameter.

Add scipy.stats.gzscore to calculate the geometrical z score.

Random variate generators to sample from arbitrary univariate non-uniform continuous and discrete distributions have been added to the new scipy.stats.sampling submodule. Implementations of a C library UNU.RAN <http://statmath.wu.ac.at/software/unuran/>_ are used for performance. The generators added are:

  • TransformedDensityRejection
  • DiscreteAliasUrn
  • NumericalInversePolynomial
  • DiscreteGuideTable
  • SimpleRatioUniforms

The binned_statistic set of functions now have improved performance for the std, min, max, and median statistic calculations.

somersd and _tau_b now have faster Pythran-based implementations.

Some general efficiency improvements to handling of nan values in several stats functions.

Added the Tukey-Kramer test as scipy.stats.tukey_hsd.

Improved performance of scipy.stats.argus rvs method.

Added the parameter keepdims to scipy.stats.variation and prevent the undesirable return of a masked array from the function in some cases.

permutation_test performs an exact or randomized permutation test of a given statistic on provided data.

Deprecated features

Clear split between public and private API

SciPy has always documented what its public API consisted of in :ref:its API reference docs <scipy-api>, however there never was a clear split between public and private namespaces in the code base. In this release, all namespaces that were private but happened to miss underscores in their names have been deprecated. These include (as examples, there are many more):

  • scipy.signal.spline
  • scipy.ndimage.filters
  • scipy.ndimage.fourier
  • scipy.ndimage.measurements
  • scipy.ndimage.morphology
  • scipy.ndimage.interpolation
  • scipy.sparse.linalg.solve
  • scipy.sparse.linalg.eigen
  • scipy.sparse.linalg.isolve

All functions and other objects in these namespaces that were meant to be public are accessible from their respective public namespace (e.g. scipy.signal). The design principle is that any public object must be accessible from a single namespace only; there are a few exceptions, mostly for historical reasons (e.g., stats and stats.distributions overlap). For other libraries aiming to provide a SciPy-compatible API, it is now unambiguous what namespace structure to follow. See gh-14360 <https://github.com/scipy/scipy/issues/14360>_ for more details.

Other deprecations

NumericalInverseHermite has been deprecated from scipy.stats and moved to the scipy.stats.sampling submodule. It now uses the C implementation of the UNU.RAN library so the result of methods like ppf may vary slightly. Parameter tol has been deprecated and renamed to u_resolution. The parameter max_intervals has also been deprecated and will be removed in a future release of SciPy.

Backwards incompatible changes

  • SciPy has raised the minimum compiler versions to GCC 6.3 on linux and VS2019 on windows. In particular, this means that SciPy may now use C99 and C++14 features. For more details see here <https://docs.scipy.org/doc/scipy/reference/dev/toolchain.html>_.
  • The result for empty bins for scipy.stats.binned_statistic with the builtin 'std' metric is now nan, for consistency with np.std.
  • The function scipy.spatial.distance.wminkowski has been removed. To achieve the same results as before, please use the minkowski distance function with the (optional) w= keyword-argument for the given weight.

Other changes

Some Fortran 77 code was modernized to be compatible with NAG's nagfor Fortran compiler (see, e.g., PR 13229 <https://github.com/scipy/scipy/pull/13229>_).

threadpoolctl may now be used by our test suite to substantially improve the efficiency of parallel test suite runs.

Authors

  • @endolith
  • adamadanandy +
  • akeemlh +
  • Anton Akhmerov
  • Marvin Albert +
  • alegresor +
  • Andrew Annex +
  • Pantelis Antonoudiou +
  • Ross Barnowski +
  • Christoph Baumgarten
  • Stephen Becker +
  • Nickolai Belakovski
  • Peter Bell
  • berberto +
  • Georgii Bocharov +
  • Evgeni Burovski
  • Matthias Bussonnier
  • CJ Carey
  • Justin Charlong +
  • Hood Chatham +
  • Dennis Collaris +
  • David Cottrell +
  • cruyffturn +
  • da-woods +
  • Anirudh Dagar
  • Tiger Du +
  • Thomas Duvernay
  • Dani El-Ayyass +
  • Castedo Ellerman +
  • Donnie Erb +
  • Andreas Esders-Kopecky +
  • Livio F +
  • Isuru Fernando
  • Evelyn Fitzgerald +
  • Sara Fridovich-Keil +
  • Mark E Fuller +
  • Ralf Gommers
  • Kevin Richard Green +
  • guiweber +
  • Nitish Gupta +
  • h-vetinari
  • Matt Haberland
  • J. Hariharan +
  • Charles Harris
  • Jonathan Helgert +
  • Trever Hines
  • Nadav Horesh
  • Ian Hunt-Isaak +
  • ich +
  • Itrimel +
  • Jan-Hendrik Müller +
  • Jebby993 +
  • Yikun Jiang +
  • Evan W Jones +
  • Nathaniel Jones +
  • Jeffrey Kelling +
  • Malik Idrees Hasan Khan +
  • Paul Kienzle
  • Sergey B Kirpichev
  • Kadatatlu Kishore +
  • Andrew Knyazev
  • Ravin Kumar +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Tim Leslie
  • lezcano +
  • Xingyu Liu
  • Christian Lorentzen
  • Lorenzo +
  • Smit Lunagariya +
  • Lv101Magikarp +
  • Yair M +
  • Cong Ma
  • Lorenzo Maffioli +
  • majiang +
  • Brian McFee +
  • Nicholas McKibben
  • John Speed Meyers +
  • millivolt9 +
  • Jarrod Millman
  • Harsh Mishra +
  • Boaz Mohar +
  • naelsondouglas +
  • Andrew Nelson
  • Nico Schlömer
  • Thomas Nowotny +
  • nullptr +
  • Teddy Ort +
  • Nick Papior
  • ParticularMiner +
  • Dima Pasechnik
  • Tirth Patel
  • Matti Picus
  • Ilhan Polat
  • Adrian Price-Whelan +
  • Quentin Barthélemy +
  • Sundar R +
  • Judah Rand +
  • Tyler Reddy
  • Renal-Of-Loon +
  • Frederic Renner +
  • Pamphile Roy
  • Bharath Saiguhan +
  • Atsushi Sakai
  • Eric Schanet +
  • Sebastian Wallkötter
  • serge-sans-paille
  • Reshama Shaikh +
  • Namami Shanker
  • siddhantwahal +
  • Walter Simson +
  • Gagandeep Singh +
  • Leo C. Stein +
  • Albert Steppi
  • Kai Striega
  • Diana Sukhoverkhova
  • Søren Fuglede Jørgensen
  • Masayuki Takagi +
  • Mike Taves
  • Ben Thompson +
  • Bas van Beek
  • Jacob Vanderplas
  • Dhruv Vats +
  • H. Vetinari +
  • Thomas Viehmann +
  • Pauli Virtanen
  • Vlad +
  • Arthur Volant
  • Samuel Wallan
  • Stefan van der Walt
  • Warren Weckesser
  • Josh Wilson
  • Haoyin Xu +
  • Rory Yorke
  • Egor Zemlyanoy
  • Gang Zhao +
  • 赵丰 (Zhao Feng) +

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

v1.8.0rc2

2 years ago

SciPy 1.8.0 Release Notes

Note: SciPy 1.8.0 is not released yet!

SciPy 1.8.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.8.x branch, and on adding new features on the master branch.

This release requires Python 3.8+ and NumPy 1.17.3 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • A sparse array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases.
  • The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'.
  • A new scipy.stats.sampling submodule that leverages the UNU.RAN C library to sample from arbitrary univariate non-uniform continuous and discrete distributions
  • All namespaces that were private but happened to miss underscores in their names have been deprecated.

New features

scipy.fft improvements

Added an orthogonalize=None parameter to the real transforms in scipy.fft which controls whether the modified definition of DCT/DST is used without changing the overall scaling.

scipy.fft backend registration is now smoother, operating with a single registration call and no longer requiring a context manager.

scipy.integrate improvements

scipy.integrate.quad_vec introduces a new optional keyword-only argument, args. args takes in a tuple of extra arguments if any (default is args=()), which is then internally used to pass into the callable function (needing these extra arguments) which we wish to integrate.

scipy.interpolate improvements

scipy.interpolate.BSpline has a new method, design_matrix, which constructs a design matrix of b-splines in the sparse CSR format.

A new method from_cubic in BSpline class allows to convert a CubicSpline object to BSpline object.

scipy.linalg improvements

scipy.linalg gained three new public array structure investigation functions. scipy.linalg.bandwidth returns information about the bandedness of an array and can be used to test for triangular structure discovery, while scipy.linalg.issymmetric and scipy.linalg.ishermitian test the array for exact and approximate symmetric/Hermitian structure.

scipy.optimize improvements

scipy.optimize.check_grad introduces two new optional keyword only arguments, direction and seed. direction can take values, 'all' (default), in which case all the one hot direction vectors will be used for verifying the input analytical gradient function and 'random', in which case a random direction vector will be used for the same purpose. seed (default is None) can be used for reproducing the return value of check_grad function. It will be used only when direction='random'.

The scipy.optimize.minimize TNC method has been rewritten to use Cython bindings. This also fixes an issue with the callback altering the state of the optimization.

Added optional parameters target_accept_rate and stepwise_factor for adapative step size adjustment in basinhopping.

The epsilon argument to approx_fprime is now optional so that it may have a default value consistent with most other functions in scipy.optimize.

scipy.signal improvements

Add analog argument, default False, to zpk2sos, and add new pairing option 'minimal' to construct analog and minimal discrete SOS arrays. tf2sos uses zpk2sos; add analog argument here as well, and pass it on to zpk2sos.

savgol_coeffs and savgol_filter now work for even window lengths.

Added the Chirp Z-transform and Zoom FFT available as scipy.signal.CZT and scipy.signal.ZoomFFT.

scipy.sparse improvements

An array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases. Please refer to the scipy.sparse docstring for more information.

maximum_flow introduces optional keyword only argument, method which accepts either, 'edmonds-karp' (Edmonds Karp algorithm) or 'dinic' (Dinic's algorithm). Moreover, 'dinic' is used as default value for method which means that Dinic's algorithm is used for computing maximum flow unless specified. See, the comparison between the supported algorithms in this comment <https://github.com/scipy/scipy/pull/14358#issue-684212523>_.

Parameters atol, btol now default to 1e-6 in scipy.sparse.linalg.lsmr to match with default values in scipy.sparse.linalg.lsqr.

Add the Transpose-Free Quasi-Minimal Residual algorithm (TFQMR) for general nonsingular non-Hermitian linear systems in scipy.sparse.linalg.tfqmr.

The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. For some problems, this may be faster and/or more accurate than the default, ARPACK.

sparse.linalg iterative solvers now have a nonzero initial guess option, which may be specified as x0 = 'Mb'.

The trace method has been added for sparse matrices.

scipy.spatial improvements

scipy.spatial.transform.Rotation now supports item assignment and has a new concatenate method.

Add scipy.spatial.distance.kulczynski1 in favour of scipy.spatial.distance.kulsinski which will be deprecated in the next release.

scipy.spatial.distance.minkowski now also supports 0<p<1.

scipy.special improvements

The new function scipy.special.log_expit computes the logarithm of the logistic sigmoid function. The function is formulated to provide accurate results for large positive and negative inputs, so it avoids the problems that would occur in the naive implementation log(expit(x)).

A suite of five new functions for elliptic integrals: scipy.special.ellipr{c,d,f,g,j}. These are the Carlson symmetric elliptic integrals <https://dlmf.nist.gov/19.16>_, which have computational advantages over the classical Legendre integrals. Previous versions included some elliptic integrals from the Cephes library (scipy.special.ellip{k,km1,kinc,e,einc}) but was missing the integral of third kind (Legendre's Pi), which can be evaluated using the new Carlson functions. The new Carlson elliptic integral functions can be evaluated in the complex plane, whereas the Cephes library's functions are only defined for real inputs.

Several defects in scipy.special.hyp2f1 have been corrected. Approximately correct values are now returned for z near exp(+-i*pi/3), fixing #8054 <https://github.com/scipy/scipy/issues/8054>. Evaluation for such z is now calculated through a series derived by López and Temme (2013) <https://arxiv.org/abs/1306.2046> that converges in these regions. In addition, degenerate cases with one or more of a, b, and/or c a non-positive integer are now handled in a manner consistent with mpmath's hyp2f1 implementation <https://mpmath.org/doc/current/functions/hypergeometric.html>, which fixes #7340 <https://github.com/scipy/scipy/issues/7340>. These fixes were made as part of an effort to rewrite the Fortran 77 implementation of hyp2f1 in Cython piece by piece. This rewriting is now roughly 50% complete.

scipy.stats improvements

scipy.stats.qmc.LatinHypercube introduces two new optional keyword-only arguments, optimization and strength. optimization is either None or random-cd. In the latter, random permutations are performed to improve the centered discrepancy. strength is either 1 or 2. 1 corresponds to the classical LHS while 2 has better sub-projection properties. This construction is referred to as an orthogonal array based LHS of strength 2. In both cases, the output is still a LHS.

scipy.stats.qmc.Halton is faster as the underlying Van der Corput sequence was ported to Cython.

The alternative parameter was added to the kendalltau and somersd functions to allow one-sided hypothesis testing. Similarly, the masked versions of skewtest, kurtosistest, ttest_1samp, ttest_ind, and ttest_rel now also have an alternative parameter.

Add scipy.stats.gzscore to calculate the geometrical z score.

Random variate generators to sample from arbitrary univariate non-uniform continuous and discrete distributions have been added to the new scipy.stats.sampling submodule. Implementations of a C library UNU.RAN <http://statmath.wu.ac.at/software/unuran/>_ are used for performance. The generators added are:

  • TransformedDensityRejection
  • DiscreteAliasUrn
  • NumericalInversePolynomial
  • DiscreteGuideTable
  • SimpleRatioUniforms

The binned_statistic set of functions now have improved performance for the std, min, max, and median statistic calculations.

somersd and _tau_b now have faster Pythran-based implementations.

Some general efficiency improvements to handling of nan values in several stats functions.

Added the Tukey-Kramer test as scipy.stats.tukey_hsd.

Improved performance of scipy.stats.argus rvs method.

Added the parameter keepdims to scipy.stats.variation and prevent the undesirable return of a masked array from the function in some cases.

permutation_test performs an exact or randomized permutation test of a given statistic on provided data.

Deprecated features

Clear split between public and private API

SciPy has always documented what its public API consisted of in :ref:its API reference docs <scipy-api>, however there never was a clear split between public and private namespaces in the code base. In this release, all namespaces that were private but happened to miss underscores in their names have been deprecated. These include (as examples, there are many more):

  • scipy.signal.spline
  • scipy.ndimage.filters
  • scipy.ndimage.fourier
  • scipy.ndimage.measurements
  • scipy.ndimage.morphology
  • scipy.ndimage.interpolation
  • scipy.sparse.linalg.solve
  • scipy.sparse.linalg.eigen
  • scipy.sparse.linalg.isolve

All functions and other objects in these namespaces that were meant to be public are accessible from their respective public namespace (e.g. scipy.signal). The design principle is that any public object must be accessible from a single namespace only; there are a few exceptions, mostly for historical reasons (e.g., stats and stats.distributions overlap). For other libraries aiming to provide a SciPy-compatible API, it is now unambiguous what namespace structure to follow. See gh-14360 <https://github.com/scipy/scipy/issues/14360>_ for more details.

Other deprecations

NumericalInverseHermite has been deprecated from scipy.stats and moved to the scipy.stats.sampling submodule. It now uses the C implementation of the UNU.RAN library so the result of methods like ppf may vary slightly. Parameter tol has been deprecated and renamed to u_resolution. The parameter max_intervals has also been deprecated and will be removed in a future release of SciPy.

Backwards incompatible changes

  • SciPy has raised the minimum compiler versions to GCC 6.3 on linux and VS2019 on windows. In particular, this means that SciPy may now use C99 and C++14 features. For more details see here <https://docs.scipy.org/doc/scipy/reference/dev/toolchain.html>_.
  • The result for empty bins for scipy.stats.binned_statistic with the builtin 'std' metric is now nan, for consistency with np.std.
  • The function scipy.spatial.distance.wminkowski has been removed. To achieve the same results as before, please use the minkowski distance function with the (optional) w= keyword-argument for the given weight.

Other changes

Some Fortran 77 code was modernized to be compatible with NAG's nagfor Fortran compiler (see, e.g., PR 13229 <https://github.com/scipy/scipy/pull/13229>_).

threadpoolctl may now be used by our test suite to substantially improve the efficiency of parallel test suite runs.

Authors

  • @endolith
  • adamadanandy +
  • akeemlh +
  • Anton Akhmerov
  • Marvin Albert +
  • alegresor +
  • Andrew Annex +
  • Pantelis Antonoudiou +
  • Ross Barnowski +
  • Christoph Baumgarten
  • Stephen Becker +
  • Nickolai Belakovski
  • Peter Bell
  • berberto +
  • Georgii Bocharov +
  • Evgeni Burovski
  • Matthias Bussonnier
  • CJ Carey
  • Justin Charlong +
  • Dennis Collaris +
  • David Cottrell +
  • cruyffturn +
  • da-woods +
  • Anirudh Dagar
  • Tiger Du +
  • Thomas Duvernay
  • Dani El-Ayyass +
  • Castedo Ellerman +
  • Donnie Erb +
  • Andreas Esders-Kopecky +
  • Livio F +
  • Isuru Fernando
  • Evelyn Fitzgerald +
  • Sara Fridovich-Keil +
  • Mark E Fuller +
  • Ralf Gommers
  • Kevin Richard Green +
  • guiweber +
  • Nitish Gupta +
  • h-vetinari
  • Matt Haberland
  • J. Hariharan +
  • Charles Harris
  • Trever Hines
  • Ian Hunt-Isaak +
  • ich +
  • Itrimel +
  • Jan-Hendrik Müller +
  • Jebby993 +
  • Evan W Jones +
  • Nathaniel Jones +
  • Jeffrey Kelling +
  • Malik Idrees Hasan Khan +
  • Sergey B Kirpichev
  • Kadatatlu Kishore +
  • Andrew Knyazev
  • Ravin Kumar +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Tim Leslie
  • lezcano +
  • Xingyu Liu
  • Christian Lorentzen
  • Lorenzo +
  • Smit Lunagariya +
  • Lv101Magikarp +
  • Yair M +
  • Cong Ma
  • Lorenzo Maffioli +
  • majiang +
  • Brian McFee +
  • Nicholas McKibben
  • John Speed Meyers +
  • millivolt9 +
  • Jarrod Millman
  • Harsh Mishra +
  • Boaz Mohar +
  • naelsondouglas +
  • Andrew Nelson
  • Nico Schlömer
  • Thomas Nowotny +
  • nullptr +
  • Teddy Ort +
  • Nick Papior
  • ParticularMiner +
  • Dima Pasechnik
  • Tirth Patel
  • Matti Picus
  • Ilhan Polat
  • Adrian Price-Whelan +
  • Quentin Barthélemy +
  • Sundar R +
  • Judah Rand +
  • Tyler Reddy
  • Renal-Of-Loon +
  • Frederic Renner +
  • Pamphile Roy
  • Bharath Saiguhan +
  • Atsushi Sakai
  • Eric Schanet +
  • Sebastian Wallkötter
  • serge-sans-paille
  • Reshama Shaikh +
  • Namami Shanker
  • Walter Simson +
  • Gagandeep Singh +
  • Leo C. Stein +
  • Albert Steppi
  • Kai Striega
  • Diana Sukhoverkhova
  • Søren Fuglede Jørgensen
  • Masayuki Takagi +
  • Mike Taves
  • Ben Thompson +
  • Bas van Beek
  • Jacob Vanderplas
  • Dhruv Vats +
  • H. Vetinari +
  • Thomas Viehmann +
  • Pauli Virtanen
  • Vlad +
  • Arthur Volant
  • Samuel Wallan
  • Stefan van der Walt
  • Warren Weckesser
  • Josh Wilson
  • Haoyin Xu +
  • Rory Yorke
  • Egor Zemlyanoy
  • Gang Zhao +
  • 赵丰 (Zhao Feng) +

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

v1.8.0rc1

2 years ago

SciPy 1.8.0 Release Notes

Note: SciPy 1.8.0 is not released yet!

SciPy 1.8.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.8.x branch, and on adding new features on the master branch.

This release requires Python 3.8+ and NumPy 1.17.3 or greater.

For running on PyPy, PyPy3 6.0+ is required.

Highlights of this release

  • A sparse array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases.
  • The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'.
  • A new scipy.stats.sampling submodule that leverages the UNU.RAN C library to sample from arbitrary univariate non-uniform continuous and discrete distributions
  • All namespaces that were private but happened to miss underscores in their names have been deprecated.

New features

scipy.fft improvements

Added an orthogonalize=None parameter to the real transforms in scipy.fft which controls whether the modified definition of DCT/DST is used without changing the overall scaling.

scipy.fft backend registration is now smoother, operating with a single registration call and no longer requiring a context manager.

scipy.integrate improvements

scipy.integrate.quad_vec introduces a new optional keyword-only argument, args. args takes in a tuple of extra arguments if any (default is args=()), which is then internally used to pass into the callable function (needing these extra arguments) which we wish to integrate.

scipy.interpolate improvements

scipy.interpolate.BSpline has a new method, design_matrix, which constructs a design matrix of b-splines in the sparse CSR format.

A new method from_cubic in BSpline class allows to convert a CubicSpline object to BSpline object.

scipy.linalg improvements

scipy.linalg gained three new public array structure investigation functions. scipy.linalg.bandwidth returns information about the bandedness of an array and can be used to test for triangular structure discovery, while scipy.linalg.issymmetric and scipy.linalg.ishermitian test the array for exact and approximate symmetric/Hermitian structure.

scipy.optimize improvements

scipy.optimize.check_grad introduces two new optional keyword only arguments, direction and seed. direction can take values, 'all' (default), in which case all the one hot direction vectors will be used for verifying the input analytical gradient function and 'random', in which case a random direction vector will be used for the same purpose. seed (default is None) can be used for reproducing the return value of check_grad function. It will be used only when direction='random'.

The scipy.optimize.minimize TNC method has been rewritten to use Cython bindings. This also fixes an issue with the callback altering the state of the optimization.

Added optional parameters target_accept_rate and stepwise_factor for adapative step size adjustment in basinhopping.

The epsilon argument to approx_fprime is now optional so that it may have a default value consistent with most other functions in scipy.optimize.

scipy.signal improvements

Add analog argument, default False, to zpk2sos, and add new pairing option 'minimal' to construct analog and minimal discrete SOS arrays. tf2sos uses zpk2sos; add analog argument here as well, and pass it on to zpk2sos.

savgol_coeffs and savgol_filter now work for even window lengths.

Added the Chirp Z-transform and Zoom FFT available as scipy.signal.CZT and scipy.signal.ZoomFFT.

scipy.sparse improvements

An array API has been added for early testing and feedback; this work is ongoing, and users should expect minor API refinements over the next few releases. Please refer to the scipy.sparse docstring for more information.

maximum_flow introduces optional keyword only argument, method which accepts either, 'edmonds-karp' (Edmonds Karp algorithm) or 'dinic' (Dinic's algorithm). Moreover, 'dinic' is used as default value for method which means that Dinic's algorithm is used for computing maximum flow unless specified. See, the comparison between the supported algorithms in this comment <https://github.com/scipy/scipy/pull/14358#issue-684212523>_.

Parameters atol, btol now default to 1e-6 in scipy.sparse.linalg.lsmr to match with default values in scipy.sparse.linalg.lsqr.

Add the Transpose-Free Quasi-Minimal Residual algorithm (TFQMR) for general nonsingular non-Hermitian linear systems in scipy.sparse.linalg.tfqmr.

The sparse SVD library PROPACK is now vendored with SciPy, and an interface is exposed via scipy.sparse.svds with solver='PROPACK'. For some problems, this may be faster and/or more accurate than the default, ARPACK.

sparse.linalg iterative solvers now have a nonzero initial guess option, which may be specified as x0 = 'Mb'.

The trace method has been added for sparse matrices.

scipy.spatial improvements

scipy.spatial.transform.Rotation now supports item assignment and has a new concatenate method.

Add scipy.spatial.distance.kulczynski1 in favour of scipy.spatial.distance.kulsinski which will be deprecated in the next release.

scipy.spatial.distance.minkowski now also supports 0<p<1.

scipy.special improvements

The new function scipy.special.log_expit computes the logarithm of the logistic sigmoid function. The function is formulated to provide accurate results for large positive and negative inputs, so it avoids the problems that would occur in the naive implementation log(expit(x)).

A suite of five new functions for elliptic integrals: scipy.special.ellipr{c,d,f,g,j}. These are the Carlson symmetric elliptic integrals <https://dlmf.nist.gov/19.16>_, which have computational advantages over the classical Legendre integrals. Previous versions included some elliptic integrals from the Cephes library (scipy.special.ellip{k,km1,kinc,e,einc}) but was missing the integral of third kind (Legendre's Pi), which can be evaluated using the new Carlson functions. The new Carlson elliptic integral functions can be evaluated in the complex plane, whereas the Cephes library's functions are only defined for real inputs.

Several defects in scipy.special.hyp2f1 have been corrected. Approximately correct values are now returned for z near exp(+-i*pi/3), fixing #8054 <https://github.com/scipy/scipy/issues/8054>. Evaluation for such z is now calculated through a series derived by López and Temme (2013) <https://arxiv.org/abs/1306.2046> that converges in these regions. In addition, degenerate cases with one or more of a, b, and/or c a non-positive integer are now handled in a manner consistent with mpmath's hyp2f1 implementation <https://mpmath.org/doc/current/functions/hypergeometric.html>, which fixes #7340 <https://github.com/scipy/scipy/issues/7340>. These fixes were made as part of an effort to rewrite the Fortran 77 implementation of hyp2f1 in Cython piece by piece. This rewriting is now roughly 50% complete.

scipy.stats improvements

scipy.stats.qmc.LatinHypercube introduces two new optional keyword-only arguments, optimization and strength. optimization is either None or random-cd. In the latter, random permutations are performed to improve the centered discrepancy. strength is either 1 or 2. 1 corresponds to the classical LHS while 2 has better sub-projection properties. This construction is referred to as an orthogonal array based LHS of strength 2. In both cases, the output is still a LHS.

scipy.stats.qmc.Halton is faster as the underlying Van der Corput sequence was ported to Cython.

The alternative parameter was added to the kendalltau and somersd functions to allow one-sided hypothesis testing. Similarly, the masked versions of skewtest, kurtosistest, ttest_1samp, ttest_ind, and ttest_rel now also have an alternative parameter.

Add scipy.stats.gzscore to calculate the geometrical z score.

Random variate generators to sample from arbitrary univariate non-uniform continuous and discrete distributions have been added to the new scipy.stats.sampling submodule. Implementations of a C library UNU.RAN <http://statmath.wu.ac.at/software/unuran/>_ are used for performance. The generators added are:

  • TransformedDensityRejection
  • DiscreteAliasUrn
  • NumericalInversePolynomial
  • DiscreteGuideTable
  • SimpleRatioUniforms

The binned_statistic set of functions now have improved performance for the std, min, max, and median statistic calculations.

somersd and _tau_b now have faster Pythran-based implementations.

Some general efficiency improvements to handling of nan values in several stats functions.

Added the Tukey-Kramer test as scipy.stats.tukey_hsd.

Improved performance of scipy.stats.argus rvs method.

Added the parameter keepdims to scipy.stats.variation and prevent the undesirable return of a masked array from the function in some cases.

permutation_test performs an exact or randomized permutation test of a given statistic on provided data.

Deprecated features

Clear split between public and private API

SciPy has always documented what its public API consisted of in :ref:its API reference docs <scipy-api>, however there never was a clear split between public and private namespaces in the code base. In this release, all namespaces that were private but happened to miss underscores in their names have been deprecated. These include (as examples, there are many more):

  • scipy.signal.spline
  • scipy.ndimage.filters
  • scipy.ndimage.fourier
  • scipy.ndimage.measurements
  • scipy.ndimage.morphology
  • scipy.ndimage.interpolation
  • scipy.sparse.linalg.solve
  • scipy.sparse.linalg.eigen
  • scipy.sparse.linalg.isolve

All functions and other objects in these namespaces that were meant to be public are accessible from their respective public namespace (e.g. scipy.signal). The design principle is that any public object must be accessible from a single namespace only; there are a few exceptions, mostly for historical reasons (e.g., stats and stats.distributions overlap). For other libraries aiming to provide a SciPy-compatible API, it is now unambiguous what namespace structure to follow. See gh-14360 <https://github.com/scipy/scipy/issues/14360>_ for more details.

Other deprecations

NumericalInverseHermite has been deprecated from scipy.stats and moved to the scipy.stats.sampling submodule. It now uses the C implementation of the UNU.RAN library so the result of methods like ppf may vary slightly. Parameter tol has been deprecated and renamed to u_resolution. The parameter max_intervals has also been deprecated and will be removed in a future release of SciPy.

Backwards incompatible changes

  • SciPy has raised the minimum compiler versions to GCC 6.3 on linux and VS2019 on windows. In particular, this means that SciPy may now use C99 and C++14 features. For more details see here <https://docs.scipy.org/doc/scipy/reference/dev/toolchain.html>_.
  • The result for empty bins for scipy.stats.binned_statistic with the builtin 'std' metric is now nan, for consistency with np.std.
  • The function scipy.spatial.distance.wminkowski has been removed. To achieve the same results as before, please use the minkowski distance function with the (optional) w= keyword-argument for the given weight.

Other changes

Some Fortran 77 code was modernized to be compatible with NAG's nagfor Fortran compiler (see, e.g., PR 13229 <https://github.com/scipy/scipy/pull/13229>_).

threadpoolctl may now be used by our test suite to substantially improve the efficiency of parallel test suite runs.

Authors

  • @endolith
  • adamadanandy +
  • akeemlh +
  • Anton Akhmerov
  • Marvin Albert +
  • alegresor +
  • Andrew Annex +
  • Pantelis Antonoudiou +
  • Ross Barnowski +
  • Christoph Baumgarten
  • Stephen Becker +
  • Nickolai Belakovski
  • Peter Bell
  • berberto +
  • Georgii Bocharov +
  • Evgeni Burovski
  • Matthias Bussonnier
  • CJ Carey
  • Justin Charlong +
  • Dennis Collaris +
  • David Cottrell +
  • cruyffturn +
  • da-woods +
  • Anirudh Dagar
  • Tiger Du +
  • Thomas Duvernay
  • Dani El-Ayyass +
  • Castedo Ellerman +
  • Donnie Erb +
  • Andreas Esders-Kopecky +
  • Livio F +
  • Isuru Fernando
  • Evelyn Fitzgerald +
  • Sara Fridovich-Keil +
  • Mark E Fuller +
  • Ralf Gommers
  • Kevin Richard Green +
  • guiweber +
  • Nitish Gupta +
  • h-vetinari
  • Matt Haberland
  • J. Hariharan +
  • Charles Harris
  • Trever Hines
  • Ian Hunt-Isaak +
  • ich +
  • Itrimel +
  • Jan-Hendrik Müller +
  • Jebby993 +
  • Evan W Jones +
  • Nathaniel Jones +
  • Jeffrey Kelling +
  • Malik Idrees Hasan Khan +
  • Sergey B Kirpichev
  • Kadatatlu Kishore +
  • Andrew Knyazev
  • Ravin Kumar +
  • Peter Mahler Larsen
  • Eric Larson
  • Antony Lee
  • Gregory R. Lee
  • Tim Leslie
  • lezcano +
  • Xingyu Liu
  • Christian Lorentzen
  • Lorenzo +
  • Smit Lunagariya +
  • Lv101Magikarp +
  • Yair M +
  • Cong Ma
  • Lorenzo Maffioli +
  • majiang +
  • Brian McFee +
  • Nicholas McKibben
  • John Speed Meyers +
  • millivolt9 +
  • Jarrod Millman
  • Harsh Mishra +
  • Boaz Mohar +
  • naelsondouglas +
  • Andrew Nelson
  • Nico Schlömer
  • Thomas Nowotny +
  • nullptr +
  • Teddy Ort +
  • Nick Papior
  • ParticularMiner +
  • Dima Pasechnik
  • Tirth Patel
  • Matti Picus
  • Ilhan Polat
  • Adrian Price-Whelan +
  • Quentin Barthélemy +
  • Sundar R +
  • Judah Rand +
  • Tyler Reddy
  • Renal-Of-Loon +
  • Frederic Renner +
  • Pamphile Roy
  • Bharath Saiguhan +
  • Atsushi Sakai
  • Eric Schanet +
  • Sebastian Wallkötter
  • serge-sans-paille
  • Reshama Shaikh +
  • Namami Shanker
  • Walter Simson +
  • Gagandeep Singh +
  • Leo C. Stein +
  • Albert Steppi
  • Kai Striega
  • Diana Sukhoverkhova
  • Søren Fuglede Jørgensen
  • Mike Taves
  • Ben Thompson +
  • Bas van Beek
  • Jacob Vanderplas
  • Dhruv Vats +
  • H. Vetinari +
  • Thomas Viehmann +
  • Pauli Virtanen
  • Vlad +
  • Arthur Volant
  • Samuel Wallan
  • Stefan van der Walt
  • Warren Weckesser
  • Josh Wilson
  • Haoyin Xu +
  • Rory Yorke
  • Egor Zemlyanoy
  • Gang Zhao +
  • 赵丰 (Zhao Feng) +

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

v1.7.3

2 years ago

SciPy 1.7.3 Release Notes

SciPy 1.7.3 is a bug-fix release that provides binary wheels for MacOS arm64 with Python 3.8, 3.9, and 3.10. The MacOS arm64 wheels are only available for MacOS version 12.0 and greater, as explained in Issue 14688.

Authors

  • Anirudh Dagar
  • Ralf Gommers
  • Tyler Reddy
  • Pamphile Roy
  • Olivier Grisel
  • Isuru Fernando

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.