numpy 2.4.1__pp311-pypy311_pp73-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.
Files changed (1039) 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.pypy311-pp73-darwin.so +0 -0
  30. numpy/_core/_multiarray_umath.pypy311-pp73-darwin.so +0 -0
  31. numpy/_core/_operand_flag_tests.pypy311-pp73-darwin.so +0 -0
  32. numpy/_core/_rational_tests.pypy311-pp73-darwin.so +0 -0
  33. numpy/_core/_simd.pyi +35 -0
  34. numpy/_core/_simd.pypy311-pp73-darwin.so +0 -0
  35. numpy/_core/_string_helpers.py +100 -0
  36. numpy/_core/_string_helpers.pyi +12 -0
  37. numpy/_core/_struct_ufunc_tests.pypy311-pp73-darwin.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.pyi +47 -0
  43. numpy/_core/_umath_tests.pypy311-pp73-darwin.so +0 -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 +377 -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 +1523 -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/distutils/__init__.py +64 -0
  278. numpy/distutils/__init__.pyi +4 -0
  279. numpy/distutils/__pycache__/conv_template.pypy311.pyc +0 -0
  280. numpy/distutils/_shell_utils.py +87 -0
  281. numpy/distutils/armccompiler.py +26 -0
  282. numpy/distutils/ccompiler.py +826 -0
  283. numpy/distutils/ccompiler_opt.py +2668 -0
  284. numpy/distutils/checks/cpu_asimd.c +27 -0
  285. numpy/distutils/checks/cpu_asimddp.c +16 -0
  286. numpy/distutils/checks/cpu_asimdfhm.c +19 -0
  287. numpy/distutils/checks/cpu_asimdhp.c +15 -0
  288. numpy/distutils/checks/cpu_avx.c +20 -0
  289. numpy/distutils/checks/cpu_avx2.c +20 -0
  290. numpy/distutils/checks/cpu_avx512_clx.c +22 -0
  291. numpy/distutils/checks/cpu_avx512_cnl.c +24 -0
  292. numpy/distutils/checks/cpu_avx512_icl.c +26 -0
  293. numpy/distutils/checks/cpu_avx512_knl.c +25 -0
  294. numpy/distutils/checks/cpu_avx512_knm.c +30 -0
  295. numpy/distutils/checks/cpu_avx512_skx.c +26 -0
  296. numpy/distutils/checks/cpu_avx512_spr.c +26 -0
  297. numpy/distutils/checks/cpu_avx512cd.c +20 -0
  298. numpy/distutils/checks/cpu_avx512f.c +20 -0
  299. numpy/distutils/checks/cpu_f16c.c +22 -0
  300. numpy/distutils/checks/cpu_fma3.c +22 -0
  301. numpy/distutils/checks/cpu_fma4.c +13 -0
  302. numpy/distutils/checks/cpu_lsx.c +11 -0
  303. numpy/distutils/checks/cpu_neon.c +19 -0
  304. numpy/distutils/checks/cpu_neon_fp16.c +11 -0
  305. numpy/distutils/checks/cpu_neon_vfpv4.c +21 -0
  306. numpy/distutils/checks/cpu_popcnt.c +32 -0
  307. numpy/distutils/checks/cpu_rvv.c +13 -0
  308. numpy/distutils/checks/cpu_sse.c +20 -0
  309. numpy/distutils/checks/cpu_sse2.c +20 -0
  310. numpy/distutils/checks/cpu_sse3.c +20 -0
  311. numpy/distutils/checks/cpu_sse41.c +20 -0
  312. numpy/distutils/checks/cpu_sse42.c +20 -0
  313. numpy/distutils/checks/cpu_ssse3.c +20 -0
  314. numpy/distutils/checks/cpu_sve.c +14 -0
  315. numpy/distutils/checks/cpu_vsx.c +21 -0
  316. numpy/distutils/checks/cpu_vsx2.c +13 -0
  317. numpy/distutils/checks/cpu_vsx3.c +13 -0
  318. numpy/distutils/checks/cpu_vsx4.c +14 -0
  319. numpy/distutils/checks/cpu_vx.c +16 -0
  320. numpy/distutils/checks/cpu_vxe.c +25 -0
  321. numpy/distutils/checks/cpu_vxe2.c +21 -0
  322. numpy/distutils/checks/cpu_xop.c +12 -0
  323. numpy/distutils/checks/extra_avx512bw_mask.c +18 -0
  324. numpy/distutils/checks/extra_avx512dq_mask.c +16 -0
  325. numpy/distutils/checks/extra_avx512f_reduce.c +41 -0
  326. numpy/distutils/checks/extra_vsx3_half_double.c +12 -0
  327. numpy/distutils/checks/extra_vsx4_mma.c +21 -0
  328. numpy/distutils/checks/extra_vsx_asm.c +36 -0
  329. numpy/distutils/checks/test_flags.c +1 -0
  330. numpy/distutils/command/__init__.py +41 -0
  331. numpy/distutils/command/autodist.py +148 -0
  332. numpy/distutils/command/bdist_rpm.py +22 -0
  333. numpy/distutils/command/build.py +62 -0
  334. numpy/distutils/command/build_clib.py +469 -0
  335. numpy/distutils/command/build_ext.py +752 -0
  336. numpy/distutils/command/build_py.py +31 -0
  337. numpy/distutils/command/build_scripts.py +49 -0
  338. numpy/distutils/command/build_src.py +773 -0
  339. numpy/distutils/command/config.py +516 -0
  340. numpy/distutils/command/config_compiler.py +126 -0
  341. numpy/distutils/command/develop.py +15 -0
  342. numpy/distutils/command/egg_info.py +25 -0
  343. numpy/distutils/command/install.py +79 -0
  344. numpy/distutils/command/install_clib.py +40 -0
  345. numpy/distutils/command/install_data.py +24 -0
  346. numpy/distutils/command/install_headers.py +25 -0
  347. numpy/distutils/command/sdist.py +27 -0
  348. numpy/distutils/conv_template.py +329 -0
  349. numpy/distutils/core.py +215 -0
  350. numpy/distutils/cpuinfo.py +683 -0
  351. numpy/distutils/exec_command.py +315 -0
  352. numpy/distutils/extension.py +101 -0
  353. numpy/distutils/fcompiler/__init__.py +1035 -0
  354. numpy/distutils/fcompiler/absoft.py +158 -0
  355. numpy/distutils/fcompiler/arm.py +71 -0
  356. numpy/distutils/fcompiler/compaq.py +120 -0
  357. numpy/distutils/fcompiler/environment.py +88 -0
  358. numpy/distutils/fcompiler/fujitsu.py +46 -0
  359. numpy/distutils/fcompiler/g95.py +42 -0
  360. numpy/distutils/fcompiler/gnu.py +555 -0
  361. numpy/distutils/fcompiler/hpux.py +41 -0
  362. numpy/distutils/fcompiler/ibm.py +97 -0
  363. numpy/distutils/fcompiler/intel.py +211 -0
  364. numpy/distutils/fcompiler/lahey.py +45 -0
  365. numpy/distutils/fcompiler/mips.py +54 -0
  366. numpy/distutils/fcompiler/nag.py +87 -0
  367. numpy/distutils/fcompiler/none.py +28 -0
  368. numpy/distutils/fcompiler/nv.py +53 -0
  369. numpy/distutils/fcompiler/pathf95.py +33 -0
  370. numpy/distutils/fcompiler/pg.py +128 -0
  371. numpy/distutils/fcompiler/sun.py +51 -0
  372. numpy/distutils/fcompiler/vast.py +52 -0
  373. numpy/distutils/from_template.py +261 -0
  374. numpy/distutils/fujitsuccompiler.py +28 -0
  375. numpy/distutils/intelccompiler.py +106 -0
  376. numpy/distutils/lib2def.py +116 -0
  377. numpy/distutils/line_endings.py +77 -0
  378. numpy/distutils/log.py +111 -0
  379. numpy/distutils/mingw/gfortran_vs2003_hack.c +6 -0
  380. numpy/distutils/mingw32ccompiler.py +620 -0
  381. numpy/distutils/misc_util.py +2484 -0
  382. numpy/distutils/msvc9compiler.py +63 -0
  383. numpy/distutils/msvccompiler.py +76 -0
  384. numpy/distutils/npy_pkg_config.py +441 -0
  385. numpy/distutils/numpy_distribution.py +17 -0
  386. numpy/distutils/pathccompiler.py +21 -0
  387. numpy/distutils/system_info.py +3267 -0
  388. numpy/distutils/tests/__init__.py +0 -0
  389. numpy/distutils/tests/test_build_ext.py +74 -0
  390. numpy/distutils/tests/test_ccompiler_opt.py +808 -0
  391. numpy/distutils/tests/test_ccompiler_opt_conf.py +176 -0
  392. numpy/distutils/tests/test_exec_command.py +217 -0
  393. numpy/distutils/tests/test_fcompiler.py +43 -0
  394. numpy/distutils/tests/test_fcompiler_gnu.py +55 -0
  395. numpy/distutils/tests/test_fcompiler_intel.py +30 -0
  396. numpy/distutils/tests/test_fcompiler_nagfor.py +22 -0
  397. numpy/distutils/tests/test_from_template.py +44 -0
  398. numpy/distutils/tests/test_log.py +34 -0
  399. numpy/distutils/tests/test_mingw32ccompiler.py +47 -0
  400. numpy/distutils/tests/test_misc_util.py +88 -0
  401. numpy/distutils/tests/test_npy_pkg_config.py +84 -0
  402. numpy/distutils/tests/test_shell_utils.py +79 -0
  403. numpy/distutils/tests/test_system_info.py +334 -0
  404. numpy/distutils/tests/utilities.py +90 -0
  405. numpy/distutils/unixccompiler.py +141 -0
  406. numpy/doc/ufuncs.py +138 -0
  407. numpy/dtypes.py +41 -0
  408. numpy/dtypes.pyi +630 -0
  409. numpy/exceptions.py +246 -0
  410. numpy/exceptions.pyi +27 -0
  411. numpy/f2py/__init__.py +86 -0
  412. numpy/f2py/__init__.pyi +5 -0
  413. numpy/f2py/__main__.py +5 -0
  414. numpy/f2py/__version__.py +1 -0
  415. numpy/f2py/__version__.pyi +1 -0
  416. numpy/f2py/_backends/__init__.py +9 -0
  417. numpy/f2py/_backends/__init__.pyi +5 -0
  418. numpy/f2py/_backends/_backend.py +44 -0
  419. numpy/f2py/_backends/_backend.pyi +46 -0
  420. numpy/f2py/_backends/_distutils.py +76 -0
  421. numpy/f2py/_backends/_distutils.pyi +13 -0
  422. numpy/f2py/_backends/_meson.py +244 -0
  423. numpy/f2py/_backends/_meson.pyi +62 -0
  424. numpy/f2py/_backends/meson.build.template +58 -0
  425. numpy/f2py/_isocbind.py +62 -0
  426. numpy/f2py/_isocbind.pyi +13 -0
  427. numpy/f2py/_src_pyf.py +247 -0
  428. numpy/f2py/_src_pyf.pyi +28 -0
  429. numpy/f2py/auxfuncs.py +1004 -0
  430. numpy/f2py/auxfuncs.pyi +262 -0
  431. numpy/f2py/capi_maps.py +811 -0
  432. numpy/f2py/capi_maps.pyi +33 -0
  433. numpy/f2py/cb_rules.py +665 -0
  434. numpy/f2py/cb_rules.pyi +17 -0
  435. numpy/f2py/cfuncs.py +1563 -0
  436. numpy/f2py/cfuncs.pyi +31 -0
  437. numpy/f2py/common_rules.py +143 -0
  438. numpy/f2py/common_rules.pyi +9 -0
  439. numpy/f2py/crackfortran.py +3725 -0
  440. numpy/f2py/crackfortran.pyi +266 -0
  441. numpy/f2py/diagnose.py +149 -0
  442. numpy/f2py/diagnose.pyi +1 -0
  443. numpy/f2py/f2py2e.py +788 -0
  444. numpy/f2py/f2py2e.pyi +74 -0
  445. numpy/f2py/f90mod_rules.py +269 -0
  446. numpy/f2py/f90mod_rules.pyi +16 -0
  447. numpy/f2py/func2subr.py +329 -0
  448. numpy/f2py/func2subr.pyi +7 -0
  449. numpy/f2py/rules.py +1629 -0
  450. numpy/f2py/rules.pyi +41 -0
  451. numpy/f2py/setup.cfg +3 -0
  452. numpy/f2py/src/fortranobject.c +1436 -0
  453. numpy/f2py/src/fortranobject.h +173 -0
  454. numpy/f2py/symbolic.py +1518 -0
  455. numpy/f2py/symbolic.pyi +219 -0
  456. numpy/f2py/tests/__init__.py +16 -0
  457. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  458. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  459. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  460. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  461. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  462. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  463. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  464. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  465. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  466. numpy/f2py/tests/src/callback/foo.f +62 -0
  467. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  468. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  469. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  470. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  471. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  472. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  473. numpy/f2py/tests/src/cli/hi77.f +3 -0
  474. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  475. numpy/f2py/tests/src/common/block.f +11 -0
  476. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  477. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  478. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  479. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  480. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  481. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  482. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  483. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  484. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  485. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  486. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  487. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  488. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  489. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  490. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  491. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  492. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  493. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  494. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  495. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  496. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  497. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  498. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  499. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  500. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  501. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  502. numpy/f2py/tests/src/mixed/foo.f +5 -0
  503. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  504. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  505. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  506. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  507. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  508. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  509. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  510. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  511. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  512. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  513. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  514. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  515. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  516. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  517. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  518. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  519. numpy/f2py/tests/src/regression/AB.inc +1 -0
  520. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  521. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  522. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  523. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  524. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  525. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  526. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  527. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  528. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  529. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  530. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  531. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  532. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  533. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  534. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  535. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  536. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  537. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  538. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  539. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  540. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  541. numpy/f2py/tests/src/routines/subrout.f +4 -0
  542. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  543. numpy/f2py/tests/src/size/foo.f90 +44 -0
  544. numpy/f2py/tests/src/string/char.f90 +29 -0
  545. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  546. numpy/f2py/tests/src/string/gh24008.f +8 -0
  547. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  548. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  549. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  550. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  551. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  552. numpy/f2py/tests/src/string/string.f +12 -0
  553. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  554. numpy/f2py/tests/test_abstract_interface.py +26 -0
  555. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  556. numpy/f2py/tests/test_assumed_shape.py +50 -0
  557. numpy/f2py/tests/test_block_docstring.py +20 -0
  558. numpy/f2py/tests/test_callback.py +263 -0
  559. numpy/f2py/tests/test_character.py +641 -0
  560. numpy/f2py/tests/test_common.py +23 -0
  561. numpy/f2py/tests/test_crackfortran.py +421 -0
  562. numpy/f2py/tests/test_data.py +71 -0
  563. numpy/f2py/tests/test_docs.py +66 -0
  564. numpy/f2py/tests/test_f2cmap.py +17 -0
  565. numpy/f2py/tests/test_f2py2e.py +983 -0
  566. numpy/f2py/tests/test_isoc.py +56 -0
  567. numpy/f2py/tests/test_kind.py +52 -0
  568. numpy/f2py/tests/test_mixed.py +35 -0
  569. numpy/f2py/tests/test_modules.py +83 -0
  570. numpy/f2py/tests/test_parameter.py +129 -0
  571. numpy/f2py/tests/test_pyf_src.py +43 -0
  572. numpy/f2py/tests/test_quoted_character.py +18 -0
  573. numpy/f2py/tests/test_regression.py +187 -0
  574. numpy/f2py/tests/test_return_character.py +48 -0
  575. numpy/f2py/tests/test_return_complex.py +67 -0
  576. numpy/f2py/tests/test_return_integer.py +55 -0
  577. numpy/f2py/tests/test_return_logical.py +65 -0
  578. numpy/f2py/tests/test_return_real.py +109 -0
  579. numpy/f2py/tests/test_routines.py +29 -0
  580. numpy/f2py/tests/test_semicolon_split.py +75 -0
  581. numpy/f2py/tests/test_size.py +45 -0
  582. numpy/f2py/tests/test_string.py +100 -0
  583. numpy/f2py/tests/test_symbolic.py +500 -0
  584. numpy/f2py/tests/test_value_attrspec.py +15 -0
  585. numpy/f2py/tests/util.py +442 -0
  586. numpy/f2py/use_rules.py +99 -0
  587. numpy/f2py/use_rules.pyi +9 -0
  588. numpy/fft/__init__.py +213 -0
  589. numpy/fft/__init__.pyi +38 -0
  590. numpy/fft/_helper.py +235 -0
  591. numpy/fft/_helper.pyi +44 -0
  592. numpy/fft/_pocketfft.py +1693 -0
  593. numpy/fft/_pocketfft.pyi +137 -0
  594. numpy/fft/_pocketfft_umath.pypy311-pp73-darwin.so +0 -0
  595. numpy/fft/tests/__init__.py +0 -0
  596. numpy/fft/tests/test_helper.py +167 -0
  597. numpy/fft/tests/test_pocketfft.py +589 -0
  598. numpy/lib/__init__.py +97 -0
  599. numpy/lib/__init__.pyi +52 -0
  600. numpy/lib/_array_utils_impl.py +62 -0
  601. numpy/lib/_array_utils_impl.pyi +10 -0
  602. numpy/lib/_arraypad_impl.py +926 -0
  603. numpy/lib/_arraypad_impl.pyi +88 -0
  604. numpy/lib/_arraysetops_impl.py +1158 -0
  605. numpy/lib/_arraysetops_impl.pyi +462 -0
  606. numpy/lib/_arrayterator_impl.py +224 -0
  607. numpy/lib/_arrayterator_impl.pyi +45 -0
  608. numpy/lib/_datasource.py +700 -0
  609. numpy/lib/_datasource.pyi +30 -0
  610. numpy/lib/_format_impl.py +1036 -0
  611. numpy/lib/_format_impl.pyi +56 -0
  612. numpy/lib/_function_base_impl.py +5760 -0
  613. numpy/lib/_function_base_impl.pyi +2324 -0
  614. numpy/lib/_histograms_impl.py +1085 -0
  615. numpy/lib/_histograms_impl.pyi +40 -0
  616. numpy/lib/_index_tricks_impl.py +1048 -0
  617. numpy/lib/_index_tricks_impl.pyi +267 -0
  618. numpy/lib/_iotools.py +900 -0
  619. numpy/lib/_iotools.pyi +116 -0
  620. numpy/lib/_nanfunctions_impl.py +2006 -0
  621. numpy/lib/_nanfunctions_impl.pyi +48 -0
  622. numpy/lib/_npyio_impl.py +2583 -0
  623. numpy/lib/_npyio_impl.pyi +299 -0
  624. numpy/lib/_polynomial_impl.py +1465 -0
  625. numpy/lib/_polynomial_impl.pyi +338 -0
  626. numpy/lib/_scimath_impl.py +642 -0
  627. numpy/lib/_scimath_impl.pyi +93 -0
  628. numpy/lib/_shape_base_impl.py +1289 -0
  629. numpy/lib/_shape_base_impl.pyi +236 -0
  630. numpy/lib/_stride_tricks_impl.py +582 -0
  631. numpy/lib/_stride_tricks_impl.pyi +73 -0
  632. numpy/lib/_twodim_base_impl.py +1201 -0
  633. numpy/lib/_twodim_base_impl.pyi +408 -0
  634. numpy/lib/_type_check_impl.py +710 -0
  635. numpy/lib/_type_check_impl.pyi +348 -0
  636. numpy/lib/_ufunclike_impl.py +199 -0
  637. numpy/lib/_ufunclike_impl.pyi +60 -0
  638. numpy/lib/_user_array_impl.py +310 -0
  639. numpy/lib/_user_array_impl.pyi +226 -0
  640. numpy/lib/_utils_impl.py +784 -0
  641. numpy/lib/_utils_impl.pyi +22 -0
  642. numpy/lib/_version.py +153 -0
  643. numpy/lib/_version.pyi +17 -0
  644. numpy/lib/array_utils.py +7 -0
  645. numpy/lib/array_utils.pyi +6 -0
  646. numpy/lib/format.py +24 -0
  647. numpy/lib/format.pyi +24 -0
  648. numpy/lib/introspect.py +94 -0
  649. numpy/lib/introspect.pyi +3 -0
  650. numpy/lib/mixins.py +180 -0
  651. numpy/lib/mixins.pyi +78 -0
  652. numpy/lib/npyio.py +1 -0
  653. numpy/lib/npyio.pyi +5 -0
  654. numpy/lib/recfunctions.py +1681 -0
  655. numpy/lib/recfunctions.pyi +444 -0
  656. numpy/lib/scimath.py +13 -0
  657. numpy/lib/scimath.pyi +12 -0
  658. numpy/lib/stride_tricks.py +1 -0
  659. numpy/lib/stride_tricks.pyi +4 -0
  660. numpy/lib/tests/__init__.py +0 -0
  661. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  662. numpy/lib/tests/data/py2-objarr.npy +0 -0
  663. numpy/lib/tests/data/py2-objarr.npz +0 -0
  664. numpy/lib/tests/data/py3-objarr.npy +0 -0
  665. numpy/lib/tests/data/py3-objarr.npz +0 -0
  666. numpy/lib/tests/data/python3.npy +0 -0
  667. numpy/lib/tests/data/win64python2.npy +0 -0
  668. numpy/lib/tests/test__datasource.py +328 -0
  669. numpy/lib/tests/test__iotools.py +358 -0
  670. numpy/lib/tests/test__version.py +64 -0
  671. numpy/lib/tests/test_array_utils.py +32 -0
  672. numpy/lib/tests/test_arraypad.py +1427 -0
  673. numpy/lib/tests/test_arraysetops.py +1302 -0
  674. numpy/lib/tests/test_arrayterator.py +45 -0
  675. numpy/lib/tests/test_format.py +1054 -0
  676. numpy/lib/tests/test_function_base.py +4750 -0
  677. numpy/lib/tests/test_histograms.py +855 -0
  678. numpy/lib/tests/test_index_tricks.py +693 -0
  679. numpy/lib/tests/test_io.py +2857 -0
  680. numpy/lib/tests/test_loadtxt.py +1099 -0
  681. numpy/lib/tests/test_mixins.py +215 -0
  682. numpy/lib/tests/test_nanfunctions.py +1438 -0
  683. numpy/lib/tests/test_packbits.py +376 -0
  684. numpy/lib/tests/test_polynomial.py +325 -0
  685. numpy/lib/tests/test_recfunctions.py +1042 -0
  686. numpy/lib/tests/test_regression.py +231 -0
  687. numpy/lib/tests/test_shape_base.py +813 -0
  688. numpy/lib/tests/test_stride_tricks.py +655 -0
  689. numpy/lib/tests/test_twodim_base.py +559 -0
  690. numpy/lib/tests/test_type_check.py +473 -0
  691. numpy/lib/tests/test_ufunclike.py +97 -0
  692. numpy/lib/tests/test_utils.py +80 -0
  693. numpy/lib/user_array.py +1 -0
  694. numpy/lib/user_array.pyi +1 -0
  695. numpy/linalg/__init__.py +95 -0
  696. numpy/linalg/__init__.pyi +71 -0
  697. numpy/linalg/_linalg.py +3657 -0
  698. numpy/linalg/_linalg.pyi +548 -0
  699. numpy/linalg/_umath_linalg.pyi +60 -0
  700. numpy/linalg/_umath_linalg.pypy311-pp73-darwin.so +0 -0
  701. numpy/linalg/lapack_lite.pyi +143 -0
  702. numpy/linalg/lapack_lite.pypy311-pp73-darwin.so +0 -0
  703. numpy/linalg/tests/__init__.py +0 -0
  704. numpy/linalg/tests/test_deprecations.py +21 -0
  705. numpy/linalg/tests/test_linalg.py +2442 -0
  706. numpy/linalg/tests/test_regression.py +182 -0
  707. numpy/ma/API_CHANGES.txt +135 -0
  708. numpy/ma/LICENSE +24 -0
  709. numpy/ma/README.rst +236 -0
  710. numpy/ma/__init__.py +53 -0
  711. numpy/ma/__init__.pyi +458 -0
  712. numpy/ma/core.py +8929 -0
  713. numpy/ma/core.pyi +3720 -0
  714. numpy/ma/extras.py +2266 -0
  715. numpy/ma/extras.pyi +297 -0
  716. numpy/ma/mrecords.py +762 -0
  717. numpy/ma/mrecords.pyi +96 -0
  718. numpy/ma/tests/__init__.py +0 -0
  719. numpy/ma/tests/test_arrayobject.py +40 -0
  720. numpy/ma/tests/test_core.py +6008 -0
  721. numpy/ma/tests/test_deprecations.py +65 -0
  722. numpy/ma/tests/test_extras.py +1945 -0
  723. numpy/ma/tests/test_mrecords.py +495 -0
  724. numpy/ma/tests/test_old_ma.py +939 -0
  725. numpy/ma/tests/test_regression.py +83 -0
  726. numpy/ma/tests/test_subclassing.py +469 -0
  727. numpy/ma/testutils.py +294 -0
  728. numpy/ma/testutils.pyi +69 -0
  729. numpy/matlib.py +380 -0
  730. numpy/matlib.pyi +580 -0
  731. numpy/matrixlib/__init__.py +12 -0
  732. numpy/matrixlib/__init__.pyi +3 -0
  733. numpy/matrixlib/defmatrix.py +1119 -0
  734. numpy/matrixlib/defmatrix.pyi +218 -0
  735. numpy/matrixlib/tests/__init__.py +0 -0
  736. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  737. numpy/matrixlib/tests/test_interaction.py +360 -0
  738. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  739. numpy/matrixlib/tests/test_matrix_linalg.py +110 -0
  740. numpy/matrixlib/tests/test_multiarray.py +17 -0
  741. numpy/matrixlib/tests/test_numeric.py +18 -0
  742. numpy/matrixlib/tests/test_regression.py +31 -0
  743. numpy/polynomial/__init__.py +187 -0
  744. numpy/polynomial/__init__.pyi +31 -0
  745. numpy/polynomial/_polybase.py +1191 -0
  746. numpy/polynomial/_polybase.pyi +262 -0
  747. numpy/polynomial/_polytypes.pyi +501 -0
  748. numpy/polynomial/chebyshev.py +2001 -0
  749. numpy/polynomial/chebyshev.pyi +180 -0
  750. numpy/polynomial/hermite.py +1738 -0
  751. numpy/polynomial/hermite.pyi +106 -0
  752. numpy/polynomial/hermite_e.py +1640 -0
  753. numpy/polynomial/hermite_e.pyi +106 -0
  754. numpy/polynomial/laguerre.py +1673 -0
  755. numpy/polynomial/laguerre.pyi +100 -0
  756. numpy/polynomial/legendre.py +1603 -0
  757. numpy/polynomial/legendre.pyi +100 -0
  758. numpy/polynomial/polynomial.py +1625 -0
  759. numpy/polynomial/polynomial.pyi +109 -0
  760. numpy/polynomial/polyutils.py +759 -0
  761. numpy/polynomial/polyutils.pyi +307 -0
  762. numpy/polynomial/tests/__init__.py +0 -0
  763. numpy/polynomial/tests/test_chebyshev.py +618 -0
  764. numpy/polynomial/tests/test_classes.py +613 -0
  765. numpy/polynomial/tests/test_hermite.py +553 -0
  766. numpy/polynomial/tests/test_hermite_e.py +554 -0
  767. numpy/polynomial/tests/test_laguerre.py +535 -0
  768. numpy/polynomial/tests/test_legendre.py +566 -0
  769. numpy/polynomial/tests/test_polynomial.py +691 -0
  770. numpy/polynomial/tests/test_polyutils.py +123 -0
  771. numpy/polynomial/tests/test_printing.py +557 -0
  772. numpy/polynomial/tests/test_symbol.py +217 -0
  773. numpy/py.typed +0 -0
  774. numpy/random/LICENSE.md +71 -0
  775. numpy/random/__init__.pxd +14 -0
  776. numpy/random/__init__.py +213 -0
  777. numpy/random/__init__.pyi +124 -0
  778. numpy/random/_bounded_integers.pxd +29 -0
  779. numpy/random/_bounded_integers.pyi +1 -0
  780. numpy/random/_bounded_integers.pypy311-pp73-darwin.so +0 -0
  781. numpy/random/_common.pxd +110 -0
  782. numpy/random/_common.pyi +16 -0
  783. numpy/random/_common.pypy311-pp73-darwin.so +0 -0
  784. numpy/random/_examples/cffi/extending.py +44 -0
  785. numpy/random/_examples/cffi/parse.py +53 -0
  786. numpy/random/_examples/cython/extending.pyx +77 -0
  787. numpy/random/_examples/cython/extending_distributions.pyx +117 -0
  788. numpy/random/_examples/cython/meson.build +53 -0
  789. numpy/random/_examples/numba/extending.py +86 -0
  790. numpy/random/_examples/numba/extending_distributions.py +67 -0
  791. numpy/random/_generator.pyi +862 -0
  792. numpy/random/_generator.pypy311-pp73-darwin.so +0 -0
  793. numpy/random/_mt19937.pyi +27 -0
  794. numpy/random/_mt19937.pypy311-pp73-darwin.so +0 -0
  795. numpy/random/_pcg64.pyi +41 -0
  796. numpy/random/_pcg64.pypy311-pp73-darwin.so +0 -0
  797. numpy/random/_philox.pyi +36 -0
  798. numpy/random/_philox.pypy311-pp73-darwin.so +0 -0
  799. numpy/random/_pickle.py +88 -0
  800. numpy/random/_pickle.pyi +43 -0
  801. numpy/random/_sfc64.pyi +25 -0
  802. numpy/random/_sfc64.pypy311-pp73-darwin.so +0 -0
  803. numpy/random/bit_generator.pxd +40 -0
  804. numpy/random/bit_generator.pyi +123 -0
  805. numpy/random/bit_generator.pypy311-pp73-darwin.so +0 -0
  806. numpy/random/c_distributions.pxd +119 -0
  807. numpy/random/lib/libnpyrandom.a +0 -0
  808. numpy/random/mtrand.pyi +759 -0
  809. numpy/random/mtrand.pypy311-pp73-darwin.so +0 -0
  810. numpy/random/tests/__init__.py +0 -0
  811. numpy/random/tests/data/__init__.py +0 -0
  812. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  813. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  814. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  815. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  816. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  817. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  818. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  819. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  820. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  821. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  822. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  823. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  824. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  825. numpy/random/tests/test_direct.py +595 -0
  826. numpy/random/tests/test_extending.py +131 -0
  827. numpy/random/tests/test_generator_mt19937.py +2825 -0
  828. numpy/random/tests/test_generator_mt19937_regressions.py +221 -0
  829. numpy/random/tests/test_random.py +1724 -0
  830. numpy/random/tests/test_randomstate.py +2099 -0
  831. numpy/random/tests/test_randomstate_regression.py +213 -0
  832. numpy/random/tests/test_regression.py +175 -0
  833. numpy/random/tests/test_seed_sequence.py +79 -0
  834. numpy/random/tests/test_smoke.py +882 -0
  835. numpy/rec/__init__.py +2 -0
  836. numpy/rec/__init__.pyi +23 -0
  837. numpy/strings/__init__.py +2 -0
  838. numpy/strings/__init__.pyi +97 -0
  839. numpy/testing/__init__.py +22 -0
  840. numpy/testing/__init__.pyi +107 -0
  841. numpy/testing/_private/__init__.py +0 -0
  842. numpy/testing/_private/__init__.pyi +0 -0
  843. numpy/testing/_private/extbuild.py +250 -0
  844. numpy/testing/_private/extbuild.pyi +25 -0
  845. numpy/testing/_private/utils.py +2830 -0
  846. numpy/testing/_private/utils.pyi +505 -0
  847. numpy/testing/overrides.py +84 -0
  848. numpy/testing/overrides.pyi +10 -0
  849. numpy/testing/print_coercion_tables.py +207 -0
  850. numpy/testing/print_coercion_tables.pyi +26 -0
  851. numpy/testing/tests/__init__.py +0 -0
  852. numpy/testing/tests/test_utils.py +2123 -0
  853. numpy/tests/__init__.py +0 -0
  854. numpy/tests/test__all__.py +10 -0
  855. numpy/tests/test_configtool.py +51 -0
  856. numpy/tests/test_ctypeslib.py +383 -0
  857. numpy/tests/test_lazyloading.py +42 -0
  858. numpy/tests/test_matlib.py +59 -0
  859. numpy/tests/test_numpy_config.py +47 -0
  860. numpy/tests/test_numpy_version.py +54 -0
  861. numpy/tests/test_public_api.py +807 -0
  862. numpy/tests/test_reloading.py +76 -0
  863. numpy/tests/test_scripts.py +48 -0
  864. numpy/tests/test_warnings.py +79 -0
  865. numpy/typing/__init__.py +233 -0
  866. numpy/typing/__init__.pyi +3 -0
  867. numpy/typing/mypy_plugin.py +200 -0
  868. numpy/typing/tests/__init__.py +0 -0
  869. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  870. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  871. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  872. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  873. numpy/typing/tests/data/fail/arrayprint.pyi +15 -0
  874. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  875. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  876. numpy/typing/tests/data/fail/char.pyi +63 -0
  877. numpy/typing/tests/data/fail/chararray.pyi +61 -0
  878. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  879. numpy/typing/tests/data/fail/constants.pyi +3 -0
  880. numpy/typing/tests/data/fail/datasource.pyi +16 -0
  881. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  882. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  883. numpy/typing/tests/data/fail/flatiter.pyi +38 -0
  884. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  885. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  886. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  887. numpy/typing/tests/data/fail/lib_function_base.pyi +60 -0
  888. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  889. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  890. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  891. numpy/typing/tests/data/fail/linalg.pyi +52 -0
  892. numpy/typing/tests/data/fail/ma.pyi +155 -0
  893. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  894. numpy/typing/tests/data/fail/modules.pyi +17 -0
  895. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  896. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  897. numpy/typing/tests/data/fail/ndarray_misc.pyi +49 -0
  898. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  899. numpy/typing/tests/data/fail/nested_sequence.pyi +17 -0
  900. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  901. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  902. numpy/typing/tests/data/fail/random.pyi +62 -0
  903. numpy/typing/tests/data/fail/rec.pyi +17 -0
  904. numpy/typing/tests/data/fail/scalars.pyi +86 -0
  905. numpy/typing/tests/data/fail/shape.pyi +7 -0
  906. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  907. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  908. numpy/typing/tests/data/fail/strings.pyi +52 -0
  909. numpy/typing/tests/data/fail/testing.pyi +28 -0
  910. numpy/typing/tests/data/fail/twodim_base.pyi +39 -0
  911. numpy/typing/tests/data/fail/type_check.pyi +12 -0
  912. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  913. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  914. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  915. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  916. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  917. numpy/typing/tests/data/mypy.ini +8 -0
  918. numpy/typing/tests/data/pass/arithmetic.py +614 -0
  919. numpy/typing/tests/data/pass/array_constructors.py +138 -0
  920. numpy/typing/tests/data/pass/array_like.py +43 -0
  921. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  922. numpy/typing/tests/data/pass/arrayterator.py +28 -0
  923. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  924. numpy/typing/tests/data/pass/comparisons.py +316 -0
  925. numpy/typing/tests/data/pass/dtype.py +57 -0
  926. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  927. numpy/typing/tests/data/pass/flatiter.py +26 -0
  928. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  929. numpy/typing/tests/data/pass/index_tricks.py +62 -0
  930. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  931. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  932. numpy/typing/tests/data/pass/lib_version.py +18 -0
  933. numpy/typing/tests/data/pass/literal.py +52 -0
  934. numpy/typing/tests/data/pass/ma.py +199 -0
  935. numpy/typing/tests/data/pass/mod.py +149 -0
  936. numpy/typing/tests/data/pass/modules.py +45 -0
  937. numpy/typing/tests/data/pass/multiarray.py +77 -0
  938. numpy/typing/tests/data/pass/ndarray_conversion.py +81 -0
  939. numpy/typing/tests/data/pass/ndarray_misc.py +199 -0
  940. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  941. numpy/typing/tests/data/pass/nditer.py +4 -0
  942. numpy/typing/tests/data/pass/numeric.py +90 -0
  943. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  944. numpy/typing/tests/data/pass/random.py +1498 -0
  945. numpy/typing/tests/data/pass/recfunctions.py +164 -0
  946. numpy/typing/tests/data/pass/scalars.py +249 -0
  947. numpy/typing/tests/data/pass/shape.py +19 -0
  948. numpy/typing/tests/data/pass/simple.py +170 -0
  949. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  950. numpy/typing/tests/data/pass/ufunclike.py +52 -0
  951. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  952. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  953. numpy/typing/tests/data/reveal/arithmetic.pyi +719 -0
  954. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  955. numpy/typing/tests/data/reveal/array_constructors.pyi +277 -0
  956. numpy/typing/tests/data/reveal/arraypad.pyi +27 -0
  957. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  958. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  959. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  960. numpy/typing/tests/data/reveal/bitwise_ops.pyi +166 -0
  961. numpy/typing/tests/data/reveal/char.pyi +225 -0
  962. numpy/typing/tests/data/reveal/chararray.pyi +138 -0
  963. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  964. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  965. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  966. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  967. numpy/typing/tests/data/reveal/dtype.pyi +132 -0
  968. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  969. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  970. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  971. numpy/typing/tests/data/reveal/flatiter.pyi +86 -0
  972. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  973. numpy/typing/tests/data/reveal/getlimits.pyi +53 -0
  974. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  975. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  976. numpy/typing/tests/data/reveal/lib_function_base.pyi +409 -0
  977. numpy/typing/tests/data/reveal/lib_polynomial.pyi +147 -0
  978. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  979. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  980. numpy/typing/tests/data/reveal/linalg.pyi +154 -0
  981. numpy/typing/tests/data/reveal/ma.pyi +1098 -0
  982. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  983. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  984. numpy/typing/tests/data/reveal/mod.pyi +178 -0
  985. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  986. numpy/typing/tests/data/reveal/multiarray.pyi +197 -0
  987. numpy/typing/tests/data/reveal/nbit_base_example.pyi +20 -0
  988. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +82 -0
  989. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +83 -0
  990. numpy/typing/tests/data/reveal/ndarray_misc.pyi +246 -0
  991. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +47 -0
  992. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  993. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  994. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  995. numpy/typing/tests/data/reveal/numeric.pyi +170 -0
  996. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  997. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +217 -0
  998. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +218 -0
  999. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  1000. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  1001. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  1002. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  1003. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  1004. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  1005. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  1006. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  1007. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  1008. numpy/typing/tests/data/reveal/twodim_base.pyi +225 -0
  1009. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  1010. numpy/typing/tests/data/reveal/ufunc_config.pyi +29 -0
  1011. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  1012. numpy/typing/tests/data/reveal/ufuncs.pyi +142 -0
  1013. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  1014. numpy/typing/tests/test_isfile.py +38 -0
  1015. numpy/typing/tests/test_runtime.py +110 -0
  1016. numpy/typing/tests/test_typing.py +205 -0
  1017. numpy/version.py +11 -0
  1018. numpy/version.pyi +9 -0
  1019. numpy-2.4.1.dist-info/METADATA +139 -0
  1020. numpy-2.4.1.dist-info/RECORD +1039 -0
  1021. numpy-2.4.1.dist-info/WHEEL +6 -0
  1022. numpy-2.4.1.dist-info/entry_points.txt +13 -0
  1023. numpy-2.4.1.dist-info/licenses/LICENSE.txt +935 -0
  1024. numpy-2.4.1.dist-info/licenses/numpy/_core/include/numpy/libdivide/LICENSE.txt +21 -0
  1025. numpy-2.4.1.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING +14 -0
  1026. numpy-2.4.1.dist-info/licenses/numpy/_core/src/highway/LICENSE +371 -0
  1027. numpy-2.4.1.dist-info/licenses/numpy/_core/src/multiarray/dragon4_LICENSE.txt +27 -0
  1028. numpy-2.4.1.dist-info/licenses/numpy/_core/src/npysort/x86-simd-sort/LICENSE.md +28 -0
  1029. numpy-2.4.1.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE +30 -0
  1030. numpy-2.4.1.dist-info/licenses/numpy/fft/pocketfft/LICENSE.md +25 -0
  1031. numpy-2.4.1.dist-info/licenses/numpy/linalg/lapack_lite/LICENSE.txt +48 -0
  1032. numpy-2.4.1.dist-info/licenses/numpy/ma/LICENSE +24 -0
  1033. numpy-2.4.1.dist-info/licenses/numpy/random/LICENSE.md +71 -0
  1034. numpy-2.4.1.dist-info/licenses/numpy/random/src/distributions/LICENSE.md +61 -0
  1035. numpy-2.4.1.dist-info/licenses/numpy/random/src/mt19937/LICENSE.md +61 -0
  1036. numpy-2.4.1.dist-info/licenses/numpy/random/src/pcg64/LICENSE.md +22 -0
  1037. numpy-2.4.1.dist-info/licenses/numpy/random/src/philox/LICENSE.md +31 -0
  1038. numpy-2.4.1.dist-info/licenses/numpy/random/src/sfc64/LICENSE.md +27 -0
  1039. numpy-2.4.1.dist-info/licenses/numpy/random/src/splitmix64/LICENSE.md +9 -0
@@ -0,0 +1,1289 @@
1
+ import functools
2
+ import warnings
3
+
4
+ import numpy as np
5
+ import numpy._core.numeric as _nx
6
+ from numpy._core import atleast_3d, overrides, vstack
7
+ from numpy._core._multiarray_umath import _array_converter
8
+ from numpy._core.fromnumeric import reshape, transpose
9
+ from numpy._core.multiarray import normalize_axis_index
10
+ from numpy._core.numeric import (
11
+ array,
12
+ asanyarray,
13
+ asarray,
14
+ normalize_axis_tuple,
15
+ zeros,
16
+ zeros_like,
17
+ )
18
+ from numpy._core.overrides import set_module
19
+ from numpy._core.shape_base import _arrays_for_stack_dispatcher
20
+ from numpy.lib._index_tricks_impl import ndindex
21
+ from numpy.matrixlib.defmatrix import matrix # this raises all the right alarm bells
22
+
23
+ __all__ = [
24
+ 'column_stack', 'row_stack', 'dstack', 'array_split', 'split',
25
+ 'hsplit', 'vsplit', 'dsplit', 'apply_over_axes', 'expand_dims',
26
+ 'apply_along_axis', 'kron', 'tile', 'take_along_axis',
27
+ 'put_along_axis'
28
+ ]
29
+
30
+
31
+ array_function_dispatch = functools.partial(
32
+ overrides.array_function_dispatch, module='numpy')
33
+
34
+
35
+ def _make_along_axis_idx(arr_shape, indices, axis):
36
+ # compute dimensions to iterate over
37
+ if not _nx.issubdtype(indices.dtype, _nx.integer):
38
+ raise IndexError('`indices` must be an integer array')
39
+ if len(arr_shape) != indices.ndim:
40
+ raise ValueError(
41
+ "`indices` and `arr` must have the same number of dimensions")
42
+ shape_ones = (1,) * indices.ndim
43
+ dest_dims = list(range(axis)) + [None] + list(range(axis + 1, indices.ndim))
44
+
45
+ # build a fancy index, consisting of orthogonal aranges, with the
46
+ # requested index inserted at the right location
47
+ fancy_index = []
48
+ for dim, n in zip(dest_dims, arr_shape):
49
+ if dim is None:
50
+ fancy_index.append(indices)
51
+ else:
52
+ ind_shape = shape_ones[:dim] + (-1,) + shape_ones[dim + 1:]
53
+ fancy_index.append(_nx.arange(n).reshape(ind_shape))
54
+
55
+ return tuple(fancy_index)
56
+
57
+
58
+ def _take_along_axis_dispatcher(arr, indices, axis=None):
59
+ return (arr, indices)
60
+
61
+
62
+ @array_function_dispatch(_take_along_axis_dispatcher)
63
+ def take_along_axis(arr, indices, axis=-1):
64
+ """
65
+ Take values from the input array by matching 1d index and data slices.
66
+
67
+ This iterates over matching 1d slices oriented along the specified axis in
68
+ the index and data arrays, and uses the former to look up values in the
69
+ latter. These slices can be different lengths.
70
+
71
+ Functions returning an index along an axis, like `argsort` and
72
+ `argpartition`, produce suitable indices for this function.
73
+
74
+ Parameters
75
+ ----------
76
+ arr : ndarray (Ni..., M, Nk...)
77
+ Source array
78
+ indices : ndarray (Ni..., J, Nk...)
79
+ Indices to take along each 1d slice of ``arr``. This must match the
80
+ dimension of ``arr``, but dimensions Ni and Nj only need to broadcast
81
+ against ``arr``.
82
+ axis : int or None, optional
83
+ The axis to take 1d slices along. If axis is None, the input array is
84
+ treated as if it had first been flattened to 1d, for consistency with
85
+ `sort` and `argsort`.
86
+
87
+ .. versionchanged:: 2.3
88
+ The default value is now ``-1``.
89
+
90
+ Returns
91
+ -------
92
+ out: ndarray (Ni..., J, Nk...)
93
+ The indexed result.
94
+
95
+ Notes
96
+ -----
97
+ This is equivalent to (but faster than) the following use of `ndindex` and
98
+ `s_`, which sets each of ``ii`` and ``kk`` to a tuple of indices::
99
+
100
+ Ni, M, Nk = a.shape[:axis], a.shape[axis], a.shape[axis+1:]
101
+ J = indices.shape[axis] # Need not equal M
102
+ out = np.empty(Ni + (J,) + Nk)
103
+
104
+ for ii in ndindex(Ni):
105
+ for kk in ndindex(Nk):
106
+ a_1d = a [ii + s_[:,] + kk]
107
+ indices_1d = indices[ii + s_[:,] + kk]
108
+ out_1d = out [ii + s_[:,] + kk]
109
+ for j in range(J):
110
+ out_1d[j] = a_1d[indices_1d[j]]
111
+
112
+ Equivalently, eliminating the inner loop, the last two lines would be::
113
+
114
+ out_1d[:] = a_1d[indices_1d]
115
+
116
+ See Also
117
+ --------
118
+ take : Take along an axis, using the same indices for every 1d slice
119
+ put_along_axis :
120
+ Put values into the destination array by matching 1d index and data slices
121
+
122
+ Examples
123
+ --------
124
+ >>> import numpy as np
125
+
126
+ For this sample array
127
+
128
+ >>> a = np.array([[10, 30, 20], [60, 40, 50]])
129
+
130
+ We can sort either by using sort directly, or argsort and this function
131
+
132
+ >>> np.sort(a, axis=1)
133
+ array([[10, 20, 30],
134
+ [40, 50, 60]])
135
+ >>> ai = np.argsort(a, axis=1)
136
+ >>> ai
137
+ array([[0, 2, 1],
138
+ [1, 2, 0]])
139
+ >>> np.take_along_axis(a, ai, axis=1)
140
+ array([[10, 20, 30],
141
+ [40, 50, 60]])
142
+
143
+ The same works for max and min, if you maintain the trivial dimension
144
+ with ``keepdims``:
145
+
146
+ >>> np.max(a, axis=1, keepdims=True)
147
+ array([[30],
148
+ [60]])
149
+ >>> ai = np.argmax(a, axis=1, keepdims=True)
150
+ >>> ai
151
+ array([[1],
152
+ [0]])
153
+ >>> np.take_along_axis(a, ai, axis=1)
154
+ array([[30],
155
+ [60]])
156
+
157
+ If we want to get the max and min at the same time, we can stack the
158
+ indices first
159
+
160
+ >>> ai_min = np.argmin(a, axis=1, keepdims=True)
161
+ >>> ai_max = np.argmax(a, axis=1, keepdims=True)
162
+ >>> ai = np.concatenate([ai_min, ai_max], axis=1)
163
+ >>> ai
164
+ array([[0, 1],
165
+ [1, 0]])
166
+ >>> np.take_along_axis(a, ai, axis=1)
167
+ array([[10, 30],
168
+ [40, 60]])
169
+ """
170
+ # normalize inputs
171
+ if axis is None:
172
+ if indices.ndim != 1:
173
+ raise ValueError(
174
+ 'when axis=None, `indices` must have a single dimension.')
175
+ arr = np.array(arr.flat)
176
+ axis = 0
177
+ else:
178
+ axis = normalize_axis_index(axis, arr.ndim)
179
+
180
+ # use the fancy index
181
+ return arr[_make_along_axis_idx(arr.shape, indices, axis)]
182
+
183
+
184
+ def _put_along_axis_dispatcher(arr, indices, values, axis):
185
+ return (arr, indices, values)
186
+
187
+
188
+ @array_function_dispatch(_put_along_axis_dispatcher)
189
+ def put_along_axis(arr, indices, values, axis):
190
+ """
191
+ Put values into the destination array by matching 1d index and data slices.
192
+
193
+ This iterates over matching 1d slices oriented along the specified axis in
194
+ the index and data arrays, and uses the former to place values into the
195
+ latter. These slices can be different lengths.
196
+
197
+ Functions returning an index along an axis, like `argsort` and
198
+ `argpartition`, produce suitable indices for this function.
199
+
200
+ Parameters
201
+ ----------
202
+ arr : ndarray (Ni..., M, Nk...)
203
+ Destination array.
204
+ indices : ndarray (Ni..., J, Nk...)
205
+ Indices to change along each 1d slice of `arr`. This must match the
206
+ dimension of arr, but dimensions in Ni and Nj may be 1 to broadcast
207
+ against `arr`.
208
+ values : array_like (Ni..., J, Nk...)
209
+ values to insert at those indices. Its shape and dimension are
210
+ broadcast to match that of `indices`.
211
+ axis : int
212
+ The axis to take 1d slices along. If axis is None, the destination
213
+ array is treated as if a flattened 1d view had been created of it.
214
+
215
+ Notes
216
+ -----
217
+ This is equivalent to (but faster than) the following use of `ndindex` and
218
+ `s_`, which sets each of ``ii`` and ``kk`` to a tuple of indices::
219
+
220
+ Ni, M, Nk = a.shape[:axis], a.shape[axis], a.shape[axis+1:]
221
+ J = indices.shape[axis] # Need not equal M
222
+
223
+ for ii in ndindex(Ni):
224
+ for kk in ndindex(Nk):
225
+ a_1d = a [ii + s_[:,] + kk]
226
+ indices_1d = indices[ii + s_[:,] + kk]
227
+ values_1d = values [ii + s_[:,] + kk]
228
+ for j in range(J):
229
+ a_1d[indices_1d[j]] = values_1d[j]
230
+
231
+ Equivalently, eliminating the inner loop, the last two lines would be::
232
+
233
+ a_1d[indices_1d] = values_1d
234
+
235
+ See Also
236
+ --------
237
+ take_along_axis :
238
+ Take values from the input array by matching 1d index and data slices
239
+
240
+ Examples
241
+ --------
242
+ >>> import numpy as np
243
+
244
+ For this sample array
245
+
246
+ >>> a = np.array([[10, 30, 20], [60, 40, 50]])
247
+
248
+ We can replace the maximum values with:
249
+
250
+ >>> ai = np.argmax(a, axis=1, keepdims=True)
251
+ >>> ai
252
+ array([[1],
253
+ [0]])
254
+ >>> np.put_along_axis(a, ai, 99, axis=1)
255
+ >>> a
256
+ array([[10, 99, 20],
257
+ [99, 40, 50]])
258
+
259
+ """
260
+ # normalize inputs
261
+ if axis is None:
262
+ if indices.ndim != 1:
263
+ raise ValueError(
264
+ 'when axis=None, `indices` must have a single dimension.')
265
+ arr = np.array(arr.flat)
266
+ axis = 0
267
+ else:
268
+ axis = normalize_axis_index(axis, arr.ndim)
269
+
270
+ # use the fancy index
271
+ arr[_make_along_axis_idx(arr.shape, indices, axis)] = values
272
+
273
+
274
+ def _apply_along_axis_dispatcher(func1d, axis, arr, *args, **kwargs):
275
+ return (arr,)
276
+
277
+
278
+ @array_function_dispatch(_apply_along_axis_dispatcher)
279
+ def apply_along_axis(func1d, axis, arr, *args, **kwargs):
280
+ """
281
+ Apply a function to 1-D slices along the given axis.
282
+
283
+ Execute `func1d(a, *args, **kwargs)` where `func1d` operates on 1-D arrays
284
+ and `a` is a 1-D slice of `arr` along `axis`.
285
+
286
+ This is equivalent to (but faster than) the following use of `ndindex` and
287
+ `s_`, which sets each of ``ii``, ``jj``, and ``kk`` to a tuple of indices::
288
+
289
+ Ni, Nk = a.shape[:axis], a.shape[axis+1:]
290
+ for ii in ndindex(Ni):
291
+ for kk in ndindex(Nk):
292
+ f = func1d(arr[ii + s_[:,] + kk])
293
+ Nj = f.shape
294
+ for jj in ndindex(Nj):
295
+ out[ii + jj + kk] = f[jj]
296
+
297
+ Equivalently, eliminating the inner loop, this can be expressed as::
298
+
299
+ Ni, Nk = a.shape[:axis], a.shape[axis+1:]
300
+ for ii in ndindex(Ni):
301
+ for kk in ndindex(Nk):
302
+ out[ii + s_[...,] + kk] = func1d(arr[ii + s_[:,] + kk])
303
+
304
+ Parameters
305
+ ----------
306
+ func1d : function (M,) -> (Nj...)
307
+ This function should accept 1-D arrays. It is applied to 1-D
308
+ slices of `arr` along the specified axis.
309
+ axis : integer
310
+ Axis along which `arr` is sliced.
311
+ arr : ndarray (Ni..., M, Nk...)
312
+ Input array.
313
+ args : any
314
+ Additional arguments to `func1d`.
315
+ kwargs : any
316
+ Additional named arguments to `func1d`.
317
+
318
+ Returns
319
+ -------
320
+ out : ndarray (Ni..., Nj..., Nk...)
321
+ The output array. The shape of `out` is identical to the shape of
322
+ `arr`, except along the `axis` dimension. This axis is removed, and
323
+ replaced with new dimensions equal to the shape of the return value
324
+ of `func1d`. So if `func1d` returns a scalar `out` will have one
325
+ fewer dimensions than `arr`.
326
+
327
+ See Also
328
+ --------
329
+ apply_over_axes : Apply a function repeatedly over multiple axes.
330
+
331
+ Examples
332
+ --------
333
+ >>> import numpy as np
334
+ >>> def my_func(a):
335
+ ... \"\"\"Average first and last element of a 1-D array\"\"\"
336
+ ... return (a[0] + a[-1]) * 0.5
337
+ >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
338
+ >>> np.apply_along_axis(my_func, 0, b)
339
+ array([4., 5., 6.])
340
+ >>> np.apply_along_axis(my_func, 1, b)
341
+ array([2., 5., 8.])
342
+
343
+ For a function that returns a 1D array, the number of dimensions in
344
+ `outarr` is the same as `arr`.
345
+
346
+ >>> b = np.array([[8,1,7], [4,3,9], [5,2,6]])
347
+ >>> np.apply_along_axis(sorted, 1, b)
348
+ array([[1, 7, 8],
349
+ [3, 4, 9],
350
+ [2, 5, 6]])
351
+
352
+ For a function that returns a higher dimensional array, those dimensions
353
+ are inserted in place of the `axis` dimension.
354
+
355
+ >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
356
+ >>> np.apply_along_axis(np.diag, -1, b)
357
+ array([[[1, 0, 0],
358
+ [0, 2, 0],
359
+ [0, 0, 3]],
360
+ [[4, 0, 0],
361
+ [0, 5, 0],
362
+ [0, 0, 6]],
363
+ [[7, 0, 0],
364
+ [0, 8, 0],
365
+ [0, 0, 9]]])
366
+ """
367
+ # handle negative axes
368
+ conv = _array_converter(arr)
369
+ arr = conv[0]
370
+
371
+ nd = arr.ndim
372
+ axis = normalize_axis_index(axis, nd)
373
+
374
+ # arr, with the iteration axis at the end
375
+ in_dims = list(range(nd))
376
+ inarr_view = transpose(arr, in_dims[:axis] + in_dims[axis + 1:] + [axis])
377
+
378
+ # compute indices for the iteration axes, and append a trailing ellipsis to
379
+ # prevent 0d arrays decaying to scalars, which fixes gh-8642
380
+ inds = ndindex(inarr_view.shape[:-1])
381
+ inds = (ind + (Ellipsis,) for ind in inds)
382
+
383
+ # invoke the function on the first item
384
+ try:
385
+ ind0 = next(inds)
386
+ except StopIteration:
387
+ raise ValueError(
388
+ 'Cannot apply_along_axis when any iteration dimensions are 0'
389
+ ) from None
390
+ res = asanyarray(func1d(inarr_view[ind0], *args, **kwargs))
391
+
392
+ # build a buffer for storing evaluations of func1d.
393
+ # remove the requested axis, and add the new ones on the end.
394
+ # laid out so that each write is contiguous.
395
+ # for a tuple index inds, buff[inds] = func1d(inarr_view[inds])
396
+ if not isinstance(res, matrix):
397
+ buff = zeros_like(res, shape=inarr_view.shape[:-1] + res.shape)
398
+ else:
399
+ # Matrices are nasty with reshaping, so do not preserve them here.
400
+ buff = zeros(inarr_view.shape[:-1] + res.shape, dtype=res.dtype)
401
+
402
+ # permutation of axes such that out = buff.transpose(buff_permute)
403
+ buff_dims = list(range(buff.ndim))
404
+ buff_permute = (
405
+ buff_dims[0 : axis] +
406
+ buff_dims[buff.ndim - res.ndim : buff.ndim] +
407
+ buff_dims[axis : buff.ndim - res.ndim]
408
+ )
409
+
410
+ # save the first result, then compute and save all remaining results
411
+ buff[ind0] = res
412
+ for ind in inds:
413
+ buff[ind] = asanyarray(func1d(inarr_view[ind], *args, **kwargs))
414
+
415
+ res = transpose(buff, buff_permute)
416
+ return conv.wrap(res)
417
+
418
+
419
+ def _apply_over_axes_dispatcher(func, a, axes):
420
+ return (a,)
421
+
422
+
423
+ @array_function_dispatch(_apply_over_axes_dispatcher)
424
+ def apply_over_axes(func, a, axes):
425
+ """
426
+ Apply a function repeatedly over multiple axes.
427
+
428
+ `func` is called as `res = func(a, axis)`, where `axis` is the first
429
+ element of `axes`. The result `res` of the function call must have
430
+ either the same dimensions as `a` or one less dimension. If `res`
431
+ has one less dimension than `a`, a dimension is inserted before
432
+ `axis`. The call to `func` is then repeated for each axis in `axes`,
433
+ with `res` as the first argument.
434
+
435
+ Parameters
436
+ ----------
437
+ func : function
438
+ This function must take two arguments, `func(a, axis)`.
439
+ a : array_like
440
+ Input array.
441
+ axes : array_like
442
+ Axes over which `func` is applied; the elements must be integers.
443
+
444
+ Returns
445
+ -------
446
+ apply_over_axis : ndarray
447
+ The output array. The number of dimensions is the same as `a`,
448
+ but the shape can be different. This depends on whether `func`
449
+ changes the shape of its output with respect to its input.
450
+
451
+ See Also
452
+ --------
453
+ apply_along_axis :
454
+ Apply a function to 1-D slices of an array along the given axis.
455
+
456
+ Notes
457
+ -----
458
+ This function is equivalent to tuple axis arguments to reorderable ufuncs
459
+ with keepdims=True. Tuple axis arguments to ufuncs have been available since
460
+ version 1.7.0.
461
+
462
+ Examples
463
+ --------
464
+ >>> import numpy as np
465
+ >>> a = np.arange(24).reshape(2,3,4)
466
+ >>> a
467
+ array([[[ 0, 1, 2, 3],
468
+ [ 4, 5, 6, 7],
469
+ [ 8, 9, 10, 11]],
470
+ [[12, 13, 14, 15],
471
+ [16, 17, 18, 19],
472
+ [20, 21, 22, 23]]])
473
+
474
+ Sum over axes 0 and 2. The result has same number of dimensions
475
+ as the original array:
476
+
477
+ >>> np.apply_over_axes(np.sum, a, [0,2])
478
+ array([[[ 60],
479
+ [ 92],
480
+ [124]]])
481
+
482
+ Tuple axis arguments to ufuncs are equivalent:
483
+
484
+ >>> np.sum(a, axis=(0,2), keepdims=True)
485
+ array([[[ 60],
486
+ [ 92],
487
+ [124]]])
488
+
489
+ """
490
+ val = asarray(a)
491
+ N = a.ndim
492
+ if array(axes).ndim == 0:
493
+ axes = (axes,)
494
+ for axis in axes:
495
+ if axis < 0:
496
+ axis = N + axis
497
+ args = (val, axis)
498
+ res = func(*args)
499
+ if res.ndim == val.ndim:
500
+ val = res
501
+ else:
502
+ res = expand_dims(res, axis)
503
+ if res.ndim == val.ndim:
504
+ val = res
505
+ else:
506
+ raise ValueError("function is not returning "
507
+ "an array of the correct shape")
508
+ return val
509
+
510
+
511
+ def _expand_dims_dispatcher(a, axis):
512
+ return (a,)
513
+
514
+
515
+ @array_function_dispatch(_expand_dims_dispatcher)
516
+ def expand_dims(a, axis):
517
+ """
518
+ Expand the shape of an array.
519
+
520
+ Insert a new axis that will appear at the `axis` position in the expanded
521
+ array shape.
522
+
523
+ Parameters
524
+ ----------
525
+ a : array_like
526
+ Input array.
527
+ axis : int or tuple of ints
528
+ Position in the expanded axes where the new axis (or axes) is placed.
529
+
530
+ .. deprecated:: 1.13.0
531
+ Passing an axis where ``axis > a.ndim`` will be treated as
532
+ ``axis == a.ndim``, and passing ``axis < -a.ndim - 1`` will
533
+ be treated as ``axis == 0``. This behavior is deprecated.
534
+
535
+ Returns
536
+ -------
537
+ result : ndarray
538
+ View of `a` with the number of dimensions increased.
539
+
540
+ See Also
541
+ --------
542
+ squeeze : The inverse operation, removing singleton dimensions
543
+ reshape : Insert, remove, and combine dimensions, and resize existing ones
544
+ atleast_1d, atleast_2d, atleast_3d
545
+
546
+ Examples
547
+ --------
548
+ >>> import numpy as np
549
+ >>> x = np.array([1, 2])
550
+ >>> x.shape
551
+ (2,)
552
+
553
+ The following is equivalent to ``x[np.newaxis, :]`` or ``x[np.newaxis]``:
554
+
555
+ >>> y = np.expand_dims(x, axis=0)
556
+ >>> y
557
+ array([[1, 2]])
558
+ >>> y.shape
559
+ (1, 2)
560
+
561
+ The following is equivalent to ``x[:, np.newaxis]``:
562
+
563
+ >>> y = np.expand_dims(x, axis=1)
564
+ >>> y
565
+ array([[1],
566
+ [2]])
567
+ >>> y.shape
568
+ (2, 1)
569
+
570
+ ``axis`` may also be a tuple:
571
+
572
+ >>> y = np.expand_dims(x, axis=(0, 1))
573
+ >>> y
574
+ array([[[1, 2]]])
575
+
576
+ >>> y = np.expand_dims(x, axis=(2, 0))
577
+ >>> y
578
+ array([[[1],
579
+ [2]]])
580
+
581
+ Note that some examples may use ``None`` instead of ``np.newaxis``. These
582
+ are the same objects:
583
+
584
+ >>> np.newaxis is None
585
+ True
586
+
587
+ """
588
+ if isinstance(a, matrix):
589
+ a = asarray(a)
590
+ else:
591
+ a = asanyarray(a)
592
+
593
+ if not isinstance(axis, (tuple, list)):
594
+ axis = (axis,)
595
+
596
+ out_ndim = len(axis) + a.ndim
597
+ axis = normalize_axis_tuple(axis, out_ndim)
598
+
599
+ shape_it = iter(a.shape)
600
+ shape = [1 if ax in axis else next(shape_it) for ax in range(out_ndim)]
601
+
602
+ return a.reshape(shape)
603
+
604
+
605
+ # NOTE: Remove once deprecation period passes
606
+ @set_module("numpy")
607
+ def row_stack(tup, *, dtype=None, casting="same_kind"):
608
+ # Deprecated in NumPy 2.0, 2023-08-18
609
+ warnings.warn(
610
+ "`row_stack` alias is deprecated. "
611
+ "Use `np.vstack` directly.",
612
+ DeprecationWarning,
613
+ stacklevel=2
614
+ )
615
+ return vstack(tup, dtype=dtype, casting=casting)
616
+
617
+
618
+ row_stack.__doc__ = vstack.__doc__
619
+
620
+
621
+ def _column_stack_dispatcher(tup):
622
+ return _arrays_for_stack_dispatcher(tup)
623
+
624
+
625
+ @array_function_dispatch(_column_stack_dispatcher)
626
+ def column_stack(tup):
627
+ """
628
+ Stack 1-D arrays as columns into a 2-D array.
629
+
630
+ Take a sequence of 1-D arrays and stack them as columns
631
+ to make a single 2-D array. 2-D arrays are stacked as-is,
632
+ just like with `hstack`. 1-D arrays are turned into 2-D columns
633
+ first.
634
+
635
+ Parameters
636
+ ----------
637
+ tup : sequence of 1-D or 2-D arrays.
638
+ Arrays to stack. All of them must have the same first dimension.
639
+
640
+ Returns
641
+ -------
642
+ stacked : 2-D array
643
+ The array formed by stacking the given arrays.
644
+
645
+ See Also
646
+ --------
647
+ stack, hstack, vstack, concatenate
648
+
649
+ Examples
650
+ --------
651
+ >>> import numpy as np
652
+ >>> a = np.array((1,2,3))
653
+ >>> b = np.array((4,5,6))
654
+ >>> np.column_stack((a,b))
655
+ array([[1, 4],
656
+ [2, 5],
657
+ [3, 6]])
658
+
659
+ """
660
+ arrays = []
661
+ for v in tup:
662
+ arr = asanyarray(v)
663
+ if arr.ndim < 2:
664
+ arr = array(arr, copy=None, subok=True, ndmin=2).T
665
+ arrays.append(arr)
666
+ return _nx.concatenate(arrays, 1)
667
+
668
+
669
+ def _dstack_dispatcher(tup):
670
+ return _arrays_for_stack_dispatcher(tup)
671
+
672
+
673
+ @array_function_dispatch(_dstack_dispatcher)
674
+ def dstack(tup):
675
+ """
676
+ Stack arrays in sequence depth wise (along third axis).
677
+
678
+ This is equivalent to concatenation along the third axis after 2-D arrays
679
+ of shape `(M,N)` have been reshaped to `(M,N,1)` and 1-D arrays of shape
680
+ `(N,)` have been reshaped to `(1,N,1)`. Rebuilds arrays divided by
681
+ `dsplit`.
682
+
683
+ This function makes most sense for arrays with up to 3 dimensions. For
684
+ instance, for pixel-data with a height (first axis), width (second axis),
685
+ and r/g/b channels (third axis). The functions `concatenate`, `stack` and
686
+ `block` provide more general stacking and concatenation operations.
687
+
688
+ Parameters
689
+ ----------
690
+ tup : sequence of arrays
691
+ The arrays must have the same shape along all but the third axis.
692
+ 1-D or 2-D arrays must have the same shape.
693
+
694
+ Returns
695
+ -------
696
+ stacked : ndarray
697
+ The array formed by stacking the given arrays, will be at least 3-D.
698
+
699
+ See Also
700
+ --------
701
+ concatenate : Join a sequence of arrays along an existing axis.
702
+ stack : Join a sequence of arrays along a new axis.
703
+ block : Assemble an nd-array from nested lists of blocks.
704
+ vstack : Stack arrays in sequence vertically (row wise).
705
+ hstack : Stack arrays in sequence horizontally (column wise).
706
+ column_stack : Stack 1-D arrays as columns into a 2-D array.
707
+ dsplit : Split array along third axis.
708
+
709
+ Examples
710
+ --------
711
+ >>> import numpy as np
712
+ >>> a = np.array((1,2,3))
713
+ >>> b = np.array((4,5,6))
714
+ >>> np.dstack((a,b))
715
+ array([[[1, 4],
716
+ [2, 5],
717
+ [3, 6]]])
718
+
719
+ >>> a = np.array([[1],[2],[3]])
720
+ >>> b = np.array([[4],[5],[6]])
721
+ >>> np.dstack((a,b))
722
+ array([[[1, 4]],
723
+ [[2, 5]],
724
+ [[3, 6]]])
725
+
726
+ """
727
+ arrs = atleast_3d(*tup)
728
+ if not isinstance(arrs, tuple):
729
+ arrs = (arrs,)
730
+ return _nx.concatenate(arrs, 2)
731
+
732
+
733
+ def _array_split_dispatcher(ary, indices_or_sections, axis=None):
734
+ return (ary, indices_or_sections)
735
+
736
+
737
+ @array_function_dispatch(_array_split_dispatcher)
738
+ def array_split(ary, indices_or_sections, axis=0):
739
+ """
740
+ Split an array into multiple sub-arrays.
741
+
742
+ Please refer to the ``split`` documentation. The only difference
743
+ between these functions is that ``array_split`` allows
744
+ `indices_or_sections` to be an integer that does *not* equally
745
+ divide the axis. For an array of length l that should be split
746
+ into n sections, it returns l % n sub-arrays of size l//n + 1
747
+ and the rest of size l//n.
748
+
749
+ See Also
750
+ --------
751
+ split : Split array into multiple sub-arrays of equal size.
752
+
753
+ Examples
754
+ --------
755
+ >>> import numpy as np
756
+ >>> x = np.arange(8.0)
757
+ >>> np.array_split(x, 3)
758
+ [array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7.])]
759
+
760
+ >>> x = np.arange(9)
761
+ >>> np.array_split(x, 4)
762
+ [array([0, 1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
763
+
764
+ """
765
+ try:
766
+ Ntotal = ary.shape[axis]
767
+ except AttributeError:
768
+ Ntotal = len(ary)
769
+ try:
770
+ # handle array case.
771
+ Nsections = len(indices_or_sections) + 1
772
+ div_points = [0] + list(indices_or_sections) + [Ntotal]
773
+ except TypeError:
774
+ # indices_or_sections is a scalar, not an array.
775
+ Nsections = int(indices_or_sections)
776
+ if Nsections <= 0:
777
+ raise ValueError('number sections must be larger than 0.') from None
778
+ Neach_section, extras = divmod(Ntotal, Nsections)
779
+ section_sizes = ([0] +
780
+ extras * [Neach_section + 1] +
781
+ (Nsections - extras) * [Neach_section])
782
+ div_points = _nx.array(section_sizes, dtype=_nx.intp).cumsum()
783
+
784
+ sub_arys = []
785
+ sary = _nx.swapaxes(ary, axis, 0)
786
+ for i in range(Nsections):
787
+ st = div_points[i]
788
+ end = div_points[i + 1]
789
+ sub_arys.append(_nx.swapaxes(sary[st:end], axis, 0))
790
+
791
+ return sub_arys
792
+
793
+
794
+ def _split_dispatcher(ary, indices_or_sections, axis=None):
795
+ return (ary, indices_or_sections)
796
+
797
+
798
+ @array_function_dispatch(_split_dispatcher)
799
+ def split(ary, indices_or_sections, axis=0):
800
+ """
801
+ Split an array into multiple sub-arrays as views into `ary`.
802
+
803
+ Parameters
804
+ ----------
805
+ ary : ndarray
806
+ Array to be divided into sub-arrays.
807
+ indices_or_sections : int or 1-D array
808
+ If `indices_or_sections` is an integer, N, the array will be divided
809
+ into N equal arrays along `axis`. If such a split is not possible,
810
+ an error is raised.
811
+
812
+ If `indices_or_sections` is a 1-D array of sorted integers, the entries
813
+ indicate where along `axis` the array is split. For example,
814
+ ``[2, 3]`` would, for ``axis=0``, result in
815
+
816
+ - ary[:2]
817
+ - ary[2:3]
818
+ - ary[3:]
819
+
820
+ If an index exceeds the dimension of the array along `axis`,
821
+ an empty sub-array is returned correspondingly.
822
+ axis : int, optional
823
+ The axis along which to split, default is 0.
824
+
825
+ Returns
826
+ -------
827
+ sub-arrays : list of ndarrays
828
+ A list of sub-arrays as views into `ary`.
829
+
830
+ Raises
831
+ ------
832
+ ValueError
833
+ If `indices_or_sections` is given as an integer, but
834
+ a split does not result in equal division.
835
+
836
+ See Also
837
+ --------
838
+ array_split : Split an array into multiple sub-arrays of equal or
839
+ near-equal size. Does not raise an exception if
840
+ an equal division cannot be made.
841
+ hsplit : Split array into multiple sub-arrays horizontally (column-wise).
842
+ vsplit : Split array into multiple sub-arrays vertically (row wise).
843
+ dsplit : Split array into multiple sub-arrays along the 3rd axis (depth).
844
+ concatenate : Join a sequence of arrays along an existing axis.
845
+ stack : Join a sequence of arrays along a new axis.
846
+ hstack : Stack arrays in sequence horizontally (column wise).
847
+ vstack : Stack arrays in sequence vertically (row wise).
848
+ dstack : Stack arrays in sequence depth wise (along third dimension).
849
+
850
+ Examples
851
+ --------
852
+ >>> import numpy as np
853
+ >>> x = np.arange(9.0)
854
+ >>> np.split(x, 3)
855
+ [array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7., 8.])]
856
+
857
+ >>> x = np.arange(8.0)
858
+ >>> np.split(x, [3, 5, 6, 10])
859
+ [array([0., 1., 2.]),
860
+ array([3., 4.]),
861
+ array([5.]),
862
+ array([6., 7.]),
863
+ array([], dtype=float64)]
864
+
865
+ """
866
+ try:
867
+ len(indices_or_sections)
868
+ except TypeError:
869
+ sections = indices_or_sections
870
+ N = ary.shape[axis]
871
+ if N % sections:
872
+ raise ValueError(
873
+ 'array split does not result in an equal division') from None
874
+ return array_split(ary, indices_or_sections, axis)
875
+
876
+
877
+ def _hvdsplit_dispatcher(ary, indices_or_sections):
878
+ return (ary, indices_or_sections)
879
+
880
+
881
+ @array_function_dispatch(_hvdsplit_dispatcher)
882
+ def hsplit(ary, indices_or_sections):
883
+ """
884
+ Split an array into multiple sub-arrays horizontally (column-wise).
885
+
886
+ Please refer to the `split` documentation. `hsplit` is equivalent
887
+ to `split` with ``axis=1``, the array is always split along the second
888
+ axis except for 1-D arrays, where it is split at ``axis=0``.
889
+
890
+ See Also
891
+ --------
892
+ split : Split an array into multiple sub-arrays of equal size.
893
+
894
+ Examples
895
+ --------
896
+ >>> import numpy as np
897
+ >>> x = np.arange(16.0).reshape(4, 4)
898
+ >>> x
899
+ array([[ 0., 1., 2., 3.],
900
+ [ 4., 5., 6., 7.],
901
+ [ 8., 9., 10., 11.],
902
+ [12., 13., 14., 15.]])
903
+ >>> np.hsplit(x, 2)
904
+ [array([[ 0., 1.],
905
+ [ 4., 5.],
906
+ [ 8., 9.],
907
+ [12., 13.]]),
908
+ array([[ 2., 3.],
909
+ [ 6., 7.],
910
+ [10., 11.],
911
+ [14., 15.]])]
912
+ >>> np.hsplit(x, np.array([3, 6]))
913
+ [array([[ 0., 1., 2.],
914
+ [ 4., 5., 6.],
915
+ [ 8., 9., 10.],
916
+ [12., 13., 14.]]),
917
+ array([[ 3.],
918
+ [ 7.],
919
+ [11.],
920
+ [15.]]),
921
+ array([], shape=(4, 0), dtype=float64)]
922
+
923
+ With a higher dimensional array the split is still along the second axis.
924
+
925
+ >>> x = np.arange(8.0).reshape(2, 2, 2)
926
+ >>> x
927
+ array([[[0., 1.],
928
+ [2., 3.]],
929
+ [[4., 5.],
930
+ [6., 7.]]])
931
+ >>> np.hsplit(x, 2)
932
+ [array([[[0., 1.]],
933
+ [[4., 5.]]]),
934
+ array([[[2., 3.]],
935
+ [[6., 7.]]])]
936
+
937
+ With a 1-D array, the split is along axis 0.
938
+
939
+ >>> x = np.array([0, 1, 2, 3, 4, 5])
940
+ >>> np.hsplit(x, 2)
941
+ [array([0, 1, 2]), array([3, 4, 5])]
942
+
943
+ """
944
+ if _nx.ndim(ary) == 0:
945
+ raise ValueError('hsplit only works on arrays of 1 or more dimensions')
946
+ if ary.ndim > 1:
947
+ return split(ary, indices_or_sections, 1)
948
+ else:
949
+ return split(ary, indices_or_sections, 0)
950
+
951
+
952
+ @array_function_dispatch(_hvdsplit_dispatcher)
953
+ def vsplit(ary, indices_or_sections):
954
+ """
955
+ Split an array into multiple sub-arrays vertically (row-wise).
956
+
957
+ Please refer to the ``split`` documentation. ``vsplit`` is equivalent
958
+ to ``split`` with `axis=0` (default), the array is always split along the
959
+ first axis regardless of the array dimension.
960
+
961
+ See Also
962
+ --------
963
+ split : Split an array into multiple sub-arrays of equal size.
964
+
965
+ Examples
966
+ --------
967
+ >>> import numpy as np
968
+ >>> x = np.arange(16.0).reshape(4, 4)
969
+ >>> x
970
+ array([[ 0., 1., 2., 3.],
971
+ [ 4., 5., 6., 7.],
972
+ [ 8., 9., 10., 11.],
973
+ [12., 13., 14., 15.]])
974
+ >>> np.vsplit(x, 2)
975
+ [array([[0., 1., 2., 3.],
976
+ [4., 5., 6., 7.]]),
977
+ array([[ 8., 9., 10., 11.],
978
+ [12., 13., 14., 15.]])]
979
+ >>> np.vsplit(x, np.array([3, 6]))
980
+ [array([[ 0., 1., 2., 3.],
981
+ [ 4., 5., 6., 7.],
982
+ [ 8., 9., 10., 11.]]),
983
+ array([[12., 13., 14., 15.]]),
984
+ array([], shape=(0, 4), dtype=float64)]
985
+
986
+ With a higher dimensional array the split is still along the first axis.
987
+
988
+ >>> x = np.arange(8.0).reshape(2, 2, 2)
989
+ >>> x
990
+ array([[[0., 1.],
991
+ [2., 3.]],
992
+ [[4., 5.],
993
+ [6., 7.]]])
994
+ >>> np.vsplit(x, 2)
995
+ [array([[[0., 1.],
996
+ [2., 3.]]]),
997
+ array([[[4., 5.],
998
+ [6., 7.]]])]
999
+
1000
+ """
1001
+ if _nx.ndim(ary) < 2:
1002
+ raise ValueError('vsplit only works on arrays of 2 or more dimensions')
1003
+ return split(ary, indices_or_sections, 0)
1004
+
1005
+
1006
+ @array_function_dispatch(_hvdsplit_dispatcher)
1007
+ def dsplit(ary, indices_or_sections):
1008
+ """
1009
+ Split array into multiple sub-arrays along the 3rd axis (depth).
1010
+
1011
+ Please refer to the `split` documentation. `dsplit` is equivalent
1012
+ to `split` with ``axis=2``, the array is always split along the third
1013
+ axis provided the array dimension is greater than or equal to 3.
1014
+
1015
+ See Also
1016
+ --------
1017
+ split : Split an array into multiple sub-arrays of equal size.
1018
+
1019
+ Examples
1020
+ --------
1021
+ >>> import numpy as np
1022
+ >>> x = np.arange(16.0).reshape(2, 2, 4)
1023
+ >>> x
1024
+ array([[[ 0., 1., 2., 3.],
1025
+ [ 4., 5., 6., 7.]],
1026
+ [[ 8., 9., 10., 11.],
1027
+ [12., 13., 14., 15.]]])
1028
+ >>> np.dsplit(x, 2)
1029
+ [array([[[ 0., 1.],
1030
+ [ 4., 5.]],
1031
+ [[ 8., 9.],
1032
+ [12., 13.]]]), array([[[ 2., 3.],
1033
+ [ 6., 7.]],
1034
+ [[10., 11.],
1035
+ [14., 15.]]])]
1036
+ >>> np.dsplit(x, np.array([3, 6]))
1037
+ [array([[[ 0., 1., 2.],
1038
+ [ 4., 5., 6.]],
1039
+ [[ 8., 9., 10.],
1040
+ [12., 13., 14.]]]),
1041
+ array([[[ 3.],
1042
+ [ 7.]],
1043
+ [[11.],
1044
+ [15.]]]),
1045
+ array([], shape=(2, 2, 0), dtype=float64)]
1046
+ """
1047
+ if _nx.ndim(ary) < 3:
1048
+ raise ValueError('dsplit only works on arrays of 3 or more dimensions')
1049
+ return split(ary, indices_or_sections, 2)
1050
+
1051
+
1052
+ def get_array_wrap(*args):
1053
+ """Find the wrapper for the array with the highest priority.
1054
+
1055
+ In case of ties, leftmost wins. If no wrapper is found, return None.
1056
+
1057
+ .. deprecated:: 2.0
1058
+ """
1059
+
1060
+ # Deprecated in NumPy 2.0, 2023-07-11
1061
+ warnings.warn(
1062
+ "`get_array_wrap` is deprecated. "
1063
+ "(deprecated in NumPy 2.0)",
1064
+ DeprecationWarning,
1065
+ stacklevel=2
1066
+ )
1067
+
1068
+ wrappers = sorted((getattr(x, '__array_priority__', 0), -i,
1069
+ x.__array_wrap__) for i, x in enumerate(args)
1070
+ if hasattr(x, '__array_wrap__'))
1071
+ if wrappers:
1072
+ return wrappers[-1][-1]
1073
+ return None
1074
+
1075
+
1076
+ def _kron_dispatcher(a, b):
1077
+ return (a, b)
1078
+
1079
+
1080
+ @array_function_dispatch(_kron_dispatcher)
1081
+ def kron(a, b):
1082
+ """
1083
+ Kronecker product of two arrays.
1084
+
1085
+ Computes the Kronecker product, a composite array made of blocks of the
1086
+ second array scaled by the first.
1087
+
1088
+ Parameters
1089
+ ----------
1090
+ a, b : array_like
1091
+
1092
+ Returns
1093
+ -------
1094
+ out : ndarray
1095
+
1096
+ See Also
1097
+ --------
1098
+ outer : The outer product
1099
+
1100
+ Notes
1101
+ -----
1102
+ The function assumes that the number of dimensions of `a` and `b`
1103
+ are the same, if necessary prepending the smallest with ones.
1104
+ If ``a.shape = (r0,r1,...,rN)`` and ``b.shape = (s0,s1,...,sN)``,
1105
+ the Kronecker product has shape ``(r0*s0, r1*s1, ..., rN*SN)``.
1106
+ The elements are products of elements from `a` and `b`, organized
1107
+ explicitly by::
1108
+
1109
+ kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
1110
+
1111
+ where::
1112
+
1113
+ kt = it * st + jt, t = 0,...,N
1114
+
1115
+ In the common 2-D case (N=1), the block structure can be visualized::
1116
+
1117
+ [[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
1118
+ [ ... ... ],
1119
+ [ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
1120
+
1121
+
1122
+ Examples
1123
+ --------
1124
+ >>> import numpy as np
1125
+ >>> np.kron([1,10,100], [5,6,7])
1126
+ array([ 5, 6, 7, ..., 500, 600, 700])
1127
+ >>> np.kron([5,6,7], [1,10,100])
1128
+ array([ 5, 50, 500, ..., 7, 70, 700])
1129
+
1130
+ >>> np.kron(np.eye(2), np.ones((2,2)))
1131
+ array([[1., 1., 0., 0.],
1132
+ [1., 1., 0., 0.],
1133
+ [0., 0., 1., 1.],
1134
+ [0., 0., 1., 1.]])
1135
+
1136
+ >>> a = np.arange(100).reshape((2,5,2,5))
1137
+ >>> b = np.arange(24).reshape((2,3,4))
1138
+ >>> c = np.kron(a,b)
1139
+ >>> c.shape
1140
+ (2, 10, 6, 20)
1141
+ >>> I = (1,3,0,2)
1142
+ >>> J = (0,2,1)
1143
+ >>> J1 = (0,) + J # extend to ndim=4
1144
+ >>> S1 = (1,) + b.shape
1145
+ >>> K = tuple(np.array(I) * np.array(S1) + np.array(J1))
1146
+ >>> c[K] == a[I]*b[J]
1147
+ True
1148
+
1149
+ """
1150
+ # Working:
1151
+ # 1. Equalise the shapes by prepending smaller array with 1s
1152
+ # 2. Expand shapes of both the arrays by adding new axes at
1153
+ # odd positions for 1st array and even positions for 2nd
1154
+ # 3. Compute the product of the modified array
1155
+ # 4. The inner most array elements now contain the rows of
1156
+ # the Kronecker product
1157
+ # 5. Reshape the result to kron's shape, which is same as
1158
+ # product of shapes of the two arrays.
1159
+ b = asanyarray(b)
1160
+ a = array(a, copy=None, subok=True, ndmin=b.ndim)
1161
+ is_any_mat = isinstance(a, matrix) or isinstance(b, matrix)
1162
+ ndb, nda = b.ndim, a.ndim
1163
+ nd = max(ndb, nda)
1164
+
1165
+ if (nda == 0 or ndb == 0):
1166
+ return _nx.multiply(a, b)
1167
+
1168
+ as_ = a.shape
1169
+ bs = b.shape
1170
+ if not a.flags.contiguous:
1171
+ a = reshape(a, as_)
1172
+ if not b.flags.contiguous:
1173
+ b = reshape(b, bs)
1174
+
1175
+ # Equalise the shapes by prepending smaller one with 1s
1176
+ as_ = (1,) * max(0, ndb - nda) + as_
1177
+ bs = (1,) * max(0, nda - ndb) + bs
1178
+
1179
+ # Insert empty dimensions
1180
+ a_arr = expand_dims(a, axis=tuple(range(ndb - nda)))
1181
+ b_arr = expand_dims(b, axis=tuple(range(nda - ndb)))
1182
+
1183
+ # Compute the product
1184
+ a_arr = expand_dims(a_arr, axis=tuple(range(1, nd * 2, 2)))
1185
+ b_arr = expand_dims(b_arr, axis=tuple(range(0, nd * 2, 2)))
1186
+ # In case of `mat`, convert result to `array`
1187
+ result = _nx.multiply(a_arr, b_arr, subok=(not is_any_mat))
1188
+
1189
+ # Reshape back
1190
+ result = result.reshape(_nx.multiply(as_, bs))
1191
+
1192
+ return result if not is_any_mat else matrix(result, copy=False)
1193
+
1194
+
1195
+ def _tile_dispatcher(A, reps):
1196
+ return (A, reps)
1197
+
1198
+
1199
+ @array_function_dispatch(_tile_dispatcher)
1200
+ def tile(A, reps):
1201
+ """
1202
+ Construct an array by repeating A the number of times given by reps.
1203
+
1204
+ If `reps` has length ``d``, the result will have dimension of
1205
+ ``max(d, A.ndim)``.
1206
+
1207
+ If ``A.ndim < d``, `A` is promoted to be d-dimensional by prepending new
1208
+ axes. So a shape (3,) array is promoted to (1, 3) for 2-D replication,
1209
+ or shape (1, 1, 3) for 3-D replication. If this is not the desired
1210
+ behavior, promote `A` to d-dimensions manually before calling this
1211
+ function.
1212
+
1213
+ If ``A.ndim > d``, `reps` is promoted to `A`.ndim by prepending 1's to it.
1214
+ Thus for an `A` of shape (2, 3, 4, 5), a `reps` of (2, 2) is treated as
1215
+ (1, 1, 2, 2).
1216
+
1217
+ Note : Although tile may be used for broadcasting, it is strongly
1218
+ recommended to use numpy's broadcasting operations and functions.
1219
+
1220
+ Parameters
1221
+ ----------
1222
+ A : array_like
1223
+ The input array.
1224
+ reps : array_like
1225
+ The number of repetitions of `A` along each axis.
1226
+
1227
+ Returns
1228
+ -------
1229
+ c : ndarray
1230
+ The tiled output array.
1231
+
1232
+ See Also
1233
+ --------
1234
+ repeat : Repeat elements of an array.
1235
+ broadcast_to : Broadcast an array to a new shape
1236
+
1237
+ Examples
1238
+ --------
1239
+ >>> import numpy as np
1240
+ >>> a = np.array([0, 1, 2])
1241
+ >>> np.tile(a, 2)
1242
+ array([0, 1, 2, 0, 1, 2])
1243
+ >>> np.tile(a, (2, 2))
1244
+ array([[0, 1, 2, 0, 1, 2],
1245
+ [0, 1, 2, 0, 1, 2]])
1246
+ >>> np.tile(a, (2, 1, 2))
1247
+ array([[[0, 1, 2, 0, 1, 2]],
1248
+ [[0, 1, 2, 0, 1, 2]]])
1249
+
1250
+ >>> b = np.array([[1, 2], [3, 4]])
1251
+ >>> np.tile(b, 2)
1252
+ array([[1, 2, 1, 2],
1253
+ [3, 4, 3, 4]])
1254
+ >>> np.tile(b, (2, 1))
1255
+ array([[1, 2],
1256
+ [3, 4],
1257
+ [1, 2],
1258
+ [3, 4]])
1259
+
1260
+ >>> c = np.array([1,2,3,4])
1261
+ >>> np.tile(c,(4,1))
1262
+ array([[1, 2, 3, 4],
1263
+ [1, 2, 3, 4],
1264
+ [1, 2, 3, 4],
1265
+ [1, 2, 3, 4]])
1266
+ """
1267
+ try:
1268
+ tup = tuple(reps)
1269
+ except TypeError:
1270
+ tup = (reps,)
1271
+ d = len(tup)
1272
+ if all(x == 1 for x in tup) and isinstance(A, _nx.ndarray):
1273
+ # Fixes the problem that the function does not make a copy if A is a
1274
+ # numpy array and the repetitions are 1 in all dimensions
1275
+ return _nx.array(A, copy=True, subok=True, ndmin=d)
1276
+ else:
1277
+ # Note that no copy of zero-sized arrays is made. However since they
1278
+ # have no data there is no risk of an inadvertent overwrite.
1279
+ c = _nx.array(A, copy=None, subok=True, ndmin=d)
1280
+ if (d < c.ndim):
1281
+ tup = (1,) * (c.ndim - d) + tup
1282
+ shape_out = tuple(s * t for s, t in zip(c.shape, tup))
1283
+ n = c.size
1284
+ if n > 0:
1285
+ for dim_in, nrep in zip(c.shape, tup):
1286
+ if nrep != 1:
1287
+ c = c.reshape(-1, n).repeat(nrep, 0)
1288
+ n //= dim_in
1289
+ return c.reshape(shape_out)