numpy 2.3.5__cp313-cp313-macosx_14_0_arm64.whl

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

Potentially problematic release.


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

Files changed (897) hide show
  1. numpy/__config__.py +170 -0
  2. numpy/__config__.pyi +102 -0
  3. numpy/__init__.cython-30.pxd +1241 -0
  4. numpy/__init__.pxd +1154 -0
  5. numpy/__init__.py +945 -0
  6. numpy/__init__.pyi +6147 -0
  7. numpy/_array_api_info.py +346 -0
  8. numpy/_array_api_info.pyi +207 -0
  9. numpy/_configtool.py +39 -0
  10. numpy/_configtool.pyi +1 -0
  11. numpy/_core/__init__.py +186 -0
  12. numpy/_core/__init__.pyi +2 -0
  13. numpy/_core/_add_newdocs.py +6967 -0
  14. numpy/_core/_add_newdocs.pyi +3 -0
  15. numpy/_core/_add_newdocs_scalars.py +390 -0
  16. numpy/_core/_add_newdocs_scalars.pyi +16 -0
  17. numpy/_core/_asarray.py +134 -0
  18. numpy/_core/_asarray.pyi +41 -0
  19. numpy/_core/_dtype.py +366 -0
  20. numpy/_core/_dtype.pyi +58 -0
  21. numpy/_core/_dtype_ctypes.py +120 -0
  22. numpy/_core/_dtype_ctypes.pyi +83 -0
  23. numpy/_core/_exceptions.py +162 -0
  24. numpy/_core/_exceptions.pyi +55 -0
  25. numpy/_core/_internal.py +958 -0
  26. numpy/_core/_internal.pyi +72 -0
  27. numpy/_core/_machar.py +355 -0
  28. numpy/_core/_machar.pyi +55 -0
  29. numpy/_core/_methods.py +255 -0
  30. numpy/_core/_methods.pyi +22 -0
  31. numpy/_core/_multiarray_tests.cpython-313-darwin.so +0 -0
  32. numpy/_core/_multiarray_umath.cpython-313-darwin.so +0 -0
  33. numpy/_core/_operand_flag_tests.cpython-313-darwin.so +0 -0
  34. numpy/_core/_rational_tests.cpython-313-darwin.so +0 -0
  35. numpy/_core/_simd.cpython-313-darwin.so +0 -0
  36. numpy/_core/_simd.pyi +25 -0
  37. numpy/_core/_string_helpers.py +100 -0
  38. numpy/_core/_string_helpers.pyi +12 -0
  39. numpy/_core/_struct_ufunc_tests.cpython-313-darwin.so +0 -0
  40. numpy/_core/_type_aliases.py +119 -0
  41. numpy/_core/_type_aliases.pyi +97 -0
  42. numpy/_core/_ufunc_config.py +491 -0
  43. numpy/_core/_ufunc_config.pyi +78 -0
  44. numpy/_core/_umath_tests.cpython-313-darwin.so +0 -0
  45. numpy/_core/arrayprint.py +1775 -0
  46. numpy/_core/arrayprint.pyi +238 -0
  47. numpy/_core/cversions.py +13 -0
  48. numpy/_core/defchararray.py +1427 -0
  49. numpy/_core/defchararray.pyi +1135 -0
  50. numpy/_core/einsumfunc.py +1498 -0
  51. numpy/_core/einsumfunc.pyi +184 -0
  52. numpy/_core/fromnumeric.py +4269 -0
  53. numpy/_core/fromnumeric.pyi +1750 -0
  54. numpy/_core/function_base.py +545 -0
  55. numpy/_core/function_base.pyi +278 -0
  56. numpy/_core/getlimits.py +748 -0
  57. numpy/_core/getlimits.pyi +3 -0
  58. numpy/_core/include/numpy/__multiarray_api.c +376 -0
  59. numpy/_core/include/numpy/__multiarray_api.h +1628 -0
  60. numpy/_core/include/numpy/__ufunc_api.c +54 -0
  61. numpy/_core/include/numpy/__ufunc_api.h +341 -0
  62. numpy/_core/include/numpy/_neighborhood_iterator_imp.h +90 -0
  63. numpy/_core/include/numpy/_numpyconfig.h +33 -0
  64. numpy/_core/include/numpy/_public_dtype_api_table.h +86 -0
  65. numpy/_core/include/numpy/arrayobject.h +7 -0
  66. numpy/_core/include/numpy/arrayscalars.h +196 -0
  67. numpy/_core/include/numpy/dtype_api.h +480 -0
  68. numpy/_core/include/numpy/halffloat.h +70 -0
  69. numpy/_core/include/numpy/ndarrayobject.h +304 -0
  70. numpy/_core/include/numpy/ndarraytypes.h +1950 -0
  71. numpy/_core/include/numpy/npy_2_compat.h +249 -0
  72. numpy/_core/include/numpy/npy_2_complexcompat.h +28 -0
  73. numpy/_core/include/numpy/npy_3kcompat.h +374 -0
  74. numpy/_core/include/numpy/npy_common.h +977 -0
  75. numpy/_core/include/numpy/npy_cpu.h +124 -0
  76. numpy/_core/include/numpy/npy_endian.h +78 -0
  77. numpy/_core/include/numpy/npy_math.h +602 -0
  78. numpy/_core/include/numpy/npy_no_deprecated_api.h +20 -0
  79. numpy/_core/include/numpy/npy_os.h +42 -0
  80. numpy/_core/include/numpy/numpyconfig.h +182 -0
  81. numpy/_core/include/numpy/random/LICENSE.txt +21 -0
  82. numpy/_core/include/numpy/random/bitgen.h +20 -0
  83. numpy/_core/include/numpy/random/distributions.h +209 -0
  84. numpy/_core/include/numpy/random/libdivide.h +2079 -0
  85. numpy/_core/include/numpy/ufuncobject.h +343 -0
  86. numpy/_core/include/numpy/utils.h +37 -0
  87. numpy/_core/lib/libnpymath.a +0 -0
  88. numpy/_core/lib/npy-pkg-config/mlib.ini +12 -0
  89. numpy/_core/lib/npy-pkg-config/npymath.ini +20 -0
  90. numpy/_core/lib/pkgconfig/numpy.pc +7 -0
  91. numpy/_core/memmap.py +363 -0
  92. numpy/_core/memmap.pyi +3 -0
  93. numpy/_core/multiarray.py +1762 -0
  94. numpy/_core/multiarray.pyi +1285 -0
  95. numpy/_core/numeric.py +2760 -0
  96. numpy/_core/numeric.pyi +882 -0
  97. numpy/_core/numerictypes.py +633 -0
  98. numpy/_core/numerictypes.pyi +197 -0
  99. numpy/_core/overrides.py +183 -0
  100. numpy/_core/overrides.pyi +48 -0
  101. numpy/_core/printoptions.py +32 -0
  102. numpy/_core/printoptions.pyi +28 -0
  103. numpy/_core/records.py +1089 -0
  104. numpy/_core/records.pyi +333 -0
  105. numpy/_core/shape_base.py +998 -0
  106. numpy/_core/shape_base.pyi +175 -0
  107. numpy/_core/strings.py +1829 -0
  108. numpy/_core/strings.pyi +511 -0
  109. numpy/_core/tests/_locales.py +72 -0
  110. numpy/_core/tests/_natype.py +205 -0
  111. numpy/_core/tests/data/astype_copy.pkl +0 -0
  112. numpy/_core/tests/data/generate_umath_validation_data.cpp +170 -0
  113. numpy/_core/tests/data/recarray_from_file.fits +0 -0
  114. numpy/_core/tests/data/umath-validation-set-README.txt +15 -0
  115. numpy/_core/tests/data/umath-validation-set-arccos.csv +1429 -0
  116. numpy/_core/tests/data/umath-validation-set-arccosh.csv +1429 -0
  117. numpy/_core/tests/data/umath-validation-set-arcsin.csv +1429 -0
  118. numpy/_core/tests/data/umath-validation-set-arcsinh.csv +1429 -0
  119. numpy/_core/tests/data/umath-validation-set-arctan.csv +1429 -0
  120. numpy/_core/tests/data/umath-validation-set-arctanh.csv +1429 -0
  121. numpy/_core/tests/data/umath-validation-set-cbrt.csv +1429 -0
  122. numpy/_core/tests/data/umath-validation-set-cos.csv +1375 -0
  123. numpy/_core/tests/data/umath-validation-set-cosh.csv +1429 -0
  124. numpy/_core/tests/data/umath-validation-set-exp.csv +412 -0
  125. numpy/_core/tests/data/umath-validation-set-exp2.csv +1429 -0
  126. numpy/_core/tests/data/umath-validation-set-expm1.csv +1429 -0
  127. numpy/_core/tests/data/umath-validation-set-log.csv +271 -0
  128. numpy/_core/tests/data/umath-validation-set-log10.csv +1629 -0
  129. numpy/_core/tests/data/umath-validation-set-log1p.csv +1429 -0
  130. numpy/_core/tests/data/umath-validation-set-log2.csv +1629 -0
  131. numpy/_core/tests/data/umath-validation-set-sin.csv +1370 -0
  132. numpy/_core/tests/data/umath-validation-set-sinh.csv +1429 -0
  133. numpy/_core/tests/data/umath-validation-set-tan.csv +1429 -0
  134. numpy/_core/tests/data/umath-validation-set-tanh.csv +1429 -0
  135. numpy/_core/tests/examples/cython/checks.pyx +373 -0
  136. numpy/_core/tests/examples/cython/meson.build +43 -0
  137. numpy/_core/tests/examples/cython/setup.py +39 -0
  138. numpy/_core/tests/examples/limited_api/limited_api1.c +17 -0
  139. numpy/_core/tests/examples/limited_api/limited_api2.pyx +11 -0
  140. numpy/_core/tests/examples/limited_api/limited_api_latest.c +19 -0
  141. numpy/_core/tests/examples/limited_api/meson.build +59 -0
  142. numpy/_core/tests/examples/limited_api/setup.py +24 -0
  143. numpy/_core/tests/test__exceptions.py +90 -0
  144. numpy/_core/tests/test_abc.py +54 -0
  145. numpy/_core/tests/test_api.py +654 -0
  146. numpy/_core/tests/test_argparse.py +92 -0
  147. numpy/_core/tests/test_array_api_info.py +113 -0
  148. numpy/_core/tests/test_array_coercion.py +911 -0
  149. numpy/_core/tests/test_array_interface.py +222 -0
  150. numpy/_core/tests/test_arraymethod.py +84 -0
  151. numpy/_core/tests/test_arrayobject.py +75 -0
  152. numpy/_core/tests/test_arrayprint.py +1328 -0
  153. numpy/_core/tests/test_casting_floatingpoint_errors.py +154 -0
  154. numpy/_core/tests/test_casting_unittests.py +817 -0
  155. numpy/_core/tests/test_conversion_utils.py +206 -0
  156. numpy/_core/tests/test_cpu_dispatcher.py +49 -0
  157. numpy/_core/tests/test_cpu_features.py +432 -0
  158. numpy/_core/tests/test_custom_dtypes.py +315 -0
  159. numpy/_core/tests/test_cython.py +351 -0
  160. numpy/_core/tests/test_datetime.py +2734 -0
  161. numpy/_core/tests/test_defchararray.py +825 -0
  162. numpy/_core/tests/test_deprecations.py +454 -0
  163. numpy/_core/tests/test_dlpack.py +190 -0
  164. numpy/_core/tests/test_dtype.py +1995 -0
  165. numpy/_core/tests/test_einsum.py +1317 -0
  166. numpy/_core/tests/test_errstate.py +131 -0
  167. numpy/_core/tests/test_extint128.py +217 -0
  168. numpy/_core/tests/test_function_base.py +503 -0
  169. numpy/_core/tests/test_getlimits.py +205 -0
  170. numpy/_core/tests/test_half.py +568 -0
  171. numpy/_core/tests/test_hashtable.py +35 -0
  172. numpy/_core/tests/test_indexerrors.py +125 -0
  173. numpy/_core/tests/test_indexing.py +1455 -0
  174. numpy/_core/tests/test_item_selection.py +167 -0
  175. numpy/_core/tests/test_limited_api.py +102 -0
  176. numpy/_core/tests/test_longdouble.py +369 -0
  177. numpy/_core/tests/test_machar.py +30 -0
  178. numpy/_core/tests/test_mem_overlap.py +930 -0
  179. numpy/_core/tests/test_mem_policy.py +452 -0
  180. numpy/_core/tests/test_memmap.py +246 -0
  181. numpy/_core/tests/test_multiarray.py +10577 -0
  182. numpy/_core/tests/test_multithreading.py +292 -0
  183. numpy/_core/tests/test_nditer.py +3498 -0
  184. numpy/_core/tests/test_nep50_promotions.py +287 -0
  185. numpy/_core/tests/test_numeric.py +4247 -0
  186. numpy/_core/tests/test_numerictypes.py +651 -0
  187. numpy/_core/tests/test_overrides.py +791 -0
  188. numpy/_core/tests/test_print.py +200 -0
  189. numpy/_core/tests/test_protocols.py +46 -0
  190. numpy/_core/tests/test_records.py +544 -0
  191. numpy/_core/tests/test_regression.py +2670 -0
  192. numpy/_core/tests/test_scalar_ctors.py +207 -0
  193. numpy/_core/tests/test_scalar_methods.py +246 -0
  194. numpy/_core/tests/test_scalarbuffer.py +153 -0
  195. numpy/_core/tests/test_scalarinherit.py +105 -0
  196. numpy/_core/tests/test_scalarmath.py +1176 -0
  197. numpy/_core/tests/test_scalarprint.py +403 -0
  198. numpy/_core/tests/test_shape_base.py +891 -0
  199. numpy/_core/tests/test_simd.py +1341 -0
  200. numpy/_core/tests/test_simd_module.py +103 -0
  201. numpy/_core/tests/test_stringdtype.py +1814 -0
  202. numpy/_core/tests/test_strings.py +1499 -0
  203. numpy/_core/tests/test_ufunc.py +3313 -0
  204. numpy/_core/tests/test_umath.py +4928 -0
  205. numpy/_core/tests/test_umath_accuracy.py +124 -0
  206. numpy/_core/tests/test_umath_complex.py +626 -0
  207. numpy/_core/tests/test_unicode.py +368 -0
  208. numpy/_core/umath.py +60 -0
  209. numpy/_core/umath.pyi +197 -0
  210. numpy/_distributor_init.py +15 -0
  211. numpy/_distributor_init.pyi +1 -0
  212. numpy/_expired_attrs_2_0.py +79 -0
  213. numpy/_expired_attrs_2_0.pyi +62 -0
  214. numpy/_globals.py +96 -0
  215. numpy/_globals.pyi +17 -0
  216. numpy/_pyinstaller/__init__.py +0 -0
  217. numpy/_pyinstaller/__init__.pyi +0 -0
  218. numpy/_pyinstaller/hook-numpy.py +36 -0
  219. numpy/_pyinstaller/hook-numpy.pyi +13 -0
  220. numpy/_pyinstaller/tests/__init__.py +16 -0
  221. numpy/_pyinstaller/tests/pyinstaller-smoke.py +32 -0
  222. numpy/_pyinstaller/tests/test_pyinstaller.py +35 -0
  223. numpy/_pytesttester.py +201 -0
  224. numpy/_pytesttester.pyi +18 -0
  225. numpy/_typing/__init__.py +148 -0
  226. numpy/_typing/_add_docstring.py +153 -0
  227. numpy/_typing/_array_like.py +106 -0
  228. numpy/_typing/_char_codes.py +213 -0
  229. numpy/_typing/_dtype_like.py +114 -0
  230. numpy/_typing/_extended_precision.py +15 -0
  231. numpy/_typing/_nbit.py +19 -0
  232. numpy/_typing/_nbit_base.py +94 -0
  233. numpy/_typing/_nbit_base.pyi +40 -0
  234. numpy/_typing/_nested_sequence.py +79 -0
  235. numpy/_typing/_scalars.py +20 -0
  236. numpy/_typing/_shape.py +8 -0
  237. numpy/_typing/_ufunc.py +7 -0
  238. numpy/_typing/_ufunc.pyi +941 -0
  239. numpy/_utils/__init__.py +95 -0
  240. numpy/_utils/__init__.pyi +30 -0
  241. numpy/_utils/_convertions.py +18 -0
  242. numpy/_utils/_convertions.pyi +4 -0
  243. numpy/_utils/_inspect.py +192 -0
  244. numpy/_utils/_inspect.pyi +71 -0
  245. numpy/_utils/_pep440.py +486 -0
  246. numpy/_utils/_pep440.pyi +121 -0
  247. numpy/char/__init__.py +2 -0
  248. numpy/char/__init__.pyi +111 -0
  249. numpy/conftest.py +258 -0
  250. numpy/core/__init__.py +33 -0
  251. numpy/core/__init__.pyi +0 -0
  252. numpy/core/_dtype.py +10 -0
  253. numpy/core/_dtype.pyi +0 -0
  254. numpy/core/_dtype_ctypes.py +10 -0
  255. numpy/core/_dtype_ctypes.pyi +0 -0
  256. numpy/core/_internal.py +27 -0
  257. numpy/core/_multiarray_umath.py +57 -0
  258. numpy/core/_utils.py +21 -0
  259. numpy/core/arrayprint.py +10 -0
  260. numpy/core/defchararray.py +10 -0
  261. numpy/core/einsumfunc.py +10 -0
  262. numpy/core/fromnumeric.py +10 -0
  263. numpy/core/function_base.py +10 -0
  264. numpy/core/getlimits.py +10 -0
  265. numpy/core/multiarray.py +25 -0
  266. numpy/core/numeric.py +12 -0
  267. numpy/core/numerictypes.py +10 -0
  268. numpy/core/overrides.py +10 -0
  269. numpy/core/overrides.pyi +7 -0
  270. numpy/core/records.py +10 -0
  271. numpy/core/shape_base.py +10 -0
  272. numpy/core/umath.py +10 -0
  273. numpy/ctypeslib/__init__.py +13 -0
  274. numpy/ctypeslib/__init__.pyi +33 -0
  275. numpy/ctypeslib/_ctypeslib.py +603 -0
  276. numpy/ctypeslib/_ctypeslib.pyi +245 -0
  277. numpy/doc/ufuncs.py +138 -0
  278. numpy/dtypes.py +41 -0
  279. numpy/dtypes.pyi +631 -0
  280. numpy/exceptions.py +247 -0
  281. numpy/exceptions.pyi +27 -0
  282. numpy/f2py/__init__.py +86 -0
  283. numpy/f2py/__init__.pyi +6 -0
  284. numpy/f2py/__main__.py +5 -0
  285. numpy/f2py/__version__.py +1 -0
  286. numpy/f2py/__version__.pyi +1 -0
  287. numpy/f2py/_backends/__init__.py +9 -0
  288. numpy/f2py/_backends/__init__.pyi +5 -0
  289. numpy/f2py/_backends/_backend.py +44 -0
  290. numpy/f2py/_backends/_backend.pyi +46 -0
  291. numpy/f2py/_backends/_distutils.py +76 -0
  292. numpy/f2py/_backends/_distutils.pyi +13 -0
  293. numpy/f2py/_backends/_meson.py +231 -0
  294. numpy/f2py/_backends/_meson.pyi +63 -0
  295. numpy/f2py/_backends/meson.build.template +55 -0
  296. numpy/f2py/_isocbind.py +62 -0
  297. numpy/f2py/_isocbind.pyi +13 -0
  298. numpy/f2py/_src_pyf.py +247 -0
  299. numpy/f2py/_src_pyf.pyi +29 -0
  300. numpy/f2py/auxfuncs.py +1004 -0
  301. numpy/f2py/auxfuncs.pyi +264 -0
  302. numpy/f2py/capi_maps.py +811 -0
  303. numpy/f2py/capi_maps.pyi +33 -0
  304. numpy/f2py/cb_rules.py +665 -0
  305. numpy/f2py/cb_rules.pyi +17 -0
  306. numpy/f2py/cfuncs.py +1563 -0
  307. numpy/f2py/cfuncs.pyi +31 -0
  308. numpy/f2py/common_rules.py +143 -0
  309. numpy/f2py/common_rules.pyi +9 -0
  310. numpy/f2py/crackfortran.py +3725 -0
  311. numpy/f2py/crackfortran.pyi +258 -0
  312. numpy/f2py/diagnose.py +149 -0
  313. numpy/f2py/diagnose.pyi +1 -0
  314. numpy/f2py/f2py2e.py +786 -0
  315. numpy/f2py/f2py2e.pyi +76 -0
  316. numpy/f2py/f90mod_rules.py +269 -0
  317. numpy/f2py/f90mod_rules.pyi +16 -0
  318. numpy/f2py/func2subr.py +329 -0
  319. numpy/f2py/func2subr.pyi +7 -0
  320. numpy/f2py/rules.py +1629 -0
  321. numpy/f2py/rules.pyi +43 -0
  322. numpy/f2py/setup.cfg +3 -0
  323. numpy/f2py/src/fortranobject.c +1436 -0
  324. numpy/f2py/src/fortranobject.h +173 -0
  325. numpy/f2py/symbolic.py +1516 -0
  326. numpy/f2py/symbolic.pyi +221 -0
  327. numpy/f2py/tests/__init__.py +16 -0
  328. numpy/f2py/tests/src/abstract_interface/foo.f90 +34 -0
  329. numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90 +6 -0
  330. numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +235 -0
  331. numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +1 -0
  332. numpy/f2py/tests/src/assumed_shape/foo_free.f90 +34 -0
  333. numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +41 -0
  334. numpy/f2py/tests/src/assumed_shape/foo_use.f90 +19 -0
  335. numpy/f2py/tests/src/assumed_shape/precision.f90 +4 -0
  336. numpy/f2py/tests/src/block_docstring/foo.f +6 -0
  337. numpy/f2py/tests/src/callback/foo.f +62 -0
  338. numpy/f2py/tests/src/callback/gh17797.f90 +7 -0
  339. numpy/f2py/tests/src/callback/gh18335.f90 +17 -0
  340. numpy/f2py/tests/src/callback/gh25211.f +10 -0
  341. numpy/f2py/tests/src/callback/gh25211.pyf +18 -0
  342. numpy/f2py/tests/src/callback/gh26681.f90 +18 -0
  343. numpy/f2py/tests/src/cli/gh_22819.pyf +6 -0
  344. numpy/f2py/tests/src/cli/hi77.f +3 -0
  345. numpy/f2py/tests/src/cli/hiworld.f90 +3 -0
  346. numpy/f2py/tests/src/common/block.f +11 -0
  347. numpy/f2py/tests/src/common/gh19161.f90 +10 -0
  348. numpy/f2py/tests/src/crackfortran/accesstype.f90 +13 -0
  349. numpy/f2py/tests/src/crackfortran/common_with_division.f +17 -0
  350. numpy/f2py/tests/src/crackfortran/data_common.f +8 -0
  351. numpy/f2py/tests/src/crackfortran/data_multiplier.f +5 -0
  352. numpy/f2py/tests/src/crackfortran/data_stmts.f90 +20 -0
  353. numpy/f2py/tests/src/crackfortran/data_with_comments.f +8 -0
  354. numpy/f2py/tests/src/crackfortran/foo_deps.f90 +6 -0
  355. numpy/f2py/tests/src/crackfortran/gh15035.f +16 -0
  356. numpy/f2py/tests/src/crackfortran/gh17859.f +12 -0
  357. numpy/f2py/tests/src/crackfortran/gh22648.pyf +7 -0
  358. numpy/f2py/tests/src/crackfortran/gh23533.f +5 -0
  359. numpy/f2py/tests/src/crackfortran/gh23598.f90 +4 -0
  360. numpy/f2py/tests/src/crackfortran/gh23598Warn.f90 +11 -0
  361. numpy/f2py/tests/src/crackfortran/gh23879.f90 +20 -0
  362. numpy/f2py/tests/src/crackfortran/gh27697.f90 +12 -0
  363. numpy/f2py/tests/src/crackfortran/gh2848.f90 +13 -0
  364. numpy/f2py/tests/src/crackfortran/operators.f90 +49 -0
  365. numpy/f2py/tests/src/crackfortran/privatemod.f90 +11 -0
  366. numpy/f2py/tests/src/crackfortran/publicmod.f90 +10 -0
  367. numpy/f2py/tests/src/crackfortran/pubprivmod.f90 +10 -0
  368. numpy/f2py/tests/src/crackfortran/unicode_comment.f90 +4 -0
  369. numpy/f2py/tests/src/f2cmap/.f2py_f2cmap +1 -0
  370. numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90 +9 -0
  371. numpy/f2py/tests/src/isocintrin/isoCtests.f90 +34 -0
  372. numpy/f2py/tests/src/kind/foo.f90 +20 -0
  373. numpy/f2py/tests/src/mixed/foo.f +5 -0
  374. numpy/f2py/tests/src/mixed/foo_fixed.f90 +8 -0
  375. numpy/f2py/tests/src/mixed/foo_free.f90 +8 -0
  376. numpy/f2py/tests/src/modules/gh25337/data.f90 +8 -0
  377. numpy/f2py/tests/src/modules/gh25337/use_data.f90 +6 -0
  378. numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90 +21 -0
  379. numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90 +21 -0
  380. numpy/f2py/tests/src/modules/module_data_docstring.f90 +12 -0
  381. numpy/f2py/tests/src/modules/use_modules.f90 +20 -0
  382. numpy/f2py/tests/src/negative_bounds/issue_20853.f90 +7 -0
  383. numpy/f2py/tests/src/parameter/constant_array.f90 +45 -0
  384. numpy/f2py/tests/src/parameter/constant_both.f90 +57 -0
  385. numpy/f2py/tests/src/parameter/constant_compound.f90 +15 -0
  386. numpy/f2py/tests/src/parameter/constant_integer.f90 +22 -0
  387. numpy/f2py/tests/src/parameter/constant_non_compound.f90 +23 -0
  388. numpy/f2py/tests/src/parameter/constant_real.f90 +23 -0
  389. numpy/f2py/tests/src/quoted_character/foo.f +14 -0
  390. numpy/f2py/tests/src/regression/AB.inc +1 -0
  391. numpy/f2py/tests/src/regression/assignOnlyModule.f90 +25 -0
  392. numpy/f2py/tests/src/regression/datonly.f90 +17 -0
  393. numpy/f2py/tests/src/regression/f77comments.f +26 -0
  394. numpy/f2py/tests/src/regression/f77fixedform.f95 +5 -0
  395. numpy/f2py/tests/src/regression/f90continuation.f90 +9 -0
  396. numpy/f2py/tests/src/regression/incfile.f90 +5 -0
  397. numpy/f2py/tests/src/regression/inout.f90 +9 -0
  398. numpy/f2py/tests/src/regression/lower_f2py_fortran.f90 +5 -0
  399. numpy/f2py/tests/src/regression/mod_derived_types.f90 +23 -0
  400. numpy/f2py/tests/src/return_character/foo77.f +45 -0
  401. numpy/f2py/tests/src/return_character/foo90.f90 +48 -0
  402. numpy/f2py/tests/src/return_complex/foo77.f +45 -0
  403. numpy/f2py/tests/src/return_complex/foo90.f90 +48 -0
  404. numpy/f2py/tests/src/return_integer/foo77.f +56 -0
  405. numpy/f2py/tests/src/return_integer/foo90.f90 +59 -0
  406. numpy/f2py/tests/src/return_logical/foo77.f +56 -0
  407. numpy/f2py/tests/src/return_logical/foo90.f90 +59 -0
  408. numpy/f2py/tests/src/return_real/foo77.f +45 -0
  409. numpy/f2py/tests/src/return_real/foo90.f90 +48 -0
  410. numpy/f2py/tests/src/routines/funcfortranname.f +5 -0
  411. numpy/f2py/tests/src/routines/funcfortranname.pyf +11 -0
  412. numpy/f2py/tests/src/routines/subrout.f +4 -0
  413. numpy/f2py/tests/src/routines/subrout.pyf +10 -0
  414. numpy/f2py/tests/src/size/foo.f90 +44 -0
  415. numpy/f2py/tests/src/string/char.f90 +29 -0
  416. numpy/f2py/tests/src/string/fixed_string.f90 +34 -0
  417. numpy/f2py/tests/src/string/gh24008.f +8 -0
  418. numpy/f2py/tests/src/string/gh24662.f90 +7 -0
  419. numpy/f2py/tests/src/string/gh25286.f90 +14 -0
  420. numpy/f2py/tests/src/string/gh25286.pyf +12 -0
  421. numpy/f2py/tests/src/string/gh25286_bc.pyf +12 -0
  422. numpy/f2py/tests/src/string/scalar_string.f90 +9 -0
  423. numpy/f2py/tests/src/string/string.f +12 -0
  424. numpy/f2py/tests/src/value_attrspec/gh21665.f90 +9 -0
  425. numpy/f2py/tests/test_abstract_interface.py +26 -0
  426. numpy/f2py/tests/test_array_from_pyobj.py +678 -0
  427. numpy/f2py/tests/test_assumed_shape.py +50 -0
  428. numpy/f2py/tests/test_block_docstring.py +20 -0
  429. numpy/f2py/tests/test_callback.py +263 -0
  430. numpy/f2py/tests/test_character.py +641 -0
  431. numpy/f2py/tests/test_common.py +23 -0
  432. numpy/f2py/tests/test_crackfortran.py +421 -0
  433. numpy/f2py/tests/test_data.py +71 -0
  434. numpy/f2py/tests/test_docs.py +64 -0
  435. numpy/f2py/tests/test_f2cmap.py +17 -0
  436. numpy/f2py/tests/test_f2py2e.py +964 -0
  437. numpy/f2py/tests/test_isoc.py +56 -0
  438. numpy/f2py/tests/test_kind.py +53 -0
  439. numpy/f2py/tests/test_mixed.py +35 -0
  440. numpy/f2py/tests/test_modules.py +83 -0
  441. numpy/f2py/tests/test_parameter.py +129 -0
  442. numpy/f2py/tests/test_pyf_src.py +43 -0
  443. numpy/f2py/tests/test_quoted_character.py +18 -0
  444. numpy/f2py/tests/test_regression.py +187 -0
  445. numpy/f2py/tests/test_return_character.py +48 -0
  446. numpy/f2py/tests/test_return_complex.py +67 -0
  447. numpy/f2py/tests/test_return_integer.py +55 -0
  448. numpy/f2py/tests/test_return_logical.py +65 -0
  449. numpy/f2py/tests/test_return_real.py +109 -0
  450. numpy/f2py/tests/test_routines.py +29 -0
  451. numpy/f2py/tests/test_semicolon_split.py +75 -0
  452. numpy/f2py/tests/test_size.py +45 -0
  453. numpy/f2py/tests/test_string.py +100 -0
  454. numpy/f2py/tests/test_symbolic.py +495 -0
  455. numpy/f2py/tests/test_value_attrspec.py +15 -0
  456. numpy/f2py/tests/util.py +442 -0
  457. numpy/f2py/use_rules.py +99 -0
  458. numpy/f2py/use_rules.pyi +9 -0
  459. numpy/fft/__init__.py +215 -0
  460. numpy/fft/__init__.pyi +43 -0
  461. numpy/fft/_helper.py +235 -0
  462. numpy/fft/_helper.pyi +45 -0
  463. numpy/fft/_pocketfft.py +1693 -0
  464. numpy/fft/_pocketfft.pyi +138 -0
  465. numpy/fft/_pocketfft_umath.cpython-313-darwin.so +0 -0
  466. numpy/fft/helper.py +17 -0
  467. numpy/fft/helper.pyi +22 -0
  468. numpy/fft/tests/__init__.py +0 -0
  469. numpy/fft/tests/test_helper.py +167 -0
  470. numpy/fft/tests/test_pocketfft.py +589 -0
  471. numpy/lib/__init__.py +97 -0
  472. numpy/lib/__init__.pyi +44 -0
  473. numpy/lib/_array_utils_impl.py +62 -0
  474. numpy/lib/_array_utils_impl.pyi +26 -0
  475. numpy/lib/_arraypad_impl.py +890 -0
  476. numpy/lib/_arraypad_impl.pyi +89 -0
  477. numpy/lib/_arraysetops_impl.py +1260 -0
  478. numpy/lib/_arraysetops_impl.pyi +468 -0
  479. numpy/lib/_arrayterator_impl.py +224 -0
  480. numpy/lib/_arrayterator_impl.pyi +46 -0
  481. numpy/lib/_datasource.py +700 -0
  482. numpy/lib/_datasource.pyi +31 -0
  483. numpy/lib/_format_impl.py +1036 -0
  484. numpy/lib/_format_impl.pyi +26 -0
  485. numpy/lib/_function_base_impl.py +5844 -0
  486. numpy/lib/_function_base_impl.pyi +1164 -0
  487. numpy/lib/_histograms_impl.py +1085 -0
  488. numpy/lib/_histograms_impl.pyi +50 -0
  489. numpy/lib/_index_tricks_impl.py +1067 -0
  490. numpy/lib/_index_tricks_impl.pyi +208 -0
  491. numpy/lib/_iotools.py +900 -0
  492. numpy/lib/_iotools.pyi +114 -0
  493. numpy/lib/_nanfunctions_impl.py +2024 -0
  494. numpy/lib/_nanfunctions_impl.pyi +52 -0
  495. numpy/lib/_npyio_impl.py +2596 -0
  496. numpy/lib/_npyio_impl.pyi +301 -0
  497. numpy/lib/_polynomial_impl.py +1465 -0
  498. numpy/lib/_polynomial_impl.pyi +318 -0
  499. numpy/lib/_scimath_impl.py +642 -0
  500. numpy/lib/_scimath_impl.pyi +93 -0
  501. numpy/lib/_shape_base_impl.py +1301 -0
  502. numpy/lib/_shape_base_impl.pyi +235 -0
  503. numpy/lib/_stride_tricks_impl.py +549 -0
  504. numpy/lib/_stride_tricks_impl.pyi +74 -0
  505. numpy/lib/_twodim_base_impl.py +1201 -0
  506. numpy/lib/_twodim_base_impl.pyi +438 -0
  507. numpy/lib/_type_check_impl.py +699 -0
  508. numpy/lib/_type_check_impl.pyi +350 -0
  509. numpy/lib/_ufunclike_impl.py +207 -0
  510. numpy/lib/_ufunclike_impl.pyi +67 -0
  511. numpy/lib/_user_array_impl.py +299 -0
  512. numpy/lib/_user_array_impl.pyi +225 -0
  513. numpy/lib/_utils_impl.py +784 -0
  514. numpy/lib/_utils_impl.pyi +10 -0
  515. numpy/lib/_version.py +154 -0
  516. numpy/lib/_version.pyi +17 -0
  517. numpy/lib/array_utils.py +7 -0
  518. numpy/lib/array_utils.pyi +12 -0
  519. numpy/lib/format.py +24 -0
  520. numpy/lib/format.pyi +66 -0
  521. numpy/lib/introspect.py +95 -0
  522. numpy/lib/introspect.pyi +3 -0
  523. numpy/lib/mixins.py +180 -0
  524. numpy/lib/mixins.pyi +77 -0
  525. numpy/lib/npyio.py +1 -0
  526. numpy/lib/npyio.pyi +9 -0
  527. numpy/lib/recfunctions.py +1681 -0
  528. numpy/lib/recfunctions.pyi +435 -0
  529. numpy/lib/scimath.py +13 -0
  530. numpy/lib/scimath.pyi +30 -0
  531. numpy/lib/stride_tricks.py +1 -0
  532. numpy/lib/stride_tricks.pyi +6 -0
  533. numpy/lib/tests/__init__.py +0 -0
  534. numpy/lib/tests/data/py2-np0-objarr.npy +0 -0
  535. numpy/lib/tests/data/py2-objarr.npy +0 -0
  536. numpy/lib/tests/data/py2-objarr.npz +0 -0
  537. numpy/lib/tests/data/py3-objarr.npy +0 -0
  538. numpy/lib/tests/data/py3-objarr.npz +0 -0
  539. numpy/lib/tests/data/python3.npy +0 -0
  540. numpy/lib/tests/data/win64python2.npy +0 -0
  541. numpy/lib/tests/test__datasource.py +352 -0
  542. numpy/lib/tests/test__iotools.py +360 -0
  543. numpy/lib/tests/test__version.py +64 -0
  544. numpy/lib/tests/test_array_utils.py +32 -0
  545. numpy/lib/tests/test_arraypad.py +1415 -0
  546. numpy/lib/tests/test_arraysetops.py +1074 -0
  547. numpy/lib/tests/test_arrayterator.py +46 -0
  548. numpy/lib/tests/test_format.py +1054 -0
  549. numpy/lib/tests/test_function_base.py +4573 -0
  550. numpy/lib/tests/test_histograms.py +855 -0
  551. numpy/lib/tests/test_index_tricks.py +573 -0
  552. numpy/lib/tests/test_io.py +2848 -0
  553. numpy/lib/tests/test_loadtxt.py +1101 -0
  554. numpy/lib/tests/test_mixins.py +215 -0
  555. numpy/lib/tests/test_nanfunctions.py +1438 -0
  556. numpy/lib/tests/test_packbits.py +376 -0
  557. numpy/lib/tests/test_polynomial.py +320 -0
  558. numpy/lib/tests/test_recfunctions.py +1052 -0
  559. numpy/lib/tests/test_regression.py +231 -0
  560. numpy/lib/tests/test_shape_base.py +813 -0
  561. numpy/lib/tests/test_stride_tricks.py +656 -0
  562. numpy/lib/tests/test_twodim_base.py +559 -0
  563. numpy/lib/tests/test_type_check.py +473 -0
  564. numpy/lib/tests/test_ufunclike.py +97 -0
  565. numpy/lib/tests/test_utils.py +80 -0
  566. numpy/lib/user_array.py +1 -0
  567. numpy/lib/user_array.pyi +1 -0
  568. numpy/linalg/__init__.py +98 -0
  569. numpy/linalg/__init__.pyi +73 -0
  570. numpy/linalg/_linalg.py +3682 -0
  571. numpy/linalg/_linalg.pyi +475 -0
  572. numpy/linalg/_umath_linalg.cpython-313-darwin.so +0 -0
  573. numpy/linalg/_umath_linalg.pyi +61 -0
  574. numpy/linalg/lapack_lite.cpython-313-darwin.so +0 -0
  575. numpy/linalg/lapack_lite.pyi +141 -0
  576. numpy/linalg/linalg.py +17 -0
  577. numpy/linalg/linalg.pyi +69 -0
  578. numpy/linalg/tests/__init__.py +0 -0
  579. numpy/linalg/tests/test_deprecations.py +20 -0
  580. numpy/linalg/tests/test_linalg.py +2443 -0
  581. numpy/linalg/tests/test_regression.py +181 -0
  582. numpy/ma/API_CHANGES.txt +135 -0
  583. numpy/ma/LICENSE +24 -0
  584. numpy/ma/README.rst +236 -0
  585. numpy/ma/__init__.py +53 -0
  586. numpy/ma/__init__.pyi +458 -0
  587. numpy/ma/core.py +8933 -0
  588. numpy/ma/core.pyi +1462 -0
  589. numpy/ma/extras.py +2344 -0
  590. numpy/ma/extras.pyi +138 -0
  591. numpy/ma/mrecords.py +773 -0
  592. numpy/ma/mrecords.pyi +96 -0
  593. numpy/ma/tests/__init__.py +0 -0
  594. numpy/ma/tests/test_arrayobject.py +40 -0
  595. numpy/ma/tests/test_core.py +5886 -0
  596. numpy/ma/tests/test_deprecations.py +87 -0
  597. numpy/ma/tests/test_extras.py +1998 -0
  598. numpy/ma/tests/test_mrecords.py +497 -0
  599. numpy/ma/tests/test_old_ma.py +942 -0
  600. numpy/ma/tests/test_regression.py +100 -0
  601. numpy/ma/tests/test_subclassing.py +469 -0
  602. numpy/ma/testutils.py +294 -0
  603. numpy/matlib.py +380 -0
  604. numpy/matlib.pyi +582 -0
  605. numpy/matrixlib/__init__.py +12 -0
  606. numpy/matrixlib/__init__.pyi +5 -0
  607. numpy/matrixlib/defmatrix.py +1119 -0
  608. numpy/matrixlib/defmatrix.pyi +17 -0
  609. numpy/matrixlib/tests/__init__.py +0 -0
  610. numpy/matrixlib/tests/test_defmatrix.py +455 -0
  611. numpy/matrixlib/tests/test_interaction.py +360 -0
  612. numpy/matrixlib/tests/test_masked_matrix.py +240 -0
  613. numpy/matrixlib/tests/test_matrix_linalg.py +105 -0
  614. numpy/matrixlib/tests/test_multiarray.py +17 -0
  615. numpy/matrixlib/tests/test_numeric.py +18 -0
  616. numpy/matrixlib/tests/test_regression.py +31 -0
  617. numpy/polynomial/__init__.py +187 -0
  618. numpy/polynomial/__init__.pyi +25 -0
  619. numpy/polynomial/_polybase.py +1191 -0
  620. numpy/polynomial/_polybase.pyi +285 -0
  621. numpy/polynomial/_polytypes.pyi +892 -0
  622. numpy/polynomial/chebyshev.py +2003 -0
  623. numpy/polynomial/chebyshev.pyi +181 -0
  624. numpy/polynomial/hermite.py +1740 -0
  625. numpy/polynomial/hermite.pyi +107 -0
  626. numpy/polynomial/hermite_e.py +1642 -0
  627. numpy/polynomial/hermite_e.pyi +107 -0
  628. numpy/polynomial/laguerre.py +1675 -0
  629. numpy/polynomial/laguerre.pyi +100 -0
  630. numpy/polynomial/legendre.py +1605 -0
  631. numpy/polynomial/legendre.pyi +100 -0
  632. numpy/polynomial/polynomial.py +1616 -0
  633. numpy/polynomial/polynomial.pyi +89 -0
  634. numpy/polynomial/polyutils.py +759 -0
  635. numpy/polynomial/polyutils.pyi +423 -0
  636. numpy/polynomial/tests/__init__.py +0 -0
  637. numpy/polynomial/tests/test_chebyshev.py +623 -0
  638. numpy/polynomial/tests/test_classes.py +618 -0
  639. numpy/polynomial/tests/test_hermite.py +558 -0
  640. numpy/polynomial/tests/test_hermite_e.py +559 -0
  641. numpy/polynomial/tests/test_laguerre.py +540 -0
  642. numpy/polynomial/tests/test_legendre.py +571 -0
  643. numpy/polynomial/tests/test_polynomial.py +669 -0
  644. numpy/polynomial/tests/test_polyutils.py +128 -0
  645. numpy/polynomial/tests/test_printing.py +555 -0
  646. numpy/polynomial/tests/test_symbol.py +217 -0
  647. numpy/py.typed +0 -0
  648. numpy/random/LICENSE.md +71 -0
  649. numpy/random/__init__.pxd +14 -0
  650. numpy/random/__init__.py +213 -0
  651. numpy/random/__init__.pyi +124 -0
  652. numpy/random/_bounded_integers.cpython-313-darwin.so +0 -0
  653. numpy/random/_bounded_integers.pxd +29 -0
  654. numpy/random/_bounded_integers.pyi +1 -0
  655. numpy/random/_common.cpython-313-darwin.so +0 -0
  656. numpy/random/_common.pxd +107 -0
  657. numpy/random/_common.pyi +16 -0
  658. numpy/random/_examples/cffi/extending.py +44 -0
  659. numpy/random/_examples/cffi/parse.py +53 -0
  660. numpy/random/_examples/cython/extending.pyx +77 -0
  661. numpy/random/_examples/cython/extending_distributions.pyx +118 -0
  662. numpy/random/_examples/cython/meson.build +53 -0
  663. numpy/random/_examples/numba/extending.py +86 -0
  664. numpy/random/_examples/numba/extending_distributions.py +67 -0
  665. numpy/random/_generator.cpython-313-darwin.so +0 -0
  666. numpy/random/_generator.pyi +861 -0
  667. numpy/random/_mt19937.cpython-313-darwin.so +0 -0
  668. numpy/random/_mt19937.pyi +25 -0
  669. numpy/random/_pcg64.cpython-313-darwin.so +0 -0
  670. numpy/random/_pcg64.pyi +44 -0
  671. numpy/random/_philox.cpython-313-darwin.so +0 -0
  672. numpy/random/_philox.pyi +39 -0
  673. numpy/random/_pickle.py +88 -0
  674. numpy/random/_pickle.pyi +43 -0
  675. numpy/random/_sfc64.cpython-313-darwin.so +0 -0
  676. numpy/random/_sfc64.pyi +28 -0
  677. numpy/random/bit_generator.cpython-313-darwin.so +0 -0
  678. numpy/random/bit_generator.pxd +35 -0
  679. numpy/random/bit_generator.pyi +124 -0
  680. numpy/random/c_distributions.pxd +119 -0
  681. numpy/random/lib/libnpyrandom.a +0 -0
  682. numpy/random/mtrand.cpython-313-darwin.so +0 -0
  683. numpy/random/mtrand.pyi +703 -0
  684. numpy/random/tests/__init__.py +0 -0
  685. numpy/random/tests/data/__init__.py +0 -0
  686. numpy/random/tests/data/generator_pcg64_np121.pkl.gz +0 -0
  687. numpy/random/tests/data/generator_pcg64_np126.pkl.gz +0 -0
  688. numpy/random/tests/data/mt19937-testset-1.csv +1001 -0
  689. numpy/random/tests/data/mt19937-testset-2.csv +1001 -0
  690. numpy/random/tests/data/pcg64-testset-1.csv +1001 -0
  691. numpy/random/tests/data/pcg64-testset-2.csv +1001 -0
  692. numpy/random/tests/data/pcg64dxsm-testset-1.csv +1001 -0
  693. numpy/random/tests/data/pcg64dxsm-testset-2.csv +1001 -0
  694. numpy/random/tests/data/philox-testset-1.csv +1001 -0
  695. numpy/random/tests/data/philox-testset-2.csv +1001 -0
  696. numpy/random/tests/data/sfc64-testset-1.csv +1001 -0
  697. numpy/random/tests/data/sfc64-testset-2.csv +1001 -0
  698. numpy/random/tests/data/sfc64_np126.pkl.gz +0 -0
  699. numpy/random/tests/test_direct.py +592 -0
  700. numpy/random/tests/test_extending.py +127 -0
  701. numpy/random/tests/test_generator_mt19937.py +2809 -0
  702. numpy/random/tests/test_generator_mt19937_regressions.py +207 -0
  703. numpy/random/tests/test_random.py +1757 -0
  704. numpy/random/tests/test_randomstate.py +2130 -0
  705. numpy/random/tests/test_randomstate_regression.py +217 -0
  706. numpy/random/tests/test_regression.py +152 -0
  707. numpy/random/tests/test_seed_sequence.py +79 -0
  708. numpy/random/tests/test_smoke.py +819 -0
  709. numpy/rec/__init__.py +2 -0
  710. numpy/rec/__init__.pyi +23 -0
  711. numpy/strings/__init__.py +2 -0
  712. numpy/strings/__init__.pyi +97 -0
  713. numpy/testing/__init__.py +22 -0
  714. numpy/testing/__init__.pyi +102 -0
  715. numpy/testing/_private/__init__.py +0 -0
  716. numpy/testing/_private/__init__.pyi +0 -0
  717. numpy/testing/_private/extbuild.py +250 -0
  718. numpy/testing/_private/extbuild.pyi +25 -0
  719. numpy/testing/_private/utils.py +2752 -0
  720. numpy/testing/_private/utils.pyi +499 -0
  721. numpy/testing/overrides.py +84 -0
  722. numpy/testing/overrides.pyi +11 -0
  723. numpy/testing/print_coercion_tables.py +207 -0
  724. numpy/testing/print_coercion_tables.pyi +27 -0
  725. numpy/testing/tests/__init__.py +0 -0
  726. numpy/testing/tests/test_utils.py +1917 -0
  727. numpy/tests/__init__.py +0 -0
  728. numpy/tests/test__all__.py +10 -0
  729. numpy/tests/test_configtool.py +48 -0
  730. numpy/tests/test_ctypeslib.py +377 -0
  731. numpy/tests/test_lazyloading.py +38 -0
  732. numpy/tests/test_matlib.py +59 -0
  733. numpy/tests/test_numpy_config.py +46 -0
  734. numpy/tests/test_numpy_version.py +54 -0
  735. numpy/tests/test_public_api.py +806 -0
  736. numpy/tests/test_reloading.py +74 -0
  737. numpy/tests/test_scripts.py +49 -0
  738. numpy/tests/test_warnings.py +78 -0
  739. numpy/typing/__init__.py +201 -0
  740. numpy/typing/mypy_plugin.py +195 -0
  741. numpy/typing/tests/__init__.py +0 -0
  742. numpy/typing/tests/data/fail/arithmetic.pyi +126 -0
  743. numpy/typing/tests/data/fail/array_constructors.pyi +34 -0
  744. numpy/typing/tests/data/fail/array_like.pyi +15 -0
  745. numpy/typing/tests/data/fail/array_pad.pyi +6 -0
  746. numpy/typing/tests/data/fail/arrayprint.pyi +16 -0
  747. numpy/typing/tests/data/fail/arrayterator.pyi +14 -0
  748. numpy/typing/tests/data/fail/bitwise_ops.pyi +17 -0
  749. numpy/typing/tests/data/fail/char.pyi +65 -0
  750. numpy/typing/tests/data/fail/chararray.pyi +62 -0
  751. numpy/typing/tests/data/fail/comparisons.pyi +27 -0
  752. numpy/typing/tests/data/fail/constants.pyi +3 -0
  753. numpy/typing/tests/data/fail/datasource.pyi +15 -0
  754. numpy/typing/tests/data/fail/dtype.pyi +17 -0
  755. numpy/typing/tests/data/fail/einsumfunc.pyi +12 -0
  756. numpy/typing/tests/data/fail/flatiter.pyi +20 -0
  757. numpy/typing/tests/data/fail/fromnumeric.pyi +148 -0
  758. numpy/typing/tests/data/fail/histograms.pyi +12 -0
  759. numpy/typing/tests/data/fail/index_tricks.pyi +14 -0
  760. numpy/typing/tests/data/fail/lib_function_base.pyi +62 -0
  761. numpy/typing/tests/data/fail/lib_polynomial.pyi +29 -0
  762. numpy/typing/tests/data/fail/lib_utils.pyi +3 -0
  763. numpy/typing/tests/data/fail/lib_version.pyi +6 -0
  764. numpy/typing/tests/data/fail/linalg.pyi +48 -0
  765. numpy/typing/tests/data/fail/ma.pyi +143 -0
  766. numpy/typing/tests/data/fail/memmap.pyi +5 -0
  767. numpy/typing/tests/data/fail/modules.pyi +17 -0
  768. numpy/typing/tests/data/fail/multiarray.pyi +52 -0
  769. numpy/typing/tests/data/fail/ndarray.pyi +11 -0
  770. numpy/typing/tests/data/fail/ndarray_misc.pyi +36 -0
  771. numpy/typing/tests/data/fail/nditer.pyi +8 -0
  772. numpy/typing/tests/data/fail/nested_sequence.pyi +16 -0
  773. numpy/typing/tests/data/fail/npyio.pyi +24 -0
  774. numpy/typing/tests/data/fail/numerictypes.pyi +5 -0
  775. numpy/typing/tests/data/fail/random.pyi +62 -0
  776. numpy/typing/tests/data/fail/rec.pyi +17 -0
  777. numpy/typing/tests/data/fail/scalars.pyi +87 -0
  778. numpy/typing/tests/data/fail/shape.pyi +6 -0
  779. numpy/typing/tests/data/fail/shape_base.pyi +8 -0
  780. numpy/typing/tests/data/fail/stride_tricks.pyi +9 -0
  781. numpy/typing/tests/data/fail/strings.pyi +52 -0
  782. numpy/typing/tests/data/fail/testing.pyi +28 -0
  783. numpy/typing/tests/data/fail/twodim_base.pyi +32 -0
  784. numpy/typing/tests/data/fail/type_check.pyi +13 -0
  785. numpy/typing/tests/data/fail/ufunc_config.pyi +21 -0
  786. numpy/typing/tests/data/fail/ufunclike.pyi +21 -0
  787. numpy/typing/tests/data/fail/ufuncs.pyi +17 -0
  788. numpy/typing/tests/data/fail/warnings_and_errors.pyi +5 -0
  789. numpy/typing/tests/data/misc/extended_precision.pyi +9 -0
  790. numpy/typing/tests/data/mypy.ini +9 -0
  791. numpy/typing/tests/data/pass/arithmetic.py +612 -0
  792. numpy/typing/tests/data/pass/array_constructors.py +137 -0
  793. numpy/typing/tests/data/pass/array_like.py +43 -0
  794. numpy/typing/tests/data/pass/arrayprint.py +37 -0
  795. numpy/typing/tests/data/pass/arrayterator.py +27 -0
  796. numpy/typing/tests/data/pass/bitwise_ops.py +131 -0
  797. numpy/typing/tests/data/pass/comparisons.py +315 -0
  798. numpy/typing/tests/data/pass/dtype.py +57 -0
  799. numpy/typing/tests/data/pass/einsumfunc.py +36 -0
  800. numpy/typing/tests/data/pass/flatiter.py +19 -0
  801. numpy/typing/tests/data/pass/fromnumeric.py +272 -0
  802. numpy/typing/tests/data/pass/index_tricks.py +60 -0
  803. numpy/typing/tests/data/pass/lib_user_array.py +22 -0
  804. numpy/typing/tests/data/pass/lib_utils.py +19 -0
  805. numpy/typing/tests/data/pass/lib_version.py +18 -0
  806. numpy/typing/tests/data/pass/literal.py +51 -0
  807. numpy/typing/tests/data/pass/ma.py +174 -0
  808. numpy/typing/tests/data/pass/mod.py +149 -0
  809. numpy/typing/tests/data/pass/modules.py +45 -0
  810. numpy/typing/tests/data/pass/multiarray.py +76 -0
  811. numpy/typing/tests/data/pass/ndarray_conversion.py +87 -0
  812. numpy/typing/tests/data/pass/ndarray_misc.py +203 -0
  813. numpy/typing/tests/data/pass/ndarray_shape_manipulation.py +47 -0
  814. numpy/typing/tests/data/pass/nditer.py +4 -0
  815. numpy/typing/tests/data/pass/numeric.py +95 -0
  816. numpy/typing/tests/data/pass/numerictypes.py +17 -0
  817. numpy/typing/tests/data/pass/random.py +1497 -0
  818. numpy/typing/tests/data/pass/recfunctions.py +161 -0
  819. numpy/typing/tests/data/pass/scalars.py +248 -0
  820. numpy/typing/tests/data/pass/shape.py +19 -0
  821. numpy/typing/tests/data/pass/simple.py +168 -0
  822. numpy/typing/tests/data/pass/simple_py3.py +6 -0
  823. numpy/typing/tests/data/pass/ufunc_config.py +64 -0
  824. numpy/typing/tests/data/pass/ufunclike.py +47 -0
  825. numpy/typing/tests/data/pass/ufuncs.py +16 -0
  826. numpy/typing/tests/data/pass/warnings_and_errors.py +6 -0
  827. numpy/typing/tests/data/reveal/arithmetic.pyi +720 -0
  828. numpy/typing/tests/data/reveal/array_api_info.pyi +70 -0
  829. numpy/typing/tests/data/reveal/array_constructors.pyi +249 -0
  830. numpy/typing/tests/data/reveal/arraypad.pyi +22 -0
  831. numpy/typing/tests/data/reveal/arrayprint.pyi +25 -0
  832. numpy/typing/tests/data/reveal/arraysetops.pyi +74 -0
  833. numpy/typing/tests/data/reveal/arrayterator.pyi +27 -0
  834. numpy/typing/tests/data/reveal/bitwise_ops.pyi +167 -0
  835. numpy/typing/tests/data/reveal/char.pyi +224 -0
  836. numpy/typing/tests/data/reveal/chararray.pyi +137 -0
  837. numpy/typing/tests/data/reveal/comparisons.pyi +264 -0
  838. numpy/typing/tests/data/reveal/constants.pyi +14 -0
  839. numpy/typing/tests/data/reveal/ctypeslib.pyi +81 -0
  840. numpy/typing/tests/data/reveal/datasource.pyi +23 -0
  841. numpy/typing/tests/data/reveal/dtype.pyi +136 -0
  842. numpy/typing/tests/data/reveal/einsumfunc.pyi +39 -0
  843. numpy/typing/tests/data/reveal/emath.pyi +54 -0
  844. numpy/typing/tests/data/reveal/fft.pyi +37 -0
  845. numpy/typing/tests/data/reveal/flatiter.pyi +47 -0
  846. numpy/typing/tests/data/reveal/fromnumeric.pyi +347 -0
  847. numpy/typing/tests/data/reveal/getlimits.pyi +51 -0
  848. numpy/typing/tests/data/reveal/histograms.pyi +25 -0
  849. numpy/typing/tests/data/reveal/index_tricks.pyi +70 -0
  850. numpy/typing/tests/data/reveal/lib_function_base.pyi +213 -0
  851. numpy/typing/tests/data/reveal/lib_polynomial.pyi +144 -0
  852. numpy/typing/tests/data/reveal/lib_utils.pyi +17 -0
  853. numpy/typing/tests/data/reveal/lib_version.pyi +20 -0
  854. numpy/typing/tests/data/reveal/linalg.pyi +132 -0
  855. numpy/typing/tests/data/reveal/ma.pyi +369 -0
  856. numpy/typing/tests/data/reveal/matrix.pyi +73 -0
  857. numpy/typing/tests/data/reveal/memmap.pyi +19 -0
  858. numpy/typing/tests/data/reveal/mod.pyi +179 -0
  859. numpy/typing/tests/data/reveal/modules.pyi +51 -0
  860. numpy/typing/tests/data/reveal/multiarray.pyi +194 -0
  861. numpy/typing/tests/data/reveal/nbit_base_example.pyi +21 -0
  862. numpy/typing/tests/data/reveal/ndarray_assignability.pyi +77 -0
  863. numpy/typing/tests/data/reveal/ndarray_conversion.pyi +85 -0
  864. numpy/typing/tests/data/reveal/ndarray_misc.pyi +247 -0
  865. numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi +39 -0
  866. numpy/typing/tests/data/reveal/nditer.pyi +49 -0
  867. numpy/typing/tests/data/reveal/nested_sequence.pyi +25 -0
  868. numpy/typing/tests/data/reveal/npyio.pyi +83 -0
  869. numpy/typing/tests/data/reveal/numeric.pyi +134 -0
  870. numpy/typing/tests/data/reveal/numerictypes.pyi +16 -0
  871. numpy/typing/tests/data/reveal/polynomial_polybase.pyi +220 -0
  872. numpy/typing/tests/data/reveal/polynomial_polyutils.pyi +219 -0
  873. numpy/typing/tests/data/reveal/polynomial_series.pyi +138 -0
  874. numpy/typing/tests/data/reveal/random.pyi +1546 -0
  875. numpy/typing/tests/data/reveal/rec.pyi +171 -0
  876. numpy/typing/tests/data/reveal/scalars.pyi +191 -0
  877. numpy/typing/tests/data/reveal/shape.pyi +13 -0
  878. numpy/typing/tests/data/reveal/shape_base.pyi +52 -0
  879. numpy/typing/tests/data/reveal/stride_tricks.pyi +27 -0
  880. numpy/typing/tests/data/reveal/strings.pyi +196 -0
  881. numpy/typing/tests/data/reveal/testing.pyi +198 -0
  882. numpy/typing/tests/data/reveal/twodim_base.pyi +145 -0
  883. numpy/typing/tests/data/reveal/type_check.pyi +67 -0
  884. numpy/typing/tests/data/reveal/ufunc_config.pyi +30 -0
  885. numpy/typing/tests/data/reveal/ufunclike.pyi +31 -0
  886. numpy/typing/tests/data/reveal/ufuncs.pyi +123 -0
  887. numpy/typing/tests/data/reveal/warnings_and_errors.pyi +11 -0
  888. numpy/typing/tests/test_isfile.py +32 -0
  889. numpy/typing/tests/test_runtime.py +102 -0
  890. numpy/typing/tests/test_typing.py +205 -0
  891. numpy/version.py +11 -0
  892. numpy/version.pyi +18 -0
  893. numpy-2.3.5.dist-info/LICENSE.txt +971 -0
  894. numpy-2.3.5.dist-info/METADATA +1093 -0
  895. numpy-2.3.5.dist-info/RECORD +897 -0
  896. numpy-2.3.5.dist-info/WHEEL +6 -0
  897. numpy-2.3.5.dist-info/entry_points.txt +13 -0
@@ -0,0 +1,890 @@
1
+ """
2
+ The arraypad module contains a group of functions to pad values onto the edges
3
+ of an n-dimensional array.
4
+
5
+ """
6
+ import numpy as np
7
+ from numpy._core.overrides import array_function_dispatch
8
+ from numpy.lib._index_tricks_impl import ndindex
9
+
10
+ __all__ = ['pad']
11
+
12
+
13
+ ###############################################################################
14
+ # Private utility functions.
15
+
16
+
17
+ def _round_if_needed(arr, dtype):
18
+ """
19
+ Rounds arr inplace if destination dtype is integer.
20
+
21
+ Parameters
22
+ ----------
23
+ arr : ndarray
24
+ Input array.
25
+ dtype : dtype
26
+ The dtype of the destination array.
27
+ """
28
+ if np.issubdtype(dtype, np.integer):
29
+ arr.round(out=arr)
30
+
31
+
32
+ def _slice_at_axis(sl, axis):
33
+ """
34
+ Construct tuple of slices to slice an array in the given dimension.
35
+
36
+ Parameters
37
+ ----------
38
+ sl : slice
39
+ The slice for the given dimension.
40
+ axis : int
41
+ The axis to which `sl` is applied. All other dimensions are left
42
+ "unsliced".
43
+
44
+ Returns
45
+ -------
46
+ sl : tuple of slices
47
+ A tuple with slices matching `shape` in length.
48
+
49
+ Examples
50
+ --------
51
+ >>> np._slice_at_axis(slice(None, 3, -1), 1)
52
+ (slice(None, None, None), slice(None, 3, -1), (...,))
53
+ """
54
+ return (slice(None),) * axis + (sl,) + (...,)
55
+
56
+
57
+ def _view_roi(array, original_area_slice, axis):
58
+ """
59
+ Get a view of the current region of interest during iterative padding.
60
+
61
+ When padding multiple dimensions iteratively corner values are
62
+ unnecessarily overwritten multiple times. This function reduces the
63
+ working area for the first dimensions so that corners are excluded.
64
+
65
+ Parameters
66
+ ----------
67
+ array : ndarray
68
+ The array with the region of interest.
69
+ original_area_slice : tuple of slices
70
+ Denotes the area with original values of the unpadded array.
71
+ axis : int
72
+ The currently padded dimension assuming that `axis` is padded before
73
+ `axis` + 1.
74
+
75
+ Returns
76
+ -------
77
+ roi : ndarray
78
+ The region of interest of the original `array`.
79
+ """
80
+ axis += 1
81
+ sl = (slice(None),) * axis + original_area_slice[axis:]
82
+ return array[sl]
83
+
84
+
85
+ def _pad_simple(array, pad_width, fill_value=None):
86
+ """
87
+ Pad array on all sides with either a single value or undefined values.
88
+
89
+ Parameters
90
+ ----------
91
+ array : ndarray
92
+ Array to grow.
93
+ pad_width : sequence of tuple[int, int]
94
+ Pad width on both sides for each dimension in `arr`.
95
+ fill_value : scalar, optional
96
+ If provided the padded area is filled with this value, otherwise
97
+ the pad area left undefined.
98
+
99
+ Returns
100
+ -------
101
+ padded : ndarray
102
+ The padded array with the same dtype as`array`. Its order will default
103
+ to C-style if `array` is not F-contiguous.
104
+ original_area_slice : tuple
105
+ A tuple of slices pointing to the area of the original array.
106
+ """
107
+ # Allocate grown array
108
+ new_shape = tuple(
109
+ left + size + right
110
+ for size, (left, right) in zip(array.shape, pad_width)
111
+ )
112
+ order = 'F' if array.flags.fnc else 'C' # Fortran and not also C-order
113
+ padded = np.empty(new_shape, dtype=array.dtype, order=order)
114
+
115
+ if fill_value is not None:
116
+ padded.fill(fill_value)
117
+
118
+ # Copy old array into correct space
119
+ original_area_slice = tuple(
120
+ slice(left, left + size)
121
+ for size, (left, right) in zip(array.shape, pad_width)
122
+ )
123
+ padded[original_area_slice] = array
124
+
125
+ return padded, original_area_slice
126
+
127
+
128
+ def _set_pad_area(padded, axis, width_pair, value_pair):
129
+ """
130
+ Set empty-padded area in given dimension.
131
+
132
+ Parameters
133
+ ----------
134
+ padded : ndarray
135
+ Array with the pad area which is modified inplace.
136
+ axis : int
137
+ Dimension with the pad area to set.
138
+ width_pair : (int, int)
139
+ Pair of widths that mark the pad area on both sides in the given
140
+ dimension.
141
+ value_pair : tuple of scalars or ndarrays
142
+ Values inserted into the pad area on each side. It must match or be
143
+ broadcastable to the shape of `arr`.
144
+ """
145
+ left_slice = _slice_at_axis(slice(None, width_pair[0]), axis)
146
+ padded[left_slice] = value_pair[0]
147
+
148
+ right_slice = _slice_at_axis(
149
+ slice(padded.shape[axis] - width_pair[1], None), axis)
150
+ padded[right_slice] = value_pair[1]
151
+
152
+
153
+ def _get_edges(padded, axis, width_pair):
154
+ """
155
+ Retrieve edge values from empty-padded array in given dimension.
156
+
157
+ Parameters
158
+ ----------
159
+ padded : ndarray
160
+ Empty-padded array.
161
+ axis : int
162
+ Dimension in which the edges are considered.
163
+ width_pair : (int, int)
164
+ Pair of widths that mark the pad area on both sides in the given
165
+ dimension.
166
+
167
+ Returns
168
+ -------
169
+ left_edge, right_edge : ndarray
170
+ Edge values of the valid area in `padded` in the given dimension. Its
171
+ shape will always match `padded` except for the dimension given by
172
+ `axis` which will have a length of 1.
173
+ """
174
+ left_index = width_pair[0]
175
+ left_slice = _slice_at_axis(slice(left_index, left_index + 1), axis)
176
+ left_edge = padded[left_slice]
177
+
178
+ right_index = padded.shape[axis] - width_pair[1]
179
+ right_slice = _slice_at_axis(slice(right_index - 1, right_index), axis)
180
+ right_edge = padded[right_slice]
181
+
182
+ return left_edge, right_edge
183
+
184
+
185
+ def _get_linear_ramps(padded, axis, width_pair, end_value_pair):
186
+ """
187
+ Construct linear ramps for empty-padded array in given dimension.
188
+
189
+ Parameters
190
+ ----------
191
+ padded : ndarray
192
+ Empty-padded array.
193
+ axis : int
194
+ Dimension in which the ramps are constructed.
195
+ width_pair : (int, int)
196
+ Pair of widths that mark the pad area on both sides in the given
197
+ dimension.
198
+ end_value_pair : (scalar, scalar)
199
+ End values for the linear ramps which form the edge of the fully padded
200
+ array. These values are included in the linear ramps.
201
+
202
+ Returns
203
+ -------
204
+ left_ramp, right_ramp : ndarray
205
+ Linear ramps to set on both sides of `padded`.
206
+ """
207
+ edge_pair = _get_edges(padded, axis, width_pair)
208
+
209
+ left_ramp, right_ramp = (
210
+ np.linspace(
211
+ start=end_value,
212
+ stop=edge.squeeze(axis), # Dimension is replaced by linspace
213
+ num=width,
214
+ endpoint=False,
215
+ dtype=padded.dtype,
216
+ axis=axis
217
+ )
218
+ for end_value, edge, width in zip(
219
+ end_value_pair, edge_pair, width_pair
220
+ )
221
+ )
222
+
223
+ # Reverse linear space in appropriate dimension
224
+ right_ramp = right_ramp[_slice_at_axis(slice(None, None, -1), axis)]
225
+
226
+ return left_ramp, right_ramp
227
+
228
+
229
+ def _get_stats(padded, axis, width_pair, length_pair, stat_func):
230
+ """
231
+ Calculate statistic for the empty-padded array in given dimension.
232
+
233
+ Parameters
234
+ ----------
235
+ padded : ndarray
236
+ Empty-padded array.
237
+ axis : int
238
+ Dimension in which the statistic is calculated.
239
+ width_pair : (int, int)
240
+ Pair of widths that mark the pad area on both sides in the given
241
+ dimension.
242
+ length_pair : 2-element sequence of None or int
243
+ Gives the number of values in valid area from each side that is
244
+ taken into account when calculating the statistic. If None the entire
245
+ valid area in `padded` is considered.
246
+ stat_func : function
247
+ Function to compute statistic. The expected signature is
248
+ ``stat_func(x: ndarray, axis: int, keepdims: bool) -> ndarray``.
249
+
250
+ Returns
251
+ -------
252
+ left_stat, right_stat : ndarray
253
+ Calculated statistic for both sides of `padded`.
254
+ """
255
+ # Calculate indices of the edges of the area with original values
256
+ left_index = width_pair[0]
257
+ right_index = padded.shape[axis] - width_pair[1]
258
+ # as well as its length
259
+ max_length = right_index - left_index
260
+
261
+ # Limit stat_lengths to max_length
262
+ left_length, right_length = length_pair
263
+ if left_length is None or max_length < left_length:
264
+ left_length = max_length
265
+ if right_length is None or max_length < right_length:
266
+ right_length = max_length
267
+
268
+ if (left_length == 0 or right_length == 0) \
269
+ and stat_func in {np.amax, np.amin}:
270
+ # amax and amin can't operate on an empty array,
271
+ # raise a more descriptive warning here instead of the default one
272
+ raise ValueError("stat_length of 0 yields no value for padding")
273
+
274
+ # Calculate statistic for the left side
275
+ left_slice = _slice_at_axis(
276
+ slice(left_index, left_index + left_length), axis)
277
+ left_chunk = padded[left_slice]
278
+ left_stat = stat_func(left_chunk, axis=axis, keepdims=True)
279
+ _round_if_needed(left_stat, padded.dtype)
280
+
281
+ if left_length == right_length == max_length:
282
+ # return early as right_stat must be identical to left_stat
283
+ return left_stat, left_stat
284
+
285
+ # Calculate statistic for the right side
286
+ right_slice = _slice_at_axis(
287
+ slice(right_index - right_length, right_index), axis)
288
+ right_chunk = padded[right_slice]
289
+ right_stat = stat_func(right_chunk, axis=axis, keepdims=True)
290
+ _round_if_needed(right_stat, padded.dtype)
291
+
292
+ return left_stat, right_stat
293
+
294
+
295
+ def _set_reflect_both(padded, axis, width_pair, method,
296
+ original_period, include_edge=False):
297
+ """
298
+ Pad `axis` of `arr` with reflection.
299
+
300
+ Parameters
301
+ ----------
302
+ padded : ndarray
303
+ Input array of arbitrary shape.
304
+ axis : int
305
+ Axis along which to pad `arr`.
306
+ width_pair : (int, int)
307
+ Pair of widths that mark the pad area on both sides in the given
308
+ dimension.
309
+ method : str
310
+ Controls method of reflection; options are 'even' or 'odd'.
311
+ original_period : int
312
+ Original length of data on `axis` of `arr`.
313
+ include_edge : bool
314
+ If true, edge value is included in reflection, otherwise the edge
315
+ value forms the symmetric axis to the reflection.
316
+
317
+ Returns
318
+ -------
319
+ pad_amt : tuple of ints, length 2
320
+ New index positions of padding to do along the `axis`. If these are
321
+ both 0, padding is done in this dimension.
322
+ """
323
+ left_pad, right_pad = width_pair
324
+ old_length = padded.shape[axis] - right_pad - left_pad
325
+
326
+ if include_edge:
327
+ # Avoid wrapping with only a subset of the original area
328
+ # by ensuring period can only be a multiple of the original
329
+ # area's length.
330
+ old_length = old_length // original_period * original_period
331
+ # Edge is included, we need to offset the pad amount by 1
332
+ edge_offset = 1
333
+ else:
334
+ # Avoid wrapping with only a subset of the original area
335
+ # by ensuring period can only be a multiple of the original
336
+ # area's length.
337
+ old_length = ((old_length - 1) // (original_period - 1)
338
+ * (original_period - 1) + 1)
339
+ edge_offset = 0 # Edge is not included, no need to offset pad amount
340
+ old_length -= 1 # but must be omitted from the chunk
341
+
342
+ if left_pad > 0:
343
+ # Pad with reflected values on left side:
344
+ # First limit chunk size which can't be larger than pad area
345
+ chunk_length = min(old_length, left_pad)
346
+ # Slice right to left, stop on or next to edge, start relative to stop
347
+ stop = left_pad - edge_offset
348
+ start = stop + chunk_length
349
+ left_slice = _slice_at_axis(slice(start, stop, -1), axis)
350
+ left_chunk = padded[left_slice]
351
+
352
+ if method == "odd":
353
+ # Negate chunk and align with edge
354
+ edge_slice = _slice_at_axis(slice(left_pad, left_pad + 1), axis)
355
+ left_chunk = 2 * padded[edge_slice] - left_chunk
356
+
357
+ # Insert chunk into padded area
358
+ start = left_pad - chunk_length
359
+ stop = left_pad
360
+ pad_area = _slice_at_axis(slice(start, stop), axis)
361
+ padded[pad_area] = left_chunk
362
+ # Adjust pointer to left edge for next iteration
363
+ left_pad -= chunk_length
364
+
365
+ if right_pad > 0:
366
+ # Pad with reflected values on right side:
367
+ # First limit chunk size which can't be larger than pad area
368
+ chunk_length = min(old_length, right_pad)
369
+ # Slice right to left, start on or next to edge, stop relative to start
370
+ start = -right_pad + edge_offset - 2
371
+ stop = start - chunk_length
372
+ right_slice = _slice_at_axis(slice(start, stop, -1), axis)
373
+ right_chunk = padded[right_slice]
374
+
375
+ if method == "odd":
376
+ # Negate chunk and align with edge
377
+ edge_slice = _slice_at_axis(
378
+ slice(-right_pad - 1, -right_pad), axis)
379
+ right_chunk = 2 * padded[edge_slice] - right_chunk
380
+
381
+ # Insert chunk into padded area
382
+ start = padded.shape[axis] - right_pad
383
+ stop = start + chunk_length
384
+ pad_area = _slice_at_axis(slice(start, stop), axis)
385
+ padded[pad_area] = right_chunk
386
+ # Adjust pointer to right edge for next iteration
387
+ right_pad -= chunk_length
388
+
389
+ return left_pad, right_pad
390
+
391
+
392
+ def _set_wrap_both(padded, axis, width_pair, original_period):
393
+ """
394
+ Pad `axis` of `arr` with wrapped values.
395
+
396
+ Parameters
397
+ ----------
398
+ padded : ndarray
399
+ Input array of arbitrary shape.
400
+ axis : int
401
+ Axis along which to pad `arr`.
402
+ width_pair : (int, int)
403
+ Pair of widths that mark the pad area on both sides in the given
404
+ dimension.
405
+ original_period : int
406
+ Original length of data on `axis` of `arr`.
407
+
408
+ Returns
409
+ -------
410
+ pad_amt : tuple of ints, length 2
411
+ New index positions of padding to do along the `axis`. If these are
412
+ both 0, padding is done in this dimension.
413
+ """
414
+ left_pad, right_pad = width_pair
415
+ period = padded.shape[axis] - right_pad - left_pad
416
+ # Avoid wrapping with only a subset of the original area by ensuring period
417
+ # can only be a multiple of the original area's length.
418
+ period = period // original_period * original_period
419
+
420
+ # If the current dimension of `arr` doesn't contain enough valid values
421
+ # (not part of the undefined pad area) we need to pad multiple times.
422
+ # Each time the pad area shrinks on both sides which is communicated with
423
+ # these variables.
424
+ new_left_pad = 0
425
+ new_right_pad = 0
426
+
427
+ if left_pad > 0:
428
+ # Pad with wrapped values on left side
429
+ # First slice chunk from left side of the non-pad area.
430
+ # Use min(period, left_pad) to ensure that chunk is not larger than
431
+ # pad area.
432
+ slice_end = left_pad + period
433
+ slice_start = slice_end - min(period, left_pad)
434
+ right_slice = _slice_at_axis(slice(slice_start, slice_end), axis)
435
+ right_chunk = padded[right_slice]
436
+
437
+ if left_pad > period:
438
+ # Chunk is smaller than pad area
439
+ pad_area = _slice_at_axis(slice(left_pad - period, left_pad), axis)
440
+ new_left_pad = left_pad - period
441
+ else:
442
+ # Chunk matches pad area
443
+ pad_area = _slice_at_axis(slice(None, left_pad), axis)
444
+ padded[pad_area] = right_chunk
445
+
446
+ if right_pad > 0:
447
+ # Pad with wrapped values on right side
448
+ # First slice chunk from right side of the non-pad area.
449
+ # Use min(period, right_pad) to ensure that chunk is not larger than
450
+ # pad area.
451
+ slice_start = -right_pad - period
452
+ slice_end = slice_start + min(period, right_pad)
453
+ left_slice = _slice_at_axis(slice(slice_start, slice_end), axis)
454
+ left_chunk = padded[left_slice]
455
+
456
+ if right_pad > period:
457
+ # Chunk is smaller than pad area
458
+ pad_area = _slice_at_axis(
459
+ slice(-right_pad, -right_pad + period), axis)
460
+ new_right_pad = right_pad - period
461
+ else:
462
+ # Chunk matches pad area
463
+ pad_area = _slice_at_axis(slice(-right_pad, None), axis)
464
+ padded[pad_area] = left_chunk
465
+
466
+ return new_left_pad, new_right_pad
467
+
468
+
469
+ def _as_pairs(x, ndim, as_index=False):
470
+ """
471
+ Broadcast `x` to an array with the shape (`ndim`, 2).
472
+
473
+ A helper function for `pad` that prepares and validates arguments like
474
+ `pad_width` for iteration in pairs.
475
+
476
+ Parameters
477
+ ----------
478
+ x : {None, scalar, array-like}
479
+ The object to broadcast to the shape (`ndim`, 2).
480
+ ndim : int
481
+ Number of pairs the broadcasted `x` will have.
482
+ as_index : bool, optional
483
+ If `x` is not None, try to round each element of `x` to an integer
484
+ (dtype `np.intp`) and ensure every element is positive.
485
+
486
+ Returns
487
+ -------
488
+ pairs : nested iterables, shape (`ndim`, 2)
489
+ The broadcasted version of `x`.
490
+
491
+ Raises
492
+ ------
493
+ ValueError
494
+ If `as_index` is True and `x` contains negative elements.
495
+ Or if `x` is not broadcastable to the shape (`ndim`, 2).
496
+ """
497
+ if x is None:
498
+ # Pass through None as a special case, otherwise np.round(x) fails
499
+ # with an AttributeError
500
+ return ((None, None),) * ndim
501
+
502
+ x = np.array(x)
503
+ if as_index:
504
+ x = np.round(x).astype(np.intp, copy=False)
505
+
506
+ if x.ndim < 3:
507
+ # Optimization: Possibly use faster paths for cases where `x` has
508
+ # only 1 or 2 elements. `np.broadcast_to` could handle these as well
509
+ # but is currently slower
510
+
511
+ if x.size == 1:
512
+ # x was supplied as a single value
513
+ x = x.ravel() # Ensure x[0] works for x.ndim == 0, 1, 2
514
+ if as_index and x < 0:
515
+ raise ValueError("index can't contain negative values")
516
+ return ((x[0], x[0]),) * ndim
517
+
518
+ if x.size == 2 and x.shape != (2, 1):
519
+ # x was supplied with a single value for each side
520
+ # but except case when each dimension has a single value
521
+ # which should be broadcasted to a pair,
522
+ # e.g. [[1], [2]] -> [[1, 1], [2, 2]] not [[1, 2], [1, 2]]
523
+ x = x.ravel() # Ensure x[0], x[1] works
524
+ if as_index and (x[0] < 0 or x[1] < 0):
525
+ raise ValueError("index can't contain negative values")
526
+ return ((x[0], x[1]),) * ndim
527
+
528
+ if as_index and x.min() < 0:
529
+ raise ValueError("index can't contain negative values")
530
+
531
+ # Converting the array with `tolist` seems to improve performance
532
+ # when iterating and indexing the result (see usage in `pad`)
533
+ return np.broadcast_to(x, (ndim, 2)).tolist()
534
+
535
+
536
+ def _pad_dispatcher(array, pad_width, mode=None, **kwargs):
537
+ return (array,)
538
+
539
+
540
+ ###############################################################################
541
+ # Public functions
542
+
543
+
544
+ @array_function_dispatch(_pad_dispatcher, module='numpy')
545
+ def pad(array, pad_width, mode='constant', **kwargs):
546
+ """
547
+ Pad an array.
548
+
549
+ Parameters
550
+ ----------
551
+ array : array_like of rank N
552
+ The array to pad.
553
+ pad_width : {sequence, array_like, int}
554
+ Number of values padded to the edges of each axis.
555
+ ``((before_1, after_1), ... (before_N, after_N))`` unique pad widths
556
+ for each axis.
557
+ ``(before, after)`` or ``((before, after),)`` yields same before
558
+ and after pad for each axis.
559
+ ``(pad,)`` or ``int`` is a shortcut for before = after = pad width
560
+ for all axes.
561
+ mode : str or function, optional
562
+ One of the following string values or a user supplied function.
563
+
564
+ 'constant' (default)
565
+ Pads with a constant value.
566
+ 'edge'
567
+ Pads with the edge values of array.
568
+ 'linear_ramp'
569
+ Pads with the linear ramp between end_value and the
570
+ array edge value.
571
+ 'maximum'
572
+ Pads with the maximum value of all or part of the
573
+ vector along each axis.
574
+ 'mean'
575
+ Pads with the mean value of all or part of the
576
+ vector along each axis.
577
+ 'median'
578
+ Pads with the median value of all or part of the
579
+ vector along each axis.
580
+ 'minimum'
581
+ Pads with the minimum value of all or part of the
582
+ vector along each axis.
583
+ 'reflect'
584
+ Pads with the reflection of the vector mirrored on
585
+ the first and last values of the vector along each
586
+ axis.
587
+ 'symmetric'
588
+ Pads with the reflection of the vector mirrored
589
+ along the edge of the array.
590
+ 'wrap'
591
+ Pads with the wrap of the vector along the axis.
592
+ The first values are used to pad the end and the
593
+ end values are used to pad the beginning.
594
+ 'empty'
595
+ Pads with undefined values.
596
+
597
+ <function>
598
+ Padding function, see Notes.
599
+ stat_length : sequence or int, optional
600
+ Used in 'maximum', 'mean', 'median', and 'minimum'. Number of
601
+ values at edge of each axis used to calculate the statistic value.
602
+
603
+ ``((before_1, after_1), ... (before_N, after_N))`` unique statistic
604
+ lengths for each axis.
605
+
606
+ ``(before, after)`` or ``((before, after),)`` yields same before
607
+ and after statistic lengths for each axis.
608
+
609
+ ``(stat_length,)`` or ``int`` is a shortcut for
610
+ ``before = after = statistic`` length for all axes.
611
+
612
+ Default is ``None``, to use the entire axis.
613
+ constant_values : sequence or scalar, optional
614
+ Used in 'constant'. The values to set the padded values for each
615
+ axis.
616
+
617
+ ``((before_1, after_1), ... (before_N, after_N))`` unique pad constants
618
+ for each axis.
619
+
620
+ ``(before, after)`` or ``((before, after),)`` yields same before
621
+ and after constants for each axis.
622
+
623
+ ``(constant,)`` or ``constant`` is a shortcut for
624
+ ``before = after = constant`` for all axes.
625
+
626
+ Default is 0.
627
+ end_values : sequence or scalar, optional
628
+ Used in 'linear_ramp'. The values used for the ending value of the
629
+ linear_ramp and that will form the edge of the padded array.
630
+
631
+ ``((before_1, after_1), ... (before_N, after_N))`` unique end values
632
+ for each axis.
633
+
634
+ ``(before, after)`` or ``((before, after),)`` yields same before
635
+ and after end values for each axis.
636
+
637
+ ``(constant,)`` or ``constant`` is a shortcut for
638
+ ``before = after = constant`` for all axes.
639
+
640
+ Default is 0.
641
+ reflect_type : {'even', 'odd'}, optional
642
+ Used in 'reflect', and 'symmetric'. The 'even' style is the
643
+ default with an unaltered reflection around the edge value. For
644
+ the 'odd' style, the extended part of the array is created by
645
+ subtracting the reflected values from two times the edge value.
646
+
647
+ Returns
648
+ -------
649
+ pad : ndarray
650
+ Padded array of rank equal to `array` with shape increased
651
+ according to `pad_width`.
652
+
653
+ Notes
654
+ -----
655
+ For an array with rank greater than 1, some of the padding of later
656
+ axes is calculated from padding of previous axes. This is easiest to
657
+ think about with a rank 2 array where the corners of the padded array
658
+ are calculated by using padded values from the first axis.
659
+
660
+ The padding function, if used, should modify a rank 1 array in-place. It
661
+ has the following signature::
662
+
663
+ padding_func(vector, iaxis_pad_width, iaxis, kwargs)
664
+
665
+ where
666
+
667
+ vector : ndarray
668
+ A rank 1 array already padded with zeros. Padded values are
669
+ vector[:iaxis_pad_width[0]] and vector[-iaxis_pad_width[1]:].
670
+ iaxis_pad_width : tuple
671
+ A 2-tuple of ints, iaxis_pad_width[0] represents the number of
672
+ values padded at the beginning of vector where
673
+ iaxis_pad_width[1] represents the number of values padded at
674
+ the end of vector.
675
+ iaxis : int
676
+ The axis currently being calculated.
677
+ kwargs : dict
678
+ Any keyword arguments the function requires.
679
+
680
+ Examples
681
+ --------
682
+ >>> import numpy as np
683
+ >>> a = [1, 2, 3, 4, 5]
684
+ >>> np.pad(a, (2, 3), 'constant', constant_values=(4, 6))
685
+ array([4, 4, 1, ..., 6, 6, 6])
686
+
687
+ >>> np.pad(a, (2, 3), 'edge')
688
+ array([1, 1, 1, ..., 5, 5, 5])
689
+
690
+ >>> np.pad(a, (2, 3), 'linear_ramp', end_values=(5, -4))
691
+ array([ 5, 3, 1, 2, 3, 4, 5, 2, -1, -4])
692
+
693
+ >>> np.pad(a, (2,), 'maximum')
694
+ array([5, 5, 1, 2, 3, 4, 5, 5, 5])
695
+
696
+ >>> np.pad(a, (2,), 'mean')
697
+ array([3, 3, 1, 2, 3, 4, 5, 3, 3])
698
+
699
+ >>> np.pad(a, (2,), 'median')
700
+ array([3, 3, 1, 2, 3, 4, 5, 3, 3])
701
+
702
+ >>> a = [[1, 2], [3, 4]]
703
+ >>> np.pad(a, ((3, 2), (2, 3)), 'minimum')
704
+ array([[1, 1, 1, 2, 1, 1, 1],
705
+ [1, 1, 1, 2, 1, 1, 1],
706
+ [1, 1, 1, 2, 1, 1, 1],
707
+ [1, 1, 1, 2, 1, 1, 1],
708
+ [3, 3, 3, 4, 3, 3, 3],
709
+ [1, 1, 1, 2, 1, 1, 1],
710
+ [1, 1, 1, 2, 1, 1, 1]])
711
+
712
+ >>> a = [1, 2, 3, 4, 5]
713
+ >>> np.pad(a, (2, 3), 'reflect')
714
+ array([3, 2, 1, 2, 3, 4, 5, 4, 3, 2])
715
+
716
+ >>> np.pad(a, (2, 3), 'reflect', reflect_type='odd')
717
+ array([-1, 0, 1, 2, 3, 4, 5, 6, 7, 8])
718
+
719
+ >>> np.pad(a, (2, 3), 'symmetric')
720
+ array([2, 1, 1, 2, 3, 4, 5, 5, 4, 3])
721
+
722
+ >>> np.pad(a, (2, 3), 'symmetric', reflect_type='odd')
723
+ array([0, 1, 1, 2, 3, 4, 5, 5, 6, 7])
724
+
725
+ >>> np.pad(a, (2, 3), 'wrap')
726
+ array([4, 5, 1, 2, 3, 4, 5, 1, 2, 3])
727
+
728
+ >>> def pad_with(vector, pad_width, iaxis, kwargs):
729
+ ... pad_value = kwargs.get('padder', 10)
730
+ ... vector[:pad_width[0]] = pad_value
731
+ ... vector[-pad_width[1]:] = pad_value
732
+ >>> a = np.arange(6)
733
+ >>> a = a.reshape((2, 3))
734
+ >>> np.pad(a, 2, pad_with)
735
+ array([[10, 10, 10, 10, 10, 10, 10],
736
+ [10, 10, 10, 10, 10, 10, 10],
737
+ [10, 10, 0, 1, 2, 10, 10],
738
+ [10, 10, 3, 4, 5, 10, 10],
739
+ [10, 10, 10, 10, 10, 10, 10],
740
+ [10, 10, 10, 10, 10, 10, 10]])
741
+ >>> np.pad(a, 2, pad_with, padder=100)
742
+ array([[100, 100, 100, 100, 100, 100, 100],
743
+ [100, 100, 100, 100, 100, 100, 100],
744
+ [100, 100, 0, 1, 2, 100, 100],
745
+ [100, 100, 3, 4, 5, 100, 100],
746
+ [100, 100, 100, 100, 100, 100, 100],
747
+ [100, 100, 100, 100, 100, 100, 100]])
748
+ """
749
+ array = np.asarray(array)
750
+ pad_width = np.asarray(pad_width)
751
+
752
+ if not pad_width.dtype.kind == 'i':
753
+ raise TypeError('`pad_width` must be of integral type.')
754
+
755
+ # Broadcast to shape (array.ndim, 2)
756
+ pad_width = _as_pairs(pad_width, array.ndim, as_index=True)
757
+
758
+ if callable(mode):
759
+ # Old behavior: Use user-supplied function with np.apply_along_axis
760
+ function = mode
761
+ # Create a new zero padded array
762
+ padded, _ = _pad_simple(array, pad_width, fill_value=0)
763
+ # And apply along each axis
764
+
765
+ for axis in range(padded.ndim):
766
+ # Iterate using ndindex as in apply_along_axis, but assuming that
767
+ # function operates inplace on the padded array.
768
+
769
+ # view with the iteration axis at the end
770
+ view = np.moveaxis(padded, axis, -1)
771
+
772
+ # compute indices for the iteration axes, and append a trailing
773
+ # ellipsis to prevent 0d arrays decaying to scalars (gh-8642)
774
+ inds = ndindex(view.shape[:-1])
775
+ inds = (ind + (Ellipsis,) for ind in inds)
776
+ for ind in inds:
777
+ function(view[ind], pad_width[axis], axis, kwargs)
778
+
779
+ return padded
780
+
781
+ # Make sure that no unsupported keywords were passed for the current mode
782
+ allowed_kwargs = {
783
+ 'empty': [], 'edge': [], 'wrap': [],
784
+ 'constant': ['constant_values'],
785
+ 'linear_ramp': ['end_values'],
786
+ 'maximum': ['stat_length'],
787
+ 'mean': ['stat_length'],
788
+ 'median': ['stat_length'],
789
+ 'minimum': ['stat_length'],
790
+ 'reflect': ['reflect_type'],
791
+ 'symmetric': ['reflect_type'],
792
+ }
793
+ try:
794
+ unsupported_kwargs = set(kwargs) - set(allowed_kwargs[mode])
795
+ except KeyError:
796
+ raise ValueError(f"mode '{mode}' is not supported") from None
797
+ if unsupported_kwargs:
798
+ raise ValueError("unsupported keyword arguments for mode "
799
+ f"'{mode}': {unsupported_kwargs}")
800
+
801
+ stat_functions = {"maximum": np.amax, "minimum": np.amin,
802
+ "mean": np.mean, "median": np.median}
803
+
804
+ # Create array with final shape and original values
805
+ # (padded area is undefined)
806
+ padded, original_area_slice = _pad_simple(array, pad_width)
807
+ # And prepare iteration over all dimensions
808
+ # (zipping may be more readable than using enumerate)
809
+ axes = range(padded.ndim)
810
+
811
+ if mode == "constant":
812
+ values = kwargs.get("constant_values", 0)
813
+ values = _as_pairs(values, padded.ndim)
814
+ for axis, width_pair, value_pair in zip(axes, pad_width, values):
815
+ roi = _view_roi(padded, original_area_slice, axis)
816
+ _set_pad_area(roi, axis, width_pair, value_pair)
817
+
818
+ elif mode == "empty":
819
+ pass # Do nothing as _pad_simple already returned the correct result
820
+
821
+ elif array.size == 0:
822
+ # Only modes "constant" and "empty" can extend empty axes, all other
823
+ # modes depend on `array` not being empty
824
+ # -> ensure every empty axis is only "padded with 0"
825
+ for axis, width_pair in zip(axes, pad_width):
826
+ if array.shape[axis] == 0 and any(width_pair):
827
+ raise ValueError(
828
+ f"can't extend empty axis {axis} using modes other than "
829
+ "'constant' or 'empty'"
830
+ )
831
+ # passed, don't need to do anything more as _pad_simple already
832
+ # returned the correct result
833
+
834
+ elif mode == "edge":
835
+ for axis, width_pair in zip(axes, pad_width):
836
+ roi = _view_roi(padded, original_area_slice, axis)
837
+ edge_pair = _get_edges(roi, axis, width_pair)
838
+ _set_pad_area(roi, axis, width_pair, edge_pair)
839
+
840
+ elif mode == "linear_ramp":
841
+ end_values = kwargs.get("end_values", 0)
842
+ end_values = _as_pairs(end_values, padded.ndim)
843
+ for axis, width_pair, value_pair in zip(axes, pad_width, end_values):
844
+ roi = _view_roi(padded, original_area_slice, axis)
845
+ ramp_pair = _get_linear_ramps(roi, axis, width_pair, value_pair)
846
+ _set_pad_area(roi, axis, width_pair, ramp_pair)
847
+
848
+ elif mode in stat_functions:
849
+ func = stat_functions[mode]
850
+ length = kwargs.get("stat_length")
851
+ length = _as_pairs(length, padded.ndim, as_index=True)
852
+ for axis, width_pair, length_pair in zip(axes, pad_width, length):
853
+ roi = _view_roi(padded, original_area_slice, axis)
854
+ stat_pair = _get_stats(roi, axis, width_pair, length_pair, func)
855
+ _set_pad_area(roi, axis, width_pair, stat_pair)
856
+
857
+ elif mode in {"reflect", "symmetric"}:
858
+ method = kwargs.get("reflect_type", "even")
859
+ include_edge = mode == "symmetric"
860
+ for axis, (left_index, right_index) in zip(axes, pad_width):
861
+ if array.shape[axis] == 1 and (left_index > 0 or right_index > 0):
862
+ # Extending singleton dimension for 'reflect' is legacy
863
+ # behavior; it really should raise an error.
864
+ edge_pair = _get_edges(padded, axis, (left_index, right_index))
865
+ _set_pad_area(
866
+ padded, axis, (left_index, right_index), edge_pair)
867
+ continue
868
+
869
+ roi = _view_roi(padded, original_area_slice, axis)
870
+ while left_index > 0 or right_index > 0:
871
+ # Iteratively pad until dimension is filled with reflected
872
+ # values. This is necessary if the pad area is larger than
873
+ # the length of the original values in the current dimension.
874
+ left_index, right_index = _set_reflect_both(
875
+ roi, axis, (left_index, right_index),
876
+ method, array.shape[axis], include_edge
877
+ )
878
+
879
+ elif mode == "wrap":
880
+ for axis, (left_index, right_index) in zip(axes, pad_width):
881
+ roi = _view_roi(padded, original_area_slice, axis)
882
+ original_period = padded.shape[axis] - right_index - left_index
883
+ while left_index > 0 or right_index > 0:
884
+ # Iteratively pad until dimension is filled with wrapped
885
+ # values. This is necessary if the pad area is larger than
886
+ # the length of the original values in the current dimension.
887
+ left_index, right_index = _set_wrap_both(
888
+ roi, axis, (left_index, right_index), original_period)
889
+
890
+ return padded