scipy 1.16.2__cp313-cp313t-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +161 -0
- scipy/__init__.py +150 -0
- scipy/_cyutility.cp313t-win_arm64.lib +0 -0
- scipy/_cyutility.cp313t-win_arm64.pyd +0 -0
- scipy/_distributor_init.py +18 -0
- scipy/_lib/__init__.py +14 -0
- scipy/_lib/_array_api.py +931 -0
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_array_api_no_0d.py +103 -0
- scipy/_lib/_bunch.py +229 -0
- scipy/_lib/_ccallback.py +251 -0
- scipy/_lib/_ccallback_c.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_ccallback_c.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_disjoint_set.py +254 -0
- scipy/_lib/_docscrape.py +761 -0
- scipy/_lib/_elementwise_iterative_method.py +346 -0
- scipy/_lib/_fpumode.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_fpumode.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_gcutils.py +105 -0
- scipy/_lib/_pep440.py +487 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_ccallback.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_testutils.py +373 -0
- scipy/_lib/_threadsafety.py +58 -0
- scipy/_lib/_tmpdirs.py +86 -0
- scipy/_lib/_uarray/LICENSE +29 -0
- scipy/_lib/_uarray/__init__.py +116 -0
- scipy/_lib/_uarray/_backend.py +707 -0
- scipy/_lib/_uarray/_uarray.cp313t-win_arm64.lib +0 -0
- scipy/_lib/_uarray/_uarray.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/_util.py +1283 -0
- scipy/_lib/array_api_compat/__init__.py +22 -0
- scipy/_lib/array_api_compat/_internal.py +59 -0
- scipy/_lib/array_api_compat/common/__init__.py +1 -0
- scipy/_lib/array_api_compat/common/_aliases.py +727 -0
- scipy/_lib/array_api_compat/common/_fft.py +213 -0
- scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
- scipy/_lib/array_api_compat/common/_linalg.py +232 -0
- scipy/_lib/array_api_compat/common/_typing.py +192 -0
- scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
- scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
- scipy/_lib/array_api_compat/cupy/_info.py +336 -0
- scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
- scipy/_lib/array_api_compat/cupy/fft.py +36 -0
- scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
- scipy/_lib/array_api_compat/dask/__init__.py +0 -0
- scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
- scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
- scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
- scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
- scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
- scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
- scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
- scipy/_lib/array_api_compat/numpy/_info.py +366 -0
- scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
- scipy/_lib/array_api_compat/numpy/fft.py +35 -0
- scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
- scipy/_lib/array_api_compat/torch/__init__.py +22 -0
- scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
- scipy/_lib/array_api_compat/torch/_info.py +369 -0
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +85 -0
- scipy/_lib/array_api_compat/torch/linalg.py +121 -0
- scipy/_lib/array_api_extra/__init__.py +38 -0
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/cobyqa/__init__.py +20 -0
- scipy/_lib/cobyqa/framework.py +1240 -0
- scipy/_lib/cobyqa/main.py +1506 -0
- scipy/_lib/cobyqa/models.py +1529 -0
- scipy/_lib/cobyqa/problem.py +1296 -0
- scipy/_lib/cobyqa/settings.py +132 -0
- scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
- scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
- scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
- scipy/_lib/cobyqa/utils/__init__.py +18 -0
- scipy/_lib/cobyqa/utils/exceptions.py +22 -0
- scipy/_lib/cobyqa/utils/math.py +77 -0
- scipy/_lib/cobyqa/utils/versions.py +67 -0
- scipy/_lib/decorator.py +399 -0
- scipy/_lib/deprecation.py +274 -0
- scipy/_lib/doccer.py +366 -0
- scipy/_lib/messagestream.cp313t-win_arm64.lib +0 -0
- scipy/_lib/messagestream.cp313t-win_arm64.pyd +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/__init__.py +0 -0
- scipy/_lib/tests/test__gcutils.py +110 -0
- scipy/_lib/tests/test__pep440.py +67 -0
- scipy/_lib/tests/test__testutils.py +32 -0
- scipy/_lib/tests/test__threadsafety.py +51 -0
- scipy/_lib/tests/test__util.py +641 -0
- scipy/_lib/tests/test_array_api.py +322 -0
- scipy/_lib/tests/test_bunch.py +169 -0
- scipy/_lib/tests/test_ccallback.py +196 -0
- scipy/_lib/tests/test_config.py +45 -0
- scipy/_lib/tests/test_deprecation.py +10 -0
- scipy/_lib/tests/test_doccer.py +143 -0
- scipy/_lib/tests/test_import_cycles.py +18 -0
- scipy/_lib/tests/test_public_api.py +482 -0
- scipy/_lib/tests/test_scipy_version.py +28 -0
- scipy/_lib/tests/test_tmpdirs.py +48 -0
- scipy/_lib/tests/test_warnings.py +137 -0
- scipy/_lib/uarray.py +31 -0
- scipy/cluster/__init__.py +31 -0
- scipy/cluster/_hierarchy.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_hierarchy.cp313t-win_arm64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_arm64.pyd +0 -0
- scipy/cluster/_vq.cp313t-win_arm64.lib +0 -0
- scipy/cluster/_vq.cp313t-win_arm64.pyd +0 -0
- scipy/cluster/hierarchy.py +4348 -0
- scipy/cluster/tests/__init__.py +0 -0
- scipy/cluster/tests/hierarchy_test_data.py +145 -0
- scipy/cluster/tests/test_disjoint_set.py +202 -0
- scipy/cluster/tests/test_hierarchy.py +1238 -0
- scipy/cluster/tests/test_vq.py +434 -0
- scipy/cluster/vq.py +832 -0
- scipy/conftest.py +683 -0
- scipy/constants/__init__.py +358 -0
- scipy/constants/_codata.py +2266 -0
- scipy/constants/_constants.py +369 -0
- scipy/constants/codata.py +21 -0
- scipy/constants/constants.py +53 -0
- scipy/constants/tests/__init__.py +0 -0
- scipy/constants/tests/test_codata.py +78 -0
- scipy/constants/tests/test_constants.py +83 -0
- scipy/datasets/__init__.py +90 -0
- scipy/datasets/_download_all.py +71 -0
- scipy/datasets/_fetchers.py +225 -0
- scipy/datasets/_registry.py +26 -0
- scipy/datasets/_utils.py +81 -0
- scipy/datasets/tests/__init__.py +0 -0
- scipy/datasets/tests/test_data.py +128 -0
- scipy/differentiate/__init__.py +27 -0
- scipy/differentiate/_differentiate.py +1129 -0
- scipy/differentiate/tests/__init__.py +0 -0
- scipy/differentiate/tests/test_differentiate.py +694 -0
- scipy/fft/__init__.py +114 -0
- scipy/fft/_backend.py +196 -0
- scipy/fft/_basic.py +1650 -0
- scipy/fft/_basic_backend.py +197 -0
- scipy/fft/_debug_backends.py +22 -0
- scipy/fft/_fftlog.py +223 -0
- scipy/fft/_fftlog_backend.py +200 -0
- scipy/fft/_helper.py +348 -0
- scipy/fft/_pocketfft/LICENSE.md +25 -0
- scipy/fft/_pocketfft/__init__.py +9 -0
- scipy/fft/_pocketfft/basic.py +251 -0
- scipy/fft/_pocketfft/helper.py +249 -0
- scipy/fft/_pocketfft/pypocketfft.cp313t-win_arm64.lib +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313t-win_arm64.pyd +0 -0
- scipy/fft/_pocketfft/realtransforms.py +109 -0
- scipy/fft/_pocketfft/tests/__init__.py +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
- scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
- scipy/fft/_realtransforms.py +706 -0
- scipy/fft/_realtransforms_backend.py +63 -0
- scipy/fft/tests/__init__.py +0 -0
- scipy/fft/tests/mock_backend.py +96 -0
- scipy/fft/tests/test_backend.py +98 -0
- scipy/fft/tests/test_basic.py +504 -0
- scipy/fft/tests/test_fftlog.py +215 -0
- scipy/fft/tests/test_helper.py +558 -0
- scipy/fft/tests/test_multithreading.py +84 -0
- scipy/fft/tests/test_real_transforms.py +247 -0
- scipy/fftpack/__init__.py +103 -0
- scipy/fftpack/_basic.py +428 -0
- scipy/fftpack/_helper.py +115 -0
- scipy/fftpack/_pseudo_diffs.py +554 -0
- scipy/fftpack/_realtransforms.py +598 -0
- scipy/fftpack/basic.py +20 -0
- scipy/fftpack/convolve.cp313t-win_arm64.lib +0 -0
- scipy/fftpack/convolve.cp313t-win_arm64.pyd +0 -0
- scipy/fftpack/helper.py +19 -0
- scipy/fftpack/pseudo_diffs.py +22 -0
- scipy/fftpack/realtransforms.py +19 -0
- scipy/fftpack/tests/__init__.py +0 -0
- scipy/fftpack/tests/fftw_double_ref.npz +0 -0
- scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
- scipy/fftpack/tests/fftw_single_ref.npz +0 -0
- scipy/fftpack/tests/test.npz +0 -0
- scipy/fftpack/tests/test_basic.py +877 -0
- scipy/fftpack/tests/test_helper.py +54 -0
- scipy/fftpack/tests/test_import.py +33 -0
- scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
- scipy/fftpack/tests/test_real_transforms.py +836 -0
- scipy/integrate/__init__.py +122 -0
- scipy/integrate/_bvp.py +1160 -0
- scipy/integrate/_cubature.py +729 -0
- scipy/integrate/_dop.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_dop.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_ivp/__init__.py +8 -0
- scipy/integrate/_ivp/base.py +290 -0
- scipy/integrate/_ivp/bdf.py +478 -0
- scipy/integrate/_ivp/common.py +451 -0
- scipy/integrate/_ivp/dop853_coefficients.py +193 -0
- scipy/integrate/_ivp/ivp.py +755 -0
- scipy/integrate/_ivp/lsoda.py +224 -0
- scipy/integrate/_ivp/radau.py +572 -0
- scipy/integrate/_ivp/rk.py +601 -0
- scipy/integrate/_ivp/tests/__init__.py +0 -0
- scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
- scipy/integrate/_ivp/tests/test_rk.py +37 -0
- scipy/integrate/_lebedev.py +5450 -0
- scipy/integrate/_lsoda.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_lsoda.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_ode.py +1395 -0
- scipy/integrate/_odepack.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_odepack.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_odepack_py.py +273 -0
- scipy/integrate/_quad_vec.py +674 -0
- scipy/integrate/_quadpack.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_quadpack.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_quadpack_py.py +1283 -0
- scipy/integrate/_quadrature.py +1336 -0
- scipy/integrate/_rules/__init__.py +12 -0
- scipy/integrate/_rules/_base.py +518 -0
- scipy/integrate/_rules/_gauss_kronrod.py +202 -0
- scipy/integrate/_rules/_gauss_legendre.py +62 -0
- scipy/integrate/_rules/_genz_malik.py +210 -0
- scipy/integrate/_tanhsinh.py +1385 -0
- scipy/integrate/_test_multivariate.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_test_multivariate.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/_vode.cp313t-win_arm64.lib +0 -0
- scipy/integrate/_vode.cp313t-win_arm64.pyd +0 -0
- scipy/integrate/dop.py +15 -0
- scipy/integrate/lsoda.py +15 -0
- scipy/integrate/odepack.py +17 -0
- scipy/integrate/quadpack.py +23 -0
- scipy/integrate/tests/__init__.py +0 -0
- scipy/integrate/tests/test__quad_vec.py +211 -0
- scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
- scipy/integrate/tests/test_bvp.py +714 -0
- scipy/integrate/tests/test_cubature.py +1375 -0
- scipy/integrate/tests/test_integrate.py +840 -0
- scipy/integrate/tests/test_odeint_jac.py +74 -0
- scipy/integrate/tests/test_quadpack.py +680 -0
- scipy/integrate/tests/test_quadrature.py +730 -0
- scipy/integrate/tests/test_tanhsinh.py +1171 -0
- scipy/integrate/vode.py +15 -0
- scipy/interpolate/__init__.py +228 -0
- scipy/interpolate/_bary_rational.py +715 -0
- scipy/interpolate/_bsplines.py +2469 -0
- scipy/interpolate/_cubic.py +973 -0
- scipy/interpolate/_dfitpack.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_dfitpack.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_dierckx.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_fitpack.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_fitpack2.py +2397 -0
- scipy/interpolate/_fitpack_impl.py +811 -0
- scipy/interpolate/_fitpack_py.py +898 -0
- scipy/interpolate/_fitpack_repro.py +996 -0
- scipy/interpolate/_interpnd.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_interpnd.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_interpolate.py +2266 -0
- scipy/interpolate/_ndbspline.py +415 -0
- scipy/interpolate/_ndgriddata.py +329 -0
- scipy/interpolate/_pade.py +67 -0
- scipy/interpolate/_polyint.py +1025 -0
- scipy/interpolate/_ppoly.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_ppoly.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_rbf.py +290 -0
- scipy/interpolate/_rbfinterp.py +550 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/_rgi.py +764 -0
- scipy/interpolate/_rgi_cython.cp313t-win_arm64.lib +0 -0
- scipy/interpolate/_rgi_cython.cp313t-win_arm64.pyd +0 -0
- scipy/interpolate/dfitpack.py +24 -0
- scipy/interpolate/fitpack.py +31 -0
- scipy/interpolate/fitpack2.py +29 -0
- scipy/interpolate/interpnd.py +24 -0
- scipy/interpolate/interpolate.py +30 -0
- scipy/interpolate/ndgriddata.py +23 -0
- scipy/interpolate/polyint.py +24 -0
- scipy/interpolate/rbf.py +18 -0
- scipy/interpolate/tests/__init__.py +0 -0
- scipy/interpolate/tests/data/bug-1310.npz +0 -0
- scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
- scipy/interpolate/tests/data/gcvspl.npz +0 -0
- scipy/interpolate/tests/test_bary_rational.py +368 -0
- scipy/interpolate/tests/test_bsplines.py +3754 -0
- scipy/interpolate/tests/test_fitpack.py +519 -0
- scipy/interpolate/tests/test_fitpack2.py +1431 -0
- scipy/interpolate/tests/test_gil.py +64 -0
- scipy/interpolate/tests/test_interpnd.py +452 -0
- scipy/interpolate/tests/test_interpolate.py +2630 -0
- scipy/interpolate/tests/test_ndgriddata.py +308 -0
- scipy/interpolate/tests/test_pade.py +107 -0
- scipy/interpolate/tests/test_polyint.py +972 -0
- scipy/interpolate/tests/test_rbf.py +246 -0
- scipy/interpolate/tests/test_rbfinterp.py +534 -0
- scipy/interpolate/tests/test_rgi.py +1151 -0
- scipy/io/__init__.py +116 -0
- scipy/io/_fast_matrix_market/__init__.py +600 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313t-win_arm64.lib +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313t-win_arm64.pyd +0 -0
- scipy/io/_fortran.py +354 -0
- scipy/io/_harwell_boeing/__init__.py +7 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
- scipy/io/_harwell_boeing/hb.py +571 -0
- scipy/io/_harwell_boeing/tests/__init__.py +0 -0
- scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
- scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
- scipy/io/_idl.py +917 -0
- scipy/io/_mmio.py +968 -0
- scipy/io/_netcdf.py +1104 -0
- scipy/io/_test_fortran.cp313t-win_arm64.lib +0 -0
- scipy/io/_test_fortran.cp313t-win_arm64.pyd +0 -0
- scipy/io/arff/__init__.py +28 -0
- scipy/io/arff/_arffread.py +873 -0
- scipy/io/arff/arffread.py +19 -0
- scipy/io/arff/tests/__init__.py +0 -0
- scipy/io/arff/tests/data/iris.arff +225 -0
- scipy/io/arff/tests/data/missing.arff +8 -0
- scipy/io/arff/tests/data/nodata.arff +11 -0
- scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
- scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
- scipy/io/arff/tests/data/test1.arff +10 -0
- scipy/io/arff/tests/data/test10.arff +8 -0
- scipy/io/arff/tests/data/test11.arff +11 -0
- scipy/io/arff/tests/data/test2.arff +15 -0
- scipy/io/arff/tests/data/test3.arff +6 -0
- scipy/io/arff/tests/data/test4.arff +11 -0
- scipy/io/arff/tests/data/test5.arff +26 -0
- scipy/io/arff/tests/data/test6.arff +12 -0
- scipy/io/arff/tests/data/test7.arff +15 -0
- scipy/io/arff/tests/data/test8.arff +12 -0
- scipy/io/arff/tests/data/test9.arff +14 -0
- scipy/io/arff/tests/test_arffread.py +421 -0
- scipy/io/harwell_boeing.py +17 -0
- scipy/io/idl.py +17 -0
- scipy/io/matlab/__init__.py +66 -0
- scipy/io/matlab/_byteordercodes.py +75 -0
- scipy/io/matlab/_mio.py +375 -0
- scipy/io/matlab/_mio4.py +632 -0
- scipy/io/matlab/_mio5.py +901 -0
- scipy/io/matlab/_mio5_params.py +281 -0
- scipy/io/matlab/_mio5_utils.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio5_utils.cp313t-win_arm64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_arm64.pyd +0 -0
- scipy/io/matlab/_miobase.py +435 -0
- scipy/io/matlab/_streams.cp313t-win_arm64.lib +0 -0
- scipy/io/matlab/_streams.cp313t-win_arm64.pyd +0 -0
- scipy/io/matlab/byteordercodes.py +17 -0
- scipy/io/matlab/mio.py +16 -0
- scipy/io/matlab/mio4.py +17 -0
- scipy/io/matlab/mio5.py +19 -0
- scipy/io/matlab/mio5_params.py +18 -0
- scipy/io/matlab/mio5_utils.py +17 -0
- scipy/io/matlab/mio_utils.py +17 -0
- scipy/io/matlab/miobase.py +16 -0
- scipy/io/matlab/streams.py +16 -0
- scipy/io/matlab/tests/__init__.py +0 -0
- scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
- scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/big_endian.mat +0 -0
- scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
- scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
- scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
- scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
- scipy/io/matlab/tests/data/little_endian.mat +0 -0
- scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
- scipy/io/matlab/tests/data/malformed1.mat +0 -0
- scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
- scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
- scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
- scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
- scipy/io/matlab/tests/data/parabola.mat +0 -0
- scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
- scipy/io/matlab/tests/data/some_functions.mat +0 -0
- scipy/io/matlab/tests/data/sqr.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
- scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
- scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
- scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
- scipy/io/matlab/tests/test_byteordercodes.py +29 -0
- scipy/io/matlab/tests/test_mio.py +1399 -0
- scipy/io/matlab/tests/test_mio5_utils.py +179 -0
- scipy/io/matlab/tests/test_mio_funcs.py +51 -0
- scipy/io/matlab/tests/test_mio_utils.py +45 -0
- scipy/io/matlab/tests/test_miobase.py +32 -0
- scipy/io/matlab/tests/test_pathological.py +33 -0
- scipy/io/matlab/tests/test_streams.py +241 -0
- scipy/io/mmio.py +17 -0
- scipy/io/netcdf.py +17 -0
- scipy/io/tests/__init__.py +0 -0
- scipy/io/tests/data/Transparent Busy.ani +0 -0
- scipy/io/tests/data/array_float32_1d.sav +0 -0
- scipy/io/tests/data/array_float32_2d.sav +0 -0
- scipy/io/tests/data/array_float32_3d.sav +0 -0
- scipy/io/tests/data/array_float32_4d.sav +0 -0
- scipy/io/tests/data/array_float32_5d.sav +0 -0
- scipy/io/tests/data/array_float32_6d.sav +0 -0
- scipy/io/tests/data/array_float32_7d.sav +0 -0
- scipy/io/tests/data/array_float32_8d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
- scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
- scipy/io/tests/data/example_1.nc +0 -0
- scipy/io/tests/data/example_2.nc +0 -0
- scipy/io/tests/data/example_3_maskedvals.nc +0 -0
- scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
- scipy/io/tests/data/fortran-mixed.dat +0 -0
- scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
- scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
- scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
- scipy/io/tests/data/invalid_pointer.sav +0 -0
- scipy/io/tests/data/null_pointer.sav +0 -0
- scipy/io/tests/data/scalar_byte.sav +0 -0
- scipy/io/tests/data/scalar_byte_descr.sav +0 -0
- scipy/io/tests/data/scalar_complex32.sav +0 -0
- scipy/io/tests/data/scalar_complex64.sav +0 -0
- scipy/io/tests/data/scalar_float32.sav +0 -0
- scipy/io/tests/data/scalar_float64.sav +0 -0
- scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
- scipy/io/tests/data/scalar_int16.sav +0 -0
- scipy/io/tests/data/scalar_int32.sav +0 -0
- scipy/io/tests/data/scalar_int64.sav +0 -0
- scipy/io/tests/data/scalar_string.sav +0 -0
- scipy/io/tests/data/scalar_uint16.sav +0 -0
- scipy/io/tests/data/scalar_uint32.sav +0 -0
- scipy/io/tests/data/scalar_uint64.sav +0 -0
- scipy/io/tests/data/struct_arrays.sav +0 -0
- scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_inherit.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_pointers.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
- scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
- scipy/io/tests/data/struct_scalars.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
- scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
- scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
- scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
- scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
- scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
- scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
- scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
- scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
- scipy/io/tests/data/various_compressed.sav +0 -0
- scipy/io/tests/test_fortran.py +264 -0
- scipy/io/tests/test_idl.py +483 -0
- scipy/io/tests/test_mmio.py +831 -0
- scipy/io/tests/test_netcdf.py +550 -0
- scipy/io/tests/test_paths.py +93 -0
- scipy/io/tests/test_wavfile.py +501 -0
- scipy/io/wavfile.py +938 -0
- scipy/linalg/__init__.pxd +1 -0
- scipy/linalg/__init__.py +236 -0
- scipy/linalg/_basic.py +2146 -0
- scipy/linalg/_blas_subroutines.h +164 -0
- scipy/linalg/_cythonized_array_utils.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_cythonized_array_utils.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_cythonized_array_utils.pxd +40 -0
- scipy/linalg/_cythonized_array_utils.pyi +16 -0
- scipy/linalg/_decomp.py +1645 -0
- scipy/linalg/_decomp_cholesky.py +413 -0
- scipy/linalg/_decomp_cossin.py +236 -0
- scipy/linalg/_decomp_interpolative.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_interpolative.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +356 -0
- scipy/linalg/_decomp_lu.py +401 -0
- scipy/linalg/_decomp_lu_cython.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_lu_cython.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_decomp_lu_cython.pyi +6 -0
- scipy/linalg/_decomp_polar.py +113 -0
- scipy/linalg/_decomp_qr.py +494 -0
- scipy/linalg/_decomp_qz.py +452 -0
- scipy/linalg/_decomp_schur.py +336 -0
- scipy/linalg/_decomp_svd.py +545 -0
- scipy/linalg/_decomp_update.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_decomp_update.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +417 -0
- scipy/linalg/_fblas.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_fblas.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_flapack.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_flapack.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_lapack_subroutines.h +1521 -0
- scipy/linalg/_linalg_pythran.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs.py +1050 -0
- scipy/linalg/_matfuncs_expm.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_expm.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_expm.pyi +6 -0
- scipy/linalg/_matfuncs_inv_ssq.py +886 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +107 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_misc.py +191 -0
- scipy/linalg/_procrustes.py +113 -0
- scipy/linalg/_sketches.py +189 -0
- scipy/linalg/_solve_toeplitz.cp313t-win_arm64.lib +0 -0
- scipy/linalg/_solve_toeplitz.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/_solvers.py +862 -0
- scipy/linalg/_special_matrices.py +1322 -0
- scipy/linalg/_testutils.py +65 -0
- scipy/linalg/basic.py +23 -0
- scipy/linalg/blas.py +495 -0
- scipy/linalg/cython_blas.cp313t-win_arm64.lib +0 -0
- scipy/linalg/cython_blas.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/cython_blas.pxd +169 -0
- scipy/linalg/cython_blas.pyx +1432 -0
- scipy/linalg/cython_lapack.cp313t-win_arm64.lib +0 -0
- scipy/linalg/cython_lapack.cp313t-win_arm64.pyd +0 -0
- scipy/linalg/cython_lapack.pxd +1528 -0
- scipy/linalg/cython_lapack.pyx +12045 -0
- scipy/linalg/decomp.py +23 -0
- scipy/linalg/decomp_cholesky.py +21 -0
- scipy/linalg/decomp_lu.py +21 -0
- scipy/linalg/decomp_qr.py +20 -0
- scipy/linalg/decomp_schur.py +21 -0
- scipy/linalg/decomp_svd.py +21 -0
- scipy/linalg/interpolative.py +989 -0
- scipy/linalg/lapack.py +1081 -0
- scipy/linalg/matfuncs.py +23 -0
- scipy/linalg/misc.py +21 -0
- scipy/linalg/special_matrices.py +22 -0
- scipy/linalg/tests/__init__.py +0 -0
- scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
- scipy/linalg/tests/_cython_examples/meson.build +34 -0
- scipy/linalg/tests/data/carex_15_data.npz +0 -0
- scipy/linalg/tests/data/carex_18_data.npz +0 -0
- scipy/linalg/tests/data/carex_19_data.npz +0 -0
- scipy/linalg/tests/data/carex_20_data.npz +0 -0
- scipy/linalg/tests/data/carex_6_data.npz +0 -0
- scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
- scipy/linalg/tests/test_basic.py +2074 -0
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_blas.py +1127 -0
- scipy/linalg/tests/test_cython_blas.py +118 -0
- scipy/linalg/tests/test_cython_lapack.py +22 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
- scipy/linalg/tests/test_decomp.py +3189 -0
- scipy/linalg/tests/test_decomp_cholesky.py +268 -0
- scipy/linalg/tests/test_decomp_cossin.py +314 -0
- scipy/linalg/tests/test_decomp_ldl.py +137 -0
- scipy/linalg/tests/test_decomp_lu.py +308 -0
- scipy/linalg/tests/test_decomp_polar.py +110 -0
- scipy/linalg/tests/test_decomp_update.py +1701 -0
- scipy/linalg/tests/test_extending.py +46 -0
- scipy/linalg/tests/test_fblas.py +607 -0
- scipy/linalg/tests/test_interpolative.py +232 -0
- scipy/linalg/tests/test_lapack.py +3620 -0
- scipy/linalg/tests/test_matfuncs.py +1125 -0
- scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
- scipy/linalg/tests/test_procrustes.py +214 -0
- scipy/linalg/tests/test_sketches.py +118 -0
- scipy/linalg/tests/test_solve_toeplitz.py +150 -0
- scipy/linalg/tests/test_solvers.py +844 -0
- scipy/linalg/tests/test_special_matrices.py +636 -0
- scipy/misc/__init__.py +6 -0
- scipy/misc/common.py +6 -0
- scipy/misc/doccer.py +6 -0
- scipy/ndimage/__init__.py +174 -0
- scipy/ndimage/_ctest.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_ctest.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_cytest.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_cytest.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_delegators.py +303 -0
- scipy/ndimage/_filters.py +2422 -0
- scipy/ndimage/_fourier.py +306 -0
- scipy/ndimage/_interpolation.py +1033 -0
- scipy/ndimage/_measurements.py +1689 -0
- scipy/ndimage/_morphology.py +2634 -0
- scipy/ndimage/_nd_image.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_nd_image.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_ndimage_api.py +16 -0
- scipy/ndimage/_ni_docstrings.py +214 -0
- scipy/ndimage/_ni_label.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_ni_label.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_ni_support.py +139 -0
- scipy/ndimage/_rank_filter_1d.cp313t-win_arm64.lib +0 -0
- scipy/ndimage/_rank_filter_1d.cp313t-win_arm64.pyd +0 -0
- scipy/ndimage/_support_alternative_backends.py +84 -0
- scipy/ndimage/filters.py +27 -0
- scipy/ndimage/fourier.py +21 -0
- scipy/ndimage/interpolation.py +22 -0
- scipy/ndimage/measurements.py +24 -0
- scipy/ndimage/morphology.py +27 -0
- scipy/ndimage/tests/__init__.py +12 -0
- scipy/ndimage/tests/data/label_inputs.txt +21 -0
- scipy/ndimage/tests/data/label_results.txt +294 -0
- scipy/ndimage/tests/data/label_strels.txt +42 -0
- scipy/ndimage/tests/dots.png +0 -0
- scipy/ndimage/tests/test_c_api.py +102 -0
- scipy/ndimage/tests/test_datatypes.py +67 -0
- scipy/ndimage/tests/test_filters.py +3083 -0
- scipy/ndimage/tests/test_fourier.py +187 -0
- scipy/ndimage/tests/test_interpolation.py +1491 -0
- scipy/ndimage/tests/test_measurements.py +1592 -0
- scipy/ndimage/tests/test_morphology.py +2950 -0
- scipy/ndimage/tests/test_ni_support.py +78 -0
- scipy/ndimage/tests/test_splines.py +70 -0
- scipy/odr/__init__.py +131 -0
- scipy/odr/__odrpack.cp313t-win_arm64.lib +0 -0
- scipy/odr/__odrpack.cp313t-win_arm64.pyd +0 -0
- scipy/odr/_add_newdocs.py +34 -0
- scipy/odr/_models.py +315 -0
- scipy/odr/_odrpack.py +1154 -0
- scipy/odr/models.py +20 -0
- scipy/odr/odrpack.py +21 -0
- scipy/odr/tests/__init__.py +0 -0
- scipy/odr/tests/test_odr.py +607 -0
- scipy/optimize/__init__.pxd +1 -0
- scipy/optimize/__init__.py +460 -0
- scipy/optimize/_basinhopping.py +741 -0
- scipy/optimize/_bglu_dense.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_bglu_dense.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_bracket.py +706 -0
- scipy/optimize/_chandrupatla.py +551 -0
- scipy/optimize/_cobyla_py.py +297 -0
- scipy/optimize/_cobyqa_py.py +72 -0
- scipy/optimize/_constraints.py +598 -0
- scipy/optimize/_dcsrch.py +728 -0
- scipy/optimize/_differentiable_functions.py +835 -0
- scipy/optimize/_differentialevolution.py +1970 -0
- scipy/optimize/_direct.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_direct.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_direct_py.py +280 -0
- scipy/optimize/_dual_annealing.py +732 -0
- scipy/optimize/_elementwise.py +798 -0
- scipy/optimize/_group_columns.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_group_columns.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_hessian_update_strategy.py +479 -0
- scipy/optimize/_highspy/__init__.py +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +338 -0
- scipy/optimize/_isotonic.py +157 -0
- scipy/optimize/_lbfgsb.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lbfgsb.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_lbfgsb_py.py +634 -0
- scipy/optimize/_linesearch.py +896 -0
- scipy/optimize/_linprog.py +733 -0
- scipy/optimize/_linprog_doc.py +1434 -0
- scipy/optimize/_linprog_highs.py +422 -0
- scipy/optimize/_linprog_ip.py +1141 -0
- scipy/optimize/_linprog_rs.py +572 -0
- scipy/optimize/_linprog_simplex.py +663 -0
- scipy/optimize/_linprog_util.py +1521 -0
- scipy/optimize/_lsap.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lsap.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/__init__.py +5 -0
- scipy/optimize/_lsq/bvls.py +183 -0
- scipy/optimize/_lsq/common.py +731 -0
- scipy/optimize/_lsq/dogbox.py +345 -0
- scipy/optimize/_lsq/givens_elimination.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_lsq/least_squares.py +1044 -0
- scipy/optimize/_lsq/lsq_linear.py +361 -0
- scipy/optimize/_lsq/trf.py +587 -0
- scipy/optimize/_lsq/trf_linear.py +249 -0
- scipy/optimize/_milp.py +394 -0
- scipy/optimize/_minimize.py +1199 -0
- scipy/optimize/_minpack.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_minpack.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_minpack_py.py +1178 -0
- scipy/optimize/_moduleTNC.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_moduleTNC.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_nnls.py +96 -0
- scipy/optimize/_nonlin.py +1634 -0
- scipy/optimize/_numdiff.py +963 -0
- scipy/optimize/_optimize.py +4169 -0
- scipy/optimize/_pava_pybind.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_pava_pybind.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_qap.py +760 -0
- scipy/optimize/_remove_redundancy.py +522 -0
- scipy/optimize/_root.py +732 -0
- scipy/optimize/_root_scalar.py +538 -0
- scipy/optimize/_shgo.py +1606 -0
- scipy/optimize/_shgo_lib/__init__.py +0 -0
- scipy/optimize/_shgo_lib/_complex.py +1225 -0
- scipy/optimize/_shgo_lib/_vertex.py +460 -0
- scipy/optimize/_slsqp_py.py +603 -0
- scipy/optimize/_slsqplib.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_slsqplib.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_spectral.py +260 -0
- scipy/optimize/_tnc.py +438 -0
- scipy/optimize/_trlib/__init__.py +12 -0
- scipy/optimize/_trlib/_trlib.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_trlib/_trlib.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_trustregion.py +318 -0
- scipy/optimize/_trustregion_constr/__init__.py +6 -0
- scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
- scipy/optimize/_trustregion_constr/projections.py +411 -0
- scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
- scipy/optimize/_trustregion_constr/report.py +49 -0
- scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
- scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
- scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
- scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
- scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
- scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
- scipy/optimize/_trustregion_dogleg.py +122 -0
- scipy/optimize/_trustregion_exact.py +437 -0
- scipy/optimize/_trustregion_krylov.py +65 -0
- scipy/optimize/_trustregion_ncg.py +126 -0
- scipy/optimize/_tstutils.py +972 -0
- scipy/optimize/_zeros.cp313t-win_arm64.lib +0 -0
- scipy/optimize/_zeros.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/_zeros_py.py +1475 -0
- scipy/optimize/cobyla.py +19 -0
- scipy/optimize/cython_optimize/__init__.py +133 -0
- scipy/optimize/cython_optimize/_zeros.cp313t-win_arm64.lib +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313t-win_arm64.pyd +0 -0
- scipy/optimize/cython_optimize/_zeros.pxd +33 -0
- scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
- scipy/optimize/cython_optimize.pxd +11 -0
- scipy/optimize/elementwise.py +38 -0
- scipy/optimize/lbfgsb.py +23 -0
- scipy/optimize/linesearch.py +18 -0
- scipy/optimize/minpack.py +27 -0
- scipy/optimize/minpack2.py +17 -0
- scipy/optimize/moduleTNC.py +19 -0
- scipy/optimize/nonlin.py +29 -0
- scipy/optimize/optimize.py +40 -0
- scipy/optimize/slsqp.py +22 -0
- scipy/optimize/tests/__init__.py +0 -0
- scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
- scipy/optimize/tests/_cython_examples/meson.build +32 -0
- scipy/optimize/tests/test__basinhopping.py +535 -0
- scipy/optimize/tests/test__differential_evolution.py +1703 -0
- scipy/optimize/tests/test__dual_annealing.py +416 -0
- scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
- scipy/optimize/tests/test__numdiff.py +885 -0
- scipy/optimize/tests/test__remove_redundancy.py +228 -0
- scipy/optimize/tests/test__root.py +124 -0
- scipy/optimize/tests/test__shgo.py +1164 -0
- scipy/optimize/tests/test__spectral.py +226 -0
- scipy/optimize/tests/test_bracket.py +896 -0
- scipy/optimize/tests/test_chandrupatla.py +982 -0
- scipy/optimize/tests/test_cobyla.py +195 -0
- scipy/optimize/tests/test_cobyqa.py +252 -0
- scipy/optimize/tests/test_constraint_conversion.py +286 -0
- scipy/optimize/tests/test_constraints.py +255 -0
- scipy/optimize/tests/test_cython_optimize.py +92 -0
- scipy/optimize/tests/test_differentiable_functions.py +1025 -0
- scipy/optimize/tests/test_direct.py +321 -0
- scipy/optimize/tests/test_extending.py +28 -0
- scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
- scipy/optimize/tests/test_isotonic_regression.py +167 -0
- scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
- scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
- scipy/optimize/tests/test_least_squares.py +986 -0
- scipy/optimize/tests/test_linear_assignment.py +116 -0
- scipy/optimize/tests/test_linesearch.py +328 -0
- scipy/optimize/tests/test_linprog.py +2577 -0
- scipy/optimize/tests/test_lsq_common.py +297 -0
- scipy/optimize/tests/test_lsq_linear.py +287 -0
- scipy/optimize/tests/test_milp.py +459 -0
- scipy/optimize/tests/test_minimize_constrained.py +845 -0
- scipy/optimize/tests/test_minpack.py +1194 -0
- scipy/optimize/tests/test_nnls.py +469 -0
- scipy/optimize/tests/test_nonlin.py +572 -0
- scipy/optimize/tests/test_optimize.py +3344 -0
- scipy/optimize/tests/test_quadratic_assignment.py +455 -0
- scipy/optimize/tests/test_regression.py +40 -0
- scipy/optimize/tests/test_slsqp.py +645 -0
- scipy/optimize/tests/test_tnc.py +345 -0
- scipy/optimize/tests/test_trustregion.py +110 -0
- scipy/optimize/tests/test_trustregion_exact.py +351 -0
- scipy/optimize/tests/test_trustregion_krylov.py +170 -0
- scipy/optimize/tests/test_zeros.py +998 -0
- scipy/optimize/tnc.py +22 -0
- scipy/optimize/zeros.py +26 -0
- scipy/signal/__init__.py +316 -0
- scipy/signal/_arraytools.py +264 -0
- scipy/signal/_czt.py +575 -0
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +5893 -0
- scipy/signal/_fir_filter_design.py +1458 -0
- scipy/signal/_lti_conversion.py +534 -0
- scipy/signal/_ltisys.py +3546 -0
- scipy/signal/_max_len_seq.py +139 -0
- scipy/signal/_max_len_seq_inner.cp313t-win_arm64.lib +0 -0
- scipy/signal/_max_len_seq_inner.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_peak_finding.py +1310 -0
- scipy/signal/_peak_finding_utils.cp313t-win_arm64.lib +0 -0
- scipy/signal/_peak_finding_utils.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_savitzky_golay.py +357 -0
- scipy/signal/_short_time_fft.py +2228 -0
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +5309 -0
- scipy/signal/_sigtools.cp313t-win_arm64.lib +0 -0
- scipy/signal/_sigtools.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_sosfilt.cp313t-win_arm64.lib +0 -0
- scipy/signal/_sosfilt.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_spectral_py.py +2471 -0
- scipy/signal/_spline.cp313t-win_arm64.lib +0 -0
- scipy/signal/_spline.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_spline.pyi +34 -0
- scipy/signal/_spline_filters.py +848 -0
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +219 -0
- scipy/signal/_upfirdn_apply.cp313t-win_arm64.lib +0 -0
- scipy/signal/_upfirdn_apply.cp313t-win_arm64.pyd +0 -0
- scipy/signal/_waveforms.py +687 -0
- scipy/signal/_wavelets.py +29 -0
- scipy/signal/bsplines.py +21 -0
- scipy/signal/filter_design.py +28 -0
- scipy/signal/fir_filter_design.py +21 -0
- scipy/signal/lti_conversion.py +20 -0
- scipy/signal/ltisys.py +25 -0
- scipy/signal/signaltools.py +27 -0
- scipy/signal/spectral.py +21 -0
- scipy/signal/spline.py +18 -0
- scipy/signal/tests/__init__.py +0 -0
- scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
- scipy/signal/tests/mpsig.py +122 -0
- scipy/signal/tests/test_array_tools.py +111 -0
- scipy/signal/tests/test_bsplines.py +365 -0
- scipy/signal/tests/test_cont2discrete.py +424 -0
- scipy/signal/tests/test_czt.py +221 -0
- scipy/signal/tests/test_dltisys.py +599 -0
- scipy/signal/tests/test_filter_design.py +4744 -0
- scipy/signal/tests/test_fir_filter_design.py +851 -0
- scipy/signal/tests/test_ltisys.py +1225 -0
- scipy/signal/tests/test_max_len_seq.py +71 -0
- scipy/signal/tests/test_peak_finding.py +915 -0
- scipy/signal/tests/test_result_type.py +51 -0
- scipy/signal/tests/test_savitzky_golay.py +363 -0
- scipy/signal/tests/test_short_time_fft.py +1107 -0
- scipy/signal/tests/test_signaltools.py +4735 -0
- scipy/signal/tests/test_spectral.py +2141 -0
- scipy/signal/tests/test_splines.py +427 -0
- scipy/signal/tests/test_upfirdn.py +322 -0
- scipy/signal/tests/test_waveforms.py +400 -0
- scipy/signal/tests/test_wavelets.py +59 -0
- scipy/signal/tests/test_windows.py +987 -0
- scipy/signal/waveforms.py +20 -0
- scipy/signal/wavelets.py +17 -0
- scipy/signal/windows/__init__.py +52 -0
- scipy/signal/windows/_windows.py +2513 -0
- scipy/signal/windows/windows.py +23 -0
- scipy/sparse/__init__.py +350 -0
- scipy/sparse/_base.py +1613 -0
- scipy/sparse/_bsr.py +880 -0
- scipy/sparse/_compressed.py +1328 -0
- scipy/sparse/_construct.py +1454 -0
- scipy/sparse/_coo.py +1581 -0
- scipy/sparse/_csc.py +367 -0
- scipy/sparse/_csparsetools.cp313t-win_arm64.lib +0 -0
- scipy/sparse/_csparsetools.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/_csr.py +558 -0
- scipy/sparse/_data.py +569 -0
- scipy/sparse/_dia.py +677 -0
- scipy/sparse/_dok.py +669 -0
- scipy/sparse/_extract.py +178 -0
- scipy/sparse/_index.py +444 -0
- scipy/sparse/_lil.py +632 -0
- scipy/sparse/_matrix.py +169 -0
- scipy/sparse/_matrix_io.py +167 -0
- scipy/sparse/_sparsetools.cp313t-win_arm64.lib +0 -0
- scipy/sparse/_sparsetools.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/_spfuncs.py +76 -0
- scipy/sparse/_sputils.py +632 -0
- scipy/sparse/base.py +24 -0
- scipy/sparse/bsr.py +22 -0
- scipy/sparse/compressed.py +20 -0
- scipy/sparse/construct.py +38 -0
- scipy/sparse/coo.py +23 -0
- scipy/sparse/csc.py +22 -0
- scipy/sparse/csgraph/__init__.py +210 -0
- scipy/sparse/csgraph/_flow.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_flow.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_laplacian.py +563 -0
- scipy/sparse/csgraph/_matching.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_arm64.lib +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/csgraph/_validation.py +66 -0
- scipy/sparse/csgraph/tests/__init__.py +0 -0
- scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
- scipy/sparse/csgraph/tests/test_conversions.py +61 -0
- scipy/sparse/csgraph/tests/test_flow.py +209 -0
- scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
- scipy/sparse/csgraph/tests/test_matching.py +307 -0
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
- scipy/sparse/csgraph/tests/test_reordering.py +70 -0
- scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
- scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
- scipy/sparse/csgraph/tests/test_traversal.py +148 -0
- scipy/sparse/csr.py +22 -0
- scipy/sparse/data.py +18 -0
- scipy/sparse/dia.py +22 -0
- scipy/sparse/dok.py +22 -0
- scipy/sparse/extract.py +23 -0
- scipy/sparse/lil.py +22 -0
- scipy/sparse/linalg/__init__.py +148 -0
- scipy/sparse/linalg/_dsolve/__init__.py +71 -0
- scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
- scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
- scipy/sparse/linalg/_eigen/__init__.py +22 -0
- scipy/sparse/linalg/_eigen/_svds.py +540 -0
- scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
- scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
- scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
- scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
- scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
- scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
- scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
- scipy/sparse/linalg/_expm_multiply.py +816 -0
- scipy/sparse/linalg/_interface.py +920 -0
- scipy/sparse/linalg/_isolve/__init__.py +20 -0
- scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
- scipy/sparse/linalg/_isolve/iterative.py +1051 -0
- scipy/sparse/linalg/_isolve/lgmres.py +230 -0
- scipy/sparse/linalg/_isolve/lsmr.py +486 -0
- scipy/sparse/linalg/_isolve/lsqr.py +589 -0
- scipy/sparse/linalg/_isolve/minres.py +372 -0
- scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
- scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
- scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
- scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
- scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
- scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
- scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
- scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
- scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
- scipy/sparse/linalg/_isolve/utils.py +121 -0
- scipy/sparse/linalg/_matfuncs.py +940 -0
- scipy/sparse/linalg/_norm.py +195 -0
- scipy/sparse/linalg/_onenormest.py +467 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_arm64.lib +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_arm64.pyd +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
- scipy/sparse/linalg/_svdp.py +309 -0
- scipy/sparse/linalg/dsolve.py +22 -0
- scipy/sparse/linalg/eigen.py +21 -0
- scipy/sparse/linalg/interface.py +20 -0
- scipy/sparse/linalg/isolve.py +22 -0
- scipy/sparse/linalg/matfuncs.py +18 -0
- scipy/sparse/linalg/tests/__init__.py +0 -0
- scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
- scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
- scipy/sparse/linalg/tests/test_interface.py +561 -0
- scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
- scipy/sparse/linalg/tests/test_norm.py +154 -0
- scipy/sparse/linalg/tests/test_onenormest.py +252 -0
- scipy/sparse/linalg/tests/test_propack.py +165 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
- scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
- scipy/sparse/sparsetools.py +17 -0
- scipy/sparse/spfuncs.py +17 -0
- scipy/sparse/sputils.py +17 -0
- scipy/sparse/tests/__init__.py +0 -0
- scipy/sparse/tests/data/csc_py2.npz +0 -0
- scipy/sparse/tests/data/csc_py3.npz +0 -0
- scipy/sparse/tests/test_arithmetic1d.py +341 -0
- scipy/sparse/tests/test_array_api.py +561 -0
- scipy/sparse/tests/test_base.py +5870 -0
- scipy/sparse/tests/test_common1d.py +447 -0
- scipy/sparse/tests/test_construct.py +872 -0
- scipy/sparse/tests/test_coo.py +1119 -0
- scipy/sparse/tests/test_csc.py +98 -0
- scipy/sparse/tests/test_csr.py +214 -0
- scipy/sparse/tests/test_dok.py +209 -0
- scipy/sparse/tests/test_extract.py +51 -0
- scipy/sparse/tests/test_indexing1d.py +603 -0
- scipy/sparse/tests/test_matrix_io.py +109 -0
- scipy/sparse/tests/test_minmax1d.py +128 -0
- scipy/sparse/tests/test_sparsetools.py +344 -0
- scipy/sparse/tests/test_spfuncs.py +97 -0
- scipy/sparse/tests/test_sputils.py +424 -0
- scipy/spatial/__init__.py +129 -0
- scipy/spatial/_ckdtree.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_ckdtree.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_geometric_slerp.py +238 -0
- scipy/spatial/_hausdorff.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_hausdorff.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_kdtree.py +920 -0
- scipy/spatial/_plotutils.py +274 -0
- scipy/spatial/_procrustes.py +132 -0
- scipy/spatial/_qhull.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_qhull.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_qhull.pyi +213 -0
- scipy/spatial/_spherical_voronoi.py +341 -0
- scipy/spatial/_voronoi.cp313t-win_arm64.lib +0 -0
- scipy/spatial/_voronoi.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/_voronoi.pyi +4 -0
- scipy/spatial/ckdtree.py +18 -0
- scipy/spatial/distance.py +3147 -0
- scipy/spatial/distance.pyi +210 -0
- scipy/spatial/kdtree.py +25 -0
- scipy/spatial/qhull.py +25 -0
- scipy/spatial/qhull_src/COPYING_QHULL.txt +39 -0
- scipy/spatial/tests/__init__.py +0 -0
- scipy/spatial/tests/data/cdist-X1.txt +10 -0
- scipy/spatial/tests/data/cdist-X2.txt +20 -0
- scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
- scipy/spatial/tests/data/iris.txt +150 -0
- scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
- scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
- scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
- scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
- scipy/spatial/tests/data/random-bool-data.txt +100 -0
- scipy/spatial/tests/data/random-double-data.txt +100 -0
- scipy/spatial/tests/data/random-int-data.txt +100 -0
- scipy/spatial/tests/data/random-uint-data.txt +100 -0
- scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
- scipy/spatial/tests/test__plotutils.py +91 -0
- scipy/spatial/tests/test__procrustes.py +116 -0
- scipy/spatial/tests/test_distance.py +2389 -0
- scipy/spatial/tests/test_hausdorff.py +199 -0
- scipy/spatial/tests/test_kdtree.py +1536 -0
- scipy/spatial/tests/test_qhull.py +1313 -0
- scipy/spatial/tests/test_slerp.py +417 -0
- scipy/spatial/tests/test_spherical_voronoi.py +358 -0
- scipy/spatial/transform/__init__.py +31 -0
- scipy/spatial/transform/_rigid_transform.cp313t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rigid_transform.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_arm64.lib +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_arm64.pyd +0 -0
- scipy/spatial/transform/_rotation_groups.py +140 -0
- scipy/spatial/transform/_rotation_spline.py +460 -0
- scipy/spatial/transform/rotation.py +21 -0
- scipy/spatial/transform/tests/__init__.py +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +2569 -0
- scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
- scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
- scipy/special/__init__.pxd +1 -0
- scipy/special/__init__.py +841 -0
- scipy/special/_add_newdocs.py +9961 -0
- scipy/special/_basic.py +3576 -0
- scipy/special/_comb.cp313t-win_arm64.lib +0 -0
- scipy/special/_comb.cp313t-win_arm64.pyd +0 -0
- scipy/special/_ellip_harm.py +214 -0
- scipy/special/_ellip_harm_2.cp313t-win_arm64.lib +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_arm64.pyd +0 -0
- scipy/special/_gufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_gufuncs.cp313t-win_arm64.pyd +0 -0
- scipy/special/_input_validation.py +17 -0
- scipy/special/_lambertw.py +149 -0
- scipy/special/_logsumexp.py +426 -0
- scipy/special/_mptestutils.py +453 -0
- scipy/special/_multiufuncs.py +610 -0
- scipy/special/_orthogonal.py +2592 -0
- scipy/special/_orthogonal.pyi +330 -0
- scipy/special/_precompute/__init__.py +0 -0
- scipy/special/_precompute/cosine_cdf.py +17 -0
- scipy/special/_precompute/expn_asy.py +54 -0
- scipy/special/_precompute/gammainc_asy.py +116 -0
- scipy/special/_precompute/gammainc_data.py +124 -0
- scipy/special/_precompute/hyp2f1_data.py +484 -0
- scipy/special/_precompute/lambertw.py +68 -0
- scipy/special/_precompute/loggamma.py +43 -0
- scipy/special/_precompute/struve_convergence.py +131 -0
- scipy/special/_precompute/utils.py +38 -0
- scipy/special/_precompute/wright_bessel.py +342 -0
- scipy/special/_precompute/wright_bessel_data.py +152 -0
- scipy/special/_precompute/wrightomega.py +41 -0
- scipy/special/_precompute/zetac.py +27 -0
- scipy/special/_sf_error.py +15 -0
- scipy/special/_specfun.cp313t-win_arm64.lib +0 -0
- scipy/special/_specfun.cp313t-win_arm64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_special_ufuncs.cp313t-win_arm64.pyd +0 -0
- scipy/special/_spfun_stats.py +106 -0
- scipy/special/_spherical_bessel.py +397 -0
- scipy/special/_support_alternative_backends.py +295 -0
- scipy/special/_test_internal.cp313t-win_arm64.lib +0 -0
- scipy/special/_test_internal.cp313t-win_arm64.pyd +0 -0
- scipy/special/_test_internal.pyi +9 -0
- scipy/special/_testutils.py +321 -0
- scipy/special/_ufuncs.cp313t-win_arm64.lib +0 -0
- scipy/special/_ufuncs.cp313t-win_arm64.pyd +0 -0
- scipy/special/_ufuncs.pyi +522 -0
- scipy/special/_ufuncs.pyx +13173 -0
- scipy/special/_ufuncs_cxx.cp313t-win_arm64.lib +0 -0
- scipy/special/_ufuncs_cxx.cp313t-win_arm64.pyd +0 -0
- scipy/special/_ufuncs_cxx.pxd +142 -0
- scipy/special/_ufuncs_cxx.pyx +427 -0
- scipy/special/_ufuncs_cxx_defs.h +147 -0
- scipy/special/_ufuncs_defs.h +57 -0
- scipy/special/add_newdocs.py +15 -0
- scipy/special/basic.py +87 -0
- scipy/special/cython_special.cp313t-win_arm64.lib +0 -0
- scipy/special/cython_special.cp313t-win_arm64.pyd +0 -0
- scipy/special/cython_special.pxd +259 -0
- scipy/special/cython_special.pyi +3 -0
- scipy/special/orthogonal.py +45 -0
- scipy/special/sf_error.py +20 -0
- scipy/special/specfun.py +24 -0
- scipy/special/spfun_stats.py +17 -0
- scipy/special/tests/__init__.py +0 -0
- scipy/special/tests/_cython_examples/extending.pyx +12 -0
- scipy/special/tests/_cython_examples/meson.build +34 -0
- scipy/special/tests/data/__init__.py +0 -0
- scipy/special/tests/data/boost.npz +0 -0
- scipy/special/tests/data/gsl.npz +0 -0
- scipy/special/tests/data/local.npz +0 -0
- scipy/special/tests/test_basic.py +4815 -0
- scipy/special/tests/test_bdtr.py +112 -0
- scipy/special/tests/test_boost_ufuncs.py +64 -0
- scipy/special/tests/test_boxcox.py +125 -0
- scipy/special/tests/test_cdflib.py +712 -0
- scipy/special/tests/test_cdft_asymptotic.py +49 -0
- scipy/special/tests/test_cephes_intp_cast.py +29 -0
- scipy/special/tests/test_cosine_distr.py +83 -0
- scipy/special/tests/test_cython_special.py +363 -0
- scipy/special/tests/test_data.py +719 -0
- scipy/special/tests/test_dd.py +42 -0
- scipy/special/tests/test_digamma.py +45 -0
- scipy/special/tests/test_ellip_harm.py +278 -0
- scipy/special/tests/test_erfinv.py +89 -0
- scipy/special/tests/test_exponential_integrals.py +118 -0
- scipy/special/tests/test_extending.py +28 -0
- scipy/special/tests/test_faddeeva.py +85 -0
- scipy/special/tests/test_gamma.py +12 -0
- scipy/special/tests/test_gammainc.py +152 -0
- scipy/special/tests/test_hyp2f1.py +2566 -0
- scipy/special/tests/test_hypergeometric.py +234 -0
- scipy/special/tests/test_iv_ratio.py +249 -0
- scipy/special/tests/test_kolmogorov.py +491 -0
- scipy/special/tests/test_lambertw.py +109 -0
- scipy/special/tests/test_legendre.py +1518 -0
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_loggamma.py +70 -0
- scipy/special/tests/test_logit.py +162 -0
- scipy/special/tests/test_logsumexp.py +469 -0
- scipy/special/tests/test_mpmath.py +2293 -0
- scipy/special/tests/test_nan_inputs.py +65 -0
- scipy/special/tests/test_ndtr.py +77 -0
- scipy/special/tests/test_ndtri_exp.py +94 -0
- scipy/special/tests/test_orthogonal.py +821 -0
- scipy/special/tests/test_orthogonal_eval.py +275 -0
- scipy/special/tests/test_owens_t.py +53 -0
- scipy/special/tests/test_pcf.py +24 -0
- scipy/special/tests/test_pdtr.py +48 -0
- scipy/special/tests/test_powm1.py +65 -0
- scipy/special/tests/test_precompute_expn_asy.py +24 -0
- scipy/special/tests/test_precompute_gammainc.py +108 -0
- scipy/special/tests/test_precompute_utils.py +36 -0
- scipy/special/tests/test_round.py +18 -0
- scipy/special/tests/test_sf_error.py +146 -0
- scipy/special/tests/test_sici.py +36 -0
- scipy/special/tests/test_specfun.py +48 -0
- scipy/special/tests/test_spence.py +32 -0
- scipy/special/tests/test_spfun_stats.py +61 -0
- scipy/special/tests/test_sph_harm.py +85 -0
- scipy/special/tests/test_spherical_bessel.py +400 -0
- scipy/special/tests/test_support_alternative_backends.py +248 -0
- scipy/special/tests/test_trig.py +72 -0
- scipy/special/tests/test_ufunc_signatures.py +46 -0
- scipy/special/tests/test_wright_bessel.py +205 -0
- scipy/special/tests/test_wrightomega.py +117 -0
- scipy/special/tests/test_zeta.py +301 -0
- scipy/stats/__init__.py +670 -0
- scipy/stats/_ansari_swilk_statistics.cp313t-win_arm64.lib +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +692 -0
- scipy/stats/_biasedurn.cp313t-win_arm64.lib +0 -0
- scipy/stats/_biasedurn.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_biasedurn.pxd +27 -0
- scipy/stats/_binned_statistic.py +795 -0
- scipy/stats/_binomtest.py +375 -0
- scipy/stats/_bws_test.py +177 -0
- scipy/stats/_censored_data.py +459 -0
- scipy/stats/_common.py +5 -0
- scipy/stats/_constants.py +42 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +12486 -0
- scipy/stats/_correlation.py +210 -0
- scipy/stats/_covariance.py +636 -0
- scipy/stats/_crosstab.py +204 -0
- scipy/stats/_discrete_distns.py +2098 -0
- scipy/stats/_distn_infrastructure.py +4201 -0
- scipy/stats/_distr_params.py +299 -0
- scipy/stats/_distribution_infrastructure.py +5750 -0
- scipy/stats/_entropy.py +428 -0
- scipy/stats/_finite_differences.py +145 -0
- scipy/stats/_fit.py +1351 -0
- scipy/stats/_hypotests.py +2060 -0
- scipy/stats/_kde.py +732 -0
- scipy/stats/_ksstats.py +600 -0
- scipy/stats/_levy_stable/__init__.py +1231 -0
- scipy/stats/_levy_stable/levyst.cp313t-win_arm64.lib +0 -0
- scipy/stats/_levy_stable/levyst.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_mannwhitneyu.py +492 -0
- scipy/stats/_mgc.py +550 -0
- scipy/stats/_morestats.py +4626 -0
- scipy/stats/_mstats_basic.py +3658 -0
- scipy/stats/_mstats_extras.py +521 -0
- scipy/stats/_multicomp.py +449 -0
- scipy/stats/_multivariate.py +7281 -0
- scipy/stats/_new_distributions.py +452 -0
- scipy/stats/_odds_ratio.py +466 -0
- scipy/stats/_page_trend_test.py +486 -0
- scipy/stats/_probability_distribution.py +1964 -0
- scipy/stats/_qmc.py +2956 -0
- scipy/stats/_qmc_cy.cp313t-win_arm64.lib +0 -0
- scipy/stats/_qmc_cy.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_qmc_cy.pyi +54 -0
- scipy/stats/_qmvnt.py +454 -0
- scipy/stats/_qmvnt_cy.cp313t-win_arm64.lib +0 -0
- scipy/stats/_qmvnt_cy.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/__init__.py +4 -0
- scipy/stats/_rcont/rcont.cp313t-win_arm64.lib +0 -0
- scipy/stats/_rcont/rcont.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_relative_risk.py +263 -0
- scipy/stats/_resampling.py +2352 -0
- scipy/stats/_result_classes.py +40 -0
- scipy/stats/_sampling.py +1314 -0
- scipy/stats/_sensitivity_analysis.py +713 -0
- scipy/stats/_sobol.cp313t-win_arm64.lib +0 -0
- scipy/stats/_sobol.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_sobol.pyi +54 -0
- scipy/stats/_sobol_direction_numbers.npz +0 -0
- scipy/stats/_stats.cp313t-win_arm64.lib +0 -0
- scipy/stats/_stats.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_stats.pxd +10 -0
- scipy/stats/_stats_mstats_common.py +322 -0
- scipy/stats/_stats_py.py +11089 -0
- scipy/stats/_stats_pythran.cp313t-win_arm64.lib +0 -0
- scipy/stats/_stats_pythran.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_survival.py +683 -0
- scipy/stats/_tukeylambda_stats.py +199 -0
- scipy/stats/_unuran/__init__.py +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-win_arm64.lib +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-win_arm64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
- scipy/stats/_variation.py +126 -0
- scipy/stats/_warnings_errors.py +38 -0
- scipy/stats/_wilcoxon.py +265 -0
- scipy/stats/biasedurn.py +16 -0
- scipy/stats/contingency.py +521 -0
- scipy/stats/distributions.py +24 -0
- scipy/stats/kde.py +18 -0
- scipy/stats/morestats.py +27 -0
- scipy/stats/mstats.py +140 -0
- scipy/stats/mstats_basic.py +42 -0
- scipy/stats/mstats_extras.py +25 -0
- scipy/stats/mvn.py +17 -0
- scipy/stats/qmc.py +236 -0
- scipy/stats/sampling.py +73 -0
- scipy/stats/stats.py +41 -0
- scipy/stats/tests/__init__.py +0 -0
- scipy/stats/tests/common_tests.py +356 -0
- scipy/stats/tests/data/_mvt.py +171 -0
- scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
- scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
- scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
- scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
- scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
- scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
- scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
- scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
- scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
- scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
- scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
- scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
- scipy/stats/tests/test_axis_nan_policy.py +1388 -0
- scipy/stats/tests/test_binned_statistic.py +568 -0
- scipy/stats/tests/test_censored_data.py +152 -0
- scipy/stats/tests/test_contingency.py +294 -0
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +2198 -0
- scipy/stats/tests/test_continuous_basic.py +1053 -0
- scipy/stats/tests/test_continuous_fit_censored.py +683 -0
- scipy/stats/tests/test_correlation.py +80 -0
- scipy/stats/tests/test_crosstab.py +115 -0
- scipy/stats/tests/test_discrete_basic.py +580 -0
- scipy/stats/tests/test_discrete_distns.py +700 -0
- scipy/stats/tests/test_distributions.py +10413 -0
- scipy/stats/tests/test_entropy.py +322 -0
- scipy/stats/tests/test_fast_gen_inversion.py +435 -0
- scipy/stats/tests/test_fit.py +1090 -0
- scipy/stats/tests/test_hypotests.py +1991 -0
- scipy/stats/tests/test_kdeoth.py +676 -0
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_mgc.py +217 -0
- scipy/stats/tests/test_morestats.py +3259 -0
- scipy/stats/tests/test_mstats_basic.py +2071 -0
- scipy/stats/tests/test_mstats_extras.py +172 -0
- scipy/stats/tests/test_multicomp.py +405 -0
- scipy/stats/tests/test_multivariate.py +4381 -0
- scipy/stats/tests/test_odds_ratio.py +148 -0
- scipy/stats/tests/test_qmc.py +1492 -0
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +345 -0
- scipy/stats/tests/test_relative_risk.py +95 -0
- scipy/stats/tests/test_resampling.py +2000 -0
- scipy/stats/tests/test_sampling.py +1450 -0
- scipy/stats/tests/test_sensitivity_analysis.py +310 -0
- scipy/stats/tests/test_stats.py +9707 -0
- scipy/stats/tests/test_survival.py +466 -0
- scipy/stats/tests/test_tukeylambda_stats.py +85 -0
- scipy/stats/tests/test_variation.py +216 -0
- scipy/version.py +12 -0
- scipy-1.16.2.dist-info/DELVEWHEEL +2 -0
- scipy-1.16.2.dist-info/LICENSE.txt +912 -0
- scipy-1.16.2.dist-info/METADATA +1061 -0
- scipy-1.16.2.dist-info/RECORD +1530 -0
- scipy-1.16.2.dist-info/WHEEL +4 -0
- scipy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
- scipy.libs/scipy_openblas-f3ac85b1f412f7e86514c923dc4058d1.dll +0 -0
@@ -0,0 +1,1529 @@
|
|
1
|
+
import warnings
|
2
|
+
|
3
|
+
import numpy as np
|
4
|
+
from scipy.linalg import eigh
|
5
|
+
|
6
|
+
from .settings import Options
|
7
|
+
from .utils import MaxEvalError, TargetSuccess, FeasibleSuccess
|
8
|
+
|
9
|
+
|
10
|
+
EPS = np.finfo(float).eps
|
11
|
+
|
12
|
+
|
13
|
+
class Interpolation:
|
14
|
+
"""
|
15
|
+
Interpolation set.
|
16
|
+
|
17
|
+
This class stores a base point around which the models are expanded and the
|
18
|
+
interpolation points. The coordinates of the interpolation points are
|
19
|
+
relative to the base point.
|
20
|
+
"""
|
21
|
+
|
22
|
+
def __init__(self, pb, options):
|
23
|
+
"""
|
24
|
+
Initialize the interpolation set.
|
25
|
+
|
26
|
+
Parameters
|
27
|
+
----------
|
28
|
+
pb : `cobyqa.problem.Problem`
|
29
|
+
Problem to be solved.
|
30
|
+
options : dict
|
31
|
+
Options of the solver.
|
32
|
+
"""
|
33
|
+
# Reduce the initial trust-region radius if necessary.
|
34
|
+
self._debug = options[Options.DEBUG]
|
35
|
+
max_radius = 0.5 * np.min(pb.bounds.xu - pb.bounds.xl)
|
36
|
+
if options[Options.RHOBEG] > max_radius:
|
37
|
+
options[Options.RHOBEG.value] = max_radius
|
38
|
+
options[Options.RHOEND.value] = np.min(
|
39
|
+
[
|
40
|
+
options[Options.RHOEND],
|
41
|
+
max_radius,
|
42
|
+
]
|
43
|
+
)
|
44
|
+
|
45
|
+
# Set the initial point around which the models are expanded.
|
46
|
+
self._x_base = np.copy(pb.x0)
|
47
|
+
very_close_xl_idx = (
|
48
|
+
self.x_base <= pb.bounds.xl + 0.5 * options[Options.RHOBEG]
|
49
|
+
)
|
50
|
+
self.x_base[very_close_xl_idx] = pb.bounds.xl[very_close_xl_idx]
|
51
|
+
close_xl_idx = (
|
52
|
+
pb.bounds.xl + 0.5 * options[Options.RHOBEG] < self.x_base
|
53
|
+
) & (self.x_base <= pb.bounds.xl + options[Options.RHOBEG])
|
54
|
+
self.x_base[close_xl_idx] = np.minimum(
|
55
|
+
pb.bounds.xl[close_xl_idx] + options[Options.RHOBEG],
|
56
|
+
pb.bounds.xu[close_xl_idx],
|
57
|
+
)
|
58
|
+
very_close_xu_idx = (
|
59
|
+
self.x_base >= pb.bounds.xu - 0.5 * options[Options.RHOBEG]
|
60
|
+
)
|
61
|
+
self.x_base[very_close_xu_idx] = pb.bounds.xu[very_close_xu_idx]
|
62
|
+
close_xu_idx = (
|
63
|
+
self.x_base < pb.bounds.xu - 0.5 * options[Options.RHOBEG]
|
64
|
+
) & (pb.bounds.xu - options[Options.RHOBEG] <= self.x_base)
|
65
|
+
self.x_base[close_xu_idx] = np.maximum(
|
66
|
+
pb.bounds.xu[close_xu_idx] - options[Options.RHOBEG],
|
67
|
+
pb.bounds.xl[close_xu_idx],
|
68
|
+
)
|
69
|
+
|
70
|
+
# Set the initial interpolation set.
|
71
|
+
self._xpt = np.zeros((pb.n, options[Options.NPT]))
|
72
|
+
for k in range(1, options[Options.NPT]):
|
73
|
+
if k <= pb.n:
|
74
|
+
if very_close_xu_idx[k - 1]:
|
75
|
+
self.xpt[k - 1, k] = -options[Options.RHOBEG]
|
76
|
+
else:
|
77
|
+
self.xpt[k - 1, k] = options[Options.RHOBEG]
|
78
|
+
elif k <= 2 * pb.n:
|
79
|
+
if very_close_xl_idx[k - pb.n - 1]:
|
80
|
+
self.xpt[k - pb.n - 1, k] = 2.0 * options[Options.RHOBEG]
|
81
|
+
elif very_close_xu_idx[k - pb.n - 1]:
|
82
|
+
self.xpt[k - pb.n - 1, k] = -2.0 * options[Options.RHOBEG]
|
83
|
+
else:
|
84
|
+
self.xpt[k - pb.n - 1, k] = -options[Options.RHOBEG]
|
85
|
+
else:
|
86
|
+
spread = (k - pb.n - 1) // pb.n
|
87
|
+
k1 = k - (1 + spread) * pb.n - 1
|
88
|
+
k2 = (k1 + spread) % pb.n
|
89
|
+
self.xpt[k1, k] = self.xpt[k1, k1 + 1]
|
90
|
+
self.xpt[k2, k] = self.xpt[k2, k2 + 1]
|
91
|
+
|
92
|
+
@property
|
93
|
+
def n(self):
|
94
|
+
"""
|
95
|
+
Number of variables.
|
96
|
+
|
97
|
+
Returns
|
98
|
+
-------
|
99
|
+
int
|
100
|
+
Number of variables.
|
101
|
+
"""
|
102
|
+
return self.xpt.shape[0]
|
103
|
+
|
104
|
+
@property
|
105
|
+
def npt(self):
|
106
|
+
"""
|
107
|
+
Number of interpolation points.
|
108
|
+
|
109
|
+
Returns
|
110
|
+
-------
|
111
|
+
int
|
112
|
+
Number of interpolation points.
|
113
|
+
"""
|
114
|
+
return self.xpt.shape[1]
|
115
|
+
|
116
|
+
@property
|
117
|
+
def xpt(self):
|
118
|
+
"""
|
119
|
+
Interpolation points.
|
120
|
+
|
121
|
+
Returns
|
122
|
+
-------
|
123
|
+
`numpy.ndarray`, shape (n, npt)
|
124
|
+
Interpolation points.
|
125
|
+
"""
|
126
|
+
return self._xpt
|
127
|
+
|
128
|
+
@xpt.setter
|
129
|
+
def xpt(self, xpt):
|
130
|
+
"""
|
131
|
+
Set the interpolation points.
|
132
|
+
|
133
|
+
Parameters
|
134
|
+
----------
|
135
|
+
xpt : `numpy.ndarray`, shape (n, npt)
|
136
|
+
New interpolation points.
|
137
|
+
"""
|
138
|
+
if self._debug:
|
139
|
+
assert xpt.shape == (
|
140
|
+
self.n,
|
141
|
+
self.npt,
|
142
|
+
), "The shape of `xpt` is not valid."
|
143
|
+
self._xpt = xpt
|
144
|
+
|
145
|
+
@property
|
146
|
+
def x_base(self):
|
147
|
+
"""
|
148
|
+
Base point around which the models are expanded.
|
149
|
+
|
150
|
+
Returns
|
151
|
+
-------
|
152
|
+
`numpy.ndarray`, shape (n,)
|
153
|
+
Base point around which the models are expanded.
|
154
|
+
"""
|
155
|
+
return self._x_base
|
156
|
+
|
157
|
+
@x_base.setter
|
158
|
+
def x_base(self, x_base):
|
159
|
+
"""
|
160
|
+
Set the base point around which the models are expanded.
|
161
|
+
|
162
|
+
Parameters
|
163
|
+
----------
|
164
|
+
x_base : `numpy.ndarray`, shape (n,)
|
165
|
+
New base point around which the models are expanded.
|
166
|
+
"""
|
167
|
+
if self._debug:
|
168
|
+
assert x_base.shape == (
|
169
|
+
self.n,
|
170
|
+
), "The shape of `x_base` is not valid."
|
171
|
+
self._x_base = x_base
|
172
|
+
|
173
|
+
def point(self, k):
|
174
|
+
"""
|
175
|
+
Get the `k`-th interpolation point.
|
176
|
+
|
177
|
+
The return point is relative to the origin.
|
178
|
+
|
179
|
+
Parameters
|
180
|
+
----------
|
181
|
+
k : int
|
182
|
+
Index of the interpolation point.
|
183
|
+
|
184
|
+
Returns
|
185
|
+
-------
|
186
|
+
`numpy.ndarray`, shape (n,)
|
187
|
+
`k`-th interpolation point.
|
188
|
+
"""
|
189
|
+
if self._debug:
|
190
|
+
assert 0 <= k < self.npt, "The index `k` is not valid."
|
191
|
+
return self.x_base + self.xpt[:, k]
|
192
|
+
|
193
|
+
|
194
|
+
_cache = {"xpt": None, "a": None, "right_scaling": None, "eigh": None}
|
195
|
+
|
196
|
+
|
197
|
+
def build_system(interpolation):
|
198
|
+
"""
|
199
|
+
Build the left-hand side matrix of the interpolation system. The
|
200
|
+
matrix below stores W * diag(right_scaling),
|
201
|
+
where W is the theoretical matrix of the interpolation system. The
|
202
|
+
right scaling matrices is chosen to keep the elements in
|
203
|
+
the matrix well-balanced.
|
204
|
+
|
205
|
+
Parameters
|
206
|
+
----------
|
207
|
+
interpolation : `cobyqa.models.Interpolation`
|
208
|
+
Interpolation set.
|
209
|
+
"""
|
210
|
+
|
211
|
+
# Compute the scaled directions from the base point to the
|
212
|
+
# interpolation points. We scale the directions to avoid numerical
|
213
|
+
# difficulties.
|
214
|
+
if _cache["xpt"] is not None and np.array_equal(
|
215
|
+
interpolation.xpt, _cache["xpt"]
|
216
|
+
):
|
217
|
+
return _cache["a"], _cache["right_scaling"], _cache["eigh"]
|
218
|
+
|
219
|
+
scale = np.max(np.linalg.norm(interpolation.xpt, axis=0), initial=EPS)
|
220
|
+
xpt_scale = interpolation.xpt / scale
|
221
|
+
|
222
|
+
n, npt = xpt_scale.shape
|
223
|
+
a = np.zeros((npt + n + 1, npt + n + 1))
|
224
|
+
a[:npt, :npt] = 0.5 * (xpt_scale.T @ xpt_scale) ** 2.0
|
225
|
+
a[:npt, npt] = 1.0
|
226
|
+
a[:npt, npt + 1:] = xpt_scale.T
|
227
|
+
a[npt, :npt] = 1.0
|
228
|
+
a[npt + 1:, :npt] = xpt_scale
|
229
|
+
|
230
|
+
# Build the left and right scaling diagonal matrices.
|
231
|
+
right_scaling = np.empty(npt + n + 1)
|
232
|
+
right_scaling[:npt] = 1.0 / scale**2.0
|
233
|
+
right_scaling[npt] = scale**2.0
|
234
|
+
right_scaling[npt + 1:] = scale
|
235
|
+
|
236
|
+
eig_values, eig_vectors = eigh(a, check_finite=False)
|
237
|
+
|
238
|
+
_cache["xpt"] = np.copy(interpolation.xpt)
|
239
|
+
_cache["a"] = np.copy(a)
|
240
|
+
_cache["right_scaling"] = np.copy(right_scaling)
|
241
|
+
_cache["eigh"] = (eig_values, eig_vectors)
|
242
|
+
|
243
|
+
return a, right_scaling, (eig_values, eig_vectors)
|
244
|
+
|
245
|
+
|
246
|
+
class Quadratic:
|
247
|
+
"""
|
248
|
+
Quadratic model.
|
249
|
+
|
250
|
+
This class stores the Hessian matrix of the quadratic model using the
|
251
|
+
implicit/explicit representation designed by Powell for NEWUOA [1]_.
|
252
|
+
|
253
|
+
References
|
254
|
+
----------
|
255
|
+
.. [1] M. J. D. Powell. The NEWUOA software for unconstrained optimization
|
256
|
+
without derivatives. In G. Di Pillo and M. Roma, editors, *Large-Scale
|
257
|
+
Nonlinear Optimization*, volume 83 of Nonconvex Optim. Appl., pages
|
258
|
+
255--297. Springer, Boston, MA, USA, 2006. `doi:10.1007/0-387-30065-1_16
|
259
|
+
<https://doi.org/10.1007/0-387-30065-1_16>`_.
|
260
|
+
"""
|
261
|
+
|
262
|
+
def __init__(self, interpolation, values, debug):
|
263
|
+
"""
|
264
|
+
Initialize the quadratic model.
|
265
|
+
|
266
|
+
Parameters
|
267
|
+
----------
|
268
|
+
interpolation : `cobyqa.models.Interpolation`
|
269
|
+
Interpolation set.
|
270
|
+
values : `numpy.ndarray`, shape (npt,)
|
271
|
+
Values of the interpolated function at the interpolation points.
|
272
|
+
debug : bool
|
273
|
+
Whether to make debugging tests during the execution.
|
274
|
+
|
275
|
+
Raises
|
276
|
+
------
|
277
|
+
`numpy.linalg.LinAlgError`
|
278
|
+
If the interpolation system is ill-defined.
|
279
|
+
"""
|
280
|
+
self._debug = debug
|
281
|
+
if self._debug:
|
282
|
+
assert values.shape == (
|
283
|
+
interpolation.npt,
|
284
|
+
), "The shape of `values` is not valid."
|
285
|
+
if interpolation.npt < interpolation.n + 1:
|
286
|
+
raise ValueError(
|
287
|
+
f"The number of interpolation points must be at least "
|
288
|
+
f"{interpolation.n + 1}."
|
289
|
+
)
|
290
|
+
self._const, self._grad, self._i_hess, _ = self._get_model(
|
291
|
+
interpolation,
|
292
|
+
values,
|
293
|
+
)
|
294
|
+
self._e_hess = np.zeros((self.n, self.n))
|
295
|
+
|
296
|
+
def __call__(self, x, interpolation):
|
297
|
+
"""
|
298
|
+
Evaluate the quadratic model at a given point.
|
299
|
+
|
300
|
+
Parameters
|
301
|
+
----------
|
302
|
+
x : `numpy.ndarray`, shape (n,)
|
303
|
+
Point at which the quadratic model is evaluated.
|
304
|
+
interpolation : `cobyqa.models.Interpolation`
|
305
|
+
Interpolation set.
|
306
|
+
|
307
|
+
Returns
|
308
|
+
-------
|
309
|
+
float
|
310
|
+
Value of the quadratic model at `x`.
|
311
|
+
"""
|
312
|
+
if self._debug:
|
313
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
314
|
+
x_diff = x - interpolation.x_base
|
315
|
+
return (
|
316
|
+
self._const
|
317
|
+
+ self._grad @ x_diff
|
318
|
+
+ 0.5
|
319
|
+
* (
|
320
|
+
self._i_hess @ (interpolation.xpt.T @ x_diff) ** 2.0
|
321
|
+
+ x_diff @ self._e_hess @ x_diff
|
322
|
+
)
|
323
|
+
)
|
324
|
+
|
325
|
+
@property
|
326
|
+
def n(self):
|
327
|
+
"""
|
328
|
+
Number of variables.
|
329
|
+
|
330
|
+
Returns
|
331
|
+
-------
|
332
|
+
int
|
333
|
+
Number of variables.
|
334
|
+
"""
|
335
|
+
return self._grad.size
|
336
|
+
|
337
|
+
@property
|
338
|
+
def npt(self):
|
339
|
+
"""
|
340
|
+
Number of interpolation points used to define the quadratic model.
|
341
|
+
|
342
|
+
Returns
|
343
|
+
-------
|
344
|
+
int
|
345
|
+
Number of interpolation points used to define the quadratic model.
|
346
|
+
"""
|
347
|
+
return self._i_hess.size
|
348
|
+
|
349
|
+
def grad(self, x, interpolation):
|
350
|
+
"""
|
351
|
+
Evaluate the gradient of the quadratic model at a given point.
|
352
|
+
|
353
|
+
Parameters
|
354
|
+
----------
|
355
|
+
x : `numpy.ndarray`, shape (n,)
|
356
|
+
Point at which the gradient of the quadratic model is evaluated.
|
357
|
+
interpolation : `cobyqa.models.Interpolation`
|
358
|
+
Interpolation set.
|
359
|
+
|
360
|
+
Returns
|
361
|
+
-------
|
362
|
+
`numpy.ndarray`, shape (n,)
|
363
|
+
Gradient of the quadratic model at `x`.
|
364
|
+
"""
|
365
|
+
if self._debug:
|
366
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
367
|
+
x_diff = x - interpolation.x_base
|
368
|
+
return self._grad + self.hess_prod(x_diff, interpolation)
|
369
|
+
|
370
|
+
def hess(self, interpolation):
|
371
|
+
"""
|
372
|
+
Evaluate the Hessian matrix of the quadratic model.
|
373
|
+
|
374
|
+
Parameters
|
375
|
+
----------
|
376
|
+
interpolation : `cobyqa.models.Interpolation`
|
377
|
+
Interpolation set.
|
378
|
+
|
379
|
+
Returns
|
380
|
+
-------
|
381
|
+
`numpy.ndarray`, shape (n, n)
|
382
|
+
Hessian matrix of the quadratic model.
|
383
|
+
"""
|
384
|
+
return self._e_hess + interpolation.xpt @ (
|
385
|
+
self._i_hess[:, np.newaxis] * interpolation.xpt.T
|
386
|
+
)
|
387
|
+
|
388
|
+
def hess_prod(self, v, interpolation):
|
389
|
+
"""
|
390
|
+
Evaluate the right product of the Hessian matrix of the quadratic model
|
391
|
+
with a given vector.
|
392
|
+
|
393
|
+
Parameters
|
394
|
+
----------
|
395
|
+
v : `numpy.ndarray`, shape (n,)
|
396
|
+
Vector with which the Hessian matrix of the quadratic model is
|
397
|
+
multiplied from the right.
|
398
|
+
interpolation : `cobyqa.models.Interpolation`
|
399
|
+
Interpolation set.
|
400
|
+
|
401
|
+
Returns
|
402
|
+
-------
|
403
|
+
`numpy.ndarray`, shape (n,)
|
404
|
+
Right product of the Hessian matrix of the quadratic model with
|
405
|
+
`v`.
|
406
|
+
"""
|
407
|
+
if self._debug:
|
408
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
409
|
+
return self._e_hess @ v + interpolation.xpt @ (
|
410
|
+
self._i_hess * (interpolation.xpt.T @ v)
|
411
|
+
)
|
412
|
+
|
413
|
+
def curv(self, v, interpolation):
|
414
|
+
"""
|
415
|
+
Evaluate the curvature of the quadratic model along a given direction.
|
416
|
+
|
417
|
+
Parameters
|
418
|
+
----------
|
419
|
+
v : `numpy.ndarray`, shape (n,)
|
420
|
+
Direction along which the curvature of the quadratic model is
|
421
|
+
evaluated.
|
422
|
+
interpolation : `cobyqa.models.Interpolation`
|
423
|
+
Interpolation set.
|
424
|
+
|
425
|
+
Returns
|
426
|
+
-------
|
427
|
+
float
|
428
|
+
Curvature of the quadratic model along `v`.
|
429
|
+
"""
|
430
|
+
if self._debug:
|
431
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
432
|
+
return (
|
433
|
+
v @ self._e_hess @ v
|
434
|
+
+ self._i_hess @ (interpolation.xpt.T @ v) ** 2.0
|
435
|
+
)
|
436
|
+
|
437
|
+
def update(self, interpolation, k_new, dir_old, values_diff):
|
438
|
+
"""
|
439
|
+
Update the quadratic model.
|
440
|
+
|
441
|
+
This method applies the derivative-free symmetric Broyden update to the
|
442
|
+
quadratic model. The `knew`-th interpolation point must be updated
|
443
|
+
before calling this method.
|
444
|
+
|
445
|
+
Parameters
|
446
|
+
----------
|
447
|
+
interpolation : `cobyqa.models.Interpolation`
|
448
|
+
Updated interpolation set.
|
449
|
+
k_new : int
|
450
|
+
Index of the updated interpolation point.
|
451
|
+
dir_old : `numpy.ndarray`, shape (n,)
|
452
|
+
Value of ``interpolation.xpt[:, k_new]`` before the update.
|
453
|
+
values_diff : `numpy.ndarray`, shape (npt,)
|
454
|
+
Differences between the values of the interpolated nonlinear
|
455
|
+
function and the previous quadratic model at the updated
|
456
|
+
interpolation points.
|
457
|
+
|
458
|
+
Raises
|
459
|
+
------
|
460
|
+
`numpy.linalg.LinAlgError`
|
461
|
+
If the interpolation system is ill-defined.
|
462
|
+
"""
|
463
|
+
if self._debug:
|
464
|
+
assert 0 <= k_new < self.npt, "The index `k_new` is not valid."
|
465
|
+
assert dir_old.shape == (
|
466
|
+
self.n,
|
467
|
+
), "The shape of `dir_old` is not valid."
|
468
|
+
assert values_diff.shape == (
|
469
|
+
self.npt,
|
470
|
+
), "The shape of `values_diff` is not valid."
|
471
|
+
|
472
|
+
# Forward the k_new-th element of the implicit Hessian matrix to the
|
473
|
+
# explicit Hessian matrix. This must be done because the implicit
|
474
|
+
# Hessian matrix is related to the interpolation points, and the
|
475
|
+
# k_new-th interpolation point is modified.
|
476
|
+
self._e_hess += self._i_hess[k_new] * np.outer(dir_old, dir_old)
|
477
|
+
self._i_hess[k_new] = 0.0
|
478
|
+
|
479
|
+
# Update the quadratic model.
|
480
|
+
const, grad, i_hess, ill_conditioned = self._get_model(
|
481
|
+
interpolation,
|
482
|
+
values_diff,
|
483
|
+
)
|
484
|
+
self._const += const
|
485
|
+
self._grad += grad
|
486
|
+
self._i_hess += i_hess
|
487
|
+
return ill_conditioned
|
488
|
+
|
489
|
+
def shift_x_base(self, interpolation, new_x_base):
|
490
|
+
"""
|
491
|
+
Shift the point around which the quadratic model is defined.
|
492
|
+
|
493
|
+
Parameters
|
494
|
+
----------
|
495
|
+
interpolation : `cobyqa.models.Interpolation`
|
496
|
+
Previous interpolation set.
|
497
|
+
new_x_base : `numpy.ndarray`, shape (n,)
|
498
|
+
Point that will replace ``interpolation.x_base``.
|
499
|
+
"""
|
500
|
+
if self._debug:
|
501
|
+
assert new_x_base.shape == (
|
502
|
+
self.n,
|
503
|
+
), "The shape of `new_x_base` is not valid."
|
504
|
+
self._const = self(new_x_base, interpolation)
|
505
|
+
self._grad = self.grad(new_x_base, interpolation)
|
506
|
+
shift = new_x_base - interpolation.x_base
|
507
|
+
update = np.outer(
|
508
|
+
shift,
|
509
|
+
(interpolation.xpt - 0.5 * shift[:, np.newaxis]) @ self._i_hess,
|
510
|
+
)
|
511
|
+
self._e_hess += update + update.T
|
512
|
+
|
513
|
+
@staticmethod
|
514
|
+
def solve_systems(interpolation, rhs):
|
515
|
+
"""
|
516
|
+
Solve the interpolation systems.
|
517
|
+
|
518
|
+
Parameters
|
519
|
+
----------
|
520
|
+
interpolation : `cobyqa.models.Interpolation`
|
521
|
+
Interpolation set.
|
522
|
+
rhs : `numpy.ndarray`, shape (npt + n + 1, m)
|
523
|
+
Right-hand side vectors of the ``m`` interpolation systems.
|
524
|
+
|
525
|
+
Returns
|
526
|
+
-------
|
527
|
+
`numpy.ndarray`, shape (npt + n + 1, m)
|
528
|
+
Solutions of the interpolation systems.
|
529
|
+
`numpy.ndarray`, shape (m, )
|
530
|
+
Whether the interpolation systems are ill-conditioned.
|
531
|
+
|
532
|
+
Raises
|
533
|
+
------
|
534
|
+
`numpy.linalg.LinAlgError`
|
535
|
+
If the interpolation systems are ill-defined.
|
536
|
+
"""
|
537
|
+
n, npt = interpolation.xpt.shape
|
538
|
+
assert (
|
539
|
+
rhs.ndim == 2 and rhs.shape[0] == npt + n + 1
|
540
|
+
), "The shape of `rhs` is not valid."
|
541
|
+
|
542
|
+
# Build the left-hand side matrix of the interpolation system. The
|
543
|
+
# matrix below stores diag(left_scaling) * W * diag(right_scaling),
|
544
|
+
# where W is the theoretical matrix of the interpolation system. The
|
545
|
+
# left and right scaling matrices are chosen to keep the elements in
|
546
|
+
# the matrix well-balanced.
|
547
|
+
a, right_scaling, eig = build_system(interpolation)
|
548
|
+
|
549
|
+
# Build the solution. After a discussion with Mike Saunders and Alexis
|
550
|
+
# Montoison during their visit to the Hong Kong Polytechnic University
|
551
|
+
# in 2024, we decided to use the eigendecomposition of the symmetric
|
552
|
+
# matrix a. This is more stable than the previously employed LBL
|
553
|
+
# decomposition, and allows us to directly detect ill-conditioning of
|
554
|
+
# the system and to build the least-squares solution if necessary.
|
555
|
+
# Numerical experiments have shown that this strategy improves the
|
556
|
+
# performance of the solver.
|
557
|
+
rhs_scaled = rhs * right_scaling[:, np.newaxis]
|
558
|
+
if not (np.all(np.isfinite(a)) and np.all(np.isfinite(rhs_scaled))):
|
559
|
+
raise np.linalg.LinAlgError(
|
560
|
+
"The interpolation system is ill-defined."
|
561
|
+
)
|
562
|
+
|
563
|
+
# calculated in build_system
|
564
|
+
eig_values, eig_vectors = eig
|
565
|
+
|
566
|
+
large_eig_values = np.abs(eig_values) > EPS
|
567
|
+
eig_vectors = eig_vectors[:, large_eig_values]
|
568
|
+
inv_eig_values = 1.0 / eig_values[large_eig_values]
|
569
|
+
ill_conditioned = ~np.all(large_eig_values, 0)
|
570
|
+
left_scaled_solutions = eig_vectors @ (
|
571
|
+
(eig_vectors.T @ rhs_scaled) * inv_eig_values[:, np.newaxis]
|
572
|
+
)
|
573
|
+
return (
|
574
|
+
left_scaled_solutions * right_scaling[:, np.newaxis],
|
575
|
+
ill_conditioned,
|
576
|
+
)
|
577
|
+
|
578
|
+
@staticmethod
|
579
|
+
def _get_model(interpolation, values):
|
580
|
+
"""
|
581
|
+
Solve the interpolation system.
|
582
|
+
|
583
|
+
Parameters
|
584
|
+
----------
|
585
|
+
interpolation : `cobyqa.models.Interpolation`
|
586
|
+
Interpolation set.
|
587
|
+
values : `numpy.ndarray`, shape (npt,)
|
588
|
+
Values of the interpolated function at the interpolation points.
|
589
|
+
|
590
|
+
Returns
|
591
|
+
-------
|
592
|
+
float
|
593
|
+
Constant term of the quadratic model.
|
594
|
+
`numpy.ndarray`, shape (n,)
|
595
|
+
Gradient of the quadratic model at ``interpolation.x_base``.
|
596
|
+
`numpy.ndarray`, shape (npt,)
|
597
|
+
Implicit Hessian matrix of the quadratic model.
|
598
|
+
|
599
|
+
Raises
|
600
|
+
------
|
601
|
+
`numpy.linalg.LinAlgError`
|
602
|
+
If the interpolation system is ill-defined.
|
603
|
+
"""
|
604
|
+
assert values.shape == (
|
605
|
+
interpolation.npt,
|
606
|
+
), "The shape of `values` is not valid."
|
607
|
+
n, npt = interpolation.xpt.shape
|
608
|
+
x, ill_conditioned = Quadratic.solve_systems(
|
609
|
+
interpolation,
|
610
|
+
np.block(
|
611
|
+
[
|
612
|
+
[
|
613
|
+
values,
|
614
|
+
np.zeros(n + 1),
|
615
|
+
]
|
616
|
+
]
|
617
|
+
).T,
|
618
|
+
)
|
619
|
+
return x[npt, 0], x[npt + 1:, 0], x[:npt, 0], ill_conditioned
|
620
|
+
|
621
|
+
|
622
|
+
class Models:
|
623
|
+
"""
|
624
|
+
Models for a nonlinear optimization problem.
|
625
|
+
"""
|
626
|
+
|
627
|
+
def __init__(self, pb, options, penalty):
|
628
|
+
"""
|
629
|
+
Initialize the models.
|
630
|
+
|
631
|
+
Parameters
|
632
|
+
----------
|
633
|
+
pb : `cobyqa.problem.Problem`
|
634
|
+
Problem to be solved.
|
635
|
+
options : dict
|
636
|
+
Options of the solver.
|
637
|
+
penalty : float
|
638
|
+
Penalty parameter used to select the point in the filter to forward
|
639
|
+
to the callback function.
|
640
|
+
|
641
|
+
Raises
|
642
|
+
------
|
643
|
+
`cobyqa.utils.MaxEvalError`
|
644
|
+
If the maximum number of evaluations is reached.
|
645
|
+
`cobyqa.utils.TargetSuccess`
|
646
|
+
If a nearly feasible point has been found with an objective
|
647
|
+
function value below the target.
|
648
|
+
`cobyqa.utils.FeasibleSuccess`
|
649
|
+
If a feasible point has been found for a feasibility problem.
|
650
|
+
`numpy.linalg.LinAlgError`
|
651
|
+
If the interpolation system is ill-defined.
|
652
|
+
"""
|
653
|
+
# Set the initial interpolation set.
|
654
|
+
self._debug = options[Options.DEBUG]
|
655
|
+
self._interpolation = Interpolation(pb, options)
|
656
|
+
|
657
|
+
# Evaluate the nonlinear functions at the initial interpolation points.
|
658
|
+
x_eval = self.interpolation.point(0)
|
659
|
+
fun_init, cub_init, ceq_init = pb(x_eval, penalty)
|
660
|
+
self._fun_val = np.full(options[Options.NPT], np.nan)
|
661
|
+
self._cub_val = np.full((options[Options.NPT], cub_init.size), np.nan)
|
662
|
+
self._ceq_val = np.full((options[Options.NPT], ceq_init.size), np.nan)
|
663
|
+
for k in range(options[Options.NPT]):
|
664
|
+
if k >= options[Options.MAX_EVAL]:
|
665
|
+
raise MaxEvalError
|
666
|
+
if k == 0:
|
667
|
+
self.fun_val[k] = fun_init
|
668
|
+
self.cub_val[k, :] = cub_init
|
669
|
+
self.ceq_val[k, :] = ceq_init
|
670
|
+
else:
|
671
|
+
x_eval = self.interpolation.point(k)
|
672
|
+
self.fun_val[k], self.cub_val[k, :], self.ceq_val[k, :] = pb(
|
673
|
+
x_eval,
|
674
|
+
penalty,
|
675
|
+
)
|
676
|
+
|
677
|
+
# Stop the iterations if the problem is a feasibility problem and
|
678
|
+
# the current interpolation point is feasible.
|
679
|
+
if (
|
680
|
+
pb.is_feasibility
|
681
|
+
and pb.maxcv(
|
682
|
+
self.interpolation.point(k),
|
683
|
+
self.cub_val[k, :],
|
684
|
+
self.ceq_val[k, :],
|
685
|
+
)
|
686
|
+
<= options[Options.FEASIBILITY_TOL]
|
687
|
+
):
|
688
|
+
raise FeasibleSuccess
|
689
|
+
|
690
|
+
# Stop the iterations if the current interpolation point is nearly
|
691
|
+
# feasible and has an objective function value below the target.
|
692
|
+
if (
|
693
|
+
self._fun_val[k] <= options[Options.TARGET]
|
694
|
+
and pb.maxcv(
|
695
|
+
self.interpolation.point(k),
|
696
|
+
self.cub_val[k, :],
|
697
|
+
self.ceq_val[k, :],
|
698
|
+
)
|
699
|
+
<= options[Options.FEASIBILITY_TOL]
|
700
|
+
):
|
701
|
+
raise TargetSuccess
|
702
|
+
|
703
|
+
# Build the initial quadratic models.
|
704
|
+
self._fun = Quadratic(
|
705
|
+
self.interpolation,
|
706
|
+
self._fun_val,
|
707
|
+
options[Options.DEBUG],
|
708
|
+
)
|
709
|
+
self._cub = np.empty(self.m_nonlinear_ub, dtype=Quadratic)
|
710
|
+
self._ceq = np.empty(self.m_nonlinear_eq, dtype=Quadratic)
|
711
|
+
for i in range(self.m_nonlinear_ub):
|
712
|
+
self._cub[i] = Quadratic(
|
713
|
+
self.interpolation,
|
714
|
+
self.cub_val[:, i],
|
715
|
+
options[Options.DEBUG],
|
716
|
+
)
|
717
|
+
for i in range(self.m_nonlinear_eq):
|
718
|
+
self._ceq[i] = Quadratic(
|
719
|
+
self.interpolation,
|
720
|
+
self.ceq_val[:, i],
|
721
|
+
options[Options.DEBUG],
|
722
|
+
)
|
723
|
+
if self._debug:
|
724
|
+
self._check_interpolation_conditions()
|
725
|
+
|
726
|
+
@property
|
727
|
+
def n(self):
|
728
|
+
"""
|
729
|
+
Dimension of the problem.
|
730
|
+
|
731
|
+
Returns
|
732
|
+
-------
|
733
|
+
int
|
734
|
+
Dimension of the problem.
|
735
|
+
"""
|
736
|
+
return self.interpolation.n
|
737
|
+
|
738
|
+
@property
|
739
|
+
def npt(self):
|
740
|
+
"""
|
741
|
+
Number of interpolation points.
|
742
|
+
|
743
|
+
Returns
|
744
|
+
-------
|
745
|
+
int
|
746
|
+
Number of interpolation points.
|
747
|
+
"""
|
748
|
+
return self.interpolation.npt
|
749
|
+
|
750
|
+
@property
|
751
|
+
def m_nonlinear_ub(self):
|
752
|
+
"""
|
753
|
+
Number of nonlinear inequality constraints.
|
754
|
+
|
755
|
+
Returns
|
756
|
+
-------
|
757
|
+
int
|
758
|
+
Number of nonlinear inequality constraints.
|
759
|
+
"""
|
760
|
+
return self.cub_val.shape[1]
|
761
|
+
|
762
|
+
@property
|
763
|
+
def m_nonlinear_eq(self):
|
764
|
+
"""
|
765
|
+
Number of nonlinear equality constraints.
|
766
|
+
|
767
|
+
Returns
|
768
|
+
-------
|
769
|
+
int
|
770
|
+
Number of nonlinear equality constraints.
|
771
|
+
"""
|
772
|
+
return self.ceq_val.shape[1]
|
773
|
+
|
774
|
+
@property
|
775
|
+
def interpolation(self):
|
776
|
+
"""
|
777
|
+
Interpolation set.
|
778
|
+
|
779
|
+
Returns
|
780
|
+
-------
|
781
|
+
`cobyqa.models.Interpolation`
|
782
|
+
Interpolation set.
|
783
|
+
"""
|
784
|
+
return self._interpolation
|
785
|
+
|
786
|
+
@property
|
787
|
+
def fun_val(self):
|
788
|
+
"""
|
789
|
+
Values of the objective function at the interpolation points.
|
790
|
+
|
791
|
+
Returns
|
792
|
+
-------
|
793
|
+
`numpy.ndarray`, shape (npt,)
|
794
|
+
Values of the objective function at the interpolation points.
|
795
|
+
"""
|
796
|
+
return self._fun_val
|
797
|
+
|
798
|
+
@property
|
799
|
+
def cub_val(self):
|
800
|
+
"""
|
801
|
+
Values of the nonlinear inequality constraint functions at the
|
802
|
+
interpolation points.
|
803
|
+
|
804
|
+
Returns
|
805
|
+
-------
|
806
|
+
`numpy.ndarray`, shape (npt, m_nonlinear_ub)
|
807
|
+
Values of the nonlinear inequality constraint functions at the
|
808
|
+
interpolation points.
|
809
|
+
"""
|
810
|
+
return self._cub_val
|
811
|
+
|
812
|
+
@property
|
813
|
+
def ceq_val(self):
|
814
|
+
"""
|
815
|
+
Values of the nonlinear equality constraint functions at the
|
816
|
+
interpolation points.
|
817
|
+
|
818
|
+
Returns
|
819
|
+
-------
|
820
|
+
`numpy.ndarray`, shape (npt, m_nonlinear_eq)
|
821
|
+
Values of the nonlinear equality constraint functions at the
|
822
|
+
interpolation points.
|
823
|
+
"""
|
824
|
+
return self._ceq_val
|
825
|
+
|
826
|
+
def fun(self, x):
|
827
|
+
"""
|
828
|
+
Evaluate the quadratic model of the objective function at a given
|
829
|
+
point.
|
830
|
+
|
831
|
+
Parameters
|
832
|
+
----------
|
833
|
+
x : `numpy.ndarray`, shape (n,)
|
834
|
+
Point at which to evaluate the quadratic model of the objective
|
835
|
+
function.
|
836
|
+
|
837
|
+
Returns
|
838
|
+
-------
|
839
|
+
float
|
840
|
+
Value of the quadratic model of the objective function at `x`.
|
841
|
+
"""
|
842
|
+
if self._debug:
|
843
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
844
|
+
return self._fun(x, self.interpolation)
|
845
|
+
|
846
|
+
def fun_grad(self, x):
|
847
|
+
"""
|
848
|
+
Evaluate the gradient of the quadratic model of the objective function
|
849
|
+
at a given point.
|
850
|
+
|
851
|
+
Parameters
|
852
|
+
----------
|
853
|
+
x : `numpy.ndarray`, shape (n,)
|
854
|
+
Point at which to evaluate the gradient of the quadratic model of
|
855
|
+
the objective function.
|
856
|
+
|
857
|
+
Returns
|
858
|
+
-------
|
859
|
+
`numpy.ndarray`, shape (n,)
|
860
|
+
Gradient of the quadratic model of the objective function at `x`.
|
861
|
+
"""
|
862
|
+
if self._debug:
|
863
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
864
|
+
return self._fun.grad(x, self.interpolation)
|
865
|
+
|
866
|
+
def fun_hess(self):
|
867
|
+
"""
|
868
|
+
Evaluate the Hessian matrix of the quadratic model of the objective
|
869
|
+
function.
|
870
|
+
|
871
|
+
Returns
|
872
|
+
-------
|
873
|
+
`numpy.ndarray`, shape (n, n)
|
874
|
+
Hessian matrix of the quadratic model of the objective function.
|
875
|
+
"""
|
876
|
+
return self._fun.hess(self.interpolation)
|
877
|
+
|
878
|
+
def fun_hess_prod(self, v):
|
879
|
+
"""
|
880
|
+
Evaluate the right product of the Hessian matrix of the quadratic model
|
881
|
+
of the objective function with a given vector.
|
882
|
+
|
883
|
+
Parameters
|
884
|
+
----------
|
885
|
+
v : `numpy.ndarray`, shape (n,)
|
886
|
+
Vector with which the Hessian matrix of the quadratic model of the
|
887
|
+
objective function is multiplied from the right.
|
888
|
+
|
889
|
+
Returns
|
890
|
+
-------
|
891
|
+
`numpy.ndarray`, shape (n,)
|
892
|
+
Right product of the Hessian matrix of the quadratic model of the
|
893
|
+
objective function with `v`.
|
894
|
+
"""
|
895
|
+
if self._debug:
|
896
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
897
|
+
return self._fun.hess_prod(v, self.interpolation)
|
898
|
+
|
899
|
+
def fun_curv(self, v):
|
900
|
+
"""
|
901
|
+
Evaluate the curvature of the quadratic model of the objective function
|
902
|
+
along a given direction.
|
903
|
+
|
904
|
+
Parameters
|
905
|
+
----------
|
906
|
+
v : `numpy.ndarray`, shape (n,)
|
907
|
+
Direction along which the curvature of the quadratic model of the
|
908
|
+
objective function is evaluated.
|
909
|
+
|
910
|
+
Returns
|
911
|
+
-------
|
912
|
+
float
|
913
|
+
Curvature of the quadratic model of the objective function along
|
914
|
+
`v`.
|
915
|
+
"""
|
916
|
+
if self._debug:
|
917
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
918
|
+
return self._fun.curv(v, self.interpolation)
|
919
|
+
|
920
|
+
def fun_alt_grad(self, x):
|
921
|
+
"""
|
922
|
+
Evaluate the gradient of the alternative quadratic model of the
|
923
|
+
objective function at a given point.
|
924
|
+
|
925
|
+
Parameters
|
926
|
+
----------
|
927
|
+
x : `numpy.ndarray`, shape (n,)
|
928
|
+
Point at which to evaluate the gradient of the alternative
|
929
|
+
quadratic model of the objective function.
|
930
|
+
|
931
|
+
Returns
|
932
|
+
-------
|
933
|
+
`numpy.ndarray`, shape (n,)
|
934
|
+
Gradient of the alternative quadratic model of the objective
|
935
|
+
function at `x`.
|
936
|
+
|
937
|
+
Raises
|
938
|
+
------
|
939
|
+
`numpy.linalg.LinAlgError`
|
940
|
+
If the interpolation system is ill-defined.
|
941
|
+
"""
|
942
|
+
if self._debug:
|
943
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
944
|
+
model = Quadratic(self.interpolation, self.fun_val, self._debug)
|
945
|
+
return model.grad(x, self.interpolation)
|
946
|
+
|
947
|
+
def cub(self, x, mask=None):
|
948
|
+
"""
|
949
|
+
Evaluate the quadratic models of the nonlinear inequality functions at
|
950
|
+
a given point.
|
951
|
+
|
952
|
+
Parameters
|
953
|
+
----------
|
954
|
+
x : `numpy.ndarray`, shape (n,)
|
955
|
+
Point at which to evaluate the quadratic models of the nonlinear
|
956
|
+
inequality functions.
|
957
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_ub,), optional
|
958
|
+
Mask of the quadratic models to consider.
|
959
|
+
|
960
|
+
Returns
|
961
|
+
-------
|
962
|
+
`numpy.ndarray`
|
963
|
+
Values of the quadratic model of the nonlinear inequality
|
964
|
+
functions.
|
965
|
+
"""
|
966
|
+
if self._debug:
|
967
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
968
|
+
assert mask is None or mask.shape == (
|
969
|
+
self.m_nonlinear_ub,
|
970
|
+
), "The shape of `mask` is not valid."
|
971
|
+
return np.array(
|
972
|
+
[model(x, self.interpolation) for model in self._get_cub(mask)]
|
973
|
+
)
|
974
|
+
|
975
|
+
def cub_grad(self, x, mask=None):
|
976
|
+
"""
|
977
|
+
Evaluate the gradients of the quadratic models of the nonlinear
|
978
|
+
inequality functions at a given point.
|
979
|
+
|
980
|
+
Parameters
|
981
|
+
----------
|
982
|
+
x : `numpy.ndarray`, shape (n,)
|
983
|
+
Point at which to evaluate the gradients of the quadratic models of
|
984
|
+
the nonlinear inequality functions.
|
985
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
986
|
+
Mask of the quadratic models to consider.
|
987
|
+
|
988
|
+
Returns
|
989
|
+
-------
|
990
|
+
`numpy.ndarray`
|
991
|
+
Gradients of the quadratic model of the nonlinear inequality
|
992
|
+
functions.
|
993
|
+
"""
|
994
|
+
if self._debug:
|
995
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
996
|
+
assert mask is None or mask.shape == (
|
997
|
+
self.m_nonlinear_ub,
|
998
|
+
), "The shape of `mask` is not valid."
|
999
|
+
return np.reshape(
|
1000
|
+
[model.grad(x, self.interpolation)
|
1001
|
+
for model in self._get_cub(mask)],
|
1002
|
+
(-1, self.n),
|
1003
|
+
)
|
1004
|
+
|
1005
|
+
def cub_hess(self, mask=None):
|
1006
|
+
"""
|
1007
|
+
Evaluate the Hessian matrices of the quadratic models of the nonlinear
|
1008
|
+
inequality functions.
|
1009
|
+
|
1010
|
+
Parameters
|
1011
|
+
----------
|
1012
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_ub,), optional
|
1013
|
+
Mask of the quadratic models to consider.
|
1014
|
+
|
1015
|
+
Returns
|
1016
|
+
-------
|
1017
|
+
`numpy.ndarray`
|
1018
|
+
Hessian matrices of the quadratic models of the nonlinear
|
1019
|
+
inequality functions.
|
1020
|
+
"""
|
1021
|
+
if self._debug:
|
1022
|
+
assert mask is None or mask.shape == (
|
1023
|
+
self.m_nonlinear_ub,
|
1024
|
+
), "The shape of `mask` is not valid."
|
1025
|
+
return np.reshape(
|
1026
|
+
[model.hess(self.interpolation) for model in self._get_cub(mask)],
|
1027
|
+
(-1, self.n, self.n),
|
1028
|
+
)
|
1029
|
+
|
1030
|
+
def cub_hess_prod(self, v, mask=None):
|
1031
|
+
"""
|
1032
|
+
Evaluate the right product of the Hessian matrices of the quadratic
|
1033
|
+
models of the nonlinear inequality functions with a given vector.
|
1034
|
+
|
1035
|
+
Parameters
|
1036
|
+
----------
|
1037
|
+
v : `numpy.ndarray`, shape (n,)
|
1038
|
+
Vector with which the Hessian matrices of the quadratic models of
|
1039
|
+
the nonlinear inequality functions are multiplied from the right.
|
1040
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_ub,), optional
|
1041
|
+
Mask of the quadratic models to consider.
|
1042
|
+
|
1043
|
+
Returns
|
1044
|
+
-------
|
1045
|
+
`numpy.ndarray`
|
1046
|
+
Right products of the Hessian matrices of the quadratic models of
|
1047
|
+
the nonlinear inequality functions with `v`.
|
1048
|
+
"""
|
1049
|
+
if self._debug:
|
1050
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
1051
|
+
assert mask is None or mask.shape == (
|
1052
|
+
self.m_nonlinear_ub,
|
1053
|
+
), "The shape of `mask` is not valid."
|
1054
|
+
return np.reshape(
|
1055
|
+
[
|
1056
|
+
model.hess_prod(v, self.interpolation)
|
1057
|
+
for model in self._get_cub(mask)
|
1058
|
+
],
|
1059
|
+
(-1, self.n),
|
1060
|
+
)
|
1061
|
+
|
1062
|
+
def cub_curv(self, v, mask=None):
|
1063
|
+
"""
|
1064
|
+
Evaluate the curvature of the quadratic models of the nonlinear
|
1065
|
+
inequality functions along a given direction.
|
1066
|
+
|
1067
|
+
Parameters
|
1068
|
+
----------
|
1069
|
+
v : `numpy.ndarray`, shape (n,)
|
1070
|
+
Direction along which the curvature of the quadratic models of the
|
1071
|
+
nonlinear inequality functions is evaluated.
|
1072
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_ub,), optional
|
1073
|
+
Mask of the quadratic models to consider.
|
1074
|
+
|
1075
|
+
Returns
|
1076
|
+
-------
|
1077
|
+
`numpy.ndarray`
|
1078
|
+
Curvature of the quadratic models of the nonlinear inequality
|
1079
|
+
functions along `v`.
|
1080
|
+
"""
|
1081
|
+
if self._debug:
|
1082
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
1083
|
+
assert mask is None or mask.shape == (
|
1084
|
+
self.m_nonlinear_ub,
|
1085
|
+
), "The shape of `mask` is not valid."
|
1086
|
+
return np.array(
|
1087
|
+
[model.curv(v, self.interpolation)
|
1088
|
+
for model in self._get_cub(mask)]
|
1089
|
+
)
|
1090
|
+
|
1091
|
+
def ceq(self, x, mask=None):
|
1092
|
+
"""
|
1093
|
+
Evaluate the quadratic models of the nonlinear equality functions at a
|
1094
|
+
given point.
|
1095
|
+
|
1096
|
+
Parameters
|
1097
|
+
----------
|
1098
|
+
x : `numpy.ndarray`, shape (n,)
|
1099
|
+
Point at which to evaluate the quadratic models of the nonlinear
|
1100
|
+
equality functions.
|
1101
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1102
|
+
Mask of the quadratic models to consider.
|
1103
|
+
|
1104
|
+
Returns
|
1105
|
+
-------
|
1106
|
+
`numpy.ndarray`
|
1107
|
+
Values of the quadratic model of the nonlinear equality functions.
|
1108
|
+
"""
|
1109
|
+
if self._debug:
|
1110
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
1111
|
+
assert mask is None or mask.shape == (
|
1112
|
+
self.m_nonlinear_eq,
|
1113
|
+
), "The shape of `mask` is not valid."
|
1114
|
+
return np.array(
|
1115
|
+
[model(x, self.interpolation) for model in self._get_ceq(mask)]
|
1116
|
+
)
|
1117
|
+
|
1118
|
+
def ceq_grad(self, x, mask=None):
|
1119
|
+
"""
|
1120
|
+
Evaluate the gradients of the quadratic models of the nonlinear
|
1121
|
+
equality functions at a given point.
|
1122
|
+
|
1123
|
+
Parameters
|
1124
|
+
----------
|
1125
|
+
x : `numpy.ndarray`, shape (n,)
|
1126
|
+
Point at which to evaluate the gradients of the quadratic models of
|
1127
|
+
the nonlinear equality functions.
|
1128
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1129
|
+
Mask of the quadratic models to consider.
|
1130
|
+
|
1131
|
+
Returns
|
1132
|
+
-------
|
1133
|
+
`numpy.ndarray`
|
1134
|
+
Gradients of the quadratic model of the nonlinear equality
|
1135
|
+
functions.
|
1136
|
+
"""
|
1137
|
+
if self._debug:
|
1138
|
+
assert x.shape == (self.n,), "The shape of `x` is not valid."
|
1139
|
+
assert mask is None or mask.shape == (
|
1140
|
+
self.m_nonlinear_eq,
|
1141
|
+
), "The shape of `mask` is not valid."
|
1142
|
+
return np.reshape(
|
1143
|
+
[model.grad(x, self.interpolation)
|
1144
|
+
for model in self._get_ceq(mask)],
|
1145
|
+
(-1, self.n),
|
1146
|
+
)
|
1147
|
+
|
1148
|
+
def ceq_hess(self, mask=None):
|
1149
|
+
"""
|
1150
|
+
Evaluate the Hessian matrices of the quadratic models of the nonlinear
|
1151
|
+
equality functions.
|
1152
|
+
|
1153
|
+
Parameters
|
1154
|
+
----------
|
1155
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1156
|
+
Mask of the quadratic models to consider.
|
1157
|
+
|
1158
|
+
Returns
|
1159
|
+
-------
|
1160
|
+
`numpy.ndarray`
|
1161
|
+
Hessian matrices of the quadratic models of the nonlinear equality
|
1162
|
+
functions.
|
1163
|
+
"""
|
1164
|
+
if self._debug:
|
1165
|
+
assert mask is None or mask.shape == (
|
1166
|
+
self.m_nonlinear_eq,
|
1167
|
+
), "The shape of `mask` is not valid."
|
1168
|
+
return np.reshape(
|
1169
|
+
[model.hess(self.interpolation) for model in self._get_ceq(mask)],
|
1170
|
+
(-1, self.n, self.n),
|
1171
|
+
)
|
1172
|
+
|
1173
|
+
def ceq_hess_prod(self, v, mask=None):
|
1174
|
+
"""
|
1175
|
+
Evaluate the right product of the Hessian matrices of the quadratic
|
1176
|
+
models of the nonlinear equality functions with a given vector.
|
1177
|
+
|
1178
|
+
Parameters
|
1179
|
+
----------
|
1180
|
+
v : `numpy.ndarray`, shape (n,)
|
1181
|
+
Vector with which the Hessian matrices of the quadratic models of
|
1182
|
+
the nonlinear equality functions are multiplied from the right.
|
1183
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1184
|
+
Mask of the quadratic models to consider.
|
1185
|
+
|
1186
|
+
Returns
|
1187
|
+
-------
|
1188
|
+
`numpy.ndarray`
|
1189
|
+
Right products of the Hessian matrices of the quadratic models of
|
1190
|
+
the nonlinear equality functions with `v`.
|
1191
|
+
"""
|
1192
|
+
if self._debug:
|
1193
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
1194
|
+
assert mask is None or mask.shape == (
|
1195
|
+
self.m_nonlinear_eq,
|
1196
|
+
), "The shape of `mask` is not valid."
|
1197
|
+
return np.reshape(
|
1198
|
+
[
|
1199
|
+
model.hess_prod(v, self.interpolation)
|
1200
|
+
for model in self._get_ceq(mask)
|
1201
|
+
],
|
1202
|
+
(-1, self.n),
|
1203
|
+
)
|
1204
|
+
|
1205
|
+
def ceq_curv(self, v, mask=None):
|
1206
|
+
"""
|
1207
|
+
Evaluate the curvature of the quadratic models of the nonlinear
|
1208
|
+
equality functions along a given direction.
|
1209
|
+
|
1210
|
+
Parameters
|
1211
|
+
----------
|
1212
|
+
v : `numpy.ndarray`, shape (n,)
|
1213
|
+
Direction along which the curvature of the quadratic models of the
|
1214
|
+
nonlinear equality functions is evaluated.
|
1215
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1216
|
+
Mask of the quadratic models to consider.
|
1217
|
+
|
1218
|
+
Returns
|
1219
|
+
-------
|
1220
|
+
`numpy.ndarray`
|
1221
|
+
Curvature of the quadratic models of the nonlinear equality
|
1222
|
+
functions along `v`.
|
1223
|
+
"""
|
1224
|
+
if self._debug:
|
1225
|
+
assert v.shape == (self.n,), "The shape of `v` is not valid."
|
1226
|
+
assert mask is None or mask.shape == (
|
1227
|
+
self.m_nonlinear_eq,
|
1228
|
+
), "The shape of `mask` is not valid."
|
1229
|
+
return np.array(
|
1230
|
+
[model.curv(v, self.interpolation)
|
1231
|
+
for model in self._get_ceq(mask)]
|
1232
|
+
)
|
1233
|
+
|
1234
|
+
def reset_models(self):
|
1235
|
+
"""
|
1236
|
+
Set the quadratic models of the objective function, nonlinear
|
1237
|
+
inequality constraints, and nonlinear equality constraints to the
|
1238
|
+
alternative quadratic models.
|
1239
|
+
|
1240
|
+
Raises
|
1241
|
+
------
|
1242
|
+
`numpy.linalg.LinAlgError`
|
1243
|
+
If the interpolation system is ill-defined.
|
1244
|
+
"""
|
1245
|
+
self._fun = Quadratic(self.interpolation, self.fun_val, self._debug)
|
1246
|
+
for i in range(self.m_nonlinear_ub):
|
1247
|
+
self._cub[i] = Quadratic(
|
1248
|
+
self.interpolation,
|
1249
|
+
self.cub_val[:, i],
|
1250
|
+
self._debug,
|
1251
|
+
)
|
1252
|
+
for i in range(self.m_nonlinear_eq):
|
1253
|
+
self._ceq[i] = Quadratic(
|
1254
|
+
self.interpolation,
|
1255
|
+
self.ceq_val[:, i],
|
1256
|
+
self._debug,
|
1257
|
+
)
|
1258
|
+
if self._debug:
|
1259
|
+
self._check_interpolation_conditions()
|
1260
|
+
|
1261
|
+
def update_interpolation(self, k_new, x_new, fun_val, cub_val, ceq_val):
|
1262
|
+
"""
|
1263
|
+
Update the interpolation set.
|
1264
|
+
|
1265
|
+
This method updates the interpolation set by replacing the `knew`-th
|
1266
|
+
interpolation point with `xnew`. It also updates the function values
|
1267
|
+
and the quadratic models.
|
1268
|
+
|
1269
|
+
Parameters
|
1270
|
+
----------
|
1271
|
+
k_new : int
|
1272
|
+
Index of the updated interpolation point.
|
1273
|
+
x_new : `numpy.ndarray`, shape (n,)
|
1274
|
+
New interpolation point. Its value is interpreted as relative to
|
1275
|
+
the origin, not the base point.
|
1276
|
+
fun_val : float
|
1277
|
+
Value of the objective function at `x_new`.
|
1278
|
+
Objective function value at `x_new`.
|
1279
|
+
cub_val : `numpy.ndarray`, shape (m_nonlinear_ub,)
|
1280
|
+
Values of the nonlinear inequality constraints at `x_new`.
|
1281
|
+
ceq_val : `numpy.ndarray`, shape (m_nonlinear_eq,)
|
1282
|
+
Values of the nonlinear equality constraints at `x_new`.
|
1283
|
+
|
1284
|
+
Raises
|
1285
|
+
------
|
1286
|
+
`numpy.linalg.LinAlgError`
|
1287
|
+
If the interpolation system is ill-defined.
|
1288
|
+
"""
|
1289
|
+
if self._debug:
|
1290
|
+
assert 0 <= k_new < self.npt, "The index `k_new` is not valid."
|
1291
|
+
assert x_new.shape == (self.n,), \
|
1292
|
+
"The shape of `x_new` is not valid."
|
1293
|
+
assert isinstance(fun_val, float), \
|
1294
|
+
"The function value is not valid."
|
1295
|
+
assert cub_val.shape == (
|
1296
|
+
self.m_nonlinear_ub,
|
1297
|
+
), "The shape of `cub_val` is not valid."
|
1298
|
+
assert ceq_val.shape == (
|
1299
|
+
self.m_nonlinear_eq,
|
1300
|
+
), "The shape of `ceq_val` is not valid."
|
1301
|
+
|
1302
|
+
# Compute the updates in the interpolation conditions.
|
1303
|
+
fun_diff = np.zeros(self.npt)
|
1304
|
+
cub_diff = np.zeros(self.cub_val.shape)
|
1305
|
+
ceq_diff = np.zeros(self.ceq_val.shape)
|
1306
|
+
fun_diff[k_new] = fun_val - self.fun(x_new)
|
1307
|
+
cub_diff[k_new, :] = cub_val - self.cub(x_new)
|
1308
|
+
ceq_diff[k_new, :] = ceq_val - self.ceq(x_new)
|
1309
|
+
|
1310
|
+
# Update the function values.
|
1311
|
+
self.fun_val[k_new] = fun_val
|
1312
|
+
self.cub_val[k_new, :] = cub_val
|
1313
|
+
self.ceq_val[k_new, :] = ceq_val
|
1314
|
+
|
1315
|
+
# Update the interpolation set.
|
1316
|
+
dir_old = np.copy(self.interpolation.xpt[:, k_new])
|
1317
|
+
self.interpolation.xpt[:, k_new] = x_new - self.interpolation.x_base
|
1318
|
+
|
1319
|
+
# Update the quadratic models.
|
1320
|
+
ill_conditioned = self._fun.update(
|
1321
|
+
self.interpolation,
|
1322
|
+
k_new,
|
1323
|
+
dir_old,
|
1324
|
+
fun_diff,
|
1325
|
+
)
|
1326
|
+
for i in range(self.m_nonlinear_ub):
|
1327
|
+
ill_conditioned = ill_conditioned or self._cub[i].update(
|
1328
|
+
self.interpolation,
|
1329
|
+
k_new,
|
1330
|
+
dir_old,
|
1331
|
+
cub_diff[:, i],
|
1332
|
+
)
|
1333
|
+
for i in range(self.m_nonlinear_eq):
|
1334
|
+
ill_conditioned = ill_conditioned or self._ceq[i].update(
|
1335
|
+
self.interpolation,
|
1336
|
+
k_new,
|
1337
|
+
dir_old,
|
1338
|
+
ceq_diff[:, i],
|
1339
|
+
)
|
1340
|
+
if self._debug:
|
1341
|
+
self._check_interpolation_conditions()
|
1342
|
+
return ill_conditioned
|
1343
|
+
|
1344
|
+
def determinants(self, x_new, k_new=None):
|
1345
|
+
"""
|
1346
|
+
Compute the normalized determinants of the new interpolation systems.
|
1347
|
+
|
1348
|
+
Parameters
|
1349
|
+
----------
|
1350
|
+
x_new : `numpy.ndarray`, shape (n,)
|
1351
|
+
New interpolation point. Its value is interpreted as relative to
|
1352
|
+
the origin, not the base point.
|
1353
|
+
k_new : int, optional
|
1354
|
+
Index of the updated interpolation point. If `k_new` is not
|
1355
|
+
specified, all the possible determinants are computed.
|
1356
|
+
|
1357
|
+
Returns
|
1358
|
+
-------
|
1359
|
+
{float, `numpy.ndarray`, shape (npt,)}
|
1360
|
+
Determinant(s) of the new interpolation system.
|
1361
|
+
|
1362
|
+
Raises
|
1363
|
+
------
|
1364
|
+
`numpy.linalg.LinAlgError`
|
1365
|
+
If the interpolation system is ill-defined.
|
1366
|
+
|
1367
|
+
Notes
|
1368
|
+
-----
|
1369
|
+
The determinants are normalized by the determinant of the current
|
1370
|
+
interpolation system. For stability reasons, the calculations are done
|
1371
|
+
using the formula (2.12) in [1]_.
|
1372
|
+
|
1373
|
+
References
|
1374
|
+
----------
|
1375
|
+
.. [1] M. J. D. Powell. On updating the inverse of a KKT matrix.
|
1376
|
+
Technical Report DAMTP 2004/NA01, Department of Applied Mathematics
|
1377
|
+
and Theoretical Physics, University of Cambridge, Cambridge, UK,
|
1378
|
+
2004.
|
1379
|
+
"""
|
1380
|
+
if self._debug:
|
1381
|
+
assert x_new.shape == (self.n,), \
|
1382
|
+
"The shape of `x_new` is not valid."
|
1383
|
+
assert (
|
1384
|
+
k_new is None or 0 <= k_new < self.npt
|
1385
|
+
), "The index `k_new` is not valid."
|
1386
|
+
|
1387
|
+
# Compute the values independent of k_new.
|
1388
|
+
shift = x_new - self.interpolation.x_base
|
1389
|
+
new_col = np.empty((self.npt + self.n + 1, 1))
|
1390
|
+
new_col[: self.npt, 0] = (
|
1391
|
+
0.5 * (self.interpolation.xpt.T @ shift) ** 2.0)
|
1392
|
+
new_col[self.npt, 0] = 1.0
|
1393
|
+
new_col[self.npt + 1:, 0] = shift
|
1394
|
+
inv_new_col = Quadratic.solve_systems(self.interpolation, new_col)[0]
|
1395
|
+
beta = 0.5 * (shift @ shift) ** 2.0 - new_col[:, 0] @ inv_new_col[:, 0]
|
1396
|
+
|
1397
|
+
# Compute the values that depend on k.
|
1398
|
+
if k_new is None:
|
1399
|
+
coord_vec = np.eye(self.npt + self.n + 1, self.npt)
|
1400
|
+
alpha = np.diag(
|
1401
|
+
Quadratic.solve_systems(
|
1402
|
+
self.interpolation,
|
1403
|
+
coord_vec,
|
1404
|
+
)[0]
|
1405
|
+
)
|
1406
|
+
tau = inv_new_col[: self.npt, 0]
|
1407
|
+
else:
|
1408
|
+
coord_vec = np.eye(self.npt + self.n + 1, 1, -k_new)
|
1409
|
+
alpha = Quadratic.solve_systems(
|
1410
|
+
self.interpolation,
|
1411
|
+
coord_vec,
|
1412
|
+
)[
|
1413
|
+
0
|
1414
|
+
][k_new, 0]
|
1415
|
+
tau = inv_new_col[k_new, 0]
|
1416
|
+
return alpha * beta + tau**2.0
|
1417
|
+
|
1418
|
+
def shift_x_base(self, new_x_base, options):
|
1419
|
+
"""
|
1420
|
+
Shift the base point without changing the interpolation set.
|
1421
|
+
|
1422
|
+
Parameters
|
1423
|
+
----------
|
1424
|
+
new_x_base : `numpy.ndarray`, shape (n,)
|
1425
|
+
New base point.
|
1426
|
+
options : dict
|
1427
|
+
Options of the solver.
|
1428
|
+
"""
|
1429
|
+
if self._debug:
|
1430
|
+
assert new_x_base.shape == (
|
1431
|
+
self.n,
|
1432
|
+
), "The shape of `new_x_base` is not valid."
|
1433
|
+
|
1434
|
+
# Update the models.
|
1435
|
+
self._fun.shift_x_base(self.interpolation, new_x_base)
|
1436
|
+
for model in self._cub:
|
1437
|
+
model.shift_x_base(self.interpolation, new_x_base)
|
1438
|
+
for model in self._ceq:
|
1439
|
+
model.shift_x_base(self.interpolation, new_x_base)
|
1440
|
+
|
1441
|
+
# Update the base point and the interpolation points.
|
1442
|
+
shift = new_x_base - self.interpolation.x_base
|
1443
|
+
self.interpolation.x_base += shift
|
1444
|
+
self.interpolation.xpt -= shift[:, np.newaxis]
|
1445
|
+
if options[Options.DEBUG]:
|
1446
|
+
self._check_interpolation_conditions()
|
1447
|
+
|
1448
|
+
def _get_cub(self, mask=None):
|
1449
|
+
"""
|
1450
|
+
Get the quadratic models of the nonlinear inequality constraints.
|
1451
|
+
|
1452
|
+
Parameters
|
1453
|
+
----------
|
1454
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_ub,), optional
|
1455
|
+
Mask of the quadratic models to return.
|
1456
|
+
|
1457
|
+
Returns
|
1458
|
+
-------
|
1459
|
+
`numpy.ndarray`
|
1460
|
+
Quadratic models of the nonlinear inequality constraints.
|
1461
|
+
"""
|
1462
|
+
return self._cub if mask is None else self._cub[mask]
|
1463
|
+
|
1464
|
+
def _get_ceq(self, mask=None):
|
1465
|
+
"""
|
1466
|
+
Get the quadratic models of the nonlinear equality constraints.
|
1467
|
+
|
1468
|
+
Parameters
|
1469
|
+
----------
|
1470
|
+
mask : `numpy.ndarray`, shape (m_nonlinear_eq,), optional
|
1471
|
+
Mask of the quadratic models to return.
|
1472
|
+
|
1473
|
+
Returns
|
1474
|
+
-------
|
1475
|
+
`numpy.ndarray`
|
1476
|
+
Quadratic models of the nonlinear equality constraints.
|
1477
|
+
"""
|
1478
|
+
return self._ceq if mask is None else self._ceq[mask]
|
1479
|
+
|
1480
|
+
def _check_interpolation_conditions(self):
|
1481
|
+
"""
|
1482
|
+
Check the interpolation conditions of all quadratic models.
|
1483
|
+
"""
|
1484
|
+
error_fun = 0.0
|
1485
|
+
error_cub = 0.0
|
1486
|
+
error_ceq = 0.0
|
1487
|
+
for k in range(self.npt):
|
1488
|
+
error_fun = np.max(
|
1489
|
+
[
|
1490
|
+
error_fun,
|
1491
|
+
np.abs(
|
1492
|
+
self.fun(self.interpolation.point(k)) - self.fun_val[k]
|
1493
|
+
),
|
1494
|
+
]
|
1495
|
+
)
|
1496
|
+
error_cub = np.max(
|
1497
|
+
np.abs(
|
1498
|
+
self.cub(self.interpolation.point(k)) - self.cub_val[k, :]
|
1499
|
+
),
|
1500
|
+
initial=error_cub,
|
1501
|
+
)
|
1502
|
+
error_ceq = np.max(
|
1503
|
+
np.abs(
|
1504
|
+
self.ceq(self.interpolation.point(k)) - self.ceq_val[k, :]
|
1505
|
+
),
|
1506
|
+
initial=error_ceq,
|
1507
|
+
)
|
1508
|
+
tol = 10.0 * np.sqrt(EPS) * max(self.n, self.npt)
|
1509
|
+
if error_fun > tol * np.max(np.abs(self.fun_val), initial=1.0):
|
1510
|
+
warnings.warn(
|
1511
|
+
"The interpolation conditions for the objective function are "
|
1512
|
+
"not satisfied.",
|
1513
|
+
RuntimeWarning,
|
1514
|
+
2,
|
1515
|
+
)
|
1516
|
+
if error_cub > tol * np.max(np.abs(self.cub_val), initial=1.0):
|
1517
|
+
warnings.warn(
|
1518
|
+
"The interpolation conditions for the inequality constraint "
|
1519
|
+
"function are not satisfied.",
|
1520
|
+
RuntimeWarning,
|
1521
|
+
2,
|
1522
|
+
)
|
1523
|
+
if error_ceq > tol * np.max(np.abs(self.ceq_val), initial=1.0):
|
1524
|
+
warnings.warn(
|
1525
|
+
"The interpolation conditions for the equality constraint "
|
1526
|
+
"function are not satisfied.",
|
1527
|
+
RuntimeWarning,
|
1528
|
+
2,
|
1529
|
+
)
|