numpy 2.4.0__cp313-cp313t-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 (915) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +108 -0
  3. numpy/__init__.cython-30.pxd +1242 -0
  4. numpy/__init__.pxd +1155 -0
  5. numpy/__init__.py +942 -0
  6. numpy/__init__.pyi +6202 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +206 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +201 -0
  12. numpy/_core/__init__.pyi +666 -0
  13. numpy/_core/_add_newdocs.py +7151 -0
  14. numpy/_core/_add_newdocs.pyi +2 -0
  15. numpy/_core/_add_newdocs_scalars.py +381 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +130 -0
  18. numpy/_core/_asarray.pyi +43 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +56 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +54 -0
  25. numpy/_core/_internal.py +968 -0
  26. numpy/_core/_internal.pyi +61 -0
  27. numpy/_core/_methods.py +252 -0
  28. numpy/_core/_methods.pyi +22 -0
  29. numpy/_core/_multiarray_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  30. numpy/_core/_multiarray_umath.cpython-313t-aarch64-linux-musl.so +0 -0
  31. numpy/_core/_operand_flag_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  32. numpy/_core/_rational_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  33. numpy/_core/_simd.cpython-313t-aarch64-linux-musl.so +0 -0
  34. numpy/_core/_simd.pyi +35 -0
  35. numpy/_core/_string_helpers.py +100 -0
  36. numpy/_core/_string_helpers.pyi +12 -0
  37. numpy/_core/_struct_ufunc_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  38. numpy/_core/_type_aliases.py +131 -0
  39. numpy/_core/_type_aliases.pyi +86 -0
  40. numpy/_core/_ufunc_config.py +515 -0
  41. numpy/_core/_ufunc_config.pyi +69 -0
  42. numpy/_core/_umath_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  43. numpy/_core/_umath_tests.pyi +47 -0
  44. numpy/_core/arrayprint.py +1779 -0
  45. numpy/_core/arrayprint.pyi +158 -0
  46. numpy/_core/cversions.py +13 -0
  47. numpy/_core/defchararray.py +1414 -0
  48. numpy/_core/defchararray.pyi +1150 -0
  49. numpy/_core/einsumfunc.py +1650 -0
  50. numpy/_core/einsumfunc.pyi +184 -0
  51. numpy/_core/fromnumeric.py +4233 -0
  52. numpy/_core/fromnumeric.pyi +1735 -0
  53. numpy/_core/function_base.py +547 -0
  54. numpy/_core/function_base.pyi +276 -0
  55. numpy/_core/getlimits.py +462 -0
  56. numpy/_core/getlimits.pyi +124 -0
  57. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  58. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  59. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  60. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  61. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  62. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  63. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  64. numpy/_core/include/numpy/arrayobject.h +7 -0
  65. numpy/_core/include/numpy/arrayscalars.h +198 -0
  66. numpy/_core/include/numpy/dtype_api.h +547 -0
  67. numpy/_core/include/numpy/halffloat.h +70 -0
  68. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  69. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  70. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  71. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  72. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  73. numpy/_core/include/numpy/npy_common.h +989 -0
  74. numpy/_core/include/numpy/npy_cpu.h +126 -0
  75. numpy/_core/include/numpy/npy_endian.h +79 -0
  76. numpy/_core/include/numpy/npy_math.h +602 -0
  77. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  78. numpy/_core/include/numpy/npy_os.h +42 -0
  79. numpy/_core/include/numpy/numpyconfig.h +185 -0
  80. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  81. numpy/_core/include/numpy/random/bitgen.h +20 -0
  82. numpy/_core/include/numpy/random/distributions.h +209 -0
  83. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  84. numpy/_core/include/numpy/ufuncobject.h +343 -0
  85. numpy/_core/include/numpy/utils.h +37 -0
  86. numpy/_core/lib/libnpymath.a +0 -0
  87. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  88. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  89. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  90. numpy/_core/memmap.py +363 -0
  91. numpy/_core/memmap.pyi +3 -0
  92. numpy/_core/multiarray.py +1740 -0
  93. numpy/_core/multiarray.pyi +1316 -0
  94. numpy/_core/numeric.py +2758 -0
  95. numpy/_core/numeric.pyi +1276 -0
  96. numpy/_core/numerictypes.py +633 -0
  97. numpy/_core/numerictypes.pyi +196 -0
  98. numpy/_core/overrides.py +188 -0
  99. numpy/_core/overrides.pyi +47 -0
  100. numpy/_core/printoptions.py +32 -0
  101. numpy/_core/printoptions.pyi +28 -0
  102. numpy/_core/records.py +1088 -0
  103. numpy/_core/records.pyi +340 -0
  104. numpy/_core/shape_base.py +996 -0
  105. numpy/_core/shape_base.pyi +182 -0
  106. numpy/_core/strings.py +1813 -0
  107. numpy/_core/strings.pyi +536 -0
  108. numpy/_core/tests/_locales.py +72 -0
  109. numpy/_core/tests/_natype.py +144 -0
  110. numpy/_core/tests/data/astype_copy.pkl +0 -0
  111. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  112. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  113. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  114. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  115. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  122. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  124. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  127. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  128. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  129. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  130. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  131. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  134. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  135. numpy/_core/tests/examples/cython/meson.build +43 -0
  136. numpy/_core/tests/examples/cython/setup.py +39 -0
  137. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  138. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  139. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  140. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  141. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  142. numpy/_core/tests/test__exceptions.py +90 -0
  143. numpy/_core/tests/test_abc.py +54 -0
  144. numpy/_core/tests/test_api.py +655 -0
  145. numpy/_core/tests/test_argparse.py +90 -0
  146. numpy/_core/tests/test_array_api_info.py +113 -0
  147. numpy/_core/tests/test_array_coercion.py +928 -0
  148. numpy/_core/tests/test_array_interface.py +222 -0
  149. numpy/_core/tests/test_arraymethod.py +84 -0
  150. numpy/_core/tests/test_arrayobject.py +75 -0
  151. numpy/_core/tests/test_arrayprint.py +1324 -0
  152. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  153. numpy/_core/tests/test_casting_unittests.py +955 -0
  154. numpy/_core/tests/test_conversion_utils.py +209 -0
  155. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  156. numpy/_core/tests/test_cpu_features.py +450 -0
  157. numpy/_core/tests/test_custom_dtypes.py +393 -0
  158. numpy/_core/tests/test_cython.py +352 -0
  159. numpy/_core/tests/test_datetime.py +2792 -0
  160. numpy/_core/tests/test_defchararray.py +858 -0
  161. numpy/_core/tests/test_deprecations.py +460 -0
  162. numpy/_core/tests/test_dlpack.py +190 -0
  163. numpy/_core/tests/test_dtype.py +2110 -0
  164. numpy/_core/tests/test_einsum.py +1351 -0
  165. numpy/_core/tests/test_errstate.py +131 -0
  166. numpy/_core/tests/test_extint128.py +217 -0
  167. numpy/_core/tests/test_finfo.py +86 -0
  168. numpy/_core/tests/test_function_base.py +504 -0
  169. numpy/_core/tests/test_getlimits.py +171 -0
  170. numpy/_core/tests/test_half.py +593 -0
  171. numpy/_core/tests/test_hashtable.py +36 -0
  172. numpy/_core/tests/test_indexerrors.py +122 -0
  173. numpy/_core/tests/test_indexing.py +1692 -0
  174. numpy/_core/tests/test_item_selection.py +167 -0
  175. numpy/_core/tests/test_limited_api.py +102 -0
  176. numpy/_core/tests/test_longdouble.py +370 -0
  177. numpy/_core/tests/test_mem_overlap.py +933 -0
  178. numpy/_core/tests/test_mem_policy.py +453 -0
  179. numpy/_core/tests/test_memmap.py +248 -0
  180. numpy/_core/tests/test_multiarray.py +11008 -0
  181. numpy/_core/tests/test_multiprocessing.py +55 -0
  182. numpy/_core/tests/test_multithreading.py +353 -0
  183. numpy/_core/tests/test_nditer.py +3533 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4295 -0
  186. numpy/_core/tests/test_numerictypes.py +650 -0
  187. numpy/_core/tests/test_overrides.py +800 -0
  188. numpy/_core/tests/test_print.py +202 -0
  189. numpy/_core/tests/test_protocols.py +46 -0
  190. numpy/_core/tests/test_records.py +544 -0
  191. numpy/_core/tests/test_regression.py +2677 -0
  192. numpy/_core/tests/test_scalar_ctors.py +203 -0
  193. numpy/_core/tests/test_scalar_methods.py +328 -0
  194. numpy/_core/tests/test_scalarbuffer.py +153 -0
  195. numpy/_core/tests/test_scalarinherit.py +105 -0
  196. numpy/_core/tests/test_scalarmath.py +1168 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +904 -0
  199. numpy/_core/tests/test_simd.py +1345 -0
  200. numpy/_core/tests/test_simd_module.py +105 -0
  201. numpy/_core/tests/test_stringdtype.py +1855 -0
  202. numpy/_core/tests/test_strings.py +1515 -0
  203. numpy/_core/tests/test_ufunc.py +3405 -0
  204. numpy/_core/tests/test_umath.py +4962 -0
  205. numpy/_core/tests/test_umath_accuracy.py +132 -0
  206. numpy/_core/tests/test_umath_complex.py +631 -0
  207. numpy/_core/tests/test_unicode.py +369 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +232 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +78 -0
  213. numpy/_expired_attrs_2_0.pyi +61 -0
  214. numpy/_globals.py +121 -0
  215. numpy/_globals.pyi +17 -0
  216. numpy/_pyinstaller/__init__.py +0 -0
  217. numpy/_pyinstaller/__init__.pyi +0 -0
  218. numpy/_pyinstaller/hook-numpy.py +36 -0
  219. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  220. numpy/_pyinstaller/tests/__init__.py +16 -0
  221. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  222. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  223. numpy/_pytesttester.py +201 -0
  224. numpy/_pytesttester.pyi +18 -0
  225. numpy/_typing/__init__.py +173 -0
  226. numpy/_typing/_add_docstring.py +153 -0
  227. numpy/_typing/_array_like.py +106 -0
  228. numpy/_typing/_char_codes.py +213 -0
  229. numpy/_typing/_dtype_like.py +114 -0
  230. numpy/_typing/_extended_precision.py +15 -0
  231. numpy/_typing/_nbit.py +19 -0
  232. numpy/_typing/_nbit_base.py +94 -0
  233. numpy/_typing/_nbit_base.pyi +39 -0
  234. numpy/_typing/_nested_sequence.py +79 -0
  235. numpy/_typing/_scalars.py +20 -0
  236. numpy/_typing/_shape.py +8 -0
  237. numpy/_typing/_ufunc.py +7 -0
  238. numpy/_typing/_ufunc.pyi +975 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +28 -0
  241. numpy/_utils/_convertions.py +18 -0
  242. numpy/_utils/_convertions.pyi +4 -0
  243. numpy/_utils/_inspect.py +192 -0
  244. numpy/_utils/_inspect.pyi +70 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +118 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +248 -0
  250. numpy/core/__init__.py +33 -0
  251. numpy/core/__init__.pyi +0 -0
  252. numpy/core/_dtype.py +10 -0
  253. numpy/core/_dtype.pyi +0 -0
  254. numpy/core/_dtype_ctypes.py +10 -0
  255. numpy/core/_dtype_ctypes.pyi +0 -0
  256. numpy/core/_internal.py +27 -0
  257. numpy/core/_multiarray_umath.py +57 -0
  258. numpy/core/_utils.py +21 -0
  259. numpy/core/arrayprint.py +10 -0
  260. numpy/core/defchararray.py +10 -0
  261. numpy/core/einsumfunc.py +10 -0
  262. numpy/core/fromnumeric.py +10 -0
  263. numpy/core/function_base.py +10 -0
  264. numpy/core/getlimits.py +10 -0
  265. numpy/core/multiarray.py +25 -0
  266. numpy/core/numeric.py +12 -0
  267. numpy/core/numerictypes.py +10 -0
  268. numpy/core/overrides.py +10 -0
  269. numpy/core/overrides.pyi +7 -0
  270. numpy/core/records.py +10 -0
  271. numpy/core/shape_base.py +10 -0
  272. numpy/core/umath.py +10 -0
  273. numpy/ctypeslib/__init__.py +13 -0
  274. numpy/ctypeslib/__init__.pyi +15 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  277. numpy/doc/ufuncs.py +138 -0
  278. numpy/dtypes.py +41 -0
  279. numpy/dtypes.pyi +630 -0
  280. numpy/exceptions.py +246 -0
  281. numpy/exceptions.pyi +27 -0
  282. numpy/f2py/__init__.py +86 -0
  283. numpy/f2py/__init__.pyi +5 -0
  284. numpy/f2py/__main__.py +5 -0
  285. numpy/f2py/__version__.py +1 -0
  286. numpy/f2py/__version__.pyi +1 -0
  287. numpy/f2py/_backends/__init__.py +9 -0
  288. numpy/f2py/_backends/__init__.pyi +5 -0
  289. numpy/f2py/_backends/_backend.py +44 -0
  290. numpy/f2py/_backends/_backend.pyi +46 -0
  291. numpy/f2py/_backends/_distutils.py +76 -0
  292. numpy/f2py/_backends/_distutils.pyi +13 -0
  293. numpy/f2py/_backends/_meson.py +244 -0
  294. numpy/f2py/_backends/_meson.pyi +62 -0
  295. numpy/f2py/_backends/meson.build.template +58 -0
  296. numpy/f2py/_isocbind.py +62 -0
  297. numpy/f2py/_isocbind.pyi +13 -0
  298. numpy/f2py/_src_pyf.py +247 -0
  299. numpy/f2py/_src_pyf.pyi +28 -0
  300. numpy/f2py/auxfuncs.py +1004 -0
  301. numpy/f2py/auxfuncs.pyi +262 -0
  302. numpy/f2py/capi_maps.py +811 -0
  303. numpy/f2py/capi_maps.pyi +33 -0
  304. numpy/f2py/cb_rules.py +665 -0
  305. numpy/f2py/cb_rules.pyi +17 -0
  306. numpy/f2py/cfuncs.py +1563 -0
  307. numpy/f2py/cfuncs.pyi +31 -0
  308. numpy/f2py/common_rules.py +143 -0
  309. numpy/f2py/common_rules.pyi +9 -0
  310. numpy/f2py/crackfortran.py +3725 -0
  311. numpy/f2py/crackfortran.pyi +266 -0
  312. numpy/f2py/diagnose.py +149 -0
  313. numpy/f2py/diagnose.pyi +1 -0
  314. numpy/f2py/f2py2e.py +788 -0
  315. numpy/f2py/f2py2e.pyi +74 -0
  316. numpy/f2py/f90mod_rules.py +269 -0
  317. numpy/f2py/f90mod_rules.pyi +16 -0
  318. numpy/f2py/func2subr.py +329 -0
  319. numpy/f2py/func2subr.pyi +7 -0
  320. numpy/f2py/rules.py +1629 -0
  321. numpy/f2py/rules.pyi +41 -0
  322. numpy/f2py/setup.cfg +3 -0
  323. numpy/f2py/src/fortranobject.c +1436 -0
  324. numpy/f2py/src/fortranobject.h +173 -0
  325. numpy/f2py/symbolic.py +1518 -0
  326. numpy/f2py/symbolic.pyi +219 -0
  327. numpy/f2py/tests/__init__.py +16 -0
  328. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  329. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  330. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  331. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  332. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  333. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  334. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  335. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  336. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  337. numpy/f2py/tests/src/callback/foo.f +62 -0
  338. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  339. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  340. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  341. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  342. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  343. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  344. numpy/f2py/tests/src/cli/hi77.f +3 -0
  345. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  346. numpy/f2py/tests/src/common/block.f +11 -0
  347. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  348. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  349. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  350. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  351. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  352. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  353. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  354. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  355. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  356. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  357. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  358. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  359. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  360. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  361. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  362. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  363. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  364. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  365. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  366. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  367. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  368. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  369. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  370. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  371. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  372. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  373. numpy/f2py/tests/src/mixed/foo.f +5 -0
  374. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  375. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  376. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  377. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  378. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  379. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  380. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  381. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  382. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  383. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  384. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  385. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  386. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  387. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  388. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  389. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  390. numpy/f2py/tests/src/regression/AB.inc +1 -0
  391. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  392. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  393. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  394. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  395. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  396. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  397. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  398. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  399. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  400. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  401. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  402. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  403. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  404. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  405. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  406. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  407. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  408. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  409. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  410. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  411. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  412. numpy/f2py/tests/src/routines/subrout.f +4 -0
  413. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  414. numpy/f2py/tests/src/size/foo.f90 +44 -0
  415. numpy/f2py/tests/src/string/char.f90 +29 -0
  416. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  417. numpy/f2py/tests/src/string/gh24008.f +8 -0
  418. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  419. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  420. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  421. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  422. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  423. numpy/f2py/tests/src/string/string.f +12 -0
  424. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  425. numpy/f2py/tests/test_abstract_interface.py +26 -0
  426. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  427. numpy/f2py/tests/test_assumed_shape.py +50 -0
  428. numpy/f2py/tests/test_block_docstring.py +20 -0
  429. numpy/f2py/tests/test_callback.py +263 -0
  430. numpy/f2py/tests/test_character.py +641 -0
  431. numpy/f2py/tests/test_common.py +23 -0
  432. numpy/f2py/tests/test_crackfortran.py +421 -0
  433. numpy/f2py/tests/test_data.py +71 -0
  434. numpy/f2py/tests/test_docs.py +66 -0
  435. numpy/f2py/tests/test_f2cmap.py +17 -0
  436. numpy/f2py/tests/test_f2py2e.py +983 -0
  437. numpy/f2py/tests/test_isoc.py +56 -0
  438. numpy/f2py/tests/test_kind.py +52 -0
  439. numpy/f2py/tests/test_mixed.py +35 -0
  440. numpy/f2py/tests/test_modules.py +83 -0
  441. numpy/f2py/tests/test_parameter.py +129 -0
  442. numpy/f2py/tests/test_pyf_src.py +43 -0
  443. numpy/f2py/tests/test_quoted_character.py +18 -0
  444. numpy/f2py/tests/test_regression.py +187 -0
  445. numpy/f2py/tests/test_return_character.py +48 -0
  446. numpy/f2py/tests/test_return_complex.py +67 -0
  447. numpy/f2py/tests/test_return_integer.py +55 -0
  448. numpy/f2py/tests/test_return_logical.py +65 -0
  449. numpy/f2py/tests/test_return_real.py +109 -0
  450. numpy/f2py/tests/test_routines.py +29 -0
  451. numpy/f2py/tests/test_semicolon_split.py +75 -0
  452. numpy/f2py/tests/test_size.py +45 -0
  453. numpy/f2py/tests/test_string.py +100 -0
  454. numpy/f2py/tests/test_symbolic.py +500 -0
  455. numpy/f2py/tests/test_value_attrspec.py +15 -0
  456. numpy/f2py/tests/util.py +442 -0
  457. numpy/f2py/use_rules.py +99 -0
  458. numpy/f2py/use_rules.pyi +9 -0
  459. numpy/fft/__init__.py +213 -0
  460. numpy/fft/__init__.pyi +38 -0
  461. numpy/fft/_helper.py +235 -0
  462. numpy/fft/_helper.pyi +44 -0
  463. numpy/fft/_pocketfft.py +1693 -0
  464. numpy/fft/_pocketfft.pyi +137 -0
  465. numpy/fft/_pocketfft_umath.cpython-313t-aarch64-linux-musl.so +0 -0
  466. numpy/fft/tests/__init__.py +0 -0
  467. numpy/fft/tests/test_helper.py +167 -0
  468. numpy/fft/tests/test_pocketfft.py +589 -0
  469. numpy/lib/__init__.py +97 -0
  470. numpy/lib/__init__.pyi +52 -0
  471. numpy/lib/_array_utils_impl.py +62 -0
  472. numpy/lib/_array_utils_impl.pyi +10 -0
  473. numpy/lib/_arraypad_impl.py +926 -0
  474. numpy/lib/_arraypad_impl.pyi +88 -0
  475. numpy/lib/_arraysetops_impl.py +1158 -0
  476. numpy/lib/_arraysetops_impl.pyi +462 -0
  477. numpy/lib/_arrayterator_impl.py +224 -0
  478. numpy/lib/_arrayterator_impl.pyi +45 -0
  479. numpy/lib/_datasource.py +700 -0
  480. numpy/lib/_datasource.pyi +30 -0
  481. numpy/lib/_format_impl.py +1036 -0
  482. numpy/lib/_format_impl.pyi +56 -0
  483. numpy/lib/_function_base_impl.py +5758 -0
  484. numpy/lib/_function_base_impl.pyi +2324 -0
  485. numpy/lib/_histograms_impl.py +1085 -0
  486. numpy/lib/_histograms_impl.pyi +40 -0
  487. numpy/lib/_index_tricks_impl.py +1048 -0
  488. numpy/lib/_index_tricks_impl.pyi +267 -0
  489. numpy/lib/_iotools.py +900 -0
  490. numpy/lib/_iotools.pyi +116 -0
  491. numpy/lib/_nanfunctions_impl.py +2001 -0
  492. numpy/lib/_nanfunctions_impl.pyi +48 -0
  493. numpy/lib/_npyio_impl.py +2583 -0
  494. numpy/lib/_npyio_impl.pyi +299 -0
  495. numpy/lib/_polynomial_impl.py +1465 -0
  496. numpy/lib/_polynomial_impl.pyi +338 -0
  497. numpy/lib/_scimath_impl.py +642 -0
  498. numpy/lib/_scimath_impl.pyi +93 -0
  499. numpy/lib/_shape_base_impl.py +1289 -0
  500. numpy/lib/_shape_base_impl.pyi +236 -0
  501. numpy/lib/_stride_tricks_impl.py +582 -0
  502. numpy/lib/_stride_tricks_impl.pyi +73 -0
  503. numpy/lib/_twodim_base_impl.py +1201 -0
  504. numpy/lib/_twodim_base_impl.pyi +408 -0
  505. numpy/lib/_type_check_impl.py +710 -0
  506. numpy/lib/_type_check_impl.pyi +348 -0
  507. numpy/lib/_ufunclike_impl.py +199 -0
  508. numpy/lib/_ufunclike_impl.pyi +60 -0
  509. numpy/lib/_user_array_impl.py +310 -0
  510. numpy/lib/_user_array_impl.pyi +226 -0
  511. numpy/lib/_utils_impl.py +784 -0
  512. numpy/lib/_utils_impl.pyi +22 -0
  513. numpy/lib/_version.py +153 -0
  514. numpy/lib/_version.pyi +17 -0
  515. numpy/lib/array_utils.py +7 -0
  516. numpy/lib/array_utils.pyi +6 -0
  517. numpy/lib/format.py +24 -0
  518. numpy/lib/format.pyi +24 -0
  519. numpy/lib/introspect.py +94 -0
  520. numpy/lib/introspect.pyi +3 -0
  521. numpy/lib/mixins.py +180 -0
  522. numpy/lib/mixins.pyi +78 -0
  523. numpy/lib/npyio.py +1 -0
  524. numpy/lib/npyio.pyi +5 -0
  525. numpy/lib/recfunctions.py +1681 -0
  526. numpy/lib/recfunctions.pyi +444 -0
  527. numpy/lib/scimath.py +13 -0
  528. numpy/lib/scimath.pyi +12 -0
  529. numpy/lib/stride_tricks.py +1 -0
  530. numpy/lib/stride_tricks.pyi +4 -0
  531. numpy/lib/tests/__init__.py +0 -0
  532. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  533. numpy/lib/tests/data/py2-objarr.npy +0 -0
  534. numpy/lib/tests/data/py2-objarr.npz +0 -0
  535. numpy/lib/tests/data/py3-objarr.npy +0 -0
  536. numpy/lib/tests/data/py3-objarr.npz +0 -0
  537. numpy/lib/tests/data/python3.npy +0 -0
  538. numpy/lib/tests/data/win64python2.npy +0 -0
  539. numpy/lib/tests/test__datasource.py +328 -0
  540. numpy/lib/tests/test__iotools.py +358 -0
  541. numpy/lib/tests/test__version.py +64 -0
  542. numpy/lib/tests/test_array_utils.py +32 -0
  543. numpy/lib/tests/test_arraypad.py +1427 -0
  544. numpy/lib/tests/test_arraysetops.py +1302 -0
  545. numpy/lib/tests/test_arrayterator.py +45 -0
  546. numpy/lib/tests/test_format.py +1054 -0
  547. numpy/lib/tests/test_function_base.py +4705 -0
  548. numpy/lib/tests/test_histograms.py +855 -0
  549. numpy/lib/tests/test_index_tricks.py +693 -0
  550. numpy/lib/tests/test_io.py +2857 -0
  551. numpy/lib/tests/test_loadtxt.py +1099 -0
  552. numpy/lib/tests/test_mixins.py +215 -0
  553. numpy/lib/tests/test_nanfunctions.py +1438 -0
  554. numpy/lib/tests/test_packbits.py +376 -0
  555. numpy/lib/tests/test_polynomial.py +325 -0
  556. numpy/lib/tests/test_recfunctions.py +1042 -0
  557. numpy/lib/tests/test_regression.py +231 -0
  558. numpy/lib/tests/test_shape_base.py +813 -0
  559. numpy/lib/tests/test_stride_tricks.py +655 -0
  560. numpy/lib/tests/test_twodim_base.py +559 -0
  561. numpy/lib/tests/test_type_check.py +473 -0
  562. numpy/lib/tests/test_ufunclike.py +97 -0
  563. numpy/lib/tests/test_utils.py +80 -0
  564. numpy/lib/user_array.py +1 -0
  565. numpy/lib/user_array.pyi +1 -0
  566. numpy/linalg/__init__.py +95 -0
  567. numpy/linalg/__init__.pyi +71 -0
  568. numpy/linalg/_linalg.py +3657 -0
  569. numpy/linalg/_linalg.pyi +548 -0
  570. numpy/linalg/_umath_linalg.cpython-313t-aarch64-linux-musl.so +0 -0
  571. numpy/linalg/_umath_linalg.pyi +60 -0
  572. numpy/linalg/lapack_lite.cpython-313t-aarch64-linux-musl.so +0 -0
  573. numpy/linalg/lapack_lite.pyi +143 -0
  574. numpy/linalg/tests/__init__.py +0 -0
  575. numpy/linalg/tests/test_deprecations.py +21 -0
  576. numpy/linalg/tests/test_linalg.py +2442 -0
  577. numpy/linalg/tests/test_regression.py +182 -0
  578. numpy/ma/API_CHANGES.txt +135 -0
  579. numpy/ma/LICENSE +24 -0
  580. numpy/ma/README.rst +236 -0
  581. numpy/ma/__init__.py +53 -0
  582. numpy/ma/__init__.pyi +458 -0
  583. numpy/ma/core.py +8929 -0
  584. numpy/ma/core.pyi +3720 -0
  585. numpy/ma/extras.py +2266 -0
  586. numpy/ma/extras.pyi +297 -0
  587. numpy/ma/mrecords.py +762 -0
  588. numpy/ma/mrecords.pyi +96 -0
  589. numpy/ma/tests/__init__.py +0 -0
  590. numpy/ma/tests/test_arrayobject.py +40 -0
  591. numpy/ma/tests/test_core.py +6008 -0
  592. numpy/ma/tests/test_deprecations.py +65 -0
  593. numpy/ma/tests/test_extras.py +1945 -0
  594. numpy/ma/tests/test_mrecords.py +495 -0
  595. numpy/ma/tests/test_old_ma.py +939 -0
  596. numpy/ma/tests/test_regression.py +83 -0
  597. numpy/ma/tests/test_subclassing.py +469 -0
  598. numpy/ma/testutils.py +294 -0
  599. numpy/ma/testutils.pyi +69 -0
  600. numpy/matlib.py +380 -0
  601. numpy/matlib.pyi +580 -0
  602. numpy/matrixlib/__init__.py +12 -0
  603. numpy/matrixlib/__init__.pyi +3 -0
  604. numpy/matrixlib/defmatrix.py +1119 -0
  605. numpy/matrixlib/defmatrix.pyi +218 -0
  606. numpy/matrixlib/tests/__init__.py +0 -0
  607. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  608. numpy/matrixlib/tests/test_interaction.py +360 -0
  609. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  610. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  611. numpy/matrixlib/tests/test_multiarray.py +17 -0
  612. numpy/matrixlib/tests/test_numeric.py +18 -0
  613. numpy/matrixlib/tests/test_regression.py +31 -0
  614. numpy/polynomial/__init__.py +187 -0
  615. numpy/polynomial/__init__.pyi +31 -0
  616. numpy/polynomial/_polybase.py +1191 -0
  617. numpy/polynomial/_polybase.pyi +262 -0
  618. numpy/polynomial/_polytypes.pyi +501 -0
  619. numpy/polynomial/chebyshev.py +2001 -0
  620. numpy/polynomial/chebyshev.pyi +180 -0
  621. numpy/polynomial/hermite.py +1738 -0
  622. numpy/polynomial/hermite.pyi +106 -0
  623. numpy/polynomial/hermite_e.py +1640 -0
  624. numpy/polynomial/hermite_e.pyi +106 -0
  625. numpy/polynomial/laguerre.py +1673 -0
  626. numpy/polynomial/laguerre.pyi +100 -0
  627. numpy/polynomial/legendre.py +1603 -0
  628. numpy/polynomial/legendre.pyi +100 -0
  629. numpy/polynomial/polynomial.py +1625 -0
  630. numpy/polynomial/polynomial.pyi +109 -0
  631. numpy/polynomial/polyutils.py +759 -0
  632. numpy/polynomial/polyutils.pyi +307 -0
  633. numpy/polynomial/tests/__init__.py +0 -0
  634. numpy/polynomial/tests/test_chebyshev.py +618 -0
  635. numpy/polynomial/tests/test_classes.py +613 -0
  636. numpy/polynomial/tests/test_hermite.py +553 -0
  637. numpy/polynomial/tests/test_hermite_e.py +554 -0
  638. numpy/polynomial/tests/test_laguerre.py +535 -0
  639. numpy/polynomial/tests/test_legendre.py +566 -0
  640. numpy/polynomial/tests/test_polynomial.py +691 -0
  641. numpy/polynomial/tests/test_polyutils.py +123 -0
  642. numpy/polynomial/tests/test_printing.py +557 -0
  643. numpy/polynomial/tests/test_symbol.py +217 -0
  644. numpy/py.typed +0 -0
  645. numpy/random/LICENSE.md +71 -0
  646. numpy/random/__init__.pxd +14 -0
  647. numpy/random/__init__.py +213 -0
  648. numpy/random/__init__.pyi +124 -0
  649. numpy/random/_bounded_integers.cpython-313t-aarch64-linux-musl.so +0 -0
  650. numpy/random/_bounded_integers.pxd +29 -0
  651. numpy/random/_bounded_integers.pyi +1 -0
  652. numpy/random/_common.cpython-313t-aarch64-linux-musl.so +0 -0
  653. numpy/random/_common.pxd +107 -0
  654. numpy/random/_common.pyi +16 -0
  655. numpy/random/_examples/cffi/extending.py +44 -0
  656. numpy/random/_examples/cffi/parse.py +53 -0
  657. numpy/random/_examples/cython/extending.pyx +77 -0
  658. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  659. numpy/random/_examples/cython/meson.build +53 -0
  660. numpy/random/_examples/numba/extending.py +86 -0
  661. numpy/random/_examples/numba/extending_distributions.py +67 -0
  662. numpy/random/_generator.cpython-313t-aarch64-linux-musl.so +0 -0
  663. numpy/random/_generator.pyi +862 -0
  664. numpy/random/_mt19937.cpython-313t-aarch64-linux-musl.so +0 -0
  665. numpy/random/_mt19937.pyi +27 -0
  666. numpy/random/_pcg64.cpython-313t-aarch64-linux-musl.so +0 -0
  667. numpy/random/_pcg64.pyi +41 -0
  668. numpy/random/_philox.cpython-313t-aarch64-linux-musl.so +0 -0
  669. numpy/random/_philox.pyi +36 -0
  670. numpy/random/_pickle.py +88 -0
  671. numpy/random/_pickle.pyi +43 -0
  672. numpy/random/_sfc64.cpython-313t-aarch64-linux-musl.so +0 -0
  673. numpy/random/_sfc64.pyi +25 -0
  674. numpy/random/bit_generator.cpython-313t-aarch64-linux-musl.so +0 -0
  675. numpy/random/bit_generator.pxd +35 -0
  676. numpy/random/bit_generator.pyi +123 -0
  677. numpy/random/c_distributions.pxd +119 -0
  678. numpy/random/lib/libnpyrandom.a +0 -0
  679. numpy/random/mtrand.cpython-313t-aarch64-linux-musl.so +0 -0
  680. numpy/random/mtrand.pyi +759 -0
  681. numpy/random/tests/__init__.py +0 -0
  682. numpy/random/tests/data/__init__.py +0 -0
  683. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  684. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  685. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  686. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  687. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  688. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  689. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  690. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  691. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  692. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  693. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  694. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  695. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  696. numpy/random/tests/test_direct.py +595 -0
  697. numpy/random/tests/test_extending.py +131 -0
  698. numpy/random/tests/test_generator_mt19937.py +2825 -0
  699. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  700. numpy/random/tests/test_random.py +1724 -0
  701. numpy/random/tests/test_randomstate.py +2099 -0
  702. numpy/random/tests/test_randomstate_regression.py +213 -0
  703. numpy/random/tests/test_regression.py +175 -0
  704. numpy/random/tests/test_seed_sequence.py +79 -0
  705. numpy/random/tests/test_smoke.py +882 -0
  706. numpy/rec/__init__.py +2 -0
  707. numpy/rec/__init__.pyi +23 -0
  708. numpy/strings/__init__.py +2 -0
  709. numpy/strings/__init__.pyi +97 -0
  710. numpy/testing/__init__.py +22 -0
  711. numpy/testing/__init__.pyi +107 -0
  712. numpy/testing/_private/__init__.py +0 -0
  713. numpy/testing/_private/__init__.pyi +0 -0
  714. numpy/testing/_private/extbuild.py +250 -0
  715. numpy/testing/_private/extbuild.pyi +25 -0
  716. numpy/testing/_private/utils.py +2830 -0
  717. numpy/testing/_private/utils.pyi +505 -0
  718. numpy/testing/overrides.py +84 -0
  719. numpy/testing/overrides.pyi +10 -0
  720. numpy/testing/print_coercion_tables.py +207 -0
  721. numpy/testing/print_coercion_tables.pyi +26 -0
  722. numpy/testing/tests/__init__.py +0 -0
  723. numpy/testing/tests/test_utils.py +2123 -0
  724. numpy/tests/__init__.py +0 -0
  725. numpy/tests/test__all__.py +10 -0
  726. numpy/tests/test_configtool.py +51 -0
  727. numpy/tests/test_ctypeslib.py +383 -0
  728. numpy/tests/test_lazyloading.py +42 -0
  729. numpy/tests/test_matlib.py +59 -0
  730. numpy/tests/test_numpy_config.py +47 -0
  731. numpy/tests/test_numpy_version.py +54 -0
  732. numpy/tests/test_public_api.py +804 -0
  733. numpy/tests/test_reloading.py +76 -0
  734. numpy/tests/test_scripts.py +48 -0
  735. numpy/tests/test_warnings.py +79 -0
  736. numpy/typing/__init__.py +233 -0
  737. numpy/typing/__init__.pyi +3 -0
  738. numpy/typing/mypy_plugin.py +200 -0
  739. numpy/typing/tests/__init__.py +0 -0
  740. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  741. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  742. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  743. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  744. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  745. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  746. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  747. numpy/typing/tests/data/fail/char.pyi +63 -0
  748. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  749. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  750. numpy/typing/tests/data/fail/constants.pyi +3 -0
  751. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  752. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  753. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  754. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  755. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  756. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  757. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  758. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  759. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  760. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  761. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  762. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  763. numpy/typing/tests/data/fail/ma.pyi +155 -0
  764. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  765. numpy/typing/tests/data/fail/modules.pyi +17 -0
  766. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  767. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  768. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  769. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  770. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  771. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  772. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  773. numpy/typing/tests/data/fail/random.pyi +62 -0
  774. numpy/typing/tests/data/fail/rec.pyi +17 -0
  775. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  776. numpy/typing/tests/data/fail/shape.pyi +7 -0
  777. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  778. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  779. numpy/typing/tests/data/fail/strings.pyi +52 -0
  780. numpy/typing/tests/data/fail/testing.pyi +28 -0
  781. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  782. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  783. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  784. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  785. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  786. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  787. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  788. numpy/typing/tests/data/mypy.ini +8 -0
  789. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  790. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  791. numpy/typing/tests/data/pass/array_like.py +43 -0
  792. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  793. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  794. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  795. numpy/typing/tests/data/pass/comparisons.py +316 -0
  796. numpy/typing/tests/data/pass/dtype.py +57 -0
  797. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  798. numpy/typing/tests/data/pass/flatiter.py +26 -0
  799. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  800. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  801. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  802. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  803. numpy/typing/tests/data/pass/lib_version.py +18 -0
  804. numpy/typing/tests/data/pass/literal.py +52 -0
  805. numpy/typing/tests/data/pass/ma.py +199 -0
  806. numpy/typing/tests/data/pass/mod.py +149 -0
  807. numpy/typing/tests/data/pass/modules.py +45 -0
  808. numpy/typing/tests/data/pass/multiarray.py +77 -0
  809. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  810. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  811. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  812. numpy/typing/tests/data/pass/nditer.py +4 -0
  813. numpy/typing/tests/data/pass/numeric.py +90 -0
  814. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  815. numpy/typing/tests/data/pass/random.py +1498 -0
  816. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  817. numpy/typing/tests/data/pass/scalars.py +249 -0
  818. numpy/typing/tests/data/pass/shape.py +19 -0
  819. numpy/typing/tests/data/pass/simple.py +170 -0
  820. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  821. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  822. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  823. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  824. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  825. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  826. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  827. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  828. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  829. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  830. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  831. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  832. numpy/typing/tests/data/reveal/char.pyi +225 -0
  833. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  834. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  835. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  836. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  837. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  838. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  839. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  840. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  841. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  842. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  843. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  844. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  845. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  846. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  847. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  848. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  849. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  850. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  851. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  852. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  853. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  854. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  855. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  856. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  857. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  858. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  859. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  860. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  861. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  862. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  863. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  864. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  865. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  866. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  867. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  868. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  869. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  870. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  871. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  872. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  873. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  874. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  875. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  876. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  877. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  878. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  879. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  880. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  881. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  882. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  883. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  884. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  885. numpy/typing/tests/test_isfile.py +38 -0
  886. numpy/typing/tests/test_runtime.py +110 -0
  887. numpy/typing/tests/test_typing.py +205 -0
  888. numpy/version.py +11 -0
  889. numpy/version.pyi +9 -0
  890. numpy-2.4.0.dist-info/METADATA +139 -0
  891. numpy-2.4.0.dist-info/RECORD +915 -0
  892. numpy-2.4.0.dist-info/WHEEL +5 -0
  893. numpy-2.4.0.dist-info/entry_points.txt +13 -0
  894. numpy-2.4.0.dist-info/licenses/LICENSE.txt +935 -0
  895. numpy-2.4.0.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  896. numpy-2.4.0.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  897. numpy-2.4.0.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  898. numpy-2.4.0.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  899. numpy-2.4.0.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  900. numpy-2.4.0.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  901. numpy-2.4.0.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  902. numpy-2.4.0.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  903. numpy-2.4.0.dist-info/licenses/numpy/ma/LICENSE +24 -0
  904. numpy-2.4.0.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  905. numpy-2.4.0.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  906. numpy-2.4.0.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  907. numpy-2.4.0.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  908. numpy-2.4.0.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  909. numpy-2.4.0.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  910. numpy-2.4.0.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
  911. numpy.libs/libgcc_s-2d945d6c-767fb991.so.1 +0 -0
  912. numpy.libs/libgcc_s-2d945d6c.so.1 +0 -0
  913. numpy.libs/libgfortran-67378ab2-e7e7cfab.so.5.0.0 +0 -0
  914. numpy.libs/libscipy_openblas64_-1fc386ee.so +0 -0
  915. numpy.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
@@ -0,0 +1,800 @@
1
+ import inspect
2
+ import os
3
+ import pickle
4
+ import sys
5
+ import tempfile
6
+ from io import StringIO
7
+ from unittest import mock
8
+
9
+ import pytest
10
+
11
+ import numpy as np
12
+ from numpy._core.overrides import (
13
+ _get_implementing_args,
14
+ array_function_dispatch,
15
+ verify_matching_signatures,
16
+ )
17
+ from numpy.testing import assert_, assert_equal, assert_raises, assert_raises_regex
18
+ from numpy.testing.overrides import get_overridable_numpy_array_functions
19
+
20
+
21
+ def _return_not_implemented(self, *args, **kwargs):
22
+ return NotImplemented
23
+
24
+
25
+ # need to define this at the top level to test pickling
26
+ @array_function_dispatch(lambda array: (array,))
27
+ def dispatched_one_arg(array):
28
+ """Docstring."""
29
+ return 'original'
30
+
31
+
32
+ @array_function_dispatch(lambda array1, array2: (array1, array2))
33
+ def dispatched_two_arg(array1, array2):
34
+ """Docstring."""
35
+ return 'original'
36
+
37
+
38
+ class TestGetImplementingArgs:
39
+
40
+ def test_ndarray(self):
41
+ array = np.array(1)
42
+
43
+ args = _get_implementing_args([array])
44
+ assert_equal(list(args), [array])
45
+
46
+ args = _get_implementing_args([array, array])
47
+ assert_equal(list(args), [array])
48
+
49
+ args = _get_implementing_args([array, 1])
50
+ assert_equal(list(args), [array])
51
+
52
+ args = _get_implementing_args([1, array])
53
+ assert_equal(list(args), [array])
54
+
55
+ def test_ndarray_subclasses(self):
56
+
57
+ class OverrideSub(np.ndarray):
58
+ __array_function__ = _return_not_implemented
59
+
60
+ class NoOverrideSub(np.ndarray):
61
+ pass
62
+
63
+ array = np.array(1).view(np.ndarray)
64
+ override_sub = np.array(1).view(OverrideSub)
65
+ no_override_sub = np.array(1).view(NoOverrideSub)
66
+
67
+ args = _get_implementing_args([array, override_sub])
68
+ assert_equal(list(args), [override_sub, array])
69
+
70
+ args = _get_implementing_args([array, no_override_sub])
71
+ assert_equal(list(args), [no_override_sub, array])
72
+
73
+ args = _get_implementing_args(
74
+ [override_sub, no_override_sub])
75
+ assert_equal(list(args), [override_sub, no_override_sub])
76
+
77
+ def test_ndarray_and_duck_array(self):
78
+
79
+ class Other:
80
+ __array_function__ = _return_not_implemented
81
+
82
+ array = np.array(1)
83
+ other = Other()
84
+
85
+ args = _get_implementing_args([other, array])
86
+ assert_equal(list(args), [other, array])
87
+
88
+ args = _get_implementing_args([array, other])
89
+ assert_equal(list(args), [array, other])
90
+
91
+ def test_ndarray_subclass_and_duck_array(self):
92
+
93
+ class OverrideSub(np.ndarray):
94
+ __array_function__ = _return_not_implemented
95
+
96
+ class Other:
97
+ __array_function__ = _return_not_implemented
98
+
99
+ array = np.array(1)
100
+ subarray = np.array(1).view(OverrideSub)
101
+ other = Other()
102
+
103
+ assert_equal(_get_implementing_args([array, subarray, other]),
104
+ [subarray, array, other])
105
+ assert_equal(_get_implementing_args([array, other, subarray]),
106
+ [subarray, array, other])
107
+
108
+ def test_many_duck_arrays(self):
109
+
110
+ class A:
111
+ __array_function__ = _return_not_implemented
112
+
113
+ class B(A):
114
+ __array_function__ = _return_not_implemented
115
+
116
+ class C(A):
117
+ __array_function__ = _return_not_implemented
118
+
119
+ class D:
120
+ __array_function__ = _return_not_implemented
121
+
122
+ a = A()
123
+ b = B()
124
+ c = C()
125
+ d = D()
126
+
127
+ assert_equal(_get_implementing_args([1]), [])
128
+ assert_equal(_get_implementing_args([a]), [a])
129
+ assert_equal(_get_implementing_args([a, 1]), [a])
130
+ assert_equal(_get_implementing_args([a, a, a]), [a])
131
+ assert_equal(_get_implementing_args([a, d, a]), [a, d])
132
+ assert_equal(_get_implementing_args([a, b]), [b, a])
133
+ assert_equal(_get_implementing_args([b, a]), [b, a])
134
+ assert_equal(_get_implementing_args([a, b, c]), [b, c, a])
135
+ assert_equal(_get_implementing_args([a, c, b]), [c, b, a])
136
+
137
+ def test_too_many_duck_arrays(self):
138
+ namespace = {'__array_function__': _return_not_implemented}
139
+ types = [type('A' + str(i), (object,), namespace) for i in range(65)]
140
+ relevant_args = [t() for t in types]
141
+
142
+ actual = _get_implementing_args(relevant_args[:64])
143
+ assert_equal(actual, relevant_args[:64])
144
+
145
+ with assert_raises_regex(TypeError, 'distinct argument types'):
146
+ _get_implementing_args(relevant_args)
147
+
148
+
149
+ class TestNDArrayArrayFunction:
150
+
151
+ def test_method(self):
152
+
153
+ class Other:
154
+ __array_function__ = _return_not_implemented
155
+
156
+ class NoOverrideSub(np.ndarray):
157
+ pass
158
+
159
+ class OverrideSub(np.ndarray):
160
+ __array_function__ = _return_not_implemented
161
+
162
+ array = np.array([1])
163
+ other = Other()
164
+ no_override_sub = array.view(NoOverrideSub)
165
+ override_sub = array.view(OverrideSub)
166
+
167
+ result = array.__array_function__(func=dispatched_two_arg,
168
+ types=(np.ndarray,),
169
+ args=(array, 1.), kwargs={})
170
+ assert_equal(result, 'original')
171
+
172
+ result = array.__array_function__(func=dispatched_two_arg,
173
+ types=(np.ndarray, Other),
174
+ args=(array, other), kwargs={})
175
+ assert_(result is NotImplemented)
176
+
177
+ result = array.__array_function__(func=dispatched_two_arg,
178
+ types=(np.ndarray, NoOverrideSub),
179
+ args=(array, no_override_sub),
180
+ kwargs={})
181
+ assert_equal(result, 'original')
182
+
183
+ result = array.__array_function__(func=dispatched_two_arg,
184
+ types=(np.ndarray, OverrideSub),
185
+ args=(array, override_sub),
186
+ kwargs={})
187
+ assert_equal(result, 'original')
188
+
189
+ with assert_raises_regex(TypeError, 'no implementation found'):
190
+ np.concatenate((array, other))
191
+
192
+ expected = np.concatenate((array, array))
193
+ result = np.concatenate((array, no_override_sub))
194
+ assert_equal(result, expected.view(NoOverrideSub))
195
+ result = np.concatenate((array, override_sub))
196
+ assert_equal(result, expected.view(OverrideSub))
197
+
198
+ def test_no_wrapper(self):
199
+ # Regular numpy functions have wrappers, but do not presume
200
+ # all functions do (array creation ones do not): check that
201
+ # we just call the function in that case.
202
+ array = np.array(1)
203
+ func = lambda x: x * 2
204
+ result = array.__array_function__(func=func, types=(np.ndarray,),
205
+ args=(array,), kwargs={})
206
+ assert_equal(result, array * 2)
207
+
208
+ def test_wrong_arguments(self):
209
+ # Check our implementation guards against wrong arguments.
210
+ a = np.array([1, 2])
211
+ with pytest.raises(TypeError, match="args must be a tuple"):
212
+ a.__array_function__(np.reshape, (np.ndarray,), a, (2, 1))
213
+ with pytest.raises(TypeError, match="kwargs must be a dict"):
214
+ a.__array_function__(np.reshape, (np.ndarray,), (a,), (2, 1))
215
+
216
+
217
+ class TestArrayFunctionDispatch:
218
+
219
+ def test_pickle(self):
220
+ for proto in range(2, pickle.HIGHEST_PROTOCOL + 1):
221
+ roundtripped = pickle.loads(
222
+ pickle.dumps(dispatched_one_arg, protocol=proto))
223
+ assert_(roundtripped is dispatched_one_arg)
224
+
225
+ def test_name_and_docstring(self):
226
+ assert_equal(dispatched_one_arg.__name__, 'dispatched_one_arg')
227
+ if sys.flags.optimize < 2:
228
+ assert_equal(dispatched_one_arg.__doc__, 'Docstring.')
229
+
230
+ def test_interface(self):
231
+
232
+ class MyArray:
233
+ def __array_function__(self, func, types, args, kwargs):
234
+ return (self, func, types, args, kwargs)
235
+
236
+ original = MyArray()
237
+ (obj, func, types, args, kwargs) = dispatched_one_arg(original)
238
+ assert_(obj is original)
239
+ assert_(func is dispatched_one_arg)
240
+ assert_equal(set(types), {MyArray})
241
+ # assert_equal uses the overloaded np.iscomplexobj() internally
242
+ assert_(args == (original,))
243
+ assert_equal(kwargs, {})
244
+
245
+ def test_not_implemented(self):
246
+
247
+ class MyArray:
248
+ def __array_function__(self, func, types, args, kwargs):
249
+ return NotImplemented
250
+
251
+ array = MyArray()
252
+ with assert_raises_regex(TypeError, 'no implementation found'):
253
+ dispatched_one_arg(array)
254
+
255
+ def test_where_dispatch(self):
256
+
257
+ class DuckArray:
258
+ def __array_function__(self, ufunc, method, *inputs, **kwargs):
259
+ return "overridden"
260
+
261
+ array = np.array(1)
262
+ duck_array = DuckArray()
263
+
264
+ result = np.std(array, where=duck_array)
265
+
266
+ assert_equal(result, "overridden")
267
+
268
+
269
+ class TestVerifyMatchingSignatures:
270
+
271
+ def test_verify_matching_signatures(self):
272
+
273
+ verify_matching_signatures(lambda x: 0, lambda x: 0)
274
+ verify_matching_signatures(lambda x=None: 0, lambda x=None: 0)
275
+ verify_matching_signatures(lambda x=1: 0, lambda x=None: 0)
276
+
277
+ with assert_raises(RuntimeError):
278
+ verify_matching_signatures(lambda a: 0, lambda b: 0)
279
+ with assert_raises(RuntimeError):
280
+ verify_matching_signatures(lambda x: 0, lambda x=None: 0)
281
+ with assert_raises(RuntimeError):
282
+ verify_matching_signatures(lambda x=None: 0, lambda y=None: 0)
283
+ with assert_raises(RuntimeError):
284
+ verify_matching_signatures(lambda x=1: 0, lambda y=1: 0)
285
+
286
+ def test_array_function_dispatch(self):
287
+
288
+ with assert_raises(RuntimeError):
289
+ @array_function_dispatch(lambda x: (x,))
290
+ def f(y):
291
+ pass
292
+
293
+ # should not raise
294
+ @array_function_dispatch(lambda x: (x,), verify=False)
295
+ def f(y):
296
+ pass
297
+
298
+
299
+ def _new_duck_type_and_implements():
300
+ """Create a duck array type and implements functions."""
301
+ HANDLED_FUNCTIONS = {}
302
+
303
+ class MyArray:
304
+ def __array_function__(self, func, types, args, kwargs):
305
+ if func not in HANDLED_FUNCTIONS:
306
+ return NotImplemented
307
+ if not all(issubclass(t, MyArray) for t in types):
308
+ return NotImplemented
309
+ return HANDLED_FUNCTIONS[func](*args, **kwargs)
310
+
311
+ def implements(numpy_function):
312
+ """Register an __array_function__ implementations."""
313
+ def decorator(func):
314
+ HANDLED_FUNCTIONS[numpy_function] = func
315
+ return func
316
+ return decorator
317
+
318
+ return (MyArray, implements)
319
+
320
+
321
+ class TestArrayFunctionImplementation:
322
+
323
+ def test_one_arg(self):
324
+ MyArray, implements = _new_duck_type_and_implements()
325
+
326
+ @implements(dispatched_one_arg)
327
+ def _(array):
328
+ return 'myarray'
329
+
330
+ assert_equal(dispatched_one_arg(1), 'original')
331
+ assert_equal(dispatched_one_arg(MyArray()), 'myarray')
332
+
333
+ def test_optional_args(self):
334
+ MyArray, implements = _new_duck_type_and_implements()
335
+
336
+ @array_function_dispatch(lambda array, option=None: (array,))
337
+ def func_with_option(array, option='default'):
338
+ return option
339
+
340
+ @implements(func_with_option)
341
+ def my_array_func_with_option(array, new_option='myarray'):
342
+ return new_option
343
+
344
+ # we don't need to implement every option on __array_function__
345
+ # implementations
346
+ assert_equal(func_with_option(1), 'default')
347
+ assert_equal(func_with_option(1, option='extra'), 'extra')
348
+ assert_equal(func_with_option(MyArray()), 'myarray')
349
+ with assert_raises(TypeError):
350
+ func_with_option(MyArray(), option='extra')
351
+
352
+ # but new options on implementations can't be used
353
+ result = my_array_func_with_option(MyArray(), new_option='yes')
354
+ assert_equal(result, 'yes')
355
+ with assert_raises(TypeError):
356
+ func_with_option(MyArray(), new_option='no')
357
+
358
+ def test_not_implemented(self):
359
+ MyArray, implements = _new_duck_type_and_implements()
360
+
361
+ @array_function_dispatch(lambda array: (array,), module='my')
362
+ def func(array):
363
+ return array
364
+
365
+ array = np.array(1)
366
+ assert_(func(array) is array)
367
+ assert_equal(func.__module__, 'my')
368
+
369
+ with assert_raises_regex(
370
+ TypeError, "no implementation found for 'my.func'"):
371
+ func(MyArray())
372
+
373
+ @pytest.mark.parametrize("name", ["concatenate", "mean", "asarray"])
374
+ def test_signature_error_message_simple(self, name):
375
+ func = getattr(np, name)
376
+ try:
377
+ # all of these functions need an argument:
378
+ func()
379
+ except TypeError as e:
380
+ exc = e
381
+
382
+ assert exc.args[0].startswith(f"{name}()")
383
+
384
+ def test_signature_error_message(self):
385
+ # The lambda function will be named "<lambda>", but the TypeError
386
+ # should show the name as "func"
387
+ def _dispatcher():
388
+ return ()
389
+
390
+ @array_function_dispatch(_dispatcher)
391
+ def func():
392
+ pass
393
+
394
+ try:
395
+ func._implementation(bad_arg=3)
396
+ except TypeError as e:
397
+ expected_exception = e
398
+
399
+ try:
400
+ func(bad_arg=3)
401
+ raise AssertionError("must fail")
402
+ except TypeError as exc:
403
+ if exc.args[0].startswith("_dispatcher"):
404
+ # We replace the qualname currently, but it used `__name__`
405
+ # (relevant functions have the same name and qualname anyway)
406
+ pytest.skip("Python version is not using __qualname__ for "
407
+ "TypeError formatting.")
408
+
409
+ assert exc.args == expected_exception.args
410
+
411
+ @pytest.mark.parametrize("value", [234, "this func is not replaced"])
412
+ def test_dispatcher_error(self, value):
413
+ # If the dispatcher raises an error, we must not attempt to mutate it
414
+ error = TypeError(value)
415
+
416
+ def dispatcher():
417
+ raise error
418
+
419
+ @array_function_dispatch(dispatcher)
420
+ def func():
421
+ return 3
422
+
423
+ try:
424
+ func()
425
+ raise AssertionError("must fail")
426
+ except TypeError as exc:
427
+ assert exc is error # unmodified exception
428
+
429
+ def test_properties(self):
430
+ # Check that str and repr are sensible
431
+ func = dispatched_two_arg
432
+ assert str(func) == str(func._implementation)
433
+ repr_no_id = repr(func).split("at ")[0]
434
+ repr_no_id_impl = repr(func._implementation).split("at ")[0]
435
+ assert repr_no_id == repr_no_id_impl
436
+
437
+ @pytest.mark.parametrize("func", [
438
+ lambda x, y: 0, # no like argument
439
+ lambda like=None: 0, # not keyword only
440
+ lambda *, like=None, a=3: 0, # not last (not that it matters)
441
+ ])
442
+ def test_bad_like_sig(self, func):
443
+ # We sanity check the signature, and these should fail.
444
+ with pytest.raises(RuntimeError):
445
+ array_function_dispatch()(func)
446
+
447
+ def test_bad_like_passing(self):
448
+ # Cover internal sanity check for passing like as first positional arg
449
+ def func(*, like=None):
450
+ pass
451
+
452
+ func_with_like = array_function_dispatch()(func)
453
+ with pytest.raises(TypeError):
454
+ func_with_like()
455
+ with pytest.raises(TypeError):
456
+ func_with_like(like=234)
457
+
458
+ def test_too_many_args(self):
459
+ # Mainly a unit-test to increase coverage
460
+ objs = []
461
+ for i in range(80):
462
+ class MyArr:
463
+ def __array_function__(self, *args, **kwargs):
464
+ return NotImplemented
465
+
466
+ objs.append(MyArr())
467
+
468
+ def _dispatch(*args):
469
+ return args
470
+
471
+ @array_function_dispatch(_dispatch)
472
+ def func(*args):
473
+ pass
474
+
475
+ with pytest.raises(TypeError, match="maximum number"):
476
+ func(*objs)
477
+
478
+
479
+ class TestNDArrayMethods:
480
+
481
+ def test_repr(self):
482
+ # gh-12162: should still be defined even if __array_function__ doesn't
483
+ # implement np.array_repr()
484
+
485
+ class MyArray(np.ndarray):
486
+ def __array_function__(*args, **kwargs):
487
+ return NotImplemented
488
+
489
+ array = np.array(1).view(MyArray)
490
+ assert_equal(repr(array), 'MyArray(1)')
491
+ assert_equal(str(array), '1')
492
+
493
+
494
+ class TestNumPyFunctions:
495
+
496
+ def test_set_module(self):
497
+ assert_equal(np.sum.__module__, 'numpy')
498
+ assert_equal(np.char.equal.__module__, 'numpy.char')
499
+ assert_equal(np.fft.fft.__module__, 'numpy.fft')
500
+ assert_equal(np.linalg.solve.__module__, 'numpy.linalg')
501
+
502
+ def test_inspect_sum(self):
503
+ signature = inspect.signature(np.sum)
504
+ assert_('axis' in signature.parameters)
505
+
506
+ def test_override_sum(self):
507
+ MyArray, implements = _new_duck_type_and_implements()
508
+
509
+ @implements(np.sum)
510
+ def _(array):
511
+ return 'yes'
512
+
513
+ assert_equal(np.sum(MyArray()), 'yes')
514
+
515
+ def test_sum_on_mock_array(self):
516
+
517
+ # We need a proxy for mocks because __array_function__ is only looked
518
+ # up in the class dict
519
+ class ArrayProxy:
520
+ def __init__(self, value):
521
+ self.value = value
522
+
523
+ def __array_function__(self, *args, **kwargs):
524
+ return self.value.__array_function__(*args, **kwargs)
525
+
526
+ def __array__(self, *args, **kwargs):
527
+ return self.value.__array__(*args, **kwargs)
528
+
529
+ proxy = ArrayProxy(mock.Mock(spec=ArrayProxy))
530
+ proxy.value.__array_function__.return_value = 1
531
+ result = np.sum(proxy)
532
+ assert_equal(result, 1)
533
+ proxy.value.__array_function__.assert_called_once_with(
534
+ np.sum, (ArrayProxy,), (proxy,), {})
535
+ proxy.value.__array__.assert_not_called()
536
+
537
+ def test_sum_forwarding_implementation(self):
538
+
539
+ class MyArray(np.ndarray):
540
+
541
+ def sum(self, axis, out):
542
+ return 'summed'
543
+
544
+ def __array_function__(self, func, types, args, kwargs):
545
+ return super().__array_function__(func, types, args, kwargs)
546
+
547
+ # note: the internal implementation of np.sum() calls the .sum() method
548
+ array = np.array(1).view(MyArray)
549
+ assert_equal(np.sum(array), 'summed')
550
+
551
+
552
+ class TestArrayLike:
553
+ def _create_MyArray(self):
554
+ class MyArray:
555
+ def __init__(self, function=None):
556
+ self.function = function
557
+
558
+ def __array_function__(self, func, types, args, kwargs):
559
+ assert func is getattr(np, func.__name__)
560
+ try:
561
+ my_func = getattr(self, func.__name__)
562
+ except AttributeError:
563
+ return NotImplemented
564
+ return my_func(*args, **kwargs)
565
+
566
+ return MyArray
567
+
568
+ def _create_MyNoArrayFunctionArray(self):
569
+ class MyNoArrayFunctionArray:
570
+ def __init__(self, function=None):
571
+ self.function = function
572
+
573
+ return MyNoArrayFunctionArray
574
+
575
+ def _create_MySubclass(self):
576
+ class MySubclass(np.ndarray):
577
+ def __array_function__(self, func, types, args, kwargs):
578
+ result = super().__array_function__(func, types, args, kwargs)
579
+ return result.view(self.__class__)
580
+
581
+ return MySubclass
582
+
583
+ def add_method(self, name, arr_class, enable_value_error=False):
584
+ def _definition(*args, **kwargs):
585
+ # Check that `like=` isn't propagated downstream
586
+ assert 'like' not in kwargs
587
+
588
+ if enable_value_error and 'value_error' in kwargs:
589
+ raise ValueError
590
+
591
+ return arr_class(getattr(arr_class, name))
592
+ setattr(arr_class, name, _definition)
593
+
594
+ def func_args(*args, **kwargs):
595
+ return args, kwargs
596
+
597
+ def test_array_like_not_implemented(self):
598
+ MyArray = self._create_MyArray()
599
+ self.add_method('array', MyArray)
600
+
601
+ ref = MyArray.array()
602
+
603
+ with assert_raises_regex(TypeError, 'no implementation found'):
604
+ array_like = np.asarray(1, like=ref)
605
+
606
+ _array_tests = [
607
+ ('array', *func_args((1,))),
608
+ ('asarray', *func_args((1,))),
609
+ ('asanyarray', *func_args((1,))),
610
+ ('ascontiguousarray', *func_args((2, 3))),
611
+ ('asfortranarray', *func_args((2, 3))),
612
+ ('require', *func_args((np.arange(6).reshape(2, 3),),
613
+ requirements=['A', 'F'])),
614
+ ('empty', *func_args((1,))),
615
+ ('full', *func_args((1,), 2)),
616
+ ('ones', *func_args((1,))),
617
+ ('zeros', *func_args((1,))),
618
+ ('arange', *func_args(3)),
619
+ ('frombuffer', *func_args(b'\x00' * 8, dtype=int)),
620
+ ('fromiter', *func_args(range(3), dtype=int)),
621
+ ('fromstring', *func_args('1,2', dtype=int, sep=',')),
622
+ ('loadtxt', *func_args(lambda: StringIO('0 1\n2 3'))),
623
+ ('genfromtxt', *func_args(lambda: StringIO('1,2.1'),
624
+ dtype=[('int', 'i8'), ('float', 'f8')],
625
+ delimiter=',')),
626
+ ]
627
+
628
+ def test_nep35_functions_as_array_functions(self,):
629
+ all_array_functions = get_overridable_numpy_array_functions()
630
+ like_array_functions_subset = {
631
+ getattr(np, func_name) for func_name, *_ in self.__class__._array_tests
632
+ }
633
+ assert like_array_functions_subset.issubset(all_array_functions)
634
+
635
+ nep35_python_functions = {
636
+ np.eye, np.fromfunction, np.full, np.genfromtxt,
637
+ np.identity, np.loadtxt, np.ones, np.require, np.tri,
638
+ }
639
+ assert nep35_python_functions.issubset(all_array_functions)
640
+
641
+ nep35_C_functions = {
642
+ np.arange, np.array, np.asanyarray, np.asarray,
643
+ np.ascontiguousarray, np.asfortranarray, np.empty,
644
+ np.frombuffer, np.fromfile, np.fromiter, np.fromstring,
645
+ np.zeros,
646
+ }
647
+ assert nep35_C_functions.issubset(all_array_functions)
648
+
649
+ @pytest.mark.parametrize('function, args, kwargs', _array_tests)
650
+ @pytest.mark.parametrize('numpy_ref', [True, False])
651
+ def test_array_like(self, function, args, kwargs, numpy_ref):
652
+ MyArray = self._create_MyArray()
653
+ self.add_method('array', MyArray)
654
+ self.add_method(function, MyArray)
655
+ np_func = getattr(np, function)
656
+ my_func = getattr(MyArray, function)
657
+
658
+ if numpy_ref is True:
659
+ ref = np.array(1)
660
+ else:
661
+ ref = MyArray.array()
662
+
663
+ like_args = tuple(a() if callable(a) else a for a in args)
664
+ array_like = np_func(*like_args, **kwargs, like=ref)
665
+
666
+ if numpy_ref is True:
667
+ assert type(array_like) is np.ndarray
668
+
669
+ np_args = tuple(a() if callable(a) else a for a in args)
670
+ np_arr = np_func(*np_args, **kwargs)
671
+
672
+ # Special-case np.empty to ensure values match
673
+ if function == "empty":
674
+ np_arr.fill(1)
675
+ array_like.fill(1)
676
+
677
+ assert_equal(array_like, np_arr)
678
+ else:
679
+ assert type(array_like) is MyArray
680
+ assert array_like.function is my_func
681
+
682
+ @pytest.mark.parametrize('function, args, kwargs', _array_tests)
683
+ @pytest.mark.parametrize('ref', [1, [1], "MyNoArrayFunctionArray"])
684
+ def test_no_array_function_like(self, function, args, kwargs, ref):
685
+ MyNoArrayFunctionArray = self._create_MyNoArrayFunctionArray()
686
+ self.add_method('array', MyNoArrayFunctionArray)
687
+ self.add_method(function, MyNoArrayFunctionArray)
688
+ np_func = getattr(np, function)
689
+
690
+ # Instantiate ref if it's the MyNoArrayFunctionArray class
691
+ if ref == "MyNoArrayFunctionArray":
692
+ ref = MyNoArrayFunctionArray.array()
693
+
694
+ like_args = tuple(a() if callable(a) else a for a in args)
695
+
696
+ with assert_raises_regex(TypeError,
697
+ 'The `like` argument must be an array-like that implements'):
698
+ np_func(*like_args, **kwargs, like=ref)
699
+
700
+ @pytest.mark.parametrize('function, args, kwargs', _array_tests)
701
+ def test_subclass(self, function, args, kwargs):
702
+ MySubclass = self._create_MySubclass()
703
+ ref = np.array(1).view(MySubclass)
704
+ np_func = getattr(np, function)
705
+ like_args = tuple(a() if callable(a) else a for a in args)
706
+ array_like = np_func(*like_args, **kwargs, like=ref)
707
+ assert type(array_like) is MySubclass
708
+ if np_func is np.empty:
709
+ return
710
+ np_args = tuple(a() if callable(a) else a for a in args)
711
+ np_arr = np_func(*np_args, **kwargs)
712
+ assert_equal(array_like.view(np.ndarray), np_arr)
713
+
714
+ @pytest.mark.parametrize('numpy_ref', [True, False])
715
+ def test_array_like_fromfile(self, numpy_ref):
716
+ MyArray = self._create_MyArray()
717
+ self.add_method('array', MyArray)
718
+ self.add_method("fromfile", MyArray)
719
+
720
+ if numpy_ref is True:
721
+ ref = np.array(1)
722
+ else:
723
+ ref = MyArray.array()
724
+
725
+ data = np.random.random(5)
726
+
727
+ with tempfile.TemporaryDirectory() as tmpdir:
728
+ fname = os.path.join(tmpdir, "testfile")
729
+ data.tofile(fname)
730
+
731
+ array_like = np.fromfile(fname, like=ref)
732
+ if numpy_ref is True:
733
+ assert type(array_like) is np.ndarray
734
+ np_res = np.fromfile(fname, like=ref)
735
+ assert_equal(np_res, data)
736
+ assert_equal(array_like, np_res)
737
+ else:
738
+ assert type(array_like) is MyArray
739
+ assert array_like.function is MyArray.fromfile
740
+
741
+ def test_exception_handling(self):
742
+ MyArray = self._create_MyArray()
743
+ self.add_method('array', MyArray, enable_value_error=True)
744
+
745
+ ref = MyArray.array()
746
+
747
+ with assert_raises(TypeError):
748
+ # Raises the error about `value_error` being invalid first
749
+ np.array(1, value_error=True, like=ref)
750
+
751
+ @pytest.mark.parametrize('function, args, kwargs', _array_tests)
752
+ def test_like_as_none(self, function, args, kwargs):
753
+ MyArray = self._create_MyArray()
754
+ self.add_method('array', MyArray)
755
+ self.add_method(function, MyArray)
756
+ np_func = getattr(np, function)
757
+
758
+ like_args = tuple(a() if callable(a) else a for a in args)
759
+ # required for loadtxt and genfromtxt to init w/o error.
760
+ like_args_exp = tuple(a() if callable(a) else a for a in args)
761
+
762
+ array_like = np_func(*like_args, **kwargs, like=None)
763
+ expected = np_func(*like_args_exp, **kwargs)
764
+ # Special-case np.empty to ensure values match
765
+ if function == "empty":
766
+ array_like.fill(1)
767
+ expected.fill(1)
768
+ assert_equal(array_like, expected)
769
+
770
+
771
+ def test_function_like():
772
+ # We provide a `__get__` implementation, make sure it works
773
+ assert type(np.mean) is np._core._multiarray_umath._ArrayFunctionDispatcher
774
+
775
+ class MyClass:
776
+ def __array__(self, dtype=None, copy=None):
777
+ # valid argument to mean:
778
+ return np.arange(3)
779
+
780
+ func1 = staticmethod(np.mean)
781
+ func2 = np.mean
782
+ func3 = classmethod(np.mean)
783
+
784
+ m = MyClass()
785
+ assert m.func1([10]) == 10
786
+ assert m.func2() == 1 # mean of the arange
787
+ with pytest.raises(TypeError, match="unsupported operand type"):
788
+ # Tries to operate on the class
789
+ m.func3()
790
+
791
+ # Manual binding also works (the above may shortcut):
792
+ bound = np.mean.__get__(m, MyClass)
793
+ assert bound() == 1
794
+
795
+ bound = np.mean.__get__(None, MyClass) # unbound actually
796
+ assert bound([10]) == 10
797
+
798
+ bound = np.mean.__get__(MyClass) # classmethod
799
+ with pytest.raises(TypeError, match="unsupported operand type"):
800
+ bound()