scipy 1.16.2__cp314-cp314t-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.cp314t-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp314t-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.cp314t-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp314t-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.cp314t-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp314t-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.cp314t-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp314t-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp314t-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp314t-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp314t-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp314t-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.cp314t-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp314t-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.cp314t-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp314t-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.cp314t-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp314t-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp314t-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp314t-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp314t-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp314t-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.cp314t-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp314t-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.cp314t-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp314t-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.cp314t-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp314t-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.cp314t-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp314t-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp314t-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp314t-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.cp314t-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp314t-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.cp314t-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp314t-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp314t-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp314t-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp314t-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp314t-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.cp314t-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp314t-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp314t-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp314t-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp314t-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp314t-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.cp314t-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp314t-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.cp314t-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp314t-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp314t-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp314t-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp314t-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp314t-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.cp314t-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp314t-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.cp314t-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp314t-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.cp314t-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp314t-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp314t-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp314t-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp314t-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp314t-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.cp314t-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp314t-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.cp314t-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp314t-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.cp314t-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp314t-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.cp314t-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp314t-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp314t-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp314t-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp314t-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp314t-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp314t-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp314t-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp314t-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp314t-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.cp314t-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp314t-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp314t-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp314t-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.cp314t-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp314t-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.cp314t-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp314t-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.cp314t-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp314t-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.cp314t-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp314t-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp314t-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp314t-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.cp314t-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp314t-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.cp314t-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp314t-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp314t-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp314t-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.cp314t-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp314t-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.cp314t-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp314t-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.cp314t-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp314t-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.cp314t-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp314t-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.cp314t-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp314t-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp314t-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp314t-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.cp314t-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp314t-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.cp314t-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp314t-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.cp314t-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp314t-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.cp314t-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp314t-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp314t-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp314t-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.cp314t-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp314t-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.cp314t-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp314t-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.cp314t-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp314t-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.cp314t-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp314t-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.cp314t-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp314t-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.cp314t-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp314t-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp314t-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp314t-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.cp314t-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp314t-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp314t-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp314t-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp314t-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp314t-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.cp314t-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp314t-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.cp314t-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp314t-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.cp314t-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp314t-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.cp314t-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp314t-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp314t-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp314t-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp314t-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp314t-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp314t-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp314t-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp314t-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp314t-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp314t-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp314t-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp314t-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp314t-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.cp314t-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp314t-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.cp314t-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp314t-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.cp314t-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp314t-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp314t-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp314t-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp314t-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp314t-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp314t-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp314t-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.cp314t-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp314t-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp314t-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp314t-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp314t-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp314t-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp314t-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp314t-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.cp314t-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp314t-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp314t-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp314t-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.cp314t-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp314t-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp314t-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp314t-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.cp314t-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp314t-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp314t-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp314t-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp314t-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp314t-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.cp314t-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp314t-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp314t-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp314t-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.cp314t-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp314t-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp314t-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp314t-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp314t-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp314t-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.cp314t-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp314t-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.cp314t-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp314t-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp314t-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp314t-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.cp314t-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp314t-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.cp314t-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp314t-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.cp314t-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp314t-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.cp314t-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp314t-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.cp314t-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp314t-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.cp314t-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp314t-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.cp314t-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp314t-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.cp314t-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp314t-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,1454 @@
1
+ """Functions to construct sparse matrices and arrays
2
+ """
3
+
4
+ __docformat__ = "restructuredtext en"
5
+
6
+ __all__ = ['spdiags', 'eye', 'identity', 'kron', 'kronsum',
7
+ 'hstack', 'vstack', 'bmat', 'rand', 'random', 'diags', 'block_diag',
8
+ 'diags_array', 'block_array', 'eye_array', 'random_array']
9
+
10
+ import numbers
11
+ import math
12
+ import numpy as np
13
+
14
+ from scipy._lib._util import check_random_state, rng_integers, _transition_to_rng
15
+ from ._sputils import upcast, get_index_dtype, isscalarlike
16
+
17
+ from ._sparsetools import csr_hstack
18
+ from ._bsr import bsr_matrix, bsr_array
19
+ from ._coo import coo_matrix, coo_array
20
+ from ._csc import csc_matrix, csc_array
21
+ from ._csr import csr_matrix, csr_array
22
+ from ._dia import dia_matrix, dia_array
23
+
24
+ from ._base import issparse, sparray
25
+
26
+
27
+ def spdiags(data, diags, m=None, n=None, format=None):
28
+ """
29
+ Return a sparse matrix from diagonals.
30
+
31
+ .. warning::
32
+
33
+ This function returns a sparse matrix -- not a sparse array.
34
+ You are encouraged to use `dia_array` to take advantage
35
+ of the sparse array functionality. (See Notes below.)
36
+
37
+ Parameters
38
+ ----------
39
+ data : array_like
40
+ Matrix diagonals stored row-wise
41
+ diags : sequence of int or an int
42
+ Diagonals to set:
43
+
44
+ * k = 0 the main diagonal
45
+ * k > 0 the kth upper diagonal
46
+ * k < 0 the kth lower diagonal
47
+ m, n : int, tuple, optional
48
+ Shape of the result. If `n` is None and `m` is a given tuple,
49
+ the shape is this tuple. If omitted, the matrix is square and
50
+ its shape is ``len(data[0])``.
51
+ format : str, optional
52
+ Format of the result. By default (format=None) an appropriate sparse
53
+ matrix format is returned. This choice is subject to change.
54
+
55
+ Returns
56
+ -------
57
+ new_matrix : sparse matrix
58
+ `dia_matrix` format with values in ``data`` on diagonals from ``diags``.
59
+
60
+ Notes
61
+ -----
62
+ This function can be replaced by an equivalent call to `dia_matrix`
63
+ as::
64
+
65
+ dia_matrix((data, diags), shape=(m, n)).asformat(format)
66
+
67
+ See Also
68
+ --------
69
+ diags_array : more convenient form of this function
70
+ diags : matrix version of diags_array
71
+ dia_matrix : the sparse DIAgonal format.
72
+
73
+ Examples
74
+ --------
75
+ >>> import numpy as np
76
+ >>> from scipy.sparse import spdiags
77
+ >>> data = np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]])
78
+ >>> diags = np.array([0, -1, 2])
79
+ >>> spdiags(data, diags, 4, 4).toarray()
80
+ array([[1, 0, 3, 0],
81
+ [1, 2, 0, 4],
82
+ [0, 2, 3, 0],
83
+ [0, 0, 3, 4]])
84
+
85
+ """
86
+ if m is None and n is None:
87
+ m = n = len(data[0])
88
+ elif n is None:
89
+ m, n = m
90
+ return dia_matrix((data, diags), shape=(m, n)).asformat(format)
91
+
92
+
93
+ def diags_array(diagonals, /, *, offsets=0, shape=None, format=None, dtype=None):
94
+ """
95
+ Construct a sparse array from diagonals.
96
+
97
+ Parameters
98
+ ----------
99
+ diagonals : sequence of array_like
100
+ Sequence of arrays containing the array diagonals,
101
+ corresponding to `offsets`.
102
+ offsets : sequence of int or an int, optional
103
+ Diagonals to set (repeated offsets are not allowed):
104
+ - k = 0 the main diagonal (default)
105
+ - k > 0 the kth upper diagonal
106
+ - k < 0 the kth lower diagonal
107
+ shape : tuple of int, optional
108
+ Shape of the result. If omitted, a square array large enough
109
+ to contain the diagonals is returned.
110
+ format : {"dia", "csr", "csc", "lil", ...}, optional
111
+ Matrix format of the result. By default (format=None) an
112
+ appropriate sparse array format is returned. This choice is
113
+ subject to change.
114
+ dtype : dtype, optional
115
+ Data type of the array.
116
+
117
+ Returns
118
+ -------
119
+ new_array : dia_array
120
+ `dia_array` holding the values in `diagonals` offset from the main diagonal
121
+ as indicated in `offsets`.
122
+
123
+ Notes
124
+ -----
125
+ Repeated diagonal offsets are disallowed.
126
+
127
+ The result from ``diags_array`` is the sparse equivalent of::
128
+
129
+ np.diag(diagonals[0], offsets[0])
130
+ + ...
131
+ + np.diag(diagonals[k], offsets[k])
132
+
133
+ ``diags_array`` differs from `dia_array` in the way it handles off-diagonals.
134
+ Specifically, `dia_array` assumes the data input includes padding
135
+ (ignored values) at the start/end of the rows for positive/negative
136
+ offset, while ``diags_array`` assumes the input data has no padding.
137
+ Each value in the input `diagonals` is used.
138
+
139
+ .. versionadded:: 1.11
140
+
141
+ See Also
142
+ --------
143
+ dia_array : constructor for the sparse DIAgonal format.
144
+
145
+ Examples
146
+ --------
147
+ >>> from scipy.sparse import diags_array
148
+ >>> diagonals = [[1, 2, 3, 4], [1, 2, 3], [1, 2]]
149
+ >>> diags_array(diagonals, offsets=[0, -1, 2]).toarray()
150
+ array([[1., 0., 1., 0.],
151
+ [1., 2., 0., 2.],
152
+ [0., 2., 3., 0.],
153
+ [0., 0., 3., 4.]])
154
+
155
+ Broadcasting of scalars is supported (but shape needs to be
156
+ specified):
157
+
158
+ >>> diags_array([1, -2, 1], offsets=[-1, 0, 1], shape=(4, 4)).toarray()
159
+ array([[-2., 1., 0., 0.],
160
+ [ 1., -2., 1., 0.],
161
+ [ 0., 1., -2., 1.],
162
+ [ 0., 0., 1., -2.]])
163
+
164
+
165
+ If only one diagonal is wanted (as in `numpy.diag`), the following
166
+ works as well:
167
+
168
+ >>> diags_array([1, 2, 3], offsets=1).toarray()
169
+ array([[ 0., 1., 0., 0.],
170
+ [ 0., 0., 2., 0.],
171
+ [ 0., 0., 0., 3.],
172
+ [ 0., 0., 0., 0.]])
173
+
174
+ """
175
+ # if offsets is not a sequence, assume that there's only one diagonal
176
+ if isscalarlike(offsets):
177
+ # now check that there's actually only one diagonal
178
+ if len(diagonals) == 0 or isscalarlike(diagonals[0]):
179
+ diagonals = [np.atleast_1d(diagonals)]
180
+ else:
181
+ raise ValueError("Different number of diagonals and offsets.")
182
+ else:
183
+ diagonals = list(map(np.atleast_1d, diagonals))
184
+
185
+ offsets = np.atleast_1d(offsets)
186
+
187
+ # Basic check
188
+ if len(diagonals) != len(offsets):
189
+ raise ValueError("Different number of diagonals and offsets.")
190
+
191
+ # Determine shape, if omitted
192
+ if shape is None:
193
+ m = len(diagonals[0]) + abs(int(offsets[0]))
194
+ shape = (m, m)
195
+
196
+ # Determine data type, if omitted
197
+ if dtype is None:
198
+ dtype = np.common_type(*diagonals)
199
+
200
+ # Construct data array
201
+ m, n = shape
202
+
203
+ M = max([min(m + offset, n - offset) + max(0, offset)
204
+ for offset in offsets])
205
+ M = max(0, M)
206
+ data_arr = np.zeros((len(offsets), M), dtype=dtype)
207
+
208
+ K = min(m, n)
209
+
210
+ for j, diagonal in enumerate(diagonals):
211
+ offset = offsets[j]
212
+ k = max(0, offset)
213
+ length = min(m + offset, n - offset, K)
214
+ if length < 0:
215
+ raise ValueError(f"Offset {offset} (index {j}) out of bounds")
216
+ try:
217
+ data_arr[j, k:k+length] = diagonal[...,:length]
218
+ except ValueError as e:
219
+ if len(diagonal) != length and len(diagonal) != 1:
220
+ raise ValueError(
221
+ f"Diagonal length (index {j}: {len(diagonal)} at"
222
+ f" offset {offset}) does not agree with array size ({m}, {n})."
223
+ ) from e
224
+ raise
225
+
226
+ return dia_array((data_arr, offsets), shape=(m, n)).asformat(format)
227
+
228
+
229
+ def diags(diagonals, offsets=0, shape=None, format=None, dtype=None):
230
+ """
231
+ Construct a sparse matrix from diagonals.
232
+
233
+ .. warning::
234
+
235
+ This function returns a sparse matrix -- not a sparse array.
236
+ You are encouraged to use `diags_array` to take advantage
237
+ of the sparse array functionality.
238
+
239
+ Parameters
240
+ ----------
241
+ diagonals : sequence of array_like
242
+ Sequence of arrays containing the matrix diagonals,
243
+ corresponding to `offsets`.
244
+ offsets : sequence of int or an int, optional
245
+ Diagonals to set (repeated offsets are not allowed):
246
+ - k = 0 the main diagonal (default)
247
+ - k > 0 the kth upper diagonal
248
+ - k < 0 the kth lower diagonal
249
+ shape : tuple of int, optional
250
+ Shape of the result. If omitted, a square matrix large enough
251
+ to contain the diagonals is returned.
252
+ format : {"dia", "csr", "csc", "lil", ...}, optional
253
+ Matrix format of the result. By default (format=None) an
254
+ appropriate sparse matrix format is returned. This choice is
255
+ subject to change.
256
+ dtype : dtype, optional
257
+ Data type of the matrix.
258
+
259
+ Returns
260
+ -------
261
+ new_matrix : dia_matrix
262
+ `dia_matrix` holding the values in `diagonals` offset from the main diagonal
263
+ as indicated in `offsets`.
264
+
265
+ Notes
266
+ -----
267
+ Repeated diagonal offsets are disallowed.
268
+
269
+ The result from ``diags`` is the sparse equivalent of::
270
+
271
+ np.diag(diagonals[0], offsets[0])
272
+ + ...
273
+ + np.diag(diagonals[k], offsets[k])
274
+
275
+ ``diags`` differs from `dia_matrix` in the way it handles off-diagonals.
276
+ Specifically, `dia_matrix` assumes the data input includes padding
277
+ (ignored values) at the start/end of the rows for positive/negative
278
+ offset, while ``diags`` assumes the input data has no padding.
279
+ Each value in the input `diagonals` is used.
280
+
281
+ .. versionadded:: 0.11
282
+
283
+ See Also
284
+ --------
285
+ spdiags : construct matrix from diagonals
286
+ diags_array : construct sparse array instead of sparse matrix
287
+
288
+ Examples
289
+ --------
290
+ >>> from scipy.sparse import diags
291
+ >>> diagonals = [[1, 2, 3, 4], [1, 2, 3], [1, 2]]
292
+ >>> diags(diagonals, [0, -1, 2]).toarray()
293
+ array([[1., 0., 1., 0.],
294
+ [1., 2., 0., 2.],
295
+ [0., 2., 3., 0.],
296
+ [0., 0., 3., 4.]])
297
+
298
+ Broadcasting of scalars is supported (but shape needs to be
299
+ specified):
300
+
301
+ >>> diags([1, -2, 1], [-1, 0, 1], shape=(4, 4)).toarray()
302
+ array([[-2., 1., 0., 0.],
303
+ [ 1., -2., 1., 0.],
304
+ [ 0., 1., -2., 1.],
305
+ [ 0., 0., 1., -2.]])
306
+
307
+
308
+ If only one diagonal is wanted (as in `numpy.diag`), the following
309
+ works as well:
310
+
311
+ >>> diags([1, 2, 3], 1).toarray()
312
+ array([[ 0., 1., 0., 0.],
313
+ [ 0., 0., 2., 0.],
314
+ [ 0., 0., 0., 3.],
315
+ [ 0., 0., 0., 0.]])
316
+
317
+ """
318
+ A = diags_array(diagonals, offsets=offsets, shape=shape, dtype=dtype)
319
+ return dia_matrix(A).asformat(format)
320
+
321
+
322
+ def identity(n, dtype='d', format=None):
323
+ """Identity matrix in sparse format
324
+
325
+ Returns an identity matrix with shape ``(n, n)`` using a given
326
+ sparse format and dtype. This differs from `eye_array` in
327
+ that it has a square shape with ones only on the main diagonal.
328
+ It is thus the multiplicative identity. `eye_array` allows
329
+ rectangular shapes and the diagonal can be offset from the main one.
330
+
331
+ .. warning::
332
+
333
+ This function returns a sparse matrix -- not a sparse array.
334
+ You are encouraged to use `eye_array` to take advantage
335
+ of the sparse array functionality.
336
+
337
+ Parameters
338
+ ----------
339
+ n : int
340
+ Shape of the identity matrix.
341
+ dtype : dtype, optional
342
+ Data type of the matrix
343
+ format : str, optional
344
+ Sparse format of the result, e.g., format="csr", etc.
345
+
346
+ Returns
347
+ -------
348
+ new_matrix : sparse matrix
349
+ A square sparse matrix with ones on the main diagonal and zeros elsewhere.
350
+
351
+ See Also
352
+ --------
353
+ eye_array : Sparse array of chosen shape with ones on a specified diagonal.
354
+ eye : Sparse matrix of chosen shape with ones on a specified diagonal.
355
+
356
+ Examples
357
+ --------
358
+ >>> import scipy as sp
359
+ >>> sp.sparse.identity(3).toarray()
360
+ array([[ 1., 0., 0.],
361
+ [ 0., 1., 0.],
362
+ [ 0., 0., 1.]])
363
+ >>> sp.sparse.identity(3, dtype='int8', format='dia')
364
+ <DIAgonal sparse matrix of dtype 'int8'
365
+ with 3 stored elements (1 diagonals) and shape (3, 3)>
366
+ >>> sp.sparse.eye_array(3, dtype='int8', format='dia')
367
+ <DIAgonal sparse array of dtype 'int8'
368
+ with 3 stored elements (1 diagonals) and shape (3, 3)>
369
+
370
+ """
371
+ return eye(n, n, dtype=dtype, format=format)
372
+
373
+
374
+ def eye_array(m, n=None, *, k=0, dtype=float, format=None):
375
+ """Sparse array of chosen shape with ones on the kth diagonal and zeros elsewhere.
376
+
377
+ Return a sparse array with ones on diagonal.
378
+ Specifically a sparse array (m x n) where the kth diagonal
379
+ is all ones and everything else is zeros.
380
+
381
+ Parameters
382
+ ----------
383
+ m : int
384
+ Number of rows requested.
385
+ n : int, optional
386
+ Number of columns. Default: `m`.
387
+ k : int, optional
388
+ Diagonal to place ones on. Default: 0 (main diagonal).
389
+ dtype : dtype, optional
390
+ Data type of the array
391
+ format : str, optional (default: "dia")
392
+ Sparse format of the result, e.g., format="csr", etc.
393
+
394
+ Returns
395
+ -------
396
+ new_array : sparse array
397
+ Sparse array of chosen shape with ones on the kth diagonal and zeros elsewhere.
398
+
399
+ Examples
400
+ --------
401
+ >>> import numpy as np
402
+ >>> import scipy as sp
403
+ >>> sp.sparse.eye_array(3).toarray()
404
+ array([[ 1., 0., 0.],
405
+ [ 0., 1., 0.],
406
+ [ 0., 0., 1.]])
407
+ >>> sp.sparse.eye_array(3, dtype=np.int8)
408
+ <DIAgonal sparse array of dtype 'int8'
409
+ with 3 stored elements (1 diagonals) and shape (3, 3)>
410
+
411
+ """
412
+ # TODO: delete next 15 lines [combine with _eye()] once spmatrix removed
413
+ return _eye(m, n, k, dtype, format)
414
+
415
+
416
+ def _eye(m, n, k, dtype, format, as_sparray=True):
417
+ if as_sparray:
418
+ csr_sparse = csr_array
419
+ csc_sparse = csc_array
420
+ coo_sparse = coo_array
421
+ diags_sparse = diags_array
422
+ else:
423
+ csr_sparse = csr_matrix
424
+ csc_sparse = csc_matrix
425
+ coo_sparse = coo_matrix
426
+ diags_sparse = diags
427
+
428
+ if n is None:
429
+ n = m
430
+ m, n = int(m), int(n)
431
+
432
+ if m == n and k == 0:
433
+ # fast branch for special formats
434
+ if format in ['csr', 'csc']:
435
+ idx_dtype = get_index_dtype(maxval=n)
436
+ indptr = np.arange(n+1, dtype=idx_dtype)
437
+ indices = np.arange(n, dtype=idx_dtype)
438
+ data = np.ones(n, dtype=dtype)
439
+ cls = {'csr': csr_sparse, 'csc': csc_sparse}[format]
440
+ return cls((data, indices, indptr), (n, n))
441
+
442
+ elif format == 'coo':
443
+ idx_dtype = get_index_dtype(maxval=n)
444
+ row = np.arange(n, dtype=idx_dtype)
445
+ col = np.arange(n, dtype=idx_dtype)
446
+ data = np.ones(n, dtype=dtype)
447
+ return coo_sparse((data, (row, col)), (n, n))
448
+
449
+ data = np.ones((1, max(0, min(m + k, n))), dtype=dtype)
450
+ return diags_sparse(data, offsets=[k], shape=(m, n), dtype=dtype).asformat(format)
451
+
452
+
453
+ def eye(m, n=None, k=0, dtype=float, format=None):
454
+ """Sparse matrix of chosen shape with ones on the kth diagonal and zeros elsewhere.
455
+
456
+ Returns a sparse matrix (m x n) where the kth diagonal
457
+ is all ones and everything else is zeros.
458
+
459
+ .. warning::
460
+
461
+ This function returns a sparse matrix -- not a sparse array.
462
+ You are encouraged to use `eye_array` to take advantage
463
+ of the sparse array functionality.
464
+
465
+ Parameters
466
+ ----------
467
+ m : int
468
+ Number of rows in the matrix.
469
+ n : int, optional
470
+ Number of columns. Default: `m`.
471
+ k : int, optional
472
+ Diagonal to place ones on. Default: 0 (main diagonal).
473
+ dtype : dtype, optional
474
+ Data type of the matrix.
475
+ format : str, optional
476
+ Sparse format of the result, e.g., format="csr", etc.
477
+
478
+ Returns
479
+ -------
480
+ new_matrix : sparse matrix
481
+ Sparse matrix of chosen shape with ones on the kth diagonaland zeros elsewhere.
482
+
483
+ See Also
484
+ --------
485
+ eye_array : Sparse array of chosen shape with ones on a specified diagonal.
486
+
487
+ Examples
488
+ --------
489
+ >>> import numpy as np
490
+ >>> import scipy as sp
491
+ >>> sp.sparse.eye(3).toarray()
492
+ array([[ 1., 0., 0.],
493
+ [ 0., 1., 0.],
494
+ [ 0., 0., 1.]])
495
+ >>> sp.sparse.eye(3, dtype=np.int8)
496
+ <DIAgonal sparse matrix of dtype 'int8'
497
+ with 3 stored elements (1 diagonals) and shape (3, 3)>
498
+
499
+ """
500
+ return _eye(m, n, k, dtype, format, False)
501
+
502
+
503
+ def kron(A, B, format=None):
504
+ """kronecker product of sparse matrices A and B
505
+
506
+ Parameters
507
+ ----------
508
+ A : sparse or dense matrix
509
+ first matrix of the product
510
+ B : sparse or dense matrix
511
+ second matrix of the product
512
+ format : str, optional (default: 'bsr' or 'coo')
513
+ format of the result (e.g. "csr")
514
+ If None, choose 'bsr' for relatively dense array and 'coo' for others
515
+
516
+ Returns
517
+ -------
518
+ kronecker product in a sparse format.
519
+ Returns a sparse matrix unless either A or B is a
520
+ sparse array in which case returns a sparse array.
521
+
522
+ Examples
523
+ --------
524
+ >>> import numpy as np
525
+ >>> import scipy as sp
526
+ >>> A = sp.sparse.csr_array(np.array([[0, 2], [5, 0]]))
527
+ >>> B = sp.sparse.csr_array(np.array([[1, 2], [3, 4]]))
528
+ >>> sp.sparse.kron(A, B).toarray()
529
+ array([[ 0, 0, 2, 4],
530
+ [ 0, 0, 6, 8],
531
+ [ 5, 10, 0, 0],
532
+ [15, 20, 0, 0]])
533
+
534
+ >>> sp.sparse.kron(A, [[1, 2], [3, 4]]).toarray()
535
+ array([[ 0, 0, 2, 4],
536
+ [ 0, 0, 6, 8],
537
+ [ 5, 10, 0, 0],
538
+ [15, 20, 0, 0]])
539
+
540
+ """
541
+ # TODO: delete next 10 lines and replace _sparse with _array when spmatrix removed
542
+ if isinstance(A, sparray) or isinstance(B, sparray):
543
+ # convert to local variables
544
+ bsr_sparse = bsr_array
545
+ csr_sparse = csr_array
546
+ coo_sparse = coo_array
547
+ else: # use spmatrix
548
+ bsr_sparse = bsr_matrix
549
+ csr_sparse = csr_matrix
550
+ coo_sparse = coo_matrix
551
+
552
+ B = coo_sparse(B)
553
+ if B.ndim != 2:
554
+ raise ValueError(f"kron requires 2D input arrays. `B` is {B.ndim}D.")
555
+
556
+ # B is fairly dense, use BSR
557
+ if (format is None or format == "bsr") and 2*B.nnz >= B.shape[0] * B.shape[1]:
558
+ A = csr_sparse(A,copy=True)
559
+ if A.ndim != 2:
560
+ raise ValueError(f"kron requires 2D input arrays. `A` is {A.ndim}D.")
561
+ output_shape = (A.shape[0]*B.shape[0], A.shape[1]*B.shape[1])
562
+
563
+ if A.nnz == 0 or B.nnz == 0:
564
+ # kronecker product is the zero matrix
565
+ return coo_sparse(output_shape).asformat(format)
566
+
567
+ B = B.toarray()
568
+ data = A.data.repeat(B.size).reshape(-1,B.shape[0],B.shape[1])
569
+ data = data * B
570
+
571
+ return bsr_sparse((data,A.indices,A.indptr), shape=output_shape)
572
+ else:
573
+ # use COO
574
+ A = coo_sparse(A)
575
+ if A.ndim != 2:
576
+ raise ValueError(f"kron requires 2D input arrays. `A` is {A.ndim}D.")
577
+ output_shape = (A.shape[0]*B.shape[0], A.shape[1]*B.shape[1])
578
+
579
+ if A.nnz == 0 or B.nnz == 0:
580
+ # kronecker product is the zero matrix
581
+ return coo_sparse(output_shape).asformat(format)
582
+
583
+ # expand entries of a into blocks
584
+ idx_dtype = get_index_dtype(A.coords, maxval=max(output_shape))
585
+ row = np.asarray(A.row, dtype=idx_dtype).repeat(B.nnz)
586
+ col = np.asarray(A.col, dtype=idx_dtype).repeat(B.nnz)
587
+ data = A.data.repeat(B.nnz)
588
+
589
+ row *= B.shape[0]
590
+ col *= B.shape[1]
591
+
592
+ # increment block indices
593
+ row,col = row.reshape(-1,B.nnz),col.reshape(-1,B.nnz)
594
+ row += B.row
595
+ col += B.col
596
+ row,col = row.reshape(-1),col.reshape(-1)
597
+
598
+ # compute block entries
599
+ data = data.reshape(-1,B.nnz) * B.data
600
+ data = data.reshape(-1)
601
+
602
+ return coo_sparse((data,(row,col)), shape=output_shape).asformat(format)
603
+
604
+
605
+ def kronsum(A, B, format=None):
606
+ """kronecker sum of square sparse matrices A and B
607
+
608
+ Kronecker sum of two sparse matrices is a sum of two Kronecker
609
+ products kron(I_n,A) + kron(B,I_m) where A has shape (m,m)
610
+ and B has shape (n,n) and I_m and I_n are identity matrices
611
+ of shape (m,m) and (n,n), respectively.
612
+
613
+ Parameters
614
+ ----------
615
+ A
616
+ square matrix
617
+ B
618
+ square matrix
619
+ format : str
620
+ format of the result (e.g. "csr")
621
+
622
+ Returns
623
+ -------
624
+ kronecker sum in a sparse matrix format
625
+
626
+ """
627
+ # TODO: delete next 8 lines and replace _sparse with _array when spmatrix removed
628
+ if isinstance(A, sparray) or isinstance(B, sparray):
629
+ # convert to local variables
630
+ coo_sparse = coo_array
631
+ identity_sparse = eye_array
632
+ else:
633
+ coo_sparse = coo_matrix
634
+ identity_sparse = identity
635
+
636
+ A = coo_sparse(A)
637
+ B = coo_sparse(B)
638
+
639
+ if A.ndim != 2:
640
+ raise ValueError(f"kronsum requires 2D inputs. `A` is {A.ndim}D.")
641
+ if B.ndim != 2:
642
+ raise ValueError(f"kronsum requires 2D inputs. `B` is {B.ndim}D.")
643
+ if A.shape[0] != A.shape[1]:
644
+ raise ValueError('A is not square')
645
+ if B.shape[0] != B.shape[1]:
646
+ raise ValueError('B is not square')
647
+
648
+ dtype = upcast(A.dtype, B.dtype)
649
+
650
+ I_n = identity_sparse(A.shape[0], dtype=dtype)
651
+ I_m = identity_sparse(B.shape[0], dtype=dtype)
652
+ L = kron(I_m, A, format='coo')
653
+ R = kron(B, I_n, format='coo')
654
+
655
+ return (L + R).asformat(format)
656
+
657
+
658
+ def _compressed_sparse_stack(blocks, axis, return_spmatrix):
659
+ """
660
+ Stacking fast path for CSR/CSC matrices or arrays
661
+ (i) vstack for CSR, (ii) hstack for CSC.
662
+ """
663
+ other_axis = 1 if axis == 0 else 0
664
+ data = np.concatenate([b.data for b in blocks])
665
+ constant_dim = blocks[0]._shape_as_2d[other_axis]
666
+ idx_dtype = get_index_dtype(arrays=[b.indptr for b in blocks],
667
+ maxval=max(data.size, constant_dim))
668
+ indices = np.empty(data.size, dtype=idx_dtype)
669
+ indptr = np.empty(sum(b._shape_as_2d[axis] for b in blocks) + 1, dtype=idx_dtype)
670
+ last_indptr = idx_dtype(0)
671
+ sum_dim = 0
672
+ sum_indices = 0
673
+ for b in blocks:
674
+ if b._shape_as_2d[other_axis] != constant_dim:
675
+ raise ValueError(f'incompatible dimensions for axis {other_axis}')
676
+ indices[sum_indices:sum_indices+b.indices.size] = b.indices
677
+ sum_indices += b.indices.size
678
+ idxs = slice(sum_dim, sum_dim + b._shape_as_2d[axis])
679
+ indptr[idxs] = b.indptr[:-1]
680
+ indptr[idxs] += last_indptr
681
+ sum_dim += b._shape_as_2d[axis]
682
+ last_indptr += b.indptr[-1]
683
+ indptr[-1] = last_indptr
684
+ # TODO remove this if-structure when sparse matrices removed
685
+ if return_spmatrix:
686
+ if axis == 0:
687
+ return csr_matrix((data, indices, indptr),
688
+ shape=(sum_dim, constant_dim))
689
+ else:
690
+ return csc_matrix((data, indices, indptr),
691
+ shape=(constant_dim, sum_dim))
692
+
693
+ if axis == 0:
694
+ return csr_array((data, indices, indptr),
695
+ shape=(sum_dim, constant_dim))
696
+ else:
697
+ return csc_array((data, indices, indptr),
698
+ shape=(constant_dim, sum_dim))
699
+
700
+
701
+ def _stack_along_minor_axis(blocks, axis):
702
+ """
703
+ Stacking fast path for CSR/CSC matrices along the minor axis
704
+ (i) hstack for CSR, (ii) vstack for CSC.
705
+ """
706
+ n_blocks = len(blocks)
707
+ if n_blocks == 0:
708
+ raise ValueError('Missing block matrices')
709
+
710
+ if n_blocks == 1:
711
+ return blocks[0]
712
+
713
+ # check for incompatible dimensions
714
+ other_axis = 1 if axis == 0 else 0
715
+ other_axis_dims = {b._shape_as_2d[other_axis] for b in blocks}
716
+ if len(other_axis_dims) > 1:
717
+ raise ValueError(f'Mismatching dimensions along axis {other_axis}: '
718
+ f'{other_axis_dims}')
719
+ constant_dim, = other_axis_dims
720
+
721
+ # Do the stacking
722
+ indptr_list = [b.indptr for b in blocks]
723
+ data_cat = np.concatenate([b.data for b in blocks])
724
+
725
+ # Need to check if any indices/indptr, would be too large post-
726
+ # concatenation for np.int32:
727
+ # - The max value of indices is the output array's stacking-axis length - 1
728
+ # - The max value in indptr is the number of non-zero entries. This is
729
+ # exceedingly unlikely to require int64, but is checked out of an
730
+ # abundance of caution.
731
+ sum_dim = sum(b._shape_as_2d[axis] for b in blocks)
732
+ nnz = sum(len(b.indices) for b in blocks)
733
+ idx_dtype = get_index_dtype(indptr_list, maxval=max(sum_dim - 1, nnz))
734
+ stack_dim_cat = np.array([b._shape_as_2d[axis] for b in blocks], dtype=idx_dtype)
735
+ if data_cat.size > 0:
736
+ indptr_cat = np.concatenate(indptr_list, dtype=idx_dtype)
737
+ indices_cat = np.concatenate([b.indices for b in blocks], dtype=idx_dtype)
738
+ indptr = np.empty(constant_dim + 1, dtype=idx_dtype)
739
+ indices = np.empty_like(indices_cat)
740
+ data = np.empty_like(data_cat)
741
+ csr_hstack(n_blocks, constant_dim, stack_dim_cat,
742
+ indptr_cat, indices_cat, data_cat,
743
+ indptr, indices, data)
744
+ else:
745
+ indptr = np.zeros(constant_dim + 1, dtype=idx_dtype)
746
+ indices = np.empty(0, dtype=idx_dtype)
747
+ data = np.empty(0, dtype=data_cat.dtype)
748
+
749
+ if axis == 0:
750
+ return blocks[0]._csc_container((data, indices, indptr),
751
+ shape=(sum_dim, constant_dim))
752
+ else:
753
+ return blocks[0]._csr_container((data, indices, indptr),
754
+ shape=(constant_dim, sum_dim))
755
+
756
+
757
+ def hstack(blocks, format=None, dtype=None):
758
+ """
759
+ Stack sparse matrices horizontally (column wise)
760
+
761
+ Parameters
762
+ ----------
763
+ blocks
764
+ sequence of sparse matrices with compatible shapes
765
+ format : str
766
+ sparse format of the result (e.g., "csr")
767
+ by default an appropriate sparse matrix format is returned.
768
+ This choice is subject to change.
769
+ dtype : dtype, optional
770
+ The data-type of the output matrix. If not given, the dtype is
771
+ determined from that of `blocks`.
772
+
773
+ Returns
774
+ -------
775
+ new_array : sparse matrix or array
776
+ If any block in blocks is a sparse array, return a sparse array.
777
+ Otherwise return a sparse matrix.
778
+
779
+ If you want a sparse array built from blocks that are not sparse
780
+ arrays, use ``block(hstack(blocks))`` or convert one block
781
+ e.g. ``blocks[0] = csr_array(blocks[0])``.
782
+
783
+ See Also
784
+ --------
785
+ vstack : stack sparse matrices vertically (row wise)
786
+
787
+ Examples
788
+ --------
789
+ >>> from scipy.sparse import coo_matrix, hstack
790
+ >>> A = coo_matrix([[1, 2], [3, 4]])
791
+ >>> B = coo_matrix([[5], [6]])
792
+ >>> hstack([A,B]).toarray()
793
+ array([[1, 2, 5],
794
+ [3, 4, 6]])
795
+
796
+ """
797
+ blocks = np.asarray(blocks, dtype='object')
798
+ if any(isinstance(b, sparray) for b in blocks.flat):
799
+ return _block([blocks], format, dtype)
800
+ else:
801
+ return _block([blocks], format, dtype, return_spmatrix=True)
802
+
803
+
804
+ def vstack(blocks, format=None, dtype=None):
805
+ """
806
+ Stack sparse arrays vertically (row wise)
807
+
808
+ Parameters
809
+ ----------
810
+ blocks
811
+ sequence of sparse arrays with compatible shapes
812
+ format : str, optional
813
+ sparse format of the result (e.g., "csr")
814
+ by default an appropriate sparse array format is returned.
815
+ This choice is subject to change.
816
+ dtype : dtype, optional
817
+ The data-type of the output array. If not given, the dtype is
818
+ determined from that of `blocks`.
819
+
820
+ Returns
821
+ -------
822
+ new_array : sparse matrix or array
823
+ If any block in blocks is a sparse array, return a sparse array.
824
+ Otherwise return a sparse matrix.
825
+
826
+ If you want a sparse array built from blocks that are not sparse
827
+ arrays, use ``block(vstack(blocks))`` or convert one block
828
+ e.g. ``blocks[0] = csr_array(blocks[0])``.
829
+
830
+ See Also
831
+ --------
832
+ hstack : stack sparse matrices horizontally (column wise)
833
+
834
+ Examples
835
+ --------
836
+ >>> from scipy.sparse import coo_array, vstack
837
+ >>> A = coo_array([[1, 2], [3, 4]])
838
+ >>> B = coo_array([[5, 6]])
839
+ >>> vstack([A, B]).toarray()
840
+ array([[1, 2],
841
+ [3, 4],
842
+ [5, 6]])
843
+
844
+ """
845
+ blocks = np.asarray(blocks, dtype='object')
846
+ if any(isinstance(b, sparray) for b in blocks.flat):
847
+ return _block([[b] for b in blocks], format, dtype)
848
+ else:
849
+ return _block([[b] for b in blocks], format, dtype, return_spmatrix=True)
850
+
851
+
852
+ def bmat(blocks, format=None, dtype=None):
853
+ """
854
+ Build a sparse array or matrix from sparse sub-blocks
855
+
856
+ Note: `block_array` is preferred over ``bmat``. They are the same function
857
+ except that ``bmat`` returns a deprecated sparse matrix when none of the
858
+ inputs are sparse arrays.
859
+
860
+ .. warning::
861
+
862
+ This function returns a sparse matrix when no inputs are sparse arrays.
863
+ You are encouraged to use `block_array` to take advantage
864
+ of the sparse array functionality.
865
+
866
+ Parameters
867
+ ----------
868
+ blocks : array_like
869
+ Grid of sparse matrices with compatible shapes.
870
+ An entry of None implies an all-zero matrix.
871
+ format : {'bsr', 'coo', 'csc', 'csr', 'dia', 'dok', 'lil'}, optional
872
+ The sparse format of the result (e.g. "csr"). By default an
873
+ appropriate sparse matrix format is returned.
874
+ This choice is subject to change.
875
+ dtype : dtype, optional
876
+ The data-type of the output matrix. If not given, the dtype is
877
+ determined from that of `blocks`.
878
+
879
+ Returns
880
+ -------
881
+ bmat : sparse matrix or array
882
+ If any block in blocks is a sparse array, return a sparse array.
883
+ Otherwise return a sparse matrix.
884
+
885
+ If you want a sparse array built from blocks that are not sparse
886
+ arrays, use ``block_array()``.
887
+
888
+ See Also
889
+ --------
890
+ block_array
891
+
892
+ Examples
893
+ --------
894
+ >>> from scipy.sparse import coo_array, bmat
895
+ >>> A = coo_array([[1, 2], [3, 4]])
896
+ >>> B = coo_array([[5], [6]])
897
+ >>> C = coo_array([[7]])
898
+ >>> bmat([[A, B], [None, C]]).toarray()
899
+ array([[1, 2, 5],
900
+ [3, 4, 6],
901
+ [0, 0, 7]])
902
+
903
+ >>> bmat([[A, None], [None, C]]).toarray()
904
+ array([[1, 2, 0],
905
+ [3, 4, 0],
906
+ [0, 0, 7]])
907
+
908
+ """
909
+ blocks = np.asarray(blocks, dtype='object')
910
+ if any(isinstance(b, sparray) for b in blocks.flat):
911
+ return _block(blocks, format, dtype)
912
+ else:
913
+ return _block(blocks, format, dtype, return_spmatrix=True)
914
+
915
+
916
+ def block_array(blocks, *, format=None, dtype=None):
917
+ """
918
+ Build a sparse array from sparse sub-blocks
919
+
920
+ Parameters
921
+ ----------
922
+ blocks : array_like
923
+ Grid of sparse arrays with compatible shapes.
924
+ An entry of None implies an all-zero array.
925
+ format : {'bsr', 'coo', 'csc', 'csr', 'dia', 'dok', 'lil'}, optional
926
+ The sparse format of the result (e.g. "csr"). By default an
927
+ appropriate sparse array format is returned.
928
+ This choice is subject to change.
929
+ dtype : dtype, optional
930
+ The data-type of the output array. If not given, the dtype is
931
+ determined from that of `blocks`.
932
+
933
+ Returns
934
+ -------
935
+ block : sparse array
936
+
937
+ See Also
938
+ --------
939
+ block_diag : specify blocks along the main diagonals
940
+ diags : specify (possibly offset) diagonals
941
+
942
+ Examples
943
+ --------
944
+ >>> from scipy.sparse import coo_array, block_array
945
+ >>> A = coo_array([[1, 2], [3, 4]])
946
+ >>> B = coo_array([[5], [6]])
947
+ >>> C = coo_array([[7]])
948
+ >>> block_array([[A, B], [None, C]]).toarray()
949
+ array([[1, 2, 5],
950
+ [3, 4, 6],
951
+ [0, 0, 7]])
952
+
953
+ >>> block_array([[A, None], [None, C]]).toarray()
954
+ array([[1, 2, 0],
955
+ [3, 4, 0],
956
+ [0, 0, 7]])
957
+
958
+ """
959
+ return _block(blocks, format, dtype)
960
+
961
+
962
+ def _block(blocks, format, dtype, return_spmatrix=False):
963
+ blocks = np.asarray(blocks, dtype='object')
964
+
965
+ if blocks.ndim != 2:
966
+ raise ValueError('blocks must be 2-D')
967
+
968
+ M,N = blocks.shape
969
+
970
+ # check for fast path cases
971
+ if (format in (None, 'csr') and
972
+ all(issparse(b) and b.format == 'csr' for b in blocks.flat)
973
+ ):
974
+ if N > 1:
975
+ # stack along columns (axis 1): must have shape (M, 1)
976
+ blocks = [[_stack_along_minor_axis(blocks[b, :], 1)] for b in range(M)]
977
+ blocks = np.asarray(blocks, dtype='object')
978
+
979
+ # stack along rows (axis 0):
980
+ A = _compressed_sparse_stack(blocks[:, 0], 0, return_spmatrix)
981
+ if dtype is not None:
982
+ A = A.astype(dtype, copy=False)
983
+ return A
984
+ elif (format in (None, 'csc') and
985
+ all(issparse(b) and b.format == 'csc' for b in blocks.flat)
986
+ ):
987
+ if M > 1:
988
+ # stack along rows (axis 0): must have shape (1, N)
989
+ blocks = [[_stack_along_minor_axis(blocks[:, b], 0) for b in range(N)]]
990
+ blocks = np.asarray(blocks, dtype='object')
991
+
992
+ # stack along columns (axis 1):
993
+ A = _compressed_sparse_stack(blocks[0, :], 1, return_spmatrix)
994
+ if dtype is not None:
995
+ A = A.astype(dtype, copy=False)
996
+ return A
997
+
998
+ block_mask = np.zeros(blocks.shape, dtype=bool)
999
+ brow_lengths = np.zeros(M, dtype=np.int64)
1000
+ bcol_lengths = np.zeros(N, dtype=np.int64)
1001
+
1002
+ # convert everything to COO format
1003
+ for i in range(M):
1004
+ for j in range(N):
1005
+ if blocks[i,j] is not None:
1006
+ A = coo_array(blocks[i,j])
1007
+ blocks[i,j] = A
1008
+ block_mask[i,j] = True
1009
+
1010
+ if brow_lengths[i] == 0:
1011
+ brow_lengths[i] = A._shape_as_2d[0]
1012
+ elif brow_lengths[i] != A._shape_as_2d[0]:
1013
+ msg = (f'blocks[{i},:] has incompatible row dimensions. '
1014
+ f'Got blocks[{i},{j}].shape[0] == {A._shape_as_2d[0]}, '
1015
+ f'expected {brow_lengths[i]}.')
1016
+ raise ValueError(msg)
1017
+
1018
+ if bcol_lengths[j] == 0:
1019
+ bcol_lengths[j] = A._shape_as_2d[1]
1020
+ elif bcol_lengths[j] != A._shape_as_2d[1]:
1021
+ msg = (f'blocks[:,{j}] has incompatible column '
1022
+ f'dimensions. '
1023
+ f'Got blocks[{i},{j}].shape[1] == {A._shape_as_2d[1]}, '
1024
+ f'expected {bcol_lengths[j]}.')
1025
+ raise ValueError(msg)
1026
+
1027
+ nnz = sum(block.nnz for block in blocks[block_mask])
1028
+ if dtype is None:
1029
+ all_dtypes = [blk.dtype for blk in blocks[block_mask]]
1030
+ dtype = upcast(*all_dtypes) if all_dtypes else None
1031
+
1032
+ row_offsets = np.append(0, np.cumsum(brow_lengths))
1033
+ col_offsets = np.append(0, np.cumsum(bcol_lengths))
1034
+
1035
+ shape = (row_offsets[-1], col_offsets[-1])
1036
+
1037
+ data = np.empty(nnz, dtype=dtype)
1038
+ idx_dtype = get_index_dtype([b.coords[0] for b in blocks[block_mask]],
1039
+ maxval=max(shape))
1040
+ row = np.empty(nnz, dtype=idx_dtype)
1041
+ col = np.empty(nnz, dtype=idx_dtype)
1042
+
1043
+ nnz = 0
1044
+ ii, jj = np.nonzero(block_mask)
1045
+ for i, j in zip(ii, jj):
1046
+ B = blocks[i, j]
1047
+ idx = slice(nnz, nnz + B.nnz)
1048
+ data[idx] = B.data
1049
+ np.add(B.row, row_offsets[i], out=row[idx], dtype=idx_dtype)
1050
+ np.add(B.col, col_offsets[j], out=col[idx], dtype=idx_dtype)
1051
+ nnz += B.nnz
1052
+
1053
+ if return_spmatrix:
1054
+ return coo_matrix((data, (row, col)), shape=shape).asformat(format)
1055
+ return coo_array((data, (row, col)), shape=shape).asformat(format)
1056
+
1057
+
1058
+ def block_diag(mats, format=None, dtype=None):
1059
+ """
1060
+ Build a block diagonal sparse matrix or array from provided matrices.
1061
+
1062
+ Parameters
1063
+ ----------
1064
+ mats : sequence of matrices or arrays
1065
+ Input matrices or arrays.
1066
+ format : str, optional
1067
+ The sparse format of the result (e.g., "csr"). If not given, the result
1068
+ is returned in "coo" format.
1069
+ dtype : dtype specifier, optional
1070
+ The data-type of the output. If not given, the dtype is
1071
+ determined from that of `blocks`.
1072
+
1073
+ Returns
1074
+ -------
1075
+ res : sparse matrix or array
1076
+ If at least one input is a sparse array, the output is a sparse array.
1077
+ Otherwise the output is a sparse matrix.
1078
+
1079
+ Notes
1080
+ -----
1081
+
1082
+ .. versionadded:: 0.11.0
1083
+
1084
+ See Also
1085
+ --------
1086
+ block_array
1087
+ diags_array
1088
+
1089
+ Examples
1090
+ --------
1091
+ >>> from scipy.sparse import coo_array, block_diag
1092
+ >>> A = coo_array([[1, 2], [3, 4]])
1093
+ >>> B = coo_array([[5], [6]])
1094
+ >>> C = coo_array([[7]])
1095
+ >>> block_diag((A, B, C)).toarray()
1096
+ array([[1, 2, 0, 0],
1097
+ [3, 4, 0, 0],
1098
+ [0, 0, 5, 0],
1099
+ [0, 0, 6, 0],
1100
+ [0, 0, 0, 7]])
1101
+
1102
+ """
1103
+ if any(isinstance(a, sparray) for a in mats):
1104
+ container = coo_array
1105
+ else:
1106
+ container = coo_matrix
1107
+
1108
+ row = []
1109
+ col = []
1110
+ data = []
1111
+ idx_arrays = [] # track idx_dtype of incoming sparse arrays
1112
+ r_idx = 0
1113
+ c_idx = 0
1114
+ for a in mats:
1115
+ if isinstance(a, (list | numbers.Number)):
1116
+ a = coo_array(np.atleast_2d(a))
1117
+ if issparse(a):
1118
+ a = a.tocoo()
1119
+ if not idx_arrays and a.coords[0].dtype == np.int64:
1120
+ idx_arrays.append(a.coords[0])
1121
+ nrows, ncols = a._shape_as_2d
1122
+ row.append(a.row + r_idx)
1123
+ col.append(a.col + c_idx)
1124
+ data.append(a.data)
1125
+ else:
1126
+ nrows, ncols = a.shape
1127
+ a_row, a_col = np.divmod(np.arange(nrows*ncols), ncols)
1128
+ row.append(a_row + r_idx)
1129
+ col.append(a_col + c_idx)
1130
+ data.append(a.ravel())
1131
+ r_idx += nrows
1132
+ c_idx += ncols
1133
+ idx_dtype = get_index_dtype(idx_arrays, maxval=max(r_idx, c_idx))
1134
+ row = np.concatenate(row, dtype=idx_dtype)
1135
+ col = np.concatenate(col, dtype=idx_dtype)
1136
+ data = np.concatenate(data)
1137
+ new_shape = (r_idx, c_idx)
1138
+
1139
+ return container((data, (row, col)), shape=new_shape, dtype=dtype).asformat(format)
1140
+
1141
+
1142
+ @_transition_to_rng("random_state")
1143
+ def random_array(shape, *, density=0.01, format='coo', dtype=None,
1144
+ rng=None, data_sampler=None):
1145
+ """Return a sparse array of uniformly random numbers in [0, 1)
1146
+
1147
+ Returns a sparse array with the given shape and density
1148
+ where values are generated uniformly randomly in the range [0, 1).
1149
+
1150
+ Parameters
1151
+ ----------
1152
+ shape : int or tuple of ints
1153
+ shape of the array
1154
+ density : real, optional (default: 0.01)
1155
+ density of the generated matrix: density equal to one means a full
1156
+ matrix, density of 0 means a matrix with no non-zero items.
1157
+ format : str, optional (default: 'coo')
1158
+ sparse matrix format.
1159
+ dtype : dtype, optional (default: np.float64)
1160
+ type of the returned matrix values.
1161
+ rng : `numpy.random.Generator`, optional
1162
+ Pseudorandom number generator state. When `rng` is None, a new
1163
+ `numpy.random.Generator` is created using entropy from the
1164
+ operating system. Types other than `numpy.random.Generator` are
1165
+ passed to `numpy.random.default_rng` to instantiate a ``Generator``.
1166
+
1167
+ This random state will be used for sampling ``indices`` (the sparsity
1168
+ structure), and by default for the data values too (see `data_sampler`).
1169
+ data_sampler : callable, optional (default depends on dtype)
1170
+ Sampler of random data values with keyword arg ``size``.
1171
+ This function should take a single keyword argument ``size`` specifying
1172
+ the length of its returned ndarray. It is used to generate the nonzero
1173
+ values in the matrix after the locations of those values are chosen.
1174
+ By default, uniform [0, 1) random values are used unless `dtype` is
1175
+ an integer (default uniform integers from that dtype) or
1176
+ complex (default uniform over the unit square in the complex plane).
1177
+ For these, the `rng` is used e.g. ``rng.uniform(size=size)``.
1178
+
1179
+ Returns
1180
+ -------
1181
+ res : sparse array
1182
+
1183
+ Examples
1184
+ --------
1185
+
1186
+ Passing a ``np.random.Generator`` instance for better performance:
1187
+
1188
+ >>> import numpy as np
1189
+ >>> import scipy as sp
1190
+ >>> rng = np.random.default_rng()
1191
+
1192
+ Default sampling uniformly from [0, 1):
1193
+
1194
+ >>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng)
1195
+
1196
+ Providing a sampler for the values:
1197
+
1198
+ >>> rvs = sp.stats.poisson(25, loc=10).rvs
1199
+ >>> S = sp.sparse.random_array((3, 4), density=0.25,
1200
+ ... rng=rng, data_sampler=rvs)
1201
+ >>> S.toarray()
1202
+ array([[ 36., 0., 33., 0.], # random
1203
+ [ 0., 0., 0., 0.],
1204
+ [ 0., 0., 36., 0.]])
1205
+
1206
+ Providing a sampler for uint values:
1207
+
1208
+ >>> def random_uint32_to_100(size=None):
1209
+ ... return rng.integers(100, size=size, dtype=np.uint32)
1210
+ >>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng,
1211
+ ... data_sampler=random_uint32_to_100)
1212
+
1213
+ Building a custom distribution.
1214
+ This example builds a squared normal from np.random:
1215
+
1216
+ >>> def np_normal_squared(size=None, rng=rng):
1217
+ ... return rng.standard_normal(size) ** 2
1218
+ >>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng,
1219
+ ... data_sampler=np_normal_squared)
1220
+
1221
+ Or we can build it from sp.stats style rvs functions:
1222
+
1223
+ >>> def sp_stats_normal_squared(size=None, rng=rng):
1224
+ ... std_normal = sp.stats.distributions.norm_gen().rvs
1225
+ ... return std_normal(size=size, random_state=rng) ** 2
1226
+ >>> S = sp.sparse.random_array((3, 4), density=0.25, rng=rng,
1227
+ ... data_sampler=sp_stats_normal_squared)
1228
+
1229
+ Or we can subclass sp.stats rv_continuous or rv_discrete:
1230
+
1231
+ >>> class NormalSquared(sp.stats.rv_continuous):
1232
+ ... def _rvs(self, size=None, random_state=rng):
1233
+ ... return rng.standard_normal(size) ** 2
1234
+ >>> X = NormalSquared()
1235
+ >>> Y = X().rvs
1236
+ >>> S = sp.sparse.random_array((3, 4), density=0.25,
1237
+ ... rng=rng, data_sampler=Y)
1238
+ """
1239
+ data, ind = _random(shape, density, format, dtype, rng, data_sampler)
1240
+
1241
+ # downcast, if safe, before calling coo_constructor
1242
+ idx_dtype = get_index_dtype(maxval=max(shape))
1243
+ ind = tuple(np.asarray(co, dtype=idx_dtype) for co in ind)
1244
+ return coo_array((data, ind), shape=shape).asformat(format)
1245
+
1246
+
1247
+ def _random(shape, density=0.01, format=None, dtype=None,
1248
+ rng=None, data_sampler=None):
1249
+ if density < 0 or density > 1:
1250
+ raise ValueError("density expected to be 0 <= density <= 1")
1251
+
1252
+ tot_prod = math.prod(shape) # use `math` for when prod is >= 2**64
1253
+
1254
+ # Number of non zero values
1255
+ size = int(round(density * tot_prod))
1256
+
1257
+ rng = check_random_state(rng)
1258
+
1259
+ if data_sampler is None:
1260
+ if np.issubdtype(dtype, np.integer):
1261
+ def data_sampler(size):
1262
+ return rng_integers(rng,
1263
+ np.iinfo(dtype).min,
1264
+ np.iinfo(dtype).max,
1265
+ size,
1266
+ dtype=dtype)
1267
+ elif np.issubdtype(dtype, np.complexfloating):
1268
+ def data_sampler(size):
1269
+ return (rng.uniform(size=size) +
1270
+ rng.uniform(size=size) * 1j)
1271
+ else:
1272
+ data_sampler = rng.uniform
1273
+
1274
+ idx_dtype = get_index_dtype(maxval=max(shape))
1275
+ # rng.choice uses int64 if first arg is an int
1276
+ if tot_prod <= np.iinfo(np.int64).max:
1277
+ raveled_ind = rng.choice(tot_prod, size=size, replace=False)
1278
+ ind = np.unravel_index(raveled_ind, shape=shape, order='F')
1279
+ ind = tuple(np.asarray(co, idx_dtype) for co in ind)
1280
+ else:
1281
+ # for ravel indices bigger than dtype max, use sets to remove duplicates
1282
+ ndim = len(shape)
1283
+ seen = set()
1284
+ while len(seen) < size:
1285
+ dsize = size - len(seen)
1286
+ seen.update(map(tuple, rng_integers(rng, shape, size=(dsize, ndim))))
1287
+ ind = tuple(np.array(list(seen), dtype=idx_dtype).T)
1288
+
1289
+ # size kwarg allows eg data_sampler=partial(np.random.poisson, lam=5)
1290
+ vals = data_sampler(size=size).astype(dtype, copy=False)
1291
+ return vals, ind
1292
+
1293
+
1294
+ @_transition_to_rng("random_state", position_num=5)
1295
+ def random(m, n, density=0.01, format='coo', dtype=None,
1296
+ rng=None, data_rvs=None):
1297
+ """Generate a sparse matrix of the given shape and density with randomly
1298
+ distributed values.
1299
+
1300
+ .. warning::
1301
+
1302
+ This function returns a sparse matrix -- not a sparse array.
1303
+ You are encouraged to use `random_array` to take advantage of the
1304
+ sparse array functionality.
1305
+
1306
+ Parameters
1307
+ ----------
1308
+ m, n : int
1309
+ shape of the matrix
1310
+ density : real, optional
1311
+ density of the generated matrix: density equal to one means a full
1312
+ matrix, density of 0 means a matrix with no non-zero items.
1313
+ format : str, optional
1314
+ sparse matrix format.
1315
+ dtype : dtype, optional
1316
+ type of the returned matrix values.
1317
+ rng : `numpy.random.Generator`, optional
1318
+ Pseudorandom number generator state. When `rng` is None, a new
1319
+ `numpy.random.Generator` is created using entropy from the
1320
+ operating system. Types other than `numpy.random.Generator` are
1321
+ passed to `numpy.random.default_rng` to instantiate a ``Generator``.
1322
+
1323
+ This random state will be used for sampling the sparsity structure, but
1324
+ not necessarily for sampling the values of the structurally nonzero
1325
+ entries of the matrix.
1326
+ data_rvs : callable, optional
1327
+ Samples a requested number of random values.
1328
+ This function should take a single argument specifying the length
1329
+ of the ndarray that it will return. The structurally nonzero entries
1330
+ of the sparse random matrix will be taken from the array sampled
1331
+ by this function. By default, uniform [0, 1) random values will be
1332
+ sampled using the same random state as is used for sampling
1333
+ the sparsity structure.
1334
+
1335
+ Returns
1336
+ -------
1337
+ res : sparse matrix
1338
+
1339
+ See Also
1340
+ --------
1341
+ random_array : constructs sparse arrays instead of sparse matrices
1342
+
1343
+ Examples
1344
+ --------
1345
+
1346
+ Passing a ``np.random.Generator`` instance for better performance:
1347
+
1348
+ >>> import scipy as sp
1349
+ >>> import numpy as np
1350
+ >>> rng = np.random.default_rng()
1351
+ >>> S = sp.sparse.random(3, 4, density=0.25, rng=rng)
1352
+
1353
+ Providing a sampler for the values:
1354
+
1355
+ >>> rvs = sp.stats.poisson(25, loc=10).rvs
1356
+ >>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=rvs)
1357
+ >>> S.toarray()
1358
+ array([[ 36., 0., 33., 0.], # random
1359
+ [ 0., 0., 0., 0.],
1360
+ [ 0., 0., 36., 0.]])
1361
+
1362
+ Building a custom distribution.
1363
+ This example builds a squared normal from np.random:
1364
+
1365
+ >>> def np_normal_squared(size=None, rng=rng):
1366
+ ... return rng.standard_normal(size) ** 2
1367
+ >>> S = sp.sparse.random(3, 4, density=0.25, rng=rng,
1368
+ ... data_rvs=np_normal_squared)
1369
+
1370
+ Or we can build it from sp.stats style rvs functions:
1371
+
1372
+ >>> def sp_stats_normal_squared(size=None, rng=rng):
1373
+ ... std_normal = sp.stats.distributions.norm_gen().rvs
1374
+ ... return std_normal(size=size, random_state=rng) ** 2
1375
+ >>> S = sp.sparse.random(3, 4, density=0.25, rng=rng,
1376
+ ... data_rvs=sp_stats_normal_squared)
1377
+
1378
+ Or we can subclass sp.stats rv_continuous or rv_discrete:
1379
+
1380
+ >>> class NormalSquared(sp.stats.rv_continuous):
1381
+ ... def _rvs(self, size=None, random_state=rng):
1382
+ ... return rng.standard_normal(size) ** 2
1383
+ >>> X = NormalSquared()
1384
+ >>> Y = X() # get a frozen version of the distribution
1385
+ >>> S = sp.sparse.random(3, 4, density=0.25, rng=rng, data_rvs=Y.rvs)
1386
+ """
1387
+ if n is None:
1388
+ n = m
1389
+ m, n = int(m), int(n)
1390
+ # make keyword syntax work for data_rvs e.g. data_rvs(size=7)
1391
+ if data_rvs is not None:
1392
+ def data_rvs_kw(size):
1393
+ return data_rvs(size)
1394
+ else:
1395
+ data_rvs_kw = None
1396
+ vals, ind = _random((m, n), density, format, dtype, rng, data_rvs_kw)
1397
+ return coo_matrix((vals, ind), shape=(m, n)).asformat(format)
1398
+
1399
+
1400
+ @_transition_to_rng("random_state", position_num=5)
1401
+ def rand(m, n, density=0.01, format="coo", dtype=None, rng=None):
1402
+ """Generate a sparse matrix of the given shape and density with uniformly
1403
+ distributed values.
1404
+
1405
+ .. warning::
1406
+
1407
+ This function returns a sparse matrix -- not a sparse array.
1408
+ You are encouraged to use `random_array` to take advantage
1409
+ of the sparse array functionality.
1410
+
1411
+ Parameters
1412
+ ----------
1413
+ m, n : int
1414
+ shape of the matrix
1415
+ density : real, optional
1416
+ density of the generated matrix: density equal to one means a full
1417
+ matrix, density of 0 means a matrix with no non-zero items.
1418
+ format : str, optional
1419
+ sparse matrix format.
1420
+ dtype : dtype, optional
1421
+ type of the returned matrix values.
1422
+ rng : `numpy.random.Generator`, optional
1423
+ Pseudorandom number generator state. When `rng` is None, a new
1424
+ `numpy.random.Generator` is created using entropy from the
1425
+ operating system. Types other than `numpy.random.Generator` are
1426
+ passed to `numpy.random.default_rng` to instantiate a ``Generator``.
1427
+
1428
+ Returns
1429
+ -------
1430
+ res : sparse matrix
1431
+
1432
+ Notes
1433
+ -----
1434
+ Only float types are supported for now.
1435
+
1436
+ See Also
1437
+ --------
1438
+ random : Similar function allowing a custom random data sampler
1439
+ random_array : Similar to random() but returns a sparse array
1440
+
1441
+ Examples
1442
+ --------
1443
+ >>> from scipy.sparse import rand
1444
+ >>> matrix = rand(3, 4, density=0.25, format="csr", rng=42)
1445
+ >>> matrix
1446
+ <Compressed Sparse Row sparse matrix of dtype 'float64'
1447
+ with 3 stored elements and shape (3, 4)>
1448
+ >>> matrix.toarray()
1449
+ array([[0.05641158, 0. , 0. , 0.65088847], # random
1450
+ [0. , 0. , 0. , 0.14286682],
1451
+ [0. , 0. , 0. , 0. ]])
1452
+
1453
+ """
1454
+ return random(m, n, density, format, dtype, rng)