scipy 1.15.3__cp313-cp313t-win_amd64.whl → 1.16.0rc1__cp313-cp313t-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 (758) hide show
  1. scipy/__config__.py +7 -7
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cp313t-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  9. scipy/_lib/_ccallback_c.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  13. scipy/_lib/_fpumode.cp313t-win_amd64.pyd +0 -0
  14. scipy/_lib/_sparse.py +41 -0
  15. scipy/_lib/_test_ccallback.cp313t-win_amd64.dll.a +0 -0
  16. scipy/_lib/_test_ccallback.cp313t-win_amd64.pyd +0 -0
  17. scipy/_lib/_test_deprecation_call.cp313t-win_amd64.dll.a +0 -0
  18. scipy/_lib/_test_deprecation_call.cp313t-win_amd64.pyd +0 -0
  19. scipy/_lib/_test_deprecation_def.cp313t-win_amd64.dll.a +0 -0
  20. scipy/_lib/_test_deprecation_def.cp313t-win_amd64.pyd +0 -0
  21. scipy/_lib/_testutils.py +6 -2
  22. scipy/_lib/_uarray/_uarray.cp313t-win_amd64.dll.a +0 -0
  23. scipy/_lib/_uarray/_uarray.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  72. scipy/_lib/messagestream.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  105. scipy/cluster/_hierarchy.cp313t-win_amd64.pyd +0 -0
  106. scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.dll.a +0 -0
  107. scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.pyd +0 -0
  108. scipy/cluster/_vq.cp313t-win_amd64.dll.a +0 -0
  109. scipy/cluster/_vq.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  127. scipy/fft/_pocketfft/pypocketfft.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  136. scipy/fftpack/convolve.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  142. scipy/integrate/_dop.cp313t-win_amd64.pyd +0 -0
  143. scipy/integrate/_lsoda.cp313t-win_amd64.dll.a +0 -0
  144. scipy/integrate/_lsoda.cp313t-win_amd64.pyd +0 -0
  145. scipy/integrate/_ode.py +9 -2
  146. scipy/integrate/_odepack.cp313t-win_amd64.dll.a +0 -0
  147. scipy/integrate/_odepack.cp313t-win_amd64.pyd +0 -0
  148. scipy/integrate/_quad_vec.py +21 -29
  149. scipy/integrate/_quadpack.cp313t-win_amd64.dll.a +0 -0
  150. scipy/integrate/_quadpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  156. scipy/integrate/_test_multivariate.cp313t-win_amd64.pyd +0 -0
  157. scipy/integrate/_test_odeint_banded.cp313t-win_amd64.dll.a +0 -0
  158. scipy/integrate/_test_odeint_banded.cp313t-win_amd64.pyd +0 -0
  159. scipy/integrate/_vode.cp313t-win_amd64.dll.a +0 -0
  160. scipy/integrate/_vode.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  171. scipy/interpolate/_dfitpack.cp313t-win_amd64.pyd +0 -0
  172. scipy/interpolate/_dierckx.cp313t-win_amd64.dll.a +0 -0
  173. scipy/interpolate/_dierckx.cp313t-win_amd64.pyd +0 -0
  174. scipy/interpolate/_fitpack.cp313t-win_amd64.dll.a +0 -0
  175. scipy/interpolate/_fitpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  180. scipy/interpolate/_interpnd.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  186. scipy/interpolate/_ppoly.cp313t-win_amd64.pyd +0 -0
  187. scipy/interpolate/_rbf.py +2 -2
  188. scipy/interpolate/_rbfinterp.py +1 -1
  189. scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.dll.a +0 -0
  190. scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.pyd +0 -0
  191. scipy/interpolate/_rgi.py +31 -26
  192. scipy/interpolate/_rgi_cython.cp313t-win_amd64.dll.a +0 -0
  193. scipy/interpolate/_rgi_cython.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  204. scipy/io/_fast_matrix_market/_fmm_core.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  210. scipy/io/_test_fortran.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  216. scipy/io/matlab/_mio5_utils.cp313t-win_amd64.pyd +0 -0
  217. scipy/io/matlab/_mio_utils.cp313t-win_amd64.dll.a +0 -0
  218. scipy/io/matlab/_mio_utils.cp313t-win_amd64.pyd +0 -0
  219. scipy/io/matlab/_miobase.py +4 -1
  220. scipy/io/matlab/_streams.cp313t-win_amd64.dll.a +0 -0
  221. scipy/io/matlab/_streams.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  229. scipy/linalg/_cythonized_array_utils.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  234. scipy/linalg/_decomp_interpolative.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  238. scipy/linalg/_decomp_lu_cython.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  245. scipy/linalg/_decomp_update.cp313t-win_amd64.pyd +0 -0
  246. scipy/linalg/_expm_frechet.py +4 -0
  247. scipy/linalg/_fblas.cp313t-win_amd64.dll.a +0 -0
  248. scipy/linalg/_fblas.cp313t-win_amd64.pyd +0 -0
  249. scipy/linalg/_flapack.cp313t-win_amd64.dll.a +0 -0
  250. scipy/linalg/_flapack.cp313t-win_amd64.pyd +0 -0
  251. scipy/linalg/_linalg_pythran.cp313t-win_amd64.dll.a +0 -0
  252. scipy/linalg/_linalg_pythran.cp313t-win_amd64.pyd +0 -0
  253. scipy/linalg/_matfuncs.py +187 -4
  254. scipy/linalg/_matfuncs_expm.cp313t-win_amd64.dll.a +0 -0
  255. scipy/linalg/_matfuncs_expm.cp313t-win_amd64.pyd +0 -0
  256. scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.dll.a +0 -0
  257. scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.pyd +0 -0
  258. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  259. scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.dll.a +0 -0
  260. scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.pyd +0 -0
  261. scipy/linalg/_procrustes.py +2 -0
  262. scipy/linalg/_sketches.py +17 -6
  263. scipy/linalg/_solve_toeplitz.cp313t-win_amd64.dll.a +0 -0
  264. scipy/linalg/_solve_toeplitz.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  268. scipy/linalg/cython_blas.cp313t-win_amd64.pyd +0 -0
  269. scipy/linalg/cython_lapack.cp313t-win_amd64.dll.a +0 -0
  270. scipy/linalg/cython_lapack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  286. scipy/ndimage/_ctest.cp313t-win_amd64.pyd +0 -0
  287. scipy/ndimage/_cytest.cp313t-win_amd64.dll.a +0 -0
  288. scipy/ndimage/_cytest.cp313t-win_amd64.pyd +0 -0
  289. scipy/ndimage/_delegators.py +8 -2
  290. scipy/ndimage/_filters.py +433 -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.cp313t-win_amd64.dll.a +0 -0
  295. scipy/ndimage/_nd_image.cp313t-win_amd64.pyd +0 -0
  296. scipy/ndimage/_ni_docstrings.py +5 -1
  297. scipy/ndimage/_ni_label.cp313t-win_amd64.dll.a +0 -0
  298. scipy/ndimage/_ni_label.cp313t-win_amd64.pyd +0 -0
  299. scipy/ndimage/_ni_support.py +1 -5
  300. scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.dll.a +0 -0
  301. scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.pyd +0 -0
  302. scipy/ndimage/_support_alternative_backends.py +18 -6
  303. scipy/ndimage/tests/test_filters.py +337 -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.cp313t-win_amd64.dll.a +0 -0
  310. scipy/odr/__odrpack.cp313t-win_amd64.pyd +0 -0
  311. scipy/optimize/_basinhopping.py +13 -7
  312. scipy/optimize/_bglu_dense.cp313t-win_amd64.dll.a +0 -0
  313. scipy/optimize/_bglu_dense.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  321. scipy/optimize/_direct.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  325. scipy/optimize/_group_columns.cp313t-win_amd64.pyd +0 -0
  326. scipy/optimize/_highspy/_core.cp313t-win_amd64.dll.a +0 -0
  327. scipy/optimize/_highspy/_core.cp313t-win_amd64.pyd +0 -0
  328. scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.dll.a +0 -0
  329. scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.pyd +0 -0
  330. scipy/optimize/_lbfgsb.cp313t-win_amd64.dll.a +0 -0
  331. scipy/optimize/_lbfgsb.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  338. scipy/optimize/_lsap.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  342. scipy/optimize/_lsq/givens_elimination.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  349. scipy/optimize/_minpack.cp313t-win_amd64.pyd +0 -0
  350. scipy/optimize/_minpack_py.py +21 -14
  351. scipy/optimize/_moduleTNC.cp313t-win_amd64.dll.a +0 -0
  352. scipy/optimize/_moduleTNC.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  358. scipy/optimize/_pava_pybind.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  365. scipy/optimize/_slsqplib.cp313t-win_amd64.pyd +0 -0
  366. scipy/optimize/_spectral.py +1 -1
  367. scipy/optimize/_tnc.py +8 -1
  368. scipy/optimize/_trlib/_trlib.cp313t-win_amd64.dll.a +0 -0
  369. scipy/optimize/_trlib/_trlib.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  381. scipy/optimize/_zeros.cp313t-win_amd64.pyd +0 -0
  382. scipy/optimize/_zeros_py.py +97 -17
  383. scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.dll.a +0 -0
  384. scipy/optimize/cython_optimize/_zeros.cp313t-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 +5 -5
  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.cp313t-win_amd64.dll.a +0 -0
  416. scipy/signal/_max_len_seq_inner.cp313t-win_amd64.pyd +0 -0
  417. scipy/signal/_peak_finding_utils.cp313t-win_amd64.dll.a +0 -0
  418. scipy/signal/_peak_finding_utils.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  424. scipy/signal/_sigtools.cp313t-win_amd64.pyd +0 -0
  425. scipy/signal/_sosfilt.cp313t-win_amd64.dll.a +0 -0
  426. scipy/signal/_sosfilt.cp313t-win_amd64.pyd +0 -0
  427. scipy/signal/_spectral_py.py +221 -50
  428. scipy/signal/_spline.cp313t-win_amd64.dll.a +0 -0
  429. scipy/signal/_spline.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  434. scipy/signal/_upfirdn_apply.cp313t-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 +19 -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.cp313t-win_amd64.dll.a +0 -0
  461. scipy/sparse/_csparsetools.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  469. scipy/sparse/_sparsetools.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  478. scipy/sparse/csgraph/_flow.cp313t-win_amd64.pyd +0 -0
  479. scipy/sparse/csgraph/_matching.cp313t-win_amd64.dll.a +0 -0
  480. scipy/sparse/csgraph/_matching.cp313t-win_amd64.pyd +0 -0
  481. scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.dll.a +0 -0
  482. scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.pyd +0 -0
  483. scipy/sparse/csgraph/_reordering.cp313t-win_amd64.dll.a +0 -0
  484. scipy/sparse/csgraph/_reordering.cp313t-win_amd64.pyd +0 -0
  485. scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.dll.a +0 -0
  486. scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.pyd +0 -0
  487. scipy/sparse/csgraph/_tools.cp313t-win_amd64.dll.a +0 -0
  488. scipy/sparse/csgraph/_tools.cp313t-win_amd64.pyd +0 -0
  489. scipy/sparse/csgraph/_traversal.cp313t-win_amd64.dll.a +0 -0
  490. scipy/sparse/csgraph/_traversal.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  499. scipy/sparse/linalg/_dsolve/_superlu.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  503. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  516. scipy/sparse/linalg/_propack/_cpropack.cp313t-win_amd64.pyd +0 -0
  517. scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.dll.a +0 -0
  518. scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.pyd +0 -0
  519. scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.dll.a +0 -0
  520. scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.pyd +0 -0
  521. scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.dll.a +0 -0
  522. scipy/sparse/linalg/_propack/_zpropack.cp313t-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 +207 -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.cp313t-win_amd64.dll.a +0 -0
  533. scipy/spatial/_ckdtree.cp313t-win_amd64.pyd +0 -0
  534. scipy/spatial/_distance_pybind.cp313t-win_amd64.dll.a +0 -0
  535. scipy/spatial/_distance_pybind.cp313t-win_amd64.pyd +0 -0
  536. scipy/spatial/_distance_wrap.cp313t-win_amd64.dll.a +0 -0
  537. scipy/spatial/_distance_wrap.cp313t-win_amd64.pyd +0 -0
  538. scipy/spatial/_hausdorff.cp313t-win_amd64.dll.a +0 -0
  539. scipy/spatial/_hausdorff.cp313t-win_amd64.pyd +0 -0
  540. scipy/spatial/_qhull.cp313t-win_amd64.dll.a +0 -0
  541. scipy/spatial/_qhull.cp313t-win_amd64.pyd +0 -0
  542. scipy/spatial/_voronoi.cp313t-win_amd64.dll.a +0 -0
  543. scipy/spatial/_voronoi.cp313t-win_amd64.pyd +0 -0
  544. scipy/spatial/distance.py +49 -42
  545. scipy/spatial/tests/test_distance.py +3 -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.cp313t-win_amd64.dll.a +0 -0
  550. scipy/spatial/transform/_rigid_transform.cp313t-win_amd64.pyd +0 -0
  551. scipy/spatial/transform/_rotation.cp313t-win_amd64.dll.a +0 -0
  552. scipy/spatial/transform/_rotation.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  561. scipy/special/_comb.cp313t-win_amd64.pyd +0 -0
  562. scipy/special/_ellip_harm_2.cp313t-win_amd64.dll.a +0 -0
  563. scipy/special/_ellip_harm_2.cp313t-win_amd64.pyd +0 -0
  564. scipy/special/_gufuncs.cp313t-win_amd64.dll.a +0 -0
  565. scipy/special/_gufuncs.cp313t-win_amd64.pyd +0 -0
  566. scipy/special/_logsumexp.py +67 -58
  567. scipy/special/_orthogonal.pyi +1 -1
  568. scipy/special/_specfun.cp313t-win_amd64.dll.a +0 -0
  569. scipy/special/_specfun.cp313t-win_amd64.pyd +0 -0
  570. scipy/special/_special_ufuncs.cp313t-win_amd64.dll.a +0 -0
  571. scipy/special/_special_ufuncs.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  575. scipy/special/_test_internal.cp313t-win_amd64.pyd +0 -0
  576. scipy/special/_testutils.py +4 -4
  577. scipy/special/_ufuncs.cp313t-win_amd64.dll.a +0 -0
  578. scipy/special/_ufuncs.cp313t-win_amd64.pyd +0 -0
  579. scipy/special/_ufuncs.pyi +1 -0
  580. scipy/special/_ufuncs.pyx +215 -1400
  581. scipy/special/_ufuncs_cxx.cp313t-win_amd64.dll.a +0 -0
  582. scipy/special/_ufuncs_cxx.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  588. scipy/special/cython_special.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  606. scipy/stats/_ansari_swilk_statistics.cp313t-win_amd64.pyd +0 -0
  607. scipy/stats/_axis_nan_policy.py +4 -3
  608. scipy/stats/_biasedurn.cp313t-win_amd64.dll.a +0 -0
  609. scipy/stats/_biasedurn.cp313t-win_amd64.pyd +0 -0
  610. scipy/stats/_continued_fraction.py +387 -0
  611. scipy/stats/_continuous_distns.py +277 -310
  612. scipy/stats/_covariance.py +6 -3
  613. scipy/stats/_discrete_distns.py +39 -32
  614. scipy/stats/_distn_infrastructure.py +39 -12
  615. scipy/stats/_distribution_infrastructure.py +900 -238
  616. scipy/stats/_entropy.py +7 -8
  617. scipy/{_lib → stats}/_finite_differences.py +1 -1
  618. scipy/stats/_hypotests.py +82 -49
  619. scipy/stats/_kde.py +53 -49
  620. scipy/stats/_ksstats.py +1 -1
  621. scipy/stats/_levy_stable/__init__.py +7 -15
  622. scipy/stats/_levy_stable/levyst.cp313t-win_amd64.dll.a +0 -0
  623. scipy/stats/_levy_stable/levyst.cp313t-win_amd64.pyd +0 -0
  624. scipy/stats/_morestats.py +112 -67
  625. scipy/stats/_mstats_basic.py +13 -17
  626. scipy/stats/_mstats_extras.py +8 -8
  627. scipy/stats/_multivariate.py +89 -113
  628. scipy/stats/_new_distributions.py +97 -20
  629. scipy/stats/_page_trend_test.py +12 -5
  630. scipy/stats/_probability_distribution.py +265 -43
  631. scipy/stats/_qmc.py +14 -9
  632. scipy/stats/_qmc_cy.cp313t-win_amd64.dll.a +0 -0
  633. scipy/stats/_qmc_cy.cp313t-win_amd64.pyd +0 -0
  634. scipy/stats/_qmvnt.py +16 -95
  635. scipy/stats/_qmvnt_cy.cp313t-win_amd64.dll.a +0 -0
  636. scipy/stats/_qmvnt_cy.cp313t-win_amd64.pyd +0 -0
  637. scipy/stats/_quantile.py +335 -0
  638. scipy/stats/_rcont/rcont.cp313t-win_amd64.dll.a +0 -0
  639. scipy/stats/_rcont/rcont.cp313t-win_amd64.pyd +0 -0
  640. scipy/stats/_resampling.py +4 -29
  641. scipy/stats/_sampling.py +1 -1
  642. scipy/stats/_sobol.cp313t-win_amd64.dll.a +0 -0
  643. scipy/stats/_sobol.cp313t-win_amd64.pyd +0 -0
  644. scipy/stats/_stats.cp313t-win_amd64.dll.a +0 -0
  645. scipy/stats/_stats.cp313t-win_amd64.pyd +0 -0
  646. scipy/stats/_stats_mstats_common.py +19 -2
  647. scipy/stats/_stats_py.py +534 -460
  648. scipy/stats/_stats_pythran.cp313t-win_amd64.dll.a +0 -0
  649. scipy/stats/_stats_pythran.cp313t-win_amd64.pyd +0 -0
  650. scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.dll.a +0 -0
  651. scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.pyd +0 -0
  652. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  653. scipy/stats/_variation.py +5 -7
  654. scipy/stats/_wilcoxon.py +13 -7
  655. scipy/stats/tests/common_tests.py +6 -4
  656. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  657. scipy/stats/tests/test_continued_fraction.py +173 -0
  658. scipy/stats/tests/test_continuous.py +379 -60
  659. scipy/stats/tests/test_continuous_basic.py +18 -12
  660. scipy/stats/tests/test_discrete_basic.py +14 -8
  661. scipy/stats/tests/test_discrete_distns.py +16 -16
  662. scipy/stats/tests/test_distributions.py +95 -75
  663. scipy/stats/tests/test_entropy.py +40 -48
  664. scipy/stats/tests/test_fit.py +4 -3
  665. scipy/stats/tests/test_hypotests.py +153 -24
  666. scipy/stats/tests/test_kdeoth.py +109 -41
  667. scipy/stats/tests/test_marray.py +289 -0
  668. scipy/stats/tests/test_morestats.py +79 -47
  669. scipy/stats/tests/test_mstats_basic.py +3 -3
  670. scipy/stats/tests/test_multivariate.py +434 -83
  671. scipy/stats/tests/test_qmc.py +13 -10
  672. scipy/stats/tests/test_quantile.py +199 -0
  673. scipy/stats/tests/test_rank.py +119 -112
  674. scipy/stats/tests/test_resampling.py +47 -56
  675. scipy/stats/tests/test_sampling.py +9 -4
  676. scipy/stats/tests/test_stats.py +799 -939
  677. scipy/stats/tests/test_variation.py +8 -6
  678. scipy/version.py +2 -2
  679. scipy-1.16.0rc1.dist-info/DELVEWHEEL +2 -0
  680. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  681. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +8 -8
  682. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +684 -692
  683. scipy/_lib/array_api_extra/_funcs.py +0 -484
  684. scipy/_lib/array_api_extra/_typing.py +0 -8
  685. scipy/interpolate/_bspl.cp313t-win_amd64.dll.a +0 -0
  686. scipy/interpolate/_bspl.cp313t-win_amd64.pyd +0 -0
  687. scipy/optimize/_cobyla.cp313t-win_amd64.dll.a +0 -0
  688. scipy/optimize/_cobyla.cp313t-win_amd64.pyd +0 -0
  689. scipy/optimize/_cython_nnls.cp313t-win_amd64.dll.a +0 -0
  690. scipy/optimize/_cython_nnls.cp313t-win_amd64.pyd +0 -0
  691. scipy/optimize/_slsqp.cp313t-win_amd64.dll.a +0 -0
  692. scipy/optimize/_slsqp.cp313t-win_amd64.pyd +0 -0
  693. scipy/spatial/qhull_src/COPYING.txt +0 -38
  694. scipy/special/libsf_error_state.dll +0 -0
  695. scipy/special/libsf_error_state.dll.a +0 -0
  696. scipy/special/tests/test_log_softmax.py +0 -109
  697. scipy/special/tests/test_xsf_cuda.py +0 -114
  698. scipy/special/xsf/binom.h +0 -89
  699. scipy/special/xsf/cdflib.h +0 -100
  700. scipy/special/xsf/cephes/airy.h +0 -307
  701. scipy/special/xsf/cephes/besselpoly.h +0 -51
  702. scipy/special/xsf/cephes/beta.h +0 -257
  703. scipy/special/xsf/cephes/cbrt.h +0 -131
  704. scipy/special/xsf/cephes/chbevl.h +0 -85
  705. scipy/special/xsf/cephes/chdtr.h +0 -193
  706. scipy/special/xsf/cephes/const.h +0 -87
  707. scipy/special/xsf/cephes/ellie.h +0 -293
  708. scipy/special/xsf/cephes/ellik.h +0 -251
  709. scipy/special/xsf/cephes/ellpe.h +0 -107
  710. scipy/special/xsf/cephes/ellpk.h +0 -117
  711. scipy/special/xsf/cephes/expn.h +0 -260
  712. scipy/special/xsf/cephes/gamma.h +0 -398
  713. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  714. scipy/special/xsf/cephes/hyperg.h +0 -361
  715. scipy/special/xsf/cephes/i0.h +0 -149
  716. scipy/special/xsf/cephes/i1.h +0 -158
  717. scipy/special/xsf/cephes/igam.h +0 -421
  718. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  719. scipy/special/xsf/cephes/igami.h +0 -313
  720. scipy/special/xsf/cephes/j0.h +0 -225
  721. scipy/special/xsf/cephes/j1.h +0 -198
  722. scipy/special/xsf/cephes/jv.h +0 -715
  723. scipy/special/xsf/cephes/k0.h +0 -164
  724. scipy/special/xsf/cephes/k1.h +0 -163
  725. scipy/special/xsf/cephes/kn.h +0 -243
  726. scipy/special/xsf/cephes/lanczos.h +0 -112
  727. scipy/special/xsf/cephes/ndtr.h +0 -275
  728. scipy/special/xsf/cephes/poch.h +0 -85
  729. scipy/special/xsf/cephes/polevl.h +0 -167
  730. scipy/special/xsf/cephes/psi.h +0 -194
  731. scipy/special/xsf/cephes/rgamma.h +0 -111
  732. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  733. scipy/special/xsf/cephes/shichi.h +0 -248
  734. scipy/special/xsf/cephes/sici.h +0 -224
  735. scipy/special/xsf/cephes/sindg.h +0 -221
  736. scipy/special/xsf/cephes/tandg.h +0 -139
  737. scipy/special/xsf/cephes/trig.h +0 -58
  738. scipy/special/xsf/cephes/unity.h +0 -186
  739. scipy/special/xsf/cephes/zeta.h +0 -172
  740. scipy/special/xsf/config.h +0 -304
  741. scipy/special/xsf/digamma.h +0 -205
  742. scipy/special/xsf/error.h +0 -57
  743. scipy/special/xsf/evalpoly.h +0 -47
  744. scipy/special/xsf/expint.h +0 -266
  745. scipy/special/xsf/hyp2f1.h +0 -694
  746. scipy/special/xsf/iv_ratio.h +0 -173
  747. scipy/special/xsf/lambertw.h +0 -150
  748. scipy/special/xsf/loggamma.h +0 -163
  749. scipy/special/xsf/sici.h +0 -200
  750. scipy/special/xsf/tools.h +0 -427
  751. scipy/special/xsf/trig.h +0 -164
  752. scipy/special/xsf/wright_bessel.h +0 -843
  753. scipy/special/xsf/zlog1.h +0 -35
  754. scipy/stats/_mvn.cp313t-win_amd64.dll.a +0 -0
  755. scipy/stats/_mvn.cp313t-win_amd64.pyd +0 -0
  756. scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
  757. /scipy-1.15.3-cp313-cp313t-win_amd64.whl → /scipy-1.16.0rc1-cp313-cp313t-win_amd64.whl +0 -0
  758. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/WHEEL +0 -0
@@ -1,107 +1,242 @@
1
+ from functools import partial
2
+ import pickle
3
+
1
4
  import pytest
5
+ from hypothesis import given, strategies
6
+ import hypothesis.extra.numpy as npst
7
+ from packaging import version
2
8
 
3
- from scipy.special._support_alternative_backends import (get_array_special_func,
4
- array_special_func_map)
5
- from scipy.conftest import array_api_compatible
6
9
  from scipy import special
10
+ from scipy.special._support_alternative_backends import _special_funcs
7
11
  from scipy._lib._array_api_no_0d import xp_assert_close
8
- from scipy._lib._array_api import is_jax, is_torch, SCIPY_DEVICE
12
+ from scipy._lib._array_api import (is_cupy, is_dask, is_jax, is_torch,
13
+ make_xp_pytest_param, make_xp_test_case,
14
+ xp_default_dtype)
9
15
  from scipy._lib.array_api_compat import numpy as np
10
16
 
11
- try:
12
- import array_api_strict
13
- HAVE_ARRAY_API_STRICT = True
14
- except ImportError:
15
- HAVE_ARRAY_API_STRICT = False
16
-
17
+ # Run all tests in this module in the Array API CI, including those without
18
+ # the xp fixture
19
+ pytestmark = pytest.mark.array_api_backends
17
20
 
18
- @pytest.mark.skipif(not HAVE_ARRAY_API_STRICT,
19
- reason="`array_api_strict` not installed")
20
- def test_dispatch_to_unrecognize_library():
21
- xp = array_api_strict
22
- f = get_array_special_func('ndtr', xp=xp, n_array_args=1)
23
- x = [1, 2, 3]
24
- res = f(xp.asarray(x))
25
- ref = xp.asarray(special.ndtr(np.asarray(x)))
26
- xp_assert_close(res, ref, xp=xp)
21
+ lazy_xp_modules = [special]
27
22
 
28
23
 
29
- @pytest.mark.parametrize('dtype', ['float32', 'float64', 'int64'])
30
- @pytest.mark.skipif(not HAVE_ARRAY_API_STRICT,
31
- reason="`array_api_strict` not installed")
32
- def test_rel_entr_generic(dtype):
33
- xp = array_api_strict
34
- f = get_array_special_func('rel_entr', xp=xp, n_array_args=2)
35
- dtype_np = getattr(np, dtype)
36
- dtype_xp = getattr(xp, dtype)
37
- x, y = [-1, 0, 0, 1], [1, 0, 2, 3]
24
+ def _skip_or_tweak_alternative_backends(xp, f_name, dtypes):
25
+ """Skip tests for specific intersections of scipy.special functions
26
+ vs. backends vs. dtypes vs. devices.
27
+ Also suggest bespoke tweaks.
38
28
 
39
- x_xp, y_xp = xp.asarray(x, dtype=dtype_xp), xp.asarray(y, dtype=dtype_xp)
40
- res = f(x_xp, y_xp)
29
+ Returns
30
+ -------
31
+ positive_only : bool
32
+ Whether you should exclusively test positive inputs.
33
+ dtypes_np_ref : list[str]
34
+ The dtypes to use for the reference NumPy arrays.
35
+ """
36
+ if ((is_jax(xp) and f_name == 'gammaincc') # google/jax#20699
37
+ # gh-20972
38
+ or ((is_cupy(xp) or is_jax(xp) or is_torch(xp)) and f_name == 'chdtrc')):
39
+ positive_only = True
40
+ else:
41
+ positive_only = False
41
42
 
42
- x_np, y_np = np.asarray(x, dtype=dtype_np), np.asarray(y, dtype=dtype_np)
43
- ref = special.rel_entr(x_np[-1], y_np[-1])
44
- ref = np.asarray([np.inf, 0, 0, ref], dtype=ref.dtype)
43
+ if not any('int' in dtype for dtype in dtypes):
44
+ return positive_only, dtypes
45
45
 
46
- xp_assert_close(res, xp.asarray(ref), xp=xp)
46
+ # Integer-specific issues from this point onwards
47
47
 
48
+ if ((is_torch(xp) and f_name in {'gammainc', 'gammaincc'})
49
+ or (is_cupy(xp) and f_name in {'stdtr', 'i0e', 'i1e'})
50
+ or (is_jax(xp) and f_name in {'stdtr', 'ndtr', 'ndtri', 'log_ndtr'})
51
+ ):
52
+ pytest.skip(f"`{f_name}` does not support integer types")
48
53
 
49
- @pytest.mark.fail_slow(5)
50
- @array_api_compatible
51
- # @pytest.mark.skip_xp_backends('numpy', reason='skip while debugging')
52
- # @pytest.mark.usefixtures("skip_xp_backends")
53
- # `reversed` is for developer convenience: test new function first = less waiting
54
- @pytest.mark.parametrize('f_name_n_args', reversed(array_special_func_map.items()))
55
- @pytest.mark.parametrize('dtype', ['float32', 'float64'])
56
- @pytest.mark.parametrize('shapes', [[(0,)]*4, [tuple()]*4, [(10,)]*4,
57
- [(10,), (11, 1), (12, 1, 1), (13, 1, 1, 1)]])
58
- def test_support_alternative_backends(xp, f_name_n_args, dtype, shapes):
59
- f_name, n_args = f_name_n_args
54
+ # int/float mismatched args support is sketchy
55
+ if (any('float' in dtype for dtype in dtypes)
56
+ and ((is_torch(xp) and f_name in ('rel_entr', 'xlogy'))
57
+ or (is_jax(xp) and f_name in ('gammainc', 'gammaincc',
58
+ 'rel_entr', 'xlogy')))
59
+ ):
60
+ pytest.xfail("dtypes do not match")
60
61
 
61
- if (SCIPY_DEVICE != 'cpu'
62
- and is_torch(xp)
63
- and f_name in {'stdtr', 'betaincc', 'betainc'}
62
+ dtypes_np_ref = dtypes
63
+ if (is_torch(xp) and xp_default_dtype(xp) == xp.float32
64
+ and f_name not in {'betainc', 'betaincc', 'stdtr', 'stdtrit'}
64
65
  ):
65
- pytest.skip(f"`{f_name}` does not have an array-agnostic implementation "
66
- f"and cannot delegate to PyTorch.")
66
+ # On PyTorch with float32 default dtype, sometimes ints are promoted
67
+ # to float32, and sometimes to float64.
68
+ # When they are promoted to float32, explicitly convert the reference
69
+ # numpy arrays to float32 to prevent them from being automatically promoted
70
+ # to float64 instead.
71
+ dtypes_np_ref = ['float32' if 'int' in dtype else dtype for dtype in dtypes]
67
72
 
68
- shapes = shapes[:n_args]
69
- f = getattr(special, f_name)
73
+ return positive_only, dtypes_np_ref
70
74
 
75
+
76
+ @pytest.mark.filterwarnings("ignore:invalid value encountered:RuntimeWarning:dask")
77
+ @pytest.mark.parametrize('shapes', [[(0,)]*4, [tuple()]*4, [(10,)]*4,
78
+ [(10,), (11, 1), (12, 1, 1), (13, 1, 1, 1)]])
79
+ @pytest.mark.parametrize('dtype', ['float32', 'float64', 'int64'])
80
+ @pytest.mark.parametrize(
81
+ 'func,nfo', [make_xp_pytest_param(i.wrapper, i) for i in _special_funcs])
82
+ def test_support_alternative_backends(xp, func, nfo, dtype, shapes):
83
+ positive_only, [dtype_np_ref] = _skip_or_tweak_alternative_backends(
84
+ xp, nfo.name, [dtype])
71
85
  dtype_np = getattr(np, dtype)
72
86
  dtype_xp = getattr(xp, dtype)
73
87
 
74
- # # To test the robustness of the alternative backend's implementation,
75
- # # use Hypothesis to generate arguments
76
- # from hypothesis import given, strategies, reproduce_failure, assume
77
- # import hypothesis.extra.numpy as npst
78
- # @given(data=strategies.data())
79
- # mbs = npst.mutually_broadcastable_shapes(num_shapes=n_args)
80
- # shapes, final_shape = data.draw(mbs)
81
- # elements = dict(allow_subnormal=False) # consider min_value, max_value
82
- # args_np = [np.asarray(data.draw(npst.arrays(dtype_np, shape, elements=elements)),
83
- # dtype=dtype_np)
84
- # for shape in shapes]
85
-
86
- # For CI, be a little more forgiving; just generate normally distributed arguments
88
+ shapes = shapes[:nfo.n_args]
89
+ rng = np.random.default_rng(984254252920492019)
90
+ if 'int' in dtype:
91
+ iinfo = np.iinfo(dtype_np)
92
+ rand = partial(rng.integers, iinfo.min, iinfo.max + 1)
93
+ else:
94
+ rand = rng.standard_normal
95
+ args_np = [rand(size=shape, dtype=dtype_np) for shape in shapes]
96
+ if positive_only:
97
+ args_np = [np.abs(arg) for arg in args_np]
98
+
99
+ args_xp = [xp.asarray(arg, dtype=dtype_xp) for arg in args_np]
100
+ args_np = [np.asarray(arg, dtype=dtype_np_ref) for arg in args_np]
101
+
102
+ if is_dask(xp):
103
+ # We're using map_blocks to dispatch the function to Dask.
104
+ # This is the correct thing to do IF all tested functions are elementwise;
105
+ # otherwise the output would change depending on chunking.
106
+ # Try to trigger bugs related to having multiple chunks.
107
+ args_xp = [arg.rechunk(5) for arg in args_xp]
108
+
109
+ res = nfo.wrapper(*args_xp) # Also wrapped by lazy_xp_function
110
+ ref = nfo.func(*args_np) # Unwrapped ufunc
111
+
112
+ # When dtype_np is integer, the output dtype can be float
113
+ atol = 0 if ref.dtype.kind in 'iu' else 10 * np.finfo(ref.dtype).eps
114
+ xp_assert_close(res, xp.asarray(ref), atol=atol)
115
+
116
+
117
+ @pytest.mark.parametrize(
118
+ 'func, nfo',
119
+ [make_xp_pytest_param(i.wrapper, i) for i in _special_funcs if i.n_args >= 2])
120
+ @pytest.mark.filterwarnings("ignore:invalid value encountered:RuntimeWarning:dask")
121
+ def test_support_alternative_backends_mismatched_dtypes(xp, func, nfo):
122
+ """Test mix-n-match of int and float arguments"""
123
+ dtypes = ['int64', 'float32', 'float64'][:nfo.n_args]
124
+ dtypes_xp = [xp.int64, xp.float32, xp.float64][:nfo.n_args]
125
+ positive_only, dtypes_np_ref = _skip_or_tweak_alternative_backends(
126
+ xp, nfo.name, dtypes)
127
+
87
128
  rng = np.random.default_rng(984254252920492019)
88
- args_np = [rng.standard_normal(size=shape, dtype=dtype_np) for shape in shapes]
129
+ iinfo = np.iinfo(np.int64)
130
+ randint = partial(rng.integers, iinfo.min, iinfo.max + 1)
131
+ args_np = [
132
+ randint(size=1, dtype=np.int64),
133
+ rng.standard_normal(size=1, dtype=np.float32),
134
+ rng.standard_normal(size=1, dtype=np.float64),
135
+ ][:nfo.n_args]
136
+ if positive_only:
137
+ args_np = [np.abs(arg) for arg in args_np]
138
+
139
+ args_xp = [xp.asarray(arg, dtype=dtype_xp)
140
+ for arg, dtype_xp in zip(args_np, dtypes_xp)]
141
+ args_np = [np.asarray(arg, dtype=dtype_np_ref)
142
+ for arg, dtype_np_ref in zip(args_np, dtypes_np_ref)]
143
+
144
+ res = nfo.wrapper(*args_xp) # Also wrapped by lazy_xp_function
145
+ ref = nfo.func(*args_np) # Unwrapped ufunc
146
+
147
+ atol = 10 * np.finfo(ref.dtype).eps
148
+ xp_assert_close(res, xp.asarray(ref), atol=atol)
149
+
150
+
151
+ @pytest.mark.xslow
152
+ @given(data=strategies.data())
153
+ @pytest.mark.fail_slow(5)
154
+ @pytest.mark.parametrize(
155
+ 'func,nfo', [make_xp_pytest_param(nfo.wrapper, nfo) for nfo in _special_funcs])
156
+ @pytest.mark.filterwarnings("ignore:invalid value encountered:RuntimeWarning:dask")
157
+ @pytest.mark.filterwarnings("ignore:divide by zero encountered:RuntimeWarning:dask")
158
+ @pytest.mark.filterwarnings("ignore:overflow encountered:RuntimeWarning:dask")
159
+ @pytest.mark.filterwarnings(
160
+ "ignore:overflow encountered:RuntimeWarning:array_api_strict"
161
+ )
162
+ def test_support_alternative_backends_hypothesis(xp, func, nfo, data):
163
+ dtype = data.draw(strategies.sampled_from(['float32', 'float64', 'int64']))
164
+ positive_only, [dtype_np_ref] = _skip_or_tweak_alternative_backends(
165
+ xp, nfo.name, [dtype])
166
+ dtype_np = getattr(np, dtype)
167
+ dtype_xp = getattr(xp, dtype)
168
+
169
+ elements = {'allow_subnormal': False}
170
+ # Most failures are due to NaN or infinity; uncomment to suppress them
171
+ # elements['allow_infinity'] = False
172
+ # elements['allow_nan'] = False
173
+ if positive_only:
174
+ elements['min_value'] = 0
175
+
176
+ shapes, _ = data.draw(
177
+ npst.mutually_broadcastable_shapes(num_shapes=nfo.n_args))
178
+ args_np = [data.draw(npst.arrays(dtype_np, shape, elements=elements))
179
+ for shape in shapes]
180
+
181
+ args_xp = [xp.asarray(arg, dtype=dtype_xp) for arg in args_np]
182
+ args_np = [np.asarray(arg, dtype=dtype_np_ref) for arg in args_np]
183
+
184
+ res = nfo.wrapper(*args_xp) # Also wrapped by lazy_xp_function
185
+ ref = nfo.func(*args_np) # Unwrapped ufunc
186
+
187
+ # When dtype_np is integer, the output dtype can be float
188
+ atol = 0 if ref.dtype.kind in 'iu' else 10 * np.finfo(ref.dtype).eps
189
+ xp_assert_close(res, xp.asarray(ref), atol=atol)
190
+
191
+
192
+ @pytest.mark.parametrize("func", [nfo.wrapper for nfo in _special_funcs])
193
+ def test_pickle(func):
194
+ roundtrip = pickle.loads(pickle.dumps(func))
195
+ assert roundtrip is func
196
+
197
+
198
+ @pytest.mark.parametrize("func", [nfo.wrapper for nfo in _special_funcs])
199
+ def test_repr(func):
200
+ assert func.__name__ in repr(func)
201
+ assert "locals" not in repr(func)
202
+
203
+
204
+ @pytest.mark.skipif(
205
+ version.parse(np.__version__) < version.parse("2.2"),
206
+ reason="Can't update ufunc __doc__ when SciPy is compiled vs. NumPy < 2.2")
207
+ @pytest.mark.parametrize('func', [nfo.wrapper for nfo in _special_funcs])
208
+ def test_doc(func):
209
+ """xp_capabilities updates the docstring in place.
210
+ Make sure it does so exactly once, including when SCIPY_ARRAY_API is not set.
211
+ """
212
+ match = "has experimental support for Python Array API"
213
+ assert func.__doc__.count(match) == 1
214
+
89
215
 
90
- if (is_jax(xp) and f_name == 'gammaincc' # google/jax#20699
91
- or f_name == 'chdtrc'): # gh-20972
92
- args_np[0] = np.abs(args_np[0])
93
- args_np[1] = np.abs(args_np[1])
216
+ @pytest.mark.parametrize('func,n_args',
217
+ [(nfo.wrapper, nfo.n_args) for nfo in _special_funcs])
218
+ def test_ufunc_kwargs(func, n_args):
219
+ """Test that numpy-specific out= and dtype= keyword arguments
220
+ of ufuncs still work when SCIPY_ARRAY_API is set.
221
+ """
222
+ # out=
223
+ args = [np.asarray([.1, .2])] * n_args
224
+ out = np.empty(2)
225
+ y = func(*args, out=out)
226
+ xp_assert_close(y, out)
94
227
 
95
- args_xp = [xp.asarray(arg[()], dtype=dtype_xp) for arg in args_np]
228
+ # out= with out.dtype != args.dtype
229
+ out = np.empty(2, dtype=np.float32)
230
+ y = func(*args, out=out)
231
+ xp_assert_close(y, out)
96
232
 
97
- res = f(*args_xp)
98
- ref = xp.asarray(f(*args_np), dtype=dtype_xp)
233
+ # dtype=
234
+ y = func(*args, dtype=np.float32)
235
+ assert y.dtype == np.float32
99
236
 
100
- eps = np.finfo(dtype_np).eps
101
- xp_assert_close(res, ref, atol=10*eps)
102
237
 
103
238
 
104
- @array_api_compatible
239
+ @make_xp_test_case(special.chdtr)
105
240
  def test_chdtr_gh21311(xp):
106
241
  # the edge case behavior of generic chdtr was not right; see gh-21311
107
242
  # be sure to test at least these cases
scipy/stats/__init__.py CHANGED
@@ -280,6 +280,7 @@ Frequency statistics
280
280
  :toctree: generated/
281
281
 
282
282
  cumfreq
283
+ quantile
283
284
  percentileofscore
284
285
  scoreatpercentile
285
286
  relfreq
@@ -471,6 +472,7 @@ Random Variables
471
472
  make_distribution
472
473
  Normal
473
474
  Uniform
475
+ Binomial
474
476
  Mixture
475
477
  order_statistic
476
478
  truncate
@@ -649,9 +651,10 @@ from ._survival import *
649
651
  from ._distribution_infrastructure import (
650
652
  make_distribution, Mixture, order_statistic, truncate, exp, log, abs
651
653
  )
652
- from ._new_distributions import Normal, Uniform
654
+ from ._new_distributions import Normal, Uniform, Binomial
653
655
  from ._mgc import multiscale_graphcorr
654
656
  from ._correlation import chatterjeexi
657
+ from ._quantile import quantile
655
658
 
656
659
 
657
660
  # Deprecated namespaces, to be removed in v2.0.0
@@ -42,6 +42,7 @@ def _broadcast_arrays(arrays, axis=None, xp=None):
42
42
  """
43
43
  Broadcast shapes of arrays, ignoring incompatibility of specified axes
44
44
  """
45
+ arrays = tuple(arrays)
45
46
  if not arrays:
46
47
  return arrays
47
48
  xp = array_namespace(*arrays) if xp is None else xp
@@ -554,11 +555,11 @@ def _axis_nan_policy_factory(tuple_to_result, default_axis=0,
554
555
  if np.all(ndims <= 1):
555
556
  # Addresses nan_policy == "raise"
556
557
  if nan_policy != 'propagate' or override['nan_propagation']:
557
- contains_nan = [_contains_nan(sample, nan_policy)[0]
558
+ contains_nan = [_contains_nan(sample, nan_policy)
558
559
  for sample in samples]
559
560
  else:
560
561
  # Behave as though there are no NaNs (even if there are)
561
- contains_nan = [False]*len(samples)
562
+ contains_nan = [False] * len(samples)
562
563
 
563
564
  # Addresses nan_policy == "propagate"
564
565
  if any(contains_nan) and (nan_policy == 'propagate'
@@ -610,7 +611,7 @@ def _axis_nan_policy_factory(tuple_to_result, default_axis=0,
610
611
 
611
612
  # Addresses nan_policy == "raise"
612
613
  if nan_policy != 'propagate' or override['nan_propagation']:
613
- contains_nan, _ = _contains_nan(x, nan_policy)
614
+ contains_nan = _contains_nan(x, nan_policy)
614
615
  else:
615
616
  contains_nan = False # behave like there are no NaNs
616
617
 
Binary file