scipy 1.15.2__cp310-cp310-win_amd64.whl → 1.15.3__cp310-cp310-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 (280) hide show
  1. scipy/__config__.py +6 -6
  2. scipy/__init__.py +3 -3
  3. scipy/_lib/_array_api.py +11 -0
  4. scipy/_lib/_ccallback_c.cp310-win_amd64.dll.a +0 -0
  5. scipy/_lib/_ccallback_c.cp310-win_amd64.pyd +0 -0
  6. scipy/_lib/_fpumode.cp310-win_amd64.dll.a +0 -0
  7. scipy/_lib/_fpumode.cp310-win_amd64.pyd +0 -0
  8. scipy/_lib/_test_ccallback.cp310-win_amd64.dll.a +0 -0
  9. scipy/_lib/_test_ccallback.cp310-win_amd64.pyd +0 -0
  10. scipy/_lib/_test_deprecation_call.cp310-win_amd64.dll.a +0 -0
  11. scipy/_lib/_test_deprecation_call.cp310-win_amd64.pyd +0 -0
  12. scipy/_lib/_test_deprecation_def.cp310-win_amd64.dll.a +0 -0
  13. scipy/_lib/_test_deprecation_def.cp310-win_amd64.pyd +0 -0
  14. scipy/_lib/_uarray/_uarray.cp310-win_amd64.dll.a +0 -0
  15. scipy/_lib/_uarray/_uarray.cp310-win_amd64.pyd +0 -0
  16. scipy/_lib/messagestream.cp310-win_amd64.dll.a +0 -0
  17. scipy/_lib/messagestream.cp310-win_amd64.pyd +0 -0
  18. scipy/_lib/tests/test_array_api.py +5 -1
  19. scipy/cluster/_hierarchy.cp310-win_amd64.dll.a +0 -0
  20. scipy/cluster/_hierarchy.cp310-win_amd64.pyd +0 -0
  21. scipy/cluster/_optimal_leaf_ordering.cp310-win_amd64.dll.a +0 -0
  22. scipy/cluster/_optimal_leaf_ordering.cp310-win_amd64.pyd +0 -0
  23. scipy/cluster/_vq.cp310-win_amd64.dll.a +0 -0
  24. scipy/cluster/_vq.cp310-win_amd64.pyd +0 -0
  25. scipy/fft/_pocketfft/pypocketfft.cp310-win_amd64.dll.a +0 -0
  26. scipy/fft/_pocketfft/pypocketfft.cp310-win_amd64.pyd +0 -0
  27. scipy/fftpack/convolve.cp310-win_amd64.dll.a +0 -0
  28. scipy/fftpack/convolve.cp310-win_amd64.pyd +0 -0
  29. scipy/integrate/_dop.cp310-win_amd64.dll.a +0 -0
  30. scipy/integrate/_dop.cp310-win_amd64.pyd +0 -0
  31. scipy/integrate/_ivp/common.py +3 -3
  32. scipy/integrate/_ivp/ivp.py +9 -2
  33. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  34. scipy/integrate/_lsoda.cp310-win_amd64.dll.a +0 -0
  35. scipy/integrate/_lsoda.cp310-win_amd64.pyd +0 -0
  36. scipy/integrate/_odepack.cp310-win_amd64.dll.a +0 -0
  37. scipy/integrate/_odepack.cp310-win_amd64.pyd +0 -0
  38. scipy/integrate/_quadpack.cp310-win_amd64.dll.a +0 -0
  39. scipy/integrate/_quadpack.cp310-win_amd64.pyd +0 -0
  40. scipy/integrate/_tanhsinh.py +14 -12
  41. scipy/integrate/_test_multivariate.cp310-win_amd64.dll.a +0 -0
  42. scipy/integrate/_test_multivariate.cp310-win_amd64.pyd +0 -0
  43. scipy/integrate/_test_odeint_banded.cp310-win_amd64.dll.a +0 -0
  44. scipy/integrate/_test_odeint_banded.cp310-win_amd64.pyd +0 -0
  45. scipy/integrate/_vode.cp310-win_amd64.dll.a +0 -0
  46. scipy/integrate/_vode.cp310-win_amd64.pyd +0 -0
  47. scipy/integrate/tests/test_tanhsinh.py +10 -0
  48. scipy/interpolate/_bspl.cp310-win_amd64.dll.a +0 -0
  49. scipy/interpolate/_bspl.cp310-win_amd64.pyd +0 -0
  50. scipy/interpolate/_dfitpack.cp310-win_amd64.dll.a +0 -0
  51. scipy/interpolate/_dfitpack.cp310-win_amd64.pyd +0 -0
  52. scipy/interpolate/_dierckx.cp310-win_amd64.dll.a +0 -0
  53. scipy/interpolate/_dierckx.cp310-win_amd64.pyd +0 -0
  54. scipy/interpolate/_fitpack.cp310-win_amd64.dll.a +0 -0
  55. scipy/interpolate/_fitpack.cp310-win_amd64.pyd +0 -0
  56. scipy/interpolate/_interpnd.cp310-win_amd64.dll.a +0 -0
  57. scipy/interpolate/_interpnd.cp310-win_amd64.pyd +0 -0
  58. scipy/interpolate/_ppoly.cp310-win_amd64.dll.a +0 -0
  59. scipy/interpolate/_ppoly.cp310-win_amd64.pyd +0 -0
  60. scipy/interpolate/_rbfinterp_pythran.cp310-win_amd64.dll.a +0 -0
  61. scipy/interpolate/_rbfinterp_pythran.cp310-win_amd64.pyd +0 -0
  62. scipy/interpolate/_rgi_cython.cp310-win_amd64.dll.a +0 -0
  63. scipy/interpolate/_rgi_cython.cp310-win_amd64.pyd +0 -0
  64. scipy/io/_fast_matrix_market/_fmm_core.cp310-win_amd64.dll.a +0 -0
  65. scipy/io/_fast_matrix_market/_fmm_core.cp310-win_amd64.pyd +0 -0
  66. scipy/io/_test_fortran.cp310-win_amd64.dll.a +0 -0
  67. scipy/io/_test_fortran.cp310-win_amd64.pyd +0 -0
  68. scipy/io/matlab/_mio5_utils.cp310-win_amd64.dll.a +0 -0
  69. scipy/io/matlab/_mio5_utils.cp310-win_amd64.pyd +0 -0
  70. scipy/io/matlab/_mio_utils.cp310-win_amd64.dll.a +0 -0
  71. scipy/io/matlab/_mio_utils.cp310-win_amd64.pyd +0 -0
  72. scipy/io/matlab/_streams.cp310-win_amd64.dll.a +0 -0
  73. scipy/io/matlab/_streams.cp310-win_amd64.pyd +0 -0
  74. scipy/linalg/_cythonized_array_utils.cp310-win_amd64.dll.a +0 -0
  75. scipy/linalg/_cythonized_array_utils.cp310-win_amd64.pyd +0 -0
  76. scipy/linalg/_decomp_interpolative.cp310-win_amd64.dll.a +0 -0
  77. scipy/linalg/_decomp_interpolative.cp310-win_amd64.pyd +0 -0
  78. scipy/linalg/_decomp_lu_cython.cp310-win_amd64.dll.a +0 -0
  79. scipy/linalg/_decomp_lu_cython.cp310-win_amd64.pyd +0 -0
  80. scipy/linalg/_decomp_update.cp310-win_amd64.dll.a +0 -0
  81. scipy/linalg/_decomp_update.cp310-win_amd64.pyd +0 -0
  82. scipy/linalg/_fblas.cp310-win_amd64.dll.a +0 -0
  83. scipy/linalg/_fblas.cp310-win_amd64.pyd +0 -0
  84. scipy/linalg/_flapack.cp310-win_amd64.dll.a +0 -0
  85. scipy/linalg/_flapack.cp310-win_amd64.pyd +0 -0
  86. scipy/linalg/_linalg_pythran.cp310-win_amd64.dll.a +0 -0
  87. scipy/linalg/_linalg_pythran.cp310-win_amd64.pyd +0 -0
  88. scipy/linalg/_matfuncs_expm.cp310-win_amd64.dll.a +0 -0
  89. scipy/linalg/_matfuncs_expm.cp310-win_amd64.pyd +0 -0
  90. scipy/linalg/_matfuncs_sqrtm_triu.cp310-win_amd64.dll.a +0 -0
  91. scipy/linalg/_matfuncs_sqrtm_triu.cp310-win_amd64.pyd +0 -0
  92. scipy/linalg/_solve_toeplitz.cp310-win_amd64.dll.a +0 -0
  93. scipy/linalg/_solve_toeplitz.cp310-win_amd64.pyd +0 -0
  94. scipy/linalg/cython_blas.cp310-win_amd64.dll.a +0 -0
  95. scipy/linalg/cython_blas.cp310-win_amd64.pyd +0 -0
  96. scipy/linalg/cython_lapack.cp310-win_amd64.dll.a +0 -0
  97. scipy/linalg/cython_lapack.cp310-win_amd64.pyd +0 -0
  98. scipy/linalg/tests/test_interpolative.py +17 -0
  99. scipy/ndimage/_ctest.cp310-win_amd64.dll.a +0 -0
  100. scipy/ndimage/_ctest.cp310-win_amd64.pyd +0 -0
  101. scipy/ndimage/_cytest.cp310-win_amd64.dll.a +0 -0
  102. scipy/ndimage/_cytest.cp310-win_amd64.pyd +0 -0
  103. scipy/ndimage/_nd_image.cp310-win_amd64.dll.a +0 -0
  104. scipy/ndimage/_nd_image.cp310-win_amd64.pyd +0 -0
  105. scipy/ndimage/_ndimage_api.py +2 -1
  106. scipy/ndimage/_ni_label.cp310-win_amd64.dll.a +0 -0
  107. scipy/ndimage/_ni_label.cp310-win_amd64.pyd +0 -0
  108. scipy/ndimage/_rank_filter_1d.cp310-win_amd64.dll.a +0 -0
  109. scipy/ndimage/_rank_filter_1d.cp310-win_amd64.pyd +0 -0
  110. scipy/ndimage/tests/test_filters.py +14 -0
  111. scipy/odr/__odrpack.cp310-win_amd64.dll.a +0 -0
  112. scipy/odr/__odrpack.cp310-win_amd64.pyd +0 -0
  113. scipy/optimize/_bglu_dense.cp310-win_amd64.dll.a +0 -0
  114. scipy/optimize/_bglu_dense.cp310-win_amd64.pyd +0 -0
  115. scipy/optimize/_bracket.py +35 -8
  116. scipy/optimize/_cobyla.cp310-win_amd64.dll.a +0 -0
  117. scipy/optimize/_cobyla.cp310-win_amd64.pyd +0 -0
  118. scipy/optimize/_cython_nnls.cp310-win_amd64.dll.a +0 -0
  119. scipy/optimize/_cython_nnls.cp310-win_amd64.pyd +0 -0
  120. scipy/optimize/_direct.cp310-win_amd64.dll.a +0 -0
  121. scipy/optimize/_direct.cp310-win_amd64.pyd +0 -0
  122. scipy/optimize/_group_columns.cp310-win_amd64.dll.a +0 -0
  123. scipy/optimize/_group_columns.cp310-win_amd64.pyd +0 -0
  124. scipy/optimize/_highspy/_core.cp310-win_amd64.dll.a +0 -0
  125. scipy/optimize/_highspy/_core.cp310-win_amd64.pyd +0 -0
  126. scipy/optimize/_highspy/_highs_options.cp310-win_amd64.dll.a +0 -0
  127. scipy/optimize/_highspy/_highs_options.cp310-win_amd64.pyd +0 -0
  128. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  129. scipy/optimize/_lbfgsb.cp310-win_amd64.dll.a +0 -0
  130. scipy/optimize/_lbfgsb.cp310-win_amd64.pyd +0 -0
  131. scipy/optimize/_linprog_highs.py +9 -9
  132. scipy/optimize/_linprog_util.py +4 -3
  133. scipy/optimize/_lsap.cp310-win_amd64.dll.a +0 -0
  134. scipy/optimize/_lsap.cp310-win_amd64.pyd +0 -0
  135. scipy/optimize/_lsq/givens_elimination.cp310-win_amd64.dll.a +0 -0
  136. scipy/optimize/_lsq/givens_elimination.cp310-win_amd64.pyd +0 -0
  137. scipy/optimize/_minpack.cp310-win_amd64.dll.a +0 -0
  138. scipy/optimize/_minpack.cp310-win_amd64.pyd +0 -0
  139. scipy/optimize/_moduleTNC.cp310-win_amd64.dll.a +0 -0
  140. scipy/optimize/_moduleTNC.cp310-win_amd64.pyd +0 -0
  141. scipy/optimize/_pava_pybind.cp310-win_amd64.dll.a +0 -0
  142. scipy/optimize/_pava_pybind.cp310-win_amd64.pyd +0 -0
  143. scipy/optimize/_slsqp.cp310-win_amd64.dll.a +0 -0
  144. scipy/optimize/_slsqp.cp310-win_amd64.pyd +0 -0
  145. scipy/optimize/_trlib/_trlib.cp310-win_amd64.dll.a +0 -0
  146. scipy/optimize/_trlib/_trlib.cp310-win_amd64.pyd +0 -0
  147. scipy/optimize/_zeros.cp310-win_amd64.dll.a +0 -0
  148. scipy/optimize/_zeros.cp310-win_amd64.pyd +0 -0
  149. scipy/optimize/cython_optimize/_zeros.cp310-win_amd64.dll.a +0 -0
  150. scipy/optimize/cython_optimize/_zeros.cp310-win_amd64.pyd +0 -0
  151. scipy/optimize/tests/test_bracket.py +35 -0
  152. scipy/signal/_max_len_seq_inner.cp310-win_amd64.dll.a +0 -0
  153. scipy/signal/_max_len_seq_inner.cp310-win_amd64.pyd +0 -0
  154. scipy/signal/_peak_finding_utils.cp310-win_amd64.dll.a +0 -0
  155. scipy/signal/_peak_finding_utils.cp310-win_amd64.pyd +0 -0
  156. scipy/signal/_short_time_fft.py +34 -6
  157. scipy/signal/_signaltools.py +4 -1
  158. scipy/signal/_sigtools.cp310-win_amd64.dll.a +0 -0
  159. scipy/signal/_sigtools.cp310-win_amd64.pyd +0 -0
  160. scipy/signal/_sosfilt.cp310-win_amd64.dll.a +0 -0
  161. scipy/signal/_sosfilt.cp310-win_amd64.pyd +0 -0
  162. scipy/signal/_spline.cp310-win_amd64.dll.a +0 -0
  163. scipy/signal/_spline.cp310-win_amd64.pyd +0 -0
  164. scipy/signal/_upfirdn_apply.cp310-win_amd64.dll.a +0 -0
  165. scipy/signal/_upfirdn_apply.cp310-win_amd64.pyd +0 -0
  166. scipy/signal/tests/_scipy_spectral_test_shim.py +3 -11
  167. scipy/signal/tests/test_short_time_fft.py +10 -2
  168. scipy/signal/tests/test_signaltools.py +5 -0
  169. scipy/sparse/_base.py +2 -15
  170. scipy/sparse/_compressed.py +0 -3
  171. scipy/sparse/_csparsetools.cp310-win_amd64.dll.a +0 -0
  172. scipy/sparse/_csparsetools.cp310-win_amd64.pyd +0 -0
  173. scipy/sparse/_dia.py +0 -3
  174. scipy/sparse/_sparsetools.cp310-win_amd64.dll.a +0 -0
  175. scipy/sparse/_sparsetools.cp310-win_amd64.pyd +0 -0
  176. scipy/sparse/csgraph/_flow.cp310-win_amd64.dll.a +0 -0
  177. scipy/sparse/csgraph/_flow.cp310-win_amd64.pyd +0 -0
  178. scipy/sparse/csgraph/_matching.cp310-win_amd64.dll.a +0 -0
  179. scipy/sparse/csgraph/_matching.cp310-win_amd64.pyd +0 -0
  180. scipy/sparse/csgraph/_min_spanning_tree.cp310-win_amd64.dll.a +0 -0
  181. scipy/sparse/csgraph/_min_spanning_tree.cp310-win_amd64.pyd +0 -0
  182. scipy/sparse/csgraph/_reordering.cp310-win_amd64.dll.a +0 -0
  183. scipy/sparse/csgraph/_reordering.cp310-win_amd64.pyd +0 -0
  184. scipy/sparse/csgraph/_shortest_path.cp310-win_amd64.dll.a +0 -0
  185. scipy/sparse/csgraph/_shortest_path.cp310-win_amd64.pyd +0 -0
  186. scipy/sparse/csgraph/_tools.cp310-win_amd64.dll.a +0 -0
  187. scipy/sparse/csgraph/_tools.cp310-win_amd64.pyd +0 -0
  188. scipy/sparse/csgraph/_traversal.cp310-win_amd64.dll.a +0 -0
  189. scipy/sparse/csgraph/_traversal.cp310-win_amd64.pyd +0 -0
  190. scipy/sparse/linalg/_dsolve/_superlu.cp310-win_amd64.dll.a +0 -0
  191. scipy/sparse/linalg/_dsolve/_superlu.cp310-win_amd64.pyd +0 -0
  192. scipy/sparse/linalg/_eigen/arpack/_arpack.cp310-win_amd64.dll.a +0 -0
  193. scipy/sparse/linalg/_eigen/arpack/_arpack.cp310-win_amd64.pyd +0 -0
  194. scipy/sparse/linalg/_eigen/arpack/arpack.py +5 -3
  195. scipy/sparse/linalg/_expm_multiply.py +8 -3
  196. scipy/sparse/linalg/_interface.py +12 -8
  197. scipy/sparse/linalg/_isolve/_gcrotmk.py +2 -1
  198. scipy/sparse/linalg/_propack/_cpropack.cp310-win_amd64.dll.a +0 -0
  199. scipy/sparse/linalg/_propack/_cpropack.cp310-win_amd64.pyd +0 -0
  200. scipy/sparse/linalg/_propack/_dpropack.cp310-win_amd64.dll.a +0 -0
  201. scipy/sparse/linalg/_propack/_dpropack.cp310-win_amd64.pyd +0 -0
  202. scipy/sparse/linalg/_propack/_spropack.cp310-win_amd64.dll.a +0 -0
  203. scipy/sparse/linalg/_propack/_spropack.cp310-win_amd64.pyd +0 -0
  204. scipy/sparse/linalg/_propack/_zpropack.cp310-win_amd64.dll.a +0 -0
  205. scipy/sparse/linalg/_propack/_zpropack.cp310-win_amd64.pyd +0 -0
  206. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  207. scipy/sparse/linalg/tests/test_interface.py +35 -0
  208. scipy/sparse/linalg/tests/test_pydata_sparse.py +4 -0
  209. scipy/sparse/tests/test_base.py +12 -0
  210. scipy/sparse/tests/test_common1d.py +11 -6
  211. scipy/spatial/_ckdtree.cp310-win_amd64.dll.a +0 -0
  212. scipy/spatial/_ckdtree.cp310-win_amd64.pyd +0 -0
  213. scipy/spatial/_distance_pybind.cp310-win_amd64.dll.a +0 -0
  214. scipy/spatial/_distance_pybind.cp310-win_amd64.pyd +0 -0
  215. scipy/spatial/_distance_wrap.cp310-win_amd64.dll.a +0 -0
  216. scipy/spatial/_distance_wrap.cp310-win_amd64.pyd +0 -0
  217. scipy/spatial/_hausdorff.cp310-win_amd64.dll.a +0 -0
  218. scipy/spatial/_hausdorff.cp310-win_amd64.pyd +0 -0
  219. scipy/spatial/_qhull.cp310-win_amd64.dll.a +0 -0
  220. scipy/spatial/_qhull.cp310-win_amd64.pyd +0 -0
  221. scipy/spatial/_voronoi.cp310-win_amd64.dll.a +0 -0
  222. scipy/spatial/_voronoi.cp310-win_amd64.pyd +0 -0
  223. scipy/spatial/tests/test_qhull.py +99 -0
  224. scipy/spatial/transform/_rotation.cp310-win_amd64.dll.a +0 -0
  225. scipy/spatial/transform/_rotation.cp310-win_amd64.pyd +0 -0
  226. scipy/spatial/transform/tests/test_rotation.py +181 -10
  227. scipy/special/_comb.cp310-win_amd64.dll.a +0 -0
  228. scipy/special/_comb.cp310-win_amd64.pyd +0 -0
  229. scipy/special/_ellip_harm_2.cp310-win_amd64.dll.a +0 -0
  230. scipy/special/_ellip_harm_2.cp310-win_amd64.pyd +0 -0
  231. scipy/special/_gufuncs.cp310-win_amd64.dll.a +0 -0
  232. scipy/special/_gufuncs.cp310-win_amd64.pyd +0 -0
  233. scipy/special/_logsumexp.py +21 -16
  234. scipy/special/_specfun.cp310-win_amd64.dll.a +0 -0
  235. scipy/special/_specfun.cp310-win_amd64.pyd +0 -0
  236. scipy/special/_special_ufuncs.cp310-win_amd64.dll.a +0 -0
  237. scipy/special/_special_ufuncs.cp310-win_amd64.pyd +0 -0
  238. scipy/special/_test_internal.cp310-win_amd64.dll.a +0 -0
  239. scipy/special/_test_internal.cp310-win_amd64.pyd +0 -0
  240. scipy/special/_ufuncs.cp310-win_amd64.dll.a +0 -0
  241. scipy/special/_ufuncs.cp310-win_amd64.pyd +0 -0
  242. scipy/special/_ufuncs_cxx.cp310-win_amd64.dll.a +0 -0
  243. scipy/special/_ufuncs_cxx.cp310-win_amd64.pyd +0 -0
  244. scipy/special/cython_special.cp310-win_amd64.dll.a +0 -0
  245. scipy/special/cython_special.cp310-win_amd64.pyd +0 -0
  246. scipy/special/libsf_error_state.dll +0 -0
  247. scipy/special/libsf_error_state.dll.a +0 -0
  248. scipy/special/tests/test_hyp2f1.py +21 -0
  249. scipy/special/tests/test_logsumexp.py +14 -0
  250. scipy/special/xsf/hyp2f1.h +3 -3
  251. scipy/stats/_ansari_swilk_statistics.cp310-win_amd64.dll.a +0 -0
  252. scipy/stats/_ansari_swilk_statistics.cp310-win_amd64.pyd +0 -0
  253. scipy/stats/_biasedurn.cp310-win_amd64.dll.a +0 -0
  254. scipy/stats/_biasedurn.cp310-win_amd64.pyd +0 -0
  255. scipy/stats/_continuous_distns.py +25 -15
  256. scipy/stats/_levy_stable/levyst.cp310-win_amd64.dll.a +0 -0
  257. scipy/stats/_levy_stable/levyst.cp310-win_amd64.pyd +0 -0
  258. scipy/stats/_mvn.cp310-win_amd64.dll.a +0 -0
  259. scipy/stats/_mvn.cp310-win_amd64.pyd +0 -0
  260. scipy/stats/_qmc_cy.cp310-win_amd64.dll.a +0 -0
  261. scipy/stats/_qmc_cy.cp310-win_amd64.pyd +0 -0
  262. scipy/stats/_rcont/rcont.cp310-win_amd64.dll.a +0 -0
  263. scipy/stats/_rcont/rcont.cp310-win_amd64.pyd +0 -0
  264. scipy/stats/_sobol.cp310-win_amd64.dll.a +0 -0
  265. scipy/stats/_sobol.cp310-win_amd64.pyd +0 -0
  266. scipy/stats/_stats.cp310-win_amd64.dll.a +0 -0
  267. scipy/stats/_stats.cp310-win_amd64.pyd +0 -0
  268. scipy/stats/_stats_pythran.cp310-win_amd64.dll.a +0 -0
  269. scipy/stats/_stats_pythran.cp310-win_amd64.pyd +0 -0
  270. scipy/stats/_unuran/unuran_wrapper.cp310-win_amd64.dll.a +0 -0
  271. scipy/stats/_unuran/unuran_wrapper.cp310-win_amd64.pyd +0 -0
  272. scipy/stats/tests/test_distributions.py +22 -0
  273. scipy/version.py +2 -2
  274. scipy-1.15.3.dist-info/DELVEWHEEL +2 -0
  275. {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/METADATA +2 -2
  276. {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/RECORD +279 -279
  277. scipy-1.15.2.dist-info/DELVEWHEEL +0 -2
  278. /scipy-1.15.2-cp310-cp310-win_amd64.whl → /scipy-1.15.3-cp310-cp310-win_amd64.whl +0 -0
  279. {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/LICENSE.txt +0 -0
  280. {scipy-1.15.2.dist-info → scipy-1.15.3.dist-info}/WHEEL +0 -0
@@ -5,9 +5,9 @@ from scipy._lib._array_api import (
5
5
  array_namespace,
6
6
  xp_size,
7
7
  xp_broadcast_promote,
8
- xp_real,
9
8
  xp_copy,
10
9
  xp_float_to_complex,
10
+ is_complex,
11
11
  )
12
12
  from scipy._lib import array_api_extra as xpx
13
13
 
@@ -219,25 +219,30 @@ def _logsumexp(a, b, axis, return_sign, xp):
219
219
  s = xp.where(s == 0, s, s/m)
220
220
 
221
221
  # Separate sign/magnitude information
222
- sgn = None
223
- if return_sign:
224
- # Use the numpy>=2.0 convention for sign.
225
- # When all array libraries agree, this can become sng = xp.sign(s).
226
- sgn = _sign(s + 1, xp=xp) * _sign(m, xp=xp)
227
-
228
- if xp.isdtype(s.dtype, "real floating"):
229
- # The log functions need positive arguments
230
- s = xp.where(s < -1, -s - 2, s)
231
- m = xp.abs(m)
232
- else:
233
- # `a_max` can have a sign component for complex input
234
- j = xp.asarray(1j, dtype=a_max.dtype)
235
- sgn = sgn * xp.exp(xp.imag(a_max) * j)
222
+ # Originally, this was only performed if `return_sign=True`.
223
+ # However, this is also needed if any elements of `m < 0` or `s < -1`.
224
+ # An improvement would be to perform the calculations only on these entries.
225
+
226
+ # Use the numpy>=2.0 convention for sign.
227
+ # When all array libraries agree, this can become sng = xp.sign(s).
228
+ sgn = _sign(s + 1, xp=xp) * _sign(m, xp=xp)
229
+
230
+ if xp.isdtype(s.dtype, "real floating"):
231
+ # The log functions need positive arguments
232
+ s = xp.where(s < -1, -s - 2, s)
233
+ m = xp.abs(m)
234
+ else:
235
+ # `a_max` can have a sign component for complex input
236
+ sgn = sgn * xp.exp(xp.imag(a_max) * xp.asarray(1.0j, dtype=a_max.dtype))
236
237
 
237
238
  # Take log and undo shift
238
239
  out = xp.log1p(s) + xp.log(m) + a_max
239
240
 
240
- out = xp_real(out) if return_sign else out
241
+ if return_sign:
242
+ if is_complex(out, xp):
243
+ out = xp.real(out)
244
+ elif xp.isdtype(out.dtype, 'real floating'):
245
+ out[sgn < 0] = xp.nan
241
246
 
242
247
  return out, sgn
243
248
 
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -2543,3 +2543,24 @@ class TestHyp2f1:
2543
2543
  if mark.name == 'parametrize'
2544
2544
  for case in mark.args[1]
2545
2545
  ]
2546
+
2547
+ class TestHyp2f1ExtremeInputs:
2548
+
2549
+ @pytest.mark.parametrize("a", [1.0, 2.0, 3.0, -np.inf, np.inf])
2550
+ @pytest.mark.parametrize("b", [3.0, 4.0, 5.0, -np.inf, np.inf])
2551
+ @pytest.mark.parametrize("c", [3.0, 5.0, 6.0, 7.0])
2552
+ @pytest.mark.parametrize("z", [4.0 + 1.0j])
2553
+ def test_inf_a_b(self, a, b, c, z):
2554
+ if np.any(np.isinf(np.asarray([a, b]))):
2555
+ assert(np.isnan(hyp2f1(a, b, c, z)))
2556
+
2557
+ def test_large_a_b(self):
2558
+ assert(np.isnan(hyp2f1(10**7, 1.0, 3.0, 4.0 + 1.0j)))
2559
+ assert(np.isnan(hyp2f1(-10**7, 1.0, 3.0, 4.0 + 1.0j)))
2560
+
2561
+ assert(np.isnan(hyp2f1(1.0, 10**7, 3.0, 4.0 + 1.0j)))
2562
+ assert(np.isnan(hyp2f1(1.0, -10**7, 3.0, 4.0 + 1.0j)))
2563
+
2564
+ # Already correct in main but testing for surety
2565
+ assert(np.isnan(hyp2f1(np.inf, 1.0, 3.0, 4.0)))
2566
+ assert(np.isnan(hyp2f1(1.0, np.inf, 3.0, 4.0)))
@@ -257,6 +257,20 @@ class TestLogSumExp:
257
257
  xp_assert_close(xp.real(res), xp.real(ref))
258
258
  xp_assert_close(xp.imag(res), xp.imag(ref), atol=0, rtol=1e-15)
259
259
 
260
+ def test_gh22903(self, xp):
261
+ # gh-22903 reported that `logsumexp` produced NaN where the weight associated
262
+ # with the max magnitude element was negative and `return_sign=False`, even if
263
+ # the net result should be the log of a positive number.
264
+
265
+ # result is log of positive number
266
+ a = xp.asarray([3.06409428, 0.37251854, 3.87471931])
267
+ b = xp.asarray([1.88190708, 2.84174795, -0.85016884])
268
+ xp_assert_close(logsumexp(a, b=b), logsumexp(a, b=b, return_sign=True)[0])
269
+
270
+ # result is log of negative number
271
+ b = xp.asarray([1.88190708, 2.84174795, -3.85016884])
272
+ xp_assert_close(logsumexp(a, b=b), xp.asarray(xp.nan))
273
+
260
274
 
261
275
  class TestSoftmax:
262
276
  def test_softmax_fixtures(self):
@@ -553,7 +553,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
553
553
  * the series at a or b of smaller magnitude. This is to ensure proper
554
554
  * handling of situations like a < c < b <= 0, a, b, c all non-positive
555
555
  * integers, where terminating at a would lead to a term of the form 0 / 0. */
556
- std::uint64_t max_degree;
556
+ double max_degree;
557
557
  if (a_neg_int || b_neg_int) {
558
558
  if (a_neg_int && b_neg_int) {
559
559
  max_degree = a > b ? std::abs(a) : std::abs(b);
@@ -562,7 +562,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
562
562
  } else {
563
563
  max_degree = std::abs(b);
564
564
  }
565
- if (max_degree <= UINT64_MAX) {
565
+ if (max_degree <= (double) UINT64_MAX) {
566
566
  auto series_generator = detail::HypergeometricSeriesGenerator(a, b, c, z);
567
567
  return detail::series_eval_fixed_length(series_generator, std::complex<double>{0.0, 0.0}, max_degree + 1);
568
568
  } else {
@@ -583,7 +583,7 @@ XSF_HOST_DEVICE inline std::complex<double> hyp2f1(double a, double b, double c,
583
583
  * (DLMF 15.8.1) */
584
584
  if (c_minus_a_neg_int || c_minus_b_neg_int) {
585
585
  max_degree = c_minus_b_neg_int ? std::abs(c - b) : std::abs(c - a);
586
- if (max_degree <= UINT64_MAX) {
586
+ if (max_degree <= (double) UINT64_MAX) {
587
587
  result = std::pow(1.0 - z, c - a - b);
588
588
  auto series_generator = detail::HypergeometricSeriesGenerator(c - a, c - b, c, z);
589
589
  result *=
Binary file
@@ -3432,29 +3432,39 @@ class genextreme_gen(rv_continuous):
3432
3432
  g3 = g(3)
3433
3433
  g4 = g(4)
3434
3434
  g2mg12 = np.where(abs(c) < 1e-7, (c*np.pi)**2.0/6.0, g2-g1**2.0)
3435
- gam2k = np.where(abs(c) < 1e-7, np.pi**2.0/6.0,
3436
- sc.expm1(sc.gammaln(2.0*c+1.0)-2*sc.gammaln(c + 1.0))/c**2.0)
3435
+ def gam2k_f(c):
3436
+ return sc.expm1(sc.gammaln(2.0*c+1.0)-2*sc.gammaln(c + 1.0))/c**2.0
3437
+ gam2k = _lazywhere(abs(c) >= 1e-7, (c,), f=gam2k_f, fillvalue=np.pi**2.0/6.0)
3437
3438
  eps = 1e-14
3438
- gamk = np.where(abs(c) < eps, -_EULER, sc.expm1(sc.gammaln(c + 1))/c)
3439
+ def gamk_f(c):
3440
+ return sc.expm1(sc.gammaln(c + 1))/c
3441
+ gamk = _lazywhere(abs(c) >= eps, (c,), f=gamk_f, fillvalue=-_EULER)
3439
3442
 
3443
+ # mean
3440
3444
  m = np.where(c < -1.0, np.nan, -gamk)
3445
+
3446
+ # variance
3441
3447
  v = np.where(c < -0.5, np.nan, g1**2.0*gam2k)
3442
3448
 
3443
3449
  # skewness
3444
- sk1 = _lazywhere(c >= -1./3,
3445
- (c, g1, g2, g3, g2mg12),
3446
- lambda c, g1, g2, g3, g2mg12:
3447
- np.sign(c)*(-g3 + (g2 + 2*g2mg12)*g1)/g2mg12**1.5,
3448
- fillvalue=np.nan)
3449
- sk = np.where(abs(c) <= eps**0.29, 12*np.sqrt(6)*_ZETA3/np.pi**3, sk1)
3450
+ def sk1_eval(c, *args):
3451
+ def sk1_eval_f(c, g1, g2, g3, g2mg12):
3452
+ return np.sign(c)*(-g3 + (g2 + 2*g2mg12)*g1)/g2mg12**1.5
3453
+ return _lazywhere(c >= -1./3, (c,)+args, f=sk1_eval_f, fillvalue=np.nan)
3454
+
3455
+ sk_fill = 12*np.sqrt(6)*_ZETA3/np.pi**3
3456
+ args = (g1, g2, g3, g2mg12)
3457
+ sk = _lazywhere(abs(c) > eps**0.29, (c,)+args, f=sk1_eval, fillvalue=sk_fill)
3450
3458
 
3451
3459
  # kurtosis
3452
- ku1 = _lazywhere(c >= -1./4,
3453
- (g1, g2, g3, g4, g2mg12),
3454
- lambda g1, g2, g3, g4, g2mg12:
3455
- (g4 + (-4*g3 + 3*(g2 + g2mg12)*g1)*g1)/g2mg12**2,
3456
- fillvalue=np.nan)
3457
- ku = np.where(abs(c) <= (eps)**0.23, 12.0/5.0, ku1-3.0)
3460
+ def ku1_eval(c, *args):
3461
+ def ku1_eval_f(g1, g2, g3, g4, g2mg12):
3462
+ return (g4 + (-4*g3 + 3*(g2 + g2mg12)*g1)*g1)/g2mg12**2 - 3
3463
+ return _lazywhere(c >= -1./4, args, ku1_eval_f, fillvalue=np.nan)
3464
+
3465
+ args = (g1, g2, g3, g4, g2mg12)
3466
+ ku = _lazywhere(abs(c) > eps**0.23, (c,)+args, f=ku1_eval, fillvalue=12.0/5.0)
3467
+
3458
3468
  return m, v, sk, ku
3459
3469
 
3460
3470
  def _fitstart(self, data):
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -9251,6 +9251,28 @@ def test_genextreme_give_no_warnings():
9251
9251
  assert_equal(number_of_warnings_thrown, 0)
9252
9252
 
9253
9253
 
9254
+ def test_moments_gh22400():
9255
+ # Regression test for gh-22400
9256
+ # Check for correct results at c=0 with no warnings. While we're at it,
9257
+ # check that NaN and sufficiently negative input produce NaNs, and output
9258
+ # with `c=1` also agrees with reference values.
9259
+ res = np.asarray(stats.genextreme.stats([0.0, np.nan, 1, -1.5], moments='mvsk'))
9260
+
9261
+ # Reference values for c=0 (Wikipedia)
9262
+ mean = np.euler_gamma
9263
+ var = np.pi**2 / 6
9264
+ skew = 12 * np.sqrt(6) * special.zeta(3) / np.pi**3
9265
+ kurt = 12 / 5
9266
+ ref_0 = [mean, var, skew, kurt]
9267
+ ref_1 = ref_3 = [np.nan]*4
9268
+ ref_2 = [0, 1, -2, 6] # Wolfram Alpha, MaxStableDistribution[0, 1, -1]
9269
+
9270
+ assert_allclose(res[:, 0], ref_0, rtol=1e-14)
9271
+ assert_equal(res[:, 1], ref_1)
9272
+ assert_allclose(res[:, 2], ref_2, rtol=1e-14)
9273
+ assert_equal(res[:, 3], ref_3)
9274
+
9275
+
9254
9276
  def test_genextreme_entropy():
9255
9277
  # regression test for gh-5181
9256
9278
  euler_gamma = 0.5772156649015329
scipy/version.py CHANGED
@@ -2,10 +2,10 @@
2
2
  """
3
3
  Module to expose more detailed version info for the installed `scipy`
4
4
  """
5
- version = "1.15.2"
5
+ version = "1.15.3"
6
6
  full_version = version
7
7
  short_version = version.split('.dev')[0]
8
- git_revision = "0f1fd4a7268b813fa2b844ca6038e4dfdf90084a"
8
+ git_revision = "e29dcb65a2040f04819b426a04b60d44a8f69c04"
9
9
  release = 'dev' not in version and '+' not in version
10
10
 
11
11
  if not release:
@@ -0,0 +1,2 @@
1
+ Version: 1.10.1
2
+ Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '--add-path', 'C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib', '--no-dll', 'libsf_error_state.dll', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\repaired_wheel', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-6w_ufqtf\\cp310-win_amd64\\built_wheel\\scipy-1.15.3-cp310-cp310-win_amd64.whl']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scipy
3
- Version: 1.15.2
3
+ Version: 1.15.3
4
4
  Summary: Fundamental algorithms for scientific computing in Python
5
5
  Maintainer-Email: SciPy Developers <scipy-dev@python.org>
6
6
  License: Copyright (c) 2001-2002 Enthought, Inc. 2003-2024, SciPy Developers.
@@ -968,7 +968,7 @@ Requires-Dist: numpydoc; extra == "doc"
968
968
  Requires-Dist: jupytext; extra == "doc"
969
969
  Requires-Dist: myst-nb; extra == "doc"
970
970
  Requires-Dist: pooch; extra == "doc"
971
- Requires-Dist: jupyterlite-sphinx>=0.16.5; extra == "doc"
971
+ Requires-Dist: jupyterlite-sphinx>=0.19.1; extra == "doc"
972
972
  Requires-Dist: jupyterlite-pyodide-kernel; extra == "doc"
973
973
  Provides-Extra: dev
974
974
  Requires-Dist: mypy==1.10.0; extra == "dev"