scipy 1.15.3__cp312-cp312-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp312-cp312-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 (641) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-312-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-312-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-312-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-312-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-312-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-312-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-312-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-312-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-312-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-312-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-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-312-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-312-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-312-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-312-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_delegators.py +8 -2
  243. scipy/ndimage/_filters.py +453 -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-312-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-312-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-312-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +370 -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-312-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-312-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-312-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-312-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-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-312-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 +6 -6
  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-312-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-312-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +230 -50
  358. scipy/signal/_spline.cpython-312-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-312-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 +50 -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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-312-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-312-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-312-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-312-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-312-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-312-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-312-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-312-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 +214 -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-312-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-312-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-312-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-312-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-312-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-312-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/distance.py +49 -42
  452. scipy/spatial/tests/test_distance.py +15 -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-312-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-312-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-312-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-312-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +5 -12
  503. scipy/stats/_biasedurn.cpython-312-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/_correlation.py +1 -1
  507. scipy/stats/_covariance.py +6 -3
  508. scipy/stats/_discrete_distns.py +39 -32
  509. scipy/stats/_distn_infrastructure.py +39 -12
  510. scipy/stats/_distribution_infrastructure.py +900 -238
  511. scipy/stats/_entropy.py +9 -10
  512. scipy/{_lib → stats}/_finite_differences.py +1 -1
  513. scipy/stats/_hypotests.py +83 -50
  514. scipy/stats/_kde.py +53 -49
  515. scipy/stats/_ksstats.py +1 -1
  516. scipy/stats/_levy_stable/__init__.py +7 -15
  517. scipy/stats/_levy_stable/levyst.cpython-312-aarch64-linux-musl.so +0 -0
  518. scipy/stats/_morestats.py +118 -73
  519. scipy/stats/_mstats_basic.py +13 -17
  520. scipy/stats/_mstats_extras.py +8 -8
  521. scipy/stats/_multivariate.py +89 -113
  522. scipy/stats/_new_distributions.py +97 -20
  523. scipy/stats/_page_trend_test.py +12 -5
  524. scipy/stats/_probability_distribution.py +265 -43
  525. scipy/stats/_qmc.py +14 -9
  526. scipy/stats/_qmc_cy.cpython-312-aarch64-linux-musl.so +0 -0
  527. scipy/stats/_qmvnt.py +16 -95
  528. scipy/stats/_qmvnt_cy.cpython-312-aarch64-linux-musl.so +0 -0
  529. scipy/stats/_quantile.py +335 -0
  530. scipy/stats/_rcont/rcont.cpython-312-aarch64-linux-musl.so +0 -0
  531. scipy/stats/_resampling.py +4 -29
  532. scipy/stats/_sampling.py +1 -1
  533. scipy/stats/_sobol.cpython-312-aarch64-linux-musl.so +0 -0
  534. scipy/stats/_stats.cpython-312-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats_mstats_common.py +21 -2
  536. scipy/stats/_stats_py.py +550 -476
  537. scipy/stats/_stats_pythran.cpython-312-aarch64-linux-musl.so +0 -0
  538. scipy/stats/_unuran/unuran_wrapper.cpython-312-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  540. scipy/stats/_variation.py +6 -8
  541. scipy/stats/_wilcoxon.py +13 -7
  542. scipy/stats/tests/common_tests.py +6 -4
  543. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  544. scipy/stats/tests/test_continued_fraction.py +173 -0
  545. scipy/stats/tests/test_continuous.py +379 -60
  546. scipy/stats/tests/test_continuous_basic.py +18 -12
  547. scipy/stats/tests/test_discrete_basic.py +14 -8
  548. scipy/stats/tests/test_discrete_distns.py +16 -16
  549. scipy/stats/tests/test_distributions.py +95 -75
  550. scipy/stats/tests/test_entropy.py +40 -48
  551. scipy/stats/tests/test_fit.py +4 -3
  552. scipy/stats/tests/test_hypotests.py +153 -24
  553. scipy/stats/tests/test_kdeoth.py +109 -41
  554. scipy/stats/tests/test_marray.py +289 -0
  555. scipy/stats/tests/test_morestats.py +79 -47
  556. scipy/stats/tests/test_mstats_basic.py +3 -3
  557. scipy/stats/tests/test_multivariate.py +434 -83
  558. scipy/stats/tests/test_qmc.py +13 -10
  559. scipy/stats/tests/test_quantile.py +199 -0
  560. scipy/stats/tests/test_rank.py +119 -112
  561. scipy/stats/tests/test_resampling.py +47 -56
  562. scipy/stats/tests/test_sampling.py +9 -4
  563. scipy/stats/tests/test_stats.py +799 -939
  564. scipy/stats/tests/test_variation.py +8 -6
  565. scipy/version.py +2 -2
  566. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  567. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  568. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
  569. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  570. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  571. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  572. scipy/_lib/array_api_extra/_funcs.py +0 -484
  573. scipy/_lib/array_api_extra/_typing.py +0 -8
  574. scipy/interpolate/_bspl.cpython-312-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cobyla.cpython-312-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cython_nnls.cpython-312-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_slsqp.cpython-312-aarch64-linux-musl.so +0 -0
  578. scipy/spatial/qhull_src/COPYING.txt +0 -38
  579. scipy/special/libsf_error_state.so +0 -0
  580. scipy/special/tests/test_log_softmax.py +0 -109
  581. scipy/special/tests/test_xsf_cuda.py +0 -114
  582. scipy/special/xsf/binom.h +0 -89
  583. scipy/special/xsf/cdflib.h +0 -100
  584. scipy/special/xsf/cephes/airy.h +0 -307
  585. scipy/special/xsf/cephes/besselpoly.h +0 -51
  586. scipy/special/xsf/cephes/beta.h +0 -257
  587. scipy/special/xsf/cephes/cbrt.h +0 -131
  588. scipy/special/xsf/cephes/chbevl.h +0 -85
  589. scipy/special/xsf/cephes/chdtr.h +0 -193
  590. scipy/special/xsf/cephes/const.h +0 -87
  591. scipy/special/xsf/cephes/ellie.h +0 -293
  592. scipy/special/xsf/cephes/ellik.h +0 -251
  593. scipy/special/xsf/cephes/ellpe.h +0 -107
  594. scipy/special/xsf/cephes/ellpk.h +0 -117
  595. scipy/special/xsf/cephes/expn.h +0 -260
  596. scipy/special/xsf/cephes/gamma.h +0 -398
  597. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  598. scipy/special/xsf/cephes/hyperg.h +0 -361
  599. scipy/special/xsf/cephes/i0.h +0 -149
  600. scipy/special/xsf/cephes/i1.h +0 -158
  601. scipy/special/xsf/cephes/igam.h +0 -421
  602. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  603. scipy/special/xsf/cephes/igami.h +0 -313
  604. scipy/special/xsf/cephes/j0.h +0 -225
  605. scipy/special/xsf/cephes/j1.h +0 -198
  606. scipy/special/xsf/cephes/jv.h +0 -715
  607. scipy/special/xsf/cephes/k0.h +0 -164
  608. scipy/special/xsf/cephes/k1.h +0 -163
  609. scipy/special/xsf/cephes/kn.h +0 -243
  610. scipy/special/xsf/cephes/lanczos.h +0 -112
  611. scipy/special/xsf/cephes/ndtr.h +0 -275
  612. scipy/special/xsf/cephes/poch.h +0 -85
  613. scipy/special/xsf/cephes/polevl.h +0 -167
  614. scipy/special/xsf/cephes/psi.h +0 -194
  615. scipy/special/xsf/cephes/rgamma.h +0 -111
  616. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  617. scipy/special/xsf/cephes/shichi.h +0 -248
  618. scipy/special/xsf/cephes/sici.h +0 -224
  619. scipy/special/xsf/cephes/sindg.h +0 -221
  620. scipy/special/xsf/cephes/tandg.h +0 -139
  621. scipy/special/xsf/cephes/trig.h +0 -58
  622. scipy/special/xsf/cephes/unity.h +0 -186
  623. scipy/special/xsf/cephes/zeta.h +0 -172
  624. scipy/special/xsf/config.h +0 -304
  625. scipy/special/xsf/digamma.h +0 -205
  626. scipy/special/xsf/error.h +0 -57
  627. scipy/special/xsf/evalpoly.h +0 -47
  628. scipy/special/xsf/expint.h +0 -266
  629. scipy/special/xsf/hyp2f1.h +0 -694
  630. scipy/special/xsf/iv_ratio.h +0 -173
  631. scipy/special/xsf/lambertw.h +0 -150
  632. scipy/special/xsf/loggamma.h +0 -163
  633. scipy/special/xsf/sici.h +0 -200
  634. scipy/special/xsf/tools.h +0 -427
  635. scipy/special/xsf/trig.h +0 -164
  636. scipy/special/xsf/wright_bessel.h +0 -843
  637. scipy/special/xsf/zlog1.h +0 -35
  638. scipy/stats/_mvn.cpython-312-aarch64-linux-musl.so +0 -0
  639. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  640. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  641. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.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'.")