scipy 1.16.0rc1__cp313-cp313-win_amd64.whl → 1.16.0rc2__cp313-cp313-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 (253) hide show
  1. scipy/__config__.py +7 -7
  2. scipy/_cyutility.cp313-win_amd64.dll.a +0 -0
  3. scipy/_cyutility.cp313-win_amd64.pyd +0 -0
  4. scipy/_lib/_ccallback_c.cp313-win_amd64.dll.a +0 -0
  5. scipy/_lib/_ccallback_c.cp313-win_amd64.pyd +0 -0
  6. scipy/_lib/_fpumode.cp313-win_amd64.dll.a +0 -0
  7. scipy/_lib/_fpumode.cp313-win_amd64.pyd +0 -0
  8. scipy/_lib/_test_ccallback.cp313-win_amd64.dll.a +0 -0
  9. scipy/_lib/_test_ccallback.cp313-win_amd64.pyd +0 -0
  10. scipy/_lib/_test_deprecation_call.cp313-win_amd64.dll.a +0 -0
  11. scipy/_lib/_test_deprecation_call.cp313-win_amd64.pyd +0 -0
  12. scipy/_lib/_test_deprecation_def.cp313-win_amd64.dll.a +0 -0
  13. scipy/_lib/_test_deprecation_def.cp313-win_amd64.pyd +0 -0
  14. scipy/_lib/_uarray/_uarray.cp313-win_amd64.dll.a +0 -0
  15. scipy/_lib/_uarray/_uarray.cp313-win_amd64.pyd +0 -0
  16. scipy/_lib/messagestream.cp313-win_amd64.dll.a +0 -0
  17. scipy/_lib/messagestream.cp313-win_amd64.pyd +0 -0
  18. scipy/cluster/_hierarchy.cp313-win_amd64.dll.a +0 -0
  19. scipy/cluster/_hierarchy.cp313-win_amd64.pyd +0 -0
  20. scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.dll.a +0 -0
  21. scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.pyd +0 -0
  22. scipy/cluster/_vq.cp313-win_amd64.dll.a +0 -0
  23. scipy/cluster/_vq.cp313-win_amd64.pyd +0 -0
  24. scipy/fft/_pocketfft/pypocketfft.cp313-win_amd64.dll.a +0 -0
  25. scipy/fft/_pocketfft/pypocketfft.cp313-win_amd64.pyd +0 -0
  26. scipy/fftpack/convolve.cp313-win_amd64.dll.a +0 -0
  27. scipy/fftpack/convolve.cp313-win_amd64.pyd +0 -0
  28. scipy/integrate/_dop.cp313-win_amd64.dll.a +0 -0
  29. scipy/integrate/_dop.cp313-win_amd64.pyd +0 -0
  30. scipy/integrate/_lsoda.cp313-win_amd64.dll.a +0 -0
  31. scipy/integrate/_lsoda.cp313-win_amd64.pyd +0 -0
  32. scipy/integrate/_odepack.cp313-win_amd64.dll.a +0 -0
  33. scipy/integrate/_odepack.cp313-win_amd64.pyd +0 -0
  34. scipy/integrate/_quadpack.cp313-win_amd64.dll.a +0 -0
  35. scipy/integrate/_quadpack.cp313-win_amd64.pyd +0 -0
  36. scipy/integrate/_test_multivariate.cp313-win_amd64.dll.a +0 -0
  37. scipy/integrate/_test_multivariate.cp313-win_amd64.pyd +0 -0
  38. scipy/integrate/_test_odeint_banded.cp313-win_amd64.dll.a +0 -0
  39. scipy/integrate/_test_odeint_banded.cp313-win_amd64.pyd +0 -0
  40. scipy/integrate/_vode.cp313-win_amd64.dll.a +0 -0
  41. scipy/integrate/_vode.cp313-win_amd64.pyd +0 -0
  42. scipy/interpolate/_dfitpack.cp313-win_amd64.dll.a +0 -0
  43. scipy/interpolate/_dfitpack.cp313-win_amd64.pyd +0 -0
  44. scipy/interpolate/_dierckx.cp313-win_amd64.dll.a +0 -0
  45. scipy/interpolate/_dierckx.cp313-win_amd64.pyd +0 -0
  46. scipy/interpolate/_fitpack.cp313-win_amd64.dll.a +0 -0
  47. scipy/interpolate/_fitpack.cp313-win_amd64.pyd +0 -0
  48. scipy/interpolate/_interpnd.cp313-win_amd64.dll.a +0 -0
  49. scipy/interpolate/_interpnd.cp313-win_amd64.pyd +0 -0
  50. scipy/interpolate/_ppoly.cp313-win_amd64.dll.a +0 -0
  51. scipy/interpolate/_ppoly.cp313-win_amd64.pyd +0 -0
  52. scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.dll.a +0 -0
  53. scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.pyd +0 -0
  54. scipy/interpolate/_rgi_cython.cp313-win_amd64.dll.a +0 -0
  55. scipy/interpolate/_rgi_cython.cp313-win_amd64.pyd +0 -0
  56. scipy/io/_fast_matrix_market/_fmm_core.cp313-win_amd64.dll.a +0 -0
  57. scipy/io/_fast_matrix_market/_fmm_core.cp313-win_amd64.pyd +0 -0
  58. scipy/io/_test_fortran.cp313-win_amd64.dll.a +0 -0
  59. scipy/io/_test_fortran.cp313-win_amd64.pyd +0 -0
  60. scipy/io/matlab/_mio5_utils.cp313-win_amd64.dll.a +0 -0
  61. scipy/io/matlab/_mio5_utils.cp313-win_amd64.pyd +0 -0
  62. scipy/io/matlab/_mio_utils.cp313-win_amd64.dll.a +0 -0
  63. scipy/io/matlab/_mio_utils.cp313-win_amd64.pyd +0 -0
  64. scipy/io/matlab/_streams.cp313-win_amd64.dll.a +0 -0
  65. scipy/io/matlab/_streams.cp313-win_amd64.pyd +0 -0
  66. scipy/linalg/_cythonized_array_utils.cp313-win_amd64.dll.a +0 -0
  67. scipy/linalg/_cythonized_array_utils.cp313-win_amd64.pyd +0 -0
  68. scipy/linalg/_decomp_interpolative.cp313-win_amd64.dll.a +0 -0
  69. scipy/linalg/_decomp_interpolative.cp313-win_amd64.pyd +0 -0
  70. scipy/linalg/_decomp_lu_cython.cp313-win_amd64.dll.a +0 -0
  71. scipy/linalg/_decomp_lu_cython.cp313-win_amd64.pyd +0 -0
  72. scipy/linalg/_decomp_update.cp313-win_amd64.dll.a +0 -0
  73. scipy/linalg/_decomp_update.cp313-win_amd64.pyd +0 -0
  74. scipy/linalg/_fblas.cp313-win_amd64.dll.a +0 -0
  75. scipy/linalg/_fblas.cp313-win_amd64.pyd +0 -0
  76. scipy/linalg/_flapack.cp313-win_amd64.dll.a +0 -0
  77. scipy/linalg/_flapack.cp313-win_amd64.pyd +0 -0
  78. scipy/linalg/_linalg_pythran.cp313-win_amd64.dll.a +0 -0
  79. scipy/linalg/_linalg_pythran.cp313-win_amd64.pyd +0 -0
  80. scipy/linalg/_matfuncs_expm.cp313-win_amd64.dll.a +0 -0
  81. scipy/linalg/_matfuncs_expm.cp313-win_amd64.pyd +0 -0
  82. scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.dll.a +0 -0
  83. scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.pyd +0 -0
  84. scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.dll.a +0 -0
  85. scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.pyd +0 -0
  86. scipy/linalg/_solve_toeplitz.cp313-win_amd64.dll.a +0 -0
  87. scipy/linalg/_solve_toeplitz.cp313-win_amd64.pyd +0 -0
  88. scipy/linalg/cython_blas.cp313-win_amd64.dll.a +0 -0
  89. scipy/linalg/cython_blas.cp313-win_amd64.pyd +0 -0
  90. scipy/linalg/cython_lapack.cp313-win_amd64.dll.a +0 -0
  91. scipy/linalg/cython_lapack.cp313-win_amd64.pyd +0 -0
  92. scipy/ndimage/_ctest.cp313-win_amd64.dll.a +0 -0
  93. scipy/ndimage/_ctest.cp313-win_amd64.pyd +0 -0
  94. scipy/ndimage/_cytest.cp313-win_amd64.dll.a +0 -0
  95. scipy/ndimage/_cytest.cp313-win_amd64.pyd +0 -0
  96. scipy/ndimage/_filters.py +41 -21
  97. scipy/ndimage/_nd_image.cp313-win_amd64.dll.a +0 -0
  98. scipy/ndimage/_nd_image.cp313-win_amd64.pyd +0 -0
  99. scipy/ndimage/_ni_label.cp313-win_amd64.dll.a +0 -0
  100. scipy/ndimage/_ni_label.cp313-win_amd64.pyd +0 -0
  101. scipy/ndimage/_rank_filter_1d.cp313-win_amd64.dll.a +0 -0
  102. scipy/ndimage/_rank_filter_1d.cp313-win_amd64.pyd +0 -0
  103. scipy/ndimage/tests/test_filters.py +42 -9
  104. scipy/odr/__odrpack.cp313-win_amd64.dll.a +0 -0
  105. scipy/odr/__odrpack.cp313-win_amd64.pyd +0 -0
  106. scipy/optimize/_bglu_dense.cp313-win_amd64.dll.a +0 -0
  107. scipy/optimize/_bglu_dense.cp313-win_amd64.pyd +0 -0
  108. scipy/optimize/_direct.cp313-win_amd64.dll.a +0 -0
  109. scipy/optimize/_direct.cp313-win_amd64.pyd +0 -0
  110. scipy/optimize/_group_columns.cp313-win_amd64.dll.a +0 -0
  111. scipy/optimize/_group_columns.cp313-win_amd64.pyd +0 -0
  112. scipy/optimize/_highspy/_core.cp313-win_amd64.dll.a +0 -0
  113. scipy/optimize/_highspy/_core.cp313-win_amd64.pyd +0 -0
  114. scipy/optimize/_highspy/_highs_options.cp313-win_amd64.dll.a +0 -0
  115. scipy/optimize/_highspy/_highs_options.cp313-win_amd64.pyd +0 -0
  116. scipy/optimize/_lbfgsb.cp313-win_amd64.dll.a +0 -0
  117. scipy/optimize/_lbfgsb.cp313-win_amd64.pyd +0 -0
  118. scipy/optimize/_lsap.cp313-win_amd64.dll.a +0 -0
  119. scipy/optimize/_lsap.cp313-win_amd64.pyd +0 -0
  120. scipy/optimize/_lsq/givens_elimination.cp313-win_amd64.dll.a +0 -0
  121. scipy/optimize/_lsq/givens_elimination.cp313-win_amd64.pyd +0 -0
  122. scipy/optimize/_minpack.cp313-win_amd64.dll.a +0 -0
  123. scipy/optimize/_minpack.cp313-win_amd64.pyd +0 -0
  124. scipy/optimize/_moduleTNC.cp313-win_amd64.dll.a +0 -0
  125. scipy/optimize/_moduleTNC.cp313-win_amd64.pyd +0 -0
  126. scipy/optimize/_pava_pybind.cp313-win_amd64.dll.a +0 -0
  127. scipy/optimize/_pava_pybind.cp313-win_amd64.pyd +0 -0
  128. scipy/optimize/_slsqplib.cp313-win_amd64.dll.a +0 -0
  129. scipy/optimize/_slsqplib.cp313-win_amd64.pyd +0 -0
  130. scipy/optimize/_trlib/_trlib.cp313-win_amd64.dll.a +0 -0
  131. scipy/optimize/_trlib/_trlib.cp313-win_amd64.pyd +0 -0
  132. scipy/optimize/_zeros.cp313-win_amd64.dll.a +0 -0
  133. scipy/optimize/_zeros.cp313-win_amd64.pyd +0 -0
  134. scipy/optimize/cython_optimize/_zeros.cp313-win_amd64.dll.a +0 -0
  135. scipy/optimize/cython_optimize/_zeros.cp313-win_amd64.pyd +0 -0
  136. scipy/optimize/tests/test_lsq_linear.py +1 -1
  137. scipy/signal/_max_len_seq_inner.cp313-win_amd64.dll.a +0 -0
  138. scipy/signal/_max_len_seq_inner.cp313-win_amd64.pyd +0 -0
  139. scipy/signal/_peak_finding_utils.cp313-win_amd64.dll.a +0 -0
  140. scipy/signal/_peak_finding_utils.cp313-win_amd64.pyd +0 -0
  141. scipy/signal/_sigtools.cp313-win_amd64.dll.a +0 -0
  142. scipy/signal/_sigtools.cp313-win_amd64.pyd +0 -0
  143. scipy/signal/_sosfilt.cp313-win_amd64.dll.a +0 -0
  144. scipy/signal/_sosfilt.cp313-win_amd64.pyd +0 -0
  145. scipy/signal/_spectral_py.py +9 -0
  146. scipy/signal/_spline.cp313-win_amd64.dll.a +0 -0
  147. scipy/signal/_spline.cp313-win_amd64.pyd +0 -0
  148. scipy/signal/_upfirdn_apply.cp313-win_amd64.dll.a +0 -0
  149. scipy/signal/_upfirdn_apply.cp313-win_amd64.pyd +0 -0
  150. scipy/signal/tests/test_spectral.py +31 -0
  151. scipy/sparse/_base.py +1 -1
  152. scipy/sparse/_csparsetools.cp313-win_amd64.dll.a +0 -0
  153. scipy/sparse/_csparsetools.cp313-win_amd64.pyd +0 -0
  154. scipy/sparse/_sparsetools.cp313-win_amd64.dll.a +0 -0
  155. scipy/sparse/_sparsetools.cp313-win_amd64.pyd +0 -0
  156. scipy/sparse/csgraph/_flow.cp313-win_amd64.dll.a +0 -0
  157. scipy/sparse/csgraph/_flow.cp313-win_amd64.pyd +0 -0
  158. scipy/sparse/csgraph/_matching.cp313-win_amd64.dll.a +0 -0
  159. scipy/sparse/csgraph/_matching.cp313-win_amd64.pyd +0 -0
  160. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.dll.a +0 -0
  161. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.pyd +0 -0
  162. scipy/sparse/csgraph/_reordering.cp313-win_amd64.dll.a +0 -0
  163. scipy/sparse/csgraph/_reordering.cp313-win_amd64.pyd +0 -0
  164. scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.dll.a +0 -0
  165. scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.pyd +0 -0
  166. scipy/sparse/csgraph/_tools.cp313-win_amd64.dll.a +0 -0
  167. scipy/sparse/csgraph/_tools.cp313-win_amd64.pyd +0 -0
  168. scipy/sparse/csgraph/_traversal.cp313-win_amd64.dll.a +0 -0
  169. scipy/sparse/csgraph/_traversal.cp313-win_amd64.pyd +0 -0
  170. scipy/sparse/linalg/_dsolve/_superlu.cp313-win_amd64.dll.a +0 -0
  171. scipy/sparse/linalg/_dsolve/_superlu.cp313-win_amd64.pyd +0 -0
  172. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_amd64.dll.a +0 -0
  173. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_amd64.pyd +0 -0
  174. scipy/sparse/linalg/_propack/_cpropack.cp313-win_amd64.dll.a +0 -0
  175. scipy/sparse/linalg/_propack/_cpropack.cp313-win_amd64.pyd +0 -0
  176. scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.dll.a +0 -0
  177. scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.pyd +0 -0
  178. scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.dll.a +0 -0
  179. scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.pyd +0 -0
  180. scipy/sparse/linalg/_propack/_zpropack.cp313-win_amd64.dll.a +0 -0
  181. scipy/sparse/linalg/_propack/_zpropack.cp313-win_amd64.pyd +0 -0
  182. scipy/sparse/tests/test_base.py +7 -0
  183. scipy/spatial/_ckdtree.cp313-win_amd64.dll.a +0 -0
  184. scipy/spatial/_ckdtree.cp313-win_amd64.pyd +0 -0
  185. scipy/spatial/_distance_pybind.cp313-win_amd64.dll.a +0 -0
  186. scipy/spatial/_distance_pybind.cp313-win_amd64.pyd +0 -0
  187. scipy/spatial/_distance_wrap.cp313-win_amd64.dll.a +0 -0
  188. scipy/spatial/_distance_wrap.cp313-win_amd64.pyd +0 -0
  189. scipy/spatial/_hausdorff.cp313-win_amd64.dll.a +0 -0
  190. scipy/spatial/_hausdorff.cp313-win_amd64.pyd +0 -0
  191. scipy/spatial/_qhull.cp313-win_amd64.dll.a +0 -0
  192. scipy/spatial/_qhull.cp313-win_amd64.pyd +0 -0
  193. scipy/spatial/_voronoi.cp313-win_amd64.dll.a +0 -0
  194. scipy/spatial/_voronoi.cp313-win_amd64.pyd +0 -0
  195. scipy/spatial/tests/test_distance.py +12 -0
  196. scipy/spatial/transform/_rigid_transform.cp313-win_amd64.dll.a +0 -0
  197. scipy/spatial/transform/_rigid_transform.cp313-win_amd64.pyd +0 -0
  198. scipy/spatial/transform/_rotation.cp313-win_amd64.dll.a +0 -0
  199. scipy/spatial/transform/_rotation.cp313-win_amd64.pyd +0 -0
  200. scipy/special/_comb.cp313-win_amd64.dll.a +0 -0
  201. scipy/special/_comb.cp313-win_amd64.pyd +0 -0
  202. scipy/special/_ellip_harm_2.cp313-win_amd64.dll.a +0 -0
  203. scipy/special/_ellip_harm_2.cp313-win_amd64.pyd +0 -0
  204. scipy/special/_gufuncs.cp313-win_amd64.dll.a +0 -0
  205. scipy/special/_gufuncs.cp313-win_amd64.pyd +0 -0
  206. scipy/special/_specfun.cp313-win_amd64.dll.a +0 -0
  207. scipy/special/_specfun.cp313-win_amd64.pyd +0 -0
  208. scipy/special/_special_ufuncs.cp313-win_amd64.dll.a +0 -0
  209. scipy/special/_special_ufuncs.cp313-win_amd64.pyd +0 -0
  210. scipy/special/_test_internal.cp313-win_amd64.dll.a +0 -0
  211. scipy/special/_test_internal.cp313-win_amd64.pyd +0 -0
  212. scipy/special/_ufuncs.cp313-win_amd64.dll.a +0 -0
  213. scipy/special/_ufuncs.cp313-win_amd64.pyd +0 -0
  214. scipy/special/_ufuncs_cxx.cp313-win_amd64.dll.a +0 -0
  215. scipy/special/_ufuncs_cxx.cp313-win_amd64.pyd +0 -0
  216. scipy/special/cython_special.cp313-win_amd64.dll.a +0 -0
  217. scipy/special/cython_special.cp313-win_amd64.pyd +0 -0
  218. scipy/stats/_ansari_swilk_statistics.cp313-win_amd64.dll.a +0 -0
  219. scipy/stats/_ansari_swilk_statistics.cp313-win_amd64.pyd +0 -0
  220. scipy/stats/_axis_nan_policy.py +1 -9
  221. scipy/stats/_biasedurn.cp313-win_amd64.dll.a +0 -0
  222. scipy/stats/_biasedurn.cp313-win_amd64.pyd +0 -0
  223. scipy/stats/_correlation.py +1 -1
  224. scipy/stats/_entropy.py +2 -2
  225. scipy/stats/_hypotests.py +1 -1
  226. scipy/stats/_levy_stable/levyst.cp313-win_amd64.dll.a +0 -0
  227. scipy/stats/_levy_stable/levyst.cp313-win_amd64.pyd +0 -0
  228. scipy/stats/_morestats.py +7 -7
  229. scipy/stats/_qmc_cy.cp313-win_amd64.dll.a +0 -0
  230. scipy/stats/_qmc_cy.cp313-win_amd64.pyd +0 -0
  231. scipy/stats/_qmvnt_cy.cp313-win_amd64.dll.a +0 -0
  232. scipy/stats/_qmvnt_cy.cp313-win_amd64.pyd +0 -0
  233. scipy/stats/_rcont/rcont.cp313-win_amd64.dll.a +0 -0
  234. scipy/stats/_rcont/rcont.cp313-win_amd64.pyd +0 -0
  235. scipy/stats/_sobol.cp313-win_amd64.dll.a +0 -0
  236. scipy/stats/_sobol.cp313-win_amd64.pyd +0 -0
  237. scipy/stats/_stats.cp313-win_amd64.dll.a +0 -0
  238. scipy/stats/_stats.cp313-win_amd64.pyd +0 -0
  239. scipy/stats/_stats_mstats_common.py +4 -2
  240. scipy/stats/_stats_py.py +18 -18
  241. scipy/stats/_stats_pythran.cp313-win_amd64.dll.a +0 -0
  242. scipy/stats/_stats_pythran.cp313-win_amd64.pyd +0 -0
  243. scipy/stats/_unuran/unuran_wrapper.cp313-win_amd64.dll.a +0 -0
  244. scipy/stats/_unuran/unuran_wrapper.cp313-win_amd64.pyd +0 -0
  245. scipy/stats/_variation.py +1 -1
  246. scipy/version.py +2 -2
  247. scipy-1.16.0rc2.dist-info/DELVEWHEEL +2 -0
  248. {scipy-1.16.0rc1.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +3 -3
  249. {scipy-1.16.0rc1.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +4 -4
  250. {scipy-1.16.0rc1.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +252 -252
  251. scipy-1.16.0rc1.dist-info/DELVEWHEEL +0 -2
  252. /scipy-1.16.0rc1-cp313-cp313-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313-win_amd64.whl +0 -0
  253. {scipy-1.16.0rc1.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/__config__.py CHANGED
@@ -58,8 +58,8 @@ CONFIG = _cleanup(
58
58
  "linker args": r"",
59
59
  },
60
60
  "pythran": {
61
- "version": r"0.17.0",
62
- "include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-icwwadrb\overlay\Lib\site-packages/pythran"
61
+ "version": r"0.18.0",
62
+ "include directory": r"C:\Users\runneradmin\AppData\Local\Temp\pip-build-env-_euf7osm\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-jzbeiae2/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
87
- "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-jzbeiae2/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
86
+ "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-mznfgwro/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
87
+ "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-mznfgwro/cp313-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-jzbeiae2/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
97
- "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-jzbeiae2/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/lib",
96
+ "include directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-mznfgwro/cp313-win_amd64/build/venv/Lib/site-packages/scipy_openblas32/include",
97
+ "lib directory": r"C:/Users/runneradmin/AppData/Local/Temp/cibw-run-mznfgwro/cp313-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-jzbeiae2\cp313-win_amd64\build\venv\Scripts\python.EXE",
109
+ "path": r"C:\Users\runneradmin\AppData\Local\Temp\cibw-run-mznfgwro\cp313-win_amd64\build\venv\Scripts\python.EXE",
110
110
  "version": "3.13",
111
111
  },
112
112
  }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
scipy/ndimage/_filters.py CHANGED
@@ -68,12 +68,23 @@ def _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
68
68
  if size is not None and footprint is not None:
69
69
  raise ValueError("Either `size` or `footprint` may be provided, not both.")
70
70
 
71
- # Either footprint or size must be provided, and these determine the core
72
- # dimensionality...
71
+ if axes is None:
72
+ axes = tuple(range(-input.ndim, 0))
73
+ elif np.isscalar(axes):
74
+ axes = (axes,)
75
+ n_axes = len(axes)
76
+ n_batch = input.ndim - n_axes
77
+
78
+ if n_axes > input.ndim:
79
+ message = ("The length of `axes` may not exceed the dimensionality of `input`"
80
+ "(`input.ndim`).")
81
+ raise ValueError(message)
82
+
83
+ # Either footprint or size must be provided
73
84
  footprinted_function = function
74
85
  if size is not None:
75
86
  # If provided, size must be an integer or tuple of integers.
76
- size = (size,)*input.ndim if np.isscalar(size) else tuple(size)
87
+ size = (size,)*n_axes if np.isscalar(size) else tuple(size)
77
88
  valid = [xp.isdtype(xp.asarray(i).dtype, 'integral') and i > 0 for i in size]
78
89
  if not all(valid):
79
90
  raise ValueError("All elements of `size` must be positive integers.")
@@ -84,13 +95,10 @@ def _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
84
95
  def footprinted_function(input, *args, axis=-1, **kwargs):
85
96
  return function(input[..., footprint], *args, axis=-1, **kwargs)
86
97
 
87
- n_axes = len(size)
88
- n_batch = input.ndim - n_axes
89
-
90
- # ...which can't exceed the dimensionality of `input`.
91
- if n_axes > input.ndim:
92
- message = ("The dimensionality of the window (`len(size)` or `footprint.ndim`) "
93
- "may not exceed the number of axes of `input` (`input.ndim`).")
98
+ # And by now, the dimensionality of the footprint must equal the number of axes
99
+ if n_axes != len(size):
100
+ message = ("`axes` must be compatible with the dimensionality "
101
+ "of the window specified by `size` or `footprint`.")
94
102
  raise ValueError(message)
95
103
 
96
104
  # If this is not *equal* to the dimensionality of `input`, then `axes`
@@ -101,9 +109,10 @@ def _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
101
109
  "(`len(size)` or `footprint.ndim`) does not equal the number "
102
110
  "of axes of `input` (`input.ndim`).")
103
111
  raise ValueError(message)
104
- axes = (axes,) if np.isscalar(axes) else axes
105
112
  else:
106
- axes = tuple(range(-n_axes, 0))
113
+ axes = tuple(range(-n_axes, 0)) if axes is None else axes
114
+
115
+ axes = (axes,) if np.isscalar(axes) else axes
107
116
 
108
117
  # If `origin` is provided, then it must be "broadcastable" to a tuple with length
109
118
  # equal to the core dimensionality.
@@ -150,10 +159,9 @@ def _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
150
159
 
151
160
  # For simplicity, work with `axes` at the end.
152
161
  working_axes = tuple(range(-n_axes, 0))
153
- if axes is not None:
154
- input = xp.moveaxis(input, axes, working_axes)
155
- output = (xp.moveaxis(output, axes, working_axes)
156
- if output is not None else output)
162
+ input = xp.moveaxis(input, axes, working_axes)
163
+ output = (xp.moveaxis(output, axes, working_axes)
164
+ if output is not None else output)
157
165
 
158
166
  # Wrap the function to limit maximum memory usage, deal with `footprint`,
159
167
  # and populate `output`. The latter requires some verbosity because we
@@ -190,8 +198,8 @@ def _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
190
198
  **kwargs)
191
199
  return output
192
200
 
193
- return (input, wrapped_function, size, mode, cval,
194
- origin, working_axes, n_axes, n_batch, xp)
201
+ return (input, wrapped_function, size, mode, cval, origin,
202
+ working_axes, axes, n_axes, n_batch, xp)
195
203
 
196
204
 
197
205
  @_ni_docstrings.docfiller
@@ -211,7 +219,19 @@ def vectorized_filter(input, function, *, size=None, footprint=None, output=None
211
219
 
212
220
  where ``axis`` specifies the axis (or axes) of ``window`` along which
213
221
  the filter function is evaluated.
214
- %(size_foot)s
222
+ size : scalar or tuple, optional
223
+ See `footprint` below. Ignored if `footprint` is given.
224
+ footprint : array, optional
225
+ Either `size` or `footprint` must be defined. `size` gives
226
+ the shape that is taken from the input array, at every element
227
+ position, to define the input to the filter function.
228
+ `footprint` is a boolean array that specifies (implicitly) a
229
+ shape, but also which of the elements within this shape will get
230
+ passed to the filter function. Thus ``size=(n, m)`` is equivalent
231
+ to ``footprint=np.ones((n, m))``.
232
+ We adjust `size` to the number of dimensions indicated by `axes`.
233
+ For instance, if `axes` is ``(0, 2, 1)`` and ``n`` is passed for ``size``,
234
+ then the effective `size` is ``(n, n, n)``.
215
235
  %(output)s
216
236
  mode : {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}, optional
217
237
  The `mode` parameter determines how the input array is extended
@@ -409,7 +429,7 @@ def vectorized_filter(input, function, *, size=None, footprint=None, output=None
409
429
 
410
430
  """ # noqa: E501
411
431
 
412
- (input, function, size, mode, cval, origin, working_axes, n_axes, n_batch, xp
432
+ (input, function, size, mode, cval, origin, working_axes, axes, n_axes, n_batch, xp
413
433
  ) = _vectorized_filter_iv(input, function, size, footprint, output, mode, cval,
414
434
  origin, axes, batch_memory)
415
435
 
@@ -455,7 +475,7 @@ def vectorized_filter(input, function, *, size=None, footprint=None, output=None
455
475
  res = function(view)
456
476
 
457
477
  # move working_axes back to original positions
458
- return xp.moveaxis(res, working_axes, axes) if axes is not None else res
478
+ return xp.moveaxis(res, working_axes, axes)
459
479
 
460
480
 
461
481
  def _invalid_origin(origin, lenw):
Binary file
Binary file
@@ -2571,7 +2571,7 @@ class TestThreading:
2571
2571
  for i in range(n):
2572
2572
  fun(*args, output=out[i, ...])
2573
2573
 
2574
- @xfail_xp_backends("cupy",
2574
+ @xfail_xp_backends("cupy",
2575
2575
  reason="XXX thread exception; cannot repro outside of pytest")
2576
2576
  def test_correlate1d(self, xp):
2577
2577
  d = np.random.randn(5000)
@@ -2585,7 +2585,7 @@ class TestThreading:
2585
2585
  self.check_func_thread(4, ndimage.correlate1d, (d, k), ot)
2586
2586
  xp_assert_equal(os, ot)
2587
2587
 
2588
- @xfail_xp_backends("cupy",
2588
+ @xfail_xp_backends("cupy",
2589
2589
  reason="XXX thread exception; cannot repro outside of pytest")
2590
2590
  def test_correlate(self, xp):
2591
2591
  d = xp.asarray(np.random.randn(500, 500))
@@ -2596,7 +2596,7 @@ class TestThreading:
2596
2596
  self.check_func_thread(4, ndimage.correlate, (d, k), ot)
2597
2597
  xp_assert_equal(os, ot)
2598
2598
 
2599
- @xfail_xp_backends("cupy",
2599
+ @xfail_xp_backends("cupy",
2600
2600
  reason="XXX thread exception; cannot repro outside of pytest")
2601
2601
  def test_median_filter(self, xp):
2602
2602
  d = xp.asarray(np.random.randn(500, 500))
@@ -2606,7 +2606,7 @@ class TestThreading:
2606
2606
  self.check_func_thread(4, ndimage.median_filter, (d, 3), ot)
2607
2607
  xp_assert_equal(os, ot)
2608
2608
 
2609
- @xfail_xp_backends("cupy",
2609
+ @xfail_xp_backends("cupy",
2610
2610
  reason="XXX thread exception; cannot repro outside of pytest")
2611
2611
  def test_uniform_filter1d(self, xp):
2612
2612
  d = np.random.randn(5000)
@@ -2619,7 +2619,7 @@ class TestThreading:
2619
2619
  self.check_func_thread(4, ndimage.uniform_filter1d, (d, 5), ot)
2620
2620
  xp_assert_equal(os, ot)
2621
2621
 
2622
- @xfail_xp_backends("cupy",
2622
+ @xfail_xp_backends("cupy",
2623
2623
  reason="XXX thread exception; cannot repro outside of pytest")
2624
2624
  def test_minmax_filter(self, xp):
2625
2625
  d = xp.asarray(np.random.randn(500, 500))
@@ -2908,15 +2908,19 @@ class TestVectorizedFilter:
2908
2908
  with pytest.raises(ValueError, match=message):
2909
2909
  ndimage.vectorized_filter(input, function, size=0)
2910
2910
 
2911
- message = "The dimensionality of the window"
2911
+ message = "The length of `axes` may not exceed "
2912
+ axes = (0, 1, 2)
2912
2913
  with pytest.raises(ValueError, match=message):
2913
- ndimage.vectorized_filter(input, function, size=(1, 2, 3))
2914
+ ndimage.vectorized_filter(input, function, size=(1, 2), axes=axes)
2914
2915
  with pytest.raises(ValueError, match=message):
2915
- ndimage.vectorized_filter(input, function, footprint=xp.ones((2, 2, 2)))
2916
+ ndimage.vectorized_filter(input, function, footprint=xp.ones((2, 2)),
2917
+ axes=axes)
2916
2918
 
2917
- message = "`axes` must be provided if the dimensionality..."
2919
+ message = "`axes` must be compatible with the dimensionality..."
2918
2920
  with pytest.raises(ValueError, match=message):
2919
2921
  ndimage.vectorized_filter(input, function, size=(1,))
2922
+ with pytest.raises(ValueError, match=message):
2923
+ ndimage.vectorized_filter(input, function, size=(2,), axes=(0,1))
2920
2924
 
2921
2925
  message = "All elements of `origin` must be integers"
2922
2926
  with pytest.raises(ValueError, match=message):
@@ -2986,6 +2990,35 @@ class TestVectorizedFilter:
2986
2990
  ref = ndimage.vectorized_filter(input, function, size=21)
2987
2991
  xp_assert_close(res, ref)
2988
2992
 
2993
+ def test_gh23046_feature(self, xp):
2994
+ # The intent of gh-23046 was to always allow `size` to be a scalar.
2995
+ rng = np.random.default_rng(45982734597824)
2996
+ img = xp.asarray(rng.random((5, 5)))
2997
+
2998
+ ref = ndimage.vectorized_filter(img, xp.mean, size=2)
2999
+ res = ndimage.vectorized_filter(img, xp.mean, size=2, axes=(0, 1))
3000
+ xp_assert_close(res, ref)
3001
+
3002
+ ref = ndimage.vectorized_filter(img, xp.mean, size=(2,), axes=(0,))
3003
+ res = ndimage.vectorized_filter(img, xp.mean, size=2, axes=0)
3004
+ xp_assert_close(res, ref)
3005
+
3006
+ def test_gh23046_fix(self, xp):
3007
+ # While investigating the feasibility of gh-23046, I noticed a bug when the
3008
+ # length of an `axes` tuple equals the dimensionality of the image.
3009
+ rng = np.random.default_rng(45982734597824)
3010
+ img = xp.asarray(rng.random((5, 5)))
3011
+ size = (2, 3)
3012
+ ref = ndimage.vectorized_filter(img.T, xp.mean, size=size).T
3013
+ res = ndimage.vectorized_filter(img, xp.mean, size=size, axes=(1, 0))
3014
+ xp_assert_close(res, ref)
3015
+
3016
+ ref = ndimage.vectorized_filter(img, xp.mean, size=size, mode='constant')
3017
+ res = ndimage.vectorized_filter(img, xp.mean, size=size[::-1], axes=(1, 0),
3018
+ mode='constant')
3019
+ xp_assert_close(res, ref)
3020
+
3021
+
2989
3022
 
2990
3023
  @given(x=npst.arrays(dtype=np.float64,
2991
3024
  shape=st.integers(min_value=1, max_value=1000)),
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file