tpy-lang 0.3.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. tpy_lang-0.3.0.dev0.dist-info/METADATA +151 -0
  2. tpy_lang-0.3.0.dev0.dist-info/RECORD +333 -0
  3. tpy_lang-0.3.0.dev0.dist-info/WHEEL +4 -0
  4. tpy_lang-0.3.0.dev0.dist-info/entry_points.txt +3 -0
  5. tpyc/__init__.py +104 -0
  6. tpyc/__main__.py +6 -0
  7. tpyc/_buildinfo.py +1 -0
  8. tpyc/_data/docs/LANGUAGE_FEATURES.md +6278 -0
  9. tpyc/_data/docs/STDLIB_ROADMAP.md +1258 -0
  10. tpyc/_data/docs/TPY_FOR_AGENTS.md +556 -0
  11. tpyc/_data/lib/tpy/_bindings/__init__.py +6 -0
  12. tpyc/_data/lib/tpy/_bindings/pcre2.py +173 -0
  13. tpyc/_data/lib/tpy/_bindings/posix_socket.py +161 -0
  14. tpyc/_data/lib/tpy/_functools_macros.py +80 -0
  15. tpyc/_data/lib/tpy/_macro_helpers.py +161 -0
  16. tpyc/_data/lib/tpy/argparse.py +2062 -0
  17. tpyc/_data/lib/tpy/asyncio/__init__.py +744 -0
  18. tpyc/_data/lib/tpy/asyncio/_executor.py +515 -0
  19. tpyc/_data/lib/tpy/base64.py +410 -0
  20. tpyc/_data/lib/tpy/bisect.py +39 -0
  21. tpyc/_data/lib/tpy/builtins.py +38 -0
  22. tpyc/_data/lib/tpy/dataclasses.py +354 -0
  23. tpyc/_data/lib/tpy/enum.py +23 -0
  24. tpyc/_data/lib/tpy/functools.py +33 -0
  25. tpyc/_data/lib/tpy/hashlib.py +206 -0
  26. tpyc/_data/lib/tpy/heapq.py +118 -0
  27. tpyc/_data/lib/tpy/io.py +395 -0
  28. tpyc/_data/lib/tpy/json.py +221 -0
  29. tpyc/_data/lib/tpy/math.py +406 -0
  30. tpyc/_data/lib/tpy/random.py +597 -0
  31. tpyc/_data/lib/tpy/re.py +467 -0
  32. tpyc/_data/lib/tpy/socket.py +379 -0
  33. tpyc/_data/lib/tpy/struct.py +178 -0
  34. tpyc/_data/lib/tpy/sys.py +40 -0
  35. tpyc/_data/lib/tpy/time.py +39 -0
  36. tpyc/_data/lib/tpy/tpy/__init__.py +78 -0
  37. tpyc/_data/lib/tpy/tpy/_bootstrap/__init__.py +10 -0
  38. tpyc/_data/lib/tpy/tpy/_bootstrap/_decorators.py +37 -0
  39. tpyc/_data/lib/tpy/tpy/_bootstrap/_extern.py +64 -0
  40. tpyc/_data/lib/tpy/tpy/_builtins/__init__.py +11 -0
  41. tpyc/_data/lib/tpy/tpy/_builtins/_bytes.py +378 -0
  42. tpyc/_data/lib/tpy/tpy/_builtins/_dict.py +151 -0
  43. tpyc/_data/lib/tpy/tpy/_builtins/_exceptions.py +125 -0
  44. tpyc/_data/lib/tpy/tpy/_builtins/_funcs.py +681 -0
  45. tpyc/_data/lib/tpy/tpy/_builtins/_io.py +97 -0
  46. tpyc/_data/lib/tpy/tpy/_builtins/_list.py +127 -0
  47. tpyc/_data/lib/tpy/tpy/_builtins/_range.py +52 -0
  48. tpyc/_data/lib/tpy/tpy/_builtins/_set.py +139 -0
  49. tpyc/_data/lib/tpy/tpy/_builtins/_super.py +11 -0
  50. tpyc/_data/lib/tpy/tpy/_builtins/_types.py +661 -0
  51. tpyc/_data/lib/tpy/tpy/_core/__init__.py +23 -0
  52. tpyc/_data/lib/tpy/tpy/_core/_bytes_view.py +129 -0
  53. tpyc/_data/lib/tpy/tpy/_core/_containers.py +137 -0
  54. tpyc/_data/lib/tpy/tpy/_core/_functions.py +40 -0
  55. tpyc/_data/lib/tpy/tpy/_core/_types.py +2061 -0
  56. tpyc/_data/lib/tpy/tpy/_typing/__init__.py +77 -0
  57. tpyc/_data/lib/tpy/tpy/_version.py +29 -0
  58. tpyc/_data/lib/tpy/tpy/bits.py +28 -0
  59. tpyc/_data/lib/tpy/tpy/coro/__init__.py +127 -0
  60. tpyc/_data/lib/tpy/tpy/extern.py +8 -0
  61. tpyc/_data/lib/tpy/tpy/mem.py +49 -0
  62. tpyc/_data/lib/tpy/tpy/unsafe.py +195 -0
  63. tpyc/_data/lib/tpy/tpy/version.py +21 -0
  64. tpyc/_data/lib/tpy/typing.py +13 -0
  65. tpyc/_data/runtime/cpp/include/tpy/any.hpp +461 -0
  66. tpyc/_data/runtime/cpp/include/tpy/as_ostream.hpp +117 -0
  67. tpyc/_data/runtime/cpp/include/tpy/async.hpp +76 -0
  68. tpyc/_data/runtime/cpp/include/tpy/bigint.hpp +1343 -0
  69. tpyc/_data/runtime/cpp/include/tpy/builtins.hpp +400 -0
  70. tpyc/_data/runtime/cpp/include/tpy/bytes_ops.hpp +469 -0
  71. tpyc/_data/runtime/cpp/include/tpy/container_ops.hpp +487 -0
  72. tpyc/_data/runtime/cpp/include/tpy/copy_iter.hpp +82 -0
  73. tpyc/_data/runtime/cpp/include/tpy/core.hpp +558 -0
  74. tpyc/_data/runtime/cpp/include/tpy/dict_ops.hpp +289 -0
  75. tpyc/_data/runtime/cpp/include/tpy/dunder.hpp +750 -0
  76. tpyc/_data/runtime/cpp/include/tpy/dynamic.hpp +44 -0
  77. tpyc/_data/runtime/cpp/include/tpy/enum.hpp +40 -0
  78. tpyc/_data/runtime/cpp/include/tpy/file.hpp +245 -0
  79. tpyc/_data/runtime/cpp/include/tpy/fixed_int.hpp +317 -0
  80. tpyc/_data/runtime/cpp/include/tpy/format.hpp +954 -0
  81. tpyc/_data/runtime/cpp/include/tpy/frame_slot.hpp +120 -0
  82. tpyc/_data/runtime/cpp/include/tpy/generator.hpp +47 -0
  83. tpyc/_data/runtime/cpp/include/tpy/iterable_ops.hpp +122 -0
  84. tpyc/_data/runtime/cpp/include/tpy/itertools.hpp +749 -0
  85. tpyc/_data/runtime/cpp/include/tpy/next_iter.hpp +82 -0
  86. tpyc/_data/runtime/cpp/include/tpy/ordered_map.hpp +518 -0
  87. tpyc/_data/runtime/cpp/include/tpy/ordered_set.hpp +337 -0
  88. tpyc/_data/runtime/cpp/include/tpy/own_iter.hpp +54 -0
  89. tpyc/_data/runtime/cpp/include/tpy/pascal_graph_sdl.hpp +192 -0
  90. tpyc/_data/runtime/cpp/include/tpy/printing.hpp +302 -0
  91. tpyc/_data/runtime/cpp/include/tpy/protocols.hpp +61 -0
  92. tpyc/_data/runtime/cpp/include/tpy/range.hpp +115 -0
  93. tpyc/_data/runtime/cpp/include/tpy/ranges.hpp +212 -0
  94. tpyc/_data/runtime/cpp/include/tpy/set_ops.hpp +265 -0
  95. tpyc/_data/runtime/cpp/include/tpy/slice.hpp +47 -0
  96. tpyc/_data/runtime/cpp/include/tpy/span_iter.hpp +42 -0
  97. tpyc/_data/runtime/cpp/include/tpy/stdlib/math.hpp +41 -0
  98. tpyc/_data/runtime/cpp/include/tpy/stdlib/pcre2_h.hpp +96 -0
  99. tpyc/_data/runtime/cpp/include/tpy/stdlib/random.hpp +25 -0
  100. tpyc/_data/runtime/cpp/include/tpy/stdlib/socket_h.hpp +145 -0
  101. tpyc/_data/runtime/cpp/include/tpy/stdlib/time.hpp +62 -0
  102. tpyc/_data/runtime/cpp/include/tpy/system.hpp +121 -0
  103. tpyc/_data/runtime/cpp/include/tpy/throwable.hpp +55 -0
  104. tpyc/_data/runtime/cpp/include/tpy/tpy.hpp +156 -0
  105. tpyc/_data/runtime/cpp/include/tpy/type_name.hpp +77 -0
  106. tpyc/_data/runtime/cpp/include/tpy/type_traits.hpp +240 -0
  107. tpyc/_data/runtime/cpp/include/tpy/uninit_array_storage.hpp +250 -0
  108. tpyc/_data/runtime/cpp/include/tpy/uninit_heap_storage.hpp +277 -0
  109. tpyc/_data/runtime/cpp/include/tpy/varargs.hpp +174 -0
  110. tpyc/_data/runtime/cpp/include/tpy/variant_ref.hpp +118 -0
  111. tpyc/_data/runtime/cpp/src/stdlib/socket_impl.cpp +104 -0
  112. tpyc/_data/runtime/cpp/third_party/README.md +58 -0
  113. tpyc/_data/runtime/cpp/third_party/pcre2/AUTHORS +36 -0
  114. tpyc/_data/runtime/cpp/third_party/pcre2/CMakeLists.txt +1233 -0
  115. tpyc/_data/runtime/cpp/third_party/pcre2/COPYING +5 -0
  116. tpyc/_data/runtime/cpp/third_party/pcre2/ChangeLog +3097 -0
  117. tpyc/_data/runtime/cpp/third_party/pcre2/HACKING +853 -0
  118. tpyc/_data/runtime/cpp/third_party/pcre2/INSTALL +368 -0
  119. tpyc/_data/runtime/cpp/third_party/pcre2/LICENCE +94 -0
  120. tpyc/_data/runtime/cpp/third_party/pcre2/NEWS +492 -0
  121. tpyc/_data/runtime/cpp/third_party/pcre2/NON-AUTOTOOLS-BUILD +430 -0
  122. tpyc/_data/runtime/cpp/third_party/pcre2/README +956 -0
  123. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  124. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindEditline.cmake +16 -0
  125. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  126. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/FindReadline.cmake +29 -0
  127. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config-version.cmake.in +15 -0
  128. tpyc/_data/runtime/cpp/third_party/pcre2/cmake/pcre2-config.cmake.in +148 -0
  129. tpyc/_data/runtime/cpp/third_party/pcre2/config-cmake.h.in +56 -0
  130. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-16.pc.in +13 -0
  131. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-32.pc.in +13 -0
  132. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-8.pc.in +13 -0
  133. tpyc/_data/runtime/cpp/third_party/pcre2/libpcre2-posix.pc.in +13 -0
  134. tpyc/_data/runtime/cpp/third_party/pcre2/pcre2-config.in +121 -0
  135. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h +483 -0
  136. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.generic +483 -0
  137. tpyc/_data/runtime/cpp/third_party/pcre2/src/config.h.in +460 -0
  138. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h +1010 -0
  139. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.generic +1010 -0
  140. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2.h.in +1010 -0
  141. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_auto_possess.c +1371 -0
  142. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c +196 -0
  143. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chartables.c.dist +196 -0
  144. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_chkdint.c +96 -0
  145. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_compile.c +11001 -0
  146. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_config.c +252 -0
  147. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_context.c +510 -0
  148. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_convert.c +1189 -0
  149. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dfa_match.c +4119 -0
  150. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_dftables.c +297 -0
  151. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_error.c +345 -0
  152. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_extuni.c +162 -0
  153. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_find_bracket.c +219 -0
  154. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_fuzzsupport.c +792 -0
  155. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_internal.h +2084 -0
  156. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_intmodedep.h +940 -0
  157. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_compile.c +14972 -0
  158. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_match.c +200 -0
  159. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_misc.c +234 -0
  160. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_neon_inc.h +354 -0
  161. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_simd_inc.h +2355 -0
  162. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_jit_test.c +2528 -0
  163. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_maketables.c +165 -0
  164. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match.c +7777 -0
  165. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_match_data.c +185 -0
  166. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_newline.c +243 -0
  167. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ord2utf.c +120 -0
  168. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_pattern_info.c +432 -0
  169. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_printint.c +886 -0
  170. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_script_run.c +344 -0
  171. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_serialize.c +286 -0
  172. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_string_utils.c +237 -0
  173. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_study.c +1915 -0
  174. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substitute.c +1009 -0
  175. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_substring.c +550 -0
  176. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_tables.c +234 -0
  177. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucd.c +5460 -0
  178. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucp.h +396 -0
  179. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_ucptables.c +1533 -0
  180. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_valid_utf.c +398 -0
  181. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2_xclass.c +308 -0
  182. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2demo.c +497 -0
  183. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2grep.c +4606 -0
  184. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.c +425 -0
  185. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix.h +187 -0
  186. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2posix_test.c +209 -0
  187. tpyc/_data/runtime/cpp/third_party/pcre2/src/pcre2test.c +9708 -0
  188. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorApple.c +137 -0
  189. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorCore.c +327 -0
  190. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorFreeBSD.c +89 -0
  191. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorPosix.c +62 -0
  192. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitExecAllocatorWindows.c +40 -0
  193. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorNetBSD.c +72 -0
  194. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitProtExecAllocatorPosix.c +172 -0
  195. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorPosix.c +141 -0
  196. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/allocator_src/sljitWXExecAllocatorWindows.c +102 -0
  197. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfig.h +142 -0
  198. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigCPU.h +188 -0
  199. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitConfigInternal.h +907 -0
  200. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.c +3561 -0
  201. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitLir.h +2466 -0
  202. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_32.c +4636 -0
  203. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_64.c +3491 -0
  204. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeARM_T2_32.c +4302 -0
  205. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeLOONGARCH_64.c +3765 -0
  206. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_32.c +472 -0
  207. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_64.c +387 -0
  208. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeMIPS_common.c +4259 -0
  209. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_32.c +485 -0
  210. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_64.c +719 -0
  211. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativePPC_common.c +3161 -0
  212. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_32.c +142 -0
  213. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_64.c +222 -0
  214. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeRISCV_common.c +3121 -0
  215. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeS390X.c +4526 -0
  216. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_32.c +1685 -0
  217. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_64.c +1398 -0
  218. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitNativeX86_common.c +5001 -0
  219. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitSerialize.c +516 -0
  220. tpyc/_data/runtime/cpp/third_party/pcre2/src/sljit/sljitUtils.c +344 -0
  221. tpyc/_data/runtime/cpp/third_party/pcre2.sources.txt +54 -0
  222. tpyc/_data/runtime/cpp/third_party/pcre2.vendor.json +7 -0
  223. tpyc/build/__init__.py +7 -0
  224. tpyc/build/pcre2.py +122 -0
  225. tpyc/build/third_party.py +413 -0
  226. tpyc/cli.py +822 -0
  227. tpyc/codegen_cpp/__init__.py +18 -0
  228. tpyc/codegen_cpp/builtins.py +484 -0
  229. tpyc/codegen_cpp/context.py +2064 -0
  230. tpyc/codegen_cpp/expressions.py +5940 -0
  231. tpyc/codegen_cpp/functions.py +1913 -0
  232. tpyc/codegen_cpp/gen_async.py +3258 -0
  233. tpyc/codegen_cpp/gen_generators.py +657 -0
  234. tpyc/codegen_cpp/generator.py +2258 -0
  235. tpyc/codegen_cpp/match.py +1997 -0
  236. tpyc/codegen_cpp/param_const.py +172 -0
  237. tpyc/codegen_cpp/protocols.py +907 -0
  238. tpyc/codegen_cpp/records.py +1654 -0
  239. tpyc/codegen_cpp/resumable_cfg.py +1651 -0
  240. tpyc/codegen_cpp/statements.py +4963 -0
  241. tpyc/codegen_cpp/string_dispatch.py +76 -0
  242. tpyc/codegen_cpp/test_context.py +46 -0
  243. tpyc/codegen_cpp/test_param_const.py +113 -0
  244. tpyc/codegen_cpp/test_resumable_cfg.py +182 -0
  245. tpyc/codegen_cpp/type_resolution.py +53 -0
  246. tpyc/codegen_cpp/types.py +436 -0
  247. tpyc/codegen_cpp/variant_access.py +135 -0
  248. tpyc/coercions.py +749 -0
  249. tpyc/compilation_context.py +57 -0
  250. tpyc/compiler.py +3945 -0
  251. tpyc/cycle_detection.py +358 -0
  252. tpyc/diagnostics.py +135 -0
  253. tpyc/dump_types.py +353 -0
  254. tpyc/frontend_diagnostics.py +47 -0
  255. tpyc/frontend_ir/__init__.py +140 -0
  256. tpyc/frontend_ir/lower.py +1098 -0
  257. tpyc/frontend_ir/nodes.py +718 -0
  258. tpyc/frontend_ir/resolver_adapter.py +151 -0
  259. tpyc/frontend_plugin.py +209 -0
  260. tpyc/install_docs.py +81 -0
  261. tpyc/liveness.py +756 -0
  262. tpyc/macro_api.py +1724 -0
  263. tpyc/macro_loader.py +497 -0
  264. tpyc/module_names.py +64 -0
  265. tpyc/modules/__init__.py +31 -0
  266. tpyc/modules/defs.py +89 -0
  267. tpyc/modules/registry.py +36 -0
  268. tpyc/modules/resolver.py +192 -0
  269. tpyc/modules/type_resolution.py +629 -0
  270. tpyc/namespace.py +172 -0
  271. tpyc/parse/__init__.py +84 -0
  272. tpyc/parse/imports.py +490 -0
  273. tpyc/parse/nodes.py +1732 -0
  274. tpyc/parse/parser.py +4043 -0
  275. tpyc/parse/resolve_refs.py +466 -0
  276. tpyc/parse/type_resolver.py +1060 -0
  277. tpyc/prescan.py +254 -0
  278. tpyc/qnames.py +149 -0
  279. tpyc/repl.py +529 -0
  280. tpyc/repl_backends.py +848 -0
  281. tpyc/sema/__init__.py +21 -0
  282. tpyc/sema/analyzer.py +3625 -0
  283. tpyc/sema/bound_check.py +72 -0
  284. tpyc/sema/builder_trace.py +684 -0
  285. tpyc/sema/calls.py +5406 -0
  286. tpyc/sema/compatibility.py +2107 -0
  287. tpyc/sema/context.py +1243 -0
  288. tpyc/sema/expressions.py +3737 -0
  289. tpyc/sema/flow_facts.py +199 -0
  290. tpyc/sema/init_tracker.py +150 -0
  291. tpyc/sema/list_literals.py +69 -0
  292. tpyc/sema/literal_utils.py +27 -0
  293. tpyc/sema/local_deduction.py +1088 -0
  294. tpyc/sema/macros.py +179 -0
  295. tpyc/sema/match.py +1177 -0
  296. tpyc/sema/method_expansion.py +347 -0
  297. tpyc/sema/methods.py +2197 -0
  298. tpyc/sema/mutation_propagation.py +268 -0
  299. tpyc/sema/narrowing.py +857 -0
  300. tpyc/sema/numeric_lattice.py +160 -0
  301. tpyc/sema/operators.py +402 -0
  302. tpyc/sema/overloads.py +841 -0
  303. tpyc/sema/protocols.py +1209 -0
  304. tpyc/sema/reach_analysis.py +202 -0
  305. tpyc/sema/registration.py +3156 -0
  306. tpyc/sema/scope_tracker.py +193 -0
  307. tpyc/sema/statements.py +4426 -0
  308. tpyc/sema/type_ops.py +1879 -0
  309. tpyc/sema/value_range.py +181 -0
  310. tpyc/symbol_binding.py +259 -0
  311. tpyc/test_c3_mro.py +208 -0
  312. tpyc/test_cli_argv.py +52 -0
  313. tpyc/test_compiler.py +559 -0
  314. tpyc/test_contains_type_param.py +101 -0
  315. tpyc/test_cycle_detection.py +221 -0
  316. tpyc/test_dump_types.py +225 -0
  317. tpyc/test_install_docs.py +65 -0
  318. tpyc/test_local_cpp_form.py +135 -0
  319. tpyc/test_macro_loader.py +76 -0
  320. tpyc/test_method_expansion.py +254 -0
  321. tpyc/test_nominal_identity.py +182 -0
  322. tpyc/test_overloads.py +410 -0
  323. tpyc/test_parse.py +303 -0
  324. tpyc/test_parse_type_ref.py +506 -0
  325. tpyc/test_parse_version_info.py +58 -0
  326. tpyc/test_reach_analysis.py +72 -0
  327. tpyc/test_ref_type.py +216 -0
  328. tpyc/test_send_sync_substitution.py +276 -0
  329. tpyc/test_tuple_mutation_propagation.py +206 -0
  330. tpyc/test_type_def_registry.py +1729 -0
  331. tpyc/test_union_types.py +195 -0
  332. tpyc/type_def_registry.py +975 -0
  333. tpyc/typesys.py +5104 -0
@@ -0,0 +1,78 @@
1
+ # tpy: native_module
2
+ # tpy: cpp_namespace("tpystd::tpy")
3
+ # _bootstrap must be imported before _core: _bootstrap._extern defines
4
+ # @builtin_decorator stubs whose arg schemas are needed when parsing
5
+ # decorator kwargs (e.g. @native(function=True)) in _core/_types.py.
6
+ from ._bootstrap import (
7
+ # Decorators / type modifiers
8
+ readonly, noalloc, nocopy, pure, inline, dynamic, error_return,
9
+ Own, Fn,
10
+ )
11
+ from ._core import (
12
+ # Structural protocols
13
+ Truthy, Stringable, Representable, Hashable, Comparable, Equatable,
14
+ Deref, Spannable, Writable, Readable, BinaryWritable, BinaryReadable,
15
+ Seekable, Closable,
16
+ # Marker protocols
17
+ NativeIterable, NativeRangeConstructible, ValueType, Copyable, Send, Sync,
18
+ Default, Covariant, ReturnException,
19
+ # Fixed-width integer constraint protocols
20
+ AnyFixedInt, AnyFixedSigned, AnyFixedUnsigned,
21
+ # Primitive types
22
+ Float32,
23
+ Int8, Int16, Int32, Int64,
24
+ UInt8, UInt16, UInt32, UInt64,
25
+ Char, String, StrView, FStr, BytesView,
26
+ # Container types
27
+ Span, Array, Ptr, SpanIter,
28
+ # Functions
29
+ span, deref, take_ptr, make_default,
30
+ copy, copy_iter, own_iter, try_parse,
31
+ )
32
+ # `Task` / `Waker` / `Poll` / `Awaitable` / `poll_*` are not re-exported
33
+ # here -- importing from `tpy` would force every consumer to include
34
+ # `tpystd/coro.hpp` transitively. Use `from tpy.coro import ...`.
35
+ from ._builtins._exceptions import CancelledError
36
+ from ._builtins._types import basic_slice
37
+ from ._builtins._io import BinaryIO, open_text, open_binary
38
+
39
+ type Float64 = float
40
+
41
+ # Version/implementation identification lives in `tpy.version` submodule:
42
+ # from tpy.version import __version__, version_info, is_compiled
43
+ # Not re-exported here because native_module facades don't propagate
44
+ # variable imports or transitive init chains.
45
+
46
+ __all__ = [
47
+ # Primitive types
48
+ "Int8", "Int16", "Int32", "Int64",
49
+ "UInt8", "UInt16", "UInt32", "UInt64",
50
+ "Float32", "Float64",
51
+ "Char", "String", "StrView", "FStr", "BytesView",
52
+ # Container types
53
+ "Span", "Array", "Ptr", "SpanIter",
54
+ # Slice types
55
+ "basic_slice",
56
+ # Pointer / ownership
57
+ "Own", "Fn",
58
+ # Decorators / type modifiers
59
+ "readonly", "noalloc", "nocopy", "pure", "inline", "dynamic", "error_return",
60
+ "auto_readonly", "auto_own", # parser keywords (no .py stub)
61
+ # Structural protocols
62
+ "Truthy", "Stringable", "Representable",
63
+ "Hashable", "Comparable", "Equatable",
64
+ "Deref", "Spannable", "Writable", "Readable",
65
+ "BinaryWritable", "BinaryReadable",
66
+ "Seekable", "Closable", "Default",
67
+ # Marker protocols
68
+ "NativeIterable", "NativeRangeConstructible",
69
+ "ValueType", "Copyable", "Send", "Sync", "Covariant", "ReturnException",
70
+ # Fixed-width integer constraint protocols
71
+ "AnyFixedInt", "AnyFixedSigned", "AnyFixedUnsigned",
72
+ # Functions
73
+ "span", "deref", "take_ptr", "make_default",
74
+ "copy", "copy_iter", "own_iter", "try_parse",
75
+ "CancelledError",
76
+ # I/O
77
+ "BinaryIO", "open_text", "open_binary",
78
+ ]
@@ -0,0 +1,10 @@
1
+ # tpy: native_module
2
+ from ._extern import (
3
+ builtin_decorator, builtin_type,
4
+ native, cpp_template,
5
+ value_ptr_coercion, native_preserves_refs,
6
+ )
7
+ from ._decorators import (
8
+ readonly, noalloc, nocopy, pure, inline, dynamic, error_return,
9
+ Own, Fn,
10
+ )
@@ -0,0 +1,37 @@
1
+ # tpy: native_module
2
+ # tpy: cpp_namespace("tpystd::tpy")
3
+ # Decorator and type modifier stubs for import resolution.
4
+ # Type modifier stubs use @builtin_type so the compiler knows their
5
+ # qualified name (e.g. "tpy.Own"). Codegen skips them via is_keyword_stub.
6
+ # Decorator stubs use @builtin_decorator so the compiler resolves them
7
+ # by qualified name (e.g. "tpy.readonly"). Codegen skips via is_decorator_stub.
8
+ # Stub signatures define argument schemas -- the parser derives validation
9
+ # rules from params (type and default) instead of hardcoding them.
10
+ from ._extern import builtin_type, builtin_decorator
11
+
12
+ @builtin_type("tpy.Own")
13
+ class Own: ...
14
+
15
+ @builtin_type("tpy.Fn")
16
+ class Fn: ...
17
+
18
+ @builtin_decorator("tpy.readonly")
19
+ def readonly(is_readonly: bool = True): ...
20
+
21
+ @builtin_decorator("tpy.noalloc")
22
+ def noalloc(): ...
23
+
24
+ @builtin_decorator("tpy.nocopy")
25
+ def nocopy(): ...
26
+
27
+ @builtin_decorator("tpy.dynamic")
28
+ def dynamic(): ...
29
+
30
+ @builtin_decorator("tpy.pure")
31
+ def pure(): ...
32
+
33
+ @builtin_decorator("tpy.inline")
34
+ def inline(): ...
35
+
36
+ @builtin_decorator("tpy.error_return")
37
+ def error_return(exc_type: type): ...
@@ -0,0 +1,64 @@
1
+ # tpy: native_module
2
+ # tpy: cpp_namespace("tpystd::tpy")
3
+ # Extern decorator stubs. builtin_decorator is the bootstrap primitive
4
+ # (auto-resolved within this module via _EXTERN_KEYWORDS). All other
5
+ # decorators are defined using @builtin_decorator.
6
+
7
+ @builtin_decorator("tpy.extern.builtin_decorator")
8
+ def builtin_decorator(key: str): ...
9
+
10
+ @builtin_decorator("tpy.extern.builtin_type")
11
+ def builtin_type(key: str): ...
12
+
13
+ @builtin_decorator("tpy.extern.builtin_function")
14
+ def builtin_function(key: str): ...
15
+
16
+ @builtin_decorator("tpy.extern.native")
17
+ def native(name: str = "", function: bool = False, binding: str = "",
18
+ cpp_return_type: type | None = None, indirecting: bool = False): ...
19
+
20
+ @builtin_decorator("tpy.extern.export")
21
+ def export(name: str = "", binding: str = ""): ...
22
+
23
+ # Prefer @native over @cpp_template -- use only when @native can't express the
24
+ # call (e.g. wrapping in a constructor, type cast, or non-trivial expression).
25
+ @builtin_decorator("tpy.extern.cpp_template")
26
+ def cpp_template(template: str): ...
27
+
28
+ @builtin_decorator("tpy.extern.value_ptr_coercion")
29
+ def value_ptr_coercion(): ...
30
+
31
+ @builtin_decorator("tpy.extern.native_preserves_refs")
32
+ def native_preserves_refs(): ...
33
+
34
+ # Workaround for Python 3.12 -- Python 3.13+ has native type param defaults
35
+ # (PEP 696): def round[T = int](x: float) -> T: ...
36
+ @builtin_decorator("tpy.extern.type_param_default")
37
+ def type_param_default(): ...
38
+
39
+ # Sentinel for @type_param_default: resolves to the configured --default-int type.
40
+ # TODO: make this a real type alias (e.g. `type DefaultInt = ...`) with compiler
41
+ # support, so it can be used in type annotations beyond @type_param_default.
42
+ @builtin_type("tpy.extern.DefaultInt")
43
+ class DefaultInt: pass
44
+
45
+
46
+ # Native global variable declarations for C/C++ interop.
47
+ # TODO: design a macro function mechanism so these set variable properties
48
+ # (linkage, extern name) through the macro system instead of special handling.
49
+ @builtin_function("tpy.extern.native_global")
50
+ def native_global(name: str = "", binding: str = "", array: bool = False): ...
51
+
52
+ # Per-field C++ rename on @native classes. Used in the default-value slot of
53
+ # an annotated field on an @native class; the compiler extracts the rename
54
+ # string and drops the expression (no initializer is emitted for native fields).
55
+ @builtin_function("tpy.extern.native_field")
56
+ def native_field(name: str): ...
57
+
58
+ # Per-member C++ rename on @native enums. Used in the value slot of an enum
59
+ # member; the compiler extracts the rename string and treats the value as
60
+ # unspecified (the C++ side is the source of truth for the actual value).
61
+ # Useful when the C++ enumerator name clashes with a Python keyword
62
+ # (`None`, `True`, `False`) or follows a different naming convention.
63
+ @builtin_function("tpy.extern.native_member")
64
+ def native_member(name: str): ...
@@ -0,0 +1,11 @@
1
+ # tpy: native_module
2
+ from ._exceptions import BaseException, Exception, ValueError, OSError, FileNotFoundError, AttributeError, AssertionError, IndexError, KeyError, ArithmeticError, ZeroDivisionError, OverflowError, TypeError, NotImplementedError, RuntimeError, MemoryError, StopIteration, StopAsyncIteration, TimeoutError, CancelledError
3
+ from ._range import Range, range
4
+ from ._funcs import len, repr, hash, chr, ord, abs, min, max, pow, divmod, next, iter, round, print, input, isinstance, all, any, sum, sorted, bin, hex, oct, enumerate, reversed, zip, map, filter, getattr, setattr, delattr, hasattr
5
+ from ._bytes import bytes, bytearray
6
+ from ._types import bool, int, float, str, slice
7
+ from ._list import list
8
+ from ._dict import dict, dict_keys, dict_values, dict_items
9
+ from ._set import set
10
+ from ._io import TextIO, BinaryIO, open, open_text, open_binary
11
+ from ._super import super
@@ -0,0 +1,378 @@
1
+ # tpy: native_module
2
+ # tpy: cpp_namespace("tpystd::builtins")
3
+ from .._typing import overload, Self, Iterator, Iterable
4
+ from .._bootstrap._decorators import readonly, pure, Own
5
+ from .._core._types import UInt8, UInt64, Int32, Equatable, NativeIterable
6
+ from .._bootstrap._extern import native, cpp_template, builtin_type
7
+ from tpy import BytesView
8
+
9
+
10
+ @builtin_type("builtins.bytes")
11
+ @native("std::vector<uint8_t>")
12
+ class bytes(NativeIterable[UInt8], Iterable[UInt8], Equatable):
13
+ @overload
14
+ @cpp_template("std::vector<uint8_t>()")
15
+ def __init__(self) -> None: ...
16
+ @overload
17
+ @native("tpy::bytes_copy", function=True)
18
+ def __init__(self, x: bytes) -> None: ...
19
+ @overload
20
+ @native("tpy::bytes_copy", function=True)
21
+ def __init__(self, x: bytearray) -> None: ...
22
+ @overload
23
+ @native("tpy::bytes_copy", function=True)
24
+ def __init__(self, x: BytesView) -> None: ...
25
+ @overload
26
+ @native("tpy::bytes_from_size", function=True)
27
+ def __init__(self, x: Int32) -> None: ...
28
+ @overload
29
+ @cpp_template("::tpy::construct<std::vector<uint8_t>>({0})")
30
+ def __init__(self, x: Iterable[UInt8]) -> None: ...
31
+ # TODO(hot-path): the Int32 overload below is per-element range-checked.
32
+ @overload
33
+ @native("tpy::bytes_from_int_iterable", function=True)
34
+ def __init__(self, x: Iterable[Int32]) -> None: ...
35
+
36
+ @native("tpy::__iter__", function=True)
37
+ @readonly
38
+ @pure
39
+ def __iter__(self) -> Iterator[UInt8]: ...
40
+
41
+ @native("tpy::__len__", function=True)
42
+ @readonly
43
+ @pure
44
+ def __len__(self) -> Int32: ...
45
+
46
+ @overload
47
+ @native("tpy::bytes_getitem", function=True)
48
+ @readonly
49
+ @pure
50
+ def __getitem__(self, index: Int32) -> UInt8: ...
51
+
52
+ @overload
53
+ @cpp_template("::tpy::bytes_slice({self}, {0})")
54
+ @readonly
55
+ @pure
56
+ def __getitem__(self, index: basic_slice) -> BytesView: ...
57
+
58
+ @overload
59
+ @cpp_template("::tpy::bytes_stepped_slice({self}, {0})")
60
+ @readonly
61
+ @pure
62
+ def __getitem__(self, index: slice) -> bytes: ...
63
+
64
+ @overload
65
+ @native("tpy::bytes_contains", function=True)
66
+ @readonly
67
+ @pure
68
+ def __contains__(self, value: UInt8) -> bool: ...
69
+ @overload
70
+ @native("tpy::bytes_contains_sub", function=True)
71
+ @readonly
72
+ @pure
73
+ def __contains__(self, value: bytes) -> bool: ...
74
+
75
+ @overload
76
+ @native("tpy::bytes_concat", function=True)
77
+ @readonly
78
+ def __add__(self, other: bytes) -> bytes: ...
79
+ @overload
80
+ @native("tpy::bytes_concat", function=True)
81
+ @readonly
82
+ def __add__(self, other: bytearray) -> bytes: ...
83
+ @overload
84
+ @native("tpy::bytes_concat", function=True)
85
+ @readonly
86
+ def __add__(self, other: BytesView) -> bytes: ...
87
+
88
+ @native("tpy::bytes_repeat", function=True)
89
+ @readonly
90
+ @pure
91
+ def __mul__(self, n: Int32) -> bytes: ...
92
+
93
+ @native("tpy::bytes_repeat", function=True)
94
+ @readonly
95
+ @pure
96
+ def __rmul__(self, n: Int32) -> bytes: ...
97
+
98
+ @native("tpy::bytes_eq", function=True)
99
+ @readonly
100
+ @pure
101
+ def __eq__(self, other: bytes) -> bool: ...
102
+
103
+ @cpp_template("::tpy::__hash__({self})")
104
+ @readonly
105
+ @pure
106
+ def __hash__(self) -> UInt64: ...
107
+
108
+ @native("tpy::bytes_decode", function=True)
109
+ @readonly
110
+ @pure
111
+ def decode(self) -> str: ...
112
+
113
+ @native("tpy::bytes_hex", function=True)
114
+ @readonly
115
+ @pure
116
+ def hex(self) -> str: ...
117
+
118
+ @native("tpy::bytes_find", function=True)
119
+ @readonly
120
+ @pure
121
+ def find(self, sub: bytes) -> Int32: ...
122
+
123
+ @native("tpy::bytes_rfind", function=True)
124
+ @readonly
125
+ @pure
126
+ def rfind(self, sub: bytes) -> Int32: ...
127
+
128
+ @native("tpy::bytes_count", function=True)
129
+ @readonly
130
+ @pure
131
+ def count(self, sub: bytes) -> Int32: ...
132
+
133
+ @native("tpy::bytes_startswith", function=True)
134
+ @readonly
135
+ @pure
136
+ def startswith(self, prefix: bytes) -> bool: ...
137
+
138
+ @native("tpy::bytes_endswith", function=True)
139
+ @readonly
140
+ @pure
141
+ def endswith(self, suffix: bytes) -> bool: ...
142
+
143
+ @native("tpy::bytes_replace", function=True)
144
+ @readonly
145
+ @pure
146
+ def replace(self, old: bytes, new: bytes) -> bytes: ...
147
+
148
+ @native("tpy::bytes_split", function=True)
149
+ @readonly
150
+ @pure
151
+ def split(self, sep: bytes) -> Own[list[bytes]]: ...
152
+
153
+ @native("tpy::bytes_join", function=True)
154
+ @readonly
155
+ @pure
156
+ def join(self, items: Iterable[bytes]) -> bytes: ...
157
+
158
+ @native("tpy::bytes_strip", function=True)
159
+ @readonly
160
+ @pure
161
+ def strip(self) -> bytes: ...
162
+
163
+ @native("tpy::bytes_lstrip", function=True)
164
+ @readonly
165
+ @pure
166
+ def lstrip(self) -> bytes: ...
167
+
168
+ @overload
169
+ @native("tpy::bytes_rstrip", function=True)
170
+ @readonly
171
+ @pure
172
+ def rstrip(self) -> bytes: ...
173
+ @overload
174
+ @native("tpy::bytes_rstrip_chars", function=True)
175
+ @readonly
176
+ @pure
177
+ def rstrip(self, chars: bytes) -> bytes: ...
178
+
179
+ @native("tpy::bytes_upper", function=True)
180
+ @readonly
181
+ @pure
182
+ def upper(self) -> bytes: ...
183
+
184
+
185
+ @builtin_type("builtins.bytearray")
186
+ @native("std::vector<uint8_t>")
187
+ class bytearray(NativeIterable[UInt8], Iterable[UInt8], Equatable):
188
+ @overload
189
+ @cpp_template("std::vector<uint8_t>()")
190
+ def __init__(self) -> None: ...
191
+ # Concrete overloads first, same rationale as in `bytes` above.
192
+ @overload
193
+ @native("tpy::bytes_copy", function=True)
194
+ def __init__(self, x: bytes) -> None: ...
195
+ @overload
196
+ @native("tpy::bytes_copy", function=True)
197
+ def __init__(self, x: BytesView) -> None: ...
198
+ @overload
199
+ @native("tpy::bytes_copy", function=True)
200
+ def __init__(self, x: bytearray) -> None: ...
201
+ @overload
202
+ @native("tpy::bytes_from_size", function=True)
203
+ def __init__(self, x: Int32) -> None: ...
204
+ @overload
205
+ @cpp_template("::tpy::construct<std::vector<uint8_t>>({0})")
206
+ def __init__(self, x: Iterable[UInt8]) -> None: ...
207
+ # TODO(hot-path): the Int32 overload below is per-element range-checked.
208
+ @overload
209
+ @native("tpy::bytes_from_int_iterable", function=True)
210
+ def __init__(self, x: Iterable[Int32]) -> None: ...
211
+
212
+ @native("tpy::__iter__", function=True)
213
+ @readonly
214
+ @pure
215
+ def __iter__(self) -> Iterator[UInt8]: ...
216
+
217
+ @native("tpy::__len__", function=True)
218
+ @readonly
219
+ @pure
220
+ def __len__(self) -> Int32: ...
221
+
222
+ @overload
223
+ @native("tpy::bytes_getitem", function=True)
224
+ @readonly
225
+ @pure
226
+ def __getitem__(self, index: Int32) -> UInt8: ...
227
+
228
+ @overload
229
+ @cpp_template("::tpy::bytes_slice({self}, {0})")
230
+ @readonly
231
+ @pure
232
+ def __getitem__(self, index: basic_slice) -> BytesView: ...
233
+
234
+ @overload
235
+ @cpp_template("::tpy::bytes_stepped_slice({self}, {0})")
236
+ @readonly
237
+ @pure
238
+ def __getitem__(self, index: slice) -> bytes: ...
239
+
240
+ @overload
241
+ @native("tpy::bytes_contains", function=True)
242
+ @readonly
243
+ @pure
244
+ def __contains__(self, value: UInt8) -> bool: ...
245
+ @overload
246
+ @native("tpy::bytes_contains_sub", function=True)
247
+ @readonly
248
+ @pure
249
+ def __contains__(self, value: bytes) -> bool: ...
250
+
251
+ @native("tpy::bytearray_setitem", function=True)
252
+ def __setitem__(self, index: Int32, value: UInt8) -> None: ...
253
+
254
+ @overload
255
+ @native("tpy::bytes_concat", function=True)
256
+ @readonly
257
+ def __add__(self, other: bytes) -> bytearray: ...
258
+ @overload
259
+ @native("tpy::bytes_concat", function=True)
260
+ @readonly
261
+ def __add__(self, other: bytearray) -> bytearray: ...
262
+ @overload
263
+ @native("tpy::bytes_concat", function=True)
264
+ @readonly
265
+ def __add__(self, other: BytesView) -> bytearray: ...
266
+
267
+ @native("tpy::bytes_repeat", function=True)
268
+ @readonly
269
+ @pure
270
+ def __mul__(self, n: Int32) -> bytearray: ...
271
+
272
+ @native("tpy::bytes_eq", function=True)
273
+ @readonly
274
+ @pure
275
+ def __eq__(self, other: bytearray) -> bool: ...
276
+
277
+ @native("push_back")
278
+ def append(self, value: UInt8) -> None: ...
279
+
280
+ @overload
281
+ @native("tpy::extend", function=True)
282
+ def extend(self, other: Iterable[UInt8]) -> None: ...
283
+ # TODO(hot-path): the Int32 overload below is per-element range-checked.
284
+ @overload
285
+ @native("tpy::bytes_extend_int_iterable", function=True)
286
+ def extend(self, other: Iterable[Int32]) -> None: ...
287
+
288
+ @overload
289
+ @native("tpy::bytearray_pop", function=True)
290
+ def pop(self) -> UInt8: ...
291
+ @overload
292
+ @native("tpy::bytearray_pop_at", function=True)
293
+ def pop(self, index: Int32) -> UInt8: ...
294
+
295
+ @native
296
+ def clear(self) -> None: ...
297
+
298
+ @native("tpy::bytearray_insert", function=True)
299
+ def insert(self, index: Int32, value: UInt8) -> None: ...
300
+
301
+ @native("tpy::bytearray_remove", function=True)
302
+ def remove(self, value: UInt8) -> None: ...
303
+
304
+ @native("tpy::bytes_decode", function=True)
305
+ @readonly
306
+ @pure
307
+ def decode(self) -> str: ...
308
+
309
+ @native("tpy::bytes_hex", function=True)
310
+ @readonly
311
+ @pure
312
+ def hex(self) -> str: ...
313
+
314
+ @native("tpy::bytes_find", function=True)
315
+ @readonly
316
+ @pure
317
+ def find(self, sub: bytes) -> Int32: ...
318
+
319
+ @native("tpy::bytes_rfind", function=True)
320
+ @readonly
321
+ @pure
322
+ def rfind(self, sub: bytes) -> Int32: ...
323
+
324
+ @native("tpy::bytes_count", function=True)
325
+ @readonly
326
+ @pure
327
+ def count(self, sub: bytes) -> Int32: ...
328
+
329
+ @native("tpy::bytes_startswith", function=True)
330
+ @readonly
331
+ @pure
332
+ def startswith(self, prefix: bytes) -> bool: ...
333
+
334
+ @native("tpy::bytes_endswith", function=True)
335
+ @readonly
336
+ @pure
337
+ def endswith(self, suffix: bytes) -> bool: ...
338
+
339
+ @native("tpy::bytes_replace", function=True)
340
+ @readonly
341
+ @pure
342
+ def replace(self, old: bytes, new: bytes) -> bytes: ...
343
+
344
+ @native("tpy::bytes_split", function=True)
345
+ @readonly
346
+ @pure
347
+ def split(self, sep: bytes) -> Own[list[bytes]]: ...
348
+
349
+ @native("tpy::bytes_join", function=True)
350
+ @readonly
351
+ @pure
352
+ def join(self, items: Iterable[bytes]) -> bytes: ...
353
+
354
+ @native("tpy::bytes_strip", function=True)
355
+ @readonly
356
+ @pure
357
+ def strip(self) -> bytearray: ...
358
+
359
+ @native("tpy::bytes_lstrip", function=True)
360
+ @readonly
361
+ @pure
362
+ def lstrip(self) -> bytearray: ...
363
+
364
+ @overload
365
+ @native("tpy::bytes_rstrip", function=True)
366
+ @readonly
367
+ @pure
368
+ def rstrip(self) -> bytearray: ...
369
+ @overload
370
+ @native("tpy::bytes_rstrip_chars", function=True)
371
+ @readonly
372
+ @pure
373
+ def rstrip(self, chars: bytes) -> bytearray: ...
374
+
375
+ @native("tpy::bytes_upper", function=True)
376
+ @readonly
377
+ @pure
378
+ def upper(self) -> bytearray: ...