Skip to main content
`Ctrl`+`K`

# SciPy 1.12.0 Release Notes

SciPy 1.12.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.12.x branch, and on adding new features on the main branch.

This release requires Python 3.9+ and NumPy 1.22.4 or greater.

For running on PyPy, PyPy3 6.0+ is required.

## Highlights of this release

- Experimental support for the array API standard has been added to part of `scipy.special`, and to all of `scipy.fft` and `scipy.cluster`. There are likely to be bugs and early feedback for usage with CuPy arrays, PyTorch tensors, and other array API compatible libraries is appreciated. Use the `SCIPY_ARRAY_API` environment variable for testing.

- A new class, `ShortTimeFFT`, provides a more versatile implementation of the short-time Fourier transform (STFT), its inverse (ISTFT) as well as the (cross-) spectrogram. It utilizes an improved algorithm for calculating the ISTFT.

- Several new constructors have been added for sparse arrays, and many operations now additionally support sparse arrays, further facilitating the migration from sparse matrices.

- A large portion of the `scipy.stats` API now has improved support for handling `NaN` values, masked arrays, and more fine-grained shape-handling. The accuracy and performance of a number of `stats` methods have been improved, and a number of new statistical tests and distributions have been added.

## New features

### `scipy.cluster` improvements

- Experimental support added for the array API standard; PyTorch tensors, CuPy arrays and array API compatible array libraries are now accepted (GPU support is limited to functions with pure Python implementations). CPU arrays which can be converted to and from NumPy are supported module-wide and returned arrays will match the input type. This behaviour is enabled by setting the `SCIPY_ARRAY_API` environment variable before importing `scipy`. This experimental support is still under development and likely to contain bugs - testing is very welcome.

### `scipy.fft` improvements

- Experimental support added for the array API standard; functions which are part of the `fft` array API standard extension module, as well as the Fast Hankel Transforms and the basic FFTs which are not in the extension module, now accept PyTorch tensors, CuPy arrays and array API compatible array libraries. CPU arrays which can be converted to and from NumPy arrays are supported module-wide and returned arrays will match the input type. This behaviour is enabled by setting the `SCIPY_ARRAY_API` environment variable before importing `scipy`. This experimental support is still under development and likely to contain bugs - testing is very welcome.

### `scipy.integrate` improvements

- Added `scipy.integrate.cumulative_simpson` for cumulative quadrature from sampled data using Simpson’s 1/3 rule.

### `scipy.interpolate` improvements

- New class `NdBSpline` represents tensor-product splines in N dimensions. This class only knows how to evaluate a tensor product given coefficients and knot vectors. This way it generalizes `BSpline` for 1D data to N-D, and parallels `NdPPoly` (which represents N-D tensor product polynomials). Evaluations exploit the localized nature of b-splines.

- `NearestNDInterpolator.__call__` accepts `**query_options`, which are passed through to the `KDTree.query` call to find nearest neighbors. This allows, for instance, to limit the neighbor search distance and parallelize the query using the `workers` keyword.

- `BarycentricInterpolator` now allows computing the derivatives.

- It is now possible to change interpolation values in an existing `CloughTocher2DInterpolator` instance, while also saving the barycentric coordinates of interpolation points.

### `scipy.linalg` improvements

- Access to new low-level LAPACK functions is provided via `dtgsyl` and `stgsyl`.

### `scipy.ndimage` improvements

### `scipy.optimize` improvements

- `scipy.optimize.isotonic_regression` has been added to allow nonparametric isotonic regression.

- `scipy.optimize.nnls` is rewritten in Python and now implements the so-called fnnls or fast nnls, making it more efficient for high-dimensional problems.

- The result object of `scipy.optimize.root` and `scipy.optimize.root_scalar` now reports the method used.

- The `callback` method of `scipy.optimize.differential_evolution` can now be passed more detailed information via the `intermediate_results` keyword parameter. Also, the evolution `strategy` now accepts a callable for additional customization. The performance of `differential_evolution` has also been improved.

- `scipy.optimize.minimize` method `Newton-CG` now supports functions that return sparse Hessian matrices/arrays for the `hess` parameter and is slightly more efficient.

- `scipy.optimize.minimize` method `BFGS` now accepts an initial estimate for the inverse of the Hessian, which allows for more efficient workflows in some circumstances. The new parameter is `hess_inv0`.

- `scipy.optimize.minimize` methods `CG`, `Newton-CG`, and `BFGS` now accept parameters `c1` and `c2`, allowing specification of the Armijo and curvature rule parameters, respectively.

- `scipy.optimize.curve_fit` performance has improved due to more efficient memoization of the callable function.

### `scipy.signal` improvements

- `freqz`, `freqz_zpk`, and `group_delay` are now more accurate when `fs` has a default value.

- The new class `ShortTimeFFT` provides a more versatile implementation of the short-time Fourier transform (STFT), its inverse (ISTFT) as well as the (cross-) spectrogram. It utilizes an improved algorithm for calculating the ISTFT based on dual windows and provides more fine-grained control of the parametrization especially in regard to scaling and phase-shift. Functionality was implemented to ease working with signal and STFT chunks. A section has been added to the “SciPy User Guide” providing algorithmic details. The functions `stft`, `istft` and `spectrogram` have been marked as legacy.

### `scipy.sparse` improvements

- `sparse.linalg` iterative solvers `sparse.linalg.cg`, `sparse.linalg.cgs`, `sparse.linalg.bicg`, `sparse.linalg.bicgstab`, `sparse.linalg.gmres`, and `sparse.linalg.qmr` are rewritten in Python.

- Updated vendored SuperLU version to `6.0.1`, along with a few additional fixes.

- Sparse arrays have gained additional constructors: `eye_array`, `random_array`, `block_array`, and `identity`. `kron` and `kronsum` have been adjusted to additionally support operation on sparse arrays.

- Sparse matrices now support a transpose with `axes=(1, 0)`, to mirror the `.T` method.

- `LaplacianNd` now allows selection of the largest subset of eigenvalues, and additionally now supports retrieval of the corresponding eigenvectors. The performance of `LaplacianNd` has also been improved.

- The performance of `dok_matrix` and `dok_array` has been improved, and their inheritance behavior should be more robust.

- `hstack`, `vstack`, and `block_diag` now work with sparse arrays, and preserve the input sparse type.

- A new function, `scipy.sparse.linalg.matrix_power`, has been added, allowing for exponentiation of sparse arrays.

### `scipy.spatial` improvements

- Two new methods were implemented for `spatial.transform.Rotation`: `__pow__` to raise a rotation to integer or fractional power and `approx_equal` to check if two rotations are approximately equal.

- The method `Rotation.align_vectors` was extended to solve a constrained alignment problem where two vectors are required to be aligned precisely. Also when given a single pair of vectors, the algorithm now returns the rotation with minimal magnitude, which can be considered as a minor backward incompatible change.

- A new representation for `spatial.transform.Rotation` called Davenport angles is available through `from_davenport` and `as_davenport` methods.

- Performance improvements have been added to `distance.hamming` and `distance.correlation`.

- Improved performance of `SphericalVoronoi` `sort_vertices_of_regions` and two dimensional area calculations.

### `scipy.special` improvements

- Added `scipy.special.stirling2` for computation of Stirling numbers of the second kind. Both exact calculation and an asymptotic approximation (the default) are supported via `exact=True` and `exact=False` (the default) respectively.

- Added `scipy.special.betaincc` for computation of the complementary incomplete Beta function and `scipy.special.betainccinv` for computation of its inverse.

- Improved precision of `scipy.special.betainc` and `scipy.special.betaincinv`.

- Experimental support added for alternative backends: functions `scipy.special.log_ndtr`, `scipy.special.ndtr`, `scipy.special.ndtri`, `scipy.special.erf`, `scipy.special.erfc`, `scipy.special.i0`, `scipy.special.i0e`, `scipy.special.i1`, `scipy.special.i1e`, `scipy.special.gammaln`, `scipy.special.gammainc`, `scipy.special.gammaincc`, `scipy.special.logit`, and `scipy.special.expit` now accept PyTorch tensors and CuPy arrays. These features are still under development and likely to contain bugs, so they are disabled by default; enable them by setting a `SCIPY_ARRAY_API` environment variable to `1` before importing `scipy`. Testing is appreciated!

### `scipy.stats` improvements

- Added `scipy.stats.quantile_test`, a nonparametric test of whether a hypothesized value is the quantile associated with a specified probability. The `confidence_interval` method of the result object gives a confidence interval of the quantile.

- `scipy.stats.sampling.FastGeneratorInversion` provides a convenient interface to fast random sampling via numerical inversion of distribution CDFs.

- scipy.stats.geometric_discrepancy adds geometric/topological discrepancy metrics for random samples.

- `scipy.stats.multivariate_normal` now has a `fit` method for fitting distribution parameters to data via maximum likelihood estimation.

- `scipy.stats.bws_test` performs the Baumgartner-Weiss-Schindler test of whether two-samples were drawn from the same distribution.

- `scipy.stats.jf_skew_t` implements the Jones and Faddy skew-t distribution.

- `scipy.stats.anderson_ksamp` now supports a permutation version of the test using the `method` parameter.

- The `fit` methods of `scipy.stats.halfcauchy`, `scipy.stats.halflogistic`, and `scipy.stats.halfnorm` are faster and more accurate.

- `scipy.stats.beta` `entropy` accuracy has been improved for extreme values of distribution parameters.

- The accuracy of `sf` and/or `isf` methods have been improved for several distributions: `scipy.stats.burr`, `scipy.stats.hypsecant`, `scipy.stats.kappa3`, `scipy.stats.loglaplace`, `scipy.stats.lognorm`, `scipy.stats.lomax`, `scipy.stats.pearson3`, `scipy.stats.rdist`, and `scipy.stats.pareto`.

- The following functions now support parameters `axis`, `nan_policy`, and `keep_dims`: `scipy.stats.entropy`, `scipy.stats.differential_entropy`, `scipy.stats.variation`, `scipy.stats.ansari`, `scipy.stats.bartlett`, `scipy.stats.levene`, `scipy.stats.fligner`, `scipy.stats.circmean`, `scipy.stats.circvar`, `scipy.stats.circstd`, `scipy.stats.tmean`, `scipy.stats.tvar`, `scipy.stats.tstd`, `scipy.stats.tmin`, `scipy.stats.tmax`, and `scipy.stats.tsem`.

- The `logpdf` and `fit` methods of `scipy.stats.skewnorm` have been improved.

- The beta negative binomial distribution is implemented as `scipy.stats.betanbinom`.

- Improved performance of `scipy.stats.invwishart` `rvs` and `logpdf`.

- A source of intermediate overflow in `scipy.stats.boxcox_normmax` with `method='mle'` has been eliminated, and the returned value of `lmbda` is constrained such that the transformed data will not overflow.

- `scipy.stats.nakagami` `stats` is more accurate and reliable.

- A source of intermediate overflow in scipy.norminvgauss.pdf has been eliminated.

- Added support for masked arrays to `scipy.stats.circmean`, `scipy.stats.circvar`, `scipy.stats.circstd`, and `scipy.stats.entropy`.

- `scipy.stats.dirichlet` has gained a new covariance (`cov`) method.

- Improved accuracy of `entropy` method of `scipy.stats.multivariate_t` for large degrees of freedom.

- `scipy.stats.loggamma` has an improved `entropy` method.

## Deprecated features

- Error messages have been made clearer for objects that don’t exist in the public namespace and warnings sharpened for private attributes that are not supposed to be imported at all.

- `scipy.signal.cmplx_sort` has been deprecated and will be removed in SciPy 1.15. A replacement you can use is provided in the deprecation message.

- Values the argument `initial` of `scipy.integrate.cumulative_trapezoid` other than `0` and `None` are now deprecated.

- `scipy.stats.rvs_ratio_uniforms` is deprecated in favour of `scipy.stats.sampling.RatioUniforms`

- `scipy.integrate.quadrature` and `scipy.integrate.romberg` have been deprecated due to accuracy issues and interface shortcomings. They will be removed in SciPy 1.15. Please use `scipy.integrate.quad` instead.

- Coinciding with upcoming changes to function signatures (e.g. removal of a deprecated keyword), we are deprecating positional use of keyword arguments for the affected functions, which will raise an error starting with SciPy 1.14. In some cases, this has delayed the originally announced removal date, to give time to respond to the second part of the deprecation. Affected functions are:

  - `linalg.{eigh, eigvalsh, pinv}`

  - `integrate.simpson`

  - `signal.{firls, firwin, firwin2, remez}`

  - `sparse.linalg.{bicg, bicgstab, cg, cgs, gcrotmk, gmres, lgmres, minres, qmr, tfqmr}`

  - `special.comb`

  - `stats.kendalltau`

- All wavelet functions have been deprecated, as PyWavelets provides suitable implementations; affected functions are: `signal.{daub, qmf, cascade, morlet, morlet2, ricker, cwt}`

- `scipy.integrate.trapz`, `scipy.integrate.cumtrapz`, and `scipy.integrate.simps` have been deprecated in favour of `scipy.integrate.trapezoid`, `scipy.integrate.cumulative_trapezoid`, and `scipy.integrate.simpson` respectively and will be removed in SciPy 1.14.

- The `tol` argument of `scipy.sparse.linalg.{bcg,bicstab,cg,cgs,gcrotmk,gmres,lgmres,minres,qmr,tfqmr}` is now deprecated in favour of `rtol` and will be removed in SciPy 1.14. Furthermore, the default value of `atol` for these functions is due to change to `0.0` in SciPy 1.14.

## Expired Deprecations

There is an ongoing effort to follow through on long-standing deprecations. The following previously deprecated features are affected:

- The `centered` keyword of `scipy.stats.qmc.LatinHypercube` has been removed. Use `scrambled=False` instead of `centered=True`.

- `scipy.stats.binom_test` has been removed in favour of `scipy.stats.binomtest`.

- In `scipy.stats.iqr`, the use of `scale='raw'` has been removed in favour of `scale=1`.

- Functions from NumPy’s main namespace which were exposed in SciPy’s main namespace, such as `numpy.histogram` exposed by `scipy.histogram`, have been removed from SciPy’s main namespace. Please use the functions directly from `numpy`.

## Backwards incompatible changes

## Other changes

- The arguments used to compile and link SciPy are now available via `show_config`.

## Authors

- Name (commits)

- endolith (1)

- h-vetinari (34)

- Tom Adamczewski (3) +

- Anudeep Adiraju (1) +

- akeemlh (1)

- Alex Amadori (2) +

- Raja Yashwanth Avantsa (2) +

- Seth Axen (1) +

- Ross Barnowski (1)

- Dan Barzilay (1) +

- Ashish Bastola (1) +

- Christoph Baumgarten (2)

- Ben Beasley (3) +

- Doron Behar (1)

- Peter Bell (1)

- Sebastian Berg (1)

- Ben Boeckel (1) +

- David Boetius (1) +

- Matt Borland (1)

- Jake Bowhay (103)

- Larry Bradley (1) +

- Dietrich Brunn (5)

- Evgeni Burovski (102)

- Matthias Bussonnier (18)

- CJ Carey (6)

- Colin Carroll (1) +

- Aadya Chinubhai (1) +

- Luca Citi (1)

- Lucas Colley (141) +

- com3dian (1) +

- Anirudh Dagar (4)

- Danni (1) +

- Dieter Werthmüller (1)

- John Doe (2) +

- Philippe DONNAT (2) +

- drestebon (1) +

- Thomas Duvernay (1)

- elbarso (1) +

- emilfrost (2) +

- Paul Estano (8) +

- Evandro (2)

- Franz Király (1) +

- Nikita Furin (1) +

- gabrielthomsen (1) +

- Lukas Geiger (9) +

- Artem Glebov (22) +

- Caden Gobat (1)

- Ralf Gommers (127)

- Alexander Goscinski (2) +

- Rohit Goswami (2) +

- Olivier Grisel (1)

- Matt Haberland (244)

- Charles Harris (1)

- harshilkamdar (1) +

- Alon Hovav (2) +

- Gert-Ludwig Ingold (1)

- Romain Jacob (1) +

- jcwhitehead (1) +

- Julien Jerphanion (13)

- He Jia (1)

- JohnWT (1) +

- jokasimr (1) +

- Evan W Jones (1)

- Karen Róbertsdóttir (1) +

- Ganesh Kathiresan (1)

- Robert Kern (11)

- Andrew Knyazev (4)

- Uwe L. Korn (1) +

- Rishi Kulkarni (1)

- Kale Kundert (3) +

- Jozsef Kutas (2)

- Kyle0 (2) +

- Robert Langefeld (1) +

- Jeffrey Larson (1) +

- Jessy Lauer (1) +

- lciti (1) +

- Hoang Le (1) +

- Antony Lee (5)

- Thilo Leitzbach (4) +

- LemonBoy (2) +

- Ellie Litwack (8) +

- Thomas Loke (4) +

- Malte Londschien (1) +

- Christian Lorentzen (6)

- Adam Lugowski (10) +

- lutefiskhotdish (1)

- mainak33 (1) +

- Ben Mares (11) +

- mart-mihkel (2) +

- Mateusz Sokół (24) +

- Nikolay Mayorov (4)

- Nicholas McKibben (1)

- Melissa Weber Mendonça (7)

- Michał Górny (1)

- Kat Mistberg (2) +

- mkiffer (1) +

- mocquin (1) +

- Nicolas Mokus (2) +

- Sturla Molden (1)

- Roberto Pastor Muela (3) +

- Bijay Nayak (1) +

- Andrew Nelson (105)

- Praveer Nidamaluri (3) +

- Lysandros Nikolaou (2)

- Dimitri Papadopoulos Orfanos (7)

- Pablo Rodríguez Pérez (1) +

- Dimitri Papadopoulos (2)

- Tirth Patel (14)

- Kyle Paterson (1) +

- Paul (4) +

- Yann Pellegrini (2) +

- Matti Picus (4)

- Ilhan Polat (36)

- Pranav (1) +

- Bharat Raghunathan (1)

- Chris Rapson (1) +

- Matteo Raso (4)

- Tyler Reddy (215)

- Martin Reinecke (1)

- Tilo Reneau-Cardoso (1) +

- resting-dove (2) +

- Simon Segerblom Rex (4)

- Lucas Roberts (2)

- Pamphile Roy (31)

- Feras Saad (3) +

- Atsushi Sakai (3)

- Masahiro Sakai (2) +

- Omar Salman (14)

- Andrej Savikin (1) +

- Daniel Schmitz (55)

- Dan Schult (19)

- Scott Shambaugh (9)

- Sheila-nk (2) +

- Mauro Silberberg (3) +

- Maciej Skorski (1) +

- Laurent Sorber (1) +

- Albert Steppi (28)

- Kai Striega (1)

- Saswat Susmoy (1) +

- Alex Szatmary (1) +

- Søren Fuglede Jørgensen (3)

- othmane tamri (3) +

- Ewout ter Hoeven (1)

- Will Tirone (1)

- TLeitzbach (1) +

- Kevin Topolski (1) +

- Edgar Andrés Margffoy Tuay (1)

- Dipansh Uikey (1) +

- Matus Valo (3)

- Christian Veenhuis (2)

- Nicolas Vetsch (1) +

- Isaac Virshup (7)

- Hielke Walinga (2) +

- Stefan van der Walt (2)

- Warren Weckesser (7)

- Bernhard M. Wiedemann (4)

- Levi John Wolf (1)

- Xuefeng Xu (4) +

- Rory Yorke (2)

- YoussefAli1 (1) +

- Irwin Zaid (4) +

- Jinzhe Zeng (1) +

- JIMMY ZHAO (1) +

A total of 163 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.12.0

- #2725: Barycentric interpolation should allow evaluation of derivatives

- #4244: betaincinv accuracy

- #4677: Unexpected behavior from scipy.special.btdtri

- #4819: Comparison operator overloading doesn’t work with sparse matrices

- #5022: bicg returns last iterate, not the smallest-residue vector

- #6198: callback for Krylov methods

- #7241: ENH: Implement Chandrupatla’s algorithm for root finding (simpler/faster…

- #8792: Newton-CG throws error when Hessian is a `scipy.sparse` class

- #9527: Anderson-Darling ksamples can not estimate p-values beyond given…

- #11516: Recommend ccache for benchmarks in contributor documentation

- #12017: Expose FACTOR parameter instead of using magic number in scipy.optimize.nnls

- #12748: Convergence issue of GMRES

- #12796: BUG: nonmonotonicity in betaincinv, btdtri, stats.beta.ppf

- #13306: griddata with multiple data values

- #13437: DOC: Add example as to how to use solve_ivp to solve complex…

- #14037: ENH: other quality metrics for random sampling

- #14480: LSODA implementation of dense output yields incorrect result

- #15676: ENH: Implement `multivariate_normal.fit`

- #15738: DEP: change default of atol in `scipy.sparse.linalg.*`

- #16729: _fitpack / dfitpack duplication

- #16880: ENH: Add Rotation.align_vector

- #17290: ENH: multi dimensional wasserstein/earth mover distance in Scipy

- #17398: BUG: Documentation for `scipy.optimize.differential_evolution`…

- #17462: ENH: Create Rotations by aligning a primary axis and best-fitting…

- #17493: BUG: stats: Occasional failures of some tests of `levy_stable`

- #17572: BUG: Deprecation warning says to use non-existent symbols

- #17706: ENH: add isotonic regression

- #17734: BUG: dijkstra algorithm is returning different results in v1.10…

- #17744: BUG: test_maxiter_worsening[lgmres] failed on riscv

- #17756: DOC: dimension clarification in `directed_hausdorff `

- #17771: BUG: cannot import ODEintWarning from scipy.integrate

- #17864: ENH: feature request for initial hessian estimate in scipy bfgs…

- #17890: ENH: Stirling Numbers of the second Kind

- #18093: BUG: entropy calculations failing for large values

- #18279: BUG: deprecation warnings for private API are misleading

- #18316: DOC: update scipy.stats.truncnorm.rvs example

- #18389: BUG: Yeo-Johnson Power Transformer gives Numpy warning

- #18404: ENH: Add wrapper for LAPACK functions stgsyl and dtgsyl

- #18432: BUG: levy_stable.pdf does not use pdf_default_method_name attribute

- #18452: BUG: DST 2 and 3 with `norm=”ortho”` are not orthogonal

- #18457: DOC: clarify that `prewitt` filter does not return the magnitude…

- #18506: BUG: Strange behavior of scipy.stats.hypergeom.sf function with…

- #18511: BUG: Incorrect hypergeometric mean calculation

- #18564: BUG: `rv_discrete` fails when support is unbounded below

- #18568: BUG: circe-ci eigenvalue-LOBPCG benchmarks do not check accuracy…

- #18577: DEP: deprecate positional arguments in `sparse.gmres`

- #18578: DEP: deprecate positional arguments in `stats.kendalltau`

- #18579: DEP: deprecate positional arguments in `firwin*`

- #18580: DEP: removal of `scale=’raw’` in `iqr`

- #18581: DEP: removal of `stats.binom_test`

- #18582: DEP: removal of parameter `centered` of `stats.qmc.LatinHypercube`

- #18592: Semantics of sparse array creation functions

- #18637: BUG: Anaconda environment creation with python 3.11

- #18639: ENH: `multivariate_normal.rvs` extremely slow

- #18643: DOC: Problem with the randint description

- #18647: BUG: dgbmv gives “(len(x)>offx+(trans==0?m-1:n-1)*abs(incx))…

- #18651: DOC: Missing equal sign in equation of Lomb-Scargle periodogram

- #18669: DOC: sparse docs “matrix” and “array” mixup

- #18680: stats: XSLOW test failures in TestFit

- #18702: DEP: deprecate aliased integration methods that are (close to)…

- #18721: TST: Cause of `test_linsolve.py` test failure

- #18748: [DOC] Incorrect docstring for `boxcox_normmax` argument `method=”mle”`,…

- #18836: DOC: API reference doesn’t point users to replacement for interp1d

- #18838: BUG: stats.burr12: distribution returns invalid moments

- #18839: ENH: concatenating sparse arrays should return sparse arrays

- #18849: BUG: `python dev.py bench` fails

- #18860: BUG/BENCH: clough_tocher benchmark fails

- #18864: BUG: curve_fit memoization causes significant overhead in function…

- #18868: CI/BENCH: Fail on error

- #18876: DOC: integrate: clarify that event and jac must have the same…

- #18881: DOC: lobpcg examples improvement

- #18903: DOC: links in hacking.rst go back to hacking.rst instead of their…

- #18939: ENH: add new representations for Sakurai and Mikota matrices…

- #18944: How to change the default setup for using res.plot()

- #18953: BUG: ``scipy.optimize._differentialevolution`` incorrectly…

- #18966: BUG: `PyArray_MAX` no longer available in `numpy/arrayobject.h`

- #18981: ENH: Publish musllinux wheels to PyPI

- #18984: DOC: scipy.stats.lognorm — SciPy v1.12.0.dev Manual

- #18987: BUG: reproducible builds problem in _stats_pythran.cpython-311-x86_64-linux-gnu.so

- #19008: DOC: error in scipy.integrate.DOP853

- #19009: DOC: Maybe a typo on the parameter ‘alternative’ in the Mann-Whitney…

- #19024: BUG: #18481 made BFGS minimization less accurate

- #19039: BUG: stats.zscore returns all NaN if given masked array with…

- #19049: TST: add test for gh-17918

- #19056: ENH: add computing a selected number `m` of extreme eigenpairs…

- #19063: DOC: typo in scipy.linalg.pinv.html

- #19075: ENH: Allow to choose line-search parameters in related optimization…

- #19082: MAINT, REL: Programming Language directive

- #19090: BUG: root_scalar (newton method), inconsistent objective function…

- #19092: ENH: update vendored SuperLU version

- #19098: ENH: add method in RootResults of root_scalar and root

- #19102: BUG: `least_squares` with `method=’trf’` with initial params…

- #19117: TST/MAINT: `AssertionError`s with fresh build on M1 macOS

- #19118: BUG: `np`-coercible array-likes are not accepted with array…

- #19140: DOC: stats: alternative loc-scale handling in levy_stable

- #19147: BUG: asfarray is removed from numpy

- #19150: build warnings from pythran (?)

- #19158: BUG: Source archives have bogus timestamps

- #19161: ENH: allow `sparse_matrix.transpose(axes=(1, 0))`

- #19167: BUG: build graph non-determinism

- #19177: TST: SphericalVoronoi tests not sensitive to regions internal…

- #19185: BUG: minimize_scalar not checking entire area specified by bounds

- #19188: DOC: 1D arrays with KDTree

- #19190: TST: skip reason incorrect in some cases, related to array API…

- #19193: DOC: typo in scipy.stats.Covariance

- #19241: BUG: utils from scipy.sparse.sputils are not available from scipy.sparse…

- #19273: Calculation of frequencies w is not accurate when fs is default…

- #19276: MAINT: array types: make `compliance_scipy` more strict

- #19332: ENH: help `skewnorm.fit` find global minimum

- #19352: CI, BUILD: SciPy build failure with Cython 3.0.3 (bisected)

- #19363: DOC: inconsistent terminology at scipy.interpolate.griddata.html

- #19373: DOC: interpolate: add note to BarycentricInterpolator.add_xi…

- #19396: BUG: L-BFGS-B has surprisingly high memory consumption

- #19398: BUG: Missing assertion in test_filter_design.py

- #19406: CI, MAINT: known CI issue with NumPy main/latest

- #19442: BUG: Error collecting tests due to inconsistent parameterization…

- #19448: DOC:fft: next_fast_len signature is empty in docs

- #19490: MAINT: lint: fail inventory

- #19544: DOC/MAINT: refguide-check errors

- #19553: BUG: Test suite leaks file descriptors (`OSError: [Errno 24]…

- #19565: DOC/DX: `meson-python` missing from ‘required build dependencies’

- #19568: DOC/DX: `cd scipy` missing from ‘Building from source’

- #19575: BUG: scipy.ndimage.watershed_ift cost data type is too small…

- #19577: Windows build problems related to fast matrix market parts

- #19599: ENH: Returning NotImplemented when multiplying sparse arrays…

- #19612: ENH: add best cost function evaluation to differential evolution…

- #19616: BUG: Normal Inverse Gaussian numerically unstable

- #19620: _lib: Test error in test_warning_calls_filters because of a Python…

- #19636: DOC: issue in documentation for the callback argument in scipy.optimize.minimize

- #19640: CI, MAINT: pre-release job failures with scipy-openblas32

- #19726: BUG: 1.12.0rc1: build failure on windows due to macro collision…

- #19747: BUG: Invalid `IndexError` from `scipy.stats.nbinom.logcdf`

- #19795: MAINT: need stable Pythran release for SciPy 1.12.0 RC2

- #19804: MAINT/TST: Warnings failing test suite with `pytest 8`

- #19852: CI, MAINT: Windows 3.11 CI failure with file access issue

- #19906: BUG: 1.12.0rc2 SciPy rather than scipy in `pip list` output

## Pull requests for 1.12.0

- #12680: ENH: stats: add nonparametric one-sample quantile test and CI

- #14103: DOC: integrate: Add complex matrix DE solution to examples

- #14552: BUG: Fix LSODA interpolation scheme

- #17408: ENH: Short-Time Fourier Transform (STFT) Enhancements

- #17452: ENH: Add the __pow__ operator for Rotations

- #17460: ENH: New Rotation method approx_equal()

- #17473: ENH: stats: multivariate Wasserstein distance/EMD

- #17495: DOC: Optimize: update DE documentation

- #17542: ENH: Extend Rotation.align_vectors() to allow an infinite weight,…

- #17697: ENH: special: Improvements for the incomplete beta functions.

- #17719: ENH: Add Chandrupatla’s algorithm to optimize._zeros_py.py to…

- #17722: ENH add pava and isotonic_regression

- #17728: ENH: Implemented Rotation.from_davenport and Rotation.as_davenport

- #17757: DOC: clarify input dimensions for `directed_hausdorff` method

- #17955: ENH: add simplified fast numerical inversion to stats.sampling

- #18103: ENH: add stirling2 function to `scipy.special`

- #18133: BUG: Fix fails of some tests and bad behaviour for x=zeta in…

- #18151: ENH: add cumulative_simpson integration to scipy.integrate

- #18156: ENH: Added loggamma entropy method

- #18197: ENH: Add derivatives for BarycentricInterpolator

- #18219: DEP: integrate: Deprecate `initial` values other than None…

- #18348: ENH: add private function to bracket root of monotonic function

- #18361: ENH: add `fit` method to `multivariate_normal`

- #18363: ENH: stats: add Baumgartner-Weiss-Schindler test

- #18376: ENH: CloughTocher2DInterpolator multiple times with different…

- #18465: ENH: asymptotic expansion for multivariate t entropy

- #18470: ENH: stats.anderson_ksamp: re-add permutation version of test

- #18477: DOC: stats.truncnorm: add example about truncation points

- #18481: MAINT: differentiable fns respect float width. Closes #15602

- #18488: MAINT:ENH:sparse.linalg: Rewrite iterative solvers in Python,…

- #18492: Add NdBSpline: n-dim tensor product b-spline object

- #18496: ENH: Faster _select_samples in _differential_evolution.py

- #18499: ENH: asymptotic expansion for beta entropy for large a and b

- #18544: ENH: sparse.linalg: Implement matrix_power()

- #18552: DOC: stats.laplace_asymmetric: note relationship between scale…

- #18570: ENH:optimize: Rewrite nnls in Python

- #18571: ENH: linalg: Add wrapper for `?tgsyl`

- #18575: REL: set version to 1.12.0.dev0

- #18585: DOC: stats.rv_discrete: note that default methods are not compatible…

- #18586: ENH: override sf for rdist distribution

- #18587: DEP: signal: deprecate cmplx_sort

- #18589: DEP: remove parameter centered of stats.qmc.LatinHypercube

- #18594: DOC: more explicit example usage of scipy.linalg.lu_factor

- #18602: MAINT: stats.hypergeom.mean: correct for large args

- #18606: ENH: override sf for Pearson3 distribution

- #18609: TST: update nonlin tests for sparse arrays

- #18610: DEP: stats: remove deprecated binom_test

- #18612: DEP: stats.iqr: remove deprecated `scale=’raw’`

- #18613: BUG: fix ortho mode in DST type 2/3

- #18614: MAINT: don’t override sf for loguniform/reciprocal distribution

- #18616: ENH: override sf in loglaplace distribution

- #18617: MAINT: interpolate: delete duplicated FITPACK bisplev interface

- #18620: MAINT: signal: avoid eval/exec in hilbert2

- #18622: MAINT: Move rvs_ratio_uniforms to sampling

- #18624: DEP: adjust deprecation of positional arguments

- #18631: ENH: Add `fast_matrix_market` to scipy.io

- #18633: BUG: Fix issue levy_stable.pdf

- #18640: MAINT: Fix lint warnings in `_traversal.pyx`

- #18641: ENH: makes `_covariance` a cached property

- #18649: DEP: scipy.stats.morestats: clarify deprecation warnings

- #18652: BUG: Fixes how the length of argument x of linalg.blas.?gbmv…

- #18653: DOC: Add missing equal sign to Lomb-Scargle periodogram equation

- #18661: CI: update `SCIPY_NIGHTLY_UPLOAD_TOKEN` on CirrusCI.

- #18664: ENH: stats.dirichlet: add covariance method

- #18666: DEV: update environment.yml, removing setuptools

- #18667: DEV: Add Windows specific instructions to environment.yml

- #18668: ENH: add machinery to support Array API

- #18670: MAINT: signal: deduplicate *ord functions

- #18677: TST: linalg: improve seeding of some tests that are a problem…

- #18679: MAINT:stats:Cythonize and remove Fortran statlib code

- #18682: TST: stats: fix xslow test failures

- #18686: DEV: Add ability to run memory benchmarks on macOS

- #18689: CI: test with Python 3.12-beta

- #18690: DOC: mention that `genlogistic` is one of several types of…

- #18692: MAINT: signal: replace `np.r_[“-1”, arrays]` by a more sane…

- #18694: DOC: signal: Updated Chebyshev 2 documentation

- #18695: ENH: override halflogistic fit for free parameters

- #18696: MAINT Fix broken link in scipy.optimize._differentialevolution.py

- #18699: DEP: integrate: deprecate old aliases

- #18705: MAINT Optimize link in scipy.optimize._differentialevolution.py

- #18706: DOC: linalg: various doc improvements

- #18708: MAINT: signal/dlsim: avoid using interp1d; use make_interp_spline…

- #18710: MAINT: remove np.r_[“-1”, …]

- #18712: MAINT: bump minimal supported NumPy version to 1.22.4

- #18713: MAINT: fix linter error in `_fitpack_impl.py`

- #18714: ENH: Improve beta entropy when one argument is large

- #18715: MAINT: signal: remove duplicated _atleast_2d_or_none

- #18718: TST: mark two tests of `lsq_linear` as xslow

- #18719: MAINT: optimize._chandrupatla: result object fixup

- #18720: DOC: Fix notational variation in _lbfgsb_py.py: “pg_i” and “proj…

- #18723: MAINT:sparse.linalg: Use _NoValue for deprecated kwargs

- #18726: ENH: improve halflogistic distribution fitting with fixed parameters

- #18727: MAINT: Add skip CI link to PR template

- #18728: MAINT: optimize._chandrupatla: refactor for code reuse

- #18729: DOC: Add note connecting weibull_min to standard exponential.

- #18734: MAINT: Update codeowners

- #18742: ENH: differential_evolution callback accepts intermediate_result

- #18744: TST:sparse.linalg:Relax test_hermitian_modes tolerances

- #18746: MAINT: forward port 1.11.0 relnotes

- #18755: ENH: override isf for Burr distribution

- #18756: DOC: stats.boxcox_normmax: correct minimize -> maximize

- #18758: DOC: Document performance cliff for scipy.sparse.random

- #18760: ENH: override halfnorm fit

- #18764: ENH: stats: add informative error message to `boxcox_normmax`…

- #18771: Fix typo from #18758

- #18777: DOC: Clarify Prewitt filter

- #18783: ENH: stats: Implement _sf and _isf for hypsecant.

- #18786: MAINT: forward port 1.11.1 relnotes

- #18794: MAINT: fix `halflogistic.fit` for bad location guess

- #18795: BUG, DOC: Correct `adsurl` value and add a general `url`…

- #18799: ENH: simplify `gausshyper.pdf`

- #18802: MAINT: Use `sparse.diags` instead of `spdiags` internally.

- #18803: MAINT: `rv_discrete` should raise with duplicate `xk` in…

- #18807: ENH: remove unnecessary root-find from skewnorm

- #18808: TST: test for gh-18800

- #18812: DEP: linalg: sharpen deprecation warning for pinv {,r}cond

- #18814: DOC: update windows instructions and move conda/mamba

- #18815: ENH:stats: Add _isf method to loglaplace

- #18816: ENH:stats: Add _isf method to lognorm

- #18817: DOC: Fix examples in randint description

- #18818: MAINT: Simplify codespaces env activation

- #18819: TST: stats.dgamma.pdf: adjust test that fails intermittently

- #18820: ENH:stats: Add _isf method to pareto

- #18822: ENH:stats: Add _sf and _isf methods to kappa3

- #18823: ENH:stats: Add _isf method to lomax

- #18824: ENH: override halfcauchy distribution fit

- #18826: DEP: linalg: use _NoValue for eigh/eigvalsh positional argument…

- #18829: ENH: optimize: vectorized minimization of univariate functions

- #18830: DOC: soften wording on import guidelines, mention lazy loading

- #18833: ENH: optimize: release the GIL while computing the LSAP solution

- #18835: DEP: scipy.stats.stats: clarify deprecation warnings

- #18840: MAINT: stats.burr12: moments are undefined when c*d <= order

- #18841: MAINT: *sctype* replace NumPy 2.0

- #18843: DEP: vendor sklearn’s mechanism to deprecate passing kwargs positionally

- #18846: MAINT: Reduce file size of the SVG files included in `signal.rst`

- #18847: MAINT: ptp no method for NumPy 2.0

- #18848: ENH: add compile and link args to `show_config` output

- #18850: ENH: improve performance of `SphericalVoronoi` area calculation

- #18852: BUG: fix overflow in stats.yeojohnson

- #18853: BENCH: Remove factorial benchmarks

- #18854: MAINT: signal: lighten the notation in lsim

- #18856: MAINT: Remove more runtests.py stuff

- #18858: MAINT: clean up views/strides/dtypes utilities in `cluster.hierarcy`

- #18861: MAINT: avoid `np.deprecate` and `np.core`, add `normalize_axis_index`…

- #18862: ENH: sparse arrays for hstack, vstack, bmat, block_diag. New…

- #18863: DEP: remove extra np.deprecate and add docs back

- #18872: DOC: Add relationship between Fisk (log-logistic) and logistic.

- #18873: DOC: add more cross compilation details

- #18885: DOC: minor issues in install commands

- #18886: MAINT/DOC: remove docstring issues in ndimage

- #18887: DOC: tab sync based on same tab name using ``sync`` statement

- #18888: MAINT: Set RAM requirement for Codespaces

- #18889: CI: Add prerelease build with 64bit OpenBLAS nightly

- #18893: ENH: Geometric quality metrics for random sampling

- #18898: DOC: fix sparse docs “matrix” and “array” mixup

- #18905: DOC: Clarify DOF in f-distribution notes

- #18910: DOC: from CONTRIBUTING.rst link to SciPy website

- #18911: DOC/MAINT: `special` doc fixes

- #18914: ENH: Enhance `dev.py` by adding command to query PYTHONPATH

- #18916: DEP: stats: improve deprecation of private but present modules

- #18917: ENH: move {c, q}spline_1d to use sosfilt/lfilter

- #18920: DOC: indicate functions with multiple valid solutions in csgraph

- #18927: TST: use Hypothesis for property-based tests

- #18929: ENH: change sparse dok from subclass of dict to have attribute…

- #18930: ENH: _lib._util: make _lazywhere compatible with Array API

- #18931: MAINT: cleanup redundant tests for `vonmises.fit`

- #18932: DEP: deprecate positional arguments for some methods in signal._fir_f…

- #18933: DEP: deprecate positional arguments for special.comb

- #18934: DEP: deprecate positional arguments for some methods in sparse.linalg…

- #18935: DEP: deprecate positional arguments for linalg.pinv

- #18936: DEP: deprecate positional arguments for stats.kendalltau

- #18942: CI: Change OpenBLAS nightly wheel location

- #18943: DEP: sparse.linalg: deprecate positional arguments for gcrotmk,…

- #18946: DEP: linalg: deprecate positional args for eigh/eigvalsh

- #18948: ENH: Jones and Faddy Skew-T distribution

- #18949: DOC: stats.FitResult.plot: add example

- #18952: MAINT: Remove `._is_array` since there’s now: `isinstance(x,…

- #18954: BENCH: update/rewrite lobpcg benchmark sparse_linalg_lobpcg.py

- #18955: MAINT/DOC: spatial: Document and test the double cover property…

- #18958: MAINT: optimize.differential_evolution: clarify that bounds must…

- #18962: Update name of coverage action

- #18963: ENH:sparse.linalg: Add LaplacianNd class to special sparse arrays

- #18967: MAINT: redefine `PyArray_MAX`/`PyArray_MIN` because they…

- #18968: DEP: optimize: improve deprecation of private modules named without…

- #18970: DEP: integrate: improve deprecation of private modules named…

- #18973: MAINT: linalg: remove a stray np.cast

- #18975: ENH: Port scipy to use new numpy complex types

- #18977: ENH: Expose c1 and c2 of scalar_search_wolfe to fmin_bfgs

- #18986: ENH: add possibility to fix parameters in multivariate normal…

- #18992: DEP: interpolate: improve deprecation of private modules named…

- #18995: DOC: stats.lognorm: add example of the relationship between norm…

- #18996: ENH: optimize.curve_fit: reduce overhead of lightweight memoization

- #18997: DOC: add `noexcept` to `cython_optimize` docs

- #19000: MAINT: fft: rename `test_numpy.py` to `test_basic.py`

- #19005: ENH: fft: support array API standard

- #19007: BLD: Add venv to .gitignore

- #19010: DOC/MAINT: typo: change Azure reference to Cirrus

- #19012: DOC: stats.mannwhitneyu: address apparent sign inconsistency…

- #19013: DOCS: Fixed typo in _fitpack2.py

- #19014: MAINT: copy, array-api compatible utility function

- #19015: ENH: Update numpy exceptions imports

- #19018: TST/BUG: fix array API test skip decorators

- #19023: ENH: special: dispatch to array library

- #19030: MAINT: replace `optparse` usage with `argparse`

- #19033: MAINT: Fix codespaces setup.sh script

- #19035: DEP: linalg: improve deprecation of private modules named without…

- #19045: MAINT: Change `add_newdoc` import and remove `NINF`

- #19047: Corrected a grammatical error in the docstring of class DOP853

- #19050: CI/BLD: make nightly wheels daily closes #19048

- #19051: ENH: array agnostic `cov`, used in `cluster`

- #19052: BENCH: update asv, fail benchmark CI on errors, fix fallout

- #19053: CI: cirrus mods

- #19055: MAINT: use `copy` utility from #19014 in `cluster`

- #19057: ENH: add computing a selected number m of extreme eigenpairs…

- #19060: MAINT: port minpack2.dcsrch from Fortran to Python, remove Fortran…

- #19061: DOC: spell NaN -> nan

- #19062: BLD: Replace complex occurences with singlecomplex in SuperLU

- #19064: TST: bump tolerance of `TestTruncexpon.test_is_isf` a little

- #19066: Update dfovec.py case 20 for zero indexing

- #19067: DEP: remove all deprecated `scipy.<numpy-func>` objects

- #19070: DEP: odr: improved deprecation of private modules

- #19073: DOC: remove reference to no longer imported numpy funcs

- #19074: TST: add regression test for sqrtm unexpectedly converting to…

- #19078: ENH: Reflect changes from numpy namespace refactor part 3

- #19081: ENH: optimize: c1 and c2 of scalar_search_wolfe to cg and newton-cg

- #19083: MAINT: forward port 1.11.2 relnotes

- #19086: BLD: tweaks to build dependencies and 3.12 classifier in pyproject.toml

- #19087: DOC: add info about usage of ccache for benchmarks

- #19089: DOC: add comment on args in solve_ivp (#18876)

- #19091: MAINT: optimize.root_scalar: handle args when method is newton…

- #19093: MAINT: stats.zscore: return correct result when 0th element is…

- #19094: BUG: optimize: update incorrect c1 value

- #19095: ENH: optimize: add inv Hess estimate in BFGS

- #19100: MAINT: Move `trapezoid` implementation to SciPy

- #19104: MAINT: fix the CT subclass benchmark

- #19110: MAINT: Remove usages of np.row_stack and np.in1d

- #19113: MAINT, TST: default_rng few tests

- #19115: ENH, TST: Use explicit imports in docstring examples

- #19127: DOC: linalg: fix typos in pinv docs

- #19128: ENH: optimize: add method attribute to result object from root_scalar…

- #19129: DOC:Added Examples To `combine_pvalues` and `fhtoffset`

- #19136: MAINT: remove NumPy infty alias

- #19141: MAINT: more NumPy API shims

- #19143: MAINT: remove asfarray usage

- #19146: DOC: sparse.linalg: Enhance lobpcg documentation with updated…

- #19152: DOC: fix predeces(s)or typo.

- #19157: TST: add array-agnostic assertions

- #19162: ENH: Allow `sparse_mtx.transpose(axes=(1, 0))`

- #19165: DEP: improve deprecation warnings for constants module

- #19166: MAINT: Reflect changes from `numpy` namespace refactor Part…

- #19168: BLD: special: fix dependencies for `_ellip_harm_2`

- #19170: MAINT: fix a number of issues in Cython code

- #19171: ENH: constructors for sparse arrays

- #19172: MAINT: Spherical Voronoi sort simplify

- #19173: MAINT: integrate._tanhsinh: improvements after further testing

- #19175: DOC: stats: Correct levy_stable loc-scale note

- #19178: MAINT/DOC: add `fit` to multivariate normal methods in documentation

- #19179: DOC: Added example for tf2zpk function

- #19183: MAINT: Import `fromarrays` from `rec`

- #19184: TST: fix sparse constructor test with large memory footprint

- #19186: TST: _lib: improve array API assertions

- #19187: BUG: accept `np`-coercible array-likes with array API flag…

- #19191: BLD: update minimum versions of meson-python and pythran

- #19192: TST: test tolerance bumps to fix reported failures

- #19194: BUG/TST: fix `test_array_api` for `cupy`

- #19195: DOC: Fixed typo in scipy.stats.Covariance

- #19198: DOC: optimize.minimize_scalar: note limitations and suggest alternatives

- #19201: DOC: missing backticks

- #19202: DOC: remove old mention to Python 2.

- #19203: DOC: Fix _nan_allsame example prompt.

- #19204: DOC: missing (and stray) backtick in mannwhitneyu

- #19206: TST, MAINT: skip fix for array API tests

- #19217: BLD: start building wheels against numpy 2.0 [wheel build]

- #19218: DOC: Added examples for zpk2tf, tf2sos, sos2tf, lp2lp_zpk, lp2hp_zpk,…

- #19219: ENH: Implemented custom mutation / crossover functions for DifferentialEvolution

- #19222: DOC: clarify guidance on style modifications

- #19224: BUG: integrate: expose ODEintWarning

- #19226: DEP: improve message for deprecated private API for `sparse`

- #19227: DOC: Trailing character after closing backquote.

- #19229: DOC: Fix repeated typos in dev.py

- #19233: DOC: Fix character after trailing backticks

- #19236: BUG: Remove removed item from `__all__`

- #19237: DOC: Missing import in private _nan_allsame function docs.

- #19240: DEP: spatial: improve deprecation of private modules without…

- #19243: DOC: stats: fix documentation of warnings raised by pearsonr

- #19244: MAINT: scipy.io NEP 50 shims

- #19247: MAINT: NumPy version check removals

- #19251: TST/MAINT: cluster: use new array API assertions

- #19253: MAINT: Cleanup expired ndarray methods

- #19256: DOC: Added examples for correlation, num_obs_dm, num_obs_y functions.

- #19259: DOC: outline workaround when precision losses occur in BFGS [skip…

- #19261: MAINT: fft: refactor basic backend with `_execute_1D`

- #19262: MAINT: fft: clean up test-skips

- #19263: ENH: fft: GPU support for non-standard basic transforms

- #19264: MAINT/TST: fft: remove duplicate namespace and dtype checks

- #19265: MAINT: array API: rename `arg_err_msg` and move to `_lib`

- #19266: ENH: use inplace add in _minimize_newtoncg

- #19267: MAINT: use linalg.norm in `_minimize_newtoncg`

- #19270: MAINT: fix -Wdeprecated-non-prototype warnings in Cephes code

- #19271: DOC: add example for `ndimage.shift`

- #19275: MAINT: Add warning filter for `numpy.core` rename

- #19278: DOC: use `np.copysign()` instead of `np.sign()`

- #19281: DOC: add `fft` to list of array API supporting modules

- #19282: MAINT: fft: clean up assertions

- #19284: ENH: update SuperLU to version 6.0.1

- #19285: MAINT fix more `-Wdeprecate-non-prototype` warnings

- #19287: ENH: add exact=False support for stirling2

- #19289: BLD: stats: improve build config for `unuran_wrapper`

- #19293: MAINT: optimize._bracket_root: refactor and comment for clarity

- #19294: MAINT: replace IOError alias with OSError

- #19295: DOC: fix typos found by codespell

- #19296: MAINT: fix linter issues

- #19298: MAINT: replace io.open alias with built-in open

- #19302: MAINT: Fix/parametrize Rotation tests.

- #19304: DOC: fix page typo in ks_2samp reference

- #19310: MAINT: Remove `np.int_` and `np.uint`

- #19311: DOC: invalid interpreted-text (missing space after closing backtick).

- #19312: DOC: Misc formatting error.

- #19313: DOC: And new line at end of line in CPP code.

- #19314: DOC: Rst don’t like list without blanklines.

- #19315: MAINT: forward port 1.11.3 relnotes

- #19317: MAINT: remove support for building with setup.py

- #19327: ENH: Add a numerically stable logpdf function for the skewnorm…

- #19331: MAINT, BLD: more setup.py cleanups

- #19333: ENH: Fit skewnorms with MLE more robustly

- #19340: DEP: deprecate scipy.signal wavelets

- #19341: MAINT: Remove remaining `numpy.int_` and filter `np.long`…

- #19346: MAINT: stats: fix `differential_entropy` too small error behavior

- #19347: BUG: fix ValueError in stats.truncpareto

- #19349: MAINT: Minor fix to shim import of scipy.signal.

- #19350: ENH: stats: add support for masked arrays, `nan_policy`, and…

- #19358: TST: SphericalVoronoi region type

- #19360: BLD, MAINT: more build system cleanups

- #19367: CI: avoid using Cython 3.0.3

- #19371: ENH: stats.ansari: add axis / nan_policy / keepdims support

- #19376: TST: bump tolerance of `test_al_mohy_higham_2012_experiment_1`

- #19380: DEV/CI: use scipy-openblas32 wheels in dev.py and some CI jobs

- #19385: ENH: beta negative binomial distribution

- #19390: DOC, MAINT: more distutils/build cleanups

- #19391: MAINT: spatial: Change error message in KDTree to be more informative.

- #19392: ENH: stats.bartlett: add axis / nan_policy / keepdims support

- #19394: MAINT: Partially revert `np.int_` changes

- #19395: DEP: ndimage: improve the deprecation of private modules named…

- #19399: TST: signal: add missing assertion in test_filter_design.py

- #19402: MAINT: l-bfgs-b remove intermediate bounds array

- #19409: MAINT: fix a C++ build error with GCC 13

- #19410: DOC: interpolate: add note to BarycentricInterpolator.add_xi

- #19412: ENH: stats: add support for masked arrays for circular statistics…

- #19414: BLD: with-scipy-openblas instead of use-scipy-openblas

- #19419: ENH: SphericalVoronoi sort faster

- #19422: DOC: Fix trivial typo.

- #19425: ENH: stats: add masked array, axis tuple, and nan policy support…

- #19426: MAINT: Update `fft.helper` import

- #19428: ENH: stats.levene/fligner: add axis / nan_policy / keepdims support

- #19429: DOC: Fix documentation of callback function signature of scipy.optimize.minimize

- #19431: MAINT: more NEP 50 shims

- #19433: DOC: Add example for `stats.hdquantiles`

- #19435: MAINT: Translate lambertw_scalar into C++

- #19439: BLD: update build dependency versions in pyproject.toml

- #19440: DOC: remove unused parameter in spline_filter docstring

- #19443: TST: Fix #19442 minimally

- #19445: TST: Remove some unnecessary tuple conversions

- #19449: DOC/MAINT: fft: fix signature for next_fast_len

- #19453: Added parenthesis for accurate calculation of frequencies w when…

- #19458: DOC: spatial: Rotation docs updates

- #19461: DOC: dev: update max line length to 88 characters

- #19465: DOC: fix broken NetCDF URL

- #19466: MAINT: NumPy int type shims

- #19469: DEP: special: improve deprecation of private modules named without…

- #19471: MAINT: Translate binom to C++

- #19472: MAINT: Update fast_matrix_market to 1.7.4

- #19482: MAINT: Make use of sf_error conditional on flag in scipy::special…

- #19483: ENH: add max dist to NearestNDInterpolator

- #19484: CI: limit scipy-openblas32 wheel to 0.3.23.293.2

- #19487: ENH: stats.cramervonmises/epps_singleton: add axis / nan_policy…

- #19489: MAINT: lint: ignore E501 (line length) by subpackage

- #19491: MAINT/STY: misc: remove E501 (line length) lint ignore

- #19494: MAINT/STY: `conftest.py`: remove E501 (line length) lint ignore

- #19495: MAINT: get rid of Python 2 left-overs

- #19497: CI: add ‘[lint only]’, ‘[docs only]’ skip tags

- #19501: TST: skip test_bootstrap_against_theory

- #19503: MAINT/STY: fftpack: remove E501 (line length) lint ignore

- #19505: MAINT/STY: `scipyoptdoc.py`: remove E501 (line length) lint…

- #19506: MAINT: sparse: update tests to switch to format and toarray from…

- #19507: MAINT/DOC: stats: fix lint errors

- #19508: MAINT/DOC/BENCH: optimize: fix linter errors

- #19509: MAINT: fix remaining lint errors

- #19510: DEP: integrate: deprecate romberg and quadrature

- #19514: MAINT/STY: odr: remove E501 (line length) lint ignore

- #19515: MAINT: Restructure extra_special (working name) as internal library

- #19516: MAINT: lint: enable UP rules

- #19519: DOC: Fix example used in stats tutorial

- #19520: MAINT/STY: fft: remove E501 (line length) lint ignore, `noqa`…

- #19523: MAINT/STY: constants: remove E501 (line length) lint ignore

- #19525: DOC, CI: refguide may vary locs

- #19527: DOC, MAINT: more refguide fixes

- #19529: MAINT: blanket `noqa` vet

- #19533: DOC: fix more typos found by codespell

- #19534: MAINT: get rid of more Python 2 left-overs

- #19540: DOC: _binomtest.py: Add clearer error messages

- #19546: MAINT: Fix interpolate.make_smoothing_spline’s size validation…

- #19556: DOC: revert part of bcbb18f / #19533

- #19558: MAINT: forward port 1.11.4 relnotes

- #19562: MAINT: Fix typos in Rotation.from_mrp referenced paper

- #19564: MAINT: Mark in `.gitignore` the directories instead of their…

- #19570: DOC: Fixed build instructions in index.rst (#19568)

- #19574: DOC: update Building from source docs for editable installs

- #19576: BUG: Use uint32 for cost in NI_WatershedElement

- #19578: BUG: stats._axis_nan_policy_factory: respect too_small when detecting…

- #19579: BLD:MAINT:Update dev.py message

- #19581: BUG: interpolate/ndbspline: fix OOB access for len(tx) != len(ty)…

- #19583: ENH: Use `np.dot` to speedup `spatial.distance.correlation`

- #19585: DEP: improve deprecation of remaining private modules named without…

- #19588: BLD:Add missing cstdin include in fast matrix market

- #19589: ENH: Use `np.dot` to speedup `spatial.distance.hamming`

- #19590: MAINT:special:Add more noexcept to Cython signatures

- #19591: MAINT: interpolate/RGI: avoid unnecessary validation of data…

- #19593: Returning NotImplemented in comparisons with sparse arrays

- #19597: TST: special._sinpi/_cospi: skip failing `test_intermediate_overflow`

- #19600: Fix sparse multiply

- #19601: ENH: Make special C++ implementations work on CUDA (and beyond!)

- #19603: DOC: doc shim for eig normalization

- #19604: BUG: fix overflow in stats.boxcox_normmax when method=’mle’

- #19606: MAINT: array types: restrict to boolean & numerical dtypes

- #19608: MAINT/DOC: refguide-check fixes

- #19609: MAINT: lint: enable line-length check (package-wide)

- #19611: DOC: clarify interpolator termionolgy

- #19613: MAINT: Added clang-format formatting for special C++ files

- #19617: fix numerical stability

- #19618: MAINT: qmc permutations win type

- #19622: CI: undo cython==0.29.35 pin for the 32-bit Linux job, remove…

- #19623: MAINT: lint: enable `stacklevel` warnings check

- #19624: MAINT/TST: _lib: use value instead of deprecated s

- #19626: MAINT: more SciPy windows int shims

- #19628: DOC: 1.12.0 release notes

- #19635: MAINT: simplify Nakagami mean calculation

- #19637: DOC: Clarify integration error bound in `integrate` tutorial

- #19648: MAINT: simplify chi distribution mean calculation

- #19651: MAINT: stats.entropy: silence mypy

- #19656: BUG: Remove unnecessary incref on unrelated type

- #19658: MAINT: git blame ignores for lint clean-ups

- #19660: STY: special: use indent width of 4 in clang-format

- #19661: CI: fix pre-release job by correct version pin for scipy-openblas32

- #19670: MAINT: version bounds for 1.12.0rc1

- #19677: DOC: array types: mention partial support in `special`

- #19686: TST: fix incorrect signal.sosfilt tests

- #19690: BLD: avoid fast-math for oneAPI compilers, fix up handling of…

- #19691: BUG: fix negative overflow in stats.boxcox_normmax

- #19693: BUG: Prevent mutation of `w` parameter in `spatial.distance.*`

- #19702: DEP: Adopt `*tol` deprecations also for `gcrotmk/lgmres/minres/tfqmr`

- #19709: MAINT: Cumulative simpson follow-up comments

- #19735: DOC: update release notes with all deprecations for 1.12 release

- #19748: TST: skip RGI(…, method=”pchip” for complex values)

- #19751: BUG: Make FMM classes `py::module_local` (fix for 1.12RC)

- #19761: MAINT: Avoid use of aligned_alloc in pocketfft on windows

- #19779: BUG: Fix `nbinom.logcdf` for invalid input

- #19785: BUG: support sparse Hessian in `Newton-CG`

- #19797: MAINT: 1.12.0rc2 prep

- #19800: TST: loosen tolerances for tests that fail otherwise on windows+MKL

- #19806: TST: fix compatibility with pytest 8

- #19830: REL: bump copyright to 2024

- #19842: TST: move reference data for test_real_transforms to a fixture

- #19859: BLD: improve scipy-openblas dependency check

- #19877: DOC: 1.12 release notes tweaks

- #19881: Revert “ENH: stats.wasserstein_distance: multivariate Wasserstein…

- #19892: DEP: extend some announced deprecations due to out-of-band 1.13…

- #19903: DEP: reflect extended deprecations also in release notes

- #19910: BLD: ensure the name of the installed `scipy` package is lower-case