scipy 1.15.3__cp312-cp312-win_amd64.whl → 1.16.0rc2__cp312-cp312-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 (759) hide show
  1. scipy/__config__.py +8 -8
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cp312-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp312-win_amd64.pyd +0 -0
  5. scipy/_lib/_array_api.py +486 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cp312-win_amd64.dll.a +0 -0
  9. scipy/_lib/_ccallback_c.cp312-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.cp312-win_amd64.dll.a +0 -0
  13. scipy/_lib/_fpumode.cp312-win_amd64.pyd +0 -0
  14. scipy/_lib/_sparse.py +41 -0
  15. scipy/_lib/_test_ccallback.cp312-win_amd64.dll.a +0 -0
  16. scipy/_lib/_test_ccallback.cp312-win_amd64.pyd +0 -0
  17. scipy/_lib/_test_deprecation_call.cp312-win_amd64.dll.a +0 -0
  18. scipy/_lib/_test_deprecation_call.cp312-win_amd64.pyd +0 -0
  19. scipy/_lib/_test_deprecation_def.cp312-win_amd64.dll.a +0 -0
  20. scipy/_lib/_test_deprecation_def.cp312-win_amd64.pyd +0 -0
  21. scipy/_lib/_testutils.py +6 -2
  22. scipy/_lib/_uarray/_uarray.cp312-win_amd64.dll.a +0 -0
  23. scipy/_lib/_uarray/_uarray.cp312-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.cp312-win_amd64.dll.a +0 -0
  72. scipy/_lib/messagestream.cp312-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 +166 -35
  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.cp312-win_amd64.dll.a +0 -0
  105. scipy/cluster/_hierarchy.cp312-win_amd64.pyd +0 -0
  106. scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.dll.a +0 -0
  107. scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.pyd +0 -0
  108. scipy/cluster/_vq.cp312-win_amd64.dll.a +0 -0
  109. scipy/cluster/_vq.cp312-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 +263 -157
  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.cp312-win_amd64.dll.a +0 -0
  127. scipy/fft/_pocketfft/pypocketfft.cp312-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.cp312-win_amd64.dll.a +0 -0
  136. scipy/fftpack/convolve.cp312-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.cp312-win_amd64.dll.a +0 -0
  142. scipy/integrate/_dop.cp312-win_amd64.pyd +0 -0
  143. scipy/integrate/_lsoda.cp312-win_amd64.dll.a +0 -0
  144. scipy/integrate/_lsoda.cp312-win_amd64.pyd +0 -0
  145. scipy/integrate/_ode.py +9 -2
  146. scipy/integrate/_odepack.cp312-win_amd64.dll.a +0 -0
  147. scipy/integrate/_odepack.cp312-win_amd64.pyd +0 -0
  148. scipy/integrate/_quad_vec.py +21 -29
  149. scipy/integrate/_quadpack.cp312-win_amd64.dll.a +0 -0
  150. scipy/integrate/_quadpack.cp312-win_amd64.pyd +0 -0
  151. scipy/integrate/_quadpack_py.py +11 -7
  152. scipy/integrate/_quadrature.py +3 -3
  153. scipy/integrate/_rules/_base.py +2 -2
  154. scipy/integrate/_tanhsinh.py +48 -47
  155. scipy/integrate/_test_multivariate.cp312-win_amd64.dll.a +0 -0
  156. scipy/integrate/_test_multivariate.cp312-win_amd64.pyd +0 -0
  157. scipy/integrate/_test_odeint_banded.cp312-win_amd64.dll.a +0 -0
  158. scipy/integrate/_test_odeint_banded.cp312-win_amd64.pyd +0 -0
  159. scipy/integrate/_vode.cp312-win_amd64.dll.a +0 -0
  160. scipy/integrate/_vode.cp312-win_amd64.pyd +0 -0
  161. scipy/integrate/tests/test__quad_vec.py +0 -6
  162. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  163. scipy/integrate/tests/test_cubature.py +21 -35
  164. scipy/integrate/tests/test_quadrature.py +6 -8
  165. scipy/integrate/tests/test_tanhsinh.py +56 -48
  166. scipy/interpolate/__init__.py +70 -58
  167. scipy/interpolate/_bary_rational.py +22 -22
  168. scipy/interpolate/_bsplines.py +119 -66
  169. scipy/interpolate/_cubic.py +65 -50
  170. scipy/interpolate/_dfitpack.cp312-win_amd64.dll.a +0 -0
  171. scipy/interpolate/_dfitpack.cp312-win_amd64.pyd +0 -0
  172. scipy/interpolate/_dierckx.cp312-win_amd64.dll.a +0 -0
  173. scipy/interpolate/_dierckx.cp312-win_amd64.pyd +0 -0
  174. scipy/interpolate/_fitpack.cp312-win_amd64.dll.a +0 -0
  175. scipy/interpolate/_fitpack.cp312-win_amd64.pyd +0 -0
  176. scipy/interpolate/_fitpack2.py +9 -6
  177. scipy/interpolate/_fitpack_impl.py +32 -26
  178. scipy/interpolate/_fitpack_repro.py +23 -19
  179. scipy/interpolate/_interpnd.cp312-win_amd64.dll.a +0 -0
  180. scipy/interpolate/_interpnd.cp312-win_amd64.pyd +0 -0
  181. scipy/interpolate/_interpolate.py +30 -12
  182. scipy/interpolate/_ndbspline.py +13 -18
  183. scipy/interpolate/_ndgriddata.py +5 -8
  184. scipy/interpolate/_polyint.py +95 -31
  185. scipy/interpolate/_ppoly.cp312-win_amd64.dll.a +0 -0
  186. scipy/interpolate/_ppoly.cp312-win_amd64.pyd +0 -0
  187. scipy/interpolate/_rbf.py +2 -2
  188. scipy/interpolate/_rbfinterp.py +1 -1
  189. scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.dll.a +0 -0
  190. scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.pyd +0 -0
  191. scipy/interpolate/_rgi.py +31 -26
  192. scipy/interpolate/_rgi_cython.cp312-win_amd64.dll.a +0 -0
  193. scipy/interpolate/_rgi_cython.cp312-win_amd64.pyd +0 -0
  194. scipy/interpolate/dfitpack.py +0 -20
  195. scipy/interpolate/interpnd.py +1 -2
  196. scipy/interpolate/tests/test_bary_rational.py +2 -2
  197. scipy/interpolate/tests/test_bsplines.py +97 -1
  198. scipy/interpolate/tests/test_fitpack2.py +39 -1
  199. scipy/interpolate/tests/test_interpnd.py +32 -20
  200. scipy/interpolate/tests/test_interpolate.py +48 -4
  201. scipy/interpolate/tests/test_rgi.py +2 -1
  202. scipy/io/_fast_matrix_market/__init__.py +2 -0
  203. scipy/io/_fast_matrix_market/_fmm_core.cp312-win_amd64.dll.a +0 -0
  204. scipy/io/_fast_matrix_market/_fmm_core.cp312-win_amd64.pyd +0 -0
  205. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  206. scipy/io/_harwell_boeing/hb.py +7 -11
  207. scipy/io/_idl.py +5 -7
  208. scipy/io/_netcdf.py +15 -5
  209. scipy/io/_test_fortran.cp312-win_amd64.dll.a +0 -0
  210. scipy/io/_test_fortran.cp312-win_amd64.pyd +0 -0
  211. scipy/io/arff/tests/test_arffread.py +3 -3
  212. scipy/io/matlab/__init__.py +5 -3
  213. scipy/io/matlab/_mio.py +4 -1
  214. scipy/io/matlab/_mio5.py +19 -13
  215. scipy/io/matlab/_mio5_utils.cp312-win_amd64.dll.a +0 -0
  216. scipy/io/matlab/_mio5_utils.cp312-win_amd64.pyd +0 -0
  217. scipy/io/matlab/_mio_utils.cp312-win_amd64.dll.a +0 -0
  218. scipy/io/matlab/_mio_utils.cp312-win_amd64.pyd +0 -0
  219. scipy/io/matlab/_miobase.py +4 -1
  220. scipy/io/matlab/_streams.cp312-win_amd64.dll.a +0 -0
  221. scipy/io/matlab/_streams.cp312-win_amd64.pyd +0 -0
  222. scipy/io/matlab/tests/test_mio.py +46 -18
  223. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  224. scipy/io/tests/test_mmio.py +7 -1
  225. scipy/io/tests/test_wavfile.py +41 -0
  226. scipy/io/wavfile.py +57 -10
  227. scipy/linalg/_basic.py +113 -86
  228. scipy/linalg/_cythonized_array_utils.cp312-win_amd64.dll.a +0 -0
  229. scipy/linalg/_cythonized_array_utils.cp312-win_amd64.pyd +0 -0
  230. scipy/linalg/_decomp.py +22 -9
  231. scipy/linalg/_decomp_cholesky.py +28 -13
  232. scipy/linalg/_decomp_cossin.py +45 -30
  233. scipy/linalg/_decomp_interpolative.cp312-win_amd64.dll.a +0 -0
  234. scipy/linalg/_decomp_interpolative.cp312-win_amd64.pyd +0 -0
  235. scipy/linalg/_decomp_ldl.py +4 -1
  236. scipy/linalg/_decomp_lu.py +18 -6
  237. scipy/linalg/_decomp_lu_cython.cp312-win_amd64.dll.a +0 -0
  238. scipy/linalg/_decomp_lu_cython.cp312-win_amd64.pyd +0 -0
  239. scipy/linalg/_decomp_polar.py +2 -0
  240. scipy/linalg/_decomp_qr.py +6 -2
  241. scipy/linalg/_decomp_qz.py +3 -0
  242. scipy/linalg/_decomp_schur.py +3 -1
  243. scipy/linalg/_decomp_svd.py +13 -2
  244. scipy/linalg/_decomp_update.cp312-win_amd64.dll.a +0 -0
  245. scipy/linalg/_decomp_update.cp312-win_amd64.pyd +0 -0
  246. scipy/linalg/_expm_frechet.py +4 -0
  247. scipy/linalg/_fblas.cp312-win_amd64.dll.a +0 -0
  248. scipy/linalg/_fblas.cp312-win_amd64.pyd +0 -0
  249. scipy/linalg/_flapack.cp312-win_amd64.dll.a +0 -0
  250. scipy/linalg/_flapack.cp312-win_amd64.pyd +0 -0
  251. scipy/linalg/_linalg_pythran.cp312-win_amd64.dll.a +0 -0
  252. scipy/linalg/_linalg_pythran.cp312-win_amd64.pyd +0 -0
  253. scipy/linalg/_matfuncs.py +187 -4
  254. scipy/linalg/_matfuncs_expm.cp312-win_amd64.dll.a +0 -0
  255. scipy/linalg/_matfuncs_expm.cp312-win_amd64.pyd +0 -0
  256. scipy/linalg/_matfuncs_schur_sqrtm.cp312-win_amd64.dll.a +0 -0
  257. scipy/linalg/_matfuncs_schur_sqrtm.cp312-win_amd64.pyd +0 -0
  258. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  259. scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.dll.a +0 -0
  260. scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.pyd +0 -0
  261. scipy/linalg/_procrustes.py +2 -0
  262. scipy/linalg/_sketches.py +17 -6
  263. scipy/linalg/_solve_toeplitz.cp312-win_amd64.dll.a +0 -0
  264. scipy/linalg/_solve_toeplitz.cp312-win_amd64.pyd +0 -0
  265. scipy/linalg/_solvers.py +7 -2
  266. scipy/linalg/_special_matrices.py +26 -36
  267. scipy/linalg/cython_blas.cp312-win_amd64.dll.a +0 -0
  268. scipy/linalg/cython_blas.cp312-win_amd64.pyd +0 -0
  269. scipy/linalg/cython_lapack.cp312-win_amd64.dll.a +0 -0
  270. scipy/linalg/cython_lapack.cp312-win_amd64.pyd +0 -0
  271. scipy/linalg/lapack.py +22 -2
  272. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  273. scipy/linalg/tests/test_basic.py +31 -16
  274. scipy/linalg/tests/test_batch.py +588 -0
  275. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  276. scipy/linalg/tests/test_decomp.py +40 -3
  277. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  278. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  279. scipy/linalg/tests/test_lapack.py +115 -7
  280. scipy/linalg/tests/test_matfuncs.py +157 -102
  281. scipy/linalg/tests/test_procrustes.py +0 -7
  282. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  283. scipy/linalg/tests/test_special_matrices.py +1 -5
  284. scipy/ndimage/__init__.py +1 -0
  285. scipy/ndimage/_ctest.cp312-win_amd64.dll.a +0 -0
  286. scipy/ndimage/_ctest.cp312-win_amd64.pyd +0 -0
  287. scipy/ndimage/_cytest.cp312-win_amd64.dll.a +0 -0
  288. scipy/ndimage/_cytest.cp312-win_amd64.pyd +0 -0
  289. scipy/ndimage/_delegators.py +8 -2
  290. scipy/ndimage/_filters.py +453 -5
  291. scipy/ndimage/_interpolation.py +36 -6
  292. scipy/ndimage/_measurements.py +4 -2
  293. scipy/ndimage/_morphology.py +5 -0
  294. scipy/ndimage/_nd_image.cp312-win_amd64.dll.a +0 -0
  295. scipy/ndimage/_nd_image.cp312-win_amd64.pyd +0 -0
  296. scipy/ndimage/_ni_docstrings.py +5 -1
  297. scipy/ndimage/_ni_label.cp312-win_amd64.dll.a +0 -0
  298. scipy/ndimage/_ni_label.cp312-win_amd64.pyd +0 -0
  299. scipy/ndimage/_ni_support.py +1 -5
  300. scipy/ndimage/_rank_filter_1d.cp312-win_amd64.dll.a +0 -0
  301. scipy/ndimage/_rank_filter_1d.cp312-win_amd64.pyd +0 -0
  302. scipy/ndimage/_support_alternative_backends.py +18 -6
  303. scipy/ndimage/tests/test_filters.py +370 -259
  304. scipy/ndimage/tests/test_fourier.py +7 -9
  305. scipy/ndimage/tests/test_interpolation.py +68 -61
  306. scipy/ndimage/tests/test_measurements.py +18 -35
  307. scipy/ndimage/tests/test_morphology.py +143 -131
  308. scipy/ndimage/tests/test_splines.py +1 -3
  309. scipy/odr/__odrpack.cp312-win_amd64.dll.a +0 -0
  310. scipy/odr/__odrpack.cp312-win_amd64.pyd +0 -0
  311. scipy/optimize/_basinhopping.py +13 -7
  312. scipy/optimize/_bglu_dense.cp312-win_amd64.dll.a +0 -0
  313. scipy/optimize/_bglu_dense.cp312-win_amd64.pyd +0 -0
  314. scipy/optimize/_bracket.py +17 -24
  315. scipy/optimize/_chandrupatla.py +9 -10
  316. scipy/optimize/_cobyla_py.py +104 -123
  317. scipy/optimize/_constraints.py +14 -10
  318. scipy/optimize/_differentiable_functions.py +371 -230
  319. scipy/optimize/_differentialevolution.py +4 -3
  320. scipy/optimize/_direct.cp312-win_amd64.dll.a +0 -0
  321. scipy/optimize/_direct.cp312-win_amd64.pyd +0 -0
  322. scipy/optimize/_dual_annealing.py +1 -1
  323. scipy/optimize/_elementwise.py +1 -4
  324. scipy/optimize/_group_columns.cp312-win_amd64.dll.a +0 -0
  325. scipy/optimize/_group_columns.cp312-win_amd64.pyd +0 -0
  326. scipy/optimize/_highspy/_core.cp312-win_amd64.dll.a +0 -0
  327. scipy/optimize/_highspy/_core.cp312-win_amd64.pyd +0 -0
  328. scipy/optimize/_highspy/_highs_options.cp312-win_amd64.dll.a +0 -0
  329. scipy/optimize/_highspy/_highs_options.cp312-win_amd64.pyd +0 -0
  330. scipy/optimize/_lbfgsb.cp312-win_amd64.dll.a +0 -0
  331. scipy/optimize/_lbfgsb.cp312-win_amd64.pyd +0 -0
  332. scipy/optimize/_lbfgsb_py.py +57 -16
  333. scipy/optimize/_linprog_doc.py +2 -2
  334. scipy/optimize/_linprog_highs.py +2 -2
  335. scipy/optimize/_linprog_ip.py +25 -10
  336. scipy/optimize/_linprog_util.py +14 -16
  337. scipy/optimize/_lsap.cp312-win_amd64.dll.a +0 -0
  338. scipy/optimize/_lsap.cp312-win_amd64.pyd +0 -0
  339. scipy/optimize/_lsq/common.py +3 -3
  340. scipy/optimize/_lsq/dogbox.py +16 -2
  341. scipy/optimize/_lsq/givens_elimination.cp312-win_amd64.dll.a +0 -0
  342. scipy/optimize/_lsq/givens_elimination.cp312-win_amd64.pyd +0 -0
  343. scipy/optimize/_lsq/least_squares.py +198 -126
  344. scipy/optimize/_lsq/lsq_linear.py +6 -6
  345. scipy/optimize/_lsq/trf.py +35 -8
  346. scipy/optimize/_milp.py +3 -1
  347. scipy/optimize/_minimize.py +105 -36
  348. scipy/optimize/_minpack.cp312-win_amd64.dll.a +0 -0
  349. scipy/optimize/_minpack.cp312-win_amd64.pyd +0 -0
  350. scipy/optimize/_minpack_py.py +21 -14
  351. scipy/optimize/_moduleTNC.cp312-win_amd64.dll.a +0 -0
  352. scipy/optimize/_moduleTNC.cp312-win_amd64.pyd +0 -0
  353. scipy/optimize/_nnls.py +20 -21
  354. scipy/optimize/_nonlin.py +34 -3
  355. scipy/optimize/_numdiff.py +288 -110
  356. scipy/optimize/_optimize.py +86 -48
  357. scipy/optimize/_pava_pybind.cp312-win_amd64.dll.a +0 -0
  358. scipy/optimize/_pava_pybind.cp312-win_amd64.pyd +0 -0
  359. scipy/optimize/_remove_redundancy.py +5 -5
  360. scipy/optimize/_root_scalar.py +1 -1
  361. scipy/optimize/_shgo.py +6 -0
  362. scipy/optimize/_shgo_lib/_complex.py +1 -1
  363. scipy/optimize/_slsqp_py.py +216 -124
  364. scipy/optimize/_slsqplib.cp312-win_amd64.dll.a +0 -0
  365. scipy/optimize/_slsqplib.cp312-win_amd64.pyd +0 -0
  366. scipy/optimize/_spectral.py +1 -1
  367. scipy/optimize/_tnc.py +8 -1
  368. scipy/optimize/_trlib/_trlib.cp312-win_amd64.dll.a +0 -0
  369. scipy/optimize/_trlib/_trlib.cp312-win_amd64.pyd +0 -0
  370. scipy/optimize/_trustregion.py +20 -6
  371. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  372. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  373. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  374. scipy/optimize/_trustregion_constr/projections.py +12 -8
  375. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  376. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  377. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  378. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  379. scipy/optimize/_trustregion_exact.py +0 -1
  380. scipy/optimize/_zeros.cp312-win_amd64.dll.a +0 -0
  381. scipy/optimize/_zeros.cp312-win_amd64.pyd +0 -0
  382. scipy/optimize/_zeros_py.py +97 -17
  383. scipy/optimize/cython_optimize/_zeros.cp312-win_amd64.dll.a +0 -0
  384. scipy/optimize/cython_optimize/_zeros.cp312-win_amd64.pyd +0 -0
  385. scipy/optimize/slsqp.py +0 -1
  386. scipy/optimize/tests/test__basinhopping.py +1 -1
  387. scipy/optimize/tests/test__differential_evolution.py +4 -4
  388. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  389. scipy/optimize/tests/test__numdiff.py +66 -22
  390. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  391. scipy/optimize/tests/test__shgo.py +9 -1
  392. scipy/optimize/tests/test_bracket.py +36 -46
  393. scipy/optimize/tests/test_chandrupatla.py +133 -135
  394. scipy/optimize/tests/test_cobyla.py +74 -45
  395. scipy/optimize/tests/test_constraints.py +1 -1
  396. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  397. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  398. scipy/optimize/tests/test_least_squares.py +125 -13
  399. scipy/optimize/tests/test_linear_assignment.py +3 -3
  400. scipy/optimize/tests/test_linprog.py +3 -3
  401. scipy/optimize/tests/test_lsq_linear.py +6 -6
  402. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  403. scipy/optimize/tests/test_minpack.py +4 -4
  404. scipy/optimize/tests/test_nnls.py +43 -3
  405. scipy/optimize/tests/test_nonlin.py +36 -0
  406. scipy/optimize/tests/test_optimize.py +95 -17
  407. scipy/optimize/tests/test_slsqp.py +36 -4
  408. scipy/optimize/tests/test_zeros.py +34 -1
  409. scipy/signal/__init__.py +12 -23
  410. scipy/signal/_delegators.py +568 -0
  411. scipy/signal/_filter_design.py +459 -241
  412. scipy/signal/_fir_filter_design.py +262 -90
  413. scipy/signal/_lti_conversion.py +3 -2
  414. scipy/signal/_ltisys.py +118 -91
  415. scipy/signal/_max_len_seq_inner.cp312-win_amd64.dll.a +0 -0
  416. scipy/signal/_max_len_seq_inner.cp312-win_amd64.pyd +0 -0
  417. scipy/signal/_peak_finding_utils.cp312-win_amd64.dll.a +0 -0
  418. scipy/signal/_peak_finding_utils.cp312-win_amd64.pyd +0 -0
  419. scipy/signal/_polyutils.py +172 -0
  420. scipy/signal/_short_time_fft.py +519 -70
  421. scipy/signal/_signal_api.py +30 -0
  422. scipy/signal/_signaltools.py +719 -399
  423. scipy/signal/_sigtools.cp312-win_amd64.dll.a +0 -0
  424. scipy/signal/_sigtools.cp312-win_amd64.pyd +0 -0
  425. scipy/signal/_sosfilt.cp312-win_amd64.dll.a +0 -0
  426. scipy/signal/_sosfilt.cp312-win_amd64.pyd +0 -0
  427. scipy/signal/_spectral_py.py +230 -50
  428. scipy/signal/_spline.cp312-win_amd64.dll.a +0 -0
  429. scipy/signal/_spline.cp312-win_amd64.pyd +0 -0
  430. scipy/signal/_spline_filters.py +108 -68
  431. scipy/signal/_support_alternative_backends.py +73 -0
  432. scipy/signal/_upfirdn.py +4 -1
  433. scipy/signal/_upfirdn_apply.cp312-win_amd64.dll.a +0 -0
  434. scipy/signal/_upfirdn_apply.cp312-win_amd64.pyd +0 -0
  435. scipy/signal/_waveforms.py +2 -11
  436. scipy/signal/_wavelets.py +1 -1
  437. scipy/signal/fir_filter_design.py +1 -0
  438. scipy/signal/spline.py +4 -11
  439. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  440. scipy/signal/tests/test_bsplines.py +114 -79
  441. scipy/signal/tests/test_cont2discrete.py +9 -2
  442. scipy/signal/tests/test_filter_design.py +721 -481
  443. scipy/signal/tests/test_fir_filter_design.py +332 -140
  444. scipy/signal/tests/test_savitzky_golay.py +4 -3
  445. scipy/signal/tests/test_short_time_fft.py +221 -3
  446. scipy/signal/tests/test_signaltools.py +2144 -1348
  447. scipy/signal/tests/test_spectral.py +50 -6
  448. scipy/signal/tests/test_splines.py +161 -96
  449. scipy/signal/tests/test_upfirdn.py +84 -50
  450. scipy/signal/tests/test_waveforms.py +20 -0
  451. scipy/signal/tests/test_windows.py +607 -466
  452. scipy/signal/windows/_windows.py +287 -148
  453. scipy/sparse/__init__.py +23 -4
  454. scipy/sparse/_base.py +270 -108
  455. scipy/sparse/_bsr.py +7 -4
  456. scipy/sparse/_compressed.py +59 -231
  457. scipy/sparse/_construct.py +90 -38
  458. scipy/sparse/_coo.py +115 -181
  459. scipy/sparse/_csc.py +4 -4
  460. scipy/sparse/_csparsetools.cp312-win_amd64.dll.a +0 -0
  461. scipy/sparse/_csparsetools.cp312-win_amd64.pyd +0 -0
  462. scipy/sparse/_csr.py +2 -2
  463. scipy/sparse/_data.py +48 -48
  464. scipy/sparse/_dia.py +105 -18
  465. scipy/sparse/_dok.py +0 -23
  466. scipy/sparse/_index.py +4 -4
  467. scipy/sparse/_matrix.py +23 -0
  468. scipy/sparse/_sparsetools.cp312-win_amd64.dll.a +0 -0
  469. scipy/sparse/_sparsetools.cp312-win_amd64.pyd +0 -0
  470. scipy/sparse/_sputils.py +37 -22
  471. scipy/sparse/base.py +0 -9
  472. scipy/sparse/bsr.py +0 -14
  473. scipy/sparse/compressed.py +0 -23
  474. scipy/sparse/construct.py +0 -6
  475. scipy/sparse/coo.py +0 -14
  476. scipy/sparse/csc.py +0 -3
  477. scipy/sparse/csgraph/_flow.cp312-win_amd64.dll.a +0 -0
  478. scipy/sparse/csgraph/_flow.cp312-win_amd64.pyd +0 -0
  479. scipy/sparse/csgraph/_matching.cp312-win_amd64.dll.a +0 -0
  480. scipy/sparse/csgraph/_matching.cp312-win_amd64.pyd +0 -0
  481. scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.dll.a +0 -0
  482. scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.pyd +0 -0
  483. scipy/sparse/csgraph/_reordering.cp312-win_amd64.dll.a +0 -0
  484. scipy/sparse/csgraph/_reordering.cp312-win_amd64.pyd +0 -0
  485. scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.dll.a +0 -0
  486. scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.pyd +0 -0
  487. scipy/sparse/csgraph/_tools.cp312-win_amd64.dll.a +0 -0
  488. scipy/sparse/csgraph/_tools.cp312-win_amd64.pyd +0 -0
  489. scipy/sparse/csgraph/_traversal.cp312-win_amd64.dll.a +0 -0
  490. scipy/sparse/csgraph/_traversal.cp312-win_amd64.pyd +0 -0
  491. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  492. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  493. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  494. scipy/sparse/csr.py +0 -5
  495. scipy/sparse/data.py +1 -6
  496. scipy/sparse/dia.py +0 -7
  497. scipy/sparse/dok.py +0 -10
  498. scipy/sparse/linalg/_dsolve/_superlu.cp312-win_amd64.dll.a +0 -0
  499. scipy/sparse/linalg/_dsolve/_superlu.cp312-win_amd64.pyd +0 -0
  500. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  501. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  502. scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-win_amd64.dll.a +0 -0
  503. scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-win_amd64.pyd +0 -0
  504. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  505. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  506. scipy/sparse/linalg/_interface.py +17 -18
  507. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  508. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  509. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  510. scipy/sparse/linalg/_isolve/minres.py +5 -5
  511. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  512. scipy/sparse/linalg/_isolve/utils.py +2 -8
  513. scipy/sparse/linalg/_matfuncs.py +1 -1
  514. scipy/sparse/linalg/_norm.py +1 -1
  515. scipy/sparse/linalg/_propack/_cpropack.cp312-win_amd64.dll.a +0 -0
  516. scipy/sparse/linalg/_propack/_cpropack.cp312-win_amd64.pyd +0 -0
  517. scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.dll.a +0 -0
  518. scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.pyd +0 -0
  519. scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.dll.a +0 -0
  520. scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.pyd +0 -0
  521. scipy/sparse/linalg/_propack/_zpropack.cp312-win_amd64.dll.a +0 -0
  522. scipy/sparse/linalg/_propack/_zpropack.cp312-win_amd64.pyd +0 -0
  523. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  524. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  525. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  526. scipy/sparse/tests/test_base.py +214 -42
  527. scipy/sparse/tests/test_common1d.py +7 -7
  528. scipy/sparse/tests/test_construct.py +1 -1
  529. scipy/sparse/tests/test_coo.py +272 -4
  530. scipy/sparse/tests/test_sparsetools.py +5 -0
  531. scipy/sparse/tests/test_sputils.py +36 -7
  532. scipy/spatial/_ckdtree.cp312-win_amd64.dll.a +0 -0
  533. scipy/spatial/_ckdtree.cp312-win_amd64.pyd +0 -0
  534. scipy/spatial/_distance_pybind.cp312-win_amd64.dll.a +0 -0
  535. scipy/spatial/_distance_pybind.cp312-win_amd64.pyd +0 -0
  536. scipy/spatial/_distance_wrap.cp312-win_amd64.dll.a +0 -0
  537. scipy/spatial/_distance_wrap.cp312-win_amd64.pyd +0 -0
  538. scipy/spatial/_hausdorff.cp312-win_amd64.dll.a +0 -0
  539. scipy/spatial/_hausdorff.cp312-win_amd64.pyd +0 -0
  540. scipy/spatial/_qhull.cp312-win_amd64.dll.a +0 -0
  541. scipy/spatial/_qhull.cp312-win_amd64.pyd +0 -0
  542. scipy/spatial/_voronoi.cp312-win_amd64.dll.a +0 -0
  543. scipy/spatial/_voronoi.cp312-win_amd64.pyd +0 -0
  544. scipy/spatial/distance.py +49 -42
  545. scipy/spatial/tests/test_distance.py +15 -1
  546. scipy/spatial/tests/test_kdtree.py +1 -0
  547. scipy/spatial/tests/test_qhull.py +7 -2
  548. scipy/spatial/transform/__init__.py +5 -3
  549. scipy/spatial/transform/_rigid_transform.cp312-win_amd64.dll.a +0 -0
  550. scipy/spatial/transform/_rigid_transform.cp312-win_amd64.pyd +0 -0
  551. scipy/spatial/transform/_rotation.cp312-win_amd64.dll.a +0 -0
  552. scipy/spatial/transform/_rotation.cp312-win_amd64.pyd +0 -0
  553. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  554. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  555. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  556. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  557. scipy/special/__init__.py +1 -47
  558. scipy/special/_add_newdocs.py +34 -772
  559. scipy/special/_basic.py +22 -25
  560. scipy/special/_comb.cp312-win_amd64.dll.a +0 -0
  561. scipy/special/_comb.cp312-win_amd64.pyd +0 -0
  562. scipy/special/_ellip_harm_2.cp312-win_amd64.dll.a +0 -0
  563. scipy/special/_ellip_harm_2.cp312-win_amd64.pyd +0 -0
  564. scipy/special/_gufuncs.cp312-win_amd64.dll.a +0 -0
  565. scipy/special/_gufuncs.cp312-win_amd64.pyd +0 -0
  566. scipy/special/_logsumexp.py +67 -58
  567. scipy/special/_orthogonal.pyi +1 -1
  568. scipy/special/_specfun.cp312-win_amd64.dll.a +0 -0
  569. scipy/special/_specfun.cp312-win_amd64.pyd +0 -0
  570. scipy/special/_special_ufuncs.cp312-win_amd64.dll.a +0 -0
  571. scipy/special/_special_ufuncs.cp312-win_amd64.pyd +0 -0
  572. scipy/special/_spherical_bessel.py +4 -4
  573. scipy/special/_support_alternative_backends.py +212 -119
  574. scipy/special/_test_internal.cp312-win_amd64.dll.a +0 -0
  575. scipy/special/_test_internal.cp312-win_amd64.pyd +0 -0
  576. scipy/special/_testutils.py +4 -4
  577. scipy/special/_ufuncs.cp312-win_amd64.dll.a +0 -0
  578. scipy/special/_ufuncs.cp312-win_amd64.pyd +0 -0
  579. scipy/special/_ufuncs.pyi +1 -0
  580. scipy/special/_ufuncs.pyx +215 -1400
  581. scipy/special/_ufuncs_cxx.cp312-win_amd64.dll.a +0 -0
  582. scipy/special/_ufuncs_cxx.cp312-win_amd64.pyd +0 -0
  583. scipy/special/_ufuncs_cxx.pxd +2 -15
  584. scipy/special/_ufuncs_cxx.pyx +5 -44
  585. scipy/special/_ufuncs_cxx_defs.h +2 -16
  586. scipy/special/_ufuncs_defs.h +0 -8
  587. scipy/special/cython_special.cp312-win_amd64.dll.a +0 -0
  588. scipy/special/cython_special.cp312-win_amd64.pyd +0 -0
  589. scipy/special/cython_special.pxd +1 -1
  590. scipy/special/tests/_cython_examples/meson.build +10 -1
  591. scipy/special/tests/test_basic.py +153 -20
  592. scipy/special/tests/test_boost_ufuncs.py +3 -0
  593. scipy/special/tests/test_cdflib.py +35 -11
  594. scipy/special/tests/test_gammainc.py +16 -0
  595. scipy/special/tests/test_hyp2f1.py +2 -2
  596. scipy/special/tests/test_log1mexp.py +85 -0
  597. scipy/special/tests/test_logsumexp.py +206 -64
  598. scipy/special/tests/test_mpmath.py +1 -0
  599. scipy/special/tests/test_nan_inputs.py +1 -1
  600. scipy/special/tests/test_orthogonal.py +17 -18
  601. scipy/special/tests/test_sf_error.py +3 -2
  602. scipy/special/tests/test_sph_harm.py +6 -7
  603. scipy/special/tests/test_support_alternative_backends.py +211 -76
  604. scipy/stats/__init__.py +4 -1
  605. scipy/stats/_ansari_swilk_statistics.cp312-win_amd64.dll.a +0 -0
  606. scipy/stats/_ansari_swilk_statistics.cp312-win_amd64.pyd +0 -0
  607. scipy/stats/_axis_nan_policy.py +5 -12
  608. scipy/stats/_biasedurn.cp312-win_amd64.dll.a +0 -0
  609. scipy/stats/_biasedurn.cp312-win_amd64.pyd +0 -0
  610. scipy/stats/_continued_fraction.py +387 -0
  611. scipy/stats/_continuous_distns.py +277 -310
  612. scipy/stats/_correlation.py +1 -1
  613. scipy/stats/_covariance.py +6 -3
  614. scipy/stats/_discrete_distns.py +39 -32
  615. scipy/stats/_distn_infrastructure.py +39 -12
  616. scipy/stats/_distribution_infrastructure.py +900 -238
  617. scipy/stats/_entropy.py +9 -10
  618. scipy/{_lib → stats}/_finite_differences.py +1 -1
  619. scipy/stats/_hypotests.py +83 -50
  620. scipy/stats/_kde.py +53 -49
  621. scipy/stats/_ksstats.py +1 -1
  622. scipy/stats/_levy_stable/__init__.py +7 -15
  623. scipy/stats/_levy_stable/levyst.cp312-win_amd64.dll.a +0 -0
  624. scipy/stats/_levy_stable/levyst.cp312-win_amd64.pyd +0 -0
  625. scipy/stats/_morestats.py +118 -73
  626. scipy/stats/_mstats_basic.py +13 -17
  627. scipy/stats/_mstats_extras.py +8 -8
  628. scipy/stats/_multivariate.py +89 -113
  629. scipy/stats/_new_distributions.py +97 -20
  630. scipy/stats/_page_trend_test.py +12 -5
  631. scipy/stats/_probability_distribution.py +265 -43
  632. scipy/stats/_qmc.py +14 -9
  633. scipy/stats/_qmc_cy.cp312-win_amd64.dll.a +0 -0
  634. scipy/stats/_qmc_cy.cp312-win_amd64.pyd +0 -0
  635. scipy/stats/_qmvnt.py +16 -95
  636. scipy/stats/_qmvnt_cy.cp312-win_amd64.dll.a +0 -0
  637. scipy/stats/_qmvnt_cy.cp312-win_amd64.pyd +0 -0
  638. scipy/stats/_quantile.py +335 -0
  639. scipy/stats/_rcont/rcont.cp312-win_amd64.dll.a +0 -0
  640. scipy/stats/_rcont/rcont.cp312-win_amd64.pyd +0 -0
  641. scipy/stats/_resampling.py +4 -29
  642. scipy/stats/_sampling.py +1 -1
  643. scipy/stats/_sobol.cp312-win_amd64.dll.a +0 -0
  644. scipy/stats/_sobol.cp312-win_amd64.pyd +0 -0
  645. scipy/stats/_stats.cp312-win_amd64.dll.a +0 -0
  646. scipy/stats/_stats.cp312-win_amd64.pyd +0 -0
  647. scipy/stats/_stats_mstats_common.py +21 -2
  648. scipy/stats/_stats_py.py +550 -476
  649. scipy/stats/_stats_pythran.cp312-win_amd64.dll.a +0 -0
  650. scipy/stats/_stats_pythran.cp312-win_amd64.pyd +0 -0
  651. scipy/stats/_unuran/unuran_wrapper.cp312-win_amd64.dll.a +0 -0
  652. scipy/stats/_unuran/unuran_wrapper.cp312-win_amd64.pyd +0 -0
  653. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  654. scipy/stats/_variation.py +6 -8
  655. scipy/stats/_wilcoxon.py +13 -7
  656. scipy/stats/tests/common_tests.py +6 -4
  657. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  658. scipy/stats/tests/test_continued_fraction.py +173 -0
  659. scipy/stats/tests/test_continuous.py +379 -60
  660. scipy/stats/tests/test_continuous_basic.py +18 -12
  661. scipy/stats/tests/test_discrete_basic.py +14 -8
  662. scipy/stats/tests/test_discrete_distns.py +16 -16
  663. scipy/stats/tests/test_distributions.py +95 -75
  664. scipy/stats/tests/test_entropy.py +40 -48
  665. scipy/stats/tests/test_fit.py +4 -3
  666. scipy/stats/tests/test_hypotests.py +153 -24
  667. scipy/stats/tests/test_kdeoth.py +109 -41
  668. scipy/stats/tests/test_marray.py +289 -0
  669. scipy/stats/tests/test_morestats.py +79 -47
  670. scipy/stats/tests/test_mstats_basic.py +3 -3
  671. scipy/stats/tests/test_multivariate.py +434 -83
  672. scipy/stats/tests/test_qmc.py +13 -10
  673. scipy/stats/tests/test_quantile.py +199 -0
  674. scipy/stats/tests/test_rank.py +119 -112
  675. scipy/stats/tests/test_resampling.py +47 -56
  676. scipy/stats/tests/test_sampling.py +9 -4
  677. scipy/stats/tests/test_stats.py +799 -939
  678. scipy/stats/tests/test_variation.py +8 -6
  679. scipy/version.py +2 -2
  680. scipy-1.16.0rc2.dist-info/DELVEWHEEL +2 -0
  681. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  682. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  683. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +685 -693
  684. scipy/_lib/array_api_extra/_funcs.py +0 -484
  685. scipy/_lib/array_api_extra/_typing.py +0 -8
  686. scipy/interpolate/_bspl.cp312-win_amd64.dll.a +0 -0
  687. scipy/interpolate/_bspl.cp312-win_amd64.pyd +0 -0
  688. scipy/optimize/_cobyla.cp312-win_amd64.dll.a +0 -0
  689. scipy/optimize/_cobyla.cp312-win_amd64.pyd +0 -0
  690. scipy/optimize/_cython_nnls.cp312-win_amd64.dll.a +0 -0
  691. scipy/optimize/_cython_nnls.cp312-win_amd64.pyd +0 -0
  692. scipy/optimize/_slsqp.cp312-win_amd64.dll.a +0 -0
  693. scipy/optimize/_slsqp.cp312-win_amd64.pyd +0 -0
  694. scipy/spatial/qhull_src/COPYING.txt +0 -38
  695. scipy/special/libsf_error_state.dll +0 -0
  696. scipy/special/libsf_error_state.dll.a +0 -0
  697. scipy/special/tests/test_log_softmax.py +0 -109
  698. scipy/special/tests/test_xsf_cuda.py +0 -114
  699. scipy/special/xsf/binom.h +0 -89
  700. scipy/special/xsf/cdflib.h +0 -100
  701. scipy/special/xsf/cephes/airy.h +0 -307
  702. scipy/special/xsf/cephes/besselpoly.h +0 -51
  703. scipy/special/xsf/cephes/beta.h +0 -257
  704. scipy/special/xsf/cephes/cbrt.h +0 -131
  705. scipy/special/xsf/cephes/chbevl.h +0 -85
  706. scipy/special/xsf/cephes/chdtr.h +0 -193
  707. scipy/special/xsf/cephes/const.h +0 -87
  708. scipy/special/xsf/cephes/ellie.h +0 -293
  709. scipy/special/xsf/cephes/ellik.h +0 -251
  710. scipy/special/xsf/cephes/ellpe.h +0 -107
  711. scipy/special/xsf/cephes/ellpk.h +0 -117
  712. scipy/special/xsf/cephes/expn.h +0 -260
  713. scipy/special/xsf/cephes/gamma.h +0 -398
  714. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  715. scipy/special/xsf/cephes/hyperg.h +0 -361
  716. scipy/special/xsf/cephes/i0.h +0 -149
  717. scipy/special/xsf/cephes/i1.h +0 -158
  718. scipy/special/xsf/cephes/igam.h +0 -421
  719. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  720. scipy/special/xsf/cephes/igami.h +0 -313
  721. scipy/special/xsf/cephes/j0.h +0 -225
  722. scipy/special/xsf/cephes/j1.h +0 -198
  723. scipy/special/xsf/cephes/jv.h +0 -715
  724. scipy/special/xsf/cephes/k0.h +0 -164
  725. scipy/special/xsf/cephes/k1.h +0 -163
  726. scipy/special/xsf/cephes/kn.h +0 -243
  727. scipy/special/xsf/cephes/lanczos.h +0 -112
  728. scipy/special/xsf/cephes/ndtr.h +0 -275
  729. scipy/special/xsf/cephes/poch.h +0 -85
  730. scipy/special/xsf/cephes/polevl.h +0 -167
  731. scipy/special/xsf/cephes/psi.h +0 -194
  732. scipy/special/xsf/cephes/rgamma.h +0 -111
  733. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  734. scipy/special/xsf/cephes/shichi.h +0 -248
  735. scipy/special/xsf/cephes/sici.h +0 -224
  736. scipy/special/xsf/cephes/sindg.h +0 -221
  737. scipy/special/xsf/cephes/tandg.h +0 -139
  738. scipy/special/xsf/cephes/trig.h +0 -58
  739. scipy/special/xsf/cephes/unity.h +0 -186
  740. scipy/special/xsf/cephes/zeta.h +0 -172
  741. scipy/special/xsf/config.h +0 -304
  742. scipy/special/xsf/digamma.h +0 -205
  743. scipy/special/xsf/error.h +0 -57
  744. scipy/special/xsf/evalpoly.h +0 -47
  745. scipy/special/xsf/expint.h +0 -266
  746. scipy/special/xsf/hyp2f1.h +0 -694
  747. scipy/special/xsf/iv_ratio.h +0 -173
  748. scipy/special/xsf/lambertw.h +0 -150
  749. scipy/special/xsf/loggamma.h +0 -163
  750. scipy/special/xsf/sici.h +0 -200
  751. scipy/special/xsf/tools.h +0 -427
  752. scipy/special/xsf/trig.h +0 -164
  753. scipy/special/xsf/wright_bessel.h +0 -843
  754. scipy/special/xsf/zlog1.h +0 -35
  755. scipy/stats/_mvn.cp312-win_amd64.dll.a +0 -0
  756. scipy/stats/_mvn.cp312-win_amd64.pyd +0 -0
  757. scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
  758. /scipy-1.15.3-cp312-cp312-win_amd64.whl → /scipy-1.16.0rc2-cp312-cp312-win_amd64.whl +0 -0
  759. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -1,304 +0,0 @@
1
- #pragma once
2
-
3
- // Define math constants if they are not available
4
- #ifndef M_E
5
- #define M_E 2.71828182845904523536
6
- #endif
7
-
8
- #ifndef M_LOG2E
9
- #define M_LOG2E 1.44269504088896340736
10
- #endif
11
-
12
- #ifndef M_LOG10E
13
- #define M_LOG10E 0.434294481903251827651
14
- #endif
15
-
16
- #ifndef M_LN2
17
- #define M_LN2 0.693147180559945309417
18
- #endif
19
-
20
- #ifndef M_LN10
21
- #define M_LN10 2.30258509299404568402
22
- #endif
23
-
24
- #ifndef M_PI
25
- #define M_PI 3.14159265358979323846
26
- #endif
27
-
28
- #ifndef M_PI_2
29
- #define M_PI_2 1.57079632679489661923
30
- #endif
31
-
32
- #ifndef M_PI_4
33
- #define M_PI_4 0.785398163397448309616
34
- #endif
35
-
36
- #ifndef M_1_PI
37
- #define M_1_PI 0.318309886183790671538
38
- #endif
39
-
40
- #ifndef M_2_PI
41
- #define M_2_PI 0.636619772367581343076
42
- #endif
43
-
44
- #ifndef M_2_SQRTPI
45
- #define M_2_SQRTPI 1.12837916709551257390
46
- #endif
47
-
48
- #ifndef M_SQRT2
49
- #define M_SQRT2 1.41421356237309504880
50
- #endif
51
-
52
- #ifndef M_SQRT1_2
53
- #define M_SQRT1_2 0.707106781186547524401
54
- #endif
55
-
56
- #ifdef __CUDACC__
57
- #define XSF_HOST_DEVICE __host__ __device__
58
-
59
- #include <cuda/std/cmath>
60
- #include <cuda/std/cstddef>
61
- #include <cuda/std/cstdint>
62
- #include <cuda/std/limits>
63
- #include <cuda/std/tuple>
64
- #include <cuda/std/type_traits>
65
- #include <cuda/std/utility>
66
-
67
- // Fallback to global namespace for functions unsupported on NVRTC Jit
68
- #ifdef _LIBCUDACXX_COMPILER_NVRTC
69
- #include <cuda_runtime.h>
70
- #endif
71
-
72
- namespace std {
73
-
74
- XSF_HOST_DEVICE inline double abs(double num) { return cuda::std::abs(num); }
75
-
76
- XSF_HOST_DEVICE inline double exp(double num) { return cuda::std::exp(num); }
77
-
78
- XSF_HOST_DEVICE inline double log(double num) { return cuda::std::log(num); }
79
-
80
- XSF_HOST_DEVICE inline double sqrt(double num) { return cuda::std::sqrt(num); }
81
-
82
- XSF_HOST_DEVICE inline bool isinf(double num) { return cuda::std::isinf(num); }
83
-
84
- XSF_HOST_DEVICE inline bool isnan(double num) { return cuda::std::isnan(num); }
85
-
86
- XSF_HOST_DEVICE inline bool isfinite(double num) { return cuda::std::isfinite(num); }
87
-
88
- XSF_HOST_DEVICE inline double pow(double x, double y) { return cuda::std::pow(x, y); }
89
-
90
- XSF_HOST_DEVICE inline double sin(double x) { return cuda::std::sin(x); }
91
-
92
- XSF_HOST_DEVICE inline double cos(double x) { return cuda::std::cos(x); }
93
-
94
- XSF_HOST_DEVICE inline double tan(double x) { return cuda::std::tan(x); }
95
-
96
- XSF_HOST_DEVICE inline double atan(double x) { return cuda::std::atan(x); }
97
-
98
- XSF_HOST_DEVICE inline double acos(double x) { return cuda::std::acos(x); }
99
-
100
- XSF_HOST_DEVICE inline double sinh(double x) { return cuda::std::sinh(x); }
101
-
102
- XSF_HOST_DEVICE inline double cosh(double x) { return cuda::std::cosh(x); }
103
-
104
- XSF_HOST_DEVICE inline double asinh(double x) { return cuda::std::asinh(x); }
105
-
106
- XSF_HOST_DEVICE inline bool signbit(double x) { return cuda::std::signbit(x); }
107
-
108
- // Fallback to global namespace for functions unsupported on NVRTC
109
- #ifndef _LIBCUDACXX_COMPILER_NVRTC
110
- XSF_HOST_DEVICE inline double ceil(double x) { return cuda::std::ceil(x); }
111
- XSF_HOST_DEVICE inline double floor(double x) { return cuda::std::floor(x); }
112
- XSF_HOST_DEVICE inline double round(double x) { return cuda::std::round(x); }
113
- XSF_HOST_DEVICE inline double trunc(double x) { return cuda::std::trunc(x); }
114
- XSF_HOST_DEVICE inline double fma(double x, double y, double z) { return cuda::std::fma(x, y, z); }
115
- XSF_HOST_DEVICE inline double copysign(double x, double y) { return cuda::std::copysign(x, y); }
116
- XSF_HOST_DEVICE inline double modf(double value, double *iptr) { return cuda::std::modf(value, iptr); }
117
- XSF_HOST_DEVICE inline double fmax(double x, double y) { return cuda::std::fmax(x, y); }
118
- XSF_HOST_DEVICE inline double fmin(double x, double y) { return cuda::std::fmin(x, y); }
119
- XSF_HOST_DEVICE inline double log10(double num) { return cuda::std::log10(num); }
120
- XSF_HOST_DEVICE inline double log1p(double num) { return cuda::std::log1p(num); }
121
- XSF_HOST_DEVICE inline double frexp(double num, int *exp) { return cuda::std::frexp(num, exp); }
122
- XSF_HOST_DEVICE inline double ldexp(double num, int exp) { return cuda::std::ldexp(num, exp); }
123
- XSF_HOST_DEVICE inline double fmod(double x, double y) { return cuda::std::fmod(x, y); }
124
- XSF_HOST_DEVICE inline double nextafter(double from, double to) { return cuda::std::nextafter(from, to); }
125
- #else
126
- XSF_HOST_DEVICE inline double ceil(double x) { return ::ceil(x); }
127
- XSF_HOST_DEVICE inline double floor(double x) { return ::floor(x); }
128
- XSF_HOST_DEVICE inline double round(double x) { return ::round(x); }
129
- XSF_HOST_DEVICE inline double trunc(double x) { return ::trunc(x); }
130
- XSF_HOST_DEVICE inline double fma(double x, double y, double z) { return ::fma(x, y, z); }
131
- XSF_HOST_DEVICE inline double copysign(double x, double y) { return ::copysign(x, y); }
132
- XSF_HOST_DEVICE inline double modf(double value, double *iptr) { return ::modf(value, iptr); }
133
- XSF_HOST_DEVICE inline double fmax(double x, double y) { return ::fmax(x, y); }
134
- XSF_HOST_DEVICE inline double fmin(double x, double y) { return ::fmin(x, y); }
135
- XSF_HOST_DEVICE inline double log10(double num) { return ::log10(num); }
136
- XSF_HOST_DEVICE inline double log1p(double num) { return ::log1p(num); }
137
- XSF_HOST_DEVICE inline double frexp(double num, int *exp) { return ::frexp(num, exp); }
138
- XSF_HOST_DEVICE inline double ldexp(double num, int exp) { return ::ldexp(num, exp); }
139
- XSF_HOST_DEVICE inline double fmod(double x, double y) { return ::fmod(x, y); }
140
- XSF_HOST_DEVICE inline double nextafter(double from, double to) { return ::nextafter(from, to); }
141
- #endif
142
-
143
- template <typename T>
144
- XSF_HOST_DEVICE void swap(T &a, T &b) {
145
- cuda::std::swap(a, b);
146
- }
147
-
148
- // Reimplement std::clamp until it's available in CuPy
149
- template <typename T>
150
- XSF_HOST_DEVICE constexpr T clamp(T &v, T &lo, T &hi) {
151
- return v < lo ? lo : (v > hi ? lo : v);
152
- }
153
-
154
- template <typename T>
155
- using numeric_limits = cuda::std::numeric_limits<T>;
156
-
157
- // Must use thrust for complex types in order to support CuPy
158
- template <typename T>
159
- using complex = thrust::complex<T>;
160
-
161
- template <typename T>
162
- XSF_HOST_DEVICE T abs(const complex<T> &z) {
163
- return thrust::abs(z);
164
- }
165
-
166
- template <typename T>
167
- XSF_HOST_DEVICE complex<T> exp(const complex<T> &z) {
168
- return thrust::exp(z);
169
- }
170
-
171
- template <typename T>
172
- XSF_HOST_DEVICE complex<T> log(const complex<T> &z) {
173
- return thrust::log(z);
174
- }
175
-
176
- template <typename T>
177
- XSF_HOST_DEVICE T norm(const complex<T> &z) {
178
- return thrust::norm(z);
179
- }
180
-
181
- template <typename T>
182
- XSF_HOST_DEVICE complex<T> sqrt(const complex<T> &z) {
183
- return thrust::sqrt(z);
184
- }
185
-
186
- template <typename T>
187
- XSF_HOST_DEVICE complex<T> conj(const complex<T> &z) {
188
- return thrust::conj(z);
189
- }
190
-
191
- template <typename T>
192
- XSF_HOST_DEVICE complex<T> pow(const complex<T> &x, const complex<T> &y) {
193
- return thrust::pow(x, y);
194
- }
195
-
196
- template <typename T>
197
- XSF_HOST_DEVICE complex<T> pow(const complex<T> &x, const T &y) {
198
- return thrust::pow(x, y);
199
- }
200
-
201
- // Other types and utilities
202
- template <typename T>
203
- using is_floating_point = cuda::std::is_floating_point<T>;
204
-
205
- template <bool Cond, typename T = void>
206
- using enable_if = cuda::std::enable_if<Cond, T>;
207
-
208
- template <typename T>
209
- using decay = cuda::std::decay<T>;
210
-
211
- template <typename T>
212
- using invoke_result = cuda::std::invoke_result<T>;
213
-
214
- template <typename T1, typename T2>
215
- using pair = cuda::std::pair<T1, T2>;
216
-
217
- template <typename... Types>
218
- using tuple = cuda::std::tuple<Types...>;
219
-
220
- using cuda::std::ptrdiff_t;
221
- using cuda::std::size_t;
222
- using cuda::std::uint64_t;
223
-
224
- #define XSF_ASSERT(a)
225
-
226
- } // namespace std
227
-
228
- #else
229
- #define XSF_HOST_DEVICE
230
-
231
- #include <algorithm>
232
- #include <cassert>
233
- #include <cmath>
234
- #include <complex>
235
- #include <cstddef>
236
- #include <cstdint>
237
- #include <iterator>
238
- #include <limits>
239
- #include <math.h>
240
- #include <tuple>
241
- #include <type_traits>
242
- #include <utility>
243
-
244
- #ifdef DEBUG
245
- #define XSF_ASSERT(a) assert(a)
246
- #else
247
- #define XSF_ASSERT(a)
248
- #endif
249
-
250
- namespace xsf {
251
-
252
- // basic
253
- using std::abs;
254
-
255
- // exponential
256
- using std::exp;
257
-
258
- // power
259
- using std::sqrt;
260
-
261
- // trigonometric
262
- using std::cos;
263
- using std::sin;
264
-
265
- // floating-point manipulation
266
- using std::copysign;
267
-
268
- // classification and comparison
269
- using std::isfinite;
270
- using std::isinf;
271
- using std::isnan;
272
- using std::signbit;
273
-
274
- // complex
275
- using std::imag;
276
- using std::real;
277
-
278
- template <typename T>
279
- struct remove_complex {
280
- using type = T;
281
- };
282
-
283
- template <typename T>
284
- struct remove_complex<std::complex<T>> {
285
- using type = T;
286
- };
287
-
288
- template <typename T>
289
- using remove_complex_t = typename remove_complex<T>::type;
290
-
291
- template <typename T>
292
- struct complex_type {
293
- using type = std::complex<T>;
294
- };
295
-
296
- template <typename T>
297
- using complex_type_t = typename complex_type<T>::type;
298
-
299
- template <typename T>
300
- using complex = complex_type_t<T>;
301
-
302
- } // namespace xsf
303
-
304
- #endif
@@ -1,205 +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 digamma function for complex arguments.
6
- *
7
- * Author: Josh Wilson
8
- *
9
- * Distributed under the same license as Scipy.
10
- *
11
- * Sources:
12
- * [1] "The Digital Library of Mathematical Functions", dlmf.nist.gov
13
- *
14
- * [2] mpmath (version 0.19), http://mpmath.org
15
- */
16
-
17
- #pragma once
18
-
19
- #include "cephes/psi.h"
20
- #include "cephes/zeta.h"
21
- #include "config.h"
22
- #include "error.h"
23
- #include "trig.h"
24
-
25
- namespace xsf {
26
- namespace detail {
27
- // All of the following were computed with mpmath
28
- // Location of the positive root
29
- constexpr double digamma_posroot = 1.4616321449683623;
30
- // Value of the positive root
31
- constexpr double digamma_posrootval = -9.2412655217294275e-17;
32
- // Location of the negative root
33
- constexpr double digamma_negroot = -0.504083008264455409;
34
- // Value of the negative root
35
- constexpr double digamma_negrootval = 7.2897639029768949e-17;
36
-
37
- template <typename T>
38
- XSF_HOST_DEVICE T digamma_zeta_series(T z, double root, double rootval) {
39
- T res = rootval;
40
- T coeff = -1.0;
41
-
42
- z = z - root;
43
- T term;
44
- for (int n = 1; n < 100; n++) {
45
- coeff *= -z;
46
- term = coeff * cephes::zeta(n + 1, root);
47
- res += term;
48
- if (std::abs(term) < std::numeric_limits<double>::epsilon() * std::abs(res)) {
49
- break;
50
- }
51
- }
52
- return res;
53
- }
54
-
55
- XSF_HOST_DEVICE inline std::complex<double>
56
- digamma_forward_recurrence(std::complex<double> z, std::complex<double> psiz, int n) {
57
- /* Compute digamma(z + n) using digamma(z) using the recurrence
58
- * relation
59
- *
60
- * digamma(z + 1) = digamma(z) + 1/z.
61
- *
62
- * See https://dlmf.nist.gov/5.5#E2 */
63
- std::complex<double> res = psiz;
64
-
65
- for (int k = 0; k < n; k++) {
66
- res += 1.0 / (z + static_cast<double>(k));
67
- }
68
- return res;
69
- }
70
-
71
- XSF_HOST_DEVICE inline std::complex<double>
72
- digamma_backward_recurrence(std::complex<double> z, std::complex<double> psiz, int n) {
73
- /* Compute digamma(z - n) using digamma(z) and a recurrence relation. */
74
- std::complex<double> res = psiz;
75
-
76
- for (int k = 1; k < n + 1; k++) {
77
- res -= 1.0 / (z - static_cast<double>(k));
78
- }
79
- return res;
80
- }
81
-
82
- XSF_HOST_DEVICE inline std::complex<double> digamma_asymptotic_series(std::complex<double> z) {
83
- /* Evaluate digamma using an asymptotic series. See
84
- *
85
- * https://dlmf.nist.gov/5.11#E2 */
86
- double bernoulli2k[] = {0.166666666666666667, -0.0333333333333333333, 0.0238095238095238095,
87
- -0.0333333333333333333, 0.0757575757575757576, -0.253113553113553114,
88
- 1.16666666666666667, -7.09215686274509804, 54.9711779448621554,
89
- -529.124242424242424, 6192.12318840579710, -86580.2531135531136,
90
- 1425517.16666666667, -27298231.0678160920, 601580873.900642368,
91
- -15116315767.0921569};
92
- std::complex<double> rzz = 1.0 / z / z;
93
- std::complex<double> zfac = 1.0;
94
- std::complex<double> term;
95
- std::complex<double> res;
96
-
97
- if (!(std::isfinite(z.real()) && std::isfinite(z.imag()))) {
98
- /* Check for infinity (or nan) and return early.
99
- * Result of division by complex infinity is implementation dependent.
100
- * and has been observed to vary between C++ stdlib and CUDA stdlib.
101
- */
102
- return std::log(z);
103
- }
104
-
105
- res = std::log(z) - 0.5 / z;
106
-
107
- for (int k = 1; k < 17; k++) {
108
- zfac *= rzz;
109
- term = -bernoulli2k[k - 1] * zfac / (2 * static_cast<double>(k));
110
- res += term;
111
- if (std::abs(term) < std::numeric_limits<double>::epsilon() * std::abs(res)) {
112
- break;
113
- }
114
- }
115
- return res;
116
- }
117
-
118
- } // namespace detail
119
-
120
- XSF_HOST_DEVICE inline double digamma(double z) {
121
- /* Wrap Cephes' psi to take advantage of the series expansion around
122
- * the smallest negative zero.
123
- */
124
- if (std::abs(z - detail::digamma_negroot) < 0.3) {
125
- return detail::digamma_zeta_series(z, detail::digamma_negroot, detail::digamma_negrootval);
126
- }
127
- return cephes::psi(z);
128
- }
129
-
130
- XSF_HOST_DEVICE inline float digamma(float z) { return static_cast<float>(digamma(static_cast<double>(z))); }
131
-
132
- XSF_HOST_DEVICE inline std::complex<double> digamma(std::complex<double> z) {
133
- /*
134
- * Compute the digamma function for complex arguments. The strategy
135
- * is:
136
- *
137
- * - Around the two zeros closest to the origin (posroot and negroot)
138
- * use a Taylor series with precomputed zero order coefficient.
139
- * - If close to the origin, use a recurrence relation to step away
140
- * from the origin.
141
- * - If close to the negative real axis, use the reflection formula
142
- * to move to the right halfplane.
143
- * - If |z| is large (> 16), use the asymptotic series.
144
- * - If |z| is small, use a recurrence relation to make |z| large
145
- * enough to use the asymptotic series.
146
- */
147
- double absz = std::abs(z);
148
- std::complex<double> res = 0;
149
- /* Use the asymptotic series for z away from the negative real axis
150
- * with abs(z) > smallabsz. */
151
- int smallabsz = 16;
152
- /* Use the reflection principle for z with z.real < 0 that are within
153
- * smallimag of the negative real axis.
154
- * int smallimag = 6 # unused below except in a comment */
155
-
156
- if (z.real() <= 0.0 && std::ceil(z.real()) == z) {
157
- // Poles
158
- set_error("digamma", SF_ERROR_SINGULAR, NULL);
159
- return {std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::quiet_NaN()};
160
- }
161
- if (std::abs(z - detail::digamma_negroot) < 0.3) {
162
- // First negative root.
163
- return detail::digamma_zeta_series(z, detail::digamma_negroot, detail::digamma_negrootval);
164
- }
165
-
166
- if (z.real() < 0 and std::abs(z.imag()) < smallabsz) {
167
- /* Reflection formula for digamma. See
168
- *
169
- *https://dlmf.nist.gov/5.5#E4
170
- */
171
- res = -M_PI * cospi(z) / sinpi(z);
172
- z = 1.0 - z;
173
- absz = std::abs(z);
174
- }
175
-
176
- if (absz < 0.5) {
177
- /* Use one step of the recurrence relation to step away from
178
- * the pole. */
179
- res = -1.0 / z;
180
- z += 1.0;
181
- absz = std::abs(z);
182
- }
183
-
184
- if (std::abs(z - detail::digamma_posroot) < 0.5) {
185
- res += detail::digamma_zeta_series(z, detail::digamma_posroot, detail::digamma_posrootval);
186
- } else if (absz > smallabsz) {
187
- res += detail::digamma_asymptotic_series(z);
188
- } else if (z.real() >= 0.0) {
189
- double n = std::trunc(smallabsz - absz) + 1;
190
- std::complex<double> init = detail::digamma_asymptotic_series(z + n);
191
- res += detail::digamma_backward_recurrence(z + n, init, n);
192
- } else {
193
- // z.real() < 0, absz < smallabsz, and z.imag() > smallimag
194
- double n = std::trunc(smallabsz - absz) - 1;
195
- std::complex<double> init = detail::digamma_asymptotic_series(z - n);
196
- res += detail::digamma_forward_recurrence(z - n, init, n);
197
- }
198
- return res;
199
- }
200
-
201
- XSF_HOST_DEVICE inline std::complex<float> digamma(std::complex<float> z) {
202
- return static_cast<std::complex<float>>(digamma(static_cast<std::complex<double>>(z)));
203
- }
204
-
205
- } // namespace xsf
scipy/special/xsf/error.h DELETED
@@ -1,57 +0,0 @@
1
- #pragma once
2
-
3
- typedef enum {
4
- SF_ERROR_OK = 0, /* no error */
5
- SF_ERROR_SINGULAR, /* singularity encountered */
6
- SF_ERROR_UNDERFLOW, /* floating point underflow */
7
- SF_ERROR_OVERFLOW, /* floating point overflow */
8
- SF_ERROR_SLOW, /* too many iterations required */
9
- SF_ERROR_LOSS, /* loss of precision */
10
- SF_ERROR_NO_RESULT, /* no result obtained */
11
- SF_ERROR_DOMAIN, /* out of domain */
12
- SF_ERROR_ARG, /* invalid input parameter */
13
- SF_ERROR_OTHER, /* unclassified error */
14
- SF_ERROR_MEMORY, /* memory allocation failed */
15
- SF_ERROR__LAST
16
- } sf_error_t;
17
-
18
- #ifdef __cplusplus
19
-
20
- #include "config.h"
21
-
22
- namespace xsf {
23
-
24
- #ifndef SP_SPECFUN_ERROR
25
- XSF_HOST_DEVICE inline void set_error(const char *func_name, sf_error_t code, const char *fmt, ...) {
26
- // nothing
27
- }
28
- #else
29
- void set_error(const char *func_name, sf_error_t code, const char *fmt, ...);
30
- #endif
31
-
32
- template <typename T>
33
- XSF_HOST_DEVICE void set_error_and_nan(const char *name, sf_error_t code, T &value) {
34
- if (code != SF_ERROR_OK) {
35
- set_error(name, code, nullptr);
36
-
37
- if (code == SF_ERROR_DOMAIN || code == SF_ERROR_OVERFLOW || code == SF_ERROR_NO_RESULT) {
38
- value = std::numeric_limits<T>::quiet_NaN();
39
- }
40
- }
41
- }
42
-
43
- template <typename T>
44
- XSF_HOST_DEVICE void set_error_and_nan(const char *name, sf_error_t code, std::complex<T> &value) {
45
- if (code != SF_ERROR_OK) {
46
- set_error(name, code, nullptr);
47
-
48
- if (code == SF_ERROR_DOMAIN || code == SF_ERROR_OVERFLOW || code == SF_ERROR_NO_RESULT) {
49
- value.real(std::numeric_limits<T>::quiet_NaN());
50
- value.imag(std::numeric_limits<T>::quiet_NaN());
51
- }
52
- }
53
- }
54
-
55
- } // namespace xsf
56
-
57
- #endif
@@ -1,47 +0,0 @@
1
- /* Translated from Cython into C++ by SciPy developers in 2024.
2
- *
3
- * Original author: Josh Wilson, 2016.
4
- */
5
-
6
- /* Evaluate polynomials.
7
- *
8
- * All of the coefficients are stored in reverse order, i.e. if the
9
- * polynomial is
10
- *
11
- * u_n x^n + u_{n - 1} x^{n - 1} + ... + u_0,
12
- *
13
- * then coeffs[0] = u_n, coeffs[1] = u_{n - 1}, ..., coeffs[n] = u_0.
14
- *
15
- * References
16
- * ----------
17
- * [1] Knuth, "The Art of Computer Programming, Volume II"
18
- */
19
-
20
- #pragma once
21
-
22
- #include "config.h"
23
-
24
- namespace xsf {
25
-
26
- XSF_HOST_DEVICE inline std::complex<double> cevalpoly(const double *coeffs, int degree, std::complex<double> z) {
27
- /* Evaluate a polynomial with real coefficients at a complex point.
28
- *
29
- * Uses equation (3) in section 4.6.4 of [1]. Note that it is more
30
- * efficient than Horner's method.
31
- */
32
- double a = coeffs[0];
33
- double b = coeffs[1];
34
- double r = 2 * z.real();
35
- double s = std::norm(z);
36
- double tmp;
37
-
38
- for (int j = 2; j < degree + 1; j++) {
39
- tmp = b;
40
- b = std::fma(-s, a, coeffs[j]);
41
- a = std::fma(r, a, tmp);
42
- }
43
-
44
- return z * a + b;
45
- }
46
-
47
- } // namespace xsf