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,62 @@
1
+ #pragma once
2
+
3
+ #include <chrono>
4
+ #include <cstdint>
5
+ #include <ctime>
6
+ #include <thread>
7
+
8
+ namespace tpy::stdlib::time {
9
+
10
+ inline double perf_counter() {
11
+ auto now = std::chrono::steady_clock::now();
12
+ return std::chrono::duration<double>(now.time_since_epoch()).count();
13
+ }
14
+
15
+ inline int64_t perf_counter_ns() {
16
+ auto now = std::chrono::steady_clock::now();
17
+ return std::chrono::duration_cast<std::chrono::nanoseconds>(
18
+ now.time_since_epoch()).count();
19
+ }
20
+
21
+ // monotonic aliases perf_counter -- CPython ties them on POSIX, so a
22
+ // distinct clock would only diverge artificially.
23
+
24
+ inline double monotonic() {
25
+ return perf_counter();
26
+ }
27
+
28
+ inline int64_t monotonic_ns() {
29
+ return perf_counter_ns();
30
+ }
31
+
32
+ // system_clock can jump backward on NTP adjustments; callers measuring
33
+ // elapsed time should use monotonic_ns instead.
34
+
35
+ inline int64_t time_ns() {
36
+ auto now = std::chrono::system_clock::now();
37
+ return std::chrono::duration_cast<std::chrono::nanoseconds>(
38
+ now.time_since_epoch()).count();
39
+ }
40
+
41
+ // process_time: CPU time consumed by the current process, in seconds.
42
+ // CPython uses clock_gettime(CLOCK_PROCESS_CPUTIME_ID) where available;
43
+ // std::clock() is the portable C++ fallback (resolution typically ~1us
44
+ // on Linux, lower on some platforms).
45
+
46
+ inline double process_time() {
47
+ return static_cast<double>(std::clock()) / CLOCKS_PER_SEC;
48
+ }
49
+
50
+ // Sleep until a steady_clock deadline expressed as seconds since the
51
+ // clock's epoch (the same domain as monotonic() / perf_counter()).
52
+ // Returns immediately if the deadline is already in the past.
53
+ // Used by asyncio's TPy-side run loop to wait for the next timer.
54
+ inline void sleep_until_steady(double deadline_seconds) {
55
+ using DurDouble = std::chrono::duration<double>;
56
+ using TP = std::chrono::steady_clock::time_point;
57
+ auto deadline = TP(std::chrono::duration_cast<TP::duration>(
58
+ DurDouble(deadline_seconds)));
59
+ std::this_thread::sleep_until(deadline);
60
+ }
61
+
62
+ } // namespace tpy::stdlib::time
@@ -0,0 +1,121 @@
1
+ /**
2
+ * TurboPython Runtime - System Utilities
3
+ *
4
+ * Time functions, sys.argv, and sys.stdout / sys.stderr wrappers.
5
+ */
6
+
7
+ #pragma once
8
+
9
+ #include <chrono>
10
+ #include <cstddef>
11
+ #include <cstdint>
12
+ #include <iostream>
13
+ #include <ostream>
14
+ #include <string>
15
+ #include <string_view>
16
+ #include <thread>
17
+ #include <vector>
18
+
19
+ #include "core.hpp"
20
+
21
+ namespace tpy {
22
+
23
+ /**
24
+ * time_time - Return seconds since epoch as double.
25
+ *
26
+ * Equivalent to Python's time.time().
27
+ */
28
+ inline double time_time() {
29
+ auto now = std::chrono::system_clock::now();
30
+ auto duration = now.time_since_epoch();
31
+ return std::chrono::duration<double>(duration).count();
32
+ }
33
+
34
+ /**
35
+ * time_sleep - Suspend execution for the given number of seconds.
36
+ *
37
+ * Equivalent to Python's time.sleep().
38
+ */
39
+ inline void time_sleep(double seconds) {
40
+ if (seconds < 0) {
41
+ raise_value_error("sleep length must be non-negative");
42
+ }
43
+ auto duration = std::chrono::duration<double>(seconds);
44
+ std::this_thread::sleep_for(duration);
45
+ }
46
+
47
+ /**
48
+ * sys_argv - Command line arguments as vector of string_view.
49
+ *
50
+ * Equivalent to Python's sys.argv. Initialized by init_sys_argv() in main().
51
+ * Note: string_views point to argv strings which are valid for program lifetime.
52
+ */
53
+ inline std::vector<std::string_view> sys_argv;
54
+
55
+ /**
56
+ * get_sys_argv - Return sys_argv as owned strings for module-level init.
57
+ *
58
+ * Called once during sys module init, after init_sys_argv() has populated sys_argv.
59
+ */
60
+ inline std::vector<std::string> get_sys_argv() {
61
+ return {sys_argv.begin(), sys_argv.end()};
62
+ }
63
+
64
+ /**
65
+ * sys_exit - Terminate the program with the given exit code.
66
+ *
67
+ * Equivalent to Python's sys.exit(code) for an integer argument.
68
+ * Static destructors and atexit handlers run; thread-local
69
+ * destructors and finally clauses do NOT (this is std::exit, not
70
+ * a thrown SystemExit). Acceptable for a v1 binding driven by
71
+ * argparse's --help / parse-error paths.
72
+ */
73
+ [[noreturn]] inline void sys_exit(int code) {
74
+ std::exit(code);
75
+ }
76
+
77
+ /**
78
+ * init_sys_argv - Initialize sys_argv from main()'s argc/argv.
79
+ *
80
+ * Called at program startup before __tpy_init().
81
+ */
82
+ inline void init_sys_argv(int argc, char* argv[]) {
83
+ sys_argv.clear();
84
+ sys_argv.reserve(static_cast<std::size_t>(argc));
85
+ for (int i = 0; i < argc; ++i) {
86
+ sys_argv.emplace_back(argv[i]);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * StdStream - non-owning wrapper around std::cout / std::cerr.
92
+ *
93
+ * Backs sys.stdout / sys.stderr; satisfies the Writable protocol so it works
94
+ * as a `print(file=...)` target alongside TextFile and user types.
95
+ */
96
+ class StdStream {
97
+ std::ostream* sink_;
98
+
99
+ public:
100
+ explicit StdStream(std::ostream& s) : sink_(&s) {}
101
+
102
+ int32_t write(std::string_view text) {
103
+ sink_->write(text.data(), static_cast<std::streamsize>(text.size()));
104
+ return static_cast<int32_t>(text.size());
105
+ }
106
+
107
+ void flush() { sink_->flush(); }
108
+
109
+ std::ostream& sink() const { return *sink_; }
110
+
111
+ friend std::ostream& operator<<(std::ostream& os, const StdStream& s) {
112
+ if (s.sink_ == &std::cout) return os << "<sys.stdout>";
113
+ if (s.sink_ == &std::cerr) return os << "<sys.stderr>";
114
+ return os << "<StdStream>";
115
+ }
116
+ };
117
+
118
+ inline StdStream get_sys_stdout() { return StdStream(std::cout); }
119
+ inline StdStream get_sys_stderr() { return StdStream(std::cerr); }
120
+
121
+ } // namespace tpy
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TurboPython Runtime - Throwable ABI
3
+ *
4
+ * Abstract base for the TPy exception hierarchy. Phase 20 (E9) promotes
5
+ * `Throwable` from a markerless `@dynamic` protocol to a real one with
6
+ * two virtuals so user code can store polymorphic exceptions in
7
+ * `Box[Throwable]` and rethrow them without slicing.
8
+ *
9
+ * - clone() -- polymorphic copy on the heap (used by Box(e.clone())).
10
+ * - __raise__() -- throws *this as the dynamic type, preserving the
11
+ * concrete subclass through C++ unwinding.
12
+ *
13
+ * what() stays as the std::exception virtual; the BaseException
14
+ * implementation returns the inherited `message` field.
15
+ *
16
+ * Stage 2a (this file) ships the abstract base and a per-class macro
17
+ * that emits the two overrides for every native exception subclass in
18
+ * core.hpp / async.hpp. Stage 4 deletes this macro when codegen auto-
19
+ * emits the same overrides on every TPy-defined Throwable subclass.
20
+ */
21
+
22
+ #pragma once
23
+
24
+ #include <exception>
25
+ #include <memory>
26
+
27
+ #include "type_traits.hpp"
28
+
29
+ namespace tpy {
30
+
31
+ struct Throwable : std::exception {
32
+ [[nodiscard]] virtual std::unique_ptr<Throwable> clone() const = 0;
33
+ [[noreturn]] virtual void __raise__() const = 0;
34
+ ~Throwable() override = default;
35
+ };
36
+
37
+ } // namespace tpy
38
+
39
+ // Marks ::tpy::Throwable as a @dynamic-protocol base for the polymorphism
40
+ // predicate `is_polymorphic_class_type`. Normally codegen emits this
41
+ // specialization alongside its codegen-emitted abstract base; for
42
+ // `@native + @dynamic` protocols the codegen path is suppressed and the
43
+ // runtime supplies it.
44
+ template<> struct tpy::is_dyn_protocol_base<::tpy::Throwable> : std::true_type {};
45
+
46
+ // Per-class boilerplate for native exception subclasses. Stage 4 of Phase 20
47
+ // retires this macro in favor of codegen auto-emission on every TPy-defined
48
+ // Throwable subclass; until then, every concrete native subclass needs both
49
+ // overrides explicitly (inheriting them from BaseException would slice the
50
+ // dynamic type at clone() / __raise__() sites).
51
+ #define TPY_THROWABLE_VIRTUALS(ThisClass) \
52
+ [[nodiscard]] std::unique_ptr<::tpy::Throwable> clone() const override { \
53
+ return std::make_unique<ThisClass>(*this); \
54
+ } \
55
+ [[noreturn]] void __raise__() const override { throw *this; }
@@ -0,0 +1,156 @@
1
+ /**
2
+ * TurboPython Runtime - Main Header
3
+ *
4
+ * Includes all runtime components. This is the primary header for
5
+ * TurboPython generated code.
6
+ *
7
+ * Requires C++23 for std::ranges concepts.
8
+ */
9
+
10
+ #pragma once
11
+
12
+ // Core utilities (no dependencies)
13
+ #include "core.hpp"
14
+
15
+ // Async primitives: CancelledError only. Waker / Awaker / Poll<T> /
16
+ // Awaitable<T> are pure-TPy in `lib/tpy/tpy/coro/__init__.py` (Waker,
17
+ // Awaker, Awaitable concept) and `lib/tpy/tpy/_core/_types.py` (Poll).
18
+ #include "async.hpp"
19
+
20
+ // Enum utility trait (primary template; specializations in generated code)
21
+ #include "enum.hpp"
22
+
23
+ // Dynamic protocol adapters (primary templates; specializations in generated code)
24
+ #include "dynamic.hpp"
25
+
26
+ // Formatting (no dependencies)
27
+ #include "format.hpp"
28
+
29
+ // Fixed-width integer checked arithmetic (depends on core)
30
+ #include "fixed_int.hpp"
31
+
32
+ // Type traits (no dependencies)
33
+ #include "type_traits.hpp"
34
+
35
+ // Range utilities (no dependencies)
36
+ #include "ranges.hpp"
37
+
38
+ // Range iterator (depends on core, fixed_int)
39
+ #include "range.hpp"
40
+
41
+ // Uninitialized storage (depends on core)
42
+ #include "uninit_array_storage.hpp"
43
+ #include "uninit_heap_storage.hpp"
44
+ #include "frame_slot.hpp"
45
+
46
+ // BigInt arbitrary precision (depends on core, fixed_int, type_traits)
47
+ #include "bigint.hpp"
48
+
49
+ // Builtin function helpers (depends on core, fixed_int, bigint)
50
+ #include "builtins.hpp"
51
+
52
+ // Slice type for user-defined __getitem__ overloads (no dependencies)
53
+ #include "slice.hpp"
54
+
55
+ // Container operations (depends on core, type_traits)
56
+ #include "container_ops.hpp"
57
+
58
+ // Protocols and concepts (depends on ranges)
59
+ #include "protocols.hpp"
60
+
61
+ // next_iter adapter: begin()/end() for __next__()-based iterators
62
+ #include "next_iter.hpp"
63
+
64
+ // Generator expression wrapper (depends on next_iter, <optional>, <expected>)
65
+ #include "generator.hpp"
66
+
67
+ // SpanIter: lightweight iterator over contiguous span (depends on <span>, error_return)
68
+ #include "span_iter.hpp"
69
+
70
+ // varargs<T>: dual-mode span for *args (direct contiguous or indirect pointer array)
71
+ #include "varargs.hpp"
72
+
73
+ // OwnIter: drain iterator for std::vector (depends on core)
74
+ #include "own_iter.hpp"
75
+
76
+ // CopyIter: copying iterator adapter (depends on dunder for __iter__)
77
+ #include "copy_iter.hpp"
78
+
79
+ // Iterator builtins: enumerate, reversed (depends on next_iter, dunder)
80
+ #include "itertools.hpp"
81
+
82
+ // Non-range overloads for container ops (depends on dunder, container_ops)
83
+ #include "iterable_ops.hpp"
84
+
85
+ // Collection printing (depends on bigint)
86
+ #include "printing.hpp"
87
+
88
+ // Ordered map (no runtime dependencies beyond standard library)
89
+ #include "ordered_map.hpp"
90
+
91
+ // Ordered set (no runtime dependencies beyond standard library)
92
+ #include "ordered_set.hpp"
93
+
94
+ // Dict operations and printing (depends on ordered_map, core, printing)
95
+ #include "dict_ops.hpp"
96
+
97
+ // Set operations and printing (depends on ordered_set, core, printing)
98
+ #include "set_ops.hpp"
99
+
100
+ // Bytes operations and printing (depends on core, container_ops)
101
+ #include "bytes_ops.hpp"
102
+
103
+ // System utilities (depends on core)
104
+ #include "system.hpp"
105
+
106
+ // Pointer-variant utilities for non-value union types (depends on <variant>)
107
+ #include "variant_ref.hpp"
108
+
109
+ // File I/O: TextFile for open() builtin (depends on core)
110
+ #include "file.hpp"
111
+
112
+ // User-facing TPy type names (depends on core, plus every type it
113
+ // specializes for -- so it must come after the type headers above)
114
+ #include "type_name.hpp"
115
+
116
+ // Any: type-erased value cell (depends on dunder, builtins, core, type_name)
117
+ #include "any.hpp"
118
+
119
+ // Output-sink dispatch for print(file=...) (depends on system, file)
120
+ #include "as_ostream.hpp"
121
+
122
+ // repr_of: user-facing repr dispatch helper. Defined here, after every
123
+ // header that contributes a tpy::__repr__ overload, so unqualified
124
+ // `__repr__(x)` inside its body sees the full overload set. Goes through
125
+ // here (not direct `::tpy::__repr__`) so ADL into the argument's
126
+ // namespace can find per-record overrides; qualified callers from inside
127
+ // runtime templates would freeze the candidate set at template-definition
128
+ // time and miss them.
129
+ namespace tpy {
130
+ template<typename T>
131
+ inline auto repr_of(const T& x) {
132
+ using ::tpy::__repr__;
133
+ return __repr__(x);
134
+ }
135
+
136
+ // Pointer-repr Optional[Record] (`A | None` lowers to nullable `A*`):
137
+ // emit "None" for null, otherwise repr the pointee. Restricted to class
138
+ // pointers so raw `int*`/`char*` don't get caught (the latter has its
139
+ // own __repr__ for string literals).
140
+ template<typename T>
141
+ requires std::is_class_v<T>
142
+ inline std::string repr_of(T* p) {
143
+ if (!p) return "None";
144
+ using ::tpy::__repr__;
145
+ return std::string(__repr__(*p));
146
+ }
147
+ } // namespace tpy
148
+
149
+ // Expose types in global namespace for TurboPython generated code
150
+ using ::tpy::UninitArrayStorage;
151
+ using ::tpy::UninitHeapStorage;
152
+ using ::tpy::tpy_panic;
153
+ using ::tpy::BigInt;
154
+ using ::tpy::BaseException;
155
+ using ::tpy::Exception;
156
+ using ::tpy::StopIteration;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * TurboPython Runtime - User-facing type names
3
+ *
4
+ * tpy::type_name<T>() returns the TPy-level name of a C++ type
5
+ * ("int" for tpy::BigInt, "str" for std::string, "Int32" for int32_t,
6
+ * "module.Cls" for user records via their `__tpy_class_name__` member,
7
+ * etc.). Used for diagnostics that surface to TPy users (Any cast errors,
8
+ * etc.) so messages don't leak C++ implementation details.
9
+ *
10
+ * Falls back to the demangled typeid for types without a specialization;
11
+ * the demangler output is normalized to be stable across libc++/libstdc++.
12
+ *
13
+ * Depends on: core.hpp (demangle_type_name), all type headers it
14
+ * specializes for. Include via tpy.hpp after the type headers.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+ #include <string>
22
+ #include <typeinfo>
23
+ #include <variant>
24
+
25
+ #include "core.hpp"
26
+
27
+ namespace tpy {
28
+
29
+ class BigInt;
30
+
31
+ // Primary template: derives a name for any T not covered by an explicit
32
+ // specialization below. Splits on whether T carries the codegen-emitted
33
+ // `__tpy_class_name__` member (user records / dataclasses) so we don't
34
+ // have to enumerate generated types.
35
+ template <typename T>
36
+ struct type_name_for {
37
+ static std::string get() {
38
+ if constexpr (requires { T::__tpy_class_name__; }) {
39
+ return std::string(T::__tpy_class_name__);
40
+ } else {
41
+ return demangle_type_name(typeid(T).name());
42
+ }
43
+ }
44
+ };
45
+
46
+ template <typename T>
47
+ inline std::string type_name() {
48
+ return type_name_for<T>::get();
49
+ }
50
+
51
+ // Built-in TPy <-> C++ type pairings. Keep in sync with the type table in
52
+ // CLAUDE.md / docs/LANGUAGE_FEATURES.md.
53
+ #define TPY_TYPE_NAME_(CPP_TYPE, TPY_NAME) \
54
+ template <> struct type_name_for<CPP_TYPE> { \
55
+ static std::string get() { return TPY_NAME; } \
56
+ }
57
+
58
+ TPY_TYPE_NAME_(BigInt, "int");
59
+ TPY_TYPE_NAME_(bool, "bool");
60
+ TPY_TYPE_NAME_(char, "Char");
61
+ TPY_TYPE_NAME_(int8_t, "Int8");
62
+ TPY_TYPE_NAME_(int16_t, "Int16");
63
+ TPY_TYPE_NAME_(int32_t, "Int32");
64
+ TPY_TYPE_NAME_(int64_t, "Int64");
65
+ TPY_TYPE_NAME_(uint8_t, "UInt8");
66
+ TPY_TYPE_NAME_(uint16_t, "UInt16");
67
+ TPY_TYPE_NAME_(uint32_t, "UInt32");
68
+ TPY_TYPE_NAME_(uint64_t, "UInt64");
69
+ TPY_TYPE_NAME_(float, "Float32");
70
+ TPY_TYPE_NAME_(double, "Float64");
71
+ TPY_TYPE_NAME_(std::string, "str");
72
+ TPY_TYPE_NAME_(std::nullptr_t, "None");
73
+ TPY_TYPE_NAME_(std::monostate, "None");
74
+
75
+ #undef TPY_TYPE_NAME_
76
+
77
+ } // namespace tpy