scipy 1.16.0rc1__cp311-cp311-macosx_10_14_x86_64.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 (1416) hide show
  1. scipy/.dylibs/libgcc_s.1.1.dylib +0 -0
  2. scipy/.dylibs/libgfortran.5.dylib +0 -0
  3. scipy/.dylibs/libquadmath.0.dylib +0 -0
  4. scipy/.dylibs/libscipy_openblas.dylib +0 -0
  5. scipy/__config__.py +161 -0
  6. scipy/__init__.py +138 -0
  7. scipy/_cyutility.cpython-311-darwin.so +0 -0
  8. scipy/_distributor_init.py +18 -0
  9. scipy/_lib/__init__.py +14 -0
  10. scipy/_lib/_array_api.py +931 -0
  11. scipy/_lib/_array_api_compat_vendor.py +9 -0
  12. scipy/_lib/_array_api_no_0d.py +103 -0
  13. scipy/_lib/_bunch.py +229 -0
  14. scipy/_lib/_ccallback.py +251 -0
  15. scipy/_lib/_ccallback_c.cpython-311-darwin.so +0 -0
  16. scipy/_lib/_disjoint_set.py +254 -0
  17. scipy/_lib/_docscrape.py +761 -0
  18. scipy/_lib/_elementwise_iterative_method.py +346 -0
  19. scipy/_lib/_fpumode.cpython-311-darwin.so +0 -0
  20. scipy/_lib/_gcutils.py +105 -0
  21. scipy/_lib/_pep440.py +487 -0
  22. scipy/_lib/_sparse.py +41 -0
  23. scipy/_lib/_test_ccallback.cpython-311-darwin.so +0 -0
  24. scipy/_lib/_test_deprecation_call.cpython-311-darwin.so +0 -0
  25. scipy/_lib/_test_deprecation_def.cpython-311-darwin.so +0 -0
  26. scipy/_lib/_testutils.py +373 -0
  27. scipy/_lib/_threadsafety.py +58 -0
  28. scipy/_lib/_tmpdirs.py +86 -0
  29. scipy/_lib/_uarray/LICENSE +29 -0
  30. scipy/_lib/_uarray/__init__.py +116 -0
  31. scipy/_lib/_uarray/_backend.py +707 -0
  32. scipy/_lib/_uarray/_uarray.cpython-311-darwin.so +0 -0
  33. scipy/_lib/_util.py +1276 -0
  34. scipy/_lib/array_api_compat/__init__.py +22 -0
  35. scipy/_lib/array_api_compat/_internal.py +59 -0
  36. scipy/_lib/array_api_compat/common/__init__.py +1 -0
  37. scipy/_lib/array_api_compat/common/_aliases.py +727 -0
  38. scipy/_lib/array_api_compat/common/_fft.py +213 -0
  39. scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
  40. scipy/_lib/array_api_compat/common/_linalg.py +232 -0
  41. scipy/_lib/array_api_compat/common/_typing.py +192 -0
  42. scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
  43. scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
  44. scipy/_lib/array_api_compat/cupy/_info.py +336 -0
  45. scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
  46. scipy/_lib/array_api_compat/cupy/fft.py +36 -0
  47. scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
  48. scipy/_lib/array_api_compat/dask/__init__.py +0 -0
  49. scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
  50. scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
  51. scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
  52. scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
  53. scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
  54. scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
  55. scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
  56. scipy/_lib/array_api_compat/numpy/_info.py +366 -0
  57. scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
  58. scipy/_lib/array_api_compat/numpy/fft.py +35 -0
  59. scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
  60. scipy/_lib/array_api_compat/torch/__init__.py +22 -0
  61. scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
  62. scipy/_lib/array_api_compat/torch/_info.py +369 -0
  63. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  64. scipy/_lib/array_api_compat/torch/fft.py +85 -0
  65. scipy/_lib/array_api_compat/torch/linalg.py +121 -0
  66. scipy/_lib/array_api_extra/__init__.py +38 -0
  67. scipy/_lib/array_api_extra/_delegation.py +171 -0
  68. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  69. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  70. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  71. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  72. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  73. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  74. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  75. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  76. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  77. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  78. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  79. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  80. scipy/_lib/array_api_extra/testing.py +359 -0
  81. scipy/_lib/cobyqa/__init__.py +20 -0
  82. scipy/_lib/cobyqa/framework.py +1240 -0
  83. scipy/_lib/cobyqa/main.py +1506 -0
  84. scipy/_lib/cobyqa/models.py +1529 -0
  85. scipy/_lib/cobyqa/problem.py +1296 -0
  86. scipy/_lib/cobyqa/settings.py +132 -0
  87. scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
  88. scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
  89. scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
  90. scipy/_lib/cobyqa/utils/__init__.py +18 -0
  91. scipy/_lib/cobyqa/utils/exceptions.py +22 -0
  92. scipy/_lib/cobyqa/utils/math.py +77 -0
  93. scipy/_lib/cobyqa/utils/versions.py +67 -0
  94. scipy/_lib/decorator.py +399 -0
  95. scipy/_lib/deprecation.py +274 -0
  96. scipy/_lib/doccer.py +366 -0
  97. scipy/_lib/messagestream.cpython-311-darwin.so +0 -0
  98. scipy/_lib/pyprima/__init__.py +212 -0
  99. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  100. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  101. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  102. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  103. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  104. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  105. scipy/_lib/pyprima/cobyla/update.py +289 -0
  106. scipy/_lib/pyprima/common/__init__.py +0 -0
  107. scipy/_lib/pyprima/common/_bounds.py +34 -0
  108. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  109. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  110. scipy/_lib/pyprima/common/_project.py +173 -0
  111. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  112. scipy/_lib/pyprima/common/consts.py +47 -0
  113. scipy/_lib/pyprima/common/evaluate.py +99 -0
  114. scipy/_lib/pyprima/common/history.py +38 -0
  115. scipy/_lib/pyprima/common/infos.py +30 -0
  116. scipy/_lib/pyprima/common/linalg.py +435 -0
  117. scipy/_lib/pyprima/common/message.py +290 -0
  118. scipy/_lib/pyprima/common/powalg.py +131 -0
  119. scipy/_lib/pyprima/common/preproc.py +277 -0
  120. scipy/_lib/pyprima/common/present.py +5 -0
  121. scipy/_lib/pyprima/common/ratio.py +54 -0
  122. scipy/_lib/pyprima/common/redrho.py +47 -0
  123. scipy/_lib/pyprima/common/selectx.py +296 -0
  124. scipy/_lib/tests/__init__.py +0 -0
  125. scipy/_lib/tests/test__gcutils.py +110 -0
  126. scipy/_lib/tests/test__pep440.py +67 -0
  127. scipy/_lib/tests/test__testutils.py +32 -0
  128. scipy/_lib/tests/test__threadsafety.py +51 -0
  129. scipy/_lib/tests/test__util.py +641 -0
  130. scipy/_lib/tests/test_array_api.py +322 -0
  131. scipy/_lib/tests/test_bunch.py +169 -0
  132. scipy/_lib/tests/test_ccallback.py +196 -0
  133. scipy/_lib/tests/test_config.py +45 -0
  134. scipy/_lib/tests/test_deprecation.py +10 -0
  135. scipy/_lib/tests/test_doccer.py +143 -0
  136. scipy/_lib/tests/test_import_cycles.py +18 -0
  137. scipy/_lib/tests/test_public_api.py +482 -0
  138. scipy/_lib/tests/test_scipy_version.py +28 -0
  139. scipy/_lib/tests/test_tmpdirs.py +48 -0
  140. scipy/_lib/tests/test_warnings.py +137 -0
  141. scipy/_lib/uarray.py +31 -0
  142. scipy/cluster/__init__.py +31 -0
  143. scipy/cluster/_hierarchy.cpython-311-darwin.so +0 -0
  144. scipy/cluster/_optimal_leaf_ordering.cpython-311-darwin.so +0 -0
  145. scipy/cluster/_vq.cpython-311-darwin.so +0 -0
  146. scipy/cluster/hierarchy.py +4348 -0
  147. scipy/cluster/tests/__init__.py +0 -0
  148. scipy/cluster/tests/hierarchy_test_data.py +145 -0
  149. scipy/cluster/tests/test_disjoint_set.py +202 -0
  150. scipy/cluster/tests/test_hierarchy.py +1238 -0
  151. scipy/cluster/tests/test_vq.py +434 -0
  152. scipy/cluster/vq.py +832 -0
  153. scipy/conftest.py +658 -0
  154. scipy/constants/__init__.py +358 -0
  155. scipy/constants/_codata.py +2266 -0
  156. scipy/constants/_constants.py +369 -0
  157. scipy/constants/codata.py +21 -0
  158. scipy/constants/constants.py +53 -0
  159. scipy/constants/tests/__init__.py +0 -0
  160. scipy/constants/tests/test_codata.py +78 -0
  161. scipy/constants/tests/test_constants.py +83 -0
  162. scipy/datasets/__init__.py +90 -0
  163. scipy/datasets/_download_all.py +71 -0
  164. scipy/datasets/_fetchers.py +225 -0
  165. scipy/datasets/_registry.py +26 -0
  166. scipy/datasets/_utils.py +81 -0
  167. scipy/datasets/tests/__init__.py +0 -0
  168. scipy/datasets/tests/test_data.py +128 -0
  169. scipy/differentiate/__init__.py +27 -0
  170. scipy/differentiate/_differentiate.py +1129 -0
  171. scipy/differentiate/tests/__init__.py +0 -0
  172. scipy/differentiate/tests/test_differentiate.py +694 -0
  173. scipy/fft/__init__.py +114 -0
  174. scipy/fft/_backend.py +196 -0
  175. scipy/fft/_basic.py +1650 -0
  176. scipy/fft/_basic_backend.py +197 -0
  177. scipy/fft/_debug_backends.py +22 -0
  178. scipy/fft/_fftlog.py +223 -0
  179. scipy/fft/_fftlog_backend.py +200 -0
  180. scipy/fft/_helper.py +348 -0
  181. scipy/fft/_pocketfft/LICENSE.md +25 -0
  182. scipy/fft/_pocketfft/__init__.py +9 -0
  183. scipy/fft/_pocketfft/basic.py +251 -0
  184. scipy/fft/_pocketfft/helper.py +249 -0
  185. scipy/fft/_pocketfft/pypocketfft.cpython-311-darwin.so +0 -0
  186. scipy/fft/_pocketfft/realtransforms.py +109 -0
  187. scipy/fft/_pocketfft/tests/__init__.py +0 -0
  188. scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
  189. scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
  190. scipy/fft/_realtransforms.py +706 -0
  191. scipy/fft/_realtransforms_backend.py +63 -0
  192. scipy/fft/tests/__init__.py +0 -0
  193. scipy/fft/tests/mock_backend.py +96 -0
  194. scipy/fft/tests/test_backend.py +98 -0
  195. scipy/fft/tests/test_basic.py +504 -0
  196. scipy/fft/tests/test_fftlog.py +215 -0
  197. scipy/fft/tests/test_helper.py +558 -0
  198. scipy/fft/tests/test_multithreading.py +84 -0
  199. scipy/fft/tests/test_real_transforms.py +247 -0
  200. scipy/fftpack/__init__.py +103 -0
  201. scipy/fftpack/_basic.py +428 -0
  202. scipy/fftpack/_helper.py +115 -0
  203. scipy/fftpack/_pseudo_diffs.py +554 -0
  204. scipy/fftpack/_realtransforms.py +598 -0
  205. scipy/fftpack/basic.py +20 -0
  206. scipy/fftpack/convolve.cpython-311-darwin.so +0 -0
  207. scipy/fftpack/helper.py +19 -0
  208. scipy/fftpack/pseudo_diffs.py +22 -0
  209. scipy/fftpack/realtransforms.py +19 -0
  210. scipy/fftpack/tests/__init__.py +0 -0
  211. scipy/fftpack/tests/fftw_double_ref.npz +0 -0
  212. scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
  213. scipy/fftpack/tests/fftw_single_ref.npz +0 -0
  214. scipy/fftpack/tests/test.npz +0 -0
  215. scipy/fftpack/tests/test_basic.py +877 -0
  216. scipy/fftpack/tests/test_helper.py +54 -0
  217. scipy/fftpack/tests/test_import.py +33 -0
  218. scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
  219. scipy/fftpack/tests/test_real_transforms.py +836 -0
  220. scipy/integrate/__init__.py +122 -0
  221. scipy/integrate/_bvp.py +1160 -0
  222. scipy/integrate/_cubature.py +729 -0
  223. scipy/integrate/_dop.cpython-311-darwin.so +0 -0
  224. scipy/integrate/_ivp/__init__.py +8 -0
  225. scipy/integrate/_ivp/base.py +290 -0
  226. scipy/integrate/_ivp/bdf.py +478 -0
  227. scipy/integrate/_ivp/common.py +451 -0
  228. scipy/integrate/_ivp/dop853_coefficients.py +193 -0
  229. scipy/integrate/_ivp/ivp.py +755 -0
  230. scipy/integrate/_ivp/lsoda.py +224 -0
  231. scipy/integrate/_ivp/radau.py +572 -0
  232. scipy/integrate/_ivp/rk.py +601 -0
  233. scipy/integrate/_ivp/tests/__init__.py +0 -0
  234. scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
  235. scipy/integrate/_ivp/tests/test_rk.py +37 -0
  236. scipy/integrate/_lebedev.py +5450 -0
  237. scipy/integrate/_lsoda.cpython-311-darwin.so +0 -0
  238. scipy/integrate/_ode.py +1395 -0
  239. scipy/integrate/_odepack.cpython-311-darwin.so +0 -0
  240. scipy/integrate/_odepack_py.py +273 -0
  241. scipy/integrate/_quad_vec.py +674 -0
  242. scipy/integrate/_quadpack.cpython-311-darwin.so +0 -0
  243. scipy/integrate/_quadpack_py.py +1283 -0
  244. scipy/integrate/_quadrature.py +1336 -0
  245. scipy/integrate/_rules/__init__.py +12 -0
  246. scipy/integrate/_rules/_base.py +518 -0
  247. scipy/integrate/_rules/_gauss_kronrod.py +202 -0
  248. scipy/integrate/_rules/_gauss_legendre.py +62 -0
  249. scipy/integrate/_rules/_genz_malik.py +210 -0
  250. scipy/integrate/_tanhsinh.py +1385 -0
  251. scipy/integrate/_test_multivariate.cpython-311-darwin.so +0 -0
  252. scipy/integrate/_test_odeint_banded.cpython-311-darwin.so +0 -0
  253. scipy/integrate/_vode.cpython-311-darwin.so +0 -0
  254. scipy/integrate/dop.py +15 -0
  255. scipy/integrate/lsoda.py +15 -0
  256. scipy/integrate/odepack.py +17 -0
  257. scipy/integrate/quadpack.py +23 -0
  258. scipy/integrate/tests/__init__.py +0 -0
  259. scipy/integrate/tests/test__quad_vec.py +211 -0
  260. scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
  261. scipy/integrate/tests/test_bvp.py +714 -0
  262. scipy/integrate/tests/test_cubature.py +1375 -0
  263. scipy/integrate/tests/test_integrate.py +840 -0
  264. scipy/integrate/tests/test_odeint_jac.py +74 -0
  265. scipy/integrate/tests/test_quadpack.py +680 -0
  266. scipy/integrate/tests/test_quadrature.py +730 -0
  267. scipy/integrate/tests/test_tanhsinh.py +1171 -0
  268. scipy/integrate/vode.py +15 -0
  269. scipy/interpolate/__init__.py +228 -0
  270. scipy/interpolate/_bary_rational.py +715 -0
  271. scipy/interpolate/_bsplines.py +2469 -0
  272. scipy/interpolate/_cubic.py +973 -0
  273. scipy/interpolate/_dfitpack.cpython-311-darwin.so +0 -0
  274. scipy/interpolate/_dierckx.cpython-311-darwin.so +0 -0
  275. scipy/interpolate/_fitpack.cpython-311-darwin.so +0 -0
  276. scipy/interpolate/_fitpack2.py +2397 -0
  277. scipy/interpolate/_fitpack_impl.py +811 -0
  278. scipy/interpolate/_fitpack_py.py +898 -0
  279. scipy/interpolate/_fitpack_repro.py +996 -0
  280. scipy/interpolate/_interpnd.cpython-311-darwin.so +0 -0
  281. scipy/interpolate/_interpolate.py +2266 -0
  282. scipy/interpolate/_ndbspline.py +415 -0
  283. scipy/interpolate/_ndgriddata.py +329 -0
  284. scipy/interpolate/_pade.py +67 -0
  285. scipy/interpolate/_polyint.py +1025 -0
  286. scipy/interpolate/_ppoly.cpython-311-darwin.so +0 -0
  287. scipy/interpolate/_rbf.py +290 -0
  288. scipy/interpolate/_rbfinterp.py +550 -0
  289. scipy/interpolate/_rbfinterp_pythran.cpython-311-darwin.so +0 -0
  290. scipy/interpolate/_rgi.py +764 -0
  291. scipy/interpolate/_rgi_cython.cpython-311-darwin.so +0 -0
  292. scipy/interpolate/dfitpack.py +24 -0
  293. scipy/interpolate/fitpack.py +31 -0
  294. scipy/interpolate/fitpack2.py +29 -0
  295. scipy/interpolate/interpnd.py +24 -0
  296. scipy/interpolate/interpolate.py +30 -0
  297. scipy/interpolate/ndgriddata.py +23 -0
  298. scipy/interpolate/polyint.py +24 -0
  299. scipy/interpolate/rbf.py +18 -0
  300. scipy/interpolate/tests/__init__.py +0 -0
  301. scipy/interpolate/tests/data/bug-1310.npz +0 -0
  302. scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
  303. scipy/interpolate/tests/data/gcvspl.npz +0 -0
  304. scipy/interpolate/tests/test_bary_rational.py +368 -0
  305. scipy/interpolate/tests/test_bsplines.py +3754 -0
  306. scipy/interpolate/tests/test_fitpack.py +519 -0
  307. scipy/interpolate/tests/test_fitpack2.py +1431 -0
  308. scipy/interpolate/tests/test_gil.py +64 -0
  309. scipy/interpolate/tests/test_interpnd.py +452 -0
  310. scipy/interpolate/tests/test_interpolate.py +2630 -0
  311. scipy/interpolate/tests/test_ndgriddata.py +308 -0
  312. scipy/interpolate/tests/test_pade.py +107 -0
  313. scipy/interpolate/tests/test_polyint.py +972 -0
  314. scipy/interpolate/tests/test_rbf.py +246 -0
  315. scipy/interpolate/tests/test_rbfinterp.py +534 -0
  316. scipy/interpolate/tests/test_rgi.py +1151 -0
  317. scipy/io/__init__.py +116 -0
  318. scipy/io/_fast_matrix_market/__init__.py +600 -0
  319. scipy/io/_fast_matrix_market/_fmm_core.cpython-311-darwin.so +0 -0
  320. scipy/io/_fortran.py +354 -0
  321. scipy/io/_harwell_boeing/__init__.py +7 -0
  322. scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
  323. scipy/io/_harwell_boeing/hb.py +571 -0
  324. scipy/io/_harwell_boeing/tests/__init__.py +0 -0
  325. scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
  326. scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
  327. scipy/io/_idl.py +917 -0
  328. scipy/io/_mmio.py +968 -0
  329. scipy/io/_netcdf.py +1104 -0
  330. scipy/io/_test_fortran.cpython-311-darwin.so +0 -0
  331. scipy/io/arff/__init__.py +28 -0
  332. scipy/io/arff/_arffread.py +873 -0
  333. scipy/io/arff/arffread.py +19 -0
  334. scipy/io/arff/tests/__init__.py +0 -0
  335. scipy/io/arff/tests/data/iris.arff +225 -0
  336. scipy/io/arff/tests/data/missing.arff +8 -0
  337. scipy/io/arff/tests/data/nodata.arff +11 -0
  338. scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
  339. scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
  340. scipy/io/arff/tests/data/test1.arff +10 -0
  341. scipy/io/arff/tests/data/test10.arff +8 -0
  342. scipy/io/arff/tests/data/test11.arff +11 -0
  343. scipy/io/arff/tests/data/test2.arff +15 -0
  344. scipy/io/arff/tests/data/test3.arff +6 -0
  345. scipy/io/arff/tests/data/test4.arff +11 -0
  346. scipy/io/arff/tests/data/test5.arff +26 -0
  347. scipy/io/arff/tests/data/test6.arff +12 -0
  348. scipy/io/arff/tests/data/test7.arff +15 -0
  349. scipy/io/arff/tests/data/test8.arff +12 -0
  350. scipy/io/arff/tests/data/test9.arff +14 -0
  351. scipy/io/arff/tests/test_arffread.py +421 -0
  352. scipy/io/harwell_boeing.py +17 -0
  353. scipy/io/idl.py +17 -0
  354. scipy/io/matlab/__init__.py +66 -0
  355. scipy/io/matlab/_byteordercodes.py +75 -0
  356. scipy/io/matlab/_mio.py +375 -0
  357. scipy/io/matlab/_mio4.py +632 -0
  358. scipy/io/matlab/_mio5.py +901 -0
  359. scipy/io/matlab/_mio5_params.py +281 -0
  360. scipy/io/matlab/_mio5_utils.cpython-311-darwin.so +0 -0
  361. scipy/io/matlab/_mio_utils.cpython-311-darwin.so +0 -0
  362. scipy/io/matlab/_miobase.py +435 -0
  363. scipy/io/matlab/_streams.cpython-311-darwin.so +0 -0
  364. scipy/io/matlab/byteordercodes.py +17 -0
  365. scipy/io/matlab/mio.py +16 -0
  366. scipy/io/matlab/mio4.py +17 -0
  367. scipy/io/matlab/mio5.py +19 -0
  368. scipy/io/matlab/mio5_params.py +18 -0
  369. scipy/io/matlab/mio5_utils.py +17 -0
  370. scipy/io/matlab/mio_utils.py +17 -0
  371. scipy/io/matlab/miobase.py +16 -0
  372. scipy/io/matlab/streams.py +16 -0
  373. scipy/io/matlab/tests/__init__.py +0 -0
  374. scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
  375. scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
  376. scipy/io/matlab/tests/data/big_endian.mat +0 -0
  377. scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
  378. scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
  379. scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
  380. scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
  381. scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
  382. scipy/io/matlab/tests/data/little_endian.mat +0 -0
  383. scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
  384. scipy/io/matlab/tests/data/malformed1.mat +0 -0
  385. scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
  386. scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
  387. scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
  388. scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
  389. scipy/io/matlab/tests/data/parabola.mat +0 -0
  390. scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
  391. scipy/io/matlab/tests/data/some_functions.mat +0 -0
  392. scipy/io/matlab/tests/data/sqr.mat +0 -0
  393. scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
  394. scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
  395. scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
  396. scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
  397. scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
  398. scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
  399. scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
  400. scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
  401. scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
  402. scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
  403. scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
  404. scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
  405. scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
  406. scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
  407. scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
  408. scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
  409. scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
  410. scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
  411. scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
  412. scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
  413. scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
  414. scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
  415. scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
  416. scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
  417. scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
  418. scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
  419. scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
  420. scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
  421. scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
  422. scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
  423. scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
  424. scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
  425. scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
  426. scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
  427. scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
  428. scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
  429. scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
  430. scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
  431. scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
  432. scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
  433. scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
  434. scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
  435. scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
  436. scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
  437. scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
  438. scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
  439. scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
  440. scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
  441. scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
  442. scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
  443. scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
  444. scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
  445. scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
  446. scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
  447. scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
  448. scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
  449. scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
  450. scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
  451. scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
  452. scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
  453. scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
  454. scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
  455. scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
  456. scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
  457. scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
  458. scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
  459. scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
  460. scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
  461. scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
  462. scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
  463. scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
  464. scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
  465. scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
  466. scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
  467. scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
  468. scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
  469. scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
  470. scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
  471. scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
  472. scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
  473. scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
  474. scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
  475. scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
  476. scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
  477. scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
  478. scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
  479. scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
  480. scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
  481. scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
  482. scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
  483. scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
  484. scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
  485. scipy/io/matlab/tests/test_byteordercodes.py +29 -0
  486. scipy/io/matlab/tests/test_mio.py +1399 -0
  487. scipy/io/matlab/tests/test_mio5_utils.py +179 -0
  488. scipy/io/matlab/tests/test_mio_funcs.py +51 -0
  489. scipy/io/matlab/tests/test_mio_utils.py +45 -0
  490. scipy/io/matlab/tests/test_miobase.py +32 -0
  491. scipy/io/matlab/tests/test_pathological.py +33 -0
  492. scipy/io/matlab/tests/test_streams.py +232 -0
  493. scipy/io/mmio.py +17 -0
  494. scipy/io/netcdf.py +17 -0
  495. scipy/io/tests/__init__.py +0 -0
  496. scipy/io/tests/data/Transparent Busy.ani +0 -0
  497. scipy/io/tests/data/array_float32_1d.sav +0 -0
  498. scipy/io/tests/data/array_float32_2d.sav +0 -0
  499. scipy/io/tests/data/array_float32_3d.sav +0 -0
  500. scipy/io/tests/data/array_float32_4d.sav +0 -0
  501. scipy/io/tests/data/array_float32_5d.sav +0 -0
  502. scipy/io/tests/data/array_float32_6d.sav +0 -0
  503. scipy/io/tests/data/array_float32_7d.sav +0 -0
  504. scipy/io/tests/data/array_float32_8d.sav +0 -0
  505. scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
  506. scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
  507. scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
  508. scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
  509. scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
  510. scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
  511. scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
  512. scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
  513. scipy/io/tests/data/example_1.nc +0 -0
  514. scipy/io/tests/data/example_2.nc +0 -0
  515. scipy/io/tests/data/example_3_maskedvals.nc +0 -0
  516. scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
  517. scipy/io/tests/data/fortran-mixed.dat +0 -0
  518. scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
  519. scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
  520. scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
  521. scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
  522. scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
  523. scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
  524. scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
  525. scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
  526. scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
  527. scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
  528. scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
  529. scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
  530. scipy/io/tests/data/invalid_pointer.sav +0 -0
  531. scipy/io/tests/data/null_pointer.sav +0 -0
  532. scipy/io/tests/data/scalar_byte.sav +0 -0
  533. scipy/io/tests/data/scalar_byte_descr.sav +0 -0
  534. scipy/io/tests/data/scalar_complex32.sav +0 -0
  535. scipy/io/tests/data/scalar_complex64.sav +0 -0
  536. scipy/io/tests/data/scalar_float32.sav +0 -0
  537. scipy/io/tests/data/scalar_float64.sav +0 -0
  538. scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
  539. scipy/io/tests/data/scalar_int16.sav +0 -0
  540. scipy/io/tests/data/scalar_int32.sav +0 -0
  541. scipy/io/tests/data/scalar_int64.sav +0 -0
  542. scipy/io/tests/data/scalar_string.sav +0 -0
  543. scipy/io/tests/data/scalar_uint16.sav +0 -0
  544. scipy/io/tests/data/scalar_uint32.sav +0 -0
  545. scipy/io/tests/data/scalar_uint64.sav +0 -0
  546. scipy/io/tests/data/struct_arrays.sav +0 -0
  547. scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
  548. scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
  549. scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
  550. scipy/io/tests/data/struct_inherit.sav +0 -0
  551. scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
  552. scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
  553. scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
  554. scipy/io/tests/data/struct_pointers.sav +0 -0
  555. scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
  556. scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
  557. scipy/io/tests/data/struct_scalars.sav +0 -0
  558. scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
  559. scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
  560. scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
  561. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
  562. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
  563. scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
  564. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
  565. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
  566. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
  567. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
  568. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
  569. scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
  570. scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
  571. scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
  572. scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
  573. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
  574. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
  575. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
  576. scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
  577. scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
  578. scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
  579. scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
  580. scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
  581. scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
  582. scipy/io/tests/data/various_compressed.sav +0 -0
  583. scipy/io/tests/test_fortran.py +264 -0
  584. scipy/io/tests/test_idl.py +483 -0
  585. scipy/io/tests/test_mmio.py +831 -0
  586. scipy/io/tests/test_netcdf.py +550 -0
  587. scipy/io/tests/test_paths.py +93 -0
  588. scipy/io/tests/test_wavfile.py +501 -0
  589. scipy/io/wavfile.py +938 -0
  590. scipy/linalg/__init__.pxd +1 -0
  591. scipy/linalg/__init__.py +236 -0
  592. scipy/linalg/_basic.py +2146 -0
  593. scipy/linalg/_blas_subroutines.h +164 -0
  594. scipy/linalg/_cythonized_array_utils.cpython-311-darwin.so +0 -0
  595. scipy/linalg/_cythonized_array_utils.pxd +40 -0
  596. scipy/linalg/_cythonized_array_utils.pyi +16 -0
  597. scipy/linalg/_decomp.py +1645 -0
  598. scipy/linalg/_decomp_cholesky.py +413 -0
  599. scipy/linalg/_decomp_cossin.py +236 -0
  600. scipy/linalg/_decomp_interpolative.cpython-311-darwin.so +0 -0
  601. scipy/linalg/_decomp_ldl.py +356 -0
  602. scipy/linalg/_decomp_lu.py +401 -0
  603. scipy/linalg/_decomp_lu_cython.cpython-311-darwin.so +0 -0
  604. scipy/linalg/_decomp_lu_cython.pyi +6 -0
  605. scipy/linalg/_decomp_polar.py +113 -0
  606. scipy/linalg/_decomp_qr.py +494 -0
  607. scipy/linalg/_decomp_qz.py +452 -0
  608. scipy/linalg/_decomp_schur.py +336 -0
  609. scipy/linalg/_decomp_svd.py +545 -0
  610. scipy/linalg/_decomp_update.cpython-311-darwin.so +0 -0
  611. scipy/linalg/_expm_frechet.py +417 -0
  612. scipy/linalg/_fblas.cpython-311-darwin.so +0 -0
  613. scipy/linalg/_flapack.cpython-311-darwin.so +0 -0
  614. scipy/linalg/_lapack_subroutines.h +1521 -0
  615. scipy/linalg/_linalg_pythran.cpython-311-darwin.so +0 -0
  616. scipy/linalg/_matfuncs.py +1050 -0
  617. scipy/linalg/_matfuncs_expm.cpython-311-darwin.so +0 -0
  618. scipy/linalg/_matfuncs_expm.pyi +6 -0
  619. scipy/linalg/_matfuncs_inv_ssq.py +886 -0
  620. scipy/linalg/_matfuncs_schur_sqrtm.cpython-311-darwin.so +0 -0
  621. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  622. scipy/linalg/_matfuncs_sqrtm_triu.cpython-311-darwin.so +0 -0
  623. scipy/linalg/_misc.py +191 -0
  624. scipy/linalg/_procrustes.py +113 -0
  625. scipy/linalg/_sketches.py +189 -0
  626. scipy/linalg/_solve_toeplitz.cpython-311-darwin.so +0 -0
  627. scipy/linalg/_solvers.py +862 -0
  628. scipy/linalg/_special_matrices.py +1322 -0
  629. scipy/linalg/_testutils.py +65 -0
  630. scipy/linalg/basic.py +23 -0
  631. scipy/linalg/blas.py +484 -0
  632. scipy/linalg/cython_blas.cpython-311-darwin.so +0 -0
  633. scipy/linalg/cython_blas.pxd +169 -0
  634. scipy/linalg/cython_blas.pyx +1432 -0
  635. scipy/linalg/cython_lapack.cpython-311-darwin.so +0 -0
  636. scipy/linalg/cython_lapack.pxd +1528 -0
  637. scipy/linalg/cython_lapack.pyx +12045 -0
  638. scipy/linalg/decomp.py +23 -0
  639. scipy/linalg/decomp_cholesky.py +21 -0
  640. scipy/linalg/decomp_lu.py +21 -0
  641. scipy/linalg/decomp_qr.py +20 -0
  642. scipy/linalg/decomp_schur.py +21 -0
  643. scipy/linalg/decomp_svd.py +21 -0
  644. scipy/linalg/interpolative.py +989 -0
  645. scipy/linalg/lapack.py +1081 -0
  646. scipy/linalg/matfuncs.py +23 -0
  647. scipy/linalg/misc.py +21 -0
  648. scipy/linalg/special_matrices.py +22 -0
  649. scipy/linalg/tests/__init__.py +0 -0
  650. scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
  651. scipy/linalg/tests/_cython_examples/meson.build +34 -0
  652. scipy/linalg/tests/data/carex_15_data.npz +0 -0
  653. scipy/linalg/tests/data/carex_18_data.npz +0 -0
  654. scipy/linalg/tests/data/carex_19_data.npz +0 -0
  655. scipy/linalg/tests/data/carex_20_data.npz +0 -0
  656. scipy/linalg/tests/data/carex_6_data.npz +0 -0
  657. scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
  658. scipy/linalg/tests/test_basic.py +2074 -0
  659. scipy/linalg/tests/test_batch.py +588 -0
  660. scipy/linalg/tests/test_blas.py +1127 -0
  661. scipy/linalg/tests/test_cython_blas.py +118 -0
  662. scipy/linalg/tests/test_cython_lapack.py +22 -0
  663. scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
  664. scipy/linalg/tests/test_decomp.py +3189 -0
  665. scipy/linalg/tests/test_decomp_cholesky.py +268 -0
  666. scipy/linalg/tests/test_decomp_cossin.py +314 -0
  667. scipy/linalg/tests/test_decomp_ldl.py +137 -0
  668. scipy/linalg/tests/test_decomp_lu.py +308 -0
  669. scipy/linalg/tests/test_decomp_polar.py +110 -0
  670. scipy/linalg/tests/test_decomp_update.py +1701 -0
  671. scipy/linalg/tests/test_extending.py +46 -0
  672. scipy/linalg/tests/test_fblas.py +607 -0
  673. scipy/linalg/tests/test_interpolative.py +232 -0
  674. scipy/linalg/tests/test_lapack.py +3616 -0
  675. scipy/linalg/tests/test_matfuncs.py +1118 -0
  676. scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
  677. scipy/linalg/tests/test_procrustes.py +214 -0
  678. scipy/linalg/tests/test_sketches.py +118 -0
  679. scipy/linalg/tests/test_solve_toeplitz.py +150 -0
  680. scipy/linalg/tests/test_solvers.py +844 -0
  681. scipy/linalg/tests/test_special_matrices.py +636 -0
  682. scipy/misc/__init__.py +6 -0
  683. scipy/misc/common.py +6 -0
  684. scipy/misc/doccer.py +6 -0
  685. scipy/ndimage/__init__.py +174 -0
  686. scipy/ndimage/_ctest.cpython-311-darwin.so +0 -0
  687. scipy/ndimage/_cytest.cpython-311-darwin.so +0 -0
  688. scipy/ndimage/_delegators.py +303 -0
  689. scipy/ndimage/_filters.py +2393 -0
  690. scipy/ndimage/_fourier.py +306 -0
  691. scipy/ndimage/_interpolation.py +1033 -0
  692. scipy/ndimage/_measurements.py +1689 -0
  693. scipy/ndimage/_morphology.py +2634 -0
  694. scipy/ndimage/_nd_image.cpython-311-darwin.so +0 -0
  695. scipy/ndimage/_ndimage_api.py +16 -0
  696. scipy/ndimage/_ni_docstrings.py +214 -0
  697. scipy/ndimage/_ni_label.cpython-311-darwin.so +0 -0
  698. scipy/ndimage/_ni_support.py +139 -0
  699. scipy/ndimage/_rank_filter_1d.cpython-311-darwin.so +0 -0
  700. scipy/ndimage/_support_alternative_backends.py +84 -0
  701. scipy/ndimage/filters.py +27 -0
  702. scipy/ndimage/fourier.py +21 -0
  703. scipy/ndimage/interpolation.py +22 -0
  704. scipy/ndimage/measurements.py +24 -0
  705. scipy/ndimage/morphology.py +27 -0
  706. scipy/ndimage/tests/__init__.py +12 -0
  707. scipy/ndimage/tests/data/label_inputs.txt +21 -0
  708. scipy/ndimage/tests/data/label_results.txt +294 -0
  709. scipy/ndimage/tests/data/label_strels.txt +42 -0
  710. scipy/ndimage/tests/dots.png +0 -0
  711. scipy/ndimage/tests/test_c_api.py +102 -0
  712. scipy/ndimage/tests/test_datatypes.py +67 -0
  713. scipy/ndimage/tests/test_filters.py +2998 -0
  714. scipy/ndimage/tests/test_fourier.py +187 -0
  715. scipy/ndimage/tests/test_interpolation.py +1491 -0
  716. scipy/ndimage/tests/test_measurements.py +1592 -0
  717. scipy/ndimage/tests/test_morphology.py +2950 -0
  718. scipy/ndimage/tests/test_ni_support.py +78 -0
  719. scipy/ndimage/tests/test_splines.py +70 -0
  720. scipy/odr/__init__.py +131 -0
  721. scipy/odr/__odrpack.cpython-311-darwin.so +0 -0
  722. scipy/odr/_add_newdocs.py +34 -0
  723. scipy/odr/_models.py +315 -0
  724. scipy/odr/_odrpack.py +1154 -0
  725. scipy/odr/models.py +20 -0
  726. scipy/odr/odrpack.py +21 -0
  727. scipy/odr/tests/__init__.py +0 -0
  728. scipy/odr/tests/test_odr.py +607 -0
  729. scipy/optimize/__init__.pxd +1 -0
  730. scipy/optimize/__init__.py +460 -0
  731. scipy/optimize/_basinhopping.py +741 -0
  732. scipy/optimize/_bglu_dense.cpython-311-darwin.so +0 -0
  733. scipy/optimize/_bracket.py +706 -0
  734. scipy/optimize/_chandrupatla.py +551 -0
  735. scipy/optimize/_cobyla_py.py +297 -0
  736. scipy/optimize/_cobyqa_py.py +72 -0
  737. scipy/optimize/_constraints.py +598 -0
  738. scipy/optimize/_dcsrch.py +728 -0
  739. scipy/optimize/_differentiable_functions.py +835 -0
  740. scipy/optimize/_differentialevolution.py +1970 -0
  741. scipy/optimize/_direct.cpython-311-darwin.so +0 -0
  742. scipy/optimize/_direct_py.py +280 -0
  743. scipy/optimize/_dual_annealing.py +732 -0
  744. scipy/optimize/_elementwise.py +798 -0
  745. scipy/optimize/_group_columns.cpython-311-darwin.so +0 -0
  746. scipy/optimize/_hessian_update_strategy.py +479 -0
  747. scipy/optimize/_highspy/__init__.py +0 -0
  748. scipy/optimize/_highspy/_core.cpython-311-darwin.so +0 -0
  749. scipy/optimize/_highspy/_highs_options.cpython-311-darwin.so +0 -0
  750. scipy/optimize/_highspy/_highs_wrapper.py +338 -0
  751. scipy/optimize/_isotonic.py +157 -0
  752. scipy/optimize/_lbfgsb.cpython-311-darwin.so +0 -0
  753. scipy/optimize/_lbfgsb_py.py +619 -0
  754. scipy/optimize/_linesearch.py +896 -0
  755. scipy/optimize/_linprog.py +733 -0
  756. scipy/optimize/_linprog_doc.py +1434 -0
  757. scipy/optimize/_linprog_highs.py +422 -0
  758. scipy/optimize/_linprog_ip.py +1141 -0
  759. scipy/optimize/_linprog_rs.py +572 -0
  760. scipy/optimize/_linprog_simplex.py +663 -0
  761. scipy/optimize/_linprog_util.py +1521 -0
  762. scipy/optimize/_lsap.cpython-311-darwin.so +0 -0
  763. scipy/optimize/_lsq/__init__.py +5 -0
  764. scipy/optimize/_lsq/bvls.py +183 -0
  765. scipy/optimize/_lsq/common.py +731 -0
  766. scipy/optimize/_lsq/dogbox.py +345 -0
  767. scipy/optimize/_lsq/givens_elimination.cpython-311-darwin.so +0 -0
  768. scipy/optimize/_lsq/least_squares.py +1044 -0
  769. scipy/optimize/_lsq/lsq_linear.py +361 -0
  770. scipy/optimize/_lsq/trf.py +587 -0
  771. scipy/optimize/_lsq/trf_linear.py +249 -0
  772. scipy/optimize/_milp.py +394 -0
  773. scipy/optimize/_minimize.py +1200 -0
  774. scipy/optimize/_minpack.cpython-311-darwin.so +0 -0
  775. scipy/optimize/_minpack_py.py +1178 -0
  776. scipy/optimize/_moduleTNC.cpython-311-darwin.so +0 -0
  777. scipy/optimize/_nnls.py +96 -0
  778. scipy/optimize/_nonlin.py +1634 -0
  779. scipy/optimize/_numdiff.py +963 -0
  780. scipy/optimize/_optimize.py +4169 -0
  781. scipy/optimize/_pava_pybind.cpython-311-darwin.so +0 -0
  782. scipy/optimize/_qap.py +760 -0
  783. scipy/optimize/_remove_redundancy.py +522 -0
  784. scipy/optimize/_root.py +732 -0
  785. scipy/optimize/_root_scalar.py +538 -0
  786. scipy/optimize/_shgo.py +1606 -0
  787. scipy/optimize/_shgo_lib/__init__.py +0 -0
  788. scipy/optimize/_shgo_lib/_complex.py +1225 -0
  789. scipy/optimize/_shgo_lib/_vertex.py +460 -0
  790. scipy/optimize/_slsqp_py.py +603 -0
  791. scipy/optimize/_slsqplib.cpython-311-darwin.so +0 -0
  792. scipy/optimize/_spectral.py +260 -0
  793. scipy/optimize/_tnc.py +438 -0
  794. scipy/optimize/_trlib/__init__.py +12 -0
  795. scipy/optimize/_trlib/_trlib.cpython-311-darwin.so +0 -0
  796. scipy/optimize/_trustregion.py +318 -0
  797. scipy/optimize/_trustregion_constr/__init__.py +6 -0
  798. scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
  799. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
  800. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
  801. scipy/optimize/_trustregion_constr/projections.py +411 -0
  802. scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
  803. scipy/optimize/_trustregion_constr/report.py +49 -0
  804. scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
  805. scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
  806. scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
  807. scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
  808. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
  809. scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
  810. scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
  811. scipy/optimize/_trustregion_dogleg.py +122 -0
  812. scipy/optimize/_trustregion_exact.py +437 -0
  813. scipy/optimize/_trustregion_krylov.py +65 -0
  814. scipy/optimize/_trustregion_ncg.py +126 -0
  815. scipy/optimize/_tstutils.py +972 -0
  816. scipy/optimize/_zeros.cpython-311-darwin.so +0 -0
  817. scipy/optimize/_zeros_py.py +1475 -0
  818. scipy/optimize/cobyla.py +19 -0
  819. scipy/optimize/cython_optimize/__init__.py +133 -0
  820. scipy/optimize/cython_optimize/_zeros.cpython-311-darwin.so +0 -0
  821. scipy/optimize/cython_optimize/_zeros.pxd +33 -0
  822. scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
  823. scipy/optimize/cython_optimize.pxd +11 -0
  824. scipy/optimize/elementwise.py +38 -0
  825. scipy/optimize/lbfgsb.py +23 -0
  826. scipy/optimize/linesearch.py +18 -0
  827. scipy/optimize/minpack.py +27 -0
  828. scipy/optimize/minpack2.py +17 -0
  829. scipy/optimize/moduleTNC.py +19 -0
  830. scipy/optimize/nonlin.py +29 -0
  831. scipy/optimize/optimize.py +40 -0
  832. scipy/optimize/slsqp.py +22 -0
  833. scipy/optimize/tests/__init__.py +0 -0
  834. scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
  835. scipy/optimize/tests/_cython_examples/meson.build +32 -0
  836. scipy/optimize/tests/test__basinhopping.py +535 -0
  837. scipy/optimize/tests/test__differential_evolution.py +1703 -0
  838. scipy/optimize/tests/test__dual_annealing.py +416 -0
  839. scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
  840. scipy/optimize/tests/test__numdiff.py +885 -0
  841. scipy/optimize/tests/test__remove_redundancy.py +228 -0
  842. scipy/optimize/tests/test__root.py +124 -0
  843. scipy/optimize/tests/test__shgo.py +1164 -0
  844. scipy/optimize/tests/test__spectral.py +226 -0
  845. scipy/optimize/tests/test_bracket.py +896 -0
  846. scipy/optimize/tests/test_chandrupatla.py +982 -0
  847. scipy/optimize/tests/test_cobyla.py +195 -0
  848. scipy/optimize/tests/test_cobyqa.py +252 -0
  849. scipy/optimize/tests/test_constraint_conversion.py +286 -0
  850. scipy/optimize/tests/test_constraints.py +255 -0
  851. scipy/optimize/tests/test_cython_optimize.py +92 -0
  852. scipy/optimize/tests/test_differentiable_functions.py +1025 -0
  853. scipy/optimize/tests/test_direct.py +321 -0
  854. scipy/optimize/tests/test_extending.py +28 -0
  855. scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
  856. scipy/optimize/tests/test_isotonic_regression.py +167 -0
  857. scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
  858. scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
  859. scipy/optimize/tests/test_least_squares.py +986 -0
  860. scipy/optimize/tests/test_linear_assignment.py +116 -0
  861. scipy/optimize/tests/test_linesearch.py +328 -0
  862. scipy/optimize/tests/test_linprog.py +2577 -0
  863. scipy/optimize/tests/test_lsq_common.py +297 -0
  864. scipy/optimize/tests/test_lsq_linear.py +287 -0
  865. scipy/optimize/tests/test_milp.py +459 -0
  866. scipy/optimize/tests/test_minimize_constrained.py +845 -0
  867. scipy/optimize/tests/test_minpack.py +1194 -0
  868. scipy/optimize/tests/test_nnls.py +469 -0
  869. scipy/optimize/tests/test_nonlin.py +572 -0
  870. scipy/optimize/tests/test_optimize.py +3335 -0
  871. scipy/optimize/tests/test_quadratic_assignment.py +455 -0
  872. scipy/optimize/tests/test_regression.py +40 -0
  873. scipy/optimize/tests/test_slsqp.py +645 -0
  874. scipy/optimize/tests/test_tnc.py +345 -0
  875. scipy/optimize/tests/test_trustregion.py +110 -0
  876. scipy/optimize/tests/test_trustregion_exact.py +351 -0
  877. scipy/optimize/tests/test_trustregion_krylov.py +170 -0
  878. scipy/optimize/tests/test_zeros.py +998 -0
  879. scipy/optimize/tnc.py +22 -0
  880. scipy/optimize/zeros.py +26 -0
  881. scipy/signal/__init__.py +316 -0
  882. scipy/signal/_arraytools.py +264 -0
  883. scipy/signal/_czt.py +575 -0
  884. scipy/signal/_delegators.py +568 -0
  885. scipy/signal/_filter_design.py +5881 -0
  886. scipy/signal/_fir_filter_design.py +1458 -0
  887. scipy/signal/_lti_conversion.py +534 -0
  888. scipy/signal/_ltisys.py +3546 -0
  889. scipy/signal/_max_len_seq.py +139 -0
  890. scipy/signal/_max_len_seq_inner.cpython-311-darwin.so +0 -0
  891. scipy/signal/_peak_finding.py +1310 -0
  892. scipy/signal/_peak_finding_utils.cpython-311-darwin.so +0 -0
  893. scipy/signal/_polyutils.py +172 -0
  894. scipy/signal/_savitzky_golay.py +357 -0
  895. scipy/signal/_short_time_fft.py +2187 -0
  896. scipy/signal/_signal_api.py +30 -0
  897. scipy/signal/_signaltools.py +5309 -0
  898. scipy/signal/_sigtools.cpython-311-darwin.so +0 -0
  899. scipy/signal/_sosfilt.cpython-311-darwin.so +0 -0
  900. scipy/signal/_spectral_py.py +2462 -0
  901. scipy/signal/_spline.cpython-311-darwin.so +0 -0
  902. scipy/signal/_spline.pyi +34 -0
  903. scipy/signal/_spline_filters.py +848 -0
  904. scipy/signal/_support_alternative_backends.py +73 -0
  905. scipy/signal/_upfirdn.py +219 -0
  906. scipy/signal/_upfirdn_apply.cpython-311-darwin.so +0 -0
  907. scipy/signal/_waveforms.py +687 -0
  908. scipy/signal/_wavelets.py +29 -0
  909. scipy/signal/bsplines.py +21 -0
  910. scipy/signal/filter_design.py +28 -0
  911. scipy/signal/fir_filter_design.py +21 -0
  912. scipy/signal/lti_conversion.py +20 -0
  913. scipy/signal/ltisys.py +25 -0
  914. scipy/signal/signaltools.py +27 -0
  915. scipy/signal/spectral.py +21 -0
  916. scipy/signal/spline.py +18 -0
  917. scipy/signal/tests/__init__.py +0 -0
  918. scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
  919. scipy/signal/tests/mpsig.py +122 -0
  920. scipy/signal/tests/test_array_tools.py +111 -0
  921. scipy/signal/tests/test_bsplines.py +365 -0
  922. scipy/signal/tests/test_cont2discrete.py +424 -0
  923. scipy/signal/tests/test_czt.py +221 -0
  924. scipy/signal/tests/test_dltisys.py +599 -0
  925. scipy/signal/tests/test_filter_design.py +4725 -0
  926. scipy/signal/tests/test_fir_filter_design.py +846 -0
  927. scipy/signal/tests/test_ltisys.py +1225 -0
  928. scipy/signal/tests/test_max_len_seq.py +71 -0
  929. scipy/signal/tests/test_peak_finding.py +915 -0
  930. scipy/signal/tests/test_result_type.py +51 -0
  931. scipy/signal/tests/test_savitzky_golay.py +363 -0
  932. scipy/signal/tests/test_short_time_fft.py +1098 -0
  933. scipy/signal/tests/test_signaltools.py +4729 -0
  934. scipy/signal/tests/test_spectral.py +2072 -0
  935. scipy/signal/tests/test_splines.py +427 -0
  936. scipy/signal/tests/test_upfirdn.py +322 -0
  937. scipy/signal/tests/test_waveforms.py +400 -0
  938. scipy/signal/tests/test_wavelets.py +59 -0
  939. scipy/signal/tests/test_windows.py +987 -0
  940. scipy/signal/waveforms.py +20 -0
  941. scipy/signal/wavelets.py +17 -0
  942. scipy/signal/windows/__init__.py +52 -0
  943. scipy/signal/windows/_windows.py +2513 -0
  944. scipy/signal/windows/windows.py +23 -0
  945. scipy/sparse/__init__.py +350 -0
  946. scipy/sparse/_base.py +1610 -0
  947. scipy/sparse/_bsr.py +880 -0
  948. scipy/sparse/_compressed.py +1328 -0
  949. scipy/sparse/_construct.py +1454 -0
  950. scipy/sparse/_coo.py +1581 -0
  951. scipy/sparse/_csc.py +367 -0
  952. scipy/sparse/_csparsetools.cpython-311-darwin.so +0 -0
  953. scipy/sparse/_csr.py +558 -0
  954. scipy/sparse/_data.py +569 -0
  955. scipy/sparse/_dia.py +677 -0
  956. scipy/sparse/_dok.py +669 -0
  957. scipy/sparse/_extract.py +178 -0
  958. scipy/sparse/_index.py +444 -0
  959. scipy/sparse/_lil.py +632 -0
  960. scipy/sparse/_matrix.py +169 -0
  961. scipy/sparse/_matrix_io.py +167 -0
  962. scipy/sparse/_sparsetools.cpython-311-darwin.so +0 -0
  963. scipy/sparse/_spfuncs.py +76 -0
  964. scipy/sparse/_sputils.py +632 -0
  965. scipy/sparse/base.py +24 -0
  966. scipy/sparse/bsr.py +22 -0
  967. scipy/sparse/compressed.py +20 -0
  968. scipy/sparse/construct.py +38 -0
  969. scipy/sparse/coo.py +23 -0
  970. scipy/sparse/csc.py +22 -0
  971. scipy/sparse/csgraph/__init__.py +210 -0
  972. scipy/sparse/csgraph/_flow.cpython-311-darwin.so +0 -0
  973. scipy/sparse/csgraph/_laplacian.py +563 -0
  974. scipy/sparse/csgraph/_matching.cpython-311-darwin.so +0 -0
  975. scipy/sparse/csgraph/_min_spanning_tree.cpython-311-darwin.so +0 -0
  976. scipy/sparse/csgraph/_reordering.cpython-311-darwin.so +0 -0
  977. scipy/sparse/csgraph/_shortest_path.cpython-311-darwin.so +0 -0
  978. scipy/sparse/csgraph/_tools.cpython-311-darwin.so +0 -0
  979. scipy/sparse/csgraph/_traversal.cpython-311-darwin.so +0 -0
  980. scipy/sparse/csgraph/_validation.py +66 -0
  981. scipy/sparse/csgraph/tests/__init__.py +0 -0
  982. scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
  983. scipy/sparse/csgraph/tests/test_conversions.py +61 -0
  984. scipy/sparse/csgraph/tests/test_flow.py +209 -0
  985. scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
  986. scipy/sparse/csgraph/tests/test_matching.py +307 -0
  987. scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
  988. scipy/sparse/csgraph/tests/test_reordering.py +70 -0
  989. scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
  990. scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
  991. scipy/sparse/csgraph/tests/test_traversal.py +148 -0
  992. scipy/sparse/csr.py +22 -0
  993. scipy/sparse/data.py +18 -0
  994. scipy/sparse/dia.py +22 -0
  995. scipy/sparse/dok.py +22 -0
  996. scipy/sparse/extract.py +23 -0
  997. scipy/sparse/lil.py +22 -0
  998. scipy/sparse/linalg/__init__.py +148 -0
  999. scipy/sparse/linalg/_dsolve/__init__.py +71 -0
  1000. scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
  1001. scipy/sparse/linalg/_dsolve/_superlu.cpython-311-darwin.so +0 -0
  1002. scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
  1003. scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
  1004. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
  1005. scipy/sparse/linalg/_eigen/__init__.py +22 -0
  1006. scipy/sparse/linalg/_eigen/_svds.py +540 -0
  1007. scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
  1008. scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
  1009. scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
  1010. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-311-darwin.so +0 -0
  1011. scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
  1012. scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
  1013. scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
  1014. scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
  1015. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
  1016. scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
  1017. scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
  1018. scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
  1019. scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
  1020. scipy/sparse/linalg/_expm_multiply.py +816 -0
  1021. scipy/sparse/linalg/_interface.py +920 -0
  1022. scipy/sparse/linalg/_isolve/__init__.py +20 -0
  1023. scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
  1024. scipy/sparse/linalg/_isolve/iterative.py +1051 -0
  1025. scipy/sparse/linalg/_isolve/lgmres.py +230 -0
  1026. scipy/sparse/linalg/_isolve/lsmr.py +486 -0
  1027. scipy/sparse/linalg/_isolve/lsqr.py +589 -0
  1028. scipy/sparse/linalg/_isolve/minres.py +372 -0
  1029. scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
  1030. scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
  1031. scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
  1032. scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
  1033. scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
  1034. scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
  1035. scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
  1036. scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
  1037. scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
  1038. scipy/sparse/linalg/_isolve/utils.py +121 -0
  1039. scipy/sparse/linalg/_matfuncs.py +940 -0
  1040. scipy/sparse/linalg/_norm.py +195 -0
  1041. scipy/sparse/linalg/_onenormest.py +467 -0
  1042. scipy/sparse/linalg/_propack/_cpropack.cpython-311-darwin.so +0 -0
  1043. scipy/sparse/linalg/_propack/_dpropack.cpython-311-darwin.so +0 -0
  1044. scipy/sparse/linalg/_propack/_spropack.cpython-311-darwin.so +0 -0
  1045. scipy/sparse/linalg/_propack/_zpropack.cpython-311-darwin.so +0 -0
  1046. scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
  1047. scipy/sparse/linalg/_svdp.py +309 -0
  1048. scipy/sparse/linalg/dsolve.py +22 -0
  1049. scipy/sparse/linalg/eigen.py +21 -0
  1050. scipy/sparse/linalg/interface.py +20 -0
  1051. scipy/sparse/linalg/isolve.py +22 -0
  1052. scipy/sparse/linalg/matfuncs.py +18 -0
  1053. scipy/sparse/linalg/tests/__init__.py +0 -0
  1054. scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
  1055. scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
  1056. scipy/sparse/linalg/tests/test_interface.py +561 -0
  1057. scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
  1058. scipy/sparse/linalg/tests/test_norm.py +154 -0
  1059. scipy/sparse/linalg/tests/test_onenormest.py +252 -0
  1060. scipy/sparse/linalg/tests/test_propack.py +165 -0
  1061. scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
  1062. scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
  1063. scipy/sparse/sparsetools.py +17 -0
  1064. scipy/sparse/spfuncs.py +17 -0
  1065. scipy/sparse/sputils.py +17 -0
  1066. scipy/sparse/tests/__init__.py +0 -0
  1067. scipy/sparse/tests/data/csc_py2.npz +0 -0
  1068. scipy/sparse/tests/data/csc_py3.npz +0 -0
  1069. scipy/sparse/tests/test_arithmetic1d.py +341 -0
  1070. scipy/sparse/tests/test_array_api.py +561 -0
  1071. scipy/sparse/tests/test_base.py +5860 -0
  1072. scipy/sparse/tests/test_common1d.py +447 -0
  1073. scipy/sparse/tests/test_construct.py +872 -0
  1074. scipy/sparse/tests/test_coo.py +1119 -0
  1075. scipy/sparse/tests/test_csc.py +98 -0
  1076. scipy/sparse/tests/test_csr.py +214 -0
  1077. scipy/sparse/tests/test_dok.py +209 -0
  1078. scipy/sparse/tests/test_extract.py +51 -0
  1079. scipy/sparse/tests/test_indexing1d.py +603 -0
  1080. scipy/sparse/tests/test_matrix_io.py +109 -0
  1081. scipy/sparse/tests/test_minmax1d.py +128 -0
  1082. scipy/sparse/tests/test_sparsetools.py +344 -0
  1083. scipy/sparse/tests/test_spfuncs.py +97 -0
  1084. scipy/sparse/tests/test_sputils.py +424 -0
  1085. scipy/spatial/__init__.py +129 -0
  1086. scipy/spatial/_ckdtree.cpython-311-darwin.so +0 -0
  1087. scipy/spatial/_distance_pybind.cpython-311-darwin.so +0 -0
  1088. scipy/spatial/_distance_wrap.cpython-311-darwin.so +0 -0
  1089. scipy/spatial/_geometric_slerp.py +238 -0
  1090. scipy/spatial/_hausdorff.cpython-311-darwin.so +0 -0
  1091. scipy/spatial/_kdtree.py +920 -0
  1092. scipy/spatial/_plotutils.py +274 -0
  1093. scipy/spatial/_procrustes.py +132 -0
  1094. scipy/spatial/_qhull.cpython-311-darwin.so +0 -0
  1095. scipy/spatial/_qhull.pyi +213 -0
  1096. scipy/spatial/_spherical_voronoi.py +341 -0
  1097. scipy/spatial/_voronoi.cpython-311-darwin.so +0 -0
  1098. scipy/spatial/_voronoi.pyi +4 -0
  1099. scipy/spatial/ckdtree.py +18 -0
  1100. scipy/spatial/distance.py +3147 -0
  1101. scipy/spatial/distance.pyi +210 -0
  1102. scipy/spatial/kdtree.py +25 -0
  1103. scipy/spatial/qhull.py +25 -0
  1104. scipy/spatial/tests/__init__.py +0 -0
  1105. scipy/spatial/tests/data/cdist-X1.txt +10 -0
  1106. scipy/spatial/tests/data/cdist-X2.txt +20 -0
  1107. scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
  1108. scipy/spatial/tests/data/iris.txt +150 -0
  1109. scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
  1110. scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
  1111. scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
  1112. scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
  1113. scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
  1114. scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
  1115. scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
  1116. scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
  1117. scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
  1118. scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
  1119. scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
  1120. scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
  1121. scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
  1122. scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
  1123. scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
  1124. scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
  1125. scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
  1126. scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
  1127. scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
  1128. scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
  1129. scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
  1130. scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
  1131. scipy/spatial/tests/data/random-bool-data.txt +100 -0
  1132. scipy/spatial/tests/data/random-double-data.txt +100 -0
  1133. scipy/spatial/tests/data/random-int-data.txt +100 -0
  1134. scipy/spatial/tests/data/random-uint-data.txt +100 -0
  1135. scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
  1136. scipy/spatial/tests/test__plotutils.py +91 -0
  1137. scipy/spatial/tests/test__procrustes.py +116 -0
  1138. scipy/spatial/tests/test_distance.py +2376 -0
  1139. scipy/spatial/tests/test_hausdorff.py +199 -0
  1140. scipy/spatial/tests/test_kdtree.py +1536 -0
  1141. scipy/spatial/tests/test_qhull.py +1313 -0
  1142. scipy/spatial/tests/test_slerp.py +417 -0
  1143. scipy/spatial/tests/test_spherical_voronoi.py +358 -0
  1144. scipy/spatial/transform/__init__.py +31 -0
  1145. scipy/spatial/transform/_rigid_transform.cpython-311-darwin.so +0 -0
  1146. scipy/spatial/transform/_rotation.cpython-311-darwin.so +0 -0
  1147. scipy/spatial/transform/_rotation_groups.py +140 -0
  1148. scipy/spatial/transform/_rotation_spline.py +460 -0
  1149. scipy/spatial/transform/rotation.py +21 -0
  1150. scipy/spatial/transform/tests/__init__.py +0 -0
  1151. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  1152. scipy/spatial/transform/tests/test_rotation.py +2569 -0
  1153. scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
  1154. scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
  1155. scipy/special/__init__.pxd +1 -0
  1156. scipy/special/__init__.py +841 -0
  1157. scipy/special/_add_newdocs.py +9961 -0
  1158. scipy/special/_basic.py +3576 -0
  1159. scipy/special/_comb.cpython-311-darwin.so +0 -0
  1160. scipy/special/_ellip_harm.py +214 -0
  1161. scipy/special/_ellip_harm_2.cpython-311-darwin.so +0 -0
  1162. scipy/special/_gufuncs.cpython-311-darwin.so +0 -0
  1163. scipy/special/_input_validation.py +17 -0
  1164. scipy/special/_lambertw.py +149 -0
  1165. scipy/special/_logsumexp.py +426 -0
  1166. scipy/special/_mptestutils.py +453 -0
  1167. scipy/special/_multiufuncs.py +610 -0
  1168. scipy/special/_orthogonal.py +2592 -0
  1169. scipy/special/_orthogonal.pyi +330 -0
  1170. scipy/special/_precompute/__init__.py +0 -0
  1171. scipy/special/_precompute/cosine_cdf.py +17 -0
  1172. scipy/special/_precompute/expn_asy.py +54 -0
  1173. scipy/special/_precompute/gammainc_asy.py +116 -0
  1174. scipy/special/_precompute/gammainc_data.py +124 -0
  1175. scipy/special/_precompute/hyp2f1_data.py +484 -0
  1176. scipy/special/_precompute/lambertw.py +68 -0
  1177. scipy/special/_precompute/loggamma.py +43 -0
  1178. scipy/special/_precompute/struve_convergence.py +131 -0
  1179. scipy/special/_precompute/utils.py +38 -0
  1180. scipy/special/_precompute/wright_bessel.py +342 -0
  1181. scipy/special/_precompute/wright_bessel_data.py +152 -0
  1182. scipy/special/_precompute/wrightomega.py +41 -0
  1183. scipy/special/_precompute/zetac.py +27 -0
  1184. scipy/special/_sf_error.py +15 -0
  1185. scipy/special/_specfun.cpython-311-darwin.so +0 -0
  1186. scipy/special/_special_ufuncs.cpython-311-darwin.so +0 -0
  1187. scipy/special/_spfun_stats.py +106 -0
  1188. scipy/special/_spherical_bessel.py +397 -0
  1189. scipy/special/_support_alternative_backends.py +295 -0
  1190. scipy/special/_test_internal.cpython-311-darwin.so +0 -0
  1191. scipy/special/_test_internal.pyi +9 -0
  1192. scipy/special/_testutils.py +321 -0
  1193. scipy/special/_ufuncs.cpython-311-darwin.so +0 -0
  1194. scipy/special/_ufuncs.pyi +522 -0
  1195. scipy/special/_ufuncs.pyx +13173 -0
  1196. scipy/special/_ufuncs_cxx.cpython-311-darwin.so +0 -0
  1197. scipy/special/_ufuncs_cxx.pxd +142 -0
  1198. scipy/special/_ufuncs_cxx.pyx +427 -0
  1199. scipy/special/_ufuncs_cxx_defs.h +147 -0
  1200. scipy/special/_ufuncs_defs.h +57 -0
  1201. scipy/special/add_newdocs.py +15 -0
  1202. scipy/special/basic.py +87 -0
  1203. scipy/special/cython_special.cpython-311-darwin.so +0 -0
  1204. scipy/special/cython_special.pxd +259 -0
  1205. scipy/special/cython_special.pyi +3 -0
  1206. scipy/special/orthogonal.py +45 -0
  1207. scipy/special/sf_error.py +20 -0
  1208. scipy/special/specfun.py +24 -0
  1209. scipy/special/spfun_stats.py +17 -0
  1210. scipy/special/tests/__init__.py +0 -0
  1211. scipy/special/tests/_cython_examples/extending.pyx +12 -0
  1212. scipy/special/tests/_cython_examples/meson.build +34 -0
  1213. scipy/special/tests/data/__init__.py +0 -0
  1214. scipy/special/tests/data/boost.npz +0 -0
  1215. scipy/special/tests/data/gsl.npz +0 -0
  1216. scipy/special/tests/data/local.npz +0 -0
  1217. scipy/special/tests/test_basic.py +4815 -0
  1218. scipy/special/tests/test_bdtr.py +112 -0
  1219. scipy/special/tests/test_boost_ufuncs.py +64 -0
  1220. scipy/special/tests/test_boxcox.py +125 -0
  1221. scipy/special/tests/test_cdflib.py +712 -0
  1222. scipy/special/tests/test_cdft_asymptotic.py +49 -0
  1223. scipy/special/tests/test_cephes_intp_cast.py +29 -0
  1224. scipy/special/tests/test_cosine_distr.py +83 -0
  1225. scipy/special/tests/test_cython_special.py +363 -0
  1226. scipy/special/tests/test_data.py +719 -0
  1227. scipy/special/tests/test_dd.py +42 -0
  1228. scipy/special/tests/test_digamma.py +45 -0
  1229. scipy/special/tests/test_ellip_harm.py +278 -0
  1230. scipy/special/tests/test_erfinv.py +89 -0
  1231. scipy/special/tests/test_exponential_integrals.py +118 -0
  1232. scipy/special/tests/test_extending.py +28 -0
  1233. scipy/special/tests/test_faddeeva.py +85 -0
  1234. scipy/special/tests/test_gamma.py +12 -0
  1235. scipy/special/tests/test_gammainc.py +152 -0
  1236. scipy/special/tests/test_hyp2f1.py +2566 -0
  1237. scipy/special/tests/test_hypergeometric.py +234 -0
  1238. scipy/special/tests/test_iv_ratio.py +249 -0
  1239. scipy/special/tests/test_kolmogorov.py +491 -0
  1240. scipy/special/tests/test_lambertw.py +109 -0
  1241. scipy/special/tests/test_legendre.py +1518 -0
  1242. scipy/special/tests/test_log1mexp.py +85 -0
  1243. scipy/special/tests/test_loggamma.py +70 -0
  1244. scipy/special/tests/test_logit.py +162 -0
  1245. scipy/special/tests/test_logsumexp.py +469 -0
  1246. scipy/special/tests/test_mpmath.py +2293 -0
  1247. scipy/special/tests/test_nan_inputs.py +65 -0
  1248. scipy/special/tests/test_ndtr.py +77 -0
  1249. scipy/special/tests/test_ndtri_exp.py +94 -0
  1250. scipy/special/tests/test_orthogonal.py +821 -0
  1251. scipy/special/tests/test_orthogonal_eval.py +275 -0
  1252. scipy/special/tests/test_owens_t.py +53 -0
  1253. scipy/special/tests/test_pcf.py +24 -0
  1254. scipy/special/tests/test_pdtr.py +48 -0
  1255. scipy/special/tests/test_powm1.py +65 -0
  1256. scipy/special/tests/test_precompute_expn_asy.py +24 -0
  1257. scipy/special/tests/test_precompute_gammainc.py +108 -0
  1258. scipy/special/tests/test_precompute_utils.py +36 -0
  1259. scipy/special/tests/test_round.py +18 -0
  1260. scipy/special/tests/test_sf_error.py +146 -0
  1261. scipy/special/tests/test_sici.py +36 -0
  1262. scipy/special/tests/test_specfun.py +48 -0
  1263. scipy/special/tests/test_spence.py +32 -0
  1264. scipy/special/tests/test_spfun_stats.py +61 -0
  1265. scipy/special/tests/test_sph_harm.py +85 -0
  1266. scipy/special/tests/test_spherical_bessel.py +400 -0
  1267. scipy/special/tests/test_support_alternative_backends.py +248 -0
  1268. scipy/special/tests/test_trig.py +72 -0
  1269. scipy/special/tests/test_ufunc_signatures.py +46 -0
  1270. scipy/special/tests/test_wright_bessel.py +205 -0
  1271. scipy/special/tests/test_wrightomega.py +117 -0
  1272. scipy/special/tests/test_zeta.py +301 -0
  1273. scipy/stats/__init__.py +670 -0
  1274. scipy/stats/_ansari_swilk_statistics.cpython-311-darwin.so +0 -0
  1275. scipy/stats/_axis_nan_policy.py +700 -0
  1276. scipy/stats/_biasedurn.cpython-311-darwin.so +0 -0
  1277. scipy/stats/_biasedurn.pxd +27 -0
  1278. scipy/stats/_binned_statistic.py +795 -0
  1279. scipy/stats/_binomtest.py +375 -0
  1280. scipy/stats/_bws_test.py +177 -0
  1281. scipy/stats/_censored_data.py +459 -0
  1282. scipy/stats/_common.py +5 -0
  1283. scipy/stats/_constants.py +42 -0
  1284. scipy/stats/_continued_fraction.py +387 -0
  1285. scipy/stats/_continuous_distns.py +12483 -0
  1286. scipy/stats/_correlation.py +210 -0
  1287. scipy/stats/_covariance.py +636 -0
  1288. scipy/stats/_crosstab.py +204 -0
  1289. scipy/stats/_discrete_distns.py +2098 -0
  1290. scipy/stats/_distn_infrastructure.py +4201 -0
  1291. scipy/stats/_distr_params.py +299 -0
  1292. scipy/stats/_distribution_infrastructure.py +5730 -0
  1293. scipy/stats/_entropy.py +428 -0
  1294. scipy/stats/_finite_differences.py +145 -0
  1295. scipy/stats/_fit.py +1351 -0
  1296. scipy/stats/_hypotests.py +2060 -0
  1297. scipy/stats/_kde.py +732 -0
  1298. scipy/stats/_ksstats.py +600 -0
  1299. scipy/stats/_levy_stable/__init__.py +1231 -0
  1300. scipy/stats/_levy_stable/levyst.cpython-311-darwin.so +0 -0
  1301. scipy/stats/_mannwhitneyu.py +492 -0
  1302. scipy/stats/_mgc.py +550 -0
  1303. scipy/stats/_morestats.py +4626 -0
  1304. scipy/stats/_mstats_basic.py +3658 -0
  1305. scipy/stats/_mstats_extras.py +521 -0
  1306. scipy/stats/_multicomp.py +449 -0
  1307. scipy/stats/_multivariate.py +7281 -0
  1308. scipy/stats/_new_distributions.py +452 -0
  1309. scipy/stats/_odds_ratio.py +466 -0
  1310. scipy/stats/_page_trend_test.py +486 -0
  1311. scipy/stats/_probability_distribution.py +1964 -0
  1312. scipy/stats/_qmc.py +2956 -0
  1313. scipy/stats/_qmc_cy.cpython-311-darwin.so +0 -0
  1314. scipy/stats/_qmc_cy.pyi +54 -0
  1315. scipy/stats/_qmvnt.py +454 -0
  1316. scipy/stats/_qmvnt_cy.cpython-311-darwin.so +0 -0
  1317. scipy/stats/_quantile.py +335 -0
  1318. scipy/stats/_rcont/__init__.py +4 -0
  1319. scipy/stats/_rcont/rcont.cpython-311-darwin.so +0 -0
  1320. scipy/stats/_relative_risk.py +263 -0
  1321. scipy/stats/_resampling.py +2352 -0
  1322. scipy/stats/_result_classes.py +40 -0
  1323. scipy/stats/_sampling.py +1314 -0
  1324. scipy/stats/_sensitivity_analysis.py +713 -0
  1325. scipy/stats/_sobol.cpython-311-darwin.so +0 -0
  1326. scipy/stats/_sobol.pyi +54 -0
  1327. scipy/stats/_sobol_direction_numbers.npz +0 -0
  1328. scipy/stats/_stats.cpython-311-darwin.so +0 -0
  1329. scipy/stats/_stats.pxd +10 -0
  1330. scipy/stats/_stats_mstats_common.py +320 -0
  1331. scipy/stats/_stats_py.py +11089 -0
  1332. scipy/stats/_stats_pythran.cpython-311-darwin.so +0 -0
  1333. scipy/stats/_survival.py +683 -0
  1334. scipy/stats/_tukeylambda_stats.py +199 -0
  1335. scipy/stats/_unuran/__init__.py +0 -0
  1336. scipy/stats/_unuran/unuran_wrapper.cpython-311-darwin.so +0 -0
  1337. scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
  1338. scipy/stats/_variation.py +126 -0
  1339. scipy/stats/_warnings_errors.py +38 -0
  1340. scipy/stats/_wilcoxon.py +265 -0
  1341. scipy/stats/biasedurn.py +16 -0
  1342. scipy/stats/contingency.py +521 -0
  1343. scipy/stats/distributions.py +24 -0
  1344. scipy/stats/kde.py +18 -0
  1345. scipy/stats/morestats.py +27 -0
  1346. scipy/stats/mstats.py +140 -0
  1347. scipy/stats/mstats_basic.py +42 -0
  1348. scipy/stats/mstats_extras.py +25 -0
  1349. scipy/stats/mvn.py +17 -0
  1350. scipy/stats/qmc.py +236 -0
  1351. scipy/stats/sampling.py +73 -0
  1352. scipy/stats/stats.py +41 -0
  1353. scipy/stats/tests/__init__.py +0 -0
  1354. scipy/stats/tests/common_tests.py +356 -0
  1355. scipy/stats/tests/data/_mvt.py +171 -0
  1356. scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
  1357. scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
  1358. scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
  1359. scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
  1360. scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
  1361. scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
  1362. scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
  1363. scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
  1364. scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
  1365. scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
  1366. scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
  1367. scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
  1368. scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
  1369. scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
  1370. scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
  1371. scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
  1372. scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
  1373. scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
  1374. scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
  1375. scipy/stats/tests/test_axis_nan_policy.py +1388 -0
  1376. scipy/stats/tests/test_binned_statistic.py +568 -0
  1377. scipy/stats/tests/test_censored_data.py +152 -0
  1378. scipy/stats/tests/test_contingency.py +294 -0
  1379. scipy/stats/tests/test_continued_fraction.py +173 -0
  1380. scipy/stats/tests/test_continuous.py +2198 -0
  1381. scipy/stats/tests/test_continuous_basic.py +1053 -0
  1382. scipy/stats/tests/test_continuous_fit_censored.py +683 -0
  1383. scipy/stats/tests/test_correlation.py +80 -0
  1384. scipy/stats/tests/test_crosstab.py +115 -0
  1385. scipy/stats/tests/test_discrete_basic.py +580 -0
  1386. scipy/stats/tests/test_discrete_distns.py +700 -0
  1387. scipy/stats/tests/test_distributions.py +10400 -0
  1388. scipy/stats/tests/test_entropy.py +322 -0
  1389. scipy/stats/tests/test_fast_gen_inversion.py +433 -0
  1390. scipy/stats/tests/test_fit.py +1090 -0
  1391. scipy/stats/tests/test_hypotests.py +1991 -0
  1392. scipy/stats/tests/test_kdeoth.py +676 -0
  1393. scipy/stats/tests/test_marray.py +289 -0
  1394. scipy/stats/tests/test_mgc.py +217 -0
  1395. scipy/stats/tests/test_morestats.py +3259 -0
  1396. scipy/stats/tests/test_mstats_basic.py +2071 -0
  1397. scipy/stats/tests/test_mstats_extras.py +172 -0
  1398. scipy/stats/tests/test_multicomp.py +405 -0
  1399. scipy/stats/tests/test_multivariate.py +4381 -0
  1400. scipy/stats/tests/test_odds_ratio.py +148 -0
  1401. scipy/stats/tests/test_qmc.py +1492 -0
  1402. scipy/stats/tests/test_quantile.py +199 -0
  1403. scipy/stats/tests/test_rank.py +345 -0
  1404. scipy/stats/tests/test_relative_risk.py +95 -0
  1405. scipy/stats/tests/test_resampling.py +2000 -0
  1406. scipy/stats/tests/test_sampling.py +1450 -0
  1407. scipy/stats/tests/test_sensitivity_analysis.py +310 -0
  1408. scipy/stats/tests/test_stats.py +9707 -0
  1409. scipy/stats/tests/test_survival.py +466 -0
  1410. scipy/stats/tests/test_tukeylambda_stats.py +85 -0
  1411. scipy/stats/tests/test_variation.py +216 -0
  1412. scipy/version.py +12 -0
  1413. scipy-1.16.0rc1.dist-info/LICENSE.txt +934 -0
  1414. scipy-1.16.0rc1.dist-info/METADATA +1082 -0
  1415. scipy-1.16.0rc1.dist-info/RECORD +1416 -0
  1416. scipy-1.16.0rc1.dist-info/WHEEL +6 -0
scipy/_lib/_util.py ADDED
@@ -0,0 +1,1276 @@
1
+ import re
2
+ from contextlib import contextmanager
3
+ import functools
4
+ import operator
5
+ import warnings
6
+ import numbers
7
+ from collections import namedtuple
8
+ import inspect
9
+ import math
10
+ from types import ModuleType
11
+ from typing import Literal, TypeAlias, TypeVar
12
+
13
+ import numpy as np
14
+ from scipy._lib._array_api import (Array, array_namespace, is_lazy_array,
15
+ is_numpy, is_marray, xp_result_device,
16
+ xp_size, xp_result_type)
17
+ from scipy._lib._docscrape import FunctionDoc, Parameter
18
+ from scipy._lib._sparse import issparse
19
+
20
+ from numpy.exceptions import AxisError
21
+
22
+
23
+ np_long: type
24
+ np_ulong: type
25
+
26
+ if np.lib.NumpyVersion(np.__version__) >= "2.0.0.dev0":
27
+ try:
28
+ with warnings.catch_warnings():
29
+ warnings.filterwarnings(
30
+ "ignore",
31
+ r".*In the future `np\.long` will be defined as.*",
32
+ FutureWarning,
33
+ )
34
+ np_long = np.long # type: ignore[attr-defined]
35
+ np_ulong = np.ulong # type: ignore[attr-defined]
36
+ except AttributeError:
37
+ np_long = np.int_
38
+ np_ulong = np.uint
39
+ else:
40
+ np_long = np.int_
41
+ np_ulong = np.uint
42
+
43
+ IntNumber = int | np.integer
44
+ DecimalNumber = float | np.floating | np.integer
45
+
46
+ copy_if_needed: bool | None
47
+
48
+ if np.lib.NumpyVersion(np.__version__) >= "2.0.0":
49
+ copy_if_needed = None
50
+ elif np.lib.NumpyVersion(np.__version__) < "1.28.0":
51
+ copy_if_needed = False
52
+ else:
53
+ # 2.0.0 dev versions, handle cases where copy may or may not exist
54
+ try:
55
+ np.array([1]).__array__(copy=None) # type: ignore[call-overload]
56
+ copy_if_needed = None
57
+ except TypeError:
58
+ copy_if_needed = False
59
+
60
+
61
+ _RNG: TypeAlias = np.random.Generator | np.random.RandomState
62
+ SeedType: TypeAlias = IntNumber | _RNG | None
63
+
64
+ GeneratorType = TypeVar("GeneratorType", bound=_RNG)
65
+
66
+ # Since Generator was introduced in numpy 1.17, the following condition is needed for
67
+ # backward compatibility
68
+ try:
69
+ from numpy.random import Generator as Generator
70
+ except ImportError:
71
+ class Generator: # type: ignore[no-redef]
72
+ pass
73
+
74
+
75
+ def _lazyselect(condlist, choicelist, arrays, default=0):
76
+ """
77
+ Mimic `np.select(condlist, choicelist)`.
78
+
79
+ Notice, it assumes that all `arrays` are of the same shape or can be
80
+ broadcasted together.
81
+
82
+ All functions in `choicelist` must accept array arguments in the order
83
+ given in `arrays` and must return an array of the same shape as broadcasted
84
+ `arrays`.
85
+
86
+ Examples
87
+ --------
88
+ >>> import numpy as np
89
+ >>> x = np.arange(6)
90
+ >>> np.select([x <3, x > 3], [x**2, x**3], default=0)
91
+ array([ 0, 1, 4, 0, 64, 125])
92
+
93
+ >>> _lazyselect([x < 3, x > 3], [lambda x: x**2, lambda x: x**3], (x,))
94
+ array([ 0., 1., 4., 0., 64., 125.])
95
+
96
+ >>> a = -np.ones_like(x)
97
+ >>> _lazyselect([x < 3, x > 3],
98
+ ... [lambda x, a: x**2, lambda x, a: a * x**3],
99
+ ... (x, a), default=np.nan)
100
+ array([ 0., 1., 4., nan, -64., -125.])
101
+
102
+ """
103
+ arrays = np.broadcast_arrays(*arrays)
104
+ tcode = np.mintypecode([a.dtype.char for a in arrays])
105
+ out = np.full(np.shape(arrays[0]), fill_value=default, dtype=tcode)
106
+ for func, cond in zip(choicelist, condlist):
107
+ if np.all(cond is False):
108
+ continue
109
+ cond, _ = np.broadcast_arrays(cond, arrays[0])
110
+ temp = tuple(np.extract(cond, arr) for arr in arrays)
111
+ np.place(out, cond, func(*temp))
112
+ return out
113
+
114
+
115
+ def _aligned_zeros(shape, dtype=float, order="C", align=None):
116
+ """Allocate a new ndarray with aligned memory.
117
+
118
+ Primary use case for this currently is working around a f2py issue
119
+ in NumPy 1.9.1, where dtype.alignment is such that np.zeros() does
120
+ not necessarily create arrays aligned up to it.
121
+
122
+ """
123
+ dtype = np.dtype(dtype)
124
+ if align is None:
125
+ align = dtype.alignment
126
+ if not hasattr(shape, '__len__'):
127
+ shape = (shape,)
128
+ size = functools.reduce(operator.mul, shape) * dtype.itemsize
129
+ buf = np.empty(size + align + 1, np.uint8)
130
+ offset = buf.__array_interface__['data'][0] % align
131
+ if offset != 0:
132
+ offset = align - offset
133
+ # Note: slices producing 0-size arrays do not necessarily change
134
+ # data pointer --- so we use and allocate size+1
135
+ buf = buf[offset:offset+size+1][:-1]
136
+ data = np.ndarray(shape, dtype, buf, order=order)
137
+ data.fill(0)
138
+ return data
139
+
140
+
141
+ def _prune_array(array):
142
+ """Return an array equivalent to the input array. If the input
143
+ array is a view of a much larger array, copy its contents to a
144
+ newly allocated array. Otherwise, return the input unchanged.
145
+ """
146
+ if array.base is not None and array.size < array.base.size // 2:
147
+ return array.copy()
148
+ return array
149
+
150
+
151
+ def float_factorial(n: int) -> float:
152
+ """Compute the factorial and return as a float
153
+
154
+ Returns infinity when result is too large for a double
155
+ """
156
+ return float(math.factorial(n)) if n < 171 else np.inf
157
+
158
+
159
+ _rng_desc = (
160
+ r"""If `rng` is passed by keyword, types other than `numpy.random.Generator` are
161
+ passed to `numpy.random.default_rng` to instantiate a ``Generator``.
162
+ If `rng` is already a ``Generator`` instance, then the provided instance is
163
+ used. Specify `rng` for repeatable function behavior.
164
+
165
+ If this argument is passed by position or `{old_name}` is passed by keyword,
166
+ legacy behavior for the argument `{old_name}` applies:
167
+
168
+ - If `{old_name}` is None (or `numpy.random`), the `numpy.random.RandomState`
169
+ singleton is used.
170
+ - If `{old_name}` is an int, a new ``RandomState`` instance is used,
171
+ seeded with `{old_name}`.
172
+ - If `{old_name}` is already a ``Generator`` or ``RandomState`` instance then
173
+ that instance is used.
174
+
175
+ .. versionchanged:: 1.15.0
176
+ As part of the `SPEC-007 <https://scientific-python.org/specs/spec-0007/>`_
177
+ transition from use of `numpy.random.RandomState` to
178
+ `numpy.random.Generator`, this keyword was changed from `{old_name}` to `rng`.
179
+ For an interim period, both keywords will continue to work, although only one
180
+ may be specified at a time. After the interim period, function calls using the
181
+ `{old_name}` keyword will emit warnings. The behavior of both `{old_name}` and
182
+ `rng` are outlined above, but only the `rng` keyword should be used in new code.
183
+ """
184
+ )
185
+
186
+
187
+ # SPEC 7
188
+ def _transition_to_rng(old_name, *, position_num=None, end_version=None,
189
+ replace_doc=True):
190
+ """Example decorator to transition from old PRNG usage to new `rng` behavior
191
+
192
+ Suppose the decorator is applied to a function that used to accept parameter
193
+ `old_name='random_state'` either by keyword or as a positional argument at
194
+ `position_num=1`. At the time of application, the name of the argument in the
195
+ function signature is manually changed to the new name, `rng`. If positional
196
+ use was allowed before, this is not changed.*
197
+
198
+ - If the function is called with both `random_state` and `rng`, the decorator
199
+ raises an error.
200
+ - If `random_state` is provided as a keyword argument, the decorator passes
201
+ `random_state` to the function's `rng` argument as a keyword. If `end_version`
202
+ is specified, the decorator will emit a `DeprecationWarning` about the
203
+ deprecation of keyword `random_state`.
204
+ - If `random_state` is provided as a positional argument, the decorator passes
205
+ `random_state` to the function's `rng` argument by position. If `end_version`
206
+ is specified, the decorator will emit a `FutureWarning` about the changing
207
+ interpretation of the argument.
208
+ - If `rng` is provided as a keyword argument, the decorator validates `rng` using
209
+ `numpy.random.default_rng` before passing it to the function.
210
+ - If `end_version` is specified and neither `random_state` nor `rng` is provided
211
+ by the user, the decorator checks whether `np.random.seed` has been used to set
212
+ the global seed. If so, it emits a `FutureWarning`, noting that usage of
213
+ `numpy.random.seed` will eventually have no effect. Either way, the decorator
214
+ calls the function without explicitly passing the `rng` argument.
215
+
216
+ If `end_version` is specified, a user must pass `rng` as a keyword to avoid
217
+ warnings.
218
+
219
+ After the deprecation period, the decorator can be removed, and the function
220
+ can simply validate the `rng` argument by calling `np.random.default_rng(rng)`.
221
+
222
+ * A `FutureWarning` is emitted when the PRNG argument is used by
223
+ position. It indicates that the "Hinsen principle" (same
224
+ code yielding different results in two versions of the software)
225
+ will be violated, unless positional use is deprecated. Specifically:
226
+
227
+ - If `None` is passed by position and `np.random.seed` has been used,
228
+ the function will change from being seeded to being unseeded.
229
+ - If an integer is passed by position, the random stream will change.
230
+ - If `np.random` or an instance of `RandomState` is passed by position,
231
+ an error will be raised.
232
+
233
+ We suggest that projects consider deprecating positional use of
234
+ `random_state`/`rng` (i.e., change their function signatures to
235
+ ``def my_func(..., *, rng=None)``); that might not make sense
236
+ for all projects, so this SPEC does not make that
237
+ recommendation, neither does this decorator enforce it.
238
+
239
+ Parameters
240
+ ----------
241
+ old_name : str
242
+ The old name of the PRNG argument (e.g. `seed` or `random_state`).
243
+ position_num : int, optional
244
+ The (0-indexed) position of the old PRNG argument (if accepted by position).
245
+ Maintainers are welcome to eliminate this argument and use, for example,
246
+ `inspect`, if preferred.
247
+ end_version : str, optional
248
+ The full version number of the library when the behavior described in
249
+ `DeprecationWarning`s and `FutureWarning`s will take effect. If left
250
+ unspecified, no warnings will be emitted by the decorator.
251
+ replace_doc : bool, default: True
252
+ Whether the decorator should replace the documentation for parameter `rng` with
253
+ `_rng_desc` (defined above), which documents both new `rng` keyword behavior
254
+ and typical legacy `random_state`/`seed` behavior. If True, manually replace
255
+ the first paragraph of the function's old `random_state`/`seed` documentation
256
+ with the desired *final* `rng` documentation; this way, no changes to
257
+ documentation are needed when the decorator is removed. Documentation of `rng`
258
+ after the first blank line is preserved. Use False if the function's old
259
+ `random_state`/`seed` behavior does not match that described by `_rng_desc`.
260
+
261
+ """
262
+ NEW_NAME = "rng"
263
+
264
+ cmn_msg = (
265
+ "To silence this warning and ensure consistent behavior in SciPy "
266
+ f"{end_version}, control the RNG using argument `{NEW_NAME}`. Arguments passed "
267
+ f"to keyword `{NEW_NAME}` will be validated by `np.random.default_rng`, so the "
268
+ "behavior corresponding with a given value may change compared to use of "
269
+ f"`{old_name}`. For example, "
270
+ "1) `None` will result in unpredictable random numbers, "
271
+ "2) an integer will result in a different stream of random numbers, (with the "
272
+ "same distribution), and "
273
+ "3) `np.random` or `RandomState` instances will result in an error. "
274
+ "See the documentation of `default_rng` for more information."
275
+ )
276
+
277
+ def decorator(fun):
278
+ @functools.wraps(fun)
279
+ def wrapper(*args, **kwargs):
280
+ # Determine how PRNG was passed
281
+ as_old_kwarg = old_name in kwargs
282
+ as_new_kwarg = NEW_NAME in kwargs
283
+ as_pos_arg = position_num is not None and len(args) >= position_num + 1
284
+ emit_warning = end_version is not None
285
+
286
+ # Can only specify PRNG one of the three ways
287
+ if int(as_old_kwarg) + int(as_new_kwarg) + int(as_pos_arg) > 1:
288
+ message = (
289
+ f"{fun.__name__}() got multiple values for "
290
+ f"argument now known as `{NEW_NAME}`. Specify one of "
291
+ f"`{NEW_NAME}` or `{old_name}`."
292
+ )
293
+ raise TypeError(message)
294
+
295
+ # Check whether global random state has been set
296
+ global_seed_set = np.random.mtrand._rand._bit_generator._seed_seq is None
297
+
298
+ if as_old_kwarg: # warn about deprecated use of old kwarg
299
+ kwargs[NEW_NAME] = kwargs.pop(old_name)
300
+ if emit_warning:
301
+ message = (
302
+ f"Use of keyword argument `{old_name}` is "
303
+ f"deprecated and replaced by `{NEW_NAME}`. "
304
+ f"Support for `{old_name}` will be removed "
305
+ f"in SciPy {end_version}. "
306
+ ) + cmn_msg
307
+ warnings.warn(message, DeprecationWarning, stacklevel=2)
308
+
309
+ elif as_pos_arg:
310
+ # Warn about changing meaning of positional arg
311
+
312
+ # Note that this decorator does not deprecate positional use of the
313
+ # argument; it only warns that the behavior will change in the future.
314
+ # Simultaneously transitioning to keyword-only use is another option.
315
+
316
+ arg = args[position_num]
317
+ # If the argument is None and the global seed wasn't set, or if the
318
+ # argument is one of a few new classes, the user will not notice change
319
+ # in behavior.
320
+ ok_classes = (
321
+ np.random.Generator,
322
+ np.random.SeedSequence,
323
+ np.random.BitGenerator,
324
+ )
325
+ if (arg is None and not global_seed_set) or isinstance(arg, ok_classes):
326
+ pass
327
+ elif emit_warning:
328
+ message = (
329
+ f"Positional use of `{NEW_NAME}` (formerly known as "
330
+ f"`{old_name}`) is still allowed, but the behavior is "
331
+ "changing: the argument will be normalized using "
332
+ f"`np.random.default_rng` beginning in SciPy {end_version}, "
333
+ "and the resulting `Generator` will be used to generate "
334
+ "random numbers."
335
+ ) + cmn_msg
336
+ warnings.warn(message, FutureWarning, stacklevel=2)
337
+
338
+ elif as_new_kwarg: # no warnings; this is the preferred use
339
+ # After the removal of the decorator, normalization with
340
+ # np.random.default_rng will be done inside the decorated function
341
+ kwargs[NEW_NAME] = np.random.default_rng(kwargs[NEW_NAME])
342
+
343
+ elif global_seed_set and emit_warning:
344
+ # Emit FutureWarning if `np.random.seed` was used and no PRNG was passed
345
+ message = (
346
+ "The NumPy global RNG was seeded by calling "
347
+ f"`np.random.seed`. Beginning in {end_version}, this "
348
+ "function will no longer use the global RNG."
349
+ ) + cmn_msg
350
+ warnings.warn(message, FutureWarning, stacklevel=2)
351
+
352
+ return fun(*args, **kwargs)
353
+
354
+ if replace_doc:
355
+ doc = FunctionDoc(wrapper)
356
+ parameter_names = [param.name for param in doc['Parameters']]
357
+ if 'rng' in parameter_names:
358
+ _type = "{None, int, `numpy.random.Generator`}, optional"
359
+ _desc = _rng_desc.replace("{old_name}", old_name)
360
+ old_doc = doc['Parameters'][parameter_names.index('rng')].desc
361
+ old_doc_keep = old_doc[old_doc.index("") + 1:] if "" in old_doc else []
362
+ new_doc = [_desc] + old_doc_keep
363
+ _rng_parameter_doc = Parameter('rng', _type, new_doc)
364
+ doc['Parameters'][parameter_names.index('rng')] = _rng_parameter_doc
365
+ doc = str(doc).split("\n", 1)[1] # remove signature
366
+ wrapper.__doc__ = str(doc)
367
+ return wrapper
368
+
369
+ return decorator
370
+
371
+
372
+ # copy-pasted from scikit-learn utils/validation.py
373
+ def check_random_state(seed):
374
+ """Turn `seed` into a `np.random.RandomState` instance.
375
+
376
+ Parameters
377
+ ----------
378
+ seed : {None, int, `numpy.random.Generator`, `numpy.random.RandomState`}, optional
379
+ If `seed` is None (or `np.random`), the `numpy.random.RandomState`
380
+ singleton is used.
381
+ If `seed` is an int, a new ``RandomState`` instance is used,
382
+ seeded with `seed`.
383
+ If `seed` is already a ``Generator`` or ``RandomState`` instance then
384
+ that instance is used.
385
+
386
+ Returns
387
+ -------
388
+ seed : {`numpy.random.Generator`, `numpy.random.RandomState`}
389
+ Random number generator.
390
+
391
+ """
392
+ if seed is None or seed is np.random:
393
+ return np.random.mtrand._rand
394
+ if isinstance(seed, numbers.Integral | np.integer):
395
+ return np.random.RandomState(seed)
396
+ if isinstance(seed, np.random.RandomState | np.random.Generator):
397
+ return seed
398
+
399
+ raise ValueError(f"'{seed}' cannot be used to seed a numpy.random.RandomState"
400
+ " instance")
401
+
402
+
403
+ def _asarray_validated(a, check_finite=True,
404
+ sparse_ok=False, objects_ok=False, mask_ok=False,
405
+ as_inexact=False):
406
+ """
407
+ Helper function for SciPy argument validation.
408
+
409
+ Many SciPy linear algebra functions do support arbitrary array-like
410
+ input arguments. Examples of commonly unsupported inputs include
411
+ matrices containing inf/nan, sparse matrix representations, and
412
+ matrices with complicated elements.
413
+
414
+ Parameters
415
+ ----------
416
+ a : array_like
417
+ The array-like input.
418
+ check_finite : bool, optional
419
+ Whether to check that the input matrices contain only finite numbers.
420
+ Disabling may give a performance gain, but may result in problems
421
+ (crashes, non-termination) if the inputs do contain infinities or NaNs.
422
+ Default: True
423
+ sparse_ok : bool, optional
424
+ True if scipy sparse matrices are allowed.
425
+ objects_ok : bool, optional
426
+ True if arrays with dype('O') are allowed.
427
+ mask_ok : bool, optional
428
+ True if masked arrays are allowed.
429
+ as_inexact : bool, optional
430
+ True to convert the input array to a np.inexact dtype.
431
+
432
+ Returns
433
+ -------
434
+ ret : ndarray
435
+ The converted validated array.
436
+
437
+ """
438
+ if not sparse_ok:
439
+ if issparse(a):
440
+ msg = ('Sparse arrays/matrices are not supported by this function. '
441
+ 'Perhaps one of the `scipy.sparse.linalg` functions '
442
+ 'would work instead.')
443
+ raise ValueError(msg)
444
+ if not mask_ok:
445
+ if np.ma.isMaskedArray(a):
446
+ raise ValueError('masked arrays are not supported')
447
+ toarray = np.asarray_chkfinite if check_finite else np.asarray
448
+ a = toarray(a)
449
+ if not objects_ok:
450
+ if a.dtype is np.dtype('O'):
451
+ raise ValueError('object arrays are not supported')
452
+ if as_inexact:
453
+ if not np.issubdtype(a.dtype, np.inexact):
454
+ a = toarray(a, dtype=np.float64)
455
+ return a
456
+
457
+
458
+ def _validate_int(k, name, minimum=None):
459
+ """
460
+ Validate a scalar integer.
461
+
462
+ This function can be used to validate an argument to a function
463
+ that expects the value to be an integer. It uses `operator.index`
464
+ to validate the value (so, for example, k=2.0 results in a
465
+ TypeError).
466
+
467
+ Parameters
468
+ ----------
469
+ k : int
470
+ The value to be validated.
471
+ name : str
472
+ The name of the parameter.
473
+ minimum : int, optional
474
+ An optional lower bound.
475
+ """
476
+ try:
477
+ k = operator.index(k)
478
+ except TypeError:
479
+ raise TypeError(f'{name} must be an integer.') from None
480
+ if minimum is not None and k < minimum:
481
+ raise ValueError(f'{name} must be an integer not less '
482
+ f'than {minimum}') from None
483
+ return k
484
+
485
+
486
+ # Add a replacement for inspect.getfullargspec()/
487
+ # The version below is borrowed from Django,
488
+ # https://github.com/django/django/pull/4846.
489
+
490
+ # Note an inconsistency between inspect.getfullargspec(func) and
491
+ # inspect.signature(func). If `func` is a bound method, the latter does *not*
492
+ # list `self` as a first argument, while the former *does*.
493
+ # Hence, cook up a common ground replacement: `getfullargspec_no_self` which
494
+ # mimics `inspect.getfullargspec` but does not list `self`.
495
+ #
496
+ # This way, the caller code does not need to know whether it uses a legacy
497
+ # .getfullargspec or a bright and shiny .signature.
498
+
499
+ FullArgSpec = namedtuple('FullArgSpec',
500
+ ['args', 'varargs', 'varkw', 'defaults',
501
+ 'kwonlyargs', 'kwonlydefaults', 'annotations'])
502
+
503
+
504
+ def getfullargspec_no_self(func):
505
+ """inspect.getfullargspec replacement using inspect.signature.
506
+
507
+ If func is a bound method, do not list the 'self' parameter.
508
+
509
+ Parameters
510
+ ----------
511
+ func : callable
512
+ A callable to inspect
513
+
514
+ Returns
515
+ -------
516
+ fullargspec : FullArgSpec(args, varargs, varkw, defaults, kwonlyargs,
517
+ kwonlydefaults, annotations)
518
+
519
+ NOTE: if the first argument of `func` is self, it is *not*, I repeat
520
+ *not*, included in fullargspec.args.
521
+ This is done for consistency between inspect.getargspec() under
522
+ Python 2.x, and inspect.signature() under Python 3.x.
523
+
524
+ """
525
+ sig = inspect.signature(func)
526
+ args = [
527
+ p.name for p in sig.parameters.values()
528
+ if p.kind in [inspect.Parameter.POSITIONAL_OR_KEYWORD,
529
+ inspect.Parameter.POSITIONAL_ONLY]
530
+ ]
531
+ varargs = [
532
+ p.name for p in sig.parameters.values()
533
+ if p.kind == inspect.Parameter.VAR_POSITIONAL
534
+ ]
535
+ varargs = varargs[0] if varargs else None
536
+ varkw = [
537
+ p.name for p in sig.parameters.values()
538
+ if p.kind == inspect.Parameter.VAR_KEYWORD
539
+ ]
540
+ varkw = varkw[0] if varkw else None
541
+ defaults = tuple(
542
+ p.default for p in sig.parameters.values()
543
+ if (p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD and
544
+ p.default is not p.empty)
545
+ ) or None
546
+ kwonlyargs = [
547
+ p.name for p in sig.parameters.values()
548
+ if p.kind == inspect.Parameter.KEYWORD_ONLY
549
+ ]
550
+ kwdefaults = {p.name: p.default for p in sig.parameters.values()
551
+ if p.kind == inspect.Parameter.KEYWORD_ONLY and
552
+ p.default is not p.empty}
553
+ annotations = {p.name: p.annotation for p in sig.parameters.values()
554
+ if p.annotation is not p.empty}
555
+ return FullArgSpec(args, varargs, varkw, defaults, kwonlyargs,
556
+ kwdefaults or None, annotations)
557
+
558
+
559
+ class _FunctionWrapper:
560
+ """
561
+ Object to wrap user's function, allowing picklability
562
+ """
563
+ def __init__(self, f, args):
564
+ self.f = f
565
+ self.args = [] if args is None else args
566
+
567
+ def __call__(self, x):
568
+ return self.f(x, *self.args)
569
+
570
+
571
+ class _ScalarFunctionWrapper:
572
+ """
573
+ Object to wrap scalar user function, allowing picklability
574
+ """
575
+ def __init__(self, f, args=None):
576
+ self.f = f
577
+ self.args = [] if args is None else args
578
+ self.nfev = 0
579
+
580
+ def __call__(self, x):
581
+ # Send a copy because the user may overwrite it.
582
+ # The user of this class might want `x` to remain unchanged.
583
+ fx = self.f(np.copy(x), *self.args)
584
+ self.nfev += 1
585
+
586
+ # Make sure the function returns a true scalar
587
+ if not np.isscalar(fx):
588
+ try:
589
+ fx = np.asarray(fx).item()
590
+ except (TypeError, ValueError) as e:
591
+ raise ValueError(
592
+ "The user-provided objective function "
593
+ "must return a scalar value."
594
+ ) from e
595
+ return fx
596
+
597
+ class MapWrapper:
598
+ """
599
+ Parallelisation wrapper for working with map-like callables, such as
600
+ `multiprocessing.Pool.map`.
601
+
602
+ Parameters
603
+ ----------
604
+ pool : int or map-like callable
605
+ If `pool` is an integer, then it specifies the number of threads to
606
+ use for parallelization. If ``int(pool) == 1``, then no parallel
607
+ processing is used and the map builtin is used.
608
+ If ``pool == -1``, then the pool will utilize all available CPUs.
609
+ If `pool` is a map-like callable that follows the same
610
+ calling sequence as the built-in map function, then this callable is
611
+ used for parallelization.
612
+ """
613
+ def __init__(self, pool=1):
614
+ self.pool = None
615
+ self._mapfunc = map
616
+ self._own_pool = False
617
+
618
+ if callable(pool):
619
+ self.pool = pool
620
+ self._mapfunc = self.pool
621
+ else:
622
+ from multiprocessing import Pool
623
+ # user supplies a number
624
+ if int(pool) == -1:
625
+ # use as many processors as possible
626
+ self.pool = Pool()
627
+ self._mapfunc = self.pool.map
628
+ self._own_pool = True
629
+ elif int(pool) == 1:
630
+ pass
631
+ elif int(pool) > 1:
632
+ # use the number of processors requested
633
+ self.pool = Pool(processes=int(pool))
634
+ self._mapfunc = self.pool.map
635
+ self._own_pool = True
636
+ else:
637
+ raise RuntimeError("Number of workers specified must be -1,"
638
+ " an int >= 1, or an object with a 'map' "
639
+ "method")
640
+
641
+ def __enter__(self):
642
+ return self
643
+
644
+ def terminate(self):
645
+ if self._own_pool:
646
+ self.pool.terminate()
647
+
648
+ def join(self):
649
+ if self._own_pool:
650
+ self.pool.join()
651
+
652
+ def close(self):
653
+ if self._own_pool:
654
+ self.pool.close()
655
+
656
+ def __exit__(self, exc_type, exc_value, traceback):
657
+ if self._own_pool:
658
+ self.pool.close()
659
+ self.pool.terminate()
660
+
661
+ def __call__(self, func, iterable):
662
+ # only accept one iterable because that's all Pool.map accepts
663
+ try:
664
+ return self._mapfunc(func, iterable)
665
+ except TypeError as e:
666
+ # wrong number of arguments
667
+ raise TypeError("The map-like callable must be of the"
668
+ " form f(func, iterable)") from e
669
+
670
+
671
+ def _workers_wrapper(func):
672
+ """
673
+ Wrapper to deal with setup-cleanup of workers outside a user function via a
674
+ ContextManager. It saves having to do the setup/tear down with within that
675
+ function, which can be messy.
676
+ """
677
+ @functools.wraps(func)
678
+ def inner(*args, **kwds):
679
+ kwargs = kwds.copy()
680
+ if 'workers' not in kwargs:
681
+ _workers = map
682
+ elif 'workers' in kwargs and kwargs['workers'] is None:
683
+ _workers = map
684
+ else:
685
+ _workers = kwargs['workers']
686
+
687
+ with MapWrapper(_workers) as mf:
688
+ kwargs['workers'] = mf
689
+ return func(*args, **kwargs)
690
+
691
+ return inner
692
+
693
+
694
+ def rng_integers(gen, low, high=None, size=None, dtype='int64',
695
+ endpoint=False):
696
+ """
697
+ Return random integers from low (inclusive) to high (exclusive), or if
698
+ endpoint=True, low (inclusive) to high (inclusive). Replaces
699
+ `RandomState.randint` (with endpoint=False) and
700
+ `RandomState.random_integers` (with endpoint=True).
701
+
702
+ Return random integers from the "discrete uniform" distribution of the
703
+ specified dtype. If high is None (the default), then results are from
704
+ 0 to low.
705
+
706
+ Parameters
707
+ ----------
708
+ gen : {None, np.random.RandomState, np.random.Generator}
709
+ Random number generator. If None, then the np.random.RandomState
710
+ singleton is used.
711
+ low : int or array-like of ints
712
+ Lowest (signed) integers to be drawn from the distribution (unless
713
+ high=None, in which case this parameter is 0 and this value is used
714
+ for high).
715
+ high : int or array-like of ints
716
+ If provided, one above the largest (signed) integer to be drawn from
717
+ the distribution (see above for behavior if high=None). If array-like,
718
+ must contain integer values.
719
+ size : array-like of ints, optional
720
+ Output shape. If the given shape is, e.g., (m, n, k), then m * n * k
721
+ samples are drawn. Default is None, in which case a single value is
722
+ returned.
723
+ dtype : {str, dtype}, optional
724
+ Desired dtype of the result. All dtypes are determined by their name,
725
+ i.e., 'int64', 'int', etc, so byteorder is not available and a specific
726
+ precision may have different C types depending on the platform.
727
+ The default value is 'int64'.
728
+ endpoint : bool, optional
729
+ If True, sample from the interval [low, high] instead of the default
730
+ [low, high) Defaults to False.
731
+
732
+ Returns
733
+ -------
734
+ out: int or ndarray of ints
735
+ size-shaped array of random integers from the appropriate distribution,
736
+ or a single such random int if size not provided.
737
+ """
738
+ if isinstance(gen, Generator):
739
+ return gen.integers(low, high=high, size=size, dtype=dtype,
740
+ endpoint=endpoint)
741
+ else:
742
+ if gen is None:
743
+ # default is RandomState singleton used by np.random.
744
+ gen = np.random.mtrand._rand
745
+ if endpoint:
746
+ # inclusive of endpoint
747
+ # remember that low and high can be arrays, so don't modify in
748
+ # place
749
+ if high is None:
750
+ return gen.randint(low + 1, size=size, dtype=dtype)
751
+ if high is not None:
752
+ return gen.randint(low, high=high + 1, size=size, dtype=dtype)
753
+
754
+ # exclusive
755
+ return gen.randint(low, high=high, size=size, dtype=dtype)
756
+
757
+
758
+ @contextmanager
759
+ def _fixed_default_rng(seed=1638083107694713882823079058616272161):
760
+ """Context with a fixed np.random.default_rng seed."""
761
+ orig_fun = np.random.default_rng
762
+ np.random.default_rng = lambda seed=seed: orig_fun(seed)
763
+ try:
764
+ yield
765
+ finally:
766
+ np.random.default_rng = orig_fun
767
+
768
+
769
+ def _rng_html_rewrite(func):
770
+ """Rewrite the HTML rendering of ``np.random.default_rng``.
771
+
772
+ This is intended to decorate
773
+ ``numpydoc.docscrape_sphinx.SphinxDocString._str_examples``.
774
+
775
+ Examples are only run by Sphinx when there are plot involved. Even so,
776
+ it does not change the result values getting printed.
777
+ """
778
+ # hexadecimal or number seed, case-insensitive
779
+ pattern = re.compile(r'np.random.default_rng\((0x[0-9A-F]+|\d+)\)', re.I)
780
+
781
+ def _wrapped(*args, **kwargs):
782
+ res = func(*args, **kwargs)
783
+ lines = [
784
+ re.sub(pattern, 'np.random.default_rng()', line)
785
+ for line in res
786
+ ]
787
+ return lines
788
+
789
+ return _wrapped
790
+
791
+
792
+ def _argmin(a, keepdims=False, axis=None):
793
+ """
794
+ argmin with a `keepdims` parameter.
795
+
796
+ See https://github.com/numpy/numpy/issues/8710
797
+
798
+ If axis is not None, a.shape[axis] must be greater than 0.
799
+ """
800
+ res = np.argmin(a, axis=axis)
801
+ if keepdims and axis is not None:
802
+ res = np.expand_dims(res, axis=axis)
803
+ return res
804
+
805
+
806
+ def _first_nonnan(a, axis):
807
+ """
808
+ Return the first non-nan value along the given axis.
809
+
810
+ If a slice is all nan, nan is returned for that slice.
811
+
812
+ The shape of the return value corresponds to ``keepdims=True``.
813
+
814
+ Examples
815
+ --------
816
+ >>> import numpy as np
817
+ >>> nan = np.nan
818
+ >>> a = np.array([[ 3., 3., nan, 3.],
819
+ [ 1., nan, 2., 4.],
820
+ [nan, nan, 9., -1.],
821
+ [nan, 5., 4., 3.],
822
+ [ 2., 2., 2., 2.],
823
+ [nan, nan, nan, nan]])
824
+ >>> _first_nonnan(a, axis=0)
825
+ array([[3., 3., 2., 3.]])
826
+ >>> _first_nonnan(a, axis=1)
827
+ array([[ 3.],
828
+ [ 1.],
829
+ [ 9.],
830
+ [ 5.],
831
+ [ 2.],
832
+ [nan]])
833
+ """
834
+ k = _argmin(np.isnan(a), axis=axis, keepdims=True)
835
+ return np.take_along_axis(a, k, axis=axis)
836
+
837
+
838
+ def _nan_allsame(a, axis, keepdims=False):
839
+ """
840
+ Determine if the values along an axis are all the same.
841
+
842
+ nan values are ignored.
843
+
844
+ `a` must be a numpy array.
845
+
846
+ `axis` is assumed to be normalized; that is, 0 <= axis < a.ndim.
847
+
848
+ For an axis of length 0, the result is True. That is, we adopt the
849
+ convention that ``allsame([])`` is True. (There are no values in the
850
+ input that are different.)
851
+
852
+ `True` is returned for slices that are all nan--not because all the
853
+ values are the same, but because this is equivalent to ``allsame([])``.
854
+
855
+ Examples
856
+ --------
857
+ >>> from numpy import nan, array
858
+ >>> a = array([[ 3., 3., nan, 3.],
859
+ ... [ 1., nan, 2., 4.],
860
+ ... [nan, nan, 9., -1.],
861
+ ... [nan, 5., 4., 3.],
862
+ ... [ 2., 2., 2., 2.],
863
+ ... [nan, nan, nan, nan]])
864
+ >>> _nan_allsame(a, axis=1, keepdims=True)
865
+ array([[ True],
866
+ [False],
867
+ [False],
868
+ [False],
869
+ [ True],
870
+ [ True]])
871
+ """
872
+ if axis is None:
873
+ if a.size == 0:
874
+ return True
875
+ a = a.ravel()
876
+ axis = 0
877
+ else:
878
+ shp = a.shape
879
+ if shp[axis] == 0:
880
+ shp = shp[:axis] + (1,)*keepdims + shp[axis + 1:]
881
+ return np.full(shp, fill_value=True, dtype=bool)
882
+ a0 = _first_nonnan(a, axis=axis)
883
+ return ((a0 == a) | np.isnan(a)).all(axis=axis, keepdims=keepdims)
884
+
885
+
886
+ def _contains_nan(
887
+ a: Array,
888
+ nan_policy: Literal["propagate", "raise", "omit"] = "propagate",
889
+ *,
890
+ xp_omit_okay: bool = False,
891
+ xp: ModuleType | None = None,
892
+ ) -> Array | bool:
893
+ # Regarding `xp_omit_okay`: Temporarily, while `_axis_nan_policy` does not
894
+ # handle non-NumPy arrays, most functions that call `_contains_nan` want
895
+ # it to raise an error if `nan_policy='omit'` and `xp` is not `np`.
896
+ # Some functions support `nan_policy='omit'` natively, so setting this to
897
+ # `True` prevents the error from being raised.
898
+ policies = {"propagate", "raise", "omit"}
899
+ if nan_policy not in policies:
900
+ msg = f"nan_policy must be one of {policies}."
901
+ raise ValueError(msg)
902
+
903
+ if xp_size(a) == 0:
904
+ return False
905
+
906
+ if xp is None:
907
+ xp = array_namespace(a)
908
+
909
+ if xp.isdtype(a.dtype, "real floating"):
910
+ # Faster and less memory-intensive than xp.any(xp.isnan(a)), and unlike other
911
+ # reductions, `max`/`min` won't return NaN unless there is a NaN in the data.
912
+ contains_nan = xp.isnan(xp.max(a))
913
+ elif xp.isdtype(a.dtype, "complex floating"):
914
+ # Typically `real` and `imag` produce views; otherwise, `xp.any(xp.isnan(a))`
915
+ # would be more efficient.
916
+ contains_nan = xp.isnan(xp.max(xp.real(a))) | xp.isnan(xp.max(xp.imag(a)))
917
+ elif is_numpy(xp) and np.issubdtype(a.dtype, object):
918
+ contains_nan = False
919
+ for el in a.ravel():
920
+ # isnan doesn't work on non-numeric elements
921
+ if np.issubdtype(type(el), np.number) and np.isnan(el):
922
+ contains_nan = True
923
+ break
924
+ else:
925
+ # Only `object` and `inexact` arrays can have NaNs
926
+ return False
927
+
928
+ # The implicit call to bool(contains_nan) must happen after testing
929
+ # nan_policy to prevent lazy and device-bound xps from raising in the
930
+ # default policy='propagate' case.
931
+ if nan_policy == 'raise':
932
+ if is_lazy_array(a):
933
+ msg = "nan_policy='raise' is not supported for lazy arrays."
934
+ raise TypeError(msg)
935
+ if contains_nan:
936
+ msg = "The input contains nan values"
937
+ raise ValueError(msg)
938
+ elif nan_policy == 'omit' and not xp_omit_okay and not is_numpy(xp):
939
+ if is_lazy_array(a):
940
+ msg = "nan_policy='omit' is not supported for lazy arrays."
941
+ raise TypeError(msg)
942
+ if contains_nan:
943
+ msg = "nan_policy='omit' is incompatible with non-NumPy arrays."
944
+ raise ValueError(msg)
945
+
946
+ return contains_nan
947
+
948
+
949
+ def _rename_parameter(old_name, new_name, dep_version=None):
950
+ """
951
+ Generate decorator for backward-compatible keyword renaming.
952
+
953
+ Apply the decorator generated by `_rename_parameter` to functions with a
954
+ recently renamed parameter to maintain backward-compatibility.
955
+
956
+ After decoration, the function behaves as follows:
957
+ If only the new parameter is passed into the function, behave as usual.
958
+ If only the old parameter is passed into the function (as a keyword), raise
959
+ a DeprecationWarning if `dep_version` is provided, and behave as usual
960
+ otherwise.
961
+ If both old and new parameters are passed into the function, raise a
962
+ DeprecationWarning if `dep_version` is provided, and raise the appropriate
963
+ TypeError (function got multiple values for argument).
964
+
965
+ Parameters
966
+ ----------
967
+ old_name : str
968
+ Old name of parameter
969
+ new_name : str
970
+ New name of parameter
971
+ dep_version : str, optional
972
+ Version of SciPy in which old parameter was deprecated in the format
973
+ 'X.Y.Z'. If supplied, the deprecation message will indicate that
974
+ support for the old parameter will be removed in version 'X.Y+2.Z'
975
+
976
+ Notes
977
+ -----
978
+ Untested with functions that accept *args. Probably won't work as written.
979
+
980
+ """
981
+ def decorator(fun):
982
+ @functools.wraps(fun)
983
+ def wrapper(*args, **kwargs):
984
+ if old_name in kwargs:
985
+ if dep_version:
986
+ end_version = dep_version.split('.')
987
+ end_version[1] = str(int(end_version[1]) + 2)
988
+ end_version = '.'.join(end_version)
989
+ message = (f"Use of keyword argument `{old_name}` is "
990
+ f"deprecated and replaced by `{new_name}`. "
991
+ f"Support for `{old_name}` will be removed "
992
+ f"in SciPy {end_version}.")
993
+ warnings.warn(message, DeprecationWarning, stacklevel=2)
994
+ if new_name in kwargs:
995
+ message = (f"{fun.__name__}() got multiple values for "
996
+ f"argument now known as `{new_name}`")
997
+ raise TypeError(message)
998
+ kwargs[new_name] = kwargs.pop(old_name)
999
+ return fun(*args, **kwargs)
1000
+ return wrapper
1001
+ return decorator
1002
+
1003
+
1004
+ def _rng_spawn(rng, n_children):
1005
+ # spawns independent RNGs from a parent RNG
1006
+ bg = rng._bit_generator
1007
+ ss = bg._seed_seq
1008
+ child_rngs = [np.random.Generator(type(bg)(child_ss))
1009
+ for child_ss in ss.spawn(n_children)]
1010
+ return child_rngs
1011
+
1012
+
1013
+ def _get_nan(*data, shape=(), xp=None):
1014
+ xp = array_namespace(*data) if xp is None else xp
1015
+ # Get NaN of appropriate dtype for data
1016
+ dtype = xp_result_type(*data, force_floating=True, xp=xp)
1017
+ device = xp_result_device(*data)
1018
+ res = xp.full(shape, xp.nan, dtype=dtype, device=device)
1019
+ if not shape:
1020
+ res = res[()]
1021
+ # whenever mdhaber/marray#89 is resolved, could just return `res`
1022
+ return res.data if is_marray(xp) else res
1023
+
1024
+
1025
+ def normalize_axis_index(axis, ndim):
1026
+ # Check if `axis` is in the correct range and normalize it
1027
+ if axis < -ndim or axis >= ndim:
1028
+ msg = f"axis {axis} is out of bounds for array of dimension {ndim}"
1029
+ raise AxisError(msg)
1030
+
1031
+ if axis < 0:
1032
+ axis = axis + ndim
1033
+ return axis
1034
+
1035
+
1036
+ def _call_callback_maybe_halt(callback, res):
1037
+ """Call wrapped callback; return True if algorithm should stop.
1038
+
1039
+ Parameters
1040
+ ----------
1041
+ callback : callable or None
1042
+ A user-provided callback wrapped with `_wrap_callback`
1043
+ res : OptimizeResult
1044
+ Information about the current iterate
1045
+
1046
+ Returns
1047
+ -------
1048
+ halt : bool
1049
+ True if minimization should stop
1050
+
1051
+ """
1052
+ if callback is None:
1053
+ return False
1054
+ try:
1055
+ callback(res)
1056
+ return False
1057
+ except StopIteration:
1058
+ callback.stop_iteration = True
1059
+ return True
1060
+
1061
+
1062
+ class _RichResult(dict):
1063
+ """ Container for multiple outputs with pretty-printing """
1064
+ def __getattr__(self, name):
1065
+ try:
1066
+ return self[name]
1067
+ except KeyError as e:
1068
+ raise AttributeError(name) from e
1069
+
1070
+ __setattr__ = dict.__setitem__ # type: ignore[assignment]
1071
+ __delattr__ = dict.__delitem__ # type: ignore[assignment]
1072
+
1073
+ def __repr__(self):
1074
+ order_keys = ['message', 'success', 'status', 'fun', 'funl', 'x', 'xl',
1075
+ 'col_ind', 'nit', 'lower', 'upper', 'eqlin', 'ineqlin',
1076
+ 'converged', 'flag', 'function_calls', 'iterations',
1077
+ 'root']
1078
+ order_keys = getattr(self, '_order_keys', order_keys)
1079
+ # 'slack', 'con' are redundant with residuals
1080
+ # 'crossover_nit' is probably not interesting to most users
1081
+ omit_keys = {'slack', 'con', 'crossover_nit', '_order_keys'}
1082
+
1083
+ def key(item):
1084
+ try:
1085
+ return order_keys.index(item[0].lower())
1086
+ except ValueError: # item not in list
1087
+ return np.inf
1088
+
1089
+ def omit_redundant(items):
1090
+ for item in items:
1091
+ if item[0] in omit_keys:
1092
+ continue
1093
+ yield item
1094
+
1095
+ def item_sorter(d):
1096
+ return sorted(omit_redundant(d.items()), key=key)
1097
+
1098
+ if self.keys():
1099
+ return _dict_formatter(self, sorter=item_sorter)
1100
+ else:
1101
+ return self.__class__.__name__ + "()"
1102
+
1103
+ def __dir__(self):
1104
+ return list(self.keys())
1105
+
1106
+
1107
+ def _indenter(s, n=0):
1108
+ """
1109
+ Ensures that lines after the first are indented by the specified amount
1110
+ """
1111
+ split = s.split("\n")
1112
+ indent = " "*n
1113
+ return ("\n" + indent).join(split)
1114
+
1115
+
1116
+ def _float_formatter_10(x):
1117
+ """
1118
+ Returns a string representation of a float with exactly ten characters
1119
+ """
1120
+ if np.isposinf(x):
1121
+ return " inf"
1122
+ elif np.isneginf(x):
1123
+ return " -inf"
1124
+ elif np.isnan(x):
1125
+ return " nan"
1126
+ return np.format_float_scientific(x, precision=3, pad_left=2, unique=False)
1127
+
1128
+
1129
+ def _dict_formatter(d, n=0, mplus=1, sorter=None):
1130
+ """
1131
+ Pretty printer for dictionaries
1132
+
1133
+ `n` keeps track of the starting indentation;
1134
+ lines are indented by this much after a line break.
1135
+ `mplus` is additional left padding applied to keys
1136
+ """
1137
+ if isinstance(d, dict):
1138
+ m = max(map(len, list(d.keys()))) + mplus # width to print keys
1139
+ s = '\n'.join([k.rjust(m) + ': ' + # right justified, width m
1140
+ _indenter(_dict_formatter(v, m+n+2, 0, sorter), m+2)
1141
+ for k, v in sorter(d)]) # +2 for ': '
1142
+ else:
1143
+ # By default, NumPy arrays print with linewidth=76. `n` is
1144
+ # the indent at which a line begins printing, so it is subtracted
1145
+ # from the default to avoid exceeding 76 characters total.
1146
+ # `edgeitems` is the number of elements to include before and after
1147
+ # ellipses when arrays are not shown in full.
1148
+ # `threshold` is the maximum number of elements for which an
1149
+ # array is shown in full.
1150
+ # These values tend to work well for use with OptimizeResult.
1151
+ with np.printoptions(linewidth=76-n, edgeitems=2, threshold=12,
1152
+ formatter={'float_kind': _float_formatter_10}):
1153
+ s = str(d)
1154
+ return s
1155
+
1156
+
1157
+ _batch_note = """
1158
+ The documentation is written assuming array arguments are of specified
1159
+ "core" shapes. However, array argument(s) of this function may have additional
1160
+ "batch" dimensions prepended to the core shape. In this case, the array is treated
1161
+ as a batch of lower-dimensional slices; see :ref:`linalg_batch` for details.
1162
+ """
1163
+
1164
+
1165
+ def _apply_over_batch(*argdefs):
1166
+ """
1167
+ Factory for decorator that applies a function over batched arguments.
1168
+
1169
+ Array arguments may have any number of core dimensions (typically 0,
1170
+ 1, or 2) and any broadcastable batch shapes. There may be any
1171
+ number of array outputs of any number of dimensions. Assumptions
1172
+ right now - which are satisfied by all functions of interest in `linalg` -
1173
+ are that all array inputs are consecutive keyword or positional arguments,
1174
+ and that the wrapped function returns either a single array or a tuple of
1175
+ arrays. It's only as general as it needs to be right now - it can be extended.
1176
+
1177
+ Parameters
1178
+ ----------
1179
+ *argdefs : tuple of (str, int)
1180
+ Definitions of array arguments: the keyword name of the argument, and
1181
+ the number of core dimensions.
1182
+
1183
+ Example:
1184
+ --------
1185
+ `linalg.eig` accepts two matrices as the first two arguments `a` and `b`, where
1186
+ `b` is optional, and returns one array or a tuple of arrays, depending on the
1187
+ values of other positional or keyword arguments. To generate a wrapper that applies
1188
+ the function over batches of `a` and optionally `b` :
1189
+
1190
+ >>> _apply_over_batch(('a', 2), ('b', 2))
1191
+ """
1192
+ names, ndims = list(zip(*argdefs))
1193
+ n_arrays = len(names)
1194
+
1195
+ def decorator(f):
1196
+ @functools.wraps(f)
1197
+ def wrapper(*args, **kwargs):
1198
+ args = list(args)
1199
+
1200
+ # Ensure all arrays in `arrays`, other arguments in `other_args`/`kwargs`
1201
+ arrays, other_args = args[:n_arrays], args[n_arrays:]
1202
+ for i, name in enumerate(names):
1203
+ if name in kwargs:
1204
+ if i + 1 <= len(args):
1205
+ raise ValueError(f'{f.__name__}() got multiple values '
1206
+ f'for argument `{name}`.')
1207
+ else:
1208
+ arrays.append(kwargs.pop(name))
1209
+
1210
+ # Determine core and batch shapes
1211
+ batch_shapes = []
1212
+ core_shapes = []
1213
+ for i, (array, ndim) in enumerate(zip(arrays, ndims)):
1214
+ array = None if array is None else np.asarray(array)
1215
+ shape = () if array is None else array.shape
1216
+
1217
+ if ndim == "1|2": # special case for `solve`, etc.
1218
+ ndim = 2 if array.ndim >= 2 else 1
1219
+
1220
+ arrays[i] = array
1221
+ batch_shapes.append(shape[:-ndim] if ndim > 0 else shape)
1222
+ core_shapes.append(shape[-ndim:] if ndim > 0 else ())
1223
+
1224
+ # Early exit if call is not batched
1225
+ if not any(batch_shapes):
1226
+ return f(*arrays, *other_args, **kwargs)
1227
+
1228
+ # Determine broadcasted batch shape
1229
+ batch_shape = np.broadcast_shapes(*batch_shapes) # Gives OK error message
1230
+
1231
+ # Broadcast arrays to appropriate shape
1232
+ for i, (array, core_shape) in enumerate(zip(arrays, core_shapes)):
1233
+ if array is None:
1234
+ continue
1235
+ arrays[i] = np.broadcast_to(array, batch_shape + core_shape)
1236
+
1237
+ # Main loop
1238
+ results = []
1239
+ for index in np.ndindex(batch_shape):
1240
+ result = f(*(array[index] for array in arrays), *other_args, **kwargs)
1241
+ # Assume `result` is either a tuple or single array. This is easily
1242
+ # generalized by allowing the contributor to pass an `unpack_result`
1243
+ # callable to the decorator factory.
1244
+ result = (result,) if not isinstance(result, tuple) else result
1245
+ results.append(result)
1246
+ results = list(zip(*results))
1247
+
1248
+ # Reshape results
1249
+ for i, result in enumerate(results):
1250
+ result = np.stack(result)
1251
+ core_shape = result.shape[1:]
1252
+ results[i] = np.reshape(result, batch_shape + core_shape)
1253
+
1254
+ # Assume `result` should be a single array if there is only one element or
1255
+ # a `tuple` otherwise. This is easily generalized by allowing the
1256
+ # contributor to pass an `pack_result` callable to the decorator factory.
1257
+ return results[0] if len(results) == 1 else results
1258
+
1259
+ doc = FunctionDoc(wrapper)
1260
+ doc['Extended Summary'].append(_batch_note.rstrip())
1261
+ wrapper.__doc__ = str(doc).split("\n", 1)[1] # remove signature
1262
+
1263
+ return wrapper
1264
+ return decorator
1265
+
1266
+
1267
+ def np_vecdot(x1, x2, /, *, axis=-1):
1268
+ # `np.vecdot` has advantages (e.g. see gh-22462), so let's use it when
1269
+ # available. As functions are translated to Array API, `np_vecdot` can be
1270
+ # replaced with `xp.vecdot`.
1271
+ if np.__version__ > "2.0":
1272
+ return np.vecdot(x1, x2, axis=axis)
1273
+ else:
1274
+ # of course there are other fancy ways of doing this (e.g. `einsum`)
1275
+ # but let's keep it simple since it's temporary
1276
+ return np.sum(x1 * x2, axis=axis)