scipy 1.15.2__cp313-cp313t-macosx_12_0_arm64.whl → 1.16.0rc1__cp313-cp313t-macosx_12_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 (638) hide show
  1. scipy/.dylibs/libscipy_openblas.dylib +0 -0
  2. scipy/__config__.py +7 -7
  3. scipy/__init__.py +3 -6
  4. scipy/_cyutility.cpython-313t-darwin.so +0 -0
  5. scipy/_lib/_array_api.py +497 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
  9. scipy/_lib/_docscrape.py +1 -1
  10. scipy/_lib/_elementwise_iterative_method.py +15 -26
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313t-darwin.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313t-darwin.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_util.py +222 -125
  17. scipy/_lib/array_api_compat/__init__.py +4 -4
  18. scipy/_lib/array_api_compat/_internal.py +19 -6
  19. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  20. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  21. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  22. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  23. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  24. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  25. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  26. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  27. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  28. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  29. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  30. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  31. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  32. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  33. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  34. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  35. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  36. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  37. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  38. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  39. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  40. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  41. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  42. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  43. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  44. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  45. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  46. scipy/_lib/array_api_extra/__init__.py +26 -3
  47. scipy/_lib/array_api_extra/_delegation.py +171 -0
  48. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  49. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  50. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  51. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  52. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  53. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  60. scipy/_lib/array_api_extra/testing.py +359 -0
  61. scipy/_lib/decorator.py +2 -2
  62. scipy/_lib/doccer.py +1 -7
  63. scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
  64. scipy/_lib/pyprima/__init__.py +212 -0
  65. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  66. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  67. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  68. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  69. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  70. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  71. scipy/_lib/pyprima/cobyla/update.py +289 -0
  72. scipy/_lib/pyprima/common/__init__.py +0 -0
  73. scipy/_lib/pyprima/common/_bounds.py +34 -0
  74. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  75. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  76. scipy/_lib/pyprima/common/_project.py +173 -0
  77. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  78. scipy/_lib/pyprima/common/consts.py +47 -0
  79. scipy/_lib/pyprima/common/evaluate.py +99 -0
  80. scipy/_lib/pyprima/common/history.py +38 -0
  81. scipy/_lib/pyprima/common/infos.py +30 -0
  82. scipy/_lib/pyprima/common/linalg.py +435 -0
  83. scipy/_lib/pyprima/common/message.py +290 -0
  84. scipy/_lib/pyprima/common/powalg.py +131 -0
  85. scipy/_lib/pyprima/common/preproc.py +277 -0
  86. scipy/_lib/pyprima/common/present.py +5 -0
  87. scipy/_lib/pyprima/common/ratio.py +54 -0
  88. scipy/_lib/pyprima/common/redrho.py +47 -0
  89. scipy/_lib/pyprima/common/selectx.py +296 -0
  90. scipy/_lib/tests/test__util.py +105 -121
  91. scipy/_lib/tests/test_array_api.py +169 -34
  92. scipy/_lib/tests/test_bunch.py +7 -0
  93. scipy/_lib/tests/test_ccallback.py +2 -10
  94. scipy/_lib/tests/test_public_api.py +13 -0
  95. scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
  96. scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
  97. scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
  98. scipy/cluster/hierarchy.py +393 -223
  99. scipy/cluster/tests/test_hierarchy.py +273 -335
  100. scipy/cluster/tests/test_vq.py +45 -61
  101. scipy/cluster/vq.py +39 -35
  102. scipy/conftest.py +263 -157
  103. scipy/constants/_constants.py +4 -1
  104. scipy/constants/tests/test_codata.py +2 -2
  105. scipy/constants/tests/test_constants.py +11 -18
  106. scipy/datasets/_download_all.py +15 -1
  107. scipy/datasets/_fetchers.py +7 -1
  108. scipy/datasets/_utils.py +1 -1
  109. scipy/differentiate/_differentiate.py +25 -25
  110. scipy/differentiate/tests/test_differentiate.py +24 -25
  111. scipy/fft/_basic.py +20 -0
  112. scipy/fft/_helper.py +3 -34
  113. scipy/fft/_pocketfft/helper.py +29 -1
  114. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  115. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  116. scipy/fft/_realtransforms.py +13 -0
  117. scipy/fft/tests/test_basic.py +27 -25
  118. scipy/fft/tests/test_fftlog.py +16 -7
  119. scipy/fft/tests/test_helper.py +18 -34
  120. scipy/fft/tests/test_real_transforms.py +8 -10
  121. scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
  122. scipy/fftpack/tests/test_basic.py +2 -4
  123. scipy/fftpack/tests/test_real_transforms.py +8 -9
  124. scipy/integrate/_bvp.py +9 -3
  125. scipy/integrate/_cubature.py +3 -2
  126. scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
  127. scipy/integrate/_ivp/common.py +3 -3
  128. scipy/integrate/_ivp/ivp.py +9 -2
  129. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  130. scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
  131. scipy/integrate/_ode.py +9 -2
  132. scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
  133. scipy/integrate/_quad_vec.py +21 -29
  134. scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
  135. scipy/integrate/_quadpack_py.py +11 -7
  136. scipy/integrate/_quadrature.py +3 -3
  137. scipy/integrate/_rules/_base.py +2 -2
  138. scipy/integrate/_tanhsinh.py +57 -54
  139. scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
  140. scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +61 -43
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  177. scipy/io/_harwell_boeing/hb.py +7 -11
  178. scipy/io/_idl.py +5 -7
  179. scipy/io/_netcdf.py +15 -5
  180. scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
  181. scipy/io/arff/tests/test_arffread.py +3 -3
  182. scipy/io/matlab/__init__.py +5 -3
  183. scipy/io/matlab/_mio.py +4 -1
  184. scipy/io/matlab/_mio5.py +19 -13
  185. scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
  186. scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
  187. scipy/io/matlab/_miobase.py +4 -1
  188. scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
  189. scipy/io/matlab/tests/test_mio.py +46 -18
  190. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  191. scipy/io/tests/test_mmio.py +7 -1
  192. scipy/io/tests/test_wavfile.py +41 -0
  193. scipy/io/wavfile.py +57 -10
  194. scipy/linalg/_basic.py +113 -86
  195. scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
  196. scipy/linalg/_decomp.py +22 -9
  197. scipy/linalg/_decomp_cholesky.py +28 -13
  198. scipy/linalg/_decomp_cossin.py +45 -30
  199. scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
  200. scipy/linalg/_decomp_ldl.py +4 -1
  201. scipy/linalg/_decomp_lu.py +18 -6
  202. scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
  203. scipy/linalg/_decomp_polar.py +2 -0
  204. scipy/linalg/_decomp_qr.py +6 -2
  205. scipy/linalg/_decomp_qz.py +3 -0
  206. scipy/linalg/_decomp_schur.py +3 -1
  207. scipy/linalg/_decomp_svd.py +13 -2
  208. scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
  209. scipy/linalg/_expm_frechet.py +4 -0
  210. scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
  211. scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
  212. scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
  213. scipy/linalg/_matfuncs.py +187 -4
  214. scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
  215. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
  216. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  217. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
  218. scipy/linalg/_procrustes.py +2 -0
  219. scipy/linalg/_sketches.py +17 -6
  220. scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
  221. scipy/linalg/_solvers.py +7 -2
  222. scipy/linalg/_special_matrices.py +26 -36
  223. scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
  224. scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
  225. scipy/linalg/lapack.py +22 -2
  226. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  227. scipy/linalg/tests/test_basic.py +31 -16
  228. scipy/linalg/tests/test_batch.py +588 -0
  229. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  230. scipy/linalg/tests/test_decomp.py +40 -3
  231. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  232. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  233. scipy/linalg/tests/test_interpolative.py +17 -0
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
  241. scipy/ndimage/_delegators.py +8 -2
  242. scipy/ndimage/_filters.py +433 -5
  243. scipy/ndimage/_interpolation.py +36 -6
  244. scipy/ndimage/_measurements.py +4 -2
  245. scipy/ndimage/_morphology.py +5 -0
  246. scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
  247. scipy/ndimage/_ndimage_api.py +2 -1
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +351 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
  262. scipy/optimize/_bracket.py +46 -26
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
  272. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  273. scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
  274. scipy/optimize/_lbfgsb_py.py +57 -16
  275. scipy/optimize/_linprog_doc.py +2 -2
  276. scipy/optimize/_linprog_highs.py +11 -11
  277. scipy/optimize/_linprog_ip.py +25 -10
  278. scipy/optimize/_linprog_util.py +18 -19
  279. scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
  280. scipy/optimize/_lsq/common.py +3 -3
  281. scipy/optimize/_lsq/dogbox.py +16 -2
  282. scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
  283. scipy/optimize/_lsq/least_squares.py +198 -126
  284. scipy/optimize/_lsq/lsq_linear.py +6 -6
  285. scipy/optimize/_lsq/trf.py +35 -8
  286. scipy/optimize/_milp.py +3 -1
  287. scipy/optimize/_minimize.py +105 -36
  288. scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
  289. scipy/optimize/_minpack_py.py +21 -14
  290. scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
  291. scipy/optimize/_nnls.py +20 -21
  292. scipy/optimize/_nonlin.py +34 -3
  293. scipy/optimize/_numdiff.py +288 -110
  294. scipy/optimize/_optimize.py +86 -48
  295. scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
  296. scipy/optimize/_remove_redundancy.py +5 -5
  297. scipy/optimize/_root_scalar.py +1 -1
  298. scipy/optimize/_shgo.py +6 -0
  299. scipy/optimize/_shgo_lib/_complex.py +1 -1
  300. scipy/optimize/_slsqp_py.py +216 -124
  301. scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
  302. scipy/optimize/_spectral.py +1 -1
  303. scipy/optimize/_tnc.py +8 -1
  304. scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
  305. scipy/optimize/_trustregion.py +20 -6
  306. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  307. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  308. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  309. scipy/optimize/_trustregion_constr/projections.py +12 -8
  310. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  311. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  312. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  313. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  314. scipy/optimize/_trustregion_exact.py +0 -1
  315. scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
  316. scipy/optimize/_zeros_py.py +97 -17
  317. scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
  318. scipy/optimize/slsqp.py +0 -1
  319. scipy/optimize/tests/test__basinhopping.py +1 -1
  320. scipy/optimize/tests/test__differential_evolution.py +4 -4
  321. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  322. scipy/optimize/tests/test__numdiff.py +66 -22
  323. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  324. scipy/optimize/tests/test__shgo.py +9 -1
  325. scipy/optimize/tests/test_bracket.py +71 -46
  326. scipy/optimize/tests/test_chandrupatla.py +133 -135
  327. scipy/optimize/tests/test_cobyla.py +74 -45
  328. scipy/optimize/tests/test_constraints.py +1 -1
  329. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  330. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  331. scipy/optimize/tests/test_least_squares.py +125 -13
  332. scipy/optimize/tests/test_linear_assignment.py +3 -3
  333. scipy/optimize/tests/test_linprog.py +3 -3
  334. scipy/optimize/tests/test_lsq_linear.py +5 -5
  335. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  336. scipy/optimize/tests/test_minpack.py +4 -4
  337. scipy/optimize/tests/test_nnls.py +43 -3
  338. scipy/optimize/tests/test_nonlin.py +36 -0
  339. scipy/optimize/tests/test_optimize.py +95 -17
  340. scipy/optimize/tests/test_slsqp.py +36 -4
  341. scipy/optimize/tests/test_zeros.py +34 -1
  342. scipy/signal/__init__.py +12 -23
  343. scipy/signal/_delegators.py +568 -0
  344. scipy/signal/_filter_design.py +459 -241
  345. scipy/signal/_fir_filter_design.py +262 -90
  346. scipy/signal/_lti_conversion.py +3 -2
  347. scipy/signal/_ltisys.py +118 -91
  348. scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
  349. scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
  350. scipy/signal/_polyutils.py +172 -0
  351. scipy/signal/_short_time_fft.py +553 -76
  352. scipy/signal/_signal_api.py +30 -0
  353. scipy/signal/_signaltools.py +719 -396
  354. scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
  355. scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
  356. scipy/signal/_spectral_py.py +221 -50
  357. scipy/signal/_spline.cpython-313t-darwin.so +0 -0
  358. scipy/signal/_spline_filters.py +108 -68
  359. scipy/signal/_support_alternative_backends.py +73 -0
  360. scipy/signal/_upfirdn.py +4 -1
  361. scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
  362. scipy/signal/_waveforms.py +2 -11
  363. scipy/signal/_wavelets.py +1 -1
  364. scipy/signal/fir_filter_design.py +1 -0
  365. scipy/signal/spline.py +4 -11
  366. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  367. scipy/signal/tests/test_bsplines.py +114 -79
  368. scipy/signal/tests/test_cont2discrete.py +9 -2
  369. scipy/signal/tests/test_filter_design.py +721 -481
  370. scipy/signal/tests/test_fir_filter_design.py +332 -140
  371. scipy/signal/tests/test_savitzky_golay.py +4 -3
  372. scipy/signal/tests/test_short_time_fft.py +231 -5
  373. scipy/signal/tests/test_signaltools.py +2149 -1348
  374. scipy/signal/tests/test_spectral.py +19 -6
  375. scipy/signal/tests/test_splines.py +161 -96
  376. scipy/signal/tests/test_upfirdn.py +84 -50
  377. scipy/signal/tests/test_waveforms.py +20 -0
  378. scipy/signal/tests/test_windows.py +607 -466
  379. scipy/signal/windows/_windows.py +287 -148
  380. scipy/sparse/__init__.py +23 -4
  381. scipy/sparse/_base.py +269 -120
  382. scipy/sparse/_bsr.py +7 -4
  383. scipy/sparse/_compressed.py +59 -234
  384. scipy/sparse/_construct.py +90 -38
  385. scipy/sparse/_coo.py +115 -181
  386. scipy/sparse/_csc.py +4 -4
  387. scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
  388. scipy/sparse/_csr.py +2 -2
  389. scipy/sparse/_data.py +48 -48
  390. scipy/sparse/_dia.py +105 -21
  391. scipy/sparse/_dok.py +0 -23
  392. scipy/sparse/_index.py +4 -4
  393. scipy/sparse/_matrix.py +23 -0
  394. scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
  395. scipy/sparse/_sputils.py +37 -22
  396. scipy/sparse/base.py +0 -9
  397. scipy/sparse/bsr.py +0 -14
  398. scipy/sparse/compressed.py +0 -23
  399. scipy/sparse/construct.py +0 -6
  400. scipy/sparse/coo.py +0 -14
  401. scipy/sparse/csc.py +0 -3
  402. scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
  403. scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
  404. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
  405. scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
  406. scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
  407. scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
  408. scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
  409. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  410. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  411. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  412. scipy/sparse/csr.py +0 -5
  413. scipy/sparse/data.py +1 -6
  414. scipy/sparse/dia.py +0 -7
  415. scipy/sparse/dok.py +0 -10
  416. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
  417. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  418. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  419. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
  420. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  421. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  422. scipy/sparse/linalg/_expm_multiply.py +8 -3
  423. scipy/sparse/linalg/_interface.py +29 -26
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  438. scipy/sparse/linalg/tests/test_interface.py +35 -0
  439. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  440. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  441. scipy/sparse/tests/test_base.py +217 -40
  442. scipy/sparse/tests/test_common1d.py +17 -12
  443. scipy/sparse/tests/test_construct.py +1 -1
  444. scipy/sparse/tests/test_coo.py +272 -4
  445. scipy/sparse/tests/test_sparsetools.py +5 -0
  446. scipy/sparse/tests/test_sputils.py +36 -7
  447. scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
  448. scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
  449. scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
  450. scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
  451. scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
  452. scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
  453. scipy/spatial/distance.py +49 -42
  454. scipy/spatial/tests/test_distance.py +3 -1
  455. scipy/spatial/tests/test_kdtree.py +1 -0
  456. scipy/spatial/tests/test_qhull.py +106 -2
  457. scipy/spatial/transform/__init__.py +5 -3
  458. scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
  459. scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
  460. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  461. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  462. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  463. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  464. scipy/special/__init__.py +1 -47
  465. scipy/special/_add_newdocs.py +34 -772
  466. scipy/special/_basic.py +22 -25
  467. scipy/special/_comb.cpython-313t-darwin.so +0 -0
  468. scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
  469. scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
  470. scipy/special/_logsumexp.py +83 -69
  471. scipy/special/_orthogonal.pyi +1 -1
  472. scipy/special/_specfun.cpython-313t-darwin.so +0 -0
  473. scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
  474. scipy/special/_spherical_bessel.py +4 -4
  475. scipy/special/_support_alternative_backends.py +212 -119
  476. scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
  477. scipy/special/_testutils.py +4 -4
  478. scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
  479. scipy/special/_ufuncs.pyi +1 -0
  480. scipy/special/_ufuncs.pyx +215 -1400
  481. scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
  482. scipy/special/_ufuncs_cxx.pxd +2 -15
  483. scipy/special/_ufuncs_cxx.pyx +5 -44
  484. scipy/special/_ufuncs_cxx_defs.h +2 -16
  485. scipy/special/_ufuncs_defs.h +0 -8
  486. scipy/special/cython_special.cpython-313t-darwin.so +0 -0
  487. scipy/special/cython_special.pxd +1 -1
  488. scipy/special/tests/_cython_examples/meson.build +10 -1
  489. scipy/special/tests/test_basic.py +153 -20
  490. scipy/special/tests/test_boost_ufuncs.py +3 -0
  491. scipy/special/tests/test_cdflib.py +35 -11
  492. scipy/special/tests/test_gammainc.py +16 -0
  493. scipy/special/tests/test_hyp2f1.py +23 -2
  494. scipy/special/tests/test_log1mexp.py +85 -0
  495. scipy/special/tests/test_logsumexp.py +220 -64
  496. scipy/special/tests/test_mpmath.py +1 -0
  497. scipy/special/tests/test_nan_inputs.py +1 -1
  498. scipy/special/tests/test_orthogonal.py +17 -18
  499. scipy/special/tests/test_sf_error.py +3 -2
  500. scipy/special/tests/test_sph_harm.py +6 -7
  501. scipy/special/tests/test_support_alternative_backends.py +211 -76
  502. scipy/stats/__init__.py +4 -1
  503. scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
  504. scipy/stats/_axis_nan_policy.py +4 -3
  505. scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
  506. scipy/stats/_continued_fraction.py +387 -0
  507. scipy/stats/_continuous_distns.py +296 -319
  508. scipy/stats/_covariance.py +6 -3
  509. scipy/stats/_discrete_distns.py +39 -32
  510. scipy/stats/_distn_infrastructure.py +39 -12
  511. scipy/stats/_distribution_infrastructure.py +900 -238
  512. scipy/stats/_entropy.py +7 -8
  513. scipy/{_lib → stats}/_finite_differences.py +1 -1
  514. scipy/stats/_hypotests.py +82 -49
  515. scipy/stats/_kde.py +53 -49
  516. scipy/stats/_ksstats.py +1 -1
  517. scipy/stats/_levy_stable/__init__.py +7 -15
  518. scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
  519. scipy/stats/_morestats.py +112 -67
  520. scipy/stats/_mstats_basic.py +13 -17
  521. scipy/stats/_mstats_extras.py +8 -8
  522. scipy/stats/_multivariate.py +89 -113
  523. scipy/stats/_new_distributions.py +97 -20
  524. scipy/stats/_page_trend_test.py +12 -5
  525. scipy/stats/_probability_distribution.py +265 -43
  526. scipy/stats/_qmc.py +14 -9
  527. scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
  528. scipy/stats/_qmvnt.py +16 -95
  529. scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
  530. scipy/stats/_quantile.py +335 -0
  531. scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
  532. scipy/stats/_resampling.py +4 -29
  533. scipy/stats/_sampling.py +1 -1
  534. scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
  535. scipy/stats/_stats.cpython-313t-darwin.so +0 -0
  536. scipy/stats/_stats_mstats_common.py +19 -2
  537. scipy/stats/_stats_py.py +534 -460
  538. scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
  540. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  541. scipy/stats/_variation.py +5 -7
  542. scipy/stats/_wilcoxon.py +13 -7
  543. scipy/stats/tests/common_tests.py +6 -4
  544. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  545. scipy/stats/tests/test_continued_fraction.py +173 -0
  546. scipy/stats/tests/test_continuous.py +379 -60
  547. scipy/stats/tests/test_continuous_basic.py +18 -12
  548. scipy/stats/tests/test_discrete_basic.py +14 -8
  549. scipy/stats/tests/test_discrete_distns.py +16 -16
  550. scipy/stats/tests/test_distributions.py +117 -75
  551. scipy/stats/tests/test_entropy.py +40 -48
  552. scipy/stats/tests/test_fit.py +4 -3
  553. scipy/stats/tests/test_hypotests.py +153 -24
  554. scipy/stats/tests/test_kdeoth.py +109 -41
  555. scipy/stats/tests/test_marray.py +289 -0
  556. scipy/stats/tests/test_morestats.py +79 -47
  557. scipy/stats/tests/test_mstats_basic.py +3 -3
  558. scipy/stats/tests/test_multivariate.py +434 -83
  559. scipy/stats/tests/test_qmc.py +13 -10
  560. scipy/stats/tests/test_quantile.py +199 -0
  561. scipy/stats/tests/test_rank.py +119 -112
  562. scipy/stats/tests/test_resampling.py +47 -56
  563. scipy/stats/tests/test_sampling.py +9 -4
  564. scipy/stats/tests/test_stats.py +799 -939
  565. scipy/stats/tests/test_variation.py +8 -6
  566. scipy/version.py +2 -2
  567. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  568. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +9 -9
  569. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +570 -577
  570. scipy-1.16.0rc1.dist-info/WHEEL +6 -0
  571. scipy/_lib/array_api_extra/_funcs.py +0 -484
  572. scipy/_lib/array_api_extra/_typing.py +0 -8
  573. scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
  574. scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
  575. scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
  576. scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
  577. scipy/spatial/qhull_src/COPYING.txt +0 -38
  578. scipy/special/libsf_error_state.dylib +0 -0
  579. scipy/special/tests/test_log_softmax.py +0 -109
  580. scipy/special/tests/test_xsf_cuda.py +0 -114
  581. scipy/special/xsf/binom.h +0 -89
  582. scipy/special/xsf/cdflib.h +0 -100
  583. scipy/special/xsf/cephes/airy.h +0 -307
  584. scipy/special/xsf/cephes/besselpoly.h +0 -51
  585. scipy/special/xsf/cephes/beta.h +0 -257
  586. scipy/special/xsf/cephes/cbrt.h +0 -131
  587. scipy/special/xsf/cephes/chbevl.h +0 -85
  588. scipy/special/xsf/cephes/chdtr.h +0 -193
  589. scipy/special/xsf/cephes/const.h +0 -87
  590. scipy/special/xsf/cephes/ellie.h +0 -293
  591. scipy/special/xsf/cephes/ellik.h +0 -251
  592. scipy/special/xsf/cephes/ellpe.h +0 -107
  593. scipy/special/xsf/cephes/ellpk.h +0 -117
  594. scipy/special/xsf/cephes/expn.h +0 -260
  595. scipy/special/xsf/cephes/gamma.h +0 -398
  596. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  597. scipy/special/xsf/cephes/hyperg.h +0 -361
  598. scipy/special/xsf/cephes/i0.h +0 -149
  599. scipy/special/xsf/cephes/i1.h +0 -158
  600. scipy/special/xsf/cephes/igam.h +0 -421
  601. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  602. scipy/special/xsf/cephes/igami.h +0 -313
  603. scipy/special/xsf/cephes/j0.h +0 -225
  604. scipy/special/xsf/cephes/j1.h +0 -198
  605. scipy/special/xsf/cephes/jv.h +0 -715
  606. scipy/special/xsf/cephes/k0.h +0 -164
  607. scipy/special/xsf/cephes/k1.h +0 -163
  608. scipy/special/xsf/cephes/kn.h +0 -243
  609. scipy/special/xsf/cephes/lanczos.h +0 -112
  610. scipy/special/xsf/cephes/ndtr.h +0 -275
  611. scipy/special/xsf/cephes/poch.h +0 -85
  612. scipy/special/xsf/cephes/polevl.h +0 -167
  613. scipy/special/xsf/cephes/psi.h +0 -194
  614. scipy/special/xsf/cephes/rgamma.h +0 -111
  615. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  616. scipy/special/xsf/cephes/shichi.h +0 -248
  617. scipy/special/xsf/cephes/sici.h +0 -224
  618. scipy/special/xsf/cephes/sindg.h +0 -221
  619. scipy/special/xsf/cephes/tandg.h +0 -139
  620. scipy/special/xsf/cephes/trig.h +0 -58
  621. scipy/special/xsf/cephes/unity.h +0 -186
  622. scipy/special/xsf/cephes/zeta.h +0 -172
  623. scipy/special/xsf/config.h +0 -304
  624. scipy/special/xsf/digamma.h +0 -205
  625. scipy/special/xsf/error.h +0 -57
  626. scipy/special/xsf/evalpoly.h +0 -47
  627. scipy/special/xsf/expint.h +0 -266
  628. scipy/special/xsf/hyp2f1.h +0 -694
  629. scipy/special/xsf/iv_ratio.h +0 -173
  630. scipy/special/xsf/lambertw.h +0 -150
  631. scipy/special/xsf/loggamma.h +0 -163
  632. scipy/special/xsf/sici.h +0 -200
  633. scipy/special/xsf/tools.h +0 -427
  634. scipy/special/xsf/trig.h +0 -164
  635. scipy/special/xsf/wright_bessel.h +0 -843
  636. scipy/special/xsf/zlog1.h +0 -35
  637. scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
  638. scipy-1.15.2.dist-info/WHEEL +0 -4
@@ -1,6 +1,6 @@
1
1
  import numpy as np
2
2
  from scipy.sparse.linalg import LinearOperator
3
- from scipy.sparse import kron, eye, dia_array
3
+ from scipy.sparse import kron, eye_array, dia_array
4
4
 
5
5
  __all__ = ['LaplacianNd']
6
6
  # Sakurai and Mikota classes are intended for tests and benchmarks
@@ -71,7 +71,7 @@ of_the_second_derivative
71
71
  --------
72
72
  >>> import numpy as np
73
73
  >>> from scipy.sparse.linalg import LaplacianNd
74
- >>> from scipy.sparse import diags, csgraph
74
+ >>> from scipy.sparse import diags_array, csgraph
75
75
  >>> from scipy.linalg import eigvalsh
76
76
 
77
77
  The one-dimensional Laplacian demonstrated below for pure Neumann boundary
@@ -81,7 +81,7 @@ of_the_second_derivative
81
81
  famous tri-diagonal matrix:
82
82
 
83
83
  >>> n = 6
84
- >>> G = diags(np.ones(n - 1), 1, format='csr')
84
+ >>> G = diags_array(np.ones(n - 1), offsets=1, format='csr')
85
85
  >>> Lf = csgraph.laplacian(G, symmetrized=True, form='function')
86
86
  >>> grid_shape = (n, )
87
87
  >>> lap = LaplacianNd(grid_shape, boundary_conditions='neumann')
@@ -107,7 +107,7 @@ of_the_second_derivative
107
107
  True
108
108
 
109
109
  Any number of extreme eigenvalues and/or eigenvectors can be computed.
110
-
110
+
111
111
  >>> lap = LaplacianNd(grid_shape, boundary_conditions='periodic')
112
112
  >>> lap.eigenvalues()
113
113
  array([-4., -3., -3., -1., -1., 0.])
@@ -292,13 +292,13 @@ of_the_second_derivative
292
292
 
293
293
  def eigenvalues(self, m=None):
294
294
  """Return the requested number of eigenvalues.
295
-
295
+
296
296
  Parameters
297
297
  ----------
298
298
  m : int, optional
299
299
  The positive number of smallest eigenvalues to return.
300
300
  If not provided, then all eigenvalues will be returned.
301
-
301
+
302
302
  Returns
303
303
  -------
304
304
  eigenvalues : float array
@@ -309,7 +309,7 @@ of_the_second_derivative
309
309
 
310
310
  def _ev1d(self, j, n):
311
311
  """Return 1 eigenvector in 1d with index `j`
312
- and number of grid points `n` where ``j < n``.
312
+ and number of grid points `n` where ``j < n``.
313
313
  """
314
314
  if self.boundary_conditions == 'dirichlet':
315
315
  i = np.pi * (np.arange(n) + 1) / (n + 1)
@@ -326,13 +326,13 @@ of_the_second_derivative
326
326
  i = 2. * np.pi * (np.arange(n) + 0.5) / n
327
327
  ev = np.sqrt(2. / n) * np.cos(i * np.floor((j + 1) / 2))
328
328
  # make small values exact zeros correcting round-off errors
329
- # due to symmetry of eigenvectors the exact 0. is correct
329
+ # due to symmetry of eigenvectors the exact 0. is correct
330
330
  ev[np.abs(ev) < np.finfo(np.float64).eps] = 0.
331
331
  return ev
332
332
 
333
333
  def _one_eve(self, k):
334
334
  """Return 1 eigenvector in Nd with multi-index `j`
335
- as a tensor product of the corresponding 1d eigenvectors.
335
+ as a tensor product of the corresponding 1d eigenvectors.
336
336
  """
337
337
  phi = [self._ev1d(j, n) for j, n in zip(k, self.grid_shape)]
338
338
  result = phi[0]
@@ -342,18 +342,18 @@ of_the_second_derivative
342
342
 
343
343
  def eigenvectors(self, m=None):
344
344
  """Return the requested number of eigenvectors for ordered eigenvalues.
345
-
345
+
346
346
  Parameters
347
347
  ----------
348
348
  m : int, optional
349
349
  The positive number of eigenvectors to return. If not provided,
350
350
  then all eigenvectors will be returned.
351
-
351
+
352
352
  Returns
353
353
  -------
354
354
  eigenvectors : float array
355
355
  An array with columns made of the requested `m` or all eigenvectors.
356
- The columns are ordered according to the `m` ordered eigenvalues.
356
+ The columns are ordered according to the `m` ordered eigenvalues.
357
357
  """
358
358
  _, ind = self._eigenvalue_ordering(m)
359
359
  if m is None:
@@ -466,9 +466,9 @@ of_the_second_derivative
466
466
  L_i += t
467
467
 
468
468
  for j in range(i):
469
- L_i = kron(eye(self.grid_shape[j], dtype=np.int8), L_i)
469
+ L_i = kron(eye_array(self.grid_shape[j], dtype=np.int8), L_i)
470
470
  for j in range(i + 1, N):
471
- L_i = kron(L_i, eye(self.grid_shape[j], dtype=np.int8))
471
+ L_i = kron(L_i, eye_array(self.grid_shape[j], dtype=np.int8))
472
472
  L += L_i
473
473
  return L.astype(self.dtype)
474
474
 
@@ -556,7 +556,7 @@ class Sakurai(LinearOperator):
556
556
  `A` and `B` where `A` is the identity so we turn it into an eigenproblem
557
557
  just for the matrix `B` that this function outputs in various formats
558
558
  together with its eigenvalues.
559
-
559
+
560
560
  .. versionadded:: 1.12.0
561
561
 
562
562
  References
@@ -602,7 +602,7 @@ class Sakurai(LinearOperator):
602
602
  The banded form can be used in scipy functions for banded matrices, e.g.,
603
603
 
604
604
  >>> e = eig_banded(sak.tobanded(), eigvals_only=True)
605
- >>> np.allclose(sak.eigenvalues, e, atol= n * n * n * np.finfo(float).eps)
605
+ >>> np.allclose(sak.eigenvalues(), e, atol= n * n * n * np.finfo(float).eps)
606
606
  True
607
607
 
608
608
  """
@@ -614,13 +614,13 @@ class Sakurai(LinearOperator):
614
614
 
615
615
  def eigenvalues(self, m=None):
616
616
  """Return the requested number of eigenvalues.
617
-
617
+
618
618
  Parameters
619
619
  ----------
620
620
  m : int, optional
621
621
  The positive number of smallest eigenvalues to return.
622
622
  If not provided, then all eigenvalues will be returned.
623
-
623
+
624
624
  Returns
625
625
  -------
626
626
  eigenvalues : `np.float64` array
@@ -642,18 +642,18 @@ class Sakurai(LinearOperator):
642
642
 
643
643
  def tosparse(self):
644
644
  """
645
- Construct the Sakurai matrix is a sparse format.
645
+ Construct the Sakurai matrix in a sparse format.
646
646
  """
647
- from scipy.sparse import spdiags
647
+ from scipy.sparse import diags_array
648
648
  d = self.tobanded()
649
649
  # the banded format has the main diagonal at the bottom
650
- # `spdiags` has no `dtype` parameter so inherits dtype from banded
651
- return spdiags([d[0], d[1], d[2], d[1], d[0]], [-2, -1, 0, 1, 2],
652
- self.n, self.n)
650
+ # `diags_array` inherits dtype from banded
651
+ return diags_array([d[0], d[1], d[2], d[1], d[0]], offsets=[-2, -1, 0, 1, 2],
652
+ shape=(self.n, self.n), dtype=d.dtype)
653
653
 
654
654
  def toarray(self):
655
655
  return self.tosparse().toarray()
656
-
656
+
657
657
  def _matvec(self, x):
658
658
  """
659
659
  Construct matrix-free callable banded-matrix-vector multiplication by
@@ -675,7 +675,7 @@ class Sakurai(LinearOperator):
675
675
  Construct matrix-free callable matrix-matrix multiplication by
676
676
  the Sakurai matrix without constructing or storing the matrix itself
677
677
  by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
678
- """
678
+ """
679
679
  return self._matvec(x)
680
680
 
681
681
  def _adjoint(self):
@@ -723,8 +723,9 @@ class MikotaM(LinearOperator):
723
723
  return self._diag()
724
724
 
725
725
  def tosparse(self):
726
- from scipy.sparse import diags
727
- return diags([self._diag()], [0], shape=self.shape, dtype=self.dtype)
726
+ from scipy.sparse import diags_array
727
+ return diags_array([self._diag()], offsets=[0],
728
+ shape=self.shape, dtype=self.dtype)
728
729
 
729
730
  def toarray(self):
730
731
  return np.diag(self._diag()).astype(self.dtype)
@@ -743,7 +744,7 @@ class MikotaM(LinearOperator):
743
744
  Construct matrix-free callable matrix-matrix multiplication by
744
745
  the Mikota mass matrix without constructing or storing the matrix itself
745
746
  by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
746
- """
747
+ """
747
748
  return self._matvec(x)
748
749
 
749
750
  def _adjoint(self):
@@ -758,7 +759,7 @@ class MikotaK(LinearOperator):
758
759
  Construct a stiffness matrix in various formats of Mikota pair.
759
760
 
760
761
  The stiffness matrix `K` is square real tri-diagonal symmetric
761
- positive definite with integer entries.
762
+ positive definite with integer entries.
762
763
 
763
764
  Parameters
764
765
  ----------
@@ -792,9 +793,9 @@ class MikotaK(LinearOperator):
792
793
  return np.array([np.pad(self._diag1, (1, 0), 'constant'), self._diag0])
793
794
 
794
795
  def tosparse(self):
795
- from scipy.sparse import diags
796
- return diags([self._diag1, self._diag0, self._diag1], [-1, 0, 1],
797
- shape=self.shape, dtype=self.dtype)
796
+ from scipy.sparse import diags_array
797
+ return diags_array([self._diag1, self._diag0, self._diag1], offsets=[-1, 0, 1],
798
+ shape=self.shape, dtype=self.dtype)
798
799
 
799
800
  def toarray(self):
800
801
  return self.tosparse().toarray()
@@ -822,7 +823,7 @@ class MikotaK(LinearOperator):
822
823
  Construct matrix-free callable matrix-matrix multiplication by
823
824
  the Stiffness mass matrix without constructing or storing the matrix itself
824
825
  by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
825
- """
826
+ """
826
827
  return self._matvec(x)
827
828
 
828
829
  def _adjoint(self):
@@ -870,7 +871,7 @@ class MikotaPair:
870
871
  A `LinearOperator` custom object for the stiffness matrix.
871
872
  MikotaM()
872
873
  A `LinearOperator` custom object for the mass matrix.
873
-
874
+
874
875
  .. versionadded:: 1.12.0
875
876
 
876
877
  References
@@ -907,7 +908,7 @@ class MikotaPair:
907
908
  0.16666667])
908
909
  >>> mik_k.tosparse()
909
910
  <DIAgonal sparse array of dtype 'float64'
910
- with 20 stored elements (3 diagonals) and shape (6, 6)>
911
+ with 16 stored elements (3 diagonals) and shape (6, 6)>
911
912
  >>> mik_m.tosparse()
912
913
  <DIAgonal sparse array of dtype 'float64'
913
914
  with 6 stored elements (1 diagonals) and shape (6, 6)>
@@ -916,7 +917,7 @@ class MikotaPair:
916
917
  >>> np.array_equal(mik_m(np.eye(n)), mik_m.toarray())
917
918
  True
918
919
  >>> mik.eigenvalues()
919
- array([ 1, 4, 9, 16, 25, 36])
920
+ array([ 1, 4, 9, 16, 25, 36])
920
921
  >>> mik.eigenvalues(2)
921
922
  array([ 1, 4])
922
923
 
@@ -930,13 +931,13 @@ class MikotaPair:
930
931
 
931
932
  def eigenvalues(self, m=None):
932
933
  """Return the requested number of eigenvalues.
933
-
934
+
934
935
  Parameters
935
936
  ----------
936
937
  m : int, optional
937
938
  The positive number of smallest eigenvalues to return.
938
939
  If not provided, then all eigenvalues will be returned.
939
-
940
+
940
941
  Returns
941
942
  -------
942
943
  eigenvalues : `np.uint64` array
@@ -7,6 +7,7 @@ import pytest
7
7
  from numpy.testing import (assert_allclose, assert_, assert_equal,
8
8
  suppress_warnings)
9
9
  from scipy.sparse import SparseEfficiencyWarning
10
+ import scipy.sparse
10
11
  from scipy.sparse.linalg import aslinearoperator
11
12
  import scipy.linalg
12
13
  from scipy.sparse.linalg import expm as sp_expm
@@ -260,19 +261,28 @@ class TestExpmActionInterval:
260
261
  A = scipy.sparse.diags_array(np.arange(5),format='csr', dtype=int)
261
262
  B = np.ones(5, dtype=int)
262
263
  Aexpm = scipy.sparse.diags_array(np.exp(np.arange(5)),format='csr')
264
+ BI = np.identity(5, dtype=int)
265
+ BI_sparse = scipy.sparse.csr_array(BI)
263
266
  assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
267
+ assert_allclose(np.diag(expm_multiply(A, BI_sparse, 0, 1)[-1]), Aexpm.dot(B))
264
268
 
265
269
  # Test A complex, B int
266
270
  A = scipy.sparse.diags_array(-1j*np.arange(5),format='csr', dtype=complex)
267
271
  B = np.ones(5, dtype=int)
268
272
  Aexpm = scipy.sparse.diags_array(np.exp(-1j*np.arange(5)),format='csr')
269
273
  assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
274
+ assert_allclose(np.diag(expm_multiply(A, BI_sparse, 0, 1)[-1]), Aexpm.dot(B))
270
275
 
271
276
  # Test A int, B complex
272
277
  A = scipy.sparse.diags_array(np.arange(5),format='csr', dtype=int)
273
278
  B = np.full(5, 1j, dtype=complex)
274
279
  Aexpm = scipy.sparse.diags_array(np.exp(np.arange(5)),format='csr')
275
280
  assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
281
+ BI = np.identity(5, dtype=complex)*1j
282
+ assert_allclose(
283
+ np.diag(expm_multiply(A, scipy.sparse.csr_array(BI), 0, 1)[-1]),
284
+ Aexpm.dot(B)
285
+ )
276
286
 
277
287
  def test_expm_multiply_interval_status_0(self):
278
288
  self._help_test_specific_expm_interval_status(0)
@@ -13,6 +13,7 @@ import scipy.sparse as sparse
13
13
 
14
14
  import scipy.sparse.linalg._interface as interface
15
15
  from scipy.sparse._sputils import matrix
16
+ from scipy._lib._gcutils import assert_deallocated, IS_PYPY
16
17
 
17
18
 
18
19
  class TestLinearOperator:
@@ -512,6 +513,30 @@ def test_transpose_noconjugate():
512
513
  assert_equal(B.dot(v), Y.dot(v))
513
514
  assert_equal(B.T.dot(v), Y.T.dot(v))
514
515
 
516
+ def test_transpose_multiplication():
517
+ class MyMatrix(interface.LinearOperator):
518
+ def __init__(self, A):
519
+ super().__init__(A.dtype, A.shape)
520
+ self.A = A
521
+ def _matmat(self, other): return self.A @ other
522
+ def _rmatmat(self, other): return self.A.T @ other
523
+
524
+ A = MyMatrix(np.array([[1, 2], [3, 4]]))
525
+ X = np.array([1, 2])
526
+ B = np.array([[10, 20], [30, 40]])
527
+ X2 = X.reshape(-1, 1)
528
+ Y = np.array([[1, 2], [3, 4]])
529
+
530
+ assert_equal(A @ B, Y @ B)
531
+ assert_equal(B.T @ A, B.T @ Y)
532
+ assert_equal(A.T @ B, Y.T @ B)
533
+ assert_equal(A @ X, Y @ X)
534
+ assert_equal(X.T @ A, X.T @ Y)
535
+ assert_equal(A.T @ X, Y.T @ X)
536
+ assert_equal(A @ X2, Y @ X2)
537
+ assert_equal(X2.T @ A, X2.T @ Y)
538
+ assert_equal(A.T @ X2, Y.T @ X2)
539
+
515
540
  def test_sparse_matmat_exception():
516
541
  A = interface.LinearOperator((2, 2), matvec=lambda x: x)
517
542
  B = sparse.eye_array(2)
@@ -524,3 +549,13 @@ def test_sparse_matmat_exception():
524
549
  A @ np.identity(4)
525
550
  with assert_raises(ValueError):
526
551
  np.identity(4) @ A
552
+
553
+
554
+ @pytest.mark.skipif(IS_PYPY, reason="Test not meaningful on PyPy")
555
+ def test_MatrixLinearOperator_refcycle():
556
+ # gh-10634
557
+ # Test that MatrixLinearOperator can be automatically garbage collected
558
+ A = np.eye(2)
559
+ with assert_deallocated(interface.MatrixLinearOperator, A) as op:
560
+ op.adjoint()
561
+ del op
@@ -239,6 +239,10 @@ def test_expm_multiply(matrices):
239
239
  x = splin.expm_multiply(A_sparse, b)
240
240
  assert_allclose(x, x0)
241
241
 
242
+ x0 = splin.expm_multiply(A_dense, A_dense)
243
+ x = splin.expm_multiply(A_sparse, A_sparse)
244
+ assert_allclose(x.todense(), x0)
245
+
242
246
 
243
247
  def test_eq(same_matrix):
244
248
  sp_sparse, pd_sparse = same_matrix
@@ -252,3 +256,17 @@ def test_ne(same_matrix):
252
256
  # temporary splint until pydata sparse support sparray equality
253
257
  sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
254
258
  assert not (sp_sparse != pd_sparse).any()
259
+
260
+
261
+ def test_ge(same_matrix):
262
+ sp_sparse, pd_sparse = same_matrix
263
+ # temporary splint until pydata sparse support sparray equality
264
+ sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
265
+ assert (sp_sparse >= pd_sparse).all()
266
+
267
+
268
+ def test_gt(same_matrix):
269
+ sp_sparse, pd_sparse = same_matrix
270
+ # temporary splint until pydata sparse support sparray equality
271
+ sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
272
+ assert not (sp_sparse > pd_sparse).any()
@@ -194,7 +194,10 @@ class TestArithmetic1D:
194
194
  with pytest.raises(ValueError, match=matchme):
195
195
  i.multiply(j)
196
196
  continue
197
- sp_mult = i.multiply(j)
197
+ try:
198
+ sp_mult = i.multiply(j)
199
+ except ValueError:
200
+ continue
198
201
  assert_allclose(toarray(sp_mult), dense_mult)
199
202
 
200
203
  def test_elementwise_divide(self, spcreator, dat1d):
@@ -320,7 +323,7 @@ class TestArithmetic1D:
320
323
  assert_equal(asp.dot(asp), np.dot(a, a))
321
324
 
322
325
  # bad matrix products
323
- with pytest.raises(ValueError, match='dimension mismatch'):
326
+ with pytest.raises(ValueError, match='dimension mismatch|shapes.*not aligned'):
324
327
  asp.dot(f)
325
328
 
326
329
  # elemente-wise multiplication