scipy 1.16.2__cp314-cp314-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.cp314-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp314-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.cp314-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp314-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.cp314-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp314-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.cp314-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp314-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp314-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp314-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp314-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp314-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.cp314-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp314-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.cp314-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp314-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.cp314-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp314-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp314-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp314-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.cp314-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp314-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.cp314-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp314-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.cp314-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp314-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.cp314-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp314-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp314-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp314-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.cp314-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp314-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.cp314-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp314-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp314-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp314-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp314-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp314-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.cp314-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp314-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp314-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp314-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp314-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp314-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.cp314-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp314-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.cp314-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp314-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp314-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp314-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.cp314-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp314-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.cp314-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp314-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.cp314-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp314-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp314-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp314-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp314-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp314-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.cp314-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp314-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.cp314-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp314-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.cp314-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp314-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.cp314-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp314-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp314-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp314-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp314-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp314-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp314-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp314-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp314-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp314-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.cp314-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp314-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp314-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp314-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.cp314-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp314-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.cp314-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp314-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.cp314-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp314-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.cp314-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp314-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp314-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp314-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.cp314-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp314-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.cp314-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp314-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp314-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp314-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.cp314-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp314-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.cp314-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp314-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.cp314-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp314-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.cp314-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp314-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.cp314-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp314-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp314-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp314-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.cp314-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp314-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.cp314-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp314-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.cp314-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp314-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.cp314-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp314-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp314-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp314-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.cp314-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp314-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.cp314-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp314-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.cp314-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp314-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.cp314-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp314-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp314-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp314-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.cp314-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp314-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp314-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp314-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp314-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp314-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.cp314-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp314-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.cp314-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp314-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.cp314-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp314-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.cp314-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp314-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp314-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp314-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp314-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp314-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp314-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp314-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp314-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp314-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.cp314-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp314-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.cp314-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp314-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.cp314-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp314-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp314-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp314-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.cp314-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp314-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp314-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp314-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp314-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp314-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp314-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp314-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.cp314-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp314-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp314-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp314-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.cp314-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp314-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp314-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp314-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.cp314-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp314-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp314-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp314-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp314-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp314-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.cp314-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp314-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp314-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp314-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.cp314-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp314-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp314-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp314-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp314-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp314-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.cp314-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp314-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.cp314-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp314-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp314-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp314-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.cp314-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp314-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.cp314-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp314-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.cp314-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp314-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.cp314-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp314-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.cp314-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp314-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.cp314-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp314-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.cp314-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp314-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.cp314-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp314-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,1231 @@
1
+ #
2
+
3
+ import warnings
4
+ from functools import partial
5
+
6
+ import numpy as np
7
+
8
+ from scipy import optimize
9
+ from scipy import integrate
10
+ from scipy.integrate._quadrature import _builtincoeffs
11
+ from scipy import interpolate
12
+ from scipy.interpolate import RectBivariateSpline
13
+ import scipy._lib.array_api_extra as xpx
14
+ import scipy.special as sc
15
+ from .._distn_infrastructure import rv_continuous, _ShapeInfo, rv_continuous_frozen
16
+ from .._continuous_distns import uniform, expon, _norm_pdf, _norm_cdf
17
+ from .levyst import Nolan
18
+ from scipy._lib.doccer import inherit_docstring_from
19
+
20
+
21
+ __all__ = ["levy_stable", "levy_stable_gen", "pdf_from_cf_with_fft"]
22
+
23
+ # Stable distributions are known for various parameterisations
24
+ # some being advantageous for numerical considerations and others
25
+ # useful due to their location/scale awareness.
26
+ #
27
+ # Here we follow [NO] convention (see the references in the docstring
28
+ # for levy_stable_gen below).
29
+ #
30
+ # S0 / Z0 / x0 (aka Zoleterav's M)
31
+ # S1 / Z1 / x1
32
+ #
33
+ # Where S* denotes parameterisation, Z* denotes standardized
34
+ # version where gamma = 1, delta = 0 and x* denotes variable.
35
+ #
36
+ # Scipy's original Stable was a random variate generator. It
37
+ # uses S1 and unfortunately is not a location/scale aware.
38
+
39
+
40
+ # default numerical integration tolerance
41
+ # used for epsrel in piecewise and both epsrel and epsabs in dni
42
+ # (epsabs needed in dni since weighted quad requires epsabs > 0)
43
+ _QUAD_EPS = 1.2e-14
44
+
45
+
46
+ def _Phi_Z0(alpha, t):
47
+ return (
48
+ -np.tan(np.pi * alpha / 2) * (np.abs(t) ** (1 - alpha) - 1)
49
+ if alpha != 1
50
+ else -2.0 * np.log(np.abs(t)) / np.pi
51
+ )
52
+
53
+
54
+ def _Phi_Z1(alpha, t):
55
+ return (
56
+ np.tan(np.pi * alpha / 2)
57
+ if alpha != 1
58
+ else -2.0 * np.log(np.abs(t)) / np.pi
59
+ )
60
+
61
+
62
+ def _cf(Phi, t, alpha, beta):
63
+ """Characteristic function."""
64
+ return np.exp(
65
+ -(np.abs(t) ** alpha) * (1 - 1j * beta * np.sign(t) * Phi(alpha, t))
66
+ )
67
+
68
+
69
+ _cf_Z0 = partial(_cf, _Phi_Z0)
70
+ _cf_Z1 = partial(_cf, _Phi_Z1)
71
+
72
+
73
+ def _pdf_single_value_cf_integrate(Phi, x, alpha, beta, **kwds):
74
+ """To improve DNI accuracy convert characteristic function in to real
75
+ valued integral using Euler's formula, then exploit cosine symmetry to
76
+ change limits to [0, inf). Finally use cosine addition formula to split
77
+ into two parts that can be handled by weighted quad pack.
78
+ """
79
+ quad_eps = kwds.get("quad_eps", _QUAD_EPS)
80
+
81
+ def integrand1(t):
82
+ if t == 0:
83
+ return 0
84
+ return np.exp(-(t ** alpha)) * (
85
+ np.cos(beta * (t ** alpha) * Phi(alpha, t))
86
+ )
87
+
88
+ def integrand2(t):
89
+ if t == 0:
90
+ return 0
91
+ return np.exp(-(t ** alpha)) * (
92
+ np.sin(beta * (t ** alpha) * Phi(alpha, t))
93
+ )
94
+
95
+ with np.errstate(invalid="ignore"):
96
+ int1, *ret1 = integrate.quad(
97
+ integrand1,
98
+ 0,
99
+ np.inf,
100
+ weight="cos",
101
+ wvar=x,
102
+ limit=1000,
103
+ epsabs=quad_eps,
104
+ epsrel=quad_eps,
105
+ full_output=1,
106
+ )
107
+
108
+ int2, *ret2 = integrate.quad(
109
+ integrand2,
110
+ 0,
111
+ np.inf,
112
+ weight="sin",
113
+ wvar=x,
114
+ limit=1000,
115
+ epsabs=quad_eps,
116
+ epsrel=quad_eps,
117
+ full_output=1,
118
+ )
119
+
120
+ return (int1 + int2) / np.pi
121
+
122
+
123
+ _pdf_single_value_cf_integrate_Z0 = partial(
124
+ _pdf_single_value_cf_integrate, _Phi_Z0
125
+ )
126
+ _pdf_single_value_cf_integrate_Z1 = partial(
127
+ _pdf_single_value_cf_integrate, _Phi_Z1
128
+ )
129
+
130
+
131
+ def _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta):
132
+ """Round x close to zeta for Nolan's method in [NO]."""
133
+ # "8. When |x0-beta*tan(pi*alpha/2)| is small, the
134
+ # computations of the density and cumulative have numerical problems.
135
+ # The program works around this by setting
136
+ # z = beta*tan(pi*alpha/2) when
137
+ # |z-beta*tan(pi*alpha/2)| < tol(5)*alpha**(1/alpha).
138
+ # (The bound on the right is ad hoc, to get reasonable behavior
139
+ # when alpha is small)."
140
+ # where tol(5) = 0.5e-2 by default.
141
+ #
142
+ # We seem to have partially addressed this through re-expression of
143
+ # g(theta) here, but it still needs to be used in some extreme cases.
144
+ # Perhaps tol(5) = 0.5e-2 could be reduced for our implementation.
145
+ if np.abs(x0 - zeta) < x_tol_near_zeta * alpha ** (1 / alpha):
146
+ x0 = zeta
147
+ return x0
148
+
149
+
150
+ def _nolan_round_difficult_input(
151
+ x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
152
+ ):
153
+ """Round difficult input values for Nolan's method in [NO]."""
154
+
155
+ # following Nolan's STABLE,
156
+ # "1. When 0 < |alpha-1| < 0.005, the program has numerical problems
157
+ # evaluating the pdf and cdf. The current version of the program sets
158
+ # alpha=1 in these cases. This approximation is not bad in the S0
159
+ # parameterization."
160
+ if np.abs(alpha - 1) < alpha_tol_near_one:
161
+ alpha = 1.0
162
+
163
+ # "2. When alpha=1 and |beta| < 0.005, the program has numerical
164
+ # problems. The current version sets beta=0."
165
+ # We seem to have addressed this through re-expression of g(theta) here
166
+
167
+ x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
168
+ return x0, alpha, beta
169
+
170
+
171
+ def _pdf_single_value_piecewise_Z1(x, alpha, beta, **kwds):
172
+ # convert from Nolan's S_1 (aka S) to S_0 (aka Zolaterev M)
173
+ # parameterization
174
+
175
+ zeta = -beta * np.tan(np.pi * alpha / 2.0)
176
+ x0 = x + zeta if alpha != 1 else x
177
+
178
+ return _pdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds)
179
+
180
+
181
+ def _pdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds):
182
+
183
+ quad_eps = kwds.get("quad_eps", _QUAD_EPS)
184
+ x_tol_near_zeta = kwds.get("piecewise_x_tol_near_zeta", 0.005)
185
+ alpha_tol_near_one = kwds.get("piecewise_alpha_tol_near_one", 0.005)
186
+
187
+ zeta = -beta * np.tan(np.pi * alpha / 2.0)
188
+ x0, alpha, beta = _nolan_round_difficult_input(
189
+ x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
190
+ )
191
+
192
+ # some other known distribution pdfs / analytical cases
193
+ # TODO: add more where possible with test coverage,
194
+ # eg https://en.wikipedia.org/wiki/Stable_distribution#Other_analytic_cases
195
+ if alpha == 2.0:
196
+ # normal
197
+ return _norm_pdf(x0 / np.sqrt(2)) / np.sqrt(2)
198
+ elif alpha == 0.5 and beta == 1.0:
199
+ # levy
200
+ # since S(1/2, 1, gamma, delta; <x>) ==
201
+ # S(1/2, 1, gamma, gamma + delta; <x0>).
202
+ _x = x0 + 1
203
+ if _x <= 0:
204
+ return 0
205
+
206
+ return 1 / np.sqrt(2 * np.pi * _x) / _x * np.exp(-1 / (2 * _x))
207
+ elif alpha == 0.5 and beta == 0.0 and x0 != 0:
208
+ # analytical solution [HO]
209
+ S, C = sc.fresnel([1 / np.sqrt(2 * np.pi * np.abs(x0))])
210
+ arg = 1 / (4 * np.abs(x0))
211
+ return (
212
+ np.sin(arg) * (0.5 - S[0]) + np.cos(arg) * (0.5 - C[0])
213
+ ) / np.sqrt(2 * np.pi * np.abs(x0) ** 3)
214
+ elif alpha == 1.0 and beta == 0.0:
215
+ # cauchy
216
+ return 1 / (1 + x0 ** 2) / np.pi
217
+
218
+ return _pdf_single_value_piecewise_post_rounding_Z0(
219
+ x0, alpha, beta, quad_eps, x_tol_near_zeta
220
+ )
221
+
222
+
223
+ def _pdf_single_value_piecewise_post_rounding_Z0(x0, alpha, beta, quad_eps,
224
+ x_tol_near_zeta):
225
+ """Calculate pdf using Nolan's methods as detailed in [NO]."""
226
+
227
+ _nolan = Nolan(alpha, beta, x0)
228
+ zeta = _nolan.zeta
229
+ xi = _nolan.xi
230
+ c2 = _nolan.c2
231
+ g = _nolan.g
232
+
233
+ # round x0 to zeta again if needed. zeta was recomputed and may have
234
+ # changed due to floating point differences.
235
+ # See https://github.com/scipy/scipy/pull/18133
236
+ x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
237
+ # handle Nolan's initial case logic
238
+ if x0 == zeta:
239
+ return (
240
+ sc.gamma(1 + 1 / alpha)
241
+ * np.cos(xi)
242
+ / np.pi
243
+ / ((1 + zeta ** 2) ** (1 / alpha / 2))
244
+ )
245
+ elif x0 < zeta:
246
+ return _pdf_single_value_piecewise_post_rounding_Z0(
247
+ -x0, alpha, -beta, quad_eps, x_tol_near_zeta
248
+ )
249
+
250
+ # following Nolan, we may now assume
251
+ # x0 > zeta when alpha != 1
252
+ # beta != 0 when alpha == 1
253
+
254
+ # spare calculating integral on null set
255
+ # use isclose as macos has fp differences
256
+ if np.isclose(-xi, np.pi / 2, rtol=1e-014, atol=1e-014):
257
+ return 0.0
258
+
259
+ def integrand(theta):
260
+ # limit any numerical issues leading to g_1 < 0 near theta limits
261
+ g_1 = g(theta)
262
+ if not np.isfinite(g_1) or g_1 < 0:
263
+ g_1 = 0
264
+ return g_1 * np.exp(-g_1)
265
+
266
+ with np.errstate(all="ignore"):
267
+ peak = optimize.bisect(
268
+ lambda t: g(t) - 1, -xi, np.pi / 2, xtol=quad_eps
269
+ )
270
+
271
+ # this integrand can be very peaked, so we need to force
272
+ # QUADPACK to evaluate the function inside its support
273
+ #
274
+
275
+ # lastly, we add additional samples at
276
+ # ~exp(-100), ~exp(-10), ~exp(-5), ~exp(-1)
277
+ # to improve QUADPACK's detection of rapidly descending tail behavior
278
+ # (this choice is fairly ad hoc)
279
+ tail_points = [
280
+ optimize.bisect(lambda t: g(t) - exp_height, -xi, np.pi / 2)
281
+ for exp_height in [100, 10, 5]
282
+ # exp_height = 1 is handled by peak
283
+ ]
284
+ intg_points = [0, peak] + tail_points
285
+ intg, *ret = integrate.quad(
286
+ integrand,
287
+ -xi,
288
+ np.pi / 2,
289
+ points=intg_points,
290
+ limit=100,
291
+ epsrel=quad_eps,
292
+ epsabs=0,
293
+ full_output=1,
294
+ )
295
+
296
+ return c2 * intg
297
+
298
+
299
+ def _cdf_single_value_piecewise_Z1(x, alpha, beta, **kwds):
300
+ # convert from Nolan's S_1 (aka S) to S_0 (aka Zolaterev M)
301
+ # parameterization
302
+
303
+ zeta = -beta * np.tan(np.pi * alpha / 2.0)
304
+ x0 = x + zeta if alpha != 1 else x
305
+
306
+ return _cdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds)
307
+
308
+
309
+ def _cdf_single_value_piecewise_Z0(x0, alpha, beta, **kwds):
310
+
311
+ quad_eps = kwds.get("quad_eps", _QUAD_EPS)
312
+ x_tol_near_zeta = kwds.get("piecewise_x_tol_near_zeta", 0.005)
313
+ alpha_tol_near_one = kwds.get("piecewise_alpha_tol_near_one", 0.005)
314
+
315
+ zeta = -beta * np.tan(np.pi * alpha / 2.0)
316
+ x0, alpha, beta = _nolan_round_difficult_input(
317
+ x0, alpha, beta, zeta, x_tol_near_zeta, alpha_tol_near_one
318
+ )
319
+
320
+ # some other known distribution cdfs / analytical cases
321
+ # TODO: add more where possible with test coverage,
322
+ # eg https://en.wikipedia.org/wiki/Stable_distribution#Other_analytic_cases
323
+ if alpha == 2.0:
324
+ # normal
325
+ return _norm_cdf(x0 / np.sqrt(2))
326
+ elif alpha == 0.5 and beta == 1.0:
327
+ # levy
328
+ # since S(1/2, 1, gamma, delta; <x>) ==
329
+ # S(1/2, 1, gamma, gamma + delta; <x0>).
330
+ _x = x0 + 1
331
+ if _x <= 0:
332
+ return 0
333
+
334
+ return sc.erfc(np.sqrt(0.5 / _x))
335
+ elif alpha == 1.0 and beta == 0.0:
336
+ # cauchy
337
+ return 0.5 + np.arctan(x0) / np.pi
338
+
339
+ return _cdf_single_value_piecewise_post_rounding_Z0(
340
+ x0, alpha, beta, quad_eps, x_tol_near_zeta
341
+ )
342
+
343
+
344
+ def _cdf_single_value_piecewise_post_rounding_Z0(x0, alpha, beta, quad_eps,
345
+ x_tol_near_zeta):
346
+ """Calculate cdf using Nolan's methods as detailed in [NO]."""
347
+ _nolan = Nolan(alpha, beta, x0)
348
+ zeta = _nolan.zeta
349
+ xi = _nolan.xi
350
+ c1 = _nolan.c1
351
+ # c2 = _nolan.c2
352
+ c3 = _nolan.c3
353
+ g = _nolan.g
354
+ # round x0 to zeta again if needed. zeta was recomputed and may have
355
+ # changed due to floating point differences.
356
+ # See https://github.com/scipy/scipy/pull/18133
357
+ x0 = _nolan_round_x_near_zeta(x0, alpha, zeta, x_tol_near_zeta)
358
+ # handle Nolan's initial case logic
359
+ if (alpha == 1 and beta < 0) or x0 < zeta:
360
+ # NOTE: Nolan's paper has a typo here!
361
+ # He states F(x) = 1 - F(x, alpha, -beta), but this is clearly
362
+ # incorrect since F(-infty) would be 1.0 in this case
363
+ # Indeed, the alpha != 1, x0 < zeta case is correct here.
364
+ return 1 - _cdf_single_value_piecewise_post_rounding_Z0(
365
+ -x0, alpha, -beta, quad_eps, x_tol_near_zeta
366
+ )
367
+ elif x0 == zeta:
368
+ return 0.5 - xi / np.pi
369
+
370
+ # following Nolan, we may now assume
371
+ # x0 > zeta when alpha != 1
372
+ # beta > 0 when alpha == 1
373
+
374
+ # spare calculating integral on null set
375
+ # use isclose as macos has fp differences
376
+ if np.isclose(-xi, np.pi / 2, rtol=1e-014, atol=1e-014):
377
+ return c1
378
+
379
+ def integrand(theta):
380
+ g_1 = g(theta)
381
+ return np.exp(-g_1)
382
+
383
+ with np.errstate(all="ignore"):
384
+ # shrink supports where required
385
+ left_support = -xi
386
+ right_support = np.pi / 2
387
+ if alpha > 1:
388
+ # integrand(t) monotonic 0 to 1
389
+ if integrand(-xi) != 0.0:
390
+ res = optimize.minimize(
391
+ integrand,
392
+ (-xi,),
393
+ method="L-BFGS-B",
394
+ bounds=[(-xi, np.pi / 2)],
395
+ )
396
+ left_support = res.x[0]
397
+ else:
398
+ # integrand(t) monotonic 1 to 0
399
+ if integrand(np.pi / 2) != 0.0:
400
+ res = optimize.minimize(
401
+ integrand,
402
+ (np.pi / 2,),
403
+ method="L-BFGS-B",
404
+ bounds=[(-xi, np.pi / 2)],
405
+ )
406
+ right_support = res.x[0]
407
+
408
+ intg, *ret = integrate.quad(
409
+ integrand,
410
+ left_support,
411
+ right_support,
412
+ points=[left_support, right_support],
413
+ limit=100,
414
+ epsrel=quad_eps,
415
+ epsabs=0,
416
+ full_output=1,
417
+ )
418
+
419
+ return c1 + c3 * intg
420
+
421
+
422
+ def _rvs_Z1(alpha, beta, size=None, random_state=None):
423
+ """Simulate random variables using Nolan's methods as detailed in [NO].
424
+ """
425
+
426
+ def alpha1func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
427
+ return (
428
+ 2
429
+ / np.pi
430
+ * (
431
+ (np.pi / 2 + bTH) * tanTH
432
+ - beta * np.log((np.pi / 2 * W * cosTH) / (np.pi / 2 + bTH))
433
+ )
434
+ )
435
+
436
+ def beta0func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
437
+ return (
438
+ W
439
+ / (cosTH / np.tan(aTH) + np.sin(TH))
440
+ * ((np.cos(aTH) + np.sin(aTH) * tanTH) / W) ** (1.0 / alpha)
441
+ )
442
+
443
+ def otherwise(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
444
+ # alpha is not 1 and beta is not 0
445
+ val0 = beta * np.tan(np.pi * alpha / 2)
446
+ th0 = np.arctan(val0) / alpha
447
+ val3 = W / (cosTH / np.tan(alpha * (th0 + TH)) + np.sin(TH))
448
+ res3 = val3 * (
449
+ (
450
+ np.cos(aTH)
451
+ + np.sin(aTH) * tanTH
452
+ - val0 * (np.sin(aTH) - np.cos(aTH) * tanTH)
453
+ )
454
+ / W
455
+ ) ** (1.0 / alpha)
456
+ return res3
457
+
458
+ def alphanot1func(alpha, beta, TH, aTH, bTH, cosTH, tanTH, W):
459
+ return xpx.apply_where(
460
+ beta == 0, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
461
+ beta0func, otherwise)
462
+
463
+ alpha = np.broadcast_to(alpha, size)
464
+ beta = np.broadcast_to(beta, size)
465
+ TH = uniform.rvs(
466
+ loc=-np.pi / 2.0, scale=np.pi, size=size, random_state=random_state
467
+ )
468
+ W = expon.rvs(size=size, random_state=random_state)
469
+ aTH = alpha * TH
470
+ bTH = beta * TH
471
+ cosTH = np.cos(TH)
472
+ tanTH = np.tan(TH)
473
+ return xpx.apply_where(
474
+ alpha == 1, (alpha, beta, TH, aTH, bTH, cosTH, tanTH, W),
475
+ alpha1func, alphanot1func)
476
+
477
+
478
+ def _fitstart_S0(data):
479
+ alpha, beta, delta1, gamma = _fitstart_S1(data)
480
+
481
+ # Formulas for mapping parameters in S1 parameterization to
482
+ # those in S0 parameterization can be found in [NO]. Note that
483
+ # only delta changes.
484
+ if alpha != 1:
485
+ delta0 = delta1 + beta * gamma * np.tan(np.pi * alpha / 2.0)
486
+ else:
487
+ delta0 = delta1 + 2 * beta * gamma * np.log(gamma) / np.pi
488
+
489
+ return alpha, beta, delta0, gamma
490
+
491
+
492
+ def _fitstart_S1(data):
493
+ # We follow McCullock 1986 method - Simple Consistent Estimators
494
+ # of Stable Distribution Parameters
495
+
496
+ # fmt: off
497
+ # Table III and IV
498
+ nu_alpha_range = [2.439, 2.5, 2.6, 2.7, 2.8, 3, 3.2, 3.5, 4,
499
+ 5, 6, 8, 10, 15, 25]
500
+ nu_beta_range = [0, 0.1, 0.2, 0.3, 0.5, 0.7, 1]
501
+
502
+ # table III - alpha = psi_1(nu_alpha, nu_beta)
503
+ alpha_table = np.array([
504
+ [2.000, 2.000, 2.000, 2.000, 2.000, 2.000, 2.000],
505
+ [1.916, 1.924, 1.924, 1.924, 1.924, 1.924, 1.924],
506
+ [1.808, 1.813, 1.829, 1.829, 1.829, 1.829, 1.829],
507
+ [1.729, 1.730, 1.737, 1.745, 1.745, 1.745, 1.745],
508
+ [1.664, 1.663, 1.663, 1.668, 1.676, 1.676, 1.676],
509
+ [1.563, 1.560, 1.553, 1.548, 1.547, 1.547, 1.547],
510
+ [1.484, 1.480, 1.471, 1.460, 1.448, 1.438, 1.438],
511
+ [1.391, 1.386, 1.378, 1.364, 1.337, 1.318, 1.318],
512
+ [1.279, 1.273, 1.266, 1.250, 1.210, 1.184, 1.150],
513
+ [1.128, 1.121, 1.114, 1.101, 1.067, 1.027, 0.973],
514
+ [1.029, 1.021, 1.014, 1.004, 0.974, 0.935, 0.874],
515
+ [0.896, 0.892, 0.884, 0.883, 0.855, 0.823, 0.769],
516
+ [0.818, 0.812, 0.806, 0.801, 0.780, 0.756, 0.691],
517
+ [0.698, 0.695, 0.692, 0.689, 0.676, 0.656, 0.597],
518
+ [0.593, 0.590, 0.588, 0.586, 0.579, 0.563, 0.513]]).T
519
+ # transpose because interpolation with `RectBivariateSpline` is with
520
+ # `nu_beta` as `x` and `nu_alpha` as `y`
521
+
522
+ # table IV - beta = psi_2(nu_alpha, nu_beta)
523
+ beta_table = np.array([
524
+ [0, 2.160, 1.000, 1.000, 1.000, 1.000, 1.000],
525
+ [0, 1.592, 3.390, 1.000, 1.000, 1.000, 1.000],
526
+ [0, 0.759, 1.800, 1.000, 1.000, 1.000, 1.000],
527
+ [0, 0.482, 1.048, 1.694, 1.000, 1.000, 1.000],
528
+ [0, 0.360, 0.760, 1.232, 2.229, 1.000, 1.000],
529
+ [0, 0.253, 0.518, 0.823, 1.575, 1.000, 1.000],
530
+ [0, 0.203, 0.410, 0.632, 1.244, 1.906, 1.000],
531
+ [0, 0.165, 0.332, 0.499, 0.943, 1.560, 1.000],
532
+ [0, 0.136, 0.271, 0.404, 0.689, 1.230, 2.195],
533
+ [0, 0.109, 0.216, 0.323, 0.539, 0.827, 1.917],
534
+ [0, 0.096, 0.190, 0.284, 0.472, 0.693, 1.759],
535
+ [0, 0.082, 0.163, 0.243, 0.412, 0.601, 1.596],
536
+ [0, 0.074, 0.147, 0.220, 0.377, 0.546, 1.482],
537
+ [0, 0.064, 0.128, 0.191, 0.330, 0.478, 1.362],
538
+ [0, 0.056, 0.112, 0.167, 0.285, 0.428, 1.274]]).T
539
+
540
+ # Table V and VII
541
+ # These are ordered with decreasing `alpha_range`; so we will need to
542
+ # reverse them as required by RectBivariateSpline.
543
+ alpha_range = [2, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1,
544
+ 1, 0.9, 0.8, 0.7, 0.6, 0.5][::-1]
545
+ beta_range = [0, 0.25, 0.5, 0.75, 1]
546
+
547
+ # Table V - nu_c = psi_3(alpha, beta)
548
+ nu_c_table = np.array([
549
+ [1.908, 1.908, 1.908, 1.908, 1.908],
550
+ [1.914, 1.915, 1.916, 1.918, 1.921],
551
+ [1.921, 1.922, 1.927, 1.936, 1.947],
552
+ [1.927, 1.930, 1.943, 1.961, 1.987],
553
+ [1.933, 1.940, 1.962, 1.997, 2.043],
554
+ [1.939, 1.952, 1.988, 2.045, 2.116],
555
+ [1.946, 1.967, 2.022, 2.106, 2.211],
556
+ [1.955, 1.984, 2.067, 2.188, 2.333],
557
+ [1.965, 2.007, 2.125, 2.294, 2.491],
558
+ [1.980, 2.040, 2.205, 2.435, 2.696],
559
+ [2.000, 2.085, 2.311, 2.624, 2.973],
560
+ [2.040, 2.149, 2.461, 2.886, 3.356],
561
+ [2.098, 2.244, 2.676, 3.265, 3.912],
562
+ [2.189, 2.392, 3.004, 3.844, 4.775],
563
+ [2.337, 2.634, 3.542, 4.808, 6.247],
564
+ [2.588, 3.073, 4.534, 6.636, 9.144]])[::-1].T
565
+ # transpose because interpolation with `RectBivariateSpline` is with
566
+ # `beta` as `x` and `alpha` as `y`
567
+
568
+ # Table VII - nu_zeta = psi_5(alpha, beta)
569
+ nu_zeta_table = np.array([
570
+ [0, 0.000, 0.000, 0.000, 0.000],
571
+ [0, -0.017, -0.032, -0.049, -0.064],
572
+ [0, -0.030, -0.061, -0.092, -0.123],
573
+ [0, -0.043, -0.088, -0.132, -0.179],
574
+ [0, -0.056, -0.111, -0.170, -0.232],
575
+ [0, -0.066, -0.134, -0.206, -0.283],
576
+ [0, -0.075, -0.154, -0.241, -0.335],
577
+ [0, -0.084, -0.173, -0.276, -0.390],
578
+ [0, -0.090, -0.192, -0.310, -0.447],
579
+ [0, -0.095, -0.208, -0.346, -0.508],
580
+ [0, -0.098, -0.223, -0.380, -0.576],
581
+ [0, -0.099, -0.237, -0.424, -0.652],
582
+ [0, -0.096, -0.250, -0.469, -0.742],
583
+ [0, -0.089, -0.262, -0.520, -0.853],
584
+ [0, -0.078, -0.272, -0.581, -0.997],
585
+ [0, -0.061, -0.279, -0.659, -1.198]])[::-1].T
586
+ # fmt: on
587
+
588
+ psi_1 = RectBivariateSpline(nu_beta_range, nu_alpha_range,
589
+ alpha_table, kx=1, ky=1, s=0)
590
+
591
+ def psi_1_1(nu_beta, nu_alpha):
592
+ return psi_1(nu_beta, nu_alpha) \
593
+ if nu_beta > 0 else psi_1(-nu_beta, nu_alpha)
594
+
595
+ psi_2 = RectBivariateSpline(nu_beta_range, nu_alpha_range,
596
+ beta_table, kx=1, ky=1, s=0)
597
+
598
+ def psi_2_1(nu_beta, nu_alpha):
599
+ return psi_2(nu_beta, nu_alpha) \
600
+ if nu_beta > 0 else -psi_2(-nu_beta, nu_alpha)
601
+
602
+ phi_3 = RectBivariateSpline(beta_range, alpha_range, nu_c_table,
603
+ kx=1, ky=1, s=0)
604
+
605
+ def phi_3_1(beta, alpha):
606
+ return phi_3(beta, alpha) if beta > 0 else phi_3(-beta, alpha)
607
+
608
+ phi_5 = RectBivariateSpline(beta_range, alpha_range, nu_zeta_table,
609
+ kx=1, ky=1, s=0)
610
+
611
+ def phi_5_1(beta, alpha):
612
+ return phi_5(beta, alpha) if beta > 0 else -phi_5(-beta, alpha)
613
+
614
+ # quantiles
615
+ p05 = np.percentile(data, 5)
616
+ p50 = np.percentile(data, 50)
617
+ p95 = np.percentile(data, 95)
618
+ p25 = np.percentile(data, 25)
619
+ p75 = np.percentile(data, 75)
620
+
621
+ nu_alpha = (p95 - p05) / (p75 - p25)
622
+ nu_beta = (p95 + p05 - 2 * p50) / (p95 - p05)
623
+
624
+ if nu_alpha >= 2.439:
625
+ eps = np.finfo(float).eps
626
+ alpha = np.clip(psi_1_1(nu_beta, nu_alpha)[0, 0], eps, 2.)
627
+ beta = np.clip(psi_2_1(nu_beta, nu_alpha)[0, 0], -1.0, 1.0)
628
+ else:
629
+ alpha = 2.0
630
+ beta = np.sign(nu_beta)
631
+ c = (p75 - p25) / phi_3_1(beta, alpha)[0, 0]
632
+ zeta = p50 + c * phi_5_1(beta, alpha)[0, 0]
633
+ delta = zeta-beta*c*np.tan(np.pi*alpha/2.) if alpha != 1. else zeta
634
+
635
+ return (alpha, beta, delta, c)
636
+
637
+
638
+ class levy_stable_gen(rv_continuous):
639
+ r"""A Levy-stable continuous random variable.
640
+
641
+ %(before_notes)s
642
+
643
+ See Also
644
+ --------
645
+ levy, levy_l, cauchy, norm
646
+
647
+ Notes
648
+ -----
649
+ The distribution for `levy_stable` has characteristic function:
650
+
651
+ .. math::
652
+
653
+ \varphi(t, \alpha, \beta, c, \mu) =
654
+ e^{it\mu -|ct|^{\alpha}(1-i\beta\operatorname{sign}(t)\Phi(\alpha, t))}
655
+
656
+ where two different parameterizations are supported. The first :math:`S_1`:
657
+
658
+ .. math::
659
+
660
+ \Phi = \begin{cases}
661
+ \tan \left({\frac {\pi \alpha }{2}}\right)&\alpha \neq 1\\
662
+ -{\frac {2}{\pi }}\log |t|&\alpha =1
663
+ \end{cases}
664
+
665
+ The second :math:`S_0`:
666
+
667
+ .. math::
668
+
669
+ \Phi = \begin{cases}
670
+ -\tan \left({\frac {\pi \alpha }{2}}\right)(|ct|^{1-\alpha}-1)
671
+ &\alpha \neq 1\\
672
+ -{\frac {2}{\pi }}\log |ct|&\alpha =1
673
+ \end{cases}
674
+
675
+
676
+ The probability density function for `levy_stable` is:
677
+
678
+ .. math::
679
+
680
+ f(x) = \frac{1}{2\pi}\int_{-\infty}^\infty \varphi(t)e^{-ixt}\,dt
681
+
682
+ where :math:`-\infty < t < \infty`. This integral does not have a known
683
+ closed form.
684
+
685
+ `levy_stable` generalizes several distributions. Where possible, they
686
+ should be used instead. Specifically, when the shape parameters
687
+ assume the values in the table below, the corresponding equivalent
688
+ distribution should be used.
689
+
690
+ ========= ======== ===========
691
+ ``alpha`` ``beta`` Equivalent
692
+ ========= ======== ===========
693
+ 1/2 -1 `levy_l`
694
+ 1/2 1 `levy`
695
+ 1 0 `cauchy`
696
+ 2 any `norm` (with ``scale=sqrt(2)``)
697
+ ========= ======== ===========
698
+
699
+ Evaluation of the pdf uses Nolan's piecewise integration approach with the
700
+ Zolotarev :math:`M` parameterization by default. There is also the option
701
+ to use direct numerical integration of the standard parameterization of the
702
+ characteristic function or to evaluate by taking the FFT of the
703
+ characteristic function.
704
+
705
+ The default method can changed by setting the class variable
706
+ ``levy_stable.pdf_default_method`` to one of 'piecewise' for Nolan's
707
+ approach, 'dni' for direct numerical integration, or 'fft-simpson' for the
708
+ FFT based approach. For the sake of backwards compatibility, the methods
709
+ 'best' and 'zolotarev' are equivalent to 'piecewise' and the method
710
+ 'quadrature' is equivalent to 'dni'.
711
+
712
+ The parameterization can be changed by setting the class variable
713
+ ``levy_stable.parameterization`` to either 'S0' or 'S1'.
714
+ The default is 'S1'.
715
+
716
+ To improve performance of piecewise and direct numerical integration one
717
+ can specify ``levy_stable.quad_eps`` (defaults to 1.2e-14). This is used
718
+ as both the absolute and relative quadrature tolerance for direct numerical
719
+ integration and as the relative quadrature tolerance for the piecewise
720
+ method. One can also specify ``levy_stable.piecewise_x_tol_near_zeta``
721
+ (defaults to 0.005) for how close x is to zeta before it is considered the
722
+ same as x [NO]. The exact check is
723
+ ``abs(x0 - zeta) < piecewise_x_tol_near_zeta*alpha**(1/alpha)``. One can
724
+ also specify ``levy_stable.piecewise_alpha_tol_near_one`` (defaults to
725
+ 0.005) for how close alpha is to 1 before being considered equal to 1.
726
+
727
+ To increase accuracy of FFT calculation one can specify
728
+ ``levy_stable.pdf_fft_grid_spacing`` (defaults to 0.001) and
729
+ ``pdf_fft_n_points_two_power`` (defaults to None which means a value is
730
+ calculated that sufficiently covers the input range).
731
+
732
+ Further control over FFT calculation is available by setting
733
+ ``pdf_fft_interpolation_degree`` (defaults to 3) for spline order and
734
+ ``pdf_fft_interpolation_level`` for determining the number of points to use
735
+ in the Newton-Cotes formula when approximating the characteristic function
736
+ (considered experimental).
737
+
738
+ Evaluation of the cdf uses Nolan's piecewise integration approach with the
739
+ Zolatarev :math:`S_0` parameterization by default. There is also the option
740
+ to evaluate through integration of an interpolated spline of the pdf
741
+ calculated by means of the FFT method. The settings affecting FFT
742
+ calculation are the same as for pdf calculation. The default cdf method can
743
+ be changed by setting ``levy_stable.cdf_default_method`` to either
744
+ 'piecewise' or 'fft-simpson'. For cdf calculations the Zolatarev method is
745
+ superior in accuracy, so FFT is disabled by default.
746
+
747
+ Fitting estimate uses quantile estimation method in [MC]. MLE estimation of
748
+ parameters in fit method uses this quantile estimate initially. Note that
749
+ MLE doesn't always converge if using FFT for pdf calculations; this will be
750
+ the case if alpha <= 1 where the FFT approach doesn't give good
751
+ approximations.
752
+
753
+ Any non-missing value for the attribute
754
+ ``levy_stable.pdf_fft_min_points_threshold`` will set
755
+ ``levy_stable.pdf_default_method`` to 'fft-simpson' if a valid
756
+ default method is not otherwise set.
757
+
758
+
759
+
760
+ .. warning::
761
+
762
+ For pdf calculations FFT calculation is considered experimental.
763
+
764
+ For cdf calculations FFT calculation is considered experimental. Use
765
+ Zolatarev's method instead (default).
766
+
767
+ The probability density above is defined in the "standardized" form. To
768
+ shift and/or scale the distribution use the ``loc`` and ``scale``
769
+ parameters.
770
+ Generally ``%(name)s.pdf(x, %(shapes)s, loc, scale)`` is identically
771
+ equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
772
+ ``y = (x - loc) / scale``, except in the ``S1`` parameterization if
773
+ ``alpha == 1``. In that case ``%(name)s.pdf(x, %(shapes)s, loc, scale)``
774
+ is identically equivalent to ``%(name)s.pdf(y, %(shapes)s) / scale`` with
775
+ ``y = (x - loc - 2 * beta * scale * np.log(scale) / np.pi) / scale``.
776
+ See [NO2]_ Definition 1.8 for more information.
777
+ Note that shifting the location of a distribution
778
+ does not make it a "noncentral" distribution.
779
+
780
+ References
781
+ ----------
782
+ .. [MC] McCulloch, J., 1986. Simple consistent estimators of stable
783
+ distribution parameters. Communications in Statistics - Simulation and
784
+ Computation 15, 11091136.
785
+ .. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
786
+ to compute densities of stable distribution.
787
+ .. [NO] Nolan, J., 1997. Numerical Calculation of Stable Densities and
788
+ distributions Functions.
789
+ .. [NO2] Nolan, J., 2018. Stable Distributions: Models for Heavy Tailed
790
+ Data.
791
+ .. [HO] Hopcraft, K. I., Jakeman, E., Tanner, R. M. J., 1999. Lévy random
792
+ walks with fluctuating step number and multiscale behavior.
793
+
794
+ %(example)s
795
+
796
+ """
797
+ # Configurable options as class variables
798
+ # (accessible from self by attribute lookup).
799
+ parameterization = "S1"
800
+ pdf_default_method = "piecewise"
801
+ cdf_default_method = "piecewise"
802
+ quad_eps = _QUAD_EPS
803
+ piecewise_x_tol_near_zeta = 0.005
804
+ piecewise_alpha_tol_near_one = 0.005
805
+ pdf_fft_min_points_threshold = None
806
+ pdf_fft_grid_spacing = 0.001
807
+ pdf_fft_n_points_two_power = None
808
+ pdf_fft_interpolation_level = 3
809
+ pdf_fft_interpolation_degree = 3
810
+
811
+ def __call__(self, *args, **params):
812
+ dist = levy_stable_frozen(self, *args, **params)
813
+ dist.parameterization = self.parameterization
814
+ return dist
815
+
816
+ def _argcheck(self, alpha, beta):
817
+ return (alpha > 0) & (alpha <= 2) & (beta <= 1) & (beta >= -1)
818
+
819
+ def _shape_info(self):
820
+ ialpha = _ShapeInfo("alpha", False, (0, 2), (False, True))
821
+ ibeta = _ShapeInfo("beta", False, (-1, 1), (True, True))
822
+ return [ialpha, ibeta]
823
+
824
+ def _parameterization(self):
825
+ allowed = ("S0", "S1")
826
+ pz = self.parameterization
827
+ if pz not in allowed:
828
+ raise RuntimeError(
829
+ f"Parameterization '{pz}' in supported list: {allowed}"
830
+ )
831
+ return pz
832
+
833
+ @inherit_docstring_from(rv_continuous)
834
+ def rvs(self, *args, **kwds):
835
+ X1 = super().rvs(*args, **kwds)
836
+
837
+ kwds.pop("discrete", None)
838
+ kwds.pop("random_state", None)
839
+ (alpha, beta), delta, gamma, size = self._parse_args_rvs(*args, **kwds)
840
+
841
+ # shift location for this parameterisation (S1)
842
+ X1 = np.where(
843
+ alpha == 1.0, X1 + 2 * beta * gamma * np.log(gamma) / np.pi, X1
844
+ )
845
+
846
+ if self._parameterization() == "S0":
847
+ return np.where(
848
+ alpha == 1.0,
849
+ X1 - (beta * 2 * gamma * np.log(gamma) / np.pi),
850
+ X1 - gamma * beta * np.tan(np.pi * alpha / 2.0),
851
+ )
852
+ elif self._parameterization() == "S1":
853
+ return X1
854
+
855
+ def _rvs(self, alpha, beta, size=None, random_state=None):
856
+ return _rvs_Z1(alpha, beta, size, random_state)
857
+
858
+ @inherit_docstring_from(rv_continuous)
859
+ def pdf(self, x, *args, **kwds):
860
+ # override base class version to correct
861
+ # location for S1 parameterization
862
+ if self._parameterization() == "S0":
863
+ return super().pdf(x, *args, **kwds)
864
+ elif self._parameterization() == "S1":
865
+ (alpha, beta), delta, gamma = self._parse_args(*args, **kwds)
866
+ if np.all(np.reshape(alpha, (1, -1))[0, :] != 1):
867
+ return super().pdf(x, *args, **kwds)
868
+ else:
869
+ # correct location for this parameterisation
870
+ x = np.reshape(x, (1, -1))[0, :]
871
+ x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
872
+
873
+ data_in = np.dstack((x, alpha, beta))[0]
874
+ data_out = np.empty(shape=(len(data_in), 1))
875
+ # group data in unique arrays of alpha, beta pairs
876
+ uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
877
+ for pair in uniq_param_pairs:
878
+ _alpha, _beta = pair
879
+ _delta = (
880
+ delta + 2 * _beta * gamma * np.log(gamma) / np.pi
881
+ if _alpha == 1.0
882
+ else delta
883
+ )
884
+ data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
885
+ _x = data_in[data_mask, 0]
886
+ data_out[data_mask] = (
887
+ super()
888
+ .pdf(_x, _alpha, _beta, loc=_delta, scale=gamma)
889
+ .reshape(len(_x), 1)
890
+ )
891
+ output = data_out.T[0]
892
+ if output.shape == (1,):
893
+ return output[0]
894
+ return output
895
+
896
+ def _pdf(self, x, alpha, beta):
897
+ if self._parameterization() == "S0":
898
+ _pdf_single_value_piecewise = _pdf_single_value_piecewise_Z0
899
+ _pdf_single_value_cf_integrate = _pdf_single_value_cf_integrate_Z0
900
+ _cf = _cf_Z0
901
+ elif self._parameterization() == "S1":
902
+ _pdf_single_value_piecewise = _pdf_single_value_piecewise_Z1
903
+ _pdf_single_value_cf_integrate = _pdf_single_value_cf_integrate_Z1
904
+ _cf = _cf_Z1
905
+
906
+ x = np.asarray(x).reshape(1, -1)[0, :]
907
+
908
+ x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
909
+
910
+ data_in = np.dstack((x, alpha, beta))[0]
911
+ data_out = np.empty(shape=(len(data_in), 1))
912
+
913
+ pdf_default_method_name = self.pdf_default_method
914
+ if pdf_default_method_name in ("piecewise", "best", "zolotarev"):
915
+ pdf_single_value_method = _pdf_single_value_piecewise
916
+ elif pdf_default_method_name in ("dni", "quadrature"):
917
+ pdf_single_value_method = _pdf_single_value_cf_integrate
918
+ elif (
919
+ pdf_default_method_name == "fft-simpson"
920
+ or self.pdf_fft_min_points_threshold is not None
921
+ ):
922
+ pdf_single_value_method = None
923
+
924
+ pdf_single_value_kwds = {
925
+ "quad_eps": self.quad_eps,
926
+ "piecewise_x_tol_near_zeta": self.piecewise_x_tol_near_zeta,
927
+ "piecewise_alpha_tol_near_one": self.piecewise_alpha_tol_near_one,
928
+ }
929
+
930
+ fft_grid_spacing = self.pdf_fft_grid_spacing
931
+ fft_n_points_two_power = self.pdf_fft_n_points_two_power
932
+ fft_interpolation_level = self.pdf_fft_interpolation_level
933
+ fft_interpolation_degree = self.pdf_fft_interpolation_degree
934
+
935
+ # group data in unique arrays of alpha, beta pairs
936
+ uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
937
+ for pair in uniq_param_pairs:
938
+ data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
939
+ data_subset = data_in[data_mask]
940
+ if pdf_single_value_method is not None:
941
+ data_out[data_mask] = np.array(
942
+ [
943
+ pdf_single_value_method(
944
+ _x, _alpha, _beta, **pdf_single_value_kwds
945
+ )
946
+ for _x, _alpha, _beta in data_subset
947
+ ]
948
+ ).reshape(len(data_subset), 1)
949
+ else:
950
+ warnings.warn(
951
+ "Density calculations experimental for FFT method."
952
+ + " Use combination of piecewise and dni methods instead.",
953
+ RuntimeWarning, stacklevel=3,
954
+ )
955
+ _alpha, _beta = pair
956
+ _x = data_subset[:, (0,)]
957
+
958
+ if _alpha < 1.0:
959
+ raise RuntimeError(
960
+ "FFT method does not work well for alpha less than 1."
961
+ )
962
+
963
+ # need enough points to "cover" _x for interpolation
964
+ if fft_grid_spacing is None and fft_n_points_two_power is None:
965
+ raise ValueError(
966
+ "One of fft_grid_spacing or fft_n_points_two_power "
967
+ + "needs to be set."
968
+ )
969
+ max_abs_x = np.max(np.abs(_x))
970
+ h = (
971
+ 2 ** (3 - fft_n_points_two_power) * max_abs_x
972
+ if fft_grid_spacing is None
973
+ else fft_grid_spacing
974
+ )
975
+ q = (
976
+ np.ceil(np.log(2 * max_abs_x / h) / np.log(2)) + 2
977
+ if fft_n_points_two_power is None
978
+ else int(fft_n_points_two_power)
979
+ )
980
+
981
+ # for some parameters, the range of x can be quite
982
+ # large, let's choose an arbitrary cut off (8GB) to save on
983
+ # computer memory.
984
+ MAX_Q = 30
985
+ if q > MAX_Q:
986
+ raise RuntimeError(
987
+ "fft_n_points_two_power has a maximum "
988
+ + f"value of {MAX_Q}"
989
+ )
990
+
991
+ density_x, density = pdf_from_cf_with_fft(
992
+ lambda t: _cf(t, _alpha, _beta),
993
+ h=h,
994
+ q=q,
995
+ level=fft_interpolation_level,
996
+ )
997
+ f = interpolate.InterpolatedUnivariateSpline(
998
+ density_x, np.real(density), k=fft_interpolation_degree
999
+ ) # patch FFT to use cubic
1000
+ data_out[data_mask] = f(_x)
1001
+
1002
+ return data_out.T[0]
1003
+
1004
+ @inherit_docstring_from(rv_continuous)
1005
+ def cdf(self, x, *args, **kwds):
1006
+ # override base class version to correct
1007
+ # location for S1 parameterization
1008
+ # NOTE: this is near identical to pdf() above
1009
+ if self._parameterization() == "S0":
1010
+ return super().cdf(x, *args, **kwds)
1011
+ elif self._parameterization() == "S1":
1012
+ (alpha, beta), delta, gamma = self._parse_args(*args, **kwds)
1013
+ if np.all(np.reshape(alpha, (1, -1))[0, :] != 1):
1014
+ return super().cdf(x, *args, **kwds)
1015
+ else:
1016
+ # correct location for this parameterisation
1017
+ x = np.reshape(x, (1, -1))[0, :]
1018
+ x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
1019
+
1020
+ data_in = np.dstack((x, alpha, beta))[0]
1021
+ data_out = np.empty(shape=(len(data_in), 1))
1022
+ # group data in unique arrays of alpha, beta pairs
1023
+ uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
1024
+ for pair in uniq_param_pairs:
1025
+ _alpha, _beta = pair
1026
+ _delta = (
1027
+ delta + 2 * _beta * gamma * np.log(gamma) / np.pi
1028
+ if _alpha == 1.0
1029
+ else delta
1030
+ )
1031
+ data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
1032
+ _x = data_in[data_mask, 0]
1033
+ data_out[data_mask] = (
1034
+ super()
1035
+ .cdf(_x, _alpha, _beta, loc=_delta, scale=gamma)
1036
+ .reshape(len(_x), 1)
1037
+ )
1038
+ output = data_out.T[0]
1039
+ if output.shape == (1,):
1040
+ return output[0]
1041
+ return output
1042
+
1043
+ def _cdf(self, x, alpha, beta):
1044
+ if self._parameterization() == "S0":
1045
+ _cdf_single_value_piecewise = _cdf_single_value_piecewise_Z0
1046
+ _cf = _cf_Z0
1047
+ elif self._parameterization() == "S1":
1048
+ _cdf_single_value_piecewise = _cdf_single_value_piecewise_Z1
1049
+ _cf = _cf_Z1
1050
+
1051
+ x = np.asarray(x).reshape(1, -1)[0, :]
1052
+
1053
+ x, alpha, beta = np.broadcast_arrays(x, alpha, beta)
1054
+
1055
+ data_in = np.dstack((x, alpha, beta))[0]
1056
+ data_out = np.empty(shape=(len(data_in), 1))
1057
+
1058
+ cdf_default_method_name = self.cdf_default_method
1059
+ if cdf_default_method_name == "piecewise":
1060
+ cdf_single_value_method = _cdf_single_value_piecewise
1061
+ elif cdf_default_method_name == "fft-simpson":
1062
+ cdf_single_value_method = None
1063
+
1064
+ cdf_single_value_kwds = {
1065
+ "quad_eps": self.quad_eps,
1066
+ "piecewise_x_tol_near_zeta": self.piecewise_x_tol_near_zeta,
1067
+ "piecewise_alpha_tol_near_one": self.piecewise_alpha_tol_near_one,
1068
+ }
1069
+
1070
+ fft_grid_spacing = self.pdf_fft_grid_spacing
1071
+ fft_n_points_two_power = self.pdf_fft_n_points_two_power
1072
+ fft_interpolation_level = self.pdf_fft_interpolation_level
1073
+ fft_interpolation_degree = self.pdf_fft_interpolation_degree
1074
+
1075
+ # group data in unique arrays of alpha, beta pairs
1076
+ uniq_param_pairs = np.unique(data_in[:, 1:], axis=0)
1077
+ for pair in uniq_param_pairs:
1078
+ data_mask = np.all(data_in[:, 1:] == pair, axis=-1)
1079
+ data_subset = data_in[data_mask]
1080
+ if cdf_single_value_method is not None:
1081
+ data_out[data_mask] = np.array(
1082
+ [
1083
+ cdf_single_value_method(
1084
+ _x, _alpha, _beta, **cdf_single_value_kwds
1085
+ )
1086
+ for _x, _alpha, _beta in data_subset
1087
+ ]
1088
+ ).reshape(len(data_subset), 1)
1089
+ else:
1090
+ warnings.warn(
1091
+ "Cumulative density calculations experimental for FFT"
1092
+ + " method. Use piecewise method instead.",
1093
+ RuntimeWarning, stacklevel=3,
1094
+ )
1095
+ _alpha, _beta = pair
1096
+ _x = data_subset[:, (0,)]
1097
+
1098
+ # need enough points to "cover" _x for interpolation
1099
+ if fft_grid_spacing is None and fft_n_points_two_power is None:
1100
+ raise ValueError(
1101
+ "One of fft_grid_spacing or fft_n_points_two_power "
1102
+ + "needs to be set."
1103
+ )
1104
+ max_abs_x = np.max(np.abs(_x))
1105
+ h = (
1106
+ 2 ** (3 - fft_n_points_two_power) * max_abs_x
1107
+ if fft_grid_spacing is None
1108
+ else fft_grid_spacing
1109
+ )
1110
+ q = (
1111
+ np.ceil(np.log(2 * max_abs_x / h) / np.log(2)) + 2
1112
+ if fft_n_points_two_power is None
1113
+ else int(fft_n_points_two_power)
1114
+ )
1115
+
1116
+ density_x, density = pdf_from_cf_with_fft(
1117
+ lambda t: _cf(t, _alpha, _beta),
1118
+ h=h,
1119
+ q=q,
1120
+ level=fft_interpolation_level,
1121
+ )
1122
+ f = interpolate.InterpolatedUnivariateSpline(
1123
+ density_x, np.real(density), k=fft_interpolation_degree
1124
+ )
1125
+ data_out[data_mask] = np.array(
1126
+ [f.integral(self.a, float(x_1.squeeze())) for x_1 in _x]
1127
+ ).reshape(data_out[data_mask].shape)
1128
+
1129
+ return data_out.T[0]
1130
+
1131
+ def _fitstart(self, data):
1132
+ if self._parameterization() == "S0":
1133
+ _fitstart = _fitstart_S0
1134
+ elif self._parameterization() == "S1":
1135
+ _fitstart = _fitstart_S1
1136
+ return _fitstart(data)
1137
+
1138
+ def _stats(self, alpha, beta):
1139
+ mu = 0 if alpha > 1 else np.nan
1140
+ mu2 = 2 if alpha == 2 else np.inf
1141
+ g1 = 0.0 if alpha == 2.0 else np.nan
1142
+ g2 = 0.0 if alpha == 2.0 else np.nan
1143
+ return mu, mu2, g1, g2
1144
+
1145
+
1146
+ # cotes numbers - see sequence from http://oeis.org/A100642
1147
+ Cotes_table = np.array(
1148
+ [[], [1]] + [v[2] for v in _builtincoeffs.values()], dtype=object
1149
+ )
1150
+ Cotes = np.array(
1151
+ [
1152
+ np.pad(r, (0, len(Cotes_table) - 1 - len(r)), mode='constant')
1153
+ for r in Cotes_table
1154
+ ]
1155
+ )
1156
+
1157
+
1158
+ def pdf_from_cf_with_fft(cf, h=0.01, q=9, level=3):
1159
+ """Calculates pdf from characteristic function.
1160
+
1161
+ Uses fast Fourier transform with Newton-Cotes integration following [WZ].
1162
+ Defaults to using Simpson's method (3-point Newton-Cotes integration).
1163
+
1164
+ Parameters
1165
+ ----------
1166
+ cf : callable
1167
+ Single argument function from float -> complex expressing a
1168
+ characteristic function for some distribution.
1169
+ h : Optional[float]
1170
+ Step size for Newton-Cotes integration. Default: 0.01
1171
+ q : Optional[int]
1172
+ Use 2**q steps when performing Newton-Cotes integration.
1173
+ The infinite integral in the inverse Fourier transform will then
1174
+ be restricted to the interval [-2**q * h / 2, 2**q * h / 2]. Setting
1175
+ the number of steps equal to a power of 2 allows the fft to be
1176
+ calculated in O(n*log(n)) time rather than O(n**2).
1177
+ Default: 9
1178
+ level : Optional[int]
1179
+ Calculate integral using n-point Newton-Cotes integration for
1180
+ n = level. The 3-point Newton-Cotes formula corresponds to Simpson's
1181
+ rule. Default: 3
1182
+
1183
+ Returns
1184
+ -------
1185
+ x_l : ndarray
1186
+ Array of points x at which pdf is estimated. 2**q equally spaced
1187
+ points from -pi/h up to but not including pi/h.
1188
+ density : ndarray
1189
+ Estimated values of pdf corresponding to cf at points in x_l.
1190
+
1191
+ References
1192
+ ----------
1193
+ .. [WZ] Wang, Li and Zhang, Ji-Hong, 2008. Simpson's rule based FFT method
1194
+ to compute densities of stable distribution.
1195
+ """
1196
+ n = level
1197
+ N = 2**q
1198
+ steps = np.arange(0, N)
1199
+ L = N * h / 2
1200
+ x_l = np.pi * (steps - N / 2) / L
1201
+ if level > 1:
1202
+ indices = np.arange(n).reshape(n, 1)
1203
+ s1 = np.sum(
1204
+ (-1) ** steps * Cotes[n, indices] * np.fft.fft(
1205
+ (-1)**steps * cf(-L + h * steps + h * indices / (n - 1))
1206
+ ) * np.exp(
1207
+ 1j * np.pi * indices / (n - 1)
1208
+ - 2 * 1j * np.pi * indices * steps /
1209
+ (N * (n - 1))
1210
+ ),
1211
+ axis=0
1212
+ )
1213
+ else:
1214
+ s1 = (-1) ** steps * Cotes[n, 0] * np.fft.fft(
1215
+ (-1) ** steps * cf(-L + h * steps)
1216
+ )
1217
+ density = h * s1 / (2 * np.pi * np.sum(Cotes[n]))
1218
+ return (x_l, density)
1219
+
1220
+
1221
+ levy_stable = levy_stable_gen(name="levy_stable")
1222
+
1223
+
1224
+ class levy_stable_frozen(rv_continuous_frozen):
1225
+ @property
1226
+ def parameterization(self):
1227
+ return self.dist.parameterization
1228
+
1229
+ @parameterization.setter
1230
+ def parameterization(self, value):
1231
+ self.dist.parameterization = value