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,1322 @@
1
+ import math
2
+ import warnings
3
+
4
+ import numpy as np
5
+ from numpy.lib.stride_tricks import as_strided
6
+ from scipy._lib._util import _apply_over_batch
7
+
8
+
9
+ __all__ = ['toeplitz', 'circulant', 'hankel',
10
+ 'hadamard', 'leslie', 'kron', 'block_diag', 'companion',
11
+ 'helmert', 'hilbert', 'invhilbert', 'pascal', 'invpascal', 'dft',
12
+ 'fiedler', 'fiedler_companion', 'convolution_matrix']
13
+
14
+
15
+ # -----------------------------------------------------------------------------
16
+ # matrix construction functions
17
+ # -----------------------------------------------------------------------------
18
+
19
+
20
+ def toeplitz(c, r=None):
21
+ r"""
22
+ Construct a Toeplitz matrix.
23
+
24
+ The Toeplitz matrix has constant diagonals, with c as its first column
25
+ and r as its first row. If r is not given, ``r == conjugate(c)`` is
26
+ assumed.
27
+
28
+ Parameters
29
+ ----------
30
+ c : array_like
31
+ First column of the matrix.
32
+ r : array_like, optional
33
+ First row of the matrix. If None, ``r = conjugate(c)`` is assumed;
34
+ in this case, if c[0] is real, the result is a Hermitian matrix.
35
+ r[0] is ignored; the first row of the returned matrix is
36
+ ``[c[0], r[1:]]``.
37
+
38
+ .. warning::
39
+
40
+ Beginning in SciPy 1.17, multidimensional input will be treated as a batch,
41
+ not ``ravel``\ ed. To preserve the existing behavior, ``ravel`` arguments
42
+ before passing them to `toeplitz`.
43
+
44
+ Returns
45
+ -------
46
+ A : (len(c), len(r)) ndarray
47
+ The Toeplitz matrix. Dtype is the same as ``(c[0] + r[0]).dtype``.
48
+
49
+ See Also
50
+ --------
51
+ circulant : circulant matrix
52
+ hankel : Hankel matrix
53
+ solve_toeplitz : Solve a Toeplitz system.
54
+
55
+ Notes
56
+ -----
57
+ The behavior when `c` or `r` is a scalar, or when `c` is complex and
58
+ `r` is None, was changed in version 0.8.0. The behavior in previous
59
+ versions was undocumented and is no longer supported.
60
+
61
+ Examples
62
+ --------
63
+ >>> from scipy.linalg import toeplitz
64
+ >>> toeplitz([1,2,3], [1,4,5,6])
65
+ array([[1, 4, 5, 6],
66
+ [2, 1, 4, 5],
67
+ [3, 2, 1, 4]])
68
+ >>> toeplitz([1.0, 2+3j, 4-1j])
69
+ array([[ 1.+0.j, 2.-3.j, 4.+1.j],
70
+ [ 2.+3.j, 1.+0.j, 2.-3.j],
71
+ [ 4.-1.j, 2.+3.j, 1.+0.j]])
72
+
73
+ """
74
+ c = np.asarray(c)
75
+ if r is None:
76
+ r = c.conjugate()
77
+ else:
78
+ r = np.asarray(r)
79
+
80
+ if c.ndim > 1 or r.ndim > 1:
81
+ msg = ("Beginning in SciPy 1.17, multidimensional input will be treated as a "
82
+ "batch, not `ravel`ed. To preserve the existing behavior and silence "
83
+ "this warning, `ravel` arguments before passing them to `toeplitz`.")
84
+ warnings.warn(msg, FutureWarning, stacklevel=2)
85
+
86
+ c, r = c.ravel(), r.ravel()
87
+ # Form a 1-D array containing a reversed c followed by r[1:] that could be
88
+ # strided to give us toeplitz matrix.
89
+ vals = np.concatenate((c[::-1], r[1:]))
90
+ out_shp = len(c), len(r)
91
+ n = vals.strides[0]
92
+ return as_strided(vals[len(c)-1:], shape=out_shp, strides=(-n, n)).copy()
93
+
94
+
95
+ def circulant(c):
96
+ """
97
+ Construct a circulant matrix.
98
+
99
+ Parameters
100
+ ----------
101
+ c : (..., N,) array_like
102
+ The first column(s) of the matrix. Multidimensional arrays are treated as a
103
+ batch: each slice along the last axis is the first column of an output matrix.
104
+
105
+ Returns
106
+ -------
107
+ A : (..., N, N) ndarray
108
+ A circulant matrix whose first column is given by `c`. For batch input, each
109
+ slice of shape ``(N, N)`` along the last two dimensions of the output
110
+ corresponds with a slice of shape ``(N,)`` along the last dimension of the
111
+ input.
112
+
113
+
114
+ See Also
115
+ --------
116
+ toeplitz : Toeplitz matrix
117
+ hankel : Hankel matrix
118
+ solve_circulant : Solve a circulant system.
119
+
120
+ Notes
121
+ -----
122
+ .. versionadded:: 0.8.0
123
+
124
+ Examples
125
+ --------
126
+ >>> from scipy.linalg import circulant
127
+ >>> circulant([1, 2, 3])
128
+ array([[1, 3, 2],
129
+ [2, 1, 3],
130
+ [3, 2, 1]])
131
+
132
+ >>> circulant([[1, 2, 3], [4, 5, 6]])
133
+ array([[[1, 3, 2],
134
+ [2, 1, 3],
135
+ [3, 2, 1]],
136
+ [[4, 6, 5],
137
+ [5, 4, 6],
138
+ [6, 5, 4]]])
139
+ """
140
+ c = np.atleast_1d(c)
141
+ batch_shape, N = c.shape[:-1], c.shape[-1]
142
+ # Need to use `prod(batch_shape)` instead of `-1` in case array has zero size
143
+ c = c.reshape(math.prod(batch_shape), N) if batch_shape else c
144
+ # Form an extended array that could be strided to give circulant version
145
+ c_ext = np.concatenate((c[..., ::-1], c[..., :0:-1]), axis=-1).ravel()
146
+ L = c.shape[-1]
147
+ n = c_ext.strides[-1]
148
+ if c.ndim == 1:
149
+ A = as_strided(c_ext[L-1:], shape=(L, L), strides=(-n, n))
150
+ else:
151
+ m = c.shape[0]
152
+ A = as_strided(c_ext[L-1:], shape=(m, L, L), strides=(n*(2*L-1), -n, n))
153
+ return A.reshape(batch_shape + (N, N)).copy()
154
+
155
+
156
+ def hankel(c, r=None):
157
+ """
158
+ Construct a Hankel matrix.
159
+
160
+ The Hankel matrix has constant anti-diagonals, with `c` as its
161
+ first column and `r` as its last row. If the first element of `r`
162
+ differs from the last element of `c`, the first element of `r` is
163
+ replaced by the last element of `c` to ensure that anti-diagonals
164
+ remain constant. If `r` is not given, then `r = zeros_like(c)` is
165
+ assumed.
166
+
167
+ Parameters
168
+ ----------
169
+ c : array_like
170
+ First column of the matrix. Whatever the actual shape of `c`, it
171
+ will be converted to a 1-D array.
172
+ r : array_like, optional
173
+ Last row of the matrix. If None, ``r = zeros_like(c)`` is assumed.
174
+ r[0] is ignored; the last row of the returned matrix is
175
+ ``[c[-1], r[1:]]``. Whatever the actual shape of `r`, it will be
176
+ converted to a 1-D array.
177
+
178
+ Returns
179
+ -------
180
+ A : (len(c), len(r)) ndarray
181
+ The Hankel matrix. Dtype is the same as ``(c[0] + r[0]).dtype``.
182
+
183
+ See Also
184
+ --------
185
+ toeplitz : Toeplitz matrix
186
+ circulant : circulant matrix
187
+
188
+ Examples
189
+ --------
190
+ >>> from scipy.linalg import hankel
191
+ >>> hankel([1, 17, 99])
192
+ array([[ 1, 17, 99],
193
+ [17, 99, 0],
194
+ [99, 0, 0]])
195
+ >>> hankel([1,2,3,4], [4,7,7,8,9])
196
+ array([[1, 2, 3, 4, 7],
197
+ [2, 3, 4, 7, 7],
198
+ [3, 4, 7, 7, 8],
199
+ [4, 7, 7, 8, 9]])
200
+
201
+ """
202
+ c = np.asarray(c).ravel()
203
+ if r is None:
204
+ r = np.zeros_like(c)
205
+ else:
206
+ r = np.asarray(r).ravel()
207
+ # Form a 1-D array of values to be used in the matrix, containing `c`
208
+ # followed by r[1:].
209
+ vals = np.concatenate((c, r[1:]))
210
+ # Stride on concatenated array to get hankel matrix
211
+ out_shp = len(c), len(r)
212
+ n = vals.strides[0]
213
+ return as_strided(vals, shape=out_shp, strides=(n, n)).copy()
214
+
215
+
216
+ def hadamard(n, dtype=int):
217
+ """
218
+ Construct an Hadamard matrix.
219
+
220
+ Constructs an n-by-n Hadamard matrix, using Sylvester's
221
+ construction. `n` must be a power of 2.
222
+
223
+ Parameters
224
+ ----------
225
+ n : int
226
+ The order of the matrix. `n` must be a power of 2.
227
+ dtype : dtype, optional
228
+ The data type of the array to be constructed.
229
+
230
+ Returns
231
+ -------
232
+ H : (n, n) ndarray
233
+ The Hadamard matrix.
234
+
235
+ Notes
236
+ -----
237
+ .. versionadded:: 0.8.0
238
+
239
+ Examples
240
+ --------
241
+ >>> from scipy.linalg import hadamard
242
+ >>> hadamard(2, dtype=complex)
243
+ array([[ 1.+0.j, 1.+0.j],
244
+ [ 1.+0.j, -1.-0.j]])
245
+ >>> hadamard(4)
246
+ array([[ 1, 1, 1, 1],
247
+ [ 1, -1, 1, -1],
248
+ [ 1, 1, -1, -1],
249
+ [ 1, -1, -1, 1]])
250
+
251
+ """
252
+
253
+ # This function is a slightly modified version of the
254
+ # function contributed by Ivo in ticket #675.
255
+
256
+ if n < 1:
257
+ lg2 = 0
258
+ else:
259
+ lg2 = int(math.log(n, 2))
260
+ if 2 ** lg2 != n:
261
+ raise ValueError("n must be an positive integer, and n must be "
262
+ "a power of 2")
263
+
264
+ H = np.array([[1]], dtype=dtype)
265
+
266
+ # Sylvester's construction
267
+ for i in range(0, lg2):
268
+ H = np.vstack((np.hstack((H, H)), np.hstack((H, -H))))
269
+
270
+ return H
271
+
272
+
273
+ @_apply_over_batch(("f", 1), ("s", 1))
274
+ def leslie(f, s):
275
+ """
276
+ Create a Leslie matrix.
277
+
278
+ Given the length n array of fecundity coefficients `f` and the length
279
+ n-1 array of survival coefficients `s`, return the associated Leslie
280
+ matrix.
281
+
282
+ Parameters
283
+ ----------
284
+ f : (N,) array_like
285
+ The "fecundity" coefficients.
286
+ s : (N-1,) array_like
287
+ The "survival" coefficients. The length of `s` must be one less
288
+ than the length of `f`, and it must be at least 1.
289
+
290
+ Returns
291
+ -------
292
+ L : (N, N) ndarray
293
+ The array is zero except for the first row,
294
+ which is `f`, and the first sub-diagonal, which is `s`.
295
+ The data-type of the array will be the data-type of
296
+ ``f[0]+s[0]``.
297
+
298
+ Notes
299
+ -----
300
+ The Leslie matrix is used to model discrete-time, age-structured
301
+ population growth [1]_ [2]_. In a population with `n` age classes, two sets
302
+ of parameters define a Leslie matrix: the `n` "fecundity coefficients",
303
+ which give the number of offspring per-capita produced by each age
304
+ class, and the `n` - 1 "survival coefficients", which give the
305
+ per-capita survival rate of each age class.
306
+
307
+ References
308
+ ----------
309
+ .. [1] P. H. Leslie, On the use of matrices in certain population
310
+ mathematics, Biometrika, Vol. 33, No. 3, 183--212 (Nov. 1945)
311
+ .. [2] P. H. Leslie, Some further notes on the use of matrices in
312
+ population mathematics, Biometrika, Vol. 35, No. 3/4, 213--245
313
+ (Dec. 1948)
314
+
315
+ Examples
316
+ --------
317
+ >>> from scipy.linalg import leslie
318
+ >>> leslie([0.1, 2.0, 1.0, 0.1], [0.2, 0.8, 0.7])
319
+ array([[ 0.1, 2. , 1. , 0.1],
320
+ [ 0.2, 0. , 0. , 0. ],
321
+ [ 0. , 0.8, 0. , 0. ],
322
+ [ 0. , 0. , 0.7, 0. ]])
323
+
324
+ """
325
+ f = np.atleast_1d(f)
326
+ s = np.atleast_1d(s)
327
+
328
+ if f.shape[-1] != s.shape[-1] + 1:
329
+ raise ValueError("Incorrect lengths for f and s. The length of s along "
330
+ "the last axis must be one less than the length of f.")
331
+ if s.shape[-1] == 0:
332
+ raise ValueError("The length of s must be at least 1.")
333
+
334
+ n = f.shape[-1]
335
+ tmp = f[0] + s[0]
336
+ a = np.zeros((n, n), dtype=tmp.dtype)
337
+ a[0] = f
338
+ a[list(range(1, n)), list(range(0, n - 1))] = s
339
+ return a
340
+
341
+
342
+ def kron(a, b):
343
+ """
344
+ Kronecker product.
345
+
346
+ .. deprecated:: 1.15.0
347
+ `kron` has been deprecated in favour of `numpy.kron` and will be
348
+ removed in SciPy 1.17.0.
349
+
350
+ The result is the block matrix::
351
+
352
+ a[0,0]*b a[0,1]*b ... a[0,-1]*b
353
+ a[1,0]*b a[1,1]*b ... a[1,-1]*b
354
+ ...
355
+ a[-1,0]*b a[-1,1]*b ... a[-1,-1]*b
356
+
357
+ Parameters
358
+ ----------
359
+ a : (M, N) ndarray
360
+ Input array
361
+ b : (P, Q) ndarray
362
+ Input array
363
+
364
+ Returns
365
+ -------
366
+ A : (M*P, N*Q) ndarray
367
+ Kronecker product of `a` and `b`.
368
+
369
+ Examples
370
+ --------
371
+ >>> from numpy import array
372
+ >>> from scipy.linalg import kron
373
+ >>> kron(array([[1,2],[3,4]]), array([[1,1,1]]))
374
+ array([[1, 1, 1, 2, 2, 2],
375
+ [3, 3, 3, 4, 4, 4]])
376
+
377
+ """
378
+ msg = ("`kron` has been deprecated in favour of `numpy.kron` in SciPy"
379
+ " 1.15.0 and will be removed in SciPy 1.17.0.")
380
+ warnings.warn(msg, DeprecationWarning, stacklevel=2)
381
+ # accommodate empty arrays
382
+ if a.size == 0 or b.size == 0:
383
+ m = a.shape[0] * b.shape[0]
384
+ n = a.shape[1] * b.shape[1]
385
+ return np.empty_like(a, shape=(m, n))
386
+
387
+ if not a.flags['CONTIGUOUS']:
388
+ a = np.reshape(a, a.shape)
389
+ if not b.flags['CONTIGUOUS']:
390
+ b = np.reshape(b, b.shape)
391
+ o = np.outer(a, b)
392
+ o = o.reshape(a.shape + b.shape)
393
+ return np.concatenate(np.concatenate(o, axis=1), axis=1)
394
+
395
+
396
+ def block_diag(*arrs):
397
+ """
398
+ Create a block diagonal array from provided arrays.
399
+
400
+ For example, given 2-D inputs `A`, `B` and `C`, the output will have these
401
+ arrays arranged on the diagonal::
402
+
403
+ [[A, 0, 0],
404
+ [0, B, 0],
405
+ [0, 0, C]]
406
+
407
+ Parameters
408
+ ----------
409
+ A, B, C, ... : array_like
410
+ Input arrays. A 1-D array or array_like sequence of length ``n`` is
411
+ treated as a 2-D array with shape ``(1, n)``. Any dimensions before
412
+ the last two are treated as batch dimensions; see :ref:`linalg_batch`.
413
+
414
+ Returns
415
+ -------
416
+ D : ndarray
417
+ Array with `A`, `B`, `C`, ... on the diagonal of the last two
418
+ dimensions. `D` has the same dtype as the result type of the
419
+ inputs.
420
+
421
+ Notes
422
+ -----
423
+ If all the input arrays are square, the output is known as a
424
+ block diagonal matrix.
425
+
426
+ Empty sequences (i.e., array-likes of zero size) will not be ignored.
427
+ Noteworthy, both ``[]`` and ``[[]]`` are treated as matrices with shape
428
+ ``(1,0)``.
429
+
430
+ Examples
431
+ --------
432
+ >>> import numpy as np
433
+ >>> from scipy.linalg import block_diag
434
+ >>> A = [[1, 0],
435
+ ... [0, 1]]
436
+ >>> B = [[3, 4, 5],
437
+ ... [6, 7, 8]]
438
+ >>> C = [[7]]
439
+ >>> P = np.zeros((2, 0), dtype='int32')
440
+ >>> block_diag(A, B, C)
441
+ array([[1, 0, 0, 0, 0, 0],
442
+ [0, 1, 0, 0, 0, 0],
443
+ [0, 0, 3, 4, 5, 0],
444
+ [0, 0, 6, 7, 8, 0],
445
+ [0, 0, 0, 0, 0, 7]])
446
+ >>> block_diag(A, P, B, C)
447
+ array([[1, 0, 0, 0, 0, 0],
448
+ [0, 1, 0, 0, 0, 0],
449
+ [0, 0, 0, 0, 0, 0],
450
+ [0, 0, 0, 0, 0, 0],
451
+ [0, 0, 3, 4, 5, 0],
452
+ [0, 0, 6, 7, 8, 0],
453
+ [0, 0, 0, 0, 0, 7]])
454
+ >>> block_diag(1.0, [2, 3], [[4, 5], [6, 7]])
455
+ array([[ 1., 0., 0., 0., 0.],
456
+ [ 0., 2., 3., 0., 0.],
457
+ [ 0., 0., 0., 4., 5.],
458
+ [ 0., 0., 0., 6., 7.]])
459
+
460
+ """
461
+ if arrs == ():
462
+ arrs = ([],)
463
+ arrs = [np.atleast_2d(a) for a in arrs]
464
+
465
+ batch_shapes = [a.shape[:-2] for a in arrs]
466
+ batch_shape = np.broadcast_shapes(*batch_shapes)
467
+ arrs = [np.broadcast_to(a, batch_shape + a.shape[-2:]) for a in arrs]
468
+ out_dtype = np.result_type(*[arr.dtype for arr in arrs])
469
+ block_shapes = np.array([a.shape[-2:] for a in arrs])
470
+ out = np.zeros(batch_shape + tuple(np.sum(block_shapes, axis=0)), dtype=out_dtype)
471
+
472
+ r, c = 0, 0
473
+ for i, (rr, cc) in enumerate(block_shapes):
474
+ out[..., r:r + rr, c:c + cc] = arrs[i]
475
+ r += rr
476
+ c += cc
477
+ return out
478
+
479
+
480
+ def companion(a):
481
+ """
482
+ Create a companion matrix.
483
+
484
+ Create the companion matrix [1]_ associated with the polynomial whose
485
+ coefficients are given in `a`.
486
+
487
+ Parameters
488
+ ----------
489
+ a : (..., N) array_like
490
+ 1-D array of polynomial coefficients. The length of `a` must be
491
+ at least two, and ``a[0]`` must not be zero.
492
+ M-dimensional arrays are treated as a batch: each slice along the last
493
+ axis is a 1-D array of polynomial coefficients.
494
+
495
+ Returns
496
+ -------
497
+ c : (..., N-1, N-1) ndarray
498
+ For 1-D input, the first row of `c` is ``-a[1:]/a[0]``, and the first
499
+ sub-diagonal is all ones. The data-type of the array is the same
500
+ as the data-type of ``1.0*a[0]``.
501
+ For batch input, each slice of shape ``(N-1, N-1)`` along the last two
502
+ dimensions of the output corresponds with a slice of shape ``(N,)``
503
+ along the last dimension of the input.
504
+
505
+ Raises
506
+ ------
507
+ ValueError
508
+ If any of the following are true: a) ``a.shape[-1] < 2``; b) ``a[..., 0] == 0``.
509
+
510
+ Notes
511
+ -----
512
+ .. versionadded:: 0.8.0
513
+
514
+ References
515
+ ----------
516
+ .. [1] R. A. Horn & C. R. Johnson, *Matrix Analysis*. Cambridge, UK:
517
+ Cambridge University Press, 1999, pp. 146-7.
518
+
519
+ Examples
520
+ --------
521
+ >>> from scipy.linalg import companion
522
+ >>> companion([1, -10, 31, -30])
523
+ array([[ 10., -31., 30.],
524
+ [ 1., 0., 0.],
525
+ [ 0., 1., 0.]])
526
+
527
+ """
528
+ a = np.atleast_1d(a)
529
+ n = a.shape[-1]
530
+
531
+ if n < 2:
532
+ raise ValueError("The length of `a` along the last axis must be at least 2.")
533
+
534
+ if np.any(a[..., 0] == 0):
535
+ raise ValueError("The first coefficient(s) of `a` (i.e. elements "
536
+ "of `a[..., 0]`) must not be zero.")
537
+
538
+ first_row = -a[..., 1:] / (1.0 * a[..., 0:1])
539
+ c = np.zeros(a.shape[:-1] + (n - 1, n - 1), dtype=first_row.dtype)
540
+ c[..., 0, :] = first_row
541
+ c[..., np.arange(1, n - 1), np.arange(0, n - 2)] = 1
542
+ return c
543
+
544
+
545
+ def helmert(n, full=False):
546
+ """
547
+ Create an Helmert matrix of order `n`.
548
+
549
+ This has applications in statistics, compositional or simplicial analysis,
550
+ and in Aitchison geometry.
551
+
552
+ Parameters
553
+ ----------
554
+ n : int
555
+ The size of the array to create.
556
+ full : bool, optional
557
+ If True the (n, n) ndarray will be returned.
558
+ Otherwise the submatrix that does not include the first
559
+ row will be returned.
560
+ Default: False.
561
+
562
+ Returns
563
+ -------
564
+ M : ndarray
565
+ The Helmert matrix.
566
+ The shape is (n, n) or (n-1, n) depending on the `full` argument.
567
+
568
+ Examples
569
+ --------
570
+ >>> from scipy.linalg import helmert
571
+ >>> helmert(5, full=True)
572
+ array([[ 0.4472136 , 0.4472136 , 0.4472136 , 0.4472136 , 0.4472136 ],
573
+ [ 0.70710678, -0.70710678, 0. , 0. , 0. ],
574
+ [ 0.40824829, 0.40824829, -0.81649658, 0. , 0. ],
575
+ [ 0.28867513, 0.28867513, 0.28867513, -0.8660254 , 0. ],
576
+ [ 0.2236068 , 0.2236068 , 0.2236068 , 0.2236068 , -0.89442719]])
577
+
578
+ """
579
+ H = np.tril(np.ones((n, n)), -1) - np.diag(np.arange(n))
580
+ d = np.arange(n) * np.arange(1, n+1)
581
+ H[0] = 1
582
+ d[0] = n
583
+ H_full = H / np.sqrt(d)[:, np.newaxis]
584
+ if full:
585
+ return H_full
586
+ else:
587
+ return H_full[1:]
588
+
589
+
590
+ def hilbert(n):
591
+ """
592
+ Create a Hilbert matrix of order `n`.
593
+
594
+ Returns the `n` by `n` array with entries `h[i,j] = 1 / (i + j + 1)`.
595
+
596
+ Parameters
597
+ ----------
598
+ n : int
599
+ The size of the array to create.
600
+
601
+ Returns
602
+ -------
603
+ h : (n, n) ndarray
604
+ The Hilbert matrix.
605
+
606
+ See Also
607
+ --------
608
+ invhilbert : Compute the inverse of a Hilbert matrix.
609
+
610
+ Notes
611
+ -----
612
+ .. versionadded:: 0.10.0
613
+
614
+ Examples
615
+ --------
616
+ >>> from scipy.linalg import hilbert
617
+ >>> hilbert(3)
618
+ array([[ 1. , 0.5 , 0.33333333],
619
+ [ 0.5 , 0.33333333, 0.25 ],
620
+ [ 0.33333333, 0.25 , 0.2 ]])
621
+
622
+ """
623
+ values = 1.0 / (1.0 + np.arange(2 * n - 1))
624
+ h = hankel(values[:n], r=values[n - 1:])
625
+ return h
626
+
627
+
628
+ def invhilbert(n, exact=False):
629
+ """
630
+ Compute the inverse of the Hilbert matrix of order `n`.
631
+
632
+ The entries in the inverse of a Hilbert matrix are integers. When `n`
633
+ is greater than 14, some entries in the inverse exceed the upper limit
634
+ of 64 bit integers. The `exact` argument provides two options for
635
+ dealing with these large integers.
636
+
637
+ Parameters
638
+ ----------
639
+ n : int
640
+ The order of the Hilbert matrix.
641
+ exact : bool, optional
642
+ If False, the data type of the array that is returned is np.float64,
643
+ and the array is an approximation of the inverse.
644
+ If True, the array is the exact integer inverse array. To represent
645
+ the exact inverse when n > 14, the returned array is an object array
646
+ of long integers. For n <= 14, the exact inverse is returned as an
647
+ array with data type np.int64.
648
+
649
+ Returns
650
+ -------
651
+ invh : (n, n) ndarray
652
+ The data type of the array is np.float64 if `exact` is False.
653
+ If `exact` is True, the data type is either np.int64 (for n <= 14)
654
+ or object (for n > 14). In the latter case, the objects in the
655
+ array will be long integers.
656
+
657
+ See Also
658
+ --------
659
+ hilbert : Create a Hilbert matrix.
660
+
661
+ Notes
662
+ -----
663
+ .. versionadded:: 0.10.0
664
+
665
+ Examples
666
+ --------
667
+ >>> from scipy.linalg import invhilbert
668
+ >>> invhilbert(4)
669
+ array([[ 16., -120., 240., -140.],
670
+ [ -120., 1200., -2700., 1680.],
671
+ [ 240., -2700., 6480., -4200.],
672
+ [ -140., 1680., -4200., 2800.]])
673
+ >>> invhilbert(4, exact=True)
674
+ array([[ 16, -120, 240, -140],
675
+ [ -120, 1200, -2700, 1680],
676
+ [ 240, -2700, 6480, -4200],
677
+ [ -140, 1680, -4200, 2800]], dtype=int64)
678
+ >>> invhilbert(16)[7,7]
679
+ 4.2475099528537506e+19
680
+ >>> invhilbert(16, exact=True)[7,7]
681
+ 42475099528537378560
682
+
683
+ """
684
+ from scipy.special import comb
685
+ if exact:
686
+ if n > 14:
687
+ dtype = object
688
+ else:
689
+ dtype = np.int64
690
+ else:
691
+ dtype = np.float64
692
+ invh = np.empty((n, n), dtype=dtype)
693
+ for i in range(n):
694
+ for j in range(0, i + 1):
695
+ s = i + j
696
+ invh[i, j] = ((-1) ** s * (s + 1) *
697
+ comb(n + i, n - j - 1, exact=exact) *
698
+ comb(n + j, n - i - 1, exact=exact) *
699
+ comb(s, i, exact=exact) ** 2)
700
+ if i != j:
701
+ invh[j, i] = invh[i, j]
702
+ return invh
703
+
704
+
705
+ def pascal(n, kind='symmetric', exact=True):
706
+ """
707
+ Returns the n x n Pascal matrix.
708
+
709
+ The Pascal matrix is a matrix containing the binomial coefficients as
710
+ its elements.
711
+
712
+ Parameters
713
+ ----------
714
+ n : int
715
+ The size of the matrix to create; that is, the result is an n x n
716
+ matrix.
717
+ kind : str, optional
718
+ Must be one of 'symmetric', 'lower', or 'upper'.
719
+ Default is 'symmetric'.
720
+ exact : bool, optional
721
+ If `exact` is True, the result is either an array of type
722
+ numpy.uint64 (if n < 35) or an object array of Python long integers.
723
+ If `exact` is False, the coefficients in the matrix are computed using
724
+ `scipy.special.comb` with ``exact=False``. The result will be a floating
725
+ point array, and the values in the array will not be the exact
726
+ coefficients, but this version is much faster than ``exact=True``.
727
+
728
+ Returns
729
+ -------
730
+ p : (n, n) ndarray
731
+ The Pascal matrix.
732
+
733
+ See Also
734
+ --------
735
+ invpascal
736
+
737
+ Notes
738
+ -----
739
+ See https://en.wikipedia.org/wiki/Pascal_matrix for more information
740
+ about Pascal matrices.
741
+
742
+ .. versionadded:: 0.11.0
743
+
744
+ Examples
745
+ --------
746
+ >>> from scipy.linalg import pascal
747
+ >>> pascal(4)
748
+ array([[ 1, 1, 1, 1],
749
+ [ 1, 2, 3, 4],
750
+ [ 1, 3, 6, 10],
751
+ [ 1, 4, 10, 20]], dtype=uint64)
752
+ >>> pascal(4, kind='lower')
753
+ array([[1, 0, 0, 0],
754
+ [1, 1, 0, 0],
755
+ [1, 2, 1, 0],
756
+ [1, 3, 3, 1]], dtype=uint64)
757
+ >>> pascal(50)[-1, -1]
758
+ 25477612258980856902730428600
759
+ >>> from scipy.special import comb
760
+ >>> comb(98, 49, exact=True)
761
+ 25477612258980856902730428600
762
+
763
+ """
764
+
765
+ from scipy.special import comb
766
+ if kind not in ['symmetric', 'lower', 'upper']:
767
+ raise ValueError("kind must be 'symmetric', 'lower', or 'upper'")
768
+
769
+ if exact:
770
+ if n >= 35:
771
+ L_n = np.empty((n, n), dtype=object)
772
+ L_n.fill(0)
773
+ else:
774
+ L_n = np.zeros((n, n), dtype=np.uint64)
775
+ for i in range(n):
776
+ for j in range(i + 1):
777
+ L_n[i, j] = comb(i, j, exact=True)
778
+ else:
779
+ L_n = comb(*np.ogrid[:n, :n])
780
+
781
+ if kind == 'lower':
782
+ p = L_n
783
+ elif kind == 'upper':
784
+ p = L_n.T
785
+ else:
786
+ p = np.dot(L_n, L_n.T)
787
+
788
+ return p
789
+
790
+
791
+ def invpascal(n, kind='symmetric', exact=True):
792
+ """
793
+ Returns the inverse of the n x n Pascal matrix.
794
+
795
+ The Pascal matrix is a matrix containing the binomial coefficients as
796
+ its elements.
797
+
798
+ Parameters
799
+ ----------
800
+ n : int
801
+ The size of the matrix to create; that is, the result is an n x n
802
+ matrix.
803
+ kind : str, optional
804
+ Must be one of 'symmetric', 'lower', or 'upper'.
805
+ Default is 'symmetric'.
806
+ exact : bool, optional
807
+ If `exact` is True, the result is either an array of type
808
+ ``numpy.int64`` (if `n` <= 35) or an object array of Python integers.
809
+ If `exact` is False, the coefficients in the matrix are computed using
810
+ `scipy.special.comb` with `exact=False`. The result will be a floating
811
+ point array, and for large `n`, the values in the array will not be the
812
+ exact coefficients.
813
+
814
+ Returns
815
+ -------
816
+ invp : (n, n) ndarray
817
+ The inverse of the Pascal matrix.
818
+
819
+ See Also
820
+ --------
821
+ pascal
822
+
823
+ Notes
824
+ -----
825
+
826
+ .. versionadded:: 0.16.0
827
+
828
+ References
829
+ ----------
830
+ .. [1] "Pascal matrix", https://en.wikipedia.org/wiki/Pascal_matrix
831
+ .. [2] Cohen, A. M., "The inverse of a Pascal matrix", Mathematical
832
+ Gazette, 59(408), pp. 111-112, 1975.
833
+
834
+ Examples
835
+ --------
836
+ >>> from scipy.linalg import invpascal, pascal
837
+ >>> invp = invpascal(5)
838
+ >>> invp
839
+ array([[ 5, -10, 10, -5, 1],
840
+ [-10, 30, -35, 19, -4],
841
+ [ 10, -35, 46, -27, 6],
842
+ [ -5, 19, -27, 17, -4],
843
+ [ 1, -4, 6, -4, 1]])
844
+
845
+ >>> p = pascal(5)
846
+ >>> p.dot(invp)
847
+ array([[ 1., 0., 0., 0., 0.],
848
+ [ 0., 1., 0., 0., 0.],
849
+ [ 0., 0., 1., 0., 0.],
850
+ [ 0., 0., 0., 1., 0.],
851
+ [ 0., 0., 0., 0., 1.]])
852
+
853
+ An example of the use of `kind` and `exact`:
854
+
855
+ >>> invpascal(5, kind='lower', exact=False)
856
+ array([[ 1., -0., 0., -0., 0.],
857
+ [-1., 1., -0., 0., -0.],
858
+ [ 1., -2., 1., -0., 0.],
859
+ [-1., 3., -3., 1., -0.],
860
+ [ 1., -4., 6., -4., 1.]])
861
+
862
+ """
863
+ from scipy.special import comb
864
+
865
+ if kind not in ['symmetric', 'lower', 'upper']:
866
+ raise ValueError("'kind' must be 'symmetric', 'lower' or 'upper'.")
867
+
868
+ if kind == 'symmetric':
869
+ if exact:
870
+ if n > 34:
871
+ dt = object
872
+ else:
873
+ dt = np.int64
874
+ else:
875
+ dt = np.float64
876
+ invp = np.empty((n, n), dtype=dt)
877
+ for i in range(n):
878
+ for j in range(0, i + 1):
879
+ v = 0
880
+ for k in range(n - i):
881
+ v += comb(i + k, k, exact=exact) * comb(i + k, i + k - j,
882
+ exact=exact)
883
+ invp[i, j] = (-1)**(i - j) * v
884
+ if i != j:
885
+ invp[j, i] = invp[i, j]
886
+ else:
887
+ # For the 'lower' and 'upper' cases, we computer the inverse by
888
+ # changing the sign of every other diagonal of the pascal matrix.
889
+ invp = pascal(n, kind=kind, exact=exact)
890
+ if invp.dtype == np.uint64:
891
+ # This cast from np.uint64 to int64 OK, because if `kind` is not
892
+ # "symmetric", the values in invp are all much less than 2**63.
893
+ invp = invp.view(np.int64)
894
+
895
+ # The toeplitz matrix has alternating bands of 1 and -1.
896
+ invp *= toeplitz((-1)**np.arange(n)).astype(invp.dtype)
897
+
898
+ return invp
899
+
900
+
901
+ def dft(n, scale=None):
902
+ """
903
+ Discrete Fourier transform matrix.
904
+
905
+ Create the matrix that computes the discrete Fourier transform of a
906
+ sequence [1]_. The nth primitive root of unity used to generate the
907
+ matrix is exp(-2*pi*i/n), where i = sqrt(-1).
908
+
909
+ Parameters
910
+ ----------
911
+ n : int
912
+ Size the matrix to create.
913
+ scale : str, optional
914
+ Must be None, 'sqrtn', or 'n'.
915
+ If `scale` is 'sqrtn', the matrix is divided by `sqrt(n)`.
916
+ If `scale` is 'n', the matrix is divided by `n`.
917
+ If `scale` is None (the default), the matrix is not normalized, and the
918
+ return value is simply the Vandermonde matrix of the roots of unity.
919
+
920
+ Returns
921
+ -------
922
+ m : (n, n) ndarray
923
+ The DFT matrix.
924
+
925
+ Notes
926
+ -----
927
+ When `scale` is None, multiplying a vector by the matrix returned by
928
+ `dft` is mathematically equivalent to (but much less efficient than)
929
+ the calculation performed by `scipy.fft.fft`.
930
+
931
+ .. versionadded:: 0.14.0
932
+
933
+ References
934
+ ----------
935
+ .. [1] "DFT matrix", https://en.wikipedia.org/wiki/DFT_matrix
936
+
937
+ Examples
938
+ --------
939
+ >>> import numpy as np
940
+ >>> from scipy.linalg import dft
941
+ >>> np.set_printoptions(precision=2, suppress=True) # for compact output
942
+ >>> m = dft(5)
943
+ >>> m
944
+ array([[ 1. +0.j , 1. +0.j , 1. +0.j , 1. +0.j , 1. +0.j ],
945
+ [ 1. +0.j , 0.31-0.95j, -0.81-0.59j, -0.81+0.59j, 0.31+0.95j],
946
+ [ 1. +0.j , -0.81-0.59j, 0.31+0.95j, 0.31-0.95j, -0.81+0.59j],
947
+ [ 1. +0.j , -0.81+0.59j, 0.31-0.95j, 0.31+0.95j, -0.81-0.59j],
948
+ [ 1. +0.j , 0.31+0.95j, -0.81+0.59j, -0.81-0.59j, 0.31-0.95j]])
949
+ >>> x = np.array([1, 2, 3, 0, 3])
950
+ >>> m @ x # Compute the DFT of x
951
+ array([ 9. +0.j , 0.12-0.81j, -2.12+3.44j, -2.12-3.44j, 0.12+0.81j])
952
+
953
+ Verify that ``m @ x`` is the same as ``fft(x)``.
954
+
955
+ >>> from scipy.fft import fft
956
+ >>> fft(x) # Same result as m @ x
957
+ array([ 9. +0.j , 0.12-0.81j, -2.12+3.44j, -2.12-3.44j, 0.12+0.81j])
958
+ """
959
+ if scale not in [None, 'sqrtn', 'n']:
960
+ raise ValueError("scale must be None, 'sqrtn', or 'n'; "
961
+ f"{scale!r} is not valid.")
962
+
963
+ omegas = np.exp(-2j * np.pi * np.arange(n) / n).reshape(-1, 1)
964
+ m = omegas ** np.arange(n)
965
+ if scale == 'sqrtn':
966
+ m /= math.sqrt(n)
967
+ elif scale == 'n':
968
+ m /= n
969
+ return m
970
+
971
+
972
+ def fiedler(a):
973
+ """Returns a symmetric Fiedler matrix
974
+
975
+ Given an sequence of numbers `a`, Fiedler matrices have the structure
976
+ ``F[i, j] = np.abs(a[i] - a[j])``, and hence zero diagonals and nonnegative
977
+ entries. A Fiedler matrix has a dominant positive eigenvalue and other
978
+ eigenvalues are negative. Although not valid generally, for certain inputs,
979
+ the inverse and the determinant can be derived explicitly as given in [1]_.
980
+
981
+ Parameters
982
+ ----------
983
+ a : (..., n,) array_like
984
+ Coefficient array. N-dimensional arrays are treated as a batch:
985
+ each slice along the last axis is a 1-D coefficient array.
986
+
987
+ Returns
988
+ -------
989
+ F : (..., n, n) ndarray
990
+ Fiedler matrix. For batch input, each slice of shape ``(n, n)``
991
+ along the last two dimensions of the output corresponds with a
992
+ slice of shape ``(n,)`` along the last dimension of the input.
993
+
994
+ See Also
995
+ --------
996
+ circulant, toeplitz
997
+
998
+ Notes
999
+ -----
1000
+
1001
+ .. versionadded:: 1.3.0
1002
+
1003
+ References
1004
+ ----------
1005
+ .. [1] J. Todd, "Basic Numerical Mathematics: Vol.2 : Numerical Algebra",
1006
+ 1977, Birkhauser, :doi:`10.1007/978-3-0348-7286-7`
1007
+
1008
+ Examples
1009
+ --------
1010
+ >>> import numpy as np
1011
+ >>> from scipy.linalg import det, inv, fiedler
1012
+ >>> a = [1, 4, 12, 45, 77]
1013
+ >>> n = len(a)
1014
+ >>> A = fiedler(a)
1015
+ >>> A
1016
+ array([[ 0, 3, 11, 44, 76],
1017
+ [ 3, 0, 8, 41, 73],
1018
+ [11, 8, 0, 33, 65],
1019
+ [44, 41, 33, 0, 32],
1020
+ [76, 73, 65, 32, 0]])
1021
+
1022
+ The explicit formulas for determinant and inverse seem to hold only for
1023
+ monotonically increasing/decreasing arrays. Note the tridiagonal structure
1024
+ and the corners.
1025
+
1026
+ >>> Ai = inv(A)
1027
+ >>> Ai[np.abs(Ai) < 1e-12] = 0. # cleanup the numerical noise for display
1028
+ >>> Ai
1029
+ array([[-0.16008772, 0.16666667, 0. , 0. , 0.00657895],
1030
+ [ 0.16666667, -0.22916667, 0.0625 , 0. , 0. ],
1031
+ [ 0. , 0.0625 , -0.07765152, 0.01515152, 0. ],
1032
+ [ 0. , 0. , 0.01515152, -0.03077652, 0.015625 ],
1033
+ [ 0.00657895, 0. , 0. , 0.015625 , -0.00904605]])
1034
+ >>> det(A)
1035
+ 15409151.999999998
1036
+ >>> (-1)**(n-1) * 2**(n-2) * np.diff(a).prod() * (a[-1] - a[0])
1037
+ 15409152
1038
+
1039
+ """
1040
+ a = np.atleast_1d(a)
1041
+
1042
+ if a.ndim > 1:
1043
+ return np.apply_along_axis(fiedler, -1, a)
1044
+
1045
+ if a.size == 0:
1046
+ return np.array([], dtype=float)
1047
+ elif a.size == 1:
1048
+ return np.array([[0.]])
1049
+ else:
1050
+ return np.abs(a[:, None] - a)
1051
+
1052
+
1053
+ def fiedler_companion(a):
1054
+ """ Returns a Fiedler companion matrix
1055
+
1056
+ Given a polynomial coefficient array ``a``, this function forms a
1057
+ pentadiagonal matrix with a special structure whose eigenvalues coincides
1058
+ with the roots of ``a``.
1059
+
1060
+ Parameters
1061
+ ----------
1062
+ a : (..., N) array_like
1063
+ 1-D array of polynomial coefficients in descending order with a nonzero
1064
+ leading coefficient. For ``N < 2``, an empty array is returned.
1065
+ N-dimensional arrays are treated as a batch: each slice along the last
1066
+ axis is a 1-D array of polynomial coefficients.
1067
+
1068
+ Returns
1069
+ -------
1070
+ c : (..., N-1, N-1) ndarray
1071
+ Resulting companion matrix. For batch input, each slice of shape
1072
+ ``(N-1, N-1)`` along the last two dimensions of the output corresponds
1073
+ with a slice of shape ``(N,)`` along the last dimension of the input.
1074
+
1075
+ See Also
1076
+ --------
1077
+ companion
1078
+
1079
+ Notes
1080
+ -----
1081
+ Similar to `companion`, each leading coefficient along the last axis of the
1082
+ input should be nonzero.
1083
+ If the leading coefficient is not 1, other coefficients are rescaled before
1084
+ the array generation. To avoid numerical issues, it is best to provide a
1085
+ monic polynomial.
1086
+
1087
+ .. versionadded:: 1.3.0
1088
+
1089
+ References
1090
+ ----------
1091
+ .. [1] M. Fiedler, " A note on companion matrices", Linear Algebra and its
1092
+ Applications, 2003, :doi:`10.1016/S0024-3795(03)00548-2`
1093
+
1094
+ Examples
1095
+ --------
1096
+ >>> import numpy as np
1097
+ >>> from scipy.linalg import fiedler_companion, eigvals
1098
+ >>> p = np.poly(np.arange(1, 9, 2)) # [1., -16., 86., -176., 105.]
1099
+ >>> fc = fiedler_companion(p)
1100
+ >>> fc
1101
+ array([[ 16., -86., 1., 0.],
1102
+ [ 1., 0., 0., 0.],
1103
+ [ 0., 176., 0., -105.],
1104
+ [ 0., 1., 0., 0.]])
1105
+ >>> eigvals(fc)
1106
+ array([7.+0.j, 5.+0.j, 3.+0.j, 1.+0.j])
1107
+
1108
+ """
1109
+ a = np.atleast_1d(a)
1110
+
1111
+ if a.ndim > 1:
1112
+ return np.apply_along_axis(fiedler_companion, -1, a)
1113
+
1114
+ if a.size <= 2:
1115
+ if a.size == 2:
1116
+ return np.array([[-(a/a[0])[-1]]])
1117
+ return np.array([], dtype=a.dtype)
1118
+
1119
+ if a[0] == 0.:
1120
+ raise ValueError('Leading coefficient is zero.')
1121
+
1122
+ a = a/a[0]
1123
+ n = a.size - 1
1124
+ c = np.zeros((n, n), dtype=a.dtype)
1125
+ # subdiagonals
1126
+ c[range(3, n, 2), range(1, n-2, 2)] = 1.
1127
+ c[range(2, n, 2), range(1, n-1, 2)] = -a[3::2]
1128
+ # superdiagonals
1129
+ c[range(0, n-2, 2), range(2, n, 2)] = 1.
1130
+ c[range(0, n-1, 2), range(1, n, 2)] = -a[2::2]
1131
+ c[[0, 1], 0] = [-a[1], 1]
1132
+
1133
+ return c
1134
+
1135
+
1136
+ def convolution_matrix(a, n, mode='full'):
1137
+ """
1138
+ Construct a convolution matrix.
1139
+
1140
+ Constructs the Toeplitz matrix representing one-dimensional
1141
+ convolution [1]_. See the notes below for details.
1142
+
1143
+ Parameters
1144
+ ----------
1145
+ a : (..., m) array_like
1146
+ The 1-D array to convolve. N-dimensional arrays are treated as a
1147
+ batch: each slice along the last axis is a 1-D array to convolve.
1148
+ n : int
1149
+ The number of columns in the resulting matrix. It gives the length
1150
+ of the input to be convolved with `a`. This is analogous to the
1151
+ length of `v` in ``numpy.convolve(a, v)``.
1152
+ mode : str
1153
+ This is analogous to `mode` in ``numpy.convolve(v, a, mode)``.
1154
+ It must be one of ('full', 'valid', 'same').
1155
+ See below for how `mode` determines the shape of the result.
1156
+
1157
+ Returns
1158
+ -------
1159
+ A : (..., k, n) ndarray
1160
+ The convolution matrix whose row count `k` depends on `mode`::
1161
+
1162
+ ======= =========================
1163
+ mode k
1164
+ ======= =========================
1165
+ 'full' m + n -1
1166
+ 'same' max(m, n)
1167
+ 'valid' max(m, n) - min(m, n) + 1
1168
+ ======= =========================
1169
+
1170
+ For batch input, each slice of shape ``(k, n)`` along the last two
1171
+ dimensions of the output corresponds with a slice of shape ``(m,)``
1172
+ along the last dimension of the input.
1173
+
1174
+ See Also
1175
+ --------
1176
+ toeplitz : Toeplitz matrix
1177
+
1178
+ Notes
1179
+ -----
1180
+ The code::
1181
+
1182
+ A = convolution_matrix(a, n, mode)
1183
+
1184
+ creates a Toeplitz matrix `A` such that ``A @ v`` is equivalent to
1185
+ using ``convolve(a, v, mode)``. The returned array always has `n`
1186
+ columns. The number of rows depends on the specified `mode`, as
1187
+ explained above.
1188
+
1189
+ In the default 'full' mode, the entries of `A` are given by::
1190
+
1191
+ A[i, j] == (a[i-j] if (0 <= (i-j) < m) else 0)
1192
+
1193
+ where ``m = len(a)``. Suppose, for example, the input array is
1194
+ ``[x, y, z]``. The convolution matrix has the form::
1195
+
1196
+ [x, 0, 0, ..., 0, 0]
1197
+ [y, x, 0, ..., 0, 0]
1198
+ [z, y, x, ..., 0, 0]
1199
+ ...
1200
+ [0, 0, 0, ..., x, 0]
1201
+ [0, 0, 0, ..., y, x]
1202
+ [0, 0, 0, ..., z, y]
1203
+ [0, 0, 0, ..., 0, z]
1204
+
1205
+ In 'valid' mode, the entries of `A` are given by::
1206
+
1207
+ A[i, j] == (a[i-j+m-1] if (0 <= (i-j+m-1) < m) else 0)
1208
+
1209
+ This corresponds to a matrix whose rows are the subset of those from
1210
+ the 'full' case where all the coefficients in `a` are contained in the
1211
+ row. For input ``[x, y, z]``, this array looks like::
1212
+
1213
+ [z, y, x, 0, 0, ..., 0, 0, 0]
1214
+ [0, z, y, x, 0, ..., 0, 0, 0]
1215
+ [0, 0, z, y, x, ..., 0, 0, 0]
1216
+ ...
1217
+ [0, 0, 0, 0, 0, ..., x, 0, 0]
1218
+ [0, 0, 0, 0, 0, ..., y, x, 0]
1219
+ [0, 0, 0, 0, 0, ..., z, y, x]
1220
+
1221
+ In the 'same' mode, the entries of `A` are given by::
1222
+
1223
+ d = (m - 1) // 2
1224
+ A[i, j] == (a[i-j+d] if (0 <= (i-j+d) < m) else 0)
1225
+
1226
+ The typical application of the 'same' mode is when one has a signal of
1227
+ length `n` (with `n` greater than ``len(a)``), and the desired output
1228
+ is a filtered signal that is still of length `n`.
1229
+
1230
+ For input ``[x, y, z]``, this array looks like::
1231
+
1232
+ [y, x, 0, 0, ..., 0, 0, 0]
1233
+ [z, y, x, 0, ..., 0, 0, 0]
1234
+ [0, z, y, x, ..., 0, 0, 0]
1235
+ [0, 0, z, y, ..., 0, 0, 0]
1236
+ ...
1237
+ [0, 0, 0, 0, ..., y, x, 0]
1238
+ [0, 0, 0, 0, ..., z, y, x]
1239
+ [0, 0, 0, 0, ..., 0, z, y]
1240
+
1241
+ .. versionadded:: 1.5.0
1242
+
1243
+ References
1244
+ ----------
1245
+ .. [1] "Convolution", https://en.wikipedia.org/wiki/Convolution
1246
+
1247
+ Examples
1248
+ --------
1249
+ >>> import numpy as np
1250
+ >>> from scipy.linalg import convolution_matrix
1251
+ >>> A = convolution_matrix([-1, 4, -2], 5, mode='same')
1252
+ >>> A
1253
+ array([[ 4, -1, 0, 0, 0],
1254
+ [-2, 4, -1, 0, 0],
1255
+ [ 0, -2, 4, -1, 0],
1256
+ [ 0, 0, -2, 4, -1],
1257
+ [ 0, 0, 0, -2, 4]])
1258
+
1259
+ Compare multiplication by `A` with the use of `numpy.convolve`.
1260
+
1261
+ >>> x = np.array([1, 2, 0, -3, 0.5])
1262
+ >>> A @ x
1263
+ array([ 2. , 6. , -1. , -12.5, 8. ])
1264
+
1265
+ Verify that ``A @ x`` produced the same result as applying the
1266
+ convolution function.
1267
+
1268
+ >>> np.convolve([-1, 4, -2], x, mode='same')
1269
+ array([ 2. , 6. , -1. , -12.5, 8. ])
1270
+
1271
+ For comparison to the case ``mode='same'`` shown above, here are the
1272
+ matrices produced by ``mode='full'`` and ``mode='valid'`` for the
1273
+ same coefficients and size.
1274
+
1275
+ >>> convolution_matrix([-1, 4, -2], 5, mode='full')
1276
+ array([[-1, 0, 0, 0, 0],
1277
+ [ 4, -1, 0, 0, 0],
1278
+ [-2, 4, -1, 0, 0],
1279
+ [ 0, -2, 4, -1, 0],
1280
+ [ 0, 0, -2, 4, -1],
1281
+ [ 0, 0, 0, -2, 4],
1282
+ [ 0, 0, 0, 0, -2]])
1283
+
1284
+ >>> convolution_matrix([-1, 4, -2], 5, mode='valid')
1285
+ array([[-2, 4, -1, 0, 0],
1286
+ [ 0, -2, 4, -1, 0],
1287
+ [ 0, 0, -2, 4, -1]])
1288
+ """
1289
+ if n <= 0:
1290
+ raise ValueError('n must be a positive integer.')
1291
+
1292
+ a = np.asarray(a)
1293
+
1294
+ if a.size == 0:
1295
+ raise ValueError('len(a) must be at least 1.')
1296
+
1297
+ if mode not in ('full', 'valid', 'same'):
1298
+ raise ValueError(
1299
+ "'mode' argument must be one of ('full', 'valid', 'same')")
1300
+
1301
+ if a.ndim > 1:
1302
+ return np.apply_along_axis(lambda a: convolution_matrix(a, n, mode), -1, a)
1303
+
1304
+ # create zero padded versions of the array
1305
+ az = np.pad(a, (0, n-1), 'constant')
1306
+ raz = np.pad(a[::-1], (0, n-1), 'constant')
1307
+
1308
+ if mode == 'same':
1309
+ trim = min(n, len(a)) - 1
1310
+ tb = trim//2
1311
+ te = trim - tb
1312
+ col0 = az[tb:len(az)-te]
1313
+ row0 = raz[-n-tb:len(raz)-tb]
1314
+ elif mode == 'valid':
1315
+ tb = min(n, len(a)) - 1
1316
+ te = tb
1317
+ col0 = az[tb:len(az)-te]
1318
+ row0 = raz[-n-tb:len(raz)-tb]
1319
+ else: # 'full'
1320
+ col0 = az
1321
+ row0 = raz[-n:]
1322
+ return toeplitz(col0, row0)