numpy 2.4.0__cp313-cp313t-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (915) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +108 -0
  3. numpy/__init__.cython-30.pxd +1242 -0
  4. numpy/__init__.pxd +1155 -0
  5. numpy/__init__.py +942 -0
  6. numpy/__init__.pyi +6202 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +206 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +201 -0
  12. numpy/_core/__init__.pyi +666 -0
  13. numpy/_core/_add_newdocs.py +7151 -0
  14. numpy/_core/_add_newdocs.pyi +2 -0
  15. numpy/_core/_add_newdocs_scalars.py +381 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +130 -0
  18. numpy/_core/_asarray.pyi +43 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +56 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +54 -0
  25. numpy/_core/_internal.py +968 -0
  26. numpy/_core/_internal.pyi +61 -0
  27. numpy/_core/_methods.py +252 -0
  28. numpy/_core/_methods.pyi +22 -0
  29. numpy/_core/_multiarray_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  30. numpy/_core/_multiarray_umath.cpython-313t-aarch64-linux-musl.so +0 -0
  31. numpy/_core/_operand_flag_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  32. numpy/_core/_rational_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  33. numpy/_core/_simd.cpython-313t-aarch64-linux-musl.so +0 -0
  34. numpy/_core/_simd.pyi +35 -0
  35. numpy/_core/_string_helpers.py +100 -0
  36. numpy/_core/_string_helpers.pyi +12 -0
  37. numpy/_core/_struct_ufunc_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  38. numpy/_core/_type_aliases.py +131 -0
  39. numpy/_core/_type_aliases.pyi +86 -0
  40. numpy/_core/_ufunc_config.py +515 -0
  41. numpy/_core/_ufunc_config.pyi +69 -0
  42. numpy/_core/_umath_tests.cpython-313t-aarch64-linux-musl.so +0 -0
  43. numpy/_core/_umath_tests.pyi +47 -0
  44. numpy/_core/arrayprint.py +1779 -0
  45. numpy/_core/arrayprint.pyi +158 -0
  46. numpy/_core/cversions.py +13 -0
  47. numpy/_core/defchararray.py +1414 -0
  48. numpy/_core/defchararray.pyi +1150 -0
  49. numpy/_core/einsumfunc.py +1650 -0
  50. numpy/_core/einsumfunc.pyi +184 -0
  51. numpy/_core/fromnumeric.py +4233 -0
  52. numpy/_core/fromnumeric.pyi +1735 -0
  53. numpy/_core/function_base.py +547 -0
  54. numpy/_core/function_base.pyi +276 -0
  55. numpy/_core/getlimits.py +462 -0
  56. numpy/_core/getlimits.pyi +124 -0
  57. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  58. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  59. numpy/_core/include/numpy/__ufunc_api.c +55 -0
  60. numpy/_core/include/numpy/__ufunc_api.h +349 -0
  61. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  62. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  63. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  64. numpy/_core/include/numpy/arrayobject.h +7 -0
  65. numpy/_core/include/numpy/arrayscalars.h +198 -0
  66. numpy/_core/include/numpy/dtype_api.h +547 -0
  67. numpy/_core/include/numpy/halffloat.h +70 -0
  68. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  69. numpy/_core/include/numpy/ndarraytypes.h +1982 -0
  70. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  71. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  72. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  73. numpy/_core/include/numpy/npy_common.h +989 -0
  74. numpy/_core/include/numpy/npy_cpu.h +126 -0
  75. numpy/_core/include/numpy/npy_endian.h +79 -0
  76. numpy/_core/include/numpy/npy_math.h +602 -0
  77. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  78. numpy/_core/include/numpy/npy_os.h +42 -0
  79. numpy/_core/include/numpy/numpyconfig.h +185 -0
  80. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  81. numpy/_core/include/numpy/random/bitgen.h +20 -0
  82. numpy/_core/include/numpy/random/distributions.h +209 -0
  83. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  84. numpy/_core/include/numpy/ufuncobject.h +343 -0
  85. numpy/_core/include/numpy/utils.h +37 -0
  86. numpy/_core/lib/libnpymath.a +0 -0
  87. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  88. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  89. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  90. numpy/_core/memmap.py +363 -0
  91. numpy/_core/memmap.pyi +3 -0
  92. numpy/_core/multiarray.py +1740 -0
  93. numpy/_core/multiarray.pyi +1316 -0
  94. numpy/_core/numeric.py +2758 -0
  95. numpy/_core/numeric.pyi +1276 -0
  96. numpy/_core/numerictypes.py +633 -0
  97. numpy/_core/numerictypes.pyi +196 -0
  98. numpy/_core/overrides.py +188 -0
  99. numpy/_core/overrides.pyi +47 -0
  100. numpy/_core/printoptions.py +32 -0
  101. numpy/_core/printoptions.pyi +28 -0
  102. numpy/_core/records.py +1088 -0
  103. numpy/_core/records.pyi +340 -0
  104. numpy/_core/shape_base.py +996 -0
  105. numpy/_core/shape_base.pyi +182 -0
  106. numpy/_core/strings.py +1813 -0
  107. numpy/_core/strings.pyi +536 -0
  108. numpy/_core/tests/_locales.py +72 -0
  109. numpy/_core/tests/_natype.py +144 -0
  110. numpy/_core/tests/data/astype_copy.pkl +0 -0
  111. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  112. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  113. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  114. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  115. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  122. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  123. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  124. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  125. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  127. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  128. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  129. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  130. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  131. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  132. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  134. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  135. numpy/_core/tests/examples/cython/meson.build +43 -0
  136. numpy/_core/tests/examples/cython/setup.py +39 -0
  137. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  138. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  139. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  140. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  141. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  142. numpy/_core/tests/test__exceptions.py +90 -0
  143. numpy/_core/tests/test_abc.py +54 -0
  144. numpy/_core/tests/test_api.py +655 -0
  145. numpy/_core/tests/test_argparse.py +90 -0
  146. numpy/_core/tests/test_array_api_info.py +113 -0
  147. numpy/_core/tests/test_array_coercion.py +928 -0
  148. numpy/_core/tests/test_array_interface.py +222 -0
  149. numpy/_core/tests/test_arraymethod.py +84 -0
  150. numpy/_core/tests/test_arrayobject.py +75 -0
  151. numpy/_core/tests/test_arrayprint.py +1324 -0
  152. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  153. numpy/_core/tests/test_casting_unittests.py +955 -0
  154. numpy/_core/tests/test_conversion_utils.py +209 -0
  155. numpy/_core/tests/test_cpu_dispatcher.py +48 -0
  156. numpy/_core/tests/test_cpu_features.py +450 -0
  157. numpy/_core/tests/test_custom_dtypes.py +393 -0
  158. numpy/_core/tests/test_cython.py +352 -0
  159. numpy/_core/tests/test_datetime.py +2792 -0
  160. numpy/_core/tests/test_defchararray.py +858 -0
  161. numpy/_core/tests/test_deprecations.py +460 -0
  162. numpy/_core/tests/test_dlpack.py +190 -0
  163. numpy/_core/tests/test_dtype.py +2110 -0
  164. numpy/_core/tests/test_einsum.py +1351 -0
  165. numpy/_core/tests/test_errstate.py +131 -0
  166. numpy/_core/tests/test_extint128.py +217 -0
  167. numpy/_core/tests/test_finfo.py +86 -0
  168. numpy/_core/tests/test_function_base.py +504 -0
  169. numpy/_core/tests/test_getlimits.py +171 -0
  170. numpy/_core/tests/test_half.py +593 -0
  171. numpy/_core/tests/test_hashtable.py +36 -0
  172. numpy/_core/tests/test_indexerrors.py +122 -0
  173. numpy/_core/tests/test_indexing.py +1692 -0
  174. numpy/_core/tests/test_item_selection.py +167 -0
  175. numpy/_core/tests/test_limited_api.py +102 -0
  176. numpy/_core/tests/test_longdouble.py +370 -0
  177. numpy/_core/tests/test_mem_overlap.py +933 -0
  178. numpy/_core/tests/test_mem_policy.py +453 -0
  179. numpy/_core/tests/test_memmap.py +248 -0
  180. numpy/_core/tests/test_multiarray.py +11008 -0
  181. numpy/_core/tests/test_multiprocessing.py +55 -0
  182. numpy/_core/tests/test_multithreading.py +353 -0
  183. numpy/_core/tests/test_nditer.py +3533 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4295 -0
  186. numpy/_core/tests/test_numerictypes.py +650 -0
  187. numpy/_core/tests/test_overrides.py +800 -0
  188. numpy/_core/tests/test_print.py +202 -0
  189. numpy/_core/tests/test_protocols.py +46 -0
  190. numpy/_core/tests/test_records.py +544 -0
  191. numpy/_core/tests/test_regression.py +2677 -0
  192. numpy/_core/tests/test_scalar_ctors.py +203 -0
  193. numpy/_core/tests/test_scalar_methods.py +328 -0
  194. numpy/_core/tests/test_scalarbuffer.py +153 -0
  195. numpy/_core/tests/test_scalarinherit.py +105 -0
  196. numpy/_core/tests/test_scalarmath.py +1168 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +904 -0
  199. numpy/_core/tests/test_simd.py +1345 -0
  200. numpy/_core/tests/test_simd_module.py +105 -0
  201. numpy/_core/tests/test_stringdtype.py +1855 -0
  202. numpy/_core/tests/test_strings.py +1515 -0
  203. numpy/_core/tests/test_ufunc.py +3405 -0
  204. numpy/_core/tests/test_umath.py +4962 -0
  205. numpy/_core/tests/test_umath_accuracy.py +132 -0
  206. numpy/_core/tests/test_umath_complex.py +631 -0
  207. numpy/_core/tests/test_unicode.py +369 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +232 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +78 -0
  213. numpy/_expired_attrs_2_0.pyi +61 -0
  214. numpy/_globals.py +121 -0
  215. numpy/_globals.pyi +17 -0
  216. numpy/_pyinstaller/__init__.py +0 -0
  217. numpy/_pyinstaller/__init__.pyi +0 -0
  218. numpy/_pyinstaller/hook-numpy.py +36 -0
  219. numpy/_pyinstaller/hook-numpy.pyi +6 -0
  220. numpy/_pyinstaller/tests/__init__.py +16 -0
  221. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  222. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  223. numpy/_pytesttester.py +201 -0
  224. numpy/_pytesttester.pyi +18 -0
  225. numpy/_typing/__init__.py +173 -0
  226. numpy/_typing/_add_docstring.py +153 -0
  227. numpy/_typing/_array_like.py +106 -0
  228. numpy/_typing/_char_codes.py +213 -0
  229. numpy/_typing/_dtype_like.py +114 -0
  230. numpy/_typing/_extended_precision.py +15 -0
  231. numpy/_typing/_nbit.py +19 -0
  232. numpy/_typing/_nbit_base.py +94 -0
  233. numpy/_typing/_nbit_base.pyi +39 -0
  234. numpy/_typing/_nested_sequence.py +79 -0
  235. numpy/_typing/_scalars.py +20 -0
  236. numpy/_typing/_shape.py +8 -0
  237. numpy/_typing/_ufunc.py +7 -0
  238. numpy/_typing/_ufunc.pyi +975 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +28 -0
  241. numpy/_utils/_convertions.py +18 -0
  242. numpy/_utils/_convertions.pyi +4 -0
  243. numpy/_utils/_inspect.py +192 -0
  244. numpy/_utils/_inspect.pyi +70 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +118 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +248 -0
  250. numpy/core/__init__.py +33 -0
  251. numpy/core/__init__.pyi +0 -0
  252. numpy/core/_dtype.py +10 -0
  253. numpy/core/_dtype.pyi +0 -0
  254. numpy/core/_dtype_ctypes.py +10 -0
  255. numpy/core/_dtype_ctypes.pyi +0 -0
  256. numpy/core/_internal.py +27 -0
  257. numpy/core/_multiarray_umath.py +57 -0
  258. numpy/core/_utils.py +21 -0
  259. numpy/core/arrayprint.py +10 -0
  260. numpy/core/defchararray.py +10 -0
  261. numpy/core/einsumfunc.py +10 -0
  262. numpy/core/fromnumeric.py +10 -0
  263. numpy/core/function_base.py +10 -0
  264. numpy/core/getlimits.py +10 -0
  265. numpy/core/multiarray.py +25 -0
  266. numpy/core/numeric.py +12 -0
  267. numpy/core/numerictypes.py +10 -0
  268. numpy/core/overrides.py +10 -0
  269. numpy/core/overrides.pyi +7 -0
  270. numpy/core/records.py +10 -0
  271. numpy/core/shape_base.py +10 -0
  272. numpy/core/umath.py +10 -0
  273. numpy/ctypeslib/__init__.py +13 -0
  274. numpy/ctypeslib/__init__.pyi +15 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +236 -0
  277. numpy/doc/ufuncs.py +138 -0
  278. numpy/dtypes.py +41 -0
  279. numpy/dtypes.pyi +630 -0
  280. numpy/exceptions.py +246 -0
  281. numpy/exceptions.pyi +27 -0
  282. numpy/f2py/__init__.py +86 -0
  283. numpy/f2py/__init__.pyi +5 -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 +244 -0
  294. numpy/f2py/_backends/_meson.pyi +62 -0
  295. numpy/f2py/_backends/meson.build.template +58 -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 +28 -0
  300. numpy/f2py/auxfuncs.py +1004 -0
  301. numpy/f2py/auxfuncs.pyi +262 -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 +266 -0
  312. numpy/f2py/diagnose.py +149 -0
  313. numpy/f2py/diagnose.pyi +1 -0
  314. numpy/f2py/f2py2e.py +788 -0
  315. numpy/f2py/f2py2e.pyi +74 -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 +41 -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 +1518 -0
  326. numpy/f2py/symbolic.pyi +219 -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 +66 -0
  435. numpy/f2py/tests/test_f2cmap.py +17 -0
  436. numpy/f2py/tests/test_f2py2e.py +983 -0
  437. numpy/f2py/tests/test_isoc.py +56 -0
  438. numpy/f2py/tests/test_kind.py +52 -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 +500 -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 +213 -0
  460. numpy/fft/__init__.pyi +38 -0
  461. numpy/fft/_helper.py +235 -0
  462. numpy/fft/_helper.pyi +44 -0
  463. numpy/fft/_pocketfft.py +1693 -0
  464. numpy/fft/_pocketfft.pyi +137 -0
  465. numpy/fft/_pocketfft_umath.cpython-313t-aarch64-linux-musl.so +0 -0
  466. numpy/fft/tests/__init__.py +0 -0
  467. numpy/fft/tests/test_helper.py +167 -0
  468. numpy/fft/tests/test_pocketfft.py +589 -0
  469. numpy/lib/__init__.py +97 -0
  470. numpy/lib/__init__.pyi +52 -0
  471. numpy/lib/_array_utils_impl.py +62 -0
  472. numpy/lib/_array_utils_impl.pyi +10 -0
  473. numpy/lib/_arraypad_impl.py +926 -0
  474. numpy/lib/_arraypad_impl.pyi +88 -0
  475. numpy/lib/_arraysetops_impl.py +1158 -0
  476. numpy/lib/_arraysetops_impl.pyi +462 -0
  477. numpy/lib/_arrayterator_impl.py +224 -0
  478. numpy/lib/_arrayterator_impl.pyi +45 -0
  479. numpy/lib/_datasource.py +700 -0
  480. numpy/lib/_datasource.pyi +30 -0
  481. numpy/lib/_format_impl.py +1036 -0
  482. numpy/lib/_format_impl.pyi +56 -0
  483. numpy/lib/_function_base_impl.py +5758 -0
  484. numpy/lib/_function_base_impl.pyi +2324 -0
  485. numpy/lib/_histograms_impl.py +1085 -0
  486. numpy/lib/_histograms_impl.pyi +40 -0
  487. numpy/lib/_index_tricks_impl.py +1048 -0
  488. numpy/lib/_index_tricks_impl.pyi +267 -0
  489. numpy/lib/_iotools.py +900 -0
  490. numpy/lib/_iotools.pyi +116 -0
  491. numpy/lib/_nanfunctions_impl.py +2001 -0
  492. numpy/lib/_nanfunctions_impl.pyi +48 -0
  493. numpy/lib/_npyio_impl.py +2583 -0
  494. numpy/lib/_npyio_impl.pyi +299 -0
  495. numpy/lib/_polynomial_impl.py +1465 -0
  496. numpy/lib/_polynomial_impl.pyi +338 -0
  497. numpy/lib/_scimath_impl.py +642 -0
  498. numpy/lib/_scimath_impl.pyi +93 -0
  499. numpy/lib/_shape_base_impl.py +1289 -0
  500. numpy/lib/_shape_base_impl.pyi +236 -0
  501. numpy/lib/_stride_tricks_impl.py +582 -0
  502. numpy/lib/_stride_tricks_impl.pyi +73 -0
  503. numpy/lib/_twodim_base_impl.py +1201 -0
  504. numpy/lib/_twodim_base_impl.pyi +408 -0
  505. numpy/lib/_type_check_impl.py +710 -0
  506. numpy/lib/_type_check_impl.pyi +348 -0
  507. numpy/lib/_ufunclike_impl.py +199 -0
  508. numpy/lib/_ufunclike_impl.pyi +60 -0
  509. numpy/lib/_user_array_impl.py +310 -0
  510. numpy/lib/_user_array_impl.pyi +226 -0
  511. numpy/lib/_utils_impl.py +784 -0
  512. numpy/lib/_utils_impl.pyi +22 -0
  513. numpy/lib/_version.py +153 -0
  514. numpy/lib/_version.pyi +17 -0
  515. numpy/lib/array_utils.py +7 -0
  516. numpy/lib/array_utils.pyi +6 -0
  517. numpy/lib/format.py +24 -0
  518. numpy/lib/format.pyi +24 -0
  519. numpy/lib/introspect.py +94 -0
  520. numpy/lib/introspect.pyi +3 -0
  521. numpy/lib/mixins.py +180 -0
  522. numpy/lib/mixins.pyi +78 -0
  523. numpy/lib/npyio.py +1 -0
  524. numpy/lib/npyio.pyi +5 -0
  525. numpy/lib/recfunctions.py +1681 -0
  526. numpy/lib/recfunctions.pyi +444 -0
  527. numpy/lib/scimath.py +13 -0
  528. numpy/lib/scimath.pyi +12 -0
  529. numpy/lib/stride_tricks.py +1 -0
  530. numpy/lib/stride_tricks.pyi +4 -0
  531. numpy/lib/tests/__init__.py +0 -0
  532. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  533. numpy/lib/tests/data/py2-objarr.npy +0 -0
  534. numpy/lib/tests/data/py2-objarr.npz +0 -0
  535. numpy/lib/tests/data/py3-objarr.npy +0 -0
  536. numpy/lib/tests/data/py3-objarr.npz +0 -0
  537. numpy/lib/tests/data/python3.npy +0 -0
  538. numpy/lib/tests/data/win64python2.npy +0 -0
  539. numpy/lib/tests/test__datasource.py +328 -0
  540. numpy/lib/tests/test__iotools.py +358 -0
  541. numpy/lib/tests/test__version.py +64 -0
  542. numpy/lib/tests/test_array_utils.py +32 -0
  543. numpy/lib/tests/test_arraypad.py +1427 -0
  544. numpy/lib/tests/test_arraysetops.py +1302 -0
  545. numpy/lib/tests/test_arrayterator.py +45 -0
  546. numpy/lib/tests/test_format.py +1054 -0
  547. numpy/lib/tests/test_function_base.py +4705 -0
  548. numpy/lib/tests/test_histograms.py +855 -0
  549. numpy/lib/tests/test_index_tricks.py +693 -0
  550. numpy/lib/tests/test_io.py +2857 -0
  551. numpy/lib/tests/test_loadtxt.py +1099 -0
  552. numpy/lib/tests/test_mixins.py +215 -0
  553. numpy/lib/tests/test_nanfunctions.py +1438 -0
  554. numpy/lib/tests/test_packbits.py +376 -0
  555. numpy/lib/tests/test_polynomial.py +325 -0
  556. numpy/lib/tests/test_recfunctions.py +1042 -0
  557. numpy/lib/tests/test_regression.py +231 -0
  558. numpy/lib/tests/test_shape_base.py +813 -0
  559. numpy/lib/tests/test_stride_tricks.py +655 -0
  560. numpy/lib/tests/test_twodim_base.py +559 -0
  561. numpy/lib/tests/test_type_check.py +473 -0
  562. numpy/lib/tests/test_ufunclike.py +97 -0
  563. numpy/lib/tests/test_utils.py +80 -0
  564. numpy/lib/user_array.py +1 -0
  565. numpy/lib/user_array.pyi +1 -0
  566. numpy/linalg/__init__.py +95 -0
  567. numpy/linalg/__init__.pyi +71 -0
  568. numpy/linalg/_linalg.py +3657 -0
  569. numpy/linalg/_linalg.pyi +548 -0
  570. numpy/linalg/_umath_linalg.cpython-313t-aarch64-linux-musl.so +0 -0
  571. numpy/linalg/_umath_linalg.pyi +60 -0
  572. numpy/linalg/lapack_lite.cpython-313t-aarch64-linux-musl.so +0 -0
  573. numpy/linalg/lapack_lite.pyi +143 -0
  574. numpy/linalg/tests/__init__.py +0 -0
  575. numpy/linalg/tests/test_deprecations.py +21 -0
  576. numpy/linalg/tests/test_linalg.py +2442 -0
  577. numpy/linalg/tests/test_regression.py +182 -0
  578. numpy/ma/API_CHANGES.txt +135 -0
  579. numpy/ma/LICENSE +24 -0
  580. numpy/ma/README.rst +236 -0
  581. numpy/ma/__init__.py +53 -0
  582. numpy/ma/__init__.pyi +458 -0
  583. numpy/ma/core.py +8929 -0
  584. numpy/ma/core.pyi +3720 -0
  585. numpy/ma/extras.py +2266 -0
  586. numpy/ma/extras.pyi +297 -0
  587. numpy/ma/mrecords.py +762 -0
  588. numpy/ma/mrecords.pyi +96 -0
  589. numpy/ma/tests/__init__.py +0 -0
  590. numpy/ma/tests/test_arrayobject.py +40 -0
  591. numpy/ma/tests/test_core.py +6008 -0
  592. numpy/ma/tests/test_deprecations.py +65 -0
  593. numpy/ma/tests/test_extras.py +1945 -0
  594. numpy/ma/tests/test_mrecords.py +495 -0
  595. numpy/ma/tests/test_old_ma.py +939 -0
  596. numpy/ma/tests/test_regression.py +83 -0
  597. numpy/ma/tests/test_subclassing.py +469 -0
  598. numpy/ma/testutils.py +294 -0
  599. numpy/ma/testutils.pyi +69 -0
  600. numpy/matlib.py +380 -0
  601. numpy/matlib.pyi +580 -0
  602. numpy/matrixlib/__init__.py +12 -0
  603. numpy/matrixlib/__init__.pyi +3 -0
  604. numpy/matrixlib/defmatrix.py +1119 -0
  605. numpy/matrixlib/defmatrix.pyi +218 -0
  606. numpy/matrixlib/tests/__init__.py +0 -0
  607. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  608. numpy/matrixlib/tests/test_interaction.py +360 -0
  609. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  610. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  611. numpy/matrixlib/tests/test_multiarray.py +17 -0
  612. numpy/matrixlib/tests/test_numeric.py +18 -0
  613. numpy/matrixlib/tests/test_regression.py +31 -0
  614. numpy/polynomial/__init__.py +187 -0
  615. numpy/polynomial/__init__.pyi +31 -0
  616. numpy/polynomial/_polybase.py +1191 -0
  617. numpy/polynomial/_polybase.pyi +262 -0
  618. numpy/polynomial/_polytypes.pyi +501 -0
  619. numpy/polynomial/chebyshev.py +2001 -0
  620. numpy/polynomial/chebyshev.pyi +180 -0
  621. numpy/polynomial/hermite.py +1738 -0
  622. numpy/polynomial/hermite.pyi +106 -0
  623. numpy/polynomial/hermite_e.py +1640 -0
  624. numpy/polynomial/hermite_e.pyi +106 -0
  625. numpy/polynomial/laguerre.py +1673 -0
  626. numpy/polynomial/laguerre.pyi +100 -0
  627. numpy/polynomial/legendre.py +1603 -0
  628. numpy/polynomial/legendre.pyi +100 -0
  629. numpy/polynomial/polynomial.py +1625 -0
  630. numpy/polynomial/polynomial.pyi +109 -0
  631. numpy/polynomial/polyutils.py +759 -0
  632. numpy/polynomial/polyutils.pyi +307 -0
  633. numpy/polynomial/tests/__init__.py +0 -0
  634. numpy/polynomial/tests/test_chebyshev.py +618 -0
  635. numpy/polynomial/tests/test_classes.py +613 -0
  636. numpy/polynomial/tests/test_hermite.py +553 -0
  637. numpy/polynomial/tests/test_hermite_e.py +554 -0
  638. numpy/polynomial/tests/test_laguerre.py +535 -0
  639. numpy/polynomial/tests/test_legendre.py +566 -0
  640. numpy/polynomial/tests/test_polynomial.py +691 -0
  641. numpy/polynomial/tests/test_polyutils.py +123 -0
  642. numpy/polynomial/tests/test_printing.py +557 -0
  643. numpy/polynomial/tests/test_symbol.py +217 -0
  644. numpy/py.typed +0 -0
  645. numpy/random/LICENSE.md +71 -0
  646. numpy/random/__init__.pxd +14 -0
  647. numpy/random/__init__.py +213 -0
  648. numpy/random/__init__.pyi +124 -0
  649. numpy/random/_bounded_integers.cpython-313t-aarch64-linux-musl.so +0 -0
  650. numpy/random/_bounded_integers.pxd +29 -0
  651. numpy/random/_bounded_integers.pyi +1 -0
  652. numpy/random/_common.cpython-313t-aarch64-linux-musl.so +0 -0
  653. numpy/random/_common.pxd +107 -0
  654. numpy/random/_common.pyi +16 -0
  655. numpy/random/_examples/cffi/extending.py +44 -0
  656. numpy/random/_examples/cffi/parse.py +53 -0
  657. numpy/random/_examples/cython/extending.pyx +77 -0
  658. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  659. numpy/random/_examples/cython/meson.build +53 -0
  660. numpy/random/_examples/numba/extending.py +86 -0
  661. numpy/random/_examples/numba/extending_distributions.py +67 -0
  662. numpy/random/_generator.cpython-313t-aarch64-linux-musl.so +0 -0
  663. numpy/random/_generator.pyi +862 -0
  664. numpy/random/_mt19937.cpython-313t-aarch64-linux-musl.so +0 -0
  665. numpy/random/_mt19937.pyi +27 -0
  666. numpy/random/_pcg64.cpython-313t-aarch64-linux-musl.so +0 -0
  667. numpy/random/_pcg64.pyi +41 -0
  668. numpy/random/_philox.cpython-313t-aarch64-linux-musl.so +0 -0
  669. numpy/random/_philox.pyi +36 -0
  670. numpy/random/_pickle.py +88 -0
  671. numpy/random/_pickle.pyi +43 -0
  672. numpy/random/_sfc64.cpython-313t-aarch64-linux-musl.so +0 -0
  673. numpy/random/_sfc64.pyi +25 -0
  674. numpy/random/bit_generator.cpython-313t-aarch64-linux-musl.so +0 -0
  675. numpy/random/bit_generator.pxd +35 -0
  676. numpy/random/bit_generator.pyi +123 -0
  677. numpy/random/c_distributions.pxd +119 -0
  678. numpy/random/lib/libnpyrandom.a +0 -0
  679. numpy/random/mtrand.cpython-313t-aarch64-linux-musl.so +0 -0
  680. numpy/random/mtrand.pyi +759 -0
  681. numpy/random/tests/__init__.py +0 -0
  682. numpy/random/tests/data/__init__.py +0 -0
  683. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  684. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  685. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  686. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  687. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  688. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  689. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  690. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  691. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  692. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  693. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  694. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  695. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  696. numpy/random/tests/test_direct.py +595 -0
  697. numpy/random/tests/test_extending.py +131 -0
  698. numpy/random/tests/test_generator_mt19937.py +2825 -0
  699. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  700. numpy/random/tests/test_random.py +1724 -0
  701. numpy/random/tests/test_randomstate.py +2099 -0
  702. numpy/random/tests/test_randomstate_regression.py +213 -0
  703. numpy/random/tests/test_regression.py +175 -0
  704. numpy/random/tests/test_seed_sequence.py +79 -0
  705. numpy/random/tests/test_smoke.py +882 -0
  706. numpy/rec/__init__.py +2 -0
  707. numpy/rec/__init__.pyi +23 -0
  708. numpy/strings/__init__.py +2 -0
  709. numpy/strings/__init__.pyi +97 -0
  710. numpy/testing/__init__.py +22 -0
  711. numpy/testing/__init__.pyi +107 -0
  712. numpy/testing/_private/__init__.py +0 -0
  713. numpy/testing/_private/__init__.pyi +0 -0
  714. numpy/testing/_private/extbuild.py +250 -0
  715. numpy/testing/_private/extbuild.pyi +25 -0
  716. numpy/testing/_private/utils.py +2830 -0
  717. numpy/testing/_private/utils.pyi +505 -0
  718. numpy/testing/overrides.py +84 -0
  719. numpy/testing/overrides.pyi +10 -0
  720. numpy/testing/print_coercion_tables.py +207 -0
  721. numpy/testing/print_coercion_tables.pyi +26 -0
  722. numpy/testing/tests/__init__.py +0 -0
  723. numpy/testing/tests/test_utils.py +2123 -0
  724. numpy/tests/__init__.py +0 -0
  725. numpy/tests/test__all__.py +10 -0
  726. numpy/tests/test_configtool.py +51 -0
  727. numpy/tests/test_ctypeslib.py +383 -0
  728. numpy/tests/test_lazyloading.py +42 -0
  729. numpy/tests/test_matlib.py +59 -0
  730. numpy/tests/test_numpy_config.py +47 -0
  731. numpy/tests/test_numpy_version.py +54 -0
  732. numpy/tests/test_public_api.py +804 -0
  733. numpy/tests/test_reloading.py +76 -0
  734. numpy/tests/test_scripts.py +48 -0
  735. numpy/tests/test_warnings.py +79 -0
  736. numpy/typing/__init__.py +233 -0
  737. numpy/typing/__init__.pyi +3 -0
  738. numpy/typing/mypy_plugin.py +200 -0
  739. numpy/typing/tests/__init__.py +0 -0
  740. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  741. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  742. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  743. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  744. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  745. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  746. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  747. numpy/typing/tests/data/fail/char.pyi +63 -0
  748. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  749. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  750. numpy/typing/tests/data/fail/constants.pyi +3 -0
  751. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  752. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  753. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  754. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  755. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  756. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  757. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  758. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  759. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  760. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  761. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  762. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  763. numpy/typing/tests/data/fail/ma.pyi +155 -0
  764. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  765. numpy/typing/tests/data/fail/modules.pyi +17 -0
  766. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  767. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  768. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  769. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  770. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  771. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  772. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  773. numpy/typing/tests/data/fail/random.pyi +62 -0
  774. numpy/typing/tests/data/fail/rec.pyi +17 -0
  775. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  776. numpy/typing/tests/data/fail/shape.pyi +7 -0
  777. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  778. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  779. numpy/typing/tests/data/fail/strings.pyi +52 -0
  780. numpy/typing/tests/data/fail/testing.pyi +28 -0
  781. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  782. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  783. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  784. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  785. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  786. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  787. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  788. numpy/typing/tests/data/mypy.ini +8 -0
  789. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  790. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  791. numpy/typing/tests/data/pass/array_like.py +43 -0
  792. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  793. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  794. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  795. numpy/typing/tests/data/pass/comparisons.py +316 -0
  796. numpy/typing/tests/data/pass/dtype.py +57 -0
  797. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  798. numpy/typing/tests/data/pass/flatiter.py +26 -0
  799. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  800. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  801. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  802. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  803. numpy/typing/tests/data/pass/lib_version.py +18 -0
  804. numpy/typing/tests/data/pass/literal.py +52 -0
  805. numpy/typing/tests/data/pass/ma.py +199 -0
  806. numpy/typing/tests/data/pass/mod.py +149 -0
  807. numpy/typing/tests/data/pass/modules.py +45 -0
  808. numpy/typing/tests/data/pass/multiarray.py +77 -0
  809. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  810. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  811. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  812. numpy/typing/tests/data/pass/nditer.py +4 -0
  813. numpy/typing/tests/data/pass/numeric.py +90 -0
  814. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  815. numpy/typing/tests/data/pass/random.py +1498 -0
  816. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  817. numpy/typing/tests/data/pass/scalars.py +249 -0
  818. numpy/typing/tests/data/pass/shape.py +19 -0
  819. numpy/typing/tests/data/pass/simple.py +170 -0
  820. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  821. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  822. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  823. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  824. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  825. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  826. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  827. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  828. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  829. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  830. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  831. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  832. numpy/typing/tests/data/reveal/char.pyi +225 -0
  833. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  834. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  835. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  836. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  837. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  838. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  839. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  840. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  841. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  842. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  843. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  844. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  845. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  846. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  847. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  848. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  849. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  850. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  851. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  852. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  853. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  854. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  855. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  856. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  857. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  858. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  859. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  860. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  861. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  862. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  863. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  864. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  865. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  866. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  867. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  868. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  869. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  870. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  871. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  872. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  873. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  874. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  875. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  876. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  877. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  878. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  879. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  880. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  881. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  882. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  883. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  884. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  885. numpy/typing/tests/test_isfile.py +38 -0
  886. numpy/typing/tests/test_runtime.py +110 -0
  887. numpy/typing/tests/test_typing.py +205 -0
  888. numpy/version.py +11 -0
  889. numpy/version.pyi +9 -0
  890. numpy-2.4.0.dist-info/METADATA +139 -0
  891. numpy-2.4.0.dist-info/RECORD +915 -0
  892. numpy-2.4.0.dist-info/WHEEL +5 -0
  893. numpy-2.4.0.dist-info/entry_points.txt +13 -0
  894. numpy-2.4.0.dist-info/licenses/LICENSE.txt +935 -0
  895. numpy-2.4.0.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  896. numpy-2.4.0.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  897. numpy-2.4.0.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  898. numpy-2.4.0.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  899. numpy-2.4.0.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  900. numpy-2.4.0.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  901. numpy-2.4.0.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  902. numpy-2.4.0.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  903. numpy-2.4.0.dist-info/licenses/numpy/ma/LICENSE +24 -0
  904. numpy-2.4.0.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  905. numpy-2.4.0.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  906. numpy-2.4.0.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  907. numpy-2.4.0.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  908. numpy-2.4.0.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  909. numpy-2.4.0.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  910. numpy-2.4.0.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
  911. numpy.libs/libgcc_s-2d945d6c-767fb991.so.1 +0 -0
  912. numpy.libs/libgcc_s-2d945d6c.so.1 +0 -0
  913. numpy.libs/libgfortran-67378ab2-e7e7cfab.so.5.0.0 +0 -0
  914. numpy.libs/libscipy_openblas64_-1fc386ee.so +0 -0
  915. numpy.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
@@ -0,0 +1,855 @@
1
+ import warnings
2
+
3
+ import pytest
4
+
5
+ import numpy as np
6
+ from numpy import histogram, histogram_bin_edges, histogramdd
7
+ from numpy.testing import (
8
+ assert_,
9
+ assert_allclose,
10
+ assert_almost_equal,
11
+ assert_array_almost_equal,
12
+ assert_array_equal,
13
+ assert_array_max_ulp,
14
+ assert_equal,
15
+ assert_raises,
16
+ assert_raises_regex,
17
+ )
18
+
19
+
20
+ class TestHistogram:
21
+
22
+ def setup_method(self):
23
+ pass
24
+
25
+ def teardown_method(self):
26
+ pass
27
+
28
+ def test_simple(self):
29
+ n = 100
30
+ v = np.random.rand(n)
31
+ (a, b) = histogram(v)
32
+ # check if the sum of the bins equals the number of samples
33
+ assert_equal(np.sum(a, axis=0), n)
34
+ # check that the bin counts are evenly spaced when the data is from
35
+ # a linear function
36
+ (a, b) = histogram(np.linspace(0, 10, 100))
37
+ assert_array_equal(a, 10)
38
+
39
+ def test_one_bin(self):
40
+ # Ticket 632
41
+ hist, edges = histogram([1, 2, 3, 4], [1, 2])
42
+ assert_array_equal(hist, [2, ])
43
+ assert_array_equal(edges, [1, 2])
44
+ assert_raises(ValueError, histogram, [1, 2], bins=0)
45
+ h, e = histogram([1, 2], bins=1)
46
+ assert_equal(h, np.array([2]))
47
+ assert_allclose(e, np.array([1., 2.]))
48
+
49
+ def test_density(self):
50
+ # Check that the integral of the density equals 1.
51
+ n = 100
52
+ v = np.random.rand(n)
53
+ a, b = histogram(v, density=True)
54
+ area = np.sum(a * np.diff(b))
55
+ assert_almost_equal(area, 1)
56
+
57
+ # Check with non-constant bin widths
58
+ v = np.arange(10)
59
+ bins = [0, 1, 3, 6, 10]
60
+ a, b = histogram(v, bins, density=True)
61
+ assert_array_equal(a, .1)
62
+ assert_equal(np.sum(a * np.diff(b)), 1)
63
+
64
+ # Test that passing False works too
65
+ a, b = histogram(v, bins, density=False)
66
+ assert_array_equal(a, [1, 2, 3, 4])
67
+
68
+ # Variable bin widths are especially useful to deal with
69
+ # infinities.
70
+ v = np.arange(10)
71
+ bins = [0, 1, 3, 6, np.inf]
72
+ a, b = histogram(v, bins, density=True)
73
+ assert_array_equal(a, [.1, .1, .1, 0.])
74
+
75
+ # Taken from a bug report from N. Becker on the numpy-discussion
76
+ # mailing list Aug. 6, 2010.
77
+ counts, dmy = np.histogram(
78
+ [1, 2, 3, 4], [0.5, 1.5, np.inf], density=True)
79
+ assert_equal(counts, [.25, 0])
80
+
81
+ def test_outliers(self):
82
+ # Check that outliers are not tallied
83
+ a = np.arange(10) + .5
84
+
85
+ # Lower outliers
86
+ h, b = histogram(a, range=[0, 9])
87
+ assert_equal(h.sum(), 9)
88
+
89
+ # Upper outliers
90
+ h, b = histogram(a, range=[1, 10])
91
+ assert_equal(h.sum(), 9)
92
+
93
+ # Normalization
94
+ h, b = histogram(a, range=[1, 9], density=True)
95
+ assert_almost_equal((h * np.diff(b)).sum(), 1, decimal=15)
96
+
97
+ # Weights
98
+ w = np.arange(10) + .5
99
+ h, b = histogram(a, range=[1, 9], weights=w, density=True)
100
+ assert_equal((h * np.diff(b)).sum(), 1)
101
+
102
+ h, b = histogram(a, bins=8, range=[1, 9], weights=w)
103
+ assert_equal(h, w[1:-1])
104
+
105
+ def test_arr_weights_mismatch(self):
106
+ a = np.arange(10) + .5
107
+ w = np.arange(11) + .5
108
+ with assert_raises_regex(ValueError, "same shape as"):
109
+ h, b = histogram(a, range=[1, 9], weights=w, density=True)
110
+
111
+ def test_type(self):
112
+ # Check the type of the returned histogram
113
+ a = np.arange(10) + .5
114
+ h, b = histogram(a)
115
+ assert_(np.issubdtype(h.dtype, np.integer))
116
+
117
+ h, b = histogram(a, density=True)
118
+ assert_(np.issubdtype(h.dtype, np.floating))
119
+
120
+ h, b = histogram(a, weights=np.ones(10, int))
121
+ assert_(np.issubdtype(h.dtype, np.integer))
122
+
123
+ h, b = histogram(a, weights=np.ones(10, float))
124
+ assert_(np.issubdtype(h.dtype, np.floating))
125
+
126
+ def test_f32_rounding(self):
127
+ # gh-4799, check that the rounding of the edges works with float32
128
+ x = np.array([276.318359, -69.593948, 21.329449], dtype=np.float32)
129
+ y = np.array([5005.689453, 4481.327637, 6010.369629], dtype=np.float32)
130
+ counts_hist, xedges, yedges = np.histogram2d(x, y, bins=100)
131
+ assert_equal(counts_hist.sum(), 3.)
132
+
133
+ def test_bool_conversion(self):
134
+ # gh-12107
135
+ # Reference integer histogram
136
+ a = np.array([1, 1, 0], dtype=np.uint8)
137
+ int_hist, int_edges = np.histogram(a)
138
+
139
+ # Should raise a warning on booleans
140
+ # Ensure that the histograms are equivalent, need to suppress
141
+ # the warnings to get the actual outputs
142
+ with pytest.warns(RuntimeWarning, match='Converting input from .*'):
143
+ hist, edges = np.histogram([True, True, False])
144
+ # A warning should be issued
145
+ assert_array_equal(hist, int_hist)
146
+ assert_array_equal(edges, int_edges)
147
+
148
+ def test_weights(self):
149
+ v = np.random.rand(100)
150
+ w = np.ones(100) * 5
151
+ a, b = histogram(v)
152
+ na, nb = histogram(v, density=True)
153
+ wa, wb = histogram(v, weights=w)
154
+ nwa, nwb = histogram(v, weights=w, density=True)
155
+ assert_array_almost_equal(a * 5, wa)
156
+ assert_array_almost_equal(na, nwa)
157
+
158
+ # Check weights are properly applied.
159
+ v = np.linspace(0, 10, 10)
160
+ w = np.concatenate((np.zeros(5), np.ones(5)))
161
+ wa, wb = histogram(v, bins=np.arange(11), weights=w)
162
+ assert_array_almost_equal(wa, w)
163
+
164
+ # Check with integer weights
165
+ wa, wb = histogram([1, 2, 2, 4], bins=4, weights=[4, 3, 2, 1])
166
+ assert_array_equal(wa, [4, 5, 0, 1])
167
+ wa, wb = histogram(
168
+ [1, 2, 2, 4], bins=4, weights=[4, 3, 2, 1], density=True)
169
+ assert_array_almost_equal(wa, np.array([4, 5, 0, 1]) / 10. / 3. * 4)
170
+
171
+ # Check weights with non-uniform bin widths
172
+ a, b = histogram(
173
+ np.arange(9), [0, 1, 3, 6, 10],
174
+ weights=[2, 1, 1, 1, 1, 1, 1, 1, 1], density=True)
175
+ assert_almost_equal(a, [.2, .1, .1, .075])
176
+
177
+ def test_exotic_weights(self):
178
+
179
+ # Test the use of weights that are not integer or floats, but e.g.
180
+ # complex numbers or object types.
181
+
182
+ # Complex weights
183
+ values = np.array([1.3, 2.5, 2.3])
184
+ weights = np.array([1, -1, 2]) + 1j * np.array([2, 1, 2])
185
+
186
+ # Check with custom bins
187
+ wa, wb = histogram(values, bins=[0, 2, 3], weights=weights)
188
+ assert_array_almost_equal(wa, np.array([1, 1]) + 1j * np.array([2, 3]))
189
+
190
+ # Check with even bins
191
+ wa, wb = histogram(values, bins=2, range=[1, 3], weights=weights)
192
+ assert_array_almost_equal(wa, np.array([1, 1]) + 1j * np.array([2, 3]))
193
+
194
+ # Decimal weights
195
+ from decimal import Decimal
196
+ values = np.array([1.3, 2.5, 2.3])
197
+ weights = np.array([Decimal(1), Decimal(2), Decimal(3)])
198
+
199
+ # Check with custom bins
200
+ wa, wb = histogram(values, bins=[0, 2, 3], weights=weights)
201
+ assert_array_almost_equal(wa, [Decimal(1), Decimal(5)])
202
+
203
+ # Check with even bins
204
+ wa, wb = histogram(values, bins=2, range=[1, 3], weights=weights)
205
+ assert_array_almost_equal(wa, [Decimal(1), Decimal(5)])
206
+
207
+ def test_no_side_effects(self):
208
+ # This is a regression test that ensures that values passed to
209
+ # ``histogram`` are unchanged.
210
+ values = np.array([1.3, 2.5, 2.3])
211
+ np.histogram(values, range=[-10, 10], bins=100)
212
+ assert_array_almost_equal(values, [1.3, 2.5, 2.3])
213
+
214
+ def test_empty(self):
215
+ a, b = histogram([], bins=([0, 1]))
216
+ assert_array_equal(a, np.array([0]))
217
+ assert_array_equal(b, np.array([0, 1]))
218
+
219
+ def test_error_binnum_type(self):
220
+ # Tests if right Error is raised if bins argument is float
221
+ vals = np.linspace(0.0, 1.0, num=100)
222
+ histogram(vals, 5)
223
+ assert_raises(TypeError, histogram, vals, 2.4)
224
+
225
+ def test_finite_range(self):
226
+ # Normal ranges should be fine
227
+ vals = np.linspace(0.0, 1.0, num=100)
228
+ histogram(vals, range=[0.25, 0.75])
229
+ assert_raises(ValueError, histogram, vals, range=[np.nan, 0.75])
230
+ assert_raises(ValueError, histogram, vals, range=[0.25, np.inf])
231
+
232
+ def test_invalid_range(self):
233
+ # start of range must be < end of range
234
+ vals = np.linspace(0.0, 1.0, num=100)
235
+ with assert_raises_regex(ValueError, "max must be larger than"):
236
+ np.histogram(vals, range=[0.1, 0.01])
237
+
238
+ def test_bin_edge_cases(self):
239
+ # Ensure that floating-point computations correctly place edge cases.
240
+ arr = np.array([337, 404, 739, 806, 1007, 1811, 2012])
241
+ hist, edges = np.histogram(arr, bins=8296, range=(2, 2280))
242
+ mask = hist > 0
243
+ left_edges = edges[:-1][mask]
244
+ right_edges = edges[1:][mask]
245
+ for x, left, right in zip(arr, left_edges, right_edges):
246
+ assert_(x >= left)
247
+ assert_(x < right)
248
+
249
+ def test_last_bin_inclusive_range(self):
250
+ arr = np.array([0., 0., 0., 1., 2., 3., 3., 4., 5.])
251
+ hist, edges = np.histogram(arr, bins=30, range=(-0.5, 5))
252
+ assert_equal(hist[-1], 1)
253
+
254
+ def test_bin_array_dims(self):
255
+ # gracefully handle bins object > 1 dimension
256
+ vals = np.linspace(0.0, 1.0, num=100)
257
+ bins = np.array([[0, 0.5], [0.6, 1.0]])
258
+ with assert_raises_regex(ValueError, "must be 1d"):
259
+ np.histogram(vals, bins=bins)
260
+
261
+ def test_unsigned_monotonicity_check(self):
262
+ # Ensures ValueError is raised if bins not increasing monotonically
263
+ # when bins contain unsigned values (see #9222)
264
+ arr = np.array([2])
265
+ bins = np.array([1, 3, 1], dtype='uint64')
266
+ with assert_raises(ValueError):
267
+ hist, edges = np.histogram(arr, bins=bins)
268
+
269
+ def test_object_array_of_0d(self):
270
+ # gh-7864
271
+ assert_raises(ValueError,
272
+ histogram, [np.array(0.4) for i in range(10)] + [-np.inf])
273
+ assert_raises(ValueError,
274
+ histogram, [np.array(0.4) for i in range(10)] + [np.inf])
275
+
276
+ # these should not crash
277
+ np.histogram([np.array(0.5) for i in range(10)] + [.500000000000002])
278
+ np.histogram([np.array(0.5) for i in range(10)] + [.5])
279
+
280
+ def test_some_nan_values(self):
281
+ # gh-7503
282
+ one_nan = np.array([0, 1, np.nan])
283
+ all_nan = np.array([np.nan, np.nan])
284
+
285
+ # the internal comparisons with NaN give warnings
286
+ with warnings.catch_warnings():
287
+ warnings.simplefilter('ignore', RuntimeWarning)
288
+ # can't infer range with nan
289
+ assert_raises(ValueError, histogram, one_nan, bins='auto')
290
+ assert_raises(ValueError, histogram, all_nan, bins='auto')
291
+
292
+ # explicit range solves the problem
293
+ h, b = histogram(one_nan, bins='auto', range=(0, 1))
294
+ assert_equal(h.sum(), 2) # nan is not counted
295
+ h, b = histogram(all_nan, bins='auto', range=(0, 1))
296
+ assert_equal(h.sum(), 0) # nan is not counted
297
+
298
+ # as does an explicit set of bins
299
+ h, b = histogram(one_nan, bins=[0, 1])
300
+ assert_equal(h.sum(), 2) # nan is not counted
301
+ h, b = histogram(all_nan, bins=[0, 1])
302
+ assert_equal(h.sum(), 0) # nan is not counted
303
+
304
+ def test_datetime(self):
305
+ begin = np.datetime64('2000-01-01', 'D')
306
+ offsets = np.array([0, 0, 1, 1, 2, 3, 5, 10, 20])
307
+ bins = np.array([0, 2, 7, 20])
308
+ dates = begin + offsets
309
+ date_bins = begin + bins
310
+
311
+ td = np.dtype('timedelta64[D]')
312
+
313
+ # Results should be the same for integer offsets or datetime values.
314
+ # For now, only explicit bins are supported, since linspace does not
315
+ # work on datetimes or timedeltas
316
+ d_count, d_edge = histogram(dates, bins=date_bins)
317
+ t_count, t_edge = histogram(offsets.astype(td), bins=bins.astype(td))
318
+ i_count, i_edge = histogram(offsets, bins=bins)
319
+
320
+ assert_equal(d_count, i_count)
321
+ assert_equal(t_count, i_count)
322
+
323
+ assert_equal((d_edge - begin).astype(int), i_edge)
324
+ assert_equal(t_edge.astype(int), i_edge)
325
+
326
+ assert_equal(d_edge.dtype, dates.dtype)
327
+ assert_equal(t_edge.dtype, td)
328
+
329
+ def do_signed_overflow_bounds(self, dtype):
330
+ exponent = 8 * np.dtype(dtype).itemsize - 1
331
+ arr = np.array([-2**exponent + 4, 2**exponent - 4], dtype=dtype)
332
+ hist, e = histogram(arr, bins=2)
333
+ assert_equal(e, [-2**exponent + 4, 0, 2**exponent - 4])
334
+ assert_equal(hist, [1, 1])
335
+
336
+ def test_signed_overflow_bounds(self):
337
+ self.do_signed_overflow_bounds(np.byte)
338
+ self.do_signed_overflow_bounds(np.short)
339
+ self.do_signed_overflow_bounds(np.intc)
340
+ self.do_signed_overflow_bounds(np.int_)
341
+ self.do_signed_overflow_bounds(np.longlong)
342
+
343
+ def do_precision_lower_bound(self, float_small, float_large):
344
+ eps = np.finfo(float_large).eps
345
+
346
+ arr = np.array([1.0], float_small)
347
+ range = np.array([1.0 + eps, 2.0], float_large)
348
+
349
+ # test is looking for behavior when the bounds change between dtypes
350
+ if range.astype(float_small)[0] != 1:
351
+ return
352
+
353
+ # previously crashed
354
+ count, x_loc = np.histogram(arr, bins=1, range=range)
355
+ assert_equal(count, [0])
356
+ assert_equal(x_loc.dtype, float_large)
357
+
358
+ def do_precision_upper_bound(self, float_small, float_large):
359
+ eps = np.finfo(float_large).eps
360
+
361
+ arr = np.array([1.0], float_small)
362
+ range = np.array([0.0, 1.0 - eps], float_large)
363
+
364
+ # test is looking for behavior when the bounds change between dtypes
365
+ if range.astype(float_small)[-1] != 1:
366
+ return
367
+
368
+ # previously crashed
369
+ count, x_loc = np.histogram(arr, bins=1, range=range)
370
+ assert_equal(count, [0])
371
+
372
+ assert_equal(x_loc.dtype, float_large)
373
+
374
+ def do_precision(self, float_small, float_large):
375
+ self.do_precision_lower_bound(float_small, float_large)
376
+ self.do_precision_upper_bound(float_small, float_large)
377
+
378
+ def test_precision(self):
379
+ # not looping results in a useful stack trace upon failure
380
+ self.do_precision(np.half, np.single)
381
+ self.do_precision(np.half, np.double)
382
+ self.do_precision(np.half, np.longdouble)
383
+ self.do_precision(np.single, np.double)
384
+ self.do_precision(np.single, np.longdouble)
385
+ self.do_precision(np.double, np.longdouble)
386
+
387
+ def test_histogram_bin_edges(self):
388
+ hist, e = histogram([1, 2, 3, 4], [1, 2])
389
+ edges = histogram_bin_edges([1, 2, 3, 4], [1, 2])
390
+ assert_array_equal(edges, e)
391
+
392
+ arr = np.array([0., 0., 0., 1., 2., 3., 3., 4., 5.])
393
+ hist, e = histogram(arr, bins=30, range=(-0.5, 5))
394
+ edges = histogram_bin_edges(arr, bins=30, range=(-0.5, 5))
395
+ assert_array_equal(edges, e)
396
+
397
+ hist, e = histogram(arr, bins='auto', range=(0, 1))
398
+ edges = histogram_bin_edges(arr, bins='auto', range=(0, 1))
399
+ assert_array_equal(edges, e)
400
+
401
+ def test_small_value_range(self):
402
+ arr = np.array([1, 1 + 2e-16] * 10)
403
+ with pytest.raises(ValueError, match="Too many bins for data range"):
404
+ histogram(arr, bins=10)
405
+
406
+ # @requires_memory(free_bytes=1e10)
407
+ # @pytest.mark.slow
408
+ @pytest.mark.skip(reason="Bad memory reports lead to OOM in ci testing")
409
+ def test_big_arrays(self):
410
+ sample = np.zeros([100000000, 3])
411
+ xbins = 400
412
+ ybins = 400
413
+ zbins = np.arange(16000)
414
+ hist = np.histogramdd(sample=sample, bins=(xbins, ybins, zbins))
415
+ assert_equal(type(hist), type((1, 2)))
416
+
417
+ def test_gh_23110(self):
418
+ hist, e = np.histogram(np.array([-0.9e-308], dtype='>f8'),
419
+ bins=2,
420
+ range=(-1e-308, -2e-313))
421
+ expected_hist = np.array([1, 0])
422
+ assert_array_equal(hist, expected_hist)
423
+
424
+ def test_gh_28400(self):
425
+ e = 1 + 1e-12
426
+ Z = [0, 1, 1, 1, 1, 1, e, e, e, e, e, e, 2]
427
+ counts, edges = np.histogram(Z, bins="auto")
428
+ assert len(counts) < 10
429
+ assert edges[0] == Z[0]
430
+ assert edges[-1] == Z[-1]
431
+
432
+ class TestHistogramOptimBinNums:
433
+ """
434
+ Provide test coverage when using provided estimators for optimal number of
435
+ bins
436
+ """
437
+
438
+ def test_empty(self):
439
+ estimator_list = ['fd', 'scott', 'rice', 'sturges',
440
+ 'doane', 'sqrt', 'auto', 'stone']
441
+ # check it can deal with empty data
442
+ for estimator in estimator_list:
443
+ a, b = histogram([], bins=estimator)
444
+ assert_array_equal(a, np.array([0]))
445
+ assert_array_equal(b, np.array([0, 1]))
446
+
447
+ def test_simple(self):
448
+ """
449
+ Straightforward testing with a mixture of linspace data (for
450
+ consistency). All test values have been precomputed and the values
451
+ shouldn't change
452
+ """
453
+ # Some basic sanity checking, with some fixed data.
454
+ # Checking for the correct number of bins
455
+ basic_test = {50: {'fd': 4, 'scott': 4, 'rice': 8, 'sturges': 7,
456
+ 'doane': 8, 'sqrt': 8, 'auto': 7, 'stone': 2},
457
+ 500: {'fd': 8, 'scott': 8, 'rice': 16, 'sturges': 10,
458
+ 'doane': 12, 'sqrt': 23, 'auto': 10, 'stone': 9},
459
+ 5000: {'fd': 17, 'scott': 17, 'rice': 35, 'sturges': 14,
460
+ 'doane': 17, 'sqrt': 71, 'auto': 17, 'stone': 20}}
461
+
462
+ for testlen, expectedResults in basic_test.items():
463
+ # Create some sort of non uniform data to test with
464
+ # (2 peak uniform mixture)
465
+ x1 = np.linspace(-10, -1, testlen // 5 * 2)
466
+ x2 = np.linspace(1, 10, testlen // 5 * 3)
467
+ x = np.concatenate((x1, x2))
468
+ for estimator, numbins in expectedResults.items():
469
+ a, b = np.histogram(x, estimator)
470
+ assert_equal(len(a), numbins, err_msg=f"For the {estimator} estimator "
471
+ f"with datasize of {testlen}")
472
+
473
+ def test_small(self):
474
+ """
475
+ Smaller datasets have the potential to cause issues with the data
476
+ adaptive methods, especially the FD method. All bin numbers have been
477
+ precalculated.
478
+ """
479
+ small_dat = {1: {'fd': 1, 'scott': 1, 'rice': 1, 'sturges': 1,
480
+ 'doane': 1, 'sqrt': 1, 'stone': 1},
481
+ 2: {'fd': 2, 'scott': 1, 'rice': 3, 'sturges': 2,
482
+ 'doane': 1, 'sqrt': 2, 'stone': 1},
483
+ 3: {'fd': 2, 'scott': 2, 'rice': 3, 'sturges': 3,
484
+ 'doane': 3, 'sqrt': 2, 'stone': 1}}
485
+
486
+ for testlen, expectedResults in small_dat.items():
487
+ testdat = np.arange(testlen).astype(float)
488
+ for estimator, expbins in expectedResults.items():
489
+ a, b = np.histogram(testdat, estimator)
490
+ assert_equal(len(a), expbins, err_msg=f"For the {estimator} estimator "
491
+ f"with datasize of {testlen}")
492
+
493
+ def test_incorrect_methods(self):
494
+ """
495
+ Check a Value Error is thrown when an unknown string is passed in
496
+ """
497
+ check_list = ['mad', 'freeman', 'histograms', 'IQR']
498
+ for estimator in check_list:
499
+ assert_raises(ValueError, histogram, [1, 2, 3], estimator)
500
+
501
+ def test_novariance(self):
502
+ """
503
+ Check that methods handle no variance in data
504
+ Primarily for Scott and FD as the SD and IQR are both 0 in this case
505
+ """
506
+ novar_dataset = np.ones(100)
507
+ novar_resultdict = {'fd': 1, 'scott': 1, 'rice': 1, 'sturges': 1,
508
+ 'doane': 1, 'sqrt': 1, 'auto': 1, 'stone': 1}
509
+
510
+ for estimator, numbins in novar_resultdict.items():
511
+ a, b = np.histogram(novar_dataset, estimator)
512
+ assert_equal(len(a), numbins,
513
+ err_msg=f"{estimator} estimator, No Variance test")
514
+
515
+ def test_limited_variance(self):
516
+ """
517
+ Check when IQR is 0, but variance exists, we return a reasonable value.
518
+ """
519
+ lim_var_data = np.ones(1000)
520
+ lim_var_data[:3] = 0
521
+ lim_var_data[-4:] = 100
522
+
523
+ edges_auto = histogram_bin_edges(lim_var_data, 'auto')
524
+ assert_equal(edges_auto[0], 0)
525
+ assert_equal(edges_auto[-1], 100.)
526
+ assert len(edges_auto) < 100
527
+
528
+ edges_fd = histogram_bin_edges(lim_var_data, 'fd')
529
+ assert_equal(edges_fd, np.array([0, 100]))
530
+
531
+ edges_sturges = histogram_bin_edges(lim_var_data, 'sturges')
532
+ assert_equal(edges_sturges, np.linspace(0, 100, 12))
533
+
534
+ def test_outlier(self):
535
+ """
536
+ Check the FD, Scott and Doane with outliers.
537
+
538
+ The FD estimates a smaller binwidth since it's less affected by
539
+ outliers. Since the range is so (artificially) large, this means more
540
+ bins, most of which will be empty, but the data of interest usually is
541
+ unaffected. The Scott estimator is more affected and returns fewer bins,
542
+ despite most of the variance being in one area of the data. The Doane
543
+ estimator lies somewhere between the other two.
544
+ """
545
+ xcenter = np.linspace(-10, 10, 50)
546
+ outlier_dataset = np.hstack((np.linspace(-110, -100, 5), xcenter))
547
+
548
+ outlier_resultdict = {'fd': 21, 'scott': 5, 'doane': 11, 'stone': 6}
549
+
550
+ for estimator, numbins in outlier_resultdict.items():
551
+ a, b = np.histogram(outlier_dataset, estimator)
552
+ assert_equal(len(a), numbins)
553
+
554
+ def test_scott_vs_stone(self):
555
+ # Verify that Scott's rule and Stone's rule converges for normally
556
+ # distributed data
557
+
558
+ def nbins_ratio(seed, size):
559
+ rng = np.random.RandomState(seed)
560
+ x = rng.normal(loc=0, scale=2, size=size)
561
+ a, b = len(np.histogram(x, 'stone')[0]), len(np.histogram(x, 'scott')[0])
562
+ return a / (a + b)
563
+
564
+ geom_space = np.geomspace(start=10, stop=100, num=4).round().astype(int)
565
+ ll = [[nbins_ratio(seed, size) for size in geom_space] for seed in range(10)]
566
+
567
+ # the average difference between the two methods decreases as the dataset
568
+ # size increases.
569
+ avg = abs(np.mean(ll, axis=0) - 0.5)
570
+ assert_almost_equal(avg, [0.15, 0.09, 0.08, 0.03], decimal=2)
571
+
572
+ def test_simple_range(self):
573
+ """
574
+ Straightforward testing with a mixture of linspace data (for
575
+ consistency). Adding in a 3rd mixture that will then be
576
+ completely ignored. All test values have been precomputed and
577
+ the shouldn't change.
578
+ """
579
+ # some basic sanity checking, with some fixed data.
580
+ # Checking for the correct number of bins
581
+ basic_test = {
582
+ 50: {'fd': 8, 'scott': 8, 'rice': 15,
583
+ 'sturges': 14, 'auto': 14, 'stone': 8},
584
+ 500: {'fd': 15, 'scott': 16, 'rice': 32,
585
+ 'sturges': 20, 'auto': 20, 'stone': 80},
586
+ 5000: {'fd': 33, 'scott': 33, 'rice': 69,
587
+ 'sturges': 27, 'auto': 33, 'stone': 80}
588
+ }
589
+
590
+ for testlen, expectedResults in basic_test.items():
591
+ # create some sort of non uniform data to test with
592
+ # (3 peak uniform mixture)
593
+ x1 = np.linspace(-10, -1, testlen // 5 * 2)
594
+ x2 = np.linspace(1, 10, testlen // 5 * 3)
595
+ x3 = np.linspace(-100, -50, testlen)
596
+ x = np.hstack((x1, x2, x3))
597
+ for estimator, numbins in expectedResults.items():
598
+ a, b = np.histogram(x, estimator, range=(-20, 20))
599
+ msg = f"For the {estimator} estimator"
600
+ msg += f" with datasize of {testlen}"
601
+ assert_equal(len(a), numbins, err_msg=msg)
602
+
603
+ @pytest.mark.parametrize("bins", ['auto', 'fd', 'doane', 'scott',
604
+ 'stone', 'rice', 'sturges'])
605
+ def test_signed_integer_data(self, bins):
606
+ # Regression test for gh-14379.
607
+ a = np.array([-2, 0, 127], dtype=np.int8)
608
+ hist, edges = np.histogram(a, bins=bins)
609
+ hist32, edges32 = np.histogram(a.astype(np.int32), bins=bins)
610
+ assert_array_equal(hist, hist32)
611
+ assert_array_equal(edges, edges32)
612
+
613
+ @pytest.mark.parametrize("bins", ['auto', 'fd', 'doane', 'scott',
614
+ 'stone', 'rice', 'sturges'])
615
+ def test_integer(self, bins):
616
+ """
617
+ Test that bin width for integer data is at least 1.
618
+ """
619
+ with warnings.catch_warnings():
620
+ if bins == 'stone':
621
+ warnings.simplefilter('ignore', RuntimeWarning)
622
+ assert_equal(
623
+ np.histogram_bin_edges(np.tile(np.arange(9), 1000), bins),
624
+ np.arange(9))
625
+
626
+ def test_integer_non_auto(self):
627
+ """
628
+ Test that the bin-width>=1 requirement *only* applies to auto binning.
629
+ """
630
+ assert_equal(
631
+ np.histogram_bin_edges(np.tile(np.arange(9), 1000), 16),
632
+ np.arange(17) / 2)
633
+ assert_equal(
634
+ np.histogram_bin_edges(np.tile(np.arange(9), 1000), [.1, .2]),
635
+ [.1, .2])
636
+
637
+ def test_simple_weighted(self):
638
+ """
639
+ Check that weighted data raises a TypeError
640
+ """
641
+ estimator_list = ['fd', 'scott', 'rice', 'sturges', 'auto']
642
+ for estimator in estimator_list:
643
+ assert_raises(TypeError, histogram, [1, 2, 3],
644
+ estimator, weights=[1, 2, 3])
645
+
646
+
647
+ class TestHistogramdd:
648
+
649
+ def test_simple(self):
650
+ x = np.array([[-.5, .5, 1.5], [-.5, 1.5, 2.5], [-.5, 2.5, .5],
651
+ [.5, .5, 1.5], [.5, 1.5, 2.5], [.5, 2.5, 2.5]])
652
+ H, edges = histogramdd(x, (2, 3, 3),
653
+ range=[[-1, 1], [0, 3], [0, 3]])
654
+ answer = np.array([[[0, 1, 0], [0, 0, 1], [1, 0, 0]],
655
+ [[0, 1, 0], [0, 0, 1], [0, 0, 1]]])
656
+ assert_array_equal(H, answer)
657
+
658
+ # Check normalization
659
+ ed = [[-2, 0, 2], [0, 1, 2, 3], [0, 1, 2, 3]]
660
+ H, edges = histogramdd(x, bins=ed, density=True)
661
+ assert_(np.all(H == answer / 12.))
662
+
663
+ # Check that H has the correct shape.
664
+ H, edges = histogramdd(x, (2, 3, 4),
665
+ range=[[-1, 1], [0, 3], [0, 4]],
666
+ density=True)
667
+ answer = np.array([[[0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 0]],
668
+ [[0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0]]])
669
+ assert_array_almost_equal(H, answer / 6., 4)
670
+ # Check that a sequence of arrays is accepted and H has the correct
671
+ # shape.
672
+ z = [np.squeeze(y) for y in np.split(x, 3, axis=1)]
673
+ H, edges = histogramdd(
674
+ z, bins=(4, 3, 2), range=[[-2, 2], [0, 3], [0, 2]])
675
+ answer = np.array([[[0, 0], [0, 0], [0, 0]],
676
+ [[0, 1], [0, 0], [1, 0]],
677
+ [[0, 1], [0, 0], [0, 0]],
678
+ [[0, 0], [0, 0], [0, 0]]])
679
+ assert_array_equal(H, answer)
680
+
681
+ Z = np.zeros((5, 5, 5))
682
+ Z[list(range(5)), list(range(5)), list(range(5))] = 1.
683
+ H, edges = histogramdd([np.arange(5), np.arange(5), np.arange(5)], 5)
684
+ assert_array_equal(H, Z)
685
+
686
+ def test_shape_3d(self):
687
+ # All possible permutations for bins of different lengths in 3D.
688
+ bins = ((5, 4, 6), (6, 4, 5), (5, 6, 4), (4, 6, 5), (6, 5, 4),
689
+ (4, 5, 6))
690
+ r = np.random.rand(10, 3)
691
+ for b in bins:
692
+ H, edges = histogramdd(r, b)
693
+ assert_(H.shape == b)
694
+
695
+ def test_shape_4d(self):
696
+ # All possible permutations for bins of different lengths in 4D.
697
+ bins = ((7, 4, 5, 6), (4, 5, 7, 6), (5, 6, 4, 7), (7, 6, 5, 4),
698
+ (5, 7, 6, 4), (4, 6, 7, 5), (6, 5, 7, 4), (7, 5, 4, 6),
699
+ (7, 4, 6, 5), (6, 4, 7, 5), (6, 7, 5, 4), (4, 6, 5, 7),
700
+ (4, 7, 5, 6), (5, 4, 6, 7), (5, 7, 4, 6), (6, 7, 4, 5),
701
+ (6, 5, 4, 7), (4, 7, 6, 5), (4, 5, 6, 7), (7, 6, 4, 5),
702
+ (5, 4, 7, 6), (5, 6, 7, 4), (6, 4, 5, 7), (7, 5, 6, 4))
703
+
704
+ r = np.random.rand(10, 4)
705
+ for b in bins:
706
+ H, edges = histogramdd(r, b)
707
+ assert_(H.shape == b)
708
+
709
+ def test_weights(self):
710
+ v = np.random.rand(100, 2)
711
+ hist, edges = histogramdd(v)
712
+ n_hist, edges = histogramdd(v, density=True)
713
+ w_hist, edges = histogramdd(v, weights=np.ones(100))
714
+ assert_array_equal(w_hist, hist)
715
+ w_hist, edges = histogramdd(v, weights=np.ones(100) * 2, density=True)
716
+ assert_array_equal(w_hist, n_hist)
717
+ w_hist, edges = histogramdd(v, weights=np.ones(100, int) * 2)
718
+ assert_array_equal(w_hist, 2 * hist)
719
+
720
+ def test_identical_samples(self):
721
+ x = np.zeros((10, 2), int)
722
+ hist, edges = histogramdd(x, bins=2)
723
+ assert_array_equal(edges[0], np.array([-0.5, 0., 0.5]))
724
+
725
+ def test_empty(self):
726
+ a, b = histogramdd([[], []], bins=([0, 1], [0, 1]))
727
+ assert_array_max_ulp(a, np.array([[0.]]))
728
+ a, b = np.histogramdd([[], [], []], bins=2)
729
+ assert_array_max_ulp(a, np.zeros((2, 2, 2)))
730
+
731
+ def test_bins_errors(self):
732
+ # There are two ways to specify bins. Check for the right errors
733
+ # when mixing those.
734
+ x = np.arange(8).reshape(2, 4)
735
+ assert_raises(ValueError, np.histogramdd, x, bins=[-1, 2, 4, 5])
736
+ assert_raises(ValueError, np.histogramdd, x, bins=[1, 0.99, 1, 1])
737
+ assert_raises(
738
+ ValueError, np.histogramdd, x, bins=[1, 1, 1, [1, 2, 3, -3]])
739
+ assert_(np.histogramdd(x, bins=[1, 1, 1, [1, 2, 3, 4]]))
740
+
741
+ def test_inf_edges(self):
742
+ # Test using +/-inf bin edges works. See #1788.
743
+ with np.errstate(invalid='ignore'):
744
+ x = np.arange(6).reshape(3, 2)
745
+ expected = np.array([[1, 0], [0, 1], [0, 1]])
746
+ h, e = np.histogramdd(x, bins=[3, [-np.inf, 2, 10]])
747
+ assert_allclose(h, expected)
748
+ h, e = np.histogramdd(x, bins=[3, np.array([-1, 2, np.inf])])
749
+ assert_allclose(h, expected)
750
+ h, e = np.histogramdd(x, bins=[3, [-np.inf, 3, np.inf]])
751
+ assert_allclose(h, expected)
752
+
753
+ def test_rightmost_binedge(self):
754
+ # Test event very close to rightmost binedge. See Github issue #4266
755
+ x = [0.9999999995]
756
+ bins = [[0., 0.5, 1.0]]
757
+ hist, _ = histogramdd(x, bins=bins)
758
+ assert_(hist[0] == 0.0)
759
+ assert_(hist[1] == 1.)
760
+ x = [1.0]
761
+ bins = [[0., 0.5, 1.0]]
762
+ hist, _ = histogramdd(x, bins=bins)
763
+ assert_(hist[0] == 0.0)
764
+ assert_(hist[1] == 1.)
765
+ x = [1.0000000001]
766
+ bins = [[0., 0.5, 1.0]]
767
+ hist, _ = histogramdd(x, bins=bins)
768
+ assert_(hist[0] == 0.0)
769
+ assert_(hist[1] == 0.0)
770
+ x = [1.0001]
771
+ bins = [[0., 0.5, 1.0]]
772
+ hist, _ = histogramdd(x, bins=bins)
773
+ assert_(hist[0] == 0.0)
774
+ assert_(hist[1] == 0.0)
775
+
776
+ def test_finite_range(self):
777
+ vals = np.random.random((100, 3))
778
+ histogramdd(vals, range=[[0.0, 1.0], [0.25, 0.75], [0.25, 0.5]])
779
+ assert_raises(ValueError, histogramdd, vals,
780
+ range=[[0.0, 1.0], [0.25, 0.75], [0.25, np.inf]])
781
+ assert_raises(ValueError, histogramdd, vals,
782
+ range=[[0.0, 1.0], [np.nan, 0.75], [0.25, 0.5]])
783
+
784
+ def test_equal_edges(self):
785
+ """ Test that adjacent entries in an edge array can be equal """
786
+ x = np.array([0, 1, 2])
787
+ y = np.array([0, 1, 2])
788
+ x_edges = np.array([0, 2, 2])
789
+ y_edges = 1
790
+ hist, edges = histogramdd((x, y), bins=(x_edges, y_edges))
791
+
792
+ hist_expected = np.array([
793
+ [2.],
794
+ [1.], # x == 2 falls in the final bin
795
+ ])
796
+ assert_equal(hist, hist_expected)
797
+
798
+ def test_edge_dtype(self):
799
+ """ Test that if an edge array is input, its type is preserved """
800
+ x = np.array([0, 10, 20])
801
+ y = x / 10
802
+ x_edges = np.array([0, 5, 15, 20])
803
+ y_edges = x_edges / 10
804
+ hist, edges = histogramdd((x, y), bins=(x_edges, y_edges))
805
+
806
+ assert_equal(edges[0].dtype, x_edges.dtype)
807
+ assert_equal(edges[1].dtype, y_edges.dtype)
808
+
809
+ def test_large_integers(self):
810
+ big = 2**60 # Too large to represent with a full precision float
811
+
812
+ x = np.array([0], np.int64)
813
+ x_edges = np.array([-1, +1], np.int64)
814
+ y = big + x
815
+ y_edges = big + x_edges
816
+
817
+ hist, edges = histogramdd((x, y), bins=(x_edges, y_edges))
818
+
819
+ assert_equal(hist[0, 0], 1)
820
+
821
+ def test_density_non_uniform_2d(self):
822
+ # Defines the following grid:
823
+ #
824
+ # 0 2 8
825
+ # 0+-+-----+
826
+ # + | +
827
+ # + | +
828
+ # 6+-+-----+
829
+ # 8+-+-----+
830
+ x_edges = np.array([0, 2, 8])
831
+ y_edges = np.array([0, 6, 8])
832
+ relative_areas = np.array([
833
+ [3, 9],
834
+ [1, 3]])
835
+
836
+ # ensure the number of points in each region is proportional to its area
837
+ x = np.array([1] + [1] * 3 + [7] * 3 + [7] * 9)
838
+ y = np.array([7] + [1] * 3 + [7] * 3 + [1] * 9)
839
+
840
+ # sanity check that the above worked as intended
841
+ hist, edges = histogramdd((y, x), bins=(y_edges, x_edges))
842
+ assert_equal(hist, relative_areas)
843
+
844
+ # resulting histogram should be uniform, since counts and areas are proportional
845
+ hist, edges = histogramdd((y, x), bins=(y_edges, x_edges), density=True)
846
+ assert_equal(hist, 1 / (8 * 8))
847
+
848
+ def test_density_non_uniform_1d(self):
849
+ # compare to histogram to show the results are the same
850
+ v = np.arange(10)
851
+ bins = np.array([0, 1, 3, 6, 10])
852
+ hist, edges = histogram(v, bins, density=True)
853
+ hist_dd, edges_dd = histogramdd((v,), (bins,), density=True)
854
+ assert_equal(hist, hist_dd)
855
+ assert_equal(edges, edges_dd[0])