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