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
@@ -46,7 +46,6 @@ from scipy.sparse._sputils import (
46
46
  from scipy.sparse.linalg import gmres, splu
47
47
  from scipy._lib._util import _aligned_zeros
48
48
  from scipy._lib._threadsafety import ReentrancyLock
49
-
50
49
  from . import _arpack
51
50
  arpack_int = _arpack.timing.nbx.dtype
52
51
 
@@ -277,9 +276,13 @@ class ArpackError(RuntimeError):
277
276
  ARPACK error
278
277
  """
279
278
 
280
- def __init__(self, info, infodict=_NAUPD_ERRORS):
279
+ def __init__(self, info, infodict=None):
280
+ if infodict is None:
281
+ infodict = _NAUPD_ERRORS
282
+
281
283
  msg = infodict.get(info, "Unknown error")
282
- RuntimeError.__init__(self, "ARPACK error %d: %s" % (info, msg))
284
+ super().__init__(f"ARPACK error {info}: {msg}")
285
+
283
286
 
284
287
 
285
288
  class ArpackNoConvergence(ArpackError):
@@ -313,12 +316,12 @@ class _ArpackParams:
313
316
  def __init__(self, n, k, tp, mode=1, sigma=None,
314
317
  ncv=None, v0=None, maxiter=None, which="LM", tol=0):
315
318
  if k <= 0:
316
- raise ValueError("k must be positive, k=%d" % k)
319
+ raise ValueError(f"k must be positive, k={k}")
317
320
 
318
321
  if maxiter is None:
319
322
  maxiter = n * 10
320
323
  if maxiter <= 0:
321
- raise ValueError("maxiter must be positive, maxiter=%d" % maxiter)
324
+ raise ValueError(f"maxiter must be positive, maxiter={maxiter}")
322
325
 
323
326
  if tp not in 'fdFD':
324
327
  # Use `float64` libraries from integer dtypes.
@@ -508,12 +511,12 @@ class _SymmetricArpackParams(_ArpackParams):
508
511
  self.B = M_matvec
509
512
  self.bmat = 'G'
510
513
  else:
511
- raise ValueError("mode=%i not implemented" % mode)
514
+ raise ValueError(f"mode={mode} not implemented")
512
515
 
513
516
  if which not in _SEUPD_WHICH:
514
517
  raise ValueError(f"which must be one of {' '.join(_SEUPD_WHICH)}")
515
518
  if k >= n:
516
- raise ValueError("k must be less than ndim(A), k=%d" % k)
519
+ raise ValueError(f"k must be less than ndim(A), k={k}")
517
520
 
518
521
  _ArpackParams.__init__(self, n, k, tp, mode, sigma,
519
522
  ncv, v0, maxiter, which, tol)
@@ -690,12 +693,12 @@ class _UnsymmetricArpackParams(_ArpackParams):
690
693
  self.bmat = 'G'
691
694
  self.OP = lambda x: self.OPa(M_matvec(x))
692
695
  else:
693
- raise ValueError("mode=%i not implemented" % mode)
696
+ raise ValueError(f"mode={mode} not implemented")
694
697
 
695
698
  if which not in _NEUPD_WHICH:
696
699
  raise ValueError(f"Parameter which must be one of {' '.join(_NEUPD_WHICH)}")
697
700
  if k >= n - 1:
698
- raise ValueError("k must be less than ndim(A)-1, k=%d" % k)
701
+ raise ValueError(f"k must be less than ndim(A)-1, k={k}")
699
702
 
700
703
  _ArpackParams.__init__(self, n, k, tp, mode, sigma,
701
704
  ncv, v0, maxiter, which, tol)
@@ -977,9 +980,10 @@ class IterInv(LinearOperator):
977
980
  def _matvec(self, x):
978
981
  b, info = self.ifunc(self.M, x, tol=self.tol)
979
982
  if info != 0:
980
- raise ValueError("Error in inverting M: function "
981
- "%s did not converge (info = %i)."
982
- % (self.ifunc.__name__, info))
983
+ raise ValueError(
984
+ f"Error in inverting M: function {self.ifunc.__name__} "
985
+ f"did not converge (info = {info})."
986
+ )
983
987
  return b
984
988
 
985
989
 
@@ -1024,9 +1028,10 @@ class IterOpInv(LinearOperator):
1024
1028
  def _matvec(self, x):
1025
1029
  b, info = self.ifunc(self.OP, x, tol=self.tol)
1026
1030
  if info != 0:
1027
- raise ValueError("Error in inverting [A-sigma*M]: function "
1028
- "%s did not converge (info = %i)."
1029
- % (self.ifunc.__name__, info))
1031
+ raise ValueError(
1032
+ f"Error in inverting [A-sigma*M]: function {self.ifunc.__name__} "
1033
+ f"did not converge (info = {info})."
1034
+ )
1030
1035
  return b
1031
1036
 
1032
1037
  @property
@@ -1266,7 +1271,7 @@ def eigs(A, k=6, M=None, sigma=None, which='LM', v0=None,
1266
1271
  n = A.shape[0]
1267
1272
 
1268
1273
  if k <= 0:
1269
- raise ValueError("k=%d must be greater than 0." % k)
1274
+ raise ValueError(f"k={k} must be greater than 0.")
1270
1275
 
1271
1276
  if k >= n - 1:
1272
1277
  warnings.warn("k >= N - 1 for N * N square matrix. "
@@ -1422,16 +1427,19 @@ def eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None,
1422
1427
  unspecified. This is computed internally via a (sparse) LU
1423
1428
  decomposition for explicit matrices A & M, or via an iterative
1424
1429
  solver if either A or M is a general linear operator.
1425
- Alternatively, the user can supply the matrix or operator OPinv,
1430
+ Alternatively, the user can supply the matrix or operator `OPinv`,
1426
1431
  which gives ``x = OPinv @ b = [A - sigma * M]^-1 @ b``.
1432
+ Regardless of the selected mode (normal, cayley, or buckling),
1433
+ `OPinv` should always be supplied as ``OPinv = [A - sigma * M]^-1``.
1434
+
1427
1435
  Note that when sigma is specified, the keyword 'which' refers to
1428
1436
  the shifted eigenvalues ``w'[i]`` where:
1429
1437
 
1430
- if mode == 'normal', ``w'[i] = 1 / (w[i] - sigma)``.
1438
+ if ``mode == 'normal'``: ``w'[i] = 1 / (w[i] - sigma)``.
1431
1439
 
1432
- if mode == 'cayley', ``w'[i] = (w[i] + sigma) / (w[i] - sigma)``.
1440
+ if ``mode == 'cayley'``: ``w'[i] = (w[i] + sigma) / (w[i] - sigma)``.
1433
1441
 
1434
- if mode == 'buckling', ``w'[i] = w[i] / (w[i] - sigma)``.
1442
+ if ``mode == 'buckling'``: ``w'[i] = w[i] / (w[i] - sigma)``.
1435
1443
 
1436
1444
  (see further discussion in 'mode' below)
1437
1445
  v0 : ndarray, optional
@@ -307,7 +307,7 @@ def lobpcg(
307
307
  ``A x = lambda x`` without constraints or preconditioning.
308
308
 
309
309
  >>> import numpy as np
310
- >>> from scipy.sparse import spdiags
310
+ >>> from scipy.sparse import diags_array
311
311
  >>> from scipy.sparse.linalg import LinearOperator, aslinearoperator
312
312
  >>> from scipy.sparse.linalg import lobpcg
313
313
 
@@ -323,7 +323,7 @@ def lobpcg(
323
323
  the sparse diagonal matrix `A`
324
324
  of the eigenvalue problem ``A x = lambda x`` to solve.
325
325
 
326
- >>> A = spdiags(vals, 0, n, n)
326
+ >>> A = diags_array(vals, offsets=0, shape=(n, n))
327
327
  >>> A = A.astype(np.int16)
328
328
  >>> A.toarray()
329
329
  array([[ 1, 0, 0, ..., 0, 0, 0],
@@ -507,15 +507,15 @@ def lobpcg(
507
507
  if M is None:
508
508
  aux += "out"
509
509
  aux += " preconditioning\n\n"
510
- aux += "matrix size %d\n" % n
511
- aux += "block size %d\n\n" % sizeX
510
+ aux += f"matrix size {n}\n"
511
+ aux += f"block size {sizeX}\n\n"
512
512
  if blockVectorY is None:
513
513
  aux += "No constraints\n\n"
514
514
  else:
515
515
  if sizeY > 1:
516
- aux += "%d constraints\n\n" % sizeY
516
+ aux += f"{sizeY} constraints\n\n"
517
517
  else:
518
- aux += "%d constraint\n\n" % sizeY
518
+ aux += f"{sizeY} constraint\n\n"
519
519
  print(aux)
520
520
 
521
521
  if (n - sizeY) < (5 * sizeX):
@@ -115,7 +115,7 @@ def expm_multiply(A, B, start=None, stop=None, num=None,
115
115
  ----------
116
116
  A : transposable linear operator
117
117
  The operator whose exponential is of interest.
118
- B : ndarray
118
+ B : ndarray, sparse array
119
119
  The matrix or vector to be multiplied by the matrix exponential of A.
120
120
  start : scalar, optional
121
121
  The starting time point of the sequence.
@@ -443,7 +443,7 @@ class LazyOperatorNormInfo:
443
443
 
444
444
  def d(self, p):
445
445
  """
446
- Lazily estimate :math:`d_p(A) ~= || A^p ||^(1/p)`
446
+ Lazily estimate :math:`d_p(A) ~= || A^p ||^(1/p)`
447
447
  where :math:`||.||` is the 1-norm.
448
448
  """
449
449
  if p not in self._d:
@@ -702,7 +702,12 @@ def _expm_multiply_interval(A, B, start=None, stop=None, num=None,
702
702
  m_star, s = _fragment_3_1(norm_info, n0, tol, ell=ell)
703
703
 
704
704
  # Compute the expm action up to the initial time point.
705
- X[0] = _expm_multiply_simple_core(A, B, t_0, mu, m_star, s)
705
+ action_t0 = _expm_multiply_simple_core(A, B, t_0, mu, m_star, s)
706
+ if scipy.sparse.issparse(action_t0):
707
+ action_t0 = action_t0.toarray()
708
+ elif is_pydata_spmatrix(action_t0):
709
+ action_t0 = action_t0.todense()
710
+ X[0] = action_t0
706
711
 
707
712
  # Compute the expm action at the rest of the time points.
708
713
  if q <= s:
@@ -55,14 +55,14 @@ __all__ = ['LinearOperator', 'aslinearoperator']
55
55
  class LinearOperator:
56
56
  """Common interface for performing matrix vector products
57
57
 
58
- Many iterative methods (e.g. cg, gmres) do not need to know the
59
- individual entries of a matrix to solve a linear system A@x=b.
58
+ Many iterative methods (e.g. `cg`, `gmres`) do not need to know the
59
+ individual entries of a matrix to solve a linear system ``A@x = b``.
60
60
  Such solvers only require the computation of matrix vector
61
- products, A@v where v is a dense vector. This class serves as
61
+ products, ``A@v`` where ``v`` is a dense vector. This class serves as
62
62
  an abstract interface between iterative solvers and matrix-like
63
63
  objects.
64
64
 
65
- To construct a concrete LinearOperator, either pass appropriate
65
+ To construct a concrete `LinearOperator`, either pass appropriate
66
66
  callables to the constructor of this class, or subclass it.
67
67
 
68
68
  A subclass must implement either one of the methods ``_matvec``
@@ -82,17 +82,17 @@ class LinearOperator:
82
82
  Parameters
83
83
  ----------
84
84
  shape : tuple
85
- Matrix dimensions (M, N).
85
+ Matrix dimensions ``(M, N)``.
86
86
  matvec : callable f(v)
87
- Returns returns A @ v.
87
+ Returns returns ``A @ v``.
88
88
  rmatvec : callable f(v)
89
- Returns A^H @ v, where A^H is the conjugate transpose of A.
89
+ Returns ``A^H @ v``, where ``A^H`` is the conjugate transpose of ``A``.
90
90
  matmat : callable f(V)
91
- Returns A @ V, where V is a dense matrix with dimensions (N, K).
91
+ Returns ``A @ V``, where ``V`` is a dense matrix with dimensions ``(N, K)``.
92
92
  dtype : dtype
93
93
  Data type of the matrix.
94
94
  rmatmat : callable f(V)
95
- Returns A^H @ V, where V is a dense matrix with dimensions (M, K).
95
+ Returns ``A^H @ V``, where ``V`` is a dense matrix with dimensions ``(M, K)``.
96
96
 
97
97
  Attributes
98
98
  ----------
@@ -108,17 +108,17 @@ class LinearOperator:
108
108
 
109
109
  Notes
110
110
  -----
111
- The user-defined matvec() function must properly handle the case
112
- where v has shape (N,) as well as the (N,1) case. The shape of
113
- the return type is handled internally by LinearOperator.
111
+ The user-defined `matvec` function must properly handle the case
112
+ where ``v`` has shape ``(N,)`` as well as the ``(N,1)`` case. The shape of
113
+ the return type is handled internally by `LinearOperator`.
114
114
 
115
115
  It is highly recommended to explicitly specify the `dtype`, otherwise
116
116
  it is determined automatically at the cost of a single matvec application
117
- on `int8` zero vector using the promoted `dtype` of the output.
118
- Python `int` could be difficult to automatically cast to numpy integers
117
+ on ``int8`` zero vector using the promoted `dtype` of the output.
118
+ Python ``int`` could be difficult to automatically cast to numpy integers
119
119
  in the definition of the `matvec` so the determination may be inaccurate.
120
120
  It is assumed that `matmat`, `rmatvec`, and `rmatmat` would result in
121
- the same dtype of the output given an `int8` input as `matvec`.
121
+ the same dtype of the output given an ``int8`` input as `matvec`.
122
122
 
123
123
  LinearOperator instances can also be multiplied, added with each
124
124
  other and exponentiated, all lazily: the result of these operations
@@ -322,6 +322,10 @@ class LinearOperator:
322
322
  """Default implementation of _rmatvec; defers to adjoint."""
323
323
  if type(self)._adjoint == LinearOperator._adjoint:
324
324
  # _adjoint not overridden, prevent infinite recursion
325
+ if (hasattr(self, "_rmatmat")
326
+ and type(self)._rmatmat != LinearOperator._rmatmat):
327
+ # Try to use _rmatmat as a fallback
328
+ return self._rmatmat(x.reshape(-1, 1)).reshape(-1)
325
329
  raise NotImplementedError
326
330
  else:
327
331
  return self.H.matvec(x)
@@ -399,8 +403,7 @@ class LinearOperator:
399
403
  X = np.asanyarray(X)
400
404
 
401
405
  if X.ndim != 2:
402
- raise ValueError('expected 2-d ndarray or matrix, not %d-d'
403
- % X.ndim)
406
+ raise ValueError(f'expected 2-d ndarray or matrix, not {X.ndim}-d')
404
407
 
405
408
  if X.shape[0] != self.shape[0]:
406
409
  raise ValueError(f'dimension mismatch: {self.shape}, {X.shape}')
@@ -548,7 +551,7 @@ class LinearOperator:
548
551
  else:
549
552
  dt = 'dtype=' + str(self.dtype)
550
553
 
551
- return '<%dx%d %s with %s>' % (M, N, self.__class__.__name__, dt)
554
+ return f'<{M}x{N} {self.__class__.__name__} with {dt}>'
552
555
 
553
556
  def adjoint(self):
554
557
  """Hermitian adjoint.
@@ -822,22 +825,22 @@ class MatrixLinearOperator(LinearOperator):
822
825
 
823
826
  def _adjoint(self):
824
827
  if self.__adj is None:
825
- self.__adj = _AdjointMatrixOperator(self)
828
+ self.__adj = _AdjointMatrixOperator(self.A)
826
829
  return self.__adj
827
830
 
831
+
828
832
  class _AdjointMatrixOperator(MatrixLinearOperator):
829
- def __init__(self, adjoint):
830
- self.A = adjoint.A.T.conj()
831
- self.__adjoint = adjoint
832
- self.args = (adjoint,)
833
- self.shape = adjoint.shape[1], adjoint.shape[0]
833
+ def __init__(self, adjoint_array):
834
+ self.A = adjoint_array.T.conj()
835
+ self.args = (adjoint_array,)
836
+ self.shape = adjoint_array.shape[1], adjoint_array.shape[0]
834
837
 
835
838
  @property
836
839
  def dtype(self):
837
- return self.__adjoint.dtype
840
+ return self.args[0].dtype
838
841
 
839
842
  def _adjoint(self):
840
- return self.__adjoint
843
+ return MatrixLinearOperator(self.args[0])
841
844
 
842
845
 
843
846
  class IdentityOperator(LinearOperator):
@@ -184,7 +184,7 @@ def _fgmres(matvec, v0, m, atol, lpsolve=None, rpsolve=None, cs=(), outer_v=(),
184
184
  def gcrotmk(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=None,
185
185
  m=20, k=None, CU=None, discard_C=False, truncate='oldest'):
186
186
  """
187
- Solve a matrix equation using flexible GCROT(m,k) algorithm.
187
+ Solve ``Ax = b`` with the flexible GCROT(m,k) algorithm.
188
188
 
189
189
  Parameters
190
190
  ----------
@@ -273,7 +273,7 @@ def gcrotmk(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback
273
273
  True
274
274
 
275
275
  """
276
- A,M,x,b,postprocess = make_system(A,M,x0,b)
276
+ A,M,x,b = make_system(A,M,x0,b)
277
277
 
278
278
  if not np.isfinite(b).all():
279
279
  raise ValueError("RHS must contain only finite numbers")
@@ -306,7 +306,7 @@ def gcrotmk(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback
306
306
 
307
307
  if b_norm == 0:
308
308
  x = b
309
- return (postprocess(x), 0)
309
+ return (x, 0)
310
310
 
311
311
  if discard_C:
312
312
  CU[:] = [(None, u) for c, u in CU]
@@ -433,7 +433,8 @@ def gcrotmk(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback
433
433
  ux = axpy(u, ux, ux.shape[0], -byc) # ux -= u*byc
434
434
 
435
435
  # cx := V H y
436
- hy = Q.dot(R.dot(y))
436
+ with np.errstate(invalid="ignore"):
437
+ hy = Q.dot(R.dot(y))
437
438
  cx = vs[0] * hy[0]
438
439
  for v, hyc in zip(vs[1:], hy[1:]):
439
440
  cx = axpy(v, cx, cx.shape[0], hyc) # cx += v*hyc
@@ -499,4 +500,4 @@ def gcrotmk(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback
499
500
  if discard_C:
500
501
  CU[:] = [(None, uz) for cz, uz in CU]
501
502
 
502
- return postprocess(x), j_outer + 1
503
+ return x, j_outer + 1