mypy-dev 1.9.0.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mypy/__init__.py +1 -0
- mypy/__main__.py +37 -0
- mypy/api.py +94 -0
- mypy/applytype.py +156 -0
- mypy/argmap.py +268 -0
- mypy/binder.py +538 -0
- mypy/bogus_type.py +27 -0
- mypy/build.py +3562 -0
- mypy/checker.py +8372 -0
- mypy/checkexpr.py +6615 -0
- mypy/checkmember.py +1356 -0
- mypy/checkpattern.py +801 -0
- mypy/checkstrformat.py +1109 -0
- mypy/config_parser.py +670 -0
- mypy/constant_fold.py +187 -0
- mypy/constraints.py +1624 -0
- mypy/copytype.py +133 -0
- mypy/defaults.py +46 -0
- mypy/dmypy/__init__.py +0 -0
- mypy/dmypy/__main__.py +6 -0
- mypy/dmypy/client.py +749 -0
- mypy/dmypy_os.py +42 -0
- mypy/dmypy_server.py +1107 -0
- mypy/dmypy_util.py +117 -0
- mypy/erasetype.py +278 -0
- mypy/errorcodes.py +285 -0
- mypy/errors.py +1280 -0
- mypy/evalexpr.py +205 -0
- mypy/expandtype.py +510 -0
- mypy/exprtotype.py +206 -0
- mypy/fastparse.py +2147 -0
- mypy/find_sources.py +243 -0
- mypy/fixup.py +426 -0
- mypy/freetree.py +23 -0
- mypy/fscache.py +309 -0
- mypy/fswatcher.py +106 -0
- mypy/gclogger.py +47 -0
- mypy/git.py +34 -0
- mypy/graph_utils.py +112 -0
- mypy/indirection.py +121 -0
- mypy/infer.py +75 -0
- mypy/inspections.py +627 -0
- mypy/ipc.py +310 -0
- mypy/join.py +866 -0
- mypy/literals.py +306 -0
- mypy/lookup.py +61 -0
- mypy/main.py +1574 -0
- mypy/maptype.py +106 -0
- mypy/meet.py +1140 -0
- mypy/memprofile.py +121 -0
- mypy/message_registry.py +326 -0
- mypy/messages.py +3171 -0
- mypy/metastore.py +225 -0
- mypy/mixedtraverser.py +112 -0
- mypy/modulefinder.py +875 -0
- mypy/moduleinspect.py +184 -0
- mypy/mro.py +62 -0
- mypy/nodes.py +4112 -0
- mypy/operators.py +126 -0
- mypy/options.py +556 -0
- mypy/parse.py +30 -0
- mypy/partially_defined.py +675 -0
- mypy/patterns.py +150 -0
- mypy/plugin.py +901 -0
- mypy/plugins/__init__.py +0 -0
- mypy/plugins/attrs.py +1152 -0
- mypy/plugins/common.py +440 -0
- mypy/plugins/ctypes.py +245 -0
- mypy/plugins/dataclasses.py +1101 -0
- mypy/plugins/default.py +518 -0
- mypy/plugins/enums.py +259 -0
- mypy/plugins/functools.py +104 -0
- mypy/plugins/proper_plugin.py +175 -0
- mypy/plugins/singledispatch.py +224 -0
- mypy/py.typed +1 -0
- mypy/pyinfo.py +78 -0
- mypy/reachability.py +362 -0
- mypy/refinfo.py +92 -0
- mypy/renaming.py +568 -0
- mypy/report.py +924 -0
- mypy/scope.py +125 -0
- mypy/semanal.py +7023 -0
- mypy/semanal_classprop.py +187 -0
- mypy/semanal_enum.py +253 -0
- mypy/semanal_infer.py +128 -0
- mypy/semanal_main.py +511 -0
- mypy/semanal_namedtuple.py +670 -0
- mypy/semanal_newtype.py +273 -0
- mypy/semanal_pass1.py +156 -0
- mypy/semanal_shared.py +490 -0
- mypy/semanal_typeargs.py +265 -0
- mypy/semanal_typeddict.py +575 -0
- mypy/server/__init__.py +0 -0
- mypy/server/astdiff.py +518 -0
- mypy/server/astmerge.py +562 -0
- mypy/server/aststrip.py +281 -0
- mypy/server/deps.py +1137 -0
- mypy/server/mergecheck.py +83 -0
- mypy/server/objgraph.py +101 -0
- mypy/server/subexpr.py +198 -0
- mypy/server/target.py +11 -0
- mypy/server/trigger.py +26 -0
- mypy/server/update.py +1339 -0
- mypy/sharedparse.py +112 -0
- mypy/solve.py +562 -0
- mypy/split_namespace.py +35 -0
- mypy/state.py +28 -0
- mypy/stats.py +489 -0
- mypy/strconv.py +641 -0
- mypy/stubdoc.py +491 -0
- mypy/stubgen.py +1873 -0
- mypy/stubgenc.py +993 -0
- mypy/stubinfo.py +173 -0
- mypy/stubtest.py +2079 -0
- mypy/stubutil.py +807 -0
- mypy/subtypes.py +1967 -0
- mypy/suggestions.py +1046 -0
- mypy/test/__init__.py +0 -0
- mypy/test/config.py +28 -0
- mypy/test/data.py +823 -0
- mypy/test/helpers.py +476 -0
- mypy/test/meta/__init__.py +0 -0
- mypy/test/meta/_pytest.py +72 -0
- mypy/test/meta/test_diff_helper.py +47 -0
- mypy/test/meta/test_parse_data.py +73 -0
- mypy/test/meta/test_update_data.py +135 -0
- mypy/test/test_find_sources.py +376 -0
- mypy/test/test_ref_info.py +45 -0
- mypy/test/testapi.py +45 -0
- mypy/test/testargs.py +77 -0
- mypy/test/testcheck.py +322 -0
- mypy/test/testcmdline.py +152 -0
- mypy/test/testconstraints.py +134 -0
- mypy/test/testdaemon.py +132 -0
- mypy/test/testdeps.py +77 -0
- mypy/test/testdiff.py +67 -0
- mypy/test/testerrorstream.py +46 -0
- mypy/test/testfinegrained.py +438 -0
- mypy/test/testfinegrainedcache.py +18 -0
- mypy/test/testformatter.py +85 -0
- mypy/test/testfscache.py +101 -0
- mypy/test/testgraph.py +83 -0
- mypy/test/testinfer.py +373 -0
- mypy/test/testipc.py +119 -0
- mypy/test/testmerge.py +238 -0
- mypy/test/testmodulefinder.py +278 -0
- mypy/test/testmypyc.py +14 -0
- mypy/test/testparse.py +107 -0
- mypy/test/testpep561.py +211 -0
- mypy/test/testpythoneval.py +117 -0
- mypy/test/testreports.py +55 -0
- mypy/test/testsemanal.py +209 -0
- mypy/test/testsolve.py +285 -0
- mypy/test/teststubgen.py +1412 -0
- mypy/test/teststubinfo.py +12 -0
- mypy/test/teststubtest.py +2492 -0
- mypy/test/testsubtypes.py +303 -0
- mypy/test/testtransform.py +64 -0
- mypy/test/testtypegen.py +83 -0
- mypy/test/testtypes.py +1551 -0
- mypy/test/testutil.py +111 -0
- mypy/test/typefixture.py +415 -0
- mypy/test/update_data.py +87 -0
- mypy/test/visitors.py +63 -0
- mypy/traverser.py +961 -0
- mypy/treetransform.py +800 -0
- mypy/tvar_scope.py +147 -0
- mypy/type_visitor.py +564 -0
- mypy/typeanal.py +2510 -0
- mypy/typeops.py +1082 -0
- mypy/types.py +3686 -0
- mypy/types_utils.py +166 -0
- mypy/typeshed/LICENSE +237 -0
- mypy/typeshed/stdlib/VERSIONS +308 -0
- mypy/typeshed/stdlib/__future__.pyi +36 -0
- mypy/typeshed/stdlib/__main__.pyi +3 -0
- mypy/typeshed/stdlib/_ast.pyi +587 -0
- mypy/typeshed/stdlib/_bisect.pyi +84 -0
- mypy/typeshed/stdlib/_bootlocale.pyi +1 -0
- mypy/typeshed/stdlib/_codecs.pyi +133 -0
- mypy/typeshed/stdlib/_collections_abc.pyi +94 -0
- mypy/typeshed/stdlib/_compat_pickle.pyi +8 -0
- mypy/typeshed/stdlib/_compression.pyi +25 -0
- mypy/typeshed/stdlib/_csv.pyi +90 -0
- mypy/typeshed/stdlib/_ctypes.pyi +205 -0
- mypy/typeshed/stdlib/_curses.pyi +557 -0
- mypy/typeshed/stdlib/_decimal.pyi +281 -0
- mypy/typeshed/stdlib/_dummy_thread.pyi +27 -0
- mypy/typeshed/stdlib/_dummy_threading.pyi +164 -0
- mypy/typeshed/stdlib/_heapq.pyi +11 -0
- mypy/typeshed/stdlib/_imp.pyi +28 -0
- mypy/typeshed/stdlib/_json.pyi +49 -0
- mypy/typeshed/stdlib/_locale.pyi +100 -0
- mypy/typeshed/stdlib/_markupbase.pyi +16 -0
- mypy/typeshed/stdlib/_msi.pyi +91 -0
- mypy/typeshed/stdlib/_operator.pyi +147 -0
- mypy/typeshed/stdlib/_osx_support.pyi +34 -0
- mypy/typeshed/stdlib/_posixsubprocess.pyi +32 -0
- mypy/typeshed/stdlib/_py_abc.pyi +14 -0
- mypy/typeshed/stdlib/_pydecimal.pyi +43 -0
- mypy/typeshed/stdlib/_random.pyi +12 -0
- mypy/typeshed/stdlib/_sitebuiltins.pyi +16 -0
- mypy/typeshed/stdlib/_socket.pyi +802 -0
- mypy/typeshed/stdlib/_stat.pyi +103 -0
- mypy/typeshed/stdlib/_thread.pyi +52 -0
- mypy/typeshed/stdlib/_threading_local.pyi +17 -0
- mypy/typeshed/stdlib/_tkinter.pyi +120 -0
- mypy/typeshed/stdlib/_tracemalloc.pyi +17 -0
- mypy/typeshed/stdlib/_typeshed/__init__.pyi +347 -0
- mypy/typeshed/stdlib/_typeshed/dbapi.pyi +37 -0
- mypy/typeshed/stdlib/_typeshed/wsgi.pyi +44 -0
- mypy/typeshed/stdlib/_typeshed/xml.pyi +9 -0
- mypy/typeshed/stdlib/_warnings.pyi +55 -0
- mypy/typeshed/stdlib/_weakref.pyi +41 -0
- mypy/typeshed/stdlib/_weakrefset.pyi +51 -0
- mypy/typeshed/stdlib/_winapi.pyi +251 -0
- mypy/typeshed/stdlib/abc.pyi +49 -0
- mypy/typeshed/stdlib/aifc.pyi +91 -0
- mypy/typeshed/stdlib/antigravity.pyi +3 -0
- mypy/typeshed/stdlib/argparse.pyi +571 -0
- mypy/typeshed/stdlib/array.pyi +92 -0
- mypy/typeshed/stdlib/ast.pyi +277 -0
- mypy/typeshed/stdlib/asynchat.pyi +21 -0
- mypy/typeshed/stdlib/asyncio/__init__.pyi +41 -0
- mypy/typeshed/stdlib/asyncio/base_events.pyi +440 -0
- mypy/typeshed/stdlib/asyncio/base_futures.pyi +19 -0
- mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +63 -0
- mypy/typeshed/stdlib/asyncio/base_tasks.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/constants.pyi +20 -0
- mypy/typeshed/stdlib/asyncio/coroutines.pyi +26 -0
- mypy/typeshed/stdlib/asyncio/events.pyi +574 -0
- mypy/typeshed/stdlib/asyncio/exceptions.pyi +43 -0
- mypy/typeshed/stdlib/asyncio/format_helpers.pyi +20 -0
- mypy/typeshed/stdlib/asyncio/futures.pyi +57 -0
- mypy/typeshed/stdlib/asyncio/locks.pyi +121 -0
- mypy/typeshed/stdlib/asyncio/log.pyi +3 -0
- mypy/typeshed/stdlib/asyncio/mixins.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/proactor_events.pyi +64 -0
- mypy/typeshed/stdlib/asyncio/protocols.pyi +34 -0
- mypy/typeshed/stdlib/asyncio/queues.pyi +47 -0
- mypy/typeshed/stdlib/asyncio/runners.pyi +32 -0
- mypy/typeshed/stdlib/asyncio/selector_events.pyi +8 -0
- mypy/typeshed/stdlib/asyncio/sslproto.pyi +163 -0
- mypy/typeshed/stdlib/asyncio/staggered.pyi +10 -0
- mypy/typeshed/stdlib/asyncio/streams.pyi +148 -0
- mypy/typeshed/stdlib/asyncio/subprocess.pyi +229 -0
- mypy/typeshed/stdlib/asyncio/taskgroups.pyi +25 -0
- mypy/typeshed/stdlib/asyncio/tasks.pyi +477 -0
- mypy/typeshed/stdlib/asyncio/threads.pyi +9 -0
- mypy/typeshed/stdlib/asyncio/timeouts.pyi +19 -0
- mypy/typeshed/stdlib/asyncio/transports.pyi +47 -0
- mypy/typeshed/stdlib/asyncio/trsock.pyi +98 -0
- mypy/typeshed/stdlib/asyncio/unix_events.pyi +173 -0
- mypy/typeshed/stdlib/asyncio/windows_events.pyi +83 -0
- mypy/typeshed/stdlib/asyncio/windows_utils.pyi +49 -0
- mypy/typeshed/stdlib/asyncore.pyi +90 -0
- mypy/typeshed/stdlib/atexit.pyi +12 -0
- mypy/typeshed/stdlib/audioop.pyi +42 -0
- mypy/typeshed/stdlib/base64.pyi +59 -0
- mypy/typeshed/stdlib/bdb.pyi +102 -0
- mypy/typeshed/stdlib/binascii.pyi +36 -0
- mypy/typeshed/stdlib/binhex.pyi +45 -0
- mypy/typeshed/stdlib/bisect.pyi +4 -0
- mypy/typeshed/stdlib/builtins.pyi +1937 -0
- mypy/typeshed/stdlib/bz2.pyi +146 -0
- mypy/typeshed/stdlib/cProfile.pyi +35 -0
- mypy/typeshed/stdlib/calendar.pyi +206 -0
- mypy/typeshed/stdlib/cgi.pyi +118 -0
- mypy/typeshed/stdlib/cgitb.pyi +32 -0
- mypy/typeshed/stdlib/chunk.pyi +20 -0
- mypy/typeshed/stdlib/cmath.pyi +36 -0
- mypy/typeshed/stdlib/cmd.pyi +45 -0
- mypy/typeshed/stdlib/code.pyi +33 -0
- mypy/typeshed/stdlib/codecs.pyi +285 -0
- mypy/typeshed/stdlib/codeop.pyi +13 -0
- mypy/typeshed/stdlib/collections/__init__.pyi +477 -0
- mypy/typeshed/stdlib/collections/abc.pyi +2 -0
- mypy/typeshed/stdlib/colorsys.pyi +13 -0
- mypy/typeshed/stdlib/compileall.pyi +111 -0
- mypy/typeshed/stdlib/concurrent/__init__.pyi +0 -0
- mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +32 -0
- mypy/typeshed/stdlib/concurrent/futures/_base.pyi +120 -0
- mypy/typeshed/stdlib/concurrent/futures/process.pyi +233 -0
- mypy/typeshed/stdlib/concurrent/futures/thread.pyi +80 -0
- mypy/typeshed/stdlib/configparser.pyi +313 -0
- mypy/typeshed/stdlib/contextlib.pyi +207 -0
- mypy/typeshed/stdlib/contextvars.pyi +63 -0
- mypy/typeshed/stdlib/copy.pyi +16 -0
- mypy/typeshed/stdlib/copyreg.pyi +21 -0
- mypy/typeshed/stdlib/crypt.pyi +12 -0
- mypy/typeshed/stdlib/csv.pyi +147 -0
- mypy/typeshed/stdlib/ctypes/__init__.pyi +187 -0
- mypy/typeshed/stdlib/ctypes/_endian.pyi +19 -0
- mypy/typeshed/stdlib/ctypes/util.pyi +6 -0
- mypy/typeshed/stdlib/ctypes/wintypes.pyi +298 -0
- mypy/typeshed/stdlib/curses/__init__.pyi +21 -0
- mypy/typeshed/stdlib/curses/ascii.pyi +63 -0
- mypy/typeshed/stdlib/curses/has_key.pyi +4 -0
- mypy/typeshed/stdlib/curses/panel.pyi +25 -0
- mypy/typeshed/stdlib/curses/textpad.pyi +13 -0
- mypy/typeshed/stdlib/dataclasses.pyi +313 -0
- mypy/typeshed/stdlib/datetime.pyi +295 -0
- mypy/typeshed/stdlib/dbm/__init__.pyi +95 -0
- mypy/typeshed/stdlib/dbm/dumb.pyi +31 -0
- mypy/typeshed/stdlib/dbm/gnu.pyi +40 -0
- mypy/typeshed/stdlib/dbm/ndbm.pyi +36 -0
- mypy/typeshed/stdlib/decimal.pyi +2 -0
- mypy/typeshed/stdlib/difflib.pyi +140 -0
- mypy/typeshed/stdlib/dis.pyi +144 -0
- mypy/typeshed/stdlib/distutils/__init__.pyi +5 -0
- mypy/typeshed/stdlib/distutils/archive_util.pyi +20 -0
- mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/ccompiler.pyi +152 -0
- mypy/typeshed/stdlib/distutils/cmd.pyi +66 -0
- mypy/typeshed/stdlib/distutils/command/__init__.pyi +0 -0
- mypy/typeshed/stdlib/distutils/command/bdist.pyi +25 -0
- mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +21 -0
- mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +45 -0
- mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi +0 -0
- mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +52 -0
- mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +16 -0
- mypy/typeshed/stdlib/distutils/command/build.pyi +31 -0
- mypy/typeshed/stdlib/distutils/command/build_clib.pyi +27 -0
- mypy/typeshed/stdlib/distutils/command/build_ext.pyi +50 -0
- mypy/typeshed/stdlib/distutils/command/build_py.pyi +44 -0
- mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +24 -0
- mypy/typeshed/stdlib/distutils/command/check.pyi +39 -0
- mypy/typeshed/stdlib/distutils/command/clean.pyi +17 -0
- mypy/typeshed/stdlib/distutils/command/config.pyi +83 -0
- mypy/typeshed/stdlib/distutils/command/install.pyi +63 -0
- mypy/typeshed/stdlib/distutils/command/install_data.pyi +19 -0
- mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/install_headers.pyi +16 -0
- mypy/typeshed/stdlib/distutils/command/install_lib.pyi +25 -0
- mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/register.pyi +18 -0
- mypy/typeshed/stdlib/distutils/command/sdist.pyi +42 -0
- mypy/typeshed/stdlib/distutils/command/upload.pyi +17 -0
- mypy/typeshed/stdlib/distutils/config.pyi +17 -0
- mypy/typeshed/stdlib/distutils/core.pyi +57 -0
- mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +20 -0
- mypy/typeshed/stdlib/distutils/debug.pyi +1 -0
- mypy/typeshed/stdlib/distutils/dep_util.pyi +3 -0
- mypy/typeshed/stdlib/distutils/dir_util.pyi +13 -0
- mypy/typeshed/stdlib/distutils/dist.pyi +146 -0
- mypy/typeshed/stdlib/distutils/errors.pyi +19 -0
- mypy/typeshed/stdlib/distutils/extension.pyi +36 -0
- mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +34 -0
- mypy/typeshed/stdlib/distutils/file_util.pyi +14 -0
- mypy/typeshed/stdlib/distutils/filelist.pyi +50 -0
- mypy/typeshed/stdlib/distutils/log.pyi +25 -0
- mypy/typeshed/stdlib/distutils/msvccompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/spawn.pyi +2 -0
- mypy/typeshed/stdlib/distutils/sysconfig.pyi +22 -0
- mypy/typeshed/stdlib/distutils/text_file.pyi +21 -0
- mypy/typeshed/stdlib/distutils/unixccompiler.pyi +3 -0
- mypy/typeshed/stdlib/distutils/util.pyi +46 -0
- mypy/typeshed/stdlib/distutils/version.pyi +36 -0
- mypy/typeshed/stdlib/doctest.pyi +248 -0
- mypy/typeshed/stdlib/dummy_threading.pyi +2 -0
- mypy/typeshed/stdlib/email/__init__.pyi +29 -0
- mypy/typeshed/stdlib/email/_header_value_parser.pyi +392 -0
- mypy/typeshed/stdlib/email/_policybase.pyi +51 -0
- mypy/typeshed/stdlib/email/base64mime.pyi +13 -0
- mypy/typeshed/stdlib/email/charset.pyi +34 -0
- mypy/typeshed/stdlib/email/contentmanager.pyi +11 -0
- mypy/typeshed/stdlib/email/encoders.pyi +8 -0
- mypy/typeshed/stdlib/email/errors.pyi +39 -0
- mypy/typeshed/stdlib/email/feedparser.pyi +23 -0
- mypy/typeshed/stdlib/email/generator.pyi +40 -0
- mypy/typeshed/stdlib/email/header.pyi +31 -0
- mypy/typeshed/stdlib/email/headerregistry.pyi +178 -0
- mypy/typeshed/stdlib/email/iterators.pyi +12 -0
- mypy/typeshed/stdlib/email/message.pyi +161 -0
- mypy/typeshed/stdlib/email/mime/__init__.pyi +0 -0
- mypy/typeshed/stdlib/email/mime/application.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/audio.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/base.pyi +8 -0
- mypy/typeshed/stdlib/email/mime/image.pyi +17 -0
- mypy/typeshed/stdlib/email/mime/message.pyi +8 -0
- mypy/typeshed/stdlib/email/mime/multipart.pyi +18 -0
- mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +5 -0
- mypy/typeshed/stdlib/email/mime/text.pyi +9 -0
- mypy/typeshed/stdlib/email/parser.pyi +26 -0
- mypy/typeshed/stdlib/email/policy.pyi +38 -0
- mypy/typeshed/stdlib/email/quoprimime.pyi +28 -0
- mypy/typeshed/stdlib/email/utils.pyi +66 -0
- mypy/typeshed/stdlib/encodings/__init__.pyi +10 -0
- mypy/typeshed/stdlib/encodings/utf_8.pyi +21 -0
- mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +22 -0
- mypy/typeshed/stdlib/ensurepip/__init__.pyi +12 -0
- mypy/typeshed/stdlib/enum.pyi +317 -0
- mypy/typeshed/stdlib/errno.pyi +222 -0
- mypy/typeshed/stdlib/faulthandler.pyi +13 -0
- mypy/typeshed/stdlib/fcntl.pyi +127 -0
- mypy/typeshed/stdlib/filecmp.pyi +57 -0
- mypy/typeshed/stdlib/fileinput.pyi +213 -0
- mypy/typeshed/stdlib/fnmatch.pyi +9 -0
- mypy/typeshed/stdlib/formatter.pyi +88 -0
- mypy/typeshed/stdlib/fractions.pyi +150 -0
- mypy/typeshed/stdlib/ftplib.pyi +178 -0
- mypy/typeshed/stdlib/functools.pyi +200 -0
- mypy/typeshed/stdlib/gc.pyi +37 -0
- mypy/typeshed/stdlib/genericpath.pyi +52 -0
- mypy/typeshed/stdlib/getopt.pyi +11 -0
- mypy/typeshed/stdlib/getpass.pyi +8 -0
- mypy/typeshed/stdlib/gettext.pyi +169 -0
- mypy/typeshed/stdlib/glob.pyi +42 -0
- mypy/typeshed/stdlib/graphlib.pyi +28 -0
- mypy/typeshed/stdlib/grp.pyi +21 -0
- mypy/typeshed/stdlib/gzip.pyi +160 -0
- mypy/typeshed/stdlib/hashlib.pyi +165 -0
- mypy/typeshed/stdlib/heapq.pyi +17 -0
- mypy/typeshed/stdlib/hmac.pyi +38 -0
- mypy/typeshed/stdlib/html/__init__.pyi +6 -0
- mypy/typeshed/stdlib/html/entities.pyi +6 -0
- mypy/typeshed/stdlib/html/parser.pyi +34 -0
- mypy/typeshed/stdlib/http/__init__.pyi +105 -0
- mypy/typeshed/stdlib/http/client.pyi +259 -0
- mypy/typeshed/stdlib/http/cookiejar.pyi +159 -0
- mypy/typeshed/stdlib/http/cookies.pyi +60 -0
- mypy/typeshed/stdlib/http/server.pyi +83 -0
- mypy/typeshed/stdlib/imaplib.pyi +168 -0
- mypy/typeshed/stdlib/imghdr.pyi +17 -0
- mypy/typeshed/stdlib/imp.pyi +62 -0
- mypy/typeshed/stdlib/importlib/__init__.pyi +24 -0
- mypy/typeshed/stdlib/importlib/_abc.pyi +15 -0
- mypy/typeshed/stdlib/importlib/abc.pyi +172 -0
- mypy/typeshed/stdlib/importlib/machinery.pyi +179 -0
- mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +276 -0
- mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +40 -0
- mypy/typeshed/stdlib/importlib/readers.pyi +68 -0
- mypy/typeshed/stdlib/importlib/resources/__init__.pyi +46 -0
- mypy/typeshed/stdlib/importlib/resources/abc.pyi +12 -0
- mypy/typeshed/stdlib/importlib/resources/readers.pyi +14 -0
- mypy/typeshed/stdlib/importlib/resources/simple.pyi +49 -0
- mypy/typeshed/stdlib/importlib/simple.pyi +11 -0
- mypy/typeshed/stdlib/importlib/util.pyi +43 -0
- mypy/typeshed/stdlib/inspect.pyi +631 -0
- mypy/typeshed/stdlib/io.pyi +204 -0
- mypy/typeshed/stdlib/ipaddress.pyi +208 -0
- mypy/typeshed/stdlib/itertools.pyi +293 -0
- mypy/typeshed/stdlib/json/__init__.pyi +61 -0
- mypy/typeshed/stdlib/json/decoder.pyi +32 -0
- mypy/typeshed/stdlib/json/encoder.pyi +38 -0
- mypy/typeshed/stdlib/json/tool.pyi +1 -0
- mypy/typeshed/stdlib/keyword.pyi +21 -0
- mypy/typeshed/stdlib/lib2to3/__init__.pyi +0 -0
- mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +28 -0
- mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +42 -0
- mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi +0 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +10 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +16 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +14 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +13 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +15 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +16 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +21 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +6 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +11 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +10 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +19 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +17 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +15 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +12 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +20 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +8 -0
- mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/main.pyi +42 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +9 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +27 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +24 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +7 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +30 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +50 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +67 -0
- mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +96 -0
- mypy/typeshed/stdlib/lib2to3/pygram.pyi +114 -0
- mypy/typeshed/stdlib/lib2to3/pytree.pyi +117 -0
- mypy/typeshed/stdlib/lib2to3/refactor.pyi +82 -0
- mypy/typeshed/stdlib/linecache.pyi +23 -0
- mypy/typeshed/stdlib/locale.pyi +152 -0
- mypy/typeshed/stdlib/logging/__init__.pyi +655 -0
- mypy/typeshed/stdlib/logging/config.pyi +134 -0
- mypy/typeshed/stdlib/logging/handlers.pyi +275 -0
- mypy/typeshed/stdlib/lzma.pyi +197 -0
- mypy/typeshed/stdlib/mailbox.pyi +256 -0
- mypy/typeshed/stdlib/mailcap.pyi +11 -0
- mypy/typeshed/stdlib/marshal.pyi +33 -0
- mypy/typeshed/stdlib/math.pyi +125 -0
- mypy/typeshed/stdlib/mimetypes.pyi +46 -0
- mypy/typeshed/stdlib/mmap.pyi +113 -0
- mypy/typeshed/stdlib/modulefinder.pyi +66 -0
- mypy/typeshed/stdlib/msilib/__init__.pyi +176 -0
- mypy/typeshed/stdlib/msilib/schema.pyi +94 -0
- mypy/typeshed/stdlib/msilib/sequence.pyi +13 -0
- mypy/typeshed/stdlib/msilib/text.pyi +7 -0
- mypy/typeshed/stdlib/msvcrt.pyi +32 -0
- mypy/typeshed/stdlib/multiprocessing/__init__.pyi +90 -0
- mypy/typeshed/stdlib/multiprocessing/connection.pyi +75 -0
- mypy/typeshed/stdlib/multiprocessing/context.pyi +187 -0
- mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +77 -0
- mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +39 -0
- mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +31 -0
- mypy/typeshed/stdlib/multiprocessing/heap.pyi +36 -0
- mypy/typeshed/stdlib/multiprocessing/managers.pyi +212 -0
- mypy/typeshed/stdlib/multiprocessing/pool.pyi +103 -0
- mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +23 -0
- mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +16 -0
- mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +20 -0
- mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +30 -0
- mypy/typeshed/stdlib/multiprocessing/process.pyi +39 -0
- mypy/typeshed/stdlib/multiprocessing/queues.pyi +41 -0
- mypy/typeshed/stdlib/multiprocessing/reduction.pyi +89 -0
- mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +20 -0
- mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +18 -0
- mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +40 -0
- mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +101 -0
- mypy/typeshed/stdlib/multiprocessing/spawn.pyi +32 -0
- mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +54 -0
- mypy/typeshed/stdlib/multiprocessing/util.pyi +79 -0
- mypy/typeshed/stdlib/netrc.pyi +23 -0
- mypy/typeshed/stdlib/nis.pyi +9 -0
- mypy/typeshed/stdlib/nntplib.pyi +125 -0
- mypy/typeshed/stdlib/nt.pyi +111 -0
- mypy/typeshed/stdlib/ntpath.pyi +119 -0
- mypy/typeshed/stdlib/nturl2path.pyi +2 -0
- mypy/typeshed/stdlib/numbers.pyi +154 -0
- mypy/typeshed/stdlib/opcode.pyi +59 -0
- mypy/typeshed/stdlib/operator.pyi +110 -0
- mypy/typeshed/stdlib/optparse.pyi +252 -0
- mypy/typeshed/stdlib/os/__init__.pyi +1139 -0
- mypy/typeshed/stdlib/os/path.pyi +8 -0
- mypy/typeshed/stdlib/ossaudiodev.pyi +131 -0
- mypy/typeshed/stdlib/parser.pyi +24 -0
- mypy/typeshed/stdlib/pathlib.pyi +232 -0
- mypy/typeshed/stdlib/pdb.pyi +181 -0
- mypy/typeshed/stdlib/pickle.pyi +270 -0
- mypy/typeshed/stdlib/pickletools.pyi +167 -0
- mypy/typeshed/stdlib/pipes.pyi +16 -0
- mypy/typeshed/stdlib/pkgutil.pyi +53 -0
- mypy/typeshed/stdlib/platform.pyi +42 -0
- mypy/typeshed/stdlib/plistlib.pyi +113 -0
- mypy/typeshed/stdlib/poplib.pyi +71 -0
- mypy/typeshed/stdlib/posix.pyi +359 -0
- mypy/typeshed/stdlib/posixpath.pyi +161 -0
- mypy/typeshed/stdlib/pprint.pyi +112 -0
- mypy/typeshed/stdlib/profile.pyi +31 -0
- mypy/typeshed/stdlib/pstats.pyi +78 -0
- mypy/typeshed/stdlib/pty.pyi +19 -0
- mypy/typeshed/stdlib/pwd.pyi +27 -0
- mypy/typeshed/stdlib/py_compile.pyi +34 -0
- mypy/typeshed/stdlib/pyclbr.pyi +74 -0
- mypy/typeshed/stdlib/pydoc.pyi +261 -0
- mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
- mypy/typeshed/stdlib/pydoc_data/topics.pyi +1 -0
- mypy/typeshed/stdlib/pyexpat/__init__.pyi +80 -0
- mypy/typeshed/stdlib/pyexpat/errors.pyi +49 -0
- mypy/typeshed/stdlib/pyexpat/model.pyi +11 -0
- mypy/typeshed/stdlib/queue.pyi +58 -0
- mypy/typeshed/stdlib/quopri.pyi +11 -0
- mypy/typeshed/stdlib/random.pyi +138 -0
- mypy/typeshed/stdlib/re.pyi +290 -0
- mypy/typeshed/stdlib/readline.pyi +36 -0
- mypy/typeshed/stdlib/reprlib.pyi +65 -0
- mypy/typeshed/stdlib/resource.pyi +92 -0
- mypy/typeshed/stdlib/rlcompleter.pyi +9 -0
- mypy/typeshed/stdlib/runpy.pyi +24 -0
- mypy/typeshed/stdlib/sched.pyi +42 -0
- mypy/typeshed/stdlib/secrets.pyi +15 -0
- mypy/typeshed/stdlib/select.pyi +151 -0
- mypy/typeshed/stdlib/selectors.pyi +67 -0
- mypy/typeshed/stdlib/shelve.pyi +46 -0
- mypy/typeshed/stdlib/shlex.pyi +43 -0
- mypy/typeshed/stdlib/shutil.pyi +189 -0
- mypy/typeshed/stdlib/signal.pyi +189 -0
- mypy/typeshed/stdlib/site.pyi +27 -0
- mypy/typeshed/stdlib/smtpd.pyi +91 -0
- mypy/typeshed/stdlib/smtplib.pyi +204 -0
- mypy/typeshed/stdlib/sndhdr.pyi +14 -0
- mypy/typeshed/stdlib/socket.pyi +825 -0
- mypy/typeshed/stdlib/socketserver.pyi +168 -0
- mypy/typeshed/stdlib/spwd.pyi +40 -0
- mypy/typeshed/stdlib/sqlite3/__init__.pyi +1 -0
- mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +469 -0
- mypy/typeshed/stdlib/sre_compile.pyi +11 -0
- mypy/typeshed/stdlib/sre_constants.pyi +130 -0
- mypy/typeshed/stdlib/sre_parse.pyi +104 -0
- mypy/typeshed/stdlib/ssl.pyi +529 -0
- mypy/typeshed/stdlib/stat.pyi +1 -0
- mypy/typeshed/stdlib/statistics.pyi +132 -0
- mypy/typeshed/stdlib/string.pyi +83 -0
- mypy/typeshed/stdlib/stringprep.pyi +27 -0
- mypy/typeshed/stdlib/struct.pyi +26 -0
- mypy/typeshed/stdlib/subprocess.pyi +2614 -0
- mypy/typeshed/stdlib/sunau.pyi +86 -0
- mypy/typeshed/stdlib/symbol.pyi +93 -0
- mypy/typeshed/stdlib/symtable.pyi +58 -0
- mypy/typeshed/stdlib/sys/__init__.pyi +373 -0
- mypy/typeshed/stdlib/sys/_monitoring.pyi +52 -0
- mypy/typeshed/stdlib/sysconfig.pyi +43 -0
- mypy/typeshed/stdlib/syslog.pyi +46 -0
- mypy/typeshed/stdlib/tabnanny.pyi +16 -0
- mypy/typeshed/stdlib/tarfile.pyi +438 -0
- mypy/typeshed/stdlib/telnetlib.pyi +122 -0
- mypy/typeshed/stdlib/tempfile.pyi +477 -0
- mypy/typeshed/stdlib/termios.pyi +267 -0
- mypy/typeshed/stdlib/textwrap.pyi +103 -0
- mypy/typeshed/stdlib/this.pyi +2 -0
- mypy/typeshed/stdlib/threading.pyi +187 -0
- mypy/typeshed/stdlib/time.pyi +107 -0
- mypy/typeshed/stdlib/timeit.pyi +32 -0
- mypy/typeshed/stdlib/tkinter/__init__.pyi +3641 -0
- mypy/typeshed/stdlib/tkinter/colorchooser.pyi +20 -0
- mypy/typeshed/stdlib/tkinter/commondialog.pyi +14 -0
- mypy/typeshed/stdlib/tkinter/constants.pyi +80 -0
- mypy/typeshed/stdlib/tkinter/dialog.pyi +16 -0
- mypy/typeshed/stdlib/tkinter/dnd.pyi +20 -0
- mypy/typeshed/stdlib/tkinter/filedialog.pyi +151 -0
- mypy/typeshed/stdlib/tkinter/font.pyi +116 -0
- mypy/typeshed/stdlib/tkinter/messagebox.pyi +44 -0
- mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +10 -0
- mypy/typeshed/stdlib/tkinter/simpledialog.pyi +54 -0
- mypy/typeshed/stdlib/tkinter/tix.pyi +299 -0
- mypy/typeshed/stdlib/tkinter/ttk.pyi +1191 -0
- mypy/typeshed/stdlib/token.pyi +159 -0
- mypy/typeshed/stdlib/tokenize.pyi +177 -0
- mypy/typeshed/stdlib/tomllib.pyi +10 -0
- mypy/typeshed/stdlib/trace.pyi +79 -0
- mypy/typeshed/stdlib/traceback.pyi +260 -0
- mypy/typeshed/stdlib/tracemalloc.pyi +124 -0
- mypy/typeshed/stdlib/tty.pyi +30 -0
- mypy/typeshed/stdlib/turtle.pyi +713 -0
- mypy/typeshed/stdlib/types.pyi +605 -0
- mypy/typeshed/stdlib/typing.pyi +968 -0
- mypy/typeshed/stdlib/typing_extensions.pyi +503 -0
- mypy/typeshed/stdlib/unicodedata.pyi +71 -0
- mypy/typeshed/stdlib/unittest/__init__.pyi +67 -0
- mypy/typeshed/stdlib/unittest/_log.pyi +27 -0
- mypy/typeshed/stdlib/unittest/async_case.pyi +21 -0
- mypy/typeshed/stdlib/unittest/case.pyi +342 -0
- mypy/typeshed/stdlib/unittest/loader.pyi +51 -0
- mypy/typeshed/stdlib/unittest/main.pyi +69 -0
- mypy/typeshed/stdlib/unittest/mock.pyi +430 -0
- mypy/typeshed/stdlib/unittest/result.pyi +46 -0
- mypy/typeshed/stdlib/unittest/runner.pyi +72 -0
- mypy/typeshed/stdlib/unittest/signals.pyi +15 -0
- mypy/typeshed/stdlib/unittest/suite.pyi +22 -0
- mypy/typeshed/stdlib/unittest/util.pyi +23 -0
- mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
- mypy/typeshed/stdlib/urllib/error.pyi +23 -0
- mypy/typeshed/stdlib/urllib/parse.pyi +210 -0
- mypy/typeshed/stdlib/urllib/request.pyi +399 -0
- mypy/typeshed/stdlib/urllib/response.pyi +43 -0
- mypy/typeshed/stdlib/urllib/robotparser.pyi +20 -0
- mypy/typeshed/stdlib/uu.pyi +13 -0
- mypy/typeshed/stdlib/uuid.pyi +100 -0
- mypy/typeshed/stdlib/venv/__init__.pyi +79 -0
- mypy/typeshed/stdlib/warnings.pyi +112 -0
- mypy/typeshed/stdlib/wave.pyi +85 -0
- mypy/typeshed/stdlib/weakref.pyi +150 -0
- mypy/typeshed/stdlib/webbrowser.pyi +74 -0
- mypy/typeshed/stdlib/winreg.pyi +103 -0
- mypy/typeshed/stdlib/winsound.pyi +28 -0
- mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
- mypy/typeshed/stdlib/wsgiref/handlers.pyi +91 -0
- mypy/typeshed/stdlib/wsgiref/headers.pyi +26 -0
- mypy/typeshed/stdlib/wsgiref/simple_server.pyi +37 -0
- mypy/typeshed/stdlib/wsgiref/types.pyi +32 -0
- mypy/typeshed/stdlib/wsgiref/util.pyi +24 -0
- mypy/typeshed/stdlib/wsgiref/validate.pyi +50 -0
- mypy/typeshed/stdlib/xdrlib.pyi +57 -0
- mypy/typeshed/stdlib/xml/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +19 -0
- mypy/typeshed/stdlib/xml/dom/__init__.pyi +69 -0
- mypy/typeshed/stdlib/xml/dom/domreg.pyi +8 -0
- mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +100 -0
- mypy/typeshed/stdlib/xml/dom/minicompat.pyi +22 -0
- mypy/typeshed/stdlib/xml/dom/minidom.pyi +404 -0
- mypy/typeshed/stdlib/xml/dom/pulldom.pyi +94 -0
- mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +108 -0
- mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +28 -0
- mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +34 -0
- mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +321 -0
- mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
- mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +1 -0
- mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +1 -0
- mypy/typeshed/stdlib/xml/sax/__init__.pyi +25 -0
- mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +19 -0
- mypy/typeshed/stdlib/xml/sax/handler.pyi +55 -0
- mypy/typeshed/stdlib/xml/sax/saxutils.pyi +60 -0
- mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +87 -0
- mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
- mypy/typeshed/stdlib/xmlrpc/client.pyi +296 -0
- mypy/typeshed/stdlib/xmlrpc/server.pyi +143 -0
- mypy/typeshed/stdlib/xxlimited.pyi +22 -0
- mypy/typeshed/stdlib/zipapp.pyi +20 -0
- mypy/typeshed/stdlib/zipfile/__init__.pyi +306 -0
- mypy/typeshed/stdlib/zipfile/_path.pyi +95 -0
- mypy/typeshed/stdlib/zipimport.pyi +32 -0
- mypy/typeshed/stdlib/zlib.pyi +56 -0
- mypy/typeshed/stdlib/zoneinfo/__init__.pyi +38 -0
- mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +218 -0
- mypy/typestate.py +323 -0
- mypy/typetraverser.py +142 -0
- mypy/typevars.py +93 -0
- mypy/typevartuples.py +32 -0
- mypy/util.py +869 -0
- mypy/version.py +1 -0
- mypy/visitor.py +621 -0
- mypy/xml/mypy-html.css +104 -0
- mypy/xml/mypy-html.xslt +81 -0
- mypy/xml/mypy-txt.xslt +100 -0
- mypy/xml/mypy.xsd +50 -0
- mypy_dev-1.9.0.dev0.dist-info/LICENSE +229 -0
- mypy_dev-1.9.0.dev0.dist-info/METADATA +39 -0
- mypy_dev-1.9.0.dev0.dist-info/RECORD +1018 -0
- mypy_dev-1.9.0.dev0.dist-info/WHEEL +5 -0
- mypy_dev-1.9.0.dev0.dist-info/entry_points.txt +6 -0
- mypy_dev-1.9.0.dev0.dist-info/top_level.txt +2 -0
- mypyc/README.md +133 -0
- mypyc/__init__.py +0 -0
- mypyc/__main__.py +57 -0
- mypyc/analysis/__init__.py +0 -0
- mypyc/analysis/attrdefined.py +436 -0
- mypyc/analysis/blockfreq.py +32 -0
- mypyc/analysis/dataflow.py +624 -0
- mypyc/analysis/ircheck.py +429 -0
- mypyc/analysis/selfleaks.py +207 -0
- mypyc/build.py +616 -0
- mypyc/codegen/__init__.py +0 -0
- mypyc/codegen/cstring.py +54 -0
- mypyc/codegen/emit.py +1193 -0
- mypyc/codegen/emitclass.py +1060 -0
- mypyc/codegen/emitfunc.py +846 -0
- mypyc/codegen/emitmodule.py +1131 -0
- mypyc/codegen/emitwrapper.py +979 -0
- mypyc/codegen/literals.py +302 -0
- mypyc/common.py +136 -0
- mypyc/crash.py +31 -0
- mypyc/doc/Makefile +20 -0
- mypyc/doc/bool_operations.rst +27 -0
- mypyc/doc/compilation_units.rst +20 -0
- mypyc/doc/conf.py +59 -0
- mypyc/doc/cpython-timings.md +25 -0
- mypyc/doc/dev-intro.md +548 -0
- mypyc/doc/dict_operations.rst +59 -0
- mypyc/doc/differences_from_python.rst +332 -0
- mypyc/doc/float_operations.rst +50 -0
- mypyc/doc/future.md +42 -0
- mypyc/doc/getting_started.rst +240 -0
- mypyc/doc/index.rst +61 -0
- mypyc/doc/int_operations.rst +162 -0
- mypyc/doc/introduction.rst +150 -0
- mypyc/doc/list_operations.rst +65 -0
- mypyc/doc/make.bat +35 -0
- mypyc/doc/native_classes.rst +206 -0
- mypyc/doc/native_operations.rst +55 -0
- mypyc/doc/performance_tips_and_tricks.rst +244 -0
- mypyc/doc/set_operations.rst +47 -0
- mypyc/doc/str_operations.rst +35 -0
- mypyc/doc/tuple_operations.rst +33 -0
- mypyc/doc/using_type_annotations.rst +398 -0
- mypyc/errors.py +29 -0
- mypyc/external/googletest/LICENSE +28 -0
- mypyc/external/googletest/README.md +280 -0
- mypyc/external/googletest/include/gtest/gtest-death-test.h +294 -0
- mypyc/external/googletest/include/gtest/gtest-message.h +250 -0
- mypyc/external/googletest/include/gtest/gtest-param-test.h +1444 -0
- mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +510 -0
- mypyc/external/googletest/include/gtest/gtest-printers.h +993 -0
- mypyc/external/googletest/include/gtest/gtest-spi.h +232 -0
- mypyc/external/googletest/include/gtest/gtest-test-part.h +179 -0
- mypyc/external/googletest/include/gtest/gtest-typed-test.h +263 -0
- mypyc/external/googletest/include/gtest/gtest.h +2236 -0
- mypyc/external/googletest/include/gtest/gtest_pred_impl.h +358 -0
- mypyc/external/googletest/include/gtest/gtest_prod.h +58 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +69 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +42 -0
- mypyc/external/googletest/include/gtest/internal/custom/gtest.h +41 -0
- mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +319 -0
- mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +206 -0
- mypyc/external/googletest/include/gtest/internal/gtest-internal.h +1238 -0
- mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +243 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +5146 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +286 -0
- mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +731 -0
- mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +93 -0
- mypyc/external/googletest/include/gtest/internal/gtest-port.h +2560 -0
- mypyc/external/googletest/include/gtest/internal/gtest-string.h +167 -0
- mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +1020 -0
- mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +347 -0
- mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +3331 -0
- mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +297 -0
- mypyc/external/googletest/make/Makefile +61 -0
- mypyc/external/googletest/src/gtest-all.cc +48 -0
- mypyc/external/googletest/src/gtest-death-test.cc +1342 -0
- mypyc/external/googletest/src/gtest-filepath.cc +387 -0
- mypyc/external/googletest/src/gtest-internal-inl.h +1183 -0
- mypyc/external/googletest/src/gtest-port.cc +1259 -0
- mypyc/external/googletest/src/gtest-printers.cc +373 -0
- mypyc/external/googletest/src/gtest-test-part.cc +110 -0
- mypyc/external/googletest/src/gtest-typed-test.cc +118 -0
- mypyc/external/googletest/src/gtest.cc +5388 -0
- mypyc/external/googletest/src/gtest_main.cc +38 -0
- mypyc/ir/__init__.py +0 -0
- mypyc/ir/class_ir.py +499 -0
- mypyc/ir/func_ir.py +370 -0
- mypyc/ir/module_ir.py +88 -0
- mypyc/ir/ops.py +1642 -0
- mypyc/ir/pprint.py +496 -0
- mypyc/ir/rtypes.py +1038 -0
- mypyc/irbuild/__init__.py +0 -0
- mypyc/irbuild/ast_helpers.py +120 -0
- mypyc/irbuild/builder.py +1398 -0
- mypyc/irbuild/callable_class.py +173 -0
- mypyc/irbuild/classdef.py +850 -0
- mypyc/irbuild/constant_fold.py +95 -0
- mypyc/irbuild/context.py +186 -0
- mypyc/irbuild/env_class.py +223 -0
- mypyc/irbuild/expression.py +1067 -0
- mypyc/irbuild/for_helpers.py +1046 -0
- mypyc/irbuild/format_str_tokenizer.py +250 -0
- mypyc/irbuild/function.py +1089 -0
- mypyc/irbuild/generator.py +346 -0
- mypyc/irbuild/ll_builder.py +2407 -0
- mypyc/irbuild/main.py +153 -0
- mypyc/irbuild/mapper.py +221 -0
- mypyc/irbuild/match.py +355 -0
- mypyc/irbuild/nonlocalcontrol.py +197 -0
- mypyc/irbuild/prebuildvisitor.py +203 -0
- mypyc/irbuild/prepare.py +609 -0
- mypyc/irbuild/specialize.py +822 -0
- mypyc/irbuild/statement.py +1017 -0
- mypyc/irbuild/targets.py +57 -0
- mypyc/irbuild/util.py +189 -0
- mypyc/irbuild/visitor.py +401 -0
- mypyc/irbuild/vtable.py +82 -0
- mypyc/lib-rt/CPy.h +643 -0
- mypyc/lib-rt/bytes_ops.c +143 -0
- mypyc/lib-rt/dict_ops.c +446 -0
- mypyc/lib-rt/exc_ops.c +259 -0
- mypyc/lib-rt/float_ops.c +192 -0
- mypyc/lib-rt/generic_ops.c +64 -0
- mypyc/lib-rt/getargs.c +450 -0
- mypyc/lib-rt/getargsfast.c +569 -0
- mypyc/lib-rt/init.c +13 -0
- mypyc/lib-rt/int_ops.c +803 -0
- mypyc/lib-rt/list_ops.c +335 -0
- mypyc/lib-rt/misc_ops.c +942 -0
- mypyc/lib-rt/module_shim.tmpl +18 -0
- mypyc/lib-rt/mypyc_util.h +118 -0
- mypyc/lib-rt/pythoncapi_compat.h +497 -0
- mypyc/lib-rt/pythonsupport.h +548 -0
- mypyc/lib-rt/set_ops.c +17 -0
- mypyc/lib-rt/setup.py +70 -0
- mypyc/lib-rt/str_ops.c +241 -0
- mypyc/lib-rt/test_capi.cc +585 -0
- mypyc/lib-rt/tuple_ops.c +61 -0
- mypyc/namegen.py +115 -0
- mypyc/options.py +32 -0
- mypyc/primitives/__init__.py +0 -0
- mypyc/primitives/bytes_ops.py +101 -0
- mypyc/primitives/dict_ops.py +325 -0
- mypyc/primitives/exc_ops.py +101 -0
- mypyc/primitives/float_ops.py +168 -0
- mypyc/primitives/generic_ops.py +384 -0
- mypyc/primitives/int_ops.py +304 -0
- mypyc/primitives/list_ops.py +300 -0
- mypyc/primitives/misc_ops.py +241 -0
- mypyc/primitives/registry.py +323 -0
- mypyc/primitives/set_ops.py +121 -0
- mypyc/primitives/str_ops.py +229 -0
- mypyc/primitives/tuple_ops.py +83 -0
- mypyc/rt_subtype.py +77 -0
- mypyc/sametype.py +83 -0
- mypyc/subtype.py +88 -0
- mypyc/test/__init__.py +0 -0
- mypyc/test/config.py +13 -0
- mypyc/test/test_alwaysdefined.py +46 -0
- mypyc/test/test_analysis.py +77 -0
- mypyc/test/test_cheader.py +45 -0
- mypyc/test/test_commandline.py +82 -0
- mypyc/test/test_emit.py +69 -0
- mypyc/test/test_emitclass.py +35 -0
- mypyc/test/test_emitfunc.py +926 -0
- mypyc/test/test_emitwrapper.py +60 -0
- mypyc/test/test_exceptions.py +56 -0
- mypyc/test/test_external.py +49 -0
- mypyc/test/test_irbuild.py +87 -0
- mypyc/test/test_ircheck.py +199 -0
- mypyc/test/test_literals.py +90 -0
- mypyc/test/test_namegen.py +48 -0
- mypyc/test/test_pprint.py +42 -0
- mypyc/test/test_rarray.py +48 -0
- mypyc/test/test_refcount.py +59 -0
- mypyc/test/test_run.py +426 -0
- mypyc/test/test_serialization.py +108 -0
- mypyc/test/test_struct.py +112 -0
- mypyc/test/test_tuplename.py +33 -0
- mypyc/test/test_typeops.py +97 -0
- mypyc/test/testutil.py +283 -0
- mypyc/test-data/alwaysdefined.test +732 -0
- mypyc/test-data/analysis.test +603 -0
- mypyc/test-data/commandline.test +245 -0
- mypyc/test-data/driver/driver.py +48 -0
- mypyc/test-data/exceptions-freq.test +125 -0
- mypyc/test-data/exceptions.test +713 -0
- mypyc/test-data/fixtures/ir.py +373 -0
- mypyc/test-data/fixtures/testutil.py +103 -0
- mypyc/test-data/fixtures/typing-full.pyi +169 -0
- mypyc/test-data/irbuild-any.test +238 -0
- mypyc/test-data/irbuild-basic.test +3690 -0
- mypyc/test-data/irbuild-bool.test +463 -0
- mypyc/test-data/irbuild-bytes.test +184 -0
- mypyc/test-data/irbuild-classes.test +1303 -0
- mypyc/test-data/irbuild-constant-fold.test +480 -0
- mypyc/test-data/irbuild-dict.test +585 -0
- mypyc/test-data/irbuild-dunders.test +223 -0
- mypyc/test-data/irbuild-float.test +497 -0
- mypyc/test-data/irbuild-generics.test +151 -0
- mypyc/test-data/irbuild-glue-methods.test +437 -0
- mypyc/test-data/irbuild-i16.test +526 -0
- mypyc/test-data/irbuild-i32.test +598 -0
- mypyc/test-data/irbuild-i64.test +2164 -0
- mypyc/test-data/irbuild-int.test +235 -0
- mypyc/test-data/irbuild-isinstance.test +109 -0
- mypyc/test-data/irbuild-lists.test +547 -0
- mypyc/test-data/irbuild-match.test +1708 -0
- mypyc/test-data/irbuild-math.test +64 -0
- mypyc/test-data/irbuild-nested.test +807 -0
- mypyc/test-data/irbuild-optional.test +536 -0
- mypyc/test-data/irbuild-set.test +838 -0
- mypyc/test-data/irbuild-singledispatch.test +257 -0
- mypyc/test-data/irbuild-statements.test +1149 -0
- mypyc/test-data/irbuild-str.test +314 -0
- mypyc/test-data/irbuild-strip-asserts.test +12 -0
- mypyc/test-data/irbuild-try.test +523 -0
- mypyc/test-data/irbuild-tuple.test +462 -0
- mypyc/test-data/irbuild-u8.test +543 -0
- mypyc/test-data/irbuild-unreachable.test +241 -0
- mypyc/test-data/irbuild-vectorcall.test +153 -0
- mypyc/test-data/refcount.test +1588 -0
- mypyc/test-data/run-async.test +145 -0
- mypyc/test-data/run-attrs.test +318 -0
- mypyc/test-data/run-bench.test +196 -0
- mypyc/test-data/run-bools.test +229 -0
- mypyc/test-data/run-bytes.test +302 -0
- mypyc/test-data/run-classes.test +2505 -0
- mypyc/test-data/run-dicts.test +334 -0
- mypyc/test-data/run-dunders.test +945 -0
- mypyc/test-data/run-exceptions.test +448 -0
- mypyc/test-data/run-floats.test +516 -0
- mypyc/test-data/run-functions.test +1310 -0
- mypyc/test-data/run-generators.test +681 -0
- mypyc/test-data/run-i16.test +338 -0
- mypyc/test-data/run-i32.test +336 -0
- mypyc/test-data/run-i64.test +1519 -0
- mypyc/test-data/run-imports.test +265 -0
- mypyc/test-data/run-integers.test +540 -0
- mypyc/test-data/run-lists.test +411 -0
- mypyc/test-data/run-loops.test +485 -0
- mypyc/test-data/run-match.test +283 -0
- mypyc/test-data/run-math.test +106 -0
- mypyc/test-data/run-misc.test +1168 -0
- mypyc/test-data/run-multimodule.test +887 -0
- mypyc/test-data/run-mypy-sim.test +138 -0
- mypyc/test-data/run-primitives.test +375 -0
- mypyc/test-data/run-python37.test +159 -0
- mypyc/test-data/run-python38.test +88 -0
- mypyc/test-data/run-sets.test +150 -0
- mypyc/test-data/run-singledispatch.test +698 -0
- mypyc/test-data/run-strings.test +641 -0
- mypyc/test-data/run-traits.test +411 -0
- mypyc/test-data/run-tuples.test +258 -0
- mypyc/test-data/run-u8.test +303 -0
- mypyc/transform/__init__.py +0 -0
- mypyc/transform/exceptions.py +182 -0
- mypyc/transform/refcount.py +294 -0
- mypyc/transform/uninit.py +190 -0
mypy/tvar_scope.py
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from mypy.nodes import (
|
|
4
|
+
ParamSpecExpr,
|
|
5
|
+
SymbolTableNode,
|
|
6
|
+
TypeVarExpr,
|
|
7
|
+
TypeVarLikeExpr,
|
|
8
|
+
TypeVarTupleExpr,
|
|
9
|
+
)
|
|
10
|
+
from mypy.types import (
|
|
11
|
+
ParamSpecFlavor,
|
|
12
|
+
ParamSpecType,
|
|
13
|
+
TypeVarId,
|
|
14
|
+
TypeVarLikeType,
|
|
15
|
+
TypeVarTupleType,
|
|
16
|
+
TypeVarType,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TypeVarLikeScope:
|
|
21
|
+
"""Scope that holds bindings for type variables and parameter specifications.
|
|
22
|
+
|
|
23
|
+
Node fullname -> TypeVarLikeType.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self,
|
|
28
|
+
parent: TypeVarLikeScope | None = None,
|
|
29
|
+
is_class_scope: bool = False,
|
|
30
|
+
prohibited: TypeVarLikeScope | None = None,
|
|
31
|
+
namespace: str = "",
|
|
32
|
+
) -> None:
|
|
33
|
+
"""Initializer for TypeVarLikeScope
|
|
34
|
+
|
|
35
|
+
Parameters:
|
|
36
|
+
parent: the outer scope for this scope
|
|
37
|
+
is_class_scope: True if this represents a generic class
|
|
38
|
+
prohibited: Type variables that aren't strictly in scope exactly,
|
|
39
|
+
but can't be bound because they're part of an outer class's scope.
|
|
40
|
+
"""
|
|
41
|
+
self.scope: dict[str, TypeVarLikeType] = {}
|
|
42
|
+
self.parent = parent
|
|
43
|
+
self.func_id = 0
|
|
44
|
+
self.class_id = 0
|
|
45
|
+
self.is_class_scope = is_class_scope
|
|
46
|
+
self.prohibited = prohibited
|
|
47
|
+
self.namespace = namespace
|
|
48
|
+
if parent is not None:
|
|
49
|
+
self.func_id = parent.func_id
|
|
50
|
+
self.class_id = parent.class_id
|
|
51
|
+
|
|
52
|
+
def get_function_scope(self) -> TypeVarLikeScope | None:
|
|
53
|
+
"""Get the nearest parent that's a function scope, not a class scope"""
|
|
54
|
+
it: TypeVarLikeScope | None = self
|
|
55
|
+
while it is not None and it.is_class_scope:
|
|
56
|
+
it = it.parent
|
|
57
|
+
return it
|
|
58
|
+
|
|
59
|
+
def allow_binding(self, fullname: str) -> bool:
|
|
60
|
+
if fullname in self.scope:
|
|
61
|
+
return False
|
|
62
|
+
elif self.parent and not self.parent.allow_binding(fullname):
|
|
63
|
+
return False
|
|
64
|
+
elif self.prohibited and not self.prohibited.allow_binding(fullname):
|
|
65
|
+
return False
|
|
66
|
+
return True
|
|
67
|
+
|
|
68
|
+
def method_frame(self) -> TypeVarLikeScope:
|
|
69
|
+
"""A new scope frame for binding a method"""
|
|
70
|
+
return TypeVarLikeScope(self, False, None)
|
|
71
|
+
|
|
72
|
+
def class_frame(self, namespace: str) -> TypeVarLikeScope:
|
|
73
|
+
"""A new scope frame for binding a class. Prohibits *this* class's tvars"""
|
|
74
|
+
return TypeVarLikeScope(self.get_function_scope(), True, self, namespace=namespace)
|
|
75
|
+
|
|
76
|
+
def new_unique_func_id(self) -> int:
|
|
77
|
+
"""Used by plugin-like code that needs to make synthetic generic functions."""
|
|
78
|
+
self.func_id -= 1
|
|
79
|
+
return self.func_id
|
|
80
|
+
|
|
81
|
+
def bind_new(self, name: str, tvar_expr: TypeVarLikeExpr) -> TypeVarLikeType:
|
|
82
|
+
if self.is_class_scope:
|
|
83
|
+
self.class_id += 1
|
|
84
|
+
i = self.class_id
|
|
85
|
+
namespace = self.namespace
|
|
86
|
+
else:
|
|
87
|
+
self.func_id -= 1
|
|
88
|
+
i = self.func_id
|
|
89
|
+
# TODO: Consider also using namespaces for functions
|
|
90
|
+
namespace = ""
|
|
91
|
+
if isinstance(tvar_expr, TypeVarExpr):
|
|
92
|
+
tvar_def: TypeVarLikeType = TypeVarType(
|
|
93
|
+
name=name,
|
|
94
|
+
fullname=tvar_expr.fullname,
|
|
95
|
+
id=TypeVarId(i, namespace=namespace),
|
|
96
|
+
values=tvar_expr.values,
|
|
97
|
+
upper_bound=tvar_expr.upper_bound,
|
|
98
|
+
default=tvar_expr.default,
|
|
99
|
+
variance=tvar_expr.variance,
|
|
100
|
+
line=tvar_expr.line,
|
|
101
|
+
column=tvar_expr.column,
|
|
102
|
+
)
|
|
103
|
+
elif isinstance(tvar_expr, ParamSpecExpr):
|
|
104
|
+
tvar_def = ParamSpecType(
|
|
105
|
+
name,
|
|
106
|
+
tvar_expr.fullname,
|
|
107
|
+
i,
|
|
108
|
+
flavor=ParamSpecFlavor.BARE,
|
|
109
|
+
upper_bound=tvar_expr.upper_bound,
|
|
110
|
+
default=tvar_expr.default,
|
|
111
|
+
line=tvar_expr.line,
|
|
112
|
+
column=tvar_expr.column,
|
|
113
|
+
)
|
|
114
|
+
elif isinstance(tvar_expr, TypeVarTupleExpr):
|
|
115
|
+
tvar_def = TypeVarTupleType(
|
|
116
|
+
name,
|
|
117
|
+
tvar_expr.fullname,
|
|
118
|
+
i,
|
|
119
|
+
upper_bound=tvar_expr.upper_bound,
|
|
120
|
+
tuple_fallback=tvar_expr.tuple_fallback,
|
|
121
|
+
default=tvar_expr.default,
|
|
122
|
+
line=tvar_expr.line,
|
|
123
|
+
column=tvar_expr.column,
|
|
124
|
+
)
|
|
125
|
+
else:
|
|
126
|
+
assert False
|
|
127
|
+
self.scope[tvar_expr.fullname] = tvar_def
|
|
128
|
+
return tvar_def
|
|
129
|
+
|
|
130
|
+
def bind_existing(self, tvar_def: TypeVarLikeType) -> None:
|
|
131
|
+
self.scope[tvar_def.fullname] = tvar_def
|
|
132
|
+
|
|
133
|
+
def get_binding(self, item: str | SymbolTableNode) -> TypeVarLikeType | None:
|
|
134
|
+
fullname = item.fullname if isinstance(item, SymbolTableNode) else item
|
|
135
|
+
assert fullname
|
|
136
|
+
if fullname in self.scope:
|
|
137
|
+
return self.scope[fullname]
|
|
138
|
+
elif self.parent is not None:
|
|
139
|
+
return self.parent.get_binding(fullname)
|
|
140
|
+
else:
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
def __str__(self) -> str:
|
|
144
|
+
me = ", ".join(f"{k}: {v.name}`{v.id}" for k, v in self.scope.items())
|
|
145
|
+
if self.parent is None:
|
|
146
|
+
return me
|
|
147
|
+
return f"{self.parent} <- {me}"
|
mypy/type_visitor.py
ADDED
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
"""Type visitor classes.
|
|
2
|
+
|
|
3
|
+
This module defines the type visitors that are intended to be
|
|
4
|
+
subclassed by other code. They have been separated out into their own
|
|
5
|
+
module to ease converting mypy to run under mypyc, since currently
|
|
6
|
+
mypyc-extension classes can extend interpreted classes but not the
|
|
7
|
+
other way around. Separating them out, then, allows us to compile
|
|
8
|
+
types before we can compile everything that uses a TypeVisitor.
|
|
9
|
+
|
|
10
|
+
The visitors are all re-exported from mypy.types and that is how
|
|
11
|
+
other modules refer to them.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from abc import abstractmethod
|
|
17
|
+
from typing import Any, Callable, Final, Generic, Iterable, Sequence, TypeVar, cast
|
|
18
|
+
|
|
19
|
+
from mypy_extensions import mypyc_attr, trait
|
|
20
|
+
|
|
21
|
+
from mypy.types import (
|
|
22
|
+
AnyType,
|
|
23
|
+
CallableArgument,
|
|
24
|
+
CallableType,
|
|
25
|
+
DeletedType,
|
|
26
|
+
EllipsisType,
|
|
27
|
+
ErasedType,
|
|
28
|
+
Instance,
|
|
29
|
+
LiteralType,
|
|
30
|
+
NoneType,
|
|
31
|
+
Overloaded,
|
|
32
|
+
Parameters,
|
|
33
|
+
ParamSpecType,
|
|
34
|
+
PartialType,
|
|
35
|
+
PlaceholderType,
|
|
36
|
+
RawExpressionType,
|
|
37
|
+
TupleType,
|
|
38
|
+
Type,
|
|
39
|
+
TypeAliasType,
|
|
40
|
+
TypedDictType,
|
|
41
|
+
TypeList,
|
|
42
|
+
TypeType,
|
|
43
|
+
TypeVarLikeType,
|
|
44
|
+
TypeVarTupleType,
|
|
45
|
+
TypeVarType,
|
|
46
|
+
UnboundType,
|
|
47
|
+
UninhabitedType,
|
|
48
|
+
UnionType,
|
|
49
|
+
UnpackType,
|
|
50
|
+
get_proper_type,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
T = TypeVar("T")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@trait
|
|
57
|
+
@mypyc_attr(allow_interpreted_subclasses=True)
|
|
58
|
+
class TypeVisitor(Generic[T]):
|
|
59
|
+
"""Visitor class for types (Type subclasses).
|
|
60
|
+
|
|
61
|
+
The parameter T is the return type of the visit methods.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
@abstractmethod
|
|
65
|
+
def visit_unbound_type(self, t: UnboundType) -> T:
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
@abstractmethod
|
|
69
|
+
def visit_any(self, t: AnyType) -> T:
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
@abstractmethod
|
|
73
|
+
def visit_none_type(self, t: NoneType) -> T:
|
|
74
|
+
pass
|
|
75
|
+
|
|
76
|
+
@abstractmethod
|
|
77
|
+
def visit_uninhabited_type(self, t: UninhabitedType) -> T:
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
@abstractmethod
|
|
81
|
+
def visit_erased_type(self, t: ErasedType) -> T:
|
|
82
|
+
pass
|
|
83
|
+
|
|
84
|
+
@abstractmethod
|
|
85
|
+
def visit_deleted_type(self, t: DeletedType) -> T:
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
@abstractmethod
|
|
89
|
+
def visit_type_var(self, t: TypeVarType) -> T:
|
|
90
|
+
pass
|
|
91
|
+
|
|
92
|
+
@abstractmethod
|
|
93
|
+
def visit_param_spec(self, t: ParamSpecType) -> T:
|
|
94
|
+
pass
|
|
95
|
+
|
|
96
|
+
@abstractmethod
|
|
97
|
+
def visit_parameters(self, t: Parameters) -> T:
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
@abstractmethod
|
|
101
|
+
def visit_type_var_tuple(self, t: TypeVarTupleType) -> T:
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
@abstractmethod
|
|
105
|
+
def visit_instance(self, t: Instance) -> T:
|
|
106
|
+
pass
|
|
107
|
+
|
|
108
|
+
@abstractmethod
|
|
109
|
+
def visit_callable_type(self, t: CallableType) -> T:
|
|
110
|
+
pass
|
|
111
|
+
|
|
112
|
+
@abstractmethod
|
|
113
|
+
def visit_overloaded(self, t: Overloaded) -> T:
|
|
114
|
+
pass
|
|
115
|
+
|
|
116
|
+
@abstractmethod
|
|
117
|
+
def visit_tuple_type(self, t: TupleType) -> T:
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
@abstractmethod
|
|
121
|
+
def visit_typeddict_type(self, t: TypedDictType) -> T:
|
|
122
|
+
pass
|
|
123
|
+
|
|
124
|
+
@abstractmethod
|
|
125
|
+
def visit_literal_type(self, t: LiteralType) -> T:
|
|
126
|
+
pass
|
|
127
|
+
|
|
128
|
+
@abstractmethod
|
|
129
|
+
def visit_union_type(self, t: UnionType) -> T:
|
|
130
|
+
pass
|
|
131
|
+
|
|
132
|
+
@abstractmethod
|
|
133
|
+
def visit_partial_type(self, t: PartialType) -> T:
|
|
134
|
+
pass
|
|
135
|
+
|
|
136
|
+
@abstractmethod
|
|
137
|
+
def visit_type_type(self, t: TypeType) -> T:
|
|
138
|
+
pass
|
|
139
|
+
|
|
140
|
+
@abstractmethod
|
|
141
|
+
def visit_type_alias_type(self, t: TypeAliasType) -> T:
|
|
142
|
+
pass
|
|
143
|
+
|
|
144
|
+
@abstractmethod
|
|
145
|
+
def visit_unpack_type(self, t: UnpackType) -> T:
|
|
146
|
+
pass
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@trait
|
|
150
|
+
@mypyc_attr(allow_interpreted_subclasses=True)
|
|
151
|
+
class SyntheticTypeVisitor(TypeVisitor[T]):
|
|
152
|
+
"""A TypeVisitor that also knows how to visit synthetic AST constructs.
|
|
153
|
+
|
|
154
|
+
Not just real types.
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
@abstractmethod
|
|
158
|
+
def visit_type_list(self, t: TypeList) -> T:
|
|
159
|
+
pass
|
|
160
|
+
|
|
161
|
+
@abstractmethod
|
|
162
|
+
def visit_callable_argument(self, t: CallableArgument) -> T:
|
|
163
|
+
pass
|
|
164
|
+
|
|
165
|
+
@abstractmethod
|
|
166
|
+
def visit_ellipsis_type(self, t: EllipsisType) -> T:
|
|
167
|
+
pass
|
|
168
|
+
|
|
169
|
+
@abstractmethod
|
|
170
|
+
def visit_raw_expression_type(self, t: RawExpressionType) -> T:
|
|
171
|
+
pass
|
|
172
|
+
|
|
173
|
+
@abstractmethod
|
|
174
|
+
def visit_placeholder_type(self, t: PlaceholderType) -> T:
|
|
175
|
+
pass
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@mypyc_attr(allow_interpreted_subclasses=True)
|
|
179
|
+
class TypeTranslator(TypeVisitor[Type]):
|
|
180
|
+
"""Identity type transformation.
|
|
181
|
+
|
|
182
|
+
Subclass this and override some methods to implement a non-trivial
|
|
183
|
+
transformation.
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
def visit_unbound_type(self, t: UnboundType) -> Type:
|
|
187
|
+
return t
|
|
188
|
+
|
|
189
|
+
def visit_any(self, t: AnyType) -> Type:
|
|
190
|
+
return t
|
|
191
|
+
|
|
192
|
+
def visit_none_type(self, t: NoneType) -> Type:
|
|
193
|
+
return t
|
|
194
|
+
|
|
195
|
+
def visit_uninhabited_type(self, t: UninhabitedType) -> Type:
|
|
196
|
+
return t
|
|
197
|
+
|
|
198
|
+
def visit_erased_type(self, t: ErasedType) -> Type:
|
|
199
|
+
return t
|
|
200
|
+
|
|
201
|
+
def visit_deleted_type(self, t: DeletedType) -> Type:
|
|
202
|
+
return t
|
|
203
|
+
|
|
204
|
+
def visit_instance(self, t: Instance) -> Type:
|
|
205
|
+
last_known_value: LiteralType | None = None
|
|
206
|
+
if t.last_known_value is not None:
|
|
207
|
+
raw_last_known_value = t.last_known_value.accept(self)
|
|
208
|
+
assert isinstance(raw_last_known_value, LiteralType) # type: ignore[misc]
|
|
209
|
+
last_known_value = raw_last_known_value
|
|
210
|
+
return Instance(
|
|
211
|
+
typ=t.type,
|
|
212
|
+
args=self.translate_types(t.args),
|
|
213
|
+
line=t.line,
|
|
214
|
+
column=t.column,
|
|
215
|
+
last_known_value=last_known_value,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
def visit_type_var(self, t: TypeVarType) -> Type:
|
|
219
|
+
return t
|
|
220
|
+
|
|
221
|
+
def visit_param_spec(self, t: ParamSpecType) -> Type:
|
|
222
|
+
return t
|
|
223
|
+
|
|
224
|
+
def visit_parameters(self, t: Parameters) -> Type:
|
|
225
|
+
return t.copy_modified(arg_types=self.translate_types(t.arg_types))
|
|
226
|
+
|
|
227
|
+
def visit_type_var_tuple(self, t: TypeVarTupleType) -> Type:
|
|
228
|
+
return t
|
|
229
|
+
|
|
230
|
+
def visit_partial_type(self, t: PartialType) -> Type:
|
|
231
|
+
return t
|
|
232
|
+
|
|
233
|
+
def visit_unpack_type(self, t: UnpackType) -> Type:
|
|
234
|
+
return UnpackType(t.type.accept(self))
|
|
235
|
+
|
|
236
|
+
def visit_callable_type(self, t: CallableType) -> Type:
|
|
237
|
+
return t.copy_modified(
|
|
238
|
+
arg_types=self.translate_types(t.arg_types),
|
|
239
|
+
ret_type=t.ret_type.accept(self),
|
|
240
|
+
variables=self.translate_variables(t.variables),
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
def visit_tuple_type(self, t: TupleType) -> Type:
|
|
244
|
+
return TupleType(
|
|
245
|
+
self.translate_types(t.items),
|
|
246
|
+
# TODO: This appears to be unsafe.
|
|
247
|
+
cast(Any, t.partial_fallback.accept(self)),
|
|
248
|
+
t.line,
|
|
249
|
+
t.column,
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
def visit_typeddict_type(self, t: TypedDictType) -> Type:
|
|
253
|
+
items = {item_name: item_type.accept(self) for (item_name, item_type) in t.items.items()}
|
|
254
|
+
return TypedDictType(
|
|
255
|
+
items,
|
|
256
|
+
t.required_keys,
|
|
257
|
+
# TODO: This appears to be unsafe.
|
|
258
|
+
cast(Any, t.fallback.accept(self)),
|
|
259
|
+
t.line,
|
|
260
|
+
t.column,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
def visit_literal_type(self, t: LiteralType) -> Type:
|
|
264
|
+
fallback = t.fallback.accept(self)
|
|
265
|
+
assert isinstance(fallback, Instance) # type: ignore[misc]
|
|
266
|
+
return LiteralType(value=t.value, fallback=fallback, line=t.line, column=t.column)
|
|
267
|
+
|
|
268
|
+
def visit_union_type(self, t: UnionType) -> Type:
|
|
269
|
+
return UnionType(self.translate_types(t.items), t.line, t.column)
|
|
270
|
+
|
|
271
|
+
def translate_types(self, types: Iterable[Type]) -> list[Type]:
|
|
272
|
+
return [t.accept(self) for t in types]
|
|
273
|
+
|
|
274
|
+
def translate_variables(
|
|
275
|
+
self, variables: Sequence[TypeVarLikeType]
|
|
276
|
+
) -> Sequence[TypeVarLikeType]:
|
|
277
|
+
return variables
|
|
278
|
+
|
|
279
|
+
def visit_overloaded(self, t: Overloaded) -> Type:
|
|
280
|
+
items: list[CallableType] = []
|
|
281
|
+
for item in t.items:
|
|
282
|
+
new = item.accept(self)
|
|
283
|
+
assert isinstance(new, CallableType) # type: ignore[misc]
|
|
284
|
+
items.append(new)
|
|
285
|
+
return Overloaded(items=items)
|
|
286
|
+
|
|
287
|
+
def visit_type_type(self, t: TypeType) -> Type:
|
|
288
|
+
return TypeType.make_normalized(t.item.accept(self), line=t.line, column=t.column)
|
|
289
|
+
|
|
290
|
+
@abstractmethod
|
|
291
|
+
def visit_type_alias_type(self, t: TypeAliasType) -> Type:
|
|
292
|
+
# This method doesn't have a default implementation for type translators,
|
|
293
|
+
# because type aliases are special: some information is contained in the
|
|
294
|
+
# TypeAlias node, and we normally don't generate new nodes. Every subclass
|
|
295
|
+
# must implement this depending on its semantics.
|
|
296
|
+
pass
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
@mypyc_attr(allow_interpreted_subclasses=True)
|
|
300
|
+
class TypeQuery(SyntheticTypeVisitor[T]):
|
|
301
|
+
"""Visitor for performing queries of types.
|
|
302
|
+
|
|
303
|
+
strategy is used to combine results for a series of types,
|
|
304
|
+
common use cases involve a boolean query using `any` or `all`.
|
|
305
|
+
|
|
306
|
+
Note: this visitor keeps an internal state (tracks type aliases to avoid
|
|
307
|
+
recursion), so it should *never* be re-used for querying different types,
|
|
308
|
+
create a new visitor instance instead.
|
|
309
|
+
|
|
310
|
+
# TODO: check that we don't have existing violations of this rule.
|
|
311
|
+
"""
|
|
312
|
+
|
|
313
|
+
def __init__(self, strategy: Callable[[list[T]], T]) -> None:
|
|
314
|
+
self.strategy = strategy
|
|
315
|
+
# Keep track of the type aliases already visited. This is needed to avoid
|
|
316
|
+
# infinite recursion on types like A = Union[int, List[A]].
|
|
317
|
+
self.seen_aliases: set[TypeAliasType] = set()
|
|
318
|
+
# By default, we eagerly expand type aliases, and query also types in the
|
|
319
|
+
# alias target. In most cases this is a desired behavior, but we may want
|
|
320
|
+
# to skip targets in some cases (e.g. when collecting type variables).
|
|
321
|
+
self.skip_alias_target = False
|
|
322
|
+
|
|
323
|
+
def visit_unbound_type(self, t: UnboundType) -> T:
|
|
324
|
+
return self.query_types(t.args)
|
|
325
|
+
|
|
326
|
+
def visit_type_list(self, t: TypeList) -> T:
|
|
327
|
+
return self.query_types(t.items)
|
|
328
|
+
|
|
329
|
+
def visit_callable_argument(self, t: CallableArgument) -> T:
|
|
330
|
+
return t.typ.accept(self)
|
|
331
|
+
|
|
332
|
+
def visit_any(self, t: AnyType) -> T:
|
|
333
|
+
return self.strategy([])
|
|
334
|
+
|
|
335
|
+
def visit_uninhabited_type(self, t: UninhabitedType) -> T:
|
|
336
|
+
return self.strategy([])
|
|
337
|
+
|
|
338
|
+
def visit_none_type(self, t: NoneType) -> T:
|
|
339
|
+
return self.strategy([])
|
|
340
|
+
|
|
341
|
+
def visit_erased_type(self, t: ErasedType) -> T:
|
|
342
|
+
return self.strategy([])
|
|
343
|
+
|
|
344
|
+
def visit_deleted_type(self, t: DeletedType) -> T:
|
|
345
|
+
return self.strategy([])
|
|
346
|
+
|
|
347
|
+
def visit_type_var(self, t: TypeVarType) -> T:
|
|
348
|
+
return self.query_types([t.upper_bound, t.default] + t.values)
|
|
349
|
+
|
|
350
|
+
def visit_param_spec(self, t: ParamSpecType) -> T:
|
|
351
|
+
return self.query_types([t.upper_bound, t.default, t.prefix])
|
|
352
|
+
|
|
353
|
+
def visit_type_var_tuple(self, t: TypeVarTupleType) -> T:
|
|
354
|
+
return self.query_types([t.upper_bound, t.default])
|
|
355
|
+
|
|
356
|
+
def visit_unpack_type(self, t: UnpackType) -> T:
|
|
357
|
+
return self.query_types([t.type])
|
|
358
|
+
|
|
359
|
+
def visit_parameters(self, t: Parameters) -> T:
|
|
360
|
+
return self.query_types(t.arg_types)
|
|
361
|
+
|
|
362
|
+
def visit_partial_type(self, t: PartialType) -> T:
|
|
363
|
+
return self.strategy([])
|
|
364
|
+
|
|
365
|
+
def visit_instance(self, t: Instance) -> T:
|
|
366
|
+
return self.query_types(t.args)
|
|
367
|
+
|
|
368
|
+
def visit_callable_type(self, t: CallableType) -> T:
|
|
369
|
+
# FIX generics
|
|
370
|
+
return self.query_types(t.arg_types + [t.ret_type])
|
|
371
|
+
|
|
372
|
+
def visit_tuple_type(self, t: TupleType) -> T:
|
|
373
|
+
return self.query_types(t.items)
|
|
374
|
+
|
|
375
|
+
def visit_typeddict_type(self, t: TypedDictType) -> T:
|
|
376
|
+
return self.query_types(t.items.values())
|
|
377
|
+
|
|
378
|
+
def visit_raw_expression_type(self, t: RawExpressionType) -> T:
|
|
379
|
+
return self.strategy([])
|
|
380
|
+
|
|
381
|
+
def visit_literal_type(self, t: LiteralType) -> T:
|
|
382
|
+
return self.strategy([])
|
|
383
|
+
|
|
384
|
+
def visit_union_type(self, t: UnionType) -> T:
|
|
385
|
+
return self.query_types(t.items)
|
|
386
|
+
|
|
387
|
+
def visit_overloaded(self, t: Overloaded) -> T:
|
|
388
|
+
return self.query_types(t.items)
|
|
389
|
+
|
|
390
|
+
def visit_type_type(self, t: TypeType) -> T:
|
|
391
|
+
return t.item.accept(self)
|
|
392
|
+
|
|
393
|
+
def visit_ellipsis_type(self, t: EllipsisType) -> T:
|
|
394
|
+
return self.strategy([])
|
|
395
|
+
|
|
396
|
+
def visit_placeholder_type(self, t: PlaceholderType) -> T:
|
|
397
|
+
return self.query_types(t.args)
|
|
398
|
+
|
|
399
|
+
def visit_type_alias_type(self, t: TypeAliasType) -> T:
|
|
400
|
+
# Skip type aliases already visited types to avoid infinite recursion.
|
|
401
|
+
# TODO: Ideally we should fire subvisitors here (or use caching) if we care
|
|
402
|
+
# about duplicates.
|
|
403
|
+
if t in self.seen_aliases:
|
|
404
|
+
return self.strategy([])
|
|
405
|
+
self.seen_aliases.add(t)
|
|
406
|
+
if self.skip_alias_target:
|
|
407
|
+
return self.query_types(t.args)
|
|
408
|
+
return get_proper_type(t).accept(self)
|
|
409
|
+
|
|
410
|
+
def query_types(self, types: Iterable[Type]) -> T:
|
|
411
|
+
"""Perform a query for a list of types using the strategy to combine the results."""
|
|
412
|
+
return self.strategy([t.accept(self) for t in types])
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
# Return True if at least one type component returns True
|
|
416
|
+
ANY_STRATEGY: Final = 0
|
|
417
|
+
# Return True if no type component returns False
|
|
418
|
+
ALL_STRATEGY: Final = 1
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
class BoolTypeQuery(SyntheticTypeVisitor[bool]):
|
|
422
|
+
"""Visitor for performing recursive queries of types with a bool result.
|
|
423
|
+
|
|
424
|
+
Use TypeQuery if you need non-bool results.
|
|
425
|
+
|
|
426
|
+
'strategy' is used to combine results for a series of types. It must
|
|
427
|
+
be ANY_STRATEGY or ALL_STRATEGY.
|
|
428
|
+
|
|
429
|
+
Note: This visitor keeps an internal state (tracks type aliases to avoid
|
|
430
|
+
recursion), so it should *never* be re-used for querying different types
|
|
431
|
+
unless you call reset() first.
|
|
432
|
+
"""
|
|
433
|
+
|
|
434
|
+
def __init__(self, strategy: int) -> None:
|
|
435
|
+
self.strategy = strategy
|
|
436
|
+
if strategy == ANY_STRATEGY:
|
|
437
|
+
self.default = False
|
|
438
|
+
else:
|
|
439
|
+
assert strategy == ALL_STRATEGY
|
|
440
|
+
self.default = True
|
|
441
|
+
# Keep track of the type aliases already visited. This is needed to avoid
|
|
442
|
+
# infinite recursion on types like A = Union[int, List[A]]. An empty set is
|
|
443
|
+
# represented as None as a micro-optimization.
|
|
444
|
+
self.seen_aliases: set[TypeAliasType] | None = None
|
|
445
|
+
# By default, we eagerly expand type aliases, and query also types in the
|
|
446
|
+
# alias target. In most cases this is a desired behavior, but we may want
|
|
447
|
+
# to skip targets in some cases (e.g. when collecting type variables).
|
|
448
|
+
self.skip_alias_target = False
|
|
449
|
+
|
|
450
|
+
def reset(self) -> None:
|
|
451
|
+
"""Clear mutable state (but preserve strategy).
|
|
452
|
+
|
|
453
|
+
This *must* be called if you want to reuse the visitor.
|
|
454
|
+
"""
|
|
455
|
+
self.seen_aliases = None
|
|
456
|
+
|
|
457
|
+
def visit_unbound_type(self, t: UnboundType) -> bool:
|
|
458
|
+
return self.query_types(t.args)
|
|
459
|
+
|
|
460
|
+
def visit_type_list(self, t: TypeList) -> bool:
|
|
461
|
+
return self.query_types(t.items)
|
|
462
|
+
|
|
463
|
+
def visit_callable_argument(self, t: CallableArgument) -> bool:
|
|
464
|
+
return t.typ.accept(self)
|
|
465
|
+
|
|
466
|
+
def visit_any(self, t: AnyType) -> bool:
|
|
467
|
+
return self.default
|
|
468
|
+
|
|
469
|
+
def visit_uninhabited_type(self, t: UninhabitedType) -> bool:
|
|
470
|
+
return self.default
|
|
471
|
+
|
|
472
|
+
def visit_none_type(self, t: NoneType) -> bool:
|
|
473
|
+
return self.default
|
|
474
|
+
|
|
475
|
+
def visit_erased_type(self, t: ErasedType) -> bool:
|
|
476
|
+
return self.default
|
|
477
|
+
|
|
478
|
+
def visit_deleted_type(self, t: DeletedType) -> bool:
|
|
479
|
+
return self.default
|
|
480
|
+
|
|
481
|
+
def visit_type_var(self, t: TypeVarType) -> bool:
|
|
482
|
+
return self.query_types([t.upper_bound, t.default] + t.values)
|
|
483
|
+
|
|
484
|
+
def visit_param_spec(self, t: ParamSpecType) -> bool:
|
|
485
|
+
return self.query_types([t.upper_bound, t.default])
|
|
486
|
+
|
|
487
|
+
def visit_type_var_tuple(self, t: TypeVarTupleType) -> bool:
|
|
488
|
+
return self.query_types([t.upper_bound, t.default])
|
|
489
|
+
|
|
490
|
+
def visit_unpack_type(self, t: UnpackType) -> bool:
|
|
491
|
+
return self.query_types([t.type])
|
|
492
|
+
|
|
493
|
+
def visit_parameters(self, t: Parameters) -> bool:
|
|
494
|
+
return self.query_types(t.arg_types)
|
|
495
|
+
|
|
496
|
+
def visit_partial_type(self, t: PartialType) -> bool:
|
|
497
|
+
return self.default
|
|
498
|
+
|
|
499
|
+
def visit_instance(self, t: Instance) -> bool:
|
|
500
|
+
return self.query_types(t.args)
|
|
501
|
+
|
|
502
|
+
def visit_callable_type(self, t: CallableType) -> bool:
|
|
503
|
+
# FIX generics
|
|
504
|
+
# Avoid allocating any objects here as an optimization.
|
|
505
|
+
args = self.query_types(t.arg_types)
|
|
506
|
+
ret = t.ret_type.accept(self)
|
|
507
|
+
if self.strategy == ANY_STRATEGY:
|
|
508
|
+
return args or ret
|
|
509
|
+
else:
|
|
510
|
+
return args and ret
|
|
511
|
+
|
|
512
|
+
def visit_tuple_type(self, t: TupleType) -> bool:
|
|
513
|
+
return self.query_types(t.items)
|
|
514
|
+
|
|
515
|
+
def visit_typeddict_type(self, t: TypedDictType) -> bool:
|
|
516
|
+
return self.query_types(list(t.items.values()))
|
|
517
|
+
|
|
518
|
+
def visit_raw_expression_type(self, t: RawExpressionType) -> bool:
|
|
519
|
+
return self.default
|
|
520
|
+
|
|
521
|
+
def visit_literal_type(self, t: LiteralType) -> bool:
|
|
522
|
+
return self.default
|
|
523
|
+
|
|
524
|
+
def visit_union_type(self, t: UnionType) -> bool:
|
|
525
|
+
return self.query_types(t.items)
|
|
526
|
+
|
|
527
|
+
def visit_overloaded(self, t: Overloaded) -> bool:
|
|
528
|
+
return self.query_types(t.items) # type: ignore[arg-type]
|
|
529
|
+
|
|
530
|
+
def visit_type_type(self, t: TypeType) -> bool:
|
|
531
|
+
return t.item.accept(self)
|
|
532
|
+
|
|
533
|
+
def visit_ellipsis_type(self, t: EllipsisType) -> bool:
|
|
534
|
+
return self.default
|
|
535
|
+
|
|
536
|
+
def visit_placeholder_type(self, t: PlaceholderType) -> bool:
|
|
537
|
+
return self.query_types(t.args)
|
|
538
|
+
|
|
539
|
+
def visit_type_alias_type(self, t: TypeAliasType) -> bool:
|
|
540
|
+
# Skip type aliases already visited types to avoid infinite recursion.
|
|
541
|
+
# TODO: Ideally we should fire subvisitors here (or use caching) if we care
|
|
542
|
+
# about duplicates.
|
|
543
|
+
if self.seen_aliases is None:
|
|
544
|
+
self.seen_aliases = set()
|
|
545
|
+
elif t in self.seen_aliases:
|
|
546
|
+
return self.default
|
|
547
|
+
self.seen_aliases.add(t)
|
|
548
|
+
if self.skip_alias_target:
|
|
549
|
+
return self.query_types(t.args)
|
|
550
|
+
return get_proper_type(t).accept(self)
|
|
551
|
+
|
|
552
|
+
def query_types(self, types: list[Type] | tuple[Type, ...]) -> bool:
|
|
553
|
+
"""Perform a query for a sequence of types using the strategy to combine the results."""
|
|
554
|
+
# Special-case for lists and tuples to allow mypyc to produce better code.
|
|
555
|
+
if isinstance(types, list):
|
|
556
|
+
if self.strategy == ANY_STRATEGY:
|
|
557
|
+
return any(t.accept(self) for t in types)
|
|
558
|
+
else:
|
|
559
|
+
return all(t.accept(self) for t in types)
|
|
560
|
+
else:
|
|
561
|
+
if self.strategy == ANY_STRATEGY:
|
|
562
|
+
return any(t.accept(self) for t in types)
|
|
563
|
+
else:
|
|
564
|
+
return all(t.accept(self) for t in types)
|