scipy 1.15.2__cp313-cp313t-musllinux_1_2_aarch64.whl → 1.16.0__cp313-cp313t-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. scipy/__config__.py +13 -13
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313t-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +497 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313t-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-313t-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313t-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313t-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313t-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-313t-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-313t-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +169 -34
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-313t-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-313t-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-313t-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +282 -151
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-313t-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-313t-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-313t-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_ivp/common.py +3 -3
  130. scipy/integrate/_ivp/ivp.py +9 -2
  131. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  132. scipy/integrate/_lsoda.cpython-313t-aarch64-linux-musl.so +0 -0
  133. scipy/integrate/_ode.py +9 -2
  134. scipy/integrate/_odepack.cpython-313t-aarch64-linux-musl.so +0 -0
  135. scipy/integrate/_quad_vec.py +21 -29
  136. scipy/integrate/_quadpack.cpython-313t-aarch64-linux-musl.so +0 -0
  137. scipy/integrate/_quadpack_py.py +11 -7
  138. scipy/integrate/_quadrature.py +3 -3
  139. scipy/integrate/_rules/_base.py +2 -2
  140. scipy/integrate/_tanhsinh.py +57 -54
  141. scipy/integrate/_test_multivariate.cpython-313t-aarch64-linux-musl.so +0 -0
  142. scipy/integrate/_test_odeint_banded.cpython-313t-aarch64-linux-musl.so +0 -0
  143. scipy/integrate/_vode.cpython-313t-aarch64-linux-musl.so +0 -0
  144. scipy/integrate/tests/test__quad_vec.py +0 -6
  145. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  146. scipy/integrate/tests/test_cubature.py +21 -35
  147. scipy/integrate/tests/test_quadrature.py +6 -8
  148. scipy/integrate/tests/test_tanhsinh.py +61 -43
  149. scipy/interpolate/__init__.py +70 -58
  150. scipy/interpolate/_bary_rational.py +22 -22
  151. scipy/interpolate/_bsplines.py +119 -66
  152. scipy/interpolate/_cubic.py +65 -50
  153. scipy/interpolate/_dfitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  154. scipy/interpolate/_dierckx.cpython-313t-aarch64-linux-musl.so +0 -0
  155. scipy/interpolate/_fitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  156. scipy/interpolate/_fitpack2.py +9 -6
  157. scipy/interpolate/_fitpack_impl.py +32 -26
  158. scipy/interpolate/_fitpack_repro.py +23 -19
  159. scipy/interpolate/_interpnd.cpython-313t-aarch64-linux-musl.so +0 -0
  160. scipy/interpolate/_interpolate.py +30 -12
  161. scipy/interpolate/_ndbspline.py +13 -18
  162. scipy/interpolate/_ndgriddata.py +5 -8
  163. scipy/interpolate/_polyint.py +95 -31
  164. scipy/interpolate/_ppoly.cpython-313t-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rbf.py +2 -2
  166. scipy/interpolate/_rbfinterp.py +1 -1
  167. scipy/interpolate/_rbfinterp_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  168. scipy/interpolate/_rgi.py +31 -26
  169. scipy/interpolate/_rgi_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  170. scipy/interpolate/dfitpack.py +0 -20
  171. scipy/interpolate/interpnd.py +1 -2
  172. scipy/interpolate/tests/test_bary_rational.py +2 -2
  173. scipy/interpolate/tests/test_bsplines.py +97 -1
  174. scipy/interpolate/tests/test_fitpack2.py +39 -1
  175. scipy/interpolate/tests/test_interpnd.py +32 -20
  176. scipy/interpolate/tests/test_interpolate.py +48 -4
  177. scipy/interpolate/tests/test_rgi.py +2 -1
  178. scipy/io/_fast_matrix_market/__init__.py +2 -0
  179. scipy/io/_fast_matrix_market/_fmm_core.cpython-313t-aarch64-linux-musl.so +0 -0
  180. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  181. scipy/io/_harwell_boeing/hb.py +7 -11
  182. scipy/io/_idl.py +5 -7
  183. scipy/io/_netcdf.py +15 -5
  184. scipy/io/_test_fortran.cpython-313t-aarch64-linux-musl.so +0 -0
  185. scipy/io/arff/tests/test_arffread.py +3 -3
  186. scipy/io/matlab/__init__.py +5 -3
  187. scipy/io/matlab/_mio.py +4 -1
  188. scipy/io/matlab/_mio5.py +19 -13
  189. scipy/io/matlab/_mio5_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/_mio_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  191. scipy/io/matlab/_miobase.py +4 -1
  192. scipy/io/matlab/_streams.cpython-313t-aarch64-linux-musl.so +0 -0
  193. scipy/io/matlab/tests/test_mio.py +46 -18
  194. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  195. scipy/io/tests/test_mmio.py +7 -1
  196. scipy/io/tests/test_wavfile.py +41 -0
  197. scipy/io/wavfile.py +57 -10
  198. scipy/linalg/_basic.py +113 -86
  199. scipy/linalg/_cythonized_array_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  200. scipy/linalg/_decomp.py +22 -9
  201. scipy/linalg/_decomp_cholesky.py +28 -13
  202. scipy/linalg/_decomp_cossin.py +45 -30
  203. scipy/linalg/_decomp_interpolative.cpython-313t-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_ldl.py +4 -1
  205. scipy/linalg/_decomp_lu.py +18 -6
  206. scipy/linalg/_decomp_lu_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  207. scipy/linalg/_decomp_polar.py +2 -0
  208. scipy/linalg/_decomp_qr.py +6 -2
  209. scipy/linalg/_decomp_qz.py +3 -0
  210. scipy/linalg/_decomp_schur.py +3 -1
  211. scipy/linalg/_decomp_svd.py +13 -2
  212. scipy/linalg/_decomp_update.cpython-313t-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_expm_frechet.py +4 -0
  214. scipy/linalg/_fblas.cpython-313t-aarch64-linux-musl.so +0 -0
  215. scipy/linalg/_flapack.cpython-313t-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_linalg_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs.py +187 -4
  218. scipy/linalg/_matfuncs_expm.cpython-313t-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-aarch64-linux-musl.so +0 -0
  220. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  221. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_procrustes.py +2 -0
  223. scipy/linalg/_sketches.py +17 -6
  224. scipy/linalg/_solve_toeplitz.cpython-313t-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/_solvers.py +7 -2
  226. scipy/linalg/_special_matrices.py +26 -36
  227. scipy/linalg/blas.py +35 -24
  228. scipy/linalg/cython_blas.cpython-313t-aarch64-linux-musl.so +0 -0
  229. scipy/linalg/cython_lapack.cpython-313t-aarch64-linux-musl.so +0 -0
  230. scipy/linalg/lapack.py +22 -2
  231. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  232. scipy/linalg/tests/test_basic.py +31 -16
  233. scipy/linalg/tests/test_batch.py +588 -0
  234. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  235. scipy/linalg/tests/test_decomp.py +40 -3
  236. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  237. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  238. scipy/linalg/tests/test_interpolative.py +17 -0
  239. scipy/linalg/tests/test_lapack.py +115 -7
  240. scipy/linalg/tests/test_matfuncs.py +157 -102
  241. scipy/linalg/tests/test_procrustes.py +0 -7
  242. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  243. scipy/linalg/tests/test_special_matrices.py +1 -5
  244. scipy/ndimage/__init__.py +1 -0
  245. scipy/ndimage/_ctest.cpython-313t-aarch64-linux-musl.so +0 -0
  246. scipy/ndimage/_cytest.cpython-313t-aarch64-linux-musl.so +0 -0
  247. scipy/ndimage/_delegators.py +8 -2
  248. scipy/ndimage/_filters.py +453 -5
  249. scipy/ndimage/_interpolation.py +36 -6
  250. scipy/ndimage/_measurements.py +4 -2
  251. scipy/ndimage/_morphology.py +5 -0
  252. scipy/ndimage/_nd_image.cpython-313t-aarch64-linux-musl.so +0 -0
  253. scipy/ndimage/_ndimage_api.py +2 -1
  254. scipy/ndimage/_ni_docstrings.py +5 -1
  255. scipy/ndimage/_ni_label.cpython-313t-aarch64-linux-musl.so +0 -0
  256. scipy/ndimage/_ni_support.py +1 -5
  257. scipy/ndimage/_rank_filter_1d.cpython-313t-aarch64-linux-musl.so +0 -0
  258. scipy/ndimage/_support_alternative_backends.py +18 -6
  259. scipy/ndimage/tests/test_filters.py +384 -259
  260. scipy/ndimage/tests/test_fourier.py +7 -9
  261. scipy/ndimage/tests/test_interpolation.py +68 -61
  262. scipy/ndimage/tests/test_measurements.py +18 -35
  263. scipy/ndimage/tests/test_morphology.py +143 -131
  264. scipy/ndimage/tests/test_splines.py +1 -3
  265. scipy/odr/__odrpack.cpython-313t-aarch64-linux-musl.so +0 -0
  266. scipy/optimize/_basinhopping.py +13 -7
  267. scipy/optimize/_bglu_dense.cpython-313t-aarch64-linux-musl.so +0 -0
  268. scipy/optimize/_bracket.py +46 -26
  269. scipy/optimize/_chandrupatla.py +9 -10
  270. scipy/optimize/_cobyla_py.py +104 -123
  271. scipy/optimize/_constraints.py +14 -10
  272. scipy/optimize/_differentiable_functions.py +371 -230
  273. scipy/optimize/_differentialevolution.py +4 -3
  274. scipy/optimize/_direct.cpython-313t-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_dual_annealing.py +1 -1
  276. scipy/optimize/_elementwise.py +1 -4
  277. scipy/optimize/_group_columns.cpython-313t-aarch64-linux-musl.so +0 -0
  278. scipy/optimize/_highspy/_core.cpython-313t-aarch64-linux-musl.so +0 -0
  279. scipy/optimize/_highspy/_highs_options.cpython-313t-aarch64-linux-musl.so +0 -0
  280. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  281. scipy/optimize/_lbfgsb.cpython-313t-aarch64-linux-musl.so +0 -0
  282. scipy/optimize/_lbfgsb_py.py +80 -24
  283. scipy/optimize/_linprog_doc.py +2 -2
  284. scipy/optimize/_linprog_highs.py +11 -11
  285. scipy/optimize/_linprog_ip.py +25 -10
  286. scipy/optimize/_linprog_util.py +18 -19
  287. scipy/optimize/_lsap.cpython-313t-aarch64-linux-musl.so +0 -0
  288. scipy/optimize/_lsq/common.py +3 -3
  289. scipy/optimize/_lsq/dogbox.py +16 -2
  290. scipy/optimize/_lsq/givens_elimination.cpython-313t-aarch64-linux-musl.so +0 -0
  291. scipy/optimize/_lsq/least_squares.py +198 -126
  292. scipy/optimize/_lsq/lsq_linear.py +6 -6
  293. scipy/optimize/_lsq/trf.py +35 -8
  294. scipy/optimize/_milp.py +3 -1
  295. scipy/optimize/_minimize.py +105 -36
  296. scipy/optimize/_minpack.cpython-313t-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_minpack_py.py +21 -14
  298. scipy/optimize/_moduleTNC.cpython-313t-aarch64-linux-musl.so +0 -0
  299. scipy/optimize/_nnls.py +20 -21
  300. scipy/optimize/_nonlin.py +34 -3
  301. scipy/optimize/_numdiff.py +288 -110
  302. scipy/optimize/_optimize.py +86 -48
  303. scipy/optimize/_pava_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  304. scipy/optimize/_remove_redundancy.py +5 -5
  305. scipy/optimize/_root_scalar.py +1 -1
  306. scipy/optimize/_shgo.py +6 -0
  307. scipy/optimize/_shgo_lib/_complex.py +1 -1
  308. scipy/optimize/_slsqp_py.py +216 -124
  309. scipy/optimize/_slsqplib.cpython-313t-aarch64-linux-musl.so +0 -0
  310. scipy/optimize/_spectral.py +1 -1
  311. scipy/optimize/_tnc.py +8 -1
  312. scipy/optimize/_trlib/_trlib.cpython-313t-aarch64-linux-musl.so +0 -0
  313. scipy/optimize/_trustregion.py +20 -6
  314. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  315. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  316. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  317. scipy/optimize/_trustregion_constr/projections.py +12 -8
  318. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  319. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  320. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  321. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  322. scipy/optimize/_trustregion_exact.py +0 -1
  323. scipy/optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  324. scipy/optimize/_zeros_py.py +97 -17
  325. scipy/optimize/cython_optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  326. scipy/optimize/slsqp.py +0 -1
  327. scipy/optimize/tests/test__basinhopping.py +1 -1
  328. scipy/optimize/tests/test__differential_evolution.py +4 -4
  329. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  330. scipy/optimize/tests/test__numdiff.py +66 -22
  331. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  332. scipy/optimize/tests/test__shgo.py +9 -1
  333. scipy/optimize/tests/test_bracket.py +71 -46
  334. scipy/optimize/tests/test_chandrupatla.py +133 -135
  335. scipy/optimize/tests/test_cobyla.py +74 -45
  336. scipy/optimize/tests/test_constraints.py +1 -1
  337. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  338. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  339. scipy/optimize/tests/test_least_squares.py +125 -13
  340. scipy/optimize/tests/test_linear_assignment.py +3 -3
  341. scipy/optimize/tests/test_linprog.py +3 -3
  342. scipy/optimize/tests/test_lsq_linear.py +6 -6
  343. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  344. scipy/optimize/tests/test_minpack.py +4 -4
  345. scipy/optimize/tests/test_nnls.py +43 -3
  346. scipy/optimize/tests/test_nonlin.py +36 -0
  347. scipy/optimize/tests/test_optimize.py +98 -20
  348. scipy/optimize/tests/test_slsqp.py +36 -4
  349. scipy/optimize/tests/test_zeros.py +34 -1
  350. scipy/signal/__init__.py +12 -23
  351. scipy/signal/_delegators.py +568 -0
  352. scipy/signal/_filter_design.py +459 -241
  353. scipy/signal/_fir_filter_design.py +262 -90
  354. scipy/signal/_lti_conversion.py +3 -2
  355. scipy/signal/_ltisys.py +118 -91
  356. scipy/signal/_max_len_seq_inner.cpython-313t-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_peak_finding_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  358. scipy/signal/_polyutils.py +172 -0
  359. scipy/signal/_short_time_fft.py +553 -76
  360. scipy/signal/_signal_api.py +30 -0
  361. scipy/signal/_signaltools.py +719 -396
  362. scipy/signal/_sigtools.cpython-313t-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_sosfilt.cpython-313t-aarch64-linux-musl.so +0 -0
  364. scipy/signal/_spectral_py.py +230 -50
  365. scipy/signal/_spline.cpython-313t-aarch64-linux-musl.so +0 -0
  366. scipy/signal/_spline_filters.py +108 -68
  367. scipy/signal/_support_alternative_backends.py +73 -0
  368. scipy/signal/_upfirdn.py +4 -1
  369. scipy/signal/_upfirdn_apply.cpython-313t-aarch64-linux-musl.so +0 -0
  370. scipy/signal/_waveforms.py +2 -11
  371. scipy/signal/_wavelets.py +1 -1
  372. scipy/signal/fir_filter_design.py +1 -0
  373. scipy/signal/spline.py +4 -11
  374. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  375. scipy/signal/tests/test_bsplines.py +114 -79
  376. scipy/signal/tests/test_cont2discrete.py +9 -2
  377. scipy/signal/tests/test_filter_design.py +721 -481
  378. scipy/signal/tests/test_fir_filter_design.py +332 -140
  379. scipy/signal/tests/test_savitzky_golay.py +4 -3
  380. scipy/signal/tests/test_short_time_fft.py +231 -5
  381. scipy/signal/tests/test_signaltools.py +2150 -1349
  382. scipy/signal/tests/test_spectral.py +50 -6
  383. scipy/signal/tests/test_splines.py +161 -96
  384. scipy/signal/tests/test_upfirdn.py +84 -50
  385. scipy/signal/tests/test_waveforms.py +20 -0
  386. scipy/signal/tests/test_windows.py +607 -466
  387. scipy/signal/windows/_windows.py +287 -148
  388. scipy/sparse/__init__.py +23 -4
  389. scipy/sparse/_base.py +269 -120
  390. scipy/sparse/_bsr.py +7 -4
  391. scipy/sparse/_compressed.py +59 -234
  392. scipy/sparse/_construct.py +90 -38
  393. scipy/sparse/_coo.py +115 -181
  394. scipy/sparse/_csc.py +4 -4
  395. scipy/sparse/_csparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_csr.py +2 -2
  397. scipy/sparse/_data.py +48 -48
  398. scipy/sparse/_dia.py +105 -21
  399. scipy/sparse/_dok.py +0 -23
  400. scipy/sparse/_index.py +4 -4
  401. scipy/sparse/_matrix.py +23 -0
  402. scipy/sparse/_sparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  403. scipy/sparse/_sputils.py +37 -22
  404. scipy/sparse/base.py +0 -9
  405. scipy/sparse/bsr.py +0 -14
  406. scipy/sparse/compressed.py +0 -23
  407. scipy/sparse/construct.py +0 -6
  408. scipy/sparse/coo.py +0 -14
  409. scipy/sparse/csc.py +0 -3
  410. scipy/sparse/csgraph/_flow.cpython-313t-aarch64-linux-musl.so +0 -0
  411. scipy/sparse/csgraph/_matching.cpython-313t-aarch64-linux-musl.so +0 -0
  412. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-aarch64-linux-musl.so +0 -0
  413. scipy/sparse/csgraph/_reordering.cpython-313t-aarch64-linux-musl.so +0 -0
  414. scipy/sparse/csgraph/_shortest_path.cpython-313t-aarch64-linux-musl.so +0 -0
  415. scipy/sparse/csgraph/_tools.cpython-313t-aarch64-linux-musl.so +0 -0
  416. scipy/sparse/csgraph/_traversal.cpython-313t-aarch64-linux-musl.so +0 -0
  417. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  418. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  419. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  420. scipy/sparse/csr.py +0 -5
  421. scipy/sparse/data.py +1 -6
  422. scipy/sparse/dia.py +0 -7
  423. scipy/sparse/dok.py +0 -10
  424. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-aarch64-linux-musl.so +0 -0
  425. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  426. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  427. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-aarch64-linux-musl.so +0 -0
  428. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  429. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  430. scipy/sparse/linalg/_expm_multiply.py +8 -3
  431. scipy/sparse/linalg/_interface.py +29 -26
  432. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  433. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  434. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  435. scipy/sparse/linalg/_isolve/minres.py +5 -5
  436. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  437. scipy/sparse/linalg/_isolve/utils.py +2 -8
  438. scipy/sparse/linalg/_matfuncs.py +1 -1
  439. scipy/sparse/linalg/_norm.py +1 -1
  440. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  441. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  442. scipy/sparse/linalg/_propack/_spropack.cpython-313t-aarch64-linux-musl.so +0 -0
  443. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  444. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  445. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  446. scipy/sparse/linalg/tests/test_interface.py +35 -0
  447. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  448. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  449. scipy/sparse/tests/test_base.py +224 -40
  450. scipy/sparse/tests/test_common1d.py +17 -12
  451. scipy/sparse/tests/test_construct.py +1 -1
  452. scipy/sparse/tests/test_coo.py +272 -4
  453. scipy/sparse/tests/test_sparsetools.py +5 -0
  454. scipy/sparse/tests/test_sputils.py +36 -7
  455. scipy/spatial/_ckdtree.cpython-313t-aarch64-linux-musl.so +0 -0
  456. scipy/spatial/_distance_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/_distance_wrap.cpython-313t-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/_hausdorff.cpython-313t-aarch64-linux-musl.so +0 -0
  459. scipy/spatial/_qhull.cpython-313t-aarch64-linux-musl.so +0 -0
  460. scipy/spatial/_voronoi.cpython-313t-aarch64-linux-musl.so +0 -0
  461. scipy/spatial/distance.py +49 -42
  462. scipy/spatial/tests/test_distance.py +15 -1
  463. scipy/spatial/tests/test_kdtree.py +1 -0
  464. scipy/spatial/tests/test_qhull.py +106 -2
  465. scipy/spatial/transform/__init__.py +5 -3
  466. scipy/spatial/transform/_rigid_transform.cpython-313t-aarch64-linux-musl.so +0 -0
  467. scipy/spatial/transform/_rotation.cpython-313t-aarch64-linux-musl.so +0 -0
  468. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  469. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  470. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  471. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  472. scipy/special/__init__.py +1 -47
  473. scipy/special/_add_newdocs.py +34 -772
  474. scipy/special/_basic.py +22 -25
  475. scipy/special/_comb.cpython-313t-aarch64-linux-musl.so +0 -0
  476. scipy/special/_ellip_harm_2.cpython-313t-aarch64-linux-musl.so +0 -0
  477. scipy/special/_gufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  478. scipy/special/_logsumexp.py +83 -69
  479. scipy/special/_orthogonal.pyi +1 -1
  480. scipy/special/_specfun.cpython-313t-aarch64-linux-musl.so +0 -0
  481. scipy/special/_special_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  482. scipy/special/_spherical_bessel.py +4 -4
  483. scipy/special/_support_alternative_backends.py +212 -119
  484. scipy/special/_test_internal.cpython-313t-aarch64-linux-musl.so +0 -0
  485. scipy/special/_testutils.py +4 -4
  486. scipy/special/_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  487. scipy/special/_ufuncs.pyi +1 -0
  488. scipy/special/_ufuncs.pyx +215 -1400
  489. scipy/special/_ufuncs_cxx.cpython-313t-aarch64-linux-musl.so +0 -0
  490. scipy/special/_ufuncs_cxx.pxd +2 -15
  491. scipy/special/_ufuncs_cxx.pyx +5 -44
  492. scipy/special/_ufuncs_cxx_defs.h +2 -16
  493. scipy/special/_ufuncs_defs.h +0 -8
  494. scipy/special/cython_special.cpython-313t-aarch64-linux-musl.so +0 -0
  495. scipy/special/cython_special.pxd +1 -1
  496. scipy/special/tests/_cython_examples/meson.build +10 -1
  497. scipy/special/tests/test_basic.py +153 -20
  498. scipy/special/tests/test_boost_ufuncs.py +3 -0
  499. scipy/special/tests/test_cdflib.py +35 -11
  500. scipy/special/tests/test_gammainc.py +16 -0
  501. scipy/special/tests/test_hyp2f1.py +23 -2
  502. scipy/special/tests/test_log1mexp.py +85 -0
  503. scipy/special/tests/test_logsumexp.py +220 -64
  504. scipy/special/tests/test_mpmath.py +1 -0
  505. scipy/special/tests/test_nan_inputs.py +1 -1
  506. scipy/special/tests/test_orthogonal.py +17 -18
  507. scipy/special/tests/test_sf_error.py +3 -2
  508. scipy/special/tests/test_sph_harm.py +6 -7
  509. scipy/special/tests/test_support_alternative_backends.py +211 -76
  510. scipy/stats/__init__.py +4 -1
  511. scipy/stats/_ansari_swilk_statistics.cpython-313t-aarch64-linux-musl.so +0 -0
  512. scipy/stats/_axis_nan_policy.py +5 -12
  513. scipy/stats/_biasedurn.cpython-313t-aarch64-linux-musl.so +0 -0
  514. scipy/stats/_continued_fraction.py +387 -0
  515. scipy/stats/_continuous_distns.py +296 -319
  516. scipy/stats/_correlation.py +1 -1
  517. scipy/stats/_covariance.py +6 -3
  518. scipy/stats/_discrete_distns.py +39 -32
  519. scipy/stats/_distn_infrastructure.py +39 -12
  520. scipy/stats/_distribution_infrastructure.py +920 -238
  521. scipy/stats/_entropy.py +9 -10
  522. scipy/{_lib → stats}/_finite_differences.py +1 -1
  523. scipy/stats/_hypotests.py +83 -50
  524. scipy/stats/_kde.py +53 -49
  525. scipy/stats/_ksstats.py +1 -1
  526. scipy/stats/_levy_stable/__init__.py +7 -15
  527. scipy/stats/_levy_stable/levyst.cpython-313t-aarch64-linux-musl.so +0 -0
  528. scipy/stats/_morestats.py +118 -73
  529. scipy/stats/_mstats_basic.py +13 -17
  530. scipy/stats/_mstats_extras.py +8 -8
  531. scipy/stats/_multivariate.py +89 -113
  532. scipy/stats/_new_distributions.py +97 -20
  533. scipy/stats/_page_trend_test.py +12 -5
  534. scipy/stats/_probability_distribution.py +265 -43
  535. scipy/stats/_qmc.py +14 -9
  536. scipy/stats/_qmc_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  537. scipy/stats/_qmvnt.py +16 -95
  538. scipy/stats/_qmvnt_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_quantile.py +335 -0
  540. scipy/stats/_rcont/rcont.cpython-313t-aarch64-linux-musl.so +0 -0
  541. scipy/stats/_resampling.py +5 -30
  542. scipy/stats/_sampling.py +1 -1
  543. scipy/stats/_sobol.cpython-313t-aarch64-linux-musl.so +0 -0
  544. scipy/stats/_stats.cpython-313t-aarch64-linux-musl.so +0 -0
  545. scipy/stats/_stats_mstats_common.py +21 -2
  546. scipy/stats/_stats_py.py +551 -477
  547. scipy/stats/_stats_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  548. scipy/stats/_unuran/unuran_wrapper.cpython-313t-aarch64-linux-musl.so +0 -0
  549. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  550. scipy/stats/_variation.py +6 -8
  551. scipy/stats/_wilcoxon.py +13 -7
  552. scipy/stats/tests/common_tests.py +6 -4
  553. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  554. scipy/stats/tests/test_continued_fraction.py +173 -0
  555. scipy/stats/tests/test_continuous.py +379 -60
  556. scipy/stats/tests/test_continuous_basic.py +18 -12
  557. scipy/stats/tests/test_discrete_basic.py +14 -8
  558. scipy/stats/tests/test_discrete_distns.py +16 -16
  559. scipy/stats/tests/test_distributions.py +117 -75
  560. scipy/stats/tests/test_entropy.py +40 -48
  561. scipy/stats/tests/test_fit.py +4 -3
  562. scipy/stats/tests/test_hypotests.py +153 -24
  563. scipy/stats/tests/test_kdeoth.py +109 -41
  564. scipy/stats/tests/test_marray.py +289 -0
  565. scipy/stats/tests/test_morestats.py +81 -49
  566. scipy/stats/tests/test_mstats_basic.py +3 -3
  567. scipy/stats/tests/test_multivariate.py +434 -83
  568. scipy/stats/tests/test_qmc.py +13 -10
  569. scipy/stats/tests/test_quantile.py +199 -0
  570. scipy/stats/tests/test_rank.py +119 -112
  571. scipy/stats/tests/test_resampling.py +47 -56
  572. scipy/stats/tests/test_sampling.py +9 -4
  573. scipy/stats/tests/test_stats.py +799 -939
  574. scipy/stats/tests/test_variation.py +8 -6
  575. scipy/version.py +2 -2
  576. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
  577. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
  578. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +1316 -1323
  579. scipy.libs/libgcc_s-2d945d6c.so.1 +0 -0
  580. scipy.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  581. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  582. scipy/_lib/array_api_extra/_funcs.py +0 -484
  583. scipy/_lib/array_api_extra/_typing.py +0 -8
  584. scipy/interpolate/_bspl.cpython-313t-aarch64-linux-musl.so +0 -0
  585. scipy/optimize/_cobyla.cpython-313t-aarch64-linux-musl.so +0 -0
  586. scipy/optimize/_cython_nnls.cpython-313t-aarch64-linux-musl.so +0 -0
  587. scipy/optimize/_slsqp.cpython-313t-aarch64-linux-musl.so +0 -0
  588. scipy/spatial/qhull_src/COPYING.txt +0 -38
  589. scipy/special/libsf_error_state.so +0 -0
  590. scipy/special/tests/test_log_softmax.py +0 -109
  591. scipy/special/tests/test_xsf_cuda.py +0 -114
  592. scipy/special/xsf/binom.h +0 -89
  593. scipy/special/xsf/cdflib.h +0 -100
  594. scipy/special/xsf/cephes/airy.h +0 -307
  595. scipy/special/xsf/cephes/besselpoly.h +0 -51
  596. scipy/special/xsf/cephes/beta.h +0 -257
  597. scipy/special/xsf/cephes/cbrt.h +0 -131
  598. scipy/special/xsf/cephes/chbevl.h +0 -85
  599. scipy/special/xsf/cephes/chdtr.h +0 -193
  600. scipy/special/xsf/cephes/const.h +0 -87
  601. scipy/special/xsf/cephes/ellie.h +0 -293
  602. scipy/special/xsf/cephes/ellik.h +0 -251
  603. scipy/special/xsf/cephes/ellpe.h +0 -107
  604. scipy/special/xsf/cephes/ellpk.h +0 -117
  605. scipy/special/xsf/cephes/expn.h +0 -260
  606. scipy/special/xsf/cephes/gamma.h +0 -398
  607. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  608. scipy/special/xsf/cephes/hyperg.h +0 -361
  609. scipy/special/xsf/cephes/i0.h +0 -149
  610. scipy/special/xsf/cephes/i1.h +0 -158
  611. scipy/special/xsf/cephes/igam.h +0 -421
  612. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  613. scipy/special/xsf/cephes/igami.h +0 -313
  614. scipy/special/xsf/cephes/j0.h +0 -225
  615. scipy/special/xsf/cephes/j1.h +0 -198
  616. scipy/special/xsf/cephes/jv.h +0 -715
  617. scipy/special/xsf/cephes/k0.h +0 -164
  618. scipy/special/xsf/cephes/k1.h +0 -163
  619. scipy/special/xsf/cephes/kn.h +0 -243
  620. scipy/special/xsf/cephes/lanczos.h +0 -112
  621. scipy/special/xsf/cephes/ndtr.h +0 -275
  622. scipy/special/xsf/cephes/poch.h +0 -85
  623. scipy/special/xsf/cephes/polevl.h +0 -167
  624. scipy/special/xsf/cephes/psi.h +0 -194
  625. scipy/special/xsf/cephes/rgamma.h +0 -111
  626. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  627. scipy/special/xsf/cephes/shichi.h +0 -248
  628. scipy/special/xsf/cephes/sici.h +0 -224
  629. scipy/special/xsf/cephes/sindg.h +0 -221
  630. scipy/special/xsf/cephes/tandg.h +0 -139
  631. scipy/special/xsf/cephes/trig.h +0 -58
  632. scipy/special/xsf/cephes/unity.h +0 -186
  633. scipy/special/xsf/cephes/zeta.h +0 -172
  634. scipy/special/xsf/config.h +0 -304
  635. scipy/special/xsf/digamma.h +0 -205
  636. scipy/special/xsf/error.h +0 -57
  637. scipy/special/xsf/evalpoly.h +0 -47
  638. scipy/special/xsf/expint.h +0 -266
  639. scipy/special/xsf/hyp2f1.h +0 -694
  640. scipy/special/xsf/iv_ratio.h +0 -173
  641. scipy/special/xsf/lambertw.h +0 -150
  642. scipy/special/xsf/loggamma.h +0 -163
  643. scipy/special/xsf/sici.h +0 -200
  644. scipy/special/xsf/tools.h +0 -427
  645. scipy/special/xsf/trig.h +0 -164
  646. scipy/special/xsf/wright_bessel.h +0 -843
  647. scipy/special/xsf/zlog1.h +0 -35
  648. scipy/stats/_mvn.cpython-313t-aarch64-linux-musl.so +0 -0
  649. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  650. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  651. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/WHEEL +0 -0
@@ -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