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,469 @@
1
+ /**
2
+ * TurboPython Runtime - Bytes Operations
3
+ *
4
+ * Python-style bytes operations: printing (b'...'), encode/decode,
5
+ * search, and manipulation helpers.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <algorithm>
11
+ #include <cstdint>
12
+ #include <iostream>
13
+ #include <ranges>
14
+ #include <span>
15
+ #include <sstream>
16
+ #include <string>
17
+ #include <string_view>
18
+ #include <type_traits>
19
+ #include <vector>
20
+
21
+ #include "core.hpp"
22
+ #include "container_ops.hpp"
23
+ #include "ranges.hpp"
24
+
25
+ namespace tpy {
26
+
27
+ // Type aliases for readability
28
+ using Bytes = std::vector<uint8_t>;
29
+ using BytesView = std::span<const uint8_t>;
30
+
31
+ // -- Static bytes literal ---------------------------------------------------
32
+
33
+ inline BytesView bytes_literal(const char* data, size_t n) {
34
+ return {reinterpret_cast<const uint8_t*>(data), n};
35
+ }
36
+
37
+ // -- Printing: b'hello\x00' ------------------------------------------------
38
+
39
+ namespace detail {
40
+
41
+ inline void write_byte_repr(std::ostream& os, uint8_t b) {
42
+ if (b == '\\') {
43
+ os << "\\\\";
44
+ } else if (b == '\'') {
45
+ os << "\\'";
46
+ } else if (b == '\t') {
47
+ os << "\\t";
48
+ } else if (b == '\n') {
49
+ os << "\\n";
50
+ } else if (b == '\r') {
51
+ os << "\\r";
52
+ } else if (b >= 0x20 && b < 0x7f) {
53
+ os << static_cast<char>(b);
54
+ } else {
55
+ os << "\\x";
56
+ os << "0123456789abcdef"[b >> 4];
57
+ os << "0123456789abcdef"[b & 0x0f];
58
+ }
59
+ }
60
+
61
+ } // namespace detail
62
+
63
+ struct BytesPrinter {
64
+ BytesView value;
65
+ explicit BytesPrinter(BytesView v) : value(v) {}
66
+ explicit BytesPrinter(const Bytes& v) : value(v) {}
67
+ };
68
+
69
+ struct ByteArrayPrinter {
70
+ BytesView value;
71
+ explicit ByteArrayPrinter(BytesView v) : value(v) {}
72
+ explicit ByteArrayPrinter(const Bytes& v) : value(v) {}
73
+ };
74
+
75
+ namespace detail {
76
+ inline void write_bytes_repr(std::ostream& os, BytesView data) {
77
+ os << "b'";
78
+ for (uint8_t b : data) {
79
+ write_byte_repr(os, b);
80
+ }
81
+ os << '\'';
82
+ }
83
+ } // namespace detail
84
+
85
+ inline std::ostream& operator<<(std::ostream& os, const BytesPrinter& bp) {
86
+ detail::write_bytes_repr(os, bp.value);
87
+ return os;
88
+ }
89
+
90
+ inline std::ostream& operator<<(std::ostream& os, const ByteArrayPrinter& bp) {
91
+ os << "bytearray(";
92
+ detail::write_bytes_repr(os, bp.value);
93
+ os << ')';
94
+ return os;
95
+ }
96
+
97
+ // __str__ / __repr__ overloads for raw Bytes / BytesView. Needed for
98
+ // generic dispatch (e.g. tpy::Any storing bytes), where the BytesPrinter
99
+ // wrapper isn't available at the call site.
100
+ inline std::string __str__(BytesView b) {
101
+ std::ostringstream ss;
102
+ ss << BytesPrinter{b};
103
+ return ss.str();
104
+ }
105
+
106
+ inline std::string __str__(const Bytes& b) { return __str__(BytesView{b}); }
107
+ inline std::string __repr__(BytesView b) { return __str__(b); }
108
+ inline std::string __repr__(const Bytes& b) { return __str__(BytesView{b}); }
109
+
110
+ // -- Construction -----------------------------------------------------------
111
+
112
+ inline Bytes bytes_from_size(int32_t n) {
113
+ if (n < 0) raise_value_error("negative count");
114
+ return Bytes(static_cast<size_t>(n), 0);
115
+ }
116
+
117
+ inline uint8_t int_to_byte(int32_t v) {
118
+ if (v < 0 || v > 255) raise_value_error("bytes must be in range(0, 256)");
119
+ return static_cast<uint8_t>(v);
120
+ }
121
+
122
+ inline Bytes bytes_copy(BytesView src) {
123
+ return Bytes(src.begin(), src.end());
124
+ }
125
+
126
+ // TODO(hot-path): per-element int_to_byte range check; revisit alongside a
127
+ // @not_hot_path / unchecked variant. Prefer the UInt8 overload when possible.
128
+ template<typename Arg>
129
+ void bytes_extend_int_iterable(Bytes& self, Arg&& arg) {
130
+ if constexpr (std::ranges::input_range<std::remove_cvref_t<Arg>>) {
131
+ if constexpr (std::ranges::sized_range<std::remove_cvref_t<Arg>>) {
132
+ self.reserve(self.size() + std::ranges::size(arg));
133
+ }
134
+ for (auto&& v : arg) self.push_back(int_to_byte(v));
135
+ } else {
136
+ for (;;) {
137
+ auto __r = arg.__next__();
138
+ if (!__r.has_value()) break;
139
+ self.push_back(int_to_byte(*__r));
140
+ }
141
+ }
142
+ }
143
+
144
+ template<typename Arg>
145
+ Bytes bytes_from_int_iterable(Arg&& arg) {
146
+ Bytes result;
147
+ bytes_extend_int_iterable(result, std::forward<Arg>(arg));
148
+ return result;
149
+ }
150
+
151
+ inline Bytes bytes_from_str(std::string_view s) {
152
+ return Bytes(s.begin(), s.end());
153
+ }
154
+
155
+ // -- Conversion -------------------------------------------------------------
156
+
157
+ inline std::string bytes_decode(BytesView b) {
158
+ return std::string(reinterpret_cast<const char*>(b.data()), b.size());
159
+ }
160
+
161
+ inline std::string bytes_hex(BytesView b) {
162
+ std::string result;
163
+ result.reserve(b.size() * 2);
164
+ for (uint8_t byte : b) {
165
+ result += "0123456789abcdef"[byte >> 4];
166
+ result += "0123456789abcdef"[byte & 0x0f];
167
+ }
168
+ return result;
169
+ }
170
+
171
+ // -- Element access ---------------------------------------------------------
172
+
173
+ inline uint8_t bytes_getitem(BytesView b, int32_t index) {
174
+ auto i = normalize_index(b, index, "bytes index out of range");
175
+ return b[i];
176
+ }
177
+
178
+ // -- Search -----------------------------------------------------------------
179
+
180
+ inline int32_t bytes_find(BytesView haystack, BytesView needle) {
181
+ if (needle.empty()) return 0;
182
+ auto it = std::search(haystack.begin(), haystack.end(),
183
+ needle.begin(), needle.end());
184
+ if (it == haystack.end()) return -1;
185
+ return static_cast<int32_t>(it - haystack.begin());
186
+ }
187
+
188
+ inline int32_t bytes_rfind(BytesView haystack, BytesView needle) {
189
+ if (needle.empty()) return static_cast<int32_t>(haystack.size());
190
+ if (needle.size() > haystack.size()) return -1;
191
+ for (auto i = static_cast<int32_t>(haystack.size() - needle.size()); i >= 0; --i) {
192
+ if (std::equal(needle.begin(), needle.end(), haystack.begin() + i)) {
193
+ return i;
194
+ }
195
+ }
196
+ return -1;
197
+ }
198
+
199
+ inline int32_t bytes_count(BytesView haystack, BytesView needle) {
200
+ if (needle.empty()) return static_cast<int32_t>(haystack.size()) + 1;
201
+ if (needle.size() > haystack.size()) return 0;
202
+ int32_t count = 0;
203
+ size_t pos = 0;
204
+ while (pos + needle.size() <= haystack.size()) {
205
+ auto it = std::search(haystack.begin() + static_cast<std::ptrdiff_t>(pos), haystack.end(),
206
+ needle.begin(), needle.end());
207
+ if (it == haystack.end()) break;
208
+ ++count;
209
+ pos = static_cast<size_t>(it - haystack.begin()) + needle.size();
210
+ }
211
+ return count;
212
+ }
213
+
214
+ inline bool bytes_startswith(BytesView b, BytesView prefix) {
215
+ if (prefix.size() > b.size()) return false;
216
+ return std::equal(prefix.begin(), prefix.end(), b.begin());
217
+ }
218
+
219
+ inline bool bytes_endswith(BytesView b, BytesView suffix) {
220
+ if (suffix.size() > b.size()) return false;
221
+ return std::equal(suffix.begin(), suffix.end(), b.end() - static_cast<std::ptrdiff_t>(suffix.size()));
222
+ }
223
+
224
+ inline bool bytes_contains(BytesView haystack, uint8_t needle) {
225
+ return std::find(haystack.begin(), haystack.end(), needle) != haystack.end();
226
+ }
227
+
228
+ inline bool bytes_contains(BytesView haystack, int32_t needle) {
229
+ return bytes_contains(haystack, int_to_byte(needle));
230
+ }
231
+
232
+ // -- Manipulation -----------------------------------------------------------
233
+
234
+ inline Bytes bytes_replace(BytesView s, BytesView old_sub, BytesView new_sub) {
235
+ if (old_sub.empty()) {
236
+ // Insert new_sub before each byte and at the end
237
+ Bytes result;
238
+ result.reserve(s.size() + (s.size() + 1) * new_sub.size());
239
+ for (uint8_t b : s) {
240
+ result.insert(result.end(), new_sub.begin(), new_sub.end());
241
+ result.push_back(b);
242
+ }
243
+ result.insert(result.end(), new_sub.begin(), new_sub.end());
244
+ return result;
245
+ }
246
+ if (old_sub.size() > s.size()) return Bytes(s.begin(), s.end());
247
+ Bytes result;
248
+ size_t pos = 0;
249
+ while (pos + old_sub.size() <= s.size()) {
250
+ auto it = std::search(s.begin() + static_cast<std::ptrdiff_t>(pos), s.end(), old_sub.begin(), old_sub.end());
251
+ result.insert(result.end(), s.begin() + static_cast<std::ptrdiff_t>(pos), it);
252
+ if (it == s.end()) return result;
253
+ result.insert(result.end(), new_sub.begin(), new_sub.end());
254
+ pos = static_cast<size_t>(it - s.begin()) + old_sub.size();
255
+ }
256
+ result.insert(result.end(), s.begin() + static_cast<std::ptrdiff_t>(pos), s.end());
257
+ return result;
258
+ }
259
+
260
+ inline std::vector<Bytes> bytes_split(BytesView s, BytesView sep) {
261
+ if (sep.empty()) raise_value_error("empty separator");
262
+ std::vector<Bytes> result;
263
+ size_t pos = 0;
264
+ while (pos + sep.size() <= s.size()) {
265
+ auto it = std::search(s.begin() + static_cast<std::ptrdiff_t>(pos), s.end(), sep.begin(), sep.end());
266
+ result.emplace_back(s.begin() + static_cast<std::ptrdiff_t>(pos), it);
267
+ if (it == s.end()) return result;
268
+ pos = static_cast<size_t>(it - s.begin()) + sep.size();
269
+ }
270
+ result.emplace_back(s.begin() + static_cast<std::ptrdiff_t>(pos), s.end());
271
+ return result;
272
+ }
273
+
274
+ template <typename Container>
275
+ Bytes bytes_join(BytesView sep, const Container& items) {
276
+ Bytes result;
277
+ bool first = true;
278
+ for (const auto& item : items) {
279
+ if (!first) result.insert(result.end(), sep.begin(), sep.end());
280
+ BytesView view(item);
281
+ result.insert(result.end(), view.begin(), view.end());
282
+ first = false;
283
+ }
284
+ return result;
285
+ }
286
+
287
+ inline bool is_ascii_whitespace(uint8_t b) {
288
+ return b == 0x20 || b == 0x09 || b == 0x0a || b == 0x0d || b == 0x0b || b == 0x0c;
289
+ }
290
+
291
+ // View-returning variants (for BytesView methods)
292
+ inline BytesView bytes_strip_view(BytesView b) {
293
+ auto start = b.begin();
294
+ auto end = b.end();
295
+ while (start != end && is_ascii_whitespace(*start)) ++start;
296
+ while (end != start && is_ascii_whitespace(*(end - 1))) --end;
297
+ return BytesView(start, end);
298
+ }
299
+
300
+ inline BytesView bytes_lstrip_view(BytesView b) {
301
+ auto start = b.begin();
302
+ while (start != b.end() && is_ascii_whitespace(*start)) ++start;
303
+ return BytesView(start, b.end());
304
+ }
305
+
306
+ inline BytesView bytes_rstrip_view(BytesView b) {
307
+ auto end = b.end();
308
+ while (end != b.begin() && is_ascii_whitespace(*(end - 1))) --end;
309
+ return BytesView(b.begin(), end);
310
+ }
311
+
312
+ inline BytesView bytes_rstrip_chars_view(BytesView b, BytesView chars) {
313
+ auto end = b.end();
314
+ while (end != b.begin() &&
315
+ std::find(chars.begin(), chars.end(), *(end - 1)) != chars.end())
316
+ --end;
317
+ return BytesView(b.begin(), end);
318
+ }
319
+
320
+ // Copy-returning variants (for bytes/bytearray methods)
321
+ inline Bytes bytes_strip(BytesView b) {
322
+ auto v = bytes_strip_view(b);
323
+ return Bytes(v.begin(), v.end());
324
+ }
325
+
326
+ inline Bytes bytes_lstrip(BytesView b) {
327
+ auto v = bytes_lstrip_view(b);
328
+ return Bytes(v.begin(), v.end());
329
+ }
330
+
331
+ inline Bytes bytes_rstrip(BytesView b) {
332
+ auto v = bytes_rstrip_view(b);
333
+ return Bytes(v.begin(), v.end());
334
+ }
335
+
336
+ inline Bytes bytes_rstrip_chars(BytesView b, BytesView chars) {
337
+ auto v = bytes_rstrip_chars_view(b, chars);
338
+ return Bytes(v.begin(), v.end());
339
+ }
340
+
341
+ inline Bytes bytes_upper(BytesView b) {
342
+ Bytes result(b.begin(), b.end());
343
+ for (auto& c : result) {
344
+ if (c >= 'a' && c <= 'z') c -= 32;
345
+ }
346
+ return result;
347
+ }
348
+
349
+ inline bool bytes_contains_sub(BytesView haystack, BytesView needle) {
350
+ return std::search(haystack.begin(), haystack.end(),
351
+ needle.begin(), needle.end()) != haystack.end();
352
+ }
353
+
354
+ inline Bytes bytes_read_sub(BytesView data, int32_t offset, int32_t count) {
355
+ return Bytes(data.begin() + offset, data.begin() + offset + count);
356
+ }
357
+
358
+ // -- Concatenation / repetition ---------------------------------------------
359
+
360
+ inline Bytes bytes_concat(BytesView a, BytesView b) {
361
+ Bytes result;
362
+ result.reserve(a.size() + b.size());
363
+ result.insert(result.end(), a.begin(), a.end());
364
+ result.insert(result.end(), b.begin(), b.end());
365
+ return result;
366
+ }
367
+
368
+ inline Bytes bytes_repeat(BytesView b, int32_t n) {
369
+ if (n <= 0) return {};
370
+ Bytes result;
371
+ result.reserve(b.size() * static_cast<size_t>(n));
372
+ for (int32_t i = 0; i < n; ++i) {
373
+ result.insert(result.end(), b.begin(), b.end());
374
+ }
375
+ return result;
376
+ }
377
+
378
+ // -- Slicing ----------------------------------------------------------------
379
+
380
+ inline BytesView bytes_slice(BytesView b, int32_t start, int32_t stop) {
381
+ auto sz = static_cast<int32_t>(b.size());
382
+ if (start < 0) start = std::max(0, sz + start);
383
+ if (stop < 0) stop = std::max(0, sz + stop);
384
+ start = std::min(start, sz);
385
+ stop = std::min(stop, sz);
386
+ if (start >= stop) return {};
387
+ return b.subspan(static_cast<std::size_t>(start),
388
+ static_cast<std::size_t>(stop - start));
389
+ }
390
+
391
+ inline Bytes bytes_stepped_slice(BytesView b, int32_t start, int32_t stop, int32_t step) {
392
+ auto len = static_cast<std::ptrdiff_t>(b.size());
393
+ auto [i, j, st] = detail::resolve_stepped_bounds(start, stop, step, len);
394
+ Bytes result;
395
+ if (st > 0) {
396
+ for (auto k = i; k < j; k += st)
397
+ result.push_back(b[static_cast<std::size_t>(k)]);
398
+ } else {
399
+ for (auto k = i; k > j; k += st)
400
+ result.push_back(b[static_cast<std::size_t>(k)]);
401
+ }
402
+ return result;
403
+ }
404
+
405
+ /// BasicSlice/Slice overloads.
406
+ inline BytesView bytes_slice(BytesView b, BasicSlice sl) {
407
+ return bytes_slice(b, sl.start.value_or(0), sl.stop.value_or(SLICE_END));
408
+ }
409
+
410
+ inline Bytes bytes_stepped_slice(BytesView b, Slice sl) {
411
+ return bytes_stepped_slice(b, sl.start.value_or(SLICE_NONE),
412
+ sl.stop.value_or(SLICE_NONE),
413
+ sl.step.value_or(1));
414
+ }
415
+
416
+ // -- Equality ---------------------------------------------------------------
417
+
418
+ inline bool bytes_eq(BytesView a, BytesView b) {
419
+ return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin());
420
+ }
421
+
422
+ // -- Mutation helpers (for bytearray) ---------------------------------------
423
+
424
+ inline void bytearray_setitem(Bytes& b, int32_t index, uint8_t value) {
425
+ auto i = normalize_index(b, index, "bytearray index out of range");
426
+ b[i] = value;
427
+ }
428
+
429
+ inline void bytearray_setitem(Bytes& b, int32_t index, int32_t value) {
430
+ bytearray_setitem(b, index, int_to_byte(value));
431
+ }
432
+
433
+ inline uint8_t bytearray_pop(Bytes& b) {
434
+ if (b.empty()) raise_index_error("pop from empty bytearray");
435
+ uint8_t val = b.back();
436
+ b.pop_back();
437
+ return val;
438
+ }
439
+
440
+ inline uint8_t bytearray_pop_at(Bytes& b, int32_t index) {
441
+ auto i = normalize_index(b, index, "pop index out of range");
442
+ uint8_t val = b[i];
443
+ b.erase(b.begin() + static_cast<std::ptrdiff_t>(i));
444
+ return val;
445
+ }
446
+
447
+ inline void bytearray_insert(Bytes& b, int32_t index, uint8_t value) {
448
+ auto sz = static_cast<int32_t>(b.size());
449
+ int32_t i = index;
450
+ if (i < 0) i = std::max(0, sz + i);
451
+ if (i > sz) i = sz;
452
+ b.insert(b.begin() + i, value);
453
+ }
454
+
455
+ inline void bytearray_insert(Bytes& b, int32_t index, int32_t value) {
456
+ bytearray_insert(b, index, int_to_byte(value));
457
+ }
458
+
459
+ inline void bytearray_remove(Bytes& b, uint8_t value) {
460
+ auto it = std::find(b.begin(), b.end(), value);
461
+ if (it == b.end()) raise_value_error("value not found in bytearray");
462
+ b.erase(it);
463
+ }
464
+
465
+ inline void bytearray_remove(Bytes& b, int32_t value) {
466
+ bytearray_remove(b, int_to_byte(value));
467
+ }
468
+
469
+ } // namespace tpy