scipy 1.16.2__cp314-cp314-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +161 -0
- scipy/__init__.py +150 -0
- scipy/_cyutility.cp314-win_arm64.lib +0 -0
- scipy/_cyutility.cp314-win_arm64.pyd +0 -0
- scipy/_distributor_init.py +18 -0
- scipy/_lib/__init__.py +14 -0
- scipy/_lib/_array_api.py +931 -0
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_array_api_no_0d.py +103 -0
- scipy/_lib/_bunch.py +229 -0
- scipy/_lib/_ccallback.py +251 -0
- scipy/_lib/_ccallback_c.cp314-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_disjoint_set.py +254 -0
- scipy/_lib/_docscrape.py +761 -0
- scipy/_lib/_elementwise_iterative_method.py +346 -0
- scipy/_lib/_fpumode.cp314-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_gcutils.py +105 -0
- scipy/_lib/_pep440.py +487 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp314-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_testutils.py +373 -0
- scipy/_lib/_threadsafety.py +58 -0
- scipy/_lib/_tmpdirs.py +86 -0
- scipy/_lib/_uarray/LICENSE +29 -0
- scipy/_lib/_uarray/__init__.py +116 -0
- scipy/_lib/_uarray/_backend.py +707 -0
- scipy/_lib/_uarray/_uarray.cp314-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp314-win_arm64.pyd +0 -0
- scipy/_lib/_util.py +1283 -0
- scipy/_lib/array_api_compat/__init__.py +22 -0
- scipy/_lib/array_api_compat/_internal.py +59 -0
- scipy/_lib/array_api_compat/common/__init__.py +1 -0
- scipy/_lib/array_api_compat/common/_aliases.py +727 -0
- scipy/_lib/array_api_compat/common/_fft.py +213 -0
- scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
- scipy/_lib/array_api_compat/common/_linalg.py +232 -0
- scipy/_lib/array_api_compat/common/_typing.py +192 -0
- scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
- scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
- scipy/_lib/array_api_compat/cupy/_info.py +336 -0
- scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
- scipy/_lib/array_api_compat/cupy/fft.py +36 -0
- scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
- scipy/_lib/array_api_compat/dask/__init__.py +0 -0
- scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
- scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
- scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
- scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
- scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
- scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
- scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
- scipy/_lib/array_api_compat/numpy/_info.py +366 -0
- scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
- scipy/_lib/array_api_compat/numpy/fft.py +35 -0
- scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
- scipy/_lib/array_api_compat/torch/__init__.py +22 -0
- scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
- scipy/_lib/array_api_compat/torch/_info.py +369 -0
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +85 -0
- scipy/_lib/array_api_compat/torch/linalg.py +121 -0
- scipy/_lib/array_api_extra/__init__.py +38 -0
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/cobyqa/__init__.py +20 -0
- scipy/_lib/cobyqa/framework.py +1240 -0
- scipy/_lib/cobyqa/main.py +1506 -0
- scipy/_lib/cobyqa/models.py +1529 -0
- scipy/_lib/cobyqa/problem.py +1296 -0
- scipy/_lib/cobyqa/settings.py +132 -0
- scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
- scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
- scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
- scipy/_lib/cobyqa/utils/__init__.py +18 -0
- scipy/_lib/cobyqa/utils/exceptions.py +22 -0
- scipy/_lib/cobyqa/utils/math.py +77 -0
- scipy/_lib/cobyqa/utils/versions.py +67 -0
- scipy/_lib/decorator.py +399 -0
- scipy/_lib/deprecation.py +274 -0
- scipy/_lib/doccer.py +366 -0
- scipy/_lib/messagestream.cp314-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp314-win_arm64.pyd +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/__init__.py +0 -0
- scipy/_lib/tests/test__gcutils.py +110 -0
- scipy/_lib/tests/test__pep440.py +67 -0
- scipy/_lib/tests/test__testutils.py +32 -0
- scipy/_lib/tests/test__threadsafety.py +51 -0
- scipy/_lib/tests/test__util.py +641 -0
- scipy/_lib/tests/test_array_api.py +322 -0
- scipy/_lib/tests/test_bunch.py +169 -0
- scipy/_lib/tests/test_ccallback.py +196 -0
- scipy/_lib/tests/test_config.py +45 -0
- scipy/_lib/tests/test_deprecation.py +10 -0
- scipy/_lib/tests/test_doccer.py +143 -0
- scipy/_lib/tests/test_import_cycles.py +18 -0
- scipy/_lib/tests/test_public_api.py +482 -0
- scipy/_lib/tests/test_scipy_version.py +28 -0
- scipy/_lib/tests/test_tmpdirs.py +48 -0
- scipy/_lib/tests/test_warnings.py +137 -0
- scipy/_lib/uarray.py +31 -0
- scipy/cluster/__init__.py +31 -0
- scipy/cluster/_hierarchy.cp314-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp314-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp314-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp314-win_arm64.pyd +0 -0
- scipy/cluster/hierarchy.py +4348 -0
- scipy/cluster/tests/__init__.py +0 -0
- scipy/cluster/tests/hierarchy_test_data.py +145 -0
- scipy/cluster/tests/test_disjoint_set.py +202 -0
- scipy/cluster/tests/test_hierarchy.py +1238 -0
- scipy/cluster/tests/test_vq.py +434 -0
- scipy/cluster/vq.py +832 -0
- scipy/conftest.py +683 -0
- scipy/constants/__init__.py +358 -0
- scipy/constants/_codata.py +2266 -0
- scipy/constants/_constants.py +369 -0
- scipy/constants/codata.py +21 -0
- scipy/constants/constants.py +53 -0
- scipy/constants/tests/__init__.py +0 -0
- scipy/constants/tests/test_codata.py +78 -0
- scipy/constants/tests/test_constants.py +83 -0
- scipy/datasets/__init__.py +90 -0
- scipy/datasets/_download_all.py +71 -0
- scipy/datasets/_fetchers.py +225 -0
- scipy/datasets/_registry.py +26 -0
- scipy/datasets/_utils.py +81 -0
- scipy/datasets/tests/__init__.py +0 -0
- scipy/datasets/tests/test_data.py +128 -0
- scipy/differentiate/__init__.py +27 -0
- scipy/differentiate/_differentiate.py +1129 -0
- scipy/differentiate/tests/__init__.py +0 -0
- scipy/differentiate/tests/test_differentiate.py +694 -0
- scipy/fft/__init__.py +114 -0
- scipy/fft/_backend.py +196 -0
- scipy/fft/_basic.py +1650 -0
- scipy/fft/_basic_backend.py +197 -0
- scipy/fft/_debug_backends.py +22 -0
- scipy/fft/_fftlog.py +223 -0
- scipy/fft/_fftlog_backend.py +200 -0
- scipy/fft/_helper.py +348 -0
- scipy/fft/_pocketfft/LICENSE.md +25 -0
- scipy/fft/_pocketfft/__init__.py +9 -0
- scipy/fft/_pocketfft/basic.py +251 -0
- scipy/fft/_pocketfft/helper.py +249 -0
- scipy/fft/_pocketfft/pypocketfft.cp314-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp314-win_arm64.pyd +0 -0
- scipy/fft/_pocketfft/realtransforms.py +109 -0
- scipy/fft/_pocketfft/tests/__init__.py +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
- scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
- scipy/fft/_realtransforms.py +706 -0
- scipy/fft/_realtransforms_backend.py +63 -0
- scipy/fft/tests/__init__.py +0 -0
- scipy/fft/tests/mock_backend.py +96 -0
- scipy/fft/tests/test_backend.py +98 -0
- scipy/fft/tests/test_basic.py +504 -0
- scipy/fft/tests/test_fftlog.py +215 -0
- scipy/fft/tests/test_helper.py +558 -0
- scipy/fft/tests/test_multithreading.py +84 -0
- scipy/fft/tests/test_real_transforms.py +247 -0
- scipy/fftpack/__init__.py +103 -0
- scipy/fftpack/_basic.py +428 -0
- scipy/fftpack/_helper.py +115 -0
- scipy/fftpack/_pseudo_diffs.py +554 -0
- scipy/fftpack/_realtransforms.py +598 -0
- scipy/fftpack/basic.py +20 -0
- scipy/fftpack/convolve.cp314-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp314-win_arm64.pyd +0 -0
- scipy/fftpack/helper.py +19 -0
- scipy/fftpack/pseudo_diffs.py +22 -0
- scipy/fftpack/realtransforms.py +19 -0
- scipy/fftpack/tests/__init__.py +0 -0
- scipy/fftpack/tests/fftw_double_ref.npz +0 -0
- scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
- scipy/fftpack/tests/fftw_single_ref.npz +0 -0
- scipy/fftpack/tests/test.npz +0 -0
- scipy/fftpack/tests/test_basic.py +877 -0
- scipy/fftpack/tests/test_helper.py +54 -0
- scipy/fftpack/tests/test_import.py +33 -0
- scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
- scipy/fftpack/tests/test_real_transforms.py +836 -0
- scipy/integrate/__init__.py +122 -0
- scipy/integrate/_bvp.py +1160 -0
- scipy/integrate/_cubature.py +729 -0
- scipy/integrate/_dop.cp314-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_ivp/__init__.py +8 -0
- scipy/integrate/_ivp/base.py +290 -0
- scipy/integrate/_ivp/bdf.py +478 -0
- scipy/integrate/_ivp/common.py +451 -0
- scipy/integrate/_ivp/dop853_coefficients.py +193 -0
- scipy/integrate/_ivp/ivp.py +755 -0
- scipy/integrate/_ivp/lsoda.py +224 -0
- scipy/integrate/_ivp/radau.py +572 -0
- scipy/integrate/_ivp/rk.py +601 -0
- scipy/integrate/_ivp/tests/__init__.py +0 -0
- scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
- scipy/integrate/_ivp/tests/test_rk.py +37 -0
- scipy/integrate/_lebedev.py +5450 -0
- scipy/integrate/_lsoda.cp314-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp314-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp314-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_quadpack_py.py +1283 -0
- scipy/integrate/_quadrature.py +1336 -0
- scipy/integrate/_rules/__init__.py +12 -0
- scipy/integrate/_rules/_base.py +518 -0
- scipy/integrate/_rules/_gauss_kronrod.py +202 -0
- scipy/integrate/_rules/_gauss_legendre.py +62 -0
- scipy/integrate/_rules/_genz_malik.py +210 -0
- scipy/integrate/_tanhsinh.py +1385 -0
- scipy/integrate/_test_multivariate.cp314-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp314-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp314-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp314-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp314-win_arm64.pyd +0 -0
- scipy/integrate/dop.py +15 -0
- scipy/integrate/lsoda.py +15 -0
- scipy/integrate/odepack.py +17 -0
- scipy/integrate/quadpack.py +23 -0
- scipy/integrate/tests/__init__.py +0 -0
- scipy/integrate/tests/test__quad_vec.py +211 -0
- scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
- scipy/integrate/tests/test_bvp.py +714 -0
- scipy/integrate/tests/test_cubature.py +1375 -0
- scipy/integrate/tests/test_integrate.py +840 -0
- scipy/integrate/tests/test_odeint_jac.py +74 -0
- scipy/integrate/tests/test_quadpack.py +680 -0
- scipy/integrate/tests/test_quadrature.py +730 -0
- scipy/integrate/tests/test_tanhsinh.py +1171 -0
- scipy/integrate/vode.py +15 -0
- scipy/interpolate/__init__.py +228 -0
- scipy/interpolate/_bary_rational.py +715 -0
- scipy/interpolate/_bsplines.py +2469 -0
- scipy/interpolate/_cubic.py +973 -0
- scipy/interpolate/_dfitpack.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack2.py +2397 -0
- scipy/interpolate/_fitpack_impl.py +811 -0
- scipy/interpolate/_fitpack_py.py +898 -0
- scipy/interpolate/_fitpack_repro.py +996 -0
- scipy/interpolate/_interpnd.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_interpolate.py +2266 -0
- scipy/interpolate/_ndbspline.py +415 -0
- scipy/interpolate/_ndgriddata.py +329 -0
- scipy/interpolate/_pade.py +67 -0
- scipy/interpolate/_polyint.py +1025 -0
- scipy/interpolate/_ppoly.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp314-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp314-win_arm64.pyd +0 -0
- scipy/interpolate/dfitpack.py +24 -0
- scipy/interpolate/fitpack.py +31 -0
- scipy/interpolate/fitpack2.py +29 -0
- scipy/interpolate/interpnd.py +24 -0
- scipy/interpolate/interpolate.py +30 -0
- scipy/interpolate/ndgriddata.py +23 -0
- scipy/interpolate/polyint.py +24 -0
- scipy/interpolate/rbf.py +18 -0
- scipy/interpolate/tests/__init__.py +0 -0
- scipy/interpolate/tests/data/bug-1310.npz +0 -0
- scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
- scipy/interpolate/tests/data/gcvspl.npz +0 -0
- scipy/interpolate/tests/test_bary_rational.py +368 -0
- scipy/interpolate/tests/test_bsplines.py +3754 -0
- scipy/interpolate/tests/test_fitpack.py +519 -0
- scipy/interpolate/tests/test_fitpack2.py +1431 -0
- scipy/interpolate/tests/test_gil.py +64 -0
- scipy/interpolate/tests/test_interpnd.py +452 -0
- scipy/interpolate/tests/test_interpolate.py +2630 -0
- scipy/interpolate/tests/test_ndgriddata.py +308 -0
- scipy/interpolate/tests/test_pade.py +107 -0
- scipy/interpolate/tests/test_polyint.py +972 -0
- scipy/interpolate/tests/test_rbf.py +246 -0
- scipy/interpolate/tests/test_rbfinterp.py +534 -0
- scipy/interpolate/tests/test_rgi.py +1151 -0
- scipy/io/__init__.py +116 -0
- scipy/io/_fast_matrix_market/__init__.py +600 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp314-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp314-win_arm64.pyd +0 -0
- scipy/io/_fortran.py +354 -0
- scipy/io/_harwell_boeing/__init__.py +7 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
- scipy/io/_harwell_boeing/hb.py +571 -0
- scipy/io/_harwell_boeing/tests/__init__.py +0 -0
- scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
- scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
- scipy/io/_idl.py +917 -0
- scipy/io/_mmio.py +968 -0
- scipy/io/_netcdf.py +1104 -0
- scipy/io/_test_fortran.cp314-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp314-win_arm64.pyd +0 -0
- scipy/io/arff/__init__.py +28 -0
- scipy/io/arff/_arffread.py +873 -0
- scipy/io/arff/arffread.py +19 -0
- scipy/io/arff/tests/__init__.py +0 -0
- scipy/io/arff/tests/data/iris.arff +225 -0
- scipy/io/arff/tests/data/missing.arff +8 -0
- scipy/io/arff/tests/data/nodata.arff +11 -0
- scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
- scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
- scipy/io/arff/tests/data/test1.arff +10 -0
- scipy/io/arff/tests/data/test10.arff +8 -0
- scipy/io/arff/tests/data/test11.arff +11 -0
- scipy/io/arff/tests/data/test2.arff +15 -0
- scipy/io/arff/tests/data/test3.arff +6 -0
- scipy/io/arff/tests/data/test4.arff +11 -0
- scipy/io/arff/tests/data/test5.arff +26 -0
- scipy/io/arff/tests/data/test6.arff +12 -0
- scipy/io/arff/tests/data/test7.arff +15 -0
- scipy/io/arff/tests/data/test8.arff +12 -0
- scipy/io/arff/tests/data/test9.arff +14 -0
- scipy/io/arff/tests/test_arffread.py +421 -0
- scipy/io/harwell_boeing.py +17 -0
- scipy/io/idl.py +17 -0
- scipy/io/matlab/__init__.py +66 -0
- scipy/io/matlab/_byteordercodes.py +75 -0
- scipy/io/matlab/_mio.py +375 -0
- scipy/io/matlab/_mio4.py +632 -0
- scipy/io/matlab/_mio5.py +901 -0
- scipy/io/matlab/_mio5_params.py +281 -0
- scipy/io/matlab/_mio5_utils.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp314-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp314-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp314-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp314-win_arm64.pyd +0 -0
- scipy/io/matlab/byteordercodes.py +17 -0
- scipy/io/matlab/mio.py +16 -0
- scipy/io/matlab/mio4.py +17 -0
- scipy/io/matlab/mio5.py +19 -0
- scipy/io/matlab/mio5_params.py +18 -0
- scipy/io/matlab/mio5_utils.py +17 -0
- scipy/io/matlab/mio_utils.py +17 -0
- scipy/io/matlab/miobase.py +16 -0
- scipy/io/matlab/streams.py +16 -0
- scipy/io/matlab/tests/__init__.py +0 -0
- scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
- scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/big_endian.mat +0 -0
- scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
- scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
- scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
- scipy/io/matlab/tests/data/little_endian.mat +0 -0
- scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
- scipy/io/matlab/tests/data/malformed1.mat +0 -0
- scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
- scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
- scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
- scipy/io/matlab/tests/data/parabola.mat +0 -0
- scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
- scipy/io/matlab/tests/data/some_functions.mat +0 -0
- scipy/io/matlab/tests/data/sqr.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
- scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
- scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
- scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/test_byteordercodes.py +29 -0
- scipy/io/matlab/tests/test_mio.py +1399 -0
- scipy/io/matlab/tests/test_mio5_utils.py +179 -0
- scipy/io/matlab/tests/test_mio_funcs.py +51 -0
- scipy/io/matlab/tests/test_mio_utils.py +45 -0
- scipy/io/matlab/tests/test_miobase.py +32 -0
- scipy/io/matlab/tests/test_pathological.py +33 -0
- scipy/io/matlab/tests/test_streams.py +241 -0
- scipy/io/mmio.py +17 -0
- scipy/io/netcdf.py +17 -0
- scipy/io/tests/__init__.py +0 -0
- scipy/io/tests/data/Transparent Busy.ani +0 -0
- scipy/io/tests/data/array_float32_1d.sav +0 -0
- scipy/io/tests/data/array_float32_2d.sav +0 -0
- scipy/io/tests/data/array_float32_3d.sav +0 -0
- scipy/io/tests/data/array_float32_4d.sav +0 -0
- scipy/io/tests/data/array_float32_5d.sav +0 -0
- scipy/io/tests/data/array_float32_6d.sav +0 -0
- scipy/io/tests/data/array_float32_7d.sav +0 -0
- scipy/io/tests/data/array_float32_8d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
- scipy/io/tests/data/example_1.nc +0 -0
- scipy/io/tests/data/example_2.nc +0 -0
- scipy/io/tests/data/example_3_maskedvals.nc +0 -0
- scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
- scipy/io/tests/data/fortran-mixed.dat +0 -0
- scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
- scipy/io/tests/data/invalid_pointer.sav +0 -0
- scipy/io/tests/data/null_pointer.sav +0 -0
- scipy/io/tests/data/scalar_byte.sav +0 -0
- scipy/io/tests/data/scalar_byte_descr.sav +0 -0
- scipy/io/tests/data/scalar_complex32.sav +0 -0
- scipy/io/tests/data/scalar_complex64.sav +0 -0
- scipy/io/tests/data/scalar_float32.sav +0 -0
- scipy/io/tests/data/scalar_float64.sav +0 -0
- scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
- scipy/io/tests/data/scalar_int16.sav +0 -0
- scipy/io/tests/data/scalar_int32.sav +0 -0
- scipy/io/tests/data/scalar_int64.sav +0 -0
- scipy/io/tests/data/scalar_string.sav +0 -0
- scipy/io/tests/data/scalar_uint16.sav +0 -0
- scipy/io/tests/data/scalar_uint32.sav +0 -0
- scipy/io/tests/data/scalar_uint64.sav +0 -0
- scipy/io/tests/data/struct_arrays.sav +0 -0
- scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_inherit.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_pointers.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_scalars.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
- scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
- scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
- scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
- scipy/io/tests/data/various_compressed.sav +0 -0
- scipy/io/tests/test_fortran.py +264 -0
- scipy/io/tests/test_idl.py +483 -0
- scipy/io/tests/test_mmio.py +831 -0
- scipy/io/tests/test_netcdf.py +550 -0
- scipy/io/tests/test_paths.py +93 -0
- scipy/io/tests/test_wavfile.py +501 -0
- scipy/io/wavfile.py +938 -0
- scipy/linalg/__init__.pxd +1 -0
- scipy/linalg/__init__.py +236 -0
- scipy/linalg/_basic.py +2146 -0
- scipy/linalg/_blas_subroutines.h +164 -0
- scipy/linalg/_cythonized_array_utils.cp314-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_cythonized_array_utils.pxd +40 -0
- scipy/linalg/_cythonized_array_utils.pyi +16 -0
- scipy/linalg/_decomp.py +1645 -0
- scipy/linalg/_decomp_cholesky.py +413 -0
- scipy/linalg/_decomp_cossin.py +236 -0
- scipy/linalg/_decomp_interpolative.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.pyi +6 -0
- scipy/linalg/_decomp_polar.py +113 -0
- scipy/linalg/_decomp_qr.py +494 -0
- scipy/linalg/_decomp_qz.py +452 -0
- scipy/linalg/_decomp_schur.py +336 -0
- scipy/linalg/_decomp_svd.py +545 -0
- scipy/linalg/_decomp_update.cp314-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp314-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp314-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp314-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.pyi +6 -0
- scipy/linalg/_matfuncs_inv_ssq.py +886 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_misc.py +191 -0
- scipy/linalg/_procrustes.py +113 -0
- scipy/linalg/_sketches.py +189 -0
- scipy/linalg/_solve_toeplitz.cp314-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp314-win_arm64.pyd +0 -0
- scipy/linalg/_solvers.py +862 -0
- scipy/linalg/_special_matrices.py +1322 -0
- scipy/linalg/_testutils.py +65 -0
- scipy/linalg/basic.py +23 -0
- scipy/linalg/blas.py +495 -0
- scipy/linalg/cython_blas.cp314-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp314-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp314-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp314-win_arm64.pyd +0 -0
- scipy/linalg/cython_lapack.pxd +1528 -0
- scipy/linalg/cython_lapack.pyx +12045 -0
- scipy/linalg/decomp.py +23 -0
- scipy/linalg/decomp_cholesky.py +21 -0
- scipy/linalg/decomp_lu.py +21 -0
- scipy/linalg/decomp_qr.py +20 -0
- scipy/linalg/decomp_schur.py +21 -0
- scipy/linalg/decomp_svd.py +21 -0
- scipy/linalg/interpolative.py +989 -0
- scipy/linalg/lapack.py +1081 -0
- scipy/linalg/matfuncs.py +23 -0
- scipy/linalg/misc.py +21 -0
- scipy/linalg/special_matrices.py +22 -0
- scipy/linalg/tests/__init__.py +0 -0
- scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
- scipy/linalg/tests/_cython_examples/meson.build +34 -0
- scipy/linalg/tests/data/carex_15_data.npz +0 -0
- scipy/linalg/tests/data/carex_18_data.npz +0 -0
- scipy/linalg/tests/data/carex_19_data.npz +0 -0
- scipy/linalg/tests/data/carex_20_data.npz +0 -0
- scipy/linalg/tests/data/carex_6_data.npz +0 -0
- scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
- scipy/linalg/tests/test_basic.py +2074 -0
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_blas.py +1127 -0
- scipy/linalg/tests/test_cython_blas.py +118 -0
- scipy/linalg/tests/test_cython_lapack.py +22 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
- scipy/linalg/tests/test_decomp.py +3189 -0
- scipy/linalg/tests/test_decomp_cholesky.py +268 -0
- scipy/linalg/tests/test_decomp_cossin.py +314 -0
- scipy/linalg/tests/test_decomp_ldl.py +137 -0
- scipy/linalg/tests/test_decomp_lu.py +308 -0
- scipy/linalg/tests/test_decomp_polar.py +110 -0
- scipy/linalg/tests/test_decomp_update.py +1701 -0
- scipy/linalg/tests/test_extending.py +46 -0
- scipy/linalg/tests/test_fblas.py +607 -0
- scipy/linalg/tests/test_interpolative.py +232 -0
- scipy/linalg/tests/test_lapack.py +3620 -0
- scipy/linalg/tests/test_matfuncs.py +1125 -0
- scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
- scipy/linalg/tests/test_procrustes.py +214 -0
- scipy/linalg/tests/test_sketches.py +118 -0
- scipy/linalg/tests/test_solve_toeplitz.py +150 -0
- scipy/linalg/tests/test_solvers.py +844 -0
- scipy/linalg/tests/test_special_matrices.py +636 -0
- scipy/misc/__init__.py +6 -0
- scipy/misc/common.py +6 -0
- scipy/misc/doccer.py +6 -0
- scipy/ndimage/__init__.py +174 -0
- scipy/ndimage/_ctest.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_delegators.py +303 -0
- scipy/ndimage/_filters.py +2422 -0
- scipy/ndimage/_fourier.py +306 -0
- scipy/ndimage/_interpolation.py +1033 -0
- scipy/ndimage/_measurements.py +1689 -0
- scipy/ndimage/_morphology.py +2634 -0
- scipy/ndimage/_nd_image.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp314-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp314-win_arm64.pyd +0 -0
- scipy/ndimage/_support_alternative_backends.py +84 -0
- scipy/ndimage/filters.py +27 -0
- scipy/ndimage/fourier.py +21 -0
- scipy/ndimage/interpolation.py +22 -0
- scipy/ndimage/measurements.py +24 -0
- scipy/ndimage/morphology.py +27 -0
- scipy/ndimage/tests/__init__.py +12 -0
- scipy/ndimage/tests/data/label_inputs.txt +21 -0
- scipy/ndimage/tests/data/label_results.txt +294 -0
- scipy/ndimage/tests/data/label_strels.txt +42 -0
- scipy/ndimage/tests/dots.png +0 -0
- scipy/ndimage/tests/test_c_api.py +102 -0
- scipy/ndimage/tests/test_datatypes.py +67 -0
- scipy/ndimage/tests/test_filters.py +3083 -0
- scipy/ndimage/tests/test_fourier.py +187 -0
- scipy/ndimage/tests/test_interpolation.py +1491 -0
- scipy/ndimage/tests/test_measurements.py +1592 -0
- scipy/ndimage/tests/test_morphology.py +2950 -0
- scipy/ndimage/tests/test_ni_support.py +78 -0
- scipy/ndimage/tests/test_splines.py +70 -0
- scipy/odr/__init__.py +131 -0
- scipy/odr/__odrpack.cp314-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp314-win_arm64.pyd +0 -0
- scipy/odr/_add_newdocs.py +34 -0
- scipy/odr/_models.py +315 -0
- scipy/odr/_odrpack.py +1154 -0
- scipy/odr/models.py +20 -0
- scipy/odr/odrpack.py +21 -0
- scipy/odr/tests/__init__.py +0 -0
- scipy/odr/tests/test_odr.py +607 -0
- scipy/optimize/__init__.pxd +1 -0
- scipy/optimize/__init__.py +460 -0
- scipy/optimize/_basinhopping.py +741 -0
- scipy/optimize/_bglu_dense.cp314-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_bracket.py +706 -0
- scipy/optimize/_chandrupatla.py +551 -0
- scipy/optimize/_cobyla_py.py +297 -0
- scipy/optimize/_cobyqa_py.py +72 -0
- scipy/optimize/_constraints.py +598 -0
- scipy/optimize/_dcsrch.py +728 -0
- scipy/optimize/_differentiable_functions.py +835 -0
- scipy/optimize/_differentialevolution.py +1970 -0
- scipy/optimize/_direct.cp314-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_direct_py.py +280 -0
- scipy/optimize/_dual_annealing.py +732 -0
- scipy/optimize/_elementwise.py +798 -0
- scipy/optimize/_group_columns.cp314-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp314-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp314-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_lbfgsb_py.py +634 -0
- scipy/optimize/_linesearch.py +896 -0
- scipy/optimize/_linprog.py +733 -0
- scipy/optimize/_linprog_doc.py +1434 -0
- scipy/optimize/_linprog_highs.py +422 -0
- scipy/optimize/_linprog_ip.py +1141 -0
- scipy/optimize/_linprog_rs.py +572 -0
- scipy/optimize/_linprog_simplex.py +663 -0
- scipy/optimize/_linprog_util.py +1521 -0
- scipy/optimize/_lsap.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/__init__.py +5 -0
- scipy/optimize/_lsq/bvls.py +183 -0
- scipy/optimize/_lsq/common.py +731 -0
- scipy/optimize/_lsq/dogbox.py +345 -0
- scipy/optimize/_lsq/givens_elimination.cp314-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/least_squares.py +1044 -0
- scipy/optimize/_lsq/lsq_linear.py +361 -0
- scipy/optimize/_lsq/trf.py +587 -0
- scipy/optimize/_lsq/trf_linear.py +249 -0
- scipy/optimize/_milp.py +394 -0
- scipy/optimize/_minimize.py +1199 -0
- scipy/optimize/_minpack.cp314-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp314-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_nnls.py +96 -0
- scipy/optimize/_nonlin.py +1634 -0
- scipy/optimize/_numdiff.py +963 -0
- scipy/optimize/_optimize.py +4169 -0
- scipy/optimize/_pava_pybind.cp314-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_qap.py +760 -0
- scipy/optimize/_remove_redundancy.py +522 -0
- scipy/optimize/_root.py +732 -0
- scipy/optimize/_root_scalar.py +538 -0
- scipy/optimize/_shgo.py +1606 -0
- scipy/optimize/_shgo_lib/__init__.py +0 -0
- scipy/optimize/_shgo_lib/_complex.py +1225 -0
- scipy/optimize/_shgo_lib/_vertex.py +460 -0
- scipy/optimize/_slsqp_py.py +603 -0
- scipy/optimize/_slsqplib.cp314-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_spectral.py +260 -0
- scipy/optimize/_tnc.py +438 -0
- scipy/optimize/_trlib/__init__.py +12 -0
- scipy/optimize/_trlib/_trlib.cp314-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_trustregion.py +318 -0
- scipy/optimize/_trustregion_constr/__init__.py +6 -0
- scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
- scipy/optimize/_trustregion_constr/projections.py +411 -0
- scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
- scipy/optimize/_trustregion_constr/report.py +49 -0
- scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
- scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
- scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
- scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
- scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
- scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
- scipy/optimize/_trustregion_dogleg.py +122 -0
- scipy/optimize/_trustregion_exact.py +437 -0
- scipy/optimize/_trustregion_krylov.py +65 -0
- scipy/optimize/_trustregion_ncg.py +126 -0
- scipy/optimize/_tstutils.py +972 -0
- scipy/optimize/_zeros.cp314-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp314-win_arm64.pyd +0 -0
- scipy/optimize/_zeros_py.py +1475 -0
- scipy/optimize/cobyla.py +19 -0
- scipy/optimize/cython_optimize/__init__.py +133 -0
- scipy/optimize/cython_optimize/_zeros.cp314-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp314-win_arm64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.pxd +33 -0
- scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
- scipy/optimize/cython_optimize.pxd +11 -0
- scipy/optimize/elementwise.py +38 -0
- scipy/optimize/lbfgsb.py +23 -0
- scipy/optimize/linesearch.py +18 -0
- scipy/optimize/minpack.py +27 -0
- scipy/optimize/minpack2.py +17 -0
- scipy/optimize/moduleTNC.py +19 -0
- scipy/optimize/nonlin.py +29 -0
- scipy/optimize/optimize.py +40 -0
- scipy/optimize/slsqp.py +22 -0
- scipy/optimize/tests/__init__.py +0 -0
- scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
- scipy/optimize/tests/_cython_examples/meson.build +32 -0
- scipy/optimize/tests/test__basinhopping.py +535 -0
- scipy/optimize/tests/test__differential_evolution.py +1703 -0
- scipy/optimize/tests/test__dual_annealing.py +416 -0
- scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
- scipy/optimize/tests/test__numdiff.py +885 -0
- scipy/optimize/tests/test__remove_redundancy.py +228 -0
- scipy/optimize/tests/test__root.py +124 -0
- scipy/optimize/tests/test__shgo.py +1164 -0
- scipy/optimize/tests/test__spectral.py +226 -0
- scipy/optimize/tests/test_bracket.py +896 -0
- scipy/optimize/tests/test_chandrupatla.py +982 -0
- scipy/optimize/tests/test_cobyla.py +195 -0
- scipy/optimize/tests/test_cobyqa.py +252 -0
- scipy/optimize/tests/test_constraint_conversion.py +286 -0
- scipy/optimize/tests/test_constraints.py +255 -0
- scipy/optimize/tests/test_cython_optimize.py +92 -0
- scipy/optimize/tests/test_differentiable_functions.py +1025 -0
- scipy/optimize/tests/test_direct.py +321 -0
- scipy/optimize/tests/test_extending.py +28 -0
- scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
- scipy/optimize/tests/test_isotonic_regression.py +167 -0
- scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
- scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
- scipy/optimize/tests/test_least_squares.py +986 -0
- scipy/optimize/tests/test_linear_assignment.py +116 -0
- scipy/optimize/tests/test_linesearch.py +328 -0
- scipy/optimize/tests/test_linprog.py +2577 -0
- scipy/optimize/tests/test_lsq_common.py +297 -0
- scipy/optimize/tests/test_lsq_linear.py +287 -0
- scipy/optimize/tests/test_milp.py +459 -0
- scipy/optimize/tests/test_minimize_constrained.py +845 -0
- scipy/optimize/tests/test_minpack.py +1194 -0
- scipy/optimize/tests/test_nnls.py +469 -0
- scipy/optimize/tests/test_nonlin.py +572 -0
- scipy/optimize/tests/test_optimize.py +3344 -0
- scipy/optimize/tests/test_quadratic_assignment.py +455 -0
- scipy/optimize/tests/test_regression.py +40 -0
- scipy/optimize/tests/test_slsqp.py +645 -0
- scipy/optimize/tests/test_tnc.py +345 -0
- scipy/optimize/tests/test_trustregion.py +110 -0
- scipy/optimize/tests/test_trustregion_exact.py +351 -0
- scipy/optimize/tests/test_trustregion_krylov.py +170 -0
- scipy/optimize/tests/test_zeros.py +998 -0
- scipy/optimize/tnc.py +22 -0
- scipy/optimize/zeros.py +26 -0
- scipy/signal/__init__.py +316 -0
- scipy/signal/_arraytools.py +264 -0
- scipy/signal/_czt.py +575 -0
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +5893 -0
- scipy/signal/_fir_filter_design.py +1458 -0
- scipy/signal/_lti_conversion.py +534 -0
- scipy/signal/_ltisys.py +3546 -0
- scipy/signal/_max_len_seq.py +139 -0
- scipy/signal/_max_len_seq_inner.cp314-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp314-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp314-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp314-win_arm64.pyd +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_savitzky_golay.py +357 -0
- scipy/signal/_short_time_fft.py +2228 -0
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +5309 -0
- scipy/signal/_sigtools.cp314-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp314-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp314-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp314-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp314-win_arm64.lib +0 -0
- scipy/signal/_spline.cp314-win_arm64.pyd +0 -0
- scipy/signal/_spline.pyi +34 -0
- scipy/signal/_spline_filters.py +848 -0
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +219 -0
- scipy/signal/_upfirdn_apply.cp314-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp314-win_arm64.pyd +0 -0
- scipy/signal/_waveforms.py +687 -0
- scipy/signal/_wavelets.py +29 -0
- scipy/signal/bsplines.py +21 -0
- scipy/signal/filter_design.py +28 -0
- scipy/signal/fir_filter_design.py +21 -0
- scipy/signal/lti_conversion.py +20 -0
- scipy/signal/ltisys.py +25 -0
- scipy/signal/signaltools.py +27 -0
- scipy/signal/spectral.py +21 -0
- scipy/signal/spline.py +18 -0
- scipy/signal/tests/__init__.py +0 -0
- scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
- scipy/signal/tests/mpsig.py +122 -0
- scipy/signal/tests/test_array_tools.py +111 -0
- scipy/signal/tests/test_bsplines.py +365 -0
- scipy/signal/tests/test_cont2discrete.py +424 -0
- scipy/signal/tests/test_czt.py +221 -0
- scipy/signal/tests/test_dltisys.py +599 -0
- scipy/signal/tests/test_filter_design.py +4744 -0
- scipy/signal/tests/test_fir_filter_design.py +851 -0
- scipy/signal/tests/test_ltisys.py +1225 -0
- scipy/signal/tests/test_max_len_seq.py +71 -0
- scipy/signal/tests/test_peak_finding.py +915 -0
- scipy/signal/tests/test_result_type.py +51 -0
- scipy/signal/tests/test_savitzky_golay.py +363 -0
- scipy/signal/tests/test_short_time_fft.py +1107 -0
- scipy/signal/tests/test_signaltools.py +4735 -0
- scipy/signal/tests/test_spectral.py +2141 -0
- scipy/signal/tests/test_splines.py +427 -0
- scipy/signal/tests/test_upfirdn.py +322 -0
- scipy/signal/tests/test_waveforms.py +400 -0
- scipy/signal/tests/test_wavelets.py +59 -0
- scipy/signal/tests/test_windows.py +987 -0
- scipy/signal/waveforms.py +20 -0
- scipy/signal/wavelets.py +17 -0
- scipy/signal/windows/__init__.py +52 -0
- scipy/signal/windows/_windows.py +2513 -0
- scipy/signal/windows/windows.py +23 -0
- scipy/sparse/__init__.py +350 -0
- scipy/sparse/_base.py +1613 -0
- scipy/sparse/_bsr.py +880 -0
- scipy/sparse/_compressed.py +1328 -0
- scipy/sparse/_construct.py +1454 -0
- scipy/sparse/_coo.py +1581 -0
- scipy/sparse/_csc.py +367 -0
- scipy/sparse/_csparsetools.cp314-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp314-win_arm64.pyd +0 -0
- scipy/sparse/_csr.py +558 -0
- scipy/sparse/_data.py +569 -0
- scipy/sparse/_dia.py +677 -0
- scipy/sparse/_dok.py +669 -0
- scipy/sparse/_extract.py +178 -0
- scipy/sparse/_index.py +444 -0
- scipy/sparse/_lil.py +632 -0
- scipy/sparse/_matrix.py +169 -0
- scipy/sparse/_matrix_io.py +167 -0
- scipy/sparse/_sparsetools.cp314-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp314-win_arm64.pyd +0 -0
- scipy/sparse/_spfuncs.py +76 -0
- scipy/sparse/_sputils.py +632 -0
- scipy/sparse/base.py +24 -0
- scipy/sparse/bsr.py +22 -0
- scipy/sparse/compressed.py +20 -0
- scipy/sparse/construct.py +38 -0
- scipy/sparse/coo.py +23 -0
- scipy/sparse/csc.py +22 -0
- scipy/sparse/csgraph/__init__.py +210 -0
- scipy/sparse/csgraph/_flow.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp314-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp314-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_validation.py +66 -0
- scipy/sparse/csgraph/tests/__init__.py +0 -0
- scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
- scipy/sparse/csgraph/tests/test_conversions.py +61 -0
- scipy/sparse/csgraph/tests/test_flow.py +209 -0
- scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
- scipy/sparse/csgraph/tests/test_matching.py +307 -0
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
- scipy/sparse/csgraph/tests/test_reordering.py +70 -0
- scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
- scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
- scipy/sparse/csgraph/tests/test_traversal.py +148 -0
- scipy/sparse/csr.py +22 -0
- scipy/sparse/data.py +18 -0
- scipy/sparse/dia.py +22 -0
- scipy/sparse/dok.py +22 -0
- scipy/sparse/extract.py +23 -0
- scipy/sparse/lil.py +22 -0
- scipy/sparse/linalg/__init__.py +148 -0
- scipy/sparse/linalg/_dsolve/__init__.py +71 -0
- scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
- scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
- scipy/sparse/linalg/_eigen/__init__.py +22 -0
- scipy/sparse/linalg/_eigen/_svds.py +540 -0
- scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
- scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
- scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
- scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
- scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
- scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
- scipy/sparse/linalg/_expm_multiply.py +816 -0
- scipy/sparse/linalg/_interface.py +920 -0
- scipy/sparse/linalg/_isolve/__init__.py +20 -0
- scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
- scipy/sparse/linalg/_isolve/iterative.py +1051 -0
- scipy/sparse/linalg/_isolve/lgmres.py +230 -0
- scipy/sparse/linalg/_isolve/lsmr.py +486 -0
- scipy/sparse/linalg/_isolve/lsqr.py +589 -0
- scipy/sparse/linalg/_isolve/minres.py +372 -0
- scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
- scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
- scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
- scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
- scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
- scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
- scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
- scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
- scipy/sparse/linalg/_isolve/utils.py +121 -0
- scipy/sparse/linalg/_matfuncs.py +940 -0
- scipy/sparse/linalg/_norm.py +195 -0
- scipy/sparse/linalg/_onenormest.py +467 -0
- scipy/sparse/linalg/_propack/_cpropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp314-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
- scipy/sparse/linalg/_svdp.py +309 -0
- scipy/sparse/linalg/dsolve.py +22 -0
- scipy/sparse/linalg/eigen.py +21 -0
- scipy/sparse/linalg/interface.py +20 -0
- scipy/sparse/linalg/isolve.py +22 -0
- scipy/sparse/linalg/matfuncs.py +18 -0
- scipy/sparse/linalg/tests/__init__.py +0 -0
- scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
- scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
- scipy/sparse/linalg/tests/test_interface.py +561 -0
- scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
- scipy/sparse/linalg/tests/test_norm.py +154 -0
- scipy/sparse/linalg/tests/test_onenormest.py +252 -0
- scipy/sparse/linalg/tests/test_propack.py +165 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
- scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
- scipy/sparse/sparsetools.py +17 -0
- scipy/sparse/spfuncs.py +17 -0
- scipy/sparse/sputils.py +17 -0
- scipy/sparse/tests/__init__.py +0 -0
- scipy/sparse/tests/data/csc_py2.npz +0 -0
- scipy/sparse/tests/data/csc_py3.npz +0 -0
- scipy/sparse/tests/test_arithmetic1d.py +341 -0
- scipy/sparse/tests/test_array_api.py +561 -0
- scipy/sparse/tests/test_base.py +5870 -0
- scipy/sparse/tests/test_common1d.py +447 -0
- scipy/sparse/tests/test_construct.py +872 -0
- scipy/sparse/tests/test_coo.py +1119 -0
- scipy/sparse/tests/test_csc.py +98 -0
- scipy/sparse/tests/test_csr.py +214 -0
- scipy/sparse/tests/test_dok.py +209 -0
- scipy/sparse/tests/test_extract.py +51 -0
- scipy/sparse/tests/test_indexing1d.py +603 -0
- scipy/sparse/tests/test_matrix_io.py +109 -0
- scipy/sparse/tests/test_minmax1d.py +128 -0
- scipy/sparse/tests/test_sparsetools.py +344 -0
- scipy/sparse/tests/test_spfuncs.py +97 -0
- scipy/sparse/tests/test_sputils.py +424 -0
- scipy/spatial/__init__.py +129 -0
- scipy/spatial/_ckdtree.cp314-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp314-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp314-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp314-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_kdtree.py +920 -0
- scipy/spatial/_plotutils.py +274 -0
- scipy/spatial/_procrustes.py +132 -0
- scipy/spatial/_qhull.cp314-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp314-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp314-win_arm64.pyd +0 -0
- scipy/spatial/_voronoi.pyi +4 -0
- scipy/spatial/ckdtree.py +18 -0
- scipy/spatial/distance.py +3147 -0
- scipy/spatial/distance.pyi +210 -0
- scipy/spatial/kdtree.py +25 -0
- scipy/spatial/qhull.py +25 -0
- scipy/spatial/qhull_src/COPYING_QHULL.txt +39 -0
- scipy/spatial/tests/__init__.py +0 -0
- scipy/spatial/tests/data/cdist-X1.txt +10 -0
- scipy/spatial/tests/data/cdist-X2.txt +20 -0
- scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
- scipy/spatial/tests/data/iris.txt +150 -0
- scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
- scipy/spatial/tests/data/random-bool-data.txt +100 -0
- scipy/spatial/tests/data/random-double-data.txt +100 -0
- scipy/spatial/tests/data/random-int-data.txt +100 -0
- scipy/spatial/tests/data/random-uint-data.txt +100 -0
- scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
- scipy/spatial/tests/test__plotutils.py +91 -0
- scipy/spatial/tests/test__procrustes.py +116 -0
- scipy/spatial/tests/test_distance.py +2389 -0
- scipy/spatial/tests/test_hausdorff.py +199 -0
- scipy/spatial/tests/test_kdtree.py +1536 -0
- scipy/spatial/tests/test_qhull.py +1313 -0
- scipy/spatial/tests/test_slerp.py +417 -0
- scipy/spatial/tests/test_spherical_voronoi.py +358 -0
- scipy/spatial/transform/__init__.py +31 -0
- scipy/spatial/transform/_rigid_transform.cp314-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp314-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp314-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp314-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation_groups.py +140 -0
- scipy/spatial/transform/_rotation_spline.py +460 -0
- scipy/spatial/transform/rotation.py +21 -0
- scipy/spatial/transform/tests/__init__.py +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +2569 -0
- scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
- scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
- scipy/special/__init__.pxd +1 -0
- scipy/special/__init__.py +841 -0
- scipy/special/_add_newdocs.py +9961 -0
- scipy/special/_basic.py +3576 -0
- scipy/special/_comb.cp314-win_arm64.lib +0 -0
- scipy/special/_comb.cp314-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp314-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp314-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp314-win_arm64.pyd +0 -0
- scipy/special/_input_validation.py +17 -0
- scipy/special/_lambertw.py +149 -0
- scipy/special/_logsumexp.py +426 -0
- scipy/special/_mptestutils.py +453 -0
- scipy/special/_multiufuncs.py +610 -0
- scipy/special/_orthogonal.py +2592 -0
- scipy/special/_orthogonal.pyi +330 -0
- scipy/special/_precompute/__init__.py +0 -0
- scipy/special/_precompute/cosine_cdf.py +17 -0
- scipy/special/_precompute/expn_asy.py +54 -0
- scipy/special/_precompute/gammainc_asy.py +116 -0
- scipy/special/_precompute/gammainc_data.py +124 -0
- scipy/special/_precompute/hyp2f1_data.py +484 -0
- scipy/special/_precompute/lambertw.py +68 -0
- scipy/special/_precompute/loggamma.py +43 -0
- scipy/special/_precompute/struve_convergence.py +131 -0
- scipy/special/_precompute/utils.py +38 -0
- scipy/special/_precompute/wright_bessel.py +342 -0
- scipy/special/_precompute/wright_bessel_data.py +152 -0
- scipy/special/_precompute/wrightomega.py +41 -0
- scipy/special/_precompute/zetac.py +27 -0
- scipy/special/_sf_error.py +15 -0
- scipy/special/_specfun.cp314-win_arm64.lib +0 -0
- scipy/special/_specfun.cp314-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp314-win_arm64.pyd +0 -0
- scipy/special/_spfun_stats.py +106 -0
- scipy/special/_spherical_bessel.py +397 -0
- scipy/special/_support_alternative_backends.py +295 -0
- scipy/special/_test_internal.cp314-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp314-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp314-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp314-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp314-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp314-win_arm64.pyd +0 -0
- scipy/special/_ufuncs_cxx.pxd +142 -0
- scipy/special/_ufuncs_cxx.pyx +427 -0
- scipy/special/_ufuncs_cxx_defs.h +147 -0
- scipy/special/_ufuncs_defs.h +57 -0
- scipy/special/add_newdocs.py +15 -0
- scipy/special/basic.py +87 -0
- scipy/special/cython_special.cp314-win_arm64.lib +0 -0
- scipy/special/cython_special.cp314-win_arm64.pyd +0 -0
- scipy/special/cython_special.pxd +259 -0
- scipy/special/cython_special.pyi +3 -0
- scipy/special/orthogonal.py +45 -0
- scipy/special/sf_error.py +20 -0
- scipy/special/specfun.py +24 -0
- scipy/special/spfun_stats.py +17 -0
- scipy/special/tests/__init__.py +0 -0
- scipy/special/tests/_cython_examples/extending.pyx +12 -0
- scipy/special/tests/_cython_examples/meson.build +34 -0
- scipy/special/tests/data/__init__.py +0 -0
- scipy/special/tests/data/boost.npz +0 -0
- scipy/special/tests/data/gsl.npz +0 -0
- scipy/special/tests/data/local.npz +0 -0
- scipy/special/tests/test_basic.py +4815 -0
- scipy/special/tests/test_bdtr.py +112 -0
- scipy/special/tests/test_boost_ufuncs.py +64 -0
- scipy/special/tests/test_boxcox.py +125 -0
- scipy/special/tests/test_cdflib.py +712 -0
- scipy/special/tests/test_cdft_asymptotic.py +49 -0
- scipy/special/tests/test_cephes_intp_cast.py +29 -0
- scipy/special/tests/test_cosine_distr.py +83 -0
- scipy/special/tests/test_cython_special.py +363 -0
- scipy/special/tests/test_data.py +719 -0
- scipy/special/tests/test_dd.py +42 -0
- scipy/special/tests/test_digamma.py +45 -0
- scipy/special/tests/test_ellip_harm.py +278 -0
- scipy/special/tests/test_erfinv.py +89 -0
- scipy/special/tests/test_exponential_integrals.py +118 -0
- scipy/special/tests/test_extending.py +28 -0
- scipy/special/tests/test_faddeeva.py +85 -0
- scipy/special/tests/test_gamma.py +12 -0
- scipy/special/tests/test_gammainc.py +152 -0
- scipy/special/tests/test_hyp2f1.py +2566 -0
- scipy/special/tests/test_hypergeometric.py +234 -0
- scipy/special/tests/test_iv_ratio.py +249 -0
- scipy/special/tests/test_kolmogorov.py +491 -0
- scipy/special/tests/test_lambertw.py +109 -0
- scipy/special/tests/test_legendre.py +1518 -0
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_loggamma.py +70 -0
- scipy/special/tests/test_logit.py +162 -0
- scipy/special/tests/test_logsumexp.py +469 -0
- scipy/special/tests/test_mpmath.py +2293 -0
- scipy/special/tests/test_nan_inputs.py +65 -0
- scipy/special/tests/test_ndtr.py +77 -0
- scipy/special/tests/test_ndtri_exp.py +94 -0
- scipy/special/tests/test_orthogonal.py +821 -0
- scipy/special/tests/test_orthogonal_eval.py +275 -0
- scipy/special/tests/test_owens_t.py +53 -0
- scipy/special/tests/test_pcf.py +24 -0
- scipy/special/tests/test_pdtr.py +48 -0
- scipy/special/tests/test_powm1.py +65 -0
- scipy/special/tests/test_precompute_expn_asy.py +24 -0
- scipy/special/tests/test_precompute_gammainc.py +108 -0
- scipy/special/tests/test_precompute_utils.py +36 -0
- scipy/special/tests/test_round.py +18 -0
- scipy/special/tests/test_sf_error.py +146 -0
- scipy/special/tests/test_sici.py +36 -0
- scipy/special/tests/test_specfun.py +48 -0
- scipy/special/tests/test_spence.py +32 -0
- scipy/special/tests/test_spfun_stats.py +61 -0
- scipy/special/tests/test_sph_harm.py +85 -0
- scipy/special/tests/test_spherical_bessel.py +400 -0
- scipy/special/tests/test_support_alternative_backends.py +248 -0
- scipy/special/tests/test_trig.py +72 -0
- scipy/special/tests/test_ufunc_signatures.py +46 -0
- scipy/special/tests/test_wright_bessel.py +205 -0
- scipy/special/tests/test_wrightomega.py +117 -0
- scipy/special/tests/test_zeta.py +301 -0
- scipy/stats/__init__.py +670 -0
- scipy/stats/_ansari_swilk_statistics.cp314-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp314-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp314-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp314-win_arm64.pyd +0 -0
- scipy/stats/_biasedurn.pxd +27 -0
- scipy/stats/_binned_statistic.py +795 -0
- scipy/stats/_binomtest.py +375 -0
- scipy/stats/_bws_test.py +177 -0
- scipy/stats/_censored_data.py +459 -0
- scipy/stats/_common.py +5 -0
- scipy/stats/_constants.py +42 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +12486 -0
- scipy/stats/_correlation.py +210 -0
- scipy/stats/_covariance.py +636 -0
- scipy/stats/_crosstab.py +204 -0
- scipy/stats/_discrete_distns.py +2098 -0
- scipy/stats/_distn_infrastructure.py +4201 -0
- scipy/stats/_distr_params.py +299 -0
- scipy/stats/_distribution_infrastructure.py +5750 -0
- scipy/stats/_entropy.py +428 -0
- scipy/stats/_finite_differences.py +145 -0
- scipy/stats/_fit.py +1351 -0
- scipy/stats/_hypotests.py +2060 -0
- scipy/stats/_kde.py +732 -0
- scipy/stats/_ksstats.py +600 -0
- scipy/stats/_levy_stable/__init__.py +1231 -0
- scipy/stats/_levy_stable/levyst.cp314-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp314-win_arm64.pyd +0 -0
- scipy/stats/_mannwhitneyu.py +492 -0
- scipy/stats/_mgc.py +550 -0
- scipy/stats/_morestats.py +4626 -0
- scipy/stats/_mstats_basic.py +3658 -0
- scipy/stats/_mstats_extras.py +521 -0
- scipy/stats/_multicomp.py +449 -0
- scipy/stats/_multivariate.py +7281 -0
- scipy/stats/_new_distributions.py +452 -0
- scipy/stats/_odds_ratio.py +466 -0
- scipy/stats/_page_trend_test.py +486 -0
- scipy/stats/_probability_distribution.py +1964 -0
- scipy/stats/_qmc.py +2956 -0
- scipy/stats/_qmc_cy.cp314-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp314-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp314-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp314-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp314-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp314-win_arm64.pyd +0 -0
- scipy/stats/_relative_risk.py +263 -0
- scipy/stats/_resampling.py +2352 -0
- scipy/stats/_result_classes.py +40 -0
- scipy/stats/_sampling.py +1314 -0
- scipy/stats/_sensitivity_analysis.py +713 -0
- scipy/stats/_sobol.cp314-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp314-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp314-win_arm64.lib +0 -0
- scipy/stats/_stats.cp314-win_arm64.pyd +0 -0
- scipy/stats/_stats.pxd +10 -0
- scipy/stats/_stats_mstats_common.py +322 -0
- scipy/stats/_stats_py.py +11089 -0
- scipy/stats/_stats_pythran.cp314-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp314-win_arm64.pyd +0 -0
- scipy/stats/_survival.py +683 -0
- scipy/stats/_tukeylambda_stats.py +199 -0
- scipy/stats/_unuran/__init__.py +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp314-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp314-win_arm64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
- scipy/stats/_variation.py +126 -0
- scipy/stats/_warnings_errors.py +38 -0
- scipy/stats/_wilcoxon.py +265 -0
- scipy/stats/biasedurn.py +16 -0
- scipy/stats/contingency.py +521 -0
- scipy/stats/distributions.py +24 -0
- scipy/stats/kde.py +18 -0
- scipy/stats/morestats.py +27 -0
- scipy/stats/mstats.py +140 -0
- scipy/stats/mstats_basic.py +42 -0
- scipy/stats/mstats_extras.py +25 -0
- scipy/stats/mvn.py +17 -0
- scipy/stats/qmc.py +236 -0
- scipy/stats/sampling.py +73 -0
- scipy/stats/stats.py +41 -0
- scipy/stats/tests/__init__.py +0 -0
- scipy/stats/tests/common_tests.py +356 -0
- scipy/stats/tests/data/_mvt.py +171 -0
- scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
- scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
- scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
- scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
- scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
- scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
- scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
- scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
- scipy/stats/tests/test_axis_nan_policy.py +1388 -0
- scipy/stats/tests/test_binned_statistic.py +568 -0
- scipy/stats/tests/test_censored_data.py +152 -0
- scipy/stats/tests/test_contingency.py +294 -0
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +2198 -0
- scipy/stats/tests/test_continuous_basic.py +1053 -0
- scipy/stats/tests/test_continuous_fit_censored.py +683 -0
- scipy/stats/tests/test_correlation.py +80 -0
- scipy/stats/tests/test_crosstab.py +115 -0
- scipy/stats/tests/test_discrete_basic.py +580 -0
- scipy/stats/tests/test_discrete_distns.py +700 -0
- scipy/stats/tests/test_distributions.py +10413 -0
- scipy/stats/tests/test_entropy.py +322 -0
- scipy/stats/tests/test_fast_gen_inversion.py +435 -0
- scipy/stats/tests/test_fit.py +1090 -0
- scipy/stats/tests/test_hypotests.py +1991 -0
- scipy/stats/tests/test_kdeoth.py +676 -0
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_mgc.py +217 -0
- scipy/stats/tests/test_morestats.py +3259 -0
- scipy/stats/tests/test_mstats_basic.py +2071 -0
- scipy/stats/tests/test_mstats_extras.py +172 -0
- scipy/stats/tests/test_multicomp.py +405 -0
- scipy/stats/tests/test_multivariate.py +4381 -0
- scipy/stats/tests/test_odds_ratio.py +148 -0
- scipy/stats/tests/test_qmc.py +1492 -0
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +345 -0
- scipy/stats/tests/test_relative_risk.py +95 -0
- scipy/stats/tests/test_resampling.py +2000 -0
- scipy/stats/tests/test_sampling.py +1450 -0
- scipy/stats/tests/test_sensitivity_analysis.py +310 -0
- scipy/stats/tests/test_stats.py +9707 -0
- scipy/stats/tests/test_survival.py +466 -0
- scipy/stats/tests/test_tukeylambda_stats.py +85 -0
- scipy/stats/tests/test_variation.py +216 -0
- scipy/version.py +12 -0
- scipy-1.16.2.dist-info/DELVEWHEEL +2 -0
- scipy-1.16.2.dist-info/LICENSE.txt +912 -0
- scipy-1.16.2.dist-info/METADATA +1061 -0
- scipy-1.16.2.dist-info/RECORD +1530 -0
- scipy-1.16.2.dist-info/WHEEL +4 -0
- scipy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
- scipy.libs/scipy_openblas-f3ac85b1f412f7e86514c923dc4058d1.dll +0 -0
@@ -0,0 +1,963 @@
|
|
1
|
+
"""Routines for numerical differentiation."""
|
2
|
+
import functools
|
3
|
+
import numpy as np
|
4
|
+
from numpy.linalg import norm
|
5
|
+
|
6
|
+
from scipy.sparse.linalg import LinearOperator
|
7
|
+
from ..sparse import issparse, isspmatrix, find, csc_array, csr_array, csr_matrix
|
8
|
+
from ._group_columns import group_dense, group_sparse
|
9
|
+
from scipy._lib._array_api import array_namespace
|
10
|
+
from scipy._lib._util import MapWrapper
|
11
|
+
from scipy._lib import array_api_extra as xpx
|
12
|
+
|
13
|
+
|
14
|
+
def _adjust_scheme_to_bounds(x0, h, num_steps, scheme, lb, ub):
|
15
|
+
"""Adjust final difference scheme to the presence of bounds.
|
16
|
+
|
17
|
+
Parameters
|
18
|
+
----------
|
19
|
+
x0 : ndarray, shape (n,)
|
20
|
+
Point at which we wish to estimate derivative.
|
21
|
+
h : ndarray, shape (n,)
|
22
|
+
Desired absolute finite difference steps.
|
23
|
+
num_steps : int
|
24
|
+
Number of `h` steps in one direction required to implement finite
|
25
|
+
difference scheme. For example, 2 means that we need to evaluate
|
26
|
+
f(x0 + 2 * h) or f(x0 - 2 * h)
|
27
|
+
scheme : {'1-sided', '2-sided'}
|
28
|
+
Whether steps in one or both directions are required. In other
|
29
|
+
words '1-sided' applies to forward and backward schemes, '2-sided'
|
30
|
+
applies to center schemes.
|
31
|
+
lb : ndarray, shape (n,)
|
32
|
+
Lower bounds on independent variables.
|
33
|
+
ub : ndarray, shape (n,)
|
34
|
+
Upper bounds on independent variables.
|
35
|
+
|
36
|
+
Returns
|
37
|
+
-------
|
38
|
+
h_adjusted : ndarray, shape (n,)
|
39
|
+
Adjusted absolute step sizes. Step size decreases only if a sign flip
|
40
|
+
or switching to one-sided scheme doesn't allow to take a full step.
|
41
|
+
use_one_sided : ndarray of bool, shape (n,)
|
42
|
+
Whether to switch to one-sided scheme. Informative only for
|
43
|
+
``scheme='2-sided'``.
|
44
|
+
"""
|
45
|
+
if scheme == '1-sided':
|
46
|
+
use_one_sided = np.ones_like(h, dtype=bool)
|
47
|
+
elif scheme == '2-sided':
|
48
|
+
h = np.abs(h)
|
49
|
+
use_one_sided = np.zeros_like(h, dtype=bool)
|
50
|
+
else:
|
51
|
+
raise ValueError("`scheme` must be '1-sided' or '2-sided'.")
|
52
|
+
|
53
|
+
if np.all((lb == -np.inf) & (ub == np.inf)):
|
54
|
+
return h, use_one_sided
|
55
|
+
|
56
|
+
h_total = h * num_steps
|
57
|
+
h_adjusted = h.copy()
|
58
|
+
|
59
|
+
lower_dist = x0 - lb
|
60
|
+
upper_dist = ub - x0
|
61
|
+
|
62
|
+
if scheme == '1-sided':
|
63
|
+
x = x0 + h_total
|
64
|
+
violated = (x < lb) | (x > ub)
|
65
|
+
fitting = np.abs(h_total) <= np.maximum(lower_dist, upper_dist)
|
66
|
+
h_adjusted[violated & fitting] *= -1
|
67
|
+
|
68
|
+
forward = (upper_dist >= lower_dist) & ~fitting
|
69
|
+
h_adjusted[forward] = upper_dist[forward] / num_steps
|
70
|
+
backward = (upper_dist < lower_dist) & ~fitting
|
71
|
+
h_adjusted[backward] = -lower_dist[backward] / num_steps
|
72
|
+
elif scheme == '2-sided':
|
73
|
+
central = (lower_dist >= h_total) & (upper_dist >= h_total)
|
74
|
+
|
75
|
+
forward = (upper_dist >= lower_dist) & ~central
|
76
|
+
h_adjusted[forward] = np.minimum(
|
77
|
+
h[forward], 0.5 * upper_dist[forward] / num_steps)
|
78
|
+
use_one_sided[forward] = True
|
79
|
+
|
80
|
+
backward = (upper_dist < lower_dist) & ~central
|
81
|
+
h_adjusted[backward] = -np.minimum(
|
82
|
+
h[backward], 0.5 * lower_dist[backward] / num_steps)
|
83
|
+
use_one_sided[backward] = True
|
84
|
+
|
85
|
+
min_dist = np.minimum(upper_dist, lower_dist) / num_steps
|
86
|
+
adjusted_central = (~central & (np.abs(h_adjusted) <= min_dist))
|
87
|
+
h_adjusted[adjusted_central] = min_dist[adjusted_central]
|
88
|
+
use_one_sided[adjusted_central] = False
|
89
|
+
|
90
|
+
return h_adjusted, use_one_sided
|
91
|
+
|
92
|
+
|
93
|
+
@functools.lru_cache
|
94
|
+
def _eps_for_method(x0_dtype, f0_dtype, method):
|
95
|
+
"""
|
96
|
+
Calculates relative EPS step to use for a given data type
|
97
|
+
and numdiff step method.
|
98
|
+
|
99
|
+
Progressively smaller steps are used for larger floating point types.
|
100
|
+
|
101
|
+
Parameters
|
102
|
+
----------
|
103
|
+
f0_dtype: np.dtype
|
104
|
+
dtype of function evaluation
|
105
|
+
|
106
|
+
x0_dtype: np.dtype
|
107
|
+
dtype of parameter vector
|
108
|
+
|
109
|
+
method: {'2-point', '3-point', 'cs'}
|
110
|
+
|
111
|
+
Returns
|
112
|
+
-------
|
113
|
+
EPS: float
|
114
|
+
relative step size. May be np.float16, np.float32, np.float64
|
115
|
+
|
116
|
+
Notes
|
117
|
+
-----
|
118
|
+
The default relative step will be np.float64. However, if x0 or f0 are
|
119
|
+
smaller floating point types (np.float16, np.float32), then the smallest
|
120
|
+
floating point type is chosen.
|
121
|
+
"""
|
122
|
+
# the default EPS value
|
123
|
+
EPS = np.finfo(np.float64).eps
|
124
|
+
|
125
|
+
x0_is_fp = False
|
126
|
+
if np.issubdtype(x0_dtype, np.inexact):
|
127
|
+
# if you're a floating point type then over-ride the default EPS
|
128
|
+
EPS = np.finfo(x0_dtype).eps
|
129
|
+
x0_itemsize = np.dtype(x0_dtype).itemsize
|
130
|
+
x0_is_fp = True
|
131
|
+
|
132
|
+
if np.issubdtype(f0_dtype, np.inexact):
|
133
|
+
f0_itemsize = np.dtype(f0_dtype).itemsize
|
134
|
+
# choose the smallest itemsize between x0 and f0
|
135
|
+
if x0_is_fp and f0_itemsize < x0_itemsize:
|
136
|
+
EPS = np.finfo(f0_dtype).eps
|
137
|
+
|
138
|
+
if method in ["2-point", "cs"]:
|
139
|
+
return EPS**0.5
|
140
|
+
elif method in ["3-point"]:
|
141
|
+
return EPS**(1/3)
|
142
|
+
else:
|
143
|
+
raise RuntimeError("Unknown step method, should be one of "
|
144
|
+
"{'2-point', '3-point', 'cs'}")
|
145
|
+
|
146
|
+
|
147
|
+
def _compute_absolute_step(rel_step, x0, f0, method):
|
148
|
+
"""
|
149
|
+
Computes an absolute step from a relative step for finite difference
|
150
|
+
calculation.
|
151
|
+
|
152
|
+
Parameters
|
153
|
+
----------
|
154
|
+
rel_step: None or array-like
|
155
|
+
Relative step for the finite difference calculation
|
156
|
+
x0 : np.ndarray
|
157
|
+
Parameter vector
|
158
|
+
f0 : np.ndarray or scalar
|
159
|
+
method : {'2-point', '3-point', 'cs'}
|
160
|
+
|
161
|
+
Returns
|
162
|
+
-------
|
163
|
+
h : float
|
164
|
+
The absolute step size
|
165
|
+
|
166
|
+
Notes
|
167
|
+
-----
|
168
|
+
`h` will always be np.float64. However, if `x0` or `f0` are
|
169
|
+
smaller floating point dtypes (e.g. np.float32), then the absolute
|
170
|
+
step size will be calculated from the smallest floating point size.
|
171
|
+
"""
|
172
|
+
# this is used instead of np.sign(x0) because we need
|
173
|
+
# sign_x0 to be 1 when x0 == 0.
|
174
|
+
sign_x0 = (x0 >= 0).astype(float) * 2 - 1
|
175
|
+
|
176
|
+
rstep = _eps_for_method(x0.dtype, f0.dtype, method)
|
177
|
+
|
178
|
+
if rel_step is None:
|
179
|
+
abs_step = rstep * sign_x0 * np.maximum(1.0, np.abs(x0))
|
180
|
+
else:
|
181
|
+
# User has requested specific relative steps.
|
182
|
+
# Don't multiply by max(1, abs(x0) because if x0 < 1 then their
|
183
|
+
# requested step is not used.
|
184
|
+
abs_step = rel_step * sign_x0 * np.abs(x0)
|
185
|
+
|
186
|
+
# however we don't want an abs_step of 0, which can happen if
|
187
|
+
# rel_step is 0, or x0 is 0. Instead, substitute a realistic step
|
188
|
+
dx = ((x0 + abs_step) - x0)
|
189
|
+
abs_step = np.where(dx == 0,
|
190
|
+
rstep * sign_x0 * np.maximum(1.0, np.abs(x0)),
|
191
|
+
abs_step)
|
192
|
+
|
193
|
+
return abs_step
|
194
|
+
|
195
|
+
|
196
|
+
def _prepare_bounds(bounds, x0):
|
197
|
+
"""
|
198
|
+
Prepares new-style bounds from a two-tuple specifying the lower and upper
|
199
|
+
limits for values in x0. If a value is not bound then the lower/upper bound
|
200
|
+
will be expected to be -np.inf/np.inf.
|
201
|
+
|
202
|
+
Examples
|
203
|
+
--------
|
204
|
+
>>> _prepare_bounds([(0, 1, 2), (1, 2, np.inf)], [0.5, 1.5, 2.5])
|
205
|
+
(array([0., 1., 2.]), array([ 1., 2., inf]))
|
206
|
+
"""
|
207
|
+
lb, ub = (np.asarray(b, dtype=float) for b in bounds)
|
208
|
+
if lb.ndim == 0:
|
209
|
+
lb = np.resize(lb, x0.shape)
|
210
|
+
|
211
|
+
if ub.ndim == 0:
|
212
|
+
ub = np.resize(ub, x0.shape)
|
213
|
+
|
214
|
+
return lb, ub
|
215
|
+
|
216
|
+
|
217
|
+
def group_columns(A, order=0):
|
218
|
+
"""Group columns of a 2-D matrix for sparse finite differencing [1]_.
|
219
|
+
|
220
|
+
Two columns are in the same group if in each row at least one of them
|
221
|
+
has zero. A greedy sequential algorithm is used to construct groups.
|
222
|
+
|
223
|
+
Parameters
|
224
|
+
----------
|
225
|
+
A : array_like or sparse array, shape (m, n)
|
226
|
+
Matrix of which to group columns.
|
227
|
+
order : int, iterable of int with shape (n,) or None
|
228
|
+
Permutation array which defines the order of columns enumeration.
|
229
|
+
If int or None, a random permutation is used with `order` used as
|
230
|
+
a random seed. Default is 0, that is use a random permutation but
|
231
|
+
guarantee repeatability.
|
232
|
+
|
233
|
+
Returns
|
234
|
+
-------
|
235
|
+
groups : ndarray of int, shape (n,)
|
236
|
+
Contains values from 0 to n_groups-1, where n_groups is the number
|
237
|
+
of found groups. Each value ``groups[i]`` is an index of a group to
|
238
|
+
which ith column assigned. The procedure was helpful only if
|
239
|
+
n_groups is significantly less than n.
|
240
|
+
|
241
|
+
References
|
242
|
+
----------
|
243
|
+
.. [1] A. Curtis, M. J. D. Powell, and J. Reid, "On the estimation of
|
244
|
+
sparse Jacobian matrices", Journal of the Institute of Mathematics
|
245
|
+
and its Applications, 13 (1974), pp. 117-120.
|
246
|
+
"""
|
247
|
+
if issparse(A):
|
248
|
+
A = csc_array(A)
|
249
|
+
else:
|
250
|
+
A = np.atleast_2d(A)
|
251
|
+
A = (A != 0).astype(np.int32)
|
252
|
+
|
253
|
+
if A.ndim != 2:
|
254
|
+
raise ValueError("`A` must be 2-dimensional.")
|
255
|
+
|
256
|
+
m, n = A.shape
|
257
|
+
|
258
|
+
if order is None or np.isscalar(order):
|
259
|
+
rng = np.random.RandomState(order)
|
260
|
+
order = rng.permutation(n)
|
261
|
+
else:
|
262
|
+
order = np.asarray(order)
|
263
|
+
if order.shape != (n,):
|
264
|
+
raise ValueError("`order` has incorrect shape.")
|
265
|
+
|
266
|
+
A = A[:, order]
|
267
|
+
|
268
|
+
if issparse(A):
|
269
|
+
groups = group_sparse(m, n, A.indices, A.indptr)
|
270
|
+
else:
|
271
|
+
groups = group_dense(m, n, A)
|
272
|
+
|
273
|
+
groups[order] = groups.copy()
|
274
|
+
|
275
|
+
return groups
|
276
|
+
|
277
|
+
|
278
|
+
def approx_derivative(fun, x0, method='3-point', rel_step=None, abs_step=None,
|
279
|
+
f0=None, bounds=(-np.inf, np.inf), sparsity=None,
|
280
|
+
as_linear_operator=False, args=(), kwargs=None,
|
281
|
+
full_output=False, workers=None):
|
282
|
+
"""Compute finite difference approximation of the derivatives of a
|
283
|
+
vector-valued function.
|
284
|
+
|
285
|
+
If a function maps from R^n to R^m, its derivatives form m-by-n matrix
|
286
|
+
called the Jacobian, where an element (i, j) is a partial derivative of
|
287
|
+
f[i] with respect to x[j].
|
288
|
+
|
289
|
+
Parameters
|
290
|
+
----------
|
291
|
+
fun : callable
|
292
|
+
Function of which to estimate the derivatives. The argument x
|
293
|
+
passed to this function is ndarray of shape (n,) (never a scalar
|
294
|
+
even if n=1). It must return 1-D array_like of shape (m,) or a scalar.
|
295
|
+
x0 : array_like of shape (n,) or float
|
296
|
+
Point at which to estimate the derivatives. Float will be converted
|
297
|
+
to a 1-D array.
|
298
|
+
method : {'3-point', '2-point', 'cs'}, optional
|
299
|
+
Finite difference method to use:
|
300
|
+
- '2-point' - use the first order accuracy forward or backward
|
301
|
+
difference.
|
302
|
+
- '3-point' - use central difference in interior points and the
|
303
|
+
second order accuracy forward or backward difference
|
304
|
+
near the boundary.
|
305
|
+
- 'cs' - use a complex-step finite difference scheme. This assumes
|
306
|
+
that the user function is real-valued and can be
|
307
|
+
analytically continued to the complex plane. Otherwise,
|
308
|
+
produces bogus results.
|
309
|
+
rel_step : None or array_like, optional
|
310
|
+
Relative step size to use. If None (default) the absolute step size is
|
311
|
+
computed as ``h = rel_step * sign(x0) * max(1, abs(x0))``, with
|
312
|
+
`rel_step` being selected automatically, see Notes. Otherwise
|
313
|
+
``h = rel_step * sign(x0) * abs(x0)``. For ``method='3-point'`` the
|
314
|
+
sign of `h` is ignored. The calculated step size is possibly adjusted
|
315
|
+
to fit into the bounds.
|
316
|
+
abs_step : array_like, optional
|
317
|
+
Absolute step size to use, possibly adjusted to fit into the bounds.
|
318
|
+
For ``method='3-point'`` the sign of `abs_step` is ignored. By default
|
319
|
+
relative steps are used, only if ``abs_step is not None`` are absolute
|
320
|
+
steps used.
|
321
|
+
f0 : None or array_like, optional
|
322
|
+
If not None it is assumed to be equal to ``fun(x0)``, in this case
|
323
|
+
the ``fun(x0)`` is not called. Default is None.
|
324
|
+
bounds : tuple of array_like, optional
|
325
|
+
Lower and upper bounds on independent variables. Defaults to no bounds.
|
326
|
+
Each bound must match the size of `x0` or be a scalar, in the latter
|
327
|
+
case the bound will be the same for all variables. Use it to limit the
|
328
|
+
range of function evaluation. Bounds checking is not implemented
|
329
|
+
when `as_linear_operator` is True.
|
330
|
+
sparsity : {None, array_like, sparse array, 2-tuple}, optional
|
331
|
+
Defines a sparsity structure of the Jacobian matrix. If the Jacobian
|
332
|
+
matrix is known to have only few non-zero elements in each row, then
|
333
|
+
it's possible to estimate its several columns by a single function
|
334
|
+
evaluation [3]_. To perform such economic computations two ingredients
|
335
|
+
are required:
|
336
|
+
|
337
|
+
* structure : array_like or sparse array of shape (m, n). A zero
|
338
|
+
element means that a corresponding element of the Jacobian
|
339
|
+
identically equals to zero.
|
340
|
+
* groups : array_like of shape (n,). A column grouping for a given
|
341
|
+
sparsity structure, use `group_columns` to obtain it.
|
342
|
+
|
343
|
+
A single array or a sparse array is interpreted as a sparsity
|
344
|
+
structure, and groups are computed inside the function. A tuple is
|
345
|
+
interpreted as (structure, groups). If None (default), a standard
|
346
|
+
dense differencing will be used.
|
347
|
+
|
348
|
+
Note, that sparse differencing makes sense only for large Jacobian
|
349
|
+
matrices where each row contains few non-zero elements.
|
350
|
+
as_linear_operator : bool, optional
|
351
|
+
When True the function returns an `scipy.sparse.linalg.LinearOperator`.
|
352
|
+
Otherwise it returns a dense array or a sparse array depending on
|
353
|
+
`sparsity`. The linear operator provides an efficient way of computing
|
354
|
+
``J.dot(p)`` for any vector ``p`` of shape (n,), but does not allow
|
355
|
+
direct access to individual elements of the matrix. By default
|
356
|
+
`as_linear_operator` is False.
|
357
|
+
args, kwargs : tuple and dict, optional
|
358
|
+
Additional arguments passed to `fun`. Both empty by default.
|
359
|
+
The calling signature is ``fun(x, *args, **kwargs)``.
|
360
|
+
full_output : bool, optional
|
361
|
+
If True then the function also returns a dictionary with extra information
|
362
|
+
about the calculation.
|
363
|
+
workers : int or map-like callable, optional
|
364
|
+
Supply a map-like callable, such as
|
365
|
+
`multiprocessing.Pool.map` for evaluating the population in parallel.
|
366
|
+
This evaluation is carried out as ``workers(fun, iterable)``.
|
367
|
+
Alternatively, if `workers` is an int the task is subdivided into `workers`
|
368
|
+
sections and the fun evaluated in parallel
|
369
|
+
(uses `multiprocessing.Pool <multiprocessing>`).
|
370
|
+
Supply -1 to use all available CPU cores.
|
371
|
+
It is recommended that a map-like be used instead of int, as repeated
|
372
|
+
calls to `approx_derivative` will incur large overhead from setting up
|
373
|
+
new processes.
|
374
|
+
|
375
|
+
Returns
|
376
|
+
-------
|
377
|
+
J : {ndarray, sparse array, LinearOperator}
|
378
|
+
Finite difference approximation of the Jacobian matrix.
|
379
|
+
If `as_linear_operator` is True returns a LinearOperator
|
380
|
+
with shape (m, n). Otherwise it returns a dense array or sparse
|
381
|
+
array depending on how `sparsity` is defined. If `sparsity`
|
382
|
+
is None then a ndarray with shape (m, n) is returned. If
|
383
|
+
`sparsity` is not None returns a csr_array or csr_matrix with
|
384
|
+
shape (m, n) following the array/matrix type of the incoming structure.
|
385
|
+
For sparse arrays and linear operators it is always returned as
|
386
|
+
a 2-D structure. For ndarrays, if m=1 it is returned
|
387
|
+
as a 1-D gradient array with shape (n,).
|
388
|
+
|
389
|
+
info_dict : dict
|
390
|
+
Dictionary containing extra information about the calculation. The
|
391
|
+
keys include:
|
392
|
+
|
393
|
+
- `nfev`, number of function evaluations. If `as_linear_operator` is True
|
394
|
+
then `fun` is expected to track the number of evaluations itself.
|
395
|
+
This is because multiple calls may be made to the linear operator which
|
396
|
+
are not trackable here.
|
397
|
+
|
398
|
+
See Also
|
399
|
+
--------
|
400
|
+
check_derivative : Check correctness of a function computing derivatives.
|
401
|
+
|
402
|
+
Notes
|
403
|
+
-----
|
404
|
+
If `rel_step` is not provided, it assigned as ``EPS**(1/s)``, where EPS is
|
405
|
+
determined from the smallest floating point dtype of `x0` or `fun(x0)`,
|
406
|
+
``np.finfo(x0.dtype).eps``, s=2 for '2-point' method and
|
407
|
+
s=3 for '3-point' method. Such relative step approximately minimizes a sum
|
408
|
+
of truncation and round-off errors, see [1]_. Relative steps are used by
|
409
|
+
default. However, absolute steps are used when ``abs_step is not None``.
|
410
|
+
If any of the absolute or relative steps produces an indistinguishable
|
411
|
+
difference from the original `x0`, ``(x0 + dx) - x0 == 0``, then a
|
412
|
+
automatic step size is substituted for that particular entry.
|
413
|
+
|
414
|
+
A finite difference scheme for '3-point' method is selected automatically.
|
415
|
+
The well-known central difference scheme is used for points sufficiently
|
416
|
+
far from the boundary, and 3-point forward or backward scheme is used for
|
417
|
+
points near the boundary. Both schemes have the second-order accuracy in
|
418
|
+
terms of Taylor expansion. Refer to [2]_ for the formulas of 3-point
|
419
|
+
forward and backward difference schemes.
|
420
|
+
|
421
|
+
For dense differencing when m=1 Jacobian is returned with a shape (n,),
|
422
|
+
on the other hand when n=1 Jacobian is returned with a shape (m, 1).
|
423
|
+
Our motivation is the following: a) It handles a case of gradient
|
424
|
+
computation (m=1) in a conventional way. b) It clearly separates these two
|
425
|
+
different cases. b) In all cases np.atleast_2d can be called to get 2-D
|
426
|
+
Jacobian with correct dimensions.
|
427
|
+
|
428
|
+
References
|
429
|
+
----------
|
430
|
+
.. [1] W. H. Press et. al. "Numerical Recipes. The Art of Scientific
|
431
|
+
Computing. 3rd edition", sec. 5.7.
|
432
|
+
|
433
|
+
.. [2] A. Curtis, M. J. D. Powell, and J. Reid, "On the estimation of
|
434
|
+
sparse Jacobian matrices", Journal of the Institute of Mathematics
|
435
|
+
and its Applications, 13 (1974), pp. 117-120.
|
436
|
+
|
437
|
+
.. [3] B. Fornberg, "Generation of Finite Difference Formulas on
|
438
|
+
Arbitrarily Spaced Grids", Mathematics of Computation 51, 1988.
|
439
|
+
|
440
|
+
Examples
|
441
|
+
--------
|
442
|
+
>>> import numpy as np
|
443
|
+
>>> from scipy.optimize._numdiff import approx_derivative
|
444
|
+
>>>
|
445
|
+
>>> def f(x, c1, c2):
|
446
|
+
... return np.array([x[0] * np.sin(c1 * x[1]),
|
447
|
+
... x[0] * np.cos(c2 * x[1])])
|
448
|
+
...
|
449
|
+
>>> x0 = np.array([1.0, 0.5 * np.pi])
|
450
|
+
>>> approx_derivative(f, x0, args=(1, 2))
|
451
|
+
array([[ 1., 0.],
|
452
|
+
[-1., 0.]])
|
453
|
+
|
454
|
+
Bounds can be used to limit the region of function evaluation.
|
455
|
+
In the example below we compute left and right derivative at point 1.0.
|
456
|
+
|
457
|
+
>>> def g(x):
|
458
|
+
... return x**2 if x >= 1 else x
|
459
|
+
...
|
460
|
+
>>> x0 = 1.0
|
461
|
+
>>> approx_derivative(g, x0, bounds=(-np.inf, 1.0))
|
462
|
+
array([ 1.])
|
463
|
+
>>> approx_derivative(g, x0, bounds=(1.0, np.inf))
|
464
|
+
array([ 2.])
|
465
|
+
|
466
|
+
We can also parallelize the derivative calculation using the workers
|
467
|
+
keyword.
|
468
|
+
|
469
|
+
>>> from multiprocessing import Pool
|
470
|
+
>>> import time
|
471
|
+
>>> def fun2(x): # import from an external file for use with multiprocessing
|
472
|
+
... time.sleep(0.002)
|
473
|
+
... return rosen(x)
|
474
|
+
|
475
|
+
>>> rng = np.random.default_rng()
|
476
|
+
>>> x0 = rng.uniform(high=10, size=(2000,))
|
477
|
+
>>> f0 = rosen(x0)
|
478
|
+
|
479
|
+
>>> %timeit approx_derivative(fun2, x0, f0=f0) # may vary
|
480
|
+
10.5 s ± 5.91 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
|
481
|
+
|
482
|
+
>>> elapsed = []
|
483
|
+
>>> with Pool() as workers:
|
484
|
+
... for i in range(10):
|
485
|
+
... t = time.perf_counter()
|
486
|
+
... approx_derivative(fun2, x0, workers=workers.map, f0=f0)
|
487
|
+
... et = time.perf_counter()
|
488
|
+
... elapsed.append(et - t)
|
489
|
+
>>> np.mean(elapsed) # may vary
|
490
|
+
np.float64(1.442545195999901)
|
491
|
+
|
492
|
+
Create a map-like vectorized version. `x` is a generator, so first of all
|
493
|
+
a 2-D array, `xx`, is reconstituted. Here `xx` has shape `(Y, N)` where `Y`
|
494
|
+
is the number of function evaluations to perform and `N` is the dimensionality
|
495
|
+
of the objective function. The underlying objective function is `rosen`, which
|
496
|
+
requires `xx` to have shape `(N, Y)`, so a transpose is required.
|
497
|
+
|
498
|
+
>>> def fun(f, x, *args, **kwds):
|
499
|
+
... xx = np.r_[[xs for xs in x]]
|
500
|
+
... return f(xx.T)
|
501
|
+
>>> %timeit approx_derivative(fun2, x0, workers=fun, f0=f0) # may vary
|
502
|
+
91.8 ms ± 755 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
|
503
|
+
|
504
|
+
"""
|
505
|
+
if method not in ['2-point', '3-point', 'cs']:
|
506
|
+
raise ValueError(f"Unknown method '{method}'. ")
|
507
|
+
|
508
|
+
info_dict = {'nfev': None}
|
509
|
+
|
510
|
+
xp = array_namespace(x0)
|
511
|
+
_x = xpx.atleast_nd(xp.asarray(x0), ndim=1, xp=xp)
|
512
|
+
_dtype = xp.float64
|
513
|
+
if xp.isdtype(_x.dtype, "real floating"):
|
514
|
+
_dtype = _x.dtype
|
515
|
+
|
516
|
+
# promotes to floating
|
517
|
+
x0 = xp.astype(_x, _dtype)
|
518
|
+
|
519
|
+
if x0.ndim > 1:
|
520
|
+
raise ValueError("`x0` must have at most 1 dimension.")
|
521
|
+
|
522
|
+
lb, ub = _prepare_bounds(bounds, x0)
|
523
|
+
|
524
|
+
if lb.shape != x0.shape or ub.shape != x0.shape:
|
525
|
+
raise ValueError("Inconsistent shapes between bounds and `x0`.")
|
526
|
+
|
527
|
+
if as_linear_operator and not (np.all(np.isinf(lb))
|
528
|
+
and np.all(np.isinf(ub))):
|
529
|
+
raise ValueError("Bounds not supported when "
|
530
|
+
"`as_linear_operator` is True.")
|
531
|
+
|
532
|
+
if kwargs is None:
|
533
|
+
kwargs = {}
|
534
|
+
|
535
|
+
fun_wrapped = _Fun_Wrapper(fun, x0, args, kwargs)
|
536
|
+
|
537
|
+
# Record how function evaluations are consumed by `approx_derivative`.
|
538
|
+
# Historically this was done by upstream functions wrapping `fun`.
|
539
|
+
# However, with parallelization via workers it was going to be impossible to
|
540
|
+
# keep that counter updated across Processes. Counter synchronisation can
|
541
|
+
# be achieved via multiprocessing.Value and a Pool. However, workers can be
|
542
|
+
# any map-like, not necessarily a Pool, so initialization of the Value would
|
543
|
+
# be difficult.
|
544
|
+
nfev = _nfev = 0
|
545
|
+
|
546
|
+
if f0 is None:
|
547
|
+
f0 = fun_wrapped(x0)
|
548
|
+
nfev = 1
|
549
|
+
else:
|
550
|
+
f0 = np.atleast_1d(f0)
|
551
|
+
if f0.ndim > 1:
|
552
|
+
raise ValueError("`f0` passed has more than 1 dimension.")
|
553
|
+
|
554
|
+
if np.any((x0 < lb) | (x0 > ub)):
|
555
|
+
raise ValueError("`x0` violates bound constraints.")
|
556
|
+
|
557
|
+
if as_linear_operator:
|
558
|
+
if rel_step is None:
|
559
|
+
rel_step = _eps_for_method(x0.dtype, f0.dtype, method)
|
560
|
+
|
561
|
+
J, _ = _linear_operator_difference(fun_wrapped, x0,
|
562
|
+
f0, rel_step, method)
|
563
|
+
else:
|
564
|
+
# by default we use rel_step
|
565
|
+
if abs_step is None:
|
566
|
+
h = _compute_absolute_step(rel_step, x0, f0, method)
|
567
|
+
else:
|
568
|
+
# user specifies an absolute step
|
569
|
+
sign_x0 = (x0 >= 0).astype(float) * 2 - 1
|
570
|
+
h = abs_step
|
571
|
+
|
572
|
+
# cannot have a zero step. This might happen if x0 is very large
|
573
|
+
# or small. In which case fall back to relative step.
|
574
|
+
dx = ((x0 + h) - x0)
|
575
|
+
h = np.where(dx == 0,
|
576
|
+
_eps_for_method(x0.dtype, f0.dtype, method) *
|
577
|
+
sign_x0 * np.maximum(1.0, np.abs(x0)),
|
578
|
+
h)
|
579
|
+
|
580
|
+
if method == '2-point':
|
581
|
+
h, use_one_sided = _adjust_scheme_to_bounds(
|
582
|
+
x0, h, 1, '1-sided', lb, ub)
|
583
|
+
elif method == '3-point':
|
584
|
+
h, use_one_sided = _adjust_scheme_to_bounds(
|
585
|
+
x0, h, 1, '2-sided', lb, ub)
|
586
|
+
elif method == 'cs':
|
587
|
+
use_one_sided = False
|
588
|
+
|
589
|
+
# normalize workers
|
590
|
+
workers = workers or map
|
591
|
+
with MapWrapper(workers) as mf:
|
592
|
+
if sparsity is None:
|
593
|
+
J, _nfev = _dense_difference(fun_wrapped, x0, f0, h,
|
594
|
+
use_one_sided, method,
|
595
|
+
mf)
|
596
|
+
else:
|
597
|
+
if not issparse(sparsity) and len(sparsity) == 2:
|
598
|
+
structure, groups = sparsity
|
599
|
+
else:
|
600
|
+
structure = sparsity
|
601
|
+
groups = group_columns(sparsity)
|
602
|
+
|
603
|
+
if issparse(structure):
|
604
|
+
structure = structure.tocsc()
|
605
|
+
else:
|
606
|
+
structure = np.atleast_2d(structure)
|
607
|
+
groups = np.atleast_1d(groups)
|
608
|
+
J, _nfev = _sparse_difference(fun_wrapped, x0, f0, h,
|
609
|
+
use_one_sided, structure,
|
610
|
+
groups, method, mf)
|
611
|
+
|
612
|
+
if full_output:
|
613
|
+
nfev += _nfev
|
614
|
+
info_dict["nfev"] = nfev
|
615
|
+
return J, info_dict
|
616
|
+
else:
|
617
|
+
return J
|
618
|
+
|
619
|
+
|
620
|
+
def _linear_operator_difference(fun, x0, f0, h, method):
|
621
|
+
m = f0.size
|
622
|
+
n = x0.size
|
623
|
+
|
624
|
+
if method == '2-point':
|
625
|
+
# nfev = 1
|
626
|
+
def matvec(p):
|
627
|
+
if np.array_equal(p, np.zeros_like(p)):
|
628
|
+
return np.zeros(m)
|
629
|
+
dx = h / norm(p)
|
630
|
+
x = x0 + dx*p
|
631
|
+
df = fun(x) - f0
|
632
|
+
return df / dx
|
633
|
+
|
634
|
+
elif method == '3-point':
|
635
|
+
# nfev = 2
|
636
|
+
def matvec(p):
|
637
|
+
if np.array_equal(p, np.zeros_like(p)):
|
638
|
+
return np.zeros(m)
|
639
|
+
dx = 2*h / norm(p)
|
640
|
+
x1 = x0 - (dx/2)*p
|
641
|
+
x2 = x0 + (dx/2)*p
|
642
|
+
f1 = fun(x1)
|
643
|
+
f2 = fun(x2)
|
644
|
+
df = f2 - f1
|
645
|
+
return df / dx
|
646
|
+
|
647
|
+
elif method == 'cs':
|
648
|
+
# nfev = 1
|
649
|
+
def matvec(p):
|
650
|
+
if np.array_equal(p, np.zeros_like(p)):
|
651
|
+
return np.zeros(m)
|
652
|
+
dx = h / norm(p)
|
653
|
+
x = x0 + dx*p*1.j
|
654
|
+
f1 = fun(x)
|
655
|
+
df = f1.imag
|
656
|
+
return df / dx
|
657
|
+
else:
|
658
|
+
raise RuntimeError("Never be here.")
|
659
|
+
|
660
|
+
return LinearOperator((m, n), matvec), 0
|
661
|
+
|
662
|
+
|
663
|
+
def _dense_difference(fun, x0, f0, h, use_one_sided, method, workers):
|
664
|
+
m = f0.size
|
665
|
+
n = x0.size
|
666
|
+
J_transposed = np.empty((n, m))
|
667
|
+
nfev = 0
|
668
|
+
|
669
|
+
if method == '2-point':
|
670
|
+
def x_generator2(x0, h):
|
671
|
+
for i in range(n):
|
672
|
+
# If copying isn't done then it's possible for different workers
|
673
|
+
# to see the same values of x1. (At least that's what happened
|
674
|
+
# when I used `multiprocessing.dummy.Pool`).
|
675
|
+
# I also considered creating all the vectors at once, but that
|
676
|
+
# means assembling a very large N x N array. It's therefore a
|
677
|
+
# trade-off between N array copies or creating an NxN array.
|
678
|
+
x1 = np.copy(x0)
|
679
|
+
x1[i] = x0[i] + h[i]
|
680
|
+
yield x1
|
681
|
+
|
682
|
+
# only f_evals (numerator) needs parallelization, the denominator
|
683
|
+
# (the step size) is fast to calculate.
|
684
|
+
f_evals = workers(fun, x_generator2(x0, h))
|
685
|
+
dx = [(x0[i] + h[i]) - x0[i] for i in range(n)]
|
686
|
+
df = [f_eval - f0 for f_eval in f_evals]
|
687
|
+
df_dx = [delf / delx for delf, delx in zip(df, dx)]
|
688
|
+
nfev += len(df_dx)
|
689
|
+
|
690
|
+
elif method == '3-point':
|
691
|
+
def x_generator3(x0, h, use_one_sided):
|
692
|
+
for i, one_sided in enumerate(use_one_sided):
|
693
|
+
x1 = np.copy(x0)
|
694
|
+
x2 = np.copy(x0)
|
695
|
+
if one_sided:
|
696
|
+
x1[i] = x0[i] + h[i]
|
697
|
+
x2[i] = x0[i] + 2*h[i]
|
698
|
+
else:
|
699
|
+
x1[i] = x0[i] - h[i]
|
700
|
+
x2[i] = x0[i] + h[i]
|
701
|
+
yield x1
|
702
|
+
yield x2
|
703
|
+
|
704
|
+
# workers may return something like a list that needs to be turned
|
705
|
+
# into an iterable (can't call `next` on a list)
|
706
|
+
f_evals = iter(workers(fun, x_generator3(x0, h, use_one_sided)))
|
707
|
+
gen = x_generator3(x0, h, use_one_sided)
|
708
|
+
dx = list()
|
709
|
+
df = list()
|
710
|
+
for i, one_sided in enumerate(use_one_sided):
|
711
|
+
l = next(gen)
|
712
|
+
u = next(gen)
|
713
|
+
|
714
|
+
f1 = next(f_evals)
|
715
|
+
f2 = next(f_evals)
|
716
|
+
if one_sided:
|
717
|
+
dx.append(u[i] - x0[i])
|
718
|
+
df.append(-3.0 * f0 + 4 * f1 - f2)
|
719
|
+
else:
|
720
|
+
dx.append(u[i] - l[i])
|
721
|
+
df.append(f2 - f1)
|
722
|
+
df_dx = [delf / delx for delf, delx in zip(df, dx)]
|
723
|
+
nfev += 2 * len(df_dx)
|
724
|
+
elif method == 'cs':
|
725
|
+
def x_generator_cs(x0, h):
|
726
|
+
for i in range(n):
|
727
|
+
xc = x0.astype(complex, copy=True)
|
728
|
+
xc[i] += h[i] * 1.j
|
729
|
+
yield xc
|
730
|
+
|
731
|
+
f_evals = iter(workers(fun, x_generator_cs(x0, h)))
|
732
|
+
df_dx = [f1.imag / hi for f1, hi in zip(f_evals, h)]
|
733
|
+
nfev += len(df_dx)
|
734
|
+
else:
|
735
|
+
raise RuntimeError("Never be here.")
|
736
|
+
|
737
|
+
for i, v in enumerate(df_dx):
|
738
|
+
J_transposed[i] = v
|
739
|
+
|
740
|
+
if m == 1:
|
741
|
+
J_transposed = np.ravel(J_transposed)
|
742
|
+
|
743
|
+
return J_transposed.T, nfev
|
744
|
+
|
745
|
+
|
746
|
+
def _sparse_difference(fun, x0, f0, h, use_one_sided,
|
747
|
+
structure, groups, method, workers):
|
748
|
+
m = f0.size
|
749
|
+
n = x0.size
|
750
|
+
row_indices = []
|
751
|
+
col_indices = []
|
752
|
+
fractions = []
|
753
|
+
|
754
|
+
n_groups = np.max(groups) + 1
|
755
|
+
nfev = 0
|
756
|
+
|
757
|
+
def e_generator():
|
758
|
+
# Perturb variables which are in the same group simultaneously.
|
759
|
+
for group in range(n_groups):
|
760
|
+
yield np.equal(group, groups)
|
761
|
+
|
762
|
+
def x_generator2():
|
763
|
+
e_gen = e_generator()
|
764
|
+
for e in e_gen:
|
765
|
+
h_vec = h * e
|
766
|
+
x = x0 + h_vec
|
767
|
+
yield x
|
768
|
+
|
769
|
+
def x_generator3():
|
770
|
+
e_gen = e_generator()
|
771
|
+
for e in e_gen:
|
772
|
+
h_vec = h * e
|
773
|
+
x1 = x0.copy()
|
774
|
+
x2 = x0.copy()
|
775
|
+
|
776
|
+
mask_1 = use_one_sided & e
|
777
|
+
x1[mask_1] += h_vec[mask_1]
|
778
|
+
x2[mask_1] += 2 * h_vec[mask_1]
|
779
|
+
|
780
|
+
mask_2 = ~use_one_sided & e
|
781
|
+
x1[mask_2] -= h_vec[mask_2]
|
782
|
+
x2[mask_2] += h_vec[mask_2]
|
783
|
+
yield x1
|
784
|
+
yield x2
|
785
|
+
|
786
|
+
def x_generator_cs():
|
787
|
+
e_gen = e_generator()
|
788
|
+
for e in e_gen:
|
789
|
+
h_vec = h * e
|
790
|
+
yield x0 + h_vec * 1.j
|
791
|
+
|
792
|
+
# evaluate the function for each of the groups
|
793
|
+
if method == '2-point':
|
794
|
+
f_evals = iter(workers(fun, x_generator2()))
|
795
|
+
xs = x_generator2()
|
796
|
+
elif method == '3-point':
|
797
|
+
f_evals = iter(workers(fun, x_generator3()))
|
798
|
+
xs = x_generator3()
|
799
|
+
elif method == 'cs':
|
800
|
+
f_evals = iter(workers(fun, x_generator_cs()))
|
801
|
+
|
802
|
+
for e in e_generator():
|
803
|
+
# The result is written to columns which correspond to perturbed
|
804
|
+
# variables.
|
805
|
+
cols, = np.nonzero(e)
|
806
|
+
# Find all non-zero elements in selected columns of Jacobian.
|
807
|
+
i, j, _ = find(structure[:, cols])
|
808
|
+
# Restore column indices in the full array.
|
809
|
+
j = cols[j]
|
810
|
+
|
811
|
+
if method == '2-point':
|
812
|
+
dx = next(xs) - x0
|
813
|
+
df = next(f_evals) - f0
|
814
|
+
nfev += 1
|
815
|
+
elif method == '3-point':
|
816
|
+
# Here we do conceptually the same but separate one-sided
|
817
|
+
# and two-sided schemes.
|
818
|
+
x1 = next(xs)
|
819
|
+
x2 = next(xs)
|
820
|
+
|
821
|
+
mask_1 = use_one_sided & e
|
822
|
+
mask_2 = ~use_one_sided & e
|
823
|
+
|
824
|
+
dx = np.zeros(n)
|
825
|
+
dx[mask_1] = x2[mask_1] - x0[mask_1]
|
826
|
+
dx[mask_2] = x2[mask_2] - x1[mask_2]
|
827
|
+
|
828
|
+
f1 = next(f_evals)
|
829
|
+
f2 = next(f_evals)
|
830
|
+
nfev += 2
|
831
|
+
|
832
|
+
mask = use_one_sided[j]
|
833
|
+
df = np.empty(m)
|
834
|
+
|
835
|
+
rows = i[mask]
|
836
|
+
df[rows] = -3 * f0[rows] + 4 * f1[rows] - f2[rows]
|
837
|
+
|
838
|
+
rows = i[~mask]
|
839
|
+
df[rows] = f2[rows] - f1[rows]
|
840
|
+
elif method == 'cs':
|
841
|
+
f1 = next(f_evals)
|
842
|
+
nfev += 1
|
843
|
+
df = f1.imag
|
844
|
+
dx = h * e
|
845
|
+
else:
|
846
|
+
raise ValueError("Never be here.")
|
847
|
+
|
848
|
+
# All that's left is to compute the fraction. We store i, j and
|
849
|
+
# fractions as separate arrays and later construct csr_array.
|
850
|
+
row_indices.append(i)
|
851
|
+
col_indices.append(j)
|
852
|
+
fractions.append(df[i] / dx[j])
|
853
|
+
|
854
|
+
row_indices = np.hstack(row_indices)
|
855
|
+
col_indices = np.hstack(col_indices)
|
856
|
+
fractions = np.hstack(fractions)
|
857
|
+
|
858
|
+
if isspmatrix(structure):
|
859
|
+
return csr_matrix((fractions, (row_indices, col_indices)), shape=(m, n)), nfev
|
860
|
+
return csr_array((fractions, (row_indices, col_indices)), shape=(m, n)), nfev
|
861
|
+
|
862
|
+
|
863
|
+
class _Fun_Wrapper:
|
864
|
+
# Permits pickling of a wrapped function
|
865
|
+
def __init__(self, fun, x0, args, kwargs):
|
866
|
+
self.fun = fun
|
867
|
+
self.x0 = x0
|
868
|
+
self.args = args
|
869
|
+
self.kwargs = kwargs
|
870
|
+
|
871
|
+
def __call__(self, x):
|
872
|
+
# send user function same fp type as x0. (but only if cs is not being
|
873
|
+
# used
|
874
|
+
xp = array_namespace(self.x0)
|
875
|
+
|
876
|
+
if xp.isdtype(x.dtype, "real floating"):
|
877
|
+
x = xp.astype(x, self.x0.dtype)
|
878
|
+
|
879
|
+
f = np.atleast_1d(self.fun(x, *self.args, **self.kwargs))
|
880
|
+
if f.ndim > 1:
|
881
|
+
raise RuntimeError("`fun` return value has "
|
882
|
+
"more than 1 dimension.")
|
883
|
+
return f
|
884
|
+
|
885
|
+
|
886
|
+
def check_derivative(fun, jac, x0, bounds=(-np.inf, np.inf), args=(),
|
887
|
+
kwargs=None):
|
888
|
+
"""Check correctness of a function computing derivatives (Jacobian or
|
889
|
+
gradient) by comparison with a finite difference approximation.
|
890
|
+
|
891
|
+
Parameters
|
892
|
+
----------
|
893
|
+
fun : callable
|
894
|
+
Function of which to estimate the derivatives. The argument x
|
895
|
+
passed to this function is ndarray of shape (n,) (never a scalar
|
896
|
+
even if n=1). It must return 1-D array_like of shape (m,) or a scalar.
|
897
|
+
jac : callable
|
898
|
+
Function which computes Jacobian matrix of `fun`. It must work with
|
899
|
+
argument x the same way as `fun`. The return value must be array_like
|
900
|
+
or sparse array with an appropriate shape.
|
901
|
+
x0 : array_like of shape (n,) or float
|
902
|
+
Point at which to estimate the derivatives. Float will be converted
|
903
|
+
to 1-D array.
|
904
|
+
bounds : 2-tuple of array_like, optional
|
905
|
+
Lower and upper bounds on independent variables. Defaults to no bounds.
|
906
|
+
Each bound must match the size of `x0` or be a scalar, in the latter
|
907
|
+
case the bound will be the same for all variables. Use it to limit the
|
908
|
+
range of function evaluation.
|
909
|
+
args, kwargs : tuple and dict, optional
|
910
|
+
Additional arguments passed to `fun` and `jac`. Both empty by default.
|
911
|
+
The calling signature is ``fun(x, *args, **kwargs)`` and the same
|
912
|
+
for `jac`.
|
913
|
+
|
914
|
+
Returns
|
915
|
+
-------
|
916
|
+
accuracy : float
|
917
|
+
The maximum among all relative errors for elements with absolute values
|
918
|
+
higher than 1 and absolute errors for elements with absolute values
|
919
|
+
less or equal than 1. If `accuracy` is on the order of 1e-6 or lower,
|
920
|
+
then it is likely that your `jac` implementation is correct.
|
921
|
+
|
922
|
+
See Also
|
923
|
+
--------
|
924
|
+
approx_derivative : Compute finite difference approximation of derivative.
|
925
|
+
|
926
|
+
Examples
|
927
|
+
--------
|
928
|
+
>>> import numpy as np
|
929
|
+
>>> from scipy.optimize._numdiff import check_derivative
|
930
|
+
>>>
|
931
|
+
>>>
|
932
|
+
>>> def f(x, c1, c2):
|
933
|
+
... return np.array([x[0] * np.sin(c1 * x[1]),
|
934
|
+
... x[0] * np.cos(c2 * x[1])])
|
935
|
+
...
|
936
|
+
>>> def jac(x, c1, c2):
|
937
|
+
... return np.array([
|
938
|
+
... [np.sin(c1 * x[1]), c1 * x[0] * np.cos(c1 * x[1])],
|
939
|
+
... [np.cos(c2 * x[1]), -c2 * x[0] * np.sin(c2 * x[1])]
|
940
|
+
... ])
|
941
|
+
...
|
942
|
+
>>>
|
943
|
+
>>> x0 = np.array([1.0, 0.5 * np.pi])
|
944
|
+
>>> check_derivative(f, jac, x0, args=(1, 2))
|
945
|
+
2.4492935982947064e-16
|
946
|
+
"""
|
947
|
+
if kwargs is None:
|
948
|
+
kwargs = {}
|
949
|
+
J_to_test = jac(x0, *args, **kwargs)
|
950
|
+
if issparse(J_to_test):
|
951
|
+
J_diff = approx_derivative(fun, x0, bounds=bounds, sparsity=J_to_test,
|
952
|
+
args=args, kwargs=kwargs)
|
953
|
+
J_to_test = csr_array(J_to_test)
|
954
|
+
abs_err = J_to_test - J_diff
|
955
|
+
i, j, abs_err_data = find(abs_err)
|
956
|
+
J_diff_data = np.asarray(J_diff[i, j]).ravel()
|
957
|
+
return np.max(np.abs(abs_err_data) /
|
958
|
+
np.maximum(1, np.abs(J_diff_data)))
|
959
|
+
else:
|
960
|
+
J_diff = approx_derivative(fun, x0, bounds=bounds,
|
961
|
+
args=args, kwargs=kwargs)
|
962
|
+
abs_err = np.abs(J_to_test - J_diff)
|
963
|
+
return np.max(abs_err / np.maximum(1, np.abs(J_diff)))
|