scipy 1.15.2__cp313-cp313t-musllinux_1_2_aarch64.whl → 1.16.0__cp313-cp313t-musllinux_1_2_aarch64.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 (651) hide show
  1. scipy/__config__.py +13 -13
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313t-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +497 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313t-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-313t-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313t-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313t-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313t-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-313t-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-313t-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +169 -34
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-313t-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-313t-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-313t-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +282 -151
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-313t-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-313t-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-313t-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_ivp/common.py +3 -3
  130. scipy/integrate/_ivp/ivp.py +9 -2
  131. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  132. scipy/integrate/_lsoda.cpython-313t-aarch64-linux-musl.so +0 -0
  133. scipy/integrate/_ode.py +9 -2
  134. scipy/integrate/_odepack.cpython-313t-aarch64-linux-musl.so +0 -0
  135. scipy/integrate/_quad_vec.py +21 -29
  136. scipy/integrate/_quadpack.cpython-313t-aarch64-linux-musl.so +0 -0
  137. scipy/integrate/_quadpack_py.py +11 -7
  138. scipy/integrate/_quadrature.py +3 -3
  139. scipy/integrate/_rules/_base.py +2 -2
  140. scipy/integrate/_tanhsinh.py +57 -54
  141. scipy/integrate/_test_multivariate.cpython-313t-aarch64-linux-musl.so +0 -0
  142. scipy/integrate/_test_odeint_banded.cpython-313t-aarch64-linux-musl.so +0 -0
  143. scipy/integrate/_vode.cpython-313t-aarch64-linux-musl.so +0 -0
  144. scipy/integrate/tests/test__quad_vec.py +0 -6
  145. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  146. scipy/integrate/tests/test_cubature.py +21 -35
  147. scipy/integrate/tests/test_quadrature.py +6 -8
  148. scipy/integrate/tests/test_tanhsinh.py +61 -43
  149. scipy/interpolate/__init__.py +70 -58
  150. scipy/interpolate/_bary_rational.py +22 -22
  151. scipy/interpolate/_bsplines.py +119 -66
  152. scipy/interpolate/_cubic.py +65 -50
  153. scipy/interpolate/_dfitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  154. scipy/interpolate/_dierckx.cpython-313t-aarch64-linux-musl.so +0 -0
  155. scipy/interpolate/_fitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  156. scipy/interpolate/_fitpack2.py +9 -6
  157. scipy/interpolate/_fitpack_impl.py +32 -26
  158. scipy/interpolate/_fitpack_repro.py +23 -19
  159. scipy/interpolate/_interpnd.cpython-313t-aarch64-linux-musl.so +0 -0
  160. scipy/interpolate/_interpolate.py +30 -12
  161. scipy/interpolate/_ndbspline.py +13 -18
  162. scipy/interpolate/_ndgriddata.py +5 -8
  163. scipy/interpolate/_polyint.py +95 -31
  164. scipy/interpolate/_ppoly.cpython-313t-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rbf.py +2 -2
  166. scipy/interpolate/_rbfinterp.py +1 -1
  167. scipy/interpolate/_rbfinterp_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  168. scipy/interpolate/_rgi.py +31 -26
  169. scipy/interpolate/_rgi_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  170. scipy/interpolate/dfitpack.py +0 -20
  171. scipy/interpolate/interpnd.py +1 -2
  172. scipy/interpolate/tests/test_bary_rational.py +2 -2
  173. scipy/interpolate/tests/test_bsplines.py +97 -1
  174. scipy/interpolate/tests/test_fitpack2.py +39 -1
  175. scipy/interpolate/tests/test_interpnd.py +32 -20
  176. scipy/interpolate/tests/test_interpolate.py +48 -4
  177. scipy/interpolate/tests/test_rgi.py +2 -1
  178. scipy/io/_fast_matrix_market/__init__.py +2 -0
  179. scipy/io/_fast_matrix_market/_fmm_core.cpython-313t-aarch64-linux-musl.so +0 -0
  180. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  181. scipy/io/_harwell_boeing/hb.py +7 -11
  182. scipy/io/_idl.py +5 -7
  183. scipy/io/_netcdf.py +15 -5
  184. scipy/io/_test_fortran.cpython-313t-aarch64-linux-musl.so +0 -0
  185. scipy/io/arff/tests/test_arffread.py +3 -3
  186. scipy/io/matlab/__init__.py +5 -3
  187. scipy/io/matlab/_mio.py +4 -1
  188. scipy/io/matlab/_mio5.py +19 -13
  189. scipy/io/matlab/_mio5_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/_mio_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  191. scipy/io/matlab/_miobase.py +4 -1
  192. scipy/io/matlab/_streams.cpython-313t-aarch64-linux-musl.so +0 -0
  193. scipy/io/matlab/tests/test_mio.py +46 -18
  194. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  195. scipy/io/tests/test_mmio.py +7 -1
  196. scipy/io/tests/test_wavfile.py +41 -0
  197. scipy/io/wavfile.py +57 -10
  198. scipy/linalg/_basic.py +113 -86
  199. scipy/linalg/_cythonized_array_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  200. scipy/linalg/_decomp.py +22 -9
  201. scipy/linalg/_decomp_cholesky.py +28 -13
  202. scipy/linalg/_decomp_cossin.py +45 -30
  203. scipy/linalg/_decomp_interpolative.cpython-313t-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_ldl.py +4 -1
  205. scipy/linalg/_decomp_lu.py +18 -6
  206. scipy/linalg/_decomp_lu_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  207. scipy/linalg/_decomp_polar.py +2 -0
  208. scipy/linalg/_decomp_qr.py +6 -2
  209. scipy/linalg/_decomp_qz.py +3 -0
  210. scipy/linalg/_decomp_schur.py +3 -1
  211. scipy/linalg/_decomp_svd.py +13 -2
  212. scipy/linalg/_decomp_update.cpython-313t-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_expm_frechet.py +4 -0
  214. scipy/linalg/_fblas.cpython-313t-aarch64-linux-musl.so +0 -0
  215. scipy/linalg/_flapack.cpython-313t-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_linalg_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs.py +187 -4
  218. scipy/linalg/_matfuncs_expm.cpython-313t-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-aarch64-linux-musl.so +0 -0
  220. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  221. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_procrustes.py +2 -0
  223. scipy/linalg/_sketches.py +17 -6
  224. scipy/linalg/_solve_toeplitz.cpython-313t-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/_solvers.py +7 -2
  226. scipy/linalg/_special_matrices.py +26 -36
  227. scipy/linalg/blas.py +35 -24
  228. scipy/linalg/cython_blas.cpython-313t-aarch64-linux-musl.so +0 -0
  229. scipy/linalg/cython_lapack.cpython-313t-aarch64-linux-musl.so +0 -0
  230. scipy/linalg/lapack.py +22 -2
  231. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  232. scipy/linalg/tests/test_basic.py +31 -16
  233. scipy/linalg/tests/test_batch.py +588 -0
  234. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  235. scipy/linalg/tests/test_decomp.py +40 -3
  236. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  237. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  238. scipy/linalg/tests/test_interpolative.py +17 -0
  239. scipy/linalg/tests/test_lapack.py +115 -7
  240. scipy/linalg/tests/test_matfuncs.py +157 -102
  241. scipy/linalg/tests/test_procrustes.py +0 -7
  242. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  243. scipy/linalg/tests/test_special_matrices.py +1 -5
  244. scipy/ndimage/__init__.py +1 -0
  245. scipy/ndimage/_ctest.cpython-313t-aarch64-linux-musl.so +0 -0
  246. scipy/ndimage/_cytest.cpython-313t-aarch64-linux-musl.so +0 -0
  247. scipy/ndimage/_delegators.py +8 -2
  248. scipy/ndimage/_filters.py +453 -5
  249. scipy/ndimage/_interpolation.py +36 -6
  250. scipy/ndimage/_measurements.py +4 -2
  251. scipy/ndimage/_morphology.py +5 -0
  252. scipy/ndimage/_nd_image.cpython-313t-aarch64-linux-musl.so +0 -0
  253. scipy/ndimage/_ndimage_api.py +2 -1
  254. scipy/ndimage/_ni_docstrings.py +5 -1
  255. scipy/ndimage/_ni_label.cpython-313t-aarch64-linux-musl.so +0 -0
  256. scipy/ndimage/_ni_support.py +1 -5
  257. scipy/ndimage/_rank_filter_1d.cpython-313t-aarch64-linux-musl.so +0 -0
  258. scipy/ndimage/_support_alternative_backends.py +18 -6
  259. scipy/ndimage/tests/test_filters.py +384 -259
  260. scipy/ndimage/tests/test_fourier.py +7 -9
  261. scipy/ndimage/tests/test_interpolation.py +68 -61
  262. scipy/ndimage/tests/test_measurements.py +18 -35
  263. scipy/ndimage/tests/test_morphology.py +143 -131
  264. scipy/ndimage/tests/test_splines.py +1 -3
  265. scipy/odr/__odrpack.cpython-313t-aarch64-linux-musl.so +0 -0
  266. scipy/optimize/_basinhopping.py +13 -7
  267. scipy/optimize/_bglu_dense.cpython-313t-aarch64-linux-musl.so +0 -0
  268. scipy/optimize/_bracket.py +46 -26
  269. scipy/optimize/_chandrupatla.py +9 -10
  270. scipy/optimize/_cobyla_py.py +104 -123
  271. scipy/optimize/_constraints.py +14 -10
  272. scipy/optimize/_differentiable_functions.py +371 -230
  273. scipy/optimize/_differentialevolution.py +4 -3
  274. scipy/optimize/_direct.cpython-313t-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_dual_annealing.py +1 -1
  276. scipy/optimize/_elementwise.py +1 -4
  277. scipy/optimize/_group_columns.cpython-313t-aarch64-linux-musl.so +0 -0
  278. scipy/optimize/_highspy/_core.cpython-313t-aarch64-linux-musl.so +0 -0
  279. scipy/optimize/_highspy/_highs_options.cpython-313t-aarch64-linux-musl.so +0 -0
  280. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  281. scipy/optimize/_lbfgsb.cpython-313t-aarch64-linux-musl.so +0 -0
  282. scipy/optimize/_lbfgsb_py.py +80 -24
  283. scipy/optimize/_linprog_doc.py +2 -2
  284. scipy/optimize/_linprog_highs.py +11 -11
  285. scipy/optimize/_linprog_ip.py +25 -10
  286. scipy/optimize/_linprog_util.py +18 -19
  287. scipy/optimize/_lsap.cpython-313t-aarch64-linux-musl.so +0 -0
  288. scipy/optimize/_lsq/common.py +3 -3
  289. scipy/optimize/_lsq/dogbox.py +16 -2
  290. scipy/optimize/_lsq/givens_elimination.cpython-313t-aarch64-linux-musl.so +0 -0
  291. scipy/optimize/_lsq/least_squares.py +198 -126
  292. scipy/optimize/_lsq/lsq_linear.py +6 -6
  293. scipy/optimize/_lsq/trf.py +35 -8
  294. scipy/optimize/_milp.py +3 -1
  295. scipy/optimize/_minimize.py +105 -36
  296. scipy/optimize/_minpack.cpython-313t-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_minpack_py.py +21 -14
  298. scipy/optimize/_moduleTNC.cpython-313t-aarch64-linux-musl.so +0 -0
  299. scipy/optimize/_nnls.py +20 -21
  300. scipy/optimize/_nonlin.py +34 -3
  301. scipy/optimize/_numdiff.py +288 -110
  302. scipy/optimize/_optimize.py +86 -48
  303. scipy/optimize/_pava_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  304. scipy/optimize/_remove_redundancy.py +5 -5
  305. scipy/optimize/_root_scalar.py +1 -1
  306. scipy/optimize/_shgo.py +6 -0
  307. scipy/optimize/_shgo_lib/_complex.py +1 -1
  308. scipy/optimize/_slsqp_py.py +216 -124
  309. scipy/optimize/_slsqplib.cpython-313t-aarch64-linux-musl.so +0 -0
  310. scipy/optimize/_spectral.py +1 -1
  311. scipy/optimize/_tnc.py +8 -1
  312. scipy/optimize/_trlib/_trlib.cpython-313t-aarch64-linux-musl.so +0 -0
  313. scipy/optimize/_trustregion.py +20 -6
  314. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  315. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  316. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  317. scipy/optimize/_trustregion_constr/projections.py +12 -8
  318. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  319. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  320. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  321. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  322. scipy/optimize/_trustregion_exact.py +0 -1
  323. scipy/optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  324. scipy/optimize/_zeros_py.py +97 -17
  325. scipy/optimize/cython_optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  326. scipy/optimize/slsqp.py +0 -1
  327. scipy/optimize/tests/test__basinhopping.py +1 -1
  328. scipy/optimize/tests/test__differential_evolution.py +4 -4
  329. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  330. scipy/optimize/tests/test__numdiff.py +66 -22
  331. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  332. scipy/optimize/tests/test__shgo.py +9 -1
  333. scipy/optimize/tests/test_bracket.py +71 -46
  334. scipy/optimize/tests/test_chandrupatla.py +133 -135
  335. scipy/optimize/tests/test_cobyla.py +74 -45
  336. scipy/optimize/tests/test_constraints.py +1 -1
  337. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  338. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  339. scipy/optimize/tests/test_least_squares.py +125 -13
  340. scipy/optimize/tests/test_linear_assignment.py +3 -3
  341. scipy/optimize/tests/test_linprog.py +3 -3
  342. scipy/optimize/tests/test_lsq_linear.py +6 -6
  343. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  344. scipy/optimize/tests/test_minpack.py +4 -4
  345. scipy/optimize/tests/test_nnls.py +43 -3
  346. scipy/optimize/tests/test_nonlin.py +36 -0
  347. scipy/optimize/tests/test_optimize.py +98 -20
  348. scipy/optimize/tests/test_slsqp.py +36 -4
  349. scipy/optimize/tests/test_zeros.py +34 -1
  350. scipy/signal/__init__.py +12 -23
  351. scipy/signal/_delegators.py +568 -0
  352. scipy/signal/_filter_design.py +459 -241
  353. scipy/signal/_fir_filter_design.py +262 -90
  354. scipy/signal/_lti_conversion.py +3 -2
  355. scipy/signal/_ltisys.py +118 -91
  356. scipy/signal/_max_len_seq_inner.cpython-313t-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_peak_finding_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  358. scipy/signal/_polyutils.py +172 -0
  359. scipy/signal/_short_time_fft.py +553 -76
  360. scipy/signal/_signal_api.py +30 -0
  361. scipy/signal/_signaltools.py +719 -396
  362. scipy/signal/_sigtools.cpython-313t-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_sosfilt.cpython-313t-aarch64-linux-musl.so +0 -0
  364. scipy/signal/_spectral_py.py +230 -50
  365. scipy/signal/_spline.cpython-313t-aarch64-linux-musl.so +0 -0
  366. scipy/signal/_spline_filters.py +108 -68
  367. scipy/signal/_support_alternative_backends.py +73 -0
  368. scipy/signal/_upfirdn.py +4 -1
  369. scipy/signal/_upfirdn_apply.cpython-313t-aarch64-linux-musl.so +0 -0
  370. scipy/signal/_waveforms.py +2 -11
  371. scipy/signal/_wavelets.py +1 -1
  372. scipy/signal/fir_filter_design.py +1 -0
  373. scipy/signal/spline.py +4 -11
  374. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  375. scipy/signal/tests/test_bsplines.py +114 -79
  376. scipy/signal/tests/test_cont2discrete.py +9 -2
  377. scipy/signal/tests/test_filter_design.py +721 -481
  378. scipy/signal/tests/test_fir_filter_design.py +332 -140
  379. scipy/signal/tests/test_savitzky_golay.py +4 -3
  380. scipy/signal/tests/test_short_time_fft.py +231 -5
  381. scipy/signal/tests/test_signaltools.py +2150 -1349
  382. scipy/signal/tests/test_spectral.py +50 -6
  383. scipy/signal/tests/test_splines.py +161 -96
  384. scipy/signal/tests/test_upfirdn.py +84 -50
  385. scipy/signal/tests/test_waveforms.py +20 -0
  386. scipy/signal/tests/test_windows.py +607 -466
  387. scipy/signal/windows/_windows.py +287 -148
  388. scipy/sparse/__init__.py +23 -4
  389. scipy/sparse/_base.py +269 -120
  390. scipy/sparse/_bsr.py +7 -4
  391. scipy/sparse/_compressed.py +59 -234
  392. scipy/sparse/_construct.py +90 -38
  393. scipy/sparse/_coo.py +115 -181
  394. scipy/sparse/_csc.py +4 -4
  395. scipy/sparse/_csparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_csr.py +2 -2
  397. scipy/sparse/_data.py +48 -48
  398. scipy/sparse/_dia.py +105 -21
  399. scipy/sparse/_dok.py +0 -23
  400. scipy/sparse/_index.py +4 -4
  401. scipy/sparse/_matrix.py +23 -0
  402. scipy/sparse/_sparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  403. scipy/sparse/_sputils.py +37 -22
  404. scipy/sparse/base.py +0 -9
  405. scipy/sparse/bsr.py +0 -14
  406. scipy/sparse/compressed.py +0 -23
  407. scipy/sparse/construct.py +0 -6
  408. scipy/sparse/coo.py +0 -14
  409. scipy/sparse/csc.py +0 -3
  410. scipy/sparse/csgraph/_flow.cpython-313t-aarch64-linux-musl.so +0 -0
  411. scipy/sparse/csgraph/_matching.cpython-313t-aarch64-linux-musl.so +0 -0
  412. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-aarch64-linux-musl.so +0 -0
  413. scipy/sparse/csgraph/_reordering.cpython-313t-aarch64-linux-musl.so +0 -0
  414. scipy/sparse/csgraph/_shortest_path.cpython-313t-aarch64-linux-musl.so +0 -0
  415. scipy/sparse/csgraph/_tools.cpython-313t-aarch64-linux-musl.so +0 -0
  416. scipy/sparse/csgraph/_traversal.cpython-313t-aarch64-linux-musl.so +0 -0
  417. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  418. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  419. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  420. scipy/sparse/csr.py +0 -5
  421. scipy/sparse/data.py +1 -6
  422. scipy/sparse/dia.py +0 -7
  423. scipy/sparse/dok.py +0 -10
  424. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-aarch64-linux-musl.so +0 -0
  425. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  426. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  427. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-aarch64-linux-musl.so +0 -0
  428. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  429. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  430. scipy/sparse/linalg/_expm_multiply.py +8 -3
  431. scipy/sparse/linalg/_interface.py +29 -26
  432. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  433. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  434. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  435. scipy/sparse/linalg/_isolve/minres.py +5 -5
  436. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  437. scipy/sparse/linalg/_isolve/utils.py +2 -8
  438. scipy/sparse/linalg/_matfuncs.py +1 -1
  439. scipy/sparse/linalg/_norm.py +1 -1
  440. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  441. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  442. scipy/sparse/linalg/_propack/_spropack.cpython-313t-aarch64-linux-musl.so +0 -0
  443. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  444. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  445. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  446. scipy/sparse/linalg/tests/test_interface.py +35 -0
  447. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  448. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  449. scipy/sparse/tests/test_base.py +224 -40
  450. scipy/sparse/tests/test_common1d.py +17 -12
  451. scipy/sparse/tests/test_construct.py +1 -1
  452. scipy/sparse/tests/test_coo.py +272 -4
  453. scipy/sparse/tests/test_sparsetools.py +5 -0
  454. scipy/sparse/tests/test_sputils.py +36 -7
  455. scipy/spatial/_ckdtree.cpython-313t-aarch64-linux-musl.so +0 -0
  456. scipy/spatial/_distance_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/_distance_wrap.cpython-313t-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/_hausdorff.cpython-313t-aarch64-linux-musl.so +0 -0
  459. scipy/spatial/_qhull.cpython-313t-aarch64-linux-musl.so +0 -0
  460. scipy/spatial/_voronoi.cpython-313t-aarch64-linux-musl.so +0 -0
  461. scipy/spatial/distance.py +49 -42
  462. scipy/spatial/tests/test_distance.py +15 -1
  463. scipy/spatial/tests/test_kdtree.py +1 -0
  464. scipy/spatial/tests/test_qhull.py +106 -2
  465. scipy/spatial/transform/__init__.py +5 -3
  466. scipy/spatial/transform/_rigid_transform.cpython-313t-aarch64-linux-musl.so +0 -0
  467. scipy/spatial/transform/_rotation.cpython-313t-aarch64-linux-musl.so +0 -0
  468. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  469. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  470. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  471. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  472. scipy/special/__init__.py +1 -47
  473. scipy/special/_add_newdocs.py +34 -772
  474. scipy/special/_basic.py +22 -25
  475. scipy/special/_comb.cpython-313t-aarch64-linux-musl.so +0 -0
  476. scipy/special/_ellip_harm_2.cpython-313t-aarch64-linux-musl.so +0 -0
  477. scipy/special/_gufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  478. scipy/special/_logsumexp.py +83 -69
  479. scipy/special/_orthogonal.pyi +1 -1
  480. scipy/special/_specfun.cpython-313t-aarch64-linux-musl.so +0 -0
  481. scipy/special/_special_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  482. scipy/special/_spherical_bessel.py +4 -4
  483. scipy/special/_support_alternative_backends.py +212 -119
  484. scipy/special/_test_internal.cpython-313t-aarch64-linux-musl.so +0 -0
  485. scipy/special/_testutils.py +4 -4
  486. scipy/special/_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  487. scipy/special/_ufuncs.pyi +1 -0
  488. scipy/special/_ufuncs.pyx +215 -1400
  489. scipy/special/_ufuncs_cxx.cpython-313t-aarch64-linux-musl.so +0 -0
  490. scipy/special/_ufuncs_cxx.pxd +2 -15
  491. scipy/special/_ufuncs_cxx.pyx +5 -44
  492. scipy/special/_ufuncs_cxx_defs.h +2 -16
  493. scipy/special/_ufuncs_defs.h +0 -8
  494. scipy/special/cython_special.cpython-313t-aarch64-linux-musl.so +0 -0
  495. scipy/special/cython_special.pxd +1 -1
  496. scipy/special/tests/_cython_examples/meson.build +10 -1
  497. scipy/special/tests/test_basic.py +153 -20
  498. scipy/special/tests/test_boost_ufuncs.py +3 -0
  499. scipy/special/tests/test_cdflib.py +35 -11
  500. scipy/special/tests/test_gammainc.py +16 -0
  501. scipy/special/tests/test_hyp2f1.py +23 -2
  502. scipy/special/tests/test_log1mexp.py +85 -0
  503. scipy/special/tests/test_logsumexp.py +220 -64
  504. scipy/special/tests/test_mpmath.py +1 -0
  505. scipy/special/tests/test_nan_inputs.py +1 -1
  506. scipy/special/tests/test_orthogonal.py +17 -18
  507. scipy/special/tests/test_sf_error.py +3 -2
  508. scipy/special/tests/test_sph_harm.py +6 -7
  509. scipy/special/tests/test_support_alternative_backends.py +211 -76
  510. scipy/stats/__init__.py +4 -1
  511. scipy/stats/_ansari_swilk_statistics.cpython-313t-aarch64-linux-musl.so +0 -0
  512. scipy/stats/_axis_nan_policy.py +5 -12
  513. scipy/stats/_biasedurn.cpython-313t-aarch64-linux-musl.so +0 -0
  514. scipy/stats/_continued_fraction.py +387 -0
  515. scipy/stats/_continuous_distns.py +296 -319
  516. scipy/stats/_correlation.py +1 -1
  517. scipy/stats/_covariance.py +6 -3
  518. scipy/stats/_discrete_distns.py +39 -32
  519. scipy/stats/_distn_infrastructure.py +39 -12
  520. scipy/stats/_distribution_infrastructure.py +920 -238
  521. scipy/stats/_entropy.py +9 -10
  522. scipy/{_lib → stats}/_finite_differences.py +1 -1
  523. scipy/stats/_hypotests.py +83 -50
  524. scipy/stats/_kde.py +53 -49
  525. scipy/stats/_ksstats.py +1 -1
  526. scipy/stats/_levy_stable/__init__.py +7 -15
  527. scipy/stats/_levy_stable/levyst.cpython-313t-aarch64-linux-musl.so +0 -0
  528. scipy/stats/_morestats.py +118 -73
  529. scipy/stats/_mstats_basic.py +13 -17
  530. scipy/stats/_mstats_extras.py +8 -8
  531. scipy/stats/_multivariate.py +89 -113
  532. scipy/stats/_new_distributions.py +97 -20
  533. scipy/stats/_page_trend_test.py +12 -5
  534. scipy/stats/_probability_distribution.py +265 -43
  535. scipy/stats/_qmc.py +14 -9
  536. scipy/stats/_qmc_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  537. scipy/stats/_qmvnt.py +16 -95
  538. scipy/stats/_qmvnt_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_quantile.py +335 -0
  540. scipy/stats/_rcont/rcont.cpython-313t-aarch64-linux-musl.so +0 -0
  541. scipy/stats/_resampling.py +5 -30
  542. scipy/stats/_sampling.py +1 -1
  543. scipy/stats/_sobol.cpython-313t-aarch64-linux-musl.so +0 -0
  544. scipy/stats/_stats.cpython-313t-aarch64-linux-musl.so +0 -0
  545. scipy/stats/_stats_mstats_common.py +21 -2
  546. scipy/stats/_stats_py.py +551 -477
  547. scipy/stats/_stats_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  548. scipy/stats/_unuran/unuran_wrapper.cpython-313t-aarch64-linux-musl.so +0 -0
  549. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  550. scipy/stats/_variation.py +6 -8
  551. scipy/stats/_wilcoxon.py +13 -7
  552. scipy/stats/tests/common_tests.py +6 -4
  553. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  554. scipy/stats/tests/test_continued_fraction.py +173 -0
  555. scipy/stats/tests/test_continuous.py +379 -60
  556. scipy/stats/tests/test_continuous_basic.py +18 -12
  557. scipy/stats/tests/test_discrete_basic.py +14 -8
  558. scipy/stats/tests/test_discrete_distns.py +16 -16
  559. scipy/stats/tests/test_distributions.py +117 -75
  560. scipy/stats/tests/test_entropy.py +40 -48
  561. scipy/stats/tests/test_fit.py +4 -3
  562. scipy/stats/tests/test_hypotests.py +153 -24
  563. scipy/stats/tests/test_kdeoth.py +109 -41
  564. scipy/stats/tests/test_marray.py +289 -0
  565. scipy/stats/tests/test_morestats.py +81 -49
  566. scipy/stats/tests/test_mstats_basic.py +3 -3
  567. scipy/stats/tests/test_multivariate.py +434 -83
  568. scipy/stats/tests/test_qmc.py +13 -10
  569. scipy/stats/tests/test_quantile.py +199 -0
  570. scipy/stats/tests/test_rank.py +119 -112
  571. scipy/stats/tests/test_resampling.py +47 -56
  572. scipy/stats/tests/test_sampling.py +9 -4
  573. scipy/stats/tests/test_stats.py +799 -939
  574. scipy/stats/tests/test_variation.py +8 -6
  575. scipy/version.py +2 -2
  576. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
  577. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
  578. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +1316 -1323
  579. scipy.libs/libgcc_s-2d945d6c.so.1 +0 -0
  580. scipy.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  581. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  582. scipy/_lib/array_api_extra/_funcs.py +0 -484
  583. scipy/_lib/array_api_extra/_typing.py +0 -8
  584. scipy/interpolate/_bspl.cpython-313t-aarch64-linux-musl.so +0 -0
  585. scipy/optimize/_cobyla.cpython-313t-aarch64-linux-musl.so +0 -0
  586. scipy/optimize/_cython_nnls.cpython-313t-aarch64-linux-musl.so +0 -0
  587. scipy/optimize/_slsqp.cpython-313t-aarch64-linux-musl.so +0 -0
  588. scipy/spatial/qhull_src/COPYING.txt +0 -38
  589. scipy/special/libsf_error_state.so +0 -0
  590. scipy/special/tests/test_log_softmax.py +0 -109
  591. scipy/special/tests/test_xsf_cuda.py +0 -114
  592. scipy/special/xsf/binom.h +0 -89
  593. scipy/special/xsf/cdflib.h +0 -100
  594. scipy/special/xsf/cephes/airy.h +0 -307
  595. scipy/special/xsf/cephes/besselpoly.h +0 -51
  596. scipy/special/xsf/cephes/beta.h +0 -257
  597. scipy/special/xsf/cephes/cbrt.h +0 -131
  598. scipy/special/xsf/cephes/chbevl.h +0 -85
  599. scipy/special/xsf/cephes/chdtr.h +0 -193
  600. scipy/special/xsf/cephes/const.h +0 -87
  601. scipy/special/xsf/cephes/ellie.h +0 -293
  602. scipy/special/xsf/cephes/ellik.h +0 -251
  603. scipy/special/xsf/cephes/ellpe.h +0 -107
  604. scipy/special/xsf/cephes/ellpk.h +0 -117
  605. scipy/special/xsf/cephes/expn.h +0 -260
  606. scipy/special/xsf/cephes/gamma.h +0 -398
  607. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  608. scipy/special/xsf/cephes/hyperg.h +0 -361
  609. scipy/special/xsf/cephes/i0.h +0 -149
  610. scipy/special/xsf/cephes/i1.h +0 -158
  611. scipy/special/xsf/cephes/igam.h +0 -421
  612. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  613. scipy/special/xsf/cephes/igami.h +0 -313
  614. scipy/special/xsf/cephes/j0.h +0 -225
  615. scipy/special/xsf/cephes/j1.h +0 -198
  616. scipy/special/xsf/cephes/jv.h +0 -715
  617. scipy/special/xsf/cephes/k0.h +0 -164
  618. scipy/special/xsf/cephes/k1.h +0 -163
  619. scipy/special/xsf/cephes/kn.h +0 -243
  620. scipy/special/xsf/cephes/lanczos.h +0 -112
  621. scipy/special/xsf/cephes/ndtr.h +0 -275
  622. scipy/special/xsf/cephes/poch.h +0 -85
  623. scipy/special/xsf/cephes/polevl.h +0 -167
  624. scipy/special/xsf/cephes/psi.h +0 -194
  625. scipy/special/xsf/cephes/rgamma.h +0 -111
  626. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  627. scipy/special/xsf/cephes/shichi.h +0 -248
  628. scipy/special/xsf/cephes/sici.h +0 -224
  629. scipy/special/xsf/cephes/sindg.h +0 -221
  630. scipy/special/xsf/cephes/tandg.h +0 -139
  631. scipy/special/xsf/cephes/trig.h +0 -58
  632. scipy/special/xsf/cephes/unity.h +0 -186
  633. scipy/special/xsf/cephes/zeta.h +0 -172
  634. scipy/special/xsf/config.h +0 -304
  635. scipy/special/xsf/digamma.h +0 -205
  636. scipy/special/xsf/error.h +0 -57
  637. scipy/special/xsf/evalpoly.h +0 -47
  638. scipy/special/xsf/expint.h +0 -266
  639. scipy/special/xsf/hyp2f1.h +0 -694
  640. scipy/special/xsf/iv_ratio.h +0 -173
  641. scipy/special/xsf/lambertw.h +0 -150
  642. scipy/special/xsf/loggamma.h +0 -163
  643. scipy/special/xsf/sici.h +0 -200
  644. scipy/special/xsf/tools.h +0 -427
  645. scipy/special/xsf/trig.h +0 -164
  646. scipy/special/xsf/wright_bessel.h +0 -843
  647. scipy/special/xsf/zlog1.h +0 -35
  648. scipy/stats/_mvn.cpython-313t-aarch64-linux-musl.so +0 -0
  649. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  650. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  651. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/WHEEL +0 -0
@@ -28,6 +28,9 @@ import random
28
28
  from numpy.testing import (assert_equal, assert_array_equal,
29
29
  assert_array_almost_equal, assert_almost_equal, assert_,
30
30
  assert_allclose, suppress_warnings)
31
+ from numpy.exceptions import ComplexWarning
32
+
33
+ from types import GenericAlias
31
34
 
32
35
  import scipy.linalg
33
36
 
@@ -36,14 +39,13 @@ from scipy.sparse import (csc_matrix, csr_matrix, dok_matrix,
36
39
  coo_matrix, lil_matrix, dia_matrix, bsr_matrix,
37
40
  csc_array, csr_array, dok_array,
38
41
  coo_array, lil_array, dia_array, bsr_array,
39
- eye, issparse, SparseEfficiencyWarning, sparray)
42
+ eye, issparse, SparseEfficiencyWarning, sparray, spmatrix)
40
43
  from scipy.sparse._base import _formats
41
44
  from scipy.sparse._sputils import (supported_dtypes, isscalarlike,
42
45
  get_index_dtype, asmatrix, matrix)
43
46
  from scipy.sparse.linalg import splu, expm, inv
44
47
 
45
48
  from scipy._lib.decorator import decorator
46
- from scipy._lib._util import ComplexWarning
47
49
 
48
50
  IS_COLAB = ('google.colab' in sys.modules)
49
51
 
@@ -431,6 +433,13 @@ class _TestCommon:
431
433
  for dtype in self.checked_dtypes:
432
434
  check(dtype)
433
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
+
434
443
  def test_lt(self):
435
444
  sup = suppress_warnings()
436
445
  sup.filter(SparseEfficiencyWarning)
@@ -1021,10 +1030,8 @@ class _TestCommon:
1021
1030
  assert_array_almost_equal(dat.sum(), datsp.sum())
1022
1031
  assert_equal(dat.sum().dtype, datsp.sum().dtype)
1023
1032
  assert_(np.isscalar(datsp.sum(axis=None)))
1024
- assert_array_almost_equal(dat.sum(axis=None),
1025
- datsp.sum(axis=None))
1026
- assert_equal(dat.sum(axis=None).dtype,
1027
- datsp.sum(axis=None).dtype)
1033
+ assert_array_almost_equal(dat.sum(axis=None), datsp.sum(axis=None))
1034
+ assert_equal(dat.sum(axis=None).dtype, datsp.sum(axis=None).dtype)
1028
1035
  assert_array_almost_equal(dat.sum(axis=0), datsp.sum(axis=0))
1029
1036
  assert_equal(dat.sum(axis=0).dtype, datsp.sum(axis=0).dtype)
1030
1037
  assert_array_almost_equal(dat.sum(axis=1), datsp.sum(axis=1))
@@ -1033,6 +1040,8 @@ class _TestCommon:
1033
1040
  assert_equal(dat.sum(axis=-2).dtype, datsp.sum(axis=-2).dtype)
1034
1041
  assert_array_almost_equal(dat.sum(axis=-1), datsp.sum(axis=-1))
1035
1042
  assert_equal(dat.sum(axis=-1).dtype, datsp.sum(axis=-1).dtype)
1043
+ assert_array_almost_equal(dat.sum(axis=(0, 1)), datsp.sum(axis=(0, 1)))
1044
+ assert_equal(dat.sum(axis=(0, 1)).dtype, datsp.sum(axis=(0, 1)).dtype)
1036
1045
 
1037
1046
  for dtype in self.checked_dtypes:
1038
1047
  for j in range(len(matrices)):
@@ -1045,10 +1054,15 @@ class _TestCommon:
1045
1054
  [-6, 7, 9]])
1046
1055
  datsp = self.spcreator(dat)
1047
1056
 
1048
- assert_raises(ValueError, datsp.sum, axis=3)
1049
- assert_raises(TypeError, datsp.sum, axis=(0, 1))
1050
- assert_raises(TypeError, datsp.sum, axis=1.5)
1051
- assert_raises(ValueError, datsp.sum, axis=1, out=out)
1057
+ with assert_raises(ValueError, match="axis out of range"):
1058
+ datsp.sum(axis=3)
1059
+ with assert_raises(ValueError, match="axis out of range"):
1060
+ datsp.sum(axis=(0, 3))
1061
+ with assert_raises(TypeError, match="axis must be an integer"):
1062
+ datsp.sum(axis=1.5)
1063
+ # error msg varies by sparray (1d result) or spmatrix (2d result)
1064
+ with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
1065
+ datsp.mean(axis=1, out=out)
1052
1066
 
1053
1067
  def test_sum_dtype(self):
1054
1068
  dat = array([[0, 1, 2],
@@ -1087,6 +1101,12 @@ class _TestCommon:
1087
1101
  datsp.sum(axis=1, out=datsp_out)
1088
1102
  assert_array_almost_equal(dat_out, datsp_out)
1089
1103
 
1104
+ # check that wrong shape out parameter raises
1105
+ with assert_raises(ValueError, match="output parameter"):
1106
+ datsp.sum(out=array([0]))
1107
+ with assert_raises(ValueError, match="output parameter"):
1108
+ datsp.sum(out=array([[0]] if self.is_array_test else 0))
1109
+
1090
1110
  def test_numpy_sum(self):
1091
1111
  # See gh-5987
1092
1112
  dat = array([[0, 1, 2],
@@ -1100,6 +1120,21 @@ class _TestCommon:
1100
1120
  assert_array_almost_equal(dat_sum, datsp_sum)
1101
1121
  assert_equal(dat_sum.dtype, datsp_sum.dtype)
1102
1122
 
1123
+ def test_sum_mean_container_type(self):
1124
+ dat = array([[0, 1, 2],
1125
+ [3, -4, 5],
1126
+ [-6, 7, 9]])
1127
+ datsp = self.spcreator(dat)
1128
+
1129
+ assert isscalarlike(datsp.sum())
1130
+ matrix_or_array = ndarray if self.is_array_test else np.matrix
1131
+ assert isinstance(datsp.sum(axis=0), matrix_or_array)
1132
+ assert isinstance(datsp.sum(axis=1), matrix_or_array)
1133
+
1134
+ assert isscalarlike(datsp.mean())
1135
+ assert isinstance(datsp.mean(axis=0), matrix_or_array)
1136
+ assert isinstance(datsp.mean(axis=1), matrix_or_array)
1137
+
1103
1138
  def test_mean(self):
1104
1139
  keep = not self.is_array_test
1105
1140
  def check(dtype):
@@ -1131,21 +1166,31 @@ class _TestCommon:
1131
1166
  dat.mean(axis=-1, keepdims=keep), datsp.mean(axis=-1)
1132
1167
  )
1133
1168
  assert_equal(dat.mean(axis=-1).dtype, datsp.mean(axis=-1).dtype)
1169
+ assert_array_almost_equal(
1170
+ dat.mean(axis=(0, 1), keepdims=keep), datsp.mean(axis=(0, 1))
1171
+ )
1172
+ assert_equal(dat.mean(axis=(0, 1)).dtype, datsp.mean(axis=(0, 1)).dtype)
1173
+
1134
1174
 
1135
1175
  for dtype in self.checked_dtypes:
1136
1176
  check(dtype)
1137
1177
 
1138
- def test_mean_invalid_params(self):
1178
+ def test_mean_invalid_param(self):
1139
1179
  out = self.asdense(np.zeros((1, 3)))
1140
1180
  dat = array([[0, 1, 2],
1141
1181
  [3, -4, 5],
1142
1182
  [-6, 7, 9]])
1143
1183
  datsp = self.spcreator(dat)
1144
1184
 
1145
- assert_raises(ValueError, datsp.mean, axis=3)
1146
- assert_raises(TypeError, datsp.mean, axis=(0, 1))
1147
- assert_raises(TypeError, datsp.mean, axis=1.5)
1148
- assert_raises(ValueError, datsp.mean, axis=1, out=out)
1185
+ with assert_raises(ValueError, match="axis out of range"):
1186
+ datsp.mean(axis=3)
1187
+ with assert_raises(ValueError, match="axis out of range"):
1188
+ datsp.mean(axis=(0, 3))
1189
+ with assert_raises(TypeError, match="axis must be an integer"):
1190
+ datsp.mean(axis=1.5)
1191
+ # error msg varies by sparray (1d result) or spmatrix (2d result)
1192
+ with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
1193
+ datsp.mean(axis=1, out=out)
1149
1194
 
1150
1195
  def test_mean_dtype(self):
1151
1196
  dat = array([[0, 1, 2],
@@ -1184,6 +1229,12 @@ class _TestCommon:
1184
1229
  datsp.mean(axis=1, out=datsp_out)
1185
1230
  assert_array_almost_equal(dat_out, datsp_out)
1186
1231
 
1232
+ # check that wrong shape out parameter raises
1233
+ with assert_raises(ValueError, match="output parameter.*wrong.*dimension"):
1234
+ datsp.mean(out=array([0]))
1235
+ with assert_raises(ValueError, match="output parameter.*wrong.*dimension"):
1236
+ datsp.mean(out=array([[0]] if self.is_array_test else 0))
1237
+
1187
1238
  def test_numpy_mean(self):
1188
1239
  # See gh-5987
1189
1240
  dat = array([[0, 1, 2],
@@ -1637,7 +1688,10 @@ class _TestCommon:
1637
1688
  except ValueError:
1638
1689
  assert_raises(ValueError, i.multiply, j)
1639
1690
  continue
1640
- sp_mult = i.multiply(j)
1691
+ try:
1692
+ sp_mult = i.multiply(j)
1693
+ except ValueError:
1694
+ continue
1641
1695
  if issparse(sp_mult):
1642
1696
  assert_almost_equal(sp_mult.toarray(), dense_mult)
1643
1697
  else:
@@ -1683,13 +1737,7 @@ class _TestCommon:
1683
1737
  B = self.spcreator(A)
1684
1738
 
1685
1739
  if self.is_array_test: # sparrays use element-wise power
1686
- # Todo: Add 1+3j to tested exponent list when np1.24 is no longer supported
1687
- # Complex exponents of 0 (our implicit fill value) change in numpy-1.25
1688
- # from `(nan+nanj)` to `0`. Old value makes array element-wise result
1689
- # dense and is hard to check for without any `isnan` method.
1690
- # So while untested here, element-wise complex exponents work with np>=1.25.
1691
- # for exponent in [1, 2, 2.2, 3, 1+3j]:
1692
- for exponent in [1, 2, 2.2, 3]:
1740
+ for exponent in [1, 2, 2.2, 3, 1+3j]:
1693
1741
  ret_sp = B**exponent
1694
1742
  ret_np = A**exponent
1695
1743
  assert_array_equal(ret_sp.toarray(), ret_np)
@@ -2060,8 +2108,8 @@ class _TestCommon:
2060
2108
 
2061
2109
  with suppress_warnings() as sup:
2062
2110
  sup.filter(SparseEfficiencyWarning,
2063
- "Taking maximum .minimum. with > 0 .< 0. number "
2064
- "results to a dense matrix")
2111
+ "Taking (maximum|minimum) with a (positive|negative) number "
2112
+ "results in a dense matrix")
2065
2113
 
2066
2114
  max_s = A.maximum(B)
2067
2115
  min_s = A.minimum(B)
@@ -2354,20 +2402,14 @@ class _TestInplaceArithmetic:
2354
2402
 
2355
2403
  # Matrix multiply from __rmatmul__
2356
2404
  y = a.copy()
2357
- # skip this test if numpy doesn't support __imatmul__ yet.
2358
- # move out of the try/except once numpy 1.24 is no longer supported.
2359
- try:
2360
- y @= b.T
2361
- except TypeError:
2362
- pass
2363
- else:
2364
- x = a.copy()
2365
- y = a.copy()
2366
- with assert_raises(ValueError, match="dimension mismatch"):
2367
- x @= b
2368
- x = x.dot(a.T)
2369
- y @= b.T
2370
- assert_array_equal(x, y)
2405
+ y @= b.T
2406
+ x = a.copy()
2407
+ y = a.copy()
2408
+ with assert_raises(ValueError, match="dimension mismatch"):
2409
+ x @= b
2410
+ x = x.dot(a.T)
2411
+ y @= b.T
2412
+ assert_array_equal(x, y)
2371
2413
 
2372
2414
  # Floor division is not supported
2373
2415
  with assert_raises(TypeError, match="unsupported operand"):
@@ -3708,9 +3750,11 @@ class _TestMinMax:
3708
3750
  X = self.spcreator(np.arange(1, 10).reshape(3, 3))
3709
3751
  assert_equal(X.min(), 1)
3710
3752
  assert_equal(X.min().dtype, X.dtype)
3753
+ assert_equal(X.min(explicit=True), 1)
3711
3754
 
3712
3755
  X = -X
3713
3756
  assert_equal(X.max(), -1)
3757
+ assert_equal(X.max(explicit=True), -1)
3714
3758
 
3715
3759
  # and a fully sparse matrix
3716
3760
  Z = self.spcreator(np.zeros((1, 1)))
@@ -3785,6 +3829,7 @@ class _TestMinMax:
3785
3829
  assert_array_equal(
3786
3830
  X.min(axis=axis).toarray(), D.min(axis=axis, keepdims=keep)
3787
3831
  )
3832
+ assert_equal(X.max(axis=(0, 1)), D.max(axis=(0, 1), keepdims=keep))
3788
3833
 
3789
3834
  for axis in axes_even:
3790
3835
  expected_max = D[-1, :]
@@ -3832,6 +3877,38 @@ class _TestMinMax:
3832
3877
  assert_equal(X.max(axis=axis, explicit=ex).toarray(), D.max(axis=axis))
3833
3878
  assert_equal(X.min(axis=axis, explicit=ex).toarray(), D.min(axis=axis))
3834
3879
 
3880
+ def test_minmax_container_type(self):
3881
+ dat = array([[0, 1, 2],
3882
+ [3, -4, 5],
3883
+ [-6, 7, 9]])
3884
+ datsp = self.spcreator(dat)
3885
+ matrix_or_array = ndarray if self.is_array_test else np.matrix
3886
+ spmatrix_or_sparray = sparray if self.is_array_test else spmatrix
3887
+
3888
+ assert isscalarlike(datsp.min())
3889
+ assert isinstance(datsp.min(axis=0), spmatrix_or_sparray)
3890
+ assert isinstance(datsp.min(axis=1), spmatrix_or_sparray)
3891
+
3892
+ assert isscalarlike(datsp.max())
3893
+ assert isinstance(datsp.max(axis=0), spmatrix_or_sparray)
3894
+ assert isinstance(datsp.max(axis=1), spmatrix_or_sparray)
3895
+
3896
+ assert isscalarlike(datsp.nanmin())
3897
+ assert isinstance(datsp.nanmin(axis=0), spmatrix_or_sparray)
3898
+ assert isinstance(datsp.nanmin(axis=1), spmatrix_or_sparray)
3899
+
3900
+ assert isscalarlike(datsp.nanmax())
3901
+ assert isinstance(datsp.nanmax(axis=0), spmatrix_or_sparray)
3902
+ assert isinstance(datsp.nanmax(axis=1), spmatrix_or_sparray)
3903
+
3904
+ assert isscalarlike(datsp.argmin())
3905
+ assert isinstance(datsp.argmin(axis=0), matrix_or_array)
3906
+ assert isinstance(datsp.argmin(axis=1), matrix_or_array)
3907
+
3908
+ assert isscalarlike(datsp.argmax())
3909
+ assert isinstance(datsp.argmax(axis=0), matrix_or_array)
3910
+ assert isinstance(datsp.argmax(axis=1), matrix_or_array)
3911
+
3835
3912
  def test_nanminmax(self):
3836
3913
  D = self.asdense(np.arange(50).reshape(5,10), dtype=float)
3837
3914
  D[1, :] = 0
@@ -3850,6 +3927,10 @@ class _TestMinMax:
3850
3927
  assert np.isscalar(X_nan_minimum)
3851
3928
  assert X_nan_minimum == np.nanmin(D)
3852
3929
 
3930
+ X_nan_minimum = X.nanmin(axis=(0, 1))
3931
+ assert np.isscalar(X_nan_minimum)
3932
+ assert X_nan_minimum == np.nanmin(D, axis=(0, 1))
3933
+
3853
3934
  axes = [-2, -1, 0, 1]
3854
3935
  for axis in axes:
3855
3936
  X_nan_maxima = X.nanmax(axis=axis)
@@ -3867,11 +3948,12 @@ class _TestMinMax:
3867
3948
  datsp = self.spcreator(dat)
3868
3949
 
3869
3950
  for fname in ('min', 'max'):
3951
+ datfunc = getattr(dat, fname)
3870
3952
  func = getattr(datsp, fname)
3871
3953
  assert_raises(ValueError, func, axis=3)
3872
- assert_raises(TypeError, func, axis=(0, 1))
3873
3954
  assert_raises(TypeError, func, axis=1.5)
3874
3955
  assert_raises(ValueError, func, axis=1, out=1)
3956
+ assert_equal(func(axis=(0, 1)), datfunc(axis=(0, 1)))
3875
3957
 
3876
3958
  def test_numpy_minmax(self):
3877
3959
  # See gh-5987
@@ -3921,6 +4003,13 @@ class _TestMinMax:
3921
4003
  assert_equal(mat.argmax(axis=1), np.argmax(D, axis=1))
3922
4004
  assert_equal(mat.argmin(axis=1), np.argmin(D, axis=1))
3923
4005
 
4006
+ # full matrix with explicit=True
4007
+ mat = self.spcreator(self.asdense(D5))
4008
+ assert_equal(mat.argmax(explicit=True), 5)
4009
+ assert_equal((-mat).argmax(explicit=True), 2)
4010
+ assert_equal(mat.argmin(explicit=True), 2)
4011
+ assert_equal((-mat).argmin(explicit=True), 5)
4012
+
3924
4013
  # zero-size matrices
3925
4014
  D6 = self.spcreator(np.empty((0, 5)))
3926
4015
  D7 = self.spcreator(np.empty((5, 0)))
@@ -4343,6 +4432,12 @@ class TestCSRMatrix(_MatrixMixin, TestCSR):
4343
4432
  with suppress_warnings() as sup:
4344
4433
  sup.filter(SparseEfficiencyWarning, "Changing the sparsity structure")
4345
4434
  return csr_matrix(*args, **kwargs)
4435
+
4436
+ def test_spmatrix_subscriptable(self):
4437
+ result = csr_matrix[np.int8]
4438
+ assert isinstance(result, GenericAlias)
4439
+ assert result.__origin__ is csr_matrix
4440
+ assert result.__args__ == (np.int8,)
4346
4441
 
4347
4442
 
4348
4443
  TestCSRMatrix.init_class()
@@ -4878,6 +4973,17 @@ class TestCOO(sparse_test_class(getset=False,
4878
4973
  # Using __ne__ and nnz instead
4879
4974
  assert_((mat1.reshape((1001, 3000001), order='C') != mat2).nnz == 0)
4880
4975
  assert_((mat2.reshape((3000001, 1001), order='F') != mat1).nnz == 0)
4976
+
4977
+ def test_sparray_subscriptable(self):
4978
+ result = coo_array[np.int8, tuple[int]]
4979
+ assert isinstance(result, GenericAlias)
4980
+ assert result.__origin__ is coo_array
4981
+ assert result.__args__ == (np.int8, tuple[int])
4982
+
4983
+ result = coo_array[np.int8]
4984
+ assert isinstance(result, GenericAlias)
4985
+ assert result.__origin__ is coo_array
4986
+ assert result.__args__ == (np.int8,)
4881
4987
 
4882
4988
 
4883
4989
  class TestCOOMatrix(_MatrixMixin, TestCOO):
@@ -4950,6 +5056,40 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
4950
5056
  csc = dia.tocsc()
4951
5057
  assert csc.indices.dtype == np.int32
4952
5058
 
5059
+ def test_add_sparse(self):
5060
+ # test format and cases not covered by common add tests
5061
+ A = diag([1, 2])
5062
+ B = A + diag([3], 1)
5063
+ Asp = dia_matrix(A)
5064
+ Bsp = dia_matrix(B)
5065
+
5066
+ Csp = Asp + Bsp
5067
+ assert isinstance(Csp, dia_matrix)
5068
+ assert_array_equal(Csp.toarray(), A + B)
5069
+
5070
+ Csp = Bsp + Asp
5071
+ assert isinstance(Csp, dia_matrix)
5072
+ assert_array_equal(Csp.toarray(), B + A)
5073
+
5074
+ def test_sub_sparse(self):
5075
+ # test format and cases not covered by common sub tests
5076
+ A = diag([1, 2])
5077
+ B = A + diag([3], 1)
5078
+ Asp = dia_matrix(A)
5079
+ Bsp = dia_matrix(B)
5080
+
5081
+ Csp = Asp - Bsp
5082
+ assert isinstance(Csp, dia_matrix)
5083
+ assert_array_equal(Csp.toarray(), A - B)
5084
+
5085
+ Csp = Bsp - Asp
5086
+ assert isinstance(Csp, dia_matrix)
5087
+ assert_array_equal(Csp.toarray(), B - A)
5088
+
5089
+ Bsp = Bsp.asformat('csr')
5090
+ assert_array_equal((Asp - Bsp).toarray(), A - B)
5091
+ assert_array_equal((Bsp - Asp).toarray(), B - A)
5092
+
4953
5093
  def test_mul_scalar(self):
4954
5094
  # repro for gh-20434
4955
5095
  m = self.dia_container([[1, 2], [0, 4]])
@@ -4961,6 +5101,50 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
4961
5101
  assert isinstance(res2, m.__class__)
4962
5102
  assert_array_equal(res2.toarray(), [[3, 6], [0, 12]])
4963
5103
 
5104
+ def test_matmul_dia(self):
5105
+ # test DIA structure of DIA @ DIA:
5106
+
5107
+ # that all and only needed elements are used and produced
5108
+ A = array([[1, 2, 3],
5109
+ [4, 5, 6]])
5110
+ B = array([[11, 12],
5111
+ [13, 14],
5112
+ [15, 16]])
5113
+ Asp = dia_matrix(A)
5114
+ Bsp = dia_matrix(B)
5115
+ Asp.data[Asp.data == 0] = -1 # poison outside elements
5116
+ Bsp.data[Bsp.data == 0] = -1
5117
+ assert_array_equal(Asp.toarray(), A)
5118
+ assert_array_equal(Bsp.toarray(), B)
5119
+
5120
+ C = A @ B
5121
+ Csp = Asp @ Bsp
5122
+ assert isinstance(Csp, dia_matrix)
5123
+ assert_array_equal(Csp.toarray(), C)
5124
+ assert_array_equal(Csp.offsets, [-1, 0, 1])
5125
+ assert_array_equal(Csp.data, dia_matrix(C).data)
5126
+
5127
+ C = B @ A
5128
+ Csp = Bsp @ Asp
5129
+ assert isinstance(Csp, dia_matrix)
5130
+ assert_array_equal(Csp.toarray(), C)
5131
+ assert_array_equal(Csp.offsets, [-2, -1, 0, 1, 2])
5132
+ assert_array_equal(Csp.data, dia_matrix(C).data)
5133
+
5134
+ # short data and that order of input offsets doesn't matter
5135
+ Asp = dia_matrix(([[0., 1., 2.], [3., 4., 5.]], [1, -2]), (5, 5))
5136
+ Bsp = dia_matrix(([[6., 7., 8.], [0., 0., 9.]], [-1, 2]), (5, 5))
5137
+
5138
+ Csp = Asp @ Bsp
5139
+ assert_array_equal(Csp.offsets, array([-3, 0]))
5140
+ assert_array_equal(Csp.data, [[24., 35., 0.],
5141
+ [6., 14., 27.]])
5142
+
5143
+ Csp = Bsp @ Asp
5144
+ assert_array_equal(Csp.offsets, array([-3, 0]))
5145
+ assert_array_equal(Csp.data, [[24., 0., 0.],
5146
+ [27., 6., 14.]])
5147
+
4964
5148
 
4965
5149
  class TestDIAMatrix(_MatrixMixin, TestDIA):
4966
5150
  spcreator = dia_matrix
@@ -4,13 +4,13 @@ import pytest
4
4
 
5
5
  import numpy as np
6
6
  from numpy.testing import assert_equal, assert_allclose
7
+ from numpy.exceptions import ComplexWarning
7
8
 
8
9
  from scipy.sparse import (
9
10
  bsr_array, csc_array, dia_array, lil_array,
10
11
  coo_array, csr_array, dok_array,
11
12
  )
12
13
  from scipy.sparse._sputils import supported_dtypes, matrix
13
- from scipy._lib._util import ComplexWarning
14
14
 
15
15
 
16
16
  sup_complex = np.testing.suppress_warnings()
@@ -136,13 +136,13 @@ class TestCommon1D:
136
136
  dat = np.array([0, 1, 2])
137
137
  datsp = spcreator(dat)
138
138
 
139
- with pytest.raises(ValueError, match='axis must be None, -1 or 0'):
139
+ with pytest.raises(ValueError, match='axis out of range'):
140
140
  datsp.sum(axis=1)
141
- with pytest.raises(TypeError, match='Tuples are not accepted'):
142
- datsp.sum(axis=(0, 1))
141
+ with pytest.raises(ValueError, match='axis out of range'):
142
+ datsp.sum(axis=(0, 3))
143
143
  with pytest.raises(TypeError, match='axis must be an integer'):
144
144
  datsp.sum(axis=1.5)
145
- with pytest.raises(ValueError, match='dimensions do not match'):
145
+ with pytest.raises(ValueError, match='output parameter.*wrong.*dimension'):
146
146
  datsp.sum(axis=0, out=out)
147
147
 
148
148
  def test_numpy_sum(self, spcreator):
@@ -176,11 +176,11 @@ class TestCommon1D:
176
176
  datsp = spcreator(dat)
177
177
  with pytest.raises(ValueError, match='axis out of range'):
178
178
  datsp.mean(axis=3)
179
- with pytest.raises(TypeError, match='Tuples are not accepted'):
180
- datsp.mean(axis=(0, 1))
179
+ with pytest.raises(ValueError, match='axis out of range'):
180
+ datsp.mean(axis=(0, 3))
181
181
  with pytest.raises(TypeError, match='axis must be an integer'):
182
182
  datsp.mean(axis=1.5)
183
- with pytest.raises(ValueError, match='dimensions do not match'):
183
+ with pytest.raises(ValueError, match='out.*not match shape'):
184
184
  datsp.mean(axis=1, out=out)
185
185
 
186
186
  def test_sum_dtype(self, spcreator):
@@ -209,17 +209,22 @@ class TestCommon1D:
209
209
  dat = np.array([0, 1, 2])
210
210
  datsp = spcreator(dat)
211
211
 
212
- dat_out = np.array([0])
213
- datsp_out = np.array([0])
212
+ dat_out = np.array(0)
213
+ datsp_out = np.array(0)
214
214
 
215
- dat.mean(out=dat_out, keepdims=True)
215
+ dat.mean(out=dat_out)
216
216
  datsp.mean(out=datsp_out)
217
217
  assert_allclose(dat_out, datsp_out)
218
218
 
219
- dat.mean(axis=0, out=dat_out, keepdims=True)
219
+ dat.mean(axis=0, out=dat_out)
220
220
  datsp.mean(axis=0, out=datsp_out)
221
221
  assert_allclose(dat_out, datsp_out)
222
222
 
223
+ with pytest.raises(ValueError, match="output parameter.*dimension"):
224
+ datsp.mean(out=np.array([0]))
225
+ with pytest.raises(ValueError, match="output parameter.*dimension"):
226
+ datsp.mean(out=np.array([[0]]))
227
+
223
228
  def test_numpy_mean(self, spcreator):
224
229
  dat = np.array([0, 1, 2])
225
230
  datsp = spcreator(dat)
@@ -673,7 +673,7 @@ class TestConstructUtils:
673
673
  assert isinstance(bmat([[Gm.tocsc(), Gm]], format="csr"), spmatrix)
674
674
  assert isinstance(bmat([[Gm, Gm]], format="csc"), spmatrix)
675
675
 
676
- @pytest.mark.slow
676
+ @pytest.mark.xslow
677
677
  @pytest.mark.thread_unsafe
678
678
  @pytest.mark.xfail_on_32bit("Can't create large array for test")
679
679
  def test_concatenate_int32_overflow(self):