scipy 1.15.3__cp313-cp313t-win_amd64.whl → 1.16.0rc2__cp313-cp313t-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 +7 -7
- scipy/__init__.py +3 -6
- scipy/_cyutility.cp313t-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp313t-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp313t-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp313t-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp313t-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp313t-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp313t-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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp313t-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp313-cp313t-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313t-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/stats/_page_trend_test.py
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
from dataclasses import dataclass
|
1
2
|
from itertools import permutations
|
2
|
-
import numpy as np
|
3
3
|
import math
|
4
|
+
import threading
|
5
|
+
|
6
|
+
import numpy as np
|
7
|
+
|
4
8
|
from ._continuous_distns import norm
|
5
9
|
import scipy.stats
|
6
|
-
from dataclasses import dataclass
|
7
10
|
|
8
11
|
|
9
12
|
@dataclass
|
@@ -304,6 +307,8 @@ def page_trend_test(data, ranked=False, predicted_ranks=None, method='auto'):
|
|
304
307
|
method='exact')
|
305
308
|
|
306
309
|
"""
|
310
|
+
if not hasattr(_pagel_state, 'state'):
|
311
|
+
_pagel_state.state = _PageL()
|
307
312
|
|
308
313
|
# Possible values of the method parameter and the corresponding function
|
309
314
|
# used to evaluate the p value
|
@@ -405,8 +410,8 @@ def _l_p_exact(L, m, n):
|
|
405
410
|
# [1] uses m, n; [5] uses n, k.
|
406
411
|
# Switch convention here because exact calculation code references [5].
|
407
412
|
L, n, k = int(L), int(m), int(n)
|
408
|
-
_pagel_state.set_k(k)
|
409
|
-
return _pagel_state.sf(L, n)
|
413
|
+
_pagel_state.state.set_k(k)
|
414
|
+
return _pagel_state.state.sf(L, n)
|
410
415
|
|
411
416
|
|
412
417
|
class _PageL:
|
@@ -476,4 +481,6 @@ class _PageL:
|
|
476
481
|
|
477
482
|
|
478
483
|
# Maintain state for faster repeat calls to page_trend_test w/ method='exact'
|
479
|
-
|
484
|
+
# _PageL() is calculated once per thread and stored as an attribute on
|
485
|
+
# this thread-local variable inside page_trend_test().
|
486
|
+
_pagel_state = threading.local()
|
@@ -30,8 +30,8 @@ class _ProbabilityDistribution(ABC):
|
|
30
30
|
Notes
|
31
31
|
-----
|
32
32
|
Suppose a continuous probability distribution has support ``(l, r)``.
|
33
|
-
The following table summarizes the value returned by
|
34
|
-
|
33
|
+
The following table summarizes the value returned by several
|
34
|
+
methods when the argument is outside the support.
|
35
35
|
|
36
36
|
+----------------+---------------------+---------------------+
|
37
37
|
| Method | Value for ``x < l`` | Value for ``x > r`` |
|
@@ -49,13 +49,16 @@ class _ProbabilityDistribution(ABC):
|
|
49
49
|
| ``logccdf(x)`` | 0 | -inf |
|
50
50
|
+----------------+---------------------+---------------------+
|
51
51
|
|
52
|
-
For
|
53
|
-
|
54
|
-
|
52
|
+
For discrete distributions, the same table is applicable with
|
53
|
+
``pmf`` and ``logpmf`` substituted for ``pdf`` and ``logpdf``.
|
54
|
+
|
55
|
+
For the ``cdf`` and related methods of continuous distributions, the
|
56
|
+
inequality need not be strict; i.e. the tabulated value is returned
|
57
|
+
when the method is evaluated *at* the corresponding boundary.
|
55
58
|
|
56
59
|
The following table summarizes the value returned by the inverse
|
57
|
-
methods
|
58
|
-
|
60
|
+
methods for arguments ``0`` and ``1``, whether the distribution
|
61
|
+
is continuous or discrete.
|
59
62
|
|
60
63
|
+-------------+-----------+-----------+
|
61
64
|
| Method | ``x = 0`` | ``x = 1`` |
|
@@ -65,7 +68,7 @@ class _ProbabilityDistribution(ABC):
|
|
65
68
|
| ``icdf(x)`` | ``r`` | ``l`` |
|
66
69
|
+-------------+-----------+-----------+
|
67
70
|
|
68
|
-
For the inverse log-functions, the same values are returned
|
71
|
+
For the inverse log-functions, the same values are returned
|
69
72
|
for ``x = log(0)`` and ``x = log(1)``. All inverse functions return
|
70
73
|
``nan`` when evaluated at an argument outside the domain ``0`` to ``1``.
|
71
74
|
|
@@ -173,7 +176,7 @@ class _ProbabilityDistribution(ABC):
|
|
173
176
|
|
174
177
|
In terms of probability density function :math:`f(x)` and support
|
175
178
|
:math:`\chi`, the "raw" moment (about the origin) of order :math:`n` of
|
176
|
-
a random variable :math:`X` is:
|
179
|
+
a continuous random variable :math:`X` is:
|
177
180
|
|
178
181
|
.. math::
|
179
182
|
|
@@ -195,6 +198,9 @@ class _ProbabilityDistribution(ABC):
|
|
195
198
|
\tilde{\mu}_n(X) = \frac{\mu_n(X)}
|
196
199
|
{\sigma^n}
|
197
200
|
|
201
|
+
The definitions for discrete random variables are analogous, with
|
202
|
+
sums over the support replacing the integrals.
|
203
|
+
|
198
204
|
Parameters
|
199
205
|
----------
|
200
206
|
order : int
|
@@ -217,7 +223,8 @@ class _ProbabilityDistribution(ABC):
|
|
217
223
|
vice versa (see Notes)
|
218
224
|
- ``'normalize'``: normalize a central moment to get a standardized
|
219
225
|
or vice versa
|
220
|
-
- ``'quadrature'``: numerically integrate
|
226
|
+
- ``'quadrature'``: numerically integrate (or, in the discrete case, sum)
|
227
|
+
according to the definition
|
221
228
|
|
222
229
|
Not all `method` options are available for all orders, kinds, and
|
223
230
|
distributions. If the selected `method` is not available, a
|
@@ -365,15 +372,19 @@ class _ProbabilityDistribution(ABC):
|
|
365
372
|
|
366
373
|
@abstractmethod
|
367
374
|
def median(self, *, method):
|
368
|
-
r"""Median (50th
|
375
|
+
r"""Median (50th percentile)
|
369
376
|
|
370
377
|
If a continuous random variable :math:`X` has probability :math:`0.5` of
|
371
378
|
taking on a value less than :math:`m`, then :math:`m` is the median.
|
372
|
-
|
379
|
+
|
380
|
+
More generally, a median is a value :math:`m` for which:
|
373
381
|
|
374
382
|
.. math::
|
375
383
|
|
376
|
-
P(X ≤ m)
|
384
|
+
P(X ≤ m) ≤ 0.5 ≥ P(X ≥ m)
|
385
|
+
|
386
|
+
For discrete random variables, the median may not be unique, in which
|
387
|
+
case the smallest value satisfying the definition is reported.
|
377
388
|
|
378
389
|
Parameters
|
379
390
|
----------
|
@@ -428,8 +439,8 @@ class _ProbabilityDistribution(ABC):
|
|
428
439
|
|
429
440
|
Informally, the mode is a value that a random variable has the highest
|
430
441
|
probability (density) of assuming. That is, the mode is the element of
|
431
|
-
the support :math:`\chi` that maximizes the probability density
|
432
|
-
function :math:`f(x)`:
|
442
|
+
the support :math:`\chi` that maximizes the probability density (or mass,
|
443
|
+
for discrete random variables) function :math:`f(x)`:
|
433
444
|
|
434
445
|
.. math::
|
435
446
|
|
@@ -443,7 +454,7 @@ class _ProbabilityDistribution(ABC):
|
|
443
454
|
following options, listed in order of precedence.
|
444
455
|
|
445
456
|
- ``'formula'``: use a formula for the median
|
446
|
-
- ``'optimization'``: numerically maximize the PDF
|
457
|
+
- ``'optimization'``: numerically maximize the PDF/PMF
|
447
458
|
|
448
459
|
Not all `method` options are available for all distributions.
|
449
460
|
If the selected `method` is not available, a ``NotImplementedError``
|
@@ -465,7 +476,7 @@ class _ProbabilityDistribution(ABC):
|
|
465
476
|
For some distributions
|
466
477
|
|
467
478
|
#. the mode is not unique (e.g. the uniform distribution);
|
468
|
-
#. the PDF has one or more singularities, and it is
|
479
|
+
#. the PDF has one or more singularities, and it is debatable whether
|
469
480
|
a singularity is considered to be in the domain and called the mode
|
470
481
|
(e.g. the gamma distribution with shape parameter less than 1); and/or
|
471
482
|
#. the probability density function may have one or more local maxima
|
@@ -737,9 +748,12 @@ class _ProbabilityDistribution(ABC):
|
|
737
748
|
By definition of the support, the PDF evaluates to its minimum value
|
738
749
|
of :math:`0` outside the support; i.e. for :math:`x < l` or
|
739
750
|
:math:`x > r`. The maximum of the PDF may be less than or greater than
|
740
|
-
:math:`1`; since the
|
751
|
+
:math:`1`; since the value is a probability *density*, only its integral
|
741
752
|
over the support must equal :math:`1`.
|
742
753
|
|
754
|
+
For discrete distributions, `pdf` returns ``inf`` at supported points
|
755
|
+
and ``0`` elsewhere.
|
756
|
+
|
743
757
|
References
|
744
758
|
----------
|
745
759
|
.. [1] Probability density function, *Wikipedia*,
|
@@ -823,6 +837,9 @@ class _ProbabilityDistribution(ABC):
|
|
823
837
|
to work with the logarithms of probabilities and probability densities to
|
824
838
|
avoid underflow.
|
825
839
|
|
840
|
+
For discrete distributions, `logpdf` returns ``inf`` at supported points and
|
841
|
+
``-inf`` (``log(0)``) elsewhere.
|
842
|
+
|
826
843
|
References
|
827
844
|
----------
|
828
845
|
.. [1] Probability density function, *Wikipedia*,
|
@@ -846,6 +863,156 @@ class _ProbabilityDistribution(ABC):
|
|
846
863
|
"""
|
847
864
|
raise NotImplementedError()
|
848
865
|
|
866
|
+
def pmf(self, x, /, *, method=None):
|
867
|
+
r"""Probability mass function
|
868
|
+
|
869
|
+
The probability mass function ("PMF"), denoted :math:`f(x)`, is the
|
870
|
+
probability that the random variable :math:`X` will assume the value :math:`x`.
|
871
|
+
|
872
|
+
.. math::
|
873
|
+
|
874
|
+
f(x) = P(X = x)
|
875
|
+
|
876
|
+
`pmf` accepts `x` for :math:`x`.
|
877
|
+
|
878
|
+
Parameters
|
879
|
+
----------
|
880
|
+
x : array_like
|
881
|
+
The argument of the PMF.
|
882
|
+
method : {None, 'formula', 'logexp'}
|
883
|
+
The strategy used to evaluate the PMF. By default (``None``), the
|
884
|
+
infrastructure chooses between the following options, listed in
|
885
|
+
order of precedence.
|
886
|
+
|
887
|
+
- ``'formula'``: use a formula for the PMF itself
|
888
|
+
- ``'logexp'``: evaluate the log-PMF and exponentiate
|
889
|
+
|
890
|
+
Not all `method` options are available for all distributions.
|
891
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
892
|
+
will be raised.
|
893
|
+
|
894
|
+
Returns
|
895
|
+
-------
|
896
|
+
out : array
|
897
|
+
The PMF evaluated at the argument `x`.
|
898
|
+
|
899
|
+
See Also
|
900
|
+
--------
|
901
|
+
cdf
|
902
|
+
logpmf
|
903
|
+
|
904
|
+
Notes
|
905
|
+
-----
|
906
|
+
Suppose a discrete probability distribution has support over the integers
|
907
|
+
:math:`{l, l+1, ..., r-1, r}`.
|
908
|
+
By definition of the support, the PMF evaluates to its minimum value
|
909
|
+
of :math:`0` for non-integral :math:`x` and for :math:`x` outside the support;
|
910
|
+
i.e. for :math:`x < l` or :math:`x > r`.
|
911
|
+
|
912
|
+
For continuous distributions, `pmf` returns ``0`` at all real arguments.
|
913
|
+
|
914
|
+
References
|
915
|
+
----------
|
916
|
+
.. [1] Probability mass function, *Wikipedia*,
|
917
|
+
https://en.wikipedia.org/wiki/Probability_mass_function
|
918
|
+
|
919
|
+
Examples
|
920
|
+
--------
|
921
|
+
Instantiate a distribution with the desired parameters:
|
922
|
+
|
923
|
+
>>> from scipy import stats
|
924
|
+
>>> X = stats.Binomial(n=10, p=0.5)
|
925
|
+
|
926
|
+
Evaluate the PMF at the desired argument:
|
927
|
+
|
928
|
+
>>> X.pmf(5)
|
929
|
+
np.float64(0.24609375)
|
930
|
+
|
931
|
+
"""
|
932
|
+
raise NotImplementedError()
|
933
|
+
|
934
|
+
def logpmf(self, x, /, *, method=None):
|
935
|
+
r"""Log of the probability mass function
|
936
|
+
|
937
|
+
The probability mass function ("PMF"), denoted :math:`f(x)`, is the
|
938
|
+
probability that the random variable :math:`X` will assume the value :math:`x`.
|
939
|
+
|
940
|
+
.. math::
|
941
|
+
|
942
|
+
f(x) = \frac{d}{dx} F(x)
|
943
|
+
|
944
|
+
`logpmf` computes the logarithm of the probability mass function
|
945
|
+
("log-PMF"), :math:`\log(f(x))`, but it may be numerically favorable
|
946
|
+
compared to the naive implementation (computing :math:`f(x)` and
|
947
|
+
taking the logarithm).
|
948
|
+
|
949
|
+
`logpmf` accepts `x` for :math:`x`.
|
950
|
+
|
951
|
+
Parameters
|
952
|
+
----------
|
953
|
+
x : array_like
|
954
|
+
The argument of the log-PMF.
|
955
|
+
method : {None, 'formula', 'logexp'}
|
956
|
+
The strategy used to evaluate the log-PMF. By default (``None``), the
|
957
|
+
infrastructure chooses between the following options, listed in order
|
958
|
+
of precedence.
|
959
|
+
|
960
|
+
- ``'formula'``: use a formula for the log-PMF itself
|
961
|
+
- ``'logexp'``: evaluate the PMF and takes its logarithm
|
962
|
+
|
963
|
+
Not all `method` options are available for all distributions.
|
964
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
965
|
+
will be raised.
|
966
|
+
|
967
|
+
Returns
|
968
|
+
-------
|
969
|
+
out : array
|
970
|
+
The log-PMF evaluated at the argument `x`.
|
971
|
+
|
972
|
+
See Also
|
973
|
+
--------
|
974
|
+
pmf
|
975
|
+
logcdf
|
976
|
+
|
977
|
+
Notes
|
978
|
+
-----
|
979
|
+
Suppose a discrete probability distribution has support over the integers
|
980
|
+
:math:`{l, l+1, ..., r-1, r}`.
|
981
|
+
By definition of the support, the log-PMF evaluates to its minimum value
|
982
|
+
of :math:`-\infty` (i.e. :math:`\log(0)`) for non-integral :math:`x` and
|
983
|
+
for :math:`x` outside the support; i.e. for :math:`x < l` or :math:`x > r`.
|
984
|
+
|
985
|
+
For distributions with infinite support, it is common for `pmf` to return
|
986
|
+
a value of ``0`` when the argument is theoretically within the support;
|
987
|
+
this can occur because the true value of the PMF is too small to be
|
988
|
+
represented by the chosen dtype. The log-PMF, however, will often be finite
|
989
|
+
(not ``-inf``) over a much larger domain. Consequently, it may be preferred
|
990
|
+
to work with the logarithms of probabilities and probability densities to
|
991
|
+
avoid underflow.
|
992
|
+
|
993
|
+
References
|
994
|
+
----------
|
995
|
+
.. [1] Probability density function, *Wikipedia*,
|
996
|
+
https://en.wikipedia.org/wiki/Probability_density_function
|
997
|
+
|
998
|
+
Examples
|
999
|
+
--------
|
1000
|
+
Instantiate a distribution with the desired parameters:
|
1001
|
+
|
1002
|
+
>>> import numpy as np
|
1003
|
+
>>> from scipy import stats
|
1004
|
+
>>> X = stats.Binomial(n=10, p=0.5)
|
1005
|
+
|
1006
|
+
Evaluate the log-PMF at the desired argument:
|
1007
|
+
|
1008
|
+
>>> X.logpmf(5)
|
1009
|
+
np.float64(-1.4020427180880297)
|
1010
|
+
>>> np.allclose(X.logpmf(5), np.log(X.pmf(5)))
|
1011
|
+
True
|
1012
|
+
|
1013
|
+
"""
|
1014
|
+
raise NotImplementedError()
|
1015
|
+
|
849
1016
|
@abstractmethod
|
850
1017
|
def cdf(self, x, y, /, *, method):
|
851
1018
|
r"""Cumulative distribution function
|
@@ -880,7 +1047,8 @@ class _ProbabilityDistribution(ABC):
|
|
880
1047
|
- ``'formula'``: use a formula for the CDF itself
|
881
1048
|
- ``'logexp'``: evaluate the log-CDF and exponentiate
|
882
1049
|
- ``'complement'``: evaluate the CCDF and take the complement
|
883
|
-
- ``'quadrature'``: numerically integrate the PDF
|
1050
|
+
- ``'quadrature'``: numerically integrate the PDF (or, in the discrete
|
1051
|
+
case, sum the PMF)
|
884
1052
|
|
885
1053
|
In place of ``'complement'``, the two-argument form accepts:
|
886
1054
|
|
@@ -920,6 +1088,17 @@ class _ProbabilityDistribution(ABC):
|
|
920
1088
|
The CDF evaluates to its minimum value of :math:`0` for :math:`x ≤ l`
|
921
1089
|
and its maximum value of :math:`1` for :math:`x ≥ r`.
|
922
1090
|
|
1091
|
+
Suppose a discrete probability distribution has support :math:`[l, r]`.
|
1092
|
+
The CDF :math:`F(x)` is related to the probability mass function
|
1093
|
+
:math:`f(x)` by:
|
1094
|
+
|
1095
|
+
.. math::
|
1096
|
+
|
1097
|
+
F(x) = \sum_{u=l}^{\lfloor x \rfloor} f(u)
|
1098
|
+
|
1099
|
+
The CDF evaluates to its minimum value of :math:`0` for :math:`x < l`
|
1100
|
+
and its maximum value of :math:`1` for :math:`x ≥ r`.
|
1101
|
+
|
923
1102
|
The CDF is also known simply as the "distribution function".
|
924
1103
|
|
925
1104
|
References
|
@@ -951,14 +1130,24 @@ class _ProbabilityDistribution(ABC):
|
|
951
1130
|
def icdf(self, p, /, *, method):
|
952
1131
|
r"""Inverse of the cumulative distribution function.
|
953
1132
|
|
954
|
-
|
955
|
-
denoted :math:`F^{-1}(p)`, is the
|
956
|
-
|
1133
|
+
For monotonic continuous distributions, the inverse of the cumulative
|
1134
|
+
distribution function ("inverse CDF"), denoted :math:`F^{-1}(p)`, is the
|
1135
|
+
argument :math:`x` for which the cumulative distribution function
|
1136
|
+
:math:`F(x)` evaluates to :math:`p`.
|
957
1137
|
|
958
1138
|
.. math::
|
959
1139
|
|
960
1140
|
F^{-1}(p) = x \quad \text{s.t.} \quad F(x) = p
|
961
1141
|
|
1142
|
+
When a strict "inverse" of the cumulative distribution function does not
|
1143
|
+
exist (e.g. discrete random variables), the "inverse CDF" is defined by
|
1144
|
+
convention as the smallest value within the support :math:`\chi` for which
|
1145
|
+
:math:`F(x)` is at least :math:`p`.
|
1146
|
+
|
1147
|
+
.. math::
|
1148
|
+
|
1149
|
+
F^{-1}(p) = \min_\chi \quad \text{s.t.} \quad F(x) ≥ p
|
1150
|
+
|
962
1151
|
`icdf` accepts `p` for :math:`p \in [0, 1]`.
|
963
1152
|
|
964
1153
|
Parameters
|
@@ -992,7 +1181,7 @@ class _ProbabilityDistribution(ABC):
|
|
992
1181
|
|
993
1182
|
Notes
|
994
1183
|
-----
|
995
|
-
Suppose a
|
1184
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
996
1185
|
inverse CDF returns its minimum value of :math:`l` at :math:`p = 0`
|
997
1186
|
and its maximum value of :math:`r` at :math:`p = 1`. Because the CDF
|
998
1187
|
has range :math:`[0, 1]`, the inverse CDF is only defined on the
|
@@ -1063,7 +1252,8 @@ class _ProbabilityDistribution(ABC):
|
|
1063
1252
|
- ``'formula'``: use a formula for the CCDF itself
|
1064
1253
|
- ``'logexp'``: evaluate the log-CCDF and exponentiate
|
1065
1254
|
- ``'complement'``: evaluate the CDF and take the complement
|
1066
|
-
- ``'quadrature'``: numerically integrate the PDF
|
1255
|
+
- ``'quadrature'``: numerically integrate the PDF (or, in the discrete
|
1256
|
+
case, sum the PMF)
|
1067
1257
|
|
1068
1258
|
The two-argument form chooses between:
|
1069
1259
|
|
@@ -1103,6 +1293,17 @@ class _ProbabilityDistribution(ABC):
|
|
1103
1293
|
The CCDF returns its minimum value of :math:`0` for :math:`x ≥ r`
|
1104
1294
|
and its maximum value of :math:`1` for :math:`x ≤ l`.
|
1105
1295
|
|
1296
|
+
Suppose a discrete probability distribution has support :math:`[l, r]`.
|
1297
|
+
The CCDF :math:`G(x)` is related to the probability mass function
|
1298
|
+
:math:`f(x)` by:
|
1299
|
+
|
1300
|
+
.. math::
|
1301
|
+
|
1302
|
+
G(x) = \sum_{u=\lfloor x + 1 \rfloor}^{r} f(u)
|
1303
|
+
|
1304
|
+
The CCDF evaluates to its minimum value of :math:`0` for :math:`x ≥ r`
|
1305
|
+
and its maximum value of :math:`1` for :math:`x < l`.
|
1306
|
+
|
1106
1307
|
The CCDF is also known as the "survival function".
|
1107
1308
|
|
1108
1309
|
References
|
@@ -1146,6 +1347,15 @@ class _ProbabilityDistribution(ABC):
|
|
1146
1347
|
|
1147
1348
|
G^{-1}(p) = x \quad \text{s.t.} \quad G(x) = p
|
1148
1349
|
|
1350
|
+
When a strict "inverse" of the complementary cumulative distribution function
|
1351
|
+
does not exist (e.g. discrete random variables), the "inverse CCDF" is defined
|
1352
|
+
by convention as the smallest value within the support :math:`\chi` for which
|
1353
|
+
:math:`G(x)` is no greater than :math:`p`.
|
1354
|
+
|
1355
|
+
.. math::
|
1356
|
+
|
1357
|
+
G^{-1}(p) = \min_\chi \quad \text{s.t.} \quad G(x) ≤ p
|
1358
|
+
|
1149
1359
|
`iccdf` accepts `p` for :math:`p \in [0, 1]`.
|
1150
1360
|
|
1151
1361
|
Parameters
|
@@ -1174,7 +1384,7 @@ class _ProbabilityDistribution(ABC):
|
|
1174
1384
|
|
1175
1385
|
Notes
|
1176
1386
|
-----
|
1177
|
-
Suppose a
|
1387
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
1178
1388
|
inverse CCDF returns its minimum value of :math:`l` at :math:`p = 1`
|
1179
1389
|
and its maximum value of :math:`r` at :math:`p = 0`. Because the CCDF
|
1180
1390
|
has range :math:`[0, 1]`, the inverse CCDF is only defined on the
|
@@ -1249,7 +1459,8 @@ class _ProbabilityDistribution(ABC):
|
|
1249
1459
|
- ``'logexp'``: evaluate the CDF and take the logarithm
|
1250
1460
|
- ``'complement'``: evaluate the log-CCDF and take the
|
1251
1461
|
logarithmic complement (see Notes)
|
1252
|
-
- ``'quadrature'``: numerically log-integrate the log-PDF
|
1462
|
+
- ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
|
1463
|
+
discrete case, log-sum the log-PMF)
|
1253
1464
|
|
1254
1465
|
In place of ``'complement'``, the two-argument form accepts:
|
1255
1466
|
|
@@ -1275,7 +1486,8 @@ class _ProbabilityDistribution(ABC):
|
|
1275
1486
|
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1276
1487
|
The log-CDF evaluates to its minimum value of :math:`\log(0) = -\infty`
|
1277
1488
|
for :math:`x ≤ l` and its maximum value of :math:`\log(1) = 0` for
|
1278
|
-
:math:`x ≥ r`.
|
1489
|
+
:math:`x ≥ r`. An analogous statement can be made for discrete distributions,
|
1490
|
+
but the inequality governing the minimum value is strict.
|
1279
1491
|
|
1280
1492
|
For distributions with infinite support, it is common for
|
1281
1493
|
`cdf` to return a value of ``0`` when the argument
|
@@ -1368,7 +1580,7 @@ class _ProbabilityDistribution(ABC):
|
|
1368
1580
|
|
1369
1581
|
Notes
|
1370
1582
|
-----
|
1371
|
-
Suppose a
|
1583
|
+
Suppose a probability distribution has support :math:`[l, r]`.
|
1372
1584
|
The inverse log-CDF returns its minimum value of :math:`l` at
|
1373
1585
|
:math:`\log(p) = \log(0) = -\infty` and its maximum value of :math:`r` at
|
1374
1586
|
:math:`\log(p) = \log(1) = 0`. Because the log-CDF has range
|
@@ -1418,7 +1630,7 @@ class _ProbabilityDistribution(ABC):
|
|
1418
1630
|
|
1419
1631
|
G(x) = 1 - F(x) = P(X > x)
|
1420
1632
|
|
1421
|
-
|
1633
|
+
A two-argument variant of this function is:
|
1422
1634
|
|
1423
1635
|
.. math::
|
1424
1636
|
|
@@ -1444,7 +1656,8 @@ class _ProbabilityDistribution(ABC):
|
|
1444
1656
|
- ``'logexp'``: evaluate the CCDF and take the logarithm
|
1445
1657
|
- ``'complement'``: evaluate the log-CDF and take the
|
1446
1658
|
logarithmic complement (see Notes)
|
1447
|
-
- ``'quadrature'``: numerically log-integrate the log-PDF
|
1659
|
+
- ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
|
1660
|
+
discrete case, log-sum the log-PMF)
|
1448
1661
|
|
1449
1662
|
The two-argument form chooses between:
|
1450
1663
|
|
@@ -1471,7 +1684,8 @@ class _ProbabilityDistribution(ABC):
|
|
1471
1684
|
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1472
1685
|
The log-CCDF returns its minimum value of :math:`\log(0)=-\infty` for
|
1473
1686
|
:math:`x ≥ r` and its maximum value of :math:`\log(1) = 0` for
|
1474
|
-
:math:`x ≤ l`.
|
1687
|
+
:math:`x ≤ l`. An analogous statement can be made for discrete distributions,
|
1688
|
+
but the inequality governing the maximum value is strict.
|
1475
1689
|
|
1476
1690
|
For distributions with infinite support, it is common for
|
1477
1691
|
`ccdf` to return a value of ``0`` when the argument
|
@@ -1554,7 +1768,7 @@ class _ProbabilityDistribution(ABC):
|
|
1554
1768
|
|
1555
1769
|
Notes
|
1556
1770
|
-----
|
1557
|
-
Suppose a
|
1771
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
1558
1772
|
inverse log-CCDF returns its minimum value of :math:`l` at
|
1559
1773
|
:math:`\log(p) = \log(1) = 0` and its maximum value of :math:`r` at
|
1560
1774
|
:math:`\log(p) = \log(0) = -\infty`. Because the log-CCDF has range
|
@@ -1567,7 +1781,7 @@ class _ProbabilityDistribution(ABC):
|
|
1567
1781
|
however, the *logarithm* of this resulting probability may be
|
1568
1782
|
represented in floating point arithmetic, in which case this function
|
1569
1783
|
may be used to find the argument of the CCDF for which the *logarithm*
|
1570
|
-
of the resulting probability is
|
1784
|
+
of the resulting probability is :math:`y = \log(p)`.
|
1571
1785
|
|
1572
1786
|
The "logarithmic complement" of a number :math:`z` is mathematically
|
1573
1787
|
equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
|
@@ -1601,15 +1815,18 @@ class _ProbabilityDistribution(ABC):
|
|
1601
1815
|
r"""Logarithm of the differential entropy
|
1602
1816
|
|
1603
1817
|
In terms of probability density function :math:`f(x)` and support
|
1604
|
-
:math:`\chi`, the differential entropy (or simply "entropy") of a
|
1605
|
-
variable :math:`X` is:
|
1818
|
+
:math:`\chi`, the differential entropy (or simply "entropy") of a
|
1819
|
+
continuous random variable :math:`X` is:
|
1606
1820
|
|
1607
1821
|
.. math::
|
1608
1822
|
|
1609
1823
|
h(X) = - \int_{\chi} f(x) \log f(x) dx
|
1610
1824
|
|
1825
|
+
The definition for a discrete random variable is analogous, with the PMF
|
1826
|
+
replacing the PDF and a sum over the support replacing the integral.
|
1827
|
+
|
1611
1828
|
`logentropy` computes the logarithm of the differential entropy
|
1612
|
-
("log-entropy"), :math
|
1829
|
+
("log-entropy"), :math:`\log(h(X))`, but it may be numerically favorable
|
1613
1830
|
compared to the naive implementation (computing :math:`h(X)` then
|
1614
1831
|
taking the logarithm).
|
1615
1832
|
|
@@ -1622,8 +1839,8 @@ class _ProbabilityDistribution(ABC):
|
|
1622
1839
|
|
1623
1840
|
- ``'formula'``: use a formula for the log-entropy itself
|
1624
1841
|
- ``'logexp'``: evaluate the entropy and take the logarithm
|
1625
|
-
- ``'quadrature'``: numerically log-integrate
|
1626
|
-
entropy integrand
|
1842
|
+
- ``'quadrature'``: numerically log-integrate (or, in the discrete
|
1843
|
+
case, log-sum) the logarithm of the entropy integrand (summand)
|
1627
1844
|
|
1628
1845
|
Not all `method` options are available for all distributions.
|
1629
1846
|
If the selected `method` is not available, a ``NotImplementedError``
|
@@ -1641,9 +1858,9 @@ class _ProbabilityDistribution(ABC):
|
|
1641
1858
|
|
1642
1859
|
Notes
|
1643
1860
|
-----
|
1644
|
-
|
1645
|
-
is complex with imaginary part :math:`\pi`.
|
1646
|
-
consistency, the result of this function always has complex dtype,
|
1861
|
+
The differential entropy of a continuous distribution can be negative.
|
1862
|
+
In this case, the log-entropy is complex with imaginary part :math:`\pi`.
|
1863
|
+
For consistency, the result of this function always has complex dtype,
|
1647
1864
|
regardless of the value of the imaginary part.
|
1648
1865
|
|
1649
1866
|
References
|
@@ -1675,7 +1892,7 @@ class _ProbabilityDistribution(ABC):
|
|
1675
1892
|
|
1676
1893
|
"""
|
1677
1894
|
raise NotImplementedError()
|
1678
|
-
|
1895
|
+
|
1679
1896
|
@abstractmethod
|
1680
1897
|
def entropy(self, *, method):
|
1681
1898
|
r"""Differential entropy
|
@@ -1688,6 +1905,9 @@ class _ProbabilityDistribution(ABC):
|
|
1688
1905
|
|
1689
1906
|
h(X) = - \int_{\chi} f(x) \log f(x) dx
|
1690
1907
|
|
1908
|
+
The definition for a discrete random variable is analogous, with the
|
1909
|
+
PMF replacing the PDF and a sum over the support replacing the integral.
|
1910
|
+
|
1691
1911
|
Parameters
|
1692
1912
|
----------
|
1693
1913
|
method : {None, 'formula', 'logexp', 'quadrature'}
|
@@ -1697,7 +1917,9 @@ class _ProbabilityDistribution(ABC):
|
|
1697
1917
|
|
1698
1918
|
- ``'formula'``: use a formula for the entropy itself
|
1699
1919
|
- ``'logexp'``: evaluate the log-entropy and exponentiate
|
1700
|
-
- ``'quadrature'``:
|
1920
|
+
- ``'quadrature'``: numerically integrate (or, in the discrete
|
1921
|
+
case, sum) the entropy integrand (summand)
|
1922
|
+
|
1701
1923
|
|
1702
1924
|
Not all `method` options are available for all distributions.
|
1703
1925
|
If the selected `method` is not available, a ``NotImplementedError``
|
scipy/stats/_qmc.py
CHANGED
@@ -20,7 +20,7 @@ from scipy._lib._util import DecimalNumber, GeneratorType, IntNumber, SeedType
|
|
20
20
|
|
21
21
|
if TYPE_CHECKING:
|
22
22
|
import numpy.typing as npt
|
23
|
-
|
23
|
+
|
24
24
|
import scipy.stats as stats
|
25
25
|
from scipy._lib._util import rng_integers, _rng_spawn, _transition_to_rng
|
26
26
|
from scipy.sparse.csgraph import minimum_spanning_tree
|
@@ -76,9 +76,9 @@ def check_random_state(seed=None):
|
|
76
76
|
Random number generator.
|
77
77
|
|
78
78
|
"""
|
79
|
-
if seed is None or isinstance(seed,
|
79
|
+
if seed is None or isinstance(seed, numbers.Integral | np.integer):
|
80
80
|
return np.random.default_rng(seed)
|
81
|
-
elif isinstance(seed,
|
81
|
+
elif isinstance(seed, np.random.RandomState | np.random.Generator):
|
82
82
|
return seed
|
83
83
|
else:
|
84
84
|
raise ValueError(f'{seed!r} cannot be used to seed a'
|
@@ -266,7 +266,10 @@ def discrepancy(
|
|
266
266
|
* ``MD``: Mixture Discrepancy - mix between CD/WD covering more criteria
|
267
267
|
* ``L2-star``: L2-star discrepancy - like CD BUT variant to rotation
|
268
268
|
|
269
|
-
|
269
|
+
Methods ``CD``, ``WD``, and ``MD`` implement the right hand side of equations
|
270
|
+
9, 10, and 18 of [2]_, respectively; the square root is not taken. On the
|
271
|
+
other hand, ``L2-star`` computes the quantity given by equation 10 of
|
272
|
+
[3]_ as implemented by subsequent equations; the square root is taken.
|
270
273
|
|
271
274
|
Lastly, using ``iterative=True``, it is possible to compute the
|
272
275
|
discrepancy as if we had :math:`n+1` samples. This is useful if we want
|
@@ -1117,14 +1120,16 @@ class Halton(QMCEngine):
|
|
1117
1120
|
Pseudo-random number generator that generalize the Van der Corput sequence
|
1118
1121
|
for multiple dimensions. The Halton sequence uses the base-two Van der
|
1119
1122
|
Corput sequence for the first dimension, base-three for its second and
|
1120
|
-
base-:math:`
|
1123
|
+
base-:math:`p` for its :math:`n`-dimension, with :math:`p` the
|
1124
|
+
:math:`n`'th prime.
|
1121
1125
|
|
1122
1126
|
Parameters
|
1123
1127
|
----------
|
1124
1128
|
d : int
|
1125
1129
|
Dimension of the parameter space.
|
1126
1130
|
scramble : bool, optional
|
1127
|
-
If True, use
|
1131
|
+
If True, use random scrambling from [2]_. Otherwise no scrambling
|
1132
|
+
is done.
|
1128
1133
|
Default is True.
|
1129
1134
|
optimization : {None, "random-cd", "lloyd"}, optional
|
1130
1135
|
Whether to use an optimization scheme to improve the quality after
|
@@ -1584,7 +1589,7 @@ class LatinHypercube(QMCEngine):
|
|
1584
1589
|
for j in range(n_col):
|
1585
1590
|
perms = self.rng.permutation(p)
|
1586
1591
|
oa_sample_[:, j] = perms[oa_sample[:, j]]
|
1587
|
-
|
1592
|
+
|
1588
1593
|
oa_sample = oa_sample_
|
1589
1594
|
# following is making a scrambled OA into an OA-LHS
|
1590
1595
|
oa_lhs_sample = np.zeros(shape=(n_row, n_col))
|
@@ -1858,7 +1863,7 @@ class Sobol(QMCEngine):
|
|
1858
1863
|
# verify n is 2**n
|
1859
1864
|
if not (n & (n - 1) == 0):
|
1860
1865
|
warnings.warn("The balance properties of Sobol' points require"
|
1861
|
-
" n to be a power of 2.", stacklevel=
|
1866
|
+
" n to be a power of 2.", stacklevel=3)
|
1862
1867
|
|
1863
1868
|
if n == 1:
|
1864
1869
|
sample = self._first_point
|
@@ -2121,7 +2126,7 @@ class PoissonDisk(QMCEngine):
|
|
2121
2126
|
|
2122
2127
|
# sample to generate per iteration in the hypersphere around center
|
2123
2128
|
self.ncandidates = ncandidates
|
2124
|
-
|
2129
|
+
|
2125
2130
|
if u_bounds is None:
|
2126
2131
|
u_bounds = np.ones(d)
|
2127
2132
|
if l_bounds is None:
|
Binary file
|