scipy 1.15.3__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0rc2__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 (627) hide show
  1. scipy/__config__.py +3 -3
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313t-darwin.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_sparse.py +41 -0
  11. scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
  12. scipy/_lib/_testutils.py +6 -2
  13. scipy/_lib/_util.py +222 -125
  14. scipy/_lib/array_api_compat/__init__.py +4 -4
  15. scipy/_lib/array_api_compat/_internal.py +19 -6
  16. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  17. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  18. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  19. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  20. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  21. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  22. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  23. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  24. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  25. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  26. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  27. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  28. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  29. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  30. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  31. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  32. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  33. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  34. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  35. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  36. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  37. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  38. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  39. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  40. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  41. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  42. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  43. scipy/_lib/array_api_extra/__init__.py +26 -3
  44. scipy/_lib/array_api_extra/_delegation.py +171 -0
  45. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  46. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  47. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  48. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  49. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  50. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  51. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  52. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  53. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  57. scipy/_lib/array_api_extra/testing.py +359 -0
  58. scipy/_lib/decorator.py +2 -2
  59. scipy/_lib/doccer.py +1 -7
  60. scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
  61. scipy/_lib/pyprima/__init__.py +212 -0
  62. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  63. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  64. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  65. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  66. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  67. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  68. scipy/_lib/pyprima/cobyla/update.py +289 -0
  69. scipy/_lib/pyprima/common/__init__.py +0 -0
  70. scipy/_lib/pyprima/common/_bounds.py +34 -0
  71. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  72. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  73. scipy/_lib/pyprima/common/_project.py +173 -0
  74. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  75. scipy/_lib/pyprima/common/consts.py +47 -0
  76. scipy/_lib/pyprima/common/evaluate.py +99 -0
  77. scipy/_lib/pyprima/common/history.py +38 -0
  78. scipy/_lib/pyprima/common/infos.py +30 -0
  79. scipy/_lib/pyprima/common/linalg.py +435 -0
  80. scipy/_lib/pyprima/common/message.py +290 -0
  81. scipy/_lib/pyprima/common/powalg.py +131 -0
  82. scipy/_lib/pyprima/common/preproc.py +277 -0
  83. scipy/_lib/pyprima/common/present.py +5 -0
  84. scipy/_lib/pyprima/common/ratio.py +54 -0
  85. scipy/_lib/pyprima/common/redrho.py +47 -0
  86. scipy/_lib/pyprima/common/selectx.py +296 -0
  87. scipy/_lib/tests/test__util.py +105 -121
  88. scipy/_lib/tests/test_array_api.py +166 -35
  89. scipy/_lib/tests/test_bunch.py +7 -0
  90. scipy/_lib/tests/test_ccallback.py +2 -10
  91. scipy/_lib/tests/test_public_api.py +13 -0
  92. scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
  93. scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
  94. scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
  95. scipy/cluster/hierarchy.py +393 -223
  96. scipy/cluster/tests/test_hierarchy.py +273 -335
  97. scipy/cluster/tests/test_vq.py +45 -61
  98. scipy/cluster/vq.py +39 -35
  99. scipy/conftest.py +263 -157
  100. scipy/constants/_constants.py +4 -1
  101. scipy/constants/tests/test_codata.py +2 -2
  102. scipy/constants/tests/test_constants.py +11 -18
  103. scipy/datasets/_download_all.py +15 -1
  104. scipy/datasets/_fetchers.py +7 -1
  105. scipy/datasets/_utils.py +1 -1
  106. scipy/differentiate/_differentiate.py +25 -25
  107. scipy/differentiate/tests/test_differentiate.py +24 -25
  108. scipy/fft/_basic.py +20 -0
  109. scipy/fft/_helper.py +3 -34
  110. scipy/fft/_pocketfft/helper.py +29 -1
  111. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  112. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  113. scipy/fft/_realtransforms.py +13 -0
  114. scipy/fft/tests/test_basic.py +27 -25
  115. scipy/fft/tests/test_fftlog.py +16 -7
  116. scipy/fft/tests/test_helper.py +18 -34
  117. scipy/fft/tests/test_real_transforms.py +8 -10
  118. scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
  119. scipy/fftpack/tests/test_basic.py +2 -4
  120. scipy/fftpack/tests/test_real_transforms.py +8 -9
  121. scipy/integrate/_bvp.py +9 -3
  122. scipy/integrate/_cubature.py +3 -2
  123. scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
  124. scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
  125. scipy/integrate/_ode.py +9 -2
  126. scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
  127. scipy/integrate/_quad_vec.py +21 -29
  128. scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
  129. scipy/integrate/_quadpack_py.py +11 -7
  130. scipy/integrate/_quadrature.py +3 -3
  131. scipy/integrate/_rules/_base.py +2 -2
  132. scipy/integrate/_tanhsinh.py +48 -47
  133. scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
  134. scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
  135. scipy/integrate/tests/test__quad_vec.py +0 -6
  136. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  137. scipy/integrate/tests/test_cubature.py +21 -35
  138. scipy/integrate/tests/test_quadrature.py +6 -8
  139. scipy/integrate/tests/test_tanhsinh.py +56 -48
  140. scipy/interpolate/__init__.py +70 -58
  141. scipy/interpolate/_bary_rational.py +22 -22
  142. scipy/interpolate/_bsplines.py +119 -66
  143. scipy/interpolate/_cubic.py +65 -50
  144. scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
  145. scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
  146. scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
  147. scipy/interpolate/_fitpack2.py +9 -6
  148. scipy/interpolate/_fitpack_impl.py +32 -26
  149. scipy/interpolate/_fitpack_repro.py +23 -19
  150. scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
  151. scipy/interpolate/_interpolate.py +30 -12
  152. scipy/interpolate/_ndbspline.py +13 -18
  153. scipy/interpolate/_ndgriddata.py +5 -8
  154. scipy/interpolate/_polyint.py +95 -31
  155. scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
  156. scipy/interpolate/_rbf.py +2 -2
  157. scipy/interpolate/_rbfinterp.py +1 -1
  158. scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
  159. scipy/interpolate/_rgi.py +31 -26
  160. scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
  161. scipy/interpolate/dfitpack.py +0 -20
  162. scipy/interpolate/interpnd.py +1 -2
  163. scipy/interpolate/tests/test_bary_rational.py +2 -2
  164. scipy/interpolate/tests/test_bsplines.py +97 -1
  165. scipy/interpolate/tests/test_fitpack2.py +39 -1
  166. scipy/interpolate/tests/test_interpnd.py +32 -20
  167. scipy/interpolate/tests/test_interpolate.py +48 -4
  168. scipy/interpolate/tests/test_rgi.py +2 -1
  169. scipy/io/_fast_matrix_market/__init__.py +2 -0
  170. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  171. scipy/io/_harwell_boeing/hb.py +7 -11
  172. scipy/io/_idl.py +5 -7
  173. scipy/io/_netcdf.py +15 -5
  174. scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
  175. scipy/io/arff/tests/test_arffread.py +3 -3
  176. scipy/io/matlab/__init__.py +5 -3
  177. scipy/io/matlab/_mio.py +4 -1
  178. scipy/io/matlab/_mio5.py +19 -13
  179. scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
  180. scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
  181. scipy/io/matlab/_miobase.py +4 -1
  182. scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
  183. scipy/io/matlab/tests/test_mio.py +46 -18
  184. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  185. scipy/io/tests/test_mmio.py +7 -1
  186. scipy/io/tests/test_wavfile.py +41 -0
  187. scipy/io/wavfile.py +57 -10
  188. scipy/linalg/_basic.py +113 -86
  189. scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
  190. scipy/linalg/_decomp.py +22 -9
  191. scipy/linalg/_decomp_cholesky.py +28 -13
  192. scipy/linalg/_decomp_cossin.py +45 -30
  193. scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
  194. scipy/linalg/_decomp_ldl.py +4 -1
  195. scipy/linalg/_decomp_lu.py +18 -6
  196. scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
  197. scipy/linalg/_decomp_polar.py +2 -0
  198. scipy/linalg/_decomp_qr.py +6 -2
  199. scipy/linalg/_decomp_qz.py +3 -0
  200. scipy/linalg/_decomp_schur.py +3 -1
  201. scipy/linalg/_decomp_svd.py +13 -2
  202. scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
  203. scipy/linalg/_expm_frechet.py +4 -0
  204. scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
  205. scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
  206. scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
  207. scipy/linalg/_matfuncs.py +187 -4
  208. scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
  209. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
  210. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  211. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
  212. scipy/linalg/_procrustes.py +2 -0
  213. scipy/linalg/_sketches.py +17 -6
  214. scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
  215. scipy/linalg/_solvers.py +7 -2
  216. scipy/linalg/_special_matrices.py +26 -36
  217. scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
  218. scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
  219. scipy/linalg/lapack.py +22 -2
  220. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  221. scipy/linalg/tests/test_basic.py +31 -16
  222. scipy/linalg/tests/test_batch.py +588 -0
  223. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  224. scipy/linalg/tests/test_decomp.py +40 -3
  225. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  226. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  227. scipy/linalg/tests/test_lapack.py +115 -7
  228. scipy/linalg/tests/test_matfuncs.py +157 -102
  229. scipy/linalg/tests/test_procrustes.py +0 -7
  230. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  231. scipy/linalg/tests/test_special_matrices.py +1 -5
  232. scipy/ndimage/__init__.py +1 -0
  233. scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
  234. scipy/ndimage/_delegators.py +8 -2
  235. scipy/ndimage/_filters.py +453 -5
  236. scipy/ndimage/_interpolation.py +36 -6
  237. scipy/ndimage/_measurements.py +4 -2
  238. scipy/ndimage/_morphology.py +5 -0
  239. scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
  240. scipy/ndimage/_ni_docstrings.py +5 -1
  241. scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
  242. scipy/ndimage/_ni_support.py +1 -5
  243. scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
  244. scipy/ndimage/_support_alternative_backends.py +18 -6
  245. scipy/ndimage/tests/test_filters.py +370 -259
  246. scipy/ndimage/tests/test_fourier.py +7 -9
  247. scipy/ndimage/tests/test_interpolation.py +68 -61
  248. scipy/ndimage/tests/test_measurements.py +18 -35
  249. scipy/ndimage/tests/test_morphology.py +143 -131
  250. scipy/ndimage/tests/test_splines.py +1 -3
  251. scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
  252. scipy/optimize/_basinhopping.py +13 -7
  253. scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
  254. scipy/optimize/_bracket.py +17 -24
  255. scipy/optimize/_chandrupatla.py +9 -10
  256. scipy/optimize/_cobyla_py.py +104 -123
  257. scipy/optimize/_constraints.py +14 -10
  258. scipy/optimize/_differentiable_functions.py +371 -230
  259. scipy/optimize/_differentialevolution.py +4 -3
  260. scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
  261. scipy/optimize/_dual_annealing.py +1 -1
  262. scipy/optimize/_elementwise.py +1 -4
  263. scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
  264. scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
  265. scipy/optimize/_lbfgsb_py.py +57 -16
  266. scipy/optimize/_linprog_doc.py +2 -2
  267. scipy/optimize/_linprog_highs.py +2 -2
  268. scipy/optimize/_linprog_ip.py +25 -10
  269. scipy/optimize/_linprog_util.py +14 -16
  270. scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
  271. scipy/optimize/_lsq/common.py +3 -3
  272. scipy/optimize/_lsq/dogbox.py +16 -2
  273. scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
  274. scipy/optimize/_lsq/least_squares.py +198 -126
  275. scipy/optimize/_lsq/lsq_linear.py +6 -6
  276. scipy/optimize/_lsq/trf.py +35 -8
  277. scipy/optimize/_milp.py +3 -1
  278. scipy/optimize/_minimize.py +105 -36
  279. scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
  280. scipy/optimize/_minpack_py.py +21 -14
  281. scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
  282. scipy/optimize/_nnls.py +20 -21
  283. scipy/optimize/_nonlin.py +34 -3
  284. scipy/optimize/_numdiff.py +288 -110
  285. scipy/optimize/_optimize.py +86 -48
  286. scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
  287. scipy/optimize/_remove_redundancy.py +5 -5
  288. scipy/optimize/_root_scalar.py +1 -1
  289. scipy/optimize/_shgo.py +6 -0
  290. scipy/optimize/_shgo_lib/_complex.py +1 -1
  291. scipy/optimize/_slsqp_py.py +216 -124
  292. scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
  293. scipy/optimize/_spectral.py +1 -1
  294. scipy/optimize/_tnc.py +8 -1
  295. scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
  296. scipy/optimize/_trustregion.py +20 -6
  297. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  298. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  299. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  300. scipy/optimize/_trustregion_constr/projections.py +12 -8
  301. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  302. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  303. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  304. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  305. scipy/optimize/_trustregion_exact.py +0 -1
  306. scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
  307. scipy/optimize/_zeros_py.py +97 -17
  308. scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
  309. scipy/optimize/slsqp.py +0 -1
  310. scipy/optimize/tests/test__basinhopping.py +1 -1
  311. scipy/optimize/tests/test__differential_evolution.py +4 -4
  312. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  313. scipy/optimize/tests/test__numdiff.py +66 -22
  314. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  315. scipy/optimize/tests/test__shgo.py +9 -1
  316. scipy/optimize/tests/test_bracket.py +36 -46
  317. scipy/optimize/tests/test_chandrupatla.py +133 -135
  318. scipy/optimize/tests/test_cobyla.py +74 -45
  319. scipy/optimize/tests/test_constraints.py +1 -1
  320. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  321. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  322. scipy/optimize/tests/test_least_squares.py +125 -13
  323. scipy/optimize/tests/test_linear_assignment.py +3 -3
  324. scipy/optimize/tests/test_linprog.py +3 -3
  325. scipy/optimize/tests/test_lsq_linear.py +6 -6
  326. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  327. scipy/optimize/tests/test_minpack.py +4 -4
  328. scipy/optimize/tests/test_nnls.py +43 -3
  329. scipy/optimize/tests/test_nonlin.py +36 -0
  330. scipy/optimize/tests/test_optimize.py +95 -17
  331. scipy/optimize/tests/test_slsqp.py +36 -4
  332. scipy/optimize/tests/test_zeros.py +34 -1
  333. scipy/signal/__init__.py +12 -23
  334. scipy/signal/_delegators.py +568 -0
  335. scipy/signal/_filter_design.py +459 -241
  336. scipy/signal/_fir_filter_design.py +262 -90
  337. scipy/signal/_lti_conversion.py +3 -2
  338. scipy/signal/_ltisys.py +118 -91
  339. scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
  340. scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
  341. scipy/signal/_polyutils.py +172 -0
  342. scipy/signal/_short_time_fft.py +519 -70
  343. scipy/signal/_signal_api.py +30 -0
  344. scipy/signal/_signaltools.py +719 -399
  345. scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
  346. scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
  347. scipy/signal/_spectral_py.py +230 -50
  348. scipy/signal/_spline.cpython-313t-darwin.so +0 -0
  349. scipy/signal/_spline_filters.py +108 -68
  350. scipy/signal/_support_alternative_backends.py +73 -0
  351. scipy/signal/_upfirdn.py +4 -1
  352. scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
  353. scipy/signal/_waveforms.py +2 -11
  354. scipy/signal/_wavelets.py +1 -1
  355. scipy/signal/fir_filter_design.py +1 -0
  356. scipy/signal/spline.py +4 -11
  357. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  358. scipy/signal/tests/test_bsplines.py +114 -79
  359. scipy/signal/tests/test_cont2discrete.py +9 -2
  360. scipy/signal/tests/test_filter_design.py +721 -481
  361. scipy/signal/tests/test_fir_filter_design.py +332 -140
  362. scipy/signal/tests/test_savitzky_golay.py +4 -3
  363. scipy/signal/tests/test_short_time_fft.py +221 -3
  364. scipy/signal/tests/test_signaltools.py +2144 -1348
  365. scipy/signal/tests/test_spectral.py +50 -6
  366. scipy/signal/tests/test_splines.py +161 -96
  367. scipy/signal/tests/test_upfirdn.py +84 -50
  368. scipy/signal/tests/test_waveforms.py +20 -0
  369. scipy/signal/tests/test_windows.py +607 -466
  370. scipy/signal/windows/_windows.py +287 -148
  371. scipy/sparse/__init__.py +23 -4
  372. scipy/sparse/_base.py +270 -108
  373. scipy/sparse/_bsr.py +7 -4
  374. scipy/sparse/_compressed.py +59 -231
  375. scipy/sparse/_construct.py +90 -38
  376. scipy/sparse/_coo.py +115 -181
  377. scipy/sparse/_csc.py +4 -4
  378. scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
  379. scipy/sparse/_csr.py +2 -2
  380. scipy/sparse/_data.py +48 -48
  381. scipy/sparse/_dia.py +105 -18
  382. scipy/sparse/_dok.py +0 -23
  383. scipy/sparse/_index.py +4 -4
  384. scipy/sparse/_matrix.py +23 -0
  385. scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
  386. scipy/sparse/_sputils.py +37 -22
  387. scipy/sparse/base.py +0 -9
  388. scipy/sparse/bsr.py +0 -14
  389. scipy/sparse/compressed.py +0 -23
  390. scipy/sparse/construct.py +0 -6
  391. scipy/sparse/coo.py +0 -14
  392. scipy/sparse/csc.py +0 -3
  393. scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
  394. scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
  395. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
  396. scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
  397. scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
  398. scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
  399. scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
  400. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  401. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  402. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  403. scipy/sparse/csr.py +0 -5
  404. scipy/sparse/data.py +1 -6
  405. scipy/sparse/dia.py +0 -7
  406. scipy/sparse/dok.py +0 -10
  407. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
  408. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  409. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  410. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
  411. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  412. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  413. scipy/sparse/linalg/_interface.py +17 -18
  414. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  415. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  416. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  417. scipy/sparse/linalg/_isolve/minres.py +5 -5
  418. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  419. scipy/sparse/linalg/_isolve/utils.py +2 -8
  420. scipy/sparse/linalg/_matfuncs.py +1 -1
  421. scipy/sparse/linalg/_norm.py +1 -1
  422. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
  423. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
  424. scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
  425. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
  426. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  427. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  428. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  429. scipy/sparse/tests/test_base.py +214 -42
  430. scipy/sparse/tests/test_common1d.py +7 -7
  431. scipy/sparse/tests/test_construct.py +1 -1
  432. scipy/sparse/tests/test_coo.py +272 -4
  433. scipy/sparse/tests/test_sparsetools.py +5 -0
  434. scipy/sparse/tests/test_sputils.py +36 -7
  435. scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
  436. scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
  437. scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
  438. scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
  439. scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
  440. scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
  441. scipy/spatial/distance.py +49 -42
  442. scipy/spatial/tests/test_distance.py +15 -1
  443. scipy/spatial/tests/test_kdtree.py +1 -0
  444. scipy/spatial/tests/test_qhull.py +7 -2
  445. scipy/spatial/transform/__init__.py +5 -3
  446. scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
  447. scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
  448. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  449. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  450. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  451. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  452. scipy/special/__init__.py +1 -47
  453. scipy/special/_add_newdocs.py +34 -772
  454. scipy/special/_basic.py +22 -25
  455. scipy/special/_comb.cpython-313t-darwin.so +0 -0
  456. scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
  457. scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
  458. scipy/special/_logsumexp.py +67 -58
  459. scipy/special/_orthogonal.pyi +1 -1
  460. scipy/special/_specfun.cpython-313t-darwin.so +0 -0
  461. scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
  462. scipy/special/_spherical_bessel.py +4 -4
  463. scipy/special/_support_alternative_backends.py +212 -119
  464. scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
  465. scipy/special/_testutils.py +4 -4
  466. scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
  467. scipy/special/_ufuncs.pyi +1 -0
  468. scipy/special/_ufuncs.pyx +215 -1400
  469. scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
  470. scipy/special/_ufuncs_cxx.pxd +2 -15
  471. scipy/special/_ufuncs_cxx.pyx +5 -44
  472. scipy/special/_ufuncs_cxx_defs.h +2 -16
  473. scipy/special/_ufuncs_defs.h +0 -8
  474. scipy/special/cython_special.cpython-313t-darwin.so +0 -0
  475. scipy/special/cython_special.pxd +1 -1
  476. scipy/special/tests/_cython_examples/meson.build +10 -1
  477. scipy/special/tests/test_basic.py +153 -20
  478. scipy/special/tests/test_boost_ufuncs.py +3 -0
  479. scipy/special/tests/test_cdflib.py +35 -11
  480. scipy/special/tests/test_gammainc.py +16 -0
  481. scipy/special/tests/test_hyp2f1.py +2 -2
  482. scipy/special/tests/test_log1mexp.py +85 -0
  483. scipy/special/tests/test_logsumexp.py +206 -64
  484. scipy/special/tests/test_mpmath.py +1 -0
  485. scipy/special/tests/test_nan_inputs.py +1 -1
  486. scipy/special/tests/test_orthogonal.py +17 -18
  487. scipy/special/tests/test_sf_error.py +3 -2
  488. scipy/special/tests/test_sph_harm.py +6 -7
  489. scipy/special/tests/test_support_alternative_backends.py +211 -76
  490. scipy/stats/__init__.py +4 -1
  491. scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
  492. scipy/stats/_axis_nan_policy.py +5 -12
  493. scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
  494. scipy/stats/_continued_fraction.py +387 -0
  495. scipy/stats/_continuous_distns.py +277 -310
  496. scipy/stats/_correlation.py +1 -1
  497. scipy/stats/_covariance.py +6 -3
  498. scipy/stats/_discrete_distns.py +39 -32
  499. scipy/stats/_distn_infrastructure.py +39 -12
  500. scipy/stats/_distribution_infrastructure.py +900 -238
  501. scipy/stats/_entropy.py +9 -10
  502. scipy/{_lib → stats}/_finite_differences.py +1 -1
  503. scipy/stats/_hypotests.py +83 -50
  504. scipy/stats/_kde.py +53 -49
  505. scipy/stats/_ksstats.py +1 -1
  506. scipy/stats/_levy_stable/__init__.py +7 -15
  507. scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
  508. scipy/stats/_morestats.py +118 -73
  509. scipy/stats/_mstats_basic.py +13 -17
  510. scipy/stats/_mstats_extras.py +8 -8
  511. scipy/stats/_multivariate.py +89 -113
  512. scipy/stats/_new_distributions.py +97 -20
  513. scipy/stats/_page_trend_test.py +12 -5
  514. scipy/stats/_probability_distribution.py +265 -43
  515. scipy/stats/_qmc.py +14 -9
  516. scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
  517. scipy/stats/_qmvnt.py +16 -95
  518. scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
  519. scipy/stats/_quantile.py +335 -0
  520. scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
  521. scipy/stats/_resampling.py +4 -29
  522. scipy/stats/_sampling.py +1 -1
  523. scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
  524. scipy/stats/_stats.cpython-313t-darwin.so +0 -0
  525. scipy/stats/_stats_mstats_common.py +21 -2
  526. scipy/stats/_stats_py.py +550 -476
  527. scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
  528. scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
  529. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  530. scipy/stats/_variation.py +6 -8
  531. scipy/stats/_wilcoxon.py +13 -7
  532. scipy/stats/tests/common_tests.py +6 -4
  533. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  534. scipy/stats/tests/test_continued_fraction.py +173 -0
  535. scipy/stats/tests/test_continuous.py +379 -60
  536. scipy/stats/tests/test_continuous_basic.py +18 -12
  537. scipy/stats/tests/test_discrete_basic.py +14 -8
  538. scipy/stats/tests/test_discrete_distns.py +16 -16
  539. scipy/stats/tests/test_distributions.py +95 -75
  540. scipy/stats/tests/test_entropy.py +40 -48
  541. scipy/stats/tests/test_fit.py +4 -3
  542. scipy/stats/tests/test_hypotests.py +153 -24
  543. scipy/stats/tests/test_kdeoth.py +109 -41
  544. scipy/stats/tests/test_marray.py +289 -0
  545. scipy/stats/tests/test_morestats.py +79 -47
  546. scipy/stats/tests/test_mstats_basic.py +3 -3
  547. scipy/stats/tests/test_multivariate.py +434 -83
  548. scipy/stats/tests/test_qmc.py +13 -10
  549. scipy/stats/tests/test_quantile.py +199 -0
  550. scipy/stats/tests/test_rank.py +119 -112
  551. scipy/stats/tests/test_resampling.py +47 -56
  552. scipy/stats/tests/test_sampling.py +9 -4
  553. scipy/stats/tests/test_stats.py +799 -939
  554. scipy/stats/tests/test_variation.py +8 -6
  555. scipy/version.py +2 -2
  556. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  557. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  558. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +559 -566
  559. scipy-1.16.0rc2.dist-info/WHEEL +6 -0
  560. scipy/_lib/array_api_extra/_funcs.py +0 -484
  561. scipy/_lib/array_api_extra/_typing.py +0 -8
  562. scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
  563. scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
  564. scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
  565. scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
  566. scipy/spatial/qhull_src/COPYING.txt +0 -38
  567. scipy/special/libsf_error_state.dylib +0 -0
  568. scipy/special/tests/test_log_softmax.py +0 -109
  569. scipy/special/tests/test_xsf_cuda.py +0 -114
  570. scipy/special/xsf/binom.h +0 -89
  571. scipy/special/xsf/cdflib.h +0 -100
  572. scipy/special/xsf/cephes/airy.h +0 -307
  573. scipy/special/xsf/cephes/besselpoly.h +0 -51
  574. scipy/special/xsf/cephes/beta.h +0 -257
  575. scipy/special/xsf/cephes/cbrt.h +0 -131
  576. scipy/special/xsf/cephes/chbevl.h +0 -85
  577. scipy/special/xsf/cephes/chdtr.h +0 -193
  578. scipy/special/xsf/cephes/const.h +0 -87
  579. scipy/special/xsf/cephes/ellie.h +0 -293
  580. scipy/special/xsf/cephes/ellik.h +0 -251
  581. scipy/special/xsf/cephes/ellpe.h +0 -107
  582. scipy/special/xsf/cephes/ellpk.h +0 -117
  583. scipy/special/xsf/cephes/expn.h +0 -260
  584. scipy/special/xsf/cephes/gamma.h +0 -398
  585. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  586. scipy/special/xsf/cephes/hyperg.h +0 -361
  587. scipy/special/xsf/cephes/i0.h +0 -149
  588. scipy/special/xsf/cephes/i1.h +0 -158
  589. scipy/special/xsf/cephes/igam.h +0 -421
  590. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  591. scipy/special/xsf/cephes/igami.h +0 -313
  592. scipy/special/xsf/cephes/j0.h +0 -225
  593. scipy/special/xsf/cephes/j1.h +0 -198
  594. scipy/special/xsf/cephes/jv.h +0 -715
  595. scipy/special/xsf/cephes/k0.h +0 -164
  596. scipy/special/xsf/cephes/k1.h +0 -163
  597. scipy/special/xsf/cephes/kn.h +0 -243
  598. scipy/special/xsf/cephes/lanczos.h +0 -112
  599. scipy/special/xsf/cephes/ndtr.h +0 -275
  600. scipy/special/xsf/cephes/poch.h +0 -85
  601. scipy/special/xsf/cephes/polevl.h +0 -167
  602. scipy/special/xsf/cephes/psi.h +0 -194
  603. scipy/special/xsf/cephes/rgamma.h +0 -111
  604. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  605. scipy/special/xsf/cephes/shichi.h +0 -248
  606. scipy/special/xsf/cephes/sici.h +0 -224
  607. scipy/special/xsf/cephes/sindg.h +0 -221
  608. scipy/special/xsf/cephes/tandg.h +0 -139
  609. scipy/special/xsf/cephes/trig.h +0 -58
  610. scipy/special/xsf/cephes/unity.h +0 -186
  611. scipy/special/xsf/cephes/zeta.h +0 -172
  612. scipy/special/xsf/config.h +0 -304
  613. scipy/special/xsf/digamma.h +0 -205
  614. scipy/special/xsf/error.h +0 -57
  615. scipy/special/xsf/evalpoly.h +0 -47
  616. scipy/special/xsf/expint.h +0 -266
  617. scipy/special/xsf/hyp2f1.h +0 -694
  618. scipy/special/xsf/iv_ratio.h +0 -173
  619. scipy/special/xsf/lambertw.h +0 -150
  620. scipy/special/xsf/loggamma.h +0 -163
  621. scipy/special/xsf/sici.h +0 -200
  622. scipy/special/xsf/tools.h +0 -427
  623. scipy/special/xsf/trig.h +0 -164
  624. scipy/special/xsf/wright_bessel.h +0 -843
  625. scipy/special/xsf/zlog1.h +0 -35
  626. scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
  627. scipy-1.15.3.dist-info/WHEEL +0 -4
scipy/sparse/construct.py CHANGED
@@ -9,10 +9,8 @@ __all__ = [ # noqa: F822
9
9
  'block_diag',
10
10
  'bmat',
11
11
  'bsr_matrix',
12
- 'check_random_state',
13
12
  'coo_matrix',
14
13
  'csc_matrix',
15
- 'csr_hstack',
16
14
  'csr_matrix',
17
15
  'dia_matrix',
18
16
  'diags',
@@ -20,16 +18,12 @@ __all__ = [ # noqa: F822
20
18
  'get_index_dtype',
21
19
  'hstack',
22
20
  'identity',
23
- 'isscalarlike',
24
21
  'issparse',
25
22
  'kron',
26
23
  'kronsum',
27
- 'numbers',
28
24
  'rand',
29
25
  'random',
30
- 'rng_integers',
31
26
  'spdiags',
32
- 'upcast',
33
27
  'vstack',
34
28
  ]
35
29
 
scipy/sparse/coo.py CHANGED
@@ -7,23 +7,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
7
7
 
8
8
  __all__ = [ # noqa: F822
9
9
  'SparseEfficiencyWarning',
10
- 'check_reshape_kwargs',
11
- 'check_shape',
12
10
  'coo_matrix',
13
- 'coo_matvec',
14
- 'coo_tocsr',
15
- 'coo_todense',
16
- 'downcast_intp_index',
17
- 'getdata',
18
- 'getdtype',
19
- 'isshape',
20
11
  'isspmatrix_coo',
21
- 'operator',
22
12
  'spmatrix',
23
- 'to_native',
24
- 'upcast',
25
- 'upcast_char',
26
- 'warn',
27
13
  ]
28
14
 
29
15
 
scipy/sparse/csc.py CHANGED
@@ -7,11 +7,8 @@ from scipy._lib.deprecation import _sub_module_deprecation
7
7
 
8
8
  __all__ = [ # noqa: F822
9
9
  'csc_matrix',
10
- 'csc_tocsr',
11
- 'expandptr',
12
10
  'isspmatrix_csc',
13
11
  'spmatrix',
14
- 'upcast',
15
12
  ]
16
13
 
17
14
 
@@ -4,7 +4,7 @@ import numpy as np
4
4
  from numpy.testing import assert_array_equal, assert_equal
5
5
  import pytest
6
6
 
7
- from scipy.sparse import csr_array, diags_array
7
+ from scipy.sparse import csr_array, coo_array, diags_array
8
8
  from scipy.sparse.csgraph import (
9
9
  maximum_bipartite_matching, min_weight_full_bipartite_matching
10
10
  )
@@ -152,10 +152,16 @@ def test_matching_large_random_graph_with_one_edge_incident_to_each_vertex():
152
152
  @pytest.mark.parametrize('num_rows,num_cols', [(0, 0), (2, 0), (0, 3)])
153
153
  def test_min_weight_full_matching_trivial_graph(num_rows, num_cols):
154
154
  biadjacency = csr_array((num_cols, num_rows))
155
+ biadjacency1 = coo_array((num_cols, num_rows))
156
+
155
157
  row_ind, col_ind = min_weight_full_bipartite_matching(biadjacency)
156
158
  assert len(row_ind) == 0
157
159
  assert len(col_ind) == 0
158
160
 
161
+ row_ind1, col_ind1 = min_weight_full_bipartite_matching(biadjacency1)
162
+ assert len(row_ind1) == 0
163
+ assert len(col_ind1) == 0
164
+
159
165
 
160
166
  @pytest.mark.parametrize('biadjacency',
161
167
  [
@@ -169,6 +175,8 @@ def test_min_weight_full_matching_trivial_graph(num_rows, num_cols):
169
175
  def test_min_weight_full_matching_infeasible_problems(biadjacency):
170
176
  with pytest.raises(ValueError):
171
177
  min_weight_full_bipartite_matching(csr_array(biadjacency))
178
+ with pytest.raises(ValueError):
179
+ min_weight_full_bipartite_matching(coo_array(biadjacency))
172
180
 
173
181
 
174
182
  def test_min_weight_full_matching_large_infeasible():
@@ -223,13 +231,17 @@ def test_min_weight_full_matching_large_infeasible():
223
231
  ])
224
232
  with pytest.raises(ValueError, match='no full matching exists'):
225
233
  min_weight_full_bipartite_matching(csr_array(a))
234
+ with pytest.raises(ValueError, match='no full matching exists'):
235
+ min_weight_full_bipartite_matching(coo_array(a))
226
236
 
227
237
 
228
238
  @pytest.mark.thread_unsafe
229
239
  def test_explicit_zero_causes_warning():
240
+ biadjacency = csr_array(((2, 0, 3), (0, 1, 1), (0, 2, 3)))
230
241
  with pytest.warns(UserWarning):
231
- biadjacency = csr_array(((2, 0, 3), (0, 1, 1), (0, 2, 3)))
232
242
  min_weight_full_bipartite_matching(biadjacency)
243
+ with pytest.warns(UserWarning):
244
+ min_weight_full_bipartite_matching(biadjacency.tocoo())
233
245
 
234
246
 
235
247
  # General test for linear sum assignment solvers to make it possible to rely
@@ -154,9 +154,12 @@ def test_min_weight_full_bipartite_matching(graphs):
154
154
  func = spgraph.min_weight_full_bipartite_matching
155
155
 
156
156
  actual = func(A_sparse[0:2, 1:3])
157
- desired = func(sp.csc_array(A_dense)[0:2, 1:3])
157
+ A_csc = sp.csc_array(A_dense)
158
+ desired = func(A_csc[0:2, 1:3])
159
+ desired1 = func(A_csc[0:2, 1:3].tocoo())
158
160
 
159
161
  assert_equal(actual, desired)
162
+ assert_equal(actual, desired1)
160
163
 
161
164
 
162
165
  @check_sparse_version("0.15.4")
@@ -16,6 +16,7 @@ directed_G = np.array([[0, 3, 3, 0, 0],
16
16
  [1, 0, 0, 0, 0],
17
17
  [2, 0, 0, 2, 0]], dtype=float)
18
18
 
19
+ # Undirected version of directed_G
19
20
  undirected_G = np.array([[0, 3, 3, 1, 2],
20
21
  [3, 0, 0, 2, 4],
21
22
  [3, 0, 0, 0, 0],
@@ -24,6 +25,7 @@ undirected_G = np.array([[0, 3, 3, 1, 2],
24
25
 
25
26
  unweighted_G = (directed_G > 0).astype(float)
26
27
 
28
+ # Correct shortest path lengths for directed_G and undirected_G
27
29
  directed_SP = [[0, 3, 3, 5, 7],
28
30
  [3, 0, 6, 2, 4],
29
31
  [np.inf, np.inf, 0, np.inf, np.inf],
@@ -33,6 +35,35 @@ directed_SP = [[0, 3, 3, 5, 7],
33
35
  directed_2SP_0_to_3 = [[-9999, 0, -9999, 1, -9999],
34
36
  [-9999, 0, -9999, 4, 1]]
35
37
 
38
+ undirected_SP = np.array([[0, 3, 3, 1, 2],
39
+ [3, 0, 6, 2, 4],
40
+ [3, 6, 0, 4, 5],
41
+ [1, 2, 4, 0, 2],
42
+ [2, 4, 5, 2, 0]], dtype=float)
43
+
44
+ undirected_SP_limit_2 = np.array([[0, np.inf, np.inf, 1, 2],
45
+ [np.inf, 0, np.inf, 2, np.inf],
46
+ [np.inf, np.inf, 0, np.inf, np.inf],
47
+ [1, 2, np.inf, 0, 2],
48
+ [2, np.inf, np.inf, 2, 0]], dtype=float)
49
+
50
+ undirected_SP_limit_0 = np.ones((5, 5), dtype=float) - np.eye(5)
51
+ undirected_SP_limit_0[undirected_SP_limit_0 > 0] = np.inf
52
+
53
+ # Correct predecessors for directed_G and undirected_G
54
+ directed_pred = np.array([[-9999, 0, 0, 1, 1],
55
+ [3, -9999, 0, 1, 1],
56
+ [-9999, -9999, -9999, -9999, -9999],
57
+ [3, 0, 0, -9999, 1],
58
+ [4, 0, 0, 4, -9999]], dtype=float)
59
+
60
+ undirected_pred = np.array([[-9999, 0, 0, 0, 0],
61
+ [1, -9999, 0, 1, 1],
62
+ [2, 0, -9999, 0, 0],
63
+ [3, 3, 0, -9999, 3],
64
+ [4, 4, 0, 4, -9999]], dtype=float)
65
+
66
+ # Other graphs
36
67
  directed_sparse_zero_G = scipy.sparse.csr_array(
37
68
  (
38
69
  [0, 1, 2, 3, 1],
@@ -61,33 +92,6 @@ undirected_sparse_zero_SP = [[0, 0, 1, np.inf, np.inf],
61
92
  [np.inf, np.inf, np.inf, 0, 1],
62
93
  [np.inf, np.inf, np.inf, 1, 0]]
63
94
 
64
- directed_pred = np.array([[-9999, 0, 0, 1, 1],
65
- [3, -9999, 0, 1, 1],
66
- [-9999, -9999, -9999, -9999, -9999],
67
- [3, 0, 0, -9999, 1],
68
- [4, 0, 0, 4, -9999]], dtype=float)
69
-
70
- undirected_SP = np.array([[0, 3, 3, 1, 2],
71
- [3, 0, 6, 2, 4],
72
- [3, 6, 0, 4, 5],
73
- [1, 2, 4, 0, 2],
74
- [2, 4, 5, 2, 0]], dtype=float)
75
-
76
- undirected_SP_limit_2 = np.array([[0, np.inf, np.inf, 1, 2],
77
- [np.inf, 0, np.inf, 2, np.inf],
78
- [np.inf, np.inf, 0, np.inf, np.inf],
79
- [1, 2, np.inf, 0, 2],
80
- [2, np.inf, np.inf, 2, 0]], dtype=float)
81
-
82
- undirected_SP_limit_0 = np.ones((5, 5), dtype=float) - np.eye(5)
83
- undirected_SP_limit_0[undirected_SP_limit_0 > 0] = np.inf
84
-
85
- undirected_pred = np.array([[-9999, 0, 0, 0, 0],
86
- [1, -9999, 0, 1, 1],
87
- [2, 0, -9999, 0, 0],
88
- [3, 3, 0, -9999, 3],
89
- [4, 4, 0, 4, -9999]], dtype=float)
90
-
91
95
  directed_negative_weighted_G = np.array([[0, 0, 0],
92
96
  [-1, 0, 0],
93
97
  [0, -1, 0]], dtype=float)
@@ -217,6 +221,28 @@ def test_dijkstra_min_only_random(n):
217
221
  p = pred[p]
218
222
 
219
223
 
224
+ @pytest.mark.parametrize('n', (10, 100))
225
+ @pytest.mark.parametrize("method", ['FW', 'J', 'BF'])
226
+ @pytest.mark.parametrize('directed', (True, False))
227
+ def test_star_graph(n, method, directed):
228
+ # Build the star graph
229
+ star_arr = np.zeros((n, n), dtype=float)
230
+ star_center_idx = 0
231
+ star_arr[star_center_idx, :] = star_arr[:, star_center_idx] = range(n)
232
+ G = scipy.sparse.csr_matrix(star_arr, shape=(n, n))
233
+ # Build the distances matrix
234
+ SP_solution = np.zeros((n, n), dtype=float)
235
+ SP_solution[:] = star_arr[star_center_idx]
236
+ for idx in range(1, n):
237
+ SP_solution[idx] += star_arr[idx, star_center_idx]
238
+ np.fill_diagonal(SP_solution, 0)
239
+
240
+ SP = shortest_path(G, method=method, directed=directed)
241
+ assert_allclose(
242
+ SP_solution, SP
243
+ )
244
+
245
+
220
246
  def test_dijkstra_random():
221
247
  # reproduces the hang observed in gh-17782
222
248
  n = 10
@@ -307,6 +333,15 @@ def test_construct_shortest_path():
307
333
  for directed in (True, False):
308
334
  check(method, directed)
309
335
 
336
+ @pytest.mark.parametrize("directed", [True, False])
337
+ def test_construct_dist_matrix_predecessors_error(directed):
338
+ SP1, pred = shortest_path(directed_G,
339
+ directed=directed,
340
+ overwrite=False,
341
+ return_predecessors=True)
342
+ assert_raises(TypeError, construct_dist_matrix,
343
+ directed_G, pred.astype(np.int64), directed)
344
+
310
345
 
311
346
  def test_unweighted_path():
312
347
  def check(method, directed):
@@ -419,15 +454,34 @@ def test_yen_directed():
419
454
  assert_allclose(predecessors, directed_2SP_0_to_3)
420
455
 
421
456
 
457
+ def test_yen_dense():
458
+ dense_undirected_G = np.array([
459
+ [0, 3, 3, 1, 2],
460
+ [3, 0, 7, 6, 5],
461
+ [3, 7, 0, 4, 0],
462
+ [1, 6, 4, 0, 2],
463
+ [2, 5, 0, 2, 0]], dtype=float)
464
+ distances = yen(
465
+ dense_undirected_G,
466
+ source=0,
467
+ sink=4,
468
+ K=5,
469
+ directed=False,
470
+ )
471
+ assert_allclose(distances, [2., 3., 8., 9., 11.])
472
+
473
+
422
474
  def test_yen_undirected():
423
475
  distances = yen(
424
476
  undirected_G,
425
477
  source=0,
426
478
  sink=3,
427
479
  K=4,
480
+ directed=False,
428
481
  )
429
482
  assert_allclose(distances, [1., 4., 5., 8.])
430
483
 
484
+
431
485
  def test_yen_unweighted():
432
486
  # Ask for more paths than there are, verify only the available paths are returned
433
487
  distances, predecessors = yen(
@@ -441,6 +495,7 @@ def test_yen_unweighted():
441
495
  assert_allclose(distances, [2., 3.])
442
496
  assert_allclose(predecessors, directed_2SP_0_to_3)
443
497
 
498
+
444
499
  def test_yen_no_paths():
445
500
  distances = yen(
446
501
  directed_G,
@@ -450,6 +505,7 @@ def test_yen_no_paths():
450
505
  )
451
506
  assert distances.size == 0
452
507
 
508
+
453
509
  def test_yen_negative_weights():
454
510
  distances = yen(
455
511
  directed_negative_weighted_G,
scipy/sparse/csr.py CHANGED
@@ -6,14 +6,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
6
6
 
7
7
 
8
8
  __all__ = [ # noqa: F822
9
- 'csr_count_blocks',
10
9
  'csr_matrix',
11
- 'csr_tobsr',
12
- 'csr_tocsc',
13
- 'get_csr_submatrix',
14
10
  'isspmatrix_csr',
15
11
  'spmatrix',
16
- 'upcast',
17
12
  ]
18
13
 
19
14
 
scipy/sparse/data.py CHANGED
@@ -5,12 +5,7 @@
5
5
  from scipy._lib.deprecation import _sub_module_deprecation
6
6
 
7
7
 
8
- __all__ = [ # noqa: F822
9
- 'isscalarlike',
10
- 'name',
11
- 'npfunc',
12
- 'validateaxis',
13
- ]
8
+ __all__ : list[str] = []
14
9
 
15
10
 
16
11
  def __dir__():
scipy/sparse/dia.py CHANGED
@@ -6,16 +6,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
6
6
 
7
7
 
8
8
  __all__ = [ # noqa: F822
9
- 'check_shape',
10
9
  'dia_matrix',
11
- 'dia_matvec',
12
- 'get_sum_dtype',
13
- 'getdtype',
14
- 'isshape',
15
10
  'isspmatrix_dia',
16
11
  'spmatrix',
17
- 'upcast_char',
18
- 'validateaxis',
19
12
  ]
20
13
 
21
14
 
scipy/sparse/dok.py CHANGED
@@ -6,19 +6,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
6
6
 
7
7
 
8
8
  __all__ = [ # noqa: F822
9
- 'IndexMixin',
10
- 'check_shape',
11
9
  'dok_matrix',
12
- 'getdtype',
13
- 'isdense',
14
- 'isintlike',
15
- 'isscalarlike',
16
- 'isshape',
17
10
  'isspmatrix_dok',
18
- 'itertools',
19
11
  'spmatrix',
20
- 'upcast',
21
- 'upcast_scalar',
22
12
  ]
23
13
 
24
14
 
@@ -26,6 +26,7 @@ __all__ = ['use_solver', 'spsolve', 'splu', 'spilu', 'factorized',
26
26
 
27
27
 
28
28
  class MatrixRankWarning(UserWarning):
29
+ """Warning for exactly singular matrices."""
29
30
  pass
30
31
 
31
32
 
@@ -371,6 +372,10 @@ def splu(A, permc_spec=None, diag_pivot_thresh=None,
371
372
 
372
373
  Notes
373
374
  -----
375
+ When a real array is factorized and the returned SuperLU object's ``solve()``
376
+ method is used with complex arguments an error is generated. Instead, cast the
377
+ initial array to complex and then factorize.
378
+
374
379
  This function uses the SuperLU library.
375
380
 
376
381
  References
@@ -468,6 +473,10 @@ def spilu(A, drop_tol=None, fill_factor=None, drop_rule=None, permc_spec=None,
468
473
 
469
474
  Notes
470
475
  -----
476
+ When a real array is factorized and the returned SuperLU object's ``solve()`` method
477
+ is used with complex arguments an error is generated. Instead, cast the initial
478
+ array to complex and then factorize.
479
+
471
480
  To improve the better approximation to the inverse, you may need to
472
481
  increase `fill_factor` AND decrease `drop_tol`.
473
482
 
@@ -3,7 +3,7 @@ import threading
3
3
 
4
4
  import numpy as np
5
5
  from numpy import array, finfo, arange, eye, all, unique, ones, dot
6
- import numpy.random as random
6
+ from numpy.exceptions import ComplexWarning
7
7
  from numpy.testing import (
8
8
  assert_array_almost_equal, assert_almost_equal,
9
9
  assert_equal, assert_array_equal, assert_, assert_allclose,
@@ -22,7 +22,6 @@ from scipy.sparse.linalg._dsolve import (spsolve, use_solver, splu, spilu,
22
22
  import scipy.sparse
23
23
 
24
24
  from scipy._lib._testutils import check_free_memory
25
- from scipy._lib._util import ComplexWarning
26
25
 
27
26
 
28
27
  sup_sparse_efficiency = suppress_warnings()
@@ -61,7 +60,6 @@ class TestFactorized:
61
60
  d = arange(n) + 1
62
61
  self.n = n
63
62
  self.A = dia_array(((d, 2*d, d[::-1]), (-3, 0, 5)), shape=(n,n)).tocsc()
64
- random.seed(1234)
65
63
 
66
64
  def _check_singular(self):
67
65
  A = csc_array((5,5), dtype='d')
@@ -71,7 +69,8 @@ class TestFactorized:
71
69
  def _check_non_singular(self):
72
70
  # Make a diagonal dominant, to make sure it is not singular
73
71
  n = 5
74
- a = csc_array(random.rand(n, n))
72
+ rng = np.random.default_rng(14332)
73
+ a = csc_array(rng.random((n, n)))
75
74
  b = ones(n)
76
75
 
77
76
  expected = splu(a).solve(b)
@@ -113,9 +112,11 @@ class TestFactorized:
113
112
  def test_call_with_incorrectly_sized_matrix_without_umfpack(self):
114
113
  use_solver(useUmfpack=False)
115
114
  solve = factorized(self.A)
116
- b = random.rand(4)
117
- B = random.rand(4, 3)
118
- BB = random.rand(self.n, 3, 9)
115
+
116
+ rng = np.random.default_rng(230498)
117
+ b = rng.random(4)
118
+ B = rng.random((4, 3))
119
+ BB = rng.random((self.n, 3, 9))
119
120
 
120
121
  with assert_raises(ValueError, match="is of incompatible size"):
121
122
  solve(b)
@@ -129,9 +130,11 @@ class TestFactorized:
129
130
  def test_call_with_incorrectly_sized_matrix_with_umfpack(self):
130
131
  use_solver(useUmfpack=True)
131
132
  solve = factorized(self.A)
132
- b = random.rand(4)
133
- B = random.rand(4, 3)
134
- BB = random.rand(self.n, 3, 9)
133
+
134
+ rng = np.random.default_rng(643095823)
135
+ b = rng.random(4)
136
+ B = rng.random((4, 3))
137
+ BB = rng.random((self.n, 3, 9))
135
138
 
136
139
  # does not raise
137
140
  solve(b)
@@ -144,7 +147,8 @@ class TestFactorized:
144
147
  def test_call_with_cast_to_complex_without_umfpack(self):
145
148
  use_solver(useUmfpack=False)
146
149
  solve = factorized(self.A)
147
- b = random.rand(4)
150
+ rng = np.random.default_rng(23454)
151
+ b = rng.random(4)
148
152
  for t in [np.complex64, np.complex128]:
149
153
  with assert_raises(TypeError, match="Cannot cast array data"):
150
154
  solve(b.astype(t))
@@ -153,7 +157,8 @@ class TestFactorized:
153
157
  def test_call_with_cast_to_complex_with_umfpack(self):
154
158
  use_solver(useUmfpack=True)
155
159
  solve = factorized(self.A)
156
- b = random.rand(4)
160
+ rng = np.random.default_rng(23454)
161
+ b = rng.random(4)
157
162
  for t in [np.complex64, np.complex128]:
158
163
  assert_warns(ComplexWarning, solve, b.astype(t))
159
164
 
@@ -246,8 +251,8 @@ class TestLinsolve:
246
251
  [1., 0., 1.],
247
252
  [0., 0., 1.]])
248
253
  As = csc_array(Adense)
249
- random.seed(1234)
250
- x = random.randn(3)
254
+ rng = np.random.default_rng(1234)
255
+ x = rng.standard_normal(3)
251
256
  b = As@x
252
257
  x2 = spsolve(As, b)
253
258
 
@@ -258,8 +263,8 @@ class TestLinsolve:
258
263
  [1., 0., 1.],
259
264
  [0., 0., 1.]])
260
265
  As = csc_array(Adense)
261
- random.seed(1234)
262
- x = random.randn(3, 4)
266
+ rng = np.random.default_rng(1234)
267
+ x = rng.standard_normal((3, 4))
263
268
  Bdense = As.dot(x)
264
269
  Bs = csc_array(Bdense)
265
270
  x2 = spsolve(As, Bs)
@@ -452,7 +457,6 @@ class TestSplu:
452
457
  d = arange(n) + 1
453
458
  self.n = n
454
459
  self.A = dia_array(((d, 2*d, d[::-1]), (-3, 0, 5)), shape=(n, n)).tocsc()
455
- random.seed(1234)
456
460
 
457
461
  def _smoketest(self, spxlu, check, dtype, idx_dtype):
458
462
  if np.issubdtype(dtype, np.complexfloating):
@@ -465,7 +469,7 @@ class TestSplu:
465
469
  A.indptr = A.indptr.astype(idx_dtype, copy=False)
466
470
  lu = spxlu(A)
467
471
 
468
- rng = random.RandomState(1234)
472
+ rng = np.random.RandomState(1234)
469
473
 
470
474
  # Input shapes
471
475
  for k in [None, 1, 2, self.n, self.n+2]:
@@ -552,7 +556,7 @@ class TestSplu:
552
556
  def test_splu_basic(self):
553
557
  # Test basic splu functionality.
554
558
  n = 30
555
- rng = random.RandomState(12)
559
+ rng = np.random.RandomState(12)
556
560
  a = rng.rand(n, n)
557
561
  a[a < 0.95] = 0
558
562
  # First test with a singular matrix
@@ -572,7 +576,8 @@ class TestSplu:
572
576
  def test_splu_perm(self):
573
577
  # Test the permutation vectors exposed by splu.
574
578
  n = 30
575
- a = random.random((n, n))
579
+ rng = np.random.default_rng(1342354)
580
+ a = rng.random((n, n))
576
581
  a[a < 0.95] = 0
577
582
  # Make a diagonal dominant, to make sure it is not singular
578
583
  a += 4*eye(n)
@@ -621,7 +626,8 @@ class TestSplu:
621
626
  def test_lu_refcount(self):
622
627
  # Test that we are keeping track of the reference count with splu.
623
628
  n = 30
624
- a = random.random((n, n))
629
+ rng = np.random.default_rng(1342354)
630
+ a = rng.random((n, n))
625
631
  a[a < 0.95] = 0
626
632
  # Make a diagonal dominant, to make sure it is not singular
627
633
  a += 4*eye(n)
@@ -638,14 +644,15 @@ class TestSplu:
638
644
 
639
645
  def test_bad_inputs(self):
640
646
  A = self.A.tocsc()
647
+ rng = np.random.default_rng(235634)
641
648
 
642
649
  assert_raises(ValueError, splu, A[:,:4])
643
650
  assert_raises(ValueError, spilu, A[:,:4])
644
651
 
645
652
  for lu in [splu(A), spilu(A)]:
646
- b = random.rand(42)
647
- B = random.rand(42, 3)
648
- BB = random.rand(self.n, 3, 9)
653
+ b = rng.random(42)
654
+ B = rng.random((42, 3))
655
+ BB = rng.random((self.n, 3, 9))
649
656
  assert_raises(ValueError, lu.solve, b)
650
657
  assert_raises(ValueError, lu.solve, B)
651
658
  assert_raises(ValueError, lu.solve, BB)
@@ -877,14 +884,14 @@ class TestSpsolveTriangular:
877
884
  A = A.tocsr(copy=False)
878
885
  return A
879
886
 
880
- np.random.seed(1234)
887
+ rng = np.random.default_rng(1234)
881
888
  A = random_triangle_matrix(n, lower=lower)
882
889
  if choice_of_b == "floats":
883
- b = np.random.rand(n, m)
890
+ b = rng.random((n, m))
884
891
  elif choice_of_b == "ints":
885
- b = np.random.randint(-9, 9, (n, m))
892
+ b = rng.integers(-9, 9, (n, m))
886
893
  elif choice_of_b == "complexints":
887
- b = np.random.randint(-9, 9, (n, m)) + np.random.randint(-9, 9, (n, m)) * 1j
894
+ b = rng.integers(-9, 9, (n, m)) + rng.integers(-9, 9, (n, m)) * 1j
888
895
  else:
889
896
  raise ValueError(
890
897
  "choice_of_b must be 'floats', 'ints', or 'complexints'.")