scipy 1.15.3__cp313-cp313-win_amd64.whl → 1.16.0rc2__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cp313-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp313-win_amd64.pyd +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +166 -35
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp313-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp313-win_amd64.pyd +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/pypocketfft.cp313-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313-win_amd64.pyd +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cp313-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp313-win_amd64.pyd +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_multivariate.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp313-win_amd64.pyd +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +56 -48
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313-win_amd64.pyd +0 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cp313-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp313-win_amd64.pyd +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp313-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp313-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp313-win_amd64.pyd +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp313-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp313-win_amd64.pyd +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_ctest.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +370 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cp313-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsap.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313-win_amd64.pyd +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +95 -17
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp313-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp313-win_amd64.pyd +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- scipy/signal/_sigtools.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp313-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp313-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp313-win_amd64.pyd +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp313-win_amd64.pyd +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp313-win_amd64.pyd +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp313-win_amd64.pyd +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_interface.py +17 -18
- scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +214 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp313-win_amd64.pyd +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp313-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp313-win_amd64.pyd +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1213 -832
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cp313-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp313-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp313-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp313-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp313-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp313-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp313-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp313-win_amd64.pyd +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cp313-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp313-win_amd64.pyd +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +2 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +206 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp313-win_amd64.pyd +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +900 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp313-win_amd64.pyd +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp313-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp313-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp313-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp313-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp313-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp313-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- scipy-1.16.0rc2.dist-info/DELVEWHEEL +2 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +685 -693
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp313-win_amd64.pyd +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dll +0 -0
- scipy/special/libsf_error_state.dll.a +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp313-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp313-cp313-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/stats/_entropy.py
CHANGED
@@ -8,7 +8,8 @@ import math
|
|
8
8
|
import numpy as np
|
9
9
|
from scipy import special
|
10
10
|
from ._axis_nan_policy import _axis_nan_policy_factory, _broadcast_arrays
|
11
|
-
from scipy._lib._array_api import array_namespace,
|
11
|
+
from scipy._lib._array_api import array_namespace, xp_promote
|
12
|
+
from scipy._lib import array_api_extra as xpx
|
12
13
|
|
13
14
|
__all__ = ['entropy', 'differential_entropy']
|
14
15
|
|
@@ -19,7 +20,7 @@ __all__ = ['entropy', 'differential_entropy']
|
|
19
20
|
2 if ("qk" in kwgs and kwgs["qk"] is not None)
|
20
21
|
else 1
|
21
22
|
),
|
22
|
-
n_outputs=1, result_to_tuple=lambda x: (x,), paired=True,
|
23
|
+
n_outputs=1, result_to_tuple=lambda x, _: (x,), paired=True,
|
23
24
|
too_small=-1 # entropy doesn't have too small inputs
|
24
25
|
)
|
25
26
|
def entropy(pk: np.typing.ArrayLike,
|
@@ -169,7 +170,7 @@ def _differential_entropy_is_too_small(samples, kwargs, axis=-1):
|
|
169
170
|
|
170
171
|
|
171
172
|
@_axis_nan_policy_factory(
|
172
|
-
lambda x: x, n_outputs=1, result_to_tuple=lambda x: (x,),
|
173
|
+
lambda x: x, n_outputs=1, result_to_tuple=lambda x, _: (x,),
|
173
174
|
too_small=_differential_entropy_is_too_small
|
174
175
|
)
|
175
176
|
def differential_entropy(
|
@@ -317,10 +318,8 @@ def differential_entropy(
|
|
317
318
|
|
318
319
|
"""
|
319
320
|
xp = array_namespace(values)
|
320
|
-
values =
|
321
|
-
|
322
|
-
values = xp.astype(values, xp.asarray(1.).dtype)
|
323
|
-
values = xp_moveaxis_to_end(values, axis, xp=xp)
|
321
|
+
values = xp_promote(values, force_floating=True, xp=xp)
|
322
|
+
values = xp.moveaxis(values, axis, -1)
|
324
323
|
n = values.shape[-1] # type: ignore[union-attr]
|
325
324
|
|
326
325
|
if window_length is None:
|
@@ -403,9 +402,9 @@ def _ebrahimi_entropy(X, m, *, xp):
|
|
403
402
|
differences = X[..., 2 * m:] - X[..., : -2 * m:]
|
404
403
|
|
405
404
|
i = xp.arange(1, n+1, dtype=X.dtype)
|
406
|
-
ci = xp.
|
407
|
-
|
408
|
-
ci
|
405
|
+
ci = xp.where(i <= m, 1 + (i - 1)/m, 2.)
|
406
|
+
cond = i >= n - m + 1
|
407
|
+
ci = xpx.at(ci, cond).set(1 + (n - i[cond])/m)
|
409
408
|
|
410
409
|
logs = xp.log(n * differences / (ci * m))
|
411
410
|
return xp.mean(logs, axis=-1)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from numpy import arange, newaxis, hstack, prod, array
|
2
|
+
from scipy import linalg
|
2
3
|
|
3
4
|
|
4
5
|
def _central_diff_weights(Np, ndiv=1):
|
@@ -54,7 +55,6 @@ def _central_diff_weights(Np, ndiv=1):
|
|
54
55
|
)
|
55
56
|
if Np % 2 == 0:
|
56
57
|
raise ValueError("The number of points must be odd.")
|
57
|
-
from scipy import linalg
|
58
58
|
|
59
59
|
ho = Np >> 1
|
60
60
|
x = arange(-ho, ho + 1.0)
|
scipy/stats/_hypotests.py
CHANGED
@@ -482,7 +482,7 @@ def _cdf_cvm(x, n=None):
|
|
482
482
|
return y
|
483
483
|
|
484
484
|
|
485
|
-
def _cvm_result_to_tuple(res):
|
485
|
+
def _cvm_result_to_tuple(res, _):
|
486
486
|
return res.statistic, res.pvalue
|
487
487
|
|
488
488
|
|
@@ -1725,13 +1725,17 @@ class TukeyHSDResult:
|
|
1725
1725
|
Method."
|
1726
1726
|
https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm,
|
1727
1727
|
28 November 2020.
|
1728
|
+
.. [2] P. A. Games and J. F. Howell, "Pairwise Multiple Comparison Procedures
|
1729
|
+
with Unequal N's and/or Variances: A Monte Carlo Study," Journal of
|
1730
|
+
Educational Statistics, vol. 1, no. 2, pp. 113-125, Jun. 1976,
|
1731
|
+
doi: https://doi.org/10.3102/10769986001002113.
|
1728
1732
|
"""
|
1729
1733
|
|
1730
|
-
def __init__(self, statistic, pvalue,
|
1734
|
+
def __init__(self, statistic, pvalue, _ntreatments, _df, _stand_err):
|
1731
1735
|
self.statistic = statistic
|
1732
1736
|
self.pvalue = pvalue
|
1733
1737
|
self._ntreatments = _ntreatments
|
1734
|
-
self.
|
1738
|
+
self._df = _df
|
1735
1739
|
self._stand_err = _stand_err
|
1736
1740
|
self._ci = None
|
1737
1741
|
self._ci_cl = None
|
@@ -1742,7 +1746,7 @@ class TukeyHSDResult:
|
|
1742
1746
|
# it will be called with the default CL of .95.
|
1743
1747
|
if self._ci is None:
|
1744
1748
|
self.confidence_interval(confidence_level=.95)
|
1745
|
-
s = ("
|
1749
|
+
s = ("Pairwise Group Comparisons"
|
1746
1750
|
f" ({self._ci_cl*100:.1f}% Confidence Interval)\n")
|
1747
1751
|
s += "Comparison Statistic p-value Lower CI Upper CI\n"
|
1748
1752
|
for i in range(self.pvalue.shape[0]):
|
@@ -1777,6 +1781,10 @@ class TukeyHSDResult:
|
|
1777
1781
|
Tukey's Method."
|
1778
1782
|
https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm,
|
1779
1783
|
28 November 2020.
|
1784
|
+
.. [2] P. A. Games and J. F. Howell, "Pairwise Multiple Comparison Procedures
|
1785
|
+
with Unequal N's and/or Variances: A Monte Carlo Study," Journal of
|
1786
|
+
Educational Statistics, vol. 1, no. 2, pp. 113-125, Jun. 1976,
|
1787
|
+
doi: https://doi.org/10.3102/10769986001002113.
|
1780
1788
|
|
1781
1789
|
Examples
|
1782
1790
|
--------
|
@@ -1805,28 +1813,29 @@ class TukeyHSDResult:
|
|
1805
1813
|
raise ValueError("Confidence level must be between 0 and 1.")
|
1806
1814
|
# determine the critical value of the studentized range using the
|
1807
1815
|
# appropriate confidence level, number of treatments, and degrees
|
1808
|
-
# of freedom
|
1809
|
-
#
|
1810
|
-
#
|
1811
|
-
|
1812
|
-
params = (confidence_level, self._nobs, self._ntreatments - self._nobs)
|
1816
|
+
# of freedom. See [1] "Confidence limits for Tukey's method" / [2] p.117
|
1817
|
+
# "H0 was rejected if...". Note that in the cases of unequal sample sizes,
|
1818
|
+
# there will be a criterion for each group comparison.
|
1819
|
+
params = (confidence_level, self._ntreatments, self._df)
|
1813
1820
|
srd = distributions.studentized_range.ppf(*params)
|
1814
|
-
# also called maximum critical value, the
|
1821
|
+
# also called maximum critical value, the confidence_radius is the
|
1815
1822
|
# studentized range critical value * the square root of mean square
|
1816
1823
|
# error over the sample size.
|
1817
|
-
|
1824
|
+
confidence_radius = srd * self._stand_err
|
1818
1825
|
# the confidence levels are determined by the
|
1819
|
-
# `mean_differences` +- `
|
1820
|
-
upper_conf = self.statistic +
|
1821
|
-
lower_conf = self.statistic -
|
1826
|
+
# `mean_differences` +- `confidence_radius`
|
1827
|
+
upper_conf = self.statistic + confidence_radius
|
1828
|
+
lower_conf = self.statistic - confidence_radius
|
1822
1829
|
self._ci = ConfidenceInterval(low=lower_conf, high=upper_conf)
|
1823
1830
|
self._ci_cl = confidence_level
|
1824
1831
|
return self._ci
|
1825
1832
|
|
1826
1833
|
|
1827
|
-
def _tukey_hsd_iv(args):
|
1834
|
+
def _tukey_hsd_iv(args, equal_var):
|
1828
1835
|
if (len(args)) < 2:
|
1829
1836
|
raise ValueError("There must be more than 1 treatment.")
|
1837
|
+
if not isinstance(equal_var, bool):
|
1838
|
+
raise TypeError("Expected a boolean value for 'equal_var'")
|
1830
1839
|
args = [np.asarray(arg) for arg in args]
|
1831
1840
|
for arg in args:
|
1832
1841
|
if arg.ndim != 1:
|
@@ -1838,7 +1847,7 @@ def _tukey_hsd_iv(args):
|
|
1838
1847
|
return args
|
1839
1848
|
|
1840
1849
|
|
1841
|
-
def tukey_hsd(*args):
|
1850
|
+
def tukey_hsd(*args, equal_var=True):
|
1842
1851
|
"""Perform Tukey's HSD test for equality of means over multiple treatments.
|
1843
1852
|
|
1844
1853
|
Tukey's honestly significant difference (HSD) test performs pairwise
|
@@ -1861,6 +1870,10 @@ def tukey_hsd(*args):
|
|
1861
1870
|
sample1, sample2, ... : array_like
|
1862
1871
|
The sample measurements for each group. There must be at least
|
1863
1872
|
two arguments.
|
1873
|
+
equal_var: bool, optional
|
1874
|
+
If True (default) and equal sample size, perform Tukey-HSD test [6].
|
1875
|
+
If True and unequal sample size, perform Tukey-Kramer test [4]_.
|
1876
|
+
If False, perform Games-Howell test [7]_, which does not assume equal variances.
|
1864
1877
|
|
1865
1878
|
Returns
|
1866
1879
|
-------
|
@@ -1894,9 +1907,10 @@ def tukey_hsd(*args):
|
|
1894
1907
|
3. The distributions from which the samples are drawn have the same finite
|
1895
1908
|
variance.
|
1896
1909
|
|
1897
|
-
The original formulation of the test was for samples of equal size
|
1898
|
-
In case of unequal sample sizes,
|
1899
|
-
[4]_.
|
1910
|
+
The original formulation of the test was for samples of equal size drawn from
|
1911
|
+
populations assumed to have equal variances [6]_. In case of unequal sample sizes,
|
1912
|
+
the test uses the Tukey-Kramer method [4]_. When equal variances are not assumed
|
1913
|
+
(``equal_var=False``), the test uses the Games-Howell method [7]_.
|
1900
1914
|
|
1901
1915
|
References
|
1902
1916
|
----------
|
@@ -1920,6 +1934,10 @@ def tukey_hsd(*args):
|
|
1920
1934
|
.. [6] Tukey, John W. "Comparing Individual Means in the Analysis of
|
1921
1935
|
Variance." Biometrics, vol. 5, no. 2, 1949, pp. 99-114. JSTOR,
|
1922
1936
|
www.jstor.org/stable/3001913. Accessed 14 June 2021.
|
1937
|
+
.. [7] P. A. Games and J. F. Howell, "Pairwise Multiple Comparison Procedures
|
1938
|
+
with Unequal N's and/or Variances: A Monte Carlo Study," Journal of
|
1939
|
+
Educational Statistics, vol. 1, no. 2, pp. 113-125, Jun. 1976,
|
1940
|
+
doi: https://doi.org/10.3102/10769986001002113.
|
1923
1941
|
|
1924
1942
|
|
1925
1943
|
Examples
|
@@ -1950,14 +1968,14 @@ def tukey_hsd(*args):
|
|
1950
1968
|
|
1951
1969
|
>>> res = tukey_hsd(group0, group1, group2)
|
1952
1970
|
>>> print(res)
|
1953
|
-
|
1954
|
-
Comparison Statistic p-value
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
1971
|
+
Pairwise Group Comparisons (95.0% Confidence Interval)
|
1972
|
+
Comparison Statistic p-value Lower CI Upper CI
|
1973
|
+
(0 - 1) -4.600 0.014 -8.249 -0.951
|
1974
|
+
(0 - 2) -0.260 0.980 -3.909 3.389
|
1975
|
+
(1 - 0) 4.600 0.014 0.951 8.249
|
1976
|
+
(1 - 2) 4.340 0.020 0.691 7.989
|
1977
|
+
(2 - 0) 0.260 0.980 -3.389 3.909
|
1978
|
+
(2 - 1) -4.340 0.020 -7.989 -0.691
|
1961
1979
|
|
1962
1980
|
The null hypothesis is that each group has the same mean. The p-value for
|
1963
1981
|
comparisons between ``group0`` and ``group1`` as well as ``group1`` and
|
@@ -1986,32 +2004,47 @@ def tukey_hsd(*args):
|
|
1986
2004
|
(2 - 0) -4.620 5.140
|
1987
2005
|
(2 - 1) -9.220 0.540
|
1988
2006
|
"""
|
1989
|
-
args = _tukey_hsd_iv(args)
|
2007
|
+
args = _tukey_hsd_iv(args, equal_var)
|
1990
2008
|
ntreatments = len(args)
|
1991
2009
|
means = np.asarray([np.mean(arg) for arg in args])
|
1992
2010
|
nsamples_treatments = np.asarray([a.size for a in args])
|
1993
2011
|
nobs = np.sum(nsamples_treatments)
|
1994
|
-
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2012
|
+
vars_ = np.asarray([np.var(arg, ddof=1) for arg in args])
|
2013
|
+
|
2014
|
+
if equal_var:
|
2015
|
+
# determine mean square error [5]. Note that this is sometimes called
|
2016
|
+
# mean square error within.
|
2017
|
+
mse = (np.sum(vars_ * (nsamples_treatments - 1)) / (nobs - ntreatments))
|
2018
|
+
|
2019
|
+
# The calculation of the standard error differs when treatments differ in
|
2020
|
+
# size. See ("Unequal sample sizes")[1].
|
2021
|
+
if np.unique(nsamples_treatments).size == 1:
|
2022
|
+
# all input groups are the same length, so only one value needs to be
|
2023
|
+
# calculated [1].
|
2024
|
+
normalize = 2 / nsamples_treatments[0]
|
2025
|
+
else:
|
2026
|
+
# to compare groups of differing sizes, we must compute a variance
|
2027
|
+
# value for each individual comparison. Use broadcasting to get the
|
2028
|
+
# resulting matrix. [3], verified against [4] (page 308).
|
2029
|
+
normalize = 1 / nsamples_treatments + 1 / nsamples_treatments[None].T
|
2030
|
+
|
2031
|
+
# the standard error is used in the computation of the tukey criterion and
|
2032
|
+
# finding the p-values.
|
2033
|
+
stand_err = np.sqrt(normalize * mse / 2)
|
2034
|
+
df = nobs - ntreatments
|
2006
2035
|
else:
|
2007
|
-
#
|
2008
|
-
#
|
2009
|
-
#
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2036
|
+
# `stand_err` is the denominator of the Behrens-Fisher statistic ($v$)
|
2037
|
+
# with a factor of $\sqrt{2}$. Compare [7] p.116 "t-solution rejects H0 if...",
|
2038
|
+
# [7] p. 117 "H0 was rejected", and definition of `t_stat` below.
|
2039
|
+
sj2_nj = vars_ / nsamples_treatments
|
2040
|
+
si2_ni = sj2_nj[:, np.newaxis]
|
2041
|
+
stand_err = np.sqrt(si2_ni + sj2_nj) / 2**0.5
|
2042
|
+
|
2043
|
+
# `df` is the Welch degree of freedom $\nu$.
|
2044
|
+
# See [7] p. 116 "and the degrees of freedom, $\nu$, are given by...".
|
2045
|
+
njm1 = nsamples_treatments - 1
|
2046
|
+
nim1 = njm1[:, np.newaxis]
|
2047
|
+
df = (si2_ni + sj2_nj)**2 / (si2_ni**2 / nim1 + sj2_nj**2 / njm1)
|
2015
2048
|
|
2016
2049
|
# the mean difference is the test statistic.
|
2017
2050
|
mean_differences = means[None].T - means
|
@@ -2020,8 +2053,8 @@ def tukey_hsd(*args):
|
|
2020
2053
|
# studentized range to get the p-value.
|
2021
2054
|
t_stat = np.abs(mean_differences) / stand_err
|
2022
2055
|
|
2023
|
-
params = t_stat, ntreatments,
|
2056
|
+
params = t_stat, ntreatments, df
|
2024
2057
|
pvalues = distributions.studentized_range.sf(*params)
|
2025
2058
|
|
2026
2059
|
return TukeyHSDResult(mean_differences, pvalues, ntreatments,
|
2027
|
-
|
2060
|
+
df, stand_err)
|
scipy/stats/_kde.py
CHANGED
@@ -17,13 +17,9 @@
|
|
17
17
|
#
|
18
18
|
#-------------------------------------------------------------------------------
|
19
19
|
|
20
|
-
# Standard library imports.
|
21
|
-
import threading
|
22
|
-
import warnings
|
23
|
-
|
24
20
|
# SciPy imports.
|
25
21
|
from scipy import linalg, special
|
26
|
-
from scipy._lib._util import check_random_state
|
22
|
+
from scipy._lib._util import check_random_state, np_vecdot
|
27
23
|
|
28
24
|
from numpy import (asarray, atleast_2d, reshape, zeros, newaxis, exp, pi,
|
29
25
|
sqrt, ravel, power, atleast_1d, squeeze, sum, transpose,
|
@@ -31,14 +27,11 @@ from numpy import (asarray, atleast_2d, reshape, zeros, newaxis, exp, pi,
|
|
31
27
|
import numpy as np
|
32
28
|
|
33
29
|
# Local imports.
|
34
|
-
from . import _mvn
|
35
30
|
from ._stats import gaussian_kernel_estimate, gaussian_kernel_estimate_log
|
36
|
-
|
31
|
+
from ._multivariate import multivariate_normal
|
37
32
|
|
38
33
|
__all__ = ['gaussian_kde']
|
39
34
|
|
40
|
-
MVN_LOCK = threading.Lock()
|
41
|
-
|
42
35
|
|
43
36
|
class gaussian_kde:
|
44
37
|
"""Representation of a kernel-density estimate using Gaussian kernels.
|
@@ -56,9 +49,9 @@ class gaussian_kde:
|
|
56
49
|
Datapoints to estimate from. In case of univariate data this is a 1-D
|
57
50
|
array, otherwise a 2-D array with shape (# of dims, # of data).
|
58
51
|
bw_method : str, scalar or callable, optional
|
59
|
-
The method used to calculate the
|
52
|
+
The method used to calculate the bandwidth factor. This can be
|
60
53
|
'scott', 'silverman', a scalar constant or a callable. If a scalar,
|
61
|
-
this will be used directly as `
|
54
|
+
this will be used directly as `factor`. If a callable, it should
|
62
55
|
take a `gaussian_kde` instance as only parameter and return a scalar.
|
63
56
|
If None (default), 'scott' is used. See Notes for more details.
|
64
57
|
weights : array_like, optional
|
@@ -78,12 +71,11 @@ class gaussian_kde:
|
|
78
71
|
|
79
72
|
.. versionadded:: 1.2.0
|
80
73
|
factor : float
|
81
|
-
The bandwidth factor
|
82
|
-
of `kde.factor` multiplies the covariance matrix of the data in the kde
|
83
|
-
estimation.
|
74
|
+
The bandwidth factor obtained from `covariance_factor`.
|
84
75
|
covariance : ndarray
|
85
|
-
The covariance matrix
|
86
|
-
|
76
|
+
The kernel covariance matrix; this is the data covariance matrix
|
77
|
+
multiplied by the square of the bandwidth factor, e.g.
|
78
|
+
``np.cov(dataset) * factor**2``.
|
87
79
|
inv_cov : ndarray
|
88
80
|
The inverse of `covariance`.
|
89
81
|
|
@@ -119,7 +111,8 @@ class gaussian_kde:
|
|
119
111
|
neff**(-1./(d+4)),
|
120
112
|
|
121
113
|
with ``neff`` the effective number of datapoints.
|
122
|
-
Silverman's
|
114
|
+
Silverman's suggestion for *multivariate* data [2]_, implemented as
|
115
|
+
`silverman_factor`, is::
|
123
116
|
|
124
117
|
(n * (d + 2) / 4.)**(-1. / (d + 4)).
|
125
118
|
|
@@ -127,6 +120,10 @@ class gaussian_kde:
|
|
127
120
|
|
128
121
|
(neff * (d + 2) / 4.)**(-1. / (d + 4)).
|
129
122
|
|
123
|
+
Note that this is not the same as "Silverman's rule of thumb" [6]_, which
|
124
|
+
may be more robust in the univariate case; see documentation of the
|
125
|
+
``set_bandwidth`` method for implementing a custom bandwidth rule.
|
126
|
+
|
130
127
|
Good general descriptions of kernel density estimation can be found in [1]_
|
131
128
|
and [2]_, the mathematics for this multi-dimensional implementation can be
|
132
129
|
found in [1]_.
|
@@ -157,6 +154,8 @@ class gaussian_kde:
|
|
157
154
|
Analysis, Vol. 36, pp. 279-298, 2001.
|
158
155
|
.. [5] Gray P. G., 1969, Journal of the Royal Statistical Society.
|
159
156
|
Series A (General), 132, 272
|
157
|
+
.. [6] Kernel density estimation. *Wikipedia.*
|
158
|
+
https://en.wikipedia.org/wiki/Kernel_density_estimation
|
160
159
|
|
161
160
|
Examples
|
162
161
|
--------
|
@@ -195,6 +194,16 @@ class gaussian_kde:
|
|
195
194
|
>>> ax.set_ylim([ymin, ymax])
|
196
195
|
>>> plt.show()
|
197
196
|
|
197
|
+
Compare against manual KDE at a point:
|
198
|
+
|
199
|
+
>>> point = [1, 2]
|
200
|
+
>>> mean = values.T
|
201
|
+
>>> cov = kernel.factor**2 * np.cov(values)
|
202
|
+
>>> X = stats.multivariate_normal(cov=cov)
|
203
|
+
>>> res = kernel.pdf(point)
|
204
|
+
>>> ref = X.pdf(point - mean).sum() / len(mean)
|
205
|
+
>>> np.allclose(res, ref)
|
206
|
+
True
|
198
207
|
"""
|
199
208
|
def __init__(self, dataset, bw_method=None, weights=None):
|
200
209
|
self.dataset = atleast_2d(asarray(dataset))
|
@@ -210,7 +219,7 @@ class gaussian_kde:
|
|
210
219
|
raise ValueError("`weights` input should be one-dimensional.")
|
211
220
|
if len(self._weights) != self.n:
|
212
221
|
raise ValueError("`weights` input should be of length n")
|
213
|
-
self._neff = 1/
|
222
|
+
self._neff = 1/np_vecdot(self._weights, self._weights)
|
214
223
|
|
215
224
|
# This can be converted to a warning once gh-10205 is resolved
|
216
225
|
if self.d > self.n:
|
@@ -324,8 +333,8 @@ class gaussian_kde:
|
|
324
333
|
sqrt_det = np.prod(np.diagonal(sum_cov_chol[0]))
|
325
334
|
norm_const = power(2 * pi, sum_cov.shape[0] / 2.0) * sqrt_det
|
326
335
|
|
327
|
-
energies =
|
328
|
-
result =
|
336
|
+
energies = np_vecdot(diff, tdiff, axis=0) / 2.0
|
337
|
+
result = np_vecdot(exp(-energies), self.weights, axis=0) / norm_const
|
329
338
|
|
330
339
|
return result
|
331
340
|
|
@@ -359,12 +368,11 @@ class gaussian_kde:
|
|
359
368
|
normalized_low = ravel((low - self.dataset) / stdev)
|
360
369
|
normalized_high = ravel((high - self.dataset) / stdev)
|
361
370
|
|
362
|
-
|
363
|
-
|
364
|
-
special.ndtr(normalized_low)))
|
371
|
+
delta = special.ndtr(normalized_high) - special.ndtr(normalized_low)
|
372
|
+
value = np_vecdot(self.weights, delta)
|
365
373
|
return value
|
366
374
|
|
367
|
-
def integrate_box(self, low_bounds, high_bounds, maxpts=None):
|
375
|
+
def integrate_box(self, low_bounds, high_bounds, maxpts=None, *, rng=None):
|
368
376
|
"""Computes the integral of a pdf over a rectangular interval.
|
369
377
|
|
370
378
|
Parameters
|
@@ -375,6 +383,11 @@ class gaussian_kde:
|
|
375
383
|
A 1-D array containing the upper bounds of integration.
|
376
384
|
maxpts : int, optional
|
377
385
|
The maximum number of points to use for integration.
|
386
|
+
rng : `numpy.random.Generator`, optional
|
387
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
388
|
+
generator is created using entropy from the operating system. Types
|
389
|
+
other than `numpy.random.Generator` are passed to
|
390
|
+
`numpy.random.default_rng` to instantiate a ``Generator``.
|
378
391
|
|
379
392
|
Returns
|
380
393
|
-------
|
@@ -382,20 +395,12 @@ class gaussian_kde:
|
|
382
395
|
The result of the integral.
|
383
396
|
|
384
397
|
"""
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
value, inform = _mvn.mvnun_weighted(low_bounds, high_bounds,
|
392
|
-
self.dataset, self.weights,
|
393
|
-
self.covariance, **extra_kwds)
|
394
|
-
if inform:
|
395
|
-
msg = f'An integral in _mvn.mvnun requires more points than {self.d * 1000}'
|
396
|
-
warnings.warn(msg, stacklevel=2)
|
397
|
-
|
398
|
-
return value
|
398
|
+
low, high = low_bounds - self.dataset.T, high_bounds - self.dataset.T
|
399
|
+
values = multivariate_normal.cdf(
|
400
|
+
high, lower_limit=low, cov=self.covariance, maxpts=maxpts,
|
401
|
+
rng=rng
|
402
|
+
)
|
403
|
+
return np_vecdot(values, self.weights, axis=-1)
|
399
404
|
|
400
405
|
def integrate_kde(self, other):
|
401
406
|
"""
|
@@ -437,8 +442,8 @@ class gaussian_kde:
|
|
437
442
|
diff = large.dataset - mean
|
438
443
|
tdiff = linalg.cho_solve(sum_cov_chol, diff)
|
439
444
|
|
440
|
-
energies =
|
441
|
-
result +=
|
445
|
+
energies = np_vecdot(diff, tdiff, axis=0) / 2.0
|
446
|
+
result += np_vecdot(exp(-energies), large.weights, axis=0)*small.weights[i]
|
442
447
|
|
443
448
|
sqrt_det = np.prod(np.diagonal(sum_cov_chol[0]))
|
444
449
|
norm_const = power(2 * pi, sum_cov.shape[0] / 2.0) * sqrt_det
|
@@ -504,14 +509,13 @@ class gaussian_kde:
|
|
504
509
|
|
505
510
|
# Default method to calculate bandwidth, can be overwritten by subclass
|
506
511
|
covariance_factor = scotts_factor
|
507
|
-
covariance_factor.__doc__ = """Computes the
|
508
|
-
|
509
|
-
matrix. The default is `scotts_factor`. A subclass can overwrite this
|
512
|
+
covariance_factor.__doc__ = """Computes the bandwidth factor `factor`.
|
513
|
+
The default is `scotts_factor`. A subclass can overwrite this
|
510
514
|
method to provide a different method, or set it through a call to
|
511
|
-
`
|
515
|
+
`set_bandwidth`."""
|
512
516
|
|
513
517
|
def set_bandwidth(self, bw_method=None):
|
514
|
-
"""Compute the
|
518
|
+
"""Compute the bandwidth factor with given method.
|
515
519
|
|
516
520
|
The new bandwidth calculated after a call to `set_bandwidth` is used
|
517
521
|
for subsequent evaluations of the estimated density.
|
@@ -519,12 +523,12 @@ class gaussian_kde:
|
|
519
523
|
Parameters
|
520
524
|
----------
|
521
525
|
bw_method : str, scalar or callable, optional
|
522
|
-
The method used to calculate the
|
526
|
+
The method used to calculate the bandwidth factor. This can be
|
523
527
|
'scott', 'silverman', a scalar constant or a callable. If a
|
524
|
-
scalar, this will be used directly as `
|
528
|
+
scalar, this will be used directly as `factor`. If a callable,
|
525
529
|
it should take a `gaussian_kde` instance as only parameter and
|
526
530
|
return a scalar. If None (default), nothing happens; the current
|
527
|
-
`
|
531
|
+
`covariance_factor` method is kept.
|
528
532
|
|
529
533
|
Notes
|
530
534
|
-----
|
@@ -701,7 +705,7 @@ class gaussian_kde:
|
|
701
705
|
try:
|
702
706
|
return self._neff
|
703
707
|
except AttributeError:
|
704
|
-
self._neff = 1/
|
708
|
+
self._neff = 1/np_vecdot(self.weights, self.weights)
|
705
709
|
return self._neff
|
706
710
|
|
707
711
|
|
scipy/stats/_ksstats.py
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
import numpy as np
|
69
69
|
import scipy.special
|
70
70
|
import scipy.special._ufuncs as scu
|
71
|
-
from scipy.
|
71
|
+
from scipy.stats._finite_differences import _derivative
|
72
72
|
|
73
73
|
_E128 = 128
|
74
74
|
_EP128 = np.ldexp(np.longdouble(1), _E128)
|
@@ -10,8 +10,8 @@ from scipy import integrate
|
|
10
10
|
from scipy.integrate._quadrature import _builtincoeffs
|
11
11
|
from scipy import interpolate
|
12
12
|
from scipy.interpolate import RectBivariateSpline
|
13
|
+
import scipy._lib.array_api_extra as xpx
|
13
14
|
import scipy.special as sc
|
14
|
-
from scipy._lib._util import _lazywhere
|
15
15
|
from .._distn_infrastructure import rv_continuous, _ShapeInfo, rv_continuous_frozen
|
16
16
|
from .._continuous_distns import uniform, expon, _norm_pdf, _norm_cdf
|
17
17
|
from .levyst import Nolan
|
@@ -456,13 +456,9 @@ def _rvs_Z1(alpha, beta, size=None, random_state=None):
|
|
456
456
|
return res3
|
457
457
|
|
458
458
|
def alphanot1func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
|
459
|
-
|
460
|
-
beta == 0,
|
461
|
-
|
462
|
-
beta0func,
|
463
|
-
f2=otherwise,
|
464
|
-
)
|
465
|
-
return res
|
459
|
+
return xpx.apply_where(
|
460
|
+
beta == 0, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
|
461
|
+
beta0func, otherwise)
|
466
462
|
|
467
463
|
alpha = np.broadcast_to(alpha, size)
|
468
464
|
beta = np.broadcast_to(beta, size)
|
@@ -474,13 +470,9 @@ def _rvs_Z1(alpha, beta, size=None, random_state=None):
|
|
474
470
|
bTH = beta * TH
|
475
471
|
cosTH = np.cos(TH)
|
476
472
|
tanTH = np.tan(TH)
|
477
|
-
|
478
|
-
alpha == 1,
|
479
|
-
|
480
|
-
alpha1func,
|
481
|
-
f2=alphanot1func,
|
482
|
-
)
|
483
|
-
return res
|
473
|
+
return xpx.apply_where(
|
474
|
+
alpha == 1, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
|
475
|
+
alpha1func, alphanot1func)
|
484
476
|
|
485
477
|
|
486
478
|
def _fitstart_S0(data):
|
Binary file
|
Binary file
|