numpy 2.3.5__cp313-cp313-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of numpy might be problematic. Click here for more details.

Files changed (897) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +102 -0
  3. numpy/__init__.cython-30.pxd +1241 -0
  4. numpy/__init__.pxd +1154 -0
  5. numpy/__init__.py +945 -0
  6. numpy/__init__.pyi +6147 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +207 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +186 -0
  12. numpy/_core/__init__.pyi +2 -0
  13. numpy/_core/_add_newdocs.py +6967 -0
  14. numpy/_core/_add_newdocs.pyi +3 -0
  15. numpy/_core/_add_newdocs_scalars.py +390 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +134 -0
  18. numpy/_core/_asarray.pyi +41 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +58 -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 +55 -0
  25. numpy/_core/_internal.py +958 -0
  26. numpy/_core/_internal.pyi +72 -0
  27. numpy/_core/_machar.py +355 -0
  28. numpy/_core/_machar.pyi +55 -0
  29. numpy/_core/_methods.py +255 -0
  30. numpy/_core/_methods.pyi +22 -0
  31. numpy/_core/_multiarray_tests.cpython-313-darwin.so +0 -0
  32. numpy/_core/_multiarray_umath.cpython-313-darwin.so +0 -0
  33. numpy/_core/_operand_flag_tests.cpython-313-darwin.so +0 -0
  34. numpy/_core/_rational_tests.cpython-313-darwin.so +0 -0
  35. numpy/_core/_simd.cpython-313-darwin.so +0 -0
  36. numpy/_core/_simd.pyi +25 -0
  37. numpy/_core/_string_helpers.py +100 -0
  38. numpy/_core/_string_helpers.pyi +12 -0
  39. numpy/_core/_struct_ufunc_tests.cpython-313-darwin.so +0 -0
  40. numpy/_core/_type_aliases.py +119 -0
  41. numpy/_core/_type_aliases.pyi +97 -0
  42. numpy/_core/_ufunc_config.py +491 -0
  43. numpy/_core/_ufunc_config.pyi +78 -0
  44. numpy/_core/_umath_tests.cpython-313-darwin.so +0 -0
  45. numpy/_core/arrayprint.py +1775 -0
  46. numpy/_core/arrayprint.pyi +238 -0
  47. numpy/_core/cversions.py +13 -0
  48. numpy/_core/defchararray.py +1427 -0
  49. numpy/_core/defchararray.pyi +1135 -0
  50. numpy/_core/einsumfunc.py +1498 -0
  51. numpy/_core/einsumfunc.pyi +184 -0
  52. numpy/_core/fromnumeric.py +4269 -0
  53. numpy/_core/fromnumeric.pyi +1750 -0
  54. numpy/_core/function_base.py +545 -0
  55. numpy/_core/function_base.pyi +278 -0
  56. numpy/_core/getlimits.py +748 -0
  57. numpy/_core/getlimits.pyi +3 -0
  58. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  59. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  60. numpy/_core/include/numpy/__ufunc_api.c +54 -0
  61. numpy/_core/include/numpy/__ufunc_api.h +341 -0
  62. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  63. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  64. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  65. numpy/_core/include/numpy/arrayobject.h +7 -0
  66. numpy/_core/include/numpy/arrayscalars.h +196 -0
  67. numpy/_core/include/numpy/dtype_api.h +480 -0
  68. numpy/_core/include/numpy/halffloat.h +70 -0
  69. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  70. numpy/_core/include/numpy/ndarraytypes.h +1950 -0
  71. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  72. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  73. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  74. numpy/_core/include/numpy/npy_common.h +977 -0
  75. numpy/_core/include/numpy/npy_cpu.h +124 -0
  76. numpy/_core/include/numpy/npy_endian.h +78 -0
  77. numpy/_core/include/numpy/npy_math.h +602 -0
  78. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  79. numpy/_core/include/numpy/npy_os.h +42 -0
  80. numpy/_core/include/numpy/numpyconfig.h +182 -0
  81. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  82. numpy/_core/include/numpy/random/bitgen.h +20 -0
  83. numpy/_core/include/numpy/random/distributions.h +209 -0
  84. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  85. numpy/_core/include/numpy/ufuncobject.h +343 -0
  86. numpy/_core/include/numpy/utils.h +37 -0
  87. numpy/_core/lib/libnpymath.a +0 -0
  88. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  89. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  90. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  91. numpy/_core/memmap.py +363 -0
  92. numpy/_core/memmap.pyi +3 -0
  93. numpy/_core/multiarray.py +1762 -0
  94. numpy/_core/multiarray.pyi +1285 -0
  95. numpy/_core/numeric.py +2760 -0
  96. numpy/_core/numeric.pyi +882 -0
  97. numpy/_core/numerictypes.py +633 -0
  98. numpy/_core/numerictypes.pyi +197 -0
  99. numpy/_core/overrides.py +183 -0
  100. numpy/_core/overrides.pyi +48 -0
  101. numpy/_core/printoptions.py +32 -0
  102. numpy/_core/printoptions.pyi +28 -0
  103. numpy/_core/records.py +1089 -0
  104. numpy/_core/records.pyi +333 -0
  105. numpy/_core/shape_base.py +998 -0
  106. numpy/_core/shape_base.pyi +175 -0
  107. numpy/_core/strings.py +1829 -0
  108. numpy/_core/strings.pyi +511 -0
  109. numpy/_core/tests/_locales.py +72 -0
  110. numpy/_core/tests/_natype.py +205 -0
  111. numpy/_core/tests/data/astype_copy.pkl +0 -0
  112. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  113. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  114. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  115. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  122. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  123. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  124. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  125. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  127. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  128. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  129. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  130. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  131. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  132. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  134. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  135. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  136. numpy/_core/tests/examples/cython/meson.build +43 -0
  137. numpy/_core/tests/examples/cython/setup.py +39 -0
  138. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  139. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  140. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  141. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  142. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  143. numpy/_core/tests/test__exceptions.py +90 -0
  144. numpy/_core/tests/test_abc.py +54 -0
  145. numpy/_core/tests/test_api.py +654 -0
  146. numpy/_core/tests/test_argparse.py +92 -0
  147. numpy/_core/tests/test_array_api_info.py +113 -0
  148. numpy/_core/tests/test_array_coercion.py +911 -0
  149. numpy/_core/tests/test_array_interface.py +222 -0
  150. numpy/_core/tests/test_arraymethod.py +84 -0
  151. numpy/_core/tests/test_arrayobject.py +75 -0
  152. numpy/_core/tests/test_arrayprint.py +1328 -0
  153. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  154. numpy/_core/tests/test_casting_unittests.py +817 -0
  155. numpy/_core/tests/test_conversion_utils.py +206 -0
  156. numpy/_core/tests/test_cpu_dispatcher.py +49 -0
  157. numpy/_core/tests/test_cpu_features.py +432 -0
  158. numpy/_core/tests/test_custom_dtypes.py +315 -0
  159. numpy/_core/tests/test_cython.py +351 -0
  160. numpy/_core/tests/test_datetime.py +2734 -0
  161. numpy/_core/tests/test_defchararray.py +825 -0
  162. numpy/_core/tests/test_deprecations.py +454 -0
  163. numpy/_core/tests/test_dlpack.py +190 -0
  164. numpy/_core/tests/test_dtype.py +1995 -0
  165. numpy/_core/tests/test_einsum.py +1317 -0
  166. numpy/_core/tests/test_errstate.py +131 -0
  167. numpy/_core/tests/test_extint128.py +217 -0
  168. numpy/_core/tests/test_function_base.py +503 -0
  169. numpy/_core/tests/test_getlimits.py +205 -0
  170. numpy/_core/tests/test_half.py +568 -0
  171. numpy/_core/tests/test_hashtable.py +35 -0
  172. numpy/_core/tests/test_indexerrors.py +125 -0
  173. numpy/_core/tests/test_indexing.py +1455 -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 +369 -0
  177. numpy/_core/tests/test_machar.py +30 -0
  178. numpy/_core/tests/test_mem_overlap.py +930 -0
  179. numpy/_core/tests/test_mem_policy.py +452 -0
  180. numpy/_core/tests/test_memmap.py +246 -0
  181. numpy/_core/tests/test_multiarray.py +10577 -0
  182. numpy/_core/tests/test_multithreading.py +292 -0
  183. numpy/_core/tests/test_nditer.py +3498 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4247 -0
  186. numpy/_core/tests/test_numerictypes.py +651 -0
  187. numpy/_core/tests/test_overrides.py +791 -0
  188. numpy/_core/tests/test_print.py +200 -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 +2670 -0
  192. numpy/_core/tests/test_scalar_ctors.py +207 -0
  193. numpy/_core/tests/test_scalar_methods.py +246 -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 +1176 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +891 -0
  199. numpy/_core/tests/test_simd.py +1341 -0
  200. numpy/_core/tests/test_simd_module.py +103 -0
  201. numpy/_core/tests/test_stringdtype.py +1814 -0
  202. numpy/_core/tests/test_strings.py +1499 -0
  203. numpy/_core/tests/test_ufunc.py +3313 -0
  204. numpy/_core/tests/test_umath.py +4928 -0
  205. numpy/_core/tests/test_umath_accuracy.py +124 -0
  206. numpy/_core/tests/test_umath_complex.py +626 -0
  207. numpy/_core/tests/test_unicode.py +368 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +197 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +79 -0
  213. numpy/_expired_attrs_2_0.pyi +62 -0
  214. numpy/_globals.py +96 -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 +13 -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 +148 -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 +40 -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 +941 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +30 -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 +71 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +121 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +258 -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 +33 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +245 -0
  277. numpy/doc/ufuncs.py +138 -0
  278. numpy/dtypes.py +41 -0
  279. numpy/dtypes.pyi +631 -0
  280. numpy/exceptions.py +247 -0
  281. numpy/exceptions.pyi +27 -0
  282. numpy/f2py/__init__.py +86 -0
  283. numpy/f2py/__init__.pyi +6 -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 +231 -0
  294. numpy/f2py/_backends/_meson.pyi +63 -0
  295. numpy/f2py/_backends/meson.build.template +55 -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 +29 -0
  300. numpy/f2py/auxfuncs.py +1004 -0
  301. numpy/f2py/auxfuncs.pyi +264 -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 +258 -0
  312. numpy/f2py/diagnose.py +149 -0
  313. numpy/f2py/diagnose.pyi +1 -0
  314. numpy/f2py/f2py2e.py +786 -0
  315. numpy/f2py/f2py2e.pyi +76 -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 +43 -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 +1516 -0
  326. numpy/f2py/symbolic.pyi +221 -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 +64 -0
  435. numpy/f2py/tests/test_f2cmap.py +17 -0
  436. numpy/f2py/tests/test_f2py2e.py +964 -0
  437. numpy/f2py/tests/test_isoc.py +56 -0
  438. numpy/f2py/tests/test_kind.py +53 -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 +495 -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 +215 -0
  460. numpy/fft/__init__.pyi +43 -0
  461. numpy/fft/_helper.py +235 -0
  462. numpy/fft/_helper.pyi +45 -0
  463. numpy/fft/_pocketfft.py +1693 -0
  464. numpy/fft/_pocketfft.pyi +138 -0
  465. numpy/fft/_pocketfft_umath.cpython-313-darwin.so +0 -0
  466. numpy/fft/helper.py +17 -0
  467. numpy/fft/helper.pyi +22 -0
  468. numpy/fft/tests/__init__.py +0 -0
  469. numpy/fft/tests/test_helper.py +167 -0
  470. numpy/fft/tests/test_pocketfft.py +589 -0
  471. numpy/lib/__init__.py +97 -0
  472. numpy/lib/__init__.pyi +44 -0
  473. numpy/lib/_array_utils_impl.py +62 -0
  474. numpy/lib/_array_utils_impl.pyi +26 -0
  475. numpy/lib/_arraypad_impl.py +890 -0
  476. numpy/lib/_arraypad_impl.pyi +89 -0
  477. numpy/lib/_arraysetops_impl.py +1260 -0
  478. numpy/lib/_arraysetops_impl.pyi +468 -0
  479. numpy/lib/_arrayterator_impl.py +224 -0
  480. numpy/lib/_arrayterator_impl.pyi +46 -0
  481. numpy/lib/_datasource.py +700 -0
  482. numpy/lib/_datasource.pyi +31 -0
  483. numpy/lib/_format_impl.py +1036 -0
  484. numpy/lib/_format_impl.pyi +26 -0
  485. numpy/lib/_function_base_impl.py +5844 -0
  486. numpy/lib/_function_base_impl.pyi +1164 -0
  487. numpy/lib/_histograms_impl.py +1085 -0
  488. numpy/lib/_histograms_impl.pyi +50 -0
  489. numpy/lib/_index_tricks_impl.py +1067 -0
  490. numpy/lib/_index_tricks_impl.pyi +208 -0
  491. numpy/lib/_iotools.py +900 -0
  492. numpy/lib/_iotools.pyi +114 -0
  493. numpy/lib/_nanfunctions_impl.py +2024 -0
  494. numpy/lib/_nanfunctions_impl.pyi +52 -0
  495. numpy/lib/_npyio_impl.py +2596 -0
  496. numpy/lib/_npyio_impl.pyi +301 -0
  497. numpy/lib/_polynomial_impl.py +1465 -0
  498. numpy/lib/_polynomial_impl.pyi +318 -0
  499. numpy/lib/_scimath_impl.py +642 -0
  500. numpy/lib/_scimath_impl.pyi +93 -0
  501. numpy/lib/_shape_base_impl.py +1301 -0
  502. numpy/lib/_shape_base_impl.pyi +235 -0
  503. numpy/lib/_stride_tricks_impl.py +549 -0
  504. numpy/lib/_stride_tricks_impl.pyi +74 -0
  505. numpy/lib/_twodim_base_impl.py +1201 -0
  506. numpy/lib/_twodim_base_impl.pyi +438 -0
  507. numpy/lib/_type_check_impl.py +699 -0
  508. numpy/lib/_type_check_impl.pyi +350 -0
  509. numpy/lib/_ufunclike_impl.py +207 -0
  510. numpy/lib/_ufunclike_impl.pyi +67 -0
  511. numpy/lib/_user_array_impl.py +299 -0
  512. numpy/lib/_user_array_impl.pyi +225 -0
  513. numpy/lib/_utils_impl.py +784 -0
  514. numpy/lib/_utils_impl.pyi +10 -0
  515. numpy/lib/_version.py +154 -0
  516. numpy/lib/_version.pyi +17 -0
  517. numpy/lib/array_utils.py +7 -0
  518. numpy/lib/array_utils.pyi +12 -0
  519. numpy/lib/format.py +24 -0
  520. numpy/lib/format.pyi +66 -0
  521. numpy/lib/introspect.py +95 -0
  522. numpy/lib/introspect.pyi +3 -0
  523. numpy/lib/mixins.py +180 -0
  524. numpy/lib/mixins.pyi +77 -0
  525. numpy/lib/npyio.py +1 -0
  526. numpy/lib/npyio.pyi +9 -0
  527. numpy/lib/recfunctions.py +1681 -0
  528. numpy/lib/recfunctions.pyi +435 -0
  529. numpy/lib/scimath.py +13 -0
  530. numpy/lib/scimath.pyi +30 -0
  531. numpy/lib/stride_tricks.py +1 -0
  532. numpy/lib/stride_tricks.pyi +6 -0
  533. numpy/lib/tests/__init__.py +0 -0
  534. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  535. numpy/lib/tests/data/py2-objarr.npy +0 -0
  536. numpy/lib/tests/data/py2-objarr.npz +0 -0
  537. numpy/lib/tests/data/py3-objarr.npy +0 -0
  538. numpy/lib/tests/data/py3-objarr.npz +0 -0
  539. numpy/lib/tests/data/python3.npy +0 -0
  540. numpy/lib/tests/data/win64python2.npy +0 -0
  541. numpy/lib/tests/test__datasource.py +352 -0
  542. numpy/lib/tests/test__iotools.py +360 -0
  543. numpy/lib/tests/test__version.py +64 -0
  544. numpy/lib/tests/test_array_utils.py +32 -0
  545. numpy/lib/tests/test_arraypad.py +1415 -0
  546. numpy/lib/tests/test_arraysetops.py +1074 -0
  547. numpy/lib/tests/test_arrayterator.py +46 -0
  548. numpy/lib/tests/test_format.py +1054 -0
  549. numpy/lib/tests/test_function_base.py +4573 -0
  550. numpy/lib/tests/test_histograms.py +855 -0
  551. numpy/lib/tests/test_index_tricks.py +573 -0
  552. numpy/lib/tests/test_io.py +2848 -0
  553. numpy/lib/tests/test_loadtxt.py +1101 -0
  554. numpy/lib/tests/test_mixins.py +215 -0
  555. numpy/lib/tests/test_nanfunctions.py +1438 -0
  556. numpy/lib/tests/test_packbits.py +376 -0
  557. numpy/lib/tests/test_polynomial.py +320 -0
  558. numpy/lib/tests/test_recfunctions.py +1052 -0
  559. numpy/lib/tests/test_regression.py +231 -0
  560. numpy/lib/tests/test_shape_base.py +813 -0
  561. numpy/lib/tests/test_stride_tricks.py +656 -0
  562. numpy/lib/tests/test_twodim_base.py +559 -0
  563. numpy/lib/tests/test_type_check.py +473 -0
  564. numpy/lib/tests/test_ufunclike.py +97 -0
  565. numpy/lib/tests/test_utils.py +80 -0
  566. numpy/lib/user_array.py +1 -0
  567. numpy/lib/user_array.pyi +1 -0
  568. numpy/linalg/__init__.py +98 -0
  569. numpy/linalg/__init__.pyi +73 -0
  570. numpy/linalg/_linalg.py +3682 -0
  571. numpy/linalg/_linalg.pyi +475 -0
  572. numpy/linalg/_umath_linalg.cpython-313-darwin.so +0 -0
  573. numpy/linalg/_umath_linalg.pyi +61 -0
  574. numpy/linalg/lapack_lite.cpython-313-darwin.so +0 -0
  575. numpy/linalg/lapack_lite.pyi +141 -0
  576. numpy/linalg/linalg.py +17 -0
  577. numpy/linalg/linalg.pyi +69 -0
  578. numpy/linalg/tests/__init__.py +0 -0
  579. numpy/linalg/tests/test_deprecations.py +20 -0
  580. numpy/linalg/tests/test_linalg.py +2443 -0
  581. numpy/linalg/tests/test_regression.py +181 -0
  582. numpy/ma/API_CHANGES.txt +135 -0
  583. numpy/ma/LICENSE +24 -0
  584. numpy/ma/README.rst +236 -0
  585. numpy/ma/__init__.py +53 -0
  586. numpy/ma/__init__.pyi +458 -0
  587. numpy/ma/core.py +8933 -0
  588. numpy/ma/core.pyi +1462 -0
  589. numpy/ma/extras.py +2344 -0
  590. numpy/ma/extras.pyi +138 -0
  591. numpy/ma/mrecords.py +773 -0
  592. numpy/ma/mrecords.pyi +96 -0
  593. numpy/ma/tests/__init__.py +0 -0
  594. numpy/ma/tests/test_arrayobject.py +40 -0
  595. numpy/ma/tests/test_core.py +5886 -0
  596. numpy/ma/tests/test_deprecations.py +87 -0
  597. numpy/ma/tests/test_extras.py +1998 -0
  598. numpy/ma/tests/test_mrecords.py +497 -0
  599. numpy/ma/tests/test_old_ma.py +942 -0
  600. numpy/ma/tests/test_regression.py +100 -0
  601. numpy/ma/tests/test_subclassing.py +469 -0
  602. numpy/ma/testutils.py +294 -0
  603. numpy/matlib.py +380 -0
  604. numpy/matlib.pyi +582 -0
  605. numpy/matrixlib/__init__.py +12 -0
  606. numpy/matrixlib/__init__.pyi +5 -0
  607. numpy/matrixlib/defmatrix.py +1119 -0
  608. numpy/matrixlib/defmatrix.pyi +17 -0
  609. numpy/matrixlib/tests/__init__.py +0 -0
  610. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  611. numpy/matrixlib/tests/test_interaction.py +360 -0
  612. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  613. numpy/matrixlib/tests/test_matrix_linalg.py +105 -0
  614. numpy/matrixlib/tests/test_multiarray.py +17 -0
  615. numpy/matrixlib/tests/test_numeric.py +18 -0
  616. numpy/matrixlib/tests/test_regression.py +31 -0
  617. numpy/polynomial/__init__.py +187 -0
  618. numpy/polynomial/__init__.pyi +25 -0
  619. numpy/polynomial/_polybase.py +1191 -0
  620. numpy/polynomial/_polybase.pyi +285 -0
  621. numpy/polynomial/_polytypes.pyi +892 -0
  622. numpy/polynomial/chebyshev.py +2003 -0
  623. numpy/polynomial/chebyshev.pyi +181 -0
  624. numpy/polynomial/hermite.py +1740 -0
  625. numpy/polynomial/hermite.pyi +107 -0
  626. numpy/polynomial/hermite_e.py +1642 -0
  627. numpy/polynomial/hermite_e.pyi +107 -0
  628. numpy/polynomial/laguerre.py +1675 -0
  629. numpy/polynomial/laguerre.pyi +100 -0
  630. numpy/polynomial/legendre.py +1605 -0
  631. numpy/polynomial/legendre.pyi +100 -0
  632. numpy/polynomial/polynomial.py +1616 -0
  633. numpy/polynomial/polynomial.pyi +89 -0
  634. numpy/polynomial/polyutils.py +759 -0
  635. numpy/polynomial/polyutils.pyi +423 -0
  636. numpy/polynomial/tests/__init__.py +0 -0
  637. numpy/polynomial/tests/test_chebyshev.py +623 -0
  638. numpy/polynomial/tests/test_classes.py +618 -0
  639. numpy/polynomial/tests/test_hermite.py +558 -0
  640. numpy/polynomial/tests/test_hermite_e.py +559 -0
  641. numpy/polynomial/tests/test_laguerre.py +540 -0
  642. numpy/polynomial/tests/test_legendre.py +571 -0
  643. numpy/polynomial/tests/test_polynomial.py +669 -0
  644. numpy/polynomial/tests/test_polyutils.py +128 -0
  645. numpy/polynomial/tests/test_printing.py +555 -0
  646. numpy/polynomial/tests/test_symbol.py +217 -0
  647. numpy/py.typed +0 -0
  648. numpy/random/LICENSE.md +71 -0
  649. numpy/random/__init__.pxd +14 -0
  650. numpy/random/__init__.py +213 -0
  651. numpy/random/__init__.pyi +124 -0
  652. numpy/random/_bounded_integers.cpython-313-darwin.so +0 -0
  653. numpy/random/_bounded_integers.pxd +29 -0
  654. numpy/random/_bounded_integers.pyi +1 -0
  655. numpy/random/_common.cpython-313-darwin.so +0 -0
  656. numpy/random/_common.pxd +107 -0
  657. numpy/random/_common.pyi +16 -0
  658. numpy/random/_examples/cffi/extending.py +44 -0
  659. numpy/random/_examples/cffi/parse.py +53 -0
  660. numpy/random/_examples/cython/extending.pyx +77 -0
  661. numpy/random/_examples/cython/extending_distributions.pyx +118 -0
  662. numpy/random/_examples/cython/meson.build +53 -0
  663. numpy/random/_examples/numba/extending.py +86 -0
  664. numpy/random/_examples/numba/extending_distributions.py +67 -0
  665. numpy/random/_generator.cpython-313-darwin.so +0 -0
  666. numpy/random/_generator.pyi +861 -0
  667. numpy/random/_mt19937.cpython-313-darwin.so +0 -0
  668. numpy/random/_mt19937.pyi +25 -0
  669. numpy/random/_pcg64.cpython-313-darwin.so +0 -0
  670. numpy/random/_pcg64.pyi +44 -0
  671. numpy/random/_philox.cpython-313-darwin.so +0 -0
  672. numpy/random/_philox.pyi +39 -0
  673. numpy/random/_pickle.py +88 -0
  674. numpy/random/_pickle.pyi +43 -0
  675. numpy/random/_sfc64.cpython-313-darwin.so +0 -0
  676. numpy/random/_sfc64.pyi +28 -0
  677. numpy/random/bit_generator.cpython-313-darwin.so +0 -0
  678. numpy/random/bit_generator.pxd +35 -0
  679. numpy/random/bit_generator.pyi +124 -0
  680. numpy/random/c_distributions.pxd +119 -0
  681. numpy/random/lib/libnpyrandom.a +0 -0
  682. numpy/random/mtrand.cpython-313-darwin.so +0 -0
  683. numpy/random/mtrand.pyi +703 -0
  684. numpy/random/tests/__init__.py +0 -0
  685. numpy/random/tests/data/__init__.py +0 -0
  686. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  687. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  688. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  689. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  690. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  691. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  692. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  693. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  694. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  695. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  696. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  697. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  698. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  699. numpy/random/tests/test_direct.py +592 -0
  700. numpy/random/tests/test_extending.py +127 -0
  701. numpy/random/tests/test_generator_mt19937.py +2809 -0
  702. numpy/random/tests/test_generator_mt19937_regressions.py +207 -0
  703. numpy/random/tests/test_random.py +1757 -0
  704. numpy/random/tests/test_randomstate.py +2130 -0
  705. numpy/random/tests/test_randomstate_regression.py +217 -0
  706. numpy/random/tests/test_regression.py +152 -0
  707. numpy/random/tests/test_seed_sequence.py +79 -0
  708. numpy/random/tests/test_smoke.py +819 -0
  709. numpy/rec/__init__.py +2 -0
  710. numpy/rec/__init__.pyi +23 -0
  711. numpy/strings/__init__.py +2 -0
  712. numpy/strings/__init__.pyi +97 -0
  713. numpy/testing/__init__.py +22 -0
  714. numpy/testing/__init__.pyi +102 -0
  715. numpy/testing/_private/__init__.py +0 -0
  716. numpy/testing/_private/__init__.pyi +0 -0
  717. numpy/testing/_private/extbuild.py +250 -0
  718. numpy/testing/_private/extbuild.pyi +25 -0
  719. numpy/testing/_private/utils.py +2752 -0
  720. numpy/testing/_private/utils.pyi +499 -0
  721. numpy/testing/overrides.py +84 -0
  722. numpy/testing/overrides.pyi +11 -0
  723. numpy/testing/print_coercion_tables.py +207 -0
  724. numpy/testing/print_coercion_tables.pyi +27 -0
  725. numpy/testing/tests/__init__.py +0 -0
  726. numpy/testing/tests/test_utils.py +1917 -0
  727. numpy/tests/__init__.py +0 -0
  728. numpy/tests/test__all__.py +10 -0
  729. numpy/tests/test_configtool.py +48 -0
  730. numpy/tests/test_ctypeslib.py +377 -0
  731. numpy/tests/test_lazyloading.py +38 -0
  732. numpy/tests/test_matlib.py +59 -0
  733. numpy/tests/test_numpy_config.py +46 -0
  734. numpy/tests/test_numpy_version.py +54 -0
  735. numpy/tests/test_public_api.py +806 -0
  736. numpy/tests/test_reloading.py +74 -0
  737. numpy/tests/test_scripts.py +49 -0
  738. numpy/tests/test_warnings.py +78 -0
  739. numpy/typing/__init__.py +201 -0
  740. numpy/typing/mypy_plugin.py +195 -0
  741. numpy/typing/tests/__init__.py +0 -0
  742. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  743. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  744. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  745. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  746. numpy/typing/tests/data/fail/arrayprint.pyi +16 -0
  747. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  748. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  749. numpy/typing/tests/data/fail/char.pyi +65 -0
  750. numpy/typing/tests/data/fail/chararray.pyi +62 -0
  751. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  752. numpy/typing/tests/data/fail/constants.pyi +3 -0
  753. numpy/typing/tests/data/fail/datasource.pyi +15 -0
  754. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  755. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  756. numpy/typing/tests/data/fail/flatiter.pyi +20 -0
  757. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  758. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  759. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  760. numpy/typing/tests/data/fail/lib_function_base.pyi +62 -0
  761. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  762. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  763. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  764. numpy/typing/tests/data/fail/linalg.pyi +48 -0
  765. numpy/typing/tests/data/fail/ma.pyi +143 -0
  766. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  767. numpy/typing/tests/data/fail/modules.pyi +17 -0
  768. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  769. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  770. numpy/typing/tests/data/fail/ndarray_misc.pyi +36 -0
  771. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  772. numpy/typing/tests/data/fail/nested_sequence.pyi +16 -0
  773. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  774. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  775. numpy/typing/tests/data/fail/random.pyi +62 -0
  776. numpy/typing/tests/data/fail/rec.pyi +17 -0
  777. numpy/typing/tests/data/fail/scalars.pyi +87 -0
  778. numpy/typing/tests/data/fail/shape.pyi +6 -0
  779. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  780. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  781. numpy/typing/tests/data/fail/strings.pyi +52 -0
  782. numpy/typing/tests/data/fail/testing.pyi +28 -0
  783. numpy/typing/tests/data/fail/twodim_base.pyi +32 -0
  784. numpy/typing/tests/data/fail/type_check.pyi +13 -0
  785. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  786. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  787. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  788. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  789. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  790. numpy/typing/tests/data/mypy.ini +9 -0
  791. numpy/typing/tests/data/pass/arithmetic.py +612 -0
  792. numpy/typing/tests/data/pass/array_constructors.py +137 -0
  793. numpy/typing/tests/data/pass/array_like.py +43 -0
  794. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  795. numpy/typing/tests/data/pass/arrayterator.py +27 -0
  796. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  797. numpy/typing/tests/data/pass/comparisons.py +315 -0
  798. numpy/typing/tests/data/pass/dtype.py +57 -0
  799. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  800. numpy/typing/tests/data/pass/flatiter.py +19 -0
  801. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  802. numpy/typing/tests/data/pass/index_tricks.py +60 -0
  803. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  804. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  805. numpy/typing/tests/data/pass/lib_version.py +18 -0
  806. numpy/typing/tests/data/pass/literal.py +51 -0
  807. numpy/typing/tests/data/pass/ma.py +174 -0
  808. numpy/typing/tests/data/pass/mod.py +149 -0
  809. numpy/typing/tests/data/pass/modules.py +45 -0
  810. numpy/typing/tests/data/pass/multiarray.py +76 -0
  811. numpy/typing/tests/data/pass/ndarray_conversion.py +87 -0
  812. numpy/typing/tests/data/pass/ndarray_misc.py +203 -0
  813. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  814. numpy/typing/tests/data/pass/nditer.py +4 -0
  815. numpy/typing/tests/data/pass/numeric.py +95 -0
  816. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  817. numpy/typing/tests/data/pass/random.py +1497 -0
  818. numpy/typing/tests/data/pass/recfunctions.py +161 -0
  819. numpy/typing/tests/data/pass/scalars.py +248 -0
  820. numpy/typing/tests/data/pass/shape.py +19 -0
  821. numpy/typing/tests/data/pass/simple.py +168 -0
  822. numpy/typing/tests/data/pass/simple_py3.py +6 -0
  823. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  824. numpy/typing/tests/data/pass/ufunclike.py +47 -0
  825. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  826. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  827. numpy/typing/tests/data/reveal/arithmetic.pyi +720 -0
  828. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  829. numpy/typing/tests/data/reveal/array_constructors.pyi +249 -0
  830. numpy/typing/tests/data/reveal/arraypad.pyi +22 -0
  831. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  832. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  833. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  834. numpy/typing/tests/data/reveal/bitwise_ops.pyi +167 -0
  835. numpy/typing/tests/data/reveal/char.pyi +224 -0
  836. numpy/typing/tests/data/reveal/chararray.pyi +137 -0
  837. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  838. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  839. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  840. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  841. numpy/typing/tests/data/reveal/dtype.pyi +136 -0
  842. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  843. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  844. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  845. numpy/typing/tests/data/reveal/flatiter.pyi +47 -0
  846. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  847. numpy/typing/tests/data/reveal/getlimits.pyi +51 -0
  848. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  849. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  850. numpy/typing/tests/data/reveal/lib_function_base.pyi +213 -0
  851. numpy/typing/tests/data/reveal/lib_polynomial.pyi +144 -0
  852. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  853. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  854. numpy/typing/tests/data/reveal/linalg.pyi +132 -0
  855. numpy/typing/tests/data/reveal/ma.pyi +369 -0
  856. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  857. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  858. numpy/typing/tests/data/reveal/mod.pyi +179 -0
  859. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  860. numpy/typing/tests/data/reveal/multiarray.pyi +194 -0
  861. numpy/typing/tests/data/reveal/nbit_base_example.pyi +21 -0
  862. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +77 -0
  863. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +85 -0
  864. numpy/typing/tests/data/reveal/ndarray_misc.pyi +247 -0
  865. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +39 -0
  866. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  867. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  868. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  869. numpy/typing/tests/data/reveal/numeric.pyi +134 -0
  870. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  871. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +220 -0
  872. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +219 -0
  873. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  874. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  875. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  876. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  877. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  878. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  879. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  880. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  881. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  882. numpy/typing/tests/data/reveal/twodim_base.pyi +145 -0
  883. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  884. numpy/typing/tests/data/reveal/ufunc_config.pyi +30 -0
  885. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  886. numpy/typing/tests/data/reveal/ufuncs.pyi +123 -0
  887. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  888. numpy/typing/tests/test_isfile.py +32 -0
  889. numpy/typing/tests/test_runtime.py +102 -0
  890. numpy/typing/tests/test_typing.py +205 -0
  891. numpy/version.py +11 -0
  892. numpy/version.pyi +18 -0
  893. numpy-2.3.5.dist-info/LICENSE.txt +971 -0
  894. numpy-2.3.5.dist-info/METADATA +1093 -0
  895. numpy-2.3.5.dist-info/RECORD +897 -0
  896. numpy-2.3.5.dist-info/WHEEL +6 -0
  897. numpy-2.3.5.dist-info/entry_points.txt +13 -0
@@ -0,0 +1,452 @@
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, assert_warns, 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
+ def test_switch_owner(get_module, policy):
419
+ a = get_module.get_array()
420
+ assert np._core.multiarray.get_handler_name(a) is None
421
+ get_module.set_own(a)
422
+
423
+ if policy is None:
424
+ # See what we expect to be set based on the env variable
425
+ policy = os.getenv("NUMPY_WARN_IF_NO_MEM_POLICY", "0") == "1"
426
+ oldval = None
427
+ else:
428
+ policy = policy == "1"
429
+ oldval = np._core._multiarray_umath._set_numpy_warn_if_no_mem_policy(
430
+ policy)
431
+ try:
432
+ # The policy should be NULL, so we have to assume we can call
433
+ # "free". A warning is given if the policy == "1"
434
+ if policy:
435
+ with assert_warns(RuntimeWarning) as w:
436
+ del a
437
+ gc.collect()
438
+ else:
439
+ del a
440
+ gc.collect()
441
+
442
+ finally:
443
+ if oldval is not None:
444
+ np._core._multiarray_umath._set_numpy_warn_if_no_mem_policy(oldval)
445
+
446
+
447
+ def test_owner_is_base(get_module):
448
+ a = get_module.get_array_with_base()
449
+ with pytest.warns(UserWarning, match='warn_on_free'):
450
+ del a
451
+ gc.collect()
452
+ gc.collect()
@@ -0,0 +1,246 @@
1
+ import mmap
2
+ import os
3
+ import sys
4
+ from pathlib import Path
5
+ from tempfile import NamedTemporaryFile, TemporaryFile
6
+
7
+ import pytest
8
+
9
+ from numpy import (
10
+ add,
11
+ allclose,
12
+ arange,
13
+ asarray,
14
+ average,
15
+ isscalar,
16
+ memmap,
17
+ multiply,
18
+ ndarray,
19
+ prod,
20
+ subtract,
21
+ sum,
22
+ )
23
+ from numpy.testing import (
24
+ IS_PYPY,
25
+ assert_,
26
+ assert_array_equal,
27
+ assert_equal,
28
+ break_cycles,
29
+ suppress_warnings,
30
+ )
31
+
32
+
33
+ class TestMemmap:
34
+ def setup_method(self):
35
+ self.tmpfp = NamedTemporaryFile(prefix='mmap')
36
+ self.shape = (3, 4)
37
+ self.dtype = 'float32'
38
+ self.data = arange(12, dtype=self.dtype)
39
+ self.data.resize(self.shape)
40
+
41
+ def teardown_method(self):
42
+ self.tmpfp.close()
43
+ self.data = None
44
+ if IS_PYPY:
45
+ break_cycles()
46
+ break_cycles()
47
+
48
+ def test_roundtrip(self):
49
+ # Write data to file
50
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
51
+ shape=self.shape)
52
+ fp[:] = self.data[:]
53
+ del fp # Test __del__ machinery, which handles cleanup
54
+
55
+ # Read data back from file
56
+ newfp = memmap(self.tmpfp, dtype=self.dtype, mode='r',
57
+ shape=self.shape)
58
+ assert_(allclose(self.data, newfp))
59
+ assert_array_equal(self.data, newfp)
60
+ assert_equal(newfp.flags.writeable, False)
61
+
62
+ def test_open_with_filename(self, tmp_path):
63
+ tmpname = tmp_path / 'mmap'
64
+ fp = memmap(tmpname, dtype=self.dtype, mode='w+',
65
+ shape=self.shape)
66
+ fp[:] = self.data[:]
67
+ del fp
68
+
69
+ def test_unnamed_file(self):
70
+ with TemporaryFile() as f:
71
+ fp = memmap(f, dtype=self.dtype, shape=self.shape)
72
+ del fp
73
+
74
+ def test_attributes(self):
75
+ offset = 1
76
+ mode = "w+"
77
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode=mode,
78
+ shape=self.shape, offset=offset)
79
+ assert_equal(offset, fp.offset)
80
+ assert_equal(mode, fp.mode)
81
+ del fp
82
+
83
+ def test_filename(self, tmp_path):
84
+ tmpname = tmp_path / "mmap"
85
+ fp = memmap(tmpname, dtype=self.dtype, mode='w+',
86
+ shape=self.shape)
87
+ abspath = Path(os.path.abspath(tmpname))
88
+ fp[:] = self.data[:]
89
+ assert_equal(abspath, fp.filename)
90
+ b = fp[:1]
91
+ assert_equal(abspath, b.filename)
92
+ del b
93
+ del fp
94
+
95
+ def test_path(self, tmp_path):
96
+ tmpname = tmp_path / "mmap"
97
+ fp = memmap(Path(tmpname), dtype=self.dtype, mode='w+',
98
+ shape=self.shape)
99
+ # os.path.realpath does not resolve symlinks on Windows
100
+ # see: https://bugs.python.org/issue9949
101
+ # use Path.resolve, just as memmap class does internally
102
+ abspath = str(Path(tmpname).resolve())
103
+ fp[:] = self.data[:]
104
+ assert_equal(abspath, str(fp.filename.resolve()))
105
+ b = fp[:1]
106
+ assert_equal(abspath, str(b.filename.resolve()))
107
+ del b
108
+ del fp
109
+
110
+ def test_filename_fileobj(self):
111
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode="w+",
112
+ shape=self.shape)
113
+ assert_equal(fp.filename, self.tmpfp.name)
114
+
115
+ @pytest.mark.skipif(sys.platform == 'gnu0',
116
+ reason="Known to fail on hurd")
117
+ def test_flush(self):
118
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
119
+ shape=self.shape)
120
+ fp[:] = self.data[:]
121
+ assert_equal(fp[0], self.data[0])
122
+ fp.flush()
123
+
124
+ def test_del(self):
125
+ # Make sure a view does not delete the underlying mmap
126
+ fp_base = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
127
+ shape=self.shape)
128
+ fp_base[0] = 5
129
+ fp_view = fp_base[0:1]
130
+ assert_equal(fp_view[0], 5)
131
+ del fp_view
132
+ # Should still be able to access and assign values after
133
+ # deleting the view
134
+ assert_equal(fp_base[0], 5)
135
+ fp_base[0] = 6
136
+ assert_equal(fp_base[0], 6)
137
+
138
+ def test_arithmetic_drops_references(self):
139
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
140
+ shape=self.shape)
141
+ tmp = (fp + 10)
142
+ if isinstance(tmp, memmap):
143
+ assert_(tmp._mmap is not fp._mmap)
144
+
145
+ def test_indexing_drops_references(self):
146
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
147
+ shape=self.shape)
148
+ tmp = fp[(1, 2), (2, 3)]
149
+ if isinstance(tmp, memmap):
150
+ assert_(tmp._mmap is not fp._mmap)
151
+
152
+ def test_slicing_keeps_references(self):
153
+ fp = memmap(self.tmpfp, dtype=self.dtype, mode='w+',
154
+ shape=self.shape)
155
+ assert_(fp[:2, :2]._mmap is fp._mmap)
156
+
157
+ def test_view(self):
158
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
159
+ new1 = fp.view()
160
+ new2 = new1.view()
161
+ assert_(new1.base is fp)
162
+ assert_(new2.base is fp)
163
+ new_array = asarray(fp)
164
+ assert_(new_array.base is fp)
165
+
166
+ def test_ufunc_return_ndarray(self):
167
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
168
+ fp[:] = self.data
169
+
170
+ with suppress_warnings() as sup:
171
+ sup.filter(FutureWarning, "np.average currently does not preserve")
172
+ for unary_op in [sum, average, prod]:
173
+ result = unary_op(fp)
174
+ assert_(isscalar(result))
175
+ assert_(result.__class__ is self.data[0, 0].__class__)
176
+
177
+ assert_(unary_op(fp, axis=0).__class__ is ndarray)
178
+ assert_(unary_op(fp, axis=1).__class__ is ndarray)
179
+
180
+ for binary_op in [add, subtract, multiply]:
181
+ assert_(binary_op(fp, self.data).__class__ is ndarray)
182
+ assert_(binary_op(self.data, fp).__class__ is ndarray)
183
+ assert_(binary_op(fp, fp).__class__ is ndarray)
184
+
185
+ fp += 1
186
+ assert fp.__class__ is memmap
187
+ add(fp, 1, out=fp)
188
+ assert fp.__class__ is memmap
189
+
190
+ def test_getitem(self):
191
+ fp = memmap(self.tmpfp, dtype=self.dtype, shape=self.shape)
192
+ fp[:] = self.data
193
+
194
+ assert_(fp[1:, :-1].__class__ is memmap)
195
+ # Fancy indexing returns a copy that is not memmapped
196
+ assert_(fp[[0, 1]].__class__ is ndarray)
197
+
198
+ def test_memmap_subclass(self):
199
+ class MemmapSubClass(memmap):
200
+ pass
201
+
202
+ fp = MemmapSubClass(self.tmpfp, dtype=self.dtype, shape=self.shape)
203
+ fp[:] = self.data
204
+
205
+ # We keep previous behavior for subclasses of memmap, i.e. the
206
+ # ufunc and __getitem__ output is never turned into a ndarray
207
+ assert_(sum(fp, axis=0).__class__ is MemmapSubClass)
208
+ assert_(sum(fp).__class__ is MemmapSubClass)
209
+ assert_(fp[1:, :-1].__class__ is MemmapSubClass)
210
+ assert fp[[0, 1]].__class__ is MemmapSubClass
211
+
212
+ def test_mmap_offset_greater_than_allocation_granularity(self):
213
+ size = 5 * mmap.ALLOCATIONGRANULARITY
214
+ offset = mmap.ALLOCATIONGRANULARITY + 1
215
+ fp = memmap(self.tmpfp, shape=size, mode='w+', offset=offset)
216
+ assert_(fp.offset == offset)
217
+
218
+ def test_empty_array_with_offset_multiple_of_allocation_granularity(self):
219
+ self.tmpfp.write(b'a' * mmap.ALLOCATIONGRANULARITY)
220
+ size = 0
221
+ offset = mmap.ALLOCATIONGRANULARITY
222
+ fp = memmap(self.tmpfp, shape=size, mode='w+', offset=offset)
223
+ assert_equal(fp.offset, offset)
224
+
225
+ def test_no_shape(self):
226
+ self.tmpfp.write(b'a' * 16)
227
+ mm = memmap(self.tmpfp, dtype='float64')
228
+ assert_equal(mm.shape, (2,))
229
+
230
+ def test_empty_array(self):
231
+ # gh-12653
232
+ with pytest.raises(ValueError, match='empty file'):
233
+ memmap(self.tmpfp, shape=(0, 4), mode='r')
234
+
235
+ # gh-27723
236
+ # empty memmap works with mode in ('w+','r+')
237
+ memmap(self.tmpfp, shape=(0, 4), mode='w+')
238
+
239
+ # ok now the file is not empty
240
+ memmap(self.tmpfp, shape=(0, 4), mode='w+')
241
+
242
+ def test_shape_type(self):
243
+ memmap(self.tmpfp, shape=3, mode='w+')
244
+ memmap(self.tmpfp, shape=self.shape, mode='w+')
245
+ memmap(self.tmpfp, shape=list(self.shape), mode='w+')
246
+ memmap(self.tmpfp, shape=asarray(self.shape), mode='w+')