scipy 1.15.3__cp312-cp312-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp312-cp312-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 (641) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-312-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-312-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-312-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-312-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-312-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-312-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 +166 -35
  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-312-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-312-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-312-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-312-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-312-aarch64-linux-musl.so +0 -0
  134. scipy/integrate/_quadpack_py.py +11 -7
  135. scipy/integrate/_quadrature.py +3 -3
  136. scipy/integrate/_rules/_base.py +2 -2
  137. scipy/integrate/_tanhsinh.py +48 -47
  138. scipy/integrate/_test_multivariate.cpython-312-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-312-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-312-aarch64-linux-musl.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +56 -48
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-312-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-312-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-312-aarch64-linux-musl.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-312-aarch64-linux-musl.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-312-aarch64-linux-musl.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-312-aarch64-linux-musl.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_fast_matrix_market/_fmm_core.cpython-312-aarch64-linux-musl.so +0 -0
  177. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  178. scipy/io/_harwell_boeing/hb.py +7 -11
  179. scipy/io/_idl.py +5 -7
  180. scipy/io/_netcdf.py +15 -5
  181. scipy/io/_test_fortran.cpython-312-aarch64-linux-musl.so +0 -0
  182. scipy/io/arff/tests/test_arffread.py +3 -3
  183. scipy/io/matlab/__init__.py +5 -3
  184. scipy/io/matlab/_mio.py +4 -1
  185. scipy/io/matlab/_mio5.py +19 -13
  186. scipy/io/matlab/_mio5_utils.cpython-312-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-312-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-312-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/tests/test_mio.py +46 -18
  191. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  192. scipy/io/tests/test_mmio.py +7 -1
  193. scipy/io/tests/test_wavfile.py +41 -0
  194. scipy/io/wavfile.py +57 -10
  195. scipy/linalg/_basic.py +113 -86
  196. scipy/linalg/_cythonized_array_utils.cpython-312-aarch64-linux-musl.so +0 -0
  197. scipy/linalg/_decomp.py +22 -9
  198. scipy/linalg/_decomp_cholesky.py +28 -13
  199. scipy/linalg/_decomp_cossin.py +45 -30
  200. scipy/linalg/_decomp_interpolative.cpython-312-aarch64-linux-musl.so +0 -0
  201. scipy/linalg/_decomp_ldl.py +4 -1
  202. scipy/linalg/_decomp_lu.py +18 -6
  203. scipy/linalg/_decomp_lu_cython.cpython-312-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_polar.py +2 -0
  205. scipy/linalg/_decomp_qr.py +6 -2
  206. scipy/linalg/_decomp_qz.py +3 -0
  207. scipy/linalg/_decomp_schur.py +3 -1
  208. scipy/linalg/_decomp_svd.py +13 -2
  209. scipy/linalg/_decomp_update.cpython-312-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-312-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-312-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-312-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_procrustes.py +2 -0
  220. scipy/linalg/_sketches.py +17 -6
  221. scipy/linalg/_solve_toeplitz.cpython-312-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_solvers.py +7 -2
  223. scipy/linalg/_special_matrices.py +26 -36
  224. scipy/linalg/cython_blas.cpython-312-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-312-aarch64-linux-musl.so +0 -0
  226. scipy/linalg/lapack.py +22 -2
  227. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  228. scipy/linalg/tests/test_basic.py +31 -16
  229. scipy/linalg/tests/test_batch.py +588 -0
  230. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  231. scipy/linalg/tests/test_decomp.py +40 -3
  232. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  233. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_ctest.cpython-312-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-312-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_delegators.py +8 -2
  243. scipy/ndimage/_filters.py +453 -5
  244. scipy/ndimage/_interpolation.py +36 -6
  245. scipy/ndimage/_measurements.py +4 -2
  246. scipy/ndimage/_morphology.py +5 -0
  247. scipy/ndimage/_nd_image.cpython-312-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-312-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-312-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +370 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-312-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-312-aarch64-linux-musl.so +0 -0
  262. scipy/optimize/_bracket.py +17 -24
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-312-aarch64-linux-musl.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-312-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-312-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-312-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-312-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_lbfgsb_py.py +57 -16
  276. scipy/optimize/_linprog_doc.py +2 -2
  277. scipy/optimize/_linprog_highs.py +2 -2
  278. scipy/optimize/_linprog_ip.py +25 -10
  279. scipy/optimize/_linprog_util.py +14 -16
  280. scipy/optimize/_lsap.cpython-312-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lsq/common.py +3 -3
  282. scipy/optimize/_lsq/dogbox.py +16 -2
  283. scipy/optimize/_lsq/givens_elimination.cpython-312-aarch64-linux-musl.so +0 -0
  284. scipy/optimize/_lsq/least_squares.py +198 -126
  285. scipy/optimize/_lsq/lsq_linear.py +6 -6
  286. scipy/optimize/_lsq/trf.py +35 -8
  287. scipy/optimize/_milp.py +3 -1
  288. scipy/optimize/_minimize.py +105 -36
  289. scipy/optimize/_minpack.cpython-312-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-312-aarch64-linux-musl.so +0 -0
  292. scipy/optimize/_nnls.py +20 -21
  293. scipy/optimize/_nonlin.py +34 -3
  294. scipy/optimize/_numdiff.py +288 -110
  295. scipy/optimize/_optimize.py +86 -48
  296. scipy/optimize/_pava_pybind.cpython-312-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_remove_redundancy.py +5 -5
  298. scipy/optimize/_root_scalar.py +1 -1
  299. scipy/optimize/_shgo.py +6 -0
  300. scipy/optimize/_shgo_lib/_complex.py +1 -1
  301. scipy/optimize/_slsqp_py.py +216 -124
  302. scipy/optimize/_slsqplib.cpython-312-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_spectral.py +1 -1
  304. scipy/optimize/_tnc.py +8 -1
  305. scipy/optimize/_trlib/_trlib.cpython-312-aarch64-linux-musl.so +0 -0
  306. scipy/optimize/_trustregion.py +20 -6
  307. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  308. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  309. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  310. scipy/optimize/_trustregion_constr/projections.py +12 -8
  311. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  312. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  313. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  314. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  315. scipy/optimize/_trustregion_exact.py +0 -1
  316. scipy/optimize/_zeros.cpython-312-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-312-aarch64-linux-musl.so +0 -0
  319. scipy/optimize/slsqp.py +0 -1
  320. scipy/optimize/tests/test__basinhopping.py +1 -1
  321. scipy/optimize/tests/test__differential_evolution.py +4 -4
  322. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  323. scipy/optimize/tests/test__numdiff.py +66 -22
  324. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  325. scipy/optimize/tests/test__shgo.py +9 -1
  326. scipy/optimize/tests/test_bracket.py +36 -46
  327. scipy/optimize/tests/test_chandrupatla.py +133 -135
  328. scipy/optimize/tests/test_cobyla.py +74 -45
  329. scipy/optimize/tests/test_constraints.py +1 -1
  330. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  331. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  332. scipy/optimize/tests/test_least_squares.py +125 -13
  333. scipy/optimize/tests/test_linear_assignment.py +3 -3
  334. scipy/optimize/tests/test_linprog.py +3 -3
  335. scipy/optimize/tests/test_lsq_linear.py +6 -6
  336. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  337. scipy/optimize/tests/test_minpack.py +4 -4
  338. scipy/optimize/tests/test_nnls.py +43 -3
  339. scipy/optimize/tests/test_nonlin.py +36 -0
  340. scipy/optimize/tests/test_optimize.py +95 -17
  341. scipy/optimize/tests/test_slsqp.py +36 -4
  342. scipy/optimize/tests/test_zeros.py +34 -1
  343. scipy/signal/__init__.py +12 -23
  344. scipy/signal/_delegators.py +568 -0
  345. scipy/signal/_filter_design.py +459 -241
  346. scipy/signal/_fir_filter_design.py +262 -90
  347. scipy/signal/_lti_conversion.py +3 -2
  348. scipy/signal/_ltisys.py +118 -91
  349. scipy/signal/_max_len_seq_inner.cpython-312-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-312-aarch64-linux-musl.so +0 -0
  351. scipy/signal/_polyutils.py +172 -0
  352. scipy/signal/_short_time_fft.py +519 -70
  353. scipy/signal/_signal_api.py +30 -0
  354. scipy/signal/_signaltools.py +719 -399
  355. scipy/signal/_sigtools.cpython-312-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-312-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +230 -50
  358. scipy/signal/_spline.cpython-312-aarch64-linux-musl.so +0 -0
  359. scipy/signal/_spline_filters.py +108 -68
  360. scipy/signal/_support_alternative_backends.py +73 -0
  361. scipy/signal/_upfirdn.py +4 -1
  362. scipy/signal/_upfirdn_apply.cpython-312-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_waveforms.py +2 -11
  364. scipy/signal/_wavelets.py +1 -1
  365. scipy/signal/fir_filter_design.py +1 -0
  366. scipy/signal/spline.py +4 -11
  367. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  368. scipy/signal/tests/test_bsplines.py +114 -79
  369. scipy/signal/tests/test_cont2discrete.py +9 -2
  370. scipy/signal/tests/test_filter_design.py +721 -481
  371. scipy/signal/tests/test_fir_filter_design.py +332 -140
  372. scipy/signal/tests/test_savitzky_golay.py +4 -3
  373. scipy/signal/tests/test_short_time_fft.py +221 -3
  374. scipy/signal/tests/test_signaltools.py +2144 -1348
  375. scipy/signal/tests/test_spectral.py +50 -6
  376. scipy/signal/tests/test_splines.py +161 -96
  377. scipy/signal/tests/test_upfirdn.py +84 -50
  378. scipy/signal/tests/test_waveforms.py +20 -0
  379. scipy/signal/tests/test_windows.py +607 -466
  380. scipy/signal/windows/_windows.py +287 -148
  381. scipy/sparse/__init__.py +23 -4
  382. scipy/sparse/_base.py +270 -108
  383. scipy/sparse/_bsr.py +7 -4
  384. scipy/sparse/_compressed.py +59 -231
  385. scipy/sparse/_construct.py +90 -38
  386. scipy/sparse/_coo.py +115 -181
  387. scipy/sparse/_csc.py +4 -4
  388. scipy/sparse/_csparsetools.cpython-312-aarch64-linux-musl.so +0 -0
  389. scipy/sparse/_csr.py +2 -2
  390. scipy/sparse/_data.py +48 -48
  391. scipy/sparse/_dia.py +105 -18
  392. scipy/sparse/_dok.py +0 -23
  393. scipy/sparse/_index.py +4 -4
  394. scipy/sparse/_matrix.py +23 -0
  395. scipy/sparse/_sparsetools.cpython-312-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_sputils.py +37 -22
  397. scipy/sparse/base.py +0 -9
  398. scipy/sparse/bsr.py +0 -14
  399. scipy/sparse/compressed.py +0 -23
  400. scipy/sparse/construct.py +0 -6
  401. scipy/sparse/coo.py +0 -14
  402. scipy/sparse/csc.py +0 -3
  403. scipy/sparse/csgraph/_flow.cpython-312-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-312-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-312-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-312-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-312-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-312-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-312-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  411. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  412. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  413. scipy/sparse/csr.py +0 -5
  414. scipy/sparse/data.py +1 -6
  415. scipy/sparse/dia.py +0 -7
  416. scipy/sparse/dok.py +0 -10
  417. scipy/sparse/linalg/_dsolve/_superlu.cpython-312-aarch64-linux-musl.so +0 -0
  418. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  419. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  420. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-312-aarch64-linux-musl.so +0 -0
  421. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  422. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  423. scipy/sparse/linalg/_interface.py +17 -18
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-312-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-312-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-312-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-312-aarch64-linux-musl.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  438. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  439. scipy/sparse/tests/test_base.py +214 -42
  440. scipy/sparse/tests/test_common1d.py +7 -7
  441. scipy/sparse/tests/test_construct.py +1 -1
  442. scipy/sparse/tests/test_coo.py +272 -4
  443. scipy/sparse/tests/test_sparsetools.py +5 -0
  444. scipy/sparse/tests/test_sputils.py +36 -7
  445. scipy/spatial/_ckdtree.cpython-312-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-312-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-312-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-312-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-312-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-312-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/distance.py +49 -42
  452. scipy/spatial/tests/test_distance.py +15 -1
  453. scipy/spatial/tests/test_kdtree.py +1 -0
  454. scipy/spatial/tests/test_qhull.py +7 -2
  455. scipy/spatial/transform/__init__.py +5 -3
  456. scipy/spatial/transform/_rigid_transform.cpython-312-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-312-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  459. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  460. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  461. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  462. scipy/special/__init__.py +1 -47
  463. scipy/special/_add_newdocs.py +34 -772
  464. scipy/special/_basic.py +22 -25
  465. scipy/special/_comb.cpython-312-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-312-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  468. scipy/special/_logsumexp.py +67 -58
  469. scipy/special/_orthogonal.pyi +1 -1
  470. scipy/special/_specfun.cpython-312-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  472. scipy/special/_spherical_bessel.py +4 -4
  473. scipy/special/_support_alternative_backends.py +212 -119
  474. scipy/special/_test_internal.cpython-312-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
  477. scipy/special/_ufuncs.pyi +1 -0
  478. scipy/special/_ufuncs.pyx +215 -1400
  479. scipy/special/_ufuncs_cxx.cpython-312-aarch64-linux-musl.so +0 -0
  480. scipy/special/_ufuncs_cxx.pxd +2 -15
  481. scipy/special/_ufuncs_cxx.pyx +5 -44
  482. scipy/special/_ufuncs_cxx_defs.h +2 -16
  483. scipy/special/_ufuncs_defs.h +0 -8
  484. scipy/special/cython_special.cpython-312-aarch64-linux-musl.so +0 -0
  485. scipy/special/cython_special.pxd +1 -1
  486. scipy/special/tests/_cython_examples/meson.build +10 -1
  487. scipy/special/tests/test_basic.py +153 -20
  488. scipy/special/tests/test_boost_ufuncs.py +3 -0
  489. scipy/special/tests/test_cdflib.py +35 -11
  490. scipy/special/tests/test_gammainc.py +16 -0
  491. scipy/special/tests/test_hyp2f1.py +2 -2
  492. scipy/special/tests/test_log1mexp.py +85 -0
  493. scipy/special/tests/test_logsumexp.py +206 -64
  494. scipy/special/tests/test_mpmath.py +1 -0
  495. scipy/special/tests/test_nan_inputs.py +1 -1
  496. scipy/special/tests/test_orthogonal.py +17 -18
  497. scipy/special/tests/test_sf_error.py +3 -2
  498. scipy/special/tests/test_sph_harm.py +6 -7
  499. scipy/special/tests/test_support_alternative_backends.py +211 -76
  500. scipy/stats/__init__.py +4 -1
  501. scipy/stats/_ansari_swilk_statistics.cpython-312-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +5 -12
  503. scipy/stats/_biasedurn.cpython-312-aarch64-linux-musl.so +0 -0
  504. scipy/stats/_continued_fraction.py +387 -0
  505. scipy/stats/_continuous_distns.py +277 -310
  506. scipy/stats/_correlation.py +1 -1
  507. scipy/stats/_covariance.py +6 -3
  508. scipy/stats/_discrete_distns.py +39 -32
  509. scipy/stats/_distn_infrastructure.py +39 -12
  510. scipy/stats/_distribution_infrastructure.py +900 -238
  511. scipy/stats/_entropy.py +9 -10
  512. scipy/{_lib → stats}/_finite_differences.py +1 -1
  513. scipy/stats/_hypotests.py +83 -50
  514. scipy/stats/_kde.py +53 -49
  515. scipy/stats/_ksstats.py +1 -1
  516. scipy/stats/_levy_stable/__init__.py +7 -15
  517. scipy/stats/_levy_stable/levyst.cpython-312-aarch64-linux-musl.so +0 -0
  518. scipy/stats/_morestats.py +118 -73
  519. scipy/stats/_mstats_basic.py +13 -17
  520. scipy/stats/_mstats_extras.py +8 -8
  521. scipy/stats/_multivariate.py +89 -113
  522. scipy/stats/_new_distributions.py +97 -20
  523. scipy/stats/_page_trend_test.py +12 -5
  524. scipy/stats/_probability_distribution.py +265 -43
  525. scipy/stats/_qmc.py +14 -9
  526. scipy/stats/_qmc_cy.cpython-312-aarch64-linux-musl.so +0 -0
  527. scipy/stats/_qmvnt.py +16 -95
  528. scipy/stats/_qmvnt_cy.cpython-312-aarch64-linux-musl.so +0 -0
  529. scipy/stats/_quantile.py +335 -0
  530. scipy/stats/_rcont/rcont.cpython-312-aarch64-linux-musl.so +0 -0
  531. scipy/stats/_resampling.py +4 -29
  532. scipy/stats/_sampling.py +1 -1
  533. scipy/stats/_sobol.cpython-312-aarch64-linux-musl.so +0 -0
  534. scipy/stats/_stats.cpython-312-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats_mstats_common.py +21 -2
  536. scipy/stats/_stats_py.py +550 -476
  537. scipy/stats/_stats_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  538. scipy/stats/_unuran/unuran_wrapper.cpython-312-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  540. scipy/stats/_variation.py +6 -8
  541. scipy/stats/_wilcoxon.py +13 -7
  542. scipy/stats/tests/common_tests.py +6 -4
  543. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  544. scipy/stats/tests/test_continued_fraction.py +173 -0
  545. scipy/stats/tests/test_continuous.py +379 -60
  546. scipy/stats/tests/test_continuous_basic.py +18 -12
  547. scipy/stats/tests/test_discrete_basic.py +14 -8
  548. scipy/stats/tests/test_discrete_distns.py +16 -16
  549. scipy/stats/tests/test_distributions.py +95 -75
  550. scipy/stats/tests/test_entropy.py +40 -48
  551. scipy/stats/tests/test_fit.py +4 -3
  552. scipy/stats/tests/test_hypotests.py +153 -24
  553. scipy/stats/tests/test_kdeoth.py +109 -41
  554. scipy/stats/tests/test_marray.py +289 -0
  555. scipy/stats/tests/test_morestats.py +79 -47
  556. scipy/stats/tests/test_mstats_basic.py +3 -3
  557. scipy/stats/tests/test_multivariate.py +434 -83
  558. scipy/stats/tests/test_qmc.py +13 -10
  559. scipy/stats/tests/test_quantile.py +199 -0
  560. scipy/stats/tests/test_rank.py +119 -112
  561. scipy/stats/tests/test_resampling.py +47 -56
  562. scipy/stats/tests/test_sampling.py +9 -4
  563. scipy/stats/tests/test_stats.py +799 -939
  564. scipy/stats/tests/test_variation.py +8 -6
  565. scipy/version.py +2 -2
  566. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  567. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  568. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
  569. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  570. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  571. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  572. scipy/_lib/array_api_extra/_funcs.py +0 -484
  573. scipy/_lib/array_api_extra/_typing.py +0 -8
  574. scipy/interpolate/_bspl.cpython-312-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cobyla.cpython-312-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cython_nnls.cpython-312-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_slsqp.cpython-312-aarch64-linux-musl.so +0 -0
  578. scipy/spatial/qhull_src/COPYING.txt +0 -38
  579. scipy/special/libsf_error_state.so +0 -0
  580. scipy/special/tests/test_log_softmax.py +0 -109
  581. scipy/special/tests/test_xsf_cuda.py +0 -114
  582. scipy/special/xsf/binom.h +0 -89
  583. scipy/special/xsf/cdflib.h +0 -100
  584. scipy/special/xsf/cephes/airy.h +0 -307
  585. scipy/special/xsf/cephes/besselpoly.h +0 -51
  586. scipy/special/xsf/cephes/beta.h +0 -257
  587. scipy/special/xsf/cephes/cbrt.h +0 -131
  588. scipy/special/xsf/cephes/chbevl.h +0 -85
  589. scipy/special/xsf/cephes/chdtr.h +0 -193
  590. scipy/special/xsf/cephes/const.h +0 -87
  591. scipy/special/xsf/cephes/ellie.h +0 -293
  592. scipy/special/xsf/cephes/ellik.h +0 -251
  593. scipy/special/xsf/cephes/ellpe.h +0 -107
  594. scipy/special/xsf/cephes/ellpk.h +0 -117
  595. scipy/special/xsf/cephes/expn.h +0 -260
  596. scipy/special/xsf/cephes/gamma.h +0 -398
  597. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  598. scipy/special/xsf/cephes/hyperg.h +0 -361
  599. scipy/special/xsf/cephes/i0.h +0 -149
  600. scipy/special/xsf/cephes/i1.h +0 -158
  601. scipy/special/xsf/cephes/igam.h +0 -421
  602. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  603. scipy/special/xsf/cephes/igami.h +0 -313
  604. scipy/special/xsf/cephes/j0.h +0 -225
  605. scipy/special/xsf/cephes/j1.h +0 -198
  606. scipy/special/xsf/cephes/jv.h +0 -715
  607. scipy/special/xsf/cephes/k0.h +0 -164
  608. scipy/special/xsf/cephes/k1.h +0 -163
  609. scipy/special/xsf/cephes/kn.h +0 -243
  610. scipy/special/xsf/cephes/lanczos.h +0 -112
  611. scipy/special/xsf/cephes/ndtr.h +0 -275
  612. scipy/special/xsf/cephes/poch.h +0 -85
  613. scipy/special/xsf/cephes/polevl.h +0 -167
  614. scipy/special/xsf/cephes/psi.h +0 -194
  615. scipy/special/xsf/cephes/rgamma.h +0 -111
  616. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  617. scipy/special/xsf/cephes/shichi.h +0 -248
  618. scipy/special/xsf/cephes/sici.h +0 -224
  619. scipy/special/xsf/cephes/sindg.h +0 -221
  620. scipy/special/xsf/cephes/tandg.h +0 -139
  621. scipy/special/xsf/cephes/trig.h +0 -58
  622. scipy/special/xsf/cephes/unity.h +0 -186
  623. scipy/special/xsf/cephes/zeta.h +0 -172
  624. scipy/special/xsf/config.h +0 -304
  625. scipy/special/xsf/digamma.h +0 -205
  626. scipy/special/xsf/error.h +0 -57
  627. scipy/special/xsf/evalpoly.h +0 -47
  628. scipy/special/xsf/expint.h +0 -266
  629. scipy/special/xsf/hyp2f1.h +0 -694
  630. scipy/special/xsf/iv_ratio.h +0 -173
  631. scipy/special/xsf/lambertw.h +0 -150
  632. scipy/special/xsf/loggamma.h +0 -163
  633. scipy/special/xsf/sici.h +0 -200
  634. scipy/special/xsf/tools.h +0 -427
  635. scipy/special/xsf/trig.h +0 -164
  636. scipy/special/xsf/wright_bessel.h +0 -843
  637. scipy/special/xsf/zlog1.h +0 -35
  638. scipy/stats/_mvn.cpython-312-aarch64-linux-musl.so +0 -0
  639. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  640. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  641. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -5,22 +5,24 @@
5
5
 
6
6
  """
7
7
  import functools
8
+ import pytest
8
9
 
9
10
  import numpy as np
10
- from numpy import array, identity, dot, sqrt
11
+ from numpy import array, identity, sqrt
11
12
  from numpy.testing import (assert_array_almost_equal, assert_allclose, assert_,
12
- assert_array_less, assert_array_equal, assert_warns)
13
- import pytest
13
+ assert_array_less, assert_array_equal, assert_warns,
14
+ suppress_warnings)
14
15
 
15
16
  import scipy.linalg
16
17
  from scipy.linalg import (funm, signm, logm, sqrtm, fractional_matrix_power,
17
18
  expm, expm_frechet, expm_cond, norm, khatri_rao,
18
19
  cosm, sinm, tanm, coshm, sinhm, tanhm)
20
+
19
21
  from scipy.linalg import _matfuncs_inv_ssq
20
22
  from scipy.linalg._matfuncs import pick_pade_structure
21
23
  from scipy.linalg._matfuncs_inv_ssq import LogmExactlySingularWarning
22
24
  import scipy.linalg._expm_frechet
23
-
25
+ from scipy.linalg import LinAlgWarning
24
26
  from scipy.optimize import minimize
25
27
 
26
28
 
@@ -63,7 +65,7 @@ class TestSignM:
63
65
 
64
66
  def test_defective1(self):
65
67
  a = array([[0.0,1,0,0],[1,0,1,0],[0,0,0,1],[0,0,1,0]])
66
- signm(a, disp=False)
68
+ signm(a)
67
69
  #XXX: what would be the correct result?
68
70
 
69
71
  def test_defective2(self):
@@ -73,7 +75,7 @@ class TestSignM:
73
75
  [-10.0,6.0,-20.0,-18.0,-2.0],
74
76
  [-9.6,9.6,-25.5,-15.4,-2.0],
75
77
  [9.8,-4.8,18.0,18.2,2.0]))
76
- signm(a, disp=False)
78
+ signm(a)
77
79
  #XXX: what would be the correct result?
78
80
 
79
81
  def test_defective3(self):
@@ -84,12 +86,15 @@ class TestSignM:
84
86
  [0., 0., 0., 0., 3., 10., 0.],
85
87
  [0., 0., 0., 0., 0., -2., 25.],
86
88
  [0., 0., 0., 0., 0., 0., -3.]])
87
- signm(a, disp=False)
89
+ signm(a)
88
90
  #XXX: what would be the correct result?
89
91
 
90
92
 
91
93
  class TestLogM:
94
+ def setup_method(self):
95
+ self.rng = np.random.default_rng(1738098768840254)
92
96
 
97
+ @pytest.mark.filterwarnings("ignore:.*inaccurate.*:RuntimeWarning")
93
98
  def test_nils(self):
94
99
  a = array([[-2., 25., 0., 0., 0., 0., 0.],
95
100
  [0., -3., 10., 3., 3., 3., 0.],
@@ -99,14 +104,15 @@ class TestLogM:
99
104
  [0., 0., 0., 0., 0., -2., 25.],
100
105
  [0., 0., 0., 0., 0., 0., -3.]])
101
106
  m = (identity(7)*3.1+0j)-a
102
- logm(m, disp=False)
107
+ logm(m)
103
108
  #XXX: what would be the correct result?
104
109
 
110
+ @pytest.mark.filterwarnings("ignore:.*inaccurate.*:RuntimeWarning")
105
111
  def test_al_mohy_higham_2012_experiment_1_logm(self):
106
112
  # The logm completes the round trip successfully.
107
113
  # Note that the expm leg of the round trip is badly conditioned.
108
114
  A = _get_al_mohy_higham_2012_experiment_1()
109
- A_logm, info = logm(A, disp=False)
115
+ A_logm = logm(A)
110
116
  A_round_trip = expm(A_logm)
111
117
  assert_allclose(A_round_trip, A, rtol=5e-5, atol=1e-14)
112
118
 
@@ -114,14 +120,13 @@ class TestLogM:
114
120
  # The raw funm with np.log does not complete the round trip.
115
121
  # Note that the expm leg of the round trip is badly conditioned.
116
122
  A = _get_al_mohy_higham_2012_experiment_1()
117
- A_funm_log, info = funm(A, np.log, disp=False)
123
+ A_funm_log = funm(A, np.log)
118
124
  A_round_trip = expm(A_funm_log)
119
125
  assert_(not np.allclose(A_round_trip, A, rtol=1e-5, atol=1e-14))
120
126
 
121
127
  def test_round_trip_random_float(self):
122
- np.random.seed(1234)
123
128
  for n in range(1, 6):
124
- M_unscaled = np.random.randn(n, n)
129
+ M_unscaled = self.rng.uniform(size=(n, n))
125
130
  for scale in np.logspace(-4, 4, 9):
126
131
  M = M_unscaled * scale
127
132
 
@@ -130,22 +135,26 @@ class TestLogM:
130
135
  err_msg = f'M:{M} eivals:{W}'
131
136
 
132
137
  # Check sqrtm round trip because it is used within logm.
133
- M_sqrtm, info = sqrtm(M, disp=False)
134
- M_sqrtm_round_trip = M_sqrtm.dot(M_sqrtm)
138
+ M_sqrtm = sqrtm(M)
139
+ M_sqrtm_round_trip = M_sqrtm @ M_sqrtm
135
140
  assert_allclose(M_sqrtm_round_trip, M)
136
141
 
137
142
  # Check logm round trip.
138
- M_logm, info = logm(M, disp=False)
139
- M_logm_round_trip = expm(M_logm)
140
- assert_allclose(M_logm_round_trip, M, err_msg=err_msg)
143
+ with suppress_warnings() as sup:
144
+ sup.filter(category=RuntimeWarning)
145
+
146
+ M_logm = logm(M)
147
+ M_logm_round_trip = expm(M_logm)
148
+ assert_allclose(M_logm_round_trip, M, err_msg=err_msg)
141
149
 
142
150
  def test_round_trip_random_complex(self):
143
- np.random.seed(1234)
151
+
144
152
  for n in range(1, 6):
145
- M_unscaled = np.random.randn(n, n) + 1j * np.random.randn(n, n)
153
+ M_unscaled = (self.rng.standard_normal((n, n)) +
154
+ 1j*self.rng.standard_normal((n, n)))
146
155
  for scale in np.logspace(-4, 4, 9):
147
156
  M = M_unscaled * scale
148
- M_logm, info = logm(M, disp=False)
157
+ M_logm = logm(M)
149
158
  M_round_trip = expm(M_logm)
150
159
  assert_allclose(M_round_trip, M)
151
160
 
@@ -166,17 +175,17 @@ class TestLogM:
166
175
 
167
176
  # check float type preservation
168
177
  A = np.array(matrix_as_list, dtype=float)
169
- A_logm, info = logm(A, disp=False)
178
+ A_logm = logm(A)
170
179
  assert_(A_logm.dtype.char not in complex_dtype_chars)
171
180
 
172
181
  # check complex type preservation
173
182
  A = np.array(matrix_as_list, dtype=complex)
174
- A_logm, info = logm(A, disp=False)
183
+ A_logm = logm(A)
175
184
  assert_(A_logm.dtype.char in complex_dtype_chars)
176
185
 
177
186
  # check float->complex type conversion for the matrix negation
178
187
  A = -np.array(matrix_as_list, dtype=float)
179
- A_logm, info = logm(A, disp=False)
188
+ A_logm = logm(A)
180
189
  assert_(A_logm.dtype.char in complex_dtype_chars)
181
190
 
182
191
  def test_complex_spectrum_real_logm(self):
@@ -187,7 +196,7 @@ class TestLogM:
187
196
  X = np.array(M, dtype=dt)
188
197
  w = scipy.linalg.eigvals(X)
189
198
  assert_(1e-2 < np.absolute(w.imag).sum())
190
- Y, info = logm(X, disp=False)
199
+ Y = logm(X)
191
200
  assert_(np.issubdtype(Y.dtype, np.inexact))
192
201
  assert_allclose(expm(Y), X)
193
202
 
@@ -199,7 +208,7 @@ class TestLogM:
199
208
  [[0, 1], [1, 0]]):
200
209
  for dt in float, complex:
201
210
  A = np.array(M, dtype=dt)
202
- A_logm, info = logm(A, disp=False)
211
+ A_logm, info = logm(A)
203
212
  assert_(np.issubdtype(A_logm.dtype, np.complexfloating))
204
213
 
205
214
  @pytest.mark.thread_unsafe
@@ -208,7 +217,7 @@ class TestLogM:
208
217
  B = np.asarray([[1, 1], [0, 0]])
209
218
  for M in A, A.T, B, B.T:
210
219
  expected_warning = _matfuncs_inv_ssq.LogmExactlySingularWarning
211
- L, info = assert_warns(expected_warning, logm, M, disp=False)
220
+ L = assert_warns(expected_warning, logm, M)
212
221
  E = expm(L)
213
222
  assert_allclose(E, M, atol=1e-14)
214
223
 
@@ -216,7 +225,7 @@ class TestLogM:
216
225
  def test_nearly_singular(self):
217
226
  M = np.array([[1e-100]])
218
227
  expected_warning = _matfuncs_inv_ssq.LogmNearlySingularWarning
219
- L, info = assert_warns(expected_warning, logm, M, disp=False)
228
+ L = assert_warns(expected_warning, logm, M)
220
229
  E = expm(L)
221
230
  assert_allclose(E, M, atol=1e-14)
222
231
 
@@ -264,23 +273,25 @@ class TestLogM:
264
273
 
265
274
 
266
275
  class TestSqrtM:
276
+
267
277
  def test_round_trip_random_float(self):
268
- rng = np.random.RandomState(1234)
278
+ rng = np.random.default_rng(1738151906092735)
269
279
  for n in range(1, 6):
270
- M_unscaled = rng.randn(n, n)
280
+ M_unscaled = rng.standard_normal((n, n))
271
281
  for scale in np.logspace(-4, 4, 9):
272
282
  M = M_unscaled * scale
273
- M_sqrtm, info = sqrtm(M, disp=False)
283
+ M_sqrtm = sqrtm(M)
274
284
  M_sqrtm_round_trip = M_sqrtm.dot(M_sqrtm)
275
285
  assert_allclose(M_sqrtm_round_trip, M)
276
286
 
277
287
  def test_round_trip_random_complex(self):
278
- rng = np.random.RandomState(1234)
288
+ rng = np.random.default_rng(1738151906092736)
279
289
  for n in range(1, 6):
280
- M_unscaled = rng.randn(n, n) + 1j * rng.randn(n, n)
290
+ M_unscaled = (rng.standard_normal((n, n)) +
291
+ 1j * rng.standard_normal((n, n)))
281
292
  for scale in np.logspace(-4, 4, 9):
282
293
  M = M_unscaled * scale
283
- M_sqrtm, info = sqrtm(M, disp=False)
294
+ M_sqrtm = sqrtm(M)
284
295
  M_sqrtm_round_trip = M_sqrtm.dot(M_sqrtm)
285
296
  assert_allclose(M_sqrtm_round_trip, M)
286
297
 
@@ -296,14 +307,10 @@ class TestSqrtM:
296
307
  [0,se,0,0],
297
308
  [0,0,se,0],
298
309
  [0,0,0,1]])
299
- n = a.shape[0]
300
- assert_array_almost_equal(dot(sa,sa),a)
310
+ assert_array_almost_equal(sa @ sa, a)
301
311
  # Check default sqrtm.
302
- esa = sqrtm(a, disp=False, blocksize=n)[0]
303
- assert_array_almost_equal(dot(esa,esa),a)
304
- # Check sqrtm with 2x2 blocks.
305
- esa = sqrtm(a, disp=False, blocksize=2)[0]
306
- assert_array_almost_equal(dot(esa,esa),a)
312
+ esa = sqrtm(a)
313
+ assert_array_almost_equal(esa @ esa, a)
307
314
 
308
315
  def test_sqrtm_type_preservation_and_conversion(self):
309
316
  # The sqrtm matrix function should preserve the type of a matrix
@@ -321,27 +328,31 @@ class TestSqrtM:
321
328
  W = scipy.linalg.eigvals(matrix_as_list)
322
329
  assert_(not any(w.imag or w.real < 0 for w in W))
323
330
 
324
- # check float type preservation
325
- A = np.array(matrix_as_list, dtype=float)
326
- A_sqrtm, info = sqrtm(A, disp=False)
327
- assert_(A_sqrtm.dtype.char not in complex_dtype_chars)
331
+ # Last test matrix is singular so suppress the warning
332
+ with suppress_warnings() as sup:
333
+ sup.filter(category=LinAlgWarning)
328
334
 
329
- # check complex type preservation
330
- A = np.array(matrix_as_list, dtype=complex)
331
- A_sqrtm, info = sqrtm(A, disp=False)
332
- assert_(A_sqrtm.dtype.char in complex_dtype_chars)
335
+ # check float type preservation
336
+ A = np.array(matrix_as_list, dtype=float)
337
+ A_sqrtm = sqrtm(A)
338
+ assert_(A_sqrtm.dtype.char not in complex_dtype_chars)
333
339
 
334
- # check float->complex type conversion for the matrix negation
335
- A = -np.array(matrix_as_list, dtype=float)
336
- A_sqrtm, info = sqrtm(A, disp=False)
337
- assert_(A_sqrtm.dtype.char in complex_dtype_chars)
340
+ # check complex type preservation
341
+ A = np.array(matrix_as_list, dtype=complex)
342
+ A_sqrtm = sqrtm(A)
343
+ assert_(A_sqrtm.dtype.char in complex_dtype_chars)
344
+
345
+ # check float->complex type conversion for the matrix negation
346
+ A = -np.array(matrix_as_list, dtype=float)
347
+ A_sqrtm = sqrtm(A)
348
+ assert_(A_sqrtm.dtype.char in complex_dtype_chars)
338
349
 
339
350
  def test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum(self):
340
351
  complex_dtype_chars = ('F', 'D', 'G')
341
352
  for matrix_as_list in (
342
353
  [[1, 0], [0, -1]],
343
354
  [[0, 1], [1, 0]],
344
- [[0, 1, 0], [0, 0, 1], [1, 0, 0]]):
355
+ [[0, 1, 0], [0, 0, -1], [1, 0, 0]]):
345
356
 
346
357
  # check that the spectrum has the expected properties
347
358
  W = scipy.linalg.eigvals(matrix_as_list)
@@ -349,44 +360,44 @@ class TestSqrtM:
349
360
 
350
361
  # check complex->complex
351
362
  A = np.array(matrix_as_list, dtype=complex)
352
- A_sqrtm, info = sqrtm(A, disp=False)
363
+ A_sqrtm = sqrtm(A)
353
364
  assert_(A_sqrtm.dtype.char in complex_dtype_chars)
354
365
 
355
366
  # check float->complex
356
367
  A = np.array(matrix_as_list, dtype=float)
357
- A_sqrtm, info = sqrtm(A, disp=False)
368
+ A_sqrtm = sqrtm(A)
358
369
  assert_(A_sqrtm.dtype.char in complex_dtype_chars)
359
370
 
360
- def test_blocksizes(self):
361
- # Make sure I do not goof up the blocksizes when they do not divide n.
362
- np.random.seed(1234)
363
- for n in range(1, 8):
364
- A = np.random.rand(n, n) + 1j*np.random.randn(n, n)
365
- A_sqrtm_default, info = sqrtm(A, disp=False, blocksize=n)
366
- assert_allclose(A, np.linalg.matrix_power(A_sqrtm_default, 2))
367
- for blocksize in range(1, 10):
368
- A_sqrtm_new, info = sqrtm(A, disp=False, blocksize=blocksize)
369
- assert_allclose(A_sqrtm_default, A_sqrtm_new)
370
-
371
371
  def test_al_mohy_higham_2012_experiment_1(self):
372
372
  # Matrix square root of a tricky upper triangular matrix.
373
373
  A = _get_al_mohy_higham_2012_experiment_1()
374
- A_sqrtm, info = sqrtm(A, disp=False)
375
- A_round_trip = A_sqrtm.dot(A_sqrtm)
374
+ A_sqrtm = sqrtm(A)
375
+ A_round_trip = A_sqrtm @ A_sqrtm
376
376
  assert_allclose(A_round_trip, A, rtol=1e-5)
377
377
  assert_allclose(np.tril(A_round_trip), np.tril(A))
378
378
 
379
379
  def test_strict_upper_triangular(self):
380
- # This matrix has no square root.
380
+ # This matrix has no square root but upper triangular hence upper
381
+ # triangle will be filled with junk values.
381
382
  for dt in int, float:
382
383
  A = np.array([
383
384
  [0, 3, 0, 0],
384
385
  [0, 0, 3, 0],
385
386
  [0, 0, 0, 3],
386
387
  [0, 0, 0, 0]], dtype=dt)
387
- A_sqrtm, info = sqrtm(A, disp=False)
388
- assert_(np.isnan(A_sqrtm).all())
389
-
388
+ with suppress_warnings() as sup:
389
+ sup.filter(category=LinAlgWarning)
390
+
391
+ A_sqrtm = sqrtm(A)
392
+ assert_allclose(np.tril(A_sqrtm), np.zeros((4, 4)))
393
+ assert np.isnan(A_sqrtm).any()
394
+ assert np.isinf(A_sqrtm).any()
395
+
396
+ # Future edit: This squareroot is not possible to find algorithmically
397
+ # with the current methods. Now sqrtm docstring has another example of
398
+ # such matrix whose squareroot is not a polynomial in it. Hence no need
399
+ # to test it here.
400
+ """
390
401
  def test_weird_matrix(self):
391
402
  # The square root of matrix B exists.
392
403
  for dt in int, float:
@@ -398,18 +409,12 @@ class TestSqrtM:
398
409
  [0, 1, 0],
399
410
  [0, 0, 0],
400
411
  [0, 0, 0]], dtype=dt)
401
- assert_array_equal(B, A.dot(A))
412
+ assert_array_equal(B, A @ A)
402
413
 
403
414
  # But scipy sqrtm is not clever enough to find it.
404
415
  B_sqrtm, info = sqrtm(B, disp=False)
405
416
  assert_(np.isnan(B_sqrtm).all())
406
-
407
- def test_disp(self):
408
- np.random.seed(1234)
409
-
410
- A = np.random.rand(3, 3)
411
- B = sqrtm(A, disp=True)
412
- assert_allclose(B.dot(B), A)
417
+ """
413
418
 
414
419
  def test_opposite_sign_complex_eigenvalues(self):
415
420
  M = [[2j, 4], [0, -2j]]
@@ -426,22 +431,29 @@ class TestSqrtM:
426
431
  [0, 0, 0, 0],
427
432
  [0, 0, 0, 0],
428
433
  [sqrt(0.5), 0, 0, sqrt(0.5)]])
429
- assert_allclose(np.dot(R, R), M, atol=1e-14)
430
- assert_allclose(sqrtm(M), R, atol=1e-14)
434
+ assert_allclose(R @ R, M, atol=1e-14)
435
+ with suppress_warnings() as sup:
436
+ sup.filter(category=LinAlgWarning)
437
+
438
+ assert_allclose(sqrtm(M), R, atol=1e-14)
431
439
 
432
440
  def test_gh5336(self):
433
441
  M = np.diag([2, 1, 0])
434
442
  R = np.diag([sqrt(2), 1, 0])
435
- assert_allclose(np.dot(R, R), M, atol=1e-14)
436
- assert_allclose(sqrtm(M), R, atol=1e-14)
443
+ assert_allclose(R @ R, M, atol=1e-14)
444
+ with suppress_warnings() as sup:
445
+ sup.filter(category=LinAlgWarning)
446
+ assert_allclose(sqrtm(M), R, atol=1e-14)
437
447
 
438
448
  def test_gh7839(self):
439
449
  M = np.zeros((2, 2))
440
450
  R = np.zeros((2, 2))
441
- assert_allclose(np.dot(R, R), M, atol=1e-14)
442
- assert_allclose(sqrtm(M), R, atol=1e-14)
451
+ # Catch and silence LinAlgWarning
452
+ with suppress_warnings() as sup:
453
+ sup.filter(category=LinAlgWarning)
454
+
455
+ assert_allclose(sqrtm(M), R, atol=1e-14)
443
456
 
444
- @pytest.mark.xfail(reason="failing on macOS after gh-20212")
445
457
  def test_gh17918(self):
446
458
  M = np.empty((19, 19))
447
459
  M.fill(0.94)
@@ -449,23 +461,23 @@ class TestSqrtM:
449
461
  assert np.isrealobj(sqrtm(M))
450
462
 
451
463
  def test_data_size_preservation_uint_in_float_out(self):
452
- M = np.zeros((10, 10), dtype=np.uint8)
464
+ M = np.eye(10, dtype=np.uint8)
453
465
  assert sqrtm(M).dtype == np.float64
454
- M = np.zeros((10, 10), dtype=np.uint16)
466
+ M = np.eye(10, dtype=np.uint16)
455
467
  assert sqrtm(M).dtype == np.float64
456
- M = np.zeros((10, 10), dtype=np.uint32)
468
+ M = np.eye(10, dtype=np.uint32)
457
469
  assert sqrtm(M).dtype == np.float64
458
- M = np.zeros((10, 10), dtype=np.uint64)
470
+ M = np.eye(10, dtype=np.uint64)
459
471
  assert sqrtm(M).dtype == np.float64
460
472
 
461
473
  def test_data_size_preservation_int_in_float_out(self):
462
- M = np.zeros((10, 10), dtype=np.int8)
474
+ M = np.eye(10, dtype=np.int8)
463
475
  assert sqrtm(M).dtype == np.float64
464
- M = np.zeros((10, 10), dtype=np.int16)
476
+ M = np.eye(10, dtype=np.int16)
465
477
  assert sqrtm(M).dtype == np.float64
466
- M = np.zeros((10, 10), dtype=np.int32)
478
+ M = np.eye(10, dtype=np.int32)
467
479
  assert sqrtm(M).dtype == np.float64
468
- M = np.zeros((10, 10), dtype=np.int64)
480
+ M = np.eye(10, dtype=np.int64)
469
481
  assert sqrtm(M).dtype == np.float64
470
482
 
471
483
  def test_data_size_preservation_int_in_comp_out(self):
@@ -479,14 +491,14 @@ class TestSqrtM:
479
491
  assert sqrtm(M).dtype == np.complex128
480
492
 
481
493
  def test_data_size_preservation_float_in_float_out(self):
482
- M = np.zeros((10, 10), dtype=np.float16)
494
+ M = np.eye(10, dtype=np.float16)
483
495
  assert sqrtm(M).dtype == np.float32
484
- M = np.zeros((10, 10), dtype=np.float32)
496
+ M = np.eye(10, dtype=np.float32)
485
497
  assert sqrtm(M).dtype == np.float32
486
- M = np.zeros((10, 10), dtype=np.float64)
498
+ M = np.eye(10, dtype=np.float64)
487
499
  assert sqrtm(M).dtype == np.float64
488
500
  if hasattr(np, 'float128'):
489
- M = np.zeros((10, 10), dtype=np.float128)
501
+ M = np.eye(10, dtype=np.float128)
490
502
  assert sqrtm(M).dtype == np.float64
491
503
 
492
504
  def test_data_size_preservation_float_in_comp_out(self):
@@ -519,6 +531,39 @@ class TestSqrtM:
519
531
  assert s.shape == (0, 0)
520
532
  assert s.dtype == s0.dtype
521
533
 
534
+ def test_cf_noncontig_nd_inputs(self):
535
+ # Check that non-contiguous arrays are handled correctly.
536
+ # Generate an L, U pair for invertible random matrix.
537
+ rng = np.random.default_rng(1738151906092737)
538
+ n = 13
539
+ A = rng.uniform(size=(3, 2*n, 2*n))
540
+ L, U = np.tril(A, k=-1) + np.eye(2*n), np.triu(A)
541
+ A = L @ U
542
+ # Create strided views of 3D array.
543
+ A_noncontig_c = A[:, ::2, ::2]
544
+ A_noncontig_f = np.asfortranarray(A)[:, 1::2, 1::2]
545
+ assert_allclose(sqrtm(A[:, ::2, ::2]), sqrtm(A_noncontig_c))
546
+ assert_allclose(sqrtm(A[:, 1::2, 1::2]), sqrtm(A_noncontig_f))
547
+
548
+ def test_empty_sizes(self):
549
+ A = np.empty(shape=[4, 0, 5, 5], dtype=float)
550
+ assert_array_equal(sqrtm(A), A)
551
+
552
+ def test_negative_strides(self):
553
+ rng = np.random.default_rng(1738151906092738)
554
+ A = rng.uniform(size=(3, 5, 5))
555
+ A_negneg_orig = A[:, ::-1, ::-1]
556
+ A_negneg_copy = A[:, ::-1, ::-1].copy()
557
+ assert_allclose(sqrtm(A_negneg_orig), sqrtm(A_negneg_copy))
558
+
559
+ A_posneg_orig = A[:, :, ::-1]
560
+ A_posneg_copy = A[:, :, ::-1].copy()
561
+ assert_allclose(sqrtm(A_posneg_orig), sqrtm(A_posneg_copy))
562
+
563
+ A_negpos_orig = A[:, ::-1, :]
564
+ A_negpos_copy = A[:, ::-1, :].copy()
565
+ assert_allclose(sqrtm(A_negpos_orig), sqrtm(A_negpos_copy))
566
+
522
567
 
523
568
  class TestFractionalMatrixPower:
524
569
  def test_round_trip_random_complex(self):
@@ -586,7 +631,7 @@ class TestFractionalMatrixPower:
586
631
  # to compute the fractional matrix power.
587
632
  # These can be compared because they both use the principal branch.
588
633
  A_power = fractional_matrix_power(A, p)
589
- A_logm, info = logm(A, disp=False)
634
+ A_logm = logm(A)
590
635
  A_power_expm_logm = expm(A_logm * p)
591
636
  assert_allclose(A_power, A_power_expm_logm)
592
637
 
@@ -595,8 +640,8 @@ class TestFractionalMatrixPower:
595
640
  A = _get_al_mohy_higham_2012_experiment_1()
596
641
 
597
642
  # Test remainder matrix power.
598
- A_funm_sqrt, info = funm(A, np.sqrt, disp=False)
599
- A_sqrtm, info = sqrtm(A, disp=False)
643
+ A_funm_sqrt = funm(A, np.sqrt)
644
+ A_sqrtm = sqrtm(A)
600
645
  A_rem_power = _matfuncs_inv_ssq._remainder_matrix_power(A, 0.5)
601
646
  A_power = fractional_matrix_power(A, 0.5)
602
647
  assert_allclose(A_rem_power, A_power, rtol=1e-11)
@@ -1061,3 +1106,13 @@ class TestKhatriRao:
1061
1106
  b = np.empty((5, 0))
1062
1107
  res = khatri_rao(a, b)
1063
1108
  assert_allclose(res, np.empty((15, 0)))
1109
+
1110
+ @pytest.mark.parametrize('func',
1111
+ [logm, sqrtm, signm])
1112
+ def test_disp_dep(func):
1113
+ with pytest.deprecated_call():
1114
+ func(np.eye(2), disp=False)
1115
+
1116
+ def test_blocksize_dep():
1117
+ with pytest.deprecated_call():
1118
+ sqrtm(np.eye(2), blocksize=10)
@@ -10,13 +10,6 @@ from scipy.linalg import orthogonal_procrustes
10
10
  from scipy.sparse._sputils import matrix
11
11
 
12
12
 
13
- def test_orthogonal_procrustes_ndim_too_large():
14
- rng = np.random.RandomState(1234)
15
- A = rng.randn(3, 4, 5)
16
- B = rng.randn(3, 4, 5)
17
- assert_raises(ValueError, orthogonal_procrustes, A, B)
18
-
19
-
20
13
  def test_orthogonal_procrustes_ndim_too_small():
21
14
  rng = np.random.RandomState(1234)
22
15
  A = rng.randn(3)
@@ -39,7 +39,7 @@ def test_multiple_rhs():
39
39
  c = random.randn(4)
40
40
  r = random.randn(4)
41
41
  for offset in [0, 1j]:
42
- for yshape in ((4,), (4, 3), (4, 3, 2)):
42
+ for yshape in ((4,), (4, 3)):
43
43
  y = random.randn(*yshape) + offset
44
44
  actual = solve_toeplitz((c,r), b=y)
45
45
  desired = solve(toeplitz(c, r=r), y)
@@ -172,9 +172,6 @@ class TestBlockDiag:
172
172
  a = block_diag([2, 3], 4)
173
173
  assert_array_equal(a, [[2, 3, 0], [0, 0, 4]])
174
174
 
175
- def test_bad_arg(self):
176
- assert_raises(ValueError, block_diag, [[[1]]])
177
-
178
175
  def test_no_args(self):
179
176
  a = block_diag()
180
177
  assert_equal(a.ndim, 2)
@@ -504,8 +501,7 @@ def test_invpascal():
504
501
  # precision when n is greater than 18. Instead we'll cast both to
505
502
  # object arrays, and then multiply.
506
503
  e = ip.astype(object).dot(p.astype(object))
507
- assert_array_equal(e, eye(n), err_msg="n=%d kind=%r exact=%r" %
508
- (n, kind, exact))
504
+ assert_array_equal(e, eye(n), err_msg=f"n={n} kind={kind!r} exact={exact!r}")
509
505
 
510
506
  kinds = ['symmetric', 'lower', 'upper']
511
507
 
scipy/ndimage/__init__.py CHANGED
@@ -39,6 +39,7 @@ Filters
39
39
  sobel
40
40
  uniform_filter - Multidimensional uniform filter
41
41
  uniform_filter1d - 1-D uniform filter along the given axis
42
+ vectorized_filter
42
43
 
43
44
  Fourier filters
44
45
  ===============
@@ -25,7 +25,7 @@ for func in funcs:
25
25
  """
26
26
  import numpy as np
27
27
  from scipy._lib._array_api import array_namespace
28
- from scipy.ndimage._ni_support import _skip_if_dtype, _skip_if_int
28
+ from scipy.ndimage._ni_support import _skip_if_dtype
29
29
 
30
30
 
31
31
  def affine_transform_signature(
@@ -202,7 +202,7 @@ uniform_filter1d_signature = maximum_filter1d_signature
202
202
 
203
203
 
204
204
  def maximum_signature(input, labels=None, index=None):
205
- return array_namespace(input, labels, _skip_if_int(index))
205
+ return array_namespace(input, labels, index)
206
206
 
207
207
  minimum_signature = maximum_signature
208
208
  median_signature = maximum_signature
@@ -288,6 +288,12 @@ def value_indices_signature(arr, *args, **kwds):
288
288
  return array_namespace(arr)
289
289
 
290
290
 
291
+ def vectorized_filter_signature(
292
+ input, function, size=None, footprint=None, output=None, *args, **kwds
293
+ ):
294
+ return array_namespace(input, footprint, _skip_if_dtype(output))
295
+
296
+
291
297
  def watershed_ift_signature(input, markers, structure=None, output=None):
292
298
  return array_namespace(input, markers, structure, _skip_if_dtype(output))
293
299