scipy 1.16.2__cp311-cp311-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1530) hide show
  1. scipy/__config__.py +161 -0
  2. scipy/__init__.py +150 -0
  3. scipy/_cyutility.cp311-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp311-win_arm64.pyd +0 -0
  5. scipy/_distributor_init.py +18 -0
  6. scipy/_lib/__init__.py +14 -0
  7. scipy/_lib/_array_api.py +931 -0
  8. scipy/_lib/_array_api_compat_vendor.py +9 -0
  9. scipy/_lib/_array_api_no_0d.py +103 -0
  10. scipy/_lib/_bunch.py +229 -0
  11. scipy/_lib/_ccallback.py +251 -0
  12. scipy/_lib/_ccallback_c.cp311-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp311-win_arm64.pyd +0 -0
  14. scipy/_lib/_disjoint_set.py +254 -0
  15. scipy/_lib/_docscrape.py +761 -0
  16. scipy/_lib/_elementwise_iterative_method.py +346 -0
  17. scipy/_lib/_fpumode.cp311-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp311-win_arm64.pyd +0 -0
  19. scipy/_lib/_gcutils.py +105 -0
  20. scipy/_lib/_pep440.py +487 -0
  21. scipy/_lib/_sparse.py +41 -0
  22. scipy/_lib/_test_ccallback.cp311-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp311-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp311-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp311-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp311-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp311-win_arm64.pyd +0 -0
  28. scipy/_lib/_testutils.py +373 -0
  29. scipy/_lib/_threadsafety.py +58 -0
  30. scipy/_lib/_tmpdirs.py +86 -0
  31. scipy/_lib/_uarray/LICENSE +29 -0
  32. scipy/_lib/_uarray/__init__.py +116 -0
  33. scipy/_lib/_uarray/_backend.py +707 -0
  34. scipy/_lib/_uarray/_uarray.cp311-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp311-win_arm64.pyd +0 -0
  36. scipy/_lib/_util.py +1283 -0
  37. scipy/_lib/array_api_compat/__init__.py +22 -0
  38. scipy/_lib/array_api_compat/_internal.py +59 -0
  39. scipy/_lib/array_api_compat/common/__init__.py +1 -0
  40. scipy/_lib/array_api_compat/common/_aliases.py +727 -0
  41. scipy/_lib/array_api_compat/common/_fft.py +213 -0
  42. scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
  43. scipy/_lib/array_api_compat/common/_linalg.py +232 -0
  44. scipy/_lib/array_api_compat/common/_typing.py +192 -0
  45. scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
  46. scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
  47. scipy/_lib/array_api_compat/cupy/_info.py +336 -0
  48. scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
  49. scipy/_lib/array_api_compat/cupy/fft.py +36 -0
  50. scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
  51. scipy/_lib/array_api_compat/dask/__init__.py +0 -0
  52. scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
  53. scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
  54. scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
  55. scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
  56. scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
  57. scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
  58. scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
  59. scipy/_lib/array_api_compat/numpy/_info.py +366 -0
  60. scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
  61. scipy/_lib/array_api_compat/numpy/fft.py +35 -0
  62. scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
  63. scipy/_lib/array_api_compat/torch/__init__.py +22 -0
  64. scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
  65. scipy/_lib/array_api_compat/torch/_info.py +369 -0
  66. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  67. scipy/_lib/array_api_compat/torch/fft.py +85 -0
  68. scipy/_lib/array_api_compat/torch/linalg.py +121 -0
  69. scipy/_lib/array_api_extra/__init__.py +38 -0
  70. scipy/_lib/array_api_extra/_delegation.py +171 -0
  71. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  72. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  73. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  74. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  75. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  76. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  77. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  78. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  79. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  80. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  81. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  82. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  83. scipy/_lib/array_api_extra/testing.py +359 -0
  84. scipy/_lib/cobyqa/__init__.py +20 -0
  85. scipy/_lib/cobyqa/framework.py +1240 -0
  86. scipy/_lib/cobyqa/main.py +1506 -0
  87. scipy/_lib/cobyqa/models.py +1529 -0
  88. scipy/_lib/cobyqa/problem.py +1296 -0
  89. scipy/_lib/cobyqa/settings.py +132 -0
  90. scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
  91. scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
  92. scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
  93. scipy/_lib/cobyqa/utils/__init__.py +18 -0
  94. scipy/_lib/cobyqa/utils/exceptions.py +22 -0
  95. scipy/_lib/cobyqa/utils/math.py +77 -0
  96. scipy/_lib/cobyqa/utils/versions.py +67 -0
  97. scipy/_lib/decorator.py +399 -0
  98. scipy/_lib/deprecation.py +274 -0
  99. scipy/_lib/doccer.py +366 -0
  100. scipy/_lib/messagestream.cp311-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp311-win_arm64.pyd +0 -0
  102. scipy/_lib/pyprima/__init__.py +212 -0
  103. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  104. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  105. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  106. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  107. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  108. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  109. scipy/_lib/pyprima/cobyla/update.py +289 -0
  110. scipy/_lib/pyprima/common/__init__.py +0 -0
  111. scipy/_lib/pyprima/common/_bounds.py +34 -0
  112. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  113. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  114. scipy/_lib/pyprima/common/_project.py +173 -0
  115. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  116. scipy/_lib/pyprima/common/consts.py +47 -0
  117. scipy/_lib/pyprima/common/evaluate.py +99 -0
  118. scipy/_lib/pyprima/common/history.py +38 -0
  119. scipy/_lib/pyprima/common/infos.py +30 -0
  120. scipy/_lib/pyprima/common/linalg.py +435 -0
  121. scipy/_lib/pyprima/common/message.py +290 -0
  122. scipy/_lib/pyprima/common/powalg.py +131 -0
  123. scipy/_lib/pyprima/common/preproc.py +277 -0
  124. scipy/_lib/pyprima/common/present.py +5 -0
  125. scipy/_lib/pyprima/common/ratio.py +54 -0
  126. scipy/_lib/pyprima/common/redrho.py +47 -0
  127. scipy/_lib/pyprima/common/selectx.py +296 -0
  128. scipy/_lib/tests/__init__.py +0 -0
  129. scipy/_lib/tests/test__gcutils.py +110 -0
  130. scipy/_lib/tests/test__pep440.py +67 -0
  131. scipy/_lib/tests/test__testutils.py +32 -0
  132. scipy/_lib/tests/test__threadsafety.py +51 -0
  133. scipy/_lib/tests/test__util.py +641 -0
  134. scipy/_lib/tests/test_array_api.py +322 -0
  135. scipy/_lib/tests/test_bunch.py +169 -0
  136. scipy/_lib/tests/test_ccallback.py +196 -0
  137. scipy/_lib/tests/test_config.py +45 -0
  138. scipy/_lib/tests/test_deprecation.py +10 -0
  139. scipy/_lib/tests/test_doccer.py +143 -0
  140. scipy/_lib/tests/test_import_cycles.py +18 -0
  141. scipy/_lib/tests/test_public_api.py +482 -0
  142. scipy/_lib/tests/test_scipy_version.py +28 -0
  143. scipy/_lib/tests/test_tmpdirs.py +48 -0
  144. scipy/_lib/tests/test_warnings.py +137 -0
  145. scipy/_lib/uarray.py +31 -0
  146. scipy/cluster/__init__.py +31 -0
  147. scipy/cluster/_hierarchy.cp311-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp311-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp311-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp311-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp311-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp311-win_arm64.pyd +0 -0
  153. scipy/cluster/hierarchy.py +4348 -0
  154. scipy/cluster/tests/__init__.py +0 -0
  155. scipy/cluster/tests/hierarchy_test_data.py +145 -0
  156. scipy/cluster/tests/test_disjoint_set.py +202 -0
  157. scipy/cluster/tests/test_hierarchy.py +1238 -0
  158. scipy/cluster/tests/test_vq.py +434 -0
  159. scipy/cluster/vq.py +832 -0
  160. scipy/conftest.py +683 -0
  161. scipy/constants/__init__.py +358 -0
  162. scipy/constants/_codata.py +2266 -0
  163. scipy/constants/_constants.py +369 -0
  164. scipy/constants/codata.py +21 -0
  165. scipy/constants/constants.py +53 -0
  166. scipy/constants/tests/__init__.py +0 -0
  167. scipy/constants/tests/test_codata.py +78 -0
  168. scipy/constants/tests/test_constants.py +83 -0
  169. scipy/datasets/__init__.py +90 -0
  170. scipy/datasets/_download_all.py +71 -0
  171. scipy/datasets/_fetchers.py +225 -0
  172. scipy/datasets/_registry.py +26 -0
  173. scipy/datasets/_utils.py +81 -0
  174. scipy/datasets/tests/__init__.py +0 -0
  175. scipy/datasets/tests/test_data.py +128 -0
  176. scipy/differentiate/__init__.py +27 -0
  177. scipy/differentiate/_differentiate.py +1129 -0
  178. scipy/differentiate/tests/__init__.py +0 -0
  179. scipy/differentiate/tests/test_differentiate.py +694 -0
  180. scipy/fft/__init__.py +114 -0
  181. scipy/fft/_backend.py +196 -0
  182. scipy/fft/_basic.py +1650 -0
  183. scipy/fft/_basic_backend.py +197 -0
  184. scipy/fft/_debug_backends.py +22 -0
  185. scipy/fft/_fftlog.py +223 -0
  186. scipy/fft/_fftlog_backend.py +200 -0
  187. scipy/fft/_helper.py +348 -0
  188. scipy/fft/_pocketfft/LICENSE.md +25 -0
  189. scipy/fft/_pocketfft/__init__.py +9 -0
  190. scipy/fft/_pocketfft/basic.py +251 -0
  191. scipy/fft/_pocketfft/helper.py +249 -0
  192. scipy/fft/_pocketfft/pypocketfft.cp311-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp311-win_arm64.pyd +0 -0
  194. scipy/fft/_pocketfft/realtransforms.py +109 -0
  195. scipy/fft/_pocketfft/tests/__init__.py +0 -0
  196. scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
  197. scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
  198. scipy/fft/_realtransforms.py +706 -0
  199. scipy/fft/_realtransforms_backend.py +63 -0
  200. scipy/fft/tests/__init__.py +0 -0
  201. scipy/fft/tests/mock_backend.py +96 -0
  202. scipy/fft/tests/test_backend.py +98 -0
  203. scipy/fft/tests/test_basic.py +504 -0
  204. scipy/fft/tests/test_fftlog.py +215 -0
  205. scipy/fft/tests/test_helper.py +558 -0
  206. scipy/fft/tests/test_multithreading.py +84 -0
  207. scipy/fft/tests/test_real_transforms.py +247 -0
  208. scipy/fftpack/__init__.py +103 -0
  209. scipy/fftpack/_basic.py +428 -0
  210. scipy/fftpack/_helper.py +115 -0
  211. scipy/fftpack/_pseudo_diffs.py +554 -0
  212. scipy/fftpack/_realtransforms.py +598 -0
  213. scipy/fftpack/basic.py +20 -0
  214. scipy/fftpack/convolve.cp311-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp311-win_arm64.pyd +0 -0
  216. scipy/fftpack/helper.py +19 -0
  217. scipy/fftpack/pseudo_diffs.py +22 -0
  218. scipy/fftpack/realtransforms.py +19 -0
  219. scipy/fftpack/tests/__init__.py +0 -0
  220. scipy/fftpack/tests/fftw_double_ref.npz +0 -0
  221. scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
  222. scipy/fftpack/tests/fftw_single_ref.npz +0 -0
  223. scipy/fftpack/tests/test.npz +0 -0
  224. scipy/fftpack/tests/test_basic.py +877 -0
  225. scipy/fftpack/tests/test_helper.py +54 -0
  226. scipy/fftpack/tests/test_import.py +33 -0
  227. scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
  228. scipy/fftpack/tests/test_real_transforms.py +836 -0
  229. scipy/integrate/__init__.py +122 -0
  230. scipy/integrate/_bvp.py +1160 -0
  231. scipy/integrate/_cubature.py +729 -0
  232. scipy/integrate/_dop.cp311-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp311-win_arm64.pyd +0 -0
  234. scipy/integrate/_ivp/__init__.py +8 -0
  235. scipy/integrate/_ivp/base.py +290 -0
  236. scipy/integrate/_ivp/bdf.py +478 -0
  237. scipy/integrate/_ivp/common.py +451 -0
  238. scipy/integrate/_ivp/dop853_coefficients.py +193 -0
  239. scipy/integrate/_ivp/ivp.py +755 -0
  240. scipy/integrate/_ivp/lsoda.py +224 -0
  241. scipy/integrate/_ivp/radau.py +572 -0
  242. scipy/integrate/_ivp/rk.py +601 -0
  243. scipy/integrate/_ivp/tests/__init__.py +0 -0
  244. scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
  245. scipy/integrate/_ivp/tests/test_rk.py +37 -0
  246. scipy/integrate/_lebedev.py +5450 -0
  247. scipy/integrate/_lsoda.cp311-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp311-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp311-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp311-win_arm64.pyd +0 -0
  252. scipy/integrate/_odepack_py.py +273 -0
  253. scipy/integrate/_quad_vec.py +674 -0
  254. scipy/integrate/_quadpack.cp311-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp311-win_arm64.pyd +0 -0
  256. scipy/integrate/_quadpack_py.py +1283 -0
  257. scipy/integrate/_quadrature.py +1336 -0
  258. scipy/integrate/_rules/__init__.py +12 -0
  259. scipy/integrate/_rules/_base.py +518 -0
  260. scipy/integrate/_rules/_gauss_kronrod.py +202 -0
  261. scipy/integrate/_rules/_gauss_legendre.py +62 -0
  262. scipy/integrate/_rules/_genz_malik.py +210 -0
  263. scipy/integrate/_tanhsinh.py +1385 -0
  264. scipy/integrate/_test_multivariate.cp311-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp311-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp311-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp311-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp311-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp311-win_arm64.pyd +0 -0
  270. scipy/integrate/dop.py +15 -0
  271. scipy/integrate/lsoda.py +15 -0
  272. scipy/integrate/odepack.py +17 -0
  273. scipy/integrate/quadpack.py +23 -0
  274. scipy/integrate/tests/__init__.py +0 -0
  275. scipy/integrate/tests/test__quad_vec.py +211 -0
  276. scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
  277. scipy/integrate/tests/test_bvp.py +714 -0
  278. scipy/integrate/tests/test_cubature.py +1375 -0
  279. scipy/integrate/tests/test_integrate.py +840 -0
  280. scipy/integrate/tests/test_odeint_jac.py +74 -0
  281. scipy/integrate/tests/test_quadpack.py +680 -0
  282. scipy/integrate/tests/test_quadrature.py +730 -0
  283. scipy/integrate/tests/test_tanhsinh.py +1171 -0
  284. scipy/integrate/vode.py +15 -0
  285. scipy/interpolate/__init__.py +228 -0
  286. scipy/interpolate/_bary_rational.py +715 -0
  287. scipy/interpolate/_bsplines.py +2469 -0
  288. scipy/interpolate/_cubic.py +973 -0
  289. scipy/interpolate/_dfitpack.cp311-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp311-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp311-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp311-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp311-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp311-win_arm64.pyd +0 -0
  295. scipy/interpolate/_fitpack2.py +2397 -0
  296. scipy/interpolate/_fitpack_impl.py +811 -0
  297. scipy/interpolate/_fitpack_py.py +898 -0
  298. scipy/interpolate/_fitpack_repro.py +996 -0
  299. scipy/interpolate/_interpnd.cp311-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp311-win_arm64.pyd +0 -0
  301. scipy/interpolate/_interpolate.py +2266 -0
  302. scipy/interpolate/_ndbspline.py +415 -0
  303. scipy/interpolate/_ndgriddata.py +329 -0
  304. scipy/interpolate/_pade.py +67 -0
  305. scipy/interpolate/_polyint.py +1025 -0
  306. scipy/interpolate/_ppoly.cp311-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp311-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp311-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp311-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp311-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp311-win_arm64.pyd +0 -0
  315. scipy/interpolate/dfitpack.py +24 -0
  316. scipy/interpolate/fitpack.py +31 -0
  317. scipy/interpolate/fitpack2.py +29 -0
  318. scipy/interpolate/interpnd.py +24 -0
  319. scipy/interpolate/interpolate.py +30 -0
  320. scipy/interpolate/ndgriddata.py +23 -0
  321. scipy/interpolate/polyint.py +24 -0
  322. scipy/interpolate/rbf.py +18 -0
  323. scipy/interpolate/tests/__init__.py +0 -0
  324. scipy/interpolate/tests/data/bug-1310.npz +0 -0
  325. scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
  326. scipy/interpolate/tests/data/gcvspl.npz +0 -0
  327. scipy/interpolate/tests/test_bary_rational.py +368 -0
  328. scipy/interpolate/tests/test_bsplines.py +3754 -0
  329. scipy/interpolate/tests/test_fitpack.py +519 -0
  330. scipy/interpolate/tests/test_fitpack2.py +1431 -0
  331. scipy/interpolate/tests/test_gil.py +64 -0
  332. scipy/interpolate/tests/test_interpnd.py +452 -0
  333. scipy/interpolate/tests/test_interpolate.py +2630 -0
  334. scipy/interpolate/tests/test_ndgriddata.py +308 -0
  335. scipy/interpolate/tests/test_pade.py +107 -0
  336. scipy/interpolate/tests/test_polyint.py +972 -0
  337. scipy/interpolate/tests/test_rbf.py +246 -0
  338. scipy/interpolate/tests/test_rbfinterp.py +534 -0
  339. scipy/interpolate/tests/test_rgi.py +1151 -0
  340. scipy/io/__init__.py +116 -0
  341. scipy/io/_fast_matrix_market/__init__.py +600 -0
  342. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_arm64.pyd +0 -0
  344. scipy/io/_fortran.py +354 -0
  345. scipy/io/_harwell_boeing/__init__.py +7 -0
  346. scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
  347. scipy/io/_harwell_boeing/hb.py +571 -0
  348. scipy/io/_harwell_boeing/tests/__init__.py +0 -0
  349. scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
  350. scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
  351. scipy/io/_idl.py +917 -0
  352. scipy/io/_mmio.py +968 -0
  353. scipy/io/_netcdf.py +1104 -0
  354. scipy/io/_test_fortran.cp311-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp311-win_arm64.pyd +0 -0
  356. scipy/io/arff/__init__.py +28 -0
  357. scipy/io/arff/_arffread.py +873 -0
  358. scipy/io/arff/arffread.py +19 -0
  359. scipy/io/arff/tests/__init__.py +0 -0
  360. scipy/io/arff/tests/data/iris.arff +225 -0
  361. scipy/io/arff/tests/data/missing.arff +8 -0
  362. scipy/io/arff/tests/data/nodata.arff +11 -0
  363. scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
  364. scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
  365. scipy/io/arff/tests/data/test1.arff +10 -0
  366. scipy/io/arff/tests/data/test10.arff +8 -0
  367. scipy/io/arff/tests/data/test11.arff +11 -0
  368. scipy/io/arff/tests/data/test2.arff +15 -0
  369. scipy/io/arff/tests/data/test3.arff +6 -0
  370. scipy/io/arff/tests/data/test4.arff +11 -0
  371. scipy/io/arff/tests/data/test5.arff +26 -0
  372. scipy/io/arff/tests/data/test6.arff +12 -0
  373. scipy/io/arff/tests/data/test7.arff +15 -0
  374. scipy/io/arff/tests/data/test8.arff +12 -0
  375. scipy/io/arff/tests/data/test9.arff +14 -0
  376. scipy/io/arff/tests/test_arffread.py +421 -0
  377. scipy/io/harwell_boeing.py +17 -0
  378. scipy/io/idl.py +17 -0
  379. scipy/io/matlab/__init__.py +66 -0
  380. scipy/io/matlab/_byteordercodes.py +75 -0
  381. scipy/io/matlab/_mio.py +375 -0
  382. scipy/io/matlab/_mio4.py +632 -0
  383. scipy/io/matlab/_mio5.py +901 -0
  384. scipy/io/matlab/_mio5_params.py +281 -0
  385. scipy/io/matlab/_mio5_utils.cp311-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp311-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp311-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp311-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp311-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp311-win_arm64.pyd +0 -0
  392. scipy/io/matlab/byteordercodes.py +17 -0
  393. scipy/io/matlab/mio.py +16 -0
  394. scipy/io/matlab/mio4.py +17 -0
  395. scipy/io/matlab/mio5.py +19 -0
  396. scipy/io/matlab/mio5_params.py +18 -0
  397. scipy/io/matlab/mio5_utils.py +17 -0
  398. scipy/io/matlab/mio_utils.py +17 -0
  399. scipy/io/matlab/miobase.py +16 -0
  400. scipy/io/matlab/streams.py +16 -0
  401. scipy/io/matlab/tests/__init__.py +0 -0
  402. scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
  403. scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
  404. scipy/io/matlab/tests/data/big_endian.mat +0 -0
  405. scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
  406. scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
  407. scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
  408. scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
  409. scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
  410. scipy/io/matlab/tests/data/little_endian.mat +0 -0
  411. scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
  412. scipy/io/matlab/tests/data/malformed1.mat +0 -0
  413. scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
  414. scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
  415. scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
  416. scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
  417. scipy/io/matlab/tests/data/parabola.mat +0 -0
  418. scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
  419. scipy/io/matlab/tests/data/some_functions.mat +0 -0
  420. scipy/io/matlab/tests/data/sqr.mat +0 -0
  421. scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
  422. scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
  423. scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
  424. scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
  425. scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
  426. scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
  427. scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
  428. scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
  429. scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
  430. scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
  431. scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
  432. scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
  433. scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
  434. scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
  435. scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
  436. scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
  437. scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
  438. scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
  439. scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
  440. scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
  441. scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
  442. scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
  443. scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
  444. scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
  445. scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
  446. scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
  447. scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
  448. scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
  449. scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
  450. scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
  451. scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
  452. scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
  453. scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
  454. scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
  455. scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
  456. scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
  457. scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
  458. scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
  459. scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
  460. scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
  461. scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
  462. scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
  463. scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
  464. scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
  465. scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
  466. scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
  467. scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
  468. scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
  469. scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
  470. scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
  471. scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
  472. scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
  473. scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
  474. scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
  475. scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
  476. scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
  477. scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
  478. scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
  479. scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
  480. scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
  481. scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
  482. scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
  483. scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
  484. scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
  485. scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
  486. scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
  487. scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
  488. scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
  489. scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
  490. scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
  491. scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
  492. scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
  493. scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
  494. scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
  495. scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
  496. scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
  497. scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
  498. scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
  499. scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
  500. scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
  501. scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
  502. scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
  503. scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
  504. scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
  505. scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
  506. scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
  507. scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
  508. scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
  509. scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
  510. scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
  511. scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
  512. scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
  513. scipy/io/matlab/tests/test_byteordercodes.py +29 -0
  514. scipy/io/matlab/tests/test_mio.py +1399 -0
  515. scipy/io/matlab/tests/test_mio5_utils.py +179 -0
  516. scipy/io/matlab/tests/test_mio_funcs.py +51 -0
  517. scipy/io/matlab/tests/test_mio_utils.py +45 -0
  518. scipy/io/matlab/tests/test_miobase.py +32 -0
  519. scipy/io/matlab/tests/test_pathological.py +33 -0
  520. scipy/io/matlab/tests/test_streams.py +241 -0
  521. scipy/io/mmio.py +17 -0
  522. scipy/io/netcdf.py +17 -0
  523. scipy/io/tests/__init__.py +0 -0
  524. scipy/io/tests/data/Transparent Busy.ani +0 -0
  525. scipy/io/tests/data/array_float32_1d.sav +0 -0
  526. scipy/io/tests/data/array_float32_2d.sav +0 -0
  527. scipy/io/tests/data/array_float32_3d.sav +0 -0
  528. scipy/io/tests/data/array_float32_4d.sav +0 -0
  529. scipy/io/tests/data/array_float32_5d.sav +0 -0
  530. scipy/io/tests/data/array_float32_6d.sav +0 -0
  531. scipy/io/tests/data/array_float32_7d.sav +0 -0
  532. scipy/io/tests/data/array_float32_8d.sav +0 -0
  533. scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
  534. scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
  535. scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
  536. scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
  537. scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
  538. scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
  539. scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
  540. scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
  541. scipy/io/tests/data/example_1.nc +0 -0
  542. scipy/io/tests/data/example_2.nc +0 -0
  543. scipy/io/tests/data/example_3_maskedvals.nc +0 -0
  544. scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
  545. scipy/io/tests/data/fortran-mixed.dat +0 -0
  546. scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
  547. scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
  548. scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
  549. scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
  550. scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
  551. scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
  552. scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
  553. scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
  554. scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
  555. scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
  556. scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
  557. scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
  558. scipy/io/tests/data/invalid_pointer.sav +0 -0
  559. scipy/io/tests/data/null_pointer.sav +0 -0
  560. scipy/io/tests/data/scalar_byte.sav +0 -0
  561. scipy/io/tests/data/scalar_byte_descr.sav +0 -0
  562. scipy/io/tests/data/scalar_complex32.sav +0 -0
  563. scipy/io/tests/data/scalar_complex64.sav +0 -0
  564. scipy/io/tests/data/scalar_float32.sav +0 -0
  565. scipy/io/tests/data/scalar_float64.sav +0 -0
  566. scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
  567. scipy/io/tests/data/scalar_int16.sav +0 -0
  568. scipy/io/tests/data/scalar_int32.sav +0 -0
  569. scipy/io/tests/data/scalar_int64.sav +0 -0
  570. scipy/io/tests/data/scalar_string.sav +0 -0
  571. scipy/io/tests/data/scalar_uint16.sav +0 -0
  572. scipy/io/tests/data/scalar_uint32.sav +0 -0
  573. scipy/io/tests/data/scalar_uint64.sav +0 -0
  574. scipy/io/tests/data/struct_arrays.sav +0 -0
  575. scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
  576. scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
  577. scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
  578. scipy/io/tests/data/struct_inherit.sav +0 -0
  579. scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
  580. scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
  581. scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
  582. scipy/io/tests/data/struct_pointers.sav +0 -0
  583. scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
  584. scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
  585. scipy/io/tests/data/struct_scalars.sav +0 -0
  586. scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
  587. scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
  588. scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
  589. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
  590. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
  591. scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
  592. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
  593. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
  594. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
  595. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
  596. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
  597. scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
  598. scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
  599. scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
  600. scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
  601. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
  602. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
  603. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
  604. scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
  605. scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
  606. scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
  607. scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
  608. scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
  609. scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
  610. scipy/io/tests/data/various_compressed.sav +0 -0
  611. scipy/io/tests/test_fortran.py +264 -0
  612. scipy/io/tests/test_idl.py +483 -0
  613. scipy/io/tests/test_mmio.py +831 -0
  614. scipy/io/tests/test_netcdf.py +550 -0
  615. scipy/io/tests/test_paths.py +93 -0
  616. scipy/io/tests/test_wavfile.py +501 -0
  617. scipy/io/wavfile.py +938 -0
  618. scipy/linalg/__init__.pxd +1 -0
  619. scipy/linalg/__init__.py +236 -0
  620. scipy/linalg/_basic.py +2146 -0
  621. scipy/linalg/_blas_subroutines.h +164 -0
  622. scipy/linalg/_cythonized_array_utils.cp311-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp311-win_arm64.pyd +0 -0
  624. scipy/linalg/_cythonized_array_utils.pxd +40 -0
  625. scipy/linalg/_cythonized_array_utils.pyi +16 -0
  626. scipy/linalg/_decomp.py +1645 -0
  627. scipy/linalg/_decomp_cholesky.py +413 -0
  628. scipy/linalg/_decomp_cossin.py +236 -0
  629. scipy/linalg/_decomp_interpolative.cp311-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp311-win_arm64.pyd +0 -0
  631. scipy/linalg/_decomp_ldl.py +356 -0
  632. scipy/linalg/_decomp_lu.py +401 -0
  633. scipy/linalg/_decomp_lu_cython.cp311-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp311-win_arm64.pyd +0 -0
  635. scipy/linalg/_decomp_lu_cython.pyi +6 -0
  636. scipy/linalg/_decomp_polar.py +113 -0
  637. scipy/linalg/_decomp_qr.py +494 -0
  638. scipy/linalg/_decomp_qz.py +452 -0
  639. scipy/linalg/_decomp_schur.py +336 -0
  640. scipy/linalg/_decomp_svd.py +545 -0
  641. scipy/linalg/_decomp_update.cp311-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp311-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp311-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp311-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp311-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp311-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp311-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp311-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp311-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp311-win_arm64.pyd +0 -0
  654. scipy/linalg/_matfuncs_expm.pyi +6 -0
  655. scipy/linalg/_matfuncs_inv_ssq.py +886 -0
  656. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_arm64.pyd +0 -0
  661. scipy/linalg/_misc.py +191 -0
  662. scipy/linalg/_procrustes.py +113 -0
  663. scipy/linalg/_sketches.py +189 -0
  664. scipy/linalg/_solve_toeplitz.cp311-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp311-win_arm64.pyd +0 -0
  666. scipy/linalg/_solvers.py +862 -0
  667. scipy/linalg/_special_matrices.py +1322 -0
  668. scipy/linalg/_testutils.py +65 -0
  669. scipy/linalg/basic.py +23 -0
  670. scipy/linalg/blas.py +495 -0
  671. scipy/linalg/cython_blas.cp311-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp311-win_arm64.pyd +0 -0
  673. scipy/linalg/cython_blas.pxd +169 -0
  674. scipy/linalg/cython_blas.pyx +1432 -0
  675. scipy/linalg/cython_lapack.cp311-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp311-win_arm64.pyd +0 -0
  677. scipy/linalg/cython_lapack.pxd +1528 -0
  678. scipy/linalg/cython_lapack.pyx +12045 -0
  679. scipy/linalg/decomp.py +23 -0
  680. scipy/linalg/decomp_cholesky.py +21 -0
  681. scipy/linalg/decomp_lu.py +21 -0
  682. scipy/linalg/decomp_qr.py +20 -0
  683. scipy/linalg/decomp_schur.py +21 -0
  684. scipy/linalg/decomp_svd.py +21 -0
  685. scipy/linalg/interpolative.py +989 -0
  686. scipy/linalg/lapack.py +1081 -0
  687. scipy/linalg/matfuncs.py +23 -0
  688. scipy/linalg/misc.py +21 -0
  689. scipy/linalg/special_matrices.py +22 -0
  690. scipy/linalg/tests/__init__.py +0 -0
  691. scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
  692. scipy/linalg/tests/_cython_examples/meson.build +34 -0
  693. scipy/linalg/tests/data/carex_15_data.npz +0 -0
  694. scipy/linalg/tests/data/carex_18_data.npz +0 -0
  695. scipy/linalg/tests/data/carex_19_data.npz +0 -0
  696. scipy/linalg/tests/data/carex_20_data.npz +0 -0
  697. scipy/linalg/tests/data/carex_6_data.npz +0 -0
  698. scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
  699. scipy/linalg/tests/test_basic.py +2074 -0
  700. scipy/linalg/tests/test_batch.py +588 -0
  701. scipy/linalg/tests/test_blas.py +1127 -0
  702. scipy/linalg/tests/test_cython_blas.py +118 -0
  703. scipy/linalg/tests/test_cython_lapack.py +22 -0
  704. scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
  705. scipy/linalg/tests/test_decomp.py +3189 -0
  706. scipy/linalg/tests/test_decomp_cholesky.py +268 -0
  707. scipy/linalg/tests/test_decomp_cossin.py +314 -0
  708. scipy/linalg/tests/test_decomp_ldl.py +137 -0
  709. scipy/linalg/tests/test_decomp_lu.py +308 -0
  710. scipy/linalg/tests/test_decomp_polar.py +110 -0
  711. scipy/linalg/tests/test_decomp_update.py +1701 -0
  712. scipy/linalg/tests/test_extending.py +46 -0
  713. scipy/linalg/tests/test_fblas.py +607 -0
  714. scipy/linalg/tests/test_interpolative.py +232 -0
  715. scipy/linalg/tests/test_lapack.py +3620 -0
  716. scipy/linalg/tests/test_matfuncs.py +1125 -0
  717. scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
  718. scipy/linalg/tests/test_procrustes.py +214 -0
  719. scipy/linalg/tests/test_sketches.py +118 -0
  720. scipy/linalg/tests/test_solve_toeplitz.py +150 -0
  721. scipy/linalg/tests/test_solvers.py +844 -0
  722. scipy/linalg/tests/test_special_matrices.py +636 -0
  723. scipy/misc/__init__.py +6 -0
  724. scipy/misc/common.py +6 -0
  725. scipy/misc/doccer.py +6 -0
  726. scipy/ndimage/__init__.py +174 -0
  727. scipy/ndimage/_ctest.cp311-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp311-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp311-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp311-win_arm64.pyd +0 -0
  731. scipy/ndimage/_delegators.py +303 -0
  732. scipy/ndimage/_filters.py +2422 -0
  733. scipy/ndimage/_fourier.py +306 -0
  734. scipy/ndimage/_interpolation.py +1033 -0
  735. scipy/ndimage/_measurements.py +1689 -0
  736. scipy/ndimage/_morphology.py +2634 -0
  737. scipy/ndimage/_nd_image.cp311-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp311-win_arm64.pyd +0 -0
  739. scipy/ndimage/_ndimage_api.py +16 -0
  740. scipy/ndimage/_ni_docstrings.py +214 -0
  741. scipy/ndimage/_ni_label.cp311-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp311-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp311-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp311-win_arm64.pyd +0 -0
  746. scipy/ndimage/_support_alternative_backends.py +84 -0
  747. scipy/ndimage/filters.py +27 -0
  748. scipy/ndimage/fourier.py +21 -0
  749. scipy/ndimage/interpolation.py +22 -0
  750. scipy/ndimage/measurements.py +24 -0
  751. scipy/ndimage/morphology.py +27 -0
  752. scipy/ndimage/tests/__init__.py +12 -0
  753. scipy/ndimage/tests/data/label_inputs.txt +21 -0
  754. scipy/ndimage/tests/data/label_results.txt +294 -0
  755. scipy/ndimage/tests/data/label_strels.txt +42 -0
  756. scipy/ndimage/tests/dots.png +0 -0
  757. scipy/ndimage/tests/test_c_api.py +102 -0
  758. scipy/ndimage/tests/test_datatypes.py +67 -0
  759. scipy/ndimage/tests/test_filters.py +3083 -0
  760. scipy/ndimage/tests/test_fourier.py +187 -0
  761. scipy/ndimage/tests/test_interpolation.py +1491 -0
  762. scipy/ndimage/tests/test_measurements.py +1592 -0
  763. scipy/ndimage/tests/test_morphology.py +2950 -0
  764. scipy/ndimage/tests/test_ni_support.py +78 -0
  765. scipy/ndimage/tests/test_splines.py +70 -0
  766. scipy/odr/__init__.py +131 -0
  767. scipy/odr/__odrpack.cp311-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp311-win_arm64.pyd +0 -0
  769. scipy/odr/_add_newdocs.py +34 -0
  770. scipy/odr/_models.py +315 -0
  771. scipy/odr/_odrpack.py +1154 -0
  772. scipy/odr/models.py +20 -0
  773. scipy/odr/odrpack.py +21 -0
  774. scipy/odr/tests/__init__.py +0 -0
  775. scipy/odr/tests/test_odr.py +607 -0
  776. scipy/optimize/__init__.pxd +1 -0
  777. scipy/optimize/__init__.py +460 -0
  778. scipy/optimize/_basinhopping.py +741 -0
  779. scipy/optimize/_bglu_dense.cp311-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp311-win_arm64.pyd +0 -0
  781. scipy/optimize/_bracket.py +706 -0
  782. scipy/optimize/_chandrupatla.py +551 -0
  783. scipy/optimize/_cobyla_py.py +297 -0
  784. scipy/optimize/_cobyqa_py.py +72 -0
  785. scipy/optimize/_constraints.py +598 -0
  786. scipy/optimize/_dcsrch.py +728 -0
  787. scipy/optimize/_differentiable_functions.py +835 -0
  788. scipy/optimize/_differentialevolution.py +1970 -0
  789. scipy/optimize/_direct.cp311-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp311-win_arm64.pyd +0 -0
  791. scipy/optimize/_direct_py.py +280 -0
  792. scipy/optimize/_dual_annealing.py +732 -0
  793. scipy/optimize/_elementwise.py +798 -0
  794. scipy/optimize/_group_columns.cp311-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp311-win_arm64.pyd +0 -0
  796. scipy/optimize/_hessian_update_strategy.py +479 -0
  797. scipy/optimize/_highspy/__init__.py +0 -0
  798. scipy/optimize/_highspy/_core.cp311-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp311-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp311-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp311-win_arm64.pyd +0 -0
  802. scipy/optimize/_highspy/_highs_wrapper.py +338 -0
  803. scipy/optimize/_isotonic.py +157 -0
  804. scipy/optimize/_lbfgsb.cp311-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp311-win_arm64.pyd +0 -0
  806. scipy/optimize/_lbfgsb_py.py +634 -0
  807. scipy/optimize/_linesearch.py +896 -0
  808. scipy/optimize/_linprog.py +733 -0
  809. scipy/optimize/_linprog_doc.py +1434 -0
  810. scipy/optimize/_linprog_highs.py +422 -0
  811. scipy/optimize/_linprog_ip.py +1141 -0
  812. scipy/optimize/_linprog_rs.py +572 -0
  813. scipy/optimize/_linprog_simplex.py +663 -0
  814. scipy/optimize/_linprog_util.py +1521 -0
  815. scipy/optimize/_lsap.cp311-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp311-win_arm64.pyd +0 -0
  817. scipy/optimize/_lsq/__init__.py +5 -0
  818. scipy/optimize/_lsq/bvls.py +183 -0
  819. scipy/optimize/_lsq/common.py +731 -0
  820. scipy/optimize/_lsq/dogbox.py +345 -0
  821. scipy/optimize/_lsq/givens_elimination.cp311-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp311-win_arm64.pyd +0 -0
  823. scipy/optimize/_lsq/least_squares.py +1044 -0
  824. scipy/optimize/_lsq/lsq_linear.py +361 -0
  825. scipy/optimize/_lsq/trf.py +587 -0
  826. scipy/optimize/_lsq/trf_linear.py +249 -0
  827. scipy/optimize/_milp.py +394 -0
  828. scipy/optimize/_minimize.py +1199 -0
  829. scipy/optimize/_minpack.cp311-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp311-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp311-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp311-win_arm64.pyd +0 -0
  834. scipy/optimize/_nnls.py +96 -0
  835. scipy/optimize/_nonlin.py +1634 -0
  836. scipy/optimize/_numdiff.py +963 -0
  837. scipy/optimize/_optimize.py +4169 -0
  838. scipy/optimize/_pava_pybind.cp311-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp311-win_arm64.pyd +0 -0
  840. scipy/optimize/_qap.py +760 -0
  841. scipy/optimize/_remove_redundancy.py +522 -0
  842. scipy/optimize/_root.py +732 -0
  843. scipy/optimize/_root_scalar.py +538 -0
  844. scipy/optimize/_shgo.py +1606 -0
  845. scipy/optimize/_shgo_lib/__init__.py +0 -0
  846. scipy/optimize/_shgo_lib/_complex.py +1225 -0
  847. scipy/optimize/_shgo_lib/_vertex.py +460 -0
  848. scipy/optimize/_slsqp_py.py +603 -0
  849. scipy/optimize/_slsqplib.cp311-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp311-win_arm64.pyd +0 -0
  851. scipy/optimize/_spectral.py +260 -0
  852. scipy/optimize/_tnc.py +438 -0
  853. scipy/optimize/_trlib/__init__.py +12 -0
  854. scipy/optimize/_trlib/_trlib.cp311-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp311-win_arm64.pyd +0 -0
  856. scipy/optimize/_trustregion.py +318 -0
  857. scipy/optimize/_trustregion_constr/__init__.py +6 -0
  858. scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
  859. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
  860. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
  861. scipy/optimize/_trustregion_constr/projections.py +411 -0
  862. scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
  863. scipy/optimize/_trustregion_constr/report.py +49 -0
  864. scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
  865. scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
  866. scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
  867. scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
  868. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
  869. scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
  870. scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
  871. scipy/optimize/_trustregion_dogleg.py +122 -0
  872. scipy/optimize/_trustregion_exact.py +437 -0
  873. scipy/optimize/_trustregion_krylov.py +65 -0
  874. scipy/optimize/_trustregion_ncg.py +126 -0
  875. scipy/optimize/_tstutils.py +972 -0
  876. scipy/optimize/_zeros.cp311-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp311-win_arm64.pyd +0 -0
  878. scipy/optimize/_zeros_py.py +1475 -0
  879. scipy/optimize/cobyla.py +19 -0
  880. scipy/optimize/cython_optimize/__init__.py +133 -0
  881. scipy/optimize/cython_optimize/_zeros.cp311-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp311-win_arm64.pyd +0 -0
  883. scipy/optimize/cython_optimize/_zeros.pxd +33 -0
  884. scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
  885. scipy/optimize/cython_optimize.pxd +11 -0
  886. scipy/optimize/elementwise.py +38 -0
  887. scipy/optimize/lbfgsb.py +23 -0
  888. scipy/optimize/linesearch.py +18 -0
  889. scipy/optimize/minpack.py +27 -0
  890. scipy/optimize/minpack2.py +17 -0
  891. scipy/optimize/moduleTNC.py +19 -0
  892. scipy/optimize/nonlin.py +29 -0
  893. scipy/optimize/optimize.py +40 -0
  894. scipy/optimize/slsqp.py +22 -0
  895. scipy/optimize/tests/__init__.py +0 -0
  896. scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
  897. scipy/optimize/tests/_cython_examples/meson.build +32 -0
  898. scipy/optimize/tests/test__basinhopping.py +535 -0
  899. scipy/optimize/tests/test__differential_evolution.py +1703 -0
  900. scipy/optimize/tests/test__dual_annealing.py +416 -0
  901. scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
  902. scipy/optimize/tests/test__numdiff.py +885 -0
  903. scipy/optimize/tests/test__remove_redundancy.py +228 -0
  904. scipy/optimize/tests/test__root.py +124 -0
  905. scipy/optimize/tests/test__shgo.py +1164 -0
  906. scipy/optimize/tests/test__spectral.py +226 -0
  907. scipy/optimize/tests/test_bracket.py +896 -0
  908. scipy/optimize/tests/test_chandrupatla.py +982 -0
  909. scipy/optimize/tests/test_cobyla.py +195 -0
  910. scipy/optimize/tests/test_cobyqa.py +252 -0
  911. scipy/optimize/tests/test_constraint_conversion.py +286 -0
  912. scipy/optimize/tests/test_constraints.py +255 -0
  913. scipy/optimize/tests/test_cython_optimize.py +92 -0
  914. scipy/optimize/tests/test_differentiable_functions.py +1025 -0
  915. scipy/optimize/tests/test_direct.py +321 -0
  916. scipy/optimize/tests/test_extending.py +28 -0
  917. scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
  918. scipy/optimize/tests/test_isotonic_regression.py +167 -0
  919. scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
  920. scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
  921. scipy/optimize/tests/test_least_squares.py +986 -0
  922. scipy/optimize/tests/test_linear_assignment.py +116 -0
  923. scipy/optimize/tests/test_linesearch.py +328 -0
  924. scipy/optimize/tests/test_linprog.py +2577 -0
  925. scipy/optimize/tests/test_lsq_common.py +297 -0
  926. scipy/optimize/tests/test_lsq_linear.py +287 -0
  927. scipy/optimize/tests/test_milp.py +459 -0
  928. scipy/optimize/tests/test_minimize_constrained.py +845 -0
  929. scipy/optimize/tests/test_minpack.py +1194 -0
  930. scipy/optimize/tests/test_nnls.py +469 -0
  931. scipy/optimize/tests/test_nonlin.py +572 -0
  932. scipy/optimize/tests/test_optimize.py +3344 -0
  933. scipy/optimize/tests/test_quadratic_assignment.py +455 -0
  934. scipy/optimize/tests/test_regression.py +40 -0
  935. scipy/optimize/tests/test_slsqp.py +645 -0
  936. scipy/optimize/tests/test_tnc.py +345 -0
  937. scipy/optimize/tests/test_trustregion.py +110 -0
  938. scipy/optimize/tests/test_trustregion_exact.py +351 -0
  939. scipy/optimize/tests/test_trustregion_krylov.py +170 -0
  940. scipy/optimize/tests/test_zeros.py +998 -0
  941. scipy/optimize/tnc.py +22 -0
  942. scipy/optimize/zeros.py +26 -0
  943. scipy/signal/__init__.py +316 -0
  944. scipy/signal/_arraytools.py +264 -0
  945. scipy/signal/_czt.py +575 -0
  946. scipy/signal/_delegators.py +568 -0
  947. scipy/signal/_filter_design.py +5893 -0
  948. scipy/signal/_fir_filter_design.py +1458 -0
  949. scipy/signal/_lti_conversion.py +534 -0
  950. scipy/signal/_ltisys.py +3546 -0
  951. scipy/signal/_max_len_seq.py +139 -0
  952. scipy/signal/_max_len_seq_inner.cp311-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp311-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp311-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp311-win_arm64.pyd +0 -0
  957. scipy/signal/_polyutils.py +172 -0
  958. scipy/signal/_savitzky_golay.py +357 -0
  959. scipy/signal/_short_time_fft.py +2228 -0
  960. scipy/signal/_signal_api.py +30 -0
  961. scipy/signal/_signaltools.py +5309 -0
  962. scipy/signal/_sigtools.cp311-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp311-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp311-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp311-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp311-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp311-win_arm64.pyd +0 -0
  969. scipy/signal/_spline.pyi +34 -0
  970. scipy/signal/_spline_filters.py +848 -0
  971. scipy/signal/_support_alternative_backends.py +73 -0
  972. scipy/signal/_upfirdn.py +219 -0
  973. scipy/signal/_upfirdn_apply.cp311-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp311-win_arm64.pyd +0 -0
  975. scipy/signal/_waveforms.py +687 -0
  976. scipy/signal/_wavelets.py +29 -0
  977. scipy/signal/bsplines.py +21 -0
  978. scipy/signal/filter_design.py +28 -0
  979. scipy/signal/fir_filter_design.py +21 -0
  980. scipy/signal/lti_conversion.py +20 -0
  981. scipy/signal/ltisys.py +25 -0
  982. scipy/signal/signaltools.py +27 -0
  983. scipy/signal/spectral.py +21 -0
  984. scipy/signal/spline.py +18 -0
  985. scipy/signal/tests/__init__.py +0 -0
  986. scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
  987. scipy/signal/tests/mpsig.py +122 -0
  988. scipy/signal/tests/test_array_tools.py +111 -0
  989. scipy/signal/tests/test_bsplines.py +365 -0
  990. scipy/signal/tests/test_cont2discrete.py +424 -0
  991. scipy/signal/tests/test_czt.py +221 -0
  992. scipy/signal/tests/test_dltisys.py +599 -0
  993. scipy/signal/tests/test_filter_design.py +4744 -0
  994. scipy/signal/tests/test_fir_filter_design.py +851 -0
  995. scipy/signal/tests/test_ltisys.py +1225 -0
  996. scipy/signal/tests/test_max_len_seq.py +71 -0
  997. scipy/signal/tests/test_peak_finding.py +915 -0
  998. scipy/signal/tests/test_result_type.py +51 -0
  999. scipy/signal/tests/test_savitzky_golay.py +363 -0
  1000. scipy/signal/tests/test_short_time_fft.py +1107 -0
  1001. scipy/signal/tests/test_signaltools.py +4735 -0
  1002. scipy/signal/tests/test_spectral.py +2141 -0
  1003. scipy/signal/tests/test_splines.py +427 -0
  1004. scipy/signal/tests/test_upfirdn.py +322 -0
  1005. scipy/signal/tests/test_waveforms.py +400 -0
  1006. scipy/signal/tests/test_wavelets.py +59 -0
  1007. scipy/signal/tests/test_windows.py +987 -0
  1008. scipy/signal/waveforms.py +20 -0
  1009. scipy/signal/wavelets.py +17 -0
  1010. scipy/signal/windows/__init__.py +52 -0
  1011. scipy/signal/windows/_windows.py +2513 -0
  1012. scipy/signal/windows/windows.py +23 -0
  1013. scipy/sparse/__init__.py +350 -0
  1014. scipy/sparse/_base.py +1613 -0
  1015. scipy/sparse/_bsr.py +880 -0
  1016. scipy/sparse/_compressed.py +1328 -0
  1017. scipy/sparse/_construct.py +1454 -0
  1018. scipy/sparse/_coo.py +1581 -0
  1019. scipy/sparse/_csc.py +367 -0
  1020. scipy/sparse/_csparsetools.cp311-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp311-win_arm64.pyd +0 -0
  1022. scipy/sparse/_csr.py +558 -0
  1023. scipy/sparse/_data.py +569 -0
  1024. scipy/sparse/_dia.py +677 -0
  1025. scipy/sparse/_dok.py +669 -0
  1026. scipy/sparse/_extract.py +178 -0
  1027. scipy/sparse/_index.py +444 -0
  1028. scipy/sparse/_lil.py +632 -0
  1029. scipy/sparse/_matrix.py +169 -0
  1030. scipy/sparse/_matrix_io.py +167 -0
  1031. scipy/sparse/_sparsetools.cp311-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp311-win_arm64.pyd +0 -0
  1033. scipy/sparse/_spfuncs.py +76 -0
  1034. scipy/sparse/_sputils.py +632 -0
  1035. scipy/sparse/base.py +24 -0
  1036. scipy/sparse/bsr.py +22 -0
  1037. scipy/sparse/compressed.py +20 -0
  1038. scipy/sparse/construct.py +38 -0
  1039. scipy/sparse/coo.py +23 -0
  1040. scipy/sparse/csc.py +22 -0
  1041. scipy/sparse/csgraph/__init__.py +210 -0
  1042. scipy/sparse/csgraph/_flow.cp311-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp311-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp311-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp311-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp311-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp311-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp311-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp311-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp311-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp311-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp311-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp311-win_arm64.pyd +0 -0
  1057. scipy/sparse/csgraph/_validation.py +66 -0
  1058. scipy/sparse/csgraph/tests/__init__.py +0 -0
  1059. scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
  1060. scipy/sparse/csgraph/tests/test_conversions.py +61 -0
  1061. scipy/sparse/csgraph/tests/test_flow.py +209 -0
  1062. scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
  1063. scipy/sparse/csgraph/tests/test_matching.py +307 -0
  1064. scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
  1065. scipy/sparse/csgraph/tests/test_reordering.py +70 -0
  1066. scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
  1067. scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
  1068. scipy/sparse/csgraph/tests/test_traversal.py +148 -0
  1069. scipy/sparse/csr.py +22 -0
  1070. scipy/sparse/data.py +18 -0
  1071. scipy/sparse/dia.py +22 -0
  1072. scipy/sparse/dok.py +22 -0
  1073. scipy/sparse/extract.py +23 -0
  1074. scipy/sparse/lil.py +22 -0
  1075. scipy/sparse/linalg/__init__.py +148 -0
  1076. scipy/sparse/linalg/_dsolve/__init__.py +71 -0
  1077. scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
  1078. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_arm64.pyd +0 -0
  1080. scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
  1081. scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
  1082. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
  1083. scipy/sparse/linalg/_eigen/__init__.py +22 -0
  1084. scipy/sparse/linalg/_eigen/_svds.py +540 -0
  1085. scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
  1086. scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
  1087. scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
  1088. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_arm64.pyd +0 -0
  1090. scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
  1091. scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
  1092. scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
  1093. scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
  1094. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
  1095. scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
  1096. scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
  1097. scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
  1098. scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
  1099. scipy/sparse/linalg/_expm_multiply.py +816 -0
  1100. scipy/sparse/linalg/_interface.py +920 -0
  1101. scipy/sparse/linalg/_isolve/__init__.py +20 -0
  1102. scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
  1103. scipy/sparse/linalg/_isolve/iterative.py +1051 -0
  1104. scipy/sparse/linalg/_isolve/lgmres.py +230 -0
  1105. scipy/sparse/linalg/_isolve/lsmr.py +486 -0
  1106. scipy/sparse/linalg/_isolve/lsqr.py +589 -0
  1107. scipy/sparse/linalg/_isolve/minres.py +372 -0
  1108. scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
  1109. scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
  1110. scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
  1111. scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
  1112. scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
  1113. scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
  1114. scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
  1115. scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
  1116. scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
  1117. scipy/sparse/linalg/_isolve/utils.py +121 -0
  1118. scipy/sparse/linalg/_matfuncs.py +940 -0
  1119. scipy/sparse/linalg/_norm.py +195 -0
  1120. scipy/sparse/linalg/_onenormest.py +467 -0
  1121. scipy/sparse/linalg/_propack/_cpropack.cp311-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp311-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp311-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp311-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp311-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp311-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp311-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp311-win_arm64.pyd +0 -0
  1129. scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
  1130. scipy/sparse/linalg/_svdp.py +309 -0
  1131. scipy/sparse/linalg/dsolve.py +22 -0
  1132. scipy/sparse/linalg/eigen.py +21 -0
  1133. scipy/sparse/linalg/interface.py +20 -0
  1134. scipy/sparse/linalg/isolve.py +22 -0
  1135. scipy/sparse/linalg/matfuncs.py +18 -0
  1136. scipy/sparse/linalg/tests/__init__.py +0 -0
  1137. scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
  1138. scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
  1139. scipy/sparse/linalg/tests/test_interface.py +561 -0
  1140. scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
  1141. scipy/sparse/linalg/tests/test_norm.py +154 -0
  1142. scipy/sparse/linalg/tests/test_onenormest.py +252 -0
  1143. scipy/sparse/linalg/tests/test_propack.py +165 -0
  1144. scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
  1145. scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
  1146. scipy/sparse/sparsetools.py +17 -0
  1147. scipy/sparse/spfuncs.py +17 -0
  1148. scipy/sparse/sputils.py +17 -0
  1149. scipy/sparse/tests/__init__.py +0 -0
  1150. scipy/sparse/tests/data/csc_py2.npz +0 -0
  1151. scipy/sparse/tests/data/csc_py3.npz +0 -0
  1152. scipy/sparse/tests/test_arithmetic1d.py +341 -0
  1153. scipy/sparse/tests/test_array_api.py +561 -0
  1154. scipy/sparse/tests/test_base.py +5870 -0
  1155. scipy/sparse/tests/test_common1d.py +447 -0
  1156. scipy/sparse/tests/test_construct.py +872 -0
  1157. scipy/sparse/tests/test_coo.py +1119 -0
  1158. scipy/sparse/tests/test_csc.py +98 -0
  1159. scipy/sparse/tests/test_csr.py +214 -0
  1160. scipy/sparse/tests/test_dok.py +209 -0
  1161. scipy/sparse/tests/test_extract.py +51 -0
  1162. scipy/sparse/tests/test_indexing1d.py +603 -0
  1163. scipy/sparse/tests/test_matrix_io.py +109 -0
  1164. scipy/sparse/tests/test_minmax1d.py +128 -0
  1165. scipy/sparse/tests/test_sparsetools.py +344 -0
  1166. scipy/sparse/tests/test_spfuncs.py +97 -0
  1167. scipy/sparse/tests/test_sputils.py +424 -0
  1168. scipy/spatial/__init__.py +129 -0
  1169. scipy/spatial/_ckdtree.cp311-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp311-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp311-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp311-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp311-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp311-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp311-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp311-win_arm64.pyd +0 -0
  1178. scipy/spatial/_kdtree.py +920 -0
  1179. scipy/spatial/_plotutils.py +274 -0
  1180. scipy/spatial/_procrustes.py +132 -0
  1181. scipy/spatial/_qhull.cp311-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp311-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp311-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp311-win_arm64.pyd +0 -0
  1187. scipy/spatial/_voronoi.pyi +4 -0
  1188. scipy/spatial/ckdtree.py +18 -0
  1189. scipy/spatial/distance.py +3147 -0
  1190. scipy/spatial/distance.pyi +210 -0
  1191. scipy/spatial/kdtree.py +25 -0
  1192. scipy/spatial/qhull.py +25 -0
  1193. scipy/spatial/qhull_src/COPYING_QHULL.txt +39 -0
  1194. scipy/spatial/tests/__init__.py +0 -0
  1195. scipy/spatial/tests/data/cdist-X1.txt +10 -0
  1196. scipy/spatial/tests/data/cdist-X2.txt +20 -0
  1197. scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
  1198. scipy/spatial/tests/data/iris.txt +150 -0
  1199. scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
  1200. scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
  1201. scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
  1202. scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
  1203. scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
  1204. scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
  1205. scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
  1206. scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
  1207. scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
  1208. scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
  1209. scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
  1210. scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
  1211. scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
  1212. scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
  1213. scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
  1214. scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
  1215. scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
  1216. scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
  1217. scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
  1218. scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
  1219. scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
  1220. scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
  1221. scipy/spatial/tests/data/random-bool-data.txt +100 -0
  1222. scipy/spatial/tests/data/random-double-data.txt +100 -0
  1223. scipy/spatial/tests/data/random-int-data.txt +100 -0
  1224. scipy/spatial/tests/data/random-uint-data.txt +100 -0
  1225. scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
  1226. scipy/spatial/tests/test__plotutils.py +91 -0
  1227. scipy/spatial/tests/test__procrustes.py +116 -0
  1228. scipy/spatial/tests/test_distance.py +2389 -0
  1229. scipy/spatial/tests/test_hausdorff.py +199 -0
  1230. scipy/spatial/tests/test_kdtree.py +1536 -0
  1231. scipy/spatial/tests/test_qhull.py +1313 -0
  1232. scipy/spatial/tests/test_slerp.py +417 -0
  1233. scipy/spatial/tests/test_spherical_voronoi.py +358 -0
  1234. scipy/spatial/transform/__init__.py +31 -0
  1235. scipy/spatial/transform/_rigid_transform.cp311-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp311-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp311-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp311-win_arm64.pyd +0 -0
  1239. scipy/spatial/transform/_rotation_groups.py +140 -0
  1240. scipy/spatial/transform/_rotation_spline.py +460 -0
  1241. scipy/spatial/transform/rotation.py +21 -0
  1242. scipy/spatial/transform/tests/__init__.py +0 -0
  1243. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  1244. scipy/spatial/transform/tests/test_rotation.py +2569 -0
  1245. scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
  1246. scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
  1247. scipy/special/__init__.pxd +1 -0
  1248. scipy/special/__init__.py +841 -0
  1249. scipy/special/_add_newdocs.py +9961 -0
  1250. scipy/special/_basic.py +3576 -0
  1251. scipy/special/_comb.cp311-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp311-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp311-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp311-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp311-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp311-win_arm64.pyd +0 -0
  1258. scipy/special/_input_validation.py +17 -0
  1259. scipy/special/_lambertw.py +149 -0
  1260. scipy/special/_logsumexp.py +426 -0
  1261. scipy/special/_mptestutils.py +453 -0
  1262. scipy/special/_multiufuncs.py +610 -0
  1263. scipy/special/_orthogonal.py +2592 -0
  1264. scipy/special/_orthogonal.pyi +330 -0
  1265. scipy/special/_precompute/__init__.py +0 -0
  1266. scipy/special/_precompute/cosine_cdf.py +17 -0
  1267. scipy/special/_precompute/expn_asy.py +54 -0
  1268. scipy/special/_precompute/gammainc_asy.py +116 -0
  1269. scipy/special/_precompute/gammainc_data.py +124 -0
  1270. scipy/special/_precompute/hyp2f1_data.py +484 -0
  1271. scipy/special/_precompute/lambertw.py +68 -0
  1272. scipy/special/_precompute/loggamma.py +43 -0
  1273. scipy/special/_precompute/struve_convergence.py +131 -0
  1274. scipy/special/_precompute/utils.py +38 -0
  1275. scipy/special/_precompute/wright_bessel.py +342 -0
  1276. scipy/special/_precompute/wright_bessel_data.py +152 -0
  1277. scipy/special/_precompute/wrightomega.py +41 -0
  1278. scipy/special/_precompute/zetac.py +27 -0
  1279. scipy/special/_sf_error.py +15 -0
  1280. scipy/special/_specfun.cp311-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp311-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp311-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp311-win_arm64.pyd +0 -0
  1284. scipy/special/_spfun_stats.py +106 -0
  1285. scipy/special/_spherical_bessel.py +397 -0
  1286. scipy/special/_support_alternative_backends.py +295 -0
  1287. scipy/special/_test_internal.cp311-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp311-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp311-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp311-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp311-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp311-win_arm64.pyd +0 -0
  1297. scipy/special/_ufuncs_cxx.pxd +142 -0
  1298. scipy/special/_ufuncs_cxx.pyx +427 -0
  1299. scipy/special/_ufuncs_cxx_defs.h +147 -0
  1300. scipy/special/_ufuncs_defs.h +57 -0
  1301. scipy/special/add_newdocs.py +15 -0
  1302. scipy/special/basic.py +87 -0
  1303. scipy/special/cython_special.cp311-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp311-win_arm64.pyd +0 -0
  1305. scipy/special/cython_special.pxd +259 -0
  1306. scipy/special/cython_special.pyi +3 -0
  1307. scipy/special/orthogonal.py +45 -0
  1308. scipy/special/sf_error.py +20 -0
  1309. scipy/special/specfun.py +24 -0
  1310. scipy/special/spfun_stats.py +17 -0
  1311. scipy/special/tests/__init__.py +0 -0
  1312. scipy/special/tests/_cython_examples/extending.pyx +12 -0
  1313. scipy/special/tests/_cython_examples/meson.build +34 -0
  1314. scipy/special/tests/data/__init__.py +0 -0
  1315. scipy/special/tests/data/boost.npz +0 -0
  1316. scipy/special/tests/data/gsl.npz +0 -0
  1317. scipy/special/tests/data/local.npz +0 -0
  1318. scipy/special/tests/test_basic.py +4815 -0
  1319. scipy/special/tests/test_bdtr.py +112 -0
  1320. scipy/special/tests/test_boost_ufuncs.py +64 -0
  1321. scipy/special/tests/test_boxcox.py +125 -0
  1322. scipy/special/tests/test_cdflib.py +712 -0
  1323. scipy/special/tests/test_cdft_asymptotic.py +49 -0
  1324. scipy/special/tests/test_cephes_intp_cast.py +29 -0
  1325. scipy/special/tests/test_cosine_distr.py +83 -0
  1326. scipy/special/tests/test_cython_special.py +363 -0
  1327. scipy/special/tests/test_data.py +719 -0
  1328. scipy/special/tests/test_dd.py +42 -0
  1329. scipy/special/tests/test_digamma.py +45 -0
  1330. scipy/special/tests/test_ellip_harm.py +278 -0
  1331. scipy/special/tests/test_erfinv.py +89 -0
  1332. scipy/special/tests/test_exponential_integrals.py +118 -0
  1333. scipy/special/tests/test_extending.py +28 -0
  1334. scipy/special/tests/test_faddeeva.py +85 -0
  1335. scipy/special/tests/test_gamma.py +12 -0
  1336. scipy/special/tests/test_gammainc.py +152 -0
  1337. scipy/special/tests/test_hyp2f1.py +2566 -0
  1338. scipy/special/tests/test_hypergeometric.py +234 -0
  1339. scipy/special/tests/test_iv_ratio.py +249 -0
  1340. scipy/special/tests/test_kolmogorov.py +491 -0
  1341. scipy/special/tests/test_lambertw.py +109 -0
  1342. scipy/special/tests/test_legendre.py +1518 -0
  1343. scipy/special/tests/test_log1mexp.py +85 -0
  1344. scipy/special/tests/test_loggamma.py +70 -0
  1345. scipy/special/tests/test_logit.py +162 -0
  1346. scipy/special/tests/test_logsumexp.py +469 -0
  1347. scipy/special/tests/test_mpmath.py +2293 -0
  1348. scipy/special/tests/test_nan_inputs.py +65 -0
  1349. scipy/special/tests/test_ndtr.py +77 -0
  1350. scipy/special/tests/test_ndtri_exp.py +94 -0
  1351. scipy/special/tests/test_orthogonal.py +821 -0
  1352. scipy/special/tests/test_orthogonal_eval.py +275 -0
  1353. scipy/special/tests/test_owens_t.py +53 -0
  1354. scipy/special/tests/test_pcf.py +24 -0
  1355. scipy/special/tests/test_pdtr.py +48 -0
  1356. scipy/special/tests/test_powm1.py +65 -0
  1357. scipy/special/tests/test_precompute_expn_asy.py +24 -0
  1358. scipy/special/tests/test_precompute_gammainc.py +108 -0
  1359. scipy/special/tests/test_precompute_utils.py +36 -0
  1360. scipy/special/tests/test_round.py +18 -0
  1361. scipy/special/tests/test_sf_error.py +146 -0
  1362. scipy/special/tests/test_sici.py +36 -0
  1363. scipy/special/tests/test_specfun.py +48 -0
  1364. scipy/special/tests/test_spence.py +32 -0
  1365. scipy/special/tests/test_spfun_stats.py +61 -0
  1366. scipy/special/tests/test_sph_harm.py +85 -0
  1367. scipy/special/tests/test_spherical_bessel.py +400 -0
  1368. scipy/special/tests/test_support_alternative_backends.py +248 -0
  1369. scipy/special/tests/test_trig.py +72 -0
  1370. scipy/special/tests/test_ufunc_signatures.py +46 -0
  1371. scipy/special/tests/test_wright_bessel.py +205 -0
  1372. scipy/special/tests/test_wrightomega.py +117 -0
  1373. scipy/special/tests/test_zeta.py +301 -0
  1374. scipy/stats/__init__.py +670 -0
  1375. scipy/stats/_ansari_swilk_statistics.cp311-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp311-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp311-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp311-win_arm64.pyd +0 -0
  1380. scipy/stats/_biasedurn.pxd +27 -0
  1381. scipy/stats/_binned_statistic.py +795 -0
  1382. scipy/stats/_binomtest.py +375 -0
  1383. scipy/stats/_bws_test.py +177 -0
  1384. scipy/stats/_censored_data.py +459 -0
  1385. scipy/stats/_common.py +5 -0
  1386. scipy/stats/_constants.py +42 -0
  1387. scipy/stats/_continued_fraction.py +387 -0
  1388. scipy/stats/_continuous_distns.py +12486 -0
  1389. scipy/stats/_correlation.py +210 -0
  1390. scipy/stats/_covariance.py +636 -0
  1391. scipy/stats/_crosstab.py +204 -0
  1392. scipy/stats/_discrete_distns.py +2098 -0
  1393. scipy/stats/_distn_infrastructure.py +4201 -0
  1394. scipy/stats/_distr_params.py +299 -0
  1395. scipy/stats/_distribution_infrastructure.py +5750 -0
  1396. scipy/stats/_entropy.py +428 -0
  1397. scipy/stats/_finite_differences.py +145 -0
  1398. scipy/stats/_fit.py +1351 -0
  1399. scipy/stats/_hypotests.py +2060 -0
  1400. scipy/stats/_kde.py +732 -0
  1401. scipy/stats/_ksstats.py +600 -0
  1402. scipy/stats/_levy_stable/__init__.py +1231 -0
  1403. scipy/stats/_levy_stable/levyst.cp311-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp311-win_arm64.pyd +0 -0
  1405. scipy/stats/_mannwhitneyu.py +492 -0
  1406. scipy/stats/_mgc.py +550 -0
  1407. scipy/stats/_morestats.py +4626 -0
  1408. scipy/stats/_mstats_basic.py +3658 -0
  1409. scipy/stats/_mstats_extras.py +521 -0
  1410. scipy/stats/_multicomp.py +449 -0
  1411. scipy/stats/_multivariate.py +7281 -0
  1412. scipy/stats/_new_distributions.py +452 -0
  1413. scipy/stats/_odds_ratio.py +466 -0
  1414. scipy/stats/_page_trend_test.py +486 -0
  1415. scipy/stats/_probability_distribution.py +1964 -0
  1416. scipy/stats/_qmc.py +2956 -0
  1417. scipy/stats/_qmc_cy.cp311-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp311-win_arm64.pyd +0 -0
  1419. scipy/stats/_qmc_cy.pyi +54 -0
  1420. scipy/stats/_qmvnt.py +454 -0
  1421. scipy/stats/_qmvnt_cy.cp311-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp311-win_arm64.pyd +0 -0
  1423. scipy/stats/_quantile.py +335 -0
  1424. scipy/stats/_rcont/__init__.py +4 -0
  1425. scipy/stats/_rcont/rcont.cp311-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp311-win_arm64.pyd +0 -0
  1427. scipy/stats/_relative_risk.py +263 -0
  1428. scipy/stats/_resampling.py +2352 -0
  1429. scipy/stats/_result_classes.py +40 -0
  1430. scipy/stats/_sampling.py +1314 -0
  1431. scipy/stats/_sensitivity_analysis.py +713 -0
  1432. scipy/stats/_sobol.cp311-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp311-win_arm64.pyd +0 -0
  1434. scipy/stats/_sobol.pyi +54 -0
  1435. scipy/stats/_sobol_direction_numbers.npz +0 -0
  1436. scipy/stats/_stats.cp311-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp311-win_arm64.pyd +0 -0
  1438. scipy/stats/_stats.pxd +10 -0
  1439. scipy/stats/_stats_mstats_common.py +322 -0
  1440. scipy/stats/_stats_py.py +11089 -0
  1441. scipy/stats/_stats_pythran.cp311-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp311-win_arm64.pyd +0 -0
  1443. scipy/stats/_survival.py +683 -0
  1444. scipy/stats/_tukeylambda_stats.py +199 -0
  1445. scipy/stats/_unuran/__init__.py +0 -0
  1446. scipy/stats/_unuran/unuran_wrapper.cp311-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp311-win_arm64.pyd +0 -0
  1448. scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
  1449. scipy/stats/_variation.py +126 -0
  1450. scipy/stats/_warnings_errors.py +38 -0
  1451. scipy/stats/_wilcoxon.py +265 -0
  1452. scipy/stats/biasedurn.py +16 -0
  1453. scipy/stats/contingency.py +521 -0
  1454. scipy/stats/distributions.py +24 -0
  1455. scipy/stats/kde.py +18 -0
  1456. scipy/stats/morestats.py +27 -0
  1457. scipy/stats/mstats.py +140 -0
  1458. scipy/stats/mstats_basic.py +42 -0
  1459. scipy/stats/mstats_extras.py +25 -0
  1460. scipy/stats/mvn.py +17 -0
  1461. scipy/stats/qmc.py +236 -0
  1462. scipy/stats/sampling.py +73 -0
  1463. scipy/stats/stats.py +41 -0
  1464. scipy/stats/tests/__init__.py +0 -0
  1465. scipy/stats/tests/common_tests.py +356 -0
  1466. scipy/stats/tests/data/_mvt.py +171 -0
  1467. scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
  1468. scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
  1469. scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
  1470. scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
  1471. scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
  1472. scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
  1473. scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
  1474. scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
  1475. scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
  1476. scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
  1477. scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
  1478. scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
  1479. scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
  1480. scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
  1481. scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
  1482. scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
  1483. scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
  1484. scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
  1485. scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
  1486. scipy/stats/tests/test_axis_nan_policy.py +1388 -0
  1487. scipy/stats/tests/test_binned_statistic.py +568 -0
  1488. scipy/stats/tests/test_censored_data.py +152 -0
  1489. scipy/stats/tests/test_contingency.py +294 -0
  1490. scipy/stats/tests/test_continued_fraction.py +173 -0
  1491. scipy/stats/tests/test_continuous.py +2198 -0
  1492. scipy/stats/tests/test_continuous_basic.py +1053 -0
  1493. scipy/stats/tests/test_continuous_fit_censored.py +683 -0
  1494. scipy/stats/tests/test_correlation.py +80 -0
  1495. scipy/stats/tests/test_crosstab.py +115 -0
  1496. scipy/stats/tests/test_discrete_basic.py +580 -0
  1497. scipy/stats/tests/test_discrete_distns.py +700 -0
  1498. scipy/stats/tests/test_distributions.py +10413 -0
  1499. scipy/stats/tests/test_entropy.py +322 -0
  1500. scipy/stats/tests/test_fast_gen_inversion.py +435 -0
  1501. scipy/stats/tests/test_fit.py +1090 -0
  1502. scipy/stats/tests/test_hypotests.py +1991 -0
  1503. scipy/stats/tests/test_kdeoth.py +676 -0
  1504. scipy/stats/tests/test_marray.py +289 -0
  1505. scipy/stats/tests/test_mgc.py +217 -0
  1506. scipy/stats/tests/test_morestats.py +3259 -0
  1507. scipy/stats/tests/test_mstats_basic.py +2071 -0
  1508. scipy/stats/tests/test_mstats_extras.py +172 -0
  1509. scipy/stats/tests/test_multicomp.py +405 -0
  1510. scipy/stats/tests/test_multivariate.py +4381 -0
  1511. scipy/stats/tests/test_odds_ratio.py +148 -0
  1512. scipy/stats/tests/test_qmc.py +1492 -0
  1513. scipy/stats/tests/test_quantile.py +199 -0
  1514. scipy/stats/tests/test_rank.py +345 -0
  1515. scipy/stats/tests/test_relative_risk.py +95 -0
  1516. scipy/stats/tests/test_resampling.py +2000 -0
  1517. scipy/stats/tests/test_sampling.py +1450 -0
  1518. scipy/stats/tests/test_sensitivity_analysis.py +310 -0
  1519. scipy/stats/tests/test_stats.py +9707 -0
  1520. scipy/stats/tests/test_survival.py +466 -0
  1521. scipy/stats/tests/test_tukeylambda_stats.py +85 -0
  1522. scipy/stats/tests/test_variation.py +216 -0
  1523. scipy/version.py +12 -0
  1524. scipy-1.16.2.dist-info/DELVEWHEEL +2 -0
  1525. scipy-1.16.2.dist-info/LICENSE.txt +912 -0
  1526. scipy-1.16.2.dist-info/METADATA +1061 -0
  1527. scipy-1.16.2.dist-info/RECORD +1530 -0
  1528. scipy-1.16.2.dist-info/WHEEL +4 -0
  1529. scipy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
  1530. scipy.libs/scipy_openblas-f3ac85b1f412f7e86514c923dc4058d1.dll +0 -0
@@ -0,0 +1,1336 @@
1
+ import numpy as np
2
+ import numpy.typing as npt
3
+ import math
4
+ import warnings
5
+ from collections import namedtuple
6
+ from collections.abc import Callable
7
+
8
+ from scipy.special import roots_legendre
9
+ from scipy.special import gammaln, logsumexp
10
+ from scipy._lib._util import _rng_spawn
11
+ from scipy._lib._array_api import _asarray, array_namespace, xp_result_type
12
+
13
+
14
+ __all__ = ['fixed_quad', 'romb',
15
+ 'trapezoid', 'simpson',
16
+ 'cumulative_trapezoid', 'newton_cotes',
17
+ 'qmc_quad', 'cumulative_simpson']
18
+
19
+
20
+ def trapezoid(y, x=None, dx=1.0, axis=-1):
21
+ r"""
22
+ Integrate along the given axis using the composite trapezoidal rule.
23
+
24
+ If `x` is provided, the integration happens in sequence along its
25
+ elements - they are not sorted.
26
+
27
+ Integrate `y` (`x`) along each 1d slice on the given axis, compute
28
+ :math:`\int y(x) dx`.
29
+ When `x` is specified, this integrates along the parametric curve,
30
+ computing :math:`\int_t y(t) dt =
31
+ \int_t y(t) \left.\frac{dx}{dt}\right|_{x=x(t)} dt`.
32
+
33
+ Parameters
34
+ ----------
35
+ y : array_like
36
+ Input array to integrate.
37
+ x : array_like, optional
38
+ The sample points corresponding to the `y` values. If `x` is None,
39
+ the sample points are assumed to be evenly spaced `dx` apart. The
40
+ default is None.
41
+ dx : scalar, optional
42
+ The spacing between sample points when `x` is None. The default is 1.
43
+ axis : int, optional
44
+ The axis along which to integrate. The default is the last axis.
45
+
46
+ Returns
47
+ -------
48
+ trapezoid : float or ndarray
49
+ Definite integral of `y` = n-dimensional array as approximated along
50
+ a single axis by the trapezoidal rule. If `y` is a 1-dimensional array,
51
+ then the result is a float. If `n` is greater than 1, then the result
52
+ is an `n`-1 dimensional array.
53
+
54
+ See Also
55
+ --------
56
+ cumulative_trapezoid, simpson, romb
57
+
58
+ Notes
59
+ -----
60
+ Image [2]_ illustrates trapezoidal rule -- y-axis locations of points
61
+ will be taken from `y` array, by default x-axis distances between
62
+ points will be 1.0, alternatively they can be provided with `x` array
63
+ or with `dx` scalar. Return value will be equal to combined area under
64
+ the red lines.
65
+
66
+ References
67
+ ----------
68
+ .. [1] Wikipedia page: https://en.wikipedia.org/wiki/Trapezoidal_rule
69
+
70
+ .. [2] Illustration image:
71
+ https://en.wikipedia.org/wiki/File:Composite_trapezoidal_rule_illustration.png
72
+
73
+ Examples
74
+ --------
75
+ Use the trapezoidal rule on evenly spaced points:
76
+
77
+ >>> import numpy as np
78
+ >>> from scipy import integrate
79
+ >>> integrate.trapezoid([1, 2, 3])
80
+ 4.0
81
+
82
+ The spacing between sample points can be selected by either the
83
+ ``x`` or ``dx`` arguments:
84
+
85
+ >>> integrate.trapezoid([1, 2, 3], x=[4, 6, 8])
86
+ 8.0
87
+ >>> integrate.trapezoid([1, 2, 3], dx=2)
88
+ 8.0
89
+
90
+ Using a decreasing ``x`` corresponds to integrating in reverse:
91
+
92
+ >>> integrate.trapezoid([1, 2, 3], x=[8, 6, 4])
93
+ -8.0
94
+
95
+ More generally ``x`` is used to integrate along a parametric curve. We can
96
+ estimate the integral :math:`\int_0^1 x^2 = 1/3` using:
97
+
98
+ >>> x = np.linspace(0, 1, num=50)
99
+ >>> y = x**2
100
+ >>> integrate.trapezoid(y, x)
101
+ 0.33340274885464394
102
+
103
+ Or estimate the area of a circle, noting we repeat the sample which closes
104
+ the curve:
105
+
106
+ >>> theta = np.linspace(0, 2 * np.pi, num=1000, endpoint=True)
107
+ >>> integrate.trapezoid(np.cos(theta), x=np.sin(theta))
108
+ 3.141571941375841
109
+
110
+ ``trapezoid`` can be applied along a specified axis to do multiple
111
+ computations in one call:
112
+
113
+ >>> a = np.arange(6).reshape(2, 3)
114
+ >>> a
115
+ array([[0, 1, 2],
116
+ [3, 4, 5]])
117
+ >>> integrate.trapezoid(a, axis=0)
118
+ array([1.5, 2.5, 3.5])
119
+ >>> integrate.trapezoid(a, axis=1)
120
+ array([2., 8.])
121
+ """
122
+ xp = array_namespace(y)
123
+ y = _asarray(y, xp=xp, subok=True)
124
+ # Cannot just use the broadcasted arrays that are returned
125
+ # because trapezoid does not follow normal broadcasting rules
126
+ # cf. https://github.com/scipy/scipy/pull/21524#issuecomment-2354105942
127
+ result_dtype = xp_result_type(y, force_floating=True, xp=xp)
128
+ nd = y.ndim
129
+ slice1 = [slice(None)]*nd
130
+ slice2 = [slice(None)]*nd
131
+ slice1[axis] = slice(1, None)
132
+ slice2[axis] = slice(None, -1)
133
+ if x is None:
134
+ d = dx
135
+ else:
136
+ x = _asarray(x, xp=xp, subok=True)
137
+ if x.ndim == 1:
138
+ d = x[1:] - x[:-1]
139
+ # make d broadcastable to y
140
+ slice3 = [None] * nd
141
+ slice3[axis] = slice(None)
142
+ d = d[tuple(slice3)]
143
+ else:
144
+ # if x is n-D it should be broadcastable to y
145
+ x = xp.broadcast_to(x, y.shape)
146
+ d = x[tuple(slice1)] - x[tuple(slice2)]
147
+ try:
148
+ ret = xp.sum(
149
+ d * (y[tuple(slice1)] + y[tuple(slice2)]) / 2.0,
150
+ axis=axis, dtype=result_dtype
151
+ )
152
+ except ValueError:
153
+ # Operations didn't work, cast to ndarray
154
+ d = xp.asarray(d)
155
+ y = xp.asarray(y)
156
+ ret = xp.sum(
157
+ d * (y[tuple(slice1)] + y[tuple(slice2)]) / 2.0,
158
+ axis=axis, dtype=result_dtype
159
+ )
160
+ return ret
161
+
162
+
163
+ def _cached_roots_legendre(n):
164
+ """
165
+ Cache roots_legendre results to speed up calls of the fixed_quad
166
+ function.
167
+ """
168
+ if n in _cached_roots_legendre.cache:
169
+ return _cached_roots_legendre.cache[n]
170
+
171
+ _cached_roots_legendre.cache[n] = roots_legendre(n)
172
+ return _cached_roots_legendre.cache[n]
173
+
174
+
175
+ _cached_roots_legendre.cache = dict()
176
+
177
+
178
+ def fixed_quad(func, a, b, args=(), n=5):
179
+ """
180
+ Compute a definite integral using fixed-order Gaussian quadrature.
181
+
182
+ Integrate `func` from `a` to `b` using Gaussian quadrature of
183
+ order `n`.
184
+
185
+ Parameters
186
+ ----------
187
+ func : callable
188
+ A Python function or method to integrate (must accept vector inputs).
189
+ If integrating a vector-valued function, the returned array must have
190
+ shape ``(..., len(x))``.
191
+ a : float
192
+ Lower limit of integration.
193
+ b : float
194
+ Upper limit of integration.
195
+ args : tuple, optional
196
+ Extra arguments to pass to function, if any.
197
+ n : int, optional
198
+ Order of quadrature integration. Default is 5.
199
+
200
+ Returns
201
+ -------
202
+ val : float
203
+ Gaussian quadrature approximation to the integral
204
+ none : None
205
+ Statically returned value of None
206
+
207
+ See Also
208
+ --------
209
+ quad : adaptive quadrature using QUADPACK
210
+ dblquad : double integrals
211
+ tplquad : triple integrals
212
+ romb : integrators for sampled data
213
+ simpson : integrators for sampled data
214
+ cumulative_trapezoid : cumulative integration for sampled data
215
+
216
+ Examples
217
+ --------
218
+ >>> from scipy import integrate
219
+ >>> import numpy as np
220
+ >>> f = lambda x: x**8
221
+ >>> integrate.fixed_quad(f, 0.0, 1.0, n=4)
222
+ (0.1110884353741496, None)
223
+ >>> integrate.fixed_quad(f, 0.0, 1.0, n=5)
224
+ (0.11111111111111102, None)
225
+ >>> print(1/9.0) # analytical result
226
+ 0.1111111111111111
227
+
228
+ >>> integrate.fixed_quad(np.cos, 0.0, np.pi/2, n=4)
229
+ (0.9999999771971152, None)
230
+ >>> integrate.fixed_quad(np.cos, 0.0, np.pi/2, n=5)
231
+ (1.000000000039565, None)
232
+ >>> np.sin(np.pi/2)-np.sin(0) # analytical result
233
+ 1.0
234
+
235
+ """
236
+ x, w = _cached_roots_legendre(n)
237
+ x = np.real(x)
238
+ if np.isinf(a) or np.isinf(b):
239
+ raise ValueError("Gaussian quadrature is only available for "
240
+ "finite limits.")
241
+ y = (b-a)*(x+1)/2.0 + a
242
+ return (b-a)/2.0 * np.sum(w*func(y, *args), axis=-1), None
243
+
244
+
245
+ def tupleset(t, i, value):
246
+ l = list(t)
247
+ l[i] = value
248
+ return tuple(l)
249
+
250
+
251
+ def cumulative_trapezoid(y, x=None, dx=1.0, axis=-1, initial=None):
252
+ """
253
+ Cumulatively integrate y(x) using the composite trapezoidal rule.
254
+
255
+ Parameters
256
+ ----------
257
+ y : array_like
258
+ Values to integrate.
259
+ x : array_like, optional
260
+ The coordinate to integrate along. If None (default), use spacing `dx`
261
+ between consecutive elements in `y`.
262
+ dx : float, optional
263
+ Spacing between elements of `y`. Only used if `x` is None.
264
+ axis : int, optional
265
+ Specifies the axis to cumulate. Default is -1 (last axis).
266
+ initial : scalar, optional
267
+ If given, insert this value at the beginning of the returned result.
268
+ 0 or None are the only values accepted. Default is None, which means
269
+ `res` has one element less than `y` along the axis of integration.
270
+
271
+ Returns
272
+ -------
273
+ res : ndarray
274
+ The result of cumulative integration of `y` along `axis`.
275
+ If `initial` is None, the shape is such that the axis of integration
276
+ has one less value than `y`. If `initial` is given, the shape is equal
277
+ to that of `y`.
278
+
279
+ See Also
280
+ --------
281
+ numpy.cumsum, numpy.cumprod
282
+ cumulative_simpson : cumulative integration using Simpson's 1/3 rule
283
+ quad : adaptive quadrature using QUADPACK
284
+ fixed_quad : fixed-order Gaussian quadrature
285
+ dblquad : double integrals
286
+ tplquad : triple integrals
287
+ romb : integrators for sampled data
288
+
289
+ Examples
290
+ --------
291
+ >>> from scipy import integrate
292
+ >>> import numpy as np
293
+ >>> import matplotlib.pyplot as plt
294
+
295
+ >>> x = np.linspace(-2, 2, num=20)
296
+ >>> y = x
297
+ >>> y_int = integrate.cumulative_trapezoid(y, x, initial=0)
298
+ >>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-')
299
+ >>> plt.show()
300
+
301
+ """
302
+ y = np.asarray(y)
303
+ if y.shape[axis] == 0:
304
+ raise ValueError("At least one point is required along `axis`.")
305
+ if x is None:
306
+ d = dx
307
+ else:
308
+ x = np.asarray(x)
309
+ if x.ndim == 1:
310
+ d = np.diff(x)
311
+ # reshape to correct shape
312
+ shape = [1] * y.ndim
313
+ shape[axis] = -1
314
+ d = d.reshape(shape)
315
+ elif len(x.shape) != len(y.shape):
316
+ raise ValueError("If given, shape of x must be 1-D or the "
317
+ "same as y.")
318
+ else:
319
+ d = np.diff(x, axis=axis)
320
+
321
+ if d.shape[axis] != y.shape[axis] - 1:
322
+ raise ValueError("If given, length of x along axis must be the "
323
+ "same as y.")
324
+
325
+ nd = len(y.shape)
326
+ slice1 = tupleset((slice(None),)*nd, axis, slice(1, None))
327
+ slice2 = tupleset((slice(None),)*nd, axis, slice(None, -1))
328
+ res = np.cumsum(d * (y[slice1] + y[slice2]) / 2.0, axis=axis)
329
+
330
+ if initial is not None:
331
+ if initial != 0:
332
+ raise ValueError("`initial` must be `None` or `0`.")
333
+ if not np.isscalar(initial):
334
+ raise ValueError("`initial` parameter should be a scalar.")
335
+
336
+ shape = list(res.shape)
337
+ shape[axis] = 1
338
+ res = np.concatenate([np.full(shape, initial, dtype=res.dtype), res],
339
+ axis=axis)
340
+
341
+ return res
342
+
343
+
344
+ def _basic_simpson(y, start, stop, x, dx, axis):
345
+ nd = len(y.shape)
346
+ if start is None:
347
+ start = 0
348
+ step = 2
349
+ slice_all = (slice(None),)*nd
350
+ slice0 = tupleset(slice_all, axis, slice(start, stop, step))
351
+ slice1 = tupleset(slice_all, axis, slice(start+1, stop+1, step))
352
+ slice2 = tupleset(slice_all, axis, slice(start+2, stop+2, step))
353
+
354
+ if x is None: # Even-spaced Simpson's rule.
355
+ result = np.sum(y[slice0] + 4.0*y[slice1] + y[slice2], axis=axis)
356
+ result *= dx / 3.0
357
+ else:
358
+ # Account for possibly different spacings.
359
+ # Simpson's rule changes a bit.
360
+ h = np.diff(x, axis=axis)
361
+ sl0 = tupleset(slice_all, axis, slice(start, stop, step))
362
+ sl1 = tupleset(slice_all, axis, slice(start+1, stop+1, step))
363
+ h0 = h[sl0].astype(float, copy=False)
364
+ h1 = h[sl1].astype(float, copy=False)
365
+ hsum = h0 + h1
366
+ hprod = h0 * h1
367
+ h0divh1 = np.true_divide(h0, h1, out=np.zeros_like(h0), where=h1 != 0)
368
+ tmp = hsum/6.0 * (y[slice0] *
369
+ (2.0 - np.true_divide(1.0, h0divh1,
370
+ out=np.zeros_like(h0divh1),
371
+ where=h0divh1 != 0)) +
372
+ y[slice1] * (hsum *
373
+ np.true_divide(hsum, hprod,
374
+ out=np.zeros_like(hsum),
375
+ where=hprod != 0)) +
376
+ y[slice2] * (2.0 - h0divh1))
377
+ result = np.sum(tmp, axis=axis)
378
+ return result
379
+
380
+
381
+ def simpson(y, x=None, *, dx=1.0, axis=-1):
382
+ """
383
+ Integrate y(x) using samples along the given axis and the composite
384
+ Simpson's rule. If x is None, spacing of dx is assumed.
385
+
386
+ Parameters
387
+ ----------
388
+ y : array_like
389
+ Array to be integrated.
390
+ x : array_like, optional
391
+ If given, the points at which `y` is sampled.
392
+ dx : float, optional
393
+ Spacing of integration points along axis of `x`. Only used when
394
+ `x` is None. Default is 1.
395
+ axis : int, optional
396
+ Axis along which to integrate. Default is the last axis.
397
+
398
+ Returns
399
+ -------
400
+ float
401
+ The estimated integral computed with the composite Simpson's rule.
402
+
403
+ See Also
404
+ --------
405
+ quad : adaptive quadrature using QUADPACK
406
+ fixed_quad : fixed-order Gaussian quadrature
407
+ dblquad : double integrals
408
+ tplquad : triple integrals
409
+ romb : integrators for sampled data
410
+ cumulative_trapezoid : cumulative integration for sampled data
411
+ cumulative_simpson : cumulative integration using Simpson's 1/3 rule
412
+
413
+ Notes
414
+ -----
415
+ For an odd number of samples that are equally spaced the result is
416
+ exact if the function is a polynomial of order 3 or less. If
417
+ the samples are not equally spaced, then the result is exact only
418
+ if the function is a polynomial of order 2 or less.
419
+
420
+ References
421
+ ----------
422
+ .. [1] Cartwright, Kenneth V. Simpson's Rule Cumulative Integration with
423
+ MS Excel and Irregularly-spaced Data. Journal of Mathematical
424
+ Sciences and Mathematics Education. 12 (2): 1-9
425
+
426
+ Examples
427
+ --------
428
+ >>> from scipy import integrate
429
+ >>> import numpy as np
430
+ >>> x = np.arange(0, 10)
431
+ >>> y = np.arange(0, 10)
432
+
433
+ >>> integrate.simpson(y, x=x)
434
+ 40.5
435
+
436
+ >>> y = np.power(x, 3)
437
+ >>> integrate.simpson(y, x=x)
438
+ 1640.5
439
+ >>> integrate.quad(lambda x: x**3, 0, 9)[0]
440
+ 1640.25
441
+
442
+ """
443
+ y = np.asarray(y)
444
+ nd = len(y.shape)
445
+ N = y.shape[axis]
446
+ last_dx = dx
447
+ returnshape = 0
448
+ if x is not None:
449
+ x = np.asarray(x)
450
+ if len(x.shape) == 1:
451
+ shapex = [1] * nd
452
+ shapex[axis] = x.shape[0]
453
+ saveshape = x.shape
454
+ returnshape = 1
455
+ x = x.reshape(tuple(shapex))
456
+ elif len(x.shape) != len(y.shape):
457
+ raise ValueError("If given, shape of x must be 1-D or the "
458
+ "same as y.")
459
+ if x.shape[axis] != N:
460
+ raise ValueError("If given, length of x along axis must be the "
461
+ "same as y.")
462
+
463
+ if N % 2 == 0:
464
+ val = 0.0
465
+ result = 0.0
466
+ slice_all = (slice(None),) * nd
467
+
468
+ if N == 2:
469
+ # need at least 3 points in integration axis to form parabolic
470
+ # segment. If there are two points then any of 'avg', 'first',
471
+ # 'last' should give the same result.
472
+ slice1 = tupleset(slice_all, axis, -1)
473
+ slice2 = tupleset(slice_all, axis, -2)
474
+ if x is not None:
475
+ last_dx = x[slice1] - x[slice2]
476
+ val += 0.5 * last_dx * (y[slice1] + y[slice2])
477
+ else:
478
+ # use Simpson's rule on first intervals
479
+ result = _basic_simpson(y, 0, N-3, x, dx, axis)
480
+
481
+ slice1 = tupleset(slice_all, axis, -1)
482
+ slice2 = tupleset(slice_all, axis, -2)
483
+ slice3 = tupleset(slice_all, axis, -3)
484
+
485
+ h = np.asarray([dx, dx], dtype=np.float64)
486
+ if x is not None:
487
+ # grab the last two spacings from the appropriate axis
488
+ hm2 = tupleset(slice_all, axis, slice(-2, -1, 1))
489
+ hm1 = tupleset(slice_all, axis, slice(-1, None, 1))
490
+
491
+ diffs = np.float64(np.diff(x, axis=axis))
492
+ h = [np.squeeze(diffs[hm2], axis=axis),
493
+ np.squeeze(diffs[hm1], axis=axis)]
494
+
495
+ # This is the correction for the last interval according to
496
+ # Cartwright.
497
+ # However, I used the equations given at
498
+ # https://en.wikipedia.org/wiki/Simpson%27s_rule#Composite_Simpson's_rule_for_irregularly_spaced_data
499
+ # A footnote on Wikipedia says:
500
+ # Cartwright 2017, Equation 8. The equation in Cartwright is
501
+ # calculating the first interval whereas the equations in the
502
+ # Wikipedia article are adjusting for the last integral. If the
503
+ # proper algebraic substitutions are made, the equation results in
504
+ # the values shown.
505
+ num = 2 * h[1] ** 2 + 3 * h[0] * h[1]
506
+ den = 6 * (h[1] + h[0])
507
+ alpha = np.true_divide(
508
+ num,
509
+ den,
510
+ out=np.zeros_like(den),
511
+ where=den != 0
512
+ )
513
+
514
+ num = h[1] ** 2 + 3.0 * h[0] * h[1]
515
+ den = 6 * h[0]
516
+ beta = np.true_divide(
517
+ num,
518
+ den,
519
+ out=np.zeros_like(den),
520
+ where=den != 0
521
+ )
522
+
523
+ num = 1 * h[1] ** 3
524
+ den = 6 * h[0] * (h[0] + h[1])
525
+ eta = np.true_divide(
526
+ num,
527
+ den,
528
+ out=np.zeros_like(den),
529
+ where=den != 0
530
+ )
531
+
532
+ result += alpha*y[slice1] + beta*y[slice2] - eta*y[slice3]
533
+
534
+ result += val
535
+ else:
536
+ result = _basic_simpson(y, 0, N-2, x, dx, axis)
537
+ if returnshape:
538
+ x = x.reshape(saveshape)
539
+ return result
540
+
541
+
542
+ def _cumulatively_sum_simpson_integrals(
543
+ y: np.ndarray,
544
+ dx: np.ndarray,
545
+ integration_func: Callable[[np.ndarray, np.ndarray], np.ndarray],
546
+ ) -> np.ndarray:
547
+ """Calculate cumulative sum of Simpson integrals.
548
+ Takes as input the integration function to be used.
549
+ The integration_func is assumed to return the cumulative sum using
550
+ composite Simpson's rule. Assumes the axis of summation is -1.
551
+ """
552
+ sub_integrals_h1 = integration_func(y, dx)
553
+ sub_integrals_h2 = integration_func(y[..., ::-1], dx[..., ::-1])[..., ::-1]
554
+
555
+ shape = list(sub_integrals_h1.shape)
556
+ shape[-1] += 1
557
+ sub_integrals = np.empty(shape)
558
+ sub_integrals[..., :-1:2] = sub_integrals_h1[..., ::2]
559
+ sub_integrals[..., 1::2] = sub_integrals_h2[..., ::2]
560
+ # Integral over last subinterval can only be calculated from
561
+ # formula for h2
562
+ sub_integrals[..., -1] = sub_integrals_h2[..., -1]
563
+ res = np.cumsum(sub_integrals, axis=-1)
564
+ return res
565
+
566
+
567
+ def _cumulative_simpson_equal_intervals(y: np.ndarray, dx: np.ndarray) -> np.ndarray:
568
+ """Calculate the Simpson integrals for all h1 intervals assuming equal interval
569
+ widths. The function can also be used to calculate the integral for all
570
+ h2 intervals by reversing the inputs, `y` and `dx`.
571
+ """
572
+ d = dx[..., :-1]
573
+ f1 = y[..., :-2]
574
+ f2 = y[..., 1:-1]
575
+ f3 = y[..., 2:]
576
+
577
+ # Calculate integral over the subintervals (eqn (10) of Reference [2])
578
+ return d / 3 * (5 * f1 / 4 + 2 * f2 - f3 / 4)
579
+
580
+
581
+ def _cumulative_simpson_unequal_intervals(y: np.ndarray, dx: np.ndarray) -> np.ndarray:
582
+ """Calculate the Simpson integrals for all h1 intervals assuming unequal interval
583
+ widths. The function can also be used to calculate the integral for all
584
+ h2 intervals by reversing the inputs, `y` and `dx`.
585
+ """
586
+ x21 = dx[..., :-1]
587
+ x32 = dx[..., 1:]
588
+ f1 = y[..., :-2]
589
+ f2 = y[..., 1:-1]
590
+ f3 = y[..., 2:]
591
+
592
+ x31 = x21 + x32
593
+ x21_x31 = x21/x31
594
+ x21_x32 = x21/x32
595
+ x21x21_x31x32 = x21_x31 * x21_x32
596
+
597
+ # Calculate integral over the subintervals (eqn (8) of Reference [2])
598
+ coeff1 = 3 - x21_x31
599
+ coeff2 = 3 + x21x21_x31x32 + x21_x31
600
+ coeff3 = -x21x21_x31x32
601
+
602
+ return x21/6 * (coeff1*f1 + coeff2*f2 + coeff3*f3)
603
+
604
+
605
+ def _ensure_float_array(arr: npt.ArrayLike) -> np.ndarray:
606
+ arr = np.asarray(arr)
607
+ if np.issubdtype(arr.dtype, np.integer):
608
+ arr = arr.astype(float, copy=False)
609
+ return arr
610
+
611
+
612
+ def cumulative_simpson(y, *, x=None, dx=1.0, axis=-1, initial=None):
613
+ r"""
614
+ Cumulatively integrate y(x) using the composite Simpson's 1/3 rule.
615
+ The integral of the samples at every point is calculated by assuming a
616
+ quadratic relationship between each point and the two adjacent points.
617
+
618
+ Parameters
619
+ ----------
620
+ y : array_like
621
+ Values to integrate. Requires at least one point along `axis`. If two or fewer
622
+ points are provided along `axis`, Simpson's integration is not possible and the
623
+ result is calculated with `cumulative_trapezoid`.
624
+ x : array_like, optional
625
+ The coordinate to integrate along. Must have the same shape as `y` or
626
+ must be 1D with the same length as `y` along `axis`. `x` must also be
627
+ strictly increasing along `axis`.
628
+ If `x` is None (default), integration is performed using spacing `dx`
629
+ between consecutive elements in `y`.
630
+ dx : scalar or array_like, optional
631
+ Spacing between elements of `y`. Only used if `x` is None. Can either
632
+ be a float, or an array with the same shape as `y`, but of length one along
633
+ `axis`. Default is 1.0.
634
+ axis : int, optional
635
+ Specifies the axis to integrate along. Default is -1 (last axis).
636
+ initial : scalar or array_like, optional
637
+ If given, insert this value at the beginning of the returned result,
638
+ and add it to the rest of the result. Default is None, which means no
639
+ value at ``x[0]`` is returned and `res` has one element less than `y`
640
+ along the axis of integration. Can either be a float, or an array with
641
+ the same shape as `y`, but of length one along `axis`.
642
+
643
+ Returns
644
+ -------
645
+ res : ndarray
646
+ The result of cumulative integration of `y` along `axis`.
647
+ If `initial` is None, the shape is such that the axis of integration
648
+ has one less value than `y`. If `initial` is given, the shape is equal
649
+ to that of `y`.
650
+
651
+ See Also
652
+ --------
653
+ numpy.cumsum
654
+ cumulative_trapezoid : cumulative integration using the composite
655
+ trapezoidal rule
656
+ simpson : integrator for sampled data using the Composite Simpson's Rule
657
+
658
+ Notes
659
+ -----
660
+
661
+ .. versionadded:: 1.12.0
662
+
663
+ The composite Simpson's 1/3 method can be used to approximate the definite
664
+ integral of a sampled input function :math:`y(x)` [1]_. The method assumes
665
+ a quadratic relationship over the interval containing any three consecutive
666
+ sampled points.
667
+
668
+ Consider three consecutive points:
669
+ :math:`(x_1, y_1), (x_2, y_2), (x_3, y_3)`.
670
+
671
+ Assuming a quadratic relationship over the three points, the integral over
672
+ the subinterval between :math:`x_1` and :math:`x_2` is given by formula
673
+ (8) of [2]_:
674
+
675
+ .. math::
676
+ \int_{x_1}^{x_2} y(x) dx\ &= \frac{x_2-x_1}{6}\left[\
677
+ \left\{3-\frac{x_2-x_1}{x_3-x_1}\right\} y_1 + \
678
+ \left\{3 + \frac{(x_2-x_1)^2}{(x_3-x_2)(x_3-x_1)} + \
679
+ \frac{x_2-x_1}{x_3-x_1}\right\} y_2\\
680
+ - \frac{(x_2-x_1)^2}{(x_3-x_2)(x_3-x_1)} y_3\right]
681
+
682
+ The integral between :math:`x_2` and :math:`x_3` is given by swapping
683
+ appearances of :math:`x_1` and :math:`x_3`. The integral is estimated
684
+ separately for each subinterval and then cumulatively summed to obtain
685
+ the final result.
686
+
687
+ For samples that are equally spaced, the result is exact if the function
688
+ is a polynomial of order three or less [1]_ and the number of subintervals
689
+ is even. Otherwise, the integral is exact for polynomials of order two or
690
+ less.
691
+
692
+ References
693
+ ----------
694
+ .. [1] Wikipedia page: https://en.wikipedia.org/wiki/Simpson's_rule
695
+ .. [2] Cartwright, Kenneth V. Simpson's Rule Cumulative Integration with
696
+ MS Excel and Irregularly-spaced Data. Journal of Mathematical
697
+ Sciences and Mathematics Education. 12 (2): 1-9
698
+
699
+ Examples
700
+ --------
701
+ >>> from scipy import integrate
702
+ >>> import numpy as np
703
+ >>> import matplotlib.pyplot as plt
704
+ >>> x = np.linspace(-2, 2, num=20)
705
+ >>> y = x**2
706
+ >>> y_int = integrate.cumulative_simpson(y, x=x, initial=0)
707
+ >>> fig, ax = plt.subplots()
708
+ >>> ax.plot(x, y_int, 'ro', x, x**3/3 - (x[0])**3/3, 'b-')
709
+ >>> ax.grid()
710
+ >>> plt.show()
711
+
712
+ The output of `cumulative_simpson` is similar to that of iteratively
713
+ calling `simpson` with successively higher upper limits of integration, but
714
+ not identical.
715
+
716
+ >>> def cumulative_simpson_reference(y, x):
717
+ ... return np.asarray([integrate.simpson(y[:i], x=x[:i])
718
+ ... for i in range(2, len(y) + 1)])
719
+ >>>
720
+ >>> rng = np.random.default_rng(354673834679465)
721
+ >>> x, y = rng.random(size=(2, 10))
722
+ >>> x.sort()
723
+ >>>
724
+ >>> res = integrate.cumulative_simpson(y, x=x)
725
+ >>> ref = cumulative_simpson_reference(y, x)
726
+ >>> equal = np.abs(res - ref) < 1e-15
727
+ >>> equal # not equal when `simpson` has even number of subintervals
728
+ array([False, True, False, True, False, True, False, True, True])
729
+
730
+ This is expected: because `cumulative_simpson` has access to more
731
+ information than `simpson`, it can typically produce more accurate
732
+ estimates of the underlying integral over subintervals.
733
+
734
+ """
735
+ y = _ensure_float_array(y)
736
+
737
+ # validate `axis` and standardize to work along the last axis
738
+ original_y = y
739
+ original_shape = y.shape
740
+ try:
741
+ y = np.swapaxes(y, axis, -1)
742
+ except IndexError as e:
743
+ message = f"`axis={axis}` is not valid for `y` with `y.ndim={y.ndim}`."
744
+ raise ValueError(message) from e
745
+ if y.shape[-1] < 3:
746
+ res = cumulative_trapezoid(original_y, x, dx=dx, axis=axis, initial=None)
747
+ res = np.swapaxes(res, axis, -1)
748
+
749
+ elif x is not None:
750
+ x = _ensure_float_array(x)
751
+ message = ("If given, shape of `x` must be the same as `y` or 1-D with "
752
+ "the same length as `y` along `axis`.")
753
+ if not (x.shape == original_shape
754
+ or (x.ndim == 1 and len(x) == original_shape[axis])):
755
+ raise ValueError(message)
756
+
757
+ x = np.broadcast_to(x, y.shape) if x.ndim == 1 else np.swapaxes(x, axis, -1)
758
+ dx = np.diff(x, axis=-1)
759
+ if np.any(dx <= 0):
760
+ raise ValueError("Input x must be strictly increasing.")
761
+ res = _cumulatively_sum_simpson_integrals(
762
+ y, dx, _cumulative_simpson_unequal_intervals
763
+ )
764
+
765
+ else:
766
+ dx = _ensure_float_array(dx)
767
+ final_dx_shape = tupleset(original_shape, axis, original_shape[axis] - 1)
768
+ alt_input_dx_shape = tupleset(original_shape, axis, 1)
769
+ message = ("If provided, `dx` must either be a scalar or have the same "
770
+ "shape as `y` but with only 1 point along `axis`.")
771
+ if not (dx.ndim == 0 or dx.shape == alt_input_dx_shape):
772
+ raise ValueError(message)
773
+ dx = np.broadcast_to(dx, final_dx_shape)
774
+ dx = np.swapaxes(dx, axis, -1)
775
+ res = _cumulatively_sum_simpson_integrals(
776
+ y, dx, _cumulative_simpson_equal_intervals
777
+ )
778
+
779
+ if initial is not None:
780
+ initial = _ensure_float_array(initial)
781
+ alt_initial_input_shape = tupleset(original_shape, axis, 1)
782
+ message = ("If provided, `initial` must either be a scalar or have the "
783
+ "same shape as `y` but with only 1 point along `axis`.")
784
+ if not (initial.ndim == 0 or initial.shape == alt_initial_input_shape):
785
+ raise ValueError(message)
786
+ initial = np.broadcast_to(initial, alt_initial_input_shape)
787
+ initial = np.swapaxes(initial, axis, -1)
788
+
789
+ res += initial
790
+ res = np.concatenate((initial, res), axis=-1)
791
+
792
+ res = np.swapaxes(res, -1, axis)
793
+ return res
794
+
795
+
796
+ def romb(y, dx=1.0, axis=-1, show=False):
797
+ """
798
+ Romberg integration using samples of a function.
799
+
800
+ Parameters
801
+ ----------
802
+ y : array_like
803
+ A vector of ``2**k + 1`` equally-spaced samples of a function.
804
+ dx : float, optional
805
+ The sample spacing. Default is 1.
806
+ axis : int, optional
807
+ The axis along which to integrate. Default is -1 (last axis).
808
+ show : bool, optional
809
+ When `y` is a single 1-D array, then if this argument is True
810
+ print the table showing Richardson extrapolation from the
811
+ samples. Default is False.
812
+
813
+ Returns
814
+ -------
815
+ romb : ndarray
816
+ The integrated result for `axis`.
817
+
818
+ See Also
819
+ --------
820
+ quad : adaptive quadrature using QUADPACK
821
+ fixed_quad : fixed-order Gaussian quadrature
822
+ dblquad : double integrals
823
+ tplquad : triple integrals
824
+ simpson : integrators for sampled data
825
+ cumulative_trapezoid : cumulative integration for sampled data
826
+
827
+ Examples
828
+ --------
829
+ >>> from scipy import integrate
830
+ >>> import numpy as np
831
+ >>> x = np.arange(10, 14.25, 0.25)
832
+ >>> y = np.arange(3, 12)
833
+
834
+ >>> integrate.romb(y)
835
+ 56.0
836
+
837
+ >>> y = np.sin(np.power(x, 2.5))
838
+ >>> integrate.romb(y)
839
+ -0.742561336672229
840
+
841
+ >>> integrate.romb(y, show=True)
842
+ Richardson Extrapolation Table for Romberg Integration
843
+ ======================================================
844
+ -0.81576
845
+ 4.63862 6.45674
846
+ -1.10581 -3.02062 -3.65245
847
+ -2.57379 -3.06311 -3.06595 -3.05664
848
+ -1.34093 -0.92997 -0.78776 -0.75160 -0.74256
849
+ ======================================================
850
+ -0.742561336672229 # may vary
851
+
852
+ """
853
+ y = np.asarray(y)
854
+ nd = len(y.shape)
855
+ Nsamps = y.shape[axis]
856
+ Ninterv = Nsamps-1
857
+ n = 1
858
+ k = 0
859
+ while n < Ninterv:
860
+ n <<= 1
861
+ k += 1
862
+ if n != Ninterv:
863
+ raise ValueError("Number of samples must be one plus a "
864
+ "non-negative power of 2.")
865
+
866
+ R = {}
867
+ slice_all = (slice(None),) * nd
868
+ slice0 = tupleset(slice_all, axis, 0)
869
+ slicem1 = tupleset(slice_all, axis, -1)
870
+ h = Ninterv * np.asarray(dx, dtype=float)
871
+ R[(0, 0)] = (y[slice0] + y[slicem1])/2.0*h
872
+ slice_R = slice_all
873
+ start = stop = step = Ninterv
874
+ for i in range(1, k+1):
875
+ start >>= 1
876
+ slice_R = tupleset(slice_R, axis, slice(start, stop, step))
877
+ step >>= 1
878
+ R[(i, 0)] = 0.5*(R[(i-1, 0)] + h*y[slice_R].sum(axis=axis))
879
+ for j in range(1, i+1):
880
+ prev = R[(i, j-1)]
881
+ R[(i, j)] = prev + (prev-R[(i-1, j-1)]) / ((1 << (2*j))-1)
882
+ h /= 2.0
883
+
884
+ if show:
885
+ if not np.isscalar(R[(0, 0)]):
886
+ print("*** Printing table only supported for integrals" +
887
+ " of a single data set.")
888
+ else:
889
+ try:
890
+ precis = show[0]
891
+ except (TypeError, IndexError):
892
+ precis = 5
893
+ try:
894
+ width = show[1]
895
+ except (TypeError, IndexError):
896
+ width = 8
897
+ formstr = f"%{width}.{precis}f"
898
+
899
+ title = "Richardson Extrapolation Table for Romberg Integration"
900
+ print(title, "=" * len(title), sep="\n", end="\n")
901
+ for i in range(k+1):
902
+ for j in range(i+1):
903
+ print(formstr % R[(i, j)], end=" ")
904
+ print()
905
+ print("=" * len(title))
906
+
907
+ return R[(k, k)]
908
+
909
+
910
+ # Coefficients for Newton-Cotes quadrature
911
+ #
912
+ # These are the points being used
913
+ # to construct the local interpolating polynomial
914
+ # a are the weights for Newton-Cotes integration
915
+ # B is the error coefficient.
916
+ # error in these coefficients grows as N gets larger.
917
+ # or as samples are closer and closer together
918
+
919
+ # You can use maxima to find these rational coefficients
920
+ # for equally spaced data using the commands
921
+ # a(i,N) := (integrate(product(r-j,j,0,i-1) * product(r-j,j,i+1,N),r,0,N)
922
+ # / ((N-i)! * i!) * (-1)^(N-i));
923
+ # Be(N) := N^(N+2)/(N+2)! * (N/(N+3) - sum((i/N)^(N+2)*a(i,N),i,0,N));
924
+ # Bo(N) := N^(N+1)/(N+1)! * (N/(N+2) - sum((i/N)^(N+1)*a(i,N),i,0,N));
925
+ # B(N) := (if (mod(N,2)=0) then Be(N) else Bo(N));
926
+ #
927
+ # pre-computed for equally-spaced weights
928
+ #
929
+ # num_a, den_a, int_a, num_B, den_B = _builtincoeffs[N]
930
+ #
931
+ # a = num_a*array(int_a)/den_a
932
+ # B = num_B*1.0 / den_B
933
+ #
934
+ # integrate(f(x),x,x_0,x_N) = dx*sum(a*f(x_i)) + B*(dx)^(2k+3) f^(2k+2)(x*)
935
+ # where k = N // 2
936
+ #
937
+ _builtincoeffs = {
938
+ 1: (1,2,[1,1],-1,12),
939
+ 2: (1,3,[1,4,1],-1,90),
940
+ 3: (3,8,[1,3,3,1],-3,80),
941
+ 4: (2,45,[7,32,12,32,7],-8,945),
942
+ 5: (5,288,[19,75,50,50,75,19],-275,12096),
943
+ 6: (1,140,[41,216,27,272,27,216,41],-9,1400),
944
+ 7: (7,17280,[751,3577,1323,2989,2989,1323,3577,751],-8183,518400),
945
+ 8: (4,14175,[989,5888,-928,10496,-4540,10496,-928,5888,989],
946
+ -2368,467775),
947
+ 9: (9,89600,[2857,15741,1080,19344,5778,5778,19344,1080,
948
+ 15741,2857], -4671, 394240),
949
+ 10: (5,299376,[16067,106300,-48525,272400,-260550,427368,
950
+ -260550,272400,-48525,106300,16067],
951
+ -673175, 163459296),
952
+ 11: (11,87091200,[2171465,13486539,-3237113, 25226685,-9595542,
953
+ 15493566,15493566,-9595542,25226685,-3237113,
954
+ 13486539,2171465], -2224234463, 237758976000),
955
+ 12: (1, 5255250, [1364651,9903168,-7587864,35725120,-51491295,
956
+ 87516288,-87797136,87516288,-51491295,35725120,
957
+ -7587864,9903168,1364651], -3012, 875875),
958
+ 13: (13, 402361344000,[8181904909, 56280729661, -31268252574,
959
+ 156074417954,-151659573325,206683437987,
960
+ -43111992612,-43111992612,206683437987,
961
+ -151659573325,156074417954,-31268252574,
962
+ 56280729661,8181904909], -2639651053,
963
+ 344881152000),
964
+ 14: (7, 2501928000, [90241897,710986864,-770720657,3501442784,
965
+ -6625093363,12630121616,-16802270373,19534438464,
966
+ -16802270373,12630121616,-6625093363,3501442784,
967
+ -770720657,710986864,90241897], -3740727473,
968
+ 1275983280000)
969
+ }
970
+
971
+
972
+ def newton_cotes(rn, equal=0):
973
+ r"""
974
+ Return weights and error coefficient for Newton-Cotes integration.
975
+
976
+ Suppose we have (N+1) samples of f at the positions
977
+ x_0, x_1, ..., x_N. Then an N-point Newton-Cotes formula for the
978
+ integral between x_0 and x_N is:
979
+
980
+ :math:`\int_{x_0}^{x_N} f(x)dx = \Delta x \sum_{i=0}^{N} a_i f(x_i)
981
+ + B_N (\Delta x)^{N+2} f^{N+1} (\xi)`
982
+
983
+ where :math:`\xi \in [x_0,x_N]`
984
+ and :math:`\Delta x = \frac{x_N-x_0}{N}` is the average samples spacing.
985
+
986
+ If the samples are equally-spaced and N is even, then the error
987
+ term is :math:`B_N (\Delta x)^{N+3} f^{N+2}(\xi)`.
988
+
989
+ Parameters
990
+ ----------
991
+ rn : int
992
+ The integer order for equally-spaced data or the relative positions of
993
+ the samples with the first sample at 0 and the last at N, where N+1 is
994
+ the length of `rn`. N is the order of the Newton-Cotes integration.
995
+ equal : int, optional
996
+ Set to 1 to enforce equally spaced data.
997
+
998
+ Returns
999
+ -------
1000
+ an : ndarray
1001
+ 1-D array of weights to apply to the function at the provided sample
1002
+ positions.
1003
+ B : float
1004
+ Error coefficient.
1005
+
1006
+ Notes
1007
+ -----
1008
+ Normally, the Newton-Cotes rules are used on smaller integration
1009
+ regions and a composite rule is used to return the total integral.
1010
+
1011
+ Examples
1012
+ --------
1013
+ Compute the integral of sin(x) in [0, :math:`\pi`]:
1014
+
1015
+ >>> from scipy.integrate import newton_cotes
1016
+ >>> import numpy as np
1017
+ >>> def f(x):
1018
+ ... return np.sin(x)
1019
+ >>> a = 0
1020
+ >>> b = np.pi
1021
+ >>> exact = 2
1022
+ >>> for N in [2, 4, 6, 8, 10]:
1023
+ ... x = np.linspace(a, b, N + 1)
1024
+ ... an, B = newton_cotes(N, 1)
1025
+ ... dx = (b - a) / N
1026
+ ... quad = dx * np.sum(an * f(x))
1027
+ ... error = abs(quad - exact)
1028
+ ... print('{:2d} {:10.9f} {:.5e}'.format(N, quad, error))
1029
+ ...
1030
+ 2 2.094395102 9.43951e-02
1031
+ 4 1.998570732 1.42927e-03
1032
+ 6 2.000017814 1.78136e-05
1033
+ 8 1.999999835 1.64725e-07
1034
+ 10 2.000000001 1.14677e-09
1035
+
1036
+ """
1037
+ try:
1038
+ N = len(rn)-1
1039
+ if equal:
1040
+ rn = np.arange(N+1)
1041
+ elif np.all(np.diff(rn) == 1):
1042
+ equal = 1
1043
+ except Exception:
1044
+ N = rn
1045
+ rn = np.arange(N+1)
1046
+ equal = 1
1047
+
1048
+ if equal and N in _builtincoeffs:
1049
+ na, da, vi, nb, db = _builtincoeffs[N]
1050
+ an = na * np.array(vi, dtype=float) / da
1051
+ return an, float(nb)/db
1052
+
1053
+ if (rn[0] != 0) or (rn[-1] != N):
1054
+ raise ValueError("The sample positions must start at 0"
1055
+ " and end at N")
1056
+ yi = rn / float(N)
1057
+ ti = 2 * yi - 1
1058
+ nvec = np.arange(N+1)
1059
+ C = ti ** nvec[:, np.newaxis]
1060
+ Cinv = np.linalg.inv(C)
1061
+ # improve precision of result
1062
+ for i in range(2):
1063
+ Cinv = 2*Cinv - Cinv.dot(C).dot(Cinv)
1064
+ vec = 2.0 / (nvec[::2]+1)
1065
+ ai = Cinv[:, ::2].dot(vec) * (N / 2.)
1066
+
1067
+ if (N % 2 == 0) and equal:
1068
+ BN = N/(N+3.)
1069
+ power = N+2
1070
+ else:
1071
+ BN = N/(N+2.)
1072
+ power = N+1
1073
+
1074
+ BN = BN - np.dot(yi**power, ai)
1075
+ p1 = power+1
1076
+ fac = power*math.log(N) - gammaln(p1)
1077
+ fac = math.exp(fac)
1078
+ return ai, BN*fac
1079
+
1080
+
1081
+ def _qmc_quad_iv(func, a, b, n_points, n_estimates, qrng, log):
1082
+
1083
+ # lazy import to avoid issues with partially-initialized submodule
1084
+ if not hasattr(qmc_quad, 'qmc'):
1085
+ from scipy import stats
1086
+ qmc_quad.stats = stats
1087
+ else:
1088
+ stats = qmc_quad.stats
1089
+
1090
+ if not callable(func):
1091
+ message = "`func` must be callable."
1092
+ raise TypeError(message)
1093
+
1094
+ # a, b will be modified, so copy. Oh well if it's copied twice.
1095
+ a = np.atleast_1d(a).copy()
1096
+ b = np.atleast_1d(b).copy()
1097
+ a, b = np.broadcast_arrays(a, b)
1098
+ dim = a.shape[0]
1099
+
1100
+ try:
1101
+ func((a + b) / 2)
1102
+ except Exception as e:
1103
+ message = ("`func` must evaluate the integrand at points within "
1104
+ "the integration range; e.g. `func( (a + b) / 2)` "
1105
+ "must return the integrand at the centroid of the "
1106
+ "integration volume.")
1107
+ raise ValueError(message) from e
1108
+
1109
+ try:
1110
+ func(np.array([a, b]).T)
1111
+ vfunc = func
1112
+ except Exception as e:
1113
+ message = ("Exception encountered when attempting vectorized call to "
1114
+ f"`func`: {e}. For better performance, `func` should "
1115
+ "accept two-dimensional array `x` with shape `(len(a), "
1116
+ "n_points)` and return an array of the integrand value at "
1117
+ "each of the `n_points.")
1118
+ warnings.warn(message, stacklevel=3)
1119
+
1120
+ def vfunc(x):
1121
+ return np.apply_along_axis(func, axis=-1, arr=x)
1122
+
1123
+ n_points_int = np.int64(n_points)
1124
+ if n_points != n_points_int:
1125
+ message = "`n_points` must be an integer."
1126
+ raise TypeError(message)
1127
+
1128
+ n_estimates_int = np.int64(n_estimates)
1129
+ if n_estimates != n_estimates_int:
1130
+ message = "`n_estimates` must be an integer."
1131
+ raise TypeError(message)
1132
+
1133
+ if qrng is None:
1134
+ qrng = stats.qmc.Halton(dim)
1135
+ elif not isinstance(qrng, stats.qmc.QMCEngine):
1136
+ message = "`qrng` must be an instance of scipy.stats.qmc.QMCEngine."
1137
+ raise TypeError(message)
1138
+
1139
+ if qrng.d != a.shape[0]:
1140
+ message = ("`qrng` must be initialized with dimensionality equal to "
1141
+ "the number of variables in `a`, i.e., "
1142
+ "`qrng.random().shape[-1]` must equal `a.shape[0]`.")
1143
+ raise ValueError(message)
1144
+
1145
+ rng_seed = getattr(qrng, 'rng_seed', None)
1146
+ rng = stats._qmc.check_random_state(rng_seed)
1147
+
1148
+ if log not in {True, False}:
1149
+ message = "`log` must be boolean (`True` or `False`)."
1150
+ raise TypeError(message)
1151
+
1152
+ return (vfunc, a, b, n_points_int, n_estimates_int, qrng, rng, log, stats)
1153
+
1154
+
1155
+ QMCQuadResult = namedtuple('QMCQuadResult', ['integral', 'standard_error'])
1156
+
1157
+
1158
+ def qmc_quad(func, a, b, *, n_estimates=8, n_points=1024, qrng=None,
1159
+ log=False):
1160
+ """
1161
+ Compute an integral in N-dimensions using Quasi-Monte Carlo quadrature.
1162
+
1163
+ Parameters
1164
+ ----------
1165
+ func : callable
1166
+ The integrand. Must accept a single argument ``x``, an array which
1167
+ specifies the point(s) at which to evaluate the scalar-valued
1168
+ integrand, and return the value(s) of the integrand.
1169
+ For efficiency, the function should be vectorized to accept an array of
1170
+ shape ``(d, n_points)``, where ``d`` is the number of variables (i.e.
1171
+ the dimensionality of the function domain) and `n_points` is the number
1172
+ of quadrature points, and return an array of shape ``(n_points,)``,
1173
+ the integrand at each quadrature point.
1174
+ a, b : array-like
1175
+ One-dimensional arrays specifying the lower and upper integration
1176
+ limits, respectively, of each of the ``d`` variables.
1177
+ n_estimates, n_points : int, optional
1178
+ `n_estimates` (default: 8) statistically independent QMC samples, each
1179
+ of `n_points` (default: 1024) points, will be generated by `qrng`.
1180
+ The total number of points at which the integrand `func` will be
1181
+ evaluated is ``n_points * n_estimates``. See Notes for details.
1182
+ qrng : `~scipy.stats.qmc.QMCEngine`, optional
1183
+ An instance of the QMCEngine from which to sample QMC points.
1184
+ The QMCEngine must be initialized to a number of dimensions ``d``
1185
+ corresponding with the number of variables ``x1, ..., xd`` passed to
1186
+ `func`.
1187
+ The provided QMCEngine is used to produce the first integral estimate.
1188
+ If `n_estimates` is greater than one, additional QMCEngines are
1189
+ spawned from the first (with scrambling enabled, if it is an option.)
1190
+ If a QMCEngine is not provided, the default `scipy.stats.qmc.Halton`
1191
+ will be initialized with the number of dimensions determine from
1192
+ the length of `a`.
1193
+ log : boolean, default: False
1194
+ When set to True, `func` returns the log of the integrand, and
1195
+ the result object contains the log of the integral.
1196
+
1197
+ Returns
1198
+ -------
1199
+ result : object
1200
+ A result object with attributes:
1201
+
1202
+ integral : float
1203
+ The estimate of the integral.
1204
+ standard_error :
1205
+ The error estimate. See Notes for interpretation.
1206
+
1207
+ Notes
1208
+ -----
1209
+ Values of the integrand at each of the `n_points` points of a QMC sample
1210
+ are used to produce an estimate of the integral. This estimate is drawn
1211
+ from a population of possible estimates of the integral, the value of
1212
+ which we obtain depends on the particular points at which the integral
1213
+ was evaluated. We perform this process `n_estimates` times, each time
1214
+ evaluating the integrand at different scrambled QMC points, effectively
1215
+ drawing i.i.d. random samples from the population of integral estimates.
1216
+ The sample mean :math:`m` of these integral estimates is an
1217
+ unbiased estimator of the true value of the integral, and the standard
1218
+ error of the mean :math:`s` of these estimates may be used to generate
1219
+ confidence intervals using the t distribution with ``n_estimates - 1``
1220
+ degrees of freedom. Perhaps counter-intuitively, increasing `n_points`
1221
+ while keeping the total number of function evaluation points
1222
+ ``n_points * n_estimates`` fixed tends to reduce the actual error, whereas
1223
+ increasing `n_estimates` tends to decrease the error estimate.
1224
+
1225
+ Examples
1226
+ --------
1227
+ QMC quadrature is particularly useful for computing integrals in higher
1228
+ dimensions. An example integrand is the probability density function
1229
+ of a multivariate normal distribution.
1230
+
1231
+ >>> import numpy as np
1232
+ >>> from scipy import stats
1233
+ >>> dim = 8
1234
+ >>> mean = np.zeros(dim)
1235
+ >>> cov = np.eye(dim)
1236
+ >>> def func(x):
1237
+ ... # `multivariate_normal` expects the _last_ axis to correspond with
1238
+ ... # the dimensionality of the space, so `x` must be transposed
1239
+ ... return stats.multivariate_normal.pdf(x.T, mean, cov)
1240
+
1241
+ To compute the integral over the unit hypercube:
1242
+
1243
+ >>> from scipy.integrate import qmc_quad
1244
+ >>> a = np.zeros(dim)
1245
+ >>> b = np.ones(dim)
1246
+ >>> rng = np.random.default_rng()
1247
+ >>> qrng = stats.qmc.Halton(d=dim, seed=rng)
1248
+ >>> n_estimates = 8
1249
+ >>> res = qmc_quad(func, a, b, n_estimates=n_estimates, qrng=qrng)
1250
+ >>> res.integral, res.standard_error
1251
+ (0.00018429555666024108, 1.0389431116001344e-07)
1252
+
1253
+ A two-sided, 99% confidence interval for the integral may be estimated
1254
+ as:
1255
+
1256
+ >>> t = stats.t(df=n_estimates-1, loc=res.integral,
1257
+ ... scale=res.standard_error)
1258
+ >>> t.interval(0.99)
1259
+ (0.0001839319802536469, 0.00018465913306683527)
1260
+
1261
+ Indeed, the value reported by `scipy.stats.multivariate_normal` is
1262
+ within this range.
1263
+
1264
+ >>> stats.multivariate_normal.cdf(b, mean, cov, lower_limit=a)
1265
+ 0.00018430867675187443
1266
+
1267
+ """
1268
+ args = _qmc_quad_iv(func, a, b, n_points, n_estimates, qrng, log)
1269
+ func, a, b, n_points, n_estimates, qrng, rng, log, stats = args
1270
+
1271
+ def sum_product(integrands, dA, log=False):
1272
+ if log:
1273
+ return logsumexp(integrands) + np.log(dA)
1274
+ else:
1275
+ return np.sum(integrands * dA)
1276
+
1277
+ def mean(estimates, log=False):
1278
+ if log:
1279
+ return logsumexp(estimates) - np.log(n_estimates)
1280
+ else:
1281
+ return np.mean(estimates)
1282
+
1283
+ def std(estimates, m=None, ddof=0, log=False):
1284
+ m = m or mean(estimates, log)
1285
+ if log:
1286
+ estimates, m = np.broadcast_arrays(estimates, m)
1287
+ temp = np.vstack((estimates, m + np.pi * 1j))
1288
+ diff = logsumexp(temp, axis=0)
1289
+ return np.real(0.5 * (logsumexp(2 * diff)
1290
+ - np.log(n_estimates - ddof)))
1291
+ else:
1292
+ return np.std(estimates, ddof=ddof)
1293
+
1294
+ def sem(estimates, m=None, s=None, log=False):
1295
+ m = m or mean(estimates, log)
1296
+ s = s or std(estimates, m, ddof=1, log=log)
1297
+ if log:
1298
+ return s - 0.5*np.log(n_estimates)
1299
+ else:
1300
+ return s / np.sqrt(n_estimates)
1301
+
1302
+ # The sign of the integral depends on the order of the limits. Fix this by
1303
+ # ensuring that lower bounds are indeed lower and setting sign of resulting
1304
+ # integral manually
1305
+ if np.any(a == b):
1306
+ message = ("A lower limit was equal to an upper limit, so the value "
1307
+ "of the integral is zero by definition.")
1308
+ warnings.warn(message, stacklevel=2)
1309
+ return QMCQuadResult(-np.inf if log else 0, 0)
1310
+
1311
+ i_swap = b < a
1312
+ sign = (-1)**(i_swap.sum(axis=-1)) # odd # of swaps -> negative
1313
+ a[i_swap], b[i_swap] = b[i_swap], a[i_swap]
1314
+
1315
+ A = np.prod(b - a)
1316
+ dA = A / n_points
1317
+
1318
+ estimates = np.zeros(n_estimates)
1319
+ rngs = _rng_spawn(qrng.rng, n_estimates)
1320
+ for i in range(n_estimates):
1321
+ # Generate integral estimate
1322
+ sample = qrng.random(n_points)
1323
+ # The rationale for transposing is that this allows users to easily
1324
+ # unpack `x` into separate variables, if desired. This is consistent
1325
+ # with the `xx` array passed into the `scipy.integrate.nquad` `func`.
1326
+ x = stats.qmc.scale(sample, a, b).T # (n_dim, n_points)
1327
+ integrands = func(x)
1328
+ estimates[i] = sum_product(integrands, dA, log)
1329
+
1330
+ # Get a new, independently-scrambled QRNG for next time
1331
+ qrng = type(qrng)(seed=rngs[i], **qrng._init_quad)
1332
+
1333
+ integral = mean(estimates, log)
1334
+ standard_error = sem(estimates, m=integral, log=log)
1335
+ integral = integral + np.pi*1j if (log and sign < 0) else integral*sign
1336
+ return QMCQuadResult(integral, standard_error)