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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. scipy/__config__.py +3 -3
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313-darwin.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313-darwin.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_sparse.py +41 -0
  11. scipy/_lib/_test_deprecation_call.cpython-313-darwin.so +0 -0
  12. scipy/_lib/_test_deprecation_def.cpython-313-darwin.so +0 -0
  13. scipy/_lib/_testutils.py +6 -2
  14. scipy/_lib/_util.py +222 -125
  15. scipy/_lib/array_api_compat/__init__.py +4 -4
  16. scipy/_lib/array_api_compat/_internal.py +19 -6
  17. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  18. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  19. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  20. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  21. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  22. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  23. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  24. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  25. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  26. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  27. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  28. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  29. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  30. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  31. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  32. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  33. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  34. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  35. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  36. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  37. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  38. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  39. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  40. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  41. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  42. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  43. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  44. scipy/_lib/array_api_extra/__init__.py +26 -3
  45. scipy/_lib/array_api_extra/_delegation.py +171 -0
  46. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  47. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  48. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  49. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  50. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  51. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  52. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  53. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  58. scipy/_lib/array_api_extra/testing.py +359 -0
  59. scipy/_lib/decorator.py +2 -2
  60. scipy/_lib/doccer.py +1 -7
  61. scipy/_lib/messagestream.cpython-313-darwin.so +0 -0
  62. scipy/_lib/pyprima/__init__.py +212 -0
  63. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  64. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  65. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  66. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  67. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  68. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  69. scipy/_lib/pyprima/cobyla/update.py +289 -0
  70. scipy/_lib/pyprima/common/__init__.py +0 -0
  71. scipy/_lib/pyprima/common/_bounds.py +34 -0
  72. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  73. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  74. scipy/_lib/pyprima/common/_project.py +173 -0
  75. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  76. scipy/_lib/pyprima/common/consts.py +47 -0
  77. scipy/_lib/pyprima/common/evaluate.py +99 -0
  78. scipy/_lib/pyprima/common/history.py +38 -0
  79. scipy/_lib/pyprima/common/infos.py +30 -0
  80. scipy/_lib/pyprima/common/linalg.py +435 -0
  81. scipy/_lib/pyprima/common/message.py +290 -0
  82. scipy/_lib/pyprima/common/powalg.py +131 -0
  83. scipy/_lib/pyprima/common/preproc.py +277 -0
  84. scipy/_lib/pyprima/common/present.py +5 -0
  85. scipy/_lib/pyprima/common/ratio.py +54 -0
  86. scipy/_lib/pyprima/common/redrho.py +47 -0
  87. scipy/_lib/pyprima/common/selectx.py +296 -0
  88. scipy/_lib/tests/test__util.py +105 -121
  89. scipy/_lib/tests/test_array_api.py +166 -35
  90. scipy/_lib/tests/test_bunch.py +7 -0
  91. scipy/_lib/tests/test_ccallback.py +2 -10
  92. scipy/_lib/tests/test_public_api.py +13 -0
  93. scipy/cluster/_hierarchy.cpython-313-darwin.so +0 -0
  94. scipy/cluster/_optimal_leaf_ordering.cpython-313-darwin.so +0 -0
  95. scipy/cluster/_vq.cpython-313-darwin.so +0 -0
  96. scipy/cluster/hierarchy.py +393 -223
  97. scipy/cluster/tests/test_hierarchy.py +273 -335
  98. scipy/cluster/tests/test_vq.py +45 -61
  99. scipy/cluster/vq.py +39 -35
  100. scipy/conftest.py +263 -157
  101. scipy/constants/_constants.py +4 -1
  102. scipy/constants/tests/test_codata.py +2 -2
  103. scipy/constants/tests/test_constants.py +11 -18
  104. scipy/datasets/_download_all.py +15 -1
  105. scipy/datasets/_fetchers.py +7 -1
  106. scipy/datasets/_utils.py +1 -1
  107. scipy/differentiate/_differentiate.py +25 -25
  108. scipy/differentiate/tests/test_differentiate.py +24 -25
  109. scipy/fft/_basic.py +20 -0
  110. scipy/fft/_helper.py +3 -34
  111. scipy/fft/_pocketfft/helper.py +29 -1
  112. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  113. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  114. scipy/fft/_realtransforms.py +13 -0
  115. scipy/fft/tests/test_basic.py +27 -25
  116. scipy/fft/tests/test_fftlog.py +16 -7
  117. scipy/fft/tests/test_helper.py +18 -34
  118. scipy/fft/tests/test_real_transforms.py +8 -10
  119. scipy/fftpack/convolve.cpython-313-darwin.so +0 -0
  120. scipy/fftpack/tests/test_basic.py +2 -4
  121. scipy/fftpack/tests/test_real_transforms.py +8 -9
  122. scipy/integrate/_bvp.py +9 -3
  123. scipy/integrate/_cubature.py +3 -2
  124. scipy/integrate/_dop.cpython-313-darwin.so +0 -0
  125. scipy/integrate/_lsoda.cpython-313-darwin.so +0 -0
  126. scipy/integrate/_ode.py +9 -2
  127. scipy/integrate/_quad_vec.py +21 -29
  128. scipy/integrate/_quadpack_py.py +11 -7
  129. scipy/integrate/_quadrature.py +3 -3
  130. scipy/integrate/_rules/_base.py +2 -2
  131. scipy/integrate/_tanhsinh.py +48 -47
  132. scipy/integrate/_test_odeint_banded.cpython-313-darwin.so +0 -0
  133. scipy/integrate/_vode.cpython-313-darwin.so +0 -0
  134. scipy/integrate/tests/test__quad_vec.py +0 -6
  135. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  136. scipy/integrate/tests/test_cubature.py +21 -35
  137. scipy/integrate/tests/test_quadrature.py +6 -8
  138. scipy/integrate/tests/test_tanhsinh.py +56 -48
  139. scipy/interpolate/__init__.py +70 -58
  140. scipy/interpolate/_bary_rational.py +22 -22
  141. scipy/interpolate/_bsplines.py +119 -66
  142. scipy/interpolate/_cubic.py +65 -50
  143. scipy/interpolate/_dfitpack.cpython-313-darwin.so +0 -0
  144. scipy/interpolate/_dierckx.cpython-313-darwin.so +0 -0
  145. scipy/interpolate/_fitpack2.py +9 -6
  146. scipy/interpolate/_fitpack_impl.py +32 -26
  147. scipy/interpolate/_fitpack_repro.py +23 -19
  148. scipy/interpolate/_interpnd.cpython-313-darwin.so +0 -0
  149. scipy/interpolate/_interpolate.py +30 -12
  150. scipy/interpolate/_ndbspline.py +13 -18
  151. scipy/interpolate/_ndgriddata.py +5 -8
  152. scipy/interpolate/_polyint.py +95 -31
  153. scipy/interpolate/_ppoly.cpython-313-darwin.so +0 -0
  154. scipy/interpolate/_rbf.py +2 -2
  155. scipy/interpolate/_rbfinterp.py +1 -1
  156. scipy/interpolate/_rgi.py +31 -26
  157. scipy/interpolate/_rgi_cython.cpython-313-darwin.so +0 -0
  158. scipy/interpolate/dfitpack.py +0 -20
  159. scipy/interpolate/interpnd.py +1 -2
  160. scipy/interpolate/tests/test_bary_rational.py +2 -2
  161. scipy/interpolate/tests/test_bsplines.py +97 -1
  162. scipy/interpolate/tests/test_fitpack2.py +39 -1
  163. scipy/interpolate/tests/test_interpnd.py +32 -20
  164. scipy/interpolate/tests/test_interpolate.py +48 -4
  165. scipy/interpolate/tests/test_rgi.py +2 -1
  166. scipy/io/_fast_matrix_market/__init__.py +2 -0
  167. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  168. scipy/io/_harwell_boeing/hb.py +7 -11
  169. scipy/io/_idl.py +5 -7
  170. scipy/io/_netcdf.py +15 -5
  171. scipy/io/_test_fortran.cpython-313-darwin.so +0 -0
  172. scipy/io/arff/tests/test_arffread.py +3 -3
  173. scipy/io/matlab/__init__.py +5 -3
  174. scipy/io/matlab/_mio.py +4 -1
  175. scipy/io/matlab/_mio5.py +19 -13
  176. scipy/io/matlab/_mio5_utils.cpython-313-darwin.so +0 -0
  177. scipy/io/matlab/_mio_utils.cpython-313-darwin.so +0 -0
  178. scipy/io/matlab/_miobase.py +4 -1
  179. scipy/io/matlab/_streams.cpython-313-darwin.so +0 -0
  180. scipy/io/matlab/tests/test_mio.py +46 -18
  181. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  182. scipy/io/tests/test_mmio.py +7 -1
  183. scipy/io/tests/test_wavfile.py +41 -0
  184. scipy/io/wavfile.py +57 -10
  185. scipy/linalg/_basic.py +113 -86
  186. scipy/linalg/_cythonized_array_utils.cpython-313-darwin.so +0 -0
  187. scipy/linalg/_decomp.py +22 -9
  188. scipy/linalg/_decomp_cholesky.py +28 -13
  189. scipy/linalg/_decomp_cossin.py +45 -30
  190. scipy/linalg/_decomp_interpolative.cpython-313-darwin.so +0 -0
  191. scipy/linalg/_decomp_ldl.py +4 -1
  192. scipy/linalg/_decomp_lu.py +18 -6
  193. scipy/linalg/_decomp_lu_cython.cpython-313-darwin.so +0 -0
  194. scipy/linalg/_decomp_polar.py +2 -0
  195. scipy/linalg/_decomp_qr.py +6 -2
  196. scipy/linalg/_decomp_qz.py +3 -0
  197. scipy/linalg/_decomp_schur.py +3 -1
  198. scipy/linalg/_decomp_svd.py +13 -2
  199. scipy/linalg/_decomp_update.cpython-313-darwin.so +0 -0
  200. scipy/linalg/_expm_frechet.py +4 -0
  201. scipy/linalg/_fblas.cpython-313-darwin.so +0 -0
  202. scipy/linalg/_flapack.cpython-313-darwin.so +0 -0
  203. scipy/linalg/_matfuncs.py +187 -4
  204. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-darwin.so +0 -0
  205. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  206. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-darwin.so +0 -0
  207. scipy/linalg/_procrustes.py +2 -0
  208. scipy/linalg/_sketches.py +17 -6
  209. scipy/linalg/_solve_toeplitz.cpython-313-darwin.so +0 -0
  210. scipy/linalg/_solvers.py +7 -2
  211. scipy/linalg/_special_matrices.py +26 -36
  212. scipy/linalg/cython_blas.cpython-313-darwin.so +0 -0
  213. scipy/linalg/cython_lapack.cpython-313-darwin.so +0 -0
  214. scipy/linalg/lapack.py +22 -2
  215. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  216. scipy/linalg/tests/test_basic.py +31 -16
  217. scipy/linalg/tests/test_batch.py +588 -0
  218. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  219. scipy/linalg/tests/test_decomp.py +40 -3
  220. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  221. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  222. scipy/linalg/tests/test_lapack.py +115 -7
  223. scipy/linalg/tests/test_matfuncs.py +157 -102
  224. scipy/linalg/tests/test_procrustes.py +0 -7
  225. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  226. scipy/linalg/tests/test_special_matrices.py +1 -5
  227. scipy/ndimage/__init__.py +1 -0
  228. scipy/ndimage/_cytest.cpython-313-darwin.so +0 -0
  229. scipy/ndimage/_delegators.py +8 -2
  230. scipy/ndimage/_filters.py +433 -5
  231. scipy/ndimage/_interpolation.py +36 -6
  232. scipy/ndimage/_measurements.py +4 -2
  233. scipy/ndimage/_morphology.py +5 -0
  234. scipy/ndimage/_nd_image.cpython-313-darwin.so +0 -0
  235. scipy/ndimage/_ni_docstrings.py +5 -1
  236. scipy/ndimage/_ni_label.cpython-313-darwin.so +0 -0
  237. scipy/ndimage/_ni_support.py +1 -5
  238. scipy/ndimage/_support_alternative_backends.py +18 -6
  239. scipy/ndimage/tests/test_filters.py +337 -259
  240. scipy/ndimage/tests/test_fourier.py +7 -9
  241. scipy/ndimage/tests/test_interpolation.py +68 -61
  242. scipy/ndimage/tests/test_measurements.py +18 -35
  243. scipy/ndimage/tests/test_morphology.py +143 -131
  244. scipy/ndimage/tests/test_splines.py +1 -3
  245. scipy/optimize/_basinhopping.py +13 -7
  246. scipy/optimize/_bglu_dense.cpython-313-darwin.so +0 -0
  247. scipy/optimize/_bracket.py +17 -24
  248. scipy/optimize/_chandrupatla.py +9 -10
  249. scipy/optimize/_cobyla_py.py +104 -123
  250. scipy/optimize/_constraints.py +14 -10
  251. scipy/optimize/_differentiable_functions.py +371 -230
  252. scipy/optimize/_differentialevolution.py +4 -3
  253. scipy/optimize/_dual_annealing.py +1 -1
  254. scipy/optimize/_elementwise.py +1 -4
  255. scipy/optimize/_lbfgsb_py.py +57 -16
  256. scipy/optimize/_linprog_doc.py +2 -2
  257. scipy/optimize/_linprog_highs.py +2 -2
  258. scipy/optimize/_linprog_ip.py +25 -10
  259. scipy/optimize/_linprog_util.py +14 -16
  260. scipy/optimize/_lsq/common.py +3 -3
  261. scipy/optimize/_lsq/dogbox.py +16 -2
  262. scipy/optimize/_lsq/givens_elimination.cpython-313-darwin.so +0 -0
  263. scipy/optimize/_lsq/least_squares.py +198 -126
  264. scipy/optimize/_lsq/lsq_linear.py +6 -6
  265. scipy/optimize/_lsq/trf.py +35 -8
  266. scipy/optimize/_milp.py +3 -1
  267. scipy/optimize/_minimize.py +105 -36
  268. scipy/optimize/_minpack_py.py +21 -14
  269. scipy/optimize/_moduleTNC.cpython-313-darwin.so +0 -0
  270. scipy/optimize/_nnls.py +20 -21
  271. scipy/optimize/_nonlin.py +34 -3
  272. scipy/optimize/_numdiff.py +288 -110
  273. scipy/optimize/_optimize.py +86 -48
  274. scipy/optimize/_remove_redundancy.py +5 -5
  275. scipy/optimize/_root_scalar.py +1 -1
  276. scipy/optimize/_shgo.py +6 -0
  277. scipy/optimize/_shgo_lib/_complex.py +1 -1
  278. scipy/optimize/_slsqp_py.py +216 -124
  279. scipy/optimize/_slsqplib.cpython-313-darwin.so +0 -0
  280. scipy/optimize/_spectral.py +1 -1
  281. scipy/optimize/_tnc.py +8 -1
  282. scipy/optimize/_trlib/_trlib.cpython-313-darwin.so +0 -0
  283. scipy/optimize/_trustregion.py +20 -6
  284. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  285. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  286. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  287. scipy/optimize/_trustregion_constr/projections.py +12 -8
  288. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  289. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  290. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  291. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  292. scipy/optimize/_trustregion_exact.py +0 -1
  293. scipy/optimize/_zeros.cpython-313-darwin.so +0 -0
  294. scipy/optimize/_zeros_py.py +97 -17
  295. scipy/optimize/cython_optimize/_zeros.cpython-313-darwin.so +0 -0
  296. scipy/optimize/slsqp.py +0 -1
  297. scipy/optimize/tests/test__basinhopping.py +1 -1
  298. scipy/optimize/tests/test__differential_evolution.py +4 -4
  299. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  300. scipy/optimize/tests/test__numdiff.py +66 -22
  301. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  302. scipy/optimize/tests/test__shgo.py +9 -1
  303. scipy/optimize/tests/test_bracket.py +36 -46
  304. scipy/optimize/tests/test_chandrupatla.py +133 -135
  305. scipy/optimize/tests/test_cobyla.py +74 -45
  306. scipy/optimize/tests/test_constraints.py +1 -1
  307. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  308. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  309. scipy/optimize/tests/test_least_squares.py +125 -13
  310. scipy/optimize/tests/test_linear_assignment.py +3 -3
  311. scipy/optimize/tests/test_linprog.py +3 -3
  312. scipy/optimize/tests/test_lsq_linear.py +5 -5
  313. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  314. scipy/optimize/tests/test_minpack.py +4 -4
  315. scipy/optimize/tests/test_nnls.py +43 -3
  316. scipy/optimize/tests/test_nonlin.py +36 -0
  317. scipy/optimize/tests/test_optimize.py +95 -17
  318. scipy/optimize/tests/test_slsqp.py +36 -4
  319. scipy/optimize/tests/test_zeros.py +34 -1
  320. scipy/signal/__init__.py +12 -23
  321. scipy/signal/_delegators.py +568 -0
  322. scipy/signal/_filter_design.py +459 -241
  323. scipy/signal/_fir_filter_design.py +262 -90
  324. scipy/signal/_lti_conversion.py +3 -2
  325. scipy/signal/_ltisys.py +118 -91
  326. scipy/signal/_peak_finding_utils.cpython-313-darwin.so +0 -0
  327. scipy/signal/_polyutils.py +172 -0
  328. scipy/signal/_short_time_fft.py +519 -70
  329. scipy/signal/_signal_api.py +30 -0
  330. scipy/signal/_signaltools.py +719 -399
  331. scipy/signal/_sigtools.cpython-313-darwin.so +0 -0
  332. scipy/signal/_sosfilt.cpython-313-darwin.so +0 -0
  333. scipy/signal/_spectral_py.py +221 -50
  334. scipy/signal/_spline_filters.py +108 -68
  335. scipy/signal/_support_alternative_backends.py +73 -0
  336. scipy/signal/_upfirdn.py +4 -1
  337. scipy/signal/_upfirdn_apply.cpython-313-darwin.so +0 -0
  338. scipy/signal/_waveforms.py +2 -11
  339. scipy/signal/_wavelets.py +1 -1
  340. scipy/signal/fir_filter_design.py +1 -0
  341. scipy/signal/spline.py +4 -11
  342. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  343. scipy/signal/tests/test_bsplines.py +114 -79
  344. scipy/signal/tests/test_cont2discrete.py +9 -2
  345. scipy/signal/tests/test_filter_design.py +721 -481
  346. scipy/signal/tests/test_fir_filter_design.py +332 -140
  347. scipy/signal/tests/test_savitzky_golay.py +4 -3
  348. scipy/signal/tests/test_short_time_fft.py +221 -3
  349. scipy/signal/tests/test_signaltools.py +2144 -1348
  350. scipy/signal/tests/test_spectral.py +19 -6
  351. scipy/signal/tests/test_splines.py +161 -96
  352. scipy/signal/tests/test_upfirdn.py +84 -50
  353. scipy/signal/tests/test_waveforms.py +20 -0
  354. scipy/signal/tests/test_windows.py +607 -466
  355. scipy/signal/windows/_windows.py +287 -148
  356. scipy/sparse/__init__.py +23 -4
  357. scipy/sparse/_base.py +270 -108
  358. scipy/sparse/_bsr.py +7 -4
  359. scipy/sparse/_compressed.py +59 -231
  360. scipy/sparse/_construct.py +90 -38
  361. scipy/sparse/_coo.py +115 -181
  362. scipy/sparse/_csc.py +4 -4
  363. scipy/sparse/_csparsetools.cpython-313-darwin.so +0 -0
  364. scipy/sparse/_csr.py +2 -2
  365. scipy/sparse/_data.py +48 -48
  366. scipy/sparse/_dia.py +105 -18
  367. scipy/sparse/_dok.py +0 -23
  368. scipy/sparse/_index.py +4 -4
  369. scipy/sparse/_matrix.py +23 -0
  370. scipy/sparse/_sparsetools.cpython-313-darwin.so +0 -0
  371. scipy/sparse/_sputils.py +37 -22
  372. scipy/sparse/base.py +0 -9
  373. scipy/sparse/bsr.py +0 -14
  374. scipy/sparse/compressed.py +0 -23
  375. scipy/sparse/construct.py +0 -6
  376. scipy/sparse/coo.py +0 -14
  377. scipy/sparse/csc.py +0 -3
  378. scipy/sparse/csgraph/_flow.cpython-313-darwin.so +0 -0
  379. scipy/sparse/csgraph/_matching.cpython-313-darwin.so +0 -0
  380. scipy/sparse/csgraph/_min_spanning_tree.cpython-313-darwin.so +0 -0
  381. scipy/sparse/csgraph/_reordering.cpython-313-darwin.so +0 -0
  382. scipy/sparse/csgraph/_shortest_path.cpython-313-darwin.so +0 -0
  383. scipy/sparse/csgraph/_tools.cpython-313-darwin.so +0 -0
  384. scipy/sparse/csgraph/_traversal.cpython-313-darwin.so +0 -0
  385. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  386. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  387. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  388. scipy/sparse/csr.py +0 -5
  389. scipy/sparse/data.py +1 -6
  390. scipy/sparse/dia.py +0 -7
  391. scipy/sparse/dok.py +0 -10
  392. scipy/sparse/linalg/_dsolve/_superlu.cpython-313-darwin.so +0 -0
  393. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  394. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  395. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313-darwin.so +0 -0
  396. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  397. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  398. scipy/sparse/linalg/_interface.py +17 -18
  399. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  400. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  401. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  402. scipy/sparse/linalg/_isolve/minres.py +5 -5
  403. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  404. scipy/sparse/linalg/_isolve/utils.py +2 -8
  405. scipy/sparse/linalg/_matfuncs.py +1 -1
  406. scipy/sparse/linalg/_norm.py +1 -1
  407. scipy/sparse/linalg/_propack/_cpropack.cpython-313-darwin.so +0 -0
  408. scipy/sparse/linalg/_propack/_dpropack.cpython-313-darwin.so +0 -0
  409. scipy/sparse/linalg/_propack/_spropack.cpython-313-darwin.so +0 -0
  410. scipy/sparse/linalg/_propack/_zpropack.cpython-313-darwin.so +0 -0
  411. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  412. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  413. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  414. scipy/sparse/tests/test_base.py +207 -42
  415. scipy/sparse/tests/test_common1d.py +7 -7
  416. scipy/sparse/tests/test_construct.py +1 -1
  417. scipy/sparse/tests/test_coo.py +272 -4
  418. scipy/sparse/tests/test_sparsetools.py +5 -0
  419. scipy/sparse/tests/test_sputils.py +36 -7
  420. scipy/spatial/_ckdtree.cpython-313-darwin.so +0 -0
  421. scipy/spatial/_hausdorff.cpython-313-darwin.so +0 -0
  422. scipy/spatial/_qhull.cpython-313-darwin.so +0 -0
  423. scipy/spatial/_voronoi.cpython-313-darwin.so +0 -0
  424. scipy/spatial/distance.py +49 -42
  425. scipy/spatial/tests/test_distance.py +3 -1
  426. scipy/spatial/tests/test_kdtree.py +1 -0
  427. scipy/spatial/tests/test_qhull.py +7 -2
  428. scipy/spatial/transform/__init__.py +5 -3
  429. scipy/spatial/transform/_rigid_transform.cpython-313-darwin.so +0 -0
  430. scipy/spatial/transform/_rotation.cpython-313-darwin.so +0 -0
  431. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  432. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  433. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  434. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  435. scipy/special/__init__.py +1 -47
  436. scipy/special/_add_newdocs.py +34 -772
  437. scipy/special/_basic.py +22 -25
  438. scipy/special/_comb.cpython-313-darwin.so +0 -0
  439. scipy/special/_ellip_harm_2.cpython-313-darwin.so +0 -0
  440. scipy/special/_gufuncs.cpython-313-darwin.so +0 -0
  441. scipy/special/_logsumexp.py +67 -58
  442. scipy/special/_orthogonal.pyi +1 -1
  443. scipy/special/_specfun.cpython-313-darwin.so +0 -0
  444. scipy/special/_special_ufuncs.cpython-313-darwin.so +0 -0
  445. scipy/special/_spherical_bessel.py +4 -4
  446. scipy/special/_support_alternative_backends.py +212 -119
  447. scipy/special/_test_internal.cpython-313-darwin.so +0 -0
  448. scipy/special/_testutils.py +4 -4
  449. scipy/special/_ufuncs.cpython-313-darwin.so +0 -0
  450. scipy/special/_ufuncs.pyi +1 -0
  451. scipy/special/_ufuncs.pyx +215 -1400
  452. scipy/special/_ufuncs_cxx.cpython-313-darwin.so +0 -0
  453. scipy/special/_ufuncs_cxx.pxd +2 -15
  454. scipy/special/_ufuncs_cxx.pyx +5 -44
  455. scipy/special/_ufuncs_cxx_defs.h +2 -16
  456. scipy/special/_ufuncs_defs.h +0 -8
  457. scipy/special/cython_special.cpython-313-darwin.so +0 -0
  458. scipy/special/cython_special.pxd +1 -1
  459. scipy/special/tests/_cython_examples/meson.build +10 -1
  460. scipy/special/tests/test_basic.py +153 -20
  461. scipy/special/tests/test_boost_ufuncs.py +3 -0
  462. scipy/special/tests/test_cdflib.py +35 -11
  463. scipy/special/tests/test_gammainc.py +16 -0
  464. scipy/special/tests/test_hyp2f1.py +2 -2
  465. scipy/special/tests/test_log1mexp.py +85 -0
  466. scipy/special/tests/test_logsumexp.py +206 -64
  467. scipy/special/tests/test_mpmath.py +1 -0
  468. scipy/special/tests/test_nan_inputs.py +1 -1
  469. scipy/special/tests/test_orthogonal.py +17 -18
  470. scipy/special/tests/test_sf_error.py +3 -2
  471. scipy/special/tests/test_sph_harm.py +6 -7
  472. scipy/special/tests/test_support_alternative_backends.py +211 -76
  473. scipy/stats/__init__.py +4 -1
  474. scipy/stats/_ansari_swilk_statistics.cpython-313-darwin.so +0 -0
  475. scipy/stats/_axis_nan_policy.py +4 -3
  476. scipy/stats/_biasedurn.cpython-313-darwin.so +0 -0
  477. scipy/stats/_continued_fraction.py +387 -0
  478. scipy/stats/_continuous_distns.py +277 -310
  479. scipy/stats/_covariance.py +6 -3
  480. scipy/stats/_discrete_distns.py +39 -32
  481. scipy/stats/_distn_infrastructure.py +39 -12
  482. scipy/stats/_distribution_infrastructure.py +900 -238
  483. scipy/stats/_entropy.py +7 -8
  484. scipy/{_lib → stats}/_finite_differences.py +1 -1
  485. scipy/stats/_hypotests.py +82 -49
  486. scipy/stats/_kde.py +53 -49
  487. scipy/stats/_ksstats.py +1 -1
  488. scipy/stats/_levy_stable/__init__.py +7 -15
  489. scipy/stats/_levy_stable/levyst.cpython-313-darwin.so +0 -0
  490. scipy/stats/_morestats.py +112 -67
  491. scipy/stats/_mstats_basic.py +13 -17
  492. scipy/stats/_mstats_extras.py +8 -8
  493. scipy/stats/_multivariate.py +89 -113
  494. scipy/stats/_new_distributions.py +97 -20
  495. scipy/stats/_page_trend_test.py +12 -5
  496. scipy/stats/_probability_distribution.py +265 -43
  497. scipy/stats/_qmc.py +14 -9
  498. scipy/stats/_qmc_cy.cpython-313-darwin.so +0 -0
  499. scipy/stats/_qmvnt.py +16 -95
  500. scipy/stats/_qmvnt_cy.cpython-313-darwin.so +0 -0
  501. scipy/stats/_quantile.py +335 -0
  502. scipy/stats/_rcont/rcont.cpython-313-darwin.so +0 -0
  503. scipy/stats/_resampling.py +4 -29
  504. scipy/stats/_sampling.py +1 -1
  505. scipy/stats/_sobol.cpython-313-darwin.so +0 -0
  506. scipy/stats/_stats.cpython-313-darwin.so +0 -0
  507. scipy/stats/_stats_mstats_common.py +19 -2
  508. scipy/stats/_stats_py.py +534 -460
  509. scipy/stats/_unuran/unuran_wrapper.cpython-313-darwin.so +0 -0
  510. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  511. scipy/stats/_variation.py +5 -7
  512. scipy/stats/_wilcoxon.py +13 -7
  513. scipy/stats/tests/common_tests.py +6 -4
  514. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  515. scipy/stats/tests/test_continued_fraction.py +173 -0
  516. scipy/stats/tests/test_continuous.py +379 -60
  517. scipy/stats/tests/test_continuous_basic.py +18 -12
  518. scipy/stats/tests/test_discrete_basic.py +14 -8
  519. scipy/stats/tests/test_discrete_distns.py +16 -16
  520. scipy/stats/tests/test_distributions.py +95 -75
  521. scipy/stats/tests/test_entropy.py +40 -48
  522. scipy/stats/tests/test_fit.py +4 -3
  523. scipy/stats/tests/test_hypotests.py +153 -24
  524. scipy/stats/tests/test_kdeoth.py +109 -41
  525. scipy/stats/tests/test_marray.py +289 -0
  526. scipy/stats/tests/test_morestats.py +79 -47
  527. scipy/stats/tests/test_mstats_basic.py +3 -3
  528. scipy/stats/tests/test_multivariate.py +434 -83
  529. scipy/stats/tests/test_qmc.py +13 -10
  530. scipy/stats/tests/test_quantile.py +199 -0
  531. scipy/stats/tests/test_rank.py +119 -112
  532. scipy/stats/tests/test_resampling.py +47 -56
  533. scipy/stats/tests/test_sampling.py +9 -4
  534. scipy/stats/tests/test_stats.py +799 -939
  535. scipy/stats/tests/test_variation.py +8 -6
  536. scipy/version.py +2 -2
  537. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  538. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +8 -8
  539. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +540 -547
  540. scipy-1.16.0rc1.dist-info/WHEEL +6 -0
  541. scipy/_lib/array_api_extra/_funcs.py +0 -484
  542. scipy/_lib/array_api_extra/_typing.py +0 -8
  543. scipy/interpolate/_bspl.cpython-313-darwin.so +0 -0
  544. scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
  545. scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
  546. scipy/optimize/_slsqp.cpython-313-darwin.so +0 -0
  547. scipy/spatial/qhull_src/COPYING.txt +0 -38
  548. scipy/special/libsf_error_state.dylib +0 -0
  549. scipy/special/tests/test_log_softmax.py +0 -109
  550. scipy/special/tests/test_xsf_cuda.py +0 -114
  551. scipy/special/xsf/binom.h +0 -89
  552. scipy/special/xsf/cdflib.h +0 -100
  553. scipy/special/xsf/cephes/airy.h +0 -307
  554. scipy/special/xsf/cephes/besselpoly.h +0 -51
  555. scipy/special/xsf/cephes/beta.h +0 -257
  556. scipy/special/xsf/cephes/cbrt.h +0 -131
  557. scipy/special/xsf/cephes/chbevl.h +0 -85
  558. scipy/special/xsf/cephes/chdtr.h +0 -193
  559. scipy/special/xsf/cephes/const.h +0 -87
  560. scipy/special/xsf/cephes/ellie.h +0 -293
  561. scipy/special/xsf/cephes/ellik.h +0 -251
  562. scipy/special/xsf/cephes/ellpe.h +0 -107
  563. scipy/special/xsf/cephes/ellpk.h +0 -117
  564. scipy/special/xsf/cephes/expn.h +0 -260
  565. scipy/special/xsf/cephes/gamma.h +0 -398
  566. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  567. scipy/special/xsf/cephes/hyperg.h +0 -361
  568. scipy/special/xsf/cephes/i0.h +0 -149
  569. scipy/special/xsf/cephes/i1.h +0 -158
  570. scipy/special/xsf/cephes/igam.h +0 -421
  571. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  572. scipy/special/xsf/cephes/igami.h +0 -313
  573. scipy/special/xsf/cephes/j0.h +0 -225
  574. scipy/special/xsf/cephes/j1.h +0 -198
  575. scipy/special/xsf/cephes/jv.h +0 -715
  576. scipy/special/xsf/cephes/k0.h +0 -164
  577. scipy/special/xsf/cephes/k1.h +0 -163
  578. scipy/special/xsf/cephes/kn.h +0 -243
  579. scipy/special/xsf/cephes/lanczos.h +0 -112
  580. scipy/special/xsf/cephes/ndtr.h +0 -275
  581. scipy/special/xsf/cephes/poch.h +0 -85
  582. scipy/special/xsf/cephes/polevl.h +0 -167
  583. scipy/special/xsf/cephes/psi.h +0 -194
  584. scipy/special/xsf/cephes/rgamma.h +0 -111
  585. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  586. scipy/special/xsf/cephes/shichi.h +0 -248
  587. scipy/special/xsf/cephes/sici.h +0 -224
  588. scipy/special/xsf/cephes/sindg.h +0 -221
  589. scipy/special/xsf/cephes/tandg.h +0 -139
  590. scipy/special/xsf/cephes/trig.h +0 -58
  591. scipy/special/xsf/cephes/unity.h +0 -186
  592. scipy/special/xsf/cephes/zeta.h +0 -172
  593. scipy/special/xsf/config.h +0 -304
  594. scipy/special/xsf/digamma.h +0 -205
  595. scipy/special/xsf/error.h +0 -57
  596. scipy/special/xsf/evalpoly.h +0 -47
  597. scipy/special/xsf/expint.h +0 -266
  598. scipy/special/xsf/hyp2f1.h +0 -694
  599. scipy/special/xsf/iv_ratio.h +0 -173
  600. scipy/special/xsf/lambertw.h +0 -150
  601. scipy/special/xsf/loggamma.h +0 -163
  602. scipy/special/xsf/sici.h +0 -200
  603. scipy/special/xsf/tools.h +0 -427
  604. scipy/special/xsf/trig.h +0 -164
  605. scipy/special/xsf/wright_bessel.h +0 -843
  606. scipy/special/xsf/zlog1.h +0 -35
  607. scipy/stats/_mvn.cpython-313-darwin.so +0 -0
  608. scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -7,24 +7,28 @@ https://data-apis.org/array-api/latest/API_specification/inspection.html for
7
7
  more details.
8
8
 
9
9
  """
10
+ from __future__ import annotations
11
+
12
+ from numpy import bool_ as bool
10
13
  from numpy import (
14
+ complex64,
15
+ complex128,
11
16
  dtype,
12
- bool_ as bool,
13
- intp,
17
+ float32,
18
+ float64,
14
19
  int8,
15
20
  int16,
16
21
  int32,
17
22
  int64,
23
+ intp,
18
24
  uint8,
19
25
  uint16,
20
26
  uint32,
21
27
  uint64,
22
- float32,
23
- float64,
24
- complex64,
25
- complex128,
26
28
  )
27
29
 
30
+ from ._typing import Device, DType
31
+
28
32
 
29
33
  class __array_namespace_info__:
30
34
  """
@@ -94,14 +98,14 @@ class __array_namespace_info__:
94
98
  >>> info = np.__array_namespace_info__()
95
99
  >>> info.capabilities()
96
100
  {'boolean indexing': True,
97
- 'data-dependent shapes': True}
101
+ 'data-dependent shapes': True,
102
+ 'max dimensions': 64}
98
103
 
99
104
  """
100
105
  return {
101
106
  "boolean indexing": True,
102
107
  "data-dependent shapes": True,
103
- # 'max rank' will be part of the 2024.12 standard
104
- # "max rank": 64,
108
+ "max dimensions": 64,
105
109
  }
106
110
 
107
111
  def default_device(self):
@@ -119,7 +123,7 @@ class __array_namespace_info__:
119
123
 
120
124
  Returns
121
125
  -------
122
- device : str
126
+ device : Device
123
127
  The default device used for new NumPy arrays.
124
128
 
125
129
  Examples
@@ -131,7 +135,11 @@ class __array_namespace_info__:
131
135
  """
132
136
  return "cpu"
133
137
 
134
- def default_dtypes(self, *, device=None):
138
+ def default_dtypes(
139
+ self,
140
+ *,
141
+ device: Device | None = None,
142
+ ) -> dict[str, dtype[intp | float64 | complex128]]:
135
143
  """
136
144
  The default data types used for new NumPy arrays.
137
145
 
@@ -183,7 +191,12 @@ class __array_namespace_info__:
183
191
  "indexing": dtype(intp),
184
192
  }
185
193
 
186
- def dtypes(self, *, device=None, kind=None):
194
+ def dtypes(
195
+ self,
196
+ *,
197
+ device: Device | None = None,
198
+ kind: str | tuple[str, ...] | None = None,
199
+ ) -> dict[str, DType]:
187
200
  """
188
201
  The array API data types supported by NumPy.
189
202
 
@@ -260,7 +273,7 @@ class __array_namespace_info__:
260
273
  "complex128": dtype(complex128),
261
274
  }
262
275
  if kind == "bool":
263
- return {"bool": bool}
276
+ return {"bool": dtype(bool)}
264
277
  if kind == "signed integer":
265
278
  return {
266
279
  "int8": dtype(int8),
@@ -312,13 +325,13 @@ class __array_namespace_info__:
312
325
  "complex128": dtype(complex128),
313
326
  }
314
327
  if isinstance(kind, tuple):
315
- res = {}
328
+ res: dict[str, DType] = {}
316
329
  for k in kind:
317
330
  res.update(self.dtypes(kind=k))
318
331
  return res
319
332
  raise ValueError(f"unsupported kind: {kind!r}")
320
333
 
321
- def devices(self):
334
+ def devices(self) -> list[Device]:
322
335
  """
323
336
  The devices supported by NumPy.
324
337
 
@@ -326,7 +339,7 @@ class __array_namespace_info__:
326
339
 
327
340
  Returns
328
341
  -------
329
- devices : list of str
342
+ devices : list[Device]
330
343
  The devices supported by NumPy.
331
344
 
332
345
  See Also
@@ -344,3 +357,10 @@ class __array_namespace_info__:
344
357
 
345
358
  """
346
359
  return ["cpu"]
360
+
361
+
362
+ __all__ = ["__array_namespace_info__"]
363
+
364
+
365
+ def __dir__() -> list[str]:
366
+ return __all__
@@ -1,46 +1,30 @@
1
1
  from __future__ import annotations
2
2
 
3
- __all__ = [
4
- "ndarray",
5
- "Device",
6
- "Dtype",
7
- ]
8
-
9
- import sys
10
- from typing import (
11
- Literal,
12
- Union,
13
- TYPE_CHECKING,
14
- )
15
-
16
- from numpy import (
17
- ndarray,
18
- dtype,
19
- int8,
20
- int16,
21
- int32,
22
- int64,
23
- uint8,
24
- uint16,
25
- uint32,
26
- uint64,
27
- float32,
28
- float64,
29
- )
30
-
31
- Device = Literal["cpu"]
32
- if TYPE_CHECKING or sys.version_info >= (3, 9):
33
- Dtype = dtype[Union[
34
- int8,
35
- int16,
36
- int32,
37
- int64,
38
- uint8,
39
- uint16,
40
- uint32,
41
- uint64,
42
- float32,
43
- float64,
44
- ]]
3
+ from typing import TYPE_CHECKING, Any, Literal, TypeAlias
4
+
5
+ import numpy as np
6
+
7
+ Device: TypeAlias = Literal["cpu"]
8
+
9
+ if TYPE_CHECKING:
10
+
11
+ # NumPy 1.x on Python 3.10 fails to parse np.dtype[]
12
+ DType: TypeAlias = np.dtype[
13
+ np.bool_
14
+ | np.integer[Any]
15
+ | np.float32
16
+ | np.float64
17
+ | np.complex64
18
+ | np.complex128
19
+ ]
20
+ Array: TypeAlias = np.ndarray[Any, DType]
45
21
  else:
46
- Dtype = dtype
22
+ DType: TypeAlias = np.dtype
23
+ Array: TypeAlias = np.ndarray
24
+
25
+ __all__ = ["Array", "DType", "Device"]
26
+ _all_ignore = ["np"]
27
+
28
+
29
+ def __dir__() -> list[str]:
30
+ return __all__
@@ -1,10 +1,9 @@
1
- from numpy.fft import * # noqa: F403
1
+ import numpy as np
2
2
  from numpy.fft import __all__ as fft_all
3
+ from numpy.fft import fft2, ifft2, irfft2, rfft2
3
4
 
4
- from ..common import _fft
5
5
  from .._internal import get_xp
6
-
7
- import numpy as np
6
+ from ..common import _fft
8
7
 
9
8
  fft = get_xp(np)(_fft.fft)
10
9
  ifft = get_xp(np)(_fft.ifft)
@@ -21,7 +20,14 @@ rfftfreq = get_xp(np)(_fft.rfftfreq)
21
20
  fftshift = get_xp(np)(_fft.fftshift)
22
21
  ifftshift = get_xp(np)(_fft.ifftshift)
23
22
 
24
- __all__ = fft_all + _fft.__all__
23
+
24
+ __all__ = ["rfft2", "irfft2", "fft2", "ifft2"]
25
+ __all__ += _fft.__all__
26
+
27
+
28
+ def __dir__() -> list[str]:
29
+ return __all__
30
+
25
31
 
26
32
  del get_xp
27
33
  del np
@@ -1,14 +1,35 @@
1
- from numpy.linalg import * # noqa: F403
2
- from numpy.linalg import __all__ as linalg_all
3
- import numpy as _np
1
+ # pyright: reportAttributeAccessIssue=false
2
+ # pyright: reportUnknownArgumentType=false
3
+ # pyright: reportUnknownMemberType=false
4
+ # pyright: reportUnknownVariableType=false
5
+
6
+ from __future__ import annotations
7
+
8
+ import numpy as np
9
+
10
+ # intersection of `np.linalg.__all__` on numpy 1.22 and 2.2, minus `_linalg.__all__`
11
+ from numpy.linalg import (
12
+ LinAlgError,
13
+ cond,
14
+ det,
15
+ eig,
16
+ eigvals,
17
+ eigvalsh,
18
+ inv,
19
+ lstsq,
20
+ matrix_power,
21
+ multi_dot,
22
+ norm,
23
+ tensorinv,
24
+ tensorsolve,
25
+ )
4
26
 
5
- from ..common import _linalg
6
27
  from .._internal import get_xp
28
+ from ..common import _linalg
7
29
 
8
30
  # These functions are in both the main and linalg namespaces
9
- from ._aliases import matmul, matrix_transpose, tensordot, vecdot # noqa: F401
10
-
11
- import numpy as np
31
+ from ._aliases import matmul, matrix_transpose, tensordot, vecdot # noqa: F401
32
+ from ._typing import Array
12
33
 
13
34
  cross = get_xp(np)(_linalg.cross)
14
35
  outer = get_xp(np)(_linalg.outer)
@@ -38,19 +59,28 @@ trace = get_xp(np)(_linalg.trace)
38
59
  # To workaround this, the below is the code from np.linalg.solve except
39
60
  # only calling solve1 in the exactly 1D case.
40
61
 
62
+
41
63
  # This code is here instead of in common because it is numpy specific. Also
42
64
  # note that CuPy's solve() does not currently support broadcasting (see
43
65
  # https://github.com/cupy/cupy/blob/main/cupy/cublas.py#L43).
44
- def solve(x1: _np.ndarray, x2: _np.ndarray, /) -> _np.ndarray:
66
+ def solve(x1: Array, x2: Array, /) -> Array:
45
67
  try:
46
68
  from numpy.linalg._linalg import (
47
- _makearray, _assert_stacked_2d, _assert_stacked_square,
48
- _commonType, isComplexType, _raise_linalgerror_singular
69
+ _assert_stacked_2d,
70
+ _assert_stacked_square,
71
+ _commonType,
72
+ _makearray,
73
+ _raise_linalgerror_singular,
74
+ isComplexType,
49
75
  )
50
76
  except ImportError:
51
77
  from numpy.linalg.linalg import (
52
- _makearray, _assert_stacked_2d, _assert_stacked_square,
53
- _commonType, isComplexType, _raise_linalgerror_singular
78
+ _assert_stacked_2d,
79
+ _assert_stacked_square,
80
+ _commonType,
81
+ _makearray,
82
+ _raise_linalgerror_singular,
83
+ isComplexType,
54
84
  )
55
85
  from numpy.linalg import _umath_linalg
56
86
 
@@ -61,6 +91,7 @@ def solve(x1: _np.ndarray, x2: _np.ndarray, /) -> _np.ndarray:
61
91
  t, result_t = _commonType(x1, x2)
62
92
 
63
93
  # This part is different from np.linalg.solve
94
+ gufunc: np.ufunc
64
95
  if x2.ndim == 1:
65
96
  gufunc = _umath_linalg.solve1
66
97
  else:
@@ -68,23 +99,45 @@ def solve(x1: _np.ndarray, x2: _np.ndarray, /) -> _np.ndarray:
68
99
 
69
100
  # This does nothing currently but is left in because it will be relevant
70
101
  # when complex dtype support is added to the spec in 2022.
71
- signature = 'DD->D' if isComplexType(t) else 'dd->d'
72
- with _np.errstate(call=_raise_linalgerror_singular, invalid='call',
73
- over='ignore', divide='ignore', under='ignore'):
74
- r = gufunc(x1, x2, signature=signature)
102
+ signature = "DD->D" if isComplexType(t) else "dd->d"
103
+ with np.errstate(
104
+ call=_raise_linalgerror_singular,
105
+ invalid="call",
106
+ over="ignore",
107
+ divide="ignore",
108
+ under="ignore",
109
+ ):
110
+ r: Array = gufunc(x1, x2, signature=signature)
75
111
 
76
112
  return wrap(r.astype(result_t, copy=False))
77
113
 
114
+
78
115
  # These functions are completely new here. If the library already has them
79
116
  # (i.e., numpy 2.0), use the library version instead of our wrapper.
80
- if hasattr(np.linalg, 'vector_norm'):
117
+ if hasattr(np.linalg, "vector_norm"):
81
118
  vector_norm = np.linalg.vector_norm
82
119
  else:
83
120
  vector_norm = get_xp(np)(_linalg.vector_norm)
84
121
 
85
- __all__ = linalg_all + _linalg.__all__ + ['solve']
86
122
 
87
- del get_xp
88
- del np
89
- del linalg_all
90
- del _linalg
123
+ __all__ = [
124
+ "LinAlgError",
125
+ "cond",
126
+ "det",
127
+ "eig",
128
+ "eigvals",
129
+ "eigvalsh",
130
+ "inv",
131
+ "lstsq",
132
+ "matrix_power",
133
+ "multi_dot",
134
+ "norm",
135
+ "tensorinv",
136
+ "tensorsolve",
137
+ ]
138
+ __all__ += _linalg.__all__
139
+ __all__ += ["solve", "vector_norm"]
140
+
141
+
142
+ def __dir__() -> list[str]:
143
+ return __all__
@@ -9,16 +9,14 @@ for n in dir(torch):
9
9
  or 'cpu' in n
10
10
  or 'backward' in n):
11
11
  continue
12
- exec(n + ' = torch.' + n)
12
+ exec(f"{n} = torch.{n}")
13
+ del n
13
14
 
14
15
  # These imports may overwrite names from the import * above.
15
16
  from ._aliases import * # noqa: F403
16
17
 
17
18
  # See the comment in the numpy __init__.py
18
19
  __import__(__package__ + '.linalg')
19
-
20
20
  __import__(__package__ + '.fft')
21
21
 
22
- from ..common._helpers import * # noqa: F403
23
-
24
- __array_api_version__ = '2023.12'
22
+ __array_api_version__ = '2024.12'