scipy 1.15.2__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0__cp313-cp313t-macosx_14_0_arm64.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 (642) hide show
  1. scipy/.dylibs/libgcc_s.1.1.dylib +0 -0
  2. scipy/.dylibs/libgfortran.5.dylib +0 -0
  3. scipy/.dylibs/libquadmath.0.dylib +0 -0
  4. scipy/__config__.py +5 -5
  5. scipy/__init__.py +3 -6
  6. scipy/_cyutility.cpython-313t-darwin.so +0 -0
  7. scipy/_lib/_array_api.py +497 -161
  8. scipy/_lib/_array_api_compat_vendor.py +9 -0
  9. scipy/_lib/_bunch.py +4 -0
  10. scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
  11. scipy/_lib/_docscrape.py +1 -1
  12. scipy/_lib/_elementwise_iterative_method.py +15 -26
  13. scipy/_lib/_sparse.py +41 -0
  14. scipy/_lib/_test_ccallback.cpython-313t-darwin.so +0 -0
  15. scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
  16. scipy/_lib/_test_deprecation_def.cpython-313t-darwin.so +0 -0
  17. scipy/_lib/_testutils.py +6 -2
  18. scipy/_lib/_util.py +222 -125
  19. scipy/_lib/array_api_compat/__init__.py +4 -4
  20. scipy/_lib/array_api_compat/_internal.py +19 -6
  21. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  22. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  23. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  24. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  25. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  26. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  27. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  28. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  29. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  30. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  31. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  32. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  33. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  34. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  35. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  36. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  37. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  38. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  39. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  40. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  41. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  42. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  43. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  44. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  45. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  46. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  47. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  48. scipy/_lib/array_api_extra/__init__.py +26 -3
  49. scipy/_lib/array_api_extra/_delegation.py +171 -0
  50. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  51. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  52. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  53. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  54. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  55. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  61. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  62. scipy/_lib/array_api_extra/testing.py +359 -0
  63. scipy/_lib/decorator.py +2 -2
  64. scipy/_lib/doccer.py +1 -7
  65. scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
  66. scipy/_lib/pyprima/__init__.py +212 -0
  67. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  68. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  69. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  70. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  71. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  72. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  73. scipy/_lib/pyprima/cobyla/update.py +289 -0
  74. scipy/_lib/pyprima/common/__init__.py +0 -0
  75. scipy/_lib/pyprima/common/_bounds.py +34 -0
  76. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  77. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  78. scipy/_lib/pyprima/common/_project.py +173 -0
  79. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  80. scipy/_lib/pyprima/common/consts.py +47 -0
  81. scipy/_lib/pyprima/common/evaluate.py +99 -0
  82. scipy/_lib/pyprima/common/history.py +38 -0
  83. scipy/_lib/pyprima/common/infos.py +30 -0
  84. scipy/_lib/pyprima/common/linalg.py +435 -0
  85. scipy/_lib/pyprima/common/message.py +290 -0
  86. scipy/_lib/pyprima/common/powalg.py +131 -0
  87. scipy/_lib/pyprima/common/preproc.py +277 -0
  88. scipy/_lib/pyprima/common/present.py +5 -0
  89. scipy/_lib/pyprima/common/ratio.py +54 -0
  90. scipy/_lib/pyprima/common/redrho.py +47 -0
  91. scipy/_lib/pyprima/common/selectx.py +296 -0
  92. scipy/_lib/tests/test__util.py +105 -121
  93. scipy/_lib/tests/test_array_api.py +169 -34
  94. scipy/_lib/tests/test_bunch.py +7 -0
  95. scipy/_lib/tests/test_ccallback.py +2 -10
  96. scipy/_lib/tests/test_public_api.py +13 -0
  97. scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
  98. scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
  99. scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
  100. scipy/cluster/hierarchy.py +393 -223
  101. scipy/cluster/tests/test_hierarchy.py +273 -335
  102. scipy/cluster/tests/test_vq.py +45 -61
  103. scipy/cluster/vq.py +39 -35
  104. scipy/conftest.py +282 -151
  105. scipy/constants/_constants.py +4 -1
  106. scipy/constants/tests/test_codata.py +2 -2
  107. scipy/constants/tests/test_constants.py +11 -18
  108. scipy/datasets/_download_all.py +15 -1
  109. scipy/datasets/_fetchers.py +7 -1
  110. scipy/datasets/_utils.py +1 -1
  111. scipy/differentiate/_differentiate.py +25 -25
  112. scipy/differentiate/tests/test_differentiate.py +24 -25
  113. scipy/fft/_basic.py +20 -0
  114. scipy/fft/_helper.py +3 -34
  115. scipy/fft/_pocketfft/helper.py +29 -1
  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-darwin.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-darwin.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-darwin.so +0 -0
  133. scipy/integrate/_ode.py +9 -2
  134. scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
  135. scipy/integrate/_quad_vec.py +21 -29
  136. scipy/integrate/_quadpack.cpython-313t-darwin.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_odeint_banded.cpython-313t-darwin.so +0 -0
  142. scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
  143. scipy/integrate/tests/test__quad_vec.py +0 -6
  144. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  145. scipy/integrate/tests/test_cubature.py +21 -35
  146. scipy/integrate/tests/test_quadrature.py +6 -8
  147. scipy/integrate/tests/test_tanhsinh.py +61 -43
  148. scipy/interpolate/__init__.py +70 -58
  149. scipy/interpolate/_bary_rational.py +22 -22
  150. scipy/interpolate/_bsplines.py +119 -66
  151. scipy/interpolate/_cubic.py +65 -50
  152. scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
  153. scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
  154. scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
  155. scipy/interpolate/_fitpack2.py +9 -6
  156. scipy/interpolate/_fitpack_impl.py +32 -26
  157. scipy/interpolate/_fitpack_repro.py +23 -19
  158. scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
  159. scipy/interpolate/_interpolate.py +30 -12
  160. scipy/interpolate/_ndbspline.py +13 -18
  161. scipy/interpolate/_ndgriddata.py +5 -8
  162. scipy/interpolate/_polyint.py +95 -31
  163. scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
  164. scipy/interpolate/_rbf.py +2 -2
  165. scipy/interpolate/_rbfinterp.py +1 -1
  166. scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
  167. scipy/interpolate/_rgi.py +31 -26
  168. scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
  169. scipy/interpolate/dfitpack.py +0 -20
  170. scipy/interpolate/interpnd.py +1 -2
  171. scipy/interpolate/tests/test_bary_rational.py +2 -2
  172. scipy/interpolate/tests/test_bsplines.py +97 -1
  173. scipy/interpolate/tests/test_fitpack2.py +39 -1
  174. scipy/interpolate/tests/test_interpnd.py +32 -20
  175. scipy/interpolate/tests/test_interpolate.py +48 -4
  176. scipy/interpolate/tests/test_rgi.py +2 -1
  177. scipy/io/_fast_matrix_market/__init__.py +2 -0
  178. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  179. scipy/io/_harwell_boeing/hb.py +7 -11
  180. scipy/io/_idl.py +5 -7
  181. scipy/io/_netcdf.py +15 -5
  182. scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
  183. scipy/io/arff/tests/test_arffread.py +3 -3
  184. scipy/io/matlab/__init__.py +5 -3
  185. scipy/io/matlab/_mio.py +4 -1
  186. scipy/io/matlab/_mio5.py +19 -13
  187. scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
  188. scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
  189. scipy/io/matlab/_miobase.py +4 -1
  190. scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
  191. scipy/io/matlab/tests/test_mio.py +46 -18
  192. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  193. scipy/io/tests/test_mmio.py +7 -1
  194. scipy/io/tests/test_wavfile.py +41 -0
  195. scipy/io/wavfile.py +57 -10
  196. scipy/linalg/_basic.py +113 -86
  197. scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
  198. scipy/linalg/_decomp.py +22 -9
  199. scipy/linalg/_decomp_cholesky.py +28 -13
  200. scipy/linalg/_decomp_cossin.py +45 -30
  201. scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
  202. scipy/linalg/_decomp_ldl.py +4 -1
  203. scipy/linalg/_decomp_lu.py +18 -6
  204. scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
  205. scipy/linalg/_decomp_polar.py +2 -0
  206. scipy/linalg/_decomp_qr.py +6 -2
  207. scipy/linalg/_decomp_qz.py +3 -0
  208. scipy/linalg/_decomp_schur.py +3 -1
  209. scipy/linalg/_decomp_svd.py +13 -2
  210. scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
  211. scipy/linalg/_expm_frechet.py +4 -0
  212. scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
  213. scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
  214. scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
  215. scipy/linalg/_matfuncs.py +187 -4
  216. scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
  217. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
  218. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  219. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
  220. scipy/linalg/_procrustes.py +2 -0
  221. scipy/linalg/_sketches.py +17 -6
  222. scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
  223. scipy/linalg/_solvers.py +7 -2
  224. scipy/linalg/_special_matrices.py +26 -36
  225. scipy/linalg/blas.py +35 -24
  226. scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
  227. scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
  228. scipy/linalg/lapack.py +22 -2
  229. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  230. scipy/linalg/tests/test_basic.py +31 -16
  231. scipy/linalg/tests/test_batch.py +588 -0
  232. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  233. scipy/linalg/tests/test_decomp.py +40 -3
  234. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  235. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  236. scipy/linalg/tests/test_interpolative.py +17 -0
  237. scipy/linalg/tests/test_lapack.py +115 -7
  238. scipy/linalg/tests/test_matfuncs.py +157 -102
  239. scipy/linalg/tests/test_procrustes.py +0 -7
  240. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  241. scipy/linalg/tests/test_special_matrices.py +1 -5
  242. scipy/ndimage/__init__.py +1 -0
  243. scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
  244. scipy/ndimage/_delegators.py +8 -2
  245. scipy/ndimage/_filters.py +453 -5
  246. scipy/ndimage/_interpolation.py +36 -6
  247. scipy/ndimage/_measurements.py +4 -2
  248. scipy/ndimage/_morphology.py +5 -0
  249. scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
  250. scipy/ndimage/_ndimage_api.py +2 -1
  251. scipy/ndimage/_ni_docstrings.py +5 -1
  252. scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
  253. scipy/ndimage/_ni_support.py +1 -5
  254. scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
  255. scipy/ndimage/_support_alternative_backends.py +18 -6
  256. scipy/ndimage/tests/test_filters.py +384 -259
  257. scipy/ndimage/tests/test_fourier.py +7 -9
  258. scipy/ndimage/tests/test_interpolation.py +68 -61
  259. scipy/ndimage/tests/test_measurements.py +18 -35
  260. scipy/ndimage/tests/test_morphology.py +143 -131
  261. scipy/ndimage/tests/test_splines.py +1 -3
  262. scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
  263. scipy/optimize/_basinhopping.py +13 -7
  264. scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
  265. scipy/optimize/_bracket.py +46 -26
  266. scipy/optimize/_chandrupatla.py +9 -10
  267. scipy/optimize/_cobyla_py.py +104 -123
  268. scipy/optimize/_constraints.py +14 -10
  269. scipy/optimize/_differentiable_functions.py +371 -230
  270. scipy/optimize/_differentialevolution.py +4 -3
  271. scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
  272. scipy/optimize/_dual_annealing.py +1 -1
  273. scipy/optimize/_elementwise.py +1 -4
  274. scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
  275. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  276. scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
  277. scipy/optimize/_lbfgsb_py.py +80 -24
  278. scipy/optimize/_linprog_doc.py +2 -2
  279. scipy/optimize/_linprog_highs.py +11 -11
  280. scipy/optimize/_linprog_ip.py +25 -10
  281. scipy/optimize/_linprog_util.py +18 -19
  282. scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
  283. scipy/optimize/_lsq/common.py +3 -3
  284. scipy/optimize/_lsq/dogbox.py +16 -2
  285. scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
  286. scipy/optimize/_lsq/least_squares.py +198 -126
  287. scipy/optimize/_lsq/lsq_linear.py +6 -6
  288. scipy/optimize/_lsq/trf.py +35 -8
  289. scipy/optimize/_milp.py +3 -1
  290. scipy/optimize/_minimize.py +105 -36
  291. scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
  292. scipy/optimize/_minpack_py.py +21 -14
  293. scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
  294. scipy/optimize/_nnls.py +20 -21
  295. scipy/optimize/_nonlin.py +34 -3
  296. scipy/optimize/_numdiff.py +288 -110
  297. scipy/optimize/_optimize.py +86 -48
  298. scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
  299. scipy/optimize/_remove_redundancy.py +5 -5
  300. scipy/optimize/_root_scalar.py +1 -1
  301. scipy/optimize/_shgo.py +6 -0
  302. scipy/optimize/_shgo_lib/_complex.py +1 -1
  303. scipy/optimize/_slsqp_py.py +216 -124
  304. scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
  305. scipy/optimize/_spectral.py +1 -1
  306. scipy/optimize/_tnc.py +8 -1
  307. scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
  308. scipy/optimize/_trustregion.py +20 -6
  309. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  310. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  311. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  312. scipy/optimize/_trustregion_constr/projections.py +12 -8
  313. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  314. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  315. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  316. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  317. scipy/optimize/_trustregion_exact.py +0 -1
  318. scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
  319. scipy/optimize/_zeros_py.py +97 -17
  320. scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
  321. scipy/optimize/slsqp.py +0 -1
  322. scipy/optimize/tests/test__basinhopping.py +1 -1
  323. scipy/optimize/tests/test__differential_evolution.py +4 -4
  324. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  325. scipy/optimize/tests/test__numdiff.py +66 -22
  326. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  327. scipy/optimize/tests/test__shgo.py +9 -1
  328. scipy/optimize/tests/test_bracket.py +71 -46
  329. scipy/optimize/tests/test_chandrupatla.py +133 -135
  330. scipy/optimize/tests/test_cobyla.py +74 -45
  331. scipy/optimize/tests/test_constraints.py +1 -1
  332. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  333. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  334. scipy/optimize/tests/test_least_squares.py +125 -13
  335. scipy/optimize/tests/test_linear_assignment.py +3 -3
  336. scipy/optimize/tests/test_linprog.py +3 -3
  337. scipy/optimize/tests/test_lsq_linear.py +6 -6
  338. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  339. scipy/optimize/tests/test_minpack.py +4 -4
  340. scipy/optimize/tests/test_nnls.py +43 -3
  341. scipy/optimize/tests/test_nonlin.py +36 -0
  342. scipy/optimize/tests/test_optimize.py +98 -20
  343. scipy/optimize/tests/test_slsqp.py +36 -4
  344. scipy/optimize/tests/test_zeros.py +34 -1
  345. scipy/signal/__init__.py +12 -23
  346. scipy/signal/_delegators.py +568 -0
  347. scipy/signal/_filter_design.py +459 -241
  348. scipy/signal/_fir_filter_design.py +262 -90
  349. scipy/signal/_lti_conversion.py +3 -2
  350. scipy/signal/_ltisys.py +118 -91
  351. scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
  352. scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
  353. scipy/signal/_polyutils.py +172 -0
  354. scipy/signal/_short_time_fft.py +553 -76
  355. scipy/signal/_signal_api.py +30 -0
  356. scipy/signal/_signaltools.py +719 -396
  357. scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
  358. scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
  359. scipy/signal/_spectral_py.py +230 -50
  360. scipy/signal/_spline.cpython-313t-darwin.so +0 -0
  361. scipy/signal/_spline_filters.py +108 -68
  362. scipy/signal/_support_alternative_backends.py +73 -0
  363. scipy/signal/_upfirdn.py +4 -1
  364. scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
  365. scipy/signal/_waveforms.py +2 -11
  366. scipy/signal/_wavelets.py +1 -1
  367. scipy/signal/fir_filter_design.py +1 -0
  368. scipy/signal/spline.py +4 -11
  369. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  370. scipy/signal/tests/test_bsplines.py +114 -79
  371. scipy/signal/tests/test_cont2discrete.py +9 -2
  372. scipy/signal/tests/test_filter_design.py +721 -481
  373. scipy/signal/tests/test_fir_filter_design.py +332 -140
  374. scipy/signal/tests/test_savitzky_golay.py +4 -3
  375. scipy/signal/tests/test_short_time_fft.py +231 -5
  376. scipy/signal/tests/test_signaltools.py +2150 -1349
  377. scipy/signal/tests/test_spectral.py +50 -6
  378. scipy/signal/tests/test_splines.py +161 -96
  379. scipy/signal/tests/test_upfirdn.py +84 -50
  380. scipy/signal/tests/test_waveforms.py +20 -0
  381. scipy/signal/tests/test_windows.py +607 -466
  382. scipy/signal/windows/_windows.py +287 -148
  383. scipy/sparse/__init__.py +23 -4
  384. scipy/sparse/_base.py +269 -120
  385. scipy/sparse/_bsr.py +7 -4
  386. scipy/sparse/_compressed.py +59 -234
  387. scipy/sparse/_construct.py +90 -38
  388. scipy/sparse/_coo.py +115 -181
  389. scipy/sparse/_csc.py +4 -4
  390. scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
  391. scipy/sparse/_csr.py +2 -2
  392. scipy/sparse/_data.py +48 -48
  393. scipy/sparse/_dia.py +105 -21
  394. scipy/sparse/_dok.py +0 -23
  395. scipy/sparse/_index.py +4 -4
  396. scipy/sparse/_matrix.py +23 -0
  397. scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
  398. scipy/sparse/_sputils.py +37 -22
  399. scipy/sparse/base.py +0 -9
  400. scipy/sparse/bsr.py +0 -14
  401. scipy/sparse/compressed.py +0 -23
  402. scipy/sparse/construct.py +0 -6
  403. scipy/sparse/coo.py +0 -14
  404. scipy/sparse/csc.py +0 -3
  405. scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
  406. scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
  407. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
  408. scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
  409. scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
  410. scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
  411. scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
  412. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  413. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  414. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  415. scipy/sparse/csr.py +0 -5
  416. scipy/sparse/data.py +1 -6
  417. scipy/sparse/dia.py +0 -7
  418. scipy/sparse/dok.py +0 -10
  419. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
  420. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  421. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  422. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
  423. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  424. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  425. scipy/sparse/linalg/_expm_multiply.py +8 -3
  426. scipy/sparse/linalg/_interface.py +29 -26
  427. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  428. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  429. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  430. scipy/sparse/linalg/_isolve/minres.py +5 -5
  431. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  432. scipy/sparse/linalg/_isolve/utils.py +2 -8
  433. scipy/sparse/linalg/_matfuncs.py +1 -1
  434. scipy/sparse/linalg/_norm.py +1 -1
  435. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
  436. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
  437. scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
  438. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
  439. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  440. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  441. scipy/sparse/linalg/tests/test_interface.py +35 -0
  442. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  443. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  444. scipy/sparse/tests/test_base.py +224 -40
  445. scipy/sparse/tests/test_common1d.py +17 -12
  446. scipy/sparse/tests/test_construct.py +1 -1
  447. scipy/sparse/tests/test_coo.py +272 -4
  448. scipy/sparse/tests/test_sparsetools.py +5 -0
  449. scipy/sparse/tests/test_sputils.py +36 -7
  450. scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
  451. scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
  452. scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
  453. scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
  454. scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
  455. scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
  456. scipy/spatial/distance.py +49 -42
  457. scipy/spatial/tests/test_distance.py +15 -1
  458. scipy/spatial/tests/test_kdtree.py +1 -0
  459. scipy/spatial/tests/test_qhull.py +106 -2
  460. scipy/spatial/transform/__init__.py +5 -3
  461. scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
  462. scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
  463. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  464. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  465. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  466. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  467. scipy/special/__init__.py +1 -47
  468. scipy/special/_add_newdocs.py +34 -772
  469. scipy/special/_basic.py +22 -25
  470. scipy/special/_comb.cpython-313t-darwin.so +0 -0
  471. scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
  472. scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
  473. scipy/special/_logsumexp.py +83 -69
  474. scipy/special/_orthogonal.pyi +1 -1
  475. scipy/special/_specfun.cpython-313t-darwin.so +0 -0
  476. scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
  477. scipy/special/_spherical_bessel.py +4 -4
  478. scipy/special/_support_alternative_backends.py +212 -119
  479. scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
  480. scipy/special/_testutils.py +4 -4
  481. scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
  482. scipy/special/_ufuncs.pyi +1 -0
  483. scipy/special/_ufuncs.pyx +215 -1400
  484. scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
  485. scipy/special/_ufuncs_cxx.pxd +2 -15
  486. scipy/special/_ufuncs_cxx.pyx +5 -44
  487. scipy/special/_ufuncs_cxx_defs.h +2 -16
  488. scipy/special/_ufuncs_defs.h +0 -8
  489. scipy/special/cython_special.cpython-313t-darwin.so +0 -0
  490. scipy/special/cython_special.pxd +1 -1
  491. scipy/special/tests/_cython_examples/meson.build +10 -1
  492. scipy/special/tests/test_basic.py +153 -20
  493. scipy/special/tests/test_boost_ufuncs.py +3 -0
  494. scipy/special/tests/test_cdflib.py +35 -11
  495. scipy/special/tests/test_gammainc.py +16 -0
  496. scipy/special/tests/test_hyp2f1.py +23 -2
  497. scipy/special/tests/test_log1mexp.py +85 -0
  498. scipy/special/tests/test_logsumexp.py +220 -64
  499. scipy/special/tests/test_mpmath.py +1 -0
  500. scipy/special/tests/test_nan_inputs.py +1 -1
  501. scipy/special/tests/test_orthogonal.py +17 -18
  502. scipy/special/tests/test_sf_error.py +3 -2
  503. scipy/special/tests/test_sph_harm.py +6 -7
  504. scipy/special/tests/test_support_alternative_backends.py +211 -76
  505. scipy/stats/__init__.py +4 -1
  506. scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
  507. scipy/stats/_axis_nan_policy.py +5 -12
  508. scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
  509. scipy/stats/_continued_fraction.py +387 -0
  510. scipy/stats/_continuous_distns.py +296 -319
  511. scipy/stats/_correlation.py +1 -1
  512. scipy/stats/_covariance.py +6 -3
  513. scipy/stats/_discrete_distns.py +39 -32
  514. scipy/stats/_distn_infrastructure.py +39 -12
  515. scipy/stats/_distribution_infrastructure.py +920 -238
  516. scipy/stats/_entropy.py +9 -10
  517. scipy/{_lib → stats}/_finite_differences.py +1 -1
  518. scipy/stats/_hypotests.py +83 -50
  519. scipy/stats/_kde.py +53 -49
  520. scipy/stats/_ksstats.py +1 -1
  521. scipy/stats/_levy_stable/__init__.py +7 -15
  522. scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
  523. scipy/stats/_morestats.py +118 -73
  524. scipy/stats/_mstats_basic.py +13 -17
  525. scipy/stats/_mstats_extras.py +8 -8
  526. scipy/stats/_multivariate.py +89 -113
  527. scipy/stats/_new_distributions.py +97 -20
  528. scipy/stats/_page_trend_test.py +12 -5
  529. scipy/stats/_probability_distribution.py +265 -43
  530. scipy/stats/_qmc.py +14 -9
  531. scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
  532. scipy/stats/_qmvnt.py +16 -95
  533. scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
  534. scipy/stats/_quantile.py +335 -0
  535. scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
  536. scipy/stats/_resampling.py +5 -30
  537. scipy/stats/_sampling.py +1 -1
  538. scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
  539. scipy/stats/_stats.cpython-313t-darwin.so +0 -0
  540. scipy/stats/_stats_mstats_common.py +21 -2
  541. scipy/stats/_stats_py.py +551 -477
  542. scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
  543. scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
  544. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  545. scipy/stats/_variation.py +6 -8
  546. scipy/stats/_wilcoxon.py +13 -7
  547. scipy/stats/tests/common_tests.py +6 -4
  548. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  549. scipy/stats/tests/test_continued_fraction.py +173 -0
  550. scipy/stats/tests/test_continuous.py +379 -60
  551. scipy/stats/tests/test_continuous_basic.py +18 -12
  552. scipy/stats/tests/test_discrete_basic.py +14 -8
  553. scipy/stats/tests/test_discrete_distns.py +16 -16
  554. scipy/stats/tests/test_distributions.py +117 -75
  555. scipy/stats/tests/test_entropy.py +40 -48
  556. scipy/stats/tests/test_fit.py +4 -3
  557. scipy/stats/tests/test_hypotests.py +153 -24
  558. scipy/stats/tests/test_kdeoth.py +109 -41
  559. scipy/stats/tests/test_marray.py +289 -0
  560. scipy/stats/tests/test_morestats.py +81 -49
  561. scipy/stats/tests/test_mstats_basic.py +3 -3
  562. scipy/stats/tests/test_multivariate.py +434 -83
  563. scipy/stats/tests/test_qmc.py +13 -10
  564. scipy/stats/tests/test_quantile.py +199 -0
  565. scipy/stats/tests/test_rank.py +119 -112
  566. scipy/stats/tests/test_resampling.py +47 -56
  567. scipy/stats/tests/test_sampling.py +9 -4
  568. scipy/stats/tests/test_stats.py +799 -939
  569. scipy/stats/tests/test_variation.py +8 -6
  570. scipy/version.py +2 -2
  571. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
  572. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
  573. {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +574 -581
  574. scipy-1.16.0.dist-info/WHEEL +6 -0
  575. scipy/_lib/array_api_extra/_funcs.py +0 -484
  576. scipy/_lib/array_api_extra/_typing.py +0 -8
  577. scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
  578. scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
  579. scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
  580. scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
  581. scipy/spatial/qhull_src/COPYING.txt +0 -38
  582. scipy/special/libsf_error_state.dylib +0 -0
  583. scipy/special/tests/test_log_softmax.py +0 -109
  584. scipy/special/tests/test_xsf_cuda.py +0 -114
  585. scipy/special/xsf/binom.h +0 -89
  586. scipy/special/xsf/cdflib.h +0 -100
  587. scipy/special/xsf/cephes/airy.h +0 -307
  588. scipy/special/xsf/cephes/besselpoly.h +0 -51
  589. scipy/special/xsf/cephes/beta.h +0 -257
  590. scipy/special/xsf/cephes/cbrt.h +0 -131
  591. scipy/special/xsf/cephes/chbevl.h +0 -85
  592. scipy/special/xsf/cephes/chdtr.h +0 -193
  593. scipy/special/xsf/cephes/const.h +0 -87
  594. scipy/special/xsf/cephes/ellie.h +0 -293
  595. scipy/special/xsf/cephes/ellik.h +0 -251
  596. scipy/special/xsf/cephes/ellpe.h +0 -107
  597. scipy/special/xsf/cephes/ellpk.h +0 -117
  598. scipy/special/xsf/cephes/expn.h +0 -260
  599. scipy/special/xsf/cephes/gamma.h +0 -398
  600. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  601. scipy/special/xsf/cephes/hyperg.h +0 -361
  602. scipy/special/xsf/cephes/i0.h +0 -149
  603. scipy/special/xsf/cephes/i1.h +0 -158
  604. scipy/special/xsf/cephes/igam.h +0 -421
  605. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  606. scipy/special/xsf/cephes/igami.h +0 -313
  607. scipy/special/xsf/cephes/j0.h +0 -225
  608. scipy/special/xsf/cephes/j1.h +0 -198
  609. scipy/special/xsf/cephes/jv.h +0 -715
  610. scipy/special/xsf/cephes/k0.h +0 -164
  611. scipy/special/xsf/cephes/k1.h +0 -163
  612. scipy/special/xsf/cephes/kn.h +0 -243
  613. scipy/special/xsf/cephes/lanczos.h +0 -112
  614. scipy/special/xsf/cephes/ndtr.h +0 -275
  615. scipy/special/xsf/cephes/poch.h +0 -85
  616. scipy/special/xsf/cephes/polevl.h +0 -167
  617. scipy/special/xsf/cephes/psi.h +0 -194
  618. scipy/special/xsf/cephes/rgamma.h +0 -111
  619. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  620. scipy/special/xsf/cephes/shichi.h +0 -248
  621. scipy/special/xsf/cephes/sici.h +0 -224
  622. scipy/special/xsf/cephes/sindg.h +0 -221
  623. scipy/special/xsf/cephes/tandg.h +0 -139
  624. scipy/special/xsf/cephes/trig.h +0 -58
  625. scipy/special/xsf/cephes/unity.h +0 -186
  626. scipy/special/xsf/cephes/zeta.h +0 -172
  627. scipy/special/xsf/config.h +0 -304
  628. scipy/special/xsf/digamma.h +0 -205
  629. scipy/special/xsf/error.h +0 -57
  630. scipy/special/xsf/evalpoly.h +0 -47
  631. scipy/special/xsf/expint.h +0 -266
  632. scipy/special/xsf/hyp2f1.h +0 -694
  633. scipy/special/xsf/iv_ratio.h +0 -173
  634. scipy/special/xsf/lambertw.h +0 -150
  635. scipy/special/xsf/loggamma.h +0 -163
  636. scipy/special/xsf/sici.h +0 -200
  637. scipy/special/xsf/tools.h +0 -427
  638. scipy/special/xsf/trig.h +0 -164
  639. scipy/special/xsf/wright_bessel.h +0 -843
  640. scipy/special/xsf/zlog1.h +0 -35
  641. scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
  642. scipy-1.15.2.dist-info/WHEEL +0 -4
@@ -22,7 +22,8 @@ def _get_atol_rtol(name, b_norm, atol=0., rtol=1e-5):
22
22
 
23
23
 
24
24
  def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
25
- """Use BIConjugate Gradient iteration to solve ``Ax = b``.
25
+ """
26
+ Solve ``Ax = b`` with the BIConjugate Gradient method.
26
27
 
27
28
  Parameters
28
29
  ----------
@@ -86,13 +87,13 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
86
87
  >>> np.allclose(A.dot(x), b)
87
88
  True
88
89
  """
89
- A, M, x, b, postprocess = make_system(A, M, x0, b)
90
+ A, M, x, b = make_system(A, M, x0, b)
90
91
  bnrm2 = np.linalg.norm(b)
91
92
 
92
93
  atol, _ = _get_atol_rtol('bicg', bnrm2, atol, rtol)
93
94
 
94
95
  if bnrm2 == 0:
95
- return postprocess(b), 0
96
+ return b, 0
96
97
 
97
98
  n = len(b)
98
99
  dotprod = np.vdot if np.iscomplexobj(x) else np.dot
@@ -113,7 +114,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
113
114
 
114
115
  for iteration in range(maxiter):
115
116
  if np.linalg.norm(r) < atol: # Are we done?
116
- return postprocess(x), 0
117
+ return x, 0
117
118
 
118
119
  z = psolve(r)
119
120
  ztilde = rpsolve(rtilde)
@@ -121,7 +122,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
121
122
  rho_cur = dotprod(rtilde, z)
122
123
 
123
124
  if np.abs(rho_cur) < rhotol: # Breakdown case
124
- return postprocess, -10
125
+ return x, -10
125
126
 
126
127
  if iteration > 0:
127
128
  beta = rho_cur / rho_prev
@@ -138,7 +139,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
138
139
  rv = dotprod(ptilde, q)
139
140
 
140
141
  if rv == 0:
141
- return postprocess(x), -11
142
+ return x, -11
142
143
 
143
144
  alpha = rho_cur / rv
144
145
  x += alpha*p
@@ -151,12 +152,13 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
151
152
 
152
153
  else: # for loop exhausted
153
154
  # Return incomplete progress
154
- return postprocess(x), maxiter
155
+ return x, maxiter
155
156
 
156
157
 
157
158
  def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
158
159
  callback=None):
159
- """Use BIConjugate Gradient STABilized iteration to solve ``Ax = b``.
160
+ """
161
+ Solve ``Ax = b`` with the BIConjugate Gradient STABilized method.
160
162
 
161
163
  Parameters
162
164
  ----------
@@ -224,13 +226,13 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
224
226
  >>> np.allclose(A.dot(x), b)
225
227
  True
226
228
  """
227
- A, M, x, b, postprocess = make_system(A, M, x0, b)
229
+ A, M, x, b = make_system(A, M, x0, b)
228
230
  bnrm2 = np.linalg.norm(b)
229
231
 
230
232
  atol, _ = _get_atol_rtol('bicgstab', bnrm2, atol, rtol)
231
233
 
232
234
  if bnrm2 == 0:
233
- return postprocess(b), 0
235
+ return b, 0
234
236
 
235
237
  n = len(b)
236
238
 
@@ -255,15 +257,15 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
255
257
 
256
258
  for iteration in range(maxiter):
257
259
  if np.linalg.norm(r) < atol: # Are we done?
258
- return postprocess(x), 0
260
+ return x, 0
259
261
 
260
262
  rho = dotprod(rtilde, r)
261
263
  if np.abs(rho) < rhotol: # rho breakdown
262
- return postprocess(x), -10
264
+ return x, -10
263
265
 
264
266
  if iteration > 0:
265
267
  if np.abs(omega) < omegatol: # omega breakdown
266
- return postprocess(x), -11
268
+ return x, -11
267
269
 
268
270
  beta = (rho / rho_prev) * (alpha / omega)
269
271
  p -= omega*v
@@ -277,14 +279,14 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
277
279
  v = matvec(phat)
278
280
  rv = dotprod(rtilde, v)
279
281
  if rv == 0:
280
- return postprocess(x), -11
282
+ return x, -11
281
283
  alpha = rho / rv
282
284
  r -= alpha*v
283
285
  s[:] = r[:]
284
286
 
285
287
  if np.linalg.norm(s) < atol:
286
288
  x += alpha*phat
287
- return postprocess(x), 0
289
+ return x, 0
288
290
 
289
291
  shat = psolve(s)
290
292
  t = matvec(shat)
@@ -299,11 +301,13 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
299
301
 
300
302
  else: # for loop exhausted
301
303
  # Return incomplete progress
302
- return postprocess(x), maxiter
304
+ return x, maxiter
303
305
 
304
306
 
305
307
  def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
306
- """Use Conjugate Gradient iteration to solve ``Ax = b``.
308
+ """
309
+ Solve ``Ax = b`` with the Conjugate Gradient method, for a symmetric,
310
+ positive-definite `A`.
307
311
 
308
312
  Parameters
309
313
  ----------
@@ -372,13 +376,13 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
372
376
  >>> np.allclose(A.dot(x), b)
373
377
  True
374
378
  """
375
- A, M, x, b, postprocess = make_system(A, M, x0, b)
379
+ A, M, x, b = make_system(A, M, x0, b)
376
380
  bnrm2 = np.linalg.norm(b)
377
381
 
378
382
  atol, _ = _get_atol_rtol('cg', bnrm2, atol, rtol)
379
383
 
380
384
  if bnrm2 == 0:
381
- return postprocess(b), 0
385
+ return b, 0
382
386
 
383
387
  n = len(b)
384
388
 
@@ -396,7 +400,7 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
396
400
 
397
401
  for iteration in range(maxiter):
398
402
  if np.linalg.norm(r) < atol: # Are we done?
399
- return postprocess(x), 0
403
+ return x, 0
400
404
 
401
405
  z = psolve(r)
402
406
  rho_cur = dotprod(r, z)
@@ -419,11 +423,12 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
419
423
 
420
424
  else: # for loop exhausted
421
425
  # Return incomplete progress
422
- return postprocess(x), maxiter
426
+ return x, maxiter
423
427
 
424
428
 
425
429
  def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
426
- """Use Conjugate Gradient Squared iteration to solve ``Ax = b``.
430
+ """
431
+ Solve ``Ax = b`` with the Conjugate Gradient Squared method.
427
432
 
428
433
  Parameters
429
434
  ----------
@@ -491,13 +496,13 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
491
496
  >>> np.allclose(A.dot(x), b)
492
497
  True
493
498
  """
494
- A, M, x, b, postprocess = make_system(A, M, x0, b)
499
+ A, M, x, b = make_system(A, M, x0, b)
495
500
  bnrm2 = np.linalg.norm(b)
496
501
 
497
502
  atol, _ = _get_atol_rtol('cgs', bnrm2, atol, rtol)
498
503
 
499
504
  if bnrm2 == 0:
500
- return postprocess(b), 0
505
+ return b, 0
501
506
 
502
507
  n = len(b)
503
508
 
@@ -524,11 +529,11 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
524
529
  for iteration in range(maxiter):
525
530
  rnorm = np.linalg.norm(r)
526
531
  if rnorm < atol: # Are we done?
527
- return postprocess(x), 0
532
+ return x, 0
528
533
 
529
534
  rho_cur = dotprod(rtilde, r)
530
535
  if np.abs(rho_cur) < rhotol: # Breakdown case
531
- return postprocess, -10
536
+ return x, -10
532
537
 
533
538
  if iteration > 0:
534
539
  beta = rho_cur / rho_prev
@@ -553,7 +558,7 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
553
558
  rv = dotprod(rtilde, vhat)
554
559
 
555
560
  if rv == 0: # Dot product breakdown
556
- return postprocess(x), -11
561
+ return x, -11
557
562
 
558
563
  alpha = rho_cur / rv
559
564
  q[:] = u[:]
@@ -576,13 +581,13 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
576
581
 
577
582
  else: # for loop exhausted
578
583
  # Return incomplete progress
579
- return postprocess(x), maxiter
584
+ return x, maxiter
580
585
 
581
586
 
582
587
  def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=None,
583
588
  callback=None, callback_type=None):
584
589
  """
585
- Use Generalized Minimal RESidual iteration to solve ``Ax = b``.
590
+ Solve ``Ax = b`` with the Generalized Minimal RESidual method.
586
591
 
587
592
  Parameters
588
593
  ----------
@@ -689,7 +694,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
689
694
  if callback is None:
690
695
  callback_type = None
691
696
 
692
- A, M, x, b, postprocess = make_system(A, M, x0, b)
697
+ A, M, x, b = make_system(A, M, x0, b)
693
698
  matvec = A.matvec
694
699
  psolve = M.matvec
695
700
  n = len(b)
@@ -698,7 +703,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
698
703
  atol, _ = _get_atol_rtol('gmres', bnrm2, atol, rtol)
699
704
 
700
705
  if bnrm2 == 0:
701
- return postprocess(b), 0
706
+ return b, 0
702
707
 
703
708
  eps = np.finfo(x.dtype.char).eps
704
709
 
@@ -737,7 +742,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
737
742
  if iteration == 0:
738
743
  r = b - matvec(x) if x.any() else b.copy()
739
744
  if np.linalg.norm(r) < atol: # Are we done?
740
- return postprocess(x), 0
745
+ return x, 0
741
746
 
742
747
  v[0, :] = psolve(r)
743
748
  tmp = np.linalg.norm(v[0, :])
@@ -818,7 +823,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
818
823
 
819
824
  # Legacy exit
820
825
  if callback_type == 'legacy' and inner_iter == maxiter:
821
- return postprocess(x), 0 if rnorm <= atol else maxiter
826
+ return x, 0 if rnorm <= atol else maxiter
822
827
 
823
828
  if callback_type == 'x':
824
829
  callback(x)
@@ -838,12 +843,13 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
838
843
  ptol = presid * min(ptol_max_factor, atol / rnorm)
839
844
 
840
845
  info = 0 if (rnorm <= atol) else maxiter
841
- return postprocess(x), info
846
+ return x, info
842
847
 
843
848
 
844
849
  def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
845
850
  callback=None):
846
- """Use Quasi-Minimal Residual iteration to solve ``Ax = b``.
851
+ """
852
+ Solve ``Ax = b`` with the Quasi-Minimal Residual method.
847
853
 
848
854
  Parameters
849
855
  ----------
@@ -901,13 +907,13 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
901
907
  True
902
908
  """
903
909
  A_ = A
904
- A, M, x, b, postprocess = make_system(A, None, x0, b)
910
+ A, M, x, b = make_system(A, None, x0, b)
905
911
  bnrm2 = np.linalg.norm(b)
906
912
 
907
913
  atol, _ = _get_atol_rtol('qmr', bnrm2, atol, rtol)
908
914
 
909
915
  if bnrm2 == 0:
910
- return postprocess(b), 0
916
+ return b, 0
911
917
 
912
918
  if M1 is None and M2 is None:
913
919
  if hasattr(A_, 'psolve'):
@@ -964,11 +970,11 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
964
970
 
965
971
  for iteration in range(maxiter):
966
972
  if np.linalg.norm(r) < atol: # Are we done?
967
- return postprocess(x), 0
973
+ return x, 0
968
974
  if np.abs(rho) < rhotol: # rho breakdown
969
- return postprocess(x), -10
975
+ return x, -10
970
976
  if np.abs(xi) < xitol: # xi breakdown
971
- return postprocess(x), -15
977
+ return x, -15
972
978
 
973
979
  v[:] = vtilde[:]
974
980
  v *= (1 / rho)
@@ -979,7 +985,7 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
979
985
  delta = dotprod(z, y)
980
986
 
981
987
  if np.abs(delta) < deltatol: # delta breakdown
982
- return postprocess(x), -13
988
+ return x, -13
983
989
 
984
990
  ytilde = M2.matvec(y)
985
991
  ztilde = M1.rmatvec(z)
@@ -996,11 +1002,11 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
996
1002
  ptilde = A.matvec(p)
997
1003
  epsilon = dotprod(q, ptilde)
998
1004
  if np.abs(epsilon) < epsilontol: # epsilon breakdown
999
- return postprocess(x), -14
1005
+ return x, -14
1000
1006
 
1001
1007
  beta = epsilon / delta
1002
1008
  if np.abs(beta) < betatol: # beta breakdown
1003
- return postprocess(x), -11
1009
+ return x, -11
1004
1010
 
1005
1011
  vtilde[:] = ptilde[:]
1006
1012
  vtilde -= beta*v
@@ -1019,7 +1025,7 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
1019
1025
  gamma = 1 / np.sqrt(1 + theta**2)
1020
1026
 
1021
1027
  if np.abs(gamma) < gammatol: # gamma breakdown
1022
- return postprocess(x), -12
1028
+ return x, -12
1023
1029
 
1024
1030
  eta *= -(rho_prev / beta) * (gamma / gamma_prev)**2
1025
1031
 
@@ -1042,4 +1048,4 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
1042
1048
 
1043
1049
  else: # for loop exhausted
1044
1050
  # Return incomplete progress
1045
- return postprocess(x), maxiter
1051
+ return x, maxiter
@@ -16,7 +16,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
16
16
  inner_m=30, outer_k=3, outer_v=None, store_outer_Av=True,
17
17
  prepend_outer_v=False):
18
18
  """
19
- Solve a matrix equation using the LGMRES algorithm.
19
+ Solve ``Ax = b`` with the LGMRES algorithm.
20
20
 
21
21
  The LGMRES algorithm [1]_ [2]_ is designed to avoid some problems
22
22
  in the convergence in restarted GMRES, and often converges in fewer
@@ -119,7 +119,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
119
119
  >>> np.allclose(A.dot(x), b)
120
120
  True
121
121
  """
122
- A,M,x,b,postprocess = make_system(A,M,x0,b)
122
+ A,M,x,b = make_system(A,M,x0,b)
123
123
 
124
124
  if not np.isfinite(b).all():
125
125
  raise ValueError("RHS must contain only finite numbers")
@@ -140,7 +140,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
140
140
 
141
141
  if b_norm == 0:
142
142
  x = b
143
- return (postprocess(x), 0)
143
+ return (x, 0)
144
144
 
145
145
  ptol_max_factor = 1.0
146
146
 
@@ -192,7 +192,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
192
192
  except LinAlgError:
193
193
  # Floating point over/underflow, non-finite result from
194
194
  # matmul etc. -- report failure.
195
- return postprocess(x), k_outer + 1
195
+ return x, k_outer + 1
196
196
 
197
197
  # Inner loop tolerance control
198
198
  if pres > ptol:
@@ -225,6 +225,6 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
225
225
  x += dx
226
226
  else:
227
227
  # didn't converge ...
228
- return postprocess(x), maxiter
228
+ return x, maxiter
229
229
 
230
- return postprocess(x), 0
230
+ return x, 0
@@ -10,7 +10,7 @@ __all__ = ['minres']
10
10
  def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
11
11
  M=None, callback=None, show=False, check=False):
12
12
  """
13
- Use MINimum RESidual iteration to solve Ax=b
13
+ Solve ``Ax = b`` with the MINimum RESidual method, for a symmetric `A`.
14
14
 
15
15
  MINRES minimizes norm(Ax - b) for a real symmetric matrix A. Unlike
16
16
  the Conjugate Gradient method, A can be indefinite or singular.
@@ -89,7 +89,7 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
89
89
  https://web.stanford.edu/group/SOL/software/minres/minres-matlab.zip
90
90
 
91
91
  """
92
- A, M, x, b, postprocess = make_system(A, M, x0, b)
92
+ A, M, x, b = make_system(A, M, x0, b)
93
93
 
94
94
  matvec = A.matvec
95
95
  psolve = M.matvec
@@ -146,12 +146,12 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
146
146
  if beta1 < 0:
147
147
  raise ValueError('indefinite preconditioner')
148
148
  elif beta1 == 0:
149
- return (postprocess(x), 0)
149
+ return (x, 0)
150
150
 
151
151
  bnorm = norm(b)
152
152
  if bnorm == 0:
153
153
  x = b
154
- return (postprocess(x), 0)
154
+ return (x, 0)
155
155
 
156
156
  beta1 = sqrt(beta1)
157
157
 
@@ -369,4 +369,4 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
369
369
  else:
370
370
  info = 0
371
371
 
372
- return (postprocess(x),info)
372
+ return (x,info)
@@ -9,7 +9,7 @@ __all__ = ['tfqmr']
9
9
  def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
10
10
  callback=None, show=False):
11
11
  """
12
- Use Transpose-Free Quasi-Minimal Residual iteration to solve ``Ax = b``.
12
+ Solve ``Ax = b`` with the Transpose-Free Quasi-Minimal Residual method.
13
13
 
14
14
  Parameters
15
15
  ----------
@@ -97,12 +97,12 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
97
97
  if np.issubdtype(b.dtype, np.int64):
98
98
  b = b.astype(dtype)
99
99
 
100
- A, M, x, b, postprocess = make_system(A, M, x0, b)
100
+ A, M, x, b = make_system(A, M, x0, b)
101
101
 
102
102
  # Check if the R.H.S is a zero vector
103
103
  if np.linalg.norm(b) == 0.:
104
104
  x = b.copy()
105
- return (postprocess(x), 0)
105
+ return (x, 0)
106
106
 
107
107
  ndofs = A.shape[0]
108
108
  if maxiter is None:
@@ -125,7 +125,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
125
125
  r0norm = np.sqrt(rho)
126
126
  tau = r0norm
127
127
  if r0norm == 0:
128
- return (postprocess(x), 0)
128
+ return (x, 0)
129
129
 
130
130
  # we call this to get the right atol and raise errors as necessary
131
131
  atol, _ = _get_atol_rtol('tfqmr', r0norm, atol, rtol)
@@ -136,7 +136,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
136
136
  vtrstar = np.inner(rstar.conjugate(), v)
137
137
  # Check breakdown
138
138
  if vtrstar == 0.:
139
- return (postprocess(x), -1)
139
+ return (x, -1)
140
140
  alpha = rho / vtrstar
141
141
  uNext = u - alpha * v # [1]-(5.6)
142
142
  w -= alpha * uhat # [1]-(5.8)
@@ -158,7 +158,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
158
158
  if (show):
159
159
  print("TFQMR: Linear solve converged due to reach TOL "
160
160
  f"iterations {iter+1}")
161
- return (postprocess(x), 0)
161
+ return (x, 0)
162
162
 
163
163
  if (not even):
164
164
  # [1]-(5.7)
@@ -176,4 +176,4 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
176
176
  if (show):
177
177
  print("TFQMR: Linear solve not converged due to reach MAXIT "
178
178
  f"iterations {iter+1}")
179
- return (postprocess(x), maxiter)
179
+ return (x, maxiter)
@@ -47,7 +47,7 @@ def make_system(A, M, x0, b):
47
47
 
48
48
  Returns
49
49
  -------
50
- (A, M, x, b, postprocess)
50
+ (A, M, x, b)
51
51
  A : LinearOperator
52
52
  matrix of the linear system
53
53
  M : LinearOperator
@@ -56,9 +56,6 @@ def make_system(A, M, x0, b):
56
56
  initial guess
57
57
  b : rank 1 ndarray
58
58
  right hand side
59
- postprocess : function
60
- converts the solution vector to the appropriate
61
- type and dimensions (e.g. (N,1) matrix)
62
59
 
63
60
  """
64
61
  A_ = A
@@ -78,9 +75,6 @@ def make_system(A, M, x0, b):
78
75
  if b.dtype.char not in 'fdFD':
79
76
  b = b.astype('d') # upcast non-FP types to double
80
77
 
81
- def postprocess(x):
82
- return x
83
-
84
78
  if hasattr(A,'dtype'):
85
79
  xtype = A.dtype.char
86
80
  else:
@@ -124,4 +118,4 @@ def make_system(A, M, x0, b):
124
118
  f'x0 {x.shape} are incompatible')
125
119
  x = x.ravel()
126
120
 
127
- return A, M, x, b, postprocess
121
+ return A, M, x, b
@@ -596,7 +596,7 @@ def _expm(A, use_exact_onenorm):
596
596
  # algorithms.
597
597
 
598
598
  # Avoid indiscriminate asarray() to allow sparse or other strange arrays.
599
- if isinstance(A, (list, tuple, np.matrix)):
599
+ if isinstance(A, list | tuple | np.matrix):
600
600
  A = np.asarray(A)
601
601
  if len(A.shape) != 2 or A.shape[0] != A.shape[1]:
602
602
  raise ValueError('expected a square matrix')
@@ -107,7 +107,7 @@ def norm(x, ord=None, axis=None):
107
107
  The matrix 2-norm or the spectral norm is the largest singular
108
108
  value, computed approximately and with limitations.
109
109
 
110
- >>> b = diags_array([-1, 1], [0, 1], shape=(9, 10))
110
+ >>> b = diags_array([-1, 1], offsets=[0, 1], shape=(9, 10))
111
111
  >>> norm(b, 2)
112
112
  1.9753...
113
113
  """