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,315 @@
1
+ from tempfile import NamedTemporaryFile
2
+
3
+ import pytest
4
+ from numpy._core._multiarray_umath import (
5
+ _discover_array_parameters as discover_array_params,
6
+ )
7
+ from numpy._core._multiarray_umath import _get_sfloat_dtype
8
+
9
+ import numpy as np
10
+ from numpy.testing import assert_array_equal
11
+
12
+ SF = _get_sfloat_dtype()
13
+
14
+
15
+ class TestSFloat:
16
+ def _get_array(self, scaling, aligned=True):
17
+ if not aligned:
18
+ a = np.empty(3 * 8 + 1, dtype=np.uint8)[1:]
19
+ a = a.view(np.float64)
20
+ a[:] = [1., 2., 3.]
21
+ else:
22
+ a = np.array([1., 2., 3.])
23
+
24
+ a *= 1. / scaling # the casting code also uses the reciprocal.
25
+ return a.view(SF(scaling))
26
+
27
+ def test_sfloat_rescaled(self):
28
+ sf = SF(1.)
29
+ sf2 = sf.scaled_by(2.)
30
+ assert sf2.get_scaling() == 2.
31
+ sf6 = sf2.scaled_by(3.)
32
+ assert sf6.get_scaling() == 6.
33
+
34
+ def test_class_discovery(self):
35
+ # This does not test much, since we always discover the scaling as 1.
36
+ # But most of NumPy (when writing) does not understand DType classes
37
+ dt, _ = discover_array_params([1., 2., 3.], dtype=SF)
38
+ assert dt == SF(1.)
39
+
40
+ @pytest.mark.parametrize("scaling", [1., -1., 2.])
41
+ def test_scaled_float_from_floats(self, scaling):
42
+ a = np.array([1., 2., 3.], dtype=SF(scaling))
43
+
44
+ assert a.dtype.get_scaling() == scaling
45
+ assert_array_equal(scaling * a.view(np.float64), [1., 2., 3.])
46
+
47
+ def test_repr(self):
48
+ # Check the repr, mainly to cover the code paths:
49
+ assert repr(SF(scaling=1.)) == "_ScaledFloatTestDType(scaling=1.0)"
50
+
51
+ def test_dtype_str(self):
52
+ assert SF(1.).str == "_ScaledFloatTestDType(scaling=1.0)"
53
+
54
+ def test_dtype_name(self):
55
+ assert SF(1.).name == "_ScaledFloatTestDType64"
56
+
57
+ def test_sfloat_structured_dtype_printing(self):
58
+ dt = np.dtype([("id", int), ("value", SF(0.5))])
59
+ # repr of structured dtypes need special handling because the
60
+ # implementation bypasses the object repr
61
+ assert "('value', '_ScaledFloatTestDType64')" in repr(dt)
62
+
63
+ @pytest.mark.parametrize("scaling", [1., -1., 2.])
64
+ def test_sfloat_from_float(self, scaling):
65
+ a = np.array([1., 2., 3.]).astype(dtype=SF(scaling))
66
+
67
+ assert a.dtype.get_scaling() == scaling
68
+ assert_array_equal(scaling * a.view(np.float64), [1., 2., 3.])
69
+
70
+ @pytest.mark.parametrize("aligned", [True, False])
71
+ @pytest.mark.parametrize("scaling", [1., -1., 2.])
72
+ def test_sfloat_getitem(self, aligned, scaling):
73
+ a = self._get_array(1., aligned)
74
+ assert a.tolist() == [1., 2., 3.]
75
+
76
+ @pytest.mark.parametrize("aligned", [True, False])
77
+ def test_sfloat_casts(self, aligned):
78
+ a = self._get_array(1., aligned)
79
+
80
+ assert np.can_cast(a, SF(-1.), casting="equiv")
81
+ assert not np.can_cast(a, SF(-1.), casting="no")
82
+ na = a.astype(SF(-1.))
83
+ assert_array_equal(-1 * na.view(np.float64), a.view(np.float64))
84
+
85
+ assert np.can_cast(a, SF(2.), casting="same_kind")
86
+ assert not np.can_cast(a, SF(2.), casting="safe")
87
+ a2 = a.astype(SF(2.))
88
+ assert_array_equal(2 * a2.view(np.float64), a.view(np.float64))
89
+
90
+ @pytest.mark.parametrize("aligned", [True, False])
91
+ def test_sfloat_cast_internal_errors(self, aligned):
92
+ a = self._get_array(2e300, aligned)
93
+
94
+ with pytest.raises(TypeError,
95
+ match="error raised inside the core-loop: non-finite factor!"):
96
+ a.astype(SF(2e-300))
97
+
98
+ def test_sfloat_promotion(self):
99
+ assert np.result_type(SF(2.), SF(3.)) == SF(3.)
100
+ assert np.result_type(SF(3.), SF(2.)) == SF(3.)
101
+ # Float64 -> SF(1.) and then promotes normally, so both of this work:
102
+ assert np.result_type(SF(3.), np.float64) == SF(3.)
103
+ assert np.result_type(np.float64, SF(0.5)) == SF(1.)
104
+
105
+ # Test an undefined promotion:
106
+ with pytest.raises(TypeError):
107
+ np.result_type(SF(1.), np.int64)
108
+
109
+ def test_basic_multiply(self):
110
+ a = self._get_array(2.)
111
+ b = self._get_array(4.)
112
+
113
+ res = a * b
114
+ # multiplies dtype scaling and content separately:
115
+ assert res.dtype.get_scaling() == 8.
116
+ expected_view = a.view(np.float64) * b.view(np.float64)
117
+ assert_array_equal(res.view(np.float64), expected_view)
118
+
119
+ def test_possible_and_impossible_reduce(self):
120
+ # For reductions to work, the first and last operand must have the
121
+ # same dtype. For this parametric DType that is not necessarily true.
122
+ a = self._get_array(2.)
123
+ # Addition reduction works (as of writing requires to pass initial
124
+ # because setting a scaled-float from the default `0` fails).
125
+ res = np.add.reduce(a, initial=0.)
126
+ assert res == a.astype(np.float64).sum()
127
+
128
+ # But each multiplication changes the factor, so a reduction is not
129
+ # possible (the relaxed version of the old refusal to handle any
130
+ # flexible dtype).
131
+ with pytest.raises(TypeError,
132
+ match="the resolved dtypes are not compatible"):
133
+ np.multiply.reduce(a)
134
+
135
+ def test_basic_ufunc_at(self):
136
+ float_a = np.array([1., 2., 3.])
137
+ b = self._get_array(2.)
138
+
139
+ float_b = b.view(np.float64).copy()
140
+ np.multiply.at(float_b, [1, 1, 1], float_a)
141
+ np.multiply.at(b, [1, 1, 1], float_a)
142
+
143
+ assert_array_equal(b.view(np.float64), float_b)
144
+
145
+ def test_basic_multiply_promotion(self):
146
+ float_a = np.array([1., 2., 3.])
147
+ b = self._get_array(2.)
148
+
149
+ res1 = float_a * b
150
+ res2 = b * float_a
151
+
152
+ # one factor is one, so we get the factor of b:
153
+ assert res1.dtype == res2.dtype == b.dtype
154
+ expected_view = float_a * b.view(np.float64)
155
+ assert_array_equal(res1.view(np.float64), expected_view)
156
+ assert_array_equal(res2.view(np.float64), expected_view)
157
+
158
+ # Check that promotion works when `out` is used:
159
+ np.multiply(b, float_a, out=res2)
160
+ with pytest.raises(TypeError):
161
+ # The promoter accepts this (maybe it should not), but the SFloat
162
+ # result cannot be cast to integer:
163
+ np.multiply(b, float_a, out=np.arange(3))
164
+
165
+ def test_basic_addition(self):
166
+ a = self._get_array(2.)
167
+ b = self._get_array(4.)
168
+
169
+ res = a + b
170
+ # addition uses the type promotion rules for the result:
171
+ assert res.dtype == np.result_type(a.dtype, b.dtype)
172
+ expected_view = (a.astype(res.dtype).view(np.float64) +
173
+ b.astype(res.dtype).view(np.float64))
174
+ assert_array_equal(res.view(np.float64), expected_view)
175
+
176
+ def test_addition_cast_safety(self):
177
+ """The addition method is special for the scaled float, because it
178
+ includes the "cast" between different factors, thus cast-safety
179
+ is influenced by the implementation.
180
+ """
181
+ a = self._get_array(2.)
182
+ b = self._get_array(-2.)
183
+ c = self._get_array(3.)
184
+
185
+ # sign change is "equiv":
186
+ np.add(a, b, casting="equiv")
187
+ with pytest.raises(TypeError):
188
+ np.add(a, b, casting="no")
189
+
190
+ # Different factor is "same_kind" (default) so check that "safe" fails
191
+ with pytest.raises(TypeError):
192
+ np.add(a, c, casting="safe")
193
+
194
+ # Check that casting the output fails also (done by the ufunc here)
195
+ with pytest.raises(TypeError):
196
+ np.add(a, a, out=c, casting="safe")
197
+
198
+ @pytest.mark.parametrize("ufunc",
199
+ [np.logical_and, np.logical_or, np.logical_xor])
200
+ def test_logical_ufuncs_casts_to_bool(self, ufunc):
201
+ a = self._get_array(2.)
202
+ a[0] = 0. # make sure first element is considered False.
203
+
204
+ float_equiv = a.astype(float)
205
+ expected = ufunc(float_equiv, float_equiv)
206
+ res = ufunc(a, a)
207
+ assert_array_equal(res, expected)
208
+
209
+ # also check that the same works for reductions:
210
+ expected = ufunc.reduce(float_equiv)
211
+ res = ufunc.reduce(a)
212
+ assert_array_equal(res, expected)
213
+
214
+ # The output casting does not match the bool, bool -> bool loop:
215
+ with pytest.raises(TypeError):
216
+ ufunc(a, a, out=np.empty(a.shape, dtype=int), casting="equiv")
217
+
218
+ def test_wrapped_and_wrapped_reductions(self):
219
+ a = self._get_array(2.)
220
+ float_equiv = a.astype(float)
221
+
222
+ expected = np.hypot(float_equiv, float_equiv)
223
+ res = np.hypot(a, a)
224
+ assert res.dtype == a.dtype
225
+ res_float = res.view(np.float64) * 2
226
+ assert_array_equal(res_float, expected)
227
+
228
+ # Also check reduction (keepdims, due to incorrect getitem)
229
+ res = np.hypot.reduce(a, keepdims=True)
230
+ assert res.dtype == a.dtype
231
+ expected = np.hypot.reduce(float_equiv, keepdims=True)
232
+ assert res.view(np.float64) * 2 == expected
233
+
234
+ def test_astype_class(self):
235
+ # Very simple test that we accept `.astype()` also on the class.
236
+ # ScaledFloat always returns the default descriptor, but it does
237
+ # check the relevant code paths.
238
+ arr = np.array([1., 2., 3.], dtype=object)
239
+
240
+ res = arr.astype(SF) # passing the class class
241
+ expected = arr.astype(SF(1.)) # above will have discovered 1. scaling
242
+ assert_array_equal(res.view(np.float64), expected.view(np.float64))
243
+
244
+ def test_creation_class(self):
245
+ # passing in a dtype class should return
246
+ # the default descriptor
247
+ arr1 = np.array([1., 2., 3.], dtype=SF)
248
+ assert arr1.dtype == SF(1.)
249
+ arr2 = np.array([1., 2., 3.], dtype=SF(1.))
250
+ assert_array_equal(arr1.view(np.float64), arr2.view(np.float64))
251
+ assert arr1.dtype == arr2.dtype
252
+
253
+ assert np.empty(3, dtype=SF).dtype == SF(1.)
254
+ assert np.empty_like(arr1, dtype=SF).dtype == SF(1.)
255
+ assert np.zeros(3, dtype=SF).dtype == SF(1.)
256
+ assert np.zeros_like(arr1, dtype=SF).dtype == SF(1.)
257
+
258
+ def test_np_save_load(self):
259
+ # this monkeypatch is needed because pickle
260
+ # uses the repr of a type to reconstruct it
261
+ np._ScaledFloatTestDType = SF
262
+
263
+ arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
264
+
265
+ # adapted from RoundtripTest.roundtrip in np.save tests
266
+ with NamedTemporaryFile("wb", delete=False, suffix=".npz") as f:
267
+ with pytest.warns(UserWarning) as record:
268
+ np.savez(f.name, arr)
269
+
270
+ assert len(record) == 1
271
+
272
+ with np.load(f.name, allow_pickle=True) as data:
273
+ larr = data["arr_0"]
274
+ assert_array_equal(arr.view(np.float64), larr.view(np.float64))
275
+ assert larr.dtype == arr.dtype == SF(1.0)
276
+
277
+ del np._ScaledFloatTestDType
278
+
279
+ def test_flatiter(self):
280
+ arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
281
+
282
+ for i, val in enumerate(arr.flat):
283
+ assert arr[i] == val
284
+
285
+ @pytest.mark.parametrize(
286
+ "index", [
287
+ [1, 2], ..., slice(None, 2, None),
288
+ np.array([True, True, False]), np.array([0, 1])
289
+ ], ids=["int_list", "ellipsis", "slice", "bool_array", "int_array"])
290
+ def test_flatiter_index(self, index):
291
+ arr = np.array([1.0, 2.0, 3.0], dtype=SF(1.0))
292
+ np.testing.assert_array_equal(
293
+ arr[index].view(np.float64), arr.flat[index].view(np.float64))
294
+
295
+ arr2 = arr.copy()
296
+ arr[index] = 5.0
297
+ arr2.flat[index] = 5.0
298
+ np.testing.assert_array_equal(
299
+ arr.view(np.float64), arr2.view(np.float64))
300
+
301
+ def test_type_pickle():
302
+ # can't actually unpickle, but we can pickle (if in namespace)
303
+ import pickle
304
+
305
+ np._ScaledFloatTestDType = SF
306
+
307
+ s = pickle.dumps(SF)
308
+ res = pickle.loads(s)
309
+ assert res is SF
310
+
311
+ del np._ScaledFloatTestDType
312
+
313
+
314
+ def test_is_numeric():
315
+ assert SF._is_numeric
@@ -0,0 +1,351 @@
1
+ import os
2
+ import subprocess
3
+ import sys
4
+ import sysconfig
5
+ from datetime import datetime
6
+
7
+ import pytest
8
+
9
+ import numpy as np
10
+ from numpy.testing import IS_EDITABLE, IS_WASM, assert_array_equal
11
+
12
+ # This import is copied from random.tests.test_extending
13
+ try:
14
+ import cython
15
+ from Cython.Compiler.Version import version as cython_version
16
+ except ImportError:
17
+ cython = None
18
+ else:
19
+ from numpy._utils import _pep440
20
+
21
+ # Note: keep in sync with the one in pyproject.toml
22
+ required_version = "3.0.6"
23
+ if _pep440.parse(cython_version) < _pep440.Version(required_version):
24
+ # too old or wrong cython, skip the test
25
+ cython = None
26
+
27
+ pytestmark = pytest.mark.skipif(cython is None, reason="requires cython")
28
+
29
+
30
+ if IS_EDITABLE:
31
+ pytest.skip(
32
+ "Editable install doesn't support tests with a compile step",
33
+ allow_module_level=True
34
+ )
35
+
36
+
37
+ @pytest.fixture(scope='module')
38
+ def install_temp(tmpdir_factory):
39
+ # Based in part on test_cython from random.tests.test_extending
40
+ if IS_WASM:
41
+ pytest.skip("No subprocess")
42
+
43
+ srcdir = os.path.join(os.path.dirname(__file__), 'examples', 'cython')
44
+ build_dir = tmpdir_factory.mktemp("cython_test") / "build"
45
+ os.makedirs(build_dir, exist_ok=True)
46
+ # Ensure we use the correct Python interpreter even when `meson` is
47
+ # installed in a different Python environment (see gh-24956)
48
+ native_file = str(build_dir / 'interpreter-native-file.ini')
49
+ with open(native_file, 'w') as f:
50
+ f.write("[binaries]\n")
51
+ f.write(f"python = '{sys.executable}'\n")
52
+ f.write(f"python3 = '{sys.executable}'")
53
+
54
+ try:
55
+ subprocess.check_call(["meson", "--version"])
56
+ except FileNotFoundError:
57
+ pytest.skip("No usable 'meson' found")
58
+ if sysconfig.get_platform() == "win-arm64":
59
+ pytest.skip("Meson unable to find MSVC linker on win-arm64")
60
+ if sys.platform == "win32":
61
+ subprocess.check_call(["meson", "setup",
62
+ "--buildtype=release",
63
+ "--vsenv", "--native-file", native_file,
64
+ str(srcdir)],
65
+ cwd=build_dir,
66
+ )
67
+ else:
68
+ subprocess.check_call(["meson", "setup",
69
+ "--native-file", native_file, str(srcdir)],
70
+ cwd=build_dir
71
+ )
72
+ try:
73
+ subprocess.check_call(["meson", "compile", "-vv"], cwd=build_dir)
74
+ except subprocess.CalledProcessError:
75
+ print("----------------")
76
+ print("meson build failed when doing")
77
+ print(f"'meson setup --native-file {native_file} {srcdir}'")
78
+ print("'meson compile -vv'")
79
+ print(f"in {build_dir}")
80
+ print("----------------")
81
+ raise
82
+
83
+ sys.path.append(str(build_dir))
84
+
85
+
86
+ def test_is_timedelta64_object(install_temp):
87
+ import checks
88
+
89
+ assert checks.is_td64(np.timedelta64(1234))
90
+ assert checks.is_td64(np.timedelta64(1234, "ns"))
91
+ assert checks.is_td64(np.timedelta64("NaT", "ns"))
92
+
93
+ assert not checks.is_td64(1)
94
+ assert not checks.is_td64(None)
95
+ assert not checks.is_td64("foo")
96
+ assert not checks.is_td64(np.datetime64("now", "s"))
97
+
98
+
99
+ def test_is_datetime64_object(install_temp):
100
+ import checks
101
+
102
+ assert checks.is_dt64(np.datetime64(1234, "ns"))
103
+ assert checks.is_dt64(np.datetime64("NaT", "ns"))
104
+
105
+ assert not checks.is_dt64(1)
106
+ assert not checks.is_dt64(None)
107
+ assert not checks.is_dt64("foo")
108
+ assert not checks.is_dt64(np.timedelta64(1234))
109
+
110
+
111
+ def test_get_datetime64_value(install_temp):
112
+ import checks
113
+
114
+ dt64 = np.datetime64("2016-01-01", "ns")
115
+
116
+ result = checks.get_dt64_value(dt64)
117
+ expected = dt64.view("i8")
118
+
119
+ assert result == expected
120
+
121
+
122
+ def test_get_timedelta64_value(install_temp):
123
+ import checks
124
+
125
+ td64 = np.timedelta64(12345, "h")
126
+
127
+ result = checks.get_td64_value(td64)
128
+ expected = td64.view("i8")
129
+
130
+ assert result == expected
131
+
132
+
133
+ def test_get_datetime64_unit(install_temp):
134
+ import checks
135
+
136
+ dt64 = np.datetime64("2016-01-01", "ns")
137
+ result = checks.get_dt64_unit(dt64)
138
+ expected = 10
139
+ assert result == expected
140
+
141
+ td64 = np.timedelta64(12345, "h")
142
+ result = checks.get_dt64_unit(td64)
143
+ expected = 5
144
+ assert result == expected
145
+
146
+
147
+ def test_abstract_scalars(install_temp):
148
+ import checks
149
+
150
+ assert checks.is_integer(1)
151
+ assert checks.is_integer(np.int8(1))
152
+ assert checks.is_integer(np.uint64(1))
153
+
154
+ def test_default_int(install_temp):
155
+ import checks
156
+
157
+ assert checks.get_default_integer() is np.dtype(int)
158
+
159
+
160
+ def test_ravel_axis(install_temp):
161
+ import checks
162
+
163
+ assert checks.get_ravel_axis() == np.iinfo("intc").min
164
+
165
+
166
+ def test_convert_datetime64_to_datetimestruct(install_temp):
167
+ # GH#21199
168
+ import checks
169
+
170
+ res = checks.convert_datetime64_to_datetimestruct()
171
+
172
+ exp = {
173
+ "year": 2022,
174
+ "month": 3,
175
+ "day": 15,
176
+ "hour": 20,
177
+ "min": 1,
178
+ "sec": 55,
179
+ "us": 260292,
180
+ "ps": 0,
181
+ "as": 0,
182
+ }
183
+
184
+ assert res == exp
185
+
186
+
187
+ class TestDatetimeStrings:
188
+ def test_make_iso_8601_datetime(self, install_temp):
189
+ # GH#21199
190
+ import checks
191
+ dt = datetime(2016, 6, 2, 10, 45, 19)
192
+ # uses NPY_FR_s
193
+ result = checks.make_iso_8601_datetime(dt)
194
+ assert result == b"2016-06-02T10:45:19"
195
+
196
+ def test_get_datetime_iso_8601_strlen(self, install_temp):
197
+ # GH#21199
198
+ import checks
199
+ # uses NPY_FR_ns
200
+ res = checks.get_datetime_iso_8601_strlen()
201
+ assert res == 48
202
+
203
+
204
+ @pytest.mark.parametrize(
205
+ "arrays",
206
+ [
207
+ [np.random.rand(2)],
208
+ [np.random.rand(2), np.random.rand(3, 1)],
209
+ [np.random.rand(2), np.random.rand(2, 3, 2), np.random.rand(1, 3, 2)],
210
+ [np.random.rand(2, 1)] * 4 + [np.random.rand(1, 1, 1)],
211
+ ]
212
+ )
213
+ def test_multiiter_fields(install_temp, arrays):
214
+ import checks
215
+ bcast = np.broadcast(*arrays)
216
+
217
+ assert bcast.ndim == checks.get_multiiter_number_of_dims(bcast)
218
+ assert bcast.size == checks.get_multiiter_size(bcast)
219
+ assert bcast.numiter == checks.get_multiiter_num_of_iterators(bcast)
220
+ assert bcast.shape == checks.get_multiiter_shape(bcast)
221
+ assert bcast.index == checks.get_multiiter_current_index(bcast)
222
+ assert all(
223
+ x.base is y.base
224
+ for x, y in zip(bcast.iters, checks.get_multiiter_iters(bcast))
225
+ )
226
+
227
+
228
+ def test_dtype_flags(install_temp):
229
+ import checks
230
+ dtype = np.dtype("i,O") # dtype with somewhat interesting flags
231
+ assert dtype.flags == checks.get_dtype_flags(dtype)
232
+
233
+
234
+ def test_conv_intp(install_temp):
235
+ import checks
236
+
237
+ class myint:
238
+ def __int__(self):
239
+ return 3
240
+
241
+ # These conversion passes via `__int__`, not `__index__`:
242
+ assert checks.conv_intp(3.) == 3
243
+ assert checks.conv_intp(myint()) == 3
244
+
245
+
246
+ def test_npyiter_api(install_temp):
247
+ import checks
248
+ arr = np.random.rand(3, 2)
249
+
250
+ it = np.nditer(arr)
251
+ assert checks.get_npyiter_size(it) == it.itersize == np.prod(arr.shape)
252
+ assert checks.get_npyiter_ndim(it) == it.ndim == 1
253
+ assert checks.npyiter_has_index(it) == it.has_index == False
254
+
255
+ it = np.nditer(arr, flags=["c_index"])
256
+ assert checks.npyiter_has_index(it) == it.has_index == True
257
+ assert (
258
+ checks.npyiter_has_delayed_bufalloc(it)
259
+ == it.has_delayed_bufalloc
260
+ == False
261
+ )
262
+
263
+ it = np.nditer(arr, flags=["buffered", "delay_bufalloc"])
264
+ assert (
265
+ checks.npyiter_has_delayed_bufalloc(it)
266
+ == it.has_delayed_bufalloc
267
+ == True
268
+ )
269
+
270
+ it = np.nditer(arr, flags=["multi_index"])
271
+ assert checks.get_npyiter_size(it) == it.itersize == np.prod(arr.shape)
272
+ assert checks.npyiter_has_multi_index(it) == it.has_multi_index == True
273
+ assert checks.get_npyiter_ndim(it) == it.ndim == 2
274
+ assert checks.test_get_multi_index_iter_next(it, arr)
275
+
276
+ arr2 = np.random.rand(2, 1, 2)
277
+ it = np.nditer([arr, arr2])
278
+ assert checks.get_npyiter_nop(it) == it.nop == 2
279
+ assert checks.get_npyiter_size(it) == it.itersize == 12
280
+ assert checks.get_npyiter_ndim(it) == it.ndim == 3
281
+ assert all(
282
+ x is y for x, y in zip(checks.get_npyiter_operands(it), it.operands)
283
+ )
284
+ assert all(
285
+ np.allclose(x, y)
286
+ for x, y in zip(checks.get_npyiter_itviews(it), it.itviews)
287
+ )
288
+
289
+
290
+ def test_fillwithbytes(install_temp):
291
+ import checks
292
+
293
+ arr = checks.compile_fillwithbyte()
294
+ assert_array_equal(arr, np.ones((1, 2)))
295
+
296
+
297
+ def test_complex(install_temp):
298
+ from checks import inc2_cfloat_struct
299
+
300
+ arr = np.array([0, 10 + 10j], dtype="F")
301
+ inc2_cfloat_struct(arr)
302
+ assert arr[1] == (12 + 12j)
303
+
304
+
305
+ def test_npystring_pack(install_temp):
306
+ """Check that the cython API can write to a vstring array."""
307
+ import checks
308
+
309
+ arr = np.array(['a', 'b', 'c'], dtype='T')
310
+ assert checks.npystring_pack(arr) == 0
311
+
312
+ # checks.npystring_pack writes to the beginning of the array
313
+ assert arr[0] == "Hello world"
314
+
315
+ def test_npystring_load(install_temp):
316
+ """Check that the cython API can load strings from a vstring array."""
317
+ import checks
318
+
319
+ arr = np.array(['abcd', 'b', 'c'], dtype='T')
320
+ result = checks.npystring_load(arr)
321
+ assert result == 'abcd'
322
+
323
+
324
+ def test_npystring_multiple_allocators(install_temp):
325
+ """Check that the cython API can acquire/release multiple vstring allocators."""
326
+ import checks
327
+
328
+ dt = np.dtypes.StringDType(na_object=None)
329
+ arr1 = np.array(['abcd', 'b', 'c'], dtype=dt)
330
+ arr2 = np.array(['a', 'b', 'c'], dtype=dt)
331
+
332
+ assert checks.npystring_pack_multiple(arr1, arr2) == 0
333
+ assert arr1[0] == "Hello world"
334
+ assert arr1[-1] is None
335
+ assert arr2[0] == "test this"
336
+
337
+
338
+ def test_npystring_allocators_other_dtype(install_temp):
339
+ """Check that allocators for non-StringDType arrays is NULL."""
340
+ import checks
341
+
342
+ arr1 = np.array([1, 2, 3], dtype='i')
343
+ arr2 = np.array([4, 5, 6], dtype='i')
344
+
345
+ assert checks.npystring_allocators_other_types(arr1, arr2) == 0
346
+
347
+
348
+ @pytest.mark.skipif(sysconfig.get_platform() == 'win-arm64', reason='no checks module on win-arm64')
349
+ def test_npy_uintp_type_enum():
350
+ import checks
351
+ assert checks.check_npy_uintp_type_enum()