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,400 @@
1
+ /**
2
+ * TurboPython Runtime - Builtin Function Helpers
3
+ *
4
+ * Runtime support for round(), divmod(), ord(), and related builtins.
5
+ * Depends on: core.hpp, fixed_int.hpp, bigint.hpp
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <algorithm>
11
+ #include <charconv>
12
+ #include <cmath>
13
+ #include <cstdint>
14
+ #include <format>
15
+ #include <iostream>
16
+ #include <string>
17
+ #include <string_view>
18
+ #include <tuple>
19
+ #include <type_traits>
20
+ #include <vector>
21
+
22
+ namespace tpy {
23
+
24
+ // -- stdin helper --
25
+
26
+ // Read a line from stdin (newline stripped). Raises ValueError on EOF.
27
+ // Powers the `input()` builtin -- Python's `input()` raises EOFError;
28
+ // TPy maps that to ValueError today (no dedicated EOFError class yet).
29
+ inline std::string input_line() {
30
+ std::string line;
31
+ if (!std::getline(std::cin, line)) {
32
+ raise_value_error("unexpected end of input");
33
+ }
34
+ return line;
35
+ }
36
+
37
+ // -- ord/Char helpers --
38
+
39
+ // ord(s: str) -- throws TypeError if len(s) != 1, matching CPython.
40
+ inline int32_t ord_str(std::string_view s) {
41
+ if (s.size() != 1) {
42
+ raise_type_error("ord() expected a character, but string of length {} found",
43
+ s.size());
44
+ }
45
+ return static_cast<int32_t>(static_cast<unsigned char>(s[0]));
46
+ }
47
+
48
+ // Char(s: str) -- extract single character, throws TypeError if len(s) != 1.
49
+ inline char char_from_str(std::string_view s) {
50
+ if (s.size() != 1) {
51
+ raise_type_error("Char() expected a character, but string of length {} found",
52
+ s.size());
53
+ }
54
+ return s[0];
55
+ }
56
+
57
+ // -- round helpers --
58
+
59
+ // round[T](float) -> T (banker's rounding = round half to even, matches Python)
60
+ template<typename T>
61
+ T round_to(double x) {
62
+ double r = std::nearbyint(x);
63
+ if constexpr (std::is_same_v<T, BigInt>) {
64
+ return BigInt::from_float(r);
65
+ } else {
66
+ return static_cast<T>(r);
67
+ }
68
+ }
69
+
70
+ // round(float, ndigits) -> float
71
+ inline double round_float(double x, int32_t ndigits) {
72
+ if (ndigits >= 308) return x;
73
+ if (ndigits <= -308) return 0.0;
74
+ double factor = std::pow(10.0, static_cast<double>(ndigits));
75
+ return std::nearbyint(x * factor) / factor;
76
+ }
77
+
78
+ // round(fixed_int, ndigits) -> fixed_int
79
+ template<typename T>
80
+ T round_fixed(T x, int32_t ndigits) {
81
+ if (ndigits >= 0) return x;
82
+ int32_t digits = -ndigits;
83
+ T factor = 1;
84
+ for (int32_t i = 0; i < digits; ++i) {
85
+ T next;
86
+ if (__builtin_mul_overflow(factor, static_cast<T>(10), &next)) {
87
+ return 0;
88
+ }
89
+ factor = next;
90
+ }
91
+ T half = factor / 2;
92
+ T rem = x % factor;
93
+ if (rem < 0) rem += factor;
94
+ T base = x - rem;
95
+ // Banker's rounding: round half to even
96
+ if (rem > half) {
97
+ T res;
98
+ if (__builtin_add_overflow(base, factor, &res)) {
99
+ raise_fixedint_overflow("{} overflow in round", fixed_int_name<T>());
100
+ }
101
+ return res;
102
+ } else if (rem == half) {
103
+ T unit = base / factor;
104
+ if (unit % 2 != 0) {
105
+ T res;
106
+ if (__builtin_add_overflow(base, factor, &res)) {
107
+ raise_fixedint_overflow("{} overflow in round", fixed_int_name<T>());
108
+ }
109
+ return res;
110
+ }
111
+ return base;
112
+ }
113
+ return base;
114
+ }
115
+
116
+ // round(BigInt, ndigits) -> BigInt
117
+ inline BigInt round_bigint(const BigInt& x, int32_t ndigits) {
118
+ if (ndigits >= 0) return x;
119
+ int32_t digits = -ndigits;
120
+ BigInt factor(1);
121
+ for (int32_t i = 0; i < digits; ++i) {
122
+ factor = factor * BigInt(10);
123
+ }
124
+ BigInt half = factor / BigInt(2);
125
+ // BigInt::operator% uses floor_mod: rem is always in [0, factor)
126
+ BigInt rem = x % factor;
127
+ BigInt base = x - rem;
128
+ if (rem > half) {
129
+ return base + factor;
130
+ } else if (rem == half) {
131
+ BigInt unit = base / factor;
132
+ if (unit % BigInt(2) != BigInt(0)) {
133
+ return base + factor;
134
+ }
135
+ return base;
136
+ }
137
+ return base;
138
+ }
139
+
140
+ // -- divmod helpers --
141
+
142
+ // divmod(float, float) -> tuple[float, float] (Python semantics)
143
+ inline std::tuple<double, double> divmod_float(double a, double b) {
144
+ if (b == 0.0) raise_zero_division_error("float divmod()");
145
+ double q = std::floor(a / b);
146
+ double r = a - q * b;
147
+ return {q, r};
148
+ }
149
+
150
+ // divmod(fixed_int, fixed_int) -> tuple[T, T] (Python floor division + mod)
151
+ template<typename T>
152
+ std::tuple<T, T> divmod_fixed(T a, T b) {
153
+ if (b == 0) raise_zero_division_error("integer division or modulo by zero");
154
+ if constexpr (std::is_signed_v<T>) {
155
+ if (a == std::numeric_limits<T>::min() && b == static_cast<T>(-1)) {
156
+ raise_fixedint_overflow("{} overflow in division", fixed_int_name<T>());
157
+ }
158
+ T q = a / b;
159
+ T r = a % b;
160
+ if (r != 0 && ((r < 0) != (b < 0))) { q -= 1; r += b; }
161
+ return {q, r};
162
+ } else {
163
+ return {a / b, a % b};
164
+ }
165
+ }
166
+
167
+ // divmod(BigInt, BigInt) -> tuple[BigInt, BigInt]
168
+ inline std::tuple<BigInt, BigInt> divmod_bigint(const BigInt& a, const BigInt& b) {
169
+ return a.floor_divmod(b);
170
+ }
171
+
172
+ // 3-arg min/max: returns const& to avoid copies for expensive types (BigInt)
173
+ template<typename T>
174
+ const T& min3(const T& a, const T& b, const T& c) {
175
+ const auto& m = a < b ? a : b;
176
+ return m < c ? m : c;
177
+ }
178
+
179
+ template<typename T>
180
+ const T& max3(const T& a, const T& b, const T& c) {
181
+ const auto& m = a > b ? a : b;
182
+ return m > c ? m : c;
183
+ }
184
+
185
+ // -- truthiness helper --
186
+
187
+ // Priority: implicit/explicit bool conversion > .empty() > __bool__() method.
188
+ // Primitives (int, bool, float, BigInt) match branch 1.
189
+ // std::string/string_view match branch 2.
190
+ // User records with __bool__() match branch 3.
191
+ template<typename T>
192
+ bool to_bool(const T& x) {
193
+ if constexpr (std::is_same_v<T, std::monostate>) {
194
+ // None is falsy in Python; std::monostate (TPy unit type at
195
+ // value-bearing positions) has no bool conversion of its own.
196
+ return false;
197
+ } else if constexpr (std::is_constructible_v<bool, T>) {
198
+ return static_cast<bool>(x);
199
+ } else if constexpr (requires { x.empty(); }) {
200
+ return !x.empty();
201
+ } else if constexpr (requires { x.__bool__(); }) {
202
+ return x.__bool__();
203
+ } else {
204
+ static_assert(false, "to_bool: type has no bool conversion, empty(), or __bool__()");
205
+ }
206
+ }
207
+
208
+ // -- all / any --
209
+
210
+ template<typename Iter>
211
+ bool builtin_all(Iter&& iterable) {
212
+ for (auto&& elem : iterable) {
213
+ if (!to_bool(elem)) return false;
214
+ }
215
+ return true;
216
+ }
217
+
218
+ template<typename Iter>
219
+ bool builtin_any(Iter&& iterable) {
220
+ for (auto&& elem : iterable) {
221
+ if (to_bool(elem)) return true;
222
+ }
223
+ return false;
224
+ }
225
+
226
+ // -- sum --
227
+
228
+ template<typename T, typename Iter>
229
+ T builtin_sum(Iter&& iterable) {
230
+ T result{};
231
+ for (auto&& elem : iterable) {
232
+ result = add_check<T>(result, static_cast<T>(elem));
233
+ }
234
+ return result;
235
+ }
236
+
237
+ template<typename T, typename Iter>
238
+ T builtin_sum_start(Iter&& iterable, T start) {
239
+ for (auto&& elem : iterable) {
240
+ start = add_check<T>(start, static_cast<T>(elem));
241
+ }
242
+ return start;
243
+ }
244
+
245
+ // BigInt sum (no overflow checks needed)
246
+ template<typename Iter>
247
+ BigInt builtin_sum_bigint(Iter&& iterable) {
248
+ BigInt result(0);
249
+ for (auto&& elem : iterable) result = result + elem;
250
+ return result;
251
+ }
252
+
253
+ template<typename Iter>
254
+ BigInt builtin_sum_start_bigint(Iter&& iterable, const BigInt& start) {
255
+ BigInt result = start;
256
+ for (auto&& elem : iterable) result = result + elem;
257
+ return result;
258
+ }
259
+
260
+ // float sum (no overflow checks)
261
+ template<typename Iter>
262
+ double builtin_sum_float(Iter&& iterable) {
263
+ double result = 0.0;
264
+ for (auto&& elem : iterable) result += static_cast<double>(elem);
265
+ return result;
266
+ }
267
+
268
+ template<typename Iter>
269
+ double builtin_sum_start_float(Iter&& iterable, double start) {
270
+ for (auto&& elem : iterable) start += static_cast<double>(elem);
271
+ return start;
272
+ }
273
+
274
+ // -- sorted --
275
+
276
+ template<typename T, typename Iter>
277
+ std::vector<T> builtin_sorted(Iter&& iterable) {
278
+ std::vector<T> result;
279
+ for (auto&& elem : iterable) {
280
+ result.emplace_back(std::forward<decltype(elem)>(elem));
281
+ }
282
+ std::stable_sort(result.begin(), result.end());
283
+ return result;
284
+ }
285
+
286
+ template<typename T, typename Iter, typename KeyFn>
287
+ std::vector<T> builtin_sorted_key(Iter&& iterable, KeyFn&& key) {
288
+ std::vector<T> items;
289
+ for (auto&& elem : iterable) {
290
+ items.emplace_back(std::forward<decltype(elem)>(elem));
291
+ }
292
+ // Schwartzian transform: compute key once per element (O(n)), then sort
293
+ // by pre-computed keys (O(n log n) comparisons on cheap key values).
294
+ using K = std::decay_t<decltype(key(items[0]))>;
295
+ std::vector<std::pair<K, size_t>> decorated;
296
+ decorated.reserve(items.size());
297
+ for (size_t i = 0; i < items.size(); ++i) {
298
+ decorated.emplace_back(key(items[i]), i);
299
+ }
300
+ std::stable_sort(decorated.begin(), decorated.end(),
301
+ [](const auto& a, const auto& b) { return a.first < b.first; });
302
+ std::vector<T> result;
303
+ result.reserve(items.size());
304
+ for (auto& [k, idx] : decorated) {
305
+ result.emplace_back(std::move(items[idx]));
306
+ }
307
+ return result;
308
+ }
309
+
310
+ // -- min/max with key --
311
+
312
+ template<typename T, typename KeyFn>
313
+ const T& min_key(const T& a, const T& b, KeyFn&& key) {
314
+ auto ka = key(a), kb = key(b);
315
+ return kb < ka ? b : a;
316
+ }
317
+
318
+ template<typename T, typename KeyFn>
319
+ const T& min3_key(const T& a, const T& b, const T& c, KeyFn&& key) {
320
+ auto ka = key(a), kb = key(b), kc = key(c);
321
+ if (kb < ka) {
322
+ return kc < kb ? c : b;
323
+ }
324
+ return kc < ka ? c : a;
325
+ }
326
+
327
+ template<typename T, typename KeyFn>
328
+ const T& max_key(const T& a, const T& b, KeyFn&& key) {
329
+ auto ka = key(a), kb = key(b);
330
+ return ka < kb ? b : a;
331
+ }
332
+
333
+ template<typename T, typename KeyFn>
334
+ const T& max3_key(const T& a, const T& b, const T& c, KeyFn&& key) {
335
+ auto ka = key(a), kb = key(b), kc = key(c);
336
+ if (ka < kb) {
337
+ return kb < kc ? c : b;
338
+ }
339
+ return ka < kc ? c : a;
340
+ }
341
+
342
+ // -- bin / hex / oct --
343
+
344
+ inline std::string builtin_bin(int64_t x) {
345
+ if (x == 0) return "0b0";
346
+ std::string digits;
347
+ bool negative = x < 0;
348
+ uint64_t val = negative ? -static_cast<uint64_t>(x) : static_cast<uint64_t>(x);
349
+ while (val > 0) {
350
+ digits.push_back('0' + static_cast<char>(val & 1));
351
+ val >>= 1;
352
+ }
353
+ std::string result;
354
+ if (negative) result += '-';
355
+ result += "0b";
356
+ for (auto it = digits.rbegin(); it != digits.rend(); ++it) result += *it;
357
+ return result;
358
+ }
359
+
360
+ inline std::string builtin_hex(int64_t x) {
361
+ if (x == 0) return "0x0";
362
+ bool negative = x < 0;
363
+ uint64_t val = negative ? -static_cast<uint64_t>(x) : static_cast<uint64_t>(x);
364
+ char buf[16];
365
+ auto [ptr, ec] = std::to_chars(buf, buf + sizeof(buf), val, 16);
366
+ std::string result;
367
+ if (negative) result += '-';
368
+ result += "0x";
369
+ result.append(buf, ptr);
370
+ return result;
371
+ }
372
+
373
+ inline std::string builtin_oct(int64_t x) {
374
+ if (x == 0) return "0o0";
375
+ bool negative = x < 0;
376
+ uint64_t val = negative ? -static_cast<uint64_t>(x) : static_cast<uint64_t>(x);
377
+ char buf[22];
378
+ auto [ptr, ec] = std::to_chars(buf, buf + sizeof(buf), val, 8);
379
+ std::string result;
380
+ if (negative) result += '-';
381
+ result += "0o";
382
+ result.append(buf, ptr);
383
+ return result;
384
+ }
385
+
386
+ // -- bin / hex / oct for BigInt --
387
+
388
+ inline std::string builtin_bin_bigint(const BigInt& x) {
389
+ return x.to_bin_string();
390
+ }
391
+
392
+ inline std::string builtin_hex_bigint(const BigInt& x) {
393
+ return x.to_hex_string();
394
+ }
395
+
396
+ inline std::string builtin_oct_bigint(const BigInt& x) {
397
+ return x.to_oct_string();
398
+ }
399
+
400
+ } // namespace tpy