scipy 1.15.3__cp313-cp313t-win_amd64.whl → 1.16.0rc2__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 (759) 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 +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.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 +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.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 +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.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 +230 -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 +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.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 +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.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 +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.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 +5 -12
  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/_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.cp313t-win_amd64.dll.a +0 -0
  624. scipy/stats/_levy_stable/levyst.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  634. scipy/stats/_qmc_cy.cp313t-win_amd64.pyd +0 -0
  635. scipy/stats/_qmvnt.py +16 -95
  636. scipy/stats/_qmvnt_cy.cp313t-win_amd64.dll.a +0 -0
  637. scipy/stats/_qmvnt_cy.cp313t-win_amd64.pyd +0 -0
  638. scipy/stats/_quantile.py +335 -0
  639. scipy/stats/_rcont/rcont.cp313t-win_amd64.dll.a +0 -0
  640. scipy/stats/_rcont/rcont.cp313t-win_amd64.pyd +0 -0
  641. scipy/stats/_resampling.py +4 -29
  642. scipy/stats/_sampling.py +1 -1
  643. scipy/stats/_sobol.cp313t-win_amd64.dll.a +0 -0
  644. scipy/stats/_sobol.cp313t-win_amd64.pyd +0 -0
  645. scipy/stats/_stats.cp313t-win_amd64.dll.a +0 -0
  646. scipy/stats/_stats.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  650. scipy/stats/_stats_pythran.cp313t-win_amd64.pyd +0 -0
  651. scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.dll.a +0 -0
  652. scipy/stats/_unuran/unuran_wrapper.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  687. scipy/interpolate/_bspl.cp313t-win_amd64.pyd +0 -0
  688. scipy/optimize/_cobyla.cp313t-win_amd64.dll.a +0 -0
  689. scipy/optimize/_cobyla.cp313t-win_amd64.pyd +0 -0
  690. scipy/optimize/_cython_nnls.cp313t-win_amd64.dll.a +0 -0
  691. scipy/optimize/_cython_nnls.cp313t-win_amd64.pyd +0 -0
  692. scipy/optimize/_slsqp.cp313t-win_amd64.dll.a +0 -0
  693. scipy/optimize/_slsqp.cp313t-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.cp313t-win_amd64.dll.a +0 -0
  756. scipy/stats/_mvn.cp313t-win_amd64.pyd +0 -0
  757. scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
  758. /scipy-1.15.3-cp313-cp313t-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313t-win_amd64.whl +0 -0
  759. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -38,6 +38,14 @@ class TestGammainc:
38
38
  else:
39
39
  assert result == desired
40
40
 
41
+ @pytest.mark.parametrize("x", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
42
+ def test_a_nan(self, x):
43
+ assert np.isnan(sc.gammainc(np.nan, x))
44
+
45
+ @pytest.mark.parametrize("a", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
46
+ def test_x_nan(self, a):
47
+ assert np.isnan(sc.gammainc(a, np.nan))
48
+
41
49
  def test_infinite_limits(self):
42
50
  # Test that large arguments converge to the hard-coded limits
43
51
  # at infinity.
@@ -108,6 +116,14 @@ class TestGammaincc:
108
116
  else:
109
117
  assert result == desired
110
118
 
119
+ @pytest.mark.parametrize("x", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
120
+ def test_a_nan(self, x):
121
+ assert np.isnan(sc.gammaincc(np.nan, x))
122
+
123
+ @pytest.mark.parametrize("a", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
124
+ def test_x_nan(self, a):
125
+ assert np.isnan(sc.gammaincc(a, np.nan))
126
+
111
127
  def test_infinite_limits(self):
112
128
  # Test that large arguments converge to the hard-coded limits
113
129
  # at infinity.
@@ -1135,7 +1135,7 @@ class TestHyp2f1:
1135
1135
  c=8.5,
1136
1136
  z=(0.7368421052631575+0.5263157894736841j),
1137
1137
  expected=(6.468457061368628+24.190040684917374j),
1138
- rtol=5e-16,
1138
+ rtol=6e-16,
1139
1139
  ),
1140
1140
  ),
1141
1141
  pytest.param(
@@ -1662,7 +1662,7 @@ class TestHyp2f1:
1662
1662
  c=4.0013768449590685,
1663
1663
  z=(0.3413793103448277-0.8724137931034484j),
1664
1664
  expected=(0.2722302180888523-0.21790187837266162j),
1665
- rtol=1e-12,
1665
+ rtol=1.2e-12,
1666
1666
  ),
1667
1667
  ),
1668
1668
  pytest.param(
@@ -0,0 +1,85 @@
1
+ import numpy as np
2
+ import pytest
3
+
4
+ from numpy.testing import assert_allclose, assert_equal
5
+
6
+ from scipy.special._ufuncs import _log1mexp
7
+
8
+ # # Test cases generated with the script
9
+ #
10
+ # import numpy as np
11
+
12
+ # from mpmath import mp
13
+
14
+
15
+ # def mp_log1mexp(x):
16
+ # with mp.workdps(324):
17
+ # return float(mp.log(mp.one - mp.exp(x)))
18
+
19
+ # X = np.concat([-np.logspace(-1, -300, 20), np.linspace(-745, -1, 20)])
20
+
21
+ # cases = [(float(x), mp_log1mexp(x)) for x in X]
22
+
23
+ @pytest.mark.parametrize(
24
+ "x,expected",
25
+ [
26
+ (-0.1, -2.3521684610440907),
27
+ (-1.8329807108324374e-17, -38.538003135374026),
28
+ (-3.359818286283788e-33, -74.773421177754),
29
+ (-6.1584821106602796e-49, -111.00883922013399),
30
+ (-1.1288378916846929e-64, -147.24425726251397),
31
+ (-2.0691380811148324e-80, -183.47967530489393),
32
+ (-3.792690190732269e-96, -219.71509334727392),
33
+ (-6.951927961775534e-112, -255.95051138965394),
34
+ (-1.2742749857031425e-127, -292.1859294320339),
35
+ (-2.3357214690901785e-143, -328.42134747441384),
36
+ (-4.281332398719571e-159, -364.6567655167938),
37
+ (-7.847599703514559e-175, -400.8921835591739),
38
+ (-1.4384498882876776e-190, -437.1276016015538),
39
+ (-2.6366508987304307e-206, -473.3630196439338),
40
+ (-4.832930238571653e-222, -509.59843768631384),
41
+ (-8.858667904100796e-238, -545.8338557286938),
42
+ (-1.623776739188744e-253, -582.0692737710738),
43
+ (-2.9763514416312156e-269, -618.3046918134538),
44
+ (-5.455594781168782e-285, -654.5401098558336),
45
+ (-1e-300, -690.7755278982137),
46
+ (-745.0, -5e-324),
47
+ (-705.8421052631579, -2.8619931451743316e-307),
48
+ (-666.6842105263158, -2.9021923726875757e-290),
49
+ (-627.5263157894738, -2.9429562339405562e-273),
50
+ (-588.3684210526316, -2.9842926597143714e-256),
51
+ (-549.2105263157895, -3.0262096921839423e-239),
52
+ (-510.0526315789474, -3.0687154864846747e-222),
53
+ (-470.89473684210526, -3.1118183122979086e-205),
54
+ (-431.7368421052632, -3.155526555459449e-188),
55
+ (-392.5789473684211, -3.1998487195921207e-171),
56
+ (-353.42105263157896, -3.2447934277596653e-154),
57
+ (-314.2631578947369, -3.2903694241438367e-137),
58
+ (-275.1052631578948, -3.3365855757467166e-120),
59
+ (-235.94736842105266, -3.3834508741152875e-103),
60
+ (-196.78947368421052, -3.4309744370903894e-86),
61
+ (-157.63157894736844, -3.4791655105810003e-69),
62
+ (-118.47368421052636, -3.528033470363468e-52),
63
+ (-79.31578947368428, -3.577587823905024e-35),
64
+ (-40.157894736842195, -3.627838212213697e-18),
65
+ (-1.0, -0.4586751453870819),
66
+ ]
67
+ )
68
+ def test_log1mexp(x, expected):
69
+ observed = _log1mexp(x)
70
+ assert_allclose(observed, expected, rtol=1e-15)
71
+
72
+
73
+ @pytest.mark.parametrize("x", [1.1, 1e10, np.inf])
74
+ def test_log1mexp_out_of_domain(x):
75
+ observed = _log1mexp(x)
76
+ assert np.isnan(observed)
77
+
78
+
79
+ @pytest.mark.parametrize(
80
+ "x,expected",
81
+ [(-np.inf, -0.0), (0.0, -np.inf), (-0.0, -np.inf), (np.nan, np.nan)]
82
+ )
83
+ def test_log1mexp_extreme(x, expected):
84
+ observed = _log1mexp(x)
85
+ assert_equal(expected, observed)
@@ -1,15 +1,15 @@
1
+ import itertools as it
1
2
  import math
2
3
  import pytest
3
4
 
4
5
  import numpy as np
5
- from numpy.testing import assert_allclose
6
6
 
7
- from scipy.conftest import array_api_compatible
8
- from scipy._lib._array_api import array_namespace, is_array_api_strict
7
+ from scipy._lib._array_api import (is_array_api_strict, make_xp_test_case,
8
+ xp_default_dtype, xp_device)
9
9
  from scipy._lib._array_api_no_0d import (xp_assert_equal, xp_assert_close,
10
10
  xp_assert_less)
11
11
 
12
- from scipy.special import logsumexp, softmax
12
+ from scipy.special import log_softmax, logsumexp, softmax
13
13
  from scipy.special._logsumexp import _wrap_radians
14
14
 
15
15
 
@@ -17,23 +17,22 @@ dtypes = ['float32', 'float64', 'int32', 'int64', 'complex64', 'complex128']
17
17
  integral_dtypes = ['int32', 'int64']
18
18
 
19
19
 
20
- @array_api_compatible
21
- @pytest.mark.usefixtures("skip_xp_backends")
22
- @pytest.mark.skip_xp_backends('jax.numpy',
23
- reason="JAX arrays do not support item assignment")
24
20
  def test_wrap_radians(xp):
25
21
  x = xp.asarray([-math.pi-1, -math.pi, -1, -1e-300,
26
22
  0, 1e-300, 1, math.pi, math.pi+1])
27
23
  ref = xp.asarray([math.pi-1, math.pi, -1, -1e-300,
28
24
  0, 1e-300, 1, math.pi, -math.pi+1])
29
- res = _wrap_radians(x, xp)
25
+ res = _wrap_radians(x, xp=xp)
30
26
  xp_assert_close(res, ref, atol=0)
31
27
 
32
28
 
33
- @array_api_compatible
34
- @pytest.mark.usefixtures("skip_xp_backends")
35
- @pytest.mark.skip_xp_backends('jax.numpy',
36
- reason="JAX arrays do not support item assignment")
29
+ # numpy warning filters don't work for dask (dask/dask#3245)
30
+ # (also we should not expect the numpy warning filter to work for any Array API
31
+ # library)
32
+ @pytest.mark.filterwarnings("ignore:invalid value encountered:RuntimeWarning")
33
+ @pytest.mark.filterwarnings("ignore:divide by zero encountered:RuntimeWarning")
34
+ @pytest.mark.filterwarnings("ignore:overflow encountered:RuntimeWarning")
35
+ @make_xp_test_case(logsumexp)
37
36
  class TestLogSumExp:
38
37
  def test_logsumexp(self, xp):
39
38
  # Test with zero-size array
@@ -79,8 +78,7 @@ class TestLogSumExp:
79
78
  xp_assert_close(logsumexp(a, axis=-1), ref)
80
79
 
81
80
  # Test keeping dimensions
82
- xp_test = array_namespace(a) # `torch` needs `expand_dims`
83
- ref = xp_test.expand_dims(ref, axis=-1)
81
+ ref = xp.expand_dims(ref, axis=-1)
84
82
  xp_assert_close(logsumexp(a, axis=-1, keepdims=True), ref)
85
83
 
86
84
  # Test multiple axes
@@ -170,23 +168,19 @@ class TestLogSumExp:
170
168
  logsumexp(a, b=b)
171
169
 
172
170
  @pytest.mark.parametrize('arg', (1, [1, 2, 3]))
173
- @pytest.mark.skip_xp_backends(np_only=True)
174
- def test_xp_invalid_input(self, arg, xp):
171
+ def test_xp_invalid_input(self, arg):
175
172
  assert logsumexp(arg) == logsumexp(np.asarray(np.atleast_1d(arg)))
176
173
 
177
- @pytest.mark.skip_xp_backends(np_only=True,
178
- reason="Lists correspond with NumPy backend")
179
- def test_list(self, xp):
174
+ def test_array_like(self):
180
175
  a = [1000, 1000]
181
- desired = xp.asarray(1000.0 + math.log(2.0), dtype=np.float64)
176
+ desired = np.asarray(1000.0 + math.log(2.0))
182
177
  xp_assert_close(logsumexp(a), desired)
183
178
 
184
179
  @pytest.mark.parametrize('dtype', dtypes)
185
180
  def test_dtypes_a(self, dtype, xp):
186
181
  dtype = getattr(xp, dtype)
187
182
  a = xp.asarray([1000., 1000.], dtype=dtype)
188
- xp_test = array_namespace(a) # torch needs compatible `isdtype`
189
- desired_dtype = (xp.asarray(1.).dtype if xp_test.isdtype(dtype, 'integral')
183
+ desired_dtype = (xp.asarray(1.).dtype if xp.isdtype(dtype, 'integral')
190
184
  else dtype) # true for all libraries tested
191
185
  desired = xp.asarray(1000.0 + math.log(2.0), dtype=desired_dtype)
192
186
  xp_assert_close(logsumexp(a), desired)
@@ -198,16 +192,18 @@ class TestLogSumExp:
198
192
  xp_dtype_b = getattr(xp, dtype_b)
199
193
  a = xp.asarray([2, 1], dtype=xp_dtype_a)
200
194
  b = xp.asarray([1, -1], dtype=xp_dtype_b)
201
- xp_test = array_namespace(a, b) # torch needs compatible result_type
202
195
  if is_array_api_strict(xp):
196
+ # special-case for `TypeError: array_api_strict.float32 and
197
+ # and array_api_strict.int64 cannot be type promoted together`
203
198
  xp_float_dtypes = [dtype for dtype in [xp_dtype_a, xp_dtype_b]
204
- if not xp_test.isdtype(dtype, 'integral')]
199
+ if not xp.isdtype(dtype, 'integral')]
205
200
  if len(xp_float_dtypes) < 2: # at least one is integral
206
201
  xp_float_dtypes.append(xp.asarray(1.).dtype)
207
- desired_dtype = xp_test.result_type(*xp_float_dtypes)
202
+ desired_dtype = xp.result_type(*xp_float_dtypes)
208
203
  else:
209
- # True for all libraries tested
210
- desired_dtype = xp_test.result_type(xp_dtype_a, xp_dtype_b, xp.float32)
204
+ desired_dtype = xp.result_type(xp_dtype_a, xp_dtype_b)
205
+ if xp.isdtype(desired_dtype, 'integral'):
206
+ desired_dtype = xp_default_dtype(xp)
211
207
  desired = xp.asarray(math.log(math.exp(2) - math.exp(1)), dtype=desired_dtype)
212
208
  xp_assert_close(logsumexp(a, b=b), desired)
213
209
 
@@ -234,7 +230,7 @@ class TestLogSumExp:
234
230
 
235
231
  res = logsumexp(x, axis=1)
236
232
  ref = xp.log(xp.sum(xp.exp(x), axis=1))
237
- max = xp.full_like(xp.imag(res), xp.asarray(xp.pi))
233
+ max = xp.full_like(xp.imag(res), xp.pi)
238
234
  xp_assert_less(xp.abs(xp.imag(res)), max)
239
235
  xp_assert_close(res, ref)
240
236
 
@@ -257,6 +253,54 @@ class TestLogSumExp:
257
253
  xp_assert_close(xp.real(res), xp.real(ref))
258
254
  xp_assert_close(xp.imag(res), xp.imag(ref), atol=0, rtol=1e-15)
259
255
 
256
+
257
+ @pytest.mark.parametrize('x,y', it.product(
258
+ [
259
+ -np.inf,
260
+ np.inf,
261
+ complex(-np.inf, 0.),
262
+ complex(-np.inf, -0.),
263
+ complex(-np.inf, np.inf),
264
+ complex(-np.inf, -np.inf),
265
+ complex(np.inf, 0.),
266
+ complex(np.inf, -0.),
267
+ complex(np.inf, np.inf),
268
+ complex(np.inf, -np.inf),
269
+ # Phase in each quadrant.
270
+ complex(-np.inf, 0.7533),
271
+ complex(-np.inf, 2.3562),
272
+ complex(-np.inf, 3.9270),
273
+ complex(-np.inf, 5.4978),
274
+ complex(np.inf, 0.7533),
275
+ complex(np.inf, 2.3562),
276
+ complex(np.inf, 3.9270),
277
+ complex(np.inf, 5.4978),
278
+ ], repeat=2)
279
+ )
280
+ def test_gh22601_infinite_elements(self, x, y, xp):
281
+ # Test that `logsumexp` does reasonable things in the presence of
282
+ # real and complex infinities.
283
+ res = logsumexp(xp.asarray([x, y]))
284
+ ref = xp.log(xp.sum(xp.exp(xp.asarray([x, y]))))
285
+ xp_assert_equal(res, ref)
286
+
287
+ def test_no_writeback(self, xp):
288
+ """Test that logsumexp doesn't accidentally write back to its parameters."""
289
+ a = xp.asarray([5., 4.])
290
+ b = xp.asarray([3., 2.])
291
+ logsumexp(a)
292
+ logsumexp(a, b=b)
293
+ xp_assert_equal(a, xp.asarray([5., 4.]))
294
+ xp_assert_equal(b, xp.asarray([3., 2.]))
295
+
296
+ @pytest.mark.parametrize("x_raw", [1.0, 1.0j, []])
297
+ def test_device(self, x_raw, xp, devices):
298
+ """Test input device propagation to output."""
299
+ for d in devices:
300
+ x = xp.asarray(x_raw, device=d)
301
+ assert xp_device(logsumexp(x)) == xp_device(x)
302
+ assert xp_device(logsumexp(x, b=x)) == xp_device(x)
303
+
260
304
  def test_gh22903(self, xp):
261
305
  # gh-22903 reported that `logsumexp` produced NaN where the weight associated
262
306
  # with the max magnitude element was negative and `return_sign=False`, even if
@@ -272,56 +316,154 @@ class TestLogSumExp:
272
316
  xp_assert_close(logsumexp(a, b=b), xp.asarray(xp.nan))
273
317
 
274
318
 
319
+ @make_xp_test_case(softmax)
275
320
  class TestSoftmax:
276
- def test_softmax_fixtures(self):
277
- assert_allclose(softmax([1000, 0, 0, 0]), np.array([1, 0, 0, 0]),
278
- rtol=1e-13)
279
- assert_allclose(softmax([1, 1]), np.array([.5, .5]), rtol=1e-13)
280
- assert_allclose(softmax([0, 1]), np.array([1, np.e])/(1 + np.e),
321
+ def test_softmax_fixtures(self, xp):
322
+ xp_assert_close(softmax(xp.asarray([1000., 0., 0., 0.])),
323
+ xp.asarray([1., 0., 0., 0.]), rtol=1e-13)
324
+ xp_assert_close(softmax(xp.asarray([1., 1.])),
325
+ xp.asarray([.5, .5]), rtol=1e-13)
326
+ xp_assert_close(softmax(xp.asarray([0., 1.])),
327
+ xp.asarray([1., np.e])/(1 + np.e),
281
328
  rtol=1e-13)
282
329
 
283
330
  # Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
284
331
  # converted to float.
285
- x = np.arange(4)
286
- expected = np.array([0.03205860328008499,
287
- 0.08714431874203256,
288
- 0.23688281808991013,
289
- 0.6439142598879722])
332
+ x = xp.arange(4, dtype=xp.float64)
333
+ expected = xp.asarray([0.03205860328008499,
334
+ 0.08714431874203256,
335
+ 0.23688281808991013,
336
+ 0.6439142598879722], dtype=xp.float64)
290
337
 
291
- assert_allclose(softmax(x), expected, rtol=1e-13)
338
+ xp_assert_close(softmax(x), expected, rtol=1e-13)
292
339
 
293
340
  # Translation property. If all the values are changed by the same amount,
294
341
  # the softmax result does not change.
295
- assert_allclose(softmax(x + 100), expected, rtol=1e-13)
342
+ xp_assert_close(softmax(x + 100), expected, rtol=1e-13)
296
343
 
297
344
  # When axis=None, softmax operates on the entire array, and preserves
298
345
  # the shape.
299
- assert_allclose(softmax(x.reshape(2, 2)), expected.reshape(2, 2),
300
- rtol=1e-13)
301
-
346
+ xp_assert_close(softmax(xp.reshape(x, (2, 2))),
347
+ xp.reshape(expected, (2, 2)), rtol=1e-13)
302
348
 
303
- def test_softmax_multi_axes(self):
304
- assert_allclose(softmax([[1000, 0], [1000, 0]], axis=0),
305
- np.array([[.5, .5], [.5, .5]]), rtol=1e-13)
306
- assert_allclose(softmax([[1000, 0], [1000, 0]], axis=1),
307
- np.array([[1, 0], [1, 0]]), rtol=1e-13)
349
+ def test_softmax_multi_axes(self, xp):
350
+ xp_assert_close(softmax(xp.asarray([[1000., 0.], [1000., 0.]]), axis=0),
351
+ xp.asarray([[.5, .5], [.5, .5]]), rtol=1e-13)
352
+ xp_assert_close(softmax(xp.asarray([[1000., 0.], [1000., 0.]]), axis=1),
353
+ xp.asarray([[1., 0.], [1., 0.]]), rtol=1e-13)
308
354
 
309
355
  # Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
310
356
  # converted to float.
311
- x = np.array([[-25, 0, 25, 50],
312
- [1, 325, 749, 750]])
313
- expected = np.array([[2.678636961770877e-33,
314
- 1.9287498479371314e-22,
315
- 1.3887943864771144e-11,
316
- 0.999999999986112],
317
- [0.0,
318
- 1.9444526359919372e-185,
319
- 0.2689414213699951,
320
- 0.7310585786300048]])
321
- assert_allclose(softmax(x, axis=1), expected, rtol=1e-13)
322
- assert_allclose(softmax(x.T, axis=0), expected.T, rtol=1e-13)
357
+ x = xp.asarray([[-25., 0., 25., 50.],
358
+ [ 1., 325., 749., 750.]])
359
+ expected = xp.asarray([[2.678636961770877e-33,
360
+ 1.9287498479371314e-22,
361
+ 1.3887943864771144e-11,
362
+ 0.999999999986112],
363
+ [0.0,
364
+ 1.9444526359919372e-185,
365
+ 0.2689414213699951,
366
+ 0.7310585786300048]])
367
+ xp_assert_close(softmax(x, axis=1), expected, rtol=1e-13)
368
+ xp_assert_close(softmax(x.T, axis=0), expected.T, rtol=1e-13)
323
369
 
324
370
  # 3-d input, with a tuple for the axis.
325
- x3d = x.reshape(2, 2, 2)
326
- assert_allclose(softmax(x3d, axis=(1, 2)), expected.reshape(2, 2, 2),
327
- rtol=1e-13)
371
+ x3d = xp.reshape(x, (2, 2, 2))
372
+ xp_assert_close(softmax(x3d, axis=(1, 2)),
373
+ xp.reshape(expected, (2, 2, 2)), rtol=1e-13)
374
+
375
+ @pytest.mark.xfail_xp_backends("array_api_strict", reason="int->float promotion")
376
+ def test_softmax_int_array(self, xp):
377
+ xp_assert_close(softmax(xp.asarray([1000, 0, 0, 0])),
378
+ xp.asarray([1., 0., 0., 0.]), rtol=1e-13)
379
+
380
+ def test_softmax_scalar(self):
381
+ xp_assert_close(softmax(1000), np.asarray(1.), rtol=1e-13)
382
+
383
+ def test_softmax_array_like(self):
384
+ xp_assert_close(softmax([1000, 0, 0, 0]),
385
+ np.asarray([1., 0., 0., 0.]), rtol=1e-13)
386
+
387
+
388
+ @make_xp_test_case(log_softmax)
389
+ class TestLogSoftmax:
390
+ def test_log_softmax_basic(self, xp):
391
+ xp_assert_close(log_softmax(xp.asarray([1000., 1.])),
392
+ xp.asarray([0., -999.]), rtol=1e-13)
393
+
394
+ @pytest.mark.xfail_xp_backends("array_api_strict", reason="int->float promotion")
395
+ def test_log_softmax_int_array(self, xp):
396
+ xp_assert_close(log_softmax(xp.asarray([1000, 1])),
397
+ xp.asarray([0., -999.]), rtol=1e-13)
398
+
399
+ def test_log_softmax_scalar(self):
400
+ xp_assert_close(log_softmax(1.0), 0.0, rtol=1e-13)
401
+
402
+ def test_log_softmax_array_like(self):
403
+ xp_assert_close(log_softmax([1000, 1]),
404
+ np.asarray([0., -999.]), rtol=1e-13)
405
+
406
+ @staticmethod
407
+ def data_1d(xp):
408
+ x = xp.arange(4, dtype=xp.float64)
409
+ # Expected value computed using mpmath (with mpmath.mp.dps = 200)
410
+ expect = [-3.4401896985611953,
411
+ -2.4401896985611953,
412
+ -1.4401896985611953,
413
+ -0.44018969856119533]
414
+ return x, xp.asarray(expect, dtype=xp.float64)
415
+
416
+ @staticmethod
417
+ def data_2d(xp):
418
+ x = xp.reshape(xp.arange(8, dtype=xp.float64), (2, 4))
419
+
420
+ # Expected value computed using mpmath (with mpmath.mp.dps = 200)
421
+ expect = [[-3.4401896985611953,
422
+ -2.4401896985611953,
423
+ -1.4401896985611953,
424
+ -0.44018969856119533],
425
+ [-3.4401896985611953,
426
+ -2.4401896985611953,
427
+ -1.4401896985611953,
428
+ -0.44018969856119533]]
429
+ return x, xp.asarray(expect, dtype=xp.float64)
430
+
431
+ @pytest.mark.parametrize("offset", [0, 100])
432
+ def test_log_softmax_translation(self, offset, xp):
433
+ # Translation property. If all the values are changed by the same amount,
434
+ # the softmax result does not change.
435
+ x, expect = self.data_1d(xp)
436
+ x += offset
437
+ xp_assert_close(log_softmax(x), expect, rtol=1e-13)
438
+
439
+ def test_log_softmax_noneaxis(self, xp):
440
+ # When axis=None, softmax operates on the entire array, and preserves
441
+ # the shape.
442
+ x, expect = self.data_1d(xp)
443
+ x = xp.reshape(x, (2, 2))
444
+ expect = xp.reshape(expect, (2, 2))
445
+ xp_assert_close(log_softmax(x), expect, rtol=1e-13)
446
+
447
+ @pytest.mark.parametrize('axis_2d, expected_2d', [
448
+ (0, np.log(0.5) * np.ones((2, 2))),
449
+ (1, [[0., -999.], [0., -999.]]),
450
+ ])
451
+ def test_axes(self, axis_2d, expected_2d, xp):
452
+ x = xp.asarray([[1000., 1.], [1000., 1.]])
453
+ xp_assert_close(log_softmax(x, axis=axis_2d),
454
+ xp.asarray(expected_2d, dtype=x.dtype), rtol=1e-13)
455
+
456
+ def test_log_softmax_2d_axis1(self, xp):
457
+ x, expect = self.data_2d(xp)
458
+ xp_assert_close(log_softmax(x, axis=1), expect, rtol=1e-13)
459
+
460
+ def test_log_softmax_2d_axis0(self, xp):
461
+ x, expect = self.data_2d(xp)
462
+ xp_assert_close(log_softmax(x.T, axis=0), expect.T, rtol=1e-13)
463
+
464
+ def test_log_softmax_3d(self, xp):
465
+ # 3D input, with a tuple for the axis.
466
+ x, expect = self.data_2d(xp)
467
+ x = xp.reshape(x, (2, 2, 2))
468
+ expect = xp.reshape(expect, (2, 2, 2))
469
+ xp_assert_close(log_softmax(x, axis=(1, 2)), expect, rtol=1e-13)
@@ -321,6 +321,7 @@ def test_lpmv():
321
321
  # beta
322
322
  # ------------------------------------------------------------------------------
323
323
 
324
+ @pytest.mark.slow
324
325
  @check_version(mpmath, '0.15')
325
326
  def test_beta():
326
327
  np.random.seed(1234)
@@ -1,7 +1,7 @@
1
1
  """Test how the ufuncs in special handle nan inputs.
2
2
 
3
3
  """
4
- from typing import Callable
4
+ from collections.abc import Callable
5
5
 
6
6
  import numpy as np
7
7
  from numpy.testing import assert_array_equal, assert_, suppress_warnings
@@ -258,24 +258,23 @@ class TestCall:
258
258
  poly = []
259
259
  for n in range(5):
260
260
  poly.extend([x.strip() for x in
261
- ("""
262
- orth.jacobi(%(n)d,0.3,0.9)
263
- orth.sh_jacobi(%(n)d,0.3,0.9)
264
- orth.genlaguerre(%(n)d,0.3)
265
- orth.laguerre(%(n)d)
266
- orth.hermite(%(n)d)
267
- orth.hermitenorm(%(n)d)
268
- orth.gegenbauer(%(n)d,0.3)
269
- orth.chebyt(%(n)d)
270
- orth.chebyu(%(n)d)
271
- orth.chebyc(%(n)d)
272
- orth.chebys(%(n)d)
273
- orth.sh_chebyt(%(n)d)
274
- orth.sh_chebyu(%(n)d)
275
- orth.legendre(%(n)d)
276
- orth.sh_legendre(%(n)d)
277
- """ % dict(n=n)).split()
278
- ])
261
+ (f"""
262
+ orth.jacobi({n},0.3,0.9)
263
+ orth.sh_jacobi({n},0.3,0.9)
264
+ orth.genlaguerre({n},0.3)
265
+ orth.laguerre({n})
266
+ orth.hermite({n})
267
+ orth.hermitenorm({n})
268
+ orth.gegenbauer({n},0.3)
269
+ orth.chebyt({n})
270
+ orth.chebyu({n})
271
+ orth.chebyc({n})
272
+ orth.chebys({n})
273
+ orth.sh_chebyt({n})
274
+ orth.sh_chebyu({n})
275
+ orth.legendre({n})
276
+ orth.sh_legendre({n})
277
+ """).split()])
279
278
  with np.errstate(all='ignore'):
280
279
  for pstr in poly:
281
280
  p = eval(pstr)
@@ -2,7 +2,7 @@ import sys
2
2
  import warnings
3
3
 
4
4
  import numpy as np
5
- from numpy.testing import assert_, assert_equal, IS_PYPY
5
+ from numpy.testing import assert_, assert_equal, HAS_REFCOUNT
6
6
  import pytest
7
7
  from pytest import raises as assert_raises
8
8
 
@@ -73,7 +73,8 @@ def test_seterr():
73
73
  sc.seterr(**entry_err)
74
74
 
75
75
 
76
- @pytest.mark.skipif(IS_PYPY, reason="Test not meaningful on PyPy")
76
+ @pytest.mark.thread_unsafe
77
+ @pytest.mark.skipif(not HAS_REFCOUNT, reason="Python lacks refcounts")
77
78
  def test_sf_error_special_refcount():
78
79
  # Regression test for gh-16233.
79
80
  # Check that the reference count of scipy.special is not increased
@@ -1,7 +1,7 @@
1
1
  import numpy as np
2
2
  import pytest
3
3
 
4
- from numpy.testing import assert_allclose, suppress_warnings
4
+ from numpy.testing import assert_allclose
5
5
  import scipy.special as sc
6
6
 
7
7
  class TestSphHarm:
@@ -47,6 +47,7 @@ class TestSphHarm:
47
47
 
48
48
  np.testing.assert_allclose(y_actual, y_desired, rtol=1e-05)
49
49
 
50
+ @pytest.mark.filterwarnings("ignore::DeprecationWarning")
50
51
  def test_first_harmonics():
51
52
  # Test against explicit representations of the first four
52
53
  # spherical harmonics which use `theta` as the azimuthal angle,
@@ -78,9 +79,7 @@ def test_first_harmonics():
78
79
  theta, phi = np.meshgrid(theta, phi)
79
80
 
80
81
  for harm, m, n in zip(harms, m, n):
81
- with suppress_warnings() as sup:
82
- sup.filter(category=DeprecationWarning)
83
- assert_allclose(sc.sph_harm(m, n, theta, phi),
84
- harm(theta, phi),
85
- rtol=1e-15, atol=1e-15,
86
- err_msg=f"Y^{m}_{n} incorrect")
82
+ assert_allclose(sc.sph_harm(m, n, theta, phi),
83
+ harm(theta, phi),
84
+ rtol=1e-15, atol=1e-15,
85
+ err_msg=f"Y^{m}_{n} incorrect")