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
scipy/__config__.py CHANGED
@@ -59,7 +59,7 @@ CONFIG = _cleanup(
59
59
  },
60
60
  "pythran": {
61
61
  "version": r"0.17.0",
62
- "include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-k1sc59yc\overlay\Lib\site-packages/pythran"
62
+ "include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-1iowlesx\overlay\Lib\site-packages/pythran"
63
63
  },
64
64
  },
65
65
  "Machine Information": {
@@ -83,8 +83,8 @@ CONFIG = _cleanup(
83
83
  "found": bool("True".lower().replace('false', '')),
84
84
  "version": "0.3.28",
85
85
  "detection method": "pkgconfig",
86
- "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-8da2dz2z/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
87
- "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-8da2dz2z/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
86
+ "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
87
+ "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
88
88
  "openblas configuration": r"OpenBLAS 0.3.28 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=24",
89
89
  "pc file directory": r"D:/a/scipy/scipy",
90
90
  },
@@ -93,8 +93,8 @@ CONFIG = _cleanup(
93
93
  "found": bool("True".lower().replace('false', '')),
94
94
  "version": "0.3.28",
95
95
  "detection method": "pkgconfig",
96
- "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-8da2dz2z/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
97
- "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-8da2dz2z/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
96
+ "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
97
+ "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-6w_ufqtf/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
98
98
  "openblas configuration": r"OpenBLAS 0.3.28 DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=24",
99
99
  "pc file directory": r"D:/a/scipy/scipy",
100
100
  },
@@ -106,7 +106,7 @@ CONFIG = _cleanup(
106
106
  },
107
107
  },
108
108
  "Python Information": {
109
- "path": r"C:\Users\runneradmin\AppData\Local\Temp\cibw-run-8da2dz2z\cp310-win_amd64\build\venv\Scripts\python.exe",
109
+ "path": r"C:\Users\runneradmin\AppData\Local\Temp\cibw-run-6w_ufqtf\cp310-win_amd64\build\venv\Scripts\python.exe",
110
110
  "version": "3.10",
111
111
  },
112
112
  }
scipy/__init__.py CHANGED
@@ -44,14 +44,14 @@ Public API in the main SciPy namespace
44
44
 
45
45
 
46
46
  # start delvewheel patch
47
- def _delvewheel_patch_1_10_0():
47
+ def _delvewheel_patch_1_10_1():
48
48
  import os
49
49
  if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'scipy.libs'))):
50
50
  os.add_dll_directory(libs_dir)
51
51
 
52
52
 
53
- _delvewheel_patch_1_10_0()
54
- del _delvewheel_patch_1_10_0
53
+ _delvewheel_patch_1_10_1()
54
+ del _delvewheel_patch_1_10_1
55
55
  # end delvewheel patch
56
56
 
57
57
  import importlib as _importlib
scipy/_lib/_array_api.py CHANGED
@@ -593,3 +593,14 @@ def xp_float_to_complex(arr: Array, xp: ModuleType | None = None) -> Array:
593
593
  arr = xp.astype(arr, xp.complex128)
594
594
 
595
595
  return arr
596
+
597
+
598
+ def xp_default_dtype(xp):
599
+ """Query the namespace-dependent default floating-point dtype.
600
+ """
601
+ if is_torch(xp):
602
+ # historically, we allow pytorch to keep its default of float32
603
+ return xp.get_default_dtype()
604
+ else:
605
+ # we default to float64
606
+ return xp.float64
Binary file
Binary file
Binary file
@@ -4,7 +4,7 @@ import pytest
4
4
  from scipy.conftest import array_api_compatible
5
5
  from scipy._lib._array_api import (
6
6
  _GLOBAL_CONFIG, array_namespace, _asarray, xp_copy, xp_assert_equal, is_numpy,
7
- np_compat,
7
+ np_compat, xp_default_dtype
8
8
  )
9
9
  from scipy._lib._array_api_no_0d import xp_assert_equal as xp_assert_equal_no_0d
10
10
 
@@ -185,3 +185,7 @@ class TestArrayAPI:
185
185
  # scalars-vs-0d passes (if values match) also with regular python objects
186
186
  xp_assert_equal_no_0d(0., xp.asarray(0.))
187
187
  xp_assert_equal_no_0d(42, xp.asarray(42))
188
+
189
+ @array_api_compatible
190
+ def test_default_dtype(self, xp):
191
+ assert xp_default_dtype(xp) == xp.asarray(1.).dtype
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -65,7 +65,7 @@ def norm(x):
65
65
  return np.linalg.norm(x) / x.size ** 0.5
66
66
 
67
67
 
68
- def select_initial_step(fun, t0, y0, t_bound,
68
+ def select_initial_step(fun, t0, y0, t_bound,
69
69
  max_step, f0, direction, order, rtol, atol):
70
70
  """Empirically select a good initial step.
71
71
 
@@ -80,7 +80,7 @@ def select_initial_step(fun, t0, y0, t_bound,
80
80
  y0 : ndarray, shape (n,)
81
81
  Initial value of the dependent variable.
82
82
  t_bound : float
83
- End-point of integration interval; used to ensure that t0+step<=tbound
83
+ End-point of integration interval; used to ensure that t0+step<=tbound
84
84
  and that fun is only evaluated in the interval [t0,tbound]
85
85
  max_step : float
86
86
  Maximum allowable step size.
@@ -112,7 +112,7 @@ def select_initial_step(fun, t0, y0, t_bound,
112
112
  interval_length = abs(t_bound - t0)
113
113
  if interval_length == 0.0:
114
114
  return 0.0
115
-
115
+
116
116
  scale = atol + np.abs(y0) * rtol
117
117
  d0 = norm(y0 / scale)
118
118
  d1 = norm(f0 / scale)
@@ -694,8 +694,15 @@ def solve_ivp(fun, t_span, y0, method='RK45', t_eval=None, dense_output=False,
694
694
  g = g_new
695
695
 
696
696
  if t_eval is None:
697
- ts.append(t)
698
- ys.append(y)
697
+ donot_append = (len(ts) > 1 and
698
+ ts[-1] == t and
699
+ dense_output)
700
+ if not donot_append:
701
+ ts.append(t)
702
+ ys.append(y)
703
+ else:
704
+ if len(interpolants) > 0:
705
+ interpolants.pop()
699
706
  else:
700
707
  # The value in t_eval equal to t will be included.
701
708
  if solver.direction > 0:
@@ -151,6 +151,25 @@ def compute_error(y, y_true, rtol, atol):
151
151
  e = (y - y_true) / (atol + rtol * np.abs(y_true))
152
152
  return np.linalg.norm(e, axis=0) / np.sqrt(e.shape[0])
153
153
 
154
+ def test_duplicate_timestamps():
155
+ def upward_cannon(t, y):
156
+ return [y[1], -9.80665]
157
+
158
+ def hit_ground(t, y):
159
+ return y[0]
160
+
161
+ hit_ground.terminal = True
162
+ hit_ground.direction = -1
163
+
164
+ sol = solve_ivp(upward_cannon, [0, np.inf], [0, 0.01],
165
+ max_step=0.05 * 0.001 / 9.80665,
166
+ events=hit_ground, dense_output=True)
167
+ assert_allclose(sol.sol(0.01), np.asarray([-0.00039033, -0.08806632]),
168
+ rtol=1e-5, atol=1e-8)
169
+ assert_allclose(sol.t_events, np.asarray([[0.00203943]]), rtol=1e-5, atol=1e-8)
170
+ assert_allclose(sol.y_events, [np.asarray([[ 0.0, -0.01 ]])], atol=1e-9)
171
+ assert sol.success
172
+ assert_equal(sol.status, 1)
154
173
 
155
174
  @pytest.mark.thread_unsafe
156
175
  def test_integration():
Binary file
@@ -98,8 +98,9 @@ def tanhsinh(f, a, b, *, args=(), log=False, maxlevel=None, minlevel=2,
98
98
  Absolute termination tolerance (default: 0) and relative termination
99
99
  tolerance (default: ``eps**0.75``, where ``eps`` is the precision of
100
100
  the result dtype), respectively. Iteration will stop when
101
- ``res.error < atol + rtol * abs(res.df)``. The error estimate is as
102
- described in [1]_ Section 5. While not theoretically rigorous or
101
+ ``res.error < atol`` or ``res.error < res.integral * rtol``. The error
102
+ estimate is as described in [1]_ Section 5 but with a lower bound of
103
+ ``eps * res.integral``. While not theoretically rigorous or
103
104
  conservative, it is said to work well in practice. Must be non-negative
104
105
  and finite if `log` is False, and must be expressed as the log of a
105
106
  non-negative and finite number if `log` is True.
@@ -445,9 +446,9 @@ def tanhsinh(f, a, b, *, args=(), log=False, maxlevel=None, minlevel=2,
445
446
  stop[i] = True
446
447
  else:
447
448
  # Terminate if convergence criterion is met
448
- work.rerr, work.aerr = _estimate_error(work, xp)
449
- i = ((work.rerr < rtol) | (work.rerr + xp_real(work.Sn) < atol) if log
450
- else (work.rerr < rtol) | (work.rerr * xp.abs(work.Sn) < atol))
449
+ rerr, aerr = _estimate_error(work, xp)
450
+ i = (rerr < rtol) | (aerr < atol)
451
+ work.aerr = xp.reshape(xp.astype(aerr, work.dtype), work.Sn.shape)
451
452
  work.status[i] = eim._ECONVERGED
452
453
  stop[i] = True
453
454
 
@@ -772,22 +773,23 @@ def _estimate_error(work, xp):
772
773
  d2 = xp_real(special.logsumexp(xp.stack([work.Sn, Snm2 + work.pi*1j]), axis=0))
773
774
  d3 = log_e1 + xp.max(xp_real(work.fjwj), axis=-1)
774
775
  d4 = work.d4
775
- ds = xp.stack([d1 ** 2 / d2, 2 * d1, d3, d4])
776
+ d5 = log_e1 + xp.real(work.Sn)
777
+ temp = xp.where(d1 > -xp.inf, d1 ** 2 / d2, -xp.inf)
778
+ ds = xp.stack([temp, 2 * d1, d3, d4, d5])
776
779
  aerr = xp.max(ds, axis=0)
777
- rerr = xp.maximum(log_e1, aerr - xp_real(work.Sn))
780
+ rerr = aerr - xp.real(work.Sn)
778
781
  else:
779
782
  # Note: explicit computation of log10 of each of these is unnecessary.
780
783
  d1 = xp.abs(work.Sn - Snm1)
781
784
  d2 = xp.abs(work.Sn - Snm2)
782
785
  d3 = e1 * xp.max(xp.abs(work.fjwj), axis=-1)
783
786
  d4 = work.d4
784
- # If `d1` is 0, no need to warn. This does the right thing.
785
- # with np.errstate(divide='ignore'):
786
- ds = xp.stack([d1**(xp.log(d1)/xp.log(d2)), d1**2, d3, d4])
787
+ d5 = e1 * xp.abs(work.Sn)
788
+ temp = xp.where(d1 > 0, d1**(xp.log(d1)/xp.log(d2)), 0)
789
+ ds = xp.stack([temp, d1**2, d3, d4, d5])
787
790
  aerr = xp.max(ds, axis=0)
788
- rerr = xp.maximum(e1, aerr/xp.abs(work.Sn))
791
+ rerr = aerr/xp.abs(work.Sn)
789
792
 
790
- aerr = xp.reshape(xp.astype(aerr, work.dtype), work.Sn.shape)
791
793
  return rerr, aerr
792
794
 
793
795
 
Binary file
Binary file
@@ -753,6 +753,16 @@ class TestTanhSinh:
753
753
  x[-1] = 1000
754
754
  _tanhsinh(np.sin, 1, x)
755
755
 
756
+ def test_gh_22681_finite_error(self, xp):
757
+ # gh-22681 noted a case in which the error was NaN on some platforms;
758
+ # check that this does in fact fail in CI.
759
+ a = complex(12, -10)
760
+ b = complex(12, 39)
761
+ def f(t):
762
+ return xp.sin(a * (1 - t) + b * t)
763
+ res = _tanhsinh(f, xp.asarray(0.), xp.asarray(1.), atol=0, rtol=0, maxlevel=10)
764
+ assert xp.isfinite(res.error)
765
+
756
766
 
757
767
  @array_api_compatible
758
768
  @pytest.mark.usefixtures("skip_xp_backends")
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -213,3 +213,20 @@ class TestInterpolativeDecomposition:
213
213
  B = A.copy()
214
214
  interp_decomp(A.T, eps, rand=rand)
215
215
  assert_array_equal(A, B)
216
+
217
+ def test_svd_aslinearoperator_shape_check(self):
218
+ # See gh-issue #22451
219
+ rng = np.random.default_rng(1744580941832515)
220
+ x = rng.uniform(size=[7, 5])
221
+ xl = aslinearoperator(x)
222
+ u, s, v = pymatrixid.svd(xl, 3)
223
+ assert_equal(u.shape, (7, 3))
224
+ assert_equal(s.shape, (3,))
225
+ assert_equal(v.shape, (5, 3))
226
+
227
+ x = rng.uniform(size=[4, 9])
228
+ xl = aslinearoperator(x)
229
+ u, s, v = pymatrixid.svd(xl, 2)
230
+ assert_equal(u.shape, (4, 2))
231
+ assert_equal(s.shape, (2,))
232
+ assert_equal(v.shape, (9, 2))
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -12,4 +12,5 @@ from ._interpolation import * # noqa: F403
12
12
  from ._measurements import * # noqa: F403
13
13
  from ._morphology import * # noqa: F403
14
14
 
15
- __all__ = [s for s in dir() if not s.startswith('_')]
15
+ # '@' due to pytest bug, scipy/scipy#22236
16
+ __all__ = [s for s in dir() if not s.startswith(('_', '@'))]
Binary file
@@ -6,6 +6,9 @@ import re
6
6
  import numpy as np
7
7
  import pytest
8
8
  from numpy.testing import suppress_warnings, assert_allclose, assert_array_equal
9
+ from hypothesis import strategies as st
10
+ from hypothesis import given
11
+ import hypothesis.extra.numpy as npst
9
12
  from pytest import raises as assert_raises
10
13
  from scipy import ndimage
11
14
  from scipy._lib._array_api import (
@@ -2904,3 +2907,14 @@ def test_gh_22333():
2904
2907
  expected = [58, 67, 87, 108, 163, 108, 108, 108, 87]
2905
2908
  actual = ndimage.median_filter(x, size=9, mode='constant')
2906
2909
  assert_array_equal(actual, expected)
2910
+
2911
+
2912
+ @given(x=npst.arrays(dtype=np.float64,
2913
+ shape=st.integers(min_value=1, max_value=1000)),
2914
+ size=st.integers(min_value=1, max_value=50),
2915
+ mode=st.sampled_from(["constant", "mirror", "wrap", "reflect",
2916
+ "nearest"]),
2917
+ )
2918
+ def test_gh_22586_crash_property(x, size, mode):
2919
+ # property-based test for median_filter resilience to hard crashing
2920
+ ndimage.median_filter(x, size=size, mode=mode)
Binary file
Binary file