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,808 @@
1
+ import re, textwrap, os
2
+ from os import sys, path
3
+ from distutils.errors import DistutilsError
4
+
5
+ is_standalone = __name__ == '__main__' and __package__ is None
6
+ if is_standalone:
7
+ import unittest, contextlib, tempfile, shutil
8
+ sys.path.append(path.abspath(path.join(path.dirname(__file__), "..")))
9
+ from ccompiler_opt import CCompilerOpt
10
+
11
+ # from numpy/testing/_private/utils.py
12
+ @contextlib.contextmanager
13
+ def tempdir(*args, **kwargs):
14
+ tmpdir = tempfile.mkdtemp(*args, **kwargs)
15
+ try:
16
+ yield tmpdir
17
+ finally:
18
+ shutil.rmtree(tmpdir)
19
+
20
+ def assert_(expr, msg=''):
21
+ if not expr:
22
+ raise AssertionError(msg)
23
+ else:
24
+ from numpy.distutils.ccompiler_opt import CCompilerOpt
25
+ from numpy.testing import assert_, tempdir
26
+
27
+ # architectures and compilers to test
28
+ arch_compilers = dict(
29
+ x86 = ("gcc", "clang", "icc", "iccw", "msvc"),
30
+ x64 = ("gcc", "clang", "icc", "iccw", "msvc"),
31
+ ppc64 = ("gcc", "clang"),
32
+ ppc64le = ("gcc", "clang"),
33
+ armhf = ("gcc", "clang"),
34
+ aarch64 = ("gcc", "clang", "fcc"),
35
+ s390x = ("gcc", "clang"),
36
+ noarch = ("gcc",)
37
+ )
38
+
39
+ class FakeCCompilerOpt(CCompilerOpt):
40
+ fake_info = ""
41
+ def __init__(self, trap_files="", trap_flags="", *args, **kwargs):
42
+ self.fake_trap_files = trap_files
43
+ self.fake_trap_flags = trap_flags
44
+ CCompilerOpt.__init__(self, None, **kwargs)
45
+
46
+ def __repr__(self):
47
+ return textwrap.dedent("""\
48
+ <<<<
49
+ march : {}
50
+ compiler : {}
51
+ ----------------
52
+ {}
53
+ >>>>
54
+ """).format(self.cc_march, self.cc_name, self.report())
55
+
56
+ def dist_compile(self, sources, flags, **kwargs):
57
+ assert(isinstance(sources, list))
58
+ assert(isinstance(flags, list))
59
+ if self.fake_trap_files:
60
+ for src in sources:
61
+ if re.match(self.fake_trap_files, src):
62
+ self.dist_error("source is trapped by a fake interface")
63
+ if self.fake_trap_flags:
64
+ for f in flags:
65
+ if re.match(self.fake_trap_flags, f):
66
+ self.dist_error("flag is trapped by a fake interface")
67
+ # fake objects
68
+ return zip(sources, [' '.join(flags)] * len(sources))
69
+
70
+ def dist_info(self):
71
+ return FakeCCompilerOpt.fake_info
72
+
73
+ @staticmethod
74
+ def dist_log(*args, stderr=False):
75
+ pass
76
+
77
+ class _Test_CCompilerOpt:
78
+ arch = None # x86_64
79
+ cc = None # gcc
80
+
81
+ def setup_class(self):
82
+ FakeCCompilerOpt.conf_nocache = True
83
+ self._opt = None
84
+
85
+ def nopt(self, *args, **kwargs):
86
+ FakeCCompilerOpt.fake_info = (self.arch, self.cc, "")
87
+ return FakeCCompilerOpt(*args, **kwargs)
88
+
89
+ def opt(self):
90
+ if not self._opt:
91
+ self._opt = self.nopt()
92
+ return self._opt
93
+
94
+ def march(self):
95
+ return self.opt().cc_march
96
+
97
+ def cc_name(self):
98
+ return self.opt().cc_name
99
+
100
+ def get_targets(self, targets, groups, **kwargs):
101
+ FakeCCompilerOpt.conf_target_groups = groups
102
+ opt = self.nopt(
103
+ cpu_baseline=kwargs.get("baseline", "min"),
104
+ cpu_dispatch=kwargs.get("dispatch", "max"),
105
+ trap_files=kwargs.get("trap_files", ""),
106
+ trap_flags=kwargs.get("trap_flags", "")
107
+ )
108
+ with tempdir() as tmpdir:
109
+ file = os.path.join(tmpdir, "test_targets.c")
110
+ with open(file, 'w') as f:
111
+ f.write(targets)
112
+ gtargets = []
113
+ gflags = {}
114
+ fake_objects = opt.try_dispatch([file])
115
+ for source, flags in fake_objects:
116
+ gtar = path.basename(source).split('.')[1:-1]
117
+ glen = len(gtar)
118
+ if glen == 0:
119
+ gtar = "baseline"
120
+ elif glen == 1:
121
+ gtar = gtar[0].upper()
122
+ else:
123
+ # converting multi-target into parentheses str format to be equivalent
124
+ # to the configuration statements syntax.
125
+ gtar = ('('+' '.join(gtar)+')').upper()
126
+ gtargets.append(gtar)
127
+ gflags[gtar] = flags
128
+
129
+ has_baseline, targets = opt.sources_status[file]
130
+ targets = targets + ["baseline"] if has_baseline else targets
131
+ # convert tuple that represent multi-target into parentheses str format
132
+ targets = [
133
+ '('+' '.join(tar)+')' if isinstance(tar, tuple) else tar
134
+ for tar in targets
135
+ ]
136
+ if len(targets) != len(gtargets) or not all(t in gtargets for t in targets):
137
+ raise AssertionError(
138
+ "'sources_status' returns different targets than the compiled targets\n"
139
+ "%s != %s" % (targets, gtargets)
140
+ )
141
+ # return targets from 'sources_status' since the order is matters
142
+ return targets, gflags
143
+
144
+ def arg_regex(self, **kwargs):
145
+ map2origin = dict(
146
+ x64 = "x86",
147
+ ppc64le = "ppc64",
148
+ aarch64 = "armhf",
149
+ clang = "gcc",
150
+ )
151
+ march = self.march(); cc_name = self.cc_name()
152
+ map_march = map2origin.get(march, march)
153
+ map_cc = map2origin.get(cc_name, cc_name)
154
+ for key in (
155
+ march, cc_name, map_march, map_cc,
156
+ march + '_' + cc_name,
157
+ map_march + '_' + cc_name,
158
+ march + '_' + map_cc,
159
+ map_march + '_' + map_cc,
160
+ ) :
161
+ regex = kwargs.pop(key, None)
162
+ if regex is not None:
163
+ break
164
+ if regex:
165
+ if isinstance(regex, dict):
166
+ for k, v in regex.items():
167
+ if v[-1:] not in ')}$?\\.+*':
168
+ regex[k] = v + '$'
169
+ else:
170
+ assert(isinstance(regex, str))
171
+ if regex[-1:] not in ')}$?\\.+*':
172
+ regex += '$'
173
+ return regex
174
+
175
+ def expect(self, dispatch, baseline="", **kwargs):
176
+ match = self.arg_regex(**kwargs)
177
+ if match is None:
178
+ return
179
+ opt = self.nopt(
180
+ cpu_baseline=baseline, cpu_dispatch=dispatch,
181
+ trap_files=kwargs.get("trap_files", ""),
182
+ trap_flags=kwargs.get("trap_flags", "")
183
+ )
184
+ features = ' '.join(opt.cpu_dispatch_names())
185
+ if not match:
186
+ if len(features) != 0:
187
+ raise AssertionError(
188
+ 'expected empty features, not "%s"' % features
189
+ )
190
+ return
191
+ if not re.match(match, features, re.IGNORECASE):
192
+ raise AssertionError(
193
+ 'dispatch features "%s" not match "%s"' % (features, match)
194
+ )
195
+
196
+ def expect_baseline(self, baseline, dispatch="", **kwargs):
197
+ match = self.arg_regex(**kwargs)
198
+ if match is None:
199
+ return
200
+ opt = self.nopt(
201
+ cpu_baseline=baseline, cpu_dispatch=dispatch,
202
+ trap_files=kwargs.get("trap_files", ""),
203
+ trap_flags=kwargs.get("trap_flags", "")
204
+ )
205
+ features = ' '.join(opt.cpu_baseline_names())
206
+ if not match:
207
+ if len(features) != 0:
208
+ raise AssertionError(
209
+ 'expected empty features, not "%s"' % features
210
+ )
211
+ return
212
+ if not re.match(match, features, re.IGNORECASE):
213
+ raise AssertionError(
214
+ 'baseline features "%s" not match "%s"' % (features, match)
215
+ )
216
+
217
+ def expect_flags(self, baseline, dispatch="", **kwargs):
218
+ match = self.arg_regex(**kwargs)
219
+ if match is None:
220
+ return
221
+ opt = self.nopt(
222
+ cpu_baseline=baseline, cpu_dispatch=dispatch,
223
+ trap_files=kwargs.get("trap_files", ""),
224
+ trap_flags=kwargs.get("trap_flags", "")
225
+ )
226
+ flags = ' '.join(opt.cpu_baseline_flags())
227
+ if not match:
228
+ if len(flags) != 0:
229
+ raise AssertionError(
230
+ 'expected empty flags not "%s"' % flags
231
+ )
232
+ return
233
+ if not re.match(match, flags):
234
+ raise AssertionError(
235
+ 'flags "%s" not match "%s"' % (flags, match)
236
+ )
237
+
238
+ def expect_targets(self, targets, groups={}, **kwargs):
239
+ match = self.arg_regex(**kwargs)
240
+ if match is None:
241
+ return
242
+ targets, _ = self.get_targets(targets=targets, groups=groups, **kwargs)
243
+ targets = ' '.join(targets)
244
+ if not match:
245
+ if len(targets) != 0:
246
+ raise AssertionError(
247
+ 'expected empty targets, not "%s"' % targets
248
+ )
249
+ return
250
+ if not re.match(match, targets, re.IGNORECASE):
251
+ raise AssertionError(
252
+ 'targets "%s" not match "%s"' % (targets, match)
253
+ )
254
+
255
+ def expect_target_flags(self, targets, groups={}, **kwargs):
256
+ match_dict = self.arg_regex(**kwargs)
257
+ if match_dict is None:
258
+ return
259
+ assert(isinstance(match_dict, dict))
260
+ _, tar_flags = self.get_targets(targets=targets, groups=groups)
261
+
262
+ for match_tar, match_flags in match_dict.items():
263
+ if match_tar not in tar_flags:
264
+ raise AssertionError(
265
+ 'expected to find target "%s"' % match_tar
266
+ )
267
+ flags = tar_flags[match_tar]
268
+ if not match_flags:
269
+ if len(flags) != 0:
270
+ raise AssertionError(
271
+ 'expected to find empty flags in target "%s"' % match_tar
272
+ )
273
+ if not re.match(match_flags, flags):
274
+ raise AssertionError(
275
+ '"%s" flags "%s" not match "%s"' % (match_tar, flags, match_flags)
276
+ )
277
+
278
+ def test_interface(self):
279
+ wrong_arch = "ppc64" if self.arch != "ppc64" else "x86"
280
+ wrong_cc = "clang" if self.cc != "clang" else "icc"
281
+ opt = self.opt()
282
+ assert_(getattr(opt, "cc_on_" + self.arch))
283
+ assert_(not getattr(opt, "cc_on_" + wrong_arch))
284
+ assert_(getattr(opt, "cc_is_" + self.cc))
285
+ assert_(not getattr(opt, "cc_is_" + wrong_cc))
286
+
287
+ def test_args_empty(self):
288
+ for baseline, dispatch in (
289
+ ("", "none"),
290
+ (None, ""),
291
+ ("none +none", "none - none"),
292
+ ("none -max", "min - max"),
293
+ ("+vsx2 -VSX2", "vsx avx2 avx512f -max"),
294
+ ("max -vsx - avx + avx512f neon -MAX ",
295
+ "min -min + max -max -vsx + avx2 -avx2 +NONE")
296
+ ) :
297
+ opt = self.nopt(cpu_baseline=baseline, cpu_dispatch=dispatch)
298
+ assert(len(opt.cpu_baseline_names()) == 0)
299
+ assert(len(opt.cpu_dispatch_names()) == 0)
300
+
301
+ def test_args_validation(self):
302
+ if self.march() == "unknown":
303
+ return
304
+ # check sanity of argument's validation
305
+ for baseline, dispatch in (
306
+ ("unkown_feature - max +min", "unknown max min"), # unknowing features
307
+ ("#avx2", "$vsx") # groups and polices aren't acceptable
308
+ ) :
309
+ try:
310
+ self.nopt(cpu_baseline=baseline, cpu_dispatch=dispatch)
311
+ raise AssertionError("excepted an exception for invalid arguments")
312
+ except DistutilsError:
313
+ pass
314
+
315
+ def test_skip(self):
316
+ # only takes what platform supports and skip the others
317
+ # without casing exceptions
318
+ self.expect(
319
+ "sse vsx neon",
320
+ x86="sse", ppc64="vsx", armhf="neon", unknown=""
321
+ )
322
+ self.expect(
323
+ "sse41 avx avx2 vsx2 vsx3 neon_vfpv4 asimd",
324
+ x86 = "sse41 avx avx2",
325
+ ppc64 = "vsx2 vsx3",
326
+ armhf = "neon_vfpv4 asimd",
327
+ unknown = ""
328
+ )
329
+ # any features in cpu_dispatch must be ignored if it's part of baseline
330
+ self.expect(
331
+ "sse neon vsx", baseline="sse neon vsx",
332
+ x86="", ppc64="", armhf=""
333
+ )
334
+ self.expect(
335
+ "avx2 vsx3 asimdhp", baseline="avx2 vsx3 asimdhp",
336
+ x86="", ppc64="", armhf=""
337
+ )
338
+
339
+ def test_implies(self):
340
+ # baseline combining implied features, so we count
341
+ # on it instead of testing 'feature_implies()'' directly
342
+ self.expect_baseline(
343
+ "fma3 avx2 asimd vsx3",
344
+ # .* between two spaces can validate features in between
345
+ x86 = "sse .* sse41 .* fma3.*avx2",
346
+ ppc64 = "vsx vsx2 vsx3",
347
+ armhf = "neon neon_fp16 neon_vfpv4 asimd"
348
+ )
349
+ """
350
+ special cases
351
+ """
352
+ # in icc and msvc, FMA3 and AVX2 can't be separated
353
+ # both need to implies each other, same for avx512f & cd
354
+ for f0, f1 in (
355
+ ("fma3", "avx2"),
356
+ ("avx512f", "avx512cd"),
357
+ ):
358
+ diff = ".* sse42 .* %s .*%s$" % (f0, f1)
359
+ self.expect_baseline(f0,
360
+ x86_gcc=".* sse42 .* %s$" % f0,
361
+ x86_icc=diff, x86_iccw=diff
362
+ )
363
+ self.expect_baseline(f1,
364
+ x86_gcc=".* avx .* %s$" % f1,
365
+ x86_icc=diff, x86_iccw=diff
366
+ )
367
+ # in msvc, following features can't be separated too
368
+ for f in (("fma3", "avx2"), ("avx512f", "avx512cd", "avx512_skx")):
369
+ for ff in f:
370
+ self.expect_baseline(ff,
371
+ x86_msvc=".*%s" % ' '.join(f)
372
+ )
373
+
374
+ # in ppc64le VSX and VSX2 can't be separated
375
+ self.expect_baseline("vsx", ppc64le="vsx vsx2")
376
+ # in aarch64 following features can't be separated
377
+ for f in ("neon", "neon_fp16", "neon_vfpv4", "asimd"):
378
+ self.expect_baseline(f, aarch64="neon neon_fp16 neon_vfpv4 asimd")
379
+
380
+ def test_args_options(self):
381
+ # max & native
382
+ for o in ("max", "native"):
383
+ if o == "native" and self.cc_name() == "msvc":
384
+ continue
385
+ self.expect(o,
386
+ trap_files=".*cpu_(sse|vsx|neon|vx).c",
387
+ x86="", ppc64="", armhf="", s390x=""
388
+ )
389
+ self.expect(o,
390
+ trap_files=".*cpu_(sse3|vsx2|neon_vfpv4|vxe).c",
391
+ x86="sse sse2", ppc64="vsx", armhf="neon neon_fp16",
392
+ aarch64="", ppc64le="", s390x="vx"
393
+ )
394
+ self.expect(o,
395
+ trap_files=".*cpu_(popcnt|vsx3).c",
396
+ x86="sse .* sse41", ppc64="vsx vsx2",
397
+ armhf="neon neon_fp16 .* asimd .*",
398
+ s390x="vx vxe vxe2"
399
+ )
400
+ self.expect(o,
401
+ x86_gcc=".* xop fma4 .* avx512f .* avx512_knl avx512_knm avx512_skx .*",
402
+ # in icc, xop and fam4 aren't supported
403
+ x86_icc=".* avx512f .* avx512_knl avx512_knm avx512_skx .*",
404
+ x86_iccw=".* avx512f .* avx512_knl avx512_knm avx512_skx .*",
405
+ # in msvc, avx512_knl avx512_knm aren't supported
406
+ x86_msvc=".* xop fma4 .* avx512f .* avx512_skx .*",
407
+ armhf=".* asimd asimdhp asimddp .*",
408
+ ppc64="vsx vsx2 vsx3 vsx4.*",
409
+ s390x="vx vxe vxe2.*"
410
+ )
411
+ # min
412
+ self.expect("min",
413
+ x86="sse sse2", x64="sse sse2 sse3",
414
+ armhf="", aarch64="neon neon_fp16 .* asimd",
415
+ ppc64="", ppc64le="vsx vsx2", s390x=""
416
+ )
417
+ self.expect(
418
+ "min", trap_files=".*cpu_(sse2|vsx2).c",
419
+ x86="", ppc64le=""
420
+ )
421
+ # an exception must triggered if native flag isn't supported
422
+ # when option "native" is activated through the args
423
+ try:
424
+ self.expect("native",
425
+ trap_flags=".*(-march=native|-xHost|/QxHost|-mcpu=a64fx).*",
426
+ x86=".*", ppc64=".*", armhf=".*", s390x=".*", aarch64=".*",
427
+ )
428
+ if self.march() != "unknown":
429
+ raise AssertionError(
430
+ "excepted an exception for %s" % self.march()
431
+ )
432
+ except DistutilsError:
433
+ if self.march() == "unknown":
434
+ raise AssertionError("excepted no exceptions")
435
+
436
+ def test_flags(self):
437
+ self.expect_flags(
438
+ "sse sse2 vsx vsx2 neon neon_fp16 vx vxe",
439
+ x86_gcc="-msse -msse2", x86_icc="-msse -msse2",
440
+ x86_iccw="/arch:SSE2",
441
+ x86_msvc="/arch:SSE2" if self.march() == "x86" else "",
442
+ ppc64_gcc= "-mcpu=power8",
443
+ ppc64_clang="-mcpu=power8",
444
+ armhf_gcc="-mfpu=neon-fp16 -mfp16-format=ieee",
445
+ aarch64="",
446
+ s390x="-mzvector -march=arch12"
447
+ )
448
+ # testing normalize -march
449
+ self.expect_flags(
450
+ "asimd",
451
+ aarch64="",
452
+ armhf_gcc=r"-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8-a\+simd"
453
+ )
454
+ self.expect_flags(
455
+ "asimdhp",
456
+ aarch64_gcc=r"-march=armv8.2-a\+fp16",
457
+ armhf_gcc=r"-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8.2-a\+fp16"
458
+ )
459
+ self.expect_flags(
460
+ "asimddp", aarch64_gcc=r"-march=armv8.2-a\+dotprod"
461
+ )
462
+ self.expect_flags(
463
+ # asimdfhm implies asimdhp
464
+ "asimdfhm", aarch64_gcc=r"-march=armv8.2-a\+fp16\+fp16fml"
465
+ )
466
+ self.expect_flags(
467
+ "asimddp asimdhp asimdfhm",
468
+ aarch64_gcc=r"-march=armv8.2-a\+dotprod\+fp16\+fp16fml"
469
+ )
470
+ self.expect_flags(
471
+ "vx vxe vxe2",
472
+ s390x=r"-mzvector -march=arch13"
473
+ )
474
+
475
+ def test_targets_exceptions(self):
476
+ for targets in (
477
+ "bla bla", "/*@targets",
478
+ "/*@targets */",
479
+ "/*@targets unknown */",
480
+ "/*@targets $unknown_policy avx2 */",
481
+ "/*@targets #unknown_group avx2 */",
482
+ "/*@targets $ */",
483
+ "/*@targets # vsx */",
484
+ "/*@targets #$ vsx */",
485
+ "/*@targets vsx avx2 ) */",
486
+ "/*@targets vsx avx2 (avx2 */",
487
+ "/*@targets vsx avx2 () */",
488
+ "/*@targets vsx avx2 ($autovec) */", # no features
489
+ "/*@targets vsx avx2 (xxx) */",
490
+ "/*@targets vsx avx2 (baseline) */",
491
+ ) :
492
+ try:
493
+ self.expect_targets(
494
+ targets,
495
+ x86="", armhf="", ppc64="", s390x=""
496
+ )
497
+ if self.march() != "unknown":
498
+ raise AssertionError(
499
+ "excepted an exception for %s" % self.march()
500
+ )
501
+ except DistutilsError:
502
+ if self.march() == "unknown":
503
+ raise AssertionError("excepted no exceptions")
504
+
505
+ def test_targets_syntax(self):
506
+ for targets in (
507
+ "/*@targets $keep_baseline sse vsx neon vx*/",
508
+ "/*@targets,$keep_baseline,sse,vsx,neon vx*/",
509
+ "/*@targets*$keep_baseline*sse*vsx*neon*vx*/",
510
+ """
511
+ /*
512
+ ** @targets
513
+ ** $keep_baseline, sse vsx,neon, vx
514
+ */
515
+ """,
516
+ """
517
+ /*
518
+ ************@targets****************
519
+ ** $keep_baseline, sse vsx, neon, vx
520
+ ************************************
521
+ */
522
+ """,
523
+ """
524
+ /*
525
+ /////////////@targets/////////////////
526
+ //$keep_baseline//sse//vsx//neon//vx
527
+ /////////////////////////////////////
528
+ */
529
+ """,
530
+ """
531
+ /*
532
+ @targets
533
+ $keep_baseline
534
+ SSE VSX NEON VX*/
535
+ """
536
+ ) :
537
+ self.expect_targets(targets,
538
+ x86="sse", ppc64="vsx", armhf="neon", s390x="vx", unknown=""
539
+ )
540
+
541
+ def test_targets(self):
542
+ # test skipping baseline features
543
+ self.expect_targets(
544
+ """
545
+ /*@targets
546
+ sse sse2 sse41 avx avx2 avx512f
547
+ vsx vsx2 vsx3 vsx4
548
+ neon neon_fp16 asimdhp asimddp
549
+ vx vxe vxe2
550
+ */
551
+ """,
552
+ baseline="avx vsx2 asimd vx vxe",
553
+ x86="avx512f avx2", armhf="asimddp asimdhp", ppc64="vsx4 vsx3",
554
+ s390x="vxe2"
555
+ )
556
+ # test skipping non-dispatch features
557
+ self.expect_targets(
558
+ """
559
+ /*@targets
560
+ sse41 avx avx2 avx512f
561
+ vsx2 vsx3 vsx4
562
+ asimd asimdhp asimddp
563
+ vx vxe vxe2
564
+ */
565
+ """,
566
+ baseline="", dispatch="sse41 avx2 vsx2 asimd asimddp vxe2",
567
+ x86="avx2 sse41", armhf="asimddp asimd", ppc64="vsx2", s390x="vxe2"
568
+ )
569
+ # test skipping features that not supported
570
+ self.expect_targets(
571
+ """
572
+ /*@targets
573
+ sse2 sse41 avx2 avx512f
574
+ vsx2 vsx3 vsx4
575
+ neon asimdhp asimddp
576
+ vx vxe vxe2
577
+ */
578
+ """,
579
+ baseline="",
580
+ trap_files=".*(avx2|avx512f|vsx3|vsx4|asimddp|vxe2).c",
581
+ x86="sse41 sse2", ppc64="vsx2", armhf="asimdhp neon",
582
+ s390x="vxe vx"
583
+ )
584
+ # test skipping features that implies each other
585
+ self.expect_targets(
586
+ """
587
+ /*@targets
588
+ sse sse2 avx fma3 avx2 avx512f avx512cd
589
+ vsx vsx2 vsx3
590
+ neon neon_vfpv4 neon_fp16 neon_fp16 asimd asimdhp
591
+ asimddp asimdfhm
592
+ */
593
+ """,
594
+ baseline="",
595
+ x86_gcc="avx512cd avx512f avx2 fma3 avx sse2",
596
+ x86_msvc="avx512cd avx2 avx sse2",
597
+ x86_icc="avx512cd avx2 avx sse2",
598
+ x86_iccw="avx512cd avx2 avx sse2",
599
+ ppc64="vsx3 vsx2 vsx",
600
+ ppc64le="vsx3 vsx2",
601
+ armhf="asimdfhm asimddp asimdhp asimd neon_vfpv4 neon_fp16 neon",
602
+ aarch64="asimdfhm asimddp asimdhp asimd"
603
+ )
604
+
605
+ def test_targets_policies(self):
606
+ # 'keep_baseline', generate objects for baseline features
607
+ self.expect_targets(
608
+ """
609
+ /*@targets
610
+ $keep_baseline
611
+ sse2 sse42 avx2 avx512f
612
+ vsx2 vsx3
613
+ neon neon_vfpv4 asimd asimddp
614
+ vx vxe vxe2
615
+ */
616
+ """,
617
+ baseline="sse41 avx2 vsx2 asimd vsx3 vxe",
618
+ x86="avx512f avx2 sse42 sse2",
619
+ ppc64="vsx3 vsx2",
620
+ armhf="asimddp asimd neon_vfpv4 neon",
621
+ # neon, neon_vfpv4, asimd implies each other
622
+ aarch64="asimddp asimd",
623
+ s390x="vxe2 vxe vx"
624
+ )
625
+ # 'keep_sort', leave the sort as-is
626
+ self.expect_targets(
627
+ """
628
+ /*@targets
629
+ $keep_baseline $keep_sort
630
+ avx512f sse42 avx2 sse2
631
+ vsx2 vsx3
632
+ asimd neon neon_vfpv4 asimddp
633
+ vxe vxe2
634
+ */
635
+ """,
636
+ x86="avx512f sse42 avx2 sse2",
637
+ ppc64="vsx2 vsx3",
638
+ armhf="asimd neon neon_vfpv4 asimddp",
639
+ # neon, neon_vfpv4, asimd implies each other
640
+ aarch64="asimd asimddp",
641
+ s390x="vxe vxe2"
642
+ )
643
+ # 'autovec', skipping features that can't be
644
+ # vectorized by the compiler
645
+ self.expect_targets(
646
+ """
647
+ /*@targets
648
+ $keep_baseline $keep_sort $autovec
649
+ avx512f avx2 sse42 sse41 sse2
650
+ vsx3 vsx2
651
+ asimddp asimd neon_vfpv4 neon
652
+ */
653
+ """,
654
+ x86_gcc="avx512f avx2 sse42 sse41 sse2",
655
+ x86_icc="avx512f avx2 sse42 sse41 sse2",
656
+ x86_iccw="avx512f avx2 sse42 sse41 sse2",
657
+ x86_msvc="avx512f avx2 sse2"
658
+ if self.march() == 'x86' else "avx512f avx2",
659
+ ppc64="vsx3 vsx2",
660
+ armhf="asimddp asimd neon_vfpv4 neon",
661
+ # neon, neon_vfpv4, asimd implies each other
662
+ aarch64="asimddp asimd"
663
+ )
664
+ for policy in ("$maxopt", "$autovec"):
665
+ # 'maxopt' and autovec set the max acceptable optimization flags
666
+ self.expect_target_flags(
667
+ "/*@targets baseline %s */" % policy,
668
+ gcc={"baseline":".*-O3.*"}, icc={"baseline":".*-O3.*"},
669
+ iccw={"baseline":".*/O3.*"}, msvc={"baseline":".*/O2.*"},
670
+ unknown={"baseline":".*"}
671
+ )
672
+
673
+ # 'werror', force compilers to treat warnings as errors
674
+ self.expect_target_flags(
675
+ "/*@targets baseline $werror */",
676
+ gcc={"baseline":".*-Werror.*"}, icc={"baseline":".*-Werror.*"},
677
+ iccw={"baseline":".*/Werror.*"}, msvc={"baseline":".*/WX.*"},
678
+ unknown={"baseline":".*"}
679
+ )
680
+
681
+ def test_targets_groups(self):
682
+ self.expect_targets(
683
+ """
684
+ /*@targets $keep_baseline baseline #test_group */
685
+ """,
686
+ groups=dict(
687
+ test_group=("""
688
+ $keep_baseline
689
+ asimddp sse2 vsx2 avx2 vsx3
690
+ avx512f asimdhp
691
+ """)
692
+ ),
693
+ x86="avx512f avx2 sse2 baseline",
694
+ ppc64="vsx3 vsx2 baseline",
695
+ armhf="asimddp asimdhp baseline"
696
+ )
697
+ # test skip duplicating and sorting
698
+ self.expect_targets(
699
+ """
700
+ /*@targets
701
+ * sse42 avx avx512f
702
+ * #test_group_1
703
+ * vsx2
704
+ * #test_group_2
705
+ * asimddp asimdfhm
706
+ */
707
+ """,
708
+ groups=dict(
709
+ test_group_1=("""
710
+ VSX2 vsx3 asimd avx2 SSE41
711
+ """),
712
+ test_group_2=("""
713
+ vsx2 vsx3 asImd aVx2 sse41
714
+ """)
715
+ ),
716
+ x86="avx512f avx2 avx sse42 sse41",
717
+ ppc64="vsx3 vsx2",
718
+ # vsx2 part of the default baseline of ppc64le, option ("min")
719
+ ppc64le="vsx3",
720
+ armhf="asimdfhm asimddp asimd",
721
+ # asimd part of the default baseline of aarch64, option ("min")
722
+ aarch64="asimdfhm asimddp"
723
+ )
724
+
725
+ def test_targets_multi(self):
726
+ self.expect_targets(
727
+ """
728
+ /*@targets
729
+ (avx512_clx avx512_cnl) (asimdhp asimddp)
730
+ */
731
+ """,
732
+ x86=r"\(avx512_clx avx512_cnl\)",
733
+ armhf=r"\(asimdhp asimddp\)",
734
+ )
735
+ # test skipping implied features and auto-sort
736
+ self.expect_targets(
737
+ """
738
+ /*@targets
739
+ f16c (sse41 avx sse42) (sse3 avx2 avx512f)
740
+ vsx2 (vsx vsx3 vsx2)
741
+ (neon neon_vfpv4 asimd asimdhp asimddp)
742
+ */
743
+ """,
744
+ x86="avx512f f16c avx",
745
+ ppc64="vsx3 vsx2",
746
+ ppc64le="vsx3", # vsx2 part of baseline
747
+ armhf=r"\(asimdhp asimddp\)",
748
+ )
749
+ # test skipping implied features and keep sort
750
+ self.expect_targets(
751
+ """
752
+ /*@targets $keep_sort
753
+ (sse41 avx sse42) (sse3 avx2 avx512f)
754
+ (vsx vsx3 vsx2)
755
+ (asimddp neon neon_vfpv4 asimd asimdhp)
756
+ (vx vxe vxe2)
757
+ */
758
+ """,
759
+ x86="avx avx512f",
760
+ ppc64="vsx3",
761
+ armhf=r"\(asimdhp asimddp\)",
762
+ s390x="vxe2"
763
+ )
764
+ # test compiler variety and avoiding duplicating
765
+ self.expect_targets(
766
+ """
767
+ /*@targets $keep_sort
768
+ fma3 avx2 (fma3 avx2) (avx2 fma3) avx2 fma3
769
+ */
770
+ """,
771
+ x86_gcc=r"fma3 avx2 \(fma3 avx2\)",
772
+ x86_icc="avx2", x86_iccw="avx2",
773
+ x86_msvc="avx2"
774
+ )
775
+
776
+ def new_test(arch, cc):
777
+ if is_standalone: return textwrap.dedent("""\
778
+ class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt, unittest.TestCase):
779
+ arch = '{arch}'
780
+ cc = '{cc}'
781
+ def __init__(self, methodName="runTest"):
782
+ unittest.TestCase.__init__(self, methodName)
783
+ self.setup_class()
784
+ """).format(
785
+ class_name=arch + '_' + cc, arch=arch, cc=cc
786
+ )
787
+ return textwrap.dedent("""\
788
+ class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt):
789
+ arch = '{arch}'
790
+ cc = '{cc}'
791
+ """).format(
792
+ class_name=arch + '_' + cc, arch=arch, cc=cc
793
+ )
794
+ """
795
+ if 1 and is_standalone:
796
+ FakeCCompilerOpt.fake_info = "x86_icc"
797
+ cco = FakeCCompilerOpt(None, cpu_baseline="avx2")
798
+ print(' '.join(cco.cpu_baseline_names()))
799
+ print(cco.cpu_baseline_flags())
800
+ unittest.main()
801
+ sys.exit()
802
+ """
803
+ for arch, compilers in arch_compilers.items():
804
+ for cc in compilers:
805
+ exec(new_test(arch, cc))
806
+
807
+ if is_standalone:
808
+ unittest.main()