numpy 2.4.1__pp311-pypy311_pp73-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.
Files changed (1039) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +108 -0
  3. numpy/__init__.cython-30.pxd +1242 -0
  4. numpy/__init__.pxd +1155 -0
  5. numpy/__init__.py +942 -0
  6. numpy/__init__.pyi +6202 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +206 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +201 -0
  12. numpy/_core/__init__.pyi +666 -0
  13. numpy/_core/_add_newdocs.py +7151 -0
  14. numpy/_core/_add_newdocs.pyi +2 -0
  15. numpy/_core/_add_newdocs_scalars.py +381 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +130 -0
  18. numpy/_core/_asarray.pyi +43 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +56 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +54 -0
  25. numpy/_core/_internal.py +968 -0
  26. numpy/_core/_internal.pyi +61 -0
  27. numpy/_core/_methods.py +252 -0
  28. numpy/_core/_methods.pyi +22 -0
  29. numpy/_core/_multiarray_tests.pypy311-pp73-darwin.so +0 -0
  30. numpy/_core/_multiarray_umath.pypy311-pp73-darwin.so +0 -0
  31. numpy/_core/_operand_flag_tests.pypy311-pp73-darwin.so +0 -0
  32. numpy/_core/_rational_tests.pypy311-pp73-darwin.so +0 -0
  33. numpy/_core/_simd.pyi +35 -0
  34. numpy/_core/_simd.pypy311-pp73-darwin.so +0 -0
  35. numpy/_core/_string_helpers.py +100 -0
  36. numpy/_core/_string_helpers.pyi +12 -0
  37. numpy/_core/_struct_ufunc_tests.pypy311-pp73-darwin.so +0 -0
  38. numpy/_core/_type_aliases.py +131 -0
  39. numpy/_core/_type_aliases.pyi +86 -0
  40. numpy/_core/_ufunc_config.py +515 -0
  41. numpy/_core/_ufunc_config.pyi +69 -0
  42. numpy/_core/_umath_tests.pyi +47 -0
  43. numpy/_core/_umath_tests.pypy311-pp73-darwin.so +0 -0
  44. numpy/_core/arrayprint.py +1779 -0
  45. numpy/_core/arrayprint.pyi +158 -0
  46. numpy/_core/cversions.py +13 -0
  47. numpy/_core/defchararray.py +1414 -0
  48. numpy/_core/defchararray.pyi +1150 -0
  49. numpy/_core/einsumfunc.py +1650 -0
  50. numpy/_core/einsumfunc.pyi +184 -0
  51. numpy/_core/fromnumeric.py +4233 -0
  52. numpy/_core/fromnumeric.pyi +1735 -0
  53. numpy/_core/function_base.py +547 -0
  54. numpy/_core/function_base.pyi +276 -0
  55. numpy/_core/getlimits.py +462 -0
  56. numpy/_core/getlimits.pyi +124 -0
  57. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  58. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  59. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  60. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  61. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  62. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  63. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  64. numpy/_core/include/numpy/arrayobject.h +7 -0
  65. numpy/_core/include/numpy/arrayscalars.h +198 -0
  66. numpy/_core/include/numpy/dtype_api.h +547 -0
  67. numpy/_core/include/numpy/halffloat.h +70 -0
  68. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  69. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  70. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  71. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  72. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  73. numpy/_core/include/numpy/npy_common.h +989 -0
  74. numpy/_core/include/numpy/npy_cpu.h +126 -0
  75. numpy/_core/include/numpy/npy_endian.h +79 -0
  76. numpy/_core/include/numpy/npy_math.h +602 -0
  77. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  78. numpy/_core/include/numpy/npy_os.h +42 -0
  79. numpy/_core/include/numpy/numpyconfig.h +185 -0
  80. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  81. numpy/_core/include/numpy/random/bitgen.h +20 -0
  82. numpy/_core/include/numpy/random/distributions.h +209 -0
  83. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  84. numpy/_core/include/numpy/ufuncobject.h +343 -0
  85. numpy/_core/include/numpy/utils.h +37 -0
  86. numpy/_core/lib/libnpymath.a +0 -0
  87. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  88. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  89. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  90. numpy/_core/memmap.py +363 -0
  91. numpy/_core/memmap.pyi +3 -0
  92. numpy/_core/multiarray.py +1740 -0
  93. numpy/_core/multiarray.pyi +1316 -0
  94. numpy/_core/numeric.py +2758 -0
  95. numpy/_core/numeric.pyi +1276 -0
  96. numpy/_core/numerictypes.py +633 -0
  97. numpy/_core/numerictypes.pyi +196 -0
  98. numpy/_core/overrides.py +188 -0
  99. numpy/_core/overrides.pyi +47 -0
  100. numpy/_core/printoptions.py +32 -0
  101. numpy/_core/printoptions.pyi +28 -0
  102. numpy/_core/records.py +1088 -0
  103. numpy/_core/records.pyi +340 -0
  104. numpy/_core/shape_base.py +996 -0
  105. numpy/_core/shape_base.pyi +182 -0
  106. numpy/_core/strings.py +1813 -0
  107. numpy/_core/strings.pyi +536 -0
  108. numpy/_core/tests/_locales.py +72 -0
  109. numpy/_core/tests/_natype.py +144 -0
  110. numpy/_core/tests/data/astype_copy.pkl +0 -0
  111. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  112. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  113. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  114. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  115. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  122. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  124. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  127. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  128. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  129. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  130. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  131. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  134. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  135. numpy/_core/tests/examples/cython/meson.build +43 -0
  136. numpy/_core/tests/examples/cython/setup.py +39 -0
  137. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  138. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  139. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  140. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  141. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  142. numpy/_core/tests/test__exceptions.py +90 -0
  143. numpy/_core/tests/test_abc.py +54 -0
  144. numpy/_core/tests/test_api.py +655 -0
  145. numpy/_core/tests/test_argparse.py +90 -0
  146. numpy/_core/tests/test_array_api_info.py +113 -0
  147. numpy/_core/tests/test_array_coercion.py +928 -0
  148. numpy/_core/tests/test_array_interface.py +222 -0
  149. numpy/_core/tests/test_arraymethod.py +84 -0
  150. numpy/_core/tests/test_arrayobject.py +75 -0
  151. numpy/_core/tests/test_arrayprint.py +1324 -0
  152. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  153. numpy/_core/tests/test_casting_unittests.py +955 -0
  154. numpy/_core/tests/test_conversion_utils.py +209 -0
  155. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  156. numpy/_core/tests/test_cpu_features.py +450 -0
  157. numpy/_core/tests/test_custom_dtypes.py +393 -0
  158. numpy/_core/tests/test_cython.py +352 -0
  159. numpy/_core/tests/test_datetime.py +2792 -0
  160. numpy/_core/tests/test_defchararray.py +858 -0
  161. numpy/_core/tests/test_deprecations.py +460 -0
  162. numpy/_core/tests/test_dlpack.py +190 -0
  163. numpy/_core/tests/test_dtype.py +2110 -0
  164. numpy/_core/tests/test_einsum.py +1351 -0
  165. numpy/_core/tests/test_errstate.py +131 -0
  166. numpy/_core/tests/test_extint128.py +217 -0
  167. numpy/_core/tests/test_finfo.py +86 -0
  168. numpy/_core/tests/test_function_base.py +504 -0
  169. numpy/_core/tests/test_getlimits.py +171 -0
  170. numpy/_core/tests/test_half.py +593 -0
  171. numpy/_core/tests/test_hashtable.py +36 -0
  172. numpy/_core/tests/test_indexerrors.py +122 -0
  173. numpy/_core/tests/test_indexing.py +1692 -0
  174. numpy/_core/tests/test_item_selection.py +167 -0
  175. numpy/_core/tests/test_limited_api.py +102 -0
  176. numpy/_core/tests/test_longdouble.py +370 -0
  177. numpy/_core/tests/test_mem_overlap.py +933 -0
  178. numpy/_core/tests/test_mem_policy.py +453 -0
  179. numpy/_core/tests/test_memmap.py +248 -0
  180. numpy/_core/tests/test_multiarray.py +11008 -0
  181. numpy/_core/tests/test_multiprocessing.py +55 -0
  182. numpy/_core/tests/test_multithreading.py +377 -0
  183. numpy/_core/tests/test_nditer.py +3533 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4295 -0
  186. numpy/_core/tests/test_numerictypes.py +650 -0
  187. numpy/_core/tests/test_overrides.py +800 -0
  188. numpy/_core/tests/test_print.py +202 -0
  189. numpy/_core/tests/test_protocols.py +46 -0
  190. numpy/_core/tests/test_records.py +544 -0
  191. numpy/_core/tests/test_regression.py +2677 -0
  192. numpy/_core/tests/test_scalar_ctors.py +203 -0
  193. numpy/_core/tests/test_scalar_methods.py +328 -0
  194. numpy/_core/tests/test_scalarbuffer.py +153 -0
  195. numpy/_core/tests/test_scalarinherit.py +105 -0
  196. numpy/_core/tests/test_scalarmath.py +1168 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +904 -0
  199. numpy/_core/tests/test_simd.py +1345 -0
  200. numpy/_core/tests/test_simd_module.py +105 -0
  201. numpy/_core/tests/test_stringdtype.py +1855 -0
  202. numpy/_core/tests/test_strings.py +1523 -0
  203. numpy/_core/tests/test_ufunc.py +3405 -0
  204. numpy/_core/tests/test_umath.py +4962 -0
  205. numpy/_core/tests/test_umath_accuracy.py +132 -0
  206. numpy/_core/tests/test_umath_complex.py +631 -0
  207. numpy/_core/tests/test_unicode.py +369 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +232 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +78 -0
  213. numpy/_expired_attrs_2_0.pyi +61 -0
  214. numpy/_globals.py +121 -0
  215. numpy/_globals.pyi +17 -0
  216. numpy/_pyinstaller/__init__.py +0 -0
  217. numpy/_pyinstaller/__init__.pyi +0 -0
  218. numpy/_pyinstaller/hook-numpy.py +36 -0
  219. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  220. numpy/_pyinstaller/tests/__init__.py +16 -0
  221. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  222. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  223. numpy/_pytesttester.py +201 -0
  224. numpy/_pytesttester.pyi +18 -0
  225. numpy/_typing/__init__.py +173 -0
  226. numpy/_typing/_add_docstring.py +153 -0
  227. numpy/_typing/_array_like.py +106 -0
  228. numpy/_typing/_char_codes.py +213 -0
  229. numpy/_typing/_dtype_like.py +114 -0
  230. numpy/_typing/_extended_precision.py +15 -0
  231. numpy/_typing/_nbit.py +19 -0
  232. numpy/_typing/_nbit_base.py +94 -0
  233. numpy/_typing/_nbit_base.pyi +39 -0
  234. numpy/_typing/_nested_sequence.py +79 -0
  235. numpy/_typing/_scalars.py +20 -0
  236. numpy/_typing/_shape.py +8 -0
  237. numpy/_typing/_ufunc.py +7 -0
  238. numpy/_typing/_ufunc.pyi +975 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +28 -0
  241. numpy/_utils/_convertions.py +18 -0
  242. numpy/_utils/_convertions.pyi +4 -0
  243. numpy/_utils/_inspect.py +192 -0
  244. numpy/_utils/_inspect.pyi +70 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +118 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +248 -0
  250. numpy/core/__init__.py +33 -0
  251. numpy/core/__init__.pyi +0 -0
  252. numpy/core/_dtype.py +10 -0
  253. numpy/core/_dtype.pyi +0 -0
  254. numpy/core/_dtype_ctypes.py +10 -0
  255. numpy/core/_dtype_ctypes.pyi +0 -0
  256. numpy/core/_internal.py +27 -0
  257. numpy/core/_multiarray_umath.py +57 -0
  258. numpy/core/_utils.py +21 -0
  259. numpy/core/arrayprint.py +10 -0
  260. numpy/core/defchararray.py +10 -0
  261. numpy/core/einsumfunc.py +10 -0
  262. numpy/core/fromnumeric.py +10 -0
  263. numpy/core/function_base.py +10 -0
  264. numpy/core/getlimits.py +10 -0
  265. numpy/core/multiarray.py +25 -0
  266. numpy/core/numeric.py +12 -0
  267. numpy/core/numerictypes.py +10 -0
  268. numpy/core/overrides.py +10 -0
  269. numpy/core/overrides.pyi +7 -0
  270. numpy/core/records.py +10 -0
  271. numpy/core/shape_base.py +10 -0
  272. numpy/core/umath.py +10 -0
  273. numpy/ctypeslib/__init__.py +13 -0
  274. numpy/ctypeslib/__init__.pyi +15 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  277. numpy/distutils/__init__.py +64 -0
  278. numpy/distutils/__init__.pyi +4 -0
  279. numpy/distutils/__pycache__/conv_template.pypy311.pyc +0 -0
  280. numpy/distutils/_shell_utils.py +87 -0
  281. numpy/distutils/armccompiler.py +26 -0
  282. numpy/distutils/ccompiler.py +826 -0
  283. numpy/distutils/ccompiler_opt.py +2668 -0
  284. numpy/distutils/checks/cpu_asimd.c +27 -0
  285. numpy/distutils/checks/cpu_asimddp.c +16 -0
  286. numpy/distutils/checks/cpu_asimdfhm.c +19 -0
  287. numpy/distutils/checks/cpu_asimdhp.c +15 -0
  288. numpy/distutils/checks/cpu_avx.c +20 -0
  289. numpy/distutils/checks/cpu_avx2.c +20 -0
  290. numpy/distutils/checks/cpu_avx512_clx.c +22 -0
  291. numpy/distutils/checks/cpu_avx512_cnl.c +24 -0
  292. numpy/distutils/checks/cpu_avx512_icl.c +26 -0
  293. numpy/distutils/checks/cpu_avx512_knl.c +25 -0
  294. numpy/distutils/checks/cpu_avx512_knm.c +30 -0
  295. numpy/distutils/checks/cpu_avx512_skx.c +26 -0
  296. numpy/distutils/checks/cpu_avx512_spr.c +26 -0
  297. numpy/distutils/checks/cpu_avx512cd.c +20 -0
  298. numpy/distutils/checks/cpu_avx512f.c +20 -0
  299. numpy/distutils/checks/cpu_f16c.c +22 -0
  300. numpy/distutils/checks/cpu_fma3.c +22 -0
  301. numpy/distutils/checks/cpu_fma4.c +13 -0
  302. numpy/distutils/checks/cpu_lsx.c +11 -0
  303. numpy/distutils/checks/cpu_neon.c +19 -0
  304. numpy/distutils/checks/cpu_neon_fp16.c +11 -0
  305. numpy/distutils/checks/cpu_neon_vfpv4.c +21 -0
  306. numpy/distutils/checks/cpu_popcnt.c +32 -0
  307. numpy/distutils/checks/cpu_rvv.c +13 -0
  308. numpy/distutils/checks/cpu_sse.c +20 -0
  309. numpy/distutils/checks/cpu_sse2.c +20 -0
  310. numpy/distutils/checks/cpu_sse3.c +20 -0
  311. numpy/distutils/checks/cpu_sse41.c +20 -0
  312. numpy/distutils/checks/cpu_sse42.c +20 -0
  313. numpy/distutils/checks/cpu_ssse3.c +20 -0
  314. numpy/distutils/checks/cpu_sve.c +14 -0
  315. numpy/distutils/checks/cpu_vsx.c +21 -0
  316. numpy/distutils/checks/cpu_vsx2.c +13 -0
  317. numpy/distutils/checks/cpu_vsx3.c +13 -0
  318. numpy/distutils/checks/cpu_vsx4.c +14 -0
  319. numpy/distutils/checks/cpu_vx.c +16 -0
  320. numpy/distutils/checks/cpu_vxe.c +25 -0
  321. numpy/distutils/checks/cpu_vxe2.c +21 -0
  322. numpy/distutils/checks/cpu_xop.c +12 -0
  323. numpy/distutils/checks/extra_avx512bw_mask.c +18 -0
  324. numpy/distutils/checks/extra_avx512dq_mask.c +16 -0
  325. numpy/distutils/checks/extra_avx512f_reduce.c +41 -0
  326. numpy/distutils/checks/extra_vsx3_half_double.c +12 -0
  327. numpy/distutils/checks/extra_vsx4_mma.c +21 -0
  328. numpy/distutils/checks/extra_vsx_asm.c +36 -0
  329. numpy/distutils/checks/test_flags.c +1 -0
  330. numpy/distutils/command/__init__.py +41 -0
  331. numpy/distutils/command/autodist.py +148 -0
  332. numpy/distutils/command/bdist_rpm.py +22 -0
  333. numpy/distutils/command/build.py +62 -0
  334. numpy/distutils/command/build_clib.py +469 -0
  335. numpy/distutils/command/build_ext.py +752 -0
  336. numpy/distutils/command/build_py.py +31 -0
  337. numpy/distutils/command/build_scripts.py +49 -0
  338. numpy/distutils/command/build_src.py +773 -0
  339. numpy/distutils/command/config.py +516 -0
  340. numpy/distutils/command/config_compiler.py +126 -0
  341. numpy/distutils/command/develop.py +15 -0
  342. numpy/distutils/command/egg_info.py +25 -0
  343. numpy/distutils/command/install.py +79 -0
  344. numpy/distutils/command/install_clib.py +40 -0
  345. numpy/distutils/command/install_data.py +24 -0
  346. numpy/distutils/command/install_headers.py +25 -0
  347. numpy/distutils/command/sdist.py +27 -0
  348. numpy/distutils/conv_template.py +329 -0
  349. numpy/distutils/core.py +215 -0
  350. numpy/distutils/cpuinfo.py +683 -0
  351. numpy/distutils/exec_command.py +315 -0
  352. numpy/distutils/extension.py +101 -0
  353. numpy/distutils/fcompiler/__init__.py +1035 -0
  354. numpy/distutils/fcompiler/absoft.py +158 -0
  355. numpy/distutils/fcompiler/arm.py +71 -0
  356. numpy/distutils/fcompiler/compaq.py +120 -0
  357. numpy/distutils/fcompiler/environment.py +88 -0
  358. numpy/distutils/fcompiler/fujitsu.py +46 -0
  359. numpy/distutils/fcompiler/g95.py +42 -0
  360. numpy/distutils/fcompiler/gnu.py +555 -0
  361. numpy/distutils/fcompiler/hpux.py +41 -0
  362. numpy/distutils/fcompiler/ibm.py +97 -0
  363. numpy/distutils/fcompiler/intel.py +211 -0
  364. numpy/distutils/fcompiler/lahey.py +45 -0
  365. numpy/distutils/fcompiler/mips.py +54 -0
  366. numpy/distutils/fcompiler/nag.py +87 -0
  367. numpy/distutils/fcompiler/none.py +28 -0
  368. numpy/distutils/fcompiler/nv.py +53 -0
  369. numpy/distutils/fcompiler/pathf95.py +33 -0
  370. numpy/distutils/fcompiler/pg.py +128 -0
  371. numpy/distutils/fcompiler/sun.py +51 -0
  372. numpy/distutils/fcompiler/vast.py +52 -0
  373. numpy/distutils/from_template.py +261 -0
  374. numpy/distutils/fujitsuccompiler.py +28 -0
  375. numpy/distutils/intelccompiler.py +106 -0
  376. numpy/distutils/lib2def.py +116 -0
  377. numpy/distutils/line_endings.py +77 -0
  378. numpy/distutils/log.py +111 -0
  379. numpy/distutils/mingw/gfortran_vs2003_hack.c +6 -0
  380. numpy/distutils/mingw32ccompiler.py +620 -0
  381. numpy/distutils/misc_util.py +2484 -0
  382. numpy/distutils/msvc9compiler.py +63 -0
  383. numpy/distutils/msvccompiler.py +76 -0
  384. numpy/distutils/npy_pkg_config.py +441 -0
  385. numpy/distutils/numpy_distribution.py +17 -0
  386. numpy/distutils/pathccompiler.py +21 -0
  387. numpy/distutils/system_info.py +3267 -0
  388. numpy/distutils/tests/__init__.py +0 -0
  389. numpy/distutils/tests/test_build_ext.py +74 -0
  390. numpy/distutils/tests/test_ccompiler_opt.py +808 -0
  391. numpy/distutils/tests/test_ccompiler_opt_conf.py +176 -0
  392. numpy/distutils/tests/test_exec_command.py +217 -0
  393. numpy/distutils/tests/test_fcompiler.py +43 -0
  394. numpy/distutils/tests/test_fcompiler_gnu.py +55 -0
  395. numpy/distutils/tests/test_fcompiler_intel.py +30 -0
  396. numpy/distutils/tests/test_fcompiler_nagfor.py +22 -0
  397. numpy/distutils/tests/test_from_template.py +44 -0
  398. numpy/distutils/tests/test_log.py +34 -0
  399. numpy/distutils/tests/test_mingw32ccompiler.py +47 -0
  400. numpy/distutils/tests/test_misc_util.py +88 -0
  401. numpy/distutils/tests/test_npy_pkg_config.py +84 -0
  402. numpy/distutils/tests/test_shell_utils.py +79 -0
  403. numpy/distutils/tests/test_system_info.py +334 -0
  404. numpy/distutils/tests/utilities.py +90 -0
  405. numpy/distutils/unixccompiler.py +141 -0
  406. numpy/doc/ufuncs.py +138 -0
  407. numpy/dtypes.py +41 -0
  408. numpy/dtypes.pyi +630 -0
  409. numpy/exceptions.py +246 -0
  410. numpy/exceptions.pyi +27 -0
  411. numpy/f2py/__init__.py +86 -0
  412. numpy/f2py/__init__.pyi +5 -0
  413. numpy/f2py/__main__.py +5 -0
  414. numpy/f2py/__version__.py +1 -0
  415. numpy/f2py/__version__.pyi +1 -0
  416. numpy/f2py/_backends/__init__.py +9 -0
  417. numpy/f2py/_backends/__init__.pyi +5 -0
  418. numpy/f2py/_backends/_backend.py +44 -0
  419. numpy/f2py/_backends/_backend.pyi +46 -0
  420. numpy/f2py/_backends/_distutils.py +76 -0
  421. numpy/f2py/_backends/_distutils.pyi +13 -0
  422. numpy/f2py/_backends/_meson.py +244 -0
  423. numpy/f2py/_backends/_meson.pyi +62 -0
  424. numpy/f2py/_backends/meson.build.template +58 -0
  425. numpy/f2py/_isocbind.py +62 -0
  426. numpy/f2py/_isocbind.pyi +13 -0
  427. numpy/f2py/_src_pyf.py +247 -0
  428. numpy/f2py/_src_pyf.pyi +28 -0
  429. numpy/f2py/auxfuncs.py +1004 -0
  430. numpy/f2py/auxfuncs.pyi +262 -0
  431. numpy/f2py/capi_maps.py +811 -0
  432. numpy/f2py/capi_maps.pyi +33 -0
  433. numpy/f2py/cb_rules.py +665 -0
  434. numpy/f2py/cb_rules.pyi +17 -0
  435. numpy/f2py/cfuncs.py +1563 -0
  436. numpy/f2py/cfuncs.pyi +31 -0
  437. numpy/f2py/common_rules.py +143 -0
  438. numpy/f2py/common_rules.pyi +9 -0
  439. numpy/f2py/crackfortran.py +3725 -0
  440. numpy/f2py/crackfortran.pyi +266 -0
  441. numpy/f2py/diagnose.py +149 -0
  442. numpy/f2py/diagnose.pyi +1 -0
  443. numpy/f2py/f2py2e.py +788 -0
  444. numpy/f2py/f2py2e.pyi +74 -0
  445. numpy/f2py/f90mod_rules.py +269 -0
  446. numpy/f2py/f90mod_rules.pyi +16 -0
  447. numpy/f2py/func2subr.py +329 -0
  448. numpy/f2py/func2subr.pyi +7 -0
  449. numpy/f2py/rules.py +1629 -0
  450. numpy/f2py/rules.pyi +41 -0
  451. numpy/f2py/setup.cfg +3 -0
  452. numpy/f2py/src/fortranobject.c +1436 -0
  453. numpy/f2py/src/fortranobject.h +173 -0
  454. numpy/f2py/symbolic.py +1518 -0
  455. numpy/f2py/symbolic.pyi +219 -0
  456. numpy/f2py/tests/__init__.py +16 -0
  457. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  458. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  459. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  460. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  461. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  462. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  463. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  464. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  465. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  466. numpy/f2py/tests/src/callback/foo.f +62 -0
  467. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  468. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  469. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  470. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  471. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  472. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  473. numpy/f2py/tests/src/cli/hi77.f +3 -0
  474. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  475. numpy/f2py/tests/src/common/block.f +11 -0
  476. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  477. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  478. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  479. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  480. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  481. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  482. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  483. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  484. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  485. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  486. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  487. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  488. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  489. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  490. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  491. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  492. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  493. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  494. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  495. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  496. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  497. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  498. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  499. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  500. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  501. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  502. numpy/f2py/tests/src/mixed/foo.f +5 -0
  503. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  504. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  505. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  506. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  507. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  508. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  509. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  510. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  511. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  512. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  513. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  514. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  515. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  516. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  517. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  518. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  519. numpy/f2py/tests/src/regression/AB.inc +1 -0
  520. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  521. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  522. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  523. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  524. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  525. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  526. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  527. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  528. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  529. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  530. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  531. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  532. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  533. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  534. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  535. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  536. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  537. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  538. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  539. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  540. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  541. numpy/f2py/tests/src/routines/subrout.f +4 -0
  542. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  543. numpy/f2py/tests/src/size/foo.f90 +44 -0
  544. numpy/f2py/tests/src/string/char.f90 +29 -0
  545. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  546. numpy/f2py/tests/src/string/gh24008.f +8 -0
  547. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  548. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  549. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  550. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  551. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  552. numpy/f2py/tests/src/string/string.f +12 -0
  553. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  554. numpy/f2py/tests/test_abstract_interface.py +26 -0
  555. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  556. numpy/f2py/tests/test_assumed_shape.py +50 -0
  557. numpy/f2py/tests/test_block_docstring.py +20 -0
  558. numpy/f2py/tests/test_callback.py +263 -0
  559. numpy/f2py/tests/test_character.py +641 -0
  560. numpy/f2py/tests/test_common.py +23 -0
  561. numpy/f2py/tests/test_crackfortran.py +421 -0
  562. numpy/f2py/tests/test_data.py +71 -0
  563. numpy/f2py/tests/test_docs.py +66 -0
  564. numpy/f2py/tests/test_f2cmap.py +17 -0
  565. numpy/f2py/tests/test_f2py2e.py +983 -0
  566. numpy/f2py/tests/test_isoc.py +56 -0
  567. numpy/f2py/tests/test_kind.py +52 -0
  568. numpy/f2py/tests/test_mixed.py +35 -0
  569. numpy/f2py/tests/test_modules.py +83 -0
  570. numpy/f2py/tests/test_parameter.py +129 -0
  571. numpy/f2py/tests/test_pyf_src.py +43 -0
  572. numpy/f2py/tests/test_quoted_character.py +18 -0
  573. numpy/f2py/tests/test_regression.py +187 -0
  574. numpy/f2py/tests/test_return_character.py +48 -0
  575. numpy/f2py/tests/test_return_complex.py +67 -0
  576. numpy/f2py/tests/test_return_integer.py +55 -0
  577. numpy/f2py/tests/test_return_logical.py +65 -0
  578. numpy/f2py/tests/test_return_real.py +109 -0
  579. numpy/f2py/tests/test_routines.py +29 -0
  580. numpy/f2py/tests/test_semicolon_split.py +75 -0
  581. numpy/f2py/tests/test_size.py +45 -0
  582. numpy/f2py/tests/test_string.py +100 -0
  583. numpy/f2py/tests/test_symbolic.py +500 -0
  584. numpy/f2py/tests/test_value_attrspec.py +15 -0
  585. numpy/f2py/tests/util.py +442 -0
  586. numpy/f2py/use_rules.py +99 -0
  587. numpy/f2py/use_rules.pyi +9 -0
  588. numpy/fft/__init__.py +213 -0
  589. numpy/fft/__init__.pyi +38 -0
  590. numpy/fft/_helper.py +235 -0
  591. numpy/fft/_helper.pyi +44 -0
  592. numpy/fft/_pocketfft.py +1693 -0
  593. numpy/fft/_pocketfft.pyi +137 -0
  594. numpy/fft/_pocketfft_umath.pypy311-pp73-darwin.so +0 -0
  595. numpy/fft/tests/__init__.py +0 -0
  596. numpy/fft/tests/test_helper.py +167 -0
  597. numpy/fft/tests/test_pocketfft.py +589 -0
  598. numpy/lib/__init__.py +97 -0
  599. numpy/lib/__init__.pyi +52 -0
  600. numpy/lib/_array_utils_impl.py +62 -0
  601. numpy/lib/_array_utils_impl.pyi +10 -0
  602. numpy/lib/_arraypad_impl.py +926 -0
  603. numpy/lib/_arraypad_impl.pyi +88 -0
  604. numpy/lib/_arraysetops_impl.py +1158 -0
  605. numpy/lib/_arraysetops_impl.pyi +462 -0
  606. numpy/lib/_arrayterator_impl.py +224 -0
  607. numpy/lib/_arrayterator_impl.pyi +45 -0
  608. numpy/lib/_datasource.py +700 -0
  609. numpy/lib/_datasource.pyi +30 -0
  610. numpy/lib/_format_impl.py +1036 -0
  611. numpy/lib/_format_impl.pyi +56 -0
  612. numpy/lib/_function_base_impl.py +5760 -0
  613. numpy/lib/_function_base_impl.pyi +2324 -0
  614. numpy/lib/_histograms_impl.py +1085 -0
  615. numpy/lib/_histograms_impl.pyi +40 -0
  616. numpy/lib/_index_tricks_impl.py +1048 -0
  617. numpy/lib/_index_tricks_impl.pyi +267 -0
  618. numpy/lib/_iotools.py +900 -0
  619. numpy/lib/_iotools.pyi +116 -0
  620. numpy/lib/_nanfunctions_impl.py +2006 -0
  621. numpy/lib/_nanfunctions_impl.pyi +48 -0
  622. numpy/lib/_npyio_impl.py +2583 -0
  623. numpy/lib/_npyio_impl.pyi +299 -0
  624. numpy/lib/_polynomial_impl.py +1465 -0
  625. numpy/lib/_polynomial_impl.pyi +338 -0
  626. numpy/lib/_scimath_impl.py +642 -0
  627. numpy/lib/_scimath_impl.pyi +93 -0
  628. numpy/lib/_shape_base_impl.py +1289 -0
  629. numpy/lib/_shape_base_impl.pyi +236 -0
  630. numpy/lib/_stride_tricks_impl.py +582 -0
  631. numpy/lib/_stride_tricks_impl.pyi +73 -0
  632. numpy/lib/_twodim_base_impl.py +1201 -0
  633. numpy/lib/_twodim_base_impl.pyi +408 -0
  634. numpy/lib/_type_check_impl.py +710 -0
  635. numpy/lib/_type_check_impl.pyi +348 -0
  636. numpy/lib/_ufunclike_impl.py +199 -0
  637. numpy/lib/_ufunclike_impl.pyi +60 -0
  638. numpy/lib/_user_array_impl.py +310 -0
  639. numpy/lib/_user_array_impl.pyi +226 -0
  640. numpy/lib/_utils_impl.py +784 -0
  641. numpy/lib/_utils_impl.pyi +22 -0
  642. numpy/lib/_version.py +153 -0
  643. numpy/lib/_version.pyi +17 -0
  644. numpy/lib/array_utils.py +7 -0
  645. numpy/lib/array_utils.pyi +6 -0
  646. numpy/lib/format.py +24 -0
  647. numpy/lib/format.pyi +24 -0
  648. numpy/lib/introspect.py +94 -0
  649. numpy/lib/introspect.pyi +3 -0
  650. numpy/lib/mixins.py +180 -0
  651. numpy/lib/mixins.pyi +78 -0
  652. numpy/lib/npyio.py +1 -0
  653. numpy/lib/npyio.pyi +5 -0
  654. numpy/lib/recfunctions.py +1681 -0
  655. numpy/lib/recfunctions.pyi +444 -0
  656. numpy/lib/scimath.py +13 -0
  657. numpy/lib/scimath.pyi +12 -0
  658. numpy/lib/stride_tricks.py +1 -0
  659. numpy/lib/stride_tricks.pyi +4 -0
  660. numpy/lib/tests/__init__.py +0 -0
  661. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  662. numpy/lib/tests/data/py2-objarr.npy +0 -0
  663. numpy/lib/tests/data/py2-objarr.npz +0 -0
  664. numpy/lib/tests/data/py3-objarr.npy +0 -0
  665. numpy/lib/tests/data/py3-objarr.npz +0 -0
  666. numpy/lib/tests/data/python3.npy +0 -0
  667. numpy/lib/tests/data/win64python2.npy +0 -0
  668. numpy/lib/tests/test__datasource.py +328 -0
  669. numpy/lib/tests/test__iotools.py +358 -0
  670. numpy/lib/tests/test__version.py +64 -0
  671. numpy/lib/tests/test_array_utils.py +32 -0
  672. numpy/lib/tests/test_arraypad.py +1427 -0
  673. numpy/lib/tests/test_arraysetops.py +1302 -0
  674. numpy/lib/tests/test_arrayterator.py +45 -0
  675. numpy/lib/tests/test_format.py +1054 -0
  676. numpy/lib/tests/test_function_base.py +4750 -0
  677. numpy/lib/tests/test_histograms.py +855 -0
  678. numpy/lib/tests/test_index_tricks.py +693 -0
  679. numpy/lib/tests/test_io.py +2857 -0
  680. numpy/lib/tests/test_loadtxt.py +1099 -0
  681. numpy/lib/tests/test_mixins.py +215 -0
  682. numpy/lib/tests/test_nanfunctions.py +1438 -0
  683. numpy/lib/tests/test_packbits.py +376 -0
  684. numpy/lib/tests/test_polynomial.py +325 -0
  685. numpy/lib/tests/test_recfunctions.py +1042 -0
  686. numpy/lib/tests/test_regression.py +231 -0
  687. numpy/lib/tests/test_shape_base.py +813 -0
  688. numpy/lib/tests/test_stride_tricks.py +655 -0
  689. numpy/lib/tests/test_twodim_base.py +559 -0
  690. numpy/lib/tests/test_type_check.py +473 -0
  691. numpy/lib/tests/test_ufunclike.py +97 -0
  692. numpy/lib/tests/test_utils.py +80 -0
  693. numpy/lib/user_array.py +1 -0
  694. numpy/lib/user_array.pyi +1 -0
  695. numpy/linalg/__init__.py +95 -0
  696. numpy/linalg/__init__.pyi +71 -0
  697. numpy/linalg/_linalg.py +3657 -0
  698. numpy/linalg/_linalg.pyi +548 -0
  699. numpy/linalg/_umath_linalg.pyi +60 -0
  700. numpy/linalg/_umath_linalg.pypy311-pp73-darwin.so +0 -0
  701. numpy/linalg/lapack_lite.pyi +143 -0
  702. numpy/linalg/lapack_lite.pypy311-pp73-darwin.so +0 -0
  703. numpy/linalg/tests/__init__.py +0 -0
  704. numpy/linalg/tests/test_deprecations.py +21 -0
  705. numpy/linalg/tests/test_linalg.py +2442 -0
  706. numpy/linalg/tests/test_regression.py +182 -0
  707. numpy/ma/API_CHANGES.txt +135 -0
  708. numpy/ma/LICENSE +24 -0
  709. numpy/ma/README.rst +236 -0
  710. numpy/ma/__init__.py +53 -0
  711. numpy/ma/__init__.pyi +458 -0
  712. numpy/ma/core.py +8929 -0
  713. numpy/ma/core.pyi +3720 -0
  714. numpy/ma/extras.py +2266 -0
  715. numpy/ma/extras.pyi +297 -0
  716. numpy/ma/mrecords.py +762 -0
  717. numpy/ma/mrecords.pyi +96 -0
  718. numpy/ma/tests/__init__.py +0 -0
  719. numpy/ma/tests/test_arrayobject.py +40 -0
  720. numpy/ma/tests/test_core.py +6008 -0
  721. numpy/ma/tests/test_deprecations.py +65 -0
  722. numpy/ma/tests/test_extras.py +1945 -0
  723. numpy/ma/tests/test_mrecords.py +495 -0
  724. numpy/ma/tests/test_old_ma.py +939 -0
  725. numpy/ma/tests/test_regression.py +83 -0
  726. numpy/ma/tests/test_subclassing.py +469 -0
  727. numpy/ma/testutils.py +294 -0
  728. numpy/ma/testutils.pyi +69 -0
  729. numpy/matlib.py +380 -0
  730. numpy/matlib.pyi +580 -0
  731. numpy/matrixlib/__init__.py +12 -0
  732. numpy/matrixlib/__init__.pyi +3 -0
  733. numpy/matrixlib/defmatrix.py +1119 -0
  734. numpy/matrixlib/defmatrix.pyi +218 -0
  735. numpy/matrixlib/tests/__init__.py +0 -0
  736. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  737. numpy/matrixlib/tests/test_interaction.py +360 -0
  738. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  739. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  740. numpy/matrixlib/tests/test_multiarray.py +17 -0
  741. numpy/matrixlib/tests/test_numeric.py +18 -0
  742. numpy/matrixlib/tests/test_regression.py +31 -0
  743. numpy/polynomial/__init__.py +187 -0
  744. numpy/polynomial/__init__.pyi +31 -0
  745. numpy/polynomial/_polybase.py +1191 -0
  746. numpy/polynomial/_polybase.pyi +262 -0
  747. numpy/polynomial/_polytypes.pyi +501 -0
  748. numpy/polynomial/chebyshev.py +2001 -0
  749. numpy/polynomial/chebyshev.pyi +180 -0
  750. numpy/polynomial/hermite.py +1738 -0
  751. numpy/polynomial/hermite.pyi +106 -0
  752. numpy/polynomial/hermite_e.py +1640 -0
  753. numpy/polynomial/hermite_e.pyi +106 -0
  754. numpy/polynomial/laguerre.py +1673 -0
  755. numpy/polynomial/laguerre.pyi +100 -0
  756. numpy/polynomial/legendre.py +1603 -0
  757. numpy/polynomial/legendre.pyi +100 -0
  758. numpy/polynomial/polynomial.py +1625 -0
  759. numpy/polynomial/polynomial.pyi +109 -0
  760. numpy/polynomial/polyutils.py +759 -0
  761. numpy/polynomial/polyutils.pyi +307 -0
  762. numpy/polynomial/tests/__init__.py +0 -0
  763. numpy/polynomial/tests/test_chebyshev.py +618 -0
  764. numpy/polynomial/tests/test_classes.py +613 -0
  765. numpy/polynomial/tests/test_hermite.py +553 -0
  766. numpy/polynomial/tests/test_hermite_e.py +554 -0
  767. numpy/polynomial/tests/test_laguerre.py +535 -0
  768. numpy/polynomial/tests/test_legendre.py +566 -0
  769. numpy/polynomial/tests/test_polynomial.py +691 -0
  770. numpy/polynomial/tests/test_polyutils.py +123 -0
  771. numpy/polynomial/tests/test_printing.py +557 -0
  772. numpy/polynomial/tests/test_symbol.py +217 -0
  773. numpy/py.typed +0 -0
  774. numpy/random/LICENSE.md +71 -0
  775. numpy/random/__init__.pxd +14 -0
  776. numpy/random/__init__.py +213 -0
  777. numpy/random/__init__.pyi +124 -0
  778. numpy/random/_bounded_integers.pxd +29 -0
  779. numpy/random/_bounded_integers.pyi +1 -0
  780. numpy/random/_bounded_integers.pypy311-pp73-darwin.so +0 -0
  781. numpy/random/_common.pxd +110 -0
  782. numpy/random/_common.pyi +16 -0
  783. numpy/random/_common.pypy311-pp73-darwin.so +0 -0
  784. numpy/random/_examples/cffi/extending.py +44 -0
  785. numpy/random/_examples/cffi/parse.py +53 -0
  786. numpy/random/_examples/cython/extending.pyx +77 -0
  787. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  788. numpy/random/_examples/cython/meson.build +53 -0
  789. numpy/random/_examples/numba/extending.py +86 -0
  790. numpy/random/_examples/numba/extending_distributions.py +67 -0
  791. numpy/random/_generator.pyi +862 -0
  792. numpy/random/_generator.pypy311-pp73-darwin.so +0 -0
  793. numpy/random/_mt19937.pyi +27 -0
  794. numpy/random/_mt19937.pypy311-pp73-darwin.so +0 -0
  795. numpy/random/_pcg64.pyi +41 -0
  796. numpy/random/_pcg64.pypy311-pp73-darwin.so +0 -0
  797. numpy/random/_philox.pyi +36 -0
  798. numpy/random/_philox.pypy311-pp73-darwin.so +0 -0
  799. numpy/random/_pickle.py +88 -0
  800. numpy/random/_pickle.pyi +43 -0
  801. numpy/random/_sfc64.pyi +25 -0
  802. numpy/random/_sfc64.pypy311-pp73-darwin.so +0 -0
  803. numpy/random/bit_generator.pxd +40 -0
  804. numpy/random/bit_generator.pyi +123 -0
  805. numpy/random/bit_generator.pypy311-pp73-darwin.so +0 -0
  806. numpy/random/c_distributions.pxd +119 -0
  807. numpy/random/lib/libnpyrandom.a +0 -0
  808. numpy/random/mtrand.pyi +759 -0
  809. numpy/random/mtrand.pypy311-pp73-darwin.so +0 -0
  810. numpy/random/tests/__init__.py +0 -0
  811. numpy/random/tests/data/__init__.py +0 -0
  812. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  813. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  814. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  815. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  816. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  817. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  818. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  819. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  820. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  821. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  822. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  823. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  824. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  825. numpy/random/tests/test_direct.py +595 -0
  826. numpy/random/tests/test_extending.py +131 -0
  827. numpy/random/tests/test_generator_mt19937.py +2825 -0
  828. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  829. numpy/random/tests/test_random.py +1724 -0
  830. numpy/random/tests/test_randomstate.py +2099 -0
  831. numpy/random/tests/test_randomstate_regression.py +213 -0
  832. numpy/random/tests/test_regression.py +175 -0
  833. numpy/random/tests/test_seed_sequence.py +79 -0
  834. numpy/random/tests/test_smoke.py +882 -0
  835. numpy/rec/__init__.py +2 -0
  836. numpy/rec/__init__.pyi +23 -0
  837. numpy/strings/__init__.py +2 -0
  838. numpy/strings/__init__.pyi +97 -0
  839. numpy/testing/__init__.py +22 -0
  840. numpy/testing/__init__.pyi +107 -0
  841. numpy/testing/_private/__init__.py +0 -0
  842. numpy/testing/_private/__init__.pyi +0 -0
  843. numpy/testing/_private/extbuild.py +250 -0
  844. numpy/testing/_private/extbuild.pyi +25 -0
  845. numpy/testing/_private/utils.py +2830 -0
  846. numpy/testing/_private/utils.pyi +505 -0
  847. numpy/testing/overrides.py +84 -0
  848. numpy/testing/overrides.pyi +10 -0
  849. numpy/testing/print_coercion_tables.py +207 -0
  850. numpy/testing/print_coercion_tables.pyi +26 -0
  851. numpy/testing/tests/__init__.py +0 -0
  852. numpy/testing/tests/test_utils.py +2123 -0
  853. numpy/tests/__init__.py +0 -0
  854. numpy/tests/test__all__.py +10 -0
  855. numpy/tests/test_configtool.py +51 -0
  856. numpy/tests/test_ctypeslib.py +383 -0
  857. numpy/tests/test_lazyloading.py +42 -0
  858. numpy/tests/test_matlib.py +59 -0
  859. numpy/tests/test_numpy_config.py +47 -0
  860. numpy/tests/test_numpy_version.py +54 -0
  861. numpy/tests/test_public_api.py +807 -0
  862. numpy/tests/test_reloading.py +76 -0
  863. numpy/tests/test_scripts.py +48 -0
  864. numpy/tests/test_warnings.py +79 -0
  865. numpy/typing/__init__.py +233 -0
  866. numpy/typing/__init__.pyi +3 -0
  867. numpy/typing/mypy_plugin.py +200 -0
  868. numpy/typing/tests/__init__.py +0 -0
  869. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  870. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  871. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  872. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  873. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  874. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  875. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  876. numpy/typing/tests/data/fail/char.pyi +63 -0
  877. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  878. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  879. numpy/typing/tests/data/fail/constants.pyi +3 -0
  880. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  881. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  882. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  883. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  884. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  885. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  886. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  887. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  888. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  889. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  890. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  891. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  892. numpy/typing/tests/data/fail/ma.pyi +155 -0
  893. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  894. numpy/typing/tests/data/fail/modules.pyi +17 -0
  895. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  896. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  897. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  898. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  899. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  900. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  901. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  902. numpy/typing/tests/data/fail/random.pyi +62 -0
  903. numpy/typing/tests/data/fail/rec.pyi +17 -0
  904. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  905. numpy/typing/tests/data/fail/shape.pyi +7 -0
  906. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  907. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  908. numpy/typing/tests/data/fail/strings.pyi +52 -0
  909. numpy/typing/tests/data/fail/testing.pyi +28 -0
  910. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  911. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  912. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  913. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  914. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  915. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  916. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  917. numpy/typing/tests/data/mypy.ini +8 -0
  918. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  919. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  920. numpy/typing/tests/data/pass/array_like.py +43 -0
  921. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  922. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  923. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  924. numpy/typing/tests/data/pass/comparisons.py +316 -0
  925. numpy/typing/tests/data/pass/dtype.py +57 -0
  926. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  927. numpy/typing/tests/data/pass/flatiter.py +26 -0
  928. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  929. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  930. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  931. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  932. numpy/typing/tests/data/pass/lib_version.py +18 -0
  933. numpy/typing/tests/data/pass/literal.py +52 -0
  934. numpy/typing/tests/data/pass/ma.py +199 -0
  935. numpy/typing/tests/data/pass/mod.py +149 -0
  936. numpy/typing/tests/data/pass/modules.py +45 -0
  937. numpy/typing/tests/data/pass/multiarray.py +77 -0
  938. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  939. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  940. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  941. numpy/typing/tests/data/pass/nditer.py +4 -0
  942. numpy/typing/tests/data/pass/numeric.py +90 -0
  943. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  944. numpy/typing/tests/data/pass/random.py +1498 -0
  945. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  946. numpy/typing/tests/data/pass/scalars.py +249 -0
  947. numpy/typing/tests/data/pass/shape.py +19 -0
  948. numpy/typing/tests/data/pass/simple.py +170 -0
  949. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  950. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  951. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  952. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  953. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  954. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  955. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  956. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  957. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  958. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  959. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  960. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  961. numpy/typing/tests/data/reveal/char.pyi +225 -0
  962. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  963. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  964. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  965. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  966. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  967. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  968. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  969. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  970. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  971. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  972. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  973. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  974. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  975. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  976. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  977. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  978. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  979. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  980. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  981. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  982. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  983. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  984. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  985. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  986. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  987. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  988. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  989. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  990. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  991. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  992. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  993. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  994. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  995. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  996. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  997. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  998. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  999. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  1000. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  1001. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  1002. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  1003. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  1004. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  1005. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  1006. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  1007. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  1008. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  1009. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  1010. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  1011. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  1012. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  1013. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  1014. numpy/typing/tests/test_isfile.py +38 -0
  1015. numpy/typing/tests/test_runtime.py +110 -0
  1016. numpy/typing/tests/test_typing.py +205 -0
  1017. numpy/version.py +11 -0
  1018. numpy/version.pyi +9 -0
  1019. numpy-2.4.1.dist-info/METADATA +139 -0
  1020. numpy-2.4.1.dist-info/RECORD +1039 -0
  1021. numpy-2.4.1.dist-info/WHEEL +6 -0
  1022. numpy-2.4.1.dist-info/entry_points.txt +13 -0
  1023. numpy-2.4.1.dist-info/licenses/LICENSE.txt +935 -0
  1024. numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  1025. numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  1026. numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  1027. numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  1028. numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  1029. numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  1030. numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  1031. numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  1032. numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
  1033. numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  1034. numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  1035. numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  1036. numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  1037. numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  1038. numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  1039. numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
@@ -0,0 +1,968 @@
1
+ """
2
+ A place for internal code
3
+
4
+ Some things are more easily handled Python.
5
+
6
+ """
7
+ import ast
8
+ import math
9
+ import re
10
+ import sys
11
+ import warnings
12
+
13
+ from numpy import _NoValue
14
+ from numpy.exceptions import DTypePromotionError
15
+
16
+ from .multiarray import StringDType, array, dtype, promote_types
17
+
18
+ try:
19
+ import ctypes
20
+ except ImportError:
21
+ ctypes = None
22
+
23
+ IS_PYPY = sys.implementation.name == 'pypy'
24
+
25
+ if sys.byteorder == 'little':
26
+ _nbo = '<'
27
+ else:
28
+ _nbo = '>'
29
+
30
+ def _makenames_list(adict, align):
31
+ allfields = []
32
+
33
+ for fname, obj in adict.items():
34
+ n = len(obj)
35
+ if not isinstance(obj, tuple) or n not in (2, 3):
36
+ raise ValueError("entry not a 2- or 3- tuple")
37
+ if n > 2 and obj[2] == fname:
38
+ continue
39
+ num = int(obj[1])
40
+ if num < 0:
41
+ raise ValueError("invalid offset.")
42
+ format = dtype(obj[0], align=align)
43
+ if n > 2:
44
+ title = obj[2]
45
+ else:
46
+ title = None
47
+ allfields.append((fname, format, num, title))
48
+ # sort by offsets
49
+ allfields.sort(key=lambda x: x[2])
50
+ names = [x[0] for x in allfields]
51
+ formats = [x[1] for x in allfields]
52
+ offsets = [x[2] for x in allfields]
53
+ titles = [x[3] for x in allfields]
54
+
55
+ return names, formats, offsets, titles
56
+
57
+ # Called in PyArray_DescrConverter function when
58
+ # a dictionary without "names" and "formats"
59
+ # fields is used as a data-type descriptor.
60
+ def _usefields(adict, align):
61
+ try:
62
+ names = adict[-1]
63
+ except KeyError:
64
+ names = None
65
+ if names is None:
66
+ names, formats, offsets, titles = _makenames_list(adict, align)
67
+ else:
68
+ formats = []
69
+ offsets = []
70
+ titles = []
71
+ for name in names:
72
+ res = adict[name]
73
+ formats.append(res[0])
74
+ offsets.append(res[1])
75
+ if len(res) > 2:
76
+ titles.append(res[2])
77
+ else:
78
+ titles.append(None)
79
+
80
+ return dtype({"names": names,
81
+ "formats": formats,
82
+ "offsets": offsets,
83
+ "titles": titles}, align)
84
+
85
+
86
+ # construct an array_protocol descriptor list
87
+ # from the fields attribute of a descriptor
88
+ # This calls itself recursively but should eventually hit
89
+ # a descriptor that has no fields and then return
90
+ # a simple typestring
91
+
92
+ def _array_descr(descriptor):
93
+ fields = descriptor.fields
94
+ if fields is None:
95
+ subdtype = descriptor.subdtype
96
+ if subdtype is None:
97
+ if descriptor.metadata is None:
98
+ return descriptor.str
99
+ else:
100
+ new = descriptor.metadata.copy()
101
+ if new:
102
+ return (descriptor.str, new)
103
+ else:
104
+ return descriptor.str
105
+ else:
106
+ return (_array_descr(subdtype[0]), subdtype[1])
107
+
108
+ names = descriptor.names
109
+ ordered_fields = [fields[x] + (x,) for x in names]
110
+ result = []
111
+ offset = 0
112
+ for field in ordered_fields:
113
+ if field[1] > offset:
114
+ num = field[1] - offset
115
+ result.append(('', f'|V{num}'))
116
+ offset += num
117
+ elif field[1] < offset:
118
+ raise ValueError(
119
+ "dtype.descr is not defined for types with overlapping or "
120
+ "out-of-order fields")
121
+ if len(field) > 3:
122
+ name = (field[2], field[3])
123
+ else:
124
+ name = field[2]
125
+ if field[0].subdtype:
126
+ tup = (name, _array_descr(field[0].subdtype[0]),
127
+ field[0].subdtype[1])
128
+ else:
129
+ tup = (name, _array_descr(field[0]))
130
+ offset += field[0].itemsize
131
+ result.append(tup)
132
+
133
+ if descriptor.itemsize > offset:
134
+ num = descriptor.itemsize - offset
135
+ result.append(('', f'|V{num}'))
136
+
137
+ return result
138
+
139
+
140
+ # format_re was originally from numarray by J. Todd Miller
141
+
142
+ format_re = re.compile(r'(?P<order1>[<>|=]?)'
143
+ r'(?P<repeats> *[(]?[ ,0-9]*[)]? *)'
144
+ r'(?P<order2>[<>|=]?)'
145
+ r'(?P<dtype>[A-Za-z0-9.?]*(?:\[[a-zA-Z0-9,.]+\])?)')
146
+ sep_re = re.compile(r'\s*,\s*')
147
+ space_re = re.compile(r'\s+$')
148
+
149
+ # astr is a string (perhaps comma separated)
150
+
151
+ _convorder = {'=': _nbo}
152
+
153
+ def _commastring(astr):
154
+ startindex = 0
155
+ result = []
156
+ islist = False
157
+ while startindex < len(astr):
158
+ mo = format_re.match(astr, pos=startindex)
159
+ try:
160
+ (order1, repeats, order2, dtype) = mo.groups()
161
+ except (TypeError, AttributeError):
162
+ raise ValueError(
163
+ f'format number {len(result) + 1} of "{astr}" is not recognized'
164
+ ) from None
165
+ startindex = mo.end()
166
+ # Separator or ending padding
167
+ if startindex < len(astr):
168
+ if space_re.match(astr, pos=startindex):
169
+ startindex = len(astr)
170
+ else:
171
+ mo = sep_re.match(astr, pos=startindex)
172
+ if not mo:
173
+ raise ValueError(
174
+ 'format number %d of "%s" is not recognized' %
175
+ (len(result) + 1, astr))
176
+ startindex = mo.end()
177
+ islist = True
178
+
179
+ if order2 == '':
180
+ order = order1
181
+ elif order1 == '':
182
+ order = order2
183
+ else:
184
+ order1 = _convorder.get(order1, order1)
185
+ order2 = _convorder.get(order2, order2)
186
+ if (order1 != order2):
187
+ raise ValueError(
188
+ f'inconsistent byte-order specification {order1} and {order2}')
189
+ order = order1
190
+
191
+ if order in ('|', '=', _nbo):
192
+ order = ''
193
+ dtype = order + dtype
194
+ if repeats == '':
195
+ newitem = dtype
196
+ else:
197
+ if (repeats[0] == "(" and repeats[-1] == ")"
198
+ and repeats[1:-1].strip() != ""
199
+ and "," not in repeats):
200
+ warnings.warn(
201
+ 'Passing in a parenthesized single number for repeats '
202
+ 'is deprecated; pass either a single number or indicate '
203
+ 'a tuple with a comma, like "(2,)".', DeprecationWarning,
204
+ stacklevel=2)
205
+ newitem = (dtype, ast.literal_eval(repeats))
206
+
207
+ result.append(newitem)
208
+
209
+ return result if islist else result[0]
210
+
211
+ class dummy_ctype:
212
+
213
+ def __init__(self, cls):
214
+ self._cls = cls
215
+
216
+ def __mul__(self, other):
217
+ return self
218
+
219
+ def __call__(self, *other):
220
+ return self._cls(other)
221
+
222
+ def __eq__(self, other):
223
+ return self._cls == other._cls
224
+
225
+ def __ne__(self, other):
226
+ return self._cls != other._cls
227
+
228
+ def _getintp_ctype():
229
+ val = _getintp_ctype.cache
230
+ if val is not None:
231
+ return val
232
+ if ctypes is None:
233
+ import numpy as np
234
+ val = dummy_ctype(np.intp)
235
+ else:
236
+ char = dtype('n').char
237
+ if char == 'i':
238
+ val = ctypes.c_int
239
+ elif char == 'l':
240
+ val = ctypes.c_long
241
+ elif char == 'q':
242
+ val = ctypes.c_longlong
243
+ else:
244
+ val = ctypes.c_long
245
+ _getintp_ctype.cache = val
246
+ return val
247
+
248
+
249
+ _getintp_ctype.cache = None
250
+
251
+ # Used for .ctypes attribute of ndarray
252
+
253
+ class _missing_ctypes:
254
+ def cast(self, num, obj):
255
+ return num.value
256
+
257
+ class c_void_p:
258
+ def __init__(self, ptr):
259
+ self.value = ptr
260
+
261
+
262
+ class _ctypes:
263
+ def __init__(self, array, ptr=None):
264
+ self._arr = array
265
+
266
+ if ctypes:
267
+ self._ctypes = ctypes
268
+ self._data = self._ctypes.c_void_p(ptr)
269
+ else:
270
+ # fake a pointer-like object that holds onto the reference
271
+ self._ctypes = _missing_ctypes()
272
+ self._data = self._ctypes.c_void_p(ptr)
273
+ self._data._objects = array
274
+
275
+ if self._arr.ndim == 0:
276
+ self._zerod = True
277
+ else:
278
+ self._zerod = False
279
+
280
+ def data_as(self, obj):
281
+ """
282
+ Return the data pointer cast to a particular c-types object.
283
+ For example, calling ``self._as_parameter_`` is equivalent to
284
+ ``self.data_as(ctypes.c_void_p)``. Perhaps you want to use
285
+ the data as a pointer to a ctypes array of floating-point data:
286
+ ``self.data_as(ctypes.POINTER(ctypes.c_double))``.
287
+
288
+ The returned pointer will keep a reference to the array.
289
+ """
290
+ # _ctypes.cast function causes a circular reference of self._data in
291
+ # self._data._objects. Attributes of self._data cannot be released
292
+ # until gc.collect is called. Make a copy of the pointer first then
293
+ # let it hold the array reference. This is a workaround to circumvent
294
+ # the CPython bug https://bugs.python.org/issue12836.
295
+ ptr = self._ctypes.cast(self._data, obj)
296
+ ptr._arr = self._arr
297
+ return ptr
298
+
299
+ def shape_as(self, obj):
300
+ """
301
+ Return the shape tuple as an array of some other c-types
302
+ type. For example: ``self.shape_as(ctypes.c_short)``.
303
+ """
304
+ if self._zerod:
305
+ return None
306
+ return (obj * self._arr.ndim)(*self._arr.shape)
307
+
308
+ def strides_as(self, obj):
309
+ """
310
+ Return the strides tuple as an array of some other
311
+ c-types type. For example: ``self.strides_as(ctypes.c_longlong)``.
312
+ """
313
+ if self._zerod:
314
+ return None
315
+ return (obj * self._arr.ndim)(*self._arr.strides)
316
+
317
+ @property
318
+ def data(self):
319
+ """
320
+ A pointer to the memory area of the array as a Python integer.
321
+ This memory area may contain data that is not aligned, or not in
322
+ correct byte-order. The memory area may not even be writeable.
323
+ The array flags and data-type of this array should be respected
324
+ when passing this attribute to arbitrary C-code to avoid trouble
325
+ that can include Python crashing. User Beware! The value of this
326
+ attribute is exactly the same as:
327
+ ``self._array_interface_['data'][0]``.
328
+
329
+ Note that unlike ``data_as``, a reference won't be kept to the array:
330
+ code like ``ctypes.c_void_p((a + b).ctypes.data)`` will result in a
331
+ pointer to a deallocated array, and should be spelt
332
+ ``(a + b).ctypes.data_as(ctypes.c_void_p)``
333
+ """
334
+ return self._data.value
335
+
336
+ @property
337
+ def shape(self):
338
+ """
339
+ (c_intp*self.ndim): A ctypes array of length self.ndim where
340
+ the basetype is the C-integer corresponding to ``dtype('p')`` on this
341
+ platform (see `~numpy.ctypeslib.c_intp`). This base-type could be
342
+ `ctypes.c_int`, `ctypes.c_long`, or `ctypes.c_longlong` depending on
343
+ the platform. The ctypes array contains the shape of
344
+ the underlying array.
345
+ """
346
+ return self.shape_as(_getintp_ctype())
347
+
348
+ @property
349
+ def strides(self):
350
+ """
351
+ (c_intp*self.ndim): A ctypes array of length self.ndim where
352
+ the basetype is the same as for the shape attribute. This ctypes
353
+ array contains the strides information from the underlying array.
354
+ This strides information is important for showing how many bytes
355
+ must be jumped to get to the next element in the array.
356
+ """
357
+ return self.strides_as(_getintp_ctype())
358
+
359
+ @property
360
+ def _as_parameter_(self):
361
+ """
362
+ Overrides the ctypes semi-magic method
363
+
364
+ Enables `c_func(some_array.ctypes)`
365
+ """
366
+ return self.data_as(ctypes.c_void_p)
367
+
368
+
369
+ def _newnames(datatype, order):
370
+ """
371
+ Given a datatype and an order object, return a new names tuple, with the
372
+ order indicated
373
+ """
374
+ oldnames = datatype.names
375
+ nameslist = list(oldnames)
376
+ if isinstance(order, str):
377
+ order = [order]
378
+ seen = set()
379
+ if isinstance(order, (list, tuple)):
380
+ for name in order:
381
+ try:
382
+ nameslist.remove(name)
383
+ except ValueError:
384
+ if name in seen:
385
+ raise ValueError(f"duplicate field name: {name}") from None
386
+ else:
387
+ raise ValueError(f"unknown field name: {name}") from None
388
+ seen.add(name)
389
+ return tuple(list(order) + nameslist)
390
+ raise ValueError(f"unsupported order value: {order}")
391
+
392
+ def _copy_fields(ary):
393
+ """Return copy of structured array with padding between fields removed.
394
+
395
+ Parameters
396
+ ----------
397
+ ary : ndarray
398
+ Structured array from which to remove padding bytes
399
+
400
+ Returns
401
+ -------
402
+ ary_copy : ndarray
403
+ Copy of ary with padding bytes removed
404
+ """
405
+ dt = ary.dtype
406
+ copy_dtype = {'names': dt.names,
407
+ 'formats': [dt.fields[name][0] for name in dt.names]}
408
+ return array(ary, dtype=copy_dtype, copy=True)
409
+
410
+ def _promote_fields(dt1, dt2):
411
+ """ Perform type promotion for two structured dtypes.
412
+
413
+ Parameters
414
+ ----------
415
+ dt1 : structured dtype
416
+ First dtype.
417
+ dt2 : structured dtype
418
+ Second dtype.
419
+
420
+ Returns
421
+ -------
422
+ out : dtype
423
+ The promoted dtype
424
+
425
+ Notes
426
+ -----
427
+ If one of the inputs is aligned, the result will be. The titles of
428
+ both descriptors must match (point to the same field).
429
+ """
430
+ # Both must be structured and have the same names in the same order
431
+ if (dt1.names is None or dt2.names is None) or dt1.names != dt2.names:
432
+ raise DTypePromotionError(
433
+ f"field names `{dt1.names}` and `{dt2.names}` mismatch.")
434
+
435
+ # if both are identical, we can (maybe!) just return the same dtype.
436
+ identical = dt1 is dt2
437
+ new_fields = []
438
+ for name in dt1.names:
439
+ field1 = dt1.fields[name]
440
+ field2 = dt2.fields[name]
441
+ new_descr = promote_types(field1[0], field2[0])
442
+ identical = identical and new_descr is field1[0]
443
+
444
+ # Check that the titles match (if given):
445
+ if field1[2:] != field2[2:]:
446
+ raise DTypePromotionError(
447
+ f"field titles of field '{name}' mismatch")
448
+ if len(field1) == 2:
449
+ new_fields.append((name, new_descr))
450
+ else:
451
+ new_fields.append(((field1[2], name), new_descr))
452
+
453
+ res = dtype(new_fields, align=dt1.isalignedstruct or dt2.isalignedstruct)
454
+
455
+ # Might as well preserve identity (and metadata) if the dtype is identical
456
+ # and the itemsize, offsets are also unmodified. This could probably be
457
+ # sped up, but also probably just be removed entirely.
458
+ if identical and res.itemsize == dt1.itemsize:
459
+ for name in dt1.names:
460
+ if dt1.fields[name][1] != res.fields[name][1]:
461
+ return res # the dtype changed.
462
+ return dt1
463
+
464
+ return res
465
+
466
+
467
+ def _getfield_is_safe(oldtype, newtype, offset):
468
+ """ Checks safety of getfield for object arrays.
469
+
470
+ As in _view_is_safe, we need to check that memory containing objects is not
471
+ reinterpreted as a non-object datatype and vice versa.
472
+
473
+ Parameters
474
+ ----------
475
+ oldtype : data-type
476
+ Data type of the original ndarray.
477
+ newtype : data-type
478
+ Data type of the field being accessed by ndarray.getfield
479
+ offset : int
480
+ Offset of the field being accessed by ndarray.getfield
481
+
482
+ Raises
483
+ ------
484
+ TypeError
485
+ If the field access is invalid
486
+
487
+ """
488
+ if newtype.hasobject or oldtype.hasobject:
489
+ if offset == 0 and newtype == oldtype:
490
+ return
491
+ if oldtype.names is not None:
492
+ for name in oldtype.names:
493
+ if (oldtype.fields[name][1] == offset and
494
+ oldtype.fields[name][0] == newtype):
495
+ return
496
+ raise TypeError("Cannot get/set field of an object array")
497
+ return
498
+
499
+ def _view_is_safe(oldtype, newtype):
500
+ """ Checks safety of a view involving object arrays, for example when
501
+ doing::
502
+
503
+ np.zeros(10, dtype=oldtype).view(newtype)
504
+
505
+ Parameters
506
+ ----------
507
+ oldtype : data-type
508
+ Data type of original ndarray
509
+ newtype : data-type
510
+ Data type of the view
511
+
512
+ Raises
513
+ ------
514
+ TypeError
515
+ If the new type is incompatible with the old type.
516
+
517
+ """
518
+
519
+ # if the types are equivalent, there is no problem.
520
+ # for example: dtype((np.record, 'i4,i4')) == dtype((np.void, 'i4,i4'))
521
+ if oldtype == newtype:
522
+ return
523
+
524
+ if newtype.hasobject or oldtype.hasobject:
525
+ raise TypeError("Cannot change data-type for array of references.")
526
+ return
527
+
528
+
529
+ # Given a string containing a PEP 3118 format specifier,
530
+ # construct a NumPy dtype
531
+
532
+ _pep3118_native_map = {
533
+ '?': '?',
534
+ 'c': 'S1',
535
+ 'b': 'b',
536
+ 'B': 'B',
537
+ 'h': 'h',
538
+ 'H': 'H',
539
+ 'i': 'i',
540
+ 'I': 'I',
541
+ 'l': 'l',
542
+ 'L': 'L',
543
+ 'q': 'q',
544
+ 'Q': 'Q',
545
+ 'e': 'e',
546
+ 'f': 'f',
547
+ 'd': 'd',
548
+ 'g': 'g',
549
+ 'Zf': 'F',
550
+ 'Zd': 'D',
551
+ 'Zg': 'G',
552
+ 's': 'S',
553
+ 'w': 'U',
554
+ 'O': 'O',
555
+ 'x': 'V', # padding
556
+ }
557
+ _pep3118_native_typechars = ''.join(_pep3118_native_map.keys())
558
+
559
+ _pep3118_standard_map = {
560
+ '?': '?',
561
+ 'c': 'S1',
562
+ 'b': 'b',
563
+ 'B': 'B',
564
+ 'h': 'i2',
565
+ 'H': 'u2',
566
+ 'i': 'i4',
567
+ 'I': 'u4',
568
+ 'l': 'i4',
569
+ 'L': 'u4',
570
+ 'q': 'i8',
571
+ 'Q': 'u8',
572
+ 'e': 'f2',
573
+ 'f': 'f',
574
+ 'd': 'd',
575
+ 'Zf': 'F',
576
+ 'Zd': 'D',
577
+ 's': 'S',
578
+ 'w': 'U',
579
+ 'O': 'O',
580
+ 'x': 'V', # padding
581
+ }
582
+ _pep3118_standard_typechars = ''.join(_pep3118_standard_map.keys())
583
+
584
+ _pep3118_unsupported_map = {
585
+ 'u': 'UCS-2 strings',
586
+ '&': 'pointers',
587
+ 't': 'bitfields',
588
+ 'X': 'function pointers',
589
+ }
590
+
591
+ class _Stream:
592
+ def __init__(self, s):
593
+ self.s = s
594
+ self.byteorder = '@'
595
+
596
+ def advance(self, n):
597
+ res = self.s[:n]
598
+ self.s = self.s[n:]
599
+ return res
600
+
601
+ def consume(self, c):
602
+ if self.s[:len(c)] == c:
603
+ self.advance(len(c))
604
+ return True
605
+ return False
606
+
607
+ def consume_until(self, c):
608
+ if callable(c):
609
+ i = 0
610
+ while i < len(self.s) and not c(self.s[i]):
611
+ i = i + 1
612
+ return self.advance(i)
613
+ else:
614
+ i = self.s.index(c)
615
+ res = self.advance(i)
616
+ self.advance(len(c))
617
+ return res
618
+
619
+ @property
620
+ def next(self):
621
+ return self.s[0]
622
+
623
+ def __bool__(self):
624
+ return bool(self.s)
625
+
626
+
627
+ def _dtype_from_pep3118(spec):
628
+ stream = _Stream(spec)
629
+ dtype, align = __dtype_from_pep3118(stream, is_subdtype=False)
630
+ return dtype
631
+
632
+ def __dtype_from_pep3118(stream, is_subdtype):
633
+ field_spec = {
634
+ 'names': [],
635
+ 'formats': [],
636
+ 'offsets': [],
637
+ 'itemsize': 0
638
+ }
639
+ offset = 0
640
+ common_alignment = 1
641
+ is_padding = False
642
+
643
+ # Parse spec
644
+ while stream:
645
+ value = None
646
+
647
+ # End of structure, bail out to upper level
648
+ if stream.consume('}'):
649
+ break
650
+
651
+ # Sub-arrays (1)
652
+ shape = None
653
+ if stream.consume('('):
654
+ shape = stream.consume_until(')')
655
+ shape = tuple(map(int, shape.split(',')))
656
+
657
+ # Byte order
658
+ if stream.next in ('@', '=', '<', '>', '^', '!'):
659
+ byteorder = stream.advance(1)
660
+ if byteorder == '!':
661
+ byteorder = '>'
662
+ stream.byteorder = byteorder
663
+
664
+ # Byte order characters also control native vs. standard type sizes
665
+ if stream.byteorder in ('@', '^'):
666
+ type_map = _pep3118_native_map
667
+ type_map_chars = _pep3118_native_typechars
668
+ else:
669
+ type_map = _pep3118_standard_map
670
+ type_map_chars = _pep3118_standard_typechars
671
+
672
+ # Item sizes
673
+ itemsize_str = stream.consume_until(lambda c: not c.isdigit())
674
+ if itemsize_str:
675
+ itemsize = int(itemsize_str)
676
+ else:
677
+ itemsize = 1
678
+
679
+ # Data types
680
+ is_padding = False
681
+
682
+ if stream.consume('T{'):
683
+ value, align = __dtype_from_pep3118(
684
+ stream, is_subdtype=True)
685
+ elif stream.next in type_map_chars:
686
+ if stream.next == 'Z':
687
+ typechar = stream.advance(2)
688
+ else:
689
+ typechar = stream.advance(1)
690
+
691
+ is_padding = (typechar == 'x')
692
+ dtypechar = type_map[typechar]
693
+ if dtypechar in 'USV':
694
+ dtypechar += '%d' % itemsize
695
+ itemsize = 1
696
+ numpy_byteorder = {'@': '=', '^': '='}.get(
697
+ stream.byteorder, stream.byteorder)
698
+ value = dtype(numpy_byteorder + dtypechar)
699
+ align = value.alignment
700
+ elif stream.next in _pep3118_unsupported_map:
701
+ desc = _pep3118_unsupported_map[stream.next]
702
+ raise NotImplementedError(
703
+ f"Unrepresentable PEP 3118 data type {stream.next!r} ({desc})")
704
+ else:
705
+ raise ValueError(
706
+ f"Unknown PEP 3118 data type specifier {stream.s!r}"
707
+ )
708
+
709
+ #
710
+ # Native alignment may require padding
711
+ #
712
+ # Here we assume that the presence of a '@' character implicitly
713
+ # implies that the start of the array is *already* aligned.
714
+ #
715
+ extra_offset = 0
716
+ if stream.byteorder == '@':
717
+ start_padding = (-offset) % align
718
+ intra_padding = (-value.itemsize) % align
719
+
720
+ offset += start_padding
721
+
722
+ if intra_padding != 0:
723
+ if itemsize > 1 or (shape is not None and _prod(shape) > 1):
724
+ # Inject internal padding to the end of the sub-item
725
+ value = _add_trailing_padding(value, intra_padding)
726
+ else:
727
+ # We can postpone the injection of internal padding,
728
+ # as the item appears at most once
729
+ extra_offset += intra_padding
730
+
731
+ # Update common alignment
732
+ common_alignment = _lcm(align, common_alignment)
733
+
734
+ # Convert itemsize to sub-array
735
+ if itemsize != 1:
736
+ value = dtype((value, (itemsize,)))
737
+
738
+ # Sub-arrays (2)
739
+ if shape is not None:
740
+ value = dtype((value, shape))
741
+
742
+ # Field name
743
+ if stream.consume(':'):
744
+ name = stream.consume_until(':')
745
+ else:
746
+ name = None
747
+
748
+ if not (is_padding and name is None):
749
+ if name is not None and name in field_spec['names']:
750
+ raise RuntimeError(
751
+ f"Duplicate field name '{name}' in PEP3118 format"
752
+ )
753
+ field_spec['names'].append(name)
754
+ field_spec['formats'].append(value)
755
+ field_spec['offsets'].append(offset)
756
+
757
+ offset += value.itemsize
758
+ offset += extra_offset
759
+
760
+ field_spec['itemsize'] = offset
761
+
762
+ # extra final padding for aligned types
763
+ if stream.byteorder == '@':
764
+ field_spec['itemsize'] += (-offset) % common_alignment
765
+
766
+ # Check if this was a simple 1-item type, and unwrap it
767
+ if (field_spec['names'] == [None]
768
+ and field_spec['offsets'][0] == 0
769
+ and field_spec['itemsize'] == field_spec['formats'][0].itemsize
770
+ and not is_subdtype):
771
+ ret = field_spec['formats'][0]
772
+ else:
773
+ _fix_names(field_spec)
774
+ ret = dtype(field_spec)
775
+
776
+ # Finished
777
+ return ret, common_alignment
778
+
779
+ def _fix_names(field_spec):
780
+ """ Replace names which are None with the next unused f%d name """
781
+ names = field_spec['names']
782
+ for i, name in enumerate(names):
783
+ if name is not None:
784
+ continue
785
+
786
+ j = 0
787
+ while True:
788
+ name = f'f{j}'
789
+ if name not in names:
790
+ break
791
+ j = j + 1
792
+ names[i] = name
793
+
794
+ def _add_trailing_padding(value, padding):
795
+ """Inject the specified number of padding bytes at the end of a dtype"""
796
+ if value.fields is None:
797
+ field_spec = {
798
+ 'names': ['f0'],
799
+ 'formats': [value],
800
+ 'offsets': [0],
801
+ 'itemsize': value.itemsize
802
+ }
803
+ else:
804
+ fields = value.fields
805
+ names = value.names
806
+ field_spec = {
807
+ 'names': names,
808
+ 'formats': [fields[name][0] for name in names],
809
+ 'offsets': [fields[name][1] for name in names],
810
+ 'itemsize': value.itemsize
811
+ }
812
+
813
+ field_spec['itemsize'] += padding
814
+ return dtype(field_spec)
815
+
816
+ def _prod(a):
817
+ p = 1
818
+ for x in a:
819
+ p *= x
820
+ return p
821
+
822
+ def _gcd(a, b):
823
+ """Calculate the greatest common divisor of a and b"""
824
+ if not (math.isfinite(a) and math.isfinite(b)):
825
+ raise ValueError('Can only find greatest common divisor of '
826
+ f'finite arguments, found "{a}" and "{b}"')
827
+ while b:
828
+ a, b = b, a % b
829
+ return a
830
+
831
+ def _lcm(a, b):
832
+ return a // _gcd(a, b) * b
833
+
834
+ def array_ufunc_errmsg_formatter(dummy, ufunc, method, *inputs, **kwargs):
835
+ """ Format the error message for when __array_ufunc__ gives up. """
836
+ args_string = ', '.join([f'{arg!r}' for arg in inputs] +
837
+ [f'{k}={v!r}'
838
+ for k, v in kwargs.items()])
839
+ args = inputs + kwargs.get('out', ())
840
+ types_string = ', '.join(repr(type(arg).__name__) for arg in args)
841
+ return ('operand type(s) all returned NotImplemented from '
842
+ f'__array_ufunc__({ufunc!r}, {method!r}, {args_string}): {types_string}'
843
+ )
844
+
845
+
846
+ def array_function_errmsg_formatter(public_api, types):
847
+ """ Format the error message for when __array_ufunc__ gives up. """
848
+ func_name = f'{public_api.__module__}.{public_api.__name__}'
849
+ return (f"no implementation found for '{func_name}' on types that implement "
850
+ f'__array_function__: {list(types)}')
851
+
852
+
853
+ def _ufunc_doc_signature_formatter(ufunc):
854
+ """
855
+ Builds a signature string which resembles PEP 457
856
+
857
+ This is used to construct the first line of the docstring
858
+
859
+ Keep in sync with `_ufunc_inspect_signature_builder`.
860
+ """
861
+
862
+ # input arguments are simple
863
+ if ufunc.nin == 1:
864
+ in_args = 'x'
865
+ else:
866
+ in_args = ', '.join(f'x{i + 1}' for i in range(ufunc.nin))
867
+
868
+ # output arguments are both keyword or positional
869
+ if ufunc.nout == 0:
870
+ out_args = ', /, out=()'
871
+ elif ufunc.nout == 1:
872
+ out_args = ', /, out=None'
873
+ else:
874
+ out_args = '[, {positional}], / [, out={default}]'.format(
875
+ positional=', '.join(
876
+ f'out{i + 1}' for i in range(ufunc.nout)),
877
+ default=repr((None,) * ufunc.nout)
878
+ )
879
+
880
+ # keyword only args depend on whether this is a gufunc
881
+ kwargs = (
882
+ ", casting='same_kind'"
883
+ ", order='K'"
884
+ ", dtype=None"
885
+ ", subok=True"
886
+ )
887
+
888
+ # NOTE: gufuncs may or may not support the `axis` parameter
889
+ if ufunc.signature is None:
890
+ kwargs = f", where=True{kwargs}[, signature]"
891
+ else:
892
+ kwargs += "[, signature, axes, axis]"
893
+
894
+ # join all the parts together
895
+ return f'{ufunc.__name__}({in_args}{out_args}, *{kwargs})'
896
+
897
+
898
+ def _ufunc_inspect_signature_builder(ufunc):
899
+ """
900
+ Builds a ``__signature__`` string.
901
+
902
+ Should be kept in sync with `_ufunc_doc_signature_formatter`.
903
+ """
904
+
905
+ from inspect import Parameter, Signature
906
+
907
+ params = []
908
+
909
+ # positional-only input parameters
910
+ if ufunc.nin == 1:
911
+ params.append(Parameter("x", Parameter.POSITIONAL_ONLY))
912
+ else:
913
+ params.extend(
914
+ Parameter(f"x{i}", Parameter.POSITIONAL_ONLY)
915
+ for i in range(1, ufunc.nin + 1)
916
+ )
917
+
918
+ # for the sake of simplicity, we only consider a single output parameter
919
+ if ufunc.nout == 1:
920
+ out_default = None
921
+ else:
922
+ out_default = (None,) * ufunc.nout
923
+ params.append(
924
+ Parameter("out", Parameter.POSITIONAL_OR_KEYWORD, default=out_default),
925
+ )
926
+
927
+ if ufunc.signature is None:
928
+ params.append(Parameter("where", Parameter.KEYWORD_ONLY, default=True))
929
+ else:
930
+ # NOTE: not all gufuncs support the `axis` parameters
931
+ params.append(Parameter("axes", Parameter.KEYWORD_ONLY, default=_NoValue))
932
+ params.append(Parameter("axis", Parameter.KEYWORD_ONLY, default=_NoValue))
933
+ params.append(Parameter("keepdims", Parameter.KEYWORD_ONLY, default=False))
934
+
935
+ params.extend((
936
+ Parameter("casting", Parameter.KEYWORD_ONLY, default='same_kind'),
937
+ Parameter("order", Parameter.KEYWORD_ONLY, default='K'),
938
+ Parameter("dtype", Parameter.KEYWORD_ONLY, default=None),
939
+ Parameter("subok", Parameter.KEYWORD_ONLY, default=True),
940
+ Parameter("signature", Parameter.KEYWORD_ONLY, default=None),
941
+ ))
942
+
943
+ return Signature(params)
944
+
945
+
946
+ def npy_ctypes_check(cls):
947
+ # determine if a class comes from ctypes, in order to work around
948
+ # a bug in the buffer protocol for those objects, bpo-10746
949
+ try:
950
+ # ctypes class are new-style, so have an __mro__. This probably fails
951
+ # for ctypes classes with multiple inheritance.
952
+ if IS_PYPY:
953
+ # (..., _ctypes.basics._CData, Bufferable, object)
954
+ ctype_base = cls.__mro__[-3]
955
+ else:
956
+ # # (..., _ctypes._CData, object)
957
+ ctype_base = cls.__mro__[-2]
958
+ # right now, they're part of the _ctypes module
959
+ return '_ctypes' in ctype_base.__module__
960
+ except Exception:
961
+ return False
962
+
963
+ # used to handle the _NoValue default argument for na_object
964
+ # in the C implementation of the __reduce__ method for stringdtype
965
+ def _convert_to_stringdtype_kwargs(coerce, na_object=_NoValue):
966
+ if na_object is _NoValue:
967
+ return StringDType(coerce=coerce)
968
+ return StringDType(coerce=coerce, na_object=na_object)