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,1645 @@
1
+ #
2
+ # Author: Pearu Peterson, March 2002
3
+ #
4
+ # additions by Travis Oliphant, March 2002
5
+ # additions by Eric Jones, June 2002
6
+ # additions by Johannes Loehnert, June 2006
7
+ # additions by Bart Vandereycken, June 2006
8
+ # additions by Andrew D Straw, May 2007
9
+ # additions by Tiziano Zito, November 2008
10
+ #
11
+ # April 2010: Functions for LU, QR, SVD, Schur, and Cholesky decompositions
12
+ # were moved to their own files. Still in this file are functions for
13
+ # eigenstuff and for the Hessenberg form.
14
+
15
+ __all__ = ['eig', 'eigvals', 'eigh', 'eigvalsh',
16
+ 'eig_banded', 'eigvals_banded',
17
+ 'eigh_tridiagonal', 'eigvalsh_tridiagonal', 'hessenberg', 'cdf2rdf']
18
+
19
+ import numpy as np
20
+ from numpy import (array, isfinite, inexact, nonzero, iscomplexobj,
21
+ flatnonzero, conj, asarray, argsort, empty,
22
+ iscomplex, zeros, einsum, eye, inf)
23
+ # Local imports
24
+ from scipy._lib._util import _asarray_validated, _apply_over_batch
25
+ from ._misc import LinAlgError, _datacopied, norm
26
+ from .lapack import get_lapack_funcs, _compute_lwork
27
+
28
+
29
+ _I = np.array(1j, dtype='F')
30
+
31
+
32
+ def _make_complex_eigvecs(w, vin, dtype):
33
+ """
34
+ Produce complex-valued eigenvectors from LAPACK DGGEV real-valued output
35
+ """
36
+ # - see LAPACK man page DGGEV at ALPHAI
37
+ v = np.array(vin, dtype=dtype)
38
+ m = (w.imag > 0)
39
+ m[:-1] |= (w.imag[1:] < 0) # workaround for LAPACK bug, cf. ticket #709
40
+ for i in flatnonzero(m):
41
+ v.imag[:, i] = vin[:, i+1]
42
+ conj(v[:, i], v[:, i+1])
43
+ return v
44
+
45
+
46
+ def _make_eigvals(alpha, beta, homogeneous_eigvals):
47
+ if homogeneous_eigvals:
48
+ if beta is None:
49
+ return np.vstack((alpha, np.ones_like(alpha)))
50
+ else:
51
+ return np.vstack((alpha, beta))
52
+ else:
53
+ if beta is None:
54
+ return alpha
55
+ else:
56
+ w = np.empty_like(alpha)
57
+ alpha_zero = (alpha == 0)
58
+ beta_zero = (beta == 0)
59
+ beta_nonzero = ~beta_zero
60
+ w[beta_nonzero] = alpha[beta_nonzero]/beta[beta_nonzero]
61
+ # Use np.inf for complex values too since
62
+ # 1/np.inf = 0, i.e., it correctly behaves as projective
63
+ # infinity.
64
+ w[~alpha_zero & beta_zero] = np.inf
65
+ if np.all(alpha.imag == 0):
66
+ w[alpha_zero & beta_zero] = np.nan
67
+ else:
68
+ w[alpha_zero & beta_zero] = complex(np.nan, np.nan)
69
+ return w
70
+
71
+
72
+ def _geneig(a1, b1, left, right, overwrite_a, overwrite_b,
73
+ homogeneous_eigvals):
74
+ ggev, = get_lapack_funcs(('ggev',), (a1, b1))
75
+ cvl, cvr = left, right
76
+ res = ggev(a1, b1, lwork=-1)
77
+ lwork = res[-2][0].real.astype(np.int_)
78
+ if ggev.typecode in 'cz':
79
+ alpha, beta, vl, vr, work, info = ggev(a1, b1, cvl, cvr, lwork,
80
+ overwrite_a, overwrite_b)
81
+ w = _make_eigvals(alpha, beta, homogeneous_eigvals)
82
+ else:
83
+ alphar, alphai, beta, vl, vr, work, info = ggev(a1, b1, cvl, cvr,
84
+ lwork, overwrite_a,
85
+ overwrite_b)
86
+ alpha = alphar + _I * alphai
87
+ w = _make_eigvals(alpha, beta, homogeneous_eigvals)
88
+ _check_info(info, 'generalized eig algorithm (ggev)')
89
+
90
+ only_real = np.all(w.imag == 0.0)
91
+ if not (ggev.typecode in 'cz' or only_real):
92
+ t = w.dtype.char
93
+ if left:
94
+ vl = _make_complex_eigvecs(w, vl, t)
95
+ if right:
96
+ vr = _make_complex_eigvecs(w, vr, t)
97
+
98
+ # the eigenvectors returned by the lapack function are NOT normalized
99
+ for i in range(vr.shape[0]):
100
+ if right:
101
+ vr[:, i] /= norm(vr[:, i])
102
+ if left:
103
+ vl[:, i] /= norm(vl[:, i])
104
+
105
+ if not (left or right):
106
+ return w
107
+ if left:
108
+ if right:
109
+ return w, vl, vr
110
+ return w, vl
111
+ return w, vr
112
+
113
+
114
+ @_apply_over_batch(('a', 2), ('b', 2))
115
+ def eig(a, b=None, left=False, right=True, overwrite_a=False,
116
+ overwrite_b=False, check_finite=True, homogeneous_eigvals=False):
117
+ """
118
+ Solve an ordinary or generalized eigenvalue problem of a square matrix.
119
+
120
+ Find eigenvalues w and right or left eigenvectors of a general matrix::
121
+
122
+ a vr[:,i] = w[i] b vr[:,i]
123
+ a.H vl[:,i] = w[i].conj() b.H vl[:,i]
124
+
125
+ where ``.H`` is the Hermitian conjugation.
126
+
127
+ Parameters
128
+ ----------
129
+ a : (M, M) array_like
130
+ A complex or real matrix whose eigenvalues and eigenvectors
131
+ will be computed.
132
+ b : (M, M) array_like, optional
133
+ Right-hand side matrix in a generalized eigenvalue problem.
134
+ Default is None, identity matrix is assumed.
135
+ left : bool, optional
136
+ Whether to calculate and return left eigenvectors. Default is False.
137
+ right : bool, optional
138
+ Whether to calculate and return right eigenvectors. Default is True.
139
+ overwrite_a : bool, optional
140
+ Whether to overwrite `a`; may improve performance. Default is False.
141
+ overwrite_b : bool, optional
142
+ Whether to overwrite `b`; may improve performance. Default is False.
143
+ check_finite : bool, optional
144
+ Whether to check that the input matrices contain only finite numbers.
145
+ Disabling may give a performance gain, but may result in problems
146
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
147
+ homogeneous_eigvals : bool, optional
148
+ If True, return the eigenvalues in homogeneous coordinates.
149
+ In this case ``w`` is a (2, M) array so that::
150
+
151
+ w[1,i] a vr[:,i] = w[0,i] b vr[:,i]
152
+
153
+ Default is False.
154
+
155
+ Returns
156
+ -------
157
+ w : (M,) or (2, M) double or complex ndarray
158
+ The eigenvalues, each repeated according to its
159
+ multiplicity. The shape is (M,) unless
160
+ ``homogeneous_eigvals=True``.
161
+ vl : (M, M) double or complex ndarray
162
+ The left eigenvector corresponding to the eigenvalue
163
+ ``w[i]`` is the column ``vl[:,i]``. Only returned if ``left=True``.
164
+ The left eigenvector is not normalized.
165
+ vr : (M, M) double or complex ndarray
166
+ The normalized right eigenvector corresponding to the eigenvalue
167
+ ``w[i]`` is the column ``vr[:,i]``. Only returned if ``right=True``.
168
+
169
+ Raises
170
+ ------
171
+ LinAlgError
172
+ If eigenvalue computation does not converge.
173
+
174
+ See Also
175
+ --------
176
+ eigvals : eigenvalues of general arrays
177
+ eigh : Eigenvalues and right eigenvectors for symmetric/Hermitian arrays.
178
+ eig_banded : eigenvalues and right eigenvectors for symmetric/Hermitian
179
+ band matrices
180
+ eigh_tridiagonal : eigenvalues and right eiegenvectors for
181
+ symmetric/Hermitian tridiagonal matrices
182
+
183
+ Examples
184
+ --------
185
+ >>> import numpy as np
186
+ >>> from scipy import linalg
187
+ >>> a = np.array([[0., -1.], [1., 0.]])
188
+ >>> linalg.eigvals(a)
189
+ array([0.+1.j, 0.-1.j])
190
+
191
+ >>> b = np.array([[0., 1.], [1., 1.]])
192
+ >>> linalg.eigvals(a, b)
193
+ array([ 1.+0.j, -1.+0.j])
194
+
195
+ >>> a = np.array([[3., 0., 0.], [0., 8., 0.], [0., 0., 7.]])
196
+ >>> linalg.eigvals(a, homogeneous_eigvals=True)
197
+ array([[3.+0.j, 8.+0.j, 7.+0.j],
198
+ [1.+0.j, 1.+0.j, 1.+0.j]])
199
+
200
+ >>> a = np.array([[0., -1.], [1., 0.]])
201
+ >>> linalg.eigvals(a) == linalg.eig(a)[0]
202
+ array([ True, True])
203
+ >>> linalg.eig(a, left=True, right=False)[1] # normalized left eigenvector
204
+ array([[-0.70710678+0.j , -0.70710678-0.j ],
205
+ [-0. +0.70710678j, -0. -0.70710678j]])
206
+ >>> linalg.eig(a, left=False, right=True)[1] # normalized right eigenvector
207
+ array([[0.70710678+0.j , 0.70710678-0.j ],
208
+ [0. -0.70710678j, 0. +0.70710678j]])
209
+
210
+
211
+
212
+ """
213
+ a1 = _asarray_validated(a, check_finite=check_finite)
214
+ if len(a1.shape) != 2 or a1.shape[0] != a1.shape[1]:
215
+ raise ValueError('expected square matrix')
216
+
217
+ # accommodate square empty matrices
218
+ if a1.size == 0:
219
+ w_n, vr_n = eig(np.eye(2, dtype=a1.dtype))
220
+ w = np.empty_like(a1, shape=(0,), dtype=w_n.dtype)
221
+ w = _make_eigvals(w, None, homogeneous_eigvals)
222
+ vl = np.empty_like(a1, shape=(0, 0), dtype=vr_n.dtype)
223
+ vr = np.empty_like(a1, shape=(0, 0), dtype=vr_n.dtype)
224
+ if not (left or right):
225
+ return w
226
+ if left:
227
+ if right:
228
+ return w, vl, vr
229
+ return w, vl
230
+ return w, vr
231
+
232
+ overwrite_a = overwrite_a or (_datacopied(a1, a))
233
+ if b is not None:
234
+ b1 = _asarray_validated(b, check_finite=check_finite)
235
+ overwrite_b = overwrite_b or _datacopied(b1, b)
236
+ if len(b1.shape) != 2 or b1.shape[0] != b1.shape[1]:
237
+ raise ValueError('expected square matrix')
238
+ if b1.shape != a1.shape:
239
+ raise ValueError('a and b must have the same shape')
240
+ return _geneig(a1, b1, left, right, overwrite_a, overwrite_b,
241
+ homogeneous_eigvals)
242
+
243
+ geev, geev_lwork = get_lapack_funcs(('geev', 'geev_lwork'), (a1,))
244
+ compute_vl, compute_vr = left, right
245
+
246
+ lwork = _compute_lwork(geev_lwork, a1.shape[0],
247
+ compute_vl=compute_vl,
248
+ compute_vr=compute_vr)
249
+
250
+ if geev.typecode in 'cz':
251
+ w, vl, vr, info = geev(a1, lwork=lwork,
252
+ compute_vl=compute_vl,
253
+ compute_vr=compute_vr,
254
+ overwrite_a=overwrite_a)
255
+ w = _make_eigvals(w, None, homogeneous_eigvals)
256
+ else:
257
+ wr, wi, vl, vr, info = geev(a1, lwork=lwork,
258
+ compute_vl=compute_vl,
259
+ compute_vr=compute_vr,
260
+ overwrite_a=overwrite_a)
261
+ w = wr + _I * wi
262
+ w = _make_eigvals(w, None, homogeneous_eigvals)
263
+
264
+ _check_info(info, 'eig algorithm (geev)',
265
+ positive='did not converge (only eigenvalues '
266
+ 'with order >= %d have converged)')
267
+
268
+ only_real = np.all(w.imag == 0.0)
269
+ if not (geev.typecode in 'cz' or only_real):
270
+ t = w.dtype.char
271
+ if left:
272
+ vl = _make_complex_eigvecs(w, vl, t)
273
+ if right:
274
+ vr = _make_complex_eigvecs(w, vr, t)
275
+ if not (left or right):
276
+ return w
277
+ if left:
278
+ if right:
279
+ return w, vl, vr
280
+ return w, vl
281
+ return w, vr
282
+
283
+
284
+ @_apply_over_batch(('a', 2), ('b', 2))
285
+ def eigh(a, b=None, *, lower=True, eigvals_only=False, overwrite_a=False,
286
+ overwrite_b=False, type=1, check_finite=True, subset_by_index=None,
287
+ subset_by_value=None, driver=None):
288
+ """
289
+ Solve a standard or generalized eigenvalue problem for a complex
290
+ Hermitian or real symmetric matrix.
291
+
292
+ Find eigenvalues array ``w`` and optionally eigenvectors array ``v`` of
293
+ array ``a``, where ``b`` is positive definite such that for every
294
+ eigenvalue λ (i-th entry of w) and its eigenvector ``vi`` (i-th column of
295
+ ``v``) satisfies::
296
+
297
+ a @ vi = λ * b @ vi
298
+ vi.conj().T @ a @ vi = λ
299
+ vi.conj().T @ b @ vi = 1
300
+
301
+ In the standard problem, ``b`` is assumed to be the identity matrix.
302
+
303
+ Parameters
304
+ ----------
305
+ a : (M, M) array_like
306
+ A complex Hermitian or real symmetric matrix whose eigenvalues and
307
+ eigenvectors will be computed.
308
+ b : (M, M) array_like, optional
309
+ A complex Hermitian or real symmetric definite positive matrix in.
310
+ If omitted, identity matrix is assumed.
311
+ lower : bool, optional
312
+ Whether the pertinent array data is taken from the lower or upper
313
+ triangle of ``a`` and, if applicable, ``b``. (Default: lower)
314
+ eigvals_only : bool, optional
315
+ Whether to calculate only eigenvalues and no eigenvectors.
316
+ (Default: both are calculated)
317
+ subset_by_index : iterable, optional
318
+ If provided, this two-element iterable defines the start and the end
319
+ indices of the desired eigenvalues (ascending order and 0-indexed).
320
+ To return only the second smallest to fifth smallest eigenvalues,
321
+ ``[1, 4]`` is used. ``[n-3, n-1]`` returns the largest three. Only
322
+ available with "evr", "evx", and "gvx" drivers. The entries are
323
+ directly converted to integers via ``int()``.
324
+ subset_by_value : iterable, optional
325
+ If provided, this two-element iterable defines the half-open interval
326
+ ``(a, b]`` that, if any, only the eigenvalues between these values
327
+ are returned. Only available with "evr", "evx", and "gvx" drivers. Use
328
+ ``np.inf`` for the unconstrained ends.
329
+ driver : str, optional
330
+ Defines which LAPACK driver should be used. Valid options are "ev",
331
+ "evd", "evr", "evx" for standard problems and "gv", "gvd", "gvx" for
332
+ generalized (where b is not None) problems. See the Notes section.
333
+ The default for standard problems is "evr". For generalized problems,
334
+ "gvd" is used for full set, and "gvx" for subset requested cases.
335
+ type : int, optional
336
+ For the generalized problems, this keyword specifies the problem type
337
+ to be solved for ``w`` and ``v`` (only takes 1, 2, 3 as possible
338
+ inputs)::
339
+
340
+ 1 => a @ v = w @ b @ v
341
+ 2 => a @ b @ v = w @ v
342
+ 3 => b @ a @ v = w @ v
343
+
344
+ This keyword is ignored for standard problems.
345
+ overwrite_a : bool, optional
346
+ Whether to overwrite data in ``a`` (may improve performance). Default
347
+ is False.
348
+ overwrite_b : bool, optional
349
+ Whether to overwrite data in ``b`` (may improve performance). Default
350
+ is False.
351
+ check_finite : bool, optional
352
+ Whether to check that the input matrices contain only finite numbers.
353
+ Disabling may give a performance gain, but may result in problems
354
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
355
+
356
+ Returns
357
+ -------
358
+ w : (N,) ndarray
359
+ The N (N<=M) selected eigenvalues, in ascending order, each
360
+ repeated according to its multiplicity.
361
+ v : (M, N) ndarray
362
+ The normalized eigenvector corresponding to the eigenvalue ``w[i]`` is
363
+ the column ``v[:,i]``. Only returned if ``eigvals_only=False``.
364
+
365
+ Raises
366
+ ------
367
+ LinAlgError
368
+ If eigenvalue computation does not converge, an error occurred, or
369
+ b matrix is not definite positive. Note that if input matrices are
370
+ not symmetric or Hermitian, no error will be reported but results will
371
+ be wrong.
372
+
373
+ See Also
374
+ --------
375
+ eigvalsh : eigenvalues of symmetric or Hermitian arrays
376
+ eig : eigenvalues and right eigenvectors for non-symmetric arrays
377
+ eigh_tridiagonal : eigenvalues and right eiegenvectors for
378
+ symmetric/Hermitian tridiagonal matrices
379
+
380
+ Notes
381
+ -----
382
+ This function does not check the input array for being Hermitian/symmetric
383
+ in order to allow for representing arrays with only their upper/lower
384
+ triangular parts. Also, note that even though not taken into account,
385
+ finiteness check applies to the whole array and unaffected by "lower"
386
+ keyword.
387
+
388
+ This function uses LAPACK drivers for computations in all possible keyword
389
+ combinations, prefixed with ``sy`` if arrays are real and ``he`` if
390
+ complex, e.g., a float array with "evr" driver is solved via
391
+ "syevr", complex arrays with "gvx" driver problem is solved via "hegvx"
392
+ etc.
393
+
394
+ As a brief summary, the slowest and the most robust driver is the
395
+ classical ``<sy/he>ev`` which uses symmetric QR. ``<sy/he>evr`` is seen as
396
+ the optimal choice for the most general cases. However, there are certain
397
+ occasions that ``<sy/he>evd`` computes faster at the expense of more
398
+ memory usage. ``<sy/he>evx``, while still being faster than ``<sy/he>ev``,
399
+ often performs worse than the rest except when very few eigenvalues are
400
+ requested for large arrays though there is still no performance guarantee.
401
+
402
+ Note that the underlying LAPACK algorithms are different depending on whether
403
+ `eigvals_only` is True or False --- thus the eigenvalues may differ
404
+ depending on whether eigenvectors are requested or not. The difference is
405
+ generally of the order of machine epsilon times the largest eigenvalue,
406
+ so is likely only visible for zero or nearly zero eigenvalues.
407
+
408
+ For the generalized problem, normalization with respect to the given
409
+ type argument::
410
+
411
+ type 1 and 3 : v.conj().T @ a @ v = w
412
+ type 2 : inv(v).conj().T @ a @ inv(v) = w
413
+
414
+ type 1 or 2 : v.conj().T @ b @ v = I
415
+ type 3 : v.conj().T @ inv(b) @ v = I
416
+
417
+
418
+ Examples
419
+ --------
420
+ >>> import numpy as np
421
+ >>> from scipy.linalg import eigh
422
+ >>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]])
423
+ >>> w, v = eigh(A)
424
+ >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4)))
425
+ True
426
+
427
+ Request only the eigenvalues
428
+
429
+ >>> w = eigh(A, eigvals_only=True)
430
+
431
+ Request eigenvalues that are less than 10.
432
+
433
+ >>> A = np.array([[34, -4, -10, -7, 2],
434
+ ... [-4, 7, 2, 12, 0],
435
+ ... [-10, 2, 44, 2, -19],
436
+ ... [-7, 12, 2, 79, -34],
437
+ ... [2, 0, -19, -34, 29]])
438
+ >>> eigh(A, eigvals_only=True, subset_by_value=[-np.inf, 10])
439
+ array([6.69199443e-07, 9.11938152e+00])
440
+
441
+ Request the second smallest eigenvalue and its eigenvector
442
+
443
+ >>> w, v = eigh(A, subset_by_index=[1, 1])
444
+ >>> w
445
+ array([9.11938152])
446
+ >>> v.shape # only a single column is returned
447
+ (5, 1)
448
+
449
+ """
450
+ # set lower
451
+ uplo = 'L' if lower else 'U'
452
+ # Set job for Fortran routines
453
+ _job = 'N' if eigvals_only else 'V'
454
+
455
+ drv_str = [None, "ev", "evd", "evr", "evx", "gv", "gvd", "gvx"]
456
+ if driver not in drv_str:
457
+ raise ValueError('"{}" is unknown. Possible values are "None", "{}".'
458
+ ''.format(driver, '", "'.join(drv_str[1:])))
459
+
460
+ a1 = _asarray_validated(a, check_finite=check_finite)
461
+ if len(a1.shape) != 2 or a1.shape[0] != a1.shape[1]:
462
+ raise ValueError('expected square "a" matrix')
463
+
464
+ # accommodate square empty matrices
465
+ if a1.size == 0:
466
+ w_n, v_n = eigh(np.eye(2, dtype=a1.dtype))
467
+
468
+ w = np.empty_like(a1, shape=(0,), dtype=w_n.dtype)
469
+ v = np.empty_like(a1, shape=(0, 0), dtype=v_n.dtype)
470
+ if eigvals_only:
471
+ return w
472
+ else:
473
+ return w, v
474
+
475
+ overwrite_a = overwrite_a or (_datacopied(a1, a))
476
+ cplx = True if iscomplexobj(a1) else False
477
+ n = a1.shape[0]
478
+ drv_args = {'overwrite_a': overwrite_a}
479
+
480
+ if b is not None:
481
+ b1 = _asarray_validated(b, check_finite=check_finite)
482
+ overwrite_b = overwrite_b or _datacopied(b1, b)
483
+ if len(b1.shape) != 2 or b1.shape[0] != b1.shape[1]:
484
+ raise ValueError('expected square "b" matrix')
485
+
486
+ if b1.shape != a1.shape:
487
+ raise ValueError(f"wrong b dimensions {b1.shape}, should be {a1.shape}")
488
+
489
+ if type not in [1, 2, 3]:
490
+ raise ValueError('"type" keyword only accepts 1, 2, and 3.')
491
+
492
+ cplx = True if iscomplexobj(b1) else (cplx or False)
493
+ drv_args.update({'overwrite_b': overwrite_b, 'itype': type})
494
+
495
+ subset = (subset_by_index is not None) or (subset_by_value is not None)
496
+
497
+ # Both subsets can't be given
498
+ if subset_by_index and subset_by_value:
499
+ raise ValueError('Either index or value subset can be requested.')
500
+
501
+ # Check indices if given
502
+ if subset_by_index:
503
+ lo, hi = (int(x) for x in subset_by_index)
504
+ if not (0 <= lo <= hi < n):
505
+ raise ValueError('Requested eigenvalue indices are not valid. '
506
+ f'Valid range is [0, {n-1}] and start <= end, but '
507
+ f'start={lo}, end={hi} is given')
508
+ # fortran is 1-indexed
509
+ drv_args.update({'range': 'I', 'il': lo + 1, 'iu': hi + 1})
510
+
511
+ if subset_by_value:
512
+ lo, hi = subset_by_value
513
+ if not (-inf <= lo < hi <= inf):
514
+ raise ValueError('Requested eigenvalue bounds are not valid. '
515
+ 'Valid range is (-inf, inf) and low < high, but '
516
+ f'low={lo}, high={hi} is given')
517
+
518
+ drv_args.update({'range': 'V', 'vl': lo, 'vu': hi})
519
+
520
+ # fix prefix for lapack routines
521
+ pfx = 'he' if cplx else 'sy'
522
+
523
+ # decide on the driver if not given
524
+ # first early exit on incompatible choice
525
+ if driver:
526
+ if b is None and (driver in ["gv", "gvd", "gvx"]):
527
+ raise ValueError(f'{driver} requires input b array to be supplied '
528
+ 'for generalized eigenvalue problems.')
529
+ if (b is not None) and (driver in ['ev', 'evd', 'evr', 'evx']):
530
+ raise ValueError(f'"{driver}" does not accept input b array '
531
+ 'for standard eigenvalue problems.')
532
+ if subset and (driver in ["ev", "evd", "gv", "gvd"]):
533
+ raise ValueError(f'"{driver}" cannot compute subsets of eigenvalues')
534
+
535
+ # Default driver is evr and gvd
536
+ else:
537
+ driver = "evr" if b is None else ("gvx" if subset else "gvd")
538
+
539
+ lwork_spec = {
540
+ 'syevd': ['lwork', 'liwork'],
541
+ 'syevr': ['lwork', 'liwork'],
542
+ 'heevd': ['lwork', 'liwork', 'lrwork'],
543
+ 'heevr': ['lwork', 'lrwork', 'liwork'],
544
+ }
545
+
546
+ if b is None: # Standard problem
547
+ drv, drvlw = get_lapack_funcs((pfx + driver, pfx+driver+'_lwork'),
548
+ [a1])
549
+ clw_args = {'n': n, 'lower': lower}
550
+ if driver == 'evd':
551
+ clw_args.update({'compute_v': 0 if _job == "N" else 1})
552
+
553
+ lw = _compute_lwork(drvlw, **clw_args)
554
+ # Multiple lwork vars
555
+ if isinstance(lw, tuple):
556
+ lwork_args = dict(zip(lwork_spec[pfx+driver], lw))
557
+ else:
558
+ lwork_args = {'lwork': lw}
559
+
560
+ drv_args.update({'lower': lower, 'compute_v': 0 if _job == "N" else 1})
561
+ w, v, *other_args, info = drv(a=a1, **drv_args, **lwork_args)
562
+
563
+ else: # Generalized problem
564
+ # 'gvd' doesn't have lwork query
565
+ if driver == "gvd":
566
+ drv = get_lapack_funcs(pfx + "gvd", [a1, b1])
567
+ lwork_args = {}
568
+ else:
569
+ drv, drvlw = get_lapack_funcs((pfx + driver, pfx+driver+'_lwork'),
570
+ [a1, b1])
571
+ # generalized drivers use uplo instead of lower
572
+ lw = _compute_lwork(drvlw, n, uplo=uplo)
573
+ lwork_args = {'lwork': lw}
574
+
575
+ drv_args.update({'uplo': uplo, 'jobz': _job})
576
+
577
+ w, v, *other_args, info = drv(a=a1, b=b1, **drv_args, **lwork_args)
578
+
579
+ # m is always the first extra argument
580
+ w = w[:other_args[0]] if subset else w
581
+ v = v[:, :other_args[0]] if (subset and not eigvals_only) else v
582
+
583
+ # Check if we had a successful exit
584
+ if info == 0:
585
+ if eigvals_only:
586
+ return w
587
+ else:
588
+ return w, v
589
+ else:
590
+ if info < -1:
591
+ raise LinAlgError(f'Illegal value in argument {-info} of internal '
592
+ f'{drv.typecode + pfx + driver}')
593
+ elif info > n:
594
+ raise LinAlgError(f'The leading minor of order {info-n} of B is not '
595
+ 'positive definite. The factorization of B '
596
+ 'could not be completed and no eigenvalues '
597
+ 'or eigenvectors were computed.')
598
+ else:
599
+ drv_err = {'ev': 'The algorithm failed to converge; {} '
600
+ 'off-diagonal elements of an intermediate '
601
+ 'tridiagonal form did not converge to zero.',
602
+ 'evx': '{} eigenvectors failed to converge.',
603
+ 'evd': 'The algorithm failed to compute an eigenvalue '
604
+ 'while working on the submatrix lying in rows '
605
+ 'and columns {0}/{1} through mod({0},{1}).',
606
+ 'evr': 'Internal Error.'
607
+ }
608
+ if driver in ['ev', 'gv']:
609
+ msg = drv_err['ev'].format(info)
610
+ elif driver in ['evx', 'gvx']:
611
+ msg = drv_err['evx'].format(info)
612
+ elif driver in ['evd', 'gvd']:
613
+ if eigvals_only:
614
+ msg = drv_err['ev'].format(info)
615
+ else:
616
+ msg = drv_err['evd'].format(info, n+1)
617
+ else:
618
+ msg = drv_err['evr']
619
+
620
+ raise LinAlgError(msg)
621
+
622
+
623
+ _conv_dict = {0: 0, 1: 1, 2: 2,
624
+ 'all': 0, 'value': 1, 'index': 2,
625
+ 'a': 0, 'v': 1, 'i': 2}
626
+
627
+
628
+ def _check_select(select, select_range, max_ev, max_len):
629
+ """Check that select is valid, convert to Fortran style."""
630
+ if isinstance(select, str):
631
+ select = select.lower()
632
+ try:
633
+ select = _conv_dict[select]
634
+ except KeyError as e:
635
+ raise ValueError('invalid argument for select') from e
636
+ vl, vu = 0., 1.
637
+ il = iu = 1
638
+ if select != 0: # (non-all)
639
+ sr = asarray(select_range)
640
+ if sr.ndim != 1 or sr.size != 2 or sr[1] < sr[0]:
641
+ raise ValueError('select_range must be a 2-element array-like '
642
+ 'in nondecreasing order')
643
+ if select == 1: # (value)
644
+ vl, vu = sr
645
+ if max_ev == 0:
646
+ max_ev = max_len
647
+ else: # 2 (index)
648
+ if sr.dtype.char.lower() not in 'hilqp':
649
+ raise ValueError(
650
+ f'when using select="i", select_range must '
651
+ f'contain integers, got dtype {sr.dtype} ({sr.dtype.char})'
652
+ )
653
+ # translate Python (0 ... N-1) into Fortran (1 ... N) with + 1
654
+ il, iu = sr + 1
655
+ if min(il, iu) < 1 or max(il, iu) > max_len:
656
+ raise ValueError('select_range out of bounds')
657
+ max_ev = iu - il + 1
658
+ return select, vl, vu, il, iu, max_ev
659
+
660
+
661
+ @_apply_over_batch(('a_band', 2))
662
+ def eig_banded(a_band, lower=False, eigvals_only=False, overwrite_a_band=False,
663
+ select='a', select_range=None, max_ev=0, check_finite=True):
664
+ """
665
+ Solve real symmetric or complex Hermitian band matrix eigenvalue problem.
666
+
667
+ Find eigenvalues w and optionally right eigenvectors v of a::
668
+
669
+ a v[:,i] = w[i] v[:,i]
670
+ v.H v = identity
671
+
672
+ The matrix a is stored in a_band either in lower diagonal or upper
673
+ diagonal ordered form:
674
+
675
+ a_band[u + i - j, j] == a[i,j] (if upper form; i <= j)
676
+ a_band[ i - j, j] == a[i,j] (if lower form; i >= j)
677
+
678
+ where u is the number of bands above the diagonal.
679
+
680
+ Example of a_band (shape of a is (6,6), u=2)::
681
+
682
+ upper form:
683
+ * * a02 a13 a24 a35
684
+ * a01 a12 a23 a34 a45
685
+ a00 a11 a22 a33 a44 a55
686
+
687
+ lower form:
688
+ a00 a11 a22 a33 a44 a55
689
+ a10 a21 a32 a43 a54 *
690
+ a20 a31 a42 a53 * *
691
+
692
+ Cells marked with * are not used.
693
+
694
+ Parameters
695
+ ----------
696
+ a_band : (u+1, M) array_like
697
+ The bands of the M by M matrix a.
698
+ lower : bool, optional
699
+ Is the matrix in the lower form. (Default is upper form)
700
+ eigvals_only : bool, optional
701
+ Compute only the eigenvalues and no eigenvectors.
702
+ (Default: calculate also eigenvectors)
703
+ overwrite_a_band : bool, optional
704
+ Discard data in a_band (may enhance performance)
705
+ select : {'a', 'v', 'i'}, optional
706
+ Which eigenvalues to calculate
707
+
708
+ ====== ========================================
709
+ select calculated
710
+ ====== ========================================
711
+ 'a' All eigenvalues
712
+ 'v' Eigenvalues in the interval (min, max]
713
+ 'i' Eigenvalues with indices min <= i <= max
714
+ ====== ========================================
715
+ select_range : (min, max), optional
716
+ Range of selected eigenvalues
717
+ max_ev : int, optional
718
+ For select=='v', maximum number of eigenvalues expected.
719
+ For other values of select, has no meaning.
720
+
721
+ In doubt, leave this parameter untouched.
722
+
723
+ check_finite : bool, optional
724
+ Whether to check that the input matrix contains only finite numbers.
725
+ Disabling may give a performance gain, but may result in problems
726
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
727
+
728
+ Returns
729
+ -------
730
+ w : (M,) ndarray
731
+ The eigenvalues, in ascending order, each repeated according to its
732
+ multiplicity.
733
+ v : (M, M) float or complex ndarray
734
+ The normalized eigenvector corresponding to the eigenvalue w[i] is
735
+ the column v[:,i]. Only returned if ``eigvals_only=False``.
736
+
737
+ Raises
738
+ ------
739
+ LinAlgError
740
+ If eigenvalue computation does not converge.
741
+
742
+ See Also
743
+ --------
744
+ eigvals_banded : eigenvalues for symmetric/Hermitian band matrices
745
+ eig : eigenvalues and right eigenvectors of general arrays.
746
+ eigh : eigenvalues and right eigenvectors for symmetric/Hermitian arrays
747
+ eigh_tridiagonal : eigenvalues and right eigenvectors for
748
+ symmetric/Hermitian tridiagonal matrices
749
+
750
+ Examples
751
+ --------
752
+ >>> import numpy as np
753
+ >>> from scipy.linalg import eig_banded
754
+ >>> A = np.array([[1, 5, 2, 0], [5, 2, 5, 2], [2, 5, 3, 5], [0, 2, 5, 4]])
755
+ >>> Ab = np.array([[1, 2, 3, 4], [5, 5, 5, 0], [2, 2, 0, 0]])
756
+ >>> w, v = eig_banded(Ab, lower=True)
757
+ >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4)))
758
+ True
759
+ >>> w = eig_banded(Ab, lower=True, eigvals_only=True)
760
+ >>> w
761
+ array([-4.26200532, -2.22987175, 3.95222349, 12.53965359])
762
+
763
+ Request only the eigenvalues between ``[-3, 4]``
764
+
765
+ >>> w, v = eig_banded(Ab, lower=True, select='v', select_range=[-3, 4])
766
+ >>> w
767
+ array([-2.22987175, 3.95222349])
768
+
769
+ """
770
+ if eigvals_only or overwrite_a_band:
771
+ a1 = _asarray_validated(a_band, check_finite=check_finite)
772
+ overwrite_a_band = overwrite_a_band or (_datacopied(a1, a_band))
773
+ else:
774
+ a1 = array(a_band)
775
+ if issubclass(a1.dtype.type, inexact) and not isfinite(a1).all():
776
+ raise ValueError("array must not contain infs or NaNs")
777
+ overwrite_a_band = 1
778
+
779
+ if len(a1.shape) != 2:
780
+ raise ValueError('expected a 2-D array')
781
+
782
+ # accommodate square empty matrices
783
+ if a1.size == 0:
784
+ w_n, v_n = eig_banded(np.array([[0, 0], [1, 1]], dtype=a1.dtype))
785
+
786
+ w = np.empty_like(a1, shape=(0,), dtype=w_n.dtype)
787
+ v = np.empty_like(a1, shape=(0, 0), dtype=v_n.dtype)
788
+ if eigvals_only:
789
+ return w
790
+ else:
791
+ return w, v
792
+
793
+ select, vl, vu, il, iu, max_ev = _check_select(
794
+ select, select_range, max_ev, a1.shape[1])
795
+
796
+ del select_range
797
+ if select == 0:
798
+ if a1.dtype.char in 'GFD':
799
+ # FIXME: implement this somewhen, for now go with builtin values
800
+ # FIXME: calc optimal lwork by calling ?hbevd(lwork=-1)
801
+ # or by using calc_lwork.f ???
802
+ # lwork = calc_lwork.hbevd(bevd.typecode, a1.shape[0], lower)
803
+ internal_name = 'hbevd'
804
+ else: # a1.dtype.char in 'fd':
805
+ # FIXME: implement this somewhen, for now go with builtin values
806
+ # see above
807
+ # lwork = calc_lwork.sbevd(bevd.typecode, a1.shape[0], lower)
808
+ internal_name = 'sbevd'
809
+ bevd, = get_lapack_funcs((internal_name,), (a1,))
810
+ w, v, info = bevd(a1, compute_v=not eigvals_only,
811
+ lower=lower, overwrite_ab=overwrite_a_band)
812
+ else: # select in [1, 2]
813
+ if eigvals_only:
814
+ max_ev = 1
815
+ # calculate optimal abstol for dsbevx (see manpage)
816
+ if a1.dtype.char in 'fF': # single precision
817
+ lamch, = get_lapack_funcs(('lamch',), (array(0, dtype='f'),))
818
+ else:
819
+ lamch, = get_lapack_funcs(('lamch',), (array(0, dtype='d'),))
820
+ abstol = 2 * lamch('s')
821
+ if a1.dtype.char in 'GFD':
822
+ internal_name = 'hbevx'
823
+ else: # a1.dtype.char in 'gfd'
824
+ internal_name = 'sbevx'
825
+ bevx, = get_lapack_funcs((internal_name,), (a1,))
826
+ w, v, m, ifail, info = bevx(
827
+ a1, vl, vu, il, iu, compute_v=not eigvals_only, mmax=max_ev,
828
+ range=select, lower=lower, overwrite_ab=overwrite_a_band,
829
+ abstol=abstol)
830
+ # crop off w and v
831
+ w = w[:m]
832
+ if not eigvals_only:
833
+ v = v[:, :m]
834
+ _check_info(info, internal_name)
835
+
836
+ if eigvals_only:
837
+ return w
838
+ return w, v
839
+
840
+
841
+ @_apply_over_batch(('a', 2), ('b', 2))
842
+ def eigvals(a, b=None, overwrite_a=False, check_finite=True,
843
+ homogeneous_eigvals=False):
844
+ """
845
+ Compute eigenvalues from an ordinary or generalized eigenvalue problem.
846
+
847
+ Find eigenvalues of a general matrix::
848
+
849
+ a vr[:,i] = w[i] b vr[:,i]
850
+
851
+ Parameters
852
+ ----------
853
+ a : (M, M) array_like
854
+ A complex or real matrix whose eigenvalues and eigenvectors
855
+ will be computed.
856
+ b : (M, M) array_like, optional
857
+ Right-hand side matrix in a generalized eigenvalue problem.
858
+ If omitted, identity matrix is assumed.
859
+ overwrite_a : bool, optional
860
+ Whether to overwrite data in a (may improve performance)
861
+ check_finite : bool, optional
862
+ Whether to check that the input matrices contain only finite numbers.
863
+ Disabling may give a performance gain, but may result in problems
864
+ (crashes, non-termination) if the inputs do contain infinities
865
+ or NaNs.
866
+ homogeneous_eigvals : bool, optional
867
+ If True, return the eigenvalues in homogeneous coordinates.
868
+ In this case ``w`` is a (2, M) array so that::
869
+
870
+ w[1,i] a vr[:,i] = w[0,i] b vr[:,i]
871
+
872
+ Default is False.
873
+
874
+ Returns
875
+ -------
876
+ w : (M,) or (2, M) double or complex ndarray
877
+ The eigenvalues, each repeated according to its multiplicity
878
+ but not in any specific order. The shape is (M,) unless
879
+ ``homogeneous_eigvals=True``.
880
+
881
+ Raises
882
+ ------
883
+ LinAlgError
884
+ If eigenvalue computation does not converge
885
+
886
+ See Also
887
+ --------
888
+ eig : eigenvalues and right eigenvectors of general arrays.
889
+ eigvalsh : eigenvalues of symmetric or Hermitian arrays
890
+ eigvals_banded : eigenvalues for symmetric/Hermitian band matrices
891
+ eigvalsh_tridiagonal : eigenvalues of symmetric/Hermitian tridiagonal
892
+ matrices
893
+
894
+ Examples
895
+ --------
896
+ >>> import numpy as np
897
+ >>> from scipy import linalg
898
+ >>> a = np.array([[0., -1.], [1., 0.]])
899
+ >>> linalg.eigvals(a)
900
+ array([0.+1.j, 0.-1.j])
901
+
902
+ >>> b = np.array([[0., 1.], [1., 1.]])
903
+ >>> linalg.eigvals(a, b)
904
+ array([ 1.+0.j, -1.+0.j])
905
+
906
+ >>> a = np.array([[3., 0., 0.], [0., 8., 0.], [0., 0., 7.]])
907
+ >>> linalg.eigvals(a, homogeneous_eigvals=True)
908
+ array([[3.+0.j, 8.+0.j, 7.+0.j],
909
+ [1.+0.j, 1.+0.j, 1.+0.j]])
910
+
911
+ """
912
+ return eig(a, b=b, left=0, right=0, overwrite_a=overwrite_a,
913
+ check_finite=check_finite,
914
+ homogeneous_eigvals=homogeneous_eigvals)
915
+
916
+
917
+ @_apply_over_batch(('a', 2), ('b', 2))
918
+ def eigvalsh(a, b=None, *, lower=True, overwrite_a=False,
919
+ overwrite_b=False, type=1, check_finite=True, subset_by_index=None,
920
+ subset_by_value=None, driver=None):
921
+ """
922
+ Solves a standard or generalized eigenvalue problem for a complex
923
+ Hermitian or real symmetric matrix.
924
+
925
+ Find eigenvalues array ``w`` of array ``a``, where ``b`` is positive
926
+ definite such that for every eigenvalue λ (i-th entry of w) and its
927
+ eigenvector vi (i-th column of v) satisfies::
928
+
929
+ a @ vi = λ * b @ vi
930
+ vi.conj().T @ a @ vi = λ
931
+ vi.conj().T @ b @ vi = 1
932
+
933
+ In the standard problem, b is assumed to be the identity matrix.
934
+
935
+ Parameters
936
+ ----------
937
+ a : (M, M) array_like
938
+ A complex Hermitian or real symmetric matrix whose eigenvalues will
939
+ be computed.
940
+ b : (M, M) array_like, optional
941
+ A complex Hermitian or real symmetric definite positive matrix in.
942
+ If omitted, identity matrix is assumed.
943
+ lower : bool, optional
944
+ Whether the pertinent array data is taken from the lower or upper
945
+ triangle of ``a`` and, if applicable, ``b``. (Default: lower)
946
+ overwrite_a : bool, optional
947
+ Whether to overwrite data in ``a`` (may improve performance). Default
948
+ is False.
949
+ overwrite_b : bool, optional
950
+ Whether to overwrite data in ``b`` (may improve performance). Default
951
+ is False.
952
+ type : int, optional
953
+ For the generalized problems, this keyword specifies the problem type
954
+ to be solved for ``w`` and ``v`` (only takes 1, 2, 3 as possible
955
+ inputs)::
956
+
957
+ 1 => a @ v = w @ b @ v
958
+ 2 => a @ b @ v = w @ v
959
+ 3 => b @ a @ v = w @ v
960
+
961
+ This keyword is ignored for standard problems.
962
+ check_finite : bool, optional
963
+ Whether to check that the input matrices contain only finite numbers.
964
+ Disabling may give a performance gain, but may result in problems
965
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
966
+ subset_by_index : iterable, optional
967
+ If provided, this two-element iterable defines the start and the end
968
+ indices of the desired eigenvalues (ascending order and 0-indexed).
969
+ To return only the second smallest to fifth smallest eigenvalues,
970
+ ``[1, 4]`` is used. ``[n-3, n-1]`` returns the largest three. Only
971
+ available with "evr", "evx", and "gvx" drivers. The entries are
972
+ directly converted to integers via ``int()``.
973
+ subset_by_value : iterable, optional
974
+ If provided, this two-element iterable defines the half-open interval
975
+ ``(a, b]`` that, if any, only the eigenvalues between these values
976
+ are returned. Only available with "evr", "evx", and "gvx" drivers. Use
977
+ ``np.inf`` for the unconstrained ends.
978
+ driver : str, optional
979
+ Defines which LAPACK driver should be used. Valid options are "ev",
980
+ "evd", "evr", "evx" for standard problems and "gv", "gvd", "gvx" for
981
+ generalized (where b is not None) problems. See the Notes section of
982
+ `scipy.linalg.eigh`.
983
+
984
+ Returns
985
+ -------
986
+ w : (N,) ndarray
987
+ The N (N<=M) selected eigenvalues, in ascending order, each
988
+ repeated according to its multiplicity.
989
+
990
+ Raises
991
+ ------
992
+ LinAlgError
993
+ If eigenvalue computation does not converge, an error occurred, or
994
+ b matrix is not definite positive. Note that if input matrices are
995
+ not symmetric or Hermitian, no error will be reported but results will
996
+ be wrong.
997
+
998
+ See Also
999
+ --------
1000
+ eigh : eigenvalues and right eigenvectors for symmetric/Hermitian arrays
1001
+ eigvals : eigenvalues of general arrays
1002
+ eigvals_banded : eigenvalues for symmetric/Hermitian band matrices
1003
+ eigvalsh_tridiagonal : eigenvalues of symmetric/Hermitian tridiagonal
1004
+ matrices
1005
+
1006
+ Notes
1007
+ -----
1008
+ This function does not check the input array for being Hermitian/symmetric
1009
+ in order to allow for representing arrays with only their upper/lower
1010
+ triangular parts.
1011
+
1012
+ This function serves as a one-liner shorthand for `scipy.linalg.eigh` with
1013
+ the option ``eigvals_only=True`` to get the eigenvalues and not the
1014
+ eigenvectors. Here it is kept as a legacy convenience. It might be
1015
+ beneficial to use the main function to have full control and to be a bit
1016
+ more pythonic.
1017
+
1018
+ Examples
1019
+ --------
1020
+ For more examples see `scipy.linalg.eigh`.
1021
+
1022
+ >>> import numpy as np
1023
+ >>> from scipy.linalg import eigvalsh
1024
+ >>> A = np.array([[6, 3, 1, 5], [3, 0, 5, 1], [1, 5, 6, 2], [5, 1, 2, 2]])
1025
+ >>> w = eigvalsh(A)
1026
+ >>> w
1027
+ array([-3.74637491, -0.76263923, 6.08502336, 12.42399079])
1028
+
1029
+ """
1030
+ return eigh(a, b=b, lower=lower, eigvals_only=True, overwrite_a=overwrite_a,
1031
+ overwrite_b=overwrite_b, type=type, check_finite=check_finite,
1032
+ subset_by_index=subset_by_index, subset_by_value=subset_by_value,
1033
+ driver=driver)
1034
+
1035
+
1036
+ @_apply_over_batch(('a_band', 2))
1037
+ def eigvals_banded(a_band, lower=False, overwrite_a_band=False,
1038
+ select='a', select_range=None, check_finite=True):
1039
+ """
1040
+ Solve real symmetric or complex Hermitian band matrix eigenvalue problem.
1041
+
1042
+ Find eigenvalues w of a::
1043
+
1044
+ a v[:,i] = w[i] v[:,i]
1045
+ v.H v = identity
1046
+
1047
+ The matrix a is stored in a_band either in lower diagonal or upper
1048
+ diagonal ordered form:
1049
+
1050
+ a_band[u + i - j, j] == a[i,j] (if upper form; i <= j)
1051
+ a_band[ i - j, j] == a[i,j] (if lower form; i >= j)
1052
+
1053
+ where u is the number of bands above the diagonal.
1054
+
1055
+ Example of a_band (shape of a is (6,6), u=2)::
1056
+
1057
+ upper form:
1058
+ * * a02 a13 a24 a35
1059
+ * a01 a12 a23 a34 a45
1060
+ a00 a11 a22 a33 a44 a55
1061
+
1062
+ lower form:
1063
+ a00 a11 a22 a33 a44 a55
1064
+ a10 a21 a32 a43 a54 *
1065
+ a20 a31 a42 a53 * *
1066
+
1067
+ Cells marked with * are not used.
1068
+
1069
+ Parameters
1070
+ ----------
1071
+ a_band : (u+1, M) array_like
1072
+ The bands of the M by M matrix a.
1073
+ lower : bool, optional
1074
+ Is the matrix in the lower form. (Default is upper form)
1075
+ overwrite_a_band : bool, optional
1076
+ Discard data in a_band (may enhance performance)
1077
+ select : {'a', 'v', 'i'}, optional
1078
+ Which eigenvalues to calculate
1079
+
1080
+ ====== ========================================
1081
+ select calculated
1082
+ ====== ========================================
1083
+ 'a' All eigenvalues
1084
+ 'v' Eigenvalues in the interval (min, max]
1085
+ 'i' Eigenvalues with indices min <= i <= max
1086
+ ====== ========================================
1087
+ select_range : (min, max), optional
1088
+ Range of selected eigenvalues
1089
+ check_finite : bool, optional
1090
+ Whether to check that the input matrix contains only finite numbers.
1091
+ Disabling may give a performance gain, but may result in problems
1092
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
1093
+
1094
+ Returns
1095
+ -------
1096
+ w : (M,) ndarray
1097
+ The eigenvalues, in ascending order, each repeated according to its
1098
+ multiplicity.
1099
+
1100
+ Raises
1101
+ ------
1102
+ LinAlgError
1103
+ If eigenvalue computation does not converge.
1104
+
1105
+ See Also
1106
+ --------
1107
+ eig_banded : eigenvalues and right eigenvectors for symmetric/Hermitian
1108
+ band matrices
1109
+ eigvalsh_tridiagonal : eigenvalues of symmetric/Hermitian tridiagonal
1110
+ matrices
1111
+ eigvals : eigenvalues of general arrays
1112
+ eigh : eigenvalues and right eigenvectors for symmetric/Hermitian arrays
1113
+ eig : eigenvalues and right eigenvectors for non-symmetric arrays
1114
+
1115
+ Examples
1116
+ --------
1117
+ >>> import numpy as np
1118
+ >>> from scipy.linalg import eigvals_banded
1119
+ >>> A = np.array([[1, 5, 2, 0], [5, 2, 5, 2], [2, 5, 3, 5], [0, 2, 5, 4]])
1120
+ >>> Ab = np.array([[1, 2, 3, 4], [5, 5, 5, 0], [2, 2, 0, 0]])
1121
+ >>> w = eigvals_banded(Ab, lower=True)
1122
+ >>> w
1123
+ array([-4.26200532, -2.22987175, 3.95222349, 12.53965359])
1124
+ """
1125
+ return eig_banded(a_band, lower=lower, eigvals_only=1,
1126
+ overwrite_a_band=overwrite_a_band, select=select,
1127
+ select_range=select_range, check_finite=check_finite)
1128
+
1129
+
1130
+ @_apply_over_batch(('d', 1), ('e', 1))
1131
+ def eigvalsh_tridiagonal(d, e, select='a', select_range=None,
1132
+ check_finite=True, tol=0., lapack_driver='auto'):
1133
+ """
1134
+ Solve eigenvalue problem for a real symmetric tridiagonal matrix.
1135
+
1136
+ Find eigenvalues `w` of ``a``::
1137
+
1138
+ a v[:,i] = w[i] v[:,i]
1139
+ v.H v = identity
1140
+
1141
+ For a real symmetric matrix ``a`` with diagonal elements `d` and
1142
+ off-diagonal elements `e`.
1143
+
1144
+ Parameters
1145
+ ----------
1146
+ d : ndarray, shape (ndim,)
1147
+ The diagonal elements of the array.
1148
+ e : ndarray, shape (ndim-1,)
1149
+ The off-diagonal elements of the array.
1150
+ select : {'a', 'v', 'i'}, optional
1151
+ Which eigenvalues to calculate
1152
+
1153
+ ====== ========================================
1154
+ select calculated
1155
+ ====== ========================================
1156
+ 'a' All eigenvalues
1157
+ 'v' Eigenvalues in the interval (min, max]
1158
+ 'i' Eigenvalues with indices min <= i <= max
1159
+ ====== ========================================
1160
+ select_range : (min, max), optional
1161
+ Range of selected eigenvalues
1162
+ check_finite : bool, optional
1163
+ Whether to check that the input matrix contains only finite numbers.
1164
+ Disabling may give a performance gain, but may result in problems
1165
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
1166
+ tol : float
1167
+ The absolute tolerance to which each eigenvalue is required
1168
+ (only used when ``lapack_driver='stebz'``).
1169
+ An eigenvalue (or cluster) is considered to have converged if it
1170
+ lies in an interval of this width. If <= 0. (default),
1171
+ the value ``eps*|a|`` is used where eps is the machine precision,
1172
+ and ``|a|`` is the 1-norm of the matrix ``a``.
1173
+ lapack_driver : str
1174
+ LAPACK function to use, can be 'auto', 'stemr', 'stebz', 'sterf',
1175
+ 'stev', or 'stevd'. When 'auto' (default), it will use 'stevd' if
1176
+ ``select='a'`` and 'stebz' otherwise. 'sterf' and 'stev' can only
1177
+ be used when ``select='a'``.
1178
+
1179
+ Returns
1180
+ -------
1181
+ w : (M,) ndarray
1182
+ The eigenvalues, in ascending order, each repeated according to its
1183
+ multiplicity.
1184
+
1185
+ Raises
1186
+ ------
1187
+ LinAlgError
1188
+ If eigenvalue computation does not converge.
1189
+
1190
+ See Also
1191
+ --------
1192
+ eigh_tridiagonal : eigenvalues and right eiegenvectors for
1193
+ symmetric/Hermitian tridiagonal matrices
1194
+
1195
+ Examples
1196
+ --------
1197
+ >>> import numpy as np
1198
+ >>> from scipy.linalg import eigvalsh_tridiagonal, eigvalsh
1199
+ >>> d = 3*np.ones(4)
1200
+ >>> e = -1*np.ones(3)
1201
+ >>> w = eigvalsh_tridiagonal(d, e)
1202
+ >>> A = np.diag(d) + np.diag(e, k=1) + np.diag(e, k=-1)
1203
+ >>> w2 = eigvalsh(A) # Verify with other eigenvalue routines
1204
+ >>> np.allclose(w - w2, np.zeros(4))
1205
+ True
1206
+ """
1207
+ return eigh_tridiagonal(
1208
+ d, e, eigvals_only=True, select=select, select_range=select_range,
1209
+ check_finite=check_finite, tol=tol, lapack_driver=lapack_driver)
1210
+
1211
+
1212
+ @_apply_over_batch(('d', 1), ('e', 1))
1213
+ def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
1214
+ check_finite=True, tol=0., lapack_driver='auto'):
1215
+ """
1216
+ Solve eigenvalue problem for a real symmetric tridiagonal matrix.
1217
+
1218
+ Find eigenvalues `w` and optionally right eigenvectors `v` of ``a``::
1219
+
1220
+ a v[:,i] = w[i] v[:,i]
1221
+ v.H v = identity
1222
+
1223
+ For a real symmetric matrix ``a`` with diagonal elements `d` and
1224
+ off-diagonal elements `e`.
1225
+
1226
+ Parameters
1227
+ ----------
1228
+ d : ndarray, shape (ndim,)
1229
+ The diagonal elements of the array.
1230
+ e : ndarray, shape (ndim-1,)
1231
+ The off-diagonal elements of the array.
1232
+ eigvals_only : bool, optional
1233
+ Compute only the eigenvalues and no eigenvectors.
1234
+ (Default: calculate also eigenvectors)
1235
+ select : {'a', 'v', 'i'}, optional
1236
+ Which eigenvalues to calculate
1237
+
1238
+ ====== ========================================
1239
+ select calculated
1240
+ ====== ========================================
1241
+ 'a' All eigenvalues
1242
+ 'v' Eigenvalues in the interval (min, max]
1243
+ 'i' Eigenvalues with indices min <= i <= max
1244
+ ====== ========================================
1245
+ select_range : (min, max), optional
1246
+ Range of selected eigenvalues
1247
+ check_finite : bool, optional
1248
+ Whether to check that the input matrix contains only finite numbers.
1249
+ Disabling may give a performance gain, but may result in problems
1250
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
1251
+ tol : float
1252
+ The absolute tolerance to which each eigenvalue is required
1253
+ (only used when 'stebz' is the `lapack_driver`).
1254
+ An eigenvalue (or cluster) is considered to have converged if it
1255
+ lies in an interval of this width. If <= 0. (default),
1256
+ the value ``eps*|a|`` is used where eps is the machine precision,
1257
+ and ``|a|`` is the 1-norm of the matrix ``a``.
1258
+ lapack_driver : str
1259
+ LAPACK function to use, can be 'auto', 'stemr', 'stebz', 'sterf',
1260
+ 'stev', or 'stevd'. When 'auto' (default), it will use 'stevd' if ``select='a'``
1261
+ and 'stebz' otherwise. When 'stebz' is used to find the eigenvalues and
1262
+ ``eigvals_only=False``, then a second LAPACK call (to ``?STEIN``) is
1263
+ used to find the corresponding eigenvectors. 'sterf' can only be
1264
+ used when ``eigvals_only=True`` and ``select='a'``. 'stev' can only
1265
+ be used when ``select='a'``.
1266
+
1267
+ Returns
1268
+ -------
1269
+ w : (M,) ndarray
1270
+ The eigenvalues, in ascending order, each repeated according to its
1271
+ multiplicity.
1272
+ v : (M, M) ndarray
1273
+ The normalized eigenvector corresponding to the eigenvalue ``w[i]`` is
1274
+ the column ``v[:,i]``. Only returned if ``eigvals_only=False``.
1275
+
1276
+ Raises
1277
+ ------
1278
+ LinAlgError
1279
+ If eigenvalue computation does not converge.
1280
+
1281
+ See Also
1282
+ --------
1283
+ eigvalsh_tridiagonal : eigenvalues of symmetric/Hermitian tridiagonal
1284
+ matrices
1285
+ eig : eigenvalues and right eigenvectors for non-symmetric arrays
1286
+ eigh : eigenvalues and right eigenvectors for symmetric/Hermitian arrays
1287
+ eig_banded : eigenvalues and right eigenvectors for symmetric/Hermitian
1288
+ band matrices
1289
+
1290
+ Notes
1291
+ -----
1292
+ This function makes use of LAPACK ``S/DSTEMR`` routines.
1293
+
1294
+ Examples
1295
+ --------
1296
+ >>> import numpy as np
1297
+ >>> from scipy.linalg import eigh_tridiagonal
1298
+ >>> d = 3*np.ones(4)
1299
+ >>> e = -1*np.ones(3)
1300
+ >>> w, v = eigh_tridiagonal(d, e)
1301
+ >>> A = np.diag(d) + np.diag(e, k=1) + np.diag(e, k=-1)
1302
+ >>> np.allclose(A @ v - v @ np.diag(w), np.zeros((4, 4)))
1303
+ True
1304
+ """
1305
+ d = _asarray_validated(d, check_finite=check_finite)
1306
+ e = _asarray_validated(e, check_finite=check_finite)
1307
+ for check in (d, e):
1308
+ if check.ndim != 1:
1309
+ raise ValueError('expected a 1-D array')
1310
+ if check.dtype.char in 'GFD': # complex
1311
+ raise TypeError('Only real arrays currently supported')
1312
+ if d.size != e.size + 1:
1313
+ raise ValueError(f'd ({d.size}) must have one more element than e ({e.size})')
1314
+ select, vl, vu, il, iu, _ = _check_select(
1315
+ select, select_range, 0, d.size)
1316
+ if not isinstance(lapack_driver, str):
1317
+ raise TypeError('lapack_driver must be str')
1318
+ drivers = ('auto', 'stemr', 'sterf', 'stebz', 'stev', 'stevd')
1319
+ if lapack_driver not in drivers:
1320
+ raise ValueError(f'lapack_driver must be one of {drivers}, '
1321
+ f'got {lapack_driver}')
1322
+ if lapack_driver == 'auto':
1323
+ lapack_driver = 'stevd' if select == 0 else 'stebz'
1324
+
1325
+ # Quick exit for 1x1 case
1326
+ if len(d) == 1:
1327
+ if select == 1 and (not (vl < d[0] <= vu)): # request by value
1328
+ w = array([])
1329
+ v = empty([1, 0], dtype=d.dtype)
1330
+ else: # all and request by index
1331
+ w = array([d[0]], dtype=d.dtype)
1332
+ v = array([[1.]], dtype=d.dtype)
1333
+
1334
+ if eigvals_only:
1335
+ return w
1336
+ else:
1337
+ return w, v
1338
+
1339
+ func, = get_lapack_funcs((lapack_driver,), (d, e))
1340
+ compute_v = not eigvals_only
1341
+ if lapack_driver == 'sterf':
1342
+ if select != 0:
1343
+ raise ValueError('sterf can only be used when select == "a"')
1344
+ if not eigvals_only:
1345
+ raise ValueError('sterf can only be used when eigvals_only is '
1346
+ 'True')
1347
+ w, info = func(d, e)
1348
+ m = len(w)
1349
+ elif lapack_driver == 'stev':
1350
+ if select != 0:
1351
+ raise ValueError('stev can only be used when select == "a"')
1352
+ w, v, info = func(d, e, compute_v=compute_v)
1353
+ m = len(w)
1354
+ elif lapack_driver == 'stevd':
1355
+ if select != 0:
1356
+ raise ValueError('stevd can only be used when select == "a"')
1357
+ w, v, info = func(d, e, compute_v=compute_v)
1358
+ m = len(w)
1359
+ elif lapack_driver == 'stebz':
1360
+ tol = float(tol)
1361
+ internal_name = 'stebz'
1362
+ stebz, = get_lapack_funcs((internal_name,), (d, e))
1363
+ # If getting eigenvectors, needs to be block-ordered (B) instead of
1364
+ # matrix-ordered (E), and we will reorder later
1365
+ order = 'E' if eigvals_only else 'B'
1366
+ m, w, iblock, isplit, info = stebz(d, e, select, vl, vu, il, iu, tol,
1367
+ order)
1368
+ else: # 'stemr'
1369
+ # ?STEMR annoyingly requires size N instead of N-1
1370
+ e_ = empty(e.size+1, e.dtype)
1371
+ e_[:-1] = e
1372
+ stemr_lwork, = get_lapack_funcs(('stemr_lwork',), (d, e))
1373
+ lwork, liwork, info = stemr_lwork(d, e_, select, vl, vu, il, iu,
1374
+ compute_v=compute_v)
1375
+ _check_info(info, 'stemr_lwork')
1376
+ m, w, v, info = func(d, e_, select, vl, vu, il, iu,
1377
+ compute_v=compute_v, lwork=lwork, liwork=liwork)
1378
+ _check_info(info, lapack_driver + ' (eigh_tridiagonal)')
1379
+ w = w[:m]
1380
+ if eigvals_only:
1381
+ return w
1382
+ else:
1383
+ # Do we still need to compute the eigenvalues?
1384
+ if lapack_driver == 'stebz':
1385
+ func, = get_lapack_funcs(('stein',), (d, e))
1386
+ v, info = func(d, e, w, iblock, isplit)
1387
+ _check_info(info, 'stein (eigh_tridiagonal)',
1388
+ positive='%d eigenvectors failed to converge')
1389
+ # Convert block-order to matrix-order
1390
+ order = argsort(w)
1391
+ w, v = w[order], v[:, order]
1392
+ else:
1393
+ v = v[:, :m]
1394
+ return w, v
1395
+
1396
+
1397
+ def _check_info(info, driver, positive='did not converge (LAPACK info=%d)'):
1398
+ """Check info return value."""
1399
+ if info < 0:
1400
+ raise ValueError(f'illegal value in argument {-info} of internal {driver}')
1401
+ if info > 0 and positive:
1402
+ raise LinAlgError(("%s " + positive) % (driver, info,))
1403
+
1404
+
1405
+ @_apply_over_batch(('a', 2))
1406
+ def hessenberg(a, calc_q=False, overwrite_a=False, check_finite=True):
1407
+ """
1408
+ Compute Hessenberg form of a matrix.
1409
+
1410
+ The Hessenberg decomposition is::
1411
+
1412
+ A = Q H Q^H
1413
+
1414
+ where `Q` is unitary/orthogonal and `H` has only zero elements below
1415
+ the first sub-diagonal.
1416
+
1417
+ Parameters
1418
+ ----------
1419
+ a : (M, M) array_like
1420
+ Matrix to bring into Hessenberg form.
1421
+ calc_q : bool, optional
1422
+ Whether to compute the transformation matrix. Default is False.
1423
+ overwrite_a : bool, optional
1424
+ Whether to overwrite `a`; may improve performance.
1425
+ Default is False.
1426
+ check_finite : bool, optional
1427
+ Whether to check that the input matrix contains only finite numbers.
1428
+ Disabling may give a performance gain, but may result in problems
1429
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
1430
+
1431
+ Returns
1432
+ -------
1433
+ H : (M, M) ndarray
1434
+ Hessenberg form of `a`.
1435
+ Q : (M, M) ndarray
1436
+ Unitary/orthogonal similarity transformation matrix ``A = Q H Q^H``.
1437
+ Only returned if ``calc_q=True``.
1438
+
1439
+ Examples
1440
+ --------
1441
+ >>> import numpy as np
1442
+ >>> from scipy.linalg import hessenberg
1443
+ >>> A = np.array([[2, 5, 8, 7], [5, 2, 2, 8], [7, 5, 6, 6], [5, 4, 4, 8]])
1444
+ >>> H, Q = hessenberg(A, calc_q=True)
1445
+ >>> H
1446
+ array([[ 2. , -11.65843866, 1.42005301, 0.25349066],
1447
+ [ -9.94987437, 14.53535354, -5.31022304, 2.43081618],
1448
+ [ 0. , -1.83299243, 0.38969961, -0.51527034],
1449
+ [ 0. , 0. , -3.83189513, 1.07494686]])
1450
+ >>> np.allclose(Q @ H @ Q.conj().T - A, np.zeros((4, 4)))
1451
+ True
1452
+ """
1453
+ a1 = _asarray_validated(a, check_finite=check_finite)
1454
+ if len(a1.shape) != 2 or (a1.shape[0] != a1.shape[1]):
1455
+ raise ValueError('expected square matrix')
1456
+ overwrite_a = overwrite_a or (_datacopied(a1, a))
1457
+
1458
+ if a1.size == 0:
1459
+ h3 = hessenberg(np.eye(3, dtype=a1.dtype))
1460
+ h = np.empty(a1.shape, dtype=h3.dtype)
1461
+ if not calc_q:
1462
+ return h
1463
+ else:
1464
+ h3, q3 = hessenberg(np.eye(3, dtype=a1.dtype), calc_q=True)
1465
+ q = np.empty(a1.shape, dtype=q3.dtype)
1466
+ h = np.empty(a1.shape, dtype=h3.dtype)
1467
+ return h, q
1468
+
1469
+ # if 2x2 or smaller: already in Hessenberg
1470
+ if a1.shape[0] <= 2:
1471
+ if calc_q:
1472
+ return a1, eye(a1.shape[0])
1473
+ return a1
1474
+
1475
+ gehrd, gebal, gehrd_lwork = get_lapack_funcs(('gehrd', 'gebal',
1476
+ 'gehrd_lwork'), (a1,))
1477
+ ba, lo, hi, pivscale, info = gebal(a1, permute=0, overwrite_a=overwrite_a)
1478
+ _check_info(info, 'gebal (hessenberg)', positive=False)
1479
+ n = len(a1)
1480
+
1481
+ lwork = _compute_lwork(gehrd_lwork, ba.shape[0], lo=lo, hi=hi)
1482
+
1483
+ hq, tau, info = gehrd(ba, lo=lo, hi=hi, lwork=lwork, overwrite_a=1)
1484
+ _check_info(info, 'gehrd (hessenberg)', positive=False)
1485
+ h = np.triu(hq, -1)
1486
+ if not calc_q:
1487
+ return h
1488
+
1489
+ # use orghr/unghr to compute q
1490
+ orghr, orghr_lwork = get_lapack_funcs(('orghr', 'orghr_lwork'), (a1,))
1491
+ lwork = _compute_lwork(orghr_lwork, n, lo=lo, hi=hi)
1492
+
1493
+ q, info = orghr(a=hq, tau=tau, lo=lo, hi=hi, lwork=lwork, overwrite_a=1)
1494
+ _check_info(info, 'orghr (hessenberg)', positive=False)
1495
+ return h, q
1496
+
1497
+
1498
+ def cdf2rdf(w, v):
1499
+ """
1500
+ Converts complex eigenvalues ``w`` and eigenvectors ``v`` to real
1501
+ eigenvalues in a block diagonal form ``wr`` and the associated real
1502
+ eigenvectors ``vr``, such that::
1503
+
1504
+ vr @ wr = X @ vr
1505
+
1506
+ continues to hold, where ``X`` is the original array for which ``w`` and
1507
+ ``v`` are the eigenvalues and eigenvectors.
1508
+
1509
+ .. versionadded:: 1.1.0
1510
+
1511
+ Parameters
1512
+ ----------
1513
+ w : (..., M) array_like
1514
+ Complex or real eigenvalues, an array or stack of arrays
1515
+
1516
+ Conjugate pairs must not be interleaved, else the wrong result
1517
+ will be produced. So ``[1+1j, 1, 1-1j]`` will give a correct result,
1518
+ but ``[1+1j, 2+1j, 1-1j, 2-1j]`` will not.
1519
+
1520
+ v : (..., M, M) array_like
1521
+ Complex or real eigenvectors, a square array or stack of square arrays.
1522
+
1523
+ Returns
1524
+ -------
1525
+ wr : (..., M, M) ndarray
1526
+ Real diagonal block form of eigenvalues
1527
+ vr : (..., M, M) ndarray
1528
+ Real eigenvectors associated with ``wr``
1529
+
1530
+ See Also
1531
+ --------
1532
+ eig : Eigenvalues and right eigenvectors for non-symmetric arrays
1533
+ rsf2csf : Convert real Schur form to complex Schur form
1534
+
1535
+ Notes
1536
+ -----
1537
+ ``w``, ``v`` must be the eigenstructure for some *real* matrix ``X``.
1538
+ For example, obtained by ``w, v = scipy.linalg.eig(X)`` or
1539
+ ``w, v = numpy.linalg.eig(X)`` in which case ``X`` can also represent
1540
+ stacked arrays.
1541
+
1542
+ .. versionadded:: 1.1.0
1543
+
1544
+ Examples
1545
+ --------
1546
+ >>> import numpy as np
1547
+ >>> X = np.array([[1, 2, 3], [0, 4, 5], [0, -5, 4]])
1548
+ >>> X
1549
+ array([[ 1, 2, 3],
1550
+ [ 0, 4, 5],
1551
+ [ 0, -5, 4]])
1552
+
1553
+ >>> from scipy import linalg
1554
+ >>> w, v = linalg.eig(X)
1555
+ >>> w
1556
+ array([ 1.+0.j, 4.+5.j, 4.-5.j])
1557
+ >>> v
1558
+ array([[ 1.00000+0.j , -0.01906-0.40016j, -0.01906+0.40016j],
1559
+ [ 0.00000+0.j , 0.00000-0.64788j, 0.00000+0.64788j],
1560
+ [ 0.00000+0.j , 0.64788+0.j , 0.64788-0.j ]])
1561
+
1562
+ >>> wr, vr = linalg.cdf2rdf(w, v)
1563
+ >>> wr
1564
+ array([[ 1., 0., 0.],
1565
+ [ 0., 4., 5.],
1566
+ [ 0., -5., 4.]])
1567
+ >>> vr
1568
+ array([[ 1. , 0.40016, -0.01906],
1569
+ [ 0. , 0.64788, 0. ],
1570
+ [ 0. , 0. , 0.64788]])
1571
+
1572
+ >>> vr @ wr
1573
+ array([[ 1. , 1.69593, 1.9246 ],
1574
+ [ 0. , 2.59153, 3.23942],
1575
+ [ 0. , -3.23942, 2.59153]])
1576
+ >>> X @ vr
1577
+ array([[ 1. , 1.69593, 1.9246 ],
1578
+ [ 0. , 2.59153, 3.23942],
1579
+ [ 0. , -3.23942, 2.59153]])
1580
+ """
1581
+ w, v = _asarray_validated(w), _asarray_validated(v)
1582
+
1583
+ # check dimensions
1584
+ if w.ndim < 1:
1585
+ raise ValueError('expected w to be at least 1D')
1586
+ if v.ndim < 2:
1587
+ raise ValueError('expected v to be at least 2D')
1588
+ if v.ndim != w.ndim + 1:
1589
+ raise ValueError('expected eigenvectors array to have exactly one '
1590
+ 'dimension more than eigenvalues array')
1591
+
1592
+ # check shapes
1593
+ n = w.shape[-1]
1594
+ M = w.shape[:-1]
1595
+ if v.shape[-2] != v.shape[-1]:
1596
+ raise ValueError('expected v to be a square matrix or stacked square '
1597
+ 'matrices: v.shape[-2] = v.shape[-1]')
1598
+ if v.shape[-1] != n:
1599
+ raise ValueError('expected the same number of eigenvalues as '
1600
+ 'eigenvectors')
1601
+
1602
+ # get indices for each first pair of complex eigenvalues
1603
+ complex_mask = iscomplex(w)
1604
+ n_complex = complex_mask.sum(axis=-1)
1605
+
1606
+ # check if all complex eigenvalues have conjugate pairs
1607
+ if not (n_complex % 2 == 0).all():
1608
+ raise ValueError('expected complex-conjugate pairs of eigenvalues')
1609
+
1610
+ # find complex indices
1611
+ idx = nonzero(complex_mask)
1612
+ idx_stack = idx[:-1]
1613
+ idx_elem = idx[-1]
1614
+
1615
+ # filter them to conjugate indices, assuming pairs are not interleaved
1616
+ j = idx_elem[0::2]
1617
+ k = idx_elem[1::2]
1618
+ stack_ind = ()
1619
+ for i in idx_stack:
1620
+ # should never happen, assuming nonzero orders by the last axis
1621
+ assert (i[0::2] == i[1::2]).all(), \
1622
+ "Conjugate pair spanned different arrays!"
1623
+ stack_ind += (i[0::2],)
1624
+
1625
+ # all eigenvalues to diagonal form
1626
+ wr = zeros(M + (n, n), dtype=w.real.dtype)
1627
+ di = range(n)
1628
+ wr[..., di, di] = w.real
1629
+
1630
+ # complex eigenvalues to real block diagonal form
1631
+ wr[stack_ind + (j, k)] = w[stack_ind + (j,)].imag
1632
+ wr[stack_ind + (k, j)] = w[stack_ind + (k,)].imag
1633
+
1634
+ # compute real eigenvectors associated with real block diagonal eigenvalues
1635
+ u = zeros(M + (n, n), dtype=np.cdouble)
1636
+ u[..., di, di] = 1.0
1637
+ u[stack_ind + (j, j)] = 0.5j
1638
+ u[stack_ind + (j, k)] = 0.5
1639
+ u[stack_ind + (k, j)] = -0.5j
1640
+ u[stack_ind + (k, k)] = 0.5
1641
+
1642
+ # multiply matrices v and u (equivalent to v @ u)
1643
+ vr = einsum('...ij,...jk->...ik', v, u).real
1644
+
1645
+ return wr, vr