numpy 2.4.1__cp314-cp314t-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (932) 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 +955 -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.cp314t-win_arm64.lib +0 -0
  30. numpy/_core/_multiarray_tests.cp314t-win_arm64.pyd +0 -0
  31. numpy/_core/_multiarray_umath.cp314t-win_arm64.lib +0 -0
  32. numpy/_core/_multiarray_umath.cp314t-win_arm64.pyd +0 -0
  33. numpy/_core/_operand_flag_tests.cp314t-win_arm64.lib +0 -0
  34. numpy/_core/_operand_flag_tests.cp314t-win_arm64.pyd +0 -0
  35. numpy/_core/_rational_tests.cp314t-win_arm64.lib +0 -0
  36. numpy/_core/_rational_tests.cp314t-win_arm64.pyd +0 -0
  37. numpy/_core/_simd.cp314t-win_arm64.lib +0 -0
  38. numpy/_core/_simd.cp314t-win_arm64.pyd +0 -0
  39. numpy/_core/_simd.pyi +35 -0
  40. numpy/_core/_string_helpers.py +100 -0
  41. numpy/_core/_string_helpers.pyi +12 -0
  42. numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.lib +0 -0
  43. numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.pyd +0 -0
  44. numpy/_core/_type_aliases.py +131 -0
  45. numpy/_core/_type_aliases.pyi +86 -0
  46. numpy/_core/_ufunc_config.py +515 -0
  47. numpy/_core/_ufunc_config.pyi +69 -0
  48. numpy/_core/_umath_tests.cp314t-win_arm64.lib +0 -0
  49. numpy/_core/_umath_tests.cp314t-win_arm64.pyd +0 -0
  50. numpy/_core/_umath_tests.pyi +47 -0
  51. numpy/_core/arrayprint.py +1779 -0
  52. numpy/_core/arrayprint.pyi +158 -0
  53. numpy/_core/cversions.py +13 -0
  54. numpy/_core/defchararray.py +1414 -0
  55. numpy/_core/defchararray.pyi +1150 -0
  56. numpy/_core/einsumfunc.py +1650 -0
  57. numpy/_core/einsumfunc.pyi +184 -0
  58. numpy/_core/fromnumeric.py +4233 -0
  59. numpy/_core/fromnumeric.pyi +1735 -0
  60. numpy/_core/function_base.py +547 -0
  61. numpy/_core/function_base.pyi +276 -0
  62. numpy/_core/getlimits.py +462 -0
  63. numpy/_core/getlimits.pyi +124 -0
  64. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  65. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  66. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  67. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  68. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  69. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  70. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  71. numpy/_core/include/numpy/arrayobject.h +7 -0
  72. numpy/_core/include/numpy/arrayscalars.h +198 -0
  73. numpy/_core/include/numpy/dtype_api.h +547 -0
  74. numpy/_core/include/numpy/halffloat.h +70 -0
  75. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  76. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  77. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  78. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  79. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  80. numpy/_core/include/numpy/npy_common.h +989 -0
  81. numpy/_core/include/numpy/npy_cpu.h +126 -0
  82. numpy/_core/include/numpy/npy_endian.h +79 -0
  83. numpy/_core/include/numpy/npy_math.h +602 -0
  84. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  85. numpy/_core/include/numpy/npy_os.h +42 -0
  86. numpy/_core/include/numpy/numpyconfig.h +185 -0
  87. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  88. numpy/_core/include/numpy/random/bitgen.h +20 -0
  89. numpy/_core/include/numpy/random/distributions.h +209 -0
  90. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  91. numpy/_core/include/numpy/ufuncobject.h +343 -0
  92. numpy/_core/include/numpy/utils.h +37 -0
  93. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  94. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  95. numpy/_core/lib/npymath.lib +0 -0
  96. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  97. numpy/_core/memmap.py +363 -0
  98. numpy/_core/memmap.pyi +3 -0
  99. numpy/_core/multiarray.py +1740 -0
  100. numpy/_core/multiarray.pyi +1316 -0
  101. numpy/_core/numeric.py +2758 -0
  102. numpy/_core/numeric.pyi +1276 -0
  103. numpy/_core/numerictypes.py +633 -0
  104. numpy/_core/numerictypes.pyi +196 -0
  105. numpy/_core/overrides.py +188 -0
  106. numpy/_core/overrides.pyi +47 -0
  107. numpy/_core/printoptions.py +32 -0
  108. numpy/_core/printoptions.pyi +28 -0
  109. numpy/_core/records.py +1088 -0
  110. numpy/_core/records.pyi +340 -0
  111. numpy/_core/shape_base.py +996 -0
  112. numpy/_core/shape_base.pyi +182 -0
  113. numpy/_core/strings.py +1813 -0
  114. numpy/_core/strings.pyi +536 -0
  115. numpy/_core/tests/_locales.py +72 -0
  116. numpy/_core/tests/_natype.py +144 -0
  117. numpy/_core/tests/data/astype_copy.pkl +0 -0
  118. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  119. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  120. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  121. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  122. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  124. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  127. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  128. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  129. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  130. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  131. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  134. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  135. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  136. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  137. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  138. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  139. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  140. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  141. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  142. numpy/_core/tests/examples/cython/meson.build +43 -0
  143. numpy/_core/tests/examples/cython/setup.py +39 -0
  144. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  145. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  146. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  147. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  148. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  149. numpy/_core/tests/test__exceptions.py +90 -0
  150. numpy/_core/tests/test_abc.py +54 -0
  151. numpy/_core/tests/test_api.py +655 -0
  152. numpy/_core/tests/test_argparse.py +90 -0
  153. numpy/_core/tests/test_array_api_info.py +113 -0
  154. numpy/_core/tests/test_array_coercion.py +928 -0
  155. numpy/_core/tests/test_array_interface.py +222 -0
  156. numpy/_core/tests/test_arraymethod.py +84 -0
  157. numpy/_core/tests/test_arrayobject.py +75 -0
  158. numpy/_core/tests/test_arrayprint.py +1324 -0
  159. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  160. numpy/_core/tests/test_casting_unittests.py +955 -0
  161. numpy/_core/tests/test_conversion_utils.py +209 -0
  162. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  163. numpy/_core/tests/test_cpu_features.py +450 -0
  164. numpy/_core/tests/test_custom_dtypes.py +393 -0
  165. numpy/_core/tests/test_cython.py +352 -0
  166. numpy/_core/tests/test_datetime.py +2792 -0
  167. numpy/_core/tests/test_defchararray.py +858 -0
  168. numpy/_core/tests/test_deprecations.py +460 -0
  169. numpy/_core/tests/test_dlpack.py +190 -0
  170. numpy/_core/tests/test_dtype.py +2110 -0
  171. numpy/_core/tests/test_einsum.py +1351 -0
  172. numpy/_core/tests/test_errstate.py +131 -0
  173. numpy/_core/tests/test_extint128.py +217 -0
  174. numpy/_core/tests/test_finfo.py +86 -0
  175. numpy/_core/tests/test_function_base.py +504 -0
  176. numpy/_core/tests/test_getlimits.py +171 -0
  177. numpy/_core/tests/test_half.py +593 -0
  178. numpy/_core/tests/test_hashtable.py +36 -0
  179. numpy/_core/tests/test_indexerrors.py +122 -0
  180. numpy/_core/tests/test_indexing.py +1692 -0
  181. numpy/_core/tests/test_item_selection.py +167 -0
  182. numpy/_core/tests/test_limited_api.py +102 -0
  183. numpy/_core/tests/test_longdouble.py +370 -0
  184. numpy/_core/tests/test_mem_overlap.py +933 -0
  185. numpy/_core/tests/test_mem_policy.py +453 -0
  186. numpy/_core/tests/test_memmap.py +248 -0
  187. numpy/_core/tests/test_multiarray.py +11008 -0
  188. numpy/_core/tests/test_multiprocessing.py +55 -0
  189. numpy/_core/tests/test_multithreading.py +377 -0
  190. numpy/_core/tests/test_nditer.py +3533 -0
  191. numpy/_core/tests/test_nep50_promotions.py +287 -0
  192. numpy/_core/tests/test_numeric.py +4295 -0
  193. numpy/_core/tests/test_numerictypes.py +650 -0
  194. numpy/_core/tests/test_overrides.py +800 -0
  195. numpy/_core/tests/test_print.py +202 -0
  196. numpy/_core/tests/test_protocols.py +46 -0
  197. numpy/_core/tests/test_records.py +544 -0
  198. numpy/_core/tests/test_regression.py +2677 -0
  199. numpy/_core/tests/test_scalar_ctors.py +203 -0
  200. numpy/_core/tests/test_scalar_methods.py +328 -0
  201. numpy/_core/tests/test_scalarbuffer.py +153 -0
  202. numpy/_core/tests/test_scalarinherit.py +105 -0
  203. numpy/_core/tests/test_scalarmath.py +1168 -0
  204. numpy/_core/tests/test_scalarprint.py +403 -0
  205. numpy/_core/tests/test_shape_base.py +904 -0
  206. numpy/_core/tests/test_simd.py +1345 -0
  207. numpy/_core/tests/test_simd_module.py +105 -0
  208. numpy/_core/tests/test_stringdtype.py +1855 -0
  209. numpy/_core/tests/test_strings.py +1523 -0
  210. numpy/_core/tests/test_ufunc.py +3405 -0
  211. numpy/_core/tests/test_umath.py +4962 -0
  212. numpy/_core/tests/test_umath_accuracy.py +132 -0
  213. numpy/_core/tests/test_umath_complex.py +631 -0
  214. numpy/_core/tests/test_unicode.py +369 -0
  215. numpy/_core/umath.py +60 -0
  216. numpy/_core/umath.pyi +232 -0
  217. numpy/_distributor_init.py +15 -0
  218. numpy/_distributor_init.pyi +1 -0
  219. numpy/_expired_attrs_2_0.py +78 -0
  220. numpy/_expired_attrs_2_0.pyi +61 -0
  221. numpy/_globals.py +121 -0
  222. numpy/_globals.pyi +17 -0
  223. numpy/_pyinstaller/__init__.py +0 -0
  224. numpy/_pyinstaller/__init__.pyi +0 -0
  225. numpy/_pyinstaller/hook-numpy.py +36 -0
  226. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  227. numpy/_pyinstaller/tests/__init__.py +16 -0
  228. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  229. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  230. numpy/_pytesttester.py +201 -0
  231. numpy/_pytesttester.pyi +18 -0
  232. numpy/_typing/__init__.py +173 -0
  233. numpy/_typing/_add_docstring.py +153 -0
  234. numpy/_typing/_array_like.py +106 -0
  235. numpy/_typing/_char_codes.py +213 -0
  236. numpy/_typing/_dtype_like.py +114 -0
  237. numpy/_typing/_extended_precision.py +15 -0
  238. numpy/_typing/_nbit.py +19 -0
  239. numpy/_typing/_nbit_base.py +94 -0
  240. numpy/_typing/_nbit_base.pyi +39 -0
  241. numpy/_typing/_nested_sequence.py +79 -0
  242. numpy/_typing/_scalars.py +20 -0
  243. numpy/_typing/_shape.py +8 -0
  244. numpy/_typing/_ufunc.py +7 -0
  245. numpy/_typing/_ufunc.pyi +975 -0
  246. numpy/_utils/__init__.py +95 -0
  247. numpy/_utils/__init__.pyi +28 -0
  248. numpy/_utils/_convertions.py +18 -0
  249. numpy/_utils/_convertions.pyi +4 -0
  250. numpy/_utils/_inspect.py +192 -0
  251. numpy/_utils/_inspect.pyi +70 -0
  252. numpy/_utils/_pep440.py +486 -0
  253. numpy/_utils/_pep440.pyi +118 -0
  254. numpy/char/__init__.py +2 -0
  255. numpy/char/__init__.pyi +111 -0
  256. numpy/conftest.py +248 -0
  257. numpy/core/__init__.py +33 -0
  258. numpy/core/__init__.pyi +0 -0
  259. numpy/core/_dtype.py +10 -0
  260. numpy/core/_dtype.pyi +0 -0
  261. numpy/core/_dtype_ctypes.py +10 -0
  262. numpy/core/_dtype_ctypes.pyi +0 -0
  263. numpy/core/_internal.py +27 -0
  264. numpy/core/_multiarray_umath.py +57 -0
  265. numpy/core/_utils.py +21 -0
  266. numpy/core/arrayprint.py +10 -0
  267. numpy/core/defchararray.py +10 -0
  268. numpy/core/einsumfunc.py +10 -0
  269. numpy/core/fromnumeric.py +10 -0
  270. numpy/core/function_base.py +10 -0
  271. numpy/core/getlimits.py +10 -0
  272. numpy/core/multiarray.py +25 -0
  273. numpy/core/numeric.py +12 -0
  274. numpy/core/numerictypes.py +10 -0
  275. numpy/core/overrides.py +10 -0
  276. numpy/core/overrides.pyi +7 -0
  277. numpy/core/records.py +10 -0
  278. numpy/core/shape_base.py +10 -0
  279. numpy/core/umath.py +10 -0
  280. numpy/ctypeslib/__init__.py +13 -0
  281. numpy/ctypeslib/__init__.pyi +15 -0
  282. numpy/ctypeslib/_ctypeslib.py +603 -0
  283. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  284. numpy/doc/ufuncs.py +138 -0
  285. numpy/dtypes.py +41 -0
  286. numpy/dtypes.pyi +630 -0
  287. numpy/exceptions.py +246 -0
  288. numpy/exceptions.pyi +27 -0
  289. numpy/f2py/__init__.py +86 -0
  290. numpy/f2py/__init__.pyi +5 -0
  291. numpy/f2py/__main__.py +5 -0
  292. numpy/f2py/__version__.py +1 -0
  293. numpy/f2py/__version__.pyi +1 -0
  294. numpy/f2py/_backends/__init__.py +9 -0
  295. numpy/f2py/_backends/__init__.pyi +5 -0
  296. numpy/f2py/_backends/_backend.py +44 -0
  297. numpy/f2py/_backends/_backend.pyi +46 -0
  298. numpy/f2py/_backends/_distutils.py +76 -0
  299. numpy/f2py/_backends/_distutils.pyi +13 -0
  300. numpy/f2py/_backends/_meson.py +244 -0
  301. numpy/f2py/_backends/_meson.pyi +62 -0
  302. numpy/f2py/_backends/meson.build.template +58 -0
  303. numpy/f2py/_isocbind.py +62 -0
  304. numpy/f2py/_isocbind.pyi +13 -0
  305. numpy/f2py/_src_pyf.py +247 -0
  306. numpy/f2py/_src_pyf.pyi +28 -0
  307. numpy/f2py/auxfuncs.py +1004 -0
  308. numpy/f2py/auxfuncs.pyi +262 -0
  309. numpy/f2py/capi_maps.py +811 -0
  310. numpy/f2py/capi_maps.pyi +33 -0
  311. numpy/f2py/cb_rules.py +665 -0
  312. numpy/f2py/cb_rules.pyi +17 -0
  313. numpy/f2py/cfuncs.py +1563 -0
  314. numpy/f2py/cfuncs.pyi +31 -0
  315. numpy/f2py/common_rules.py +143 -0
  316. numpy/f2py/common_rules.pyi +9 -0
  317. numpy/f2py/crackfortran.py +3725 -0
  318. numpy/f2py/crackfortran.pyi +266 -0
  319. numpy/f2py/diagnose.py +149 -0
  320. numpy/f2py/diagnose.pyi +1 -0
  321. numpy/f2py/f2py2e.py +788 -0
  322. numpy/f2py/f2py2e.pyi +74 -0
  323. numpy/f2py/f90mod_rules.py +269 -0
  324. numpy/f2py/f90mod_rules.pyi +16 -0
  325. numpy/f2py/func2subr.py +329 -0
  326. numpy/f2py/func2subr.pyi +7 -0
  327. numpy/f2py/rules.py +1629 -0
  328. numpy/f2py/rules.pyi +41 -0
  329. numpy/f2py/setup.cfg +3 -0
  330. numpy/f2py/src/fortranobject.c +1436 -0
  331. numpy/f2py/src/fortranobject.h +173 -0
  332. numpy/f2py/symbolic.py +1518 -0
  333. numpy/f2py/symbolic.pyi +219 -0
  334. numpy/f2py/tests/__init__.py +16 -0
  335. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  336. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  337. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  338. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  339. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  340. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  341. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  342. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  343. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  344. numpy/f2py/tests/src/callback/foo.f +62 -0
  345. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  346. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  347. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  348. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  349. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  350. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  351. numpy/f2py/tests/src/cli/hi77.f +3 -0
  352. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  353. numpy/f2py/tests/src/common/block.f +11 -0
  354. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  355. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  356. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  357. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  358. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  359. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  360. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  361. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  362. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  363. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  364. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  365. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  366. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  367. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  368. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  369. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  370. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  371. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  372. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  373. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  374. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  375. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  376. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  377. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  378. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  379. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  380. numpy/f2py/tests/src/mixed/foo.f +5 -0
  381. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  382. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  383. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  384. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  385. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  386. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  387. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  388. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  389. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  390. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  391. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  392. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  393. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  394. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  395. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  396. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  397. numpy/f2py/tests/src/regression/AB.inc +1 -0
  398. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  399. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  400. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  401. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  402. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  403. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  404. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  405. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  406. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  407. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  408. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  409. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  410. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  411. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  412. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  413. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  414. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  415. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  416. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  417. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  418. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  419. numpy/f2py/tests/src/routines/subrout.f +4 -0
  420. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  421. numpy/f2py/tests/src/size/foo.f90 +44 -0
  422. numpy/f2py/tests/src/string/char.f90 +29 -0
  423. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  424. numpy/f2py/tests/src/string/gh24008.f +8 -0
  425. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  426. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  427. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  428. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  429. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  430. numpy/f2py/tests/src/string/string.f +12 -0
  431. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  432. numpy/f2py/tests/test_abstract_interface.py +26 -0
  433. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  434. numpy/f2py/tests/test_assumed_shape.py +50 -0
  435. numpy/f2py/tests/test_block_docstring.py +20 -0
  436. numpy/f2py/tests/test_callback.py +263 -0
  437. numpy/f2py/tests/test_character.py +641 -0
  438. numpy/f2py/tests/test_common.py +23 -0
  439. numpy/f2py/tests/test_crackfortran.py +421 -0
  440. numpy/f2py/tests/test_data.py +71 -0
  441. numpy/f2py/tests/test_docs.py +66 -0
  442. numpy/f2py/tests/test_f2cmap.py +17 -0
  443. numpy/f2py/tests/test_f2py2e.py +983 -0
  444. numpy/f2py/tests/test_isoc.py +56 -0
  445. numpy/f2py/tests/test_kind.py +52 -0
  446. numpy/f2py/tests/test_mixed.py +35 -0
  447. numpy/f2py/tests/test_modules.py +83 -0
  448. numpy/f2py/tests/test_parameter.py +129 -0
  449. numpy/f2py/tests/test_pyf_src.py +43 -0
  450. numpy/f2py/tests/test_quoted_character.py +18 -0
  451. numpy/f2py/tests/test_regression.py +187 -0
  452. numpy/f2py/tests/test_return_character.py +48 -0
  453. numpy/f2py/tests/test_return_complex.py +67 -0
  454. numpy/f2py/tests/test_return_integer.py +55 -0
  455. numpy/f2py/tests/test_return_logical.py +65 -0
  456. numpy/f2py/tests/test_return_real.py +109 -0
  457. numpy/f2py/tests/test_routines.py +29 -0
  458. numpy/f2py/tests/test_semicolon_split.py +75 -0
  459. numpy/f2py/tests/test_size.py +45 -0
  460. numpy/f2py/tests/test_string.py +100 -0
  461. numpy/f2py/tests/test_symbolic.py +500 -0
  462. numpy/f2py/tests/test_value_attrspec.py +15 -0
  463. numpy/f2py/tests/util.py +442 -0
  464. numpy/f2py/use_rules.py +99 -0
  465. numpy/f2py/use_rules.pyi +9 -0
  466. numpy/fft/__init__.py +213 -0
  467. numpy/fft/__init__.pyi +38 -0
  468. numpy/fft/_helper.py +235 -0
  469. numpy/fft/_helper.pyi +44 -0
  470. numpy/fft/_pocketfft.py +1693 -0
  471. numpy/fft/_pocketfft.pyi +137 -0
  472. numpy/fft/_pocketfft_umath.cp314t-win_arm64.lib +0 -0
  473. numpy/fft/_pocketfft_umath.cp314t-win_arm64.pyd +0 -0
  474. numpy/fft/tests/__init__.py +0 -0
  475. numpy/fft/tests/test_helper.py +167 -0
  476. numpy/fft/tests/test_pocketfft.py +589 -0
  477. numpy/lib/__init__.py +97 -0
  478. numpy/lib/__init__.pyi +52 -0
  479. numpy/lib/_array_utils_impl.py +62 -0
  480. numpy/lib/_array_utils_impl.pyi +10 -0
  481. numpy/lib/_arraypad_impl.py +926 -0
  482. numpy/lib/_arraypad_impl.pyi +88 -0
  483. numpy/lib/_arraysetops_impl.py +1158 -0
  484. numpy/lib/_arraysetops_impl.pyi +462 -0
  485. numpy/lib/_arrayterator_impl.py +224 -0
  486. numpy/lib/_arrayterator_impl.pyi +45 -0
  487. numpy/lib/_datasource.py +700 -0
  488. numpy/lib/_datasource.pyi +30 -0
  489. numpy/lib/_format_impl.py +1036 -0
  490. numpy/lib/_format_impl.pyi +56 -0
  491. numpy/lib/_function_base_impl.py +5760 -0
  492. numpy/lib/_function_base_impl.pyi +2324 -0
  493. numpy/lib/_histograms_impl.py +1085 -0
  494. numpy/lib/_histograms_impl.pyi +40 -0
  495. numpy/lib/_index_tricks_impl.py +1048 -0
  496. numpy/lib/_index_tricks_impl.pyi +267 -0
  497. numpy/lib/_iotools.py +900 -0
  498. numpy/lib/_iotools.pyi +116 -0
  499. numpy/lib/_nanfunctions_impl.py +2006 -0
  500. numpy/lib/_nanfunctions_impl.pyi +48 -0
  501. numpy/lib/_npyio_impl.py +2583 -0
  502. numpy/lib/_npyio_impl.pyi +299 -0
  503. numpy/lib/_polynomial_impl.py +1465 -0
  504. numpy/lib/_polynomial_impl.pyi +338 -0
  505. numpy/lib/_scimath_impl.py +642 -0
  506. numpy/lib/_scimath_impl.pyi +93 -0
  507. numpy/lib/_shape_base_impl.py +1289 -0
  508. numpy/lib/_shape_base_impl.pyi +236 -0
  509. numpy/lib/_stride_tricks_impl.py +582 -0
  510. numpy/lib/_stride_tricks_impl.pyi +73 -0
  511. numpy/lib/_twodim_base_impl.py +1201 -0
  512. numpy/lib/_twodim_base_impl.pyi +408 -0
  513. numpy/lib/_type_check_impl.py +710 -0
  514. numpy/lib/_type_check_impl.pyi +348 -0
  515. numpy/lib/_ufunclike_impl.py +199 -0
  516. numpy/lib/_ufunclike_impl.pyi +60 -0
  517. numpy/lib/_user_array_impl.py +310 -0
  518. numpy/lib/_user_array_impl.pyi +226 -0
  519. numpy/lib/_utils_impl.py +784 -0
  520. numpy/lib/_utils_impl.pyi +22 -0
  521. numpy/lib/_version.py +153 -0
  522. numpy/lib/_version.pyi +17 -0
  523. numpy/lib/array_utils.py +7 -0
  524. numpy/lib/array_utils.pyi +6 -0
  525. numpy/lib/format.py +24 -0
  526. numpy/lib/format.pyi +24 -0
  527. numpy/lib/introspect.py +94 -0
  528. numpy/lib/introspect.pyi +3 -0
  529. numpy/lib/mixins.py +180 -0
  530. numpy/lib/mixins.pyi +78 -0
  531. numpy/lib/npyio.py +1 -0
  532. numpy/lib/npyio.pyi +5 -0
  533. numpy/lib/recfunctions.py +1681 -0
  534. numpy/lib/recfunctions.pyi +444 -0
  535. numpy/lib/scimath.py +13 -0
  536. numpy/lib/scimath.pyi +12 -0
  537. numpy/lib/stride_tricks.py +1 -0
  538. numpy/lib/stride_tricks.pyi +4 -0
  539. numpy/lib/tests/__init__.py +0 -0
  540. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  541. numpy/lib/tests/data/py2-objarr.npy +0 -0
  542. numpy/lib/tests/data/py2-objarr.npz +0 -0
  543. numpy/lib/tests/data/py3-objarr.npy +0 -0
  544. numpy/lib/tests/data/py3-objarr.npz +0 -0
  545. numpy/lib/tests/data/python3.npy +0 -0
  546. numpy/lib/tests/data/win64python2.npy +0 -0
  547. numpy/lib/tests/test__datasource.py +328 -0
  548. numpy/lib/tests/test__iotools.py +358 -0
  549. numpy/lib/tests/test__version.py +64 -0
  550. numpy/lib/tests/test_array_utils.py +32 -0
  551. numpy/lib/tests/test_arraypad.py +1427 -0
  552. numpy/lib/tests/test_arraysetops.py +1302 -0
  553. numpy/lib/tests/test_arrayterator.py +45 -0
  554. numpy/lib/tests/test_format.py +1054 -0
  555. numpy/lib/tests/test_function_base.py +4750 -0
  556. numpy/lib/tests/test_histograms.py +855 -0
  557. numpy/lib/tests/test_index_tricks.py +693 -0
  558. numpy/lib/tests/test_io.py +2857 -0
  559. numpy/lib/tests/test_loadtxt.py +1099 -0
  560. numpy/lib/tests/test_mixins.py +215 -0
  561. numpy/lib/tests/test_nanfunctions.py +1438 -0
  562. numpy/lib/tests/test_packbits.py +376 -0
  563. numpy/lib/tests/test_polynomial.py +325 -0
  564. numpy/lib/tests/test_recfunctions.py +1042 -0
  565. numpy/lib/tests/test_regression.py +231 -0
  566. numpy/lib/tests/test_shape_base.py +813 -0
  567. numpy/lib/tests/test_stride_tricks.py +655 -0
  568. numpy/lib/tests/test_twodim_base.py +559 -0
  569. numpy/lib/tests/test_type_check.py +473 -0
  570. numpy/lib/tests/test_ufunclike.py +97 -0
  571. numpy/lib/tests/test_utils.py +80 -0
  572. numpy/lib/user_array.py +1 -0
  573. numpy/lib/user_array.pyi +1 -0
  574. numpy/linalg/__init__.py +95 -0
  575. numpy/linalg/__init__.pyi +71 -0
  576. numpy/linalg/_linalg.py +3657 -0
  577. numpy/linalg/_linalg.pyi +548 -0
  578. numpy/linalg/_umath_linalg.cp314t-win_arm64.lib +0 -0
  579. numpy/linalg/_umath_linalg.cp314t-win_arm64.pyd +0 -0
  580. numpy/linalg/_umath_linalg.pyi +60 -0
  581. numpy/linalg/lapack_lite.cp314t-win_arm64.lib +0 -0
  582. numpy/linalg/lapack_lite.cp314t-win_arm64.pyd +0 -0
  583. numpy/linalg/lapack_lite.pyi +143 -0
  584. numpy/linalg/tests/__init__.py +0 -0
  585. numpy/linalg/tests/test_deprecations.py +21 -0
  586. numpy/linalg/tests/test_linalg.py +2442 -0
  587. numpy/linalg/tests/test_regression.py +182 -0
  588. numpy/ma/API_CHANGES.txt +135 -0
  589. numpy/ma/LICENSE +24 -0
  590. numpy/ma/README.rst +236 -0
  591. numpy/ma/__init__.py +53 -0
  592. numpy/ma/__init__.pyi +458 -0
  593. numpy/ma/core.py +8929 -0
  594. numpy/ma/core.pyi +3720 -0
  595. numpy/ma/extras.py +2266 -0
  596. numpy/ma/extras.pyi +297 -0
  597. numpy/ma/mrecords.py +762 -0
  598. numpy/ma/mrecords.pyi +96 -0
  599. numpy/ma/tests/__init__.py +0 -0
  600. numpy/ma/tests/test_arrayobject.py +40 -0
  601. numpy/ma/tests/test_core.py +6008 -0
  602. numpy/ma/tests/test_deprecations.py +65 -0
  603. numpy/ma/tests/test_extras.py +1945 -0
  604. numpy/ma/tests/test_mrecords.py +495 -0
  605. numpy/ma/tests/test_old_ma.py +939 -0
  606. numpy/ma/tests/test_regression.py +83 -0
  607. numpy/ma/tests/test_subclassing.py +469 -0
  608. numpy/ma/testutils.py +294 -0
  609. numpy/ma/testutils.pyi +69 -0
  610. numpy/matlib.py +380 -0
  611. numpy/matlib.pyi +580 -0
  612. numpy/matrixlib/__init__.py +12 -0
  613. numpy/matrixlib/__init__.pyi +3 -0
  614. numpy/matrixlib/defmatrix.py +1119 -0
  615. numpy/matrixlib/defmatrix.pyi +218 -0
  616. numpy/matrixlib/tests/__init__.py +0 -0
  617. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  618. numpy/matrixlib/tests/test_interaction.py +360 -0
  619. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  620. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  621. numpy/matrixlib/tests/test_multiarray.py +17 -0
  622. numpy/matrixlib/tests/test_numeric.py +18 -0
  623. numpy/matrixlib/tests/test_regression.py +31 -0
  624. numpy/polynomial/__init__.py +187 -0
  625. numpy/polynomial/__init__.pyi +31 -0
  626. numpy/polynomial/_polybase.py +1191 -0
  627. numpy/polynomial/_polybase.pyi +262 -0
  628. numpy/polynomial/_polytypes.pyi +501 -0
  629. numpy/polynomial/chebyshev.py +2001 -0
  630. numpy/polynomial/chebyshev.pyi +180 -0
  631. numpy/polynomial/hermite.py +1738 -0
  632. numpy/polynomial/hermite.pyi +106 -0
  633. numpy/polynomial/hermite_e.py +1640 -0
  634. numpy/polynomial/hermite_e.pyi +106 -0
  635. numpy/polynomial/laguerre.py +1673 -0
  636. numpy/polynomial/laguerre.pyi +100 -0
  637. numpy/polynomial/legendre.py +1603 -0
  638. numpy/polynomial/legendre.pyi +100 -0
  639. numpy/polynomial/polynomial.py +1625 -0
  640. numpy/polynomial/polynomial.pyi +109 -0
  641. numpy/polynomial/polyutils.py +759 -0
  642. numpy/polynomial/polyutils.pyi +307 -0
  643. numpy/polynomial/tests/__init__.py +0 -0
  644. numpy/polynomial/tests/test_chebyshev.py +618 -0
  645. numpy/polynomial/tests/test_classes.py +613 -0
  646. numpy/polynomial/tests/test_hermite.py +553 -0
  647. numpy/polynomial/tests/test_hermite_e.py +554 -0
  648. numpy/polynomial/tests/test_laguerre.py +535 -0
  649. numpy/polynomial/tests/test_legendre.py +566 -0
  650. numpy/polynomial/tests/test_polynomial.py +691 -0
  651. numpy/polynomial/tests/test_polyutils.py +123 -0
  652. numpy/polynomial/tests/test_printing.py +557 -0
  653. numpy/polynomial/tests/test_symbol.py +217 -0
  654. numpy/py.typed +0 -0
  655. numpy/random/LICENSE.md +71 -0
  656. numpy/random/__init__.pxd +14 -0
  657. numpy/random/__init__.py +213 -0
  658. numpy/random/__init__.pyi +124 -0
  659. numpy/random/_bounded_integers.cp314t-win_arm64.lib +0 -0
  660. numpy/random/_bounded_integers.cp314t-win_arm64.pyd +0 -0
  661. numpy/random/_bounded_integers.pxd +38 -0
  662. numpy/random/_bounded_integers.pyi +1 -0
  663. numpy/random/_common.cp314t-win_arm64.lib +0 -0
  664. numpy/random/_common.cp314t-win_arm64.pyd +0 -0
  665. numpy/random/_common.pxd +110 -0
  666. numpy/random/_common.pyi +16 -0
  667. numpy/random/_examples/cffi/extending.py +44 -0
  668. numpy/random/_examples/cffi/parse.py +53 -0
  669. numpy/random/_examples/cython/extending.pyx +77 -0
  670. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  671. numpy/random/_examples/cython/meson.build +53 -0
  672. numpy/random/_examples/numba/extending.py +86 -0
  673. numpy/random/_examples/numba/extending_distributions.py +67 -0
  674. numpy/random/_generator.cp314t-win_arm64.lib +0 -0
  675. numpy/random/_generator.cp314t-win_arm64.pyd +0 -0
  676. numpy/random/_generator.pyi +862 -0
  677. numpy/random/_mt19937.cp314t-win_arm64.lib +0 -0
  678. numpy/random/_mt19937.cp314t-win_arm64.pyd +0 -0
  679. numpy/random/_mt19937.pyi +27 -0
  680. numpy/random/_pcg64.cp314t-win_arm64.lib +0 -0
  681. numpy/random/_pcg64.cp314t-win_arm64.pyd +0 -0
  682. numpy/random/_pcg64.pyi +41 -0
  683. numpy/random/_philox.cp314t-win_arm64.lib +0 -0
  684. numpy/random/_philox.cp314t-win_arm64.pyd +0 -0
  685. numpy/random/_philox.pyi +36 -0
  686. numpy/random/_pickle.py +88 -0
  687. numpy/random/_pickle.pyi +43 -0
  688. numpy/random/_sfc64.cp314t-win_arm64.lib +0 -0
  689. numpy/random/_sfc64.cp314t-win_arm64.pyd +0 -0
  690. numpy/random/_sfc64.pyi +25 -0
  691. numpy/random/bit_generator.cp314t-win_arm64.lib +0 -0
  692. numpy/random/bit_generator.cp314t-win_arm64.pyd +0 -0
  693. numpy/random/bit_generator.pxd +40 -0
  694. numpy/random/bit_generator.pyi +123 -0
  695. numpy/random/c_distributions.pxd +119 -0
  696. numpy/random/lib/npyrandom.lib +0 -0
  697. numpy/random/mtrand.cp314t-win_arm64.lib +0 -0
  698. numpy/random/mtrand.cp314t-win_arm64.pyd +0 -0
  699. numpy/random/mtrand.pyi +759 -0
  700. numpy/random/tests/__init__.py +0 -0
  701. numpy/random/tests/data/__init__.py +0 -0
  702. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  703. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  704. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  705. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  706. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  707. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  708. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  709. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  710. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  711. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  712. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  713. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  714. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  715. numpy/random/tests/test_direct.py +595 -0
  716. numpy/random/tests/test_extending.py +131 -0
  717. numpy/random/tests/test_generator_mt19937.py +2825 -0
  718. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  719. numpy/random/tests/test_random.py +1724 -0
  720. numpy/random/tests/test_randomstate.py +2099 -0
  721. numpy/random/tests/test_randomstate_regression.py +213 -0
  722. numpy/random/tests/test_regression.py +175 -0
  723. numpy/random/tests/test_seed_sequence.py +79 -0
  724. numpy/random/tests/test_smoke.py +882 -0
  725. numpy/rec/__init__.py +2 -0
  726. numpy/rec/__init__.pyi +23 -0
  727. numpy/strings/__init__.py +2 -0
  728. numpy/strings/__init__.pyi +97 -0
  729. numpy/testing/__init__.py +22 -0
  730. numpy/testing/__init__.pyi +107 -0
  731. numpy/testing/_private/__init__.py +0 -0
  732. numpy/testing/_private/__init__.pyi +0 -0
  733. numpy/testing/_private/extbuild.py +250 -0
  734. numpy/testing/_private/extbuild.pyi +25 -0
  735. numpy/testing/_private/utils.py +2830 -0
  736. numpy/testing/_private/utils.pyi +505 -0
  737. numpy/testing/overrides.py +84 -0
  738. numpy/testing/overrides.pyi +10 -0
  739. numpy/testing/print_coercion_tables.py +207 -0
  740. numpy/testing/print_coercion_tables.pyi +26 -0
  741. numpy/testing/tests/__init__.py +0 -0
  742. numpy/testing/tests/test_utils.py +2123 -0
  743. numpy/tests/__init__.py +0 -0
  744. numpy/tests/test__all__.py +10 -0
  745. numpy/tests/test_configtool.py +51 -0
  746. numpy/tests/test_ctypeslib.py +383 -0
  747. numpy/tests/test_lazyloading.py +42 -0
  748. numpy/tests/test_matlib.py +59 -0
  749. numpy/tests/test_numpy_config.py +47 -0
  750. numpy/tests/test_numpy_version.py +54 -0
  751. numpy/tests/test_public_api.py +807 -0
  752. numpy/tests/test_reloading.py +76 -0
  753. numpy/tests/test_scripts.py +48 -0
  754. numpy/tests/test_warnings.py +79 -0
  755. numpy/typing/__init__.py +233 -0
  756. numpy/typing/__init__.pyi +3 -0
  757. numpy/typing/mypy_plugin.py +200 -0
  758. numpy/typing/tests/__init__.py +0 -0
  759. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  760. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  761. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  762. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  763. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  764. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  765. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  766. numpy/typing/tests/data/fail/char.pyi +63 -0
  767. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  768. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  769. numpy/typing/tests/data/fail/constants.pyi +3 -0
  770. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  771. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  772. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  773. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  774. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  775. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  776. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  777. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  778. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  779. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  780. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  781. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  782. numpy/typing/tests/data/fail/ma.pyi +155 -0
  783. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  784. numpy/typing/tests/data/fail/modules.pyi +17 -0
  785. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  786. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  787. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  788. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  789. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  790. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  791. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  792. numpy/typing/tests/data/fail/random.pyi +62 -0
  793. numpy/typing/tests/data/fail/rec.pyi +17 -0
  794. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  795. numpy/typing/tests/data/fail/shape.pyi +7 -0
  796. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  797. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  798. numpy/typing/tests/data/fail/strings.pyi +52 -0
  799. numpy/typing/tests/data/fail/testing.pyi +28 -0
  800. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  801. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  802. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  803. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  804. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  805. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  806. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  807. numpy/typing/tests/data/mypy.ini +8 -0
  808. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  809. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  810. numpy/typing/tests/data/pass/array_like.py +43 -0
  811. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  812. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  813. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  814. numpy/typing/tests/data/pass/comparisons.py +316 -0
  815. numpy/typing/tests/data/pass/dtype.py +57 -0
  816. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  817. numpy/typing/tests/data/pass/flatiter.py +26 -0
  818. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  819. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  820. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  821. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  822. numpy/typing/tests/data/pass/lib_version.py +18 -0
  823. numpy/typing/tests/data/pass/literal.py +52 -0
  824. numpy/typing/tests/data/pass/ma.py +199 -0
  825. numpy/typing/tests/data/pass/mod.py +149 -0
  826. numpy/typing/tests/data/pass/modules.py +45 -0
  827. numpy/typing/tests/data/pass/multiarray.py +77 -0
  828. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  829. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  830. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  831. numpy/typing/tests/data/pass/nditer.py +4 -0
  832. numpy/typing/tests/data/pass/numeric.py +90 -0
  833. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  834. numpy/typing/tests/data/pass/random.py +1498 -0
  835. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  836. numpy/typing/tests/data/pass/scalars.py +249 -0
  837. numpy/typing/tests/data/pass/shape.py +19 -0
  838. numpy/typing/tests/data/pass/simple.py +170 -0
  839. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  840. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  841. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  842. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  843. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  844. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  845. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  846. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  847. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  848. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  849. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  850. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  851. numpy/typing/tests/data/reveal/char.pyi +225 -0
  852. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  853. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  854. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  855. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  856. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  857. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  858. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  859. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  860. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  861. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  862. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  863. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  864. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  865. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  866. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  867. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  868. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  869. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  870. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  871. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  872. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  873. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  874. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  875. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  876. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  877. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  878. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  879. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  880. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  881. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  882. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  883. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  884. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  885. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  886. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  887. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  888. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  889. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  890. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  891. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  892. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  893. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  894. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  895. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  896. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  897. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  898. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  899. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  900. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  901. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  902. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  903. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  904. numpy/typing/tests/test_isfile.py +38 -0
  905. numpy/typing/tests/test_runtime.py +110 -0
  906. numpy/typing/tests/test_typing.py +205 -0
  907. numpy/version.py +11 -0
  908. numpy/version.pyi +9 -0
  909. numpy-2.4.1.dist-info/DELVEWHEEL +2 -0
  910. numpy-2.4.1.dist-info/METADATA +139 -0
  911. numpy-2.4.1.dist-info/RECORD +932 -0
  912. numpy-2.4.1.dist-info/WHEEL +4 -0
  913. numpy-2.4.1.dist-info/entry_points.txt +13 -0
  914. numpy-2.4.1.dist-info/licenses/LICENSE.txt +914 -0
  915. numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  916. numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  917. numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  918. numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  919. numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  920. numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  921. numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  922. numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  923. numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
  924. numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  925. numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  926. numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  927. numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  928. numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  929. numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  930. numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
  931. numpy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
  932. numpy.libs/scipy_openblas-7b69cbfd2599e6035f1310f2a72d59a6.dll +0 -0
numpy/_core/records.py ADDED
@@ -0,0 +1,1088 @@
1
+ """
2
+ This module contains a set of functions for record arrays.
3
+ """
4
+ import os
5
+ import warnings
6
+ from collections import Counter
7
+ from contextlib import nullcontext
8
+
9
+ from numpy._utils import set_module
10
+
11
+ from . import numeric as sb, numerictypes as nt
12
+ from .arrayprint import _get_legacy_print_mode
13
+
14
+ # All of the functions allow formats to be a dtype
15
+ __all__ = [
16
+ 'record', 'recarray', 'format_parser', 'fromarrays', 'fromrecords',
17
+ 'fromstring', 'fromfile', 'array', 'find_duplicate',
18
+ ]
19
+
20
+
21
+ ndarray = sb.ndarray
22
+
23
+ _byteorderconv = {'b': '>',
24
+ 'l': '<',
25
+ 'n': '=',
26
+ 'B': '>',
27
+ 'L': '<',
28
+ 'N': '=',
29
+ 'S': 's',
30
+ 's': 's',
31
+ '>': '>',
32
+ '<': '<',
33
+ '=': '=',
34
+ '|': '|',
35
+ 'I': '|',
36
+ 'i': '|'}
37
+
38
+ # formats regular expression
39
+ # allows multidimensional spec with a tuple syntax in front
40
+ # of the letter code '(2,3)f4' and ' ( 2 , 3 ) f4 '
41
+ # are equally allowed
42
+
43
+ numfmt = nt.sctypeDict
44
+
45
+
46
+ @set_module('numpy.rec')
47
+ def find_duplicate(list):
48
+ """Find duplication in a list, return a list of duplicated elements"""
49
+ return [
50
+ item
51
+ for item, counts in Counter(list).items()
52
+ if counts > 1
53
+ ]
54
+
55
+
56
+ @set_module('numpy.rec')
57
+ class format_parser:
58
+ """
59
+ Class to convert formats, names, titles description to a dtype.
60
+
61
+ After constructing the format_parser object, the dtype attribute is
62
+ the converted data-type:
63
+ ``dtype = format_parser(formats, names, titles).dtype``
64
+
65
+ Attributes
66
+ ----------
67
+ dtype : dtype
68
+ The converted data-type.
69
+
70
+ Parameters
71
+ ----------
72
+ formats : str or list of str
73
+ The format description, either specified as a string with
74
+ comma-separated format descriptions in the form ``'f8, i4, S5'``, or
75
+ a list of format description strings in the form
76
+ ``['f8', 'i4', 'S5']``.
77
+ names : str or list/tuple of str
78
+ The field names, either specified as a comma-separated string in the
79
+ form ``'col1, col2, col3'``, or as a list or tuple of strings in the
80
+ form ``['col1', 'col2', 'col3']``.
81
+ An empty list can be used, in that case default field names
82
+ ('f0', 'f1', ...) are used.
83
+ titles : sequence
84
+ Sequence of title strings. An empty list can be used to leave titles
85
+ out.
86
+ aligned : bool, optional
87
+ If True, align the fields by padding as the C-compiler would.
88
+ Default is False.
89
+ byteorder : str, optional
90
+ If specified, all the fields will be changed to the
91
+ provided byte-order. Otherwise, the default byte-order is
92
+ used. For all available string specifiers, see `dtype.newbyteorder`.
93
+
94
+ See Also
95
+ --------
96
+ numpy.dtype, numpy.typename
97
+
98
+ Examples
99
+ --------
100
+ >>> import numpy as np
101
+ >>> np.rec.format_parser(['<f8', '<i4'], ['col1', 'col2'],
102
+ ... ['T1', 'T2']).dtype
103
+ dtype([(('T1', 'col1'), '<f8'), (('T2', 'col2'), '<i4')])
104
+
105
+ `names` and/or `titles` can be empty lists. If `titles` is an empty list,
106
+ titles will simply not appear. If `names` is empty, default field names
107
+ will be used.
108
+
109
+ >>> np.rec.format_parser(['f8', 'i4', 'a5'], ['col1', 'col2', 'col3'],
110
+ ... []).dtype
111
+ dtype([('col1', '<f8'), ('col2', '<i4'), ('col3', '<S5')])
112
+ >>> np.rec.format_parser(['<f8', '<i4', '<a5'], [], []).dtype
113
+ dtype([('f0', '<f8'), ('f1', '<i4'), ('f2', 'S5')])
114
+
115
+ """
116
+
117
+ def __init__(self, formats, names, titles, aligned=False, byteorder=None):
118
+ self._parseFormats(formats, aligned)
119
+ self._setfieldnames(names, titles)
120
+ self._createdtype(byteorder)
121
+
122
+ def _parseFormats(self, formats, aligned=False):
123
+ """ Parse the field formats """
124
+
125
+ if formats is None:
126
+ raise ValueError("Need formats argument")
127
+ if isinstance(formats, list):
128
+ dtype = sb.dtype(
129
+ [
130
+ (f'f{i}', format_)
131
+ for i, format_ in enumerate(formats)
132
+ ],
133
+ aligned,
134
+ )
135
+ else:
136
+ dtype = sb.dtype(formats, aligned)
137
+ fields = dtype.fields
138
+ if fields is None:
139
+ dtype = sb.dtype([('f1', dtype)], aligned)
140
+ fields = dtype.fields
141
+ keys = dtype.names
142
+ self._f_formats = [fields[key][0] for key in keys]
143
+ self._offsets = [fields[key][1] for key in keys]
144
+ self._nfields = len(keys)
145
+
146
+ def _setfieldnames(self, names, titles):
147
+ """convert input field names into a list and assign to the _names
148
+ attribute """
149
+
150
+ if names:
151
+ if type(names) in [list, tuple]:
152
+ pass
153
+ elif isinstance(names, str):
154
+ names = names.split(',')
155
+ else:
156
+ raise NameError(f"illegal input names {repr(names)}")
157
+
158
+ self._names = [n.strip() for n in names[:self._nfields]]
159
+ else:
160
+ self._names = []
161
+
162
+ # if the names are not specified, they will be assigned as
163
+ # "f0, f1, f2,..."
164
+ # if not enough names are specified, they will be assigned as "f[n],
165
+ # f[n+1],..." etc. where n is the number of specified names..."
166
+ self._names += ['f%d' % i for i in range(len(self._names),
167
+ self._nfields)]
168
+ # check for redundant names
169
+ _dup = find_duplicate(self._names)
170
+ if _dup:
171
+ raise ValueError(f"Duplicate field names: {_dup}")
172
+
173
+ if titles:
174
+ self._titles = [n.strip() for n in titles[:self._nfields]]
175
+ else:
176
+ self._titles = []
177
+ titles = []
178
+
179
+ if self._nfields > len(titles):
180
+ self._titles += [None] * (self._nfields - len(titles))
181
+
182
+ def _createdtype(self, byteorder):
183
+ dtype = sb.dtype({
184
+ 'names': self._names,
185
+ 'formats': self._f_formats,
186
+ 'offsets': self._offsets,
187
+ 'titles': self._titles,
188
+ })
189
+ if byteorder is not None:
190
+ byteorder = _byteorderconv[byteorder[0]]
191
+ dtype = dtype.newbyteorder(byteorder)
192
+
193
+ self.dtype = dtype
194
+
195
+
196
+ class record(nt.void):
197
+ """A data-type scalar that allows field access as attribute lookup.
198
+ """
199
+
200
+ # manually set name and module so that this class's type shows up
201
+ # as numpy.record when printed
202
+ __name__ = 'record'
203
+ __module__ = 'numpy'
204
+
205
+ def __repr__(self):
206
+ if _get_legacy_print_mode() <= 113:
207
+ return self.__str__()
208
+ return super().__repr__()
209
+
210
+ def __str__(self):
211
+ if _get_legacy_print_mode() <= 113:
212
+ return str(self.item())
213
+ return super().__str__()
214
+
215
+ def __getattribute__(self, attr):
216
+ if attr in ('setfield', 'getfield', 'dtype'):
217
+ return nt.void.__getattribute__(self, attr)
218
+ try:
219
+ return nt.void.__getattribute__(self, attr)
220
+ except AttributeError:
221
+ pass
222
+ fielddict = nt.void.__getattribute__(self, 'dtype').fields
223
+ res = fielddict.get(attr, None)
224
+ if res:
225
+ obj = self.getfield(*res[:2])
226
+ # if it has fields return a record,
227
+ # otherwise return the object
228
+ try:
229
+ dt = obj.dtype
230
+ except AttributeError:
231
+ # happens if field is Object type
232
+ return obj
233
+ if dt.names is not None:
234
+ return obj.view((self.__class__, obj.dtype))
235
+ return obj
236
+ else:
237
+ raise AttributeError(f"'record' object has no attribute '{attr}'")
238
+
239
+ def __setattr__(self, attr, val):
240
+ if attr in ('setfield', 'getfield', 'dtype'):
241
+ raise AttributeError(f"Cannot set '{attr}' attribute")
242
+ fielddict = nt.void.__getattribute__(self, 'dtype').fields
243
+ res = fielddict.get(attr, None)
244
+ if res:
245
+ return self.setfield(val, *res[:2])
246
+ elif getattr(self, attr, None):
247
+ return nt.void.__setattr__(self, attr, val)
248
+ else:
249
+ raise AttributeError(f"'record' object has no attribute '{attr}'")
250
+
251
+ def __getitem__(self, indx):
252
+ obj = nt.void.__getitem__(self, indx)
253
+
254
+ # copy behavior of record.__getattribute__,
255
+ if isinstance(obj, nt.void) and obj.dtype.names is not None:
256
+ return obj.view((self.__class__, obj.dtype))
257
+ else:
258
+ # return a single element
259
+ return obj
260
+
261
+ def pprint(self):
262
+ """Pretty-print all fields."""
263
+ # pretty-print all fields
264
+ names = self.dtype.names
265
+ maxlen = max(len(name) for name in names)
266
+ fmt = '%% %ds: %%s' % maxlen
267
+ rows = [fmt % (name, getattr(self, name)) for name in names]
268
+ return "\n".join(rows)
269
+
270
+ # The recarray is almost identical to a standard array (which supports
271
+ # named fields already) The biggest difference is that it can use
272
+ # attribute-lookup to find the fields and it is constructed using
273
+ # a record.
274
+
275
+ # If byteorder is given it forces a particular byteorder on all
276
+ # the fields (and any subfields)
277
+
278
+
279
+ @set_module("numpy.rec")
280
+ class recarray(ndarray):
281
+ """Construct an ndarray that allows field access using attributes.
282
+
283
+ Arrays may have a data-types containing fields, analogous
284
+ to columns in a spread sheet. An example is ``[(x, int), (y, float)]``,
285
+ where each entry in the array is a pair of ``(int, float)``. Normally,
286
+ these attributes are accessed using dictionary lookups such as ``arr['x']``
287
+ and ``arr['y']``. Record arrays allow the fields to be accessed as members
288
+ of the array, using ``arr.x`` and ``arr.y``.
289
+
290
+ Parameters
291
+ ----------
292
+ shape : tuple
293
+ Shape of output array.
294
+ dtype : data-type, optional
295
+ The desired data-type. By default, the data-type is determined
296
+ from `formats`, `names`, `titles`, `aligned` and `byteorder`.
297
+ formats : list of data-types, optional
298
+ A list containing the data-types for the different columns, e.g.
299
+ ``['i4', 'f8', 'i4']``. `formats` does *not* support the new
300
+ convention of using types directly, i.e. ``(int, float, int)``.
301
+ Note that `formats` must be a list, not a tuple.
302
+ Given that `formats` is somewhat limited, we recommend specifying
303
+ `dtype` instead.
304
+ names : tuple of str, optional
305
+ The name of each column, e.g. ``('x', 'y', 'z')``.
306
+ buf : buffer, optional
307
+ By default, a new array is created of the given shape and data-type.
308
+ If `buf` is specified and is an object exposing the buffer interface,
309
+ the array will use the memory from the existing buffer. In this case,
310
+ the `offset` and `strides` keywords are available.
311
+
312
+ Other Parameters
313
+ ----------------
314
+ titles : tuple of str, optional
315
+ Aliases for column names. For example, if `names` were
316
+ ``('x', 'y', 'z')`` and `titles` is
317
+ ``('x_coordinate', 'y_coordinate', 'z_coordinate')``, then
318
+ ``arr['x']`` is equivalent to both ``arr.x`` and ``arr.x_coordinate``.
319
+ byteorder : {'<', '>', '='}, optional
320
+ Byte-order for all fields.
321
+ aligned : bool, optional
322
+ Align the fields in memory as the C-compiler would.
323
+ strides : tuple of ints, optional
324
+ Buffer (`buf`) is interpreted according to these strides (strides
325
+ define how many bytes each array element, row, column, etc.
326
+ occupy in memory).
327
+ offset : int, optional
328
+ Start reading buffer (`buf`) from this offset onwards.
329
+ order : {'C', 'F'}, optional
330
+ Row-major (C-style) or column-major (Fortran-style) order.
331
+
332
+ Returns
333
+ -------
334
+ rec : recarray
335
+ Empty array of the given shape and type.
336
+
337
+ See Also
338
+ --------
339
+ numpy.rec.fromrecords : Construct a record array from data.
340
+ numpy.record : fundamental data-type for `recarray`.
341
+ numpy.rec.format_parser : determine data-type from formats, names, titles.
342
+
343
+ Notes
344
+ -----
345
+ This constructor can be compared to ``empty``: it creates a new record
346
+ array but does not fill it with data. To create a record array from data,
347
+ use one of the following methods:
348
+
349
+ 1. Create a standard ndarray and convert it to a record array,
350
+ using ``arr.view(np.recarray)``
351
+ 2. Use the `buf` keyword.
352
+ 3. Use `np.rec.fromrecords`.
353
+
354
+ Examples
355
+ --------
356
+ Create an array with two fields, ``x`` and ``y``:
357
+
358
+ >>> import numpy as np
359
+ >>> x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')])
360
+ >>> x
361
+ array([(1., 2), (3., 4)], dtype=[('x', '<f8'), ('y', '<i8')])
362
+
363
+ >>> x['x']
364
+ array([1., 3.])
365
+
366
+ View the array as a record array:
367
+
368
+ >>> x = x.view(np.recarray)
369
+
370
+ >>> x.x
371
+ array([1., 3.])
372
+
373
+ >>> x.y
374
+ array([2, 4])
375
+
376
+ Create a new, empty record array:
377
+
378
+ >>> np.recarray((2,),
379
+ ... dtype=[('x', int), ('y', float), ('z', int)]) #doctest: +SKIP
380
+ rec.array([(-1073741821, 1.2249118382103472e-301, 24547520),
381
+ (3471280, 1.2134086255804012e-316, 0)],
382
+ dtype=[('x', '<i4'), ('y', '<f8'), ('z', '<i4')])
383
+
384
+ """
385
+
386
+ def __new__(subtype, shape, dtype=None, buf=None, offset=0, strides=None,
387
+ formats=None, names=None, titles=None,
388
+ byteorder=None, aligned=False, order='C'):
389
+
390
+ if dtype is not None:
391
+ descr = sb.dtype(dtype)
392
+ else:
393
+ descr = format_parser(
394
+ formats, names, titles, aligned, byteorder
395
+ ).dtype
396
+
397
+ if buf is None:
398
+ self = ndarray.__new__(
399
+ subtype, shape, (record, descr), order=order
400
+ )
401
+ else:
402
+ self = ndarray.__new__(
403
+ subtype, shape, (record, descr), buffer=buf,
404
+ offset=offset, strides=strides, order=order
405
+ )
406
+ return self
407
+
408
+ def __array_finalize__(self, obj):
409
+ if self.dtype.type is not record and self.dtype.names is not None:
410
+ # if self.dtype is not np.record, invoke __setattr__ which will
411
+ # convert it to a record if it is a void dtype.
412
+ self.dtype = self.dtype
413
+
414
+ def __getattribute__(self, attr):
415
+ # See if ndarray has this attr, and return it if so. (note that this
416
+ # means a field with the same name as an ndarray attr cannot be
417
+ # accessed by attribute).
418
+ try:
419
+ return object.__getattribute__(self, attr)
420
+ except AttributeError: # attr must be a fieldname
421
+ pass
422
+
423
+ # look for a field with this name
424
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields
425
+ try:
426
+ res = fielddict[attr][:2]
427
+ except (TypeError, KeyError) as e:
428
+ raise AttributeError(f"recarray has no attribute {attr}") from e
429
+ obj = self.getfield(*res)
430
+
431
+ # At this point obj will always be a recarray, since (see
432
+ # PyArray_GetField) the type of obj is inherited. Next, if obj.dtype is
433
+ # non-structured, convert it to an ndarray. Then if obj is structured
434
+ # with void type convert it to the same dtype.type (eg to preserve
435
+ # numpy.record type if present), since nested structured fields do not
436
+ # inherit type. Don't do this for non-void structures though.
437
+ if obj.dtype.names is not None:
438
+ if issubclass(obj.dtype.type, nt.void):
439
+ return obj.view(dtype=(self.dtype.type, obj.dtype))
440
+ return obj
441
+ else:
442
+ return obj.view(ndarray)
443
+
444
+ # Save the dictionary.
445
+ # If the attr is a field name and not in the saved dictionary
446
+ # Undo any "setting" of the attribute and do a setfield
447
+ # Thus, you can't create attributes on-the-fly that are field names.
448
+ def __setattr__(self, attr, val):
449
+
450
+ # Automatically convert (void) structured types to records
451
+ # (but not non-void structures, subarrays, or non-structured voids)
452
+ if (
453
+ attr == 'dtype' and
454
+ issubclass(val.type, nt.void) and
455
+ val.names is not None
456
+ ):
457
+ val = sb.dtype((record, val))
458
+
459
+ newattr = attr not in self.__dict__
460
+ try:
461
+ ret = object.__setattr__(self, attr, val)
462
+ except Exception:
463
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
464
+ if attr not in fielddict:
465
+ raise
466
+ else:
467
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
468
+ if attr not in fielddict:
469
+ return ret
470
+ if newattr:
471
+ # We just added this one or this setattr worked on an
472
+ # internal attribute.
473
+ try:
474
+ object.__delattr__(self, attr)
475
+ except Exception:
476
+ return ret
477
+ try:
478
+ res = fielddict[attr][:2]
479
+ except (TypeError, KeyError) as e:
480
+ raise AttributeError(
481
+ f"record array has no attribute {attr}"
482
+ ) from e
483
+ return self.setfield(val, *res)
484
+
485
+ def __getitem__(self, indx):
486
+ obj = super().__getitem__(indx)
487
+
488
+ # copy behavior of getattr, except that here
489
+ # we might also be returning a single element
490
+ if isinstance(obj, ndarray):
491
+ if obj.dtype.names is not None:
492
+ obj = obj.view(type(self))
493
+ if issubclass(obj.dtype.type, nt.void):
494
+ return obj.view(dtype=(self.dtype.type, obj.dtype))
495
+ return obj
496
+ else:
497
+ return obj.view(type=ndarray)
498
+ else:
499
+ # return a single element
500
+ return obj
501
+
502
+ def __repr__(self):
503
+
504
+ repr_dtype = self.dtype
505
+ if (
506
+ self.dtype.type is record or
507
+ not issubclass(self.dtype.type, nt.void)
508
+ ):
509
+ # If this is a full record array (has numpy.record dtype),
510
+ # or if it has a scalar (non-void) dtype with no records,
511
+ # represent it using the rec.array function. Since rec.array
512
+ # converts dtype to a numpy.record for us, convert back
513
+ # to non-record before printing
514
+ if repr_dtype.type is record:
515
+ repr_dtype = sb.dtype((nt.void, repr_dtype))
516
+ prefix = "rec.array("
517
+ fmt = 'rec.array(%s,%sdtype=%s)'
518
+ else:
519
+ # otherwise represent it using np.array plus a view
520
+ # This should only happen if the user is playing
521
+ # strange games with dtypes.
522
+ prefix = "array("
523
+ fmt = 'array(%s,%sdtype=%s).view(numpy.recarray)'
524
+
525
+ # get data/shape string. logic taken from numeric.array_repr
526
+ if self.size > 0 or self.shape == (0,):
527
+ lst = sb.array2string(
528
+ self, separator=', ', prefix=prefix, suffix=',')
529
+ else:
530
+ # show zero-length shape unless it is (0,)
531
+ lst = f"[], shape={repr(self.shape)}"
532
+
533
+ lf = '\n' + ' ' * len(prefix)
534
+ if _get_legacy_print_mode() <= 113:
535
+ lf = ' ' + lf # trailing space
536
+ return fmt % (lst, lf, repr_dtype)
537
+
538
+ def field(self, attr, val=None):
539
+ if isinstance(attr, int):
540
+ names = ndarray.__getattribute__(self, 'dtype').names
541
+ attr = names[attr]
542
+
543
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields
544
+
545
+ res = fielddict[attr][:2]
546
+
547
+ if val is None:
548
+ obj = self.getfield(*res)
549
+ if obj.dtype.names is not None:
550
+ return obj
551
+ return obj.view(ndarray)
552
+ else:
553
+ return self.setfield(val, *res)
554
+
555
+
556
+ def _deprecate_shape_0_as_None(shape):
557
+ if shape == 0:
558
+ warnings.warn(
559
+ "Passing `shape=0` to have the shape be inferred is deprecated, "
560
+ "and in future will be equivalent to `shape=(0,)`. To infer "
561
+ "the shape and suppress this warning, pass `shape=None` instead.",
562
+ FutureWarning, stacklevel=3)
563
+ return None
564
+ else:
565
+ return shape
566
+
567
+
568
+ @set_module("numpy.rec")
569
+ def fromarrays(arrayList, dtype=None, shape=None, formats=None,
570
+ names=None, titles=None, aligned=False, byteorder=None):
571
+ """Create a record array from a (flat) list of arrays
572
+
573
+ Parameters
574
+ ----------
575
+ arrayList : list or tuple
576
+ List of array-like objects (such as lists, tuples,
577
+ and ndarrays).
578
+ dtype : data-type, optional
579
+ valid dtype for all arrays
580
+ shape : int or tuple of ints, optional
581
+ Shape of the resulting array. If not provided, inferred from
582
+ ``arrayList[0]``.
583
+ formats, names, titles, aligned, byteorder :
584
+ If `dtype` is ``None``, these arguments are passed to
585
+ `numpy.rec.format_parser` to construct a dtype. See that function for
586
+ detailed documentation.
587
+
588
+ Returns
589
+ -------
590
+ np.recarray
591
+ Record array consisting of given arrayList columns.
592
+
593
+ Examples
594
+ --------
595
+ >>> x1=np.array([1,2,3,4])
596
+ >>> x2=np.array(['a','dd','xyz','12'])
597
+ >>> x3=np.array([1.1,2,3,4])
598
+ >>> r = np.rec.fromarrays([x1,x2,x3],names='a,b,c')
599
+ >>> print(r[1])
600
+ (2, 'dd', 2.0) # may vary
601
+ >>> x1[1]=34
602
+ >>> r.a
603
+ array([1, 2, 3, 4])
604
+
605
+ >>> x1 = np.array([1, 2, 3, 4])
606
+ >>> x2 = np.array(['a', 'dd', 'xyz', '12'])
607
+ >>> x3 = np.array([1.1, 2, 3,4])
608
+ >>> r = np.rec.fromarrays(
609
+ ... [x1, x2, x3],
610
+ ... dtype=np.dtype([('a', np.int32), ('b', 'S3'), ('c', np.float32)]))
611
+ >>> r
612
+ rec.array([(1, b'a', 1.1), (2, b'dd', 2. ), (3, b'xyz', 3. ),
613
+ (4, b'12', 4. )],
614
+ dtype=[('a', '<i4'), ('b', 'S3'), ('c', '<f4')])
615
+ """
616
+
617
+ arrayList = [sb.asarray(x) for x in arrayList]
618
+
619
+ # NumPy 1.19.0, 2020-01-01
620
+ shape = _deprecate_shape_0_as_None(shape)
621
+
622
+ if shape is None:
623
+ shape = arrayList[0].shape
624
+ elif isinstance(shape, int):
625
+ shape = (shape,)
626
+
627
+ if formats is None and dtype is None:
628
+ # go through each object in the list to see if it is an ndarray
629
+ # and determine the formats.
630
+ formats = [obj.dtype for obj in arrayList]
631
+
632
+ if dtype is not None:
633
+ descr = sb.dtype(dtype)
634
+ else:
635
+ descr = format_parser(formats, names, titles, aligned, byteorder).dtype
636
+ _names = descr.names
637
+
638
+ # Determine shape from data-type.
639
+ if len(descr) != len(arrayList):
640
+ raise ValueError("mismatch between the number of fields "
641
+ "and the number of arrays")
642
+
643
+ d0 = descr[0].shape
644
+ nn = len(d0)
645
+ if nn > 0:
646
+ shape = shape[:-nn]
647
+
648
+ _array = recarray(shape, descr)
649
+
650
+ # populate the record array (makes a copy)
651
+ for k, obj in enumerate(arrayList):
652
+ nn = descr[k].ndim
653
+ testshape = obj.shape[:obj.ndim - nn]
654
+ name = _names[k]
655
+ if testshape != shape:
656
+ raise ValueError(f'array-shape mismatch in array {k} ("{name}")')
657
+
658
+ _array[name] = obj
659
+
660
+ return _array
661
+
662
+
663
+ @set_module("numpy.rec")
664
+ def fromrecords(recList, dtype=None, shape=None, formats=None, names=None,
665
+ titles=None, aligned=False, byteorder=None):
666
+ """Create a recarray from a list of records in text form.
667
+
668
+ Parameters
669
+ ----------
670
+ recList : sequence
671
+ data in the same field may be heterogeneous - they will be promoted
672
+ to the highest data type.
673
+ dtype : data-type, optional
674
+ valid dtype for all arrays
675
+ shape : int or tuple of ints, optional
676
+ shape of each array.
677
+ formats, names, titles, aligned, byteorder :
678
+ If `dtype` is ``None``, these arguments are passed to
679
+ `numpy.format_parser` to construct a dtype. See that function for
680
+ detailed documentation.
681
+
682
+ If both `formats` and `dtype` are None, then this will auto-detect
683
+ formats. Use list of tuples rather than list of lists for faster
684
+ processing.
685
+
686
+ Returns
687
+ -------
688
+ np.recarray
689
+ record array consisting of given recList rows.
690
+
691
+ Examples
692
+ --------
693
+ >>> r=np.rec.fromrecords([(456,'dbe',1.2),(2,'de',1.3)],
694
+ ... names='col1,col2,col3')
695
+ >>> print(r[0])
696
+ (456, 'dbe', 1.2)
697
+ >>> r.col1
698
+ array([456, 2])
699
+ >>> r.col2
700
+ array(['dbe', 'de'], dtype='<U3')
701
+ >>> import pickle
702
+ >>> pickle.loads(pickle.dumps(r))
703
+ rec.array([(456, 'dbe', 1.2), ( 2, 'de', 1.3)],
704
+ dtype=[('col1', '<i8'), ('col2', '<U3'), ('col3', '<f8')])
705
+ """
706
+
707
+ if formats is None and dtype is None: # slower
708
+ obj = sb.array(recList, dtype=object)
709
+ arrlist = [
710
+ sb.array(obj[..., i].tolist()) for i in range(obj.shape[-1])
711
+ ]
712
+ return fromarrays(arrlist, formats=formats, shape=shape, names=names,
713
+ titles=titles, aligned=aligned, byteorder=byteorder)
714
+
715
+ if dtype is not None:
716
+ descr = sb.dtype((record, dtype))
717
+ else:
718
+ descr = format_parser(
719
+ formats, names, titles, aligned, byteorder
720
+ ).dtype
721
+
722
+ try:
723
+ retval = sb.array(recList, dtype=descr)
724
+ except (TypeError, ValueError):
725
+ # NumPy 1.19.0, 2020-01-01
726
+ shape = _deprecate_shape_0_as_None(shape)
727
+ if shape is None:
728
+ shape = len(recList)
729
+ if isinstance(shape, int):
730
+ shape = (shape,)
731
+ if len(shape) > 1:
732
+ raise ValueError("Can only deal with 1-d array.")
733
+ _array = recarray(shape, descr)
734
+ for k in range(_array.size):
735
+ _array[k] = tuple(recList[k])
736
+ # list of lists instead of list of tuples ?
737
+ # 2018-02-07, 1.14.1
738
+ warnings.warn(
739
+ "fromrecords expected a list of tuples, may have received a list "
740
+ "of lists instead. In the future that will raise an error",
741
+ FutureWarning, stacklevel=2)
742
+ return _array
743
+ else:
744
+ if shape is not None and retval.shape != shape:
745
+ retval.shape = shape
746
+
747
+ res = retval.view(recarray)
748
+
749
+ return res
750
+
751
+
752
+ @set_module("numpy.rec")
753
+ def fromstring(datastring, dtype=None, shape=None, offset=0, formats=None,
754
+ names=None, titles=None, aligned=False, byteorder=None):
755
+ r"""Create a record array from binary data
756
+
757
+ Note that despite the name of this function it does not accept `str`
758
+ instances.
759
+
760
+ Parameters
761
+ ----------
762
+ datastring : bytes-like
763
+ Buffer of binary data
764
+ dtype : data-type, optional
765
+ Valid dtype for all arrays
766
+ shape : int or tuple of ints, optional
767
+ Shape of each array.
768
+ offset : int, optional
769
+ Position in the buffer to start reading from.
770
+ formats, names, titles, aligned, byteorder :
771
+ If `dtype` is ``None``, these arguments are passed to
772
+ `numpy.format_parser` to construct a dtype. See that function for
773
+ detailed documentation.
774
+
775
+
776
+ Returns
777
+ -------
778
+ np.recarray
779
+ Record array view into the data in datastring. This will be readonly
780
+ if `datastring` is readonly.
781
+
782
+ See Also
783
+ --------
784
+ numpy.frombuffer
785
+
786
+ Examples
787
+ --------
788
+ >>> a = b'\x01\x02\x03abc'
789
+ >>> np.rec.fromstring(a, dtype='u1,u1,u1,S3')
790
+ rec.array([(1, 2, 3, b'abc')],
791
+ dtype=[('f0', 'u1'), ('f1', 'u1'), ('f2', 'u1'), ('f3', 'S3')])
792
+
793
+ >>> grades_dtype = [('Name', (np.str_, 10)), ('Marks', np.float64),
794
+ ... ('GradeLevel', np.int32)]
795
+ >>> grades_array = np.array([('Sam', 33.3, 3), ('Mike', 44.4, 5),
796
+ ... ('Aadi', 66.6, 6)], dtype=grades_dtype)
797
+ >>> np.rec.fromstring(grades_array.tobytes(), dtype=grades_dtype)
798
+ rec.array([('Sam', 33.3, 3), ('Mike', 44.4, 5), ('Aadi', 66.6, 6)],
799
+ dtype=[('Name', '<U10'), ('Marks', '<f8'), ('GradeLevel', '<i4')])
800
+
801
+ >>> s = '\x01\x02\x03abc'
802
+ >>> np.rec.fromstring(s, dtype='u1,u1,u1,S3')
803
+ Traceback (most recent call last):
804
+ ...
805
+ TypeError: a bytes-like object is required, not 'str'
806
+ """
807
+
808
+ if dtype is None and formats is None:
809
+ raise TypeError("fromstring() needs a 'dtype' or 'formats' argument")
810
+
811
+ if dtype is not None:
812
+ descr = sb.dtype(dtype)
813
+ else:
814
+ descr = format_parser(formats, names, titles, aligned, byteorder).dtype
815
+
816
+ itemsize = descr.itemsize
817
+
818
+ # NumPy 1.19.0, 2020-01-01
819
+ shape = _deprecate_shape_0_as_None(shape)
820
+
821
+ if shape in (None, -1):
822
+ shape = (len(datastring) - offset) // itemsize
823
+
824
+ _array = recarray(shape, descr, buf=datastring, offset=offset)
825
+ return _array
826
+
827
+ def get_remaining_size(fd):
828
+ pos = fd.tell()
829
+ try:
830
+ fd.seek(0, 2)
831
+ return fd.tell() - pos
832
+ finally:
833
+ fd.seek(pos, 0)
834
+
835
+
836
+ @set_module("numpy.rec")
837
+ def fromfile(fd, dtype=None, shape=None, offset=0, formats=None,
838
+ names=None, titles=None, aligned=False, byteorder=None):
839
+ """Create an array from binary file data
840
+
841
+ Parameters
842
+ ----------
843
+ fd : str or file type
844
+ If file is a string or a path-like object then that file is opened,
845
+ else it is assumed to be a file object. The file object must
846
+ support random access (i.e. it must have tell and seek methods).
847
+ dtype : data-type, optional
848
+ valid dtype for all arrays
849
+ shape : int or tuple of ints, optional
850
+ shape of each array.
851
+ offset : int, optional
852
+ Position in the file to start reading from.
853
+ formats, names, titles, aligned, byteorder :
854
+ If `dtype` is ``None``, these arguments are passed to
855
+ `numpy.format_parser` to construct a dtype. See that function for
856
+ detailed documentation
857
+
858
+ Returns
859
+ -------
860
+ np.recarray
861
+ record array consisting of data enclosed in file.
862
+
863
+ Examples
864
+ --------
865
+ >>> from tempfile import TemporaryFile
866
+ >>> a = np.empty(10,dtype='f8,i4,a5')
867
+ >>> a[5] = (0.5,10,'abcde')
868
+ >>>
869
+ >>> fd=TemporaryFile()
870
+ >>> a = a.view(a.dtype.newbyteorder('<'))
871
+ >>> a.tofile(fd)
872
+ >>>
873
+ >>> _ = fd.seek(0)
874
+ >>> r=np.rec.fromfile(fd, formats='f8,i4,a5', shape=10,
875
+ ... byteorder='<')
876
+ >>> print(r[5])
877
+ (0.5, 10, b'abcde')
878
+ >>> r.shape
879
+ (10,)
880
+ """
881
+
882
+ if dtype is None and formats is None:
883
+ raise TypeError("fromfile() needs a 'dtype' or 'formats' argument")
884
+
885
+ # NumPy 1.19.0, 2020-01-01
886
+ shape = _deprecate_shape_0_as_None(shape)
887
+
888
+ if shape is None:
889
+ shape = (-1,)
890
+ elif isinstance(shape, int):
891
+ shape = (shape,)
892
+
893
+ if hasattr(fd, 'readinto'):
894
+ # GH issue 2504. fd supports io.RawIOBase or io.BufferedIOBase
895
+ # interface. Example of fd: gzip, BytesIO, BufferedReader
896
+ # file already opened
897
+ ctx = nullcontext(fd)
898
+ else:
899
+ # open file
900
+ ctx = open(os.fspath(fd), 'rb')
901
+
902
+ with ctx as fd:
903
+ if offset > 0:
904
+ fd.seek(offset, 1)
905
+ size = get_remaining_size(fd)
906
+
907
+ if dtype is not None:
908
+ descr = sb.dtype(dtype)
909
+ else:
910
+ descr = format_parser(
911
+ formats, names, titles, aligned, byteorder
912
+ ).dtype
913
+
914
+ itemsize = descr.itemsize
915
+
916
+ shapeprod = sb.array(shape).prod(dtype=nt.intp)
917
+ shapesize = shapeprod * itemsize
918
+ if shapesize < 0:
919
+ shape = list(shape)
920
+ shape[shape.index(-1)] = size // -shapesize
921
+ shape = tuple(shape)
922
+ shapeprod = sb.array(shape).prod(dtype=nt.intp)
923
+
924
+ nbytes = shapeprod * itemsize
925
+
926
+ if nbytes > size:
927
+ raise ValueError(
928
+ "Not enough bytes left in file for specified "
929
+ "shape and type."
930
+ )
931
+
932
+ # create the array
933
+ _array = recarray(shape, descr)
934
+ nbytesread = fd.readinto(_array.data)
935
+ if nbytesread != nbytes:
936
+ raise OSError("Didn't read as many bytes as expected")
937
+
938
+ return _array
939
+
940
+
941
+ @set_module("numpy.rec")
942
+ def array(obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
943
+ names=None, titles=None, aligned=False, byteorder=None, copy=True):
944
+ """
945
+ Construct a record array from a wide-variety of objects.
946
+
947
+ A general-purpose record array constructor that dispatches to the
948
+ appropriate `recarray` creation function based on the inputs (see Notes).
949
+
950
+ Parameters
951
+ ----------
952
+ obj : any
953
+ Input object. See Notes for details on how various input types are
954
+ treated.
955
+ dtype : data-type, optional
956
+ Valid dtype for array.
957
+ shape : int or tuple of ints, optional
958
+ Shape of each array.
959
+ offset : int, optional
960
+ Position in the file or buffer to start reading from.
961
+ strides : tuple of ints, optional
962
+ Buffer (`buf`) is interpreted according to these strides (strides
963
+ define how many bytes each array element, row, column, etc.
964
+ occupy in memory).
965
+ formats, names, titles, aligned, byteorder :
966
+ If `dtype` is ``None``, these arguments are passed to
967
+ `numpy.format_parser` to construct a dtype. See that function for
968
+ detailed documentation.
969
+ copy : bool, optional
970
+ Whether to copy the input object (True), or to use a reference instead.
971
+ This option only applies when the input is an ndarray or recarray.
972
+ Defaults to True.
973
+
974
+ Returns
975
+ -------
976
+ np.recarray
977
+ Record array created from the specified object.
978
+
979
+ Notes
980
+ -----
981
+ If `obj` is ``None``, then call the `~numpy.recarray` constructor. If
982
+ `obj` is a string, then call the `fromstring` constructor. If `obj` is a
983
+ list or a tuple, then if the first object is an `~numpy.ndarray`, call
984
+ `fromarrays`, otherwise call `fromrecords`. If `obj` is a
985
+ `~numpy.recarray`, then make a copy of the data in the recarray
986
+ (if ``copy=True``) and use the new formats, names, and titles. If `obj`
987
+ is a file, then call `fromfile`. Finally, if obj is an `ndarray`, then
988
+ return ``obj.view(recarray)``, making a copy of the data if ``copy=True``.
989
+
990
+ Examples
991
+ --------
992
+ >>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
993
+ >>> a
994
+ array([[1, 2, 3],
995
+ [4, 5, 6],
996
+ [7, 8, 9]])
997
+
998
+ >>> np.rec.array(a)
999
+ rec.array([[1, 2, 3],
1000
+ [4, 5, 6],
1001
+ [7, 8, 9]],
1002
+ dtype=int64)
1003
+
1004
+ >>> b = [(1, 1), (2, 4), (3, 9)]
1005
+ >>> c = np.rec.array(b, formats = ['i2', 'f2'], names = ('x', 'y'))
1006
+ >>> c
1007
+ rec.array([(1, 1.), (2, 4.), (3, 9.)],
1008
+ dtype=[('x', '<i2'), ('y', '<f2')])
1009
+
1010
+ >>> c.x
1011
+ array([1, 2, 3], dtype=int16)
1012
+
1013
+ >>> c.y
1014
+ array([1., 4., 9.], dtype=float16)
1015
+
1016
+ >>> r = np.rec.array(['abc','def'], names=['col1','col2'])
1017
+ >>> print(r.col1)
1018
+ abc
1019
+
1020
+ >>> r.col1
1021
+ array('abc', dtype='<U3')
1022
+
1023
+ >>> r.col2
1024
+ array('def', dtype='<U3')
1025
+ """
1026
+
1027
+ if ((isinstance(obj, (type(None), str)) or hasattr(obj, 'readinto')) and
1028
+ formats is None and dtype is None):
1029
+ raise ValueError("Must define formats (or dtype) if object is "
1030
+ "None, string, or an open file")
1031
+
1032
+ kwds = {}
1033
+ if dtype is not None:
1034
+ dtype = sb.dtype(dtype)
1035
+ elif formats is not None:
1036
+ dtype = format_parser(formats, names, titles,
1037
+ aligned, byteorder).dtype
1038
+ else:
1039
+ kwds = {'formats': formats,
1040
+ 'names': names,
1041
+ 'titles': titles,
1042
+ 'aligned': aligned,
1043
+ 'byteorder': byteorder
1044
+ }
1045
+
1046
+ if obj is None:
1047
+ if shape is None:
1048
+ raise ValueError("Must define a shape if obj is None")
1049
+ return recarray(shape, dtype, buf=obj, offset=offset, strides=strides)
1050
+
1051
+ elif isinstance(obj, bytes):
1052
+ return fromstring(obj, dtype, shape=shape, offset=offset, **kwds)
1053
+
1054
+ elif isinstance(obj, (list, tuple)):
1055
+ if isinstance(obj[0], (tuple, list)):
1056
+ return fromrecords(obj, dtype=dtype, shape=shape, **kwds)
1057
+ else:
1058
+ return fromarrays(obj, dtype=dtype, shape=shape, **kwds)
1059
+
1060
+ elif isinstance(obj, recarray):
1061
+ if dtype is not None and (obj.dtype != dtype):
1062
+ new = obj.view(dtype)
1063
+ else:
1064
+ new = obj
1065
+ if copy:
1066
+ new = new.copy()
1067
+ return new
1068
+
1069
+ elif hasattr(obj, 'readinto'):
1070
+ return fromfile(obj, dtype=dtype, shape=shape, offset=offset)
1071
+
1072
+ elif isinstance(obj, ndarray):
1073
+ if dtype is not None and (obj.dtype != dtype):
1074
+ new = obj.view(dtype)
1075
+ else:
1076
+ new = obj
1077
+ if copy:
1078
+ new = new.copy()
1079
+ return new.view(recarray)
1080
+
1081
+ else:
1082
+ interface = getattr(obj, "__array_interface__", None)
1083
+ if interface is None or not isinstance(interface, dict):
1084
+ raise ValueError("Unknown input type")
1085
+ obj = sb.array(obj)
1086
+ if dtype is not None and (obj.dtype != dtype):
1087
+ obj = obj.view(dtype)
1088
+ return obj.view(recarray)