Skip to main content
`Ctrl`+`K`

# SciPy 1.18.0 Release Notes

SciPy 1.18.0 is the culmination of 6 months of hard work. It contains many new features, numerous bug-fixes, improved test coverage and better documentation. There have been a number of deprecations and API changes in this release, which are documented below. All users are encouraged to upgrade to this release, as there are a large number of bug-fixes and optimizations. Before upgrading, we recommend that users check that their own code does not use deprecated SciPy functionality (to do so, run your code with `python -Wd` and check for `DeprecationWarning` s). Our development attention will now shift to bug-fix releases on the 1.18.x branch, and on adding new features on the main branch.

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

## Highlights of this release

- SciPy now supports three different build modes for BLAS and LAPACK LP64/ILP64 support, and machinery is provided for downstream `cython_lapack` consumers to gracefully handle LP64/ILP64 backend builds. ILP64 support has been substantially improved across the SciPy library.

- Remaining Fortran to C translations have been completed—an experimental Fortran-free build option is now available to developers for testing purposes. Developer feedback is welcome on Fortran-free builds.

- `scipy.signal.whittaker_henderson` now provides access to Whittaker-Henderson smoothing of a discrete signal.

- A large number of `scipy.stats` functions now support lazy arrays and JAX JIT. Array API support has been improved substantially in SciPy, with at least 21 functions gaining new support in this release. 16 `scipy.stats` functions have also gained support for MArray input.

## New features

### `scipy.fft` improvements

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

### `scipy.interpolate` improvements

- Users may now increase the QHull simplex assignment tolerance via the new `simplex_tolerance` argument to the `_call__` methods of `LinearNDInterpolator` and `CloughTocher2dInterpolator`. This can help users avoid holes in certain interpolation problems.

- The FITPACK Fortran code has been ported to C.

### `scipy.differentiate` improvements

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

### `scipy.linalg` improvements

- We now support three different build modes for BLAS and LAPACK: LP64-only, ILP64-only, and ILP64 for everyting except `cython_blas`/`cython_lapack`/ `linalg.blas`/`linalg.lapack` (support for Accelerate and MKL).

- Machinery is now provided for downstream `cython_lapack` users to gracefully handle LP64/ILP64 backend builds. Worked examples, including build system details, have been included in this release.

- An `overwrite_b` keyword argument was added to `eigvals`, for consistency with other similar `linalg` functions.

- `linalg.cholesky` now leverages symmetry properties for performance improvements, especially for real matrices. The batching loop of `cholesky` has now also been moved to a C implementation.

- `scipy.linalg.lu` and `scipy.linalg.det` have been rewritten in C++ with batching support in the compiled code.

- Added ILP64 support to `scipy.linalg.expm` and `scipy.linalg.sqrtm`.

- The batching loops of `scipy.linalg.qr`, `scipy.linalg.eig`, `scipy.linalg.lstsq`, and `scipy.linalg.svd` have been moved to C, providing a substantial speedup for batched input.

- The performance of `scipy.linalg.expm` has been improved.

- The performance for `scipy.linalg.solve` has improved for batched inputs.

- `scipy.linalg.bandwidth` now supports batching for greater than or equal to 2 dimensional input.

### `scipy.optimize` improvements

- The `trust_constr` method for `minimize` was adjusted so that if the `x` array would result in infeasible constraints, and those constraints were marked as `keep_feasible`, then the objective function is not called with that `x` array.

- The `COBYQA` method for `minimize` now supports being called concurrently by multiple threads. Previously, multiple threads calling this function would only run one at a time.

- `scipy.optimize.nnls`, and `minimize` methods `SLSQP` and `L-BFGS-B` now have support for ILP64 LAPACK, when available.

- Functions in `scipy.optimize.elementwise` now support passing `kwargs` to the callable function.

### `scipy.signal` improvements

- The new `whittaker_henderson` implements Whittaker-Henderson smoothing of a discrete signal. It offers different penalties to control the smoothness as well as automatic selection of the penalty strength via optimization of the restricted maximum likelihood (REML) criterion. It is a valuable alternative for the Savitzky-Golay filter `savgol_filter`. In econometrics, Whittaker-Henderson graduation of penalty order 2 is also known as Hodrick-Prescott filter.

- `lfilter_zi` was refactored for improved numerical stability and efficiency. It now raises a `ValueError` if parameter `a` has leading zeros, i.e., `a[0] == 0`, since `lfilter` and `filtfilt` do not support that as well. Furthermore, a `ValueError` instead of a `LinAlgError` is raised if the filter is unstable due to having a pole at `z = 1`.

### `scipy.sparse` improvements

- In `scipy.sparse.csgraph` the computation of strongly connected components for directed graphs is now 2x faster with better cache locality, using algorithmic improvements described in the recent survey by Tarjan and Zwick.

- Added ILP64 BLAS/LAPACK support to SuperLU and PROPACK extensions.

- All sparse array/matrix formats now support `matrix_transpose`/`.mT`.

- Support for n-dimensional linear operators has been added to `scipy.sparse.linalg.LinearOperator`, and `LinearOperator` now has a new `rdot` method.

- `scipy.sparse.linalg.minres` now supports complex hermitian matrices.

### `scipy.integrate` improvements

- ILP64 support was added for ODEPACK

- `scipy.integrate.tanhsinh` and `scipy.integrate.nsum` now support passing `kwargs` to the function to be integrated.

### `scipy.spatial` improvements

- 3D area calculations are now faster in `scipy.spatial.SphericalVoronoi`.

- N-dimensional input is now supported for `scipy.spatial.distance.minkowski`, `scipy.spatial.distance.euclidean`, and `scipy.spatial.distance.sqeuclidean`.

- It is now possible to return sparse arrays rather than matrices from `KDTree.sparse_distance_matrix`.

- It is now possible to compose `Rotation` and `RigidTransform` directly, by automatically promoting `Rotation` when the two are composed via a multiplication operator.

### `scipy.special` improvements

- The accuracy of the following functions was improved: `scipy.special.bdtrik`, `scipy.special.bdtrin`, `scipy.special.nbdtrik`, `scipy.special.nbdtrin`.

- The numerical behavior for `scipy.special.eval_jacobi` has been improved for several parameter combinations.

- The Bessel functions `scipy.special.j0` and `scipy.special.y0` have improved accuracy for large arguments.

### `scipy.stats` improvements

- The accuracy of `scipy.stats.pmean` with tiny, nonzero `p` has been improved.

- The performance of `scipy.stats.halfgennorm` has been improved.

- `zstatistic` has been added to the result object of `scipy.stats.mannwhitneyu`.

- A large number of `stats` functions now support lazy arrays and JAX JIT (see Python Array API support section below).

- Support for the `nan_policy` keyword argument has been added to: `scipy.stats.obrientransform`, `scipy.stats.boxcox`, `scipy.stats.boxcox_normmax`, `scipy.stats.yeojohnson`, `scipy.stats.yeojohnson_normmax`, `scipy.stats.sigmaclip`, and `scipy.stats.expectile`.

- `scipy.stats.ContinuousDistribution.lmoment` has been added for computing population L-moments.

- The new function `scipy.stats.estimated_cdf` has been added. It reproduces much of the functionality of `stats.mstats.plotting_positions`, `stats.percentileofscore`, `stats.ecdf.cdf`, and `stats.cumfreq`, but is also vectorized.

- `scipy.stats.ansari` accepts a new `method` argument.

- `scipy.stats.bws_test`, `scipy.stats.expectile`, and `scipy.stats.quantile_test` now accept an `axis` argument.

- `scipy.stats.expectile` and `scipy.stats.quantile_test` accept a new `keepdims` argument.

- `scipy.stats.binomtest` now supports batching of `k`, `n`, and `p`.

## Python Array API Standard Support

- Support has been added for CuPy delegation for: `interpolate.PPoly`, `interpolate.BPoly`, and `interpolate.BSpline`.

- CuPy support has been added for `scipy.stats.rankdata`.

- Array API support has been added for `method` and `trim` usage in `scipy.stats.ttest_ind`.

- Support for MArrays has been added to: `scipy.stats.cramervonmises`, `scipy.stats.ks_1samp`, `scipy.stats.ks_2samp`, `scipy.stats.mode`, `scipy.stats.rankdata`, `scipy.stats.kruskal`, `scipy.stats.brunnermunzel`, `scipy.stats.spearmanrho`, `scipy.stats.friedmanchisquare`, `scipy.stats.cramervonmises_2samp`, `scipy.stats.mannwhitneyu`, `scipy.stats.wilcoxon`, `scipy.stats.fligner`, `scipy.stats.linregress`, `scipy.stats.alexandergovern`, and `scipy.stats.levene`.

- Array API support has been added to: `scipy.stats.quantile_test`, `scipy.stats.kendalltau` (via NumPy conversion), `scipy.stats.kstest`, `scipy.sparse.linalg.LinearOperator`, `scipy.stats.cumfreq`, `scipy.stats.relfreq`, `scipy.stats.ks_2samp`, `scipy.stats.theilslopes`, `scipy.stats.siegelslopes`, `scipy.stats.obrientransform` (including marray), `scipy.stats.binomtest`, `scipy.integrate.fixed_quad`, `scipy.signal.square`, `scipy.stats.expectile`, `scipy.stats.shapiro`, `scipy.stats.pointbiserialr`, `scipy.stats.bws_test`, `scipy.stats.estimated_cdf` (new function), `scipy.stats.linregress`, `scipy.integrate.simpson`, and `scipy.signal.sawtooth`.

- The `torch` support for `scipy.signal.fftconvolve` now correctly handles the `float32` dtype.

- JAX JIT support has been added for: `scipy.stats.binomtest` (except for `method='two-sided'`), `scipy.stats.mannwhitneyu` (except for `method='auto'`), `scipy.stats.lmoment`, `scipy.stats.moment`, `scipy.stats.ansari` (related to new `method` argument), `scipy.stats.yeojohnson_llf`, `scipy.stats.epps_singleton_2samp`, `scipy.stats.wilcoxon` (except for `method='exact'` and `method='auto'`), `scipy.stats.rankdata` (via delegation), `scipy.signal.oaconvolve`, `scipy.signal.hilbert`, and `scipy.signal.hilbert2`.

## Deprecated features and future changes

- passing `lwork` parameter to `scipy.linalg.qr` has been deprecated. The functionality was rarely used; the function computes the optimal size of the work arrays automatically, therefore users should simply remove their uses of the `lwork` parameter.

- The sparse construction functions `kron`, `kronsum` and `block_diag` choose return type `sparray` or `spmatrix` depending on the type of the sparse input arrays. When no inputs are sparse, the output is chosen to be `spmatrix`. That has been deprecated. The return type when no inputs are sparse will be changing to `sparray`. You can control the output type by ensuring that at least one input array is sparse. If any are `sparray`, the output will be `sparray`. If all sparse inputs are `spmatrix`, the output will be `spmatrix`.

- A `FutureWarning` is now issued for calling `{r}matvec` on column vectors with `LinearOperator`. Identical behavior can be achieved (and extended to batch dimensions) via `{r}matmat`.

- `scipy.linalg` functions are now stricter–using non-LAPACK dtypes is deprecated. When the deprecations expire, this will effectively limit the dtypes allowed in linear algebra functions to: integers (upcast to float), and single/double precision float/complex dtypes.

- scipy.spatial.minkowsi_distance, scipy.spatial.minkowsi_distance_p, and `scipy.spatial.distance_matrix` have been deprecated in favor of other superior functions.

- `scipy.spatial.tsearch` has been deprecated because it duplicates functionality more conveniently provided within the `Delaunay` class proper.

- The following functions have been deprecated because they were deemed not practically useful: `scipy.interpolate.pade`, `scipy.interpolate.lagrange`, and `scipy.interpolate.approximate_taylor_polynomial`.

- Setting `spmatrix=True` for the `scipy.io` readers `mmio`, `FFM`, `hb`, and `matlab/_mio` is now deprecated, including when set as the default value.

- The unintentionally public `scipy.cluster.vq.py_vq` has been deprecated.

## Backwards incompatible changes

- The output of `scipy.stats.rankdata` is now always of a floating point dtype – the result dtype of the input and a Python `float`.

- The behavior of the `residuals` returned by `scipy.linalg.lstsq` has been changed. For `lapack_driver == "gelsy"` or the system being either underdetermined or square, empty residuals are still returned. For `lapack_driver == "gesld"/"gelss"` in combination with an overdetermined system a non-empty residual is always returned. However, in the case where a slice is not full column rank, the corresponding residual is set to `NaN`.

- The 2nd output object of `scipy.stats.contingency.crosstab` when kwarg `sparse=True` is now a sparse array holding the counts instead of a sparse matrix. This allows it to be nD, so can accept more than 2 sequences as inputs, but it is a different class. Most operations work the same for sparse arrays and matrixes with notable differences for matrix: `*` means matmul and always-2D. For more info see Migration from spmatrix to sparray.

- `scipy.stats.obrientransform` now returns a tuple of arrays instead of a single `ndarray`.

- `scipy.stats.multinomial` now returns NaNs when the category probability (`p`) rows/arrays do not sum to unity. This is an expiration of the deprecated behavior of adjusting the final element in the `p` array to compensate. Note that `multinomial.rvs` will now raise an error in such cases, since it has an integral return type.

- The `iprint` and `disp` parameters of `scipy.optimize.fmin_l_bfgs_b` have been removed, following the expiry of their deprecation.

- For `scipy.linalg.{sqrtm, logm, signm}`, `disp` (and `sqrtm` `blocksize`) parameters were removed (expired deprecations).

- The deprecated `atol` argument of `scipy.optimize.nnls` has been removed.

- For 2D input, the return type of `scipy.linalg.bandwidth` has changed from `(int, int)` to `(np.int64, np.int64)`.

- The second return type of `scipy.linalg.cho_factor` changed from `bool` to `NDArray[np.bool]`.

- The second return type of `scipy.interpolate.splint` changed from a 1D `float64` array to `None` when `full_output=True`.

- The types of the `k` and `n` attributes of the `BinomTestResult` object returned by `scipy.stats.binomtest` have changed from `int` to `np.float64`.

## Other changes

- The vendored `Boost.Math` was updated from `1.89.0` to `1.91.0`.

- SciPy now has a Pixi package definition, allowing developers to easily build SciPy from source inside Pixi workspaces.

- Developers may be interested in the private build option `_without-fortran`, which allows building SciPy from source in the absence of a Fortran compiler. This is an early prototype of the planned capability of a Fortran-free SciPy.

- The private `scipy.interpolate._regrid` function may be of experimental interest. It provides an interface for 2-D smoothing B-spline fitting via separable 1-D FITPACK kernels. It is under consideraton for public exposure in some form in the future.

## Authors

- Name (commits)

- h-vetinari (1)

- Joseph Adams (1) +

- Adrián Raso González (1) +

- Virgile Andreani (1)

- AshwathElang0 (1) +

- Mart-Mihkel Aun (1) +

- BarnikRB (2) +

- Richie Bendall (1) +

- J Berg (7) +

- Florian Bourgey (50)

- Jake Bowhay (99)

- Jonathan Brodrick (1) +

- Dietrich Brunn (36)

- Evgeni Burovski (200)

- Matthias Bussonnier (6)

- CJ Carey (9)

- Christine P. Chai (2)

- Lucas Colley (90)

- Dan (3) +

- devdanzin (2) +

- Martin Diehl (4)

- Sam Dolat (2) +

- dphipps-qnx (1) +

- DWesl (2)

- efrat99 (3) +

- fbrandt (1) +

- August Femtehjell (2) +

- Matthew H Flamm (1)

- Juan Flores (1) +

- foreverallama (1) +

- fumoboy007 (4) +

- John Patrick Gallagher (1) +

- Wei Bo Gao (1) +

- Christoph Gohlke (1)

- Nathan Goldbaum (20)

- Ludmila Golomozin (11) +

- Ralf Gommers (173)

- Mathieu Guay-Paquet (1) +

- Matt Haberland (147)

- Joren Hammudoglu (30)

- Jacob Hass (4)

- Maya Horii (1) +

- Guido Imperiale (1)

- Jan Möseritz-Schmidt (2)

- Leo Ji (4) +

- JOD (2) +

- Aditya Kamath (2) +

- Mukunda Rao Katta (1) +

- Robert Kern (1)

- Ria Khatoniar (1) +

- Matthias Koeppe (1)

- krishneetRAJ (1) +

- Iason Krommydas (1) +

- Eric Larson (1)

- Basil Liekens (31) +

- lnzwz (2) +

- Christian Lorentzen (15)

- Alex Lubbock (1) +

- Echedey Luis (2) +

- Lunyxis (1) +

- Zhang Maiyun (1) +

- Diego Medina Medina (1) +

- Elle Musoke (11) +

- Andrew Nelson (103)

- Nick ODell (29)

- Dimitri Papadopoulos Orfanos (1)

- partev (1)

- Matti Picus (7)

- Ilhan Polat (190)

- Pradyot Ranjan (2) +

- Adrian Raso (3)

- Aditya Rawat (1) +

- Tyler Reddy (99)

- Martin Reinecke (1)

- Lucas Roberts (6)

- Pamphile Roy (1)

- Daniel Schmitz (26)

- Martin Schuck (4)

- Dan Schult (47)

- Scott Shambaugh (16)

- Sabaa Siddique (1) +

- Nicholas Smith (1) +

- Johannes F. Sommerfeldt (1) +

- SpookyYomo (2) +

- Albert Steppi (80)

- Charalampos Stratakis (16) +

- Taylor (1) +

- thecaptain789 (1) +

- Adam Turner (1)

- Jacob Vanderplas (1)

- Christian Veenhuis (2)

- Sebastiano Vigna (1)

- Rivka Walles (14) +

- Warren Weckesser (11)

- Soeren Wolfers (1) +

- wongaokay (1) +

- Xuefeng Xu (1)

- Aniket Singh Yadav (2) +

- yaochengchen (2) +

- Fadi Younes (2) +

- Isaiah Zimmerman (1) +

- Simon Zwieback (1) +

- ਗਗਨਦੀਪ ਸਿੰਘ (Gagandeep Singh) (19)

  > A total of 103 people contributed to this release. People with a “+” by their names contributed a patch for the first time. This list of names is automatically generated, and may not be fully complete.

## Issues closed for 1.18.0

- #8444: ENH: sparse.linalg.LinearOperator: allow correct `matmat` when…

- #8669: BUG/ENH: stats nan-policy with elementswise function

- #11298: Default acceptance Parameter probably wrong in dual annealing

- #11713: eval_gegenbauer inconsistently supporting limit evaluation

- #13125: signal.step function behaves differently when system parameters…

- #16200: BLD/DOC: Verify MKL works with Meson build, and document BLAS/LAPACK…

- #17154: BUG: binned_statistic_2d fails when non-finite values present…

- #17498: BLD: Remove use of `libnpymath` and `libnpyrandom`

- #18203: BUG: flang support ? or meson flang support? installing scipy…

- #18566: META: FORTRAN Code inventory

- #18869: REL: deploying to PyPI without download to local machine

- #18982: BUG: signal: `lsim` returns incorrect results when the state…

- #19085: BUG: problem building bits/timesize.h not found on Ubuntu 22.04

- #19629: BUG: linear system simulation yielding wrong results due to integer…

- #19889: BUG: stats.rankdata: dtype instability

- #20244: BUG: Incorrect variable assignment in optimize._trust_region_exact

- #20636: BUG: stats.levy_stable: incorrect logpdf values for beta == +-1

- #20720: BUG: ZeroDivision Error in peak_finding_utils.pyx

- #20902: BUG: special.lpmv(0,v,-1) returns incorrect value for non-integer…

- #21279: BUG: qhull incorrect tests if the point is inside convex hull

- #21285: BUG: integrate.complex_ode: does not accept function parameter

- #21456: DOC: `linalg.cho_{factor, solve}`: explain `overwrite_*`…

- #21889: RFC: 64-bit LAPACK and `cython_lapack`

- #21910: BUG: interpolate.griddata: NaNs inside convex hull (despite no…

- #22188: BUG: optimize.milp: segfault from HiGHS

- #22705: BUG: special.j0: incorrect for large x

- #22752: BUG: signal.minimum_phase: homomorphic mask error

- #22816: BUG: stats.spearmanr: incorrectly identifies arrays as constant

- #22831: BUG: Sparse Interpolator (LinearNDInterpolator and CloughTocher2DInterpolator) r…

- #22966: MAINT, CI: zizmor analysis of CI security

- #23142: BUG: sparse.csgraph.connected_components: unexpected results…

- #23318: ENH: Switching from `pocketfft` to `ducc0.fft`

- #23351: ENH: linalg: Follow-up tasks for ILP64 support

- #23407: BUG: stats.pmean: bad numerical behavior for small but finite…

- #23577: BUG: sparse.csgraph.reconstruct_path: segfault for `nan` `predecessors`

- #23582: `xp_capabilities` needs a proper documentation

- #23748: BUG: scipy.sparse.linalg.lsmr() uninitialised variable if maxiter=0…

- #23761: BUG: interpolate.RBFInterpolator: numerically unstable when two…

- #23768: BUG: sparse: cs{cr}_{array,matrix}’s `sum(axis=0|1)` doesn’t…

- #23814: ENH: sparse.linalg.minres: support complex hermitian matrices

- #23839: Wheels for next release

- #23868: BUG: stats: docstrings of several discrete distr. methods show…

- #23894: DOC: interpolate.make_interp_spline: tutorial for replicating…

- #23908: BLD: dropping manylinux2014 wheels

- #23931: BUG: stats.relfreq: relative frequencies do not sum to 1 when…

- #24002: BUG/TST: cluster: Occasional failure of a couple tests in `cluster`

- #24021: BUG: Legendre functions of the second kind in scipy.special are…

- #24026: BUG/DOC: Docstring rewriting in `xp_capabilities` can break…

- #24027: ENH: optimize: Allow concurrent use of COBYQA minimizer

- #24051: RFC: Should we have a ‘needs-release-note-decision’ tag?

- #24069: BUG: `scipy.cluster.vq.kmeans` returns a distortion value from…

- #24082: BUG: io.hb_write: crashes on sparse matrices with zero stored…

- #24084: BUG: interpolate: `RectBivariateSpline.partial_derivative`…

- #24093: DOC: Mistake in scipy.special.airy documentation

- #24099: BUG: specal: assoc_legendre_p incorrectly normalized at endpoints

- #24154: MAINT: lint: fix failures following bump to Python 3.12

- #24164: BLD: uarray: uninitialized warning

- #24165: DOC: Mention that the Generalized Normal Distribution is also…

- #24171: BUG: sparse.linalg.spilu does not drop entries less than tolerance

- #24192: BUG: Segmentation fault for BSpline basis_element constructed…

- #24196: RFC: How should `xp_capabilities` work and be used for classes?

- #24203: BUG: optimize.shgo: identical branches in sampling_custom

- #24205: RFC: Should Dask support remain a priority?

- #24233: DOC: `find_peaks_cwt` docs reference `cwt`, which no longer…

- #24278: BUG: io.readsav: typo “IDENTIFICATON”

- #24280: DOC: The return value in the function bc(ya, yb) in integrate.solve_bvp

- #24281: BUG: numerical instability in interp1d linear interpolation

- #24289: DOC: signal: _calc_oa_lens describes in2_step as size of step…

- #24308: DOC: optimize: parameters not being added correctly for some…

- #24311: DOC: optimize.milp missing mip_rel_gap value

- #24320: DOC: optimize.elementwise: missing from “API definition” toc

- #24321: DOC: stats.distributions: missing hyperlink in “API definition”…

- #24395: BUG: scipy.signal.zpk2tf yield incorrect results with complex-valued…

- #24410: DEV: how to run `XPBenchmark`s?

- #24424: BUG: optimize.minimize: `trust-constr` minimization not enforcing…

- #24425: BUG: optimize.ridder: Wrong implementation Ridders algorithm

- #24445: BUG: sparse.linalg.spsolve: Segmentation Fault in matrix computation

- #24446: BUG: optimize: residuals may be uninitalized in trlib_eigen_inverse()

- #24477: DOC: stats: erratum in the formula of Negative Hypergeometric…

- #24505: RFC: make dtype handling uniform across `scipy.linalg`

- #24517: DOC: Rotation.apply(vectors) is not equivalent to Rotation.as_matrix()…

- #24538: BUG: linalg.svd: break regarding C/F-contiguity

- #24543: `TestDifferentialEvolutionSolver` failures in CI

- #24550: BUG: ndimage.map_coordinates: accuracy drops significantly for…

- #24551: BUG: Instability in exponnorm for very small K

- #24562: ENH: sparse.linalg.LinearOperator: empty batch support

- #24626: DOC: interpolate: PchipInterpolator doesn’t document what `extrapolate=None` m…

- #24662: BUG: stats.epps_singleton_2samp: `test_axis_nan_policy_full`…

- #24663: CI/DEV: Automatic PR labeller for labelling on close is not working

- #24670: TST: failures with latest CuPy release

- #24671: Extraneous warning message from solve_ivp

- #24673: DOC: outdated links in `io.netcdf_file` API ref. page

- #24675: BUG: LinearOperator: multiplication with a sparse matrix returns…

- #24729: TST: sparse.linalg.aslinearoperator: add `xp_capabilities`

- #24781: DOC: Inconsistent use of conda and mamba in Developer Documentation

- #24803: BENCH: switch timing from spmatrix to sparray

- #24828: BLD: meson warning for duplicate `include_directories`

- #24831: BUG: linalg TestDTypes.test_det[g] failing on 32-bit armhf

- #24838: BLD: mixed path separators in `scipy/__config__.py` on Windows

- #24847: BUG: scipy.stats.describe().variance is failing on boolean arrays

- #24861: BUG: optimize.nnls: double free crash on empty input

- #24933: BUG: scipy.integrate.ode with integrator=’vode’ uses transposed…

- #24937: BUG: ABI-breaking changes for `cython_special.bdtrik` & co…

- #24943: CI: linalg: dev deps failing due to NumPy deprecation of generic…

- #25056: DOC: `scipy.interpolate.interpn` with method=’linear’ accepts…

- #25066: DOC: replace broken UiO spline notes references in `scipy.interpolate`

- #25069: BUG: `scipy.sparse.linalg.svds` rng argument issue when using…

- #25076: BUG: `cython_lapack` signatures: `bint` variables become…

- #25086: BUG: optimize.direct: interpreter crash on empty Bounds

- #25106: BUG: `nct.cdf` return `nan`

- #25133: BUG: signal savgol_filter fails for large >20000 window_length…

- #25162: MAINT, TST: a few test failures against NumPy `2.4.5`

- #25180: CI: stats: `test_continuous.py::TestDistributions::test_funcs`…

- #25374: TST, CI: errors with `pytest` `9.1.0` release

- #25409: MAINT: mypy failing in CI

## Pull requests for 1.18.0

- #20272: BUG: optimize: fix incorrect variable assignment in `_trustregion_exact.py`

- #21548: ENH: integrate.simpson: add array API standard support

- #22580: ENH: signal: add Whittaker-Henderson smoothing

- #23070: MAINT: Convert `_fpumode` to multi-phase init (PEP 489)

- #23436: ENH: fft: switch from `pocketfft` to `ducc0.fft`

- #23446: DOC: special.entr: added example

- #23481: ENH:io.matlab: Processing of mxOPAQUE_CLASS type during loadmat…

- #23554: BUG: signal: Control output dtypes in `abcd_normalize` by adding…

- #23631: DOC: ndimage: fix example of ‘wrap’ mode for interpolation functions

- #23737: ENH: Allow users to increase the QHull simplex assignment tolerance

- #23751: MAINT: stats.binned_statistic: consistently raise for NaNs in…

- #23766: ENH: stats.ContinuousDistribution.lmoment: add population L-moments

- #23793: ENH: stats.ks_2samp: vectorize statistic implementation

- #23798: ENH: stats.linregress: vectorize implementation and add array…

- #23830: ENH: stats.theilslopes: vectorize implementation

- #23836: ENH/DEP: sparse.linalg.LinearOperator: n-D batch support

- #23900: ENH: sparse.linalg.minres: support for complex hermitian matrices

- #23919: ENH: linalg/SVD: move the batching loop to C

- #23935: DOC: special.sh_legendre: add Examples section

- #23949: ENH: stats.estimated_cdf: array API function for `plotting_positions`...

- #23951: DOC: interpolate: add tutorial on how to fill an image from its…

- #23959: ENH: stats.bws_test: vectorize and add array API support

- #23962: ENH: interpolate: Python bivariate spline fitter `_regrid`

- #23968: ENH: stats.pointbiserialr: add array API support

- #23969: TST: sparse.linalg.LinearOperator: add interface dot-tests

- #24018: ENH: stats.binomtest: vectorize implementation

- #24020: ENH: stats.shapiro: implement in Python array API

- #24022: ENH:interpolate: Rewrite FITPACK in C

- #24060: DEP/MAINT: cluster: deprecate `vq.py_vq` and tidy public API

- #24079: ENH: migrate `special.bdtrin` to boost

- #24081: DEV: auto apply `needs-release-note-decision` label to ENH/DEP…

- #24086: DOC: Improve the formatting of references in `scipy.stats`

- #24091: MAINT: remove old numpy warning filters from pytest.ini

- #24108: Fix endpoints normalization for assoc_legendre_p

- #24110: DOC: special: Fix Airy Documentation

- #24112: ENH: migrate special.bdtrik to boost

- #24114: REL: set version to 1.18.0.dev0

- #24119: MAINT: bump min numpy>=2.0.0 python>=3.12 for scipy 1.18

- #24120: Fix bug in scipy.sparse.linalg.lsmr() if maxiter=0 and show=True

- #24121: BUG: sparse: fix `sparse.linalg.norm` dtype handling

- #24123: ENH: linalg.solve: implement banded solver in cpp

- #24127: DOC: special.lqn: Improve documentation

- #24128: DOC/TST: signal.findfreqs: add tests and mark array api support

- #24130: DOC/TST: (nearly) finalize current use of `xp_capabilities`…

- #24134: MAINT: `_lib._array_api_no_0d`: remove spurious `*args`…

- #24135: CI: split up array API job

- #24136: DOC: special.lpmv: improve/fix documentation

- #24144: MAINT/BLD: Don’t undef `_BEGIN_EXTERN_C` and `_END_EXTERN_C`

- #24146: DOC: sparse: clarify DIA data format and alignment

- #24147: TST: linalg: test shapes for solve-like functions

- #24149: TYP: `special`: update outdated `_test_internal` stubs

- #24153: DEV: add `scipy-stubs` to `test` env

- #24156: MAINT: fix lint

- #24157: ENH: sparse: implement `matrix_transpose` and `.mT`

- #24162: BUG: stats.spearmanr: warn for constant input robustly

- #24168: BUG/MAINT: special: Bump xsf to version 0.1.5

- #24169: DOC: stats.gennorm: mention AKAs in documentation

- #24170: TYP: fix some typing issues in `_lib._array_api.xp_vector_norm`

- #24173: MAINT: NumPy 2.x cleanups

- #24175: MAINT:optimize: Restructure the C code in optimize

- #24179: ENH: spatial: Automatically promote a Rotation when composing…

- #24180: MAINT: remove unneeded thread_unsafe markers for ode integrator…

- #24181: ENH: stats.expectile: vectorize implementation and add array…

- #24182: MAINT:interpolate: Correct the lwrk formula LSQSphereBivariateSpline

- #24183: MAINT: more cleanup related to old NumPy versions and some unused…

- #24184: DEV: use separate build-dir for system-libs env

- #24185: ENH:MAINT:linalg: Move matfuncs to /src, Remove Python loops…

- #24189: ENH: special.eval_jacobi() for n integer and alpha=-1 and beta=1

- #24194: MAINT: interpolate.NearestNDInterpolator: use `KDTree` instead…

- #24198: ENH: signal.lfilter_zi: refactor for efficiency and stability

- #24201: ENH: signal.square: add array api support

- #24202: BUG: ndimage: fix potential double-free in NI_InitFilterOffsets

- #24204: BUG: signal/_firfilter.cc: fix out-of-bounds read in pylab_convolve_2d

- #24206: BUG: optimize/__lbfgsb.c: fix pointer arithmetic bug in cauchy…

- #24209: BUG: optimize/tnc/tnc.c: fix uninitialized xoffset when scale…

- #24210: MAINT: improve sophistication of `approx_derivative` output…

- #24211: BUG: Remove redundant conditional in _shgo.sampling_custom

- #24219: BUG: sparse.linalg: Fix copy-paste error in get_OPinv_matvec

- #24220: BUG: optimize.direct: fix two memory leaks

- #24221: BUG: io.hb_write: fill in default length when indptr is empty

- #24226: DOC: fix typo and rendering issue in special.zetac

- #24229: Modified bspline basis_element to raise error for invalid number…

- #24230: BUG: cluster.vq: ensure `_kmeans` returns distortion corresponding…

- #24232: MAINT: signal: make abcd_normalize respect input dtype and remove…

- #24235: DOC: signal.find_peaks_cwt: remove reference to removed cwt

- #24238: ENH: integrate.fixed_quad: add array API support

- #24242: BLD: address deprecation warnings from Meson 1.10

- #24243: MAINT: stats.gmean/hmean/pmean: improve dtype handling for non-numpy…

- #24248: DOC: stats.rv_discrete: remove unsupported parameter ‘scale’…

- #24249: TST: stats.gstd: remove JAX xfail of test_ddof_equal_to_number_of_observations

- #24257: DOC: stats: fix indentation of lists

- #24258: MAINT: stats.mannwhitneyu: minor refactorings suggested in gh-23870

- #24259: DOC: improve code comments in `scipy/meson.build` for linking…

- #24262: TST: stats: skip tests involving complex input to special functions…

- #24263: ENH: linalg.eig: move the batching loop to C

- #24264: ENH: signal.sawtooth: add array api support

- #24265: MAINT: `PY_VERSION_HEX` cleanups

- #24266: DOC: signal.place_poles: fix xp_capabilites

- #24267: DOC/TST: add new workflow for `xp_capabilities` application…

- #24268: ENH: linalg.qr: move the batching loop to C

- #24270: MAINT:interpolate: Silence compiler; Initialize ‘acc’ in dfitpack.c/fpsurf

- #24271: MAINT/BLD: external source code in `subprojects`, install…

- #24274: MAINT:linalg: Remove dummy ?larf/?larfg parameters from wrappers

- #24279: BUG: io.readsav: fix for rectype `13`: `IDENTIFICATION`

- #24282: BUG: Fix interp1d numerical stability

- #24283: ENH: stats.siegelslopes: vectorize implementation

- #24286: DOC: clarify order of residuals returned by bc in solve_bvp

- #24287: BUG: stats.pmean: stabilize for small but finite p

- #24288: DOC: integrate: fix indentation of lists

- #24292: DOC: signal: fix _calc_oa_lens in2_step description

- #24294: DOC: `signal.place_poles`: fix docs for returned `gain_matrix`…

- #24295: DOC: remove block quotes from array api support note

- #24299: MAINT: _lib._tmpdirs: replace with stdlib functions

- #24300: MAINT: vendor `packaging.version` with a script, remove `_lib._pep440`

- #24303: DEV: add `smoke-docs` Pixi task

- #24309: DOC: fix incorrect block quotes

- #24310: BLD: linalg/special: install only pxd files, not other generated…

- #24312: DOC: optimize.milp: add missing mip_rel_gap default

- #24314: BUG: stats.levy_stable: fix PDF in Tails for `beta=+-1`

- #24315: ENH: stats.sigmaclip: add nan_policy

- #24316: MAINT: sparse: remove check for python version bellow min supported

- #24317: DOC/DEV: add a tool to run numpydoc lint/validation for public…

- #24324: DOC: optimize.elementwise: add to API definition TOC

- #24325: DOC: stats.distributions: remove text from API definition TOC

- #24327: DOC: stats: adjust rendering of sub-namespace TOCs

- #24328: DEV/CI: add `spin check` command, and add check for `xp`…

- #24329: MAINT: stats: add `nan_policy` to normalizing transforms

- #24331: DOC: `special`: minor `gdtr[c]` and `nbdtr[c]` equation…

- #24333: DEP: optimize.nnls: remove atol

- #24337: MAINT, DOC: forward port 1.17.0 release notes

- #24342: MAINT: update scipy-openblas to 0.3.31.22.0

- #24344: DOC: fix ordering of documentation sections

- #24347: DOC: integrate.nsum: correct documentation of `tolerances`…

- #24349: DOC: enable GL05 / convert tabs to spaces

- #24351: DOC: enable PR10

- #24353: DOC: ensure all public function docstrings have Returns section;…

- #24356: DOC: Remove non-existent ‘periodic’ parameter documentation from…

- #24357: DOC: `integrate.qmc_quad`: clarify parameter types for `a`…

- #24360: DOC: ensure return sections have description; enable RT03

- #24361: DOC: ensure summaries begin with capital letters; enforce SS02

- #24362: DOC: Add section to array api support dev docs on `check --xp-markers`

- #24363: DOC: Add note to array API dev docs about Dask deprioritization

- #24365: DOC: sparse: document format attribute

- #24368: BUG: fix freeing of uninitialized memory in error paths in ndimage

- #24369: DOC: make numpydoc lint work for methods

- #24376: DOC: FFT: Improve the DFT section in the user guide.

- #24381: ENH: stats.binomtest: add array API support

- #24387: MAINT:optimize: Multiphase initialization for extension modules

- #24388: MAINT:signal: Multiphase initialization for extension modules

- #24389: MAINT:ndimage: Multiphase initialization for extension modules

- #24390: MAINT:spatial: Multiphase initialization for _distance_wrap extension…

- #24391: MAINT:special: Multiphase initialization for extension modules

- #24392: MAINT:sparse: Multiphase initialization for extension modules

- #24393: ENH: stats.obrientransform: add array API (+MArray) support and…

- #24394: MAINT: optimize.quadratic_assignment: SPEC 7 follow-up

- #24400: TYP: generic `stats.CensoredData` type

- #24401: TYP: generic `stats.gaussian_kde` type

- #24405: ENH: stats: support lazy arrays, first pass

- #24409: BLD/CI: fix regression when building with global meson, add a…

- #24411: ENH: stats.rankdata: delegate to JAX

- #24414: CI, MAINT: few 3.11/pixi cleaups

- #24415: DOC: ndimage.generic_filter1d: add example

- #24416: DEV/BENCH: Pixi tasks for array backend benchmarks

- #24420: MAINT: stats.rankdata: consistently return floating point dtype

- #24421: ENH: stats.wilcoxon: enable JIT

- #24422: ENH: stats.epps_singleton_2samp: enable JIT

- #24428: BUG: `signal._peak_finding._identify_ridge_lines` correct sorting…

- #24429: MAINT: migrate `special.nbdtrin` to boost

- #24430: ENH: stats.yeojohnson_llf: enable JIT

- #24434: MAINT: linalg: readability refactor inv/solve

- #24435: DOC: constraints, outline what keep_feasible really means

- #24441: DOC: spatial.KDTree.sparse_distance_matrix: add descriptions…

- #24443: ENH: stats.theilslopes/siegelslopes: add array API support

- #24449: MAINT: update Pixi for `scipy-openblas==0.3.31.22.0`

- #24451: DOC: interpolate/tutorial: replace interp1d with a DIY left/right…

- #24452: ENH: stats.ks_2samp: add array API support

- #24455: BUG: optimize: validate itmax in trlib_eigen_inverse

- #24456: BUG: sparse.linalg.spsolve: avoid segfault when spsolve fails…

- #24460: ENH: stats.cumfreq/relfreq: add array API support

- #24461: DOC: clarify spilu drop_tol behavior with respect to fill-in

- #24462: BUG: optimize.ridder: avoid underflow when fa is small

- #24464: ENH: stats.mannwhitneyu: add zstatistic to result object; declare…

- #24465: DOC/DEV: update `vendored-code` page

- #24467: ENH: stats.ansari: add method argument; enable JIT

- #24469: DOC: remove outdated cdflib references in `gdtrix` and `gdtria`…

- #24470: DOC: ensure short summary ends with a full stop and enable SS03…

- #24471: MAINT: fix import

- #24472: DOC: linalg: discuss batching, add examples, tutorial links

- #24473: DOC: add missing parameter descriptions and enable PR07 rule

- #24475: ENH: stats.moment: simplify implementation; enable JIT

- #24476: MAINT: linalg: vectorize pinv for batched inputs

- #24478: DOC: fix ordering of parameters and enable PR03 check

- #24479: ENH: stats.lmoment: enable JIT

- #24480: DOC: stats.nhypergeom: fix erratum in distribution support

- #24481: ENH: stats.kstest: add array API support

- #24482: BLD: add scipy-doctest dependency

- #24483: DOC: enable PR06 and standardise description of built in types

- #24487: DOC: add missing types and enable PR04 rule

- #24490: ENH: stats: another batch of `marray` support

- #24493: MAINT: stats: remove UNURAN wrapper reference cycles

- #24494: BLD: remove use of `xsimd_dep` to deal with unvendored xsimd…

- #24496: BUG:sparse: make `sum` apply `dtype` before accumulation

- #24498: DOC: parameters not working for BroydenFirst and KrylovJacobian

- #24500: ENH: stats.mannwhitneyu: enable JIT

- #24501: ENH: stats.binomtest: enable JIT

- #24503: MAINT: subprojects/cobyqa: use upstream Meson project

- #24506: ENH: stats: add MArray support to `rankdata` and several dependent…

- #24514: DOC: add user guide page on Security

- #24516: DOC: Correct many a/an usage mistakes

- #24518: DOC: spatial.transform.Rotation.apply: fix formula

- #24535: ENH: special: use `lazy_apply` when falling back to NumPy in…

- #24536: CI: stop uploading wheels, redesign matrix, test on PRs

- #24539: DOC: correct typo ‘occured’ to ‘occurred’

- #24540: MAINT: tidy up `get_submodule_paths`

- #24544: DOC: Fix typos for scipy.special.ndtri

- #24545: DOC: stats.order_statistic: fix typos

- #24548: CI: skip circle on `[skip ci]`

- #24549: TST: optimize: seeding of `TestDifferentialEvolution`

- #24557: BUG: special: get JAX delegation under the JIT to work with mixed…

- #24559: TST: sparse.linalg.LinearOperator: add tests

- #24570: DOC: io: remove redundant @docfiller decorator usage

- #24571: MAINT: sparse.dok_array/matrix.pop: restore signature

- #24575: MAINT: remove scipy/optimize/tnc/moduleTNC.c.old

- #24577: DOC: fixed some typo

- #24581: DOC: update security vulnerability report link in README

- #24583: DOC: add AI policy

- #24591: MAINT: optimize: minpack: use `bool` types Python-side

- #24604: TST: cluster: fix flakiness in kmeans2 tests by using fixed RNG

- #24608: BUG: Split edge_offsets/data_offsets error checks in NI_GeometricTransform

- #24609: STY: stats.UnivariateDistribution: remove unhelpful/outdated…

- #24610: MAINT: stats.make_distribution: fix some issues with `rv_generic`...

- #24615: BUG: ndimage: fix aliasing in _init_causal_reflect for small…

- #24616: STY: stats.UnivariateDistribution: more comment adjustments

- #24617: DOC: stats.UnivariateDistribution.sample: update documentation…

- #24618: MAINT: stats._logexpxmexpy: simplify implementation

- #24620: MAINT: stats.order_statistic: reinforce parameter integrality

- #24622: TST: sparse.linalg.LinearOperator: prepare `test_interface`…

- #24623: ENH: integrate.tanhsinh/nsum: add kwargs support

- #24624: ENH: optimize.elementwise: add kwargs support

- #24627: ENH: sparse.linalg.LinearOperator: array API standard support

- #24628: TST: sparse.linalg.LinearOperator: test empty batches

- #24632: MAINT: stats.UnivariateDistribution: don’t reset cache when transforming

- #24634: TST: datasets: make tests runnable without pooch

- #24635: BLD: add a build option to build without a Fortran compiler

- #24637: ENH: sparse: add `csr_array` `struct` for c++ calls to binop

- #24638: TST: fix tests for array-api-strict 2.5 / Array API 2025.12 spec

- #24639: ENH: differentiate.derivative: add kwargs support

- #24640: DOC: stats: update method of L-moments example

- #24641: MAINT: replace usage of isspmatrix throughout scipy

- #24642: ENH: spatial.KDTree: `output_type` variant for sparray

- #24643: DOC: Add tutorial for “extrapolate” keyword and standardize docstring

- #24644: DEP: io: deprecate default spmatrix kwargs values

- #24649: TST: sparse.csgraph: Add csgraph index array dtype tests for…

- #24651: DOC/DEV: fix typo in release docs

- #24652: ENH: stats.contingency.crosstab: support `sparray`

- #24653: DOC: forward port 1.17.1 release notes

- #24655: ENH: linalg: Use sparse array idioms in sketches docs and internal…

- #24656: ENH: integrate: support `sparray` in IVP and BVP

- #24658: ENH: signal.fftconvolve: array API support for pytorch

- #24659: MAINT: optimize: lbfgsb: remove one simple GOTO statement

- #24661: TST: special.erf: mark `test_erf_complex` as slow

- #24665: TST: stats.epps_singleton_2samp: bump axis_nan_policy test tolerance

- #24666: CI/DEV: fix retag on close action

- #24667: BUG: special.gegenbauer: fix endpoint behavior

- #24668: DEV: add `ipython-cpu` task and `sparse` dep to `array-api-cpu`…

- #24669: TST: sparse.linalg: prepare `test_iterative` for array API

- #24677: TST: stats: test MArray w/ torch, always test multidimensional…

- #24678: DOC: Update broken links in scipy.io.netcdf_file

- #24679: DOC: Improve and fix typos some scipy.special functions

- #24682: DEP: linalg: deprecate using linalg functions with LAPACK-incompatible…

- #24688: ENH: stats.mode: add MArray support

- #24690: ENH: stats.kendalltau: add array API support (via conversion…

- #24691: MAINT: optimize: lbfgs: replace `goto SAVEVARS` with `save_vars`…

- #24695: MAINT: special: migrate `nrdtrimn/nrdtrisd` to xsf

- #24697: ENH: stats.quantile_test: add array API support

- #24703: ENH: optimize: make `nnls`, `slsqp` and `lbfgsb` ILP64-ready

- #24706: BUG: sparse.csgraph.connected_components: fix BSR blocksize !=…

- #24709: MAINT: linalg/{svd, eig}: re-enable overwrite_a

- #24711: ENH: migrate `special.nbdtrik` to boost

- #24712: DEP: interpolate: deprecate “impractical” functions

- #24714: TST: sparse.linalg.LinearOperator: test lazy backends

- #24715: TST: linalg: bump test tolerance for openblas on x86 MacOS

- #24717: DOC: stats: document MArray support

- #24719: TST: bump to CuPy 14

- #24724: TST/DOC: Set `jax_default_matmul_precision` to `float32`…

- #24725: CI: update actions versions

- #24726: ENH: stats.ks_1samp/ks_2samp/kstest: add MArray support

- #24730: DEV/CI: Pixi task to update GHA hashes

- #24732: MAINT: syncs wheels.yml with that used by scipy/scipy-release

- #24735: CI: cache CuPy kernels in GPU job

- #24736: TST: sparse.linalg.aslinearoperator: add `xp_capabilities`

- #24739: TST: sparse.linalg.LinearOperator: unskip CuPy

- #24740: CI: CI/CD hardening

- #24743: MAINT: optimize: lbfgs: replace `goto` statements in cauchy

- #24745: TST: sparse.linalg: prepare `test_iterative` for batching

- #24746: MAINT: optimize: lbfgs: replace `goto` statements LINE1000

- #24749: BUG: signal.minimum_phase: correct calculation

- #24750: MAINT: linalg.solve: reenable ‘overwrite_b’ for solve(…, assume_a=”banded”)

- #24752: BUG: optimize: improve handling of memory errors in direct()

- #24753: BUG: Rotation.apply read-only memoryview support

- #24755: ENH: stats.cramervonmises: add MArray support

- #24756: MAINT: optimize/trlib: is actually ILP64-ready

- #24758: DOC:sparse.linalg.eigs{h}: version added admonition for `rng`…

- #24759: ENH: linalg.cholesky: move batching loop to C

- #24760: BUG: integrate: fix ComplexWarning in _sparse_num_jac with complex…

- #24761: BUG: `from_rotvec` read-only support

- #24764: TYP: generic `spatial.transform.Rotation` type

- #24765: DOC: fix typos in /tutorial/interpolate

- #24766: DOC: minor follow ups to the AI policy

- #24768: TYP: generic `spatial.transform.RigidTransform` type

- #24772: BUG: linalg: fix int overflow in complex Cholesky wrappers

- #24773: Fix formatting of error message in _minpack_py.py

- #24776: CI: cleanup ccache code

- #24778: BUG: spatial.transform.Rotation.approx_equal: fix bool return…

- #24780: ENH: spatial.distance: add support for nd inputs to minkowski/euclidean/seuclide…

- #24782: ENH: add `condition` to {skip,xfail}_xp_backends

- #24783: DOC/DEV: Change instances of mamba to conda

- #24784: BUG: stats: fix `ks_1samp` `method` argument validation

- #24785: MAINT: stats.UnivariateDistribution: fix typo in safe complement…

- #24788: MAINT: special: Remove npymath dep

- #24792: BUG: use `CBLAS_INT` in `save_vars` in lbfgsb.c for ILP64…

- #24793: MAINT/ENH: linalg: use `get_blas_lapack_funcs` not bare lapack…

- #24796: TST: signal: add tests for `general_gaussian` and `cosine`

- #24801: CI: rtools45

- #24804: ENH: interpolate: add CuPy delegation for BSpline

- #24807: CI: avoid win-arm64 failure, re-enable silently skipped meson-global…

- #24809: DOC: fix typos in tutorial/stats

- #24815: MAINT: update SuperLU to latest upstream commit, and reduce our…

- #24816: BUG: sparse.csgraph.reconstruct_path: raise for non-integral…

- #24817: BUG: signal: fix peak widths zero division error

- #24822: MAINT: special: Use two C++ function types from xsf.

- #24826: BUG: special: use CMPLX() instead of real + imag * I in `_complexstuff.h`

- #24829: ENH: linalg: add ILP64 support to the `_internal_matfuncs`…

- #24832: CI: fixes the broken clang-17 job on linux.yml

- #24833: BLD: consolidate include_directories

- #24835: BENCH: signal: better comparison between `fftconvolve` and…

- #24836: CI: fix ccache usage issues in linux.yml jobs

- #24837: MAINT: special: add robust CMPLX fallbacks for non-MSVC compilers

- #24839: ENH: add Pixi package definition

- #24841: ENH: sparse.linalg: add ILP64 support to `_propack`

- #24844: MAINT: sparse.linalg: add ILP64 build option to ARPACK

- #24845: MAINT: split ILP64 defines to a separate header

- #24846: DOC: fft.idst: add examples

- #24848: TST: stats: add array API test coverage

- #24850: TST: stats: move tests into classes

- #24851: MNT: sparse: update csgraph and linalg tests to avoid unneeded…

- #24852: ENH: stats.ttest_ind: array API support for `method` and `trim`

- #24853: TST: stats.ttest_rel: translate tests to array API

- #24855: BUG: fix scipy.stats.describe() is failing on boolean arrays

- #24856: TST: stats.binomtest: translate remaining tests to array API

- #24857: MAINT: optimize: lbfgs: replace `goto LINE999`

- #24858: ENH:MAINT:linalg: Rewrite lu and det in C++

- #24862: ENH/TST: stats: strengthen MArray tests

- #24863: MAINT: stats.make_distribution: simplify creating distribution…

- #24866: ENH: optimize.nnls: handle zero-dimensional edge case

- #24868: DEP: stats.multinomial: produce NaNs for `p.sum() != 1`

- #24870: MAINT: linalg.lstsq: reenable overwrite_x

- #24873: ENH: integrate: add ILP64 support to _odepack and _vode extensions

- #24874: MAINT: optimize: lbfgs: replace goto LINE888

- #24875: ENH: add ILP64 BLAS/LAPACK support to SuperLU

- #24877: TST: stats.iqr: avoid assert_equal w/ floating point arithmetic

- #24878: DOC: stats: additional `extra_notes`

- #24881: DOC: optimize.dual_annealing: mention origin of the default parameters

- #24883: MAINT: optimize: lbfgs: docstring of `task` and `task_msg`

- #24886: DEP: sparse: Deprecate default output type of input dependent…

- #24889: MAINT: linalg: rename `type_traits` and `numeric_limits`…

- #24891: BENCH: switch spmatrix to sparray in benchmarks that don’t compare…

- #24892: MAINT: linalg: remove mentions of cblas/clapack modules which…

- #24894: MAINT: stats: use xsf gufunc in pmf and cdf calculation for `poisson_binom`

- #24897: ENH: linalg: add HAS_LP64 config variable

- #24900: TST: linalg: skip a test which was failing on armhf in Debian…

- #24902: MAINT: _build_utils: remove vendored npy_cblas.h header

- #24904: DOC: integrate.{RK23, RK45}: Add examples

- #24906: MAINT: `__package__` → `__spec__.parent`

- #24909: BLD: ensure include paths for `blas_dep` and `lapack_dep`…

- #24911: DOC: special.roots_sh_legendre: add example

- #24912: BLD: fix issue with manual caching function in `_generate_pyx.py`…

- #24913: ENH: linalg.cholesky: leverage symmetry for performance

- #24917: TYP: fix type alias declarations

- #24918: TYP: remove unnecessary `from __future__ import annotations`…

- #24919: ENH: stats.rankdata: CuPy support via `repeat` workaround

- #24920: TYP: use modern generic standard collection types

- #24921: DOC: interpolate: small tweaks to the “extrapolate” section

- #24922: MAINT: bump `mypy` to `1.19.1`

- #24928: BUG: special: fix leaked `py_SpecialFunctionWarning` in `sf_error_v`

- #24929: BUG: use `CMPLX()`/`CMPLXF()` instead of `real + imag`…

- #24930: TYP: fix all (600+) mypy errors

- #24934: BUG: fix VODE Jacobian transposition in dvode_jacobian_thunk…

- #24938: MAINT: fix `cython_blas`/`cython_lapack` ABI breakage from…

- #24939: DOC: fix `Rotation.apply` docstring matrix formula

- #24940: DOC: keep_feasible explanation

- #24941: MAINT: namespace C++ linalg functions to avoid shadowing std…

- #24946: MAINT: linalg: fix test_dtypes for “m” deprecation

- #24947: MAINT: interpolate: Refactor BSpline class

- #24948: CI: place upper limit on ccache size

- #24951: BUG: sparse: large assignments can lead to ValueError in CSR/CSC

- #24958: DOC: add link to AI policy in CONTRIBUTING.rst

- #24961: DOC: separate sparse spmatrix docs to their own pages and add…

- #24962: CI: fix issue with pkgconf-pypi no longer finding openblas

- #24963: DOC: linalg: discuss/illustrate `overwrite_a` arguments

- #24964: CI: move c-cpp build mode to manual for codeql

- #24965: MAINT: linalg: refactor sanity checks

- #24967: ENH:MAINT:linalg: Move `bandwidth` function from Cython to…

- #24969: MAINT: linalg.qr: re-enable `overwrite_a`

- #24970: CI: respect commit message skips in Pixi Packages workflow

- #24977: ENH: BLD: refactor BLAS support, and introduce an ILP64-only…

- #24979: MAINT: fix abs() truncation warnings for fblas_64.pyf.src in…

- #24981: CI: win_arm64 removes LLVM install step

- #24983: DEV: avoid byte-compiling every .py file on a `spin build`…

- #24984: TST: special: fix extremely slow `TestSystematic.test_gegenbauer_int`

- #24988: MAINT: linalg: Fix AIX build break due to RAW Macro defined.

- #24993: DOC: signal: clarify 1-D input requirement for lp2lp, lp2hp,…

- #24996: ENH: sparse.csgraph.connected_components: state-of-the-art implementation…

- #24998: TST: spatial: skip `test_ckdtree_memuse` for ASan builds

- #24999: DEV: bump spin to v0.18 from v0.15

- #25001: ENH: linalg: add `overwrite_b` argument to `eigvals`

- #25002: CI: Enable xdist and kernel caching for JAX step of GPU job

- #25003: CI: add `zizmor`

- #25004: DOC: Remove duplicated ‘to’ in ‘wrt to’ and ‘w.r.t. to’

- #25005: DOC: fix typos in `_morphology.py`

- #25011: MAINT: optimize: lbfgs: replace goto LINE222

- #25012: CI: add MKL and scipy-openblas64 jobs with ILP64-only build mode

- #25013: DOC: optimize.curve_fit: raising `TypeError`

- #25017: DOC: Fix ‘accomodate’ typo in comments

- #25019: TST: bump relative tolerance for precision of estimated covariance

- #25024: DOC: special.hermitenorm: add example

- #25025: ENH: add a worked example of downstream usage of ILP64 `cython_lapack`

- #25028: DEP: spatial: deprecate tsearch

- #25030: DOC: optimize: add some references to line search algorithms

- #25031: DOC: improve documentation for special.erf and related functions

- #25032: DOC: constants: remove duplicate `grain`

- #25034: TST: integrate: increase tolerance for float32 in `test_result_dtype_promoted_c`…

- #25036: DOC: special: ensure `MultiUFunc` has `text_signature` and…

- #25042: DOC: special: Update URLs to use HTTPS

- #25043: CI: turn off deployment for circleci-redirector environment

- #25044: TYP/CI: Type checking with Pyrefly

- #25045: MAINT: special: avoid deprecated implicit datetime unit

- #25046: DOC: interpolate: fix imbalanced double backticks

- #25047: DOC: stats.binomtest: fix unbalanced backticks

- #25048: DOC: stats.yeojohnson_llf: fix invalid RST

- #25054: DOC: misc typos in syntax

- #25058: ENH: faster `SphericalVoronoi` 3D area calculations

- #25064: DOC: interpolate.interpn: Example with extrapolation added

- #25068: DOC: update old B-spline source

- #25072: ENH: interpolate.BPoly/PPoly set up CuPy delegation

- #25077: DOC: special: fix formulas and examples

- #25079: ENH: add a blas_bint typedef to cython_blas

- #25084: MAINT: migrate away from soon to be deprecated spatial functions

- #25087: MAINT: update Boost to 1.91

- #25088: BUG: optimize.direct: Prevent crash when running direct on empty…

- #25092: DOC: scipy.special: improve documentation for orthogonal polynomials

- #25093: MAINT: sparse: remove test of python2 -> python3 continuity of…

- #25094: ENH: stats: Implement _munp() for halfgennorm.

- #25098: DEP: spatial: deprecate `minkowsi_distance`,``minkowsi_distance_p``...

- #25099: MAINT: sparse.linalg: resave propack test dataset objects as…

- #25103: MAINT: sparse: COO.tocsc add comment about unused copy

- #25105: DOC: stats: add references to five distributions that are missing…

- #25107: DEV: bump to Pixi v0.68.0

- #25108: MAINT: restore `cython_special` ABI to match 1.17.0, add test…

- #25109: DOC: sparse: add doc-string warnings to match kron/kronsum/block_diag…

- #25114: MAINT: special: Remove tabs from boost_special_functions.h

- #25119: MAINT/TST: sparse: Require 64 GiB for test_large_assignments()

- #25120: DOC: update SciPy 1.18.0 release notes

- #25121: DOC: fix typo of “firwin” in iirdesign

- #25127: BUG: special: fix subtle ufunc loop bug by updating xsf

- #25129: BUG: sparse: Add defensive checks to sparsetools

- #25131: ENH: signal.oaconvolve: add JAX support

- #25134: BUG: signal: backwards compat in savgol/lstsq

- #25137: TST: add regression test for #22705

- #25140: BUG: special: make `sf_error_v` threadsafe

- #25145: DOC: don’t append the array api compatibility table to docstring…

- #25147: BLD: silence build warnings from uarray and ducc0

- #25148: BUG/ENH: interpolate: Reduce `_regrid` memory pressure in large…

- #25149: MAINT: special: bump xsf submodule to fix crashes and failures…

- #25155: ENH: signal.deconvolve: add JAX support

- #25156: ENH: signal.hilbert, signal.hilbert2: add JAX support

- #25159: ENH: signal.lp2hp: add JAX support

- #25160: ENH: signal.lp2bp, signal.lp2bs: add JAX support

- #25168: BUG: io: The ‘scipy_mmio’ threadpoolctl was not setting the version…

- #25169: MAINT: convert `interpolate._dierckx` and test modules to multi-phase…

- #25170: DOC: sparse: sparse docs changes related to spmatrix

- #25173: BUG/TST: io: Fix test_threadpoolctl in scipy/io/tests/test_mmio.py.

- #25174: DOC: sparse.linalg.LinearOperator: `xp` param

- #25179: DOC: unbalanced backticks in release notes an ND_regular_grid

- #25183: interpolate: skip `test_spline_large_2d` on Windows pending…

- #25189: BUG: interpolate/RBF: use a symmetric solver where available

- #25191: DOC: special: Improve documentation for `boxcox` functions

- #25193: DOC: stats: Note that halfgennorm is a special case of gengamma.

- #25194: interpolate: parametrize `test_spline_large_2d*` over `spl_apis`...

- #25197: MAINT: version pins/prep for 1.18.0rc1

- #25204: BUG: sparse.linalg.svds: fix `random_state` regression for…

- #25210: BUG: `UnivariateDistribution` mode calculation

- #25224: REL: set 1.18.0rc2 unreleased

- #25226: MAINT: `_lib._util`: remove trivial `np_[u]long` aliases

- #25227: BUG: linalg.fiedler_companion: fix output shape for length-1…

- #25228: BUG: linalg: Fix return shape of fiedler([])

- #25231: MAINT: fix some minor tolerance violations

- #25233: TYP: remove orphaned `linalg._matfuncs_expm` stubs

- #25237: MAINT: `stats._distn_infrastructure`: namespace pollution

- #25240: BUG: `stats`: `DunnettResult.__class_getitem__` dataclass…

- #25243: BUG: `stats`: fix new distribution `lmoment` method signatures

- #25275: BUG: interpolate: fix missing DECREF in curfit and percur

- #25281: BUG: cluster.vq: fix calling deprecated `py_vq`

- #25297: MAINT: backports/preparation for SciPy `1.18.0rc2`

- #25347: REL: set version to `1.18.0rc3` unreleased

- #25376: TST, MAINT: modernize spatial tests for pytest 10

- #25378: MAINT: Bump `pytest` to v9.1.0

- #25410: TYP: Fix mypy errors with `pytest==9.1.0`