numpy 2.4.1__cp314-cp314t-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (932) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +108 -0
  3. numpy/__init__.cython-30.pxd +1242 -0
  4. numpy/__init__.pxd +1155 -0
  5. numpy/__init__.py +955 -0
  6. numpy/__init__.pyi +6202 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +206 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +201 -0
  12. numpy/_core/__init__.pyi +666 -0
  13. numpy/_core/_add_newdocs.py +7151 -0
  14. numpy/_core/_add_newdocs.pyi +2 -0
  15. numpy/_core/_add_newdocs_scalars.py +381 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +130 -0
  18. numpy/_core/_asarray.pyi +43 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +56 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +54 -0
  25. numpy/_core/_internal.py +968 -0
  26. numpy/_core/_internal.pyi +61 -0
  27. numpy/_core/_methods.py +252 -0
  28. numpy/_core/_methods.pyi +22 -0
  29. numpy/_core/_multiarray_tests.cp314t-win_arm64.lib +0 -0
  30. numpy/_core/_multiarray_tests.cp314t-win_arm64.pyd +0 -0
  31. numpy/_core/_multiarray_umath.cp314t-win_arm64.lib +0 -0
  32. numpy/_core/_multiarray_umath.cp314t-win_arm64.pyd +0 -0
  33. numpy/_core/_operand_flag_tests.cp314t-win_arm64.lib +0 -0
  34. numpy/_core/_operand_flag_tests.cp314t-win_arm64.pyd +0 -0
  35. numpy/_core/_rational_tests.cp314t-win_arm64.lib +0 -0
  36. numpy/_core/_rational_tests.cp314t-win_arm64.pyd +0 -0
  37. numpy/_core/_simd.cp314t-win_arm64.lib +0 -0
  38. numpy/_core/_simd.cp314t-win_arm64.pyd +0 -0
  39. numpy/_core/_simd.pyi +35 -0
  40. numpy/_core/_string_helpers.py +100 -0
  41. numpy/_core/_string_helpers.pyi +12 -0
  42. numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.lib +0 -0
  43. numpy/_core/_struct_ufunc_tests.cp314t-win_arm64.pyd +0 -0
  44. numpy/_core/_type_aliases.py +131 -0
  45. numpy/_core/_type_aliases.pyi +86 -0
  46. numpy/_core/_ufunc_config.py +515 -0
  47. numpy/_core/_ufunc_config.pyi +69 -0
  48. numpy/_core/_umath_tests.cp314t-win_arm64.lib +0 -0
  49. numpy/_core/_umath_tests.cp314t-win_arm64.pyd +0 -0
  50. numpy/_core/_umath_tests.pyi +47 -0
  51. numpy/_core/arrayprint.py +1779 -0
  52. numpy/_core/arrayprint.pyi +158 -0
  53. numpy/_core/cversions.py +13 -0
  54. numpy/_core/defchararray.py +1414 -0
  55. numpy/_core/defchararray.pyi +1150 -0
  56. numpy/_core/einsumfunc.py +1650 -0
  57. numpy/_core/einsumfunc.pyi +184 -0
  58. numpy/_core/fromnumeric.py +4233 -0
  59. numpy/_core/fromnumeric.pyi +1735 -0
  60. numpy/_core/function_base.py +547 -0
  61. numpy/_core/function_base.pyi +276 -0
  62. numpy/_core/getlimits.py +462 -0
  63. numpy/_core/getlimits.pyi +124 -0
  64. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  65. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  66. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  67. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  68. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  69. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  70. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  71. numpy/_core/include/numpy/arrayobject.h +7 -0
  72. numpy/_core/include/numpy/arrayscalars.h +198 -0
  73. numpy/_core/include/numpy/dtype_api.h +547 -0
  74. numpy/_core/include/numpy/halffloat.h +70 -0
  75. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  76. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  77. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  78. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  79. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  80. numpy/_core/include/numpy/npy_common.h +989 -0
  81. numpy/_core/include/numpy/npy_cpu.h +126 -0
  82. numpy/_core/include/numpy/npy_endian.h +79 -0
  83. numpy/_core/include/numpy/npy_math.h +602 -0
  84. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  85. numpy/_core/include/numpy/npy_os.h +42 -0
  86. numpy/_core/include/numpy/numpyconfig.h +185 -0
  87. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  88. numpy/_core/include/numpy/random/bitgen.h +20 -0
  89. numpy/_core/include/numpy/random/distributions.h +209 -0
  90. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  91. numpy/_core/include/numpy/ufuncobject.h +343 -0
  92. numpy/_core/include/numpy/utils.h +37 -0
  93. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  94. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  95. numpy/_core/lib/npymath.lib +0 -0
  96. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  97. numpy/_core/memmap.py +363 -0
  98. numpy/_core/memmap.pyi +3 -0
  99. numpy/_core/multiarray.py +1740 -0
  100. numpy/_core/multiarray.pyi +1316 -0
  101. numpy/_core/numeric.py +2758 -0
  102. numpy/_core/numeric.pyi +1276 -0
  103. numpy/_core/numerictypes.py +633 -0
  104. numpy/_core/numerictypes.pyi +196 -0
  105. numpy/_core/overrides.py +188 -0
  106. numpy/_core/overrides.pyi +47 -0
  107. numpy/_core/printoptions.py +32 -0
  108. numpy/_core/printoptions.pyi +28 -0
  109. numpy/_core/records.py +1088 -0
  110. numpy/_core/records.pyi +340 -0
  111. numpy/_core/shape_base.py +996 -0
  112. numpy/_core/shape_base.pyi +182 -0
  113. numpy/_core/strings.py +1813 -0
  114. numpy/_core/strings.pyi +536 -0
  115. numpy/_core/tests/_locales.py +72 -0
  116. numpy/_core/tests/_natype.py +144 -0
  117. numpy/_core/tests/data/astype_copy.pkl +0 -0
  118. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  119. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  120. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  121. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  122. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  124. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  127. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  128. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  129. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  130. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  131. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  134. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  135. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  136. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  137. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  138. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  139. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  140. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  141. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  142. numpy/_core/tests/examples/cython/meson.build +43 -0
  143. numpy/_core/tests/examples/cython/setup.py +39 -0
  144. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  145. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  146. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  147. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  148. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  149. numpy/_core/tests/test__exceptions.py +90 -0
  150. numpy/_core/tests/test_abc.py +54 -0
  151. numpy/_core/tests/test_api.py +655 -0
  152. numpy/_core/tests/test_argparse.py +90 -0
  153. numpy/_core/tests/test_array_api_info.py +113 -0
  154. numpy/_core/tests/test_array_coercion.py +928 -0
  155. numpy/_core/tests/test_array_interface.py +222 -0
  156. numpy/_core/tests/test_arraymethod.py +84 -0
  157. numpy/_core/tests/test_arrayobject.py +75 -0
  158. numpy/_core/tests/test_arrayprint.py +1324 -0
  159. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  160. numpy/_core/tests/test_casting_unittests.py +955 -0
  161. numpy/_core/tests/test_conversion_utils.py +209 -0
  162. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  163. numpy/_core/tests/test_cpu_features.py +450 -0
  164. numpy/_core/tests/test_custom_dtypes.py +393 -0
  165. numpy/_core/tests/test_cython.py +352 -0
  166. numpy/_core/tests/test_datetime.py +2792 -0
  167. numpy/_core/tests/test_defchararray.py +858 -0
  168. numpy/_core/tests/test_deprecations.py +460 -0
  169. numpy/_core/tests/test_dlpack.py +190 -0
  170. numpy/_core/tests/test_dtype.py +2110 -0
  171. numpy/_core/tests/test_einsum.py +1351 -0
  172. numpy/_core/tests/test_errstate.py +131 -0
  173. numpy/_core/tests/test_extint128.py +217 -0
  174. numpy/_core/tests/test_finfo.py +86 -0
  175. numpy/_core/tests/test_function_base.py +504 -0
  176. numpy/_core/tests/test_getlimits.py +171 -0
  177. numpy/_core/tests/test_half.py +593 -0
  178. numpy/_core/tests/test_hashtable.py +36 -0
  179. numpy/_core/tests/test_indexerrors.py +122 -0
  180. numpy/_core/tests/test_indexing.py +1692 -0
  181. numpy/_core/tests/test_item_selection.py +167 -0
  182. numpy/_core/tests/test_limited_api.py +102 -0
  183. numpy/_core/tests/test_longdouble.py +370 -0
  184. numpy/_core/tests/test_mem_overlap.py +933 -0
  185. numpy/_core/tests/test_mem_policy.py +453 -0
  186. numpy/_core/tests/test_memmap.py +248 -0
  187. numpy/_core/tests/test_multiarray.py +11008 -0
  188. numpy/_core/tests/test_multiprocessing.py +55 -0
  189. numpy/_core/tests/test_multithreading.py +377 -0
  190. numpy/_core/tests/test_nditer.py +3533 -0
  191. numpy/_core/tests/test_nep50_promotions.py +287 -0
  192. numpy/_core/tests/test_numeric.py +4295 -0
  193. numpy/_core/tests/test_numerictypes.py +650 -0
  194. numpy/_core/tests/test_overrides.py +800 -0
  195. numpy/_core/tests/test_print.py +202 -0
  196. numpy/_core/tests/test_protocols.py +46 -0
  197. numpy/_core/tests/test_records.py +544 -0
  198. numpy/_core/tests/test_regression.py +2677 -0
  199. numpy/_core/tests/test_scalar_ctors.py +203 -0
  200. numpy/_core/tests/test_scalar_methods.py +328 -0
  201. numpy/_core/tests/test_scalarbuffer.py +153 -0
  202. numpy/_core/tests/test_scalarinherit.py +105 -0
  203. numpy/_core/tests/test_scalarmath.py +1168 -0
  204. numpy/_core/tests/test_scalarprint.py +403 -0
  205. numpy/_core/tests/test_shape_base.py +904 -0
  206. numpy/_core/tests/test_simd.py +1345 -0
  207. numpy/_core/tests/test_simd_module.py +105 -0
  208. numpy/_core/tests/test_stringdtype.py +1855 -0
  209. numpy/_core/tests/test_strings.py +1523 -0
  210. numpy/_core/tests/test_ufunc.py +3405 -0
  211. numpy/_core/tests/test_umath.py +4962 -0
  212. numpy/_core/tests/test_umath_accuracy.py +132 -0
  213. numpy/_core/tests/test_umath_complex.py +631 -0
  214. numpy/_core/tests/test_unicode.py +369 -0
  215. numpy/_core/umath.py +60 -0
  216. numpy/_core/umath.pyi +232 -0
  217. numpy/_distributor_init.py +15 -0
  218. numpy/_distributor_init.pyi +1 -0
  219. numpy/_expired_attrs_2_0.py +78 -0
  220. numpy/_expired_attrs_2_0.pyi +61 -0
  221. numpy/_globals.py +121 -0
  222. numpy/_globals.pyi +17 -0
  223. numpy/_pyinstaller/__init__.py +0 -0
  224. numpy/_pyinstaller/__init__.pyi +0 -0
  225. numpy/_pyinstaller/hook-numpy.py +36 -0
  226. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  227. numpy/_pyinstaller/tests/__init__.py +16 -0
  228. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  229. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  230. numpy/_pytesttester.py +201 -0
  231. numpy/_pytesttester.pyi +18 -0
  232. numpy/_typing/__init__.py +173 -0
  233. numpy/_typing/_add_docstring.py +153 -0
  234. numpy/_typing/_array_like.py +106 -0
  235. numpy/_typing/_char_codes.py +213 -0
  236. numpy/_typing/_dtype_like.py +114 -0
  237. numpy/_typing/_extended_precision.py +15 -0
  238. numpy/_typing/_nbit.py +19 -0
  239. numpy/_typing/_nbit_base.py +94 -0
  240. numpy/_typing/_nbit_base.pyi +39 -0
  241. numpy/_typing/_nested_sequence.py +79 -0
  242. numpy/_typing/_scalars.py +20 -0
  243. numpy/_typing/_shape.py +8 -0
  244. numpy/_typing/_ufunc.py +7 -0
  245. numpy/_typing/_ufunc.pyi +975 -0
  246. numpy/_utils/__init__.py +95 -0
  247. numpy/_utils/__init__.pyi +28 -0
  248. numpy/_utils/_convertions.py +18 -0
  249. numpy/_utils/_convertions.pyi +4 -0
  250. numpy/_utils/_inspect.py +192 -0
  251. numpy/_utils/_inspect.pyi +70 -0
  252. numpy/_utils/_pep440.py +486 -0
  253. numpy/_utils/_pep440.pyi +118 -0
  254. numpy/char/__init__.py +2 -0
  255. numpy/char/__init__.pyi +111 -0
  256. numpy/conftest.py +248 -0
  257. numpy/core/__init__.py +33 -0
  258. numpy/core/__init__.pyi +0 -0
  259. numpy/core/_dtype.py +10 -0
  260. numpy/core/_dtype.pyi +0 -0
  261. numpy/core/_dtype_ctypes.py +10 -0
  262. numpy/core/_dtype_ctypes.pyi +0 -0
  263. numpy/core/_internal.py +27 -0
  264. numpy/core/_multiarray_umath.py +57 -0
  265. numpy/core/_utils.py +21 -0
  266. numpy/core/arrayprint.py +10 -0
  267. numpy/core/defchararray.py +10 -0
  268. numpy/core/einsumfunc.py +10 -0
  269. numpy/core/fromnumeric.py +10 -0
  270. numpy/core/function_base.py +10 -0
  271. numpy/core/getlimits.py +10 -0
  272. numpy/core/multiarray.py +25 -0
  273. numpy/core/numeric.py +12 -0
  274. numpy/core/numerictypes.py +10 -0
  275. numpy/core/overrides.py +10 -0
  276. numpy/core/overrides.pyi +7 -0
  277. numpy/core/records.py +10 -0
  278. numpy/core/shape_base.py +10 -0
  279. numpy/core/umath.py +10 -0
  280. numpy/ctypeslib/__init__.py +13 -0
  281. numpy/ctypeslib/__init__.pyi +15 -0
  282. numpy/ctypeslib/_ctypeslib.py +603 -0
  283. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  284. numpy/doc/ufuncs.py +138 -0
  285. numpy/dtypes.py +41 -0
  286. numpy/dtypes.pyi +630 -0
  287. numpy/exceptions.py +246 -0
  288. numpy/exceptions.pyi +27 -0
  289. numpy/f2py/__init__.py +86 -0
  290. numpy/f2py/__init__.pyi +5 -0
  291. numpy/f2py/__main__.py +5 -0
  292. numpy/f2py/__version__.py +1 -0
  293. numpy/f2py/__version__.pyi +1 -0
  294. numpy/f2py/_backends/__init__.py +9 -0
  295. numpy/f2py/_backends/__init__.pyi +5 -0
  296. numpy/f2py/_backends/_backend.py +44 -0
  297. numpy/f2py/_backends/_backend.pyi +46 -0
  298. numpy/f2py/_backends/_distutils.py +76 -0
  299. numpy/f2py/_backends/_distutils.pyi +13 -0
  300. numpy/f2py/_backends/_meson.py +244 -0
  301. numpy/f2py/_backends/_meson.pyi +62 -0
  302. numpy/f2py/_backends/meson.build.template +58 -0
  303. numpy/f2py/_isocbind.py +62 -0
  304. numpy/f2py/_isocbind.pyi +13 -0
  305. numpy/f2py/_src_pyf.py +247 -0
  306. numpy/f2py/_src_pyf.pyi +28 -0
  307. numpy/f2py/auxfuncs.py +1004 -0
  308. numpy/f2py/auxfuncs.pyi +262 -0
  309. numpy/f2py/capi_maps.py +811 -0
  310. numpy/f2py/capi_maps.pyi +33 -0
  311. numpy/f2py/cb_rules.py +665 -0
  312. numpy/f2py/cb_rules.pyi +17 -0
  313. numpy/f2py/cfuncs.py +1563 -0
  314. numpy/f2py/cfuncs.pyi +31 -0
  315. numpy/f2py/common_rules.py +143 -0
  316. numpy/f2py/common_rules.pyi +9 -0
  317. numpy/f2py/crackfortran.py +3725 -0
  318. numpy/f2py/crackfortran.pyi +266 -0
  319. numpy/f2py/diagnose.py +149 -0
  320. numpy/f2py/diagnose.pyi +1 -0
  321. numpy/f2py/f2py2e.py +788 -0
  322. numpy/f2py/f2py2e.pyi +74 -0
  323. numpy/f2py/f90mod_rules.py +269 -0
  324. numpy/f2py/f90mod_rules.pyi +16 -0
  325. numpy/f2py/func2subr.py +329 -0
  326. numpy/f2py/func2subr.pyi +7 -0
  327. numpy/f2py/rules.py +1629 -0
  328. numpy/f2py/rules.pyi +41 -0
  329. numpy/f2py/setup.cfg +3 -0
  330. numpy/f2py/src/fortranobject.c +1436 -0
  331. numpy/f2py/src/fortranobject.h +173 -0
  332. numpy/f2py/symbolic.py +1518 -0
  333. numpy/f2py/symbolic.pyi +219 -0
  334. numpy/f2py/tests/__init__.py +16 -0
  335. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  336. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  337. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  338. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  339. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  340. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  341. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  342. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  343. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  344. numpy/f2py/tests/src/callback/foo.f +62 -0
  345. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  346. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  347. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  348. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  349. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  350. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  351. numpy/f2py/tests/src/cli/hi77.f +3 -0
  352. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  353. numpy/f2py/tests/src/common/block.f +11 -0
  354. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  355. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  356. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  357. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  358. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  359. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  360. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  361. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  362. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  363. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  364. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  365. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  366. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  367. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  368. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  369. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  370. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  371. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  372. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  373. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  374. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  375. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  376. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  377. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  378. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  379. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  380. numpy/f2py/tests/src/mixed/foo.f +5 -0
  381. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  382. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  383. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  384. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  385. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  386. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  387. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  388. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  389. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  390. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  391. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  392. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  393. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  394. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  395. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  396. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  397. numpy/f2py/tests/src/regression/AB.inc +1 -0
  398. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  399. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  400. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  401. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  402. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  403. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  404. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  405. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  406. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  407. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  408. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  409. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  410. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  411. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  412. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  413. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  414. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  415. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  416. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  417. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  418. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  419. numpy/f2py/tests/src/routines/subrout.f +4 -0
  420. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  421. numpy/f2py/tests/src/size/foo.f90 +44 -0
  422. numpy/f2py/tests/src/string/char.f90 +29 -0
  423. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  424. numpy/f2py/tests/src/string/gh24008.f +8 -0
  425. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  426. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  427. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  428. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  429. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  430. numpy/f2py/tests/src/string/string.f +12 -0
  431. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  432. numpy/f2py/tests/test_abstract_interface.py +26 -0
  433. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  434. numpy/f2py/tests/test_assumed_shape.py +50 -0
  435. numpy/f2py/tests/test_block_docstring.py +20 -0
  436. numpy/f2py/tests/test_callback.py +263 -0
  437. numpy/f2py/tests/test_character.py +641 -0
  438. numpy/f2py/tests/test_common.py +23 -0
  439. numpy/f2py/tests/test_crackfortran.py +421 -0
  440. numpy/f2py/tests/test_data.py +71 -0
  441. numpy/f2py/tests/test_docs.py +66 -0
  442. numpy/f2py/tests/test_f2cmap.py +17 -0
  443. numpy/f2py/tests/test_f2py2e.py +983 -0
  444. numpy/f2py/tests/test_isoc.py +56 -0
  445. numpy/f2py/tests/test_kind.py +52 -0
  446. numpy/f2py/tests/test_mixed.py +35 -0
  447. numpy/f2py/tests/test_modules.py +83 -0
  448. numpy/f2py/tests/test_parameter.py +129 -0
  449. numpy/f2py/tests/test_pyf_src.py +43 -0
  450. numpy/f2py/tests/test_quoted_character.py +18 -0
  451. numpy/f2py/tests/test_regression.py +187 -0
  452. numpy/f2py/tests/test_return_character.py +48 -0
  453. numpy/f2py/tests/test_return_complex.py +67 -0
  454. numpy/f2py/tests/test_return_integer.py +55 -0
  455. numpy/f2py/tests/test_return_logical.py +65 -0
  456. numpy/f2py/tests/test_return_real.py +109 -0
  457. numpy/f2py/tests/test_routines.py +29 -0
  458. numpy/f2py/tests/test_semicolon_split.py +75 -0
  459. numpy/f2py/tests/test_size.py +45 -0
  460. numpy/f2py/tests/test_string.py +100 -0
  461. numpy/f2py/tests/test_symbolic.py +500 -0
  462. numpy/f2py/tests/test_value_attrspec.py +15 -0
  463. numpy/f2py/tests/util.py +442 -0
  464. numpy/f2py/use_rules.py +99 -0
  465. numpy/f2py/use_rules.pyi +9 -0
  466. numpy/fft/__init__.py +213 -0
  467. numpy/fft/__init__.pyi +38 -0
  468. numpy/fft/_helper.py +235 -0
  469. numpy/fft/_helper.pyi +44 -0
  470. numpy/fft/_pocketfft.py +1693 -0
  471. numpy/fft/_pocketfft.pyi +137 -0
  472. numpy/fft/_pocketfft_umath.cp314t-win_arm64.lib +0 -0
  473. numpy/fft/_pocketfft_umath.cp314t-win_arm64.pyd +0 -0
  474. numpy/fft/tests/__init__.py +0 -0
  475. numpy/fft/tests/test_helper.py +167 -0
  476. numpy/fft/tests/test_pocketfft.py +589 -0
  477. numpy/lib/__init__.py +97 -0
  478. numpy/lib/__init__.pyi +52 -0
  479. numpy/lib/_array_utils_impl.py +62 -0
  480. numpy/lib/_array_utils_impl.pyi +10 -0
  481. numpy/lib/_arraypad_impl.py +926 -0
  482. numpy/lib/_arraypad_impl.pyi +88 -0
  483. numpy/lib/_arraysetops_impl.py +1158 -0
  484. numpy/lib/_arraysetops_impl.pyi +462 -0
  485. numpy/lib/_arrayterator_impl.py +224 -0
  486. numpy/lib/_arrayterator_impl.pyi +45 -0
  487. numpy/lib/_datasource.py +700 -0
  488. numpy/lib/_datasource.pyi +30 -0
  489. numpy/lib/_format_impl.py +1036 -0
  490. numpy/lib/_format_impl.pyi +56 -0
  491. numpy/lib/_function_base_impl.py +5760 -0
  492. numpy/lib/_function_base_impl.pyi +2324 -0
  493. numpy/lib/_histograms_impl.py +1085 -0
  494. numpy/lib/_histograms_impl.pyi +40 -0
  495. numpy/lib/_index_tricks_impl.py +1048 -0
  496. numpy/lib/_index_tricks_impl.pyi +267 -0
  497. numpy/lib/_iotools.py +900 -0
  498. numpy/lib/_iotools.pyi +116 -0
  499. numpy/lib/_nanfunctions_impl.py +2006 -0
  500. numpy/lib/_nanfunctions_impl.pyi +48 -0
  501. numpy/lib/_npyio_impl.py +2583 -0
  502. numpy/lib/_npyio_impl.pyi +299 -0
  503. numpy/lib/_polynomial_impl.py +1465 -0
  504. numpy/lib/_polynomial_impl.pyi +338 -0
  505. numpy/lib/_scimath_impl.py +642 -0
  506. numpy/lib/_scimath_impl.pyi +93 -0
  507. numpy/lib/_shape_base_impl.py +1289 -0
  508. numpy/lib/_shape_base_impl.pyi +236 -0
  509. numpy/lib/_stride_tricks_impl.py +582 -0
  510. numpy/lib/_stride_tricks_impl.pyi +73 -0
  511. numpy/lib/_twodim_base_impl.py +1201 -0
  512. numpy/lib/_twodim_base_impl.pyi +408 -0
  513. numpy/lib/_type_check_impl.py +710 -0
  514. numpy/lib/_type_check_impl.pyi +348 -0
  515. numpy/lib/_ufunclike_impl.py +199 -0
  516. numpy/lib/_ufunclike_impl.pyi +60 -0
  517. numpy/lib/_user_array_impl.py +310 -0
  518. numpy/lib/_user_array_impl.pyi +226 -0
  519. numpy/lib/_utils_impl.py +784 -0
  520. numpy/lib/_utils_impl.pyi +22 -0
  521. numpy/lib/_version.py +153 -0
  522. numpy/lib/_version.pyi +17 -0
  523. numpy/lib/array_utils.py +7 -0
  524. numpy/lib/array_utils.pyi +6 -0
  525. numpy/lib/format.py +24 -0
  526. numpy/lib/format.pyi +24 -0
  527. numpy/lib/introspect.py +94 -0
  528. numpy/lib/introspect.pyi +3 -0
  529. numpy/lib/mixins.py +180 -0
  530. numpy/lib/mixins.pyi +78 -0
  531. numpy/lib/npyio.py +1 -0
  532. numpy/lib/npyio.pyi +5 -0
  533. numpy/lib/recfunctions.py +1681 -0
  534. numpy/lib/recfunctions.pyi +444 -0
  535. numpy/lib/scimath.py +13 -0
  536. numpy/lib/scimath.pyi +12 -0
  537. numpy/lib/stride_tricks.py +1 -0
  538. numpy/lib/stride_tricks.pyi +4 -0
  539. numpy/lib/tests/__init__.py +0 -0
  540. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  541. numpy/lib/tests/data/py2-objarr.npy +0 -0
  542. numpy/lib/tests/data/py2-objarr.npz +0 -0
  543. numpy/lib/tests/data/py3-objarr.npy +0 -0
  544. numpy/lib/tests/data/py3-objarr.npz +0 -0
  545. numpy/lib/tests/data/python3.npy +0 -0
  546. numpy/lib/tests/data/win64python2.npy +0 -0
  547. numpy/lib/tests/test__datasource.py +328 -0
  548. numpy/lib/tests/test__iotools.py +358 -0
  549. numpy/lib/tests/test__version.py +64 -0
  550. numpy/lib/tests/test_array_utils.py +32 -0
  551. numpy/lib/tests/test_arraypad.py +1427 -0
  552. numpy/lib/tests/test_arraysetops.py +1302 -0
  553. numpy/lib/tests/test_arrayterator.py +45 -0
  554. numpy/lib/tests/test_format.py +1054 -0
  555. numpy/lib/tests/test_function_base.py +4750 -0
  556. numpy/lib/tests/test_histograms.py +855 -0
  557. numpy/lib/tests/test_index_tricks.py +693 -0
  558. numpy/lib/tests/test_io.py +2857 -0
  559. numpy/lib/tests/test_loadtxt.py +1099 -0
  560. numpy/lib/tests/test_mixins.py +215 -0
  561. numpy/lib/tests/test_nanfunctions.py +1438 -0
  562. numpy/lib/tests/test_packbits.py +376 -0
  563. numpy/lib/tests/test_polynomial.py +325 -0
  564. numpy/lib/tests/test_recfunctions.py +1042 -0
  565. numpy/lib/tests/test_regression.py +231 -0
  566. numpy/lib/tests/test_shape_base.py +813 -0
  567. numpy/lib/tests/test_stride_tricks.py +655 -0
  568. numpy/lib/tests/test_twodim_base.py +559 -0
  569. numpy/lib/tests/test_type_check.py +473 -0
  570. numpy/lib/tests/test_ufunclike.py +97 -0
  571. numpy/lib/tests/test_utils.py +80 -0
  572. numpy/lib/user_array.py +1 -0
  573. numpy/lib/user_array.pyi +1 -0
  574. numpy/linalg/__init__.py +95 -0
  575. numpy/linalg/__init__.pyi +71 -0
  576. numpy/linalg/_linalg.py +3657 -0
  577. numpy/linalg/_linalg.pyi +548 -0
  578. numpy/linalg/_umath_linalg.cp314t-win_arm64.lib +0 -0
  579. numpy/linalg/_umath_linalg.cp314t-win_arm64.pyd +0 -0
  580. numpy/linalg/_umath_linalg.pyi +60 -0
  581. numpy/linalg/lapack_lite.cp314t-win_arm64.lib +0 -0
  582. numpy/linalg/lapack_lite.cp314t-win_arm64.pyd +0 -0
  583. numpy/linalg/lapack_lite.pyi +143 -0
  584. numpy/linalg/tests/__init__.py +0 -0
  585. numpy/linalg/tests/test_deprecations.py +21 -0
  586. numpy/linalg/tests/test_linalg.py +2442 -0
  587. numpy/linalg/tests/test_regression.py +182 -0
  588. numpy/ma/API_CHANGES.txt +135 -0
  589. numpy/ma/LICENSE +24 -0
  590. numpy/ma/README.rst +236 -0
  591. numpy/ma/__init__.py +53 -0
  592. numpy/ma/__init__.pyi +458 -0
  593. numpy/ma/core.py +8929 -0
  594. numpy/ma/core.pyi +3720 -0
  595. numpy/ma/extras.py +2266 -0
  596. numpy/ma/extras.pyi +297 -0
  597. numpy/ma/mrecords.py +762 -0
  598. numpy/ma/mrecords.pyi +96 -0
  599. numpy/ma/tests/__init__.py +0 -0
  600. numpy/ma/tests/test_arrayobject.py +40 -0
  601. numpy/ma/tests/test_core.py +6008 -0
  602. numpy/ma/tests/test_deprecations.py +65 -0
  603. numpy/ma/tests/test_extras.py +1945 -0
  604. numpy/ma/tests/test_mrecords.py +495 -0
  605. numpy/ma/tests/test_old_ma.py +939 -0
  606. numpy/ma/tests/test_regression.py +83 -0
  607. numpy/ma/tests/test_subclassing.py +469 -0
  608. numpy/ma/testutils.py +294 -0
  609. numpy/ma/testutils.pyi +69 -0
  610. numpy/matlib.py +380 -0
  611. numpy/matlib.pyi +580 -0
  612. numpy/matrixlib/__init__.py +12 -0
  613. numpy/matrixlib/__init__.pyi +3 -0
  614. numpy/matrixlib/defmatrix.py +1119 -0
  615. numpy/matrixlib/defmatrix.pyi +218 -0
  616. numpy/matrixlib/tests/__init__.py +0 -0
  617. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  618. numpy/matrixlib/tests/test_interaction.py +360 -0
  619. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  620. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  621. numpy/matrixlib/tests/test_multiarray.py +17 -0
  622. numpy/matrixlib/tests/test_numeric.py +18 -0
  623. numpy/matrixlib/tests/test_regression.py +31 -0
  624. numpy/polynomial/__init__.py +187 -0
  625. numpy/polynomial/__init__.pyi +31 -0
  626. numpy/polynomial/_polybase.py +1191 -0
  627. numpy/polynomial/_polybase.pyi +262 -0
  628. numpy/polynomial/_polytypes.pyi +501 -0
  629. numpy/polynomial/chebyshev.py +2001 -0
  630. numpy/polynomial/chebyshev.pyi +180 -0
  631. numpy/polynomial/hermite.py +1738 -0
  632. numpy/polynomial/hermite.pyi +106 -0
  633. numpy/polynomial/hermite_e.py +1640 -0
  634. numpy/polynomial/hermite_e.pyi +106 -0
  635. numpy/polynomial/laguerre.py +1673 -0
  636. numpy/polynomial/laguerre.pyi +100 -0
  637. numpy/polynomial/legendre.py +1603 -0
  638. numpy/polynomial/legendre.pyi +100 -0
  639. numpy/polynomial/polynomial.py +1625 -0
  640. numpy/polynomial/polynomial.pyi +109 -0
  641. numpy/polynomial/polyutils.py +759 -0
  642. numpy/polynomial/polyutils.pyi +307 -0
  643. numpy/polynomial/tests/__init__.py +0 -0
  644. numpy/polynomial/tests/test_chebyshev.py +618 -0
  645. numpy/polynomial/tests/test_classes.py +613 -0
  646. numpy/polynomial/tests/test_hermite.py +553 -0
  647. numpy/polynomial/tests/test_hermite_e.py +554 -0
  648. numpy/polynomial/tests/test_laguerre.py +535 -0
  649. numpy/polynomial/tests/test_legendre.py +566 -0
  650. numpy/polynomial/tests/test_polynomial.py +691 -0
  651. numpy/polynomial/tests/test_polyutils.py +123 -0
  652. numpy/polynomial/tests/test_printing.py +557 -0
  653. numpy/polynomial/tests/test_symbol.py +217 -0
  654. numpy/py.typed +0 -0
  655. numpy/random/LICENSE.md +71 -0
  656. numpy/random/__init__.pxd +14 -0
  657. numpy/random/__init__.py +213 -0
  658. numpy/random/__init__.pyi +124 -0
  659. numpy/random/_bounded_integers.cp314t-win_arm64.lib +0 -0
  660. numpy/random/_bounded_integers.cp314t-win_arm64.pyd +0 -0
  661. numpy/random/_bounded_integers.pxd +38 -0
  662. numpy/random/_bounded_integers.pyi +1 -0
  663. numpy/random/_common.cp314t-win_arm64.lib +0 -0
  664. numpy/random/_common.cp314t-win_arm64.pyd +0 -0
  665. numpy/random/_common.pxd +110 -0
  666. numpy/random/_common.pyi +16 -0
  667. numpy/random/_examples/cffi/extending.py +44 -0
  668. numpy/random/_examples/cffi/parse.py +53 -0
  669. numpy/random/_examples/cython/extending.pyx +77 -0
  670. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  671. numpy/random/_examples/cython/meson.build +53 -0
  672. numpy/random/_examples/numba/extending.py +86 -0
  673. numpy/random/_examples/numba/extending_distributions.py +67 -0
  674. numpy/random/_generator.cp314t-win_arm64.lib +0 -0
  675. numpy/random/_generator.cp314t-win_arm64.pyd +0 -0
  676. numpy/random/_generator.pyi +862 -0
  677. numpy/random/_mt19937.cp314t-win_arm64.lib +0 -0
  678. numpy/random/_mt19937.cp314t-win_arm64.pyd +0 -0
  679. numpy/random/_mt19937.pyi +27 -0
  680. numpy/random/_pcg64.cp314t-win_arm64.lib +0 -0
  681. numpy/random/_pcg64.cp314t-win_arm64.pyd +0 -0
  682. numpy/random/_pcg64.pyi +41 -0
  683. numpy/random/_philox.cp314t-win_arm64.lib +0 -0
  684. numpy/random/_philox.cp314t-win_arm64.pyd +0 -0
  685. numpy/random/_philox.pyi +36 -0
  686. numpy/random/_pickle.py +88 -0
  687. numpy/random/_pickle.pyi +43 -0
  688. numpy/random/_sfc64.cp314t-win_arm64.lib +0 -0
  689. numpy/random/_sfc64.cp314t-win_arm64.pyd +0 -0
  690. numpy/random/_sfc64.pyi +25 -0
  691. numpy/random/bit_generator.cp314t-win_arm64.lib +0 -0
  692. numpy/random/bit_generator.cp314t-win_arm64.pyd +0 -0
  693. numpy/random/bit_generator.pxd +40 -0
  694. numpy/random/bit_generator.pyi +123 -0
  695. numpy/random/c_distributions.pxd +119 -0
  696. numpy/random/lib/npyrandom.lib +0 -0
  697. numpy/random/mtrand.cp314t-win_arm64.lib +0 -0
  698. numpy/random/mtrand.cp314t-win_arm64.pyd +0 -0
  699. numpy/random/mtrand.pyi +759 -0
  700. numpy/random/tests/__init__.py +0 -0
  701. numpy/random/tests/data/__init__.py +0 -0
  702. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  703. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  704. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  705. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  706. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  707. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  708. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  709. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  710. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  711. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  712. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  713. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  714. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  715. numpy/random/tests/test_direct.py +595 -0
  716. numpy/random/tests/test_extending.py +131 -0
  717. numpy/random/tests/test_generator_mt19937.py +2825 -0
  718. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  719. numpy/random/tests/test_random.py +1724 -0
  720. numpy/random/tests/test_randomstate.py +2099 -0
  721. numpy/random/tests/test_randomstate_regression.py +213 -0
  722. numpy/random/tests/test_regression.py +175 -0
  723. numpy/random/tests/test_seed_sequence.py +79 -0
  724. numpy/random/tests/test_smoke.py +882 -0
  725. numpy/rec/__init__.py +2 -0
  726. numpy/rec/__init__.pyi +23 -0
  727. numpy/strings/__init__.py +2 -0
  728. numpy/strings/__init__.pyi +97 -0
  729. numpy/testing/__init__.py +22 -0
  730. numpy/testing/__init__.pyi +107 -0
  731. numpy/testing/_private/__init__.py +0 -0
  732. numpy/testing/_private/__init__.pyi +0 -0
  733. numpy/testing/_private/extbuild.py +250 -0
  734. numpy/testing/_private/extbuild.pyi +25 -0
  735. numpy/testing/_private/utils.py +2830 -0
  736. numpy/testing/_private/utils.pyi +505 -0
  737. numpy/testing/overrides.py +84 -0
  738. numpy/testing/overrides.pyi +10 -0
  739. numpy/testing/print_coercion_tables.py +207 -0
  740. numpy/testing/print_coercion_tables.pyi +26 -0
  741. numpy/testing/tests/__init__.py +0 -0
  742. numpy/testing/tests/test_utils.py +2123 -0
  743. numpy/tests/__init__.py +0 -0
  744. numpy/tests/test__all__.py +10 -0
  745. numpy/tests/test_configtool.py +51 -0
  746. numpy/tests/test_ctypeslib.py +383 -0
  747. numpy/tests/test_lazyloading.py +42 -0
  748. numpy/tests/test_matlib.py +59 -0
  749. numpy/tests/test_numpy_config.py +47 -0
  750. numpy/tests/test_numpy_version.py +54 -0
  751. numpy/tests/test_public_api.py +807 -0
  752. numpy/tests/test_reloading.py +76 -0
  753. numpy/tests/test_scripts.py +48 -0
  754. numpy/tests/test_warnings.py +79 -0
  755. numpy/typing/__init__.py +233 -0
  756. numpy/typing/__init__.pyi +3 -0
  757. numpy/typing/mypy_plugin.py +200 -0
  758. numpy/typing/tests/__init__.py +0 -0
  759. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  760. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  761. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  762. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  763. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  764. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  765. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  766. numpy/typing/tests/data/fail/char.pyi +63 -0
  767. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  768. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  769. numpy/typing/tests/data/fail/constants.pyi +3 -0
  770. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  771. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  772. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  773. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  774. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  775. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  776. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  777. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  778. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  779. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  780. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  781. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  782. numpy/typing/tests/data/fail/ma.pyi +155 -0
  783. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  784. numpy/typing/tests/data/fail/modules.pyi +17 -0
  785. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  786. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  787. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  788. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  789. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  790. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  791. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  792. numpy/typing/tests/data/fail/random.pyi +62 -0
  793. numpy/typing/tests/data/fail/rec.pyi +17 -0
  794. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  795. numpy/typing/tests/data/fail/shape.pyi +7 -0
  796. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  797. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  798. numpy/typing/tests/data/fail/strings.pyi +52 -0
  799. numpy/typing/tests/data/fail/testing.pyi +28 -0
  800. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  801. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  802. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  803. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  804. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  805. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  806. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  807. numpy/typing/tests/data/mypy.ini +8 -0
  808. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  809. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  810. numpy/typing/tests/data/pass/array_like.py +43 -0
  811. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  812. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  813. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  814. numpy/typing/tests/data/pass/comparisons.py +316 -0
  815. numpy/typing/tests/data/pass/dtype.py +57 -0
  816. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  817. numpy/typing/tests/data/pass/flatiter.py +26 -0
  818. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  819. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  820. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  821. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  822. numpy/typing/tests/data/pass/lib_version.py +18 -0
  823. numpy/typing/tests/data/pass/literal.py +52 -0
  824. numpy/typing/tests/data/pass/ma.py +199 -0
  825. numpy/typing/tests/data/pass/mod.py +149 -0
  826. numpy/typing/tests/data/pass/modules.py +45 -0
  827. numpy/typing/tests/data/pass/multiarray.py +77 -0
  828. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  829. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  830. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  831. numpy/typing/tests/data/pass/nditer.py +4 -0
  832. numpy/typing/tests/data/pass/numeric.py +90 -0
  833. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  834. numpy/typing/tests/data/pass/random.py +1498 -0
  835. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  836. numpy/typing/tests/data/pass/scalars.py +249 -0
  837. numpy/typing/tests/data/pass/shape.py +19 -0
  838. numpy/typing/tests/data/pass/simple.py +170 -0
  839. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  840. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  841. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  842. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  843. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  844. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  845. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  846. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  847. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  848. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  849. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  850. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  851. numpy/typing/tests/data/reveal/char.pyi +225 -0
  852. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  853. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  854. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  855. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  856. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  857. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  858. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  859. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  860. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  861. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  862. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  863. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  864. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  865. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  866. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  867. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  868. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  869. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  870. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  871. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  872. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  873. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  874. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  875. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  876. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  877. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  878. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  879. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  880. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  881. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  882. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  883. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  884. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  885. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  886. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  887. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  888. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  889. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  890. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  891. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  892. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  893. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  894. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  895. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  896. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  897. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  898. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  899. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  900. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  901. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  902. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  903. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  904. numpy/typing/tests/test_isfile.py +38 -0
  905. numpy/typing/tests/test_runtime.py +110 -0
  906. numpy/typing/tests/test_typing.py +205 -0
  907. numpy/version.py +11 -0
  908. numpy/version.pyi +9 -0
  909. numpy-2.4.1.dist-info/DELVEWHEEL +2 -0
  910. numpy-2.4.1.dist-info/METADATA +139 -0
  911. numpy-2.4.1.dist-info/RECORD +932 -0
  912. numpy-2.4.1.dist-info/WHEEL +4 -0
  913. numpy-2.4.1.dist-info/entry_points.txt +13 -0
  914. numpy-2.4.1.dist-info/licenses/LICENSE.txt +914 -0
  915. numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  916. numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  917. numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  918. numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  919. numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  920. numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  921. numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  922. numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  923. numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
  924. numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  925. numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  926. numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  927. numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  928. numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  929. numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  930. numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
  931. numpy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
  932. numpy.libs/scipy_openblas-7b69cbfd2599e6035f1310f2a72d59a6.dll +0 -0
numpy/lib/_iotools.py ADDED
@@ -0,0 +1,900 @@
1
+ """A collection of functions designed to help I/O with ascii files.
2
+
3
+ """
4
+ __docformat__ = "restructuredtext en"
5
+
6
+ import itertools
7
+
8
+ import numpy as np
9
+ import numpy._core.numeric as nx
10
+ from numpy._utils import asbytes, asunicode
11
+
12
+
13
+ def _decode_line(line, encoding=None):
14
+ """Decode bytes from binary input streams.
15
+
16
+ Defaults to decoding from 'latin1'.
17
+
18
+ Parameters
19
+ ----------
20
+ line : str or bytes
21
+ Line to be decoded.
22
+ encoding : str
23
+ Encoding used to decode `line`.
24
+
25
+ Returns
26
+ -------
27
+ decoded_line : str
28
+
29
+ """
30
+ if type(line) is bytes:
31
+ if encoding is None:
32
+ encoding = "latin1"
33
+ line = line.decode(encoding)
34
+
35
+ return line
36
+
37
+
38
+ def _is_string_like(obj):
39
+ """
40
+ Check whether obj behaves like a string.
41
+ """
42
+ try:
43
+ obj + ''
44
+ except (TypeError, ValueError):
45
+ return False
46
+ return True
47
+
48
+
49
+ def _is_bytes_like(obj):
50
+ """
51
+ Check whether obj behaves like a bytes object.
52
+ """
53
+ try:
54
+ obj + b''
55
+ except (TypeError, ValueError):
56
+ return False
57
+ return True
58
+
59
+
60
+ def has_nested_fields(ndtype):
61
+ """
62
+ Returns whether one or several fields of a dtype are nested.
63
+
64
+ Parameters
65
+ ----------
66
+ ndtype : dtype
67
+ Data-type of a structured array.
68
+
69
+ Raises
70
+ ------
71
+ AttributeError
72
+ If `ndtype` does not have a `names` attribute.
73
+
74
+ Examples
75
+ --------
76
+ >>> import numpy as np
77
+ >>> dt = np.dtype([('name', 'S4'), ('x', float), ('y', float)])
78
+ >>> np.lib._iotools.has_nested_fields(dt)
79
+ False
80
+
81
+ """
82
+ return any(ndtype[name].names is not None for name in ndtype.names or ())
83
+
84
+
85
+ def flatten_dtype(ndtype, flatten_base=False):
86
+ """
87
+ Unpack a structured data-type by collapsing nested fields and/or fields
88
+ with a shape.
89
+
90
+ Note that the field names are lost.
91
+
92
+ Parameters
93
+ ----------
94
+ ndtype : dtype
95
+ The datatype to collapse
96
+ flatten_base : bool, optional
97
+ If True, transform a field with a shape into several fields. Default is
98
+ False.
99
+
100
+ Examples
101
+ --------
102
+ >>> import numpy as np
103
+ >>> dt = np.dtype([('name', 'S4'), ('x', float), ('y', float),
104
+ ... ('block', int, (2, 3))])
105
+ >>> np.lib._iotools.flatten_dtype(dt)
106
+ [dtype('S4'), dtype('float64'), dtype('float64'), dtype('int64')]
107
+ >>> np.lib._iotools.flatten_dtype(dt, flatten_base=True)
108
+ [dtype('S4'),
109
+ dtype('float64'),
110
+ dtype('float64'),
111
+ dtype('int64'),
112
+ dtype('int64'),
113
+ dtype('int64'),
114
+ dtype('int64'),
115
+ dtype('int64'),
116
+ dtype('int64')]
117
+
118
+ """
119
+ names = ndtype.names
120
+ if names is None:
121
+ if flatten_base:
122
+ return [ndtype.base] * int(np.prod(ndtype.shape))
123
+ return [ndtype.base]
124
+ else:
125
+ types = []
126
+ for field in names:
127
+ info = ndtype.fields[field]
128
+ flat_dt = flatten_dtype(info[0], flatten_base)
129
+ types.extend(flat_dt)
130
+ return types
131
+
132
+
133
+ class LineSplitter:
134
+ """
135
+ Object to split a string at a given delimiter or at given places.
136
+
137
+ Parameters
138
+ ----------
139
+ delimiter : str, int, or sequence of ints, optional
140
+ If a string, character used to delimit consecutive fields.
141
+ If an integer or a sequence of integers, width(s) of each field.
142
+ comments : str, optional
143
+ Character used to mark the beginning of a comment. Default is '#'.
144
+ autostrip : bool, optional
145
+ Whether to strip each individual field. Default is True.
146
+
147
+ """
148
+
149
+ def autostrip(self, method):
150
+ """
151
+ Wrapper to strip each member of the output of `method`.
152
+
153
+ Parameters
154
+ ----------
155
+ method : function
156
+ Function that takes a single argument and returns a sequence of
157
+ strings.
158
+
159
+ Returns
160
+ -------
161
+ wrapped : function
162
+ The result of wrapping `method`. `wrapped` takes a single input
163
+ argument and returns a list of strings that are stripped of
164
+ white-space.
165
+
166
+ """
167
+ return lambda input: [_.strip() for _ in method(input)]
168
+
169
+ def __init__(self, delimiter=None, comments='#', autostrip=True,
170
+ encoding=None):
171
+ delimiter = _decode_line(delimiter)
172
+ comments = _decode_line(comments)
173
+
174
+ self.comments = comments
175
+
176
+ # Delimiter is a character
177
+ if (delimiter is None) or isinstance(delimiter, str):
178
+ delimiter = delimiter or None
179
+ _handyman = self._delimited_splitter
180
+ # Delimiter is a list of field widths
181
+ elif hasattr(delimiter, '__iter__'):
182
+ _handyman = self._variablewidth_splitter
183
+ idx = np.cumsum([0] + list(delimiter))
184
+ delimiter = [slice(i, j) for (i, j) in itertools.pairwise(idx)]
185
+ # Delimiter is a single integer
186
+ elif int(delimiter):
187
+ (_handyman, delimiter) = (
188
+ self._fixedwidth_splitter, int(delimiter))
189
+ else:
190
+ (_handyman, delimiter) = (self._delimited_splitter, None)
191
+ self.delimiter = delimiter
192
+ if autostrip:
193
+ self._handyman = self.autostrip(_handyman)
194
+ else:
195
+ self._handyman = _handyman
196
+ self.encoding = encoding
197
+
198
+ def _delimited_splitter(self, line):
199
+ """Chop off comments, strip, and split at delimiter. """
200
+ if self.comments is not None:
201
+ line = line.split(self.comments)[0]
202
+ line = line.strip(" \r\n")
203
+ if not line:
204
+ return []
205
+ return line.split(self.delimiter)
206
+
207
+ def _fixedwidth_splitter(self, line):
208
+ if self.comments is not None:
209
+ line = line.split(self.comments)[0]
210
+ line = line.strip("\r\n")
211
+ if not line:
212
+ return []
213
+ fixed = self.delimiter
214
+ slices = [slice(i, i + fixed) for i in range(0, len(line), fixed)]
215
+ return [line[s] for s in slices]
216
+
217
+ def _variablewidth_splitter(self, line):
218
+ if self.comments is not None:
219
+ line = line.split(self.comments)[0]
220
+ if not line:
221
+ return []
222
+ slices = self.delimiter
223
+ return [line[s] for s in slices]
224
+
225
+ def __call__(self, line):
226
+ return self._handyman(_decode_line(line, self.encoding))
227
+
228
+
229
+ class NameValidator:
230
+ """
231
+ Object to validate a list of strings to use as field names.
232
+
233
+ The strings are stripped of any non alphanumeric character, and spaces
234
+ are replaced by '_'. During instantiation, the user can define a list
235
+ of names to exclude, as well as a list of invalid characters. Names in
236
+ the exclusion list are appended a '_' character.
237
+
238
+ Once an instance has been created, it can be called with a list of
239
+ names, and a list of valid names will be created. The `__call__`
240
+ method accepts an optional keyword "default" that sets the default name
241
+ in case of ambiguity. By default this is 'f', so that names will
242
+ default to `f0`, `f1`, etc.
243
+
244
+ Parameters
245
+ ----------
246
+ excludelist : sequence, optional
247
+ A list of names to exclude. This list is appended to the default
248
+ list ['return', 'file', 'print']. Excluded names are appended an
249
+ underscore: for example, `file` becomes `file_` if supplied.
250
+ deletechars : str, optional
251
+ A string combining invalid characters that must be deleted from the
252
+ names.
253
+ case_sensitive : {True, False, 'upper', 'lower'}, optional
254
+ * If True, field names are case-sensitive.
255
+ * If False or 'upper', field names are converted to upper case.
256
+ * If 'lower', field names are converted to lower case.
257
+
258
+ The default value is True.
259
+ replace_space : '_', optional
260
+ Character(s) used in replacement of white spaces.
261
+
262
+ Notes
263
+ -----
264
+ Calling an instance of `NameValidator` is the same as calling its
265
+ method `validate`.
266
+
267
+ Examples
268
+ --------
269
+ >>> import numpy as np
270
+ >>> validator = np.lib._iotools.NameValidator()
271
+ >>> validator(['file', 'field2', 'with space', 'CaSe'])
272
+ ('file_', 'field2', 'with_space', 'CaSe')
273
+
274
+ >>> validator = np.lib._iotools.NameValidator(excludelist=['excl'],
275
+ ... deletechars='q',
276
+ ... case_sensitive=False)
277
+ >>> validator(['excl', 'field2', 'no_q', 'with space', 'CaSe'])
278
+ ('EXCL', 'FIELD2', 'NO_Q', 'WITH_SPACE', 'CASE')
279
+
280
+ """
281
+
282
+ defaultexcludelist = 'return', 'file', 'print'
283
+ defaultdeletechars = frozenset(r"""~!@#$%^&*()-=+~\|]}[{';: /?.>,<""")
284
+
285
+ def __init__(self, excludelist=None, deletechars=None,
286
+ case_sensitive=None, replace_space='_'):
287
+ # Process the exclusion list ..
288
+ if excludelist is None:
289
+ excludelist = []
290
+ excludelist.extend(self.defaultexcludelist)
291
+ self.excludelist = excludelist
292
+ # Process the list of characters to delete
293
+ if deletechars is None:
294
+ delete = set(self.defaultdeletechars)
295
+ else:
296
+ delete = set(deletechars)
297
+ delete.add('"')
298
+ self.deletechars = delete
299
+ # Process the case option .....
300
+ if (case_sensitive is None) or (case_sensitive is True):
301
+ self.case_converter = lambda x: x
302
+ elif (case_sensitive is False) or case_sensitive.startswith('u'):
303
+ self.case_converter = lambda x: x.upper()
304
+ elif case_sensitive.startswith('l'):
305
+ self.case_converter = lambda x: x.lower()
306
+ else:
307
+ msg = f'unrecognized case_sensitive value {case_sensitive}.'
308
+ raise ValueError(msg)
309
+
310
+ self.replace_space = replace_space
311
+
312
+ def validate(self, names, defaultfmt="f%i", nbfields=None):
313
+ """
314
+ Validate a list of strings as field names for a structured array.
315
+
316
+ Parameters
317
+ ----------
318
+ names : sequence of str
319
+ Strings to be validated.
320
+ defaultfmt : str, optional
321
+ Default format string, used if validating a given string
322
+ reduces its length to zero.
323
+ nbfields : integer, optional
324
+ Final number of validated names, used to expand or shrink the
325
+ initial list of names.
326
+
327
+ Returns
328
+ -------
329
+ validatednames : list of str
330
+ The list of validated field names.
331
+
332
+ Notes
333
+ -----
334
+ A `NameValidator` instance can be called directly, which is the
335
+ same as calling `validate`. For examples, see `NameValidator`.
336
+
337
+ """
338
+ # Initial checks ..............
339
+ if (names is None):
340
+ if (nbfields is None):
341
+ return None
342
+ names = []
343
+ if isinstance(names, str):
344
+ names = [names, ]
345
+ if nbfields is not None:
346
+ nbnames = len(names)
347
+ if (nbnames < nbfields):
348
+ names = list(names) + [''] * (nbfields - nbnames)
349
+ elif (nbnames > nbfields):
350
+ names = names[:nbfields]
351
+ # Set some shortcuts ...........
352
+ deletechars = self.deletechars
353
+ excludelist = self.excludelist
354
+ case_converter = self.case_converter
355
+ replace_space = self.replace_space
356
+ # Initializes some variables ...
357
+ validatednames = []
358
+ seen = {}
359
+ nbempty = 0
360
+
361
+ for item in names:
362
+ item = case_converter(item).strip()
363
+ if replace_space:
364
+ item = item.replace(' ', replace_space)
365
+ item = ''.join([c for c in item if c not in deletechars])
366
+ if item == '':
367
+ item = defaultfmt % nbempty
368
+ while item in names:
369
+ nbempty += 1
370
+ item = defaultfmt % nbempty
371
+ nbempty += 1
372
+ elif item in excludelist:
373
+ item += '_'
374
+ cnt = seen.get(item, 0)
375
+ if cnt > 0:
376
+ validatednames.append(item + '_%d' % cnt)
377
+ else:
378
+ validatednames.append(item)
379
+ seen[item] = cnt + 1
380
+ return tuple(validatednames)
381
+
382
+ def __call__(self, names, defaultfmt="f%i", nbfields=None):
383
+ return self.validate(names, defaultfmt=defaultfmt, nbfields=nbfields)
384
+
385
+
386
+ def str2bool(value):
387
+ """
388
+ Tries to transform a string supposed to represent a boolean to a boolean.
389
+
390
+ Parameters
391
+ ----------
392
+ value : str
393
+ The string that is transformed to a boolean.
394
+
395
+ Returns
396
+ -------
397
+ boolval : bool
398
+ The boolean representation of `value`.
399
+
400
+ Raises
401
+ ------
402
+ ValueError
403
+ If the string is not 'True' or 'False' (case independent)
404
+
405
+ Examples
406
+ --------
407
+ >>> import numpy as np
408
+ >>> np.lib._iotools.str2bool('TRUE')
409
+ True
410
+ >>> np.lib._iotools.str2bool('false')
411
+ False
412
+
413
+ """
414
+ value = value.upper()
415
+ if value == 'TRUE':
416
+ return True
417
+ elif value == 'FALSE':
418
+ return False
419
+ else:
420
+ raise ValueError("Invalid boolean")
421
+
422
+
423
+ class ConverterError(Exception):
424
+ """
425
+ Exception raised when an error occurs in a converter for string values.
426
+
427
+ """
428
+ pass
429
+
430
+
431
+ class ConverterLockError(ConverterError):
432
+ """
433
+ Exception raised when an attempt is made to upgrade a locked converter.
434
+
435
+ """
436
+ pass
437
+
438
+
439
+ class ConversionWarning(UserWarning):
440
+ """
441
+ Warning issued when a string converter has a problem.
442
+
443
+ Notes
444
+ -----
445
+ In `genfromtxt` a `ConversionWarning` is issued if raising exceptions
446
+ is explicitly suppressed with the "invalid_raise" keyword.
447
+
448
+ """
449
+ pass
450
+
451
+
452
+ class StringConverter:
453
+ """
454
+ Factory class for function transforming a string into another object
455
+ (int, float).
456
+
457
+ After initialization, an instance can be called to transform a string
458
+ into another object. If the string is recognized as representing a
459
+ missing value, a default value is returned.
460
+
461
+ Attributes
462
+ ----------
463
+ func : function
464
+ Function used for the conversion.
465
+ default : any
466
+ Default value to return when the input corresponds to a missing
467
+ value.
468
+ type : type
469
+ Type of the output.
470
+ _status : int
471
+ Integer representing the order of the conversion.
472
+ _mapper : sequence of tuples
473
+ Sequence of tuples (dtype, function, default value) to evaluate in
474
+ order.
475
+ _locked : bool
476
+ Holds `locked` parameter.
477
+
478
+ Parameters
479
+ ----------
480
+ dtype_or_func : {None, dtype, function}, optional
481
+ If a `dtype`, specifies the input data type, used to define a basic
482
+ function and a default value for missing data. For example, when
483
+ `dtype` is float, the `func` attribute is set to `float` and the
484
+ default value to `np.nan`. If a function, this function is used to
485
+ convert a string to another object. In this case, it is recommended
486
+ to give an associated default value as input.
487
+ default : any, optional
488
+ Value to return by default, that is, when the string to be
489
+ converted is flagged as missing. If not given, `StringConverter`
490
+ tries to supply a reasonable default value.
491
+ missing_values : {None, sequence of str}, optional
492
+ ``None`` or sequence of strings indicating a missing value. If ``None``
493
+ then missing values are indicated by empty entries. The default is
494
+ ``None``.
495
+ locked : bool, optional
496
+ Whether the StringConverter should be locked to prevent automatic
497
+ upgrade or not. Default is False.
498
+
499
+ """
500
+ _mapper = [(nx.bool, str2bool, False),
501
+ (nx.int_, int, -1),]
502
+
503
+ # On 32-bit systems, we need to make sure that we explicitly include
504
+ # nx.int64 since ns.int_ is nx.int32.
505
+ if nx.dtype(nx.int_).itemsize < nx.dtype(nx.int64).itemsize:
506
+ _mapper.append((nx.int64, int, -1))
507
+
508
+ _mapper.extend([(nx.float64, float, nx.nan),
509
+ (nx.complex128, complex, nx.nan + 0j),
510
+ (nx.longdouble, nx.longdouble, nx.nan),
511
+ # If a non-default dtype is passed, fall back to generic
512
+ # ones (should only be used for the converter)
513
+ (nx.integer, int, -1),
514
+ (nx.floating, float, nx.nan),
515
+ (nx.complexfloating, complex, nx.nan + 0j),
516
+ # Last, try with the string types (must be last, because
517
+ # `_mapper[-1]` is used as default in some cases)
518
+ (nx.str_, asunicode, '???'),
519
+ (nx.bytes_, asbytes, '???'),
520
+ ])
521
+
522
+ @classmethod
523
+ def _getdtype(cls, val):
524
+ """Returns the dtype of the input variable."""
525
+ return np.array(val).dtype
526
+
527
+ @classmethod
528
+ def _getsubdtype(cls, val):
529
+ """Returns the type of the dtype of the input variable."""
530
+ return np.array(val).dtype.type
531
+
532
+ @classmethod
533
+ def _dtypeortype(cls, dtype):
534
+ """Returns dtype for datetime64 and type of dtype otherwise."""
535
+
536
+ # This is a bit annoying. We want to return the "general" type in most
537
+ # cases (ie. "string" rather than "S10"), but we want to return the
538
+ # specific type for datetime64 (ie. "datetime64[us]" rather than
539
+ # "datetime64").
540
+ if dtype.type == np.datetime64:
541
+ return dtype
542
+ return dtype.type
543
+
544
+ @classmethod
545
+ def upgrade_mapper(cls, func, default=None):
546
+ """
547
+ Upgrade the mapper of a StringConverter by adding a new function and
548
+ its corresponding default.
549
+
550
+ The input function (or sequence of functions) and its associated
551
+ default value (if any) is inserted in penultimate position of the
552
+ mapper. The corresponding type is estimated from the dtype of the
553
+ default value.
554
+
555
+ Parameters
556
+ ----------
557
+ func : var
558
+ Function, or sequence of functions
559
+
560
+ Examples
561
+ --------
562
+ >>> import dateutil.parser
563
+ >>> import datetime
564
+ >>> dateparser = dateutil.parser.parse
565
+ >>> defaultdate = datetime.date(2000, 1, 1)
566
+ >>> StringConverter.upgrade_mapper(dateparser, default=defaultdate)
567
+ """
568
+ # Func is a single functions
569
+ if callable(func):
570
+ cls._mapper.insert(-1, (cls._getsubdtype(default), func, default))
571
+ return
572
+ elif hasattr(func, '__iter__'):
573
+ if isinstance(func[0], (tuple, list)):
574
+ for _ in func:
575
+ cls._mapper.insert(-1, _)
576
+ return
577
+ if default is None:
578
+ default = [None] * len(func)
579
+ else:
580
+ default = list(default)
581
+ default.append([None] * (len(func) - len(default)))
582
+ for fct, dft in zip(func, default):
583
+ cls._mapper.insert(-1, (cls._getsubdtype(dft), fct, dft))
584
+
585
+ @classmethod
586
+ def _find_map_entry(cls, dtype):
587
+ # if a converter for the specific dtype is available use that
588
+ for i, (deftype, func, default_def) in enumerate(cls._mapper):
589
+ if dtype.type == deftype:
590
+ return i, (deftype, func, default_def)
591
+
592
+ # otherwise find an inexact match
593
+ for i, (deftype, func, default_def) in enumerate(cls._mapper):
594
+ if np.issubdtype(dtype.type, deftype):
595
+ return i, (deftype, func, default_def)
596
+
597
+ raise LookupError
598
+
599
+ def __init__(self, dtype_or_func=None, default=None, missing_values=None,
600
+ locked=False):
601
+ # Defines a lock for upgrade
602
+ self._locked = bool(locked)
603
+ # No input dtype: minimal initialization
604
+ if dtype_or_func is None:
605
+ self.func = str2bool
606
+ self._status = 0
607
+ self.default = default or False
608
+ dtype = np.dtype('bool')
609
+ else:
610
+ # Is the input a np.dtype ?
611
+ try:
612
+ self.func = None
613
+ dtype = np.dtype(dtype_or_func)
614
+ except TypeError:
615
+ # dtype_or_func must be a function, then
616
+ if not callable(dtype_or_func):
617
+ errmsg = ("The input argument `dtype` is neither a"
618
+ " function nor a dtype (got '%s' instead)")
619
+ raise TypeError(errmsg % type(dtype_or_func))
620
+ # Set the function
621
+ self.func = dtype_or_func
622
+ # If we don't have a default, try to guess it or set it to
623
+ # None
624
+ if default is None:
625
+ try:
626
+ default = self.func('0')
627
+ except ValueError:
628
+ default = None
629
+ dtype = self._getdtype(default)
630
+
631
+ # find the best match in our mapper
632
+ try:
633
+ self._status, (_, func, default_def) = self._find_map_entry(dtype)
634
+ except LookupError:
635
+ # no match
636
+ self.default = default
637
+ _, func, _ = self._mapper[-1]
638
+ self._status = 0
639
+ else:
640
+ # use the found default only if we did not already have one
641
+ if default is None:
642
+ self.default = default_def
643
+ else:
644
+ self.default = default
645
+
646
+ # If the input was a dtype, set the function to the last we saw
647
+ if self.func is None:
648
+ self.func = func
649
+
650
+ # If the status is 1 (int), change the function to
651
+ # something more robust.
652
+ if self.func == self._mapper[1][1]:
653
+ if issubclass(dtype.type, np.uint64):
654
+ self.func = np.uint64
655
+ elif issubclass(dtype.type, np.int64):
656
+ self.func = np.int64
657
+ else:
658
+ self.func = lambda x: int(float(x))
659
+ # Store the list of strings corresponding to missing values.
660
+ if missing_values is None:
661
+ self.missing_values = {''}
662
+ else:
663
+ if isinstance(missing_values, str):
664
+ missing_values = missing_values.split(",")
665
+ self.missing_values = set(list(missing_values) + [''])
666
+
667
+ self._callingfunction = self._strict_call
668
+ self.type = self._dtypeortype(dtype)
669
+ self._checked = False
670
+ self._initial_default = default
671
+
672
+ def _loose_call(self, value):
673
+ try:
674
+ return self.func(value)
675
+ except ValueError:
676
+ return self.default
677
+
678
+ def _strict_call(self, value):
679
+ try:
680
+
681
+ # We check if we can convert the value using the current function
682
+ new_value = self.func(value)
683
+
684
+ # In addition to having to check whether func can convert the
685
+ # value, we also have to make sure that we don't get overflow
686
+ # errors for integers.
687
+ if self.func is int:
688
+ try:
689
+ np.array(value, dtype=self.type)
690
+ except OverflowError:
691
+ raise ValueError
692
+
693
+ # We're still here so we can now return the new value
694
+ return new_value
695
+
696
+ except ValueError:
697
+ if value.strip() in self.missing_values:
698
+ if not self._status:
699
+ self._checked = False
700
+ return self.default
701
+ raise ValueError(f"Cannot convert string '{value}'")
702
+
703
+ def __call__(self, value):
704
+ return self._callingfunction(value)
705
+
706
+ def _do_upgrade(self):
707
+ # Raise an exception if we locked the converter...
708
+ if self._locked:
709
+ errmsg = "Converter is locked and cannot be upgraded"
710
+ raise ConverterLockError(errmsg)
711
+ _statusmax = len(self._mapper)
712
+ # Complains if we try to upgrade by the maximum
713
+ _status = self._status
714
+ if _status == _statusmax:
715
+ errmsg = "Could not find a valid conversion function"
716
+ raise ConverterError(errmsg)
717
+ elif _status < _statusmax - 1:
718
+ _status += 1
719
+ self.type, self.func, default = self._mapper[_status]
720
+ self._status = _status
721
+ if self._initial_default is not None:
722
+ self.default = self._initial_default
723
+ else:
724
+ self.default = default
725
+
726
+ def upgrade(self, value):
727
+ """
728
+ Find the best converter for a given string, and return the result.
729
+
730
+ The supplied string `value` is converted by testing different
731
+ converters in order. First the `func` method of the
732
+ `StringConverter` instance is tried, if this fails other available
733
+ converters are tried. The order in which these other converters
734
+ are tried is determined by the `_status` attribute of the instance.
735
+
736
+ Parameters
737
+ ----------
738
+ value : str
739
+ The string to convert.
740
+
741
+ Returns
742
+ -------
743
+ out : any
744
+ The result of converting `value` with the appropriate converter.
745
+
746
+ """
747
+ self._checked = True
748
+ try:
749
+ return self._strict_call(value)
750
+ except ValueError:
751
+ self._do_upgrade()
752
+ return self.upgrade(value)
753
+
754
+ def iterupgrade(self, value):
755
+ self._checked = True
756
+ if not hasattr(value, '__iter__'):
757
+ value = (value,)
758
+ _strict_call = self._strict_call
759
+ try:
760
+ for _m in value:
761
+ _strict_call(_m)
762
+ except ValueError:
763
+ self._do_upgrade()
764
+ self.iterupgrade(value)
765
+
766
+ def update(self, func, default=None, testing_value=None,
767
+ missing_values='', locked=False):
768
+ """
769
+ Set StringConverter attributes directly.
770
+
771
+ Parameters
772
+ ----------
773
+ func : function
774
+ Conversion function.
775
+ default : any, optional
776
+ Value to return by default, that is, when the string to be
777
+ converted is flagged as missing. If not given,
778
+ `StringConverter` tries to supply a reasonable default value.
779
+ testing_value : str, optional
780
+ A string representing a standard input value of the converter.
781
+ This string is used to help defining a reasonable default
782
+ value.
783
+ missing_values : {sequence of str, None}, optional
784
+ Sequence of strings indicating a missing value. If ``None``, then
785
+ the existing `missing_values` are cleared. The default is ``''``.
786
+ locked : bool, optional
787
+ Whether the StringConverter should be locked to prevent
788
+ automatic upgrade or not. Default is False.
789
+
790
+ Notes
791
+ -----
792
+ `update` takes the same parameters as the constructor of
793
+ `StringConverter`, except that `func` does not accept a `dtype`
794
+ whereas `dtype_or_func` in the constructor does.
795
+
796
+ """
797
+ self.func = func
798
+ self._locked = locked
799
+
800
+ # Don't reset the default to None if we can avoid it
801
+ if default is not None:
802
+ self.default = default
803
+ self.type = self._dtypeortype(self._getdtype(default))
804
+ else:
805
+ try:
806
+ tester = func(testing_value or '1')
807
+ except (TypeError, ValueError):
808
+ tester = None
809
+ self.type = self._dtypeortype(self._getdtype(tester))
810
+
811
+ # Add the missing values to the existing set or clear it.
812
+ if missing_values is None:
813
+ # Clear all missing values even though the ctor initializes it to
814
+ # set(['']) when the argument is None.
815
+ self.missing_values = set()
816
+ else:
817
+ if not np.iterable(missing_values):
818
+ missing_values = [missing_values]
819
+ if not all(isinstance(v, str) for v in missing_values):
820
+ raise TypeError("missing_values must be strings or unicode")
821
+ self.missing_values.update(missing_values)
822
+
823
+
824
+ def easy_dtype(ndtype, names=None, defaultfmt="f%i", **validationargs):
825
+ """
826
+ Convenience function to create a `np.dtype` object.
827
+
828
+ The function processes the input `dtype` and matches it with the given
829
+ names.
830
+
831
+ Parameters
832
+ ----------
833
+ ndtype : var
834
+ Definition of the dtype. Can be any string or dictionary recognized
835
+ by the `np.dtype` function, or a sequence of types.
836
+ names : str or sequence, optional
837
+ Sequence of strings to use as field names for a structured dtype.
838
+ For convenience, `names` can be a string of a comma-separated list
839
+ of names.
840
+ defaultfmt : str, optional
841
+ Format string used to define missing names, such as ``"f%i"``
842
+ (default) or ``"fields_%02i"``.
843
+ validationargs : optional
844
+ A series of optional arguments used to initialize a
845
+ `NameValidator`.
846
+
847
+ Examples
848
+ --------
849
+ >>> import numpy as np
850
+ >>> np.lib._iotools.easy_dtype(float)
851
+ dtype('float64')
852
+ >>> np.lib._iotools.easy_dtype("i4, f8")
853
+ dtype([('f0', '<i4'), ('f1', '<f8')])
854
+ >>> np.lib._iotools.easy_dtype("i4, f8", defaultfmt="field_%03i")
855
+ dtype([('field_000', '<i4'), ('field_001', '<f8')])
856
+
857
+ >>> np.lib._iotools.easy_dtype((int, float, float), names="a,b,c")
858
+ dtype([('a', '<i8'), ('b', '<f8'), ('c', '<f8')])
859
+ >>> np.lib._iotools.easy_dtype(float, names="a,b,c")
860
+ dtype([('a', '<f8'), ('b', '<f8'), ('c', '<f8')])
861
+
862
+ """
863
+ try:
864
+ ndtype = np.dtype(ndtype)
865
+ except TypeError:
866
+ validate = NameValidator(**validationargs)
867
+ nbfields = len(ndtype)
868
+ if names is None:
869
+ names = [''] * len(ndtype)
870
+ elif isinstance(names, str):
871
+ names = names.split(",")
872
+ names = validate(names, nbfields=nbfields, defaultfmt=defaultfmt)
873
+ ndtype = np.dtype({"formats": ndtype, "names": names})
874
+ else:
875
+ # Explicit names
876
+ if names is not None:
877
+ validate = NameValidator(**validationargs)
878
+ if isinstance(names, str):
879
+ names = names.split(",")
880
+ # Simple dtype: repeat to match the nb of names
881
+ if ndtype.names is None:
882
+ formats = tuple([ndtype.type] * len(names))
883
+ names = validate(names, defaultfmt=defaultfmt)
884
+ ndtype = np.dtype(list(zip(names, formats)))
885
+ # Structured dtype: just validate the names as needed
886
+ else:
887
+ ndtype.names = validate(names, nbfields=len(ndtype.names),
888
+ defaultfmt=defaultfmt)
889
+ # No implicit names
890
+ elif ndtype.names is not None:
891
+ validate = NameValidator(**validationargs)
892
+ # Default initial names : should we change the format ?
893
+ numbered_names = tuple(f"f{i}" for i in range(len(ndtype.names)))
894
+ if ((ndtype.names == numbered_names) and (defaultfmt != "f%i")):
895
+ ndtype.names = validate([''] * len(ndtype.names),
896
+ defaultfmt=defaultfmt)
897
+ # Explicit initial names : just validate
898
+ else:
899
+ ndtype.names = validate(ndtype.names, defaultfmt=defaultfmt)
900
+ return ndtype