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
numpy/_core/strings.py ADDED
@@ -0,0 +1,1829 @@
1
+ """
2
+ This module contains a set of functions for vectorized string
3
+ operations.
4
+ """
5
+
6
+ import functools
7
+ import sys
8
+
9
+ import numpy as np
10
+ from numpy import (
11
+ add,
12
+ equal,
13
+ greater,
14
+ greater_equal,
15
+ less,
16
+ less_equal,
17
+ not_equal,
18
+ )
19
+ from numpy import (
20
+ multiply as _multiply_ufunc,
21
+ )
22
+ from numpy._core.multiarray import _vec_string
23
+ from numpy._core.overrides import array_function_dispatch, set_module
24
+ from numpy._core.umath import (
25
+ _center,
26
+ _expandtabs,
27
+ _expandtabs_length,
28
+ _ljust,
29
+ _lstrip_chars,
30
+ _lstrip_whitespace,
31
+ _partition,
32
+ _partition_index,
33
+ _replace,
34
+ _rjust,
35
+ _rpartition,
36
+ _rpartition_index,
37
+ _rstrip_chars,
38
+ _rstrip_whitespace,
39
+ _slice,
40
+ _strip_chars,
41
+ _strip_whitespace,
42
+ _zfill,
43
+ isalnum,
44
+ isalpha,
45
+ isdecimal,
46
+ isdigit,
47
+ islower,
48
+ isnumeric,
49
+ isspace,
50
+ istitle,
51
+ isupper,
52
+ str_len,
53
+ )
54
+ from numpy._core.umath import (
55
+ count as _count_ufunc,
56
+ )
57
+ from numpy._core.umath import (
58
+ endswith as _endswith_ufunc,
59
+ )
60
+ from numpy._core.umath import (
61
+ find as _find_ufunc,
62
+ )
63
+ from numpy._core.umath import (
64
+ index as _index_ufunc,
65
+ )
66
+ from numpy._core.umath import (
67
+ rfind as _rfind_ufunc,
68
+ )
69
+ from numpy._core.umath import (
70
+ rindex as _rindex_ufunc,
71
+ )
72
+ from numpy._core.umath import (
73
+ startswith as _startswith_ufunc,
74
+ )
75
+
76
+
77
+ def _override___module__():
78
+ for ufunc in [
79
+ isalnum, isalpha, isdecimal, isdigit, islower, isnumeric, isspace,
80
+ istitle, isupper, str_len,
81
+ ]:
82
+ ufunc.__module__ = "numpy.strings"
83
+ ufunc.__qualname__ = ufunc.__name__
84
+
85
+
86
+ _override___module__()
87
+
88
+
89
+ __all__ = [
90
+ # UFuncs
91
+ "equal", "not_equal", "less", "less_equal", "greater", "greater_equal",
92
+ "add", "multiply", "isalpha", "isdigit", "isspace", "isalnum", "islower",
93
+ "isupper", "istitle", "isdecimal", "isnumeric", "str_len", "find",
94
+ "rfind", "index", "rindex", "count", "startswith", "endswith", "lstrip",
95
+ "rstrip", "strip", "replace", "expandtabs", "center", "ljust", "rjust",
96
+ "zfill", "partition", "rpartition", "slice",
97
+
98
+ # _vec_string - Will gradually become ufuncs as well
99
+ "upper", "lower", "swapcase", "capitalize", "title",
100
+
101
+ # _vec_string - Will probably not become ufuncs
102
+ "mod", "decode", "encode", "translate",
103
+
104
+ # Removed from namespace until behavior has been crystallized
105
+ # "join", "split", "rsplit", "splitlines",
106
+ ]
107
+
108
+
109
+ MAX = np.iinfo(np.int64).max
110
+
111
+ array_function_dispatch = functools.partial(
112
+ array_function_dispatch, module='numpy.strings')
113
+
114
+
115
+ def _get_num_chars(a):
116
+ """
117
+ Helper function that returns the number of characters per field in
118
+ a string or unicode array. This is to abstract out the fact that
119
+ for a unicode array this is itemsize / 4.
120
+ """
121
+ if issubclass(a.dtype.type, np.str_):
122
+ return a.itemsize // 4
123
+ return a.itemsize
124
+
125
+
126
+ def _to_bytes_or_str_array(result, output_dtype_like):
127
+ """
128
+ Helper function to cast a result back into an array
129
+ with the appropriate dtype if an object array must be used
130
+ as an intermediary.
131
+ """
132
+ output_dtype_like = np.asarray(output_dtype_like)
133
+ if result.size == 0:
134
+ # Calling asarray & tolist in an empty array would result
135
+ # in losing shape information
136
+ return result.astype(output_dtype_like.dtype)
137
+ ret = np.asarray(result.tolist())
138
+ if isinstance(output_dtype_like.dtype, np.dtypes.StringDType):
139
+ return ret.astype(type(output_dtype_like.dtype))
140
+ return ret.astype(type(output_dtype_like.dtype)(_get_num_chars(ret)))
141
+
142
+
143
+ def _clean_args(*args):
144
+ """
145
+ Helper function for delegating arguments to Python string
146
+ functions.
147
+
148
+ Many of the Python string operations that have optional arguments
149
+ do not use 'None' to indicate a default value. In these cases,
150
+ we need to remove all None arguments, and those following them.
151
+ """
152
+ newargs = []
153
+ for chk in args:
154
+ if chk is None:
155
+ break
156
+ newargs.append(chk)
157
+ return newargs
158
+
159
+
160
+ def _multiply_dispatcher(a, i):
161
+ return (a,)
162
+
163
+
164
+ @set_module("numpy.strings")
165
+ @array_function_dispatch(_multiply_dispatcher)
166
+ def multiply(a, i):
167
+ """
168
+ Return (a * i), that is string multiple concatenation,
169
+ element-wise.
170
+
171
+ Values in ``i`` of less than 0 are treated as 0 (which yields an
172
+ empty string).
173
+
174
+ Parameters
175
+ ----------
176
+ a : array_like, with ``StringDType``, ``bytes_`` or ``str_`` dtype
177
+
178
+ i : array_like, with any integer dtype
179
+
180
+ Returns
181
+ -------
182
+ out : ndarray
183
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
184
+ depending on input types
185
+
186
+ Examples
187
+ --------
188
+ >>> import numpy as np
189
+ >>> a = np.array(["a", "b", "c"])
190
+ >>> np.strings.multiply(a, 3)
191
+ array(['aaa', 'bbb', 'ccc'], dtype='<U3')
192
+ >>> i = np.array([1, 2, 3])
193
+ >>> np.strings.multiply(a, i)
194
+ array(['a', 'bb', 'ccc'], dtype='<U3')
195
+ >>> np.strings.multiply(np.array(['a']), i)
196
+ array(['a', 'aa', 'aaa'], dtype='<U3')
197
+ >>> a = np.array(['a', 'b', 'c', 'd', 'e', 'f']).reshape((2, 3))
198
+ >>> np.strings.multiply(a, 3)
199
+ array([['aaa', 'bbb', 'ccc'],
200
+ ['ddd', 'eee', 'fff']], dtype='<U3')
201
+ >>> np.strings.multiply(a, i)
202
+ array([['a', 'bb', 'ccc'],
203
+ ['d', 'ee', 'fff']], dtype='<U3')
204
+
205
+ """
206
+ a = np.asanyarray(a)
207
+
208
+ i = np.asanyarray(i)
209
+ if not np.issubdtype(i.dtype, np.integer):
210
+ raise TypeError(f"unsupported type {i.dtype} for operand 'i'")
211
+ i = np.maximum(i, 0)
212
+
213
+ # delegate to stringdtype loops that also do overflow checking
214
+ if a.dtype.char == "T":
215
+ return a * i
216
+
217
+ a_len = str_len(a)
218
+
219
+ # Ensure we can do a_len * i without overflow.
220
+ if np.any(a_len > sys.maxsize / np.maximum(i, 1)):
221
+ raise OverflowError("Overflow encountered in string multiply")
222
+
223
+ buffersizes = a_len * i
224
+ out_dtype = f"{a.dtype.char}{buffersizes.max()}"
225
+ out = np.empty_like(a, shape=buffersizes.shape, dtype=out_dtype)
226
+ return _multiply_ufunc(a, i, out=out)
227
+
228
+
229
+ def _mod_dispatcher(a, values):
230
+ return (a, values)
231
+
232
+
233
+ @set_module("numpy.strings")
234
+ @array_function_dispatch(_mod_dispatcher)
235
+ def mod(a, values):
236
+ """
237
+ Return (a % i), that is pre-Python 2.6 string formatting
238
+ (interpolation), element-wise for a pair of array_likes of str
239
+ or unicode.
240
+
241
+ Parameters
242
+ ----------
243
+ a : array_like, with `np.bytes_` or `np.str_` dtype
244
+
245
+ values : array_like of values
246
+ These values will be element-wise interpolated into the string.
247
+
248
+ Returns
249
+ -------
250
+ out : ndarray
251
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
252
+ depending on input types
253
+
254
+ Examples
255
+ --------
256
+ >>> import numpy as np
257
+ >>> a = np.array(["NumPy is a %s library"])
258
+ >>> np.strings.mod(a, values=["Python"])
259
+ array(['NumPy is a Python library'], dtype='<U25')
260
+
261
+ >>> a = np.array([b'%d bytes', b'%d bits'])
262
+ >>> values = np.array([8, 64])
263
+ >>> np.strings.mod(a, values)
264
+ array([b'8 bytes', b'64 bits'], dtype='|S7')
265
+
266
+ """
267
+ return _to_bytes_or_str_array(
268
+ _vec_string(a, np.object_, '__mod__', (values,)), a)
269
+
270
+
271
+ @set_module("numpy.strings")
272
+ def find(a, sub, start=0, end=None):
273
+ """
274
+ For each element, return the lowest index in the string where
275
+ substring ``sub`` is found, such that ``sub`` is contained in the
276
+ range [``start``, ``end``).
277
+
278
+ Parameters
279
+ ----------
280
+ a : array_like, with ``StringDType``, ``bytes_`` or ``str_`` dtype
281
+
282
+ sub : array_like, with `np.bytes_` or `np.str_` dtype
283
+ The substring to search for.
284
+
285
+ start, end : array_like, with any integer dtype
286
+ The range to look in, interpreted as in slice notation.
287
+
288
+ Returns
289
+ -------
290
+ y : ndarray
291
+ Output array of ints
292
+
293
+ See Also
294
+ --------
295
+ str.find
296
+
297
+ Examples
298
+ --------
299
+ >>> import numpy as np
300
+ >>> a = np.array(["NumPy is a Python library"])
301
+ >>> np.strings.find(a, "Python")
302
+ array([11])
303
+
304
+ """
305
+ end = end if end is not None else MAX
306
+ return _find_ufunc(a, sub, start, end)
307
+
308
+
309
+ @set_module("numpy.strings")
310
+ def rfind(a, sub, start=0, end=None):
311
+ """
312
+ For each element, return the highest index in the string where
313
+ substring ``sub`` is found, such that ``sub`` is contained in the
314
+ range [``start``, ``end``).
315
+
316
+ Parameters
317
+ ----------
318
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
319
+
320
+ sub : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
321
+ The substring to search for.
322
+
323
+ start, end : array_like, with any integer dtype
324
+ The range to look in, interpreted as in slice notation.
325
+
326
+ Returns
327
+ -------
328
+ y : ndarray
329
+ Output array of ints
330
+
331
+ See Also
332
+ --------
333
+ str.rfind
334
+
335
+ Examples
336
+ --------
337
+ >>> import numpy as np
338
+ >>> a = np.array(["Computer Science"])
339
+ >>> np.strings.rfind(a, "Science", start=0, end=None)
340
+ array([9])
341
+ >>> np.strings.rfind(a, "Science", start=0, end=8)
342
+ array([-1])
343
+ >>> b = np.array(["Computer Science", "Science"])
344
+ >>> np.strings.rfind(b, "Science", start=0, end=None)
345
+ array([9, 0])
346
+
347
+ """
348
+ end = end if end is not None else MAX
349
+ return _rfind_ufunc(a, sub, start, end)
350
+
351
+
352
+ @set_module("numpy.strings")
353
+ def index(a, sub, start=0, end=None):
354
+ """
355
+ Like `find`, but raises :exc:`ValueError` when the substring is not found.
356
+
357
+ Parameters
358
+ ----------
359
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
360
+
361
+ sub : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
362
+
363
+ start, end : array_like, with any integer dtype, optional
364
+
365
+ Returns
366
+ -------
367
+ out : ndarray
368
+ Output array of ints.
369
+
370
+ See Also
371
+ --------
372
+ find, str.index
373
+
374
+ Examples
375
+ --------
376
+ >>> import numpy as np
377
+ >>> a = np.array(["Computer Science"])
378
+ >>> np.strings.index(a, "Science", start=0, end=None)
379
+ array([9])
380
+
381
+ """
382
+ end = end if end is not None else MAX
383
+ return _index_ufunc(a, sub, start, end)
384
+
385
+
386
+ @set_module("numpy.strings")
387
+ def rindex(a, sub, start=0, end=None):
388
+ """
389
+ Like `rfind`, but raises :exc:`ValueError` when the substring `sub` is
390
+ not found.
391
+
392
+ Parameters
393
+ ----------
394
+ a : array-like, with `np.bytes_` or `np.str_` dtype
395
+
396
+ sub : array-like, with `np.bytes_` or `np.str_` dtype
397
+
398
+ start, end : array-like, with any integer dtype, optional
399
+
400
+ Returns
401
+ -------
402
+ out : ndarray
403
+ Output array of ints.
404
+
405
+ See Also
406
+ --------
407
+ rfind, str.rindex
408
+
409
+ Examples
410
+ --------
411
+ >>> a = np.array(["Computer Science"])
412
+ >>> np.strings.rindex(a, "Science", start=0, end=None)
413
+ array([9])
414
+
415
+ """
416
+ end = end if end is not None else MAX
417
+ return _rindex_ufunc(a, sub, start, end)
418
+
419
+
420
+ @set_module("numpy.strings")
421
+ def count(a, sub, start=0, end=None):
422
+ """
423
+ Returns an array with the number of non-overlapping occurrences of
424
+ substring ``sub`` in the range [``start``, ``end``).
425
+
426
+ Parameters
427
+ ----------
428
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
429
+
430
+ sub : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
431
+ The substring to search for.
432
+
433
+ start, end : array_like, with any integer dtype
434
+ The range to look in, interpreted as in slice notation.
435
+
436
+ Returns
437
+ -------
438
+ y : ndarray
439
+ Output array of ints
440
+
441
+ See Also
442
+ --------
443
+ str.count
444
+
445
+ Examples
446
+ --------
447
+ >>> import numpy as np
448
+ >>> c = np.array(['aAaAaA', ' aA ', 'abBABba'])
449
+ >>> c
450
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
451
+ >>> np.strings.count(c, 'A')
452
+ array([3, 1, 1])
453
+ >>> np.strings.count(c, 'aA')
454
+ array([3, 1, 0])
455
+ >>> np.strings.count(c, 'A', start=1, end=4)
456
+ array([2, 1, 1])
457
+ >>> np.strings.count(c, 'A', start=1, end=3)
458
+ array([1, 0, 0])
459
+
460
+ """
461
+ end = end if end is not None else MAX
462
+ return _count_ufunc(a, sub, start, end)
463
+
464
+
465
+ @set_module("numpy.strings")
466
+ def startswith(a, prefix, start=0, end=None):
467
+ """
468
+ Returns a boolean array which is `True` where the string element
469
+ in ``a`` starts with ``prefix``, otherwise `False`.
470
+
471
+ Parameters
472
+ ----------
473
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
474
+
475
+ prefix : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
476
+
477
+ start, end : array_like, with any integer dtype
478
+ With ``start``, test beginning at that position. With ``end``,
479
+ stop comparing at that position.
480
+
481
+ Returns
482
+ -------
483
+ out : ndarray
484
+ Output array of bools
485
+
486
+ See Also
487
+ --------
488
+ str.startswith
489
+
490
+ Examples
491
+ --------
492
+ >>> import numpy as np
493
+ >>> s = np.array(['foo', 'bar'])
494
+ >>> s
495
+ array(['foo', 'bar'], dtype='<U3')
496
+ >>> np.strings.startswith(s, 'fo')
497
+ array([True, False])
498
+ >>> np.strings.startswith(s, 'o', start=1, end=2)
499
+ array([True, False])
500
+
501
+ """
502
+ end = end if end is not None else MAX
503
+ return _startswith_ufunc(a, prefix, start, end)
504
+
505
+
506
+ @set_module("numpy.strings")
507
+ def endswith(a, suffix, start=0, end=None):
508
+ """
509
+ Returns a boolean array which is `True` where the string element
510
+ in ``a`` ends with ``suffix``, otherwise `False`.
511
+
512
+ Parameters
513
+ ----------
514
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
515
+
516
+ suffix : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
517
+
518
+ start, end : array_like, with any integer dtype
519
+ With ``start``, test beginning at that position. With ``end``,
520
+ stop comparing at that position.
521
+
522
+ Returns
523
+ -------
524
+ out : ndarray
525
+ Output array of bools
526
+
527
+ See Also
528
+ --------
529
+ str.endswith
530
+
531
+ Examples
532
+ --------
533
+ >>> import numpy as np
534
+ >>> s = np.array(['foo', 'bar'])
535
+ >>> s
536
+ array(['foo', 'bar'], dtype='<U3')
537
+ >>> np.strings.endswith(s, 'ar')
538
+ array([False, True])
539
+ >>> np.strings.endswith(s, 'a', start=1, end=2)
540
+ array([False, True])
541
+
542
+ """
543
+ end = end if end is not None else MAX
544
+ return _endswith_ufunc(a, suffix, start, end)
545
+
546
+
547
+ def _code_dispatcher(a, encoding=None, errors=None):
548
+ return (a,)
549
+
550
+
551
+ @set_module("numpy.strings")
552
+ @array_function_dispatch(_code_dispatcher)
553
+ def decode(a, encoding=None, errors=None):
554
+ r"""
555
+ Calls :meth:`bytes.decode` element-wise.
556
+
557
+ The set of available codecs comes from the Python standard library,
558
+ and may be extended at runtime. For more information, see the
559
+ :mod:`codecs` module.
560
+
561
+ Parameters
562
+ ----------
563
+ a : array_like, with ``bytes_`` dtype
564
+
565
+ encoding : str, optional
566
+ The name of an encoding
567
+
568
+ errors : str, optional
569
+ Specifies how to handle encoding errors
570
+
571
+ Returns
572
+ -------
573
+ out : ndarray
574
+
575
+ See Also
576
+ --------
577
+ :py:meth:`bytes.decode`
578
+
579
+ Notes
580
+ -----
581
+ The type of the result will depend on the encoding specified.
582
+
583
+ Examples
584
+ --------
585
+ >>> import numpy as np
586
+ >>> c = np.array([b'\x81\xc1\x81\xc1\x81\xc1', b'@@\x81\xc1@@',
587
+ ... b'\x81\x82\xc2\xc1\xc2\x82\x81'])
588
+ >>> c
589
+ array([b'\x81\xc1\x81\xc1\x81\xc1', b'@@\x81\xc1@@',
590
+ b'\x81\x82\xc2\xc1\xc2\x82\x81'], dtype='|S7')
591
+ >>> np.strings.decode(c, encoding='cp037')
592
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
593
+
594
+ """
595
+ return _to_bytes_or_str_array(
596
+ _vec_string(a, np.object_, 'decode', _clean_args(encoding, errors)),
597
+ np.str_(''))
598
+
599
+
600
+ @set_module("numpy.strings")
601
+ @array_function_dispatch(_code_dispatcher)
602
+ def encode(a, encoding=None, errors=None):
603
+ """
604
+ Calls :meth:`str.encode` element-wise.
605
+
606
+ The set of available codecs comes from the Python standard library,
607
+ and may be extended at runtime. For more information, see the
608
+ :mod:`codecs` module.
609
+
610
+ Parameters
611
+ ----------
612
+ a : array_like, with ``StringDType`` or ``str_`` dtype
613
+
614
+ encoding : str, optional
615
+ The name of an encoding
616
+
617
+ errors : str, optional
618
+ Specifies how to handle encoding errors
619
+
620
+ Returns
621
+ -------
622
+ out : ndarray
623
+
624
+ See Also
625
+ --------
626
+ str.encode
627
+
628
+ Notes
629
+ -----
630
+ The type of the result will depend on the encoding specified.
631
+
632
+ Examples
633
+ --------
634
+ >>> import numpy as np
635
+ >>> a = np.array(['aAaAaA', ' aA ', 'abBABba'])
636
+ >>> np.strings.encode(a, encoding='cp037')
637
+ array([b'\x81\xc1\x81\xc1\x81\xc1', b'@@\x81\xc1@@',
638
+ b'\x81\x82\xc2\xc1\xc2\x82\x81'], dtype='|S7')
639
+
640
+ """
641
+ return _to_bytes_or_str_array(
642
+ _vec_string(a, np.object_, 'encode', _clean_args(encoding, errors)),
643
+ np.bytes_(b''))
644
+
645
+
646
+ def _expandtabs_dispatcher(a, tabsize=None):
647
+ return (a,)
648
+
649
+
650
+ @set_module("numpy.strings")
651
+ @array_function_dispatch(_expandtabs_dispatcher)
652
+ def expandtabs(a, tabsize=8):
653
+ """
654
+ Return a copy of each string element where all tab characters are
655
+ replaced by one or more spaces.
656
+
657
+ Calls :meth:`str.expandtabs` element-wise.
658
+
659
+ Return a copy of each string element where all tab characters are
660
+ replaced by one or more spaces, depending on the current column
661
+ and the given `tabsize`. The column number is reset to zero after
662
+ each newline occurring in the string. This doesn't understand other
663
+ non-printing characters or escape sequences.
664
+
665
+ Parameters
666
+ ----------
667
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
668
+ Input array
669
+ tabsize : int, optional
670
+ Replace tabs with `tabsize` number of spaces. If not given defaults
671
+ to 8 spaces.
672
+
673
+ Returns
674
+ -------
675
+ out : ndarray
676
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
677
+ depending on input type
678
+
679
+ See Also
680
+ --------
681
+ str.expandtabs
682
+
683
+ Examples
684
+ --------
685
+ >>> import numpy as np
686
+ >>> a = np.array(['\t\tHello\tworld'])
687
+ >>> np.strings.expandtabs(a, tabsize=4) # doctest: +SKIP
688
+ array([' Hello world'], dtype='<U21') # doctest: +SKIP
689
+
690
+ """
691
+ a = np.asanyarray(a)
692
+ tabsize = np.asanyarray(tabsize)
693
+
694
+ if a.dtype.char == "T":
695
+ return _expandtabs(a, tabsize)
696
+
697
+ buffersizes = _expandtabs_length(a, tabsize)
698
+ out_dtype = f"{a.dtype.char}{buffersizes.max()}"
699
+ out = np.empty_like(a, shape=buffersizes.shape, dtype=out_dtype)
700
+ return _expandtabs(a, tabsize, out=out)
701
+
702
+
703
+ def _just_dispatcher(a, width, fillchar=None):
704
+ return (a,)
705
+
706
+
707
+ @set_module("numpy.strings")
708
+ @array_function_dispatch(_just_dispatcher)
709
+ def center(a, width, fillchar=' '):
710
+ """
711
+ Return a copy of `a` with its elements centered in a string of
712
+ length `width`.
713
+
714
+ Parameters
715
+ ----------
716
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
717
+
718
+ width : array_like, with any integer dtype
719
+ The length of the resulting strings, unless ``width < str_len(a)``.
720
+ fillchar : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
721
+ Optional padding character to use (default is space).
722
+
723
+ Returns
724
+ -------
725
+ out : ndarray
726
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
727
+ depending on input types
728
+
729
+ See Also
730
+ --------
731
+ str.center
732
+
733
+ Notes
734
+ -----
735
+ While it is possible for ``a`` and ``fillchar`` to have different dtypes,
736
+ passing a non-ASCII character in ``fillchar`` when ``a`` is of dtype "S"
737
+ is not allowed, and a ``ValueError`` is raised.
738
+
739
+ Examples
740
+ --------
741
+ >>> import numpy as np
742
+ >>> c = np.array(['a1b2','1b2a','b2a1','2a1b']); c
743
+ array(['a1b2', '1b2a', 'b2a1', '2a1b'], dtype='<U4')
744
+ >>> np.strings.center(c, width=9)
745
+ array([' a1b2 ', ' 1b2a ', ' b2a1 ', ' 2a1b '], dtype='<U9')
746
+ >>> np.strings.center(c, width=9, fillchar='*')
747
+ array(['***a1b2**', '***1b2a**', '***b2a1**', '***2a1b**'], dtype='<U9')
748
+ >>> np.strings.center(c, width=1)
749
+ array(['a1b2', '1b2a', 'b2a1', '2a1b'], dtype='<U4')
750
+
751
+ """
752
+ width = np.asanyarray(width)
753
+
754
+ if not np.issubdtype(width.dtype, np.integer):
755
+ raise TypeError(f"unsupported type {width.dtype} for operand 'width'")
756
+
757
+ a = np.asanyarray(a)
758
+ fillchar = np.asanyarray(fillchar)
759
+
760
+ if np.any(str_len(fillchar) != 1):
761
+ raise TypeError(
762
+ "The fill character must be exactly one character long")
763
+
764
+ if np.result_type(a, fillchar).char == "T":
765
+ return _center(a, width, fillchar)
766
+
767
+ fillchar = fillchar.astype(a.dtype, copy=False)
768
+ width = np.maximum(str_len(a), width)
769
+ out_dtype = f"{a.dtype.char}{width.max()}"
770
+ shape = np.broadcast_shapes(a.shape, width.shape, fillchar.shape)
771
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
772
+
773
+ return _center(a, width, fillchar, out=out)
774
+
775
+
776
+ @set_module("numpy.strings")
777
+ @array_function_dispatch(_just_dispatcher)
778
+ def ljust(a, width, fillchar=' '):
779
+ """
780
+ Return an array with the elements of `a` left-justified in a
781
+ string of length `width`.
782
+
783
+ Parameters
784
+ ----------
785
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
786
+
787
+ width : array_like, with any integer dtype
788
+ The length of the resulting strings, unless ``width < str_len(a)``.
789
+ fillchar : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
790
+ Optional character to use for padding (default is space).
791
+
792
+ Returns
793
+ -------
794
+ out : ndarray
795
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
796
+ depending on input types
797
+
798
+ See Also
799
+ --------
800
+ str.ljust
801
+
802
+ Notes
803
+ -----
804
+ While it is possible for ``a`` and ``fillchar`` to have different dtypes,
805
+ passing a non-ASCII character in ``fillchar`` when ``a`` is of dtype "S"
806
+ is not allowed, and a ``ValueError`` is raised.
807
+
808
+ Examples
809
+ --------
810
+ >>> import numpy as np
811
+ >>> c = np.array(['aAaAaA', ' aA ', 'abBABba'])
812
+ >>> np.strings.ljust(c, width=3)
813
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
814
+ >>> np.strings.ljust(c, width=9)
815
+ array(['aAaAaA ', ' aA ', 'abBABba '], dtype='<U9')
816
+
817
+ """
818
+ width = np.asanyarray(width)
819
+ if not np.issubdtype(width.dtype, np.integer):
820
+ raise TypeError(f"unsupported type {width.dtype} for operand 'width'")
821
+
822
+ a = np.asanyarray(a)
823
+ fillchar = np.asanyarray(fillchar)
824
+
825
+ if np.any(str_len(fillchar) != 1):
826
+ raise TypeError(
827
+ "The fill character must be exactly one character long")
828
+
829
+ if np.result_type(a, fillchar).char == "T":
830
+ return _ljust(a, width, fillchar)
831
+
832
+ fillchar = fillchar.astype(a.dtype, copy=False)
833
+ width = np.maximum(str_len(a), width)
834
+ shape = np.broadcast_shapes(a.shape, width.shape, fillchar.shape)
835
+ out_dtype = f"{a.dtype.char}{width.max()}"
836
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
837
+
838
+ return _ljust(a, width, fillchar, out=out)
839
+
840
+
841
+ @set_module("numpy.strings")
842
+ @array_function_dispatch(_just_dispatcher)
843
+ def rjust(a, width, fillchar=' '):
844
+ """
845
+ Return an array with the elements of `a` right-justified in a
846
+ string of length `width`.
847
+
848
+ Parameters
849
+ ----------
850
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
851
+
852
+ width : array_like, with any integer dtype
853
+ The length of the resulting strings, unless ``width < str_len(a)``.
854
+ fillchar : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
855
+ Optional padding character to use (default is space).
856
+
857
+ Returns
858
+ -------
859
+ out : ndarray
860
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
861
+ depending on input types
862
+
863
+ See Also
864
+ --------
865
+ str.rjust
866
+
867
+ Notes
868
+ -----
869
+ While it is possible for ``a`` and ``fillchar`` to have different dtypes,
870
+ passing a non-ASCII character in ``fillchar`` when ``a`` is of dtype "S"
871
+ is not allowed, and a ``ValueError`` is raised.
872
+
873
+ Examples
874
+ --------
875
+ >>> import numpy as np
876
+ >>> a = np.array(['aAaAaA', ' aA ', 'abBABba'])
877
+ >>> np.strings.rjust(a, width=3)
878
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
879
+ >>> np.strings.rjust(a, width=9)
880
+ array([' aAaAaA', ' aA ', ' abBABba'], dtype='<U9')
881
+
882
+ """
883
+ width = np.asanyarray(width)
884
+ if not np.issubdtype(width.dtype, np.integer):
885
+ raise TypeError(f"unsupported type {width.dtype} for operand 'width'")
886
+
887
+ a = np.asanyarray(a)
888
+ fillchar = np.asanyarray(fillchar)
889
+
890
+ if np.any(str_len(fillchar) != 1):
891
+ raise TypeError(
892
+ "The fill character must be exactly one character long")
893
+
894
+ if np.result_type(a, fillchar).char == "T":
895
+ return _rjust(a, width, fillchar)
896
+
897
+ fillchar = fillchar.astype(a.dtype, copy=False)
898
+ width = np.maximum(str_len(a), width)
899
+ shape = np.broadcast_shapes(a.shape, width.shape, fillchar.shape)
900
+ out_dtype = f"{a.dtype.char}{width.max()}"
901
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
902
+
903
+ return _rjust(a, width, fillchar, out=out)
904
+
905
+
906
+ def _zfill_dispatcher(a, width):
907
+ return (a,)
908
+
909
+
910
+ @set_module("numpy.strings")
911
+ @array_function_dispatch(_zfill_dispatcher)
912
+ def zfill(a, width):
913
+ """
914
+ Return the numeric string left-filled with zeros. A leading
915
+ sign prefix (``+``/``-``) is handled by inserting the padding
916
+ after the sign character rather than before.
917
+
918
+ Parameters
919
+ ----------
920
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
921
+
922
+ width : array_like, with any integer dtype
923
+ Width of string to left-fill elements in `a`.
924
+
925
+ Returns
926
+ -------
927
+ out : ndarray
928
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
929
+ depending on input type
930
+
931
+ See Also
932
+ --------
933
+ str.zfill
934
+
935
+ Examples
936
+ --------
937
+ >>> import numpy as np
938
+ >>> np.strings.zfill(['1', '-1', '+1'], 3)
939
+ array(['001', '-01', '+01'], dtype='<U3')
940
+
941
+ """
942
+ width = np.asanyarray(width)
943
+ if not np.issubdtype(width.dtype, np.integer):
944
+ raise TypeError(f"unsupported type {width.dtype} for operand 'width'")
945
+
946
+ a = np.asanyarray(a)
947
+
948
+ if a.dtype.char == "T":
949
+ return _zfill(a, width)
950
+
951
+ width = np.maximum(str_len(a), width)
952
+ shape = np.broadcast_shapes(a.shape, width.shape)
953
+ out_dtype = f"{a.dtype.char}{width.max()}"
954
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
955
+ return _zfill(a, width, out=out)
956
+
957
+
958
+ @set_module("numpy.strings")
959
+ def lstrip(a, chars=None):
960
+ """
961
+ For each element in `a`, return a copy with the leading characters
962
+ removed.
963
+
964
+ Parameters
965
+ ----------
966
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
967
+ chars : scalar with the same dtype as ``a``, optional
968
+ The ``chars`` argument is a string specifying the set of
969
+ characters to be removed. If ``None``, the ``chars``
970
+ argument defaults to removing whitespace. The ``chars`` argument
971
+ is not a prefix or suffix; rather, all combinations of its
972
+ values are stripped.
973
+
974
+ Returns
975
+ -------
976
+ out : ndarray
977
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
978
+ depending on input types
979
+
980
+ See Also
981
+ --------
982
+ str.lstrip
983
+
984
+ Examples
985
+ --------
986
+ >>> import numpy as np
987
+ >>> c = np.array(['aAaAaA', ' aA ', 'abBABba'])
988
+ >>> c
989
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
990
+ # The 'a' variable is unstripped from c[1] because of leading whitespace.
991
+ >>> np.strings.lstrip(c, 'a')
992
+ array(['AaAaA', ' aA ', 'bBABba'], dtype='<U7')
993
+ >>> np.strings.lstrip(c, 'A') # leaves c unchanged
994
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
995
+ >>> (np.strings.lstrip(c, ' ') == np.strings.lstrip(c, '')).all()
996
+ np.False_
997
+ >>> (np.strings.lstrip(c, ' ') == np.strings.lstrip(c)).all()
998
+ np.True_
999
+
1000
+ """
1001
+ if chars is None:
1002
+ return _lstrip_whitespace(a)
1003
+ return _lstrip_chars(a, chars)
1004
+
1005
+
1006
+ @set_module("numpy.strings")
1007
+ def rstrip(a, chars=None):
1008
+ """
1009
+ For each element in `a`, return a copy with the trailing characters
1010
+ removed.
1011
+
1012
+ Parameters
1013
+ ----------
1014
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1015
+ chars : scalar with the same dtype as ``a``, optional
1016
+ The ``chars`` argument is a string specifying the set of
1017
+ characters to be removed. If ``None``, the ``chars``
1018
+ argument defaults to removing whitespace. The ``chars`` argument
1019
+ is not a prefix or suffix; rather, all combinations of its
1020
+ values are stripped.
1021
+
1022
+ Returns
1023
+ -------
1024
+ out : ndarray
1025
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1026
+ depending on input types
1027
+
1028
+ See Also
1029
+ --------
1030
+ str.rstrip
1031
+
1032
+ Examples
1033
+ --------
1034
+ >>> import numpy as np
1035
+ >>> c = np.array(['aAaAaA', 'abBABba'])
1036
+ >>> c
1037
+ array(['aAaAaA', 'abBABba'], dtype='<U7')
1038
+ >>> np.strings.rstrip(c, 'a')
1039
+ array(['aAaAaA', 'abBABb'], dtype='<U7')
1040
+ >>> np.strings.rstrip(c, 'A')
1041
+ array(['aAaAa', 'abBABba'], dtype='<U7')
1042
+
1043
+ """
1044
+ if chars is None:
1045
+ return _rstrip_whitespace(a)
1046
+ return _rstrip_chars(a, chars)
1047
+
1048
+
1049
+ @set_module("numpy.strings")
1050
+ def strip(a, chars=None):
1051
+ """
1052
+ For each element in `a`, return a copy with the leading and
1053
+ trailing characters removed.
1054
+
1055
+ Parameters
1056
+ ----------
1057
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1058
+ chars : scalar with the same dtype as ``a``, optional
1059
+ The ``chars`` argument is a string specifying the set of
1060
+ characters to be removed. If ``None``, the ``chars``
1061
+ argument defaults to removing whitespace. The ``chars`` argument
1062
+ is not a prefix or suffix; rather, all combinations of its
1063
+ values are stripped.
1064
+
1065
+ Returns
1066
+ -------
1067
+ out : ndarray
1068
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1069
+ depending on input types
1070
+
1071
+ See Also
1072
+ --------
1073
+ str.strip
1074
+
1075
+ Examples
1076
+ --------
1077
+ >>> import numpy as np
1078
+ >>> c = np.array(['aAaAaA', ' aA ', 'abBABba'])
1079
+ >>> c
1080
+ array(['aAaAaA', ' aA ', 'abBABba'], dtype='<U7')
1081
+ >>> np.strings.strip(c)
1082
+ array(['aAaAaA', 'aA', 'abBABba'], dtype='<U7')
1083
+ # 'a' unstripped from c[1] because of leading whitespace.
1084
+ >>> np.strings.strip(c, 'a')
1085
+ array(['AaAaA', ' aA ', 'bBABb'], dtype='<U7')
1086
+ # 'A' unstripped from c[1] because of trailing whitespace.
1087
+ >>> np.strings.strip(c, 'A')
1088
+ array(['aAaAa', ' aA ', 'abBABba'], dtype='<U7')
1089
+
1090
+ """
1091
+ if chars is None:
1092
+ return _strip_whitespace(a)
1093
+ return _strip_chars(a, chars)
1094
+
1095
+
1096
+ def _unary_op_dispatcher(a):
1097
+ return (a,)
1098
+
1099
+
1100
+ @set_module("numpy.strings")
1101
+ @array_function_dispatch(_unary_op_dispatcher)
1102
+ def upper(a):
1103
+ """
1104
+ Return an array with the elements converted to uppercase.
1105
+
1106
+ Calls :meth:`str.upper` element-wise.
1107
+
1108
+ For 8-bit strings, this method is locale-dependent.
1109
+
1110
+ Parameters
1111
+ ----------
1112
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1113
+ Input array.
1114
+
1115
+ Returns
1116
+ -------
1117
+ out : ndarray
1118
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1119
+ depending on input types
1120
+
1121
+ See Also
1122
+ --------
1123
+ str.upper
1124
+
1125
+ Examples
1126
+ --------
1127
+ >>> import numpy as np
1128
+ >>> c = np.array(['a1b c', '1bca', 'bca1']); c
1129
+ array(['a1b c', '1bca', 'bca1'], dtype='<U5')
1130
+ >>> np.strings.upper(c)
1131
+ array(['A1B C', '1BCA', 'BCA1'], dtype='<U5')
1132
+
1133
+ """
1134
+ a_arr = np.asarray(a)
1135
+ return _vec_string(a_arr, a_arr.dtype, 'upper')
1136
+
1137
+
1138
+ @set_module("numpy.strings")
1139
+ @array_function_dispatch(_unary_op_dispatcher)
1140
+ def lower(a):
1141
+ """
1142
+ Return an array with the elements converted to lowercase.
1143
+
1144
+ Call :meth:`str.lower` element-wise.
1145
+
1146
+ For 8-bit strings, this method is locale-dependent.
1147
+
1148
+ Parameters
1149
+ ----------
1150
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1151
+ Input array.
1152
+
1153
+ Returns
1154
+ -------
1155
+ out : ndarray
1156
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1157
+ depending on input types
1158
+
1159
+ See Also
1160
+ --------
1161
+ str.lower
1162
+
1163
+ Examples
1164
+ --------
1165
+ >>> import numpy as np
1166
+ >>> c = np.array(['A1B C', '1BCA', 'BCA1']); c
1167
+ array(['A1B C', '1BCA', 'BCA1'], dtype='<U5')
1168
+ >>> np.strings.lower(c)
1169
+ array(['a1b c', '1bca', 'bca1'], dtype='<U5')
1170
+
1171
+ """
1172
+ a_arr = np.asarray(a)
1173
+ return _vec_string(a_arr, a_arr.dtype, 'lower')
1174
+
1175
+
1176
+ @set_module("numpy.strings")
1177
+ @array_function_dispatch(_unary_op_dispatcher)
1178
+ def swapcase(a):
1179
+ """
1180
+ Return element-wise a copy of the string with
1181
+ uppercase characters converted to lowercase and vice versa.
1182
+
1183
+ Calls :meth:`str.swapcase` element-wise.
1184
+
1185
+ For 8-bit strings, this method is locale-dependent.
1186
+
1187
+ Parameters
1188
+ ----------
1189
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1190
+ Input array.
1191
+
1192
+ Returns
1193
+ -------
1194
+ out : ndarray
1195
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1196
+ depending on input types
1197
+
1198
+ See Also
1199
+ --------
1200
+ str.swapcase
1201
+
1202
+ Examples
1203
+ --------
1204
+ >>> import numpy as np
1205
+ >>> c=np.array(['a1B c','1b Ca','b Ca1','cA1b'],'S5'); c
1206
+ array(['a1B c', '1b Ca', 'b Ca1', 'cA1b'],
1207
+ dtype='|S5')
1208
+ >>> np.strings.swapcase(c)
1209
+ array(['A1b C', '1B cA', 'B cA1', 'Ca1B'],
1210
+ dtype='|S5')
1211
+
1212
+ """
1213
+ a_arr = np.asarray(a)
1214
+ return _vec_string(a_arr, a_arr.dtype, 'swapcase')
1215
+
1216
+
1217
+ @set_module("numpy.strings")
1218
+ @array_function_dispatch(_unary_op_dispatcher)
1219
+ def capitalize(a):
1220
+ """
1221
+ Return a copy of ``a`` with only the first character of each element
1222
+ capitalized.
1223
+
1224
+ Calls :meth:`str.capitalize` element-wise.
1225
+
1226
+ For byte strings, this method is locale-dependent.
1227
+
1228
+ Parameters
1229
+ ----------
1230
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1231
+ Input array of strings to capitalize.
1232
+
1233
+ Returns
1234
+ -------
1235
+ out : ndarray
1236
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1237
+ depending on input types
1238
+
1239
+ See Also
1240
+ --------
1241
+ str.capitalize
1242
+
1243
+ Examples
1244
+ --------
1245
+ >>> import numpy as np
1246
+ >>> c = np.array(['a1b2','1b2a','b2a1','2a1b'],'S4'); c
1247
+ array(['a1b2', '1b2a', 'b2a1', '2a1b'],
1248
+ dtype='|S4')
1249
+ >>> np.strings.capitalize(c)
1250
+ array(['A1b2', '1b2a', 'B2a1', '2a1b'],
1251
+ dtype='|S4')
1252
+
1253
+ """
1254
+ a_arr = np.asarray(a)
1255
+ return _vec_string(a_arr, a_arr.dtype, 'capitalize')
1256
+
1257
+
1258
+ @set_module("numpy.strings")
1259
+ @array_function_dispatch(_unary_op_dispatcher)
1260
+ def title(a):
1261
+ """
1262
+ Return element-wise title cased version of string or unicode.
1263
+
1264
+ Title case words start with uppercase characters, all remaining cased
1265
+ characters are lowercase.
1266
+
1267
+ Calls :meth:`str.title` element-wise.
1268
+
1269
+ For 8-bit strings, this method is locale-dependent.
1270
+
1271
+ Parameters
1272
+ ----------
1273
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1274
+ Input array.
1275
+
1276
+ Returns
1277
+ -------
1278
+ out : ndarray
1279
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1280
+ depending on input types
1281
+
1282
+ See Also
1283
+ --------
1284
+ str.title
1285
+
1286
+ Examples
1287
+ --------
1288
+ >>> import numpy as np
1289
+ >>> c=np.array(['a1b c','1b ca','b ca1','ca1b'],'S5'); c
1290
+ array(['a1b c', '1b ca', 'b ca1', 'ca1b'],
1291
+ dtype='|S5')
1292
+ >>> np.strings.title(c)
1293
+ array(['A1B C', '1B Ca', 'B Ca1', 'Ca1B'],
1294
+ dtype='|S5')
1295
+
1296
+ """
1297
+ a_arr = np.asarray(a)
1298
+ return _vec_string(a_arr, a_arr.dtype, 'title')
1299
+
1300
+
1301
+ def _replace_dispatcher(a, old, new, count=None):
1302
+ return (a,)
1303
+
1304
+
1305
+ @set_module("numpy.strings")
1306
+ @array_function_dispatch(_replace_dispatcher)
1307
+ def replace(a, old, new, count=-1):
1308
+ """
1309
+ For each element in ``a``, return a copy of the string with
1310
+ occurrences of substring ``old`` replaced by ``new``.
1311
+
1312
+ Parameters
1313
+ ----------
1314
+ a : array_like, with ``bytes_`` or ``str_`` dtype
1315
+
1316
+ old, new : array_like, with ``bytes_`` or ``str_`` dtype
1317
+
1318
+ count : array_like, with ``int_`` dtype
1319
+ If the optional argument ``count`` is given, only the first
1320
+ ``count`` occurrences are replaced.
1321
+
1322
+ Returns
1323
+ -------
1324
+ out : ndarray
1325
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1326
+ depending on input types
1327
+
1328
+ See Also
1329
+ --------
1330
+ str.replace
1331
+
1332
+ Examples
1333
+ --------
1334
+ >>> import numpy as np
1335
+ >>> a = np.array(["That is a mango", "Monkeys eat mangos"])
1336
+ >>> np.strings.replace(a, 'mango', 'banana')
1337
+ array(['That is a banana', 'Monkeys eat bananas'], dtype='<U19')
1338
+
1339
+ >>> a = np.array(["The dish is fresh", "This is it"])
1340
+ >>> np.strings.replace(a, 'is', 'was')
1341
+ array(['The dwash was fresh', 'Thwas was it'], dtype='<U19')
1342
+
1343
+ """
1344
+ count = np.asanyarray(count)
1345
+ if not np.issubdtype(count.dtype, np.integer):
1346
+ raise TypeError(f"unsupported type {count.dtype} for operand 'count'")
1347
+
1348
+ arr = np.asanyarray(a)
1349
+ old_dtype = getattr(old, 'dtype', None)
1350
+ old = np.asanyarray(old)
1351
+ new_dtype = getattr(new, 'dtype', None)
1352
+ new = np.asanyarray(new)
1353
+
1354
+ if np.result_type(arr, old, new).char == "T":
1355
+ return _replace(arr, old, new, count)
1356
+
1357
+ a_dt = arr.dtype
1358
+ old = old.astype(old_dtype or a_dt, copy=False)
1359
+ new = new.astype(new_dtype or a_dt, copy=False)
1360
+ max_int64 = np.iinfo(np.int64).max
1361
+ counts = _count_ufunc(arr, old, 0, max_int64)
1362
+ counts = np.where(count < 0, counts, np.minimum(counts, count))
1363
+ buffersizes = str_len(arr) + counts * (str_len(new) - str_len(old))
1364
+ out_dtype = f"{arr.dtype.char}{buffersizes.max()}"
1365
+ out = np.empty_like(arr, shape=buffersizes.shape, dtype=out_dtype)
1366
+
1367
+ return _replace(arr, old, new, counts, out=out)
1368
+
1369
+
1370
+ def _join_dispatcher(sep, seq):
1371
+ return (sep, seq)
1372
+
1373
+
1374
+ @array_function_dispatch(_join_dispatcher)
1375
+ def _join(sep, seq):
1376
+ """
1377
+ Return a string which is the concatenation of the strings in the
1378
+ sequence `seq`.
1379
+
1380
+ Calls :meth:`str.join` element-wise.
1381
+
1382
+ Parameters
1383
+ ----------
1384
+ sep : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1385
+ seq : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1386
+
1387
+ Returns
1388
+ -------
1389
+ out : ndarray
1390
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1391
+ depending on input types
1392
+
1393
+ See Also
1394
+ --------
1395
+ str.join
1396
+
1397
+ Examples
1398
+ --------
1399
+ >>> import numpy as np
1400
+ >>> np.strings.join('-', 'osd') # doctest: +SKIP
1401
+ array('o-s-d', dtype='<U5') # doctest: +SKIP
1402
+
1403
+ >>> np.strings.join(['-', '.'], ['ghc', 'osd']) # doctest: +SKIP
1404
+ array(['g-h-c', 'o.s.d'], dtype='<U5') # doctest: +SKIP
1405
+
1406
+ """
1407
+ return _to_bytes_or_str_array(
1408
+ _vec_string(sep, np.object_, 'join', (seq,)), seq)
1409
+
1410
+
1411
+ def _split_dispatcher(a, sep=None, maxsplit=None):
1412
+ return (a,)
1413
+
1414
+
1415
+ @array_function_dispatch(_split_dispatcher)
1416
+ def _split(a, sep=None, maxsplit=None):
1417
+ """
1418
+ For each element in `a`, return a list of the words in the
1419
+ string, using `sep` as the delimiter string.
1420
+
1421
+ Calls :meth:`str.split` element-wise.
1422
+
1423
+ Parameters
1424
+ ----------
1425
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1426
+
1427
+ sep : str or unicode, optional
1428
+ If `sep` is not specified or None, any whitespace string is a
1429
+ separator.
1430
+
1431
+ maxsplit : int, optional
1432
+ If `maxsplit` is given, at most `maxsplit` splits are done.
1433
+
1434
+ Returns
1435
+ -------
1436
+ out : ndarray
1437
+ Array of list objects
1438
+
1439
+ Examples
1440
+ --------
1441
+ >>> import numpy as np
1442
+ >>> x = np.array("Numpy is nice!")
1443
+ >>> np.strings.split(x, " ") # doctest: +SKIP
1444
+ array(list(['Numpy', 'is', 'nice!']), dtype=object) # doctest: +SKIP
1445
+
1446
+ >>> np.strings.split(x, " ", 1) # doctest: +SKIP
1447
+ array(list(['Numpy', 'is nice!']), dtype=object) # doctest: +SKIP
1448
+
1449
+ See Also
1450
+ --------
1451
+ str.split, rsplit
1452
+
1453
+ """
1454
+ # This will return an array of lists of different sizes, so we
1455
+ # leave it as an object array
1456
+ return _vec_string(
1457
+ a, np.object_, 'split', [sep] + _clean_args(maxsplit))
1458
+
1459
+
1460
+ @array_function_dispatch(_split_dispatcher)
1461
+ def _rsplit(a, sep=None, maxsplit=None):
1462
+ """
1463
+ For each element in `a`, return a list of the words in the
1464
+ string, using `sep` as the delimiter string.
1465
+
1466
+ Calls :meth:`str.rsplit` element-wise.
1467
+
1468
+ Except for splitting from the right, `rsplit`
1469
+ behaves like `split`.
1470
+
1471
+ Parameters
1472
+ ----------
1473
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1474
+
1475
+ sep : str or unicode, optional
1476
+ If `sep` is not specified or None, any whitespace string
1477
+ is a separator.
1478
+ maxsplit : int, optional
1479
+ If `maxsplit` is given, at most `maxsplit` splits are done,
1480
+ the rightmost ones.
1481
+
1482
+ Returns
1483
+ -------
1484
+ out : ndarray
1485
+ Array of list objects
1486
+
1487
+ See Also
1488
+ --------
1489
+ str.rsplit, split
1490
+
1491
+ Examples
1492
+ --------
1493
+ >>> import numpy as np
1494
+ >>> a = np.array(['aAaAaA', 'abBABba'])
1495
+ >>> np.strings.rsplit(a, 'A') # doctest: +SKIP
1496
+ array([list(['a', 'a', 'a', '']), # doctest: +SKIP
1497
+ list(['abB', 'Bba'])], dtype=object) # doctest: +SKIP
1498
+
1499
+ """
1500
+ # This will return an array of lists of different sizes, so we
1501
+ # leave it as an object array
1502
+ return _vec_string(
1503
+ a, np.object_, 'rsplit', [sep] + _clean_args(maxsplit))
1504
+
1505
+
1506
+ def _splitlines_dispatcher(a, keepends=None):
1507
+ return (a,)
1508
+
1509
+
1510
+ @array_function_dispatch(_splitlines_dispatcher)
1511
+ def _splitlines(a, keepends=None):
1512
+ """
1513
+ For each element in `a`, return a list of the lines in the
1514
+ element, breaking at line boundaries.
1515
+
1516
+ Calls :meth:`str.splitlines` element-wise.
1517
+
1518
+ Parameters
1519
+ ----------
1520
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1521
+
1522
+ keepends : bool, optional
1523
+ Line breaks are not included in the resulting list unless
1524
+ keepends is given and true.
1525
+
1526
+ Returns
1527
+ -------
1528
+ out : ndarray
1529
+ Array of list objects
1530
+
1531
+ See Also
1532
+ --------
1533
+ str.splitlines
1534
+
1535
+ Examples
1536
+ --------
1537
+ >>> np.char.splitlines("first line\\nsecond line")
1538
+ array(list(['first line', 'second line']), dtype=object)
1539
+ >>> a = np.array(["first\\nsecond", "third\\nfourth"])
1540
+ >>> np.char.splitlines(a)
1541
+ array([list(['first', 'second']), list(['third', 'fourth'])], dtype=object)
1542
+
1543
+ """
1544
+ return _vec_string(
1545
+ a, np.object_, 'splitlines', _clean_args(keepends))
1546
+
1547
+
1548
+ def _partition_dispatcher(a, sep):
1549
+ return (a,)
1550
+
1551
+
1552
+ @set_module("numpy.strings")
1553
+ @array_function_dispatch(_partition_dispatcher)
1554
+ def partition(a, sep):
1555
+ """
1556
+ Partition each element in ``a`` around ``sep``.
1557
+
1558
+ For each element in ``a``, split the element at the first
1559
+ occurrence of ``sep``, and return a 3-tuple containing the part
1560
+ before the separator, the separator itself, and the part after
1561
+ the separator. If the separator is not found, the first item of
1562
+ the tuple will contain the whole string, and the second and third
1563
+ ones will be the empty string.
1564
+
1565
+ Parameters
1566
+ ----------
1567
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1568
+ Input array
1569
+ sep : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1570
+ Separator to split each string element in ``a``.
1571
+
1572
+ Returns
1573
+ -------
1574
+ out : 3-tuple:
1575
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1576
+ part before the separator
1577
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1578
+ separator
1579
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1580
+ part after the separator
1581
+
1582
+ See Also
1583
+ --------
1584
+ str.partition
1585
+
1586
+ Examples
1587
+ --------
1588
+ >>> import numpy as np
1589
+ >>> x = np.array(["Numpy is nice!"])
1590
+ >>> np.strings.partition(x, " ")
1591
+ (array(['Numpy'], dtype='<U5'),
1592
+ array([' '], dtype='<U1'),
1593
+ array(['is nice!'], dtype='<U8'))
1594
+
1595
+ """
1596
+ a = np.asanyarray(a)
1597
+ sep = np.asanyarray(sep)
1598
+
1599
+ if np.result_type(a, sep).char == "T":
1600
+ return _partition(a, sep)
1601
+
1602
+ sep = sep.astype(a.dtype, copy=False)
1603
+ pos = _find_ufunc(a, sep, 0, MAX)
1604
+ a_len = str_len(a)
1605
+ sep_len = str_len(sep)
1606
+
1607
+ not_found = pos < 0
1608
+ buffersizes1 = np.where(not_found, a_len, pos)
1609
+ buffersizes3 = np.where(not_found, 0, a_len - pos - sep_len)
1610
+
1611
+ out_dtype = ",".join([f"{a.dtype.char}{n}" for n in (
1612
+ buffersizes1.max(),
1613
+ 1 if np.all(not_found) else sep_len.max(),
1614
+ buffersizes3.max(),
1615
+ )])
1616
+ shape = np.broadcast_shapes(a.shape, sep.shape)
1617
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
1618
+ return _partition_index(a, sep, pos, out=(out["f0"], out["f1"], out["f2"]))
1619
+
1620
+
1621
+ @set_module("numpy.strings")
1622
+ @array_function_dispatch(_partition_dispatcher)
1623
+ def rpartition(a, sep):
1624
+ """
1625
+ Partition (split) each element around the right-most separator.
1626
+
1627
+ For each element in ``a``, split the element at the last
1628
+ occurrence of ``sep``, and return a 3-tuple containing the part
1629
+ before the separator, the separator itself, and the part after
1630
+ the separator. If the separator is not found, the third item of
1631
+ the tuple will contain the whole string, and the first and second
1632
+ ones will be the empty string.
1633
+
1634
+ Parameters
1635
+ ----------
1636
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1637
+ Input array
1638
+ sep : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1639
+ Separator to split each string element in ``a``.
1640
+
1641
+ Returns
1642
+ -------
1643
+ out : 3-tuple:
1644
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1645
+ part before the separator
1646
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1647
+ separator
1648
+ - array with ``StringDType``, ``bytes_`` or ``str_`` dtype with the
1649
+ part after the separator
1650
+
1651
+ See Also
1652
+ --------
1653
+ str.rpartition
1654
+
1655
+ Examples
1656
+ --------
1657
+ >>> import numpy as np
1658
+ >>> a = np.array(['aAaAaA', ' aA ', 'abBABba'])
1659
+ >>> np.strings.rpartition(a, 'A')
1660
+ (array(['aAaAa', ' a', 'abB'], dtype='<U5'),
1661
+ array(['A', 'A', 'A'], dtype='<U1'),
1662
+ array(['', ' ', 'Bba'], dtype='<U3'))
1663
+
1664
+ """
1665
+ a = np.asanyarray(a)
1666
+ sep = np.asanyarray(sep)
1667
+
1668
+ if np.result_type(a, sep).char == "T":
1669
+ return _rpartition(a, sep)
1670
+
1671
+ sep = sep.astype(a.dtype, copy=False)
1672
+ pos = _rfind_ufunc(a, sep, 0, MAX)
1673
+ a_len = str_len(a)
1674
+ sep_len = str_len(sep)
1675
+
1676
+ not_found = pos < 0
1677
+ buffersizes1 = np.where(not_found, 0, pos)
1678
+ buffersizes3 = np.where(not_found, a_len, a_len - pos - sep_len)
1679
+
1680
+ out_dtype = ",".join([f"{a.dtype.char}{n}" for n in (
1681
+ buffersizes1.max(),
1682
+ 1 if np.all(not_found) else sep_len.max(),
1683
+ buffersizes3.max(),
1684
+ )])
1685
+ shape = np.broadcast_shapes(a.shape, sep.shape)
1686
+ out = np.empty_like(a, shape=shape, dtype=out_dtype)
1687
+ return _rpartition_index(
1688
+ a, sep, pos, out=(out["f0"], out["f1"], out["f2"]))
1689
+
1690
+
1691
+ def _translate_dispatcher(a, table, deletechars=None):
1692
+ return (a,)
1693
+
1694
+
1695
+ @set_module("numpy.strings")
1696
+ @array_function_dispatch(_translate_dispatcher)
1697
+ def translate(a, table, deletechars=None):
1698
+ """
1699
+ For each element in `a`, return a copy of the string where all
1700
+ characters occurring in the optional argument `deletechars` are
1701
+ removed, and the remaining characters have been mapped through the
1702
+ given translation table.
1703
+
1704
+ Calls :meth:`str.translate` element-wise.
1705
+
1706
+ Parameters
1707
+ ----------
1708
+ a : array-like, with `np.bytes_` or `np.str_` dtype
1709
+
1710
+ table : str of length 256
1711
+
1712
+ deletechars : str
1713
+
1714
+ Returns
1715
+ -------
1716
+ out : ndarray
1717
+ Output array of str or unicode, depending on input type
1718
+
1719
+ See Also
1720
+ --------
1721
+ str.translate
1722
+
1723
+ Examples
1724
+ --------
1725
+ >>> import numpy as np
1726
+ >>> a = np.array(['a1b c', '1bca', 'bca1'])
1727
+ >>> table = a[0].maketrans('abc', '123')
1728
+ >>> deletechars = ' '
1729
+ >>> np.char.translate(a, table, deletechars)
1730
+ array(['112 3', '1231', '2311'], dtype='<U5')
1731
+
1732
+ """
1733
+ a_arr = np.asarray(a)
1734
+ if issubclass(a_arr.dtype.type, np.str_):
1735
+ return _vec_string(
1736
+ a_arr, a_arr.dtype, 'translate', (table,))
1737
+ else:
1738
+ return _vec_string(
1739
+ a_arr,
1740
+ a_arr.dtype,
1741
+ 'translate',
1742
+ [table] + _clean_args(deletechars)
1743
+ )
1744
+
1745
+ @set_module("numpy.strings")
1746
+ def slice(a, start=None, stop=np._NoValue, step=None, /):
1747
+ """
1748
+ Slice the strings in `a` by slices specified by `start`, `stop`, `step`.
1749
+ Like in the regular Python `slice` object, if only `start` is
1750
+ specified then it is interpreted as the `stop`.
1751
+
1752
+ Parameters
1753
+ ----------
1754
+ a : array-like, with ``StringDType``, ``bytes_``, or ``str_`` dtype
1755
+ Input array
1756
+
1757
+ start : None, an integer or an array of integers
1758
+ The start of the slice, broadcasted to `a`'s shape
1759
+
1760
+ stop : None, an integer or an array of integers
1761
+ The end of the slice, broadcasted to `a`'s shape
1762
+
1763
+ step : None, an integer or an array of integers
1764
+ The step for the slice, broadcasted to `a`'s shape
1765
+
1766
+ Returns
1767
+ -------
1768
+ out : ndarray
1769
+ Output array of ``StringDType``, ``bytes_`` or ``str_`` dtype,
1770
+ depending on input type
1771
+
1772
+ Examples
1773
+ --------
1774
+ >>> import numpy as np
1775
+ >>> a = np.array(['hello', 'world'])
1776
+ >>> np.strings.slice(a, 2)
1777
+ array(['he', 'wo'], dtype='<U5')
1778
+
1779
+ >>> np.strings.slice(a, 2, None)
1780
+ array(['llo', 'rld'], dtype='<U5')
1781
+
1782
+ >>> np.strings.slice(a, 1, 5, 2)
1783
+ array(['el', 'ol'], dtype='<U5')
1784
+
1785
+ One can specify different start/stop/step for different array entries:
1786
+
1787
+ >>> np.strings.slice(a, np.array([1, 2]), np.array([4, 5]))
1788
+ array(['ell', 'rld'], dtype='<U5')
1789
+
1790
+ Negative slices have the same meaning as in regular Python:
1791
+
1792
+ >>> b = np.array(['hello world', 'γεια σου κόσμε', '你好世界', '👋 🌍'],
1793
+ ... dtype=np.dtypes.StringDType())
1794
+ >>> np.strings.slice(b, -2)
1795
+ array(['hello wor', 'γεια σου κόσ', '你好', '👋'], dtype=StringDType())
1796
+
1797
+ >>> np.strings.slice(b, -2, None)
1798
+ array(['ld', 'με', '世界', ' 🌍'], dtype=StringDType())
1799
+
1800
+ >>> np.strings.slice(b, [3, -10, 2, -3], [-1, -2, -1, 3])
1801
+ array(['lo worl', ' σου κόσ', '世', '👋 🌍'], dtype=StringDType())
1802
+
1803
+ >>> np.strings.slice(b, None, None, -1)
1804
+ array(['dlrow olleh', 'εμσόκ υοσ αιεγ', '界世好你', '🌍 👋'],
1805
+ dtype=StringDType())
1806
+
1807
+ """
1808
+ # Just like in the construction of a regular slice object, if only start
1809
+ # is specified then start will become stop, see logic in slice_new.
1810
+ if stop is np._NoValue:
1811
+ stop = start
1812
+ start = None
1813
+
1814
+ # adjust start, stop, step to be integers, see logic in PySlice_Unpack
1815
+ if step is None:
1816
+ step = 1
1817
+ step = np.asanyarray(step)
1818
+ if not np.issubdtype(step.dtype, np.integer):
1819
+ raise TypeError(f"unsupported type {step.dtype} for operand 'step'")
1820
+ if np.any(step == 0):
1821
+ raise ValueError("slice step cannot be zero")
1822
+
1823
+ if start is None:
1824
+ start = np.where(step < 0, np.iinfo(np.intp).max, 0)
1825
+
1826
+ if stop is None:
1827
+ stop = np.where(step < 0, np.iinfo(np.intp).min, np.iinfo(np.intp).max)
1828
+
1829
+ return _slice(a, start, stop, step)