Skip to main content
`Ctrl`+`K`

# 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

- `abcd_normalize` gained more informative error messages and the documentation was improved.

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

- `hilbert2` gained the new keyword `axes` for specifying the axes along which the two-dimensional analytic signal should be calculated. Furthermore, the documentation of `hilbert` and `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.

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

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

## Issues closed for 1.17.0

- #1508: Riccati-Bessel functions are misspelled in the docs (Trac #981)

- #3890: ENH: stats.logser: implement `cdf`/`sf`

- #4487: “_solout” in “dopri5” class of “scipy.integrate” reverses the…

- #5503: ENH: special.betainc: improve errors for extreme numbers of trials

- #7931: scipy.special.tests.test_basic::TestCephes::test_fdtri fails…

- #9023: Opportunity to add a seed or a random_state parameter to scipy.sparse.linalg.eig…

- #9185: BUG: sparse.linalg: ARPACK error 1

- #9460: BUG: sparse.linalg.eigs: sorting behavior reliability

- #10744: BUG: sparse.linalg: Test failures with BLIS BLAS

- #11805: Fatal Python error: Segmentation fault - test_arpack.py::test_symmetric_modes

- #12513: BUG: optimize: Halting problem in trust-exact subproblem

- #13222: porting scipy’s Fortran code to NAG’s nagfor compiler

- #13671: QUERY: signal.coherence: discrepancy with Matlab

- #13692: scipy.sparse.linalg.eigsh hangs for complex matrices on macOS

- #13780: reprodcibility of scipy.sparse.linalg.svds

- #14498: overwrite_data=True kwarg ignored when type=”constant” in scipy.signal.detrend

- #14823: BUG: vectors/matrices produced by eigenvalues/vectors routines…

- #15940: odeint (lsoda) emits too many warnings that are not filterable.

- #16232: BUG: Memory leak due to new reference passed to non-stealing…

- #18191: BUG: Iteration count in scipy.sparse.linalg._eigen.arpack greater…

- #18736: TST: `test_hermitian_modes` test failure

- #18919: BUG: Bad result (broadcasting ?) for binom.ppf and q=1, when…

- #19291: BUG: firwin(pass_zero=False) does not block DC

- #19756: BUG: sparse.linalg.eigsh: output eigenvector non-deterministic…

- #19826: MAINT: follow-ups to gh-19724 (pytest pins, temporary CI changes,…

- #19930: BUG: multivariate t broken for `df=inf`

- #20050: ENH: interpolate: NdBSpline partial derivatives

- #20339: BUG: Segfault in complex sparse eigen solver

- #20835: BUG: special.fdtri: inaccurate results for extreme arguments…

- #21039: ENH: Implement all relevant methods for `sparse.dia_array`

- #21137: BUG: sparse.linalg.svds: `ARPACK error -9: Starting vector is`…

- #21156: DOC: `integrate`: tutorial `help` command output is out…

- #21541: ENH: spatial: `Rotation.__mul__`: handle non-`Rotation`…

- #21563: ENH: stats.percentileofscore: 2D array input should be fixed…

- #21716: DOC: conda-forge `compilers` package now also usable on windows

- #21936: BUG: `*ger*` routines in `linalg.blas` are not thread-safe

- #22053: MAINT: Cython lint failures in build output

- #22310: BUG: scipy.sparse.linalg.eigsh returns an error when LinearOperator.dtype=None

- #22365: BUG: ndimage: C++ memory management issues in `_rank_filter_1d.cpp`

- #22412: RFC/API: move `clarkson_woodruff_transform` from `linalg`…

- #22436: BUG: special.itj0y0: regression for `t > 19`

- #22500: ENH: spatial.transform: Add array API standard support

- #22510: performance: _construct_docstrings slow in scipy.stats

- #22682: BUG: special.betainc: inaccurate/incorrect for small a and b…

- #22794: ENH: add `weights` param to `stats.quantile` similarly to…

- #22871: BUG: stats.sigmaclip: returns strange thresholds

- #22880: BUG: interpolate: Akima1DInterpolator raises ValueError for valid…

- #22887: DEV: follow-up tasks after merge of `spin` support

- #22974: ENH: sparse.linalg: Krylov methods for matrix functions

- #22979: DOC: optimize.nnls: squared 2-norm instead of 2-norm?

- #22980: DEV: `spin test -b all` adds `--pyargs scipy` twice

- #23021: DEV: can we ‘scrape’ package-wide `make_xp_test_case` info?

- #23053: DEV: `spin smoke-docs` adds an option twice

- #23080: BUG: optimize: too many open files with multiprocessing

- #23101: BUG: special: Discontinuity in associated Legendre functions

- #23111: BUG: stats.pmean: wrong value for infinite orders

- #23116: BUG: `UserWarning` due to `spin build`

- #23124: CI: (re-)adopt `(d)tach` for modularity enforcement

- #23136: DEV/DOC: update vendored code pages for `_lib.decorator`

- #23160: DOC: signal.medfilt: remove outdated note

- #23166: BENCH/DEV: `spin bench` option `--quick` is useless (always…

- #23171: BUG: `interpolate.RegularGridInterpolator` fails on a 2D grid…

- #23195: BUG: New backend for interpolative decomposition breaks for (1xn)…

- #23204: BUG/TST: stats: XSLOW test failures of `ttest_ind`

- #23208: DOC: Missing docstrings for some warnings in scipy.io

- #23231: DOC: Fix bug in release notes for scipy v1.12.0

- #23237: DOC: Breadcrumbs missing and sidebar different in API reference…

- #23248: BUG/TST: `differentiate` `test_dtype` fails with `float16`…

- #23272: BUG: linalg.interpolative.reconstruct_matrix_from_id: segfault…

- #23297: BUG [nightly]: spatial.transform.Rotation.from_quat: fails for…

- #23301: BUG: free-threading: functionality based on multiprocessing.Pool…

- #23303: BUG: spatial.transform.Rotation: Warning Inconsistency

- #23330: BUG: special.kv: incorrect translation of AMOS Fortran code resulting…

- #23334: DEV: `spin lint`: use `sys.executable` always

- #23344: CircleCI benchmarks job requires `hypothesis`

- #23345: DOC: Incorrect dimension of PPoly.c in docstring

- #23352: DOC: spatial.is_valid_dm: misleading documentation

- #23355: Chatterjee’s Xi returns different results based on `numpy`…

- #23358: BUG: stats: ppf of 0 returns a value outside the distribution…

- #23369: DOC: interpolate: NearestNDInterpolator works with multi-dimensional…

- #23371: BUG: (interpolate) _dierckx.data_matrix gives ValueError if input…

- #23382: BUG: setting with `sparse.xxx_{matrix,array}` 2D singleton

- #23383: DOC/DEV: correct editable install `spin` guidance

- #23390: BUG: stats.sampling: segfault in various classes on osx-arm64

- #23391: ENH: spatial.transform: array API standard support tracker

- #23400: ENH: spatial.geometric_slerp: allow for extrapolation

- #23409: BUG: stats.qmc.Sobol: stuck in infinite loop in low_0_bit after…

- #23412: TST: stats: `marray` tests failing with latest array-api-strict

- #23418: BUG: scipy.signal.square ignores input dtype due to incorrect…

- #23423: CI: new BLAS tests ci jobs don’t respect ci skips

- #23431: DOC: interpolate.RbfInterpolator: incorrect equation in Notes

- #23449: DOC/ENH: signal.get_window: different default for symmetric/periodic…

- #23462: BUG: sparse: load_npz fails for coo_arry with dim>2

- #23477: DOC: The file `scipy/_lib/_lazy_testing.py` has been removed

- #23510: BUG: NdBSpline segfaults for too high derivative orders

- #23514: DOC: add LFX Insights badge to README

- #23517: SHGO: issue passing args to objective function

- #23542: BUG: interpolate: Internal error from `fpknot` while running…

- #23551: BUG: stats.levene: test results are incorrect when `center="trimmed"`

- #23553: BUG: scipy.sparse.csgraph.yen crashes with out-of-bounds source…

- #23555: BUG: lfilter with empty a array can trigger misleading error…

- #23556: BUG: deconvolve with empty divisor or signal arrays causes inconsistent…

- #23559: DOC: stats: A reference in the `fligner` docstring occurs twice.

- #23581: BUG: `xp_capabilities` adds empty lines to docstrings

- #23596: DOC: wrong version for stats.f_oneway’s equal_var parameter

- #23603: TST: adapt to NumPy warning change (mean of empty slice)

- #23608: DOC: Being clear about the distribution of `scipy.spatial.transform.Rotation.ra`…

- #23640: BUG: optimize: incorrect termination criteria in minpack LMSTR?

- #23644: BUG: sparse: `csc_array.setdiag()` makes indices unsorted without…

- #23670: BUG: `xp_promote` and `xp_result_type` are slow for big tensors…

- #23678: BUG: stats: custom distribution generated from `zipfian` has…

- #23686: BUG: Hang in scipy 1.16.2 on macOS x86_64 in scipy.sparse.linalg.eigsh…

- #23689: CI: optimize: “UserWarning: ‘where’ used without ‘out’” error…

- #23703: DOC: special: second parameter in the `factorialk` docstring…

- #23704: DOC: optimize: typo in LinearConstraint docs

- #23708: TST: `FAILED scipy/stats/tests/test_continuous.py::TestDistributions::test_func`…

- #23710: BUG: `signal/tests/test_short_time_fft.py::test_closest_STFT_dual_window_roundt`…

- #23711: BUG: `stats/tests/test_axis_nan_policy.py::test_axis_nan_policy_axis_is_None`

- #23715: BUG: integrate: benchmark integrate.CubatureOscillatory.time_plain…

- #23720: TST: test_as_euler_symmetric_axes tol with torch

- #23742: QUERY: Fitting 4 parameters beta distribution leads to unexpected…

- #23750: TST: signal: Add better isolation to alternative backend tests…

- #23760: DOC/DX: `spin ipython --help` missing required use of `--`…

- #23762: ENH: interpolate.RegularGridInterpolator: `eliminate_zeros()`…

- #23763: BUG: scipy.odr.ODR Segmentation Fault with job=1 and Explicit…

- #23778: ENH: Improve performance of converting csc arrays to csr arrays…

- #23825: TST: Missing tests for `mathieu_even_coef`, `mathieu_odd_coef`

- #23832: DOC: Broadcasting in `stats.quantile`

- #23852: BUG/TST: stats: New XSLOW failures in stats

- #23867: BUG: `special.comb(0, 0, repetition=False) == 0` , not 1

- #23879: DOC: RigidTransform.as_components doc is incorrect

- #23910: TST: stats: free-threaded failure in `test_non_finite_inputs_and_int_bins`

- #23925: DOC: Invalid documentation of parameter “shape” of the “scipy.sparse….

- #23932: CI: mypy and clang jobs failing with “unused function” error…

- #23989: CI: hang in windows job, OpenMP clash

- #24043: DEV: switch from `dtach` to `tach`

- #24046: TST: stats: TestStudentT.test_moments_t failure

- #24052: CI: TypeError: Multiple namespaces for array inputs

- #24089: ENH: spatial.transform: Add `normalize` argument to `Rotation.from_matrix`

- #24131: BUG: `1.17.0rc1`: ModuleNotFoundError: No module named ‘scipy.integrate._lso…

- #24152: DOC: 1.17 API changes not mentioned in the 1.17.0rc1 release…

- #24212: BENCH, MAINT: (sparse) asv suite compat with NumPy 2.4.0

- #24251: CI: linalg: several test failures for ILP64

- #24256: DOC: 1.17 API changes not mentioned in the 1.17.0rc2 release…

## Pull requests for 1.17.0

- #19668: ENH: optimize.minimize: add `subproblem_maxiter` option for…

- #21683: ENH:MAINT:integrate: Rewrite DOP F77 code in C

- #22041: BUG: Perform `Py_DECREF` on `obj` to avoid memory leak

- #22506: ENH: special.btdtria: migrate to boost

- #22539: ENH/MAINT: migrate `special.chndtr` and its inverses to boost

- #22644: ENH: stats.quantile: methods to support trimming/Winsorizing

- #22699: ENH: special: boostify F distribution functions

- #22743: ENH: ILP64 BLAS/LAPACK support

- #22748: ENH:MAINT: sparse.linalg: rewrite ARPACK in C

- #22795: ENH: special: add more functions to `_support_alternative_backends`

- #22827: ENH: stats: add `marray` support to a few remaining functions

- #22856: MAINT: stats: ensure functions work on non-default device

- #22857: ENH: stats: add array API support to much of `_axis_nan_policy`…

- #22885: MAINT: eager_warns: accept xp as keyword-only argument

- #22889: MAINT: migrate `special.btdtrib` to boost

- #22907: BENCH: stats.qmc.geometric_discrepancy: add benchmarks

- #22911: ENH: signal: Array API for filter design functions

- #22914: ENH: signal: Add Array API compatibility to the `filter_design`…

- #22924: ENH: linalg: low-level nD support, take 3

- #22925: ENH: stats: Add matrix variate t distribution

- #22938: TST: `signal` add test coverage to the handling of new set…

- #22962: MAINT: migrate `stdtr` and `stdtrit` to boost

- #22972: ENH: spatial.transform.RigidTransform: refactor into pure Python…

- #22983: ENH: sparse.linalg: a restarted Krylov method for evaluating…

- #22989: ENH: `cluster`: vectorize `is_isomorphic`

- #23006: REL: set version to 1.17.0.dev0

- #23009: ENH: sparse: efficient conversion from DIA to CSR format

- #23012: BENCH: asv benchmarks for alternative array backends

- #23015: DOC: scipy.signal.ShortTimeFFT.k_max: Fix slice index

- #23016: MAINT: bump minimum NumPy version

- #23019: BUG: interpolate.Akima1DInterpolator: Identical Rearrangement…

- #23020: ENH: interpolate.BSpline: add array API standard interface

- #23023: DEP: stats: remove find_repeats

- #23026: DEV: Remove `--parallel` and rely on `spin`‘s `--jobs`…

- #23028: MAINT: create `_lib._array_api_override` to solve circular…

- #23034: DEP: linalg.interpolative: remove seed and rand

- #23039: TYP: fix and improve the `linalg._decomp_lu_cython` stub

- #23041: DOC/DEV: Updated developer docs for `spin`

- #23043: DEP: linalg: remove kron

- #23045: DEP: interpolate.interpnd: remove incidental imports from private…

- #23050: DEV: add `spin notes` and `spin authors` commands

- #23052: ENH: interpolate: array API for BSpline-based `make_` functions

- #23057: ENH: Speed up `array_namespace` through caching

- #23058: CI: clean up free-threading job, use released Cython/Pythran

- #23059: MAINT: remove nan-handling from _factorialx_array_exact

- #23060: DOC: Revise a footnote in meson-distutils

- #23062: DEV: help debug free-threading build of Fortran modules

- #23063: DEV: ignore `pixi-dev-scipystack` dirs

- #23065: ENH: stats.tukey_hsd: improve array index iteration in `TukeyHSDResult.__str__``…

- #23071: ENH: linalg: low-level batching support in `solve`

- #23073: TST: `linalg`: refactor `test_blas`

- #23078: MAINT: smoke-docs: add a `--doctest-only-doctests` flag to…

- #23081: DOC: Add tables summarizing array API backend capabilities across…

- #23082: TST: linalg: thread-safe rng

- #23083: TST: linalg: pytest-run-parallell out of memory

- #23084: TST: linalg: race condition in BLAS `ger*`

- #23085: TST: signal: fix flaky TestZpk2Sos

- #23087: CI: move pre-release and free-threading jobs to CPython 3.14-dev

- #23089: ENH/DEP: linalg: support batching for toeplitz and related functions

- #23092: DEV: Address issues in `spin docs` command

- #23093: DEV: remove duplicate `--doctest-collect=api` in `spin smoke-docs`

- #23094: DOC: linalg: fix overview for `cdf2rdf` and `khatri_rao`

- #23095: DEV: remove `python dev.py` in favor of `spin`

- #23096: CI: move to `cibuildwheel` 3.0b4 and to `manylinux_2_28`

- #23104: ENH: stats: Dask support for `variation`

- #23105: ENH: stats: Dask and JAX support for `pearsonr`

- #23108: MAINT: Remove optional arguments from `*_impl` functions in…

- #23112: MAINT: remove duplicated test in `stats.tests.test_stats.py`

- #23117: BUG: remove `cdef` exports in `linalg._decomp_interpolative`

- #23118: TYP: generic `signal.ShortTimeFFT` type

- #23121: BUG: sparse.linalg.LaplacianNd: periodic eigenvectors

- #23123: TYP: Disable NumPy’s deprecated mypy plugin

- #23125: MAINT: Update vendored `_lib.decorators` module to `v5.2.1`

- #23129: DOC: special.roots_jacobi: add example to docstring

- #23130: DEV: spin: change shorthand of `--setup-args` to `-S` to…

- #23138: MAINT: sparse: remove python 2 remnants from `_spbase`

- #23140: TST: Fix missing exceptions

- #23143: TST: Run pytest-run-parallel on `xp` tests

- #23149: TST: ndimage.vectorized_filter: add missing assertion to test

- #23151: CI: use 4 cores on GitHub Actions

- #23152: TST: io: reduce peak memory usage 9x

- #23153: TST: optimize: cap pytest-run-parallel memory usage

- #23173: ENH/DOC: signal.hilbert: Refactor to avoid extra scaling array…

- #23175: MAINT: Bump array-api-compat; speed up `array-namespace`

- #23176: BUG: `spin bench` ignores `--quick` parameter

- #23181: DOC: spatial: Rigid Transformation docs cleanup

- #23190: BUG/BENCH: remove unconditional `--quick` from `spin bench`…

- #23193: ENH: spatial: optimize performance of `RigidTransform`

- #23194: MAINT: Improve error type for RigidTransform.from_rotation

- #23198: ENH: spatial.transform.Rotation: refactor into pure Python class…

- #23201: DOC : removes outdated notes from the `medfilt` function

- #23202: DEP: spatial: raise error for complex input to cosine and correlation

- #23205: TST: stats.ttest_ind: remove test of deprecated/removed `permutations`

- #23207: CI: always set Python in array API testing

- #23210: DEP: spatial.distance: remove kulczynski1 and sokalmichener metrics

- #23212: DEP: signal: remove support for object arrays and longdoubles…

- #23213: MAINT: forward port 1.16.0 relnotes

- #23218: ENH: sparse: Add COO indexing for 1d, 2d, and nD

- #23223: MAINT: port `_test_fortran.f` to Python functions in `test_fortran.py`

- #23224: MAINT: _lib: remove old/unneeded code

- #23232: DOC: Fix typo in 1.12.0-notes.rst

- #23233: ENH: Implement support for `bc_type="periodic"` in `make_splrep`…

- #23234: TYP: generic `interpolate` types

- #23243: DEP: special: remove deprecated functions

- #23244: TYP: generic `optimize` types

- #23247: ENH/DOC: signal.hilbert2: Refactor to avoid extra scaling array…

- #23249: ENH: spatial.transform.Rotation: add array API backend

- #23253: BUG: interpolate.RegularGridInterpolator: fix linear interp….

- #23254: DOC: special: LaTeX cleanup

- #23255: MAINT: `spatial._plotutils`: remove matplotlib 1 code

- #23256: MAINT: remove `_lib._threadsafety`

- #23257: DOC: add orphaned modules to toctree

- #23258: MAINT: `sparse` testing without `decorator`

- #23259: ENH: stats: `Logistic` distribution

- #23260: MAINT: Remove `_lib.decorator`

- #23262: TST: sparse.linalg: improve coverage for `funm_multiply_krylov`

- #23264: TST: `test_axis_nan_policy`: skip on unexpected exceptions

- #23265: TST: signal: add test for `zpk2tf` with multi-dimensional arrays

- #23267: MAINT: sparse: move `_validate_indices` and `_asindices`…

- #23271: DOC: interpolate.make_interp_spline: fix minor formatting typos…

- #23273: DOC: interpolate.make_splprep: fix dimensions ordering

- #23274: MAINT:sparse.linalg: ARPACK to Arnaud rename and project structure…

- #23275: TST: migrate away from suppress_warnings and assert_warns

- #23286: TST: signal: clean-up tests post array api conversion

- #23287: MAINT: differentiate: add `xp_capabilities`

- #23288: MAINT: optimize: mark functions with `xp_capabilities`

- #23289: DOC: Add link to Golub and Van Loan’s book “Matrix Computations”

- #23290: TST: differentiate: use correct `xp_capabilities` for `jacobian`

- #23291: BENCH: sparse: parameterize benchmark with sparse arrays and…

- #23294: TST: better thread-unsafe markers and re-enable pytest-run-parallel…

- #23298: BUG: spatial.transform.Rotation.from_quat: fix dtype inference…

- #23300: DOC: development_workflow: fix SciPy’s commit guideline link

- #23304: TST: optimize: Speed up `test__basinhopping`

- #23305: TST: linalg: make `test_expm_multiply` friendly to pytest-run-parallel

- #23306: TST: free-threading performance tweaks

- #23307: TST: free-threading: More local RNGs

- #23311: MAINT/TST: always use forkserver multiprocessing on POSIX

- #23313: BLD: support build warnings for flang/clang-cl on Windows

- #23317: BUG: sparse.linalg: fix arpack complex arrays on windows

- #23319: TST: io.wavfile: add test for `SeekEmulatingReader.seek`

- #23320: BUG:DOC: sparse.linalg: Fix more arnaud bugs and add C code documentation

- #23324: BUG: stats: avoid building docstrings if python is run with `-OO`

- #23325: DOC: interpolate/RBF: tweak the docstring example, tweak dimensions

- #23326: DEV: remove non-generated file from `.gitignore`

- #23327: DOC/BUG: Fix a few dynamically modified docstrings.

- #23331: TST: Read `@xp_capabilities` from `pytestmark`

- #23340: DEP/MAINT: sparse: change default dtype behavior of ‘diags_array’…

- #23341: BUG: signal: zpk2tf: support array-api-strict on multi-dim arrays

- #23343: DOC: Fix trivial typos

- #23346: DOC: correct dimensions of PPoly.c in docstring

- #23349: BENCH, TST: benchmarks without hypothesis

- #23350: BUG: linalg: fix `solve(..., assume_a='pos', lower=False)`

- #23354: DEV: Use `sys.executable` everywhere in spin lint

- #23357: ENH, MAINT: linalg: assume_a=”diagonal” for solve and inv

- #23359: DOC: Add example to `show_config()`

- #23360: DOC: io: add docstrings to warnings and errors

- #23362: MAINT: linalg.{inv, solve}: better error reporting for batched…

- #23366: DOC: Clarify that is_valid_dm doesn’t check triangle inequality

- #23368: TST: linalg: small tolerance bump for `test_orth_memory_efficiency`

- #23370: ENH: spatial: add ability to suppress gimbal lock warnings for…

- #23374: DOC: corrected the docstring of NearestNDInterpolator

- #23375: ENH: Add `NdBSpline.derivative` method

- #23381: MAINT: stats: Apply xp_capabilities decorator to all public functions

- #23388: DOC: fix array api support table

- #23389: MAINT: cluster.hierarchy: mark set_link_color_palette as out…

- #23392: MAINT: datasets: mark functions as out of scope for array api…

- #23393: DOC: remove manual array api support list

- #23394: DOC: stats.rv_continuous.ppf/isf: document convention

- #23399: ENH: add Accelerate ILP64 support and CI job

- #23401: DOC: forward port 1.16.1 relnotes

- #23404: DOC: special: fix output shape of `*_all` functions

- #23405: MAINT:BLD:_lib: Remove deprecated Python TLS fallback code from…

- #23406: DOC: stats.false_discovery_control: added note that input does…

- #23410: MAINT: integrate: add xp_capabilities to public functions

- #23415: MAINT: ndimage: add `xp_capabilities` to functions in public…

- #23416: DOC: Add complexity remark to scipy.stats.kendalltau

- #23420: MAINT: break import dependencies between special-linalg and linalg-sparse

- #23421: DX: don’t lint cython build output

- #23422: DOC: special: add example to ellipeinc and correct docstring…

- #23424: ENH: spatial: optimize performance of Rotation

- #23425: ENH: spatial.transform.RigidTransform: add array API backend

- #23426: ENH: spatial.geometric_slerp: allow for extrapolation

- #23427: DOC: stats.chatterjeexi: document how to handle ties in `x`

- #23432: DOC: interpolate.RBFInterpolator: fix typo

- #23434: CI: fix skip conditions in `linux_blas.yml` jobs

- #23439: DOC: special: Add some simple examples for loggamma.

- #23443: BUG: stats.qmc: Avoid infinite loop in sobol when requesting…

- #23453: MAINT: Support ruff 0.12

- #23454: ENH, MAINT: simpler calculate_areas()

- #23456: DOC: Update link to Jupyter Project Governance

- #23463: DOC: sparse.kronsum: add example

- #23465: BUG: sparse: nD sparse save_npz and load_npz

- #23466: DOC: Remove boilerplate text in a remark

- #23467: ENH: spatial.transform.Rotation: support broadcasting

- #23468: DOC: optimize.shgo: correct `minimize_every_iter` description

- #23470: DOC: Update a link about numba support

- #23473: DOC: special.hankel1: add example and remove old docstring copy

- #23476: DEP: signal.lombscargle: deprecate argument `precenter`

- #23479: DOC: Update outdated `lazy_xp_function` references

- #23483: ENH: signal.abcd_normalize: Refactor, improve docstr, and make…

- #23486: DOC: special: remove duplicated docstrings

- #23489: DOC: clarify nnls minimizes squared 2-norm (closes #22979)

- #23491: DOC: signal.detrend: clarify `overwrite_data` behaviour

- #23492: DOC: remove `help(integrate)` output

- #23494: ENH: integrate.quad: shortcut if upper/lower bounds are equal

- #23496: DOC: special: added refs to Digital Library of Math. Functions

- #23497: ENH: integrate.romb: array-API support

- #23498: TST: additional tests if `integrate.quad` upper/lower bounds…

- #23499: ENH: update boost to 1.89

- #23501: ENH: integrate.cumulative_trapezoid: add array API support

- #23502: DOC: add header to array api support in docstring

- #23504: BUG: stats: trapezoid.fit does not converge

- #23507: ENH: add array api support for `linalg.orthogonal_procrustes`…

- #23511: DOC: interpolate: Ndbspline derivative methods list

- #23512: MAINT: remove unused cdflib code

- #23513: ENH: integrate.cumulative_simpson: add array api support

- #23518: ENH/BUG: signal.get_window: Refactor and allow ‘_periodic’ and…

- #23520: BUG: shgo mutating user supplied dictionaries

- #23521: BUG: shgo should accept args for fun/jac/hess

- #23523: MAINT: Use reshape instead of setting the shape attribute for…

- #23524: MAINT: Use reshape instead of setting the shape attribute for…

- #23526: MAINT: Use reshape instead of setting the shape attribute for…

- #23528: CI: swap to windows-2025 [wheel build]

- #23531: ENH:MAINT: sparse.linalg: Rewrite PROPACK in C

- #23534: ENH: sparse: add funcs `swapaxes`, `permute_dims`, `expand_dims`…

- #23535: BUG: special: Fix switched overflow and underflow error messages.

- #23536: DOC: Convert math symbols into Latex for format consistency

- #23537: ENH: Add two private ufuncs related to generalized harmonic numbers.

- #23538: MAINT: differential_evolution, polish takes a callable

- #23547: `linalg.solve`: move “sym”/”her” solvers to C

- #23557: BUG: fix levene and fligner test incorrect results with trimmed…

- #23558: DOC: `special.modfresnelm` docstring equation fix

- #23562: DOC: Fix duplicate and dead link in fligner docstring

- #23565: DOC/DEV: update editable install guidance for `spin install`

- #23566: MAINT: Use np.view instead of setting dtype

- #23569: ENH: interpolate.FloaterHormannInterpolator: add axis parameter

- #23572: DOC: Fix a few typos in API Reference

- #23573: MAINT: slsqp callback accepts intermediate_result

- #23574: ENH: linalg.fiedler: add native batch support and array api support

- #23575: MAINT: use boost master branch

- #23579: ENH: interpolate.AAA: add diagonal scaling to improve conditioning

- #23584: ENH: migrate `special.chdtriv` to boost

- #23585: MAINT: remove empty lines added to docstring by various decorators

- #23586: MAINT: bump array-api-extra to v0.9.0

- #23588: MAINT: Test spatial.transform.Rotation.__iter__ with jit

- #23590: ENH: linalg.block_diag: add array api support

- #23591: DOC: Remove typo

- #23592: MAINT: special: Replace disrecommended assert functions with…

- #23598: DOC: Fix format issues in API Reference

- #23599: DOC: stats.f_oneway: change versionadded to 1.16.0

- #23600: MAINT: fix more memory management and error handling issues in…

- #23601: DOC: forward port 1.16.2 relnotes

- #23606: MAINT: signal: simplify `cheb2ap` formulas

- #23607: BUG: signal.lfilter: More meaningful error messages for invalid…

- #23609: BUG: signal.deconvolve: More meaningful error messages for invalid…

- #23610: TYP: more generic `integrate` types

- #23614: TST: shim for NumPy warning changes

- #23616: BUG: ndimage: fix handling of memory allocation failures.

- #23618: BUG: sparse.csgraph.yen: Validate source and sink to avoid seg….

- #23620: MAINT: io: Improve `spmatrix` arg handling and description…

- #23621: DOC/BUG: signal.firwin: Improve documentation

- #23623: DOC: stats.levy_stable: improvements

- #23625: ENH: sparse: Add DOK update method and tests

- #23626: BUG:sparse: allow setting a singleton via a sparse container

- #23627: DOC: spatial: Rotation.random: mention distribution in docstring

- #23629: CI: use asv<0.6.5 to avoid problem with that release - fixes…

- #23630: DEV: drop `shallow` from submodules

- #23632: MAINT: spatial.transform.Rotation: `from_euler/from_davenport`…

- #23633: MAINT/TST: stats: loosen a test tolerance.

- #23636: TST: stats: test against `marray` backend again

- #23638: CI: adapt `gpu-ci.yml` to new Pixi workspace

- #23645: MAINT:optimize: Fix missing pointer dereference in MINPACK

- #23646: CI: fix issue with `spin` broken due to new `click` release

- #23647: CI: fix issue with spin broken due to new click release (follow-up)

- #23649: CI: use Pixi for `array_api.yml` and `lint.yml`

- #23650: DOC: Update a reference link in scipy.optimize.root

- #23653: MAINT: Fix `spatial.transform.RigidTransform` xp backend comments

- #23654: CI: use Pixi for `macos.yml`

- #23655: ENH: stats.truncpareto: allow negative exponent

- #23658: CI: Pixi: use `no-pin` strategy and refactor environments

- #23659: MAINT: signal: deduplicate `_swapaxes` helpers

- #23661: DOC: Improve formatting in continuous distributions description

- #23662: ENH: signal: Convert Savitzky-Golay filter to Array API

- #23666: DOC/DEV: Document `scipy.signal`‘s Array API caveats.

- #23667: ENH: integrate.qmc_quad: add array API support

- #23668: MAINT: signal: tighten the workaround for object arrays

- #23669: DOC: linalg: document batch support

- #23671: DOC: Update stable version switcher button styles in CSS

- #23674: MAINT: fix whitespace test

- #23675: ENH: spatial.transform.RigidTransform: support broadcasting

- #23676: BUG: Fixes #23644: sparse: csc_array.setdiag() makes indices…

- #23677: ENH: sparse: Add nD kron sparse construction

- #23679: MAINT/STY: `spatial._kdtree`: Fix type of default value of…

- #23680: MAINT: linalg.hankel: warn against changing behavior for multidimensional…

- #23683: MAINT: sparse: avoid recent free-threading `test_matrix_io.py`…

- #23688: MAINT: Remove ‘o’ (Greek omicron) from allowed symbols.

- #23690: DOC: spatial.transform.Rotation: update docs

- #23692: MAINT: stats.pmean: enforce finite `p` requirement

- #23693: ENH: stats.mode: add array API support

- #23694: DOC: Correct minor formatting issues in `scipy.sparse.linalg`

- #23695: DOC: spatial.transform.RigidTransform: update docs

- #23696: TST: special: avoid extremely slow edge cases in `mpmath` tests

- #23697: DEV: improve `spin build --help` w.r.t. debug builds

- #23699: DOC: stats.sigmaclip: results may not satisfy an intuitive property

- #23702: ENH: stats.lmoment: add array API support

- #23705: MAINT: stats.rv_discrete.ppf/isf: fix behavior with array args,…

- #23706: MAINT: stats.multivariate_t.logpdf/pdf: fix infinite DOF special…

- #23709: ENH: stats.alexandergovern: add array API support

- #23713: TST: macos-15-intel

- #23714: DOC: correct typo in `factorialk` parameters doc

- #23716: TST: stats.Binomial.logcdf: improves precision in tails

- #23717: ENH: Migrate special.pdtrik to boost

- #23718: ENH: spatial: Implement `RigidTransform.mean()`

- #23719: DOC: minor typo

- #23721: TST: test_as_euler_symmetric_axes tol bump

- #23724: DOC: Fixing scipy.linalg.polar `u` docstring.

- #23726: Fix typo (coefficent -> coefficient)

- #23727: MAINT: Consistent `spatial.[c]KDTree` method parameter defaults…

- #23729: BUG: spatial: Fix shape of Rotation mean when ndim > 1

- #23733: ENH: stats.logser: implement sf

- #23735: CI: silence pyparsing 3.3.0a1 deprecation warnings

- #23739: MAINT: stats: remove use of `np.random.seed`

- #23740: Fix typo in documentation where Riccati is misspelled as Ricatti

- #23741: DOC: signal.hilbert : example uses instantaneous frequency

- #23743: Cygwin interpolate test xfail

- #23744: ENH: stats.bootstrap: array API support

- #23745: DOC: stats.beta: document issues with 3- and 4- parameter MLE

- #23746: ENH: add Array API support to RBFInterpolator

- #23752: DOC: Move a paragraph from code to markdown in ndimage tutorial

- #23753: MAINT: interpolate: use xp-capabilities for `make\_` functions

- #23755: BUG: interpolate: fail gracefully if all weights are zero

- #23758: ENH: implement `gdtrix` and `gdtria` using xsf’s incomplete…

- #23759: ENH: interpolate: make NdBSpline and RGI Array API compatible

- #23764: DOC: special: consistent modified Bessel order and fix Hankel…

- #23765: TST: signal: isolate use of alternative backend only to function…

- #23767: BUG: signal: Fix `test_closest_STFT_dual_window_roundtrip`…

- #23769: DOC: `special._specfun.eulerb`: fix cython docstring

- #23770: MAINT: clean up some outdated CPython C API idioms

- #23771: BUG: odr: prevent segfault with explicit model and job=1 (#23763)

- #23772: ENH: stats.permutation_test: add array API support

- #23773: DOC/DX: Document use of `--` in spin ipython and spin python

- #23775: ENH: stats.power: add array API support

- #23779: ENH: stats.false_discovery_control: add array API support

- #23780: ENH: interpolate.RegularGridInterpolator: remove zeroes from…

- #23782: ENH: speedup quantile by not using stable sort

- #23788: TST: some more test tol bumps

- #23789: DOC: Improve formatting for the `scipy.optimize` module

- #23792: CI: use Pixi for a windows job

- #23795: MAINT: stats.iqr: prepare for array API translation

- #23796: TST: still more test tolerance bumps to accommodate Accelerate

- #23797: ENH: sparse: add `copy=False` arg to `astype()` where it…

- #23802: BENCH: add simple benchmark for scipy.stats.quantile

- #23803: ENH: stats.sigmaclip: add array API support

- #23804: DOC: Convert a math narrative into LaTeX format [docs only]

- #23807: ENH: stats.yeojohnson_llf: add array API support

- #23808: DOC: Remove two references to files that do nothing

- #23809: ENH: stats.median_abs_deviation: add array API support

- #23810: ENH: stats.brunnermunzel: add array API support

- #23812: DOC: fix typo

- #23816: DOC: `special.diric`: “Dirichlet function” -> “Dirichlet…

- #23819: ENH: stats.cramervonmises_2samp: vectorize statistic and asymptotic…

- #23822: ENH: stats.kruskal: vectorize implementation

- #23823: MAINT: interpolate: mark legacy functions out of scope for Array…

- #23824: DOC: `special.mathieu_odd_coef`: “even” -> “odd”

- #23828: ENH: spatial.transform.Rotation Add axis argument to `Rotation.mean`

- #23831: DOC: Correct a few typos and indentations

- #23834: ENH: stats.friedmanchisquare: simplify and vectorize implementation

- #23835: DOC: stats.quantile: clarify broadcasting behavior

- #23837: ENH: stats.mood: vectorize implementation

- #23838: TST: special: Update tests for some Mathieu functions.

- #23840: ENH: stats.levene: vectorize implementation

- #23841: BLD: bump wheel build image

- #23843: ENH: stats.ansari: vectorize implementation

- #23844: DEV: move Pixi workspace to repo root

- #23845: DOC: fix denominator in scipy.stats.kstatvar for var(k2)

- #23846: DOC: Remove an invalid URL in References

- #23847: ENH: stats.fligner: vectorize implementation

- #23849: ENH: stats.chatterjeexi: add array API support

- #23850: DOC: Improve documentation for the directed Hausdorff distance

- #23851: ENH: stats.spearmanrho: array API compatible substitute for `spearmanr`

- #23853: DOC: spin: Copy-edit help text for python and ipython commands.

- #23855: TST: stats.multiscale_graph_correlation: update reference values

- #23856: TST: sparse.linalg.tfqmr: avoid failure due to platform-dependent,…

- #23858: DOC: Make a DOI clickable

- #23861: DOC: Correct typos: an 1d -> a 1d

- #23862: ENH: stats.kruskal: add array API support

- #23863: ENH: special: add handling of double type for `_gen_harmonic`...

- #23865: MAINT/TST: stats.yeojohnson_llf/boxcox_llf: fix/test nan_policy/keepdims…

- #23866: DOC: Add reference paper to `scipy.spatial.KDTree`

- #23869: ENH: spatial.transform.Rotation: Add shape to `random` and…

- #23870: ENH: stats.mannwhitneyu: add array API support

- #23871: DOC: stats: Fix some math markup in the boxcox docstring.

- #23873: DOC: Update `scipy.stats.moyal` reference to new URL

- #23874: TST: spatial.transform.Rotation: fix `Rotation.random` tests

- #23875: ENH: spatial.transform.RigidTransform: implement `shape` for…

- #23876: DOC: Add DOI to reference paper in `fractional_matrix_power`…

- #23877: MAINT/CI: use `dtach` for modularity enforcement

- #23880: TST: interpolate.AAA: bump test tolerance

- #23881: ENH: stats.epps_singleton_2samp: vectorize implementation

- #23883: DOC: forward port 1.16.3 relnotes

- #23887: DOC: correct grammar issues in code comments

- #23889: ENH: stats.levene: add array API support

- #23890: DOC/TST: stats.quantile: document and test JAX support

- #23891: ENH: stats.iqr: add array API support

- #23893: MAINT: stats.epps_singleton_2samp: NaNs/Infs in input -> NaNs…

- #23895: BUG: linalg: fix MKL ILP64 symbol misnamings

- #23897: DOC: sparse: Add examples sections to three new function doc_strings

- #23898: ENH: stats.wilcoxon: add array API support

- #23899: ENH: stats.friedmanchisquare: add array API support

- #23903: TST: signal: mark failing tests to unblock CI

- #23904: BENCH: integrate: skip xslow benchmarks in CI

- #23905: CI: free up disk space in Intel oneAPI workflow

- #23911: TST: stats: avoid modifying shared self.u

- #23912: ENH: stats.fligner: add array API support

- #23914: ENH:integrate: Rewrite LSODA in C

- #23915: BUG: `special`: Fix convergence criterion in `eval_{legendre,`…

- #23917: DOC: special: Ellipsoidal harmonic functions aren’t Lame

- #23920: DEV: update `CODEOWNERS`

- #23921: BUG:signal: Ensure consistent dtypes for filter functions across…

- #23922: BUG: optimize: add py314 wrapper for `inspect.signature` of…

- #23928: ENH: stats.cramervonmises_2samp: add array API support

- #23929: ENH: stats.epps_singleton_2samp: add array API support

- #23930: ENH: stats._xp_searchsorted: private vectorized searchsorted

- #23933: ENH: spatial.transform: add `axis` argument to `RigidTransform.mean`

- #23934: DOC: spatial: RigidTransform docs tweaks

- #23936: BLD/CI: Add ASAN suppressions and CI job

- #23937: TST: `spatial.transform.RigidTransform`: Add ND concatenation…

- #23940: BUG: sparse.csgraph: remove rel import to fix Cython 3.2

- #23941: ENH: stats.quantile: add support for frequency weights

- #23942: DOC correct “shape” type for “scipy.sparse.random_array”

- #23948: DOC: stats.cumfreq: correct bin edges of plot

- #23952: MAINT: stats: silence the “unused function” build noise from…

- #23954: BENCH: interpolate: fix the RGI subclassing benchmark

- #23955: DOC: list classes in Array API tables

- #23956: MAINT: add `xp-capabilities` to `BSpline`

- #23963: ENH:integrate: Rewrite VODE and ZVODE in C

- #23964: ENH: stats.ks_1samp: vectorize implementation

- #23966: ENH: stats.cramervonmises: vectorize and add array API support

- #23970: ENH: stats.ks_1samp: add array API support

- #23971: ENH: stats.ansari: add array API support

- #23974: ENH: stats: Updated tabulated critical values for the normal…

- #23975: MAINT: signal: remove an obsolete workaround in detrend

- #23976: DOC: interpolate.interpn: add value comparison to example

- #23979: BUG: special: fix `comb(n, 0, repetition=True)` returning `0`…

- #23981: ENH: stats._xp_searchsorted: simplification, edge case handling,…

- #23982: DEV: update Pixi workspace name and description

- #23984: DEV: update CODEOWNERS

- #23986: MAINT: sync and update scipy-openblas to 0.3.30.0.8

- #23987: CI: reduce cache usage in GitHub Actions

- #23988: CI: add `environments` args to `setup-pixi` to log dependencies

- #23993: BLD/DEV: force openblas on Windows

- #23994: DOC/BLD: Clarify `yum` usage in RHEL

- #24003: MAINT: stats: re-enable the “unused function” warning in qmc…

- #24004: CI: use stable numpy release in free-threading job

- #24006: MAINT: removes a reference cycle in `optimize.differential_evolution`

- #24007: TST: optimize.least_squares: reduce process count and thread…

- #24008: BUG: fix interpreter crashes in special functions related to…

- #24012: TST: optimize.minimize: make trust-constr test thread safe by…

- #24013: BUG: Ensure C-contiguous inputs in `_fitpack_repro._validate_inputs`…

- #24016: CI: run cache-heavy OneAPI job on main every 2 days to optimize…

- #24017: BUG: special.assoc_legendre_p: update `xsf` to fix `z=-1,`…

- #24023: TST: integrate.qmc_quad: tolerance bump

- #24024: ENH/TST: signal: Add xp_capabilities for scipy.signal

- #24025: DOC: stats: add equations for Cramer von Mises functions

- #24028: MAINT:integrate: Initialize variable to silence compiler warnings

- #24029: ENH: stats.mood: add array API support

- #24030: ENH: stats.anderson: add `method` parameter

- #24031: ENH: stats.anderson_ksamp: add `variant` parameter

- #24033: DEP: deprecate `scipy.odr`

- #24036: CI: run Windows OneAPI job on main every 2 days to prefetch cache

- #24039: DOC/TST: fft: mark array api coverage with `xp_capabilities`

- #24040: DOC: add LFX Insights badge to README

- #24044: DOC: optimize.minimize: fix `subproblem_maxiter` docs for `trust-exact`…

- #24045: MAINT: signal: remove stray np.testing assertions

- #24047: TST: stats.t: add tolerance to moment test

- #24048: DEV: switch from `dtach` to `tach`

- #24049: MAINT: speed up `xp_promote` and `xp_result_type` for big…

- #24050: DEV: remove unused `build-mkl` task from workspace

- #24053: BUG: signal: fix a GetWindow test

- #24056: ENH: spatial: factor out `from_matrix` orthogonalization for…

- #24057: MAINT: Fix a deprecation warning coming from pytest-run-parallel

- #24059: CI: revert pre-release NumPy and no isolation from np2 release…

- #24061: MAINT: fix a typo in nnls documentation

- #24063: TST: linalg/solve: reenable and fix the “pos def” solve test

- #24067: DEV: add test-coverage and test-xslow tasks

- #24068: DEV: tach: use `respect_gitignore = "if_git_repo"`

- #24070: MAINT: interpolate/RBF: use fixed-width ints with pythran

- #24071: DEV: add `bench` task

- #24076: BUG: Return zero for out-of-range derivative orders in `NdBSpline`...

- #24077: MAINT: lock Pixi to fix CI

- #24080: DEP: signal.lombscargle: deprecate positional args, warn on `precenter=False`

- #24083: ENH: stats.f_oneway: add array API support

- #24085: DOC: linalg: edit the doc note: we no longer import numpy linalg…

- #24092: ENH: spatial.transform: Add `assume_valid` argument to `Rotation.from_matrix``…

- #24094: TST: fft: `allow_dask_compute` for all `uarray`-using funcs

- #24095: DOC: differential_evolution - fix typo in custom strategy example

- #24097: ENH: stats: added marginal function to `stats.multivariate_t`

- #24098: TST: linalg: unskip a test

- #24100: DOC: SciPy 1.17.0 release notes

- #24106: BUG: interpolate: Fix h[m] -> h[n] typo in _deBoor_D derivative…

- #24107: ENH: linalg/solve: move the tridiagonal solve slice iteration…

- #24111: BLD/DEV: fix windows build

- #24113: DOC: signal: mark some legacy functions as out of scope for array…

- #24118: MAINT: version pins/prep for 1.17.0rc1

- #24129: REL: set 1.17.0rc2 unreleased

- #24132: DOC: update mailmap

- #24133: BUG: integrate: fix no module named ‘scipy.integrate._lsoda’

- #24138: DOC: release notes: improve wording of sparse highlight

- #24139: API: `linalg.inv`: keyword-only `assume_a` and `lower`…

- #24140: API: `signal.savgol_coeffs`: keyword-only `xp` and `device`

- #24143: TYP: generic `signal.LinearTimeInvariant` type

- #24145: BUG: `sparse`: fix `coo_matrix.__setitem__` signature

- #24151: MAINT: linalg: raise for zero-size batch

- #24155: MAINT: bump `xsf` to fix `special.itj0y0` regression

- #24161: BUG:linalg.interpolative: Fix two edge cases for id_dist Cython…

- #24174: REV:integrate: Revert the stepsize change in LSODA

- #24207: MAINT: backports for SciPy 1.17.0rc2

- #24213: TST: fft: Add allow_dask_compute=True to more places in fft

- #24214: DOC: update 1.17.0 notes for RBFInterpolator

- #24218: BENCH, MAINT: NumPy 2.4.0 bench compat

- #24223: BLD: linalg: `link_language: 'fortran'` for `_fblas`

- #24239: MAINT: bump array-api-compat for JAX>=0.8.2 compat

- #24240: MAINT: bump array-api-compat to 1.13 tag

- #24250: BUG: stats._unuran: fix va_args memory corruption bug

- #24255: REL: set 1.17.0rc3 unreleased

- #24260: DOC: stats.anderson/anderson_ksamp: improve release notes

- #24284: CI: fix ILP64 jobs for build failures and unpinned scipy-openblas…

- #24304: DOC: clarify ILP64 support caveats in the release notes