scipy 1.16.2__cp314-cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_cyutility.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp314-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp314-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp314-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp314-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp314-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp314-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp314-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp314-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp314-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp314-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp314-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp314-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp314-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp314-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp314-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp314-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp314-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp314-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp314-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp314-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp314-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp314-win_arm64.lib +0 -0
- scipy/signal/_spline.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp314-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp314-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp314-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp314-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp314-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp314-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/special/_comb.cp314-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp314-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp314-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/special/_specfun.cp314-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp314-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp314-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp314-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/special/cython_special.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp314-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp314-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp314-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp314-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp314-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp314-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp314-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp314-win_arm64.lib +0 -0
- scipy/stats/_stats.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp314-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.cp314-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp314-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,1231 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
import warnings
|
4
|
+
from functools import partial
|
5
|
+
|
6
|
+
import numpy as np
|
7
|
+
|
8
|
+
from scipy import optimize
|
9
|
+
from scipy import integrate
|
10
|
+
from scipy.integrate._quadrature import _builtincoeffs
|
11
|
+
from scipy import interpolate
|
12
|
+
from scipy.interpolate import RectBivariateSpline
|
13
|
+
import scipy._lib.array_api_extra as xpx
|
14
|
+
import scipy.special as sc
|
15
|
+
from .._distn_infrastructure import rv_continuous, _ShapeInfo, rv_continuous_frozen
|
16
|
+
from .._continuous_distns import uniform, expon, _norm_pdf, _norm_cdf
|
17
|
+
from .levyst import Nolan
|
18
|
+
from scipy._lib.doccer import inherit_docstring_from
|
19
|
+
|
20
|
+
|
21
|
+
__all__ = ["levy_stable", "levy_stable_gen", "pdf_from_cf_with_fft"]
|
22
|
+
|
23
|
+
# Stable distributions are known for various parameterisations
|
24
|
+
# some being advantageous for numerical considerations and others
|
25
|
+
# useful due to their location/scale awareness.
|
26
|
+
#
|
27
|
+
# Here we follow [NO] convention (see the references in the docstring
|
28
|
+
# for levy_stable_gen below).
|
29
|
+
#
|
30
|
+
# S0 / Z0 / x0 (aka Zoleterav's M)
|
31
|
+
# S1 / Z1 / x1
|
32
|
+
#
|
33
|
+
# Where S* denotes parameterisation, Z* denotes standardized
|
34
|
+
# version where gamma = 1, delta = 0 and x* denotes variable.
|
35
|
+
#
|
36
|
+
# Scipy's original Stable was a random variate generator. It
|
37
|
+
# uses S1 and unfortunately is not a location/scale aware.
|
38
|
+
|
39
|
+
|
40
|
+
# default numerical integration tolerance
|
41
|
+
# used for epsrel in piecewise and both epsrel and epsabs in dni
|
42
|
+
# (epsabs needed in dni since weighted quad requires epsabs > 0)
|
43
|
+
_QUAD_EPS = 1.2e-14
|
44
|
+
|
45
|
+
|
46
|
+
def _Phi_Z0(alpha, t):
|
47
|
+
return (
|
48
|
+
-np.tan(np.pi * alpha / 2) * (np.abs(t) ** (1 - alpha) - 1)
|
49
|
+
if alpha != 1
|
50
|
+
else -2.0 * np.log(np.abs(t)) / np.pi
|
51
|
+
)
|
52
|
+
|
53
|
+
|
54
|
+
def _Phi_Z1(alpha, t):
|
55
|
+
return (
|
56
|
+
np.tan(np.pi * alpha / 2)
|
57
|
+
if alpha != 1
|
58
|
+
else -2.0 * np.log(np.abs(t)) / np.pi
|
59
|
+
)
|
60
|
+
|
61
|
+
|
62
|
+
def _cf(Phi, t, alpha, beta):
|
63
|
+
"""Characteristic function."""
|
64
|
+
return np.exp(
|
65
|
+
-(np.abs(t) ** alpha) * (1 - 1j * beta * np.sign(t) * Phi(alpha, t))
|
66
|
+
)
|
67
|
+
|
68
|
+
|
69
|
+
_cf_Z0 = partial(_cf, _Phi_Z0)
|
70
|
+
_cf_Z1 = partial(_cf, _Phi_Z1)
|
71
|
+
|
72
|
+
|
73
|
+
def _pdf_single_value_cf_integrate(Phi, x, alpha, beta, **kwds):
|
74
|
+
"""To improve DNI accuracy convert characteristic function in to real
|
75
|
+
valued integral using Euler's formula, then exploit cosine symmetry to
|
76
|
+
change limits to [0, inf). Finally use cosine addition formula to split
|
77
|
+
into two parts that can be handled by weighted quad pack.
|
78
|
+
"""
|
79
|
+
quad_eps = kwds.get("quad_eps", _QUAD_EPS)
|
80
|
+
|
81
|
+
def integrand1(t):
|
82
|
+
if t == 0:
|
83
|
+
return 0
|
84
|
+
return np.exp(-(t ** alpha)) * (
|
85
|
+
np.cos(beta * (t ** alpha) * Phi(alpha, t))
|
86
|
+
)
|
87
|
+
|
88
|
+
def integrand2(t):
|
89
|
+
if t == 0:
|
90
|
+
return 0
|
91
|
+
return np.exp(-(t ** alpha)) * (
|
92
|
+
np.sin(beta * (t ** alpha) * Phi(alpha, t))
|
93
|
+
)
|
94
|
+
|
95
|
+
with np.errstate(invalid="ignore"):
|
96
|
+
int1, *ret1 = integrate.quad(
|
97
|
+
integrand1,
|
98
|
+
0,
|
99
|
+
np.inf,
|
100
|
+
weight="cos",
|
101
|
+
wvar=x,
|
102
|
+
limit=1000,
|
103
|
+
epsabs=quad_eps,
|
104
|
+
epsrel=quad_eps,
|
105
|
+
full_output=1,
|
106
|
+
)
|
107
|
+
|
108
|
+
int2, *ret2 = integrate.quad(
|
109
|
+
integrand2,
|
110
|
+
0,
|
111
|
+
np.inf,
|
112
|
+
weight="sin",
|
113
|
+
wvar=x,
|
114
|
+
limit=1000,
|
115
|
+
epsabs=quad_eps,
|
116
|
+
epsrel=quad_eps,
|
117
|
+
full_output=1,
|
118
|
+
)
|
119
|
+
|
120
|
+
return (int1 + int2) / np.pi
|
121
|
+
|
122
|
+
|
123
|
+
_pdf_single_value_cf_integrate_Z0 = partial(
|
124
|
+
_pdf_single_value_cf_integrate, _Phi_Z0
|
125
|
+
)
|
126
|
+
_pdf_single_value_cf_integrate_Z1 = partial(
|
127
|
+
_pdf_single_value_cf_integrate, _Phi_Z1
|
128
|
+
)
|
129
|
+
|
130
|
+
|
131
|
+
def _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta):
|
132
|
+
"""Round x close to zeta for Nolan's method in [NO]."""
|
133
|
+
# "8. When |x0-beta*tan(pi*alpha/2)| is small, the
|
134
|
+
# computations of the density and cumulative have numerical problems.
|
135
|
+
# The program works around this by setting
|
136
|
+
# z = beta*tan(pi*alpha/2) when
|
137
|
+
# |z-beta*tan(pi*alpha/2)| < tol(5)*alpha**(1/alpha).
|
138
|
+
# (The bound on the right is ad hoc, to get reasonable behavior
|
139
|
+
# when alpha is small)."
|
140
|
+
# where tol(5) = 0.5e-2 by default.
|
141
|
+
#
|
142
|
+
# We seem to have partially addressed this through re-expression of
|
143
|
+
# g(theta) here, but it still needs to be used in some extreme cases.
|
144
|
+
# Perhaps tol(5) = 0.5e-2 could be reduced for our implementation.
|
145
|
+
if np.abs(x0 - zeta) < x_tol_near_zeta * alpha ** (1 / alpha):
|
146
|
+
x0 = zeta
|
147
|
+
return x0
|
148
|
+
|
149
|
+
|
150
|
+
def _nolan_round_difficult_input(
|
151
|
+
x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
|
152
|
+
):
|
153
|
+
"""Round difficult input values for Nolan's method in [NO]."""
|
154
|
+
|
155
|
+
# following Nolan's STABLE,
|
156
|
+
# "1. When 0 < |alpha-1| < 0.005, the program has numerical problems
|
157
|
+
# evaluating the pdf and cdf. The current version of the program sets
|
158
|
+
# alpha=1 in these cases. This approximation is not bad in the S0
|
159
|
+
# parameterization."
|
160
|
+
if np.abs(alpha - 1) < alpha_tol_near_one:
|
161
|
+
alpha = 1.0
|
162
|
+
|
163
|
+
# "2. When alpha=1 and |beta| < 0.005, the program has numerical
|
164
|
+
# problems. The current version sets beta=0."
|
165
|
+
# We seem to have addressed this through re-expression of g(theta) here
|
166
|
+
|
167
|
+
x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
|
168
|
+
return x0, alpha, beta
|
169
|
+
|
170
|
+
|
171
|
+
def _pdf_single_value_piecewise_Z1(x, alpha, beta, **kwds):
|
172
|
+
# convert from Nolan's S_1 (aka S) to S_0 (aka Zolaterev M)
|
173
|
+
# parameterization
|
174
|
+
|
175
|
+
zeta = -beta * np.tan(np.pi * alpha / 2.0)
|
176
|
+
x0 = x + zeta if alpha != 1 else x
|
177
|
+
|
178
|
+
return _pdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds)
|
179
|
+
|
180
|
+
|
181
|
+
def _pdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds):
|
182
|
+
|
183
|
+
quad_eps = kwds.get("quad_eps", _QUAD_EPS)
|
184
|
+
x_tol_near_zeta = kwds.get("piecewise_x_tol_near_zeta", 0.005)
|
185
|
+
alpha_tol_near_one = kwds.get("piecewise_alpha_tol_near_one", 0.005)
|
186
|
+
|
187
|
+
zeta = -beta * np.tan(np.pi * alpha / 2.0)
|
188
|
+
x0, alpha, beta = _nolan_round_difficult_input(
|
189
|
+
x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
|
190
|
+
)
|
191
|
+
|
192
|
+
# some other known distribution pdfs / analytical cases
|
193
|
+
# TODO: add more where possible with test coverage,
|
194
|
+
# eg https://en.wikipedia.org/wiki/Stable_distribution#Other_analytic_cases
|
195
|
+
if alpha == 2.0:
|
196
|
+
# normal
|
197
|
+
return _norm_pdf(x0 / np.sqrt(2)) / np.sqrt(2)
|
198
|
+
elif alpha == 0.5 and beta == 1.0:
|
199
|
+
# levy
|
200
|
+
# since S(1/2, 1, gamma, delta; <x>) ==
|
201
|
+
# S(1/2, 1, gamma, gamma + delta; <x0>).
|
202
|
+
_x = x0 + 1
|
203
|
+
if _x <= 0:
|
204
|
+
return 0
|
205
|
+
|
206
|
+
return 1 / np.sqrt(2 * np.pi * _x) / _x * np.exp(-1 / (2 * _x))
|
207
|
+
elif alpha == 0.5 and beta == 0.0 and x0 != 0:
|
208
|
+
# analytical solution [HO]
|
209
|
+
S, C = sc.fresnel([1 / np.sqrt(2 * np.pi * np.abs(x0))])
|
210
|
+
arg = 1 / (4 * np.abs(x0))
|
211
|
+
return (
|
212
|
+
np.sin(arg) * (0.5 - S[0]) + np.cos(arg) * (0.5 - C[0])
|
213
|
+
) / np.sqrt(2 * np.pi * np.abs(x0) ** 3)
|
214
|
+
elif alpha == 1.0 and beta == 0.0:
|
215
|
+
# cauchy
|
216
|
+
return 1 / (1 + x0 ** 2) / np.pi
|
217
|
+
|
218
|
+
return _pdf_single_value_piecewise_post_rounding_Z0(
|
219
|
+
x0, alpha, beta, quad_eps, x_tol_near_zeta
|
220
|
+
)
|
221
|
+
|
222
|
+
|
223
|
+
def _pdf_single_value_piecewise_post_rounding_Z0(x0, alpha, beta, quad_eps,
|
224
|
+
x_tol_near_zeta):
|
225
|
+
"""Calculate pdf using Nolan's methods as detailed in [NO]."""
|
226
|
+
|
227
|
+
_nolan = Nolan(alpha, beta, x0)
|
228
|
+
zeta = _nolan.zeta
|
229
|
+
xi = _nolan.xi
|
230
|
+
c2 = _nolan.c2
|
231
|
+
g = _nolan.g
|
232
|
+
|
233
|
+
# round x0 to zeta again if needed. zeta was recomputed and may have
|
234
|
+
# changed due to floating point differences.
|
235
|
+
# See https://github.com/scipy/scipy/pull/18133
|
236
|
+
x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
|
237
|
+
# handle Nolan's initial case logic
|
238
|
+
if x0 == zeta:
|
239
|
+
return (
|
240
|
+
sc.gamma(1 + 1 / alpha)
|
241
|
+
* np.cos(xi)
|
242
|
+
/ np.pi
|
243
|
+
/ ((1 + zeta ** 2) ** (1 / alpha / 2))
|
244
|
+
)
|
245
|
+
elif x0 < zeta:
|
246
|
+
return _pdf_single_value_piecewise_post_rounding_Z0(
|
247
|
+
-x0, alpha, -beta, quad_eps, x_tol_near_zeta
|
248
|
+
)
|
249
|
+
|
250
|
+
# following Nolan, we may now assume
|
251
|
+
# x0 > zeta when alpha != 1
|
252
|
+
# beta != 0 when alpha == 1
|
253
|
+
|
254
|
+
# spare calculating integral on null set
|
255
|
+
# use isclose as macos has fp differences
|
256
|
+
if np.isclose(-xi, np.pi / 2, rtol=1e-014, atol=1e-014):
|
257
|
+
return 0.0
|
258
|
+
|
259
|
+
def integrand(theta):
|
260
|
+
# limit any numerical issues leading to g_1 < 0 near theta limits
|
261
|
+
g_1 = g(theta)
|
262
|
+
if not np.isfinite(g_1) or g_1 < 0:
|
263
|
+
g_1 = 0
|
264
|
+
return g_1 * np.exp(-g_1)
|
265
|
+
|
266
|
+
with np.errstate(all="ignore"):
|
267
|
+
peak = optimize.bisect(
|
268
|
+
lambda t: g(t) - 1, -xi, np.pi / 2, xtol=quad_eps
|
269
|
+
)
|
270
|
+
|
271
|
+
# this integrand can be very peaked, so we need to force
|
272
|
+
# QUADPACK to evaluate the function inside its support
|
273
|
+
#
|
274
|
+
|
275
|
+
# lastly, we add additional samples at
|
276
|
+
# ~exp(-100), ~exp(-10), ~exp(-5), ~exp(-1)
|
277
|
+
# to improve QUADPACK's detection of rapidly descending tail behavior
|
278
|
+
# (this choice is fairly ad hoc)
|
279
|
+
tail_points = [
|
280
|
+
optimize.bisect(lambda t: g(t) - exp_height, -xi, np.pi / 2)
|
281
|
+
for exp_height in [100, 10, 5]
|
282
|
+
# exp_height = 1 is handled by peak
|
283
|
+
]
|
284
|
+
intg_points = [0, peak] + tail_points
|
285
|
+
intg, *ret = integrate.quad(
|
286
|
+
integrand,
|
287
|
+
-xi,
|
288
|
+
np.pi / 2,
|
289
|
+
points=intg_points,
|
290
|
+
limit=100,
|
291
|
+
epsrel=quad_eps,
|
292
|
+
epsabs=0,
|
293
|
+
full_output=1,
|
294
|
+
)
|
295
|
+
|
296
|
+
return c2 * intg
|
297
|
+
|
298
|
+
|
299
|
+
def _cdf_single_value_piecewise_Z1(x, alpha, beta, **kwds):
|
300
|
+
# convert from Nolan's S_1 (aka S) to S_0 (aka Zolaterev M)
|
301
|
+
# parameterization
|
302
|
+
|
303
|
+
zeta = -beta * np.tan(np.pi * alpha / 2.0)
|
304
|
+
x0 = x + zeta if alpha != 1 else x
|
305
|
+
|
306
|
+
return _cdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds)
|
307
|
+
|
308
|
+
|
309
|
+
def _cdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds):
|
310
|
+
|
311
|
+
quad_eps = kwds.get("quad_eps", _QUAD_EPS)
|
312
|
+
x_tol_near_zeta = kwds.get("piecewise_x_tol_near_zeta", 0.005)
|
313
|
+
alpha_tol_near_one = kwds.get("piecewise_alpha_tol_near_one", 0.005)
|
314
|
+
|
315
|
+
zeta = -beta * np.tan(np.pi * alpha / 2.0)
|
316
|
+
x0, alpha, beta = _nolan_round_difficult_input(
|
317
|
+
x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
|
318
|
+
)
|
319
|
+
|
320
|
+
# some other known distribution cdfs / analytical cases
|
321
|
+
# TODO: add more where possible with test coverage,
|
322
|
+
# eg https://en.wikipedia.org/wiki/Stable_distribution#Other_analytic_cases
|
323
|
+
if alpha == 2.0:
|
324
|
+
# normal
|
325
|
+
return _norm_cdf(x0 / np.sqrt(2))
|
326
|
+
elif alpha == 0.5 and beta == 1.0:
|
327
|
+
# levy
|
328
|
+
# since S(1/2, 1, gamma, delta; <x>) ==
|
329
|
+
# S(1/2, 1, gamma, gamma + delta; <x0>).
|
330
|
+
_x = x0 + 1
|
331
|
+
if _x <= 0:
|
332
|
+
return 0
|
333
|
+
|
334
|
+
return sc.erfc(np.sqrt(0.5 / _x))
|
335
|
+
elif alpha == 1.0 and beta == 0.0:
|
336
|
+
# cauchy
|
337
|
+
return 0.5 + np.arctan(x0) / np.pi
|
338
|
+
|
339
|
+
return _cdf_single_value_piecewise_post_rounding_Z0(
|
340
|
+
x0, alpha, beta, quad_eps, x_tol_near_zeta
|
341
|
+
)
|
342
|
+
|
343
|
+
|
344
|
+
def _cdf_single_value_piecewise_post_rounding_Z0(x0, alpha, beta, quad_eps,
|
345
|
+
x_tol_near_zeta):
|
346
|
+
"""Calculate cdf using Nolan's methods as detailed in [NO]."""
|
347
|
+
_nolan = Nolan(alpha, beta, x0)
|
348
|
+
zeta = _nolan.zeta
|
349
|
+
xi = _nolan.xi
|
350
|
+
c1 = _nolan.c1
|
351
|
+
# c2 = _nolan.c2
|
352
|
+
c3 = _nolan.c3
|
353
|
+
g = _nolan.g
|
354
|
+
# round x0 to zeta again if needed. zeta was recomputed and may have
|
355
|
+
# changed due to floating point differences.
|
356
|
+
# See https://github.com/scipy/scipy/pull/18133
|
357
|
+
x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
|
358
|
+
# handle Nolan's initial case logic
|
359
|
+
if (alpha == 1 and beta < 0) or x0 < zeta:
|
360
|
+
# NOTE: Nolan's paper has a typo here!
|
361
|
+
# He states F(x) = 1 - F(x, alpha, -beta), but this is clearly
|
362
|
+
# incorrect since F(-infty) would be 1.0 in this case
|
363
|
+
# Indeed, the alpha != 1, x0 < zeta case is correct here.
|
364
|
+
return 1 - _cdf_single_value_piecewise_post_rounding_Z0(
|
365
|
+
-x0, alpha, -beta, quad_eps, x_tol_near_zeta
|
366
|
+
)
|
367
|
+
elif x0 == zeta:
|
368
|
+
return 0.5 - xi / np.pi
|
369
|
+
|
370
|
+
# following Nolan, we may now assume
|
371
|
+
# x0 > zeta when alpha != 1
|
372
|
+
# beta > 0 when alpha == 1
|
373
|
+
|
374
|
+
# spare calculating integral on null set
|
375
|
+
# use isclose as macos has fp differences
|
376
|
+
if np.isclose(-xi, np.pi / 2, rtol=1e-014, atol=1e-014):
|
377
|
+
return c1
|
378
|
+
|
379
|
+
def integrand(theta):
|
380
|
+
g_1 = g(theta)
|
381
|
+
return np.exp(-g_1)
|
382
|
+
|
383
|
+
with np.errstate(all="ignore"):
|
384
|
+
# shrink supports where required
|
385
|
+
left_support = -xi
|
386
|
+
right_support = np.pi / 2
|
387
|
+
if alpha > 1:
|
388
|
+
# integrand(t) monotonic 0 to 1
|
389
|
+
if integrand(-xi) != 0.0:
|
390
|
+
res = optimize.minimize(
|
391
|
+
integrand,
|
392
|
+
(-xi,),
|
393
|
+
method="L-BFGS-B",
|
394
|
+
bounds=[(-xi, np.pi / 2)],
|
395
|
+
)
|
396
|
+
left_support = res.x[0]
|
397
|
+
else:
|
398
|
+
# integrand(t) monotonic 1 to 0
|
399
|
+
if integrand(np.pi / 2) != 0.0:
|
400
|
+
res = optimize.minimize(
|
401
|
+
integrand,
|
402
|
+
(np.pi / 2,),
|
403
|
+
method="L-BFGS-B",
|
404
|
+
bounds=[(-xi, np.pi / 2)],
|
405
|
+
)
|
406
|
+
right_support = res.x[0]
|
407
|
+
|
408
|
+
intg, *ret = integrate.quad(
|
409
|
+
integrand,
|
410
|
+
left_support,
|
411
|
+
right_support,
|
412
|
+
points=[left_support, right_support],
|
413
|
+
limit=100,
|
414
|
+
epsrel=quad_eps,
|
415
|
+
epsabs=0,
|
416
|
+
full_output=1,
|
417
|
+
)
|
418
|
+
|
419
|
+
return c1 + c3 * intg
|
420
|
+
|
421
|
+
|
422
|
+
def _rvs_Z1(alpha, beta, size=None, random_state=None):
|
423
|
+
"""Simulate random variables using Nolan's methods as detailed in [NO].
|
424
|
+
"""
|
425
|
+
|
426
|
+
def alpha1func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
|
427
|
+
return (
|
428
|
+
2
|
429
|
+
/ np.pi
|
430
|
+
* (
|
431
|
+
(np.pi / 2 + bTH) * tanTH
|
432
|
+
- beta * np.log((np.pi / 2 * W * cosTH) / (np.pi / 2 + bTH))
|
433
|
+
)
|
434
|
+
)
|
435
|
+
|
436
|
+
def beta0func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
|
437
|
+
return (
|
438
|
+
W
|
439
|
+
/ (cosTH / np.tan(aTH) + np.sin(TH))
|
440
|
+
* ((np.cos(aTH) + np.sin(aTH) * tanTH) / W) ** (1.0 / alpha)
|
441
|
+
)
|
442
|
+
|
443
|
+
def otherwise(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
|
444
|
+
# alpha is not 1 and beta is not 0
|
445
|
+
val0 = beta * np.tan(np.pi * alpha / 2)
|
446
|
+
th0 = np.arctan(val0) / alpha
|
447
|
+
val3 = W / (cosTH / np.tan(alpha * (th0 + TH)) + np.sin(TH))
|
448
|
+
res3 = val3 * (
|
449
|
+
(
|
450
|
+
np.cos(aTH)
|
451
|
+
+ np.sin(aTH) * tanTH
|
452
|
+
- val0 * (np.sin(aTH) - np.cos(aTH) * tanTH)
|
453
|
+
)
|
454
|
+
/ W
|
455
|
+
) ** (1.0 / alpha)
|
456
|
+
return res3
|
457
|
+
|
458
|
+
def alphanot1func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
|
459
|
+
return xpx.apply_where(
|
460
|
+
beta == 0, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
|
461
|
+
beta0func, otherwise)
|
462
|
+
|
463
|
+
alpha = np.broadcast_to(alpha, size)
|
464
|
+
beta = np.broadcast_to(beta, size)
|
465
|
+
TH = uniform.rvs(
|
466
|
+
loc=-np.pi / 2.0, scale=np.pi, size=size, random_state=random_state
|
467
|
+
)
|
468
|
+
W = expon.rvs(size=size, random_state=random_state)
|
469
|
+
aTH = alpha * TH
|
470
|
+
bTH = beta * TH
|
471
|
+
cosTH = np.cos(TH)
|
472
|
+
tanTH = np.tan(TH)
|
473
|
+
return xpx.apply_where(
|
474
|
+
alpha == 1, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
|
475
|
+
alpha1func, alphanot1func)
|
476
|
+
|
477
|
+
|
478
|
+
def _fitstart_S0(data):
|
479
|
+
alpha, beta, delta1, gamma = _fitstart_S1(data)
|
480
|
+
|
481
|
+
# Formulas for mapping parameters in S1 parameterization to
|
482
|
+
# those in S0 parameterization can be found in [NO]. Note that
|
483
|
+
# only delta changes.
|
484
|
+
if alpha != 1:
|
485
|
+
delta0 = delta1 + beta * gamma * np.tan(np.pi * alpha / 2.0)
|
486
|
+
else:
|
487
|
+
delta0 = delta1 + 2 * beta * gamma * np.log(gamma) / np.pi
|
488
|
+
|
489
|
+
return alpha, beta, delta0, gamma
|
490
|
+
|
491
|
+
|
492
|
+
def _fitstart_S1(data):
|
493
|
+
# We follow McCullock 1986 method - Simple Consistent Estimators
|
494
|
+
# of Stable Distribution Parameters
|
495
|
+
|
496
|
+
# fmt: off
|
497
|
+
# Table III and IV
|
498
|
+
nu_alpha_range = [2.439, 2.5, 2.6, 2.7, 2.8, 3, 3.2, 3.5, 4,
|
499
|
+
5, 6, 8, 10, 15, 25]
|
500
|
+
nu_beta_range = [0, 0.1, 0.2, 0.3, 0.5, 0.7, 1]
|
501
|
+
|
502
|
+
# table III - alpha = psi_1(nu_alpha, nu_beta)
|
503
|
+
alpha_table = np.array([
|
504
|
+
[2.000, 2.000, 2.000, 2.000, 2.000, 2.000, 2.000],
|
505
|
+
[1.916, 1.924, 1.924, 1.924, 1.924, 1.924, 1.924],
|
506
|
+
[1.808, 1.813, 1.829, 1.829, 1.829, 1.829, 1.829],
|
507
|
+
[1.729, 1.730, 1.737, 1.745, 1.745, 1.745, 1.745],
|
508
|
+
[1.664, 1.663, 1.663, 1.668, 1.676, 1.676, 1.676],
|
509
|
+
[1.563, 1.560, 1.553, 1.548, 1.547, 1.547, 1.547],
|
510
|
+
[1.484, 1.480, 1.471, 1.460, 1.448, 1.438, 1.438],
|
511
|
+
[1.391, 1.386, 1.378, 1.364, 1.337, 1.318, 1.318],
|
512
|
+
[1.279, 1.273, 1.266, 1.250, 1.210, 1.184, 1.150],
|
513
|
+
[1.128, 1.121, 1.114, 1.101, 1.067, 1.027, 0.973],
|
514
|
+
[1.029, 1.021, 1.014, 1.004, 0.974, 0.935, 0.874],
|
515
|
+
[0.896, 0.892, 0.884, 0.883, 0.855, 0.823, 0.769],
|
516
|
+
[0.818, 0.812, 0.806, 0.801, 0.780, 0.756, 0.691],
|
517
|
+
[0.698, 0.695, 0.692, 0.689, 0.676, 0.656, 0.597],
|
518
|
+
[0.593, 0.590, 0.588, 0.586, 0.579, 0.563, 0.513]]).T
|
519
|
+
# transpose because interpolation with `RectBivariateSpline` is with
|
520
|
+
# `nu_beta` as `x` and `nu_alpha` as `y`
|
521
|
+
|
522
|
+
# table IV - beta = psi_2(nu_alpha, nu_beta)
|
523
|
+
beta_table = np.array([
|
524
|
+
[0, 2.160, 1.000, 1.000, 1.000, 1.000, 1.000],
|
525
|
+
[0, 1.592, 3.390, 1.000, 1.000, 1.000, 1.000],
|
526
|
+
[0, 0.759, 1.800, 1.000, 1.000, 1.000, 1.000],
|
527
|
+
[0, 0.482, 1.048, 1.694, 1.000, 1.000, 1.000],
|
528
|
+
[0, 0.360, 0.760, 1.232, 2.229, 1.000, 1.000],
|
529
|
+
[0, 0.253, 0.518, 0.823, 1.575, 1.000, 1.000],
|
530
|
+
[0, 0.203, 0.410, 0.632, 1.244, 1.906, 1.000],
|
531
|
+
[0, 0.165, 0.332, 0.499, 0.943, 1.560, 1.000],
|
532
|
+
[0, 0.136, 0.271, 0.404, 0.689, 1.230, 2.195],
|
533
|
+
[0, 0.109, 0.216, 0.323, 0.539, 0.827, 1.917],
|
534
|
+
[0, 0.096, 0.190, 0.284, 0.472, 0.693, 1.759],
|
535
|
+
[0, 0.082, 0.163, 0.243, 0.412, 0.601, 1.596],
|
536
|
+
[0, 0.074, 0.147, 0.220, 0.377, 0.546, 1.482],
|
537
|
+
[0, 0.064, 0.128, 0.191, 0.330, 0.478, 1.362],
|
538
|
+
[0, 0.056, 0.112, 0.167, 0.285, 0.428, 1.274]]).T
|
539
|
+
|
540
|
+
# Table V and VII
|
541
|
+
# These are ordered with decreasing `alpha_range`; so we will need to
|
542
|
+
# reverse them as required by RectBivariateSpline.
|
543
|
+
alpha_range = [2, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1,
|
544
|
+
1, 0.9, 0.8, 0.7, 0.6, 0.5][::-1]
|
545
|
+
beta_range = [0, 0.25, 0.5, 0.75, 1]
|
546
|
+
|
547
|
+
# Table V - nu_c = psi_3(alpha, beta)
|
548
|
+
nu_c_table = np.array([
|
549
|
+
[1.908, 1.908, 1.908, 1.908, 1.908],
|
550
|
+
[1.914, 1.915, 1.916, 1.918, 1.921],
|
551
|
+
[1.921, 1.922, 1.927, 1.936, 1.947],
|
552
|
+
[1.927, 1.930, 1.943, 1.961, 1.987],
|
553
|
+
[1.933, 1.940, 1.962, 1.997, 2.043],
|
554
|
+
[1.939, 1.952, 1.988, 2.045, 2.116],
|
555
|
+
[1.946, 1.967, 2.022, 2.106, 2.211],
|
556
|
+
[1.955, 1.984, 2.067, 2.188, 2.333],
|
557
|
+
[1.965, 2.007, 2.125, 2.294, 2.491],
|
558
|
+
[1.980, 2.040, 2.205, 2.435, 2.696],
|
559
|
+
[2.000, 2.085, 2.311, 2.624, 2.973],
|
560
|
+
[2.040, 2.149, 2.461, 2.886, 3.356],
|
561
|
+
[2.098, 2.244, 2.676, 3.265, 3.912],
|
562
|
+
[2.189, 2.392, 3.004, 3.844, 4.775],
|
563
|
+
[2.337, 2.634, 3.542, 4.808, 6.247],
|
564
|
+
[2.588, 3.073, 4.534, 6.636, 9.144]])[::-1].T
|
565
|
+
# transpose because interpolation with `RectBivariateSpline` is with
|
566
|
+
# `beta` as `x` and `alpha` as `y`
|
567
|
+
|
568
|
+
# Table VII - nu_zeta = psi_5(alpha, beta)
|
569
|
+
nu_zeta_table = np.array([
|
570
|
+
[0, 0.000, 0.000, 0.000, 0.000],
|
571
|
+
[0, -0.017, -0.032, -0.049, -0.064],
|
572
|
+
[0, -0.030, -0.061, -0.092, -0.123],
|
573
|
+
[0, -0.043, -0.088, -0.132, -0.179],
|
574
|
+
[0, -0.056, -0.111, -0.170, -0.232],
|
575
|
+
[0, -0.066, -0.134, -0.206, -0.283],
|
576
|
+
[0, -0.075, -0.154, -0.241, -0.335],
|
577
|
+
[0, -0.084, -0.173, -0.276, -0.390],
|
578
|
+
[0, -0.090, -0.192, -0.310, -0.447],
|
579
|
+
[0, -0.095, -0.208, -0.346, -0.508],
|
580
|
+
[0, -0.098, -0.223, -0.380, -0.576],
|
581
|
+
[0, -0.099, -0.237, -0.424, -0.652],
|
582
|
+
[0, -0.096, -0.250, -0.469, -0.742],
|
583
|
+
[0, -0.089, -0.262, -0.520, -0.853],
|
584
|
+
[0, -0.078, -0.272, -0.581, -0.997],
|
585
|
+
[0, -0.061, -0.279, -0.659, -1.198]])[::-1].T
|
586
|
+
# fmt: on
|
587
|
+
|
588
|
+
psi_1 = RectBivariateSpline(nu_beta_range, nu_alpha_range,
|
589
|
+
alpha_table, kx=1, ky=1, s=0)
|
590
|
+
|
591
|
+
def psi_1_1(nu_beta, nu_alpha):
|
592
|
+
return psi_1(nu_beta, nu_alpha) \
|
593
|
+
if nu_beta > 0 else psi_1(-nu_beta, nu_alpha)
|
594
|
+
|
595
|
+
psi_2 = RectBivariateSpline(nu_beta_range, nu_alpha_range,
|
596
|
+
beta_table, kx=1, ky=1, s=0)
|
597
|
+
|
598
|
+
def psi_2_1(nu_beta, nu_alpha):
|
599
|
+
return psi_2(nu_beta, nu_alpha) \
|
600
|
+
if nu_beta > 0 else -psi_2(-nu_beta, nu_alpha)
|
601
|
+
|
602
|
+
phi_3 = RectBivariateSpline(beta_range, alpha_range, nu_c_table,
|
603
|
+
kx=1, ky=1, s=0)
|
604
|
+
|
605
|
+
def phi_3_1(beta, alpha):
|
606
|
+
return phi_3(beta, alpha) if beta > 0 else phi_3(-beta, alpha)
|
607
|
+
|
608
|
+
phi_5 = RectBivariateSpline(beta_range, alpha_range, nu_zeta_table,
|
609
|
+
kx=1, ky=1, s=0)
|
610
|
+
|
611
|
+
def phi_5_1(beta, alpha):
|
612
|
+
return phi_5(beta, alpha) if beta > 0 else -phi_5(-beta, alpha)
|
613
|
+
|
614
|
+
# quantiles
|
615
|
+
p05 = np.percentile(data, 5)
|
616
|
+
p50 = np.percentile(data, 50)
|
617
|
+
p95 = np.percentile(data, 95)
|
618
|
+
p25 = np.percentile(data, 25)
|
619
|
+
p75 = np.percentile(data, 75)
|
620
|
+
|
621
|
+
nu_alpha = (p95 - p05) / (p75 - p25)
|
622
|
+
nu_beta = (p95 + p05 - 2 * p50) / (p95 - p05)
|
623
|
+
|
624
|
+
if nu_alpha >= 2.439:
|
625
|
+
eps = np.finfo(float).eps
|
626
|
+
alpha = np.clip(psi_1_1(nu_beta, nu_alpha)[0, 0], eps, 2.)
|
627
|
+
beta = np.clip(psi_2_1(nu_beta, nu_alpha)[0, 0], -1.0, 1.0)
|
628
|
+
else:
|
629
|
+
alpha = 2.0
|
630
|
+
beta = np.sign(nu_beta)
|
631
|
+
c = (p75 - p25) / phi_3_1(beta, alpha)[0, 0]
|
632
|
+
zeta = p50 + c * phi_5_1(beta, alpha)[0, 0]
|
633
|
+
delta = zeta-beta*c*np.tan(np.pi*alpha/2.) if alpha != 1. else zeta
|
634
|
+
|
635
|
+
return (alpha, beta, delta, c)
|
636
|
+
|
637
|
+
|
638
|
+
class levy_stable_gen(rv_continuous):
|
639
|
+
r"""A Levy-stable continuous random variable.
|
640
|
+
|
641
|
+
%(before_notes)s
|
642
|
+
|
643
|
+
See Also
|
644
|
+
--------
|
645
|
+
levy, levy_l, cauchy, norm
|
646
|
+
|
647
|
+
Notes
|
648
|
+
-----
|
649
|
+
The distribution for `levy_stable` has characteristic function:
|
650
|
+
|
651
|
+
.. math::
|
652
|
+
|
653
|
+
\varphi(t, \alpha, \beta, c, \mu) =
|
654
|
+
e^{it\mu -|ct|^{\alpha}(1-i\beta\operatorname{sign}(t)\Phi(\alpha, t))}
|
655
|
+
|
656
|
+
where two different parameterizations are supported. The first :math:`S_1`:
|
657
|
+
|
658
|
+
.. math::
|
659
|
+
|
660
|
+
\Phi = \begin{cases}
|
661
|
+
\tan \left({\frac {\pi \alpha }{2}}\right)&\alpha \neq 1\\
|
662
|
+
-{\frac {2}{\pi }}\log |t|&\alpha =1
|
663
|
+
\end{cases}
|
664
|
+
|
665
|
+
The second :math:`S_0`:
|
666
|
+
|
667
|
+
.. math::
|
668
|
+
|
669
|
+
\Phi = \begin{cases}
|
670
|
+
-\tan \left({\frac {\pi \alpha }{2}}\right)(|ct|^{1-\alpha}-1)
|
671
|
+
&\alpha \neq 1\\
|
672
|
+
-{\frac {2}{\pi }}\log |ct|&\alpha =1
|
673
|
+
\end{cases}
|
674
|
+
|
675
|
+
|
676
|
+
The probability density function for `levy_stable` is:
|
677
|
+
|
678
|
+
.. math::
|
679
|
+
|
680
|
+
f(x) = \frac{1}{2\pi}\int_{-\infty}^\infty \varphi(t)e^{-ixt}\,dt
|
681
|
+
|
682
|
+
where :math:`-\infty < t < \infty`. This integral does not have a known
|
683
|
+
closed form.
|
684
|
+
|
685
|
+
`levy_stable` generalizes several distributions. Where possible, they
|
686
|
+
should be used instead. Specifically, when the shape parameters
|
687
|
+
assume the values in the table below, the corresponding equivalent
|
688
|
+
distribution should be used.
|
689
|
+
|
690
|
+
========= ======== ===========
|
691
|
+
``alpha`` ``beta`` Equivalent
|
692
|
+
========= ======== ===========
|
693
|
+
1/2 -1 `levy_l`
|
694
|
+
1/2 1 `levy`
|
695
|
+
1 0 `cauchy`
|
696
|
+
2 any `norm` (with ``scale=sqrt(2)``)
|
697
|
+
========= ======== ===========
|
698
|
+
|
699
|
+
Evaluation of the pdf uses Nolan's piecewise integration approach with the
|
700
|
+
Zolotarev :math:`M` parameterization by default. There is also the option
|
701
|
+
to use direct numerical integration of the standard parameterization of the
|
702
|
+
characteristic function or to evaluate by taking the FFT of the
|
703
|
+
characteristic function.
|
704
|
+
|
705
|
+
The default method can changed by setting the class variable
|
706
|
+
``levy_stable.pdf_default_method`` to one of 'piecewise' for Nolan's
|
707
|
+
approach, 'dni' for direct numerical integration, or 'fft-simpson' for the
|
708
|
+
FFT based approach. For the sake of backwards compatibility, the methods
|
709
|
+
'best' and 'zolotarev' are equivalent to 'piecewise' and the method
|
710
|
+
'quadrature' is equivalent to 'dni'.
|
711
|
+
|
712
|
+
The parameterization can be changed by setting the class variable
|
713
|
+
``levy_stable.parameterization`` to either 'S0' or 'S1'.
|
714
|
+
The default is 'S1'.
|
715
|
+
|
716
|
+
To improve performance of piecewise and direct numerical integration one
|
717
|
+
can specify ``levy_stable.quad_eps`` (defaults to 1.2e-14). This is used
|
718
|
+
as both the absolute and relative quadrature tolerance for direct numerical
|
719
|
+
integration and as the relative quadrature tolerance for the piecewise
|
720
|
+
method. One can also specify ``levy_stable.piecewise_x_tol_near_zeta``
|
721
|
+
(defaults to 0.005) for how close x is to zeta before it is considered the
|
722
|
+
same as x [NO]. The exact check is
|
723
|
+
``abs(x0 - zeta) < piecewise_x_tol_near_zeta*alpha**(1/alpha)``. One can
|
724
|
+
also specify ``levy_stable.piecewise_alpha_tol_near_one`` (defaults to
|
725
|
+
0.005) for how close alpha is to 1 before being considered equal to 1.
|
726
|
+
|
727
|
+
To increase accuracy of FFT calculation one can specify
|
728
|
+
``levy_stable.pdf_fft_grid_spacing`` (defaults to 0.001) and
|
729
|
+
``pdf_fft_n_points_two_power`` (defaults to None which means a value is
|
730
|
+
calculated that sufficiently covers the input range).
|
731
|
+
|
732
|
+
Further control over FFT calculation is available by setting
|
733
|
+
``pdf_fft_interpolation_degree`` (defaults to 3) for spline order and
|
734
|
+
``pdf_fft_interpolation_level`` for determining the number of points to use
|
735
|
+
in the Newton-Cotes formula when approximating the characteristic function
|
736
|
+
(considered experimental).
|
737
|
+
|
738
|
+
Evaluation of the cdf uses Nolan's piecewise integration approach with the
|
739
|
+
Zolatarev :math:`S_0` parameterization by default. There is also the option
|
740
|
+
to evaluate through integration of an interpolated spline of the pdf
|
741
|
+
calculated by means of the FFT method. The settings affecting FFT
|
742
|
+
calculation are the same as for pdf calculation. The default cdf method can
|
743
|
+
be changed by setting ``levy_stable.cdf_default_method`` to either
|
744
|
+
'piecewise' or 'fft-simpson'. For cdf calculations the Zolatarev method is
|
745
|
+
superior in accuracy, so FFT is disabled by default.
|
746
|
+
|
747
|
+
Fitting estimate uses quantile estimation method in [MC]. MLE estimation of
|
748
|
+
parameters in fit method uses this quantile estimate initially. Note that
|
749
|
+
MLE doesn't always converge if using FFT for pdf calculations; this will be
|
750
|
+
the case if alpha <= 1 where the FFT approach doesn't give good
|
751
|
+
approximations.
|
752
|
+
|
753
|
+
Any non-missing value for the attribute
|
754
|
+
``levy_stable.pdf_fft_min_points_threshold`` will set
|
755
|
+
``levy_stable.pdf_default_method`` to 'fft-simpson' if a valid
|
756
|
+
default method is not otherwise set.
|
757
|
+
|
758
|
+
|
759
|
+
|
760
|
+
.. warning::
|
761
|
+
|
762
|
+
For pdf calculations FFT calculation is considered experimental.
|
763
|
+
|
764
|
+
For cdf calculations FFT calculation is considered experimental. Use
|
765
|
+
Zolatarev's method instead (default).
|
766
|
+
|
767
|
+
The probability density above is defined in the "standardized" form. To
|
768
|
+
shift and/or scale the distribution use the ``loc`` and ``scale``
|
769
|
+
parameters.
|
770
|
+
Generally ``%(name)s.pdf(x, %(shapes)s, loc, scale)`` is identically
|
771
|
+
equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
|
772
|
+
``y = (x - loc) / scale``, except in the ``S1`` parameterization if
|
773
|
+
``alpha == 1``. In that case ``%(name)s.pdf(x, %(shapes)s, loc, scale)``
|
774
|
+
is identically equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
|
775
|
+
``y = (x - loc - 2 * beta * scale * np.log(scale) / np.pi) / scale``.
|
776
|
+
See [NO2]_ Definition 1.8 for more information.
|
777
|
+
Note that shifting the location of a distribution
|
778
|
+
does not make it a "noncentral" distribution.
|
779
|
+
|
780
|
+
References
|
781
|
+
----------
|
782
|
+
.. [MC] McCulloch, J., 1986. Simple consistent estimators of stable
|
783
|
+
distribution parameters. Communications in Statistics - Simulation and
|
784
|
+
Computation 15, 11091136.
|
785
|
+
.. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
|
786
|
+
to compute densities of stable distribution.
|
787
|
+
.. [NO] Nolan, J., 1997. Numerical Calculation of Stable Densities and
|
788
|
+
distributions Functions.
|
789
|
+
.. [NO2] Nolan, J., 2018. Stable Distributions: Models for Heavy Tailed
|
790
|
+
Data.
|
791
|
+
.. [HO] Hopcraft, K. I., Jakeman, E., Tanner, R. M. J., 1999. Lévy random
|
792
|
+
walks with fluctuating step number and multiscale behavior.
|
793
|
+
|
794
|
+
%(example)s
|
795
|
+
|
796
|
+
"""
|
797
|
+
# Configurable options as class variables
|
798
|
+
# (accessible from self by attribute lookup).
|
799
|
+
parameterization = "S1"
|
800
|
+
pdf_default_method = "piecewise"
|
801
|
+
cdf_default_method = "piecewise"
|
802
|
+
quad_eps = _QUAD_EPS
|
803
|
+
piecewise_x_tol_near_zeta = 0.005
|
804
|
+
piecewise_alpha_tol_near_one = 0.005
|
805
|
+
pdf_fft_min_points_threshold = None
|
806
|
+
pdf_fft_grid_spacing = 0.001
|
807
|
+
pdf_fft_n_points_two_power = None
|
808
|
+
pdf_fft_interpolation_level = 3
|
809
|
+
pdf_fft_interpolation_degree = 3
|
810
|
+
|
811
|
+
def __call__(self, *args, **params):
|
812
|
+
dist = levy_stable_frozen(self, *args, **params)
|
813
|
+
dist.parameterization = self.parameterization
|
814
|
+
return dist
|
815
|
+
|
816
|
+
def _argcheck(self, alpha, beta):
|
817
|
+
return (alpha > 0) & (alpha <= 2) & (beta <= 1) & (beta >= -1)
|
818
|
+
|
819
|
+
def _shape_info(self):
|
820
|
+
ialpha = _ShapeInfo("alpha", False, (0, 2), (False, True))
|
821
|
+
ibeta = _ShapeInfo("beta", False, (-1, 1), (True, True))
|
822
|
+
return [ialpha, ibeta]
|
823
|
+
|
824
|
+
def _parameterization(self):
|
825
|
+
allowed = ("S0", "S1")
|
826
|
+
pz = self.parameterization
|
827
|
+
if pz not in allowed:
|
828
|
+
raise RuntimeError(
|
829
|
+
f"Parameterization '{pz}' in supported list: {allowed}"
|
830
|
+
)
|
831
|
+
return pz
|
832
|
+
|
833
|
+
@inherit_docstring_from(rv_continuous)
|
834
|
+
def rvs(self, *args, **kwds):
|
835
|
+
X1 = super().rvs(*args, **kwds)
|
836
|
+
|
837
|
+
kwds.pop("discrete", None)
|
838
|
+
kwds.pop("random_state", None)
|
839
|
+
(alpha, beta), delta, gamma, size = self._parse_args_rvs(*args, **kwds)
|
840
|
+
|
841
|
+
# shift location for this parameterisation (S1)
|
842
|
+
X1 = np.where(
|
843
|
+
alpha == 1.0, X1 + 2 * beta * gamma * np.log(gamma) / np.pi, X1
|
844
|
+
)
|
845
|
+
|
846
|
+
if self._parameterization() == "S0":
|
847
|
+
return np.where(
|
848
|
+
alpha == 1.0,
|
849
|
+
X1 - (beta * 2 * gamma * np.log(gamma) / np.pi),
|
850
|
+
X1 - gamma * beta * np.tan(np.pi * alpha / 2.0),
|
851
|
+
)
|
852
|
+
elif self._parameterization() == "S1":
|
853
|
+
return X1
|
854
|
+
|
855
|
+
def _rvs(self, alpha, beta, size=None, random_state=None):
|
856
|
+
return _rvs_Z1(alpha, beta, size, random_state)
|
857
|
+
|
858
|
+
@inherit_docstring_from(rv_continuous)
|
859
|
+
def pdf(self, x, *args, **kwds):
|
860
|
+
# override base class version to correct
|
861
|
+
# location for S1 parameterization
|
862
|
+
if self._parameterization() == "S0":
|
863
|
+
return super().pdf(x, *args, **kwds)
|
864
|
+
elif self._parameterization() == "S1":
|
865
|
+
(alpha, beta), delta, gamma = self._parse_args(*args, **kwds)
|
866
|
+
if np.all(np.reshape(alpha, (1, -1))[0, :] != 1):
|
867
|
+
return super().pdf(x, *args, **kwds)
|
868
|
+
else:
|
869
|
+
# correct location for this parameterisation
|
870
|
+
x = np.reshape(x, (1, -1))[0, :]
|
871
|
+
x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
|
872
|
+
|
873
|
+
data_in = np.dstack((x, alpha, beta))[0]
|
874
|
+
data_out = np.empty(shape=(len(data_in), 1))
|
875
|
+
# group data in unique arrays of alpha, beta pairs
|
876
|
+
uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
|
877
|
+
for pair in uniq_param_pairs:
|
878
|
+
_alpha, _beta = pair
|
879
|
+
_delta = (
|
880
|
+
delta + 2 * _beta * gamma * np.log(gamma) / np.pi
|
881
|
+
if _alpha == 1.0
|
882
|
+
else delta
|
883
|
+
)
|
884
|
+
data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
|
885
|
+
_x = data_in[data_mask, 0]
|
886
|
+
data_out[data_mask] = (
|
887
|
+
super()
|
888
|
+
.pdf(_x, _alpha, _beta, loc=_delta, scale=gamma)
|
889
|
+
.reshape(len(_x), 1)
|
890
|
+
)
|
891
|
+
output = data_out.T[0]
|
892
|
+
if output.shape == (1,):
|
893
|
+
return output[0]
|
894
|
+
return output
|
895
|
+
|
896
|
+
def _pdf(self, x, alpha, beta):
|
897
|
+
if self._parameterization() == "S0":
|
898
|
+
_pdf_single_value_piecewise = _pdf_single_value_piecewise_Z0
|
899
|
+
_pdf_single_value_cf_integrate = _pdf_single_value_cf_integrate_Z0
|
900
|
+
_cf = _cf_Z0
|
901
|
+
elif self._parameterization() == "S1":
|
902
|
+
_pdf_single_value_piecewise = _pdf_single_value_piecewise_Z1
|
903
|
+
_pdf_single_value_cf_integrate = _pdf_single_value_cf_integrate_Z1
|
904
|
+
_cf = _cf_Z1
|
905
|
+
|
906
|
+
x = np.asarray(x).reshape(1, -1)[0, :]
|
907
|
+
|
908
|
+
x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
|
909
|
+
|
910
|
+
data_in = np.dstack((x, alpha, beta))[0]
|
911
|
+
data_out = np.empty(shape=(len(data_in), 1))
|
912
|
+
|
913
|
+
pdf_default_method_name = self.pdf_default_method
|
914
|
+
if pdf_default_method_name in ("piecewise", "best", "zolotarev"):
|
915
|
+
pdf_single_value_method = _pdf_single_value_piecewise
|
916
|
+
elif pdf_default_method_name in ("dni", "quadrature"):
|
917
|
+
pdf_single_value_method = _pdf_single_value_cf_integrate
|
918
|
+
elif (
|
919
|
+
pdf_default_method_name == "fft-simpson"
|
920
|
+
or self.pdf_fft_min_points_threshold is not None
|
921
|
+
):
|
922
|
+
pdf_single_value_method = None
|
923
|
+
|
924
|
+
pdf_single_value_kwds = {
|
925
|
+
"quad_eps": self.quad_eps,
|
926
|
+
"piecewise_x_tol_near_zeta": self.piecewise_x_tol_near_zeta,
|
927
|
+
"piecewise_alpha_tol_near_one": self.piecewise_alpha_tol_near_one,
|
928
|
+
}
|
929
|
+
|
930
|
+
fft_grid_spacing = self.pdf_fft_grid_spacing
|
931
|
+
fft_n_points_two_power = self.pdf_fft_n_points_two_power
|
932
|
+
fft_interpolation_level = self.pdf_fft_interpolation_level
|
933
|
+
fft_interpolation_degree = self.pdf_fft_interpolation_degree
|
934
|
+
|
935
|
+
# group data in unique arrays of alpha, beta pairs
|
936
|
+
uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
|
937
|
+
for pair in uniq_param_pairs:
|
938
|
+
data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
|
939
|
+
data_subset = data_in[data_mask]
|
940
|
+
if pdf_single_value_method is not None:
|
941
|
+
data_out[data_mask] = np.array(
|
942
|
+
[
|
943
|
+
pdf_single_value_method(
|
944
|
+
_x, _alpha, _beta, **pdf_single_value_kwds
|
945
|
+
)
|
946
|
+
for _x, _alpha, _beta in data_subset
|
947
|
+
]
|
948
|
+
).reshape(len(data_subset), 1)
|
949
|
+
else:
|
950
|
+
warnings.warn(
|
951
|
+
"Density calculations experimental for FFT method."
|
952
|
+
+ " Use combination of piecewise and dni methods instead.",
|
953
|
+
RuntimeWarning, stacklevel=3,
|
954
|
+
)
|
955
|
+
_alpha, _beta = pair
|
956
|
+
_x = data_subset[:, (0,)]
|
957
|
+
|
958
|
+
if _alpha < 1.0:
|
959
|
+
raise RuntimeError(
|
960
|
+
"FFT method does not work well for alpha less than 1."
|
961
|
+
)
|
962
|
+
|
963
|
+
# need enough points to "cover" _x for interpolation
|
964
|
+
if fft_grid_spacing is None and fft_n_points_two_power is None:
|
965
|
+
raise ValueError(
|
966
|
+
"One of fft_grid_spacing or fft_n_points_two_power "
|
967
|
+
+ "needs to be set."
|
968
|
+
)
|
969
|
+
max_abs_x = np.max(np.abs(_x))
|
970
|
+
h = (
|
971
|
+
2 ** (3 - fft_n_points_two_power) * max_abs_x
|
972
|
+
if fft_grid_spacing is None
|
973
|
+
else fft_grid_spacing
|
974
|
+
)
|
975
|
+
q = (
|
976
|
+
np.ceil(np.log(2 * max_abs_x / h) / np.log(2)) + 2
|
977
|
+
if fft_n_points_two_power is None
|
978
|
+
else int(fft_n_points_two_power)
|
979
|
+
)
|
980
|
+
|
981
|
+
# for some parameters, the range of x can be quite
|
982
|
+
# large, let's choose an arbitrary cut off (8GB) to save on
|
983
|
+
# computer memory.
|
984
|
+
MAX_Q = 30
|
985
|
+
if q > MAX_Q:
|
986
|
+
raise RuntimeError(
|
987
|
+
"fft_n_points_two_power has a maximum "
|
988
|
+
+ f"value of {MAX_Q}"
|
989
|
+
)
|
990
|
+
|
991
|
+
density_x, density = pdf_from_cf_with_fft(
|
992
|
+
lambda t: _cf(t, _alpha, _beta),
|
993
|
+
h=h,
|
994
|
+
q=q,
|
995
|
+
level=fft_interpolation_level,
|
996
|
+
)
|
997
|
+
f = interpolate.InterpolatedUnivariateSpline(
|
998
|
+
density_x, np.real(density), k=fft_interpolation_degree
|
999
|
+
) # patch FFT to use cubic
|
1000
|
+
data_out[data_mask] = f(_x)
|
1001
|
+
|
1002
|
+
return data_out.T[0]
|
1003
|
+
|
1004
|
+
@inherit_docstring_from(rv_continuous)
|
1005
|
+
def cdf(self, x, *args, **kwds):
|
1006
|
+
# override base class version to correct
|
1007
|
+
# location for S1 parameterization
|
1008
|
+
# NOTE: this is near identical to pdf() above
|
1009
|
+
if self._parameterization() == "S0":
|
1010
|
+
return super().cdf(x, *args, **kwds)
|
1011
|
+
elif self._parameterization() == "S1":
|
1012
|
+
(alpha, beta), delta, gamma = self._parse_args(*args, **kwds)
|
1013
|
+
if np.all(np.reshape(alpha, (1, -1))[0, :] != 1):
|
1014
|
+
return super().cdf(x, *args, **kwds)
|
1015
|
+
else:
|
1016
|
+
# correct location for this parameterisation
|
1017
|
+
x = np.reshape(x, (1, -1))[0, :]
|
1018
|
+
x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
|
1019
|
+
|
1020
|
+
data_in = np.dstack((x, alpha, beta))[0]
|
1021
|
+
data_out = np.empty(shape=(len(data_in), 1))
|
1022
|
+
# group data in unique arrays of alpha, beta pairs
|
1023
|
+
uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
|
1024
|
+
for pair in uniq_param_pairs:
|
1025
|
+
_alpha, _beta = pair
|
1026
|
+
_delta = (
|
1027
|
+
delta + 2 * _beta * gamma * np.log(gamma) / np.pi
|
1028
|
+
if _alpha == 1.0
|
1029
|
+
else delta
|
1030
|
+
)
|
1031
|
+
data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
|
1032
|
+
_x = data_in[data_mask, 0]
|
1033
|
+
data_out[data_mask] = (
|
1034
|
+
super()
|
1035
|
+
.cdf(_x, _alpha, _beta, loc=_delta, scale=gamma)
|
1036
|
+
.reshape(len(_x), 1)
|
1037
|
+
)
|
1038
|
+
output = data_out.T[0]
|
1039
|
+
if output.shape == (1,):
|
1040
|
+
return output[0]
|
1041
|
+
return output
|
1042
|
+
|
1043
|
+
def _cdf(self, x, alpha, beta):
|
1044
|
+
if self._parameterization() == "S0":
|
1045
|
+
_cdf_single_value_piecewise = _cdf_single_value_piecewise_Z0
|
1046
|
+
_cf = _cf_Z0
|
1047
|
+
elif self._parameterization() == "S1":
|
1048
|
+
_cdf_single_value_piecewise = _cdf_single_value_piecewise_Z1
|
1049
|
+
_cf = _cf_Z1
|
1050
|
+
|
1051
|
+
x = np.asarray(x).reshape(1, -1)[0, :]
|
1052
|
+
|
1053
|
+
x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
|
1054
|
+
|
1055
|
+
data_in = np.dstack((x, alpha, beta))[0]
|
1056
|
+
data_out = np.empty(shape=(len(data_in), 1))
|
1057
|
+
|
1058
|
+
cdf_default_method_name = self.cdf_default_method
|
1059
|
+
if cdf_default_method_name == "piecewise":
|
1060
|
+
cdf_single_value_method = _cdf_single_value_piecewise
|
1061
|
+
elif cdf_default_method_name == "fft-simpson":
|
1062
|
+
cdf_single_value_method = None
|
1063
|
+
|
1064
|
+
cdf_single_value_kwds = {
|
1065
|
+
"quad_eps": self.quad_eps,
|
1066
|
+
"piecewise_x_tol_near_zeta": self.piecewise_x_tol_near_zeta,
|
1067
|
+
"piecewise_alpha_tol_near_one": self.piecewise_alpha_tol_near_one,
|
1068
|
+
}
|
1069
|
+
|
1070
|
+
fft_grid_spacing = self.pdf_fft_grid_spacing
|
1071
|
+
fft_n_points_two_power = self.pdf_fft_n_points_two_power
|
1072
|
+
fft_interpolation_level = self.pdf_fft_interpolation_level
|
1073
|
+
fft_interpolation_degree = self.pdf_fft_interpolation_degree
|
1074
|
+
|
1075
|
+
# group data in unique arrays of alpha, beta pairs
|
1076
|
+
uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
|
1077
|
+
for pair in uniq_param_pairs:
|
1078
|
+
data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
|
1079
|
+
data_subset = data_in[data_mask]
|
1080
|
+
if cdf_single_value_method is not None:
|
1081
|
+
data_out[data_mask] = np.array(
|
1082
|
+
[
|
1083
|
+
cdf_single_value_method(
|
1084
|
+
_x, _alpha, _beta, **cdf_single_value_kwds
|
1085
|
+
)
|
1086
|
+
for _x, _alpha, _beta in data_subset
|
1087
|
+
]
|
1088
|
+
).reshape(len(data_subset), 1)
|
1089
|
+
else:
|
1090
|
+
warnings.warn(
|
1091
|
+
"Cumulative density calculations experimental for FFT"
|
1092
|
+
+ " method. Use piecewise method instead.",
|
1093
|
+
RuntimeWarning, stacklevel=3,
|
1094
|
+
)
|
1095
|
+
_alpha, _beta = pair
|
1096
|
+
_x = data_subset[:, (0,)]
|
1097
|
+
|
1098
|
+
# need enough points to "cover" _x for interpolation
|
1099
|
+
if fft_grid_spacing is None and fft_n_points_two_power is None:
|
1100
|
+
raise ValueError(
|
1101
|
+
"One of fft_grid_spacing or fft_n_points_two_power "
|
1102
|
+
+ "needs to be set."
|
1103
|
+
)
|
1104
|
+
max_abs_x = np.max(np.abs(_x))
|
1105
|
+
h = (
|
1106
|
+
2 ** (3 - fft_n_points_two_power) * max_abs_x
|
1107
|
+
if fft_grid_spacing is None
|
1108
|
+
else fft_grid_spacing
|
1109
|
+
)
|
1110
|
+
q = (
|
1111
|
+
np.ceil(np.log(2 * max_abs_x / h) / np.log(2)) + 2
|
1112
|
+
if fft_n_points_two_power is None
|
1113
|
+
else int(fft_n_points_two_power)
|
1114
|
+
)
|
1115
|
+
|
1116
|
+
density_x, density = pdf_from_cf_with_fft(
|
1117
|
+
lambda t: _cf(t, _alpha, _beta),
|
1118
|
+
h=h,
|
1119
|
+
q=q,
|
1120
|
+
level=fft_interpolation_level,
|
1121
|
+
)
|
1122
|
+
f = interpolate.InterpolatedUnivariateSpline(
|
1123
|
+
density_x, np.real(density), k=fft_interpolation_degree
|
1124
|
+
)
|
1125
|
+
data_out[data_mask] = np.array(
|
1126
|
+
[f.integral(self.a, float(x_1.squeeze())) for x_1 in _x]
|
1127
|
+
).reshape(data_out[data_mask].shape)
|
1128
|
+
|
1129
|
+
return data_out.T[0]
|
1130
|
+
|
1131
|
+
def _fitstart(self, data):
|
1132
|
+
if self._parameterization() == "S0":
|
1133
|
+
_fitstart = _fitstart_S0
|
1134
|
+
elif self._parameterization() == "S1":
|
1135
|
+
_fitstart = _fitstart_S1
|
1136
|
+
return _fitstart(data)
|
1137
|
+
|
1138
|
+
def _stats(self, alpha, beta):
|
1139
|
+
mu = 0 if alpha > 1 else np.nan
|
1140
|
+
mu2 = 2 if alpha == 2 else np.inf
|
1141
|
+
g1 = 0.0 if alpha == 2.0 else np.nan
|
1142
|
+
g2 = 0.0 if alpha == 2.0 else np.nan
|
1143
|
+
return mu, mu2, g1, g2
|
1144
|
+
|
1145
|
+
|
1146
|
+
# cotes numbers - see sequence from http://oeis.org/A100642
|
1147
|
+
Cotes_table = np.array(
|
1148
|
+
[[], [1]] + [v[2] for v in _builtincoeffs.values()], dtype=object
|
1149
|
+
)
|
1150
|
+
Cotes = np.array(
|
1151
|
+
[
|
1152
|
+
np.pad(r, (0, len(Cotes_table) - 1 - len(r)), mode='constant')
|
1153
|
+
for r in Cotes_table
|
1154
|
+
]
|
1155
|
+
)
|
1156
|
+
|
1157
|
+
|
1158
|
+
def pdf_from_cf_with_fft(cf, h=0.01, q=9, level=3):
|
1159
|
+
"""Calculates pdf from characteristic function.
|
1160
|
+
|
1161
|
+
Uses fast Fourier transform with Newton-Cotes integration following [WZ].
|
1162
|
+
Defaults to using Simpson's method (3-point Newton-Cotes integration).
|
1163
|
+
|
1164
|
+
Parameters
|
1165
|
+
----------
|
1166
|
+
cf : callable
|
1167
|
+
Single argument function from float -> complex expressing a
|
1168
|
+
characteristic function for some distribution.
|
1169
|
+
h : Optional[float]
|
1170
|
+
Step size for Newton-Cotes integration. Default: 0.01
|
1171
|
+
q : Optional[int]
|
1172
|
+
Use 2**q steps when performing Newton-Cotes integration.
|
1173
|
+
The infinite integral in the inverse Fourier transform will then
|
1174
|
+
be restricted to the interval [-2**q * h / 2, 2**q * h / 2]. Setting
|
1175
|
+
the number of steps equal to a power of 2 allows the fft to be
|
1176
|
+
calculated in O(n*log(n)) time rather than O(n**2).
|
1177
|
+
Default: 9
|
1178
|
+
level : Optional[int]
|
1179
|
+
Calculate integral using n-point Newton-Cotes integration for
|
1180
|
+
n = level. The 3-point Newton-Cotes formula corresponds to Simpson's
|
1181
|
+
rule. Default: 3
|
1182
|
+
|
1183
|
+
Returns
|
1184
|
+
-------
|
1185
|
+
x_l : ndarray
|
1186
|
+
Array of points x at which pdf is estimated. 2**q equally spaced
|
1187
|
+
points from -pi/h up to but not including pi/h.
|
1188
|
+
density : ndarray
|
1189
|
+
Estimated values of pdf corresponding to cf at points in x_l.
|
1190
|
+
|
1191
|
+
References
|
1192
|
+
----------
|
1193
|
+
.. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
|
1194
|
+
to compute densities of stable distribution.
|
1195
|
+
"""
|
1196
|
+
n = level
|
1197
|
+
N = 2**q
|
1198
|
+
steps = np.arange(0, N)
|
1199
|
+
L = N * h / 2
|
1200
|
+
x_l = np.pi * (steps - N / 2) / L
|
1201
|
+
if level > 1:
|
1202
|
+
indices = np.arange(n).reshape(n, 1)
|
1203
|
+
s1 = np.sum(
|
1204
|
+
(-1) ** steps * Cotes[n, indices] * np.fft.fft(
|
1205
|
+
(-1)**steps * cf(-L + h * steps + h * indices / (n - 1))
|
1206
|
+
) * np.exp(
|
1207
|
+
1j * np.pi * indices / (n - 1)
|
1208
|
+
- 2 * 1j * np.pi * indices * steps /
|
1209
|
+
(N * (n - 1))
|
1210
|
+
),
|
1211
|
+
axis=0
|
1212
|
+
)
|
1213
|
+
else:
|
1214
|
+
s1 = (-1) ** steps * Cotes[n, 0] * np.fft.fft(
|
1215
|
+
(-1) ** steps * cf(-L + h * steps)
|
1216
|
+
)
|
1217
|
+
density = h * s1 / (2 * np.pi * np.sum(Cotes[n]))
|
1218
|
+
return (x_l, density)
|
1219
|
+
|
1220
|
+
|
1221
|
+
levy_stable = levy_stable_gen(name="levy_stable")
|
1222
|
+
|
1223
|
+
|
1224
|
+
class levy_stable_frozen(rv_continuous_frozen):
|
1225
|
+
@property
|
1226
|
+
def parameterization(self):
|
1227
|
+
return self.dist.parameterization
|
1228
|
+
|
1229
|
+
@parameterization.setter
|
1230
|
+
def parameterization(self, value):
|
1231
|
+
self.dist.parameterization = value
|