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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-313-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-313-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-313-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +166 -35
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-313-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-313-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-313-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +263 -157
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-313-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-313-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-313-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-313-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-313-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-313-aarch64-linux-musl.so +0 -0
  134. scipy/integrate/_quadpack_py.py +11 -7
  135. scipy/integrate/_quadrature.py +3 -3
  136. scipy/integrate/_rules/_base.py +2 -2
  137. scipy/integrate/_tanhsinh.py +48 -47
  138. scipy/integrate/_test_multivariate.cpython-313-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-313-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-313-aarch64-linux-musl.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +56 -48
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-313-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-313-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-313-aarch64-linux-musl.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-313-aarch64-linux-musl.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-313-aarch64-linux-musl.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-313-aarch64-linux-musl.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_fast_matrix_market/_fmm_core.cpython-313-aarch64-linux-musl.so +0 -0
  177. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  178. scipy/io/_harwell_boeing/hb.py +7 -11
  179. scipy/io/_idl.py +5 -7
  180. scipy/io/_netcdf.py +15 -5
  181. scipy/io/_test_fortran.cpython-313-aarch64-linux-musl.so +0 -0
  182. scipy/io/arff/tests/test_arffread.py +3 -3
  183. scipy/io/matlab/__init__.py +5 -3
  184. scipy/io/matlab/_mio.py +4 -1
  185. scipy/io/matlab/_mio5.py +19 -13
  186. scipy/io/matlab/_mio5_utils.cpython-313-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-313-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-313-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/tests/test_mio.py +46 -18
  191. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  192. scipy/io/tests/test_mmio.py +7 -1
  193. scipy/io/tests/test_wavfile.py +41 -0
  194. scipy/io/wavfile.py +57 -10
  195. scipy/linalg/_basic.py +113 -86
  196. scipy/linalg/_cythonized_array_utils.cpython-313-aarch64-linux-musl.so +0 -0
  197. scipy/linalg/_decomp.py +22 -9
  198. scipy/linalg/_decomp_cholesky.py +28 -13
  199. scipy/linalg/_decomp_cossin.py +45 -30
  200. scipy/linalg/_decomp_interpolative.cpython-313-aarch64-linux-musl.so +0 -0
  201. scipy/linalg/_decomp_ldl.py +4 -1
  202. scipy/linalg/_decomp_lu.py +18 -6
  203. scipy/linalg/_decomp_lu_cython.cpython-313-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_polar.py +2 -0
  205. scipy/linalg/_decomp_qr.py +6 -2
  206. scipy/linalg/_decomp_qz.py +3 -0
  207. scipy/linalg/_decomp_schur.py +3 -1
  208. scipy/linalg/_decomp_svd.py +13 -2
  209. scipy/linalg/_decomp_update.cpython-313-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-313-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-313-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-313-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_procrustes.py +2 -0
  220. scipy/linalg/_sketches.py +17 -6
  221. scipy/linalg/_solve_toeplitz.cpython-313-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_solvers.py +7 -2
  223. scipy/linalg/_special_matrices.py +26 -36
  224. scipy/linalg/cython_blas.cpython-313-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-313-aarch64-linux-musl.so +0 -0
  226. scipy/linalg/lapack.py +22 -2
  227. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  228. scipy/linalg/tests/test_basic.py +31 -16
  229. scipy/linalg/tests/test_batch.py +588 -0
  230. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  231. scipy/linalg/tests/test_decomp.py +40 -3
  232. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  233. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_ctest.cpython-313-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-313-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_delegators.py +8 -2
  243. scipy/ndimage/_filters.py +453 -5
  244. scipy/ndimage/_interpolation.py +36 -6
  245. scipy/ndimage/_measurements.py +4 -2
  246. scipy/ndimage/_morphology.py +5 -0
  247. scipy/ndimage/_nd_image.cpython-313-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-313-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-313-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +370 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-313-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-313-aarch64-linux-musl.so +0 -0
  262. scipy/optimize/_bracket.py +17 -24
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-313-aarch64-linux-musl.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-313-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-313-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-313-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-313-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_lbfgsb_py.py +57 -16
  276. scipy/optimize/_linprog_doc.py +2 -2
  277. scipy/optimize/_linprog_highs.py +2 -2
  278. scipy/optimize/_linprog_ip.py +25 -10
  279. scipy/optimize/_linprog_util.py +14 -16
  280. scipy/optimize/_lsap.cpython-313-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lsq/common.py +3 -3
  282. scipy/optimize/_lsq/dogbox.py +16 -2
  283. scipy/optimize/_lsq/givens_elimination.cpython-313-aarch64-linux-musl.so +0 -0
  284. scipy/optimize/_lsq/least_squares.py +198 -126
  285. scipy/optimize/_lsq/lsq_linear.py +6 -6
  286. scipy/optimize/_lsq/trf.py +35 -8
  287. scipy/optimize/_milp.py +3 -1
  288. scipy/optimize/_minimize.py +105 -36
  289. scipy/optimize/_minpack.cpython-313-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-313-aarch64-linux-musl.so +0 -0
  292. scipy/optimize/_nnls.py +20 -21
  293. scipy/optimize/_nonlin.py +34 -3
  294. scipy/optimize/_numdiff.py +288 -110
  295. scipy/optimize/_optimize.py +86 -48
  296. scipy/optimize/_pava_pybind.cpython-313-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_remove_redundancy.py +5 -5
  298. scipy/optimize/_root_scalar.py +1 -1
  299. scipy/optimize/_shgo.py +6 -0
  300. scipy/optimize/_shgo_lib/_complex.py +1 -1
  301. scipy/optimize/_slsqp_py.py +216 -124
  302. scipy/optimize/_slsqplib.cpython-313-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_spectral.py +1 -1
  304. scipy/optimize/_tnc.py +8 -1
  305. scipy/optimize/_trlib/_trlib.cpython-313-aarch64-linux-musl.so +0 -0
  306. scipy/optimize/_trustregion.py +20 -6
  307. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  308. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  309. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  310. scipy/optimize/_trustregion_constr/projections.py +12 -8
  311. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  312. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  313. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  314. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  315. scipy/optimize/_trustregion_exact.py +0 -1
  316. scipy/optimize/_zeros.cpython-313-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-313-aarch64-linux-musl.so +0 -0
  319. scipy/optimize/slsqp.py +0 -1
  320. scipy/optimize/tests/test__basinhopping.py +1 -1
  321. scipy/optimize/tests/test__differential_evolution.py +4 -4
  322. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  323. scipy/optimize/tests/test__numdiff.py +66 -22
  324. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  325. scipy/optimize/tests/test__shgo.py +9 -1
  326. scipy/optimize/tests/test_bracket.py +36 -46
  327. scipy/optimize/tests/test_chandrupatla.py +133 -135
  328. scipy/optimize/tests/test_cobyla.py +74 -45
  329. scipy/optimize/tests/test_constraints.py +1 -1
  330. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  331. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  332. scipy/optimize/tests/test_least_squares.py +125 -13
  333. scipy/optimize/tests/test_linear_assignment.py +3 -3
  334. scipy/optimize/tests/test_linprog.py +3 -3
  335. scipy/optimize/tests/test_lsq_linear.py +6 -6
  336. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  337. scipy/optimize/tests/test_minpack.py +4 -4
  338. scipy/optimize/tests/test_nnls.py +43 -3
  339. scipy/optimize/tests/test_nonlin.py +36 -0
  340. scipy/optimize/tests/test_optimize.py +95 -17
  341. scipy/optimize/tests/test_slsqp.py +36 -4
  342. scipy/optimize/tests/test_zeros.py +34 -1
  343. scipy/signal/__init__.py +12 -23
  344. scipy/signal/_delegators.py +568 -0
  345. scipy/signal/_filter_design.py +459 -241
  346. scipy/signal/_fir_filter_design.py +262 -90
  347. scipy/signal/_lti_conversion.py +3 -2
  348. scipy/signal/_ltisys.py +118 -91
  349. scipy/signal/_max_len_seq_inner.cpython-313-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-313-aarch64-linux-musl.so +0 -0
  351. scipy/signal/_polyutils.py +172 -0
  352. scipy/signal/_short_time_fft.py +519 -70
  353. scipy/signal/_signal_api.py +30 -0
  354. scipy/signal/_signaltools.py +719 -399
  355. scipy/signal/_sigtools.cpython-313-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-313-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +230 -50
  358. scipy/signal/_spline.cpython-313-aarch64-linux-musl.so +0 -0
  359. scipy/signal/_spline_filters.py +108 -68
  360. scipy/signal/_support_alternative_backends.py +73 -0
  361. scipy/signal/_upfirdn.py +4 -1
  362. scipy/signal/_upfirdn_apply.cpython-313-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_waveforms.py +2 -11
  364. scipy/signal/_wavelets.py +1 -1
  365. scipy/signal/fir_filter_design.py +1 -0
  366. scipy/signal/spline.py +4 -11
  367. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  368. scipy/signal/tests/test_bsplines.py +114 -79
  369. scipy/signal/tests/test_cont2discrete.py +9 -2
  370. scipy/signal/tests/test_filter_design.py +721 -481
  371. scipy/signal/tests/test_fir_filter_design.py +332 -140
  372. scipy/signal/tests/test_savitzky_golay.py +4 -3
  373. scipy/signal/tests/test_short_time_fft.py +221 -3
  374. scipy/signal/tests/test_signaltools.py +2144 -1348
  375. scipy/signal/tests/test_spectral.py +50 -6
  376. scipy/signal/tests/test_splines.py +161 -96
  377. scipy/signal/tests/test_upfirdn.py +84 -50
  378. scipy/signal/tests/test_waveforms.py +20 -0
  379. scipy/signal/tests/test_windows.py +607 -466
  380. scipy/signal/windows/_windows.py +287 -148
  381. scipy/sparse/__init__.py +23 -4
  382. scipy/sparse/_base.py +270 -108
  383. scipy/sparse/_bsr.py +7 -4
  384. scipy/sparse/_compressed.py +59 -231
  385. scipy/sparse/_construct.py +90 -38
  386. scipy/sparse/_coo.py +115 -181
  387. scipy/sparse/_csc.py +4 -4
  388. scipy/sparse/_csparsetools.cpython-313-aarch64-linux-musl.so +0 -0
  389. scipy/sparse/_csr.py +2 -2
  390. scipy/sparse/_data.py +48 -48
  391. scipy/sparse/_dia.py +105 -18
  392. scipy/sparse/_dok.py +0 -23
  393. scipy/sparse/_index.py +4 -4
  394. scipy/sparse/_matrix.py +23 -0
  395. scipy/sparse/_sparsetools.cpython-313-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_sputils.py +37 -22
  397. scipy/sparse/base.py +0 -9
  398. scipy/sparse/bsr.py +0 -14
  399. scipy/sparse/compressed.py +0 -23
  400. scipy/sparse/construct.py +0 -6
  401. scipy/sparse/coo.py +0 -14
  402. scipy/sparse/csc.py +0 -3
  403. scipy/sparse/csgraph/_flow.cpython-313-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-313-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-313-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-313-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-313-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-313-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-313-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  411. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  412. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  413. scipy/sparse/csr.py +0 -5
  414. scipy/sparse/data.py +1 -6
  415. scipy/sparse/dia.py +0 -7
  416. scipy/sparse/dok.py +0 -10
  417. scipy/sparse/linalg/_dsolve/_superlu.cpython-313-aarch64-linux-musl.so +0 -0
  418. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  419. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  420. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313-aarch64-linux-musl.so +0 -0
  421. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  422. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  423. scipy/sparse/linalg/_interface.py +17 -18
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-313-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-313-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-313-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-313-aarch64-linux-musl.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  438. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  439. scipy/sparse/tests/test_base.py +214 -42
  440. scipy/sparse/tests/test_common1d.py +7 -7
  441. scipy/sparse/tests/test_construct.py +1 -1
  442. scipy/sparse/tests/test_coo.py +272 -4
  443. scipy/sparse/tests/test_sparsetools.py +5 -0
  444. scipy/sparse/tests/test_sputils.py +36 -7
  445. scipy/spatial/_ckdtree.cpython-313-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-313-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-313-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-313-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-313-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-313-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/distance.py +49 -42
  452. scipy/spatial/tests/test_distance.py +15 -1
  453. scipy/spatial/tests/test_kdtree.py +1 -0
  454. scipy/spatial/tests/test_qhull.py +7 -2
  455. scipy/spatial/transform/__init__.py +5 -3
  456. scipy/spatial/transform/_rigid_transform.cpython-313-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-313-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  459. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  460. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  461. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  462. scipy/special/__init__.py +1 -47
  463. scipy/special/_add_newdocs.py +34 -772
  464. scipy/special/_basic.py +22 -25
  465. scipy/special/_comb.cpython-313-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-313-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  468. scipy/special/_logsumexp.py +67 -58
  469. scipy/special/_orthogonal.pyi +1 -1
  470. scipy/special/_specfun.cpython-313-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  472. scipy/special/_spherical_bessel.py +4 -4
  473. scipy/special/_support_alternative_backends.py +212 -119
  474. scipy/special/_test_internal.cpython-313-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  477. scipy/special/_ufuncs.pyi +1 -0
  478. scipy/special/_ufuncs.pyx +215 -1400
  479. scipy/special/_ufuncs_cxx.cpython-313-aarch64-linux-musl.so +0 -0
  480. scipy/special/_ufuncs_cxx.pxd +2 -15
  481. scipy/special/_ufuncs_cxx.pyx +5 -44
  482. scipy/special/_ufuncs_cxx_defs.h +2 -16
  483. scipy/special/_ufuncs_defs.h +0 -8
  484. scipy/special/cython_special.cpython-313-aarch64-linux-musl.so +0 -0
  485. scipy/special/cython_special.pxd +1 -1
  486. scipy/special/tests/_cython_examples/meson.build +10 -1
  487. scipy/special/tests/test_basic.py +153 -20
  488. scipy/special/tests/test_boost_ufuncs.py +3 -0
  489. scipy/special/tests/test_cdflib.py +35 -11
  490. scipy/special/tests/test_gammainc.py +16 -0
  491. scipy/special/tests/test_hyp2f1.py +2 -2
  492. scipy/special/tests/test_log1mexp.py +85 -0
  493. scipy/special/tests/test_logsumexp.py +206 -64
  494. scipy/special/tests/test_mpmath.py +1 -0
  495. scipy/special/tests/test_nan_inputs.py +1 -1
  496. scipy/special/tests/test_orthogonal.py +17 -18
  497. scipy/special/tests/test_sf_error.py +3 -2
  498. scipy/special/tests/test_sph_harm.py +6 -7
  499. scipy/special/tests/test_support_alternative_backends.py +211 -76
  500. scipy/stats/__init__.py +4 -1
  501. scipy/stats/_ansari_swilk_statistics.cpython-313-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +5 -12
  503. scipy/stats/_biasedurn.cpython-313-aarch64-linux-musl.so +0 -0
  504. scipy/stats/_continued_fraction.py +387 -0
  505. scipy/stats/_continuous_distns.py +277 -310
  506. scipy/stats/_correlation.py +1 -1
  507. scipy/stats/_covariance.py +6 -3
  508. scipy/stats/_discrete_distns.py +39 -32
  509. scipy/stats/_distn_infrastructure.py +39 -12
  510. scipy/stats/_distribution_infrastructure.py +900 -238
  511. scipy/stats/_entropy.py +9 -10
  512. scipy/{_lib → stats}/_finite_differences.py +1 -1
  513. scipy/stats/_hypotests.py +83 -50
  514. scipy/stats/_kde.py +53 -49
  515. scipy/stats/_ksstats.py +1 -1
  516. scipy/stats/_levy_stable/__init__.py +7 -15
  517. scipy/stats/_levy_stable/levyst.cpython-313-aarch64-linux-musl.so +0 -0
  518. scipy/stats/_morestats.py +118 -73
  519. scipy/stats/_mstats_basic.py +13 -17
  520. scipy/stats/_mstats_extras.py +8 -8
  521. scipy/stats/_multivariate.py +89 -113
  522. scipy/stats/_new_distributions.py +97 -20
  523. scipy/stats/_page_trend_test.py +12 -5
  524. scipy/stats/_probability_distribution.py +265 -43
  525. scipy/stats/_qmc.py +14 -9
  526. scipy/stats/_qmc_cy.cpython-313-aarch64-linux-musl.so +0 -0
  527. scipy/stats/_qmvnt.py +16 -95
  528. scipy/stats/_qmvnt_cy.cpython-313-aarch64-linux-musl.so +0 -0
  529. scipy/stats/_quantile.py +335 -0
  530. scipy/stats/_rcont/rcont.cpython-313-aarch64-linux-musl.so +0 -0
  531. scipy/stats/_resampling.py +4 -29
  532. scipy/stats/_sampling.py +1 -1
  533. scipy/stats/_sobol.cpython-313-aarch64-linux-musl.so +0 -0
  534. scipy/stats/_stats.cpython-313-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats_mstats_common.py +21 -2
  536. scipy/stats/_stats_py.py +550 -476
  537. scipy/stats/_stats_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  538. scipy/stats/_unuran/unuran_wrapper.cpython-313-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  540. scipy/stats/_variation.py +6 -8
  541. scipy/stats/_wilcoxon.py +13 -7
  542. scipy/stats/tests/common_tests.py +6 -4
  543. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  544. scipy/stats/tests/test_continued_fraction.py +173 -0
  545. scipy/stats/tests/test_continuous.py +379 -60
  546. scipy/stats/tests/test_continuous_basic.py +18 -12
  547. scipy/stats/tests/test_discrete_basic.py +14 -8
  548. scipy/stats/tests/test_discrete_distns.py +16 -16
  549. scipy/stats/tests/test_distributions.py +95 -75
  550. scipy/stats/tests/test_entropy.py +40 -48
  551. scipy/stats/tests/test_fit.py +4 -3
  552. scipy/stats/tests/test_hypotests.py +153 -24
  553. scipy/stats/tests/test_kdeoth.py +109 -41
  554. scipy/stats/tests/test_marray.py +289 -0
  555. scipy/stats/tests/test_morestats.py +79 -47
  556. scipy/stats/tests/test_mstats_basic.py +3 -3
  557. scipy/stats/tests/test_multivariate.py +434 -83
  558. scipy/stats/tests/test_qmc.py +13 -10
  559. scipy/stats/tests/test_quantile.py +199 -0
  560. scipy/stats/tests/test_rank.py +119 -112
  561. scipy/stats/tests/test_resampling.py +47 -56
  562. scipy/stats/tests/test_sampling.py +9 -4
  563. scipy/stats/tests/test_stats.py +799 -939
  564. scipy/stats/tests/test_variation.py +8 -6
  565. scipy/version.py +2 -2
  566. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  567. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  568. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
  569. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  570. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  571. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  572. scipy/_lib/array_api_extra/_funcs.py +0 -484
  573. scipy/_lib/array_api_extra/_typing.py +0 -8
  574. scipy/interpolate/_bspl.cpython-313-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cobyla.cpython-313-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cython_nnls.cpython-313-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_slsqp.cpython-313-aarch64-linux-musl.so +0 -0
  578. scipy/spatial/qhull_src/COPYING.txt +0 -38
  579. scipy/special/libsf_error_state.so +0 -0
  580. scipy/special/tests/test_log_softmax.py +0 -109
  581. scipy/special/tests/test_xsf_cuda.py +0 -114
  582. scipy/special/xsf/binom.h +0 -89
  583. scipy/special/xsf/cdflib.h +0 -100
  584. scipy/special/xsf/cephes/airy.h +0 -307
  585. scipy/special/xsf/cephes/besselpoly.h +0 -51
  586. scipy/special/xsf/cephes/beta.h +0 -257
  587. scipy/special/xsf/cephes/cbrt.h +0 -131
  588. scipy/special/xsf/cephes/chbevl.h +0 -85
  589. scipy/special/xsf/cephes/chdtr.h +0 -193
  590. scipy/special/xsf/cephes/const.h +0 -87
  591. scipy/special/xsf/cephes/ellie.h +0 -293
  592. scipy/special/xsf/cephes/ellik.h +0 -251
  593. scipy/special/xsf/cephes/ellpe.h +0 -107
  594. scipy/special/xsf/cephes/ellpk.h +0 -117
  595. scipy/special/xsf/cephes/expn.h +0 -260
  596. scipy/special/xsf/cephes/gamma.h +0 -398
  597. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  598. scipy/special/xsf/cephes/hyperg.h +0 -361
  599. scipy/special/xsf/cephes/i0.h +0 -149
  600. scipy/special/xsf/cephes/i1.h +0 -158
  601. scipy/special/xsf/cephes/igam.h +0 -421
  602. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  603. scipy/special/xsf/cephes/igami.h +0 -313
  604. scipy/special/xsf/cephes/j0.h +0 -225
  605. scipy/special/xsf/cephes/j1.h +0 -198
  606. scipy/special/xsf/cephes/jv.h +0 -715
  607. scipy/special/xsf/cephes/k0.h +0 -164
  608. scipy/special/xsf/cephes/k1.h +0 -163
  609. scipy/special/xsf/cephes/kn.h +0 -243
  610. scipy/special/xsf/cephes/lanczos.h +0 -112
  611. scipy/special/xsf/cephes/ndtr.h +0 -275
  612. scipy/special/xsf/cephes/poch.h +0 -85
  613. scipy/special/xsf/cephes/polevl.h +0 -167
  614. scipy/special/xsf/cephes/psi.h +0 -194
  615. scipy/special/xsf/cephes/rgamma.h +0 -111
  616. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  617. scipy/special/xsf/cephes/shichi.h +0 -248
  618. scipy/special/xsf/cephes/sici.h +0 -224
  619. scipy/special/xsf/cephes/sindg.h +0 -221
  620. scipy/special/xsf/cephes/tandg.h +0 -139
  621. scipy/special/xsf/cephes/trig.h +0 -58
  622. scipy/special/xsf/cephes/unity.h +0 -186
  623. scipy/special/xsf/cephes/zeta.h +0 -172
  624. scipy/special/xsf/config.h +0 -304
  625. scipy/special/xsf/digamma.h +0 -205
  626. scipy/special/xsf/error.h +0 -57
  627. scipy/special/xsf/evalpoly.h +0 -47
  628. scipy/special/xsf/expint.h +0 -266
  629. scipy/special/xsf/hyp2f1.h +0 -694
  630. scipy/special/xsf/iv_ratio.h +0 -173
  631. scipy/special/xsf/lambertw.h +0 -150
  632. scipy/special/xsf/loggamma.h +0 -163
  633. scipy/special/xsf/sici.h +0 -200
  634. scipy/special/xsf/tools.h +0 -427
  635. scipy/special/xsf/trig.h +0 -164
  636. scipy/special/xsf/wright_bessel.h +0 -843
  637. scipy/special/xsf/zlog1.h +0 -35
  638. scipy/stats/_mvn.cpython-313-aarch64-linux-musl.so +0 -0
  639. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  640. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  641. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
Binary file
Binary file
@@ -1,484 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import warnings
4
- from typing import TYPE_CHECKING
5
-
6
- if TYPE_CHECKING:
7
- from ._typing import Array, ModuleType
8
-
9
- __all__ = ["atleast_nd", "cov", "create_diagonal", "expand_dims", "kron", "sinc"]
10
-
11
-
12
- def atleast_nd(x: Array, /, *, ndim: int, xp: ModuleType) -> Array:
13
- """
14
- Recursively expand the dimension of an array to at least `ndim`.
15
-
16
- Parameters
17
- ----------
18
- x : array
19
- ndim : int
20
- The minimum number of dimensions for the result.
21
- xp : array_namespace
22
- The standard-compatible namespace for `x`.
23
-
24
- Returns
25
- -------
26
- res : array
27
- An array with ``res.ndim`` >= `ndim`.
28
- If ``x.ndim`` >= `ndim`, `x` is returned.
29
- If ``x.ndim`` < `ndim`, `x` is expanded by prepending new axes
30
- until ``res.ndim`` equals `ndim`.
31
-
32
- Examples
33
- --------
34
- >>> import array_api_strict as xp
35
- >>> import array_api_extra as xpx
36
- >>> x = xp.asarray([1])
37
- >>> xpx.atleast_nd(x, ndim=3, xp=xp)
38
- Array([[[1]]], dtype=array_api_strict.int64)
39
-
40
- >>> x = xp.asarray([[[1, 2],
41
- ... [3, 4]]])
42
- >>> xpx.atleast_nd(x, ndim=1, xp=xp) is x
43
- True
44
-
45
- """
46
- if x.ndim < ndim:
47
- x = xp.expand_dims(x, axis=0)
48
- x = atleast_nd(x, ndim=ndim, xp=xp)
49
- return x
50
-
51
-
52
- def cov(m: Array, /, *, xp: ModuleType) -> Array:
53
- """
54
- Estimate a covariance matrix.
55
-
56
- Covariance indicates the level to which two variables vary together.
57
- If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,
58
- then the covariance matrix element :math:`C_{ij}` is the covariance of
59
- :math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance
60
- of :math:`x_i`.
61
-
62
- This provides a subset of the functionality of ``numpy.cov``.
63
-
64
- Parameters
65
- ----------
66
- m : array
67
- A 1-D or 2-D array containing multiple variables and observations.
68
- Each row of `m` represents a variable, and each column a single
69
- observation of all those variables.
70
- xp : array_namespace
71
- The standard-compatible namespace for `m`.
72
-
73
- Returns
74
- -------
75
- res : array
76
- The covariance matrix of the variables.
77
-
78
- Examples
79
- --------
80
- >>> import array_api_strict as xp
81
- >>> import array_api_extra as xpx
82
-
83
- Consider two variables, :math:`x_0` and :math:`x_1`, which
84
- correlate perfectly, but in opposite directions:
85
-
86
- >>> x = xp.asarray([[0, 2], [1, 1], [2, 0]]).T
87
- >>> x
88
- Array([[0, 1, 2],
89
- [2, 1, 0]], dtype=array_api_strict.int64)
90
-
91
- Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance
92
- matrix shows this clearly:
93
-
94
- >>> xpx.cov(x, xp=xp)
95
- Array([[ 1., -1.],
96
- [-1., 1.]], dtype=array_api_strict.float64)
97
-
98
-
99
- Note that element :math:`C_{0,1}`, which shows the correlation between
100
- :math:`x_0` and :math:`x_1`, is negative.
101
-
102
- Further, note how `x` and `y` are combined:
103
-
104
- >>> x = xp.asarray([-2.1, -1, 4.3])
105
- >>> y = xp.asarray([3, 1.1, 0.12])
106
- >>> X = xp.stack((x, y), axis=0)
107
- >>> xpx.cov(X, xp=xp)
108
- Array([[11.71 , -4.286 ],
109
- [-4.286 , 2.14413333]], dtype=array_api_strict.float64)
110
-
111
- >>> xpx.cov(x, xp=xp)
112
- Array(11.71, dtype=array_api_strict.float64)
113
-
114
- >>> xpx.cov(y, xp=xp)
115
- Array(2.14413333, dtype=array_api_strict.float64)
116
-
117
- """
118
- m = xp.asarray(m, copy=True)
119
- dtype = (
120
- xp.float64 if xp.isdtype(m.dtype, "integral") else xp.result_type(m, xp.float64)
121
- )
122
-
123
- m = atleast_nd(m, ndim=2, xp=xp)
124
- m = xp.astype(m, dtype)
125
-
126
- avg = _mean(m, axis=1, xp=xp)
127
- fact = m.shape[1] - 1
128
-
129
- if fact <= 0:
130
- warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning, stacklevel=2)
131
- fact = 0.0
132
-
133
- m -= avg[:, None]
134
- m_transpose = m.T
135
- if xp.isdtype(m_transpose.dtype, "complex floating"):
136
- m_transpose = xp.conj(m_transpose)
137
- c = m @ m_transpose
138
- c /= fact
139
- axes = tuple(axis for axis, length in enumerate(c.shape) if length == 1)
140
- return xp.squeeze(c, axis=axes)
141
-
142
-
143
- def create_diagonal(x: Array, /, *, offset: int = 0, xp: ModuleType) -> Array:
144
- """
145
- Construct a diagonal array.
146
-
147
- Parameters
148
- ----------
149
- x : array
150
- A 1-D array
151
- offset : int, optional
152
- Offset from the leading diagonal (default is ``0``).
153
- Use positive ints for diagonals above the leading diagonal,
154
- and negative ints for diagonals below the leading diagonal.
155
- xp : array_namespace
156
- The standard-compatible namespace for `x`.
157
-
158
- Returns
159
- -------
160
- res : array
161
- A 2-D array with `x` on the diagonal (offset by `offset`).
162
-
163
- Examples
164
- --------
165
- >>> import array_api_strict as xp
166
- >>> import array_api_extra as xpx
167
- >>> x = xp.asarray([2, 4, 8])
168
-
169
- >>> xpx.create_diagonal(x, xp=xp)
170
- Array([[2, 0, 0],
171
- [0, 4, 0],
172
- [0, 0, 8]], dtype=array_api_strict.int64)
173
-
174
- >>> xpx.create_diagonal(x, offset=-2, xp=xp)
175
- Array([[0, 0, 0, 0, 0],
176
- [0, 0, 0, 0, 0],
177
- [2, 0, 0, 0, 0],
178
- [0, 4, 0, 0, 0],
179
- [0, 0, 8, 0, 0]], dtype=array_api_strict.int64)
180
-
181
- """
182
- if x.ndim != 1:
183
- err_msg = "`x` must be 1-dimensional."
184
- raise ValueError(err_msg)
185
- n = x.shape[0] + abs(offset)
186
- diag = xp.zeros(n**2, dtype=x.dtype)
187
- i = offset if offset >= 0 else abs(offset) * n
188
- diag[i : min(n * (n - offset), diag.shape[0]) : n + 1] = x
189
- return xp.reshape(diag, (n, n))
190
-
191
-
192
- def _mean(
193
- x: Array,
194
- /,
195
- *,
196
- axis: int | tuple[int, ...] | None = None,
197
- keepdims: bool = False,
198
- xp: ModuleType,
199
- ) -> Array:
200
- """
201
- Complex mean, https://github.com/data-apis/array-api/issues/846.
202
- """
203
- if xp.isdtype(x.dtype, "complex floating"):
204
- x_real = xp.real(x)
205
- x_imag = xp.imag(x)
206
- mean_real = xp.mean(x_real, axis=axis, keepdims=keepdims)
207
- mean_imag = xp.mean(x_imag, axis=axis, keepdims=keepdims)
208
- return mean_real + (mean_imag * xp.asarray(1j))
209
- return xp.mean(x, axis=axis, keepdims=keepdims)
210
-
211
-
212
- def expand_dims(
213
- a: Array, /, *, axis: int | tuple[int, ...] = (0,), xp: ModuleType
214
- ) -> Array:
215
- """
216
- Expand the shape of an array.
217
-
218
- Insert (a) new axis/axes that will appear at the position(s) specified by
219
- `axis` in the expanded array shape.
220
-
221
- This is ``xp.expand_dims`` for `axis` an int *or a tuple of ints*.
222
- Roughly equivalent to ``numpy.expand_dims`` for NumPy arrays.
223
-
224
- Parameters
225
- ----------
226
- a : array
227
- axis : int or tuple of ints, optional
228
- Position(s) in the expanded axes where the new axis (or axes) is/are placed.
229
- If multiple positions are provided, they should be unique (note that a position
230
- given by a positive index could also be referred to by a negative index -
231
- that will also result in an error).
232
- Default: ``(0,)``.
233
- xp : array_namespace
234
- The standard-compatible namespace for `a`.
235
-
236
- Returns
237
- -------
238
- res : array
239
- `a` with an expanded shape.
240
-
241
- Examples
242
- --------
243
- >>> import array_api_strict as xp
244
- >>> import array_api_extra as xpx
245
- >>> x = xp.asarray([1, 2])
246
- >>> x.shape
247
- (2,)
248
-
249
- The following is equivalent to ``x[xp.newaxis, :]`` or ``x[xp.newaxis]``:
250
-
251
- >>> y = xpx.expand_dims(x, axis=0, xp=xp)
252
- >>> y
253
- Array([[1, 2]], dtype=array_api_strict.int64)
254
- >>> y.shape
255
- (1, 2)
256
-
257
- The following is equivalent to ``x[:, xp.newaxis]``:
258
-
259
- >>> y = xpx.expand_dims(x, axis=1, xp=xp)
260
- >>> y
261
- Array([[1],
262
- [2]], dtype=array_api_strict.int64)
263
- >>> y.shape
264
- (2, 1)
265
-
266
- ``axis`` may also be a tuple:
267
-
268
- >>> y = xpx.expand_dims(x, axis=(0, 1), xp=xp)
269
- >>> y
270
- Array([[[1, 2]]], dtype=array_api_strict.int64)
271
-
272
- >>> y = xpx.expand_dims(x, axis=(2, 0), xp=xp)
273
- >>> y
274
- Array([[[1],
275
- [2]]], dtype=array_api_strict.int64)
276
-
277
- """
278
- if not isinstance(axis, tuple):
279
- axis = (axis,)
280
- ndim = a.ndim + len(axis)
281
- if axis != () and (min(axis) < -ndim or max(axis) >= ndim):
282
- err_msg = (
283
- f"a provided axis position is out of bounds for array of dimension {a.ndim}"
284
- )
285
- raise IndexError(err_msg)
286
- axis = tuple(dim % ndim for dim in axis)
287
- if len(set(axis)) != len(axis):
288
- err_msg = "Duplicate dimensions specified in `axis`."
289
- raise ValueError(err_msg)
290
- for i in sorted(axis):
291
- a = xp.expand_dims(a, axis=i)
292
- return a
293
-
294
-
295
- def kron(a: Array, b: Array, /, *, xp: ModuleType) -> Array:
296
- """
297
- Kronecker product of two arrays.
298
-
299
- Computes the Kronecker product, a composite array made of blocks of the
300
- second array scaled by the first.
301
-
302
- Equivalent to ``numpy.kron`` for NumPy arrays.
303
-
304
- Parameters
305
- ----------
306
- a, b : array
307
- xp : array_namespace
308
- The standard-compatible namespace for `a` and `b`.
309
-
310
- Returns
311
- -------
312
- res : array
313
- The Kronecker product of `a` and `b`.
314
-
315
- Notes
316
- -----
317
- The function assumes that the number of dimensions of `a` and `b`
318
- are the same, if necessary prepending the smallest with ones.
319
- If ``a.shape = (r0,r1,..,rN)`` and ``b.shape = (s0,s1,...,sN)``,
320
- the Kronecker product has shape ``(r0*s0, r1*s1, ..., rN*SN)``.
321
- The elements are products of elements from `a` and `b`, organized
322
- explicitly by::
323
-
324
- kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
325
-
326
- where::
327
-
328
- kt = it * st + jt, t = 0,...,N
329
-
330
- In the common 2-D case (N=1), the block structure can be visualized::
331
-
332
- [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
333
- [ ... ... ],
334
- [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
335
-
336
-
337
- Examples
338
- --------
339
- >>> import array_api_strict as xp
340
- >>> import array_api_extra as xpx
341
- >>> xpx.kron(xp.asarray([1, 10, 100]), xp.asarray([5, 6, 7]), xp=xp)
342
- Array([ 5, 6, 7, 50, 60, 70, 500,
343
- 600, 700], dtype=array_api_strict.int64)
344
-
345
- >>> xpx.kron(xp.asarray([5, 6, 7]), xp.asarray([1, 10, 100]), xp=xp)
346
- Array([ 5, 50, 500, 6, 60, 600, 7,
347
- 70, 700], dtype=array_api_strict.int64)
348
-
349
- >>> xpx.kron(xp.eye(2), xp.ones((2, 2)), xp=xp)
350
- Array([[1., 1., 0., 0.],
351
- [1., 1., 0., 0.],
352
- [0., 0., 1., 1.],
353
- [0., 0., 1., 1.]], dtype=array_api_strict.float64)
354
-
355
-
356
- >>> a = xp.reshape(xp.arange(100), (2, 5, 2, 5))
357
- >>> b = xp.reshape(xp.arange(24), (2, 3, 4))
358
- >>> c = xpx.kron(a, b, xp=xp)
359
- >>> c.shape
360
- (2, 10, 6, 20)
361
- >>> I = (1, 3, 0, 2)
362
- >>> J = (0, 2, 1)
363
- >>> J1 = (0,) + J # extend to ndim=4
364
- >>> S1 = (1,) + b.shape
365
- >>> K = tuple(xp.asarray(I) * xp.asarray(S1) + xp.asarray(J1))
366
- >>> c[K] == a[I]*b[J]
367
- Array(True, dtype=array_api_strict.bool)
368
-
369
- """
370
-
371
- b = xp.asarray(b)
372
- singletons = (1,) * (b.ndim - a.ndim)
373
- a = xp.broadcast_to(xp.asarray(a), singletons + a.shape)
374
-
375
- nd_b, nd_a = b.ndim, a.ndim
376
- nd_max = max(nd_b, nd_a)
377
- if nd_a == 0 or nd_b == 0:
378
- return xp.multiply(a, b)
379
-
380
- a_shape = a.shape
381
- b_shape = b.shape
382
-
383
- # Equalise the shapes by prepending smaller one with 1s
384
- a_shape = (1,) * max(0, nd_b - nd_a) + a_shape
385
- b_shape = (1,) * max(0, nd_a - nd_b) + b_shape
386
-
387
- # Insert empty dimensions
388
- a_arr = expand_dims(a, axis=tuple(range(nd_b - nd_a)), xp=xp)
389
- b_arr = expand_dims(b, axis=tuple(range(nd_a - nd_b)), xp=xp)
390
-
391
- # Compute the product
392
- a_arr = expand_dims(a_arr, axis=tuple(range(1, nd_max * 2, 2)), xp=xp)
393
- b_arr = expand_dims(b_arr, axis=tuple(range(0, nd_max * 2, 2)), xp=xp)
394
- result = xp.multiply(a_arr, b_arr)
395
-
396
- # Reshape back and return
397
- a_shape = xp.asarray(a_shape)
398
- b_shape = xp.asarray(b_shape)
399
- return xp.reshape(result, tuple(xp.multiply(a_shape, b_shape)))
400
-
401
-
402
- def sinc(x: Array, /, *, xp: ModuleType) -> Array:
403
- r"""
404
- Return the normalized sinc function.
405
-
406
- The sinc function is equal to :math:`\sin(\pi x)/(\pi x)` for any argument
407
- :math:`x\ne 0`. ``sinc(0)`` takes the limit value 1, making ``sinc`` not
408
- only everywhere continuous but also infinitely differentiable.
409
-
410
- .. note::
411
-
412
- Note the normalization factor of ``pi`` used in the definition.
413
- This is the most commonly used definition in signal processing.
414
- Use ``sinc(x / xp.pi)`` to obtain the unnormalized sinc function
415
- :math:`\sin(x)/x` that is more common in mathematics.
416
-
417
- Parameters
418
- ----------
419
- x : array
420
- Array (possibly multi-dimensional) of values for which to calculate
421
- ``sinc(x)``. Must have a real floating point dtype.
422
- xp : array_namespace
423
- The standard-compatible namespace for `x`.
424
-
425
- Returns
426
- -------
427
- res : array
428
- ``sinc(x)`` calculated elementwise, which has the same shape as the input.
429
-
430
- Notes
431
- -----
432
- The name sinc is short for "sine cardinal" or "sinus cardinalis".
433
-
434
- The sinc function is used in various signal processing applications,
435
- including in anti-aliasing, in the construction of a Lanczos resampling
436
- filter, and in interpolation.
437
-
438
- For bandlimited interpolation of discrete-time signals, the ideal
439
- interpolation kernel is proportional to the sinc function.
440
-
441
- References
442
- ----------
443
- .. [1] Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web
444
- Resource. https://mathworld.wolfram.com/SincFunction.html
445
- .. [2] Wikipedia, "Sinc function",
446
- https://en.wikipedia.org/wiki/Sinc_function
447
-
448
- Examples
449
- --------
450
- >>> import array_api_strict as xp
451
- >>> import array_api_extra as xpx
452
- >>> x = xp.linspace(-4, 4, 41)
453
- >>> xpx.sinc(x, xp=xp)
454
- Array([-3.89817183e-17, -4.92362781e-02,
455
- -8.40918587e-02, -8.90384387e-02,
456
- -5.84680802e-02, 3.89817183e-17,
457
- 6.68206631e-02, 1.16434881e-01,
458
- 1.26137788e-01, 8.50444803e-02,
459
- -3.89817183e-17, -1.03943254e-01,
460
- -1.89206682e-01, -2.16236208e-01,
461
- -1.55914881e-01, 3.89817183e-17,
462
- 2.33872321e-01, 5.04551152e-01,
463
- 7.56826729e-01, 9.35489284e-01,
464
- 1.00000000e+00, 9.35489284e-01,
465
- 7.56826729e-01, 5.04551152e-01,
466
- 2.33872321e-01, 3.89817183e-17,
467
- -1.55914881e-01, -2.16236208e-01,
468
- -1.89206682e-01, -1.03943254e-01,
469
- -3.89817183e-17, 8.50444803e-02,
470
- 1.26137788e-01, 1.16434881e-01,
471
- 6.68206631e-02, 3.89817183e-17,
472
- -5.84680802e-02, -8.90384387e-02,
473
- -8.40918587e-02, -4.92362781e-02,
474
- -3.89817183e-17], dtype=array_api_strict.float64)
475
-
476
- """
477
- if not xp.isdtype(x.dtype, "real floating"):
478
- err_msg = "`x` must have a real floating data type."
479
- raise ValueError(err_msg)
480
- # no scalars in `where` - array-api#807
481
- y = xp.pi * xp.where(
482
- x, x, xp.asarray(xp.finfo(x.dtype).smallest_normal, dtype=x.dtype)
483
- )
484
- return xp.sin(y) / y
@@ -1,8 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from types import ModuleType
4
- from typing import Any
5
-
6
- Array = Any # To be changed to a Protocol later (see array-api#589)
7
-
8
- __all__ = ["Array", "ModuleType"]
@@ -1,38 +0,0 @@
1
- Qhull, Copyright (c) 1993-2019
2
-
3
- C.B. Barber
4
- Arlington, MA
5
-
6
- and
7
-
8
- The National Science and Technology Research Center for
9
- Computation and Visualization of Geometric Structures
10
- (The Geometry Center)
11
- University of Minnesota
12
-
13
- email: qhull@qhull.org
14
-
15
- This software includes Qhull from C.B. Barber and The Geometry Center.
16
- Qhull is copyrighted as noted above. Qhull is free software and may
17
- be obtained via http from www.qhull.org. It may be freely copied, modified,
18
- and redistributed under the following conditions:
19
-
20
- 1. All copyright notices must remain intact in all files.
21
-
22
- 2. A copy of this text file must be distributed along with any copies
23
- of Qhull that you redistribute; this includes copies that you have
24
- modified, or copies of programs or other software products that
25
- include Qhull.
26
-
27
- 3. If you modify Qhull, you must include a notice giving the
28
- name of the person performing the modification, the date of
29
- modification, and the reason for such modification.
30
-
31
- 4. When distributing modified versions of Qhull, or other software
32
- products that include Qhull, you must provide notice that the original
33
- source code may be obtained as noted above.
34
-
35
- 5. There is no warranty or other guarantee of fitness for Qhull, it is
36
- provided solely "as is". Bug reports or fixes may be sent to
37
- qhull_bug@qhull.org; the authors may or may not act on them as
38
- they desire.
Binary file
@@ -1,109 +0,0 @@
1
- import numpy as np
2
- from numpy.testing import assert_allclose
3
-
4
- import pytest
5
-
6
- import scipy.special as sc
7
-
8
-
9
- @pytest.mark.parametrize('x, expected', [
10
- (np.array([1000, 1]), np.array([0, -999])),
11
-
12
- # Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
13
- # converted to float.
14
- (np.arange(4), np.array([-3.4401896985611953,
15
- -2.4401896985611953,
16
- -1.4401896985611953,
17
- -0.44018969856119533]))
18
- ])
19
- def test_log_softmax(x, expected):
20
- assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
21
-
22
-
23
- @pytest.fixture
24
- def log_softmax_x():
25
- x = np.arange(4)
26
- return x
27
-
28
-
29
- @pytest.fixture
30
- def log_softmax_expected():
31
- # Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
32
- # converted to float.
33
- expected = np.array([-3.4401896985611953,
34
- -2.4401896985611953,
35
- -1.4401896985611953,
36
- -0.44018969856119533])
37
- return expected
38
-
39
-
40
- def test_log_softmax_translation(log_softmax_x, log_softmax_expected):
41
- # Translation property. If all the values are changed by the same amount,
42
- # the softmax result does not change.
43
- x = log_softmax_x + 100
44
- expected = log_softmax_expected
45
- assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
46
-
47
-
48
- def test_log_softmax_noneaxis(log_softmax_x, log_softmax_expected):
49
- # When axis=None, softmax operates on the entire array, and preserves
50
- # the shape.
51
- x = log_softmax_x.reshape(2, 2)
52
- expected = log_softmax_expected.reshape(2, 2)
53
- assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
54
-
55
-
56
- @pytest.mark.parametrize('axis_2d, expected_2d', [
57
- (0, np.log(0.5) * np.ones((2, 2))),
58
- (1, np.array([[0, -999], [0, -999]]))
59
- ])
60
- def test_axes(axis_2d, expected_2d):
61
- assert_allclose(
62
- sc.log_softmax([[1000, 1], [1000, 1]], axis=axis_2d),
63
- expected_2d,
64
- rtol=1e-13,
65
- )
66
-
67
-
68
- @pytest.fixture
69
- def log_softmax_2d_x():
70
- x = np.arange(8).reshape(2, 4)
71
- return x
72
-
73
-
74
- @pytest.fixture
75
- def log_softmax_2d_expected():
76
- # Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
77
- # converted to float.
78
- expected = np.array([[-3.4401896985611953,
79
- -2.4401896985611953,
80
- -1.4401896985611953,
81
- -0.44018969856119533],
82
- [-3.4401896985611953,
83
- -2.4401896985611953,
84
- -1.4401896985611953,
85
- -0.44018969856119533]])
86
- return expected
87
-
88
-
89
- def test_log_softmax_2d_axis1(log_softmax_2d_x, log_softmax_2d_expected):
90
- x = log_softmax_2d_x
91
- expected = log_softmax_2d_expected
92
- assert_allclose(sc.log_softmax(x, axis=1), expected, rtol=1e-13)
93
-
94
-
95
- def test_log_softmax_2d_axis0(log_softmax_2d_x, log_softmax_2d_expected):
96
- x = log_softmax_2d_x.T
97
- expected = log_softmax_2d_expected.T
98
- assert_allclose(sc.log_softmax(x, axis=0), expected, rtol=1e-13)
99
-
100
-
101
- def test_log_softmax_3d(log_softmax_2d_x, log_softmax_2d_expected):
102
- # 3-d input, with a tuple for the axis.
103
- x_3d = log_softmax_2d_x.reshape(2, 2, 2)
104
- expected_3d = log_softmax_2d_expected.reshape(2, 2, 2)
105
- assert_allclose(sc.log_softmax(x_3d, axis=(1, 2)), expected_3d, rtol=1e-13)
106
-
107
-
108
- def test_log_softmax_scalar():
109
- assert_allclose(sc.log_softmax(1.0), 0.0, rtol=1e-13)