scipy 1.15.2__cp313-cp313t-musllinux_1_2_aarch64.whl → 1.16.0rc1__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 (649) hide show
  1. scipy/__config__.py +10 -10
  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 +263 -157
  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/cython_blas.cpython-313t-aarch64-linux-musl.so +0 -0
  228. scipy/linalg/cython_lapack.cpython-313t-aarch64-linux-musl.so +0 -0
  229. scipy/linalg/lapack.py +22 -2
  230. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  231. scipy/linalg/tests/test_basic.py +31 -16
  232. scipy/linalg/tests/test_batch.py +588 -0
  233. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  234. scipy/linalg/tests/test_decomp.py +40 -3
  235. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  236. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  237. scipy/linalg/tests/test_interpolative.py +17 -0
  238. scipy/linalg/tests/test_lapack.py +115 -7
  239. scipy/linalg/tests/test_matfuncs.py +157 -102
  240. scipy/linalg/tests/test_procrustes.py +0 -7
  241. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  242. scipy/linalg/tests/test_special_matrices.py +1 -5
  243. scipy/ndimage/__init__.py +1 -0
  244. scipy/ndimage/_ctest.cpython-313t-aarch64-linux-musl.so +0 -0
  245. scipy/ndimage/_cytest.cpython-313t-aarch64-linux-musl.so +0 -0
  246. scipy/ndimage/_delegators.py +8 -2
  247. scipy/ndimage/_filters.py +433 -5
  248. scipy/ndimage/_interpolation.py +36 -6
  249. scipy/ndimage/_measurements.py +4 -2
  250. scipy/ndimage/_morphology.py +5 -0
  251. scipy/ndimage/_nd_image.cpython-313t-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_ndimage_api.py +2 -1
  253. scipy/ndimage/_ni_docstrings.py +5 -1
  254. scipy/ndimage/_ni_label.cpython-313t-aarch64-linux-musl.so +0 -0
  255. scipy/ndimage/_ni_support.py +1 -5
  256. scipy/ndimage/_rank_filter_1d.cpython-313t-aarch64-linux-musl.so +0 -0
  257. scipy/ndimage/_support_alternative_backends.py +18 -6
  258. scipy/ndimage/tests/test_filters.py +351 -259
  259. scipy/ndimage/tests/test_fourier.py +7 -9
  260. scipy/ndimage/tests/test_interpolation.py +68 -61
  261. scipy/ndimage/tests/test_measurements.py +18 -35
  262. scipy/ndimage/tests/test_morphology.py +143 -131
  263. scipy/ndimage/tests/test_splines.py +1 -3
  264. scipy/odr/__odrpack.cpython-313t-aarch64-linux-musl.so +0 -0
  265. scipy/optimize/_basinhopping.py +13 -7
  266. scipy/optimize/_bglu_dense.cpython-313t-aarch64-linux-musl.so +0 -0
  267. scipy/optimize/_bracket.py +46 -26
  268. scipy/optimize/_chandrupatla.py +9 -10
  269. scipy/optimize/_cobyla_py.py +104 -123
  270. scipy/optimize/_constraints.py +14 -10
  271. scipy/optimize/_differentiable_functions.py +371 -230
  272. scipy/optimize/_differentialevolution.py +4 -3
  273. scipy/optimize/_direct.cpython-313t-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_dual_annealing.py +1 -1
  275. scipy/optimize/_elementwise.py +1 -4
  276. scipy/optimize/_group_columns.cpython-313t-aarch64-linux-musl.so +0 -0
  277. scipy/optimize/_highspy/_core.cpython-313t-aarch64-linux-musl.so +0 -0
  278. scipy/optimize/_highspy/_highs_options.cpython-313t-aarch64-linux-musl.so +0 -0
  279. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  280. scipy/optimize/_lbfgsb.cpython-313t-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lbfgsb_py.py +57 -16
  282. scipy/optimize/_linprog_doc.py +2 -2
  283. scipy/optimize/_linprog_highs.py +11 -11
  284. scipy/optimize/_linprog_ip.py +25 -10
  285. scipy/optimize/_linprog_util.py +18 -19
  286. scipy/optimize/_lsap.cpython-313t-aarch64-linux-musl.so +0 -0
  287. scipy/optimize/_lsq/common.py +3 -3
  288. scipy/optimize/_lsq/dogbox.py +16 -2
  289. scipy/optimize/_lsq/givens_elimination.cpython-313t-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_lsq/least_squares.py +198 -126
  291. scipy/optimize/_lsq/lsq_linear.py +6 -6
  292. scipy/optimize/_lsq/trf.py +35 -8
  293. scipy/optimize/_milp.py +3 -1
  294. scipy/optimize/_minimize.py +105 -36
  295. scipy/optimize/_minpack.cpython-313t-aarch64-linux-musl.so +0 -0
  296. scipy/optimize/_minpack_py.py +21 -14
  297. scipy/optimize/_moduleTNC.cpython-313t-aarch64-linux-musl.so +0 -0
  298. scipy/optimize/_nnls.py +20 -21
  299. scipy/optimize/_nonlin.py +34 -3
  300. scipy/optimize/_numdiff.py +288 -110
  301. scipy/optimize/_optimize.py +86 -48
  302. scipy/optimize/_pava_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_remove_redundancy.py +5 -5
  304. scipy/optimize/_root_scalar.py +1 -1
  305. scipy/optimize/_shgo.py +6 -0
  306. scipy/optimize/_shgo_lib/_complex.py +1 -1
  307. scipy/optimize/_slsqp_py.py +216 -124
  308. scipy/optimize/_slsqplib.cpython-313t-aarch64-linux-musl.so +0 -0
  309. scipy/optimize/_spectral.py +1 -1
  310. scipy/optimize/_tnc.py +8 -1
  311. scipy/optimize/_trlib/_trlib.cpython-313t-aarch64-linux-musl.so +0 -0
  312. scipy/optimize/_trustregion.py +20 -6
  313. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  314. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  315. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  316. scipy/optimize/_trustregion_constr/projections.py +12 -8
  317. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  318. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  319. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  320. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  321. scipy/optimize/_trustregion_exact.py +0 -1
  322. scipy/optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  323. scipy/optimize/_zeros_py.py +97 -17
  324. scipy/optimize/cython_optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  325. scipy/optimize/slsqp.py +0 -1
  326. scipy/optimize/tests/test__basinhopping.py +1 -1
  327. scipy/optimize/tests/test__differential_evolution.py +4 -4
  328. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  329. scipy/optimize/tests/test__numdiff.py +66 -22
  330. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  331. scipy/optimize/tests/test__shgo.py +9 -1
  332. scipy/optimize/tests/test_bracket.py +71 -46
  333. scipy/optimize/tests/test_chandrupatla.py +133 -135
  334. scipy/optimize/tests/test_cobyla.py +74 -45
  335. scipy/optimize/tests/test_constraints.py +1 -1
  336. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  337. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  338. scipy/optimize/tests/test_least_squares.py +125 -13
  339. scipy/optimize/tests/test_linear_assignment.py +3 -3
  340. scipy/optimize/tests/test_linprog.py +3 -3
  341. scipy/optimize/tests/test_lsq_linear.py +5 -5
  342. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  343. scipy/optimize/tests/test_minpack.py +4 -4
  344. scipy/optimize/tests/test_nnls.py +43 -3
  345. scipy/optimize/tests/test_nonlin.py +36 -0
  346. scipy/optimize/tests/test_optimize.py +95 -17
  347. scipy/optimize/tests/test_slsqp.py +36 -4
  348. scipy/optimize/tests/test_zeros.py +34 -1
  349. scipy/signal/__init__.py +12 -23
  350. scipy/signal/_delegators.py +568 -0
  351. scipy/signal/_filter_design.py +459 -241
  352. scipy/signal/_fir_filter_design.py +262 -90
  353. scipy/signal/_lti_conversion.py +3 -2
  354. scipy/signal/_ltisys.py +118 -91
  355. scipy/signal/_max_len_seq_inner.cpython-313t-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_peak_finding_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_polyutils.py +172 -0
  358. scipy/signal/_short_time_fft.py +553 -76
  359. scipy/signal/_signal_api.py +30 -0
  360. scipy/signal/_signaltools.py +719 -396
  361. scipy/signal/_sigtools.cpython-313t-aarch64-linux-musl.so +0 -0
  362. scipy/signal/_sosfilt.cpython-313t-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_spectral_py.py +221 -50
  364. scipy/signal/_spline.cpython-313t-aarch64-linux-musl.so +0 -0
  365. scipy/signal/_spline_filters.py +108 -68
  366. scipy/signal/_support_alternative_backends.py +73 -0
  367. scipy/signal/_upfirdn.py +4 -1
  368. scipy/signal/_upfirdn_apply.cpython-313t-aarch64-linux-musl.so +0 -0
  369. scipy/signal/_waveforms.py +2 -11
  370. scipy/signal/_wavelets.py +1 -1
  371. scipy/signal/fir_filter_design.py +1 -0
  372. scipy/signal/spline.py +4 -11
  373. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  374. scipy/signal/tests/test_bsplines.py +114 -79
  375. scipy/signal/tests/test_cont2discrete.py +9 -2
  376. scipy/signal/tests/test_filter_design.py +721 -481
  377. scipy/signal/tests/test_fir_filter_design.py +332 -140
  378. scipy/signal/tests/test_savitzky_golay.py +4 -3
  379. scipy/signal/tests/test_short_time_fft.py +231 -5
  380. scipy/signal/tests/test_signaltools.py +2149 -1348
  381. scipy/signal/tests/test_spectral.py +19 -6
  382. scipy/signal/tests/test_splines.py +161 -96
  383. scipy/signal/tests/test_upfirdn.py +84 -50
  384. scipy/signal/tests/test_waveforms.py +20 -0
  385. scipy/signal/tests/test_windows.py +607 -466
  386. scipy/signal/windows/_windows.py +287 -148
  387. scipy/sparse/__init__.py +23 -4
  388. scipy/sparse/_base.py +269 -120
  389. scipy/sparse/_bsr.py +7 -4
  390. scipy/sparse/_compressed.py +59 -234
  391. scipy/sparse/_construct.py +90 -38
  392. scipy/sparse/_coo.py +115 -181
  393. scipy/sparse/_csc.py +4 -4
  394. scipy/sparse/_csparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  395. scipy/sparse/_csr.py +2 -2
  396. scipy/sparse/_data.py +48 -48
  397. scipy/sparse/_dia.py +105 -21
  398. scipy/sparse/_dok.py +0 -23
  399. scipy/sparse/_index.py +4 -4
  400. scipy/sparse/_matrix.py +23 -0
  401. scipy/sparse/_sparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  402. scipy/sparse/_sputils.py +37 -22
  403. scipy/sparse/base.py +0 -9
  404. scipy/sparse/bsr.py +0 -14
  405. scipy/sparse/compressed.py +0 -23
  406. scipy/sparse/construct.py +0 -6
  407. scipy/sparse/coo.py +0 -14
  408. scipy/sparse/csc.py +0 -3
  409. scipy/sparse/csgraph/_flow.cpython-313t-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/_matching.cpython-313t-aarch64-linux-musl.so +0 -0
  411. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-aarch64-linux-musl.so +0 -0
  412. scipy/sparse/csgraph/_reordering.cpython-313t-aarch64-linux-musl.so +0 -0
  413. scipy/sparse/csgraph/_shortest_path.cpython-313t-aarch64-linux-musl.so +0 -0
  414. scipy/sparse/csgraph/_tools.cpython-313t-aarch64-linux-musl.so +0 -0
  415. scipy/sparse/csgraph/_traversal.cpython-313t-aarch64-linux-musl.so +0 -0
  416. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  417. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  418. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  419. scipy/sparse/csr.py +0 -5
  420. scipy/sparse/data.py +1 -6
  421. scipy/sparse/dia.py +0 -7
  422. scipy/sparse/dok.py +0 -10
  423. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-aarch64-linux-musl.so +0 -0
  424. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  425. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  426. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-aarch64-linux-musl.so +0 -0
  427. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  428. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  429. scipy/sparse/linalg/_expm_multiply.py +8 -3
  430. scipy/sparse/linalg/_interface.py +29 -26
  431. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  432. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  433. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  434. scipy/sparse/linalg/_isolve/minres.py +5 -5
  435. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  436. scipy/sparse/linalg/_isolve/utils.py +2 -8
  437. scipy/sparse/linalg/_matfuncs.py +1 -1
  438. scipy/sparse/linalg/_norm.py +1 -1
  439. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  440. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  441. scipy/sparse/linalg/_propack/_spropack.cpython-313t-aarch64-linux-musl.so +0 -0
  442. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  443. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  444. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  445. scipy/sparse/linalg/tests/test_interface.py +35 -0
  446. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  447. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  448. scipy/sparse/tests/test_base.py +217 -40
  449. scipy/sparse/tests/test_common1d.py +17 -12
  450. scipy/sparse/tests/test_construct.py +1 -1
  451. scipy/sparse/tests/test_coo.py +272 -4
  452. scipy/sparse/tests/test_sparsetools.py +5 -0
  453. scipy/sparse/tests/test_sputils.py +36 -7
  454. scipy/spatial/_ckdtree.cpython-313t-aarch64-linux-musl.so +0 -0
  455. scipy/spatial/_distance_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  456. scipy/spatial/_distance_wrap.cpython-313t-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/_hausdorff.cpython-313t-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/_qhull.cpython-313t-aarch64-linux-musl.so +0 -0
  459. scipy/spatial/_voronoi.cpython-313t-aarch64-linux-musl.so +0 -0
  460. scipy/spatial/distance.py +49 -42
  461. scipy/spatial/tests/test_distance.py +3 -1
  462. scipy/spatial/tests/test_kdtree.py +1 -0
  463. scipy/spatial/tests/test_qhull.py +106 -2
  464. scipy/spatial/transform/__init__.py +5 -3
  465. scipy/spatial/transform/_rigid_transform.cpython-313t-aarch64-linux-musl.so +0 -0
  466. scipy/spatial/transform/_rotation.cpython-313t-aarch64-linux-musl.so +0 -0
  467. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  468. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  469. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  470. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  471. scipy/special/__init__.py +1 -47
  472. scipy/special/_add_newdocs.py +34 -772
  473. scipy/special/_basic.py +22 -25
  474. scipy/special/_comb.cpython-313t-aarch64-linux-musl.so +0 -0
  475. scipy/special/_ellip_harm_2.cpython-313t-aarch64-linux-musl.so +0 -0
  476. scipy/special/_gufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  477. scipy/special/_logsumexp.py +83 -69
  478. scipy/special/_orthogonal.pyi +1 -1
  479. scipy/special/_specfun.cpython-313t-aarch64-linux-musl.so +0 -0
  480. scipy/special/_special_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  481. scipy/special/_spherical_bessel.py +4 -4
  482. scipy/special/_support_alternative_backends.py +212 -119
  483. scipy/special/_test_internal.cpython-313t-aarch64-linux-musl.so +0 -0
  484. scipy/special/_testutils.py +4 -4
  485. scipy/special/_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  486. scipy/special/_ufuncs.pyi +1 -0
  487. scipy/special/_ufuncs.pyx +215 -1400
  488. scipy/special/_ufuncs_cxx.cpython-313t-aarch64-linux-musl.so +0 -0
  489. scipy/special/_ufuncs_cxx.pxd +2 -15
  490. scipy/special/_ufuncs_cxx.pyx +5 -44
  491. scipy/special/_ufuncs_cxx_defs.h +2 -16
  492. scipy/special/_ufuncs_defs.h +0 -8
  493. scipy/special/cython_special.cpython-313t-aarch64-linux-musl.so +0 -0
  494. scipy/special/cython_special.pxd +1 -1
  495. scipy/special/tests/_cython_examples/meson.build +10 -1
  496. scipy/special/tests/test_basic.py +153 -20
  497. scipy/special/tests/test_boost_ufuncs.py +3 -0
  498. scipy/special/tests/test_cdflib.py +35 -11
  499. scipy/special/tests/test_gammainc.py +16 -0
  500. scipy/special/tests/test_hyp2f1.py +23 -2
  501. scipy/special/tests/test_log1mexp.py +85 -0
  502. scipy/special/tests/test_logsumexp.py +220 -64
  503. scipy/special/tests/test_mpmath.py +1 -0
  504. scipy/special/tests/test_nan_inputs.py +1 -1
  505. scipy/special/tests/test_orthogonal.py +17 -18
  506. scipy/special/tests/test_sf_error.py +3 -2
  507. scipy/special/tests/test_sph_harm.py +6 -7
  508. scipy/special/tests/test_support_alternative_backends.py +211 -76
  509. scipy/stats/__init__.py +4 -1
  510. scipy/stats/_ansari_swilk_statistics.cpython-313t-aarch64-linux-musl.so +0 -0
  511. scipy/stats/_axis_nan_policy.py +4 -3
  512. scipy/stats/_biasedurn.cpython-313t-aarch64-linux-musl.so +0 -0
  513. scipy/stats/_continued_fraction.py +387 -0
  514. scipy/stats/_continuous_distns.py +296 -319
  515. scipy/stats/_covariance.py +6 -3
  516. scipy/stats/_discrete_distns.py +39 -32
  517. scipy/stats/_distn_infrastructure.py +39 -12
  518. scipy/stats/_distribution_infrastructure.py +900 -238
  519. scipy/stats/_entropy.py +7 -8
  520. scipy/{_lib → stats}/_finite_differences.py +1 -1
  521. scipy/stats/_hypotests.py +82 -49
  522. scipy/stats/_kde.py +53 -49
  523. scipy/stats/_ksstats.py +1 -1
  524. scipy/stats/_levy_stable/__init__.py +7 -15
  525. scipy/stats/_levy_stable/levyst.cpython-313t-aarch64-linux-musl.so +0 -0
  526. scipy/stats/_morestats.py +112 -67
  527. scipy/stats/_mstats_basic.py +13 -17
  528. scipy/stats/_mstats_extras.py +8 -8
  529. scipy/stats/_multivariate.py +89 -113
  530. scipy/stats/_new_distributions.py +97 -20
  531. scipy/stats/_page_trend_test.py +12 -5
  532. scipy/stats/_probability_distribution.py +265 -43
  533. scipy/stats/_qmc.py +14 -9
  534. scipy/stats/_qmc_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_qmvnt.py +16 -95
  536. scipy/stats/_qmvnt_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  537. scipy/stats/_quantile.py +335 -0
  538. scipy/stats/_rcont/rcont.cpython-313t-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_resampling.py +4 -29
  540. scipy/stats/_sampling.py +1 -1
  541. scipy/stats/_sobol.cpython-313t-aarch64-linux-musl.so +0 -0
  542. scipy/stats/_stats.cpython-313t-aarch64-linux-musl.so +0 -0
  543. scipy/stats/_stats_mstats_common.py +19 -2
  544. scipy/stats/_stats_py.py +534 -460
  545. scipy/stats/_stats_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  546. scipy/stats/_unuran/unuran_wrapper.cpython-313t-aarch64-linux-musl.so +0 -0
  547. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  548. scipy/stats/_variation.py +5 -7
  549. scipy/stats/_wilcoxon.py +13 -7
  550. scipy/stats/tests/common_tests.py +6 -4
  551. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  552. scipy/stats/tests/test_continued_fraction.py +173 -0
  553. scipy/stats/tests/test_continuous.py +379 -60
  554. scipy/stats/tests/test_continuous_basic.py +18 -12
  555. scipy/stats/tests/test_discrete_basic.py +14 -8
  556. scipy/stats/tests/test_discrete_distns.py +16 -16
  557. scipy/stats/tests/test_distributions.py +117 -75
  558. scipy/stats/tests/test_entropy.py +40 -48
  559. scipy/stats/tests/test_fit.py +4 -3
  560. scipy/stats/tests/test_hypotests.py +153 -24
  561. scipy/stats/tests/test_kdeoth.py +109 -41
  562. scipy/stats/tests/test_marray.py +289 -0
  563. scipy/stats/tests/test_morestats.py +79 -47
  564. scipy/stats/tests/test_mstats_basic.py +3 -3
  565. scipy/stats/tests/test_multivariate.py +434 -83
  566. scipy/stats/tests/test_qmc.py +13 -10
  567. scipy/stats/tests/test_quantile.py +199 -0
  568. scipy/stats/tests/test_rank.py +119 -112
  569. scipy/stats/tests/test_resampling.py +47 -56
  570. scipy/stats/tests/test_sampling.py +9 -4
  571. scipy/stats/tests/test_stats.py +799 -939
  572. scipy/stats/tests/test_variation.py +8 -6
  573. scipy/version.py +2 -2
  574. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  575. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +9 -9
  576. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +1316 -1323
  577. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  578. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  579. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  580. scipy/_lib/array_api_extra/_funcs.py +0 -484
  581. scipy/_lib/array_api_extra/_typing.py +0 -8
  582. scipy/interpolate/_bspl.cpython-313t-aarch64-linux-musl.so +0 -0
  583. scipy/optimize/_cobyla.cpython-313t-aarch64-linux-musl.so +0 -0
  584. scipy/optimize/_cython_nnls.cpython-313t-aarch64-linux-musl.so +0 -0
  585. scipy/optimize/_slsqp.cpython-313t-aarch64-linux-musl.so +0 -0
  586. scipy/spatial/qhull_src/COPYING.txt +0 -38
  587. scipy/special/libsf_error_state.so +0 -0
  588. scipy/special/tests/test_log_softmax.py +0 -109
  589. scipy/special/tests/test_xsf_cuda.py +0 -114
  590. scipy/special/xsf/binom.h +0 -89
  591. scipy/special/xsf/cdflib.h +0 -100
  592. scipy/special/xsf/cephes/airy.h +0 -307
  593. scipy/special/xsf/cephes/besselpoly.h +0 -51
  594. scipy/special/xsf/cephes/beta.h +0 -257
  595. scipy/special/xsf/cephes/cbrt.h +0 -131
  596. scipy/special/xsf/cephes/chbevl.h +0 -85
  597. scipy/special/xsf/cephes/chdtr.h +0 -193
  598. scipy/special/xsf/cephes/const.h +0 -87
  599. scipy/special/xsf/cephes/ellie.h +0 -293
  600. scipy/special/xsf/cephes/ellik.h +0 -251
  601. scipy/special/xsf/cephes/ellpe.h +0 -107
  602. scipy/special/xsf/cephes/ellpk.h +0 -117
  603. scipy/special/xsf/cephes/expn.h +0 -260
  604. scipy/special/xsf/cephes/gamma.h +0 -398
  605. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  606. scipy/special/xsf/cephes/hyperg.h +0 -361
  607. scipy/special/xsf/cephes/i0.h +0 -149
  608. scipy/special/xsf/cephes/i1.h +0 -158
  609. scipy/special/xsf/cephes/igam.h +0 -421
  610. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  611. scipy/special/xsf/cephes/igami.h +0 -313
  612. scipy/special/xsf/cephes/j0.h +0 -225
  613. scipy/special/xsf/cephes/j1.h +0 -198
  614. scipy/special/xsf/cephes/jv.h +0 -715
  615. scipy/special/xsf/cephes/k0.h +0 -164
  616. scipy/special/xsf/cephes/k1.h +0 -163
  617. scipy/special/xsf/cephes/kn.h +0 -243
  618. scipy/special/xsf/cephes/lanczos.h +0 -112
  619. scipy/special/xsf/cephes/ndtr.h +0 -275
  620. scipy/special/xsf/cephes/poch.h +0 -85
  621. scipy/special/xsf/cephes/polevl.h +0 -167
  622. scipy/special/xsf/cephes/psi.h +0 -194
  623. scipy/special/xsf/cephes/rgamma.h +0 -111
  624. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  625. scipy/special/xsf/cephes/shichi.h +0 -248
  626. scipy/special/xsf/cephes/sici.h +0 -224
  627. scipy/special/xsf/cephes/sindg.h +0 -221
  628. scipy/special/xsf/cephes/tandg.h +0 -139
  629. scipy/special/xsf/cephes/trig.h +0 -58
  630. scipy/special/xsf/cephes/unity.h +0 -186
  631. scipy/special/xsf/cephes/zeta.h +0 -172
  632. scipy/special/xsf/config.h +0 -304
  633. scipy/special/xsf/digamma.h +0 -205
  634. scipy/special/xsf/error.h +0 -57
  635. scipy/special/xsf/evalpoly.h +0 -47
  636. scipy/special/xsf/expint.h +0 -266
  637. scipy/special/xsf/hyp2f1.h +0 -694
  638. scipy/special/xsf/iv_ratio.h +0 -173
  639. scipy/special/xsf/lambertw.h +0 -150
  640. scipy/special/xsf/loggamma.h +0 -163
  641. scipy/special/xsf/sici.h +0 -200
  642. scipy/special/xsf/tools.h +0 -427
  643. scipy/special/xsf/trig.h +0 -164
  644. scipy/special/xsf/wright_bessel.h +0 -843
  645. scipy/special/xsf/zlog1.h +0 -35
  646. scipy/stats/_mvn.cpython-313t-aarch64-linux-musl.so +0 -0
  647. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  648. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  649. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.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
 
@@ -1021,10 +1023,8 @@ class _TestCommon:
1021
1023
  assert_array_almost_equal(dat.sum(), datsp.sum())
1022
1024
  assert_equal(dat.sum().dtype, datsp.sum().dtype)
1023
1025
  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)
1026
+ assert_array_almost_equal(dat.sum(axis=None), datsp.sum(axis=None))
1027
+ assert_equal(dat.sum(axis=None).dtype, datsp.sum(axis=None).dtype)
1028
1028
  assert_array_almost_equal(dat.sum(axis=0), datsp.sum(axis=0))
1029
1029
  assert_equal(dat.sum(axis=0).dtype, datsp.sum(axis=0).dtype)
1030
1030
  assert_array_almost_equal(dat.sum(axis=1), datsp.sum(axis=1))
@@ -1033,6 +1033,8 @@ class _TestCommon:
1033
1033
  assert_equal(dat.sum(axis=-2).dtype, datsp.sum(axis=-2).dtype)
1034
1034
  assert_array_almost_equal(dat.sum(axis=-1), datsp.sum(axis=-1))
1035
1035
  assert_equal(dat.sum(axis=-1).dtype, datsp.sum(axis=-1).dtype)
1036
+ assert_array_almost_equal(dat.sum(axis=(0, 1)), datsp.sum(axis=(0, 1)))
1037
+ assert_equal(dat.sum(axis=(0, 1)).dtype, datsp.sum(axis=(0, 1)).dtype)
1036
1038
 
1037
1039
  for dtype in self.checked_dtypes:
1038
1040
  for j in range(len(matrices)):
@@ -1045,10 +1047,15 @@ class _TestCommon:
1045
1047
  [-6, 7, 9]])
1046
1048
  datsp = self.spcreator(dat)
1047
1049
 
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)
1050
+ with assert_raises(ValueError, match="axis out of range"):
1051
+ datsp.sum(axis=3)
1052
+ with assert_raises(ValueError, match="axis out of range"):
1053
+ datsp.sum(axis=(0, 3))
1054
+ with assert_raises(TypeError, match="axis must be an integer"):
1055
+ datsp.sum(axis=1.5)
1056
+ # error msg varies by sparray (1d result) or spmatrix (2d result)
1057
+ with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
1058
+ datsp.mean(axis=1, out=out)
1052
1059
 
1053
1060
  def test_sum_dtype(self):
1054
1061
  dat = array([[0, 1, 2],
@@ -1087,6 +1094,12 @@ class _TestCommon:
1087
1094
  datsp.sum(axis=1, out=datsp_out)
1088
1095
  assert_array_almost_equal(dat_out, datsp_out)
1089
1096
 
1097
+ # check that wrong shape out parameter raises
1098
+ with assert_raises(ValueError, match="output parameter"):
1099
+ datsp.sum(out=array([0]))
1100
+ with assert_raises(ValueError, match="output parameter"):
1101
+ datsp.sum(out=array([[0]] if self.is_array_test else 0))
1102
+
1090
1103
  def test_numpy_sum(self):
1091
1104
  # See gh-5987
1092
1105
  dat = array([[0, 1, 2],
@@ -1100,6 +1113,21 @@ class _TestCommon:
1100
1113
  assert_array_almost_equal(dat_sum, datsp_sum)
1101
1114
  assert_equal(dat_sum.dtype, datsp_sum.dtype)
1102
1115
 
1116
+ def test_sum_mean_container_type(self):
1117
+ dat = array([[0, 1, 2],
1118
+ [3, -4, 5],
1119
+ [-6, 7, 9]])
1120
+ datsp = self.spcreator(dat)
1121
+
1122
+ assert isscalarlike(datsp.sum())
1123
+ matrix_or_array = ndarray if self.is_array_test else np.matrix
1124
+ assert isinstance(datsp.sum(axis=0), matrix_or_array)
1125
+ assert isinstance(datsp.sum(axis=1), matrix_or_array)
1126
+
1127
+ assert isscalarlike(datsp.mean())
1128
+ assert isinstance(datsp.mean(axis=0), matrix_or_array)
1129
+ assert isinstance(datsp.mean(axis=1), matrix_or_array)
1130
+
1103
1131
  def test_mean(self):
1104
1132
  keep = not self.is_array_test
1105
1133
  def check(dtype):
@@ -1131,21 +1159,31 @@ class _TestCommon:
1131
1159
  dat.mean(axis=-1, keepdims=keep), datsp.mean(axis=-1)
1132
1160
  )
1133
1161
  assert_equal(dat.mean(axis=-1).dtype, datsp.mean(axis=-1).dtype)
1162
+ assert_array_almost_equal(
1163
+ dat.mean(axis=(0, 1), keepdims=keep), datsp.mean(axis=(0, 1))
1164
+ )
1165
+ assert_equal(dat.mean(axis=(0, 1)).dtype, datsp.mean(axis=(0, 1)).dtype)
1166
+
1134
1167
 
1135
1168
  for dtype in self.checked_dtypes:
1136
1169
  check(dtype)
1137
1170
 
1138
- def test_mean_invalid_params(self):
1171
+ def test_mean_invalid_param(self):
1139
1172
  out = self.asdense(np.zeros((1, 3)))
1140
1173
  dat = array([[0, 1, 2],
1141
1174
  [3, -4, 5],
1142
1175
  [-6, 7, 9]])
1143
1176
  datsp = self.spcreator(dat)
1144
1177
 
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)
1178
+ with assert_raises(ValueError, match="axis out of range"):
1179
+ datsp.mean(axis=3)
1180
+ with assert_raises(ValueError, match="axis out of range"):
1181
+ datsp.mean(axis=(0, 3))
1182
+ with assert_raises(TypeError, match="axis must be an integer"):
1183
+ datsp.mean(axis=1.5)
1184
+ # error msg varies by sparray (1d result) or spmatrix (2d result)
1185
+ with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
1186
+ datsp.mean(axis=1, out=out)
1149
1187
 
1150
1188
  def test_mean_dtype(self):
1151
1189
  dat = array([[0, 1, 2],
@@ -1184,6 +1222,12 @@ class _TestCommon:
1184
1222
  datsp.mean(axis=1, out=datsp_out)
1185
1223
  assert_array_almost_equal(dat_out, datsp_out)
1186
1224
 
1225
+ # check that wrong shape out parameter raises
1226
+ with assert_raises(ValueError, match="output parameter.*wrong.*dimension"):
1227
+ datsp.mean(out=array([0]))
1228
+ with assert_raises(ValueError, match="output parameter.*wrong.*dimension"):
1229
+ datsp.mean(out=array([[0]] if self.is_array_test else 0))
1230
+
1187
1231
  def test_numpy_mean(self):
1188
1232
  # See gh-5987
1189
1233
  dat = array([[0, 1, 2],
@@ -1637,7 +1681,10 @@ class _TestCommon:
1637
1681
  except ValueError:
1638
1682
  assert_raises(ValueError, i.multiply, j)
1639
1683
  continue
1640
- sp_mult = i.multiply(j)
1684
+ try:
1685
+ sp_mult = i.multiply(j)
1686
+ except ValueError:
1687
+ continue
1641
1688
  if issparse(sp_mult):
1642
1689
  assert_almost_equal(sp_mult.toarray(), dense_mult)
1643
1690
  else:
@@ -1683,13 +1730,7 @@ class _TestCommon:
1683
1730
  B = self.spcreator(A)
1684
1731
 
1685
1732
  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]:
1733
+ for exponent in [1, 2, 2.2, 3, 1+3j]:
1693
1734
  ret_sp = B**exponent
1694
1735
  ret_np = A**exponent
1695
1736
  assert_array_equal(ret_sp.toarray(), ret_np)
@@ -2060,8 +2101,8 @@ class _TestCommon:
2060
2101
 
2061
2102
  with suppress_warnings() as sup:
2062
2103
  sup.filter(SparseEfficiencyWarning,
2063
- "Taking maximum .minimum. with > 0 .< 0. number "
2064
- "results to a dense matrix")
2104
+ "Taking (maximum|minimum) with a (positive|negative) number "
2105
+ "results in a dense matrix")
2065
2106
 
2066
2107
  max_s = A.maximum(B)
2067
2108
  min_s = A.minimum(B)
@@ -2354,20 +2395,14 @@ class _TestInplaceArithmetic:
2354
2395
 
2355
2396
  # Matrix multiply from __rmatmul__
2356
2397
  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)
2398
+ y @= b.T
2399
+ x = a.copy()
2400
+ y = a.copy()
2401
+ with assert_raises(ValueError, match="dimension mismatch"):
2402
+ x @= b
2403
+ x = x.dot(a.T)
2404
+ y @= b.T
2405
+ assert_array_equal(x, y)
2371
2406
 
2372
2407
  # Floor division is not supported
2373
2408
  with assert_raises(TypeError, match="unsupported operand"):
@@ -3708,9 +3743,11 @@ class _TestMinMax:
3708
3743
  X = self.spcreator(np.arange(1, 10).reshape(3, 3))
3709
3744
  assert_equal(X.min(), 1)
3710
3745
  assert_equal(X.min().dtype, X.dtype)
3746
+ assert_equal(X.min(explicit=True), 1)
3711
3747
 
3712
3748
  X = -X
3713
3749
  assert_equal(X.max(), -1)
3750
+ assert_equal(X.max(explicit=True), -1)
3714
3751
 
3715
3752
  # and a fully sparse matrix
3716
3753
  Z = self.spcreator(np.zeros((1, 1)))
@@ -3785,6 +3822,7 @@ class _TestMinMax:
3785
3822
  assert_array_equal(
3786
3823
  X.min(axis=axis).toarray(), D.min(axis=axis, keepdims=keep)
3787
3824
  )
3825
+ assert_equal(X.max(axis=(0, 1)), D.max(axis=(0, 1), keepdims=keep))
3788
3826
 
3789
3827
  for axis in axes_even:
3790
3828
  expected_max = D[-1, :]
@@ -3832,6 +3870,38 @@ class _TestMinMax:
3832
3870
  assert_equal(X.max(axis=axis, explicit=ex).toarray(), D.max(axis=axis))
3833
3871
  assert_equal(X.min(axis=axis, explicit=ex).toarray(), D.min(axis=axis))
3834
3872
 
3873
+ def test_minmax_container_type(self):
3874
+ dat = array([[0, 1, 2],
3875
+ [3, -4, 5],
3876
+ [-6, 7, 9]])
3877
+ datsp = self.spcreator(dat)
3878
+ matrix_or_array = ndarray if self.is_array_test else np.matrix
3879
+ spmatrix_or_sparray = sparray if self.is_array_test else spmatrix
3880
+
3881
+ assert isscalarlike(datsp.min())
3882
+ assert isinstance(datsp.min(axis=0), spmatrix_or_sparray)
3883
+ assert isinstance(datsp.min(axis=1), spmatrix_or_sparray)
3884
+
3885
+ assert isscalarlike(datsp.max())
3886
+ assert isinstance(datsp.max(axis=0), spmatrix_or_sparray)
3887
+ assert isinstance(datsp.max(axis=1), spmatrix_or_sparray)
3888
+
3889
+ assert isscalarlike(datsp.nanmin())
3890
+ assert isinstance(datsp.nanmin(axis=0), spmatrix_or_sparray)
3891
+ assert isinstance(datsp.nanmin(axis=1), spmatrix_or_sparray)
3892
+
3893
+ assert isscalarlike(datsp.nanmax())
3894
+ assert isinstance(datsp.nanmax(axis=0), spmatrix_or_sparray)
3895
+ assert isinstance(datsp.nanmax(axis=1), spmatrix_or_sparray)
3896
+
3897
+ assert isscalarlike(datsp.argmin())
3898
+ assert isinstance(datsp.argmin(axis=0), matrix_or_array)
3899
+ assert isinstance(datsp.argmin(axis=1), matrix_or_array)
3900
+
3901
+ assert isscalarlike(datsp.argmax())
3902
+ assert isinstance(datsp.argmax(axis=0), matrix_or_array)
3903
+ assert isinstance(datsp.argmax(axis=1), matrix_or_array)
3904
+
3835
3905
  def test_nanminmax(self):
3836
3906
  D = self.asdense(np.arange(50).reshape(5,10), dtype=float)
3837
3907
  D[1, :] = 0
@@ -3850,6 +3920,10 @@ class _TestMinMax:
3850
3920
  assert np.isscalar(X_nan_minimum)
3851
3921
  assert X_nan_minimum == np.nanmin(D)
3852
3922
 
3923
+ X_nan_minimum = X.nanmin(axis=(0, 1))
3924
+ assert np.isscalar(X_nan_minimum)
3925
+ assert X_nan_minimum == np.nanmin(D, axis=(0, 1))
3926
+
3853
3927
  axes = [-2, -1, 0, 1]
3854
3928
  for axis in axes:
3855
3929
  X_nan_maxima = X.nanmax(axis=axis)
@@ -3867,11 +3941,12 @@ class _TestMinMax:
3867
3941
  datsp = self.spcreator(dat)
3868
3942
 
3869
3943
  for fname in ('min', 'max'):
3944
+ datfunc = getattr(dat, fname)
3870
3945
  func = getattr(datsp, fname)
3871
3946
  assert_raises(ValueError, func, axis=3)
3872
- assert_raises(TypeError, func, axis=(0, 1))
3873
3947
  assert_raises(TypeError, func, axis=1.5)
3874
3948
  assert_raises(ValueError, func, axis=1, out=1)
3949
+ assert_equal(func(axis=(0, 1)), datfunc(axis=(0, 1)))
3875
3950
 
3876
3951
  def test_numpy_minmax(self):
3877
3952
  # See gh-5987
@@ -3921,6 +3996,13 @@ class _TestMinMax:
3921
3996
  assert_equal(mat.argmax(axis=1), np.argmax(D, axis=1))
3922
3997
  assert_equal(mat.argmin(axis=1), np.argmin(D, axis=1))
3923
3998
 
3999
+ # full matrix with explicit=True
4000
+ mat = self.spcreator(self.asdense(D5))
4001
+ assert_equal(mat.argmax(explicit=True), 5)
4002
+ assert_equal((-mat).argmax(explicit=True), 2)
4003
+ assert_equal(mat.argmin(explicit=True), 2)
4004
+ assert_equal((-mat).argmin(explicit=True), 5)
4005
+
3924
4006
  # zero-size matrices
3925
4007
  D6 = self.spcreator(np.empty((0, 5)))
3926
4008
  D7 = self.spcreator(np.empty((5, 0)))
@@ -4343,6 +4425,12 @@ class TestCSRMatrix(_MatrixMixin, TestCSR):
4343
4425
  with suppress_warnings() as sup:
4344
4426
  sup.filter(SparseEfficiencyWarning, "Changing the sparsity structure")
4345
4427
  return csr_matrix(*args, **kwargs)
4428
+
4429
+ def test_spmatrix_subscriptable(self):
4430
+ result = csr_matrix[np.int8]
4431
+ assert isinstance(result, GenericAlias)
4432
+ assert result.__origin__ is csr_matrix
4433
+ assert result.__args__ == (np.int8,)
4346
4434
 
4347
4435
 
4348
4436
  TestCSRMatrix.init_class()
@@ -4878,6 +4966,17 @@ class TestCOO(sparse_test_class(getset=False,
4878
4966
  # Using __ne__ and nnz instead
4879
4967
  assert_((mat1.reshape((1001, 3000001), order='C') != mat2).nnz == 0)
4880
4968
  assert_((mat2.reshape((3000001, 1001), order='F') != mat1).nnz == 0)
4969
+
4970
+ def test_sparray_subscriptable(self):
4971
+ result = coo_array[np.int8, tuple[int]]
4972
+ assert isinstance(result, GenericAlias)
4973
+ assert result.__origin__ is coo_array
4974
+ assert result.__args__ == (np.int8, tuple[int])
4975
+
4976
+ result = coo_array[np.int8]
4977
+ assert isinstance(result, GenericAlias)
4978
+ assert result.__origin__ is coo_array
4979
+ assert result.__args__ == (np.int8,)
4881
4980
 
4882
4981
 
4883
4982
  class TestCOOMatrix(_MatrixMixin, TestCOO):
@@ -4950,6 +5049,40 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
4950
5049
  csc = dia.tocsc()
4951
5050
  assert csc.indices.dtype == np.int32
4952
5051
 
5052
+ def test_add_sparse(self):
5053
+ # test format and cases not covered by common add tests
5054
+ A = diag([1, 2])
5055
+ B = A + diag([3], 1)
5056
+ Asp = dia_matrix(A)
5057
+ Bsp = dia_matrix(B)
5058
+
5059
+ Csp = Asp + Bsp
5060
+ assert isinstance(Csp, dia_matrix)
5061
+ assert_array_equal(Csp.toarray(), A + B)
5062
+
5063
+ Csp = Bsp + Asp
5064
+ assert isinstance(Csp, dia_matrix)
5065
+ assert_array_equal(Csp.toarray(), B + A)
5066
+
5067
+ def test_sub_sparse(self):
5068
+ # test format and cases not covered by common sub tests
5069
+ A = diag([1, 2])
5070
+ B = A + diag([3], 1)
5071
+ Asp = dia_matrix(A)
5072
+ Bsp = dia_matrix(B)
5073
+
5074
+ Csp = Asp - Bsp
5075
+ assert isinstance(Csp, dia_matrix)
5076
+ assert_array_equal(Csp.toarray(), A - B)
5077
+
5078
+ Csp = Bsp - Asp
5079
+ assert isinstance(Csp, dia_matrix)
5080
+ assert_array_equal(Csp.toarray(), B - A)
5081
+
5082
+ Bsp = Bsp.asformat('csr')
5083
+ assert_array_equal((Asp - Bsp).toarray(), A - B)
5084
+ assert_array_equal((Bsp - Asp).toarray(), B - A)
5085
+
4953
5086
  def test_mul_scalar(self):
4954
5087
  # repro for gh-20434
4955
5088
  m = self.dia_container([[1, 2], [0, 4]])
@@ -4961,6 +5094,50 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
4961
5094
  assert isinstance(res2, m.__class__)
4962
5095
  assert_array_equal(res2.toarray(), [[3, 6], [0, 12]])
4963
5096
 
5097
+ def test_matmul_dia(self):
5098
+ # test DIA structure of DIA @ DIA:
5099
+
5100
+ # that all and only needed elements are used and produced
5101
+ A = array([[1, 2, 3],
5102
+ [4, 5, 6]])
5103
+ B = array([[11, 12],
5104
+ [13, 14],
5105
+ [15, 16]])
5106
+ Asp = dia_matrix(A)
5107
+ Bsp = dia_matrix(B)
5108
+ Asp.data[Asp.data == 0] = -1 # poison outside elements
5109
+ Bsp.data[Bsp.data == 0] = -1
5110
+ assert_array_equal(Asp.toarray(), A)
5111
+ assert_array_equal(Bsp.toarray(), B)
5112
+
5113
+ C = A @ B
5114
+ Csp = Asp @ Bsp
5115
+ assert isinstance(Csp, dia_matrix)
5116
+ assert_array_equal(Csp.toarray(), C)
5117
+ assert_array_equal(Csp.offsets, [-1, 0, 1])
5118
+ assert_array_equal(Csp.data, dia_matrix(C).data)
5119
+
5120
+ C = B @ A
5121
+ Csp = Bsp @ Asp
5122
+ assert isinstance(Csp, dia_matrix)
5123
+ assert_array_equal(Csp.toarray(), C)
5124
+ assert_array_equal(Csp.offsets, [-2, -1, 0, 1, 2])
5125
+ assert_array_equal(Csp.data, dia_matrix(C).data)
5126
+
5127
+ # short data and that order of input offsets doesn't matter
5128
+ Asp = dia_matrix(([[0., 1., 2.], [3., 4., 5.]], [1, -2]), (5, 5))
5129
+ Bsp = dia_matrix(([[6., 7., 8.], [0., 0., 9.]], [-1, 2]), (5, 5))
5130
+
5131
+ Csp = Asp @ Bsp
5132
+ assert_array_equal(Csp.offsets, array([-3, 0]))
5133
+ assert_array_equal(Csp.data, [[24., 35., 0.],
5134
+ [6., 14., 27.]])
5135
+
5136
+ Csp = Bsp @ Asp
5137
+ assert_array_equal(Csp.offsets, array([-3, 0]))
5138
+ assert_array_equal(Csp.data, [[24., 0., 0.],
5139
+ [27., 6., 14.]])
5140
+
4964
5141
 
4965
5142
  class TestDIAMatrix(_MatrixMixin, TestDIA):
4966
5143
  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):