Skip to main content
`Ctrl`+`K`

# SciPy 1.15.0 Release Notes

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

This release requires Python 3.10-3.13 and NumPy 1.23.5 or greater.

## Highlights of this release

- Sparse arrays are now fully functional for 1-D and 2-D arrays. We recommend that all new code use sparse arrays instead of sparse matrices and that developers start to migrate their existing code from sparse matrix to sparse array: Migration from spmatrix to sparray. Both `sparse.linalg` and `sparse.csgraph` work with either sparse matrix or sparse array and work internally with sparse array.

- Sparse arrays now provide basic support for n-D arrays in the COO format including `add`, `subtract`, `reshape`, `transpose`, `matmul`, `dot`, `tensordot` and others. More functionality is coming in future releases.

- Preliminary support for free-threaded Python 3.13.

- New probability distribution features in `scipy.stats` can be used to improve the speed and accuracy of existing continuous distributions and perform new probability calculations.

- Several new features support vectorized calculations with Python Array API Standard compatible input (see “Array API Standard Support” below):

  - `scipy.differentiate` is a new top-level submodule for accurate estimation of derivatives of black box functions.

  - `scipy.optimize.elementwise` contains new functions for root-finding and minimization of univariate functions.

  - `scipy.integrate` offers new functions `cubature`, `tanhsinh`, and `nsum` for multivariate integration, univariate integration, and univariate series summation, respectively.

- `scipy.interpolate.AAA` adds the AAA algorithm for barycentric rational approximation of real or complex functions.

- `scipy.special` adds new functions offering improved Legendre function implementations with a more consistent interface.

## New features

### `scipy.differentiate` introduction

The new `scipy.differentiate` sub-package contains functions for accurate estimation of derivatives of black box functions.

- Use `scipy.differentiate.derivative` for first-order derivatives of scalar-in, scalar-out functions.

- Use `scipy.differentiate.jacobian` for first-order partial derivatives of vector-in, vector-out functions.

- Use `scipy.differentiate.hessian` for second-order partial derivatives of vector-in, scalar-out functions.

All functions use high-order finite difference rules with adaptive (real) step size. To facilitate batch computation, these functions are vectorized and support several Array API compatible array libraries in addition to NumPy (see “Array API Standard Support” below).

### `scipy.integrate` improvements

- The new `scipy.integrate.cubature` function supports multidimensional integration, and has support for approximating integrals with one or more sets of infinite limits.

- `scipy.integrate.tanhsinh` is now exposed for public use, allowing evaluation of a convergent integral using tanh-sinh quadrature.

- `scipy.integrate.nsum` evaluates finite and infinite series and their logarithms.

- `scipy.integrate.lebedev_rule` computes abscissae and weights for integration over the surface of a sphere.

- The `QUADPACK` Fortran77 package has been ported to C.

### `scipy.interpolate` improvements

- `scipy.interpolate.AAA` adds the AAA algorithm for barycentric rational approximation of real or complex functions.

- `scipy.interpolate.FloaterHormannInterpolator` adds barycentric rational interpolation.

- New functions `scipy.interpolate.make_splrep` and `scipy.interpolate.make_splprep` implement construction of smoothing splines. The algorithmic content is equivalent to FITPACK (`splrep` and `splprep` functions, and `*UnivariateSpline` classes) and the user API is consistent with `make_interp_spline`: these functions receive data arrays and return a `scipy.interpolate.BSpline` instance.

- New generator function `scipy.interpolate.generate_knots` implements the FITPACK strategy for selecting knots of a smoothing spline given the smoothness parameter, `s`. The function exposes the internal logic of knot selection that `splrep` and `*UnivariateSpline` was using.

### `scipy.linalg` improvements

- `scipy.linalg.interpolative` Fortran77 code has been ported to Cython.

- `scipy.linalg.solve` supports several new values for the `assume_a` argument, enabling faster computation for diagonal, tri-diagonal, banded, and triangular matrices. Also, when `assume_a` is left unspecified, the function now automatically detects and exploits diagonal, tri-diagonal, and triangular structures.

- `scipy.linalg` matrix creation functions (`scipy.linalg.circulant`, `scipy.linalg.companion`, `scipy.linalg.convolution_matrix`, `scipy.linalg.fiedler`, `scipy.linalg.fiedler_companion`, and `scipy.linalg.leslie`) now support batch matrix creation.

- `scipy.linalg.funm` is faster.

- `scipy.linalg.orthogonal_procrustes` now supports complex input.

- Wrappers for the following LAPACK routines have been added in `scipy.linalg.lapack`: `?lantr`, `?sytrs`, `?hetrs`, `?trcon`, and `?gtcon`.

- `scipy.linalg.expm` was rewritten in C.

- `scipy.linalg.null_space` now accepts the new arguments `overwrite_a`, `check_finite`, and `lapack_driver`.

- `id_dist` Fortran code was rewritten in Cython.

### `scipy.ndimage` improvements

- Several additional filtering functions now support an `axes` argument that specifies which axes of the input filtering is to be performed on. These include `correlate`, `convolve`, `generic_laplace`, `laplace`, `gaussian_laplace`, `derivative2`, `generic_gradient_magnitude`, `gaussian_gradient_magnitude` and `generic_filter`.

- The binary and grayscale morphology functions now support an `axes` argument that specifies which axes of the input filtering is to be performed on.

- `scipy.ndimage.rank_filter` time complexity has improved from `n` to `log(n)`.

### `scipy.optimize` improvements

- The vendored HiGHS library has been upgraded from `1.4.0` to `1.8.0`, bringing accuracy and performance improvements to solvers.

- The `MINPACK` Fortran77 package has been ported to C.

- The `L-BFGS-B` Fortran77 package has been ported to C.

- The new `scipy.optimize.elementwise` namespace includes functions `bracket_root`, `find_root`, `bracket_minimum`, and `find_minimum` for root-finding and minimization of univariate functions. To facilitate batch computation, these functions are vectorized and support several Array API compatible array libraries in addition to NumPy (see “Array API Standard Support” below). Compared to existing functions (e.g. `scipy.optimize.root_scalar` and `scipy.optimize.minimize_scalar`), these functions can offer speedups of over 100x when used with NumPy arrays, and even greater gains are possible with other Array API Standard compatible array libraries (e.g. CuPy).

- `scipy.optimize.differential_evolution` now supports more general use of `workers`, such as passing a map-like callable.

- `scipy.optimize.nnls` was rewritten in Cython.

- `HessianUpdateStrategy` now supports `__matmul__`.

### `scipy.signal` improvements

- Add functionality of complex-valued waveforms to `signal.chirp()`.

- `scipy.signal.lombscargle` has two new arguments, `weights` and `floating_mean`, enabling sample weighting and removal of an unknown y-offset independently for each frequency. Additionally, the `normalize` argument includes a new option to return the complex representation of the amplitude and phase.

- New function `scipy.signal.envelope` for computation of the envelope of a real or complex valued signal.

### `scipy.sparse` improvements

- A migration guide is now available for moving from sparse.matrix to sparse.array in your code/library.

- Sparse arrays now support indexing for 1-D and 2-D arrays. So, sparse arrays are now fully functional for 1-D and 2D.

- n-D sparse arrays in COO format can now be constructed, reshaped and used for basic arithmetic.

- New functions `sparse.linalg.is_sptriangular` and `sparse.linalg.spbandwidth` mimic the existing dense tools `linalg.is_triangular` and `linalg.bandwidth`.

- `sparse.linalg` and `sparse.csgraph` now work with sparse arrays. Be careful that your index arrays are 32-bit. We are working on 64bit support.

- The vendored `ARPACK` library has been upgraded to version `3.9.1`.

- COO, CSR, CSC and LIL formats now support the `axis` argument for `count_nonzero`.

- Sparse arrays and matrices may now raise errors when initialized with incompatible data types, such as `float16`.

- `min`, `max`, `argmin`, and `argmax` now support computation over nonzero elements only via the new `explicit` argument.

- New functions `get_index_dtype` and `safely_cast_index_arrays` are available to facilitate index array casting in `sparse`.

### `scipy.spatial` improvements

- `Rotation.concatenate` now accepts a bare `Rotation` object, and will return a copy of it.

### `scipy.special` improvements

- New functions offering improved Legendre function implementations with a more consistent interface. See respective docstrings for more information.

  - `scipy.special.legendre_p`, `scipy.special.legendre_p_all`

  - `scipy.special.assoc_legendre_p`, `scipy.special.assoc_legendre_p_all`

  - `scipy.special.sph_harm_y`, `scipy.special.sph_harm_y_all`

  - `scipy.special.sph_legendre_p`, `scipy.special.sph_legendre_p_all`,

- The factorial functions `special.{factorial,factorial2,factorialk}` now offer an extension to the complex domain by passing the kwarg `extend='complex'`. This is opt-in because it changes the values for negative inputs (which by default return 0), as well as for some integers (in the case of `factorial2` and `factorialk`; for more details, check the respective docstrings).

- `scipy.special.zeta` now defines the Riemann zeta function on the complex plane.

- `scipy.special.softplus` computes the softplus function

- The spherical Bessel functions (`scipy.special.spherical_jn`, `scipy.special.spherical_yn`, `scipy.special.spherical_in`, and `scipy.special.spherical_kn`) now support negative arguments with real dtype.

- `scipy.special.logsumexp` now preserves precision when one element of the sum has magnitude much bigger than the rest.

- The accuracy of several functions has been improved:

  - `scipy.special.ncfdtr`, `scipy.special.nctdtr`, and `scipy.special.gdtrib` have been improved throughout the domain.

  - `scipy.special.hyperu` is improved for the case of `b=1`, small `x`, and small `a`.

  - `scipy.special.logit` is improved near the argument `p=0.5`.

  - `scipy.special.rel_entr` is improved when `x/y` overflows, underflows, or is close to `1`.

- `scipy.special.ndtr` is now more efficient for `sqrt(2)/2 < |x| < 1`.

### `scipy.stats` improvements

- A new probability distribution infrastructure has been added for the implementation of univariate, continuous distributions. It has several speed, accuracy, memory, and interface advantages compared to the previous infrastructure. See Random Variable Transition Guide for a tutorial.

  - Use `scipy.stats.make_distribution` to treat an existing continuous distribution (e.g. `scipy.stats.norm`) with the new infrastructure. This can improve the speed and accuracy of existing distributions, especially those with methods not overridden with distribution-specific formulas.

  - `scipy.stats.Normal` and `scipy.stats.Uniform` are pre-defined classes to represent the normal and uniform distributions, respectively. Their interfaces may be faster and more convenient than those produced by `make_distribution`.

  - `scipy.stats.Mixture` can be used to represent mixture distributions.

- Instances of `scipy.stats.Normal`, `scipy.stats.Uniform`, and the classes returned by `scipy.stats.make_distribution` are supported by several new mathematical transformations.

  - `scipy.stats.truncate` for truncation of the support.

  - `scipy.stats.order_statistic` for the order statistics of a given number of IID random variables.

  - `scipy.stats.abs`, `scipy.stats.exp`, and `scipy.stats.log`. For example, `scipy.stats.abs(Normal())` is distributed according to the folded normal and `scipy.stats.exp(Normal())` is lognormally distributed.

- The new `scipy.stats.lmoment` calculates sample l-moments and l-moment ratios. Notably, these sample estimators are unbiased.

- `scipy.stats.chatterjeexi` computes the Xi correlation coefficient, which can detect nonlinear dependence. The function also performs a hypothesis test of independence between samples.

- `scipy.stats.wilcoxon` has improved method resolution logic for the default `method='auto'`. Other values of `method` provided by the user are now respected in all cases, and the method argument `approx` has been renamed to `asymptotic` for consistency with similar functions. (Use of `approx` is still allowed for backward compatibility.)

- There are several new probability distributions:

  - `scipy.stats.dpareto_lognorm` represents the double Pareto lognormal distribution.

  - `scipy.stats.landau` represents the Landau distribution.

  - `scipy.stats.normal_inverse_gamma` represents the normal-inverse-gamma distribution.

  - `scipy.stats.poisson_binom` represents the Poisson binomial distribution.

- Batch calculation with `scipy.stats.alexandergovern` and `scipy.stats.combine_pvalues` is faster.

- `scipy.stats.chisquare` added an argument `sum_check`. By default, the function raises an error when the sum of expected and obseved frequencies are not equal; setting `sum_check=False` disables this check to facilitate hypothesis tests other than Pearson’s chi-squared test.

- The accuracy of several distribution methods has been improved, including:

  - `scipy.stats.nct` method `pdf`

  - `scipy.stats.crystalball` method `sf`

  - `scipy.stats.geom` method `rvs`

  - `scipy.stats.cauchy` methods `logpdf`, `pdf`, `ppf` and `isf`

  - The `logcdf` and/or `logsf` methods of distributions that do not override the generic implementation of these methods, including `scipy.stats.beta`, `scipy.stats.betaprime`, `scipy.stats.cauchy`, `scipy.stats.chi`, `scipy.stats.chi2`, `scipy.stats.exponweib`, `scipy.stats.gamma`, `scipy.stats.gompertz`, `scipy.stats.halflogistic`, `scipy.stats.hypsecant`, `scipy.stats.invgamma`, `scipy.stats.laplace`, `scipy.stats.levy`, `scipy.stats.loggamma`, `scipy.stats.maxwell`, `scipy.stats.nakagami`, and `scipy.stats.t`.

- `scipy.stats.qmc.PoissonDisk` now accepts lower and upper bounds parameters `l_bounds` and `u_bounds`.

- `scipy.stats.fisher_exact` now supports two-dimensional tables with shapes other than `(2, 2)`.

### Preliminary Support for Free-Threaded CPython 3.13

SciPy `1.15` has preliminary support for the free-threaded build of CPython `3.13.` This allows SciPy functionality to execute in parallel with Python threads (see the `threading` stdlib module). This support was enabled by fixing a significant number of thread-safety issues in both pure Python and C/C++/Cython/Fortran extension modules. Wheels are provided on PyPI for this release; NumPy `>=2.1.3` is required at runtime. Note that building for a free-threaded interpreter requires a recent pre-release or nightly for Cython `3.1.0`.

Support for free-threaded Python does not mean that SciPy is fully thread-safe. Please see Thread Safety in SciPy for more details.

If you are interested in free-threaded Python, for example because you have a multiprocessing-based workflow that you are interested in running with Python threads, we encourage testing and experimentation. If you run into problems that you suspect are because of SciPy, please open an issue, checking first if the bug also occurs in the “regular” non-free-threaded CPython `3.13` build. Many threading bugs can also occur in code that releases the GIL; disabling the GIL only makes it easier to hit threading bugs.

## Array API Standard Support

Experimental support for array libraries other than NumPy has been added to existing sub-packages in recent versions of SciPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing PyTorch, JAX, ndonnx, or CuPy arrays as array arguments. Features with support added for SciPy `1.15.0` include:

- All functions in `scipy.differentiate` (new sub-package)

- All functions in `scipy.optimize.elementwise` (new namespace)

- `scipy.optimize.rosen`, `scipy.optimize.rosen_der`, and `scipy.optimize.rosen_hess`

- `scipy.special.logsumexp`

- `scipy.integrate.trapezoid`

- `scipy.integrate.tanhsinh` (newly public function)

- `scipy.integrate.cubature` (new function)

- `scipy.integrate.nsum` (new function)

- `scipy.special.chdtr`, `scipy.special.betainc`, and `scipy.special.betaincc`

- `scipy.stats.boxcox_llf`

- `scipy.stats.differential_entropy`

- `scipy.stats.zmap`, `scipy.stats.zscore`, and `scipy.stats.gzscore`

- `scipy.stats.tmean`, `scipy.stats.tvar`, `scipy.stats.tstd`, `scipy.stats.tsem`, `scipy.stats.tmin`, and `scipy.stats.tmax`

- `scipy.stats.gmean`, `scipy.stats.hmean` and `scipy.stats.pmean`

- `scipy.stats.combine_pvalues`

- `scipy.stats.ttest_ind`, `scipy.stats.ttest_rel`

- `scipy.stats.directional_stats`

- `scipy.ndimage` functions will now delegate to `cupyx.scipy.ndimage`, and for other backends will transit via NumPy arrays on the host.

## Deprecated features and future changes

- Functions `scipy.linalg.interpolative.rand` and `scipy.linalg.interpolative.seed` have been deprecated and will be removed in SciPy `1.17.0`.

- Complex inputs to `scipy.spatial.distance.cosine` and `scipy.spatial.distance.correlation` have been deprecated and will raise an error in SciPy `1.17.0`.

- `scipy.spatial.distance.kulczynski1` and `scipy.spatial.distance.sokalmichener` were deprecated and will be removed in SciPy `1.17.0`.

- `scipy.stats.find_repeats` is deprecated and will be removed in SciPy `1.17.0`. Please use `numpy.unique`/`numpy.unique_counts` instead.

- `scipy.linalg.kron` is deprecated in favour of `numpy.kron`.

- Using object arrays and longdouble arrays in `scipy.signal` convolution/correlation functions (`scipy.signal.correlate`, `scipy.signal.convolve` and `scipy.signal.choose_conv_method`) and filtering functions (`scipy.signal.lfilter`, `scipy.signal.sosfilt`) has been deprecated and will be removed in SciPy `1.17.0`.

- `scipy.stats.linregress` has deprecated one-argument use; the two variables must be specified as separate arguments.

- `scipy.stats.trapz` is deprecated in favor of `scipy.stats.trapezoid`.

- `scipy.special.lpn` is deprecated in favor of `scipy.special.legendre_p_all`.

- `scipy.special.lpmn` and `scipy.special.clpmn` are deprecated in favor of `scipy.special.assoc_legendre_p_all`.

- `scipy.special.sph_harm` has been deprecated in favor of `scipy.special.sph_harm_y`.

- Multi-dimensional `r` and `c` arrays passed to `scipy.linalg.toeplitz`, `scipy.linalg.matmul_toeplitz`, or `scipy.linalg.solve_toeplitz` will be treated as batches of 1-D coefficients beginning in SciPy `1.17.0`.

- The `random_state` and `permutations` arguments of `scipy.stats.ttest_ind` are deprecated. Use `method` to perform a permutation test, instead.

## Expired Deprecations

- The wavelet functions in `scipy.signal` have been removed. This includes `daub`, `qmf`, `cascade`, `morlet`, `morlet2`, `ricker`, and `cwt`. Users should use `pywavelets` instead.

- `scipy.signal.cmplx_sort` has been removed.

- `scipy.integrate.quadrature` and `scipy.integrate.romberg` have been removed in favour of `scipy.integrate.quad`.

- `scipy.stats.rvs_ratio_uniforms` has been removed in favor of `scipy.stats.sampling.RatioUniforms`.

- `scipy.special.factorial` now raises an error for non-integer scalars when `exact=True`.

- `scipy.integrate.cumulative_trapezoid` now raises an error for values of `initial` other than `0` and `None`.

- Complex dtypes now raise an error in `scipy.interpolate.Akima1DInterpolator` and `scipy.interpolate.PchipInterpolator`

- `special.btdtr` and `special.btdtri` have been removed.

- The default of the `exact=` kwarg in `special.factorialk` has changed from `True` to `False`.

- All functions in the `scipy.misc` submodule have been removed.

## Backwards incompatible changes

- `interpolate.BSpline.integrate` output is now always a numpy array. Previously, for 1D splines the output was a python float or a 0D array depending on the value of the `extrapolate` argument.

- `scipy.stats.wilcoxon` now respects the `method` argument provided by the user. Previously, even if `method='exact'` was specified, the function would resort to `method='approx'` in some cases.

- `scipy.integrate.AccuracyWarning` has been removed as the functions the warning was emitted from (`scipy.integrate.quadrature` and `scipy.integrate.romberg`) have been removed.

## Other changes

- A separate accompanying type stubs package, `scipy-stubs`, will be made available with the `1.15.0` release. Installation instructions are available.

- `scipy.stats.bootstrap` now emits a `FutureWarning` if the shapes of the input arrays do not agree. Broadcast the arrays to the same batch shape (i.e. for all dimensions except those specified by the `axis` argument) to avoid the warning. Broadcasting will be performed automatically in the future.

- SciPy endorsed SPEC-7, which proposes a `rng` argument to control pseudorandom number generation (PRNG) in a standard way, replacing legacy arguments like `seed` and `random_sate`. In many cases, use of `rng` will change the behavior of the function unless the argument is already an instance of `numpy.random.Generator`.

  - Effective in SciPy `1.15.0`:

    - The `rng` argument has been added to the following functions: `scipy.cluster.vq.kmeans`, `scipy.cluster.vq.kmeans2`, `scipy.interpolate.BarycentricInterpolator`, `scipy.interpolate.barycentric_interpolate`, `scipy.linalg.clarkson_woodruff_transform`, `scipy.optimize.basinhopping`, `scipy.optimize.differential_evolution`, `scipy.optimize.dual_annealing`, `scipy.optimize.check_grad`, `scipy.optimize.quadratic_assignment`, `scipy.sparse.random`, `scipy.sparse.random_array`, `scipy.sparse.rand`, `scipy.sparse.linalg.svds`, `scipy.spatial.transform.Rotation.random`, `scipy.spatial.distance.directed_hausdorff`, `scipy.stats.goodness_of_fit`, `scipy.stats.BootstrapMethod`, `scipy.stats.PermutationMethod`, `scipy.stats.bootstrap`, `scipy.stats.permutation_test`, `scipy.stats.dunnett`, all `scipy.stats.qmc` classes that consume random numbers, and `scipy.stats.sobol_indices`.

    - When passed by keyword, the `rng` argument will follow the SPEC 7 standard behavior: the argument will be normalized with `np.random.default_rng` before being used.

    - When passed by position or legacy keyword, the behavior of the argument will remain unchanged (for now).

  - It is planned that in `1.17.0` the legacy argument will start emitting warnings, and that in `1.19.0` the default behavior will change.

  - In all cases, users can avoid future disruption by proactively passing an instance of `np.random.Generator` by keyword `rng`. For details, see SPEC-7.

- The SciPy build no longer adds `-std=legacy` for Fortran code, except when using Gfortran. This avoids problems with the new Flang and AMD Fortran compilers. It may make new build warnings appear for other compilers - if so, please file an issue.

- `scipy.signal.sosfreqz` has been renamed to `scipy.signal.freqz_sos`. New code should use the new name. The old name is maintained as an alias for backwards compatibility.

- Testing thread-safety improvements related to Python `3.13t` have been made in: `scipy.special`, `scipy.spatial`, `scipy.sparse`, `scipy.interpolate`.

## Authors (commits)

- endolith (4)

- h-vetinari (62)

- a-drenaline (1) +

- Afleloup (1) +

- Ahmad Alkadri (1) +

- Luiz Eduardo Amaral (3) +

- Virgile Andreani (3)

- Isaac Alonso Asensio (2) +

- Matteo Bachetti (1) +

- Arash Badie-Modiri (1) +

- Arnaud Baguet (1) +

- Soutrik Bandyopadhyay (1) +

- Ankit Barik (1) +

- Christoph Baumgarten (1)

- Nickolai Belakovski (3)

- Krishan Bhasin (1) +

- Jake Bowhay (89)

- Michael Bratsch (2) +

- Matthew Brett (1)

- Keith Briggs (1) +

- Olly Britton (145) +

- Dietrich Brunn (11)

- Clemens Brunner (1)

- Evgeni Burovski (185)

- Matthias Bussonnier (7)

- CJ Carey (32)

- Cesar Carrasco (4) +

- Hood Chatham (1)

- Aadya Chinubhai (1)

- Alessandro Chitarrini (1) +

- Thibault de Coincy (1) +

- Lucas Colley (217)

- Martin Diehl (1) +

- Djip007 (1) +

- Kevin Doshi (2) +

- Michael Dunphy (2)

- Andy Everall (1) +

- Thomas J. Fan (2)

- fancidev (60)

- Sergey Fedorov (2) +

- Sahil Garje (1) +

- Gabriel Gerlero (2)

- Yotam Gingold (1) +

- Ralf Gommers (111)

- Rohit Goswami (62)

- Anil Gurses (1) +

- Oscar Gustafsson (1) +

- Matt Haberland (392)

- Matt Hall (1) +

- Joren Hammudoglu (6) +

- CY Han (1) +

- Daniel Isaac (4) +

- Maxim Ivanov (1)

- Jakob Jakobson (2)

- Janez Demšar (4) +

- Chris Jerdonek (2) +

- Adam Jones (4) +

- Aditi Juneja (1) +

- Nuri Jung (1) +

- Guus Kamphuis (1) +

- Aditya Karumanchi (2) +

- Robert Kern (5)

- Agriya Khetarpal (11)

- Andrew Knyazev (7)

- Gideon Genadi Kogan (1) +

- Damien LaRocque (1) +

- Eric Larson (10)

- Gregory R. Lee (4)

- Linfye (1) +

- Boyu Liu (1) +

- Drew Allan Loney (1) +

- Christian Lorentzen (1)

- Loïc Estève (2)

- Smit Lunagariya (1)

- Henry Lunn (1) +

- Marco Maggi (4)

- Lauren Main (1) +

- Martin Spišák (1) +

- Mateusz Sokół (4)

- Jan-Kristian Mathisen (1) +

- Nikolay Mayorov (2)

- Nicholas McKibben (1)

- Melissa Weber Mendonça (62)

- João Mendes (10)

- Gian Marco Messa (1) +

- Samuel Le Meur-Diebolt (1) +

- Michał Górny (2)

- Naoto Mizuno (2)

- Nicolas Mokus (2)

- musvaage (18) +

- Andrew Nelson (88)

- Jens Hedegaard Nielsen (1) +

- Roman Nigmatullin (8) +

- Nick ODell (37)

- Yagiz Olmez (4)

- Matti Picus (9)

- Diogo Pires (5) +

- Ilhan Polat (96)

- Zachary Potthoff (1) +

- Tom M. Ragonneau (2)

- Peter Ralph (1) +

- Stephan Rave (1) +

- Tyler Reddy (192)

- redha2404 (2) +

- Ritvik1sharma (1) +

- Érico Nogueira Rolim (1) +

- Heshy Roskes (1)

- Pamphile Roy (34)

- Mikhail Ryazanov (1) +

- Sina Saber (1) +

- Atsushi Sakai (1)

- Clemens Schmid (1) +

- Daniel Schmitz (17)

- Moritz Schreiber (1) +

- Dan Schult (91)

- Searchingdays (1) +

- Matias Senger (1) +

- Scott Shambaugh (1)

- Zhida Shang (1) +

- Sheila-nk (4)

- Romain Simon (2) +

- Gagandeep Singh (31)

- Albert Steppi (40)

- Kai Striega (1)

- Anushka Suyal (143) +

- Alex Szatmary (1)

- Svetlin Tassev (1) +

- Ewout ter Hoeven (1)

- Tibor Völcker (4) +

- Kanishk Tiwari (1) +

- Yusuke Toyama (1) +

- Edgar Andrés Margffoy Tuay (124)

- Adam Turner (2) +

- Nicole Vadot (1) +

- Andrew Valentine (1)

- Christian Veenhuis (2)

- vfdev (2) +

- Pauli Virtanen (2)

- Simon Waldherr (1) +

- Stefan van der Walt (2)

- Warren Weckesser (23)

- Anreas Weh (1)

- Benoît Wygas (2) +

- Pavadol Yamsiri (3) +

- ysard (1) +

- Xiao Yuan (2)

- Irwin Zaid (12)

- Gang Zhao (1)

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

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

- #2011: DEP: spatial: ‘sokalmichener’ and ‘rogerstanimoto’ distances…

- #2035: ENH: Add methods to compute derivatives (Trac #1510)

- #2116: Cholesky decomposition - are elements in the ‘other’ triangle…

- #2162: MAINT: signal: `lombscargle` is unclear about normalisation…

- #2509: distributions cdf, sf evaluation in the wrong tail

- #4096: DOC: special: Clarify Mathieu function documentation

- #4275: BUG: linalg.interpolative: svd integer overflow

- #4517: MAINT: special.hankel2: `(0, 0)` delivers (nan+nan*j) instead…

- #4538: alternative parametrizations of univariate distributions

- #4708: ENH: linalg.funm: a possible speed-up

- #4952: DOC: stats: improvement suggestions for tutorial

- #5818: Clarify definition of preconditioner for sparse linear system…

- #6528: ENH: stats: Add Normal-inverse-gamma distribution

- #7099: ENH: `stats.fisher_exact`: support tables larger than 2x2

- #7242: ENH: implement at least one good robust scalar root-finding algorithm…

- #8053: Random variate distribution random_state set after init does…

- #8307: scipy.sparse.linalg.eigs gives incorrect largest magnitude eigenvalue

- #8344: BUG: special.nctdtr: incorrect results

- #8362: a function to convert a matrix into diagonal ordered form (ab)…

- #8787: BUG: signal.lombscargle: raises `ZeroDivisionError`

- #8888: MAINT: special.gegenbauer: case of `alpha = 0` not handled

- #9249: BUG: linalg: `test_interpolative::TestInterpolativeDecomposition::test_id`…

- #9321: Easy access to scipy.stat.<distributionName> frozen distribution…

- #9509: BUG: special: `test_kolmogorov` fails on 32-bit platforms

- #10106: Slow random variate generation in scipy.stats

- #10328: DOC: stats: documentation is not distribution-specific

- #10364: Add Double Pareto-Lognormal Distribution

- #10374: ENH: make ARPACK-NG deterministic

- #11341: MAINT: constants: disparate electric permittivity constants

- #11465: Numerical stability of distributions: Add log_p as argument to…

- #11649: trust-constr error when attempting to keep bound constrained…

- #12019: scipy.linalg.orthogonal_procrustes

- #12282: API: stats.chisquare: must observed and expected frequencies…

- #12367: Allow whitespace alignment of tables of numbers?

- #12593: BUG: linalg: `estimate_rank` is quite unreliable

- #12651: BUG: cluster: `fcluster` assigning all points to a single cluster…

- #12662: Complex numpy exponentiation, nan, and/or inf causes segfault…

- #12895: BUG: `special.riccati_yn`: Definition missing minus sign

- #13019: TST, MAINT: test_maxiter_worsening on Python 3.9 + Linux ARM64

- #13137: BUG: linalg.schur: bug sorting complex eigenvalues in real form

- #13504: TST: stats: test distribution `support` method behavior for…

- #13643: BUG: signal.sepfir2d: fails with complex input on Windows

- #13986: Distributions cannot be freed by garbage collector due to self-references

- #14304: Jaccard distance greater than 1 if elements are strings

- #14467: DOC: constants: explain `0.0` uncertainty

- #14582: BUG: `special.spherical_jn`: Negative arguments lead to nans

- #14788: DOC: `linalg.hankel`: clarify that first entry of `r` is…

- #14895: ENH: All statistical distributions in scipy.stats should have…

- #14945: BUG: Overflows/NaNs cause segfault in integrate.quad on certain…

- #15012: ENH: `linalg.cholesky`: document that user is responsible…

- #15016: BUG: linalg.schur: sorting by imaginary part does not work for…

- #15021: scipy.linalg.qr with pivoting=True should return P as (N,N) permutation…

- #15533: BUG: test failure in `test_x0_equals_Mb` with `bicgstab`

- #15582: BUG: `special.ncfdtr(dfn, dfd, nc, f)` and `stats.ncf.cdf(x,`…

- #15620: BUG: signal.resample_poly returns an array consisting only of…

- #15888: BUG: linprog, with highs is killed by the OOM killer when called…

- #15896: Compiled code coverage with `--gcov` doesn’t work with Meson

- #15915: ENH: optimize: object-oriented interface to HiGHS

- #16494: MAINT: Speed up some slow tests

- #16531: DOC: Warnings/error in docstring examples.

- #16700: BUG: segfault on i386 in special `test_kolmogorov.py` TestSmirnovp

- #17059: ENH: Robust and fast numerical derivative for error propagation

- #17075: Test failures with Intel compilers

- #17136: BUG: logm sometimes raises ZeroDivisionError for matrices with…

- #17307: BUG: stats: frozen distribution domain error produced too late

- #17344: ENH: `scipy.linalg.circulant` should allow batching

- #17385: BUG: `TestOnenormest.test_onenormest_table_6_t_1` is failing…

- #17404: DOC: comparison of optimizers in optimization guide

- #17494: MAINT: HiGHS build flag cleanup

- #17571: ENH: Add units to scipy.constants description

- #17905: ENH: Add softplus implementation

- #18014: Potential use-after-free bug in `fcn_callback` (Static Analyzer…

- #18250: BUG: `complex256` type created by entering `complex128` into…

- #18295: BUG: special: Loss of precision in `logsumexp`

- #18367: RFC: Get rid of linalg.interpolative Fortran code

- #18409: ENH: extensions of `factorial{,2,k}` for complex domains, recurrences,…

- #18445: ENH: add a callback feature to minimize_scalar and root_scalar

- #18879: BUG: `integrate.quad_vec`: Fatal error when using `workers`…

- #18880: TST: `test_expm_multiply_dtype` failure on aarch64 (flaky test)

- #18882: BUG: minimize does not satisfy nonlinear constraint even if keep_feasible=True

- #18907: BUG: `presolve` option in `milp` causing feasible problem…

- #18909: BUG: Cython3 linalg import order bug

- #18945: BUG: circe-ci SVD-LOBPCG benchmarks do not check accuracy so…

- #19042: DOC: sparse: BSR does not support slicing, `__getitem__` not…

- #19071: BUG: scipy.special.gammasgn implementation & docs inconsistent…

- #19207: BUG: sparse.linalg: `LinearOperator` dtype determination broken

- #19223: BUG: io: scipy.io.loadmat error message recommend use of function…

- #19355: MAINT: lobpcg: add unit tests for accuracy matching benchmark…

- #19405: ENH: sparse.csr_array: keep axis functionality in `getnnz()`

- #19446: BUG: In test_b_orthonormalize, cannot parameterize Vdtype, Bdtype,…

- #19524: BUG: deepcopy on stats.rvs breaks seed / random generation.

- #19634: ENH: Dedicated Function for Envelope Extraction

- #19759: BUG: Bad result for stats.randint.pmf (edge case)

- #19791: DOC: linalg.schur: unclear signature for `sort` callable when…

- #19907: DEP: extend deprecation of private namespaces also to fortran-generated…

- #20026: ENH: ndimage: 1D rank filter speed up

- #20048: BUG: `stats.rv_discrete.ppf`: infinite loop in default implementation

- #20077: DEP: linalg: deprecate `kron`

- #20155: DOC: `optimize.curve_fit`: Inconsistent naming convention…

- #20196: MAINT: Audit usage of cython memoryviews, add `const` to allow…

- #20207: ENH: sparse: Validate dtype on sparse array/matrix creation

- #20239: DOC: Sparse arrays: todense() does not return numpy.matrix

- #20240: ENH: multiple small improvements to scipy.stats.circmean

- #20288: ENH: Poisson disk sampling for arbitrary bounds

- #20370: DOC: ndimage.convolve: clarify origin parameter description

- #20389: BUG: `sparse.hstack` does not respect `dtype` of `{indptr,indices}`…

- #20452: BUG:linalg:interpolative: Crashing if k is requested too high…

- #20552: DOC/DEV/MAINT: review distributing section of core-dev guide

- #20574: MAINT, BENCH: would be good to be able to run benchmarks with…

- #20602: MAINT/STY: fix UP031, UP032 linter errors

- #20609: BUG:linalg:interpolative: Inputs are not mapped to compatible…

- #20635: DOC: Titles of long function names in API Reference truncated…

- #20638: DOC: Specify cut-off frequency in firwin as half-ampltude vs…

- #20693: BUG: stats.noncentral_t: incorrect pdf values

- #20710: ENH: `special.rel_entr`: avoid premature overflow

- #20728: BUG: sparse.linalg: Segfault in `arpack` with `ifx`

- #20733: DOC: stats.mannwhitneyu: reversed options for `alternative`…

- #20739: DOC/DEV: update commit message guidance

- #20740: BLD/DEV: special: build warnings

- #20761: ENH: stats.cauchy: improve cdf and quantile accuracy in tail

- #20763: BUG: sparse.csgraph, array types: some functions should expect…

- #20813: BUG: `optimize.nnls` sometimes fails when input `A` is a…

- #20821: BUG: `stats.levy_stable.rvs`: “S0”-parameterization ignored

- #20844: DOC: update testing docs for alternative backends

- #20879: MAINT: clean up `sparse._sputils.getdtype`

- #20893: DOC/DEV: Developer docs should mention Accelerate support

- #20904: BUG: sparse.csgraph.dijkstra errors on inputs with int64 or no…

- #20910: BUG: positional argument `DeprecationWarning` message is overly…

- #20931: MAINT: Premature setting of attributes in `HBInfo` in `scipy.io._harwell_boei`…

- #20957: TST, MAINT: array API GPU test failures

- #20963: TST: `special.tests.test_support_alternative_backends`: failure…

- #20984: BUG: scipy.optimize.nnls 1.11.4 version has better performance…

- #20991: BUG: `special.pro_rad1` returns ‘nan’ for any combination of…

- #20994: BUG: `spatial.distance.cosine` with `complex` arguments raises…

- #21009: BUG: Floating point exception when passing the invalid argument…

- #21010: BUG: Segmentation fault when passing invalid arguments to some…

- #21011: BUG: Double free or corruption when passing invalid arguments…

- #21016: BUG: Indexing broken for sparse arrays

- #21030: DOC, DEV: release notes `gh_lists` touchups

- #21044: RFC: quo vadis, `xp_assert_*` infrastructure?

- #21045: BUG: `scipy/optimize/tests/test_hessian_update_strategy.py::TestHessianUpdateSt`…

- #21057: BUG: loong64 architecture fails TestQuad.test_complex

- #21059: TST, MAINT: `TestHyp2f1.test_region5` tol issue with gcc 14.1.0

- #21078: BUG: linalg.expm: slower by a factor of ~4 in `scipy>1.13`

- #21088: DOC: `optimize.InverseJacobian`: document or deprecate?

- #21099: DOC: incorrect section ordering for classes

- #21106: BUG: `stats.combine_pvalues` gives result with wrong dimensionality…

- #21140: BUG: optimize.nnls: re-implementation not robust

- #21144: BUG: sparse: Two new XSLOW test failures

- #21145: BUG: dev.py build –debug doesn’t produce a debug build

- #21148: BUG: scipy.optimize.root_scalar pass in an array instead of float

- #21152: BUG: `stats.bartlett`: returned statistic can be negative…

- #21158: RFC: spatial: review calculation formula for Jaccard distance…

- #21166: ENH: `linalg.null_space`: expose `lapack_driver` and `check_finite`

- #21174: BUG: special tests failing on main when CuPy is installed with…

- #21178: DOC: `optimize.root_scalar`: arguments incorrectly marked…

- #21181: MAINT: spatial: weighted `chebyshev` distance revisited

- #21187: BUG: spatial.distance: `kulczynski1` returns similarity rather…

- #21192: BUG: `stats.differential_entropy`: incorrect results with…

- #21193: BUG: optimize: Hessian update strategy fails on nested minimize…

- #21208: RFC: Should mutable default arguments be forbidden by the linter?

- #21212: DOC: doc build failing in CI

- #21217: BUG: SciPy won’t pick the correct BLAS when running the test…

- #21227: BUG: stats/fft/differentiate/optimize: test suite failures with…

- #21239: ENH: Add a Python level lapack wrapper for DSYTRS

- #21241: DOC: add sphinx-copybutton to the documentation

- #21248: BUG: ValueError: `x0` violates bound constraints in minimize

- #21256: BUG: io.loadmat: failure with large file due to address position…

- #21266: DOC: CosineMixture function in go_benchmark_functions is wrong

- #21275: CI: wheel builds for Python 3.13 are failing

- #21286: BUG: Delaunay/qhull segfault on self-pass

- #21292: TST: ndimage: GPU test failures

- #21296: DOC: optimize.root: fix docs for `inner_\*` parameters

- #21300: BUG: integrate.simpson: `x` param is keyword only

- #21311: BUG: special.chdtr: torch failures

- #21351: ENH: spatial: Rotation: add `split` to break apart object with…

- #21357: DOC: signal.hilbert: Terminology issue

- #21366: DOC: `stats.f_oneway`: use attributes instead of tuple unpacking…

- #21369: BUG: stats.tukeylambda: `support(lam)` is incorrect when `lam`…

- #21379: BUG: spatial: Voronoi diagram missing ridges

- #21383: BUG: `stats.sobol_indices`: in-place modification of `func`…

- #21394: DEV: jupytext notebooks break caching of doc builds

- #21405: MAINT: a few potential minor cleanups

- #21421: DOC/DEV: direct to building guide from quickstart guide

- #21439: DOC/DEV: replace mambaforge with miniforge

- #21447: DEV/MAINT: Allow unicode characters `±` and `∞` in source…

- #21452: DOC: signal.firls: reference unavailable

- #21453: ENH: Add support for Xi Correlation in scipy

- #21460: MAINT, DOC: make dist pipefail issue

- #21461: BUG: `special.pro_rad2`: incorrect results since translation…

- #21486: MAINT: ndimage test failures with CuPy

- #21504: DOC: add note about `args`/`kwargs` to description of callable…

- #21507: BUG: fft.fft: real-valued array-api-strict inputs fail

- #21510: DOC: signal.freqz: problem with `fs`

- #21513: TST, MAINT: test_differentiate torch GPU failures

- #21519: BUG: optimize.minimize: `method='Powell'` gives array not scalar

- #21534: TST, MAINT: `test_matrix_input` failing

- #21556: DOC: Lack of table of contents in cluster

- #21566: DOC: stats.pearsonr: error in notes of API reference

- #21571: DOC: interpolate.interp1d: clarify status and alternatives

- #21576: DOC: building: specify `.ps1` for windows example

- #21582: BUG: Squeezed output from batched `scipy.linalg.det`

- #21583: BUG: optimize: test failures in scikit-learn following LBFGS…

- #21584: BUG: linalg.expm: nightly inaccurate for `complex64`

- #21596: MAINT: Update constants to CODATA 2022 recommendation

- #21610: BUG: special.logsumexp: imaginary component exceeds `(-pi, pi]`

- #21615: BUG: Invalid treatment of ellipsis in indexing of sparse matrices

- #21627: DOC: optimize.root: outdated naming of fprime in `method=’hybr’`

- #21630: BUG: optimize.nnls: precision problems

- #21641: BUG: io.mmwrite: auto-appending of `.mtx` extension

- #21660: BLD, MAINT: linker warnings with newer AppleClang/ld

- #21661: BUG: fft.fht: should set `u.imag[-1] = 0` only when `n` is…

- #21670: BUG: ndimage: `_normalize_sequence` fails on 0d array

- #21671: BUG: signal.ShortTimeFFT: inverse tranform error with multichannel…

- #21675: BUG: Errors at compiling through pip for python 3.13 with option…

- #21677: BLD: build warnings from quadpack

- #21696: MAINT: lombscargle numerical backward-compat

- #21704: DOC: stats.bootstrap: clarify meaning of `paired` argument

- #21709: BUG: logsumexp returning incorrect results in Scipy 1.15.0.dev0

- #21724: MAINT: signal deprecation cleanups

- #21733: BUG: cluster: incorrect type of default value of `dist` in…

- #21738: BUG: “ERROR: Dependency “OpenBLAS” not found” in macOS tests…

- #21745: TST, MAINT: array API GPU test fails in `test_cubature.py`

- #21747: BUG: boolean indexing of sparse arrays broken on `main`

- #21758: BENCH/DEV: Add `conda-build` to `environment.yml`

- #21759: DEP: remove `special.btdtr` and `special.btdtri`

- #21760: BUG: failure in `scipy/optimize/tests/test_minimize_constrained.py::test_gh1164`…

- #21769: BENCH: Warnings from `linprog`

- #21772: BUG: `optimize.curve_fit` with `nan_policy="omit"` fails…

- #21775: BUG: sparse matrix-vector multiplication fails with flattened…

- #21788: BUG: stats: `qmc.Sobol` raises `ValueError` in multi-threading

- #21791: BUG: sparse: `setdiag` broken when not entire diagonal belongs…

- #21807: BUG: signal: Confusing error when giving an invalid mode to `correlation_lags`

- #21810: RFC: special: Behavior of `gamma` function and related functions…

- #21814: TST: interpolate: tests on `griddata` are not parametrized

- #21817: QUERY: `optimize.isotonic_regression`: cannot replicate results…

- #21820: BUG: stats: New XSLOW failures in `test_fit.py::TestFit`

- #21829: BLD: accelerate detection with GNU toolchain on ARM mac

- #21830: BLD: threads.h with MacOS 14.x ARM + gcc 14.2.0

- #21833: SPEC 7 Transition Tracker

- #21837: BUG: linalg.svd: Segmentation Fault, Integer overflow in LAPACK…

- #21838: ENH: sparse: revisit default index dtype selection in sparray…

- #21855: TST, MAINT: torch + GPU failures for test_create_diagonal

- #21862: BUG: large number of fails with macOS 15.1 using Accelerate

- #21885: BUG: `interpolate/tests/test_interpnd.py::TestLinearNDInterpolation::test_threa`…

- #21900: BUG: stats: New XSLOW test failure in test_sampling.py

- #21908: BUG: integrate.trapezoid: broadcasting failure after #21524

- #21927: TST: failures in `test_riemann_zeta_complex` on windows in…

- #21934: BUG: Intel oneAPI tests / py3.12, dev.py: `meson.build:1:0:`…

- #21940: DOC, REL: 1.15.0 author mappings

- #21946: BUG: several failing tests in `interpolate` on macOS15

- #21949: BUG: stats: XSLOW test failure in `scipy.stats.tests.test_fit::TestFit`

- #21952: DOC: `stats.goodness_of_fit`: improve examples

- #21957: CI: failure for “Oldest GCC …” Linux CI job (related to pre-release…

- #21963: DOC: Deprecation warning in `sphinx` when used with Python…

- #21988: refguide_check currently failing

- #22005: TST: `TestJacobian::test_attrs` tol bump?

- #22022: TST: tolerance violation in `test_x0_working[tfqmr]` on windows

- #22029: `Test_SVDS_LOBPCG.test_svd_rng_3` test failure in wheel build…

- #22031: BUG: mypy failure in main

- #22077: DOC, REL: a few release notes/process issues

- #22094: API: unannounced breaking change: `scipy.integrate.AccuracyWarning`…

- #22095: DOC: sparse: `sparse.eye_array` does not accept `tuple[int,`…

- #22097: DEP: `interpolate.interpnd.GradientEstimationWarning` still…

- #22112: BUG/DOC: sparse: ND COO unexpected behaviour 1.15.0rc1

- #22123: DOC: stats: random variable transition guide launches wrong notebook

- #22128: BUG/DOC: it’s not clear how to use `differentiate.jacobian`…

- #22137: BUG: `stats._distribution_infrastructure._Domain.symbols` class…

- #22143: BUG: Fail to call `BSpline` after unpickling with `mmap_mode="r"`

- #22146: BUG:`stats.ContinuousDistribution.llf`: should not be public

- #22204: BUG: signal.ShortTimeFFT: `istft` with `mfft > len(win)`…

## Pull requests for 1.15.0

- #11345: MAINT: constants: revise way ‘exact’ values are recomputed

- #12071: ENH: linalg: update `_procrustes.py` to handle complex matrices…

- #12824: ENH: `linalg.solve`: detect and exploit matrix structure

- #15993: TST: sparse.linalg: Add iterative step test of solvers with LU…

- #16088: DOC: signal: Make `_filter_design.py` plot labels consistent

- #16090: ENH: vectorize companion matrix function

- #16467: ENH: sparse: add nonzero functionality to `min, max, argmin,`…

- #16877: MAINT: remove un-necessary all-true array.

- #17318: ENH: signal: Add functionality of Complex Chirp waveform

- #18605: ENH: special: add `softplus`

- #18979: DOC: Add units to scipy.constants description

- #19058: DOC:special/signal: Add examples for `berp_zeros` and `band_stop_obj`

- #19145: ENH: stats: add Landau distribution

- #19209: BUG: sparse.linalg: fix `LinearOperator` dtype determination

- #19255: ENH: Use `highspy` in `linprog`

- #19361: BENCH: sparse.linalg: check accuracy in SVD-LOBPCG benchmarks

- #19475: ENH: stats.lmoment: add function to calculate sample L-moments

- #19764: MAINT: stats: fix `axis_nan_policy` decorator non-broadcastable…

- #19970: ENH: interpolate: replicate `splrep` and `splprep` in Python

- #19988: MAINT: unify factorial implementations

- #19989: MAINT: special: factorial clean-ups

- #20040: DOC: optimize: add comparison of optimizers to guide

- #20058: DOC:signal: Suggest remedies for slow speed in `resample` when…

- #20097: ENH: signal: Compute envelope of a real- or complex-valued signal

- #20194: BUG: linalg.cossin: fix for nonsymmetric cases

- #20242: DOC: sparse: Correct `todense` documentation

- #20303: DOC: stats: Convert sampling tutorial to MyST-md

- #20408: DOC: ndimage.convolve: modify `origin` param description

- #20496: DOC: stats: added `Raises` section to a few functions

- #20514: TST/BUG: linalg.expm: empty array support

- #20517: DOC: sparse.linalg: updated preconditioner doc for iterative…

- #20519: MAINT: signal: further refactor spline filters

- #20520: BUG: linalg.polar: empty array support

- #20539: ENH: special: Overhaul of Legendre functions

- #20543: ENH: ndimage: log(n) implementation for 1D rank filter

- #20558: ENH: linalg: Cythonize `id_dist` FORTRAN code

- #20589: TST: optimize.linprog/milp: add tests for various bug reports

- #20671: ENH: interpolate: fix concurrency issues throughout

- #20695: MAINT: special.ndtr: adjust implementation to more closely match…

- #20701: TST/MAINT: special: test with CuPy, make some CUDA fixes

- #20708: ENH: `differentiate.hessian`: use `jacobian` to compute…

- #20713: ENH: optimize.HessianUpdateStrategy: add `__matmul__`

- #20719: MAINT: sparse: fix `__init__` func sig to allow `maxprint`…

- #20743: ENH: `stats._xp_mean`, an array API compatible `mean` with…

- #20754: ENH: sparse: add dtype validation in `__init__` and `astype`

- #20759: MAINT: sparse.linalg: adjust `norm`, `eigs`, and `lsqr`…

- #20766: MAINT: stats: minor numerical improvements to circular statistics

- #20767: ENH: stats.qmc: add bounds parameters to PoissonDisk

- #20771: ENH: `stats.ttest_ind`: add array API support

- #20773: BUG: sparse.csgraph, array types: support non-zero `fill_value`...

- #20785: ENH: `stats.nct.pdf`: increase range in left tail using boost

- #20793: ENH: stats: end-to-end array-API support for NHSTs with beta…

- #20794: ENH: stats: add array API support for `directional_stats`

- #20800: ENH: optimize.elementwise: vectorized scalar optimization and…

- #20809: ENH: ndimage: extend ndimage filter axes support to correlate…

- #20811: ENH: ndimage: extend filter axes support to remaining filters…

- #20816: ENH: `special.rel_entr`: Avoid overflow before computing…

- #20822: CI: Add Linux workflow to test on free-threaded Python builds

- #20827: REL: set version to 1.15.0.dev0

- #20829: MAINT: special: fix typo in `four_gammas` used by `hyp2f1`

- #20830: DOC: `optimize.differential_evolution`: change convergence…

- #20833: BUG: interpolate: make BSpline.integrate always return an array

- #20834: ENH: integrate.nsum: elementwise evaluation of finite or infinite…

- #20837: MAINT: linalg: add `const` to Cython function signatures

- #20843: DOC/DEV: add docs for enabling interactive examples

- #20846: DOC: Wrap long titles in docs pages

- #20849: DOC/DEV: mention `-b` option in contributor guide on testing

- #20855: TST: add additional margin to `fail_slow`s

- #20856: TYP: `_lib.doccer`: add type annotations

- #20857: ENH: sparse: add axis parameter to `count_nonzero` method

- #20859: DEP: signal: remove `cmplx_sort`

- #20862: MAINT: special: Add kokkos `mdspan`

- #20864: DEP: integrate: remove quadrature and romberg

- #20865: DEP: signal: remove wavelet functions

- #20866: DEP: stats: remove `rvs_ratio_uniforms`

- #20867: DEP: `integrate.cumulative_trapezoid`: raise `ValueError`…

- #20868: DEP: interpolate: deprecate complex dtypes in `{Akima1D, Pchip}Interpolator`

- #20869: DEP: special.factorial: raise error for non-integer scalars and…

- #20872: MAINT: interpolate: add `const` to Cython function signatures

- #20873: MAINT: sparse: add `const` to Cython function signatures

- #20874: MAINT: spatial: add `const` to Cython function signatures

- #20875: BLD/DEV: special: Fix warning due to mixed initializers

- #20876: DOC: use `intersphinx_registry` for easier intersphinx mapping…

- #20882: CI: Add workflow to build and upload free-threaded wheels

- #20883: ENH: stats: rewrite `ttest_rel` in terms of `ttest_1samp`

- #20884: ENH: stats: end-to-end array-API support for NHSTs with Student’s…

- #20885: BUG: fix incorrect intersphinx-registry entry in environment.yml

- #20886: CI/DEV: fix Node.js 16 warnings by bumping actions

- #20887: MAINT: signal: add `const` to Cython function signatures

- #20889: MAINT: sparse: Align matmul tests in `test_base.py` for spmatrix…

- #20891: MAINT: stats: add `const` to Cython function signatures

- #20895: TST: sparse: Finish allowing `test_base.py` to easily switch…

- #20897: DOC: Fix bug with parallel doc build

- #20898: MAINT: sparse: clean up `_sputils.getdtype` docstring

- #20900: ENH: stats: add array API support to combine_pvalues

- #20906: DOC: linalg.schur: update doc for the argument `sort`

- #20907: CI: Make sure nightly free-threaded wheels are tested with GIL…

- #20908: DOC: signal.dbode: improve docstring

- #20912: DOC: Add more information about how to use Accelerate

- #20913: BUG: sparse.csgraph.dijkstra: fix dtype and shape bugs

- #20915: DOC: `integrate.quad_vec`: Add example when using `workers`

- #20916: DOC: Mention that `sparse.bsr_array` does not support slicing.

- #20922: BUG: stats.mstats: fix `mstats.{ttest_rel, ttest_1samp}` when…

- #20924: BUG: `_lib`: ensure reasonable length `_deprecate_positional_args`…

- #20926: DOC: sparse: Add migration guide for converting code from spmatrix…

- #20928: ENH: `optimize._differentiate`: add array API support

- #20932: MAINT: io: fix premature setting of attributes in `HBInfo`

- #20934: TST: `stats.combine_pvalues`: parameterise tests and update…

- #20941: DOC/MAINT: single to double backticks to remove improper linking

- #20942: CI: Use Cython nightly wheel on free-threaded CI

- #20944: DOC: update distributing section

- #20946: ENH: stats.gmean: add array API support

- #20951: CI: Add MacOS to free-threaded wheel release CI

- #20954: MAINT: stats.hmean/pmean: simplify prior to array API conversion

- #20955: DOC: Single to double backticks for non-targets

- #20962: DOC/MAINT: stats.gmean/gstd/hmean/pmean: document/treat invalid…

- #20965: ENH: `stats.tmean`: add array API support

- #20968: MAINT: fix some misspellings

- #20969: DOC: linalg: add # may vary to a linalg.schur example

- #20971: TST: special: use `standard_normal` to generate arguments in…

- #20974: ENH: `stats.combine_pvalues`: add native axis support

- #20975: DOC: single to double backticks

- #20976: BUG: Update scipy-optimise directive in view of new default role

- #20977: DOC: More single to double backtick

- #20980: CI, MAINT: `test_plot_iv` NumPy 2 shim

- #20985: BLD: Add build only CI workflow for Windows using MSVC + ifx…

- #20986: DEV: `gh_lists`: single -> double backticks

- #20987: DOC/DEV: update commit message guidance

- #20989: ENH: `stats.chi2_contingency`: add `method` parameter

- #20995: CI: test cp313-dev

- #20998: MAINT: signal: fix code comment typo

- #21003: MAINT: odr: fix a refcounting issue in `__odrpack.c`

- #21004: DOC: stats: Convert `chisquare` example to notebook

- #21005: CI: one invocation for all tests in array API job

- #21017: MAINT: smoke-docs: add `special/_precompute` to –ignore list,…

- #21018: MAINT: sparse: better error message on `matmul` mismatch

- #21021: ENH:MAINT:optimize: Re-rewrite nnls in Cython

- #21022: BUG: sparse: Fix advanced indexing using both slice and array

- #21023: DEV: lint: enforce newlines at end of files

- #21025: API: signal: rename `sosfreqz` to `freqz_sos`

- #21028: ENH: stats.tmin/tmax: add array API support

- #21029: MAINT/STY: Fix UP031 AND UP032 linter errors

- #21032: DOC/DEV: update vendored-code page

- #21033: DOC: interpolate: discuss linear interpolation with extrapolation

- #21034: ENH: `stats.xp_var`: array-API compatible variance with `scipy.stats`…

- #21035: ENH: stats.hmean/pmean: add array API support

- #21036: ENH: stats.tvar/tstd/tsem: add array API support

- #21037: MAINT: forward port 1.14.0 relnotes

- #21041: ENH: `differentiate`: add sub-package for array-API compatible…

- #21042: DOC: stats: Move biomedical examples to notebooks

- #21047: TST: optimize: fix exception test on PyPy3.10

- #21050: ENH: `stats.Normal`: add new continuous distribution infrastructure…

- #21051: BUG: interpolate.LinearNDInterpolator: fix for precomputed triangulation

- #21063: MAINT: gcc-14 `test_region5` tol bump

- #21068: ENH: `stats.zmap`/`zscore`/`gzscore`: add array API…

- #21076: ENH: `stats.differential_entropy`: add array API support

- #21081: DOC: Add default options for COBYQA

- #21083: MAINT: simplify `_integrate_pdf`

- #21085: DEP: spatial: deprecate complex input to `cosine` and `correlation`

- #21086: DOC: spatial: Fix typo in `seuclidean` docstring

- #21087: DOC: optimize: remove inadvertent block quote indentation

- #21089: ENH: `stats.alexandergovern`: vectorize calculation for n-D…

- #21094: DOC: sparse.linalg.gcrotmk: fix backticks and add `maxiter`…

- #21096: DOC: sparse.linalg.gcrotmk: add missing backticks

- #21097: ENH: `stats.boxcox_llf`: add array API support

- #21098: DEV: don’t add `sparse` label for submodules

- #21101: DOC: special.ellipj: fix order of parameters in docstring

- #21103: MAINT: itemsize pybind cleanup

- #21109: MAINT: `stats.combine_pvalues`: fix native `axis` support…

- #21110: ENH:sparse.linalg: Update vendored ARPACK version to 3.9.1

- #21111: BUG: `ndimage.binary_erosion`: avoid divide by zero by capping…

- #21112: DOC: `optimize.differential_evolution`: fix interval for…

- #21113: MAINT, DOC: simplify docs warn filter

- #21115: BENCH: Corrections to benchmarks README and `sparse.Arithmetic`…

- #21116: BUG: `optimize.root_scalar`: let bracket be passed as a NumPy…

- #21117: TST: interpolate: use `xp_assert` infrastructure

- #21118: DOC: optimize: Add docstring to `InverseJacobian`

- #21119: MAINT: remove another mpl test shim

- #21120: BUG: cluster: Avoid OOB write when distances are NaN in `centroid`

- #21121: BUG: cluster: Fix `fcluster` `"maxclust"` binary search logic

- #21123: DEV/CI: add `gmpy2` back to test dependencies

- #21124: MAINT: use `xp_vector_norm` instead of `xp.linalg.vector_norm`

- #21125: MAINT: remove unused minpack2 fortran code

- #21127: TST: fix `boxcox_llf` test skips

- #21128: TST: special.logsumexp: modernise tests

- #21129: TST: sparse.linalg: test all dtypes for `lobpcg` B-orthonormalization

- #21131: ENH:optimize: Rewrite MINPACK in C

- #21132: TST: sparse.linalg: simplify dtypes def in `test_expm_multiply.py`

- #21133: TST: sparse.csgraph: simplify dtypes def in `test_graph_laplacian.py`

- #21141: DOC: Remove outdated comment about macos/musl in Cirrus CI config

- #21143: MAINT: signal: Don’t redefine `PyArray_MIN` macro

- #21146: MAINT: sparse.linalg: `spsolve` simplification

- #21149: ENH: special.logsumexp: add array API standard support

- #21150: ENH: ndimage: add array API standard support

- #21151: DOC: interpolate: fix `py:obj reference target not found` warning

- #21154: DOC: fix documentation about verbose in minimize_trustregion_constr.py

- #21157: DEP: `stats.find_repeats`: deprecate function

- #21162: MAINT: `optimize.root_scalar`: ensure user function gets…

- #21163: MAINT: special: Make fixes needed for ellipkinc and ellipeinc…

- #21167: ENH: interpolate: add AAA algorithm for rational approximation

- #21168: BLD: remove optional test dependencies from cibuildwheel config

- #21171: DEV: fix `--debug` and add `--release` to `dev.py build`

- #21173: BUG/CI: Compile and run tests with `ifx` + `MKL` on Linux

- #21176: MAINT: spatial.distance.jaccard: correct numerator calculation

- #21179: BUG: special: `cupy` import guard

- #21182: MAINT: spatial: improve weighted Chebyshev distance doc and zero…

- #21185: DOC: optimize: Mark `x1` as optional for secant root finding

- #21186: DOC: `array`->``array_like`` in a few functions

- #21194: MAINT: `stats.differential_entropy`: fix results with integer…

- #21196: DEV: add label glob for `scipy.differentiate`

- #21197: ENH: sparse: extend COO arrays to n-dimensions

- #21199: MAINT: bump pybind11, mark C/C++/Cython extension modules as…

- #21201: ENH:integrate: Rewrite QUADPACK in C

- #21203: BUG: optimize: Avoid sharing BFGS HessianUpdateStrategy between…

- #21204: MAINT: ensure Python.h is included first in __minpack.c

- #21210: MAINT: special: Make sine and cosine integrals work in CUDA

- #21211: DEP: signal.{correlate,convolve,lfilter}: deprecate object arrays…

- #21213: MAINT, DOC: bump jupyterlite-sphinx lower bound

- #21215: MAINT: `_lib`: update `_docscrape` from upstream

- #21216: ENH: `integrate._tanhsinh`: add array API support

- #21220: TST: sparse.linalg.lobpcg: add unit tests for accuracy

- #21221: BENCH: sparse.linalg: check accuracy properly in LOBPCG benchmarks

- #21222: BUG: special: `cython_special` missing dep

- #21223: MAINT: interpolate: remove several fused type uses from `_bspl.pyx`

- #21225: MAINT: io: move `_test_fortran` under `tests`

- #21230: ENH: `differentiate`: support array `initial_step`

- #21231: ENH: `optimize.elementwise.find_minimum`: add array API support

- #21235: MAINT: interpolate: remove `README`

- #21240: ENH: sparse: refactor 2-D COO sparse-dense matrix-matrix multiplication

- #21242: BUG: sparse: fix two slow tests that fail in numpy 2 inside A.nnz

- #21243: BENCH: fix `--compare` in `python dev.py bench`

- #21245: DOC: add sphinx-copybutton

- #21247: ENH: linalg.nullspace: expose SVD options

- #21252: DOC: `integrate.solve_bvp`: make notation consistent

- #21254: CI: Test icx + icpx + ifx + MKL build of SciPy

- #21257: MAINT: BUG: fixed issue where optimization method trust-constr…

- #21259: BUG: interpolate: avoid OOB in the periodic spline constructor

- #21260: BUG: io.loadmat: fix read of large Matlab 4 arrays

- #21264: MAINT: utilise `array_api_compat` v1.8

- #21265: BUG: fix cstddef include

- #21267: DOC: add Stack Overflow link to readme file

- #21268: MAINT/BENCH: optimize: fix `CosineMixture` reference

- #21276: MAINT: Fix incorrectly named 1234 Hz fs .wav test file

- #21277: ENH: signal.lombscargle: update to the generalized Lomb-Scargle…

- #21278: BLD: bump cibuildwheel closes #21275

- #21281: MAINT: `test_maxiter_worsening` cleanup

- #21282: TST: ndimage: unskip `test_boundary_spline_accuracy` for `torch`

- #21284: MAINT: Remove mutable defaults in function definitions, forbid…

- #21290: MAINT: linalg: run `dos2unix` on `cython_lapack_signatures.txt`

- #21294: TST: fix GPU failures

- #21295: DOC: `find_simplex` no self

- #21297: MAINT: special: rename C++ library to `xsf`

- #21299: DEV: `gh_lists`: improve sanitization of backticks

- #21301: ENH: stats: Implement `_logcdf` and `_logsf` for `rv_continuous`

- #21304: TST: Fix bugs in various tests found via linter

- #21309: MAINT:integrate: Fix an off-by-one error in QUADPACK

- #21310: MAINT/DOC: clean up `_lib._array_api`, update docs

- #21312: MAINT: special: fix Pylance typing nit

- #21313: BUG: find_simplex shape () segfault

- #21314: ENH: optimize: Rewrite LBFGSB in C

- #21316: MAINT: special.chdtr: fix generic chdtr

- #21318: BUG: special: Fix bug in beta ppf by setting correct Boost policy

- #21321: BUG: linalg: fix `solve_banded` raising `IndexError` when…

- #21322: BUG: stats: Allow `betaprime._ppf` to accept scalars.

- #21326: MAINT: stats: Improve precision of argus.sf.

- #21328: ENH: linalg: add Python wrapper of `?gtcon`

- #21329: MAINT: interpolate.AAA: improve input validation of `max_terms`

- #21330: ENH: integrate: multidimensional integration of array-valued…

- #21331: ENH: linalg: add Python wrapper of ?trcon

- #21332: BUG: `stats.levy_stable`: fix ignored parameterization

- #21333: DOC:integrate.simpson: Remove reference to removed `even` param

- #21334: TST: add `xfail_xp_backends`

- #21335: BUG/ENH: stats: updates for cauchy.

- #21336: ENH: linalg: Add `sy/hetrs` LAPACK wrappers

- #21339: ENH: `stats.poisson_binom`: add Poisson Binomial distribution

- #21342: MAINT: stats: fix test that discrete distribution methods accept…

- #21344: BLD: require Meson 1.5.0, fix a missing build dependency for…

- #21346: TST: special: Fix two XSLOW tests.

- #21347: BUG/ENH: stats: Cauchy distribution fixes

- #21349: TST: linalg: skip `svd_gesdd` test for large matrices for/in…

- #21352: ENH: `linalg.lapack.?lantr`: add Python wrapper

- #21353: MAINT: `stats.randint.pmf`: fix zero PMF values within the…

- #21354: MAINT: `stats.rv_discrete.ppf`: fix infinite loop bug

- #21355: MAINT: `stats.geom.rvs`: ensure that output is not negative…

- #21360: BLD: use OpenBLAS v0.3.28 with fewer kernels, fix OpenBLAS licences

- #21361: BLD: switch to more robust git hash determination

- #21363: ENH: linalg.solve: use structure to speed up finite check, apply…

- #21365: BUG: interpolate: FITPACK: remove `fpchec.f` in-line `if-then-endif`…

- #21367: MAINT: `stats.mannwhitneyu`: simplify alternative hypotheses

- #21368: DOC: fixes ISSUE#21366

- #21371: BUG: stats.tukeylambda: Fix the support() method.

- #21373: ENH: interpolate.AAA: add cleanup function for removing spurious…

- #21375: MAINT: Add local resources for smoke-tutorials

- #21377: BENCH: Update BlockDiagSparseConstruction to use a `coo_matrix`…

- #21378: DOC: signal.hilbert: update to reflect implementation

- #21387: DOC: signal: fix typos in `_short_time_fft.py` and `signal.rst`

- #21388: ENH: special: Improve precision of special.logit.

- #21389: ENH: `scipy.stats`: add normal-inverse-gamma distribution

- #21395: DOC: stats.ecdf: fix example plot

- #21397: DOC/DEV: add `pooch` to virtualenv dev quickstart guide

- #21399: MAINT: optimize: remove unnecessary `isnan` check

- #21407: BUG: optimize.minimize: set `trust-constr` `success=False`…

- #21412: ENH: sparse: add CSR/CSC `_broadcast_to` method

- #21413: MAINT: cleaner 0-D/scalar checks for `xp` assertions, round…

- #21419: ENH: `linalg.circulant`: allow batching

- #21423: MAINT: `linalg.logm`: avoid `ZeroDivisionError`, emit…

- #21425: DOC: linalg.qr: add example about explicit permutation matrix

- #21427: DOC: linalg.cholesky: document when/whether only selected half…

- #21428: DOC: linalg.hankel: emphasize that first element of `r` is…

- #21429: MAINT: `linalg.schur`: fix `sort='iuc'/'ouc'`, correct…

- #21430: MAINT: forward port 1.14.1 relnotes

- #21433: DOC: Cache jupyter notebooks build

- #21435: ENH: sparse: Add nD COO support for matmul, dot and tensordot

- #21437: TST/DOC: smoke docs: strict checks

- #21440: ENH: linalg.funm: Pythranize double for loop

- #21441: DOC: special: prolate spheroidal docs wrong

- #21443: DOC/DEV/CI: mambaforge -> miniforge

- #21444: DOC: optimize: make `lsq_linear` example smaller

- #21446: ENH: linalg: enable N-D batch support in special matrix functions

- #21449: DEV/MAINT: Add `±` and `∞` to the extra set of allowed Unicode…

- #21450: Use miniforge for uploading wheel builds

- #21451: DOC: interpolate: add missing call to example code

- #21454: ENH: special: Add root finding tools to xsf and implement gdtrib…

- #21455: TYP: ignore missing sphinx import in mypy.ini

- #21457: MAINT: few scipy cleanups

- #21458: DOC: signal.firls: fix broken link

- #21464: CI: remove `fetch-depth: 0` from wheel build jobs

- #21467: STY: fix new lint rules that are popping up in CI

- #21468: MAINT: special: remove more functions from `functions.json`

- #21469: DOC/MAINT: add references to Boost

- #21471: BUG: sparse: undesired behaviour of 1D/2D matmul

- #21472: MAINT: special: refactor `ufunc.h` and move to `xsf`

- #21473: ENH: integrate.cubature: array API standard support

- #21474: DOC: use `https` URLs in pull request template

- #21477: DOC: update Contributor Quickstart guide to refer to the Building…

- #21478: DOC: Fix version matching by extending the length of `GITVER`

- #21481: MAINT/DEV: pin sphinx in `environment.yml`, bump `jupyterlite-sphinx`

- #21483: ENH: special: computing derivatives by simple autodifferentiation

- #21485: MAINT: interpolate: abstract out barycentric representation of…

- #21492: MAINT: Specify SHELL=/bin/bash in doc/Makefile

- #21493: MAINT: Check for all submodule paths in `check_installation`

- #21496: TST: Use pytest-run-parallel against free-threaded CI

- #21497: ENH: interpolate: add `FloaterHormannInterpolator`

- #21499: MAINT, TST: CuPy skip ndimage test

- #21502: MAINT: Update COBYQA to the latest release

- #21505: BUG: special: Use Boost for ncfdtr, fixing accuracy issues

- #21508: BUG: fft: fix real input to standard funcs

- #21512: TST: signal: convert to `xp_assert_\*` infrastructure (pt….

- #21514: DOC: signal.freqz: fix example

- #21515: MAINT: differentiate: manually promote dtype before element assignment

- #21516: TST: remove redundant torch skips

- #21517: DEV: `pytorch` -> `torch`

- #21518: ENH: `stats.boxcox_llf`: add GPU support

- #21520: TST: `special._smirnovp`: remove test xfail after translation…

- #21524: ENH: integrate.trapezoid: add array API standard support

- #21525: MAINT: stats: Fix typos principle -> principal

- #21526: BUG: optimize.minimize.powell: stop squeezing everything

- #21528: BUG: special.logsumexp: fix type promotion

- #21530: TST: signal: convert to `xp_assert_\*` infrastructure, pt 2

- #21536: TST: interpolate: fix a spurious failure with -b all

- #21539: MAINT: interpolate: move an internal utility from cython to python

- #21542: DOC: integrate.cubature: fix doc formatting and references issues

- #21544: DOC: optimize: document recipe for `\*args` and `\*\*kwargs`

- #21545: STY: ignore rule UP038

- #21549: ENH: ndimage: add axes support to most morphology functions

- #21551: MAINT: interpolate: trim down `_bspl` extension

- #21553: ENH:linalg: Rewrite expm in C

- #21564: TST, MAINT: skip some torch GPU tests

- #21565: ENH: HiGHs re-integration

- #21567: MAINT: stats.wilcoxon: small improvements/fixes

- #21568: MAINT: special: performance optimization for simple autodifferentiation

- #21570: MAINT, BLD: 3.13 to classifiers

- #21572: DEP: spatial.distance: deprecate `kulczynski1` and `sokalmichener`…

- #21573: DOC/MAINT: stats: fix some typos

- #21575: DOC/MAINT: doc: fix some typos

- #21577: MAINT: special.hankel2: fix edge case

- #21578: DOC: `special.mathieu_c/sem`: add information to docstring

- #21579: TST/DEV: allow stacking of `skip_xp_backends`

- #21585: DOC/MAINT: special: fix some typos

- #21586: DOC/MAINT: spatial: fix some typos

- #21587: BUG:linalg: Fix single precision expm UV computation

- #21588: BUG: linalg.det: Fix edge case handling of stacked 1x1 arrays

- #21590: DOC: signal.firwin: emphasise cutoff freq is half-amplitude

- #21593: DOC: `special.roots_legendre`: fix typo in example

- #21595: DOC: building: specify .ps1 for windows example

- #21597: ENH: `special.logsumexp`: improve precision when one element…

- #21598: DOC: `spatial.voronoi_plot_2d`: notes on degeneracy

- #21599: CI: use gha-update [wheel build]

- #21600: MAINT: `_lib`: vendor and use array-api-extra

- #21602: BUG:optimize: Correct guarding, previosuly Fortran indexed, mod…

- #21603: DOC: `special.riccati_yn`: highlight sign convention

- #21604: MAINT: `special.gegenbauer`: fix behavior for `n=0`;…

- #21605: MAINT: constants: update codata values to 2022

- #21607: DOC/MAINT: sparse: fix some typos

- #21608: TST: ndimage: skip fourier tests for JAX

- #21609: ENH: `integrate.lebedev_rule`: points and weights of Lebedev…

- #21612: MAINT: special: fix delegation to generic implementations

- #21616: BUG: sparse: fix indexing after ellipsis and 2D array indexing

- #21617: DOC/MAINT: signal: fix some typos

- #21621: DOC/MAINT: ndimage: fix some typos

- #21622: MAINT: special.logsumexp: enforce branch cut convention

- #21624: DOC/MAINT: linalg: fix some typos

- #21625: ENH: `optimize.differential_evolution`: respect workers when…

- #21626: BUG: sparse.linalg: Set `t=2` in `test_onenormest_table_6_t_1`…

- #21629: MAINT: special: use reflection formulas for spherical Bessel…

- #21633: DEP: linalg: deprecate kron

- #21635: TST: special: fix XSLOW failure in `test_mpmath.TestSystematic.test_spherical_j`…

- #21636: MAINT: `differentiate.differentiate`: rename function to…

- #21637: MAINT: interpolate: deduplicate input validation for NdBSpline

- #21638: ENH: `differentiate.jacobian`: support array `step_direction`

- #21642: BUG: io.mmwrite: fix auto-appending of `.mtx` extension

- #21646: DOC: sparse: Migration Guide rewording and tweaks

- #21647: DOC: optimize.root: replace ‘fprime’ with ‘jac’ in `method=’hybr’`

- #21648: DOC/TST: `integrate.cubature`: Clean up docstring and add…

- #21656: API: `integrate.cubature`: change some arguments to keyword-only

- #21657: ENH: `integrate.cubature`: support for infinite limits

- #21658: ENH: stats.chatterjeexi: add xi correlation function

- #21663: CI: fix failing conda setup

- #21668: BUG: fft.fht: set `u.imag[-1] = 0` only when `n` is even

- #21672: BUG: ndimage: fix 0d arrays in `_normalize_sequence`

- #21673: BUG: signal.ShortTimeFFT: fix multichannel roundtrip with `mfft`…

- #21678: BUG: fix `nan` output of `special.betaincinv`

- #21680: MAINT:integrate: Silence a few QUADPACK compiler warnings

- #21682: DOC: Reduce duplication in user guide

- #21686: BUG: signal: int handling for `resample_poly`

- #21689: BUG: optimize: fix bugs found in L-BFGS-B implementation

- #21695: ENH: `stats.chisquare`: add `sum_check` to disable check…

- #21697: MAINT: signal.lombscargle: fix numerical backward-compat

- #21699: BUG: sparse.linalg: remove faulty test of eigval order from ARPACK

- #21700: ENH: `stats.Mixture`: add mixture distributions for new infrastructure

- #21701: MAINT: interpolate: remove undocumented nu arg of BSpline.design_matrix

- #21702: MAINT: special: clean up factorial corner cases, including complex…

- #21703: DOC: sparse: update spdiags handling in `doc_string` and migration…

- #21705: MAINT: Allow greek Unicode symbols in linter.

- #21706: DEP: signal: deprecate object arrays in sosfilt

- #21707: ENH: `stats.make_distribution`: generate a `ContinuousDistribution`…

- #21710: ENH: sparse.linalg: convert sparse.linalg to use sparray internally

- #21711: BUG: special: Fix formula for division of dual numbers in xsf

- #21712: MAINT: special.logsumexp: preserve tiny imaginary components

- #21714: TST: stats.sampling: add fail slow exception

- #21718: DOC: `stats.bootstrap`: improve description of `paired`…

- #21719: BLD: macos-12 image deprecated [wheel build]

- #21721: MAINT: signal: lombscargle docstring tweaks and fix handling…

- #21723: DOC: Fixed a typo in the description of `scipy.sparse.csgraph.maximum_bipartite`…

- #21726: ENH: linalg.solve: add `assume_a='banded'`

- #21728: ENH: special: use boost in `nctdtr`

- #21729: MAINT: signal.lombscargle: vectorization changes and handling…

- #21730: MAINT: sparse.linalg: use @ for matmul in docs/tests for Linear…

- #21731: ENH: `stats.dpareto_lognorm`: add double Pareto lognormal…

- #21734: BUG: cluster: correct type of default value of `dist` in `ClusterNode`

- #21737: TST: differentiate: small tolerance bump on failing test

- #21739: BLD: fix issue with capitalisation when meson detects Accelerate

- #21744: ENH: special: Extend Riemann Zeta function to complex inputs

- #21746: ENH: stats: exponential, logarithm, and reciprocal of a random…

- #21748: MAINT: Updated pybind11 min version to 2.13.2

- #21749: MAINT/DEV: fix `python dev.py ipython` under Debian 12 / Python…

- #21751: BUG: array API conformance in cubature

- #21752: ENH: stats.truncate: truncated random variables

- #21753: DOC: sparse: migration to sparray guide updates

- #21754: MAINT: interpolate: rename `interpnd` -> `_interpnd`

- #21756: DOC: interpolate: detail `interp1d` recommended replacements

- #21763: BUG: handle pearsonr constant case with n=2 vectors

- #21765: MAINT: remove equality constraint that was impossible to satisfy…

- #21767: MAINT: `stats.ContinuousDistribution`: protect attributes,…

- #21768: BUG: sparse: fix ellipsis and bool array indexing combination

- #21770: DOC: stats: correct conclusion associated with high p-value

- #21773: DEP: special: Remove `special.btdtr` and `special.btdtri`

- #21774: API: `optimize.differential_evolution`: transition to Generator…

- #21776: BUG/ENH/DOC: spatial: Better handle & document `Rotation` splitting

- #21777: ENH: stats: absolute value of a random variable

- #21778: ENH: optimize: add array api support to `rosen` and friends

- #21779: ENH: sparse.csgraph: migrate to use sparray (code changes only)

- #21780: BUG: signal: Fix `ShortTimeFFT.extent()` for `fft_mode ==`…

- #21784: BUG: sparse: fix Asp @ vsp for 1D sparse vector and add tests

- #21785: MAINT: optimize: migration to sparray pass 1 changes

- #21789: ENH: integrate.nsum: support unimodal functions and infinite…

- #21790: ENH: stats: distributions of order statistics

- #21792: BUG: sparse: fix setdiag for matrices with missing diagonal entries

- #21793: CI: Move free-threaded-wheels.yml into wheels.yml

- #21794: BUG: stats.qmc: fix `get_poly_vinit` for multi-threading

- #21796: MAINT: Update `array_api_compat` submodule for the 2023.12…

- #21797: BUG: special: fix array index out of bound for `pro_rad2`

- #21799: ENH: sparse.linalg: add `is_sptriangular` and `spbandwidth`…

- #21800: DOC: signal.find_peaks: Document that widths are returned

- #21801: ENH: extend factorial{,2,k} to allow complex inputs

- #21802: MAINT: special: remove dependence of `xsf::numpy` on `sf_error`

- #21808: BUG: `signal.correlation_lags`: fail with meaningful error…

- #21811: ENH: differentiate: add array API support to `jacobian` and…

- #21812: API: interpolate.BarycentricInterpolator: transition to Generator…

- #21815: TST: interpolate: parametrize tests on `griddata`

- #21818: CI: Replace deadsnakes 3.13t by Quansight-Labs/setup-python action

- #21819: ENH: `stats.ContinuousDistribution`: improve method resolution…

- #21821: TST: optimize: mark MIP6 tests xslow

- #21822: TST: `stats.fit`: adjust tests for `seed`->``rng`` transition

- #21823: API: `optimize.dual_annealing`: adopt SPEC007

- #21824: BUG: sparse: fix `idx_dtype` when building index arrays in…

- #21825: DOC: make `_transition_to_rng` replace documentation of `rng`

- #21827: BUG: special: Fix behavior of `gamma` and `gammasgn` at poles…

- #21831: DOC: fixup `_transition_to_rng` Oldest GCC `"'rng' is not`…

- #21832: CI: constrain array-api-strict version to allow conversion to…

- #21834: DOC: fft.fht: fix typo in example

- #21839: MAINT:sparse.linalg: Detach ARPACK and PROPACK code sharing

- #21840: DOC: interpolate: add a tutorial page for smoothing splines

- #21841: DOC: tone down the text of the “legacy” admonition

- #21843: MAINT: stats.lmoment: fixup keepdims behavior

- #21845: API: `optimize.check_grad`: transition to Generator (SPEC…

- #21847: API: optimize.basinhopping: transition to Generator (SPEC 7)

- #21848: API: `optimize.quadratic_assignment`: transition to rng (SPEC…

- #21849: DOC: interpolate: declare 1D FITPACK wrappers legacy

- #21850: BUG: linalg.svd: avoid segmentation fault

- #21851: STY: add comment about allowed whitespace in table

- #21853: DOC: replace only first paragraph of rng documentation

- #21854: API: `stats._resampling`: transition to rng (SPEC 7)

- #21856: MAINT, TST: `test_create_diagonal` GPU support

- #21857: BLD: warn on accelerate + non-native

- #21858: ENH: sparse: Add safe casting function for sparse index to sputils

- #21859: DOC: `signal.unit_impulse`: add explanation about delta

- #21860: MAINT: improve handling of thread-local storage

- #21861: MAINT: special: Use consistent std::isnan and std::isinf in a…

- #21864: DEP: remove scipy.misc

- #21865: MAINT: `fft`: Remove outdated documentation workaround

- #21867: MAINT: stats.wilcoxon: improve documentation and tests

- #21868: BUG: io.matlab: expose `varmats_from_mat`

- #21869: MAINT: stats.ContinuousDistribution: clarify conditions that…

- #21870: MAINT: spatial/special: follow-up on `std::isnan`, `std::isinf`

- #21871: ENH: stats.ContinuousDistribution.sample: generate QMC samples

- #21873: DOC: sparse.csgraph: update csgraph docs to use sparray

- #21875: MAINT: `interpolate.barycentric_interpolate`: add rng argument

- #21878: API: cluster: transition to rng (SPEC 7)

- #21880: API: `linalg.clarkson_woodruff_transform`: transition to…

- #21881: API: `stats`: transition `goodness_of_fit`, `sobol_indices`...

- #21883: DOC/MAINT: Fix some typos regarding GitHub

- #21886: API: `stats.{PermutationMethod,BootstrapMethod}`: transition…

- #21888: API: `sparse`: transition `random`-like functions to…

- #21891: BUG: spatial: guard `distance_wrap` directives

- #21892: MAINT: `_lib`: use `is_numpy` etc helpers from the compat…

- #21893: MAINT: linalg.interpolative: normalize rng argument (SPEC7)

- #21895: MAINT: bump array-api-extra

- #21897: MAINT: Hausdorff Generator handling

- #21901: MAINT: stats.dpareto_lognorm._cdf: treat special case at x=0

- #21903: MAINT: Silence warnings during linprog benchmarks

- #21904: BUG: fix nogil LinearNDInterpolator

- #21905: MAINT: io: migration to use sparray in IO

- #21906: CI: gha update

- #21909: DOC: io.loadmat: document `uint16_codec` parameter

- #21912: BUG: integrate.trapezoid: fix broadcasting issue

- #21913: API: `spatial.directed_hausdorff`: transition to ‘rng’ keyword…

- #21914: MAINT: `spatial.transform.Rotation.random`: transition to…

- #21916: MAINT, TST: differentiate: `test_examples` tolerance bump

- #21917: BLD: fortran: only use `-std=legacy` for gfortran

- #21918: BUG: `optimize.curve_fit`: fix sigma dimension issue with…

- #21919: Call `lcov` to generate coverage reports for C, C++ and Fortran…

- #21921: DEP: `stats.ttest_ind`: deprecate `random_state` and `permutation`…

- #21926: REV: Revert “MAINT: io: move `_test_fortran` under `tests`...

- #21928: DEV: `gh_lists`: fix warnings

- #21929: MAINT: bump array-api-extra to 0.2.0

- #21930: TST: sparse.linalg: tweak rtol for flaky `expm_multiply` test

- #21931: MAINT: stats.qmc: transition to rng (SPEC 7)

- #21932: ENH: integrate.nsum: add array API standard support

- #21937: TST: linalg.blas: fix test concurrency, mark `\*ger` as unsafe

- #21938: TST: linalg: do not call `np.asarray_chkfinite(np.empty((3,`…

- #21941: DOC: add docs on parallel execution and thread safety

- #21943: MAINT: mark f2py-generated extension modules as safe to run without…

- #21944: MAINT: sparse: add `broadcast_shapes` function to `_sputils.py`

- #21947: TST: stats.chatterjeexi: fix error message

- #21948: TST: add more thorough SPEC 7 tests

- #21950: CI: fix `Intel oneAPI tests` job

- #21953: TST: stats.rdist: skip failing xslow test

- #21954: ENH: sparse: ensure thread-safety

- #21955: ENH: spatial: ensure thread-safety

- #21961: MAINT: free-threading: declare HiGHS, `ndimage._rank_filter_1d`…

- #21964: TST: optimize: slight tolerance bump for a dual-annealing test

- #21965: ENH: special: ensure tests are thread-safe

- #21967: DOC: stats.goodness_of_fit: clarify distinction between known/fit…

- #21973: DEV: lint: disable UP031

- #21974: DEV: add `conda-build` to `environment.yml`

- #21975: CI: use stable NumPy for “old build”

- #21976: TST: `optimize.elementwise.bracket_root`: fix torch test…

- #21977: ENH: integrate.tanhsinh: make `_tanhsinh` public

- #21979: API: integrate.simpson: allow `x` to be passed positionally

- #21981: MAINT: purge `from __future__ import annotations`

- #21982: DOC: SciPy 1.15.0 relnotes

- #21983: BUG: linalg: fix cython import order

- #21984: BUG: signal: actually reject objects in correlate/convolve

- #21985: DOC: optimize.root: fix docs for `inner_\*` parameters

- #21989: DOC: integrate.tanhsinh: fix reference format; Examples heading

- #21990: CI: remove setting macOS 10.9 for SDK and deployment target

- #21991: BUG: `stats.sobol_indices`: fix mutation of input parameters

- #21992: DOC: Unhide `toctree` in `scipy.cluster` with `maxdepth`…

- #21994: BLD: Remove `ld_classic` usage on macOS

- #21996: ENH: `stats.fisher_exact`: extend to `R x C` tables

- #21998: MAINT, DOC: Use Jupytext’s API, and fix cross-platform usage…

- #22002: TST: Run complex zeta avoid underflow tests only on platforms…

- #22003: DEV: unified git submodule exclusion for tools

- #22009: TST: differentiate.jacobian: tolerance bump for float32

- #22024: MAINT: version pins/prep for 1.15.0rc1

- #22025: DOC: stats: probability tutorial/transition guide

- #22026: MAINT: stats.Mixture: fix default `weights`

- #22027: MAINT: stats.ContinuousDistribution: improve doc generation;…

- #22030: MAINT: `stats.FoldedDistribution`: accommodate for private…

- #22032: MAINT: fix mypy complaints

- #22033: TST: fix sparse.linalg failures for tfmqr and svds

- #22036: DOC: adapt to NumPy 2.2 changes for abbreviation of large arrays

- #22037: MAINT: stats: Add custom reprs for transformed distributions

- #22040: MAINT: `stats.make_distribution`: support more existing distributions

- #22043: ENH: sparse: make two sputils public for easier index array casting

- #22048: TST: integrate.tanhsinh: fix abscissae/weight “compression” bug

- #22050: MAINT: `stats.order_statistic`: override `support`

- #22058: DOC: `stats.order_statistic`: add ‘Returns’ section

- #22059: TST: temp skip of extending tests

- #22067: MAINT: 1.15.0rc1 backports

- #22078: REL: set 1.15.0rc2 unreleased

- #22081: MAINT: Add `__str__` overrides for distributions in new infra…

- #22082: BUG, DOC: fixup md5 hash reporting

- #22085: DOC: sparse: explicit dtypes for nonzero()

- #22091: DOC: Update special release notes

- #22098: DOC: mention the removal of AccuracyWarning

- #22099: DEP: update version in deprecation warning of interpnd

- #22104: DOC: 1.15.0 release note updates

- #22106: DOC: sparse: correct `eye_array` docs for first shape input…

- #22107: MAINT/DOC: Doctests fix scpdt 1.6

- #22113: ENH: sparse: enhance dtype checking in constructors

- #22124: DOC: Fix incorrect reference to “Random Variable Transition Guide”…

- #22129: ENH: sparse: nD cleanup and docs

- #22135: MAINT: _lib: add missing f string to _deprecate_positional_args

- #22139: MAINT: stats._SimpleDomain: ensure that instances do not share…

- #22149: MAINT: stats.ContinuousDistribution.llf: remove method

- #22150: MAINT: SciPy 1.15.0rc2 backports

- #22156: DEP: deprecation warnings for `special.lpn` and `[c]lpmn`

- #22158: MAINT: accept ndarray subclasses in interpolate._dierckx

- #22162: TYP: temporarily ignore the `numpy==2.2.1` mypy errors

- #22167: DEP: special: deprecation warning for `sph_harm` + comments

- #22168: BUG: fix incorrect values in factorial for 0 with uint dtypes

- #22175: MAINT: stats: fix thread-safety issues under free-threaded CPython

- #22177: MAINT: fix extension module not declaring free-threading support,…

- #22181: REL: set 1.15.0rc3 unreleased

- #22193: DEP: linalg.solve_toeplitz/matmul_toeplitz: warn on n-D `c`...

- #22225: DOC: differentiate.jacobian: correct/improve documentation about…