jaclang 0.7.34__py3-none-any.whl → 0.8.1__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.

Potentially problematic release.


This version of jaclang might be problematic. Click here for more details.

Files changed (1503) hide show
  1. jaclang/__init__.py +7 -414
  2. jaclang/cli/cli.md +5 -5
  3. jaclang/cli/cli.py +316 -217
  4. jaclang/cli/cmdreg.py +188 -31
  5. jaclang/compiler/__init__.py +10 -15
  6. jaclang/compiler/{codeloc.py → codeinfo.py} +11 -30
  7. jaclang/compiler/constant.py +10 -33
  8. jaclang/compiler/jac.lark +65 -106
  9. jaclang/compiler/larkparse/jac_parser.py +3444 -0
  10. jaclang/compiler/parser.py +1137 -1517
  11. jaclang/compiler/passes/__init__.py +2 -2
  12. jaclang/compiler/passes/main/__init__.py +33 -14
  13. jaclang/compiler/passes/main/annex_pass.py +85 -0
  14. jaclang/compiler/passes/main/cfg_build_pass.py +275 -0
  15. jaclang/compiler/passes/main/def_impl_match_pass.py +159 -114
  16. jaclang/compiler/passes/main/def_use_pass.py +66 -274
  17. jaclang/compiler/passes/main/import_pass.py +178 -363
  18. jaclang/compiler/passes/main/inheritance_pass.py +109 -107
  19. jaclang/compiler/passes/main/pyast_gen_pass.py +1242 -1735
  20. jaclang/compiler/passes/main/pyast_load_pass.py +579 -819
  21. jaclang/compiler/passes/main/pybc_gen_pass.py +38 -35
  22. jaclang/compiler/passes/main/pyjac_ast_link_pass.py +50 -163
  23. jaclang/compiler/passes/main/sym_tab_build_pass.py +114 -1203
  24. jaclang/compiler/passes/main/sym_tab_link_pass.py +141 -0
  25. jaclang/{tests → compiler/passes/main/tests}/fixtures/access_modifier.jac +10 -9
  26. jaclang/compiler/passes/main/tests/fixtures/atest.impl.jac +3 -0
  27. jaclang/compiler/passes/main/tests/fixtures/atest.jac +11 -0
  28. jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl/getme.impl.jac +1 -1
  29. jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl.jac +1 -1
  30. jaclang/compiler/passes/main/tests/fixtures/autoimpl.jac +3 -3
  31. jaclang/compiler/passes/main/tests/fixtures/autoimpl.something.else.impl.jac +1 -1
  32. jaclang/compiler/passes/main/tests/fixtures/base.impl.jac +8 -0
  33. jaclang/compiler/passes/main/tests/fixtures/base.jac +4 -4
  34. jaclang/compiler/passes/main/tests/fixtures/base2.impl.jac +8 -0
  35. jaclang/compiler/passes/main/tests/fixtures/base2.jac +4 -4
  36. jaclang/compiler/passes/main/tests/fixtures/blip.jac +1 -1
  37. jaclang/compiler/passes/main/tests/fixtures/cfg_ability_test.jac +23 -0
  38. jaclang/compiler/passes/main/tests/fixtures/cfg_gen.jac +19 -0
  39. jaclang/compiler/passes/main/tests/fixtures/circular_import.jac +7 -0
  40. jaclang/compiler/passes/main/tests/fixtures/data_spatial_types.jac +12 -12
  41. jaclang/compiler/passes/main/tests/fixtures/decls.jac +4 -4
  42. jaclang/compiler/passes/main/tests/fixtures/defn_decl_mismatch.jac +4 -4
  43. jaclang/compiler/passes/main/tests/fixtures/defs_and_uses.jac +6 -6
  44. jaclang/compiler/passes/main/tests/fixtures/enumerations.jac +13 -0
  45. jaclang/compiler/passes/main/tests/fixtures/fstrings.jac +1 -1
  46. jaclang/compiler/passes/main/tests/fixtures/func.jac +2 -2
  47. jaclang/compiler/passes/main/tests/fixtures/func2.jac +1 -1
  48. jaclang/compiler/passes/main/tests/fixtures/game1.jac +4 -4
  49. jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac +2 -2
  50. jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac +2 -2
  51. jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac +0 -8
  52. jaclang/compiler/passes/main/tests/fixtures/impl_grab.impl.jac +5 -0
  53. jaclang/{tests → compiler/passes/main/tests}/fixtures/impl_grab.jac +1 -1
  54. jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +1 -1
  55. jaclang/compiler/passes/main/tests/fixtures/main_err.impl.jac +6 -0
  56. jaclang/compiler/passes/main/tests/fixtures/main_err.jac +6 -0
  57. jaclang/compiler/passes/main/tests/fixtures/mod_type_assign.jac +1 -1
  58. jaclang/compiler/passes/main/tests/fixtures/mtest.impl.jac +6 -0
  59. jaclang/{tests → compiler/passes/main/tests}/fixtures/mtest.jac +1 -1
  60. jaclang/{tests → compiler/passes/main/tests}/fixtures/nested_impls.jac +14 -15
  61. jaclang/compiler/passes/main/tests/fixtures/py_imp_test.jac +7 -7
  62. jaclang/compiler/passes/main/tests/fixtures/second_err.jac +4 -0
  63. jaclang/compiler/passes/main/tests/fixtures/str2doc.py +3 -0
  64. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/__init__.py +5 -0
  65. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/actions.jac +19 -0
  66. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/main.jac +7 -0
  67. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/no_dupls.jac +35 -0
  68. jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/one.jac +8 -0
  69. jaclang/compiler/passes/main/tests/fixtures/type_info.jac +4 -4
  70. jaclang/compiler/passes/main/tests/test_cfg_build_pass.py +101 -0
  71. jaclang/compiler/passes/main/tests/test_decl_impl_match_pass.py +157 -0
  72. jaclang/compiler/passes/main/tests/test_def_use_pass.py +4 -6
  73. jaclang/compiler/passes/main/tests/test_import_pass.py +59 -46
  74. jaclang/compiler/passes/main/tests/test_pyast_build_pass.py +15 -0
  75. jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py +25 -34
  76. jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py +3 -3
  77. jaclang/compiler/passes/main/tests/test_sub_node_pass.py +8 -7
  78. jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py +4 -4
  79. jaclang/compiler/passes/main/tests/test_sym_tab_link_pass.py +62 -0
  80. jaclang/compiler/passes/tool/__init__.py +2 -0
  81. jaclang/compiler/passes/tool/doc_ir.py +179 -0
  82. jaclang/compiler/passes/tool/doc_ir_gen_pass.py +1287 -0
  83. jaclang/compiler/passes/tool/fuse_comments_pass.py +90 -70
  84. jaclang/compiler/passes/tool/jac_formatter_pass.py +122 -2554
  85. jaclang/compiler/passes/tool/tests/fixtures/corelib.jac +249 -97
  86. jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +94 -97
  87. jaclang/compiler/passes/tool/tests/fixtures/doc_string.jac +2 -2
  88. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/access_mod_check.jac +5 -5
  89. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/archetype_test.jac +13 -0
  90. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/decorator_stack.jac +7 -7
  91. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac +8 -8
  92. jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot +3 -3
  93. jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.txt +3 -3
  94. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/ability_impl_long_comprehension.jac +1 -1
  95. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/call_with_many_parameters.jac +2 -2
  96. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/simple_walker.jac +3 -3
  97. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/try_block_and_walker_spawn_and_fstrings.jac +1 -1
  98. jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/type_annotation.jac +1 -1
  99. jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac +1 -1
  100. jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac +10 -4
  101. jaclang/compiler/passes/tool/tests/test_doc_ir_gen_pass.py +29 -0
  102. jaclang/compiler/passes/tool/tests/test_jac_format_pass.py +63 -88
  103. jaclang/compiler/passes/tool/tests/test_unparse_validate.py +27 -28
  104. jaclang/compiler/passes/transform.py +56 -16
  105. jaclang/compiler/passes/{ir_pass.py → uni_pass.py} +35 -52
  106. jaclang/compiler/program.py +200 -0
  107. jaclang/compiler/tests/fixtures/codegentext.jac +31 -0
  108. jaclang/compiler/tests/fixtures/fam.jac +12 -12
  109. jaclang/compiler/tests/fixtures/hello_world.jac +1 -1
  110. jaclang/compiler/tests/fixtures/pkg_import_lib/__init__.jac +1 -0
  111. jaclang/compiler/tests/fixtures/pkg_import_lib/sub/__init__.jac +1 -0
  112. jaclang/compiler/tests/fixtures/pkg_import_lib/sub/helper.jac +3 -0
  113. jaclang/compiler/tests/fixtures/pkg_import_lib/tools.jac +3 -0
  114. jaclang/compiler/tests/fixtures/pkg_import_lib_py/__init__.py +11 -0
  115. jaclang/compiler/tests/fixtures/pkg_import_lib_py/sub/__init__.py +7 -0
  116. jaclang/compiler/tests/fixtures/pkg_import_lib_py/sub/helper.jac +3 -0
  117. jaclang/compiler/tests/fixtures/pkg_import_lib_py/tools.jac +3 -0
  118. jaclang/compiler/tests/fixtures/pkg_import_main.jac +10 -0
  119. jaclang/compiler/tests/fixtures/pkg_import_main_py.jac +11 -0
  120. jaclang/compiler/tests/fixtures/staticcheck.jac +2 -2
  121. jaclang/compiler/tests/test_importer.py +41 -16
  122. jaclang/compiler/tests/test_parser.py +39 -17
  123. jaclang/compiler/{absyntree.py → unitree.py} +1521 -1261
  124. jaclang/langserve/engine.jac +498 -0
  125. jaclang/langserve/sem_manager.jac +309 -0
  126. jaclang/langserve/server.jac +186 -0
  127. jaclang/langserve/tests/fixtures/base_module_structure.jac +7 -7
  128. jaclang/langserve/tests/fixtures/circle.jac +6 -6
  129. jaclang/langserve/tests/fixtures/circle_err.jac +6 -6
  130. jaclang/langserve/tests/fixtures/circle_pure.impl.jac +5 -5
  131. jaclang/langserve/tests/fixtures/circle_pure.jac +7 -7
  132. jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +2 -2
  133. jaclang/langserve/tests/fixtures/circle_pure_err.jac +7 -7
  134. jaclang/langserve/tests/fixtures/import_include_statements.jac +6 -6
  135. jaclang/langserve/tests/fixtures/rename.jac +6 -6
  136. jaclang/langserve/tests/server_test/test_lang_serve.py +261 -0
  137. jaclang/langserve/tests/server_test/utils.py +118 -0
  138. jaclang/langserve/tests/session.jac +294 -0
  139. jaclang/langserve/tests/test_sem_tokens.py +4 -4
  140. jaclang/langserve/tests/test_server.py +53 -30
  141. jaclang/langserve/utils.jac +459 -0
  142. jaclang/runtimelib/{architype.py → archetype.py} +86 -62
  143. jaclang/runtimelib/builtin.py +95 -0
  144. jaclang/runtimelib/constructs.py +11 -13
  145. jaclang/runtimelib/importer.py +83 -53
  146. jaclang/runtimelib/machine.py +1592 -144
  147. jaclang/runtimelib/memory.py +6 -6
  148. jaclang/{plugin → runtimelib}/tests/fixtures/graph_purger.jac +1 -1
  149. jaclang/{plugin → runtimelib}/tests/fixtures/impl_match.jac +2 -2
  150. jaclang/runtimelib/tests/fixtures/impl_match_impl.jac +3 -0
  151. jaclang/{plugin → runtimelib}/tests/fixtures/other_root_access.jac +7 -7
  152. jaclang/{plugin → runtimelib}/tests/fixtures/savable_object.jac +3 -5
  153. jaclang/{plugin → runtimelib}/tests/fixtures/simple_node_connection.jac +6 -6
  154. jaclang/{plugin → runtimelib}/tests/fixtures/simple_persistent.jac +1 -1
  155. jaclang/{plugin → runtimelib}/tests/fixtures/traversing_save.jac +7 -5
  156. jaclang/runtimelib/tests/test_features.py +72 -0
  157. jaclang/{plugin → runtimelib}/tests/test_jaseci.py +6 -5
  158. jaclang/runtimelib/utils.py +34 -66
  159. jaclang/settings.py +1 -6
  160. jaclang/tests/fixtures/{abc.jac → abc_check.jac} +6 -6
  161. jaclang/tests/fixtures/arch_rel_import_creation.jac +4 -4
  162. jaclang/tests/fixtures/async_ability.jac +18 -0
  163. jaclang/tests/fixtures/async_walker.jac +23 -0
  164. jaclang/tests/fixtures/backward_edge_visit.jac +31 -0
  165. jaclang/tests/fixtures/baddy.jac +1 -1
  166. jaclang/tests/fixtures/base_class1.jac +2 -2
  167. jaclang/tests/fixtures/base_class2.jac +2 -2
  168. jaclang/tests/fixtures/base_class_complex_expr.jac +3 -3
  169. jaclang/tests/fixtures/builtin_printgraph.jac +85 -0
  170. jaclang/tests/fixtures/builtin_printgraph_json.jac +21 -0
  171. jaclang/tests/fixtures/builtin_printgraph_mermaid.jac +16 -0
  172. jaclang/tests/fixtures/byllmissue.jac +1 -1
  173. jaclang/tests/fixtures/chandra_bugs.jac +1 -1
  174. jaclang/tests/fixtures/chandra_bugs2.jac +21 -14
  175. jaclang/tests/fixtures/cls_method.jac +6 -6
  176. jaclang/tests/fixtures/concurrency.jac +39 -0
  177. jaclang/tests/fixtures/connect_traverse_syntax.jac +18 -0
  178. jaclang/tests/fixtures/create_dynamic_archetype.jac +35 -0
  179. jaclang/tests/fixtures/decl_defn_param_name.jac +4 -4
  180. jaclang/tests/fixtures/deep/deeper/__init__.jac +1 -0
  181. jaclang/tests/fixtures/deep/deeper/deep_outer_import.jac +2 -3
  182. jaclang/tests/fixtures/deep/deeper/deep_outer_import2.jac +3 -3
  183. jaclang/tests/fixtures/deep/deeper/snd_lev.jac +2 -2
  184. jaclang/tests/fixtures/deep/mycode.jac +1 -1
  185. jaclang/tests/fixtures/deep/one_lev.jac +3 -4
  186. jaclang/tests/fixtures/deep/one_lev_dup.jac +2 -2
  187. jaclang/tests/fixtures/deep_convert.jac +1 -1
  188. jaclang/tests/fixtures/deep_import.jac +2 -2
  189. jaclang/tests/fixtures/deep_import_interp.jac +8 -0
  190. jaclang/tests/fixtures/deep_import_mods.jac +3 -3
  191. jaclang/tests/fixtures/deferred_field.jac +1 -1
  192. jaclang/tests/fixtures/del_clean.jac +7 -0
  193. jaclang/tests/fixtures/disconn.jac +2 -2
  194. jaclang/tests/fixtures/dynamic_archetype.jac +34 -0
  195. jaclang/tests/fixtures/edge_ability.jac +49 -0
  196. jaclang/tests/fixtures/edge_node_walk.jac +12 -12
  197. jaclang/tests/fixtures/edge_ops.jac +7 -7
  198. jaclang/tests/fixtures/edges_walk.jac +10 -10
  199. jaclang/tests/fixtures/edgetypeissue.jac +1 -1
  200. jaclang/tests/fixtures/enum_inside_archtype.jac +4 -4
  201. jaclang/tests/fixtures/err.impl.jac +1 -1
  202. jaclang/tests/fixtures/err.jac +2 -2
  203. jaclang/tests/fixtures/err_runtime.jac +2 -2
  204. jaclang/tests/fixtures/foo.jac +7 -7
  205. jaclang/tests/fixtures/game1.jac +4 -4
  206. jaclang/tests/fixtures/gendot_bubble_sort.jac +4 -4
  207. jaclang/tests/fixtures/glob_multivar_statement.jac +1 -1
  208. jaclang/tests/fixtures/guess_game.jac +6 -6
  209. jaclang/tests/fixtures/has_goodness.jac +1 -1
  210. jaclang/tests/fixtures/hash_init_check.jac +3 -3
  211. jaclang/tests/fixtures/hello.jac +1 -1
  212. jaclang/tests/fixtures/here_usage_error.jac +21 -0
  213. jaclang/tests/fixtures/here_visitor_usage.jac +21 -0
  214. jaclang/tests/fixtures/ignore.jac +3 -3
  215. jaclang/tests/fixtures/ignore_dup.jac +3 -3
  216. jaclang/tests/fixtures/impl_match_confused.impl.jac +1 -1
  217. jaclang/tests/fixtures/import.jac +9 -9
  218. jaclang/tests/fixtures/import_all.jac +1 -1
  219. jaclang/tests/fixtures/index_slice.jac +1 -1
  220. jaclang/tests/fixtures/inherit_check.jac +3 -3
  221. jaclang/tests/fixtures/jac_from_py.py +4 -0
  222. jaclang/tests/fixtures/jacsamp.jac +1 -1
  223. jaclang/tests/fixtures/jactest_main.jac +1 -1
  224. jaclang/tests/fixtures/jp_importer.jac +7 -8
  225. jaclang/tests/fixtures/jp_importer_auto.jac +3 -3
  226. jaclang/tests/fixtures/lambda.jac +2 -2
  227. jaclang/tests/fixtures/needs_import.jac +6 -6
  228. jaclang/tests/fixtures/needs_import_1.jac +1 -1
  229. jaclang/tests/fixtures/needs_import_2.jac +1 -1
  230. jaclang/tests/fixtures/needs_import_3.jac +1 -1
  231. jaclang/tests/fixtures/needs_import_dup.jac +6 -6
  232. jaclang/tests/fixtures/node_del.jac +54 -0
  233. jaclang/tests/fixtures/nosigself.jac +3 -3
  234. jaclang/tests/fixtures/py2jac.py +30 -0
  235. jaclang/tests/fixtures/py_bool_expr.py +7 -0
  236. jaclang/tests/fixtures/py_namedexpr.py +7 -0
  237. jaclang/tests/fixtures/pyfunc_3.py +0 -2
  238. jaclang/tests/fixtures/random_check.jac +5 -5
  239. jaclang/tests/fixtures/simple_archs.jac +2 -2
  240. jaclang/tests/fixtures/simple_walk.jac +52 -0
  241. jaclang/tests/fixtures/slice_vals.jac +3 -3
  242. jaclang/tests/fixtures/sub_abil_sep.jac +3 -3
  243. jaclang/tests/fixtures/sub_abil_sep_multilev.jac +3 -3
  244. jaclang/tests/fixtures/trailing_comma.jac +4 -4
  245. jaclang/tests/fixtures/type_info.jac +5 -5
  246. jaclang/{compiler/passes/main/tests → tests}/fixtures/uninitialized_hasvars.jac +1 -1
  247. jaclang/tests/fixtures/visit_order.jac +4 -4
  248. jaclang/tests/fixtures/visit_traversal.jac +47 -0
  249. jaclang/tests/fixtures/walker_override.jac +2 -2
  250. jaclang/tests/fixtures/walker_update.jac +5 -5
  251. jaclang/tests/fixtures/with_context.jac +4 -4
  252. jaclang/tests/test_bugs.py +2 -2
  253. jaclang/tests/test_cli.py +127 -227
  254. jaclang/tests/test_language.py +542 -474
  255. jaclang/tests/test_man_code.py +2 -2
  256. jaclang/tests/test_reference.py +4 -4
  257. jaclang/tests/test_settings.py +16 -16
  258. jaclang/tests/test_typecheck.py +555 -0
  259. jaclang/utils/__init__.py +4 -0
  260. jaclang/utils/helpers.py +24 -31
  261. jaclang/utils/lang_tools.py +84 -75
  262. jaclang/utils/module_resolver.py +69 -0
  263. jaclang/utils/test.py +8 -5
  264. jaclang/utils/tests/test_lang_tools.py +40 -14
  265. jaclang/utils/treeprinter.py +178 -42
  266. jaclang/vendor/__init__.py +1 -2
  267. jaclang/vendor/attr/__init__.py +14 -44
  268. jaclang/vendor/attr/__init__.pyi +155 -321
  269. jaclang/vendor/attr/_cmp.py +25 -15
  270. jaclang/vendor/attr/_cmp.pyi +7 -7
  271. jaclang/vendor/attr/_compat.py +15 -8
  272. jaclang/vendor/attr/_config.py +1 -1
  273. jaclang/vendor/attr/_funcs.py +148 -163
  274. jaclang/vendor/attr/_make.py +859 -855
  275. jaclang/vendor/attr/_next_gen.py +426 -32
  276. jaclang/vendor/attr/converters.py +67 -49
  277. jaclang/vendor/attr/converters.pyi +13 -7
  278. jaclang/vendor/attr/filters.py +17 -11
  279. jaclang/vendor/attr/filters.pyi +3 -3
  280. jaclang/vendor/attr/setters.py +11 -5
  281. jaclang/vendor/attr/setters.pyi +2 -1
  282. jaclang/vendor/attr/validators.py +191 -162
  283. jaclang/vendor/attr/validators.pyi +25 -27
  284. jaclang/vendor/attrs/__init__.py +9 -5
  285. jaclang/vendor/attrs/__init__.pyi +225 -29
  286. jaclang/vendor/attrs-25.3.0.dist-info/INSTALLER +1 -0
  287. jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/METADATA +83 -53
  288. jaclang/vendor/attrs-25.3.0.dist-info/RECORD +56 -0
  289. jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/WHEEL +1 -1
  290. jaclang/vendor/bin/dmypy +8 -0
  291. jaclang/vendor/bin/mypy +8 -0
  292. jaclang/vendor/bin/mypyc +8 -0
  293. jaclang/vendor/bin/stubgen +8 -0
  294. jaclang/vendor/bin/stubtest +8 -0
  295. jaclang/vendor/cattr/gen.py +2 -2
  296. jaclang/vendor/cattr/preconf/bson.py +1 -0
  297. jaclang/vendor/cattr/preconf/json.py +1 -0
  298. jaclang/vendor/cattr/preconf/msgpack.py +1 -0
  299. jaclang/vendor/cattr/preconf/orjson.py +1 -0
  300. jaclang/vendor/cattr/preconf/pyyaml.py +1 -0
  301. jaclang/vendor/cattr/preconf/tomlkit.py +1 -0
  302. jaclang/vendor/cattr/preconf/ujson.py +1 -0
  303. jaclang/vendor/cattrs/__init__.py +21 -21
  304. jaclang/vendor/cattrs/_compat.py +176 -62
  305. jaclang/vendor/cattrs/_generics.py +5 -3
  306. jaclang/vendor/cattrs/cols.py +289 -0
  307. jaclang/vendor/cattrs/converters.py +505 -187
  308. jaclang/vendor/cattrs/disambiguators.py +118 -45
  309. jaclang/vendor/cattrs/dispatch.py +66 -36
  310. jaclang/vendor/cattrs/fns.py +6 -1
  311. jaclang/vendor/cattrs/gen/__init__.py +365 -202
  312. jaclang/vendor/cattrs/gen/_generics.py +41 -5
  313. jaclang/vendor/cattrs/gen/_lc.py +3 -2
  314. jaclang/vendor/cattrs/gen/_shared.py +39 -32
  315. jaclang/vendor/cattrs/gen/typeddicts.py +75 -88
  316. jaclang/vendor/cattrs/preconf/__init__.py +20 -0
  317. jaclang/vendor/cattrs/preconf/bson.py +7 -8
  318. jaclang/vendor/cattrs/preconf/cbor2.py +3 -0
  319. jaclang/vendor/cattrs/preconf/json.py +8 -4
  320. jaclang/vendor/cattrs/preconf/msgpack.py +3 -0
  321. jaclang/vendor/cattrs/preconf/msgspec.py +185 -0
  322. jaclang/vendor/cattrs/preconf/orjson.py +20 -7
  323. jaclang/vendor/cattrs/preconf/pyyaml.py +15 -3
  324. jaclang/vendor/cattrs/preconf/tomlkit.py +3 -1
  325. jaclang/vendor/cattrs/preconf/ujson.py +3 -0
  326. jaclang/vendor/cattrs/strategies/__init__.py +1 -0
  327. jaclang/vendor/cattrs/strategies/_class_methods.py +1 -1
  328. jaclang/vendor/cattrs/strategies/_subclasses.py +43 -29
  329. jaclang/vendor/cattrs/strategies/_unions.py +47 -24
  330. jaclang/vendor/cattrs/v.py +1 -0
  331. jaclang/vendor/cattrs-24.1.3.dist-info/INSTALLER +1 -0
  332. jaclang/vendor/cattrs-24.1.3.dist-info/METADATA +161 -0
  333. jaclang/vendor/cattrs-24.1.3.dist-info/RECORD +96 -0
  334. jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/WHEEL +1 -1
  335. jaclang/vendor/lark/__init__.py +38 -38
  336. jaclang/vendor/lark/__pyinstaller/__init__.py +6 -6
  337. jaclang/vendor/lark/__pyinstaller/hook-lark.py +14 -14
  338. jaclang/vendor/lark/ast_utils.py +59 -59
  339. jaclang/vendor/lark/common.py +86 -89
  340. jaclang/vendor/lark/exceptions.py +292 -292
  341. jaclang/vendor/lark/grammar.py +130 -130
  342. jaclang/vendor/lark/grammars/common.lark +59 -59
  343. jaclang/vendor/lark/grammars/lark.lark +62 -62
  344. jaclang/vendor/lark/grammars/python.lark +302 -302
  345. jaclang/vendor/lark/grammars/unicode.lark +7 -7
  346. jaclang/vendor/lark/indenter.py +143 -112
  347. jaclang/vendor/lark/lark.py +658 -661
  348. jaclang/vendor/lark/lexer.py +678 -678
  349. jaclang/vendor/lark/load_grammar.py +1428 -1428
  350. jaclang/vendor/lark/parse_tree_builder.py +391 -391
  351. jaclang/vendor/lark/parser_frontends.py +257 -257
  352. jaclang/vendor/lark/parsers/cyk.py +340 -340
  353. jaclang/vendor/lark/parsers/earley.py +317 -308
  354. jaclang/vendor/lark/parsers/earley_common.py +42 -42
  355. jaclang/vendor/lark/parsers/earley_forest.py +802 -810
  356. jaclang/vendor/lark/parsers/grammar_analysis.py +203 -203
  357. jaclang/vendor/lark/parsers/lalr_analysis.py +332 -332
  358. jaclang/vendor/lark/parsers/lalr_interactive_parser.py +158 -157
  359. jaclang/vendor/lark/parsers/lalr_parser.py +122 -122
  360. jaclang/vendor/lark/parsers/lalr_parser_state.py +110 -110
  361. jaclang/vendor/lark/parsers/xearley.py +165 -165
  362. jaclang/vendor/lark/reconstruct.py +107 -107
  363. jaclang/vendor/lark/tools/__init__.py +70 -71
  364. jaclang/vendor/lark/tools/nearley.py +202 -202
  365. jaclang/vendor/lark/tools/serialize.py +32 -32
  366. jaclang/vendor/lark/tools/standalone.py +196 -196
  367. jaclang/vendor/lark/tree.py +267 -272
  368. jaclang/vendor/lark/tree_matcher.py +186 -186
  369. jaclang/vendor/lark/utils.py +346 -361
  370. jaclang/vendor/lark/visitors.py +596 -593
  371. jaclang/vendor/lark-1.2.2.dist-info/INSTALLER +1 -0
  372. jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/METADATA +48 -47
  373. jaclang/vendor/lark-1.2.2.dist-info/RECORD +83 -0
  374. jaclang/vendor/{mypy_extensions-1.0.0.dist-info → lark-1.2.2.dist-info}/WHEEL +1 -1
  375. jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info/licenses}/LICENSE +18 -18
  376. jaclang/vendor/lsprotocol-2023.0.1.dist-info/INSTALLER +1 -0
  377. jaclang/vendor/lsprotocol-2023.0.1.dist-info/METADATA +2 -1
  378. jaclang/vendor/lsprotocol-2023.0.1.dist-info/RECORD +17 -10
  379. jaclang/vendor/lsprotocol-2023.0.1.dist-info/WHEEL +1 -1
  380. jaclang/vendor/pluggy/_version.py +7 -2
  381. jaclang/vendor/pluggy-1.5.0.dist-info/INSTALLER +1 -0
  382. jaclang/vendor/pluggy-1.5.0.dist-info/METADATA +6 -5
  383. jaclang/vendor/pluggy-1.5.0.dist-info/RECORD +24 -14
  384. jaclang/vendor/pluggy-1.5.0.dist-info/WHEEL +1 -1
  385. jaclang/vendor/pygls-1.3.1.dist-info/INSTALLER +1 -0
  386. jaclang/vendor/pygls-1.3.1.dist-info/METADATA +2 -2
  387. jaclang/vendor/pygls-1.3.1.dist-info/RECORD +45 -24
  388. jaclang/vendor/pygls-1.3.1.dist-info/WHEEL +1 -1
  389. {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/METADATA +2 -1
  390. jaclang-0.8.1.dist-info/RECORD +568 -0
  391. {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/WHEEL +1 -1
  392. jaclang/compiler/.gitignore +0 -1
  393. jaclang/compiler/compile.py +0 -119
  394. jaclang/compiler/passes/main/access_modifier_pass.py +0 -130
  395. jaclang/compiler/passes/main/fuse_typeinfo_pass.py +0 -656
  396. jaclang/compiler/passes/main/py_collect_dep_pass.py +0 -78
  397. jaclang/compiler/passes/main/pyout_pass.py +0 -86
  398. jaclang/compiler/passes/main/registry_pass.py +0 -156
  399. jaclang/compiler/passes/main/schedules.py +0 -47
  400. jaclang/compiler/passes/main/sub_node_tab_pass.py +0 -36
  401. jaclang/compiler/passes/main/tests/fixtures/registry.jac +0 -36
  402. jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +0 -114
  403. jaclang/compiler/passes/main/tests/test_registry_pass.py +0 -31
  404. jaclang/compiler/passes/main/tests/test_type_check_pass.py +0 -91
  405. jaclang/compiler/passes/main/tests/test_typeinfo_pass.py +0 -29
  406. jaclang/compiler/passes/main/type_check_pass.py +0 -128
  407. jaclang/compiler/passes/tool/schedules.py +0 -18
  408. jaclang/compiler/passes/tool/tests/fixtures/genai/essay_review.jac +0 -36
  409. jaclang/compiler/passes/tool/tests/fixtures/genai/expert_answer.jac +0 -17
  410. jaclang/compiler/passes/tool/tests/fixtures/genai/joke_gen.jac +0 -32
  411. jaclang/compiler/passes/tool/tests/fixtures/genai/odd_word_out.jac +0 -27
  412. jaclang/compiler/passes/tool/tests/fixtures/genai/personality_finder.jac +0 -35
  413. jaclang/compiler/passes/tool/tests/fixtures/genai/text_to_type.jac +0 -25
  414. jaclang/compiler/passes/tool/tests/fixtures/genai/translator.jac +0 -13
  415. jaclang/compiler/passes/tool/tests/fixtures/genai/wikipedia.jac +0 -63
  416. jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/architype_test.jac +0 -13
  417. jaclang/compiler/passes/utils/mypy_ast_build.py +0 -940
  418. jaclang/compiler/py_info.py +0 -22
  419. jaclang/compiler/semtable.py +0 -159
  420. jaclang/compiler/symtable.py +0 -297
  421. jaclang/langserve/engine.py +0 -541
  422. jaclang/langserve/sem_manager.py +0 -379
  423. jaclang/langserve/server.py +0 -176
  424. jaclang/langserve/tests/session.py +0 -255
  425. jaclang/langserve/utils.py +0 -458
  426. jaclang/plugin/__init__.py +0 -7
  427. jaclang/plugin/builtin.py +0 -57
  428. jaclang/plugin/default.py +0 -1443
  429. jaclang/plugin/feature.py +0 -574
  430. jaclang/plugin/plugin.md +0 -471
  431. jaclang/plugin/spec.py +0 -536
  432. jaclang/plugin/tests/fixtures/impl_match_impl.jac +0 -3
  433. jaclang/plugin/tests/test_features.py +0 -56
  434. jaclang/runtimelib/context.py +0 -191
  435. jaclang/tests/fixtures/builtin_dotgen.jac +0 -42
  436. jaclang/tests/fixtures/create_dynamic_architype.jac +0 -35
  437. jaclang/tests/fixtures/dynamic_architype.jac +0 -34
  438. jaclang/tests/fixtures/impl_grab.impl.jac +0 -5
  439. jaclang/tests/fixtures/mtest.impl.jac +0 -6
  440. jaclang/tests/fixtures/registry.jac +0 -58
  441. jaclang/tests/fixtures/semstr.jac +0 -30
  442. jaclang/tests/main.jac +0 -2
  443. jaclang/utils/profiler.py +0 -62
  444. jaclang/vendor/attrs-23.2.0.dist-info/RECORD +0 -35
  445. jaclang/vendor/cattrs-23.2.3.dist-info/METADATA +0 -221
  446. jaclang/vendor/cattrs-23.2.3.dist-info/RECORD +0 -48
  447. jaclang/vendor/lark-1.1.9.dist-info/RECORD +0 -46
  448. jaclang/vendor/lark-1.1.9.dist-info/WHEEL +0 -5
  449. jaclang/vendor/mypy/__init__.py +0 -1
  450. jaclang/vendor/mypy/__main__.py +0 -37
  451. jaclang/vendor/mypy/api.py +0 -94
  452. jaclang/vendor/mypy/applytype.py +0 -172
  453. jaclang/vendor/mypy/argmap.py +0 -268
  454. jaclang/vendor/mypy/binder.py +0 -538
  455. jaclang/vendor/mypy/bogus_type.py +0 -27
  456. jaclang/vendor/mypy/build.py +0 -3562
  457. jaclang/vendor/mypy/checker.py +0 -8445
  458. jaclang/vendor/mypy/checkexpr.py +0 -6623
  459. jaclang/vendor/mypy/checkmember.py +0 -1363
  460. jaclang/vendor/mypy/checkpattern.py +0 -801
  461. jaclang/vendor/mypy/checkstrformat.py +0 -1109
  462. jaclang/vendor/mypy/config_parser.py +0 -670
  463. jaclang/vendor/mypy/constant_fold.py +0 -187
  464. jaclang/vendor/mypy/constraints.py +0 -1636
  465. jaclang/vendor/mypy/copytype.py +0 -133
  466. jaclang/vendor/mypy/defaults.py +0 -46
  467. jaclang/vendor/mypy/dmypy/__main__.py +0 -6
  468. jaclang/vendor/mypy/dmypy/client.py +0 -749
  469. jaclang/vendor/mypy/dmypy_os.py +0 -42
  470. jaclang/vendor/mypy/dmypy_server.py +0 -1107
  471. jaclang/vendor/mypy/dmypy_util.py +0 -117
  472. jaclang/vendor/mypy/erasetype.py +0 -278
  473. jaclang/vendor/mypy/errorcodes.py +0 -291
  474. jaclang/vendor/mypy/errors.py +0 -1280
  475. jaclang/vendor/mypy/evalexpr.py +0 -205
  476. jaclang/vendor/mypy/expandtype.py +0 -524
  477. jaclang/vendor/mypy/exprtotype.py +0 -209
  478. jaclang/vendor/mypy/fastparse.py +0 -2147
  479. jaclang/vendor/mypy/find_sources.py +0 -243
  480. jaclang/vendor/mypy/fixup.py +0 -428
  481. jaclang/vendor/mypy/freetree.py +0 -23
  482. jaclang/vendor/mypy/fscache.py +0 -309
  483. jaclang/vendor/mypy/fswatcher.py +0 -106
  484. jaclang/vendor/mypy/gclogger.py +0 -47
  485. jaclang/vendor/mypy/git.py +0 -34
  486. jaclang/vendor/mypy/graph_utils.py +0 -112
  487. jaclang/vendor/mypy/indirection.py +0 -121
  488. jaclang/vendor/mypy/infer.py +0 -75
  489. jaclang/vendor/mypy/inspections.py +0 -627
  490. jaclang/vendor/mypy/ipc.py +0 -310
  491. jaclang/vendor/mypy/join.py +0 -871
  492. jaclang/vendor/mypy/literals.py +0 -306
  493. jaclang/vendor/mypy/lookup.py +0 -61
  494. jaclang/vendor/mypy/main.py +0 -1574
  495. jaclang/vendor/mypy/maptype.py +0 -106
  496. jaclang/vendor/mypy/meet.py +0 -1140
  497. jaclang/vendor/mypy/memprofile.py +0 -121
  498. jaclang/vendor/mypy/message_registry.py +0 -329
  499. jaclang/vendor/mypy/messages.py +0 -3186
  500. jaclang/vendor/mypy/metastore.py +0 -225
  501. jaclang/vendor/mypy/mixedtraverser.py +0 -112
  502. jaclang/vendor/mypy/modulefinder.py +0 -875
  503. jaclang/vendor/mypy/moduleinspect.py +0 -184
  504. jaclang/vendor/mypy/mro.py +0 -62
  505. jaclang/vendor/mypy/nodes.py +0 -4115
  506. jaclang/vendor/mypy/operators.py +0 -126
  507. jaclang/vendor/mypy/options.py +0 -556
  508. jaclang/vendor/mypy/parse.py +0 -30
  509. jaclang/vendor/mypy/partially_defined.py +0 -675
  510. jaclang/vendor/mypy/patterns.py +0 -150
  511. jaclang/vendor/mypy/plugin.py +0 -901
  512. jaclang/vendor/mypy/plugins/attrs.py +0 -1166
  513. jaclang/vendor/mypy/plugins/common.py +0 -440
  514. jaclang/vendor/mypy/plugins/ctypes.py +0 -245
  515. jaclang/vendor/mypy/plugins/dataclasses.py +0 -1108
  516. jaclang/vendor/mypy/plugins/default.py +0 -531
  517. jaclang/vendor/mypy/plugins/enums.py +0 -259
  518. jaclang/vendor/mypy/plugins/functools.py +0 -104
  519. jaclang/vendor/mypy/plugins/proper_plugin.py +0 -175
  520. jaclang/vendor/mypy/plugins/singledispatch.py +0 -224
  521. jaclang/vendor/mypy/py.typed +0 -1
  522. jaclang/vendor/mypy/pyinfo.py +0 -78
  523. jaclang/vendor/mypy/reachability.py +0 -362
  524. jaclang/vendor/mypy/refinfo.py +0 -92
  525. jaclang/vendor/mypy/renaming.py +0 -568
  526. jaclang/vendor/mypy/report.py +0 -924
  527. jaclang/vendor/mypy/scope.py +0 -125
  528. jaclang/vendor/mypy/semanal.py +0 -7187
  529. jaclang/vendor/mypy/semanal_classprop.py +0 -187
  530. jaclang/vendor/mypy/semanal_enum.py +0 -253
  531. jaclang/vendor/mypy/semanal_infer.py +0 -128
  532. jaclang/vendor/mypy/semanal_main.py +0 -511
  533. jaclang/vendor/mypy/semanal_namedtuple.py +0 -670
  534. jaclang/vendor/mypy/semanal_newtype.py +0 -273
  535. jaclang/vendor/mypy/semanal_pass1.py +0 -156
  536. jaclang/vendor/mypy/semanal_shared.py +0 -490
  537. jaclang/vendor/mypy/semanal_typeargs.py +0 -265
  538. jaclang/vendor/mypy/semanal_typeddict.py +0 -575
  539. jaclang/vendor/mypy/server/astdiff.py +0 -518
  540. jaclang/vendor/mypy/server/astmerge.py +0 -562
  541. jaclang/vendor/mypy/server/aststrip.py +0 -281
  542. jaclang/vendor/mypy/server/deps.py +0 -1137
  543. jaclang/vendor/mypy/server/mergecheck.py +0 -83
  544. jaclang/vendor/mypy/server/objgraph.py +0 -101
  545. jaclang/vendor/mypy/server/subexpr.py +0 -198
  546. jaclang/vendor/mypy/server/target.py +0 -11
  547. jaclang/vendor/mypy/server/trigger.py +0 -26
  548. jaclang/vendor/mypy/server/update.py +0 -1339
  549. jaclang/vendor/mypy/sharedparse.py +0 -112
  550. jaclang/vendor/mypy/solve.py +0 -562
  551. jaclang/vendor/mypy/split_namespace.py +0 -35
  552. jaclang/vendor/mypy/state.py +0 -28
  553. jaclang/vendor/mypy/stats.py +0 -489
  554. jaclang/vendor/mypy/strconv.py +0 -641
  555. jaclang/vendor/mypy/stubdoc.py +0 -491
  556. jaclang/vendor/mypy/stubgen.py +0 -1886
  557. jaclang/vendor/mypy/stubgenc.py +0 -993
  558. jaclang/vendor/mypy/stubinfo.py +0 -173
  559. jaclang/vendor/mypy/stubtest.py +0 -2079
  560. jaclang/vendor/mypy/stubutil.py +0 -834
  561. jaclang/vendor/mypy/subtypes.py +0 -1980
  562. jaclang/vendor/mypy/suggestions.py +0 -1046
  563. jaclang/vendor/mypy/test/config.py +0 -28
  564. jaclang/vendor/mypy/test/data.py +0 -821
  565. jaclang/vendor/mypy/test/helpers.py +0 -476
  566. jaclang/vendor/mypy/test/meta/_pytest.py +0 -72
  567. jaclang/vendor/mypy/test/meta/test_diff_helper.py +0 -47
  568. jaclang/vendor/mypy/test/meta/test_parse_data.py +0 -73
  569. jaclang/vendor/mypy/test/meta/test_update_data.py +0 -135
  570. jaclang/vendor/mypy/test/test_find_sources.py +0 -376
  571. jaclang/vendor/mypy/test/test_ref_info.py +0 -45
  572. jaclang/vendor/mypy/test/testapi.py +0 -45
  573. jaclang/vendor/mypy/test/testargs.py +0 -77
  574. jaclang/vendor/mypy/test/testcheck.py +0 -322
  575. jaclang/vendor/mypy/test/testcmdline.py +0 -152
  576. jaclang/vendor/mypy/test/testconstraints.py +0 -134
  577. jaclang/vendor/mypy/test/testdaemon.py +0 -132
  578. jaclang/vendor/mypy/test/testdeps.py +0 -77
  579. jaclang/vendor/mypy/test/testdiff.py +0 -67
  580. jaclang/vendor/mypy/test/testerrorstream.py +0 -46
  581. jaclang/vendor/mypy/test/testfinegrained.py +0 -438
  582. jaclang/vendor/mypy/test/testfinegrainedcache.py +0 -18
  583. jaclang/vendor/mypy/test/testformatter.py +0 -85
  584. jaclang/vendor/mypy/test/testfscache.py +0 -101
  585. jaclang/vendor/mypy/test/testgraph.py +0 -83
  586. jaclang/vendor/mypy/test/testinfer.py +0 -373
  587. jaclang/vendor/mypy/test/testipc.py +0 -119
  588. jaclang/vendor/mypy/test/testmerge.py +0 -238
  589. jaclang/vendor/mypy/test/testmodulefinder.py +0 -278
  590. jaclang/vendor/mypy/test/testmypyc.py +0 -14
  591. jaclang/vendor/mypy/test/testparse.py +0 -107
  592. jaclang/vendor/mypy/test/testpep561.py +0 -211
  593. jaclang/vendor/mypy/test/testpythoneval.py +0 -117
  594. jaclang/vendor/mypy/test/testreports.py +0 -55
  595. jaclang/vendor/mypy/test/testsemanal.py +0 -209
  596. jaclang/vendor/mypy/test/testsolve.py +0 -285
  597. jaclang/vendor/mypy/test/teststubgen.py +0 -1412
  598. jaclang/vendor/mypy/test/teststubinfo.py +0 -12
  599. jaclang/vendor/mypy/test/teststubtest.py +0 -2492
  600. jaclang/vendor/mypy/test/testsubtypes.py +0 -303
  601. jaclang/vendor/mypy/test/testtransform.py +0 -64
  602. jaclang/vendor/mypy/test/testtypegen.py +0 -83
  603. jaclang/vendor/mypy/test/testtypes.py +0 -1551
  604. jaclang/vendor/mypy/test/testutil.py +0 -111
  605. jaclang/vendor/mypy/test/typefixture.py +0 -415
  606. jaclang/vendor/mypy/test/update_data.py +0 -87
  607. jaclang/vendor/mypy/test/visitors.py +0 -63
  608. jaclang/vendor/mypy/traverser.py +0 -961
  609. jaclang/vendor/mypy/treetransform.py +0 -800
  610. jaclang/vendor/mypy/tvar_scope.py +0 -169
  611. jaclang/vendor/mypy/type_visitor.py +0 -564
  612. jaclang/vendor/mypy/typeanal.py +0 -2596
  613. jaclang/vendor/mypy/typeops.py +0 -1082
  614. jaclang/vendor/mypy/types.py +0 -3708
  615. jaclang/vendor/mypy/types_utils.py +0 -166
  616. jaclang/vendor/mypy/typeshed/LICENSE +0 -237
  617. jaclang/vendor/mypy/typeshed/stdlib/VERSIONS +0 -309
  618. jaclang/vendor/mypy/typeshed/stdlib/__future__.pyi +0 -36
  619. jaclang/vendor/mypy/typeshed/stdlib/__main__.pyi +0 -3
  620. jaclang/vendor/mypy/typeshed/stdlib/_ast.pyi +0 -591
  621. jaclang/vendor/mypy/typeshed/stdlib/_bisect.pyi +0 -84
  622. jaclang/vendor/mypy/typeshed/stdlib/_bootlocale.pyi +0 -1
  623. jaclang/vendor/mypy/typeshed/stdlib/_codecs.pyi +0 -133
  624. jaclang/vendor/mypy/typeshed/stdlib/_collections_abc.pyi +0 -94
  625. jaclang/vendor/mypy/typeshed/stdlib/_compat_pickle.pyi +0 -8
  626. jaclang/vendor/mypy/typeshed/stdlib/_compression.pyi +0 -25
  627. jaclang/vendor/mypy/typeshed/stdlib/_csv.pyi +0 -90
  628. jaclang/vendor/mypy/typeshed/stdlib/_ctypes.pyi +0 -207
  629. jaclang/vendor/mypy/typeshed/stdlib/_curses.pyi +0 -566
  630. jaclang/vendor/mypy/typeshed/stdlib/_decimal.pyi +0 -281
  631. jaclang/vendor/mypy/typeshed/stdlib/_dummy_thread.pyi +0 -33
  632. jaclang/vendor/mypy/typeshed/stdlib/_dummy_threading.pyi +0 -164
  633. jaclang/vendor/mypy/typeshed/stdlib/_heapq.pyi +0 -11
  634. jaclang/vendor/mypy/typeshed/stdlib/_imp.pyi +0 -28
  635. jaclang/vendor/mypy/typeshed/stdlib/_json.pyi +0 -49
  636. jaclang/vendor/mypy/typeshed/stdlib/_locale.pyi +0 -100
  637. jaclang/vendor/mypy/typeshed/stdlib/_lsprof.pyi +0 -35
  638. jaclang/vendor/mypy/typeshed/stdlib/_markupbase.pyi +0 -16
  639. jaclang/vendor/mypy/typeshed/stdlib/_msi.pyi +0 -92
  640. jaclang/vendor/mypy/typeshed/stdlib/_operator.pyi +0 -147
  641. jaclang/vendor/mypy/typeshed/stdlib/_osx_support.pyi +0 -34
  642. jaclang/vendor/mypy/typeshed/stdlib/_posixsubprocess.pyi +0 -33
  643. jaclang/vendor/mypy/typeshed/stdlib/_py_abc.pyi +0 -14
  644. jaclang/vendor/mypy/typeshed/stdlib/_pydecimal.pyi +0 -43
  645. jaclang/vendor/mypy/typeshed/stdlib/_random.pyi +0 -12
  646. jaclang/vendor/mypy/typeshed/stdlib/_sitebuiltins.pyi +0 -16
  647. jaclang/vendor/mypy/typeshed/stdlib/_socket.pyi +0 -803
  648. jaclang/vendor/mypy/typeshed/stdlib/_stat.pyi +0 -103
  649. jaclang/vendor/mypy/typeshed/stdlib/_thread.pyi +0 -59
  650. jaclang/vendor/mypy/typeshed/stdlib/_threading_local.pyi +0 -17
  651. jaclang/vendor/mypy/typeshed/stdlib/_tkinter.pyi +0 -121
  652. jaclang/vendor/mypy/typeshed/stdlib/_tracemalloc.pyi +0 -17
  653. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/__init__.pyi +0 -347
  654. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/dbapi.pyi +0 -37
  655. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/wsgi.pyi +0 -44
  656. jaclang/vendor/mypy/typeshed/stdlib/_typeshed/xml.pyi +0 -9
  657. jaclang/vendor/mypy/typeshed/stdlib/_warnings.pyi +0 -55
  658. jaclang/vendor/mypy/typeshed/stdlib/_weakref.pyi +0 -41
  659. jaclang/vendor/mypy/typeshed/stdlib/_weakrefset.pyi +0 -51
  660. jaclang/vendor/mypy/typeshed/stdlib/_winapi.pyi +0 -255
  661. jaclang/vendor/mypy/typeshed/stdlib/abc.pyi +0 -51
  662. jaclang/vendor/mypy/typeshed/stdlib/aifc.pyi +0 -91
  663. jaclang/vendor/mypy/typeshed/stdlib/antigravity.pyi +0 -3
  664. jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi +0 -595
  665. jaclang/vendor/mypy/typeshed/stdlib/array.pyi +0 -92
  666. jaclang/vendor/mypy/typeshed/stdlib/ast.pyi +0 -277
  667. jaclang/vendor/mypy/typeshed/stdlib/asynchat.pyi +0 -21
  668. jaclang/vendor/mypy/typeshed/stdlib/asyncio/__init__.pyi +0 -41
  669. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_events.pyi +0 -440
  670. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_futures.pyi +0 -19
  671. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +0 -63
  672. jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_tasks.pyi +0 -9
  673. jaclang/vendor/mypy/typeshed/stdlib/asyncio/constants.pyi +0 -20
  674. jaclang/vendor/mypy/typeshed/stdlib/asyncio/coroutines.pyi +0 -26
  675. jaclang/vendor/mypy/typeshed/stdlib/asyncio/events.pyi +0 -580
  676. jaclang/vendor/mypy/typeshed/stdlib/asyncio/exceptions.pyi +0 -43
  677. jaclang/vendor/mypy/typeshed/stdlib/asyncio/format_helpers.pyi +0 -20
  678. jaclang/vendor/mypy/typeshed/stdlib/asyncio/futures.pyi +0 -57
  679. jaclang/vendor/mypy/typeshed/stdlib/asyncio/locks.pyi +0 -121
  680. jaclang/vendor/mypy/typeshed/stdlib/asyncio/log.pyi +0 -3
  681. jaclang/vendor/mypy/typeshed/stdlib/asyncio/mixins.pyi +0 -9
  682. jaclang/vendor/mypy/typeshed/stdlib/asyncio/proactor_events.pyi +0 -64
  683. jaclang/vendor/mypy/typeshed/stdlib/asyncio/protocols.pyi +0 -34
  684. jaclang/vendor/mypy/typeshed/stdlib/asyncio/queues.pyi +0 -47
  685. jaclang/vendor/mypy/typeshed/stdlib/asyncio/runners.pyi +0 -32
  686. jaclang/vendor/mypy/typeshed/stdlib/asyncio/selector_events.pyi +0 -8
  687. jaclang/vendor/mypy/typeshed/stdlib/asyncio/sslproto.pyi +0 -165
  688. jaclang/vendor/mypy/typeshed/stdlib/asyncio/staggered.pyi +0 -10
  689. jaclang/vendor/mypy/typeshed/stdlib/asyncio/streams.pyi +0 -153
  690. jaclang/vendor/mypy/typeshed/stdlib/asyncio/subprocess.pyi +0 -229
  691. jaclang/vendor/mypy/typeshed/stdlib/asyncio/taskgroups.pyi +0 -25
  692. jaclang/vendor/mypy/typeshed/stdlib/asyncio/tasks.pyi +0 -497
  693. jaclang/vendor/mypy/typeshed/stdlib/asyncio/threads.pyi +0 -9
  694. jaclang/vendor/mypy/typeshed/stdlib/asyncio/timeouts.pyi +0 -19
  695. jaclang/vendor/mypy/typeshed/stdlib/asyncio/transports.pyi +0 -47
  696. jaclang/vendor/mypy/typeshed/stdlib/asyncio/trsock.pyi +0 -94
  697. jaclang/vendor/mypy/typeshed/stdlib/asyncio/unix_events.pyi +0 -196
  698. jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_events.pyi +0 -85
  699. jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_utils.pyi +0 -49
  700. jaclang/vendor/mypy/typeshed/stdlib/asyncore.pyi +0 -90
  701. jaclang/vendor/mypy/typeshed/stdlib/atexit.pyi +0 -12
  702. jaclang/vendor/mypy/typeshed/stdlib/audioop.pyi +0 -43
  703. jaclang/vendor/mypy/typeshed/stdlib/base64.pyi +0 -59
  704. jaclang/vendor/mypy/typeshed/stdlib/bdb.pyi +0 -102
  705. jaclang/vendor/mypy/typeshed/stdlib/binascii.pyi +0 -36
  706. jaclang/vendor/mypy/typeshed/stdlib/binhex.pyi +0 -45
  707. jaclang/vendor/mypy/typeshed/stdlib/bisect.pyi +0 -4
  708. jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi +0 -1936
  709. jaclang/vendor/mypy/typeshed/stdlib/bz2.pyi +0 -146
  710. jaclang/vendor/mypy/typeshed/stdlib/cProfile.pyi +0 -31
  711. jaclang/vendor/mypy/typeshed/stdlib/calendar.pyi +0 -208
  712. jaclang/vendor/mypy/typeshed/stdlib/cgi.pyi +0 -118
  713. jaclang/vendor/mypy/typeshed/stdlib/cgitb.pyi +0 -32
  714. jaclang/vendor/mypy/typeshed/stdlib/chunk.pyi +0 -20
  715. jaclang/vendor/mypy/typeshed/stdlib/cmath.pyi +0 -36
  716. jaclang/vendor/mypy/typeshed/stdlib/cmd.pyi +0 -45
  717. jaclang/vendor/mypy/typeshed/stdlib/code.pyi +0 -33
  718. jaclang/vendor/mypy/typeshed/stdlib/codecs.pyi +0 -285
  719. jaclang/vendor/mypy/typeshed/stdlib/codeop.pyi +0 -13
  720. jaclang/vendor/mypy/typeshed/stdlib/collections/__init__.pyi +0 -485
  721. jaclang/vendor/mypy/typeshed/stdlib/collections/abc.pyi +0 -2
  722. jaclang/vendor/mypy/typeshed/stdlib/colorsys.pyi +0 -13
  723. jaclang/vendor/mypy/typeshed/stdlib/compileall.pyi +0 -111
  724. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +0 -32
  725. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/_base.pyi +0 -126
  726. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/process.pyi +0 -233
  727. jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/thread.pyi +0 -80
  728. jaclang/vendor/mypy/typeshed/stdlib/configparser.pyi +0 -313
  729. jaclang/vendor/mypy/typeshed/stdlib/contextlib.pyi +0 -208
  730. jaclang/vendor/mypy/typeshed/stdlib/contextvars.pyi +0 -63
  731. jaclang/vendor/mypy/typeshed/stdlib/copy.pyi +0 -16
  732. jaclang/vendor/mypy/typeshed/stdlib/copyreg.pyi +0 -21
  733. jaclang/vendor/mypy/typeshed/stdlib/crypt.pyi +0 -12
  734. jaclang/vendor/mypy/typeshed/stdlib/csv.pyi +0 -147
  735. jaclang/vendor/mypy/typeshed/stdlib/ctypes/__init__.pyi +0 -187
  736. jaclang/vendor/mypy/typeshed/stdlib/ctypes/_endian.pyi +0 -19
  737. jaclang/vendor/mypy/typeshed/stdlib/ctypes/util.pyi +0 -6
  738. jaclang/vendor/mypy/typeshed/stdlib/ctypes/wintypes.pyi +0 -298
  739. jaclang/vendor/mypy/typeshed/stdlib/curses/__init__.pyi +0 -22
  740. jaclang/vendor/mypy/typeshed/stdlib/curses/ascii.pyi +0 -62
  741. jaclang/vendor/mypy/typeshed/stdlib/curses/has_key.pyi +0 -1
  742. jaclang/vendor/mypy/typeshed/stdlib/curses/panel.pyi +0 -22
  743. jaclang/vendor/mypy/typeshed/stdlib/curses/textpad.pyi +0 -11
  744. jaclang/vendor/mypy/typeshed/stdlib/dataclasses.pyi +0 -315
  745. jaclang/vendor/mypy/typeshed/stdlib/datetime.pyi +0 -295
  746. jaclang/vendor/mypy/typeshed/stdlib/dbm/__init__.pyi +0 -95
  747. jaclang/vendor/mypy/typeshed/stdlib/dbm/dumb.pyi +0 -31
  748. jaclang/vendor/mypy/typeshed/stdlib/dbm/gnu.pyi +0 -41
  749. jaclang/vendor/mypy/typeshed/stdlib/dbm/ndbm.pyi +0 -37
  750. jaclang/vendor/mypy/typeshed/stdlib/decimal.pyi +0 -2
  751. jaclang/vendor/mypy/typeshed/stdlib/difflib.pyi +0 -140
  752. jaclang/vendor/mypy/typeshed/stdlib/dis.pyi +0 -144
  753. jaclang/vendor/mypy/typeshed/stdlib/distutils/__init__.pyi +0 -5
  754. jaclang/vendor/mypy/typeshed/stdlib/distutils/archive_util.pyi +0 -20
  755. jaclang/vendor/mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +0 -3
  756. jaclang/vendor/mypy/typeshed/stdlib/distutils/ccompiler.pyi +0 -152
  757. jaclang/vendor/mypy/typeshed/stdlib/distutils/cmd.pyi +0 -66
  758. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist.pyi +0 -25
  759. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +0 -21
  760. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +0 -45
  761. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +0 -52
  762. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +0 -16
  763. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build.pyi +0 -31
  764. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_clib.pyi +0 -27
  765. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_ext.pyi +0 -50
  766. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_py.pyi +0 -44
  767. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +0 -24
  768. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/check.pyi +0 -39
  769. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/clean.pyi +0 -17
  770. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/config.pyi +0 -83
  771. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install.pyi +0 -63
  772. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_data.pyi +0 -19
  773. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +0 -18
  774. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_headers.pyi +0 -16
  775. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_lib.pyi +0 -25
  776. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +0 -18
  777. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/register.pyi +0 -18
  778. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/sdist.pyi +0 -42
  779. jaclang/vendor/mypy/typeshed/stdlib/distutils/command/upload.pyi +0 -17
  780. jaclang/vendor/mypy/typeshed/stdlib/distutils/config.pyi +0 -17
  781. jaclang/vendor/mypy/typeshed/stdlib/distutils/core.pyi +0 -57
  782. jaclang/vendor/mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +0 -20
  783. jaclang/vendor/mypy/typeshed/stdlib/distutils/debug.pyi +0 -1
  784. jaclang/vendor/mypy/typeshed/stdlib/distutils/dep_util.pyi +0 -3
  785. jaclang/vendor/mypy/typeshed/stdlib/distutils/dir_util.pyi +0 -13
  786. jaclang/vendor/mypy/typeshed/stdlib/distutils/dist.pyi +0 -146
  787. jaclang/vendor/mypy/typeshed/stdlib/distutils/errors.pyi +0 -19
  788. jaclang/vendor/mypy/typeshed/stdlib/distutils/extension.pyi +0 -36
  789. jaclang/vendor/mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +0 -34
  790. jaclang/vendor/mypy/typeshed/stdlib/distutils/file_util.pyi +0 -14
  791. jaclang/vendor/mypy/typeshed/stdlib/distutils/filelist.pyi +0 -50
  792. jaclang/vendor/mypy/typeshed/stdlib/distutils/log.pyi +0 -25
  793. jaclang/vendor/mypy/typeshed/stdlib/distutils/msvccompiler.pyi +0 -3
  794. jaclang/vendor/mypy/typeshed/stdlib/distutils/spawn.pyi +0 -2
  795. jaclang/vendor/mypy/typeshed/stdlib/distutils/sysconfig.pyi +0 -31
  796. jaclang/vendor/mypy/typeshed/stdlib/distutils/text_file.pyi +0 -21
  797. jaclang/vendor/mypy/typeshed/stdlib/distutils/unixccompiler.pyi +0 -3
  798. jaclang/vendor/mypy/typeshed/stdlib/distutils/util.pyi +0 -46
  799. jaclang/vendor/mypy/typeshed/stdlib/distutils/version.pyi +0 -36
  800. jaclang/vendor/mypy/typeshed/stdlib/doctest.pyi +0 -248
  801. jaclang/vendor/mypy/typeshed/stdlib/dummy_threading.pyi +0 -2
  802. jaclang/vendor/mypy/typeshed/stdlib/email/__init__.pyi +0 -29
  803. jaclang/vendor/mypy/typeshed/stdlib/email/_header_value_parser.pyi +0 -392
  804. jaclang/vendor/mypy/typeshed/stdlib/email/_policybase.pyi +0 -51
  805. jaclang/vendor/mypy/typeshed/stdlib/email/base64mime.pyi +0 -13
  806. jaclang/vendor/mypy/typeshed/stdlib/email/charset.pyi +0 -34
  807. jaclang/vendor/mypy/typeshed/stdlib/email/contentmanager.pyi +0 -11
  808. jaclang/vendor/mypy/typeshed/stdlib/email/encoders.pyi +0 -8
  809. jaclang/vendor/mypy/typeshed/stdlib/email/errors.pyi +0 -39
  810. jaclang/vendor/mypy/typeshed/stdlib/email/feedparser.pyi +0 -23
  811. jaclang/vendor/mypy/typeshed/stdlib/email/generator.pyi +0 -40
  812. jaclang/vendor/mypy/typeshed/stdlib/email/header.pyi +0 -31
  813. jaclang/vendor/mypy/typeshed/stdlib/email/headerregistry.pyi +0 -178
  814. jaclang/vendor/mypy/typeshed/stdlib/email/iterators.pyi +0 -12
  815. jaclang/vendor/mypy/typeshed/stdlib/email/message.pyi +0 -165
  816. jaclang/vendor/mypy/typeshed/stdlib/email/mime/application.pyi +0 -17
  817. jaclang/vendor/mypy/typeshed/stdlib/email/mime/audio.pyi +0 -17
  818. jaclang/vendor/mypy/typeshed/stdlib/email/mime/base.pyi +0 -8
  819. jaclang/vendor/mypy/typeshed/stdlib/email/mime/image.pyi +0 -17
  820. jaclang/vendor/mypy/typeshed/stdlib/email/mime/message.pyi +0 -8
  821. jaclang/vendor/mypy/typeshed/stdlib/email/mime/multipart.pyi +0 -18
  822. jaclang/vendor/mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +0 -5
  823. jaclang/vendor/mypy/typeshed/stdlib/email/mime/text.pyi +0 -9
  824. jaclang/vendor/mypy/typeshed/stdlib/email/parser.pyi +0 -26
  825. jaclang/vendor/mypy/typeshed/stdlib/email/policy.pyi +0 -38
  826. jaclang/vendor/mypy/typeshed/stdlib/email/quoprimime.pyi +0 -28
  827. jaclang/vendor/mypy/typeshed/stdlib/email/utils.pyi +0 -70
  828. jaclang/vendor/mypy/typeshed/stdlib/encodings/__init__.pyi +0 -10
  829. jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8.pyi +0 -21
  830. jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +0 -22
  831. jaclang/vendor/mypy/typeshed/stdlib/ensurepip/__init__.pyi +0 -12
  832. jaclang/vendor/mypy/typeshed/stdlib/enum.pyi +0 -320
  833. jaclang/vendor/mypy/typeshed/stdlib/errno.pyi +0 -222
  834. jaclang/vendor/mypy/typeshed/stdlib/faulthandler.pyi +0 -13
  835. jaclang/vendor/mypy/typeshed/stdlib/fcntl.pyi +0 -127
  836. jaclang/vendor/mypy/typeshed/stdlib/filecmp.pyi +0 -57
  837. jaclang/vendor/mypy/typeshed/stdlib/fileinput.pyi +0 -213
  838. jaclang/vendor/mypy/typeshed/stdlib/fnmatch.pyi +0 -9
  839. jaclang/vendor/mypy/typeshed/stdlib/formatter.pyi +0 -88
  840. jaclang/vendor/mypy/typeshed/stdlib/fractions.pyi +0 -150
  841. jaclang/vendor/mypy/typeshed/stdlib/ftplib.pyi +0 -178
  842. jaclang/vendor/mypy/typeshed/stdlib/functools.pyi +0 -213
  843. jaclang/vendor/mypy/typeshed/stdlib/gc.pyi +0 -37
  844. jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi +0 -52
  845. jaclang/vendor/mypy/typeshed/stdlib/getopt.pyi +0 -11
  846. jaclang/vendor/mypy/typeshed/stdlib/getpass.pyi +0 -8
  847. jaclang/vendor/mypy/typeshed/stdlib/gettext.pyi +0 -169
  848. jaclang/vendor/mypy/typeshed/stdlib/glob.pyi +0 -42
  849. jaclang/vendor/mypy/typeshed/stdlib/graphlib.pyi +0 -28
  850. jaclang/vendor/mypy/typeshed/stdlib/grp.pyi +0 -22
  851. jaclang/vendor/mypy/typeshed/stdlib/gzip.pyi +0 -160
  852. jaclang/vendor/mypy/typeshed/stdlib/hashlib.pyi +0 -167
  853. jaclang/vendor/mypy/typeshed/stdlib/heapq.pyi +0 -17
  854. jaclang/vendor/mypy/typeshed/stdlib/hmac.pyi +0 -38
  855. jaclang/vendor/mypy/typeshed/stdlib/html/__init__.pyi +0 -6
  856. jaclang/vendor/mypy/typeshed/stdlib/html/entities.pyi +0 -6
  857. jaclang/vendor/mypy/typeshed/stdlib/html/parser.pyi +0 -34
  858. jaclang/vendor/mypy/typeshed/stdlib/http/__init__.pyi +0 -105
  859. jaclang/vendor/mypy/typeshed/stdlib/http/client.pyi +0 -259
  860. jaclang/vendor/mypy/typeshed/stdlib/http/cookiejar.pyi +0 -159
  861. jaclang/vendor/mypy/typeshed/stdlib/http/cookies.pyi +0 -60
  862. jaclang/vendor/mypy/typeshed/stdlib/http/server.pyi +0 -83
  863. jaclang/vendor/mypy/typeshed/stdlib/imaplib.pyi +0 -168
  864. jaclang/vendor/mypy/typeshed/stdlib/imghdr.pyi +0 -17
  865. jaclang/vendor/mypy/typeshed/stdlib/imp.pyi +0 -62
  866. jaclang/vendor/mypy/typeshed/stdlib/importlib/__init__.pyi +0 -24
  867. jaclang/vendor/mypy/typeshed/stdlib/importlib/_abc.pyi +0 -15
  868. jaclang/vendor/mypy/typeshed/stdlib/importlib/abc.pyi +0 -172
  869. jaclang/vendor/mypy/typeshed/stdlib/importlib/machinery.pyi +0 -179
  870. jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +0 -285
  871. jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +0 -49
  872. jaclang/vendor/mypy/typeshed/stdlib/importlib/readers.pyi +0 -68
  873. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/__init__.pyi +0 -46
  874. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/abc.pyi +0 -12
  875. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/readers.pyi +0 -14
  876. jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/simple.pyi +0 -56
  877. jaclang/vendor/mypy/typeshed/stdlib/importlib/simple.pyi +0 -11
  878. jaclang/vendor/mypy/typeshed/stdlib/importlib/util.pyi +0 -43
  879. jaclang/vendor/mypy/typeshed/stdlib/inspect.pyi +0 -632
  880. jaclang/vendor/mypy/typeshed/stdlib/io.pyi +0 -238
  881. jaclang/vendor/mypy/typeshed/stdlib/ipaddress.pyi +0 -208
  882. jaclang/vendor/mypy/typeshed/stdlib/itertools.pyi +0 -273
  883. jaclang/vendor/mypy/typeshed/stdlib/json/__init__.pyi +0 -61
  884. jaclang/vendor/mypy/typeshed/stdlib/json/decoder.pyi +0 -32
  885. jaclang/vendor/mypy/typeshed/stdlib/json/encoder.pyi +0 -40
  886. jaclang/vendor/mypy/typeshed/stdlib/json/tool.pyi +0 -1
  887. jaclang/vendor/mypy/typeshed/stdlib/keyword.pyi +0 -21
  888. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +0 -28
  889. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +0 -42
  890. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +0 -8
  891. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +0 -10
  892. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +0 -8
  893. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +0 -8
  894. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +0 -16
  895. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +0 -14
  896. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +0 -8
  897. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +0 -8
  898. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +0 -13
  899. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +0 -9
  900. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +0 -8
  901. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +0 -8
  902. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +0 -8
  903. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +0 -8
  904. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +0 -15
  905. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +0 -16
  906. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +0 -21
  907. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +0 -6
  908. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +0 -11
  909. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +0 -9
  910. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +0 -8
  911. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +0 -9
  912. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +0 -7
  913. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +0 -7
  914. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +0 -9
  915. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +0 -17
  916. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +0 -10
  917. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +0 -8
  918. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +0 -19
  919. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +0 -8
  920. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +0 -8
  921. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +0 -12
  922. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +0 -8
  923. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +0 -12
  924. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +0 -8
  925. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +0 -8
  926. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +0 -8
  927. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +0 -9
  928. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +0 -17
  929. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +0 -8
  930. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +0 -7
  931. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +0 -8
  932. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +0 -9
  933. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +0 -8
  934. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +0 -17
  935. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +0 -8
  936. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +0 -12
  937. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +0 -15
  938. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +0 -12
  939. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +0 -20
  940. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +0 -8
  941. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +0 -9
  942. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/main.pyi +0 -42
  943. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +0 -9
  944. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +0 -27
  945. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +0 -24
  946. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +0 -7
  947. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +0 -30
  948. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +0 -50
  949. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +0 -67
  950. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +0 -96
  951. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pygram.pyi +0 -114
  952. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pytree.pyi +0 -117
  953. jaclang/vendor/mypy/typeshed/stdlib/lib2to3/refactor.pyi +0 -82
  954. jaclang/vendor/mypy/typeshed/stdlib/linecache.pyi +0 -23
  955. jaclang/vendor/mypy/typeshed/stdlib/locale.pyi +0 -152
  956. jaclang/vendor/mypy/typeshed/stdlib/logging/__init__.pyi +0 -658
  957. jaclang/vendor/mypy/typeshed/stdlib/logging/config.pyi +0 -134
  958. jaclang/vendor/mypy/typeshed/stdlib/logging/handlers.pyi +0 -275
  959. jaclang/vendor/mypy/typeshed/stdlib/lzma.pyi +0 -197
  960. jaclang/vendor/mypy/typeshed/stdlib/mailbox.pyi +0 -256
  961. jaclang/vendor/mypy/typeshed/stdlib/mailcap.pyi +0 -11
  962. jaclang/vendor/mypy/typeshed/stdlib/marshal.pyi +0 -33
  963. jaclang/vendor/mypy/typeshed/stdlib/math.pyi +0 -125
  964. jaclang/vendor/mypy/typeshed/stdlib/mimetypes.pyi +0 -46
  965. jaclang/vendor/mypy/typeshed/stdlib/mmap.pyi +0 -113
  966. jaclang/vendor/mypy/typeshed/stdlib/modulefinder.pyi +0 -66
  967. jaclang/vendor/mypy/typeshed/stdlib/msilib/__init__.pyi +0 -177
  968. jaclang/vendor/mypy/typeshed/stdlib/msilib/schema.pyi +0 -94
  969. jaclang/vendor/mypy/typeshed/stdlib/msilib/sequence.pyi +0 -13
  970. jaclang/vendor/mypy/typeshed/stdlib/msilib/text.pyi +0 -7
  971. jaclang/vendor/mypy/typeshed/stdlib/msvcrt.pyi +0 -32
  972. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/__init__.pyi +0 -90
  973. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/connection.pyi +0 -75
  974. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/context.pyi +0 -189
  975. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +0 -77
  976. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +0 -39
  977. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +0 -31
  978. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/heap.pyi +0 -36
  979. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/managers.pyi +0 -212
  980. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/pool.pyi +0 -103
  981. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +0 -23
  982. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +0 -16
  983. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +0 -20
  984. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +0 -30
  985. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/process.pyi +0 -39
  986. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/queues.pyi +0 -41
  987. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/reduction.pyi +0 -90
  988. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +0 -20
  989. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +0 -18
  990. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +0 -40
  991. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +0 -107
  992. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/spawn.pyi +0 -32
  993. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +0 -54
  994. jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/util.pyi +0 -98
  995. jaclang/vendor/mypy/typeshed/stdlib/netrc.pyi +0 -23
  996. jaclang/vendor/mypy/typeshed/stdlib/nis.pyi +0 -9
  997. jaclang/vendor/mypy/typeshed/stdlib/nntplib.pyi +0 -125
  998. jaclang/vendor/mypy/typeshed/stdlib/nt.pyi +0 -111
  999. jaclang/vendor/mypy/typeshed/stdlib/ntpath.pyi +0 -119
  1000. jaclang/vendor/mypy/typeshed/stdlib/nturl2path.pyi +0 -2
  1001. jaclang/vendor/mypy/typeshed/stdlib/numbers.pyi +0 -209
  1002. jaclang/vendor/mypy/typeshed/stdlib/opcode.pyi +0 -59
  1003. jaclang/vendor/mypy/typeshed/stdlib/operator.pyi +0 -110
  1004. jaclang/vendor/mypy/typeshed/stdlib/optparse.pyi +0 -255
  1005. jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi +0 -1157
  1006. jaclang/vendor/mypy/typeshed/stdlib/os/path.pyi +0 -8
  1007. jaclang/vendor/mypy/typeshed/stdlib/ossaudiodev.pyi +0 -131
  1008. jaclang/vendor/mypy/typeshed/stdlib/parser.pyi +0 -24
  1009. jaclang/vendor/mypy/typeshed/stdlib/pathlib.pyi +0 -232
  1010. jaclang/vendor/mypy/typeshed/stdlib/pdb.pyi +0 -181
  1011. jaclang/vendor/mypy/typeshed/stdlib/pickle.pyi +0 -271
  1012. jaclang/vendor/mypy/typeshed/stdlib/pickletools.pyi +0 -167
  1013. jaclang/vendor/mypy/typeshed/stdlib/pipes.pyi +0 -16
  1014. jaclang/vendor/mypy/typeshed/stdlib/pkgutil.pyi +0 -53
  1015. jaclang/vendor/mypy/typeshed/stdlib/platform.pyi +0 -42
  1016. jaclang/vendor/mypy/typeshed/stdlib/plistlib.pyi +0 -113
  1017. jaclang/vendor/mypy/typeshed/stdlib/poplib.pyi +0 -71
  1018. jaclang/vendor/mypy/typeshed/stdlib/posix.pyi +0 -361
  1019. jaclang/vendor/mypy/typeshed/stdlib/posixpath.pyi +0 -161
  1020. jaclang/vendor/mypy/typeshed/stdlib/pprint.pyi +0 -112
  1021. jaclang/vendor/mypy/typeshed/stdlib/profile.pyi +0 -31
  1022. jaclang/vendor/mypy/typeshed/stdlib/pstats.pyi +0 -80
  1023. jaclang/vendor/mypy/typeshed/stdlib/pty.pyi +0 -19
  1024. jaclang/vendor/mypy/typeshed/stdlib/pwd.pyi +0 -28
  1025. jaclang/vendor/mypy/typeshed/stdlib/py_compile.pyi +0 -34
  1026. jaclang/vendor/mypy/typeshed/stdlib/pyclbr.pyi +0 -74
  1027. jaclang/vendor/mypy/typeshed/stdlib/pydoc.pyi +0 -261
  1028. jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
  1029. jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/topics.pyi +0 -1
  1030. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/__init__.pyi +0 -85
  1031. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/errors.pyi +0 -49
  1032. jaclang/vendor/mypy/typeshed/stdlib/pyexpat/model.pyi +0 -11
  1033. jaclang/vendor/mypy/typeshed/stdlib/queue.pyi +0 -66
  1034. jaclang/vendor/mypy/typeshed/stdlib/quopri.pyi +0 -11
  1035. jaclang/vendor/mypy/typeshed/stdlib/random.pyi +0 -138
  1036. jaclang/vendor/mypy/typeshed/stdlib/re.pyi +0 -290
  1037. jaclang/vendor/mypy/typeshed/stdlib/readline.pyi +0 -36
  1038. jaclang/vendor/mypy/typeshed/stdlib/reprlib.pyi +0 -65
  1039. jaclang/vendor/mypy/typeshed/stdlib/resource.pyi +0 -94
  1040. jaclang/vendor/mypy/typeshed/stdlib/rlcompleter.pyi +0 -9
  1041. jaclang/vendor/mypy/typeshed/stdlib/runpy.pyi +0 -24
  1042. jaclang/vendor/mypy/typeshed/stdlib/sched.pyi +0 -42
  1043. jaclang/vendor/mypy/typeshed/stdlib/secrets.pyi +0 -15
  1044. jaclang/vendor/mypy/typeshed/stdlib/select.pyi +0 -155
  1045. jaclang/vendor/mypy/typeshed/stdlib/selectors.pyi +0 -67
  1046. jaclang/vendor/mypy/typeshed/stdlib/shelve.pyi +0 -46
  1047. jaclang/vendor/mypy/typeshed/stdlib/shlex.pyi +0 -63
  1048. jaclang/vendor/mypy/typeshed/stdlib/shutil.pyi +0 -185
  1049. jaclang/vendor/mypy/typeshed/stdlib/signal.pyi +0 -188
  1050. jaclang/vendor/mypy/typeshed/stdlib/site.pyi +0 -27
  1051. jaclang/vendor/mypy/typeshed/stdlib/smtpd.pyi +0 -91
  1052. jaclang/vendor/mypy/typeshed/stdlib/smtplib.pyi +0 -204
  1053. jaclang/vendor/mypy/typeshed/stdlib/sndhdr.pyi +0 -14
  1054. jaclang/vendor/mypy/typeshed/stdlib/socket.pyi +0 -825
  1055. jaclang/vendor/mypy/typeshed/stdlib/socketserver.pyi +0 -168
  1056. jaclang/vendor/mypy/typeshed/stdlib/spwd.pyi +0 -41
  1057. jaclang/vendor/mypy/typeshed/stdlib/sqlite3/__init__.pyi +0 -1
  1058. jaclang/vendor/mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +0 -551
  1059. jaclang/vendor/mypy/typeshed/stdlib/sre_compile.pyi +0 -11
  1060. jaclang/vendor/mypy/typeshed/stdlib/sre_constants.pyi +0 -130
  1061. jaclang/vendor/mypy/typeshed/stdlib/sre_parse.pyi +0 -104
  1062. jaclang/vendor/mypy/typeshed/stdlib/ssl.pyi +0 -537
  1063. jaclang/vendor/mypy/typeshed/stdlib/stat.pyi +0 -1
  1064. jaclang/vendor/mypy/typeshed/stdlib/statistics.pyi +0 -132
  1065. jaclang/vendor/mypy/typeshed/stdlib/string.pyi +0 -83
  1066. jaclang/vendor/mypy/typeshed/stdlib/stringprep.pyi +0 -27
  1067. jaclang/vendor/mypy/typeshed/stdlib/struct.pyi +0 -26
  1068. jaclang/vendor/mypy/typeshed/stdlib/subprocess.pyi +0 -2615
  1069. jaclang/vendor/mypy/typeshed/stdlib/sunau.pyi +0 -86
  1070. jaclang/vendor/mypy/typeshed/stdlib/symbol.pyi +0 -93
  1071. jaclang/vendor/mypy/typeshed/stdlib/symtable.pyi +0 -58
  1072. jaclang/vendor/mypy/typeshed/stdlib/sys/__init__.pyi +0 -373
  1073. jaclang/vendor/mypy/typeshed/stdlib/sys/_monitoring.pyi +0 -52
  1074. jaclang/vendor/mypy/typeshed/stdlib/sysconfig.pyi +0 -48
  1075. jaclang/vendor/mypy/typeshed/stdlib/syslog.pyi +0 -46
  1076. jaclang/vendor/mypy/typeshed/stdlib/tabnanny.pyi +0 -16
  1077. jaclang/vendor/mypy/typeshed/stdlib/tarfile.pyi +0 -441
  1078. jaclang/vendor/mypy/typeshed/stdlib/telnetlib.pyi +0 -122
  1079. jaclang/vendor/mypy/typeshed/stdlib/tempfile.pyi +0 -477
  1080. jaclang/vendor/mypy/typeshed/stdlib/termios.pyi +0 -267
  1081. jaclang/vendor/mypy/typeshed/stdlib/textwrap.pyi +0 -103
  1082. jaclang/vendor/mypy/typeshed/stdlib/this.pyi +0 -2
  1083. jaclang/vendor/mypy/typeshed/stdlib/threading.pyi +0 -187
  1084. jaclang/vendor/mypy/typeshed/stdlib/time.pyi +0 -108
  1085. jaclang/vendor/mypy/typeshed/stdlib/timeit.pyi +0 -32
  1086. jaclang/vendor/mypy/typeshed/stdlib/tkinter/__init__.pyi +0 -3654
  1087. jaclang/vendor/mypy/typeshed/stdlib/tkinter/colorchooser.pyi +0 -20
  1088. jaclang/vendor/mypy/typeshed/stdlib/tkinter/commondialog.pyi +0 -14
  1089. jaclang/vendor/mypy/typeshed/stdlib/tkinter/constants.pyi +0 -80
  1090. jaclang/vendor/mypy/typeshed/stdlib/tkinter/dialog.pyi +0 -16
  1091. jaclang/vendor/mypy/typeshed/stdlib/tkinter/dnd.pyi +0 -20
  1092. jaclang/vendor/mypy/typeshed/stdlib/tkinter/filedialog.pyi +0 -151
  1093. jaclang/vendor/mypy/typeshed/stdlib/tkinter/font.pyi +0 -116
  1094. jaclang/vendor/mypy/typeshed/stdlib/tkinter/messagebox.pyi +0 -44
  1095. jaclang/vendor/mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +0 -9
  1096. jaclang/vendor/mypy/typeshed/stdlib/tkinter/simpledialog.pyi +0 -54
  1097. jaclang/vendor/mypy/typeshed/stdlib/tkinter/tix.pyi +0 -299
  1098. jaclang/vendor/mypy/typeshed/stdlib/tkinter/ttk.pyi +0 -1204
  1099. jaclang/vendor/mypy/typeshed/stdlib/token.pyi +0 -159
  1100. jaclang/vendor/mypy/typeshed/stdlib/tokenize.pyi +0 -177
  1101. jaclang/vendor/mypy/typeshed/stdlib/tomllib.pyi +0 -10
  1102. jaclang/vendor/mypy/typeshed/stdlib/trace.pyi +0 -79
  1103. jaclang/vendor/mypy/typeshed/stdlib/traceback.pyi +0 -262
  1104. jaclang/vendor/mypy/typeshed/stdlib/tracemalloc.pyi +0 -124
  1105. jaclang/vendor/mypy/typeshed/stdlib/tty.pyi +0 -30
  1106. jaclang/vendor/mypy/typeshed/stdlib/turtle.pyi +0 -713
  1107. jaclang/vendor/mypy/typeshed/stdlib/types.pyi +0 -614
  1108. jaclang/vendor/mypy/typeshed/stdlib/typing.pyi +0 -976
  1109. jaclang/vendor/mypy/typeshed/stdlib/typing_extensions.pyi +0 -509
  1110. jaclang/vendor/mypy/typeshed/stdlib/unicodedata.pyi +0 -73
  1111. jaclang/vendor/mypy/typeshed/stdlib/unittest/__init__.pyi +0 -67
  1112. jaclang/vendor/mypy/typeshed/stdlib/unittest/_log.pyi +0 -27
  1113. jaclang/vendor/mypy/typeshed/stdlib/unittest/async_case.pyi +0 -21
  1114. jaclang/vendor/mypy/typeshed/stdlib/unittest/case.pyi +0 -342
  1115. jaclang/vendor/mypy/typeshed/stdlib/unittest/loader.pyi +0 -51
  1116. jaclang/vendor/mypy/typeshed/stdlib/unittest/main.pyi +0 -69
  1117. jaclang/vendor/mypy/typeshed/stdlib/unittest/mock.pyi +0 -430
  1118. jaclang/vendor/mypy/typeshed/stdlib/unittest/result.pyi +0 -47
  1119. jaclang/vendor/mypy/typeshed/stdlib/unittest/runner.pyi +0 -72
  1120. jaclang/vendor/mypy/typeshed/stdlib/unittest/signals.pyi +0 -15
  1121. jaclang/vendor/mypy/typeshed/stdlib/unittest/suite.pyi +0 -22
  1122. jaclang/vendor/mypy/typeshed/stdlib/unittest/util.pyi +0 -23
  1123. jaclang/vendor/mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
  1124. jaclang/vendor/mypy/typeshed/stdlib/urllib/error.pyi +0 -23
  1125. jaclang/vendor/mypy/typeshed/stdlib/urllib/parse.pyi +0 -210
  1126. jaclang/vendor/mypy/typeshed/stdlib/urllib/request.pyi +0 -400
  1127. jaclang/vendor/mypy/typeshed/stdlib/urllib/response.pyi +0 -43
  1128. jaclang/vendor/mypy/typeshed/stdlib/urllib/robotparser.pyi +0 -20
  1129. jaclang/vendor/mypy/typeshed/stdlib/uu.pyi +0 -13
  1130. jaclang/vendor/mypy/typeshed/stdlib/uuid.pyi +0 -100
  1131. jaclang/vendor/mypy/typeshed/stdlib/warnings.pyi +0 -112
  1132. jaclang/vendor/mypy/typeshed/stdlib/wave.pyi +0 -85
  1133. jaclang/vendor/mypy/typeshed/stdlib/weakref.pyi +0 -149
  1134. jaclang/vendor/mypy/typeshed/stdlib/webbrowser.pyi +0 -74
  1135. jaclang/vendor/mypy/typeshed/stdlib/winreg.pyi +0 -132
  1136. jaclang/vendor/mypy/typeshed/stdlib/winsound.pyi +0 -28
  1137. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
  1138. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/handlers.pyi +0 -91
  1139. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/headers.pyi +0 -26
  1140. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/simple_server.pyi +0 -37
  1141. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/types.pyi +0 -32
  1142. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/util.pyi +0 -24
  1143. jaclang/vendor/mypy/typeshed/stdlib/wsgiref/validate.pyi +0 -50
  1144. jaclang/vendor/mypy/typeshed/stdlib/xdrlib.pyi +0 -57
  1145. jaclang/vendor/mypy/typeshed/stdlib/xml/__init__.pyi +0 -1
  1146. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +0 -19
  1147. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/__init__.pyi +0 -69
  1148. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/domreg.pyi +0 -8
  1149. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +0 -100
  1150. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minicompat.pyi +0 -22
  1151. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minidom.pyi +0 -404
  1152. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/pulldom.pyi +0 -94
  1153. jaclang/vendor/mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +0 -108
  1154. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +0 -28
  1155. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +0 -34
  1156. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +0 -327
  1157. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
  1158. jaclang/vendor/mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +0 -1
  1159. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/__init__.pyi +0 -1
  1160. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +0 -1
  1161. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +0 -1
  1162. jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +0 -1
  1163. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/__init__.pyi +0 -25
  1164. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +0 -19
  1165. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/handler.pyi +0 -55
  1166. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/saxutils.pyi +0 -60
  1167. jaclang/vendor/mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +0 -87
  1168. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
  1169. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/client.pyi +0 -296
  1170. jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/server.pyi +0 -143
  1171. jaclang/vendor/mypy/typeshed/stdlib/xxlimited.pyi +0 -22
  1172. jaclang/vendor/mypy/typeshed/stdlib/zipapp.pyi +0 -20
  1173. jaclang/vendor/mypy/typeshed/stdlib/zipfile/__init__.pyi +0 -306
  1174. jaclang/vendor/mypy/typeshed/stdlib/zipfile/_path.pyi +0 -95
  1175. jaclang/vendor/mypy/typeshed/stdlib/zipimport.pyi +0 -32
  1176. jaclang/vendor/mypy/typeshed/stdlib/zlib.pyi +0 -56
  1177. jaclang/vendor/mypy/typeshed/stdlib/zoneinfo/__init__.pyi +0 -38
  1178. jaclang/vendor/mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +0 -218
  1179. jaclang/vendor/mypy/typestate.py +0 -323
  1180. jaclang/vendor/mypy/typetraverser.py +0 -148
  1181. jaclang/vendor/mypy/typevars.py +0 -93
  1182. jaclang/vendor/mypy/typevartuples.py +0 -32
  1183. jaclang/vendor/mypy/util.py +0 -869
  1184. jaclang/vendor/mypy/version.py +0 -1
  1185. jaclang/vendor/mypy/visitor.py +0 -621
  1186. jaclang/vendor/mypy/xml/mypy-html.css +0 -104
  1187. jaclang/vendor/mypy/xml/mypy-html.xslt +0 -81
  1188. jaclang/vendor/mypy/xml/mypy-txt.xslt +0 -100
  1189. jaclang/vendor/mypy/xml/mypy.xsd +0 -50
  1190. jaclang/vendor/mypy-1.10.0.dist-info/LICENSE +0 -229
  1191. jaclang/vendor/mypy-1.10.0.dist-info/METADATA +0 -48
  1192. jaclang/vendor/mypy-1.10.0.dist-info/RECORD +0 -1241
  1193. jaclang/vendor/mypy-1.10.0.dist-info/WHEEL +0 -6
  1194. jaclang/vendor/mypy-1.10.0.dist-info/entry_points.txt +0 -6
  1195. jaclang/vendor/mypy-1.10.0.dist-info/top_level.txt +0 -3
  1196. jaclang/vendor/mypy_extensions-1.0.0.dist-info/LICENSE +0 -27
  1197. jaclang/vendor/mypy_extensions-1.0.0.dist-info/METADATA +0 -29
  1198. jaclang/vendor/mypy_extensions-1.0.0.dist-info/RECORD +0 -6
  1199. jaclang/vendor/mypy_extensions-1.0.0.dist-info/top_level.txt +0 -1
  1200. jaclang/vendor/mypy_extensions.py +0 -213
  1201. jaclang/vendor/mypyc/README.md +0 -133
  1202. jaclang/vendor/mypyc/__init__.py +0 -0
  1203. jaclang/vendor/mypyc/__main__.py +0 -57
  1204. jaclang/vendor/mypyc/analysis/__init__.py +0 -0
  1205. jaclang/vendor/mypyc/analysis/attrdefined.py +0 -436
  1206. jaclang/vendor/mypyc/analysis/blockfreq.py +0 -32
  1207. jaclang/vendor/mypyc/analysis/dataflow.py +0 -628
  1208. jaclang/vendor/mypyc/analysis/ircheck.py +0 -433
  1209. jaclang/vendor/mypyc/analysis/selfleaks.py +0 -211
  1210. jaclang/vendor/mypyc/build.py +0 -616
  1211. jaclang/vendor/mypyc/codegen/__init__.py +0 -0
  1212. jaclang/vendor/mypyc/codegen/cstring.py +0 -54
  1213. jaclang/vendor/mypyc/codegen/emit.py +0 -1193
  1214. jaclang/vendor/mypyc/codegen/emitclass.py +0 -1060
  1215. jaclang/vendor/mypyc/codegen/emitfunc.py +0 -852
  1216. jaclang/vendor/mypyc/codegen/emitmodule.py +0 -1136
  1217. jaclang/vendor/mypyc/codegen/emitwrapper.py +0 -979
  1218. jaclang/vendor/mypyc/codegen/literals.py +0 -302
  1219. jaclang/vendor/mypyc/common.py +0 -136
  1220. jaclang/vendor/mypyc/crash.py +0 -31
  1221. jaclang/vendor/mypyc/doc/Makefile +0 -20
  1222. jaclang/vendor/mypyc/doc/bool_operations.rst +0 -27
  1223. jaclang/vendor/mypyc/doc/compilation_units.rst +0 -20
  1224. jaclang/vendor/mypyc/doc/conf.py +0 -59
  1225. jaclang/vendor/mypyc/doc/cpython-timings.md +0 -25
  1226. jaclang/vendor/mypyc/doc/dev-intro.md +0 -548
  1227. jaclang/vendor/mypyc/doc/dict_operations.rst +0 -59
  1228. jaclang/vendor/mypyc/doc/differences_from_python.rst +0 -332
  1229. jaclang/vendor/mypyc/doc/float_operations.rst +0 -50
  1230. jaclang/vendor/mypyc/doc/future.md +0 -42
  1231. jaclang/vendor/mypyc/doc/getting_started.rst +0 -240
  1232. jaclang/vendor/mypyc/doc/index.rst +0 -61
  1233. jaclang/vendor/mypyc/doc/int_operations.rst +0 -162
  1234. jaclang/vendor/mypyc/doc/introduction.rst +0 -150
  1235. jaclang/vendor/mypyc/doc/list_operations.rst +0 -65
  1236. jaclang/vendor/mypyc/doc/make.bat +0 -35
  1237. jaclang/vendor/mypyc/doc/native_classes.rst +0 -206
  1238. jaclang/vendor/mypyc/doc/native_operations.rst +0 -55
  1239. jaclang/vendor/mypyc/doc/performance_tips_and_tricks.rst +0 -244
  1240. jaclang/vendor/mypyc/doc/set_operations.rst +0 -47
  1241. jaclang/vendor/mypyc/doc/str_operations.rst +0 -35
  1242. jaclang/vendor/mypyc/doc/tuple_operations.rst +0 -33
  1243. jaclang/vendor/mypyc/doc/using_type_annotations.rst +0 -398
  1244. jaclang/vendor/mypyc/errors.py +0 -29
  1245. jaclang/vendor/mypyc/external/googletest/LICENSE +0 -28
  1246. jaclang/vendor/mypyc/external/googletest/README.md +0 -280
  1247. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-death-test.h +0 -294
  1248. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-message.h +0 -250
  1249. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h +0 -1444
  1250. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +0 -510
  1251. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-printers.h +0 -993
  1252. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-spi.h +0 -232
  1253. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-test-part.h +0 -179
  1254. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-typed-test.h +0 -263
  1255. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest.h +0 -2236
  1256. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_pred_impl.h +0 -358
  1257. jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_prod.h +0 -58
  1258. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +0 -69
  1259. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +0 -42
  1260. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest.h +0 -41
  1261. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +0 -319
  1262. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +0 -206
  1263. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-internal.h +0 -1238
  1264. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +0 -243
  1265. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +0 -5146
  1266. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +0 -286
  1267. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +0 -731
  1268. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +0 -93
  1269. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port.h +0 -2560
  1270. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-string.h +0 -167
  1271. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +0 -1020
  1272. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +0 -347
  1273. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +0 -3331
  1274. jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +0 -297
  1275. jaclang/vendor/mypyc/external/googletest/make/Makefile +0 -61
  1276. jaclang/vendor/mypyc/external/googletest/src/gtest-all.cc +0 -48
  1277. jaclang/vendor/mypyc/external/googletest/src/gtest-death-test.cc +0 -1342
  1278. jaclang/vendor/mypyc/external/googletest/src/gtest-filepath.cc +0 -387
  1279. jaclang/vendor/mypyc/external/googletest/src/gtest-internal-inl.h +0 -1183
  1280. jaclang/vendor/mypyc/external/googletest/src/gtest-port.cc +0 -1259
  1281. jaclang/vendor/mypyc/external/googletest/src/gtest-printers.cc +0 -373
  1282. jaclang/vendor/mypyc/external/googletest/src/gtest-test-part.cc +0 -110
  1283. jaclang/vendor/mypyc/external/googletest/src/gtest-typed-test.cc +0 -118
  1284. jaclang/vendor/mypyc/external/googletest/src/gtest.cc +0 -5388
  1285. jaclang/vendor/mypyc/external/googletest/src/gtest_main.cc +0 -38
  1286. jaclang/vendor/mypyc/ir/__init__.py +0 -0
  1287. jaclang/vendor/mypyc/ir/class_ir.py +0 -499
  1288. jaclang/vendor/mypyc/ir/func_ir.py +0 -370
  1289. jaclang/vendor/mypyc/ir/module_ir.py +0 -88
  1290. jaclang/vendor/mypyc/ir/ops.py +0 -1727
  1291. jaclang/vendor/mypyc/ir/pprint.py +0 -516
  1292. jaclang/vendor/mypyc/ir/rtypes.py +0 -1038
  1293. jaclang/vendor/mypyc/irbuild/__init__.py +0 -0
  1294. jaclang/vendor/mypyc/irbuild/ast_helpers.py +0 -123
  1295. jaclang/vendor/mypyc/irbuild/builder.py +0 -1394
  1296. jaclang/vendor/mypyc/irbuild/callable_class.py +0 -173
  1297. jaclang/vendor/mypyc/irbuild/classdef.py +0 -850
  1298. jaclang/vendor/mypyc/irbuild/constant_fold.py +0 -95
  1299. jaclang/vendor/mypyc/irbuild/context.py +0 -186
  1300. jaclang/vendor/mypyc/irbuild/env_class.py +0 -223
  1301. jaclang/vendor/mypyc/irbuild/expression.py +0 -1070
  1302. jaclang/vendor/mypyc/irbuild/for_helpers.py +0 -1075
  1303. jaclang/vendor/mypyc/irbuild/format_str_tokenizer.py +0 -250
  1304. jaclang/vendor/mypyc/irbuild/function.py +0 -1088
  1305. jaclang/vendor/mypyc/irbuild/generator.py +0 -346
  1306. jaclang/vendor/mypyc/irbuild/ll_builder.py +0 -2389
  1307. jaclang/vendor/mypyc/irbuild/main.py +0 -153
  1308. jaclang/vendor/mypyc/irbuild/mapper.py +0 -221
  1309. jaclang/vendor/mypyc/irbuild/match.py +0 -355
  1310. jaclang/vendor/mypyc/irbuild/nonlocalcontrol.py +0 -197
  1311. jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +0 -203
  1312. jaclang/vendor/mypyc/irbuild/prepare.py +0 -609
  1313. jaclang/vendor/mypyc/irbuild/specialize.py +0 -822
  1314. jaclang/vendor/mypyc/irbuild/statement.py +0 -1017
  1315. jaclang/vendor/mypyc/irbuild/targets.py +0 -57
  1316. jaclang/vendor/mypyc/irbuild/util.py +0 -189
  1317. jaclang/vendor/mypyc/irbuild/visitor.py +0 -401
  1318. jaclang/vendor/mypyc/irbuild/vtable.py +0 -82
  1319. jaclang/vendor/mypyc/lib-rt/CPy.h +0 -638
  1320. jaclang/vendor/mypyc/lib-rt/bytes_ops.c +0 -143
  1321. jaclang/vendor/mypyc/lib-rt/dict_ops.c +0 -446
  1322. jaclang/vendor/mypyc/lib-rt/exc_ops.c +0 -259
  1323. jaclang/vendor/mypyc/lib-rt/float_ops.c +0 -192
  1324. jaclang/vendor/mypyc/lib-rt/generic_ops.c +0 -64
  1325. jaclang/vendor/mypyc/lib-rt/getargs.c +0 -450
  1326. jaclang/vendor/mypyc/lib-rt/getargsfast.c +0 -569
  1327. jaclang/vendor/mypyc/lib-rt/init.c +0 -13
  1328. jaclang/vendor/mypyc/lib-rt/int_ops.c +0 -803
  1329. jaclang/vendor/mypyc/lib-rt/list_ops.c +0 -335
  1330. jaclang/vendor/mypyc/lib-rt/misc_ops.c +0 -942
  1331. jaclang/vendor/mypyc/lib-rt/module_shim.tmpl +0 -18
  1332. jaclang/vendor/mypyc/lib-rt/mypyc_util.h +0 -118
  1333. jaclang/vendor/mypyc/lib-rt/pythoncapi_compat.h +0 -497
  1334. jaclang/vendor/mypyc/lib-rt/pythonsupport.h +0 -533
  1335. jaclang/vendor/mypyc/lib-rt/set_ops.c +0 -17
  1336. jaclang/vendor/mypyc/lib-rt/setup.py +0 -70
  1337. jaclang/vendor/mypyc/lib-rt/str_ops.c +0 -241
  1338. jaclang/vendor/mypyc/lib-rt/test_capi.cc +0 -585
  1339. jaclang/vendor/mypyc/lib-rt/tuple_ops.c +0 -61
  1340. jaclang/vendor/mypyc/lower/__init__.py +0 -0
  1341. jaclang/vendor/mypyc/lower/int_ops.py +0 -113
  1342. jaclang/vendor/mypyc/lower/list_ops.py +0 -45
  1343. jaclang/vendor/mypyc/lower/misc_ops.py +0 -12
  1344. jaclang/vendor/mypyc/lower/registry.py +0 -26
  1345. jaclang/vendor/mypyc/namegen.py +0 -115
  1346. jaclang/vendor/mypyc/options.py +0 -32
  1347. jaclang/vendor/mypyc/primitives/__init__.py +0 -0
  1348. jaclang/vendor/mypyc/primitives/bytes_ops.py +0 -101
  1349. jaclang/vendor/mypyc/primitives/dict_ops.py +0 -325
  1350. jaclang/vendor/mypyc/primitives/exc_ops.py +0 -101
  1351. jaclang/vendor/mypyc/primitives/float_ops.py +0 -168
  1352. jaclang/vendor/mypyc/primitives/generic_ops.py +0 -384
  1353. jaclang/vendor/mypyc/primitives/int_ops.py +0 -303
  1354. jaclang/vendor/mypyc/primitives/list_ops.py +0 -310
  1355. jaclang/vendor/mypyc/primitives/misc_ops.py +0 -267
  1356. jaclang/vendor/mypyc/primitives/registry.py +0 -360
  1357. jaclang/vendor/mypyc/primitives/set_ops.py +0 -121
  1358. jaclang/vendor/mypyc/primitives/str_ops.py +0 -229
  1359. jaclang/vendor/mypyc/primitives/tuple_ops.py +0 -83
  1360. jaclang/vendor/mypyc/rt_subtype.py +0 -77
  1361. jaclang/vendor/mypyc/sametype.py +0 -83
  1362. jaclang/vendor/mypyc/subtype.py +0 -88
  1363. jaclang/vendor/mypyc/test/__init__.py +0 -0
  1364. jaclang/vendor/mypyc/test/config.py +0 -13
  1365. jaclang/vendor/mypyc/test/test_alwaysdefined.py +0 -46
  1366. jaclang/vendor/mypyc/test/test_analysis.py +0 -77
  1367. jaclang/vendor/mypyc/test/test_cheader.py +0 -53
  1368. jaclang/vendor/mypyc/test/test_commandline.py +0 -82
  1369. jaclang/vendor/mypyc/test/test_emit.py +0 -69
  1370. jaclang/vendor/mypyc/test/test_emitclass.py +0 -35
  1371. jaclang/vendor/mypyc/test/test_emitfunc.py +0 -928
  1372. jaclang/vendor/mypyc/test/test_emitwrapper.py +0 -60
  1373. jaclang/vendor/mypyc/test/test_exceptions.py +0 -56
  1374. jaclang/vendor/mypyc/test/test_external.py +0 -49
  1375. jaclang/vendor/mypyc/test/test_irbuild.py +0 -87
  1376. jaclang/vendor/mypyc/test/test_ircheck.py +0 -199
  1377. jaclang/vendor/mypyc/test/test_literals.py +0 -90
  1378. jaclang/vendor/mypyc/test/test_lowering.py +0 -56
  1379. jaclang/vendor/mypyc/test/test_namegen.py +0 -48
  1380. jaclang/vendor/mypyc/test/test_optimizations.py +0 -68
  1381. jaclang/vendor/mypyc/test/test_pprint.py +0 -42
  1382. jaclang/vendor/mypyc/test/test_rarray.py +0 -48
  1383. jaclang/vendor/mypyc/test/test_refcount.py +0 -59
  1384. jaclang/vendor/mypyc/test/test_run.py +0 -426
  1385. jaclang/vendor/mypyc/test/test_serialization.py +0 -108
  1386. jaclang/vendor/mypyc/test/test_struct.py +0 -112
  1387. jaclang/vendor/mypyc/test/test_tuplename.py +0 -33
  1388. jaclang/vendor/mypyc/test/test_typeops.py +0 -97
  1389. jaclang/vendor/mypyc/test/testutil.py +0 -283
  1390. jaclang/vendor/mypyc/test-data/alwaysdefined.test +0 -732
  1391. jaclang/vendor/mypyc/test-data/analysis.test +0 -470
  1392. jaclang/vendor/mypyc/test-data/commandline.test +0 -245
  1393. jaclang/vendor/mypyc/test-data/driver/driver.py +0 -48
  1394. jaclang/vendor/mypyc/test-data/exceptions-freq.test +0 -125
  1395. jaclang/vendor/mypyc/test-data/exceptions.test +0 -699
  1396. jaclang/vendor/mypyc/test-data/fixtures/ir.py +0 -373
  1397. jaclang/vendor/mypyc/test-data/fixtures/testutil.py +0 -103
  1398. jaclang/vendor/mypyc/test-data/fixtures/typing-full.pyi +0 -169
  1399. jaclang/vendor/mypyc/test-data/irbuild-any.test +0 -236
  1400. jaclang/vendor/mypyc/test-data/irbuild-basic.test +0 -3399
  1401. jaclang/vendor/mypyc/test-data/irbuild-bool.test +0 -424
  1402. jaclang/vendor/mypyc/test-data/irbuild-bytes.test +0 -181
  1403. jaclang/vendor/mypyc/test-data/irbuild-classes.test +0 -1302
  1404. jaclang/vendor/mypyc/test-data/irbuild-constant-fold.test +0 -480
  1405. jaclang/vendor/mypyc/test-data/irbuild-dict.test +0 -584
  1406. jaclang/vendor/mypyc/test-data/irbuild-dunders.test +0 -215
  1407. jaclang/vendor/mypyc/test-data/irbuild-float.test +0 -497
  1408. jaclang/vendor/mypyc/test-data/irbuild-generics.test +0 -150
  1409. jaclang/vendor/mypyc/test-data/irbuild-glue-methods.test +0 -437
  1410. jaclang/vendor/mypyc/test-data/irbuild-i16.test +0 -526
  1411. jaclang/vendor/mypyc/test-data/irbuild-i32.test +0 -598
  1412. jaclang/vendor/mypyc/test-data/irbuild-i64.test +0 -2144
  1413. jaclang/vendor/mypyc/test-data/irbuild-int.test +0 -194
  1414. jaclang/vendor/mypyc/test-data/irbuild-isinstance.test +0 -109
  1415. jaclang/vendor/mypyc/test-data/irbuild-lists.test +0 -513
  1416. jaclang/vendor/mypyc/test-data/irbuild-match.test +0 -1717
  1417. jaclang/vendor/mypyc/test-data/irbuild-math.test +0 -64
  1418. jaclang/vendor/mypyc/test-data/irbuild-nested.test +0 -807
  1419. jaclang/vendor/mypyc/test-data/irbuild-optional.test +0 -536
  1420. jaclang/vendor/mypyc/test-data/irbuild-set.test +0 -806
  1421. jaclang/vendor/mypyc/test-data/irbuild-singledispatch.test +0 -257
  1422. jaclang/vendor/mypyc/test-data/irbuild-statements.test +0 -1060
  1423. jaclang/vendor/mypyc/test-data/irbuild-str.test +0 -312
  1424. jaclang/vendor/mypyc/test-data/irbuild-strip-asserts.test +0 -12
  1425. jaclang/vendor/mypyc/test-data/irbuild-try.test +0 -523
  1426. jaclang/vendor/mypyc/test-data/irbuild-tuple.test +0 -386
  1427. jaclang/vendor/mypyc/test-data/irbuild-u8.test +0 -543
  1428. jaclang/vendor/mypyc/test-data/irbuild-unreachable.test +0 -241
  1429. jaclang/vendor/mypyc/test-data/irbuild-vectorcall.test +0 -153
  1430. jaclang/vendor/mypyc/test-data/lowering-int.test +0 -377
  1431. jaclang/vendor/mypyc/test-data/lowering-list.test +0 -33
  1432. jaclang/vendor/mypyc/test-data/opt-copy-propagation.test +0 -400
  1433. jaclang/vendor/mypyc/test-data/opt-flag-elimination.test +0 -296
  1434. jaclang/vendor/mypyc/test-data/refcount.test +0 -1482
  1435. jaclang/vendor/mypyc/test-data/run-async.test +0 -173
  1436. jaclang/vendor/mypyc/test-data/run-attrs.test +0 -318
  1437. jaclang/vendor/mypyc/test-data/run-bench.test +0 -196
  1438. jaclang/vendor/mypyc/test-data/run-bools.test +0 -229
  1439. jaclang/vendor/mypyc/test-data/run-bytes.test +0 -302
  1440. jaclang/vendor/mypyc/test-data/run-classes.test +0 -2505
  1441. jaclang/vendor/mypyc/test-data/run-dicts.test +0 -334
  1442. jaclang/vendor/mypyc/test-data/run-dunders.test +0 -945
  1443. jaclang/vendor/mypyc/test-data/run-exceptions.test +0 -448
  1444. jaclang/vendor/mypyc/test-data/run-floats.test +0 -516
  1445. jaclang/vendor/mypyc/test-data/run-functions.test +0 -1310
  1446. jaclang/vendor/mypyc/test-data/run-generators.test +0 -682
  1447. jaclang/vendor/mypyc/test-data/run-i16.test +0 -338
  1448. jaclang/vendor/mypyc/test-data/run-i32.test +0 -336
  1449. jaclang/vendor/mypyc/test-data/run-i64.test +0 -1519
  1450. jaclang/vendor/mypyc/test-data/run-imports.test +0 -265
  1451. jaclang/vendor/mypyc/test-data/run-integers.test +0 -540
  1452. jaclang/vendor/mypyc/test-data/run-lists.test +0 -411
  1453. jaclang/vendor/mypyc/test-data/run-loops.test +0 -485
  1454. jaclang/vendor/mypyc/test-data/run-match.test +0 -283
  1455. jaclang/vendor/mypyc/test-data/run-math.test +0 -106
  1456. jaclang/vendor/mypyc/test-data/run-misc.test +0 -1170
  1457. jaclang/vendor/mypyc/test-data/run-multimodule.test +0 -887
  1458. jaclang/vendor/mypyc/test-data/run-mypy-sim.test +0 -138
  1459. jaclang/vendor/mypyc/test-data/run-primitives.test +0 -375
  1460. jaclang/vendor/mypyc/test-data/run-python37.test +0 -159
  1461. jaclang/vendor/mypyc/test-data/run-python38.test +0 -88
  1462. jaclang/vendor/mypyc/test-data/run-sets.test +0 -150
  1463. jaclang/vendor/mypyc/test-data/run-singledispatch.test +0 -698
  1464. jaclang/vendor/mypyc/test-data/run-strings.test +0 -641
  1465. jaclang/vendor/mypyc/test-data/run-traits.test +0 -411
  1466. jaclang/vendor/mypyc/test-data/run-tuples.test +0 -258
  1467. jaclang/vendor/mypyc/test-data/run-u8.test +0 -303
  1468. jaclang/vendor/mypyc/transform/__init__.py +0 -0
  1469. jaclang/vendor/mypyc/transform/copy_propagation.py +0 -94
  1470. jaclang/vendor/mypyc/transform/exceptions.py +0 -182
  1471. jaclang/vendor/mypyc/transform/flag_elimination.py +0 -108
  1472. jaclang/vendor/mypyc/transform/ir_transform.py +0 -368
  1473. jaclang/vendor/mypyc/transform/lower.py +0 -33
  1474. jaclang/vendor/mypyc/transform/refcount.py +0 -294
  1475. jaclang/vendor/mypyc/transform/uninit.py +0 -190
  1476. jaclang/vendor/typing_extensions-4.12.2.dist-info/LICENSE +0 -279
  1477. jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA +0 -67
  1478. jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD +0 -5
  1479. jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL +0 -4
  1480. jaclang/vendor/typing_extensions.py +0 -3641
  1481. jaclang-0.7.34.dist-info/RECORD +0 -1563
  1482. /jaclang/{vendor/mypy/dmypy → compiler/larkparse}/__init__.py +0 -0
  1483. /jaclang/{tests → compiler/passes/main/tests}/fixtures/access_checker.jac +0 -0
  1484. /jaclang/langserve/{__init__.py → __init__.jac} +0 -0
  1485. /jaclang/{vendor/mypy/plugins/__init__.py → langserve/tests/fixtures/deep_check_crash.jac} +0 -0
  1486. /jaclang/{vendor/mypy/server/__init__.py → langserve/tests/server_test/code_test.py} +0 -0
  1487. /jaclang/{plugin → runtimelib}/tests/__init__.py +0 -0
  1488. /jaclang/{vendor/mypy/test → tests}/__init__.py +0 -0
  1489. /jaclang/{vendor/mypy/test/meta → tests/fixtures}/__init__.py +0 -0
  1490. /jaclang/tests/fixtures/{architype_def_bug.jac → archetype_def_bug.jac} +0 -0
  1491. /jaclang/vendor/{mypy/typeshed/stdlib/concurrent/__init__.pyi → attrs-25.3.0.dist-info/REQUESTED} +0 -0
  1492. /jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/licenses/LICENSE +0 -0
  1493. /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/__init__.pyi → cattrs-24.1.3.dist-info/REQUESTED} +0 -0
  1494. /jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/licenses/LICENSE +0 -0
  1495. /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi → lark-1.2.2.dist-info/REQUESTED} +0 -0
  1496. /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/entry_points.txt +0 -0
  1497. /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/top_level.txt +0 -0
  1498. /jaclang/vendor/{mypy/typeshed/stdlib/email/mime/__init__.pyi → lsprotocol-2023.0.1.dist-info/REQUESTED} +0 -0
  1499. /jaclang/vendor/lsprotocol-2023.0.1.dist-info/{LICENSE → licenses/LICENSE} +0 -0
  1500. /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/__init__.pyi → pluggy-1.5.0.dist-info/REQUESTED} +0 -0
  1501. /jaclang/vendor/pluggy-1.5.0.dist-info/{LICENSE → licenses/LICENSE} +0 -0
  1502. /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi → pygls-1.3.1.dist-info/REQUESTED} +0 -0
  1503. {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/entry_points.txt +0 -0
@@ -1,2079 +0,0 @@
1
- """Tests for stubs.
2
-
3
- Verify that various things in stubs are consistent with how things behave at runtime.
4
-
5
- """
6
-
7
- from __future__ import annotations
8
-
9
- import argparse
10
- import collections.abc
11
- import copy
12
- import enum
13
- import functools
14
- import importlib
15
- import importlib.machinery
16
- import inspect
17
- import os
18
- import pkgutil
19
- import re
20
- import symtable
21
- import sys
22
- import traceback
23
- import types
24
- import typing
25
- import typing_extensions
26
- import warnings
27
- from collections import defaultdict
28
- from contextlib import redirect_stderr, redirect_stdout
29
- from functools import singledispatch
30
- from pathlib import Path
31
- from typing import AbstractSet, Any, Generic, Iterator, TypeVar, Union
32
- from typing_extensions import get_origin, is_typeddict
33
-
34
- import mypy.build
35
- import mypy.modulefinder
36
- import mypy.nodes
37
- import mypy.state
38
- import mypy.types
39
- import mypy.version
40
- from mypy import nodes
41
- from mypy.config_parser import parse_config_file
42
- from mypy.evalexpr import UNKNOWN, evaluate_expression
43
- from mypy.options import Options
44
- from mypy.util import FancyFormatter, bytes_to_human_readable_repr, is_dunder, plural_s
45
-
46
-
47
- class Missing:
48
- """Marker object for things that are missing (from a stub or the runtime)."""
49
-
50
- def __repr__(self) -> str:
51
- return "MISSING"
52
-
53
-
54
- MISSING: typing_extensions.Final = Missing()
55
-
56
- T = TypeVar("T")
57
- MaybeMissing: typing_extensions.TypeAlias = Union[T, Missing]
58
-
59
-
60
- class Unrepresentable:
61
- """Marker object for unrepresentable parameter defaults."""
62
-
63
- def __repr__(self) -> str:
64
- return "<unrepresentable>"
65
-
66
-
67
- UNREPRESENTABLE: typing_extensions.Final = Unrepresentable()
68
-
69
-
70
- _formatter: typing_extensions.Final = FancyFormatter(sys.stdout, sys.stderr, False)
71
-
72
-
73
- def _style(message: str, **kwargs: Any) -> str:
74
- """Wrapper around mypy.util for fancy formatting."""
75
- kwargs.setdefault("color", "none")
76
- return _formatter.style(message, **kwargs)
77
-
78
-
79
- def _truncate(message: str, length: int) -> str:
80
- if len(message) > length:
81
- return message[: length - 3] + "..."
82
- return message
83
-
84
-
85
- class StubtestFailure(Exception):
86
- pass
87
-
88
-
89
- class Error:
90
- def __init__(
91
- self,
92
- object_path: list[str],
93
- message: str,
94
- stub_object: MaybeMissing[nodes.Node],
95
- runtime_object: MaybeMissing[Any],
96
- *,
97
- stub_desc: str | None = None,
98
- runtime_desc: str | None = None,
99
- ) -> None:
100
- """Represents an error found by stubtest.
101
-
102
- :param object_path: Location of the object with the error,
103
- e.g. ``["module", "Class", "method"]``
104
- :param message: Error message
105
- :param stub_object: The mypy node representing the stub
106
- :param runtime_object: Actual object obtained from the runtime
107
- :param stub_desc: Specialised description for the stub object, should you wish
108
- :param runtime_desc: Specialised description for the runtime object, should you wish
109
-
110
- """
111
- self.object_path = object_path
112
- self.object_desc = ".".join(object_path)
113
- self.message = message
114
- self.stub_object = stub_object
115
- self.runtime_object = runtime_object
116
- self.stub_desc = stub_desc or str(getattr(stub_object, "type", stub_object))
117
-
118
- if runtime_desc is None:
119
- runtime_sig = safe_inspect_signature(runtime_object)
120
- if runtime_sig is None:
121
- self.runtime_desc = _truncate(repr(runtime_object), 100)
122
- else:
123
- runtime_is_async = inspect.iscoroutinefunction(runtime_object)
124
- description = describe_runtime_callable(runtime_sig, is_async=runtime_is_async)
125
- self.runtime_desc = _truncate(description, 100)
126
- else:
127
- self.runtime_desc = runtime_desc
128
-
129
- def is_missing_stub(self) -> bool:
130
- """Whether or not the error is for something missing from the stub."""
131
- return isinstance(self.stub_object, Missing)
132
-
133
- def is_positional_only_related(self) -> bool:
134
- """Whether or not the error is for something being (or not being) positional-only."""
135
- # TODO: This is hacky, use error codes or something more resilient
136
- return "leading double underscore" in self.message
137
-
138
- def get_description(self, concise: bool = False) -> str:
139
- """Returns a description of the error.
140
-
141
- :param concise: Whether to return a concise, one-line description
142
-
143
- """
144
- if concise:
145
- return _style(self.object_desc, bold=True) + " " + self.message
146
-
147
- stub_line = None
148
- stub_file = None
149
- if not isinstance(self.stub_object, Missing):
150
- stub_line = self.stub_object.line
151
- stub_node = get_stub(self.object_path[0])
152
- if stub_node is not None:
153
- stub_file = stub_node.path or None
154
-
155
- stub_loc_str = ""
156
- if stub_file:
157
- stub_loc_str += f" in file {Path(stub_file)}"
158
- if stub_line:
159
- stub_loc_str += f"{':' if stub_file else ' at line '}{stub_line}"
160
-
161
- runtime_line = None
162
- runtime_file = None
163
- if not isinstance(self.runtime_object, Missing):
164
- try:
165
- runtime_line = inspect.getsourcelines(self.runtime_object)[1]
166
- except (OSError, TypeError, SyntaxError):
167
- pass
168
- try:
169
- runtime_file = inspect.getsourcefile(self.runtime_object)
170
- except TypeError:
171
- pass
172
-
173
- runtime_loc_str = ""
174
- if runtime_file:
175
- runtime_loc_str += f" in file {Path(runtime_file)}"
176
- if runtime_line:
177
- runtime_loc_str += f"{':' if runtime_file else ' at line '}{runtime_line}"
178
-
179
- output = [
180
- _style("error: ", color="red", bold=True),
181
- _style(self.object_desc, bold=True),
182
- " ",
183
- self.message,
184
- "\n",
185
- "Stub:",
186
- _style(stub_loc_str, dim=True),
187
- "\n",
188
- _style(self.stub_desc + "\n", color="blue", dim=True),
189
- "Runtime:",
190
- _style(runtime_loc_str, dim=True),
191
- "\n",
192
- _style(self.runtime_desc + "\n", color="blue", dim=True),
193
- ]
194
- return "".join(output)
195
-
196
-
197
- # ====================
198
- # Core logic
199
- # ====================
200
-
201
-
202
- def silent_import_module(module_name: str) -> types.ModuleType:
203
- with open(os.devnull, "w") as devnull:
204
- with warnings.catch_warnings(), redirect_stdout(devnull), redirect_stderr(devnull):
205
- warnings.simplefilter("ignore")
206
- runtime = importlib.import_module(module_name)
207
- # Also run the equivalent of `from module import *`
208
- # This could have the additional effect of loading not-yet-loaded submodules
209
- # mentioned in __all__
210
- __import__(module_name, fromlist=["*"])
211
- return runtime
212
-
213
-
214
- def test_module(module_name: str) -> Iterator[Error]:
215
- """Tests a given module's stub against introspecting it at runtime.
216
-
217
- Requires the stub to have been built already, accomplished by a call to ``build_stubs``.
218
-
219
- :param module_name: The module to test
220
-
221
- """
222
- stub = get_stub(module_name)
223
- if stub is None:
224
- if not is_probably_private(module_name.split(".")[-1]):
225
- runtime_desc = repr(sys.modules[module_name]) if module_name in sys.modules else "N/A"
226
- yield Error(
227
- [module_name], "failed to find stubs", MISSING, None, runtime_desc=runtime_desc
228
- )
229
- return
230
-
231
- try:
232
- runtime = silent_import_module(module_name)
233
- except KeyboardInterrupt:
234
- raise
235
- except BaseException as e:
236
- note = ""
237
- if isinstance(e, ModuleNotFoundError):
238
- note = " Maybe install the runtime package or alter PYTHONPATH?"
239
- yield Error(
240
- [module_name], f"failed to import.{note} {type(e).__name__}: {e}", stub, MISSING
241
- )
242
- return
243
-
244
- with warnings.catch_warnings():
245
- warnings.simplefilter("ignore")
246
- try:
247
- yield from verify(stub, runtime, [module_name])
248
- except Exception as e:
249
- bottom_frame = list(traceback.walk_tb(e.__traceback__))[-1][0]
250
- bottom_module = bottom_frame.f_globals.get("__name__", "")
251
- # Pass on any errors originating from stubtest or mypy
252
- # These can occur expectedly, e.g. StubtestFailure
253
- if bottom_module == "__main__" or bottom_module.split(".")[0] == "mypy":
254
- raise
255
- yield Error(
256
- [module_name],
257
- f"encountered unexpected error, {type(e).__name__}: {e}",
258
- stub,
259
- runtime,
260
- stub_desc="N/A",
261
- runtime_desc=(
262
- "This is most likely the fault of something very dynamic in your library. "
263
- "It's also possible this is a bug in stubtest.\nIf in doubt, please "
264
- "open an issue at https://github.com/python/mypy\n\n"
265
- + traceback.format_exc().strip()
266
- ),
267
- )
268
-
269
-
270
- @singledispatch
271
- def verify(
272
- stub: MaybeMissing[nodes.Node], runtime: MaybeMissing[Any], object_path: list[str]
273
- ) -> Iterator[Error]:
274
- """Entry point for comparing a stub to a runtime object.
275
-
276
- We use single dispatch based on the type of ``stub``.
277
-
278
- :param stub: The mypy node representing a part of the stub
279
- :param runtime: The runtime object corresponding to ``stub``
280
-
281
- """
282
- yield Error(object_path, "is an unknown mypy node", stub, runtime)
283
-
284
-
285
- def _verify_exported_names(
286
- object_path: list[str], stub: nodes.MypyFile, runtime_all_as_set: set[str]
287
- ) -> Iterator[Error]:
288
- # note that this includes the case the stub simply defines `__all__: list[str]`
289
- assert "__all__" in stub.names
290
- public_names_in_stub = {m for m, o in stub.names.items() if o.module_public}
291
- names_in_stub_not_runtime = sorted(public_names_in_stub - runtime_all_as_set)
292
- names_in_runtime_not_stub = sorted(runtime_all_as_set - public_names_in_stub)
293
- if not (names_in_runtime_not_stub or names_in_stub_not_runtime):
294
- return
295
- yield Error(
296
- object_path + ["__all__"],
297
- (
298
- "names exported from the stub do not correspond to the names exported at runtime. "
299
- "This is probably due to things being missing from the stub or an inaccurate `__all__` in the stub"
300
- ),
301
- # Pass in MISSING instead of the stub and runtime objects, as the line numbers aren't very
302
- # relevant here, and it makes for a prettier error message
303
- # This means this error will be ignored when using `--ignore-missing-stub`, which is
304
- # desirable in at least the `names_in_runtime_not_stub` case
305
- stub_object=MISSING,
306
- runtime_object=MISSING,
307
- stub_desc=(f"Names exported in the stub but not at runtime: {names_in_stub_not_runtime}"),
308
- runtime_desc=(
309
- f"Names exported at runtime but not in the stub: {names_in_runtime_not_stub}"
310
- ),
311
- )
312
-
313
-
314
- @functools.lru_cache
315
- def _module_symbol_table(runtime: types.ModuleType) -> symtable.SymbolTable | None:
316
- """Retrieve the symbol table for the module (or None on failure).
317
-
318
- 1) Use inspect to retrieve the source code of the module
319
- 2) Use symtable to parse the source (and use what symtable knows for its purposes)
320
- """
321
- try:
322
- source = inspect.getsource(runtime)
323
- except (OSError, TypeError, SyntaxError):
324
- return None
325
-
326
- try:
327
- return symtable.symtable(source, runtime.__name__, "exec")
328
- except SyntaxError:
329
- return None
330
-
331
-
332
- @verify.register(nodes.MypyFile)
333
- def verify_mypyfile(
334
- stub: nodes.MypyFile, runtime: MaybeMissing[types.ModuleType], object_path: list[str]
335
- ) -> Iterator[Error]:
336
- if isinstance(runtime, Missing):
337
- yield Error(object_path, "is not present at runtime", stub, runtime)
338
- return
339
- if not isinstance(runtime, types.ModuleType):
340
- yield Error(object_path, "is not a module", stub, runtime)
341
- return
342
-
343
- runtime_all_as_set: set[str] | None
344
-
345
- if hasattr(runtime, "__all__"):
346
- runtime_all_as_set = set(runtime.__all__)
347
- if "__all__" in stub.names:
348
- # Only verify the contents of the stub's __all__
349
- # if the stub actually defines __all__
350
- yield from _verify_exported_names(object_path, stub, runtime_all_as_set)
351
- else:
352
- runtime_all_as_set = None
353
-
354
- # Check things in the stub
355
- to_check = {
356
- m
357
- for m, o in stub.names.items()
358
- if not o.module_hidden and (not is_probably_private(m) or hasattr(runtime, m))
359
- }
360
-
361
- def _belongs_to_runtime(r: types.ModuleType, attr: str) -> bool:
362
- """Heuristics to determine whether a name originates from another module."""
363
- obj = getattr(r, attr)
364
- if isinstance(obj, types.ModuleType):
365
- return False
366
-
367
- symbol_table = _module_symbol_table(r)
368
- if symbol_table is not None:
369
- try:
370
- symbol = symbol_table.lookup(attr)
371
- except KeyError:
372
- pass
373
- else:
374
- if symbol.is_imported():
375
- # symtable says we got this from another module
376
- return False
377
- # But we can't just return True here, because symtable doesn't know about symbols
378
- # that come from `from module import *`
379
- if symbol.is_assigned():
380
- # symtable knows we assigned this symbol in the module
381
- return True
382
-
383
- # The __module__ attribute is unreliable for anything except functions and classes,
384
- # but it's our best guess at this point
385
- try:
386
- obj_mod = obj.__module__
387
- except Exception:
388
- pass
389
- else:
390
- if isinstance(obj_mod, str):
391
- return bool(obj_mod == r.__name__)
392
- return True
393
-
394
- runtime_public_contents = (
395
- runtime_all_as_set
396
- if runtime_all_as_set is not None
397
- else {
398
- m
399
- for m in dir(runtime)
400
- if not is_probably_private(m)
401
- # Filter out objects that originate from other modules (best effort). Note that in the
402
- # absence of __all__, we don't have a way to detect explicit / intentional re-exports
403
- # at runtime
404
- and _belongs_to_runtime(runtime, m)
405
- }
406
- )
407
- # Check all things declared in module's __all__, falling back to our best guess
408
- to_check.update(runtime_public_contents)
409
- to_check.difference_update(IGNORED_MODULE_DUNDERS)
410
-
411
- for entry in sorted(to_check):
412
- stub_entry = stub.names[entry].node if entry in stub.names else MISSING
413
- if isinstance(stub_entry, nodes.MypyFile):
414
- # Don't recursively check exported modules, since that leads to infinite recursion
415
- continue
416
- assert stub_entry is not None
417
- try:
418
- runtime_entry = getattr(runtime, entry, MISSING)
419
- except Exception:
420
- # Catch all exceptions in case the runtime raises an unexpected exception
421
- # from __getattr__ or similar.
422
- continue
423
- yield from verify(stub_entry, runtime_entry, object_path + [entry])
424
-
425
-
426
- def _verify_final(
427
- stub: nodes.TypeInfo, runtime: type[Any], object_path: list[str]
428
- ) -> Iterator[Error]:
429
- try:
430
-
431
- class SubClass(runtime): # type: ignore[misc]
432
- pass
433
-
434
- except TypeError:
435
- # Enum classes are implicitly @final
436
- if not stub.is_final and not issubclass(runtime, enum.Enum):
437
- yield Error(
438
- object_path,
439
- "cannot be subclassed at runtime, but isn't marked with @final in the stub",
440
- stub,
441
- runtime,
442
- stub_desc=repr(stub),
443
- )
444
- except Exception:
445
- # The class probably wants its subclasses to do something special.
446
- # Examples: ctypes.Array, ctypes._SimpleCData
447
- pass
448
-
449
- # Runtime class might be annotated with `@final`:
450
- try:
451
- runtime_final = getattr(runtime, "__final__", False)
452
- except Exception:
453
- runtime_final = False
454
-
455
- if runtime_final and not stub.is_final:
456
- yield Error(
457
- object_path,
458
- "has `__final__` attribute, but isn't marked with @final in the stub",
459
- stub,
460
- runtime,
461
- stub_desc=repr(stub),
462
- )
463
-
464
-
465
- def _verify_metaclass(
466
- stub: nodes.TypeInfo, runtime: type[Any], object_path: list[str], *, is_runtime_typeddict: bool
467
- ) -> Iterator[Error]:
468
- # We exclude protocols, because of how complex their implementation is in different versions of
469
- # python. Enums are also hard, as are runtime TypedDicts; ignoring.
470
- # TODO: check that metaclasses are identical?
471
- if not stub.is_protocol and not stub.is_enum and not is_runtime_typeddict:
472
- runtime_metaclass = type(runtime)
473
- if runtime_metaclass is not type and stub.metaclass_type is None:
474
- # This means that runtime has a custom metaclass, but a stub does not.
475
- yield Error(
476
- object_path,
477
- "is inconsistent, metaclass differs",
478
- stub,
479
- runtime,
480
- stub_desc="N/A",
481
- runtime_desc=f"{runtime_metaclass}",
482
- )
483
- elif (
484
- runtime_metaclass is type
485
- and stub.metaclass_type is not None
486
- # We ignore extra `ABCMeta` metaclass on stubs, this might be typing hack.
487
- # We also ignore `builtins.type` metaclass as an implementation detail in mypy.
488
- and not mypy.types.is_named_instance(
489
- stub.metaclass_type, ("abc.ABCMeta", "builtins.type")
490
- )
491
- ):
492
- # This means that our stub has a metaclass that is not present at runtime.
493
- yield Error(
494
- object_path,
495
- "metaclass mismatch",
496
- stub,
497
- runtime,
498
- stub_desc=f"{stub.metaclass_type.type.fullname}",
499
- runtime_desc="N/A",
500
- )
501
-
502
-
503
- @verify.register(nodes.TypeInfo)
504
- def verify_typeinfo(
505
- stub: nodes.TypeInfo, runtime: MaybeMissing[type[Any]], object_path: list[str]
506
- ) -> Iterator[Error]:
507
- if stub.is_type_check_only:
508
- # This type only exists in stubs, we only check that the runtime part
509
- # is missing. Other checks are not required.
510
- if not isinstance(runtime, Missing):
511
- yield Error(
512
- object_path,
513
- 'is marked as "@type_check_only", but also exists at runtime',
514
- stub,
515
- runtime,
516
- stub_desc=repr(stub),
517
- )
518
- return
519
-
520
- if isinstance(runtime, Missing):
521
- yield Error(object_path, "is not present at runtime", stub, runtime, stub_desc=repr(stub))
522
- return
523
- if not isinstance(runtime, type):
524
- yield Error(object_path, "is not a type", stub, runtime, stub_desc=repr(stub))
525
- return
526
-
527
- yield from _verify_final(stub, runtime, object_path)
528
- is_runtime_typeddict = stub.typeddict_type is not None and is_typeddict(runtime)
529
- yield from _verify_metaclass(
530
- stub, runtime, object_path, is_runtime_typeddict=is_runtime_typeddict
531
- )
532
-
533
- # Check everything already defined on the stub class itself (i.e. not inherited)
534
- #
535
- # Filter out non-identifier names, as these are (hopefully always?) whacky/fictional things
536
- # (like __mypy-replace or __mypy-post_init, etc.) that don't exist at runtime,
537
- # and exist purely for internal mypy reasons
538
- to_check = {name for name in stub.names if name.isidentifier()}
539
- # Check all public things on the runtime class
540
- to_check.update(
541
- m for m in vars(runtime) if not is_probably_private(m) and m not in IGNORABLE_CLASS_DUNDERS
542
- )
543
- # Special-case the __init__ method for Protocols and the __new__ method for TypedDicts
544
- #
545
- # TODO: On Python <3.11, __init__ methods on Protocol classes
546
- # are silently discarded and replaced.
547
- # However, this is not the case on Python 3.11+.
548
- # Ideally, we'd figure out a good way of validating Protocol __init__ methods on 3.11+.
549
- if stub.is_protocol:
550
- to_check.discard("__init__")
551
- if is_runtime_typeddict:
552
- to_check.discard("__new__")
553
-
554
- for entry in sorted(to_check):
555
- mangled_entry = entry
556
- if entry.startswith("__") and not entry.endswith("__"):
557
- mangled_entry = f"_{stub.name.lstrip('_')}{entry}"
558
- stub_to_verify = next((t.names[entry].node for t in stub.mro if entry in t.names), MISSING)
559
- assert stub_to_verify is not None
560
- try:
561
- try:
562
- runtime_attr = getattr(runtime, mangled_entry)
563
- except AttributeError:
564
- runtime_attr = inspect.getattr_static(runtime, mangled_entry, MISSING)
565
- except Exception:
566
- # Catch all exceptions in case the runtime raises an unexpected exception
567
- # from __getattr__ or similar.
568
- continue
569
- # Do not error for an object missing from the stub
570
- # If the runtime object is a types.WrapperDescriptorType object
571
- # and has a non-special dunder name.
572
- # The vast majority of these are false positives.
573
- if not (
574
- isinstance(stub_to_verify, Missing)
575
- and isinstance(runtime_attr, types.WrapperDescriptorType)
576
- and is_dunder(mangled_entry, exclude_special=True)
577
- ):
578
- yield from verify(stub_to_verify, runtime_attr, object_path + [entry])
579
-
580
-
581
- def _static_lookup_runtime(object_path: list[str]) -> MaybeMissing[Any]:
582
- static_runtime = importlib.import_module(object_path[0])
583
- for entry in object_path[1:]:
584
- try:
585
- static_runtime = inspect.getattr_static(static_runtime, entry)
586
- except AttributeError:
587
- # This can happen with mangled names, ignore for now.
588
- # TODO: pass more information about ancestors of nodes/objects to verify, so we don't
589
- # have to do this hacky lookup. Would be useful in several places.
590
- return MISSING
591
- return static_runtime
592
-
593
-
594
- def _verify_static_class_methods(
595
- stub: nodes.FuncBase, runtime: Any, static_runtime: MaybeMissing[Any], object_path: list[str]
596
- ) -> Iterator[str]:
597
- if stub.name in ("__new__", "__init_subclass__", "__class_getitem__"):
598
- # Special cased by Python, so don't bother checking
599
- return
600
- if inspect.isbuiltin(runtime):
601
- # The isinstance checks don't work reliably for builtins, e.g. datetime.datetime.now, so do
602
- # something a little hacky that seems to work well
603
- probably_class_method = isinstance(getattr(runtime, "__self__", None), type)
604
- if probably_class_method and not stub.is_class:
605
- yield "runtime is a classmethod but stub is not"
606
- if not probably_class_method and stub.is_class:
607
- yield "stub is a classmethod but runtime is not"
608
- return
609
-
610
- if static_runtime is MISSING:
611
- return
612
-
613
- if isinstance(static_runtime, classmethod) and not stub.is_class:
614
- yield "runtime is a classmethod but stub is not"
615
- if not isinstance(static_runtime, classmethod) and stub.is_class:
616
- yield "stub is a classmethod but runtime is not"
617
- if isinstance(static_runtime, staticmethod) and not stub.is_static:
618
- yield "runtime is a staticmethod but stub is not"
619
- if not isinstance(static_runtime, staticmethod) and stub.is_static:
620
- yield "stub is a staticmethod but runtime is not"
621
-
622
-
623
- def _verify_arg_name(
624
- stub_arg: nodes.Argument, runtime_arg: inspect.Parameter, function_name: str
625
- ) -> Iterator[str]:
626
- """Checks whether argument names match."""
627
- # Ignore exact names for most dunder methods
628
- if is_dunder(function_name, exclude_special=True):
629
- return
630
-
631
- def strip_prefix(s: str, prefix: str) -> str:
632
- return s[len(prefix) :] if s.startswith(prefix) else s
633
-
634
- if strip_prefix(stub_arg.variable.name, "__") == runtime_arg.name:
635
- return
636
-
637
- def names_approx_match(a: str, b: str) -> bool:
638
- a = a.strip("_")
639
- b = b.strip("_")
640
- return a.startswith(b) or b.startswith(a) or len(a) == 1 or len(b) == 1
641
-
642
- # Be more permissive about names matching for positional-only arguments
643
- if runtime_arg.kind == inspect.Parameter.POSITIONAL_ONLY and names_approx_match(
644
- stub_arg.variable.name, runtime_arg.name
645
- ):
646
- return
647
- # This comes up with namedtuples, so ignore
648
- if stub_arg.variable.name == "_self":
649
- return
650
- yield (
651
- f'stub argument "{stub_arg.variable.name}" '
652
- f'differs from runtime argument "{runtime_arg.name}"'
653
- )
654
-
655
-
656
- def _verify_arg_default_value(
657
- stub_arg: nodes.Argument, runtime_arg: inspect.Parameter
658
- ) -> Iterator[str]:
659
- """Checks whether argument default values are compatible."""
660
- if runtime_arg.default != inspect.Parameter.empty:
661
- if stub_arg.kind.is_required():
662
- yield (
663
- f'runtime argument "{runtime_arg.name}" '
664
- "has a default value but stub argument does not"
665
- )
666
- else:
667
- runtime_type = get_mypy_type_of_runtime_value(runtime_arg.default)
668
- # Fallback to the type annotation type if var type is missing. The type annotation
669
- # is an UnboundType, but I don't know enough to know what the pros and cons here are.
670
- # UnboundTypes have ugly question marks following them, so default to var type.
671
- # Note we do this same fallback when constructing signatures in from_overloadedfuncdef
672
- stub_type = stub_arg.variable.type or stub_arg.type_annotation
673
- if isinstance(stub_type, mypy.types.TypeVarType):
674
- stub_type = stub_type.upper_bound
675
- if (
676
- runtime_type is not None
677
- and stub_type is not None
678
- # Avoid false positives for marker objects
679
- and type(runtime_arg.default) is not object
680
- # And ellipsis
681
- and runtime_arg.default is not ...
682
- and not is_subtype_helper(runtime_type, stub_type)
683
- ):
684
- yield (
685
- f'runtime argument "{runtime_arg.name}" '
686
- f"has a default value of type {runtime_type}, "
687
- f"which is incompatible with stub argument type {stub_type}"
688
- )
689
- if stub_arg.initializer is not None:
690
- stub_default = evaluate_expression(stub_arg.initializer)
691
- if (
692
- stub_default is not UNKNOWN
693
- and stub_default is not ...
694
- and runtime_arg.default is not UNREPRESENTABLE
695
- and (
696
- stub_default != runtime_arg.default
697
- # We want the types to match exactly, e.g. in case the stub has
698
- # True and the runtime has 1 (or vice versa).
699
- or type(stub_default) is not type(runtime_arg.default) # noqa: E721
700
- )
701
- ):
702
- yield (
703
- f'runtime argument "{runtime_arg.name}" '
704
- f"has a default value of {runtime_arg.default!r}, "
705
- f"which is different from stub argument default {stub_default!r}"
706
- )
707
- else:
708
- if stub_arg.kind.is_optional():
709
- yield (
710
- f'stub argument "{stub_arg.variable.name}" has a default value '
711
- f"but runtime argument does not"
712
- )
713
-
714
-
715
- def maybe_strip_cls(name: str, args: list[nodes.Argument]) -> list[nodes.Argument]:
716
- if args and name in ("__init_subclass__", "__class_getitem__"):
717
- # These are implicitly classmethods. If the stub chooses not to have @classmethod, we
718
- # should remove the cls argument
719
- if args[0].variable.name == "cls":
720
- return args[1:]
721
- return args
722
-
723
-
724
- class Signature(Generic[T]):
725
- def __init__(self) -> None:
726
- self.pos: list[T] = []
727
- self.kwonly: dict[str, T] = {}
728
- self.varpos: T | None = None
729
- self.varkw: T | None = None
730
-
731
- def __str__(self) -> str:
732
- def get_name(arg: Any) -> str:
733
- if isinstance(arg, inspect.Parameter):
734
- return arg.name
735
- if isinstance(arg, nodes.Argument):
736
- return arg.variable.name
737
- raise AssertionError
738
-
739
- def get_type(arg: Any) -> str | None:
740
- if isinstance(arg, inspect.Parameter):
741
- return None
742
- if isinstance(arg, nodes.Argument):
743
- return str(arg.variable.type or arg.type_annotation)
744
- raise AssertionError
745
-
746
- def has_default(arg: Any) -> bool:
747
- if isinstance(arg, inspect.Parameter):
748
- return bool(arg.default != inspect.Parameter.empty)
749
- if isinstance(arg, nodes.Argument):
750
- return arg.kind.is_optional()
751
- raise AssertionError
752
-
753
- def get_desc(arg: Any) -> str:
754
- arg_type = get_type(arg)
755
- return (
756
- get_name(arg)
757
- + (f": {arg_type}" if arg_type else "")
758
- + (" = ..." if has_default(arg) else "")
759
- )
760
-
761
- kw_only = sorted(self.kwonly.values(), key=lambda a: (has_default(a), get_name(a)))
762
- ret = "def ("
763
- ret += ", ".join(
764
- [get_desc(arg) for arg in self.pos]
765
- + (["*" + get_name(self.varpos)] if self.varpos else (["*"] if self.kwonly else []))
766
- + [get_desc(arg) for arg in kw_only]
767
- + (["**" + get_name(self.varkw)] if self.varkw else [])
768
- )
769
- ret += ")"
770
- return ret
771
-
772
- @staticmethod
773
- def from_funcitem(stub: nodes.FuncItem) -> Signature[nodes.Argument]:
774
- stub_sig: Signature[nodes.Argument] = Signature()
775
- stub_args = maybe_strip_cls(stub.name, stub.arguments)
776
- for stub_arg in stub_args:
777
- if stub_arg.kind.is_positional():
778
- stub_sig.pos.append(stub_arg)
779
- elif stub_arg.kind.is_named():
780
- stub_sig.kwonly[stub_arg.variable.name] = stub_arg
781
- elif stub_arg.kind == nodes.ARG_STAR:
782
- stub_sig.varpos = stub_arg
783
- elif stub_arg.kind == nodes.ARG_STAR2:
784
- stub_sig.varkw = stub_arg
785
- else:
786
- raise AssertionError
787
- return stub_sig
788
-
789
- @staticmethod
790
- def from_inspect_signature(signature: inspect.Signature) -> Signature[inspect.Parameter]:
791
- runtime_sig: Signature[inspect.Parameter] = Signature()
792
- for runtime_arg in signature.parameters.values():
793
- if runtime_arg.kind in (
794
- inspect.Parameter.POSITIONAL_ONLY,
795
- inspect.Parameter.POSITIONAL_OR_KEYWORD,
796
- ):
797
- runtime_sig.pos.append(runtime_arg)
798
- elif runtime_arg.kind == inspect.Parameter.KEYWORD_ONLY:
799
- runtime_sig.kwonly[runtime_arg.name] = runtime_arg
800
- elif runtime_arg.kind == inspect.Parameter.VAR_POSITIONAL:
801
- runtime_sig.varpos = runtime_arg
802
- elif runtime_arg.kind == inspect.Parameter.VAR_KEYWORD:
803
- runtime_sig.varkw = runtime_arg
804
- else:
805
- raise AssertionError
806
- return runtime_sig
807
-
808
- @staticmethod
809
- def from_overloadedfuncdef(stub: nodes.OverloadedFuncDef) -> Signature[nodes.Argument]:
810
- """Returns a Signature from an OverloadedFuncDef.
811
-
812
- If life were simple, to verify_overloadedfuncdef, we'd just verify_funcitem for each of its
813
- items. Unfortunately, life isn't simple and overloads are pretty deceitful. So instead, we
814
- try and combine the overload's items into a single signature that is compatible with any
815
- lies it might try to tell.
816
-
817
- """
818
- # For most dunder methods, just assume all args are positional-only
819
- assume_positional_only = is_dunder(stub.name, exclude_special=True)
820
-
821
- all_args: dict[str, list[tuple[nodes.Argument, int]]] = {}
822
- for func in map(_resolve_funcitem_from_decorator, stub.items):
823
- assert func is not None
824
- args = maybe_strip_cls(stub.name, func.arguments)
825
- for index, arg in enumerate(args):
826
- # For positional-only args, we allow overloads to have different names for the same
827
- # argument. To accomplish this, we just make up a fake index-based name.
828
- name = (
829
- f"__{index}"
830
- if arg.variable.name.startswith("__")
831
- or arg.pos_only
832
- or assume_positional_only
833
- or arg.variable.name.strip("_") == "self"
834
- else arg.variable.name
835
- )
836
- all_args.setdefault(name, []).append((arg, index))
837
-
838
- def get_position(arg_name: str) -> int:
839
- # We just need this to return the positional args in the correct order.
840
- return max(index for _, index in all_args[arg_name])
841
-
842
- def get_type(arg_name: str) -> mypy.types.ProperType:
843
- with mypy.state.state.strict_optional_set(True):
844
- all_types = [
845
- arg.variable.type or arg.type_annotation for arg, _ in all_args[arg_name]
846
- ]
847
- return mypy.typeops.make_simplified_union([t for t in all_types if t])
848
-
849
- def get_kind(arg_name: str) -> nodes.ArgKind:
850
- kinds = {arg.kind for arg, _ in all_args[arg_name]}
851
- if nodes.ARG_STAR in kinds:
852
- return nodes.ARG_STAR
853
- if nodes.ARG_STAR2 in kinds:
854
- return nodes.ARG_STAR2
855
- # The logic here is based on two tenets:
856
- # 1) If an arg is ever optional (or unspecified), it is optional
857
- # 2) If an arg is ever positional, it is positional
858
- is_opt = (
859
- len(all_args[arg_name]) < len(stub.items)
860
- or nodes.ARG_OPT in kinds
861
- or nodes.ARG_NAMED_OPT in kinds
862
- )
863
- is_pos = nodes.ARG_OPT in kinds or nodes.ARG_POS in kinds
864
- if is_opt:
865
- return nodes.ARG_OPT if is_pos else nodes.ARG_NAMED_OPT
866
- return nodes.ARG_POS if is_pos else nodes.ARG_NAMED
867
-
868
- sig: Signature[nodes.Argument] = Signature()
869
- for arg_name in sorted(all_args, key=get_position):
870
- # example_arg_name gives us a real name (in case we had a fake index-based name)
871
- example_arg_name = all_args[arg_name][0][0].variable.name
872
- arg = nodes.Argument(
873
- nodes.Var(example_arg_name, get_type(arg_name)),
874
- type_annotation=None,
875
- initializer=None,
876
- kind=get_kind(arg_name),
877
- pos_only=all(arg.pos_only for arg, _ in all_args[arg_name]),
878
- )
879
- if arg.kind.is_positional():
880
- sig.pos.append(arg)
881
- elif arg.kind.is_named():
882
- sig.kwonly[arg.variable.name] = arg
883
- elif arg.kind == nodes.ARG_STAR:
884
- sig.varpos = arg
885
- elif arg.kind == nodes.ARG_STAR2:
886
- sig.varkw = arg
887
- else:
888
- raise AssertionError
889
- return sig
890
-
891
-
892
- def _verify_signature(
893
- stub: Signature[nodes.Argument], runtime: Signature[inspect.Parameter], function_name: str
894
- ) -> Iterator[str]:
895
- # Check positional arguments match up
896
- for stub_arg, runtime_arg in zip(stub.pos, runtime.pos):
897
- yield from _verify_arg_name(stub_arg, runtime_arg, function_name)
898
- yield from _verify_arg_default_value(stub_arg, runtime_arg)
899
- if (
900
- runtime_arg.kind == inspect.Parameter.POSITIONAL_ONLY
901
- and not stub_arg.pos_only
902
- and not stub_arg.variable.name.startswith("__")
903
- and stub_arg.variable.name.strip("_") != "self"
904
- and not is_dunder(function_name, exclude_special=True) # noisy for dunder methods
905
- ):
906
- yield (
907
- f'stub argument "{stub_arg.variable.name}" should be positional-only '
908
- f'(rename with a leading double underscore, i.e. "__{runtime_arg.name}")'
909
- )
910
- if (
911
- runtime_arg.kind != inspect.Parameter.POSITIONAL_ONLY
912
- and (stub_arg.pos_only or stub_arg.variable.name.startswith("__"))
913
- and stub_arg.variable.name.strip("_") != "self"
914
- and not is_dunder(function_name, exclude_special=True) # noisy for dunder methods
915
- ):
916
- yield (
917
- f'stub argument "{stub_arg.variable.name}" should be positional or keyword '
918
- "(remove leading double underscore)"
919
- )
920
-
921
- # Check unmatched positional args
922
- if len(stub.pos) > len(runtime.pos):
923
- # There are cases where the stub exhaustively lists out the extra parameters the function
924
- # would take through *args. Hence, a) if runtime accepts *args, we don't check whether the
925
- # runtime has all of the stub's parameters, b) below, we don't enforce that the stub takes
926
- # *args, since runtime logic may prevent arbitrary arguments from actually being accepted.
927
- if runtime.varpos is None:
928
- for stub_arg in stub.pos[len(runtime.pos) :]:
929
- # If the variable is in runtime.kwonly, it's just mislabelled as not a
930
- # keyword-only argument
931
- if stub_arg.variable.name not in runtime.kwonly:
932
- msg = f'runtime does not have argument "{stub_arg.variable.name}"'
933
- if runtime.varkw is not None:
934
- msg += ". Maybe you forgot to make it keyword-only in the stub?"
935
- yield msg
936
- else:
937
- yield f'stub argument "{stub_arg.variable.name}" is not keyword-only'
938
- if stub.varpos is not None:
939
- yield f'runtime does not have *args argument "{stub.varpos.variable.name}"'
940
- elif len(stub.pos) < len(runtime.pos):
941
- for runtime_arg in runtime.pos[len(stub.pos) :]:
942
- if runtime_arg.name not in stub.kwonly:
943
- if not _is_private_parameter(runtime_arg):
944
- yield f'stub does not have argument "{runtime_arg.name}"'
945
- else:
946
- yield f'runtime argument "{runtime_arg.name}" is not keyword-only'
947
-
948
- # Checks involving *args
949
- if len(stub.pos) <= len(runtime.pos) or runtime.varpos is None:
950
- if stub.varpos is None and runtime.varpos is not None:
951
- yield f'stub does not have *args argument "{runtime.varpos.name}"'
952
- if stub.varpos is not None and runtime.varpos is None:
953
- yield f'runtime does not have *args argument "{stub.varpos.variable.name}"'
954
-
955
- # Check keyword-only args
956
- for arg in sorted(set(stub.kwonly) & set(runtime.kwonly)):
957
- stub_arg, runtime_arg = stub.kwonly[arg], runtime.kwonly[arg]
958
- yield from _verify_arg_name(stub_arg, runtime_arg, function_name)
959
- yield from _verify_arg_default_value(stub_arg, runtime_arg)
960
-
961
- # Check unmatched keyword-only args
962
- if runtime.varkw is None or not set(runtime.kwonly).issubset(set(stub.kwonly)):
963
- # There are cases where the stub exhaustively lists out the extra parameters the function
964
- # would take through **kwargs. Hence, a) if runtime accepts **kwargs (and the stub hasn't
965
- # exhaustively listed out params), we don't check whether the runtime has all of the stub's
966
- # parameters, b) below, we don't enforce that the stub takes **kwargs, since runtime logic
967
- # may prevent arbitrary keyword arguments from actually being accepted.
968
- for arg in sorted(set(stub.kwonly) - set(runtime.kwonly)):
969
- if arg in {runtime_arg.name for runtime_arg in runtime.pos}:
970
- # Don't report this if we've reported it before
971
- if arg not in {runtime_arg.name for runtime_arg in runtime.pos[len(stub.pos) :]}:
972
- yield f'runtime argument "{arg}" is not keyword-only'
973
- else:
974
- yield f'runtime does not have argument "{arg}"'
975
- for arg in sorted(set(runtime.kwonly) - set(stub.kwonly)):
976
- if arg in {stub_arg.variable.name for stub_arg in stub.pos}:
977
- # Don't report this if we've reported it before
978
- if not (
979
- runtime.varpos is None
980
- and arg in {stub_arg.variable.name for stub_arg in stub.pos[len(runtime.pos) :]}
981
- ):
982
- yield f'stub argument "{arg}" is not keyword-only'
983
- else:
984
- if not _is_private_parameter(runtime.kwonly[arg]):
985
- yield f'stub does not have argument "{arg}"'
986
-
987
- # Checks involving **kwargs
988
- if stub.varkw is None and runtime.varkw is not None:
989
- # As mentioned above, don't enforce that the stub takes **kwargs.
990
- # Also check against positional parameters, to avoid a nitpicky message when an argument
991
- # isn't marked as keyword-only
992
- stub_pos_names = {stub_arg.variable.name for stub_arg in stub.pos}
993
- # Ideally we'd do a strict subset check, but in practice the errors from that aren't useful
994
- if not set(runtime.kwonly).issubset(set(stub.kwonly) | stub_pos_names):
995
- yield f'stub does not have **kwargs argument "{runtime.varkw.name}"'
996
- if stub.varkw is not None and runtime.varkw is None:
997
- yield f'runtime does not have **kwargs argument "{stub.varkw.variable.name}"'
998
-
999
-
1000
- def _is_private_parameter(arg: inspect.Parameter) -> bool:
1001
- return (
1002
- arg.name.startswith("_")
1003
- and not arg.name.startswith("__")
1004
- and arg.default is not inspect.Parameter.empty
1005
- )
1006
-
1007
-
1008
- @verify.register(nodes.FuncItem)
1009
- def verify_funcitem(
1010
- stub: nodes.FuncItem, runtime: MaybeMissing[Any], object_path: list[str]
1011
- ) -> Iterator[Error]:
1012
- if isinstance(runtime, Missing):
1013
- yield Error(object_path, "is not present at runtime", stub, runtime)
1014
- return
1015
-
1016
- if not is_probably_a_function(runtime):
1017
- yield Error(object_path, "is not a function", stub, runtime)
1018
- if not callable(runtime):
1019
- return
1020
-
1021
- # Look the object up statically, to avoid binding by the descriptor protocol
1022
- static_runtime = _static_lookup_runtime(object_path)
1023
-
1024
- if isinstance(stub, nodes.FuncDef):
1025
- for error_text in _verify_abstract_status(stub, runtime):
1026
- yield Error(object_path, error_text, stub, runtime)
1027
- for error_text in _verify_final_method(stub, runtime, static_runtime):
1028
- yield Error(object_path, error_text, stub, runtime)
1029
-
1030
- for message in _verify_static_class_methods(stub, runtime, static_runtime, object_path):
1031
- yield Error(object_path, "is inconsistent, " + message, stub, runtime)
1032
-
1033
- signature = safe_inspect_signature(runtime)
1034
- runtime_is_coroutine = inspect.iscoroutinefunction(runtime)
1035
-
1036
- if signature:
1037
- stub_sig = Signature.from_funcitem(stub)
1038
- runtime_sig = Signature.from_inspect_signature(signature)
1039
- runtime_sig_desc = describe_runtime_callable(signature, is_async=runtime_is_coroutine)
1040
- stub_desc = str(stub_sig)
1041
- else:
1042
- runtime_sig_desc, stub_desc = None, None
1043
-
1044
- # Don't raise an error if the stub is a coroutine, but the runtime isn't.
1045
- # That results in false positives.
1046
- # See https://github.com/python/typeshed/issues/7344
1047
- if runtime_is_coroutine and not stub.is_coroutine:
1048
- yield Error(
1049
- object_path,
1050
- 'is an "async def" function at runtime, but not in the stub',
1051
- stub,
1052
- runtime,
1053
- stub_desc=stub_desc,
1054
- runtime_desc=runtime_sig_desc,
1055
- )
1056
-
1057
- if not signature:
1058
- return
1059
-
1060
- for message in _verify_signature(stub_sig, runtime_sig, function_name=stub.name):
1061
- yield Error(
1062
- object_path,
1063
- "is inconsistent, " + message,
1064
- stub,
1065
- runtime,
1066
- runtime_desc=runtime_sig_desc,
1067
- )
1068
-
1069
-
1070
- @verify.register(Missing)
1071
- def verify_none(
1072
- stub: Missing, runtime: MaybeMissing[Any], object_path: list[str]
1073
- ) -> Iterator[Error]:
1074
- yield Error(object_path, "is not present in stub", stub, runtime)
1075
-
1076
-
1077
- @verify.register(nodes.Var)
1078
- def verify_var(
1079
- stub: nodes.Var, runtime: MaybeMissing[Any], object_path: list[str]
1080
- ) -> Iterator[Error]:
1081
- if isinstance(runtime, Missing):
1082
- # Don't always yield an error here, because we often can't find instance variables
1083
- if len(object_path) <= 2:
1084
- yield Error(object_path, "is not present at runtime", stub, runtime)
1085
- return
1086
-
1087
- if (
1088
- stub.is_initialized_in_class
1089
- and is_read_only_property(runtime)
1090
- and (stub.is_settable_property or not stub.is_property)
1091
- ):
1092
- yield Error(object_path, "is read-only at runtime but not in the stub", stub, runtime)
1093
-
1094
- runtime_type = get_mypy_type_of_runtime_value(runtime)
1095
- if (
1096
- runtime_type is not None
1097
- and stub.type is not None
1098
- and not is_subtype_helper(runtime_type, stub.type)
1099
- ):
1100
- should_error = True
1101
- # Avoid errors when defining enums, since runtime_type is the enum itself, but we'd
1102
- # annotate it with the type of runtime.value
1103
- if isinstance(runtime, enum.Enum):
1104
- runtime_type = get_mypy_type_of_runtime_value(runtime.value)
1105
- if runtime_type is not None and is_subtype_helper(runtime_type, stub.type):
1106
- should_error = False
1107
- # We always allow setting the stub value to ...
1108
- proper_type = mypy.types.get_proper_type(stub.type)
1109
- if (
1110
- isinstance(proper_type, mypy.types.Instance)
1111
- and proper_type.type.fullname == "builtins.ellipsis"
1112
- ):
1113
- should_error = False
1114
-
1115
- if should_error:
1116
- yield Error(
1117
- object_path, f"variable differs from runtime type {runtime_type}", stub, runtime
1118
- )
1119
-
1120
-
1121
- @verify.register(nodes.OverloadedFuncDef)
1122
- def verify_overloadedfuncdef(
1123
- stub: nodes.OverloadedFuncDef, runtime: MaybeMissing[Any], object_path: list[str]
1124
- ) -> Iterator[Error]:
1125
- # TODO: support `@type_check_only` decorator
1126
- if isinstance(runtime, Missing):
1127
- yield Error(object_path, "is not present at runtime", stub, runtime)
1128
- return
1129
-
1130
- if stub.is_property:
1131
- # Any property with a setter is represented as an OverloadedFuncDef
1132
- if is_read_only_property(runtime):
1133
- yield Error(object_path, "is read-only at runtime but not in the stub", stub, runtime)
1134
- return
1135
-
1136
- if not is_probably_a_function(runtime):
1137
- yield Error(object_path, "is not a function", stub, runtime)
1138
- if not callable(runtime):
1139
- return
1140
-
1141
- # mypy doesn't allow overloads where one overload is abstract but another isn't,
1142
- # so it should be okay to just check whether the first overload is abstract or not.
1143
- #
1144
- # TODO: Mypy *does* allow properties where e.g. the getter is abstract but the setter is not;
1145
- # and any property with a setter is represented as an OverloadedFuncDef internally;
1146
- # not sure exactly what (if anything) we should do about that.
1147
- first_part = stub.items[0]
1148
- if isinstance(first_part, nodes.Decorator) and first_part.is_overload:
1149
- for msg in _verify_abstract_status(first_part.func, runtime):
1150
- yield Error(object_path, msg, stub, runtime)
1151
-
1152
- # Look the object up statically, to avoid binding by the descriptor protocol
1153
- static_runtime = _static_lookup_runtime(object_path)
1154
-
1155
- for message in _verify_static_class_methods(stub, runtime, static_runtime, object_path):
1156
- yield Error(object_path, "is inconsistent, " + message, stub, runtime)
1157
-
1158
- # TODO: Should call _verify_final_method here,
1159
- # but overloaded final methods in stubs cause a stubtest crash: see #14950
1160
-
1161
- signature = safe_inspect_signature(runtime)
1162
- if not signature:
1163
- return
1164
-
1165
- stub_sig = Signature.from_overloadedfuncdef(stub)
1166
- runtime_sig = Signature.from_inspect_signature(signature)
1167
-
1168
- for message in _verify_signature(stub_sig, runtime_sig, function_name=stub.name):
1169
- # TODO: This is a little hacky, but the addition here is super useful
1170
- if "has a default value of type" in message:
1171
- message += (
1172
- ". This is often caused by overloads failing to account for explicitly passing "
1173
- "in the default value."
1174
- )
1175
- yield Error(
1176
- object_path,
1177
- "is inconsistent, " + message,
1178
- stub,
1179
- runtime,
1180
- stub_desc=(str(stub.type)) + f"\nInferred signature: {stub_sig}",
1181
- runtime_desc="def " + str(signature),
1182
- )
1183
-
1184
-
1185
- @verify.register(nodes.TypeVarExpr)
1186
- def verify_typevarexpr(
1187
- stub: nodes.TypeVarExpr, runtime: MaybeMissing[Any], object_path: list[str]
1188
- ) -> Iterator[Error]:
1189
- if isinstance(runtime, Missing):
1190
- # We seem to insert these typevars into NamedTuple stubs, but they
1191
- # don't exist at runtime. Just ignore!
1192
- if stub.name == "_NT":
1193
- return
1194
- yield Error(object_path, "is not present at runtime", stub, runtime)
1195
- return
1196
- if not isinstance(runtime, TypeVar):
1197
- yield Error(object_path, "is not a TypeVar", stub, runtime)
1198
- return
1199
-
1200
-
1201
- @verify.register(nodes.ParamSpecExpr)
1202
- def verify_paramspecexpr(
1203
- stub: nodes.ParamSpecExpr, runtime: MaybeMissing[Any], object_path: list[str]
1204
- ) -> Iterator[Error]:
1205
- if isinstance(runtime, Missing):
1206
- yield Error(object_path, "is not present at runtime", stub, runtime)
1207
- return
1208
- maybe_paramspec_types = (
1209
- getattr(typing, "ParamSpec", None),
1210
- getattr(typing_extensions, "ParamSpec", None),
1211
- )
1212
- paramspec_types = tuple(t for t in maybe_paramspec_types if t is not None)
1213
- if not paramspec_types or not isinstance(runtime, paramspec_types):
1214
- yield Error(object_path, "is not a ParamSpec", stub, runtime)
1215
- return
1216
-
1217
-
1218
- def _verify_readonly_property(stub: nodes.Decorator, runtime: Any) -> Iterator[str]:
1219
- assert stub.func.is_property
1220
- if isinstance(runtime, property):
1221
- yield from _verify_final_method(stub.func, runtime.fget, MISSING)
1222
- return
1223
- if inspect.isdatadescriptor(runtime):
1224
- # It's enough like a property...
1225
- return
1226
- # Sometimes attributes pretend to be properties, for instance, to express that they
1227
- # are read only. So allowlist if runtime_type matches the return type of stub.
1228
- runtime_type = get_mypy_type_of_runtime_value(runtime)
1229
- func_type = (
1230
- stub.func.type.ret_type if isinstance(stub.func.type, mypy.types.CallableType) else None
1231
- )
1232
- if (
1233
- runtime_type is not None
1234
- and func_type is not None
1235
- and is_subtype_helper(runtime_type, func_type)
1236
- ):
1237
- return
1238
- yield "is inconsistent, cannot reconcile @property on stub with runtime object"
1239
-
1240
-
1241
- def _verify_abstract_status(stub: nodes.FuncDef, runtime: Any) -> Iterator[str]:
1242
- stub_abstract = stub.abstract_status == nodes.IS_ABSTRACT
1243
- runtime_abstract = getattr(runtime, "__isabstractmethod__", False)
1244
- # The opposite can exist: some implementations omit `@abstractmethod` decorators
1245
- if runtime_abstract and not stub_abstract:
1246
- item_type = "property" if stub.is_property else "method"
1247
- yield f"is inconsistent, runtime {item_type} is abstract but stub is not"
1248
-
1249
-
1250
- def _verify_final_method(
1251
- stub: nodes.FuncDef, runtime: Any, static_runtime: MaybeMissing[Any]
1252
- ) -> Iterator[str]:
1253
- if stub.is_final:
1254
- return
1255
- if getattr(runtime, "__final__", False) or (
1256
- static_runtime is not MISSING and getattr(static_runtime, "__final__", False)
1257
- ):
1258
- yield "is decorated with @final at runtime, but not in the stub"
1259
-
1260
-
1261
- def _resolve_funcitem_from_decorator(dec: nodes.OverloadPart) -> nodes.FuncItem | None:
1262
- """Returns a FuncItem that corresponds to the output of the decorator.
1263
-
1264
- Returns None if we can't figure out what that would be. For convenience, this function also
1265
- accepts FuncItems.
1266
- """
1267
- if isinstance(dec, nodes.FuncItem):
1268
- return dec
1269
- if dec.func.is_property:
1270
- return None
1271
-
1272
- def apply_decorator_to_funcitem(
1273
- decorator: nodes.Expression, func: nodes.FuncItem
1274
- ) -> nodes.FuncItem | None:
1275
- if (
1276
- isinstance(decorator, nodes.CallExpr)
1277
- and isinstance(decorator.callee, nodes.RefExpr)
1278
- and decorator.callee.fullname in mypy.types.DEPRECATED_TYPE_NAMES
1279
- ):
1280
- return func
1281
- if not isinstance(decorator, nodes.RefExpr):
1282
- return None
1283
- if not decorator.fullname:
1284
- # Happens with namedtuple
1285
- return None
1286
- if (
1287
- decorator.fullname in ("builtins.staticmethod", "abc.abstractmethod")
1288
- or decorator.fullname in mypy.types.OVERLOAD_NAMES
1289
- or decorator.fullname in mypy.types.FINAL_DECORATOR_NAMES
1290
- ):
1291
- return func
1292
- if decorator.fullname == "builtins.classmethod":
1293
- if func.arguments[0].variable.name not in ("cls", "mcs", "metacls"):
1294
- raise StubtestFailure(
1295
- f"unexpected class argument name {func.arguments[0].variable.name!r} "
1296
- f"in {dec.fullname}"
1297
- )
1298
- # FuncItem is written so that copy.copy() actually works, even when compiled
1299
- ret = copy.copy(func)
1300
- # Remove the cls argument, since it's not present in inspect.signature of classmethods
1301
- ret.arguments = ret.arguments[1:]
1302
- return ret
1303
- # Just give up on any other decorators. After excluding properties, we don't run into
1304
- # anything else when running on typeshed's stdlib.
1305
- return None
1306
-
1307
- func: nodes.FuncItem = dec.func
1308
- for decorator in dec.original_decorators:
1309
- resulting_func = apply_decorator_to_funcitem(decorator, func)
1310
- if resulting_func is None:
1311
- return None
1312
- func = resulting_func
1313
- return func
1314
-
1315
-
1316
- @verify.register(nodes.Decorator)
1317
- def verify_decorator(
1318
- stub: nodes.Decorator, runtime: MaybeMissing[Any], object_path: list[str]
1319
- ) -> Iterator[Error]:
1320
- if stub.func.is_type_check_only:
1321
- # This function only exists in stubs, we only check that the runtime part
1322
- # is missing. Other checks are not required.
1323
- if not isinstance(runtime, Missing):
1324
- yield Error(
1325
- object_path,
1326
- 'is marked as "@type_check_only", but also exists at runtime',
1327
- stub,
1328
- runtime,
1329
- stub_desc=repr(stub),
1330
- )
1331
- return
1332
-
1333
- if isinstance(runtime, Missing):
1334
- yield Error(object_path, "is not present at runtime", stub, runtime)
1335
- return
1336
- if stub.func.is_property:
1337
- for message in _verify_readonly_property(stub, runtime):
1338
- yield Error(object_path, message, stub, runtime)
1339
- for message in _verify_abstract_status(stub.func, runtime):
1340
- yield Error(object_path, message, stub, runtime)
1341
- return
1342
-
1343
- func = _resolve_funcitem_from_decorator(stub)
1344
- if func is not None:
1345
- yield from verify(func, runtime, object_path)
1346
-
1347
-
1348
- @verify.register(nodes.TypeAlias)
1349
- def verify_typealias(
1350
- stub: nodes.TypeAlias, runtime: MaybeMissing[Any], object_path: list[str]
1351
- ) -> Iterator[Error]:
1352
- stub_target = mypy.types.get_proper_type(stub.target)
1353
- stub_desc = f"Type alias for {stub_target}"
1354
- if isinstance(runtime, Missing):
1355
- yield Error(object_path, "is not present at runtime", stub, runtime, stub_desc=stub_desc)
1356
- return
1357
- runtime_origin = get_origin(runtime) or runtime
1358
- if isinstance(stub_target, mypy.types.Instance):
1359
- if not isinstance(runtime_origin, type):
1360
- yield Error(
1361
- object_path,
1362
- "is inconsistent, runtime is not a type",
1363
- stub,
1364
- runtime,
1365
- stub_desc=stub_desc,
1366
- )
1367
- return
1368
-
1369
- stub_origin = stub_target.type
1370
- # Do our best to figure out the fullname of the runtime object...
1371
- runtime_name: object
1372
- try:
1373
- runtime_name = runtime_origin.__qualname__
1374
- except AttributeError:
1375
- runtime_name = getattr(runtime_origin, "__name__", MISSING)
1376
- if isinstance(runtime_name, str):
1377
- runtime_module: object = getattr(runtime_origin, "__module__", MISSING)
1378
- if isinstance(runtime_module, str):
1379
- if runtime_module == "collections.abc" or (
1380
- runtime_module == "re" and runtime_name in {"Match", "Pattern"}
1381
- ):
1382
- runtime_module = "typing"
1383
- runtime_fullname = f"{runtime_module}.{runtime_name}"
1384
- if re.fullmatch(rf"_?{re.escape(stub_origin.fullname)}", runtime_fullname):
1385
- # Okay, we're probably fine.
1386
- return
1387
-
1388
- # Okay, either we couldn't construct a fullname
1389
- # or the fullname of the stub didn't match the fullname of the runtime.
1390
- # Fallback to a full structural check of the runtime vis-a-vis the stub.
1391
- yield from verify(stub_origin, runtime_origin, object_path)
1392
- return
1393
- if isinstance(stub_target, mypy.types.UnionType):
1394
- # complain if runtime is not a Union or UnionType
1395
- if runtime_origin is not Union and (
1396
- not (sys.version_info >= (3, 10) and isinstance(runtime, types.UnionType))
1397
- ):
1398
- yield Error(object_path, "is not a Union", stub, runtime, stub_desc=str(stub_target))
1399
- # could check Union contents here...
1400
- return
1401
- if isinstance(stub_target, mypy.types.TupleType):
1402
- if tuple not in getattr(runtime_origin, "__mro__", ()):
1403
- yield Error(
1404
- object_path, "is not a subclass of tuple", stub, runtime, stub_desc=stub_desc
1405
- )
1406
- # could check Tuple contents here...
1407
- return
1408
- if isinstance(stub_target, mypy.types.CallableType):
1409
- if runtime_origin is not collections.abc.Callable:
1410
- yield Error(
1411
- object_path, "is not a type alias for Callable", stub, runtime, stub_desc=stub_desc
1412
- )
1413
- # could check Callable contents here...
1414
- return
1415
- if isinstance(stub_target, mypy.types.AnyType):
1416
- return
1417
- yield Error(object_path, "is not a recognised type alias", stub, runtime, stub_desc=stub_desc)
1418
-
1419
-
1420
- # ====================
1421
- # Helpers
1422
- # ====================
1423
-
1424
-
1425
- IGNORED_MODULE_DUNDERS: typing_extensions.Final = frozenset(
1426
- {
1427
- "__file__",
1428
- "__doc__",
1429
- "__name__",
1430
- "__builtins__",
1431
- "__package__",
1432
- "__cached__",
1433
- "__loader__",
1434
- "__spec__",
1435
- "__annotations__",
1436
- "__path__", # mypy adds __path__ to packages, but C packages don't have it
1437
- "__getattr__", # resulting behaviour might be typed explicitly
1438
- # Created by `warnings.warn`, does not make much sense to have in stubs:
1439
- "__warningregistry__",
1440
- # TODO: remove the following from this list
1441
- "__author__",
1442
- "__version__",
1443
- "__copyright__",
1444
- }
1445
- )
1446
-
1447
- IGNORABLE_CLASS_DUNDERS: typing_extensions.Final = frozenset(
1448
- {
1449
- # Special attributes
1450
- "__dict__",
1451
- "__annotations__",
1452
- "__text_signature__",
1453
- "__weakref__",
1454
- "__hash__",
1455
- "__getattr__", # resulting behaviour might be typed explicitly
1456
- "__setattr__", # defining this on a class can cause worse type checking
1457
- "__vectorcalloffset__", # undocumented implementation detail of the vectorcall protocol
1458
- # isinstance/issubclass hooks that type-checkers don't usually care about
1459
- "__instancecheck__",
1460
- "__subclasshook__",
1461
- "__subclasscheck__",
1462
- # python2 only magic methods:
1463
- "__cmp__",
1464
- "__nonzero__",
1465
- "__unicode__",
1466
- "__div__",
1467
- # cython methods
1468
- "__pyx_vtable__",
1469
- # Pickle methods
1470
- "__setstate__",
1471
- "__getstate__",
1472
- "__getnewargs__",
1473
- "__getinitargs__",
1474
- "__reduce_ex__",
1475
- "__reduce__",
1476
- # ctypes weirdness
1477
- "__ctype_be__",
1478
- "__ctype_le__",
1479
- "__ctypes_from_outparam__",
1480
- # mypy limitations
1481
- "__abstractmethods__", # Classes with metaclass=ABCMeta inherit this attribute
1482
- "__new_member__", # If an enum defines __new__, the method is renamed as __new_member__
1483
- "__dataclass_fields__", # Generated by dataclasses
1484
- "__dataclass_params__", # Generated by dataclasses
1485
- "__doc__", # mypy's semanal for namedtuples assumes this is str, not Optional[str]
1486
- # Added to all protocol classes on 3.12+ (or if using typing_extensions.Protocol)
1487
- "__protocol_attrs__",
1488
- "__callable_proto_members_only__",
1489
- "__non_callable_proto_members__",
1490
- # typing implementation details, consider removing some of these:
1491
- "__parameters__",
1492
- "__origin__",
1493
- "__args__",
1494
- "__orig_bases__",
1495
- "__final__", # Has a specialized check
1496
- # Consider removing __slots__?
1497
- "__slots__",
1498
- }
1499
- )
1500
-
1501
-
1502
- def is_probably_private(name: str) -> bool:
1503
- return name.startswith("_") and not is_dunder(name)
1504
-
1505
-
1506
- def is_probably_a_function(runtime: Any) -> bool:
1507
- return (
1508
- isinstance(runtime, (types.FunctionType, types.BuiltinFunctionType))
1509
- or isinstance(runtime, (types.MethodType, types.BuiltinMethodType))
1510
- or (inspect.ismethoddescriptor(runtime) and callable(runtime))
1511
- )
1512
-
1513
-
1514
- def is_read_only_property(runtime: object) -> bool:
1515
- return isinstance(runtime, property) and runtime.fset is None
1516
-
1517
-
1518
- def safe_inspect_signature(runtime: Any) -> inspect.Signature | None:
1519
- try:
1520
- try:
1521
- return inspect.signature(runtime)
1522
- except ValueError:
1523
- if (
1524
- hasattr(runtime, "__text_signature__")
1525
- and "<unrepresentable>" in runtime.__text_signature__
1526
- ):
1527
- # Try to fix up the signature. Workaround for
1528
- # https://github.com/python/cpython/issues/87233
1529
- sig = runtime.__text_signature__.replace("<unrepresentable>", "...")
1530
- sig = inspect._signature_fromstr(inspect.Signature, runtime, sig) # type: ignore[attr-defined]
1531
- assert isinstance(sig, inspect.Signature)
1532
- new_params = [
1533
- (
1534
- parameter.replace(default=UNREPRESENTABLE)
1535
- if parameter.default is ...
1536
- else parameter
1537
- )
1538
- for parameter in sig.parameters.values()
1539
- ]
1540
- return sig.replace(parameters=new_params)
1541
- else:
1542
- raise
1543
- except Exception:
1544
- # inspect.signature throws ValueError all the time
1545
- # catch RuntimeError because of https://bugs.python.org/issue39504
1546
- # catch TypeError because of https://github.com/python/typeshed/pull/5762
1547
- # catch AttributeError because of inspect.signature(_curses.window.border)
1548
- return None
1549
-
1550
-
1551
- def describe_runtime_callable(signature: inspect.Signature, *, is_async: bool) -> str:
1552
- return f'{"async " if is_async else ""}def {signature}'
1553
-
1554
-
1555
- def is_subtype_helper(left: mypy.types.Type, right: mypy.types.Type) -> bool:
1556
- """Checks whether ``left`` is a subtype of ``right``."""
1557
- left = mypy.types.get_proper_type(left)
1558
- right = mypy.types.get_proper_type(right)
1559
- if (
1560
- isinstance(left, mypy.types.LiteralType)
1561
- and isinstance(left.value, int)
1562
- and left.value in (0, 1)
1563
- and mypy.types.is_named_instance(right, "builtins.bool")
1564
- ):
1565
- # Pretend Literal[0, 1] is a subtype of bool to avoid unhelpful errors.
1566
- return True
1567
-
1568
- if isinstance(right, mypy.types.TypedDictType) and mypy.types.is_named_instance(
1569
- left, "builtins.dict"
1570
- ):
1571
- # Special case checks against TypedDicts
1572
- return True
1573
-
1574
- with mypy.state.state.strict_optional_set(True):
1575
- return mypy.subtypes.is_subtype(left, right)
1576
-
1577
-
1578
- def get_mypy_type_of_runtime_value(runtime: Any) -> mypy.types.Type | None:
1579
- """Returns a mypy type object representing the type of ``runtime``.
1580
-
1581
- Returns None if we can't find something that works.
1582
-
1583
- """
1584
- if runtime is None:
1585
- return mypy.types.NoneType()
1586
- if isinstance(runtime, property):
1587
- # Give up on properties to avoid issues with things that are typed as attributes.
1588
- return None
1589
-
1590
- def anytype() -> mypy.types.AnyType:
1591
- return mypy.types.AnyType(mypy.types.TypeOfAny.unannotated)
1592
-
1593
- if isinstance(
1594
- runtime,
1595
- (types.FunctionType, types.BuiltinFunctionType, types.MethodType, types.BuiltinMethodType),
1596
- ):
1597
- builtins = get_stub("builtins")
1598
- assert builtins is not None
1599
- type_info = builtins.names["function"].node
1600
- assert isinstance(type_info, nodes.TypeInfo)
1601
- fallback = mypy.types.Instance(type_info, [anytype()])
1602
- signature = safe_inspect_signature(runtime)
1603
- if signature:
1604
- arg_types = []
1605
- arg_kinds = []
1606
- arg_names = []
1607
- for arg in signature.parameters.values():
1608
- arg_types.append(anytype())
1609
- arg_names.append(
1610
- None if arg.kind == inspect.Parameter.POSITIONAL_ONLY else arg.name
1611
- )
1612
- has_default = arg.default == inspect.Parameter.empty
1613
- if arg.kind == inspect.Parameter.POSITIONAL_ONLY:
1614
- arg_kinds.append(nodes.ARG_POS if has_default else nodes.ARG_OPT)
1615
- elif arg.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD:
1616
- arg_kinds.append(nodes.ARG_POS if has_default else nodes.ARG_OPT)
1617
- elif arg.kind == inspect.Parameter.KEYWORD_ONLY:
1618
- arg_kinds.append(nodes.ARG_NAMED if has_default else nodes.ARG_NAMED_OPT)
1619
- elif arg.kind == inspect.Parameter.VAR_POSITIONAL:
1620
- arg_kinds.append(nodes.ARG_STAR)
1621
- elif arg.kind == inspect.Parameter.VAR_KEYWORD:
1622
- arg_kinds.append(nodes.ARG_STAR2)
1623
- else:
1624
- raise AssertionError
1625
- else:
1626
- arg_types = [anytype(), anytype()]
1627
- arg_kinds = [nodes.ARG_STAR, nodes.ARG_STAR2]
1628
- arg_names = [None, None]
1629
-
1630
- return mypy.types.CallableType(
1631
- arg_types,
1632
- arg_kinds,
1633
- arg_names,
1634
- ret_type=anytype(),
1635
- fallback=fallback,
1636
- is_ellipsis_args=True,
1637
- )
1638
-
1639
- # Try and look up a stub for the runtime object
1640
- stub = get_stub(type(runtime).__module__)
1641
- if stub is None:
1642
- return None
1643
- type_name = type(runtime).__name__
1644
- if type_name not in stub.names:
1645
- return None
1646
- type_info = stub.names[type_name].node
1647
- if isinstance(type_info, nodes.Var):
1648
- return type_info.type
1649
- if not isinstance(type_info, nodes.TypeInfo):
1650
- return None
1651
-
1652
- if isinstance(runtime, tuple):
1653
- # Special case tuples so we construct a valid mypy.types.TupleType
1654
- optional_items = [get_mypy_type_of_runtime_value(v) for v in runtime]
1655
- items = [(i if i is not None else anytype()) for i in optional_items]
1656
- fallback = mypy.types.Instance(type_info, [anytype()])
1657
- return mypy.types.TupleType(items, fallback)
1658
-
1659
- fallback = mypy.types.Instance(type_info, [anytype() for _ in type_info.type_vars])
1660
-
1661
- value: bool | int | str
1662
- if isinstance(runtime, enum.Enum) and isinstance(runtime.name, str):
1663
- value = runtime.name
1664
- elif isinstance(runtime, bytes):
1665
- value = bytes_to_human_readable_repr(runtime)
1666
- elif isinstance(runtime, (bool, int, str)):
1667
- value = runtime
1668
- else:
1669
- return fallback
1670
-
1671
- return mypy.types.LiteralType(value=value, fallback=fallback)
1672
-
1673
-
1674
- # ====================
1675
- # Build and entrypoint
1676
- # ====================
1677
-
1678
-
1679
- _all_stubs: dict[str, nodes.MypyFile] = {}
1680
-
1681
-
1682
- def build_stubs(modules: list[str], options: Options, find_submodules: bool = False) -> list[str]:
1683
- """Uses mypy to construct stub objects for the given modules.
1684
-
1685
- This sets global state that ``get_stub`` can access.
1686
-
1687
- Returns all modules we might want to check. If ``find_submodules`` is False, this is equal
1688
- to ``modules``.
1689
-
1690
- :param modules: List of modules to build stubs for.
1691
- :param options: Mypy options for finding and building stubs.
1692
- :param find_submodules: Whether to attempt to find submodules of the given modules as well.
1693
-
1694
- """
1695
- data_dir = mypy.build.default_data_dir()
1696
- search_path = mypy.modulefinder.compute_search_paths([], options, data_dir)
1697
- find_module_cache = mypy.modulefinder.FindModuleCache(
1698
- search_path, fscache=None, options=options
1699
- )
1700
-
1701
- all_modules = []
1702
- sources = []
1703
- for module in modules:
1704
- all_modules.append(module)
1705
- if not find_submodules:
1706
- module_path = find_module_cache.find_module(module)
1707
- if not isinstance(module_path, str):
1708
- # test_module will yield an error later when it can't find stubs
1709
- continue
1710
- sources.append(mypy.modulefinder.BuildSource(module_path, module, None))
1711
- else:
1712
- found_sources = find_module_cache.find_modules_recursive(module)
1713
- sources.extend(found_sources)
1714
- # find submodules via mypy
1715
- all_modules.extend(s.module for s in found_sources if s.module not in all_modules)
1716
- # find submodules via pkgutil
1717
- try:
1718
- runtime = silent_import_module(module)
1719
- all_modules.extend(
1720
- m.name
1721
- for m in pkgutil.walk_packages(runtime.__path__, runtime.__name__ + ".")
1722
- if m.name not in all_modules
1723
- )
1724
- except KeyboardInterrupt:
1725
- raise
1726
- except BaseException:
1727
- pass
1728
-
1729
- if sources:
1730
- try:
1731
- res = mypy.build.build(sources=sources, options=options)
1732
- except mypy.errors.CompileError as e:
1733
- raise StubtestFailure(f"failed mypy compile:\n{e}") from e
1734
- if res.errors:
1735
- raise StubtestFailure("mypy build errors:\n" + "\n".join(res.errors))
1736
-
1737
- global _all_stubs
1738
- _all_stubs = res.files
1739
-
1740
- return all_modules
1741
-
1742
-
1743
- def get_stub(module: str) -> nodes.MypyFile | None:
1744
- """Returns a stub object for the given module, if we've built one."""
1745
- return _all_stubs.get(module)
1746
-
1747
-
1748
- def get_typeshed_stdlib_modules(
1749
- custom_typeshed_dir: str | None, version_info: tuple[int, int] | None = None
1750
- ) -> set[str]:
1751
- """Returns a list of stdlib modules in typeshed (for current Python version)."""
1752
- stdlib_py_versions = mypy.modulefinder.load_stdlib_py_versions(custom_typeshed_dir)
1753
- if version_info is None:
1754
- version_info = sys.version_info[0:2]
1755
-
1756
- def exists_in_version(module: str) -> bool:
1757
- assert version_info is not None
1758
- parts = module.split(".")
1759
- for i in range(len(parts), 0, -1):
1760
- current_module = ".".join(parts[:i])
1761
- if current_module in stdlib_py_versions:
1762
- minver, maxver = stdlib_py_versions[current_module]
1763
- return version_info >= minver and (maxver is None or version_info <= maxver)
1764
- return False
1765
-
1766
- if custom_typeshed_dir:
1767
- typeshed_dir = Path(custom_typeshed_dir)
1768
- else:
1769
- typeshed_dir = Path(mypy.build.default_data_dir()) / "typeshed"
1770
- stdlib_dir = typeshed_dir / "stdlib"
1771
-
1772
- modules: set[str] = set()
1773
- for path in stdlib_dir.rglob("*.pyi"):
1774
- if path.stem == "__init__":
1775
- path = path.parent
1776
- module = ".".join(path.relative_to(stdlib_dir).parts[:-1] + (path.stem,))
1777
- if exists_in_version(module):
1778
- modules.add(module)
1779
- return modules
1780
-
1781
-
1782
- def get_importable_stdlib_modules() -> set[str]:
1783
- """Return all importable stdlib modules at runtime."""
1784
- all_stdlib_modules: AbstractSet[str]
1785
- if sys.version_info >= (3, 10):
1786
- all_stdlib_modules = sys.stdlib_module_names
1787
- else:
1788
- all_stdlib_modules = set(sys.builtin_module_names)
1789
- modules_by_finder: defaultdict[importlib.machinery.FileFinder, set[str]] = defaultdict(set)
1790
- for m in pkgutil.iter_modules():
1791
- if isinstance(m.module_finder, importlib.machinery.FileFinder):
1792
- modules_by_finder[m.module_finder].add(m.name)
1793
- for finder, module_group in modules_by_finder.items():
1794
- if (
1795
- "site-packages" not in Path(finder.path).parts
1796
- # if "_queue" is present, it's most likely the module finder
1797
- # for stdlib extension modules;
1798
- # if "queue" is present, it's most likely the module finder
1799
- # for pure-Python stdlib modules.
1800
- # In either case, we'll want to add all the modules that the finder has to offer us.
1801
- # This is a bit hacky, but seems to work well in a cross-platform way.
1802
- and {"_queue", "queue"} & module_group
1803
- ):
1804
- all_stdlib_modules.update(module_group)
1805
-
1806
- importable_stdlib_modules: set[str] = set()
1807
- for module_name in all_stdlib_modules:
1808
- if module_name in ANNOYING_STDLIB_MODULES:
1809
- continue
1810
-
1811
- try:
1812
- runtime = silent_import_module(module_name)
1813
- except ImportError:
1814
- continue
1815
- else:
1816
- importable_stdlib_modules.add(module_name)
1817
-
1818
- try:
1819
- # some stdlib modules (e.g. `nt`) don't have __path__ set...
1820
- runtime_path = runtime.__path__
1821
- runtime_name = runtime.__name__
1822
- except AttributeError:
1823
- continue
1824
-
1825
- for submodule in pkgutil.walk_packages(runtime_path, runtime_name + "."):
1826
- submodule_name = submodule.name
1827
-
1828
- # There are many annoying *.__main__ stdlib modules,
1829
- # and including stubs for them isn't really that useful anyway:
1830
- # tkinter.__main__ opens a tkinter windows; unittest.__main__ raises SystemExit; etc.
1831
- #
1832
- # The idlelib.* submodules are similarly annoying in opening random tkinter windows,
1833
- # and we're unlikely to ever add stubs for idlelib in typeshed
1834
- # (see discussion in https://github.com/python/typeshed/pull/9193)
1835
- #
1836
- # test.* modules do weird things like raising exceptions in __del__ methods,
1837
- # leading to unraisable exceptions being logged to the terminal
1838
- # as a warning at the end of the stubtest run
1839
- if submodule_name.endswith(".__main__") or submodule_name.startswith(
1840
- ("idlelib.", "test.")
1841
- ):
1842
- continue
1843
-
1844
- try:
1845
- silent_import_module(submodule_name)
1846
- except KeyboardInterrupt:
1847
- raise
1848
- # importing multiprocessing.popen_forkserver on Windows raises AttributeError...
1849
- # some submodules also appear to raise SystemExit as well on some Python versions
1850
- # (not sure exactly which)
1851
- except BaseException:
1852
- continue
1853
- else:
1854
- importable_stdlib_modules.add(submodule_name)
1855
-
1856
- return importable_stdlib_modules
1857
-
1858
-
1859
- def get_allowlist_entries(allowlist_file: str) -> Iterator[str]:
1860
- def strip_comments(s: str) -> str:
1861
- try:
1862
- return s[: s.index("#")].strip()
1863
- except ValueError:
1864
- return s.strip()
1865
-
1866
- with open(allowlist_file) as f:
1867
- for line in f:
1868
- entry = strip_comments(line)
1869
- if entry:
1870
- yield entry
1871
-
1872
-
1873
- class _Arguments:
1874
- modules: list[str]
1875
- concise: bool
1876
- ignore_missing_stub: bool
1877
- ignore_positional_only: bool
1878
- allowlist: list[str]
1879
- generate_allowlist: bool
1880
- ignore_unused_allowlist: bool
1881
- mypy_config_file: str | None
1882
- custom_typeshed_dir: str | None
1883
- check_typeshed: bool
1884
- version: str
1885
-
1886
-
1887
- # typeshed added a stub for __main__, but that causes stubtest to check itself
1888
- ANNOYING_STDLIB_MODULES: typing_extensions.Final = frozenset({"antigravity", "this", "__main__"})
1889
-
1890
-
1891
- def test_stubs(args: _Arguments, use_builtins_fixtures: bool = False) -> int:
1892
- """This is stubtest! It's time to test the stubs!"""
1893
- # Load the allowlist. This is a series of strings corresponding to Error.object_desc
1894
- # Values in the dict will store whether we used the allowlist entry or not.
1895
- allowlist = {
1896
- entry: False
1897
- for allowlist_file in args.allowlist
1898
- for entry in get_allowlist_entries(allowlist_file)
1899
- }
1900
- allowlist_regexes = {entry: re.compile(entry) for entry in allowlist}
1901
-
1902
- # If we need to generate an allowlist, we store Error.object_desc for each error here.
1903
- generated_allowlist = set()
1904
-
1905
- modules = args.modules
1906
- if args.check_typeshed:
1907
- if args.modules:
1908
- print(
1909
- _style("error:", color="red", bold=True),
1910
- "cannot pass both --check-typeshed and a list of modules",
1911
- )
1912
- return 1
1913
- typeshed_modules = get_typeshed_stdlib_modules(args.custom_typeshed_dir)
1914
- runtime_modules = get_importable_stdlib_modules()
1915
- modules = sorted((typeshed_modules | runtime_modules) - ANNOYING_STDLIB_MODULES)
1916
-
1917
- if not modules:
1918
- print(_style("error:", color="red", bold=True), "no modules to check")
1919
- return 1
1920
-
1921
- options = Options()
1922
- options.incremental = False
1923
- options.custom_typeshed_dir = args.custom_typeshed_dir
1924
- if options.custom_typeshed_dir:
1925
- options.abs_custom_typeshed_dir = os.path.abspath(options.custom_typeshed_dir)
1926
- options.config_file = args.mypy_config_file
1927
- options.use_builtins_fixtures = use_builtins_fixtures
1928
-
1929
- if options.config_file:
1930
-
1931
- def set_strict_flags() -> None: # not needed yet
1932
- return
1933
-
1934
- parse_config_file(options, set_strict_flags, options.config_file, sys.stdout, sys.stderr)
1935
-
1936
- try:
1937
- modules = build_stubs(modules, options, find_submodules=not args.check_typeshed)
1938
- except StubtestFailure as stubtest_failure:
1939
- print(
1940
- _style("error:", color="red", bold=True),
1941
- f"not checking stubs due to {stubtest_failure}",
1942
- )
1943
- return 1
1944
-
1945
- exit_code = 0
1946
- error_count = 0
1947
- for module in modules:
1948
- for error in test_module(module):
1949
- # Filter errors
1950
- if args.ignore_missing_stub and error.is_missing_stub():
1951
- continue
1952
- if args.ignore_positional_only and error.is_positional_only_related():
1953
- continue
1954
- if error.object_desc in allowlist:
1955
- allowlist[error.object_desc] = True
1956
- continue
1957
- is_allowlisted = False
1958
- for w in allowlist:
1959
- if allowlist_regexes[w].fullmatch(error.object_desc):
1960
- allowlist[w] = True
1961
- is_allowlisted = True
1962
- break
1963
- if is_allowlisted:
1964
- continue
1965
-
1966
- # We have errors, so change exit code, and output whatever necessary
1967
- exit_code = 1
1968
- if args.generate_allowlist:
1969
- generated_allowlist.add(error.object_desc)
1970
- continue
1971
- print(error.get_description(concise=args.concise))
1972
- error_count += 1
1973
-
1974
- # Print unused allowlist entries
1975
- if not args.ignore_unused_allowlist:
1976
- for w in allowlist:
1977
- # Don't consider an entry unused if it regex-matches the empty string
1978
- # This lets us allowlist errors that don't manifest at all on some systems
1979
- if not allowlist[w] and not allowlist_regexes[w].fullmatch(""):
1980
- exit_code = 1
1981
- error_count += 1
1982
- print(f"note: unused allowlist entry {w}")
1983
-
1984
- # Print the generated allowlist
1985
- if args.generate_allowlist:
1986
- for e in sorted(generated_allowlist):
1987
- print(e)
1988
- exit_code = 0
1989
- elif not args.concise:
1990
- if error_count:
1991
- print(
1992
- _style(
1993
- f"Found {error_count} error{plural_s(error_count)}"
1994
- f" (checked {len(modules)} module{plural_s(modules)})",
1995
- color="red",
1996
- bold=True,
1997
- )
1998
- )
1999
- else:
2000
- print(
2001
- _style(
2002
- f"Success: no issues found in {len(modules)} module{plural_s(modules)}",
2003
- color="green",
2004
- bold=True,
2005
- )
2006
- )
2007
-
2008
- return exit_code
2009
-
2010
-
2011
- def parse_options(args: list[str]) -> _Arguments:
2012
- parser = argparse.ArgumentParser(
2013
- description="Compares stubs to objects introspected from the runtime."
2014
- )
2015
- parser.add_argument("modules", nargs="*", help="Modules to test")
2016
- parser.add_argument(
2017
- "--concise",
2018
- action="store_true",
2019
- help="Makes stubtest's output more concise, one line per error",
2020
- )
2021
- parser.add_argument(
2022
- "--ignore-missing-stub",
2023
- action="store_true",
2024
- help="Ignore errors for stub missing things that are present at runtime",
2025
- )
2026
- parser.add_argument(
2027
- "--ignore-positional-only",
2028
- action="store_true",
2029
- help="Ignore errors for whether an argument should or shouldn't be positional-only",
2030
- )
2031
- parser.add_argument(
2032
- "--allowlist",
2033
- "--whitelist",
2034
- action="append",
2035
- metavar="FILE",
2036
- default=[],
2037
- help=(
2038
- "Use file as an allowlist. Can be passed multiple times to combine multiple "
2039
- "allowlists. Allowlists can be created with --generate-allowlist. Allowlists "
2040
- "support regular expressions."
2041
- ),
2042
- )
2043
- parser.add_argument(
2044
- "--generate-allowlist",
2045
- "--generate-whitelist",
2046
- action="store_true",
2047
- help="Print an allowlist (to stdout) to be used with --allowlist",
2048
- )
2049
- parser.add_argument(
2050
- "--ignore-unused-allowlist",
2051
- "--ignore-unused-whitelist",
2052
- action="store_true",
2053
- help="Ignore unused allowlist entries",
2054
- )
2055
- parser.add_argument(
2056
- "--mypy-config-file",
2057
- metavar="FILE",
2058
- help=("Use specified mypy config file to determine mypy plugins and mypy path"),
2059
- )
2060
- parser.add_argument(
2061
- "--custom-typeshed-dir", metavar="DIR", help="Use the custom typeshed in DIR"
2062
- )
2063
- parser.add_argument(
2064
- "--check-typeshed", action="store_true", help="Check all stdlib modules in typeshed"
2065
- )
2066
- parser.add_argument(
2067
- "--version", action="version", version="%(prog)s " + mypy.version.__version__
2068
- )
2069
-
2070
- return parser.parse_args(args, namespace=_Arguments())
2071
-
2072
-
2073
- def main() -> int:
2074
- mypy.util.check_python_version("stubtest")
2075
- return test_stubs(parse_options(sys.argv[1:]))
2076
-
2077
-
2078
- if __name__ == "__main__":
2079
- sys.exit(main())