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,453 @@
1
+ import asyncio
2
+ import gc
3
+ import os
4
+ import sys
5
+ import sysconfig
6
+ import threading
7
+
8
+ import pytest
9
+
10
+ import numpy as np
11
+ from numpy._core.multiarray import get_handler_name
12
+ from numpy.testing import IS_EDITABLE, IS_WASM, extbuild
13
+
14
+
15
+ @pytest.fixture
16
+ def get_module(tmp_path):
17
+ """ Add a memory policy that returns a false pointer 64 bytes into the
18
+ actual allocation, and fill the prefix with some text. Then check at each
19
+ memory manipulation that the prefix exists, to make sure all alloc/realloc/
20
+ free/calloc go via the functions here.
21
+ """
22
+ if sys.platform.startswith('cygwin'):
23
+ pytest.skip('link fails on cygwin')
24
+ if IS_WASM:
25
+ pytest.skip("Can't build module inside Wasm")
26
+ if IS_EDITABLE:
27
+ pytest.skip("Can't build module for editable install")
28
+
29
+ functions = [
30
+ ("get_default_policy", "METH_NOARGS", """
31
+ Py_INCREF(PyDataMem_DefaultHandler);
32
+ return PyDataMem_DefaultHandler;
33
+ """),
34
+ ("set_secret_data_policy", "METH_NOARGS", """
35
+ PyObject *secret_data =
36
+ PyCapsule_New(&secret_data_handler, "mem_handler", NULL);
37
+ if (secret_data == NULL) {
38
+ return NULL;
39
+ }
40
+ PyObject *old = PyDataMem_SetHandler(secret_data);
41
+ Py_DECREF(secret_data);
42
+ return old;
43
+ """),
44
+ ("set_wrong_capsule_name_data_policy", "METH_NOARGS", """
45
+ PyObject *wrong_name_capsule =
46
+ PyCapsule_New(&secret_data_handler, "not_mem_handler", NULL);
47
+ if (wrong_name_capsule == NULL) {
48
+ return NULL;
49
+ }
50
+ PyObject *old = PyDataMem_SetHandler(wrong_name_capsule);
51
+ Py_DECREF(wrong_name_capsule);
52
+ return old;
53
+ """),
54
+ ("set_old_policy", "METH_O", """
55
+ PyObject *old;
56
+ if (args != NULL && PyCapsule_CheckExact(args)) {
57
+ old = PyDataMem_SetHandler(args);
58
+ }
59
+ else {
60
+ old = PyDataMem_SetHandler(NULL);
61
+ }
62
+ return old;
63
+ """),
64
+ ("get_array", "METH_NOARGS", """
65
+ char *buf = (char *)malloc(20);
66
+ npy_intp dims[1];
67
+ dims[0] = 20;
68
+ PyArray_Descr *descr = PyArray_DescrNewFromType(NPY_UINT8);
69
+ return PyArray_NewFromDescr(&PyArray_Type, descr, 1, dims, NULL,
70
+ buf, NPY_ARRAY_WRITEABLE, NULL);
71
+ """),
72
+ ("set_own", "METH_O", """
73
+ if (!PyArray_Check(args)) {
74
+ PyErr_SetString(PyExc_ValueError,
75
+ "need an ndarray");
76
+ return NULL;
77
+ }
78
+ PyArray_ENABLEFLAGS((PyArrayObject*)args, NPY_ARRAY_OWNDATA);
79
+ // Maybe try this too?
80
+ // PyArray_BASE(PyArrayObject *)args) = NULL;
81
+ Py_RETURN_NONE;
82
+ """),
83
+ ("get_array_with_base", "METH_NOARGS", """
84
+ char *buf = (char *)malloc(20);
85
+ npy_intp dims[1];
86
+ dims[0] = 20;
87
+ PyArray_Descr *descr = PyArray_DescrNewFromType(NPY_UINT8);
88
+ PyObject *arr = PyArray_NewFromDescr(&PyArray_Type, descr, 1, dims,
89
+ NULL, buf,
90
+ NPY_ARRAY_WRITEABLE, NULL);
91
+ if (arr == NULL) return NULL;
92
+ PyObject *obj = PyCapsule_New(buf, "buf capsule",
93
+ (PyCapsule_Destructor)&warn_on_free);
94
+ if (obj == NULL) {
95
+ Py_DECREF(arr);
96
+ return NULL;
97
+ }
98
+ if (PyArray_SetBaseObject((PyArrayObject *)arr, obj) < 0) {
99
+ Py_DECREF(arr);
100
+ Py_DECREF(obj);
101
+ return NULL;
102
+ }
103
+ return arr;
104
+
105
+ """),
106
+ ]
107
+ prologue = '''
108
+ #define NPY_TARGET_VERSION NPY_1_22_API_VERSION
109
+ #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
110
+ #include <numpy/arrayobject.h>
111
+ /*
112
+ * This struct allows the dynamic configuration of the allocator funcs
113
+ * of the `secret_data_allocator`. It is provided here for
114
+ * demonstration purposes, as a valid `ctx` use-case scenario.
115
+ */
116
+ typedef struct {
117
+ void *(*malloc)(size_t);
118
+ void *(*calloc)(size_t, size_t);
119
+ void *(*realloc)(void *, size_t);
120
+ void (*free)(void *);
121
+ } SecretDataAllocatorFuncs;
122
+
123
+ NPY_NO_EXPORT void *
124
+ shift_alloc(void *ctx, size_t sz) {
125
+ SecretDataAllocatorFuncs *funcs = (SecretDataAllocatorFuncs *)ctx;
126
+ char *real = (char *)funcs->malloc(sz + 64);
127
+ if (real == NULL) {
128
+ return NULL;
129
+ }
130
+ snprintf(real, 64, "originally allocated %ld", (unsigned long)sz);
131
+ return (void *)(real + 64);
132
+ }
133
+ NPY_NO_EXPORT void *
134
+ shift_zero(void *ctx, size_t sz, size_t cnt) {
135
+ SecretDataAllocatorFuncs *funcs = (SecretDataAllocatorFuncs *)ctx;
136
+ char *real = (char *)funcs->calloc(sz + 64, cnt);
137
+ if (real == NULL) {
138
+ return NULL;
139
+ }
140
+ snprintf(real, 64, "originally allocated %ld via zero",
141
+ (unsigned long)sz);
142
+ return (void *)(real + 64);
143
+ }
144
+ NPY_NO_EXPORT void
145
+ shift_free(void *ctx, void * p, npy_uintp sz) {
146
+ SecretDataAllocatorFuncs *funcs = (SecretDataAllocatorFuncs *)ctx;
147
+ if (p == NULL) {
148
+ return ;
149
+ }
150
+ char *real = (char *)p - 64;
151
+ if (strncmp(real, "originally allocated", 20) != 0) {
152
+ fprintf(stdout, "uh-oh, unmatched shift_free, "
153
+ "no appropriate prefix\\n");
154
+ /* Make C runtime crash by calling free on the wrong address */
155
+ funcs->free((char *)p + 10);
156
+ /* funcs->free(real); */
157
+ }
158
+ else {
159
+ npy_uintp i = (npy_uintp)atoi(real +20);
160
+ if (i != sz) {
161
+ fprintf(stderr, "uh-oh, unmatched shift_free"
162
+ "(ptr, %ld) but allocated %ld\\n", sz, i);
163
+ /* This happens in some places, only print */
164
+ funcs->free(real);
165
+ }
166
+ else {
167
+ funcs->free(real);
168
+ }
169
+ }
170
+ }
171
+ NPY_NO_EXPORT void *
172
+ shift_realloc(void *ctx, void * p, npy_uintp sz) {
173
+ SecretDataAllocatorFuncs *funcs = (SecretDataAllocatorFuncs *)ctx;
174
+ if (p != NULL) {
175
+ char *real = (char *)p - 64;
176
+ if (strncmp(real, "originally allocated", 20) != 0) {
177
+ fprintf(stdout, "uh-oh, unmatched shift_realloc\\n");
178
+ return realloc(p, sz);
179
+ }
180
+ return (void *)((char *)funcs->realloc(real, sz + 64) + 64);
181
+ }
182
+ else {
183
+ char *real = (char *)funcs->realloc(p, sz + 64);
184
+ if (real == NULL) {
185
+ return NULL;
186
+ }
187
+ snprintf(real, 64, "originally allocated "
188
+ "%ld via realloc", (unsigned long)sz);
189
+ return (void *)(real + 64);
190
+ }
191
+ }
192
+ /* As an example, we use the standard {m|c|re}alloc/free funcs. */
193
+ static SecretDataAllocatorFuncs secret_data_handler_ctx = {
194
+ malloc,
195
+ calloc,
196
+ realloc,
197
+ free
198
+ };
199
+ static PyDataMem_Handler secret_data_handler = {
200
+ "secret_data_allocator",
201
+ 1,
202
+ {
203
+ &secret_data_handler_ctx, /* ctx */
204
+ shift_alloc, /* malloc */
205
+ shift_zero, /* calloc */
206
+ shift_realloc, /* realloc */
207
+ shift_free /* free */
208
+ }
209
+ };
210
+ void warn_on_free(void *capsule) {
211
+ PyErr_WarnEx(PyExc_UserWarning, "in warn_on_free", 1);
212
+ void * obj = PyCapsule_GetPointer(capsule,
213
+ PyCapsule_GetName(capsule));
214
+ free(obj);
215
+ };
216
+ '''
217
+ more_init = "import_array();"
218
+ try:
219
+ import mem_policy
220
+ return mem_policy
221
+ except ImportError:
222
+ pass
223
+ # if it does not exist, build and load it
224
+ if sysconfig.get_platform() == "win-arm64":
225
+ pytest.skip("Meson unable to find MSVC linker on win-arm64")
226
+ return extbuild.build_and_import_extension('mem_policy',
227
+ functions,
228
+ prologue=prologue,
229
+ include_dirs=[np.get_include()],
230
+ build_dir=tmp_path,
231
+ more_init=more_init)
232
+
233
+
234
+ def test_set_policy(get_module):
235
+
236
+ get_handler_name = np._core.multiarray.get_handler_name
237
+ get_handler_version = np._core.multiarray.get_handler_version
238
+ orig_policy_name = get_handler_name()
239
+
240
+ a = np.arange(10).reshape((2, 5)) # a doesn't own its own data
241
+ assert get_handler_name(a) is None
242
+ assert get_handler_version(a) is None
243
+ assert get_handler_name(a.base) == orig_policy_name
244
+ assert get_handler_version(a.base) == 1
245
+
246
+ orig_policy = get_module.set_secret_data_policy()
247
+
248
+ b = np.arange(10).reshape((2, 5)) # b doesn't own its own data
249
+ assert get_handler_name(b) is None
250
+ assert get_handler_version(b) is None
251
+ assert get_handler_name(b.base) == 'secret_data_allocator'
252
+ assert get_handler_version(b.base) == 1
253
+
254
+ if orig_policy_name == 'default_allocator':
255
+ get_module.set_old_policy(None) # tests PyDataMem_SetHandler(NULL)
256
+ assert get_handler_name() == 'default_allocator'
257
+ else:
258
+ get_module.set_old_policy(orig_policy)
259
+ assert get_handler_name() == orig_policy_name
260
+
261
+ with pytest.raises(ValueError,
262
+ match="Capsule must be named 'mem_handler'"):
263
+ get_module.set_wrong_capsule_name_data_policy()
264
+
265
+
266
+ def test_default_policy_singleton(get_module):
267
+ get_handler_name = np._core.multiarray.get_handler_name
268
+
269
+ # set the policy to default
270
+ orig_policy = get_module.set_old_policy(None)
271
+
272
+ assert get_handler_name() == 'default_allocator'
273
+
274
+ # re-set the policy to default
275
+ def_policy_1 = get_module.set_old_policy(None)
276
+
277
+ assert get_handler_name() == 'default_allocator'
278
+
279
+ # set the policy to original
280
+ def_policy_2 = get_module.set_old_policy(orig_policy)
281
+
282
+ # since default policy is a singleton,
283
+ # these should be the same object
284
+ assert def_policy_1 is def_policy_2 is get_module.get_default_policy()
285
+
286
+
287
+ def test_policy_propagation(get_module):
288
+ # The memory policy goes hand-in-hand with flags.owndata
289
+
290
+ class MyArr(np.ndarray):
291
+ pass
292
+
293
+ get_handler_name = np._core.multiarray.get_handler_name
294
+ orig_policy_name = get_handler_name()
295
+ a = np.arange(10).view(MyArr).reshape((2, 5))
296
+ assert get_handler_name(a) is None
297
+ assert a.flags.owndata is False
298
+
299
+ assert get_handler_name(a.base) is None
300
+ assert a.base.flags.owndata is False
301
+
302
+ assert get_handler_name(a.base.base) == orig_policy_name
303
+ assert a.base.base.flags.owndata is True
304
+
305
+
306
+ async def concurrent_context1(get_module, orig_policy_name, event):
307
+ if orig_policy_name == 'default_allocator':
308
+ get_module.set_secret_data_policy()
309
+ assert get_handler_name() == 'secret_data_allocator'
310
+ else:
311
+ get_module.set_old_policy(None)
312
+ assert get_handler_name() == 'default_allocator'
313
+ event.set()
314
+
315
+
316
+ async def concurrent_context2(get_module, orig_policy_name, event):
317
+ await event.wait()
318
+ # the policy is not affected by changes in parallel contexts
319
+ assert get_handler_name() == orig_policy_name
320
+ # change policy in the child context
321
+ if orig_policy_name == 'default_allocator':
322
+ get_module.set_secret_data_policy()
323
+ assert get_handler_name() == 'secret_data_allocator'
324
+ else:
325
+ get_module.set_old_policy(None)
326
+ assert get_handler_name() == 'default_allocator'
327
+
328
+
329
+ async def async_test_context_locality(get_module):
330
+ orig_policy_name = np._core.multiarray.get_handler_name()
331
+
332
+ event = asyncio.Event()
333
+ # the child contexts inherit the parent policy
334
+ concurrent_task1 = asyncio.create_task(
335
+ concurrent_context1(get_module, orig_policy_name, event))
336
+ concurrent_task2 = asyncio.create_task(
337
+ concurrent_context2(get_module, orig_policy_name, event))
338
+ await concurrent_task1
339
+ await concurrent_task2
340
+
341
+ # the parent context is not affected by child policy changes
342
+ assert np._core.multiarray.get_handler_name() == orig_policy_name
343
+
344
+
345
+ def test_context_locality(get_module):
346
+ if (sys.implementation.name == 'pypy'
347
+ and sys.pypy_version_info[:3] < (7, 3, 6)):
348
+ pytest.skip('no context-locality support in PyPy < 7.3.6')
349
+ asyncio.run(async_test_context_locality(get_module))
350
+
351
+
352
+ def concurrent_thread1(get_module, event):
353
+ get_module.set_secret_data_policy()
354
+ assert np._core.multiarray.get_handler_name() == 'secret_data_allocator'
355
+ event.set()
356
+
357
+
358
+ def concurrent_thread2(get_module, event):
359
+ event.wait()
360
+ # the policy is not affected by changes in parallel threads
361
+ assert np._core.multiarray.get_handler_name() == 'default_allocator'
362
+ # change policy in the child thread
363
+ get_module.set_secret_data_policy()
364
+
365
+
366
+ def test_thread_locality(get_module):
367
+ orig_policy_name = np._core.multiarray.get_handler_name()
368
+
369
+ event = threading.Event()
370
+ # the child threads do not inherit the parent policy
371
+ concurrent_task1 = threading.Thread(target=concurrent_thread1,
372
+ args=(get_module, event))
373
+ concurrent_task2 = threading.Thread(target=concurrent_thread2,
374
+ args=(get_module, event))
375
+ concurrent_task1.start()
376
+ concurrent_task2.start()
377
+ concurrent_task1.join()
378
+ concurrent_task2.join()
379
+
380
+ # the parent thread is not affected by child policy changes
381
+ assert np._core.multiarray.get_handler_name() == orig_policy_name
382
+
383
+
384
+ @pytest.mark.skip(reason="too slow, see gh-23975")
385
+ def test_new_policy(get_module):
386
+ a = np.arange(10)
387
+ orig_policy_name = np._core.multiarray.get_handler_name(a)
388
+
389
+ orig_policy = get_module.set_secret_data_policy()
390
+
391
+ b = np.arange(10)
392
+ assert np._core.multiarray.get_handler_name(b) == 'secret_data_allocator'
393
+
394
+ # test array manipulation. This is slow
395
+ if orig_policy_name == 'default_allocator':
396
+ # when the np._core.test tests recurse into this test, the
397
+ # policy will be set so this "if" will be false, preventing
398
+ # infinite recursion
399
+ #
400
+ # if needed, debug this by
401
+ # - running tests with -- -s (to not capture stdout/stderr
402
+ # - setting verbose=2
403
+ # - setting extra_argv=['-vv'] here
404
+ assert np._core.test('full', verbose=1, extra_argv=[])
405
+ # also try the ma tests, the pickling test is quite tricky
406
+ assert np.ma.test('full', verbose=1, extra_argv=[])
407
+
408
+ get_module.set_old_policy(orig_policy)
409
+
410
+ c = np.arange(10)
411
+ assert np._core.multiarray.get_handler_name(c) == orig_policy_name
412
+
413
+
414
+ @pytest.mark.xfail(sys.implementation.name == "pypy",
415
+ reason=("bad interaction between getenv and "
416
+ "os.environ inside pytest"))
417
+ @pytest.mark.parametrize("policy", ["0", "1", None])
418
+ @pytest.mark.thread_unsafe(reason="modifies environment variables")
419
+ def test_switch_owner(get_module, policy):
420
+ a = get_module.get_array()
421
+ assert np._core.multiarray.get_handler_name(a) is None
422
+ get_module.set_own(a)
423
+
424
+ if policy is None:
425
+ # See what we expect to be set based on the env variable
426
+ policy = os.getenv("NUMPY_WARN_IF_NO_MEM_POLICY", "0") == "1"
427
+ oldval = None
428
+ else:
429
+ policy = policy == "1"
430
+ oldval = np._core._multiarray_umath._set_numpy_warn_if_no_mem_policy(
431
+ policy)
432
+ try:
433
+ # The policy should be NULL, so we have to assume we can call
434
+ # "free". A warning is given if the policy == "1"
435
+ if policy:
436
+ with pytest.warns(RuntimeWarning) as w:
437
+ del a
438
+ gc.collect()
439
+ else:
440
+ del a
441
+ gc.collect()
442
+
443
+ finally:
444
+ if oldval is not None:
445
+ np._core._multiarray_umath._set_numpy_warn_if_no_mem_policy(oldval)
446
+
447
+
448
+ def test_owner_is_base(get_module):
449
+ a = get_module.get_array_with_base()
450
+ with pytest.warns(UserWarning, match='warn_on_free'):
451
+ del a
452
+ gc.collect()
453
+ gc.collect()
@@ -0,0 +1,248 @@
1
+ import mmap
2
+ import os
3
+ import sys
4
+ import warnings
5
+ from pathlib import Path
6
+ from tempfile import NamedTemporaryFile, TemporaryFile
7
+
8
+ import pytest
9
+
10
+ from numpy import (
11
+ add,
12
+ allclose,
13
+ arange,
14
+ asarray,
15
+ average,
16
+ isscalar,
17
+ memmap,
18
+ multiply,
19
+ ndarray,
20
+ prod,
21
+ subtract,
22
+ sum,
23
+ )
24
+ from numpy.testing import (
25
+ IS_PYPY,
26
+ assert_,
27
+ assert_array_equal,
28
+ assert_equal,
29
+ break_cycles,
30
+ )
31
+
32
+
33
+ @pytest.mark.thread_unsafe(reason="setup & memmap is thread-unsafe (gh-29126)")
34
+ class TestMemmap:
35
+ def setup_method(self):
36
+ self.tmpfp = NamedTemporaryFile(prefix='mmap')
37
+ self.shape = (3, 4)
38
+ self.dtype = 'float32'
39
+ self.data = arange(12, dtype=self.dtype)
40
+ self.data.resize(self.shape)
41
+
42
+ def teardown_method(self):
43
+ self.tmpfp.close()
44
+ self.data = None
45
+ if IS_PYPY:
46
+ break_cycles()
47
+ break_cycles()
48
+
49
+ def test_roundtrip(self):
50
+ # Write data to file
51
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
52
+ shape=self.shape)
53
+ fp[:] = self.data[:]
54
+ del fp # Test __del__ machinery, which handles cleanup
55
+
56
+ # Read data back from file
57
+ newfp = memmap(self.tmpfp, dtype=self.dtype, mode='r',
58
+ shape=self.shape)
59
+ assert_(allclose(self.data, newfp))
60
+ assert_array_equal(self.data, newfp)
61
+ assert_equal(newfp.flags.writeable, False)
62
+
63
+ def test_open_with_filename(self, tmp_path):
64
+ tmpname = tmp_path / 'mmap'
65
+ fp = memmap(tmpname, dtype=self.dtype, mode='w+',
66
+ shape=self.shape)
67
+ fp[:] = self.data[:]
68
+ del fp
69
+
70
+ def test_unnamed_file(self):
71
+ with TemporaryFile() as f:
72
+ fp = memmap(f, dtype=self.dtype, shape=self.shape)
73
+ del fp
74
+
75
+ def test_attributes(self):
76
+ offset = 1
77
+ mode = "w+"
78
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode=mode,
79
+ shape=self.shape, offset=offset)
80
+ assert_equal(offset, fp.offset)
81
+ assert_equal(mode, fp.mode)
82
+ del fp
83
+
84
+ def test_filename(self, tmp_path):
85
+ tmpname = tmp_path / "mmap"
86
+ fp = memmap(tmpname, dtype=self.dtype, mode='w+',
87
+ shape=self.shape)
88
+ abspath = Path(os.path.abspath(tmpname))
89
+ fp[:] = self.data[:]
90
+ assert_equal(abspath, fp.filename)
91
+ b = fp[:1]
92
+ assert_equal(abspath, b.filename)
93
+ del b
94
+ del fp
95
+
96
+ def test_path(self, tmp_path):
97
+ tmpname = tmp_path / "mmap"
98
+ fp = memmap(Path(tmpname), dtype=self.dtype, mode='w+',
99
+ shape=self.shape)
100
+ # os.path.realpath does not resolve symlinks on Windows
101
+ # see: https://bugs.python.org/issue9949
102
+ # use Path.resolve, just as memmap class does internally
103
+ abspath = str(Path(tmpname).resolve())
104
+ fp[:] = self.data[:]
105
+ assert_equal(abspath, str(fp.filename.resolve()))
106
+ b = fp[:1]
107
+ assert_equal(abspath, str(b.filename.resolve()))
108
+ del b
109
+ del fp
110
+
111
+ def test_filename_fileobj(self):
112
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode="w+",
113
+ shape=self.shape)
114
+ assert_equal(fp.filename, self.tmpfp.name)
115
+
116
+ @pytest.mark.skipif(sys.platform == 'gnu0',
117
+ reason="Known to fail on hurd")
118
+ def test_flush(self):
119
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
120
+ shape=self.shape)
121
+ fp[:] = self.data[:]
122
+ assert_equal(fp[0], self.data[0])
123
+ fp.flush()
124
+
125
+ def test_del(self):
126
+ # Make sure a view does not delete the underlying mmap
127
+ fp_base = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
128
+ shape=self.shape)
129
+ fp_base[0] = 5
130
+ fp_view = fp_base[0:1]
131
+ assert_equal(fp_view[0], 5)
132
+ del fp_view
133
+ # Should still be able to access and assign values after
134
+ # deleting the view
135
+ assert_equal(fp_base[0], 5)
136
+ fp_base[0] = 6
137
+ assert_equal(fp_base[0], 6)
138
+
139
+ def test_arithmetic_drops_references(self):
140
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
141
+ shape=self.shape)
142
+ tmp = (fp + 10)
143
+ if isinstance(tmp, memmap):
144
+ assert_(tmp._mmap is not fp._mmap)
145
+
146
+ def test_indexing_drops_references(self):
147
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
148
+ shape=self.shape)
149
+ tmp = fp[(1, 2), (2, 3)]
150
+ if isinstance(tmp, memmap):
151
+ assert_(tmp._mmap is not fp._mmap)
152
+
153
+ def test_slicing_keeps_references(self):
154
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
155
+ shape=self.shape)
156
+ assert_(fp[:2, :2]._mmap is fp._mmap)
157
+
158
+ def test_view(self):
159
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
160
+ new1 = fp.view()
161
+ new2 = new1.view()
162
+ assert_(new1.base is fp)
163
+ assert_(new2.base is fp)
164
+ new_array = asarray(fp)
165
+ assert_(new_array.base is fp)
166
+
167
+ def test_ufunc_return_ndarray(self):
168
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
169
+ fp[:] = self.data
170
+
171
+ with warnings.catch_warnings():
172
+ warnings.filterwarnings(
173
+ 'ignore', "np.average currently does not preserve", FutureWarning)
174
+ for unary_op in [sum, average, prod]:
175
+ result = unary_op(fp)
176
+ assert_(isscalar(result))
177
+ assert_(result.__class__ is self.data[0, 0].__class__)
178
+
179
+ assert_(unary_op(fp, axis=0).__class__ is ndarray)
180
+ assert_(unary_op(fp, axis=1).__class__ is ndarray)
181
+
182
+ for binary_op in [add, subtract, multiply]:
183
+ assert_(binary_op(fp, self.data).__class__ is ndarray)
184
+ assert_(binary_op(self.data, fp).__class__ is ndarray)
185
+ assert_(binary_op(fp, fp).__class__ is ndarray)
186
+
187
+ fp += 1
188
+ assert fp.__class__ is memmap
189
+ add(fp, 1, out=fp)
190
+ assert fp.__class__ is memmap
191
+
192
+ def test_getitem(self):
193
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
194
+ fp[:] = self.data
195
+
196
+ assert_(fp[1:, :-1].__class__ is memmap)
197
+ # Fancy indexing returns a copy that is not memmapped
198
+ assert_(fp[[0, 1]].__class__ is ndarray)
199
+
200
+ def test_memmap_subclass(self):
201
+ class MemmapSubClass(memmap):
202
+ pass
203
+
204
+ fp = MemmapSubClass(self.tmpfp, dtype=self.dtype, shape=self.shape)
205
+ fp[:] = self.data
206
+
207
+ # We keep previous behavior for subclasses of memmap, i.e. the
208
+ # ufunc and __getitem__ output is never turned into a ndarray
209
+ assert_(sum(fp, axis=0).__class__ is MemmapSubClass)
210
+ assert_(sum(fp).__class__ is MemmapSubClass)
211
+ assert_(fp[1:, :-1].__class__ is MemmapSubClass)
212
+ assert fp[[0, 1]].__class__ is MemmapSubClass
213
+
214
+ def test_mmap_offset_greater_than_allocation_granularity(self):
215
+ size = 5 * mmap.ALLOCATIONGRANULARITY
216
+ offset = mmap.ALLOCATIONGRANULARITY + 1
217
+ fp = memmap(self.tmpfp, shape=size, mode='w+', offset=offset)
218
+ assert_(fp.offset == offset)
219
+
220
+ def test_empty_array_with_offset_multiple_of_allocation_granularity(self):
221
+ self.tmpfp.write(b'a' * mmap.ALLOCATIONGRANULARITY)
222
+ size = 0
223
+ offset = mmap.ALLOCATIONGRANULARITY
224
+ fp = memmap(self.tmpfp, shape=size, mode='w+', offset=offset)
225
+ assert_equal(fp.offset, offset)
226
+
227
+ def test_no_shape(self):
228
+ self.tmpfp.write(b'a' * 16)
229
+ mm = memmap(self.tmpfp, dtype='float64')
230
+ assert_equal(mm.shape, (2,))
231
+
232
+ def test_empty_array(self):
233
+ # gh-12653
234
+ with pytest.raises(ValueError, match='empty file'):
235
+ memmap(self.tmpfp, shape=(0, 4), mode='r')
236
+
237
+ # gh-27723
238
+ # empty memmap works with mode in ('w+','r+')
239
+ memmap(self.tmpfp, shape=(0, 4), mode='w+')
240
+
241
+ # ok now the file is not empty
242
+ memmap(self.tmpfp, shape=(0, 4), mode='w+')
243
+
244
+ def test_shape_type(self):
245
+ memmap(self.tmpfp, shape=3, mode='w+')
246
+ memmap(self.tmpfp, shape=self.shape, mode='w+')
247
+ memmap(self.tmpfp, shape=list(self.shape), mode='w+')
248
+ memmap(self.tmpfp, shape=asarray(self.shape), mode='w+')