scipy 1.16.2__cp314-cp314t-win_arm64.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 +161 -0
- scipy/__init__.py +150 -0
- scipy/_cyutility.cp314t-win_arm64.lib +0 -0
- scipy/_cyutility.cp314t-win_arm64.pyd +0 -0
- scipy/_distributor_init.py +18 -0
- scipy/_lib/__init__.py +14 -0
- scipy/_lib/_array_api.py +931 -0
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_array_api_no_0d.py +103 -0
- scipy/_lib/_bunch.py +229 -0
- scipy/_lib/_ccallback.py +251 -0
- scipy/_lib/_ccallback_c.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_disjoint_set.py +254 -0
- scipy/_lib/_docscrape.py +761 -0
- scipy/_lib/_elementwise_iterative_method.py +346 -0
- scipy/_lib/_fpumode.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_gcutils.py +105 -0
- scipy/_lib/_pep440.py +487 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_testutils.py +373 -0
- scipy/_lib/_threadsafety.py +58 -0
- scipy/_lib/_tmpdirs.py +86 -0
- scipy/_lib/_uarray/LICENSE +29 -0
- scipy/_lib/_uarray/__init__.py +116 -0
- scipy/_lib/_uarray/_backend.py +707 -0
- scipy/_lib/_uarray/_uarray.cp314t-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp314t-win_arm64.pyd +0 -0
- scipy/_lib/_util.py +1283 -0
- scipy/_lib/array_api_compat/__init__.py +22 -0
- scipy/_lib/array_api_compat/_internal.py +59 -0
- scipy/_lib/array_api_compat/common/__init__.py +1 -0
- scipy/_lib/array_api_compat/common/_aliases.py +727 -0
- scipy/_lib/array_api_compat/common/_fft.py +213 -0
- scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
- scipy/_lib/array_api_compat/common/_linalg.py +232 -0
- scipy/_lib/array_api_compat/common/_typing.py +192 -0
- scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
- scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
- scipy/_lib/array_api_compat/cupy/_info.py +336 -0
- scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
- scipy/_lib/array_api_compat/cupy/fft.py +36 -0
- scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
- scipy/_lib/array_api_compat/dask/__init__.py +0 -0
- scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
- scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
- scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
- scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
- scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
- scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
- scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
- scipy/_lib/array_api_compat/numpy/_info.py +366 -0
- scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
- scipy/_lib/array_api_compat/numpy/fft.py +35 -0
- scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
- scipy/_lib/array_api_compat/torch/__init__.py +22 -0
- scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
- scipy/_lib/array_api_compat/torch/_info.py +369 -0
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +85 -0
- scipy/_lib/array_api_compat/torch/linalg.py +121 -0
- scipy/_lib/array_api_extra/__init__.py +38 -0
- 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/cobyqa/__init__.py +20 -0
- scipy/_lib/cobyqa/framework.py +1240 -0
- scipy/_lib/cobyqa/main.py +1506 -0
- scipy/_lib/cobyqa/models.py +1529 -0
- scipy/_lib/cobyqa/problem.py +1296 -0
- scipy/_lib/cobyqa/settings.py +132 -0
- scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
- scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
- scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
- scipy/_lib/cobyqa/utils/__init__.py +18 -0
- scipy/_lib/cobyqa/utils/exceptions.py +22 -0
- scipy/_lib/cobyqa/utils/math.py +77 -0
- scipy/_lib/cobyqa/utils/versions.py +67 -0
- scipy/_lib/decorator.py +399 -0
- scipy/_lib/deprecation.py +274 -0
- scipy/_lib/doccer.py +366 -0
- scipy/_lib/messagestream.cp314t-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp314t-win_arm64.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/__init__.py +0 -0
- scipy/_lib/tests/test__gcutils.py +110 -0
- scipy/_lib/tests/test__pep440.py +67 -0
- scipy/_lib/tests/test__testutils.py +32 -0
- scipy/_lib/tests/test__threadsafety.py +51 -0
- scipy/_lib/tests/test__util.py +641 -0
- scipy/_lib/tests/test_array_api.py +322 -0
- scipy/_lib/tests/test_bunch.py +169 -0
- scipy/_lib/tests/test_ccallback.py +196 -0
- scipy/_lib/tests/test_config.py +45 -0
- scipy/_lib/tests/test_deprecation.py +10 -0
- scipy/_lib/tests/test_doccer.py +143 -0
- scipy/_lib/tests/test_import_cycles.py +18 -0
- scipy/_lib/tests/test_public_api.py +482 -0
- scipy/_lib/tests/test_scipy_version.py +28 -0
- scipy/_lib/tests/test_tmpdirs.py +48 -0
- scipy/_lib/tests/test_warnings.py +137 -0
- scipy/_lib/uarray.py +31 -0
- scipy/cluster/__init__.py +31 -0
- scipy/cluster/_hierarchy.cp314t-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp314t-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314t-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314t-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp314t-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp314t-win_arm64.pyd +0 -0
- scipy/cluster/hierarchy.py +4348 -0
- scipy/cluster/tests/__init__.py +0 -0
- scipy/cluster/tests/hierarchy_test_data.py +145 -0
- scipy/cluster/tests/test_disjoint_set.py +202 -0
- scipy/cluster/tests/test_hierarchy.py +1238 -0
- scipy/cluster/tests/test_vq.py +434 -0
- scipy/cluster/vq.py +832 -0
- scipy/conftest.py +683 -0
- scipy/constants/__init__.py +358 -0
- scipy/constants/_codata.py +2266 -0
- scipy/constants/_constants.py +369 -0
- scipy/constants/codata.py +21 -0
- scipy/constants/constants.py +53 -0
- scipy/constants/tests/__init__.py +0 -0
- scipy/constants/tests/test_codata.py +78 -0
- scipy/constants/tests/test_constants.py +83 -0
- scipy/datasets/__init__.py +90 -0
- scipy/datasets/_download_all.py +71 -0
- scipy/datasets/_fetchers.py +225 -0
- scipy/datasets/_registry.py +26 -0
- scipy/datasets/_utils.py +81 -0
- scipy/datasets/tests/__init__.py +0 -0
- scipy/datasets/tests/test_data.py +128 -0
- scipy/differentiate/__init__.py +27 -0
- scipy/differentiate/_differentiate.py +1129 -0
- scipy/differentiate/tests/__init__.py +0 -0
- scipy/differentiate/tests/test_differentiate.py +694 -0
- scipy/fft/__init__.py +114 -0
- scipy/fft/_backend.py +196 -0
- scipy/fft/_basic.py +1650 -0
- scipy/fft/_basic_backend.py +197 -0
- scipy/fft/_debug_backends.py +22 -0
- scipy/fft/_fftlog.py +223 -0
- scipy/fft/_fftlog_backend.py +200 -0
- scipy/fft/_helper.py +348 -0
- scipy/fft/_pocketfft/LICENSE.md +25 -0
- scipy/fft/_pocketfft/__init__.py +9 -0
- scipy/fft/_pocketfft/basic.py +251 -0
- scipy/fft/_pocketfft/helper.py +249 -0
- scipy/fft/_pocketfft/pypocketfft.cp314t-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp314t-win_arm64.pyd +0 -0
- scipy/fft/_pocketfft/realtransforms.py +109 -0
- scipy/fft/_pocketfft/tests/__init__.py +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
- scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
- scipy/fft/_realtransforms.py +706 -0
- scipy/fft/_realtransforms_backend.py +63 -0
- scipy/fft/tests/__init__.py +0 -0
- scipy/fft/tests/mock_backend.py +96 -0
- scipy/fft/tests/test_backend.py +98 -0
- scipy/fft/tests/test_basic.py +504 -0
- scipy/fft/tests/test_fftlog.py +215 -0
- scipy/fft/tests/test_helper.py +558 -0
- scipy/fft/tests/test_multithreading.py +84 -0
- scipy/fft/tests/test_real_transforms.py +247 -0
- scipy/fftpack/__init__.py +103 -0
- scipy/fftpack/_basic.py +428 -0
- scipy/fftpack/_helper.py +115 -0
- scipy/fftpack/_pseudo_diffs.py +554 -0
- scipy/fftpack/_realtransforms.py +598 -0
- scipy/fftpack/basic.py +20 -0
- scipy/fftpack/convolve.cp314t-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp314t-win_arm64.pyd +0 -0
- scipy/fftpack/helper.py +19 -0
- scipy/fftpack/pseudo_diffs.py +22 -0
- scipy/fftpack/realtransforms.py +19 -0
- scipy/fftpack/tests/__init__.py +0 -0
- scipy/fftpack/tests/fftw_double_ref.npz +0 -0
- scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
- scipy/fftpack/tests/fftw_single_ref.npz +0 -0
- scipy/fftpack/tests/test.npz +0 -0
- scipy/fftpack/tests/test_basic.py +877 -0
- scipy/fftpack/tests/test_helper.py +54 -0
- scipy/fftpack/tests/test_import.py +33 -0
- scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
- scipy/fftpack/tests/test_real_transforms.py +836 -0
- scipy/integrate/__init__.py +122 -0
- scipy/integrate/_bvp.py +1160 -0
- scipy/integrate/_cubature.py +729 -0
- scipy/integrate/_dop.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_ivp/__init__.py +8 -0
- scipy/integrate/_ivp/base.py +290 -0
- scipy/integrate/_ivp/bdf.py +478 -0
- scipy/integrate/_ivp/common.py +451 -0
- scipy/integrate/_ivp/dop853_coefficients.py +193 -0
- scipy/integrate/_ivp/ivp.py +755 -0
- scipy/integrate/_ivp/lsoda.py +224 -0
- scipy/integrate/_ivp/radau.py +572 -0
- scipy/integrate/_ivp/rk.py +601 -0
- scipy/integrate/_ivp/tests/__init__.py +0 -0
- scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
- scipy/integrate/_ivp/tests/test_rk.py +37 -0
- scipy/integrate/_lebedev.py +5450 -0
- scipy/integrate/_lsoda.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_quadpack_py.py +1283 -0
- scipy/integrate/_quadrature.py +1336 -0
- scipy/integrate/_rules/__init__.py +12 -0
- scipy/integrate/_rules/_base.py +518 -0
- scipy/integrate/_rules/_gauss_kronrod.py +202 -0
- scipy/integrate/_rules/_gauss_legendre.py +62 -0
- scipy/integrate/_rules/_genz_malik.py +210 -0
- scipy/integrate/_tanhsinh.py +1385 -0
- scipy/integrate/_test_multivariate.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp314t-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp314t-win_arm64.pyd +0 -0
- scipy/integrate/dop.py +15 -0
- scipy/integrate/lsoda.py +15 -0
- scipy/integrate/odepack.py +17 -0
- scipy/integrate/quadpack.py +23 -0
- scipy/integrate/tests/__init__.py +0 -0
- scipy/integrate/tests/test__quad_vec.py +211 -0
- scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
- scipy/integrate/tests/test_bvp.py +714 -0
- scipy/integrate/tests/test_cubature.py +1375 -0
- scipy/integrate/tests/test_integrate.py +840 -0
- scipy/integrate/tests/test_odeint_jac.py +74 -0
- scipy/integrate/tests/test_quadpack.py +680 -0
- scipy/integrate/tests/test_quadrature.py +730 -0
- scipy/integrate/tests/test_tanhsinh.py +1171 -0
- scipy/integrate/vode.py +15 -0
- scipy/interpolate/__init__.py +228 -0
- scipy/interpolate/_bary_rational.py +715 -0
- scipy/interpolate/_bsplines.py +2469 -0
- scipy/interpolate/_cubic.py +973 -0
- scipy/interpolate/_dfitpack.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack2.py +2397 -0
- scipy/interpolate/_fitpack_impl.py +811 -0
- scipy/interpolate/_fitpack_py.py +898 -0
- scipy/interpolate/_fitpack_repro.py +996 -0
- scipy/interpolate/_interpnd.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_interpolate.py +2266 -0
- scipy/interpolate/_ndbspline.py +415 -0
- scipy/interpolate/_ndgriddata.py +329 -0
- scipy/interpolate/_pade.py +67 -0
- scipy/interpolate/_polyint.py +1025 -0
- scipy/interpolate/_ppoly.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp314t-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp314t-win_arm64.pyd +0 -0
- scipy/interpolate/dfitpack.py +24 -0
- scipy/interpolate/fitpack.py +31 -0
- scipy/interpolate/fitpack2.py +29 -0
- scipy/interpolate/interpnd.py +24 -0
- scipy/interpolate/interpolate.py +30 -0
- scipy/interpolate/ndgriddata.py +23 -0
- scipy/interpolate/polyint.py +24 -0
- scipy/interpolate/rbf.py +18 -0
- scipy/interpolate/tests/__init__.py +0 -0
- scipy/interpolate/tests/data/bug-1310.npz +0 -0
- scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
- scipy/interpolate/tests/data/gcvspl.npz +0 -0
- scipy/interpolate/tests/test_bary_rational.py +368 -0
- scipy/interpolate/tests/test_bsplines.py +3754 -0
- scipy/interpolate/tests/test_fitpack.py +519 -0
- scipy/interpolate/tests/test_fitpack2.py +1431 -0
- scipy/interpolate/tests/test_gil.py +64 -0
- scipy/interpolate/tests/test_interpnd.py +452 -0
- scipy/interpolate/tests/test_interpolate.py +2630 -0
- scipy/interpolate/tests/test_ndgriddata.py +308 -0
- scipy/interpolate/tests/test_pade.py +107 -0
- scipy/interpolate/tests/test_polyint.py +972 -0
- scipy/interpolate/tests/test_rbf.py +246 -0
- scipy/interpolate/tests/test_rbfinterp.py +534 -0
- scipy/interpolate/tests/test_rgi.py +1151 -0
- scipy/io/__init__.py +116 -0
- scipy/io/_fast_matrix_market/__init__.py +600 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp314t-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp314t-win_arm64.pyd +0 -0
- scipy/io/_fortran.py +354 -0
- scipy/io/_harwell_boeing/__init__.py +7 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
- scipy/io/_harwell_boeing/hb.py +571 -0
- scipy/io/_harwell_boeing/tests/__init__.py +0 -0
- scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
- scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
- scipy/io/_idl.py +917 -0
- scipy/io/_mmio.py +968 -0
- scipy/io/_netcdf.py +1104 -0
- scipy/io/_test_fortran.cp314t-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp314t-win_arm64.pyd +0 -0
- scipy/io/arff/__init__.py +28 -0
- scipy/io/arff/_arffread.py +873 -0
- scipy/io/arff/arffread.py +19 -0
- scipy/io/arff/tests/__init__.py +0 -0
- scipy/io/arff/tests/data/iris.arff +225 -0
- scipy/io/arff/tests/data/missing.arff +8 -0
- scipy/io/arff/tests/data/nodata.arff +11 -0
- scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
- scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
- scipy/io/arff/tests/data/test1.arff +10 -0
- scipy/io/arff/tests/data/test10.arff +8 -0
- scipy/io/arff/tests/data/test11.arff +11 -0
- scipy/io/arff/tests/data/test2.arff +15 -0
- scipy/io/arff/tests/data/test3.arff +6 -0
- scipy/io/arff/tests/data/test4.arff +11 -0
- scipy/io/arff/tests/data/test5.arff +26 -0
- scipy/io/arff/tests/data/test6.arff +12 -0
- scipy/io/arff/tests/data/test7.arff +15 -0
- scipy/io/arff/tests/data/test8.arff +12 -0
- scipy/io/arff/tests/data/test9.arff +14 -0
- scipy/io/arff/tests/test_arffread.py +421 -0
- scipy/io/harwell_boeing.py +17 -0
- scipy/io/idl.py +17 -0
- scipy/io/matlab/__init__.py +66 -0
- scipy/io/matlab/_byteordercodes.py +75 -0
- scipy/io/matlab/_mio.py +375 -0
- scipy/io/matlab/_mio4.py +632 -0
- scipy/io/matlab/_mio5.py +901 -0
- scipy/io/matlab/_mio5_params.py +281 -0
- scipy/io/matlab/_mio5_utils.cp314t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp314t-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp314t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp314t-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp314t-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp314t-win_arm64.pyd +0 -0
- scipy/io/matlab/byteordercodes.py +17 -0
- scipy/io/matlab/mio.py +16 -0
- scipy/io/matlab/mio4.py +17 -0
- scipy/io/matlab/mio5.py +19 -0
- scipy/io/matlab/mio5_params.py +18 -0
- scipy/io/matlab/mio5_utils.py +17 -0
- scipy/io/matlab/mio_utils.py +17 -0
- scipy/io/matlab/miobase.py +16 -0
- scipy/io/matlab/streams.py +16 -0
- scipy/io/matlab/tests/__init__.py +0 -0
- scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
- scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/big_endian.mat +0 -0
- scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
- scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
- scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
- scipy/io/matlab/tests/data/little_endian.mat +0 -0
- scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
- scipy/io/matlab/tests/data/malformed1.mat +0 -0
- scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
- scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
- scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
- scipy/io/matlab/tests/data/parabola.mat +0 -0
- scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
- scipy/io/matlab/tests/data/some_functions.mat +0 -0
- scipy/io/matlab/tests/data/sqr.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
- scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
- scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
- scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/test_byteordercodes.py +29 -0
- scipy/io/matlab/tests/test_mio.py +1399 -0
- scipy/io/matlab/tests/test_mio5_utils.py +179 -0
- scipy/io/matlab/tests/test_mio_funcs.py +51 -0
- scipy/io/matlab/tests/test_mio_utils.py +45 -0
- scipy/io/matlab/tests/test_miobase.py +32 -0
- scipy/io/matlab/tests/test_pathological.py +33 -0
- scipy/io/matlab/tests/test_streams.py +241 -0
- scipy/io/mmio.py +17 -0
- scipy/io/netcdf.py +17 -0
- scipy/io/tests/__init__.py +0 -0
- scipy/io/tests/data/Transparent Busy.ani +0 -0
- scipy/io/tests/data/array_float32_1d.sav +0 -0
- scipy/io/tests/data/array_float32_2d.sav +0 -0
- scipy/io/tests/data/array_float32_3d.sav +0 -0
- scipy/io/tests/data/array_float32_4d.sav +0 -0
- scipy/io/tests/data/array_float32_5d.sav +0 -0
- scipy/io/tests/data/array_float32_6d.sav +0 -0
- scipy/io/tests/data/array_float32_7d.sav +0 -0
- scipy/io/tests/data/array_float32_8d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
- scipy/io/tests/data/example_1.nc +0 -0
- scipy/io/tests/data/example_2.nc +0 -0
- scipy/io/tests/data/example_3_maskedvals.nc +0 -0
- scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
- scipy/io/tests/data/fortran-mixed.dat +0 -0
- scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
- scipy/io/tests/data/invalid_pointer.sav +0 -0
- scipy/io/tests/data/null_pointer.sav +0 -0
- scipy/io/tests/data/scalar_byte.sav +0 -0
- scipy/io/tests/data/scalar_byte_descr.sav +0 -0
- scipy/io/tests/data/scalar_complex32.sav +0 -0
- scipy/io/tests/data/scalar_complex64.sav +0 -0
- scipy/io/tests/data/scalar_float32.sav +0 -0
- scipy/io/tests/data/scalar_float64.sav +0 -0
- scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
- scipy/io/tests/data/scalar_int16.sav +0 -0
- scipy/io/tests/data/scalar_int32.sav +0 -0
- scipy/io/tests/data/scalar_int64.sav +0 -0
- scipy/io/tests/data/scalar_string.sav +0 -0
- scipy/io/tests/data/scalar_uint16.sav +0 -0
- scipy/io/tests/data/scalar_uint32.sav +0 -0
- scipy/io/tests/data/scalar_uint64.sav +0 -0
- scipy/io/tests/data/struct_arrays.sav +0 -0
- scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_inherit.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_pointers.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_scalars.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
- scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
- scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
- scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
- scipy/io/tests/data/various_compressed.sav +0 -0
- scipy/io/tests/test_fortran.py +264 -0
- scipy/io/tests/test_idl.py +483 -0
- scipy/io/tests/test_mmio.py +831 -0
- scipy/io/tests/test_netcdf.py +550 -0
- scipy/io/tests/test_paths.py +93 -0
- scipy/io/tests/test_wavfile.py +501 -0
- scipy/io/wavfile.py +938 -0
- scipy/linalg/__init__.pxd +1 -0
- scipy/linalg/__init__.py +236 -0
- scipy/linalg/_basic.py +2146 -0
- scipy/linalg/_blas_subroutines.h +164 -0
- scipy/linalg/_cythonized_array_utils.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_cythonized_array_utils.pxd +40 -0
- scipy/linalg/_cythonized_array_utils.pyi +16 -0
- scipy/linalg/_decomp.py +1645 -0
- scipy/linalg/_decomp_cholesky.py +413 -0
- scipy/linalg/_decomp_cossin.py +236 -0
- scipy/linalg/_decomp_interpolative.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.pyi +6 -0
- scipy/linalg/_decomp_polar.py +113 -0
- scipy/linalg/_decomp_qr.py +494 -0
- scipy/linalg/_decomp_qz.py +452 -0
- scipy/linalg/_decomp_schur.py +336 -0
- scipy/linalg/_decomp_svd.py +545 -0
- scipy/linalg/_decomp_update.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.pyi +6 -0
- scipy/linalg/_matfuncs_inv_ssq.py +886 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_misc.py +191 -0
- scipy/linalg/_procrustes.py +113 -0
- scipy/linalg/_sketches.py +189 -0
- scipy/linalg/_solve_toeplitz.cp314t-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/_solvers.py +862 -0
- scipy/linalg/_special_matrices.py +1322 -0
- scipy/linalg/_testutils.py +65 -0
- scipy/linalg/basic.py +23 -0
- scipy/linalg/blas.py +495 -0
- scipy/linalg/cython_blas.cp314t-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp314t-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp314t-win_arm64.pyd +0 -0
- scipy/linalg/cython_lapack.pxd +1528 -0
- scipy/linalg/cython_lapack.pyx +12045 -0
- scipy/linalg/decomp.py +23 -0
- scipy/linalg/decomp_cholesky.py +21 -0
- scipy/linalg/decomp_lu.py +21 -0
- scipy/linalg/decomp_qr.py +20 -0
- scipy/linalg/decomp_schur.py +21 -0
- scipy/linalg/decomp_svd.py +21 -0
- scipy/linalg/interpolative.py +989 -0
- scipy/linalg/lapack.py +1081 -0
- scipy/linalg/matfuncs.py +23 -0
- scipy/linalg/misc.py +21 -0
- scipy/linalg/special_matrices.py +22 -0
- scipy/linalg/tests/__init__.py +0 -0
- scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
- scipy/linalg/tests/_cython_examples/meson.build +34 -0
- scipy/linalg/tests/data/carex_15_data.npz +0 -0
- scipy/linalg/tests/data/carex_18_data.npz +0 -0
- scipy/linalg/tests/data/carex_19_data.npz +0 -0
- scipy/linalg/tests/data/carex_20_data.npz +0 -0
- scipy/linalg/tests/data/carex_6_data.npz +0 -0
- scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
- scipy/linalg/tests/test_basic.py +2074 -0
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_blas.py +1127 -0
- scipy/linalg/tests/test_cython_blas.py +118 -0
- scipy/linalg/tests/test_cython_lapack.py +22 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
- scipy/linalg/tests/test_decomp.py +3189 -0
- scipy/linalg/tests/test_decomp_cholesky.py +268 -0
- scipy/linalg/tests/test_decomp_cossin.py +314 -0
- scipy/linalg/tests/test_decomp_ldl.py +137 -0
- scipy/linalg/tests/test_decomp_lu.py +308 -0
- scipy/linalg/tests/test_decomp_polar.py +110 -0
- scipy/linalg/tests/test_decomp_update.py +1701 -0
- scipy/linalg/tests/test_extending.py +46 -0
- scipy/linalg/tests/test_fblas.py +607 -0
- scipy/linalg/tests/test_interpolative.py +232 -0
- scipy/linalg/tests/test_lapack.py +3620 -0
- scipy/linalg/tests/test_matfuncs.py +1125 -0
- scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
- scipy/linalg/tests/test_procrustes.py +214 -0
- scipy/linalg/tests/test_sketches.py +118 -0
- scipy/linalg/tests/test_solve_toeplitz.py +150 -0
- scipy/linalg/tests/test_solvers.py +844 -0
- scipy/linalg/tests/test_special_matrices.py +636 -0
- scipy/misc/__init__.py +6 -0
- scipy/misc/common.py +6 -0
- scipy/misc/doccer.py +6 -0
- scipy/ndimage/__init__.py +174 -0
- scipy/ndimage/_ctest.cp314t-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp314t-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp314t-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp314t-win_arm64.pyd +0 -0
- scipy/ndimage/_delegators.py +303 -0
- scipy/ndimage/_filters.py +2422 -0
- scipy/ndimage/_fourier.py +306 -0
- scipy/ndimage/_interpolation.py +1033 -0
- scipy/ndimage/_measurements.py +1689 -0
- scipy/ndimage/_morphology.py +2634 -0
- scipy/ndimage/_nd_image.cp314t-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp314t-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp314t-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp314t-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp314t-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp314t-win_arm64.pyd +0 -0
- scipy/ndimage/_support_alternative_backends.py +84 -0
- scipy/ndimage/filters.py +27 -0
- scipy/ndimage/fourier.py +21 -0
- scipy/ndimage/interpolation.py +22 -0
- scipy/ndimage/measurements.py +24 -0
- scipy/ndimage/morphology.py +27 -0
- scipy/ndimage/tests/__init__.py +12 -0
- scipy/ndimage/tests/data/label_inputs.txt +21 -0
- scipy/ndimage/tests/data/label_results.txt +294 -0
- scipy/ndimage/tests/data/label_strels.txt +42 -0
- scipy/ndimage/tests/dots.png +0 -0
- scipy/ndimage/tests/test_c_api.py +102 -0
- scipy/ndimage/tests/test_datatypes.py +67 -0
- scipy/ndimage/tests/test_filters.py +3083 -0
- scipy/ndimage/tests/test_fourier.py +187 -0
- scipy/ndimage/tests/test_interpolation.py +1491 -0
- scipy/ndimage/tests/test_measurements.py +1592 -0
- scipy/ndimage/tests/test_morphology.py +2950 -0
- scipy/ndimage/tests/test_ni_support.py +78 -0
- scipy/ndimage/tests/test_splines.py +70 -0
- scipy/odr/__init__.py +131 -0
- scipy/odr/__odrpack.cp314t-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp314t-win_arm64.pyd +0 -0
- scipy/odr/_add_newdocs.py +34 -0
- scipy/odr/_models.py +315 -0
- scipy/odr/_odrpack.py +1154 -0
- scipy/odr/models.py +20 -0
- scipy/odr/odrpack.py +21 -0
- scipy/odr/tests/__init__.py +0 -0
- scipy/odr/tests/test_odr.py +607 -0
- scipy/optimize/__init__.pxd +1 -0
- scipy/optimize/__init__.py +460 -0
- scipy/optimize/_basinhopping.py +741 -0
- scipy/optimize/_bglu_dense.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_bracket.py +706 -0
- scipy/optimize/_chandrupatla.py +551 -0
- scipy/optimize/_cobyla_py.py +297 -0
- scipy/optimize/_cobyqa_py.py +72 -0
- scipy/optimize/_constraints.py +598 -0
- scipy/optimize/_dcsrch.py +728 -0
- scipy/optimize/_differentiable_functions.py +835 -0
- scipy/optimize/_differentialevolution.py +1970 -0
- scipy/optimize/_direct.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_direct_py.py +280 -0
- scipy/optimize/_dual_annealing.py +732 -0
- scipy/optimize/_elementwise.py +798 -0
- scipy/optimize/_group_columns.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_lbfgsb_py.py +634 -0
- scipy/optimize/_linesearch.py +896 -0
- scipy/optimize/_linprog.py +733 -0
- scipy/optimize/_linprog_doc.py +1434 -0
- scipy/optimize/_linprog_highs.py +422 -0
- scipy/optimize/_linprog_ip.py +1141 -0
- scipy/optimize/_linprog_rs.py +572 -0
- scipy/optimize/_linprog_simplex.py +663 -0
- scipy/optimize/_linprog_util.py +1521 -0
- scipy/optimize/_lsap.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/__init__.py +5 -0
- scipy/optimize/_lsq/bvls.py +183 -0
- scipy/optimize/_lsq/common.py +731 -0
- scipy/optimize/_lsq/dogbox.py +345 -0
- scipy/optimize/_lsq/givens_elimination.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/least_squares.py +1044 -0
- scipy/optimize/_lsq/lsq_linear.py +361 -0
- scipy/optimize/_lsq/trf.py +587 -0
- scipy/optimize/_lsq/trf_linear.py +249 -0
- scipy/optimize/_milp.py +394 -0
- scipy/optimize/_minimize.py +1199 -0
- scipy/optimize/_minpack.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_nnls.py +96 -0
- scipy/optimize/_nonlin.py +1634 -0
- scipy/optimize/_numdiff.py +963 -0
- scipy/optimize/_optimize.py +4169 -0
- scipy/optimize/_pava_pybind.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_qap.py +760 -0
- scipy/optimize/_remove_redundancy.py +522 -0
- scipy/optimize/_root.py +732 -0
- scipy/optimize/_root_scalar.py +538 -0
- scipy/optimize/_shgo.py +1606 -0
- scipy/optimize/_shgo_lib/__init__.py +0 -0
- scipy/optimize/_shgo_lib/_complex.py +1225 -0
- scipy/optimize/_shgo_lib/_vertex.py +460 -0
- scipy/optimize/_slsqp_py.py +603 -0
- scipy/optimize/_slsqplib.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_spectral.py +260 -0
- scipy/optimize/_tnc.py +438 -0
- scipy/optimize/_trlib/__init__.py +12 -0
- scipy/optimize/_trlib/_trlib.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_trustregion.py +318 -0
- scipy/optimize/_trustregion_constr/__init__.py +6 -0
- scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
- scipy/optimize/_trustregion_constr/projections.py +411 -0
- scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
- scipy/optimize/_trustregion_constr/report.py +49 -0
- scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
- scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
- scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
- scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
- scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
- scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
- scipy/optimize/_trustregion_dogleg.py +122 -0
- scipy/optimize/_trustregion_exact.py +437 -0
- scipy/optimize/_trustregion_krylov.py +65 -0
- scipy/optimize/_trustregion_ncg.py +126 -0
- scipy/optimize/_tstutils.py +972 -0
- scipy/optimize/_zeros.cp314t-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/_zeros_py.py +1475 -0
- scipy/optimize/cobyla.py +19 -0
- scipy/optimize/cython_optimize/__init__.py +133 -0
- scipy/optimize/cython_optimize/_zeros.cp314t-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp314t-win_arm64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.pxd +33 -0
- scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
- scipy/optimize/cython_optimize.pxd +11 -0
- scipy/optimize/elementwise.py +38 -0
- scipy/optimize/lbfgsb.py +23 -0
- scipy/optimize/linesearch.py +18 -0
- scipy/optimize/minpack.py +27 -0
- scipy/optimize/minpack2.py +17 -0
- scipy/optimize/moduleTNC.py +19 -0
- scipy/optimize/nonlin.py +29 -0
- scipy/optimize/optimize.py +40 -0
- scipy/optimize/slsqp.py +22 -0
- scipy/optimize/tests/__init__.py +0 -0
- scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
- scipy/optimize/tests/_cython_examples/meson.build +32 -0
- scipy/optimize/tests/test__basinhopping.py +535 -0
- scipy/optimize/tests/test__differential_evolution.py +1703 -0
- scipy/optimize/tests/test__dual_annealing.py +416 -0
- scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
- scipy/optimize/tests/test__numdiff.py +885 -0
- scipy/optimize/tests/test__remove_redundancy.py +228 -0
- scipy/optimize/tests/test__root.py +124 -0
- scipy/optimize/tests/test__shgo.py +1164 -0
- scipy/optimize/tests/test__spectral.py +226 -0
- scipy/optimize/tests/test_bracket.py +896 -0
- scipy/optimize/tests/test_chandrupatla.py +982 -0
- scipy/optimize/tests/test_cobyla.py +195 -0
- scipy/optimize/tests/test_cobyqa.py +252 -0
- scipy/optimize/tests/test_constraint_conversion.py +286 -0
- scipy/optimize/tests/test_constraints.py +255 -0
- scipy/optimize/tests/test_cython_optimize.py +92 -0
- scipy/optimize/tests/test_differentiable_functions.py +1025 -0
- scipy/optimize/tests/test_direct.py +321 -0
- scipy/optimize/tests/test_extending.py +28 -0
- scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
- scipy/optimize/tests/test_isotonic_regression.py +167 -0
- scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
- scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
- scipy/optimize/tests/test_least_squares.py +986 -0
- scipy/optimize/tests/test_linear_assignment.py +116 -0
- scipy/optimize/tests/test_linesearch.py +328 -0
- scipy/optimize/tests/test_linprog.py +2577 -0
- scipy/optimize/tests/test_lsq_common.py +297 -0
- scipy/optimize/tests/test_lsq_linear.py +287 -0
- scipy/optimize/tests/test_milp.py +459 -0
- scipy/optimize/tests/test_minimize_constrained.py +845 -0
- scipy/optimize/tests/test_minpack.py +1194 -0
- scipy/optimize/tests/test_nnls.py +469 -0
- scipy/optimize/tests/test_nonlin.py +572 -0
- scipy/optimize/tests/test_optimize.py +3344 -0
- scipy/optimize/tests/test_quadratic_assignment.py +455 -0
- scipy/optimize/tests/test_regression.py +40 -0
- scipy/optimize/tests/test_slsqp.py +645 -0
- scipy/optimize/tests/test_tnc.py +345 -0
- scipy/optimize/tests/test_trustregion.py +110 -0
- scipy/optimize/tests/test_trustregion_exact.py +351 -0
- scipy/optimize/tests/test_trustregion_krylov.py +170 -0
- scipy/optimize/tests/test_zeros.py +998 -0
- scipy/optimize/tnc.py +22 -0
- scipy/optimize/zeros.py +26 -0
- scipy/signal/__init__.py +316 -0
- scipy/signal/_arraytools.py +264 -0
- scipy/signal/_czt.py +575 -0
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +5893 -0
- scipy/signal/_fir_filter_design.py +1458 -0
- scipy/signal/_lti_conversion.py +534 -0
- scipy/signal/_ltisys.py +3546 -0
- scipy/signal/_max_len_seq.py +139 -0
- scipy/signal/_max_len_seq_inner.cp314t-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp314t-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_savitzky_golay.py +357 -0
- scipy/signal/_short_time_fft.py +2228 -0
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +5309 -0
- scipy/signal/_sigtools.cp314t-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp314t-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp314t-win_arm64.lib +0 -0
- scipy/signal/_spline.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_spline.pyi +34 -0
- scipy/signal/_spline_filters.py +848 -0
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +219 -0
- scipy/signal/_upfirdn_apply.cp314t-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp314t-win_arm64.pyd +0 -0
- scipy/signal/_waveforms.py +687 -0
- scipy/signal/_wavelets.py +29 -0
- scipy/signal/bsplines.py +21 -0
- scipy/signal/filter_design.py +28 -0
- scipy/signal/fir_filter_design.py +21 -0
- scipy/signal/lti_conversion.py +20 -0
- scipy/signal/ltisys.py +25 -0
- scipy/signal/signaltools.py +27 -0
- scipy/signal/spectral.py +21 -0
- scipy/signal/spline.py +18 -0
- scipy/signal/tests/__init__.py +0 -0
- scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
- scipy/signal/tests/mpsig.py +122 -0
- scipy/signal/tests/test_array_tools.py +111 -0
- scipy/signal/tests/test_bsplines.py +365 -0
- scipy/signal/tests/test_cont2discrete.py +424 -0
- scipy/signal/tests/test_czt.py +221 -0
- scipy/signal/tests/test_dltisys.py +599 -0
- scipy/signal/tests/test_filter_design.py +4744 -0
- scipy/signal/tests/test_fir_filter_design.py +851 -0
- scipy/signal/tests/test_ltisys.py +1225 -0
- scipy/signal/tests/test_max_len_seq.py +71 -0
- scipy/signal/tests/test_peak_finding.py +915 -0
- scipy/signal/tests/test_result_type.py +51 -0
- scipy/signal/tests/test_savitzky_golay.py +363 -0
- scipy/signal/tests/test_short_time_fft.py +1107 -0
- scipy/signal/tests/test_signaltools.py +4735 -0
- scipy/signal/tests/test_spectral.py +2141 -0
- scipy/signal/tests/test_splines.py +427 -0
- scipy/signal/tests/test_upfirdn.py +322 -0
- scipy/signal/tests/test_waveforms.py +400 -0
- scipy/signal/tests/test_wavelets.py +59 -0
- scipy/signal/tests/test_windows.py +987 -0
- scipy/signal/waveforms.py +20 -0
- scipy/signal/wavelets.py +17 -0
- scipy/signal/windows/__init__.py +52 -0
- scipy/signal/windows/_windows.py +2513 -0
- scipy/signal/windows/windows.py +23 -0
- scipy/sparse/__init__.py +350 -0
- scipy/sparse/_base.py +1613 -0
- scipy/sparse/_bsr.py +880 -0
- scipy/sparse/_compressed.py +1328 -0
- scipy/sparse/_construct.py +1454 -0
- scipy/sparse/_coo.py +1581 -0
- scipy/sparse/_csc.py +367 -0
- scipy/sparse/_csparsetools.cp314t-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/_csr.py +558 -0
- scipy/sparse/_data.py +569 -0
- scipy/sparse/_dia.py +677 -0
- scipy/sparse/_dok.py +669 -0
- scipy/sparse/_extract.py +178 -0
- scipy/sparse/_index.py +444 -0
- scipy/sparse/_lil.py +632 -0
- scipy/sparse/_matrix.py +169 -0
- scipy/sparse/_matrix_io.py +167 -0
- scipy/sparse/_sparsetools.cp314t-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/_spfuncs.py +76 -0
- scipy/sparse/_sputils.py +632 -0
- scipy/sparse/base.py +24 -0
- scipy/sparse/bsr.py +22 -0
- scipy/sparse/compressed.py +20 -0
- scipy/sparse/construct.py +38 -0
- scipy/sparse/coo.py +23 -0
- scipy/sparse/csc.py +22 -0
- scipy/sparse/csgraph/__init__.py +210 -0
- scipy/sparse/csgraph/_flow.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp314t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_validation.py +66 -0
- scipy/sparse/csgraph/tests/__init__.py +0 -0
- scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
- scipy/sparse/csgraph/tests/test_conversions.py +61 -0
- scipy/sparse/csgraph/tests/test_flow.py +209 -0
- scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
- scipy/sparse/csgraph/tests/test_matching.py +307 -0
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
- scipy/sparse/csgraph/tests/test_reordering.py +70 -0
- scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
- scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
- scipy/sparse/csgraph/tests/test_traversal.py +148 -0
- scipy/sparse/csr.py +22 -0
- scipy/sparse/data.py +18 -0
- scipy/sparse/dia.py +22 -0
- scipy/sparse/dok.py +22 -0
- scipy/sparse/extract.py +23 -0
- scipy/sparse/lil.py +22 -0
- scipy/sparse/linalg/__init__.py +148 -0
- scipy/sparse/linalg/_dsolve/__init__.py +71 -0
- scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
- scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
- scipy/sparse/linalg/_eigen/__init__.py +22 -0
- scipy/sparse/linalg/_eigen/_svds.py +540 -0
- scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
- scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
- scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
- scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
- scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
- scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
- scipy/sparse/linalg/_expm_multiply.py +816 -0
- scipy/sparse/linalg/_interface.py +920 -0
- scipy/sparse/linalg/_isolve/__init__.py +20 -0
- scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
- scipy/sparse/linalg/_isolve/iterative.py +1051 -0
- scipy/sparse/linalg/_isolve/lgmres.py +230 -0
- scipy/sparse/linalg/_isolve/lsmr.py +486 -0
- scipy/sparse/linalg/_isolve/lsqr.py +589 -0
- scipy/sparse/linalg/_isolve/minres.py +372 -0
- scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
- scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
- scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
- scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
- scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
- scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
- scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
- scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
- scipy/sparse/linalg/_isolve/utils.py +121 -0
- scipy/sparse/linalg/_matfuncs.py +940 -0
- scipy/sparse/linalg/_norm.py +195 -0
- scipy/sparse/linalg/_onenormest.py +467 -0
- scipy/sparse/linalg/_propack/_cpropack.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
- scipy/sparse/linalg/_svdp.py +309 -0
- scipy/sparse/linalg/dsolve.py +22 -0
- scipy/sparse/linalg/eigen.py +21 -0
- scipy/sparse/linalg/interface.py +20 -0
- scipy/sparse/linalg/isolve.py +22 -0
- scipy/sparse/linalg/matfuncs.py +18 -0
- scipy/sparse/linalg/tests/__init__.py +0 -0
- scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
- scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
- scipy/sparse/linalg/tests/test_interface.py +561 -0
- scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
- scipy/sparse/linalg/tests/test_norm.py +154 -0
- scipy/sparse/linalg/tests/test_onenormest.py +252 -0
- scipy/sparse/linalg/tests/test_propack.py +165 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
- scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
- scipy/sparse/sparsetools.py +17 -0
- scipy/sparse/spfuncs.py +17 -0
- scipy/sparse/sputils.py +17 -0
- scipy/sparse/tests/__init__.py +0 -0
- scipy/sparse/tests/data/csc_py2.npz +0 -0
- scipy/sparse/tests/data/csc_py3.npz +0 -0
- scipy/sparse/tests/test_arithmetic1d.py +341 -0
- scipy/sparse/tests/test_array_api.py +561 -0
- scipy/sparse/tests/test_base.py +5870 -0
- scipy/sparse/tests/test_common1d.py +447 -0
- scipy/sparse/tests/test_construct.py +872 -0
- scipy/sparse/tests/test_coo.py +1119 -0
- scipy/sparse/tests/test_csc.py +98 -0
- scipy/sparse/tests/test_csr.py +214 -0
- scipy/sparse/tests/test_dok.py +209 -0
- scipy/sparse/tests/test_extract.py +51 -0
- scipy/sparse/tests/test_indexing1d.py +603 -0
- scipy/sparse/tests/test_matrix_io.py +109 -0
- scipy/sparse/tests/test_minmax1d.py +128 -0
- scipy/sparse/tests/test_sparsetools.py +344 -0
- scipy/sparse/tests/test_spfuncs.py +97 -0
- scipy/sparse/tests/test_sputils.py +424 -0
- scipy/spatial/__init__.py +129 -0
- scipy/spatial/_ckdtree.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_kdtree.py +920 -0
- scipy/spatial/_plotutils.py +274 -0
- scipy/spatial/_procrustes.py +132 -0
- scipy/spatial/_qhull.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp314t-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/_voronoi.pyi +4 -0
- scipy/spatial/ckdtree.py +18 -0
- scipy/spatial/distance.py +3147 -0
- scipy/spatial/distance.pyi +210 -0
- scipy/spatial/kdtree.py +25 -0
- scipy/spatial/qhull.py +25 -0
- scipy/spatial/qhull_src/COPYING_QHULL.txt +39 -0
- scipy/spatial/tests/__init__.py +0 -0
- scipy/spatial/tests/data/cdist-X1.txt +10 -0
- scipy/spatial/tests/data/cdist-X2.txt +20 -0
- scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
- scipy/spatial/tests/data/iris.txt +150 -0
- scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
- scipy/spatial/tests/data/random-bool-data.txt +100 -0
- scipy/spatial/tests/data/random-double-data.txt +100 -0
- scipy/spatial/tests/data/random-int-data.txt +100 -0
- scipy/spatial/tests/data/random-uint-data.txt +100 -0
- scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
- scipy/spatial/tests/test__plotutils.py +91 -0
- scipy/spatial/tests/test__procrustes.py +116 -0
- scipy/spatial/tests/test_distance.py +2389 -0
- scipy/spatial/tests/test_hausdorff.py +199 -0
- scipy/spatial/tests/test_kdtree.py +1536 -0
- scipy/spatial/tests/test_qhull.py +1313 -0
- scipy/spatial/tests/test_slerp.py +417 -0
- scipy/spatial/tests/test_spherical_voronoi.py +358 -0
- scipy/spatial/transform/__init__.py +31 -0
- scipy/spatial/transform/_rigid_transform.cp314t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp314t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp314t-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation_groups.py +140 -0
- scipy/spatial/transform/_rotation_spline.py +460 -0
- scipy/spatial/transform/rotation.py +21 -0
- scipy/spatial/transform/tests/__init__.py +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +2569 -0
- scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
- scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
- scipy/special/__init__.pxd +1 -0
- scipy/special/__init__.py +841 -0
- scipy/special/_add_newdocs.py +9961 -0
- scipy/special/_basic.py +3576 -0
- scipy/special/_comb.cp314t-win_arm64.lib +0 -0
- scipy/special/_comb.cp314t-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp314t-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp314t-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp314t-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp314t-win_arm64.pyd +0 -0
- scipy/special/_input_validation.py +17 -0
- scipy/special/_lambertw.py +149 -0
- scipy/special/_logsumexp.py +426 -0
- scipy/special/_mptestutils.py +453 -0
- scipy/special/_multiufuncs.py +610 -0
- scipy/special/_orthogonal.py +2592 -0
- scipy/special/_orthogonal.pyi +330 -0
- scipy/special/_precompute/__init__.py +0 -0
- scipy/special/_precompute/cosine_cdf.py +17 -0
- scipy/special/_precompute/expn_asy.py +54 -0
- scipy/special/_precompute/gammainc_asy.py +116 -0
- scipy/special/_precompute/gammainc_data.py +124 -0
- scipy/special/_precompute/hyp2f1_data.py +484 -0
- scipy/special/_precompute/lambertw.py +68 -0
- scipy/special/_precompute/loggamma.py +43 -0
- scipy/special/_precompute/struve_convergence.py +131 -0
- scipy/special/_precompute/utils.py +38 -0
- scipy/special/_precompute/wright_bessel.py +342 -0
- scipy/special/_precompute/wright_bessel_data.py +152 -0
- scipy/special/_precompute/wrightomega.py +41 -0
- scipy/special/_precompute/zetac.py +27 -0
- scipy/special/_sf_error.py +15 -0
- scipy/special/_specfun.cp314t-win_arm64.lib +0 -0
- scipy/special/_specfun.cp314t-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp314t-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp314t-win_arm64.pyd +0 -0
- scipy/special/_spfun_stats.py +106 -0
- scipy/special/_spherical_bessel.py +397 -0
- scipy/special/_support_alternative_backends.py +295 -0
- scipy/special/_test_internal.cp314t-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp314t-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp314t-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp314t-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp314t-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp314t-win_arm64.pyd +0 -0
- scipy/special/_ufuncs_cxx.pxd +142 -0
- scipy/special/_ufuncs_cxx.pyx +427 -0
- scipy/special/_ufuncs_cxx_defs.h +147 -0
- scipy/special/_ufuncs_defs.h +57 -0
- scipy/special/add_newdocs.py +15 -0
- scipy/special/basic.py +87 -0
- scipy/special/cython_special.cp314t-win_arm64.lib +0 -0
- scipy/special/cython_special.cp314t-win_arm64.pyd +0 -0
- scipy/special/cython_special.pxd +259 -0
- scipy/special/cython_special.pyi +3 -0
- scipy/special/orthogonal.py +45 -0
- scipy/special/sf_error.py +20 -0
- scipy/special/specfun.py +24 -0
- scipy/special/spfun_stats.py +17 -0
- scipy/special/tests/__init__.py +0 -0
- scipy/special/tests/_cython_examples/extending.pyx +12 -0
- scipy/special/tests/_cython_examples/meson.build +34 -0
- scipy/special/tests/data/__init__.py +0 -0
- scipy/special/tests/data/boost.npz +0 -0
- scipy/special/tests/data/gsl.npz +0 -0
- scipy/special/tests/data/local.npz +0 -0
- scipy/special/tests/test_basic.py +4815 -0
- scipy/special/tests/test_bdtr.py +112 -0
- scipy/special/tests/test_boost_ufuncs.py +64 -0
- scipy/special/tests/test_boxcox.py +125 -0
- scipy/special/tests/test_cdflib.py +712 -0
- scipy/special/tests/test_cdft_asymptotic.py +49 -0
- scipy/special/tests/test_cephes_intp_cast.py +29 -0
- scipy/special/tests/test_cosine_distr.py +83 -0
- scipy/special/tests/test_cython_special.py +363 -0
- scipy/special/tests/test_data.py +719 -0
- scipy/special/tests/test_dd.py +42 -0
- scipy/special/tests/test_digamma.py +45 -0
- scipy/special/tests/test_ellip_harm.py +278 -0
- scipy/special/tests/test_erfinv.py +89 -0
- scipy/special/tests/test_exponential_integrals.py +118 -0
- scipy/special/tests/test_extending.py +28 -0
- scipy/special/tests/test_faddeeva.py +85 -0
- scipy/special/tests/test_gamma.py +12 -0
- scipy/special/tests/test_gammainc.py +152 -0
- scipy/special/tests/test_hyp2f1.py +2566 -0
- scipy/special/tests/test_hypergeometric.py +234 -0
- scipy/special/tests/test_iv_ratio.py +249 -0
- scipy/special/tests/test_kolmogorov.py +491 -0
- scipy/special/tests/test_lambertw.py +109 -0
- scipy/special/tests/test_legendre.py +1518 -0
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_loggamma.py +70 -0
- scipy/special/tests/test_logit.py +162 -0
- scipy/special/tests/test_logsumexp.py +469 -0
- scipy/special/tests/test_mpmath.py +2293 -0
- scipy/special/tests/test_nan_inputs.py +65 -0
- scipy/special/tests/test_ndtr.py +77 -0
- scipy/special/tests/test_ndtri_exp.py +94 -0
- scipy/special/tests/test_orthogonal.py +821 -0
- scipy/special/tests/test_orthogonal_eval.py +275 -0
- scipy/special/tests/test_owens_t.py +53 -0
- scipy/special/tests/test_pcf.py +24 -0
- scipy/special/tests/test_pdtr.py +48 -0
- scipy/special/tests/test_powm1.py +65 -0
- scipy/special/tests/test_precompute_expn_asy.py +24 -0
- scipy/special/tests/test_precompute_gammainc.py +108 -0
- scipy/special/tests/test_precompute_utils.py +36 -0
- scipy/special/tests/test_round.py +18 -0
- scipy/special/tests/test_sf_error.py +146 -0
- scipy/special/tests/test_sici.py +36 -0
- scipy/special/tests/test_specfun.py +48 -0
- scipy/special/tests/test_spence.py +32 -0
- scipy/special/tests/test_spfun_stats.py +61 -0
- scipy/special/tests/test_sph_harm.py +85 -0
- scipy/special/tests/test_spherical_bessel.py +400 -0
- scipy/special/tests/test_support_alternative_backends.py +248 -0
- scipy/special/tests/test_trig.py +72 -0
- scipy/special/tests/test_ufunc_signatures.py +46 -0
- scipy/special/tests/test_wright_bessel.py +205 -0
- scipy/special/tests/test_wrightomega.py +117 -0
- scipy/special/tests/test_zeta.py +301 -0
- scipy/stats/__init__.py +670 -0
- scipy/stats/_ansari_swilk_statistics.cp314t-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp314t-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_biasedurn.pxd +27 -0
- scipy/stats/_binned_statistic.py +795 -0
- scipy/stats/_binomtest.py +375 -0
- scipy/stats/_bws_test.py +177 -0
- scipy/stats/_censored_data.py +459 -0
- scipy/stats/_common.py +5 -0
- scipy/stats/_constants.py +42 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +12486 -0
- scipy/stats/_correlation.py +210 -0
- scipy/stats/_covariance.py +636 -0
- scipy/stats/_crosstab.py +204 -0
- scipy/stats/_discrete_distns.py +2098 -0
- scipy/stats/_distn_infrastructure.py +4201 -0
- scipy/stats/_distr_params.py +299 -0
- scipy/stats/_distribution_infrastructure.py +5750 -0
- scipy/stats/_entropy.py +428 -0
- scipy/stats/_finite_differences.py +145 -0
- scipy/stats/_fit.py +1351 -0
- scipy/stats/_hypotests.py +2060 -0
- scipy/stats/_kde.py +732 -0
- scipy/stats/_ksstats.py +600 -0
- scipy/stats/_levy_stable/__init__.py +1231 -0
- scipy/stats/_levy_stable/levyst.cp314t-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_mannwhitneyu.py +492 -0
- scipy/stats/_mgc.py +550 -0
- scipy/stats/_morestats.py +4626 -0
- scipy/stats/_mstats_basic.py +3658 -0
- scipy/stats/_mstats_extras.py +521 -0
- scipy/stats/_multicomp.py +449 -0
- scipy/stats/_multivariate.py +7281 -0
- scipy/stats/_new_distributions.py +452 -0
- scipy/stats/_odds_ratio.py +466 -0
- scipy/stats/_page_trend_test.py +486 -0
- scipy/stats/_probability_distribution.py +1964 -0
- scipy/stats/_qmc.py +2956 -0
- scipy/stats/_qmc_cy.cp314t-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp314t-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp314t-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_relative_risk.py +263 -0
- scipy/stats/_resampling.py +2352 -0
- scipy/stats/_result_classes.py +40 -0
- scipy/stats/_sampling.py +1314 -0
- scipy/stats/_sensitivity_analysis.py +713 -0
- scipy/stats/_sobol.cp314t-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp314t-win_arm64.lib +0 -0
- scipy/stats/_stats.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_stats.pxd +10 -0
- scipy/stats/_stats_mstats_common.py +322 -0
- scipy/stats/_stats_py.py +11089 -0
- scipy/stats/_stats_pythran.cp314t-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_survival.py +683 -0
- scipy/stats/_tukeylambda_stats.py +199 -0
- scipy/stats/_unuran/__init__.py +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp314t-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp314t-win_arm64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
- scipy/stats/_variation.py +126 -0
- scipy/stats/_warnings_errors.py +38 -0
- scipy/stats/_wilcoxon.py +265 -0
- scipy/stats/biasedurn.py +16 -0
- scipy/stats/contingency.py +521 -0
- scipy/stats/distributions.py +24 -0
- scipy/stats/kde.py +18 -0
- scipy/stats/morestats.py +27 -0
- scipy/stats/mstats.py +140 -0
- scipy/stats/mstats_basic.py +42 -0
- scipy/stats/mstats_extras.py +25 -0
- scipy/stats/mvn.py +17 -0
- scipy/stats/qmc.py +236 -0
- scipy/stats/sampling.py +73 -0
- scipy/stats/stats.py +41 -0
- scipy/stats/tests/__init__.py +0 -0
- scipy/stats/tests/common_tests.py +356 -0
- scipy/stats/tests/data/_mvt.py +171 -0
- scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
- scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
- scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
- scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
- scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
- scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
- scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
- scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
- scipy/stats/tests/test_axis_nan_policy.py +1388 -0
- scipy/stats/tests/test_binned_statistic.py +568 -0
- scipy/stats/tests/test_censored_data.py +152 -0
- scipy/stats/tests/test_contingency.py +294 -0
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +2198 -0
- scipy/stats/tests/test_continuous_basic.py +1053 -0
- scipy/stats/tests/test_continuous_fit_censored.py +683 -0
- scipy/stats/tests/test_correlation.py +80 -0
- scipy/stats/tests/test_crosstab.py +115 -0
- scipy/stats/tests/test_discrete_basic.py +580 -0
- scipy/stats/tests/test_discrete_distns.py +700 -0
- scipy/stats/tests/test_distributions.py +10413 -0
- scipy/stats/tests/test_entropy.py +322 -0
- scipy/stats/tests/test_fast_gen_inversion.py +435 -0
- scipy/stats/tests/test_fit.py +1090 -0
- scipy/stats/tests/test_hypotests.py +1991 -0
- scipy/stats/tests/test_kdeoth.py +676 -0
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_mgc.py +217 -0
- scipy/stats/tests/test_morestats.py +3259 -0
- scipy/stats/tests/test_mstats_basic.py +2071 -0
- scipy/stats/tests/test_mstats_extras.py +172 -0
- scipy/stats/tests/test_multicomp.py +405 -0
- scipy/stats/tests/test_multivariate.py +4381 -0
- scipy/stats/tests/test_odds_ratio.py +148 -0
- scipy/stats/tests/test_qmc.py +1492 -0
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +345 -0
- scipy/stats/tests/test_relative_risk.py +95 -0
- scipy/stats/tests/test_resampling.py +2000 -0
- scipy/stats/tests/test_sampling.py +1450 -0
- scipy/stats/tests/test_sensitivity_analysis.py +310 -0
- scipy/stats/tests/test_stats.py +9707 -0
- scipy/stats/tests/test_survival.py +466 -0
- scipy/stats/tests/test_tukeylambda_stats.py +85 -0
- scipy/stats/tests/test_variation.py +216 -0
- scipy/version.py +12 -0
- scipy-1.16.2.dist-info/DELVEWHEEL +2 -0
- scipy-1.16.2.dist-info/LICENSE.txt +912 -0
- scipy-1.16.2.dist-info/METADATA +1061 -0
- scipy-1.16.2.dist-info/RECORD +1530 -0
- scipy-1.16.2.dist-info/WHEEL +4 -0
- scipy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
- scipy.libs/scipy_openblas-f3ac85b1f412f7e86514c923dc4058d1.dll +0 -0
@@ -0,0 +1,1964 @@
|
|
1
|
+
# Temporary file separated from _distribution_infrastructure.py
|
2
|
+
# to simplify the diff during PR review.
|
3
|
+
from abc import ABC, abstractmethod
|
4
|
+
|
5
|
+
class _ProbabilityDistribution(ABC):
|
6
|
+
@abstractmethod
|
7
|
+
def support(self):
|
8
|
+
r"""Support of the random variable
|
9
|
+
|
10
|
+
The support of a random variable is set of all possible outcomes;
|
11
|
+
i.e., the subset of the domain of argument :math:`x` for which
|
12
|
+
the probability density function :math:`f(x)` is nonzero.
|
13
|
+
|
14
|
+
This function returns lower and upper bounds of the support.
|
15
|
+
|
16
|
+
Returns
|
17
|
+
-------
|
18
|
+
out : tuple of Array
|
19
|
+
The lower and upper bounds of the support.
|
20
|
+
|
21
|
+
See Also
|
22
|
+
--------
|
23
|
+
pdf
|
24
|
+
|
25
|
+
References
|
26
|
+
----------
|
27
|
+
.. [1] Support (mathematics), *Wikipedia*,
|
28
|
+
https://en.wikipedia.org/wiki/Support_(mathematics)
|
29
|
+
|
30
|
+
Notes
|
31
|
+
-----
|
32
|
+
Suppose a continuous probability distribution has support ``(l, r)``.
|
33
|
+
The following table summarizes the value returned by several
|
34
|
+
methods when the argument is outside the support.
|
35
|
+
|
36
|
+
+----------------+---------------------+---------------------+
|
37
|
+
| Method | Value for ``x < l`` | Value for ``x > r`` |
|
38
|
+
+================+=====================+=====================+
|
39
|
+
| ``pdf(x)`` | 0 | 0 |
|
40
|
+
+----------------+---------------------+---------------------+
|
41
|
+
| ``logpdf(x)`` | -inf | -inf |
|
42
|
+
+----------------+---------------------+---------------------+
|
43
|
+
| ``cdf(x)`` | 0 | 1 |
|
44
|
+
+----------------+---------------------+---------------------+
|
45
|
+
| ``logcdf(x)`` | -inf | 0 |
|
46
|
+
+----------------+---------------------+---------------------+
|
47
|
+
| ``ccdf(x)`` | 1 | 0 |
|
48
|
+
+----------------+---------------------+---------------------+
|
49
|
+
| ``logccdf(x)`` | 0 | -inf |
|
50
|
+
+----------------+---------------------+---------------------+
|
51
|
+
|
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.
|
58
|
+
|
59
|
+
The following table summarizes the value returned by the inverse
|
60
|
+
methods for arguments ``0`` and ``1``, whether the distribution
|
61
|
+
is continuous or discrete.
|
62
|
+
|
63
|
+
+-------------+-----------+-----------+
|
64
|
+
| Method | ``x = 0`` | ``x = 1`` |
|
65
|
+
+=============+===========+===========+
|
66
|
+
| ``icdf(x)`` | ``l`` | ``r`` |
|
67
|
+
+-------------+-----------+-----------+
|
68
|
+
| ``icdf(x)`` | ``r`` | ``l`` |
|
69
|
+
+-------------+-----------+-----------+
|
70
|
+
|
71
|
+
For the inverse log-functions, the same values are returned
|
72
|
+
for ``x = log(0)`` and ``x = log(1)``. All inverse functions return
|
73
|
+
``nan`` when evaluated at an argument outside the domain ``0`` to ``1``.
|
74
|
+
|
75
|
+
Examples
|
76
|
+
--------
|
77
|
+
Instantiate a distribution with the desired parameters:
|
78
|
+
|
79
|
+
>>> from scipy import stats
|
80
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
81
|
+
|
82
|
+
Retrieve the support of the distribution:
|
83
|
+
|
84
|
+
>>> X.support()
|
85
|
+
(-0.5, 0.5)
|
86
|
+
|
87
|
+
For a distribution with infinite support,
|
88
|
+
|
89
|
+
>>> X = stats.Normal()
|
90
|
+
>>> X.support()
|
91
|
+
(-inf, inf)
|
92
|
+
|
93
|
+
Due to underflow, the numerical value returned by the PDF may be zero
|
94
|
+
even for arguments within the support, even if the true value is
|
95
|
+
nonzero. In such cases, the log-PDF may be useful.
|
96
|
+
|
97
|
+
>>> X.pdf([-100., 100.])
|
98
|
+
array([0., 0.])
|
99
|
+
>>> X.logpdf([-100., 100.])
|
100
|
+
array([-5000.91893853, -5000.91893853])
|
101
|
+
|
102
|
+
Use cases for the log-CDF and related methods are analogous.
|
103
|
+
|
104
|
+
"""
|
105
|
+
raise NotImplementedError()
|
106
|
+
|
107
|
+
@abstractmethod
|
108
|
+
def sample(self, shape, *, method, rng):
|
109
|
+
r"""Random sample from the distribution.
|
110
|
+
|
111
|
+
Parameters
|
112
|
+
----------
|
113
|
+
shape : tuple of ints, default: ()
|
114
|
+
The shape of the sample to draw. If the parameters of the distribution
|
115
|
+
underlying the random variable are arrays of shape ``param_shape``,
|
116
|
+
the output array will be of shape ``shape + param_shape``.
|
117
|
+
method : {None, 'formula', 'inverse_transform'}
|
118
|
+
The strategy used to produce the sample. By default (``None``),
|
119
|
+
the infrastructure chooses between the following options,
|
120
|
+
listed in order of precedence.
|
121
|
+
|
122
|
+
- ``'formula'``: an implementation specific to the distribution
|
123
|
+
- ``'inverse_transform'``: generate a uniformly distributed sample and
|
124
|
+
return the inverse CDF at these arguments.
|
125
|
+
|
126
|
+
Not all `method` options are available for all distributions.
|
127
|
+
If the selected `method` is not available, a `NotImplementedError``
|
128
|
+
will be raised.
|
129
|
+
rng : `numpy.random.Generator` or `scipy.stats.QMCEngine`, optional
|
130
|
+
Pseudo- or quasi-random number generator state. When `rng` is None,
|
131
|
+
a new `numpy.random.Generator` is created using entropy from the
|
132
|
+
operating system. Types other than `numpy.random.Generator` and
|
133
|
+
`scipy.stats.QMCEngine` are passed to `numpy.random.default_rng`
|
134
|
+
to instantiate a ``Generator``.
|
135
|
+
|
136
|
+
If `rng` is an instance of `scipy.stats.QMCEngine` configured to use
|
137
|
+
scrambling and `shape` is not empty, then each slice along the zeroth
|
138
|
+
axis of the result is a "quasi-independent", low-discrepancy sequence;
|
139
|
+
that is, they are distinct sequences that can be treated as statistically
|
140
|
+
independent for most practical purposes. Separate calls to `sample`
|
141
|
+
produce new quasi-independent, low-discrepancy sequences.
|
142
|
+
|
143
|
+
References
|
144
|
+
----------
|
145
|
+
.. [1] Sampling (statistics), *Wikipedia*,
|
146
|
+
https://en.wikipedia.org/wiki/Sampling_(statistics)
|
147
|
+
|
148
|
+
Examples
|
149
|
+
--------
|
150
|
+
Instantiate a distribution with the desired parameters:
|
151
|
+
|
152
|
+
>>> import numpy as np
|
153
|
+
>>> from scipy import stats
|
154
|
+
>>> X = stats.Uniform(a=0., b=1.)
|
155
|
+
|
156
|
+
Generate a pseudorandom sample:
|
157
|
+
|
158
|
+
>>> x = X.sample((1000, 1))
|
159
|
+
>>> octiles = (np.arange(8) + 1) / 8
|
160
|
+
>>> np.count_nonzero(x <= octiles, axis=0)
|
161
|
+
array([ 148, 263, 387, 516, 636, 751, 865, 1000]) # may vary
|
162
|
+
|
163
|
+
>>> X = stats.Uniform(a=np.zeros((3, 1)), b=np.ones(2))
|
164
|
+
>>> X.a.shape,
|
165
|
+
(3, 2)
|
166
|
+
>>> x = X.sample(shape=(5, 4))
|
167
|
+
>>> x.shape
|
168
|
+
(5, 4, 3, 2)
|
169
|
+
|
170
|
+
"""
|
171
|
+
raise NotImplementedError()
|
172
|
+
|
173
|
+
@abstractmethod
|
174
|
+
def moment(self, order, kind, *, method):
|
175
|
+
r"""Raw, central, or standard moment of positive integer order.
|
176
|
+
|
177
|
+
In terms of probability density function :math:`f(x)` and support
|
178
|
+
:math:`\chi`, the "raw" moment (about the origin) of order :math:`n` of
|
179
|
+
a continuous random variable :math:`X` is:
|
180
|
+
|
181
|
+
.. math::
|
182
|
+
|
183
|
+
\mu'_n(X) = \int_{\chi} x^n f(x) dx
|
184
|
+
|
185
|
+
The "central" moment is the raw moment taken about the mean,
|
186
|
+
:math:`\mu = \mu'_1`:
|
187
|
+
|
188
|
+
.. math::
|
189
|
+
|
190
|
+
\mu_n(X) = \int_{\chi} (x - \mu) ^n f(x) dx
|
191
|
+
|
192
|
+
The "standardized" moment is the central moment normalized by the
|
193
|
+
:math:`n^\text{th}` power of the standard deviation
|
194
|
+
:math:`\sigma = \sqrt{\mu_2}` to produce a scale invariant quantity:
|
195
|
+
|
196
|
+
.. math::
|
197
|
+
|
198
|
+
\tilde{\mu}_n(X) = \frac{\mu_n(X)}
|
199
|
+
{\sigma^n}
|
200
|
+
|
201
|
+
The definitions for discrete random variables are analogous, with
|
202
|
+
sums over the support replacing the integrals.
|
203
|
+
|
204
|
+
Parameters
|
205
|
+
----------
|
206
|
+
order : int
|
207
|
+
The integer order of the moment; i.e. :math:`n` in the formulae above.
|
208
|
+
kind : {'raw', 'central', 'standardized'}
|
209
|
+
Whether to return the raw (default), central, or standardized moment
|
210
|
+
defined above.
|
211
|
+
method : {None, 'formula', 'general', 'transform', 'normalize', 'quadrature', 'cache'}
|
212
|
+
The strategy used to evaluate the moment. By default (``None``),
|
213
|
+
the infrastructure chooses between the following options,
|
214
|
+
listed in order of precedence.
|
215
|
+
|
216
|
+
- ``'cache'``: use the value of the moment most recently calculated
|
217
|
+
via another method
|
218
|
+
- ``'formula'``: use a formula for the moment itself
|
219
|
+
- ``'general'``: use a general result that is true for all distributions
|
220
|
+
with finite moments; for instance, the zeroth raw moment is
|
221
|
+
identically 1
|
222
|
+
- ``'transform'``: transform a raw moment to a central moment or
|
223
|
+
vice versa (see Notes)
|
224
|
+
- ``'normalize'``: normalize a central moment to get a standardized
|
225
|
+
or vice versa
|
226
|
+
- ``'quadrature'``: numerically integrate (or, in the discrete case, sum)
|
227
|
+
according to the definition
|
228
|
+
|
229
|
+
Not all `method` options are available for all orders, kinds, and
|
230
|
+
distributions. If the selected `method` is not available, a
|
231
|
+
``NotImplementedError`` will be raised.
|
232
|
+
|
233
|
+
Returns
|
234
|
+
-------
|
235
|
+
out : array
|
236
|
+
The moment of the random variable of the specified order and kind.
|
237
|
+
|
238
|
+
See Also
|
239
|
+
--------
|
240
|
+
pdf
|
241
|
+
mean
|
242
|
+
variance
|
243
|
+
standard_deviation
|
244
|
+
skewness
|
245
|
+
kurtosis
|
246
|
+
|
247
|
+
Notes
|
248
|
+
-----
|
249
|
+
Not all distributions have finite moments of all orders; moments of some
|
250
|
+
orders may be undefined or infinite. If a formula for the moment is not
|
251
|
+
specifically implemented for the chosen distribution, SciPy will attempt
|
252
|
+
to compute the moment via a generic method, which may yield a finite
|
253
|
+
result where none exists. This is not a critical bug, but an opportunity
|
254
|
+
for an enhancement.
|
255
|
+
|
256
|
+
The definition of a raw moment in the summary is specific to the raw moment
|
257
|
+
about the origin. The raw moment about any point :math:`a` is:
|
258
|
+
|
259
|
+
.. math::
|
260
|
+
|
261
|
+
E[(X-a)^n] = \int_{\chi} (x-a)^n f(x) dx
|
262
|
+
|
263
|
+
In this notation, a raw moment about the origin is :math:`\mu'_n = E[x^n]`,
|
264
|
+
and a central moment is :math:`\mu_n = E[(x-\mu)^n]`, where :math:`\mu`
|
265
|
+
is the first raw moment; i.e. the mean.
|
266
|
+
|
267
|
+
The ``'transform'`` method takes advantage of the following relationships
|
268
|
+
between moments taken about different points :math:`a` and :math:`b`.
|
269
|
+
|
270
|
+
.. math::
|
271
|
+
|
272
|
+
E[(X-b)^n] = \sum_{i=0}^n E[(X-a)^i] {n \choose i} (a - b)^{n-i}
|
273
|
+
|
274
|
+
For instance, to transform the raw moment to the central moment, we let
|
275
|
+
:math:`b = \mu` and :math:`a = 0`.
|
276
|
+
|
277
|
+
The distribution infrastructure provides flexibility for distribution
|
278
|
+
authors to implement separate formulas for raw moments, central moments,
|
279
|
+
and standardized moments of any order. By default, the moment of the
|
280
|
+
desired order and kind is evaluated from the formula if such a formula
|
281
|
+
is available; if not, the infrastructure uses any formulas that are
|
282
|
+
available rather than resorting directly to numerical integration.
|
283
|
+
For instance, if formulas for the first three raw moments are
|
284
|
+
available and the third standardized moments is desired, the
|
285
|
+
infrastructure will evaluate the raw moments and perform the transforms
|
286
|
+
and standardization required. The decision tree is somewhat complex,
|
287
|
+
but the strategy for obtaining a moment of a given order and kind
|
288
|
+
(possibly as an intermediate step due to the recursive nature of the
|
289
|
+
transform formula above) roughly follows this order of priority:
|
290
|
+
|
291
|
+
#. Use cache (if order of same moment and kind has been calculated)
|
292
|
+
#. Use formula (if available)
|
293
|
+
#. Transform between raw and central moment and/or normalize to convert
|
294
|
+
between central and standardized moments (if efficient)
|
295
|
+
#. Use a generic result true for most distributions (if available)
|
296
|
+
#. Use quadrature
|
297
|
+
|
298
|
+
References
|
299
|
+
----------
|
300
|
+
.. [1] Moment, *Wikipedia*,
|
301
|
+
https://en.wikipedia.org/wiki/Moment_(mathematics)
|
302
|
+
|
303
|
+
Examples
|
304
|
+
--------
|
305
|
+
Instantiate a distribution with the desired parameters:
|
306
|
+
|
307
|
+
>>> from scipy import stats
|
308
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
309
|
+
|
310
|
+
Evaluate the first raw moment:
|
311
|
+
|
312
|
+
>>> X.moment(order=1, kind='raw')
|
313
|
+
1.0
|
314
|
+
>>> X.moment(order=1, kind='raw') == X.mean() == X.mu
|
315
|
+
True
|
316
|
+
|
317
|
+
Evaluate the second central moment:
|
318
|
+
|
319
|
+
>>> X.moment(order=2, kind='central')
|
320
|
+
4.0
|
321
|
+
>>> X.moment(order=2, kind='central') == X.variance() == X.sigma**2
|
322
|
+
True
|
323
|
+
|
324
|
+
Evaluate the fourth standardized moment:
|
325
|
+
|
326
|
+
>>> X.moment(order=4, kind='standardized')
|
327
|
+
3.0
|
328
|
+
>>> X.moment(order=4, kind='standardized') == X.kurtosis(convention='non-excess')
|
329
|
+
True
|
330
|
+
|
331
|
+
""" # noqa:E501
|
332
|
+
raise NotImplementedError()
|
333
|
+
|
334
|
+
@abstractmethod
|
335
|
+
def mean(self, *, method):
|
336
|
+
r"""Mean (raw first moment about the origin)
|
337
|
+
|
338
|
+
Parameters
|
339
|
+
----------
|
340
|
+
method : {None, 'formula', 'transform', 'quadrature', 'cache'}
|
341
|
+
Method used to calculate the raw first moment. Not
|
342
|
+
all methods are available for all distributions. See
|
343
|
+
`moment` for details.
|
344
|
+
|
345
|
+
See Also
|
346
|
+
--------
|
347
|
+
moment
|
348
|
+
median
|
349
|
+
mode
|
350
|
+
|
351
|
+
References
|
352
|
+
----------
|
353
|
+
.. [1] Mean, *Wikipedia*,
|
354
|
+
https://en.wikipedia.org/wiki/Mean#Mean_of_a_probability_distribution
|
355
|
+
|
356
|
+
Examples
|
357
|
+
--------
|
358
|
+
Instantiate a distribution with the desired parameters:
|
359
|
+
|
360
|
+
>>> from scipy import stats
|
361
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
362
|
+
|
363
|
+
Evaluate the variance:
|
364
|
+
|
365
|
+
>>> X.mean()
|
366
|
+
1.0
|
367
|
+
>>> X.mean() == X.moment(order=1, kind='raw') == X.mu
|
368
|
+
True
|
369
|
+
|
370
|
+
"""
|
371
|
+
raise NotImplementedError()
|
372
|
+
|
373
|
+
@abstractmethod
|
374
|
+
def median(self, *, method):
|
375
|
+
r"""Median (50th percentile)
|
376
|
+
|
377
|
+
If a continuous random variable :math:`X` has probability :math:`0.5` of
|
378
|
+
taking on a value less than :math:`m`, then :math:`m` is the median.
|
379
|
+
|
380
|
+
More generally, a median is a value :math:`m` for which:
|
381
|
+
|
382
|
+
.. math::
|
383
|
+
|
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.
|
388
|
+
|
389
|
+
Parameters
|
390
|
+
----------
|
391
|
+
method : {None, 'formula', 'icdf'}
|
392
|
+
The strategy used to evaluate the median.
|
393
|
+
By default (``None``), the infrastructure chooses between the
|
394
|
+
following options, listed in order of precedence.
|
395
|
+
|
396
|
+
- ``'formula'``: use a formula for the median
|
397
|
+
- ``'icdf'``: evaluate the inverse CDF of 0.5
|
398
|
+
|
399
|
+
Not all `method` options are available for all distributions.
|
400
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
401
|
+
will be raised.
|
402
|
+
|
403
|
+
Returns
|
404
|
+
-------
|
405
|
+
out : array
|
406
|
+
The median
|
407
|
+
|
408
|
+
See Also
|
409
|
+
--------
|
410
|
+
mean
|
411
|
+
mode
|
412
|
+
icdf
|
413
|
+
|
414
|
+
References
|
415
|
+
----------
|
416
|
+
.. [1] Median, *Wikipedia*,
|
417
|
+
https://en.wikipedia.org/wiki/Median#Probability_distributions
|
418
|
+
|
419
|
+
Examples
|
420
|
+
--------
|
421
|
+
Instantiate a distribution with the desired parameters:
|
422
|
+
|
423
|
+
>>> from scipy import stats
|
424
|
+
>>> X = stats.Uniform(a=0., b=10.)
|
425
|
+
|
426
|
+
Compute the median:
|
427
|
+
|
428
|
+
>>> X.median()
|
429
|
+
np.float64(5.0)
|
430
|
+
>>> X.median() == X.icdf(0.5) == X.iccdf(0.5)
|
431
|
+
True
|
432
|
+
|
433
|
+
"""
|
434
|
+
raise NotImplementedError()
|
435
|
+
|
436
|
+
@abstractmethod
|
437
|
+
def mode(self, *, method):
|
438
|
+
r"""Mode (most likely value)
|
439
|
+
|
440
|
+
Informally, the mode is a value that a random variable has the highest
|
441
|
+
probability (density) of assuming. That is, the mode is the element of
|
442
|
+
the support :math:`\chi` that maximizes the probability density (or mass,
|
443
|
+
for discrete random variables) function :math:`f(x)`:
|
444
|
+
|
445
|
+
.. math::
|
446
|
+
|
447
|
+
\text{mode} = \arg\max_{x \in \chi} f(x)
|
448
|
+
|
449
|
+
Parameters
|
450
|
+
----------
|
451
|
+
method : {None, 'formula', 'optimization'}
|
452
|
+
The strategy used to evaluate the mode.
|
453
|
+
By default (``None``), the infrastructure chooses between the
|
454
|
+
following options, listed in order of precedence.
|
455
|
+
|
456
|
+
- ``'formula'``: use a formula for the median
|
457
|
+
- ``'optimization'``: numerically maximize the PDF/PMF
|
458
|
+
|
459
|
+
Not all `method` options are available for all distributions.
|
460
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
461
|
+
will be raised.
|
462
|
+
|
463
|
+
Returns
|
464
|
+
-------
|
465
|
+
out : array
|
466
|
+
The mode
|
467
|
+
|
468
|
+
See Also
|
469
|
+
--------
|
470
|
+
mean
|
471
|
+
median
|
472
|
+
pdf
|
473
|
+
|
474
|
+
Notes
|
475
|
+
-----
|
476
|
+
For some distributions
|
477
|
+
|
478
|
+
#. the mode is not unique (e.g. the uniform distribution);
|
479
|
+
#. the PDF has one or more singularities, and it is debatable whether
|
480
|
+
a singularity is considered to be in the domain and called the mode
|
481
|
+
(e.g. the gamma distribution with shape parameter less than 1); and/or
|
482
|
+
#. the probability density function may have one or more local maxima
|
483
|
+
that are not a global maximum (e.g. mixture distributions).
|
484
|
+
|
485
|
+
In such cases, `mode` will
|
486
|
+
|
487
|
+
#. return a single value,
|
488
|
+
#. consider the mode to occur at a singularity, and/or
|
489
|
+
#. return a local maximum which may or may not be a global maximum.
|
490
|
+
|
491
|
+
If a formula for the mode is not specifically implemented for the
|
492
|
+
chosen distribution, SciPy will attempt to compute the mode
|
493
|
+
numerically, which may not meet the user's preferred definition of a
|
494
|
+
mode. In such cases, the user is encouraged to subclass the
|
495
|
+
distribution and override ``mode``.
|
496
|
+
|
497
|
+
References
|
498
|
+
----------
|
499
|
+
.. [1] Mode (statistics), *Wikipedia*,
|
500
|
+
https://en.wikipedia.org/wiki/Mode_(statistics)
|
501
|
+
|
502
|
+
Examples
|
503
|
+
--------
|
504
|
+
Instantiate a distribution with the desired parameters:
|
505
|
+
|
506
|
+
>>> from scipy import stats
|
507
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
508
|
+
|
509
|
+
Evaluate the mode:
|
510
|
+
|
511
|
+
>>> X.mode()
|
512
|
+
1.0
|
513
|
+
|
514
|
+
If the mode is not uniquely defined, ``mode`` nonetheless returns a
|
515
|
+
single value.
|
516
|
+
|
517
|
+
>>> X = stats.Uniform(a=0., b=1.)
|
518
|
+
>>> X.mode()
|
519
|
+
0.5
|
520
|
+
|
521
|
+
If this choice does not satisfy your requirements, subclass the
|
522
|
+
distribution and override ``mode``:
|
523
|
+
|
524
|
+
>>> class BetterUniform(stats.Uniform):
|
525
|
+
... def mode(self):
|
526
|
+
... return self.b
|
527
|
+
>>> X = BetterUniform(a=0., b=1.)
|
528
|
+
>>> X.mode()
|
529
|
+
1.0
|
530
|
+
|
531
|
+
"""
|
532
|
+
raise NotImplementedError()
|
533
|
+
|
534
|
+
@abstractmethod
|
535
|
+
def variance(self, *, method):
|
536
|
+
r"""Variance (central second moment)
|
537
|
+
|
538
|
+
Parameters
|
539
|
+
----------
|
540
|
+
method : {None, 'formula', 'transform', 'normalize', 'quadrature', 'cache'}
|
541
|
+
Method used to calculate the central second moment. Not
|
542
|
+
all methods are available for all distributions. See
|
543
|
+
`moment` for details.
|
544
|
+
|
545
|
+
See Also
|
546
|
+
--------
|
547
|
+
moment
|
548
|
+
standard_deviation
|
549
|
+
mean
|
550
|
+
|
551
|
+
References
|
552
|
+
----------
|
553
|
+
.. [1] Variance, *Wikipedia*,
|
554
|
+
https://en.wikipedia.org/wiki/Variance#Absolutely_continuous_random_variable
|
555
|
+
|
556
|
+
Examples
|
557
|
+
--------
|
558
|
+
Instantiate a distribution with the desired parameters:
|
559
|
+
|
560
|
+
>>> from scipy import stats
|
561
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
562
|
+
|
563
|
+
Evaluate the variance:
|
564
|
+
|
565
|
+
>>> X.variance()
|
566
|
+
4.0
|
567
|
+
>>> X.variance() == X.moment(order=2, kind='central') == X.sigma**2
|
568
|
+
True
|
569
|
+
|
570
|
+
"""
|
571
|
+
raise NotImplementedError()
|
572
|
+
|
573
|
+
@abstractmethod
|
574
|
+
def standard_deviation(self, *, method):
|
575
|
+
r"""Standard deviation (square root of the second central moment)
|
576
|
+
|
577
|
+
Parameters
|
578
|
+
----------
|
579
|
+
method : {None, 'formula', 'transform', 'normalize', 'quadrature', 'cache'}
|
580
|
+
Method used to calculate the central second moment. Not
|
581
|
+
all methods are available for all distributions. See
|
582
|
+
`moment` for details.
|
583
|
+
|
584
|
+
See Also
|
585
|
+
--------
|
586
|
+
variance
|
587
|
+
mean
|
588
|
+
moment
|
589
|
+
|
590
|
+
References
|
591
|
+
----------
|
592
|
+
.. [1] Standard deviation, *Wikipedia*,
|
593
|
+
https://en.wikipedia.org/wiki/Standard_deviation#Definition_of_population_values
|
594
|
+
|
595
|
+
Examples
|
596
|
+
--------
|
597
|
+
Instantiate a distribution with the desired parameters:
|
598
|
+
|
599
|
+
>>> from scipy import stats
|
600
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
601
|
+
|
602
|
+
Evaluate the standard deviation:
|
603
|
+
|
604
|
+
>>> X.standard_deviation()
|
605
|
+
2.0
|
606
|
+
>>> X.standard_deviation() == X.moment(order=2, kind='central')**0.5 == X.sigma
|
607
|
+
True
|
608
|
+
|
609
|
+
"""
|
610
|
+
raise NotImplementedError()
|
611
|
+
|
612
|
+
@abstractmethod
|
613
|
+
def skewness(self, *, method):
|
614
|
+
r"""Skewness (standardized third moment)
|
615
|
+
|
616
|
+
Parameters
|
617
|
+
----------
|
618
|
+
method : {None, 'formula', 'general', 'transform', 'normalize', 'cache'}
|
619
|
+
Method used to calculate the standardized third moment. Not
|
620
|
+
all methods are available for all distributions. See
|
621
|
+
`moment` for details.
|
622
|
+
|
623
|
+
See Also
|
624
|
+
--------
|
625
|
+
moment
|
626
|
+
mean
|
627
|
+
variance
|
628
|
+
|
629
|
+
References
|
630
|
+
----------
|
631
|
+
.. [1] Skewness, *Wikipedia*,
|
632
|
+
https://en.wikipedia.org/wiki/Skewness
|
633
|
+
|
634
|
+
Examples
|
635
|
+
--------
|
636
|
+
Instantiate a distribution with the desired parameters:
|
637
|
+
|
638
|
+
>>> from scipy import stats
|
639
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
640
|
+
|
641
|
+
Evaluate the skewness:
|
642
|
+
|
643
|
+
>>> X.skewness()
|
644
|
+
0.0
|
645
|
+
>>> X.skewness() == X.moment(order=3, kind='standardized')
|
646
|
+
True
|
647
|
+
|
648
|
+
"""
|
649
|
+
raise NotImplementedError()
|
650
|
+
|
651
|
+
@abstractmethod
|
652
|
+
def kurtosis(self, *, method):
|
653
|
+
r"""Kurtosis (standardized fourth moment)
|
654
|
+
|
655
|
+
By default, this is the standardized fourth moment, also known as the
|
656
|
+
"non-excess" or "Pearson" kurtosis (e.g. the kurtosis of the normal
|
657
|
+
distribution is 3). The "excess" or "Fisher" kurtosis (the standardized
|
658
|
+
fourth moment minus 3) is available via the `convention` parameter.
|
659
|
+
|
660
|
+
Parameters
|
661
|
+
----------
|
662
|
+
method : {None, 'formula', 'general', 'transform', 'normalize', 'cache'}
|
663
|
+
Method used to calculate the standardized fourth moment. Not
|
664
|
+
all methods are available for all distributions. See
|
665
|
+
`moment` for details.
|
666
|
+
convention : {'non-excess', 'excess'}
|
667
|
+
Two distinct conventions are available:
|
668
|
+
|
669
|
+
- ``'non-excess'``: the standardized fourth moment (Pearson's kurtosis)
|
670
|
+
- ``'excess'``: the standardized fourth moment minus 3 (Fisher's kurtosis)
|
671
|
+
|
672
|
+
The default is ``'non-excess'``.
|
673
|
+
|
674
|
+
See Also
|
675
|
+
--------
|
676
|
+
moment
|
677
|
+
mean
|
678
|
+
variance
|
679
|
+
|
680
|
+
References
|
681
|
+
----------
|
682
|
+
.. [1] Kurtosis, *Wikipedia*,
|
683
|
+
https://en.wikipedia.org/wiki/Kurtosis
|
684
|
+
|
685
|
+
Examples
|
686
|
+
--------
|
687
|
+
Instantiate a distribution with the desired parameters:
|
688
|
+
|
689
|
+
>>> from scipy import stats
|
690
|
+
>>> X = stats.Normal(mu=1., sigma=2.)
|
691
|
+
|
692
|
+
Evaluate the kurtosis:
|
693
|
+
|
694
|
+
>>> X.kurtosis()
|
695
|
+
3.0
|
696
|
+
>>> (X.kurtosis()
|
697
|
+
... == X.kurtosis(convention='excess') + 3.
|
698
|
+
... == X.moment(order=4, kind='standardized'))
|
699
|
+
True
|
700
|
+
|
701
|
+
"""
|
702
|
+
raise NotImplementedError()
|
703
|
+
|
704
|
+
@abstractmethod
|
705
|
+
def pdf(self, x, /, *, method):
|
706
|
+
r"""Probability density function
|
707
|
+
|
708
|
+
The probability density function ("PDF"), denoted :math:`f(x)`, is the
|
709
|
+
probability *per unit length* that the random variable will assume the
|
710
|
+
value :math:`x`. Mathematically, it can be defined as the derivative
|
711
|
+
of the cumulative distribution function :math:`F(x)`:
|
712
|
+
|
713
|
+
.. math::
|
714
|
+
|
715
|
+
f(x) = \frac{d}{dx} F(x)
|
716
|
+
|
717
|
+
`pdf` accepts `x` for :math:`x`.
|
718
|
+
|
719
|
+
Parameters
|
720
|
+
----------
|
721
|
+
x : array_like
|
722
|
+
The argument of the PDF.
|
723
|
+
method : {None, 'formula', 'logexp'}
|
724
|
+
The strategy used to evaluate the PDF. By default (``None``), the
|
725
|
+
infrastructure chooses between the following options, listed in
|
726
|
+
order of precedence.
|
727
|
+
|
728
|
+
- ``'formula'``: use a formula for the PDF itself
|
729
|
+
- ``'logexp'``: evaluate the log-PDF and exponentiate
|
730
|
+
|
731
|
+
Not all `method` options are available for all distributions.
|
732
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
733
|
+
will be raised.
|
734
|
+
|
735
|
+
Returns
|
736
|
+
-------
|
737
|
+
out : array
|
738
|
+
The PDF evaluated at the argument `x`.
|
739
|
+
|
740
|
+
See Also
|
741
|
+
--------
|
742
|
+
cdf
|
743
|
+
logpdf
|
744
|
+
|
745
|
+
Notes
|
746
|
+
-----
|
747
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
748
|
+
By definition of the support, the PDF evaluates to its minimum value
|
749
|
+
of :math:`0` outside the support; i.e. for :math:`x < l` or
|
750
|
+
:math:`x > r`. The maximum of the PDF may be less than or greater than
|
751
|
+
:math:`1`; since the value is a probability *density*, only its integral
|
752
|
+
over the support must equal :math:`1`.
|
753
|
+
|
754
|
+
For discrete distributions, `pdf` returns ``inf`` at supported points
|
755
|
+
and ``0`` elsewhere.
|
756
|
+
|
757
|
+
References
|
758
|
+
----------
|
759
|
+
.. [1] Probability density function, *Wikipedia*,
|
760
|
+
https://en.wikipedia.org/wiki/Probability_density_function
|
761
|
+
|
762
|
+
Examples
|
763
|
+
--------
|
764
|
+
Instantiate a distribution with the desired parameters:
|
765
|
+
|
766
|
+
>>> from scipy import stats
|
767
|
+
>>> X = stats.Uniform(a=-1., b=1.)
|
768
|
+
|
769
|
+
Evaluate the PDF at the desired argument:
|
770
|
+
|
771
|
+
>>> X.pdf(0.25)
|
772
|
+
0.5
|
773
|
+
|
774
|
+
"""
|
775
|
+
raise NotImplementedError()
|
776
|
+
|
777
|
+
@abstractmethod
|
778
|
+
def logpdf(self, x, /, *, method):
|
779
|
+
r"""Log of the probability density function
|
780
|
+
|
781
|
+
The probability density function ("PDF"), denoted :math:`f(x)`, is the
|
782
|
+
probability *per unit length* that the random variable will assume the
|
783
|
+
value :math:`x`. Mathematically, it can be defined as the derivative
|
784
|
+
of the cumulative distribution function :math:`F(x)`:
|
785
|
+
|
786
|
+
.. math::
|
787
|
+
|
788
|
+
f(x) = \frac{d}{dx} F(x)
|
789
|
+
|
790
|
+
`logpdf` computes the logarithm of the probability density function
|
791
|
+
("log-PDF"), :math:`\log(f(x))`, but it may be numerically favorable
|
792
|
+
compared to the naive implementation (computing :math:`f(x)` and
|
793
|
+
taking the logarithm).
|
794
|
+
|
795
|
+
`logpdf` accepts `x` for :math:`x`.
|
796
|
+
|
797
|
+
Parameters
|
798
|
+
----------
|
799
|
+
x : array_like
|
800
|
+
The argument of the log-PDF.
|
801
|
+
method : {None, 'formula', 'logexp'}
|
802
|
+
The strategy used to evaluate the log-PDF. By default (``None``), the
|
803
|
+
infrastructure chooses between the following options, listed in order
|
804
|
+
of precedence.
|
805
|
+
|
806
|
+
- ``'formula'``: use a formula for the log-PDF itself
|
807
|
+
- ``'logexp'``: evaluate the PDF and takes its logarithm
|
808
|
+
|
809
|
+
Not all `method` options are available for all distributions.
|
810
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
811
|
+
will be raised.
|
812
|
+
|
813
|
+
Returns
|
814
|
+
-------
|
815
|
+
out : array
|
816
|
+
The log-PDF evaluated at the argument `x`.
|
817
|
+
|
818
|
+
See Also
|
819
|
+
--------
|
820
|
+
pdf
|
821
|
+
logcdf
|
822
|
+
|
823
|
+
Notes
|
824
|
+
-----
|
825
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
826
|
+
By definition of the support, the log-PDF evaluates to its minimum value
|
827
|
+
of :math:`-\infty` (i.e. :math:`\log(0)`) outside the support; i.e. for
|
828
|
+
:math:`x < l` or :math:`x > r`. The maximum of the log-PDF may be less
|
829
|
+
than or greater than :math:`\log(1) = 0` because the maximum of the PDF
|
830
|
+
can be any positive real.
|
831
|
+
|
832
|
+
For distributions with infinite support, it is common for `pdf` to return
|
833
|
+
a value of ``0`` when the argument is theoretically within the support;
|
834
|
+
this can occur because the true value of the PDF is too small to be
|
835
|
+
represented by the chosen dtype. The log-PDF, however, will often be finite
|
836
|
+
(not ``-inf``) over a much larger domain. Consequently, it may be preferred
|
837
|
+
to work with the logarithms of probabilities and probability densities to
|
838
|
+
avoid underflow.
|
839
|
+
|
840
|
+
For discrete distributions, `logpdf` returns ``inf`` at supported points and
|
841
|
+
``-inf`` (``log(0)``) elsewhere.
|
842
|
+
|
843
|
+
References
|
844
|
+
----------
|
845
|
+
.. [1] Probability density function, *Wikipedia*,
|
846
|
+
https://en.wikipedia.org/wiki/Probability_density_function
|
847
|
+
|
848
|
+
Examples
|
849
|
+
--------
|
850
|
+
Instantiate a distribution with the desired parameters:
|
851
|
+
|
852
|
+
>>> import numpy as np
|
853
|
+
>>> from scipy import stats
|
854
|
+
>>> X = stats.Uniform(a=-1.0, b=1.0)
|
855
|
+
|
856
|
+
Evaluate the log-PDF at the desired argument:
|
857
|
+
|
858
|
+
>>> X.logpdf(0.5)
|
859
|
+
-0.6931471805599453
|
860
|
+
>>> np.allclose(X.logpdf(0.5), np.log(X.pdf(0.5)))
|
861
|
+
True
|
862
|
+
|
863
|
+
"""
|
864
|
+
raise NotImplementedError()
|
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
|
+
|
1016
|
+
@abstractmethod
|
1017
|
+
def cdf(self, x, y, /, *, method):
|
1018
|
+
r"""Cumulative distribution function
|
1019
|
+
|
1020
|
+
The cumulative distribution function ("CDF"), denoted :math:`F(x)`, is
|
1021
|
+
the probability the random variable :math:`X` will assume a value
|
1022
|
+
less than or equal to :math:`x`:
|
1023
|
+
|
1024
|
+
.. math::
|
1025
|
+
|
1026
|
+
F(x) = P(X ≤ x)
|
1027
|
+
|
1028
|
+
A two-argument variant of this function is also defined as the
|
1029
|
+
probability the random variable :math:`X` will assume a value between
|
1030
|
+
:math:`x` and :math:`y`.
|
1031
|
+
|
1032
|
+
.. math::
|
1033
|
+
|
1034
|
+
F(x, y) = P(x ≤ X ≤ y)
|
1035
|
+
|
1036
|
+
`cdf` accepts `x` for :math:`x` and `y` for :math:`y`.
|
1037
|
+
|
1038
|
+
Parameters
|
1039
|
+
----------
|
1040
|
+
x, y : array_like
|
1041
|
+
The arguments of the CDF. `x` is required; `y` is optional.
|
1042
|
+
method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'subtraction'}
|
1043
|
+
The strategy used to evaluate the CDF.
|
1044
|
+
By default (``None``), the one-argument form of the function
|
1045
|
+
chooses between the following options, listed in order of precedence.
|
1046
|
+
|
1047
|
+
- ``'formula'``: use a formula for the CDF itself
|
1048
|
+
- ``'logexp'``: evaluate the log-CDF and exponentiate
|
1049
|
+
- ``'complement'``: evaluate the CCDF and take the complement
|
1050
|
+
- ``'quadrature'``: numerically integrate the PDF (or, in the discrete
|
1051
|
+
case, sum the PMF)
|
1052
|
+
|
1053
|
+
In place of ``'complement'``, the two-argument form accepts:
|
1054
|
+
|
1055
|
+
- ``'subtraction'``: compute the CDF at each argument and take
|
1056
|
+
the difference.
|
1057
|
+
|
1058
|
+
Not all `method` options are available for all distributions.
|
1059
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1060
|
+
will be raised.
|
1061
|
+
|
1062
|
+
Returns
|
1063
|
+
-------
|
1064
|
+
out : array
|
1065
|
+
The CDF evaluated at the provided argument(s).
|
1066
|
+
|
1067
|
+
See Also
|
1068
|
+
--------
|
1069
|
+
logcdf
|
1070
|
+
ccdf
|
1071
|
+
|
1072
|
+
Notes
|
1073
|
+
-----
|
1074
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1075
|
+
The CDF :math:`F(x)` is related to the probability density function
|
1076
|
+
:math:`f(x)` by:
|
1077
|
+
|
1078
|
+
.. math::
|
1079
|
+
|
1080
|
+
F(x) = \int_l^x f(u) du
|
1081
|
+
|
1082
|
+
The two argument version is:
|
1083
|
+
|
1084
|
+
.. math::
|
1085
|
+
|
1086
|
+
F(x, y) = \int_x^y f(u) du = F(y) - F(x)
|
1087
|
+
|
1088
|
+
The CDF evaluates to its minimum value of :math:`0` for :math:`x ≤ l`
|
1089
|
+
and its maximum value of :math:`1` for :math:`x ≥ r`.
|
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
|
+
|
1102
|
+
The CDF is also known simply as the "distribution function".
|
1103
|
+
|
1104
|
+
References
|
1105
|
+
----------
|
1106
|
+
.. [1] Cumulative distribution function, *Wikipedia*,
|
1107
|
+
https://en.wikipedia.org/wiki/Cumulative_distribution_function
|
1108
|
+
|
1109
|
+
Examples
|
1110
|
+
--------
|
1111
|
+
Instantiate a distribution with the desired parameters:
|
1112
|
+
|
1113
|
+
>>> from scipy import stats
|
1114
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1115
|
+
|
1116
|
+
Evaluate the CDF at the desired argument:
|
1117
|
+
|
1118
|
+
>>> X.cdf(0.25)
|
1119
|
+
0.75
|
1120
|
+
|
1121
|
+
Evaluate the cumulative probability between two arguments:
|
1122
|
+
|
1123
|
+
>>> X.cdf(-0.25, 0.25) == X.cdf(0.25) - X.cdf(-0.25)
|
1124
|
+
True
|
1125
|
+
|
1126
|
+
""" # noqa: E501
|
1127
|
+
raise NotImplementedError()
|
1128
|
+
|
1129
|
+
@abstractmethod
|
1130
|
+
def icdf(self, p, /, *, method):
|
1131
|
+
r"""Inverse of the cumulative distribution function.
|
1132
|
+
|
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`.
|
1137
|
+
|
1138
|
+
.. math::
|
1139
|
+
|
1140
|
+
F^{-1}(p) = x \quad \text{s.t.} \quad F(x) = p
|
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
|
+
|
1151
|
+
`icdf` accepts `p` for :math:`p \in [0, 1]`.
|
1152
|
+
|
1153
|
+
Parameters
|
1154
|
+
----------
|
1155
|
+
p : array_like
|
1156
|
+
The argument of the inverse CDF.
|
1157
|
+
method : {None, 'formula', 'complement', 'inversion'}
|
1158
|
+
The strategy used to evaluate the inverse CDF.
|
1159
|
+
By default (``None``), the infrastructure chooses between the
|
1160
|
+
following options, listed in order of precedence.
|
1161
|
+
|
1162
|
+
- ``'formula'``: use a formula for the inverse CDF itself
|
1163
|
+
- ``'complement'``: evaluate the inverse CCDF at the
|
1164
|
+
complement of `p`
|
1165
|
+
- ``'inversion'``: solve numerically for the argument at which the
|
1166
|
+
CDF is equal to `p`
|
1167
|
+
|
1168
|
+
Not all `method` options are available for all distributions.
|
1169
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1170
|
+
will be raised.
|
1171
|
+
|
1172
|
+
Returns
|
1173
|
+
-------
|
1174
|
+
out : array
|
1175
|
+
The inverse CDF evaluated at the provided argument.
|
1176
|
+
|
1177
|
+
See Also
|
1178
|
+
--------
|
1179
|
+
cdf
|
1180
|
+
ilogcdf
|
1181
|
+
|
1182
|
+
Notes
|
1183
|
+
-----
|
1184
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
1185
|
+
inverse CDF returns its minimum value of :math:`l` at :math:`p = 0`
|
1186
|
+
and its maximum value of :math:`r` at :math:`p = 1`. Because the CDF
|
1187
|
+
has range :math:`[0, 1]`, the inverse CDF is only defined on the
|
1188
|
+
domain :math:`[0, 1]`; for :math:`p < 0` and :math:`p > 1`, `icdf`
|
1189
|
+
returns ``nan``.
|
1190
|
+
|
1191
|
+
The inverse CDF is also known as the quantile function, percentile function,
|
1192
|
+
and percent-point function.
|
1193
|
+
|
1194
|
+
References
|
1195
|
+
----------
|
1196
|
+
.. [1] Quantile function, *Wikipedia*,
|
1197
|
+
https://en.wikipedia.org/wiki/Quantile_function
|
1198
|
+
|
1199
|
+
Examples
|
1200
|
+
--------
|
1201
|
+
Instantiate a distribution with the desired parameters:
|
1202
|
+
|
1203
|
+
>>> import numpy as np
|
1204
|
+
>>> from scipy import stats
|
1205
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1206
|
+
|
1207
|
+
Evaluate the inverse CDF at the desired argument:
|
1208
|
+
|
1209
|
+
>>> X.icdf(0.25)
|
1210
|
+
-0.25
|
1211
|
+
>>> np.allclose(X.cdf(X.icdf(0.25)), 0.25)
|
1212
|
+
True
|
1213
|
+
|
1214
|
+
This function returns NaN when the argument is outside the domain.
|
1215
|
+
|
1216
|
+
>>> X.icdf([-0.1, 0, 1, 1.1])
|
1217
|
+
array([ nan, -0.5, 0.5, nan])
|
1218
|
+
|
1219
|
+
"""
|
1220
|
+
raise NotImplementedError()
|
1221
|
+
|
1222
|
+
@abstractmethod
|
1223
|
+
def ccdf(self, x, y, /, *, method):
|
1224
|
+
r"""Complementary cumulative distribution function
|
1225
|
+
|
1226
|
+
The complementary cumulative distribution function ("CCDF"), denoted
|
1227
|
+
:math:`G(x)`, is the complement of the cumulative distribution function
|
1228
|
+
:math:`F(x)`; i.e., probability the random variable :math:`X` will
|
1229
|
+
assume a value greater than :math:`x`:
|
1230
|
+
|
1231
|
+
.. math::
|
1232
|
+
|
1233
|
+
G(x) = 1 - F(x) = P(X > x)
|
1234
|
+
|
1235
|
+
A two-argument variant of this function is:
|
1236
|
+
|
1237
|
+
.. math::
|
1238
|
+
|
1239
|
+
G(x, y) = 1 - F(x, y) = P(X < x \text{ or } X > y)
|
1240
|
+
|
1241
|
+
`ccdf` accepts `x` for :math:`x` and `y` for :math:`y`.
|
1242
|
+
|
1243
|
+
Parameters
|
1244
|
+
----------
|
1245
|
+
x, y : array_like
|
1246
|
+
The arguments of the CCDF. `x` is required; `y` is optional.
|
1247
|
+
method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'addition'}
|
1248
|
+
The strategy used to evaluate the CCDF.
|
1249
|
+
By default (``None``), the infrastructure chooses between the
|
1250
|
+
following options, listed in order of precedence.
|
1251
|
+
|
1252
|
+
- ``'formula'``: use a formula for the CCDF itself
|
1253
|
+
- ``'logexp'``: evaluate the log-CCDF and exponentiate
|
1254
|
+
- ``'complement'``: evaluate the CDF and take the complement
|
1255
|
+
- ``'quadrature'``: numerically integrate the PDF (or, in the discrete
|
1256
|
+
case, sum the PMF)
|
1257
|
+
|
1258
|
+
The two-argument form chooses between:
|
1259
|
+
|
1260
|
+
- ``'formula'``: use a formula for the CCDF itself
|
1261
|
+
- ``'addition'``: compute the CDF at `x` and the CCDF at `y`, then add
|
1262
|
+
|
1263
|
+
Not all `method` options are available for all distributions.
|
1264
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1265
|
+
will be raised.
|
1266
|
+
|
1267
|
+
Returns
|
1268
|
+
-------
|
1269
|
+
out : array
|
1270
|
+
The CCDF evaluated at the provided argument(s).
|
1271
|
+
|
1272
|
+
See Also
|
1273
|
+
--------
|
1274
|
+
cdf
|
1275
|
+
logccdf
|
1276
|
+
|
1277
|
+
Notes
|
1278
|
+
-----
|
1279
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1280
|
+
The CCDF :math:`G(x)` is related to the probability density function
|
1281
|
+
:math:`f(x)` by:
|
1282
|
+
|
1283
|
+
.. math::
|
1284
|
+
|
1285
|
+
G(x) = \int_x^r f(u) du
|
1286
|
+
|
1287
|
+
The two argument version is:
|
1288
|
+
|
1289
|
+
.. math::
|
1290
|
+
|
1291
|
+
G(x, y) = \int_l^x f(u) du + \int_y^r f(u) du
|
1292
|
+
|
1293
|
+
The CCDF returns its minimum value of :math:`0` for :math:`x ≥ r`
|
1294
|
+
and its maximum value of :math:`1` for :math:`x ≤ l`.
|
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
|
+
|
1307
|
+
The CCDF is also known as the "survival function".
|
1308
|
+
|
1309
|
+
References
|
1310
|
+
----------
|
1311
|
+
.. [1] Cumulative distribution function, *Wikipedia*,
|
1312
|
+
https://en.wikipedia.org/wiki/Cumulative_distribution_function#Derived_functions
|
1313
|
+
|
1314
|
+
Examples
|
1315
|
+
--------
|
1316
|
+
Instantiate a distribution with the desired parameters:
|
1317
|
+
|
1318
|
+
>>> import numpy as np
|
1319
|
+
>>> from scipy import stats
|
1320
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1321
|
+
|
1322
|
+
Evaluate the CCDF at the desired argument:
|
1323
|
+
|
1324
|
+
>>> X.ccdf(0.25)
|
1325
|
+
0.25
|
1326
|
+
>>> np.allclose(X.ccdf(0.25), 1-X.cdf(0.25))
|
1327
|
+
True
|
1328
|
+
|
1329
|
+
Evaluate the complement of the cumulative probability between two arguments:
|
1330
|
+
|
1331
|
+
>>> X.ccdf(-0.25, 0.25) == X.cdf(-0.25) + X.ccdf(0.25)
|
1332
|
+
True
|
1333
|
+
|
1334
|
+
""" # noqa: E501
|
1335
|
+
raise NotImplementedError()
|
1336
|
+
|
1337
|
+
@abstractmethod
|
1338
|
+
def iccdf(self, p, /, *, method):
|
1339
|
+
r"""Inverse complementary cumulative distribution function.
|
1340
|
+
|
1341
|
+
The inverse complementary cumulative distribution function ("inverse CCDF"),
|
1342
|
+
denoted :math:`G^{-1}(p)`, is the argument :math:`x` for which the
|
1343
|
+
complementary cumulative distribution function :math:`G(x)` evaluates to
|
1344
|
+
:math:`p`.
|
1345
|
+
|
1346
|
+
.. math::
|
1347
|
+
|
1348
|
+
G^{-1}(p) = x \quad \text{s.t.} \quad G(x) = p
|
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
|
+
|
1359
|
+
`iccdf` accepts `p` for :math:`p \in [0, 1]`.
|
1360
|
+
|
1361
|
+
Parameters
|
1362
|
+
----------
|
1363
|
+
p : array_like
|
1364
|
+
The argument of the inverse CCDF.
|
1365
|
+
method : {None, 'formula', 'complement', 'inversion'}
|
1366
|
+
The strategy used to evaluate the inverse CCDF.
|
1367
|
+
By default (``None``), the infrastructure chooses between the
|
1368
|
+
following options, listed in order of precedence.
|
1369
|
+
|
1370
|
+
- ``'formula'``: use a formula for the inverse CCDF itself
|
1371
|
+
- ``'complement'``: evaluate the inverse CDF at the
|
1372
|
+
complement of `p`
|
1373
|
+
- ``'inversion'``: solve numerically for the argument at which the
|
1374
|
+
CCDF is equal to `p`
|
1375
|
+
|
1376
|
+
Not all `method` options are available for all distributions.
|
1377
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1378
|
+
will be raised.
|
1379
|
+
|
1380
|
+
Returns
|
1381
|
+
-------
|
1382
|
+
out : array
|
1383
|
+
The inverse CCDF evaluated at the provided argument.
|
1384
|
+
|
1385
|
+
Notes
|
1386
|
+
-----
|
1387
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
1388
|
+
inverse CCDF returns its minimum value of :math:`l` at :math:`p = 1`
|
1389
|
+
and its maximum value of :math:`r` at :math:`p = 0`. Because the CCDF
|
1390
|
+
has range :math:`[0, 1]`, the inverse CCDF is only defined on the
|
1391
|
+
domain :math:`[0, 1]`; for :math:`p < 0` and :math:`p > 1`, ``iccdf``
|
1392
|
+
returns ``nan``.
|
1393
|
+
|
1394
|
+
See Also
|
1395
|
+
--------
|
1396
|
+
icdf
|
1397
|
+
ilogccdf
|
1398
|
+
|
1399
|
+
Examples
|
1400
|
+
--------
|
1401
|
+
Instantiate a distribution with the desired parameters:
|
1402
|
+
|
1403
|
+
>>> import numpy as np
|
1404
|
+
>>> from scipy import stats
|
1405
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1406
|
+
|
1407
|
+
Evaluate the inverse CCDF at the desired argument:
|
1408
|
+
|
1409
|
+
>>> X.iccdf(0.25)
|
1410
|
+
0.25
|
1411
|
+
>>> np.allclose(X.iccdf(0.25), X.icdf(1-0.25))
|
1412
|
+
True
|
1413
|
+
|
1414
|
+
This function returns NaN when the argument is outside the domain.
|
1415
|
+
|
1416
|
+
>>> X.iccdf([-0.1, 0, 1, 1.1])
|
1417
|
+
array([ nan, 0.5, -0.5, nan])
|
1418
|
+
|
1419
|
+
"""
|
1420
|
+
raise NotImplementedError()
|
1421
|
+
|
1422
|
+
@abstractmethod
|
1423
|
+
def logcdf(self, x, y, /, *, method):
|
1424
|
+
r"""Log of the cumulative distribution function
|
1425
|
+
|
1426
|
+
The cumulative distribution function ("CDF"), denoted :math:`F(x)`, is
|
1427
|
+
the probability the random variable :math:`X` will assume a value
|
1428
|
+
less than or equal to :math:`x`:
|
1429
|
+
|
1430
|
+
.. math::
|
1431
|
+
|
1432
|
+
F(x) = P(X ≤ x)
|
1433
|
+
|
1434
|
+
A two-argument variant of this function is also defined as the
|
1435
|
+
probability the random variable :math:`X` will assume a value between
|
1436
|
+
:math:`x` and :math:`y`.
|
1437
|
+
|
1438
|
+
.. math::
|
1439
|
+
|
1440
|
+
F(x, y) = P(x ≤ X ≤ y)
|
1441
|
+
|
1442
|
+
`logcdf` computes the logarithm of the cumulative distribution function
|
1443
|
+
("log-CDF"), :math:`\log(F(x))`/:math:`\log(F(x, y))`, but it may be
|
1444
|
+
numerically favorable compared to the naive implementation (computing
|
1445
|
+
the CDF and taking the logarithm).
|
1446
|
+
|
1447
|
+
`logcdf` accepts `x` for :math:`x` and `y` for :math:`y`.
|
1448
|
+
|
1449
|
+
Parameters
|
1450
|
+
----------
|
1451
|
+
x, y : array_like
|
1452
|
+
The arguments of the log-CDF. `x` is required; `y` is optional.
|
1453
|
+
method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'subtraction'}
|
1454
|
+
The strategy used to evaluate the log-CDF.
|
1455
|
+
By default (``None``), the one-argument form of the function
|
1456
|
+
chooses between the following options, listed in order of precedence.
|
1457
|
+
|
1458
|
+
- ``'formula'``: use a formula for the log-CDF itself
|
1459
|
+
- ``'logexp'``: evaluate the CDF and take the logarithm
|
1460
|
+
- ``'complement'``: evaluate the log-CCDF and take the
|
1461
|
+
logarithmic complement (see Notes)
|
1462
|
+
- ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
|
1463
|
+
discrete case, log-sum the log-PMF)
|
1464
|
+
|
1465
|
+
In place of ``'complement'``, the two-argument form accepts:
|
1466
|
+
|
1467
|
+
- ``'subtraction'``: compute the log-CDF at each argument and take
|
1468
|
+
the logarithmic difference (see Notes)
|
1469
|
+
|
1470
|
+
Not all `method` options are available for all distributions.
|
1471
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1472
|
+
will be raised.
|
1473
|
+
|
1474
|
+
Returns
|
1475
|
+
-------
|
1476
|
+
out : array
|
1477
|
+
The log-CDF evaluated at the provided argument(s).
|
1478
|
+
|
1479
|
+
See Also
|
1480
|
+
--------
|
1481
|
+
cdf
|
1482
|
+
logccdf
|
1483
|
+
|
1484
|
+
Notes
|
1485
|
+
-----
|
1486
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1487
|
+
The log-CDF evaluates to its minimum value of :math:`\log(0) = -\infty`
|
1488
|
+
for :math:`x ≤ l` and its maximum value of :math:`\log(1) = 0` for
|
1489
|
+
:math:`x ≥ r`. An analogous statement can be made for discrete distributions,
|
1490
|
+
but the inequality governing the minimum value is strict.
|
1491
|
+
|
1492
|
+
For distributions with infinite support, it is common for
|
1493
|
+
`cdf` to return a value of ``0`` when the argument
|
1494
|
+
is theoretically within the support; this can occur because the true value
|
1495
|
+
of the CDF is too small to be represented by the chosen dtype. `logcdf`,
|
1496
|
+
however, will often return a finite (not ``-inf``) result over a much larger
|
1497
|
+
domain. Similarly, `logcdf` may provided a strictly negative result with
|
1498
|
+
arguments for which `cdf` would return ``1.0``. Consequently, it may be
|
1499
|
+
preferred to work with the logarithms of probabilities to avoid underflow
|
1500
|
+
and related limitations of floating point numbers.
|
1501
|
+
|
1502
|
+
The "logarithmic complement" of a number :math:`z` is mathematically
|
1503
|
+
equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
|
1504
|
+
of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
|
1505
|
+
Similarly, the term "logarithmic difference" of :math:`w` and :math:`z`
|
1506
|
+
is used here to mean :math:`\log(\exp(w)-\exp(z))`.
|
1507
|
+
|
1508
|
+
If ``y < x``, the CDF is negative, and therefore the log-CCDF
|
1509
|
+
is complex with imaginary part :math:`\pi`. For
|
1510
|
+
consistency, the result of this function always has complex dtype
|
1511
|
+
when `y` is provided, regardless of the value of the imaginary part.
|
1512
|
+
|
1513
|
+
References
|
1514
|
+
----------
|
1515
|
+
.. [1] Cumulative distribution function, *Wikipedia*,
|
1516
|
+
https://en.wikipedia.org/wiki/Cumulative_distribution_function
|
1517
|
+
|
1518
|
+
Examples
|
1519
|
+
--------
|
1520
|
+
Instantiate a distribution with the desired parameters:
|
1521
|
+
|
1522
|
+
>>> import numpy as np
|
1523
|
+
>>> from scipy import stats
|
1524
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1525
|
+
|
1526
|
+
Evaluate the log-CDF at the desired argument:
|
1527
|
+
|
1528
|
+
>>> X.logcdf(0.25)
|
1529
|
+
-0.287682072451781
|
1530
|
+
>>> np.allclose(X.logcdf(0.), np.log(X.cdf(0.)))
|
1531
|
+
True
|
1532
|
+
|
1533
|
+
""" # noqa: E501
|
1534
|
+
raise NotImplementedError()
|
1535
|
+
|
1536
|
+
@abstractmethod
|
1537
|
+
def ilogcdf(self, logp, /, *, method):
|
1538
|
+
r"""Inverse of the logarithm of the cumulative distribution function.
|
1539
|
+
|
1540
|
+
The inverse of the logarithm of the cumulative distribution function
|
1541
|
+
("inverse log-CDF") is the argument :math:`x` for which the logarithm
|
1542
|
+
of the cumulative distribution function :math:`\log(F(x))` evaluates
|
1543
|
+
to :math:`\log(p)`.
|
1544
|
+
|
1545
|
+
Mathematically, it is equivalent to :math:`F^{-1}(\exp(y))`, where
|
1546
|
+
:math:`y = \log(p)`, but it may be numerically favorable compared to
|
1547
|
+
the naive implementation (computing :math:`p = \exp(y)`, then
|
1548
|
+
:math:`F^{-1}(p)`).
|
1549
|
+
|
1550
|
+
`ilogcdf` accepts `logp` for :math:`\log(p) ≤ 0`.
|
1551
|
+
|
1552
|
+
Parameters
|
1553
|
+
----------
|
1554
|
+
logp : array_like
|
1555
|
+
The argument of the inverse log-CDF.
|
1556
|
+
method : {None, 'formula', 'complement', 'inversion'}
|
1557
|
+
The strategy used to evaluate the inverse log-CDF.
|
1558
|
+
By default (``None``), the infrastructure chooses between the
|
1559
|
+
following options, listed in order of precedence.
|
1560
|
+
|
1561
|
+
- ``'formula'``: use a formula for the inverse log-CDF itself
|
1562
|
+
- ``'complement'``: evaluate the inverse log-CCDF at the
|
1563
|
+
logarithmic complement of `logp` (see Notes)
|
1564
|
+
- ``'inversion'``: solve numerically for the argument at which the
|
1565
|
+
log-CDF is equal to `logp`
|
1566
|
+
|
1567
|
+
Not all `method` options are available for all distributions.
|
1568
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1569
|
+
will be raised.
|
1570
|
+
|
1571
|
+
Returns
|
1572
|
+
-------
|
1573
|
+
out : array
|
1574
|
+
The inverse log-CDF evaluated at the provided argument.
|
1575
|
+
|
1576
|
+
See Also
|
1577
|
+
--------
|
1578
|
+
icdf
|
1579
|
+
logcdf
|
1580
|
+
|
1581
|
+
Notes
|
1582
|
+
-----
|
1583
|
+
Suppose a probability distribution has support :math:`[l, r]`.
|
1584
|
+
The inverse log-CDF returns its minimum value of :math:`l` at
|
1585
|
+
:math:`\log(p) = \log(0) = -\infty` and its maximum value of :math:`r` at
|
1586
|
+
:math:`\log(p) = \log(1) = 0`. Because the log-CDF has range
|
1587
|
+
:math:`[-\infty, 0]`, the inverse log-CDF is only defined on the
|
1588
|
+
negative reals; for :math:`\log(p) > 0`, `ilogcdf` returns ``nan``.
|
1589
|
+
|
1590
|
+
Occasionally, it is needed to find the argument of the CDF for which
|
1591
|
+
the resulting probability is very close to ``0`` or ``1`` - too close to
|
1592
|
+
represent accurately with floating point arithmetic. In many cases,
|
1593
|
+
however, the *logarithm* of this resulting probability may be
|
1594
|
+
represented in floating point arithmetic, in which case this function
|
1595
|
+
may be used to find the argument of the CDF for which the *logarithm*
|
1596
|
+
of the resulting probability is :math:`y = \log(p)`.
|
1597
|
+
|
1598
|
+
The "logarithmic complement" of a number :math:`z` is mathematically
|
1599
|
+
equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
|
1600
|
+
of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
|
1601
|
+
|
1602
|
+
Examples
|
1603
|
+
--------
|
1604
|
+
Instantiate a distribution with the desired parameters:
|
1605
|
+
|
1606
|
+
>>> import numpy as np
|
1607
|
+
>>> from scipy import stats
|
1608
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1609
|
+
|
1610
|
+
Evaluate the inverse log-CDF at the desired argument:
|
1611
|
+
|
1612
|
+
>>> X.ilogcdf(-0.25)
|
1613
|
+
0.2788007830714034
|
1614
|
+
>>> np.allclose(X.ilogcdf(-0.25), X.icdf(np.exp(-0.25)))
|
1615
|
+
True
|
1616
|
+
|
1617
|
+
"""
|
1618
|
+
raise NotImplementedError()
|
1619
|
+
|
1620
|
+
@abstractmethod
|
1621
|
+
def logccdf(self, x, y, /, *, method):
|
1622
|
+
r"""Log of the complementary cumulative distribution function
|
1623
|
+
|
1624
|
+
The complementary cumulative distribution function ("CCDF"), denoted
|
1625
|
+
:math:`G(x)` is the complement of the cumulative distribution function
|
1626
|
+
:math:`F(x)`; i.e., probability the random variable :math:`X` will
|
1627
|
+
assume a value greater than :math:`x`:
|
1628
|
+
|
1629
|
+
.. math::
|
1630
|
+
|
1631
|
+
G(x) = 1 - F(x) = P(X > x)
|
1632
|
+
|
1633
|
+
A two-argument variant of this function is:
|
1634
|
+
|
1635
|
+
.. math::
|
1636
|
+
|
1637
|
+
G(x, y) = 1 - F(x, y) = P(X < x \quad \text{or} \quad X > y)
|
1638
|
+
|
1639
|
+
`logccdf` computes the logarithm of the complementary cumulative
|
1640
|
+
distribution function ("log-CCDF"), :math:`\log(G(x))`/:math:`\log(G(x, y))`,
|
1641
|
+
but it may be numerically favorable compared to the naive implementation
|
1642
|
+
(computing the CDF and taking the logarithm).
|
1643
|
+
|
1644
|
+
`logccdf` accepts `x` for :math:`x` and `y` for :math:`y`.
|
1645
|
+
|
1646
|
+
Parameters
|
1647
|
+
----------
|
1648
|
+
x, y : array_like
|
1649
|
+
The arguments of the log-CCDF. `x` is required; `y` is optional.
|
1650
|
+
method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'addition'}
|
1651
|
+
The strategy used to evaluate the log-CCDF.
|
1652
|
+
By default (``None``), the one-argument form of the function
|
1653
|
+
chooses between the following options, listed in order of precedence.
|
1654
|
+
|
1655
|
+
- ``'formula'``: use a formula for the log CCDF itself
|
1656
|
+
- ``'logexp'``: evaluate the CCDF and take the logarithm
|
1657
|
+
- ``'complement'``: evaluate the log-CDF and take the
|
1658
|
+
logarithmic complement (see Notes)
|
1659
|
+
- ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
|
1660
|
+
discrete case, log-sum the log-PMF)
|
1661
|
+
|
1662
|
+
The two-argument form chooses between:
|
1663
|
+
|
1664
|
+
- ``'formula'``: use a formula for the log CCDF itself
|
1665
|
+
- ``'addition'``: compute the log-CDF at `x` and the log-CCDF at `y`,
|
1666
|
+
then take the logarithmic sum (see Notes)
|
1667
|
+
|
1668
|
+
Not all `method` options are available for all distributions.
|
1669
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1670
|
+
will be raised.
|
1671
|
+
|
1672
|
+
Returns
|
1673
|
+
-------
|
1674
|
+
out : array
|
1675
|
+
The log-CCDF evaluated at the provided argument(s).
|
1676
|
+
|
1677
|
+
See Also
|
1678
|
+
--------
|
1679
|
+
ccdf
|
1680
|
+
logcdf
|
1681
|
+
|
1682
|
+
Notes
|
1683
|
+
-----
|
1684
|
+
Suppose a continuous probability distribution has support :math:`[l, r]`.
|
1685
|
+
The log-CCDF returns its minimum value of :math:`\log(0)=-\infty` for
|
1686
|
+
:math:`x ≥ r` and its maximum value of :math:`\log(1) = 0` for
|
1687
|
+
:math:`x ≤ l`. An analogous statement can be made for discrete distributions,
|
1688
|
+
but the inequality governing the maximum value is strict.
|
1689
|
+
|
1690
|
+
For distributions with infinite support, it is common for
|
1691
|
+
`ccdf` to return a value of ``0`` when the argument
|
1692
|
+
is theoretically within the support; this can occur because the true value
|
1693
|
+
of the CCDF is too small to be represented by the chosen dtype. The log
|
1694
|
+
of the CCDF, however, will often be finite (not ``-inf``) over a much larger
|
1695
|
+
domain. Similarly, `logccdf` may provided a strictly negative result with
|
1696
|
+
arguments for which `ccdf` would return ``1.0``. Consequently, it may be
|
1697
|
+
preferred to work with the logarithms of probabilities to avoid underflow
|
1698
|
+
and related limitations of floating point numbers.
|
1699
|
+
|
1700
|
+
The "logarithmic complement" of a number :math:`z` is mathematically
|
1701
|
+
equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
|
1702
|
+
of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
|
1703
|
+
Similarly, the term "logarithmic sum" of :math:`w` and :math:`z`
|
1704
|
+
is used here to mean the :math:`\log(\exp(w)+\exp(z))`, AKA
|
1705
|
+
:math:`\text{LogSumExp}(w, z)`.
|
1706
|
+
|
1707
|
+
References
|
1708
|
+
----------
|
1709
|
+
.. [1] Cumulative distribution function, *Wikipedia*,
|
1710
|
+
https://en.wikipedia.org/wiki/Cumulative_distribution_function#Derived_functions
|
1711
|
+
|
1712
|
+
Examples
|
1713
|
+
--------
|
1714
|
+
Instantiate a distribution with the desired parameters:
|
1715
|
+
|
1716
|
+
>>> import numpy as np
|
1717
|
+
>>> from scipy import stats
|
1718
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1719
|
+
|
1720
|
+
Evaluate the log-CCDF at the desired argument:
|
1721
|
+
|
1722
|
+
>>> X.logccdf(0.25)
|
1723
|
+
-1.3862943611198906
|
1724
|
+
>>> np.allclose(X.logccdf(0.), np.log(X.ccdf(0.)))
|
1725
|
+
True
|
1726
|
+
|
1727
|
+
""" # noqa: E501
|
1728
|
+
raise NotImplementedError()
|
1729
|
+
|
1730
|
+
@abstractmethod
|
1731
|
+
def ilogccdf(self, logp, /, *, method):
|
1732
|
+
r"""Inverse of the log of the complementary cumulative distribution function.
|
1733
|
+
|
1734
|
+
The inverse of the logarithm of the complementary cumulative distribution
|
1735
|
+
function ("inverse log-CCDF") is the argument :math:`x` for which the logarithm
|
1736
|
+
of the complementary cumulative distribution function :math:`\log(G(x))`
|
1737
|
+
evaluates to :math:`\log(p)`.
|
1738
|
+
|
1739
|
+
Mathematically, it is equivalent to :math:`G^{-1}(\exp(y))`, where
|
1740
|
+
:math:`y = \log(p)`, but it may be numerically favorable compared to the naive
|
1741
|
+
implementation (computing :math:`p = \exp(y)`, then :math:`G^{-1}(p)`).
|
1742
|
+
|
1743
|
+
`ilogccdf` accepts `logp` for :math:`\log(p) ≤ 0`.
|
1744
|
+
|
1745
|
+
Parameters
|
1746
|
+
----------
|
1747
|
+
x : array_like
|
1748
|
+
The argument of the inverse log-CCDF.
|
1749
|
+
method : {None, 'formula', 'complement', 'inversion'}
|
1750
|
+
The strategy used to evaluate the inverse log-CCDF.
|
1751
|
+
By default (``None``), the infrastructure chooses between the
|
1752
|
+
following options, listed in order of precedence.
|
1753
|
+
|
1754
|
+
- ``'formula'``: use a formula for the inverse log-CCDF itself
|
1755
|
+
- ``'complement'``: evaluate the inverse log-CDF at the
|
1756
|
+
logarithmic complement of `x` (see Notes)
|
1757
|
+
- ``'inversion'``: solve numerically for the argument at which the
|
1758
|
+
log-CCDF is equal to `x`
|
1759
|
+
|
1760
|
+
Not all `method` options are available for all distributions.
|
1761
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1762
|
+
will be raised.
|
1763
|
+
|
1764
|
+
Returns
|
1765
|
+
-------
|
1766
|
+
out : array
|
1767
|
+
The inverse log-CCDF evaluated at the provided argument.
|
1768
|
+
|
1769
|
+
Notes
|
1770
|
+
-----
|
1771
|
+
Suppose a probability distribution has support :math:`[l, r]`. The
|
1772
|
+
inverse log-CCDF returns its minimum value of :math:`l` at
|
1773
|
+
:math:`\log(p) = \log(1) = 0` and its maximum value of :math:`r` at
|
1774
|
+
:math:`\log(p) = \log(0) = -\infty`. Because the log-CCDF has range
|
1775
|
+
:math:`[-\infty, 0]`, the inverse log-CDF is only defined on the
|
1776
|
+
negative reals; for :math:`\log(p) > 0`, `ilogccdf` returns ``nan``.
|
1777
|
+
|
1778
|
+
Occasionally, it is needed to find the argument of the CCDF for which
|
1779
|
+
the resulting probability is very close to ``0`` or ``1`` - too close to
|
1780
|
+
represent accurately with floating point arithmetic. In many cases,
|
1781
|
+
however, the *logarithm* of this resulting probability may be
|
1782
|
+
represented in floating point arithmetic, in which case this function
|
1783
|
+
may be used to find the argument of the CCDF for which the *logarithm*
|
1784
|
+
of the resulting probability is :math:`y = \log(p)`.
|
1785
|
+
|
1786
|
+
The "logarithmic complement" of a number :math:`z` is mathematically
|
1787
|
+
equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
|
1788
|
+
of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
|
1789
|
+
|
1790
|
+
See Also
|
1791
|
+
--------
|
1792
|
+
iccdf
|
1793
|
+
ilogccdf
|
1794
|
+
|
1795
|
+
Examples
|
1796
|
+
--------
|
1797
|
+
Instantiate a distribution with the desired parameters:
|
1798
|
+
|
1799
|
+
>>> import numpy as np
|
1800
|
+
>>> from scipy import stats
|
1801
|
+
>>> X = stats.Uniform(a=-0.5, b=0.5)
|
1802
|
+
|
1803
|
+
Evaluate the inverse log-CCDF at the desired argument:
|
1804
|
+
|
1805
|
+
>>> X.ilogccdf(-0.25)
|
1806
|
+
-0.2788007830714034
|
1807
|
+
>>> np.allclose(X.ilogccdf(-0.25), X.iccdf(np.exp(-0.25)))
|
1808
|
+
True
|
1809
|
+
|
1810
|
+
"""
|
1811
|
+
raise NotImplementedError()
|
1812
|
+
|
1813
|
+
@abstractmethod
|
1814
|
+
def logentropy(self, *, method):
|
1815
|
+
r"""Logarithm of the differential entropy
|
1816
|
+
|
1817
|
+
In terms of probability density function :math:`f(x)` and support
|
1818
|
+
:math:`\chi`, the differential entropy (or simply "entropy") of a
|
1819
|
+
continuous random variable :math:`X` is:
|
1820
|
+
|
1821
|
+
.. math::
|
1822
|
+
|
1823
|
+
h(X) = - \int_{\chi} f(x) \log f(x) dx
|
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
|
+
|
1828
|
+
`logentropy` computes the logarithm of the differential entropy
|
1829
|
+
("log-entropy"), :math:`\log(h(X))`, but it may be numerically favorable
|
1830
|
+
compared to the naive implementation (computing :math:`h(X)` then
|
1831
|
+
taking the logarithm).
|
1832
|
+
|
1833
|
+
Parameters
|
1834
|
+
----------
|
1835
|
+
method : {None, 'formula', 'logexp', 'quadrature}
|
1836
|
+
The strategy used to evaluate the log-entropy. By default
|
1837
|
+
(``None``), the infrastructure chooses between the following options,
|
1838
|
+
listed in order of precedence.
|
1839
|
+
|
1840
|
+
- ``'formula'``: use a formula for the log-entropy itself
|
1841
|
+
- ``'logexp'``: evaluate the entropy and take the logarithm
|
1842
|
+
- ``'quadrature'``: numerically log-integrate (or, in the discrete
|
1843
|
+
case, log-sum) the logarithm of the entropy integrand (summand)
|
1844
|
+
|
1845
|
+
Not all `method` options are available for all distributions.
|
1846
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1847
|
+
will be raised.
|
1848
|
+
|
1849
|
+
Returns
|
1850
|
+
-------
|
1851
|
+
out : array
|
1852
|
+
The log-entropy.
|
1853
|
+
|
1854
|
+
See Also
|
1855
|
+
--------
|
1856
|
+
entropy
|
1857
|
+
logpdf
|
1858
|
+
|
1859
|
+
Notes
|
1860
|
+
-----
|
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,
|
1864
|
+
regardless of the value of the imaginary part.
|
1865
|
+
|
1866
|
+
References
|
1867
|
+
----------
|
1868
|
+
.. [1] Differential entropy, *Wikipedia*,
|
1869
|
+
https://en.wikipedia.org/wiki/Differential_entropy
|
1870
|
+
|
1871
|
+
Examples
|
1872
|
+
--------
|
1873
|
+
Instantiate a distribution with the desired parameters:
|
1874
|
+
|
1875
|
+
>>> import numpy as np
|
1876
|
+
>>> from scipy import stats
|
1877
|
+
>>> X = stats.Uniform(a=-1., b=1.)
|
1878
|
+
|
1879
|
+
Evaluate the log-entropy:
|
1880
|
+
|
1881
|
+
>>> X.logentropy()
|
1882
|
+
(-0.3665129205816642+0j)
|
1883
|
+
>>> np.allclose(np.exp(X.logentropy()), X.entropy())
|
1884
|
+
True
|
1885
|
+
|
1886
|
+
For a random variable with negative entropy, the log-entropy has an
|
1887
|
+
imaginary part equal to `np.pi`.
|
1888
|
+
|
1889
|
+
>>> X = stats.Uniform(a=-.1, b=.1)
|
1890
|
+
>>> X.entropy(), X.logentropy()
|
1891
|
+
(-1.6094379124341007, (0.4758849953271105+3.141592653589793j))
|
1892
|
+
|
1893
|
+
"""
|
1894
|
+
raise NotImplementedError()
|
1895
|
+
|
1896
|
+
@abstractmethod
|
1897
|
+
def entropy(self, *, method):
|
1898
|
+
r"""Differential entropy
|
1899
|
+
|
1900
|
+
In terms of probability density function :math:`f(x)` and support
|
1901
|
+
:math:`\chi`, the differential entropy (or simply "entropy") of a
|
1902
|
+
continuous random variable :math:`X` is:
|
1903
|
+
|
1904
|
+
.. math::
|
1905
|
+
|
1906
|
+
h(X) = - \int_{\chi} f(x) \log f(x) dx
|
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
|
+
|
1911
|
+
Parameters
|
1912
|
+
----------
|
1913
|
+
method : {None, 'formula', 'logexp', 'quadrature'}
|
1914
|
+
The strategy used to evaluate the entropy. By default (``None``),
|
1915
|
+
the infrastructure chooses between the following options, listed
|
1916
|
+
in order of precedence.
|
1917
|
+
|
1918
|
+
- ``'formula'``: use a formula for the entropy itself
|
1919
|
+
- ``'logexp'``: evaluate the log-entropy and exponentiate
|
1920
|
+
- ``'quadrature'``: numerically integrate (or, in the discrete
|
1921
|
+
case, sum) the entropy integrand (summand)
|
1922
|
+
|
1923
|
+
|
1924
|
+
Not all `method` options are available for all distributions.
|
1925
|
+
If the selected `method` is not available, a ``NotImplementedError``
|
1926
|
+
will be raised.
|
1927
|
+
|
1928
|
+
Returns
|
1929
|
+
-------
|
1930
|
+
out : array
|
1931
|
+
The entropy of the random variable.
|
1932
|
+
|
1933
|
+
See Also
|
1934
|
+
--------
|
1935
|
+
logentropy
|
1936
|
+
pdf
|
1937
|
+
|
1938
|
+
Notes
|
1939
|
+
-----
|
1940
|
+
This function calculates the entropy using the natural logarithm; i.e.
|
1941
|
+
the logarithm with base :math:`e`. Consequently, the value is expressed
|
1942
|
+
in (dimensionless) "units" of nats. To convert the entropy to different
|
1943
|
+
units (i.e. corresponding with a different base), divide the result by
|
1944
|
+
the natural logarithm of the desired base.
|
1945
|
+
|
1946
|
+
References
|
1947
|
+
----------
|
1948
|
+
.. [1] Differential entropy, *Wikipedia*,
|
1949
|
+
https://en.wikipedia.org/wiki/Differential_entropy
|
1950
|
+
|
1951
|
+
Examples
|
1952
|
+
--------
|
1953
|
+
Instantiate a distribution with the desired parameters:
|
1954
|
+
|
1955
|
+
>>> from scipy import stats
|
1956
|
+
>>> X = stats.Uniform(a=-1., b=1.)
|
1957
|
+
|
1958
|
+
Evaluate the entropy:
|
1959
|
+
|
1960
|
+
>>> X.entropy()
|
1961
|
+
0.6931471805599454
|
1962
|
+
|
1963
|
+
"""
|
1964
|
+
raise NotImplementedError()
|