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.
- jaclang/__init__.py +7 -414
- jaclang/cli/cli.md +5 -5
- jaclang/cli/cli.py +316 -217
- jaclang/cli/cmdreg.py +188 -31
- jaclang/compiler/__init__.py +10 -15
- jaclang/compiler/{codeloc.py → codeinfo.py} +11 -30
- jaclang/compiler/constant.py +10 -33
- jaclang/compiler/jac.lark +65 -106
- jaclang/compiler/larkparse/jac_parser.py +3444 -0
- jaclang/compiler/parser.py +1137 -1517
- jaclang/compiler/passes/__init__.py +2 -2
- jaclang/compiler/passes/main/__init__.py +33 -14
- jaclang/compiler/passes/main/annex_pass.py +85 -0
- jaclang/compiler/passes/main/cfg_build_pass.py +275 -0
- jaclang/compiler/passes/main/def_impl_match_pass.py +159 -114
- jaclang/compiler/passes/main/def_use_pass.py +66 -274
- jaclang/compiler/passes/main/import_pass.py +178 -363
- jaclang/compiler/passes/main/inheritance_pass.py +109 -107
- jaclang/compiler/passes/main/pyast_gen_pass.py +1242 -1735
- jaclang/compiler/passes/main/pyast_load_pass.py +579 -819
- jaclang/compiler/passes/main/pybc_gen_pass.py +38 -35
- jaclang/compiler/passes/main/pyjac_ast_link_pass.py +50 -163
- jaclang/compiler/passes/main/sym_tab_build_pass.py +114 -1203
- jaclang/compiler/passes/main/sym_tab_link_pass.py +141 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/access_modifier.jac +10 -9
- jaclang/compiler/passes/main/tests/fixtures/atest.impl.jac +3 -0
- jaclang/compiler/passes/main/tests/fixtures/atest.jac +11 -0
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl/getme.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.jac +3 -3
- jaclang/compiler/passes/main/tests/fixtures/autoimpl.something.else.impl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/base.impl.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/base.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/base2.impl.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/base2.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/blip.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/cfg_ability_test.jac +23 -0
- jaclang/compiler/passes/main/tests/fixtures/cfg_gen.jac +19 -0
- jaclang/compiler/passes/main/tests/fixtures/circular_import.jac +7 -0
- jaclang/compiler/passes/main/tests/fixtures/data_spatial_types.jac +12 -12
- jaclang/compiler/passes/main/tests/fixtures/decls.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/defn_decl_mismatch.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/defs_and_uses.jac +6 -6
- jaclang/compiler/passes/main/tests/fixtures/enumerations.jac +13 -0
- jaclang/compiler/passes/main/tests/fixtures/fstrings.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/func.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/func2.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/game1.jac +4 -4
- jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac +2 -2
- jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac +0 -8
- jaclang/compiler/passes/main/tests/fixtures/impl_grab.impl.jac +5 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/impl_grab.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/main_err.impl.jac +6 -0
- jaclang/compiler/passes/main/tests/fixtures/main_err.jac +6 -0
- jaclang/compiler/passes/main/tests/fixtures/mod_type_assign.jac +1 -1
- jaclang/compiler/passes/main/tests/fixtures/mtest.impl.jac +6 -0
- jaclang/{tests → compiler/passes/main/tests}/fixtures/mtest.jac +1 -1
- jaclang/{tests → compiler/passes/main/tests}/fixtures/nested_impls.jac +14 -15
- jaclang/compiler/passes/main/tests/fixtures/py_imp_test.jac +7 -7
- jaclang/compiler/passes/main/tests/fixtures/second_err.jac +4 -0
- jaclang/compiler/passes/main/tests/fixtures/str2doc.py +3 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/__init__.py +5 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/actions.jac +19 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/main.jac +7 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/no_dupls.jac +35 -0
- jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/one.jac +8 -0
- jaclang/compiler/passes/main/tests/fixtures/type_info.jac +4 -4
- jaclang/compiler/passes/main/tests/test_cfg_build_pass.py +101 -0
- jaclang/compiler/passes/main/tests/test_decl_impl_match_pass.py +157 -0
- jaclang/compiler/passes/main/tests/test_def_use_pass.py +4 -6
- jaclang/compiler/passes/main/tests/test_import_pass.py +59 -46
- jaclang/compiler/passes/main/tests/test_pyast_build_pass.py +15 -0
- jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py +25 -34
- jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py +3 -3
- jaclang/compiler/passes/main/tests/test_sub_node_pass.py +8 -7
- jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py +4 -4
- jaclang/compiler/passes/main/tests/test_sym_tab_link_pass.py +62 -0
- jaclang/compiler/passes/tool/__init__.py +2 -0
- jaclang/compiler/passes/tool/doc_ir.py +179 -0
- jaclang/compiler/passes/tool/doc_ir_gen_pass.py +1287 -0
- jaclang/compiler/passes/tool/fuse_comments_pass.py +90 -70
- jaclang/compiler/passes/tool/jac_formatter_pass.py +122 -2554
- jaclang/compiler/passes/tool/tests/fixtures/corelib.jac +249 -97
- jaclang/compiler/passes/tool/tests/fixtures/corelib_fmt.jac +94 -97
- jaclang/compiler/passes/tool/tests/fixtures/doc_string.jac +2 -2
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/access_mod_check.jac +5 -5
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/archetype_test.jac +13 -0
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/decorator_stack.jac +7 -7
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac +8 -8
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.txt +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/ability_impl_long_comprehension.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/call_with_many_parameters.jac +2 -2
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/simple_walker.jac +3 -3
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/try_block_and_walker_spawn_and_fstrings.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/myca_formatted_code/type_annotation.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac +1 -1
- jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac +10 -4
- jaclang/compiler/passes/tool/tests/test_doc_ir_gen_pass.py +29 -0
- jaclang/compiler/passes/tool/tests/test_jac_format_pass.py +63 -88
- jaclang/compiler/passes/tool/tests/test_unparse_validate.py +27 -28
- jaclang/compiler/passes/transform.py +56 -16
- jaclang/compiler/passes/{ir_pass.py → uni_pass.py} +35 -52
- jaclang/compiler/program.py +200 -0
- jaclang/compiler/tests/fixtures/codegentext.jac +31 -0
- jaclang/compiler/tests/fixtures/fam.jac +12 -12
- jaclang/compiler/tests/fixtures/hello_world.jac +1 -1
- jaclang/compiler/tests/fixtures/pkg_import_lib/__init__.jac +1 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib/sub/__init__.jac +1 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib/sub/helper.jac +3 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib/tools.jac +3 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib_py/__init__.py +11 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib_py/sub/__init__.py +7 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib_py/sub/helper.jac +3 -0
- jaclang/compiler/tests/fixtures/pkg_import_lib_py/tools.jac +3 -0
- jaclang/compiler/tests/fixtures/pkg_import_main.jac +10 -0
- jaclang/compiler/tests/fixtures/pkg_import_main_py.jac +11 -0
- jaclang/compiler/tests/fixtures/staticcheck.jac +2 -2
- jaclang/compiler/tests/test_importer.py +41 -16
- jaclang/compiler/tests/test_parser.py +39 -17
- jaclang/compiler/{absyntree.py → unitree.py} +1521 -1261
- jaclang/langserve/engine.jac +498 -0
- jaclang/langserve/sem_manager.jac +309 -0
- jaclang/langserve/server.jac +186 -0
- jaclang/langserve/tests/fixtures/base_module_structure.jac +7 -7
- jaclang/langserve/tests/fixtures/circle.jac +6 -6
- jaclang/langserve/tests/fixtures/circle_err.jac +6 -6
- jaclang/langserve/tests/fixtures/circle_pure.impl.jac +5 -5
- jaclang/langserve/tests/fixtures/circle_pure.jac +7 -7
- jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +2 -2
- jaclang/langserve/tests/fixtures/circle_pure_err.jac +7 -7
- jaclang/langserve/tests/fixtures/import_include_statements.jac +6 -6
- jaclang/langserve/tests/fixtures/rename.jac +6 -6
- jaclang/langserve/tests/server_test/test_lang_serve.py +261 -0
- jaclang/langserve/tests/server_test/utils.py +118 -0
- jaclang/langserve/tests/session.jac +294 -0
- jaclang/langserve/tests/test_sem_tokens.py +4 -4
- jaclang/langserve/tests/test_server.py +53 -30
- jaclang/langserve/utils.jac +459 -0
- jaclang/runtimelib/{architype.py → archetype.py} +86 -62
- jaclang/runtimelib/builtin.py +95 -0
- jaclang/runtimelib/constructs.py +11 -13
- jaclang/runtimelib/importer.py +83 -53
- jaclang/runtimelib/machine.py +1592 -144
- jaclang/runtimelib/memory.py +6 -6
- jaclang/{plugin → runtimelib}/tests/fixtures/graph_purger.jac +1 -1
- jaclang/{plugin → runtimelib}/tests/fixtures/impl_match.jac +2 -2
- jaclang/runtimelib/tests/fixtures/impl_match_impl.jac +3 -0
- jaclang/{plugin → runtimelib}/tests/fixtures/other_root_access.jac +7 -7
- jaclang/{plugin → runtimelib}/tests/fixtures/savable_object.jac +3 -5
- jaclang/{plugin → runtimelib}/tests/fixtures/simple_node_connection.jac +6 -6
- jaclang/{plugin → runtimelib}/tests/fixtures/simple_persistent.jac +1 -1
- jaclang/{plugin → runtimelib}/tests/fixtures/traversing_save.jac +7 -5
- jaclang/runtimelib/tests/test_features.py +72 -0
- jaclang/{plugin → runtimelib}/tests/test_jaseci.py +6 -5
- jaclang/runtimelib/utils.py +34 -66
- jaclang/settings.py +1 -6
- jaclang/tests/fixtures/{abc.jac → abc_check.jac} +6 -6
- jaclang/tests/fixtures/arch_rel_import_creation.jac +4 -4
- jaclang/tests/fixtures/async_ability.jac +18 -0
- jaclang/tests/fixtures/async_walker.jac +23 -0
- jaclang/tests/fixtures/backward_edge_visit.jac +31 -0
- jaclang/tests/fixtures/baddy.jac +1 -1
- jaclang/tests/fixtures/base_class1.jac +2 -2
- jaclang/tests/fixtures/base_class2.jac +2 -2
- jaclang/tests/fixtures/base_class_complex_expr.jac +3 -3
- jaclang/tests/fixtures/builtin_printgraph.jac +85 -0
- jaclang/tests/fixtures/builtin_printgraph_json.jac +21 -0
- jaclang/tests/fixtures/builtin_printgraph_mermaid.jac +16 -0
- jaclang/tests/fixtures/byllmissue.jac +1 -1
- jaclang/tests/fixtures/chandra_bugs.jac +1 -1
- jaclang/tests/fixtures/chandra_bugs2.jac +21 -14
- jaclang/tests/fixtures/cls_method.jac +6 -6
- jaclang/tests/fixtures/concurrency.jac +39 -0
- jaclang/tests/fixtures/connect_traverse_syntax.jac +18 -0
- jaclang/tests/fixtures/create_dynamic_archetype.jac +35 -0
- jaclang/tests/fixtures/decl_defn_param_name.jac +4 -4
- jaclang/tests/fixtures/deep/deeper/__init__.jac +1 -0
- jaclang/tests/fixtures/deep/deeper/deep_outer_import.jac +2 -3
- jaclang/tests/fixtures/deep/deeper/deep_outer_import2.jac +3 -3
- jaclang/tests/fixtures/deep/deeper/snd_lev.jac +2 -2
- jaclang/tests/fixtures/deep/mycode.jac +1 -1
- jaclang/tests/fixtures/deep/one_lev.jac +3 -4
- jaclang/tests/fixtures/deep/one_lev_dup.jac +2 -2
- jaclang/tests/fixtures/deep_convert.jac +1 -1
- jaclang/tests/fixtures/deep_import.jac +2 -2
- jaclang/tests/fixtures/deep_import_interp.jac +8 -0
- jaclang/tests/fixtures/deep_import_mods.jac +3 -3
- jaclang/tests/fixtures/deferred_field.jac +1 -1
- jaclang/tests/fixtures/del_clean.jac +7 -0
- jaclang/tests/fixtures/disconn.jac +2 -2
- jaclang/tests/fixtures/dynamic_archetype.jac +34 -0
- jaclang/tests/fixtures/edge_ability.jac +49 -0
- jaclang/tests/fixtures/edge_node_walk.jac +12 -12
- jaclang/tests/fixtures/edge_ops.jac +7 -7
- jaclang/tests/fixtures/edges_walk.jac +10 -10
- jaclang/tests/fixtures/edgetypeissue.jac +1 -1
- jaclang/tests/fixtures/enum_inside_archtype.jac +4 -4
- jaclang/tests/fixtures/err.impl.jac +1 -1
- jaclang/tests/fixtures/err.jac +2 -2
- jaclang/tests/fixtures/err_runtime.jac +2 -2
- jaclang/tests/fixtures/foo.jac +7 -7
- jaclang/tests/fixtures/game1.jac +4 -4
- jaclang/tests/fixtures/gendot_bubble_sort.jac +4 -4
- jaclang/tests/fixtures/glob_multivar_statement.jac +1 -1
- jaclang/tests/fixtures/guess_game.jac +6 -6
- jaclang/tests/fixtures/has_goodness.jac +1 -1
- jaclang/tests/fixtures/hash_init_check.jac +3 -3
- jaclang/tests/fixtures/hello.jac +1 -1
- jaclang/tests/fixtures/here_usage_error.jac +21 -0
- jaclang/tests/fixtures/here_visitor_usage.jac +21 -0
- jaclang/tests/fixtures/ignore.jac +3 -3
- jaclang/tests/fixtures/ignore_dup.jac +3 -3
- jaclang/tests/fixtures/impl_match_confused.impl.jac +1 -1
- jaclang/tests/fixtures/import.jac +9 -9
- jaclang/tests/fixtures/import_all.jac +1 -1
- jaclang/tests/fixtures/index_slice.jac +1 -1
- jaclang/tests/fixtures/inherit_check.jac +3 -3
- jaclang/tests/fixtures/jac_from_py.py +4 -0
- jaclang/tests/fixtures/jacsamp.jac +1 -1
- jaclang/tests/fixtures/jactest_main.jac +1 -1
- jaclang/tests/fixtures/jp_importer.jac +7 -8
- jaclang/tests/fixtures/jp_importer_auto.jac +3 -3
- jaclang/tests/fixtures/lambda.jac +2 -2
- jaclang/tests/fixtures/needs_import.jac +6 -6
- jaclang/tests/fixtures/needs_import_1.jac +1 -1
- jaclang/tests/fixtures/needs_import_2.jac +1 -1
- jaclang/tests/fixtures/needs_import_3.jac +1 -1
- jaclang/tests/fixtures/needs_import_dup.jac +6 -6
- jaclang/tests/fixtures/node_del.jac +54 -0
- jaclang/tests/fixtures/nosigself.jac +3 -3
- jaclang/tests/fixtures/py2jac.py +30 -0
- jaclang/tests/fixtures/py_bool_expr.py +7 -0
- jaclang/tests/fixtures/py_namedexpr.py +7 -0
- jaclang/tests/fixtures/pyfunc_3.py +0 -2
- jaclang/tests/fixtures/random_check.jac +5 -5
- jaclang/tests/fixtures/simple_archs.jac +2 -2
- jaclang/tests/fixtures/simple_walk.jac +52 -0
- jaclang/tests/fixtures/slice_vals.jac +3 -3
- jaclang/tests/fixtures/sub_abil_sep.jac +3 -3
- jaclang/tests/fixtures/sub_abil_sep_multilev.jac +3 -3
- jaclang/tests/fixtures/trailing_comma.jac +4 -4
- jaclang/tests/fixtures/type_info.jac +5 -5
- jaclang/{compiler/passes/main/tests → tests}/fixtures/uninitialized_hasvars.jac +1 -1
- jaclang/tests/fixtures/visit_order.jac +4 -4
- jaclang/tests/fixtures/visit_traversal.jac +47 -0
- jaclang/tests/fixtures/walker_override.jac +2 -2
- jaclang/tests/fixtures/walker_update.jac +5 -5
- jaclang/tests/fixtures/with_context.jac +4 -4
- jaclang/tests/test_bugs.py +2 -2
- jaclang/tests/test_cli.py +127 -227
- jaclang/tests/test_language.py +542 -474
- jaclang/tests/test_man_code.py +2 -2
- jaclang/tests/test_reference.py +4 -4
- jaclang/tests/test_settings.py +16 -16
- jaclang/tests/test_typecheck.py +555 -0
- jaclang/utils/__init__.py +4 -0
- jaclang/utils/helpers.py +24 -31
- jaclang/utils/lang_tools.py +84 -75
- jaclang/utils/module_resolver.py +69 -0
- jaclang/utils/test.py +8 -5
- jaclang/utils/tests/test_lang_tools.py +40 -14
- jaclang/utils/treeprinter.py +178 -42
- jaclang/vendor/__init__.py +1 -2
- jaclang/vendor/attr/__init__.py +14 -44
- jaclang/vendor/attr/__init__.pyi +155 -321
- jaclang/vendor/attr/_cmp.py +25 -15
- jaclang/vendor/attr/_cmp.pyi +7 -7
- jaclang/vendor/attr/_compat.py +15 -8
- jaclang/vendor/attr/_config.py +1 -1
- jaclang/vendor/attr/_funcs.py +148 -163
- jaclang/vendor/attr/_make.py +859 -855
- jaclang/vendor/attr/_next_gen.py +426 -32
- jaclang/vendor/attr/converters.py +67 -49
- jaclang/vendor/attr/converters.pyi +13 -7
- jaclang/vendor/attr/filters.py +17 -11
- jaclang/vendor/attr/filters.pyi +3 -3
- jaclang/vendor/attr/setters.py +11 -5
- jaclang/vendor/attr/setters.pyi +2 -1
- jaclang/vendor/attr/validators.py +191 -162
- jaclang/vendor/attr/validators.pyi +25 -27
- jaclang/vendor/attrs/__init__.py +9 -5
- jaclang/vendor/attrs/__init__.pyi +225 -29
- jaclang/vendor/attrs-25.3.0.dist-info/INSTALLER +1 -0
- jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/METADATA +83 -53
- jaclang/vendor/attrs-25.3.0.dist-info/RECORD +56 -0
- jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/WHEEL +1 -1
- jaclang/vendor/bin/dmypy +8 -0
- jaclang/vendor/bin/mypy +8 -0
- jaclang/vendor/bin/mypyc +8 -0
- jaclang/vendor/bin/stubgen +8 -0
- jaclang/vendor/bin/stubtest +8 -0
- jaclang/vendor/cattr/gen.py +2 -2
- jaclang/vendor/cattr/preconf/bson.py +1 -0
- jaclang/vendor/cattr/preconf/json.py +1 -0
- jaclang/vendor/cattr/preconf/msgpack.py +1 -0
- jaclang/vendor/cattr/preconf/orjson.py +1 -0
- jaclang/vendor/cattr/preconf/pyyaml.py +1 -0
- jaclang/vendor/cattr/preconf/tomlkit.py +1 -0
- jaclang/vendor/cattr/preconf/ujson.py +1 -0
- jaclang/vendor/cattrs/__init__.py +21 -21
- jaclang/vendor/cattrs/_compat.py +176 -62
- jaclang/vendor/cattrs/_generics.py +5 -3
- jaclang/vendor/cattrs/cols.py +289 -0
- jaclang/vendor/cattrs/converters.py +505 -187
- jaclang/vendor/cattrs/disambiguators.py +118 -45
- jaclang/vendor/cattrs/dispatch.py +66 -36
- jaclang/vendor/cattrs/fns.py +6 -1
- jaclang/vendor/cattrs/gen/__init__.py +365 -202
- jaclang/vendor/cattrs/gen/_generics.py +41 -5
- jaclang/vendor/cattrs/gen/_lc.py +3 -2
- jaclang/vendor/cattrs/gen/_shared.py +39 -32
- jaclang/vendor/cattrs/gen/typeddicts.py +75 -88
- jaclang/vendor/cattrs/preconf/__init__.py +20 -0
- jaclang/vendor/cattrs/preconf/bson.py +7 -8
- jaclang/vendor/cattrs/preconf/cbor2.py +3 -0
- jaclang/vendor/cattrs/preconf/json.py +8 -4
- jaclang/vendor/cattrs/preconf/msgpack.py +3 -0
- jaclang/vendor/cattrs/preconf/msgspec.py +185 -0
- jaclang/vendor/cattrs/preconf/orjson.py +20 -7
- jaclang/vendor/cattrs/preconf/pyyaml.py +15 -3
- jaclang/vendor/cattrs/preconf/tomlkit.py +3 -1
- jaclang/vendor/cattrs/preconf/ujson.py +3 -0
- jaclang/vendor/cattrs/strategies/__init__.py +1 -0
- jaclang/vendor/cattrs/strategies/_class_methods.py +1 -1
- jaclang/vendor/cattrs/strategies/_subclasses.py +43 -29
- jaclang/vendor/cattrs/strategies/_unions.py +47 -24
- jaclang/vendor/cattrs/v.py +1 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/INSTALLER +1 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/METADATA +161 -0
- jaclang/vendor/cattrs-24.1.3.dist-info/RECORD +96 -0
- jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/WHEEL +1 -1
- jaclang/vendor/lark/__init__.py +38 -38
- jaclang/vendor/lark/__pyinstaller/__init__.py +6 -6
- jaclang/vendor/lark/__pyinstaller/hook-lark.py +14 -14
- jaclang/vendor/lark/ast_utils.py +59 -59
- jaclang/vendor/lark/common.py +86 -89
- jaclang/vendor/lark/exceptions.py +292 -292
- jaclang/vendor/lark/grammar.py +130 -130
- jaclang/vendor/lark/grammars/common.lark +59 -59
- jaclang/vendor/lark/grammars/lark.lark +62 -62
- jaclang/vendor/lark/grammars/python.lark +302 -302
- jaclang/vendor/lark/grammars/unicode.lark +7 -7
- jaclang/vendor/lark/indenter.py +143 -112
- jaclang/vendor/lark/lark.py +658 -661
- jaclang/vendor/lark/lexer.py +678 -678
- jaclang/vendor/lark/load_grammar.py +1428 -1428
- jaclang/vendor/lark/parse_tree_builder.py +391 -391
- jaclang/vendor/lark/parser_frontends.py +257 -257
- jaclang/vendor/lark/parsers/cyk.py +340 -340
- jaclang/vendor/lark/parsers/earley.py +317 -308
- jaclang/vendor/lark/parsers/earley_common.py +42 -42
- jaclang/vendor/lark/parsers/earley_forest.py +802 -810
- jaclang/vendor/lark/parsers/grammar_analysis.py +203 -203
- jaclang/vendor/lark/parsers/lalr_analysis.py +332 -332
- jaclang/vendor/lark/parsers/lalr_interactive_parser.py +158 -157
- jaclang/vendor/lark/parsers/lalr_parser.py +122 -122
- jaclang/vendor/lark/parsers/lalr_parser_state.py +110 -110
- jaclang/vendor/lark/parsers/xearley.py +165 -165
- jaclang/vendor/lark/reconstruct.py +107 -107
- jaclang/vendor/lark/tools/__init__.py +70 -71
- jaclang/vendor/lark/tools/nearley.py +202 -202
- jaclang/vendor/lark/tools/serialize.py +32 -32
- jaclang/vendor/lark/tools/standalone.py +196 -196
- jaclang/vendor/lark/tree.py +267 -272
- jaclang/vendor/lark/tree_matcher.py +186 -186
- jaclang/vendor/lark/utils.py +346 -361
- jaclang/vendor/lark/visitors.py +596 -593
- jaclang/vendor/lark-1.2.2.dist-info/INSTALLER +1 -0
- jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/METADATA +48 -47
- jaclang/vendor/lark-1.2.2.dist-info/RECORD +83 -0
- jaclang/vendor/{mypy_extensions-1.0.0.dist-info → lark-1.2.2.dist-info}/WHEEL +1 -1
- jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info/licenses}/LICENSE +18 -18
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/INSTALLER +1 -0
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/METADATA +2 -1
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/RECORD +17 -10
- jaclang/vendor/lsprotocol-2023.0.1.dist-info/WHEEL +1 -1
- jaclang/vendor/pluggy/_version.py +7 -2
- jaclang/vendor/pluggy-1.5.0.dist-info/INSTALLER +1 -0
- jaclang/vendor/pluggy-1.5.0.dist-info/METADATA +6 -5
- jaclang/vendor/pluggy-1.5.0.dist-info/RECORD +24 -14
- jaclang/vendor/pluggy-1.5.0.dist-info/WHEEL +1 -1
- jaclang/vendor/pygls-1.3.1.dist-info/INSTALLER +1 -0
- jaclang/vendor/pygls-1.3.1.dist-info/METADATA +2 -2
- jaclang/vendor/pygls-1.3.1.dist-info/RECORD +45 -24
- jaclang/vendor/pygls-1.3.1.dist-info/WHEEL +1 -1
- {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/METADATA +2 -1
- jaclang-0.8.1.dist-info/RECORD +568 -0
- {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/WHEEL +1 -1
- jaclang/compiler/.gitignore +0 -1
- jaclang/compiler/compile.py +0 -119
- jaclang/compiler/passes/main/access_modifier_pass.py +0 -130
- jaclang/compiler/passes/main/fuse_typeinfo_pass.py +0 -656
- jaclang/compiler/passes/main/py_collect_dep_pass.py +0 -78
- jaclang/compiler/passes/main/pyout_pass.py +0 -86
- jaclang/compiler/passes/main/registry_pass.py +0 -156
- jaclang/compiler/passes/main/schedules.py +0 -47
- jaclang/compiler/passes/main/sub_node_tab_pass.py +0 -36
- jaclang/compiler/passes/main/tests/fixtures/registry.jac +0 -36
- jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +0 -114
- jaclang/compiler/passes/main/tests/test_registry_pass.py +0 -31
- jaclang/compiler/passes/main/tests/test_type_check_pass.py +0 -91
- jaclang/compiler/passes/main/tests/test_typeinfo_pass.py +0 -29
- jaclang/compiler/passes/main/type_check_pass.py +0 -128
- jaclang/compiler/passes/tool/schedules.py +0 -18
- jaclang/compiler/passes/tool/tests/fixtures/genai/essay_review.jac +0 -36
- jaclang/compiler/passes/tool/tests/fixtures/genai/expert_answer.jac +0 -17
- jaclang/compiler/passes/tool/tests/fixtures/genai/joke_gen.jac +0 -32
- jaclang/compiler/passes/tool/tests/fixtures/genai/odd_word_out.jac +0 -27
- jaclang/compiler/passes/tool/tests/fixtures/genai/personality_finder.jac +0 -35
- jaclang/compiler/passes/tool/tests/fixtures/genai/text_to_type.jac +0 -25
- jaclang/compiler/passes/tool/tests/fixtures/genai/translator.jac +0 -13
- jaclang/compiler/passes/tool/tests/fixtures/genai/wikipedia.jac +0 -63
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/architype_test.jac +0 -13
- jaclang/compiler/passes/utils/mypy_ast_build.py +0 -940
- jaclang/compiler/py_info.py +0 -22
- jaclang/compiler/semtable.py +0 -159
- jaclang/compiler/symtable.py +0 -297
- jaclang/langserve/engine.py +0 -541
- jaclang/langserve/sem_manager.py +0 -379
- jaclang/langserve/server.py +0 -176
- jaclang/langserve/tests/session.py +0 -255
- jaclang/langserve/utils.py +0 -458
- jaclang/plugin/__init__.py +0 -7
- jaclang/plugin/builtin.py +0 -57
- jaclang/plugin/default.py +0 -1443
- jaclang/plugin/feature.py +0 -574
- jaclang/plugin/plugin.md +0 -471
- jaclang/plugin/spec.py +0 -536
- jaclang/plugin/tests/fixtures/impl_match_impl.jac +0 -3
- jaclang/plugin/tests/test_features.py +0 -56
- jaclang/runtimelib/context.py +0 -191
- jaclang/tests/fixtures/builtin_dotgen.jac +0 -42
- jaclang/tests/fixtures/create_dynamic_architype.jac +0 -35
- jaclang/tests/fixtures/dynamic_architype.jac +0 -34
- jaclang/tests/fixtures/impl_grab.impl.jac +0 -5
- jaclang/tests/fixtures/mtest.impl.jac +0 -6
- jaclang/tests/fixtures/registry.jac +0 -58
- jaclang/tests/fixtures/semstr.jac +0 -30
- jaclang/tests/main.jac +0 -2
- jaclang/utils/profiler.py +0 -62
- jaclang/vendor/attrs-23.2.0.dist-info/RECORD +0 -35
- jaclang/vendor/cattrs-23.2.3.dist-info/METADATA +0 -221
- jaclang/vendor/cattrs-23.2.3.dist-info/RECORD +0 -48
- jaclang/vendor/lark-1.1.9.dist-info/RECORD +0 -46
- jaclang/vendor/lark-1.1.9.dist-info/WHEEL +0 -5
- jaclang/vendor/mypy/__init__.py +0 -1
- jaclang/vendor/mypy/__main__.py +0 -37
- jaclang/vendor/mypy/api.py +0 -94
- jaclang/vendor/mypy/applytype.py +0 -172
- jaclang/vendor/mypy/argmap.py +0 -268
- jaclang/vendor/mypy/binder.py +0 -538
- jaclang/vendor/mypy/bogus_type.py +0 -27
- jaclang/vendor/mypy/build.py +0 -3562
- jaclang/vendor/mypy/checker.py +0 -8445
- jaclang/vendor/mypy/checkexpr.py +0 -6623
- jaclang/vendor/mypy/checkmember.py +0 -1363
- jaclang/vendor/mypy/checkpattern.py +0 -801
- jaclang/vendor/mypy/checkstrformat.py +0 -1109
- jaclang/vendor/mypy/config_parser.py +0 -670
- jaclang/vendor/mypy/constant_fold.py +0 -187
- jaclang/vendor/mypy/constraints.py +0 -1636
- jaclang/vendor/mypy/copytype.py +0 -133
- jaclang/vendor/mypy/defaults.py +0 -46
- jaclang/vendor/mypy/dmypy/__main__.py +0 -6
- jaclang/vendor/mypy/dmypy/client.py +0 -749
- jaclang/vendor/mypy/dmypy_os.py +0 -42
- jaclang/vendor/mypy/dmypy_server.py +0 -1107
- jaclang/vendor/mypy/dmypy_util.py +0 -117
- jaclang/vendor/mypy/erasetype.py +0 -278
- jaclang/vendor/mypy/errorcodes.py +0 -291
- jaclang/vendor/mypy/errors.py +0 -1280
- jaclang/vendor/mypy/evalexpr.py +0 -205
- jaclang/vendor/mypy/expandtype.py +0 -524
- jaclang/vendor/mypy/exprtotype.py +0 -209
- jaclang/vendor/mypy/fastparse.py +0 -2147
- jaclang/vendor/mypy/find_sources.py +0 -243
- jaclang/vendor/mypy/fixup.py +0 -428
- jaclang/vendor/mypy/freetree.py +0 -23
- jaclang/vendor/mypy/fscache.py +0 -309
- jaclang/vendor/mypy/fswatcher.py +0 -106
- jaclang/vendor/mypy/gclogger.py +0 -47
- jaclang/vendor/mypy/git.py +0 -34
- jaclang/vendor/mypy/graph_utils.py +0 -112
- jaclang/vendor/mypy/indirection.py +0 -121
- jaclang/vendor/mypy/infer.py +0 -75
- jaclang/vendor/mypy/inspections.py +0 -627
- jaclang/vendor/mypy/ipc.py +0 -310
- jaclang/vendor/mypy/join.py +0 -871
- jaclang/vendor/mypy/literals.py +0 -306
- jaclang/vendor/mypy/lookup.py +0 -61
- jaclang/vendor/mypy/main.py +0 -1574
- jaclang/vendor/mypy/maptype.py +0 -106
- jaclang/vendor/mypy/meet.py +0 -1140
- jaclang/vendor/mypy/memprofile.py +0 -121
- jaclang/vendor/mypy/message_registry.py +0 -329
- jaclang/vendor/mypy/messages.py +0 -3186
- jaclang/vendor/mypy/metastore.py +0 -225
- jaclang/vendor/mypy/mixedtraverser.py +0 -112
- jaclang/vendor/mypy/modulefinder.py +0 -875
- jaclang/vendor/mypy/moduleinspect.py +0 -184
- jaclang/vendor/mypy/mro.py +0 -62
- jaclang/vendor/mypy/nodes.py +0 -4115
- jaclang/vendor/mypy/operators.py +0 -126
- jaclang/vendor/mypy/options.py +0 -556
- jaclang/vendor/mypy/parse.py +0 -30
- jaclang/vendor/mypy/partially_defined.py +0 -675
- jaclang/vendor/mypy/patterns.py +0 -150
- jaclang/vendor/mypy/plugin.py +0 -901
- jaclang/vendor/mypy/plugins/attrs.py +0 -1166
- jaclang/vendor/mypy/plugins/common.py +0 -440
- jaclang/vendor/mypy/plugins/ctypes.py +0 -245
- jaclang/vendor/mypy/plugins/dataclasses.py +0 -1108
- jaclang/vendor/mypy/plugins/default.py +0 -531
- jaclang/vendor/mypy/plugins/enums.py +0 -259
- jaclang/vendor/mypy/plugins/functools.py +0 -104
- jaclang/vendor/mypy/plugins/proper_plugin.py +0 -175
- jaclang/vendor/mypy/plugins/singledispatch.py +0 -224
- jaclang/vendor/mypy/py.typed +0 -1
- jaclang/vendor/mypy/pyinfo.py +0 -78
- jaclang/vendor/mypy/reachability.py +0 -362
- jaclang/vendor/mypy/refinfo.py +0 -92
- jaclang/vendor/mypy/renaming.py +0 -568
- jaclang/vendor/mypy/report.py +0 -924
- jaclang/vendor/mypy/scope.py +0 -125
- jaclang/vendor/mypy/semanal.py +0 -7187
- jaclang/vendor/mypy/semanal_classprop.py +0 -187
- jaclang/vendor/mypy/semanal_enum.py +0 -253
- jaclang/vendor/mypy/semanal_infer.py +0 -128
- jaclang/vendor/mypy/semanal_main.py +0 -511
- jaclang/vendor/mypy/semanal_namedtuple.py +0 -670
- jaclang/vendor/mypy/semanal_newtype.py +0 -273
- jaclang/vendor/mypy/semanal_pass1.py +0 -156
- jaclang/vendor/mypy/semanal_shared.py +0 -490
- jaclang/vendor/mypy/semanal_typeargs.py +0 -265
- jaclang/vendor/mypy/semanal_typeddict.py +0 -575
- jaclang/vendor/mypy/server/astdiff.py +0 -518
- jaclang/vendor/mypy/server/astmerge.py +0 -562
- jaclang/vendor/mypy/server/aststrip.py +0 -281
- jaclang/vendor/mypy/server/deps.py +0 -1137
- jaclang/vendor/mypy/server/mergecheck.py +0 -83
- jaclang/vendor/mypy/server/objgraph.py +0 -101
- jaclang/vendor/mypy/server/subexpr.py +0 -198
- jaclang/vendor/mypy/server/target.py +0 -11
- jaclang/vendor/mypy/server/trigger.py +0 -26
- jaclang/vendor/mypy/server/update.py +0 -1339
- jaclang/vendor/mypy/sharedparse.py +0 -112
- jaclang/vendor/mypy/solve.py +0 -562
- jaclang/vendor/mypy/split_namespace.py +0 -35
- jaclang/vendor/mypy/state.py +0 -28
- jaclang/vendor/mypy/stats.py +0 -489
- jaclang/vendor/mypy/strconv.py +0 -641
- jaclang/vendor/mypy/stubdoc.py +0 -491
- jaclang/vendor/mypy/stubgen.py +0 -1886
- jaclang/vendor/mypy/stubgenc.py +0 -993
- jaclang/vendor/mypy/stubinfo.py +0 -173
- jaclang/vendor/mypy/stubtest.py +0 -2079
- jaclang/vendor/mypy/stubutil.py +0 -834
- jaclang/vendor/mypy/subtypes.py +0 -1980
- jaclang/vendor/mypy/suggestions.py +0 -1046
- jaclang/vendor/mypy/test/config.py +0 -28
- jaclang/vendor/mypy/test/data.py +0 -821
- jaclang/vendor/mypy/test/helpers.py +0 -476
- jaclang/vendor/mypy/test/meta/_pytest.py +0 -72
- jaclang/vendor/mypy/test/meta/test_diff_helper.py +0 -47
- jaclang/vendor/mypy/test/meta/test_parse_data.py +0 -73
- jaclang/vendor/mypy/test/meta/test_update_data.py +0 -135
- jaclang/vendor/mypy/test/test_find_sources.py +0 -376
- jaclang/vendor/mypy/test/test_ref_info.py +0 -45
- jaclang/vendor/mypy/test/testapi.py +0 -45
- jaclang/vendor/mypy/test/testargs.py +0 -77
- jaclang/vendor/mypy/test/testcheck.py +0 -322
- jaclang/vendor/mypy/test/testcmdline.py +0 -152
- jaclang/vendor/mypy/test/testconstraints.py +0 -134
- jaclang/vendor/mypy/test/testdaemon.py +0 -132
- jaclang/vendor/mypy/test/testdeps.py +0 -77
- jaclang/vendor/mypy/test/testdiff.py +0 -67
- jaclang/vendor/mypy/test/testerrorstream.py +0 -46
- jaclang/vendor/mypy/test/testfinegrained.py +0 -438
- jaclang/vendor/mypy/test/testfinegrainedcache.py +0 -18
- jaclang/vendor/mypy/test/testformatter.py +0 -85
- jaclang/vendor/mypy/test/testfscache.py +0 -101
- jaclang/vendor/mypy/test/testgraph.py +0 -83
- jaclang/vendor/mypy/test/testinfer.py +0 -373
- jaclang/vendor/mypy/test/testipc.py +0 -119
- jaclang/vendor/mypy/test/testmerge.py +0 -238
- jaclang/vendor/mypy/test/testmodulefinder.py +0 -278
- jaclang/vendor/mypy/test/testmypyc.py +0 -14
- jaclang/vendor/mypy/test/testparse.py +0 -107
- jaclang/vendor/mypy/test/testpep561.py +0 -211
- jaclang/vendor/mypy/test/testpythoneval.py +0 -117
- jaclang/vendor/mypy/test/testreports.py +0 -55
- jaclang/vendor/mypy/test/testsemanal.py +0 -209
- jaclang/vendor/mypy/test/testsolve.py +0 -285
- jaclang/vendor/mypy/test/teststubgen.py +0 -1412
- jaclang/vendor/mypy/test/teststubinfo.py +0 -12
- jaclang/vendor/mypy/test/teststubtest.py +0 -2492
- jaclang/vendor/mypy/test/testsubtypes.py +0 -303
- jaclang/vendor/mypy/test/testtransform.py +0 -64
- jaclang/vendor/mypy/test/testtypegen.py +0 -83
- jaclang/vendor/mypy/test/testtypes.py +0 -1551
- jaclang/vendor/mypy/test/testutil.py +0 -111
- jaclang/vendor/mypy/test/typefixture.py +0 -415
- jaclang/vendor/mypy/test/update_data.py +0 -87
- jaclang/vendor/mypy/test/visitors.py +0 -63
- jaclang/vendor/mypy/traverser.py +0 -961
- jaclang/vendor/mypy/treetransform.py +0 -800
- jaclang/vendor/mypy/tvar_scope.py +0 -169
- jaclang/vendor/mypy/type_visitor.py +0 -564
- jaclang/vendor/mypy/typeanal.py +0 -2596
- jaclang/vendor/mypy/typeops.py +0 -1082
- jaclang/vendor/mypy/types.py +0 -3708
- jaclang/vendor/mypy/types_utils.py +0 -166
- jaclang/vendor/mypy/typeshed/LICENSE +0 -237
- jaclang/vendor/mypy/typeshed/stdlib/VERSIONS +0 -309
- jaclang/vendor/mypy/typeshed/stdlib/__future__.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/__main__.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/_ast.pyi +0 -591
- jaclang/vendor/mypy/typeshed/stdlib/_bisect.pyi +0 -84
- jaclang/vendor/mypy/typeshed/stdlib/_bootlocale.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/_codecs.pyi +0 -133
- jaclang/vendor/mypy/typeshed/stdlib/_collections_abc.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/_compat_pickle.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/_compression.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/_csv.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/_ctypes.pyi +0 -207
- jaclang/vendor/mypy/typeshed/stdlib/_curses.pyi +0 -566
- jaclang/vendor/mypy/typeshed/stdlib/_decimal.pyi +0 -281
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_thread.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/_dummy_threading.pyi +0 -164
- jaclang/vendor/mypy/typeshed/stdlib/_heapq.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/_imp.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/_json.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/_locale.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/_lsprof.pyi +0 -35
- jaclang/vendor/mypy/typeshed/stdlib/_markupbase.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/_msi.pyi +0 -92
- jaclang/vendor/mypy/typeshed/stdlib/_operator.pyi +0 -147
- jaclang/vendor/mypy/typeshed/stdlib/_osx_support.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/_posixsubprocess.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/_py_abc.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/_pydecimal.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/_random.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/_sitebuiltins.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/_socket.pyi +0 -803
- jaclang/vendor/mypy/typeshed/stdlib/_stat.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/_thread.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/_threading_local.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/_tkinter.pyi +0 -121
- jaclang/vendor/mypy/typeshed/stdlib/_tracemalloc.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/__init__.pyi +0 -347
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/dbapi.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/wsgi.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/_typeshed/xml.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/_warnings.pyi +0 -55
- jaclang/vendor/mypy/typeshed/stdlib/_weakref.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/_weakrefset.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/_winapi.pyi +0 -255
- jaclang/vendor/mypy/typeshed/stdlib/abc.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/aifc.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/antigravity.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi +0 -595
- jaclang/vendor/mypy/typeshed/stdlib/array.pyi +0 -92
- jaclang/vendor/mypy/typeshed/stdlib/ast.pyi +0 -277
- jaclang/vendor/mypy/typeshed/stdlib/asynchat.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/__init__.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_events.pyi +0 -440
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_futures.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/base_tasks.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/constants.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/coroutines.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/events.pyi +0 -580
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/exceptions.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/format_helpers.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/futures.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/locks.pyi +0 -121
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/log.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/mixins.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/proactor_events.pyi +0 -64
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/protocols.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/queues.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/runners.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/selector_events.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/sslproto.pyi +0 -165
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/staggered.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/streams.pyi +0 -153
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/subprocess.pyi +0 -229
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/taskgroups.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/tasks.pyi +0 -497
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/threads.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/timeouts.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/transports.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/trsock.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/unix_events.pyi +0 -196
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_events.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/asyncio/windows_utils.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/asyncore.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/atexit.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/audioop.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/base64.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/bdb.pyi +0 -102
- jaclang/vendor/mypy/typeshed/stdlib/binascii.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/binhex.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/bisect.pyi +0 -4
- jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi +0 -1936
- jaclang/vendor/mypy/typeshed/stdlib/bz2.pyi +0 -146
- jaclang/vendor/mypy/typeshed/stdlib/cProfile.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/calendar.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/cgi.pyi +0 -118
- jaclang/vendor/mypy/typeshed/stdlib/cgitb.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/chunk.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/cmath.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/cmd.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/code.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/codecs.pyi +0 -285
- jaclang/vendor/mypy/typeshed/stdlib/codeop.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/collections/__init__.pyi +0 -485
- jaclang/vendor/mypy/typeshed/stdlib/collections/abc.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/colorsys.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/compileall.pyi +0 -111
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/_base.pyi +0 -126
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/process.pyi +0 -233
- jaclang/vendor/mypy/typeshed/stdlib/concurrent/futures/thread.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/configparser.pyi +0 -313
- jaclang/vendor/mypy/typeshed/stdlib/contextlib.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/contextvars.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/copy.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/copyreg.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/crypt.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/csv.pyi +0 -147
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/__init__.pyi +0 -187
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/_endian.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/util.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/ctypes/wintypes.pyi +0 -298
- jaclang/vendor/mypy/typeshed/stdlib/curses/__init__.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/curses/ascii.pyi +0 -62
- jaclang/vendor/mypy/typeshed/stdlib/curses/has_key.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/curses/panel.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/curses/textpad.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/dataclasses.pyi +0 -315
- jaclang/vendor/mypy/typeshed/stdlib/datetime.pyi +0 -295
- jaclang/vendor/mypy/typeshed/stdlib/dbm/__init__.pyi +0 -95
- jaclang/vendor/mypy/typeshed/stdlib/dbm/dumb.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/dbm/gnu.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/dbm/ndbm.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/decimal.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/difflib.pyi +0 -140
- jaclang/vendor/mypy/typeshed/stdlib/dis.pyi +0 -144
- jaclang/vendor/mypy/typeshed/stdlib/distutils/__init__.pyi +0 -5
- jaclang/vendor/mypy/typeshed/stdlib/distutils/archive_util.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/ccompiler.pyi +0 -152
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cmd.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +0 -45
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_clib.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_ext.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_py.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/check.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/clean.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/config.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_data.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_headers.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_lib.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/register.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/sdist.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/distutils/command/upload.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/config.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/distutils/core.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/distutils/debug.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dep_util.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dir_util.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/distutils/dist.pyi +0 -146
- jaclang/vendor/mypy/typeshed/stdlib/distutils/errors.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/distutils/extension.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/distutils/file_util.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/distutils/filelist.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/distutils/log.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/distutils/msvccompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/spawn.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/distutils/sysconfig.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/distutils/text_file.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/distutils/unixccompiler.pyi +0 -3
- jaclang/vendor/mypy/typeshed/stdlib/distutils/util.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/distutils/version.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/doctest.pyi +0 -248
- jaclang/vendor/mypy/typeshed/stdlib/dummy_threading.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/email/__init__.pyi +0 -29
- jaclang/vendor/mypy/typeshed/stdlib/email/_header_value_parser.pyi +0 -392
- jaclang/vendor/mypy/typeshed/stdlib/email/_policybase.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/email/base64mime.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/email/charset.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/email/contentmanager.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/email/encoders.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/errors.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/email/feedparser.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/email/generator.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/email/header.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/email/headerregistry.pyi +0 -178
- jaclang/vendor/mypy/typeshed/stdlib/email/iterators.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/email/message.pyi +0 -165
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/application.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/audio.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/base.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/image.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/message.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/multipart.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +0 -5
- jaclang/vendor/mypy/typeshed/stdlib/email/mime/text.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/email/parser.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/email/policy.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stdlib/email/quoprimime.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/email/utils.pyi +0 -70
- jaclang/vendor/mypy/typeshed/stdlib/encodings/__init__.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/ensurepip/__init__.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/enum.pyi +0 -320
- jaclang/vendor/mypy/typeshed/stdlib/errno.pyi +0 -222
- jaclang/vendor/mypy/typeshed/stdlib/faulthandler.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/fcntl.pyi +0 -127
- jaclang/vendor/mypy/typeshed/stdlib/filecmp.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/fileinput.pyi +0 -213
- jaclang/vendor/mypy/typeshed/stdlib/fnmatch.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/formatter.pyi +0 -88
- jaclang/vendor/mypy/typeshed/stdlib/fractions.pyi +0 -150
- jaclang/vendor/mypy/typeshed/stdlib/ftplib.pyi +0 -178
- jaclang/vendor/mypy/typeshed/stdlib/functools.pyi +0 -213
- jaclang/vendor/mypy/typeshed/stdlib/gc.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/getopt.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/getpass.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/gettext.pyi +0 -169
- jaclang/vendor/mypy/typeshed/stdlib/glob.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/graphlib.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/grp.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/gzip.pyi +0 -160
- jaclang/vendor/mypy/typeshed/stdlib/hashlib.pyi +0 -167
- jaclang/vendor/mypy/typeshed/stdlib/heapq.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/hmac.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stdlib/html/__init__.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/html/entities.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/html/parser.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/http/__init__.pyi +0 -105
- jaclang/vendor/mypy/typeshed/stdlib/http/client.pyi +0 -259
- jaclang/vendor/mypy/typeshed/stdlib/http/cookiejar.pyi +0 -159
- jaclang/vendor/mypy/typeshed/stdlib/http/cookies.pyi +0 -60
- jaclang/vendor/mypy/typeshed/stdlib/http/server.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/imaplib.pyi +0 -168
- jaclang/vendor/mypy/typeshed/stdlib/imghdr.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/imp.pyi +0 -62
- jaclang/vendor/mypy/typeshed/stdlib/importlib/__init__.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/importlib/_abc.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/importlib/abc.pyi +0 -172
- jaclang/vendor/mypy/typeshed/stdlib/importlib/machinery.pyi +0 -179
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +0 -285
- jaclang/vendor/mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/importlib/readers.pyi +0 -68
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/__init__.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/abc.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/readers.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/importlib/resources/simple.pyi +0 -56
- jaclang/vendor/mypy/typeshed/stdlib/importlib/simple.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/importlib/util.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/inspect.pyi +0 -632
- jaclang/vendor/mypy/typeshed/stdlib/io.pyi +0 -238
- jaclang/vendor/mypy/typeshed/stdlib/ipaddress.pyi +0 -208
- jaclang/vendor/mypy/typeshed/stdlib/itertools.pyi +0 -273
- jaclang/vendor/mypy/typeshed/stdlib/json/__init__.pyi +0 -61
- jaclang/vendor/mypy/typeshed/stdlib/json/decoder.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/json/encoder.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/json/tool.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/keyword.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +0 -6
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +0 -17
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +0 -12
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/main.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +0 -96
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pygram.pyi +0 -114
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/pytree.pyi +0 -117
- jaclang/vendor/mypy/typeshed/stdlib/lib2to3/refactor.pyi +0 -82
- jaclang/vendor/mypy/typeshed/stdlib/linecache.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/locale.pyi +0 -152
- jaclang/vendor/mypy/typeshed/stdlib/logging/__init__.pyi +0 -658
- jaclang/vendor/mypy/typeshed/stdlib/logging/config.pyi +0 -134
- jaclang/vendor/mypy/typeshed/stdlib/logging/handlers.pyi +0 -275
- jaclang/vendor/mypy/typeshed/stdlib/lzma.pyi +0 -197
- jaclang/vendor/mypy/typeshed/stdlib/mailbox.pyi +0 -256
- jaclang/vendor/mypy/typeshed/stdlib/mailcap.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/marshal.pyi +0 -33
- jaclang/vendor/mypy/typeshed/stdlib/math.pyi +0 -125
- jaclang/vendor/mypy/typeshed/stdlib/mimetypes.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/mmap.pyi +0 -113
- jaclang/vendor/mypy/typeshed/stdlib/modulefinder.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/msilib/__init__.pyi +0 -177
- jaclang/vendor/mypy/typeshed/stdlib/msilib/schema.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/msilib/sequence.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/msilib/text.pyi +0 -7
- jaclang/vendor/mypy/typeshed/stdlib/msvcrt.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/__init__.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/connection.pyi +0 -75
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/context.pyi +0 -189
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +0 -77
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/heap.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/managers.pyi +0 -212
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/pool.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/process.pyi +0 -39
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/queues.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/reduction.pyi +0 -90
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +0 -18
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +0 -40
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +0 -107
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/spawn.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +0 -54
- jaclang/vendor/mypy/typeshed/stdlib/multiprocessing/util.pyi +0 -98
- jaclang/vendor/mypy/typeshed/stdlib/netrc.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/nis.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/nntplib.pyi +0 -125
- jaclang/vendor/mypy/typeshed/stdlib/nt.pyi +0 -111
- jaclang/vendor/mypy/typeshed/stdlib/ntpath.pyi +0 -119
- jaclang/vendor/mypy/typeshed/stdlib/nturl2path.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/numbers.pyi +0 -209
- jaclang/vendor/mypy/typeshed/stdlib/opcode.pyi +0 -59
- jaclang/vendor/mypy/typeshed/stdlib/operator.pyi +0 -110
- jaclang/vendor/mypy/typeshed/stdlib/optparse.pyi +0 -255
- jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi +0 -1157
- jaclang/vendor/mypy/typeshed/stdlib/os/path.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/ossaudiodev.pyi +0 -131
- jaclang/vendor/mypy/typeshed/stdlib/parser.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/pathlib.pyi +0 -232
- jaclang/vendor/mypy/typeshed/stdlib/pdb.pyi +0 -181
- jaclang/vendor/mypy/typeshed/stdlib/pickle.pyi +0 -271
- jaclang/vendor/mypy/typeshed/stdlib/pickletools.pyi +0 -167
- jaclang/vendor/mypy/typeshed/stdlib/pipes.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/pkgutil.pyi +0 -53
- jaclang/vendor/mypy/typeshed/stdlib/platform.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/plistlib.pyi +0 -113
- jaclang/vendor/mypy/typeshed/stdlib/poplib.pyi +0 -71
- jaclang/vendor/mypy/typeshed/stdlib/posix.pyi +0 -361
- jaclang/vendor/mypy/typeshed/stdlib/posixpath.pyi +0 -161
- jaclang/vendor/mypy/typeshed/stdlib/pprint.pyi +0 -112
- jaclang/vendor/mypy/typeshed/stdlib/profile.pyi +0 -31
- jaclang/vendor/mypy/typeshed/stdlib/pstats.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/pty.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/pwd.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/py_compile.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/pyclbr.pyi +0 -74
- jaclang/vendor/mypy/typeshed/stdlib/pydoc.pyi +0 -261
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/pydoc_data/topics.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/__init__.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/errors.pyi +0 -49
- jaclang/vendor/mypy/typeshed/stdlib/pyexpat/model.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/queue.pyi +0 -66
- jaclang/vendor/mypy/typeshed/stdlib/quopri.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/random.pyi +0 -138
- jaclang/vendor/mypy/typeshed/stdlib/re.pyi +0 -290
- jaclang/vendor/mypy/typeshed/stdlib/readline.pyi +0 -36
- jaclang/vendor/mypy/typeshed/stdlib/reprlib.pyi +0 -65
- jaclang/vendor/mypy/typeshed/stdlib/resource.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/rlcompleter.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/runpy.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/sched.pyi +0 -42
- jaclang/vendor/mypy/typeshed/stdlib/secrets.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/select.pyi +0 -155
- jaclang/vendor/mypy/typeshed/stdlib/selectors.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/shelve.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/shlex.pyi +0 -63
- jaclang/vendor/mypy/typeshed/stdlib/shutil.pyi +0 -185
- jaclang/vendor/mypy/typeshed/stdlib/signal.pyi +0 -188
- jaclang/vendor/mypy/typeshed/stdlib/site.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/smtpd.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/smtplib.pyi +0 -204
- jaclang/vendor/mypy/typeshed/stdlib/sndhdr.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/socket.pyi +0 -825
- jaclang/vendor/mypy/typeshed/stdlib/socketserver.pyi +0 -168
- jaclang/vendor/mypy/typeshed/stdlib/spwd.pyi +0 -41
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +0 -551
- jaclang/vendor/mypy/typeshed/stdlib/sre_compile.pyi +0 -11
- jaclang/vendor/mypy/typeshed/stdlib/sre_constants.pyi +0 -130
- jaclang/vendor/mypy/typeshed/stdlib/sre_parse.pyi +0 -104
- jaclang/vendor/mypy/typeshed/stdlib/ssl.pyi +0 -537
- jaclang/vendor/mypy/typeshed/stdlib/stat.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/statistics.pyi +0 -132
- jaclang/vendor/mypy/typeshed/stdlib/string.pyi +0 -83
- jaclang/vendor/mypy/typeshed/stdlib/stringprep.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/struct.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/subprocess.pyi +0 -2615
- jaclang/vendor/mypy/typeshed/stdlib/sunau.pyi +0 -86
- jaclang/vendor/mypy/typeshed/stdlib/symbol.pyi +0 -93
- jaclang/vendor/mypy/typeshed/stdlib/symtable.pyi +0 -58
- jaclang/vendor/mypy/typeshed/stdlib/sys/__init__.pyi +0 -373
- jaclang/vendor/mypy/typeshed/stdlib/sys/_monitoring.pyi +0 -52
- jaclang/vendor/mypy/typeshed/stdlib/sysconfig.pyi +0 -48
- jaclang/vendor/mypy/typeshed/stdlib/syslog.pyi +0 -46
- jaclang/vendor/mypy/typeshed/stdlib/tabnanny.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/tarfile.pyi +0 -441
- jaclang/vendor/mypy/typeshed/stdlib/telnetlib.pyi +0 -122
- jaclang/vendor/mypy/typeshed/stdlib/tempfile.pyi +0 -477
- jaclang/vendor/mypy/typeshed/stdlib/termios.pyi +0 -267
- jaclang/vendor/mypy/typeshed/stdlib/textwrap.pyi +0 -103
- jaclang/vendor/mypy/typeshed/stdlib/this.pyi +0 -2
- jaclang/vendor/mypy/typeshed/stdlib/threading.pyi +0 -187
- jaclang/vendor/mypy/typeshed/stdlib/time.pyi +0 -108
- jaclang/vendor/mypy/typeshed/stdlib/timeit.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/__init__.pyi +0 -3654
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/colorchooser.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/commondialog.pyi +0 -14
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/constants.pyi +0 -80
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dialog.pyi +0 -16
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/dnd.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/filedialog.pyi +0 -151
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/font.pyi +0 -116
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/messagebox.pyi +0 -44
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +0 -9
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/simpledialog.pyi +0 -54
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/tix.pyi +0 -299
- jaclang/vendor/mypy/typeshed/stdlib/tkinter/ttk.pyi +0 -1204
- jaclang/vendor/mypy/typeshed/stdlib/token.pyi +0 -159
- jaclang/vendor/mypy/typeshed/stdlib/tokenize.pyi +0 -177
- jaclang/vendor/mypy/typeshed/stdlib/tomllib.pyi +0 -10
- jaclang/vendor/mypy/typeshed/stdlib/trace.pyi +0 -79
- jaclang/vendor/mypy/typeshed/stdlib/traceback.pyi +0 -262
- jaclang/vendor/mypy/typeshed/stdlib/tracemalloc.pyi +0 -124
- jaclang/vendor/mypy/typeshed/stdlib/tty.pyi +0 -30
- jaclang/vendor/mypy/typeshed/stdlib/turtle.pyi +0 -713
- jaclang/vendor/mypy/typeshed/stdlib/types.pyi +0 -614
- jaclang/vendor/mypy/typeshed/stdlib/typing.pyi +0 -976
- jaclang/vendor/mypy/typeshed/stdlib/typing_extensions.pyi +0 -509
- jaclang/vendor/mypy/typeshed/stdlib/unicodedata.pyi +0 -73
- jaclang/vendor/mypy/typeshed/stdlib/unittest/__init__.pyi +0 -67
- jaclang/vendor/mypy/typeshed/stdlib/unittest/_log.pyi +0 -27
- jaclang/vendor/mypy/typeshed/stdlib/unittest/async_case.pyi +0 -21
- jaclang/vendor/mypy/typeshed/stdlib/unittest/case.pyi +0 -342
- jaclang/vendor/mypy/typeshed/stdlib/unittest/loader.pyi +0 -51
- jaclang/vendor/mypy/typeshed/stdlib/unittest/main.pyi +0 -69
- jaclang/vendor/mypy/typeshed/stdlib/unittest/mock.pyi +0 -430
- jaclang/vendor/mypy/typeshed/stdlib/unittest/result.pyi +0 -47
- jaclang/vendor/mypy/typeshed/stdlib/unittest/runner.pyi +0 -72
- jaclang/vendor/mypy/typeshed/stdlib/unittest/signals.pyi +0 -15
- jaclang/vendor/mypy/typeshed/stdlib/unittest/suite.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/unittest/util.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/urllib/error.pyi +0 -23
- jaclang/vendor/mypy/typeshed/stdlib/urllib/parse.pyi +0 -210
- jaclang/vendor/mypy/typeshed/stdlib/urllib/request.pyi +0 -400
- jaclang/vendor/mypy/typeshed/stdlib/urllib/response.pyi +0 -43
- jaclang/vendor/mypy/typeshed/stdlib/urllib/robotparser.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/uu.pyi +0 -13
- jaclang/vendor/mypy/typeshed/stdlib/uuid.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/warnings.pyi +0 -112
- jaclang/vendor/mypy/typeshed/stdlib/wave.pyi +0 -85
- jaclang/vendor/mypy/typeshed/stdlib/weakref.pyi +0 -149
- jaclang/vendor/mypy/typeshed/stdlib/webbrowser.pyi +0 -74
- jaclang/vendor/mypy/typeshed/stdlib/winreg.pyi +0 -132
- jaclang/vendor/mypy/typeshed/stdlib/winsound.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/handlers.pyi +0 -91
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/headers.pyi +0 -26
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/simple_server.pyi +0 -37
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/types.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/util.pyi +0 -24
- jaclang/vendor/mypy/typeshed/stdlib/wsgiref/validate.pyi +0 -50
- jaclang/vendor/mypy/typeshed/stdlib/xdrlib.pyi +0 -57
- jaclang/vendor/mypy/typeshed/stdlib/xml/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/__init__.pyi +0 -69
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/domreg.pyi +0 -8
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +0 -100
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minicompat.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/minidom.pyi +0 -404
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/pulldom.pyi +0 -94
- jaclang/vendor/mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +0 -108
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +0 -28
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +0 -34
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +0 -327
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +0 -1
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/__init__.pyi +0 -25
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +0 -19
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/handler.pyi +0 -55
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/saxutils.pyi +0 -60
- jaclang/vendor/mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +0 -87
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/client.pyi +0 -296
- jaclang/vendor/mypy/typeshed/stdlib/xmlrpc/server.pyi +0 -143
- jaclang/vendor/mypy/typeshed/stdlib/xxlimited.pyi +0 -22
- jaclang/vendor/mypy/typeshed/stdlib/zipapp.pyi +0 -20
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/__init__.pyi +0 -306
- jaclang/vendor/mypy/typeshed/stdlib/zipfile/_path.pyi +0 -95
- jaclang/vendor/mypy/typeshed/stdlib/zipimport.pyi +0 -32
- jaclang/vendor/mypy/typeshed/stdlib/zlib.pyi +0 -56
- jaclang/vendor/mypy/typeshed/stdlib/zoneinfo/__init__.pyi +0 -38
- jaclang/vendor/mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +0 -218
- jaclang/vendor/mypy/typestate.py +0 -323
- jaclang/vendor/mypy/typetraverser.py +0 -148
- jaclang/vendor/mypy/typevars.py +0 -93
- jaclang/vendor/mypy/typevartuples.py +0 -32
- jaclang/vendor/mypy/util.py +0 -869
- jaclang/vendor/mypy/version.py +0 -1
- jaclang/vendor/mypy/visitor.py +0 -621
- jaclang/vendor/mypy/xml/mypy-html.css +0 -104
- jaclang/vendor/mypy/xml/mypy-html.xslt +0 -81
- jaclang/vendor/mypy/xml/mypy-txt.xslt +0 -100
- jaclang/vendor/mypy/xml/mypy.xsd +0 -50
- jaclang/vendor/mypy-1.10.0.dist-info/LICENSE +0 -229
- jaclang/vendor/mypy-1.10.0.dist-info/METADATA +0 -48
- jaclang/vendor/mypy-1.10.0.dist-info/RECORD +0 -1241
- jaclang/vendor/mypy-1.10.0.dist-info/WHEEL +0 -6
- jaclang/vendor/mypy-1.10.0.dist-info/entry_points.txt +0 -6
- jaclang/vendor/mypy-1.10.0.dist-info/top_level.txt +0 -3
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/LICENSE +0 -27
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/METADATA +0 -29
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/RECORD +0 -6
- jaclang/vendor/mypy_extensions-1.0.0.dist-info/top_level.txt +0 -1
- jaclang/vendor/mypy_extensions.py +0 -213
- jaclang/vendor/mypyc/README.md +0 -133
- jaclang/vendor/mypyc/__init__.py +0 -0
- jaclang/vendor/mypyc/__main__.py +0 -57
- jaclang/vendor/mypyc/analysis/__init__.py +0 -0
- jaclang/vendor/mypyc/analysis/attrdefined.py +0 -436
- jaclang/vendor/mypyc/analysis/blockfreq.py +0 -32
- jaclang/vendor/mypyc/analysis/dataflow.py +0 -628
- jaclang/vendor/mypyc/analysis/ircheck.py +0 -433
- jaclang/vendor/mypyc/analysis/selfleaks.py +0 -211
- jaclang/vendor/mypyc/build.py +0 -616
- jaclang/vendor/mypyc/codegen/__init__.py +0 -0
- jaclang/vendor/mypyc/codegen/cstring.py +0 -54
- jaclang/vendor/mypyc/codegen/emit.py +0 -1193
- jaclang/vendor/mypyc/codegen/emitclass.py +0 -1060
- jaclang/vendor/mypyc/codegen/emitfunc.py +0 -852
- jaclang/vendor/mypyc/codegen/emitmodule.py +0 -1136
- jaclang/vendor/mypyc/codegen/emitwrapper.py +0 -979
- jaclang/vendor/mypyc/codegen/literals.py +0 -302
- jaclang/vendor/mypyc/common.py +0 -136
- jaclang/vendor/mypyc/crash.py +0 -31
- jaclang/vendor/mypyc/doc/Makefile +0 -20
- jaclang/vendor/mypyc/doc/bool_operations.rst +0 -27
- jaclang/vendor/mypyc/doc/compilation_units.rst +0 -20
- jaclang/vendor/mypyc/doc/conf.py +0 -59
- jaclang/vendor/mypyc/doc/cpython-timings.md +0 -25
- jaclang/vendor/mypyc/doc/dev-intro.md +0 -548
- jaclang/vendor/mypyc/doc/dict_operations.rst +0 -59
- jaclang/vendor/mypyc/doc/differences_from_python.rst +0 -332
- jaclang/vendor/mypyc/doc/float_operations.rst +0 -50
- jaclang/vendor/mypyc/doc/future.md +0 -42
- jaclang/vendor/mypyc/doc/getting_started.rst +0 -240
- jaclang/vendor/mypyc/doc/index.rst +0 -61
- jaclang/vendor/mypyc/doc/int_operations.rst +0 -162
- jaclang/vendor/mypyc/doc/introduction.rst +0 -150
- jaclang/vendor/mypyc/doc/list_operations.rst +0 -65
- jaclang/vendor/mypyc/doc/make.bat +0 -35
- jaclang/vendor/mypyc/doc/native_classes.rst +0 -206
- jaclang/vendor/mypyc/doc/native_operations.rst +0 -55
- jaclang/vendor/mypyc/doc/performance_tips_and_tricks.rst +0 -244
- jaclang/vendor/mypyc/doc/set_operations.rst +0 -47
- jaclang/vendor/mypyc/doc/str_operations.rst +0 -35
- jaclang/vendor/mypyc/doc/tuple_operations.rst +0 -33
- jaclang/vendor/mypyc/doc/using_type_annotations.rst +0 -398
- jaclang/vendor/mypyc/errors.py +0 -29
- jaclang/vendor/mypyc/external/googletest/LICENSE +0 -28
- jaclang/vendor/mypyc/external/googletest/README.md +0 -280
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-death-test.h +0 -294
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-message.h +0 -250
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h +0 -1444
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +0 -510
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-printers.h +0 -993
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-spi.h +0 -232
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-test-part.h +0 -179
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest-typed-test.h +0 -263
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest.h +0 -2236
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_pred_impl.h +0 -358
- jaclang/vendor/mypyc/external/googletest/include/gtest/gtest_prod.h +0 -58
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +0 -69
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +0 -42
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/custom/gtest.h +0 -41
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +0 -319
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +0 -206
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-internal.h +0 -1238
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +0 -243
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +0 -5146
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +0 -286
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +0 -731
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +0 -93
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-port.h +0 -2560
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-string.h +0 -167
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +0 -1020
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +0 -347
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +0 -3331
- jaclang/vendor/mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +0 -297
- jaclang/vendor/mypyc/external/googletest/make/Makefile +0 -61
- jaclang/vendor/mypyc/external/googletest/src/gtest-all.cc +0 -48
- jaclang/vendor/mypyc/external/googletest/src/gtest-death-test.cc +0 -1342
- jaclang/vendor/mypyc/external/googletest/src/gtest-filepath.cc +0 -387
- jaclang/vendor/mypyc/external/googletest/src/gtest-internal-inl.h +0 -1183
- jaclang/vendor/mypyc/external/googletest/src/gtest-port.cc +0 -1259
- jaclang/vendor/mypyc/external/googletest/src/gtest-printers.cc +0 -373
- jaclang/vendor/mypyc/external/googletest/src/gtest-test-part.cc +0 -110
- jaclang/vendor/mypyc/external/googletest/src/gtest-typed-test.cc +0 -118
- jaclang/vendor/mypyc/external/googletest/src/gtest.cc +0 -5388
- jaclang/vendor/mypyc/external/googletest/src/gtest_main.cc +0 -38
- jaclang/vendor/mypyc/ir/__init__.py +0 -0
- jaclang/vendor/mypyc/ir/class_ir.py +0 -499
- jaclang/vendor/mypyc/ir/func_ir.py +0 -370
- jaclang/vendor/mypyc/ir/module_ir.py +0 -88
- jaclang/vendor/mypyc/ir/ops.py +0 -1727
- jaclang/vendor/mypyc/ir/pprint.py +0 -516
- jaclang/vendor/mypyc/ir/rtypes.py +0 -1038
- jaclang/vendor/mypyc/irbuild/__init__.py +0 -0
- jaclang/vendor/mypyc/irbuild/ast_helpers.py +0 -123
- jaclang/vendor/mypyc/irbuild/builder.py +0 -1394
- jaclang/vendor/mypyc/irbuild/callable_class.py +0 -173
- jaclang/vendor/mypyc/irbuild/classdef.py +0 -850
- jaclang/vendor/mypyc/irbuild/constant_fold.py +0 -95
- jaclang/vendor/mypyc/irbuild/context.py +0 -186
- jaclang/vendor/mypyc/irbuild/env_class.py +0 -223
- jaclang/vendor/mypyc/irbuild/expression.py +0 -1070
- jaclang/vendor/mypyc/irbuild/for_helpers.py +0 -1075
- jaclang/vendor/mypyc/irbuild/format_str_tokenizer.py +0 -250
- jaclang/vendor/mypyc/irbuild/function.py +0 -1088
- jaclang/vendor/mypyc/irbuild/generator.py +0 -346
- jaclang/vendor/mypyc/irbuild/ll_builder.py +0 -2389
- jaclang/vendor/mypyc/irbuild/main.py +0 -153
- jaclang/vendor/mypyc/irbuild/mapper.py +0 -221
- jaclang/vendor/mypyc/irbuild/match.py +0 -355
- jaclang/vendor/mypyc/irbuild/nonlocalcontrol.py +0 -197
- jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +0 -203
- jaclang/vendor/mypyc/irbuild/prepare.py +0 -609
- jaclang/vendor/mypyc/irbuild/specialize.py +0 -822
- jaclang/vendor/mypyc/irbuild/statement.py +0 -1017
- jaclang/vendor/mypyc/irbuild/targets.py +0 -57
- jaclang/vendor/mypyc/irbuild/util.py +0 -189
- jaclang/vendor/mypyc/irbuild/visitor.py +0 -401
- jaclang/vendor/mypyc/irbuild/vtable.py +0 -82
- jaclang/vendor/mypyc/lib-rt/CPy.h +0 -638
- jaclang/vendor/mypyc/lib-rt/bytes_ops.c +0 -143
- jaclang/vendor/mypyc/lib-rt/dict_ops.c +0 -446
- jaclang/vendor/mypyc/lib-rt/exc_ops.c +0 -259
- jaclang/vendor/mypyc/lib-rt/float_ops.c +0 -192
- jaclang/vendor/mypyc/lib-rt/generic_ops.c +0 -64
- jaclang/vendor/mypyc/lib-rt/getargs.c +0 -450
- jaclang/vendor/mypyc/lib-rt/getargsfast.c +0 -569
- jaclang/vendor/mypyc/lib-rt/init.c +0 -13
- jaclang/vendor/mypyc/lib-rt/int_ops.c +0 -803
- jaclang/vendor/mypyc/lib-rt/list_ops.c +0 -335
- jaclang/vendor/mypyc/lib-rt/misc_ops.c +0 -942
- jaclang/vendor/mypyc/lib-rt/module_shim.tmpl +0 -18
- jaclang/vendor/mypyc/lib-rt/mypyc_util.h +0 -118
- jaclang/vendor/mypyc/lib-rt/pythoncapi_compat.h +0 -497
- jaclang/vendor/mypyc/lib-rt/pythonsupport.h +0 -533
- jaclang/vendor/mypyc/lib-rt/set_ops.c +0 -17
- jaclang/vendor/mypyc/lib-rt/setup.py +0 -70
- jaclang/vendor/mypyc/lib-rt/str_ops.c +0 -241
- jaclang/vendor/mypyc/lib-rt/test_capi.cc +0 -585
- jaclang/vendor/mypyc/lib-rt/tuple_ops.c +0 -61
- jaclang/vendor/mypyc/lower/__init__.py +0 -0
- jaclang/vendor/mypyc/lower/int_ops.py +0 -113
- jaclang/vendor/mypyc/lower/list_ops.py +0 -45
- jaclang/vendor/mypyc/lower/misc_ops.py +0 -12
- jaclang/vendor/mypyc/lower/registry.py +0 -26
- jaclang/vendor/mypyc/namegen.py +0 -115
- jaclang/vendor/mypyc/options.py +0 -32
- jaclang/vendor/mypyc/primitives/__init__.py +0 -0
- jaclang/vendor/mypyc/primitives/bytes_ops.py +0 -101
- jaclang/vendor/mypyc/primitives/dict_ops.py +0 -325
- jaclang/vendor/mypyc/primitives/exc_ops.py +0 -101
- jaclang/vendor/mypyc/primitives/float_ops.py +0 -168
- jaclang/vendor/mypyc/primitives/generic_ops.py +0 -384
- jaclang/vendor/mypyc/primitives/int_ops.py +0 -303
- jaclang/vendor/mypyc/primitives/list_ops.py +0 -310
- jaclang/vendor/mypyc/primitives/misc_ops.py +0 -267
- jaclang/vendor/mypyc/primitives/registry.py +0 -360
- jaclang/vendor/mypyc/primitives/set_ops.py +0 -121
- jaclang/vendor/mypyc/primitives/str_ops.py +0 -229
- jaclang/vendor/mypyc/primitives/tuple_ops.py +0 -83
- jaclang/vendor/mypyc/rt_subtype.py +0 -77
- jaclang/vendor/mypyc/sametype.py +0 -83
- jaclang/vendor/mypyc/subtype.py +0 -88
- jaclang/vendor/mypyc/test/__init__.py +0 -0
- jaclang/vendor/mypyc/test/config.py +0 -13
- jaclang/vendor/mypyc/test/test_alwaysdefined.py +0 -46
- jaclang/vendor/mypyc/test/test_analysis.py +0 -77
- jaclang/vendor/mypyc/test/test_cheader.py +0 -53
- jaclang/vendor/mypyc/test/test_commandline.py +0 -82
- jaclang/vendor/mypyc/test/test_emit.py +0 -69
- jaclang/vendor/mypyc/test/test_emitclass.py +0 -35
- jaclang/vendor/mypyc/test/test_emitfunc.py +0 -928
- jaclang/vendor/mypyc/test/test_emitwrapper.py +0 -60
- jaclang/vendor/mypyc/test/test_exceptions.py +0 -56
- jaclang/vendor/mypyc/test/test_external.py +0 -49
- jaclang/vendor/mypyc/test/test_irbuild.py +0 -87
- jaclang/vendor/mypyc/test/test_ircheck.py +0 -199
- jaclang/vendor/mypyc/test/test_literals.py +0 -90
- jaclang/vendor/mypyc/test/test_lowering.py +0 -56
- jaclang/vendor/mypyc/test/test_namegen.py +0 -48
- jaclang/vendor/mypyc/test/test_optimizations.py +0 -68
- jaclang/vendor/mypyc/test/test_pprint.py +0 -42
- jaclang/vendor/mypyc/test/test_rarray.py +0 -48
- jaclang/vendor/mypyc/test/test_refcount.py +0 -59
- jaclang/vendor/mypyc/test/test_run.py +0 -426
- jaclang/vendor/mypyc/test/test_serialization.py +0 -108
- jaclang/vendor/mypyc/test/test_struct.py +0 -112
- jaclang/vendor/mypyc/test/test_tuplename.py +0 -33
- jaclang/vendor/mypyc/test/test_typeops.py +0 -97
- jaclang/vendor/mypyc/test/testutil.py +0 -283
- jaclang/vendor/mypyc/test-data/alwaysdefined.test +0 -732
- jaclang/vendor/mypyc/test-data/analysis.test +0 -470
- jaclang/vendor/mypyc/test-data/commandline.test +0 -245
- jaclang/vendor/mypyc/test-data/driver/driver.py +0 -48
- jaclang/vendor/mypyc/test-data/exceptions-freq.test +0 -125
- jaclang/vendor/mypyc/test-data/exceptions.test +0 -699
- jaclang/vendor/mypyc/test-data/fixtures/ir.py +0 -373
- jaclang/vendor/mypyc/test-data/fixtures/testutil.py +0 -103
- jaclang/vendor/mypyc/test-data/fixtures/typing-full.pyi +0 -169
- jaclang/vendor/mypyc/test-data/irbuild-any.test +0 -236
- jaclang/vendor/mypyc/test-data/irbuild-basic.test +0 -3399
- jaclang/vendor/mypyc/test-data/irbuild-bool.test +0 -424
- jaclang/vendor/mypyc/test-data/irbuild-bytes.test +0 -181
- jaclang/vendor/mypyc/test-data/irbuild-classes.test +0 -1302
- jaclang/vendor/mypyc/test-data/irbuild-constant-fold.test +0 -480
- jaclang/vendor/mypyc/test-data/irbuild-dict.test +0 -584
- jaclang/vendor/mypyc/test-data/irbuild-dunders.test +0 -215
- jaclang/vendor/mypyc/test-data/irbuild-float.test +0 -497
- jaclang/vendor/mypyc/test-data/irbuild-generics.test +0 -150
- jaclang/vendor/mypyc/test-data/irbuild-glue-methods.test +0 -437
- jaclang/vendor/mypyc/test-data/irbuild-i16.test +0 -526
- jaclang/vendor/mypyc/test-data/irbuild-i32.test +0 -598
- jaclang/vendor/mypyc/test-data/irbuild-i64.test +0 -2144
- jaclang/vendor/mypyc/test-data/irbuild-int.test +0 -194
- jaclang/vendor/mypyc/test-data/irbuild-isinstance.test +0 -109
- jaclang/vendor/mypyc/test-data/irbuild-lists.test +0 -513
- jaclang/vendor/mypyc/test-data/irbuild-match.test +0 -1717
- jaclang/vendor/mypyc/test-data/irbuild-math.test +0 -64
- jaclang/vendor/mypyc/test-data/irbuild-nested.test +0 -807
- jaclang/vendor/mypyc/test-data/irbuild-optional.test +0 -536
- jaclang/vendor/mypyc/test-data/irbuild-set.test +0 -806
- jaclang/vendor/mypyc/test-data/irbuild-singledispatch.test +0 -257
- jaclang/vendor/mypyc/test-data/irbuild-statements.test +0 -1060
- jaclang/vendor/mypyc/test-data/irbuild-str.test +0 -312
- jaclang/vendor/mypyc/test-data/irbuild-strip-asserts.test +0 -12
- jaclang/vendor/mypyc/test-data/irbuild-try.test +0 -523
- jaclang/vendor/mypyc/test-data/irbuild-tuple.test +0 -386
- jaclang/vendor/mypyc/test-data/irbuild-u8.test +0 -543
- jaclang/vendor/mypyc/test-data/irbuild-unreachable.test +0 -241
- jaclang/vendor/mypyc/test-data/irbuild-vectorcall.test +0 -153
- jaclang/vendor/mypyc/test-data/lowering-int.test +0 -377
- jaclang/vendor/mypyc/test-data/lowering-list.test +0 -33
- jaclang/vendor/mypyc/test-data/opt-copy-propagation.test +0 -400
- jaclang/vendor/mypyc/test-data/opt-flag-elimination.test +0 -296
- jaclang/vendor/mypyc/test-data/refcount.test +0 -1482
- jaclang/vendor/mypyc/test-data/run-async.test +0 -173
- jaclang/vendor/mypyc/test-data/run-attrs.test +0 -318
- jaclang/vendor/mypyc/test-data/run-bench.test +0 -196
- jaclang/vendor/mypyc/test-data/run-bools.test +0 -229
- jaclang/vendor/mypyc/test-data/run-bytes.test +0 -302
- jaclang/vendor/mypyc/test-data/run-classes.test +0 -2505
- jaclang/vendor/mypyc/test-data/run-dicts.test +0 -334
- jaclang/vendor/mypyc/test-data/run-dunders.test +0 -945
- jaclang/vendor/mypyc/test-data/run-exceptions.test +0 -448
- jaclang/vendor/mypyc/test-data/run-floats.test +0 -516
- jaclang/vendor/mypyc/test-data/run-functions.test +0 -1310
- jaclang/vendor/mypyc/test-data/run-generators.test +0 -682
- jaclang/vendor/mypyc/test-data/run-i16.test +0 -338
- jaclang/vendor/mypyc/test-data/run-i32.test +0 -336
- jaclang/vendor/mypyc/test-data/run-i64.test +0 -1519
- jaclang/vendor/mypyc/test-data/run-imports.test +0 -265
- jaclang/vendor/mypyc/test-data/run-integers.test +0 -540
- jaclang/vendor/mypyc/test-data/run-lists.test +0 -411
- jaclang/vendor/mypyc/test-data/run-loops.test +0 -485
- jaclang/vendor/mypyc/test-data/run-match.test +0 -283
- jaclang/vendor/mypyc/test-data/run-math.test +0 -106
- jaclang/vendor/mypyc/test-data/run-misc.test +0 -1170
- jaclang/vendor/mypyc/test-data/run-multimodule.test +0 -887
- jaclang/vendor/mypyc/test-data/run-mypy-sim.test +0 -138
- jaclang/vendor/mypyc/test-data/run-primitives.test +0 -375
- jaclang/vendor/mypyc/test-data/run-python37.test +0 -159
- jaclang/vendor/mypyc/test-data/run-python38.test +0 -88
- jaclang/vendor/mypyc/test-data/run-sets.test +0 -150
- jaclang/vendor/mypyc/test-data/run-singledispatch.test +0 -698
- jaclang/vendor/mypyc/test-data/run-strings.test +0 -641
- jaclang/vendor/mypyc/test-data/run-traits.test +0 -411
- jaclang/vendor/mypyc/test-data/run-tuples.test +0 -258
- jaclang/vendor/mypyc/test-data/run-u8.test +0 -303
- jaclang/vendor/mypyc/transform/__init__.py +0 -0
- jaclang/vendor/mypyc/transform/copy_propagation.py +0 -94
- jaclang/vendor/mypyc/transform/exceptions.py +0 -182
- jaclang/vendor/mypyc/transform/flag_elimination.py +0 -108
- jaclang/vendor/mypyc/transform/ir_transform.py +0 -368
- jaclang/vendor/mypyc/transform/lower.py +0 -33
- jaclang/vendor/mypyc/transform/refcount.py +0 -294
- jaclang/vendor/mypyc/transform/uninit.py +0 -190
- jaclang/vendor/typing_extensions-4.12.2.dist-info/LICENSE +0 -279
- jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA +0 -67
- jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD +0 -5
- jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL +0 -4
- jaclang/vendor/typing_extensions.py +0 -3641
- jaclang-0.7.34.dist-info/RECORD +0 -1563
- /jaclang/{vendor/mypy/dmypy → compiler/larkparse}/__init__.py +0 -0
- /jaclang/{tests → compiler/passes/main/tests}/fixtures/access_checker.jac +0 -0
- /jaclang/langserve/{__init__.py → __init__.jac} +0 -0
- /jaclang/{vendor/mypy/plugins/__init__.py → langserve/tests/fixtures/deep_check_crash.jac} +0 -0
- /jaclang/{vendor/mypy/server/__init__.py → langserve/tests/server_test/code_test.py} +0 -0
- /jaclang/{plugin → runtimelib}/tests/__init__.py +0 -0
- /jaclang/{vendor/mypy/test → tests}/__init__.py +0 -0
- /jaclang/{vendor/mypy/test/meta → tests/fixtures}/__init__.py +0 -0
- /jaclang/tests/fixtures/{architype_def_bug.jac → archetype_def_bug.jac} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/concurrent/__init__.pyi → attrs-25.3.0.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{attrs-23.2.0.dist-info → attrs-25.3.0.dist-info}/licenses/LICENSE +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/__init__.pyi → cattrs-24.1.3.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{cattrs-23.2.3.dist-info → cattrs-24.1.3.dist-info}/licenses/LICENSE +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi → lark-1.2.2.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/entry_points.txt +0 -0
- /jaclang/vendor/{lark-1.1.9.dist-info → lark-1.2.2.dist-info}/top_level.txt +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/email/mime/__init__.pyi → lsprotocol-2023.0.1.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/lsprotocol-2023.0.1.dist-info/{LICENSE → licenses/LICENSE} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/__init__.pyi → pluggy-1.5.0.dist-info/REQUESTED} +0 -0
- /jaclang/vendor/pluggy-1.5.0.dist-info/{LICENSE → licenses/LICENSE} +0 -0
- /jaclang/vendor/{mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi → pygls-1.3.1.dist-info/REQUESTED} +0 -0
- {jaclang-0.7.34.dist-info → jaclang-0.8.1.dist-info}/entry_points.txt +0 -0
jaclang/vendor/mypy/subtypes.py
DELETED
|
@@ -1,1980 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from contextlib import contextmanager
|
|
4
|
-
from typing import Any, Callable, Final, Iterator, List, TypeVar, cast
|
|
5
|
-
from typing_extensions import TypeAlias as _TypeAlias
|
|
6
|
-
|
|
7
|
-
import mypy.applytype
|
|
8
|
-
import mypy.constraints
|
|
9
|
-
import mypy.typeops
|
|
10
|
-
from mypy.erasetype import erase_type
|
|
11
|
-
from mypy.expandtype import expand_self_type, expand_type_by_instance
|
|
12
|
-
from mypy.maptype import map_instance_to_supertype
|
|
13
|
-
|
|
14
|
-
# Circular import; done in the function instead.
|
|
15
|
-
# import mypy.solve
|
|
16
|
-
from mypy.nodes import (
|
|
17
|
-
ARG_STAR,
|
|
18
|
-
ARG_STAR2,
|
|
19
|
-
CONTRAVARIANT,
|
|
20
|
-
COVARIANT,
|
|
21
|
-
INVARIANT,
|
|
22
|
-
Decorator,
|
|
23
|
-
FuncBase,
|
|
24
|
-
OverloadedFuncDef,
|
|
25
|
-
TypeInfo,
|
|
26
|
-
Var,
|
|
27
|
-
)
|
|
28
|
-
from mypy.options import Options
|
|
29
|
-
from mypy.state import state
|
|
30
|
-
from mypy.types import (
|
|
31
|
-
MYPYC_NATIVE_INT_NAMES,
|
|
32
|
-
TUPLE_LIKE_INSTANCE_NAMES,
|
|
33
|
-
TYPED_NAMEDTUPLE_NAMES,
|
|
34
|
-
AnyType,
|
|
35
|
-
CallableType,
|
|
36
|
-
DeletedType,
|
|
37
|
-
ErasedType,
|
|
38
|
-
FormalArgument,
|
|
39
|
-
FunctionLike,
|
|
40
|
-
Instance,
|
|
41
|
-
LiteralType,
|
|
42
|
-
NoneType,
|
|
43
|
-
NormalizedCallableType,
|
|
44
|
-
Overloaded,
|
|
45
|
-
Parameters,
|
|
46
|
-
ParamSpecType,
|
|
47
|
-
PartialType,
|
|
48
|
-
ProperType,
|
|
49
|
-
TupleType,
|
|
50
|
-
Type,
|
|
51
|
-
TypeAliasType,
|
|
52
|
-
TypedDictType,
|
|
53
|
-
TypeOfAny,
|
|
54
|
-
TypeType,
|
|
55
|
-
TypeVarTupleType,
|
|
56
|
-
TypeVarType,
|
|
57
|
-
TypeVisitor,
|
|
58
|
-
UnboundType,
|
|
59
|
-
UninhabitedType,
|
|
60
|
-
UnionType,
|
|
61
|
-
UnpackType,
|
|
62
|
-
find_unpack_in_list,
|
|
63
|
-
get_proper_type,
|
|
64
|
-
is_named_instance,
|
|
65
|
-
split_with_prefix_and_suffix,
|
|
66
|
-
)
|
|
67
|
-
from mypy.types_utils import flatten_types
|
|
68
|
-
from mypy.typestate import SubtypeKind, type_state
|
|
69
|
-
from mypy.typevars import fill_typevars_with_any
|
|
70
|
-
|
|
71
|
-
# Flags for detected protocol members
|
|
72
|
-
IS_SETTABLE: Final = 1
|
|
73
|
-
IS_CLASSVAR: Final = 2
|
|
74
|
-
IS_CLASS_OR_STATIC: Final = 3
|
|
75
|
-
IS_VAR: Final = 4
|
|
76
|
-
|
|
77
|
-
TypeParameterChecker: _TypeAlias = Callable[[Type, Type, int, bool, "SubtypeContext"], bool]
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class SubtypeContext:
|
|
81
|
-
def __init__(
|
|
82
|
-
self,
|
|
83
|
-
*,
|
|
84
|
-
# Non-proper subtype flags
|
|
85
|
-
ignore_type_params: bool = False,
|
|
86
|
-
ignore_pos_arg_names: bool = False,
|
|
87
|
-
ignore_declared_variance: bool = False,
|
|
88
|
-
# Supported for both proper and non-proper
|
|
89
|
-
ignore_promotions: bool = False,
|
|
90
|
-
ignore_uninhabited: bool = False,
|
|
91
|
-
# Proper subtype flags
|
|
92
|
-
erase_instances: bool = False,
|
|
93
|
-
keep_erased_types: bool = False,
|
|
94
|
-
options: Options | None = None,
|
|
95
|
-
) -> None:
|
|
96
|
-
self.ignore_type_params = ignore_type_params
|
|
97
|
-
self.ignore_pos_arg_names = ignore_pos_arg_names
|
|
98
|
-
self.ignore_declared_variance = ignore_declared_variance
|
|
99
|
-
self.ignore_promotions = ignore_promotions
|
|
100
|
-
self.ignore_uninhabited = ignore_uninhabited
|
|
101
|
-
self.erase_instances = erase_instances
|
|
102
|
-
self.keep_erased_types = keep_erased_types
|
|
103
|
-
self.options = options
|
|
104
|
-
|
|
105
|
-
def check_context(self, proper_subtype: bool) -> None:
|
|
106
|
-
# Historically proper and non-proper subtypes were defined using different helpers
|
|
107
|
-
# and different visitors. Check if flag values are such that we definitely support.
|
|
108
|
-
if proper_subtype:
|
|
109
|
-
assert not self.ignore_pos_arg_names and not self.ignore_declared_variance
|
|
110
|
-
else:
|
|
111
|
-
assert not self.erase_instances and not self.keep_erased_types
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def is_subtype(
|
|
115
|
-
left: Type,
|
|
116
|
-
right: Type,
|
|
117
|
-
*,
|
|
118
|
-
subtype_context: SubtypeContext | None = None,
|
|
119
|
-
ignore_type_params: bool = False,
|
|
120
|
-
ignore_pos_arg_names: bool = False,
|
|
121
|
-
ignore_declared_variance: bool = False,
|
|
122
|
-
ignore_promotions: bool = False,
|
|
123
|
-
ignore_uninhabited: bool = False,
|
|
124
|
-
options: Options | None = None,
|
|
125
|
-
) -> bool:
|
|
126
|
-
"""Is 'left' subtype of 'right'?
|
|
127
|
-
|
|
128
|
-
Also consider Any to be a subtype of any type, and vice versa. This
|
|
129
|
-
recursively applies to components of composite types (List[int] is subtype
|
|
130
|
-
of List[Any], for example).
|
|
131
|
-
|
|
132
|
-
type_parameter_checker is used to check the type parameters (for example,
|
|
133
|
-
A with B in is_subtype(C[A], C[B]). The default checks for subtype relation
|
|
134
|
-
between the type arguments (e.g., A and B), taking the variance of the
|
|
135
|
-
type var into account.
|
|
136
|
-
"""
|
|
137
|
-
if subtype_context is None:
|
|
138
|
-
subtype_context = SubtypeContext(
|
|
139
|
-
ignore_type_params=ignore_type_params,
|
|
140
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
141
|
-
ignore_declared_variance=ignore_declared_variance,
|
|
142
|
-
ignore_promotions=ignore_promotions,
|
|
143
|
-
ignore_uninhabited=ignore_uninhabited,
|
|
144
|
-
options=options,
|
|
145
|
-
)
|
|
146
|
-
else:
|
|
147
|
-
assert not any(
|
|
148
|
-
{
|
|
149
|
-
ignore_type_params,
|
|
150
|
-
ignore_pos_arg_names,
|
|
151
|
-
ignore_declared_variance,
|
|
152
|
-
ignore_promotions,
|
|
153
|
-
ignore_uninhabited,
|
|
154
|
-
options,
|
|
155
|
-
}
|
|
156
|
-
), "Don't pass both context and individual flags"
|
|
157
|
-
if type_state.is_assumed_subtype(left, right):
|
|
158
|
-
return True
|
|
159
|
-
if mypy.typeops.is_recursive_pair(left, right):
|
|
160
|
-
# This case requires special care because it may cause infinite recursion.
|
|
161
|
-
# Our view on recursive types is known under a fancy name of iso-recursive mu-types.
|
|
162
|
-
# Roughly this means that a recursive type is defined as an alias where right hand side
|
|
163
|
-
# can refer to the type as a whole, for example:
|
|
164
|
-
# A = Union[int, Tuple[A, ...]]
|
|
165
|
-
# and an alias unrolled once represents the *same type*, in our case all these represent
|
|
166
|
-
# the same type:
|
|
167
|
-
# A
|
|
168
|
-
# Union[int, Tuple[A, ...]]
|
|
169
|
-
# Union[int, Tuple[Union[int, Tuple[A, ...]], ...]]
|
|
170
|
-
# The algorithm for subtyping is then essentially under the assumption that left <: right,
|
|
171
|
-
# check that get_proper_type(left) <: get_proper_type(right). On the example above,
|
|
172
|
-
# If we start with:
|
|
173
|
-
# A = Union[int, Tuple[A, ...]]
|
|
174
|
-
# B = Union[int, Tuple[B, ...]]
|
|
175
|
-
# When checking if A <: B we push pair (A, B) onto 'assuming' stack, then when after few
|
|
176
|
-
# steps we come back to initial call is_subtype(A, B) and immediately return True.
|
|
177
|
-
with pop_on_exit(type_state.get_assumptions(is_proper=False), left, right):
|
|
178
|
-
return _is_subtype(left, right, subtype_context, proper_subtype=False)
|
|
179
|
-
return _is_subtype(left, right, subtype_context, proper_subtype=False)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
def is_proper_subtype(
|
|
183
|
-
left: Type,
|
|
184
|
-
right: Type,
|
|
185
|
-
*,
|
|
186
|
-
subtype_context: SubtypeContext | None = None,
|
|
187
|
-
ignore_promotions: bool = False,
|
|
188
|
-
ignore_uninhabited: bool = False,
|
|
189
|
-
erase_instances: bool = False,
|
|
190
|
-
keep_erased_types: bool = False,
|
|
191
|
-
) -> bool:
|
|
192
|
-
"""Is left a proper subtype of right?
|
|
193
|
-
|
|
194
|
-
For proper subtypes, there's no need to rely on compatibility due to
|
|
195
|
-
Any types. Every usable type is a proper subtype of itself.
|
|
196
|
-
|
|
197
|
-
If erase_instances is True, erase left instance *after* mapping it to supertype
|
|
198
|
-
(this is useful for runtime isinstance() checks). If keep_erased_types is True,
|
|
199
|
-
do not consider ErasedType a subtype of all types (used by type inference against unions).
|
|
200
|
-
"""
|
|
201
|
-
if subtype_context is None:
|
|
202
|
-
subtype_context = SubtypeContext(
|
|
203
|
-
ignore_promotions=ignore_promotions,
|
|
204
|
-
ignore_uninhabited=ignore_uninhabited,
|
|
205
|
-
erase_instances=erase_instances,
|
|
206
|
-
keep_erased_types=keep_erased_types,
|
|
207
|
-
)
|
|
208
|
-
else:
|
|
209
|
-
assert not any(
|
|
210
|
-
{
|
|
211
|
-
ignore_promotions,
|
|
212
|
-
ignore_uninhabited,
|
|
213
|
-
erase_instances,
|
|
214
|
-
keep_erased_types,
|
|
215
|
-
ignore_uninhabited,
|
|
216
|
-
}
|
|
217
|
-
), "Don't pass both context and individual flags"
|
|
218
|
-
if type_state.is_assumed_proper_subtype(left, right):
|
|
219
|
-
return True
|
|
220
|
-
if mypy.typeops.is_recursive_pair(left, right):
|
|
221
|
-
# Same as for non-proper subtype, see detailed comment there for explanation.
|
|
222
|
-
with pop_on_exit(type_state.get_assumptions(is_proper=True), left, right):
|
|
223
|
-
return _is_subtype(left, right, subtype_context, proper_subtype=True)
|
|
224
|
-
return _is_subtype(left, right, subtype_context, proper_subtype=True)
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
def is_equivalent(
|
|
228
|
-
a: Type,
|
|
229
|
-
b: Type,
|
|
230
|
-
*,
|
|
231
|
-
ignore_type_params: bool = False,
|
|
232
|
-
ignore_pos_arg_names: bool = False,
|
|
233
|
-
options: Options | None = None,
|
|
234
|
-
subtype_context: SubtypeContext | None = None,
|
|
235
|
-
) -> bool:
|
|
236
|
-
return is_subtype(
|
|
237
|
-
a,
|
|
238
|
-
b,
|
|
239
|
-
ignore_type_params=ignore_type_params,
|
|
240
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
241
|
-
options=options,
|
|
242
|
-
subtype_context=subtype_context,
|
|
243
|
-
) and is_subtype(
|
|
244
|
-
b,
|
|
245
|
-
a,
|
|
246
|
-
ignore_type_params=ignore_type_params,
|
|
247
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
248
|
-
options=options,
|
|
249
|
-
subtype_context=subtype_context,
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
def is_same_type(
|
|
254
|
-
a: Type, b: Type, ignore_promotions: bool = True, subtype_context: SubtypeContext | None = None
|
|
255
|
-
) -> bool:
|
|
256
|
-
"""Are these types proper subtypes of each other?
|
|
257
|
-
|
|
258
|
-
This means types may have different representation (e.g. an alias, or
|
|
259
|
-
a non-simplified union) but are semantically exchangeable in all contexts.
|
|
260
|
-
"""
|
|
261
|
-
# First, use fast path for some common types. This is performance-critical.
|
|
262
|
-
if (
|
|
263
|
-
type(a) is Instance
|
|
264
|
-
and type(b) is Instance
|
|
265
|
-
and a.type == b.type
|
|
266
|
-
and len(a.args) == len(b.args)
|
|
267
|
-
and a.last_known_value is b.last_known_value
|
|
268
|
-
):
|
|
269
|
-
return all(is_same_type(x, y) for x, y in zip(a.args, b.args))
|
|
270
|
-
elif isinstance(a, TypeVarType) and isinstance(b, TypeVarType) and a.id == b.id:
|
|
271
|
-
return True
|
|
272
|
-
|
|
273
|
-
# Note that using ignore_promotions=True (default) makes types like int and int64
|
|
274
|
-
# considered not the same type (which is the case at runtime).
|
|
275
|
-
# Also Union[bool, int] (if it wasn't simplified before) will be different
|
|
276
|
-
# from plain int, etc.
|
|
277
|
-
return is_proper_subtype(
|
|
278
|
-
a, b, ignore_promotions=ignore_promotions, subtype_context=subtype_context
|
|
279
|
-
) and is_proper_subtype(
|
|
280
|
-
b, a, ignore_promotions=ignore_promotions, subtype_context=subtype_context
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
# This is a common entry point for subtyping checks (both proper and non-proper).
|
|
285
|
-
# Never call this private function directly, use the public versions.
|
|
286
|
-
def _is_subtype(
|
|
287
|
-
left: Type, right: Type, subtype_context: SubtypeContext, proper_subtype: bool
|
|
288
|
-
) -> bool:
|
|
289
|
-
subtype_context.check_context(proper_subtype)
|
|
290
|
-
orig_right = right
|
|
291
|
-
orig_left = left
|
|
292
|
-
left = get_proper_type(left)
|
|
293
|
-
right = get_proper_type(right)
|
|
294
|
-
|
|
295
|
-
# Note: Unpack type should not be a subtype of Any, since it may represent
|
|
296
|
-
# multiple types. This should always go through the visitor, to check arity.
|
|
297
|
-
if (
|
|
298
|
-
not proper_subtype
|
|
299
|
-
and isinstance(right, (AnyType, UnboundType, ErasedType))
|
|
300
|
-
and not isinstance(left, UnpackType)
|
|
301
|
-
):
|
|
302
|
-
# TODO: should we consider all types proper subtypes of UnboundType and/or
|
|
303
|
-
# ErasedType as we do for non-proper subtyping.
|
|
304
|
-
return True
|
|
305
|
-
|
|
306
|
-
if isinstance(right, UnionType) and not isinstance(left, UnionType):
|
|
307
|
-
# Normally, when 'left' is not itself a union, the only way
|
|
308
|
-
# 'left' can be a subtype of the union 'right' is if it is a
|
|
309
|
-
# subtype of one of the items making up the union.
|
|
310
|
-
if proper_subtype:
|
|
311
|
-
is_subtype_of_item = any(
|
|
312
|
-
is_proper_subtype(orig_left, item, subtype_context=subtype_context)
|
|
313
|
-
for item in right.items
|
|
314
|
-
)
|
|
315
|
-
else:
|
|
316
|
-
is_subtype_of_item = any(
|
|
317
|
-
is_subtype(orig_left, item, subtype_context=subtype_context)
|
|
318
|
-
for item in right.items
|
|
319
|
-
)
|
|
320
|
-
# Recombine rhs literal types, to make an enum type a subtype
|
|
321
|
-
# of a union of all enum items as literal types. Only do it if
|
|
322
|
-
# the previous check didn't succeed, since recombining can be
|
|
323
|
-
# expensive.
|
|
324
|
-
# `bool` is a special case, because `bool` is `Literal[True, False]`.
|
|
325
|
-
if (
|
|
326
|
-
not is_subtype_of_item
|
|
327
|
-
and isinstance(left, Instance)
|
|
328
|
-
and (left.type.is_enum or left.type.fullname == "builtins.bool")
|
|
329
|
-
):
|
|
330
|
-
right = UnionType(mypy.typeops.try_contracting_literals_in_union(right.items))
|
|
331
|
-
if proper_subtype:
|
|
332
|
-
is_subtype_of_item = any(
|
|
333
|
-
is_proper_subtype(orig_left, item, subtype_context=subtype_context)
|
|
334
|
-
for item in right.items
|
|
335
|
-
)
|
|
336
|
-
else:
|
|
337
|
-
is_subtype_of_item = any(
|
|
338
|
-
is_subtype(orig_left, item, subtype_context=subtype_context)
|
|
339
|
-
for item in right.items
|
|
340
|
-
)
|
|
341
|
-
# However, if 'left' is a type variable T, T might also have
|
|
342
|
-
# an upper bound which is itself a union. This case will be
|
|
343
|
-
# handled below by the SubtypeVisitor. We have to check both
|
|
344
|
-
# possibilities, to handle both cases like T <: Union[T, U]
|
|
345
|
-
# and cases like T <: B where B is the upper bound of T and is
|
|
346
|
-
# a union. (See #2314.)
|
|
347
|
-
if not isinstance(left, TypeVarType):
|
|
348
|
-
return is_subtype_of_item
|
|
349
|
-
elif is_subtype_of_item:
|
|
350
|
-
return True
|
|
351
|
-
# otherwise, fall through
|
|
352
|
-
return left.accept(SubtypeVisitor(orig_right, subtype_context, proper_subtype))
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
def check_type_parameter(
|
|
356
|
-
left: Type, right: Type, variance: int, proper_subtype: bool, subtype_context: SubtypeContext
|
|
357
|
-
) -> bool:
|
|
358
|
-
# It is safe to consider empty collection literals and similar as covariant, since
|
|
359
|
-
# such type can't be stored in a variable, see checker.is_valid_inferred_type().
|
|
360
|
-
if variance == INVARIANT:
|
|
361
|
-
p_left = get_proper_type(left)
|
|
362
|
-
if isinstance(p_left, UninhabitedType) and p_left.ambiguous:
|
|
363
|
-
variance = COVARIANT
|
|
364
|
-
if variance == COVARIANT:
|
|
365
|
-
if proper_subtype:
|
|
366
|
-
return is_proper_subtype(left, right, subtype_context=subtype_context)
|
|
367
|
-
else:
|
|
368
|
-
return is_subtype(left, right, subtype_context=subtype_context)
|
|
369
|
-
elif variance == CONTRAVARIANT:
|
|
370
|
-
if proper_subtype:
|
|
371
|
-
return is_proper_subtype(right, left, subtype_context=subtype_context)
|
|
372
|
-
else:
|
|
373
|
-
return is_subtype(right, left, subtype_context=subtype_context)
|
|
374
|
-
else:
|
|
375
|
-
if proper_subtype:
|
|
376
|
-
# We pass ignore_promotions=False because it is a default for subtype checks.
|
|
377
|
-
# The actual value will be taken from the subtype_context, and it is whatever
|
|
378
|
-
# the original caller passed.
|
|
379
|
-
return is_same_type(
|
|
380
|
-
left, right, ignore_promotions=False, subtype_context=subtype_context
|
|
381
|
-
)
|
|
382
|
-
else:
|
|
383
|
-
return is_equivalent(left, right, subtype_context=subtype_context)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
class SubtypeVisitor(TypeVisitor[bool]):
|
|
387
|
-
def __init__(self, right: Type, subtype_context: SubtypeContext, proper_subtype: bool) -> None:
|
|
388
|
-
self.right = get_proper_type(right)
|
|
389
|
-
self.orig_right = right
|
|
390
|
-
self.proper_subtype = proper_subtype
|
|
391
|
-
self.subtype_context = subtype_context
|
|
392
|
-
self.options = subtype_context.options
|
|
393
|
-
self._subtype_kind = SubtypeVisitor.build_subtype_kind(subtype_context, proper_subtype)
|
|
394
|
-
|
|
395
|
-
@staticmethod
|
|
396
|
-
def build_subtype_kind(subtype_context: SubtypeContext, proper_subtype: bool) -> SubtypeKind:
|
|
397
|
-
return (
|
|
398
|
-
state.strict_optional,
|
|
399
|
-
proper_subtype,
|
|
400
|
-
subtype_context.ignore_type_params,
|
|
401
|
-
subtype_context.ignore_pos_arg_names,
|
|
402
|
-
subtype_context.ignore_declared_variance,
|
|
403
|
-
subtype_context.ignore_promotions,
|
|
404
|
-
subtype_context.erase_instances,
|
|
405
|
-
subtype_context.keep_erased_types,
|
|
406
|
-
)
|
|
407
|
-
|
|
408
|
-
def _is_subtype(self, left: Type, right: Type) -> bool:
|
|
409
|
-
if self.proper_subtype:
|
|
410
|
-
return is_proper_subtype(left, right, subtype_context=self.subtype_context)
|
|
411
|
-
return is_subtype(left, right, subtype_context=self.subtype_context)
|
|
412
|
-
|
|
413
|
-
# visit_x(left) means: is left (which is an instance of X) a subtype of right?
|
|
414
|
-
|
|
415
|
-
def visit_unbound_type(self, left: UnboundType) -> bool:
|
|
416
|
-
# This can be called if there is a bad type annotation. The result probably
|
|
417
|
-
# doesn't matter much but by returning True we simplify these bad types away
|
|
418
|
-
# from unions, which could filter out some bogus messages.
|
|
419
|
-
return True
|
|
420
|
-
|
|
421
|
-
def visit_any(self, left: AnyType) -> bool:
|
|
422
|
-
return isinstance(self.right, AnyType) if self.proper_subtype else True
|
|
423
|
-
|
|
424
|
-
def visit_none_type(self, left: NoneType) -> bool:
|
|
425
|
-
if state.strict_optional:
|
|
426
|
-
if isinstance(self.right, NoneType) or is_named_instance(
|
|
427
|
-
self.right, "builtins.object"
|
|
428
|
-
):
|
|
429
|
-
return True
|
|
430
|
-
if isinstance(self.right, Instance) and self.right.type.is_protocol:
|
|
431
|
-
members = self.right.type.protocol_members
|
|
432
|
-
# None is compatible with Hashable (and other similar protocols). This is
|
|
433
|
-
# slightly sloppy since we don't check the signature of "__hash__".
|
|
434
|
-
# None is also compatible with `SupportsStr` protocol.
|
|
435
|
-
return not members or all(member in ("__hash__", "__str__") for member in members)
|
|
436
|
-
return False
|
|
437
|
-
else:
|
|
438
|
-
return True
|
|
439
|
-
|
|
440
|
-
def visit_uninhabited_type(self, left: UninhabitedType) -> bool:
|
|
441
|
-
# We ignore this for unsafe overload checks, so that and empty list and
|
|
442
|
-
# a list of int will be considered non-overlapping.
|
|
443
|
-
if isinstance(self.right, UninhabitedType):
|
|
444
|
-
return True
|
|
445
|
-
return not self.subtype_context.ignore_uninhabited
|
|
446
|
-
|
|
447
|
-
def visit_erased_type(self, left: ErasedType) -> bool:
|
|
448
|
-
# This may be encountered during type inference. The result probably doesn't
|
|
449
|
-
# matter much.
|
|
450
|
-
# TODO: it actually does matter, figure out more principled logic about this.
|
|
451
|
-
return not self.subtype_context.keep_erased_types
|
|
452
|
-
|
|
453
|
-
def visit_deleted_type(self, left: DeletedType) -> bool:
|
|
454
|
-
return True
|
|
455
|
-
|
|
456
|
-
def visit_instance(self, left: Instance) -> bool:
|
|
457
|
-
if left.type.fallback_to_any and not self.proper_subtype:
|
|
458
|
-
# NOTE: `None` is a *non-subclassable* singleton, therefore no class
|
|
459
|
-
# can by a subtype of it, even with an `Any` fallback.
|
|
460
|
-
# This special case is needed to treat descriptors in classes with
|
|
461
|
-
# dynamic base classes correctly, see #5456.
|
|
462
|
-
return not isinstance(self.right, NoneType)
|
|
463
|
-
right = self.right
|
|
464
|
-
if isinstance(right, TupleType) and right.partial_fallback.type.is_enum:
|
|
465
|
-
return self._is_subtype(left, mypy.typeops.tuple_fallback(right))
|
|
466
|
-
if isinstance(right, TupleType):
|
|
467
|
-
if len(right.items) == 1:
|
|
468
|
-
# Non-normalized Tuple type (may be left after semantic analysis
|
|
469
|
-
# because semanal_typearg visitor is not a type translator).
|
|
470
|
-
item = right.items[0]
|
|
471
|
-
if isinstance(item, UnpackType):
|
|
472
|
-
unpacked = get_proper_type(item.type)
|
|
473
|
-
if isinstance(unpacked, Instance):
|
|
474
|
-
return self._is_subtype(left, unpacked)
|
|
475
|
-
if left.type.has_base(right.partial_fallback.type.fullname):
|
|
476
|
-
if not self.proper_subtype:
|
|
477
|
-
# Special case to consider Foo[*tuple[Any, ...]] (i.e. bare Foo) a
|
|
478
|
-
# subtype of Foo[<whatever>], when Foo is user defined variadic tuple type.
|
|
479
|
-
mapped = map_instance_to_supertype(left, right.partial_fallback.type)
|
|
480
|
-
for arg in map(get_proper_type, mapped.args):
|
|
481
|
-
if isinstance(arg, UnpackType):
|
|
482
|
-
unpacked = get_proper_type(arg.type)
|
|
483
|
-
if not isinstance(unpacked, Instance):
|
|
484
|
-
break
|
|
485
|
-
assert unpacked.type.fullname == "builtins.tuple"
|
|
486
|
-
if not isinstance(get_proper_type(unpacked.args[0]), AnyType):
|
|
487
|
-
break
|
|
488
|
-
elif not isinstance(arg, AnyType):
|
|
489
|
-
break
|
|
490
|
-
else:
|
|
491
|
-
return True
|
|
492
|
-
return False
|
|
493
|
-
if isinstance(right, TypeVarTupleType):
|
|
494
|
-
# tuple[Any, ...] is like Any in the world of tuples (see special case above).
|
|
495
|
-
if left.type.has_base("builtins.tuple"):
|
|
496
|
-
mapped = map_instance_to_supertype(left, right.tuple_fallback.type)
|
|
497
|
-
if isinstance(get_proper_type(mapped.args[0]), AnyType):
|
|
498
|
-
return not self.proper_subtype
|
|
499
|
-
if isinstance(right, Instance):
|
|
500
|
-
if type_state.is_cached_subtype_check(self._subtype_kind, left, right):
|
|
501
|
-
return True
|
|
502
|
-
if type_state.is_cached_negative_subtype_check(self._subtype_kind, left, right):
|
|
503
|
-
return False
|
|
504
|
-
if not self.subtype_context.ignore_promotions:
|
|
505
|
-
for base in left.type.mro:
|
|
506
|
-
if base._promote and any(
|
|
507
|
-
self._is_subtype(p, self.right) for p in base._promote
|
|
508
|
-
):
|
|
509
|
-
type_state.record_subtype_cache_entry(self._subtype_kind, left, right)
|
|
510
|
-
return True
|
|
511
|
-
# Special case: Low-level integer types are compatible with 'int'. We can't
|
|
512
|
-
# use promotions, since 'int' is already promoted to low-level integer types,
|
|
513
|
-
# and we can't have circular promotions.
|
|
514
|
-
if left.type.alt_promote and left.type.alt_promote.type is right.type:
|
|
515
|
-
return True
|
|
516
|
-
rname = right.type.fullname
|
|
517
|
-
# Always try a nominal check if possible,
|
|
518
|
-
# there might be errors that a user wants to silence *once*.
|
|
519
|
-
# NamedTuples are a special case, because `NamedTuple` is not listed
|
|
520
|
-
# in `TypeInfo.mro`, so when `(a: NamedTuple) -> None` is used,
|
|
521
|
-
# we need to check for `is_named_tuple` property
|
|
522
|
-
if (
|
|
523
|
-
left.type.has_base(rname)
|
|
524
|
-
or rname == "builtins.object"
|
|
525
|
-
or (
|
|
526
|
-
rname in TYPED_NAMEDTUPLE_NAMES
|
|
527
|
-
and any(l.is_named_tuple for l in left.type.mro)
|
|
528
|
-
)
|
|
529
|
-
) and not self.subtype_context.ignore_declared_variance:
|
|
530
|
-
# Map left type to corresponding right instances.
|
|
531
|
-
t = map_instance_to_supertype(left, right.type)
|
|
532
|
-
if self.subtype_context.erase_instances:
|
|
533
|
-
erased = erase_type(t)
|
|
534
|
-
assert isinstance(erased, Instance)
|
|
535
|
-
t = erased
|
|
536
|
-
nominal = True
|
|
537
|
-
if right.type.has_type_var_tuple_type:
|
|
538
|
-
# For variadic instances we simply find the correct type argument mappings,
|
|
539
|
-
# all the heavy lifting is done by the tuple subtyping.
|
|
540
|
-
assert right.type.type_var_tuple_prefix is not None
|
|
541
|
-
assert right.type.type_var_tuple_suffix is not None
|
|
542
|
-
prefix = right.type.type_var_tuple_prefix
|
|
543
|
-
suffix = right.type.type_var_tuple_suffix
|
|
544
|
-
tvt = right.type.defn.type_vars[prefix]
|
|
545
|
-
assert isinstance(tvt, TypeVarTupleType)
|
|
546
|
-
fallback = tvt.tuple_fallback
|
|
547
|
-
left_prefix, left_middle, left_suffix = split_with_prefix_and_suffix(
|
|
548
|
-
t.args, prefix, suffix
|
|
549
|
-
)
|
|
550
|
-
right_prefix, right_middle, right_suffix = split_with_prefix_and_suffix(
|
|
551
|
-
right.args, prefix, suffix
|
|
552
|
-
)
|
|
553
|
-
left_args = (
|
|
554
|
-
left_prefix + (TupleType(list(left_middle), fallback),) + left_suffix
|
|
555
|
-
)
|
|
556
|
-
right_args = (
|
|
557
|
-
right_prefix + (TupleType(list(right_middle), fallback),) + right_suffix
|
|
558
|
-
)
|
|
559
|
-
if not self.proper_subtype and t.args:
|
|
560
|
-
for arg in map(get_proper_type, t.args):
|
|
561
|
-
if isinstance(arg, UnpackType):
|
|
562
|
-
unpacked = get_proper_type(arg.type)
|
|
563
|
-
if not isinstance(unpacked, Instance):
|
|
564
|
-
break
|
|
565
|
-
assert unpacked.type.fullname == "builtins.tuple"
|
|
566
|
-
if not isinstance(get_proper_type(unpacked.args[0]), AnyType):
|
|
567
|
-
break
|
|
568
|
-
elif not isinstance(arg, AnyType):
|
|
569
|
-
break
|
|
570
|
-
else:
|
|
571
|
-
return True
|
|
572
|
-
if len(left_args) != len(right_args):
|
|
573
|
-
return False
|
|
574
|
-
type_params = zip(left_args, right_args, right.type.defn.type_vars)
|
|
575
|
-
else:
|
|
576
|
-
type_params = zip(t.args, right.args, right.type.defn.type_vars)
|
|
577
|
-
if not self.subtype_context.ignore_type_params:
|
|
578
|
-
for lefta, righta, tvar in type_params:
|
|
579
|
-
if isinstance(tvar, TypeVarType):
|
|
580
|
-
if not check_type_parameter(
|
|
581
|
-
lefta,
|
|
582
|
-
righta,
|
|
583
|
-
tvar.variance,
|
|
584
|
-
self.proper_subtype,
|
|
585
|
-
self.subtype_context,
|
|
586
|
-
):
|
|
587
|
-
nominal = False
|
|
588
|
-
else:
|
|
589
|
-
# TODO: everywhere else ParamSpecs are handled as invariant.
|
|
590
|
-
if not check_type_parameter(
|
|
591
|
-
lefta, righta, COVARIANT, self.proper_subtype, self.subtype_context
|
|
592
|
-
):
|
|
593
|
-
nominal = False
|
|
594
|
-
if nominal:
|
|
595
|
-
type_state.record_subtype_cache_entry(self._subtype_kind, left, right)
|
|
596
|
-
else:
|
|
597
|
-
type_state.record_negative_subtype_cache_entry(self._subtype_kind, left, right)
|
|
598
|
-
return nominal
|
|
599
|
-
if right.type.is_protocol and is_protocol_implementation(
|
|
600
|
-
left, right, proper_subtype=self.proper_subtype, options=self.options
|
|
601
|
-
):
|
|
602
|
-
return True
|
|
603
|
-
# We record negative cache entry here, and not in the protocol check like we do for
|
|
604
|
-
# positive cache, to avoid accidentally adding a type that is not a structural
|
|
605
|
-
# subtype, but is a nominal subtype (involving type: ignore override).
|
|
606
|
-
type_state.record_negative_subtype_cache_entry(self._subtype_kind, left, right)
|
|
607
|
-
return False
|
|
608
|
-
if isinstance(right, TypeType):
|
|
609
|
-
item = right.item
|
|
610
|
-
if isinstance(item, TupleType):
|
|
611
|
-
item = mypy.typeops.tuple_fallback(item)
|
|
612
|
-
# TODO: this is a bit arbitrary, we should only skip Any-related cases.
|
|
613
|
-
if not self.proper_subtype:
|
|
614
|
-
if is_named_instance(left, "builtins.type"):
|
|
615
|
-
return self._is_subtype(TypeType(AnyType(TypeOfAny.special_form)), right)
|
|
616
|
-
if left.type.is_metaclass():
|
|
617
|
-
if isinstance(item, AnyType):
|
|
618
|
-
return True
|
|
619
|
-
if isinstance(item, Instance):
|
|
620
|
-
return is_named_instance(item, "builtins.object")
|
|
621
|
-
if isinstance(right, LiteralType) and left.last_known_value is not None:
|
|
622
|
-
return self._is_subtype(left.last_known_value, right)
|
|
623
|
-
if isinstance(right, CallableType):
|
|
624
|
-
# Special case: Instance can be a subtype of Callable.
|
|
625
|
-
call = find_member("__call__", left, left, is_operator=True)
|
|
626
|
-
if call:
|
|
627
|
-
return self._is_subtype(call, right)
|
|
628
|
-
return False
|
|
629
|
-
else:
|
|
630
|
-
return False
|
|
631
|
-
|
|
632
|
-
def visit_type_var(self, left: TypeVarType) -> bool:
|
|
633
|
-
right = self.right
|
|
634
|
-
if isinstance(right, TypeVarType) and left.id == right.id:
|
|
635
|
-
return True
|
|
636
|
-
if left.values and self._is_subtype(UnionType.make_union(left.values), right):
|
|
637
|
-
return True
|
|
638
|
-
return self._is_subtype(left.upper_bound, self.right)
|
|
639
|
-
|
|
640
|
-
def visit_param_spec(self, left: ParamSpecType) -> bool:
|
|
641
|
-
right = self.right
|
|
642
|
-
if (
|
|
643
|
-
isinstance(right, ParamSpecType)
|
|
644
|
-
and right.id == left.id
|
|
645
|
-
and right.flavor == left.flavor
|
|
646
|
-
):
|
|
647
|
-
return self._is_subtype(left.prefix, right.prefix)
|
|
648
|
-
if isinstance(right, Parameters) and are_trivial_parameters(right):
|
|
649
|
-
return True
|
|
650
|
-
return self._is_subtype(left.upper_bound, self.right)
|
|
651
|
-
|
|
652
|
-
def visit_type_var_tuple(self, left: TypeVarTupleType) -> bool:
|
|
653
|
-
right = self.right
|
|
654
|
-
if isinstance(right, TypeVarTupleType) and right.id == left.id:
|
|
655
|
-
return left.min_len >= right.min_len
|
|
656
|
-
return self._is_subtype(left.upper_bound, self.right)
|
|
657
|
-
|
|
658
|
-
def visit_unpack_type(self, left: UnpackType) -> bool:
|
|
659
|
-
# TODO: Ideally we should not need this (since it is not a real type).
|
|
660
|
-
# Instead callers (upper level types) should handle it when it appears in type list.
|
|
661
|
-
if isinstance(self.right, UnpackType):
|
|
662
|
-
return self._is_subtype(left.type, self.right.type)
|
|
663
|
-
if isinstance(self.right, Instance) and self.right.type.fullname == "builtins.object":
|
|
664
|
-
return True
|
|
665
|
-
return False
|
|
666
|
-
|
|
667
|
-
def visit_parameters(self, left: Parameters) -> bool:
|
|
668
|
-
if isinstance(self.right, Parameters):
|
|
669
|
-
return are_parameters_compatible(
|
|
670
|
-
left,
|
|
671
|
-
self.right,
|
|
672
|
-
is_compat=self._is_subtype,
|
|
673
|
-
# TODO: this should pass the current value, but then couple tests fail.
|
|
674
|
-
is_proper_subtype=False,
|
|
675
|
-
ignore_pos_arg_names=self.subtype_context.ignore_pos_arg_names,
|
|
676
|
-
)
|
|
677
|
-
else:
|
|
678
|
-
return False
|
|
679
|
-
|
|
680
|
-
def visit_callable_type(self, left: CallableType) -> bool:
|
|
681
|
-
right = self.right
|
|
682
|
-
if isinstance(right, CallableType):
|
|
683
|
-
if left.type_guard is not None and right.type_guard is not None:
|
|
684
|
-
if not self._is_subtype(left.type_guard, right.type_guard):
|
|
685
|
-
return False
|
|
686
|
-
elif left.type_is is not None and right.type_is is not None:
|
|
687
|
-
# For TypeIs we have to check both ways; it is unsafe to pass
|
|
688
|
-
# a TypeIs[Child] when a TypeIs[Parent] is expected, because
|
|
689
|
-
# if the narrower returns False, we assume that the narrowed value is
|
|
690
|
-
# *not* a Parent.
|
|
691
|
-
if not self._is_subtype(left.type_is, right.type_is) or not self._is_subtype(
|
|
692
|
-
right.type_is, left.type_is
|
|
693
|
-
):
|
|
694
|
-
return False
|
|
695
|
-
elif right.type_guard is not None and left.type_guard is None:
|
|
696
|
-
# This means that one function has `TypeGuard` and other does not.
|
|
697
|
-
# They are not compatible. See https://github.com/python/mypy/issues/11307
|
|
698
|
-
return False
|
|
699
|
-
elif right.type_is is not None and left.type_is is None:
|
|
700
|
-
# Similarly, if one function has `TypeIs` and the other does not,
|
|
701
|
-
# they are not compatible.
|
|
702
|
-
return False
|
|
703
|
-
return is_callable_compatible(
|
|
704
|
-
left,
|
|
705
|
-
right,
|
|
706
|
-
is_compat=self._is_subtype,
|
|
707
|
-
is_proper_subtype=self.proper_subtype,
|
|
708
|
-
ignore_pos_arg_names=self.subtype_context.ignore_pos_arg_names,
|
|
709
|
-
strict_concatenate=(
|
|
710
|
-
(self.options.extra_checks or self.options.strict_concatenate)
|
|
711
|
-
if self.options
|
|
712
|
-
else False
|
|
713
|
-
),
|
|
714
|
-
)
|
|
715
|
-
elif isinstance(right, Overloaded):
|
|
716
|
-
return all(self._is_subtype(left, item) for item in right.items)
|
|
717
|
-
elif isinstance(right, Instance):
|
|
718
|
-
if right.type.is_protocol and "__call__" in right.type.protocol_members:
|
|
719
|
-
# OK, a callable can implement a protocol with a `__call__` member.
|
|
720
|
-
# TODO: we should probably explicitly exclude self-types in this case.
|
|
721
|
-
call = find_member("__call__", right, left, is_operator=True)
|
|
722
|
-
assert call is not None
|
|
723
|
-
if self._is_subtype(left, call):
|
|
724
|
-
if len(right.type.protocol_members) == 1:
|
|
725
|
-
return True
|
|
726
|
-
if is_protocol_implementation(left.fallback, right, skip=["__call__"]):
|
|
727
|
-
return True
|
|
728
|
-
if right.type.is_protocol and left.is_type_obj():
|
|
729
|
-
ret_type = get_proper_type(left.ret_type)
|
|
730
|
-
if isinstance(ret_type, TupleType):
|
|
731
|
-
ret_type = mypy.typeops.tuple_fallback(ret_type)
|
|
732
|
-
if isinstance(ret_type, Instance) and is_protocol_implementation(
|
|
733
|
-
ret_type, right, proper_subtype=self.proper_subtype, class_obj=True
|
|
734
|
-
):
|
|
735
|
-
return True
|
|
736
|
-
return self._is_subtype(left.fallback, right)
|
|
737
|
-
elif isinstance(right, TypeType):
|
|
738
|
-
# This is unsound, we don't check the __init__ signature.
|
|
739
|
-
return left.is_type_obj() and self._is_subtype(left.ret_type, right.item)
|
|
740
|
-
else:
|
|
741
|
-
return False
|
|
742
|
-
|
|
743
|
-
def visit_tuple_type(self, left: TupleType) -> bool:
|
|
744
|
-
right = self.right
|
|
745
|
-
if isinstance(right, Instance):
|
|
746
|
-
if is_named_instance(right, "typing.Sized"):
|
|
747
|
-
return True
|
|
748
|
-
elif is_named_instance(right, TUPLE_LIKE_INSTANCE_NAMES):
|
|
749
|
-
if right.args:
|
|
750
|
-
iter_type = right.args[0]
|
|
751
|
-
else:
|
|
752
|
-
if self.proper_subtype:
|
|
753
|
-
return False
|
|
754
|
-
iter_type = AnyType(TypeOfAny.special_form)
|
|
755
|
-
if is_named_instance(right, "builtins.tuple") and isinstance(
|
|
756
|
-
get_proper_type(iter_type), AnyType
|
|
757
|
-
):
|
|
758
|
-
# TODO: We shouldn't need this special case. This is currently needed
|
|
759
|
-
# for isinstance(x, tuple), though it's unclear why.
|
|
760
|
-
return True
|
|
761
|
-
for li in left.items:
|
|
762
|
-
if isinstance(li, UnpackType):
|
|
763
|
-
unpack = get_proper_type(li.type)
|
|
764
|
-
if isinstance(unpack, TypeVarTupleType):
|
|
765
|
-
unpack = get_proper_type(unpack.upper_bound)
|
|
766
|
-
assert (
|
|
767
|
-
isinstance(unpack, Instance)
|
|
768
|
-
and unpack.type.fullname == "builtins.tuple"
|
|
769
|
-
)
|
|
770
|
-
li = unpack.args[0]
|
|
771
|
-
if not self._is_subtype(li, iter_type):
|
|
772
|
-
return False
|
|
773
|
-
return True
|
|
774
|
-
elif self._is_subtype(left.partial_fallback, right) and self._is_subtype(
|
|
775
|
-
mypy.typeops.tuple_fallback(left), right
|
|
776
|
-
):
|
|
777
|
-
return True
|
|
778
|
-
return False
|
|
779
|
-
elif isinstance(right, TupleType):
|
|
780
|
-
# If right has a variadic unpack this needs special handling. If there is a TypeVarTuple
|
|
781
|
-
# unpack, item count must coincide. If the left has variadic unpack but right
|
|
782
|
-
# doesn't have one, we will fall through to False down the line.
|
|
783
|
-
if self.variadic_tuple_subtype(left, right):
|
|
784
|
-
return True
|
|
785
|
-
if len(left.items) != len(right.items):
|
|
786
|
-
return False
|
|
787
|
-
if any(not self._is_subtype(l, r) for l, r in zip(left.items, right.items)):
|
|
788
|
-
return False
|
|
789
|
-
rfallback = mypy.typeops.tuple_fallback(right)
|
|
790
|
-
if is_named_instance(rfallback, "builtins.tuple"):
|
|
791
|
-
# No need to verify fallback. This is useful since the calculated fallback
|
|
792
|
-
# may be inconsistent due to how we calculate joins between unions vs.
|
|
793
|
-
# non-unions. For example, join(int, str) == object, whereas
|
|
794
|
-
# join(Union[int, C], Union[str, C]) == Union[int, str, C].
|
|
795
|
-
return True
|
|
796
|
-
lfallback = mypy.typeops.tuple_fallback(left)
|
|
797
|
-
return self._is_subtype(lfallback, rfallback)
|
|
798
|
-
else:
|
|
799
|
-
return False
|
|
800
|
-
|
|
801
|
-
def variadic_tuple_subtype(self, left: TupleType, right: TupleType) -> bool:
|
|
802
|
-
"""Check subtyping between two potentially variadic tuples.
|
|
803
|
-
|
|
804
|
-
Most non-trivial cases here are due to variadic unpacks like *tuple[X, ...],
|
|
805
|
-
we handle such unpacks as infinite unions Tuple[()] | Tuple[X] | Tuple[X, X] | ...
|
|
806
|
-
|
|
807
|
-
Note: the cases where right is fixed or has *Ts unpack should be handled
|
|
808
|
-
by the caller.
|
|
809
|
-
"""
|
|
810
|
-
right_unpack_index = find_unpack_in_list(right.items)
|
|
811
|
-
if right_unpack_index is None:
|
|
812
|
-
# This case should be handled by the caller.
|
|
813
|
-
return False
|
|
814
|
-
right_unpack = right.items[right_unpack_index]
|
|
815
|
-
assert isinstance(right_unpack, UnpackType)
|
|
816
|
-
right_unpacked = get_proper_type(right_unpack.type)
|
|
817
|
-
if not isinstance(right_unpacked, Instance):
|
|
818
|
-
# This case should be handled by the caller.
|
|
819
|
-
return False
|
|
820
|
-
assert right_unpacked.type.fullname == "builtins.tuple"
|
|
821
|
-
right_item = right_unpacked.args[0]
|
|
822
|
-
right_prefix = right_unpack_index
|
|
823
|
-
right_suffix = len(right.items) - right_prefix - 1
|
|
824
|
-
left_unpack_index = find_unpack_in_list(left.items)
|
|
825
|
-
if left_unpack_index is None:
|
|
826
|
-
# Simple case: left is fixed, simply find correct mapping to the right
|
|
827
|
-
# (effectively selecting item with matching length from an infinite union).
|
|
828
|
-
if len(left.items) < right_prefix + right_suffix:
|
|
829
|
-
return False
|
|
830
|
-
prefix, middle, suffix = split_with_prefix_and_suffix(
|
|
831
|
-
tuple(left.items), right_prefix, right_suffix
|
|
832
|
-
)
|
|
833
|
-
if not all(
|
|
834
|
-
self._is_subtype(li, ri) for li, ri in zip(prefix, right.items[:right_prefix])
|
|
835
|
-
):
|
|
836
|
-
return False
|
|
837
|
-
if right_suffix and not all(
|
|
838
|
-
self._is_subtype(li, ri) for li, ri in zip(suffix, right.items[-right_suffix:])
|
|
839
|
-
):
|
|
840
|
-
return False
|
|
841
|
-
return all(self._is_subtype(li, right_item) for li in middle)
|
|
842
|
-
else:
|
|
843
|
-
if len(left.items) < len(right.items):
|
|
844
|
-
# There are some items on the left that will never have a matching length
|
|
845
|
-
# on the right.
|
|
846
|
-
return False
|
|
847
|
-
left_unpack = left.items[left_unpack_index]
|
|
848
|
-
assert isinstance(left_unpack, UnpackType)
|
|
849
|
-
left_unpacked = get_proper_type(left_unpack.type)
|
|
850
|
-
if not isinstance(left_unpacked, Instance):
|
|
851
|
-
# *Ts unpacks can't be split.
|
|
852
|
-
return False
|
|
853
|
-
assert left_unpacked.type.fullname == "builtins.tuple"
|
|
854
|
-
left_item = left_unpacked.args[0]
|
|
855
|
-
|
|
856
|
-
# The most tricky case with two variadic unpacks we handle similar to union
|
|
857
|
-
# subtyping: *each* item on the left, must be a subtype of *some* item on the right.
|
|
858
|
-
# For this we first check the "asymptotic case", i.e. that both unpacks a subtypes,
|
|
859
|
-
# and then check subtyping for all finite overlaps.
|
|
860
|
-
if not self._is_subtype(left_item, right_item):
|
|
861
|
-
return False
|
|
862
|
-
left_prefix = left_unpack_index
|
|
863
|
-
left_suffix = len(left.items) - left_prefix - 1
|
|
864
|
-
max_overlap = max(0, right_prefix - left_prefix, right_suffix - left_suffix)
|
|
865
|
-
for overlap in range(max_overlap + 1):
|
|
866
|
-
repr_items = left.items[:left_prefix] + [left_item] * overlap
|
|
867
|
-
if left_suffix:
|
|
868
|
-
repr_items += left.items[-left_suffix:]
|
|
869
|
-
left_repr = left.copy_modified(items=repr_items)
|
|
870
|
-
if not self._is_subtype(left_repr, right):
|
|
871
|
-
return False
|
|
872
|
-
return True
|
|
873
|
-
|
|
874
|
-
def visit_typeddict_type(self, left: TypedDictType) -> bool:
|
|
875
|
-
right = self.right
|
|
876
|
-
if isinstance(right, Instance):
|
|
877
|
-
return self._is_subtype(left.fallback, right)
|
|
878
|
-
elif isinstance(right, TypedDictType):
|
|
879
|
-
if not left.names_are_wider_than(right):
|
|
880
|
-
return False
|
|
881
|
-
for name, l, r in left.zip(right):
|
|
882
|
-
# TODO: should we pass on the full subtype_context here and below?
|
|
883
|
-
if self.proper_subtype:
|
|
884
|
-
check = is_same_type(l, r)
|
|
885
|
-
else:
|
|
886
|
-
check = is_equivalent(
|
|
887
|
-
l,
|
|
888
|
-
r,
|
|
889
|
-
ignore_type_params=self.subtype_context.ignore_type_params,
|
|
890
|
-
options=self.options,
|
|
891
|
-
)
|
|
892
|
-
if not check:
|
|
893
|
-
return False
|
|
894
|
-
# Non-required key is not compatible with a required key since
|
|
895
|
-
# indexing may fail unexpectedly if a required key is missing.
|
|
896
|
-
# Required key is not compatible with a non-required key since
|
|
897
|
-
# the prior doesn't support 'del' but the latter should support
|
|
898
|
-
# it.
|
|
899
|
-
#
|
|
900
|
-
# NOTE: 'del' support is currently not implemented (#3550). We
|
|
901
|
-
# don't want to have to change subtyping after 'del' support
|
|
902
|
-
# lands so here we are anticipating that change.
|
|
903
|
-
if (name in left.required_keys) != (name in right.required_keys):
|
|
904
|
-
return False
|
|
905
|
-
# (NOTE: Fallbacks don't matter.)
|
|
906
|
-
return True
|
|
907
|
-
else:
|
|
908
|
-
return False
|
|
909
|
-
|
|
910
|
-
def visit_literal_type(self, left: LiteralType) -> bool:
|
|
911
|
-
if isinstance(self.right, LiteralType):
|
|
912
|
-
return left == self.right
|
|
913
|
-
else:
|
|
914
|
-
return self._is_subtype(left.fallback, self.right)
|
|
915
|
-
|
|
916
|
-
def visit_overloaded(self, left: Overloaded) -> bool:
|
|
917
|
-
right = self.right
|
|
918
|
-
if isinstance(right, Instance):
|
|
919
|
-
if right.type.is_protocol and "__call__" in right.type.protocol_members:
|
|
920
|
-
# same as for CallableType
|
|
921
|
-
call = find_member("__call__", right, left, is_operator=True)
|
|
922
|
-
assert call is not None
|
|
923
|
-
if self._is_subtype(left, call):
|
|
924
|
-
if len(right.type.protocol_members) == 1:
|
|
925
|
-
return True
|
|
926
|
-
if is_protocol_implementation(left.fallback, right, skip=["__call__"]):
|
|
927
|
-
return True
|
|
928
|
-
return self._is_subtype(left.fallback, right)
|
|
929
|
-
elif isinstance(right, CallableType):
|
|
930
|
-
for item in left.items:
|
|
931
|
-
if self._is_subtype(item, right):
|
|
932
|
-
return True
|
|
933
|
-
return False
|
|
934
|
-
elif isinstance(right, Overloaded):
|
|
935
|
-
if left == self.right:
|
|
936
|
-
# When it is the same overload, then the types are equal.
|
|
937
|
-
return True
|
|
938
|
-
|
|
939
|
-
# Ensure each overload in the right side (the supertype) is accounted for.
|
|
940
|
-
previous_match_left_index = -1
|
|
941
|
-
matched_overloads = set()
|
|
942
|
-
|
|
943
|
-
for right_item in right.items:
|
|
944
|
-
found_match = False
|
|
945
|
-
|
|
946
|
-
for left_index, left_item in enumerate(left.items):
|
|
947
|
-
subtype_match = self._is_subtype(left_item, right_item)
|
|
948
|
-
|
|
949
|
-
# Order matters: we need to make sure that the index of
|
|
950
|
-
# this item is at least the index of the previous one.
|
|
951
|
-
if subtype_match and previous_match_left_index <= left_index:
|
|
952
|
-
previous_match_left_index = left_index
|
|
953
|
-
found_match = True
|
|
954
|
-
matched_overloads.add(left_index)
|
|
955
|
-
break
|
|
956
|
-
else:
|
|
957
|
-
# If this one overlaps with the supertype in any way, but it wasn't
|
|
958
|
-
# an exact match, then it's a potential error.
|
|
959
|
-
strict_concat = (
|
|
960
|
-
(self.options.extra_checks or self.options.strict_concatenate)
|
|
961
|
-
if self.options
|
|
962
|
-
else False
|
|
963
|
-
)
|
|
964
|
-
if left_index not in matched_overloads and (
|
|
965
|
-
is_callable_compatible(
|
|
966
|
-
left_item,
|
|
967
|
-
right_item,
|
|
968
|
-
is_compat=self._is_subtype,
|
|
969
|
-
is_proper_subtype=self.proper_subtype,
|
|
970
|
-
ignore_return=True,
|
|
971
|
-
ignore_pos_arg_names=self.subtype_context.ignore_pos_arg_names,
|
|
972
|
-
strict_concatenate=strict_concat,
|
|
973
|
-
)
|
|
974
|
-
or is_callable_compatible(
|
|
975
|
-
right_item,
|
|
976
|
-
left_item,
|
|
977
|
-
is_compat=self._is_subtype,
|
|
978
|
-
is_proper_subtype=self.proper_subtype,
|
|
979
|
-
ignore_return=True,
|
|
980
|
-
ignore_pos_arg_names=self.subtype_context.ignore_pos_arg_names,
|
|
981
|
-
strict_concatenate=strict_concat,
|
|
982
|
-
)
|
|
983
|
-
):
|
|
984
|
-
return False
|
|
985
|
-
|
|
986
|
-
if not found_match:
|
|
987
|
-
return False
|
|
988
|
-
return True
|
|
989
|
-
elif isinstance(right, UnboundType):
|
|
990
|
-
return True
|
|
991
|
-
elif isinstance(right, TypeType):
|
|
992
|
-
# All the items must have the same type object status, so
|
|
993
|
-
# it's sufficient to query only (any) one of them.
|
|
994
|
-
# This is unsound, we don't check all the __init__ signatures.
|
|
995
|
-
return left.is_type_obj() and self._is_subtype(left.items[0], right)
|
|
996
|
-
else:
|
|
997
|
-
return False
|
|
998
|
-
|
|
999
|
-
def visit_union_type(self, left: UnionType) -> bool:
|
|
1000
|
-
if isinstance(self.right, Instance):
|
|
1001
|
-
literal_types: set[Instance] = set()
|
|
1002
|
-
# avoid redundant check for union of literals
|
|
1003
|
-
for item in left.relevant_items():
|
|
1004
|
-
p_item = get_proper_type(item)
|
|
1005
|
-
lit_type = mypy.typeops.simple_literal_type(p_item)
|
|
1006
|
-
if lit_type is not None:
|
|
1007
|
-
if lit_type in literal_types:
|
|
1008
|
-
continue
|
|
1009
|
-
literal_types.add(lit_type)
|
|
1010
|
-
item = lit_type
|
|
1011
|
-
if not self._is_subtype(item, self.orig_right):
|
|
1012
|
-
return False
|
|
1013
|
-
return True
|
|
1014
|
-
|
|
1015
|
-
elif isinstance(self.right, UnionType):
|
|
1016
|
-
# prune literals early to avoid nasty quadratic behavior which would otherwise arise when checking
|
|
1017
|
-
# subtype relationships between slightly different narrowings of an Enum
|
|
1018
|
-
# we achieve O(N+M) instead of O(N*M)
|
|
1019
|
-
|
|
1020
|
-
fast_check: set[ProperType] = set()
|
|
1021
|
-
|
|
1022
|
-
for item in flatten_types(self.right.relevant_items()):
|
|
1023
|
-
p_item = get_proper_type(item)
|
|
1024
|
-
fast_check.add(p_item)
|
|
1025
|
-
if isinstance(p_item, Instance) and p_item.last_known_value is not None:
|
|
1026
|
-
fast_check.add(p_item.last_known_value)
|
|
1027
|
-
|
|
1028
|
-
for item in left.relevant_items():
|
|
1029
|
-
p_item = get_proper_type(item)
|
|
1030
|
-
if p_item in fast_check:
|
|
1031
|
-
continue
|
|
1032
|
-
lit_type = mypy.typeops.simple_literal_type(p_item)
|
|
1033
|
-
if lit_type in fast_check:
|
|
1034
|
-
continue
|
|
1035
|
-
if not self._is_subtype(item, self.orig_right):
|
|
1036
|
-
return False
|
|
1037
|
-
return True
|
|
1038
|
-
|
|
1039
|
-
return all(self._is_subtype(item, self.orig_right) for item in left.items)
|
|
1040
|
-
|
|
1041
|
-
def visit_partial_type(self, left: PartialType) -> bool:
|
|
1042
|
-
# This is indeterminate as we don't really know the complete type yet.
|
|
1043
|
-
if self.proper_subtype:
|
|
1044
|
-
# TODO: What's the right thing to do here?
|
|
1045
|
-
return False
|
|
1046
|
-
if left.type is None:
|
|
1047
|
-
# Special case, partial `None`. This might happen when defining
|
|
1048
|
-
# class-level attributes with explicit `None`.
|
|
1049
|
-
# We can still recover from this.
|
|
1050
|
-
# https://github.com/python/mypy/issues/11105
|
|
1051
|
-
return self.visit_none_type(NoneType())
|
|
1052
|
-
raise RuntimeError(f'Partial type "{left}" cannot be checked with "issubtype()"')
|
|
1053
|
-
|
|
1054
|
-
def visit_type_type(self, left: TypeType) -> bool:
|
|
1055
|
-
right = self.right
|
|
1056
|
-
if isinstance(right, TypeType):
|
|
1057
|
-
return self._is_subtype(left.item, right.item)
|
|
1058
|
-
if isinstance(right, CallableType):
|
|
1059
|
-
if self.proper_subtype and not right.is_type_obj():
|
|
1060
|
-
# We can't accept `Type[X]` as a *proper* subtype of Callable[P, X]
|
|
1061
|
-
# since this will break transitivity of subtyping.
|
|
1062
|
-
return False
|
|
1063
|
-
# This is unsound, we don't check the __init__ signature.
|
|
1064
|
-
return self._is_subtype(left.item, right.ret_type)
|
|
1065
|
-
if isinstance(right, Instance):
|
|
1066
|
-
if right.type.fullname in ["builtins.object", "builtins.type"]:
|
|
1067
|
-
# TODO: Strictly speaking, the type builtins.type is considered equivalent to
|
|
1068
|
-
# Type[Any]. However, this would break the is_proper_subtype check in
|
|
1069
|
-
# conditional_types for cases like isinstance(x, type) when the type
|
|
1070
|
-
# of x is Type[int]. It's unclear what's the right way to address this.
|
|
1071
|
-
return True
|
|
1072
|
-
item = left.item
|
|
1073
|
-
if isinstance(item, TypeVarType):
|
|
1074
|
-
item = get_proper_type(item.upper_bound)
|
|
1075
|
-
if isinstance(item, Instance):
|
|
1076
|
-
if right.type.is_protocol and is_protocol_implementation(
|
|
1077
|
-
item, right, proper_subtype=self.proper_subtype, class_obj=True
|
|
1078
|
-
):
|
|
1079
|
-
return True
|
|
1080
|
-
metaclass = item.type.metaclass_type
|
|
1081
|
-
return metaclass is not None and self._is_subtype(metaclass, right)
|
|
1082
|
-
return False
|
|
1083
|
-
|
|
1084
|
-
def visit_type_alias_type(self, left: TypeAliasType) -> bool:
|
|
1085
|
-
assert False, f"This should be never called, got {left}"
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
T = TypeVar("T", bound=Type)
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
@contextmanager
|
|
1092
|
-
def pop_on_exit(stack: list[tuple[T, T]], left: T, right: T) -> Iterator[None]:
|
|
1093
|
-
stack.append((left, right))
|
|
1094
|
-
yield
|
|
1095
|
-
stack.pop()
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
def is_protocol_implementation(
|
|
1099
|
-
left: Instance,
|
|
1100
|
-
right: Instance,
|
|
1101
|
-
proper_subtype: bool = False,
|
|
1102
|
-
class_obj: bool = False,
|
|
1103
|
-
skip: list[str] | None = None,
|
|
1104
|
-
options: Options | None = None,
|
|
1105
|
-
) -> bool:
|
|
1106
|
-
"""Check whether 'left' implements the protocol 'right'.
|
|
1107
|
-
|
|
1108
|
-
If 'proper_subtype' is True, then check for a proper subtype.
|
|
1109
|
-
Treat recursive protocols by using the 'assuming' structural subtype matrix
|
|
1110
|
-
(in sparse representation, i.e. as a list of pairs (subtype, supertype)),
|
|
1111
|
-
see also comment in nodes.TypeInfo. When we enter a check for classes
|
|
1112
|
-
(A, P), defined as following::
|
|
1113
|
-
|
|
1114
|
-
class P(Protocol):
|
|
1115
|
-
def f(self) -> P: ...
|
|
1116
|
-
class A:
|
|
1117
|
-
def f(self) -> A: ...
|
|
1118
|
-
|
|
1119
|
-
this results in A being a subtype of P without infinite recursion.
|
|
1120
|
-
On every false result, we pop the assumption, thus avoiding an infinite recursion
|
|
1121
|
-
as well.
|
|
1122
|
-
"""
|
|
1123
|
-
assert right.type.is_protocol
|
|
1124
|
-
if skip is None:
|
|
1125
|
-
skip = []
|
|
1126
|
-
# We need to record this check to generate protocol fine-grained dependencies.
|
|
1127
|
-
type_state.record_protocol_subtype_check(left.type, right.type)
|
|
1128
|
-
# nominal subtyping currently ignores '__init__' and '__new__' signatures
|
|
1129
|
-
members_not_to_check = {"__init__", "__new__"}
|
|
1130
|
-
members_not_to_check.update(skip)
|
|
1131
|
-
# Trivial check that circumvents the bug described in issue 9771:
|
|
1132
|
-
if left.type.is_protocol:
|
|
1133
|
-
members_right = set(right.type.protocol_members) - members_not_to_check
|
|
1134
|
-
members_left = set(left.type.protocol_members) - members_not_to_check
|
|
1135
|
-
if not members_right.issubset(members_left):
|
|
1136
|
-
return False
|
|
1137
|
-
assuming = right.type.assuming_proper if proper_subtype else right.type.assuming
|
|
1138
|
-
for l, r in reversed(assuming):
|
|
1139
|
-
if l == left and r == right:
|
|
1140
|
-
return True
|
|
1141
|
-
with pop_on_exit(assuming, left, right):
|
|
1142
|
-
for member in right.type.protocol_members:
|
|
1143
|
-
if member in members_not_to_check:
|
|
1144
|
-
continue
|
|
1145
|
-
ignore_names = member != "__call__" # __call__ can be passed kwargs
|
|
1146
|
-
# The third argument below indicates to what self type is bound.
|
|
1147
|
-
# We always bind self to the subtype. (Similarly to nominal types).
|
|
1148
|
-
supertype = get_proper_type(find_member(member, right, left))
|
|
1149
|
-
assert supertype is not None
|
|
1150
|
-
|
|
1151
|
-
subtype = mypy.typeops.get_protocol_member(left, member, class_obj)
|
|
1152
|
-
# Useful for debugging:
|
|
1153
|
-
# print(member, 'of', left, 'has type', subtype)
|
|
1154
|
-
# print(member, 'of', right, 'has type', supertype)
|
|
1155
|
-
if not subtype:
|
|
1156
|
-
return False
|
|
1157
|
-
if isinstance(subtype, PartialType):
|
|
1158
|
-
subtype = (
|
|
1159
|
-
NoneType()
|
|
1160
|
-
if subtype.type is None
|
|
1161
|
-
else Instance(
|
|
1162
|
-
subtype.type,
|
|
1163
|
-
[AnyType(TypeOfAny.unannotated)] * len(subtype.type.type_vars),
|
|
1164
|
-
)
|
|
1165
|
-
)
|
|
1166
|
-
if not proper_subtype:
|
|
1167
|
-
# Nominal check currently ignores arg names
|
|
1168
|
-
# NOTE: If we ever change this, be sure to also change the call to
|
|
1169
|
-
# SubtypeVisitor.build_subtype_kind(...) down below.
|
|
1170
|
-
is_compat = is_subtype(
|
|
1171
|
-
subtype, supertype, ignore_pos_arg_names=ignore_names, options=options
|
|
1172
|
-
)
|
|
1173
|
-
else:
|
|
1174
|
-
is_compat = is_proper_subtype(subtype, supertype)
|
|
1175
|
-
if not is_compat:
|
|
1176
|
-
return False
|
|
1177
|
-
if isinstance(subtype, NoneType) and isinstance(supertype, CallableType):
|
|
1178
|
-
# We want __hash__ = None idiom to work even without --strict-optional
|
|
1179
|
-
return False
|
|
1180
|
-
subflags = get_member_flags(member, left, class_obj=class_obj)
|
|
1181
|
-
superflags = get_member_flags(member, right)
|
|
1182
|
-
if IS_SETTABLE in superflags:
|
|
1183
|
-
# Check opposite direction for settable attributes.
|
|
1184
|
-
if not is_subtype(supertype, subtype, options=options):
|
|
1185
|
-
return False
|
|
1186
|
-
if not class_obj:
|
|
1187
|
-
if IS_SETTABLE not in superflags:
|
|
1188
|
-
if IS_CLASSVAR in superflags and IS_CLASSVAR not in subflags:
|
|
1189
|
-
return False
|
|
1190
|
-
elif (IS_CLASSVAR in subflags) != (IS_CLASSVAR in superflags):
|
|
1191
|
-
return False
|
|
1192
|
-
else:
|
|
1193
|
-
if IS_VAR in superflags and IS_CLASSVAR not in subflags:
|
|
1194
|
-
# Only class variables are allowed for class object access.
|
|
1195
|
-
return False
|
|
1196
|
-
if IS_CLASSVAR in superflags:
|
|
1197
|
-
# This can be never matched by a class object.
|
|
1198
|
-
return False
|
|
1199
|
-
if IS_SETTABLE in superflags and IS_SETTABLE not in subflags:
|
|
1200
|
-
return False
|
|
1201
|
-
# This rule is copied from nominal check in checker.py
|
|
1202
|
-
if IS_CLASS_OR_STATIC in superflags and IS_CLASS_OR_STATIC not in subflags:
|
|
1203
|
-
return False
|
|
1204
|
-
|
|
1205
|
-
if not proper_subtype:
|
|
1206
|
-
# Nominal check currently ignores arg names, but __call__ is special for protocols
|
|
1207
|
-
ignore_names = right.type.protocol_members != ["__call__"]
|
|
1208
|
-
else:
|
|
1209
|
-
ignore_names = False
|
|
1210
|
-
subtype_kind = SubtypeVisitor.build_subtype_kind(
|
|
1211
|
-
subtype_context=SubtypeContext(ignore_pos_arg_names=ignore_names),
|
|
1212
|
-
proper_subtype=proper_subtype,
|
|
1213
|
-
)
|
|
1214
|
-
type_state.record_subtype_cache_entry(subtype_kind, left, right)
|
|
1215
|
-
return True
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
def find_member(
|
|
1219
|
-
name: str, itype: Instance, subtype: Type, is_operator: bool = False, class_obj: bool = False
|
|
1220
|
-
) -> Type | None:
|
|
1221
|
-
"""Find the type of member by 'name' in 'itype's TypeInfo.
|
|
1222
|
-
|
|
1223
|
-
Find the member type after applying type arguments from 'itype', and binding
|
|
1224
|
-
'self' to 'subtype'. Return None if member was not found.
|
|
1225
|
-
"""
|
|
1226
|
-
# TODO: this code shares some logic with checkmember.analyze_member_access,
|
|
1227
|
-
# consider refactoring.
|
|
1228
|
-
info = itype.type
|
|
1229
|
-
method = info.get_method(name)
|
|
1230
|
-
if method:
|
|
1231
|
-
if isinstance(method, Decorator):
|
|
1232
|
-
return find_node_type(method.var, itype, subtype, class_obj=class_obj)
|
|
1233
|
-
if method.is_property:
|
|
1234
|
-
assert isinstance(method, OverloadedFuncDef)
|
|
1235
|
-
dec = method.items[0]
|
|
1236
|
-
assert isinstance(dec, Decorator)
|
|
1237
|
-
return find_node_type(dec.var, itype, subtype, class_obj=class_obj)
|
|
1238
|
-
return find_node_type(method, itype, subtype, class_obj=class_obj)
|
|
1239
|
-
else:
|
|
1240
|
-
# don't have such method, maybe variable or decorator?
|
|
1241
|
-
node = info.get(name)
|
|
1242
|
-
v = node.node if node else None
|
|
1243
|
-
if isinstance(v, Var):
|
|
1244
|
-
return find_node_type(v, itype, subtype, class_obj=class_obj)
|
|
1245
|
-
if (
|
|
1246
|
-
not v
|
|
1247
|
-
and name not in ["__getattr__", "__setattr__", "__getattribute__"]
|
|
1248
|
-
and not is_operator
|
|
1249
|
-
and not class_obj
|
|
1250
|
-
and itype.extra_attrs is None # skip ModuleType.__getattr__
|
|
1251
|
-
):
|
|
1252
|
-
for method_name in ("__getattribute__", "__getattr__"):
|
|
1253
|
-
# Normally, mypy assumes that instances that define __getattr__ have all
|
|
1254
|
-
# attributes with the corresponding return type. If this will produce
|
|
1255
|
-
# many false negatives, then this could be prohibited for
|
|
1256
|
-
# structural subtyping.
|
|
1257
|
-
method = info.get_method(method_name)
|
|
1258
|
-
if method and method.info.fullname != "builtins.object":
|
|
1259
|
-
if isinstance(method, Decorator):
|
|
1260
|
-
getattr_type = get_proper_type(find_node_type(method.var, itype, subtype))
|
|
1261
|
-
else:
|
|
1262
|
-
getattr_type = get_proper_type(find_node_type(method, itype, subtype))
|
|
1263
|
-
if isinstance(getattr_type, CallableType):
|
|
1264
|
-
return getattr_type.ret_type
|
|
1265
|
-
return getattr_type
|
|
1266
|
-
if itype.type.fallback_to_any or class_obj and itype.type.meta_fallback_to_any:
|
|
1267
|
-
return AnyType(TypeOfAny.special_form)
|
|
1268
|
-
if isinstance(v, TypeInfo):
|
|
1269
|
-
# PEP 544 doesn't specify anything about such use cases. So we just try
|
|
1270
|
-
# to do something meaningful (at least we should not crash).
|
|
1271
|
-
return TypeType(fill_typevars_with_any(v))
|
|
1272
|
-
if itype.extra_attrs and name in itype.extra_attrs.attrs:
|
|
1273
|
-
return itype.extra_attrs.attrs[name]
|
|
1274
|
-
return None
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
def get_member_flags(name: str, itype: Instance, class_obj: bool = False) -> set[int]:
|
|
1278
|
-
"""Detect whether a member 'name' is settable, whether it is an
|
|
1279
|
-
instance or class variable, and whether it is class or static method.
|
|
1280
|
-
|
|
1281
|
-
The flags are defined as following:
|
|
1282
|
-
* IS_SETTABLE: whether this attribute can be set, not set for methods and
|
|
1283
|
-
non-settable properties;
|
|
1284
|
-
* IS_CLASSVAR: set if the variable is annotated as 'x: ClassVar[t]';
|
|
1285
|
-
* IS_CLASS_OR_STATIC: set for methods decorated with @classmethod or
|
|
1286
|
-
with @staticmethod.
|
|
1287
|
-
"""
|
|
1288
|
-
info = itype.type
|
|
1289
|
-
method = info.get_method(name)
|
|
1290
|
-
setattr_meth = info.get_method("__setattr__")
|
|
1291
|
-
if method:
|
|
1292
|
-
if isinstance(method, Decorator):
|
|
1293
|
-
if method.var.is_staticmethod or method.var.is_classmethod:
|
|
1294
|
-
return {IS_CLASS_OR_STATIC}
|
|
1295
|
-
elif method.var.is_property:
|
|
1296
|
-
return {IS_VAR}
|
|
1297
|
-
elif method.is_property: # this could be settable property
|
|
1298
|
-
assert isinstance(method, OverloadedFuncDef)
|
|
1299
|
-
dec = method.items[0]
|
|
1300
|
-
assert isinstance(dec, Decorator)
|
|
1301
|
-
if dec.var.is_settable_property or setattr_meth:
|
|
1302
|
-
return {IS_VAR, IS_SETTABLE}
|
|
1303
|
-
else:
|
|
1304
|
-
return {IS_VAR}
|
|
1305
|
-
return set() # Just a regular method
|
|
1306
|
-
node = info.get(name)
|
|
1307
|
-
if not node:
|
|
1308
|
-
if setattr_meth:
|
|
1309
|
-
return {IS_SETTABLE}
|
|
1310
|
-
if itype.extra_attrs and name in itype.extra_attrs.attrs:
|
|
1311
|
-
flags = set()
|
|
1312
|
-
if name not in itype.extra_attrs.immutable:
|
|
1313
|
-
flags.add(IS_SETTABLE)
|
|
1314
|
-
return flags
|
|
1315
|
-
return set()
|
|
1316
|
-
v = node.node
|
|
1317
|
-
# just a variable
|
|
1318
|
-
if isinstance(v, Var):
|
|
1319
|
-
if v.is_property:
|
|
1320
|
-
return {IS_VAR}
|
|
1321
|
-
flags = {IS_VAR}
|
|
1322
|
-
if not v.is_final:
|
|
1323
|
-
flags.add(IS_SETTABLE)
|
|
1324
|
-
if v.is_classvar:
|
|
1325
|
-
flags.add(IS_CLASSVAR)
|
|
1326
|
-
if class_obj and v.is_inferred:
|
|
1327
|
-
flags.add(IS_CLASSVAR)
|
|
1328
|
-
return flags
|
|
1329
|
-
return set()
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
def find_node_type(
|
|
1333
|
-
node: Var | FuncBase, itype: Instance, subtype: Type, class_obj: bool = False
|
|
1334
|
-
) -> Type:
|
|
1335
|
-
"""Find type of a variable or method 'node' (maybe also a decorated method).
|
|
1336
|
-
Apply type arguments from 'itype', and bind 'self' to 'subtype'.
|
|
1337
|
-
"""
|
|
1338
|
-
from mypy.typeops import bind_self
|
|
1339
|
-
|
|
1340
|
-
if isinstance(node, FuncBase):
|
|
1341
|
-
typ: Type | None = mypy.typeops.function_type(
|
|
1342
|
-
node, fallback=Instance(itype.type.mro[-1], [])
|
|
1343
|
-
)
|
|
1344
|
-
else:
|
|
1345
|
-
typ = node.type
|
|
1346
|
-
if typ is not None:
|
|
1347
|
-
typ = expand_self_type(node, typ, subtype)
|
|
1348
|
-
p_typ = get_proper_type(typ)
|
|
1349
|
-
if typ is None:
|
|
1350
|
-
return AnyType(TypeOfAny.from_error)
|
|
1351
|
-
# We don't need to bind 'self' for static methods, since there is no 'self'.
|
|
1352
|
-
if isinstance(node, FuncBase) or (
|
|
1353
|
-
isinstance(p_typ, FunctionLike)
|
|
1354
|
-
and node.is_initialized_in_class
|
|
1355
|
-
and not node.is_staticmethod
|
|
1356
|
-
):
|
|
1357
|
-
assert isinstance(p_typ, FunctionLike)
|
|
1358
|
-
if class_obj and not (
|
|
1359
|
-
node.is_class if isinstance(node, FuncBase) else node.is_classmethod
|
|
1360
|
-
):
|
|
1361
|
-
# Don't bind instance methods on class objects.
|
|
1362
|
-
signature = p_typ
|
|
1363
|
-
else:
|
|
1364
|
-
signature = bind_self(
|
|
1365
|
-
p_typ, subtype, is_classmethod=isinstance(node, Var) and node.is_classmethod
|
|
1366
|
-
)
|
|
1367
|
-
if node.is_property and not class_obj:
|
|
1368
|
-
assert isinstance(signature, CallableType)
|
|
1369
|
-
typ = signature.ret_type
|
|
1370
|
-
else:
|
|
1371
|
-
typ = signature
|
|
1372
|
-
itype = map_instance_to_supertype(itype, node.info)
|
|
1373
|
-
typ = expand_type_by_instance(typ, itype)
|
|
1374
|
-
return typ
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
def non_method_protocol_members(tp: TypeInfo) -> list[str]:
|
|
1378
|
-
"""Find all non-callable members of a protocol."""
|
|
1379
|
-
|
|
1380
|
-
assert tp.is_protocol
|
|
1381
|
-
result: list[str] = []
|
|
1382
|
-
anytype = AnyType(TypeOfAny.special_form)
|
|
1383
|
-
instance = Instance(tp, [anytype] * len(tp.defn.type_vars))
|
|
1384
|
-
|
|
1385
|
-
for member in tp.protocol_members:
|
|
1386
|
-
typ = get_proper_type(find_member(member, instance, instance))
|
|
1387
|
-
if not isinstance(typ, (Overloaded, CallableType)):
|
|
1388
|
-
result.append(member)
|
|
1389
|
-
return result
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
def is_callable_compatible(
|
|
1393
|
-
left: CallableType,
|
|
1394
|
-
right: CallableType,
|
|
1395
|
-
*,
|
|
1396
|
-
is_compat: Callable[[Type, Type], bool],
|
|
1397
|
-
is_proper_subtype: bool,
|
|
1398
|
-
is_compat_return: Callable[[Type, Type], bool] | None = None,
|
|
1399
|
-
ignore_return: bool = False,
|
|
1400
|
-
ignore_pos_arg_names: bool = False,
|
|
1401
|
-
check_args_covariantly: bool = False,
|
|
1402
|
-
allow_partial_overlap: bool = False,
|
|
1403
|
-
strict_concatenate: bool = False,
|
|
1404
|
-
no_unify_none: bool = False,
|
|
1405
|
-
) -> bool:
|
|
1406
|
-
"""Is the left compatible with the right, using the provided compatibility check?
|
|
1407
|
-
|
|
1408
|
-
is_compat:
|
|
1409
|
-
The check we want to run against the parameters.
|
|
1410
|
-
|
|
1411
|
-
is_compat_return:
|
|
1412
|
-
The check we want to run against the return type.
|
|
1413
|
-
If None, use the 'is_compat' check.
|
|
1414
|
-
|
|
1415
|
-
check_args_covariantly:
|
|
1416
|
-
If true, check if the left's args is compatible with the right's
|
|
1417
|
-
instead of the other way around (contravariantly).
|
|
1418
|
-
|
|
1419
|
-
This function is mostly used to check if the left is a subtype of the right which
|
|
1420
|
-
is why the default is to check the args contravariantly. However, it's occasionally
|
|
1421
|
-
useful to check the args using some other check, so we leave the variance
|
|
1422
|
-
configurable.
|
|
1423
|
-
|
|
1424
|
-
For example, when checking the validity of overloads, it's useful to see if
|
|
1425
|
-
the first overload alternative has more precise arguments then the second.
|
|
1426
|
-
We would want to check the arguments covariantly in that case.
|
|
1427
|
-
|
|
1428
|
-
Note! The following two function calls are NOT equivalent:
|
|
1429
|
-
|
|
1430
|
-
is_callable_compatible(f, g, is_compat=is_subtype, check_args_covariantly=False)
|
|
1431
|
-
is_callable_compatible(g, f, is_compat=is_subtype, check_args_covariantly=True)
|
|
1432
|
-
|
|
1433
|
-
The two calls are similar in that they both check the function arguments in
|
|
1434
|
-
the same direction: they both run `is_subtype(argument_from_g, argument_from_f)`.
|
|
1435
|
-
|
|
1436
|
-
However, the two calls differ in which direction they check things like
|
|
1437
|
-
keyword arguments. For example, suppose f and g are defined like so:
|
|
1438
|
-
|
|
1439
|
-
def f(x: int, *y: int) -> int: ...
|
|
1440
|
-
def g(x: int) -> int: ...
|
|
1441
|
-
|
|
1442
|
-
In this case, the first call will succeed and the second will fail: f is a
|
|
1443
|
-
valid stand-in for g but not vice-versa.
|
|
1444
|
-
|
|
1445
|
-
allow_partial_overlap:
|
|
1446
|
-
By default this function returns True if and only if *all* calls to left are
|
|
1447
|
-
also calls to right (with respect to the provided 'is_compat' function).
|
|
1448
|
-
|
|
1449
|
-
If this parameter is set to 'True', we return True if *there exists at least one*
|
|
1450
|
-
call to left that's also a call to right.
|
|
1451
|
-
|
|
1452
|
-
In other words, we perform an existential check instead of a universal one;
|
|
1453
|
-
we require left to only overlap with right instead of being a subset.
|
|
1454
|
-
|
|
1455
|
-
For example, suppose we set 'is_compat' to some subtype check and compare following:
|
|
1456
|
-
|
|
1457
|
-
f(x: float, y: str = "...", *args: bool) -> str
|
|
1458
|
-
g(*args: int) -> str
|
|
1459
|
-
|
|
1460
|
-
This function would normally return 'False': f is not a subtype of g.
|
|
1461
|
-
However, we would return True if this parameter is set to 'True': the two
|
|
1462
|
-
calls are compatible if the user runs "f_or_g(3)". In the context of that
|
|
1463
|
-
specific call, the two functions effectively have signatures of:
|
|
1464
|
-
|
|
1465
|
-
f2(float) -> str
|
|
1466
|
-
g2(int) -> str
|
|
1467
|
-
|
|
1468
|
-
Here, f2 is a valid subtype of g2 so we return True.
|
|
1469
|
-
|
|
1470
|
-
Specifically, if this parameter is set this function will:
|
|
1471
|
-
|
|
1472
|
-
- Ignore optional arguments on either the left or right that have no
|
|
1473
|
-
corresponding match.
|
|
1474
|
-
- No longer mandate optional arguments on either side are also optional
|
|
1475
|
-
on the other.
|
|
1476
|
-
- No longer mandate that if right has a *arg or **kwarg that left must also
|
|
1477
|
-
have the same.
|
|
1478
|
-
|
|
1479
|
-
Note: when this argument is set to True, this function becomes "symmetric" --
|
|
1480
|
-
the following calls are equivalent:
|
|
1481
|
-
|
|
1482
|
-
is_callable_compatible(f, g,
|
|
1483
|
-
is_compat=some_check,
|
|
1484
|
-
check_args_covariantly=False,
|
|
1485
|
-
allow_partial_overlap=True)
|
|
1486
|
-
is_callable_compatible(g, f,
|
|
1487
|
-
is_compat=some_check,
|
|
1488
|
-
check_args_covariantly=True,
|
|
1489
|
-
allow_partial_overlap=True)
|
|
1490
|
-
|
|
1491
|
-
If the 'some_check' function is also symmetric, the two calls would be equivalent
|
|
1492
|
-
whether or not we check the args covariantly.
|
|
1493
|
-
"""
|
|
1494
|
-
# Normalize both types before comparing them.
|
|
1495
|
-
left = left.with_unpacked_kwargs().with_normalized_var_args()
|
|
1496
|
-
right = right.with_unpacked_kwargs().with_normalized_var_args()
|
|
1497
|
-
|
|
1498
|
-
if is_compat_return is None:
|
|
1499
|
-
is_compat_return = is_compat
|
|
1500
|
-
|
|
1501
|
-
# If either function is implicitly typed, ignore positional arg names too
|
|
1502
|
-
if left.implicit or right.implicit:
|
|
1503
|
-
ignore_pos_arg_names = True
|
|
1504
|
-
|
|
1505
|
-
# Non-type cannot be a subtype of type.
|
|
1506
|
-
if right.is_type_obj() and not left.is_type_obj() and not allow_partial_overlap:
|
|
1507
|
-
return False
|
|
1508
|
-
|
|
1509
|
-
# A callable L is a subtype of a generic callable R if L is a
|
|
1510
|
-
# subtype of every type obtained from R by substituting types for
|
|
1511
|
-
# the variables of R. We can check this by simply leaving the
|
|
1512
|
-
# generic variables of R as type variables, effectively varying
|
|
1513
|
-
# over all possible values.
|
|
1514
|
-
|
|
1515
|
-
# It's okay even if these variables share ids with generic
|
|
1516
|
-
# type variables of L, because generating and solving
|
|
1517
|
-
# constraints for the variables of L to make L a subtype of R
|
|
1518
|
-
# (below) treats type variables on the two sides as independent.
|
|
1519
|
-
if left.variables:
|
|
1520
|
-
# Apply generic type variables away in left via type inference.
|
|
1521
|
-
unified = unify_generic_callable(
|
|
1522
|
-
left, right, ignore_return=ignore_return, no_unify_none=no_unify_none
|
|
1523
|
-
)
|
|
1524
|
-
if unified is None:
|
|
1525
|
-
return False
|
|
1526
|
-
left = unified
|
|
1527
|
-
|
|
1528
|
-
# If we allow partial overlaps, we don't need to leave R generic:
|
|
1529
|
-
# if we can find even just a single typevar assignment which
|
|
1530
|
-
# would make these callables compatible, we should return True.
|
|
1531
|
-
|
|
1532
|
-
# So, we repeat the above checks in the opposite direction. This also
|
|
1533
|
-
# lets us preserve the 'symmetry' property of allow_partial_overlap.
|
|
1534
|
-
if allow_partial_overlap and right.variables:
|
|
1535
|
-
unified = unify_generic_callable(
|
|
1536
|
-
right, left, ignore_return=ignore_return, no_unify_none=no_unify_none
|
|
1537
|
-
)
|
|
1538
|
-
if unified is not None:
|
|
1539
|
-
right = unified
|
|
1540
|
-
|
|
1541
|
-
# Check return types.
|
|
1542
|
-
if not ignore_return and not is_compat_return(left.ret_type, right.ret_type):
|
|
1543
|
-
return False
|
|
1544
|
-
|
|
1545
|
-
if check_args_covariantly:
|
|
1546
|
-
is_compat = flip_compat_check(is_compat)
|
|
1547
|
-
|
|
1548
|
-
if not strict_concatenate and (left.from_concatenate or right.from_concatenate):
|
|
1549
|
-
strict_concatenate_check = False
|
|
1550
|
-
else:
|
|
1551
|
-
strict_concatenate_check = True
|
|
1552
|
-
|
|
1553
|
-
return are_parameters_compatible(
|
|
1554
|
-
left,
|
|
1555
|
-
right,
|
|
1556
|
-
is_compat=is_compat,
|
|
1557
|
-
is_proper_subtype=is_proper_subtype,
|
|
1558
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
1559
|
-
allow_partial_overlap=allow_partial_overlap,
|
|
1560
|
-
strict_concatenate_check=strict_concatenate_check,
|
|
1561
|
-
)
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
def are_trivial_parameters(param: Parameters | NormalizedCallableType) -> bool:
|
|
1565
|
-
param_star = param.var_arg()
|
|
1566
|
-
param_star2 = param.kw_arg()
|
|
1567
|
-
return (
|
|
1568
|
-
param.arg_kinds == [ARG_STAR, ARG_STAR2]
|
|
1569
|
-
and param_star is not None
|
|
1570
|
-
and isinstance(get_proper_type(param_star.typ), AnyType)
|
|
1571
|
-
and param_star2 is not None
|
|
1572
|
-
and isinstance(get_proper_type(param_star2.typ), AnyType)
|
|
1573
|
-
)
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
def is_trivial_suffix(param: Parameters | NormalizedCallableType) -> bool:
|
|
1577
|
-
param_star = param.var_arg()
|
|
1578
|
-
param_star2 = param.kw_arg()
|
|
1579
|
-
return (
|
|
1580
|
-
param.arg_kinds[-2:] == [ARG_STAR, ARG_STAR2]
|
|
1581
|
-
and param_star is not None
|
|
1582
|
-
and isinstance(get_proper_type(param_star.typ), AnyType)
|
|
1583
|
-
and param_star2 is not None
|
|
1584
|
-
and isinstance(get_proper_type(param_star2.typ), AnyType)
|
|
1585
|
-
)
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
def are_parameters_compatible(
|
|
1589
|
-
left: Parameters | NormalizedCallableType,
|
|
1590
|
-
right: Parameters | NormalizedCallableType,
|
|
1591
|
-
*,
|
|
1592
|
-
is_compat: Callable[[Type, Type], bool],
|
|
1593
|
-
is_proper_subtype: bool,
|
|
1594
|
-
ignore_pos_arg_names: bool = False,
|
|
1595
|
-
allow_partial_overlap: bool = False,
|
|
1596
|
-
strict_concatenate_check: bool = False,
|
|
1597
|
-
) -> bool:
|
|
1598
|
-
"""Helper function for is_callable_compatible, used for Parameter compatibility"""
|
|
1599
|
-
if right.is_ellipsis_args and not is_proper_subtype:
|
|
1600
|
-
return True
|
|
1601
|
-
|
|
1602
|
-
left_star = left.var_arg()
|
|
1603
|
-
left_star2 = left.kw_arg()
|
|
1604
|
-
right_star = right.var_arg()
|
|
1605
|
-
right_star2 = right.kw_arg()
|
|
1606
|
-
|
|
1607
|
-
# Treat "def _(*a: Any, **kw: Any) -> X" similarly to "Callable[..., X]"
|
|
1608
|
-
if are_trivial_parameters(right) and not is_proper_subtype:
|
|
1609
|
-
return True
|
|
1610
|
-
trivial_suffix = is_trivial_suffix(right) and not is_proper_subtype
|
|
1611
|
-
|
|
1612
|
-
if (
|
|
1613
|
-
right.arg_kinds == [ARG_STAR]
|
|
1614
|
-
and isinstance(get_proper_type(right.arg_types[0]), AnyType)
|
|
1615
|
-
and not is_proper_subtype
|
|
1616
|
-
):
|
|
1617
|
-
# Similar to how (*Any, **Any) is considered a supertype of all callables, we consider
|
|
1618
|
-
# (*Any) a supertype of all callables with positional arguments. This is needed in
|
|
1619
|
-
# particular because we often refuse to try type inference if actual type is not
|
|
1620
|
-
# a subtype of erased template type.
|
|
1621
|
-
if all(k.is_positional() for k in left.arg_kinds) and ignore_pos_arg_names:
|
|
1622
|
-
return True
|
|
1623
|
-
|
|
1624
|
-
# Match up corresponding arguments and check them for compatibility. In
|
|
1625
|
-
# every pair (argL, argR) of corresponding arguments from L and R, argL must
|
|
1626
|
-
# be "more general" than argR if L is to be a subtype of R.
|
|
1627
|
-
|
|
1628
|
-
# Arguments are corresponding if they either share a name, share a position,
|
|
1629
|
-
# or both. If L's corresponding argument is ambiguous, L is not a subtype of R.
|
|
1630
|
-
|
|
1631
|
-
# If left has one corresponding argument by name and another by position,
|
|
1632
|
-
# consider them to be one "merged" argument (and not ambiguous) if they're
|
|
1633
|
-
# both optional, they're name-only and position-only respectively, and they
|
|
1634
|
-
# have the same type. This rule allows functions with (*args, **kwargs) to
|
|
1635
|
-
# properly stand in for the full domain of formal arguments that they're
|
|
1636
|
-
# used for in practice.
|
|
1637
|
-
|
|
1638
|
-
# Every argument in R must have a corresponding argument in L, and every
|
|
1639
|
-
# required argument in L must have a corresponding argument in R.
|
|
1640
|
-
|
|
1641
|
-
# Phase 1: Confirm every argument in R has a corresponding argument in L.
|
|
1642
|
-
|
|
1643
|
-
# Phase 1a: If left and right can both accept an infinite number of args,
|
|
1644
|
-
# their types must be compatible.
|
|
1645
|
-
#
|
|
1646
|
-
# Furthermore, if we're checking for compatibility in all cases,
|
|
1647
|
-
# we confirm that if R accepts an infinite number of arguments,
|
|
1648
|
-
# L must accept the same.
|
|
1649
|
-
def _incompatible(left_arg: FormalArgument | None, right_arg: FormalArgument | None) -> bool:
|
|
1650
|
-
if right_arg is None:
|
|
1651
|
-
return False
|
|
1652
|
-
if left_arg is None:
|
|
1653
|
-
return not allow_partial_overlap and not trivial_suffix
|
|
1654
|
-
return not is_compat(right_arg.typ, left_arg.typ)
|
|
1655
|
-
|
|
1656
|
-
if _incompatible(left_star, right_star) or _incompatible(left_star2, right_star2):
|
|
1657
|
-
return False
|
|
1658
|
-
|
|
1659
|
-
# Phase 1b: Check non-star args: for every arg right can accept, left must
|
|
1660
|
-
# also accept. The only exception is if we are allowing partial
|
|
1661
|
-
# overlaps: in that case, we ignore optional args on the right.
|
|
1662
|
-
for right_arg in right.formal_arguments():
|
|
1663
|
-
left_arg = mypy.typeops.callable_corresponding_argument(left, right_arg)
|
|
1664
|
-
if left_arg is None:
|
|
1665
|
-
if allow_partial_overlap and not right_arg.required:
|
|
1666
|
-
continue
|
|
1667
|
-
return False
|
|
1668
|
-
if not are_args_compatible(
|
|
1669
|
-
left_arg,
|
|
1670
|
-
right_arg,
|
|
1671
|
-
is_compat,
|
|
1672
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
1673
|
-
allow_partial_overlap=allow_partial_overlap,
|
|
1674
|
-
allow_imprecise_kinds=right.imprecise_arg_kinds,
|
|
1675
|
-
):
|
|
1676
|
-
return False
|
|
1677
|
-
|
|
1678
|
-
# Phase 1c: Check var args. Right has an infinite series of optional positional
|
|
1679
|
-
# arguments. Get all further positional args of left, and make sure
|
|
1680
|
-
# they're more general than the corresponding member in right.
|
|
1681
|
-
# TODO: are we handling UnpackType correctly here?
|
|
1682
|
-
if right_star is not None and not trivial_suffix:
|
|
1683
|
-
# Synthesize an anonymous formal argument for the right
|
|
1684
|
-
right_by_position = right.try_synthesizing_arg_from_vararg(None)
|
|
1685
|
-
assert right_by_position is not None
|
|
1686
|
-
|
|
1687
|
-
i = right_star.pos
|
|
1688
|
-
assert i is not None
|
|
1689
|
-
while i < len(left.arg_kinds) and left.arg_kinds[i].is_positional():
|
|
1690
|
-
if allow_partial_overlap and left.arg_kinds[i].is_optional():
|
|
1691
|
-
break
|
|
1692
|
-
|
|
1693
|
-
left_by_position = left.argument_by_position(i)
|
|
1694
|
-
assert left_by_position is not None
|
|
1695
|
-
|
|
1696
|
-
if not are_args_compatible(
|
|
1697
|
-
left_by_position,
|
|
1698
|
-
right_by_position,
|
|
1699
|
-
is_compat,
|
|
1700
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
1701
|
-
allow_partial_overlap=allow_partial_overlap,
|
|
1702
|
-
):
|
|
1703
|
-
return False
|
|
1704
|
-
i += 1
|
|
1705
|
-
|
|
1706
|
-
# Phase 1d: Check kw args. Right has an infinite series of optional named
|
|
1707
|
-
# arguments. Get all further named args of left, and make sure
|
|
1708
|
-
# they're more general than the corresponding member in right.
|
|
1709
|
-
if right_star2 is not None and not trivial_suffix:
|
|
1710
|
-
right_names = {name for name in right.arg_names if name is not None}
|
|
1711
|
-
left_only_names = set()
|
|
1712
|
-
for name, kind in zip(left.arg_names, left.arg_kinds):
|
|
1713
|
-
if (
|
|
1714
|
-
name is None
|
|
1715
|
-
or kind.is_star()
|
|
1716
|
-
or name in right_names
|
|
1717
|
-
or not strict_concatenate_check
|
|
1718
|
-
):
|
|
1719
|
-
continue
|
|
1720
|
-
left_only_names.add(name)
|
|
1721
|
-
|
|
1722
|
-
# Synthesize an anonymous formal argument for the right
|
|
1723
|
-
right_by_name = right.try_synthesizing_arg_from_kwarg(None)
|
|
1724
|
-
assert right_by_name is not None
|
|
1725
|
-
|
|
1726
|
-
for name in left_only_names:
|
|
1727
|
-
left_by_name = left.argument_by_name(name)
|
|
1728
|
-
assert left_by_name is not None
|
|
1729
|
-
|
|
1730
|
-
if allow_partial_overlap and not left_by_name.required:
|
|
1731
|
-
continue
|
|
1732
|
-
|
|
1733
|
-
if not are_args_compatible(
|
|
1734
|
-
left_by_name,
|
|
1735
|
-
right_by_name,
|
|
1736
|
-
is_compat,
|
|
1737
|
-
ignore_pos_arg_names=ignore_pos_arg_names,
|
|
1738
|
-
allow_partial_overlap=allow_partial_overlap,
|
|
1739
|
-
):
|
|
1740
|
-
return False
|
|
1741
|
-
|
|
1742
|
-
# Phase 2: Left must not impose additional restrictions.
|
|
1743
|
-
# (Every required argument in L must have a corresponding argument in R)
|
|
1744
|
-
# Note: we already checked the *arg and **kwarg arguments in phase 1a.
|
|
1745
|
-
for left_arg in left.formal_arguments():
|
|
1746
|
-
right_by_name = (
|
|
1747
|
-
right.argument_by_name(left_arg.name) if left_arg.name is not None else None
|
|
1748
|
-
)
|
|
1749
|
-
|
|
1750
|
-
right_by_pos = (
|
|
1751
|
-
right.argument_by_position(left_arg.pos) if left_arg.pos is not None else None
|
|
1752
|
-
)
|
|
1753
|
-
|
|
1754
|
-
# If the left hand argument corresponds to two right-hand arguments,
|
|
1755
|
-
# neither of them can be required.
|
|
1756
|
-
if (
|
|
1757
|
-
right_by_name is not None
|
|
1758
|
-
and right_by_pos is not None
|
|
1759
|
-
and right_by_name != right_by_pos
|
|
1760
|
-
and (right_by_pos.required or right_by_name.required)
|
|
1761
|
-
and strict_concatenate_check
|
|
1762
|
-
and not right.imprecise_arg_kinds
|
|
1763
|
-
):
|
|
1764
|
-
return False
|
|
1765
|
-
|
|
1766
|
-
# All *required* left-hand arguments must have a corresponding
|
|
1767
|
-
# right-hand argument. Optional args do not matter.
|
|
1768
|
-
if left_arg.required and right_by_pos is None and right_by_name is None:
|
|
1769
|
-
return False
|
|
1770
|
-
|
|
1771
|
-
return True
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
def are_args_compatible(
|
|
1775
|
-
left: FormalArgument,
|
|
1776
|
-
right: FormalArgument,
|
|
1777
|
-
is_compat: Callable[[Type, Type], bool],
|
|
1778
|
-
*,
|
|
1779
|
-
ignore_pos_arg_names: bool,
|
|
1780
|
-
allow_partial_overlap: bool,
|
|
1781
|
-
allow_imprecise_kinds: bool = False,
|
|
1782
|
-
) -> bool:
|
|
1783
|
-
if left.required and right.required:
|
|
1784
|
-
# If both arguments are required allow_partial_overlap has no effect.
|
|
1785
|
-
allow_partial_overlap = False
|
|
1786
|
-
|
|
1787
|
-
def is_different(left_item: object | None, right_item: object | None) -> bool:
|
|
1788
|
-
"""Checks if the left and right items are different.
|
|
1789
|
-
|
|
1790
|
-
If the right item is unspecified (e.g. if the right callable doesn't care
|
|
1791
|
-
about what name or position its arg has), we default to returning False.
|
|
1792
|
-
|
|
1793
|
-
If we're allowing partial overlap, we also default to returning False
|
|
1794
|
-
if the left callable also doesn't care."""
|
|
1795
|
-
if right_item is None:
|
|
1796
|
-
return False
|
|
1797
|
-
if allow_partial_overlap and left_item is None:
|
|
1798
|
-
return False
|
|
1799
|
-
return left_item != right_item
|
|
1800
|
-
|
|
1801
|
-
# If right has a specific name it wants this argument to be, left must
|
|
1802
|
-
# have the same.
|
|
1803
|
-
if is_different(left.name, right.name):
|
|
1804
|
-
# But pay attention to whether we're ignoring positional arg names
|
|
1805
|
-
if not ignore_pos_arg_names or right.pos is None:
|
|
1806
|
-
return False
|
|
1807
|
-
|
|
1808
|
-
# If right is at a specific position, left must have the same:
|
|
1809
|
-
if is_different(left.pos, right.pos) and not allow_imprecise_kinds:
|
|
1810
|
-
return False
|
|
1811
|
-
|
|
1812
|
-
# If right's argument is optional, left's must also be
|
|
1813
|
-
# (unless we're relaxing the checks to allow potential
|
|
1814
|
-
# rather than definite compatibility).
|
|
1815
|
-
if not allow_partial_overlap and not right.required and left.required:
|
|
1816
|
-
return False
|
|
1817
|
-
|
|
1818
|
-
# If we're allowing partial overlaps and neither arg is required,
|
|
1819
|
-
# the types don't actually need to be the same
|
|
1820
|
-
if allow_partial_overlap and not left.required and not right.required:
|
|
1821
|
-
return True
|
|
1822
|
-
|
|
1823
|
-
# Left must have a more general type
|
|
1824
|
-
return is_compat(right.typ, left.typ)
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
def flip_compat_check(is_compat: Callable[[Type, Type], bool]) -> Callable[[Type, Type], bool]:
|
|
1828
|
-
def new_is_compat(left: Type, right: Type) -> bool:
|
|
1829
|
-
return is_compat(right, left)
|
|
1830
|
-
|
|
1831
|
-
return new_is_compat
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
def unify_generic_callable(
|
|
1835
|
-
type: NormalizedCallableType,
|
|
1836
|
-
target: NormalizedCallableType,
|
|
1837
|
-
ignore_return: bool,
|
|
1838
|
-
return_constraint_direction: int | None = None,
|
|
1839
|
-
*,
|
|
1840
|
-
no_unify_none: bool = False,
|
|
1841
|
-
) -> NormalizedCallableType | None:
|
|
1842
|
-
"""Try to unify a generic callable type with another callable type.
|
|
1843
|
-
|
|
1844
|
-
Return unified CallableType if successful; otherwise, return None.
|
|
1845
|
-
"""
|
|
1846
|
-
import mypy.solve
|
|
1847
|
-
|
|
1848
|
-
if return_constraint_direction is None:
|
|
1849
|
-
return_constraint_direction = mypy.constraints.SUBTYPE_OF
|
|
1850
|
-
|
|
1851
|
-
constraints: list[mypy.constraints.Constraint] = []
|
|
1852
|
-
# There is some special logic for inference in callables, so better use them
|
|
1853
|
-
# as wholes instead of picking separate arguments.
|
|
1854
|
-
cs = mypy.constraints.infer_constraints(
|
|
1855
|
-
type.copy_modified(ret_type=UninhabitedType()),
|
|
1856
|
-
target.copy_modified(ret_type=UninhabitedType()),
|
|
1857
|
-
mypy.constraints.SUBTYPE_OF,
|
|
1858
|
-
skip_neg_op=True,
|
|
1859
|
-
)
|
|
1860
|
-
constraints.extend(cs)
|
|
1861
|
-
if not ignore_return:
|
|
1862
|
-
c = mypy.constraints.infer_constraints(
|
|
1863
|
-
type.ret_type, target.ret_type, return_constraint_direction
|
|
1864
|
-
)
|
|
1865
|
-
constraints.extend(c)
|
|
1866
|
-
if no_unify_none:
|
|
1867
|
-
constraints = [
|
|
1868
|
-
c for c in constraints if not isinstance(get_proper_type(c.target), NoneType)
|
|
1869
|
-
]
|
|
1870
|
-
inferred_vars, _ = mypy.solve.solve_constraints(type.variables, constraints)
|
|
1871
|
-
if None in inferred_vars:
|
|
1872
|
-
return None
|
|
1873
|
-
non_none_inferred_vars = cast(List[Type], inferred_vars)
|
|
1874
|
-
had_errors = False
|
|
1875
|
-
|
|
1876
|
-
def report(*args: Any) -> None:
|
|
1877
|
-
nonlocal had_errors
|
|
1878
|
-
had_errors = True
|
|
1879
|
-
|
|
1880
|
-
# This function may be called by the solver, so we need to allow erased types here.
|
|
1881
|
-
# We anyway allow checking subtyping between other types containing <Erased>
|
|
1882
|
-
# (probably also because solver needs subtyping). See also comment in
|
|
1883
|
-
# ExpandTypeVisitor.visit_erased_type().
|
|
1884
|
-
applied = mypy.applytype.apply_generic_arguments(
|
|
1885
|
-
type, non_none_inferred_vars, report, context=target
|
|
1886
|
-
)
|
|
1887
|
-
if had_errors:
|
|
1888
|
-
return None
|
|
1889
|
-
return cast(NormalizedCallableType, applied)
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
def try_restrict_literal_union(t: UnionType, s: Type) -> list[Type] | None:
|
|
1893
|
-
"""Return the items of t, excluding any occurrence of s, if and only if
|
|
1894
|
-
- t only contains simple literals
|
|
1895
|
-
- s is a simple literal
|
|
1896
|
-
|
|
1897
|
-
Otherwise, returns None
|
|
1898
|
-
"""
|
|
1899
|
-
ps = get_proper_type(s)
|
|
1900
|
-
if not mypy.typeops.is_simple_literal(ps):
|
|
1901
|
-
return None
|
|
1902
|
-
|
|
1903
|
-
new_items: list[Type] = []
|
|
1904
|
-
for i in t.relevant_items():
|
|
1905
|
-
pi = get_proper_type(i)
|
|
1906
|
-
if not mypy.typeops.is_simple_literal(pi):
|
|
1907
|
-
return None
|
|
1908
|
-
if pi != ps:
|
|
1909
|
-
new_items.append(i)
|
|
1910
|
-
return new_items
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
def restrict_subtype_away(t: Type, s: Type) -> Type:
|
|
1914
|
-
"""Return t minus s for runtime type assertions.
|
|
1915
|
-
|
|
1916
|
-
If we can't determine a precise result, return a supertype of the
|
|
1917
|
-
ideal result (just t is a valid result).
|
|
1918
|
-
|
|
1919
|
-
This is used for type inference of runtime type checks such as
|
|
1920
|
-
isinstance(). Currently, this just removes elements of a union type.
|
|
1921
|
-
"""
|
|
1922
|
-
p_t = get_proper_type(t)
|
|
1923
|
-
if isinstance(p_t, UnionType):
|
|
1924
|
-
new_items = try_restrict_literal_union(p_t, s)
|
|
1925
|
-
if new_items is None:
|
|
1926
|
-
new_items = [
|
|
1927
|
-
restrict_subtype_away(item, s)
|
|
1928
|
-
for item in p_t.relevant_items()
|
|
1929
|
-
if (isinstance(get_proper_type(item), AnyType) or not covers_at_runtime(item, s))
|
|
1930
|
-
]
|
|
1931
|
-
return UnionType.make_union(new_items)
|
|
1932
|
-
elif covers_at_runtime(t, s):
|
|
1933
|
-
return UninhabitedType()
|
|
1934
|
-
else:
|
|
1935
|
-
return t
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
def covers_at_runtime(item: Type, supertype: Type) -> bool:
|
|
1939
|
-
"""Will isinstance(item, supertype) always return True at runtime?"""
|
|
1940
|
-
item = get_proper_type(item)
|
|
1941
|
-
supertype = get_proper_type(supertype)
|
|
1942
|
-
|
|
1943
|
-
# Since runtime type checks will ignore type arguments, erase the types.
|
|
1944
|
-
supertype = erase_type(supertype)
|
|
1945
|
-
if is_proper_subtype(
|
|
1946
|
-
erase_type(item), supertype, ignore_promotions=True, erase_instances=True
|
|
1947
|
-
):
|
|
1948
|
-
return True
|
|
1949
|
-
if isinstance(supertype, Instance):
|
|
1950
|
-
if supertype.type.is_protocol:
|
|
1951
|
-
# TODO: Implement more robust support for runtime isinstance() checks, see issue #3827.
|
|
1952
|
-
if is_proper_subtype(item, supertype, ignore_promotions=True):
|
|
1953
|
-
return True
|
|
1954
|
-
if isinstance(item, TypedDictType):
|
|
1955
|
-
# Special case useful for selecting TypedDicts from unions using isinstance(x, dict).
|
|
1956
|
-
if supertype.type.fullname == "builtins.dict":
|
|
1957
|
-
return True
|
|
1958
|
-
elif isinstance(item, TypeVarType):
|
|
1959
|
-
if is_proper_subtype(item.upper_bound, supertype, ignore_promotions=True):
|
|
1960
|
-
return True
|
|
1961
|
-
elif isinstance(item, Instance) and supertype.type.fullname == "builtins.int":
|
|
1962
|
-
# "int" covers all native int types
|
|
1963
|
-
if item.type.fullname in MYPYC_NATIVE_INT_NAMES:
|
|
1964
|
-
return True
|
|
1965
|
-
# TODO: Add more special cases.
|
|
1966
|
-
return False
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
def is_more_precise(left: Type, right: Type, *, ignore_promotions: bool = False) -> bool:
|
|
1970
|
-
"""Check if left is a more precise type than right.
|
|
1971
|
-
|
|
1972
|
-
A left is a proper subtype of right, left is also more precise than
|
|
1973
|
-
right. Also, if right is Any, left is more precise than right, for
|
|
1974
|
-
any left.
|
|
1975
|
-
"""
|
|
1976
|
-
# TODO Should List[int] be more precise than List[Any]?
|
|
1977
|
-
right = get_proper_type(right)
|
|
1978
|
-
if isinstance(right, AnyType):
|
|
1979
|
-
return True
|
|
1980
|
-
return is_proper_subtype(left, right, ignore_promotions=ignore_promotions)
|