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
numpy/_core/records.py ADDED
@@ -0,0 +1,1089 @@
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
12
+ from . import numerictypes as nt
13
+ from .arrayprint import _get_legacy_print_mode
14
+
15
+ # All of the functions allow formats to be a dtype
16
+ __all__ = [
17
+ 'record', 'recarray', 'format_parser', 'fromarrays', 'fromrecords',
18
+ 'fromstring', 'fromfile', 'array', 'find_duplicate',
19
+ ]
20
+
21
+
22
+ ndarray = sb.ndarray
23
+
24
+ _byteorderconv = {'b': '>',
25
+ 'l': '<',
26
+ 'n': '=',
27
+ 'B': '>',
28
+ 'L': '<',
29
+ 'N': '=',
30
+ 'S': 's',
31
+ 's': 's',
32
+ '>': '>',
33
+ '<': '<',
34
+ '=': '=',
35
+ '|': '|',
36
+ 'I': '|',
37
+ 'i': '|'}
38
+
39
+ # formats regular expression
40
+ # allows multidimensional spec with a tuple syntax in front
41
+ # of the letter code '(2,3)f4' and ' ( 2 , 3 ) f4 '
42
+ # are equally allowed
43
+
44
+ numfmt = nt.sctypeDict
45
+
46
+
47
+ @set_module('numpy.rec')
48
+ def find_duplicate(list):
49
+ """Find duplication in a list, return a list of duplicated elements"""
50
+ return [
51
+ item
52
+ for item, counts in Counter(list).items()
53
+ if counts > 1
54
+ ]
55
+
56
+
57
+ @set_module('numpy.rec')
58
+ class format_parser:
59
+ """
60
+ Class to convert formats, names, titles description to a dtype.
61
+
62
+ After constructing the format_parser object, the dtype attribute is
63
+ the converted data-type:
64
+ ``dtype = format_parser(formats, names, titles).dtype``
65
+
66
+ Attributes
67
+ ----------
68
+ dtype : dtype
69
+ The converted data-type.
70
+
71
+ Parameters
72
+ ----------
73
+ formats : str or list of str
74
+ The format description, either specified as a string with
75
+ comma-separated format descriptions in the form ``'f8, i4, S5'``, or
76
+ a list of format description strings in the form
77
+ ``['f8', 'i4', 'S5']``.
78
+ names : str or list/tuple of str
79
+ The field names, either specified as a comma-separated string in the
80
+ form ``'col1, col2, col3'``, or as a list or tuple of strings in the
81
+ form ``['col1', 'col2', 'col3']``.
82
+ An empty list can be used, in that case default field names
83
+ ('f0', 'f1', ...) are used.
84
+ titles : sequence
85
+ Sequence of title strings. An empty list can be used to leave titles
86
+ out.
87
+ aligned : bool, optional
88
+ If True, align the fields by padding as the C-compiler would.
89
+ Default is False.
90
+ byteorder : str, optional
91
+ If specified, all the fields will be changed to the
92
+ provided byte-order. Otherwise, the default byte-order is
93
+ used. For all available string specifiers, see `dtype.newbyteorder`.
94
+
95
+ See Also
96
+ --------
97
+ numpy.dtype, numpy.typename
98
+
99
+ Examples
100
+ --------
101
+ >>> import numpy as np
102
+ >>> np.rec.format_parser(['<f8', '<i4'], ['col1', 'col2'],
103
+ ... ['T1', 'T2']).dtype
104
+ dtype([(('T1', 'col1'), '<f8'), (('T2', 'col2'), '<i4')])
105
+
106
+ `names` and/or `titles` can be empty lists. If `titles` is an empty list,
107
+ titles will simply not appear. If `names` is empty, default field names
108
+ will be used.
109
+
110
+ >>> np.rec.format_parser(['f8', 'i4', 'a5'], ['col1', 'col2', 'col3'],
111
+ ... []).dtype
112
+ dtype([('col1', '<f8'), ('col2', '<i4'), ('col3', '<S5')])
113
+ >>> np.rec.format_parser(['<f8', '<i4', '<a5'], [], []).dtype
114
+ dtype([('f0', '<f8'), ('f1', '<i4'), ('f2', 'S5')])
115
+
116
+ """
117
+
118
+ def __init__(self, formats, names, titles, aligned=False, byteorder=None):
119
+ self._parseFormats(formats, aligned)
120
+ self._setfieldnames(names, titles)
121
+ self._createdtype(byteorder)
122
+
123
+ def _parseFormats(self, formats, aligned=False):
124
+ """ Parse the field formats """
125
+
126
+ if formats is None:
127
+ raise ValueError("Need formats argument")
128
+ if isinstance(formats, list):
129
+ dtype = sb.dtype(
130
+ [
131
+ (f'f{i}', format_)
132
+ for i, format_ in enumerate(formats)
133
+ ],
134
+ aligned,
135
+ )
136
+ else:
137
+ dtype = sb.dtype(formats, aligned)
138
+ fields = dtype.fields
139
+ if fields is None:
140
+ dtype = sb.dtype([('f1', dtype)], aligned)
141
+ fields = dtype.fields
142
+ keys = dtype.names
143
+ self._f_formats = [fields[key][0] for key in keys]
144
+ self._offsets = [fields[key][1] for key in keys]
145
+ self._nfields = len(keys)
146
+
147
+ def _setfieldnames(self, names, titles):
148
+ """convert input field names into a list and assign to the _names
149
+ attribute """
150
+
151
+ if names:
152
+ if type(names) in [list, tuple]:
153
+ pass
154
+ elif isinstance(names, str):
155
+ names = names.split(',')
156
+ else:
157
+ raise NameError(f"illegal input names {repr(names)}")
158
+
159
+ self._names = [n.strip() for n in names[:self._nfields]]
160
+ else:
161
+ self._names = []
162
+
163
+ # if the names are not specified, they will be assigned as
164
+ # "f0, f1, f2,..."
165
+ # if not enough names are specified, they will be assigned as "f[n],
166
+ # f[n+1],..." etc. where n is the number of specified names..."
167
+ self._names += ['f%d' % i for i in range(len(self._names),
168
+ self._nfields)]
169
+ # check for redundant names
170
+ _dup = find_duplicate(self._names)
171
+ if _dup:
172
+ raise ValueError(f"Duplicate field names: {_dup}")
173
+
174
+ if titles:
175
+ self._titles = [n.strip() for n in titles[:self._nfields]]
176
+ else:
177
+ self._titles = []
178
+ titles = []
179
+
180
+ if self._nfields > len(titles):
181
+ self._titles += [None] * (self._nfields - len(titles))
182
+
183
+ def _createdtype(self, byteorder):
184
+ dtype = sb.dtype({
185
+ 'names': self._names,
186
+ 'formats': self._f_formats,
187
+ 'offsets': self._offsets,
188
+ 'titles': self._titles,
189
+ })
190
+ if byteorder is not None:
191
+ byteorder = _byteorderconv[byteorder[0]]
192
+ dtype = dtype.newbyteorder(byteorder)
193
+
194
+ self.dtype = dtype
195
+
196
+
197
+ class record(nt.void):
198
+ """A data-type scalar that allows field access as attribute lookup.
199
+ """
200
+
201
+ # manually set name and module so that this class's type shows up
202
+ # as numpy.record when printed
203
+ __name__ = 'record'
204
+ __module__ = 'numpy'
205
+
206
+ def __repr__(self):
207
+ if _get_legacy_print_mode() <= 113:
208
+ return self.__str__()
209
+ return super().__repr__()
210
+
211
+ def __str__(self):
212
+ if _get_legacy_print_mode() <= 113:
213
+ return str(self.item())
214
+ return super().__str__()
215
+
216
+ def __getattribute__(self, attr):
217
+ if attr in ('setfield', 'getfield', 'dtype'):
218
+ return nt.void.__getattribute__(self, attr)
219
+ try:
220
+ return nt.void.__getattribute__(self, attr)
221
+ except AttributeError:
222
+ pass
223
+ fielddict = nt.void.__getattribute__(self, 'dtype').fields
224
+ res = fielddict.get(attr, None)
225
+ if res:
226
+ obj = self.getfield(*res[:2])
227
+ # if it has fields return a record,
228
+ # otherwise return the object
229
+ try:
230
+ dt = obj.dtype
231
+ except AttributeError:
232
+ # happens if field is Object type
233
+ return obj
234
+ if dt.names is not None:
235
+ return obj.view((self.__class__, obj.dtype))
236
+ return obj
237
+ else:
238
+ raise AttributeError(f"'record' object has no attribute '{attr}'")
239
+
240
+ def __setattr__(self, attr, val):
241
+ if attr in ('setfield', 'getfield', 'dtype'):
242
+ raise AttributeError(f"Cannot set '{attr}' attribute")
243
+ fielddict = nt.void.__getattribute__(self, 'dtype').fields
244
+ res = fielddict.get(attr, None)
245
+ if res:
246
+ return self.setfield(val, *res[:2])
247
+ elif getattr(self, attr, None):
248
+ return nt.void.__setattr__(self, attr, val)
249
+ else:
250
+ raise AttributeError(f"'record' object has no attribute '{attr}'")
251
+
252
+ def __getitem__(self, indx):
253
+ obj = nt.void.__getitem__(self, indx)
254
+
255
+ # copy behavior of record.__getattribute__,
256
+ if isinstance(obj, nt.void) and obj.dtype.names is not None:
257
+ return obj.view((self.__class__, obj.dtype))
258
+ else:
259
+ # return a single element
260
+ return obj
261
+
262
+ def pprint(self):
263
+ """Pretty-print all fields."""
264
+ # pretty-print all fields
265
+ names = self.dtype.names
266
+ maxlen = max(len(name) for name in names)
267
+ fmt = '%% %ds: %%s' % maxlen
268
+ rows = [fmt % (name, getattr(self, name)) for name in names]
269
+ return "\n".join(rows)
270
+
271
+ # The recarray is almost identical to a standard array (which supports
272
+ # named fields already) The biggest difference is that it can use
273
+ # attribute-lookup to find the fields and it is constructed using
274
+ # a record.
275
+
276
+ # If byteorder is given it forces a particular byteorder on all
277
+ # the fields (and any subfields)
278
+
279
+
280
+ @set_module("numpy.rec")
281
+ class recarray(ndarray):
282
+ """Construct an ndarray that allows field access using attributes.
283
+
284
+ Arrays may have a data-types containing fields, analogous
285
+ to columns in a spread sheet. An example is ``[(x, int), (y, float)]``,
286
+ where each entry in the array is a pair of ``(int, float)``. Normally,
287
+ these attributes are accessed using dictionary lookups such as ``arr['x']``
288
+ and ``arr['y']``. Record arrays allow the fields to be accessed as members
289
+ of the array, using ``arr.x`` and ``arr.y``.
290
+
291
+ Parameters
292
+ ----------
293
+ shape : tuple
294
+ Shape of output array.
295
+ dtype : data-type, optional
296
+ The desired data-type. By default, the data-type is determined
297
+ from `formats`, `names`, `titles`, `aligned` and `byteorder`.
298
+ formats : list of data-types, optional
299
+ A list containing the data-types for the different columns, e.g.
300
+ ``['i4', 'f8', 'i4']``. `formats` does *not* support the new
301
+ convention of using types directly, i.e. ``(int, float, int)``.
302
+ Note that `formats` must be a list, not a tuple.
303
+ Given that `formats` is somewhat limited, we recommend specifying
304
+ `dtype` instead.
305
+ names : tuple of str, optional
306
+ The name of each column, e.g. ``('x', 'y', 'z')``.
307
+ buf : buffer, optional
308
+ By default, a new array is created of the given shape and data-type.
309
+ If `buf` is specified and is an object exposing the buffer interface,
310
+ the array will use the memory from the existing buffer. In this case,
311
+ the `offset` and `strides` keywords are available.
312
+
313
+ Other Parameters
314
+ ----------------
315
+ titles : tuple of str, optional
316
+ Aliases for column names. For example, if `names` were
317
+ ``('x', 'y', 'z')`` and `titles` is
318
+ ``('x_coordinate', 'y_coordinate', 'z_coordinate')``, then
319
+ ``arr['x']`` is equivalent to both ``arr.x`` and ``arr.x_coordinate``.
320
+ byteorder : {'<', '>', '='}, optional
321
+ Byte-order for all fields.
322
+ aligned : bool, optional
323
+ Align the fields in memory as the C-compiler would.
324
+ strides : tuple of ints, optional
325
+ Buffer (`buf`) is interpreted according to these strides (strides
326
+ define how many bytes each array element, row, column, etc.
327
+ occupy in memory).
328
+ offset : int, optional
329
+ Start reading buffer (`buf`) from this offset onwards.
330
+ order : {'C', 'F'}, optional
331
+ Row-major (C-style) or column-major (Fortran-style) order.
332
+
333
+ Returns
334
+ -------
335
+ rec : recarray
336
+ Empty array of the given shape and type.
337
+
338
+ See Also
339
+ --------
340
+ numpy.rec.fromrecords : Construct a record array from data.
341
+ numpy.record : fundamental data-type for `recarray`.
342
+ numpy.rec.format_parser : determine data-type from formats, names, titles.
343
+
344
+ Notes
345
+ -----
346
+ This constructor can be compared to ``empty``: it creates a new record
347
+ array but does not fill it with data. To create a record array from data,
348
+ use one of the following methods:
349
+
350
+ 1. Create a standard ndarray and convert it to a record array,
351
+ using ``arr.view(np.recarray)``
352
+ 2. Use the `buf` keyword.
353
+ 3. Use `np.rec.fromrecords`.
354
+
355
+ Examples
356
+ --------
357
+ Create an array with two fields, ``x`` and ``y``:
358
+
359
+ >>> import numpy as np
360
+ >>> x = np.array([(1.0, 2), (3.0, 4)], dtype=[('x', '<f8'), ('y', '<i8')])
361
+ >>> x
362
+ array([(1., 2), (3., 4)], dtype=[('x', '<f8'), ('y', '<i8')])
363
+
364
+ >>> x['x']
365
+ array([1., 3.])
366
+
367
+ View the array as a record array:
368
+
369
+ >>> x = x.view(np.recarray)
370
+
371
+ >>> x.x
372
+ array([1., 3.])
373
+
374
+ >>> x.y
375
+ array([2, 4])
376
+
377
+ Create a new, empty record array:
378
+
379
+ >>> np.recarray((2,),
380
+ ... dtype=[('x', int), ('y', float), ('z', int)]) #doctest: +SKIP
381
+ rec.array([(-1073741821, 1.2249118382103472e-301, 24547520),
382
+ (3471280, 1.2134086255804012e-316, 0)],
383
+ dtype=[('x', '<i4'), ('y', '<f8'), ('z', '<i4')])
384
+
385
+ """
386
+
387
+ def __new__(subtype, shape, dtype=None, buf=None, offset=0, strides=None,
388
+ formats=None, names=None, titles=None,
389
+ byteorder=None, aligned=False, order='C'):
390
+
391
+ if dtype is not None:
392
+ descr = sb.dtype(dtype)
393
+ else:
394
+ descr = format_parser(
395
+ formats, names, titles, aligned, byteorder
396
+ ).dtype
397
+
398
+ if buf is None:
399
+ self = ndarray.__new__(
400
+ subtype, shape, (record, descr), order=order
401
+ )
402
+ else:
403
+ self = ndarray.__new__(
404
+ subtype, shape, (record, descr), buffer=buf,
405
+ offset=offset, strides=strides, order=order
406
+ )
407
+ return self
408
+
409
+ def __array_finalize__(self, obj):
410
+ if self.dtype.type is not record and self.dtype.names is not None:
411
+ # if self.dtype is not np.record, invoke __setattr__ which will
412
+ # convert it to a record if it is a void dtype.
413
+ self.dtype = self.dtype
414
+
415
+ def __getattribute__(self, attr):
416
+ # See if ndarray has this attr, and return it if so. (note that this
417
+ # means a field with the same name as an ndarray attr cannot be
418
+ # accessed by attribute).
419
+ try:
420
+ return object.__getattribute__(self, attr)
421
+ except AttributeError: # attr must be a fieldname
422
+ pass
423
+
424
+ # look for a field with this name
425
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields
426
+ try:
427
+ res = fielddict[attr][:2]
428
+ except (TypeError, KeyError) as e:
429
+ raise AttributeError(f"recarray has no attribute {attr}") from e
430
+ obj = self.getfield(*res)
431
+
432
+ # At this point obj will always be a recarray, since (see
433
+ # PyArray_GetField) the type of obj is inherited. Next, if obj.dtype is
434
+ # non-structured, convert it to an ndarray. Then if obj is structured
435
+ # with void type convert it to the same dtype.type (eg to preserve
436
+ # numpy.record type if present), since nested structured fields do not
437
+ # inherit type. Don't do this for non-void structures though.
438
+ if obj.dtype.names is not None:
439
+ if issubclass(obj.dtype.type, nt.void):
440
+ return obj.view(dtype=(self.dtype.type, obj.dtype))
441
+ return obj
442
+ else:
443
+ return obj.view(ndarray)
444
+
445
+ # Save the dictionary.
446
+ # If the attr is a field name and not in the saved dictionary
447
+ # Undo any "setting" of the attribute and do a setfield
448
+ # Thus, you can't create attributes on-the-fly that are field names.
449
+ def __setattr__(self, attr, val):
450
+
451
+ # Automatically convert (void) structured types to records
452
+ # (but not non-void structures, subarrays, or non-structured voids)
453
+ if (
454
+ attr == 'dtype' and
455
+ issubclass(val.type, nt.void) and
456
+ val.names is not None
457
+ ):
458
+ val = sb.dtype((record, val))
459
+
460
+ newattr = attr not in self.__dict__
461
+ try:
462
+ ret = object.__setattr__(self, attr, val)
463
+ except Exception:
464
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
465
+ if attr not in fielddict:
466
+ raise
467
+ else:
468
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields or {}
469
+ if attr not in fielddict:
470
+ return ret
471
+ if newattr:
472
+ # We just added this one or this setattr worked on an
473
+ # internal attribute.
474
+ try:
475
+ object.__delattr__(self, attr)
476
+ except Exception:
477
+ return ret
478
+ try:
479
+ res = fielddict[attr][:2]
480
+ except (TypeError, KeyError) as e:
481
+ raise AttributeError(
482
+ f"record array has no attribute {attr}"
483
+ ) from e
484
+ return self.setfield(val, *res)
485
+
486
+ def __getitem__(self, indx):
487
+ obj = super().__getitem__(indx)
488
+
489
+ # copy behavior of getattr, except that here
490
+ # we might also be returning a single element
491
+ if isinstance(obj, ndarray):
492
+ if obj.dtype.names is not None:
493
+ obj = obj.view(type(self))
494
+ if issubclass(obj.dtype.type, nt.void):
495
+ return obj.view(dtype=(self.dtype.type, obj.dtype))
496
+ return obj
497
+ else:
498
+ return obj.view(type=ndarray)
499
+ else:
500
+ # return a single element
501
+ return obj
502
+
503
+ def __repr__(self):
504
+
505
+ repr_dtype = self.dtype
506
+ if (
507
+ self.dtype.type is record or
508
+ not issubclass(self.dtype.type, nt.void)
509
+ ):
510
+ # If this is a full record array (has numpy.record dtype),
511
+ # or if it has a scalar (non-void) dtype with no records,
512
+ # represent it using the rec.array function. Since rec.array
513
+ # converts dtype to a numpy.record for us, convert back
514
+ # to non-record before printing
515
+ if repr_dtype.type is record:
516
+ repr_dtype = sb.dtype((nt.void, repr_dtype))
517
+ prefix = "rec.array("
518
+ fmt = 'rec.array(%s,%sdtype=%s)'
519
+ else:
520
+ # otherwise represent it using np.array plus a view
521
+ # This should only happen if the user is playing
522
+ # strange games with dtypes.
523
+ prefix = "array("
524
+ fmt = 'array(%s,%sdtype=%s).view(numpy.recarray)'
525
+
526
+ # get data/shape string. logic taken from numeric.array_repr
527
+ if self.size > 0 or self.shape == (0,):
528
+ lst = sb.array2string(
529
+ self, separator=', ', prefix=prefix, suffix=',')
530
+ else:
531
+ # show zero-length shape unless it is (0,)
532
+ lst = f"[], shape={repr(self.shape)}"
533
+
534
+ lf = '\n' + ' ' * len(prefix)
535
+ if _get_legacy_print_mode() <= 113:
536
+ lf = ' ' + lf # trailing space
537
+ return fmt % (lst, lf, repr_dtype)
538
+
539
+ def field(self, attr, val=None):
540
+ if isinstance(attr, int):
541
+ names = ndarray.__getattribute__(self, 'dtype').names
542
+ attr = names[attr]
543
+
544
+ fielddict = ndarray.__getattribute__(self, 'dtype').fields
545
+
546
+ res = fielddict[attr][:2]
547
+
548
+ if val is None:
549
+ obj = self.getfield(*res)
550
+ if obj.dtype.names is not None:
551
+ return obj
552
+ return obj.view(ndarray)
553
+ else:
554
+ return self.setfield(val, *res)
555
+
556
+
557
+ def _deprecate_shape_0_as_None(shape):
558
+ if shape == 0:
559
+ warnings.warn(
560
+ "Passing `shape=0` to have the shape be inferred is deprecated, "
561
+ "and in future will be equivalent to `shape=(0,)`. To infer "
562
+ "the shape and suppress this warning, pass `shape=None` instead.",
563
+ FutureWarning, stacklevel=3)
564
+ return None
565
+ else:
566
+ return shape
567
+
568
+
569
+ @set_module("numpy.rec")
570
+ def fromarrays(arrayList, dtype=None, shape=None, formats=None,
571
+ names=None, titles=None, aligned=False, byteorder=None):
572
+ """Create a record array from a (flat) list of arrays
573
+
574
+ Parameters
575
+ ----------
576
+ arrayList : list or tuple
577
+ List of array-like objects (such as lists, tuples,
578
+ and ndarrays).
579
+ dtype : data-type, optional
580
+ valid dtype for all arrays
581
+ shape : int or tuple of ints, optional
582
+ Shape of the resulting array. If not provided, inferred from
583
+ ``arrayList[0]``.
584
+ formats, names, titles, aligned, byteorder :
585
+ If `dtype` is ``None``, these arguments are passed to
586
+ `numpy.rec.format_parser` to construct a dtype. See that function for
587
+ detailed documentation.
588
+
589
+ Returns
590
+ -------
591
+ np.recarray
592
+ Record array consisting of given arrayList columns.
593
+
594
+ Examples
595
+ --------
596
+ >>> x1=np.array([1,2,3,4])
597
+ >>> x2=np.array(['a','dd','xyz','12'])
598
+ >>> x3=np.array([1.1,2,3,4])
599
+ >>> r = np.rec.fromarrays([x1,x2,x3],names='a,b,c')
600
+ >>> print(r[1])
601
+ (2, 'dd', 2.0) # may vary
602
+ >>> x1[1]=34
603
+ >>> r.a
604
+ array([1, 2, 3, 4])
605
+
606
+ >>> x1 = np.array([1, 2, 3, 4])
607
+ >>> x2 = np.array(['a', 'dd', 'xyz', '12'])
608
+ >>> x3 = np.array([1.1, 2, 3,4])
609
+ >>> r = np.rec.fromarrays(
610
+ ... [x1, x2, x3],
611
+ ... dtype=np.dtype([('a', np.int32), ('b', 'S3'), ('c', np.float32)]))
612
+ >>> r
613
+ rec.array([(1, b'a', 1.1), (2, b'dd', 2. ), (3, b'xyz', 3. ),
614
+ (4, b'12', 4. )],
615
+ dtype=[('a', '<i4'), ('b', 'S3'), ('c', '<f4')])
616
+ """
617
+
618
+ arrayList = [sb.asarray(x) for x in arrayList]
619
+
620
+ # NumPy 1.19.0, 2020-01-01
621
+ shape = _deprecate_shape_0_as_None(shape)
622
+
623
+ if shape is None:
624
+ shape = arrayList[0].shape
625
+ elif isinstance(shape, int):
626
+ shape = (shape,)
627
+
628
+ if formats is None and dtype is None:
629
+ # go through each object in the list to see if it is an ndarray
630
+ # and determine the formats.
631
+ formats = [obj.dtype for obj in arrayList]
632
+
633
+ if dtype is not None:
634
+ descr = sb.dtype(dtype)
635
+ else:
636
+ descr = format_parser(formats, names, titles, aligned, byteorder).dtype
637
+ _names = descr.names
638
+
639
+ # Determine shape from data-type.
640
+ if len(descr) != len(arrayList):
641
+ raise ValueError("mismatch between the number of fields "
642
+ "and the number of arrays")
643
+
644
+ d0 = descr[0].shape
645
+ nn = len(d0)
646
+ if nn > 0:
647
+ shape = shape[:-nn]
648
+
649
+ _array = recarray(shape, descr)
650
+
651
+ # populate the record array (makes a copy)
652
+ for k, obj in enumerate(arrayList):
653
+ nn = descr[k].ndim
654
+ testshape = obj.shape[:obj.ndim - nn]
655
+ name = _names[k]
656
+ if testshape != shape:
657
+ raise ValueError(f'array-shape mismatch in array {k} ("{name}")')
658
+
659
+ _array[name] = obj
660
+
661
+ return _array
662
+
663
+
664
+ @set_module("numpy.rec")
665
+ def fromrecords(recList, dtype=None, shape=None, formats=None, names=None,
666
+ titles=None, aligned=False, byteorder=None):
667
+ """Create a recarray from a list of records in text form.
668
+
669
+ Parameters
670
+ ----------
671
+ recList : sequence
672
+ data in the same field may be heterogeneous - they will be promoted
673
+ to the highest data type.
674
+ dtype : data-type, optional
675
+ valid dtype for all arrays
676
+ shape : int or tuple of ints, optional
677
+ shape of each array.
678
+ formats, names, titles, aligned, byteorder :
679
+ If `dtype` is ``None``, these arguments are passed to
680
+ `numpy.format_parser` to construct a dtype. See that function for
681
+ detailed documentation.
682
+
683
+ If both `formats` and `dtype` are None, then this will auto-detect
684
+ formats. Use list of tuples rather than list of lists for faster
685
+ processing.
686
+
687
+ Returns
688
+ -------
689
+ np.recarray
690
+ record array consisting of given recList rows.
691
+
692
+ Examples
693
+ --------
694
+ >>> r=np.rec.fromrecords([(456,'dbe',1.2),(2,'de',1.3)],
695
+ ... names='col1,col2,col3')
696
+ >>> print(r[0])
697
+ (456, 'dbe', 1.2)
698
+ >>> r.col1
699
+ array([456, 2])
700
+ >>> r.col2
701
+ array(['dbe', 'de'], dtype='<U3')
702
+ >>> import pickle
703
+ >>> pickle.loads(pickle.dumps(r))
704
+ rec.array([(456, 'dbe', 1.2), ( 2, 'de', 1.3)],
705
+ dtype=[('col1', '<i8'), ('col2', '<U3'), ('col3', '<f8')])
706
+ """
707
+
708
+ if formats is None and dtype is None: # slower
709
+ obj = sb.array(recList, dtype=object)
710
+ arrlist = [
711
+ sb.array(obj[..., i].tolist()) for i in range(obj.shape[-1])
712
+ ]
713
+ return fromarrays(arrlist, formats=formats, shape=shape, names=names,
714
+ titles=titles, aligned=aligned, byteorder=byteorder)
715
+
716
+ if dtype is not None:
717
+ descr = sb.dtype((record, dtype))
718
+ else:
719
+ descr = format_parser(
720
+ formats, names, titles, aligned, byteorder
721
+ ).dtype
722
+
723
+ try:
724
+ retval = sb.array(recList, dtype=descr)
725
+ except (TypeError, ValueError):
726
+ # NumPy 1.19.0, 2020-01-01
727
+ shape = _deprecate_shape_0_as_None(shape)
728
+ if shape is None:
729
+ shape = len(recList)
730
+ if isinstance(shape, int):
731
+ shape = (shape,)
732
+ if len(shape) > 1:
733
+ raise ValueError("Can only deal with 1-d array.")
734
+ _array = recarray(shape, descr)
735
+ for k in range(_array.size):
736
+ _array[k] = tuple(recList[k])
737
+ # list of lists instead of list of tuples ?
738
+ # 2018-02-07, 1.14.1
739
+ warnings.warn(
740
+ "fromrecords expected a list of tuples, may have received a list "
741
+ "of lists instead. In the future that will raise an error",
742
+ FutureWarning, stacklevel=2)
743
+ return _array
744
+ else:
745
+ if shape is not None and retval.shape != shape:
746
+ retval.shape = shape
747
+
748
+ res = retval.view(recarray)
749
+
750
+ return res
751
+
752
+
753
+ @set_module("numpy.rec")
754
+ def fromstring(datastring, dtype=None, shape=None, offset=0, formats=None,
755
+ names=None, titles=None, aligned=False, byteorder=None):
756
+ r"""Create a record array from binary data
757
+
758
+ Note that despite the name of this function it does not accept `str`
759
+ instances.
760
+
761
+ Parameters
762
+ ----------
763
+ datastring : bytes-like
764
+ Buffer of binary data
765
+ dtype : data-type, optional
766
+ Valid dtype for all arrays
767
+ shape : int or tuple of ints, optional
768
+ Shape of each array.
769
+ offset : int, optional
770
+ Position in the buffer to start reading from.
771
+ formats, names, titles, aligned, byteorder :
772
+ If `dtype` is ``None``, these arguments are passed to
773
+ `numpy.format_parser` to construct a dtype. See that function for
774
+ detailed documentation.
775
+
776
+
777
+ Returns
778
+ -------
779
+ np.recarray
780
+ Record array view into the data in datastring. This will be readonly
781
+ if `datastring` is readonly.
782
+
783
+ See Also
784
+ --------
785
+ numpy.frombuffer
786
+
787
+ Examples
788
+ --------
789
+ >>> a = b'\x01\x02\x03abc'
790
+ >>> np.rec.fromstring(a, dtype='u1,u1,u1,S3')
791
+ rec.array([(1, 2, 3, b'abc')],
792
+ dtype=[('f0', 'u1'), ('f1', 'u1'), ('f2', 'u1'), ('f3', 'S3')])
793
+
794
+ >>> grades_dtype = [('Name', (np.str_, 10)), ('Marks', np.float64),
795
+ ... ('GradeLevel', np.int32)]
796
+ >>> grades_array = np.array([('Sam', 33.3, 3), ('Mike', 44.4, 5),
797
+ ... ('Aadi', 66.6, 6)], dtype=grades_dtype)
798
+ >>> np.rec.fromstring(grades_array.tobytes(), dtype=grades_dtype)
799
+ rec.array([('Sam', 33.3, 3), ('Mike', 44.4, 5), ('Aadi', 66.6, 6)],
800
+ dtype=[('Name', '<U10'), ('Marks', '<f8'), ('GradeLevel', '<i4')])
801
+
802
+ >>> s = '\x01\x02\x03abc'
803
+ >>> np.rec.fromstring(s, dtype='u1,u1,u1,S3')
804
+ Traceback (most recent call last):
805
+ ...
806
+ TypeError: a bytes-like object is required, not 'str'
807
+ """
808
+
809
+ if dtype is None and formats is None:
810
+ raise TypeError("fromstring() needs a 'dtype' or 'formats' argument")
811
+
812
+ if dtype is not None:
813
+ descr = sb.dtype(dtype)
814
+ else:
815
+ descr = format_parser(formats, names, titles, aligned, byteorder).dtype
816
+
817
+ itemsize = descr.itemsize
818
+
819
+ # NumPy 1.19.0, 2020-01-01
820
+ shape = _deprecate_shape_0_as_None(shape)
821
+
822
+ if shape in (None, -1):
823
+ shape = (len(datastring) - offset) // itemsize
824
+
825
+ _array = recarray(shape, descr, buf=datastring, offset=offset)
826
+ return _array
827
+
828
+ def get_remaining_size(fd):
829
+ pos = fd.tell()
830
+ try:
831
+ fd.seek(0, 2)
832
+ return fd.tell() - pos
833
+ finally:
834
+ fd.seek(pos, 0)
835
+
836
+
837
+ @set_module("numpy.rec")
838
+ def fromfile(fd, dtype=None, shape=None, offset=0, formats=None,
839
+ names=None, titles=None, aligned=False, byteorder=None):
840
+ """Create an array from binary file data
841
+
842
+ Parameters
843
+ ----------
844
+ fd : str or file type
845
+ If file is a string or a path-like object then that file is opened,
846
+ else it is assumed to be a file object. The file object must
847
+ support random access (i.e. it must have tell and seek methods).
848
+ dtype : data-type, optional
849
+ valid dtype for all arrays
850
+ shape : int or tuple of ints, optional
851
+ shape of each array.
852
+ offset : int, optional
853
+ Position in the file to start reading from.
854
+ formats, names, titles, aligned, byteorder :
855
+ If `dtype` is ``None``, these arguments are passed to
856
+ `numpy.format_parser` to construct a dtype. See that function for
857
+ detailed documentation
858
+
859
+ Returns
860
+ -------
861
+ np.recarray
862
+ record array consisting of data enclosed in file.
863
+
864
+ Examples
865
+ --------
866
+ >>> from tempfile import TemporaryFile
867
+ >>> a = np.empty(10,dtype='f8,i4,a5')
868
+ >>> a[5] = (0.5,10,'abcde')
869
+ >>>
870
+ >>> fd=TemporaryFile()
871
+ >>> a = a.view(a.dtype.newbyteorder('<'))
872
+ >>> a.tofile(fd)
873
+ >>>
874
+ >>> _ = fd.seek(0)
875
+ >>> r=np.rec.fromfile(fd, formats='f8,i4,a5', shape=10,
876
+ ... byteorder='<')
877
+ >>> print(r[5])
878
+ (0.5, 10, b'abcde')
879
+ >>> r.shape
880
+ (10,)
881
+ """
882
+
883
+ if dtype is None and formats is None:
884
+ raise TypeError("fromfile() needs a 'dtype' or 'formats' argument")
885
+
886
+ # NumPy 1.19.0, 2020-01-01
887
+ shape = _deprecate_shape_0_as_None(shape)
888
+
889
+ if shape is None:
890
+ shape = (-1,)
891
+ elif isinstance(shape, int):
892
+ shape = (shape,)
893
+
894
+ if hasattr(fd, 'readinto'):
895
+ # GH issue 2504. fd supports io.RawIOBase or io.BufferedIOBase
896
+ # interface. Example of fd: gzip, BytesIO, BufferedReader
897
+ # file already opened
898
+ ctx = nullcontext(fd)
899
+ else:
900
+ # open file
901
+ ctx = open(os.fspath(fd), 'rb')
902
+
903
+ with ctx as fd:
904
+ if offset > 0:
905
+ fd.seek(offset, 1)
906
+ size = get_remaining_size(fd)
907
+
908
+ if dtype is not None:
909
+ descr = sb.dtype(dtype)
910
+ else:
911
+ descr = format_parser(
912
+ formats, names, titles, aligned, byteorder
913
+ ).dtype
914
+
915
+ itemsize = descr.itemsize
916
+
917
+ shapeprod = sb.array(shape).prod(dtype=nt.intp)
918
+ shapesize = shapeprod * itemsize
919
+ if shapesize < 0:
920
+ shape = list(shape)
921
+ shape[shape.index(-1)] = size // -shapesize
922
+ shape = tuple(shape)
923
+ shapeprod = sb.array(shape).prod(dtype=nt.intp)
924
+
925
+ nbytes = shapeprod * itemsize
926
+
927
+ if nbytes > size:
928
+ raise ValueError(
929
+ "Not enough bytes left in file for specified "
930
+ "shape and type."
931
+ )
932
+
933
+ # create the array
934
+ _array = recarray(shape, descr)
935
+ nbytesread = fd.readinto(_array.data)
936
+ if nbytesread != nbytes:
937
+ raise OSError("Didn't read as many bytes as expected")
938
+
939
+ return _array
940
+
941
+
942
+ @set_module("numpy.rec")
943
+ def array(obj, dtype=None, shape=None, offset=0, strides=None, formats=None,
944
+ names=None, titles=None, aligned=False, byteorder=None, copy=True):
945
+ """
946
+ Construct a record array from a wide-variety of objects.
947
+
948
+ A general-purpose record array constructor that dispatches to the
949
+ appropriate `recarray` creation function based on the inputs (see Notes).
950
+
951
+ Parameters
952
+ ----------
953
+ obj : any
954
+ Input object. See Notes for details on how various input types are
955
+ treated.
956
+ dtype : data-type, optional
957
+ Valid dtype for array.
958
+ shape : int or tuple of ints, optional
959
+ Shape of each array.
960
+ offset : int, optional
961
+ Position in the file or buffer to start reading from.
962
+ strides : tuple of ints, optional
963
+ Buffer (`buf`) is interpreted according to these strides (strides
964
+ define how many bytes each array element, row, column, etc.
965
+ occupy in memory).
966
+ formats, names, titles, aligned, byteorder :
967
+ If `dtype` is ``None``, these arguments are passed to
968
+ `numpy.format_parser` to construct a dtype. See that function for
969
+ detailed documentation.
970
+ copy : bool, optional
971
+ Whether to copy the input object (True), or to use a reference instead.
972
+ This option only applies when the input is an ndarray or recarray.
973
+ Defaults to True.
974
+
975
+ Returns
976
+ -------
977
+ np.recarray
978
+ Record array created from the specified object.
979
+
980
+ Notes
981
+ -----
982
+ If `obj` is ``None``, then call the `~numpy.recarray` constructor. If
983
+ `obj` is a string, then call the `fromstring` constructor. If `obj` is a
984
+ list or a tuple, then if the first object is an `~numpy.ndarray`, call
985
+ `fromarrays`, otherwise call `fromrecords`. If `obj` is a
986
+ `~numpy.recarray`, then make a copy of the data in the recarray
987
+ (if ``copy=True``) and use the new formats, names, and titles. If `obj`
988
+ is a file, then call `fromfile`. Finally, if obj is an `ndarray`, then
989
+ return ``obj.view(recarray)``, making a copy of the data if ``copy=True``.
990
+
991
+ Examples
992
+ --------
993
+ >>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
994
+ >>> a
995
+ array([[1, 2, 3],
996
+ [4, 5, 6],
997
+ [7, 8, 9]])
998
+
999
+ >>> np.rec.array(a)
1000
+ rec.array([[1, 2, 3],
1001
+ [4, 5, 6],
1002
+ [7, 8, 9]],
1003
+ dtype=int64)
1004
+
1005
+ >>> b = [(1, 1), (2, 4), (3, 9)]
1006
+ >>> c = np.rec.array(b, formats = ['i2', 'f2'], names = ('x', 'y'))
1007
+ >>> c
1008
+ rec.array([(1, 1.), (2, 4.), (3, 9.)],
1009
+ dtype=[('x', '<i2'), ('y', '<f2')])
1010
+
1011
+ >>> c.x
1012
+ array([1, 2, 3], dtype=int16)
1013
+
1014
+ >>> c.y
1015
+ array([1., 4., 9.], dtype=float16)
1016
+
1017
+ >>> r = np.rec.array(['abc','def'], names=['col1','col2'])
1018
+ >>> print(r.col1)
1019
+ abc
1020
+
1021
+ >>> r.col1
1022
+ array('abc', dtype='<U3')
1023
+
1024
+ >>> r.col2
1025
+ array('def', dtype='<U3')
1026
+ """
1027
+
1028
+ if ((isinstance(obj, (type(None), str)) or hasattr(obj, 'readinto')) and
1029
+ formats is None and dtype is None):
1030
+ raise ValueError("Must define formats (or dtype) if object is "
1031
+ "None, string, or an open file")
1032
+
1033
+ kwds = {}
1034
+ if dtype is not None:
1035
+ dtype = sb.dtype(dtype)
1036
+ elif formats is not None:
1037
+ dtype = format_parser(formats, names, titles,
1038
+ aligned, byteorder).dtype
1039
+ else:
1040
+ kwds = {'formats': formats,
1041
+ 'names': names,
1042
+ 'titles': titles,
1043
+ 'aligned': aligned,
1044
+ 'byteorder': byteorder
1045
+ }
1046
+
1047
+ if obj is None:
1048
+ if shape is None:
1049
+ raise ValueError("Must define a shape if obj is None")
1050
+ return recarray(shape, dtype, buf=obj, offset=offset, strides=strides)
1051
+
1052
+ elif isinstance(obj, bytes):
1053
+ return fromstring(obj, dtype, shape=shape, offset=offset, **kwds)
1054
+
1055
+ elif isinstance(obj, (list, tuple)):
1056
+ if isinstance(obj[0], (tuple, list)):
1057
+ return fromrecords(obj, dtype=dtype, shape=shape, **kwds)
1058
+ else:
1059
+ return fromarrays(obj, dtype=dtype, shape=shape, **kwds)
1060
+
1061
+ elif isinstance(obj, recarray):
1062
+ if dtype is not None and (obj.dtype != dtype):
1063
+ new = obj.view(dtype)
1064
+ else:
1065
+ new = obj
1066
+ if copy:
1067
+ new = new.copy()
1068
+ return new
1069
+
1070
+ elif hasattr(obj, 'readinto'):
1071
+ return fromfile(obj, dtype=dtype, shape=shape, offset=offset)
1072
+
1073
+ elif isinstance(obj, ndarray):
1074
+ if dtype is not None and (obj.dtype != dtype):
1075
+ new = obj.view(dtype)
1076
+ else:
1077
+ new = obj
1078
+ if copy:
1079
+ new = new.copy()
1080
+ return new.view(recarray)
1081
+
1082
+ else:
1083
+ interface = getattr(obj, "__array_interface__", None)
1084
+ if interface is None or not isinstance(interface, dict):
1085
+ raise ValueError("Unknown input type")
1086
+ obj = sb.array(obj)
1087
+ if dtype is not None and (obj.dtype != dtype):
1088
+ obj = obj.view(dtype)
1089
+ return obj.view(recarray)