scipy 1.16.2__cp312-cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_cyutility.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp312-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp312-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp312-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp312-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp312-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp312-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp312-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp312-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp312-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp312-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp312-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp312-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp312-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp312-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp312-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp312-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp312-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp312-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp312-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp312-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp312-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp312-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp312-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp312-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp312-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp312-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp312-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp312-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp312-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp312-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp312-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp312-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp312-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp312-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp312-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp312-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp312-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp312-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp312-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp312-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp312-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp312-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp312-win_arm64.lib +0 -0
- scipy/signal/_spline.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp312-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp312-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp312-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp312-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp312-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp312-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp312-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp312-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp312-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp312-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp312-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp312-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/special/_comb.cp312-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp312-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp312-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp312-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/special/_specfun.cp312-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp312-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp312-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp312-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp312-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp312-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/special/cython_special.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp312-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp312-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp312-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp312-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp312-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp312-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp312-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp312-win_arm64.lib +0 -0
- scipy/stats/_stats.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp312-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.cp312-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp312-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,1296 @@
|
|
1
|
+
from contextlib import suppress
|
2
|
+
from inspect import signature
|
3
|
+
import copy
|
4
|
+
|
5
|
+
import numpy as np
|
6
|
+
from scipy.optimize import (
|
7
|
+
Bounds,
|
8
|
+
LinearConstraint,
|
9
|
+
NonlinearConstraint,
|
10
|
+
OptimizeResult,
|
11
|
+
)
|
12
|
+
from scipy.optimize._constraints import PreparedConstraint
|
13
|
+
|
14
|
+
|
15
|
+
from .settings import PRINT_OPTIONS, BARRIER
|
16
|
+
from .utils import CallbackSuccess, get_arrays_tol
|
17
|
+
from .utils import exact_1d_array
|
18
|
+
|
19
|
+
|
20
|
+
class ObjectiveFunction:
|
21
|
+
"""
|
22
|
+
Real-valued objective function.
|
23
|
+
"""
|
24
|
+
|
25
|
+
def __init__(self, fun, verbose, debug, *args):
|
26
|
+
"""
|
27
|
+
Initialize the objective function.
|
28
|
+
|
29
|
+
Parameters
|
30
|
+
----------
|
31
|
+
fun : {callable, None}
|
32
|
+
Function to evaluate, or None.
|
33
|
+
|
34
|
+
``fun(x, *args) -> float``
|
35
|
+
|
36
|
+
where ``x`` is an array with shape (n,) and `args` is a tuple.
|
37
|
+
verbose : bool
|
38
|
+
Whether to print the function evaluations.
|
39
|
+
debug : bool
|
40
|
+
Whether to make debugging tests during the execution.
|
41
|
+
*args : tuple
|
42
|
+
Additional arguments to be passed to the function.
|
43
|
+
"""
|
44
|
+
if debug:
|
45
|
+
assert fun is None or callable(fun)
|
46
|
+
assert isinstance(verbose, bool)
|
47
|
+
assert isinstance(debug, bool)
|
48
|
+
|
49
|
+
self._fun = fun
|
50
|
+
self._verbose = verbose
|
51
|
+
self._args = args
|
52
|
+
self._n_eval = 0
|
53
|
+
|
54
|
+
def __call__(self, x):
|
55
|
+
"""
|
56
|
+
Evaluate the objective function.
|
57
|
+
|
58
|
+
Parameters
|
59
|
+
----------
|
60
|
+
x : array_like, shape (n,)
|
61
|
+
Point at which the objective function is evaluated.
|
62
|
+
|
63
|
+
Returns
|
64
|
+
-------
|
65
|
+
float
|
66
|
+
Function value at `x`.
|
67
|
+
"""
|
68
|
+
x = np.array(x, dtype=float)
|
69
|
+
if self._fun is None:
|
70
|
+
f = 0.0
|
71
|
+
else:
|
72
|
+
f = float(np.squeeze(self._fun(x, *self._args)))
|
73
|
+
self._n_eval += 1
|
74
|
+
if self._verbose:
|
75
|
+
with np.printoptions(**PRINT_OPTIONS):
|
76
|
+
print(f"{self.name}({x}) = {f}")
|
77
|
+
return f
|
78
|
+
|
79
|
+
@property
|
80
|
+
def n_eval(self):
|
81
|
+
"""
|
82
|
+
Number of function evaluations.
|
83
|
+
|
84
|
+
Returns
|
85
|
+
-------
|
86
|
+
int
|
87
|
+
Number of function evaluations.
|
88
|
+
"""
|
89
|
+
return self._n_eval
|
90
|
+
|
91
|
+
@property
|
92
|
+
def name(self):
|
93
|
+
"""
|
94
|
+
Name of the objective function.
|
95
|
+
|
96
|
+
Returns
|
97
|
+
-------
|
98
|
+
str
|
99
|
+
Name of the objective function.
|
100
|
+
"""
|
101
|
+
name = ""
|
102
|
+
if self._fun is not None:
|
103
|
+
try:
|
104
|
+
name = self._fun.__name__
|
105
|
+
except AttributeError:
|
106
|
+
name = "fun"
|
107
|
+
return name
|
108
|
+
|
109
|
+
|
110
|
+
class BoundConstraints:
|
111
|
+
"""
|
112
|
+
Bound constraints ``xl <= x <= xu``.
|
113
|
+
"""
|
114
|
+
|
115
|
+
def __init__(self, bounds):
|
116
|
+
"""
|
117
|
+
Initialize the bound constraints.
|
118
|
+
|
119
|
+
Parameters
|
120
|
+
----------
|
121
|
+
bounds : scipy.optimize.Bounds
|
122
|
+
Bound constraints.
|
123
|
+
"""
|
124
|
+
self._xl = np.array(bounds.lb, float)
|
125
|
+
self._xu = np.array(bounds.ub, float)
|
126
|
+
|
127
|
+
# Remove the ill-defined bounds.
|
128
|
+
self.xl[np.isnan(self.xl)] = -np.inf
|
129
|
+
self.xu[np.isnan(self.xu)] = np.inf
|
130
|
+
|
131
|
+
self.is_feasible = (
|
132
|
+
np.all(self.xl <= self.xu)
|
133
|
+
and np.all(self.xl < np.inf)
|
134
|
+
and np.all(self.xu > -np.inf)
|
135
|
+
)
|
136
|
+
self.m = np.count_nonzero(self.xl > -np.inf) + np.count_nonzero(
|
137
|
+
self.xu < np.inf
|
138
|
+
)
|
139
|
+
self.pcs = PreparedConstraint(bounds, np.ones(bounds.lb.size))
|
140
|
+
|
141
|
+
@property
|
142
|
+
def xl(self):
|
143
|
+
"""
|
144
|
+
Lower bound.
|
145
|
+
|
146
|
+
Returns
|
147
|
+
-------
|
148
|
+
`numpy.ndarray`, shape (n,)
|
149
|
+
Lower bound.
|
150
|
+
"""
|
151
|
+
return self._xl
|
152
|
+
|
153
|
+
@property
|
154
|
+
def xu(self):
|
155
|
+
"""
|
156
|
+
Upper bound.
|
157
|
+
|
158
|
+
Returns
|
159
|
+
-------
|
160
|
+
`numpy.ndarray`, shape (n,)
|
161
|
+
Upper bound.
|
162
|
+
"""
|
163
|
+
return self._xu
|
164
|
+
|
165
|
+
def maxcv(self, x):
|
166
|
+
"""
|
167
|
+
Evaluate the maximum constraint violation.
|
168
|
+
|
169
|
+
Parameters
|
170
|
+
----------
|
171
|
+
x : array_like, shape (n,)
|
172
|
+
Point at which the maximum constraint violation is evaluated.
|
173
|
+
|
174
|
+
Returns
|
175
|
+
-------
|
176
|
+
float
|
177
|
+
Maximum constraint violation at `x`.
|
178
|
+
"""
|
179
|
+
x = np.asarray(x, dtype=float)
|
180
|
+
return self.violation(x)
|
181
|
+
|
182
|
+
def violation(self, x):
|
183
|
+
# shortcut for no bounds
|
184
|
+
if self.is_feasible:
|
185
|
+
return np.array([0])
|
186
|
+
else:
|
187
|
+
return self.pcs.violation(x)
|
188
|
+
|
189
|
+
def project(self, x):
|
190
|
+
"""
|
191
|
+
Project a point onto the feasible set.
|
192
|
+
|
193
|
+
Parameters
|
194
|
+
----------
|
195
|
+
x : array_like, shape (n,)
|
196
|
+
Point to be projected.
|
197
|
+
|
198
|
+
Returns
|
199
|
+
-------
|
200
|
+
`numpy.ndarray`, shape (n,)
|
201
|
+
Projection of `x` onto the feasible set.
|
202
|
+
"""
|
203
|
+
return np.clip(x, self.xl, self.xu) if self.is_feasible else x
|
204
|
+
|
205
|
+
|
206
|
+
class LinearConstraints:
|
207
|
+
"""
|
208
|
+
Linear constraints ``a_ub @ x <= b_ub`` and ``a_eq @ x == b_eq``.
|
209
|
+
"""
|
210
|
+
|
211
|
+
def __init__(self, constraints, n, debug):
|
212
|
+
"""
|
213
|
+
Initialize the linear constraints.
|
214
|
+
|
215
|
+
Parameters
|
216
|
+
----------
|
217
|
+
constraints : list of LinearConstraint
|
218
|
+
Linear constraints.
|
219
|
+
n : int
|
220
|
+
Number of variables.
|
221
|
+
debug : bool
|
222
|
+
Whether to make debugging tests during the execution.
|
223
|
+
"""
|
224
|
+
if debug:
|
225
|
+
assert isinstance(constraints, list)
|
226
|
+
for constraint in constraints:
|
227
|
+
assert isinstance(constraint, LinearConstraint)
|
228
|
+
assert isinstance(debug, bool)
|
229
|
+
|
230
|
+
self._a_ub = np.empty((0, n))
|
231
|
+
self._b_ub = np.empty(0)
|
232
|
+
self._a_eq = np.empty((0, n))
|
233
|
+
self._b_eq = np.empty(0)
|
234
|
+
for constraint in constraints:
|
235
|
+
is_equality = np.abs(
|
236
|
+
constraint.ub - constraint.lb
|
237
|
+
) <= get_arrays_tol(constraint.lb, constraint.ub)
|
238
|
+
if np.any(is_equality):
|
239
|
+
self._a_eq = np.vstack((self.a_eq, constraint.A[is_equality]))
|
240
|
+
self._b_eq = np.concatenate(
|
241
|
+
(
|
242
|
+
self.b_eq,
|
243
|
+
0.5
|
244
|
+
* (
|
245
|
+
constraint.lb[is_equality]
|
246
|
+
+ constraint.ub[is_equality]
|
247
|
+
),
|
248
|
+
)
|
249
|
+
)
|
250
|
+
if not np.all(is_equality):
|
251
|
+
self._a_ub = np.vstack(
|
252
|
+
(
|
253
|
+
self.a_ub,
|
254
|
+
constraint.A[~is_equality],
|
255
|
+
-constraint.A[~is_equality],
|
256
|
+
)
|
257
|
+
)
|
258
|
+
self._b_ub = np.concatenate(
|
259
|
+
(
|
260
|
+
self.b_ub,
|
261
|
+
constraint.ub[~is_equality],
|
262
|
+
-constraint.lb[~is_equality],
|
263
|
+
)
|
264
|
+
)
|
265
|
+
|
266
|
+
# Remove the ill-defined constraints.
|
267
|
+
self.a_ub[np.isnan(self.a_ub)] = 0.0
|
268
|
+
self.a_eq[np.isnan(self.a_eq)] = 0.0
|
269
|
+
undef_ub = np.isnan(self.b_ub) | np.isinf(self.b_ub)
|
270
|
+
undef_eq = np.isnan(self.b_eq)
|
271
|
+
self._a_ub = self.a_ub[~undef_ub, :]
|
272
|
+
self._b_ub = self.b_ub[~undef_ub]
|
273
|
+
self._a_eq = self.a_eq[~undef_eq, :]
|
274
|
+
self._b_eq = self.b_eq[~undef_eq]
|
275
|
+
self.pcs = [
|
276
|
+
PreparedConstraint(c, np.ones(n)) for c in constraints if c.A.size
|
277
|
+
]
|
278
|
+
|
279
|
+
@property
|
280
|
+
def a_ub(self):
|
281
|
+
"""
|
282
|
+
Left-hand side matrix of the linear inequality constraints.
|
283
|
+
|
284
|
+
Returns
|
285
|
+
-------
|
286
|
+
`numpy.ndarray`, shape (m, n)
|
287
|
+
Left-hand side matrix of the linear inequality constraints.
|
288
|
+
"""
|
289
|
+
return self._a_ub
|
290
|
+
|
291
|
+
@property
|
292
|
+
def b_ub(self):
|
293
|
+
"""
|
294
|
+
Right-hand side vector of the linear inequality constraints.
|
295
|
+
|
296
|
+
Returns
|
297
|
+
-------
|
298
|
+
`numpy.ndarray`, shape (m, n)
|
299
|
+
Right-hand side vector of the linear inequality constraints.
|
300
|
+
"""
|
301
|
+
return self._b_ub
|
302
|
+
|
303
|
+
@property
|
304
|
+
def a_eq(self):
|
305
|
+
"""
|
306
|
+
Left-hand side matrix of the linear equality constraints.
|
307
|
+
|
308
|
+
Returns
|
309
|
+
-------
|
310
|
+
`numpy.ndarray`, shape (m, n)
|
311
|
+
Left-hand side matrix of the linear equality constraints.
|
312
|
+
"""
|
313
|
+
return self._a_eq
|
314
|
+
|
315
|
+
@property
|
316
|
+
def b_eq(self):
|
317
|
+
"""
|
318
|
+
Right-hand side vector of the linear equality constraints.
|
319
|
+
|
320
|
+
Returns
|
321
|
+
-------
|
322
|
+
`numpy.ndarray`, shape (m, n)
|
323
|
+
Right-hand side vector of the linear equality constraints.
|
324
|
+
"""
|
325
|
+
return self._b_eq
|
326
|
+
|
327
|
+
@property
|
328
|
+
def m_ub(self):
|
329
|
+
"""
|
330
|
+
Number of linear inequality constraints.
|
331
|
+
|
332
|
+
Returns
|
333
|
+
-------
|
334
|
+
int
|
335
|
+
Number of linear inequality constraints.
|
336
|
+
"""
|
337
|
+
return self.b_ub.size
|
338
|
+
|
339
|
+
@property
|
340
|
+
def m_eq(self):
|
341
|
+
"""
|
342
|
+
Number of linear equality constraints.
|
343
|
+
|
344
|
+
Returns
|
345
|
+
-------
|
346
|
+
int
|
347
|
+
Number of linear equality constraints.
|
348
|
+
"""
|
349
|
+
return self.b_eq.size
|
350
|
+
|
351
|
+
def maxcv(self, x):
|
352
|
+
"""
|
353
|
+
Evaluate the maximum constraint violation.
|
354
|
+
|
355
|
+
Parameters
|
356
|
+
----------
|
357
|
+
x : array_like, shape (n,)
|
358
|
+
Point at which the maximum constraint violation is evaluated.
|
359
|
+
|
360
|
+
Returns
|
361
|
+
-------
|
362
|
+
float
|
363
|
+
Maximum constraint violation at `x`.
|
364
|
+
"""
|
365
|
+
return np.max(self.violation(x), initial=0.0)
|
366
|
+
|
367
|
+
def violation(self, x):
|
368
|
+
if len(self.pcs):
|
369
|
+
return np.concatenate([pc.violation(x) for pc in self.pcs])
|
370
|
+
return np.array([])
|
371
|
+
|
372
|
+
|
373
|
+
class NonlinearConstraints:
|
374
|
+
"""
|
375
|
+
Nonlinear constraints ``c_ub(x) <= 0`` and ``c_eq(x) == b_eq``.
|
376
|
+
"""
|
377
|
+
|
378
|
+
def __init__(self, constraints, verbose, debug):
|
379
|
+
"""
|
380
|
+
Initialize the nonlinear constraints.
|
381
|
+
|
382
|
+
Parameters
|
383
|
+
----------
|
384
|
+
constraints : list
|
385
|
+
Nonlinear constraints.
|
386
|
+
verbose : bool
|
387
|
+
Whether to print the function evaluations.
|
388
|
+
debug : bool
|
389
|
+
Whether to make debugging tests during the execution.
|
390
|
+
"""
|
391
|
+
if debug:
|
392
|
+
assert isinstance(constraints, list)
|
393
|
+
for constraint in constraints:
|
394
|
+
assert isinstance(constraint, NonlinearConstraint)
|
395
|
+
assert isinstance(verbose, bool)
|
396
|
+
assert isinstance(debug, bool)
|
397
|
+
|
398
|
+
self._constraints = constraints
|
399
|
+
self.pcs = []
|
400
|
+
self._verbose = verbose
|
401
|
+
|
402
|
+
# map of indexes for equality and inequality constraints
|
403
|
+
self._map_ub = None
|
404
|
+
self._map_eq = None
|
405
|
+
self._m_ub = self._m_eq = None
|
406
|
+
|
407
|
+
def __call__(self, x):
|
408
|
+
"""
|
409
|
+
Calculates the residual (slack) for the constraints.
|
410
|
+
|
411
|
+
Parameters
|
412
|
+
----------
|
413
|
+
x : array_like, shape (n,)
|
414
|
+
Point at which the constraints are evaluated.
|
415
|
+
|
416
|
+
Returns
|
417
|
+
-------
|
418
|
+
`numpy.ndarray`, shape (m_nonlinear_ub,)
|
419
|
+
Nonlinear inequality constraint slack values.
|
420
|
+
`numpy.ndarray`, shape (m_nonlinear_eq,)
|
421
|
+
Nonlinear equality constraint slack values.
|
422
|
+
"""
|
423
|
+
if not len(self._constraints):
|
424
|
+
self._m_eq = self._m_ub = 0
|
425
|
+
return np.array([]), np.array([])
|
426
|
+
|
427
|
+
x = np.array(x, dtype=float)
|
428
|
+
# first time around the constraints haven't been prepared
|
429
|
+
if not len(self.pcs):
|
430
|
+
self._map_ub = []
|
431
|
+
self._map_eq = []
|
432
|
+
self._m_eq = 0
|
433
|
+
self._m_ub = 0
|
434
|
+
|
435
|
+
for constraint in self._constraints:
|
436
|
+
if not callable(constraint.jac):
|
437
|
+
# having a callable constraint function prevents
|
438
|
+
# constraint.fun from being evaluated when preparing
|
439
|
+
# constraint
|
440
|
+
c = copy.copy(constraint)
|
441
|
+
c.jac = lambda x0: x0
|
442
|
+
c.hess = lambda x0, v: 0.0
|
443
|
+
pc = PreparedConstraint(c, x)
|
444
|
+
else:
|
445
|
+
pc = PreparedConstraint(constraint, x)
|
446
|
+
# we're going to be using the same x value again immediately
|
447
|
+
# after this initialisation
|
448
|
+
pc.fun.f_updated = True
|
449
|
+
|
450
|
+
self.pcs.append(pc)
|
451
|
+
idx = np.arange(pc.fun.m)
|
452
|
+
|
453
|
+
# figure out equality and inequality maps
|
454
|
+
lb, ub = pc.bounds[0], pc.bounds[1]
|
455
|
+
arr_tol = get_arrays_tol(lb, ub)
|
456
|
+
is_equality = np.abs(ub - lb) <= arr_tol
|
457
|
+
self._map_eq.append(idx[is_equality])
|
458
|
+
self._map_ub.append(idx[~is_equality])
|
459
|
+
|
460
|
+
# these values will be corrected to their proper values later
|
461
|
+
self._m_eq += np.count_nonzero(is_equality)
|
462
|
+
self._m_ub += np.count_nonzero(~is_equality)
|
463
|
+
|
464
|
+
c_ub = []
|
465
|
+
c_eq = []
|
466
|
+
for i, pc in enumerate(self.pcs):
|
467
|
+
val = pc.fun.fun(x)
|
468
|
+
if self._verbose:
|
469
|
+
with np.printoptions(**PRINT_OPTIONS):
|
470
|
+
with suppress(AttributeError):
|
471
|
+
fun_name = self._constraints[i].fun.__name__
|
472
|
+
print(f"{fun_name}({x}) = {val}")
|
473
|
+
|
474
|
+
# separate violations into c_eq and c_ub
|
475
|
+
eq_idx = self._map_eq[i]
|
476
|
+
ub_idx = self._map_ub[i]
|
477
|
+
|
478
|
+
ub_val = val[ub_idx]
|
479
|
+
if len(ub_idx):
|
480
|
+
xl = pc.bounds[0][ub_idx]
|
481
|
+
xu = pc.bounds[1][ub_idx]
|
482
|
+
|
483
|
+
# calculate slack within lower bound
|
484
|
+
finite_xl = xl > -np.inf
|
485
|
+
_v = xl[finite_xl] - ub_val[finite_xl]
|
486
|
+
c_ub.append(_v)
|
487
|
+
|
488
|
+
# calculate slack within lower bound
|
489
|
+
finite_xu = xu < np.inf
|
490
|
+
_v = ub_val[finite_xu] - xu[finite_xu]
|
491
|
+
c_ub.append(_v)
|
492
|
+
|
493
|
+
# equality constraints taken from midpoint between lb and ub
|
494
|
+
eq_val = val[eq_idx]
|
495
|
+
if len(eq_idx):
|
496
|
+
midpoint = 0.5 * (pc.bounds[1][eq_idx] + pc.bounds[0][eq_idx])
|
497
|
+
eq_val -= midpoint
|
498
|
+
c_eq.append(eq_val)
|
499
|
+
|
500
|
+
if self._m_eq:
|
501
|
+
c_eq = np.concatenate(c_eq)
|
502
|
+
else:
|
503
|
+
c_eq = np.array([])
|
504
|
+
|
505
|
+
if self._m_ub:
|
506
|
+
c_ub = np.concatenate(c_ub)
|
507
|
+
else:
|
508
|
+
c_ub = np.array([])
|
509
|
+
|
510
|
+
self._m_ub = c_ub.size
|
511
|
+
self._m_eq = c_eq.size
|
512
|
+
|
513
|
+
return c_ub, c_eq
|
514
|
+
|
515
|
+
@property
|
516
|
+
def m_ub(self):
|
517
|
+
"""
|
518
|
+
Number of nonlinear inequality constraints.
|
519
|
+
|
520
|
+
Returns
|
521
|
+
-------
|
522
|
+
int
|
523
|
+
Number of nonlinear inequality constraints.
|
524
|
+
|
525
|
+
Raises
|
526
|
+
------
|
527
|
+
ValueError
|
528
|
+
If the number of nonlinear inequality constraints is unknown.
|
529
|
+
"""
|
530
|
+
if self._m_ub is None:
|
531
|
+
raise ValueError(
|
532
|
+
"The number of nonlinear inequality constraints is unknown."
|
533
|
+
)
|
534
|
+
else:
|
535
|
+
return self._m_ub
|
536
|
+
|
537
|
+
@property
|
538
|
+
def m_eq(self):
|
539
|
+
"""
|
540
|
+
Number of nonlinear equality constraints.
|
541
|
+
|
542
|
+
Returns
|
543
|
+
-------
|
544
|
+
int
|
545
|
+
Number of nonlinear equality constraints.
|
546
|
+
|
547
|
+
Raises
|
548
|
+
------
|
549
|
+
ValueError
|
550
|
+
If the number of nonlinear equality constraints is unknown.
|
551
|
+
"""
|
552
|
+
if self._m_eq is None:
|
553
|
+
raise ValueError(
|
554
|
+
"The number of nonlinear equality constraints is unknown."
|
555
|
+
)
|
556
|
+
else:
|
557
|
+
return self._m_eq
|
558
|
+
|
559
|
+
@property
|
560
|
+
def n_eval(self):
|
561
|
+
"""
|
562
|
+
Number of function evaluations.
|
563
|
+
|
564
|
+
Returns
|
565
|
+
-------
|
566
|
+
int
|
567
|
+
Number of function evaluations.
|
568
|
+
"""
|
569
|
+
if len(self.pcs):
|
570
|
+
return self.pcs[0].fun.nfev
|
571
|
+
else:
|
572
|
+
return 0
|
573
|
+
|
574
|
+
def maxcv(self, x, cub_val=None, ceq_val=None):
|
575
|
+
"""
|
576
|
+
Evaluate the maximum constraint violation.
|
577
|
+
|
578
|
+
Parameters
|
579
|
+
----------
|
580
|
+
x : array_like, shape (n,)
|
581
|
+
Point at which the maximum constraint violation is evaluated.
|
582
|
+
cub_val : array_like, shape (m_nonlinear_ub,), optional
|
583
|
+
Values of the nonlinear inequality constraints. If not provided,
|
584
|
+
the nonlinear inequality constraints are evaluated at `x`.
|
585
|
+
ceq_val : array_like, shape (m_nonlinear_eq,), optional
|
586
|
+
Values of the nonlinear equality constraints. If not provided,
|
587
|
+
the nonlinear equality constraints are evaluated at `x`.
|
588
|
+
|
589
|
+
Returns
|
590
|
+
-------
|
591
|
+
float
|
592
|
+
Maximum constraint violation at `x`.
|
593
|
+
"""
|
594
|
+
return np.max(
|
595
|
+
self.violation(x, cub_val=cub_val, ceq_val=ceq_val), initial=0.0
|
596
|
+
)
|
597
|
+
|
598
|
+
def violation(self, x, cub_val=None, ceq_val=None):
|
599
|
+
return np.concatenate([pc.violation(x) for pc in self.pcs])
|
600
|
+
|
601
|
+
|
602
|
+
class Problem:
|
603
|
+
"""
|
604
|
+
Optimization problem.
|
605
|
+
"""
|
606
|
+
|
607
|
+
def __init__(
|
608
|
+
self,
|
609
|
+
obj,
|
610
|
+
x0,
|
611
|
+
bounds,
|
612
|
+
linear,
|
613
|
+
nonlinear,
|
614
|
+
callback,
|
615
|
+
feasibility_tol,
|
616
|
+
scale,
|
617
|
+
store_history,
|
618
|
+
history_size,
|
619
|
+
filter_size,
|
620
|
+
debug,
|
621
|
+
):
|
622
|
+
"""
|
623
|
+
Initialize the nonlinear problem.
|
624
|
+
|
625
|
+
The problem is preprocessed to remove all the variables that are fixed
|
626
|
+
by the bound constraints.
|
627
|
+
|
628
|
+
Parameters
|
629
|
+
----------
|
630
|
+
obj : ObjectiveFunction
|
631
|
+
Objective function.
|
632
|
+
x0 : array_like, shape (n,)
|
633
|
+
Initial guess.
|
634
|
+
bounds : BoundConstraints
|
635
|
+
Bound constraints.
|
636
|
+
linear : LinearConstraints
|
637
|
+
Linear constraints.
|
638
|
+
nonlinear : NonlinearConstraints
|
639
|
+
Nonlinear constraints.
|
640
|
+
callback : {callable, None}
|
641
|
+
Callback function.
|
642
|
+
feasibility_tol : float
|
643
|
+
Tolerance on the constraint violation.
|
644
|
+
scale : bool
|
645
|
+
Whether to scale the problem according to the bounds.
|
646
|
+
store_history : bool
|
647
|
+
Whether to store the function evaluations.
|
648
|
+
history_size : int
|
649
|
+
Maximum number of function evaluations to store.
|
650
|
+
filter_size : int
|
651
|
+
Maximum number of points in the filter.
|
652
|
+
debug : bool
|
653
|
+
Whether to make debugging tests during the execution.
|
654
|
+
"""
|
655
|
+
if debug:
|
656
|
+
assert isinstance(obj, ObjectiveFunction)
|
657
|
+
assert isinstance(bounds, BoundConstraints)
|
658
|
+
assert isinstance(linear, LinearConstraints)
|
659
|
+
assert isinstance(nonlinear, NonlinearConstraints)
|
660
|
+
assert isinstance(feasibility_tol, float)
|
661
|
+
assert isinstance(scale, bool)
|
662
|
+
assert isinstance(store_history, bool)
|
663
|
+
assert isinstance(history_size, int)
|
664
|
+
if store_history:
|
665
|
+
assert history_size > 0
|
666
|
+
assert isinstance(filter_size, int)
|
667
|
+
assert filter_size > 0
|
668
|
+
assert isinstance(debug, bool)
|
669
|
+
|
670
|
+
self._obj = obj
|
671
|
+
self._linear = linear
|
672
|
+
self._nonlinear = nonlinear
|
673
|
+
if callback is not None:
|
674
|
+
if not callable(callback):
|
675
|
+
raise TypeError("The callback must be a callable function.")
|
676
|
+
self._callback = callback
|
677
|
+
|
678
|
+
# Check the consistency of the problem.
|
679
|
+
x0 = exact_1d_array(x0, "The initial guess must be a vector.")
|
680
|
+
n = x0.size
|
681
|
+
if bounds.xl.size != n:
|
682
|
+
raise ValueError(f"The bounds must have {n} elements.")
|
683
|
+
if linear.a_ub.shape[1] != n:
|
684
|
+
raise ValueError(
|
685
|
+
f"The left-hand side matrices of the linear constraints must "
|
686
|
+
f"have {n} columns."
|
687
|
+
)
|
688
|
+
|
689
|
+
# Check which variables are fixed.
|
690
|
+
tol = get_arrays_tol(bounds.xl, bounds.xu)
|
691
|
+
self._fixed_idx = (bounds.xl <= bounds.xu) & (
|
692
|
+
np.abs(bounds.xl - bounds.xu) < tol
|
693
|
+
)
|
694
|
+
self._fixed_val = 0.5 * (
|
695
|
+
bounds.xl[self._fixed_idx] + bounds.xu[self._fixed_idx]
|
696
|
+
)
|
697
|
+
self._fixed_val = np.clip(
|
698
|
+
self._fixed_val,
|
699
|
+
bounds.xl[self._fixed_idx],
|
700
|
+
bounds.xu[self._fixed_idx],
|
701
|
+
)
|
702
|
+
|
703
|
+
# Set the bound constraints.
|
704
|
+
self._orig_bounds = bounds
|
705
|
+
self._bounds = BoundConstraints(
|
706
|
+
Bounds(bounds.xl[~self._fixed_idx], bounds.xu[~self._fixed_idx])
|
707
|
+
)
|
708
|
+
|
709
|
+
# Set the initial guess.
|
710
|
+
self._x0 = self._bounds.project(x0[~self._fixed_idx])
|
711
|
+
|
712
|
+
# Set the linear constraints.
|
713
|
+
b_eq = linear.b_eq - linear.a_eq[:, self._fixed_idx] @ self._fixed_val
|
714
|
+
self._linear = LinearConstraints(
|
715
|
+
[
|
716
|
+
LinearConstraint(
|
717
|
+
linear.a_ub[:, ~self._fixed_idx],
|
718
|
+
-np.inf,
|
719
|
+
linear.b_ub
|
720
|
+
- linear.a_ub[:, self._fixed_idx] @ self._fixed_val,
|
721
|
+
),
|
722
|
+
LinearConstraint(linear.a_eq[:, ~self._fixed_idx], b_eq, b_eq),
|
723
|
+
],
|
724
|
+
self.n,
|
725
|
+
debug,
|
726
|
+
)
|
727
|
+
|
728
|
+
# Scale the problem if necessary.
|
729
|
+
scale = (
|
730
|
+
scale
|
731
|
+
and self._bounds.is_feasible
|
732
|
+
and np.all(np.isfinite(self._bounds.xl))
|
733
|
+
and np.all(np.isfinite(self._bounds.xu))
|
734
|
+
)
|
735
|
+
if scale:
|
736
|
+
self._scaling_factor = 0.5 * (self._bounds.xu - self._bounds.xl)
|
737
|
+
self._scaling_shift = 0.5 * (self._bounds.xu + self._bounds.xl)
|
738
|
+
self._bounds = BoundConstraints(
|
739
|
+
Bounds(-np.ones(self.n), np.ones(self.n))
|
740
|
+
)
|
741
|
+
b_eq = self._linear.b_eq - self._linear.a_eq @ self._scaling_shift
|
742
|
+
self._linear = LinearConstraints(
|
743
|
+
[
|
744
|
+
LinearConstraint(
|
745
|
+
self._linear.a_ub @ np.diag(self._scaling_factor),
|
746
|
+
-np.inf,
|
747
|
+
self._linear.b_ub
|
748
|
+
- self._linear.a_ub @ self._scaling_shift,
|
749
|
+
),
|
750
|
+
LinearConstraint(
|
751
|
+
self._linear.a_eq @ np.diag(self._scaling_factor),
|
752
|
+
b_eq,
|
753
|
+
b_eq,
|
754
|
+
),
|
755
|
+
],
|
756
|
+
self.n,
|
757
|
+
debug,
|
758
|
+
)
|
759
|
+
self._x0 = (self._x0 - self._scaling_shift) / self._scaling_factor
|
760
|
+
else:
|
761
|
+
self._scaling_factor = np.ones(self.n)
|
762
|
+
self._scaling_shift = np.zeros(self.n)
|
763
|
+
|
764
|
+
# Set the initial filter.
|
765
|
+
self._feasibility_tol = feasibility_tol
|
766
|
+
self._filter_size = filter_size
|
767
|
+
self._fun_filter = []
|
768
|
+
self._maxcv_filter = []
|
769
|
+
self._x_filter = []
|
770
|
+
|
771
|
+
# Set the initial history.
|
772
|
+
self._store_history = store_history
|
773
|
+
self._history_size = history_size
|
774
|
+
self._fun_history = []
|
775
|
+
self._maxcv_history = []
|
776
|
+
self._x_history = []
|
777
|
+
|
778
|
+
def __call__(self, x, penalty=0.0):
|
779
|
+
"""
|
780
|
+
Evaluate the objective and nonlinear constraint functions.
|
781
|
+
|
782
|
+
Parameters
|
783
|
+
----------
|
784
|
+
x : array_like, shape (n,)
|
785
|
+
Point at which the functions are evaluated.
|
786
|
+
penalty : float, optional
|
787
|
+
Penalty parameter used to select the point in the filter to forward
|
788
|
+
to the callback function.
|
789
|
+
|
790
|
+
Returns
|
791
|
+
-------
|
792
|
+
float
|
793
|
+
Objective function value.
|
794
|
+
`numpy.ndarray`, shape (m_nonlinear_ub,)
|
795
|
+
Nonlinear inequality constraint function values.
|
796
|
+
`numpy.ndarray`, shape (m_nonlinear_eq,)
|
797
|
+
Nonlinear equality constraint function values.
|
798
|
+
|
799
|
+
Raises
|
800
|
+
------
|
801
|
+
`cobyqa.utils.CallbackSuccess`
|
802
|
+
If the callback function raises a ``StopIteration``.
|
803
|
+
"""
|
804
|
+
# Evaluate the objective and nonlinear constraint functions.
|
805
|
+
x = np.asarray(x, dtype=float)
|
806
|
+
x_full = self.build_x(x)
|
807
|
+
fun_val = self._obj(x_full)
|
808
|
+
cub_val, ceq_val = self._nonlinear(x_full)
|
809
|
+
maxcv_val = self.maxcv(x, cub_val, ceq_val)
|
810
|
+
if self._store_history:
|
811
|
+
self._fun_history.append(fun_val)
|
812
|
+
self._maxcv_history.append(maxcv_val)
|
813
|
+
self._x_history.append(x)
|
814
|
+
if len(self._fun_history) > self._history_size:
|
815
|
+
self._fun_history.pop(0)
|
816
|
+
self._maxcv_history.pop(0)
|
817
|
+
self._x_history.pop(0)
|
818
|
+
|
819
|
+
# Add the point to the filter if it is not dominated by any point.
|
820
|
+
if np.isnan(fun_val) and np.isnan(maxcv_val):
|
821
|
+
include_point = len(self._fun_filter) == 0
|
822
|
+
elif np.isnan(fun_val):
|
823
|
+
include_point = all(
|
824
|
+
np.isnan(fun_filter)
|
825
|
+
and maxcv_val < maxcv_filter
|
826
|
+
or np.isnan(maxcv_filter)
|
827
|
+
for fun_filter, maxcv_filter in zip(
|
828
|
+
self._fun_filter,
|
829
|
+
self._maxcv_filter,
|
830
|
+
)
|
831
|
+
)
|
832
|
+
elif np.isnan(maxcv_val):
|
833
|
+
include_point = all(
|
834
|
+
np.isnan(maxcv_filter)
|
835
|
+
and fun_val < fun_filter
|
836
|
+
or np.isnan(fun_filter)
|
837
|
+
for fun_filter, maxcv_filter in zip(
|
838
|
+
self._fun_filter,
|
839
|
+
self._maxcv_filter,
|
840
|
+
)
|
841
|
+
)
|
842
|
+
else:
|
843
|
+
include_point = all(
|
844
|
+
fun_val < fun_filter or maxcv_val < maxcv_filter
|
845
|
+
for fun_filter, maxcv_filter in zip(
|
846
|
+
self._fun_filter,
|
847
|
+
self._maxcv_filter,
|
848
|
+
)
|
849
|
+
)
|
850
|
+
if include_point:
|
851
|
+
self._fun_filter.append(fun_val)
|
852
|
+
self._maxcv_filter.append(maxcv_val)
|
853
|
+
self._x_filter.append(x)
|
854
|
+
|
855
|
+
# Remove the points in the filter that are dominated by the new
|
856
|
+
# point. We must iterate in reverse order to avoid problems when
|
857
|
+
# removing elements from the list.
|
858
|
+
for k in range(len(self._fun_filter) - 2, -1, -1):
|
859
|
+
if np.isnan(fun_val):
|
860
|
+
remove_point = np.isnan(self._fun_filter[k])
|
861
|
+
elif np.isnan(maxcv_val):
|
862
|
+
remove_point = np.isnan(self._maxcv_filter[k])
|
863
|
+
else:
|
864
|
+
remove_point = (
|
865
|
+
np.isnan(self._fun_filter[k])
|
866
|
+
or np.isnan(self._maxcv_filter[k])
|
867
|
+
or fun_val <= self._fun_filter[k]
|
868
|
+
and maxcv_val <= self._maxcv_filter[k]
|
869
|
+
)
|
870
|
+
if remove_point:
|
871
|
+
self._fun_filter.pop(k)
|
872
|
+
self._maxcv_filter.pop(k)
|
873
|
+
self._x_filter.pop(k)
|
874
|
+
|
875
|
+
# Keep only the most recent points in the filter.
|
876
|
+
if len(self._fun_filter) > self._filter_size:
|
877
|
+
self._fun_filter.pop(0)
|
878
|
+
self._maxcv_filter.pop(0)
|
879
|
+
self._x_filter.pop(0)
|
880
|
+
|
881
|
+
# Evaluate the callback function after updating the filter to ensure
|
882
|
+
# that the current point can be returned by the method.
|
883
|
+
if self._callback is not None:
|
884
|
+
sig = signature(self._callback)
|
885
|
+
try:
|
886
|
+
x_best, fun_best, _ = self.best_eval(penalty)
|
887
|
+
x_best = self.build_x(x_best)
|
888
|
+
if set(sig.parameters) == {"intermediate_result"}:
|
889
|
+
intermediate_result = OptimizeResult(
|
890
|
+
x=x_best,
|
891
|
+
fun=fun_best,
|
892
|
+
# maxcv=maxcv_best,
|
893
|
+
)
|
894
|
+
self._callback(intermediate_result=intermediate_result)
|
895
|
+
else:
|
896
|
+
self._callback(x_best)
|
897
|
+
except StopIteration as exc:
|
898
|
+
raise CallbackSuccess from exc
|
899
|
+
|
900
|
+
# Apply the extreme barriers and return.
|
901
|
+
if np.isnan(fun_val):
|
902
|
+
fun_val = BARRIER
|
903
|
+
cub_val[np.isnan(cub_val)] = BARRIER
|
904
|
+
ceq_val[np.isnan(ceq_val)] = BARRIER
|
905
|
+
fun_val = max(min(fun_val, BARRIER), -BARRIER)
|
906
|
+
cub_val = np.maximum(np.minimum(cub_val, BARRIER), -BARRIER)
|
907
|
+
ceq_val = np.maximum(np.minimum(ceq_val, BARRIER), -BARRIER)
|
908
|
+
return fun_val, cub_val, ceq_val
|
909
|
+
|
910
|
+
@property
|
911
|
+
def n(self):
|
912
|
+
"""
|
913
|
+
Number of variables.
|
914
|
+
|
915
|
+
Returns
|
916
|
+
-------
|
917
|
+
int
|
918
|
+
Number of variables.
|
919
|
+
"""
|
920
|
+
return self.x0.size
|
921
|
+
|
922
|
+
@property
|
923
|
+
def n_orig(self):
|
924
|
+
"""
|
925
|
+
Number of variables in the original problem (with fixed variables).
|
926
|
+
|
927
|
+
Returns
|
928
|
+
-------
|
929
|
+
int
|
930
|
+
Number of variables in the original problem (with fixed variables).
|
931
|
+
"""
|
932
|
+
return self._fixed_idx.size
|
933
|
+
|
934
|
+
@property
|
935
|
+
def x0(self):
|
936
|
+
"""
|
937
|
+
Initial guess.
|
938
|
+
|
939
|
+
Returns
|
940
|
+
-------
|
941
|
+
`numpy.ndarray`, shape (n,)
|
942
|
+
Initial guess.
|
943
|
+
"""
|
944
|
+
return self._x0
|
945
|
+
|
946
|
+
@property
|
947
|
+
def n_eval(self):
|
948
|
+
"""
|
949
|
+
Number of function evaluations.
|
950
|
+
|
951
|
+
Returns
|
952
|
+
-------
|
953
|
+
int
|
954
|
+
Number of function evaluations.
|
955
|
+
"""
|
956
|
+
return self._obj.n_eval
|
957
|
+
|
958
|
+
@property
|
959
|
+
def fun_name(self):
|
960
|
+
"""
|
961
|
+
Name of the objective function.
|
962
|
+
|
963
|
+
Returns
|
964
|
+
-------
|
965
|
+
str
|
966
|
+
Name of the objective function.
|
967
|
+
"""
|
968
|
+
return self._obj.name
|
969
|
+
|
970
|
+
@property
|
971
|
+
def bounds(self):
|
972
|
+
"""
|
973
|
+
Bound constraints.
|
974
|
+
|
975
|
+
Returns
|
976
|
+
-------
|
977
|
+
BoundConstraints
|
978
|
+
Bound constraints.
|
979
|
+
"""
|
980
|
+
return self._bounds
|
981
|
+
|
982
|
+
@property
|
983
|
+
def linear(self):
|
984
|
+
"""
|
985
|
+
Linear constraints.
|
986
|
+
|
987
|
+
Returns
|
988
|
+
-------
|
989
|
+
LinearConstraints
|
990
|
+
Linear constraints.
|
991
|
+
"""
|
992
|
+
return self._linear
|
993
|
+
|
994
|
+
@property
|
995
|
+
def m_bounds(self):
|
996
|
+
"""
|
997
|
+
Number of bound constraints.
|
998
|
+
|
999
|
+
Returns
|
1000
|
+
-------
|
1001
|
+
int
|
1002
|
+
Number of bound constraints.
|
1003
|
+
"""
|
1004
|
+
return self.bounds.m
|
1005
|
+
|
1006
|
+
@property
|
1007
|
+
def m_linear_ub(self):
|
1008
|
+
"""
|
1009
|
+
Number of linear inequality constraints.
|
1010
|
+
|
1011
|
+
Returns
|
1012
|
+
-------
|
1013
|
+
int
|
1014
|
+
Number of linear inequality constraints.
|
1015
|
+
"""
|
1016
|
+
return self.linear.m_ub
|
1017
|
+
|
1018
|
+
@property
|
1019
|
+
def m_linear_eq(self):
|
1020
|
+
"""
|
1021
|
+
Number of linear equality constraints.
|
1022
|
+
|
1023
|
+
Returns
|
1024
|
+
-------
|
1025
|
+
int
|
1026
|
+
Number of linear equality constraints.
|
1027
|
+
"""
|
1028
|
+
return self.linear.m_eq
|
1029
|
+
|
1030
|
+
@property
|
1031
|
+
def m_nonlinear_ub(self):
|
1032
|
+
"""
|
1033
|
+
Number of nonlinear inequality constraints.
|
1034
|
+
|
1035
|
+
Returns
|
1036
|
+
-------
|
1037
|
+
int
|
1038
|
+
Number of nonlinear inequality constraints.
|
1039
|
+
|
1040
|
+
Raises
|
1041
|
+
------
|
1042
|
+
ValueError
|
1043
|
+
If the number of nonlinear inequality constraints is not known.
|
1044
|
+
"""
|
1045
|
+
return self._nonlinear.m_ub
|
1046
|
+
|
1047
|
+
@property
|
1048
|
+
def m_nonlinear_eq(self):
|
1049
|
+
"""
|
1050
|
+
Number of nonlinear equality constraints.
|
1051
|
+
|
1052
|
+
Returns
|
1053
|
+
-------
|
1054
|
+
int
|
1055
|
+
Number of nonlinear equality constraints.
|
1056
|
+
|
1057
|
+
Raises
|
1058
|
+
------
|
1059
|
+
ValueError
|
1060
|
+
If the number of nonlinear equality constraints is not known.
|
1061
|
+
"""
|
1062
|
+
return self._nonlinear.m_eq
|
1063
|
+
|
1064
|
+
@property
|
1065
|
+
def fun_history(self):
|
1066
|
+
"""
|
1067
|
+
History of objective function evaluations.
|
1068
|
+
|
1069
|
+
Returns
|
1070
|
+
-------
|
1071
|
+
`numpy.ndarray`, shape (n_eval,)
|
1072
|
+
History of objective function evaluations.
|
1073
|
+
"""
|
1074
|
+
return np.array(self._fun_history, dtype=float)
|
1075
|
+
|
1076
|
+
@property
|
1077
|
+
def maxcv_history(self):
|
1078
|
+
"""
|
1079
|
+
History of maximum constraint violations.
|
1080
|
+
|
1081
|
+
Returns
|
1082
|
+
-------
|
1083
|
+
`numpy.ndarray`, shape (n_eval,)
|
1084
|
+
History of maximum constraint violations.
|
1085
|
+
"""
|
1086
|
+
return np.array(self._maxcv_history, dtype=float)
|
1087
|
+
|
1088
|
+
@property
|
1089
|
+
def type(self):
|
1090
|
+
"""
|
1091
|
+
Type of the problem.
|
1092
|
+
|
1093
|
+
The problem can be either 'unconstrained', 'bound-constrained',
|
1094
|
+
'linearly constrained', or 'nonlinearly constrained'.
|
1095
|
+
|
1096
|
+
Returns
|
1097
|
+
-------
|
1098
|
+
str
|
1099
|
+
Type of the problem.
|
1100
|
+
"""
|
1101
|
+
try:
|
1102
|
+
if self.m_nonlinear_ub > 0 or self.m_nonlinear_eq > 0:
|
1103
|
+
return "nonlinearly constrained"
|
1104
|
+
elif self.m_linear_ub > 0 or self.m_linear_eq > 0:
|
1105
|
+
return "linearly constrained"
|
1106
|
+
elif self.m_bounds > 0:
|
1107
|
+
return "bound-constrained"
|
1108
|
+
else:
|
1109
|
+
return "unconstrained"
|
1110
|
+
except ValueError:
|
1111
|
+
# The number of nonlinear constraints is not known. It may be zero
|
1112
|
+
# if the user provided a nonlinear inequality and/or equality
|
1113
|
+
# constraint function that returns an empty array. However, as this
|
1114
|
+
# is not known before the first call to the function, we assume
|
1115
|
+
# that the problem is nonlinearly constrained.
|
1116
|
+
return "nonlinearly constrained"
|
1117
|
+
|
1118
|
+
@property
|
1119
|
+
def is_feasibility(self):
|
1120
|
+
"""
|
1121
|
+
Whether the problem is a feasibility problem.
|
1122
|
+
|
1123
|
+
Returns
|
1124
|
+
-------
|
1125
|
+
bool
|
1126
|
+
Whether the problem is a feasibility problem.
|
1127
|
+
"""
|
1128
|
+
return self.fun_name == ""
|
1129
|
+
|
1130
|
+
def build_x(self, x):
|
1131
|
+
"""
|
1132
|
+
Build the full vector of variables from the reduced vector.
|
1133
|
+
|
1134
|
+
Parameters
|
1135
|
+
----------
|
1136
|
+
x : array_like, shape (n,)
|
1137
|
+
Reduced vector of variables.
|
1138
|
+
|
1139
|
+
Returns
|
1140
|
+
-------
|
1141
|
+
`numpy.ndarray`, shape (n_orig,)
|
1142
|
+
Full vector of variables.
|
1143
|
+
"""
|
1144
|
+
x_full = np.empty(self.n_orig)
|
1145
|
+
x_full[self._fixed_idx] = self._fixed_val
|
1146
|
+
x_full[~self._fixed_idx] = (x * self._scaling_factor
|
1147
|
+
+ self._scaling_shift)
|
1148
|
+
return self._orig_bounds.project(x_full)
|
1149
|
+
|
1150
|
+
def maxcv(self, x, cub_val=None, ceq_val=None):
|
1151
|
+
"""
|
1152
|
+
Evaluate the maximum constraint violation.
|
1153
|
+
|
1154
|
+
Parameters
|
1155
|
+
----------
|
1156
|
+
x : array_like, shape (n,)
|
1157
|
+
Point at which the maximum constraint violation is evaluated.
|
1158
|
+
cub_val : array_like, shape (m_nonlinear_ub,), optional
|
1159
|
+
Values of the nonlinear inequality constraints. If not provided,
|
1160
|
+
the nonlinear inequality constraints are evaluated at `x`.
|
1161
|
+
ceq_val : array_like, shape (m_nonlinear_eq,), optional
|
1162
|
+
Values of the nonlinear equality constraints. If not provided,
|
1163
|
+
the nonlinear equality constraints are evaluated at `x`.
|
1164
|
+
|
1165
|
+
Returns
|
1166
|
+
-------
|
1167
|
+
float
|
1168
|
+
Maximum constraint violation at `x`.
|
1169
|
+
"""
|
1170
|
+
violation = self.violation(x, cub_val=cub_val, ceq_val=ceq_val)
|
1171
|
+
if np.count_nonzero(violation):
|
1172
|
+
return np.max(violation, initial=0.0)
|
1173
|
+
else:
|
1174
|
+
return 0.0
|
1175
|
+
|
1176
|
+
def violation(self, x, cub_val=None, ceq_val=None):
|
1177
|
+
violation = []
|
1178
|
+
if not self.bounds.is_feasible:
|
1179
|
+
b = self.bounds.violation(x)
|
1180
|
+
violation.append(b)
|
1181
|
+
|
1182
|
+
if len(self.linear.pcs):
|
1183
|
+
lc = self.linear.violation(x)
|
1184
|
+
violation.append(lc)
|
1185
|
+
if len(self._nonlinear.pcs):
|
1186
|
+
nlc = self._nonlinear.violation(x, cub_val, ceq_val)
|
1187
|
+
violation.append(nlc)
|
1188
|
+
|
1189
|
+
if len(violation):
|
1190
|
+
return np.concatenate(violation)
|
1191
|
+
|
1192
|
+
def best_eval(self, penalty):
|
1193
|
+
"""
|
1194
|
+
Return the best point in the filter and the corresponding objective and
|
1195
|
+
nonlinear constraint function evaluations.
|
1196
|
+
|
1197
|
+
Parameters
|
1198
|
+
----------
|
1199
|
+
penalty : float
|
1200
|
+
Penalty parameter
|
1201
|
+
|
1202
|
+
Returns
|
1203
|
+
-------
|
1204
|
+
`numpy.ndarray`, shape (n,)
|
1205
|
+
Best point.
|
1206
|
+
float
|
1207
|
+
Corresponding objective function value.
|
1208
|
+
float
|
1209
|
+
Corresponding maximum constraint violation.
|
1210
|
+
"""
|
1211
|
+
# If the filter is empty, i.e., if no function evaluation has been
|
1212
|
+
# performed, we evaluate the objective and nonlinear constraint
|
1213
|
+
# functions at the initial guess.
|
1214
|
+
if len(self._fun_filter) == 0:
|
1215
|
+
self(self.x0)
|
1216
|
+
|
1217
|
+
# Find the best point in the filter.
|
1218
|
+
fun_filter = np.array(self._fun_filter)
|
1219
|
+
maxcv_filter = np.array(self._maxcv_filter)
|
1220
|
+
x_filter = np.array(self._x_filter)
|
1221
|
+
finite_idx = np.isfinite(maxcv_filter)
|
1222
|
+
if np.any(finite_idx):
|
1223
|
+
# At least one point has a finite maximum constraint violation.
|
1224
|
+
feasible_idx = maxcv_filter <= self._feasibility_tol
|
1225
|
+
if np.any(feasible_idx) and not np.all(
|
1226
|
+
np.isnan(fun_filter[feasible_idx])
|
1227
|
+
):
|
1228
|
+
# At least one point is feasible and has a well-defined
|
1229
|
+
# objective function value. We select the point with the least
|
1230
|
+
# objective function value. If there is a tie, we select the
|
1231
|
+
# point with the least maximum constraint violation. If there
|
1232
|
+
# is still a tie, we select the most recent point.
|
1233
|
+
fun_min_idx = feasible_idx & (
|
1234
|
+
fun_filter <= np.nanmin(fun_filter[feasible_idx])
|
1235
|
+
)
|
1236
|
+
if np.count_nonzero(fun_min_idx) > 1:
|
1237
|
+
fun_min_idx &= maxcv_filter <= np.min(
|
1238
|
+
maxcv_filter[fun_min_idx]
|
1239
|
+
)
|
1240
|
+
i = np.flatnonzero(fun_min_idx)[-1]
|
1241
|
+
elif np.any(feasible_idx):
|
1242
|
+
# At least one point is feasible but no feasible point has a
|
1243
|
+
# well-defined objective function value. We select the most
|
1244
|
+
# recent feasible point.
|
1245
|
+
i = np.flatnonzero(feasible_idx)[-1]
|
1246
|
+
else:
|
1247
|
+
# No point is feasible. We first compute the merit function
|
1248
|
+
# value for each point.
|
1249
|
+
merit_filter = np.full_like(fun_filter, np.nan)
|
1250
|
+
merit_filter[finite_idx] = (
|
1251
|
+
fun_filter[finite_idx] + penalty * maxcv_filter[finite_idx]
|
1252
|
+
)
|
1253
|
+
if np.all(np.isnan(merit_filter)):
|
1254
|
+
# No point has a well-defined merit function value. In
|
1255
|
+
# other words, among the points with a well-defined maximum
|
1256
|
+
# constraint violation, none has a well-defined objective
|
1257
|
+
# function value. We select the point with the least
|
1258
|
+
# maximum constraint violation. If there is a tie, we
|
1259
|
+
# select the most recent point.
|
1260
|
+
min_maxcv_idx = maxcv_filter <= np.nanmin(maxcv_filter)
|
1261
|
+
i = np.flatnonzero(min_maxcv_idx)[-1]
|
1262
|
+
else:
|
1263
|
+
# At least one point has a well-defined merit function
|
1264
|
+
# value. We select the point with the least merit function
|
1265
|
+
# value. If there is a tie, we select the point with the
|
1266
|
+
# least maximum constraint violation. If there is still a
|
1267
|
+
# tie, we select the point with the least objective
|
1268
|
+
# function value. If there is still a tie, we select the
|
1269
|
+
# most recent point.
|
1270
|
+
merit_min_idx = merit_filter <= np.nanmin(merit_filter)
|
1271
|
+
if np.count_nonzero(merit_min_idx) > 1:
|
1272
|
+
merit_min_idx &= maxcv_filter <= np.min(
|
1273
|
+
maxcv_filter[merit_min_idx]
|
1274
|
+
)
|
1275
|
+
|
1276
|
+
if np.count_nonzero(merit_min_idx) > 1:
|
1277
|
+
merit_min_idx &= fun_filter <= np.min(
|
1278
|
+
fun_filter[merit_min_idx]
|
1279
|
+
)
|
1280
|
+
i = np.flatnonzero(merit_min_idx)[-1]
|
1281
|
+
elif not np.all(np.isnan(fun_filter)):
|
1282
|
+
# No maximum constraint violation is well-defined but at least one
|
1283
|
+
# point has a well-defined objective function value. We select the
|
1284
|
+
# point with the least objective function value. If there is a tie,
|
1285
|
+
# we select the most recent point.
|
1286
|
+
fun_min_idx = fun_filter <= np.nanmin(fun_filter)
|
1287
|
+
i = np.flatnonzero(fun_min_idx)[-1]
|
1288
|
+
else:
|
1289
|
+
# No point has a well-defined maximum constraint violation or
|
1290
|
+
# objective function value. We select the most recent point.
|
1291
|
+
i = len(fun_filter) - 1
|
1292
|
+
return (
|
1293
|
+
self.bounds.project(x_filter[i, :]),
|
1294
|
+
fun_filter[i],
|
1295
|
+
maxcv_filter[i],
|
1296
|
+
)
|