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,347 @@
1
+ """Method expansion sema pass.
2
+
3
+ Runs between `parse.resolve_refs` and `register_enum` on the
4
+ module, and owns four transformations for record methods (free functions
5
+ are not expanded here):
6
+
7
+ 1. Self-flag derivation -- walks `method.self_annotation` to set
8
+ `is_consuming` (`Own[Self]`), `auto_own` (`AutoOwnType(Self)`),
9
+ `auto_readonly` (`AutoReadonlyType(Self)`).
10
+ 2. Self-annotation validation -- raises `SemanticError` for
11
+ `Own[Self]` / `auto_own[Self]` / `auto_readonly[Self]` on
12
+ `__init__` / `__del__`, plus the `@readonly` / `@auto_readonly`
13
+ combinability checks.
14
+ 3. Wrapping -- applies `AutoReadonlyType` to eligible params when the
15
+ method carries `@auto_readonly`, detects per-param
16
+ `auto_readonly[T]` to set the flag, and wraps the first non-self
17
+ param of a `@property` setter with `Own[T]` when non-value.
18
+ 4. Cloning -- expands `auto_readonly` methods into mutable + const
19
+ overload pairs (`strip_auto_readonly` / `apply_auto_readonly`) and
20
+ `auto_own` methods into borrowing + consuming pairs (`strip_auto_own`
21
+ / `apply_auto_own`). Clones replace the original entry in
22
+ `record.methods` so registration sees the expanded list.
23
+
24
+ Parser state consumed here:
25
+ - `TpyFunction.self_annotation`: resolved self type.
26
+ - `TpyFunction.has_auto_readonly_decorator`: true iff `@auto_readonly`
27
+ was attached. Cleared on every clone once expanded.
28
+ - `TpyFunction.auto_readonly`: pre-set to True for `@property` getters
29
+ by `_parse_class` so cloning covers getters uniformly.
30
+ """
31
+
32
+ from __future__ import annotations
33
+
34
+ import copy
35
+ import dataclasses
36
+ from typing import Iterator
37
+
38
+ from ..parse import TpyFunction, TpyRecord
39
+ from ..typesys import (
40
+ AutoOwnType,
41
+ AutoReadonlyType,
42
+ IMPLICIT_AUTO_READONLY_METHODS,
43
+ OwnType,
44
+ ReadonlyType,
45
+ SelfType,
46
+ apply_auto_own,
47
+ apply_auto_readonly,
48
+ has_auto_readonly,
49
+ strip_auto_own,
50
+ strip_auto_readonly,
51
+ )
52
+ from ..diagnostics import SemanticError
53
+
54
+
55
+ _SELF_BARRED_METHODS = ("__init__", "__del__")
56
+
57
+
58
+ def expand_methods_for_record(record: TpyRecord) -> None:
59
+ """Expand methods on a single record in place.
60
+
61
+ Safe to call after macros have added methods: `_expand_one` is
62
+ idempotent on already-expanded clones (their `self_annotation` is
63
+ cleared and the transient `auto_readonly` / `auto_own` flags are
64
+ already False), so methods added by the module-level run are left
65
+ untouched when the per-record run visits them again.
66
+ """
67
+ record.methods = list(_expand_record_methods(record))
68
+
69
+
70
+ def _expand_record_methods(record: TpyRecord) -> Iterator[TpyFunction]:
71
+ for method in record.methods:
72
+ yield from _expand_one(method)
73
+
74
+
75
+ def _expand_one(method: TpyFunction) -> list[TpyFunction]:
76
+ """Expand a single method into one or more TpyFunction entries.
77
+
78
+ Order matters:
79
+ 1. Self-flag derivation -- populates `is_consuming` / `auto_own` /
80
+ `auto_readonly` from `self_annotation` before validation reads
81
+ the combined state.
82
+ 2. Validation -- runs against freshly-derived flags.
83
+ 3. Wrapping -- applies AutoReadonlyType / Own[T] mutations to
84
+ params. Must run before cloning because the cloner walks the
85
+ AutoReadonlyType markers to produce mutable / const halves.
86
+ 4. Cloning -- replaces the single method with its expansion.
87
+ """
88
+ if method.is_staticmethod or not method.is_method:
89
+ # Not a regular method -- nothing to expand.
90
+ return [method]
91
+
92
+ _derive_self_flags(method)
93
+ _validate_self_annotation(method)
94
+ _apply_implicit_auto_readonly(method)
95
+ _apply_auto_readonly_decorator_wrapping(method)
96
+ _detect_per_param_auto_readonly(method)
97
+ _check_auto_readonly_generic_method(method)
98
+ _apply_property_setter_wrapping(method)
99
+
100
+ if method.auto_readonly:
101
+ return _clone_auto_readonly(method)
102
+ if method.auto_own:
103
+ return _clone_auto_own(method)
104
+ # Consuming method (Own[Self]) isn't cloned, but clear self_annotation
105
+ # for symmetry with the cloned paths: a second `_expand_one` pass
106
+ # shouldn't re-derive flags. Idempotent today either way, but keeps
107
+ # the "expansion done -> self_annotation is None" invariant uniform.
108
+ method.self_annotation = None
109
+ return [method]
110
+
111
+
112
+ def _derive_self_flags(method: TpyFunction) -> None:
113
+ stype = method.self_annotation
114
+ if stype is None:
115
+ return
116
+ if isinstance(stype, OwnType) and isinstance(stype.wrapped, SelfType):
117
+ method.is_consuming = True
118
+ elif isinstance(stype, AutoOwnType) and isinstance(stype.wrapped, SelfType):
119
+ method.auto_own = True
120
+ elif isinstance(stype, AutoReadonlyType) and isinstance(stype.wrapped, SelfType):
121
+ method.auto_readonly = True
122
+
123
+
124
+ def _validate_self_annotation(method: TpyFunction) -> None:
125
+ """Raise SemanticError for invalid self annotations.
126
+
127
+ Includes the catch-all shape check that used to live in the parser:
128
+ only `Own[Self]`, `auto_own[Self]`, and `auto_readonly[Self]` are
129
+ accepted on `self`.
130
+ """
131
+ stype = method.self_annotation
132
+ if stype is None:
133
+ return
134
+
135
+ shape_ok = (
136
+ isinstance(stype, (OwnType, AutoOwnType, AutoReadonlyType))
137
+ and isinstance(stype.wrapped, SelfType)
138
+ )
139
+ if not shape_ok:
140
+ raise SemanticError(
141
+ f"Only 'Own[Self]', 'auto_own[Self]', or 'auto_readonly[Self]' "
142
+ f"is allowed as a type annotation for 'self', got '{stype}'",
143
+ loc=method.loc,
144
+ )
145
+
146
+ if isinstance(stype, OwnType) and isinstance(stype.wrapped, SelfType):
147
+ if method.name in _SELF_BARRED_METHODS:
148
+ raise SemanticError(
149
+ f"Own[Self] is not allowed on '{method.name}'",
150
+ loc=method.loc,
151
+ )
152
+ if method.is_readonly:
153
+ raise SemanticError(
154
+ f"Own[Self] cannot be combined with @readonly on method "
155
+ f"'{method.name}'",
156
+ loc=method.loc,
157
+ )
158
+ return
159
+
160
+ if isinstance(stype, AutoOwnType) and isinstance(stype.wrapped, SelfType):
161
+ if method.name in _SELF_BARRED_METHODS:
162
+ raise SemanticError(
163
+ f"auto_own[Self] is not allowed on '{method.name}'",
164
+ loc=method.loc,
165
+ )
166
+ if method.is_readonly:
167
+ raise SemanticError(
168
+ f"auto_own[Self] cannot be combined with @readonly on method "
169
+ f"'{method.name}'",
170
+ loc=method.loc,
171
+ )
172
+ return
173
+
174
+ if (isinstance(stype, AutoReadonlyType)
175
+ and isinstance(stype.wrapped, SelfType)):
176
+ if method.name in _SELF_BARRED_METHODS:
177
+ raise SemanticError(
178
+ f"auto_readonly[Self] is not allowed on '{method.name}'",
179
+ loc=method.loc,
180
+ )
181
+ if method.is_readonly:
182
+ raise SemanticError(
183
+ f"auto_readonly[Self] cannot be combined with @readonly on "
184
+ f"method '{method.name}'",
185
+ loc=method.loc,
186
+ )
187
+ if method.has_auto_readonly_decorator:
188
+ raise SemanticError(
189
+ f"'self: auto_readonly[Self]' cannot be combined with the "
190
+ f"@auto_readonly decorator on method '{method.name}'",
191
+ loc=method.loc,
192
+ )
193
+ return
194
+
195
+
196
+ def _apply_implicit_auto_readonly(method: TpyFunction) -> None:
197
+ """Reference-returning dunders (`__deref__`, `__getitem__`, `__span__`)
198
+ with a *reference-typed* return implicitly get dual mutable/const
199
+ overloads. Wrapping the return type with `AutoReadonlyType` reuses the
200
+ existing decorator path: the cloner produces the mutable + const pair.
201
+
202
+ Value-typed returns (Int32, etc.) skip this -- they stay on the
203
+ IMPLICIT_READONLY_METHODS path (single const overload is correct because
204
+ there's no aliasing to mutate). Without this dual-overload synthesis, a
205
+ class with `def __deref__(self) -> SomeRecord:` would be const-only,
206
+ and mutation through the wrapper would silently miscompile at C++
207
+ ("assignment of member in read-only object"). Explicit `@readonly` opts
208
+ back out.
209
+ """
210
+ if method.name not in IMPLICIT_AUTO_READONLY_METHODS:
211
+ return
212
+ # Idempotency: a mutable clone of a prior auto_readonly expansion already
213
+ # has the return type stripped to T; a second pass would re-wrap and
214
+ # re-clone, multiplying the overload count.
215
+ if method.is_auto_readonly_mutable_clone:
216
+ return
217
+ if method.is_readonly or method.readonly_opt_out:
218
+ return
219
+ if method.has_auto_readonly_decorator or method.auto_readonly:
220
+ return
221
+ rtype = method.return_type
222
+ if rtype is None or isinstance(rtype, (AutoReadonlyType, ReadonlyType)):
223
+ return
224
+ # Value-typed returns don't carry aliasing risk; let the IMPLICIT_READONLY
225
+ # path handle them (single const overload).
226
+ if rtype.is_value_type():
227
+ return
228
+ method.return_type = AutoReadonlyType(rtype)
229
+ method.has_auto_readonly_decorator = True
230
+
231
+
232
+ def _apply_auto_readonly_decorator_wrapping(method: TpyFunction) -> None:
233
+ """Sugar for @auto_readonly: wrap all eligible params with AutoReadonlyType.
234
+
235
+ The decorator also implies `method.auto_readonly`, so cloning picks it
236
+ up even when the method takes no non-self params to wrap.
237
+ """
238
+ if not method.has_auto_readonly_decorator:
239
+ return
240
+ method.auto_readonly = True
241
+ method.params = [
242
+ (n,
243
+ AutoReadonlyType(t)
244
+ if (not t.is_value_type()
245
+ and not isinstance(t, (AutoReadonlyType, ReadonlyType)))
246
+ else t)
247
+ for n, t in method.params
248
+ ]
249
+
250
+
251
+ def _detect_per_param_auto_readonly(method: TpyFunction) -> None:
252
+ """Per-param `auto_readonly[T]` annotations imply the auto_readonly flag."""
253
+ if method.auto_readonly:
254
+ return
255
+ for _, ptype in method.params:
256
+ if has_auto_readonly(ptype):
257
+ method.auto_readonly = True
258
+ return
259
+
260
+
261
+ def _check_auto_readonly_generic_method(method: TpyFunction) -> None:
262
+ if method.auto_readonly and method.type_params:
263
+ raise SemanticError(
264
+ f"auto_readonly on methods with method-level type parameters "
265
+ f"is not yet supported ('{method.name}')",
266
+ loc=method.loc,
267
+ )
268
+
269
+
270
+ def _apply_property_setter_wrapping(method: TpyFunction) -> None:
271
+ """@property setter: first non-self param is an ownership transfer."""
272
+ if not method.is_property_setter or not method.params:
273
+ return
274
+ pname, ptype = method.params[0]
275
+ if not isinstance(ptype, OwnType) and not ptype.is_value_type():
276
+ method.params[0] = (pname, OwnType(ptype))
277
+
278
+
279
+ def _clone_auto_readonly(method: TpyFunction) -> list[TpyFunction]:
280
+ """Expand an auto_readonly method into mutable + const overloads.
281
+
282
+ - Mutable: params/return stripped of AutoReadonlyType, is_readonly=False.
283
+ - Const: params/return with AutoReadonlyType -> ReadonlyType, is_readonly=True.
284
+
285
+ AutoReadonlyType nodes mark where readonly is applied in the const
286
+ overload. The @auto_readonly decorator path wraps all eligible params
287
+ first, so both decorator-driven and per-param annotations converge
288
+ on the same cloning logic.
289
+ """
290
+ mutable_params = [(n, strip_auto_readonly(t)) for n, t in method.params]
291
+ const_params = [(n, apply_auto_readonly(t)) for n, t in method.params]
292
+ mutable_return = strip_auto_readonly(method.return_type)
293
+ const_return = apply_auto_readonly(method.return_type)
294
+ mutable = dataclasses.replace(
295
+ method,
296
+ params=mutable_params,
297
+ return_type=mutable_return,
298
+ is_readonly=False,
299
+ auto_readonly=False,
300
+ has_auto_readonly_decorator=False,
301
+ auto_readonly_params_resolved=True,
302
+ is_auto_readonly_mutable_clone=True,
303
+ # Clear the derivation source so a second expand pass (per-record
304
+ # run after macros) doesn't re-derive auto_readonly and re-clone.
305
+ self_annotation=None,
306
+ )
307
+ const = dataclasses.replace(
308
+ method,
309
+ params=const_params,
310
+ return_type=const_return,
311
+ body=copy.deepcopy(method.body),
312
+ is_readonly=True,
313
+ auto_readonly=False,
314
+ has_auto_readonly_decorator=False,
315
+ auto_readonly_params_resolved=True,
316
+ defaults=copy.deepcopy(method.defaults),
317
+ self_annotation=None,
318
+ )
319
+ return [mutable, const]
320
+
321
+
322
+ def _clone_auto_own(method: TpyFunction) -> list[TpyFunction]:
323
+ """Expand a `self: auto_own[Self]` method into borrowing + consuming overloads.
324
+
325
+ - Borrowing: is_consuming=False, return stripped of AutoOwnType.
326
+ - Consuming: is_consuming=True, return with AutoOwnType -> OwnType.
327
+ """
328
+ borrowing_return = strip_auto_own(method.return_type)
329
+ consuming_return = apply_auto_own(method.return_type)
330
+ borrowing = dataclasses.replace(
331
+ method,
332
+ return_type=borrowing_return,
333
+ is_consuming=False,
334
+ auto_own=False,
335
+ is_auto_own_borrowing_clone=True,
336
+ self_annotation=None,
337
+ )
338
+ consuming = dataclasses.replace(
339
+ method,
340
+ return_type=consuming_return,
341
+ body=copy.deepcopy(method.body),
342
+ is_consuming=True,
343
+ auto_own=False,
344
+ defaults=copy.deepcopy(method.defaults),
345
+ self_annotation=None,
346
+ )
347
+ return [borrowing, consuming]