You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
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.
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.
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.
SciPy 1.16.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.16.x branch, and on adding new features on the main branch.
This release requires Python 3.11-3.13 and NumPy 1.25.2 or greater.
Highlights of this release
Improved experimental support for the Python array API standard, including
new support in scipy.signal, and additional support in scipy.stats and scipy.special. Improved support for JAX and Dask backends has been added,
with notable support in scipy.cluster.hierarchy, many functions in scipy.special, and many of the trimmed statistics functions.
scipy.optimize now uses the new Python implementation from the PRIMA package for COBYLA. The PRIMA implementation fixes many bugs
in the old Fortran 77 implementation with a better performance on average.
scipy.sparse.coo_array now supports n-D arrays with reshaping, arithmetic and
reduction operations like sum/mean/min/max. No n-D indexing or scipy.sparse.random_array support yet.
Updated guide and tools for migration from sparse matrices to sparse arrays.
Nearly all functions in the scipy.linalg namespace that accept array
arguments now support N-dimensional arrays to be processed as a batch.
Two new scipy.signal functions, scipy.signal.firwin_2d and scipy.signal.closest_STFT_dual_window, for creation of a 2-D FIR filter and scipy.signal.ShortTimeFFT dual window calculation, respectively.
A new class, scipy.spatial.transform.RigidTransform, provides functionality
to convert between different representations of rigid transforms in 3-D
space.
A new function scipy.ndimage.vectorized_filter for generic filters that
take advantage of a vectorized Python callable was added.
New features
scipy.io improvements
scipy.io.savemat now provides informative warnings for invalid field names.
scipy.io.mmread now provides a clearer error message when provided with
a source file path that does not exist.
scipy.io.wavfile.read can now read non-seekable files.
scipy.integrate improvements
The error estimate of scipy.integrate.tanhsinh was improved.
scipy.interpolate improvements
Batch support was added to scipy.interpolate.make_smoothing_spline.
scipy.linalg improvements
Nearly all functions in the scipy.linalg namespace that accept array
arguments now support N-dimensional arrays to be processed as a batch.
See linalg_batch for details.
scipy.linalg.sqrtm is rewritten in C and its performance is improved. It
also tries harder to return real-valued results for real-valued inputs if
possible. See the function docstring for more details. In this version the
input argument disp and the optional output argument errest are
deprecated and will be removed four versions later. Similarly, after
changing the underlying algorithm to recursion, the blocksize keyword
argument has no effect and will be removed two versions later.
Wrappers for ?stevd, ?langb, ?sytri, ?hetri and ?gbcon were added to scipy.linalg.lapack.
The default driver of scipy.linalg.eigh_tridiagonal was improved.
scipy.linalg.solve can now estimate the reciprocal condition number and
the matrix norm calculation is more efficient.
scipy.ndimage improvements
A new function scipy.ndimage.vectorized_filter for generic filters that
take advantage of a vectorized Python callable was added.
scipy.ndimage.rotate has improved performance, especially on ARM platforms.
scipy.optimize improvements
COBYLA was updated to use the new Python implementation from the PRIMApackage.
The PRIMA implementation fixes many bugs
in the old Fortran 77 implementation. In addition, it results in fewer function evaluations on average
but it depends on the problem and for some
problems it can result in more function evaluations or a less optimal
result. For those cases the user can try modifying the initial and final
trust region radii given by rhobeg and tol respectively. A larger rhobeg can help the algorithm take bigger steps initially, while a
smaller tol can help it continue and find a better solution.
For more information, see the PRIMA documentation.
Several of the scipy.optimize.minimize methods, and the scipy.optimize.least_squares function, have been given a workers
keyword. This allows parallelization of some calculations via a map-like
callable, such as multiprocessing.Pool. These parallelization
opportunities typically occur during numerical differentiation. This can
greatly speed up minimization when the objective function is expensive to
calculate.
The lm method of scipy.optimize.least_squares can now accept 3-point and cs for the jac keyword.
The SLSQP Fortran 77 code was ported to C. When this method is used now the
constraint multipliers are exposed to the user through the multiplier
keyword of the returned scipy.optimize.OptimizeResult object.
NNLS code has been corrected and rewritten in C to address the performance
regression introduced in 1.15.x
scipy.optimize.root now warns for invalid inner parameters when using the newton_krylov method
The return value of minimization with method='L-BFGS-B' now has
a faster hess_inv.todense() implementation. Time complexity has improved
from cubic to quadratic.
scipy.optimize.least_squares has a new callback argument that is applicable
to the trf and dogbox methods. callback may be used to track
optimization results at each step or to provide custom conditions for
stopping.
scipy.signal improvements
A new function scipy.signal.firwin_2d for the creation of a 2-D FIR Filter
using the 1-D window method was added.
scipy.signal.cspline1d_eval and scipy.signal.qspline1d_eval now provide
an informative error on empty input rather than hitting the recursion limit.
A new function scipy.signal.closest_STFT_dual_window to calculate the scipy.signal.ShortTimeFFT dual window of a given window closest to a
desired dual window.
A new classmethod scipy.signal.ShortTimeFFT.from_win_equals_dual to
create a scipy.signal.ShortTimeFFT instance where the window and its dual
are equal up to a scaling factor. It allows to create short-time Fourier
transforms which are unitary mappings.
The performance of scipy.signal.convolve2d was improved.
scipy.sparse improvements
scipy.sparse.coo_array now supports n-D arrays using binary and reduction
operations.
Faster operations between two DIA arrays/matrices for: add, sub, multiply,
matmul.
scipy.sparse.csgraph.dijkstra shortest_path is more efficient.
scipy.sparse.csgraph.yen has performance improvements.
Support for lazy loading of sparse.csgraph and sparse.linalg was
added.
scipy.spatial improvements
A new class, scipy.spatial.transform.RigidTransform, provides functionality
to convert between different representations of rigid transforms in 3-D
space, its application to vectors and transform composition.
It follows the same design approach as scipy.spatial.transform.Rotation.
scipy.spatial.transform.Rotation now has an appropriate __repr__ method,
and improved performance for its scipy.spatial.transform.Rotation.apply
method.
scipy.stats improvements
A new function scipy.stats.quantile, an array API compatible function for
quantile estimation, was added.
scipy.stats.make_distribution was extended to work with existing discrete
distributions and to facilitate the creation of custom distributions in the
new random variable infrastructure.
A new distribution, scipy.stats.Binomial, was added.
An equal_var keyword was added to scipy.stats.tukey_hsd (enables the
Games-Howell test) and scipy.stats.f_oneway (enables Welch ANOVA).
The moment calculation for scipy.stats.gennorm was improved.
The scipy.stats.mode implementation was vectorized, for faster batch
calculation.
Support for axis, nan_policy, and keepdims keywords was added to scipy.stats.power_divergence, scipy.stats.chisquare, scipy.stats.pointbiserialr, scipy.stats.kendalltau, scipy.stats.weightedtau, scipy.stats.theilslopes, scipy.stats.siegelslopes, scipy.stats.boxcox_llf, and scipy.stats.linregress.
Support for keepdims and nan_policy keywords was added to scipy.stats.gstd.
The performance of scipy.stats.special_ortho_group and scipy.stats.pearsonr
was improved.
Support for an rng keyword argument was added to the logcdf and cdf methods of multivariate_normal_gen and multivariate_normal_frozen.
Array API Standard Support
Experimental support for array libraries other than NumPy has been added to
multiple submodules in recent versions of SciPy. Please consider testing
these features by setting the environment variable SCIPY_ARRAY_API=1 and
providing PyTorch, JAX, CuPy or Dask arrays as array arguments.
Many functions in scipy.stats, scipy.special, scipy.optimize, and scipy.constants now provide tables documenting compatible array and device
types as well as support for lazy arrays and JIT compilation. New features with
support and old features with support added for SciPy 1.16.0 include:
Most of the scipy.signal functionality
scipy.ndimage.vectorized_filter
scipy.special.stdtrit
scipy.special.softmax
scipy.special.log_softmax
scipy.stats.quantile
scipy.stats.gstd
scipy.stats.rankdata
Features with extended array API support (generally, improved support
for JAX and Dask) in SciPy 1.16.0 include:
many of the scipy.cluster.hierarchy functions
many functions in scipy.special
many of the trimmed statistics functions in scipy.stats
SciPy now has a CI job that exercises GPU (CUDA) support, and as a result
using PyTorch, CuPy or JAX arrays on GPU with SciPy is now more reliable.
Deprecated features
The unused atol argument of scipy.optimize.nnls is deprecated and will
be removed in SciPy 1.18.0.
The disp argument of scipy.linalg.signm, scipy.linalg.logm, and scipy.linalg.sqrtm will be removed in SciPy 1.18.0.
scipy.stats.multinomial now emits a FutureWarning if the rows of p
do not sum to 1.0. This condition will produce NaNs beginning in SciPy
1.18.0.
The disp and iprint arguments of the l-bfgs-b solver of scipy.optimize
have been deprecated, and will be removed in SciPy 1.18.0.
Expired Deprecations
scipy.sparse.conjtransp has been removed. Use .T.conj() instead.
The quadrature='trapz' option has been removed from scipy.integrate.quad_vec, and scipy.stats.trapz has been removed. Use trapezoid in both instances instead.
scipy.special.comb and scipy.special.perm now raise when exact=True
and arguments are non-integral.
Support for inference of the two sets of measurements from the single
argument x has been removed from scipy.stats.linregress. The data
must be specified separately as x and y.
Support for NumPy masked arrays has been removed from scipy.stats.power_divergence and scipy.stats.chisquare.
A significant number of functions from non-public namespaces
(e.g., scipy.sparse.base, scipy.interpolate.dfitpack) were cleaned
up. They were previously already emitting deprecation warnings.
Backwards incompatible changes
Several of the scipy.linalg functions for solving a linear system (e.g. scipy.linalg.solve) documented that the RHS argument must be either 1-D or
2-D but did not always raise an error when the RHS argument had more the
two dimensions. Now, many-dimensional right hand sides are treated according
to the rules specified in linalg_batch.
scipy.stats.bootstrap now explicitly broadcasts elements of data to the
same shape (ignoring axis) before performing the calculation.
Several submodule names are no longer available via from scipy.signal import *,
but may still be imported directly, as detailed at scipy/scipy-stubs#549.
Build and packaging related changes
The minimum supported version of Clang was bumped from 12.0 to 15.0.
The lowest supported macOS version for wheels on PyPI is now 10.14 instead of
10.13.
The sdist contents were optimized, resulting in a size reduction of about 50%,
from 60 MB to 30 MB.
For Cython>=3.1.0, SciPy now uses the new cython --generate-shared
functionality, which reduces the total size of SciPy's wheels and on-disk
installations significantly.
SciPy no longer contains an internal shared library that requires RPATH support,
after sf_error_state was removed from scipy.special.
A new build option -Duse-system-libraries has been added. It allows
opting in to using system libraries instead of using vendored sources.
Currently Boost.Math and Qhull are supported as system build
dependencies.
The internal dependency of scipy._lib on scipy.sparse was removed,
which reduces the import time of a number of other SciPy submodules.
Support for free-threaded CPython was improved: the last known thread-safety
issues in scipy.special were fixed, and pytest-run-parallel is now used
in a CI job to guard against regressions.
Support for spin as a developer
CLI was added, including support for editable installs. The SciPy-specific python dev.py CLI will be removed in the next release cycle in favor of spin.
The vendored Qhull library was upgraded from version 2019.1 to 2020.2.
A large amount of the C++ code in scipy.special was moved to the new
header-only xsf library. That library was
included back in the SciPy source tree as a git submodule.
The namedtuple-like bunch objects returned by some SciPy functions
now have improved compatibility with the polars library.
The output of the rvs method of scipy.stats.wrapcauchy is now mapped to
the unit circle between 0 and 2 * pi.
The lm method of scipy.optimize.least_squares now has a different behavior
for the maximum number of function evaluations, max_nfev. The default for
the lm method is changed to 100 * n, for both a callable and a
numerically estimated jacobian. This limit on function evaluations excludes
those used for any numerical estimation of the Jacobian. Previously the
default when using an estimated jacobian was 100 * n * (n + 1), because
the method included evaluations used in the estimation. In addition, for the lm method the number of function calls used in Jacobian approximation
is no longer included in OptimizeResult.nfev. This brings the behavior
of lm, trf, and dogbox into line.
Authors
Name (commits)
h-vetinari (4)
aiudirog (1) +
Anton Akhmerov (2)
Thorsten Alteholz (1) +
Gabriel Augusto (1) +
Backfisch263 (1) +
Nickolai Belakovski (5)
Peter Bell (1)
Benoît W. (1) +
Evandro Bernardes (1)
Gauthier Berthomieu (1) +
Maxwell Bileschi (1) +
Sam Birch (1) +
Florian Bourgey (3) +
Charles Bousseau (2) +
Richard Strong Bowen (2) +
Jake Bowhay (127)
Matthew Brett (1)
Dietrich Brunn (53)
Evgeni Burovski (254)
Christine P. Chai (12) +
Gayatri Chakkithara (1) +
Saransh Chopra (2) +
Omer Cohen (1) +
Lucas Colley (91)
Yahya Darman (3) +
Benjamin Eisele (1) +
Donnie Erb (1)
Sagi Ezri (58) +
Alexander Fabisch (2) +
Matthew H Flamm (1)
Karthik Viswanath Ganti (1) +
Neil Girdhar (1)
Ralf Gommers (162)
Rohit Goswami (4)
Saarthak Gupta (4) +
Matt Haberland (326)
Sasha Hafner (1) +
Joren Hammudoglu (11)
Chengyu Han (1) +
Charles Harris (1)
Kim Hsieh (4) +
Yongcai Huang (2) +
Lukas Huber (1) +
Yuji Ikeda (2) +
Guido Imperiale (105) +
Robert Kern (2)
Harin Khakhi (2) +
Agriya Khetarpal (4)
Daniil Kiktenko (1) +
Kirill R. (2) +
Tetsuo Koyama (1)
Jigyasu Krishnan (1) +
Abhishek Kumar (2) +
Pratham Kumar (3) +
David Kun (1) +
Eric Larson (3)
lciti (1)
Antony Lee (1)
Kieran Leschinski (1) +
Thomas Li (2) +
Yuxi Long (2) +
Christian Lorentzen (2)
Loïc Estève (4)
Panos Mavrogiorgos (1) +
Nikolay Mayorov (2)
Melissa Weber Mendonça (10)
Michał Górny (1)
Miguel Cárdenas (2) +
Swastik Mishra (1) +
Sturla Molden (2)
Andreas Nazlidis (1) +
Andrew Nelson (209)
Parth Nobel (1) +
Nick ODell (9)
Giacomo Petrillo (1)
Victor PM (10) +
pmav99 (1) +
Ilhan Polat (74)
Tyler Reddy (128)
Érico Nogueira Rolim (1) +
Pamphile Roy (10)
Mikhail Ryazanov (6)
Atsushi Sakai (9)
Marco Salathe (1) +
sanvi (1) +
Neil Schemenauer (2) +
Daniel Schmitz (20)
Martin Schuck (1) +
Dan Schult (33)
Tomer Sery (19)
Adrian Seyboldt (1) +
Scott Shambaugh (4)
ShannonS00 (1) +
sildater (3) +
Param Singh (1) +
G Sreeja (7) +
Albert Steppi (133)
Kai Striega (3)
Anushka Suyal (2)
Julia Tatz (1) +
Tearyt (1) +
Elia Tomasi (1) +
Jamie Townsend (2) +
Edgar Andrés Margffoy Tuay (4)
Matthias Urlichs (1) +
Mark van Rossum (1) +
Jacob Vanderplas (2)
David Varela (2) +
Christian Veenhuis (3)
vfdev (1)
Stefan van der Walt (2)
Warren Weckesser (5)
Jason N. White (1) +
windows-server-2003 (5)
Zhiqing Xiao (1)
Pavadol Yamsiri (1)
Rory Yorke (3)
Irwin Zaid (4)
Austin Zhang (1) +
William Zijie Zhang (1) +
Zaikun Zhang (1) +
Zhenyu Zhu (1) +
Eric Zitong Zhou (11) +
Case Zumbrum (2) +
ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (45)
A total of 126 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.
A total of 24 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.
SciPy 1.15.2 is a bug-fix release with no new features
compared to 1.15.1. Free-threaded Python 3.13 wheels
for Linux ARM platform are available on PyPI starting with
this release.
Authors
Name (commits)
Peter Bell (1)
Charles Bousseau (1) +
Jake Bowhay (3)
Matthew Brett (1)
Ralf Gommers (3)
Rohit Goswami (1)
Matt Haberland (4)
Parth Nobel (1) +
Tyler Reddy (33)
Daniel Schmitz (2)
Dan Schult (5)
Scott Shambaugh (2)
Edgar Andrés Margffoy Tuay (1)
Warren Weckesser (4)
A total of 14 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.
SciPy 1.15.1 is a bug-fix release with no new features
compared to 1.15.0. Importantly, an issue with the
import of scipy.optimize breaking other packages
has been fixed.
Authors
Name (commits)
Ralf Gommers (3)
Rohit Goswami (1)
Matt Haberland (2)
Tyler Reddy (7)
Daniel Schmitz (1)
A total of 5 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.
SciPy 1.15.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.15.x branch, and on adding new features on the main branch.
This release requires Python 3.10-3.13 and NumPy 1.23.5 or greater.
Highlights of this release
Sparse arrays are now fully functional for 1-D and 2-D arrays. We recommend
that all new code use sparse arrays instead of sparse matrices and that
developers start to migrate their existing code from sparse matrix to sparse
array: migration_to_sparray. Both sparse.linalg and sparse.csgraph
work with either sparse matrix or sparse array and work internally with
sparse array.
Sparse arrays now provide basic support for n-D arrays in the COO format
including add, subtract, reshape, transpose, matmul, dot, tensordot and others. More functionality is coming in future
releases.
Preliminary support for free-threaded Python 3.13.
New probability distribution features in scipy.stats can be used to improve
the speed and accuracy of existing continuous distributions and perform new
probability calculations.
Several new features support vectorized calculations with Python Array API
Standard compatible input (see "Array API Standard Support" below):
scipy.differentiate is a new top-level submodule for accurate
estimation of derivatives of black box functions.
scipy.optimize.elementwise contains new functions for root-finding and
minimization of univariate functions.
scipy.integrate offers new functions cubature, tanhsinh, and nsum for multivariate integration, univariate integration, and
univariate series summation, respectively.
scipy.interpolate.AAA adds the AAA algorithm for barycentric rational
approximation of real or complex functions.
scipy.special adds new functions offering improved Legendre function
implementations with a more consistent interface.
New features
scipy.differentiate introduction
The new scipy.differentiate sub-package contains functions for accurate
estimation of derivatives of black box functions.
Use scipy.differentiate.derivative for first-order derivatives of
scalar-in, scalar-out functions.
Use scipy.differentiate.jacobian for first-order partial derivatives of
vector-in, vector-out functions.
Use scipy.differentiate.hessian for second-order partial derivatives of
vector-in, scalar-out functions.
All functions use high-order finite difference rules with adaptive (real)
step size. To facilitate batch computation, these functions are vectorized
and support several Array API compatible array libraries in addition to NumPy
(see "Array API Standard Support" below).
scipy.integrate improvements
The new scipy.integrate.cubature function supports multidimensional
integration, and has support for approximating integrals with
one or more sets of infinite limits.
scipy.integrate.tanhsinh is now exposed for public use, allowing
evaluation of a convergent integral using tanh-sinh quadrature.
scipy.integrate.nsum evaluates finite and infinite series and their
logarithms.
scipy.integrate.lebedev_rule computes abscissae and weights for
integration over the surface of a sphere.
The QUADPACK Fortran77 package has been ported to C.
scipy.interpolate improvements
scipy.interpolate.AAA adds the AAA algorithm for barycentric rational
approximation of real or complex functions.
New functions scipy.interpolate.make_splrep and scipy.interpolate.make_splprep implement construction of smoothing splines.
The algorithmic content is equivalent to FITPACK (splrep and splprep
functions, and *UnivariateSpline classes) and the user API is consistent
with make_interp_spline: these functions receive data arrays and return
a scipy.interpolate.BSpline instance.
New generator function scipy.interpolate.generate_knots implements the
FITPACK strategy for selecting knots of a smoothing spline given the
smoothness parameter, s. The function exposes the internal logic of knot
selection that splrep and *UnivariateSpline was using.
scipy.linalg improvements
scipy.linalg.interpolative Fortran77 code has been ported to Cython.
scipy.linalg.solve supports several new values for the assume_a
argument, enabling faster computation for diagonal, tri-diagonal, banded, and
triangular matrices. Also, when assume_a is left unspecified, the
function now automatically detects and exploits diagonal, tri-diagonal,
and triangular structures.
scipy.linalg matrix creation functions (scipy.linalg.circulant, scipy.linalg.companion, scipy.linalg.convolution_matrix, scipy.linalg.fiedler, scipy.linalg.fiedler_companion, and scipy.linalg.leslie) now support batch
matrix creation.
scipy.linalg.funm is faster.
scipy.linalg.orthogonal_procrustes now supports complex input.
Wrappers for the following LAPACK routines have been added in scipy.linalg.lapack: ?lantr, ?sytrs, ?hetrs, ?trcon,
and ?gtcon.
scipy.linalg.expm was rewritten in C.
scipy.linalg.null_space now accepts the new arguments overwrite_a, check_finite, and lapack_driver.
id_dist Fortran code was rewritten in Cython.
scipy.ndimage improvements
Several additional filtering functions now support an axes argument
that specifies which axes of the input filtering is to be performed on.
These include correlate, convolve, generic_laplace, laplace, gaussian_laplace, derivative2, generic_gradient_magnitude, gaussian_gradient_magnitude and generic_filter.
The binary and grayscale morphology functions now support an axes
argument that specifies which axes of the input filtering is to be performed
on.
scipy.ndimage.rank_filter time complexity has improved from n to log(n).
scipy.optimize improvements
The vendored HiGHS library has been upgraded from 1.4.0 to 1.8.0,
bringing accuracy and performance improvements to solvers.
The MINPACK Fortran77 package has been ported to C.
The L-BFGS-B Fortran77 package has been ported to C.
The new scipy.optimize.elementwise namespace includes functions bracket_root, find_root, bracket_minimum, and find_minimum
for
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.14.1→1.17.0Release Notes
scipy/scipy (scipy)
v1.17.0: SciPy 1.17.0Compare Source
SciPy 1.17.0 Release Notes
SciPy
1.17.0is the culmination of 6 months of hard work. It containsmany 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 -Wdand check forDeprecationWarnings).Our development attention will now shift to bug-fix releases on the
1.17.xbranch, and on adding new features on the main branch.This release requires Python
3.11-3.14and NumPy1.26.4or greater.Highlights of this release
array input and additional support for the array API standard. An overall
summary of the latter is now available in a set of tables.
scipy.sparse,coo_arraynow supports indexing. This includes integers,slices, arrays,
np.newaxis,Ellipsis, in 1D, 2D and the relativelynew nD. In
scipy.sparse.linalg, ARPACK and PROPACK rewrites from Fortran77to C now empower the use of external pseudorandom number generators, e.g.
from numpy.
scipy.spatial,transform.Rotationandtransform.RigidTransformhave been extended to support N-D arrays.
geometric_slerpnow has supportfor extrapolation.
scipy.statshas gained the matrix t and logistic distributions and manyperformance and accuracy improvements.
been added, including for MKL and Apple Accelerate. Please report any issues with
ILP64 you encounter.
New features
scipy.integrateimprovementsdopri5,dopri853,LSODA,vode, andzvodehave been ported from Fortran77 to C.scipy.integrate.quadnow has a fast path for returning 0 when the integrationinterval is empty.
BDF,DOP853,RK23,RK45,OdeSolver,DenseOutput,ode, andcomplex_odeclasses now support subscription, making themgeneric types, for compatibility with
scipy-stubs.scipy.clusterimprovementsscipy.cluster.hierarchy.is_isomorphichas improved performance and arrayAPI support.
scipy.interpolateimprovementsbc_typeargument has been added toscipy.interpolate.make_splrep,scipy.interpolate.make_splprep, andscipy.interpolate.generate_knotstocontrol the boundary conditions for spline fitting. Allowed values are
"not-a-knot"(default) and"periodic".derivativemethod has been added to thescipy.interpolate.NdBSplineclass, to construct a new spline representing apartial derivative of the given spline. This method is similar to the
BSpline.derivativemethod of 1-D spline objects. In addition, theNdBSplinemutable instance attribute.cwas changed into a read-only@property."cubic"and"quintic"modes ofscipy.interpolate.RegularGridInterpolatorhas been improved. Furthermore,the (mutable) instance attributes
.gridand.valueswere changed into(read-only) properties.
scipy.interpolate.AAAhas been improved and it hasgained a new
axisparameter.scipy.interpolate.FloaterHormannInterpolatoradded support formultidimensional, batched inputs and gained a new
axisparameter toselect the interpolation axis.
RBFInterpolatorhas gained an array API standard compatible backend, with animproved support for GPU arrays.
AAA,*Interpolator,*Poly, and*Splineclasses nowsupport subscription, making them generic types, for compatibility with
scipy-stubs.scipy.linalgimprovementsscipy.linalg.invroutine has been improved:appropriate low-level matrix inversion routine. A new
assume_akeywordallows 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_ais provided (in which case, the structure isassumed to be the same for all 2-D slices of the batch);
lower={True,False}keyword argument has been added to helpselect the upper or lower triangle of the input matrix for symmetric
inputs; refer to the docstring of
scipy.linalg.invfor details;LinAlgWarningif it detects an ill-conditionedinput;
scipy.linalg.fiedlerhas gained native support for batched inputs.performance has improved for
scipy.linalg.solvewith batched inputsfor certain matrix structures.
scipy.optimizeimprovementsoptimize.minimize(method="trust-exact")now accepts asolver-specific
"subproblem_maxiter"option. This option can be used toassure that the algorithm converges for functions with an ill-conditioned
Hessian.
optimize.minimize(method="slsqp")canopt into the new callback interface by accepting a single keyword argument
intermediate_result.BroydenFirst,*Jacobian, andBoundsclasses now supportsubscription, making them generic types, for compatibility with
scipy-stubs.scipy.signalimprovementsscipy.signal.abcd_normalizegained more informative error messages and thedocumentation was improved.
scipy.signal.get_windownow accepts the suffixes'_periodic'and'_symmetric'to distinguish between periodic and symmetric windows(overriding the
fftbinparameter). This benefits the functionscoherence,csd,periodogram,welch,spectrogram,stft,istft,resample,resample_poly,firwin,firwin2,firwin_2d,check_COLAandcheck_NOLA, which utilizeget_windowbut do not expose thefftbinparameter.scipy.signal.hilbert2gained the new keywordaxesfor specifying theaxes along which the two-dimensional analytic signal should be calculated.
Furthermore, the documentation of
scipy.signal.hilbertandscipy.signal.hilbert2was significantly improved.ShortTimeFFTandLinearTimeInvariantclasses now supportsubscription, making them generic types, for compatibility with
scipy-stubs.scipy.sparseimprovementscoo_arraynow supports indexing. This includes slices, arrays,np.newaxis,Ellipsis, in 1D, 2D and the new nD. So COO format nowhas full support for nD and COO now allows indexing without converting
formats.
expand_dims,swapaxes,permute_dims, and nD support for thekronfunction.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.
enhancements and other improvements.
scipy.sparse.dok_arraynow supports anupdatemethod which can beused to update the sparse array using a dict,
dict.items()-like iterable,or another
dok_arraymatrix. It performs additional validation that keysare valid index tuples.
scipy.sparse.dia_array.tocsris approximately three times faster andsome unnecessary copy operations have been removed from sparse format
interconversions more broadly.
scipy.sparse.linalg.funm_multiply_krylov, a restarted Krylov methodfor evaluating
y = f(tA) b.sparse.linalg, theLinearOperator,LaplacianNd, andSuperLUclasses now support subscription, making them generic types, for
compatibility with
scipy-stubs.sparse.linalgtheeigsandeigshfunctions now accept a newrngparameter.scipy.spatialimprovementsThe
spatial.transformmodule has gained an array API standard compatiblebackend.
transform.Rotationandtransform.RigidTransformhave been extendedfrom 0D single values and 1D arrays to N-D arrays, with standard indexing and
broadcasting rules. Both now have the following additions:
shapeproperty.shapeargument to theiridentity()constructors, which should bepreferred over the existing
numargument. This has also been added as anargument for
Rotation.random()(RigidTransformdoes not currentlyhave a
randomconstructor).axisargument to theirmean()functions.The resulting shapes for
transform.Rotation.from_euler/from_davenporthave changed to make them consistent with broadcastingrules. Angle inputs to Euler angles must now strictly match the number of
provided axes in the last dimension. The resulting
Rotationhas the shapenp.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles mustalso match the number of axes in the last dimension. The resulting
Rotationhas the shape
np.broadcast_shapes(np.atleast_2d(axes).shape[:-2], np.atleast_1d(angles).shape[:-1]).Rotation.from_matrixhas gained anassume_validargument that allows forperformance improvements when users can guarantee valid matrix inputs.
from_matrixis now also faster in cases where a known orthogonal matrixis used.
The
scipy.spatial.geometric_slerpfunction can now extrapolate. When given avalue outside the range [0, 1],
geometric_slerp()will continue withthe same rotation outside this range. For example, if spherically
interpolating with
startbeing a point on the equator, andendbeing a point at the north pole, then a value of
t=-1would give you apoint at the south pole.
Rotation.as_eulerandRotation.as_davenportmethods have gained asuppress_warningsparameter to enable suppression of gimbal lock warnings.Rotation.__init__has gained a new optionalscalar_firstparameter andthere is a new
Rotation.__setitem__method.scipy.specialimprovementsimproved parameter ranges and reduced error rates:
btdtria,btdtrib,chdtriv,chndtr,chndtrix,chndtridf,chndtrinc,fdtr,fdtrc,fdtri,gdtria,gdtrix,pdtrik,stdtrandstdtrit.betainc,betaincc,betaincinvandbetainccinvare improved for extreme parameter ranges.scipy.statsimprovementsscipy.stats.matrix_thas been added to represent the matrix t distribution.It supports methods
pdf(andlogpdf) for computing the probabilitydensity function and
rvsfor generating random variates.scipy.stats.Logisticwas added for modeling random variables that follow alogistic distribution.
scipy.stats.quantilenow accepts aweightsargument to specifyfrequency weights.
scipy.stats.quantileis now faster on large arrays as it no longer usesstable sort internally.
scipy.stats.quantilesupports three new values of themethodargument,'round_inward','round_outward', and'round_neareast', for use inthe context of trimming and winsorizing data.
scipy.stats.truncparetonow accepts negative values for the exponent shapeparameter, enabling use of
truncparetoas a more general power lawdistribution.
scipy.stats.logsernow provides a distribution-specific implementation ofthe
sfmethod, improving speed and accuracy.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, andscipy.stats.mood.Typically, this improves performance with multidimensional (batch) input.
scipy.stats.andersonhave been updated.methodparameter ofscipy.stats.andersonallows the userto compute p-values by interpolating between tabulated values or using Monte
Carlo simulation. The
methodparameter must be passed explicitlyto add a
pvalueattribute to the result object and avoid a warningabout the upcoming removal of
critical_value,significance_level,and
fit_resultattributes.variantparameter ofscipy.stats.anderson_ksampallows the userto select between three different variants of the statistic, superseding the
midrankparameter which allowed toggling between two. The new'continuous'variant is equivalent to
'discrete'when there are no ties in the sample, butthe calculation is faster. The
variantparameter must be passed explicitly toavoid a warning about the deprecation of the
midrankattribute and the upcomingremoval of
critical_valuesfrom the result object.scipy.stats.zipfianmethods has beenimproved.
scipy.stats.Binomialmethodslogcdfandlogccdfhave been improved in the tails.scipy.stats.trapezoid.fithas been improved.cdf,sf,isf, andppfmethodsof
scipy.stats.binomandscipy.stats.nbinomhas been improved.Covariance,Uniform,Normal,Binomial,Mixture,rv_frozen, andmulti_rv_frozenclasses now support subscription,making them generic types, for compatibility with
scipy-stubs.multivariate_tandmultivariate_normaldistributions have gaineda new
marginalmethod.yeojohnson_llfgained new parametersaxis,nan_policy,and
keepdims, and now returns a numpy scalar where it would previouslyreturn a 0D array.
spearmanrhofunction is an array API compatible substitute forspearmanr.median_abs_deviationfunction has gained akeepdimsparameter.trim_meanfunction has gained newnan_policyandkeepdimsparameters.
Array API Standard Support
now available.
providing improved performance in dispatching to different backends.
scipy.cluster.hierarchy.is_isomorphichas gained support.scipy.interpolate.make_lsq_spline,scipy.interpolate.make_smoothing_spline,scipy.interpolate.make_splrep,scipy.interpolate.make_splprep,scipy.interpolate.generate_knots, andscipy.interpolate.make_interp_splinehave gained support.
scipy.signal.bilinear,scipy.signal.iircomb,scipy.signal.iirdesign,scipy.signal.iirfilter,scipy.signal.iirpeak,scipy.signal.iirnotch,scipy.signal.gammatone, andscipy.signal.group_delayhave 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, andscipy.signal.ellipordhave gained support.scipy.signal.savgol_filter,scipy.signal.savgol_coeffs, andscipy.signal.abcd_normalizehave gained support.spatial.transformhas gained support.scipy.integrate.qmc_quad,scipy.integrate.cumulative_simpson,scipy.integrate.cumulative_trapezoid, andscipy.integrate.rombhavegained support.
scipy.linalg.block_diag,scipy.linalg.fiedler, andscipy.linalg.orthogonal_procrusteshave gained support.scipy.interpolate.BSpline,scipy.interpolate.NdBSpline,scipy.interpolate.RegularGridInterpolator, andscipy.interpolate.RBFInterpolatorgained support.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, andscipy.stats.yeojohnson_llf.scipy.stats.pearsonrhas gained support for JAX and Dask backends.scipy.stats.variationhas gained support for the Dask backend.marraysupport was added forstats.gtstd,stats.directional_stats,stats.bartlett,stats.variation,stats.pearsonr, andstats.entropy.Deprecated features and future changes
scipy.odrmodule is deprecated in v1.17.0 and will be completelyremoved in v1.19.0. Users are suggested to use the
odrpackpackage instead.scipy.sparse.diagsandscipy.sparse.diags_arraywill change in v1.19.0.scipy.linalg.hankelwill no longer ravel multidimensionalinputs and instead will treat them as a batch.
precenterargument ofscipy.signal.lombscargleis deprecated andwill be removed in v1.19.0. Furthermore, some arguments will become keyword
only.
scipy.stats.anderson, the tuple-unpacking behavior of the return objectand attributes
critical_values,significance_level, andfit_resultare deprecated. Use the newmethodparameter to avoid thedeprecation warning. Beginning in SciPy 1.19.0, these features will
no longer be available, and the object returned will have attributes
statisticandpvalue.scipy.stats.anderson_ksamp, themidrankparameter is deprecatedand the new
variantparameter should be preferred. This also means thatthe presence of the
critical_valuesreturn array is deprecated.Expired deprecations
scipy.stats.find_repeatshas been removed. Please usenumpy.unique/numpy.unique_countsinstead.scipy.linalgfunctions for Toeplitz matrices no longer ravel n-d inputarguments; instead, multidimensional input is treated as a batch.
seedandrandfunctions fromscipy.linalg.interpolativehavebeen removed. Use the
rngargument instead.scipy.spatial.distance.cosineandscipy.spatial.distance.correlationnow raise an error.scipy.signal.correlate,scipy.signal.convolve,scipy.signal.lfilter,and
scipy.signal.sosfilt.kulczynski1andsokalmichenerhave been removed fromscipy.spatial.distance.kronhas been removed fromscipy.linalg. Please usenumpy.kron.scipy.interpolate.interpnd.random_stateandpermutationarguments ofscipy.stats.ttest_indhave been removed.sph_harm,clpmn,lpn, andlpmnhave been removed fromscipy.special.Backwards incompatible changes
transform.Rotation.from_euler/from_davenporthave changed to make them consistent with broadcastingrules. Angle inputs to Euler angles must now strictly match the number of
provided axes in the last dimension. The resulting
Rotationhas the shapenp.atleast_1d(angles).shape[:-1]. Angle inputs to Davenport angles mustalso match the number of axes in the last dimension. The resulting
Rotationhas 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.0to1.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=truemeson option, and makesure to have a LAPACK library which exposes both LP64 and ILP64 symbols.
Currently supported LAPACK libraries are MKL and Apple Accelerate. Note that:
LP64 interface;
get_{blas,lapack}_funcsfunctions:scipy.linalg.lapack.get_lapack_funcs(..., use_ilp64="preferred")selectsthe ILP64 variant if available and LP64 variant otherwise;
cython_blasandcython_lapackmodules always contain the LP64routines for ABI compatibility.
Please report any issues with ILP64 you encounter.
Authors
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.v1.16.3: SciPy 1.16.3Compare Source
SciPy 1.16.3 Release Notes
SciPy
1.16.3is a bug-fix release with no new features compared to1.16.2.Authors
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.txtfile.v1.16.2: SciPy 1.16.2Compare Source
SciPy 1.16.2 Release Notes
SciPy
1.16.2is a bug-fix release with no new featurescompared to
1.16.1. This is the first stable release ofSciPy to provide Windows on ARM wheels on PyPI.
Authors
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.txtfile.v1.16.1: SciPy 1.16.1Compare Source
SciPy 1.16.1 Release Notes
SciPy
1.16.1is a bug-fix release that adds support for Python3.14.0rc1,including PyPI wheels.
Authors
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.txtfile.v1.16.0: SciPy 1.16.0Compare Source
SciPy 1.16.0 Release Notes
SciPy
1.16.0is the culmination of 6 months of hard work. It containsmany 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 -Wdand check forDeprecationWarnings).Our development attention will now shift to bug-fix releases on the
1.16.x branch, and on adding new features on the main branch.
This release requires Python
3.11-3.13and NumPy1.25.2or greater.Highlights of this release
new support in
scipy.signal, and additional support inscipy.statsandscipy.special. Improved support for JAX and Dask backends has been added,with notable support in
scipy.cluster.hierarchy, many functions inscipy.special, and many of the trimmed statistics functions.scipy.optimizenow uses the new Python implementation from thePRIMApackage for COBYLA. The PRIMA implementation fixes many bugsin the old Fortran 77 implementation with a better performance on average.
scipy.sparse.coo_arraynow supports n-D arrays with reshaping, arithmetic andreduction operations like sum/mean/min/max. No n-D indexing or
scipy.sparse.random_arraysupport yet.scipy.linalgnamespace that accept arrayarguments now support N-dimensional arrays to be processed as a batch.
scipy.signalfunctions,scipy.signal.firwin_2dandscipy.signal.closest_STFT_dual_window, for creation of a 2-D FIR filter andscipy.signal.ShortTimeFFTdual window calculation, respectively.scipy.spatial.transform.RigidTransform, provides functionalityto convert between different representations of rigid transforms in 3-D
space.
scipy.ndimage.vectorized_filterfor generic filters thattake advantage of a vectorized Python callable was added.
New features
scipy.ioimprovementsscipy.io.savematnow provides informative warnings for invalid field names.scipy.io.mmreadnow provides a clearer error message when provided witha source file path that does not exist.
scipy.io.wavfile.readcan now read non-seekable files.scipy.integrateimprovementsscipy.integrate.tanhsinhwas improved.scipy.interpolateimprovementsscipy.interpolate.make_smoothing_spline.scipy.linalgimprovementsscipy.linalgnamespace that accept arrayarguments now support N-dimensional arrays to be processed as a batch.
See
linalg_batchfor details.scipy.linalg.sqrtmis rewritten in C and its performance is improved. Italso tries harder to return real-valued results for real-valued inputs if
possible. See the function docstring for more details. In this version the
input argument
dispand the optional output argumenterrestaredeprecated and will be removed four versions later. Similarly, after
changing the underlying algorithm to recursion, the
blocksizekeywordargument has no effect and will be removed two versions later.
?stevd,?langb,?sytri,?hetriand?gbconwere added toscipy.linalg.lapack.scipy.linalg.eigh_tridiagonalwas improved.scipy.linalg.solvecan now estimate the reciprocal condition number andthe matrix norm calculation is more efficient.
scipy.ndimageimprovementsscipy.ndimage.vectorized_filterfor generic filters thattake advantage of a vectorized Python callable was added.
scipy.ndimage.rotatehas improved performance, especially on ARM platforms.scipy.optimizeimprovementsPRIMApackage.The PRIMA implementation fixes many bugs
in the old Fortran 77 implementation. In addition, it results in fewer function evaluations on average
but it depends on the problem and for some
problems it can result in more function evaluations or a less optimal
result. For those cases the user can try modifying the initial and final
trust region radii given by
rhobegandtolrespectively. A largerrhobegcan help the algorithm take bigger steps initially, while asmaller
tolcan help it continue and find a better solution.For more information, see the PRIMA documentation.
scipy.optimize.minimizemethods, and thescipy.optimize.least_squaresfunction, have been given aworkerskeyword. This allows parallelization of some calculations via a map-like
callable, such as
multiprocessing.Pool. These parallelizationopportunities typically occur during numerical differentiation. This can
greatly speed up minimization when the objective function is expensive to
calculate.
lmmethod ofscipy.optimize.least_squarescan now accept3-pointandcsfor thejackeyword.constraint multipliers are exposed to the user through the
multiplierkeyword of the returned
scipy.optimize.OptimizeResultobject.regression introduced in 1.15.x
scipy.optimize.rootnow warns for invalid inner parameters when using thenewton_krylovmethodmethod='L-BFGS-B'now hasa faster
hess_inv.todense()implementation. Time complexity has improvedfrom cubic to quadratic.
scipy.optimize.least_squareshas a newcallbackargument that is applicableto the
trfanddogboxmethods.callbackmay be used to trackoptimization results at each step or to provide custom conditions for
stopping.
scipy.signalimprovementsscipy.signal.firwin_2dfor the creation of a 2-D FIR Filterusing the 1-D window method was added.
scipy.signal.cspline1d_evalandscipy.signal.qspline1d_evalnow providean informative error on empty input rather than hitting the recursion limit.
scipy.signal.closest_STFT_dual_windowto calculate thescipy.signal.ShortTimeFFTdual window of a given window closest to adesired dual window.
scipy.signal.ShortTimeFFT.from_win_equals_dualtocreate a
scipy.signal.ShortTimeFFTinstance where the window and its dualare equal up to a scaling factor. It allows to create short-time Fourier
transforms which are unitary mappings.
scipy.signal.convolve2dwas improved.scipy.sparseimprovementsscipy.sparse.coo_arraynow supports n-D arrays using binary and reductionoperations.
matmul.
scipy.sparse.csgraph.dijkstrashortest_path is more efficient.scipy.sparse.csgraph.yenhas performance improvements.sparse.csgraphandsparse.linalgwasadded.
scipy.spatialimprovementsscipy.spatial.transform.RigidTransform, provides functionalityto convert between different representations of rigid transforms in 3-D
space, its application to vectors and transform composition.
It follows the same design approach as
scipy.spatial.transform.Rotation.scipy.spatial.transform.Rotationnow has an appropriate__repr__method,and improved performance for its
scipy.spatial.transform.Rotation.applymethod.
scipy.statsimprovementsscipy.stats.quantile, an array API compatible function forquantile estimation, was added.
scipy.stats.make_distributionwas extended to work with existing discretedistributions and to facilitate the creation of custom distributions in the
new random variable infrastructure.
scipy.stats.Binomial, was added.equal_varkeyword was added toscipy.stats.tukey_hsd(enables theGames-Howell test) and
scipy.stats.f_oneway(enables Welch ANOVA).scipy.stats.gennormwas improved.scipy.stats.modeimplementation was vectorized, for faster batchcalculation.
axis,nan_policy, andkeepdimskeywords was added toscipy.stats.power_divergence,scipy.stats.chisquare,scipy.stats.pointbiserialr,scipy.stats.kendalltau,scipy.stats.weightedtau,scipy.stats.theilslopes,scipy.stats.siegelslopes,scipy.stats.boxcox_llf, andscipy.stats.linregress.keepdimsandnan_policykeywords was added toscipy.stats.gstd.scipy.stats.special_ortho_groupandscipy.stats.pearsonrwas improved.
rngkeyword argument was added to thelogcdfandcdfmethods ofmultivariate_normal_genandmultivariate_normal_frozen.Array API Standard Support
Experimental support for array libraries other than NumPy has been added to
multiple submodules in recent versions of SciPy. Please consider testing
these features by setting the environment variable
SCIPY_ARRAY_API=1andproviding PyTorch, JAX, CuPy or Dask arrays as array arguments.
Many functions in
scipy.stats,scipy.special,scipy.optimize, andscipy.constantsnow provide tables documenting compatible array and devicetypes as well as support for lazy arrays and JIT compilation. New features with
support and old features with support added for SciPy 1.16.0 include:
scipy.signalfunctionalityscipy.ndimage.vectorized_filterscipy.special.stdtritscipy.special.softmaxscipy.special.log_softmaxscipy.stats.quantilescipy.stats.gstdscipy.stats.rankdataFeatures with extended array API support (generally, improved support
for JAX and Dask) in SciPy 1.16.0 include:
scipy.cluster.hierarchyfunctionsscipy.specialscipy.statsSciPy now has a CI job that exercises GPU (CUDA) support, and as a result
using PyTorch, CuPy or JAX arrays on GPU with SciPy is now more reliable.
Deprecated features
atolargument ofscipy.optimize.nnlsis deprecated and willbe removed in SciPy 1.18.0.
dispargument ofscipy.linalg.signm,scipy.linalg.logm, andscipy.linalg.sqrtmwill be removed in SciPy 1.18.0.scipy.stats.multinomialnow emits aFutureWarningif the rows ofpdo not sum to
1.0. This condition will produce NaNs beginning in SciPy1.18.0.
dispandiprintarguments of thel-bfgs-bsolver ofscipy.optimizehave been deprecated, and will be removed in SciPy 1.18.0.
Expired Deprecations
scipy.sparse.conjtransphas been removed. Use.T.conj()instead.quadrature='trapz'option has been removed fromscipy.integrate.quad_vec, andscipy.stats.trapzhas been removed. Usetrapezoidin both instances instead.scipy.special.combandscipy.special.permnow raise whenexact=Trueand arguments are non-integral.
argument
xhas been removed fromscipy.stats.linregress. The datamust be specified separately as
xandy.scipy.stats.power_divergenceandscipy.stats.chisquare.(e.g.,
scipy.sparse.base,scipy.interpolate.dfitpack) were cleanedup. They were previously already emitting deprecation warnings.
Backwards incompatible changes
scipy.linalgfunctions for solving a linear system (e.g.scipy.linalg.solve) documented that the RHS argument must be either 1-D or2-D but did not always raise an error when the RHS argument had more the
two dimensions. Now, many-dimensional right hand sides are treated according
to the rules specified in
linalg_batch.scipy.stats.bootstrapnow explicitly broadcasts elements ofdatato thesame shape (ignoring
axis) before performing the calculation.from scipy.signal import *,but may still be imported directly, as detailed at scipy/scipy-stubs#549.
Build and packaging related changes
10.13.
from 60 MB to 30 MB.
Cython>=3.1.0, SciPy now uses the newcython --generate-sharedfunctionality, which reduces the total size of SciPy's wheels and on-disk
installations significantly.
after
sf_error_statewas removed fromscipy.special.-Duse-system-librarieshas been added. It allowsopting in to using system libraries instead of using vendored sources.
Currently
Boost.MathandQhullare supported as system builddependencies.
Other changes
scipy-stubs(v1.16.0.0) isavailable at https://github.com/scipy/scipy-stubs/releases/tag/v1.16.0.0
scipy._libonscipy.sparsewas removed,which reduces the import time of a number of other SciPy submodules.
issues in
scipy.specialwere fixed, andpytest-run-parallelis now usedin a CI job to guard against regressions.
spinas a developerCLI was added, including support for editable installs. The SciPy-specific
python dev.pyCLI will be removed in the next release cycle in favor ofspin.scipy.specialwas moved to the newheader-only
xsflibrary. That library wasincluded back in the SciPy source tree as a git submodule.
namedtuple-like bunch objects returned by some SciPy functionsnow have improved compatibility with the
polarslibrary.rvsmethod ofscipy.stats.wrapcauchyis now mapped tothe unit circle between 0 and
2 * pi.lmmethod ofscipy.optimize.least_squaresnow has a different behaviorfor the maximum number of function evaluations,
max_nfev. The default forthe
lmmethod is changed to100 * n, for both a callable and anumerically estimated jacobian. This limit on function evaluations excludes
those used for any numerical estimation of the Jacobian. Previously the
default when using an estimated jacobian was
100 * n * (n + 1), becausethe method included evaluations used in the estimation. In addition, for the
lmmethod the number of function calls used in Jacobian approximationis no longer included in
OptimizeResult.nfev. This brings the behaviorof
lm,trf, anddogboxinto line.Authors
A total of 126 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.v1.15.3: SciPy 1.15.3Compare Source
SciPy 1.15.3 Release Notes
SciPy
1.15.3is a bug-fix release with no new featurescompared to
1.15.2.For the complete issue and PR lists see the raw release notes.
Authors
A total of 24 people contributed to this release.
People with a "+" by their names contributed a patch for the first time.
This list of names is automatically generated, and may not be fully complete.
v1.15.2: SciPy 1.15.2Compare Source
SciPy 1.15.2 Release Notes
SciPy
1.15.2is a bug-fix release with no new featurescompared to
1.15.1. Free-threaded Python3.13wheelsfor Linux ARM platform are available on PyPI starting with
this release.
Authors
A total of 14 people contributed to this release.
People with a "+" by their names contributed a patch for the first time.
This list of names is automatically generated, and may not be fully complete.
v1.15.1: SciPy 1.15.1Compare Source
SciPy 1.15.1 Release Notes
SciPy
1.15.1is a bug-fix release with no new featurescompared to
1.15.0. Importantly, an issue with theimport of
scipy.optimizebreaking other packageshas been fixed.
Authors
A total of 5 people contributed to this release.
People with a "+" by their names contributed a patch for the first time.
This list of names is automatically generated, and may not be fully complete.
v1.15.0: SciPy 1.15.0Compare Source
SciPy 1.15.0 Release Notes
SciPy
1.15.0is the culmination of6months of hard work. It containsmany 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 -Wdand check forDeprecationWarnings).Our development attention will now shift to bug-fix releases on the
1.15.x branch, and on adding new features on the main branch.
This release requires Python
3.10-3.13and NumPy1.23.5or greater.Highlights of this release
Sparse arrays are now fully functional for 1-D and 2-D arrays. We recommend
that all new code use sparse arrays instead of sparse matrices and that
developers start to migrate their existing code from sparse matrix to sparse
array:
migration_to_sparray. Bothsparse.linalgandsparse.csgraphwork with either sparse matrix or sparse array and work internally with
sparse array.
Sparse arrays now provide basic support for n-D arrays in the COO format
including
add,subtract,reshape,transpose,matmul,dot,tensordotand others. More functionality is coming in futurereleases.
Preliminary support for free-threaded Python 3.13.
New probability distribution features in
scipy.statscan be used to improvethe speed and accuracy of existing continuous distributions and perform new
probability calculations.
Several new features support vectorized calculations with Python Array API
Standard compatible input (see "Array API Standard Support" below):
scipy.differentiateis a new top-level submodule for accurateestimation of derivatives of black box functions.
scipy.optimize.elementwisecontains new functions for root-finding andminimization of univariate functions.
scipy.integrateoffers new functionscubature,tanhsinh, andnsumfor multivariate integration, univariate integration, andunivariate series summation, respectively.
scipy.interpolate.AAAadds the AAA algorithm for barycentric rationalapproximation of real or complex functions.
scipy.specialadds new functions offering improved Legendre functionimplementations with a more consistent interface.
New features
scipy.differentiateintroductionThe new
scipy.differentiatesub-package contains functions for accurateestimation of derivatives of black box functions.
scipy.differentiate.derivativefor first-order derivatives ofscalar-in, scalar-out functions.
scipy.differentiate.jacobianfor first-order partial derivatives ofvector-in, vector-out functions.
scipy.differentiate.hessianfor second-order partial derivatives ofvector-in, scalar-out functions.
All functions use high-order finite difference rules with adaptive (real)
step size. To facilitate batch computation, these functions are vectorized
and support several Array API compatible array libraries in addition to NumPy
(see "Array API Standard Support" below).
scipy.integrateimprovementsscipy.integrate.cubaturefunction supports multidimensionalintegration, and has support for approximating integrals with
one or more sets of infinite limits.
scipy.integrate.tanhsinhis now exposed for public use, allowingevaluation of a convergent integral using tanh-sinh quadrature.
scipy.integrate.nsumevaluates finite and infinite series and theirlogarithms.
scipy.integrate.lebedev_rulecomputes abscissae and weights forintegration over the surface of a sphere.
QUADPACKFortran77 package has been ported to C.scipy.interpolateimprovementsscipy.interpolate.AAAadds the AAA algorithm for barycentric rationalapproximation of real or complex functions.
scipy.interpolate.FloaterHormannInterpolatoradds barycentric rationalinterpolation.
scipy.interpolate.make_splrepandscipy.interpolate.make_splprepimplement construction of smoothing splines.The algorithmic content is equivalent to FITPACK (
splrepandsplprepfunctions, and
*UnivariateSplineclasses) and the user API is consistentwith
make_interp_spline: these functions receive data arrays and returna
scipy.interpolate.BSplineinstance.scipy.interpolate.generate_knotsimplements theFITPACK strategy for selecting knots of a smoothing spline given the
smoothness parameter,
s. The function exposes the internal logic of knotselection that
splrepand*UnivariateSplinewas using.scipy.linalgimprovementsscipy.linalg.interpolativeFortran77 code has been ported to Cython.scipy.linalg.solvesupports several new values for theassume_aargument, enabling faster computation for diagonal, tri-diagonal, banded, and
triangular matrices. Also, when
assume_ais left unspecified, thefunction now automatically detects and exploits diagonal, tri-diagonal,
and triangular structures.
scipy.linalgmatrix creation functions (scipy.linalg.circulant,scipy.linalg.companion,scipy.linalg.convolution_matrix,scipy.linalg.fiedler,scipy.linalg.fiedler_companion, andscipy.linalg.leslie) now support batchmatrix creation.
scipy.linalg.funmis faster.scipy.linalg.orthogonal_procrustesnow supports complex input.scipy.linalg.lapack:?lantr,?sytrs,?hetrs,?trcon,and
?gtcon.scipy.linalg.expmwas rewritten in C.scipy.linalg.null_spacenow accepts the new argumentsoverwrite_a,check_finite, andlapack_driver.id_distFortran code was rewritten in Cython.scipy.ndimageimprovementsaxesargumentthat specifies which axes of the input filtering is to be performed on.
These include
correlate,convolve,generic_laplace,laplace,gaussian_laplace,derivative2,generic_gradient_magnitude,gaussian_gradient_magnitudeandgeneric_filter.axesargument that specifies which axes of the input filtering is to be performed
on.
scipy.ndimage.rank_filtertime complexity has improved fromntolog(n).scipy.optimizeimprovements1.4.0to1.8.0,bringing accuracy and performance improvements to solvers.
MINPACKFortran77 package has been ported to C.L-BFGS-BFortran77 package has been ported to C.scipy.optimize.elementwisenamespace includes functionsbracket_root,find_root,bracket_minimum, andfind_minimumfor
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.