scipy 1.16.2__cp313-cp313-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.cp313-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp313-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.cp313-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp313-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.cp313-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp313-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.cp313-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp313-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp313-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp313-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp313-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp313-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.cp313-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp313-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.cp313-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp313-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.cp313-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp313-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp313-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp313-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp313-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp313-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.cp313-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp313-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.cp313-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp313-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.cp313-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp313-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.cp313-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp313-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp313-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp313-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.cp313-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp313-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.cp313-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp313-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp313-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp313-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp313-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp313-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.cp313-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp313-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp313-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp313-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp313-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp313-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.cp313-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp313-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.cp313-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp313-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp313-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp313-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp313-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp313-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.cp313-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp313-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.cp313-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp313-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.cp313-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp313-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp313-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp313-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp313-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp313-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.cp313-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp313-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.cp313-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp313-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.cp313-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp313-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.cp313-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp313-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp313-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp313-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp313-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp313-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp313-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp313-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp313-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp313-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.cp313-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp313-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.cp313-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp313-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.cp313-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp313-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.cp313-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp313-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.cp313-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp313-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp313-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp313-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.cp313-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp313-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.cp313-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp313-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp313-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp313-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.cp313-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp313-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.cp313-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp313-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.cp313-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp313-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.cp313-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp313-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.cp313-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp313-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp313-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp313-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.cp313-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp313-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.cp313-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp313-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.cp313-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp313-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.cp313-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp313-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp313-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp313-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.cp313-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp313-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.cp313-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp313-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.cp313-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp313-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.cp313-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp313-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.cp313-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp313-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.cp313-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp313-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp313-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp313-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.cp313-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp313-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp313-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp313-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp313-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp313-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.cp313-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp313-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.cp313-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp313-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.cp313-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp313-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.cp313-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp313-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp313-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp313-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp313-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp313-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp313-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp313-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp313-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp313-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp313-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp313-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.cp313-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp313-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.cp313-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-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.cp313-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp313-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp313-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp313-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp313-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp313-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp313-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp313-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.cp313-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp313-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp313-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp313-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp313-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp313-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp313-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp313-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.cp313-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp313-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp313-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp313-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.cp313-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp313-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp313-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp313-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.cp313-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp313-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp313-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp313-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp313-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp313-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.cp313-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp313-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp313-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp313-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.cp313-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp313-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp313-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp313-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp313-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp313-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.cp313-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp313-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.cp313-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp313-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp313-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp313-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.cp313-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp313-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.cp313-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp313-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.cp313-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp313-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.cp313-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp313-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.cp313-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp313-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.cp313-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp313-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.cp313-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp313-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.cp313-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp313-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,1964 @@
1
+ # Temporary file separated from _distribution_infrastructure.py
2
+ # to simplify the diff during PR review.
3
+ from abc import ABC, abstractmethod
4
+
5
+ class _ProbabilityDistribution(ABC):
6
+ @abstractmethod
7
+ def support(self):
8
+ r"""Support of the random variable
9
+
10
+ The support of a random variable is set of all possible outcomes;
11
+ i.e., the subset of the domain of argument :math:`x` for which
12
+ the probability density function :math:`f(x)` is nonzero.
13
+
14
+ This function returns lower and upper bounds of the support.
15
+
16
+ Returns
17
+ -------
18
+ out : tuple of Array
19
+ The lower and upper bounds of the support.
20
+
21
+ See Also
22
+ --------
23
+ pdf
24
+
25
+ References
26
+ ----------
27
+ .. [1] Support (mathematics), *Wikipedia*,
28
+ https://en.wikipedia.org/wiki/Support_(mathematics)
29
+
30
+ Notes
31
+ -----
32
+ Suppose a continuous probability distribution has support ``(l, r)``.
33
+ The following table summarizes the value returned by several
34
+ methods when the argument is outside the support.
35
+
36
+ +----------------+---------------------+---------------------+
37
+ | Method | Value for ``x < l`` | Value for ``x > r`` |
38
+ +================+=====================+=====================+
39
+ | ``pdf(x)`` | 0 | 0 |
40
+ +----------------+---------------------+---------------------+
41
+ | ``logpdf(x)`` | -inf | -inf |
42
+ +----------------+---------------------+---------------------+
43
+ | ``cdf(x)`` | 0 | 1 |
44
+ +----------------+---------------------+---------------------+
45
+ | ``logcdf(x)`` | -inf | 0 |
46
+ +----------------+---------------------+---------------------+
47
+ | ``ccdf(x)`` | 1 | 0 |
48
+ +----------------+---------------------+---------------------+
49
+ | ``logccdf(x)`` | 0 | -inf |
50
+ +----------------+---------------------+---------------------+
51
+
52
+ For discrete distributions, the same table is applicable with
53
+ ``pmf`` and ``logpmf`` substituted for ``pdf`` and ``logpdf``.
54
+
55
+ For the ``cdf`` and related methods of continuous distributions, the
56
+ inequality need not be strict; i.e. the tabulated value is returned
57
+ when the method is evaluated *at* the corresponding boundary.
58
+
59
+ The following table summarizes the value returned by the inverse
60
+ methods for arguments ``0`` and ``1``, whether the distribution
61
+ is continuous or discrete.
62
+
63
+ +-------------+-----------+-----------+
64
+ | Method | ``x = 0`` | ``x = 1`` |
65
+ +=============+===========+===========+
66
+ | ``icdf(x)`` | ``l`` | ``r`` |
67
+ +-------------+-----------+-----------+
68
+ | ``icdf(x)`` | ``r`` | ``l`` |
69
+ +-------------+-----------+-----------+
70
+
71
+ For the inverse log-functions, the same values are returned
72
+ for ``x = log(0)`` and ``x = log(1)``. All inverse functions return
73
+ ``nan`` when evaluated at an argument outside the domain ``0`` to ``1``.
74
+
75
+ Examples
76
+ --------
77
+ Instantiate a distribution with the desired parameters:
78
+
79
+ >>> from scipy import stats
80
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
81
+
82
+ Retrieve the support of the distribution:
83
+
84
+ >>> X.support()
85
+ (-0.5, 0.5)
86
+
87
+ For a distribution with infinite support,
88
+
89
+ >>> X = stats.Normal()
90
+ >>> X.support()
91
+ (-inf, inf)
92
+
93
+ Due to underflow, the numerical value returned by the PDF may be zero
94
+ even for arguments within the support, even if the true value is
95
+ nonzero. In such cases, the log-PDF may be useful.
96
+
97
+ >>> X.pdf([-100., 100.])
98
+ array([0., 0.])
99
+ >>> X.logpdf([-100., 100.])
100
+ array([-5000.91893853, -5000.91893853])
101
+
102
+ Use cases for the log-CDF and related methods are analogous.
103
+
104
+ """
105
+ raise NotImplementedError()
106
+
107
+ @abstractmethod
108
+ def sample(self, shape, *, method, rng):
109
+ r"""Random sample from the distribution.
110
+
111
+ Parameters
112
+ ----------
113
+ shape : tuple of ints, default: ()
114
+ The shape of the sample to draw. If the parameters of the distribution
115
+ underlying the random variable are arrays of shape ``param_shape``,
116
+ the output array will be of shape ``shape + param_shape``.
117
+ method : {None, 'formula', 'inverse_transform'}
118
+ The strategy used to produce the sample. By default (``None``),
119
+ the infrastructure chooses between the following options,
120
+ listed in order of precedence.
121
+
122
+ - ``'formula'``: an implementation specific to the distribution
123
+ - ``'inverse_transform'``: generate a uniformly distributed sample and
124
+ return the inverse CDF at these arguments.
125
+
126
+ Not all `method` options are available for all distributions.
127
+ If the selected `method` is not available, a `NotImplementedError``
128
+ will be raised.
129
+ rng : `numpy.random.Generator` or `scipy.stats.QMCEngine`, optional
130
+ Pseudo- or quasi-random number generator state. When `rng` is None,
131
+ a new `numpy.random.Generator` is created using entropy from the
132
+ operating system. Types other than `numpy.random.Generator` and
133
+ `scipy.stats.QMCEngine` are passed to `numpy.random.default_rng`
134
+ to instantiate a ``Generator``.
135
+
136
+ If `rng` is an instance of `scipy.stats.QMCEngine` configured to use
137
+ scrambling and `shape` is not empty, then each slice along the zeroth
138
+ axis of the result is a "quasi-independent", low-discrepancy sequence;
139
+ that is, they are distinct sequences that can be treated as statistically
140
+ independent for most practical purposes. Separate calls to `sample`
141
+ produce new quasi-independent, low-discrepancy sequences.
142
+
143
+ References
144
+ ----------
145
+ .. [1] Sampling (statistics), *Wikipedia*,
146
+ https://en.wikipedia.org/wiki/Sampling_(statistics)
147
+
148
+ Examples
149
+ --------
150
+ Instantiate a distribution with the desired parameters:
151
+
152
+ >>> import numpy as np
153
+ >>> from scipy import stats
154
+ >>> X = stats.Uniform(a=0., b=1.)
155
+
156
+ Generate a pseudorandom sample:
157
+
158
+ >>> x = X.sample((1000, 1))
159
+ >>> octiles = (np.arange(8) + 1) / 8
160
+ >>> np.count_nonzero(x <= octiles, axis=0)
161
+ array([ 148, 263, 387, 516, 636, 751, 865, 1000]) # may vary
162
+
163
+ >>> X = stats.Uniform(a=np.zeros((3, 1)), b=np.ones(2))
164
+ >>> X.a.shape,
165
+ (3, 2)
166
+ >>> x = X.sample(shape=(5, 4))
167
+ >>> x.shape
168
+ (5, 4, 3, 2)
169
+
170
+ """
171
+ raise NotImplementedError()
172
+
173
+ @abstractmethod
174
+ def moment(self, order, kind, *, method):
175
+ r"""Raw, central, or standard moment of positive integer order.
176
+
177
+ In terms of probability density function :math:`f(x)` and support
178
+ :math:`\chi`, the "raw" moment (about the origin) of order :math:`n` of
179
+ a continuous random variable :math:`X` is:
180
+
181
+ .. math::
182
+
183
+ \mu'_n(X) = \int_{\chi} x^n f(x) dx
184
+
185
+ The "central" moment is the raw moment taken about the mean,
186
+ :math:`\mu = \mu'_1`:
187
+
188
+ .. math::
189
+
190
+ \mu_n(X) = \int_{\chi} (x - \mu) ^n f(x) dx
191
+
192
+ The "standardized" moment is the central moment normalized by the
193
+ :math:`n^\text{th}` power of the standard deviation
194
+ :math:`\sigma = \sqrt{\mu_2}` to produce a scale invariant quantity:
195
+
196
+ .. math::
197
+
198
+ \tilde{\mu}_n(X) = \frac{\mu_n(X)}
199
+ {\sigma^n}
200
+
201
+ The definitions for discrete random variables are analogous, with
202
+ sums over the support replacing the integrals.
203
+
204
+ Parameters
205
+ ----------
206
+ order : int
207
+ The integer order of the moment; i.e. :math:`n` in the formulae above.
208
+ kind : {'raw', 'central', 'standardized'}
209
+ Whether to return the raw (default), central, or standardized moment
210
+ defined above.
211
+ method : {None, 'formula', 'general', 'transform', 'normalize', 'quadrature', 'cache'}
212
+ The strategy used to evaluate the moment. By default (``None``),
213
+ the infrastructure chooses between the following options,
214
+ listed in order of precedence.
215
+
216
+ - ``'cache'``: use the value of the moment most recently calculated
217
+ via another method
218
+ - ``'formula'``: use a formula for the moment itself
219
+ - ``'general'``: use a general result that is true for all distributions
220
+ with finite moments; for instance, the zeroth raw moment is
221
+ identically 1
222
+ - ``'transform'``: transform a raw moment to a central moment or
223
+ vice versa (see Notes)
224
+ - ``'normalize'``: normalize a central moment to get a standardized
225
+ or vice versa
226
+ - ``'quadrature'``: numerically integrate (or, in the discrete case, sum)
227
+ according to the definition
228
+
229
+ Not all `method` options are available for all orders, kinds, and
230
+ distributions. If the selected `method` is not available, a
231
+ ``NotImplementedError`` will be raised.
232
+
233
+ Returns
234
+ -------
235
+ out : array
236
+ The moment of the random variable of the specified order and kind.
237
+
238
+ See Also
239
+ --------
240
+ pdf
241
+ mean
242
+ variance
243
+ standard_deviation
244
+ skewness
245
+ kurtosis
246
+
247
+ Notes
248
+ -----
249
+ Not all distributions have finite moments of all orders; moments of some
250
+ orders may be undefined or infinite. If a formula for the moment is not
251
+ specifically implemented for the chosen distribution, SciPy will attempt
252
+ to compute the moment via a generic method, which may yield a finite
253
+ result where none exists. This is not a critical bug, but an opportunity
254
+ for an enhancement.
255
+
256
+ The definition of a raw moment in the summary is specific to the raw moment
257
+ about the origin. The raw moment about any point :math:`a` is:
258
+
259
+ .. math::
260
+
261
+ E[(X-a)^n] = \int_{\chi} (x-a)^n f(x) dx
262
+
263
+ In this notation, a raw moment about the origin is :math:`\mu'_n = E[x^n]`,
264
+ and a central moment is :math:`\mu_n = E[(x-\mu)^n]`, where :math:`\mu`
265
+ is the first raw moment; i.e. the mean.
266
+
267
+ The ``'transform'`` method takes advantage of the following relationships
268
+ between moments taken about different points :math:`a` and :math:`b`.
269
+
270
+ .. math::
271
+
272
+ E[(X-b)^n] = \sum_{i=0}^n E[(X-a)^i] {n \choose i} (a - b)^{n-i}
273
+
274
+ For instance, to transform the raw moment to the central moment, we let
275
+ :math:`b = \mu` and :math:`a = 0`.
276
+
277
+ The distribution infrastructure provides flexibility for distribution
278
+ authors to implement separate formulas for raw moments, central moments,
279
+ and standardized moments of any order. By default, the moment of the
280
+ desired order and kind is evaluated from the formula if such a formula
281
+ is available; if not, the infrastructure uses any formulas that are
282
+ available rather than resorting directly to numerical integration.
283
+ For instance, if formulas for the first three raw moments are
284
+ available and the third standardized moments is desired, the
285
+ infrastructure will evaluate the raw moments and perform the transforms
286
+ and standardization required. The decision tree is somewhat complex,
287
+ but the strategy for obtaining a moment of a given order and kind
288
+ (possibly as an intermediate step due to the recursive nature of the
289
+ transform formula above) roughly follows this order of priority:
290
+
291
+ #. Use cache (if order of same moment and kind has been calculated)
292
+ #. Use formula (if available)
293
+ #. Transform between raw and central moment and/or normalize to convert
294
+ between central and standardized moments (if efficient)
295
+ #. Use a generic result true for most distributions (if available)
296
+ #. Use quadrature
297
+
298
+ References
299
+ ----------
300
+ .. [1] Moment, *Wikipedia*,
301
+ https://en.wikipedia.org/wiki/Moment_(mathematics)
302
+
303
+ Examples
304
+ --------
305
+ Instantiate a distribution with the desired parameters:
306
+
307
+ >>> from scipy import stats
308
+ >>> X = stats.Normal(mu=1., sigma=2.)
309
+
310
+ Evaluate the first raw moment:
311
+
312
+ >>> X.moment(order=1, kind='raw')
313
+ 1.0
314
+ >>> X.moment(order=1, kind='raw') == X.mean() == X.mu
315
+ True
316
+
317
+ Evaluate the second central moment:
318
+
319
+ >>> X.moment(order=2, kind='central')
320
+ 4.0
321
+ >>> X.moment(order=2, kind='central') == X.variance() == X.sigma**2
322
+ True
323
+
324
+ Evaluate the fourth standardized moment:
325
+
326
+ >>> X.moment(order=4, kind='standardized')
327
+ 3.0
328
+ >>> X.moment(order=4, kind='standardized') == X.kurtosis(convention='non-excess')
329
+ True
330
+
331
+ """ # noqa:E501
332
+ raise NotImplementedError()
333
+
334
+ @abstractmethod
335
+ def mean(self, *, method):
336
+ r"""Mean (raw first moment about the origin)
337
+
338
+ Parameters
339
+ ----------
340
+ method : {None, 'formula', 'transform', 'quadrature', 'cache'}
341
+ Method used to calculate the raw first moment. Not
342
+ all methods are available for all distributions. See
343
+ `moment` for details.
344
+
345
+ See Also
346
+ --------
347
+ moment
348
+ median
349
+ mode
350
+
351
+ References
352
+ ----------
353
+ .. [1] Mean, *Wikipedia*,
354
+ https://en.wikipedia.org/wiki/Mean#Mean_of_a_probability_distribution
355
+
356
+ Examples
357
+ --------
358
+ Instantiate a distribution with the desired parameters:
359
+
360
+ >>> from scipy import stats
361
+ >>> X = stats.Normal(mu=1., sigma=2.)
362
+
363
+ Evaluate the variance:
364
+
365
+ >>> X.mean()
366
+ 1.0
367
+ >>> X.mean() == X.moment(order=1, kind='raw') == X.mu
368
+ True
369
+
370
+ """
371
+ raise NotImplementedError()
372
+
373
+ @abstractmethod
374
+ def median(self, *, method):
375
+ r"""Median (50th percentile)
376
+
377
+ If a continuous random variable :math:`X` has probability :math:`0.5` of
378
+ taking on a value less than :math:`m`, then :math:`m` is the median.
379
+
380
+ More generally, a median is a value :math:`m` for which:
381
+
382
+ .. math::
383
+
384
+ P(X ≤ m) ≤ 0.5 ≥ P(X ≥ m)
385
+
386
+ For discrete random variables, the median may not be unique, in which
387
+ case the smallest value satisfying the definition is reported.
388
+
389
+ Parameters
390
+ ----------
391
+ method : {None, 'formula', 'icdf'}
392
+ The strategy used to evaluate the median.
393
+ By default (``None``), the infrastructure chooses between the
394
+ following options, listed in order of precedence.
395
+
396
+ - ``'formula'``: use a formula for the median
397
+ - ``'icdf'``: evaluate the inverse CDF of 0.5
398
+
399
+ Not all `method` options are available for all distributions.
400
+ If the selected `method` is not available, a ``NotImplementedError``
401
+ will be raised.
402
+
403
+ Returns
404
+ -------
405
+ out : array
406
+ The median
407
+
408
+ See Also
409
+ --------
410
+ mean
411
+ mode
412
+ icdf
413
+
414
+ References
415
+ ----------
416
+ .. [1] Median, *Wikipedia*,
417
+ https://en.wikipedia.org/wiki/Median#Probability_distributions
418
+
419
+ Examples
420
+ --------
421
+ Instantiate a distribution with the desired parameters:
422
+
423
+ >>> from scipy import stats
424
+ >>> X = stats.Uniform(a=0., b=10.)
425
+
426
+ Compute the median:
427
+
428
+ >>> X.median()
429
+ np.float64(5.0)
430
+ >>> X.median() == X.icdf(0.5) == X.iccdf(0.5)
431
+ True
432
+
433
+ """
434
+ raise NotImplementedError()
435
+
436
+ @abstractmethod
437
+ def mode(self, *, method):
438
+ r"""Mode (most likely value)
439
+
440
+ Informally, the mode is a value that a random variable has the highest
441
+ probability (density) of assuming. That is, the mode is the element of
442
+ the support :math:`\chi` that maximizes the probability density (or mass,
443
+ for discrete random variables) function :math:`f(x)`:
444
+
445
+ .. math::
446
+
447
+ \text{mode} = \arg\max_{x \in \chi} f(x)
448
+
449
+ Parameters
450
+ ----------
451
+ method : {None, 'formula', 'optimization'}
452
+ The strategy used to evaluate the mode.
453
+ By default (``None``), the infrastructure chooses between the
454
+ following options, listed in order of precedence.
455
+
456
+ - ``'formula'``: use a formula for the median
457
+ - ``'optimization'``: numerically maximize the PDF/PMF
458
+
459
+ Not all `method` options are available for all distributions.
460
+ If the selected `method` is not available, a ``NotImplementedError``
461
+ will be raised.
462
+
463
+ Returns
464
+ -------
465
+ out : array
466
+ The mode
467
+
468
+ See Also
469
+ --------
470
+ mean
471
+ median
472
+ pdf
473
+
474
+ Notes
475
+ -----
476
+ For some distributions
477
+
478
+ #. the mode is not unique (e.g. the uniform distribution);
479
+ #. the PDF has one or more singularities, and it is debatable whether
480
+ a singularity is considered to be in the domain and called the mode
481
+ (e.g. the gamma distribution with shape parameter less than 1); and/or
482
+ #. the probability density function may have one or more local maxima
483
+ that are not a global maximum (e.g. mixture distributions).
484
+
485
+ In such cases, `mode` will
486
+
487
+ #. return a single value,
488
+ #. consider the mode to occur at a singularity, and/or
489
+ #. return a local maximum which may or may not be a global maximum.
490
+
491
+ If a formula for the mode is not specifically implemented for the
492
+ chosen distribution, SciPy will attempt to compute the mode
493
+ numerically, which may not meet the user's preferred definition of a
494
+ mode. In such cases, the user is encouraged to subclass the
495
+ distribution and override ``mode``.
496
+
497
+ References
498
+ ----------
499
+ .. [1] Mode (statistics), *Wikipedia*,
500
+ https://en.wikipedia.org/wiki/Mode_(statistics)
501
+
502
+ Examples
503
+ --------
504
+ Instantiate a distribution with the desired parameters:
505
+
506
+ >>> from scipy import stats
507
+ >>> X = stats.Normal(mu=1., sigma=2.)
508
+
509
+ Evaluate the mode:
510
+
511
+ >>> X.mode()
512
+ 1.0
513
+
514
+ If the mode is not uniquely defined, ``mode`` nonetheless returns a
515
+ single value.
516
+
517
+ >>> X = stats.Uniform(a=0., b=1.)
518
+ >>> X.mode()
519
+ 0.5
520
+
521
+ If this choice does not satisfy your requirements, subclass the
522
+ distribution and override ``mode``:
523
+
524
+ >>> class BetterUniform(stats.Uniform):
525
+ ... def mode(self):
526
+ ... return self.b
527
+ >>> X = BetterUniform(a=0., b=1.)
528
+ >>> X.mode()
529
+ 1.0
530
+
531
+ """
532
+ raise NotImplementedError()
533
+
534
+ @abstractmethod
535
+ def variance(self, *, method):
536
+ r"""Variance (central second moment)
537
+
538
+ Parameters
539
+ ----------
540
+ method : {None, 'formula', 'transform', 'normalize', 'quadrature', 'cache'}
541
+ Method used to calculate the central second moment. Not
542
+ all methods are available for all distributions. See
543
+ `moment` for details.
544
+
545
+ See Also
546
+ --------
547
+ moment
548
+ standard_deviation
549
+ mean
550
+
551
+ References
552
+ ----------
553
+ .. [1] Variance, *Wikipedia*,
554
+ https://en.wikipedia.org/wiki/Variance#Absolutely_continuous_random_variable
555
+
556
+ Examples
557
+ --------
558
+ Instantiate a distribution with the desired parameters:
559
+
560
+ >>> from scipy import stats
561
+ >>> X = stats.Normal(mu=1., sigma=2.)
562
+
563
+ Evaluate the variance:
564
+
565
+ >>> X.variance()
566
+ 4.0
567
+ >>> X.variance() == X.moment(order=2, kind='central') == X.sigma**2
568
+ True
569
+
570
+ """
571
+ raise NotImplementedError()
572
+
573
+ @abstractmethod
574
+ def standard_deviation(self, *, method):
575
+ r"""Standard deviation (square root of the second central moment)
576
+
577
+ Parameters
578
+ ----------
579
+ method : {None, 'formula', 'transform', 'normalize', 'quadrature', 'cache'}
580
+ Method used to calculate the central second moment. Not
581
+ all methods are available for all distributions. See
582
+ `moment` for details.
583
+
584
+ See Also
585
+ --------
586
+ variance
587
+ mean
588
+ moment
589
+
590
+ References
591
+ ----------
592
+ .. [1] Standard deviation, *Wikipedia*,
593
+ https://en.wikipedia.org/wiki/Standard_deviation#Definition_of_population_values
594
+
595
+ Examples
596
+ --------
597
+ Instantiate a distribution with the desired parameters:
598
+
599
+ >>> from scipy import stats
600
+ >>> X = stats.Normal(mu=1., sigma=2.)
601
+
602
+ Evaluate the standard deviation:
603
+
604
+ >>> X.standard_deviation()
605
+ 2.0
606
+ >>> X.standard_deviation() == X.moment(order=2, kind='central')**0.5 == X.sigma
607
+ True
608
+
609
+ """
610
+ raise NotImplementedError()
611
+
612
+ @abstractmethod
613
+ def skewness(self, *, method):
614
+ r"""Skewness (standardized third moment)
615
+
616
+ Parameters
617
+ ----------
618
+ method : {None, 'formula', 'general', 'transform', 'normalize', 'cache'}
619
+ Method used to calculate the standardized third moment. Not
620
+ all methods are available for all distributions. See
621
+ `moment` for details.
622
+
623
+ See Also
624
+ --------
625
+ moment
626
+ mean
627
+ variance
628
+
629
+ References
630
+ ----------
631
+ .. [1] Skewness, *Wikipedia*,
632
+ https://en.wikipedia.org/wiki/Skewness
633
+
634
+ Examples
635
+ --------
636
+ Instantiate a distribution with the desired parameters:
637
+
638
+ >>> from scipy import stats
639
+ >>> X = stats.Normal(mu=1., sigma=2.)
640
+
641
+ Evaluate the skewness:
642
+
643
+ >>> X.skewness()
644
+ 0.0
645
+ >>> X.skewness() == X.moment(order=3, kind='standardized')
646
+ True
647
+
648
+ """
649
+ raise NotImplementedError()
650
+
651
+ @abstractmethod
652
+ def kurtosis(self, *, method):
653
+ r"""Kurtosis (standardized fourth moment)
654
+
655
+ By default, this is the standardized fourth moment, also known as the
656
+ "non-excess" or "Pearson" kurtosis (e.g. the kurtosis of the normal
657
+ distribution is 3). The "excess" or "Fisher" kurtosis (the standardized
658
+ fourth moment minus 3) is available via the `convention` parameter.
659
+
660
+ Parameters
661
+ ----------
662
+ method : {None, 'formula', 'general', 'transform', 'normalize', 'cache'}
663
+ Method used to calculate the standardized fourth moment. Not
664
+ all methods are available for all distributions. See
665
+ `moment` for details.
666
+ convention : {'non-excess', 'excess'}
667
+ Two distinct conventions are available:
668
+
669
+ - ``'non-excess'``: the standardized fourth moment (Pearson's kurtosis)
670
+ - ``'excess'``: the standardized fourth moment minus 3 (Fisher's kurtosis)
671
+
672
+ The default is ``'non-excess'``.
673
+
674
+ See Also
675
+ --------
676
+ moment
677
+ mean
678
+ variance
679
+
680
+ References
681
+ ----------
682
+ .. [1] Kurtosis, *Wikipedia*,
683
+ https://en.wikipedia.org/wiki/Kurtosis
684
+
685
+ Examples
686
+ --------
687
+ Instantiate a distribution with the desired parameters:
688
+
689
+ >>> from scipy import stats
690
+ >>> X = stats.Normal(mu=1., sigma=2.)
691
+
692
+ Evaluate the kurtosis:
693
+
694
+ >>> X.kurtosis()
695
+ 3.0
696
+ >>> (X.kurtosis()
697
+ ... == X.kurtosis(convention='excess') + 3.
698
+ ... == X.moment(order=4, kind='standardized'))
699
+ True
700
+
701
+ """
702
+ raise NotImplementedError()
703
+
704
+ @abstractmethod
705
+ def pdf(self, x, /, *, method):
706
+ r"""Probability density function
707
+
708
+ The probability density function ("PDF"), denoted :math:`f(x)`, is the
709
+ probability *per unit length* that the random variable will assume the
710
+ value :math:`x`. Mathematically, it can be defined as the derivative
711
+ of the cumulative distribution function :math:`F(x)`:
712
+
713
+ .. math::
714
+
715
+ f(x) = \frac{d}{dx} F(x)
716
+
717
+ `pdf` accepts `x` for :math:`x`.
718
+
719
+ Parameters
720
+ ----------
721
+ x : array_like
722
+ The argument of the PDF.
723
+ method : {None, 'formula', 'logexp'}
724
+ The strategy used to evaluate the PDF. By default (``None``), the
725
+ infrastructure chooses between the following options, listed in
726
+ order of precedence.
727
+
728
+ - ``'formula'``: use a formula for the PDF itself
729
+ - ``'logexp'``: evaluate the log-PDF and exponentiate
730
+
731
+ Not all `method` options are available for all distributions.
732
+ If the selected `method` is not available, a ``NotImplementedError``
733
+ will be raised.
734
+
735
+ Returns
736
+ -------
737
+ out : array
738
+ The PDF evaluated at the argument `x`.
739
+
740
+ See Also
741
+ --------
742
+ cdf
743
+ logpdf
744
+
745
+ Notes
746
+ -----
747
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
748
+ By definition of the support, the PDF evaluates to its minimum value
749
+ of :math:`0` outside the support; i.e. for :math:`x < l` or
750
+ :math:`x > r`. The maximum of the PDF may be less than or greater than
751
+ :math:`1`; since the value is a probability *density*, only its integral
752
+ over the support must equal :math:`1`.
753
+
754
+ For discrete distributions, `pdf` returns ``inf`` at supported points
755
+ and ``0`` elsewhere.
756
+
757
+ References
758
+ ----------
759
+ .. [1] Probability density function, *Wikipedia*,
760
+ https://en.wikipedia.org/wiki/Probability_density_function
761
+
762
+ Examples
763
+ --------
764
+ Instantiate a distribution with the desired parameters:
765
+
766
+ >>> from scipy import stats
767
+ >>> X = stats.Uniform(a=-1., b=1.)
768
+
769
+ Evaluate the PDF at the desired argument:
770
+
771
+ >>> X.pdf(0.25)
772
+ 0.5
773
+
774
+ """
775
+ raise NotImplementedError()
776
+
777
+ @abstractmethod
778
+ def logpdf(self, x, /, *, method):
779
+ r"""Log of the probability density function
780
+
781
+ The probability density function ("PDF"), denoted :math:`f(x)`, is the
782
+ probability *per unit length* that the random variable will assume the
783
+ value :math:`x`. Mathematically, it can be defined as the derivative
784
+ of the cumulative distribution function :math:`F(x)`:
785
+
786
+ .. math::
787
+
788
+ f(x) = \frac{d}{dx} F(x)
789
+
790
+ `logpdf` computes the logarithm of the probability density function
791
+ ("log-PDF"), :math:`\log(f(x))`, but it may be numerically favorable
792
+ compared to the naive implementation (computing :math:`f(x)` and
793
+ taking the logarithm).
794
+
795
+ `logpdf` accepts `x` for :math:`x`.
796
+
797
+ Parameters
798
+ ----------
799
+ x : array_like
800
+ The argument of the log-PDF.
801
+ method : {None, 'formula', 'logexp'}
802
+ The strategy used to evaluate the log-PDF. By default (``None``), the
803
+ infrastructure chooses between the following options, listed in order
804
+ of precedence.
805
+
806
+ - ``'formula'``: use a formula for the log-PDF itself
807
+ - ``'logexp'``: evaluate the PDF and takes its logarithm
808
+
809
+ Not all `method` options are available for all distributions.
810
+ If the selected `method` is not available, a ``NotImplementedError``
811
+ will be raised.
812
+
813
+ Returns
814
+ -------
815
+ out : array
816
+ The log-PDF evaluated at the argument `x`.
817
+
818
+ See Also
819
+ --------
820
+ pdf
821
+ logcdf
822
+
823
+ Notes
824
+ -----
825
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
826
+ By definition of the support, the log-PDF evaluates to its minimum value
827
+ of :math:`-\infty` (i.e. :math:`\log(0)`) outside the support; i.e. for
828
+ :math:`x < l` or :math:`x > r`. The maximum of the log-PDF may be less
829
+ than or greater than :math:`\log(1) = 0` because the maximum of the PDF
830
+ can be any positive real.
831
+
832
+ For distributions with infinite support, it is common for `pdf` to return
833
+ a value of ``0`` when the argument is theoretically within the support;
834
+ this can occur because the true value of the PDF is too small to be
835
+ represented by the chosen dtype. The log-PDF, however, will often be finite
836
+ (not ``-inf``) over a much larger domain. Consequently, it may be preferred
837
+ to work with the logarithms of probabilities and probability densities to
838
+ avoid underflow.
839
+
840
+ For discrete distributions, `logpdf` returns ``inf`` at supported points and
841
+ ``-inf`` (``log(0)``) elsewhere.
842
+
843
+ References
844
+ ----------
845
+ .. [1] Probability density function, *Wikipedia*,
846
+ https://en.wikipedia.org/wiki/Probability_density_function
847
+
848
+ Examples
849
+ --------
850
+ Instantiate a distribution with the desired parameters:
851
+
852
+ >>> import numpy as np
853
+ >>> from scipy import stats
854
+ >>> X = stats.Uniform(a=-1.0, b=1.0)
855
+
856
+ Evaluate the log-PDF at the desired argument:
857
+
858
+ >>> X.logpdf(0.5)
859
+ -0.6931471805599453
860
+ >>> np.allclose(X.logpdf(0.5), np.log(X.pdf(0.5)))
861
+ True
862
+
863
+ """
864
+ raise NotImplementedError()
865
+
866
+ def pmf(self, x, /, *, method=None):
867
+ r"""Probability mass function
868
+
869
+ The probability mass function ("PMF"), denoted :math:`f(x)`, is the
870
+ probability that the random variable :math:`X` will assume the value :math:`x`.
871
+
872
+ .. math::
873
+
874
+ f(x) = P(X = x)
875
+
876
+ `pmf` accepts `x` for :math:`x`.
877
+
878
+ Parameters
879
+ ----------
880
+ x : array_like
881
+ The argument of the PMF.
882
+ method : {None, 'formula', 'logexp'}
883
+ The strategy used to evaluate the PMF. By default (``None``), the
884
+ infrastructure chooses between the following options, listed in
885
+ order of precedence.
886
+
887
+ - ``'formula'``: use a formula for the PMF itself
888
+ - ``'logexp'``: evaluate the log-PMF and exponentiate
889
+
890
+ Not all `method` options are available for all distributions.
891
+ If the selected `method` is not available, a ``NotImplementedError``
892
+ will be raised.
893
+
894
+ Returns
895
+ -------
896
+ out : array
897
+ The PMF evaluated at the argument `x`.
898
+
899
+ See Also
900
+ --------
901
+ cdf
902
+ logpmf
903
+
904
+ Notes
905
+ -----
906
+ Suppose a discrete probability distribution has support over the integers
907
+ :math:`{l, l+1, ..., r-1, r}`.
908
+ By definition of the support, the PMF evaluates to its minimum value
909
+ of :math:`0` for non-integral :math:`x` and for :math:`x` outside the support;
910
+ i.e. for :math:`x < l` or :math:`x > r`.
911
+
912
+ For continuous distributions, `pmf` returns ``0`` at all real arguments.
913
+
914
+ References
915
+ ----------
916
+ .. [1] Probability mass function, *Wikipedia*,
917
+ https://en.wikipedia.org/wiki/Probability_mass_function
918
+
919
+ Examples
920
+ --------
921
+ Instantiate a distribution with the desired parameters:
922
+
923
+ >>> from scipy import stats
924
+ >>> X = stats.Binomial(n=10, p=0.5)
925
+
926
+ Evaluate the PMF at the desired argument:
927
+
928
+ >>> X.pmf(5)
929
+ np.float64(0.24609375)
930
+
931
+ """
932
+ raise NotImplementedError()
933
+
934
+ def logpmf(self, x, /, *, method=None):
935
+ r"""Log of the probability mass function
936
+
937
+ The probability mass function ("PMF"), denoted :math:`f(x)`, is the
938
+ probability that the random variable :math:`X` will assume the value :math:`x`.
939
+
940
+ .. math::
941
+
942
+ f(x) = \frac{d}{dx} F(x)
943
+
944
+ `logpmf` computes the logarithm of the probability mass function
945
+ ("log-PMF"), :math:`\log(f(x))`, but it may be numerically favorable
946
+ compared to the naive implementation (computing :math:`f(x)` and
947
+ taking the logarithm).
948
+
949
+ `logpmf` accepts `x` for :math:`x`.
950
+
951
+ Parameters
952
+ ----------
953
+ x : array_like
954
+ The argument of the log-PMF.
955
+ method : {None, 'formula', 'logexp'}
956
+ The strategy used to evaluate the log-PMF. By default (``None``), the
957
+ infrastructure chooses between the following options, listed in order
958
+ of precedence.
959
+
960
+ - ``'formula'``: use a formula for the log-PMF itself
961
+ - ``'logexp'``: evaluate the PMF and takes its logarithm
962
+
963
+ Not all `method` options are available for all distributions.
964
+ If the selected `method` is not available, a ``NotImplementedError``
965
+ will be raised.
966
+
967
+ Returns
968
+ -------
969
+ out : array
970
+ The log-PMF evaluated at the argument `x`.
971
+
972
+ See Also
973
+ --------
974
+ pmf
975
+ logcdf
976
+
977
+ Notes
978
+ -----
979
+ Suppose a discrete probability distribution has support over the integers
980
+ :math:`{l, l+1, ..., r-1, r}`.
981
+ By definition of the support, the log-PMF evaluates to its minimum value
982
+ of :math:`-\infty` (i.e. :math:`\log(0)`) for non-integral :math:`x` and
983
+ for :math:`x` outside the support; i.e. for :math:`x < l` or :math:`x > r`.
984
+
985
+ For distributions with infinite support, it is common for `pmf` to return
986
+ a value of ``0`` when the argument is theoretically within the support;
987
+ this can occur because the true value of the PMF is too small to be
988
+ represented by the chosen dtype. The log-PMF, however, will often be finite
989
+ (not ``-inf``) over a much larger domain. Consequently, it may be preferred
990
+ to work with the logarithms of probabilities and probability densities to
991
+ avoid underflow.
992
+
993
+ References
994
+ ----------
995
+ .. [1] Probability density function, *Wikipedia*,
996
+ https://en.wikipedia.org/wiki/Probability_density_function
997
+
998
+ Examples
999
+ --------
1000
+ Instantiate a distribution with the desired parameters:
1001
+
1002
+ >>> import numpy as np
1003
+ >>> from scipy import stats
1004
+ >>> X = stats.Binomial(n=10, p=0.5)
1005
+
1006
+ Evaluate the log-PMF at the desired argument:
1007
+
1008
+ >>> X.logpmf(5)
1009
+ np.float64(-1.4020427180880297)
1010
+ >>> np.allclose(X.logpmf(5), np.log(X.pmf(5)))
1011
+ True
1012
+
1013
+ """
1014
+ raise NotImplementedError()
1015
+
1016
+ @abstractmethod
1017
+ def cdf(self, x, y, /, *, method):
1018
+ r"""Cumulative distribution function
1019
+
1020
+ The cumulative distribution function ("CDF"), denoted :math:`F(x)`, is
1021
+ the probability the random variable :math:`X` will assume a value
1022
+ less than or equal to :math:`x`:
1023
+
1024
+ .. math::
1025
+
1026
+ F(x) = P(X ≤ x)
1027
+
1028
+ A two-argument variant of this function is also defined as the
1029
+ probability the random variable :math:`X` will assume a value between
1030
+ :math:`x` and :math:`y`.
1031
+
1032
+ .. math::
1033
+
1034
+ F(x, y) = P(x ≤ X ≤ y)
1035
+
1036
+ `cdf` accepts `x` for :math:`x` and `y` for :math:`y`.
1037
+
1038
+ Parameters
1039
+ ----------
1040
+ x, y : array_like
1041
+ The arguments of the CDF. `x` is required; `y` is optional.
1042
+ method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'subtraction'}
1043
+ The strategy used to evaluate the CDF.
1044
+ By default (``None``), the one-argument form of the function
1045
+ chooses between the following options, listed in order of precedence.
1046
+
1047
+ - ``'formula'``: use a formula for the CDF itself
1048
+ - ``'logexp'``: evaluate the log-CDF and exponentiate
1049
+ - ``'complement'``: evaluate the CCDF and take the complement
1050
+ - ``'quadrature'``: numerically integrate the PDF (or, in the discrete
1051
+ case, sum the PMF)
1052
+
1053
+ In place of ``'complement'``, the two-argument form accepts:
1054
+
1055
+ - ``'subtraction'``: compute the CDF at each argument and take
1056
+ the difference.
1057
+
1058
+ Not all `method` options are available for all distributions.
1059
+ If the selected `method` is not available, a ``NotImplementedError``
1060
+ will be raised.
1061
+
1062
+ Returns
1063
+ -------
1064
+ out : array
1065
+ The CDF evaluated at the provided argument(s).
1066
+
1067
+ See Also
1068
+ --------
1069
+ logcdf
1070
+ ccdf
1071
+
1072
+ Notes
1073
+ -----
1074
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
1075
+ The CDF :math:`F(x)` is related to the probability density function
1076
+ :math:`f(x)` by:
1077
+
1078
+ .. math::
1079
+
1080
+ F(x) = \int_l^x f(u) du
1081
+
1082
+ The two argument version is:
1083
+
1084
+ .. math::
1085
+
1086
+ F(x, y) = \int_x^y f(u) du = F(y) - F(x)
1087
+
1088
+ The CDF evaluates to its minimum value of :math:`0` for :math:`x ≤ l`
1089
+ and its maximum value of :math:`1` for :math:`x ≥ r`.
1090
+
1091
+ Suppose a discrete probability distribution has support :math:`[l, r]`.
1092
+ The CDF :math:`F(x)` is related to the probability mass function
1093
+ :math:`f(x)` by:
1094
+
1095
+ .. math::
1096
+
1097
+ F(x) = \sum_{u=l}^{\lfloor x \rfloor} f(u)
1098
+
1099
+ The CDF evaluates to its minimum value of :math:`0` for :math:`x < l`
1100
+ and its maximum value of :math:`1` for :math:`x ≥ r`.
1101
+
1102
+ The CDF is also known simply as the "distribution function".
1103
+
1104
+ References
1105
+ ----------
1106
+ .. [1] Cumulative distribution function, *Wikipedia*,
1107
+ https://en.wikipedia.org/wiki/Cumulative_distribution_function
1108
+
1109
+ Examples
1110
+ --------
1111
+ Instantiate a distribution with the desired parameters:
1112
+
1113
+ >>> from scipy import stats
1114
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1115
+
1116
+ Evaluate the CDF at the desired argument:
1117
+
1118
+ >>> X.cdf(0.25)
1119
+ 0.75
1120
+
1121
+ Evaluate the cumulative probability between two arguments:
1122
+
1123
+ >>> X.cdf(-0.25, 0.25) == X.cdf(0.25) - X.cdf(-0.25)
1124
+ True
1125
+
1126
+ """ # noqa: E501
1127
+ raise NotImplementedError()
1128
+
1129
+ @abstractmethod
1130
+ def icdf(self, p, /, *, method):
1131
+ r"""Inverse of the cumulative distribution function.
1132
+
1133
+ For monotonic continuous distributions, the inverse of the cumulative
1134
+ distribution function ("inverse CDF"), denoted :math:`F^{-1}(p)`, is the
1135
+ argument :math:`x` for which the cumulative distribution function
1136
+ :math:`F(x)` evaluates to :math:`p`.
1137
+
1138
+ .. math::
1139
+
1140
+ F^{-1}(p) = x \quad \text{s.t.} \quad F(x) = p
1141
+
1142
+ When a strict "inverse" of the cumulative distribution function does not
1143
+ exist (e.g. discrete random variables), the "inverse CDF" is defined by
1144
+ convention as the smallest value within the support :math:`\chi` for which
1145
+ :math:`F(x)` is at least :math:`p`.
1146
+
1147
+ .. math::
1148
+
1149
+ F^{-1}(p) = \min_\chi \quad \text{s.t.} \quad F(x) ≥ p
1150
+
1151
+ `icdf` accepts `p` for :math:`p \in [0, 1]`.
1152
+
1153
+ Parameters
1154
+ ----------
1155
+ p : array_like
1156
+ The argument of the inverse CDF.
1157
+ method : {None, 'formula', 'complement', 'inversion'}
1158
+ The strategy used to evaluate the inverse CDF.
1159
+ By default (``None``), the infrastructure chooses between the
1160
+ following options, listed in order of precedence.
1161
+
1162
+ - ``'formula'``: use a formula for the inverse CDF itself
1163
+ - ``'complement'``: evaluate the inverse CCDF at the
1164
+ complement of `p`
1165
+ - ``'inversion'``: solve numerically for the argument at which the
1166
+ CDF is equal to `p`
1167
+
1168
+ Not all `method` options are available for all distributions.
1169
+ If the selected `method` is not available, a ``NotImplementedError``
1170
+ will be raised.
1171
+
1172
+ Returns
1173
+ -------
1174
+ out : array
1175
+ The inverse CDF evaluated at the provided argument.
1176
+
1177
+ See Also
1178
+ --------
1179
+ cdf
1180
+ ilogcdf
1181
+
1182
+ Notes
1183
+ -----
1184
+ Suppose a probability distribution has support :math:`[l, r]`. The
1185
+ inverse CDF returns its minimum value of :math:`l` at :math:`p = 0`
1186
+ and its maximum value of :math:`r` at :math:`p = 1`. Because the CDF
1187
+ has range :math:`[0, 1]`, the inverse CDF is only defined on the
1188
+ domain :math:`[0, 1]`; for :math:`p < 0` and :math:`p > 1`, `icdf`
1189
+ returns ``nan``.
1190
+
1191
+ The inverse CDF is also known as the quantile function, percentile function,
1192
+ and percent-point function.
1193
+
1194
+ References
1195
+ ----------
1196
+ .. [1] Quantile function, *Wikipedia*,
1197
+ https://en.wikipedia.org/wiki/Quantile_function
1198
+
1199
+ Examples
1200
+ --------
1201
+ Instantiate a distribution with the desired parameters:
1202
+
1203
+ >>> import numpy as np
1204
+ >>> from scipy import stats
1205
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1206
+
1207
+ Evaluate the inverse CDF at the desired argument:
1208
+
1209
+ >>> X.icdf(0.25)
1210
+ -0.25
1211
+ >>> np.allclose(X.cdf(X.icdf(0.25)), 0.25)
1212
+ True
1213
+
1214
+ This function returns NaN when the argument is outside the domain.
1215
+
1216
+ >>> X.icdf([-0.1, 0, 1, 1.1])
1217
+ array([ nan, -0.5, 0.5, nan])
1218
+
1219
+ """
1220
+ raise NotImplementedError()
1221
+
1222
+ @abstractmethod
1223
+ def ccdf(self, x, y, /, *, method):
1224
+ r"""Complementary cumulative distribution function
1225
+
1226
+ The complementary cumulative distribution function ("CCDF"), denoted
1227
+ :math:`G(x)`, is the complement of the cumulative distribution function
1228
+ :math:`F(x)`; i.e., probability the random variable :math:`X` will
1229
+ assume a value greater than :math:`x`:
1230
+
1231
+ .. math::
1232
+
1233
+ G(x) = 1 - F(x) = P(X > x)
1234
+
1235
+ A two-argument variant of this function is:
1236
+
1237
+ .. math::
1238
+
1239
+ G(x, y) = 1 - F(x, y) = P(X < x \text{ or } X > y)
1240
+
1241
+ `ccdf` accepts `x` for :math:`x` and `y` for :math:`y`.
1242
+
1243
+ Parameters
1244
+ ----------
1245
+ x, y : array_like
1246
+ The arguments of the CCDF. `x` is required; `y` is optional.
1247
+ method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'addition'}
1248
+ The strategy used to evaluate the CCDF.
1249
+ By default (``None``), the infrastructure chooses between the
1250
+ following options, listed in order of precedence.
1251
+
1252
+ - ``'formula'``: use a formula for the CCDF itself
1253
+ - ``'logexp'``: evaluate the log-CCDF and exponentiate
1254
+ - ``'complement'``: evaluate the CDF and take the complement
1255
+ - ``'quadrature'``: numerically integrate the PDF (or, in the discrete
1256
+ case, sum the PMF)
1257
+
1258
+ The two-argument form chooses between:
1259
+
1260
+ - ``'formula'``: use a formula for the CCDF itself
1261
+ - ``'addition'``: compute the CDF at `x` and the CCDF at `y`, then add
1262
+
1263
+ Not all `method` options are available for all distributions.
1264
+ If the selected `method` is not available, a ``NotImplementedError``
1265
+ will be raised.
1266
+
1267
+ Returns
1268
+ -------
1269
+ out : array
1270
+ The CCDF evaluated at the provided argument(s).
1271
+
1272
+ See Also
1273
+ --------
1274
+ cdf
1275
+ logccdf
1276
+
1277
+ Notes
1278
+ -----
1279
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
1280
+ The CCDF :math:`G(x)` is related to the probability density function
1281
+ :math:`f(x)` by:
1282
+
1283
+ .. math::
1284
+
1285
+ G(x) = \int_x^r f(u) du
1286
+
1287
+ The two argument version is:
1288
+
1289
+ .. math::
1290
+
1291
+ G(x, y) = \int_l^x f(u) du + \int_y^r f(u) du
1292
+
1293
+ The CCDF returns its minimum value of :math:`0` for :math:`x ≥ r`
1294
+ and its maximum value of :math:`1` for :math:`x ≤ l`.
1295
+
1296
+ Suppose a discrete probability distribution has support :math:`[l, r]`.
1297
+ The CCDF :math:`G(x)` is related to the probability mass function
1298
+ :math:`f(x)` by:
1299
+
1300
+ .. math::
1301
+
1302
+ G(x) = \sum_{u=\lfloor x + 1 \rfloor}^{r} f(u)
1303
+
1304
+ The CCDF evaluates to its minimum value of :math:`0` for :math:`x ≥ r`
1305
+ and its maximum value of :math:`1` for :math:`x < l`.
1306
+
1307
+ The CCDF is also known as the "survival function".
1308
+
1309
+ References
1310
+ ----------
1311
+ .. [1] Cumulative distribution function, *Wikipedia*,
1312
+ https://en.wikipedia.org/wiki/Cumulative_distribution_function#Derived_functions
1313
+
1314
+ Examples
1315
+ --------
1316
+ Instantiate a distribution with the desired parameters:
1317
+
1318
+ >>> import numpy as np
1319
+ >>> from scipy import stats
1320
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1321
+
1322
+ Evaluate the CCDF at the desired argument:
1323
+
1324
+ >>> X.ccdf(0.25)
1325
+ 0.25
1326
+ >>> np.allclose(X.ccdf(0.25), 1-X.cdf(0.25))
1327
+ True
1328
+
1329
+ Evaluate the complement of the cumulative probability between two arguments:
1330
+
1331
+ >>> X.ccdf(-0.25, 0.25) == X.cdf(-0.25) + X.ccdf(0.25)
1332
+ True
1333
+
1334
+ """ # noqa: E501
1335
+ raise NotImplementedError()
1336
+
1337
+ @abstractmethod
1338
+ def iccdf(self, p, /, *, method):
1339
+ r"""Inverse complementary cumulative distribution function.
1340
+
1341
+ The inverse complementary cumulative distribution function ("inverse CCDF"),
1342
+ denoted :math:`G^{-1}(p)`, is the argument :math:`x` for which the
1343
+ complementary cumulative distribution function :math:`G(x)` evaluates to
1344
+ :math:`p`.
1345
+
1346
+ .. math::
1347
+
1348
+ G^{-1}(p) = x \quad \text{s.t.} \quad G(x) = p
1349
+
1350
+ When a strict "inverse" of the complementary cumulative distribution function
1351
+ does not exist (e.g. discrete random variables), the "inverse CCDF" is defined
1352
+ by convention as the smallest value within the support :math:`\chi` for which
1353
+ :math:`G(x)` is no greater than :math:`p`.
1354
+
1355
+ .. math::
1356
+
1357
+ G^{-1}(p) = \min_\chi \quad \text{s.t.} \quad G(x) ≤ p
1358
+
1359
+ `iccdf` accepts `p` for :math:`p \in [0, 1]`.
1360
+
1361
+ Parameters
1362
+ ----------
1363
+ p : array_like
1364
+ The argument of the inverse CCDF.
1365
+ method : {None, 'formula', 'complement', 'inversion'}
1366
+ The strategy used to evaluate the inverse CCDF.
1367
+ By default (``None``), the infrastructure chooses between the
1368
+ following options, listed in order of precedence.
1369
+
1370
+ - ``'formula'``: use a formula for the inverse CCDF itself
1371
+ - ``'complement'``: evaluate the inverse CDF at the
1372
+ complement of `p`
1373
+ - ``'inversion'``: solve numerically for the argument at which the
1374
+ CCDF is equal to `p`
1375
+
1376
+ Not all `method` options are available for all distributions.
1377
+ If the selected `method` is not available, a ``NotImplementedError``
1378
+ will be raised.
1379
+
1380
+ Returns
1381
+ -------
1382
+ out : array
1383
+ The inverse CCDF evaluated at the provided argument.
1384
+
1385
+ Notes
1386
+ -----
1387
+ Suppose a probability distribution has support :math:`[l, r]`. The
1388
+ inverse CCDF returns its minimum value of :math:`l` at :math:`p = 1`
1389
+ and its maximum value of :math:`r` at :math:`p = 0`. Because the CCDF
1390
+ has range :math:`[0, 1]`, the inverse CCDF is only defined on the
1391
+ domain :math:`[0, 1]`; for :math:`p < 0` and :math:`p > 1`, ``iccdf``
1392
+ returns ``nan``.
1393
+
1394
+ See Also
1395
+ --------
1396
+ icdf
1397
+ ilogccdf
1398
+
1399
+ Examples
1400
+ --------
1401
+ Instantiate a distribution with the desired parameters:
1402
+
1403
+ >>> import numpy as np
1404
+ >>> from scipy import stats
1405
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1406
+
1407
+ Evaluate the inverse CCDF at the desired argument:
1408
+
1409
+ >>> X.iccdf(0.25)
1410
+ 0.25
1411
+ >>> np.allclose(X.iccdf(0.25), X.icdf(1-0.25))
1412
+ True
1413
+
1414
+ This function returns NaN when the argument is outside the domain.
1415
+
1416
+ >>> X.iccdf([-0.1, 0, 1, 1.1])
1417
+ array([ nan, 0.5, -0.5, nan])
1418
+
1419
+ """
1420
+ raise NotImplementedError()
1421
+
1422
+ @abstractmethod
1423
+ def logcdf(self, x, y, /, *, method):
1424
+ r"""Log of the cumulative distribution function
1425
+
1426
+ The cumulative distribution function ("CDF"), denoted :math:`F(x)`, is
1427
+ the probability the random variable :math:`X` will assume a value
1428
+ less than or equal to :math:`x`:
1429
+
1430
+ .. math::
1431
+
1432
+ F(x) = P(X ≤ x)
1433
+
1434
+ A two-argument variant of this function is also defined as the
1435
+ probability the random variable :math:`X` will assume a value between
1436
+ :math:`x` and :math:`y`.
1437
+
1438
+ .. math::
1439
+
1440
+ F(x, y) = P(x ≤ X ≤ y)
1441
+
1442
+ `logcdf` computes the logarithm of the cumulative distribution function
1443
+ ("log-CDF"), :math:`\log(F(x))`/:math:`\log(F(x, y))`, but it may be
1444
+ numerically favorable compared to the naive implementation (computing
1445
+ the CDF and taking the logarithm).
1446
+
1447
+ `logcdf` accepts `x` for :math:`x` and `y` for :math:`y`.
1448
+
1449
+ Parameters
1450
+ ----------
1451
+ x, y : array_like
1452
+ The arguments of the log-CDF. `x` is required; `y` is optional.
1453
+ method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'subtraction'}
1454
+ The strategy used to evaluate the log-CDF.
1455
+ By default (``None``), the one-argument form of the function
1456
+ chooses between the following options, listed in order of precedence.
1457
+
1458
+ - ``'formula'``: use a formula for the log-CDF itself
1459
+ - ``'logexp'``: evaluate the CDF and take the logarithm
1460
+ - ``'complement'``: evaluate the log-CCDF and take the
1461
+ logarithmic complement (see Notes)
1462
+ - ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
1463
+ discrete case, log-sum the log-PMF)
1464
+
1465
+ In place of ``'complement'``, the two-argument form accepts:
1466
+
1467
+ - ``'subtraction'``: compute the log-CDF at each argument and take
1468
+ the logarithmic difference (see Notes)
1469
+
1470
+ Not all `method` options are available for all distributions.
1471
+ If the selected `method` is not available, a ``NotImplementedError``
1472
+ will be raised.
1473
+
1474
+ Returns
1475
+ -------
1476
+ out : array
1477
+ The log-CDF evaluated at the provided argument(s).
1478
+
1479
+ See Also
1480
+ --------
1481
+ cdf
1482
+ logccdf
1483
+
1484
+ Notes
1485
+ -----
1486
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
1487
+ The log-CDF evaluates to its minimum value of :math:`\log(0) = -\infty`
1488
+ for :math:`x ≤ l` and its maximum value of :math:`\log(1) = 0` for
1489
+ :math:`x ≥ r`. An analogous statement can be made for discrete distributions,
1490
+ but the inequality governing the minimum value is strict.
1491
+
1492
+ For distributions with infinite support, it is common for
1493
+ `cdf` to return a value of ``0`` when the argument
1494
+ is theoretically within the support; this can occur because the true value
1495
+ of the CDF is too small to be represented by the chosen dtype. `logcdf`,
1496
+ however, will often return a finite (not ``-inf``) result over a much larger
1497
+ domain. Similarly, `logcdf` may provided a strictly negative result with
1498
+ arguments for which `cdf` would return ``1.0``. Consequently, it may be
1499
+ preferred to work with the logarithms of probabilities to avoid underflow
1500
+ and related limitations of floating point numbers.
1501
+
1502
+ The "logarithmic complement" of a number :math:`z` is mathematically
1503
+ equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
1504
+ of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
1505
+ Similarly, the term "logarithmic difference" of :math:`w` and :math:`z`
1506
+ is used here to mean :math:`\log(\exp(w)-\exp(z))`.
1507
+
1508
+ If ``y < x``, the CDF is negative, and therefore the log-CCDF
1509
+ is complex with imaginary part :math:`\pi`. For
1510
+ consistency, the result of this function always has complex dtype
1511
+ when `y` is provided, regardless of the value of the imaginary part.
1512
+
1513
+ References
1514
+ ----------
1515
+ .. [1] Cumulative distribution function, *Wikipedia*,
1516
+ https://en.wikipedia.org/wiki/Cumulative_distribution_function
1517
+
1518
+ Examples
1519
+ --------
1520
+ Instantiate a distribution with the desired parameters:
1521
+
1522
+ >>> import numpy as np
1523
+ >>> from scipy import stats
1524
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1525
+
1526
+ Evaluate the log-CDF at the desired argument:
1527
+
1528
+ >>> X.logcdf(0.25)
1529
+ -0.287682072451781
1530
+ >>> np.allclose(X.logcdf(0.), np.log(X.cdf(0.)))
1531
+ True
1532
+
1533
+ """ # noqa: E501
1534
+ raise NotImplementedError()
1535
+
1536
+ @abstractmethod
1537
+ def ilogcdf(self, logp, /, *, method):
1538
+ r"""Inverse of the logarithm of the cumulative distribution function.
1539
+
1540
+ The inverse of the logarithm of the cumulative distribution function
1541
+ ("inverse log-CDF") is the argument :math:`x` for which the logarithm
1542
+ of the cumulative distribution function :math:`\log(F(x))` evaluates
1543
+ to :math:`\log(p)`.
1544
+
1545
+ Mathematically, it is equivalent to :math:`F^{-1}(\exp(y))`, where
1546
+ :math:`y = \log(p)`, but it may be numerically favorable compared to
1547
+ the naive implementation (computing :math:`p = \exp(y)`, then
1548
+ :math:`F^{-1}(p)`).
1549
+
1550
+ `ilogcdf` accepts `logp` for :math:`\log(p) ≤ 0`.
1551
+
1552
+ Parameters
1553
+ ----------
1554
+ logp : array_like
1555
+ The argument of the inverse log-CDF.
1556
+ method : {None, 'formula', 'complement', 'inversion'}
1557
+ The strategy used to evaluate the inverse log-CDF.
1558
+ By default (``None``), the infrastructure chooses between the
1559
+ following options, listed in order of precedence.
1560
+
1561
+ - ``'formula'``: use a formula for the inverse log-CDF itself
1562
+ - ``'complement'``: evaluate the inverse log-CCDF at the
1563
+ logarithmic complement of `logp` (see Notes)
1564
+ - ``'inversion'``: solve numerically for the argument at which the
1565
+ log-CDF is equal to `logp`
1566
+
1567
+ Not all `method` options are available for all distributions.
1568
+ If the selected `method` is not available, a ``NotImplementedError``
1569
+ will be raised.
1570
+
1571
+ Returns
1572
+ -------
1573
+ out : array
1574
+ The inverse log-CDF evaluated at the provided argument.
1575
+
1576
+ See Also
1577
+ --------
1578
+ icdf
1579
+ logcdf
1580
+
1581
+ Notes
1582
+ -----
1583
+ Suppose a probability distribution has support :math:`[l, r]`.
1584
+ The inverse log-CDF returns its minimum value of :math:`l` at
1585
+ :math:`\log(p) = \log(0) = -\infty` and its maximum value of :math:`r` at
1586
+ :math:`\log(p) = \log(1) = 0`. Because the log-CDF has range
1587
+ :math:`[-\infty, 0]`, the inverse log-CDF is only defined on the
1588
+ negative reals; for :math:`\log(p) > 0`, `ilogcdf` returns ``nan``.
1589
+
1590
+ Occasionally, it is needed to find the argument of the CDF for which
1591
+ the resulting probability is very close to ``0`` or ``1`` - too close to
1592
+ represent accurately with floating point arithmetic. In many cases,
1593
+ however, the *logarithm* of this resulting probability may be
1594
+ represented in floating point arithmetic, in which case this function
1595
+ may be used to find the argument of the CDF for which the *logarithm*
1596
+ of the resulting probability is :math:`y = \log(p)`.
1597
+
1598
+ The "logarithmic complement" of a number :math:`z` is mathematically
1599
+ equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
1600
+ of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
1601
+
1602
+ Examples
1603
+ --------
1604
+ Instantiate a distribution with the desired parameters:
1605
+
1606
+ >>> import numpy as np
1607
+ >>> from scipy import stats
1608
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1609
+
1610
+ Evaluate the inverse log-CDF at the desired argument:
1611
+
1612
+ >>> X.ilogcdf(-0.25)
1613
+ 0.2788007830714034
1614
+ >>> np.allclose(X.ilogcdf(-0.25), X.icdf(np.exp(-0.25)))
1615
+ True
1616
+
1617
+ """
1618
+ raise NotImplementedError()
1619
+
1620
+ @abstractmethod
1621
+ def logccdf(self, x, y, /, *, method):
1622
+ r"""Log of the complementary cumulative distribution function
1623
+
1624
+ The complementary cumulative distribution function ("CCDF"), denoted
1625
+ :math:`G(x)` is the complement of the cumulative distribution function
1626
+ :math:`F(x)`; i.e., probability the random variable :math:`X` will
1627
+ assume a value greater than :math:`x`:
1628
+
1629
+ .. math::
1630
+
1631
+ G(x) = 1 - F(x) = P(X > x)
1632
+
1633
+ A two-argument variant of this function is:
1634
+
1635
+ .. math::
1636
+
1637
+ G(x, y) = 1 - F(x, y) = P(X < x \quad \text{or} \quad X > y)
1638
+
1639
+ `logccdf` computes the logarithm of the complementary cumulative
1640
+ distribution function ("log-CCDF"), :math:`\log(G(x))`/:math:`\log(G(x, y))`,
1641
+ but it may be numerically favorable compared to the naive implementation
1642
+ (computing the CDF and taking the logarithm).
1643
+
1644
+ `logccdf` accepts `x` for :math:`x` and `y` for :math:`y`.
1645
+
1646
+ Parameters
1647
+ ----------
1648
+ x, y : array_like
1649
+ The arguments of the log-CCDF. `x` is required; `y` is optional.
1650
+ method : {None, 'formula', 'logexp', 'complement', 'quadrature', 'addition'}
1651
+ The strategy used to evaluate the log-CCDF.
1652
+ By default (``None``), the one-argument form of the function
1653
+ chooses between the following options, listed in order of precedence.
1654
+
1655
+ - ``'formula'``: use a formula for the log CCDF itself
1656
+ - ``'logexp'``: evaluate the CCDF and take the logarithm
1657
+ - ``'complement'``: evaluate the log-CDF and take the
1658
+ logarithmic complement (see Notes)
1659
+ - ``'quadrature'``: numerically log-integrate the log-PDF (or, in the
1660
+ discrete case, log-sum the log-PMF)
1661
+
1662
+ The two-argument form chooses between:
1663
+
1664
+ - ``'formula'``: use a formula for the log CCDF itself
1665
+ - ``'addition'``: compute the log-CDF at `x` and the log-CCDF at `y`,
1666
+ then take the logarithmic sum (see Notes)
1667
+
1668
+ Not all `method` options are available for all distributions.
1669
+ If the selected `method` is not available, a ``NotImplementedError``
1670
+ will be raised.
1671
+
1672
+ Returns
1673
+ -------
1674
+ out : array
1675
+ The log-CCDF evaluated at the provided argument(s).
1676
+
1677
+ See Also
1678
+ --------
1679
+ ccdf
1680
+ logcdf
1681
+
1682
+ Notes
1683
+ -----
1684
+ Suppose a continuous probability distribution has support :math:`[l, r]`.
1685
+ The log-CCDF returns its minimum value of :math:`\log(0)=-\infty` for
1686
+ :math:`x ≥ r` and its maximum value of :math:`\log(1) = 0` for
1687
+ :math:`x ≤ l`. An analogous statement can be made for discrete distributions,
1688
+ but the inequality governing the maximum value is strict.
1689
+
1690
+ For distributions with infinite support, it is common for
1691
+ `ccdf` to return a value of ``0`` when the argument
1692
+ is theoretically within the support; this can occur because the true value
1693
+ of the CCDF is too small to be represented by the chosen dtype. The log
1694
+ of the CCDF, however, will often be finite (not ``-inf``) over a much larger
1695
+ domain. Similarly, `logccdf` may provided a strictly negative result with
1696
+ arguments for which `ccdf` would return ``1.0``. Consequently, it may be
1697
+ preferred to work with the logarithms of probabilities to avoid underflow
1698
+ and related limitations of floating point numbers.
1699
+
1700
+ The "logarithmic complement" of a number :math:`z` is mathematically
1701
+ equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
1702
+ of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
1703
+ Similarly, the term "logarithmic sum" of :math:`w` and :math:`z`
1704
+ is used here to mean the :math:`\log(\exp(w)+\exp(z))`, AKA
1705
+ :math:`\text{LogSumExp}(w, z)`.
1706
+
1707
+ References
1708
+ ----------
1709
+ .. [1] Cumulative distribution function, *Wikipedia*,
1710
+ https://en.wikipedia.org/wiki/Cumulative_distribution_function#Derived_functions
1711
+
1712
+ Examples
1713
+ --------
1714
+ Instantiate a distribution with the desired parameters:
1715
+
1716
+ >>> import numpy as np
1717
+ >>> from scipy import stats
1718
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1719
+
1720
+ Evaluate the log-CCDF at the desired argument:
1721
+
1722
+ >>> X.logccdf(0.25)
1723
+ -1.3862943611198906
1724
+ >>> np.allclose(X.logccdf(0.), np.log(X.ccdf(0.)))
1725
+ True
1726
+
1727
+ """ # noqa: E501
1728
+ raise NotImplementedError()
1729
+
1730
+ @abstractmethod
1731
+ def ilogccdf(self, logp, /, *, method):
1732
+ r"""Inverse of the log of the complementary cumulative distribution function.
1733
+
1734
+ The inverse of the logarithm of the complementary cumulative distribution
1735
+ function ("inverse log-CCDF") is the argument :math:`x` for which the logarithm
1736
+ of the complementary cumulative distribution function :math:`\log(G(x))`
1737
+ evaluates to :math:`\log(p)`.
1738
+
1739
+ Mathematically, it is equivalent to :math:`G^{-1}(\exp(y))`, where
1740
+ :math:`y = \log(p)`, but it may be numerically favorable compared to the naive
1741
+ implementation (computing :math:`p = \exp(y)`, then :math:`G^{-1}(p)`).
1742
+
1743
+ `ilogccdf` accepts `logp` for :math:`\log(p) ≤ 0`.
1744
+
1745
+ Parameters
1746
+ ----------
1747
+ x : array_like
1748
+ The argument of the inverse log-CCDF.
1749
+ method : {None, 'formula', 'complement', 'inversion'}
1750
+ The strategy used to evaluate the inverse log-CCDF.
1751
+ By default (``None``), the infrastructure chooses between the
1752
+ following options, listed in order of precedence.
1753
+
1754
+ - ``'formula'``: use a formula for the inverse log-CCDF itself
1755
+ - ``'complement'``: evaluate the inverse log-CDF at the
1756
+ logarithmic complement of `x` (see Notes)
1757
+ - ``'inversion'``: solve numerically for the argument at which the
1758
+ log-CCDF is equal to `x`
1759
+
1760
+ Not all `method` options are available for all distributions.
1761
+ If the selected `method` is not available, a ``NotImplementedError``
1762
+ will be raised.
1763
+
1764
+ Returns
1765
+ -------
1766
+ out : array
1767
+ The inverse log-CCDF evaluated at the provided argument.
1768
+
1769
+ Notes
1770
+ -----
1771
+ Suppose a probability distribution has support :math:`[l, r]`. The
1772
+ inverse log-CCDF returns its minimum value of :math:`l` at
1773
+ :math:`\log(p) = \log(1) = 0` and its maximum value of :math:`r` at
1774
+ :math:`\log(p) = \log(0) = -\infty`. Because the log-CCDF has range
1775
+ :math:`[-\infty, 0]`, the inverse log-CDF is only defined on the
1776
+ negative reals; for :math:`\log(p) > 0`, `ilogccdf` returns ``nan``.
1777
+
1778
+ Occasionally, it is needed to find the argument of the CCDF for which
1779
+ the resulting probability is very close to ``0`` or ``1`` - too close to
1780
+ represent accurately with floating point arithmetic. In many cases,
1781
+ however, the *logarithm* of this resulting probability may be
1782
+ represented in floating point arithmetic, in which case this function
1783
+ may be used to find the argument of the CCDF for which the *logarithm*
1784
+ of the resulting probability is :math:`y = \log(p)`.
1785
+
1786
+ The "logarithmic complement" of a number :math:`z` is mathematically
1787
+ equivalent to :math:`\log(1-\exp(z))`, but it is computed to avoid loss
1788
+ of precision when :math:`\exp(z)` is nearly :math:`0` or :math:`1`.
1789
+
1790
+ See Also
1791
+ --------
1792
+ iccdf
1793
+ ilogccdf
1794
+
1795
+ Examples
1796
+ --------
1797
+ Instantiate a distribution with the desired parameters:
1798
+
1799
+ >>> import numpy as np
1800
+ >>> from scipy import stats
1801
+ >>> X = stats.Uniform(a=-0.5, b=0.5)
1802
+
1803
+ Evaluate the inverse log-CCDF at the desired argument:
1804
+
1805
+ >>> X.ilogccdf(-0.25)
1806
+ -0.2788007830714034
1807
+ >>> np.allclose(X.ilogccdf(-0.25), X.iccdf(np.exp(-0.25)))
1808
+ True
1809
+
1810
+ """
1811
+ raise NotImplementedError()
1812
+
1813
+ @abstractmethod
1814
+ def logentropy(self, *, method):
1815
+ r"""Logarithm of the differential entropy
1816
+
1817
+ In terms of probability density function :math:`f(x)` and support
1818
+ :math:`\chi`, the differential entropy (or simply "entropy") of a
1819
+ continuous random variable :math:`X` is:
1820
+
1821
+ .. math::
1822
+
1823
+ h(X) = - \int_{\chi} f(x) \log f(x) dx
1824
+
1825
+ The definition for a discrete random variable is analogous, with the PMF
1826
+ replacing the PDF and a sum over the support replacing the integral.
1827
+
1828
+ `logentropy` computes the logarithm of the differential entropy
1829
+ ("log-entropy"), :math:`\log(h(X))`, but it may be numerically favorable
1830
+ compared to the naive implementation (computing :math:`h(X)` then
1831
+ taking the logarithm).
1832
+
1833
+ Parameters
1834
+ ----------
1835
+ method : {None, 'formula', 'logexp', 'quadrature}
1836
+ The strategy used to evaluate the log-entropy. By default
1837
+ (``None``), the infrastructure chooses between the following options,
1838
+ listed in order of precedence.
1839
+
1840
+ - ``'formula'``: use a formula for the log-entropy itself
1841
+ - ``'logexp'``: evaluate the entropy and take the logarithm
1842
+ - ``'quadrature'``: numerically log-integrate (or, in the discrete
1843
+ case, log-sum) the logarithm of the entropy integrand (summand)
1844
+
1845
+ Not all `method` options are available for all distributions.
1846
+ If the selected `method` is not available, a ``NotImplementedError``
1847
+ will be raised.
1848
+
1849
+ Returns
1850
+ -------
1851
+ out : array
1852
+ The log-entropy.
1853
+
1854
+ See Also
1855
+ --------
1856
+ entropy
1857
+ logpdf
1858
+
1859
+ Notes
1860
+ -----
1861
+ The differential entropy of a continuous distribution can be negative.
1862
+ In this case, the log-entropy is complex with imaginary part :math:`\pi`.
1863
+ For consistency, the result of this function always has complex dtype,
1864
+ regardless of the value of the imaginary part.
1865
+
1866
+ References
1867
+ ----------
1868
+ .. [1] Differential entropy, *Wikipedia*,
1869
+ https://en.wikipedia.org/wiki/Differential_entropy
1870
+
1871
+ Examples
1872
+ --------
1873
+ Instantiate a distribution with the desired parameters:
1874
+
1875
+ >>> import numpy as np
1876
+ >>> from scipy import stats
1877
+ >>> X = stats.Uniform(a=-1., b=1.)
1878
+
1879
+ Evaluate the log-entropy:
1880
+
1881
+ >>> X.logentropy()
1882
+ (-0.3665129205816642+0j)
1883
+ >>> np.allclose(np.exp(X.logentropy()), X.entropy())
1884
+ True
1885
+
1886
+ For a random variable with negative entropy, the log-entropy has an
1887
+ imaginary part equal to `np.pi`.
1888
+
1889
+ >>> X = stats.Uniform(a=-.1, b=.1)
1890
+ >>> X.entropy(), X.logentropy()
1891
+ (-1.6094379124341007, (0.4758849953271105+3.141592653589793j))
1892
+
1893
+ """
1894
+ raise NotImplementedError()
1895
+
1896
+ @abstractmethod
1897
+ def entropy(self, *, method):
1898
+ r"""Differential entropy
1899
+
1900
+ In terms of probability density function :math:`f(x)` and support
1901
+ :math:`\chi`, the differential entropy (or simply "entropy") of a
1902
+ continuous random variable :math:`X` is:
1903
+
1904
+ .. math::
1905
+
1906
+ h(X) = - \int_{\chi} f(x) \log f(x) dx
1907
+
1908
+ The definition for a discrete random variable is analogous, with the
1909
+ PMF replacing the PDF and a sum over the support replacing the integral.
1910
+
1911
+ Parameters
1912
+ ----------
1913
+ method : {None, 'formula', 'logexp', 'quadrature'}
1914
+ The strategy used to evaluate the entropy. By default (``None``),
1915
+ the infrastructure chooses between the following options, listed
1916
+ in order of precedence.
1917
+
1918
+ - ``'formula'``: use a formula for the entropy itself
1919
+ - ``'logexp'``: evaluate the log-entropy and exponentiate
1920
+ - ``'quadrature'``: numerically integrate (or, in the discrete
1921
+ case, sum) the entropy integrand (summand)
1922
+
1923
+
1924
+ Not all `method` options are available for all distributions.
1925
+ If the selected `method` is not available, a ``NotImplementedError``
1926
+ will be raised.
1927
+
1928
+ Returns
1929
+ -------
1930
+ out : array
1931
+ The entropy of the random variable.
1932
+
1933
+ See Also
1934
+ --------
1935
+ logentropy
1936
+ pdf
1937
+
1938
+ Notes
1939
+ -----
1940
+ This function calculates the entropy using the natural logarithm; i.e.
1941
+ the logarithm with base :math:`e`. Consequently, the value is expressed
1942
+ in (dimensionless) "units" of nats. To convert the entropy to different
1943
+ units (i.e. corresponding with a different base), divide the result by
1944
+ the natural logarithm of the desired base.
1945
+
1946
+ References
1947
+ ----------
1948
+ .. [1] Differential entropy, *Wikipedia*,
1949
+ https://en.wikipedia.org/wiki/Differential_entropy
1950
+
1951
+ Examples
1952
+ --------
1953
+ Instantiate a distribution with the desired parameters:
1954
+
1955
+ >>> from scipy import stats
1956
+ >>> X = stats.Uniform(a=-1., b=1.)
1957
+
1958
+ Evaluate the entropy:
1959
+
1960
+ >>> X.entropy()
1961
+ 0.6931471805599454
1962
+
1963
+ """
1964
+ raise NotImplementedError()