SciPy

Frameworks & Libraries

Fundamental algorithms for scientific computing in Python.

Latest v1.18.0 · by SciPyWebsitescipy/scipy

Release activity

Release activity — 9 releases across 9 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 19, 2026No releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026
MondayNo releases on Apr 20, 2026No releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 20261 release on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026
TuesdayNo releases on Apr 21, 2026No releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 20261 release on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026
WednesdayNo releases on Apr 22, 2026No releases on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 23, 2026No releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on Apr 24, 2026No releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 20261 release on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on Apr 25, 2026No releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026

9 releases in the last year

Changelog

v1.18.0

SciPy 1.18.0

Added 9
  • LinearNDInterpolator and CloughTocher2dInterpolator now support simplex_tolerance argument to increase QHull simplex assignment tolerance
  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired
  • Support for three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everything except cython_blas/cython_lapack/linalg.blas/linalg.lapack
  • Machinery provided for downstream cython_lapack users to gracefully handle LP64/ILP64 backend builds
  • overwrite_b keyword argument added to scipy.linalg.eigvals for consistency with other similar linalg functions
  • ILP64 support added to scipy.linalg.expm and scipy.linalg.sqrtm
Changed 10
  • SciPy's internal FFT backend switched from pocketfft to ducc0.fft, with significantly reduced storage requirements for internally cached plans
  • FITPACK Fortran code has been ported to C in scipy.interpolate
  • scipy.linalg.cholesky now leverages symmetry properties for performance improvements and batching loop moved to C implementation
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support in the compiled code
  • Batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd moved to C for substantial speedup with batched input
  • Performance of scipy.linalg.expm has been improved

SciPy 1.18.0 Release Notes

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

This release requires Python 3.12-3.14 and NumPy 2.0.0 or greater.

Highlights of this release

  • SciPy now supports three different build modes for BLAS and LAPACK LP64/ILP64 support, and machinery is provided for downstream cython_lapack consumers to gracefully handle LP64/ILP64 backend builds. ILP64 support has been substantially improved across the SciPy library.
  • Remaining Fortran to C translations have been completed---an experimental Fortran-free build option is now available to developers for testing purposes. Developer feedback is welcome on Fortran-free builds.
  • scipy.signal.whittaker_henderson now provides access to Whittaker-Henderson smoothing of a discrete signal.
  • A large number of scipy.stats functions now support lazy arrays and JAX JIT. Array API support has been improved substantially in SciPy, with at least 21 functions gaining new support in this release. 16 scipy.stats functions have also gained support for MArray input.

New features

scipy.fft improvements

  • SciPy's internal FFT backend has switched from pocketfft to its successor package ducc0.fft, which features several incremental improvements. The most significant of those from SciPy's perspective is probably that storage requirements for internally cached plans have been significantly reduced for most long 1D transforms. Plans that require more storage than 1MB will no longer be cached; this mainly affects huge 1D transforms of prime and near-prime sizes.

scipy.interpolate improvements

  • Users may now increase the QHull simplex assignment tolerance via the new simplex_tolerance argument to the _call__ methods of LinearNDInterpolator and CloughTocher2dInterpolator. This can help users avoid holes in certain interpolation problems.
  • The FITPACK Fortran code has been ported to C.

scipy.differentiate improvements

  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired.

scipy.linalg improvements

  • We now support three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everyting except cython_blas/cython_lapack/ linalg.blas/linalg.lapack (support for Accelerate and MKL).
  • Machinery is now provided for downstream cython_lapack users to gracefully handle LP64/ILP64 backend builds. Worked examples, including build system details, have been included in this release.
  • An overwrite_b keyword argument was added to eigvals, for consistency with other similar linalg functions.
  • linalg.cholesky now leverages symmetry properties for performance improvements, especially for real matrices. The batching loop of cholesky has now also been moved to a C implementation.
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support in the compiled code.
  • Added ILP64 support to scipy.linalg.expm and scipy.linalg.sqrtm.
  • The batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd have been moved to C, providing a substantial speedup for batched input.
  • The performance of scipy.linalg.expm has been improved.
  • The performance for scipy.linalg.solve has improved for batched inputs.
  • scipy.linalg.bandwidth now supports batching for greater than or equal to 2 dimensional input.

scipy.optimize improvements

  • The trust_constr method for minimize was adjusted so that if the x array would result in infeasible constraints, and those constraints were marked as keep_feasible, then the objective function is not called with that x array.
  • The COBYQA method for minimize now supports being called concurrently by multiple threads. Previously, multiple threads calling this function would only run one at a time.
  • scipy.optimize.nnls, and minimize methods SLSQP and L-BFGS-B now have support for ILP64 LAPACK, when available.
  • Functions in scipy.optimize.elementwise now support passing kwargs to the callable function.

scipy.signal improvements

  • The new ~scipy.signal.whittaker_henderson implements Whittaker-Henderson smoothing of a discrete signal. It offers different penalties to control the smoothness as well as automatic selection of the penalty strength via optimization of the restricted maximum likelihood (REML) criterion. It is a valuable alternative for the Savitzky-Golay filter ~scipy.signal.savgol_filter. In econometrics, Whittaker-Henderson graduation of penalty order 2 is also known as Hodrick-Prescott filter.
  • lfilter_zi was refactored for improved numerical stability and efficiency. It now raises a ValueError if parameter a has leading zeros, i.e., a[0] == 0, since lfilter and filtfilt do not support that as well. Furthermore, a ValueError instead of a LinAlgError is raised if the filter is unstable due to having a pole at z = 1.

scipy.sparse improvements

  • In scipy.sparse.csgraph the computation of strongly connected components for directed graphs is now 2x faster with better cache locality, using algorithmic improvements described in the recent survey by Tarjan and Zwick.
  • Added ILP64 BLAS/LAPACK support to SuperLU and PROPACK extensions.
  • All sparse array/matrix formats now support matrix_transpose/.mT.
  • Support for n-dimensional linear operators has been added to scipy.sparse.linalg.LinearOperator, and LinearOperator now has a new rdot method.
  • scipy.sparse.linalg.minres now supports complex hermitian matrices.

scipy.integrate improvements

  • ILP64 support was added for ODEPACK
  • scipy.integrate.tanhsinh and scipy.integrate.nsum now support passing kwargs to the function to be integrated.

scipy.spatial improvements

  • 3D area calculations are now faster in scipy.spatial.SphericalVoronoi.
  • N-dimensional input is now supported for scipy.spatial.distance.minkowski, scipy.spatial.distance.euclidean, and scipy.spatial.distance.sqeuclidean.
  • It is now possible to return sparse arrays rather than matrices from KDTree.sparse_distance_matrix.
  • It is now possible to compose Rotation and RigidTransform directly, by automatically promoting Rotation when the two are composed via a multiplication operator.

scipy.special improvements

  • The accuracy of the following functions was improved: scipy.special.bdtrik, scipy.special.bdtrin, scipy.special.nbdtrik, scipy.special.nbdtrin.
  • The numerical behavior for scipy.special.eval_jacobi has been improved for several parameter combinations.
  • The Bessel functions scipy.special.j0 and scipy.special.y0 have improved accuracy for large arguments.

scipy.stats improvements

  • The accuracy of scipy.stats.pmean with tiny, nonzero p has been improved.
  • The performance of scipy.stats.halfgennorm has been improved.
  • zstatistic has been added to the result object of scipy.stats.mannwhitneyu.
  • A large number of stats functions now support lazy arrays and JAX JIT (see Python Array API support section below).
  • Support for the nan_policy keyword argument has been added to: scipy.stats.obrientransform, scipy.stats.boxcox, scipy.stats.boxcox_normmax, scipy.stats.yeojohnson, scipy.stats.yeojohnson_normmax, scipy.stats.sigmaclip, and scipy.stats.expectile.
  • scipy.stats.ContinuousDistribution.lmoment has been added for computing population L-moments.
  • The new function scipy.stats.estimated_cdf has been added. It reproduces much of the functionality of stats.mstats.plotting_positions, stats.percentileofscore, stats.ecdf.cdf, and stats.cumfreq, but is also vectorized.
  • scipy.stats.ansari accepts a new method argument.
  • scipy.stats.bws_test, scipy.stats.expectile, and scipy.stats.quantile_test now accept an axis argument.
  • scipy.stats.expectile and scipy.stats.quantile_test accept a new keepdims argument.
  • scipy.stats.binomtest now supports batching of k, n, and p.

Python Array API Standard Support

  • Support has been added for CuPy delegation for: interpolate.PPoly, interpolate.BPoly, and interpolate.BSpline.
  • CuPy support has been added for scipy.stats.rankdata.
  • Array API support has been added for method and trim usage in scipy.stats.ttest_ind.
  • Support for MArrays has been added to: scipy.stats.cramervonmises, scipy.stats.ks_1samp, scipy.stats.ks_2samp, scipy.stats.mode, scipy.stats.rankdata, scipy.stats.kruskal, scipy.stats.brunnermunzel, scipy.stats.spearmanrho, scipy.stats.friedmanchisquare, scipy.stats.cramervonmises_2samp, scipy.stats.mannwhitneyu, scipy.stats.wilcoxon, scipy.stats.fligner, scipy.stats.linregress, scipy.stats.alexandergovern, and scipy.stats.levene.
  • Array API support has been added to: scipy.stats.quantile_test, scipy.stats.kendalltau (via NumPy conversion), scipy.stats.kstest, scipy.sparse.linalg.LinearOperator, scipy.stats.cumfreq, scipy.stats.relfreq, scipy.stats.ks_2samp, scipy.stats.theilslopes, scipy.stats.siegelslopes, scipy.stats.obrientransform (including marray), scipy.stats.binomtest, scipy.integrate.fixed_quad, scipy.signal.square, scipy.stats.expectile, scipy.stats.shapiro, scipy.stats.pointbiserialr, scipy.stats.bws_test, scipy.stats.estimated_cdf (new function), scipy.stats.linregress, scipy.integrate.simpson, and scipy.signal.sawtooth.
  • The torch support for scipy.signal.fftconvolve now correctly handles the float32 dtype.
  • JAX JIT support has been added for: scipy.stats.binomtest (except for method='two-sided'), scipy.stats.mannwhitneyu (except for method='auto'), scipy.stats.lmoment, scipy.stats.moment, scipy.stats.ansari (related to new method argument), scipy.stats.yeojohnson_llf, scipy.stats.epps_singleton_2samp, scipy.stats.wilcoxon (except for method='exact' and method='auto'), scipy.stats.rankdata (via delegation), scipy.signal.oaconvolve, scipy.signal.hilbert, and scipy.signal.hilbert2.

Deprecated features and future changes

  • passing lwork parameter to scipy.linalg.qr has been deprecated. The functionality was rarely used; the function computes the optimal size of the work arrays automatically, therefore users should simply remove their uses of the lwork parameter.
  • The sparse construction functions kron, kronsum and block_diag choose return type sparray or spmatrix depending on the type of the sparse input arrays. When no inputs are sparse, the output is chosen to be spmatrix. That has been deprecated. The return type when no inputs are sparse will be changing to sparray. You can control the output type by ensuring that at least one input array is sparse. If any are sparray, the output will be sparray. If all sparse inputs are spmatrix, the output will be spmatrix.
  • A FutureWarning is now issued for calling {r}matvec on column vectors with LinearOperator. Identical behavior can be achieved (and extended to batch dimensions) via {r}matmat.
  • scipy.linalg functions are now stricter--using non-LAPACK dtypes is deprecated. When the deprecations expire, this will effectively limit the dtypes allowed in linear algebra functions to: integers (upcast to float), and single/double precision float/complex dtypes.
  • scipy.spatial.minkowsi_distance, scipy.spatial.minkowsi_distance_p, and scipy.spatial.distance_matrix have been deprecated in favor of other superior functions.
  • scipy.spatial.tsearch has been deprecated because it duplicates functionality more conveniently provided within the Delaunay class proper.
  • The following functions have been deprecated because they were deemed not practically useful: scipy.interpolate.pade, scipy.interpolate.lagrange, and scipy.interpolate.approximate_taylor_polynomial.
  • Setting spmatrix=True for the scipy.io readers mmio, FFM, hb, and matlab/_mio is now deprecated, including when set as the default value.
  • The unintentionally public scipy.cluster.vq.py_vq has been deprecated.

Backwards incompatible changes

  • The output of scipy.stats.rankdata is now always of a floating point dtype -- the result dtype of the input and a Python float.
  • The behavior of the residuals returned by scipy.linalg.lstsq has been changed. For lapack_driver == "gelsy" or the system being either underdetermined or square, empty residuals are still returned. For lapack_driver == "gesld"/"gelss" in combination with an overdetermined system a non-empty residual is always returned. However, in the case where a slice is not full column rank, the corresponding residual is set to NaN.
  • The 2nd output object of scipy.stats.contingency.crosstab when kwarg sparse=True is now a sparse array holding the counts instead of a sparse matrix. This allows it to be nD, so can accept more than 2 sequences as inputs, but it is a different class. Most operations work the same for sparse arrays and matrixes with notable differences for matrix: * means matmul and always-2D. For more info see migration_to_sparray.
  • scipy.stats.obrientransform now returns a tuple of arrays instead of a single ndarray.
  • scipy.stats.multinomial now returns NaNs when the category probability (p) rows/arrays do not sum to unity. This is an expiration of the deprecated behavior of adjusting the final element in the p array to compensate. Note that multinomial.rvs will now raise an error in such cases, since it has an integral return type.
  • The iprint and disp parameters of scipy.optimize.fmin_l_bfgs_b have been removed, following the expiry of their deprecation.
  • For scipy.linalg.{sqrtm, logm, signm}, disp (and sqrtm blocksize) parameters were removed (expired deprecations).
  • The deprecated atol argument of scipy.optimize.nnls has been removed.
  • For 2D input, the return type of scipy.linalg.bandwidth has changed from (int, int) to (np.int64, np.int64).
  • The second return type of scipy.linalg.cho_factor changed from bool to NDArray[np.bool].
  • The second return type of scipy.interpolate.splint changed from a 1D float64 array to None when full_output=True.
  • The types of the k and n attributes of the BinomTestResult object returned by scipy.stats.binomtest have changed from int to np.float64.

Other changes

  • The vendored Boost.Math was updated from 1.89.0 to 1.91.0.
  • SciPy now has a Pixi package definition, allowing developers to easily build SciPy from source inside Pixi workspaces.
  • Developers may be interested in the private build option _without-fortran, which allows building SciPy from source in the absence of a Fortran compiler. This is an early prototype of the planned capability of a Fortran-free SciPy.
  • The private scipy.interpolate._regrid function may be of experimental interest. It provides an interface for 2-D smoothing B-spline fitting via separable 1-D FITPACK kernels. It is under consideraton for public exposure in some form in the future.
  • Python 3.13t (3.13 free threading) wheels are not provided on PyPI for this and subsequent releases because 3.13t was deprecated by manylinux and dropped by cibuildwheel in favor of 3.14t.
  • Previously, return values of scipy.linalg.eig were always Fortran-ordered, and in SciPy 1.18.0 they may or may not be. If the ordering is important (for example, when interfacing with compiled code which expects specific array strides), users should ensure the desired ordering manually.

Authors

  • Name (commits)
  • h-vetinari (1)
  • Joseph Adams (1) +
  • Adrián Raso González (1) +
  • Virgile Andreani (1)
  • AshwathElang0 (1) +
  • Mart-Mihkel Aun (1) +
  • BarnikRB (2) +
  • Richie Bendall (1) +
  • J Berg (7) +
  • Florian Bourgey (50)
  • Jake Bowhay (99)
  • Jonathan Brodrick (1) +
  • Dietrich Brunn (36)
  • Evgeni Burovski (200)
  • Matthias Bussonnier (6)
  • CJ Carey (9)
  • Christine P. Chai (2)
  • Lucas Colley (90)
  • Dan (3) +
  • devdanzin (2) +
  • Martin Diehl (4)
  • Sam Dolat (2) +
  • dphipps-qnx (1) +
  • DWesl (2)
  • efrat99 (3) +
  • fbrandt (1) +
  • August Femtehjell (2) +
  • Matthew H Flamm (1)
  • Juan Flores (1) +
  • foreverallama (1) +
  • fumoboy007 (4) +
  • John Patrick Gallagher (1) +
  • Wei Bo Gao (1) +
  • Christoph Gohlke (1)
  • Nathan Goldbaum (20)
  • Ludmila Golomozin (11) +
  • Ralf Gommers (173)
  • Mathieu Guay-Paquet (1) +
  • Matt Haberland (147)
  • Joren Hammudoglu (30)
  • Jacob Hass (4)
  • Maya Horii (1) +
  • Guido Imperiale (1)
  • Jan Möseritz-Schmidt (2)
  • Leo Ji (4) +
  • JOD (2) +
  • Aditya Kamath (2) +
  • Mukunda Rao Katta (1) +
  • Robert Kern (1)
  • Ria Khatoniar (1) +
  • Matthias Koeppe (1)
  • krishneetRAJ (1) +
  • Iason Krommydas (1) +
  • Eric Larson (1)
  • Basil Liekens (31) +
  • lnzwz (2) +
  • Christian Lorentzen (15)
  • Alex Lubbock (1) +
  • Echedey Luis (2) +
  • Lunyxis (1) +
  • Zhang Maiyun (1) +
  • Diego Medina Medina (1) +
  • Elle Musoke (11) +
  • Andrew Nelson (103)
  • Nick ODell (29)
  • Dimitri Papadopoulos Orfanos (1)
  • partev (1)
  • Matti Picus (7)
  • Ilhan Polat (190)
  • Pradyot Ranjan (2) +
  • Adrian Raso (3)
  • Aditya Rawat (1) +
  • Tyler Reddy (99)
  • Martin Reinecke (1)
  • Lucas Roberts (6)
  • Pamphile Roy (1)
  • Daniel Schmitz (26)
  • Martin Schuck (4)
  • Dan Schult (47)
  • Scott Shambaugh (16)
  • Sabaa Siddique (1) +
  • Nicholas Smith (1) +
  • Johannes F. Sommerfeldt (1) +
  • SpookyYomo (2) +
  • Albert Steppi (80)
  • Charalampos Stratakis (16) +
  • Taylor (1) +
  • thecaptain789 (1) +
  • Adam Turner (1)
  • Jacob Vanderplas (1)
  • Christian Veenhuis (2)
  • Sebastiano Vigna (1)
  • Rivka Walles (14) +
  • Warren Weckesser (11)
  • Soeren Wolfers (1) +
  • wongaokay (1) +
  • Xuefeng Xu (1)
  • Aniket Singh Yadav (2) +
  • yaochengchen (2) +
  • Fadi Younes (2) +
  • Isaiah Zimmerman (1) +
  • Simon Zwieback (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (19)

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

Note that the source and binary assets associated with this release were published to PyPI using trusted publishing, and so the trusted assets and their hashes are made available more securely at https://pypi.org/project/scipy/1.18.0/ rather than providing them here in a less secure manner.

View originalPermalink
How v1.18.0 went
v1.18.0rc2Pre-release

SciPy 1.18.0rc2

Added 9
  • Added simplex_tolerance argument to LinearNDInterpolator and CloughTocher2dInterpolator to increase QHull simplex assignment tolerance
  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired
  • SciPy now supports three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everything except cython_blas/cython_lapack/linalg.blas/linalg.lapack
  • Machinery is provided for downstream cython_lapack users to gracefully handle LP64/ILP64 backend builds
  • Added overwrite_b keyword argument to scipy.linalg.eigvals for consistency with other similar linalg functions
  • Added ILP64 support to scipy.linalg.expm and scipy.linalg.sqrtm
Changed 11
  • SciPy's internal FFT backend has switched from pocketfft to ducc0.fft, which significantly reduces storage requirements for internally cached plans
  • FITPACK Fortran code has been ported to C
  • scipy.linalg.cholesky now leverages symmetry properties for performance improvements and has batching loop moved to C implementation
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support
  • Batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd have been moved to C for substantial speedup
  • Performance of scipy.linalg.expm has been improved

SciPy 1.18.0 Release Notes

note: SciPy 1.18.0 is not released yet!

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

This release requires Python 3.12-3.14 and NumPy 2.0.0 or greater.

Highlights of this release

  • SciPy now supports three different build modes for BLAS and LAPACK LP64/ILP64 support, and machinery is provided for downstream cython_lapack consumers to gracefully handle LP64/ILP64 backend builds. ILP64 support has been substantially improved across the SciPy library.
  • Remaining Fortran to C translations have been completed---an experimental Fortran-free build option is now available to developers for testing purposes. Developer feedback is welcome on Fortran-free builds.
  • scipy.signal.whittaker_henderson now provides access to Whittaker-Henderson smoothing of a discrete signal.
  • A large number of scipy.stats functions now support lazy arrays and JAX JIT. Array API support has been improved substantially in SciPy, with at least 21 functions gaining new support in this release. 16 scipy.stats functions have also gained support for MArray input.

New features

scipy.fft improvements

  • SciPy's internal FFT backend has switched from pocketfft to its successor package ducc0.fft, which features several incremental improvements. The most significant of those from SciPy's perspective is probably that storage requirements for internally cached plans have been significantly reduced for most long 1D transforms. Plans that require more storage than 1MB will no longer be cached; this mainly affects huge 1D transforms of prime and near-prime sizes.

scipy.interpolate improvements

  • Users may now increase the QHull simplex assignment tolerance via the new simplex_tolerance argument to the _call__ methods of LinearNDInterpolator and CloughTocher2dInterpolator. This can help users avoid holes in certain interpolation problems.
  • The FITPACK Fortran code has been ported to C.

scipy.differentiate improvements

  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired.

scipy.linalg improvements

  • We now support three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everyting except cython_blas/cython_lapack/ linalg.blas/linalg.lapack (support for Accelerate and MKL).
  • Machinery is now provided for downstream cython_lapack users to gracefully handle LP64/ILP64 backend builds. Worked examples, including build system details, have been included in this release.
  • An overwrite_b keyword argument was added to eigvals, for consistency with other similar linalg functions.
  • linalg.cholesky now leverages symmetry properties for performance improvements, especially for real matrices. The batching loop of cholesky has now also been moved to a C implementation.
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support in the compiled code.
  • Added ILP64 support to scipy.linalg.expm and scipy.linalg.sqrtm.
  • The batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd have been moved to C, providing a substantial speedup for batched input.
  • The performance of scipy.linalg.expm has been improved.
  • The performance for scipy.linalg.solve has improved for batched inputs.
  • scipy.linalg.bandwidth now supports batching for greater than or equal to 2 dimensional input.

scipy.optimize improvements

  • The trust_constr method for minimize was adjusted so that if the x array would result in infeasible constraints, and those constraints were marked as keep_feasible, then the objective function is not called with that x array.
  • The COBYQA method for minimize now supports being called concurrently by multiple threads. Previously, multiple threads calling this function would only run one at a time.
  • scipy.optimize.nnls, and minimize methods SLSQP and L-BFGS-B now have support for ILP64 LAPACK, when available.
  • Functions in scipy.optimize.elementwise now support passing kwargs to the callable function.

scipy.signal improvements

  • The new ~scipy.signal.whittaker_henderson implements Whittaker-Henderson smoothing of a discrete signal. It offers different penalties to control the smoothness as well as automatic selection of the penalty strength via optimization of the restricted maximum likelihood (REML) criterion. It is a valuable alternative for the Savitzky-Golay filter ~scipy.signal.savgol_filter. In econometrics, Whittaker-Henderson graduation of penalty order 2 is also known as Hodrick-Prescott filter.
  • lfilter_zi was refactored for improved numerical stability and efficiency. It now raises a ValueError if parameter a has leading zeros, i.e., a[0] == 0, since lfilter and filtfilt do not support that as well. Furthermore, a ValueError instead of a LinAlgError is raised if the filter is unstable due to having a pole at z = 1.

scipy.sparse improvements

  • In scipy.sparse.csgraph the computation of strongly connected components for directed graphs is now 2x faster with better cache locality, using algorithmic improvements described in the recent survey by Tarjan and Zwick.
  • Added ILP64 BLAS/LAPACK support to SuperLU and PROPACK extensions.
  • All sparse array/matrix formats now support matrix_transpose/.mT.
  • Support for n-dimensional linear operators has been added to scipy.sparse.linalg.LinearOperator, and LinearOperator now has a new rdot method.
  • scipy.sparse.linalg.minres now supports complex hermitian matrices.

scipy.integrate improvements

  • ILP64 support was added for ODEPACK
  • scipy.integrate.tanhsinh and scipy.integrate.nsum now support passing kwargs to the function to be integrated.

scipy.spatial improvements

  • 3D area calculations are now faster in scipy.spatial.SphericalVoronoi.
  • N-dimensional input is now supported for scipy.spatial.distance.minkowski, scipy.spatial.distance.euclidean, and scipy.spatial.distance.sqeuclidean.
  • It is now possible to return sparse arrays rather than matrices from KDTree.sparse_distance_matrix.
  • It is now possible to compose Rotation and RigidTransform directly, by automatically promoting Rotation when the two are composed via a multiplication operator.

scipy.special improvements

  • The accuracy of the following functions was improved: scipy.special.bdtrik, scipy.special.bdtrin, scipy.special.nbdtrik, scipy.special.nbdtrin.
  • The numerical behavior for scipy.special.eval_jacobi has been improved for several parameter combinations.
  • The Bessel functions scipy.special.j0 and scipy.special.y0 have improved accuracy for large arguments.

scipy.stats improvements

  • The accuracy of scipy.stats.pmean with tiny, nonzero p has been improved.
  • The performance of scipy.stats.halfgennorm has been improved.
  • zstatistic has been added to the result object of scipy.stats.mannwhitneyu.
  • A large number of stats functions now support lazy arrays and JAX JIT (see Python Array API support section below).
  • Support for the nan_policy keyword argument has been added to: scipy.stats.obrientransform, scipy.stats.boxcox, scipy.stats.boxcox_normmax, scipy.stats.yeojohnson, scipy.stats.yeojohnson_normmax, scipy.stats.sigmaclip, and scipy.stats.expectile.
  • scipy.stats.ContinuousDistribution.lmoment has been added for computing population L-moments.
  • The new function scipy.stats.estimated_cdf has been added. It reproduces much of the functionality of stats.mstats.plotting_positions, stats.percentileofscore, stats.ecdf.cdf, and stats.cumfreq, but is also vectorized.
  • scipy.stats.ansari accepts a new method argument.
  • scipy.stats.bws_test, scipy.stats.expectile, and scipy.stats.quantile_test now accept an axis argument.
  • scipy.stats.expectile and scipy.stats.quantile_test accept a new keepdims argument.
  • scipy.stats.binomtest now supports batching of k, n, and p.

Python Array API Standard Support

  • Support has been added for CuPy delegation for: interpolate.PPoly, interpolate.BPoly, and interpolate.BSpline.
  • CuPy support has been added for scipy.stats.rankdata.
  • Array API support has been added for method and trim usage in scipy.stats.ttest_ind.
  • Support for MArrays has been added to: scipy.stats.cramervonmises, scipy.stats.ks_1samp, scipy.stats.ks_2samp, scipy.stats.mode, scipy.stats.rankdata, scipy.stats.kruskal, scipy.stats.brunnermunzel, scipy.stats.spearmanrho, scipy.stats.friedmanchisquare, scipy.stats.cramervonmises_2samp, scipy.stats.mannwhitneyu, scipy.stats.wilcoxon, scipy.stats.fligner, scipy.stats.linregress, scipy.stats.alexandergovern, and scipy.stats.levene.
  • Array API support has been added to: scipy.stats.quantile_test, scipy.stats.kendalltau (via NumPy conversion), scipy.stats.kstest, scipy.sparse.linalg.LinearOperator, scipy.stats.cumfreq, scipy.stats.relfreq, scipy.stats.ks_2samp, scipy.stats.theilslopes, scipy.stats.siegelslopes, scipy.stats.obrientransform (including marray), scipy.stats.binomtest, scipy.integrate.fixed_quad, scipy.signal.square, scipy.stats.expectile, scipy.stats.shapiro, scipy.stats.pointbiserialr, scipy.stats.bws_test, scipy.stats.estimated_cdf (new function), scipy.stats.linregress, scipy.integrate.simpson, and scipy.signal.sawtooth.
  • The torch support for scipy.signal.fftconvolve now correctly handles the float32 dtype.
  • JAX JIT support has been added for: scipy.stats.binomtest (except for method='two-sided'), scipy.stats.mannwhitneyu (except for method='auto'), scipy.stats.lmoment, scipy.stats.moment, scipy.stats.ansari (related to new method argument), scipy.stats.yeojohnson_llf, scipy.stats.epps_singleton_2samp, scipy.stats.wilcoxon (except for method='exact' and method='auto'), scipy.stats.rankdata (via delegation), scipy.signal.oaconvolve, scipy.signal.hilbert, and scipy.signal.hilbert2.

Deprecated features and future changes

  • passing lwork parameter to scipy.linalg.qr has been deprecated. The functionality was rarely used; the function computes the optimal size of the work arrays automatically, therefore users should simply remove their uses of the lwork parameter.
  • The sparse construction functions kron, kronsum and block_diag choose return type sparray or spmatrix depending on the type of the sparse input arrays. When no inputs are sparse, the output is chosen to be spmatrix. That has been deprecated. The return type when no inputs are sparse will be changing to sparray. You can control the output type by ensuring that at least one input array is sparse. If any are sparray, the output will be sparray. If all sparse inputs are spmatrix, the output will be spmatrix.
  • A FutureWarning is now issued for calling {r}matvec on column vectors with LinearOperator. Identical behavior can be achieved (and extended to batch dimensions) via {r}matmat.
  • scipy.linalg functions are now stricter--using non-LAPACK dtypes is deprecated. When the deprecations expire, this will effectively limit the dtypes allowed in linear algebra functions to: integers (upcast to float), and single/double precision float/complex dtypes.
  • scipy.spatial.minkowsi_distance, scipy.spatial.minkowsi_distance_p, and scipy.spatial.distance_matrix have been deprecated in favor of other superior functions.
  • scipy.spatial.tsearch has been deprecated because it duplicates functionality more conveniently provided within the Delaunay class proper.
  • The following functions have been deprecated because they were deemed not practically useful: scipy.interpolate.pade, scipy.interpolate.lagrange, and scipy.interpolate.approximate_taylor_polynomial.
  • Setting spmatrix=True for the scipy.io readers mmio, FFM, hb, and matlab/_mio is now deprecated, including when set as the default value.
  • The unintentionally public scipy.cluster.vq.py_vq has been deprecated.

Backwards incompatible changes

  • The output of scipy.stats.rankdata is now always of a floating point dtype -- the result dtype of the input and a Python float.
  • The behavior of the residuals returned by scipy.linalg.lstsq has been changed. For lapack_driver == "gelsy" or the system being either underdetermined or square, empty residuals are still returned. For lapack_driver == "gesld"/"gelss" in combination with an overdetermined system a non-empty residual is always returned. However, in the case where a slice is not full column rank, the corresponding residual is set to NaN.
  • The 2nd output object of scipy.stats.contingency.crosstab when kwarg sparse=True is now a sparse array holding the counts instead of a sparse matrix. This allows it to be nD, so can accept more than 2 sequences as inputs, but it is a different class. Most operations work the same for sparse arrays and matrixes with notable differences for matrix: * means matmul and always-2D. For more info see migration_to_sparray.
  • scipy.stats.obrientransform now returns a tuple of arrays instead of a single ndarray.
  • scipy.stats.multinomial now returns NaNs when the category probability (p) rows/arrays do not sum to unity. This is an expiration of the deprecated behavior of adjusting the final element in the p array to compensate. Note that multinomial.rvs will now raise an error in such cases, since it has an integral return type.
  • The iprint and disp parameters of scipy.optimize.fmin_l_bfgs_b have been removed, following the expiry of their deprecation.
  • For scipy.linalg.{sqrtm, logm, signm}, disp (and sqrtm blocksize) parameters were removed (expired deprecations).
  • The deprecated atol argument of scipy.optimize.nnls has been removed.
  • For 2D input, the return type of scipy.linalg.bandwidth has changed from (int, int) to (np.int64, np.int64).
  • The second return type of scipy.linalg.cho_factor changed from bool to NDArray[np.bool].
  • The second return type of scipy.interpolate.splint changed from a 1D float64 array to None when full_output=True.
  • The types of the k and n attributes of the BinomTestResult object returned by scipy.stats.binomtest have changed from int to np.float64.

Other changes

  • The vendored Boost.Math was updated from 1.89.0 to 1.91.0.
  • SciPy now has a Pixi package definition, allowing developers to easily build SciPy from source inside Pixi workspaces.
  • Developers may be interested in the private build option _without-fortran, which allows building SciPy from source in the absence of a Fortran compiler. This is an early prototype of the planned capability of a Fortran-free SciPy.
  • The private scipy.interpolate._regrid function may be of experimental interest. It provides an interface for 2-D smoothing B-spline fitting via separable 1-D FITPACK kernels. It is under consideraton for public exposure in some form in the future.

Authors

  • Name (commits)
  • h-vetinari (1)
  • Joseph Adams (1) +
  • Adrián Raso González (1) +
  • Virgile Andreani (1)
  • AshwathElang0 (1) +
  • Mart-Mihkel Aun (1) +
  • BarnikRB (2) +
  • Richie Bendall (1) +
  • J Berg (7) +
  • Florian Bourgey (50)
  • Jake Bowhay (99)
  • Jonathan Brodrick (1) +
  • Dietrich Brunn (36)
  • Evgeni Burovski (200)
  • Matthias Bussonnier (6)
  • CJ Carey (9)
  • Christine P. Chai (2)
  • Lucas Colley (90)
  • Dan (3) +
  • devdanzin (2) +
  • Martin Diehl (4)
  • Sam Dolat (2) +
  • dphipps-qnx (1) +
  • DWesl (2)
  • efrat99 (3) +
  • fbrandt (1) +
  • August Femtehjell (2) +
  • Matthew H Flamm (1)
  • Juan Flores (1) +
  • foreverallama (1) +
  • fumoboy007 (4) +
  • John Patrick Gallagher (1) +
  • Wei Bo Gao (1) +
  • Christoph Gohlke (1)
  • Nathan Goldbaum (20)
  • Ludmila Golomozin (11) +
  • Ralf Gommers (172)
  • Mathieu Guay-Paquet (1) +
  • Matt Haberland (147)
  • Joren Hammudoglu (29)
  • Jacob Hass (4)
  • Maya Horii (1) +
  • Guido Imperiale (1)
  • Jan Möseritz-Schmidt (2)
  • Leo Ji (4) +
  • JOD (2) +
  • Aditya Kamath (2) +
  • Mukunda Rao Katta (1) +
  • Robert Kern (1)
  • Ria Khatoniar (1) +
  • Matthias Koeppe (1)
  • krishneetRAJ (1) +
  • Iason Krommydas (1) +
  • Eric Larson (1)
  • Basil Liekens (31) +
  • lnzwz (2) +
  • Christian Lorentzen (15)
  • Alex Lubbock (1) +
  • Echedey Luis (2) +
  • Lunyxis (1) +
  • Zhang Maiyun (1) +
  • Diego Medina Medina (1) +
  • Elle Musoke (11) +
  • Andrew Nelson (103)
  • Nick ODell (29)
  • Dimitri Papadopoulos Orfanos (1)
  • partev (1)
  • Matti Picus (7)
  • Ilhan Polat (190)
  • Adrian Raso (3)
  • Aditya Rawat (1) +
  • Tyler Reddy (86)
  • Martin Reinecke (1)
  • Lucas Roberts (6)
  • Pamphile Roy (1)
  • Daniel Schmitz (26)
  • Martin Schuck (4)
  • Dan Schult (47)
  • Scott Shambaugh (16)
  • Sabaa Siddique (1) +
  • Nicholas Smith (1) +
  • Johannes F. Sommerfeldt (1) +
  • SpookyYomo (2) +
  • Albert Steppi (80)
  • Charalampos Stratakis (16) +
  • Taylor (1) +
  • thecaptain789 (1) +
  • Adam Turner (1)
  • Jacob Vanderplas (1)
  • Christian Veenhuis (2)
  • Sebastiano Vigna (1)
  • Rivka Walles (14) +
  • Warren Weckesser (11)
  • Soeren Wolfers (1) +
  • wongaokay (1) +
  • Xuefeng Xu (1)
  • Aniket Singh Yadav (2) +
  • yaochengchen (2) +
  • Fadi Younes (2) +
  • Isaiah Zimmerman (1) +
  • Simon Zwieback (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (19)

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

Note that the source and binary assets associated with this release candidate were published to PyPI using trusted publishing, and so the trusted assets and their hashes are made available more securely at https://pypi.org/project/scipy/1.18.0rc2/ rather than providing them here in a less secure manner.

View originalPermalink
How v1.18.0rc2 went
v1.18.0rc1Pre-release

SciPy 1.18.0rc1

Added 11
  • Added simplex_tolerance argument to LinearNDInterpolator and CloughTocher2dInterpolator to increase QHull simplex assignment tolerance
  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired
  • Support for three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everything except cython_blas/cython_lapack/linalg.blas/linalg.lapack
  • Added overwrite_b keyword argument to linalg.eigvals for consistency with other similar linalg functions
  • Added ILP64 support to scipy.linalg.expm and scipy.linalg.sqrtm
  • scipy.optimize.nnls and minimize methods SLSQP and L-BFGS-B now support ILP64 LAPACK when available
Changed 10
  • SciPy's internal FFT backend switched from pocketfft to ducc0.fft, significantly reducing storage requirements for internally cached plans
  • FITPACK Fortran code has been ported to C
  • linalg.cholesky now leverages symmetry properties for performance improvements and uses C implementation for batching loop
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support in compiled code
  • Batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd moved to C for substantial speedup with batched input
  • Improved performance of scipy.linalg.expm

SciPy 1.18.0 Release Notes

note: SciPy 1.18.0 is not released yet!

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

This release requires Python 3.12-3.14 and NumPy 2.0.0 or greater.

Highlights of this release

  • SciPy now supports three different build modes for BLAS and LAPACK LP64/ILP64 support, and machinery is provided for downstream cython_lapack consumers to gracefully handle LP64/ILP64 backend builds. ILP64 support has been substantially improved across the SciPy library.
  • Remaining Fortran to C translations have been completed---an experimental Fortran-free build option is now available to developers for testing purposes. Developer feedback is welcome on Fortran-free builds.
  • scipy.signal.whittaker_henderson now provides access to Whittaker-Henderson smoothing of a discrete signal.
  • A large number of scipy.stats functions now support lazy arrays and JAX JIT. Array API support has been improved substantially in SciPy, with at least 21 functions gaining new support in this release. 16 scipy.stats functions have also gained support for MArray input.

New features

scipy.fft improvements

  • SciPy's internal FFT backend has switched from pocketfft to its successor package ducc0.fft, which features several incremental improvements. The most significant of those from SciPy's perspective is probably that storage requirements for internally cached plans have been significantly reduced for most long 1D transforms. Plans that require more storage than 1MB will no longer be cached; this mainly affects huge 1D transforms of prime and near-prime sizes.

scipy.interpolate improvements

  • Users may now increase the QHull simplex assignment tolerance via the new simplex_tolerance argument to the _call__ methods of LinearNDInterpolator and CloughTocher2dInterpolator. This can help users avoid holes in certain interpolation problems.
  • The FITPACK Fortran code has been ported to C.

scipy.differentiate improvements

  • scipy.differentiate.derivative now supports passing kwargs to the function whose derivative is desired.

scipy.linalg improvements

  • We now support three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everyting except cython_blas/cython_lapack/ linalg.blas/linalg.lapack (support for Accelerate and MKL).
  • Machinery is now provided for downstream cython_lapack users to gracefully handle LP64/ILP64 backend builds. Worked examples, including build system details, have been included in this release.
  • An overwrite_b keyword argument was added to eigvals, for consistency with other similar linalg functions.
  • linalg.cholesky now leverages symmetry properties for performance improvements, especially for real matrices. The batching loop of cholesky has now also been moved to a C implementation.
  • scipy.linalg.lu and scipy.linalg.det have been rewritten in C++ with batching support in the compiled code.
  • Added ILP64 support to scipy.linalg.expm and scipy.linalg.sqrtm.
  • The batching loops of scipy.linalg.qr, scipy.linalg.eig, scipy.linalg.lstsq, and scipy.linalg.svd have been moved to C, providing a substantial speedup for batched input.
  • The performance of scipy.linalg.expm has been improved.
  • The performance for scipy.linalg.solve has improved for batched inputs.

scipy.optimize improvements

  • The trust_constr method for minimize was adjusted so that if the x array would result in infeasible constraints, and those constraints were marked as keep_feasible, then the objective function is not called with that x array.
  • The COBYQA method for minimize now supports being called concurrently by multiple threads. Previously, multiple threads calling this function would only run one at a time.
  • scipy.optimize.nnls, and minimize methods SLSQP and L-BFGS-B now have support for ILP64 LAPACK, when available.
  • Functions in scipy.optimize.elementwise now support passing kwargs to the callable function.

scipy.signal improvements

  • The new ~scipy.signal.whittaker_henderson implements Whittaker-Henderson smoothing of a discrete signal. It offers different penalties to control the smoothness as well as automatic selection of the penalty strength via optimization of the restricted maximum likelihood (REML) criterion. It is a valuable alternative for the Savitzky-Golay filter ~scipy.signal.savgol_filter. In econometrics, Whittaker-Henderson graduation of penalty order 2 is also known as Hodrick-Prescott filter.
  • lfilter_zi was refactored for improved numerical stability and efficiency. It now raises a ValueError if parameter a has leading zeros, i.e., a[0] == 0, since lfilter and filtfilt do not support that as well. Furthermore, a ValueError instead of a LinAlgError is raised if the filter is unstable due to having a pole at z = 1.

scipy.sparse improvements

  • In scipy.sparse.csgraph the computation of strongly connected components for directed graphs is now 2x faster with better cache locality, using algorithmic improvements described in the recent survey by Tarjan and Zwick.
  • Added ILP64 BLAS/LAPACK support to SuperLU and PROPACK extensions.
  • All sparse array/matrix formats now support matrix_transpose/.mT.
  • Support for n-dimensional linear operators has been added to scipy.sparse.linalg.LinearOperator.
  • scipy.sparse.linalg.minres now supports complex hermitian matrices.

scipy.integrate improvements

  • ILP64 support was added for ODEPACK
  • scipy.integrate.tanhsinh and scipy.integrate.nsum now support passing kwargs to the function to be integrated.

scipy.spatial improvements

  • 3D area calculations are now faster in scipy.spatial.SphericalVoronoi.
  • N-dimensional input is now supported for scipy.spatial.distance.minkowski, scipy.spatial.distance.euclidean, and scipy.spatial.distance.seuclidean.
  • It is now possible to return sparse arrays rather than matrices from KDTree.sparse_distance_matrix.
  • It is now possible to compose Rotation and RigidTransform directly, by automatically promoting Rotation when the two are composed via a multiplication operator.

scipy.special improvements

  • The accuracy of the following functions was improved: scipy.special.bdtrik, scipy.special.bdtrin, scipy.special.nbdtrik, scipy.special.nbdtrin.
  • The numerical behavior for scipy.special.eval_jacobi has been improved for several parameter combinations.
  • The Bessel functions scipy.special.j0 and scipy.special.y0 have improved accuracy for large arguments.

scipy.stats improvements

  • The accuracy of scipy.stats.pmean with tiny, nonzero p has been improved.
  • The performance of scipy.stats.halfgennorm has been improved.
  • zstatistic has been added to the result object of scipy.stats.mannwhitneyu.
  • A large number of stats functions now support lazy arrays and JAX JIT (see Python Array API support section below).
  • Support for the nan_policy keyword argument has been added to: scipy.stats.obrientransform, scipy.stats.boxcox, scipy.stats.boxcox_normmax, scipy.stats.yeojohnson, scipy.stats.yeojohnson_normmax, and scipy.stats.sigmaclip.
  • scipy.stats.ContinuousDistribution.lmoment has been added for computing population L-moments.

Python Array API Standard Support

  • Support has been added for CuPy delegation for: interpolate.PPoly, interpolate.BPoly, and interpolate.BSpline.
  • CuPy support has been added for scipy.stats.rankdata.
  • Array API support has been added for method and trim usage in scipy.stats.ttest_ind.
  • Support for MArrays has been added to: scipy.stats.cramervonmises, scipy.stats.ks_1samp, scipy.stats.ks_2samp, scipy.stats.mode, scipy.stats.rankdata, scipy.stats.kruskal, scipy.stats.brunnermunzel, scipy.stats.spearmanrho, scipy.stats.friedmanchisquare, scipy.stats.cramervonmises_2samp, scipy.stats.mannwhitneyu, scipy.stats.wilcoxon, scipy.stats.fligner, scipy.stats.linregress, scipy.stats.alexandergovern, and scipy.stats.levene.
  • Array API support has been added to: scipy.stats.quantile_test, scipy.stats.kendalltau (via NumPy conversion), scipy.stats.kstest, scipy.sparse.linalg.LinearOperator, scipy.stats.cumfreq, scipy.stats.relfreq, scipy.stats.ks_2samp, scipy.stats.theilslopes, scipy.stats.siegelslopes, scipy.stats.obrientransform (including marray), scipy.stats.binomtest, scipy.integrate.fixed_quad, scipy.signal.square, scipy.stats.expectile, scipy.stats.shapiro, scipy.stats.pointbiserialr, scipy.stats.bws_test, scipy.stats.estimated_cdf (new function), scipy.stats.linregress, scipy.integrate.simpson, and scipy.signal.sawtooth.
  • The torch support for scipy.signal.fftconvolve now correctly handles the float32 dtype.
  • JAX JIT support has been added for: scipy.stats.binomtest (except for method='two-sided'), scipy.stats.mannwhitneyu (except for method='auto'), scipy.stats.lmoment, scipy.stats.moment, scipy.stats.ansari (related to new method argument), scipy.stats.yeojohnson_llf, scipy.stats.epps_singleton_2samp, scipy.stats.wilcoxon (except for method='exact' and method='auto'), scipy.stats.rankdata (via delegation), scipy.signal.oaconvolve, scipy.signal.hilbert, and scipy.signal.hilbert2.

Deprecated features and future changes

  • passing lwork parameter to scipy.linalg.qr has been deprecated. The functionality was rarely used; the function computes the optimal size of the work arrays automatically, therefore users should simply remove their uses of the lwork parameter.
  • The sparse construction functions kron, kronsum and build_diag choose return type sparray or spmatrix depending on the type of the sparse input arrays. When no inputs are sparse, the output is chosen to be spmatrix. That has been deprecated. The return type when no inputs are sparse will be changing to sparray. You can control the output type by ensuring that at least one input array is sparse. If any are sparray, the output will be sparray. If all sparse inputs are spmatrix, the output will be spmatrix.
  • A FutureWarning is now issued for calling {r}matvec on column vectors with LinearOperator. Identical behavior can be achieved (and extended to batch dimensions) via {r}matmat.
  • scipy.linalg functions are now stricter--using non-LAPACK dtypes is deprecated. When the deprecations expire, this will effectively limit the dtypes allowed in linear algebra functions to: integers (upcast to float), and single/double precision float/complex dtypes.
  • scipy.spatial.minkowsi_distance, scipy.spatial.minkowsi_distance_p, and scipy.spatial.distance_matrix have been deprecated in favor of other superior functions.
  • scipy.spatial.tsearch has been deprecated because it duplicates functionality more conveniently provided within the Delaunay class proper.
  • The following functions have been deprecated because they were deemed not practically useful: scipy.interpolate.pade, scipy.interpolate.lagrange, and scipy.interpolate.approximate_taylor_polynomial.
  • Setting spmatrix=True for the scipy.io readers mmio, FFM, hb, and matlab/_mio is now deprecated, including when set as the default value.
  • The unintentionally public scipy.cluster.vq.py_vq has been deprecated.

Backwards incompatible changes

  • The output of scipy.stats.rankdata is now always of a floating point dtype -- the result dtype of the input and a Python float.
  • The behavior of the residuals returned by scipy.linalg.lstsq has been changed. For lapack_driver == "gelsy" or the system being either underdetermined or square, empty residuals are still returned. For lapack_driver == "gesld"/"gelss" in combination with an overdetermined system a non-empty residual is always returned. However, in the case where a slice is not full column rank, the corresponding residual is set to NaN.
  • The 2nd output object of scipy.stats.contingency.crosstab when kwarg sparse=True is now a sparse array holding the counts instead of a sparse matrix. This allows it to be nD, so can accept more than 2 sequences as inputs, but it is a different class. Most operations work the same for sparse arrays and matrixes with notable differences for matrix: * means matmul and always-2D. For more info see migration_to_sparray.
  • scipy.stats.obrientransform now returns a tuple of arrays instead of a single ndarray.
  • scipy.stats.multinomial now returns NaNs when the category probability (p) rows/arrays do not sum to unity. This is an expiration of the deprecated behavior of adjusting the final element in the p array to compensate. Note that multinomial.rvs will now raise an error in such cases, since it has an integral return type.
  • The iprint and disp parameters of scipy.optimize.fmin_l_bfgs_b have been removed, following the expiry of their deprecation.
  • For scipy.linalg.{sqrtm, logm, signm}, disp (and sqrtm blocksize) parameters were removed (expired deprecations).
  • The deprecated atol argument of scipy.optimize.nnls has been removed.

Other changes

  • The vendored Boost.Math was updated from 1.89.0 to 1.91.0.
  • SciPy now has a Pixi package definition, allowing developers to easily build SciPy from source inside Pixi workspaces.
  • Developers may be interested in the private build option _without-fortran, which allows building SciPy from source in the absence of a Fortran compiler. This is an early prototype of the planned capability of a Fortran-free SciPy.
  • The private scipy.interpolate._regrid function may be of experimental interest. It provides an interface for 2-D smoothing B-spline fitting via separable 1-D FITPACK kernels. It is under consideraton for public exposure in some form in the future.

Authors

  • Name (commits)
  • Joseph Adams (1) +
  • Adrián Raso González (1) +
  • Virgile Andreani (1)
  • AshwathElang0 (1) +
  • Mart-Mihkel Aun (1) +
  • BarnikRB (2) +
  • Richie Bendall (1) +
  • J Berg (7) +
  • Florian Bourgey (50)
  • Jake Bowhay (98)
  • Jonathan Brodrick (1) +
  • Dietrich Brunn (36)
  • Evgeni Burovski (200)
  • Matthias Bussonnier (6)
  • CJ Carey (9)
  • Christine P. Chai (2)
  • Lucas Colley (89)
  • Dan (3) +
  • devdanzin (2) +
  • Martin Diehl (4)
  • Sam Dolat (2) +
  • dphipps-qnx (1) +
  • DWesl (2)
  • efrat99 (3) +
  • fbrandt (1) +
  • August Femtehjell (2) +
  • Matthew H Flamm (1)
  • Juan Flores (1) +
  • foreverallama (1) +
  • fumoboy007 (4) +
  • John Patrick Gallagher (1) +
  • Wei Bo Gao (1) +
  • Christoph Gohlke (1)
  • Nathan Goldbaum (20)
  • Ludmila Golomozin (11) +
  • Ralf Gommers (172)
  • Mathieu Guay-Paquet (1) +
  • Matt Haberland (147)
  • Joren Hammudoglu (24)
  • Jacob Hass (4)
  • Maya Horii (1) +
  • Guido Imperiale (1)
  • Jan Möseritz-Schmidt (2)
  • Leo Ji (4) +
  • JOD (2) +
  • Aditya Kamath (2) +
  • Mukunda Rao Katta (1) +
  • Robert Kern (1)
  • Ria Khatoniar (1) +
  • Matthias Koeppe (1)
  • krishneetRAJ (1) +
  • Iason Krommydas (1) +
  • Eric Larson (1)
  • Basil Liekens (31) +
  • lnzwz (2) +
  • Christian Lorentzen (15)
  • Alex Lubbock (1) +
  • Echedey Luis (2) +
  • Lunyxis (1) +
  • Zhang Maiyun (1) +
  • Diego Medina Medina (1) +
  • Elle Musoke (11) +
  • Andrew Nelson (102)
  • Nick ODell (28)
  • Dimitri Papadopoulos Orfanos (1)
  • partev (1)
  • Matti Picus (7)
  • Ilhan Polat (190)
  • Adrian Raso (3)
  • Aditya Rawat (1) +
  • Tyler Reddy (94)
  • Martin Reinecke (1)
  • Lucas Roberts (6)
  • Pamphile Roy (1)
  • Daniel Schmitz (26)
  • Martin Schuck (4)
  • Dan Schult (47)
  • Scott Shambaugh (16)
  • Sabaa Siddique (1) +
  • Nicholas Smith (1) +
  • Johannes F. Sommerfeldt (1) +
  • SpookyYomo (2) +
  • Albert Steppi (80)
  • Charalampos Stratakis (16) +
  • Taylor (1) +
  • thecaptain789 (1) +
  • Adam Turner (1)
  • Christian Veenhuis (2)
  • Sebastiano Vigna (1)
  • Rivka Walles (14) +
  • Warren Weckesser (10)
  • Soeren Wolfers (1) +
  • wongaokay (1) +
  • Xuefeng Xu (1)
  • Aniket Singh Yadav (2) +
  • yaochengchen (2) +
  • Fadi Younes (2) +
  • Isaiah Zimmerman (1) +
  • Simon Zwieback (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (19)

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

Note that the source and binary assets associated with this release candidate were published to PyPI using trusted publishing, and so the trusted assets and their hashes are made available more securely at https://pypi.org/project/scipy/1.18.0rc1/ rather than providing them here in a less secure manner.

View originalPermalink
How v1.18.0rc1 went
v1.17.1

SciPy 1.17.1

SciPy 1.17.1 Release Notes

SciPy 1.17.1 is a bug-fix release with no new features compared to 1.17.0.

Authors

  • Name (commits)
  • Evgeni Burovski (5)
  • Lucas Colley (1)
  • Christoph Gohlke (1)
  • Ralf Gommers (6)
  • Matt Haberland (5)
  • Matthias Koeppe (1)
  • Nick ODell (1)
  • Ilhan Polat (10)
  • Tyler Reddy (44)
  • Martin Schuck (3)
  • Dan Schult (3)
  • stratakis (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (1)

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

Complete issue list, PR list, and release asset hashes are available in the associated README.txt.

View originalPermalink
How v1.17.1 went
v1.17.0

SciPy 1.17.0

Added 11
  • scipy.integrate.quad now has a fast path for returning 0 when the integration interval is empty
  • BDF, DOP853, RK23, RK45, OdeSolver, DenseOutput, ode, and complex_ode classes now support subscription for compatibility with scipy-stubs
  • scipy.interpolate.make_splrep, make_splprep, and generate_knots now accept a bc_type argument to control boundary conditions for spline fitting
  • scipy.interpolate.NdBSpline class now has a derivative method to construct a new spline representing a partial derivative
  • scipy.interpolate.AAA gained a new axis parameter
  • scipy.interpolate.FloaterHormannInterpolator added support for multidimensional, batched inputs and gained an axis parameter
Changed 9
  • Integration routines dopri5, dopri853, LSODA, vode, and zvode have been ported from Fortran77 to C
  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support
  • scipy.interpolate.NdBSpline mutable instance attribute .c was changed into a read-only @property
  • Performance of cubic and quintic modes of scipy.interpolate.RegularGridInterpolator has been improved
  • scipy.interpolate.RegularGridInterpolator instance attributes .grid and .values were changed into read-only properties
  • Numerical stability of scipy.interpolate.AAA has been improved

SciPy 1.17.0 Release Notes

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

This release requires Python 3.11-3.14 and NumPy 1.26.4 or greater.

Highlights of this release

  • Many SciPy functions have gained native support for batching of N-dimensional array input and additional support for the array API standard. An overall summary of the latter is now available in a set of tables.
  • In scipy.sparse, coo_array now supports indexing. This includes integers, slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and the relatively new nD. In scipy.sparse.linalg, ARPACK and PROPACK rewrites from Fortran77 to C now empower the use of external pseudorandom number generators, e.g. from numpy.
  • In scipy.spatial, transform.Rotation and transform.RigidTransform have been extended to support N-D arrays. geometric_slerp now has support for extrapolation.
  • scipy.stats has gained the matrix t and logistic distributions and many performance and accuracy improvements.
  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added, including for MKL and Apple Accelerate. Please report any issues with ILP64 you encounter.

New features

scipy.integrate improvements

  • The integration routines dopri5, dopri853, LSODA, vode, and zvode have been ported from Fortran77 to C.
  • scipy.integrate.quad now has a fast path for returning 0 when the integration interval is empty.
  • The BDF, DOP853, RK23, RK45, OdeSolver, DenseOutput, ode, and complex_ode classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.cluster improvements

  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support.

scipy.interpolate improvements

  • A new bc_type argument has been added to scipy.interpolate.make_splrep, scipy.interpolate.make_splprep, and scipy.interpolate.generate_knots to control the boundary conditions for spline fitting. Allowed values are "not-a-knot" (default) and "periodic".
  • A new derivative method has been added to the scipy.interpolate.NdBSpline class, to construct a new spline representing a partial derivative of the given spline. This method is similar to the BSpline.derivative method of 1-D spline objects. In addition, the NdBSpline mutable instance attribute .c was changed into a read-only @property.
  • Performance of "cubic" and "quintic" modes of scipy.interpolate.RegularGridInterpolator has been improved. Furthermore, the (mutable) instance attributes .grid and .values were changed into (read-only) properties.
  • Numerical stability of scipy.interpolate.AAA has been improved and it has gained a new axis parameter.
  • scipy.interpolate.FloaterHormannInterpolator added support for multidimensional, batched inputs and gained a new axis parameter to select the interpolation axis.
  • RBFInterpolator has gained an array API standard compatible backend, with an improved support for GPU arrays.
  • The AAA, *Interpolator, *Poly, and *Spline classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.linalg improvements

  • scipy.linalg.inv routine has been improved:

    • it now attempts to detect the structure of its argument and selects an appropriate low-level matrix inversion routine. A new assume_a keyword allows to bypass the structure detection if the structure is known. For batched inputs, the detection is run for each 2D slice, unless an explicit value for assume_a is provided (in which case, the structure is assumed to be the same for all 2-D slices of the batch);
    • the new lower={True,False} keyword argument has been added to help select the upper or lower triangle of the input matrix for symmetric inputs; refer to the docstring of scipy.linalg.inv for details;
    • the routine emits a LinAlgWarning if it detects an ill-conditioned input;
    • performance for batched inputs has been improved.
  • scipy.linalg.fiedler has gained native support for batched inputs.

  • performance has improved for scipy.linalg.solve with batched inputs for certain matrix structures.

scipy.optimize improvements

  • optimize.minimize(method="trust-exact") now accepts a solver-specific "subproblem_maxiter" option. This option can be used to assure that the algorithm converges for functions with an ill-conditioned Hessian.
  • Callback functions used by optimize.minimize(method="slsqp") can opt into the new callback interface by accepting a single keyword argument intermediate_result.
  • The BroydenFirst, *Jacobian, and Bounds classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.signal improvements

  • scipy.signal.abcd_normalize gained more informative error messages and the documentation was improved.
  • scipy.signal.get_window now accepts the suffixes '_periodic' and '_symmetric' to distinguish between periodic and symmetric windows (overriding the fftbin parameter). This benefits the functions coherence, csd, periodogram, welch, spectrogram, stft, istft, resample, resample_poly, firwin, firwin2, firwin_2d, check_COLA and check_NOLA, which utilize get_window but do not expose the fftbin parameter.
  • scipy.signal.hilbert2 gained the new keyword axes for specifying the axes along which the two-dimensional analytic signal should be calculated. Furthermore, the documentation of scipy.signal.hilbert and scipy.signal.hilbert2 was significantly improved.
  • The ShortTimeFFT and LinearTimeInvariant classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.sparse improvements

  • coo_array now supports indexing. This includes slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and the new nD. So COO format now has full support for nD and COO now allows indexing without converting formats.
  • Additional sparse construction functions include expand_dims, swapaxes, permute_dims, and nD support for the kron function.
  • ARPACK Fortran77 library is ported to C. Among many changes, it is now possible to use external random generators including NumPy PRNGs for reproducible runs. Previously this was not the case due to internal seeding behavior of the original ARPACK code.
  • Similarly, PROPACK Fortran77 library is also ported to C with the same PRNG enhancements and other improvements.
  • scipy.sparse.dok_array now supports an update method which can be used to update the sparse array using a dict, dict.items()-like iterable, or another dok_array matrix. It performs additional validation that keys are valid index tuples.
  • scipy.sparse.dia_array.tocsr is approximately three times faster and some unnecessary copy operations have been removed from sparse format interconversions more broadly.
  • Added scipy.sparse.linalg.funm_multiply_krylov, a restarted Krylov method for evaluating y = f(tA) b.
  • In sparse.linalg, the LinearOperator, LaplacianNd, and SuperLU classes now support subscription, making them generic types, for compatibility with scipy-stubs.
  • In sparse.linalg the eigs and eigsh functions now accept a new rng parameter.

scipy.spatial improvements

  • The spatial.transform module has gained an array API standard compatible backend.

  • transform.Rotation and transform.RigidTransform have been extended from 0D single values and 1D arrays to N-D arrays, with standard indexing and broadcasting rules. Both now have the following additions:

    • A shape property.
    • A shape argument to their identity() constructors, which should be preferred over the existing num argument. This has also been added as an argument for Rotation.random() (RigidTransform does not currently have a random constructor).
    • An axis argument to their mean() functions.
  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

  • Rotation.from_matrix has gained an assume_valid argument that allows for performance improvements when users can guarantee valid matrix inputs. from_matrix is now also faster in cases where a known orthogonal matrix is used.

  • The scipy.spatial.geometric_slerp function can now extrapolate. When given a value outside the range [0, 1], geometric_slerp() will continue with the same rotation outside this range. For example, if spherically interpolating with start being a point on the equator, and end being a point at the north pole, then a value of t=-1 would give you a point at the south pole.

  • Rotation.as_euler and Rotation.as_davenport methods have gained a suppress_warnings parameter to enable suppression of gimbal lock warnings.

  • Rotation.__init__ has gained a new optional scalar_first parameter and there is a new Rotation.__setitem__ method.

scipy.special improvements

  • The following functions for statistical applications have significantly improved parameter ranges and reduced error rates: btdtria, btdtrib, chdtriv, chndtr, chndtrix, chndtridf, chndtrinc, fdtr, fdtrc, fdtri, gdtria, gdtrix, pdtrik, stdtr and stdtrit.
  • The incomplete beta functions betainc, betaincc, betaincinv and betainccinv are improved for extreme parameter ranges.

scipy.stats improvements

  • scipy.stats.matrix_t has been added to represent the matrix t distribution. It supports methods pdf (and logpdf) for computing the probability density function and rvs for generating random variates.
  • scipy.stats.Logistic was added for modeling random variables that follow a logistic distribution.
  • scipy.stats.quantile now accepts a weights argument to specify frequency weights.
  • scipy.stats.quantile is now faster on large arrays as it no longer uses stable sort internally.
  • scipy.stats.quantile supports three new values of the method argument, 'round_inward', 'round_outward', and 'round_neareast', for use in the context of trimming and winsorizing data.
  • scipy.stats.truncpareto now accepts negative values for the exponent shape parameter, enabling use of truncpareto as a more general power law distribution.
  • scipy.stats.logser now provides a distribution-specific implementation of the sf method, improving speed and accuracy.
  • Implementations of the following function have been vectorized: scipy.stats.ansari, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, and scipy.stats.mood. Typically, this improves performance with multidimensional (batch) input.
  • The critical value tables of scipy.stats.anderson have been updated.
  • A new method parameter of scipy.stats.anderson allows the user to compute p-values by interpolating between tabulated values or using Monte Carlo simulation. The method parameter must be passed explicitly to add a pvalue attribute to the result object and avoid a warning about the upcoming removal of critical_value, significance_level, and fit_result attributes.
  • A new variant parameter of scipy.stats.anderson_ksamp allows the user to select between three different variants of the statistic, superseding the midrank parameter which allowed toggling between two. The new 'continuous' variant is equivalent to 'discrete' when there are no ties in the sample, but the calculation is faster. The variant parameter must be passed explicitly to avoid a warning about the deprecation of the midrank attribute and the upcoming removal of critical_values from the result object.
  • The speed and accuracy of most scipy.stats.zipfian methods has been improved.
  • The accuracies of the scipy.stats.Binomial methods logcdf and logccdf have been improved in the tails.
  • The default guess of scipy.stats.trapezoid.fit has been improved.
  • The accuracy and range of the cdf, sf, isf, and ppf methods of scipy.stats.binom and scipy.stats.nbinom has been improved.
  • The Covariance, Uniform, Normal, Binomial, Mixture, rv_frozen, and multi_rv_frozen classes now support subscription, making them generic types, for compatibility with scipy-stubs.
  • The multivariate_t and multivariate_normal distributions have gained a new marginal method.
  • yeojohnson_llf gained new parameters axis, nan_policy, and keepdims, and now returns a numpy scalar where it would previously return a 0D array.
  • The new spearmanrho function is an array API compatible substitute for spearmanr.
  • The median_abs_deviation function has gained a keepdims parameter.
  • The trim_mean function has gained new nan_policy and keepdims parameters.

Array API Standard Support

  • An overall summary table for our array API standard support/coverage is now available.
  • The overhead associated with array namespace determination has been reduced, providing improved performance in dispatching to different backends.
  • scipy.cluster.hierarchy.is_isomorphic has gained support.
  • scipy.interpolate.make_lsq_spline, scipy.interpolate.make_smoothing_spline, scipy.interpolate.make_splrep, scipy.interpolate.make_splprep, scipy.interpolate.generate_knots, and scipy.interpolate.make_interp_spline have gained support.
  • scipy.signal.bilinear, scipy.signal.iircomb, scipy.signal.iirdesign, scipy.signal.iirfilter, scipy.signal.iirpeak, scipy.signal.iirnotch, scipy.signal.gammatone, and scipy.signal.group_delay have gained support.
  • scipy.signal.butter, scipy.signal.buttap, scipy.signal.buttord, scipy.signal.cheby1, scipy.signal.cheb1ap, scipy.signal.cheb1ord, scipy.signal.cheby2, scipy.signal.cheb2ap, scipy.signal.cheb2ord, scipy.signal.bessel, scipy.signal.besselap, scipy.signal.ellip, scipy.signal.ellipap, and scipy.signal.ellipord have gained support.
  • scipy.signal.savgol_filter, scipy.signal.savgol_coeffs, and scipy.signal.abcd_normalize have gained support.
  • spatial.transform has gained support.
  • scipy.integrate.qmc_quad, scipy.integrate.cumulative_simpson, scipy.integrate.cumulative_trapezoid, and scipy.integrate.romb have gained support.
  • scipy.linalg.block_diag, scipy.linalg.fiedler, and scipy.linalg.orthogonal_procrustes have gained support.
  • scipy.interpolate.BSpline, scipy.interpolate.NdBSpline, scipy.interpolate.RegularGridInterpolator, and scipy.interpolate.RBFInterpolator gained support.
  • Support added for scipy.stats.alexandergovern, scipy.stats.bootstrap, scipy.stats.brunnermunzel, scipy.stats.chatterjeexi, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.false_discovery_control, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.iqr, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, scipy.stats.lmoment, scipy.stats.mannwhitneyu, scipy.stats.median_abs_deviation, scipy.stats.mode, scipy.stats.mood, scipy.stats.ansari, scipy.stats.power, scipy.stats.permutation_test, scipy.stats.sigmaclip, scipy.stats.wilcoxon, and scipy.stats.yeojohnson_llf.
  • scipy.stats.pearsonr has gained support for JAX and Dask backends.
  • scipy.stats.variation has gained support for the Dask backend.
  • marray support was added for stats.gtstd, stats.directional_stats, stats.bartlett, stats.variation, stats.pearsonr, and stats.entropy.

Deprecated features and future changes

  • The scipy.odr module is deprecated in v1.17.0 and will be completely removed in v1.19.0. Users are suggested to use the odrpack package instead.
  • The default dype behavior of scipy.sparse.diags and scipy.sparse.diags_array will change in v1.19.0.
  • In v1.19.0, scipy.linalg.hankel will no longer ravel multidimensional inputs and instead will treat them as a batch.
  • The precenter argument of scipy.signal.lombscargle is deprecated and will be removed in v1.19.0. Furthermore, some arguments will become keyword only.
  • For scipy.stats.anderson, the tuple-unpacking behavior of the return object and attributes critical_values, significance_level, and fit_result are deprecated. Use the new method parameter to avoid the deprecation warning. Beginning in SciPy 1.19.0, these features will no longer be available, and the object returned will have attributes statistic and pvalue.
  • For scipy.stats.anderson_ksamp, the midrank parameter is deprecated and the new variant parameter should be preferred. This also means that the presence of the critical_values return array is deprecated.

Expired deprecations

  • scipy.stats.find_repeats has been removed. Please use numpy.unique/numpy.unique_counts instead.
  • scipy.linalg functions for Toeplitz matrices no longer ravel n-d input arguments; instead, multidimensional input is treated as a batch.
  • The seed and rand functions from scipy.linalg.interpolative have been removed. Use the rng argument instead.
  • Complex inputs to scipy.spatial.distance.cosine and scipy.spatial.distance.correlation now raise an error.
  • Support for object arrays and longdoubles has been removed from scipy.signal.correlate, scipy.signal.convolve, scipy.signal.lfilter, and scipy.signal.sosfilt.
  • kulczynski1 and sokalmichener have been removed from scipy.spatial.distance.
  • kron has been removed from scipy.linalg. Please use numpy.kron.
  • Accidentally exposed functions have been removed from scipy.interpolate.interpnd.
  • The random_state and permutation arguments of scipy.stats.ttest_ind have been removed.
  • sph_harm, clpmn, lpn, and lpmn have been removed from scipy.special.

Backwards incompatible changes

  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

Other changes

  • The version of the Boost Math library leveraged by SciPy has been increased from 1.88.0 to 1.89.0.

  • On POSIX operating systems, SciPy will now use the 'forkserver' multiprocessing context on Python 3.13 and older for workers=<an-int> calls if the user hasn't configured a default method themselves. This follows the default behavior on Python 3.14.

  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added. To enable it, build SciPy with -Duse-ilp64=true meson option, and make sure to have a LAPACK library which exposes both LP64 and ILP64 symbols. Currently supported LAPACK libraries are MKL and Apple Accelerate. Note that:

    • the ILP64 support is optional, and is in addition to the always-available LP64 interface;
    • at runtime, you can select the ILP64 variants via the get_{blas,lapack}_funcs functions: scipy.linalg.lapack.get_lapack_funcs(..., use_ilp64="preferred") selects the ILP64 variant if available and LP64 variant otherwise;
    • cython_blas and cython_lapack modules always contain the LP64 routines for ABI compatibility.

Please report any issues with ILP64 you encounter.

Authors

  • Name (commits)
  • h-vetinari (3)
  • Joshua Alexander (1) +
  • Amit Aronovitch (1) +
  • Ayush Baranwal (1) +
  • Cristrian Batrin (1) +
  • Marco Berzborn (1) +
  • Ole Bialas (1) +
  • Om Biradar (1) +
  • Florian Bourgey (2)
  • Jake Bowhay (103)
  • Matteo Brivio (1) +
  • Dietrich Brunn (34)
  • Johannes Buchner (2) +
  • Evgeni Burovski (292)
  • Nicholas Carlini (1) +
  • Luca Cerina (1) +
  • Christine P. Chai (35)
  • Saransh Chopra (1)
  • Lucas Colley (121)
  • Björn Ingvar Dahlgren (2) +
  • Sumit Das (1) +
  • Hans Dembinski (1)
  • John M Dusel (1) +
  • DWesl (4)
  • Pieter Eendebak (6)
  • Kian Eliasi (2)
  • Rob Falck (1)
  • Abdullah Fayed (3) +
  • Emmanuel Ferdman (2) +
  • Filipe Laíns (1) +
  • Daniel Fremont (1) +
  • Neil Girdhar (1)
  • Ilan Gold (35)
  • Nathan Goldbaum (3) +
  • Ralf Gommers (124)
  • Nicolas Guidotti (1) +
  • Geoffrey Gunter (1) +
  • Matt Haberland (183)
  • Joren Hammudoglu (60)
  • Jacob Hass (2) +
  • Nick Hodgskin (1) +
  • Stephen Huan (1) +
  • Guido Imperiale (41)
  • Gert-Ludwig Ingold (1)
  • Jaime Rodríguez-Guerra (2) +
  • Jan Möseritz-Schmidt (2) +
  • JBlitzar (1) +
  • Adam Jones (2)
  • Dustin Kenefake (1) +
  • Robert Kern (3)
  • Gleb Khmyznikov (1) +
  • Daniil Kiktenko (1) +
  • Pascal Klein (2) +
  • kleiter (1) +
  • Oliver Kovacs (1) +
  • Koven (1) +
  • Abhishek Kumar (2) +
  • Arthur Lacote (2) +
  • Eric Larson (7)
  • Mouad Leachouri (1) +
  • Tristan Leclercq (1) +
  • Antony Lee (5)
  • Jesse Livezey (8)
  • Philip Loche (1)
  • Yuxi Long (4) +
  • Christian Lorentzen (1)
  • Joshua Markovic (1) +
  • Gabryel Mason-Williams (1) +
  • mcdigman (1) +
  • Rafael Menezes (1) +
  • Stefano Miccoli (1) +
  • Michał Górny (2)
  • Jost Migenda (7) +
  • Suriyaa MM (1) +
  • Andrew Nelson (72)
  • newyork_loki (2) +
  • Nick ODell (34)
  • Dimitri Papadopoulos Orfanos (2)
  • Drew Parsons (1)
  • Gilles Peiffer (3) +
  • Matti Picus (1)
  • Jonas Pleyer (2) +
  • Ilhan Polat (119)
  • Akshay Priyadarshi (2) +
  • Mohammed Abdul Rahman (1) +
  • Daniele Raimondi (2) +
  • Ritesh Rana (1) +
  • Adrian Raso (1) +
  • Dan Raviv (1) +
  • Tyler Reddy (136)
  • Lucas Roberts (4)
  • Bernard Roesler (1) +
  • Mikhail Ryazanov (27)
  • Daniel Schmitz (25)
  • Martin Schuck (25)
  • Dan Schult (33)
  • Mugunthan Selvanayagam (1) +
  • Scott Shambaugh (14)
  • Rodrigo Silva (1) +
  • Samaresh Kumar Singh (8) +
  • Kartik Sirohi (1) +
  • Albert Steppi (179)
  • Matthias Straka (1) +
  • Theo Teske (1) +
  • Noam Teyssier (1) +
  • tommie979 (1) +
  • Christian Veenhuis (1)
  • Pierre Veron (1) +
  • Shuhei Watanabe (1) +
  • Warren Weckesser (25)
  • WhimsyHippo (7) +
  • Rory Yorke (2)
  • Will Zhang (1) +
  • Eric Zitong Zhou (1)
  • Tingwei Zhu (1) +
  • Zhenyu Zhu (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (38)

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

Complete issue list, PR list, and release asset hashes are available in the associated README.txt.

View originalPermalink
How v1.17.0 went
v1.17.0rc2Pre-release

SciPy 1.17.0rc2

Added 12
  • Many SciPy functions now have native support for batching of N-dimensional array input and additional support for the array API standard
  • coo_array in scipy.sparse now supports indexing including integers, slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and nD
  • ARPACK and PROPACK in scipy.sparse.linalg have been rewritten from Fortran77 to C to support external pseudorandom number generators
  • transform.Rotation and transform.RigidTransform in scipy.spatial have been extended to support N-D arrays
  • geometric_slerp in scipy.spatial now has support for extrapolation
  • scipy.stats has gained the matrix t and logistic distributions
Changed 7
  • SciPy now requires Python 3.11-3.14 and NumPy 1.26.4 or greater
  • Integration routines dopri5, dopri853, LSODA, vode, and zvode in scipy.integrate have been ported from Fortran77 to C
  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support
  • The NdBSpline mutable instance attribute .c was changed into a read-only @property
  • Performance of cubic and quintic modes of scipy.interpolate.RegularGridInterpolator has been improved
  • RegularGridInterpolator instance attributes .grid and .values were changed into read-only properties
  • Numerical stability of scipy.interpolate.AAA has been improved and it has gained a new axis parameter

SciPy 1.17.0 Release Notes

Note: SciPy 1.17.0 is not released yet!

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

This release requires Python 3.11-3.14 and NumPy 1.26.4 or greater.

Highlights of this release

  • Many SciPy functions have gained native support for batching of N-dimensional array input and additional support for the array API standard. An overall summary of the latter is now available in a set of tables.
  • In scipy.sparse, coo_array now supports indexing. This includes integers, slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and the relatively new nD. In scipy.sparse.linalg, ARPACK and PROPACK rewrites from Fortran77 to C now empower the use of external pseudorandom number generators, e.g. from numpy.
  • In scipy.spatial, transform.Rotation and transform.RigidTransform have been extended to support N-D arrays. geometric_slerp now has support for extrapolation.
  • scipy.stats has gained the matrix t and logistic distributions and many performance and accuracy improvements.
  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added, including for MKL, Apple Accelerate and OpenBLAS. Please report any issues with ILP64 you encounter.

New features

scipy.integrate improvements

  • The integration routines dopri5, dopri853, LSODA, vode, and zvode have been ported from Fortran77 to C.
  • scipy.integrate.quad now has a fast path for returning 0 when the integration interval is empty.
  • The BDF, DOP853, RK23, RK45, OdeSolver, DenseOutput, ode, and complex_ode classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.cluster improvements

  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support.

scipy.interpolate improvements

  • A new bc_type argument has been added to scipy.interpolate.make_splrep, scipy.interpolate.make_splprep, and scipy.interpolate.generate_knots to control the boundary conditions for spline fitting. Allowed values are "not-a-knot" (default) and "periodic".
  • A new derivative method has been added to the scipy.interpolate.NdBSpline class, to construct a new spline representing a partial derivative of the given spline. This method is similar to the BSpline.derivative method of 1-D spline objects. In addition, the NdBSpline mutable instance attribute .c was changed into a read-only @property.
  • Performance of "cubic" and "quintic" modes of scipy.interpolate.RegularGridInterpolator has been improved. Furthermore, the (mutable) instance attributes .grid and .values were changed into (read-only) properties.
  • Numerical stability of scipy.interpolate.AAA has been improved and it has gained a new axis parameter.
  • scipy.interpolate.FloaterHormannInterpolator added support for multidimensional, batched inputs and gained a new axis parameter to select the interpolation axis.
  • RBFInterpolator has gained an array API standard compatible backend, with an improved support for GPU arrays.
  • The AAA, *Interpolator, *Poly, and *Spline classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.linalg improvements

  • scipy.linalg.inv routine has been improved:

    • it now attempts to detect the structure of its argument and selects an appropriate low-level matrix inversion routine. A new assume_a keyword allows to bypass the structure detection if the structure is known. For batched inputs, the detection is run for each 2D slice, unless an explicit value for assume_a is provided (in which case, the structure is assumed to be the same for all 2-D slices of the batch);
    • the new lower={True,False} keyword argument has been added to help select the upper or lower triangle of the input matrix for symmetric inputs; refer to the docstring of scipy.linalg.inv for details;
    • the routine emits a LinAlgWarning if it detects an ill-conditioned input;
    • performance for batched inputs has been improved.
  • scipy.linalg.fiedler has gained native support for batched inputs.

  • performance has improved for scipy.linalg.solve with batched inputs for certain matrix structures.

scipy.optimize improvements

  • optimize.minimize(method="trust-exact") now accepts a solver-specific "subproblem_maxiter" option. This option can be used to assure that the algorithm converges for functions with an ill-conditioned Hessian.
  • Callback functions used by optimize.minimize(method="slsqp") can opt into the new callback interface by accepting a single keyword argument intermediate_result.
  • The BroydenFirst, *Jacobian, and Bounds classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.signal improvements

  • scipy.signal.abcd_normalize gained more informative error messages and the documentation was improved.
  • scipy.signal.get_window now accepts the suffixes '_periodic' and '_symmetric' to distinguish between periodic and symmetric windows (overriding the fftbin parameter). This benefits the functions coherence, csd, periodogram, welch, spectrogram, stft, istft, resample, resample_poly, firwin, firwin2, firwin_2d, check_COLA and check_NOLA, which utilize get_window but do not expose the fftbin parameter.
  • scipy.signal.hilbert2 gained the new keyword axes for specifying the axes along which the two-dimensional analytic signal should be calculated. Furthermore, the documentation of scipy.signal.hilbert and scipy.signal.hilbert2 was significantly improved.
  • The ShortTimeFFT and LinearTimeInvariant classes now support subscription, making them generic types, for compatibility with scipy-stubs.

scipy.sparse improvements

  • coo_array now supports indexing. This includes slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and the new nD. So COO format now has full support for nD and COO now allows indexing without converting formats.
  • Additional sparse construction functions include expand_dims, swapaxes, permute_dims, and nD support for the kron function.
  • ARPACK Fortran77 library is ported to C. Among many changes, it is now possible to use external random generators including NumPy PRNGs for reproducible runs. Previously this was not the case due to internal seeding behavior of the original ARPACK code.
  • Similarly, PROPACK Fortran77 library is also ported to C with the same PRNG enhancements and other improvements.
  • scipy.sparse.dok_array now supports an update method which can be used to update the sparse array using a dict, dict.items()-like iterable, or another dok_array matrix. It performs additional validation that keys are valid index tuples.
  • scipy.sparse.dia_array.tocsr is approximately three times faster and some unnecessary copy operations have been removed from sparse format interconversions more broadly.
  • Added scipy.sparse.linalg.funm_multiply_krylov, a restarted Krylov method for evaluating y = f(tA) b.
  • In sparse.linalg, the LinearOperator, LaplacianNd, and SuperLU classes now support subscription, making them generic types, for compatibility with scipy-stubs.
  • In sparse.linalg the eigs and eigsh functions now accept a new rng parameter.

scipy.spatial improvements

  • The spatial.transform module has gained an array API standard compatible backend.

  • transform.Rotation and transform.RigidTransform have been extended from 0D single values and 1D arrays to N-D arrays, with standard indexing and broadcasting rules. Both now have the following additions:

    • A shape property.
    • A shape argument to their identity() constructors, which should be preferred over the existing num argument. This has also been added as an argument for Rotation.random() (RigidTransform does not currently have a random constructor).
    • An axis argument to their mean() functions.
  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

  • Rotation.from_matrix has gained an assume_valid argument that allows for performance improvements when users can guarantee valid matrix inputs. from_matrix is now also faster in cases where a known orthogonal matrix is used.

  • The scipy.spatial.geometric_slerp function can now extrapolate. When given a value outside the range [0, 1], geometric_slerp() will continue with the same rotation outside this range. For example, if spherically interpolating with start being a point on the equator, and end being a point at the north pole, then a value of t=-1 would give you a point at the south pole.

  • Rotation.as_euler and Rotation.as_davenport methods have gained a suppress_warnings parameter to enable suppression of gimbal lock warnings.

  • Rotation.__init__ has gained a new optional scalar_first parameter and there is a new Rotation.__setitem__ method.

scipy.special improvements

  • The following functions for statistical applications have significantly improved parameter ranges and reduced error rates: btdtria, btdtrib, chdtriv, chndtr, chndtrix, chndtridf, chndtrinc, fdtr, fdtrc, fdtri, gdtria, gdtrix, pdtrik, stdtr and stdtrit.
  • The incomplete beta functions betainc, betaincc, betaincinv and betainccinv are improved for extreme parameter ranges.

scipy.stats improvements

  • scipy.stats.matrix_t has been added to represent the matrix t distribution. It supports methods pdf (and logpdf) for computing the probability density function and rvs for generating random variates.
  • scipy.stats.Logistic was added for modeling random variables that follow a logistic distribution.
  • scipy.stats.quantile now accepts a weights argument to specify frequency weights.
  • scipy.stats.quantile is now faster on large arrays as it no longer uses stable sort internally.
  • scipy.stats.quantile supports three new values of the method argument, 'round_inward', 'round_outward', and 'round_neareast', for use in the context of trimming and winsorizing data.
  • scipy.stats.truncpareto now accepts negative values for the exponent shape parameter, enabling use of truncpareto as a more general power law distribution.
  • scipy.stats.logser now provides a distribution-specific implementation of the sf method, improving speed and accuracy.
  • Implementations of the following function have been vectorized: scipy.stats.ansari, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, and scipy.stats.mood. Typically, this improves performance with multidimensional (batch) input.
  • The critical value tables of scipy.stats.anderson have been updated.
  • The speed and accuracy of most scipy.stats.zipfian methods has been improved.
  • The accuracies of the scipy.stats.Binomial methods logcdf and logccdf have been improved in the tails.
  • The default guess of scipy.stats.trapezoid.fit has been improved.
  • The accuracy and range of the cdf, sf, isf, and ppf methods of scipy.stats.binom and scipy.stats.nbinom has been improved.
  • The Covariance, Uniform, Normal, Binomial, Mixture, rv_frozen, and multi_rv_frozen classes now support subscription, making them generic types, for compatibility with scipy-stubs.
  • The multivariate_t and multivariate_normal distributions have gained a new marginal method.
  • yeojohnson_llf gained new parameters axis, nan_policy, and keepdims, and now returns a numpy scalar where it would previously return a 0D array.
  • The new spearmanrho function is an array API compatible substitute for spearmanr.
  • The median_abs_deviation function has gained a keepdims parameter.
  • The trim_mean function has gained new nan_policy and keepdims parameters.

Array API Standard Support

  • An overall summary table for our array API standard support/coverage is now available
  • The overhead associated with array namespace determination has been reduced, providing improved performance in dispatching to different backends.
  • scipy.cluster.hierarchy.is_isomorphic has gained support.
  • scipy.interpolate.make_lsq_spline, scipy.interpolate.make_smoothing_spline, scipy.interpolate.make_splrep, scipy.interpolate.make_splprep, scipy.interpolate.generate_knots, and scipy.interpolate.make_interp_spline have gained support.
  • scipy.signal.bilinear, scipy.signal.iircomb, scipy.signal.iirdesign, scipy.signal.iirfilter, scipy.signal.iirpeak, scipy.signal.iirnotch, scipy.signal.gammatone, and scipy.signal.group_delay have gained support.
  • scipy.signal.butter, scipy.signal.buttap, scipy.signal.buttord, scipy.signal.cheby1, scipy.signal.cheb1ap, scipy.signal.cheb1ord, scipy.signal.cheby2, scipy.signal.cheb2ap, scipy.signal.cheb2ord, scipy.signal.bessel, scipy.signal.besselap, scipy.signal.ellip, scipy.signal.ellipap, and scipy.signal.ellipord have gained support.
  • scipy.signal.savgol_filter, scipy.signal.savgol_coeffs, and scipy.signal.abcd_normalize have gained support.
  • spatial.transform has gained support.
  • scipy.integrate.qmc_quad, scipy.integrate.cumulative_simpson, scipy.integrate.cumulative_trapezoid, and scipy.integrate.romb have gained support.
  • scipy.linalg.block_diag, scipy.linalg.fiedler, and scipy.linalg.orthogonal_procrustes have gained support.
  • scipy.interpolate.BSpline, scipy.interpolate.NdBSpline, scipy.interpolate.RegularGridInterpolator, and scipy.interpolate.RBFInterpolator gained support.
  • Support added for scipy.stats.alexandergovern, scipy.stats.bootstrap, scipy.stats.brunnermunzel, scipy.stats.chatterjeexi, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.false_discovery_control, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.iqr, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, scipy.stats.lmoment, scipy.stats.mannwhitneyu, scipy.stats.median_abs_deviation, scipy.stats.mode, scipy.stats.mood, scipy.stats.ansari, scipy.stats.power, scipy.stats.permutation_test, scipy.stats.sigmaclip, scipy.stats.wilcoxon, and scipy.stats.yeojohnson_llf.
  • scipy.stats.pearsonr has gained support for JAX and Dask backends.
  • scipy.stats.variation has gained support for the Dask backend.
  • marray support was added for stats.gtstd, stats.directional_stats, stats.bartlett, stats.variation, stats.pearsonr, and stats.entropy.

Deprecated features and future changes

  • The scipy.odr module is deprecated in v1.17.0 and will be completely removed in v1.19.0. Users are suggested to use the odrpack package instead.
  • The default dype behavior of scipy.sparse.diags and scipy.sparse.diags_array will change in v1.19.0.
  • In v1.19.0, scipy.linalg.hankel will no longer ravel multidimensional inputs and instead will treat them as a batch.
  • The precenter argument of scipy.signal.lombscargle is deprecated and will be removed in v1.19.0. Furthermore, some arguments will become keyword only.
  • For scipy.stats.anderson, the tuple-unpacking behavior of the return object and attributes critical_values, significance_level, and fit_result are deprecated. Beginning in SciPy 1.19.0, these features will no longer be available, and the object returned will have attributes statistic and pvalue.
  • For scipy.stats.anderson_ksamp, the midrank parameter is deprecated and the new variant parameter should be preferred. This also means that the presence of the critical_values return array is deprecated.

Expired deprecations

  • scipy.stats.find_repeats has been removed. Please use numpy.unique/numpy.unique_counts instead.
  • scipy.linalg functions for Toeplitz matrices no longer ravel n-d input arguments; instead, multidimensional input is treated as a batch.
  • The seed and rand functions from scipy.linalg.interpolative have been removed. Use the rng argument instead.
  • Complex inputs to scipy.spatial.distance.cosine and scipy.spatial.distance.correlation now raise an error.
  • Support for object arrays and longdoubles has been removed from scipy.signal.correlate, scipy.signal.convolve, scipy.signal.lfilter, and scipy.signal.sosfilt.
  • kulczynski1 and sokalmichener have been removed from scipy.spatial.distance.
  • kron has been removed from scipy.linalg. Please use numpy.kron.
  • Accidentally exposed functions have been removed from scipy.interpolate.interpnd.
  • The random_state and permutation arguments of scipy.stats.ttest_ind have been removed.
  • sph_harm, clpmn, lpn, and lpmn have been removed from scipy.special.

Backwards incompatible changes

  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

Other changes

  • The version of the Boost Math library leveraged by SciPy has been increased from 1.88.0 to 1.89.0.

  • On POSIX operating systems, SciPy will now use the 'forkserver' multiprocessing context on Python 3.13 and older for workers=<an-int> calls if the user hasn't configured a default method themselves. This follows the default behavior on Python 3.14.

  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added. To enable it, build SciPy with -Duse-ilp64=true meson option, and make sure to have a LAPACK library which exposes both LP64 and ILP64 symbols. Currently supported LAPACK libraries are MKL, Apple Accelerate and OpenBLAS through the scipy-openblas64 package. Note that:

    • the ILP64 support is optional, and is in addition to the always-available LP64 interface;
    • at runtime, you can select the ILP64 variants via the get_{blas,lapack}_funcs functions: scipy.linalg.lapack.get_lapack_funcs(..., use_ilp64="preferred") selects the ILP64 variant if available and LP64 variant otherwise;
    • cython_blas and cython_lapack modules always contain the LP64 routines for ABI compatibility.

Please report any issues with ILP64 you encounter.

Authors

  • Name (commits)
  • h-vetinari (3)
  • Joshua Alexander (1) +
  • Amit Aronovitch (1) +
  • Ayush Baranwal (1) +
  • Cristrian Batrin (1) +
  • Marco Berzborn (1) +
  • Ole Bialas (1) +
  • Om Biradar (1) +
  • Florian Bourgey (2)
  • Jake Bowhay (103)
  • Matteo Brivio (1) +
  • Dietrich Brunn (34)
  • Johannes Buchner (2) +
  • Evgeni Burovski (290)
  • Nicholas Carlini (1) +
  • Luca Cerina (1) +
  • Christine P. Chai (35)
  • Saransh Chopra (1)
  • Lucas Colley (121)
  • Björn Ingvar Dahlgren (2) +
  • Sumit Das (1) +
  • Hans Dembinski (1)
  • John M Dusel (1) +
  • DWesl (4)
  • Pieter Eendebak (6)
  • Kian Eliasi (2)
  • Rob Falck (1)
  • Abdullah Fayed (3) +
  • Emmanuel Ferdman (2) +
  • Filipe Laíns (1) +
  • Daniel Fremont (1) +
  • Neil Girdhar (1)
  • Ilan Gold (35)
  • Nathan Goldbaum (3) +
  • Ralf Gommers (121)
  • Nicolas Guidotti (1) +
  • Geoffrey Gunter (1) +
  • Matt Haberland (181)
  • Joren Hammudoglu (60)
  • Jacob Hass (2) +
  • Nick Hodgskin (1) +
  • Stephen Huan (1) +
  • Guido Imperiale (41)
  • Gert-Ludwig Ingold (1)
  • Jaime Rodríguez-Guerra (2) +
  • Jan Möseritz-Schmidt (2) +
  • JBlitzar (1) +
  • Adam Jones (2)
  • Dustin Kenefake (1) +
  • Robert Kern (3)
  • Gleb Khmyznikov (1) +
  • Daniil Kiktenko (1) +
  • Pascal Klein (2) +
  • kleiter (1) +
  • Oliver Kovacs (1) +
  • Koven (1) +
  • Abhishek Kumar (2) +
  • Arthur Lacote (2) +
  • Eric Larson (7)
  • Mouad Leachouri (1) +
  • Tristan Leclercq (1) +
  • Antony Lee (5)
  • Jesse Livezey (8)
  • Philip Loche (1)
  • Yuxi Long (4) +
  • Christian Lorentzen (1)
  • Joshua Markovic (1) +
  • Gabryel Mason-Williams (1) +
  • mcdigman (1) +
  • Rafael Menezes (1) +
  • Stefano Miccoli (1) +
  • Michał Górny (2)
  • Jost Migenda (7) +
  • Suriyaa MM (1) +
  • Andrew Nelson (72)
  • newyork_loki (2) +
  • Nick ODell (33)
  • Dimitri Papadopoulos Orfanos (2)
  • Drew Parsons (1)
  • Gilles Peiffer (3) +
  • Matti Picus (1)
  • Jonas Pleyer (2) +
  • Ilhan Polat (119)
  • Akshay Priyadarshi (2) +
  • Mohammed Abdul Rahman (1) +
  • Daniele Raimondi (2) +
  • Ritesh Rana (1) +
  • Adrian Raso (1) +
  • Dan Raviv (1) +
  • Tyler Reddy (122)
  • Lucas Roberts (4)
  • Bernard Roesler (1) +
  • Mikhail Ryazanov (27)
  • Daniel Schmitz (25)
  • Martin Schuck (25)
  • Dan Schult (33)
  • Mugunthan Selvanayagam (1) +
  • Scott Shambaugh (14)
  • Rodrigo Silva (1) +
  • Samaresh Kumar Singh (8) +
  • Kartik Sirohi (1) +
  • Albert Steppi (179)
  • Matthias Straka (1) +
  • Theo Teske (1) +
  • Noam Teyssier (1) +
  • tommie979 (1) +
  • Christian Veenhuis (1)
  • Pierre Veron (1) +
  • Shuhei Watanabe (1) +
  • Warren Weckesser (25)
  • WhimsyHippo (7) +
  • Rory Yorke (2)
  • Will Zhang (1) +
  • Eric Zitong Zhou (1)
  • Tingwei Zhu (1) +
  • Zhenyu Zhu (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (38)

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

The full issue and pull request lists, and the release asset hashes are available in the associated README.txt file.

View originalPermalink
How v1.17.0rc2 went
v1.17.0rc1Pre-release

SciPy 1.17.0rc1

Added 16
  • Native support for batching of N-dimensional array input and array API standard support added to many SciPy functions
  • coo_array in scipy.sparse now has full support for indexing across dimensions without needing to convert between sparse formats
  • ARPACK and PROPACK rewrites from Fortran77 to C now empower the use of external pseudorandom number generators
  • transform.Rotation and transform.RigidTransform in scipy.spatial extended to support N-D arrays
  • geometric_slerp in scipy.spatial now has support for extrapolation
  • Matrix t and logistic distributions added to scipy.stats
Changed 11
  • Integration routines dopri5, dopri853, LSODA, vode, and zvode ported from Fortran77 to C
  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support
  • Performance of cubic and quintic modes of scipy.interpolate.RegularGridInterpolator has been improved
  • Numerical stability of scipy.interpolate.AAA has been improved
  • scipy.interpolate.FloaterHormannInterpolator gained support for multidimensional, batched inputs and a new axis parameter
  • scipy.linalg.inv now detects the structure of its argument and selects an appropriate low-level matrix inversion routine

SciPy 1.17.0 Release Notes

Note: SciPy 1.17.0 is not released yet!

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

This release requires Python 3.11-3.14 and NumPy 1.26.4 or greater.

Highlights of this release

  • Many SciPy functions have gained native support for batching of N-dimensional array input and additional support for the array API standard. An overall summary of the latter is now available in a set of tables.
  • In scipy.sparse, coo_array now has full support for indexing across dimensions without needing to convert between sparse formats. ARPACK and PROPACK rewrites from Fortran77 to C now empower the use of external pseudorandom number generators.
  • In scipy.spatial, transform.Rotation and transform.RigidTransform have been extended to support N-D arrays. geometric_slerp now has support for extrapolation.
  • scipy.stats has gained the matrix t and logistic distributions and many performance and accuracy improvements.
  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added, including for MKL, Apple Accelerate and OpenBLAS. Please report any issues with ILP64 you encounter.

New features

scipy.integrate improvements

  • The integration routines dopri5, dopri853, LSODA, vode, and zvode have been ported from Fortran77 to C.
  • scipy.integrate.quad now has a fast path for returning 0 when the integration interval is empty.

scipy.cluster improvements

  • scipy.cluster.hierarchy.is_isomorphic has improved performance and array API support.

scipy.interpolate improvements

  • A new bc_type argument has been added to scipy.interpolate.make_splrep and scipy.interpolate.make_splprep to control the boundary conditions for spline fitting. Allowed values are "not-a-knot" (default) and "periodic".
  • A new derivative method has been added to the scipy.interpolate.NdBSpline class, to construct a new spline representing a partial derivative of the given spline. This method is similar to the BSpline.derivative method of 1-D spline objects.
  • Performance of "cubic" and "quintic" modes of scipy.interpolate.RegularGridInterpolator has been improved.
  • Numerical stability of scipy.interpolate.AAA has been improved.
  • scipy.interpolate.FloaterHormannInterpolator added support for multidimensional, batched inputs and gained a new axis parameter to select the interpolation axis.

scipy.linalg improvements

  • scipy.linalg.inv routine has been improved:

    • it now attempts to detect the structure of its argument and selects an appropriate low-level matrix inversion routine. A new assume_a keyword allows to bypass the structure detection if the structure is known. For batched inputs, the detection is run for each 2D slice, unless an explicit value for assume_a is provided (in which case, the structure is assumed to be the same for all 2-D slices of the batch);
    • the new lower={True,False} keyword argument has been added to help select the upper or lower triangle of the input matrix for symmetric inputs; refer to the docstring of scipy.linalg.inv for details;
    • the routine emits a LinAlgWarning if it detects an ill-conditioned input;
    • performance for batched inputs has been improved.
  • scipy.linalg.fiedler has gained native support for batched inputs.

  • performance has improved for scipy.linalg.solve with batched inputs for certain matrix structures.

scipy.optimize improvements

  • optimize.minimize(method="trust-exact") now accepts a solver-specific "subproblem_maxiter" option. This option can be used to assure that the algorithm converges for functions with an ill-conditioned Hessian.
  • Callback functions used by optimize.minimize(method="slsqp") can opt into the new callback interface by accepting a single keyword argument intermediate_result.

scipy.signal improvements

  • scipy.signal.abcd_normalize gained more informative error messages and the documentation was improved.
  • scipy.signal.get_window now accepts the suffixes '_periodic' and '_symmetric' to distinguish between periodic and symmetric windows (overriding the fftbin parameter). This benefits the functions coherence, csd, periodogram, welch, spectrogram, stft, istft, resample, resample_poly, firwin, firwin2, firwin_2d, check_COLA and check_NOLA, which utilize get_window but do not expose the fftbin parameter.
  • scipy.signal.hilbert2 gained the new keyword axes for specifying the axes along which the two-dimensional analytic signal should be calculated. Furthermore, the documentation of scipy.signal.hilbert and scipy.signal.hilbert2 was significantly improved.

scipy.sparse improvements

  • coo_array now supports indexing. This includes slices, arrays, np.newaxis, Ellipsis, in 1D, 2D and the new nD. So COO format now has full support for nD and COO now allows indexing without converting formats.
  • Additional sparse construction functions include expand_dims, swapaxes, permute_dims, and nD support for the kron function.
  • ARPACK Fortran77 library is ported to C. Among many changes, it is now possible to use external random generators including NumPy PRNGs for reproducible runs. Previously this was not the case due to internal seeding behavior of the original ARPACK code.
  • Similarly, PROPACK Fortran77 library is also ported to C with the same PRNG enhancements and other improvements.
  • scipy.sparse.dok_array now supports an update method which can be used to update the sparse array using a dict, dict.items()-like iterable, or another dok_array matrix. It performs additional validation that keys are valid index tuples.
  • scipy.sparse.dia_array.tocsr is approximately three times faster and some unneccesary copy operations have been removed from sparse format interconversions more broadly.
  • Added scipy.sparse.linalg.funm_multiply_krylov, a restarted Krylov method for evaluating y = f(tA) b.

scipy.spatial improvements

  • The spatial.transform module has gained an array API standard compatible backend.

  • transform.Rotation and transform.RigidTransform have been extended from 0D single values and 1D arrays to N-D arrays, with standard indexing and broadcasting rules. Both now have the following additions:

    • A shape property.
    • A shape argument to their identity() constructors, which should be preferred over the existing num argument. This has also been added as an argument for Rotation.random() (RigidTransform does not currently have a random constructor).
    • An axis argument to their mean() functions.
  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

  • Rotation.from_matrix has gained an assume_valid argument that allows for performance improvements when users can guarantee valid matrix inputs. from_matrix is now also faster in cases where a known orthogonal matrix is used.

  • The scipy.spatial.geometric_slerp function can now extrapolate. When given a value outside the range [0, 1], geometric_slerp() will continue with the same rotation outside this range. For example, if spherically interpolating with start being a point on the equator, and end being a point at the north pole, then a value of t=-1 would give you a point at the south pole.

  • Rotation.as_euler and Rotation.as_davenport methods have gained a suppress_warnings parameter to enable suppression of gimbal lock warnings.

scipy.special improvements

  • The following functions for statistical applications have significantly improved parameter ranges and reduced error rates: btdtria, btdtrib, chdtriv, chndtr, chndtrix, chndtridf, chndtrinc, fdtr, fdtrc, fdtri, gdtria, gdtrix, pdtrik, stdtr and stdtrit.
  • The incomplete beta functions betainc, betaincc, betaincinv and betainccinv are improved for extreme parameter ranges.

scipy.stats improvements

  • scipy.stats.matrix_t has been added to represent the matrix t distribution. It supports methods pdf (and logpdf) for computing the probability density function and rvs for generating random variates.
  • scipy.stats.Logistic was added for modeling random variables that follow a logistic distribution.
  • scipy.stats.quantile now accepts a weights argument to specify frequency weights.
  • scipy.stats.quantile is now faster on large arrays as it no longer uses stable sort internally.
  • scipy.stats.quantile supports three new values of the method argument, 'round_inward', 'round_outward', and 'round_neareast', for use in the context of trimming and winsorizing data.
  • scipy.stats.truncpareto now accepts negative values for the exponent shape parameter, enabling use of truncpareto as a more general power law distribution.
  • scipy.stats.logser now provides a distribution-specific implementation of the sf method, improving speed and accuracy.
  • Implementations of the following function have been vectorized: scipy.stats.ansari, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, and scipy.stats.mood. Typically, this improves performance with multidimensional (batch) input.
  • The critical value tables of scipy.stats.anderson have been updated.
  • The speed and accuracy of most scipy.stats.zipfian methods has been improved.
  • The accuracies of the scipy.stats.Binomial methods logcdf and logccdf have been improved in the tails.
  • The default guess of scipy.stats.trapezoid.fit has been improved.
  • The accuracy and range of the cdf, sf, isf, and ppf methods of scipy.stats.binom and scipy.stats.nbinom has been improved.

Array API Standard Support

  • An overall summary table for our array API standard support/coverage is now available
  • The overhead associated with array namespace determination has been reduced, providing improved performance in dispatching to different backends.
  • scipy.cluster.hierarchy.is_isomorphic has gained support.
  • scipy.interpolate.make_lsq_spline, scipy.interpolate.make_smoothing_spline, scipy.interpolate.make_splrep, scipy.interpolate.make_splprep, scipy.interpolate.generate_knots, and scipy.interpolate.make_interp_spline have gained support.
  • scipy.signal.bilinear, scipy.signal.iircomb, scipy.signal.iirdesign, scipy.signal.iirfilter, scipy.signal.iirpeak, scipy.signal.iirnotch, scipy.signal.gammatone, and scipy.signal.group_delay have gained support.
  • scipy.signal.butter, scipy.signal.buttap, scipy.signal.buttord, scipy.signal.cheby1, scipy.signal.cheb1ap, scipy.signal.cheb1ord, scipy.signal.cheby2, scipy.signal.cheb2ap, scipy.signal.cheb2ord, scipy.signal.bessel, scipy.signal.besselap, scipy.signal.ellip, scipy.signal.ellipap, and scipy.signal.ellipord have gained support.
  • scipy.signal.savgol_filter, scipy.signal.savgol_coeffs, and scipy.signal.abcd_normalize have gained support.
  • spatial.transform has gained support.
  • scipy.integrate.qmc_quad, scipy.integrate.cumulative_simpson, scipy.integrate.cumulative_trapezoid, and scipy.integrate.romb have gained support.
  • scipy.linalg.block_diag, scipy.linalg.fiedler, and scipy.linalg.orthogonal_procrustes have gained support.
  • scipy.interpolate.BSpline, scipy.interpolate.NdBSpline, scipy.interpolate.RegularGridInterpolator, and scipy.interpolate.RBFInterpolator gained support.
  • Support added for scipy.stats.alexandergovern, scipy.stats.bootstrap, scipy.stats.brunnermunzel, scipy.stats.chatterjeexi, scipy.stats.cramervonmises, scipy.stats.cramervonmises_2samp, scipy.stats.epps_singleton_2samp, scipy.stats.false_discovery_control, scipy.stats.fligner, scipy.stats.friedmanchisquare, scipy.stats.iqr, scipy.stats.kruskal, scipy.stats.ks_1samp, scipy.stats.levene, scipy.stats.lmoment, scipy.stats.mannwhitneyu, scipy.stats.median_abs_deviation, scipy.stats.mode, scipy.stats.mood, scipy.stats.ansari, scipy.stats.power, scipy.stats.permutation_test, scipy.stats.sigmaclip, scipy.stats.wilcoxon, and scipy.stats.yeojohnson_llf.
  • scipy.stats.pearsonr has gained support for JAX and Dask backends.
  • scipy.stats.variation has gained support for the Dask backend.
  • marray support was added for stats.gtstd, stats.directional_stats, stats.bartlett, stats.variation, stats.pearsonr, and stats.entropy.

Deprecated features and future changes

  • The scipy.odr module is deprecated in v1.17.0 and will be completely removed in v1.19.0. Users are suggested to use the odrpack package instead.
  • The default dype behavior of scipy.sparse.diags and scipy.sparse.diags_array will change in v1.19.0.
  • In v1.19.0, scipy.linalg.hankel will no longer ravel multidimensional inputs and instead will treat them as a batch.
  • The precenter argument of scipy.signal.lombscargle is deprecated and will be removed in v1.19.0. Furthermore, some arguments will become keyword only.

Expired deprecations

  • scipy.stats.find_repeats has been removed. Please use numpy.unique/numpy.unique_counts instead.
  • scipy.linalg functions for Toeplitz matrices no longer ravel n-d input arguments; instead, multidimensional input is treated as a batch.
  • The seed and rand functions from scipy.linalg.interpolative have been removed. Use the rng argument instead.
  • Complex inputs to scipy.spatial.distance.cosine and scipy.spatial.distance.correlation now raise an error.
  • Support for object arrays and longdoubles has been removed from scipy.signal.correlate, scipy.signal.convolve, scipy.signal.lfilter, and scipy.signal.sosfilt.
  • kulczynski1 and sokalmichener have been removed from scipy.spatial.distance.
  • kron has been removed from scipy.linalg. Please use numpy.kron.
  • Accidentally exposed functions have been removed from scipy.interpolate.interpnd.
  • The random_state and permutation arguments of scipy.stats.ttest_ind have been removed.
  • sph_harm, clpmn, lpn, and lpmn have been removed from scipy.special.

Backwards incompatible changes

  • The resulting shapes for transform.Rotation.from_euler / from_davenport have changed to make them consistent with broadcasting rules. Angle inputs to Euler angles must now strictly match the number of provided axes in the last dimension. The resulting Rotation has the shape np.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles must also match the number of axes in the last dimension. The resulting Rotation has the shape np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).

Other changes

  • The version of the Boost Math library leveraged by SciPy has been increased from 1.88.0 to 1.89.0.

  • On POSIX operating systems, SciPy will now use the 'forkserver' multiprocessing context on Python 3.13 and older for workers=<an-int> calls if the user hasn't configured a default method themselves. This follows the default behavior on Python 3.14.

  • Initial support for 64-bit integer (ILP64) BLAS and LAPACK libraries has been added. To enable it, build SciPy with -Duse-ilp64=true meson option, and make sure to have a LAPACK library which exposes both LP64 and ILP64 symbols. Currently supported LAPACK libraries are MKL, Apple Accelerate and OpenBLAS through the scipy-openblas64 package. Note that:

    • the ILP64 support is optional, and is in addition to the always-available LP64 interface;
    • at runtime, you can select the ILP64 variants via the get_{blas,lapack}_funcs functions: scipy.linalg.lapack.get_lapack_funcs(..., use_ilp64="preferred") selects the ILP64 variant if available and LP64 variant otherwise;
    • cython_blas and cython_lapack modules always contain the LP64 routines for ABI compatibility.

Please report any issues with ILP64 you encounter.

Authors

  • Name (commits)
  • h-vetinari (3)
  • Joshua Alexander (1) +
  • Amit Aronovitch (1) +
  • Ayush Baranwal (1) +
  • Cristrian Batrin (1) +
  • Marco Berzborn (1) +
  • Ole Bialas (1) +
  • Om Biradar (1) +
  • Florian Bourgey (1)
  • Jake Bowhay (102)
  • Matteo Brivio (1) +
  • Dietrich Brunn (34)
  • Johannes Buchner (2) +
  • Evgeni Burovski (288)
  • Nicholas Carlini (1) +
  • Luca Cerina (1) +
  • Christine P. Chai (35)
  • Saransh Chopra (1)
  • Lucas Colley (117)
  • Björn Ingvar Dahlgren (2) +
  • Sumit Das (1) +
  • Hans Dembinski (1)
  • John M Dusel (1) +
  • DWesl (4)
  • Pieter Eendebak (6)
  • Kian Eliasi (2)
  • Rob Falck (1)
  • Abdullah Fayed (3) +
  • Emmanuel Ferdman (2) +
  • Filipe Laíns (1) +
  • Daniel Fremont (1) +
  • Neil Girdhar (1)
  • Ilan Gold (35)
  • Nathan Goldbaum (3) +
  • Ralf Gommers (121)
  • Nicolas Guidotti (1) +
  • Geoffrey Gunter (1) +
  • Matt Haberland (177)
  • Joren Hammudoglu (56)
  • Jacob Hass (2) +
  • Nick Hodgskin (1) +
  • Stephen Huan (1) +
  • Guido Imperiale (41)
  • Gert-Ludwig Ingold (1)
  • Jaime Rodríguez-Guerra (2) +
  • JBlitzar (1) +
  • Adam Jones (2)
  • Dustin Kenefake (1) +
  • Robert Kern (3)
  • Gleb Khmyznikov (1) +
  • Daniil Kiktenko (1) +
  • Pascal Klein (2) +
  • kleiter (1) +
  • Oliver Kovacs (1) +
  • Koven (1) +
  • Abhishek Kumar (2) +
  • Arthur Lacote (2) +
  • Eric Larson (7)
  • Mouad Leachouri (1) +
  • Tristan Leclercq (1) +
  • Antony Lee (5)
  • Jesse Livezey (8)
  • Philip Loche (1)
  • Yuxi Long (4) +
  • Christian Lorentzen (1)
  • Joshua Markovic (1) +
  • Gabryel Mason-Williams (1) +
  • mcdigman (1) +
  • Rafael Menezes (1) +
  • Stefano Miccoli (1) +
  • Michał Górny (2)
  • Jost Migenda (7) +
  • Suriyaa MM (1) +
  • Andrew Nelson (72)
  • newyork_loki (2) +
  • Nick ODell (33)
  • Dimitri Papadopoulos Orfanos (2)
  • Drew Parsons (1)
  • Gilles Peiffer (3) +
  • Matti Picus (1)
  • Jonas Pleyer (2) +
  • Ilhan Polat (116)
  • Akshay Priyadarshi (2) +
  • Mohammed Abdul Rahman (1) +
  • Daniele Raimondi (2) +
  • Ritesh Rana (1) +
  • Adrian Raso (1) +
  • Dan Raviv (1) +
  • Tyler Reddy (116)
  • Lucas Roberts (4)
  • Bernard Roesler (1) +
  • Mikhail Ryazanov (27)
  • Jaro Schmidt (1) +
  • Daniel Schmitz (25)
  • Martin Schuck (25)
  • Dan Schult (29)
  • Mugunthan Selvanayagam (1) +
  • Scott Shambaugh (14)
  • Rodrigo Silva (1) +
  • Samaresh Kumar Singh (8) +
  • Kartik Sirohi (1) +
  • Albert Steppi (178)
  • Matthias Straka (1) +
  • Theo Teske (1) +
  • Noam Teyssier (1) +
  • tommie979 (1) +
  • Christian Veenhuis (1)
  • Pierre Veron (1) +
  • Shuhei Watanabe (1) +
  • Warren Weckesser (25)
  • WhimsyHippo (7) +
  • Rory Yorke (2)
  • Will Zhang (1) +
  • Eric Zitong Zhou (1)
  • Tingwei Zhu (1) +
  • Zhenyu Zhu (1) +
  • ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (38)

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

The full issue and pull request lists, and the release asset hashes are available in the associated README.txt file.

View originalPermalink
How v1.17.0rc1 went
v1.16.3

SciPy 1.16.3

SciPy 1.16.3 Release Notes

SciPy 1.16.3 is a bug-fix release with no new features compared to 1.16.2.

Authors

  • Name (commits)
  • ChrisAB (1) +
  • Lucas Colley (1)
  • Ralf Gommers (3)
  • Matt Haberland (8)
  • Nick ODell (2)
  • Ilhan Polat (1)
  • Tyler Reddy (28)
  • Lucas Roberts (2)

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

The full issue and pull request lists, and the release asset hashes are available in the associated README.txt file.

View originalPermalink
How v1.16.3 went
v1.16.2

SciPy 1.16.2

SciPy 1.16.2 Release Notes

SciPy 1.16.2 is a bug-fix release with no new features compared to 1.16.1. This is the first stable release of SciPy to provide Windows on ARM wheels on PyPI.

Authors

  • Name (commits)
  • Dietrich Brunn (1)
  • Ralf Gommers (6)
  • Adam Jones (1)
  • Gleb Khmyznikov (1) +
  • Jost Migenda (1) +
  • newyork_loki (1)
  • Nick ODell (3)
  • Dimitri Papadopoulos Orfanos (1)
  • Ilhan Polat (2)
  • Tyler Reddy (26)
  • Mugunthan Selvanayagam (1) +
  • Shuhei Watanabe (1) +

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

The full issue and pull request lists, and the release asset hashes are available in the associated README.txt file.

View originalPermalink
How v1.16.2 went
v1.16.1

SciPy 1.16.1

SciPy 1.16.1 Release Notes

SciPy 1.16.1 is a bug-fix release that adds support for Python 3.14.0rc1, including PyPI wheels.

Authors

  • Name (commits)
  • Evgeni Burovski (1)
  • Rob Falck (1)
  • Ralf Gommers (7)
  • Geoffrey Gunter (1) +
  • Matt Haberland (2)
  • Joren Hammudoglu (1)
  • Andrew Nelson (2)
  • newyork_loki (1) +
  • Ilhan Polat (1)
  • Tyler Reddy (25)
  • Daniel Schmitz (1)
  • Dan Schult (2)

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

The full issue and pull request lists, and the release asset hashes are available in the associated README.txt file.

View originalPermalink
How v1.16.1 went
View all

Discussion