scipy 1.15.2__cp311-cp311-win_amd64.whl → 1.16.0__cp311-cp311-win_amd64.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 (769) hide show
  1. scipy/__config__.py +8 -8
  2. scipy/__init__.py +6 -9
  3. scipy/_cyutility.cp311-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp311-win_amd64.pyd +0 -0
  5. scipy/_lib/_array_api.py +497 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cp311-win_amd64.dll.a +0 -0
  9. scipy/_lib/_ccallback_c.cp311-win_amd64.pyd +0 -0
  10. scipy/_lib/_docscrape.py +1 -1
  11. scipy/_lib/_elementwise_iterative_method.py +15 -26
  12. scipy/_lib/_fpumode.cp311-win_amd64.dll.a +0 -0
  13. scipy/_lib/_fpumode.cp311-win_amd64.pyd +0 -0
  14. scipy/_lib/_sparse.py +41 -0
  15. scipy/_lib/_test_ccallback.cp311-win_amd64.dll.a +0 -0
  16. scipy/_lib/_test_ccallback.cp311-win_amd64.pyd +0 -0
  17. scipy/_lib/_test_deprecation_call.cp311-win_amd64.dll.a +0 -0
  18. scipy/_lib/_test_deprecation_call.cp311-win_amd64.pyd +0 -0
  19. scipy/_lib/_test_deprecation_def.cp311-win_amd64.dll.a +0 -0
  20. scipy/_lib/_test_deprecation_def.cp311-win_amd64.pyd +0 -0
  21. scipy/_lib/_testutils.py +6 -2
  22. scipy/_lib/_uarray/_uarray.cp311-win_amd64.dll.a +0 -0
  23. scipy/_lib/_uarray/_uarray.cp311-win_amd64.pyd +0 -0
  24. scipy/_lib/_util.py +222 -125
  25. scipy/_lib/array_api_compat/__init__.py +4 -4
  26. scipy/_lib/array_api_compat/_internal.py +19 -6
  27. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  28. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  29. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  30. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  31. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  32. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  33. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  34. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  35. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  36. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  37. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  38. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  39. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  40. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  41. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  42. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  43. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  44. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  45. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  46. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  47. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  48. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  49. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  50. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  51. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  52. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  53. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  54. scipy/_lib/array_api_extra/__init__.py +26 -3
  55. scipy/_lib/array_api_extra/_delegation.py +171 -0
  56. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  57. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  58. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  59. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  60. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  61. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  62. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  63. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  64. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  65. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  66. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  67. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  68. scipy/_lib/array_api_extra/testing.py +359 -0
  69. scipy/_lib/decorator.py +2 -2
  70. scipy/_lib/doccer.py +1 -7
  71. scipy/_lib/messagestream.cp311-win_amd64.dll.a +0 -0
  72. scipy/_lib/messagestream.cp311-win_amd64.pyd +0 -0
  73. scipy/_lib/pyprima/__init__.py +212 -0
  74. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  75. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  76. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  77. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  78. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  79. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  80. scipy/_lib/pyprima/cobyla/update.py +289 -0
  81. scipy/_lib/pyprima/common/__init__.py +0 -0
  82. scipy/_lib/pyprima/common/_bounds.py +34 -0
  83. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  84. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  85. scipy/_lib/pyprima/common/_project.py +173 -0
  86. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  87. scipy/_lib/pyprima/common/consts.py +47 -0
  88. scipy/_lib/pyprima/common/evaluate.py +99 -0
  89. scipy/_lib/pyprima/common/history.py +38 -0
  90. scipy/_lib/pyprima/common/infos.py +30 -0
  91. scipy/_lib/pyprima/common/linalg.py +435 -0
  92. scipy/_lib/pyprima/common/message.py +290 -0
  93. scipy/_lib/pyprima/common/powalg.py +131 -0
  94. scipy/_lib/pyprima/common/preproc.py +277 -0
  95. scipy/_lib/pyprima/common/present.py +5 -0
  96. scipy/_lib/pyprima/common/ratio.py +54 -0
  97. scipy/_lib/pyprima/common/redrho.py +47 -0
  98. scipy/_lib/pyprima/common/selectx.py +296 -0
  99. scipy/_lib/tests/test__util.py +105 -121
  100. scipy/_lib/tests/test_array_api.py +169 -34
  101. scipy/_lib/tests/test_bunch.py +7 -0
  102. scipy/_lib/tests/test_ccallback.py +2 -10
  103. scipy/_lib/tests/test_public_api.py +13 -0
  104. scipy/cluster/_hierarchy.cp311-win_amd64.dll.a +0 -0
  105. scipy/cluster/_hierarchy.cp311-win_amd64.pyd +0 -0
  106. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.dll.a +0 -0
  107. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.pyd +0 -0
  108. scipy/cluster/_vq.cp311-win_amd64.dll.a +0 -0
  109. scipy/cluster/_vq.cp311-win_amd64.pyd +0 -0
  110. scipy/cluster/hierarchy.py +393 -223
  111. scipy/cluster/tests/test_hierarchy.py +273 -335
  112. scipy/cluster/tests/test_vq.py +45 -61
  113. scipy/cluster/vq.py +39 -35
  114. scipy/conftest.py +282 -151
  115. scipy/constants/_constants.py +4 -1
  116. scipy/constants/tests/test_codata.py +2 -2
  117. scipy/constants/tests/test_constants.py +11 -18
  118. scipy/datasets/_download_all.py +15 -1
  119. scipy/datasets/_fetchers.py +7 -1
  120. scipy/datasets/_utils.py +1 -1
  121. scipy/differentiate/_differentiate.py +25 -25
  122. scipy/differentiate/tests/test_differentiate.py +24 -25
  123. scipy/fft/_basic.py +20 -0
  124. scipy/fft/_helper.py +3 -34
  125. scipy/fft/_pocketfft/helper.py +29 -1
  126. scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.dll.a +0 -0
  127. scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.pyd +0 -0
  128. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  129. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  130. scipy/fft/_realtransforms.py +13 -0
  131. scipy/fft/tests/test_basic.py +27 -25
  132. scipy/fft/tests/test_fftlog.py +16 -7
  133. scipy/fft/tests/test_helper.py +18 -34
  134. scipy/fft/tests/test_real_transforms.py +8 -10
  135. scipy/fftpack/convolve.cp311-win_amd64.dll.a +0 -0
  136. scipy/fftpack/convolve.cp311-win_amd64.pyd +0 -0
  137. scipy/fftpack/tests/test_basic.py +2 -4
  138. scipy/fftpack/tests/test_real_transforms.py +8 -9
  139. scipy/integrate/_bvp.py +9 -3
  140. scipy/integrate/_cubature.py +3 -2
  141. scipy/integrate/_dop.cp311-win_amd64.dll.a +0 -0
  142. scipy/integrate/_dop.cp311-win_amd64.pyd +0 -0
  143. scipy/integrate/_ivp/common.py +3 -3
  144. scipy/integrate/_ivp/ivp.py +9 -2
  145. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  146. scipy/integrate/_lsoda.cp311-win_amd64.dll.a +0 -0
  147. scipy/integrate/_lsoda.cp311-win_amd64.pyd +0 -0
  148. scipy/integrate/_ode.py +9 -2
  149. scipy/integrate/_odepack.cp311-win_amd64.dll.a +0 -0
  150. scipy/integrate/_odepack.cp311-win_amd64.pyd +0 -0
  151. scipy/integrate/_quad_vec.py +21 -29
  152. scipy/integrate/_quadpack.cp311-win_amd64.dll.a +0 -0
  153. scipy/integrate/_quadpack.cp311-win_amd64.pyd +0 -0
  154. scipy/integrate/_quadpack_py.py +11 -7
  155. scipy/integrate/_quadrature.py +3 -3
  156. scipy/integrate/_rules/_base.py +2 -2
  157. scipy/integrate/_tanhsinh.py +57 -54
  158. scipy/integrate/_test_multivariate.cp311-win_amd64.dll.a +0 -0
  159. scipy/integrate/_test_multivariate.cp311-win_amd64.pyd +0 -0
  160. scipy/integrate/_test_odeint_banded.cp311-win_amd64.dll.a +0 -0
  161. scipy/integrate/_test_odeint_banded.cp311-win_amd64.pyd +0 -0
  162. scipy/integrate/_vode.cp311-win_amd64.dll.a +0 -0
  163. scipy/integrate/_vode.cp311-win_amd64.pyd +0 -0
  164. scipy/integrate/tests/test__quad_vec.py +0 -6
  165. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  166. scipy/integrate/tests/test_cubature.py +21 -35
  167. scipy/integrate/tests/test_quadrature.py +6 -8
  168. scipy/integrate/tests/test_tanhsinh.py +61 -43
  169. scipy/interpolate/__init__.py +70 -58
  170. scipy/interpolate/_bary_rational.py +22 -22
  171. scipy/interpolate/_bsplines.py +119 -66
  172. scipy/interpolate/_cubic.py +65 -50
  173. scipy/interpolate/_dfitpack.cp311-win_amd64.dll.a +0 -0
  174. scipy/interpolate/_dfitpack.cp311-win_amd64.pyd +0 -0
  175. scipy/interpolate/_dierckx.cp311-win_amd64.dll.a +0 -0
  176. scipy/interpolate/_dierckx.cp311-win_amd64.pyd +0 -0
  177. scipy/interpolate/_fitpack.cp311-win_amd64.dll.a +0 -0
  178. scipy/interpolate/_fitpack.cp311-win_amd64.pyd +0 -0
  179. scipy/interpolate/_fitpack2.py +9 -6
  180. scipy/interpolate/_fitpack_impl.py +32 -26
  181. scipy/interpolate/_fitpack_repro.py +23 -19
  182. scipy/interpolate/_interpnd.cp311-win_amd64.dll.a +0 -0
  183. scipy/interpolate/_interpnd.cp311-win_amd64.pyd +0 -0
  184. scipy/interpolate/_interpolate.py +30 -12
  185. scipy/interpolate/_ndbspline.py +13 -18
  186. scipy/interpolate/_ndgriddata.py +5 -8
  187. scipy/interpolate/_polyint.py +95 -31
  188. scipy/interpolate/_ppoly.cp311-win_amd64.dll.a +0 -0
  189. scipy/interpolate/_ppoly.cp311-win_amd64.pyd +0 -0
  190. scipy/interpolate/_rbf.py +2 -2
  191. scipy/interpolate/_rbfinterp.py +1 -1
  192. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.dll.a +0 -0
  193. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.pyd +0 -0
  194. scipy/interpolate/_rgi.py +31 -26
  195. scipy/interpolate/_rgi_cython.cp311-win_amd64.dll.a +0 -0
  196. scipy/interpolate/_rgi_cython.cp311-win_amd64.pyd +0 -0
  197. scipy/interpolate/dfitpack.py +0 -20
  198. scipy/interpolate/interpnd.py +1 -2
  199. scipy/interpolate/tests/test_bary_rational.py +2 -2
  200. scipy/interpolate/tests/test_bsplines.py +97 -1
  201. scipy/interpolate/tests/test_fitpack2.py +39 -1
  202. scipy/interpolate/tests/test_interpnd.py +32 -20
  203. scipy/interpolate/tests/test_interpolate.py +48 -4
  204. scipy/interpolate/tests/test_rgi.py +2 -1
  205. scipy/io/_fast_matrix_market/__init__.py +2 -0
  206. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.dll.a +0 -0
  207. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.pyd +0 -0
  208. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  209. scipy/io/_harwell_boeing/hb.py +7 -11
  210. scipy/io/_idl.py +5 -7
  211. scipy/io/_netcdf.py +15 -5
  212. scipy/io/_test_fortran.cp311-win_amd64.dll.a +0 -0
  213. scipy/io/_test_fortran.cp311-win_amd64.pyd +0 -0
  214. scipy/io/arff/tests/test_arffread.py +3 -3
  215. scipy/io/matlab/__init__.py +5 -3
  216. scipy/io/matlab/_mio.py +4 -1
  217. scipy/io/matlab/_mio5.py +19 -13
  218. scipy/io/matlab/_mio5_utils.cp311-win_amd64.dll.a +0 -0
  219. scipy/io/matlab/_mio5_utils.cp311-win_amd64.pyd +0 -0
  220. scipy/io/matlab/_mio_utils.cp311-win_amd64.dll.a +0 -0
  221. scipy/io/matlab/_mio_utils.cp311-win_amd64.pyd +0 -0
  222. scipy/io/matlab/_miobase.py +4 -1
  223. scipy/io/matlab/_streams.cp311-win_amd64.dll.a +0 -0
  224. scipy/io/matlab/_streams.cp311-win_amd64.pyd +0 -0
  225. scipy/io/matlab/tests/test_mio.py +46 -18
  226. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  227. scipy/io/tests/test_mmio.py +7 -1
  228. scipy/io/tests/test_wavfile.py +41 -0
  229. scipy/io/wavfile.py +57 -10
  230. scipy/linalg/_basic.py +113 -86
  231. scipy/linalg/_cythonized_array_utils.cp311-win_amd64.dll.a +0 -0
  232. scipy/linalg/_cythonized_array_utils.cp311-win_amd64.pyd +0 -0
  233. scipy/linalg/_decomp.py +22 -9
  234. scipy/linalg/_decomp_cholesky.py +28 -13
  235. scipy/linalg/_decomp_cossin.py +45 -30
  236. scipy/linalg/_decomp_interpolative.cp311-win_amd64.dll.a +0 -0
  237. scipy/linalg/_decomp_interpolative.cp311-win_amd64.pyd +0 -0
  238. scipy/linalg/_decomp_ldl.py +4 -1
  239. scipy/linalg/_decomp_lu.py +18 -6
  240. scipy/linalg/_decomp_lu_cython.cp311-win_amd64.dll.a +0 -0
  241. scipy/linalg/_decomp_lu_cython.cp311-win_amd64.pyd +0 -0
  242. scipy/linalg/_decomp_polar.py +2 -0
  243. scipy/linalg/_decomp_qr.py +6 -2
  244. scipy/linalg/_decomp_qz.py +3 -0
  245. scipy/linalg/_decomp_schur.py +3 -1
  246. scipy/linalg/_decomp_svd.py +13 -2
  247. scipy/linalg/_decomp_update.cp311-win_amd64.dll.a +0 -0
  248. scipy/linalg/_decomp_update.cp311-win_amd64.pyd +0 -0
  249. scipy/linalg/_expm_frechet.py +4 -0
  250. scipy/linalg/_fblas.cp311-win_amd64.dll.a +0 -0
  251. scipy/linalg/_fblas.cp311-win_amd64.pyd +0 -0
  252. scipy/linalg/_flapack.cp311-win_amd64.dll.a +0 -0
  253. scipy/linalg/_flapack.cp311-win_amd64.pyd +0 -0
  254. scipy/linalg/_linalg_pythran.cp311-win_amd64.dll.a +0 -0
  255. scipy/linalg/_linalg_pythran.cp311-win_amd64.pyd +0 -0
  256. scipy/linalg/_matfuncs.py +187 -4
  257. scipy/linalg/_matfuncs_expm.cp311-win_amd64.dll.a +0 -0
  258. scipy/linalg/_matfuncs_expm.cp311-win_amd64.pyd +0 -0
  259. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.dll.a +0 -0
  260. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.pyd +0 -0
  261. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  262. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.dll.a +0 -0
  263. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.pyd +0 -0
  264. scipy/linalg/_procrustes.py +2 -0
  265. scipy/linalg/_sketches.py +17 -6
  266. scipy/linalg/_solve_toeplitz.cp311-win_amd64.dll.a +0 -0
  267. scipy/linalg/_solve_toeplitz.cp311-win_amd64.pyd +0 -0
  268. scipy/linalg/_solvers.py +7 -2
  269. scipy/linalg/_special_matrices.py +26 -36
  270. scipy/linalg/blas.py +35 -24
  271. scipy/linalg/cython_blas.cp311-win_amd64.dll.a +0 -0
  272. scipy/linalg/cython_blas.cp311-win_amd64.pyd +0 -0
  273. scipy/linalg/cython_lapack.cp311-win_amd64.dll.a +0 -0
  274. scipy/linalg/cython_lapack.cp311-win_amd64.pyd +0 -0
  275. scipy/linalg/lapack.py +22 -2
  276. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  277. scipy/linalg/tests/test_basic.py +31 -16
  278. scipy/linalg/tests/test_batch.py +588 -0
  279. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  280. scipy/linalg/tests/test_decomp.py +40 -3
  281. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  282. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  283. scipy/linalg/tests/test_interpolative.py +17 -0
  284. scipy/linalg/tests/test_lapack.py +115 -7
  285. scipy/linalg/tests/test_matfuncs.py +157 -102
  286. scipy/linalg/tests/test_procrustes.py +0 -7
  287. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  288. scipy/linalg/tests/test_special_matrices.py +1 -5
  289. scipy/ndimage/__init__.py +1 -0
  290. scipy/ndimage/_ctest.cp311-win_amd64.dll.a +0 -0
  291. scipy/ndimage/_ctest.cp311-win_amd64.pyd +0 -0
  292. scipy/ndimage/_cytest.cp311-win_amd64.dll.a +0 -0
  293. scipy/ndimage/_cytest.cp311-win_amd64.pyd +0 -0
  294. scipy/ndimage/_delegators.py +8 -2
  295. scipy/ndimage/_filters.py +453 -5
  296. scipy/ndimage/_interpolation.py +36 -6
  297. scipy/ndimage/_measurements.py +4 -2
  298. scipy/ndimage/_morphology.py +5 -0
  299. scipy/ndimage/_nd_image.cp311-win_amd64.dll.a +0 -0
  300. scipy/ndimage/_nd_image.cp311-win_amd64.pyd +0 -0
  301. scipy/ndimage/_ndimage_api.py +2 -1
  302. scipy/ndimage/_ni_docstrings.py +5 -1
  303. scipy/ndimage/_ni_label.cp311-win_amd64.dll.a +0 -0
  304. scipy/ndimage/_ni_label.cp311-win_amd64.pyd +0 -0
  305. scipy/ndimage/_ni_support.py +1 -5
  306. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.dll.a +0 -0
  307. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.pyd +0 -0
  308. scipy/ndimage/_support_alternative_backends.py +18 -6
  309. scipy/ndimage/tests/test_filters.py +384 -259
  310. scipy/ndimage/tests/test_fourier.py +7 -9
  311. scipy/ndimage/tests/test_interpolation.py +68 -61
  312. scipy/ndimage/tests/test_measurements.py +18 -35
  313. scipy/ndimage/tests/test_morphology.py +143 -131
  314. scipy/ndimage/tests/test_splines.py +1 -3
  315. scipy/odr/__odrpack.cp311-win_amd64.dll.a +0 -0
  316. scipy/odr/__odrpack.cp311-win_amd64.pyd +0 -0
  317. scipy/optimize/_basinhopping.py +13 -7
  318. scipy/optimize/_bglu_dense.cp311-win_amd64.dll.a +0 -0
  319. scipy/optimize/_bglu_dense.cp311-win_amd64.pyd +0 -0
  320. scipy/optimize/_bracket.py +46 -26
  321. scipy/optimize/_chandrupatla.py +9 -10
  322. scipy/optimize/_cobyla_py.py +104 -123
  323. scipy/optimize/_constraints.py +14 -10
  324. scipy/optimize/_differentiable_functions.py +371 -230
  325. scipy/optimize/_differentialevolution.py +4 -3
  326. scipy/optimize/_direct.cp311-win_amd64.dll.a +0 -0
  327. scipy/optimize/_direct.cp311-win_amd64.pyd +0 -0
  328. scipy/optimize/_dual_annealing.py +1 -1
  329. scipy/optimize/_elementwise.py +1 -4
  330. scipy/optimize/_group_columns.cp311-win_amd64.dll.a +0 -0
  331. scipy/optimize/_group_columns.cp311-win_amd64.pyd +0 -0
  332. scipy/optimize/_highspy/_core.cp311-win_amd64.dll.a +0 -0
  333. scipy/optimize/_highspy/_core.cp311-win_amd64.pyd +0 -0
  334. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.dll.a +0 -0
  335. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.pyd +0 -0
  336. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  337. scipy/optimize/_lbfgsb.cp311-win_amd64.dll.a +0 -0
  338. scipy/optimize/_lbfgsb.cp311-win_amd64.pyd +0 -0
  339. scipy/optimize/_lbfgsb_py.py +80 -24
  340. scipy/optimize/_linprog_doc.py +2 -2
  341. scipy/optimize/_linprog_highs.py +11 -11
  342. scipy/optimize/_linprog_ip.py +25 -10
  343. scipy/optimize/_linprog_util.py +18 -19
  344. scipy/optimize/_lsap.cp311-win_amd64.dll.a +0 -0
  345. scipy/optimize/_lsap.cp311-win_amd64.pyd +0 -0
  346. scipy/optimize/_lsq/common.py +3 -3
  347. scipy/optimize/_lsq/dogbox.py +16 -2
  348. scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.dll.a +0 -0
  349. scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.pyd +0 -0
  350. scipy/optimize/_lsq/least_squares.py +198 -126
  351. scipy/optimize/_lsq/lsq_linear.py +6 -6
  352. scipy/optimize/_lsq/trf.py +35 -8
  353. scipy/optimize/_milp.py +3 -1
  354. scipy/optimize/_minimize.py +105 -36
  355. scipy/optimize/_minpack.cp311-win_amd64.dll.a +0 -0
  356. scipy/optimize/_minpack.cp311-win_amd64.pyd +0 -0
  357. scipy/optimize/_minpack_py.py +21 -14
  358. scipy/optimize/_moduleTNC.cp311-win_amd64.dll.a +0 -0
  359. scipy/optimize/_moduleTNC.cp311-win_amd64.pyd +0 -0
  360. scipy/optimize/_nnls.py +20 -21
  361. scipy/optimize/_nonlin.py +34 -3
  362. scipy/optimize/_numdiff.py +288 -110
  363. scipy/optimize/_optimize.py +86 -48
  364. scipy/optimize/_pava_pybind.cp311-win_amd64.dll.a +0 -0
  365. scipy/optimize/_pava_pybind.cp311-win_amd64.pyd +0 -0
  366. scipy/optimize/_remove_redundancy.py +5 -5
  367. scipy/optimize/_root_scalar.py +1 -1
  368. scipy/optimize/_shgo.py +6 -0
  369. scipy/optimize/_shgo_lib/_complex.py +1 -1
  370. scipy/optimize/_slsqp_py.py +216 -124
  371. scipy/optimize/_slsqplib.cp311-win_amd64.dll.a +0 -0
  372. scipy/optimize/_slsqplib.cp311-win_amd64.pyd +0 -0
  373. scipy/optimize/_spectral.py +1 -1
  374. scipy/optimize/_tnc.py +8 -1
  375. scipy/optimize/_trlib/_trlib.cp311-win_amd64.dll.a +0 -0
  376. scipy/optimize/_trlib/_trlib.cp311-win_amd64.pyd +0 -0
  377. scipy/optimize/_trustregion.py +20 -6
  378. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  379. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  380. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  381. scipy/optimize/_trustregion_constr/projections.py +12 -8
  382. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  383. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  384. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  385. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  386. scipy/optimize/_trustregion_exact.py +0 -1
  387. scipy/optimize/_zeros.cp311-win_amd64.dll.a +0 -0
  388. scipy/optimize/_zeros.cp311-win_amd64.pyd +0 -0
  389. scipy/optimize/_zeros_py.py +97 -17
  390. scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.dll.a +0 -0
  391. scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.pyd +0 -0
  392. scipy/optimize/slsqp.py +0 -1
  393. scipy/optimize/tests/test__basinhopping.py +1 -1
  394. scipy/optimize/tests/test__differential_evolution.py +4 -4
  395. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  396. scipy/optimize/tests/test__numdiff.py +66 -22
  397. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  398. scipy/optimize/tests/test__shgo.py +9 -1
  399. scipy/optimize/tests/test_bracket.py +71 -46
  400. scipy/optimize/tests/test_chandrupatla.py +133 -135
  401. scipy/optimize/tests/test_cobyla.py +74 -45
  402. scipy/optimize/tests/test_constraints.py +1 -1
  403. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  404. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  405. scipy/optimize/tests/test_least_squares.py +125 -13
  406. scipy/optimize/tests/test_linear_assignment.py +3 -3
  407. scipy/optimize/tests/test_linprog.py +3 -3
  408. scipy/optimize/tests/test_lsq_linear.py +6 -6
  409. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  410. scipy/optimize/tests/test_minpack.py +4 -4
  411. scipy/optimize/tests/test_nnls.py +43 -3
  412. scipy/optimize/tests/test_nonlin.py +36 -0
  413. scipy/optimize/tests/test_optimize.py +98 -20
  414. scipy/optimize/tests/test_slsqp.py +36 -4
  415. scipy/optimize/tests/test_zeros.py +34 -1
  416. scipy/signal/__init__.py +12 -23
  417. scipy/signal/_delegators.py +568 -0
  418. scipy/signal/_filter_design.py +459 -241
  419. scipy/signal/_fir_filter_design.py +262 -90
  420. scipy/signal/_lti_conversion.py +3 -2
  421. scipy/signal/_ltisys.py +118 -91
  422. scipy/signal/_max_len_seq_inner.cp311-win_amd64.dll.a +0 -0
  423. scipy/signal/_max_len_seq_inner.cp311-win_amd64.pyd +0 -0
  424. scipy/signal/_peak_finding_utils.cp311-win_amd64.dll.a +0 -0
  425. scipy/signal/_peak_finding_utils.cp311-win_amd64.pyd +0 -0
  426. scipy/signal/_polyutils.py +172 -0
  427. scipy/signal/_short_time_fft.py +553 -76
  428. scipy/signal/_signal_api.py +30 -0
  429. scipy/signal/_signaltools.py +719 -396
  430. scipy/signal/_sigtools.cp311-win_amd64.dll.a +0 -0
  431. scipy/signal/_sigtools.cp311-win_amd64.pyd +0 -0
  432. scipy/signal/_sosfilt.cp311-win_amd64.dll.a +0 -0
  433. scipy/signal/_sosfilt.cp311-win_amd64.pyd +0 -0
  434. scipy/signal/_spectral_py.py +230 -50
  435. scipy/signal/_spline.cp311-win_amd64.dll.a +0 -0
  436. scipy/signal/_spline.cp311-win_amd64.pyd +0 -0
  437. scipy/signal/_spline_filters.py +108 -68
  438. scipy/signal/_support_alternative_backends.py +73 -0
  439. scipy/signal/_upfirdn.py +4 -1
  440. scipy/signal/_upfirdn_apply.cp311-win_amd64.dll.a +0 -0
  441. scipy/signal/_upfirdn_apply.cp311-win_amd64.pyd +0 -0
  442. scipy/signal/_waveforms.py +2 -11
  443. scipy/signal/_wavelets.py +1 -1
  444. scipy/signal/fir_filter_design.py +1 -0
  445. scipy/signal/spline.py +4 -11
  446. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  447. scipy/signal/tests/test_bsplines.py +114 -79
  448. scipy/signal/tests/test_cont2discrete.py +9 -2
  449. scipy/signal/tests/test_filter_design.py +721 -481
  450. scipy/signal/tests/test_fir_filter_design.py +332 -140
  451. scipy/signal/tests/test_savitzky_golay.py +4 -3
  452. scipy/signal/tests/test_short_time_fft.py +231 -5
  453. scipy/signal/tests/test_signaltools.py +2150 -1349
  454. scipy/signal/tests/test_spectral.py +50 -6
  455. scipy/signal/tests/test_splines.py +161 -96
  456. scipy/signal/tests/test_upfirdn.py +84 -50
  457. scipy/signal/tests/test_waveforms.py +20 -0
  458. scipy/signal/tests/test_windows.py +607 -466
  459. scipy/signal/windows/_windows.py +287 -148
  460. scipy/sparse/__init__.py +23 -4
  461. scipy/sparse/_base.py +269 -120
  462. scipy/sparse/_bsr.py +7 -4
  463. scipy/sparse/_compressed.py +59 -234
  464. scipy/sparse/_construct.py +90 -38
  465. scipy/sparse/_coo.py +115 -181
  466. scipy/sparse/_csc.py +4 -4
  467. scipy/sparse/_csparsetools.cp311-win_amd64.dll.a +0 -0
  468. scipy/sparse/_csparsetools.cp311-win_amd64.pyd +0 -0
  469. scipy/sparse/_csr.py +2 -2
  470. scipy/sparse/_data.py +48 -48
  471. scipy/sparse/_dia.py +105 -21
  472. scipy/sparse/_dok.py +0 -23
  473. scipy/sparse/_index.py +4 -4
  474. scipy/sparse/_matrix.py +23 -0
  475. scipy/sparse/_sparsetools.cp311-win_amd64.dll.a +0 -0
  476. scipy/sparse/_sparsetools.cp311-win_amd64.pyd +0 -0
  477. scipy/sparse/_sputils.py +37 -22
  478. scipy/sparse/base.py +0 -9
  479. scipy/sparse/bsr.py +0 -14
  480. scipy/sparse/compressed.py +0 -23
  481. scipy/sparse/construct.py +0 -6
  482. scipy/sparse/coo.py +0 -14
  483. scipy/sparse/csc.py +0 -3
  484. scipy/sparse/csgraph/_flow.cp311-win_amd64.dll.a +0 -0
  485. scipy/sparse/csgraph/_flow.cp311-win_amd64.pyd +0 -0
  486. scipy/sparse/csgraph/_matching.cp311-win_amd64.dll.a +0 -0
  487. scipy/sparse/csgraph/_matching.cp311-win_amd64.pyd +0 -0
  488. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.dll.a +0 -0
  489. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.pyd +0 -0
  490. scipy/sparse/csgraph/_reordering.cp311-win_amd64.dll.a +0 -0
  491. scipy/sparse/csgraph/_reordering.cp311-win_amd64.pyd +0 -0
  492. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.dll.a +0 -0
  493. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.pyd +0 -0
  494. scipy/sparse/csgraph/_tools.cp311-win_amd64.dll.a +0 -0
  495. scipy/sparse/csgraph/_tools.cp311-win_amd64.pyd +0 -0
  496. scipy/sparse/csgraph/_traversal.cp311-win_amd64.dll.a +0 -0
  497. scipy/sparse/csgraph/_traversal.cp311-win_amd64.pyd +0 -0
  498. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  499. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  500. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  501. scipy/sparse/csr.py +0 -5
  502. scipy/sparse/data.py +1 -6
  503. scipy/sparse/dia.py +0 -7
  504. scipy/sparse/dok.py +0 -10
  505. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.dll.a +0 -0
  506. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.pyd +0 -0
  507. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  508. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  509. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.dll.a +0 -0
  510. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.pyd +0 -0
  511. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  512. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  513. scipy/sparse/linalg/_expm_multiply.py +8 -3
  514. scipy/sparse/linalg/_interface.py +29 -26
  515. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  516. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  517. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  518. scipy/sparse/linalg/_isolve/minres.py +5 -5
  519. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  520. scipy/sparse/linalg/_isolve/utils.py +2 -8
  521. scipy/sparse/linalg/_matfuncs.py +1 -1
  522. scipy/sparse/linalg/_norm.py +1 -1
  523. scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.dll.a +0 -0
  524. scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.pyd +0 -0
  525. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.dll.a +0 -0
  526. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.pyd +0 -0
  527. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.dll.a +0 -0
  528. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.pyd +0 -0
  529. scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.dll.a +0 -0
  530. scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.pyd +0 -0
  531. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  532. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  533. scipy/sparse/linalg/tests/test_interface.py +35 -0
  534. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  535. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  536. scipy/sparse/tests/test_base.py +224 -40
  537. scipy/sparse/tests/test_common1d.py +17 -12
  538. scipy/sparse/tests/test_construct.py +1 -1
  539. scipy/sparse/tests/test_coo.py +272 -4
  540. scipy/sparse/tests/test_sparsetools.py +5 -0
  541. scipy/sparse/tests/test_sputils.py +36 -7
  542. scipy/spatial/_ckdtree.cp311-win_amd64.dll.a +0 -0
  543. scipy/spatial/_ckdtree.cp311-win_amd64.pyd +0 -0
  544. scipy/spatial/_distance_pybind.cp311-win_amd64.dll.a +0 -0
  545. scipy/spatial/_distance_pybind.cp311-win_amd64.pyd +0 -0
  546. scipy/spatial/_distance_wrap.cp311-win_amd64.dll.a +0 -0
  547. scipy/spatial/_distance_wrap.cp311-win_amd64.pyd +0 -0
  548. scipy/spatial/_hausdorff.cp311-win_amd64.dll.a +0 -0
  549. scipy/spatial/_hausdorff.cp311-win_amd64.pyd +0 -0
  550. scipy/spatial/_qhull.cp311-win_amd64.dll.a +0 -0
  551. scipy/spatial/_qhull.cp311-win_amd64.pyd +0 -0
  552. scipy/spatial/_voronoi.cp311-win_amd64.dll.a +0 -0
  553. scipy/spatial/_voronoi.cp311-win_amd64.pyd +0 -0
  554. scipy/spatial/distance.py +49 -42
  555. scipy/spatial/tests/test_distance.py +15 -1
  556. scipy/spatial/tests/test_kdtree.py +1 -0
  557. scipy/spatial/tests/test_qhull.py +106 -2
  558. scipy/spatial/transform/__init__.py +5 -3
  559. scipy/spatial/transform/_rigid_transform.cp311-win_amd64.dll.a +0 -0
  560. scipy/spatial/transform/_rigid_transform.cp311-win_amd64.pyd +0 -0
  561. scipy/spatial/transform/_rotation.cp311-win_amd64.dll.a +0 -0
  562. scipy/spatial/transform/_rotation.cp311-win_amd64.pyd +0 -0
  563. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  564. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  565. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  566. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  567. scipy/special/__init__.py +1 -47
  568. scipy/special/_add_newdocs.py +34 -772
  569. scipy/special/_basic.py +22 -25
  570. scipy/special/_comb.cp311-win_amd64.dll.a +0 -0
  571. scipy/special/_comb.cp311-win_amd64.pyd +0 -0
  572. scipy/special/_ellip_harm_2.cp311-win_amd64.dll.a +0 -0
  573. scipy/special/_ellip_harm_2.cp311-win_amd64.pyd +0 -0
  574. scipy/special/_gufuncs.cp311-win_amd64.dll.a +0 -0
  575. scipy/special/_gufuncs.cp311-win_amd64.pyd +0 -0
  576. scipy/special/_logsumexp.py +83 -69
  577. scipy/special/_orthogonal.pyi +1 -1
  578. scipy/special/_specfun.cp311-win_amd64.dll.a +0 -0
  579. scipy/special/_specfun.cp311-win_amd64.pyd +0 -0
  580. scipy/special/_special_ufuncs.cp311-win_amd64.dll.a +0 -0
  581. scipy/special/_special_ufuncs.cp311-win_amd64.pyd +0 -0
  582. scipy/special/_spherical_bessel.py +4 -4
  583. scipy/special/_support_alternative_backends.py +212 -119
  584. scipy/special/_test_internal.cp311-win_amd64.dll.a +0 -0
  585. scipy/special/_test_internal.cp311-win_amd64.pyd +0 -0
  586. scipy/special/_testutils.py +4 -4
  587. scipy/special/_ufuncs.cp311-win_amd64.dll.a +0 -0
  588. scipy/special/_ufuncs.cp311-win_amd64.pyd +0 -0
  589. scipy/special/_ufuncs.pyi +1 -0
  590. scipy/special/_ufuncs.pyx +215 -1400
  591. scipy/special/_ufuncs_cxx.cp311-win_amd64.dll.a +0 -0
  592. scipy/special/_ufuncs_cxx.cp311-win_amd64.pyd +0 -0
  593. scipy/special/_ufuncs_cxx.pxd +2 -15
  594. scipy/special/_ufuncs_cxx.pyx +5 -44
  595. scipy/special/_ufuncs_cxx_defs.h +2 -16
  596. scipy/special/_ufuncs_defs.h +0 -8
  597. scipy/special/cython_special.cp311-win_amd64.dll.a +0 -0
  598. scipy/special/cython_special.cp311-win_amd64.pyd +0 -0
  599. scipy/special/cython_special.pxd +1 -1
  600. scipy/special/tests/_cython_examples/meson.build +10 -1
  601. scipy/special/tests/test_basic.py +153 -20
  602. scipy/special/tests/test_boost_ufuncs.py +3 -0
  603. scipy/special/tests/test_cdflib.py +35 -11
  604. scipy/special/tests/test_gammainc.py +16 -0
  605. scipy/special/tests/test_hyp2f1.py +23 -2
  606. scipy/special/tests/test_log1mexp.py +85 -0
  607. scipy/special/tests/test_logsumexp.py +220 -64
  608. scipy/special/tests/test_mpmath.py +1 -0
  609. scipy/special/tests/test_nan_inputs.py +1 -1
  610. scipy/special/tests/test_orthogonal.py +17 -18
  611. scipy/special/tests/test_sf_error.py +3 -2
  612. scipy/special/tests/test_sph_harm.py +6 -7
  613. scipy/special/tests/test_support_alternative_backends.py +211 -76
  614. scipy/stats/__init__.py +4 -1
  615. scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.dll.a +0 -0
  616. scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.pyd +0 -0
  617. scipy/stats/_axis_nan_policy.py +5 -12
  618. scipy/stats/_biasedurn.cp311-win_amd64.dll.a +0 -0
  619. scipy/stats/_biasedurn.cp311-win_amd64.pyd +0 -0
  620. scipy/stats/_continued_fraction.py +387 -0
  621. scipy/stats/_continuous_distns.py +296 -319
  622. scipy/stats/_correlation.py +1 -1
  623. scipy/stats/_covariance.py +6 -3
  624. scipy/stats/_discrete_distns.py +39 -32
  625. scipy/stats/_distn_infrastructure.py +39 -12
  626. scipy/stats/_distribution_infrastructure.py +920 -238
  627. scipy/stats/_entropy.py +9 -10
  628. scipy/{_lib → stats}/_finite_differences.py +1 -1
  629. scipy/stats/_hypotests.py +83 -50
  630. scipy/stats/_kde.py +53 -49
  631. scipy/stats/_ksstats.py +1 -1
  632. scipy/stats/_levy_stable/__init__.py +7 -15
  633. scipy/stats/_levy_stable/levyst.cp311-win_amd64.dll.a +0 -0
  634. scipy/stats/_levy_stable/levyst.cp311-win_amd64.pyd +0 -0
  635. scipy/stats/_morestats.py +118 -73
  636. scipy/stats/_mstats_basic.py +13 -17
  637. scipy/stats/_mstats_extras.py +8 -8
  638. scipy/stats/_multivariate.py +89 -113
  639. scipy/stats/_new_distributions.py +97 -20
  640. scipy/stats/_page_trend_test.py +12 -5
  641. scipy/stats/_probability_distribution.py +265 -43
  642. scipy/stats/_qmc.py +14 -9
  643. scipy/stats/_qmc_cy.cp311-win_amd64.dll.a +0 -0
  644. scipy/stats/_qmc_cy.cp311-win_amd64.pyd +0 -0
  645. scipy/stats/_qmvnt.py +16 -95
  646. scipy/stats/_qmvnt_cy.cp311-win_amd64.dll.a +0 -0
  647. scipy/stats/_qmvnt_cy.cp311-win_amd64.pyd +0 -0
  648. scipy/stats/_quantile.py +335 -0
  649. scipy/stats/_rcont/rcont.cp311-win_amd64.dll.a +0 -0
  650. scipy/stats/_rcont/rcont.cp311-win_amd64.pyd +0 -0
  651. scipy/stats/_resampling.py +5 -30
  652. scipy/stats/_sampling.py +1 -1
  653. scipy/stats/_sobol.cp311-win_amd64.dll.a +0 -0
  654. scipy/stats/_sobol.cp311-win_amd64.pyd +0 -0
  655. scipy/stats/_stats.cp311-win_amd64.dll.a +0 -0
  656. scipy/stats/_stats.cp311-win_amd64.pyd +0 -0
  657. scipy/stats/_stats_mstats_common.py +21 -2
  658. scipy/stats/_stats_py.py +551 -477
  659. scipy/stats/_stats_pythran.cp311-win_amd64.dll.a +0 -0
  660. scipy/stats/_stats_pythran.cp311-win_amd64.pyd +0 -0
  661. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.dll.a +0 -0
  662. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.pyd +0 -0
  663. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  664. scipy/stats/_variation.py +6 -8
  665. scipy/stats/_wilcoxon.py +13 -7
  666. scipy/stats/tests/common_tests.py +6 -4
  667. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  668. scipy/stats/tests/test_continued_fraction.py +173 -0
  669. scipy/stats/tests/test_continuous.py +379 -60
  670. scipy/stats/tests/test_continuous_basic.py +18 -12
  671. scipy/stats/tests/test_discrete_basic.py +14 -8
  672. scipy/stats/tests/test_discrete_distns.py +16 -16
  673. scipy/stats/tests/test_distributions.py +117 -75
  674. scipy/stats/tests/test_entropy.py +40 -48
  675. scipy/stats/tests/test_fit.py +4 -3
  676. scipy/stats/tests/test_hypotests.py +153 -24
  677. scipy/stats/tests/test_kdeoth.py +109 -41
  678. scipy/stats/tests/test_marray.py +289 -0
  679. scipy/stats/tests/test_morestats.py +81 -49
  680. scipy/stats/tests/test_mstats_basic.py +3 -3
  681. scipy/stats/tests/test_multivariate.py +434 -83
  682. scipy/stats/tests/test_qmc.py +13 -10
  683. scipy/stats/tests/test_quantile.py +199 -0
  684. scipy/stats/tests/test_rank.py +119 -112
  685. scipy/stats/tests/test_resampling.py +47 -56
  686. scipy/stats/tests/test_sampling.py +9 -4
  687. scipy/stats/tests/test_stats.py +799 -939
  688. scipy/stats/tests/test_variation.py +8 -6
  689. scipy/version.py +2 -2
  690. scipy-1.16.0.dist-info/DELVEWHEEL +2 -0
  691. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
  692. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
  693. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +695 -703
  694. scipy/_lib/array_api_extra/_funcs.py +0 -484
  695. scipy/_lib/array_api_extra/_typing.py +0 -8
  696. scipy/interpolate/_bspl.cp311-win_amd64.dll.a +0 -0
  697. scipy/interpolate/_bspl.cp311-win_amd64.pyd +0 -0
  698. scipy/optimize/_cobyla.cp311-win_amd64.dll.a +0 -0
  699. scipy/optimize/_cobyla.cp311-win_amd64.pyd +0 -0
  700. scipy/optimize/_cython_nnls.cp311-win_amd64.dll.a +0 -0
  701. scipy/optimize/_cython_nnls.cp311-win_amd64.pyd +0 -0
  702. scipy/optimize/_slsqp.cp311-win_amd64.dll.a +0 -0
  703. scipy/optimize/_slsqp.cp311-win_amd64.pyd +0 -0
  704. scipy/spatial/qhull_src/COPYING.txt +0 -38
  705. scipy/special/libsf_error_state.dll +0 -0
  706. scipy/special/libsf_error_state.dll.a +0 -0
  707. scipy/special/tests/test_log_softmax.py +0 -109
  708. scipy/special/tests/test_xsf_cuda.py +0 -114
  709. scipy/special/xsf/binom.h +0 -89
  710. scipy/special/xsf/cdflib.h +0 -100
  711. scipy/special/xsf/cephes/airy.h +0 -307
  712. scipy/special/xsf/cephes/besselpoly.h +0 -51
  713. scipy/special/xsf/cephes/beta.h +0 -257
  714. scipy/special/xsf/cephes/cbrt.h +0 -131
  715. scipy/special/xsf/cephes/chbevl.h +0 -85
  716. scipy/special/xsf/cephes/chdtr.h +0 -193
  717. scipy/special/xsf/cephes/const.h +0 -87
  718. scipy/special/xsf/cephes/ellie.h +0 -293
  719. scipy/special/xsf/cephes/ellik.h +0 -251
  720. scipy/special/xsf/cephes/ellpe.h +0 -107
  721. scipy/special/xsf/cephes/ellpk.h +0 -117
  722. scipy/special/xsf/cephes/expn.h +0 -260
  723. scipy/special/xsf/cephes/gamma.h +0 -398
  724. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  725. scipy/special/xsf/cephes/hyperg.h +0 -361
  726. scipy/special/xsf/cephes/i0.h +0 -149
  727. scipy/special/xsf/cephes/i1.h +0 -158
  728. scipy/special/xsf/cephes/igam.h +0 -421
  729. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  730. scipy/special/xsf/cephes/igami.h +0 -313
  731. scipy/special/xsf/cephes/j0.h +0 -225
  732. scipy/special/xsf/cephes/j1.h +0 -198
  733. scipy/special/xsf/cephes/jv.h +0 -715
  734. scipy/special/xsf/cephes/k0.h +0 -164
  735. scipy/special/xsf/cephes/k1.h +0 -163
  736. scipy/special/xsf/cephes/kn.h +0 -243
  737. scipy/special/xsf/cephes/lanczos.h +0 -112
  738. scipy/special/xsf/cephes/ndtr.h +0 -275
  739. scipy/special/xsf/cephes/poch.h +0 -85
  740. scipy/special/xsf/cephes/polevl.h +0 -167
  741. scipy/special/xsf/cephes/psi.h +0 -194
  742. scipy/special/xsf/cephes/rgamma.h +0 -111
  743. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  744. scipy/special/xsf/cephes/shichi.h +0 -248
  745. scipy/special/xsf/cephes/sici.h +0 -224
  746. scipy/special/xsf/cephes/sindg.h +0 -221
  747. scipy/special/xsf/cephes/tandg.h +0 -139
  748. scipy/special/xsf/cephes/trig.h +0 -58
  749. scipy/special/xsf/cephes/unity.h +0 -186
  750. scipy/special/xsf/cephes/zeta.h +0 -172
  751. scipy/special/xsf/config.h +0 -304
  752. scipy/special/xsf/digamma.h +0 -205
  753. scipy/special/xsf/error.h +0 -57
  754. scipy/special/xsf/evalpoly.h +0 -47
  755. scipy/special/xsf/expint.h +0 -266
  756. scipy/special/xsf/hyp2f1.h +0 -694
  757. scipy/special/xsf/iv_ratio.h +0 -173
  758. scipy/special/xsf/lambertw.h +0 -150
  759. scipy/special/xsf/loggamma.h +0 -163
  760. scipy/special/xsf/sici.h +0 -200
  761. scipy/special/xsf/tools.h +0 -427
  762. scipy/special/xsf/trig.h +0 -164
  763. scipy/special/xsf/wright_bessel.h +0 -843
  764. scipy/special/xsf/zlog1.h +0 -35
  765. scipy/stats/_mvn.cp311-win_amd64.dll.a +0 -0
  766. scipy/stats/_mvn.cp311-win_amd64.pyd +0 -0
  767. scipy-1.15.2.dist-info/DELVEWHEEL +0 -2
  768. /scipy-1.15.2-cp311-cp311-win_amd64.whl → /scipy-1.16.0-cp311-cp311-win_amd64.whl +0 -0
  769. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/WHEEL +0 -0
@@ -1,173 +0,0 @@
1
- // Numerically stable computation of iv(v+1, x) / iv(v, x)
2
-
3
- #pragma once
4
-
5
- #include "config.h"
6
- #include "tools.h"
7
- #include "error.h"
8
- #include "cephes/dd_real.h"
9
-
10
- namespace xsf {
11
-
12
- /* Generates the "tail" of Perron's continued fraction for iv(v,x)/iv(v-1,x).
13
- *
14
- * The Perron continued fraction is studied in [1]. It is given by
15
- *
16
- * iv(v, x) x -(2v+1)x -(2v+3)x -(2v+5)x
17
- * R := --------- = ------ ---------- ---------- ---------- ...
18
- * iv(v-1,x) x+2v + 2(v+x)+1 + 2(v+x)+2 + 2(v+x)+3 +
19
- *
20
- * Given a suitable constant c, the continued fraction may be rearranged
21
- * into the following form to avoid premature floating point overflow:
22
- *
23
- * xc -(2vc+c)(xc) -(2vc+3c)(xc) -(2vc+5c)(xc)
24
- * R = -----, fc = 2vc + ------------ ------------- ------------- ...
25
- * xc+fc 2(vc+xc)+c + 2(vc+xc)+2c + 2(vc+xc)+3c +
26
- *
27
- * This class generates the fractions of fc after 2vc.
28
- *
29
- * [1] Gautschi, W. and Slavik, J. (1978). "On the computation of modified
30
- * Bessel function ratios." Mathematics of Computation, 32(143):865-875.
31
- */
32
- template <class T>
33
- struct IvRatioCFTailGenerator {
34
-
35
- XSF_HOST_DEVICE IvRatioCFTailGenerator(T vc, T xc, T c) noexcept {
36
- a0_ = -(2*vc-c)*xc;
37
- as_ = -2*c*xc;
38
- b0_ = 2*(vc+xc);
39
- bs_ = c;
40
- k_ = 0;
41
- }
42
-
43
- XSF_HOST_DEVICE std::pair<T, T> operator()() noexcept {
44
- using std::fma;
45
- ++k_;
46
- return {fma(static_cast<T>(k_), as_, a0_),
47
- fma(static_cast<T>(k_), bs_, b0_)};
48
- }
49
-
50
- private:
51
- T a0_, as_; // a[k] == a0 + as*k, k >= 1
52
- T b0_, bs_; // b[k] == b0 + bs*k, k >= 1
53
- std::uint64_t k_; // current index
54
- };
55
-
56
- // Computes f(v, x) using Perron's continued fraction.
57
- //
58
- // T specifies the working type. This allows the function to perform
59
- // calculations in a higher precision, such as double-double, even if
60
- // the return type is hardcoded to be double.
61
- template <class T>
62
- XSF_HOST_DEVICE inline std::pair<double, std::uint64_t>
63
- _iv_ratio_cf(double v, double x, bool complement) {
64
-
65
- int e;
66
- std::frexp(std::fmax(v, x), &e);
67
- T c = T(std::ldexp(1, 2-e)); // rescaling multiplier
68
- T vc = v * c;
69
- T xc = x * c;
70
-
71
- IvRatioCFTailGenerator<T> cf(vc, xc, c);
72
- auto [fc, terms] = detail::series_eval_kahan(
73
- detail::continued_fraction_series(cf),
74
- T(std::numeric_limits<double>::epsilon()),
75
- 1000,
76
- 2*vc);
77
-
78
- T ret = (complement ? fc : xc) / (xc + fc);
79
- return {static_cast<double>(ret), terms};
80
- }
81
-
82
- XSF_HOST_DEVICE inline double iv_ratio(double v, double x) {
83
-
84
- if (std::isnan(v) || std::isnan(x)) {
85
- return std::numeric_limits<double>::quiet_NaN();
86
- }
87
- if (v < 0.5 || x < 0) {
88
- set_error("iv_ratio", SF_ERROR_DOMAIN, NULL);
89
- return std::numeric_limits<double>::quiet_NaN();
90
- }
91
- if (std::isinf(v) && std::isinf(x)) {
92
- // There is not a unique limit as both v and x tends to infinity.
93
- set_error("iv_ratio", SF_ERROR_DOMAIN, NULL);
94
- return std::numeric_limits<double>::quiet_NaN();
95
- }
96
- if (x == 0.0) {
97
- return x; // keep sign of x because iv_ratio is an odd function
98
- }
99
- if (std::isinf(v)) {
100
- return 0.0;
101
- }
102
- if (std::isinf(x)) {
103
- return 1.0;
104
- }
105
-
106
- auto [ret, terms] = _iv_ratio_cf<double>(v, x, false);
107
- if (terms == 0) { // failed to converge; should not happen
108
- set_error("iv_ratio", SF_ERROR_NO_RESULT, NULL);
109
- return std::numeric_limits<double>::quiet_NaN();
110
- }
111
- return ret;
112
- }
113
-
114
- XSF_HOST_DEVICE inline float iv_ratio(float v, float x) {
115
- return iv_ratio(static_cast<double>(v), static_cast<double>(x));
116
- }
117
-
118
- XSF_HOST_DEVICE inline double iv_ratio_c(double v, double x) {
119
-
120
- if (std::isnan(v) || std::isnan(x)) {
121
- return std::numeric_limits<double>::quiet_NaN();
122
- }
123
- if (v < 0.5 || x < 0) {
124
- set_error("iv_ratio_c", SF_ERROR_DOMAIN, NULL);
125
- return std::numeric_limits<double>::quiet_NaN();
126
- }
127
- if (std::isinf(v) && std::isinf(x)) {
128
- // There is not a unique limit as both v and x tends to infinity.
129
- set_error("iv_ratio_c", SF_ERROR_DOMAIN, NULL);
130
- return std::numeric_limits<double>::quiet_NaN();
131
- }
132
- if (x == 0.0) {
133
- return 1.0;
134
- }
135
- if (std::isinf(v)) {
136
- return 1.0;
137
- }
138
- if (std::isinf(x)) {
139
- return 0.0;
140
- }
141
-
142
- if (v >= 1) {
143
- // Numerical experiments show that evaluating the Perron c.f.
144
- // in double precision is sufficiently accurate if v >= 1.
145
- auto [ret, terms] = _iv_ratio_cf<double>(v, x, true);
146
- if (terms == 0) { // failed to converge; should not happen
147
- set_error("iv_ratio_c", SF_ERROR_NO_RESULT, NULL);
148
- return std::numeric_limits<double>::quiet_NaN();
149
- }
150
- return ret;
151
- } else if (v > 0.5) {
152
- // double-double arithmetic is needed for 0.5 < v < 1 to
153
- // achieve relative error on the scale of machine precision.
154
- using cephes::detail::double_double;
155
- auto [ret, terms] = _iv_ratio_cf<double_double>(v, x, true);
156
- if (terms == 0) { // failed to converge; should not happen
157
- set_error("iv_ratio_c", SF_ERROR_NO_RESULT, NULL);
158
- return std::numeric_limits<double>::quiet_NaN();
159
- }
160
- return ret;
161
- } else {
162
- // The previous branch (v > 0.5) also works for v == 0.5, but
163
- // the closed-form formula "1 - tanh(x)" is more efficient.
164
- double t = std::exp(-2*x);
165
- return (2 * t) / (1 + t);
166
- }
167
- }
168
-
169
- XSF_HOST_DEVICE inline float iv_ratio_c(float v, float x) {
170
- return iv_ratio_c(static_cast<double>(v), static_cast<double>(x));
171
- }
172
-
173
- } // namespace xsf
@@ -1,150 +0,0 @@
1
- /* Translated from Cython into C++ by SciPy developers in 2023.
2
- * Original header with Copyright information appears below.
3
- */
4
-
5
- /* Implementation of the Lambert W function [1]. Based on MPMath
6
- * Implementation [2], and documentation [3].
7
- *
8
- * Copyright: Yosef Meller, 2009
9
- * Author email: mellerf@netvision.net.il
10
- *
11
- * Distributed under the same license as SciPy
12
- *
13
- *
14
- * References:
15
- * [1] On the Lambert W function, Adv. Comp. Math. 5 (1996) 329-359,
16
- * available online: https://web.archive.org/web/20230123211413/https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf
17
- * [2] mpmath source code,
18
- https://github.com/mpmath/mpmath/blob/c5939823669e1bcce151d89261b802fe0d8978b4/mpmath/functions/functions.py#L435-L461
19
- * [3]
20
- https://web.archive.org/web/20230504171447/https://mpmath.org/doc/current/functions/powers.html#lambert-w-function
21
- *
22
-
23
- * TODO: use a series expansion when extremely close to the branch point
24
- * at `-1/e` and make sure that the proper branch is chosen there.
25
- */
26
-
27
- #pragma once
28
-
29
- #include "config.h"
30
- #include "error.h"
31
- #include "evalpoly.h"
32
-
33
- namespace xsf {
34
- constexpr double EXPN1 = 0.36787944117144232159553; // exp(-1)
35
- constexpr double OMEGA = 0.56714329040978387299997; // W(1, 0)
36
-
37
- namespace detail {
38
- XSF_HOST_DEVICE inline std::complex<double> lambertw_branchpt(std::complex<double> z) {
39
- // Series for W(z, 0) around the branch point; see 4.22 in [1].
40
- double coeffs[] = {-1.0 / 3.0, 1.0, -1.0};
41
- std::complex<double> p = std::sqrt(2.0 * (M_E * z + 1.0));
42
-
43
- return cevalpoly(coeffs, 2, p);
44
- }
45
-
46
- XSF_HOST_DEVICE inline std::complex<double> lambertw_pade0(std::complex<double> z) {
47
- // (3, 2) Pade approximation for W(z, 0) around 0.
48
- double num[] = {12.85106382978723404255, 12.34042553191489361902, 1.0};
49
- double denom[] = {32.53191489361702127660, 14.34042553191489361702, 1.0};
50
-
51
- /* This only gets evaluated close to 0, so we don't need a more
52
- * careful algorithm that avoids overflow in the numerator for
53
- * large z. */
54
- return z * cevalpoly(num, 2, z) / cevalpoly(denom, 2, z);
55
- }
56
-
57
- XSF_HOST_DEVICE inline std::complex<double> lambertw_asy(std::complex<double> z, long k) {
58
- /* Compute the W function using the first two terms of the
59
- * asymptotic series. See 4.20 in [1].
60
- */
61
- std::complex<double> w = std::log(z) + 2.0 * M_PI * k * std::complex<double>(0, 1);
62
- return w - std::log(w);
63
- }
64
-
65
- } // namespace detail
66
-
67
- XSF_HOST_DEVICE inline std::complex<double> lambertw(std::complex<double> z, long k, double tol) {
68
- double absz;
69
- std::complex<double> w;
70
- std::complex<double> ew, wew, wewz, wn;
71
-
72
- if (std::isnan(z.real()) || std::isnan(z.imag())) {
73
- return z;
74
- }
75
- if (z.real() == std::numeric_limits<double>::infinity()) {
76
- return z + 2.0 * M_PI * k * std::complex<double>(0, 1);
77
- }
78
- if (z.real() == -std::numeric_limits<double>::infinity()) {
79
- return -z + (2.0 * M_PI * k + M_PI) * std::complex<double>(0, 1);
80
- }
81
- if (z == 0.0) {
82
- if (k == 0) {
83
- return z;
84
- }
85
- set_error("lambertw", SF_ERROR_SINGULAR, NULL);
86
- return -std::numeric_limits<double>::infinity();
87
- }
88
- if (z == 1.0 && k == 0) {
89
- // Split out this case because the asymptotic series blows up
90
- return OMEGA;
91
- }
92
-
93
- absz = std::abs(z);
94
- // Get an initial guess for Halley's method
95
- if (k == 0) {
96
- if (std::abs(z + EXPN1) < 0.3) {
97
- w = detail::lambertw_branchpt(z);
98
- } else if (-1.0 < z.real() && z.real() < 1.5 && std::abs(z.imag()) < 1.0 &&
99
- -2.5 * std::abs(z.imag()) - 0.2 < z.real()) {
100
- /* Empirically determined decision boundary where the Pade
101
- * approximation is more accurate. */
102
- w = detail::lambertw_pade0(z);
103
- } else {
104
- w = detail::lambertw_asy(z, k);
105
- }
106
- } else if (k == -1) {
107
- if (absz <= EXPN1 && z.imag() == 0.0 && z.real() < 0.0) {
108
- w = std::log(-z.real());
109
- } else {
110
- w = detail::lambertw_asy(z, k);
111
- }
112
- } else {
113
- w = detail::lambertw_asy(z, k);
114
- }
115
-
116
- // Halley's method; see 5.9 in [1]
117
- if (w.real() >= 0) {
118
- // Rearrange the formula to avoid overflow in exp
119
- for (int i = 0; i < 100; i++) {
120
- ew = std::exp(-w);
121
- wewz = w - z * ew;
122
- wn = w - wewz / (w + 1.0 - (w + 2.0) * wewz / (2.0 * w + 2.0));
123
- if (std::abs(wn - w) <= tol * std::abs(wn)) {
124
- return wn;
125
- }
126
- w = wn;
127
- }
128
- } else {
129
- for (int i = 0; i < 100; i++) {
130
- ew = std::exp(w);
131
- wew = w * ew;
132
- wewz = wew - z;
133
- wn = w - wewz / (wew + ew - (w + 2.0) * wewz / (2.0 * w + 2.0));
134
- if (std::abs(wn - w) <= tol * std::abs(wn)) {
135
- return wn;
136
- }
137
- w = wn;
138
- }
139
- }
140
-
141
- set_error("lambertw", SF_ERROR_SLOW, "iteration failed to converge: %g + %gj", z.real(), z.imag());
142
- return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
143
- }
144
-
145
- XSF_HOST_DEVICE inline std::complex<float> lambertw(std::complex<float> z, long k, float tol) {
146
- return static_cast<std::complex<float>>(
147
- lambertw(static_cast<std::complex<double>>(z), k, static_cast<double>(tol)));
148
- }
149
-
150
- } // namespace xsf
@@ -1,163 +0,0 @@
1
- /* Translated from Cython into C++ by SciPy developers in 2024.
2
- * Original header comment appears below.
3
- */
4
-
5
- /* An implementation of the principal branch of the logarithm of
6
- * Gamma. Also contains implementations of Gamma and 1/Gamma which are
7
- * easily computed from log-Gamma.
8
- *
9
- * Author: Josh Wilson
10
- *
11
- * Distributed under the same license as Scipy.
12
- *
13
- * References
14
- * ----------
15
- * [1] Hare, "Computing the Principal Branch of log-Gamma",
16
- * Journal of Algorithms, 1997.
17
- *
18
- * [2] Julia,
19
- * https://github.com/JuliaLang/julia/blob/master/base/special/gamma.jl
20
- */
21
-
22
- #pragma once
23
-
24
- #include "cephes/gamma.h"
25
- #include "cephes/rgamma.h"
26
- #include "config.h"
27
- #include "error.h"
28
- #include "evalpoly.h"
29
- #include "trig.h"
30
- #include "zlog1.h"
31
-
32
- namespace xsf {
33
-
34
- namespace detail {
35
- constexpr double loggamma_SMALLX = 7;
36
- constexpr double loggamma_SMALLY = 7;
37
- constexpr double loggamma_HLOG2PI = 0.918938533204672742; // log(2*pi)/2
38
- constexpr double loggamma_LOGPI = 1.1447298858494001741434262; // log(pi)
39
- constexpr double loggamma_TAYLOR_RADIUS = 0.2;
40
-
41
- XSF_HOST_DEVICE std::complex<double> loggamma_stirling(std::complex<double> z) {
42
- /* Stirling series for log-Gamma
43
- *
44
- * The coefficients are B[2*n]/(2*n*(2*n - 1)) where B[2*n] is the
45
- * (2*n)th Bernoulli number. See (1.1) in [1].
46
- */
47
- double coeffs[] = {-2.955065359477124183E-2, 6.4102564102564102564E-3, -1.9175269175269175269E-3,
48
- 8.4175084175084175084E-4, -5.952380952380952381E-4, 7.9365079365079365079E-4,
49
- -2.7777777777777777778E-3, 8.3333333333333333333E-2};
50
- std::complex<double> rz = 1.0 / z;
51
- std::complex<double> rzz = rz / z;
52
-
53
- return (z - 0.5) * std::log(z) - z + loggamma_HLOG2PI + rz * cevalpoly(coeffs, 7, rzz);
54
- }
55
-
56
- XSF_HOST_DEVICE std::complex<double> loggamma_recurrence(std::complex<double> z) {
57
- /* Backward recurrence relation.
58
- *
59
- * See Proposition 2.2 in [1] and the Julia implementation [2].
60
- *
61
- */
62
- int signflips = 0;
63
- int sb = 0;
64
- std::complex<double> shiftprod = z;
65
-
66
- z += 1.0;
67
- int nsb;
68
- while (z.real() <= loggamma_SMALLX) {
69
- shiftprod *= z;
70
- nsb = std::signbit(shiftprod.imag());
71
- signflips += nsb != 0 && sb == 0 ? 1 : 0;
72
- sb = nsb;
73
- z += 1.0;
74
- }
75
- return loggamma_stirling(z) - std::log(shiftprod) - signflips * 2 * M_PI * std::complex<double>(0, 1);
76
- }
77
-
78
- XSF_HOST_DEVICE std::complex<double> loggamma_taylor(std::complex<double> z) {
79
- /* Taylor series for log-Gamma around z = 1.
80
- *
81
- * It is
82
- *
83
- * loggamma(z + 1) = -gamma*z + zeta(2)*z**2/2 - zeta(3)*z**3/3 ...
84
- *
85
- * where gamma is the Euler-Mascheroni constant.
86
- */
87
-
88
- double coeffs[] = {
89
- -4.3478266053040259361E-2, 4.5454556293204669442E-2, -4.7619070330142227991E-2, 5.000004769810169364E-2,
90
- -5.2631679379616660734E-2, 5.5555767627403611102E-2, -5.8823978658684582339E-2, 6.2500955141213040742E-2,
91
- -6.6668705882420468033E-2, 7.1432946295361336059E-2, -7.6932516411352191473E-2, 8.3353840546109004025E-2,
92
- -9.0954017145829042233E-2, 1.0009945751278180853E-1, -1.1133426586956469049E-1, 1.2550966952474304242E-1,
93
- -1.4404989676884611812E-1, 1.6955717699740818995E-1, -2.0738555102867398527E-1, 2.7058080842778454788E-1,
94
- -4.0068563438653142847E-1, 8.2246703342411321824E-1, -5.7721566490153286061E-1};
95
-
96
- z -= 1.0;
97
- return z * cevalpoly(coeffs, 22, z);
98
- }
99
- } // namespace detail
100
-
101
- XSF_HOST_DEVICE inline double loggamma(double x) {
102
- if (x < 0.0) {
103
- return std::numeric_limits<double>::quiet_NaN();
104
- }
105
- return cephes::lgam(x);
106
- }
107
-
108
- XSF_HOST_DEVICE inline float loggamma(float x) { return loggamma(static_cast<double>(x)); }
109
-
110
- XSF_HOST_DEVICE inline std::complex<double> loggamma(std::complex<double> z) {
111
- // Compute the principal branch of log-Gamma
112
-
113
- if (std::isnan(z.real()) || std::isnan(z.imag())) {
114
- return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
115
- }
116
- if (z.real() <= 0 and z == std::floor(z.real())) {
117
- set_error("loggamma", SF_ERROR_SINGULAR, NULL);
118
- return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
119
- }
120
- if (z.real() > detail::loggamma_SMALLX || std::abs(z.imag()) > detail::loggamma_SMALLY) {
121
- return detail::loggamma_stirling(z);
122
- }
123
- if (std::abs(z - 1.0) < detail::loggamma_TAYLOR_RADIUS) {
124
- return detail::loggamma_taylor(z);
125
- }
126
- if (std::abs(z - 2.0) < detail::loggamma_TAYLOR_RADIUS) {
127
- // Recurrence relation and the Taylor series around 1.
128
- return detail::zlog1(z - 1.0) + detail::loggamma_taylor(z - 1.0);
129
- }
130
- if (z.real() < 0.1) {
131
- // Reflection formula; see Proposition 3.1 in [1]
132
- double tmp = std::copysign(2 * M_PI, z.imag()) * std::floor(0.5 * z.real() + 0.25);
133
- return std::complex<double>(detail::loggamma_LOGPI, tmp) - std::log(sinpi(z)) - loggamma(1.0 - z);
134
- }
135
- if (std::signbit(z.imag()) == 0) {
136
- // z.imag() >= 0 but is not -0.0
137
- return detail::loggamma_recurrence(z);
138
- }
139
- return std::conj(detail::loggamma_recurrence(std::conj(z)));
140
- }
141
-
142
- XSF_HOST_DEVICE inline std::complex<float> loggamma(std::complex<float> z) {
143
- return static_cast<std::complex<float>>(loggamma(static_cast<std::complex<double>>(z)));
144
- }
145
-
146
- XSF_HOST_DEVICE inline double rgamma(double z) { return cephes::rgamma(z); }
147
-
148
- XSF_HOST_DEVICE inline float rgamma(float z) { return rgamma(static_cast<double>(z)); }
149
-
150
- XSF_HOST_DEVICE inline std::complex<double> rgamma(std::complex<double> z) {
151
- // Compute 1/Gamma(z) using loggamma.
152
- if (z.real() <= 0 && z == std::floor(z.real())) {
153
- // Zeros at 0, -1, -2, ...
154
- return 0.0;
155
- }
156
- return std::exp(-loggamma(z));
157
- }
158
-
159
- XSF_HOST_DEVICE inline std::complex<float> rgamma(std::complex<float> z) {
160
- return static_cast<std::complex<float>>(rgamma(static_cast<std::complex<double>>(z)));
161
- }
162
-
163
- } // namespace xsf
scipy/special/xsf/sici.h DELETED
@@ -1,200 +0,0 @@
1
- /* Translated from Cython into C++ by SciPy developers in 2024.
2
- * Original header with Copyright information appears below.
3
- */
4
-
5
- /* Implementation of sin/cos/sinh/cosh integrals for complex arguments
6
- *
7
- * Sources
8
- * [1] Fredrik Johansson and others. mpmath: a Python library for
9
- * arbitrary-precision floating-point arithmetic (version 0.19),
10
- * December 2013. http://mpmath.org/.
11
- * [2] NIST, "Digital Library of Mathematical Functions",
12
- * https://dlmf.nist.gov/
13
- */
14
-
15
- #pragma once
16
-
17
- #include "config.h"
18
- #include "error.h"
19
-
20
- #include "expint.h"
21
- #include "cephes/const.h"
22
- #include "cephes/sici.h"
23
- #include "cephes/shichi.h"
24
-
25
- namespace xsf {
26
- namespace detail {
27
-
28
- XSF_HOST_DEVICE inline void sici_power_series(int sgn, std::complex<double> z,
29
- std::complex<double> *s, std::complex<double> *c) {
30
- /* DLMF 6.6.5 and 6.6.6. If sgn = -1 computes si/ci, and if sgn = 1
31
- * computes shi/chi.
32
- */
33
- std::complex<double> fac = z;
34
- *s = fac;
35
- *c = 0;
36
- std::complex<double> term1, term2;
37
- for (int n = 1; n < 100; n++) {
38
- fac *= static_cast<double>(sgn)*z/(2.0*n);
39
- term2 = fac/(2.0*n);
40
- *c += term2;
41
- fac *= z/(2.0*n + 1.0);
42
- term1 = fac/(2.0*n + 1.0);
43
- *s += term1;
44
- constexpr double tol = std::numeric_limits<double>::epsilon();
45
- if (std::abs(term1) < tol*std::abs(*s) && std::abs(term2) < tol*std::abs(*c)) {
46
- break;
47
- }
48
- }
49
- }
50
-
51
- }
52
-
53
-
54
- XSF_HOST_DEVICE inline int sici(std::complex<double> z,
55
- std::complex<double> *si, std::complex<double> *ci) {
56
- /* Compute sin/cos integrals at complex arguments. The algorithm
57
- * largely follows that of [1].
58
- */
59
-
60
- constexpr double EULER = xsf::cephes::detail::SCIPY_EULER;
61
-
62
- if (z == std::numeric_limits<double>::infinity()) {
63
- *si = M_PI_2;
64
- *ci = 0;
65
- return 0;
66
- }
67
- if (z == -std::numeric_limits<double>::infinity()) {
68
- *si = -M_PI_2;
69
- *ci = {0.0, M_PI};
70
- return 0;
71
- }
72
-
73
- if (std::abs(z) < 0.8) {
74
- // Use the series to avoid cancellation in si
75
- detail::sici_power_series(-1, z, si, ci);
76
-
77
- if (z == 0.0) {
78
- set_error("sici", SF_ERROR_DOMAIN, NULL);
79
- *ci = {-std::numeric_limits<double>::infinity(), std::numeric_limits<double>::quiet_NaN()};
80
- } else {
81
- *ci += EULER + std::log(z);
82
- }
83
- return 0;
84
- }
85
-
86
- // DLMF 6.5.5/6.5.6 plus DLMF 6.4.4/6.4.6/6.4.7
87
- std::complex<double> jz = std::complex<double>(0.0, 1.0) * z;
88
- std::complex<double> term1 = expi(jz);
89
- std::complex<double> term2 = expi(-jz);
90
- *si = std::complex<double>(0.0, -0.5)*(term1 - term2);
91
- *ci = 0.5*(term1 + term2);
92
- if (z.real() == 0) {
93
- if (z.imag() > 0) {
94
- *ci += std::complex<double>(0.0, M_PI_2);
95
- } else if (z.imag() < 0) {
96
- *ci -= std::complex<double>(0.0, M_PI_2);
97
- }
98
- } else if (z.real() > 0) {
99
- *si -= M_PI_2;
100
- } else {
101
- *si += M_PI_2;
102
- if (z.imag() >= 0) {
103
- *ci += std::complex<double>(0.0, M_PI);
104
- } else {
105
- *ci -= std::complex<double>(0.0, M_PI);
106
- }
107
- }
108
- return 0;
109
- }
110
-
111
- XSF_HOST_DEVICE inline int sici(std::complex<float> z,
112
- std::complex<float> *si_f, std::complex<float> *ci_f) {
113
- std::complex<double> si;
114
- std::complex<double> ci;
115
- int res = sici(z, &si, &ci);
116
- *si_f = si;
117
- *ci_f = ci;
118
- return res;
119
- }
120
-
121
- XSF_HOST_DEVICE inline int shichi(std::complex<double> z,
122
- std::complex<double> *shi, std::complex<double> *chi) {
123
- /* Compute sinh/cosh integrals at complex arguments. The algorithm
124
- * largely follows that of [1].
125
- */
126
- constexpr double EULER = xsf::cephes::detail::SCIPY_EULER;
127
- if (z == std::numeric_limits<double>::infinity()) {
128
- *shi = std::numeric_limits<double>::infinity();
129
- *chi = std::numeric_limits<double>::infinity();
130
- return 0;
131
- }
132
- if (z == -std::numeric_limits<double>::infinity()) {
133
- *shi = -std::numeric_limits<double>::infinity();
134
- *chi = std::numeric_limits<double>::infinity();
135
- return 0;
136
- }
137
- if (std::abs(z) < 0.8) {
138
- // Use the series to avoid cancellation in shi
139
- detail::sici_power_series(1, z, shi, chi);
140
- if (z == 0.0) {
141
- set_error("shichi", SF_ERROR_DOMAIN, NULL);
142
- *chi = {-std::numeric_limits<double>::infinity(), std::numeric_limits<double>::quiet_NaN()};
143
- } else {
144
- *chi += EULER + std::log(z);
145
- }
146
- return 0;
147
- }
148
-
149
- std::complex<double> term1 = expi(z);
150
- std::complex<double> term2 = expi(-z);
151
- *shi = 0.5*(term1 - term2);
152
- *chi = 0.5*(term1 + term2);
153
- if (z.imag() > 0) {
154
- *shi -= std::complex<double>(0.0, 0.5*M_PI);
155
- *chi += std::complex<double>(0.0, 0.5*M_PI);
156
- } else if (z.imag() < 0) {
157
- *shi += std::complex<double>(0.0, 0.5*M_PI);
158
- *chi -= std::complex<double>(0.0, 0.5*M_PI);
159
- } else if (z.real() < 0) {
160
- *chi += std::complex<double>(0.0, M_PI);
161
- }
162
- return 0;
163
- }
164
-
165
- XSF_HOST_DEVICE inline int shichi(std::complex<float> z,
166
- std::complex<float> *shi_f, std::complex<float> *chi_f) {
167
- std::complex<double> shi;
168
- std::complex<double> chi;
169
- int res = shichi(z, &shi, &chi);
170
- *shi_f = shi;
171
- *chi_f = chi;
172
- return res;
173
- }
174
-
175
- XSF_HOST_DEVICE inline int sici(double x, double *si, double *ci) {
176
- return cephes::sici(x, si, ci);
177
- }
178
-
179
- XSF_HOST_DEVICE inline int shichi(double x, double *shi, double *chi) {
180
- return cephes::shichi(x, shi, chi);
181
- }
182
-
183
- XSF_HOST_DEVICE inline int sici(float x, float *si_f, float *ci_f) {
184
- double si;
185
- double ci;
186
- int res = cephes::sici(x, &si, &ci);
187
- *si_f = si;
188
- *ci_f = ci;
189
- return res;
190
- }
191
-
192
- XSF_HOST_DEVICE inline int shichi(float x, float *shi_f, float *chi_f) {
193
- double shi;
194
- double chi;
195
- int res = cephes::shichi(x, &shi, &chi);
196
- *shi_f = shi;
197
- *chi_f = chi;
198
- return res;
199
- }
200
- }