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,1950 @@
1
+ #ifndef NUMPY_CORE_INCLUDE_NUMPY_NDARRAYTYPES_H_
2
+ #define NUMPY_CORE_INCLUDE_NUMPY_NDARRAYTYPES_H_
3
+
4
+ #include "npy_common.h"
5
+ #include "npy_endian.h"
6
+ #include "npy_cpu.h"
7
+ #include "utils.h"
8
+
9
+ #ifdef __cplusplus
10
+ extern "C" {
11
+ #endif
12
+
13
+ #define NPY_NO_EXPORT NPY_VISIBILITY_HIDDEN
14
+
15
+ /* Always allow threading unless it was explicitly disabled at build time */
16
+ #if !NPY_NO_SMP
17
+ #define NPY_ALLOW_THREADS 1
18
+ #else
19
+ #define NPY_ALLOW_THREADS 0
20
+ #endif
21
+
22
+ #ifndef __has_extension
23
+ #define __has_extension(x) 0
24
+ #endif
25
+
26
+ /*
27
+ * There are several places in the code where an array of dimensions
28
+ * is allocated statically. This is the size of that static
29
+ * allocation.
30
+ *
31
+ * The array creation itself could have arbitrary dimensions but all
32
+ * the places where static allocation is used would need to be changed
33
+ * to dynamic (including inside of several structures)
34
+ *
35
+ * As of NumPy 2.0, we strongly discourage the downstream use of NPY_MAXDIMS,
36
+ * but since auditing everything seems a big ask, define it as 64.
37
+ * A future version could:
38
+ * - Increase or remove the limit and require recompilation (like 2.0 did)
39
+ * - Deprecate or remove the macro but keep the limit (at basically any time)
40
+ */
41
+ #define NPY_MAXDIMS 64
42
+ /* We cannot change this as it would break ABI: */
43
+ #define NPY_MAXDIMS_LEGACY_ITERS 32
44
+ /* NPY_MAXARGS is version dependent and defined in npy_2_compat.h */
45
+
46
+ /* Used for Converter Functions "O&" code in ParseTuple */
47
+ #define NPY_FAIL 0
48
+ #define NPY_SUCCEED 1
49
+
50
+
51
+ enum NPY_TYPES { NPY_BOOL=0,
52
+ NPY_BYTE, NPY_UBYTE,
53
+ NPY_SHORT, NPY_USHORT,
54
+ NPY_INT, NPY_UINT,
55
+ NPY_LONG, NPY_ULONG,
56
+ NPY_LONGLONG, NPY_ULONGLONG,
57
+ NPY_FLOAT, NPY_DOUBLE, NPY_LONGDOUBLE,
58
+ NPY_CFLOAT, NPY_CDOUBLE, NPY_CLONGDOUBLE,
59
+ NPY_OBJECT=17,
60
+ NPY_STRING, NPY_UNICODE,
61
+ NPY_VOID,
62
+ /*
63
+ * New 1.6 types appended, may be integrated
64
+ * into the above in 2.0.
65
+ */
66
+ NPY_DATETIME, NPY_TIMEDELTA, NPY_HALF,
67
+
68
+ NPY_CHAR, /* Deprecated, will raise if used */
69
+
70
+ /* The number of *legacy* dtypes */
71
+ NPY_NTYPES_LEGACY=24,
72
+
73
+ /* assign a high value to avoid changing this in the
74
+ future when new dtypes are added */
75
+ NPY_NOTYPE=25,
76
+
77
+ NPY_USERDEF=256, /* leave room for characters */
78
+
79
+ /* The number of types not including the new 1.6 types */
80
+ NPY_NTYPES_ABI_COMPATIBLE=21,
81
+
82
+ /*
83
+ * New DTypes which do not share the legacy layout
84
+ * (added after NumPy 2.0). VSTRING is the first of these
85
+ * we may open up a block for user-defined dtypes in the
86
+ * future.
87
+ */
88
+ NPY_VSTRING=2056,
89
+ };
90
+
91
+
92
+ /* basetype array priority */
93
+ #define NPY_PRIORITY 0.0
94
+
95
+ /* default subtype priority */
96
+ #define NPY_SUBTYPE_PRIORITY 1.0
97
+
98
+ /* default scalar priority */
99
+ #define NPY_SCALAR_PRIORITY -1000000.0
100
+
101
+ /* How many floating point types are there (excluding half) */
102
+ #define NPY_NUM_FLOATTYPE 3
103
+
104
+ /*
105
+ * These characters correspond to the array type and the struct
106
+ * module
107
+ */
108
+
109
+ enum NPY_TYPECHAR {
110
+ NPY_BOOLLTR = '?',
111
+ NPY_BYTELTR = 'b',
112
+ NPY_UBYTELTR = 'B',
113
+ NPY_SHORTLTR = 'h',
114
+ NPY_USHORTLTR = 'H',
115
+ NPY_INTLTR = 'i',
116
+ NPY_UINTLTR = 'I',
117
+ NPY_LONGLTR = 'l',
118
+ NPY_ULONGLTR = 'L',
119
+ NPY_LONGLONGLTR = 'q',
120
+ NPY_ULONGLONGLTR = 'Q',
121
+ NPY_HALFLTR = 'e',
122
+ NPY_FLOATLTR = 'f',
123
+ NPY_DOUBLELTR = 'd',
124
+ NPY_LONGDOUBLELTR = 'g',
125
+ NPY_CFLOATLTR = 'F',
126
+ NPY_CDOUBLELTR = 'D',
127
+ NPY_CLONGDOUBLELTR = 'G',
128
+ NPY_OBJECTLTR = 'O',
129
+ NPY_STRINGLTR = 'S',
130
+ NPY_DEPRECATED_STRINGLTR2 = 'a',
131
+ NPY_UNICODELTR = 'U',
132
+ NPY_VOIDLTR = 'V',
133
+ NPY_DATETIMELTR = 'M',
134
+ NPY_TIMEDELTALTR = 'm',
135
+ NPY_CHARLTR = 'c',
136
+
137
+ /*
138
+ * New non-legacy DTypes
139
+ */
140
+ NPY_VSTRINGLTR = 'T',
141
+
142
+ /*
143
+ * Note, we removed `NPY_INTPLTR` due to changing its definition
144
+ * to 'n', rather than 'p'. On any typical platform this is the
145
+ * same integer. 'n' should be used for the `np.intp` with the same
146
+ * size as `size_t` while 'p' remains pointer sized.
147
+ *
148
+ * 'p', 'P', 'n', and 'N' are valid and defined explicitly
149
+ * in `arraytypes.c.src`.
150
+ */
151
+
152
+ /*
153
+ * These are for dtype 'kinds', not dtype 'typecodes'
154
+ * as the above are for.
155
+ */
156
+ NPY_GENBOOLLTR ='b',
157
+ NPY_SIGNEDLTR = 'i',
158
+ NPY_UNSIGNEDLTR = 'u',
159
+ NPY_FLOATINGLTR = 'f',
160
+ NPY_COMPLEXLTR = 'c',
161
+
162
+ };
163
+
164
+ /*
165
+ * Changing this may break Numpy API compatibility
166
+ * due to changing offsets in PyArray_ArrFuncs, so be
167
+ * careful. Here we have reused the mergesort slot for
168
+ * any kind of stable sort, the actual implementation will
169
+ * depend on the data type.
170
+ */
171
+ typedef enum {
172
+ _NPY_SORT_UNDEFINED=-1,
173
+ NPY_QUICKSORT=0,
174
+ NPY_HEAPSORT=1,
175
+ NPY_MERGESORT=2,
176
+ NPY_STABLESORT=2,
177
+ } NPY_SORTKIND;
178
+ #define NPY_NSORTS (NPY_STABLESORT + 1)
179
+
180
+
181
+ typedef enum {
182
+ NPY_INTROSELECT=0
183
+ } NPY_SELECTKIND;
184
+ #define NPY_NSELECTS (NPY_INTROSELECT + 1)
185
+
186
+
187
+ typedef enum {
188
+ NPY_SEARCHLEFT=0,
189
+ NPY_SEARCHRIGHT=1
190
+ } NPY_SEARCHSIDE;
191
+ #define NPY_NSEARCHSIDES (NPY_SEARCHRIGHT + 1)
192
+
193
+
194
+ typedef enum {
195
+ NPY_NOSCALAR=-1,
196
+ NPY_BOOL_SCALAR,
197
+ NPY_INTPOS_SCALAR,
198
+ NPY_INTNEG_SCALAR,
199
+ NPY_FLOAT_SCALAR,
200
+ NPY_COMPLEX_SCALAR,
201
+ NPY_OBJECT_SCALAR
202
+ } NPY_SCALARKIND;
203
+ #define NPY_NSCALARKINDS (NPY_OBJECT_SCALAR + 1)
204
+
205
+ /* For specifying array memory layout or iteration order */
206
+ typedef enum {
207
+ /* Fortran order if inputs are all Fortran, C otherwise */
208
+ NPY_ANYORDER=-1,
209
+ /* C order */
210
+ NPY_CORDER=0,
211
+ /* Fortran order */
212
+ NPY_FORTRANORDER=1,
213
+ /* An order as close to the inputs as possible */
214
+ NPY_KEEPORDER=2
215
+ } NPY_ORDER;
216
+
217
+ /* For specifying allowed casting in operations which support it */
218
+ typedef enum {
219
+ _NPY_ERROR_OCCURRED_IN_CAST = -1,
220
+ /* Only allow identical types */
221
+ NPY_NO_CASTING=0,
222
+ /* Allow identical and byte swapped types */
223
+ NPY_EQUIV_CASTING=1,
224
+ /* Only allow safe casts */
225
+ NPY_SAFE_CASTING=2,
226
+ /* Allow safe casts or casts within the same kind */
227
+ NPY_SAME_KIND_CASTING=3,
228
+ /* Allow any casts */
229
+ NPY_UNSAFE_CASTING=4,
230
+ } NPY_CASTING;
231
+
232
+ typedef enum {
233
+ NPY_CLIP=0,
234
+ NPY_WRAP=1,
235
+ NPY_RAISE=2
236
+ } NPY_CLIPMODE;
237
+
238
+ typedef enum {
239
+ NPY_VALID=0,
240
+ NPY_SAME=1,
241
+ NPY_FULL=2
242
+ } NPY_CORRELATEMODE;
243
+
244
+ /* The special not-a-time (NaT) value */
245
+ #define NPY_DATETIME_NAT NPY_MIN_INT64
246
+
247
+ /*
248
+ * Upper bound on the length of a DATETIME ISO 8601 string
249
+ * YEAR: 21 (64-bit year)
250
+ * MONTH: 3
251
+ * DAY: 3
252
+ * HOURS: 3
253
+ * MINUTES: 3
254
+ * SECONDS: 3
255
+ * ATTOSECONDS: 1 + 3*6
256
+ * TIMEZONE: 5
257
+ * NULL TERMINATOR: 1
258
+ */
259
+ #define NPY_DATETIME_MAX_ISO8601_STRLEN (21 + 3*5 + 1 + 3*6 + 6 + 1)
260
+
261
+ /* The FR in the unit names stands for frequency */
262
+ typedef enum {
263
+ /* Force signed enum type, must be -1 for code compatibility */
264
+ NPY_FR_ERROR = -1, /* error or undetermined */
265
+
266
+ /* Start of valid units */
267
+ NPY_FR_Y = 0, /* Years */
268
+ NPY_FR_M = 1, /* Months */
269
+ NPY_FR_W = 2, /* Weeks */
270
+ /* Gap where 1.6 NPY_FR_B (value 3) was */
271
+ NPY_FR_D = 4, /* Days */
272
+ NPY_FR_h = 5, /* hours */
273
+ NPY_FR_m = 6, /* minutes */
274
+ NPY_FR_s = 7, /* seconds */
275
+ NPY_FR_ms = 8, /* milliseconds */
276
+ NPY_FR_us = 9, /* microseconds */
277
+ NPY_FR_ns = 10, /* nanoseconds */
278
+ NPY_FR_ps = 11, /* picoseconds */
279
+ NPY_FR_fs = 12, /* femtoseconds */
280
+ NPY_FR_as = 13, /* attoseconds */
281
+ NPY_FR_GENERIC = 14 /* unbound units, can convert to anything */
282
+ } NPY_DATETIMEUNIT;
283
+
284
+ /*
285
+ * NOTE: With the NPY_FR_B gap for 1.6 ABI compatibility, NPY_DATETIME_NUMUNITS
286
+ * is technically one more than the actual number of units.
287
+ */
288
+ #define NPY_DATETIME_NUMUNITS (NPY_FR_GENERIC + 1)
289
+ #define NPY_DATETIME_DEFAULTUNIT NPY_FR_GENERIC
290
+
291
+ /*
292
+ * Business day conventions for mapping invalid business
293
+ * days to valid business days.
294
+ */
295
+ typedef enum {
296
+ /* Go forward in time to the following business day. */
297
+ NPY_BUSDAY_FORWARD,
298
+ NPY_BUSDAY_FOLLOWING = NPY_BUSDAY_FORWARD,
299
+ /* Go backward in time to the preceding business day. */
300
+ NPY_BUSDAY_BACKWARD,
301
+ NPY_BUSDAY_PRECEDING = NPY_BUSDAY_BACKWARD,
302
+ /*
303
+ * Go forward in time to the following business day, unless it
304
+ * crosses a month boundary, in which case go backward
305
+ */
306
+ NPY_BUSDAY_MODIFIEDFOLLOWING,
307
+ /*
308
+ * Go backward in time to the preceding business day, unless it
309
+ * crosses a month boundary, in which case go forward.
310
+ */
311
+ NPY_BUSDAY_MODIFIEDPRECEDING,
312
+ /* Produce a NaT for non-business days. */
313
+ NPY_BUSDAY_NAT,
314
+ /* Raise an exception for non-business days. */
315
+ NPY_BUSDAY_RAISE
316
+ } NPY_BUSDAY_ROLL;
317
+
318
+
319
+ /************************************************************
320
+ * NumPy Auxiliary Data for inner loops, sort functions, etc.
321
+ ************************************************************/
322
+
323
+ /*
324
+ * When creating an auxiliary data struct, this should always appear
325
+ * as the first member, like this:
326
+ *
327
+ * typedef struct {
328
+ * NpyAuxData base;
329
+ * double constant;
330
+ * } constant_multiplier_aux_data;
331
+ */
332
+ typedef struct NpyAuxData_tag NpyAuxData;
333
+
334
+ /* Function pointers for freeing or cloning auxiliary data */
335
+ typedef void (NpyAuxData_FreeFunc) (NpyAuxData *);
336
+ typedef NpyAuxData *(NpyAuxData_CloneFunc) (NpyAuxData *);
337
+
338
+ struct NpyAuxData_tag {
339
+ NpyAuxData_FreeFunc *free;
340
+ NpyAuxData_CloneFunc *clone;
341
+ /* To allow for a bit of expansion without breaking the ABI */
342
+ void *reserved[2];
343
+ };
344
+
345
+ /* Macros to use for freeing and cloning auxiliary data */
346
+ #define NPY_AUXDATA_FREE(auxdata) \
347
+ do { \
348
+ if ((auxdata) != NULL) { \
349
+ (auxdata)->free(auxdata); \
350
+ } \
351
+ } while(0)
352
+ #define NPY_AUXDATA_CLONE(auxdata) \
353
+ ((auxdata)->clone(auxdata))
354
+
355
+ #define NPY_ERR(str) fprintf(stderr, #str); fflush(stderr);
356
+ #define NPY_ERR2(str) fprintf(stderr, str); fflush(stderr);
357
+
358
+ /*
359
+ * Macros to define how array, and dimension/strides data is
360
+ * allocated. These should be made private
361
+ */
362
+
363
+ #define NPY_USE_PYMEM 1
364
+
365
+
366
+ #if NPY_USE_PYMEM == 1
367
+ /* use the Raw versions which are safe to call with the GIL released */
368
+ #define PyArray_malloc PyMem_RawMalloc
369
+ #define PyArray_free PyMem_RawFree
370
+ #define PyArray_realloc PyMem_RawRealloc
371
+ #else
372
+ #define PyArray_malloc malloc
373
+ #define PyArray_free free
374
+ #define PyArray_realloc realloc
375
+ #endif
376
+
377
+ /* Dimensions and strides */
378
+ #define PyDimMem_NEW(size) \
379
+ ((npy_intp *)PyArray_malloc(size*sizeof(npy_intp)))
380
+
381
+ #define PyDimMem_FREE(ptr) PyArray_free(ptr)
382
+
383
+ #define PyDimMem_RENEW(ptr,size) \
384
+ ((npy_intp *)PyArray_realloc(ptr,size*sizeof(npy_intp)))
385
+
386
+ /* forward declaration */
387
+ struct _PyArray_Descr;
388
+
389
+ /* These must deal with unaligned and swapped data if necessary */
390
+ typedef PyObject * (PyArray_GetItemFunc) (void *, void *);
391
+ typedef int (PyArray_SetItemFunc)(PyObject *, void *, void *);
392
+
393
+ typedef void (PyArray_CopySwapNFunc)(void *, npy_intp, void *, npy_intp,
394
+ npy_intp, int, void *);
395
+
396
+ typedef void (PyArray_CopySwapFunc)(void *, void *, int, void *);
397
+ typedef npy_bool (PyArray_NonzeroFunc)(void *, void *);
398
+
399
+
400
+ /*
401
+ * These assume aligned and notswapped data -- a buffer will be used
402
+ * before or contiguous data will be obtained
403
+ */
404
+
405
+ typedef int (PyArray_CompareFunc)(const void *, const void *, void *);
406
+ typedef int (PyArray_ArgFunc)(void*, npy_intp, npy_intp*, void *);
407
+
408
+ typedef void (PyArray_DotFunc)(void *, npy_intp, void *, npy_intp, void *,
409
+ npy_intp, void *);
410
+
411
+ typedef void (PyArray_VectorUnaryFunc)(void *, void *, npy_intp, void *,
412
+ void *);
413
+
414
+ /*
415
+ * XXX the ignore argument should be removed next time the API version
416
+ * is bumped. It used to be the separator.
417
+ */
418
+ typedef int (PyArray_ScanFunc)(FILE *fp, void *dptr,
419
+ char *ignore, struct _PyArray_Descr *);
420
+ typedef int (PyArray_FromStrFunc)(char *s, void *dptr, char **endptr,
421
+ struct _PyArray_Descr *);
422
+
423
+ typedef int (PyArray_FillFunc)(void *, npy_intp, void *);
424
+
425
+ typedef int (PyArray_SortFunc)(void *, npy_intp, void *);
426
+ typedef int (PyArray_ArgSortFunc)(void *, npy_intp *, npy_intp, void *);
427
+
428
+ typedef int (PyArray_FillWithScalarFunc)(void *, npy_intp, void *, void *);
429
+
430
+ typedef int (PyArray_ScalarKindFunc)(void *);
431
+
432
+ typedef struct {
433
+ npy_intp *ptr;
434
+ int len;
435
+ } PyArray_Dims;
436
+
437
+ typedef struct {
438
+ /*
439
+ * Functions to cast to most other standard types
440
+ * Can have some NULL entries. The types
441
+ * DATETIME, TIMEDELTA, and HALF go into the castdict
442
+ * even though they are built-in.
443
+ */
444
+ PyArray_VectorUnaryFunc *cast[NPY_NTYPES_ABI_COMPATIBLE];
445
+
446
+ /* The next four functions *cannot* be NULL */
447
+
448
+ /*
449
+ * Functions to get and set items with standard Python types
450
+ * -- not array scalars
451
+ */
452
+ PyArray_GetItemFunc *getitem;
453
+ PyArray_SetItemFunc *setitem;
454
+
455
+ /*
456
+ * Copy and/or swap data. Memory areas may not overlap
457
+ * Use memmove first if they might
458
+ */
459
+ PyArray_CopySwapNFunc *copyswapn;
460
+ PyArray_CopySwapFunc *copyswap;
461
+
462
+ /*
463
+ * Function to compare items
464
+ * Can be NULL
465
+ */
466
+ PyArray_CompareFunc *compare;
467
+
468
+ /*
469
+ * Function to select largest
470
+ * Can be NULL
471
+ */
472
+ PyArray_ArgFunc *argmax;
473
+
474
+ /*
475
+ * Function to compute dot product
476
+ * Can be NULL
477
+ */
478
+ PyArray_DotFunc *dotfunc;
479
+
480
+ /*
481
+ * Function to scan an ASCII file and
482
+ * place a single value plus possible separator
483
+ * Can be NULL
484
+ */
485
+ PyArray_ScanFunc *scanfunc;
486
+
487
+ /*
488
+ * Function to read a single value from a string
489
+ * and adjust the pointer; Can be NULL
490
+ */
491
+ PyArray_FromStrFunc *fromstr;
492
+
493
+ /*
494
+ * Function to determine if data is zero or not
495
+ * If NULL a default version is
496
+ * used at Registration time.
497
+ */
498
+ PyArray_NonzeroFunc *nonzero;
499
+
500
+ /*
501
+ * Used for arange. Should return 0 on success
502
+ * and -1 on failure.
503
+ * Can be NULL.
504
+ */
505
+ PyArray_FillFunc *fill;
506
+
507
+ /*
508
+ * Function to fill arrays with scalar values
509
+ * Can be NULL
510
+ */
511
+ PyArray_FillWithScalarFunc *fillwithscalar;
512
+
513
+ /*
514
+ * Sorting functions
515
+ * Can be NULL
516
+ */
517
+ PyArray_SortFunc *sort[NPY_NSORTS];
518
+ PyArray_ArgSortFunc *argsort[NPY_NSORTS];
519
+
520
+ /*
521
+ * Dictionary of additional casting functions
522
+ * PyArray_VectorUnaryFuncs
523
+ * which can be populated to support casting
524
+ * to other registered types. Can be NULL
525
+ */
526
+ PyObject *castdict;
527
+
528
+ /*
529
+ * Functions useful for generalizing
530
+ * the casting rules.
531
+ * Can be NULL;
532
+ */
533
+ PyArray_ScalarKindFunc *scalarkind;
534
+ int **cancastscalarkindto;
535
+ int *cancastto;
536
+
537
+ void *_unused1;
538
+ void *_unused2;
539
+ void *_unused3;
540
+
541
+ /*
542
+ * Function to select smallest
543
+ * Can be NULL
544
+ */
545
+ PyArray_ArgFunc *argmin;
546
+
547
+ } PyArray_ArrFuncs;
548
+
549
+
550
+ /* The item must be reference counted when it is inserted or extracted. */
551
+ #define NPY_ITEM_REFCOUNT 0x01
552
+ /* Same as needing REFCOUNT */
553
+ #define NPY_ITEM_HASOBJECT 0x01
554
+ /* Convert to list for pickling */
555
+ #define NPY_LIST_PICKLE 0x02
556
+ /* The item is a POINTER */
557
+ #define NPY_ITEM_IS_POINTER 0x04
558
+ /* memory needs to be initialized for this data-type */
559
+ #define NPY_NEEDS_INIT 0x08
560
+ /* operations need Python C-API so don't give-up thread. */
561
+ #define NPY_NEEDS_PYAPI 0x10
562
+ /* Use f.getitem when extracting elements of this data-type */
563
+ #define NPY_USE_GETITEM 0x20
564
+ /* Use f.setitem when setting creating 0-d array from this data-type.*/
565
+ #define NPY_USE_SETITEM 0x40
566
+ /* A sticky flag specifically for structured arrays */
567
+ #define NPY_ALIGNED_STRUCT 0x80
568
+
569
+ /*
570
+ *These are inherited for global data-type if any data-types in the
571
+ * field have them
572
+ */
573
+ #define NPY_FROM_FIELDS (NPY_NEEDS_INIT | NPY_LIST_PICKLE | \
574
+ NPY_ITEM_REFCOUNT | NPY_NEEDS_PYAPI)
575
+
576
+ #define NPY_OBJECT_DTYPE_FLAGS (NPY_LIST_PICKLE | NPY_USE_GETITEM | \
577
+ NPY_ITEM_IS_POINTER | NPY_ITEM_REFCOUNT | \
578
+ NPY_NEEDS_INIT | NPY_NEEDS_PYAPI)
579
+
580
+ #if NPY_FEATURE_VERSION >= NPY_2_0_API_VERSION
581
+ /*
582
+ * Public version of the Descriptor struct as of 2.x
583
+ */
584
+ typedef struct _PyArray_Descr {
585
+ PyObject_HEAD
586
+ /*
587
+ * the type object representing an
588
+ * instance of this type -- should not
589
+ * be two type_numbers with the same type
590
+ * object.
591
+ */
592
+ PyTypeObject *typeobj;
593
+ /* kind for this type */
594
+ char kind;
595
+ /* unique-character representing this type */
596
+ char type;
597
+ /*
598
+ * '>' (big), '<' (little), '|'
599
+ * (not-applicable), or '=' (native).
600
+ */
601
+ char byteorder;
602
+ /* Former flags flags space (unused) to ensure type_num is stable. */
603
+ char _former_flags;
604
+ /* number representing this type */
605
+ int type_num;
606
+ /* Space for dtype instance specific flags. */
607
+ npy_uint64 flags;
608
+ /* element size (itemsize) for this type */
609
+ npy_intp elsize;
610
+ /* alignment needed for this type */
611
+ npy_intp alignment;
612
+ /* metadata dict or NULL */
613
+ PyObject *metadata;
614
+ /* Cached hash value (-1 if not yet computed). */
615
+ npy_hash_t hash;
616
+ /* Unused slot (must be initialized to NULL) for future use */
617
+ void *reserved_null[2];
618
+ } PyArray_Descr;
619
+
620
+ #else /* 1.x and 2.x compatible version (only shared fields): */
621
+
622
+ typedef struct _PyArray_Descr {
623
+ PyObject_HEAD
624
+ PyTypeObject *typeobj;
625
+ char kind;
626
+ char type;
627
+ char byteorder;
628
+ char _former_flags;
629
+ int type_num;
630
+ } PyArray_Descr;
631
+
632
+ /* To access modified fields, define the full 2.0 struct: */
633
+ typedef struct {
634
+ PyObject_HEAD
635
+ PyTypeObject *typeobj;
636
+ char kind;
637
+ char type;
638
+ char byteorder;
639
+ char _former_flags;
640
+ int type_num;
641
+ npy_uint64 flags;
642
+ npy_intp elsize;
643
+ npy_intp alignment;
644
+ PyObject *metadata;
645
+ npy_hash_t hash;
646
+ void *reserved_null[2];
647
+ } _PyArray_DescrNumPy2;
648
+
649
+ #endif /* 1.x and 2.x compatible version */
650
+
651
+ /*
652
+ * Semi-private struct with additional field of legacy descriptors (must
653
+ * check NPY_DT_is_legacy before casting/accessing). The struct is also not
654
+ * valid when running on 1.x (i.e. in public API use).
655
+ */
656
+ typedef struct {
657
+ PyObject_HEAD
658
+ PyTypeObject *typeobj;
659
+ char kind;
660
+ char type;
661
+ char byteorder;
662
+ char _former_flags;
663
+ int type_num;
664
+ npy_uint64 flags;
665
+ npy_intp elsize;
666
+ npy_intp alignment;
667
+ PyObject *metadata;
668
+ npy_hash_t hash;
669
+ void *reserved_null[2];
670
+ struct _arr_descr *subarray;
671
+ PyObject *fields;
672
+ PyObject *names;
673
+ NpyAuxData *c_metadata;
674
+ } _PyArray_LegacyDescr;
675
+
676
+
677
+ /*
678
+ * Umodified PyArray_Descr struct identical to NumPy 1.x. This struct is
679
+ * used as a prototype for registering a new legacy DType.
680
+ * It is also used to access the fields in user code running on 1.x.
681
+ */
682
+ typedef struct {
683
+ PyObject_HEAD
684
+ PyTypeObject *typeobj;
685
+ char kind;
686
+ char type;
687
+ char byteorder;
688
+ char flags;
689
+ int type_num;
690
+ int elsize;
691
+ int alignment;
692
+ struct _arr_descr *subarray;
693
+ PyObject *fields;
694
+ PyObject *names;
695
+ PyArray_ArrFuncs *f;
696
+ PyObject *metadata;
697
+ NpyAuxData *c_metadata;
698
+ npy_hash_t hash;
699
+ } PyArray_DescrProto;
700
+
701
+
702
+ typedef struct _arr_descr {
703
+ PyArray_Descr *base;
704
+ PyObject *shape; /* a tuple */
705
+ } PyArray_ArrayDescr;
706
+
707
+ /*
708
+ * Memory handler structure for array data.
709
+ */
710
+ /* The declaration of free differs from PyMemAllocatorEx */
711
+ typedef struct {
712
+ void *ctx;
713
+ void* (*malloc) (void *ctx, size_t size);
714
+ void* (*calloc) (void *ctx, size_t nelem, size_t elsize);
715
+ void* (*realloc) (void *ctx, void *ptr, size_t new_size);
716
+ void (*free) (void *ctx, void *ptr, size_t size);
717
+ /*
718
+ * This is the end of the version=1 struct. Only add new fields after
719
+ * this line
720
+ */
721
+ } PyDataMemAllocator;
722
+
723
+ typedef struct {
724
+ char name[127]; /* multiple of 64 to keep the struct aligned */
725
+ uint8_t version; /* currently 1 */
726
+ PyDataMemAllocator allocator;
727
+ } PyDataMem_Handler;
728
+
729
+
730
+ /*
731
+ * The main array object structure.
732
+ *
733
+ * It has been recommended to use the inline functions defined below
734
+ * (PyArray_DATA and friends) to access fields here for a number of
735
+ * releases. Direct access to the members themselves is deprecated.
736
+ * To ensure that your code does not use deprecated access,
737
+ * #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
738
+ * (or NPY_1_8_API_VERSION or higher as required).
739
+ */
740
+ /* This struct will be moved to a private header in a future release */
741
+ typedef struct tagPyArrayObject_fields {
742
+ PyObject_HEAD
743
+ /* Pointer to the raw data buffer */
744
+ char *data;
745
+ /* The number of dimensions, also called 'ndim' */
746
+ int nd;
747
+ /* The size in each dimension, also called 'shape' */
748
+ npy_intp *dimensions;
749
+ /*
750
+ * Number of bytes to jump to get to the
751
+ * next element in each dimension
752
+ */
753
+ npy_intp *strides;
754
+ /*
755
+ * This object is decref'd upon
756
+ * deletion of array. Except in the
757
+ * case of WRITEBACKIFCOPY which has
758
+ * special handling.
759
+ *
760
+ * For views it points to the original
761
+ * array, collapsed so no chains of
762
+ * views occur.
763
+ *
764
+ * For creation from buffer object it
765
+ * points to an object that should be
766
+ * decref'd on deletion
767
+ *
768
+ * For WRITEBACKIFCOPY flag this is an
769
+ * array to-be-updated upon calling
770
+ * PyArray_ResolveWritebackIfCopy
771
+ */
772
+ PyObject *base;
773
+ /* Pointer to type structure */
774
+ PyArray_Descr *descr;
775
+ /* Flags describing array -- see below */
776
+ int flags;
777
+ /* For weak references */
778
+ PyObject *weakreflist;
779
+ #if NPY_FEATURE_VERSION >= NPY_1_20_API_VERSION
780
+ void *_buffer_info; /* private buffer info, tagged to allow warning */
781
+ #endif
782
+ /*
783
+ * For malloc/calloc/realloc/free per object
784
+ */
785
+ #if NPY_FEATURE_VERSION >= NPY_1_22_API_VERSION
786
+ PyObject *mem_handler;
787
+ #endif
788
+ } PyArrayObject_fields;
789
+
790
+ /*
791
+ * To hide the implementation details, we only expose
792
+ * the Python struct HEAD.
793
+ */
794
+ #if !defined(NPY_NO_DEPRECATED_API) || \
795
+ (NPY_NO_DEPRECATED_API < NPY_1_7_API_VERSION)
796
+ /*
797
+ * Can't put this in npy_deprecated_api.h like the others.
798
+ * PyArrayObject field access is deprecated as of NumPy 1.7.
799
+ */
800
+ typedef PyArrayObject_fields PyArrayObject;
801
+ #else
802
+ typedef struct tagPyArrayObject {
803
+ PyObject_HEAD
804
+ } PyArrayObject;
805
+ #endif
806
+
807
+ /*
808
+ * Removed 2020-Nov-25, NumPy 1.20
809
+ * #define NPY_SIZEOF_PYARRAYOBJECT (sizeof(PyArrayObject_fields))
810
+ *
811
+ * The above macro was removed as it gave a false sense of a stable ABI
812
+ * with respect to the structures size. If you require a runtime constant,
813
+ * you can use `PyArray_Type.tp_basicsize` instead. Otherwise, please
814
+ * see the PyArrayObject documentation or ask the NumPy developers for
815
+ * information on how to correctly replace the macro in a way that is
816
+ * compatible with multiple NumPy versions.
817
+ */
818
+
819
+ /* Mirrors buffer object to ptr */
820
+
821
+ typedef struct {
822
+ PyObject_HEAD
823
+ PyObject *base;
824
+ void *ptr;
825
+ npy_intp len;
826
+ int flags;
827
+ } PyArray_Chunk;
828
+
829
+ typedef struct {
830
+ NPY_DATETIMEUNIT base;
831
+ int num;
832
+ } PyArray_DatetimeMetaData;
833
+
834
+ typedef struct {
835
+ NpyAuxData base;
836
+ PyArray_DatetimeMetaData meta;
837
+ } PyArray_DatetimeDTypeMetaData;
838
+
839
+ /*
840
+ * This structure contains an exploded view of a date-time value.
841
+ * NaT is represented by year == NPY_DATETIME_NAT.
842
+ */
843
+ typedef struct {
844
+ npy_int64 year;
845
+ npy_int32 month, day, hour, min, sec, us, ps, as;
846
+ } npy_datetimestruct;
847
+
848
+ /* This structure contains an exploded view of a timedelta value */
849
+ typedef struct {
850
+ npy_int64 day;
851
+ npy_int32 sec, us, ps, as;
852
+ } npy_timedeltastruct;
853
+
854
+ typedef int (PyArray_FinalizeFunc)(PyArrayObject *, PyObject *);
855
+
856
+ /*
857
+ * Means c-style contiguous (last index varies the fastest). The data
858
+ * elements right after each other.
859
+ *
860
+ * This flag may be requested in constructor functions.
861
+ * This flag may be tested for in PyArray_FLAGS(arr).
862
+ */
863
+ #define NPY_ARRAY_C_CONTIGUOUS 0x0001
864
+
865
+ /*
866
+ * Set if array is a contiguous Fortran array: the first index varies
867
+ * the fastest in memory (strides array is reverse of C-contiguous
868
+ * array)
869
+ *
870
+ * This flag may be requested in constructor functions.
871
+ * This flag may be tested for in PyArray_FLAGS(arr).
872
+ */
873
+ #define NPY_ARRAY_F_CONTIGUOUS 0x0002
874
+
875
+ /*
876
+ * Note: all 0-d arrays are C_CONTIGUOUS and F_CONTIGUOUS. If a
877
+ * 1-d array is C_CONTIGUOUS it is also F_CONTIGUOUS. Arrays with
878
+ * more then one dimension can be C_CONTIGUOUS and F_CONTIGUOUS
879
+ * at the same time if they have either zero or one element.
880
+ * A higher dimensional array always has the same contiguity flags as
881
+ * `array.squeeze()`; dimensions with `array.shape[dimension] == 1` are
882
+ * effectively ignored when checking for contiguity.
883
+ */
884
+
885
+ /*
886
+ * If set, the array owns the data: it will be free'd when the array
887
+ * is deleted.
888
+ *
889
+ * This flag may be tested for in PyArray_FLAGS(arr).
890
+ */
891
+ #define NPY_ARRAY_OWNDATA 0x0004
892
+
893
+ /*
894
+ * An array never has the next four set; they're only used as parameter
895
+ * flags to the various FromAny functions
896
+ *
897
+ * This flag may be requested in constructor functions.
898
+ */
899
+
900
+ /* Cause a cast to occur regardless of whether or not it is safe. */
901
+ #define NPY_ARRAY_FORCECAST 0x0010
902
+
903
+ /*
904
+ * Always copy the array. Returned arrays are always CONTIGUOUS,
905
+ * ALIGNED, and WRITEABLE. See also: NPY_ARRAY_ENSURENOCOPY = 0x4000.
906
+ *
907
+ * This flag may be requested in constructor functions.
908
+ */
909
+ #define NPY_ARRAY_ENSURECOPY 0x0020
910
+
911
+ /*
912
+ * Make sure the returned array is a base-class ndarray
913
+ *
914
+ * This flag may be requested in constructor functions.
915
+ */
916
+ #define NPY_ARRAY_ENSUREARRAY 0x0040
917
+
918
+ /*
919
+ * Make sure that the strides are in units of the element size Needed
920
+ * for some operations with record-arrays.
921
+ *
922
+ * This flag may be requested in constructor functions.
923
+ */
924
+ #define NPY_ARRAY_ELEMENTSTRIDES 0x0080
925
+
926
+ /*
927
+ * Array data is aligned on the appropriate memory address for the type
928
+ * stored according to how the compiler would align things (e.g., an
929
+ * array of integers (4 bytes each) starts on a memory address that's
930
+ * a multiple of 4)
931
+ *
932
+ * This flag may be requested in constructor functions.
933
+ * This flag may be tested for in PyArray_FLAGS(arr).
934
+ */
935
+ #define NPY_ARRAY_ALIGNED 0x0100
936
+
937
+ /*
938
+ * Array data has the native endianness
939
+ *
940
+ * This flag may be requested in constructor functions.
941
+ */
942
+ #define NPY_ARRAY_NOTSWAPPED 0x0200
943
+
944
+ /*
945
+ * Array data is writeable
946
+ *
947
+ * This flag may be requested in constructor functions.
948
+ * This flag may be tested for in PyArray_FLAGS(arr).
949
+ */
950
+ #define NPY_ARRAY_WRITEABLE 0x0400
951
+
952
+ /*
953
+ * If this flag is set, then base contains a pointer to an array of
954
+ * the same size that should be updated with the current contents of
955
+ * this array when PyArray_ResolveWritebackIfCopy is called.
956
+ *
957
+ * This flag may be requested in constructor functions.
958
+ * This flag may be tested for in PyArray_FLAGS(arr).
959
+ */
960
+ #define NPY_ARRAY_WRITEBACKIFCOPY 0x2000
961
+
962
+ /*
963
+ * No copy may be made while converting from an object/array (result is a view)
964
+ *
965
+ * This flag may be requested in constructor functions.
966
+ */
967
+ #define NPY_ARRAY_ENSURENOCOPY 0x4000
968
+
969
+ /*
970
+ * NOTE: there are also internal flags defined in multiarray/arrayobject.h,
971
+ * which start at bit 31 and work down.
972
+ */
973
+
974
+ #define NPY_ARRAY_BEHAVED (NPY_ARRAY_ALIGNED | \
975
+ NPY_ARRAY_WRITEABLE)
976
+ #define NPY_ARRAY_BEHAVED_NS (NPY_ARRAY_ALIGNED | \
977
+ NPY_ARRAY_WRITEABLE | \
978
+ NPY_ARRAY_NOTSWAPPED)
979
+ #define NPY_ARRAY_CARRAY (NPY_ARRAY_C_CONTIGUOUS | \
980
+ NPY_ARRAY_BEHAVED)
981
+ #define NPY_ARRAY_CARRAY_RO (NPY_ARRAY_C_CONTIGUOUS | \
982
+ NPY_ARRAY_ALIGNED)
983
+ #define NPY_ARRAY_FARRAY (NPY_ARRAY_F_CONTIGUOUS | \
984
+ NPY_ARRAY_BEHAVED)
985
+ #define NPY_ARRAY_FARRAY_RO (NPY_ARRAY_F_CONTIGUOUS | \
986
+ NPY_ARRAY_ALIGNED)
987
+ #define NPY_ARRAY_DEFAULT (NPY_ARRAY_CARRAY)
988
+ #define NPY_ARRAY_IN_ARRAY (NPY_ARRAY_CARRAY_RO)
989
+ #define NPY_ARRAY_OUT_ARRAY (NPY_ARRAY_CARRAY)
990
+ #define NPY_ARRAY_INOUT_ARRAY (NPY_ARRAY_CARRAY)
991
+ #define NPY_ARRAY_INOUT_ARRAY2 (NPY_ARRAY_CARRAY | \
992
+ NPY_ARRAY_WRITEBACKIFCOPY)
993
+ #define NPY_ARRAY_IN_FARRAY (NPY_ARRAY_FARRAY_RO)
994
+ #define NPY_ARRAY_OUT_FARRAY (NPY_ARRAY_FARRAY)
995
+ #define NPY_ARRAY_INOUT_FARRAY (NPY_ARRAY_FARRAY)
996
+ #define NPY_ARRAY_INOUT_FARRAY2 (NPY_ARRAY_FARRAY | \
997
+ NPY_ARRAY_WRITEBACKIFCOPY)
998
+
999
+ #define NPY_ARRAY_UPDATE_ALL (NPY_ARRAY_C_CONTIGUOUS | \
1000
+ NPY_ARRAY_F_CONTIGUOUS | \
1001
+ NPY_ARRAY_ALIGNED)
1002
+
1003
+ /* This flag is for the array interface, not PyArrayObject */
1004
+ #define NPY_ARR_HAS_DESCR 0x0800
1005
+
1006
+
1007
+
1008
+
1009
+ /*
1010
+ * Size of internal buffers used for alignment Make BUFSIZE a multiple
1011
+ * of sizeof(npy_cdouble) -- usually 16 so that ufunc buffers are aligned
1012
+ */
1013
+ #define NPY_MIN_BUFSIZE ((int)sizeof(npy_cdouble))
1014
+ #define NPY_MAX_BUFSIZE (((int)sizeof(npy_cdouble))*1000000)
1015
+ #define NPY_BUFSIZE 8192
1016
+ /* buffer stress test size: */
1017
+ /*#define NPY_BUFSIZE 17*/
1018
+
1019
+ /*
1020
+ * C API: consists of Macros and functions. The MACROS are defined
1021
+ * here.
1022
+ */
1023
+
1024
+
1025
+ #define PyArray_ISCONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_C_CONTIGUOUS)
1026
+ #define PyArray_ISWRITEABLE(m) PyArray_CHKFLAGS((m), NPY_ARRAY_WRITEABLE)
1027
+ #define PyArray_ISALIGNED(m) PyArray_CHKFLAGS((m), NPY_ARRAY_ALIGNED)
1028
+
1029
+ #define PyArray_IS_C_CONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_C_CONTIGUOUS)
1030
+ #define PyArray_IS_F_CONTIGUOUS(m) PyArray_CHKFLAGS((m), NPY_ARRAY_F_CONTIGUOUS)
1031
+
1032
+ /* the variable is used in some places, so always define it */
1033
+ #define NPY_BEGIN_THREADS_DEF PyThreadState *_save=NULL;
1034
+ #if NPY_ALLOW_THREADS
1035
+ #define NPY_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
1036
+ #define NPY_END_ALLOW_THREADS Py_END_ALLOW_THREADS
1037
+ #define NPY_BEGIN_THREADS do {_save = PyEval_SaveThread();} while (0);
1038
+ #define NPY_END_THREADS do { if (_save) \
1039
+ { PyEval_RestoreThread(_save); _save = NULL;} } while (0);
1040
+ #define NPY_BEGIN_THREADS_THRESHOLDED(loop_size) do { if ((loop_size) > 500) \
1041
+ { _save = PyEval_SaveThread();} } while (0);
1042
+
1043
+
1044
+ #define NPY_ALLOW_C_API_DEF PyGILState_STATE __save__;
1045
+ #define NPY_ALLOW_C_API do {__save__ = PyGILState_Ensure();} while (0);
1046
+ #define NPY_DISABLE_C_API do {PyGILState_Release(__save__);} while (0);
1047
+ #else
1048
+ #define NPY_BEGIN_ALLOW_THREADS
1049
+ #define NPY_END_ALLOW_THREADS
1050
+ #define NPY_BEGIN_THREADS
1051
+ #define NPY_END_THREADS
1052
+ #define NPY_BEGIN_THREADS_THRESHOLDED(loop_size)
1053
+ #define NPY_BEGIN_THREADS_DESCR(dtype)
1054
+ #define NPY_END_THREADS_DESCR(dtype)
1055
+ #define NPY_ALLOW_C_API_DEF
1056
+ #define NPY_ALLOW_C_API
1057
+ #define NPY_DISABLE_C_API
1058
+ #endif
1059
+
1060
+ /**********************************
1061
+ * The nditer object, added in 1.6
1062
+ **********************************/
1063
+
1064
+ /* The actual structure of the iterator is an internal detail */
1065
+ typedef struct NpyIter_InternalOnly NpyIter;
1066
+
1067
+ /* Iterator function pointers that may be specialized */
1068
+ typedef int (NpyIter_IterNextFunc)(NpyIter *iter);
1069
+ typedef void (NpyIter_GetMultiIndexFunc)(NpyIter *iter,
1070
+ npy_intp *outcoords);
1071
+
1072
+ /*** Global flags that may be passed to the iterator constructors ***/
1073
+
1074
+ /* Track an index representing C order */
1075
+ #define NPY_ITER_C_INDEX 0x00000001
1076
+ /* Track an index representing Fortran order */
1077
+ #define NPY_ITER_F_INDEX 0x00000002
1078
+ /* Track a multi-index */
1079
+ #define NPY_ITER_MULTI_INDEX 0x00000004
1080
+ /* User code external to the iterator does the 1-dimensional innermost loop */
1081
+ #define NPY_ITER_EXTERNAL_LOOP 0x00000008
1082
+ /* Convert all the operands to a common data type */
1083
+ #define NPY_ITER_COMMON_DTYPE 0x00000010
1084
+ /* Operands may hold references, requiring API access during iteration */
1085
+ #define NPY_ITER_REFS_OK 0x00000020
1086
+ /* Zero-sized operands should be permitted, iteration checks IterSize for 0 */
1087
+ #define NPY_ITER_ZEROSIZE_OK 0x00000040
1088
+ /* Permits reductions (size-0 stride with dimension size > 1) */
1089
+ #define NPY_ITER_REDUCE_OK 0x00000080
1090
+ /* Enables sub-range iteration */
1091
+ #define NPY_ITER_RANGED 0x00000100
1092
+ /* Enables buffering */
1093
+ #define NPY_ITER_BUFFERED 0x00000200
1094
+ /* When buffering is enabled, grows the inner loop if possible */
1095
+ #define NPY_ITER_GROWINNER 0x00000400
1096
+ /* Delay allocation of buffers until first Reset* call */
1097
+ #define NPY_ITER_DELAY_BUFALLOC 0x00000800
1098
+ /* When NPY_KEEPORDER is specified, disable reversing negative-stride axes */
1099
+ #define NPY_ITER_DONT_NEGATE_STRIDES 0x00001000
1100
+ /*
1101
+ * If output operands overlap with other operands (based on heuristics that
1102
+ * has false positives but no false negatives), make temporary copies to
1103
+ * eliminate overlap.
1104
+ */
1105
+ #define NPY_ITER_COPY_IF_OVERLAP 0x00002000
1106
+
1107
+ /*** Per-operand flags that may be passed to the iterator constructors ***/
1108
+
1109
+ /* The operand will be read from and written to */
1110
+ #define NPY_ITER_READWRITE 0x00010000
1111
+ /* The operand will only be read from */
1112
+ #define NPY_ITER_READONLY 0x00020000
1113
+ /* The operand will only be written to */
1114
+ #define NPY_ITER_WRITEONLY 0x00040000
1115
+ /* The operand's data must be in native byte order */
1116
+ #define NPY_ITER_NBO 0x00080000
1117
+ /* The operand's data must be aligned */
1118
+ #define NPY_ITER_ALIGNED 0x00100000
1119
+ /* The operand's data must be contiguous (within the inner loop) */
1120
+ #define NPY_ITER_CONTIG 0x00200000
1121
+ /* The operand may be copied to satisfy requirements */
1122
+ #define NPY_ITER_COPY 0x00400000
1123
+ /* The operand may be copied with WRITEBACKIFCOPY to satisfy requirements */
1124
+ #define NPY_ITER_UPDATEIFCOPY 0x00800000
1125
+ /* Allocate the operand if it is NULL */
1126
+ #define NPY_ITER_ALLOCATE 0x01000000
1127
+ /* If an operand is allocated, don't use any subtype */
1128
+ #define NPY_ITER_NO_SUBTYPE 0x02000000
1129
+ /* This is a virtual array slot, operand is NULL but temporary data is there */
1130
+ #define NPY_ITER_VIRTUAL 0x04000000
1131
+ /* Require that the dimension match the iterator dimensions exactly */
1132
+ #define NPY_ITER_NO_BROADCAST 0x08000000
1133
+ /* A mask is being used on this array, affects buffer -> array copy */
1134
+ #define NPY_ITER_WRITEMASKED 0x10000000
1135
+ /* This array is the mask for all WRITEMASKED operands */
1136
+ #define NPY_ITER_ARRAYMASK 0x20000000
1137
+ /* Assume iterator order data access for COPY_IF_OVERLAP */
1138
+ #define NPY_ITER_OVERLAP_ASSUME_ELEMENTWISE 0x40000000
1139
+
1140
+ #define NPY_ITER_GLOBAL_FLAGS 0x0000ffff
1141
+ #define NPY_ITER_PER_OP_FLAGS 0xffff0000
1142
+
1143
+
1144
+ /*****************************
1145
+ * Basic iterator object
1146
+ *****************************/
1147
+
1148
+ /* FWD declaration */
1149
+ typedef struct PyArrayIterObject_tag PyArrayIterObject;
1150
+
1151
+ /*
1152
+ * type of the function which translates a set of coordinates to a
1153
+ * pointer to the data
1154
+ */
1155
+ typedef char* (*npy_iter_get_dataptr_t)(
1156
+ PyArrayIterObject* iter, const npy_intp*);
1157
+
1158
+ struct PyArrayIterObject_tag {
1159
+ PyObject_HEAD
1160
+ int nd_m1; /* number of dimensions - 1 */
1161
+ npy_intp index, size;
1162
+ npy_intp coordinates[NPY_MAXDIMS_LEGACY_ITERS];/* N-dimensional loop */
1163
+ npy_intp dims_m1[NPY_MAXDIMS_LEGACY_ITERS]; /* ao->dimensions - 1 */
1164
+ npy_intp strides[NPY_MAXDIMS_LEGACY_ITERS]; /* ao->strides or fake */
1165
+ npy_intp backstrides[NPY_MAXDIMS_LEGACY_ITERS];/* how far to jump back */
1166
+ npy_intp factors[NPY_MAXDIMS_LEGACY_ITERS]; /* shape factors */
1167
+ PyArrayObject *ao;
1168
+ char *dataptr; /* pointer to current item*/
1169
+ npy_bool contiguous;
1170
+
1171
+ npy_intp bounds[NPY_MAXDIMS_LEGACY_ITERS][2];
1172
+ npy_intp limits[NPY_MAXDIMS_LEGACY_ITERS][2];
1173
+ npy_intp limits_sizes[NPY_MAXDIMS_LEGACY_ITERS];
1174
+ npy_iter_get_dataptr_t translate;
1175
+ } ;
1176
+
1177
+
1178
+ /* Iterator API */
1179
+ #define PyArrayIter_Check(op) PyObject_TypeCheck((op), &PyArrayIter_Type)
1180
+
1181
+ #define _PyAIT(it) ((PyArrayIterObject *)(it))
1182
+ #define PyArray_ITER_RESET(it) do { \
1183
+ _PyAIT(it)->index = 0; \
1184
+ _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \
1185
+ memset(_PyAIT(it)->coordinates, 0, \
1186
+ (_PyAIT(it)->nd_m1+1)*sizeof(npy_intp)); \
1187
+ } while (0)
1188
+
1189
+ #define _PyArray_ITER_NEXT1(it) do { \
1190
+ (it)->dataptr += _PyAIT(it)->strides[0]; \
1191
+ (it)->coordinates[0]++; \
1192
+ } while (0)
1193
+
1194
+ #define _PyArray_ITER_NEXT2(it) do { \
1195
+ if ((it)->coordinates[1] < (it)->dims_m1[1]) { \
1196
+ (it)->coordinates[1]++; \
1197
+ (it)->dataptr += (it)->strides[1]; \
1198
+ } \
1199
+ else { \
1200
+ (it)->coordinates[1] = 0; \
1201
+ (it)->coordinates[0]++; \
1202
+ (it)->dataptr += (it)->strides[0] - \
1203
+ (it)->backstrides[1]; \
1204
+ } \
1205
+ } while (0)
1206
+
1207
+ #define PyArray_ITER_NEXT(it) do { \
1208
+ _PyAIT(it)->index++; \
1209
+ if (_PyAIT(it)->nd_m1 == 0) { \
1210
+ _PyArray_ITER_NEXT1(_PyAIT(it)); \
1211
+ } \
1212
+ else if (_PyAIT(it)->contiguous) \
1213
+ _PyAIT(it)->dataptr += PyArray_ITEMSIZE(_PyAIT(it)->ao); \
1214
+ else if (_PyAIT(it)->nd_m1 == 1) { \
1215
+ _PyArray_ITER_NEXT2(_PyAIT(it)); \
1216
+ } \
1217
+ else { \
1218
+ int __npy_i; \
1219
+ for (__npy_i=_PyAIT(it)->nd_m1; __npy_i >= 0; __npy_i--) { \
1220
+ if (_PyAIT(it)->coordinates[__npy_i] < \
1221
+ _PyAIT(it)->dims_m1[__npy_i]) { \
1222
+ _PyAIT(it)->coordinates[__npy_i]++; \
1223
+ _PyAIT(it)->dataptr += \
1224
+ _PyAIT(it)->strides[__npy_i]; \
1225
+ break; \
1226
+ } \
1227
+ else { \
1228
+ _PyAIT(it)->coordinates[__npy_i] = 0; \
1229
+ _PyAIT(it)->dataptr -= \
1230
+ _PyAIT(it)->backstrides[__npy_i]; \
1231
+ } \
1232
+ } \
1233
+ } \
1234
+ } while (0)
1235
+
1236
+ #define PyArray_ITER_GOTO(it, destination) do { \
1237
+ int __npy_i; \
1238
+ _PyAIT(it)->index = 0; \
1239
+ _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \
1240
+ for (__npy_i = _PyAIT(it)->nd_m1; __npy_i>=0; __npy_i--) { \
1241
+ if (destination[__npy_i] < 0) { \
1242
+ destination[__npy_i] += \
1243
+ _PyAIT(it)->dims_m1[__npy_i]+1; \
1244
+ } \
1245
+ _PyAIT(it)->dataptr += destination[__npy_i] * \
1246
+ _PyAIT(it)->strides[__npy_i]; \
1247
+ _PyAIT(it)->coordinates[__npy_i] = \
1248
+ destination[__npy_i]; \
1249
+ _PyAIT(it)->index += destination[__npy_i] * \
1250
+ ( __npy_i==_PyAIT(it)->nd_m1 ? 1 : \
1251
+ _PyAIT(it)->dims_m1[__npy_i+1]+1) ; \
1252
+ } \
1253
+ } while (0)
1254
+
1255
+ #define PyArray_ITER_GOTO1D(it, ind) do { \
1256
+ int __npy_i; \
1257
+ npy_intp __npy_ind = (npy_intp)(ind); \
1258
+ if (__npy_ind < 0) __npy_ind += _PyAIT(it)->size; \
1259
+ _PyAIT(it)->index = __npy_ind; \
1260
+ if (_PyAIT(it)->nd_m1 == 0) { \
1261
+ _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao) + \
1262
+ __npy_ind * _PyAIT(it)->strides[0]; \
1263
+ } \
1264
+ else if (_PyAIT(it)->contiguous) \
1265
+ _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao) + \
1266
+ __npy_ind * PyArray_ITEMSIZE(_PyAIT(it)->ao); \
1267
+ else { \
1268
+ _PyAIT(it)->dataptr = PyArray_BYTES(_PyAIT(it)->ao); \
1269
+ for (__npy_i = 0; __npy_i<=_PyAIT(it)->nd_m1; \
1270
+ __npy_i++) { \
1271
+ _PyAIT(it)->coordinates[__npy_i] = \
1272
+ (__npy_ind / _PyAIT(it)->factors[__npy_i]); \
1273
+ _PyAIT(it)->dataptr += \
1274
+ (__npy_ind / _PyAIT(it)->factors[__npy_i]) \
1275
+ * _PyAIT(it)->strides[__npy_i]; \
1276
+ __npy_ind %= _PyAIT(it)->factors[__npy_i]; \
1277
+ } \
1278
+ } \
1279
+ } while (0)
1280
+
1281
+ #define PyArray_ITER_DATA(it) ((void *)(_PyAIT(it)->dataptr))
1282
+
1283
+ #define PyArray_ITER_NOTDONE(it) (_PyAIT(it)->index < _PyAIT(it)->size)
1284
+
1285
+
1286
+ /*
1287
+ * Any object passed to PyArray_Broadcast must be binary compatible
1288
+ * with this structure.
1289
+ */
1290
+
1291
+ typedef struct {
1292
+ PyObject_HEAD
1293
+ int numiter; /* number of iters */
1294
+ npy_intp size; /* broadcasted size */
1295
+ npy_intp index; /* current index */
1296
+ int nd; /* number of dims */
1297
+ npy_intp dimensions[NPY_MAXDIMS_LEGACY_ITERS]; /* dimensions */
1298
+ /*
1299
+ * Space for the individual iterators, do not specify size publicly
1300
+ * to allow changing it more easily.
1301
+ * One reason is that Cython uses this for checks and only allows
1302
+ * growing structs (as of Cython 3.0.6). It also allows NPY_MAXARGS
1303
+ * to be runtime dependent.
1304
+ */
1305
+ #if (defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD)
1306
+ PyArrayIterObject *iters[64];
1307
+ #elif defined(__cplusplus)
1308
+ /*
1309
+ * C++ doesn't strictly support flexible members and gives compilers
1310
+ * warnings (pedantic only), so we lie. We can't make it 64 because
1311
+ * then Cython is unhappy (larger struct at runtime is OK smaller not).
1312
+ */
1313
+ PyArrayIterObject *iters[32];
1314
+ #else
1315
+ PyArrayIterObject *iters[];
1316
+ #endif
1317
+ } PyArrayMultiIterObject;
1318
+
1319
+ #define _PyMIT(m) ((PyArrayMultiIterObject *)(m))
1320
+ #define PyArray_MultiIter_RESET(multi) do { \
1321
+ int __npy_mi; \
1322
+ _PyMIT(multi)->index = 0; \
1323
+ for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \
1324
+ PyArray_ITER_RESET(_PyMIT(multi)->iters[__npy_mi]); \
1325
+ } \
1326
+ } while (0)
1327
+
1328
+ #define PyArray_MultiIter_NEXT(multi) do { \
1329
+ int __npy_mi; \
1330
+ _PyMIT(multi)->index++; \
1331
+ for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \
1332
+ PyArray_ITER_NEXT(_PyMIT(multi)->iters[__npy_mi]); \
1333
+ } \
1334
+ } while (0)
1335
+
1336
+ #define PyArray_MultiIter_GOTO(multi, dest) do { \
1337
+ int __npy_mi; \
1338
+ for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \
1339
+ PyArray_ITER_GOTO(_PyMIT(multi)->iters[__npy_mi], dest); \
1340
+ } \
1341
+ _PyMIT(multi)->index = _PyMIT(multi)->iters[0]->index; \
1342
+ } while (0)
1343
+
1344
+ #define PyArray_MultiIter_GOTO1D(multi, ind) do { \
1345
+ int __npy_mi; \
1346
+ for (__npy_mi=0; __npy_mi < _PyMIT(multi)->numiter; __npy_mi++) { \
1347
+ PyArray_ITER_GOTO1D(_PyMIT(multi)->iters[__npy_mi], ind); \
1348
+ } \
1349
+ _PyMIT(multi)->index = _PyMIT(multi)->iters[0]->index; \
1350
+ } while (0)
1351
+
1352
+ #define PyArray_MultiIter_DATA(multi, i) \
1353
+ ((void *)(_PyMIT(multi)->iters[i]->dataptr))
1354
+
1355
+ #define PyArray_MultiIter_NEXTi(multi, i) \
1356
+ PyArray_ITER_NEXT(_PyMIT(multi)->iters[i])
1357
+
1358
+ #define PyArray_MultiIter_NOTDONE(multi) \
1359
+ (_PyMIT(multi)->index < _PyMIT(multi)->size)
1360
+
1361
+
1362
+ static NPY_INLINE int
1363
+ PyArray_MultiIter_NUMITER(PyArrayMultiIterObject *multi)
1364
+ {
1365
+ return multi->numiter;
1366
+ }
1367
+
1368
+
1369
+ static NPY_INLINE npy_intp
1370
+ PyArray_MultiIter_SIZE(PyArrayMultiIterObject *multi)
1371
+ {
1372
+ return multi->size;
1373
+ }
1374
+
1375
+
1376
+ static NPY_INLINE npy_intp
1377
+ PyArray_MultiIter_INDEX(PyArrayMultiIterObject *multi)
1378
+ {
1379
+ return multi->index;
1380
+ }
1381
+
1382
+
1383
+ static NPY_INLINE int
1384
+ PyArray_MultiIter_NDIM(PyArrayMultiIterObject *multi)
1385
+ {
1386
+ return multi->nd;
1387
+ }
1388
+
1389
+
1390
+ static NPY_INLINE npy_intp *
1391
+ PyArray_MultiIter_DIMS(PyArrayMultiIterObject *multi)
1392
+ {
1393
+ return multi->dimensions;
1394
+ }
1395
+
1396
+
1397
+ static NPY_INLINE void **
1398
+ PyArray_MultiIter_ITERS(PyArrayMultiIterObject *multi)
1399
+ {
1400
+ return (void**)multi->iters;
1401
+ }
1402
+
1403
+
1404
+ enum {
1405
+ NPY_NEIGHBORHOOD_ITER_ZERO_PADDING,
1406
+ NPY_NEIGHBORHOOD_ITER_ONE_PADDING,
1407
+ NPY_NEIGHBORHOOD_ITER_CONSTANT_PADDING,
1408
+ NPY_NEIGHBORHOOD_ITER_CIRCULAR_PADDING,
1409
+ NPY_NEIGHBORHOOD_ITER_MIRROR_PADDING
1410
+ };
1411
+
1412
+ typedef struct {
1413
+ PyObject_HEAD
1414
+
1415
+ /*
1416
+ * PyArrayIterObject part: keep this in this exact order
1417
+ */
1418
+ int nd_m1; /* number of dimensions - 1 */
1419
+ npy_intp index, size;
1420
+ npy_intp coordinates[NPY_MAXDIMS_LEGACY_ITERS];/* N-dimensional loop */
1421
+ npy_intp dims_m1[NPY_MAXDIMS_LEGACY_ITERS]; /* ao->dimensions - 1 */
1422
+ npy_intp strides[NPY_MAXDIMS_LEGACY_ITERS]; /* ao->strides or fake */
1423
+ npy_intp backstrides[NPY_MAXDIMS_LEGACY_ITERS];/* how far to jump back */
1424
+ npy_intp factors[NPY_MAXDIMS_LEGACY_ITERS]; /* shape factors */
1425
+ PyArrayObject *ao;
1426
+ char *dataptr; /* pointer to current item*/
1427
+ npy_bool contiguous;
1428
+
1429
+ npy_intp bounds[NPY_MAXDIMS_LEGACY_ITERS][2];
1430
+ npy_intp limits[NPY_MAXDIMS_LEGACY_ITERS][2];
1431
+ npy_intp limits_sizes[NPY_MAXDIMS_LEGACY_ITERS];
1432
+ npy_iter_get_dataptr_t translate;
1433
+
1434
+ /*
1435
+ * New members
1436
+ */
1437
+ npy_intp nd;
1438
+
1439
+ /* Dimensions is the dimension of the array */
1440
+ npy_intp dimensions[NPY_MAXDIMS_LEGACY_ITERS];
1441
+
1442
+ /*
1443
+ * Neighborhood points coordinates are computed relatively to the
1444
+ * point pointed by _internal_iter
1445
+ */
1446
+ PyArrayIterObject* _internal_iter;
1447
+ /*
1448
+ * To keep a reference to the representation of the constant value
1449
+ * for constant padding
1450
+ */
1451
+ char* constant;
1452
+
1453
+ int mode;
1454
+ } PyArrayNeighborhoodIterObject;
1455
+
1456
+ /*
1457
+ * Neighborhood iterator API
1458
+ */
1459
+
1460
+ /* General: those work for any mode */
1461
+ static inline int
1462
+ PyArrayNeighborhoodIter_Reset(PyArrayNeighborhoodIterObject* iter);
1463
+ static inline int
1464
+ PyArrayNeighborhoodIter_Next(PyArrayNeighborhoodIterObject* iter);
1465
+ #if 0
1466
+ static inline int
1467
+ PyArrayNeighborhoodIter_Next2D(PyArrayNeighborhoodIterObject* iter);
1468
+ #endif
1469
+
1470
+ /*
1471
+ * Include inline implementations - functions defined there are not
1472
+ * considered public API
1473
+ */
1474
+ #define NUMPY_CORE_INCLUDE_NUMPY__NEIGHBORHOOD_IMP_H_
1475
+ #include "_neighborhood_iterator_imp.h"
1476
+ #undef NUMPY_CORE_INCLUDE_NUMPY__NEIGHBORHOOD_IMP_H_
1477
+
1478
+
1479
+
1480
+ /* The default array type */
1481
+ #define NPY_DEFAULT_TYPE NPY_DOUBLE
1482
+ /* default integer type defined in npy_2_compat header */
1483
+
1484
+ /*
1485
+ * All sorts of useful ways to look into a PyArrayObject. It is recommended
1486
+ * to use PyArrayObject * objects instead of always casting from PyObject *,
1487
+ * for improved type checking.
1488
+ *
1489
+ * In many cases here the macro versions of the accessors are deprecated,
1490
+ * but can't be immediately changed to inline functions because the
1491
+ * preexisting macros accept PyObject * and do automatic casts. Inline
1492
+ * functions accepting PyArrayObject * provides for some compile-time
1493
+ * checking of correctness when working with these objects in C.
1494
+ */
1495
+
1496
+ #define PyArray_ISONESEGMENT(m) (PyArray_CHKFLAGS(m, NPY_ARRAY_C_CONTIGUOUS) || \
1497
+ PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS))
1498
+
1499
+ #define PyArray_ISFORTRAN(m) (PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS) && \
1500
+ (!PyArray_CHKFLAGS(m, NPY_ARRAY_C_CONTIGUOUS)))
1501
+
1502
+ #define PyArray_FORTRAN_IF(m) ((PyArray_CHKFLAGS(m, NPY_ARRAY_F_CONTIGUOUS) ? \
1503
+ NPY_ARRAY_F_CONTIGUOUS : 0))
1504
+
1505
+ static inline int
1506
+ PyArray_NDIM(const PyArrayObject *arr)
1507
+ {
1508
+ return ((PyArrayObject_fields *)arr)->nd;
1509
+ }
1510
+
1511
+ static inline void *
1512
+ PyArray_DATA(const PyArrayObject *arr)
1513
+ {
1514
+ return ((PyArrayObject_fields *)arr)->data;
1515
+ }
1516
+
1517
+ static inline char *
1518
+ PyArray_BYTES(const PyArrayObject *arr)
1519
+ {
1520
+ return ((PyArrayObject_fields *)arr)->data;
1521
+ }
1522
+
1523
+ static inline npy_intp *
1524
+ PyArray_DIMS(const PyArrayObject *arr)
1525
+ {
1526
+ return ((PyArrayObject_fields *)arr)->dimensions;
1527
+ }
1528
+
1529
+ static inline npy_intp *
1530
+ PyArray_STRIDES(const PyArrayObject *arr)
1531
+ {
1532
+ return ((PyArrayObject_fields *)arr)->strides;
1533
+ }
1534
+
1535
+ static inline npy_intp
1536
+ PyArray_DIM(const PyArrayObject *arr, int idim)
1537
+ {
1538
+ return ((PyArrayObject_fields *)arr)->dimensions[idim];
1539
+ }
1540
+
1541
+ static inline npy_intp
1542
+ PyArray_STRIDE(const PyArrayObject *arr, int istride)
1543
+ {
1544
+ return ((PyArrayObject_fields *)arr)->strides[istride];
1545
+ }
1546
+
1547
+ static inline NPY_RETURNS_BORROWED_REF PyObject *
1548
+ PyArray_BASE(const PyArrayObject *arr)
1549
+ {
1550
+ return ((PyArrayObject_fields *)arr)->base;
1551
+ }
1552
+
1553
+ static inline NPY_RETURNS_BORROWED_REF PyArray_Descr *
1554
+ PyArray_DESCR(const PyArrayObject *arr)
1555
+ {
1556
+ return ((PyArrayObject_fields *)arr)->descr;
1557
+ }
1558
+
1559
+ static inline int
1560
+ PyArray_FLAGS(const PyArrayObject *arr)
1561
+ {
1562
+ return ((PyArrayObject_fields *)arr)->flags;
1563
+ }
1564
+
1565
+
1566
+ static inline int
1567
+ PyArray_TYPE(const PyArrayObject *arr)
1568
+ {
1569
+ return ((PyArrayObject_fields *)arr)->descr->type_num;
1570
+ }
1571
+
1572
+ static inline int
1573
+ PyArray_CHKFLAGS(const PyArrayObject *arr, int flags)
1574
+ {
1575
+ return (PyArray_FLAGS(arr) & flags) == flags;
1576
+ }
1577
+
1578
+ static inline PyArray_Descr *
1579
+ PyArray_DTYPE(const PyArrayObject *arr)
1580
+ {
1581
+ return ((PyArrayObject_fields *)arr)->descr;
1582
+ }
1583
+
1584
+ static inline npy_intp *
1585
+ PyArray_SHAPE(const PyArrayObject *arr)
1586
+ {
1587
+ return ((PyArrayObject_fields *)arr)->dimensions;
1588
+ }
1589
+
1590
+ /*
1591
+ * Enables the specified array flags. Does no checking,
1592
+ * assumes you know what you're doing.
1593
+ */
1594
+ static inline void
1595
+ PyArray_ENABLEFLAGS(PyArrayObject *arr, int flags)
1596
+ {
1597
+ ((PyArrayObject_fields *)arr)->flags |= flags;
1598
+ }
1599
+
1600
+ /*
1601
+ * Clears the specified array flags. Does no checking,
1602
+ * assumes you know what you're doing.
1603
+ */
1604
+ static inline void
1605
+ PyArray_CLEARFLAGS(PyArrayObject *arr, int flags)
1606
+ {
1607
+ ((PyArrayObject_fields *)arr)->flags &= ~flags;
1608
+ }
1609
+
1610
+ #if NPY_FEATURE_VERSION >= NPY_1_22_API_VERSION
1611
+ static inline NPY_RETURNS_BORROWED_REF PyObject *
1612
+ PyArray_HANDLER(PyArrayObject *arr)
1613
+ {
1614
+ return ((PyArrayObject_fields *)arr)->mem_handler;
1615
+ }
1616
+ #endif
1617
+
1618
+ #define PyTypeNum_ISBOOL(type) ((type) == NPY_BOOL)
1619
+
1620
+ #define PyTypeNum_ISUNSIGNED(type) (((type) == NPY_UBYTE) || \
1621
+ ((type) == NPY_USHORT) || \
1622
+ ((type) == NPY_UINT) || \
1623
+ ((type) == NPY_ULONG) || \
1624
+ ((type) == NPY_ULONGLONG))
1625
+
1626
+ #define PyTypeNum_ISSIGNED(type) (((type) == NPY_BYTE) || \
1627
+ ((type) == NPY_SHORT) || \
1628
+ ((type) == NPY_INT) || \
1629
+ ((type) == NPY_LONG) || \
1630
+ ((type) == NPY_LONGLONG))
1631
+
1632
+ #define PyTypeNum_ISINTEGER(type) (((type) >= NPY_BYTE) && \
1633
+ ((type) <= NPY_ULONGLONG))
1634
+
1635
+ #define PyTypeNum_ISFLOAT(type) ((((type) >= NPY_FLOAT) && \
1636
+ ((type) <= NPY_LONGDOUBLE)) || \
1637
+ ((type) == NPY_HALF))
1638
+
1639
+ #define PyTypeNum_ISNUMBER(type) (((type) <= NPY_CLONGDOUBLE) || \
1640
+ ((type) == NPY_HALF))
1641
+
1642
+ #define PyTypeNum_ISSTRING(type) (((type) == NPY_STRING) || \
1643
+ ((type) == NPY_UNICODE))
1644
+
1645
+ #define PyTypeNum_ISCOMPLEX(type) (((type) >= NPY_CFLOAT) && \
1646
+ ((type) <= NPY_CLONGDOUBLE))
1647
+
1648
+ #define PyTypeNum_ISFLEXIBLE(type) (((type) >=NPY_STRING) && \
1649
+ ((type) <=NPY_VOID))
1650
+
1651
+ #define PyTypeNum_ISDATETIME(type) (((type) >=NPY_DATETIME) && \
1652
+ ((type) <=NPY_TIMEDELTA))
1653
+
1654
+ #define PyTypeNum_ISUSERDEF(type) (((type) >= NPY_USERDEF) && \
1655
+ ((type) < NPY_USERDEF+ \
1656
+ NPY_NUMUSERTYPES))
1657
+
1658
+ #define PyTypeNum_ISEXTENDED(type) (PyTypeNum_ISFLEXIBLE(type) || \
1659
+ PyTypeNum_ISUSERDEF(type))
1660
+
1661
+ #define PyTypeNum_ISOBJECT(type) ((type) == NPY_OBJECT)
1662
+
1663
+
1664
+ #define PyDataType_ISLEGACY(dtype) ((dtype)->type_num < NPY_VSTRING && ((dtype)->type_num >= 0))
1665
+ #define PyDataType_ISBOOL(obj) PyTypeNum_ISBOOL(((PyArray_Descr*)(obj))->type_num)
1666
+ #define PyDataType_ISUNSIGNED(obj) PyTypeNum_ISUNSIGNED(((PyArray_Descr*)(obj))->type_num)
1667
+ #define PyDataType_ISSIGNED(obj) PyTypeNum_ISSIGNED(((PyArray_Descr*)(obj))->type_num)
1668
+ #define PyDataType_ISINTEGER(obj) PyTypeNum_ISINTEGER(((PyArray_Descr*)(obj))->type_num )
1669
+ #define PyDataType_ISFLOAT(obj) PyTypeNum_ISFLOAT(((PyArray_Descr*)(obj))->type_num)
1670
+ #define PyDataType_ISNUMBER(obj) PyTypeNum_ISNUMBER(((PyArray_Descr*)(obj))->type_num)
1671
+ #define PyDataType_ISSTRING(obj) PyTypeNum_ISSTRING(((PyArray_Descr*)(obj))->type_num)
1672
+ #define PyDataType_ISCOMPLEX(obj) PyTypeNum_ISCOMPLEX(((PyArray_Descr*)(obj))->type_num)
1673
+ #define PyDataType_ISFLEXIBLE(obj) PyTypeNum_ISFLEXIBLE(((PyArray_Descr*)(obj))->type_num)
1674
+ #define PyDataType_ISDATETIME(obj) PyTypeNum_ISDATETIME(((PyArray_Descr*)(obj))->type_num)
1675
+ #define PyDataType_ISUSERDEF(obj) PyTypeNum_ISUSERDEF(((PyArray_Descr*)(obj))->type_num)
1676
+ #define PyDataType_ISEXTENDED(obj) PyTypeNum_ISEXTENDED(((PyArray_Descr*)(obj))->type_num)
1677
+ #define PyDataType_ISOBJECT(obj) PyTypeNum_ISOBJECT(((PyArray_Descr*)(obj))->type_num)
1678
+ #define PyDataType_MAKEUNSIZED(dtype) ((dtype)->elsize = 0)
1679
+ /*
1680
+ * PyDataType_* FLAGS, FLACHK, REFCHK, HASFIELDS, HASSUBARRAY, UNSIZED,
1681
+ * SUBARRAY, NAMES, FIELDS, C_METADATA, and METADATA require version specific
1682
+ * lookup and are defined in npy_2_compat.h.
1683
+ */
1684
+
1685
+
1686
+ #define PyArray_ISBOOL(obj) PyTypeNum_ISBOOL(PyArray_TYPE(obj))
1687
+ #define PyArray_ISUNSIGNED(obj) PyTypeNum_ISUNSIGNED(PyArray_TYPE(obj))
1688
+ #define PyArray_ISSIGNED(obj) PyTypeNum_ISSIGNED(PyArray_TYPE(obj))
1689
+ #define PyArray_ISINTEGER(obj) PyTypeNum_ISINTEGER(PyArray_TYPE(obj))
1690
+ #define PyArray_ISFLOAT(obj) PyTypeNum_ISFLOAT(PyArray_TYPE(obj))
1691
+ #define PyArray_ISNUMBER(obj) PyTypeNum_ISNUMBER(PyArray_TYPE(obj))
1692
+ #define PyArray_ISSTRING(obj) PyTypeNum_ISSTRING(PyArray_TYPE(obj))
1693
+ #define PyArray_ISCOMPLEX(obj) PyTypeNum_ISCOMPLEX(PyArray_TYPE(obj))
1694
+ #define PyArray_ISFLEXIBLE(obj) PyTypeNum_ISFLEXIBLE(PyArray_TYPE(obj))
1695
+ #define PyArray_ISDATETIME(obj) PyTypeNum_ISDATETIME(PyArray_TYPE(obj))
1696
+ #define PyArray_ISUSERDEF(obj) PyTypeNum_ISUSERDEF(PyArray_TYPE(obj))
1697
+ #define PyArray_ISEXTENDED(obj) PyTypeNum_ISEXTENDED(PyArray_TYPE(obj))
1698
+ #define PyArray_ISOBJECT(obj) PyTypeNum_ISOBJECT(PyArray_TYPE(obj))
1699
+ #define PyArray_HASFIELDS(obj) PyDataType_HASFIELDS(PyArray_DESCR(obj))
1700
+
1701
+ /*
1702
+ * FIXME: This should check for a flag on the data-type that
1703
+ * states whether or not it is variable length. Because the
1704
+ * ISFLEXIBLE check is hard-coded to the built-in data-types.
1705
+ */
1706
+ #define PyArray_ISVARIABLE(obj) PyTypeNum_ISFLEXIBLE(PyArray_TYPE(obj))
1707
+
1708
+ #define PyArray_SAFEALIGNEDCOPY(obj) (PyArray_ISALIGNED(obj) && !PyArray_ISVARIABLE(obj))
1709
+
1710
+
1711
+ #define NPY_LITTLE '<'
1712
+ #define NPY_BIG '>'
1713
+ #define NPY_NATIVE '='
1714
+ #define NPY_SWAP 's'
1715
+ #define NPY_IGNORE '|'
1716
+
1717
+ #if NPY_BYTE_ORDER == NPY_BIG_ENDIAN
1718
+ #define NPY_NATBYTE NPY_BIG
1719
+ #define NPY_OPPBYTE NPY_LITTLE
1720
+ #else
1721
+ #define NPY_NATBYTE NPY_LITTLE
1722
+ #define NPY_OPPBYTE NPY_BIG
1723
+ #endif
1724
+
1725
+ #define PyArray_ISNBO(arg) ((arg) != NPY_OPPBYTE)
1726
+ #define PyArray_IsNativeByteOrder PyArray_ISNBO
1727
+ #define PyArray_ISNOTSWAPPED(m) PyArray_ISNBO(PyArray_DESCR(m)->byteorder)
1728
+ #define PyArray_ISBYTESWAPPED(m) (!PyArray_ISNOTSWAPPED(m))
1729
+
1730
+ #define PyArray_FLAGSWAP(m, flags) (PyArray_CHKFLAGS(m, flags) && \
1731
+ PyArray_ISNOTSWAPPED(m))
1732
+
1733
+ #define PyArray_ISCARRAY(m) PyArray_FLAGSWAP(m, NPY_ARRAY_CARRAY)
1734
+ #define PyArray_ISCARRAY_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_CARRAY_RO)
1735
+ #define PyArray_ISFARRAY(m) PyArray_FLAGSWAP(m, NPY_ARRAY_FARRAY)
1736
+ #define PyArray_ISFARRAY_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_FARRAY_RO)
1737
+ #define PyArray_ISBEHAVED(m) PyArray_FLAGSWAP(m, NPY_ARRAY_BEHAVED)
1738
+ #define PyArray_ISBEHAVED_RO(m) PyArray_FLAGSWAP(m, NPY_ARRAY_ALIGNED)
1739
+
1740
+
1741
+ #define PyDataType_ISNOTSWAPPED(d) PyArray_ISNBO(((PyArray_Descr *)(d))->byteorder)
1742
+ #define PyDataType_ISBYTESWAPPED(d) (!PyDataType_ISNOTSWAPPED(d))
1743
+
1744
+ /************************************************************
1745
+ * A struct used by PyArray_CreateSortedStridePerm, new in 1.7.
1746
+ ************************************************************/
1747
+
1748
+ typedef struct {
1749
+ npy_intp perm, stride;
1750
+ } npy_stride_sort_item;
1751
+
1752
+ /************************************************************
1753
+ * This is the form of the struct that's stored in the
1754
+ * PyCapsule returned by an array's __array_struct__ attribute. See
1755
+ * https://docs.scipy.org/doc/numpy/reference/arrays.interface.html for the full
1756
+ * documentation.
1757
+ ************************************************************/
1758
+ typedef struct {
1759
+ int two; /*
1760
+ * contains the integer 2 as a sanity
1761
+ * check
1762
+ */
1763
+
1764
+ int nd; /* number of dimensions */
1765
+
1766
+ char typekind; /*
1767
+ * kind in array --- character code of
1768
+ * typestr
1769
+ */
1770
+
1771
+ int itemsize; /* size of each element */
1772
+
1773
+ int flags; /*
1774
+ * how should be data interpreted. Valid
1775
+ * flags are CONTIGUOUS (1), F_CONTIGUOUS (2),
1776
+ * ALIGNED (0x100), NOTSWAPPED (0x200), and
1777
+ * WRITEABLE (0x400). ARR_HAS_DESCR (0x800)
1778
+ * states that arrdescr field is present in
1779
+ * structure
1780
+ */
1781
+
1782
+ npy_intp *shape; /*
1783
+ * A length-nd array of shape
1784
+ * information
1785
+ */
1786
+
1787
+ npy_intp *strides; /* A length-nd array of stride information */
1788
+
1789
+ void *data; /* A pointer to the first element of the array */
1790
+
1791
+ PyObject *descr; /*
1792
+ * A list of fields or NULL (ignored if flags
1793
+ * does not have ARR_HAS_DESCR flag set)
1794
+ */
1795
+ } PyArrayInterface;
1796
+
1797
+
1798
+ /****************************************
1799
+ * NpyString
1800
+ *
1801
+ * Types used by the NpyString API.
1802
+ ****************************************/
1803
+
1804
+ /*
1805
+ * A "packed" encoded string. The string data must be accessed by first unpacking the string.
1806
+ */
1807
+ typedef struct npy_packed_static_string npy_packed_static_string;
1808
+
1809
+ /*
1810
+ * An unpacked read-only view onto the data in a packed string
1811
+ */
1812
+ typedef struct npy_unpacked_static_string {
1813
+ size_t size;
1814
+ const char *buf;
1815
+ } npy_static_string;
1816
+
1817
+ /*
1818
+ * Handles heap allocations for static strings.
1819
+ */
1820
+ typedef struct npy_string_allocator npy_string_allocator;
1821
+
1822
+ typedef struct {
1823
+ PyArray_Descr base;
1824
+ // The object representing a null value
1825
+ PyObject *na_object;
1826
+ // Flag indicating whether or not to coerce arbitrary objects to strings
1827
+ char coerce;
1828
+ // Flag indicating the na object is NaN-like
1829
+ char has_nan_na;
1830
+ // Flag indicating the na object is a string
1831
+ char has_string_na;
1832
+ // If nonzero, indicates that this instance is owned by an array already
1833
+ char array_owned;
1834
+ // The string data to use when a default string is needed
1835
+ npy_static_string default_string;
1836
+ // The name of the missing data object, if any
1837
+ npy_static_string na_name;
1838
+ // the allocator should only be directly accessed after
1839
+ // acquiring the allocator_lock and the lock should
1840
+ // be released immediately after the allocator is
1841
+ // no longer needed
1842
+ npy_string_allocator *allocator;
1843
+ } PyArray_StringDTypeObject;
1844
+
1845
+ /*
1846
+ * PyArray_DTypeMeta related definitions.
1847
+ *
1848
+ * As of now, this API is preliminary and will be extended as necessary.
1849
+ */
1850
+ #if defined(NPY_INTERNAL_BUILD) && NPY_INTERNAL_BUILD
1851
+ /*
1852
+ * The Structures defined in this block are currently considered
1853
+ * private API and may change without warning!
1854
+ * Part of this (at least the size) is expected to be public API without
1855
+ * further modifications.
1856
+ */
1857
+ /* TODO: Make this definition public in the API, as soon as its settled */
1858
+ NPY_NO_EXPORT extern PyTypeObject PyArrayDTypeMeta_Type;
1859
+
1860
+ /*
1861
+ * While NumPy DTypes would not need to be heap types the plan is to
1862
+ * make DTypes available in Python at which point they will be heap types.
1863
+ * Since we also wish to add fields to the DType class, this looks like
1864
+ * a typical instance definition, but with PyHeapTypeObject instead of
1865
+ * only the PyObject_HEAD.
1866
+ * This must only be exposed very extremely careful consideration, since
1867
+ * it is a fairly complex construct which may be better to allow
1868
+ * refactoring of.
1869
+ */
1870
+ typedef struct {
1871
+ PyHeapTypeObject super;
1872
+
1873
+ /*
1874
+ * Most DTypes will have a singleton default instance, for the
1875
+ * parametric legacy DTypes (bytes, string, void, datetime) this
1876
+ * may be a pointer to the *prototype* instance?
1877
+ */
1878
+ PyArray_Descr *singleton;
1879
+ /* Copy of the legacy DTypes type number, usually invalid. */
1880
+ int type_num;
1881
+
1882
+ /* The type object of the scalar instances (may be NULL?) */
1883
+ PyTypeObject *scalar_type;
1884
+ /*
1885
+ * DType flags to signal legacy, parametric, or
1886
+ * abstract. But plenty of space for additional information/flags.
1887
+ */
1888
+ npy_uint64 flags;
1889
+
1890
+ /*
1891
+ * Use indirection in order to allow a fixed size for this struct.
1892
+ * A stable ABI size makes creating a static DType less painful
1893
+ * while also ensuring flexibility for all opaque API (with one
1894
+ * indirection due the pointer lookup).
1895
+ */
1896
+ void *dt_slots;
1897
+ void *reserved[3];
1898
+ } PyArray_DTypeMeta;
1899
+
1900
+ #endif /* NPY_INTERNAL_BUILD */
1901
+
1902
+
1903
+ /*
1904
+ * Use the keyword NPY_DEPRECATED_INCLUDES to ensure that the header files
1905
+ * npy_*_*_deprecated_api.h are only included from here and nowhere else.
1906
+ */
1907
+ #ifdef NPY_DEPRECATED_INCLUDES
1908
+ #error "Do not use the reserved keyword NPY_DEPRECATED_INCLUDES."
1909
+ #endif
1910
+ #define NPY_DEPRECATED_INCLUDES
1911
+ /*
1912
+ * There is no file npy_1_8_deprecated_api.h since there are no additional
1913
+ * deprecated API features in NumPy 1.8.
1914
+ *
1915
+ * Note to maintainers: insert code like the following in future NumPy
1916
+ * versions.
1917
+ *
1918
+ * #if !defined(NPY_NO_DEPRECATED_API) || \
1919
+ * (NPY_NO_DEPRECATED_API < NPY_1_9_API_VERSION)
1920
+ * #include "npy_1_9_deprecated_api.h"
1921
+ * #endif
1922
+ * Then in the npy_1_9_deprecated_api.h header add something like this
1923
+ * --------------------
1924
+ * #ifndef NPY_DEPRECATED_INCLUDES
1925
+ * #error "Should never include npy_*_*_deprecated_api directly."
1926
+ * #endif
1927
+ * #ifndef NUMPY_CORE_INCLUDE_NUMPY_NPY_1_7_DEPRECATED_API_H_
1928
+ * #define NUMPY_CORE_INCLUDE_NUMPY_NPY_1_7_DEPRECATED_API_H_
1929
+ *
1930
+ * #ifndef NPY_NO_DEPRECATED_API
1931
+ * #if defined(_WIN32)
1932
+ * #define _WARN___STR2__(x) #x
1933
+ * #define _WARN___STR1__(x) _WARN___STR2__(x)
1934
+ * #define _WARN___LOC__ __FILE__ "(" _WARN___STR1__(__LINE__) ") : Warning Msg: "
1935
+ * #pragma message(_WARN___LOC__"Using deprecated NumPy API, disable it with " \
1936
+ * "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION")
1937
+ * #else
1938
+ * #warning "Using deprecated NumPy API, disable it with " \
1939
+ * "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION"
1940
+ * #endif
1941
+ * #endif
1942
+ * --------------------
1943
+ */
1944
+ #undef NPY_DEPRECATED_INCLUDES
1945
+
1946
+ #ifdef __cplusplus
1947
+ }
1948
+ #endif
1949
+
1950
+ #endif /* NUMPY_CORE_INCLUDE_NUMPY_NDARRAYTYPES_H_ */