scipy 1.15.2__cp311-cp311-macosx_12_0_arm64.whl → 1.16.0rc1__cp311-cp311-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 (626) 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-311-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-311-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-311-darwin.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-311-darwin.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-311-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-311-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-311-darwin.so +0 -0
  96. scipy/cluster/_optimal_leaf_ordering.cpython-311-darwin.so +0 -0
  97. scipy/cluster/_vq.cpython-311-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-311-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-311-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-311-darwin.so +0 -0
  131. scipy/integrate/_ode.py +9 -2
  132. scipy/integrate/_odepack.cpython-311-darwin.so +0 -0
  133. scipy/integrate/_quad_vec.py +21 -29
  134. scipy/integrate/_quadpack.cpython-311-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-311-darwin.so +0 -0
  140. scipy/integrate/_vode.cpython-311-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-311-darwin.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-311-darwin.so +0 -0
  152. scipy/interpolate/_fitpack2.py +9 -6
  153. scipy/interpolate/_fitpack_impl.py +32 -26
  154. scipy/interpolate/_fitpack_repro.py +23 -19
  155. scipy/interpolate/_interpnd.cpython-311-darwin.so +0 -0
  156. scipy/interpolate/_interpolate.py +30 -12
  157. scipy/interpolate/_ndbspline.py +13 -18
  158. scipy/interpolate/_ndgriddata.py +5 -8
  159. scipy/interpolate/_polyint.py +95 -31
  160. scipy/interpolate/_ppoly.cpython-311-darwin.so +0 -0
  161. scipy/interpolate/_rbf.py +2 -2
  162. scipy/interpolate/_rbfinterp.py +1 -1
  163. scipy/interpolate/_rgi.py +31 -26
  164. scipy/interpolate/_rgi_cython.cpython-311-darwin.so +0 -0
  165. scipy/interpolate/dfitpack.py +0 -20
  166. scipy/interpolate/interpnd.py +1 -2
  167. scipy/interpolate/tests/test_bary_rational.py +2 -2
  168. scipy/interpolate/tests/test_bsplines.py +97 -1
  169. scipy/interpolate/tests/test_fitpack2.py +39 -1
  170. scipy/interpolate/tests/test_interpnd.py +32 -20
  171. scipy/interpolate/tests/test_interpolate.py +48 -4
  172. scipy/interpolate/tests/test_rgi.py +2 -1
  173. scipy/io/_fast_matrix_market/__init__.py +2 -0
  174. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  175. scipy/io/_harwell_boeing/hb.py +7 -11
  176. scipy/io/_idl.py +5 -7
  177. scipy/io/_netcdf.py +15 -5
  178. scipy/io/_test_fortran.cpython-311-darwin.so +0 -0
  179. scipy/io/arff/tests/test_arffread.py +3 -3
  180. scipy/io/matlab/__init__.py +5 -3
  181. scipy/io/matlab/_mio.py +4 -1
  182. scipy/io/matlab/_mio5.py +19 -13
  183. scipy/io/matlab/_mio5_utils.cpython-311-darwin.so +0 -0
  184. scipy/io/matlab/_mio_utils.cpython-311-darwin.so +0 -0
  185. scipy/io/matlab/_miobase.py +4 -1
  186. scipy/io/matlab/_streams.cpython-311-darwin.so +0 -0
  187. scipy/io/matlab/tests/test_mio.py +46 -18
  188. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  189. scipy/io/tests/test_mmio.py +7 -1
  190. scipy/io/tests/test_wavfile.py +41 -0
  191. scipy/io/wavfile.py +57 -10
  192. scipy/linalg/_basic.py +113 -86
  193. scipy/linalg/_cythonized_array_utils.cpython-311-darwin.so +0 -0
  194. scipy/linalg/_decomp.py +22 -9
  195. scipy/linalg/_decomp_cholesky.py +28 -13
  196. scipy/linalg/_decomp_cossin.py +45 -30
  197. scipy/linalg/_decomp_interpolative.cpython-311-darwin.so +0 -0
  198. scipy/linalg/_decomp_ldl.py +4 -1
  199. scipy/linalg/_decomp_lu.py +18 -6
  200. scipy/linalg/_decomp_lu_cython.cpython-311-darwin.so +0 -0
  201. scipy/linalg/_decomp_polar.py +2 -0
  202. scipy/linalg/_decomp_qr.py +6 -2
  203. scipy/linalg/_decomp_qz.py +3 -0
  204. scipy/linalg/_decomp_schur.py +3 -1
  205. scipy/linalg/_decomp_svd.py +13 -2
  206. scipy/linalg/_decomp_update.cpython-311-darwin.so +0 -0
  207. scipy/linalg/_expm_frechet.py +4 -0
  208. scipy/linalg/_fblas.cpython-311-darwin.so +0 -0
  209. scipy/linalg/_flapack.cpython-311-darwin.so +0 -0
  210. scipy/linalg/_matfuncs.py +187 -4
  211. scipy/linalg/_matfuncs_expm.cpython-311-darwin.so +0 -0
  212. scipy/linalg/_matfuncs_schur_sqrtm.cpython-311-darwin.so +0 -0
  213. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  214. scipy/linalg/_matfuncs_sqrtm_triu.cpython-311-darwin.so +0 -0
  215. scipy/linalg/_procrustes.py +2 -0
  216. scipy/linalg/_sketches.py +17 -6
  217. scipy/linalg/_solve_toeplitz.cpython-311-darwin.so +0 -0
  218. scipy/linalg/_solvers.py +7 -2
  219. scipy/linalg/_special_matrices.py +26 -36
  220. scipy/linalg/cython_blas.cpython-311-darwin.so +0 -0
  221. scipy/linalg/cython_lapack.cpython-311-darwin.so +0 -0
  222. scipy/linalg/lapack.py +22 -2
  223. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  224. scipy/linalg/tests/test_basic.py +31 -16
  225. scipy/linalg/tests/test_batch.py +588 -0
  226. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  227. scipy/linalg/tests/test_decomp.py +40 -3
  228. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  229. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  230. scipy/linalg/tests/test_interpolative.py +17 -0
  231. scipy/linalg/tests/test_lapack.py +115 -7
  232. scipy/linalg/tests/test_matfuncs.py +157 -102
  233. scipy/linalg/tests/test_procrustes.py +0 -7
  234. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  235. scipy/linalg/tests/test_special_matrices.py +1 -5
  236. scipy/ndimage/__init__.py +1 -0
  237. scipy/ndimage/_cytest.cpython-311-darwin.so +0 -0
  238. scipy/ndimage/_delegators.py +8 -2
  239. scipy/ndimage/_filters.py +433 -5
  240. scipy/ndimage/_interpolation.py +36 -6
  241. scipy/ndimage/_measurements.py +4 -2
  242. scipy/ndimage/_morphology.py +5 -0
  243. scipy/ndimage/_nd_image.cpython-311-darwin.so +0 -0
  244. scipy/ndimage/_ndimage_api.py +2 -1
  245. scipy/ndimage/_ni_docstrings.py +5 -1
  246. scipy/ndimage/_ni_label.cpython-311-darwin.so +0 -0
  247. scipy/ndimage/_ni_support.py +1 -5
  248. scipy/ndimage/_rank_filter_1d.cpython-311-darwin.so +0 -0
  249. scipy/ndimage/_support_alternative_backends.py +18 -6
  250. scipy/ndimage/tests/test_filters.py +351 -259
  251. scipy/ndimage/tests/test_fourier.py +7 -9
  252. scipy/ndimage/tests/test_interpolation.py +68 -61
  253. scipy/ndimage/tests/test_measurements.py +18 -35
  254. scipy/ndimage/tests/test_morphology.py +143 -131
  255. scipy/ndimage/tests/test_splines.py +1 -3
  256. scipy/odr/__odrpack.cpython-311-darwin.so +0 -0
  257. scipy/optimize/_basinhopping.py +13 -7
  258. scipy/optimize/_bglu_dense.cpython-311-darwin.so +0 -0
  259. scipy/optimize/_bracket.py +46 -26
  260. scipy/optimize/_chandrupatla.py +9 -10
  261. scipy/optimize/_cobyla_py.py +104 -123
  262. scipy/optimize/_constraints.py +14 -10
  263. scipy/optimize/_differentiable_functions.py +371 -230
  264. scipy/optimize/_differentialevolution.py +4 -3
  265. scipy/optimize/_dual_annealing.py +1 -1
  266. scipy/optimize/_elementwise.py +1 -4
  267. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  268. scipy/optimize/_lbfgsb.cpython-311-darwin.so +0 -0
  269. scipy/optimize/_lbfgsb_py.py +57 -16
  270. scipy/optimize/_linprog_doc.py +2 -2
  271. scipy/optimize/_linprog_highs.py +11 -11
  272. scipy/optimize/_linprog_ip.py +25 -10
  273. scipy/optimize/_linprog_util.py +18 -19
  274. scipy/optimize/_lsq/common.py +3 -3
  275. scipy/optimize/_lsq/dogbox.py +16 -2
  276. scipy/optimize/_lsq/givens_elimination.cpython-311-darwin.so +0 -0
  277. scipy/optimize/_lsq/least_squares.py +198 -126
  278. scipy/optimize/_lsq/lsq_linear.py +6 -6
  279. scipy/optimize/_lsq/trf.py +35 -8
  280. scipy/optimize/_milp.py +3 -1
  281. scipy/optimize/_minimize.py +105 -36
  282. scipy/optimize/_minpack.cpython-311-darwin.so +0 -0
  283. scipy/optimize/_minpack_py.py +21 -14
  284. scipy/optimize/_moduleTNC.cpython-311-darwin.so +0 -0
  285. scipy/optimize/_nnls.py +20 -21
  286. scipy/optimize/_nonlin.py +34 -3
  287. scipy/optimize/_numdiff.py +288 -110
  288. scipy/optimize/_optimize.py +86 -48
  289. scipy/optimize/_remove_redundancy.py +5 -5
  290. scipy/optimize/_root_scalar.py +1 -1
  291. scipy/optimize/_shgo.py +6 -0
  292. scipy/optimize/_shgo_lib/_complex.py +1 -1
  293. scipy/optimize/_slsqp_py.py +216 -124
  294. scipy/optimize/_slsqplib.cpython-311-darwin.so +0 -0
  295. scipy/optimize/_spectral.py +1 -1
  296. scipy/optimize/_tnc.py +8 -1
  297. scipy/optimize/_trlib/_trlib.cpython-311-darwin.so +0 -0
  298. scipy/optimize/_trustregion.py +20 -6
  299. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  300. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  301. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  302. scipy/optimize/_trustregion_constr/projections.py +12 -8
  303. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  304. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  305. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  306. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  307. scipy/optimize/_trustregion_exact.py +0 -1
  308. scipy/optimize/_zeros.cpython-311-darwin.so +0 -0
  309. scipy/optimize/_zeros_py.py +97 -17
  310. scipy/optimize/cython_optimize/_zeros.cpython-311-darwin.so +0 -0
  311. scipy/optimize/slsqp.py +0 -1
  312. scipy/optimize/tests/test__basinhopping.py +1 -1
  313. scipy/optimize/tests/test__differential_evolution.py +4 -4
  314. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  315. scipy/optimize/tests/test__numdiff.py +66 -22
  316. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  317. scipy/optimize/tests/test__shgo.py +9 -1
  318. scipy/optimize/tests/test_bracket.py +71 -46
  319. scipy/optimize/tests/test_chandrupatla.py +133 -135
  320. scipy/optimize/tests/test_cobyla.py +74 -45
  321. scipy/optimize/tests/test_constraints.py +1 -1
  322. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  323. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  324. scipy/optimize/tests/test_least_squares.py +125 -13
  325. scipy/optimize/tests/test_linear_assignment.py +3 -3
  326. scipy/optimize/tests/test_linprog.py +3 -3
  327. scipy/optimize/tests/test_lsq_linear.py +5 -5
  328. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  329. scipy/optimize/tests/test_minpack.py +4 -4
  330. scipy/optimize/tests/test_nnls.py +43 -3
  331. scipy/optimize/tests/test_nonlin.py +36 -0
  332. scipy/optimize/tests/test_optimize.py +95 -17
  333. scipy/optimize/tests/test_slsqp.py +36 -4
  334. scipy/optimize/tests/test_zeros.py +34 -1
  335. scipy/signal/__init__.py +12 -23
  336. scipy/signal/_delegators.py +568 -0
  337. scipy/signal/_filter_design.py +459 -241
  338. scipy/signal/_fir_filter_design.py +262 -90
  339. scipy/signal/_lti_conversion.py +3 -2
  340. scipy/signal/_ltisys.py +118 -91
  341. scipy/signal/_peak_finding_utils.cpython-311-darwin.so +0 -0
  342. scipy/signal/_polyutils.py +172 -0
  343. scipy/signal/_short_time_fft.py +553 -76
  344. scipy/signal/_signal_api.py +30 -0
  345. scipy/signal/_signaltools.py +719 -396
  346. scipy/signal/_sigtools.cpython-311-darwin.so +0 -0
  347. scipy/signal/_sosfilt.cpython-311-darwin.so +0 -0
  348. scipy/signal/_spectral_py.py +221 -50
  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-311-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 +5 -182
  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 +231 -5
  364. scipy/signal/tests/test_signaltools.py +2149 -1348
  365. scipy/signal/tests/test_spectral.py +19 -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 +269 -120
  373. scipy/sparse/_bsr.py +7 -4
  374. scipy/sparse/_compressed.py +59 -234
  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-311-darwin.so +0 -0
  379. scipy/sparse/_csr.py +2 -2
  380. scipy/sparse/_data.py +48 -48
  381. scipy/sparse/_dia.py +105 -21
  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-311-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-311-darwin.so +0 -0
  394. scipy/sparse/csgraph/_matching.cpython-311-darwin.so +0 -0
  395. scipy/sparse/csgraph/_min_spanning_tree.cpython-311-darwin.so +0 -0
  396. scipy/sparse/csgraph/_reordering.cpython-311-darwin.so +0 -0
  397. scipy/sparse/csgraph/_shortest_path.cpython-311-darwin.so +0 -0
  398. scipy/sparse/csgraph/_tools.cpython-311-darwin.so +0 -0
  399. scipy/sparse/csgraph/_traversal.cpython-311-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-311-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-311-darwin.so +0 -0
  411. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  412. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  413. scipy/sparse/linalg/_expm_multiply.py +8 -3
  414. scipy/sparse/linalg/_interface.py +29 -26
  415. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  416. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  417. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  418. scipy/sparse/linalg/_isolve/minres.py +5 -5
  419. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  420. scipy/sparse/linalg/_isolve/utils.py +2 -8
  421. scipy/sparse/linalg/_matfuncs.py +1 -1
  422. scipy/sparse/linalg/_norm.py +1 -1
  423. scipy/sparse/linalg/_propack/_cpropack.cpython-311-darwin.so +0 -0
  424. scipy/sparse/linalg/_propack/_dpropack.cpython-311-darwin.so +0 -0
  425. scipy/sparse/linalg/_propack/_spropack.cpython-311-darwin.so +0 -0
  426. scipy/sparse/linalg/_propack/_zpropack.cpython-311-darwin.so +0 -0
  427. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  428. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  429. scipy/sparse/linalg/tests/test_interface.py +35 -0
  430. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  431. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  432. scipy/sparse/tests/test_base.py +217 -40
  433. scipy/sparse/tests/test_common1d.py +17 -12
  434. scipy/sparse/tests/test_construct.py +1 -1
  435. scipy/sparse/tests/test_coo.py +272 -4
  436. scipy/sparse/tests/test_sparsetools.py +5 -0
  437. scipy/sparse/tests/test_sputils.py +36 -7
  438. scipy/spatial/_ckdtree.cpython-311-darwin.so +0 -0
  439. scipy/spatial/_hausdorff.cpython-311-darwin.so +0 -0
  440. scipy/spatial/_qhull.cpython-311-darwin.so +0 -0
  441. scipy/spatial/_voronoi.cpython-311-darwin.so +0 -0
  442. scipy/spatial/distance.py +49 -42
  443. scipy/spatial/tests/test_distance.py +3 -1
  444. scipy/spatial/tests/test_kdtree.py +1 -0
  445. scipy/spatial/tests/test_qhull.py +106 -2
  446. scipy/spatial/transform/__init__.py +5 -3
  447. scipy/spatial/transform/_rigid_transform.cpython-311-darwin.so +0 -0
  448. scipy/spatial/transform/_rotation.cpython-311-darwin.so +0 -0
  449. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  450. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  451. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  452. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  453. scipy/special/__init__.py +1 -47
  454. scipy/special/_add_newdocs.py +34 -772
  455. scipy/special/_basic.py +22 -25
  456. scipy/special/_comb.cpython-311-darwin.so +0 -0
  457. scipy/special/_ellip_harm_2.cpython-311-darwin.so +0 -0
  458. scipy/special/_gufuncs.cpython-311-darwin.so +0 -0
  459. scipy/special/_logsumexp.py +83 -69
  460. scipy/special/_orthogonal.pyi +1 -1
  461. scipy/special/_specfun.cpython-311-darwin.so +0 -0
  462. scipy/special/_special_ufuncs.cpython-311-darwin.so +0 -0
  463. scipy/special/_spherical_bessel.py +4 -4
  464. scipy/special/_support_alternative_backends.py +212 -119
  465. scipy/special/_test_internal.cpython-311-darwin.so +0 -0
  466. scipy/special/_testutils.py +4 -4
  467. scipy/special/_ufuncs.cpython-311-darwin.so +0 -0
  468. scipy/special/_ufuncs.pyi +1 -0
  469. scipy/special/_ufuncs.pyx +215 -1400
  470. scipy/special/_ufuncs_cxx.cpython-311-darwin.so +0 -0
  471. scipy/special/_ufuncs_cxx.pxd +2 -15
  472. scipy/special/_ufuncs_cxx.pyx +5 -44
  473. scipy/special/_ufuncs_cxx_defs.h +2 -16
  474. scipy/special/_ufuncs_defs.h +0 -8
  475. scipy/special/cython_special.cpython-311-darwin.so +0 -0
  476. scipy/special/cython_special.pxd +1 -1
  477. scipy/special/tests/_cython_examples/meson.build +10 -1
  478. scipy/special/tests/test_basic.py +153 -20
  479. scipy/special/tests/test_boost_ufuncs.py +3 -0
  480. scipy/special/tests/test_cdflib.py +35 -11
  481. scipy/special/tests/test_gammainc.py +16 -0
  482. scipy/special/tests/test_hyp2f1.py +23 -2
  483. scipy/special/tests/test_log1mexp.py +85 -0
  484. scipy/special/tests/test_logsumexp.py +220 -64
  485. scipy/special/tests/test_mpmath.py +1 -0
  486. scipy/special/tests/test_nan_inputs.py +1 -1
  487. scipy/special/tests/test_orthogonal.py +17 -18
  488. scipy/special/tests/test_sf_error.py +3 -2
  489. scipy/special/tests/test_sph_harm.py +6 -7
  490. scipy/special/tests/test_support_alternative_backends.py +211 -76
  491. scipy/stats/__init__.py +4 -1
  492. scipy/stats/_ansari_swilk_statistics.cpython-311-darwin.so +0 -0
  493. scipy/stats/_axis_nan_policy.py +4 -3
  494. scipy/stats/_biasedurn.cpython-311-darwin.so +0 -0
  495. scipy/stats/_continued_fraction.py +387 -0
  496. scipy/stats/_continuous_distns.py +296 -319
  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 +7 -8
  502. scipy/{_lib → stats}/_finite_differences.py +1 -1
  503. scipy/stats/_hypotests.py +82 -49
  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-311-darwin.so +0 -0
  508. scipy/stats/_morestats.py +112 -67
  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-311-darwin.so +0 -0
  517. scipy/stats/_qmvnt.py +16 -95
  518. scipy/stats/_qmvnt_cy.cpython-311-darwin.so +0 -0
  519. scipy/stats/_quantile.py +335 -0
  520. scipy/stats/_rcont/rcont.cpython-311-darwin.so +0 -0
  521. scipy/stats/_resampling.py +4 -29
  522. scipy/stats/_sampling.py +1 -1
  523. scipy/stats/_sobol.cpython-311-darwin.so +0 -0
  524. scipy/stats/_stats.cpython-311-darwin.so +0 -0
  525. scipy/stats/_stats_mstats_common.py +19 -2
  526. scipy/stats/_stats_py.py +534 -460
  527. scipy/stats/_unuran/unuran_wrapper.cpython-311-darwin.so +0 -0
  528. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  529. scipy/stats/_variation.py +5 -7
  530. scipy/stats/_wilcoxon.py +13 -7
  531. scipy/stats/tests/common_tests.py +6 -4
  532. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  533. scipy/stats/tests/test_continued_fraction.py +173 -0
  534. scipy/stats/tests/test_continuous.py +379 -60
  535. scipy/stats/tests/test_continuous_basic.py +18 -12
  536. scipy/stats/tests/test_discrete_basic.py +14 -8
  537. scipy/stats/tests/test_discrete_distns.py +16 -16
  538. scipy/stats/tests/test_distributions.py +117 -75
  539. scipy/stats/tests/test_entropy.py +40 -48
  540. scipy/stats/tests/test_fit.py +4 -3
  541. scipy/stats/tests/test_hypotests.py +153 -24
  542. scipy/stats/tests/test_kdeoth.py +109 -41
  543. scipy/stats/tests/test_marray.py +289 -0
  544. scipy/stats/tests/test_morestats.py +79 -47
  545. scipy/stats/tests/test_mstats_basic.py +3 -3
  546. scipy/stats/tests/test_multivariate.py +434 -83
  547. scipy/stats/tests/test_qmc.py +13 -10
  548. scipy/stats/tests/test_quantile.py +199 -0
  549. scipy/stats/tests/test_rank.py +119 -112
  550. scipy/stats/tests/test_resampling.py +47 -56
  551. scipy/stats/tests/test_sampling.py +9 -4
  552. scipy/stats/tests/test_stats.py +799 -939
  553. scipy/stats/tests/test_variation.py +8 -6
  554. scipy/version.py +2 -2
  555. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  556. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +9 -9
  557. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +558 -565
  558. scipy-1.16.0rc1.dist-info/WHEEL +6 -0
  559. scipy/_lib/array_api_extra/_funcs.py +0 -484
  560. scipy/_lib/array_api_extra/_typing.py +0 -8
  561. scipy/interpolate/_bspl.cpython-311-darwin.so +0 -0
  562. scipy/optimize/_cobyla.cpython-311-darwin.so +0 -0
  563. scipy/optimize/_cython_nnls.cpython-311-darwin.so +0 -0
  564. scipy/optimize/_slsqp.cpython-311-darwin.so +0 -0
  565. scipy/spatial/qhull_src/COPYING.txt +0 -38
  566. scipy/special/libsf_error_state.dylib +0 -0
  567. scipy/special/tests/test_log_softmax.py +0 -109
  568. scipy/special/tests/test_xsf_cuda.py +0 -114
  569. scipy/special/xsf/binom.h +0 -89
  570. scipy/special/xsf/cdflib.h +0 -100
  571. scipy/special/xsf/cephes/airy.h +0 -307
  572. scipy/special/xsf/cephes/besselpoly.h +0 -51
  573. scipy/special/xsf/cephes/beta.h +0 -257
  574. scipy/special/xsf/cephes/cbrt.h +0 -131
  575. scipy/special/xsf/cephes/chbevl.h +0 -85
  576. scipy/special/xsf/cephes/chdtr.h +0 -193
  577. scipy/special/xsf/cephes/const.h +0 -87
  578. scipy/special/xsf/cephes/ellie.h +0 -293
  579. scipy/special/xsf/cephes/ellik.h +0 -251
  580. scipy/special/xsf/cephes/ellpe.h +0 -107
  581. scipy/special/xsf/cephes/ellpk.h +0 -117
  582. scipy/special/xsf/cephes/expn.h +0 -260
  583. scipy/special/xsf/cephes/gamma.h +0 -398
  584. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  585. scipy/special/xsf/cephes/hyperg.h +0 -361
  586. scipy/special/xsf/cephes/i0.h +0 -149
  587. scipy/special/xsf/cephes/i1.h +0 -158
  588. scipy/special/xsf/cephes/igam.h +0 -421
  589. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  590. scipy/special/xsf/cephes/igami.h +0 -313
  591. scipy/special/xsf/cephes/j0.h +0 -225
  592. scipy/special/xsf/cephes/j1.h +0 -198
  593. scipy/special/xsf/cephes/jv.h +0 -715
  594. scipy/special/xsf/cephes/k0.h +0 -164
  595. scipy/special/xsf/cephes/k1.h +0 -163
  596. scipy/special/xsf/cephes/kn.h +0 -243
  597. scipy/special/xsf/cephes/lanczos.h +0 -112
  598. scipy/special/xsf/cephes/ndtr.h +0 -275
  599. scipy/special/xsf/cephes/poch.h +0 -85
  600. scipy/special/xsf/cephes/polevl.h +0 -167
  601. scipy/special/xsf/cephes/psi.h +0 -194
  602. scipy/special/xsf/cephes/rgamma.h +0 -111
  603. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  604. scipy/special/xsf/cephes/shichi.h +0 -248
  605. scipy/special/xsf/cephes/sici.h +0 -224
  606. scipy/special/xsf/cephes/sindg.h +0 -221
  607. scipy/special/xsf/cephes/tandg.h +0 -139
  608. scipy/special/xsf/cephes/trig.h +0 -58
  609. scipy/special/xsf/cephes/unity.h +0 -186
  610. scipy/special/xsf/cephes/zeta.h +0 -172
  611. scipy/special/xsf/config.h +0 -304
  612. scipy/special/xsf/digamma.h +0 -205
  613. scipy/special/xsf/error.h +0 -57
  614. scipy/special/xsf/evalpoly.h +0 -47
  615. scipy/special/xsf/expint.h +0 -266
  616. scipy/special/xsf/hyp2f1.h +0 -694
  617. scipy/special/xsf/iv_ratio.h +0 -173
  618. scipy/special/xsf/lambertw.h +0 -150
  619. scipy/special/xsf/loggamma.h +0 -163
  620. scipy/special/xsf/sici.h +0 -200
  621. scipy/special/xsf/tools.h +0 -427
  622. scipy/special/xsf/trig.h +0 -164
  623. scipy/special/xsf/wright_bessel.h +0 -843
  624. scipy/special/xsf/zlog1.h +0 -35
  625. scipy/stats/_mvn.cpython-311-darwin.so +0 -0
  626. scipy-1.15.2.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'.")