# What changed in scipy

> 172 changes in scipy 1 from its official release notes, upgrade guides and advisories: 46 breaking, 20 deprecations, 67 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/pypi/scipy/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## scipy 1

### Breaking changes

- The minimum required GCC toolchain version has increased to 10.3.0. (1.18.1) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.1)
- SciPy 1.18.0 requires NumPy 2.0.0 or greater. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- SciPy 1.18.0 requires Python 3.12–3.14. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- bandwidth supports batching for inputs with at least two dimensions; for 2D input its return type changes from (int, int) to (np.int64, np.int64). (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The second return value's type changes from bool to NDArray[np.bool]. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Eigenvalue outputs are no longer guaranteed to be Fortran-ordered; ensure the desired ordering manually when array strides matter. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The disp parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Residual behavior changes: gelsy or underdetermined/square systems return empty residuals; gesld/gelss overdetermined systems return residuals, with NaN for slices not full column rank. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The disp parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- sqrtm adds ILP64 support; its disp parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The blocksize parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The disp parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The disp parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The iprint parameter has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The deprecated atol argument has been removed. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Improved numerical stability and efficiency; raises ValueError when a has leading zeros or when the filter is unstable due to a pole at z = 1. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Supports batching k, n, and p; the BinomTestResult k and n attribute types change from int to np.float64. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- With sparse=True, the second output is now a sparse array rather than a sparse matrix and can represent counts for more than two input sequences. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Returns NaNs when category-probability rows do not sum to unity; multinomial.rvs raises an error in those cases instead of adjusting the final probability. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Returns a tuple of arrays instead of a single ndarray. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Output is now always floating point, with a result dtype determined by the input and a Python float. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- SciPy 1.17.0 requires NumPy 1.26.4 or greater. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- SciPy 1.17.0 requires Python 3.11–3.14. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The mutable instance attribute is now a read-only property. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The mutable grid instance attribute is now a read-only property. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The mutable values instance attribute is now a read-only property. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- In SciPy 1.19.0, multidimensional inputs will be treated as a batch instead of being raveled. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The rand function has been removed; use the rng argument instead. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The seed function has been removed; use the rng argument instead. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed; use numpy.kron. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Complex inputs now raise an error. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Complex inputs now raise an error. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The distance function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The distance function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Spherical interpolation now extrapolates when t is outside [0, 1]. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Output shapes now follow broadcasting rules, and angle inputs must match the number of axes in the last dimension. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Output shapes now follow broadcasting rules, and angle inputs must strictly match the number of axes in the last dimension. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new variant parameter selects among three statistic variants, replacing the two-way midrank toggle. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has been removed; use numpy.unique or numpy.unique_counts instead. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The random_state and permutation arguments have been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The random_state and permutation arguments have been removed. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function gained axis, nan_policy, and keepdims parameters and now returns a NumPy scalar instead of a 0D array in the described case. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)

### Deprecations

- Calling rmatvec or matvec on column vectors now issues a FutureWarning; use rmatmat or matmat for equivalent behavior and batch dimensions. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The unintentionally public function has been deprecated. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated because it was deemed not practically useful. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated because it was deemed not practically useful. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated because it was deemed not practically useful. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Setting spmatrix=True is deprecated for mmio, FFM, hb, and matlab/_mio readers, including when it is the default. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Using non-LAPACK dtypes is deprecated; after the deprecations expire, linear algebra functions will allow integers (upcast to float) and single/double precision float/complex dtypes. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Passing lwork is deprecated; remove it because the function computes the optimal work-array size automatically. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- When no inputs are sparse, returning spmatrix is deprecated; the return type will change to sparray. Include a sparse input to control the output type. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- When no inputs are sparse, returning spmatrix is deprecated; the return type will change to sparray. Include a sparse input to control the output type. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- When no inputs are sparse, returning spmatrix is deprecated; the return type will change to sparray. Include a sparse input to control the output type. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated in favor of other superior functions. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated in favor of other superior functions. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated in favor of other superior functions. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Deprecated because Delaunay provides the functionality more conveniently. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The module is deprecated in 1.17.0 and will be removed in 1.19.0; users are directed to odrpack. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The precenter argument is deprecated and will be removed in SciPy 1.19.0; some arguments will also become keyword-only. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Tuple unpacking and the critical_values, significance_level, and fit_result attributes are deprecated; the 1.19.0 result will expose statistic and pvalue. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The presence of the critical_values return array is deprecated. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The midrank parameter is deprecated; use variant instead. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)

### New APIs and options

- Machinery is provided for downstream cython_lapack users to handle LP64/ILP64 backend builds. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- eigvals adds the overwrite_b keyword argument for consistency with similar linalg functions. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- derivative now supports passing kwargs to the function whose derivative is desired. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Supports passing kwargs to the function being integrated. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Supports passing kwargs to the function being integrated. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Functions now support passing kwargs to the callable function. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds Whittaker-Henderson smoothing for discrete signals, with smoothness penalties and automatic penalty-strength selection using the REML criterion. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- LinearOperator supports n-dimensional input and adds an rdot method. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds a method argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Now accepts an axis argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds computation of population L-moments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds a vectorized function reproducing much of the functionality of plotting_positions, percentileofscore, ecdf.cdf, and cumfreq. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds nan_policy, axis, and keepdims arguments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds nan_policy, axis, and keepdims arguments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds nan_policy, axis, and keepdims arguments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The result object adds zstatistic. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds axis and keepdims arguments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds axis and keepdims arguments. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Adds support for the nan_policy keyword argument. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- A new argument to the __call__ methods of LinearNDInterpolator and CloughTocher2dInterpolator lets users increase QHull simplex assignment tolerance to help avoid holes in some interpolation problems. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- All sparse array and matrix formats now support matrix_transpose and .mT. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- A private experimental build option allows building SciPy from source without a Fortran compiler. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- AAA has gained an axis parameter and improved numerical stability. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The interpolator supports multidimensional, batched inputs and has an axis parameter to select the interpolation axis. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new bc_type argument selects spline-fitting boundary conditions: not-a-knot (default) or periodic. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new bc_type argument selects spline-fitting boundary conditions: not-a-knot (default) or periodic. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new bc_type argument selects spline-fitting boundary conditions: not-a-knot (default) or periodic. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A new derivative method constructs a spline representing a partial derivative of the given spline. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- An array API-compatible backend improves support for GPU arrays. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new assume_a keyword bypasses matrix-structure detection when the structure is known. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The lower keyword selects the upper or lower triangle of symmetric inputs. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- SLSQP callbacks can opt into the new callback interface by accepting the intermediate_result keyword argument. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- trust-exact accepts a solver-specific subproblem_maxiter option to help convergence with ill-conditioned Hessians. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Window names can use _periodic and _symmetric suffixes to select window periodicity, overriding fftbin. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new axes keyword specifies the axes used to calculate the two-dimensional analytic signal. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new update method accepts a dict, dict.items()-like iterable, or another dok_array and validates index-tuple keys. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A sparse construction function for expanding dimensions has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function now accepts an rng parameter. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function now accepts an rng parameter. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A restarted Krylov method for evaluating y = f(tA) b has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A sparse construction function for permuting dimensions has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A sparse construction function for swapping axes has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- RigidTransform now supports N-D arrays and provides a shape property; its identity constructor accepts shape. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The mean function now accepts an axis argument. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Rotation now supports N-D arrays and provides a shape property; its identity constructor and random constructor also accept shape. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The constructor has gained an optional scalar_first parameter. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Rotation now provides a __setitem__ method. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The suppress_warnings parameter enables suppression of gimbal lock warnings. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The suppress_warnings parameter enables suppression of gimbal lock warnings. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The assume_valid argument enables performance improvements when callers can guarantee valid matrix inputs. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The mean function now accepts an axis argument. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The new method parameter computes p-values by interpolation or Monte Carlo simulation; it must be passed explicitly to add pvalue and avoid a warning about upcoming result-attribute removal. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A Logistic distribution for modeling logistic random variables has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The matrix t distribution has been added, with pdf, logpdf, and rvs methods. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has gained a keepdims parameter. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The distribution has gained a marginal method. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The distribution has gained a marginal method. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The method argument adds round_inward, round_outward, and round_neareast for trimming and winsorizing data. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- A weights argument specifies frequency weights. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- An array API-compatible substitute for spearmanr has been added. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function has gained nan_policy and keepdims parameters. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The Meson -Duse-ilp64=true option enables optional ILP64 BLAS and LAPACK support when building SciPy. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)

### Performance

- cholesky leverages symmetry properties for performance, especially for real matrices, and its batching loop is now implemented in C. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- det is rewritten in C++ with batching support in compiled code. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The batching loop has moved to C, providing a substantial speedup for batched input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- expm has improved performance and adds ILP64 support. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The batching loop has moved to C, providing a substantial speedup for batched input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- lu is rewritten in C++ with batching support in compiled code. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The batching loop has moved to C, providing a substantial speedup for batched input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Performance has improved for batched inputs. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The batching loop has moved to C, providing a substantial speedup for batched input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The function has improved performance and array API support. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The integration routine has been ported from Fortran77 to C. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The integration routine has been ported from Fortran77 to C. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The integration routine has been ported from Fortran77 to C. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- An empty integration interval now uses a fast path that returns 0. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The integration routine has been ported from Fortran77 to C. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The integration routine has been ported from Fortran77 to C. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Performance of cubic and quintic modes has improved. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Batched solve performance has improved for certain matrix structures. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)

### Behavior and default changes

- SciPy's internal FFT backend switches from pocketfft to ducc0.fft; cached plans over 1MB are no longer cached, mainly affecting huge 1D transforms of prime and near-prime sizes. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Can now return sparse arrays rather than sparse matrices. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The COBYQA method can now be called concurrently by multiple threads instead of serializing calls. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Rotation and RigidTransform can now be composed directly by multiplication, automatically promoting Rotation. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- minres now supports complex Hermitian matrices. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Now supports N-dimensional input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Now supports N-dimensional input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- Now supports N-dimensional input. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The Fortran77 library has been ported to C, enabling external random generators such as NumPy PRNGs for reproducible runs. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- COO arrays now support indexing, including slices, arrays, newaxis, and Ellipsis in 1D, 2D, and nD. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- On POSIX with Python 3.13 and older, workers=<an-int> calls now use the forkserver multiprocessing context unless the user configured a default method. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The function now natively supports batched inputs. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The routine detects matrix structure, selects a suitable inversion routine, and warns about ill-conditioned inputs; batched performance also improves. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The default dtype behavior is scheduled to change in SciPy 1.19.0. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The default dtype behavior is scheduled to change in SciPy 1.19.0. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- The sparse kron function now supports nD inputs. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
- Negative exponent shape parameters are now accepted, allowing truncpareto to model more general power laws. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)

### Tooling

- SciPy now has a Pixi package definition for building from source inside Pixi workspaces. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)

### Fixes and other changes

- Binaries are available on PyPI for Python 3.15. (1.18.1) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.1)
- With keep_feasible constraints, the objective is no longer called with an x array that would make the constraints infeasible. (1.18.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.18.0)
- The Fortran77 library has been ported to C with PRNG enhancements and other improvements. (1.17.0) — [release notes](https://github.com/scipy/scipy/releases/tag/v1.17.0)
