scipy 1.15.3__cp313-cp313-musllinux_1_2_aarch64.whl → 1.16.0rc1__cp313-cp313-musllinux_1_2_aarch64.whl

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