scipy 1.16.2__cp313-cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_cyutility.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp313t-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp313t-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp313t-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp313t-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp313t-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp313t-win_arm64.lib +0 -0
- scipy/signal/_spline.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/special/_comb.cp313t-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp313t-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/special/_specfun.cp313t-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp313t-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp313t-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp313t-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/special/cython_special.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp313t-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp313t-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp313t-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp313t-win_arm64.lib +0 -0
- scipy/stats/_stats.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp313t-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.cp313t-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-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,989 @@
|
|
1
|
+
# ******************************************************************************
|
2
|
+
# Copyright (C) 2013 Kenneth L. Ho
|
3
|
+
#
|
4
|
+
# Redistribution and use in source and binary forms, with or without
|
5
|
+
# modification, are permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# Redistributions of source code must retain the above copyright notice, this
|
8
|
+
# list of conditions and the following disclaimer. Redistributions in binary
|
9
|
+
# form must reproduce the above copyright notice, this list of conditions and
|
10
|
+
# the following disclaimer in the documentation and/or other materials
|
11
|
+
# provided with the distribution.
|
12
|
+
#
|
13
|
+
# None of the names of the copyright holders may be used to endorse or
|
14
|
+
# promote products derived from this software without specific prior written
|
15
|
+
# permission.
|
16
|
+
#
|
17
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
21
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
# ******************************************************************************
|
29
|
+
|
30
|
+
r"""
|
31
|
+
======================================================================
|
32
|
+
Interpolative matrix decomposition (:mod:`scipy.linalg.interpolative`)
|
33
|
+
======================================================================
|
34
|
+
|
35
|
+
.. versionadded:: 0.13
|
36
|
+
|
37
|
+
.. versionchanged:: 1.15.0
|
38
|
+
The underlying algorithms have been ported to Python from the original Fortran77
|
39
|
+
code. See references below for more details.
|
40
|
+
|
41
|
+
.. currentmodule:: scipy.linalg.interpolative
|
42
|
+
|
43
|
+
An interpolative decomposition (ID) of a matrix :math:`A \in
|
44
|
+
\mathbb{C}^{m \times n}` of rank :math:`k \leq \min \{ m, n \}` is a
|
45
|
+
factorization
|
46
|
+
|
47
|
+
.. math::
|
48
|
+
A \Pi =
|
49
|
+
\begin{bmatrix}
|
50
|
+
A \Pi_{1} & A \Pi_{2}
|
51
|
+
\end{bmatrix} =
|
52
|
+
A \Pi_{1}
|
53
|
+
\begin{bmatrix}
|
54
|
+
I & T
|
55
|
+
\end{bmatrix},
|
56
|
+
|
57
|
+
where :math:`\Pi = [\Pi_{1}, \Pi_{2}]` is a permutation matrix with
|
58
|
+
:math:`\Pi_{1} \in \{ 0, 1 \}^{n \times k}`, i.e., :math:`A \Pi_{2} =
|
59
|
+
A \Pi_{1} T`. This can equivalently be written as :math:`A = BP`,
|
60
|
+
where :math:`B = A \Pi_{1}` and :math:`P = [I, T] \Pi^{\mathsf{T}}`
|
61
|
+
are the *skeleton* and *interpolation matrices*, respectively.
|
62
|
+
|
63
|
+
If :math:`A` does not have exact rank :math:`k`, then there exists an
|
64
|
+
approximation in the form of an ID such that :math:`A = BP + E`, where
|
65
|
+
:math:`\| E \| \sim \sigma_{k + 1}` is on the order of the :math:`(k +
|
66
|
+
1)`-th largest singular value of :math:`A`. Note that :math:`\sigma_{k
|
67
|
+
+ 1}` is the best possible error for a rank-:math:`k` approximation
|
68
|
+
and, in fact, is achieved by the singular value decomposition (SVD)
|
69
|
+
:math:`A \approx U S V^{*}`, where :math:`U \in \mathbb{C}^{m \times
|
70
|
+
k}` and :math:`V \in \mathbb{C}^{n \times k}` have orthonormal columns
|
71
|
+
and :math:`S = \mathop{\mathrm{diag}} (\sigma_{i}) \in \mathbb{C}^{k
|
72
|
+
\times k}` is diagonal with nonnegative entries. The principal
|
73
|
+
advantages of using an ID over an SVD are that:
|
74
|
+
|
75
|
+
- it is cheaper to construct;
|
76
|
+
- it preserves the structure of :math:`A`; and
|
77
|
+
- it is more efficient to compute with in light of the identity submatrix of :math:`P`.
|
78
|
+
|
79
|
+
Routines
|
80
|
+
========
|
81
|
+
|
82
|
+
Main functionality:
|
83
|
+
|
84
|
+
.. autosummary::
|
85
|
+
:toctree: generated/
|
86
|
+
|
87
|
+
interp_decomp
|
88
|
+
reconstruct_matrix_from_id
|
89
|
+
reconstruct_interp_matrix
|
90
|
+
reconstruct_skel_matrix
|
91
|
+
id_to_svd
|
92
|
+
svd
|
93
|
+
estimate_spectral_norm
|
94
|
+
estimate_spectral_norm_diff
|
95
|
+
estimate_rank
|
96
|
+
|
97
|
+
Following support functions are deprecated and will be removed in SciPy 1.17.0:
|
98
|
+
|
99
|
+
.. autosummary::
|
100
|
+
:toctree: generated/
|
101
|
+
|
102
|
+
seed
|
103
|
+
rand
|
104
|
+
|
105
|
+
|
106
|
+
References
|
107
|
+
==========
|
108
|
+
|
109
|
+
This module uses the algorithms found in ID software package [1]_ by Martinsson,
|
110
|
+
Rokhlin, Shkolnisky, and Tygert, which is a Fortran library for computing IDs using
|
111
|
+
various algorithms, including the rank-revealing QR approach of [2]_ and the more
|
112
|
+
recent randomized methods described in [3]_, [4]_, and [5]_.
|
113
|
+
|
114
|
+
We advise the user to consult also the documentation for the `ID package
|
115
|
+
<http://tygert.com/software.html>`_.
|
116
|
+
|
117
|
+
.. [1] P.G. Martinsson, V. Rokhlin, Y. Shkolnisky, M. Tygert. "ID: a
|
118
|
+
software package for low-rank approximation of matrices via interpolative
|
119
|
+
decompositions, version 0.2." http://tygert.com/id_doc.4.pdf.
|
120
|
+
|
121
|
+
.. [2] H. Cheng, Z. Gimbutas, P.G. Martinsson, V. Rokhlin. "On the
|
122
|
+
compression of low rank matrices." *SIAM J. Sci. Comput.* 26 (4): 1389--1404,
|
123
|
+
2005. :doi:`10.1137/030602678`.
|
124
|
+
|
125
|
+
.. [3] E. Liberty, F. Woolfe, P.G. Martinsson, V. Rokhlin, M.
|
126
|
+
Tygert. "Randomized algorithms for the low-rank approximation of matrices."
|
127
|
+
*Proc. Natl. Acad. Sci. U.S.A.* 104 (51): 20167--20172, 2007.
|
128
|
+
:doi:`10.1073/pnas.0709640104`.
|
129
|
+
|
130
|
+
.. [4] P.G. Martinsson, V. Rokhlin, M. Tygert. "A randomized
|
131
|
+
algorithm for the decomposition of matrices." *Appl. Comput. Harmon. Anal.* 30
|
132
|
+
(1): 47--68, 2011. :doi:`10.1016/j.acha.2010.02.003`.
|
133
|
+
|
134
|
+
.. [5] F. Woolfe, E. Liberty, V. Rokhlin, M. Tygert. "A fast
|
135
|
+
randomized algorithm for the approximation of matrices." *Appl. Comput.
|
136
|
+
Harmon. Anal.* 25 (3): 335--366, 2008. :doi:`10.1016/j.acha.2007.12.002`.
|
137
|
+
|
138
|
+
|
139
|
+
Tutorial
|
140
|
+
========
|
141
|
+
|
142
|
+
Initializing
|
143
|
+
------------
|
144
|
+
|
145
|
+
The first step is to import :mod:`scipy.linalg.interpolative` by issuing the
|
146
|
+
command:
|
147
|
+
|
148
|
+
>>> import scipy.linalg.interpolative as sli
|
149
|
+
|
150
|
+
Now let's build a matrix. For this, we consider a Hilbert matrix, which is well
|
151
|
+
know to have low rank:
|
152
|
+
|
153
|
+
>>> from scipy.linalg import hilbert
|
154
|
+
>>> n = 1000
|
155
|
+
>>> A = hilbert(n)
|
156
|
+
|
157
|
+
We can also do this explicitly via:
|
158
|
+
|
159
|
+
>>> import numpy as np
|
160
|
+
>>> n = 1000
|
161
|
+
>>> A = np.empty((n, n), order='F')
|
162
|
+
>>> for j in range(n):
|
163
|
+
... for i in range(n):
|
164
|
+
... A[i,j] = 1. / (i + j + 1)
|
165
|
+
|
166
|
+
Note the use of the flag ``order='F'`` in :func:`numpy.empty`. This
|
167
|
+
instantiates the matrix in Fortran-contiguous order and is important for
|
168
|
+
avoiding data copying when passing to the backend.
|
169
|
+
|
170
|
+
We then define multiplication routines for the matrix by regarding it as a
|
171
|
+
:class:`scipy.sparse.linalg.LinearOperator`:
|
172
|
+
|
173
|
+
>>> from scipy.sparse.linalg import aslinearoperator
|
174
|
+
>>> L = aslinearoperator(A)
|
175
|
+
|
176
|
+
This automatically sets up methods describing the action of the matrix and its
|
177
|
+
adjoint on a vector.
|
178
|
+
|
179
|
+
Computing an ID
|
180
|
+
---------------
|
181
|
+
|
182
|
+
We have several choices of algorithm to compute an ID. These fall largely
|
183
|
+
according to two dichotomies:
|
184
|
+
|
185
|
+
1. how the matrix is represented, i.e., via its entries or via its action on a
|
186
|
+
vector; and
|
187
|
+
2. whether to approximate it to a fixed relative precision or to a fixed rank.
|
188
|
+
|
189
|
+
We step through each choice in turn below.
|
190
|
+
|
191
|
+
In all cases, the ID is represented by three parameters:
|
192
|
+
|
193
|
+
1. a rank ``k``;
|
194
|
+
2. an index array ``idx``; and
|
195
|
+
3. interpolation coefficients ``proj``.
|
196
|
+
|
197
|
+
The ID is specified by the relation
|
198
|
+
``np.dot(A[:,idx[:k]], proj) == A[:,idx[k:]]``.
|
199
|
+
|
200
|
+
From matrix entries
|
201
|
+
...................
|
202
|
+
|
203
|
+
We first consider a matrix given in terms of its entries.
|
204
|
+
|
205
|
+
To compute an ID to a fixed precision, type:
|
206
|
+
|
207
|
+
>>> eps = 1e-3
|
208
|
+
>>> k, idx, proj = sli.interp_decomp(A, eps)
|
209
|
+
|
210
|
+
where ``eps < 1`` is the desired precision.
|
211
|
+
|
212
|
+
To compute an ID to a fixed rank, use:
|
213
|
+
|
214
|
+
>>> idx, proj = sli.interp_decomp(A, k)
|
215
|
+
|
216
|
+
where ``k >= 1`` is the desired rank.
|
217
|
+
|
218
|
+
Both algorithms use random sampling and are usually faster than the
|
219
|
+
corresponding older, deterministic algorithms, which can be accessed via the
|
220
|
+
commands:
|
221
|
+
|
222
|
+
>>> k, idx, proj = sli.interp_decomp(A, eps, rand=False)
|
223
|
+
|
224
|
+
and:
|
225
|
+
|
226
|
+
>>> idx, proj = sli.interp_decomp(A, k, rand=False)
|
227
|
+
|
228
|
+
respectively.
|
229
|
+
|
230
|
+
From matrix action
|
231
|
+
..................
|
232
|
+
|
233
|
+
Now consider a matrix given in terms of its action on a vector as a
|
234
|
+
:class:`scipy.sparse.linalg.LinearOperator`.
|
235
|
+
|
236
|
+
To compute an ID to a fixed precision, type:
|
237
|
+
|
238
|
+
>>> k, idx, proj = sli.interp_decomp(L, eps)
|
239
|
+
|
240
|
+
To compute an ID to a fixed rank, use:
|
241
|
+
|
242
|
+
>>> idx, proj = sli.interp_decomp(L, k)
|
243
|
+
|
244
|
+
These algorithms are randomized.
|
245
|
+
|
246
|
+
Reconstructing an ID
|
247
|
+
--------------------
|
248
|
+
|
249
|
+
The ID routines above do not output the skeleton and interpolation matrices
|
250
|
+
explicitly but instead return the relevant information in a more compact (and
|
251
|
+
sometimes more useful) form. To build these matrices, write:
|
252
|
+
|
253
|
+
>>> B = sli.reconstruct_skel_matrix(A, k, idx)
|
254
|
+
|
255
|
+
for the skeleton matrix and:
|
256
|
+
|
257
|
+
>>> P = sli.reconstruct_interp_matrix(idx, proj)
|
258
|
+
|
259
|
+
for the interpolation matrix. The ID approximation can then be computed as:
|
260
|
+
|
261
|
+
>>> C = np.dot(B, P)
|
262
|
+
|
263
|
+
This can also be constructed directly using:
|
264
|
+
|
265
|
+
>>> C = sli.reconstruct_matrix_from_id(B, idx, proj)
|
266
|
+
|
267
|
+
without having to first compute ``P``.
|
268
|
+
|
269
|
+
Alternatively, this can be done explicitly as well using:
|
270
|
+
|
271
|
+
>>> B = A[:,idx[:k]]
|
272
|
+
>>> P = np.hstack([np.eye(k), proj])[:,np.argsort(idx)]
|
273
|
+
>>> C = np.dot(B, P)
|
274
|
+
|
275
|
+
Computing an SVD
|
276
|
+
----------------
|
277
|
+
|
278
|
+
An ID can be converted to an SVD via the command:
|
279
|
+
|
280
|
+
>>> U, S, V = sli.id_to_svd(B, idx, proj)
|
281
|
+
|
282
|
+
The SVD approximation is then:
|
283
|
+
|
284
|
+
>>> approx = U @ np.diag(S) @ V.conj().T
|
285
|
+
|
286
|
+
The SVD can also be computed "fresh" by combining both the ID and conversion
|
287
|
+
steps into one command. Following the various ID algorithms above, there are
|
288
|
+
correspondingly various SVD algorithms that one can employ.
|
289
|
+
|
290
|
+
From matrix entries
|
291
|
+
...................
|
292
|
+
|
293
|
+
We consider first SVD algorithms for a matrix given in terms of its entries.
|
294
|
+
|
295
|
+
To compute an SVD to a fixed precision, type:
|
296
|
+
|
297
|
+
>>> U, S, V = sli.svd(A, eps)
|
298
|
+
|
299
|
+
To compute an SVD to a fixed rank, use:
|
300
|
+
|
301
|
+
>>> U, S, V = sli.svd(A, k)
|
302
|
+
|
303
|
+
Both algorithms use random sampling; for the deterministic versions, issue the
|
304
|
+
keyword ``rand=False`` as above.
|
305
|
+
|
306
|
+
From matrix action
|
307
|
+
..................
|
308
|
+
|
309
|
+
Now consider a matrix given in terms of its action on a vector.
|
310
|
+
|
311
|
+
To compute an SVD to a fixed precision, type:
|
312
|
+
|
313
|
+
>>> U, S, V = sli.svd(L, eps)
|
314
|
+
|
315
|
+
To compute an SVD to a fixed rank, use:
|
316
|
+
|
317
|
+
>>> U, S, V = sli.svd(L, k)
|
318
|
+
|
319
|
+
Utility routines
|
320
|
+
----------------
|
321
|
+
|
322
|
+
Several utility routines are also available.
|
323
|
+
|
324
|
+
To estimate the spectral norm of a matrix, use:
|
325
|
+
|
326
|
+
>>> snorm = sli.estimate_spectral_norm(A)
|
327
|
+
|
328
|
+
This algorithm is based on the randomized power method and thus requires only
|
329
|
+
matrix-vector products. The number of iterations to take can be set using the
|
330
|
+
keyword ``its`` (default: ``its=20``). The matrix is interpreted as a
|
331
|
+
:class:`scipy.sparse.linalg.LinearOperator`, but it is also valid to supply it
|
332
|
+
as a :class:`numpy.ndarray`, in which case it is trivially converted using
|
333
|
+
:func:`scipy.sparse.linalg.aslinearoperator`.
|
334
|
+
|
335
|
+
The same algorithm can also estimate the spectral norm of the difference of two
|
336
|
+
matrices ``A1`` and ``A2`` as follows:
|
337
|
+
|
338
|
+
>>> A1, A2 = A**2, A
|
339
|
+
>>> diff = sli.estimate_spectral_norm_diff(A1, A2)
|
340
|
+
|
341
|
+
This is often useful for checking the accuracy of a matrix approximation.
|
342
|
+
|
343
|
+
Some routines in :mod:`scipy.linalg.interpolative` require estimating the rank
|
344
|
+
of a matrix as well. This can be done with either:
|
345
|
+
|
346
|
+
>>> k = sli.estimate_rank(A, eps)
|
347
|
+
|
348
|
+
or:
|
349
|
+
|
350
|
+
>>> k = sli.estimate_rank(L, eps)
|
351
|
+
|
352
|
+
depending on the representation. The parameter ``eps`` controls the definition
|
353
|
+
of the numerical rank.
|
354
|
+
|
355
|
+
Finally, the random number generation required for all randomized routines can
|
356
|
+
be controlled via providing NumPy pseudo-random generators with a fixed seed. See
|
357
|
+
:class:`numpy.random.Generator` and :func:`numpy.random.default_rng` for more details.
|
358
|
+
|
359
|
+
Remarks
|
360
|
+
-------
|
361
|
+
|
362
|
+
The above functions all automatically detect the appropriate interface and work
|
363
|
+
with both real and complex data types, passing input arguments to the proper
|
364
|
+
backend routine.
|
365
|
+
|
366
|
+
"""
|
367
|
+
|
368
|
+
import scipy.linalg._decomp_interpolative as _backend
|
369
|
+
import numpy as np
|
370
|
+
import warnings
|
371
|
+
|
372
|
+
__all__ = [
|
373
|
+
'estimate_rank',
|
374
|
+
'estimate_spectral_norm',
|
375
|
+
'estimate_spectral_norm_diff',
|
376
|
+
'id_to_svd',
|
377
|
+
'interp_decomp',
|
378
|
+
'rand',
|
379
|
+
'reconstruct_interp_matrix',
|
380
|
+
'reconstruct_matrix_from_id',
|
381
|
+
'reconstruct_skel_matrix',
|
382
|
+
'seed',
|
383
|
+
'svd',
|
384
|
+
]
|
385
|
+
|
386
|
+
_DTYPE_ERROR = ValueError("invalid input dtype (input must be float64 or complex128)")
|
387
|
+
_TYPE_ERROR = TypeError("invalid input type (must be array or LinearOperator)")
|
388
|
+
|
389
|
+
|
390
|
+
def _C_contiguous_copy(A):
|
391
|
+
"""
|
392
|
+
Same as np.ascontiguousarray, but ensure a copy
|
393
|
+
"""
|
394
|
+
A = np.asarray(A)
|
395
|
+
if A.flags.c_contiguous:
|
396
|
+
A = A.copy()
|
397
|
+
else:
|
398
|
+
A = np.ascontiguousarray(A)
|
399
|
+
return A
|
400
|
+
|
401
|
+
|
402
|
+
def _is_real(A):
|
403
|
+
try:
|
404
|
+
if A.dtype == np.complex128:
|
405
|
+
return False
|
406
|
+
elif A.dtype == np.float64:
|
407
|
+
return True
|
408
|
+
else:
|
409
|
+
raise _DTYPE_ERROR
|
410
|
+
except AttributeError as e:
|
411
|
+
raise _TYPE_ERROR from e
|
412
|
+
|
413
|
+
|
414
|
+
def seed(seed=None):
|
415
|
+
"""
|
416
|
+
This function, historically, used to set the seed of the randomization algorithms
|
417
|
+
used in the `scipy.linalg.interpolative` functions written in Fortran77.
|
418
|
+
|
419
|
+
The library has been ported to Python and now the functions use the native NumPy
|
420
|
+
generators and this function has no content and returns None. Thus this function
|
421
|
+
should not be used and will be removed in SciPy version 1.17.0.
|
422
|
+
"""
|
423
|
+
warnings.warn("`scipy.linalg.interpolative.seed` is deprecated and will be "
|
424
|
+
"removed in SciPy 1.17.0.", DeprecationWarning, stacklevel=3)
|
425
|
+
|
426
|
+
|
427
|
+
def rand(*shape):
|
428
|
+
"""
|
429
|
+
This function, historically, used to generate uniformly distributed random number
|
430
|
+
for the randomization algorithms used in the `scipy.linalg.interpolative` functions
|
431
|
+
written in Fortran77.
|
432
|
+
|
433
|
+
The library has been ported to Python and now the functions use the native NumPy
|
434
|
+
generators. Thus this function should not be used and will be removed in the
|
435
|
+
SciPy version 1.17.0.
|
436
|
+
|
437
|
+
If pseudo-random numbers are needed, NumPy pseudo-random generators should be used
|
438
|
+
instead.
|
439
|
+
|
440
|
+
Parameters
|
441
|
+
----------
|
442
|
+
*shape
|
443
|
+
Shape of output array
|
444
|
+
|
445
|
+
"""
|
446
|
+
warnings.warn("`scipy.linalg.interpolative.rand` is deprecated and will be "
|
447
|
+
"removed in SciPy 1.17.0.", DeprecationWarning, stacklevel=3)
|
448
|
+
rng = np.random.default_rng()
|
449
|
+
return rng.uniform(low=0., high=1.0, size=shape)
|
450
|
+
|
451
|
+
|
452
|
+
def interp_decomp(A, eps_or_k, rand=True, rng=None):
|
453
|
+
"""
|
454
|
+
Compute ID of a matrix.
|
455
|
+
|
456
|
+
An ID of a matrix `A` is a factorization defined by a rank `k`, a column
|
457
|
+
index array `idx`, and interpolation coefficients `proj` such that::
|
458
|
+
|
459
|
+
numpy.dot(A[:,idx[:k]], proj) = A[:,idx[k:]]
|
460
|
+
|
461
|
+
The original matrix can then be reconstructed as::
|
462
|
+
|
463
|
+
numpy.hstack([A[:,idx[:k]],
|
464
|
+
numpy.dot(A[:,idx[:k]], proj)]
|
465
|
+
)[:,numpy.argsort(idx)]
|
466
|
+
|
467
|
+
or via the routine :func:`reconstruct_matrix_from_id`. This can
|
468
|
+
equivalently be written as::
|
469
|
+
|
470
|
+
numpy.dot(A[:,idx[:k]],
|
471
|
+
numpy.hstack([numpy.eye(k), proj])
|
472
|
+
)[:,np.argsort(idx)]
|
473
|
+
|
474
|
+
in terms of the skeleton and interpolation matrices::
|
475
|
+
|
476
|
+
B = A[:,idx[:k]]
|
477
|
+
|
478
|
+
and::
|
479
|
+
|
480
|
+
P = numpy.hstack([numpy.eye(k), proj])[:,np.argsort(idx)]
|
481
|
+
|
482
|
+
respectively. See also :func:`reconstruct_interp_matrix` and
|
483
|
+
:func:`reconstruct_skel_matrix`.
|
484
|
+
|
485
|
+
The ID can be computed to any relative precision or rank (depending on the
|
486
|
+
value of `eps_or_k`). If a precision is specified (`eps_or_k < 1`), then
|
487
|
+
this function has the output signature::
|
488
|
+
|
489
|
+
k, idx, proj = interp_decomp(A, eps_or_k)
|
490
|
+
|
491
|
+
Otherwise, if a rank is specified (`eps_or_k >= 1`), then the output
|
492
|
+
signature is::
|
493
|
+
|
494
|
+
idx, proj = interp_decomp(A, eps_or_k)
|
495
|
+
|
496
|
+
.. This function automatically detects the form of the input parameters
|
497
|
+
and passes them to the appropriate backend. For details, see
|
498
|
+
:func:`_backend.iddp_id`, :func:`_backend.iddp_aid`,
|
499
|
+
:func:`_backend.iddp_rid`, :func:`_backend.iddr_id`,
|
500
|
+
:func:`_backend.iddr_aid`, :func:`_backend.iddr_rid`,
|
501
|
+
:func:`_backend.idzp_id`, :func:`_backend.idzp_aid`,
|
502
|
+
:func:`_backend.idzp_rid`, :func:`_backend.idzr_id`,
|
503
|
+
:func:`_backend.idzr_aid`, and :func:`_backend.idzr_rid`.
|
504
|
+
|
505
|
+
Parameters
|
506
|
+
----------
|
507
|
+
A : :class:`numpy.ndarray` or :class:`scipy.sparse.linalg.LinearOperator` with `rmatvec`
|
508
|
+
Matrix to be factored
|
509
|
+
eps_or_k : float or int
|
510
|
+
Relative error (if ``eps_or_k < 1``) or rank (if ``eps_or_k >= 1``) of
|
511
|
+
approximation.
|
512
|
+
rand : bool, optional
|
513
|
+
Whether to use random sampling if `A` is of type :class:`numpy.ndarray`
|
514
|
+
(randomized algorithms are always used if `A` is of type
|
515
|
+
:class:`scipy.sparse.linalg.LinearOperator`).
|
516
|
+
rng : `numpy.random.Generator`, optional
|
517
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
518
|
+
`numpy.random.Generator` is created using entropy from the
|
519
|
+
operating system. Types other than `numpy.random.Generator` are
|
520
|
+
passed to `numpy.random.default_rng` to instantiate a ``Generator``.
|
521
|
+
If `rand` is ``False``, the argument is ignored.
|
522
|
+
|
523
|
+
Returns
|
524
|
+
-------
|
525
|
+
k : int
|
526
|
+
Rank required to achieve specified relative precision if
|
527
|
+
``eps_or_k < 1``.
|
528
|
+
idx : :class:`numpy.ndarray`
|
529
|
+
Column index array.
|
530
|
+
proj : :class:`numpy.ndarray`
|
531
|
+
Interpolation coefficients.
|
532
|
+
""" # numpy/numpydoc#87 # noqa: E501
|
533
|
+
from scipy.sparse.linalg import LinearOperator
|
534
|
+
rng = np.random.default_rng(rng)
|
535
|
+
real = _is_real(A)
|
536
|
+
|
537
|
+
if isinstance(A, np.ndarray):
|
538
|
+
A = _C_contiguous_copy(A)
|
539
|
+
if eps_or_k < 1:
|
540
|
+
eps = eps_or_k
|
541
|
+
if rand:
|
542
|
+
if real:
|
543
|
+
k, idx, proj = _backend.iddp_aid(A, eps, rng=rng)
|
544
|
+
else:
|
545
|
+
k, idx, proj = _backend.idzp_aid(A, eps, rng=rng)
|
546
|
+
else:
|
547
|
+
if real:
|
548
|
+
k, idx, proj = _backend.iddp_id(A, eps)
|
549
|
+
else:
|
550
|
+
k, idx, proj = _backend.idzp_id(A, eps)
|
551
|
+
return k, idx, proj
|
552
|
+
else:
|
553
|
+
k = int(eps_or_k)
|
554
|
+
if rand:
|
555
|
+
if real:
|
556
|
+
idx, proj = _backend.iddr_aid(A, k, rng=rng)
|
557
|
+
else:
|
558
|
+
idx, proj = _backend.idzr_aid(A, k, rng=rng)
|
559
|
+
else:
|
560
|
+
if real:
|
561
|
+
idx, proj = _backend.iddr_id(A, k)
|
562
|
+
else:
|
563
|
+
idx, proj = _backend.idzr_id(A, k)
|
564
|
+
return idx, proj
|
565
|
+
elif isinstance(A, LinearOperator):
|
566
|
+
|
567
|
+
if eps_or_k < 1:
|
568
|
+
eps = eps_or_k
|
569
|
+
if real:
|
570
|
+
k, idx, proj = _backend.iddp_rid(A, eps, rng=rng)
|
571
|
+
else:
|
572
|
+
k, idx, proj = _backend.idzp_rid(A, eps, rng=rng)
|
573
|
+
return k, idx, proj
|
574
|
+
else:
|
575
|
+
k = int(eps_or_k)
|
576
|
+
if real:
|
577
|
+
idx, proj = _backend.iddr_rid(A, k, rng=rng)
|
578
|
+
else:
|
579
|
+
idx, proj = _backend.idzr_rid(A, k, rng=rng)
|
580
|
+
return idx, proj
|
581
|
+
else:
|
582
|
+
raise _TYPE_ERROR
|
583
|
+
|
584
|
+
|
585
|
+
def reconstruct_matrix_from_id(B, idx, proj):
|
586
|
+
"""
|
587
|
+
Reconstruct matrix from its ID.
|
588
|
+
|
589
|
+
A matrix `A` with skeleton matrix `B` and ID indices and coefficients `idx`
|
590
|
+
and `proj`, respectively, can be reconstructed as::
|
591
|
+
|
592
|
+
numpy.hstack([B, numpy.dot(B, proj)])[:,numpy.argsort(idx)]
|
593
|
+
|
594
|
+
See also :func:`reconstruct_interp_matrix` and
|
595
|
+
:func:`reconstruct_skel_matrix`.
|
596
|
+
|
597
|
+
.. This function automatically detects the matrix data type and calls the
|
598
|
+
appropriate backend. For details, see :func:`_backend.idd_reconid` and
|
599
|
+
:func:`_backend.idz_reconid`.
|
600
|
+
|
601
|
+
Parameters
|
602
|
+
----------
|
603
|
+
B : :class:`numpy.ndarray`
|
604
|
+
Skeleton matrix.
|
605
|
+
idx : :class:`numpy.ndarray`
|
606
|
+
Column index array.
|
607
|
+
proj : :class:`numpy.ndarray`
|
608
|
+
Interpolation coefficients.
|
609
|
+
|
610
|
+
Returns
|
611
|
+
-------
|
612
|
+
:class:`numpy.ndarray`
|
613
|
+
Reconstructed matrix.
|
614
|
+
"""
|
615
|
+
if _is_real(B):
|
616
|
+
return _backend.idd_reconid(B, idx, proj)
|
617
|
+
else:
|
618
|
+
return _backend.idz_reconid(B, idx, proj)
|
619
|
+
|
620
|
+
|
621
|
+
def reconstruct_interp_matrix(idx, proj):
|
622
|
+
"""
|
623
|
+
Reconstruct interpolation matrix from ID.
|
624
|
+
|
625
|
+
The interpolation matrix can be reconstructed from the ID indices and
|
626
|
+
coefficients `idx` and `proj`, respectively, as::
|
627
|
+
|
628
|
+
P = numpy.hstack([numpy.eye(proj.shape[0]), proj])[:,numpy.argsort(idx)]
|
629
|
+
|
630
|
+
The original matrix can then be reconstructed from its skeleton matrix ``B``
|
631
|
+
via ``A = B @ P``
|
632
|
+
|
633
|
+
See also :func:`reconstruct_matrix_from_id` and
|
634
|
+
:func:`reconstruct_skel_matrix`.
|
635
|
+
|
636
|
+
.. This function automatically detects the matrix data type and calls the
|
637
|
+
appropriate backend. For details, see :func:`_backend.idd_reconint` and
|
638
|
+
:func:`_backend.idz_reconint`.
|
639
|
+
|
640
|
+
Parameters
|
641
|
+
----------
|
642
|
+
idx : :class:`numpy.ndarray`
|
643
|
+
1D column index array.
|
644
|
+
proj : :class:`numpy.ndarray`
|
645
|
+
Interpolation coefficients.
|
646
|
+
|
647
|
+
Returns
|
648
|
+
-------
|
649
|
+
:class:`numpy.ndarray`
|
650
|
+
Interpolation matrix.
|
651
|
+
"""
|
652
|
+
n, krank = len(idx), proj.shape[0]
|
653
|
+
if _is_real(proj):
|
654
|
+
p = np.zeros([krank, n], dtype=np.float64)
|
655
|
+
else:
|
656
|
+
p = np.zeros([krank, n], dtype=np.complex128)
|
657
|
+
|
658
|
+
for ci in range(krank):
|
659
|
+
p[ci, idx[ci]] = 1.0
|
660
|
+
p[:, idx[krank:]] = proj[:, :]
|
661
|
+
|
662
|
+
return p
|
663
|
+
|
664
|
+
|
665
|
+
def reconstruct_skel_matrix(A, k, idx):
|
666
|
+
"""
|
667
|
+
Reconstruct skeleton matrix from ID.
|
668
|
+
|
669
|
+
The skeleton matrix can be reconstructed from the original matrix `A` and its
|
670
|
+
ID rank and indices `k` and `idx`, respectively, as::
|
671
|
+
|
672
|
+
B = A[:,idx[:k]]
|
673
|
+
|
674
|
+
The original matrix can then be reconstructed via::
|
675
|
+
|
676
|
+
numpy.hstack([B, numpy.dot(B, proj)])[:,numpy.argsort(idx)]
|
677
|
+
|
678
|
+
See also :func:`reconstruct_matrix_from_id` and
|
679
|
+
:func:`reconstruct_interp_matrix`.
|
680
|
+
|
681
|
+
.. This function automatically detects the matrix data type and calls the
|
682
|
+
appropriate backend. For details, see :func:`_backend.idd_copycols` and
|
683
|
+
:func:`_backend.idz_copycols`.
|
684
|
+
|
685
|
+
Parameters
|
686
|
+
----------
|
687
|
+
A : :class:`numpy.ndarray`
|
688
|
+
Original matrix.
|
689
|
+
k : int
|
690
|
+
Rank of ID.
|
691
|
+
idx : :class:`numpy.ndarray`
|
692
|
+
Column index array.
|
693
|
+
|
694
|
+
Returns
|
695
|
+
-------
|
696
|
+
:class:`numpy.ndarray`
|
697
|
+
Skeleton matrix.
|
698
|
+
"""
|
699
|
+
return A[:, idx[:k]]
|
700
|
+
|
701
|
+
|
702
|
+
def id_to_svd(B, idx, proj):
|
703
|
+
"""
|
704
|
+
Convert ID to SVD.
|
705
|
+
|
706
|
+
The SVD reconstruction of a matrix with skeleton matrix `B` and ID indices and
|
707
|
+
coefficients `idx` and `proj`, respectively, is::
|
708
|
+
|
709
|
+
U, S, V = id_to_svd(B, idx, proj)
|
710
|
+
A = numpy.dot(U, numpy.dot(numpy.diag(S), V.conj().T))
|
711
|
+
|
712
|
+
See also :func:`svd`.
|
713
|
+
|
714
|
+
.. This function automatically detects the matrix data type and calls the
|
715
|
+
appropriate backend. For details, see :func:`_backend.idd_id2svd` and
|
716
|
+
:func:`_backend.idz_id2svd`.
|
717
|
+
|
718
|
+
Parameters
|
719
|
+
----------
|
720
|
+
B : :class:`numpy.ndarray`
|
721
|
+
Skeleton matrix.
|
722
|
+
idx : :class:`numpy.ndarray`
|
723
|
+
1D column index array.
|
724
|
+
proj : :class:`numpy.ndarray`
|
725
|
+
Interpolation coefficients.
|
726
|
+
|
727
|
+
Returns
|
728
|
+
-------
|
729
|
+
U : :class:`numpy.ndarray`
|
730
|
+
Left singular vectors.
|
731
|
+
S : :class:`numpy.ndarray`
|
732
|
+
Singular values.
|
733
|
+
V : :class:`numpy.ndarray`
|
734
|
+
Right singular vectors.
|
735
|
+
"""
|
736
|
+
B = _C_contiguous_copy(B)
|
737
|
+
if _is_real(B):
|
738
|
+
U, S, V = _backend.idd_id2svd(B, idx, proj)
|
739
|
+
else:
|
740
|
+
U, S, V = _backend.idz_id2svd(B, idx, proj)
|
741
|
+
|
742
|
+
return U, S, V
|
743
|
+
|
744
|
+
|
745
|
+
def estimate_spectral_norm(A, its=20, rng=None):
|
746
|
+
"""
|
747
|
+
Estimate spectral norm of a matrix by the randomized power method.
|
748
|
+
|
749
|
+
.. This function automatically detects the matrix data type and calls the
|
750
|
+
appropriate backend. For details, see :func:`_backend.idd_snorm` and
|
751
|
+
:func:`_backend.idz_snorm`.
|
752
|
+
|
753
|
+
Parameters
|
754
|
+
----------
|
755
|
+
A : :class:`scipy.sparse.linalg.LinearOperator`
|
756
|
+
Matrix given as a :class:`scipy.sparse.linalg.LinearOperator` with the
|
757
|
+
`matvec` and `rmatvec` methods (to apply the matrix and its adjoint).
|
758
|
+
its : int, optional
|
759
|
+
Number of power method iterations.
|
760
|
+
rng : `numpy.random.Generator`, optional
|
761
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
762
|
+
`numpy.random.Generator` is created using entropy from the
|
763
|
+
operating system. Types other than `numpy.random.Generator` are
|
764
|
+
passed to `numpy.random.default_rng` to instantiate a ``Generator``.
|
765
|
+
If `rand` is ``False``, the argument is ignored.
|
766
|
+
|
767
|
+
Returns
|
768
|
+
-------
|
769
|
+
float
|
770
|
+
Spectral norm estimate.
|
771
|
+
"""
|
772
|
+
from scipy.sparse.linalg import aslinearoperator
|
773
|
+
rng = np.random.default_rng(rng)
|
774
|
+
A = aslinearoperator(A)
|
775
|
+
|
776
|
+
if _is_real(A):
|
777
|
+
return _backend.idd_snorm(A, its=its, rng=rng)
|
778
|
+
else:
|
779
|
+
return _backend.idz_snorm(A, its=its, rng=rng)
|
780
|
+
|
781
|
+
|
782
|
+
def estimate_spectral_norm_diff(A, B, its=20, rng=None):
|
783
|
+
"""
|
784
|
+
Estimate spectral norm of the difference of two matrices by the randomized
|
785
|
+
power method.
|
786
|
+
|
787
|
+
.. This function automatically detects the matrix data type and calls the
|
788
|
+
appropriate backend. For details, see :func:`_backend.idd_diffsnorm` and
|
789
|
+
:func:`_backend.idz_diffsnorm`.
|
790
|
+
|
791
|
+
Parameters
|
792
|
+
----------
|
793
|
+
A : :class:`scipy.sparse.linalg.LinearOperator`
|
794
|
+
First matrix given as a :class:`scipy.sparse.linalg.LinearOperator` with the
|
795
|
+
`matvec` and `rmatvec` methods (to apply the matrix and its adjoint).
|
796
|
+
B : :class:`scipy.sparse.linalg.LinearOperator`
|
797
|
+
Second matrix given as a :class:`scipy.sparse.linalg.LinearOperator` with
|
798
|
+
the `matvec` and `rmatvec` methods (to apply the matrix and its adjoint).
|
799
|
+
its : int, optional
|
800
|
+
Number of power method iterations.
|
801
|
+
rng : `numpy.random.Generator`, optional
|
802
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
803
|
+
`numpy.random.Generator` is created using entropy from the
|
804
|
+
operating system. Types other than `numpy.random.Generator` are
|
805
|
+
passed to `numpy.random.default_rng` to instantiate a ``Generator``.
|
806
|
+
If `rand` is ``False``, the argument is ignored.
|
807
|
+
|
808
|
+
Returns
|
809
|
+
-------
|
810
|
+
float
|
811
|
+
Spectral norm estimate of matrix difference.
|
812
|
+
"""
|
813
|
+
from scipy.sparse.linalg import aslinearoperator
|
814
|
+
rng = np.random.default_rng(rng)
|
815
|
+
A = aslinearoperator(A)
|
816
|
+
B = aslinearoperator(B)
|
817
|
+
|
818
|
+
if _is_real(A):
|
819
|
+
return _backend.idd_diffsnorm(A, B, its=its, rng=rng)
|
820
|
+
else:
|
821
|
+
return _backend.idz_diffsnorm(A, B, its=its, rng=rng)
|
822
|
+
|
823
|
+
|
824
|
+
def svd(A, eps_or_k, rand=True, rng=None):
|
825
|
+
"""
|
826
|
+
Compute SVD of a matrix via an ID.
|
827
|
+
|
828
|
+
An SVD of a matrix `A` is a factorization::
|
829
|
+
|
830
|
+
A = U @ np.diag(S) @ V.conj().T
|
831
|
+
|
832
|
+
where `U` and `V` have orthonormal columns and `S` is nonnegative.
|
833
|
+
|
834
|
+
The SVD can be computed to any relative precision or rank (depending on the
|
835
|
+
value of `eps_or_k`).
|
836
|
+
|
837
|
+
See also :func:`interp_decomp` and :func:`id_to_svd`.
|
838
|
+
|
839
|
+
.. This function automatically detects the form of the input parameters and
|
840
|
+
passes them to the appropriate backend. For details, see
|
841
|
+
:func:`_backend.iddp_svd`, :func:`_backend.iddp_asvd`,
|
842
|
+
:func:`_backend.iddp_rsvd`, :func:`_backend.iddr_svd`,
|
843
|
+
:func:`_backend.iddr_asvd`, :func:`_backend.iddr_rsvd`,
|
844
|
+
:func:`_backend.idzp_svd`, :func:`_backend.idzp_asvd`,
|
845
|
+
:func:`_backend.idzp_rsvd`, :func:`_backend.idzr_svd`,
|
846
|
+
:func:`_backend.idzr_asvd`, and :func:`_backend.idzr_rsvd`.
|
847
|
+
|
848
|
+
Parameters
|
849
|
+
----------
|
850
|
+
A : :class:`numpy.ndarray` or :class:`scipy.sparse.linalg.LinearOperator`
|
851
|
+
Matrix to be factored, given as either a :class:`numpy.ndarray` or a
|
852
|
+
:class:`scipy.sparse.linalg.LinearOperator` with the `matvec` and
|
853
|
+
`rmatvec` methods (to apply the matrix and its adjoint).
|
854
|
+
eps_or_k : float or int
|
855
|
+
Relative error (if ``eps_or_k < 1``) or rank (if ``eps_or_k >= 1``) of
|
856
|
+
approximation.
|
857
|
+
rand : bool, optional
|
858
|
+
Whether to use random sampling if `A` is of type :class:`numpy.ndarray`
|
859
|
+
(randomized algorithms are always used if `A` is of type
|
860
|
+
:class:`scipy.sparse.linalg.LinearOperator`).
|
861
|
+
rng : `numpy.random.Generator`, optional
|
862
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
863
|
+
`numpy.random.Generator` is created using entropy from the
|
864
|
+
operating system. Types other than `numpy.random.Generator` are
|
865
|
+
passed to `numpy.random.default_rng` to instantiate a ``Generator``.
|
866
|
+
If `rand` is ``False``, the argument is ignored.
|
867
|
+
|
868
|
+
Returns
|
869
|
+
-------
|
870
|
+
U : :class:`numpy.ndarray`
|
871
|
+
2D array of left singular vectors.
|
872
|
+
S : :class:`numpy.ndarray`
|
873
|
+
1D array of singular values.
|
874
|
+
V : :class:`numpy.ndarray`
|
875
|
+
2D array right singular vectors.
|
876
|
+
"""
|
877
|
+
from scipy.sparse.linalg import LinearOperator
|
878
|
+
rng = np.random.default_rng(rng)
|
879
|
+
|
880
|
+
real = _is_real(A)
|
881
|
+
|
882
|
+
if isinstance(A, np.ndarray):
|
883
|
+
A = _C_contiguous_copy(A)
|
884
|
+
if eps_or_k < 1:
|
885
|
+
eps = eps_or_k
|
886
|
+
if rand:
|
887
|
+
if real:
|
888
|
+
U, S, V = _backend.iddp_asvd(A, eps, rng=rng)
|
889
|
+
else:
|
890
|
+
U, S, V = _backend.idzp_asvd(A, eps, rng=rng)
|
891
|
+
else:
|
892
|
+
if real:
|
893
|
+
U, S, V = _backend.iddp_svd(A, eps)
|
894
|
+
V = V.T.conj()
|
895
|
+
else:
|
896
|
+
U, S, V = _backend.idzp_svd(A, eps)
|
897
|
+
V = V.T.conj()
|
898
|
+
else:
|
899
|
+
k = int(eps_or_k)
|
900
|
+
if k > min(A.shape):
|
901
|
+
raise ValueError(f"Approximation rank {k} exceeds min(A.shape) = "
|
902
|
+
f" {min(A.shape)} ")
|
903
|
+
if rand:
|
904
|
+
if real:
|
905
|
+
U, S, V = _backend.iddr_asvd(A, k, rng=rng)
|
906
|
+
else:
|
907
|
+
U, S, V = _backend.idzr_asvd(A, k, rng=rng)
|
908
|
+
else:
|
909
|
+
if real:
|
910
|
+
U, S, V = _backend.iddr_svd(A, k)
|
911
|
+
V = V.T.conj()
|
912
|
+
else:
|
913
|
+
U, S, V = _backend.idzr_svd(A, k)
|
914
|
+
V = V.T.conj()
|
915
|
+
elif isinstance(A, LinearOperator):
|
916
|
+
if eps_or_k < 1:
|
917
|
+
eps = eps_or_k
|
918
|
+
if real:
|
919
|
+
U, S, V = _backend.iddp_rsvd(A, eps, rng=rng)
|
920
|
+
else:
|
921
|
+
U, S, V = _backend.idzp_rsvd(A, eps, rng=rng)
|
922
|
+
else:
|
923
|
+
k = int(eps_or_k)
|
924
|
+
if real:
|
925
|
+
U, S, V = _backend.iddr_rsvd(A, k, rng=rng)
|
926
|
+
else:
|
927
|
+
U, S, V = _backend.idzr_rsvd(A, k, rng=rng)
|
928
|
+
else:
|
929
|
+
raise _TYPE_ERROR
|
930
|
+
return U, S, V
|
931
|
+
|
932
|
+
|
933
|
+
def estimate_rank(A, eps, rng=None):
|
934
|
+
"""
|
935
|
+
Estimate matrix rank to a specified relative precision using randomized
|
936
|
+
methods.
|
937
|
+
|
938
|
+
The matrix `A` can be given as either a :class:`numpy.ndarray` or a
|
939
|
+
:class:`scipy.sparse.linalg.LinearOperator`, with different algorithms used
|
940
|
+
for each case. If `A` is of type :class:`numpy.ndarray`, then the output
|
941
|
+
rank is typically about 8 higher than the actual numerical rank.
|
942
|
+
|
943
|
+
.. This function automatically detects the form of the input parameters and
|
944
|
+
passes them to the appropriate backend. For details,
|
945
|
+
see :func:`_backend.idd_estrank`, :func:`_backend.idd_findrank`,
|
946
|
+
:func:`_backend.idz_estrank`, and :func:`_backend.idz_findrank`.
|
947
|
+
|
948
|
+
Parameters
|
949
|
+
----------
|
950
|
+
A : :class:`numpy.ndarray` or :class:`scipy.sparse.linalg.LinearOperator`
|
951
|
+
Matrix whose rank is to be estimated, given as either a
|
952
|
+
:class:`numpy.ndarray` or a :class:`scipy.sparse.linalg.LinearOperator`
|
953
|
+
with the `rmatvec` method (to apply the matrix adjoint).
|
954
|
+
eps : float
|
955
|
+
Relative error for numerical rank definition.
|
956
|
+
rng : `numpy.random.Generator`, optional
|
957
|
+
Pseudorandom number generator state. When `rng` is None, a new
|
958
|
+
`numpy.random.Generator` is created using entropy from the
|
959
|
+
operating system. Types other than `numpy.random.Generator` are
|
960
|
+
passed to `numpy.random.default_rng` to instantiate a ``Generator``.
|
961
|
+
If `rand` is ``False``, the argument is ignored.
|
962
|
+
|
963
|
+
Returns
|
964
|
+
-------
|
965
|
+
int
|
966
|
+
Estimated matrix rank.
|
967
|
+
"""
|
968
|
+
from scipy.sparse.linalg import LinearOperator
|
969
|
+
|
970
|
+
rng = np.random.default_rng(rng)
|
971
|
+
real = _is_real(A)
|
972
|
+
|
973
|
+
if isinstance(A, np.ndarray):
|
974
|
+
A = _C_contiguous_copy(A)
|
975
|
+
if real:
|
976
|
+
rank, _ = _backend.idd_estrank(A, eps, rng=rng)
|
977
|
+
else:
|
978
|
+
rank, _ = _backend.idz_estrank(A, eps, rng=rng)
|
979
|
+
if rank == 0:
|
980
|
+
# special return value for nearly full rank
|
981
|
+
rank = min(A.shape)
|
982
|
+
return rank
|
983
|
+
elif isinstance(A, LinearOperator):
|
984
|
+
if real:
|
985
|
+
return _backend.idd_findrank(A, eps, rng=rng)[0]
|
986
|
+
else:
|
987
|
+
return _backend.idz_findrank(A, eps, rng=rng)[0]
|
988
|
+
else:
|
989
|
+
raise _TYPE_ERROR
|