# SciPy 1.7.0 Release Notes

SciPy 1.7.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.7.x branch, and on adding new features on the master branch.

This release requires Python 3.7+ and NumPy 1.16.5 or greater.

For running on PyPy, PyPy3 6.0+ is required.

## Highlights of this release

- A new submodule for quasi-Monte Carlo, `scipy.stats.qmc`, was added

- The documentation design was updated to use the same PyData-Sphinx theme as NumPy and other ecosystem libraries.

- We now vendor and leverage the Boost C++ library to enable numerous improvements for long-standing weaknesses in `scipy.stats`

- `scipy.stats` has six new distributions, eight new (or overhauled) hypothesis tests, a new function for bootstrapping, a class that enables fast random variate sampling and percentile point function evaluation, and many other enhancements.

- `cdist` and `pdist` distance calculations are faster for several metrics, especially weighted cases, thanks to a rewrite to a new C++ backend framework

- A new class for radial basis function interpolation, RBFInterpolator, was added to address issues with the Rbf class.

We gratefully acknowledge the Chan-Zuckerberg Initiative Essential Open Source Software for Science program for supporting many of the improvements to `scipy.stats`.

## New features

### `scipy.cluster` improvements

An optional argument, `seed`, has been added to `kmeans` and `kmeans2` to set the random generator and random state.

### `scipy.interpolate` improvements

Improved input validation and error messages for `fitpack.bispev` and `fitpack.parder` for scenarios that previously caused substantial confusion for users.

The class RBFInterpolator was added to supersede the Rbf class. The new class has usage that more closely follows other interpolator classes, corrects sign errors that caused unexpected smoothing behavior, includes polynomial terms in the interpolant (which are necessary for some RBF choices), and supports interpolation using only the k-nearest neighbors for memory efficiency.

### `scipy.linalg` improvements

An LAPACK wrapper was added for access to the `tgexc` subroutine.

### `scipy.ndimage` improvements

`scipy.ndimage.affine_transform` is now able to infer the `output_shape` from the `out` array.

### `scipy.optimize` improvements

The optional parameter `bounds` was added to `_minimize_neldermead` to support bounds constraints for the Nelder-Mead solver.

`trustregion` methods `trust-krylov`, `dogleg` and `trust-ncg` can now estimate `hess` by finite difference using one of `["2-point", "3-point", "cs"]`.

`halton` was added as a `sampling_method` in `scipy.optimize.shgo`. `sobol` was fixed and is now using `scipy.stats.qmc.Sobol`.

`halton` and `sobol` were added as `init` methods in scipy.optimize.differential_evolution.

`differential_evolution` now accepts an `x0` parameter to provide an initial guess for the minimization.

`least_squares` has a modest performance improvement when SciPy is built with Pythran transpiler enabled.

When `linprog` is used with `method` `'highs'`, `'highs-ipm'`, or `'highs-ds'`, the result object now reports the marginals (AKA shadow prices, dual values) and residuals associated with each constraint.

### `scipy.signal` improvements

`get_window` supports `general_cosine` and `general_hamming` window functions.

`scipy.signal.medfilt2d` now releases the GIL where appropriate to enable performance gains via multithreaded calculations.

### `scipy.sparse` improvements

Addition of `dia_matrix` sparse matrices is now faster.

### `scipy.spatial` improvements

`distance.cdist` and `distance.pdist` performance has greatly improved for certain weighted metrics. Namely: `minkowski`, `euclidean`, `chebyshev`, `canberra`, and `cityblock`.

Modest performance improvements for many of the unweighted `cdist` and `pdist` metrics noted above.

The parameter `seed` was added to scipy.spatial.vq.kmeans and scipy.spatial.vq.kmeans2.

The parameters `axis` and `keepdims` where added to `scipy.spatial.distance.jensenshannon`.

The `rotation` methods `from_rotvec` and `as_rotvec` now accept a `degrees` argument to specify usage of degrees instead of radians.

### `scipy.special` improvements

Wright’s generalized Bessel function for positive arguments was added as `scipy.special.wright_bessel`.

An implementation of the inverse of the Log CDF of the Normal Distribution is now available via `scipy.special.ndtri_exp`.

### `scipy.stats` improvements

#### Hypothesis Tests

The Mann-Whitney-Wilcoxon test, `mannwhitneyu`, has been rewritten. It now supports n-dimensional input, an exact test method when there are no ties, and improved documentation. Please see “Other changes” for adjustments to default behavior.

The new function `scipy.stats.binomtest` replaces `scipy.stats.binom_test`. The new function returns an object that calculates a confidence intervals of the proportion parameter. Also, performance was improved from O(n) to O(log(n)) by using binary search.

The two-sample version of the Cramer-von Mises test is implemented in `scipy.stats.cramervonmises_2samp`.

The Alexander-Govern test is implemented in the new function `scipy.stats.alexandergovern`.

The new functions `scipy.stats.barnard_exact` and scipy.stats. boschloo_exact respectively perform Barnard’s exact test and Boschloo’s exact test for 2x2 contingency tables.

The new function `scipy.stats.page_trend_test` performs Page’s test for ordered alternatives.

The new function `scipy.stats.somersd` performs Somers’ D test for ordinal association between two variables.

An option, `permutations`, has been added in `scipy.stats.ttest_ind` to perform permutation t-tests. A `trim` option was also added to perform a trimmed (Yuen’s) t-test.

The `alternative` parameter was added to the `skewtest`, `kurtosistest`, `ranksums`, `mood`, `ansari`, `linregress`, and `spearmanr` functions to allow one-sided hypothesis testing.

#### Sample statistics

The new function `scipy.stats.differential_entropy` estimates the differential entropy of a continuous distribution from a sample.

The `boxcox` and `boxcox_normmax` now allow the user to control the optimizer used to minimize the negative log-likelihood function.

A new function `scipy.stats.contingency.relative_risk` calculates the relative risk, or risk ratio, of a 2x2 contingency table. The object returned has a method to compute the confidence interval of the relative risk.

Performance improvements in the `skew` and `kurtosis` functions achieved by removal of repeated/redundant calculations.

Substantial performance improvements in `scipy.stats.mstats.hdquantiles_sd`.

The new function `scipy.stats.contingency.association` computes several measures of association for a contingency table: Pearsons contingency coefficient, Cramer’s V, and Tschuprow’s T.

The parameter `nan_policy` was added to `scipy.stats.zmap` to provide options for handling the occurrence of `nan` in the input data.

The parameter `ddof` was added to `scipy.stats.variation` and `scipy.stats.mstats.variation`.

The parameter `weights` was added to `scipy.stats.gmean`.

#### Statistical Distributions

We now vendor and leverage the Boost C++ library to address a number of previously reported issues in `stats`. Notably, `beta`, `binom`, `nbinom` now have Boost backends, and it is straightforward to leverage the backend for additional functions.

The skew Cauchy probability distribution has been implemented as `scipy.stats.skewcauchy`.

The Zipfian probability distribution has been implemented as `scipy.stats.zipfian`.

The new distributions `nchypergeom_fisher` and `nchypergeom_wallenius` implement the Fisher and Wallenius versions of the noncentral hypergeometric distribution, respectively.

The generalized hyperbolic distribution was added in `scipy.stats.genhyperbolic`.

The studentized range distribution was added in `scipy.stats.studentized_range`.

`scipy.stats.argus` now has improved handling for small parameter values.

Better argument handling/preparation has resulted in performance improvements for many distributions.

The `cosine` distribution has added ufuncs for `ppf`, `cdf`, `sf`, and `isf` methods including numerical precision improvements at the edges of the support of the distribution.

An option to fit the distribution to data by the method of moments has been added to the `fit` method of the univariate continuous distributions.

#### Other

`scipy.stats.bootstrap` has been added to allow estimation of the confidence interval and standard error of a statistic.

The new function `scipy.stats.contingency.crosstab` computes a contingency table (i.e. a table of counts of unique entries) for the given data.

`scipy.stats.NumericalInverseHermite` enables fast random variate sampling and percentile point function evaluation of an arbitrary univariate statistical distribution.

#### New `scipy.stats.qmc` module

This new module provides Quasi-Monte Carlo (QMC) generators and associated helper functions.

It provides a generic class `scipy.stats.qmc.QMCEngine` which defines a QMC engine/sampler. An engine is state aware: it can be continued, advanced and reset. 3 base samplers are available:

- `scipy.stats.qmc.Sobol` the well known Sobol low discrepancy sequence. Several warnings have been added to guide the user into properly using this sampler. The sequence is scrambled by default.

- `scipy.stats.qmc.Halton`: Halton low discrepancy sequence. The sequence is scrambled by default.

- `scipy.stats.qmc.LatinHypercube`: plain LHS design.

And 2 special samplers are available:

- `scipy.stats.qmc.MultinomialQMC`: sampling from a multinomial distribution using any of the base `scipy.stats.qmc.QMCEngine`.

- `scipy.stats.qmc.MultivariateNormalQMC`: sampling from a multivariate Normal using any of the base `scipy.stats.qmc.QMCEngine`.

The module also provide the following helpers:

- `scipy.stats.qmc.discrepancy`: assess the quality of a set of points in terms of space coverage.

- `scipy.stats.qmc.update_discrepancy`: can be used in an optimization loop to construct a good set of points.

- `scipy.stats.qmc.scale`: easily scale a set of points from (to) the unit interval to (from) a given range.

## Deprecated features

### `scipy.linalg` deprecations

- scipy.linalg.pinv2 is deprecated and its functionality is completely subsumed into `scipy.linalg.pinv`

- Both `rcond`, `cond` keywords of `scipy.linalg.pinv` and `scipy.linalg.pinvh` were not working and now are deprecated. They are now replaced with functioning `atol` and `rtol` keywords with clear usage.

### `scipy.spatial` deprecations

- `scipy.spatial.distance` metrics expect 1d input vectors but will call `np.squeeze` on their inputs to accept any extra length-1 dimensions. That behaviour is now deprecated.

## Backwards incompatible changes

## Other changes

We now accept and leverage performance improvements from the ahead-of-time Python-to-C++ transpiler, Pythran, which can be optionally disabled (via `export SCIPY_USE_PYTHRAN=0`) but is enabled by default at build time.

There are two changes to the default behavior of scipy.stats.mannwhitenyu:

- For years, use of the default `alternative=None` was deprecated; explicit `alternative` specification was required. Use of the new default value of `alternative`, “two-sided”, is now permitted.

- Previously, all p-values were based on an asymptotic approximation. Now, for small samples without ties, the p-values returned are exact by default.

Support has been added for PEP 621 (project metadata in `pyproject.toml`)

We now support a Gitpod environment to reduce the barrier to entry for SciPy development; for more details see `quickstart-gitpod`.

## Authors

- @endolith

- Jelle Aalbers +

- Adam +

- Tania Allard +

- Sven Baars +

- Max Balandat +

- baumgarc +

- Christoph Baumgarten

- Peter Bell

- Lilian Besson

- Robinson Besson +

- Max Bolingbroke

- Blair Bonnett +

- Jordão Bragantini

- Harm Buisman +

- Evgeni Burovski

- Matthias Bussonnier

- Dominic C

- CJ Carey

- Ramón Casero +

- Chachay +

- charlotte12l +

- Benjamin Curtice Corbett +

- Falcon Dai +

- Ian Dall +

- Terry Davis

- droussea2001 +

- DWesl +

- dwight200 +

- Thomas J. Fan +

- Joseph Fox-Rabinovitz

- Max Frei +

- Laura Gutierrez Funderburk +

- gbonomib +

- Matthias Geier +

- Pradipta Ghosh +

- Ralf Gommers

- Evan H +

- h-vetinari

- Matt Haberland

- Anselm Hahn +

- Alex Henrie

- Piet Hessenius +

- Trever Hines +

- Elisha Hollander +

- Stephan Hoyer

- Tom Hu +

- Kei Ishikawa +

- Julien Jerphanion

- Robert Kern

- Shashank KS +

- Peter Mahler Larsen

- Eric Larson

- Cheng H. Lee +

- Gregory R. Lee

- Jean-Benoist Leger +

- lgfunderburk +

- liam-o-marsh +

- Xingyu Liu +

- Alex Loftus +

- Christian Lorentzen +

- Cong Ma

- Marc +

- MarkPundurs +

- Markus Löning +

- Liam Marsh +

- Nicholas McKibben

- melissawm +

- Jamie Morton

- Andrew Nelson

- Nikola Forró

- Tor Nordam +

- Olivier Gauthé +

- Rohit Pandey +

- Avanindra Kumar Pandeya +

- Tirth Patel

- paugier +

- Alex H. Wagner, PhD +

- Jeff Plourde +

- Ilhan Polat

- pranavrajpal +

- Vladyslav Rachek

- Bharat Raghunathan

- Recursing +

- Tyler Reddy

- Lucas Roberts

- Gregor Robinson +

- Pamphile Roy +

- Atsushi Sakai

- Benjamin Santos

- Martin K. Scherer +

- Thomas Schmelzer +

- Daniel Scott +

- Sebastian Wallkötter +

- serge-sans-paille +

- Namami Shanker +

- Masashi Shibata +

- Alexandre de Siqueira +

- Albert Steppi +

- Adam J. Stewart +

- Kai Striega

- Diana Sukhoverkhova

- Søren Fuglede Jørgensen

- Mike Taves

- Dan Temkin +

- Nicolas Tessore +

- tsubota20 +

- Robert Uhl

- christos val +

- Bas van Beek +

- Ashutosh Varma +

- Jose Vazquez +

- Sebastiano Vigna

- Aditya Vijaykumar

- VNMabus

- Arthur Volant +

- Samuel Wallan

- Stefan van der Walt

- Warren Weckesser

- Anreas Weh

- Josh Wilson

- Rory Yorke

- Egor Zemlyanoy

- Marc Zoeller +

- zoj613 +

- 秋纫 +

A total of 126 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.7.0

- #636: Statistics Review: mannwhitneyu (Trac #109)

- #1346: signal.medfilt2d should fall back on signal.medfilt for types…

- #2118: Mann-Whitney statistic returns incorrect results (Trac #1593)

- #2158: special.chndtrix (ncx2.ppf) gives wrong results (Trac #1633)

- #3284: build_sphinx weirdness

- #3352: beta distribution sf

- #4067: Mannwhitneyu with arrays full of nan still reports significance

- #4080: entropy in Scipy

- #4641: mstats.mannwhitneyu and stats.mannwhitneyu return inconsistent…

- #5122: scipy.stats.binom.ppf Incorrect for p=0

- #5180: Rbf interpolation - use only K nearest neighbors

- #5258: affine_transform complains about output_shape when output array…

- #5562: Wishart degrees of freedom should be $v > p-1$ instead of $v…

- #5933: mstats_basic.py - mannwhitneyu [scipy/scipy/stats/mstats_basic.py]

- #6409: _unequal_var_ttest_denom causes ZeroDivisionError in early samples

- #6682: negative binomial survival function is imprecise

- #6897: scipy.stats.mannwhitneyu of empty sets gives p=0.0 and does not…

- #7303: stats.describe with nan_policy=omit returns matrix-wide minmax…

- #7406: scipy.stats.binom.ppf returns nan for q between 0 and 1 if n…

- #7437: ENH: add skewed Cauchy distribution to stats

- #7542: DOC: stats tutorials: Questions on arcsine and Student t formulae

- #7593: Meaning of `tol` argument in `scipy.optimize.minimize` is…

- #8565: Error in SmoothSphereBivariateSpline(): “ValueError: Error code…

- #8665: `scipy.ncx2.sf` should be monotone decreasing

- #8836: scipy.optimize.linprog(method=’simplex’) needs to return duals

- #9184: Mann-Whitney implementation wrong?

- #9450: allow seeding of init methods in vq.kmeans2

- #9704: RectSphereBivariateSpline fails for negative longitude

- #9836: scipy.stats.rice gives incorrect results when s is very low compared…

- #9904: Request/Proposal: Greatly improve scipy.interpolate.Rbf

- #9981: stats.kruskal : add a warning for an input with 2 or more columns

- #10358: DOC: linprog and linear_sum_assignment tutorials needed

- #10908: Nakami fitting doesn’t converge (scipy.stats)

- #10933: Add scaled inverse chi2 distribution

- #11014: Barnard’s Test for More Powerful Hypothesis Testing of 2x2 Contingency…

- #11050: Feature request: Nelder-Mead with bounds

- #11086: scipy.stats.skew doesn’t work correctly for float point numbers

- #11113: inconsistent result from ttest_ind and mannwhitneyu when used…

- #11134: Wrong confidence interval for binomial distribution with p=0

- #11325: Add axis parameter for scipy.spatial.distance.jensenshannon

- #11474: scipy.stats.skellam.cdf(0) returns 0 for large mu1 = mu2

- #11523: scipy.stats.zipf doesn’t implement zipf distribution

- #11848: How to get Lagrange / lambda multipliers out of ‘linprog’ optimize…

- #11909: Enable bounds for lambda in boxcox

- #12118: Docstring missing defaults

- #12132: Slow tests to be trimmed or moved to test(‘full’)

- #12230: Dendrogram: enable leaves labelling with ‘labels’ when using…

- #12282: scipy.stats.chisquare test does not check that observed and expected…

- #12298: BUG: fmin_powell missing squeeze in 1.5.0rc

- #12403: Add nan_policy to stats.zmap

- #12518: Null hypothesis of Kolmogorov Smirnov test is not correctly described

- #12534: Feature request: scipy.linalg.norm to deal with 0-size array

- #12622: scipy.interpolate.interpn docstring example

- #12635: scipy.stats.beta.ppf gives unexpexted results

- #12669: Median-averaging of complex CSDs

- #12731: stats.ncx2.cdf fails for nc >> x >> 1

- #12778: Confusing documentation of scipy.stats.weightedtau

- #12794: [Bug] The result of stats.beta.isf is inconsistent with stats.beta.sf

- #12837: stats.mannwhitneyu could support arrays

- #12868: Vector-valued interpolation in `interp2d`

- #12922: Minimize with trust-constr method leads to TypeError if option…

- #12929: The use of starred expressions to create data detracts from understanding…

- #12965: domain of argument of scipy.interpolate.RectSphereBivariateSpline(u,…

- #13025: Generalized Hyperbolic Distribution

- #13090: Broken link in doc for signal.max_len_seq

- #13101: MAINT: Upgrade python version in docker file

- #13158: `signal.get_window()` has a missing doc link and cannot get…

- #13173: Uninformative error message from bisplev function

- #13234: BUG: stats: Wrong shape of burr.moment() and fisk.moment() when…

- #13242: Does kmeans “drop” clusters?

- #13243: tgsen uses an output argument for computing a default argument

- #13245: Kurtosis returning 1 for array of same elements

- #13257: GitHub Actions test failures for MacOS

- #13272: scipy.stats.yeojohnson_llf doc mistake

- #13280: Wrong results with hypergeom cdf

- #13285: description correction in scipy.stats.t

- #13287: Generate binomial CDF with mu instead of prob

- #13294: BUG: stats: wrong bounds returned by ‘support’ method for distributions…

- #13299: Typing for scipy.spatial

- #13300: Add a single individual to a latinhypercube initial population…

- #13311: MAINT: pavement.py PYVER is outdated

- #13339: savemat discards dimension information if any dimension is zero

- #13341: add scipy.stats.variation with an ddof parameter

- #13353: Documentation: in scipy.stats.johnsonsu, parameter `a` can…

- #13405: TST: add a few tests for sparse BSR ctor

- #13410: BUG: skew for empty array raises

- #13417: 10,000 times speedup for generating random numbers from the cosine…

- #13440: python runtest.py -t path-to-test.py failed

- #13454: Scipy cosine distance can be greater than 2

- #13459: Broken link in cramervonmises documentation

- #13494: One-word typo in the documentation of optimize.linprog_simplex

- #13501: minimize using Powell methods with Bounds leads to “TypeError:…

- #13509: signal.medfilt2d vs ndimage.median_filter

- #13511: DOC: error in description of “direc” parameter of “fmin_powell”

- #13526: TST: stats: intermittent `test_ttest_ind_randperm_alternative2…

- #13536: `_within_tolerance` seems an unnecessary repetition of `numpy.isclose`

- #13540: missing python 3.8 manylinux wheels on scipy-wheels-nightly

- #13559: shape error in linprog with revised simplex

- #13587: binned_statistic unreliable with single precision

- #13589: Better argument preparation for distributions in stats package.

- #13602: The crystallball distribution entropy is sometimes minus infinity

- #13606: MAINT: mypy: some typing errors while running mypy + adding mypy…

- #13608: Why does stats.binned_statistic_2d convert its values argument…

- #13609: BUG: SciPy pip install -e gets unusable version spec

- #13610: Highs solver did not provide a solution nor did it report a failure

- #13614: BUG: invgauss.cdf should return the correct value when `mu`…

- #13628: 1-letter typo in the definition of scipy.special.spence function…

- #13634: mmwrite fails on dense, skew-symmetric array

- #13646: Sparse matrix argmax() integer overflow on Windows 10

- #13647: `scipy.stats.qmc.LatinHypercube` cannot sample single sample…

- #13651: Documentation wrong in scipy.linalg.eigvalsh

- #13664: BUG: gamma distribution’s inverse survival function overflows…

- #13693: BUG: sokalmichener appears to incorrectly apply weights

- #13697: BUG: stats: Spurious warning generated by arcsine.pdf at the…

- #13704: Make it possible to pass a rank cut-off value relatively to the…

- #13707: Kullback Leibler Divergence broadcasting no longer works

- #13740: Scipy.optimize x0 out of bounds when it is within bounds.

- #13744: scipy.interpolate.interp1d has inconsistent behavior for non-unique…

- #13754: optimize.minimize ‘trust’ methods and finite difference Hessian…

- #13762: MAINT, TST: aarch64 stats test failures showing up in wheels…

- #13769: probplot draws fit line even when fit=False

- #13791: BUG: stats: wrapcauchy.cdf does not broadcast the shape parameter…

- #13793: CI: CircleCI doc build failure

- #13840: manylinux1 builds are failing because of C99 usage in `special/_cosine.c`

- #13850: CI: Homebrew is failing due to bintray

- #13875: BUG: chi2_contingency with Yates correction

- #13878: BUG: `signal.get_window` argument handling issue

- #13880: Remove all usages of numpy.compat

- #13896: Boschloo’s Test for More Powerful Hypothesis Testing of 2x2 Contingency…

- #13923: Inverse of Log CDF of Normal Distribution

- #13933: `signal.get_window` does not support `general_cosine` and…

- #13950: DOC: scipy.spatial.KDTree.query

- #13969: N=4 must not exceed M=3

- #13970: Pearson’s original paper on chi-square test could be referenced.

- #13984: Faster addition of sparse diagonal matrices

- #13988: An error occurred when using scipy.io.wavfile of scipy 1.6 version…

- #13997: BUG: sparse: Incorrect result from `dia_matrix.diagonal()`

- #14005: MAINT: optimize: `curve_fit` input error msg can be improved.

- #14038: MAINT: add type annotations for _sobol.pyx

- #14048: DOC: missing git submodule information

- #14055: linalg.solve: Unclear error when using assume_a=’her’ with real…

- #14093: DOC: Inconsistency in the definition of default values in the…

- #14158: TST, BUG: test_rbfinterp.py – test_interpolation_misfit_1d fails…

- #14170: TST: signal submodule test_filtfilt_gust failing on 32-bit amd64…

- #14194: MAINT: download-wheels.py missing import

- #14199: Generated sources for biasedurn extension are broken in 1.7.0rc1

## Pull requests for 1.7.0

- #4824: Permutation Ttest (new PR)

- #4933: ENH: Update the Mann-Whitney-Wilcoxon test

- #7702: ENH: stats: Add Skewed Cauchy Distribution

- #8306: Optional Pythran support for scipy.signal.max_len_seq_inner

- #10170: MAINT: stats: Implement cdf and ppf as ufuncs for the cosine…

- #10454: ENH: Extend find_peaks_cwt to take numbers and iterables for…

- #10844: ENH: add stats.qmc module with quasi Monte Carlo functionality

- #11313: ENH: add Wright’s generalized Bessel function

- #11352: ENH: stats: Add crosstab function.

- #11477: FIX: bounded parameter in cdfchn.f gives bad results

- #11695: ENH: stats: add method of moments to `rv_continuous.fit`

- #11911: ENH: Added bounds to boxcox and boxcox_normmax

- #12438: BUG: use ellipkm1 in elliptical filter design to prevent numerical…

- #12531: ENH: stats: add Page’s L test

- #12603: ENH: stats: Add `binomtest` to replace `binom_test`.

- #12653: ENH: stats: add Somers’ D test

- #12676: BUG: update median averaging in signal.csd

- #12760: BUG: special: erfinv(x<<1) loses precision

- #12801: ENH: Add single-sided p-values to remaining spearmanr and linregress

- #12873: ENH: Stats: add Alexander Govern Test

- #13008: ENH: Add ‘alternative’ to functions using normal CDF for p-value

- #13040: BUG: Allow RectSphereBivariateSpline to accept negative longitude

- #13048: ENH: stats: Add a function that computes the relative risk.

- #13067: ENH: Add weights parameter to stats.gmean

- #13084: ENH: fast Hankel transform

- #13104: MAINT: upgrade python version (drop python 3.6) for docker dev…

- #13153: ENH: added association measurements Pearsons Contingency Coefficient,…

- #13166: ENH: stats: Add nan_policy to zmap.

- #13175: MAINT: tests for tall cost matrices in `linear_sum_assignment`

- #13177: BUG: raise NotImplementedError in fourier_ellipsoid when ndim…

- #13184: BUG: stats: Fix min and max calculation of mstats.describe with…

- #13188: DOC: stats: make null and alternative hypotheses of kstest more…

- #13193: MAINT: stats: chisquare check sum of observed/expected frequencies

- #13197: ENH/MAINT: HiGHS upstream enhancements and bug fixes

- #13198: ENH: allow inference of output_shape from out array in affine_transform

- #13204: ENH: stats: add Zipfian (different from Zipf/zeta) distribution

- #13208: REL: set version to 1.7.0.dev0

- #13216: TST: stats: break up and mark slow tests

- #13224: Update docs for the weighted τ

- #13230: ENH: linalg: Add LAPACK wrapper for tgexc.

- #13232: MAINT: stats: raise error when input to kruskal has >1 dim

- #13233: DOC: stats: fix MGF of arcsine and entropy of t in tutorial

- #13236: MAINT: reorganize shared linear assignment tests

- #13237: BENCH: Refactor stats.Distribution to easily add new distributions

- #13238: BUG: stats: fix wrong shape output of burr and fisk distributions

- #13240: MAINT: add tests of trivial cost matrices for linear sum assignment

- #13252: DOC: optimize: add `optimize.linear_sum_assignment` tutorial.

- #13254: BUG: Fix precision issues for constant input in skew and kurtosis

- #13262: BUG: scipy.medfilt and .medfilt2d fixes

- #13263: ENH: add Cramer-von Mises test for two samples

- #13264: fix a minor typo in `stats.anderson` doc

- #13268: ENH: stats: Add implementation of _entropy for the t distr.

- #13273: DOC: stats: fix typo in Yeo-Johnson LL function documentation

- #13275: MAINT: stats: Correct a comment in the _fitstart method of gamma.

- #13283: BUG: stats: fix the cdf method of rv_discrete class

- #13286: DOC: stats: clairify rv_continuous/discrete.stats example

- #13288: DOC: stats: discrete distribution shape parameter restrictions

- #13289: MAINT: fix a build warning in sigtoolsmodule.c

- #13290: DOC: Expand the discussion of the nan_policy API.

- #13291: MAINT: signal, stats: Use keepdims where appropriate.

- #13292: DOC: stats: note another common parameterization of nbinom

- #13293: DOC: Change broken link for default values to archived link

- #13295: BUG: stats: fix the support method to return correct bounds

- #13296: DOC: stats: Fix latex markup in the kstwo docstring.

- #13297: TST: mark kde.logpdf overflow test as xslow

- #13298: Generalized Hyperbolic Distribution

- #13301: DOC: cluster: Add cluster number note to the docstring of cluster.vq.kmeans

- #13302: BUG: Fix ndimage.morphology.distance_transform_* argument handling

- #13303: CI: prevent Codecov giving false CI failures and wrong PR annotations

- #13313: ENH: static typing for qhull

- #13316: Pythran implementation of scipy.signal._spectral

- #13317: DOC: forward port 1.6.0 relnotes

- #13319: ENH: stats: add fast numerical inversion of distribution CDF

- #13320: ENH: x0 for differential_evolution

- #13324: DOC correct linprog highs versionadded to 1.6

- #13326: MAINT: update numpydoc to v1.1.0

- #13327: DOC: interpolate: improved docstring examples of `interpolate.interpn()`…

- #13328: ENH: Boost stats distributions

- #13330: ENH: stats: add noncentral hypergeometric distributions (Fisher’s…

- #13331: MAINT/ENH: resolve mypy warnings/errors

- #13332: DOC: interpolate: improved docstring of `interpolate.interp2d`…

- #13333: ENH: stats: Some more _sf and _isf implementations.

- #13334: MAINT: stats: Clean up a few defunct comments in _continuous_distns.py

- #13336: Pythran version of scipy.optimize._group_columns

- #13337: DOC|ENH: type hinting in scipy.integrate.simpson

- #13346: ENH: stats: add ‘ddof’ parameter to the ‘variation’ function

- #13355: ENH: stats: implement _logpdf, _sf and _isf for loggamma.

- #13360: ENH|DOC: fix docstring and input validation in interpolate.RectSphereBivariateSpline

- #13366: BUG: stats: Don’t raise ZeroDivisionError in _unequal_var_ttest_denom

- #13370: ENH: fix ARGUS distribution for small parameters in stats

- #13371: ENH: stats: add `bootstrap` for estimating confidence interval…

- #13373: BUG: io/matlab: preserve dimensions of empty >=2D arrays

- #13374: ENH: stats: add skewed Cauchy distribution

- #13379: BUG: sparse: fix verbosity in sparse lsqr

- #13383: TST: stats: mark many dimension permutation t-test slow

- #13384: MAINT: Make keywords array static

- #13388: PERF: Avoid duplicate mean calculations in skew and kurtosis

- #13389: DOC: Fix deprecated directive syntax

- #13390: DOC: Correct line length for Parameter Section underline

- #13393: MAINT: stats: allow wishart dim - 1 < df < dim

- #13395: DOC: fix typo in setup.py warning message

- #13396: BUG: Fix MLE for Nakagami `nakagami_gen.fit`

- #13397: MAINT:linalg: Fix tgsen family wrapper and ordqz

- #13406: TST: add error handling tests for sparse BSR ctor

- #13413: DOC: ultra-quickstart guide

- #13418: BUG: Fix moment returning inconsistent types and shapes

- #13423: DOC: Update example for leaf_label_func/dendrogram

- #13431: ENH: stats: override _rvs for nhypergeom

- #13432: Add indicator in NDInterpolator docstring that N must be > 1

- #13434: DOC: stats: note relationship between scaled-inv-chi2 and invgamma

- #13436: ENH: interpolate: add input validation to check input x-y is…

- #13441: ENH: add functionality `barnard_exact` test to scipy.stats.

- #13443: MAINT: stats: Updates for skewcauchy

- #13444: DOC: clarify range of `a` parameter fpr johnsonsu/johnsonsb

- #13445: DOC: fix runtests guidelines.

- #13446: MAINT: stats: Add _fitstart method to wrapcauchy.

- #13447: DEV: Update development Docker image

- #13448: ENH: Add annotations for `scipy.spatial.distance`

- #13451: DOC: minor formatting.

- #13458: DOC: indent see also.

- #13460: DOC: stats: Fix link to Cramer-von Mises wikipedia article.

- #13461: DOC: reorganize scipy.stats overview docs page

- #13463: DOC: misc formatting fixes

- #13466: DOC: Typo in see also s/SmoothUni/SmoothBi/g

- #13467: DOC: optimize: add description about `tol` argument for `minimize`.

- #13469: MAINT: Refactor optimization methods to use scipy.stats.qmc

- #13477: CI: pin numpy to 1.19.5 for the three macOS CI jobs

- #13478: DOC: fix typos where double :: for Sphinx directives were missing

- #13481: CI: pin numpy to 1.19.5 in the 4 parallel Windows builds on Azure

- #13482: CI: use numpy 1.20.0 again in macOS CI

- #13483: DOC: Multiple documentation syntax fixes.

- #13484: Move some pythran config from CI to setup

- #13487: DOC: add a tutorial about scipy.stats.qmc

- #13492: ENH: GH actions should not run on forks

- #13493: DEV: Enable gitpod for SciPy

- #13495: DOC One-word typo in the documentation of optimize.linprog_simplex

- #13499: DOC: describe LSAP implementation

- #13502: BUG: Bounds created with lists weren’t working for Powell

- #13507: MAINT, TST: stats: centralize invalid parameters list for all…

- #13510: DOC: stats: fix small doc errors in ‘multivariate_hypergeom’

- #13513: DOC: Added math notation in examples in ltisys.py

- #13514: ENH: simplify low_0_bit function for Sobol

- #13515: ENH: optimize: add bound constraint support for nelder-mead solver

- #13516: DOC: reduce LaTeX usage for johnsonb docstring

- #13519: BLD: remove build_sphinx support from setup.py

- #13527: TST: stats: xfail ttest_ind_randperm_alternative2 on 32 bit

- #13530: DOC: correct comparisons between median filter functions

- #13532: ENH: release the GIL inside medfilt2d

- #13538: DOC: optimize: fix minor doc error in ‘fmin_powell’ (#13511)

- #13546: DOC: fix list of “mode” options for ndimage

- #13549: ENH: stats: add ‘alternative’ keyword to some normality tests.

- #13551: MAINT: add git to docker env

- #13552: MAINT: stats: remove float_power shim

- #13553: DOC: use support rather than a/b in stats tutorial

- #13560: MAINT: optimize: improve linprog error message for sparse input…

- #13562: MAINT: optimize: using np.isclose instead of _within_tolerance.

- #13566: ENH: Speed up hdquantiles_sd()

- #13569: BENCH: optimize: benchmark only HiGHS methods; add bigger linprog…

- #13574: DOC: In description of cluster.hierarchy.dendrogram ‘level’ parameter,…

- #13576: ENH: improve discrepancy performance

- #13579: TST: Add pybind11 to tox environments

- #13583: BUG: Fix Dockerfile apt-get installs

- #13588: MAINT: forward port 1.6.1 relnotes.

- #13593: BUG: stats: preserve sample dtype for bin edges

- #13595: ENH: interpolate: add RBFInterpolator

- #13596: DOC: Fix indentation in new_stats_distribution.rst.inc

- #13601: Add dpss for get_window function

- #13604: DOC: Correct dual annealing visiting param range.

- #13605: Add Codecov badge to README

- #13607: MAINT: stats: fix crystalball entropy

- #13611: Better argument preparation for distributions in stats package.

- #13612: Add docker run command for Windows cmd

- #13613: MAINT, CI: mypy: fix typing errors + add mypy to CI

- #13616: FIX: Return correct output for invgauss.cdf when mu is very small

- #13617: MAINT: accept numbers and iterables for width in find_peaks_cwt

- #13620: CI: disable the mypy CI job (partial revert of gh-13613)

- #13621: DOC: signal: use array_like for input types

- #13622: MAINT: clean up some unused files, make `mypy scipy` pass

- #13623: CI: enable Mypy CI job again

- #13624: TST: test more values for `visiting_param` input to `dual_annealing`

- #13625: Rename integrate.simps to integrate.simpsons in documentation…

- #13631: ENH: add a `stats.differential_entropy` function

- #13633: BUG: stats.binned_statistic_2d user function expecting arrays

- #13641: ENH: Added degrees parameter to rotvec

- #13645: MAINT: mypy: don’t install numpy-stubs

- #13649: BUG: sparse: csc_matrix.argmax() integer overflow

- #13650: ENH: stats: add ‘alternative’ parameter to ansari

- #13652: DOC: fix eigvalsh documentation (#13651)

- #13654: BUG: Fix LatinHypercubes

- #13656: DOC: Fix PCHIP references

- #13657: TST: remove IPython warning in debug session

- #13658: Remove spurious quotes in docstring

- #13661: ENH: stats: improve efficiency of / fix bug in exact permutation…

- #13667: MAINT: Make latest Docker image default

- #13668: MAINT: add .theia/ to .gitignore

- #13669: BLD: change SCIPY_USE_PYTHRAN default to `1`

- #13676: ENH Small improvements for LSQR with damp

- #13678: MAINT: add Pythran-generated files to .gitignore

- #13679: MAINT: move the `conda develop .` in the Gitpod config

- #13680: DOC: Add cKDTree note comparing it with KDTree

- #13681: DOC: build doc updates on Pythran, compiled code, and cleanups

- #13683: BUG: mmwrite correctly serializes non skew-symmetric arrays

- #13684: FIX: fix numerical overflow in gamma.isf method

- #13685: BUG: fix cosine distance range to 0-2

- #13694: MAINT: fix warning emitted when NumPy version is incorrect

- #13696: ENH: support trimming in ttest_ind

- #13698: BUG: stats: Fix spurious warnings generated by arcsine.pdf

- #13701: DEV: scipy.interpolate b-splines (periodic case)

- #13702: DEP: Clean up spent deprecations in spatial.distance

- #13703: MAINT: fix issues found by static code analysis

- #13706: ENH: stats: Implement sf and isf for the laplace distribution.

- #13711: MAINT: stats: fix broadcasting for scipy.stats.entropy

- #13712: BUG: stats: Override _fitstart for the invweibull distribution.

- #13713: DOC: update toolchain.rst to reflect windows universal C runtime

- #13714: MAINT: stats: Remove an unused list from test_continuous_basic.py.

- #13715: MAINT: stats: No need to suppress frechet deprecation warnings.

- #13716: MAINT: use super() as described by PEP 3135

- #13718: MAINT: new-style class, removing inheritance to object

- #13721: MAINT: add a type-ignore for mpmath (#13721)

- #13723: MAINT: mypy: ignore mpmath imports in mypy.ini

- #13724: DOC: pydata sphinx theme

- #13725: BENCH: add benchmark for Kendalltau

- #13727: CI: simplify Pythran configuration setup for Azure

- #13731: MAINT: stats: Some flake8-driven clean up.

- #13732: ENH: stats: Studentized Range Distribution

- #13735: DOC: correct Voronoi docstring

- #13738: DOC: add example to wright_bessel

- #13739: ENH: stats: Implement _sf and _isf for the chi distribution.

- #13741: MAINT: prevent overwriting of x in minimize

- #13747: DOC: Add note for interp1d for non-unique x-values

- #13749: MAINT: forward port 1.6.2 relnotes

- #13759: MAINT: simpson small performance speedups

- #13765: FIX: npymath missing causing npy_log1p to be unknown

- #13768: BENCH: Add missing pythran dependency

- #13770: ENH: stats.contingency: Add the sparse option to crosstab.

- #13774: DEP: Deprecate squeezing input vectors in spatial.distance

- #13775: Enable trust region methods to use a finite difference Hessian…

- #13777: DOC: Fix Ubuntu/Debian installation instructions

- #13778: DOC: remove references to RandomState

- #13782: MAINT: LBFGSB err msg on MAXLS changed closes #11718

- #13785: BENCH: Add benchmark for cdist/pdist with weights

- #13786: MAINT: Prepare cdist/pdist for C++ rework

- #13787: MAINT: stats: move entropy and differential_entropy functions…

- #13790: DOC: Add some dependencies for Dockerfile doc of scipy development.

- #13792: BUG: stats: Fix broadcasting in wrapcauchy.cdf

- #13795: MAINT: stats: add hypotests to __all__ in init.py, not stats.py

- #13797: MAINT: stats: probplot: don’t plot least-squares fit line unless…

- #13798: MAINT: fix incorrect code comment in `hierarchy.to_tree`

- #13802: DEV: add environment.yml file for development with conda/mamba

- #13803: DOC: fix doc build warning about arxiv role already being registered

- #13804: DOC+MAINT: optimize: lb and ub in the Bounds constructor are…

- #13807: MAINT: Dont use parallel Sphinx

- #13808: MAINT: cluster.to_tree: more idiomatic looping over rows of matrix…

- #13810: MAINT: add a CODEOWNERS file

- #13811: MAINT: Add ci skip to azp

- #13814: ENH/DOC: pydata sphinx theme polishing

- #13817: DOC: Misc parameter typo and casing in scipy/linalg/_decomp_ldl.py

- #13818: MAINT: stats: keep `entropy` importable from `scipy.stats.distributions`

- #13820: BUG: update _kendall_p_exact ValueError to f-string

- #13831: FIX:DEP: Allow better tolerance control for pinv and pinvh and…

- #13832: BUG: stats: Fix rvs for levy_stable when alpha=1

- #13833: MAINT: Add inline type hintings for stats.qmc

- #13836: MAINT: Fix a couple compiler warnings.

- #13838: TST: relax test tolerances for BinomTest

- #13841: BLD: add `-std=c99` flag to scipy.special extensions using…

- #13845: ENH: stats: add `method` parameter to `differential_entropy`…

- #13847: TST: skip on optimize failure on macOS, mark one as xfail

- #13848: DOC: optimize: move Nelder Mead doc from Unconstrained minimization…

- #13849: DOC: Roadmap update

- #13852: CI: fix temporary wrong brew version from GitHub

- #13854: ENH: Update Scipy Gitpod

- #13859: TST: fix ultra-slow ttest permutations test

- #13860: MAINT: clean up LSAP error checking

- #13863: DOC: remove seed in examples

- #13865: DOC: optimize: The bounds param of differential_evolution is…

- #13866: MAINT: special: Remove an unused variable from _poly_approx in…

- #13867: DOC: stats: Explain meaning of alternatives for fisher_exact.

- #13868: CI: fix the failing job on linux.

- #13870: MAINT: move LSAP rectangular matrix handling into solver code

- #13871: DOC: Add Gitpod documentation

- #13876: Workflow : Add nightly release of NumPy in linux workflows

- #13877: DOC: Conform to numpydoc + uniformity.

- #13879: BUG: signal: fix get_window argument handling and add tests.

- #13881: CI: remove .travis.yml, remove codecov from CircleCI

- #13882: BLD: ensure incrementing dev version strings

- #13886: TST: optimize: skip test_network_flow_limited_capacity w/ UMFPACK…

- #13888: MAINT: Fix issues involving elif conditions

- #13891: Rename InivariateSpline to UnivariateSpline

- #13893: ENH: linprog HiGHS marginals/sensitivy analysis

- #13894: DOC: Add blank line before `Return` section.

- #13897: DOC: BLD: fix doc build version check, and improve build time

- #13903: MAINT: Gitpod fixes

- #13907: ENH: Rewrite minkowski metric in C++ with pybind11

- #13909: Revert “Workflow : Add nightly release of NumPy in linux workflows”

- #13910: DOC: update Readme

- #13911: MAINT: use dict built-in rather than OrderedDict

- #13920: BUG: Reactivate conda environment in init

- #13925: BUG: stats: magnitude of Yates’ correction <= abs(observed-expected)…

- #13926: DOC: correct return type in disjoint_set.subsets docstring

- #13927: DOC/MAINT: Add copyright notice to qmc.primes_from_2_to

- #13928: BUG: DOC: signal: fix need argument config and add missing doc…

- #13929: REL: add PEP 621 (project metadata in pyproject.toml) support

- #13931: MAINT: special: get rid of _logit.c.src

- #13934: ENH: signal: make `get_window` supports `general_cosine`…

- #13940: MAINT: QMCEngine d input validation

- #13941: MAINT: forward port 1.6.3 relnotes

- #13944: BUG: spatial: fix weight handling of `distance.sokalmichener`.

- #13947: MAINT: Remove duplicate calculations in sokalmichener

- #13949: DOC: minor grammar fixes in minimize and KDTree.query

- #13951: ENH: Add Boschloo exact test to stats

- #13956: ENH: spatial: add `axis` and `keepdims` optional argument…

- #13963: MAINT: stats: Fix unused imports and a few other issues related…

- #13971: DOC: Add Karl Pearson’s reference to chi-square test

- #13972: ENH: cluster: add an optional argument `seed` for `kmeans`…

- #13973: BLD: fix build warnings for causal/anticausal pointers in ndimage

- #13975: ENH: set empty array norm to zero.

- #13977: MAINT: signal: replace distutils templating with tempita

- #13978: MAINT: improve validations and keyword only arguments for some…

- #13979: ENH: Add Inverse of Log CDF of Normal Distribution

- #13983: Fixing `ndimage.watershed_ift` tutorial’s documentation

- #13987: DOC: Adding examples to docstrings in morphology: white_tophat,…

- #13989: DOC: interpolate: improve examples of `RegularGridInterpolator`…

- #13990: MAINT, DOC: optimize: Make the input validation explanation clear…

- #13992: Workflow : Add nightly release of NumPy in linux workflows

- #13995: Doc: Continuous integration information

- #14000: BUG: sparse: Fix DIA.diagonal bug and add a regression test

- #14004: ENH: Fast addition dia matrix

- #14006: MAINT: optimize: add validation to check func parameter number…

- #14008: BUG: Raise exception for inconsistent WAV header

- #14009: DEP: Remove usage of numpy.compat

- #14010: MAINT: add support for wheel DL proxy

- #14012: DOC: Broaden Exact Test Reference

- #14015: MAINT: remove brew update

- #14017: BENCH: Add more formats for sparse arithmetic

- #14018: BENCH: add benchmark for f_oneway

- #14020: MAINT: modify np.int_ to np.int32 to make it the same for 32/64…

- #14023: MAINT: Fix clang build and remove some unicode characters

- #14025: BUG: sparse: fix DIA.setdiag issue

- #14026: TST: optimize: xfail part of test_powell

- #14029: CI: github macos fix

- #14030: MAINT: use ‘yield from <expr>’ (PEP 380)

- #14031: MAINT: new-style class, removing inheritance to object

- #14032: MAINT: CXXFLAGS for Pythran

- #14033: ENH: Port sqeuclidean and braycurtis to _distance_pybind

- #14034: MAINT: Clean-up ‘next = __next__’

- #14045: MAINT: bump PYVER pavement.py

- #14047: DEV: initialize boost submodule in Gitpod Dockerfile

- #14051: BLD: if boost submodule content is missing, error out early

- #14052: DOC: missing submodule init information

- #14057: DOC: special: Add Examples to `psi` docstring

- #14058: BUG: fixed a dtype bug in linalg.solve.

- #14060: Doc: Fix typo in documentation of spence function.

- #14061: MAINT:stats: Type annotations for _sobol.pyx

- #14062: DOC: A few small fixes in quickstart_gitpod.rst

- #14063: DOC: signal: add Add Examples to `cont2discrete` docstring

- #14064: DOC: optimize: Add Examples to fmin_bfgs docstring

- #14065: Add example for scipy stats.trim1 under docstring

- #14066: DOC add example to scipy.special.hermite

- #14067: DOC add alpha docstring description, add example to docstring

- #14070: DOC add parameters, return, and example to docstring

- #14072: MAINT/TST: Fix tests failing with the nightly build of numpy.

- #14075: DOC Improve the code snippet in signal.hilbert docstring.

- #14076: DOC: Document Jensen-Shannon distance being accepted by cdist/pdist

- #14079: BLD: Avoid importing scipy.stats during cythonize stage

- #14082: MAINT: Remove old, commented extract_diagonal

- #14083: MAINT: sparse: Remove defunct function extract_diagonal

- #14085: ENH: Implement canberra distance in _distance_pybind

- #14086: MAINT: Clear scipy namespace of entries better imported from…

- #14088: Install Pythran from sources for python 3.10

- #14092: BUG: Fixes issue with clang.

- #14094: DOC: Correct the inconsistence definition of Default in class…

- #14105: TST: stats: mannwhitneyu: check that mstats and stats mannwhitneyu…

- #14106: DOC: stats.mstats: mannwhitneyu: the returned statistic is the…

- #14107: ENH: stats: bootstrap: add `vectorized` parameter; automatically…

- #14109: BUG: fix two issues in the fblas signature files

- #14110: DOC: mailmap update

- #14113: ENH: stats: bootstrap: add `paired` parameter

- #14116: MAINT: fix deprecated Python C API usage in odr

- #14118: DOC: 1.7.0 release notes

- #14125: DOC: fix typo

- #14126: ENH: stats: bootstrap: add `batch` parameter to control batch…

- #14127: CI: upgrade pip in benchmarks CI run

- #14130: BUG: Fix trust-constr report TypeError if verbose is set to 2…

- #14133: MAINT: interpolate: raise NotImplementedError not ValueError

- #14139: FIX/DOC: lsqr doctests print failure

- #14145: MAINT: 1.7.x version pins (“backport”)

- #14146: MAINT: commit count if no tag

- #14164: TST, BUG: fix rbf matrix value

- #14166: CI, MAINT: restrictions on pre-release CI

- #14171: TST: signal: Bump tolerances for a test of Gustafsson’s…

- #14175: TST: stats: Loosen tolerance in some binomtest tests.

- #14182: MAINT: stats: Update ppcc_plot and ppcc_max docstring.

- #14195: MAINT: download-wheels missing import

- #14230: REL: stop shipping generated Cython sources in sdist