numpy 2.3.5__cp313-cp313-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of numpy might be problematic. Click here for more details.

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