scipy 1.16.0rc1__cp311-cp311-win_amd64.whl → 1.16.1__cp311-cp311-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 (277) hide show
  1. scipy/__config__.py +9 -9
  2. scipy/__init__.py +3 -3
  3. scipy/_cyutility.cp311-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp311-win_amd64.pyd +0 -0
  5. scipy/_lib/_ccallback_c.cp311-win_amd64.dll.a +0 -0
  6. scipy/_lib/_ccallback_c.cp311-win_amd64.pyd +0 -0
  7. scipy/_lib/_fpumode.cp311-win_amd64.dll.a +0 -0
  8. scipy/_lib/_fpumode.cp311-win_amd64.pyd +0 -0
  9. scipy/_lib/_test_ccallback.cp311-win_amd64.dll.a +0 -0
  10. scipy/_lib/_test_ccallback.cp311-win_amd64.pyd +0 -0
  11. scipy/_lib/_test_deprecation_call.cp311-win_amd64.dll.a +0 -0
  12. scipy/_lib/_test_deprecation_call.cp311-win_amd64.pyd +0 -0
  13. scipy/_lib/_test_deprecation_def.cp311-win_amd64.dll.a +0 -0
  14. scipy/_lib/_test_deprecation_def.cp311-win_amd64.pyd +0 -0
  15. scipy/_lib/_uarray/_uarray.cp311-win_amd64.dll.a +0 -0
  16. scipy/_lib/_uarray/_uarray.cp311-win_amd64.pyd +0 -0
  17. scipy/_lib/_util.py +7 -0
  18. scipy/_lib/messagestream.cp311-win_amd64.dll.a +0 -0
  19. scipy/_lib/messagestream.cp311-win_amd64.pyd +0 -0
  20. scipy/cluster/_hierarchy.cp311-win_amd64.dll.a +0 -0
  21. scipy/cluster/_hierarchy.cp311-win_amd64.pyd +0 -0
  22. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.dll.a +0 -0
  23. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.pyd +0 -0
  24. scipy/cluster/_vq.cp311-win_amd64.dll.a +0 -0
  25. scipy/cluster/_vq.cp311-win_amd64.pyd +0 -0
  26. scipy/conftest.py +25 -0
  27. scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.dll.a +0 -0
  28. scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.pyd +0 -0
  29. scipy/fftpack/convolve.cp311-win_amd64.dll.a +0 -0
  30. scipy/fftpack/convolve.cp311-win_amd64.pyd +0 -0
  31. scipy/integrate/_dop.cp311-win_amd64.dll.a +0 -0
  32. scipy/integrate/_dop.cp311-win_amd64.pyd +0 -0
  33. scipy/integrate/_lsoda.cp311-win_amd64.dll.a +0 -0
  34. scipy/integrate/_lsoda.cp311-win_amd64.pyd +0 -0
  35. scipy/integrate/_odepack.cp311-win_amd64.dll.a +0 -0
  36. scipy/integrate/_odepack.cp311-win_amd64.pyd +0 -0
  37. scipy/integrate/_quadpack.cp311-win_amd64.dll.a +0 -0
  38. scipy/integrate/_quadpack.cp311-win_amd64.pyd +0 -0
  39. scipy/integrate/_test_multivariate.cp311-win_amd64.dll.a +0 -0
  40. scipy/integrate/_test_multivariate.cp311-win_amd64.pyd +0 -0
  41. scipy/integrate/_test_odeint_banded.cp311-win_amd64.dll.a +0 -0
  42. scipy/integrate/_test_odeint_banded.cp311-win_amd64.pyd +0 -0
  43. scipy/integrate/_vode.cp311-win_amd64.dll.a +0 -0
  44. scipy/integrate/_vode.cp311-win_amd64.pyd +0 -0
  45. scipy/interpolate/_dfitpack.cp311-win_amd64.dll.a +0 -0
  46. scipy/interpolate/_dfitpack.cp311-win_amd64.pyd +0 -0
  47. scipy/interpolate/_dierckx.cp311-win_amd64.dll.a +0 -0
  48. scipy/interpolate/_dierckx.cp311-win_amd64.pyd +0 -0
  49. scipy/interpolate/_fitpack.cp311-win_amd64.dll.a +0 -0
  50. scipy/interpolate/_fitpack.cp311-win_amd64.pyd +0 -0
  51. scipy/interpolate/_interpnd.cp311-win_amd64.dll.a +0 -0
  52. scipy/interpolate/_interpnd.cp311-win_amd64.pyd +0 -0
  53. scipy/interpolate/_ppoly.cp311-win_amd64.dll.a +0 -0
  54. scipy/interpolate/_ppoly.cp311-win_amd64.pyd +0 -0
  55. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.dll.a +0 -0
  56. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.pyd +0 -0
  57. scipy/interpolate/_rgi_cython.cp311-win_amd64.dll.a +0 -0
  58. scipy/interpolate/_rgi_cython.cp311-win_amd64.pyd +0 -0
  59. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.dll.a +0 -0
  60. scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.pyd +0 -0
  61. scipy/io/_test_fortran.cp311-win_amd64.dll.a +0 -0
  62. scipy/io/_test_fortran.cp311-win_amd64.pyd +0 -0
  63. scipy/io/matlab/_mio5_utils.cp311-win_amd64.dll.a +0 -0
  64. scipy/io/matlab/_mio5_utils.cp311-win_amd64.pyd +0 -0
  65. scipy/io/matlab/_mio_utils.cp311-win_amd64.dll.a +0 -0
  66. scipy/io/matlab/_mio_utils.cp311-win_amd64.pyd +0 -0
  67. scipy/io/matlab/_streams.cp311-win_amd64.dll.a +0 -0
  68. scipy/io/matlab/_streams.cp311-win_amd64.pyd +0 -0
  69. scipy/io/matlab/tests/test_streams.py +9 -0
  70. scipy/linalg/_cythonized_array_utils.cp311-win_amd64.dll.a +0 -0
  71. scipy/linalg/_cythonized_array_utils.cp311-win_amd64.pyd +0 -0
  72. scipy/linalg/_decomp_interpolative.cp311-win_amd64.dll.a +0 -0
  73. scipy/linalg/_decomp_interpolative.cp311-win_amd64.pyd +0 -0
  74. scipy/linalg/_decomp_lu_cython.cp311-win_amd64.dll.a +0 -0
  75. scipy/linalg/_decomp_lu_cython.cp311-win_amd64.pyd +0 -0
  76. scipy/linalg/_decomp_update.cp311-win_amd64.dll.a +0 -0
  77. scipy/linalg/_decomp_update.cp311-win_amd64.pyd +0 -0
  78. scipy/linalg/_fblas.cp311-win_amd64.dll.a +0 -0
  79. scipy/linalg/_fblas.cp311-win_amd64.pyd +0 -0
  80. scipy/linalg/_flapack.cp311-win_amd64.dll.a +0 -0
  81. scipy/linalg/_flapack.cp311-win_amd64.pyd +0 -0
  82. scipy/linalg/_linalg_pythran.cp311-win_amd64.dll.a +0 -0
  83. scipy/linalg/_linalg_pythran.cp311-win_amd64.pyd +0 -0
  84. scipy/linalg/_matfuncs_expm.cp311-win_amd64.dll.a +0 -0
  85. scipy/linalg/_matfuncs_expm.cp311-win_amd64.pyd +0 -0
  86. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.dll.a +0 -0
  87. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.pyd +0 -0
  88. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.dll.a +0 -0
  89. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.pyd +0 -0
  90. scipy/linalg/_solve_toeplitz.cp311-win_amd64.dll.a +0 -0
  91. scipy/linalg/_solve_toeplitz.cp311-win_amd64.pyd +0 -0
  92. scipy/linalg/blas.py +35 -24
  93. scipy/linalg/cython_blas.cp311-win_amd64.dll.a +0 -0
  94. scipy/linalg/cython_blas.cp311-win_amd64.pyd +0 -0
  95. scipy/linalg/cython_lapack.cp311-win_amd64.dll.a +0 -0
  96. scipy/linalg/cython_lapack.cp311-win_amd64.pyd +0 -0
  97. scipy/linalg/tests/test_matfuncs.py +7 -0
  98. scipy/ndimage/_ctest.cp311-win_amd64.dll.a +0 -0
  99. scipy/ndimage/_ctest.cp311-win_amd64.pyd +0 -0
  100. scipy/ndimage/_cytest.cp311-win_amd64.dll.a +0 -0
  101. scipy/ndimage/_cytest.cp311-win_amd64.pyd +0 -0
  102. scipy/ndimage/_filters.py +52 -23
  103. scipy/ndimage/_nd_image.cp311-win_amd64.dll.a +0 -0
  104. scipy/ndimage/_nd_image.cp311-win_amd64.pyd +0 -0
  105. scipy/ndimage/_ni_label.cp311-win_amd64.dll.a +0 -0
  106. scipy/ndimage/_ni_label.cp311-win_amd64.pyd +0 -0
  107. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.dll.a +0 -0
  108. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.pyd +0 -0
  109. scipy/ndimage/tests/test_filters.py +94 -9
  110. scipy/odr/__odrpack.cp311-win_amd64.dll.a +0 -0
  111. scipy/odr/__odrpack.cp311-win_amd64.pyd +0 -0
  112. scipy/optimize/_bglu_dense.cp311-win_amd64.dll.a +0 -0
  113. scipy/optimize/_bglu_dense.cp311-win_amd64.pyd +0 -0
  114. scipy/optimize/_direct.cp311-win_amd64.dll.a +0 -0
  115. scipy/optimize/_direct.cp311-win_amd64.pyd +0 -0
  116. scipy/optimize/_group_columns.cp311-win_amd64.dll.a +0 -0
  117. scipy/optimize/_group_columns.cp311-win_amd64.pyd +0 -0
  118. scipy/optimize/_highspy/_core.cp311-win_amd64.dll.a +0 -0
  119. scipy/optimize/_highspy/_core.cp311-win_amd64.pyd +0 -0
  120. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.dll.a +0 -0
  121. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.pyd +0 -0
  122. scipy/optimize/_lbfgsb.cp311-win_amd64.dll.a +0 -0
  123. scipy/optimize/_lbfgsb.cp311-win_amd64.pyd +0 -0
  124. scipy/optimize/_lbfgsb_py.py +23 -8
  125. scipy/optimize/_lsap.cp311-win_amd64.dll.a +0 -0
  126. scipy/optimize/_lsap.cp311-win_amd64.pyd +0 -0
  127. scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.dll.a +0 -0
  128. scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.pyd +0 -0
  129. scipy/optimize/_lsq/least_squares.py +2 -2
  130. scipy/optimize/_minimize.py +0 -1
  131. scipy/optimize/_minpack.cp311-win_amd64.dll.a +0 -0
  132. scipy/optimize/_minpack.cp311-win_amd64.pyd +0 -0
  133. scipy/optimize/_moduleTNC.cp311-win_amd64.dll.a +0 -0
  134. scipy/optimize/_moduleTNC.cp311-win_amd64.pyd +0 -0
  135. scipy/optimize/_pava_pybind.cp311-win_amd64.dll.a +0 -0
  136. scipy/optimize/_pava_pybind.cp311-win_amd64.pyd +0 -0
  137. scipy/optimize/_shgo_lib/_complex.py +2 -2
  138. scipy/optimize/_slsqplib.cp311-win_amd64.dll.a +0 -0
  139. scipy/optimize/_slsqplib.cp311-win_amd64.pyd +0 -0
  140. scipy/optimize/_trlib/_trlib.cp311-win_amd64.dll.a +0 -0
  141. scipy/optimize/_trlib/_trlib.cp311-win_amd64.pyd +0 -0
  142. scipy/optimize/_zeros.cp311-win_amd64.dll.a +0 -0
  143. scipy/optimize/_zeros.cp311-win_amd64.pyd +0 -0
  144. scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.dll.a +0 -0
  145. scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.pyd +0 -0
  146. scipy/optimize/tests/test_lsq_linear.py +1 -1
  147. scipy/optimize/tests/test_optimize.py +3 -3
  148. scipy/signal/_filter_design.py +13 -1
  149. scipy/signal/_fir_filter_design.py +1 -1
  150. scipy/signal/_max_len_seq_inner.cp311-win_amd64.dll.a +0 -0
  151. scipy/signal/_max_len_seq_inner.cp311-win_amd64.pyd +0 -0
  152. scipy/signal/_peak_finding_utils.cp311-win_amd64.dll.a +0 -0
  153. scipy/signal/_peak_finding_utils.cp311-win_amd64.pyd +0 -0
  154. scipy/signal/_polyutils.py +1 -1
  155. scipy/signal/_sigtools.cp311-win_amd64.dll.a +0 -0
  156. scipy/signal/_sigtools.cp311-win_amd64.pyd +0 -0
  157. scipy/signal/_sosfilt.cp311-win_amd64.dll.a +0 -0
  158. scipy/signal/_sosfilt.cp311-win_amd64.pyd +0 -0
  159. scipy/signal/_spectral_py.py +9 -0
  160. scipy/signal/_spline.cp311-win_amd64.dll.a +0 -0
  161. scipy/signal/_spline.cp311-win_amd64.pyd +0 -0
  162. scipy/signal/_upfirdn_apply.cp311-win_amd64.dll.a +0 -0
  163. scipy/signal/_upfirdn_apply.cp311-win_amd64.pyd +0 -0
  164. scipy/signal/tests/test_filter_design.py +19 -0
  165. scipy/signal/tests/test_fir_filter_design.py +5 -0
  166. scipy/signal/tests/test_signaltools.py +1 -1
  167. scipy/signal/tests/test_spectral.py +31 -0
  168. scipy/sparse/_base.py +5 -2
  169. scipy/sparse/_csparsetools.cp311-win_amd64.dll.a +0 -0
  170. scipy/sparse/_csparsetools.cp311-win_amd64.pyd +0 -0
  171. scipy/sparse/_sparsetools.cp311-win_amd64.dll.a +0 -0
  172. scipy/sparse/_sparsetools.cp311-win_amd64.pyd +0 -0
  173. scipy/sparse/csgraph/_flow.cp311-win_amd64.dll.a +0 -0
  174. scipy/sparse/csgraph/_flow.cp311-win_amd64.pyd +0 -0
  175. scipy/sparse/csgraph/_matching.cp311-win_amd64.dll.a +0 -0
  176. scipy/sparse/csgraph/_matching.cp311-win_amd64.pyd +0 -0
  177. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.dll.a +0 -0
  178. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.pyd +0 -0
  179. scipy/sparse/csgraph/_reordering.cp311-win_amd64.dll.a +0 -0
  180. scipy/sparse/csgraph/_reordering.cp311-win_amd64.pyd +0 -0
  181. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.dll.a +0 -0
  182. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.pyd +0 -0
  183. scipy/sparse/csgraph/_tools.cp311-win_amd64.dll.a +0 -0
  184. scipy/sparse/csgraph/_tools.cp311-win_amd64.pyd +0 -0
  185. scipy/sparse/csgraph/_traversal.cp311-win_amd64.dll.a +0 -0
  186. scipy/sparse/csgraph/_traversal.cp311-win_amd64.pyd +0 -0
  187. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.dll.a +0 -0
  188. scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.pyd +0 -0
  189. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.dll.a +0 -0
  190. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.pyd +0 -0
  191. scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.dll.a +0 -0
  192. scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.pyd +0 -0
  193. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.dll.a +0 -0
  194. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.pyd +0 -0
  195. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.dll.a +0 -0
  196. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.pyd +0 -0
  197. scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.dll.a +0 -0
  198. scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.pyd +0 -0
  199. scipy/sparse/tests/test_base.py +10 -0
  200. scipy/spatial/_ckdtree.cp311-win_amd64.dll.a +0 -0
  201. scipy/spatial/_ckdtree.cp311-win_amd64.pyd +0 -0
  202. scipy/spatial/_distance_pybind.cp311-win_amd64.dll.a +0 -0
  203. scipy/spatial/_distance_pybind.cp311-win_amd64.pyd +0 -0
  204. scipy/spatial/_distance_wrap.cp311-win_amd64.dll.a +0 -0
  205. scipy/spatial/_distance_wrap.cp311-win_amd64.pyd +0 -0
  206. scipy/spatial/_hausdorff.cp311-win_amd64.dll.a +0 -0
  207. scipy/spatial/_hausdorff.cp311-win_amd64.pyd +0 -0
  208. scipy/spatial/_qhull.cp311-win_amd64.dll.a +0 -0
  209. scipy/spatial/_qhull.cp311-win_amd64.pyd +0 -0
  210. scipy/spatial/_voronoi.cp311-win_amd64.dll.a +0 -0
  211. scipy/spatial/_voronoi.cp311-win_amd64.pyd +0 -0
  212. scipy/spatial/tests/test_distance.py +12 -0
  213. scipy/spatial/transform/_rigid_transform.cp311-win_amd64.dll.a +0 -0
  214. scipy/spatial/transform/_rigid_transform.cp311-win_amd64.pyd +0 -0
  215. scipy/spatial/transform/_rotation.cp311-win_amd64.dll.a +0 -0
  216. scipy/spatial/transform/_rotation.cp311-win_amd64.pyd +0 -0
  217. scipy/special/_comb.cp311-win_amd64.dll.a +0 -0
  218. scipy/special/_comb.cp311-win_amd64.pyd +0 -0
  219. scipy/special/_ellip_harm_2.cp311-win_amd64.dll.a +0 -0
  220. scipy/special/_ellip_harm_2.cp311-win_amd64.pyd +0 -0
  221. scipy/special/_gufuncs.cp311-win_amd64.dll.a +0 -0
  222. scipy/special/_gufuncs.cp311-win_amd64.pyd +0 -0
  223. scipy/special/_specfun.cp311-win_amd64.dll.a +0 -0
  224. scipy/special/_specfun.cp311-win_amd64.pyd +0 -0
  225. scipy/special/_special_ufuncs.cp311-win_amd64.dll.a +0 -0
  226. scipy/special/_special_ufuncs.cp311-win_amd64.pyd +0 -0
  227. scipy/special/_test_internal.cp311-win_amd64.dll.a +0 -0
  228. scipy/special/_test_internal.cp311-win_amd64.pyd +0 -0
  229. scipy/special/_ufuncs.cp311-win_amd64.dll.a +0 -0
  230. scipy/special/_ufuncs.cp311-win_amd64.pyd +0 -0
  231. scipy/special/_ufuncs_cxx.cp311-win_amd64.dll.a +0 -0
  232. scipy/special/_ufuncs_cxx.cp311-win_amd64.pyd +0 -0
  233. scipy/special/cython_special.cp311-win_amd64.dll.a +0 -0
  234. scipy/special/cython_special.cp311-win_amd64.pyd +0 -0
  235. scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.dll.a +0 -0
  236. scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.pyd +0 -0
  237. scipy/stats/_axis_nan_policy.py +1 -9
  238. scipy/stats/_biasedurn.cp311-win_amd64.dll.a +0 -0
  239. scipy/stats/_biasedurn.cp311-win_amd64.pyd +0 -0
  240. scipy/stats/_continuous_distns.py +19 -16
  241. scipy/stats/_correlation.py +1 -1
  242. scipy/stats/_distribution_infrastructure.py +20 -0
  243. scipy/stats/_entropy.py +2 -2
  244. scipy/stats/_hypotests.py +1 -1
  245. scipy/stats/_levy_stable/levyst.cp311-win_amd64.dll.a +0 -0
  246. scipy/stats/_levy_stable/levyst.cp311-win_amd64.pyd +0 -0
  247. scipy/stats/_morestats.py +7 -7
  248. scipy/stats/_qmc_cy.cp311-win_amd64.dll.a +0 -0
  249. scipy/stats/_qmc_cy.cp311-win_amd64.pyd +0 -0
  250. scipy/stats/_qmvnt_cy.cp311-win_amd64.dll.a +0 -0
  251. scipy/stats/_qmvnt_cy.cp311-win_amd64.pyd +0 -0
  252. scipy/stats/_rcont/rcont.cp311-win_amd64.dll.a +0 -0
  253. scipy/stats/_rcont/rcont.cp311-win_amd64.pyd +0 -0
  254. scipy/stats/_resampling.py +1 -1
  255. scipy/stats/_sobol.cp311-win_amd64.dll.a +0 -0
  256. scipy/stats/_sobol.cp311-win_amd64.pyd +0 -0
  257. scipy/stats/_stats.cp311-win_amd64.dll.a +0 -0
  258. scipy/stats/_stats.cp311-win_amd64.pyd +0 -0
  259. scipy/stats/_stats_mstats_common.py +4 -2
  260. scipy/stats/_stats_py.py +19 -19
  261. scipy/stats/_stats_pythran.cp311-win_amd64.dll.a +0 -0
  262. scipy/stats/_stats_pythran.cp311-win_amd64.pyd +0 -0
  263. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.dll.a +0 -0
  264. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.pyd +0 -0
  265. scipy/stats/_variation.py +1 -1
  266. scipy/stats/tests/test_distributions.py +13 -0
  267. scipy/stats/tests/test_fast_gen_inversion.py +2 -0
  268. scipy/stats/tests/test_morestats.py +4 -4
  269. scipy/version.py +2 -2
  270. scipy-1.16.1.dist-info/DELVEWHEEL +2 -0
  271. {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/LICENSE.txt +3 -3
  272. {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/METADATA +5 -4
  273. {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/RECORD +276 -276
  274. scipy-1.16.0rc1.dist-info/DELVEWHEEL +0 -2
  275. /scipy-1.16.0rc1-cp311-cp311-win_amd64.whl → /scipy-1.16.1-cp311-cp311-win_amd64.whl +0 -0
  276. {scipy-1.16.0rc1.dist-info → scipy-1.16.1.dist-info}/WHEEL +0 -0
  277. /scipy.libs/{libscipy_openblas-f07f5a5d207a3a47104dca54d6d0c86a.dll → libscipy_openblas-6b2103f2ae4d8547998b5d188e9801fb.dll} +0 -0
Binary file
@@ -897,6 +897,15 @@ def csd(x, y, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None,
897
897
  if np.iscomplexobj(x) and return_onesided:
898
898
  return_onesided = False
899
899
 
900
+ if x.shape[axis] < y.shape[axis]: # zero-pad x to shape of y:
901
+ z_shape = list(y.shape)
902
+ z_shape[axis] = y.shape[axis] - x.shape[axis]
903
+ x = np.concatenate((x, np.zeros(z_shape)), axis=axis)
904
+ elif y.shape[axis] < x.shape[axis]: # zero-pad y to shape of x:
905
+ z_shape = list(x.shape)
906
+ z_shape[axis] = x.shape[axis] - y.shape[axis]
907
+ y = np.concatenate((y, np.zeros(z_shape)), axis=axis)
908
+
900
909
  # using cast() to make mypy happy:
901
910
  fft_mode = cast(FFT_MODE_TYPE, 'onesided' if return_onesided else 'twosided')
902
911
  if scaling not in (scales := {'spectrum': 'magnitude', 'density': 'psd'}):
Binary file
Binary file
@@ -382,6 +382,19 @@ class TestTf2Sos:
382
382
  sos2 = tf2sos(b, a, analog=analog)
383
383
  assert_array_almost_equal(sos, sos2, decimal=4)
384
384
 
385
+ def test_gh_23221(self):
386
+ # Tests that this tf2sos call below does not produce ComplexWarnings
387
+ # This test is specific for scipy==1.16.0: later scipy versions do not produce
388
+ # the warning.
389
+ with suppress_warnings():
390
+ warnings.simplefilter("error")
391
+ tf2sos([0.21860986786301265, -0.4372197357260253, -0.2186098678630126,
392
+ 0.8744394714520509, -0.21860986786301248, -0.4372197357260253,
393
+ 0.21860986786301265],
394
+ [1., -4.18323041786553, 6.829924151626914, -5.407777865686045,
395
+ 2.0773105450802336, -0.33482732571537893, 0.0186009178695853 ]
396
+ )
397
+
385
398
 
386
399
  @skip_xp_backends(
387
400
  cpu_only=True, reason="XXX zpk2sos is numpy-only", exceptions=['cupy']
@@ -754,6 +767,12 @@ class TestFreqz:
754
767
  xp_assert_equal(w, xp.asarray([0. , 0.1]))
755
768
  xp_assert_equal(h, xp.asarray([1.+0.j, 1.+0.j]))
756
769
 
770
+ def test_gh_23277(self):
771
+ # backwards compatibility: `w` array must be real, not complex
772
+ filt = [0.5 + 0.0j, 0.5 + 0.0j]
773
+ w, _ = freqz(filt, worN=8)
774
+ assert w.dtype == np.float64
775
+
757
776
  def test_basic(self, xp):
758
777
  w, h = freqz(xp.asarray([1.0]), worN=8)
759
778
  assert_array_almost_equal(w, xp.pi * xp.arange(8, dtype=w.dtype) / 8.)
@@ -546,6 +546,11 @@ class TestRemez:
546
546
  with pytest.raises(ValueError, match="Sampling.*single scalar"):
547
547
  remez(11, .1, 1, fs=np.array([10, 20]))
548
548
 
549
+ def test_gh_23266(self, xp):
550
+ bands = xp.asarray([0.0, 0.2, 0.3, 0.5])
551
+ desired = xp.asarray([1.0, 0.0])
552
+ weight = xp.asarray([1.0, 2.0])
553
+ remez(21, bands, desired, weight=weight)
549
554
 
550
555
 
551
556
  @skip_xp_backends(cpu_only=True, reason="lstsq")
@@ -1295,7 +1295,7 @@ class TestMedFilt:
1295
1295
  # us into wrong memory if used (but it does not need to be used)
1296
1296
  dummy = xp.arange(10, dtype=xp.float64)
1297
1297
  a = dummy[5:6]
1298
- a.strides = 16
1298
+ a = np.lib.stride_tricks.as_strided(a, strides=(16,))
1299
1299
  xp_assert_close(signal.medfilt(a, 1), xp.asarray([5.]))
1300
1300
 
1301
1301
  @skip_xp_backends(
@@ -8,6 +8,7 @@ import pytest
8
8
  from pytest import raises as assert_raises
9
9
 
10
10
  from scipy import signal
11
+ from scipy._lib._array_api import xp_assert_close
11
12
  from scipy.fft import fftfreq, rfftfreq, fft, irfft
12
13
  from scipy.integrate import trapezoid
13
14
  from scipy.signal import (periodogram, welch, lombscargle, coherence, csd,
@@ -591,6 +592,36 @@ class TestCSD:
591
592
  assert_allclose(f, f1)
592
593
  assert_allclose(c, c1)
593
594
 
595
+ def test_unequal_length_input_1D(self):
596
+ """Test zero-padding for input `x.shape[axis] != y.shape[axis]` for 1d arrays.
597
+
598
+ This test ensures that issue 23036 is fixed.
599
+ """
600
+ x = np.tile([4, 0, -4, 0], 4)
601
+
602
+ kw = dict(fs=len(x), window='boxcar', nperseg=4)
603
+ X0 = signal.csd(x, np.copy(x), **kw)[1] # `x is x` must be False
604
+ X1 = signal.csd(x, x[:8], **kw)[1]
605
+ X2 = signal.csd(x[:8], x, **kw)[1]
606
+ xp_assert_close(X1, X0 / 2)
607
+ xp_assert_close(X2, X0 / 2)
608
+
609
+ def test_unequal_length_input_3D(self):
610
+ """Test zero-padding for input `x.shape[axis] != y.shape[axis]` for 3d arrays.
611
+
612
+ This test ensures that issue 23036 is fixed.
613
+ """
614
+ n = 8
615
+ x = np.zeros(2 * 3 * n).reshape(2, n, 3)
616
+ x[:, 0, :] = n
617
+
618
+ kw = dict(fs=n, window='boxcar', nperseg=n, detrend=None, axis=1)
619
+ X0 = signal.csd(x, x.copy(), **kw)[1] # `x is x` must be False
620
+ X1 = signal.csd(x, x[:, :2, :], **kw)[1]
621
+ X2 = signal.csd(x[:, :2, :], x, **kw)[1]
622
+ xp_assert_close(X1, X0)
623
+ xp_assert_close(X2, X0)
624
+
594
625
  def test_real_onesided_even(self):
595
626
  x = np.zeros(16)
596
627
  x[0] = 1
scipy/sparse/_base.py CHANGED
@@ -494,7 +494,10 @@ class _spbase(SparseABC):
494
494
  return self._mul_scalar(other)
495
495
 
496
496
  if self.ndim < 3:
497
- return self.tocsr()._multiply_2d_with_broadcasting(other)
497
+ try:
498
+ return self._multiply_2d_with_broadcasting(other)
499
+ except AttributeError:
500
+ return self.tocsr()._multiply_2d_with_broadcasting(other)
498
501
 
499
502
  if not (issparse(other) or isdense(other)):
500
503
  # If it's a list or whatever, treat it like an array
@@ -658,7 +661,7 @@ class _spbase(SparseABC):
658
661
  # eq and ne return True or False instead of an array when the shapes
659
662
  # don't match. Numpy doesn't do this. Is this what we want?
660
663
  if op in (operator.eq, operator.ne):
661
- return op == operator.eq
664
+ return op is operator.ne
662
665
  raise ValueError("inconsistent shape")
663
666
 
664
667
  csr_self = (self if self.ndim < 3 else self.reshape(1, -1)).tocsr()
@@ -433,6 +433,13 @@ class _TestCommon:
433
433
  for dtype in self.checked_dtypes:
434
434
  check(dtype)
435
435
 
436
+ def test_eq_ne_different_shapes(self):
437
+ if self.datsp.format not in ['bsr', 'csc', 'csr']:
438
+ pytest.skip("Bool comparisons only implemented for BSR, CSC, and CSR.")
439
+ # Is this what we want? numpy raises when shape differs. we return False.
440
+ assert (self.datsp == self.datsp.T) is False
441
+ assert (self.datsp != self.datsp.T) is True
442
+
436
443
  def test_lt(self):
437
444
  sup = suppress_warnings()
438
445
  sup.filter(SparseEfficiencyWarning)
@@ -1617,6 +1624,9 @@ class _TestCommon:
1617
1624
  B = array([[0,7,0],[0,-4,0]])
1618
1625
  Asp = self.spcreator(A)
1619
1626
  Bsp = self.spcreator(B)
1627
+ # check output format
1628
+ out_fmt = Asp.format if Asp.format in ('csc', 'dia', 'bsr') else 'csr'
1629
+ assert (Asp.multiply(Bsp)).format == out_fmt
1620
1630
  assert_almost_equal(Asp.multiply(Bsp).toarray(), A*B) # sparse/sparse
1621
1631
  assert_almost_equal(Asp.multiply(B).toarray(), A*B) # sparse/dense
1622
1632
 
Binary file
Binary file
Binary file
Binary file
@@ -2231,6 +2231,18 @@ def test_immutable_input(metric):
2231
2231
  getattr(scipy.spatial.distance, metric)(x, x, w=x)
2232
2232
 
2233
2233
 
2234
+ def test_gh_23109():
2235
+ a = np.array([0, 0, 1, 1])
2236
+ b = np.array([0, 1, 1, 0])
2237
+ w = np.asarray([1.5, 1.2, 0.7, 1.3])
2238
+ expected = yule(a, b, w=w)
2239
+ assert_allclose(expected, 1.1954022988505748)
2240
+ actual = cdist(np.atleast_2d(a),
2241
+ np.atleast_2d(b),
2242
+ metric='yule', w=w)
2243
+ assert_allclose(actual, expected)
2244
+
2245
+
2234
2246
  class TestJaccard:
2235
2247
 
2236
2248
  def test_pdist_jaccard_random(self):
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -403,17 +403,9 @@ def _axis_nan_policy_factory(tuple_to_result, default_axis=0,
403
403
  override.update(temp)
404
404
 
405
405
  if result_to_tuple is None:
406
- def result_to_tuple(res):
406
+ def result_to_tuple(res, _):
407
407
  return res
408
408
 
409
- # The only `result_to_tuple` that needs the second argument (number of
410
- # outputs) is the one for `moment`, and this was realized very late.
411
- # Rather than changing all `result_to_tuple` definitions, we wrap them
412
- # here to accept a second argument if they don't already.
413
- if len(inspect.signature(result_to_tuple).parameters) == 1:
414
- def result_to_tuple(res, _, f=result_to_tuple):
415
- return f(res)
416
-
417
409
  if not callable(too_small):
418
410
  def is_too_small(samples, *ts_args, axis=-1, **ts_kwargs):
419
411
  for sample in samples:
Binary file
@@ -935,23 +935,26 @@ class beta_gen(rv_continuous):
935
935
  log_term = sum_ab*np.log1p(a/b) + np.log(b) - 2*np.log(sum_ab)
936
936
  return t1 + t2 + log_term
937
937
 
938
- def threshold_large(v):
939
- if v == 1.0:
940
- return 1000
941
-
942
- j = np.log10(v)
943
- digits = int(j)
944
- d = int(v / 10 ** digits) + 2
945
- return d*10**(7 + j)
946
-
947
- if a >= 4.96e6 and b >= 4.96e6:
948
- return asymptotic_ab_large(a, b)
949
- elif a <= 4.9e6 and b - a >= 1e6 and b >= threshold_large(a):
950
- return asymptotic_b_large(a, b)
951
- elif b <= 4.9e6 and a - b >= 1e6 and a >= threshold_large(b):
938
+ def asymptotic_a_large(a, b):
952
939
  return asymptotic_b_large(b, a)
953
- else:
954
- return regular(a, b)
940
+
941
+ def threshold_large(v):
942
+ j = np.floor(np.log10(v))
943
+ d = np.floor(v / 10 ** j) + 2
944
+ return xpx.apply_where(v != 1.0, (d, j), lambda d_, j_: d_ * 10**(7 + j_),
945
+ fill_value=1000)
946
+
947
+ threshold_a = threshold_large(a)
948
+ threshold_b = threshold_large(b)
949
+ return _lazyselect([(a >= 4.96e6) & (b >= 4.96e6),
950
+ (a <= 4.9e6) & (b - a >= 1e6) & (b >= threshold_a),
951
+ (b <= 4.9e6) & (a - b >= 1e6) & (a >= threshold_b),
952
+ (a < 4.9e6) & (b < 4.9e6)
953
+ ],
954
+ [asymptotic_ab_large, asymptotic_b_large,
955
+ asymptotic_a_large, regular],
956
+ [a, b]
957
+ )
955
958
 
956
959
 
957
960
  beta = beta_gen(a=0.0, b=1.0, name='beta')
@@ -81,7 +81,7 @@ def _chatterjeexi_iv(y_continuous, method):
81
81
  return y_continuous, method
82
82
 
83
83
 
84
- def _unpack(res):
84
+ def _unpack(res, _):
85
85
  return res.statistic, res.pvalue
86
86
 
87
87
 
@@ -5100,6 +5100,26 @@ class Mixture(_ProbabilityDistribution):
5100
5100
  .. [1] Mixture distribution, *Wikipedia*,
5101
5101
  https://en.wikipedia.org/wiki/Mixture_distribution
5102
5102
 
5103
+
5104
+ Examples
5105
+ --------
5106
+ A mixture of normal distributions:
5107
+
5108
+ >>> import numpy as np
5109
+ >>> from scipy import stats
5110
+ >>> import matplotlib.pyplot as plt
5111
+ >>> X1 = stats.Normal(mu=-2, sigma=1)
5112
+ >>> X2 = stats.Normal(mu=2, sigma=1)
5113
+ >>> mixture = stats.Mixture([X1, X2], weights=[0.4, 0.6])
5114
+ >>> print(f'mean: {mixture.mean():.2f}, '
5115
+ ... f'median: {mixture.median():.2f}, '
5116
+ ... f'mode: {mixture.mode():.2f}')
5117
+ mean: 0.40, median: 1.04, mode: 2.00
5118
+ >>> x = np.linspace(-10, 10, 300)
5119
+ >>> plt.plot(x, mixture.pdf(x))
5120
+ >>> plt.title('PDF of normal distribution mixture')
5121
+ >>> plt.show()
5122
+
5103
5123
  """
5104
5124
  # Todo:
5105
5125
  # Add support for array shapes, weights
scipy/stats/_entropy.py CHANGED
@@ -20,7 +20,7 @@ __all__ = ['entropy', 'differential_entropy']
20
20
  2 if ("qk" in kwgs and kwgs["qk"] is not None)
21
21
  else 1
22
22
  ),
23
- n_outputs=1, result_to_tuple=lambda x: (x,), paired=True,
23
+ n_outputs=1, result_to_tuple=lambda x, _: (x,), paired=True,
24
24
  too_small=-1 # entropy doesn't have too small inputs
25
25
  )
26
26
  def entropy(pk: np.typing.ArrayLike,
@@ -170,7 +170,7 @@ def _differential_entropy_is_too_small(samples, kwargs, axis=-1):
170
170
 
171
171
 
172
172
  @_axis_nan_policy_factory(
173
- lambda x: x, n_outputs=1, result_to_tuple=lambda x: (x,),
173
+ lambda x: x, n_outputs=1, result_to_tuple=lambda x, _: (x,),
174
174
  too_small=_differential_entropy_is_too_small
175
175
  )
176
176
  def differential_entropy(
scipy/stats/_hypotests.py CHANGED
@@ -482,7 +482,7 @@ def _cdf_cvm(x, n=None):
482
482
  return y
483
483
 
484
484
 
485
- def _cvm_result_to_tuple(res):
485
+ def _cvm_result_to_tuple(res, _):
486
486
  return res.statistic, res.pvalue
487
487
 
488
488
 
scipy/stats/_morestats.py CHANGED
@@ -222,7 +222,7 @@ def mvsdist(data):
222
222
 
223
223
 
224
224
  @_axis_nan_policy_factory(
225
- lambda x: x, result_to_tuple=lambda x: (x,), n_outputs=1, default_axis=None
225
+ lambda x: x, result_to_tuple=lambda x, _: (x,), n_outputs=1, default_axis=None
226
226
  )
227
227
  def kstat(data, n=2, *, axis=None):
228
228
  r"""
@@ -327,7 +327,7 @@ def kstat(data, n=2, *, axis=None):
327
327
 
328
328
 
329
329
  @_axis_nan_policy_factory(
330
- lambda x: x, result_to_tuple=lambda x: (x,), n_outputs=1, default_axis=None
330
+ lambda x: x, result_to_tuple=lambda x, _: (x,), n_outputs=1, default_axis=None
331
331
  )
332
332
  def kstatvar(data, n=2, *, axis=None):
333
333
  r"""Return an unbiased estimator of the variance of the k-statistic.
@@ -984,7 +984,7 @@ def boxcox_llf(lmb, data, *, axis=0, keepdims=False, nan_policy='propagate'):
984
984
 
985
985
 
986
986
  @_axis_nan_policy_factory(lambda x: x, n_outputs=1, default_axis=0,
987
- result_to_tuple=lambda x: (x,))
987
+ result_to_tuple=lambda x, _: (x,))
988
988
  def _boxcox_llf(data, axis=0, *, lmb):
989
989
  xp = array_namespace(data)
990
990
  lmb, data = xp_promote(lmb, data, force_floating=True, xp=xp)
@@ -3496,7 +3496,7 @@ def mood(x, y, axis=0, alternative="two-sided"):
3496
3496
  WilcoxonResult = _make_tuple_bunch('WilcoxonResult', ['statistic', 'pvalue'])
3497
3497
 
3498
3498
 
3499
- def wilcoxon_result_unpacker(res):
3499
+ def wilcoxon_result_unpacker(res, _):
3500
3500
  if hasattr(res, 'zstatistic'):
3501
3501
  return res.statistic, res.pvalue, res.zstatistic
3502
3502
  else:
@@ -3993,7 +3993,7 @@ def _circfuncs_common(samples, period, xp=None):
3993
3993
 
3994
3994
  @_axis_nan_policy_factory(
3995
3995
  lambda x: x, n_outputs=1, default_axis=None,
3996
- result_to_tuple=lambda x: (x,)
3996
+ result_to_tuple=lambda x, _: (x,)
3997
3997
  )
3998
3998
  def circmean(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
3999
3999
  r"""Compute the circular mean of a sample of angle observations.
@@ -4086,7 +4086,7 @@ def circmean(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
4086
4086
 
4087
4087
  @_axis_nan_policy_factory(
4088
4088
  lambda x: x, n_outputs=1, default_axis=None,
4089
- result_to_tuple=lambda x: (x,)
4089
+ result_to_tuple=lambda x, _: (x,)
4090
4090
  )
4091
4091
  def circvar(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
4092
4092
  r"""Compute the circular variance of a sample of angle observations.
@@ -4180,7 +4180,7 @@ def circvar(samples, high=2*pi, low=0, axis=None, nan_policy='propagate'):
4180
4180
 
4181
4181
  @_axis_nan_policy_factory(
4182
4182
  lambda x: x, n_outputs=1, default_axis=None,
4183
- result_to_tuple=lambda x: (x,)
4183
+ result_to_tuple=lambda x, _: (x,)
4184
4184
  )
4185
4185
  def circstd(samples, high=2*pi, low=0, axis=None, nan_policy='propagate', *,
4186
4186
  normalize=False):
Binary file
Binary file
Binary file
Binary file
@@ -942,7 +942,7 @@ def monte_carlo_test(data, rvs, statistic, *, vectorized=None,
942
942
  for rvs_i, n_observations_i in zip(rvs, n_observations)]
943
943
  null_distribution.append(statistic(*resamples, axis=-1))
944
944
  null_distribution = xp.concat(null_distribution)
945
- null_distribution = xp.reshape(null_distribution, [-1] + [1]*observed.ndim)
945
+ null_distribution = xp.reshape(null_distribution, (-1,) + (1,)*observed.ndim)
946
946
 
947
947
  # relative tolerance for detecting numerically distinct but
948
948
  # theoretically equal values in the null distribution
Binary file
Binary file
Binary file
Binary file
@@ -21,7 +21,8 @@ def _n_samples_optional_x(kwargs):
21
21
 
22
22
  @_axis_nan_policy_factory(TheilslopesResult, default_axis=None, n_outputs=4,
23
23
  n_samples=_n_samples_optional_x,
24
- result_to_tuple=tuple, paired=True, too_small=1)
24
+ result_to_tuple=lambda x, _: tuple(x), paired=True,
25
+ too_small=1)
25
26
  def theilslopes(y, x=None, alpha=0.95, method='separate'):
26
27
  r"""
27
28
  Computes the Theil-Sen estimator for a set of points (x, y).
@@ -204,7 +205,8 @@ def _find_repeats(arr):
204
205
 
205
206
  @_axis_nan_policy_factory(SiegelslopesResult, default_axis=None, n_outputs=2,
206
207
  n_samples=_n_samples_optional_x,
207
- result_to_tuple=tuple, paired=True, too_small=1)
208
+ result_to_tuple=lambda x, _: tuple(x), paired=True,
209
+ too_small=1)
208
210
  def siegelslopes(y, x=None, method="hierarchical"):
209
211
  r"""
210
212
  Computes the Siegel estimator for a set of points (x, y).