scipy 1.15.3__cp311-cp311-musllinux_1_2_aarch64.whl → 1.16.0rc1__cp311-cp311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-311-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-311-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-311-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-311-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-311-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-311-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-311-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-311-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-311-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-311-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-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-311-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-311-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-311-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-311-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-311-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-311-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-311-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-311-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-311-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-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-311-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +221 -50
  358. scipy/signal/_spline.cpython-311-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-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-311-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-311-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-311-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-311-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-311-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-311-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-311-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-311-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-311-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-311-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-311-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-311-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-311-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-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +4 -3
  503. scipy/stats/_biasedurn.cpython-311-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-311-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-311-aarch64-linux-musl.so +0 -0
  526. scipy/stats/_qmvnt.py +16 -95
  527. scipy/stats/_qmvnt_cy.cpython-311-aarch64-linux-musl.so +0 -0
  528. scipy/stats/_quantile.py +335 -0
  529. scipy/stats/_rcont/rcont.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  533. scipy/stats/_stats.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  537. scipy/stats/_unuran/unuran_wrapper.cpython-311-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-311-aarch64-linux-musl.so +0 -0
  574. scipy/optimize/_cobyla.cpython-311-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cython_nnls.cpython-311-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_slsqp.cpython-311-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-311-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
@@ -7,25 +7,51 @@ https://data-apis.org/array-api/latest/API_specification/inspection.html for
7
7
  more details.
8
8
 
9
9
  """
10
+
11
+ # pyright: reportPrivateUsage=false
12
+
13
+ from __future__ import annotations
14
+
15
+ from typing import Literal as L
16
+ from typing import TypeAlias, overload
17
+
18
+ from numpy import bool_ as bool
10
19
  from numpy import (
20
+ complex64,
21
+ complex128,
11
22
  dtype,
12
- bool_ as bool,
13
- intp,
23
+ float32,
24
+ float64,
14
25
  int8,
15
26
  int16,
16
27
  int32,
17
28
  int64,
29
+ intp,
18
30
  uint8,
19
31
  uint16,
20
32
  uint32,
21
33
  uint64,
22
- float32,
23
- float64,
24
- complex64,
25
- complex128,
26
34
  )
27
35
 
28
- from ...common._helpers import _DASK_DEVICE
36
+ from ...common._helpers import _DASK_DEVICE, _dask_device
37
+ from ...common._typing import (
38
+ Capabilities,
39
+ DefaultDTypes,
40
+ DType,
41
+ DTypeKind,
42
+ DTypesAll,
43
+ DTypesAny,
44
+ DTypesBool,
45
+ DTypesComplex,
46
+ DTypesIntegral,
47
+ DTypesNumeric,
48
+ DTypesReal,
49
+ DTypesSigned,
50
+ DTypesUnsigned,
51
+ )
52
+
53
+ _Device: TypeAlias = L["cpu"] | _dask_device
54
+
29
55
 
30
56
  class __array_namespace_info__:
31
57
  """
@@ -50,7 +76,7 @@ class __array_namespace_info__:
50
76
 
51
77
  Examples
52
78
  --------
53
- >>> info = np.__array_namespace_info__()
79
+ >>> info = xp.__array_namespace_info__()
54
80
  >>> info.default_dtypes()
55
81
  {'real floating': dask.float64,
56
82
  'complex floating': dask.complex128,
@@ -59,20 +85,31 @@ class __array_namespace_info__:
59
85
 
60
86
  """
61
87
 
62
- __module__ = 'dask.array'
88
+ __module__ = "dask.array"
63
89
 
64
- def capabilities(self):
90
+ def capabilities(self) -> Capabilities:
65
91
  """
66
92
  Return a dictionary of array API library capabilities.
67
93
 
68
94
  The resulting dictionary has the following keys:
69
95
 
70
96
  - **"boolean indexing"**: boolean indicating whether an array library
71
- supports boolean indexing. Always ``False`` for Dask.
97
+ supports boolean indexing.
98
+
99
+ Dask support boolean indexing as long as both the index
100
+ and the indexed arrays have known shapes.
101
+ Note however that the output .shape and .size properties
102
+ will contain a non-compliant math.nan instead of None.
72
103
 
73
104
  - **"data-dependent shapes"**: boolean indicating whether an array
74
- library supports data-dependent output shapes. Always ``False`` for
75
- Dask.
105
+ library supports data-dependent output shapes.
106
+
107
+ Dask implements unique_values et.al.
108
+ Note however that the output .shape and .size properties
109
+ will contain a non-compliant math.nan instead of None.
110
+
111
+ - **"max dimensions"**: integer indicating the maximum number of
112
+ dimensions supported by the array library.
76
113
 
77
114
  See
78
115
  https://data-apis.org/array-api/latest/API_specification/generated/array_api.info.capabilities.html
@@ -92,20 +129,20 @@ class __array_namespace_info__:
92
129
 
93
130
  Examples
94
131
  --------
95
- >>> info = np.__array_namespace_info__()
132
+ >>> info = xp.__array_namespace_info__()
96
133
  >>> info.capabilities()
97
134
  {'boolean indexing': True,
98
- 'data-dependent shapes': True}
135
+ 'data-dependent shapes': True,
136
+ 'max dimensions': 64}
99
137
 
100
138
  """
101
139
  return {
102
- "boolean indexing": False,
103
- "data-dependent shapes": False,
104
- # 'max rank' will be part of the 2024.12 standard
105
- # "max rank": 64,
140
+ "boolean indexing": True,
141
+ "data-dependent shapes": True,
142
+ "max dimensions": 64,
106
143
  }
107
144
 
108
- def default_device(self):
145
+ def default_device(self) -> L["cpu"]:
109
146
  """
110
147
  The default device used for new Dask arrays.
111
148
 
@@ -120,19 +157,19 @@ class __array_namespace_info__:
120
157
 
121
158
  Returns
122
159
  -------
123
- device : str
160
+ device : Device
124
161
  The default device used for new Dask arrays.
125
162
 
126
163
  Examples
127
164
  --------
128
- >>> info = np.__array_namespace_info__()
165
+ >>> info = xp.__array_namespace_info__()
129
166
  >>> info.default_device()
130
167
  'cpu'
131
168
 
132
169
  """
133
170
  return "cpu"
134
171
 
135
- def default_dtypes(self, *, device=None):
172
+ def default_dtypes(self, /, *, device: _Device | None = None) -> DefaultDTypes:
136
173
  """
137
174
  The default data types used for new Dask arrays.
138
175
 
@@ -163,7 +200,7 @@ class __array_namespace_info__:
163
200
 
164
201
  Examples
165
202
  --------
166
- >>> info = np.__array_namespace_info__()
203
+ >>> info = xp.__array_namespace_info__()
167
204
  >>> info.default_dtypes()
168
205
  {'real floating': dask.float64,
169
206
  'complex floating': dask.complex128,
@@ -173,8 +210,8 @@ class __array_namespace_info__:
173
210
  """
174
211
  if device not in ["cpu", _DASK_DEVICE, None]:
175
212
  raise ValueError(
176
- 'Device not understood. Only "cpu" or _DASK_DEVICE is allowed, but received:'
177
- f' {device}'
213
+ f'Device not understood. Only "cpu" or _DASK_DEVICE is allowed, '
214
+ f"but received: {device!r}"
178
215
  )
179
216
  return {
180
217
  "real floating": dtype(float64),
@@ -183,7 +220,41 @@ class __array_namespace_info__:
183
220
  "indexing": dtype(intp),
184
221
  }
185
222
 
186
- def dtypes(self, *, device=None, kind=None):
223
+ @overload
224
+ def dtypes(
225
+ self, /, *, device: _Device | None = None, kind: None = None
226
+ ) -> DTypesAll: ...
227
+ @overload
228
+ def dtypes(
229
+ self, /, *, device: _Device | None = None, kind: L["bool"]
230
+ ) -> DTypesBool: ...
231
+ @overload
232
+ def dtypes(
233
+ self, /, *, device: _Device | None = None, kind: L["signed integer"]
234
+ ) -> DTypesSigned: ...
235
+ @overload
236
+ def dtypes(
237
+ self, /, *, device: _Device | None = None, kind: L["unsigned integer"]
238
+ ) -> DTypesUnsigned: ...
239
+ @overload
240
+ def dtypes(
241
+ self, /, *, device: _Device | None = None, kind: L["integral"]
242
+ ) -> DTypesIntegral: ...
243
+ @overload
244
+ def dtypes(
245
+ self, /, *, device: _Device | None = None, kind: L["real floating"]
246
+ ) -> DTypesReal: ...
247
+ @overload
248
+ def dtypes(
249
+ self, /, *, device: _Device | None = None, kind: L["complex floating"]
250
+ ) -> DTypesComplex: ...
251
+ @overload
252
+ def dtypes(
253
+ self, /, *, device: _Device | None = None, kind: L["numeric"]
254
+ ) -> DTypesNumeric: ...
255
+ def dtypes(
256
+ self, /, *, device: _Device | None = None, kind: DTypeKind | None = None
257
+ ) -> DTypesAny:
187
258
  """
188
259
  The array API data types supported by Dask.
189
260
 
@@ -229,7 +300,7 @@ class __array_namespace_info__:
229
300
 
230
301
  Examples
231
302
  --------
232
- >>> info = np.__array_namespace_info__()
303
+ >>> info = xp.__array_namespace_info__()
233
304
  >>> info.dtypes(kind='signed integer')
234
305
  {'int8': dask.int8,
235
306
  'int16': dask.int16,
@@ -240,7 +311,7 @@ class __array_namespace_info__:
240
311
  if device not in ["cpu", _DASK_DEVICE, None]:
241
312
  raise ValueError(
242
313
  'Device not understood. Only "cpu" or _DASK_DEVICE is allowed, but received:'
243
- f' {device}'
314
+ f" {device}"
244
315
  )
245
316
  if kind is None:
246
317
  return {
@@ -310,14 +381,14 @@ class __array_namespace_info__:
310
381
  "complex64": dtype(complex64),
311
382
  "complex128": dtype(complex128),
312
383
  }
313
- if isinstance(kind, tuple):
314
- res = {}
384
+ if isinstance(kind, tuple): # type: ignore[reportUnnecessaryIsinstanceCall]
385
+ res: dict[str, DType] = {}
315
386
  for k in kind:
316
387
  res.update(self.dtypes(kind=k))
317
388
  return res
318
389
  raise ValueError(f"unsupported kind: {kind!r}")
319
390
 
320
- def devices(self):
391
+ def devices(self) -> list[_Device]:
321
392
  """
322
393
  The devices supported by Dask.
323
394
 
@@ -325,7 +396,7 @@ class __array_namespace_info__:
325
396
 
326
397
  Returns
327
398
  -------
328
- devices : list of str
399
+ devices : list[Device]
329
400
  The devices supported by Dask.
330
401
 
331
402
  See Also
@@ -337,7 +408,7 @@ class __array_namespace_info__:
337
408
 
338
409
  Examples
339
410
  --------
340
- >>> info = np.__array_namespace_info__()
411
+ >>> info = xp.__array_namespace_info__()
341
412
  >>> info.devices()
342
413
  ['cpu', DASK_DEVICE]
343
414
 
@@ -4,9 +4,10 @@ from dask.array.fft import * # noqa: F403
4
4
  # from dask.array.fft import __all__ as linalg_all
5
5
  _n = {}
6
6
  exec('from dask.array.fft import *', _n)
7
- del _n['__builtins__']
7
+ for k in ("__builtins__", "Sequence", "annotations", "warnings"):
8
+ _n.pop(k, None)
8
9
  fft_all = list(_n)
9
- del _n
10
+ del _n, k
10
11
 
11
12
  from ...common import _fft
12
13
  from ..._internal import get_xp
@@ -16,9 +17,5 @@ import dask.array as da
16
17
  fftfreq = get_xp(da)(_fft.fftfreq)
17
18
  rfftfreq = get_xp(da)(_fft.rfftfreq)
18
19
 
19
- __all__ = [elem for elem in fft_all if elem != "annotations"] + ["fftfreq", "rfftfreq"]
20
-
21
- del get_xp
22
- del da
23
- del fft_all
24
- del _fft
20
+ __all__ = fft_all + ["fftfreq", "rfftfreq"]
21
+ _all_ignore = ["da", "fft_all", "get_xp", "warnings"]
@@ -1,33 +1,29 @@
1
1
  from __future__ import annotations
2
2
 
3
- from ...common import _linalg
4
- from ..._internal import get_xp
3
+ from typing import Literal
5
4
 
6
- # Exports
7
- from dask.array.linalg import * # noqa: F403
8
- from dask.array import outer
5
+ import dask.array as da
9
6
 
10
- # These functions are in both the main and linalg namespaces
11
- from dask.array import matmul, tensordot
12
- from ._aliases import matrix_transpose, vecdot
7
+ # The `matmul` and `tensordot` functions are in both the main and linalg namespaces
8
+ from dask.array import matmul, outer, tensordot
13
9
 
14
- import dask.array as da
10
+ # Exports
11
+ from dask.array.linalg import * # noqa: F403
15
12
 
16
- from typing import TYPE_CHECKING
17
- if TYPE_CHECKING:
18
- from ...common._typing import Array
19
- from typing import Literal
13
+ from ..._internal import get_xp
14
+ from ...common import _linalg
15
+ from ...common._typing import Array as _Array
16
+ from ._aliases import matrix_transpose, vecdot
20
17
 
21
18
  # dask.array.linalg doesn't have __all__. If it is added, replace this with
22
19
  #
23
20
  # from dask.array.linalg import __all__ as linalg_all
24
21
  _n = {}
25
22
  exec('from dask.array.linalg import *', _n)
26
- del _n['__builtins__']
27
- if 'annotations' in _n:
28
- del _n['annotations']
23
+ for k in ('__builtins__', 'annotations', 'operator', 'warnings', 'Array'):
24
+ _n.pop(k, None)
29
25
  linalg_all = list(_n)
30
- del _n
26
+ del _n, k
31
27
 
32
28
  EighResult = _linalg.EighResult
33
29
  QRResult = _linalg.QRResult
@@ -37,8 +33,11 @@ SVDResult = _linalg.SVDResult
37
33
  # supports the mode keyword on QR
38
34
  # https://github.com/dask/dask/issues/10388
39
35
  #qr = get_xp(da)(_linalg.qr)
40
- def qr(x: Array, mode: Literal['reduced', 'complete'] = 'reduced',
41
- **kwargs) -> QRResult:
36
+ def qr(
37
+ x: _Array,
38
+ mode: Literal["reduced", "complete"] = "reduced",
39
+ **kwargs: object,
40
+ ) -> QRResult:
42
41
  if mode != "reduced":
43
42
  raise ValueError("dask arrays only support using mode='reduced'")
44
43
  return QRResult(*da.linalg.qr(x, **kwargs))
@@ -51,12 +50,12 @@ matrix_norm = get_xp(da)(_linalg.matrix_norm)
51
50
  # Wrap the svd functions to not pass full_matrices to dask
52
51
  # when full_matrices=False (as that is the default behavior for dask),
53
52
  # and dask doesn't have the full_matrices keyword
54
- def svd(x: Array, full_matrices: bool = True, **kwargs) -> SVDResult:
53
+ def svd(x: _Array, full_matrices: bool = True, **kwargs) -> SVDResult:
55
54
  if full_matrices:
56
55
  raise ValueError("full_matrics=True is not supported by dask.")
57
56
  return da.linalg.svd(x, coerce_signs=False, **kwargs)
58
57
 
59
- def svdvals(x: Array) -> Array:
58
+ def svdvals(x: _Array) -> _Array:
60
59
  # TODO: can't avoid computing U or V for dask
61
60
  _, s, _ = svd(x)
62
61
  return s
@@ -70,4 +69,4 @@ __all__ = linalg_all + ["trace", "outer", "matmul", "tensordot",
70
69
  "cholesky", "matrix_rank", "matrix_norm", "svdvals",
71
70
  "vector_norm", "diagonal"]
72
71
 
73
- _all_ignore = ['get_xp', 'da', 'linalg_all']
72
+ _all_ignore = ['get_xp', 'da', 'linalg_all', 'warnings']
@@ -1,10 +1,16 @@
1
- from numpy import * # noqa: F403
1
+ # ruff: noqa: PLC0414
2
+ from typing import Final
3
+
4
+ from numpy import * # noqa: F403 # pyright: ignore[reportWildcardImportFromLibrary]
2
5
 
3
6
  # from numpy import * doesn't overwrite these builtin names
4
- from numpy import abs, max, min, round # noqa: F401
7
+ from numpy import abs as abs
8
+ from numpy import max as max
9
+ from numpy import min as min
10
+ from numpy import round as round
5
11
 
6
12
  # These imports may overwrite names from the import * above.
7
- from ._aliases import * # noqa: F403
13
+ from ._aliases import * # noqa: F403
8
14
 
9
15
  # Don't know why, but we have to do an absolute import to import linalg. If we
10
16
  # instead do
@@ -13,18 +19,10 @@ from ._aliases import * # noqa: F403
13
19
  #
14
20
  # It doesn't overwrite np.linalg from above. The import is generated
15
21
  # dynamically so that the library can be vendored.
16
- __import__(__package__ + '.linalg')
17
-
18
- __import__(__package__ + '.fft')
19
-
20
- from .linalg import matrix_transpose, vecdot # noqa: F401
22
+ __import__(__package__ + ".linalg")
21
23
 
22
- from ..common._helpers import * # noqa: F403
24
+ __import__(__package__ + ".fft")
23
25
 
24
- try:
25
- # Used in asarray(). Not present in older versions.
26
- from numpy import _CopyMode # noqa: F401
27
- except ImportError:
28
- pass
26
+ from .linalg import matrix_transpose, vecdot # type: ignore[no-redef] # noqa: F401
29
27
 
30
- __array_api_version__ = '2023.12'
28
+ __array_api_version__: Final = "2024.12"
@@ -1,17 +1,24 @@
1
+ # pyright: reportPrivateUsage=false
1
2
  from __future__ import annotations
2
3
 
3
- from ..common import _aliases
4
+ from builtins import bool as py_bool
5
+ from typing import TYPE_CHECKING, Any, Literal, TypeAlias, cast
4
6
 
5
- from .._internal import get_xp
7
+ import numpy as np
6
8
 
9
+ from .._internal import get_xp
10
+ from ..common import _aliases, _helpers
11
+ from ..common._typing import NestedSequence, SupportsBufferProtocol
7
12
  from ._info import __array_namespace_info__
13
+ from ._typing import Array, Device, DType
8
14
 
9
- from typing import TYPE_CHECKING
10
15
  if TYPE_CHECKING:
11
- from typing import Optional, Union
12
- from ._typing import ndarray, Device, Dtype, NestedSequence, SupportsBufferProtocol
16
+ from typing_extensions import Buffer, TypeIs
17
+
18
+ # The values of the `_CopyMode` enum can be either `False`, `True`, or `2`:
19
+ # https://github.com/numpy/numpy/blob/5a8a6a79d9c2fff8f07dcab5d41e14f8508d673f/numpy/_globals.pyi#L7-L10
20
+ _Copy: TypeAlias = py_bool | Literal[2] | np._CopyMode
13
21
 
14
- import numpy as np
15
22
  bool = np.bool_
16
23
 
17
24
  # Basic renames
@@ -46,10 +53,10 @@ unique_all = get_xp(np)(_aliases.unique_all)
46
53
  unique_counts = get_xp(np)(_aliases.unique_counts)
47
54
  unique_inverse = get_xp(np)(_aliases.unique_inverse)
48
55
  unique_values = get_xp(np)(_aliases.unique_values)
49
- astype = _aliases.astype
50
56
  std = get_xp(np)(_aliases.std)
51
57
  var = get_xp(np)(_aliases.var)
52
58
  cumulative_sum = get_xp(np)(_aliases.cumulative_sum)
59
+ cumulative_prod = get_xp(np)(_aliases.cumulative_prod)
53
60
  clip = get_xp(np)(_aliases.clip)
54
61
  permute_dims = get_xp(np)(_aliases.permute_dims)
55
62
  reshape = get_xp(np)(_aliases.reshape)
@@ -63,79 +70,121 @@ matmul = get_xp(np)(_aliases.matmul)
63
70
  matrix_transpose = get_xp(np)(_aliases.matrix_transpose)
64
71
  tensordot = get_xp(np)(_aliases.tensordot)
65
72
  sign = get_xp(np)(_aliases.sign)
73
+ finfo = get_xp(np)(_aliases.finfo)
74
+ iinfo = get_xp(np)(_aliases.iinfo)
66
75
 
67
- def _supports_buffer_protocol(obj):
76
+
77
+ def _supports_buffer_protocol(obj: object) -> TypeIs[Buffer]: # pyright: ignore[reportUnusedFunction]
68
78
  try:
69
- memoryview(obj)
79
+ memoryview(obj) # pyright: ignore[reportArgumentType]
70
80
  except TypeError:
71
81
  return False
72
82
  return True
73
83
 
84
+
74
85
  # asarray also adds the copy keyword, which is not present in numpy 1.0.
75
86
  # asarray() is different enough between numpy, cupy, and dask, the logic
76
87
  # complicated enough that it's easier to define it separately for each module
77
88
  # rather than trying to combine everything into one function in common/
78
89
  def asarray(
79
- obj: Union[
80
- ndarray,
81
- bool,
82
- int,
83
- float,
84
- NestedSequence[bool | int | float],
85
- SupportsBufferProtocol,
86
- ],
90
+ obj: Array | complex | NestedSequence[complex] | SupportsBufferProtocol,
87
91
  /,
88
92
  *,
89
- dtype: Optional[Dtype] = None,
90
- device: Optional[Device] = None,
91
- copy: "Optional[Union[bool, np._CopyMode]]" = None,
92
- **kwargs,
93
- ) -> ndarray:
93
+ dtype: DType | None = None,
94
+ device: Device | None = None,
95
+ copy: _Copy | None = None,
96
+ **kwargs: Any,
97
+ ) -> Array:
94
98
  """
95
99
  Array API compatibility wrapper for asarray().
96
100
 
97
101
  See the corresponding documentation in the array library and/or the array API
98
102
  specification for more details.
99
103
  """
100
- if device not in ["cpu", None]:
101
- raise ValueError(f"Unsupported device for NumPy: {device!r}")
102
-
103
- if hasattr(np, '_CopyMode'):
104
- if copy is None:
105
- copy = np._CopyMode.IF_NEEDED
106
- elif copy is False:
107
- copy = np._CopyMode.NEVER
108
- elif copy is True:
109
- copy = np._CopyMode.ALWAYS
110
- else:
111
- # Not present in older NumPys. In this case, we cannot really support
112
- # copy=False.
113
- if copy is False:
114
- raise NotImplementedError("asarray(copy=False) requires a newer version of NumPy.")
115
-
116
- return np.array(obj, copy=copy, dtype=dtype, **kwargs)
104
+ _helpers._check_device(np, device)
105
+
106
+ if copy is None:
107
+ copy = np._CopyMode.IF_NEEDED
108
+ elif copy is False:
109
+ copy = np._CopyMode.NEVER
110
+ elif copy is True:
111
+ copy = np._CopyMode.ALWAYS
112
+
113
+ return np.array(obj, copy=copy, dtype=dtype, **kwargs) # pyright: ignore
114
+
115
+
116
+ def astype(
117
+ x: Array,
118
+ dtype: DType,
119
+ /,
120
+ *,
121
+ copy: py_bool = True,
122
+ device: Device | None = None,
123
+ ) -> Array:
124
+ _helpers._check_device(np, device)
125
+ return x.astype(dtype=dtype, copy=copy)
126
+
127
+
128
+ # count_nonzero returns a python int for axis=None and keepdims=False
129
+ # https://github.com/numpy/numpy/issues/17562
130
+ def count_nonzero(
131
+ x: Array,
132
+ axis: int | tuple[int, ...] | None = None,
133
+ keepdims: py_bool = False,
134
+ ) -> Array:
135
+ # NOTE: this is currently incorrectly typed in numpy, but will be fixed in
136
+ # numpy 2.2.5 and 2.3.0: https://github.com/numpy/numpy/pull/28750
137
+ result = cast("Any", np.count_nonzero(x, axis=axis, keepdims=keepdims)) # pyright: ignore[reportArgumentType, reportCallIssue]
138
+ if axis is None and not keepdims:
139
+ return np.asarray(result)
140
+ return result
141
+
142
+
143
+ # take_along_axis: axis defaults to -1 but in numpy axis is a required arg
144
+ def take_along_axis(x: Array, indices: Array, /, *, axis: int = -1):
145
+ return np.take_along_axis(x, indices, axis=axis)
146
+
117
147
 
118
148
  # These functions are completely new here. If the library already has them
119
149
  # (i.e., numpy 2.0), use the library version instead of our wrapper.
120
- if hasattr(np, 'vecdot'):
150
+ if hasattr(np, "vecdot"):
121
151
  vecdot = np.vecdot
122
152
  else:
123
153
  vecdot = get_xp(np)(_aliases.vecdot)
124
154
 
125
- if hasattr(np, 'isdtype'):
155
+ if hasattr(np, "isdtype"):
126
156
  isdtype = np.isdtype
127
157
  else:
128
158
  isdtype = get_xp(np)(_aliases.isdtype)
129
159
 
130
- if hasattr(np, 'unstack'):
160
+ if hasattr(np, "unstack"):
131
161
  unstack = np.unstack
132
162
  else:
133
163
  unstack = get_xp(np)(_aliases.unstack)
134
164
 
135
- __all__ = _aliases.__all__ + ['__array_namespace_info__', 'asarray', 'bool',
136
- 'acos', 'acosh', 'asin', 'asinh', 'atan',
137
- 'atan2', 'atanh', 'bitwise_left_shift',
138
- 'bitwise_invert', 'bitwise_right_shift',
139
- 'concat', 'pow']
140
-
141
- _all_ignore = ['np', 'get_xp']
165
+ __all__ = [
166
+ "__array_namespace_info__",
167
+ "asarray",
168
+ "astype",
169
+ "acos",
170
+ "acosh",
171
+ "asin",
172
+ "asinh",
173
+ "atan",
174
+ "atan2",
175
+ "atanh",
176
+ "bitwise_left_shift",
177
+ "bitwise_invert",
178
+ "bitwise_right_shift",
179
+ "bool",
180
+ "concat",
181
+ "count_nonzero",
182
+ "pow",
183
+ "take_along_axis"
184
+ ]
185
+ __all__ += _aliases.__all__
186
+ _all_ignore = ["np", "get_xp"]
187
+
188
+
189
+ def __dir__() -> list[str]:
190
+ return __all__