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.
Files changed (1018) hide show
  1. mypy/__init__.py +1 -0
  2. mypy/__main__.py +37 -0
  3. mypy/api.py +94 -0
  4. mypy/applytype.py +156 -0
  5. mypy/argmap.py +268 -0
  6. mypy/binder.py +538 -0
  7. mypy/bogus_type.py +27 -0
  8. mypy/build.py +3562 -0
  9. mypy/checker.py +8372 -0
  10. mypy/checkexpr.py +6615 -0
  11. mypy/checkmember.py +1356 -0
  12. mypy/checkpattern.py +801 -0
  13. mypy/checkstrformat.py +1109 -0
  14. mypy/config_parser.py +670 -0
  15. mypy/constant_fold.py +187 -0
  16. mypy/constraints.py +1624 -0
  17. mypy/copytype.py +133 -0
  18. mypy/defaults.py +46 -0
  19. mypy/dmypy/__init__.py +0 -0
  20. mypy/dmypy/__main__.py +6 -0
  21. mypy/dmypy/client.py +749 -0
  22. mypy/dmypy_os.py +42 -0
  23. mypy/dmypy_server.py +1107 -0
  24. mypy/dmypy_util.py +117 -0
  25. mypy/erasetype.py +278 -0
  26. mypy/errorcodes.py +285 -0
  27. mypy/errors.py +1280 -0
  28. mypy/evalexpr.py +205 -0
  29. mypy/expandtype.py +510 -0
  30. mypy/exprtotype.py +206 -0
  31. mypy/fastparse.py +2147 -0
  32. mypy/find_sources.py +243 -0
  33. mypy/fixup.py +426 -0
  34. mypy/freetree.py +23 -0
  35. mypy/fscache.py +309 -0
  36. mypy/fswatcher.py +106 -0
  37. mypy/gclogger.py +47 -0
  38. mypy/git.py +34 -0
  39. mypy/graph_utils.py +112 -0
  40. mypy/indirection.py +121 -0
  41. mypy/infer.py +75 -0
  42. mypy/inspections.py +627 -0
  43. mypy/ipc.py +310 -0
  44. mypy/join.py +866 -0
  45. mypy/literals.py +306 -0
  46. mypy/lookup.py +61 -0
  47. mypy/main.py +1574 -0
  48. mypy/maptype.py +106 -0
  49. mypy/meet.py +1140 -0
  50. mypy/memprofile.py +121 -0
  51. mypy/message_registry.py +326 -0
  52. mypy/messages.py +3171 -0
  53. mypy/metastore.py +225 -0
  54. mypy/mixedtraverser.py +112 -0
  55. mypy/modulefinder.py +875 -0
  56. mypy/moduleinspect.py +184 -0
  57. mypy/mro.py +62 -0
  58. mypy/nodes.py +4112 -0
  59. mypy/operators.py +126 -0
  60. mypy/options.py +556 -0
  61. mypy/parse.py +30 -0
  62. mypy/partially_defined.py +675 -0
  63. mypy/patterns.py +150 -0
  64. mypy/plugin.py +901 -0
  65. mypy/plugins/__init__.py +0 -0
  66. mypy/plugins/attrs.py +1152 -0
  67. mypy/plugins/common.py +440 -0
  68. mypy/plugins/ctypes.py +245 -0
  69. mypy/plugins/dataclasses.py +1101 -0
  70. mypy/plugins/default.py +518 -0
  71. mypy/plugins/enums.py +259 -0
  72. mypy/plugins/functools.py +104 -0
  73. mypy/plugins/proper_plugin.py +175 -0
  74. mypy/plugins/singledispatch.py +224 -0
  75. mypy/py.typed +1 -0
  76. mypy/pyinfo.py +78 -0
  77. mypy/reachability.py +362 -0
  78. mypy/refinfo.py +92 -0
  79. mypy/renaming.py +568 -0
  80. mypy/report.py +924 -0
  81. mypy/scope.py +125 -0
  82. mypy/semanal.py +7023 -0
  83. mypy/semanal_classprop.py +187 -0
  84. mypy/semanal_enum.py +253 -0
  85. mypy/semanal_infer.py +128 -0
  86. mypy/semanal_main.py +511 -0
  87. mypy/semanal_namedtuple.py +670 -0
  88. mypy/semanal_newtype.py +273 -0
  89. mypy/semanal_pass1.py +156 -0
  90. mypy/semanal_shared.py +490 -0
  91. mypy/semanal_typeargs.py +265 -0
  92. mypy/semanal_typeddict.py +575 -0
  93. mypy/server/__init__.py +0 -0
  94. mypy/server/astdiff.py +518 -0
  95. mypy/server/astmerge.py +562 -0
  96. mypy/server/aststrip.py +281 -0
  97. mypy/server/deps.py +1137 -0
  98. mypy/server/mergecheck.py +83 -0
  99. mypy/server/objgraph.py +101 -0
  100. mypy/server/subexpr.py +198 -0
  101. mypy/server/target.py +11 -0
  102. mypy/server/trigger.py +26 -0
  103. mypy/server/update.py +1339 -0
  104. mypy/sharedparse.py +112 -0
  105. mypy/solve.py +562 -0
  106. mypy/split_namespace.py +35 -0
  107. mypy/state.py +28 -0
  108. mypy/stats.py +489 -0
  109. mypy/strconv.py +641 -0
  110. mypy/stubdoc.py +491 -0
  111. mypy/stubgen.py +1873 -0
  112. mypy/stubgenc.py +993 -0
  113. mypy/stubinfo.py +173 -0
  114. mypy/stubtest.py +2079 -0
  115. mypy/stubutil.py +807 -0
  116. mypy/subtypes.py +1967 -0
  117. mypy/suggestions.py +1046 -0
  118. mypy/test/__init__.py +0 -0
  119. mypy/test/config.py +28 -0
  120. mypy/test/data.py +823 -0
  121. mypy/test/helpers.py +476 -0
  122. mypy/test/meta/__init__.py +0 -0
  123. mypy/test/meta/_pytest.py +72 -0
  124. mypy/test/meta/test_diff_helper.py +47 -0
  125. mypy/test/meta/test_parse_data.py +73 -0
  126. mypy/test/meta/test_update_data.py +135 -0
  127. mypy/test/test_find_sources.py +376 -0
  128. mypy/test/test_ref_info.py +45 -0
  129. mypy/test/testapi.py +45 -0
  130. mypy/test/testargs.py +77 -0
  131. mypy/test/testcheck.py +322 -0
  132. mypy/test/testcmdline.py +152 -0
  133. mypy/test/testconstraints.py +134 -0
  134. mypy/test/testdaemon.py +132 -0
  135. mypy/test/testdeps.py +77 -0
  136. mypy/test/testdiff.py +67 -0
  137. mypy/test/testerrorstream.py +46 -0
  138. mypy/test/testfinegrained.py +438 -0
  139. mypy/test/testfinegrainedcache.py +18 -0
  140. mypy/test/testformatter.py +85 -0
  141. mypy/test/testfscache.py +101 -0
  142. mypy/test/testgraph.py +83 -0
  143. mypy/test/testinfer.py +373 -0
  144. mypy/test/testipc.py +119 -0
  145. mypy/test/testmerge.py +238 -0
  146. mypy/test/testmodulefinder.py +278 -0
  147. mypy/test/testmypyc.py +14 -0
  148. mypy/test/testparse.py +107 -0
  149. mypy/test/testpep561.py +211 -0
  150. mypy/test/testpythoneval.py +117 -0
  151. mypy/test/testreports.py +55 -0
  152. mypy/test/testsemanal.py +209 -0
  153. mypy/test/testsolve.py +285 -0
  154. mypy/test/teststubgen.py +1412 -0
  155. mypy/test/teststubinfo.py +12 -0
  156. mypy/test/teststubtest.py +2492 -0
  157. mypy/test/testsubtypes.py +303 -0
  158. mypy/test/testtransform.py +64 -0
  159. mypy/test/testtypegen.py +83 -0
  160. mypy/test/testtypes.py +1551 -0
  161. mypy/test/testutil.py +111 -0
  162. mypy/test/typefixture.py +415 -0
  163. mypy/test/update_data.py +87 -0
  164. mypy/test/visitors.py +63 -0
  165. mypy/traverser.py +961 -0
  166. mypy/treetransform.py +800 -0
  167. mypy/tvar_scope.py +147 -0
  168. mypy/type_visitor.py +564 -0
  169. mypy/typeanal.py +2510 -0
  170. mypy/typeops.py +1082 -0
  171. mypy/types.py +3686 -0
  172. mypy/types_utils.py +166 -0
  173. mypy/typeshed/LICENSE +237 -0
  174. mypy/typeshed/stdlib/VERSIONS +308 -0
  175. mypy/typeshed/stdlib/__future__.pyi +36 -0
  176. mypy/typeshed/stdlib/__main__.pyi +3 -0
  177. mypy/typeshed/stdlib/_ast.pyi +587 -0
  178. mypy/typeshed/stdlib/_bisect.pyi +84 -0
  179. mypy/typeshed/stdlib/_bootlocale.pyi +1 -0
  180. mypy/typeshed/stdlib/_codecs.pyi +133 -0
  181. mypy/typeshed/stdlib/_collections_abc.pyi +94 -0
  182. mypy/typeshed/stdlib/_compat_pickle.pyi +8 -0
  183. mypy/typeshed/stdlib/_compression.pyi +25 -0
  184. mypy/typeshed/stdlib/_csv.pyi +90 -0
  185. mypy/typeshed/stdlib/_ctypes.pyi +205 -0
  186. mypy/typeshed/stdlib/_curses.pyi +557 -0
  187. mypy/typeshed/stdlib/_decimal.pyi +281 -0
  188. mypy/typeshed/stdlib/_dummy_thread.pyi +27 -0
  189. mypy/typeshed/stdlib/_dummy_threading.pyi +164 -0
  190. mypy/typeshed/stdlib/_heapq.pyi +11 -0
  191. mypy/typeshed/stdlib/_imp.pyi +28 -0
  192. mypy/typeshed/stdlib/_json.pyi +49 -0
  193. mypy/typeshed/stdlib/_locale.pyi +100 -0
  194. mypy/typeshed/stdlib/_markupbase.pyi +16 -0
  195. mypy/typeshed/stdlib/_msi.pyi +91 -0
  196. mypy/typeshed/stdlib/_operator.pyi +147 -0
  197. mypy/typeshed/stdlib/_osx_support.pyi +34 -0
  198. mypy/typeshed/stdlib/_posixsubprocess.pyi +32 -0
  199. mypy/typeshed/stdlib/_py_abc.pyi +14 -0
  200. mypy/typeshed/stdlib/_pydecimal.pyi +43 -0
  201. mypy/typeshed/stdlib/_random.pyi +12 -0
  202. mypy/typeshed/stdlib/_sitebuiltins.pyi +16 -0
  203. mypy/typeshed/stdlib/_socket.pyi +802 -0
  204. mypy/typeshed/stdlib/_stat.pyi +103 -0
  205. mypy/typeshed/stdlib/_thread.pyi +52 -0
  206. mypy/typeshed/stdlib/_threading_local.pyi +17 -0
  207. mypy/typeshed/stdlib/_tkinter.pyi +120 -0
  208. mypy/typeshed/stdlib/_tracemalloc.pyi +17 -0
  209. mypy/typeshed/stdlib/_typeshed/__init__.pyi +347 -0
  210. mypy/typeshed/stdlib/_typeshed/dbapi.pyi +37 -0
  211. mypy/typeshed/stdlib/_typeshed/wsgi.pyi +44 -0
  212. mypy/typeshed/stdlib/_typeshed/xml.pyi +9 -0
  213. mypy/typeshed/stdlib/_warnings.pyi +55 -0
  214. mypy/typeshed/stdlib/_weakref.pyi +41 -0
  215. mypy/typeshed/stdlib/_weakrefset.pyi +51 -0
  216. mypy/typeshed/stdlib/_winapi.pyi +251 -0
  217. mypy/typeshed/stdlib/abc.pyi +49 -0
  218. mypy/typeshed/stdlib/aifc.pyi +91 -0
  219. mypy/typeshed/stdlib/antigravity.pyi +3 -0
  220. mypy/typeshed/stdlib/argparse.pyi +571 -0
  221. mypy/typeshed/stdlib/array.pyi +92 -0
  222. mypy/typeshed/stdlib/ast.pyi +277 -0
  223. mypy/typeshed/stdlib/asynchat.pyi +21 -0
  224. mypy/typeshed/stdlib/asyncio/__init__.pyi +41 -0
  225. mypy/typeshed/stdlib/asyncio/base_events.pyi +440 -0
  226. mypy/typeshed/stdlib/asyncio/base_futures.pyi +19 -0
  227. mypy/typeshed/stdlib/asyncio/base_subprocess.pyi +63 -0
  228. mypy/typeshed/stdlib/asyncio/base_tasks.pyi +9 -0
  229. mypy/typeshed/stdlib/asyncio/constants.pyi +20 -0
  230. mypy/typeshed/stdlib/asyncio/coroutines.pyi +26 -0
  231. mypy/typeshed/stdlib/asyncio/events.pyi +574 -0
  232. mypy/typeshed/stdlib/asyncio/exceptions.pyi +43 -0
  233. mypy/typeshed/stdlib/asyncio/format_helpers.pyi +20 -0
  234. mypy/typeshed/stdlib/asyncio/futures.pyi +57 -0
  235. mypy/typeshed/stdlib/asyncio/locks.pyi +121 -0
  236. mypy/typeshed/stdlib/asyncio/log.pyi +3 -0
  237. mypy/typeshed/stdlib/asyncio/mixins.pyi +9 -0
  238. mypy/typeshed/stdlib/asyncio/proactor_events.pyi +64 -0
  239. mypy/typeshed/stdlib/asyncio/protocols.pyi +34 -0
  240. mypy/typeshed/stdlib/asyncio/queues.pyi +47 -0
  241. mypy/typeshed/stdlib/asyncio/runners.pyi +32 -0
  242. mypy/typeshed/stdlib/asyncio/selector_events.pyi +8 -0
  243. mypy/typeshed/stdlib/asyncio/sslproto.pyi +163 -0
  244. mypy/typeshed/stdlib/asyncio/staggered.pyi +10 -0
  245. mypy/typeshed/stdlib/asyncio/streams.pyi +148 -0
  246. mypy/typeshed/stdlib/asyncio/subprocess.pyi +229 -0
  247. mypy/typeshed/stdlib/asyncio/taskgroups.pyi +25 -0
  248. mypy/typeshed/stdlib/asyncio/tasks.pyi +477 -0
  249. mypy/typeshed/stdlib/asyncio/threads.pyi +9 -0
  250. mypy/typeshed/stdlib/asyncio/timeouts.pyi +19 -0
  251. mypy/typeshed/stdlib/asyncio/transports.pyi +47 -0
  252. mypy/typeshed/stdlib/asyncio/trsock.pyi +98 -0
  253. mypy/typeshed/stdlib/asyncio/unix_events.pyi +173 -0
  254. mypy/typeshed/stdlib/asyncio/windows_events.pyi +83 -0
  255. mypy/typeshed/stdlib/asyncio/windows_utils.pyi +49 -0
  256. mypy/typeshed/stdlib/asyncore.pyi +90 -0
  257. mypy/typeshed/stdlib/atexit.pyi +12 -0
  258. mypy/typeshed/stdlib/audioop.pyi +42 -0
  259. mypy/typeshed/stdlib/base64.pyi +59 -0
  260. mypy/typeshed/stdlib/bdb.pyi +102 -0
  261. mypy/typeshed/stdlib/binascii.pyi +36 -0
  262. mypy/typeshed/stdlib/binhex.pyi +45 -0
  263. mypy/typeshed/stdlib/bisect.pyi +4 -0
  264. mypy/typeshed/stdlib/builtins.pyi +1937 -0
  265. mypy/typeshed/stdlib/bz2.pyi +146 -0
  266. mypy/typeshed/stdlib/cProfile.pyi +35 -0
  267. mypy/typeshed/stdlib/calendar.pyi +206 -0
  268. mypy/typeshed/stdlib/cgi.pyi +118 -0
  269. mypy/typeshed/stdlib/cgitb.pyi +32 -0
  270. mypy/typeshed/stdlib/chunk.pyi +20 -0
  271. mypy/typeshed/stdlib/cmath.pyi +36 -0
  272. mypy/typeshed/stdlib/cmd.pyi +45 -0
  273. mypy/typeshed/stdlib/code.pyi +33 -0
  274. mypy/typeshed/stdlib/codecs.pyi +285 -0
  275. mypy/typeshed/stdlib/codeop.pyi +13 -0
  276. mypy/typeshed/stdlib/collections/__init__.pyi +477 -0
  277. mypy/typeshed/stdlib/collections/abc.pyi +2 -0
  278. mypy/typeshed/stdlib/colorsys.pyi +13 -0
  279. mypy/typeshed/stdlib/compileall.pyi +111 -0
  280. mypy/typeshed/stdlib/concurrent/__init__.pyi +0 -0
  281. mypy/typeshed/stdlib/concurrent/futures/__init__.pyi +32 -0
  282. mypy/typeshed/stdlib/concurrent/futures/_base.pyi +120 -0
  283. mypy/typeshed/stdlib/concurrent/futures/process.pyi +233 -0
  284. mypy/typeshed/stdlib/concurrent/futures/thread.pyi +80 -0
  285. mypy/typeshed/stdlib/configparser.pyi +313 -0
  286. mypy/typeshed/stdlib/contextlib.pyi +207 -0
  287. mypy/typeshed/stdlib/contextvars.pyi +63 -0
  288. mypy/typeshed/stdlib/copy.pyi +16 -0
  289. mypy/typeshed/stdlib/copyreg.pyi +21 -0
  290. mypy/typeshed/stdlib/crypt.pyi +12 -0
  291. mypy/typeshed/stdlib/csv.pyi +147 -0
  292. mypy/typeshed/stdlib/ctypes/__init__.pyi +187 -0
  293. mypy/typeshed/stdlib/ctypes/_endian.pyi +19 -0
  294. mypy/typeshed/stdlib/ctypes/util.pyi +6 -0
  295. mypy/typeshed/stdlib/ctypes/wintypes.pyi +298 -0
  296. mypy/typeshed/stdlib/curses/__init__.pyi +21 -0
  297. mypy/typeshed/stdlib/curses/ascii.pyi +63 -0
  298. mypy/typeshed/stdlib/curses/has_key.pyi +4 -0
  299. mypy/typeshed/stdlib/curses/panel.pyi +25 -0
  300. mypy/typeshed/stdlib/curses/textpad.pyi +13 -0
  301. mypy/typeshed/stdlib/dataclasses.pyi +313 -0
  302. mypy/typeshed/stdlib/datetime.pyi +295 -0
  303. mypy/typeshed/stdlib/dbm/__init__.pyi +95 -0
  304. mypy/typeshed/stdlib/dbm/dumb.pyi +31 -0
  305. mypy/typeshed/stdlib/dbm/gnu.pyi +40 -0
  306. mypy/typeshed/stdlib/dbm/ndbm.pyi +36 -0
  307. mypy/typeshed/stdlib/decimal.pyi +2 -0
  308. mypy/typeshed/stdlib/difflib.pyi +140 -0
  309. mypy/typeshed/stdlib/dis.pyi +144 -0
  310. mypy/typeshed/stdlib/distutils/__init__.pyi +5 -0
  311. mypy/typeshed/stdlib/distutils/archive_util.pyi +20 -0
  312. mypy/typeshed/stdlib/distutils/bcppcompiler.pyi +3 -0
  313. mypy/typeshed/stdlib/distutils/ccompiler.pyi +152 -0
  314. mypy/typeshed/stdlib/distutils/cmd.pyi +66 -0
  315. mypy/typeshed/stdlib/distutils/command/__init__.pyi +0 -0
  316. mypy/typeshed/stdlib/distutils/command/bdist.pyi +25 -0
  317. mypy/typeshed/stdlib/distutils/command/bdist_dumb.pyi +21 -0
  318. mypy/typeshed/stdlib/distutils/command/bdist_msi.pyi +45 -0
  319. mypy/typeshed/stdlib/distutils/command/bdist_packager.pyi +0 -0
  320. mypy/typeshed/stdlib/distutils/command/bdist_rpm.pyi +52 -0
  321. mypy/typeshed/stdlib/distutils/command/bdist_wininst.pyi +16 -0
  322. mypy/typeshed/stdlib/distutils/command/build.pyi +31 -0
  323. mypy/typeshed/stdlib/distutils/command/build_clib.pyi +27 -0
  324. mypy/typeshed/stdlib/distutils/command/build_ext.pyi +50 -0
  325. mypy/typeshed/stdlib/distutils/command/build_py.pyi +44 -0
  326. mypy/typeshed/stdlib/distutils/command/build_scripts.pyi +24 -0
  327. mypy/typeshed/stdlib/distutils/command/check.pyi +39 -0
  328. mypy/typeshed/stdlib/distutils/command/clean.pyi +17 -0
  329. mypy/typeshed/stdlib/distutils/command/config.pyi +83 -0
  330. mypy/typeshed/stdlib/distutils/command/install.pyi +63 -0
  331. mypy/typeshed/stdlib/distutils/command/install_data.pyi +19 -0
  332. mypy/typeshed/stdlib/distutils/command/install_egg_info.pyi +18 -0
  333. mypy/typeshed/stdlib/distutils/command/install_headers.pyi +16 -0
  334. mypy/typeshed/stdlib/distutils/command/install_lib.pyi +25 -0
  335. mypy/typeshed/stdlib/distutils/command/install_scripts.pyi +18 -0
  336. mypy/typeshed/stdlib/distutils/command/register.pyi +18 -0
  337. mypy/typeshed/stdlib/distutils/command/sdist.pyi +42 -0
  338. mypy/typeshed/stdlib/distutils/command/upload.pyi +17 -0
  339. mypy/typeshed/stdlib/distutils/config.pyi +17 -0
  340. mypy/typeshed/stdlib/distutils/core.pyi +57 -0
  341. mypy/typeshed/stdlib/distutils/cygwinccompiler.pyi +20 -0
  342. mypy/typeshed/stdlib/distutils/debug.pyi +1 -0
  343. mypy/typeshed/stdlib/distutils/dep_util.pyi +3 -0
  344. mypy/typeshed/stdlib/distutils/dir_util.pyi +13 -0
  345. mypy/typeshed/stdlib/distutils/dist.pyi +146 -0
  346. mypy/typeshed/stdlib/distutils/errors.pyi +19 -0
  347. mypy/typeshed/stdlib/distutils/extension.pyi +36 -0
  348. mypy/typeshed/stdlib/distutils/fancy_getopt.pyi +34 -0
  349. mypy/typeshed/stdlib/distutils/file_util.pyi +14 -0
  350. mypy/typeshed/stdlib/distutils/filelist.pyi +50 -0
  351. mypy/typeshed/stdlib/distutils/log.pyi +25 -0
  352. mypy/typeshed/stdlib/distutils/msvccompiler.pyi +3 -0
  353. mypy/typeshed/stdlib/distutils/spawn.pyi +2 -0
  354. mypy/typeshed/stdlib/distutils/sysconfig.pyi +22 -0
  355. mypy/typeshed/stdlib/distutils/text_file.pyi +21 -0
  356. mypy/typeshed/stdlib/distutils/unixccompiler.pyi +3 -0
  357. mypy/typeshed/stdlib/distutils/util.pyi +46 -0
  358. mypy/typeshed/stdlib/distutils/version.pyi +36 -0
  359. mypy/typeshed/stdlib/doctest.pyi +248 -0
  360. mypy/typeshed/stdlib/dummy_threading.pyi +2 -0
  361. mypy/typeshed/stdlib/email/__init__.pyi +29 -0
  362. mypy/typeshed/stdlib/email/_header_value_parser.pyi +392 -0
  363. mypy/typeshed/stdlib/email/_policybase.pyi +51 -0
  364. mypy/typeshed/stdlib/email/base64mime.pyi +13 -0
  365. mypy/typeshed/stdlib/email/charset.pyi +34 -0
  366. mypy/typeshed/stdlib/email/contentmanager.pyi +11 -0
  367. mypy/typeshed/stdlib/email/encoders.pyi +8 -0
  368. mypy/typeshed/stdlib/email/errors.pyi +39 -0
  369. mypy/typeshed/stdlib/email/feedparser.pyi +23 -0
  370. mypy/typeshed/stdlib/email/generator.pyi +40 -0
  371. mypy/typeshed/stdlib/email/header.pyi +31 -0
  372. mypy/typeshed/stdlib/email/headerregistry.pyi +178 -0
  373. mypy/typeshed/stdlib/email/iterators.pyi +12 -0
  374. mypy/typeshed/stdlib/email/message.pyi +161 -0
  375. mypy/typeshed/stdlib/email/mime/__init__.pyi +0 -0
  376. mypy/typeshed/stdlib/email/mime/application.pyi +17 -0
  377. mypy/typeshed/stdlib/email/mime/audio.pyi +17 -0
  378. mypy/typeshed/stdlib/email/mime/base.pyi +8 -0
  379. mypy/typeshed/stdlib/email/mime/image.pyi +17 -0
  380. mypy/typeshed/stdlib/email/mime/message.pyi +8 -0
  381. mypy/typeshed/stdlib/email/mime/multipart.pyi +18 -0
  382. mypy/typeshed/stdlib/email/mime/nonmultipart.pyi +5 -0
  383. mypy/typeshed/stdlib/email/mime/text.pyi +9 -0
  384. mypy/typeshed/stdlib/email/parser.pyi +26 -0
  385. mypy/typeshed/stdlib/email/policy.pyi +38 -0
  386. mypy/typeshed/stdlib/email/quoprimime.pyi +28 -0
  387. mypy/typeshed/stdlib/email/utils.pyi +66 -0
  388. mypy/typeshed/stdlib/encodings/__init__.pyi +10 -0
  389. mypy/typeshed/stdlib/encodings/utf_8.pyi +21 -0
  390. mypy/typeshed/stdlib/encodings/utf_8_sig.pyi +22 -0
  391. mypy/typeshed/stdlib/ensurepip/__init__.pyi +12 -0
  392. mypy/typeshed/stdlib/enum.pyi +317 -0
  393. mypy/typeshed/stdlib/errno.pyi +222 -0
  394. mypy/typeshed/stdlib/faulthandler.pyi +13 -0
  395. mypy/typeshed/stdlib/fcntl.pyi +127 -0
  396. mypy/typeshed/stdlib/filecmp.pyi +57 -0
  397. mypy/typeshed/stdlib/fileinput.pyi +213 -0
  398. mypy/typeshed/stdlib/fnmatch.pyi +9 -0
  399. mypy/typeshed/stdlib/formatter.pyi +88 -0
  400. mypy/typeshed/stdlib/fractions.pyi +150 -0
  401. mypy/typeshed/stdlib/ftplib.pyi +178 -0
  402. mypy/typeshed/stdlib/functools.pyi +200 -0
  403. mypy/typeshed/stdlib/gc.pyi +37 -0
  404. mypy/typeshed/stdlib/genericpath.pyi +52 -0
  405. mypy/typeshed/stdlib/getopt.pyi +11 -0
  406. mypy/typeshed/stdlib/getpass.pyi +8 -0
  407. mypy/typeshed/stdlib/gettext.pyi +169 -0
  408. mypy/typeshed/stdlib/glob.pyi +42 -0
  409. mypy/typeshed/stdlib/graphlib.pyi +28 -0
  410. mypy/typeshed/stdlib/grp.pyi +21 -0
  411. mypy/typeshed/stdlib/gzip.pyi +160 -0
  412. mypy/typeshed/stdlib/hashlib.pyi +165 -0
  413. mypy/typeshed/stdlib/heapq.pyi +17 -0
  414. mypy/typeshed/stdlib/hmac.pyi +38 -0
  415. mypy/typeshed/stdlib/html/__init__.pyi +6 -0
  416. mypy/typeshed/stdlib/html/entities.pyi +6 -0
  417. mypy/typeshed/stdlib/html/parser.pyi +34 -0
  418. mypy/typeshed/stdlib/http/__init__.pyi +105 -0
  419. mypy/typeshed/stdlib/http/client.pyi +259 -0
  420. mypy/typeshed/stdlib/http/cookiejar.pyi +159 -0
  421. mypy/typeshed/stdlib/http/cookies.pyi +60 -0
  422. mypy/typeshed/stdlib/http/server.pyi +83 -0
  423. mypy/typeshed/stdlib/imaplib.pyi +168 -0
  424. mypy/typeshed/stdlib/imghdr.pyi +17 -0
  425. mypy/typeshed/stdlib/imp.pyi +62 -0
  426. mypy/typeshed/stdlib/importlib/__init__.pyi +24 -0
  427. mypy/typeshed/stdlib/importlib/_abc.pyi +15 -0
  428. mypy/typeshed/stdlib/importlib/abc.pyi +172 -0
  429. mypy/typeshed/stdlib/importlib/machinery.pyi +179 -0
  430. mypy/typeshed/stdlib/importlib/metadata/__init__.pyi +276 -0
  431. mypy/typeshed/stdlib/importlib/metadata/_meta.pyi +40 -0
  432. mypy/typeshed/stdlib/importlib/readers.pyi +68 -0
  433. mypy/typeshed/stdlib/importlib/resources/__init__.pyi +46 -0
  434. mypy/typeshed/stdlib/importlib/resources/abc.pyi +12 -0
  435. mypy/typeshed/stdlib/importlib/resources/readers.pyi +14 -0
  436. mypy/typeshed/stdlib/importlib/resources/simple.pyi +49 -0
  437. mypy/typeshed/stdlib/importlib/simple.pyi +11 -0
  438. mypy/typeshed/stdlib/importlib/util.pyi +43 -0
  439. mypy/typeshed/stdlib/inspect.pyi +631 -0
  440. mypy/typeshed/stdlib/io.pyi +204 -0
  441. mypy/typeshed/stdlib/ipaddress.pyi +208 -0
  442. mypy/typeshed/stdlib/itertools.pyi +293 -0
  443. mypy/typeshed/stdlib/json/__init__.pyi +61 -0
  444. mypy/typeshed/stdlib/json/decoder.pyi +32 -0
  445. mypy/typeshed/stdlib/json/encoder.pyi +38 -0
  446. mypy/typeshed/stdlib/json/tool.pyi +1 -0
  447. mypy/typeshed/stdlib/keyword.pyi +21 -0
  448. mypy/typeshed/stdlib/lib2to3/__init__.pyi +0 -0
  449. mypy/typeshed/stdlib/lib2to3/btm_matcher.pyi +28 -0
  450. mypy/typeshed/stdlib/lib2to3/fixer_base.pyi +42 -0
  451. mypy/typeshed/stdlib/lib2to3/fixes/__init__.pyi +0 -0
  452. mypy/typeshed/stdlib/lib2to3/fixes/fix_apply.pyi +8 -0
  453. mypy/typeshed/stdlib/lib2to3/fixes/fix_asserts.pyi +10 -0
  454. mypy/typeshed/stdlib/lib2to3/fixes/fix_basestring.pyi +8 -0
  455. mypy/typeshed/stdlib/lib2to3/fixes/fix_buffer.pyi +8 -0
  456. mypy/typeshed/stdlib/lib2to3/fixes/fix_dict.pyi +16 -0
  457. mypy/typeshed/stdlib/lib2to3/fixes/fix_except.pyi +14 -0
  458. mypy/typeshed/stdlib/lib2to3/fixes/fix_exec.pyi +8 -0
  459. mypy/typeshed/stdlib/lib2to3/fixes/fix_execfile.pyi +8 -0
  460. mypy/typeshed/stdlib/lib2to3/fixes/fix_exitfunc.pyi +13 -0
  461. mypy/typeshed/stdlib/lib2to3/fixes/fix_filter.pyi +9 -0
  462. mypy/typeshed/stdlib/lib2to3/fixes/fix_funcattrs.pyi +8 -0
  463. mypy/typeshed/stdlib/lib2to3/fixes/fix_future.pyi +8 -0
  464. mypy/typeshed/stdlib/lib2to3/fixes/fix_getcwdu.pyi +8 -0
  465. mypy/typeshed/stdlib/lib2to3/fixes/fix_has_key.pyi +8 -0
  466. mypy/typeshed/stdlib/lib2to3/fixes/fix_idioms.pyi +15 -0
  467. mypy/typeshed/stdlib/lib2to3/fixes/fix_import.pyi +16 -0
  468. mypy/typeshed/stdlib/lib2to3/fixes/fix_imports.pyi +21 -0
  469. mypy/typeshed/stdlib/lib2to3/fixes/fix_imports2.pyi +6 -0
  470. mypy/typeshed/stdlib/lib2to3/fixes/fix_input.pyi +11 -0
  471. mypy/typeshed/stdlib/lib2to3/fixes/fix_intern.pyi +9 -0
  472. mypy/typeshed/stdlib/lib2to3/fixes/fix_isinstance.pyi +8 -0
  473. mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools.pyi +9 -0
  474. mypy/typeshed/stdlib/lib2to3/fixes/fix_itertools_imports.pyi +7 -0
  475. mypy/typeshed/stdlib/lib2to3/fixes/fix_long.pyi +7 -0
  476. mypy/typeshed/stdlib/lib2to3/fixes/fix_map.pyi +9 -0
  477. mypy/typeshed/stdlib/lib2to3/fixes/fix_metaclass.pyi +17 -0
  478. mypy/typeshed/stdlib/lib2to3/fixes/fix_methodattrs.pyi +10 -0
  479. mypy/typeshed/stdlib/lib2to3/fixes/fix_ne.pyi +8 -0
  480. mypy/typeshed/stdlib/lib2to3/fixes/fix_next.pyi +19 -0
  481. mypy/typeshed/stdlib/lib2to3/fixes/fix_nonzero.pyi +8 -0
  482. mypy/typeshed/stdlib/lib2to3/fixes/fix_numliterals.pyi +8 -0
  483. mypy/typeshed/stdlib/lib2to3/fixes/fix_operator.pyi +12 -0
  484. mypy/typeshed/stdlib/lib2to3/fixes/fix_paren.pyi +8 -0
  485. mypy/typeshed/stdlib/lib2to3/fixes/fix_print.pyi +12 -0
  486. mypy/typeshed/stdlib/lib2to3/fixes/fix_raise.pyi +8 -0
  487. mypy/typeshed/stdlib/lib2to3/fixes/fix_raw_input.pyi +8 -0
  488. mypy/typeshed/stdlib/lib2to3/fixes/fix_reduce.pyi +8 -0
  489. mypy/typeshed/stdlib/lib2to3/fixes/fix_reload.pyi +9 -0
  490. mypy/typeshed/stdlib/lib2to3/fixes/fix_renames.pyi +17 -0
  491. mypy/typeshed/stdlib/lib2to3/fixes/fix_repr.pyi +8 -0
  492. mypy/typeshed/stdlib/lib2to3/fixes/fix_set_literal.pyi +7 -0
  493. mypy/typeshed/stdlib/lib2to3/fixes/fix_standarderror.pyi +8 -0
  494. mypy/typeshed/stdlib/lib2to3/fixes/fix_sys_exc.pyi +9 -0
  495. mypy/typeshed/stdlib/lib2to3/fixes/fix_throw.pyi +8 -0
  496. mypy/typeshed/stdlib/lib2to3/fixes/fix_tuple_params.pyi +17 -0
  497. mypy/typeshed/stdlib/lib2to3/fixes/fix_types.pyi +8 -0
  498. mypy/typeshed/stdlib/lib2to3/fixes/fix_unicode.pyi +12 -0
  499. mypy/typeshed/stdlib/lib2to3/fixes/fix_urllib.pyi +15 -0
  500. mypy/typeshed/stdlib/lib2to3/fixes/fix_ws_comma.pyi +12 -0
  501. mypy/typeshed/stdlib/lib2to3/fixes/fix_xrange.pyi +20 -0
  502. mypy/typeshed/stdlib/lib2to3/fixes/fix_xreadlines.pyi +8 -0
  503. mypy/typeshed/stdlib/lib2to3/fixes/fix_zip.pyi +9 -0
  504. mypy/typeshed/stdlib/lib2to3/main.pyi +42 -0
  505. mypy/typeshed/stdlib/lib2to3/pgen2/__init__.pyi +9 -0
  506. mypy/typeshed/stdlib/lib2to3/pgen2/driver.pyi +27 -0
  507. mypy/typeshed/stdlib/lib2to3/pgen2/grammar.pyi +24 -0
  508. mypy/typeshed/stdlib/lib2to3/pgen2/literals.pyi +7 -0
  509. mypy/typeshed/stdlib/lib2to3/pgen2/parse.pyi +30 -0
  510. mypy/typeshed/stdlib/lib2to3/pgen2/pgen.pyi +50 -0
  511. mypy/typeshed/stdlib/lib2to3/pgen2/token.pyi +67 -0
  512. mypy/typeshed/stdlib/lib2to3/pgen2/tokenize.pyi +96 -0
  513. mypy/typeshed/stdlib/lib2to3/pygram.pyi +114 -0
  514. mypy/typeshed/stdlib/lib2to3/pytree.pyi +117 -0
  515. mypy/typeshed/stdlib/lib2to3/refactor.pyi +82 -0
  516. mypy/typeshed/stdlib/linecache.pyi +23 -0
  517. mypy/typeshed/stdlib/locale.pyi +152 -0
  518. mypy/typeshed/stdlib/logging/__init__.pyi +655 -0
  519. mypy/typeshed/stdlib/logging/config.pyi +134 -0
  520. mypy/typeshed/stdlib/logging/handlers.pyi +275 -0
  521. mypy/typeshed/stdlib/lzma.pyi +197 -0
  522. mypy/typeshed/stdlib/mailbox.pyi +256 -0
  523. mypy/typeshed/stdlib/mailcap.pyi +11 -0
  524. mypy/typeshed/stdlib/marshal.pyi +33 -0
  525. mypy/typeshed/stdlib/math.pyi +125 -0
  526. mypy/typeshed/stdlib/mimetypes.pyi +46 -0
  527. mypy/typeshed/stdlib/mmap.pyi +113 -0
  528. mypy/typeshed/stdlib/modulefinder.pyi +66 -0
  529. mypy/typeshed/stdlib/msilib/__init__.pyi +176 -0
  530. mypy/typeshed/stdlib/msilib/schema.pyi +94 -0
  531. mypy/typeshed/stdlib/msilib/sequence.pyi +13 -0
  532. mypy/typeshed/stdlib/msilib/text.pyi +7 -0
  533. mypy/typeshed/stdlib/msvcrt.pyi +32 -0
  534. mypy/typeshed/stdlib/multiprocessing/__init__.pyi +90 -0
  535. mypy/typeshed/stdlib/multiprocessing/connection.pyi +75 -0
  536. mypy/typeshed/stdlib/multiprocessing/context.pyi +187 -0
  537. mypy/typeshed/stdlib/multiprocessing/dummy/__init__.pyi +77 -0
  538. mypy/typeshed/stdlib/multiprocessing/dummy/connection.pyi +39 -0
  539. mypy/typeshed/stdlib/multiprocessing/forkserver.pyi +31 -0
  540. mypy/typeshed/stdlib/multiprocessing/heap.pyi +36 -0
  541. mypy/typeshed/stdlib/multiprocessing/managers.pyi +212 -0
  542. mypy/typeshed/stdlib/multiprocessing/pool.pyi +103 -0
  543. mypy/typeshed/stdlib/multiprocessing/popen_fork.pyi +23 -0
  544. mypy/typeshed/stdlib/multiprocessing/popen_forkserver.pyi +16 -0
  545. mypy/typeshed/stdlib/multiprocessing/popen_spawn_posix.pyi +20 -0
  546. mypy/typeshed/stdlib/multiprocessing/popen_spawn_win32.pyi +30 -0
  547. mypy/typeshed/stdlib/multiprocessing/process.pyi +39 -0
  548. mypy/typeshed/stdlib/multiprocessing/queues.pyi +41 -0
  549. mypy/typeshed/stdlib/multiprocessing/reduction.pyi +89 -0
  550. mypy/typeshed/stdlib/multiprocessing/resource_sharer.pyi +20 -0
  551. mypy/typeshed/stdlib/multiprocessing/resource_tracker.pyi +18 -0
  552. mypy/typeshed/stdlib/multiprocessing/shared_memory.pyi +40 -0
  553. mypy/typeshed/stdlib/multiprocessing/sharedctypes.pyi +101 -0
  554. mypy/typeshed/stdlib/multiprocessing/spawn.pyi +32 -0
  555. mypy/typeshed/stdlib/multiprocessing/synchronize.pyi +54 -0
  556. mypy/typeshed/stdlib/multiprocessing/util.pyi +79 -0
  557. mypy/typeshed/stdlib/netrc.pyi +23 -0
  558. mypy/typeshed/stdlib/nis.pyi +9 -0
  559. mypy/typeshed/stdlib/nntplib.pyi +125 -0
  560. mypy/typeshed/stdlib/nt.pyi +111 -0
  561. mypy/typeshed/stdlib/ntpath.pyi +119 -0
  562. mypy/typeshed/stdlib/nturl2path.pyi +2 -0
  563. mypy/typeshed/stdlib/numbers.pyi +154 -0
  564. mypy/typeshed/stdlib/opcode.pyi +59 -0
  565. mypy/typeshed/stdlib/operator.pyi +110 -0
  566. mypy/typeshed/stdlib/optparse.pyi +252 -0
  567. mypy/typeshed/stdlib/os/__init__.pyi +1139 -0
  568. mypy/typeshed/stdlib/os/path.pyi +8 -0
  569. mypy/typeshed/stdlib/ossaudiodev.pyi +131 -0
  570. mypy/typeshed/stdlib/parser.pyi +24 -0
  571. mypy/typeshed/stdlib/pathlib.pyi +232 -0
  572. mypy/typeshed/stdlib/pdb.pyi +181 -0
  573. mypy/typeshed/stdlib/pickle.pyi +270 -0
  574. mypy/typeshed/stdlib/pickletools.pyi +167 -0
  575. mypy/typeshed/stdlib/pipes.pyi +16 -0
  576. mypy/typeshed/stdlib/pkgutil.pyi +53 -0
  577. mypy/typeshed/stdlib/platform.pyi +42 -0
  578. mypy/typeshed/stdlib/plistlib.pyi +113 -0
  579. mypy/typeshed/stdlib/poplib.pyi +71 -0
  580. mypy/typeshed/stdlib/posix.pyi +359 -0
  581. mypy/typeshed/stdlib/posixpath.pyi +161 -0
  582. mypy/typeshed/stdlib/pprint.pyi +112 -0
  583. mypy/typeshed/stdlib/profile.pyi +31 -0
  584. mypy/typeshed/stdlib/pstats.pyi +78 -0
  585. mypy/typeshed/stdlib/pty.pyi +19 -0
  586. mypy/typeshed/stdlib/pwd.pyi +27 -0
  587. mypy/typeshed/stdlib/py_compile.pyi +34 -0
  588. mypy/typeshed/stdlib/pyclbr.pyi +74 -0
  589. mypy/typeshed/stdlib/pydoc.pyi +261 -0
  590. mypy/typeshed/stdlib/pydoc_data/__init__.pyi +0 -0
  591. mypy/typeshed/stdlib/pydoc_data/topics.pyi +1 -0
  592. mypy/typeshed/stdlib/pyexpat/__init__.pyi +80 -0
  593. mypy/typeshed/stdlib/pyexpat/errors.pyi +49 -0
  594. mypy/typeshed/stdlib/pyexpat/model.pyi +11 -0
  595. mypy/typeshed/stdlib/queue.pyi +58 -0
  596. mypy/typeshed/stdlib/quopri.pyi +11 -0
  597. mypy/typeshed/stdlib/random.pyi +138 -0
  598. mypy/typeshed/stdlib/re.pyi +290 -0
  599. mypy/typeshed/stdlib/readline.pyi +36 -0
  600. mypy/typeshed/stdlib/reprlib.pyi +65 -0
  601. mypy/typeshed/stdlib/resource.pyi +92 -0
  602. mypy/typeshed/stdlib/rlcompleter.pyi +9 -0
  603. mypy/typeshed/stdlib/runpy.pyi +24 -0
  604. mypy/typeshed/stdlib/sched.pyi +42 -0
  605. mypy/typeshed/stdlib/secrets.pyi +15 -0
  606. mypy/typeshed/stdlib/select.pyi +151 -0
  607. mypy/typeshed/stdlib/selectors.pyi +67 -0
  608. mypy/typeshed/stdlib/shelve.pyi +46 -0
  609. mypy/typeshed/stdlib/shlex.pyi +43 -0
  610. mypy/typeshed/stdlib/shutil.pyi +189 -0
  611. mypy/typeshed/stdlib/signal.pyi +189 -0
  612. mypy/typeshed/stdlib/site.pyi +27 -0
  613. mypy/typeshed/stdlib/smtpd.pyi +91 -0
  614. mypy/typeshed/stdlib/smtplib.pyi +204 -0
  615. mypy/typeshed/stdlib/sndhdr.pyi +14 -0
  616. mypy/typeshed/stdlib/socket.pyi +825 -0
  617. mypy/typeshed/stdlib/socketserver.pyi +168 -0
  618. mypy/typeshed/stdlib/spwd.pyi +40 -0
  619. mypy/typeshed/stdlib/sqlite3/__init__.pyi +1 -0
  620. mypy/typeshed/stdlib/sqlite3/dbapi2.pyi +469 -0
  621. mypy/typeshed/stdlib/sre_compile.pyi +11 -0
  622. mypy/typeshed/stdlib/sre_constants.pyi +130 -0
  623. mypy/typeshed/stdlib/sre_parse.pyi +104 -0
  624. mypy/typeshed/stdlib/ssl.pyi +529 -0
  625. mypy/typeshed/stdlib/stat.pyi +1 -0
  626. mypy/typeshed/stdlib/statistics.pyi +132 -0
  627. mypy/typeshed/stdlib/string.pyi +83 -0
  628. mypy/typeshed/stdlib/stringprep.pyi +27 -0
  629. mypy/typeshed/stdlib/struct.pyi +26 -0
  630. mypy/typeshed/stdlib/subprocess.pyi +2614 -0
  631. mypy/typeshed/stdlib/sunau.pyi +86 -0
  632. mypy/typeshed/stdlib/symbol.pyi +93 -0
  633. mypy/typeshed/stdlib/symtable.pyi +58 -0
  634. mypy/typeshed/stdlib/sys/__init__.pyi +373 -0
  635. mypy/typeshed/stdlib/sys/_monitoring.pyi +52 -0
  636. mypy/typeshed/stdlib/sysconfig.pyi +43 -0
  637. mypy/typeshed/stdlib/syslog.pyi +46 -0
  638. mypy/typeshed/stdlib/tabnanny.pyi +16 -0
  639. mypy/typeshed/stdlib/tarfile.pyi +438 -0
  640. mypy/typeshed/stdlib/telnetlib.pyi +122 -0
  641. mypy/typeshed/stdlib/tempfile.pyi +477 -0
  642. mypy/typeshed/stdlib/termios.pyi +267 -0
  643. mypy/typeshed/stdlib/textwrap.pyi +103 -0
  644. mypy/typeshed/stdlib/this.pyi +2 -0
  645. mypy/typeshed/stdlib/threading.pyi +187 -0
  646. mypy/typeshed/stdlib/time.pyi +107 -0
  647. mypy/typeshed/stdlib/timeit.pyi +32 -0
  648. mypy/typeshed/stdlib/tkinter/__init__.pyi +3641 -0
  649. mypy/typeshed/stdlib/tkinter/colorchooser.pyi +20 -0
  650. mypy/typeshed/stdlib/tkinter/commondialog.pyi +14 -0
  651. mypy/typeshed/stdlib/tkinter/constants.pyi +80 -0
  652. mypy/typeshed/stdlib/tkinter/dialog.pyi +16 -0
  653. mypy/typeshed/stdlib/tkinter/dnd.pyi +20 -0
  654. mypy/typeshed/stdlib/tkinter/filedialog.pyi +151 -0
  655. mypy/typeshed/stdlib/tkinter/font.pyi +116 -0
  656. mypy/typeshed/stdlib/tkinter/messagebox.pyi +44 -0
  657. mypy/typeshed/stdlib/tkinter/scrolledtext.pyi +10 -0
  658. mypy/typeshed/stdlib/tkinter/simpledialog.pyi +54 -0
  659. mypy/typeshed/stdlib/tkinter/tix.pyi +299 -0
  660. mypy/typeshed/stdlib/tkinter/ttk.pyi +1191 -0
  661. mypy/typeshed/stdlib/token.pyi +159 -0
  662. mypy/typeshed/stdlib/tokenize.pyi +177 -0
  663. mypy/typeshed/stdlib/tomllib.pyi +10 -0
  664. mypy/typeshed/stdlib/trace.pyi +79 -0
  665. mypy/typeshed/stdlib/traceback.pyi +260 -0
  666. mypy/typeshed/stdlib/tracemalloc.pyi +124 -0
  667. mypy/typeshed/stdlib/tty.pyi +30 -0
  668. mypy/typeshed/stdlib/turtle.pyi +713 -0
  669. mypy/typeshed/stdlib/types.pyi +605 -0
  670. mypy/typeshed/stdlib/typing.pyi +968 -0
  671. mypy/typeshed/stdlib/typing_extensions.pyi +503 -0
  672. mypy/typeshed/stdlib/unicodedata.pyi +71 -0
  673. mypy/typeshed/stdlib/unittest/__init__.pyi +67 -0
  674. mypy/typeshed/stdlib/unittest/_log.pyi +27 -0
  675. mypy/typeshed/stdlib/unittest/async_case.pyi +21 -0
  676. mypy/typeshed/stdlib/unittest/case.pyi +342 -0
  677. mypy/typeshed/stdlib/unittest/loader.pyi +51 -0
  678. mypy/typeshed/stdlib/unittest/main.pyi +69 -0
  679. mypy/typeshed/stdlib/unittest/mock.pyi +430 -0
  680. mypy/typeshed/stdlib/unittest/result.pyi +46 -0
  681. mypy/typeshed/stdlib/unittest/runner.pyi +72 -0
  682. mypy/typeshed/stdlib/unittest/signals.pyi +15 -0
  683. mypy/typeshed/stdlib/unittest/suite.pyi +22 -0
  684. mypy/typeshed/stdlib/unittest/util.pyi +23 -0
  685. mypy/typeshed/stdlib/urllib/__init__.pyi +0 -0
  686. mypy/typeshed/stdlib/urllib/error.pyi +23 -0
  687. mypy/typeshed/stdlib/urllib/parse.pyi +210 -0
  688. mypy/typeshed/stdlib/urllib/request.pyi +399 -0
  689. mypy/typeshed/stdlib/urllib/response.pyi +43 -0
  690. mypy/typeshed/stdlib/urllib/robotparser.pyi +20 -0
  691. mypy/typeshed/stdlib/uu.pyi +13 -0
  692. mypy/typeshed/stdlib/uuid.pyi +100 -0
  693. mypy/typeshed/stdlib/venv/__init__.pyi +79 -0
  694. mypy/typeshed/stdlib/warnings.pyi +112 -0
  695. mypy/typeshed/stdlib/wave.pyi +85 -0
  696. mypy/typeshed/stdlib/weakref.pyi +150 -0
  697. mypy/typeshed/stdlib/webbrowser.pyi +74 -0
  698. mypy/typeshed/stdlib/winreg.pyi +103 -0
  699. mypy/typeshed/stdlib/winsound.pyi +28 -0
  700. mypy/typeshed/stdlib/wsgiref/__init__.pyi +0 -0
  701. mypy/typeshed/stdlib/wsgiref/handlers.pyi +91 -0
  702. mypy/typeshed/stdlib/wsgiref/headers.pyi +26 -0
  703. mypy/typeshed/stdlib/wsgiref/simple_server.pyi +37 -0
  704. mypy/typeshed/stdlib/wsgiref/types.pyi +32 -0
  705. mypy/typeshed/stdlib/wsgiref/util.pyi +24 -0
  706. mypy/typeshed/stdlib/wsgiref/validate.pyi +50 -0
  707. mypy/typeshed/stdlib/xdrlib.pyi +57 -0
  708. mypy/typeshed/stdlib/xml/__init__.pyi +1 -0
  709. mypy/typeshed/stdlib/xml/dom/NodeFilter.pyi +19 -0
  710. mypy/typeshed/stdlib/xml/dom/__init__.pyi +69 -0
  711. mypy/typeshed/stdlib/xml/dom/domreg.pyi +8 -0
  712. mypy/typeshed/stdlib/xml/dom/expatbuilder.pyi +100 -0
  713. mypy/typeshed/stdlib/xml/dom/minicompat.pyi +22 -0
  714. mypy/typeshed/stdlib/xml/dom/minidom.pyi +404 -0
  715. mypy/typeshed/stdlib/xml/dom/pulldom.pyi +94 -0
  716. mypy/typeshed/stdlib/xml/dom/xmlbuilder.pyi +108 -0
  717. mypy/typeshed/stdlib/xml/etree/ElementInclude.pyi +28 -0
  718. mypy/typeshed/stdlib/xml/etree/ElementPath.pyi +34 -0
  719. mypy/typeshed/stdlib/xml/etree/ElementTree.pyi +321 -0
  720. mypy/typeshed/stdlib/xml/etree/__init__.pyi +0 -0
  721. mypy/typeshed/stdlib/xml/etree/cElementTree.pyi +1 -0
  722. mypy/typeshed/stdlib/xml/parsers/__init__.pyi +1 -0
  723. mypy/typeshed/stdlib/xml/parsers/expat/__init__.pyi +1 -0
  724. mypy/typeshed/stdlib/xml/parsers/expat/errors.pyi +1 -0
  725. mypy/typeshed/stdlib/xml/parsers/expat/model.pyi +1 -0
  726. mypy/typeshed/stdlib/xml/sax/__init__.pyi +25 -0
  727. mypy/typeshed/stdlib/xml/sax/_exceptions.pyi +19 -0
  728. mypy/typeshed/stdlib/xml/sax/handler.pyi +55 -0
  729. mypy/typeshed/stdlib/xml/sax/saxutils.pyi +60 -0
  730. mypy/typeshed/stdlib/xml/sax/xmlreader.pyi +87 -0
  731. mypy/typeshed/stdlib/xmlrpc/__init__.pyi +0 -0
  732. mypy/typeshed/stdlib/xmlrpc/client.pyi +296 -0
  733. mypy/typeshed/stdlib/xmlrpc/server.pyi +143 -0
  734. mypy/typeshed/stdlib/xxlimited.pyi +22 -0
  735. mypy/typeshed/stdlib/zipapp.pyi +20 -0
  736. mypy/typeshed/stdlib/zipfile/__init__.pyi +306 -0
  737. mypy/typeshed/stdlib/zipfile/_path.pyi +95 -0
  738. mypy/typeshed/stdlib/zipimport.pyi +32 -0
  739. mypy/typeshed/stdlib/zlib.pyi +56 -0
  740. mypy/typeshed/stdlib/zoneinfo/__init__.pyi +38 -0
  741. mypy/typeshed/stubs/mypy-extensions/mypy_extensions.pyi +218 -0
  742. mypy/typestate.py +323 -0
  743. mypy/typetraverser.py +142 -0
  744. mypy/typevars.py +93 -0
  745. mypy/typevartuples.py +32 -0
  746. mypy/util.py +869 -0
  747. mypy/version.py +1 -0
  748. mypy/visitor.py +621 -0
  749. mypy/xml/mypy-html.css +104 -0
  750. mypy/xml/mypy-html.xslt +81 -0
  751. mypy/xml/mypy-txt.xslt +100 -0
  752. mypy/xml/mypy.xsd +50 -0
  753. mypy_dev-1.9.0.dev0.dist-info/LICENSE +229 -0
  754. mypy_dev-1.9.0.dev0.dist-info/METADATA +39 -0
  755. mypy_dev-1.9.0.dev0.dist-info/RECORD +1018 -0
  756. mypy_dev-1.9.0.dev0.dist-info/WHEEL +5 -0
  757. mypy_dev-1.9.0.dev0.dist-info/entry_points.txt +6 -0
  758. mypy_dev-1.9.0.dev0.dist-info/top_level.txt +2 -0
  759. mypyc/README.md +133 -0
  760. mypyc/__init__.py +0 -0
  761. mypyc/__main__.py +57 -0
  762. mypyc/analysis/__init__.py +0 -0
  763. mypyc/analysis/attrdefined.py +436 -0
  764. mypyc/analysis/blockfreq.py +32 -0
  765. mypyc/analysis/dataflow.py +624 -0
  766. mypyc/analysis/ircheck.py +429 -0
  767. mypyc/analysis/selfleaks.py +207 -0
  768. mypyc/build.py +616 -0
  769. mypyc/codegen/__init__.py +0 -0
  770. mypyc/codegen/cstring.py +54 -0
  771. mypyc/codegen/emit.py +1193 -0
  772. mypyc/codegen/emitclass.py +1060 -0
  773. mypyc/codegen/emitfunc.py +846 -0
  774. mypyc/codegen/emitmodule.py +1131 -0
  775. mypyc/codegen/emitwrapper.py +979 -0
  776. mypyc/codegen/literals.py +302 -0
  777. mypyc/common.py +136 -0
  778. mypyc/crash.py +31 -0
  779. mypyc/doc/Makefile +20 -0
  780. mypyc/doc/bool_operations.rst +27 -0
  781. mypyc/doc/compilation_units.rst +20 -0
  782. mypyc/doc/conf.py +59 -0
  783. mypyc/doc/cpython-timings.md +25 -0
  784. mypyc/doc/dev-intro.md +548 -0
  785. mypyc/doc/dict_operations.rst +59 -0
  786. mypyc/doc/differences_from_python.rst +332 -0
  787. mypyc/doc/float_operations.rst +50 -0
  788. mypyc/doc/future.md +42 -0
  789. mypyc/doc/getting_started.rst +240 -0
  790. mypyc/doc/index.rst +61 -0
  791. mypyc/doc/int_operations.rst +162 -0
  792. mypyc/doc/introduction.rst +150 -0
  793. mypyc/doc/list_operations.rst +65 -0
  794. mypyc/doc/make.bat +35 -0
  795. mypyc/doc/native_classes.rst +206 -0
  796. mypyc/doc/native_operations.rst +55 -0
  797. mypyc/doc/performance_tips_and_tricks.rst +244 -0
  798. mypyc/doc/set_operations.rst +47 -0
  799. mypyc/doc/str_operations.rst +35 -0
  800. mypyc/doc/tuple_operations.rst +33 -0
  801. mypyc/doc/using_type_annotations.rst +398 -0
  802. mypyc/errors.py +29 -0
  803. mypyc/external/googletest/LICENSE +28 -0
  804. mypyc/external/googletest/README.md +280 -0
  805. mypyc/external/googletest/include/gtest/gtest-death-test.h +294 -0
  806. mypyc/external/googletest/include/gtest/gtest-message.h +250 -0
  807. mypyc/external/googletest/include/gtest/gtest-param-test.h +1444 -0
  808. mypyc/external/googletest/include/gtest/gtest-param-test.h.pump +510 -0
  809. mypyc/external/googletest/include/gtest/gtest-printers.h +993 -0
  810. mypyc/external/googletest/include/gtest/gtest-spi.h +232 -0
  811. mypyc/external/googletest/include/gtest/gtest-test-part.h +179 -0
  812. mypyc/external/googletest/include/gtest/gtest-typed-test.h +263 -0
  813. mypyc/external/googletest/include/gtest/gtest.h +2236 -0
  814. mypyc/external/googletest/include/gtest/gtest_pred_impl.h +358 -0
  815. mypyc/external/googletest/include/gtest/gtest_prod.h +58 -0
  816. mypyc/external/googletest/include/gtest/internal/custom/gtest-port.h +69 -0
  817. mypyc/external/googletest/include/gtest/internal/custom/gtest-printers.h +42 -0
  818. mypyc/external/googletest/include/gtest/internal/custom/gtest.h +41 -0
  819. mypyc/external/googletest/include/gtest/internal/gtest-death-test-internal.h +319 -0
  820. mypyc/external/googletest/include/gtest/internal/gtest-filepath.h +206 -0
  821. mypyc/external/googletest/include/gtest/internal/gtest-internal.h +1238 -0
  822. mypyc/external/googletest/include/gtest/internal/gtest-linked_ptr.h +243 -0
  823. mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h +5146 -0
  824. mypyc/external/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +286 -0
  825. mypyc/external/googletest/include/gtest/internal/gtest-param-util.h +731 -0
  826. mypyc/external/googletest/include/gtest/internal/gtest-port-arch.h +93 -0
  827. mypyc/external/googletest/include/gtest/internal/gtest-port.h +2560 -0
  828. mypyc/external/googletest/include/gtest/internal/gtest-string.h +167 -0
  829. mypyc/external/googletest/include/gtest/internal/gtest-tuple.h +1020 -0
  830. mypyc/external/googletest/include/gtest/internal/gtest-tuple.h.pump +347 -0
  831. mypyc/external/googletest/include/gtest/internal/gtest-type-util.h +3331 -0
  832. mypyc/external/googletest/include/gtest/internal/gtest-type-util.h.pump +297 -0
  833. mypyc/external/googletest/make/Makefile +61 -0
  834. mypyc/external/googletest/src/gtest-all.cc +48 -0
  835. mypyc/external/googletest/src/gtest-death-test.cc +1342 -0
  836. mypyc/external/googletest/src/gtest-filepath.cc +387 -0
  837. mypyc/external/googletest/src/gtest-internal-inl.h +1183 -0
  838. mypyc/external/googletest/src/gtest-port.cc +1259 -0
  839. mypyc/external/googletest/src/gtest-printers.cc +373 -0
  840. mypyc/external/googletest/src/gtest-test-part.cc +110 -0
  841. mypyc/external/googletest/src/gtest-typed-test.cc +118 -0
  842. mypyc/external/googletest/src/gtest.cc +5388 -0
  843. mypyc/external/googletest/src/gtest_main.cc +38 -0
  844. mypyc/ir/__init__.py +0 -0
  845. mypyc/ir/class_ir.py +499 -0
  846. mypyc/ir/func_ir.py +370 -0
  847. mypyc/ir/module_ir.py +88 -0
  848. mypyc/ir/ops.py +1642 -0
  849. mypyc/ir/pprint.py +496 -0
  850. mypyc/ir/rtypes.py +1038 -0
  851. mypyc/irbuild/__init__.py +0 -0
  852. mypyc/irbuild/ast_helpers.py +120 -0
  853. mypyc/irbuild/builder.py +1398 -0
  854. mypyc/irbuild/callable_class.py +173 -0
  855. mypyc/irbuild/classdef.py +850 -0
  856. mypyc/irbuild/constant_fold.py +95 -0
  857. mypyc/irbuild/context.py +186 -0
  858. mypyc/irbuild/env_class.py +223 -0
  859. mypyc/irbuild/expression.py +1067 -0
  860. mypyc/irbuild/for_helpers.py +1046 -0
  861. mypyc/irbuild/format_str_tokenizer.py +250 -0
  862. mypyc/irbuild/function.py +1089 -0
  863. mypyc/irbuild/generator.py +346 -0
  864. mypyc/irbuild/ll_builder.py +2407 -0
  865. mypyc/irbuild/main.py +153 -0
  866. mypyc/irbuild/mapper.py +221 -0
  867. mypyc/irbuild/match.py +355 -0
  868. mypyc/irbuild/nonlocalcontrol.py +197 -0
  869. mypyc/irbuild/prebuildvisitor.py +203 -0
  870. mypyc/irbuild/prepare.py +609 -0
  871. mypyc/irbuild/specialize.py +822 -0
  872. mypyc/irbuild/statement.py +1017 -0
  873. mypyc/irbuild/targets.py +57 -0
  874. mypyc/irbuild/util.py +189 -0
  875. mypyc/irbuild/visitor.py +401 -0
  876. mypyc/irbuild/vtable.py +82 -0
  877. mypyc/lib-rt/CPy.h +643 -0
  878. mypyc/lib-rt/bytes_ops.c +143 -0
  879. mypyc/lib-rt/dict_ops.c +446 -0
  880. mypyc/lib-rt/exc_ops.c +259 -0
  881. mypyc/lib-rt/float_ops.c +192 -0
  882. mypyc/lib-rt/generic_ops.c +64 -0
  883. mypyc/lib-rt/getargs.c +450 -0
  884. mypyc/lib-rt/getargsfast.c +569 -0
  885. mypyc/lib-rt/init.c +13 -0
  886. mypyc/lib-rt/int_ops.c +803 -0
  887. mypyc/lib-rt/list_ops.c +335 -0
  888. mypyc/lib-rt/misc_ops.c +942 -0
  889. mypyc/lib-rt/module_shim.tmpl +18 -0
  890. mypyc/lib-rt/mypyc_util.h +118 -0
  891. mypyc/lib-rt/pythoncapi_compat.h +497 -0
  892. mypyc/lib-rt/pythonsupport.h +548 -0
  893. mypyc/lib-rt/set_ops.c +17 -0
  894. mypyc/lib-rt/setup.py +70 -0
  895. mypyc/lib-rt/str_ops.c +241 -0
  896. mypyc/lib-rt/test_capi.cc +585 -0
  897. mypyc/lib-rt/tuple_ops.c +61 -0
  898. mypyc/namegen.py +115 -0
  899. mypyc/options.py +32 -0
  900. mypyc/primitives/__init__.py +0 -0
  901. mypyc/primitives/bytes_ops.py +101 -0
  902. mypyc/primitives/dict_ops.py +325 -0
  903. mypyc/primitives/exc_ops.py +101 -0
  904. mypyc/primitives/float_ops.py +168 -0
  905. mypyc/primitives/generic_ops.py +384 -0
  906. mypyc/primitives/int_ops.py +304 -0
  907. mypyc/primitives/list_ops.py +300 -0
  908. mypyc/primitives/misc_ops.py +241 -0
  909. mypyc/primitives/registry.py +323 -0
  910. mypyc/primitives/set_ops.py +121 -0
  911. mypyc/primitives/str_ops.py +229 -0
  912. mypyc/primitives/tuple_ops.py +83 -0
  913. mypyc/rt_subtype.py +77 -0
  914. mypyc/sametype.py +83 -0
  915. mypyc/subtype.py +88 -0
  916. mypyc/test/__init__.py +0 -0
  917. mypyc/test/config.py +13 -0
  918. mypyc/test/test_alwaysdefined.py +46 -0
  919. mypyc/test/test_analysis.py +77 -0
  920. mypyc/test/test_cheader.py +45 -0
  921. mypyc/test/test_commandline.py +82 -0
  922. mypyc/test/test_emit.py +69 -0
  923. mypyc/test/test_emitclass.py +35 -0
  924. mypyc/test/test_emitfunc.py +926 -0
  925. mypyc/test/test_emitwrapper.py +60 -0
  926. mypyc/test/test_exceptions.py +56 -0
  927. mypyc/test/test_external.py +49 -0
  928. mypyc/test/test_irbuild.py +87 -0
  929. mypyc/test/test_ircheck.py +199 -0
  930. mypyc/test/test_literals.py +90 -0
  931. mypyc/test/test_namegen.py +48 -0
  932. mypyc/test/test_pprint.py +42 -0
  933. mypyc/test/test_rarray.py +48 -0
  934. mypyc/test/test_refcount.py +59 -0
  935. mypyc/test/test_run.py +426 -0
  936. mypyc/test/test_serialization.py +108 -0
  937. mypyc/test/test_struct.py +112 -0
  938. mypyc/test/test_tuplename.py +33 -0
  939. mypyc/test/test_typeops.py +97 -0
  940. mypyc/test/testutil.py +283 -0
  941. mypyc/test-data/alwaysdefined.test +732 -0
  942. mypyc/test-data/analysis.test +603 -0
  943. mypyc/test-data/commandline.test +245 -0
  944. mypyc/test-data/driver/driver.py +48 -0
  945. mypyc/test-data/exceptions-freq.test +125 -0
  946. mypyc/test-data/exceptions.test +713 -0
  947. mypyc/test-data/fixtures/ir.py +373 -0
  948. mypyc/test-data/fixtures/testutil.py +103 -0
  949. mypyc/test-data/fixtures/typing-full.pyi +169 -0
  950. mypyc/test-data/irbuild-any.test +238 -0
  951. mypyc/test-data/irbuild-basic.test +3690 -0
  952. mypyc/test-data/irbuild-bool.test +463 -0
  953. mypyc/test-data/irbuild-bytes.test +184 -0
  954. mypyc/test-data/irbuild-classes.test +1303 -0
  955. mypyc/test-data/irbuild-constant-fold.test +480 -0
  956. mypyc/test-data/irbuild-dict.test +585 -0
  957. mypyc/test-data/irbuild-dunders.test +223 -0
  958. mypyc/test-data/irbuild-float.test +497 -0
  959. mypyc/test-data/irbuild-generics.test +151 -0
  960. mypyc/test-data/irbuild-glue-methods.test +437 -0
  961. mypyc/test-data/irbuild-i16.test +526 -0
  962. mypyc/test-data/irbuild-i32.test +598 -0
  963. mypyc/test-data/irbuild-i64.test +2164 -0
  964. mypyc/test-data/irbuild-int.test +235 -0
  965. mypyc/test-data/irbuild-isinstance.test +109 -0
  966. mypyc/test-data/irbuild-lists.test +547 -0
  967. mypyc/test-data/irbuild-match.test +1708 -0
  968. mypyc/test-data/irbuild-math.test +64 -0
  969. mypyc/test-data/irbuild-nested.test +807 -0
  970. mypyc/test-data/irbuild-optional.test +536 -0
  971. mypyc/test-data/irbuild-set.test +838 -0
  972. mypyc/test-data/irbuild-singledispatch.test +257 -0
  973. mypyc/test-data/irbuild-statements.test +1149 -0
  974. mypyc/test-data/irbuild-str.test +314 -0
  975. mypyc/test-data/irbuild-strip-asserts.test +12 -0
  976. mypyc/test-data/irbuild-try.test +523 -0
  977. mypyc/test-data/irbuild-tuple.test +462 -0
  978. mypyc/test-data/irbuild-u8.test +543 -0
  979. mypyc/test-data/irbuild-unreachable.test +241 -0
  980. mypyc/test-data/irbuild-vectorcall.test +153 -0
  981. mypyc/test-data/refcount.test +1588 -0
  982. mypyc/test-data/run-async.test +145 -0
  983. mypyc/test-data/run-attrs.test +318 -0
  984. mypyc/test-data/run-bench.test +196 -0
  985. mypyc/test-data/run-bools.test +229 -0
  986. mypyc/test-data/run-bytes.test +302 -0
  987. mypyc/test-data/run-classes.test +2505 -0
  988. mypyc/test-data/run-dicts.test +334 -0
  989. mypyc/test-data/run-dunders.test +945 -0
  990. mypyc/test-data/run-exceptions.test +448 -0
  991. mypyc/test-data/run-floats.test +516 -0
  992. mypyc/test-data/run-functions.test +1310 -0
  993. mypyc/test-data/run-generators.test +681 -0
  994. mypyc/test-data/run-i16.test +338 -0
  995. mypyc/test-data/run-i32.test +336 -0
  996. mypyc/test-data/run-i64.test +1519 -0
  997. mypyc/test-data/run-imports.test +265 -0
  998. mypyc/test-data/run-integers.test +540 -0
  999. mypyc/test-data/run-lists.test +411 -0
  1000. mypyc/test-data/run-loops.test +485 -0
  1001. mypyc/test-data/run-match.test +283 -0
  1002. mypyc/test-data/run-math.test +106 -0
  1003. mypyc/test-data/run-misc.test +1168 -0
  1004. mypyc/test-data/run-multimodule.test +887 -0
  1005. mypyc/test-data/run-mypy-sim.test +138 -0
  1006. mypyc/test-data/run-primitives.test +375 -0
  1007. mypyc/test-data/run-python37.test +159 -0
  1008. mypyc/test-data/run-python38.test +88 -0
  1009. mypyc/test-data/run-sets.test +150 -0
  1010. mypyc/test-data/run-singledispatch.test +698 -0
  1011. mypyc/test-data/run-strings.test +641 -0
  1012. mypyc/test-data/run-traits.test +411 -0
  1013. mypyc/test-data/run-tuples.test +258 -0
  1014. mypyc/test-data/run-u8.test +303 -0
  1015. mypyc/transform/__init__.py +0 -0
  1016. mypyc/transform/exceptions.py +182 -0
  1017. mypyc/transform/refcount.py +294 -0
  1018. mypyc/transform/uninit.py +190 -0
mypy/typeops.py ADDED
@@ -0,0 +1,1082 @@
1
+ """Miscellaneous type operations and helpers for use during type checking.
2
+
3
+ NOTE: These must not be accessed from mypy.nodes or mypy.types to avoid import
4
+ cycles. These must not be called from the semantic analysis main pass
5
+ since these may assume that MROs are ready.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import itertools
11
+ from typing import Any, Iterable, List, Sequence, TypeVar, cast
12
+
13
+ from mypy.copytype import copy_type
14
+ from mypy.expandtype import expand_type, expand_type_by_instance
15
+ from mypy.maptype import map_instance_to_supertype
16
+ from mypy.nodes import (
17
+ ARG_POS,
18
+ ARG_STAR,
19
+ ARG_STAR2,
20
+ SYMBOL_FUNCBASE_TYPES,
21
+ Decorator,
22
+ Expression,
23
+ FuncBase,
24
+ FuncDef,
25
+ FuncItem,
26
+ OverloadedFuncDef,
27
+ StrExpr,
28
+ TypeInfo,
29
+ Var,
30
+ )
31
+ from mypy.state import state
32
+ from mypy.types import (
33
+ ENUM_REMOVED_PROPS,
34
+ AnyType,
35
+ CallableType,
36
+ ExtraAttrs,
37
+ FormalArgument,
38
+ FunctionLike,
39
+ Instance,
40
+ LiteralType,
41
+ NoneType,
42
+ NormalizedCallableType,
43
+ Overloaded,
44
+ Parameters,
45
+ ParamSpecType,
46
+ PartialType,
47
+ ProperType,
48
+ TupleType,
49
+ Type,
50
+ TypeAliasType,
51
+ TypedDictType,
52
+ TypeOfAny,
53
+ TypeQuery,
54
+ TypeType,
55
+ TypeVarLikeType,
56
+ TypeVarTupleType,
57
+ TypeVarType,
58
+ UninhabitedType,
59
+ UnionType,
60
+ UnpackType,
61
+ flatten_nested_unions,
62
+ get_proper_type,
63
+ get_proper_types,
64
+ )
65
+ from mypy.typevars import fill_typevars
66
+
67
+
68
+ def is_recursive_pair(s: Type, t: Type) -> bool:
69
+ """Is this a pair of recursive types?
70
+
71
+ There may be more cases, and we may be forced to use e.g. has_recursive_types()
72
+ here, but this function is called in very hot code, so we try to keep it simple
73
+ and return True only in cases we know may have problems.
74
+ """
75
+ if isinstance(s, TypeAliasType) and s.is_recursive:
76
+ return (
77
+ isinstance(get_proper_type(t), (Instance, UnionType))
78
+ or isinstance(t, TypeAliasType)
79
+ and t.is_recursive
80
+ # Tuple types are special, they can cause an infinite recursion even if
81
+ # the other type is not recursive, because of the tuple fallback that is
82
+ # calculated "on the fly".
83
+ or isinstance(get_proper_type(s), TupleType)
84
+ )
85
+ if isinstance(t, TypeAliasType) and t.is_recursive:
86
+ return (
87
+ isinstance(get_proper_type(s), (Instance, UnionType))
88
+ or isinstance(s, TypeAliasType)
89
+ and s.is_recursive
90
+ # Same as above.
91
+ or isinstance(get_proper_type(t), TupleType)
92
+ )
93
+ return False
94
+
95
+
96
+ def tuple_fallback(typ: TupleType) -> Instance:
97
+ """Return fallback type for a tuple."""
98
+ from mypy.join import join_type_list
99
+
100
+ info = typ.partial_fallback.type
101
+ if info.fullname != "builtins.tuple":
102
+ return typ.partial_fallback
103
+ items = []
104
+ for item in typ.items:
105
+ if isinstance(item, UnpackType):
106
+ unpacked_type = get_proper_type(item.type)
107
+ if isinstance(unpacked_type, TypeVarTupleType):
108
+ unpacked_type = get_proper_type(unpacked_type.upper_bound)
109
+ if (
110
+ isinstance(unpacked_type, Instance)
111
+ and unpacked_type.type.fullname == "builtins.tuple"
112
+ ):
113
+ items.append(unpacked_type.args[0])
114
+ else:
115
+ raise NotImplementedError
116
+ else:
117
+ items.append(item)
118
+ # TODO: we should really use a union here, tuple types are special.
119
+ return Instance(info, [join_type_list(items)], extra_attrs=typ.partial_fallback.extra_attrs)
120
+
121
+
122
+ def get_self_type(func: CallableType, default_self: Instance | TupleType) -> Type | None:
123
+ if isinstance(get_proper_type(func.ret_type), UninhabitedType):
124
+ return func.ret_type
125
+ elif func.arg_types and func.arg_types[0] != default_self and func.arg_kinds[0] == ARG_POS:
126
+ return func.arg_types[0]
127
+ else:
128
+ return None
129
+
130
+
131
+ def type_object_type_from_function(
132
+ signature: FunctionLike, info: TypeInfo, def_info: TypeInfo, fallback: Instance, is_new: bool
133
+ ) -> FunctionLike:
134
+ # We first need to record all non-trivial (explicit) self types in __init__,
135
+ # since they will not be available after we bind them. Note, we use explicit
136
+ # self-types only in the defining class, similar to __new__ (but not exactly the same,
137
+ # see comment in class_callable below). This is mostly useful for annotating library
138
+ # classes such as subprocess.Popen.
139
+ default_self = fill_typevars(info)
140
+ if not is_new and not info.is_newtype:
141
+ orig_self_types = [get_self_type(it, default_self) for it in signature.items]
142
+ else:
143
+ orig_self_types = [None] * len(signature.items)
144
+
145
+ # The __init__ method might come from a generic superclass 'def_info'
146
+ # with type variables that do not map identically to the type variables of
147
+ # the class 'info' being constructed. For example:
148
+ #
149
+ # class A(Generic[T]):
150
+ # def __init__(self, x: T) -> None: ...
151
+ # class B(A[List[T]]):
152
+ # ...
153
+ #
154
+ # We need to map B's __init__ to the type (List[T]) -> None.
155
+ signature = bind_self(signature, original_type=default_self, is_classmethod=is_new)
156
+ signature = cast(FunctionLike, map_type_from_supertype(signature, info, def_info))
157
+
158
+ special_sig: str | None = None
159
+ if def_info.fullname == "builtins.dict":
160
+ # Special signature!
161
+ special_sig = "dict"
162
+
163
+ if isinstance(signature, CallableType):
164
+ return class_callable(signature, info, fallback, special_sig, is_new, orig_self_types[0])
165
+ else:
166
+ # Overloaded __init__/__new__.
167
+ assert isinstance(signature, Overloaded)
168
+ items: list[CallableType] = []
169
+ for item, orig_self in zip(signature.items, orig_self_types):
170
+ items.append(class_callable(item, info, fallback, special_sig, is_new, orig_self))
171
+ return Overloaded(items)
172
+
173
+
174
+ def class_callable(
175
+ init_type: CallableType,
176
+ info: TypeInfo,
177
+ type_type: Instance,
178
+ special_sig: str | None,
179
+ is_new: bool,
180
+ orig_self_type: Type | None = None,
181
+ ) -> CallableType:
182
+ """Create a type object type based on the signature of __init__."""
183
+ variables: list[TypeVarLikeType] = []
184
+ variables.extend(info.defn.type_vars)
185
+ variables.extend(init_type.variables)
186
+
187
+ from mypy.subtypes import is_subtype
188
+
189
+ init_ret_type = get_proper_type(init_type.ret_type)
190
+ orig_self_type = get_proper_type(orig_self_type)
191
+ default_ret_type = fill_typevars(info)
192
+ explicit_type = init_ret_type if is_new else orig_self_type
193
+ if (
194
+ isinstance(explicit_type, (Instance, TupleType, UninhabitedType))
195
+ # We have to skip protocols, because it can be a subtype of a return type
196
+ # by accident. Like `Hashable` is a subtype of `object`. See #11799
197
+ and isinstance(default_ret_type, Instance)
198
+ and not default_ret_type.type.is_protocol
199
+ # Only use the declared return type from __new__ or declared self in __init__
200
+ # if it is actually returning a subtype of what we would return otherwise.
201
+ and is_subtype(explicit_type, default_ret_type, ignore_type_params=True)
202
+ ):
203
+ ret_type: Type = explicit_type
204
+ else:
205
+ ret_type = default_ret_type
206
+
207
+ callable_type = init_type.copy_modified(
208
+ ret_type=ret_type,
209
+ fallback=type_type,
210
+ name=None,
211
+ variables=variables,
212
+ special_sig=special_sig,
213
+ )
214
+ c = callable_type.with_name(info.name)
215
+ return c
216
+
217
+
218
+ def map_type_from_supertype(typ: Type, sub_info: TypeInfo, super_info: TypeInfo) -> Type:
219
+ """Map type variables in a type defined in a supertype context to be valid
220
+ in the subtype context. Assume that the result is unique; if more than
221
+ one type is possible, return one of the alternatives.
222
+
223
+ For example, assume
224
+
225
+ class D(Generic[S]): ...
226
+ class C(D[E[T]], Generic[T]): ...
227
+
228
+ Now S in the context of D would be mapped to E[T] in the context of C.
229
+ """
230
+ # Create the type of self in subtype, of form t[a1, ...].
231
+ inst_type = fill_typevars(sub_info)
232
+ if isinstance(inst_type, TupleType):
233
+ inst_type = tuple_fallback(inst_type)
234
+ # Map the type of self to supertype. This gets us a description of the
235
+ # supertype type variables in terms of subtype variables, i.e. t[t1, ...]
236
+ # so that any type variables in tN are to be interpreted in subtype
237
+ # context.
238
+ inst_type = map_instance_to_supertype(inst_type, super_info)
239
+ # Finally expand the type variables in type with those in the previously
240
+ # constructed type. Note that both type and inst_type may have type
241
+ # variables, but in type they are interpreted in supertype context while
242
+ # in inst_type they are interpreted in subtype context. This works even if
243
+ # the names of type variables in supertype and subtype overlap.
244
+ return expand_type_by_instance(typ, inst_type)
245
+
246
+
247
+ def supported_self_type(typ: ProperType, allow_callable: bool = True) -> bool:
248
+ """Is this a supported kind of explicit self-types?
249
+
250
+ Currently, this means an X or Type[X], where X is an instance or
251
+ a type variable with an instance upper bound.
252
+ """
253
+ if isinstance(typ, TypeType):
254
+ return supported_self_type(typ.item)
255
+ if allow_callable and isinstance(typ, CallableType):
256
+ # Special case: allow class callable instead of Type[...] as cls annotation,
257
+ # as well as callable self for callback protocols.
258
+ return True
259
+ return isinstance(typ, TypeVarType) or (
260
+ isinstance(typ, Instance) and typ != fill_typevars(typ.type)
261
+ )
262
+
263
+
264
+ F = TypeVar("F", bound=FunctionLike)
265
+
266
+
267
+ def bind_self(method: F, original_type: Type | None = None, is_classmethod: bool = False) -> F:
268
+ """Return a copy of `method`, with the type of its first parameter (usually
269
+ self or cls) bound to original_type.
270
+
271
+ If the type of `self` is a generic type (T, or Type[T] for classmethods),
272
+ instantiate every occurrence of type with original_type in the rest of the
273
+ signature and in the return type.
274
+
275
+ original_type is the type of E in the expression E.copy(). It is None in
276
+ compatibility checks. In this case we treat it as the erasure of the
277
+ declared type of self.
278
+
279
+ This way we can express "the type of self". For example:
280
+
281
+ T = TypeVar('T', bound='A')
282
+ class A:
283
+ def copy(self: T) -> T: ...
284
+
285
+ class B(A): pass
286
+
287
+ b = B().copy() # type: B
288
+
289
+ """
290
+ if isinstance(method, Overloaded):
291
+ return cast(
292
+ F, Overloaded([bind_self(c, original_type, is_classmethod) for c in method.items])
293
+ )
294
+ assert isinstance(method, CallableType)
295
+ func = method
296
+ if not func.arg_types:
297
+ # Invalid method, return something.
298
+ return cast(F, func)
299
+ if func.arg_kinds[0] == ARG_STAR:
300
+ # The signature is of the form 'def foo(*args, ...)'.
301
+ # In this case we shouldn't drop the first arg,
302
+ # since func will be absorbed by the *args.
303
+
304
+ # TODO: infer bounds on the type of *args?
305
+ return cast(F, func)
306
+ self_param_type = get_proper_type(func.arg_types[0])
307
+
308
+ variables: Sequence[TypeVarLikeType]
309
+ # Having a def __call__(self: Callable[...], ...) can cause infinite recursion. Although
310
+ # this special-casing looks not very principled, there is nothing meaningful we can infer
311
+ # from such definition, since it is inherently indefinitely recursive.
312
+ allow_callable = func.name is None or not func.name.startswith("__call__ of")
313
+ if func.variables and supported_self_type(self_param_type, allow_callable=allow_callable):
314
+ from mypy.infer import infer_type_arguments
315
+
316
+ if original_type is None:
317
+ # TODO: type check method override (see #7861).
318
+ original_type = erase_to_bound(self_param_type)
319
+ original_type = get_proper_type(original_type)
320
+
321
+ # Find which of method type variables appear in the type of "self".
322
+ self_ids = {tv.id for tv in get_all_type_vars(self_param_type)}
323
+ self_vars = [tv for tv in func.variables if tv.id in self_ids]
324
+
325
+ # Solve for these type arguments using the actual class or instance type.
326
+ typeargs = infer_type_arguments(
327
+ self_vars, self_param_type, original_type, is_supertype=True
328
+ )
329
+ if (
330
+ is_classmethod
331
+ and any(isinstance(get_proper_type(t), UninhabitedType) for t in typeargs)
332
+ and isinstance(original_type, (Instance, TypeVarType, TupleType))
333
+ ):
334
+ # In case we call a classmethod through an instance x, fallback to type(x).
335
+ typeargs = infer_type_arguments(
336
+ self_vars, self_param_type, TypeType(original_type), is_supertype=True
337
+ )
338
+
339
+ # Update the method signature with the solutions found.
340
+ # Technically, some constraints might be unsolvable, make them Never.
341
+ to_apply = [t if t is not None else UninhabitedType() for t in typeargs]
342
+ func = expand_type(func, {tv.id: arg for tv, arg in zip(self_vars, to_apply)})
343
+ variables = [v for v in func.variables if v not in self_vars]
344
+ else:
345
+ variables = func.variables
346
+
347
+ original_type = get_proper_type(original_type)
348
+ if isinstance(original_type, CallableType) and original_type.is_type_obj():
349
+ original_type = TypeType.make_normalized(original_type.ret_type)
350
+ res = func.copy_modified(
351
+ arg_types=func.arg_types[1:],
352
+ arg_kinds=func.arg_kinds[1:],
353
+ arg_names=func.arg_names[1:],
354
+ variables=variables,
355
+ bound_args=[original_type],
356
+ )
357
+ return cast(F, res)
358
+
359
+
360
+ def erase_to_bound(t: Type) -> Type:
361
+ # TODO: use value restrictions to produce a union?
362
+ t = get_proper_type(t)
363
+ if isinstance(t, TypeVarType):
364
+ return t.upper_bound
365
+ if isinstance(t, TypeType):
366
+ if isinstance(t.item, TypeVarType):
367
+ return TypeType.make_normalized(t.item.upper_bound)
368
+ return t
369
+
370
+
371
+ def callable_corresponding_argument(
372
+ typ: NormalizedCallableType | Parameters, model: FormalArgument
373
+ ) -> FormalArgument | None:
374
+ """Return the argument a function that corresponds to `model`"""
375
+
376
+ by_name = typ.argument_by_name(model.name)
377
+ by_pos = typ.argument_by_position(model.pos)
378
+ if by_name is None and by_pos is None:
379
+ return None
380
+ if by_name is not None and by_pos is not None:
381
+ if by_name == by_pos:
382
+ return by_name
383
+ # If we're dealing with an optional pos-only and an optional
384
+ # name-only arg, merge them. This is the case for all functions
385
+ # taking both *args and **args, or a pair of functions like so:
386
+
387
+ # def right(a: int = ...) -> None: ...
388
+ # def left(__a: int = ..., *, a: int = ...) -> None: ...
389
+ from mypy.subtypes import is_equivalent
390
+
391
+ if (
392
+ not (by_name.required or by_pos.required)
393
+ and by_pos.name is None
394
+ and by_name.pos is None
395
+ and is_equivalent(by_name.typ, by_pos.typ)
396
+ ):
397
+ return FormalArgument(by_name.name, by_pos.pos, by_name.typ, False)
398
+ return by_name if by_name is not None else by_pos
399
+
400
+
401
+ def simple_literal_type(t: ProperType | None) -> Instance | None:
402
+ """Extract the underlying fallback Instance type for a simple Literal"""
403
+ if isinstance(t, Instance) and t.last_known_value is not None:
404
+ t = t.last_known_value
405
+ if isinstance(t, LiteralType):
406
+ return t.fallback
407
+ return None
408
+
409
+
410
+ def is_simple_literal(t: ProperType) -> bool:
411
+ if isinstance(t, LiteralType):
412
+ return t.fallback.type.is_enum or t.fallback.type.fullname == "builtins.str"
413
+ if isinstance(t, Instance):
414
+ return t.last_known_value is not None and isinstance(t.last_known_value.value, str)
415
+ return False
416
+
417
+
418
+ def make_simplified_union(
419
+ items: Sequence[Type],
420
+ line: int = -1,
421
+ column: int = -1,
422
+ *,
423
+ keep_erased: bool = False,
424
+ contract_literals: bool = True,
425
+ ) -> ProperType:
426
+ """Build union type with redundant union items removed.
427
+
428
+ If only a single item remains, this may return a non-union type.
429
+
430
+ Examples:
431
+
432
+ * [int, str] -> Union[int, str]
433
+ * [int, object] -> object
434
+ * [int, int] -> int
435
+ * [int, Any] -> Union[int, Any] (Any types are not simplified away!)
436
+ * [Any, Any] -> Any
437
+ * [int, Union[bytes, str]] -> Union[int, bytes, str]
438
+
439
+ Note: This must NOT be used during semantic analysis, since TypeInfos may not
440
+ be fully initialized.
441
+
442
+ The keep_erased flag is used for type inference against union types
443
+ containing type variables. If set to True, keep all ErasedType items.
444
+
445
+ The contract_literals flag indicates whether we need to contract literal types
446
+ back into a sum type. Set it to False when called by try_expanding_sum_type_
447
+ to_union().
448
+ """
449
+ # Step 1: expand all nested unions
450
+ items = flatten_nested_unions(items)
451
+
452
+ # Step 2: fast path for single item
453
+ if len(items) == 1:
454
+ return get_proper_type(items[0])
455
+
456
+ # Step 3: remove redundant unions
457
+ simplified_set: Sequence[Type] = _remove_redundant_union_items(items, keep_erased)
458
+
459
+ # Step 4: If more than one literal exists in the union, try to simplify
460
+ if (
461
+ contract_literals
462
+ and sum(isinstance(get_proper_type(item), LiteralType) for item in simplified_set) > 1
463
+ ):
464
+ simplified_set = try_contracting_literals_in_union(simplified_set)
465
+
466
+ result = get_proper_type(UnionType.make_union(simplified_set, line, column))
467
+
468
+ nitems = len(items)
469
+ if nitems > 1 and (
470
+ nitems > 2 or not (type(items[0]) is NoneType or type(items[1]) is NoneType)
471
+ ):
472
+ # Step 5: At last, we erase any (inconsistent) extra attributes on instances.
473
+
474
+ # Initialize with None instead of an empty set as a micro-optimization. The set
475
+ # is needed very rarely, so we try to avoid constructing it.
476
+ extra_attrs_set: set[ExtraAttrs] | None = None
477
+ for item in items:
478
+ instance = try_getting_instance_fallback(item)
479
+ if instance and instance.extra_attrs:
480
+ if extra_attrs_set is None:
481
+ extra_attrs_set = {instance.extra_attrs}
482
+ else:
483
+ extra_attrs_set.add(instance.extra_attrs)
484
+
485
+ if extra_attrs_set is not None and len(extra_attrs_set) > 1:
486
+ fallback = try_getting_instance_fallback(result)
487
+ if fallback:
488
+ fallback.extra_attrs = None
489
+
490
+ return result
491
+
492
+
493
+ def _remove_redundant_union_items(items: list[Type], keep_erased: bool) -> list[Type]:
494
+ from mypy.subtypes import is_proper_subtype
495
+
496
+ # The first pass through this loop, we check if later items are subtypes of earlier items.
497
+ # The second pass through this loop, we check if earlier items are subtypes of later items
498
+ # (by reversing the remaining items)
499
+ for _direction in range(2):
500
+ new_items: list[Type] = []
501
+ # seen is a map from a type to its index in new_items
502
+ seen: dict[ProperType, int] = {}
503
+ unduplicated_literal_fallbacks: set[Instance] | None = None
504
+ for ti in items:
505
+ proper_ti = get_proper_type(ti)
506
+
507
+ # UninhabitedType is always redundant
508
+ if isinstance(proper_ti, UninhabitedType):
509
+ continue
510
+
511
+ duplicate_index = -1
512
+ # Quickly check if we've seen this type
513
+ if proper_ti in seen:
514
+ duplicate_index = seen[proper_ti]
515
+ elif (
516
+ isinstance(proper_ti, LiteralType)
517
+ and unduplicated_literal_fallbacks is not None
518
+ and proper_ti.fallback in unduplicated_literal_fallbacks
519
+ ):
520
+ # This is an optimisation for unions with many LiteralType
521
+ # We've already checked for exact duplicates. This means that any super type of
522
+ # the LiteralType must be a super type of its fallback. If we've gone through
523
+ # the expensive loop below and found no super type for a previous LiteralType
524
+ # with the same fallback, we can skip doing that work again and just add the type
525
+ # to new_items
526
+ pass
527
+ else:
528
+ # If not, check if we've seen a supertype of this type
529
+ for j, tj in enumerate(new_items):
530
+ tj = get_proper_type(tj)
531
+ # If tj is an Instance with a last_known_value, do not remove proper_ti
532
+ # (unless it's an instance with the same last_known_value)
533
+ if (
534
+ isinstance(tj, Instance)
535
+ and tj.last_known_value is not None
536
+ and not (
537
+ isinstance(proper_ti, Instance)
538
+ and tj.last_known_value == proper_ti.last_known_value
539
+ )
540
+ ):
541
+ continue
542
+
543
+ if is_proper_subtype(
544
+ ti, tj, keep_erased_types=keep_erased, ignore_promotions=True
545
+ ):
546
+ duplicate_index = j
547
+ break
548
+ if duplicate_index != -1:
549
+ # If deleted subtypes had more general truthiness, use that
550
+ orig_item = new_items[duplicate_index]
551
+ if not orig_item.can_be_true and ti.can_be_true:
552
+ new_items[duplicate_index] = true_or_false(orig_item)
553
+ elif not orig_item.can_be_false and ti.can_be_false:
554
+ new_items[duplicate_index] = true_or_false(orig_item)
555
+ else:
556
+ # We have a non-duplicate item, add it to new_items
557
+ seen[proper_ti] = len(new_items)
558
+ new_items.append(ti)
559
+ if isinstance(proper_ti, LiteralType):
560
+ if unduplicated_literal_fallbacks is None:
561
+ unduplicated_literal_fallbacks = set()
562
+ unduplicated_literal_fallbacks.add(proper_ti.fallback)
563
+
564
+ items = new_items
565
+ if len(items) <= 1:
566
+ break
567
+ items.reverse()
568
+
569
+ return items
570
+
571
+
572
+ def _get_type_method_ret_type(t: Type, *, name: str) -> Type | None:
573
+ t = get_proper_type(t)
574
+
575
+ if isinstance(t, Instance):
576
+ sym = t.type.get(name)
577
+ if sym:
578
+ sym_type = get_proper_type(sym.type)
579
+ if isinstance(sym_type, CallableType):
580
+ return sym_type.ret_type
581
+
582
+ return None
583
+
584
+
585
+ def true_only(t: Type) -> ProperType:
586
+ """
587
+ Restricted version of t with only True-ish values
588
+ """
589
+ t = get_proper_type(t)
590
+
591
+ if not t.can_be_true:
592
+ # All values of t are False-ish, so there are no true values in it
593
+ return UninhabitedType(line=t.line, column=t.column)
594
+ elif not t.can_be_false:
595
+ # All values of t are already True-ish, so true_only is idempotent in this case
596
+ return t
597
+ elif isinstance(t, UnionType):
598
+ # The true version of a union type is the union of the true versions of its components
599
+ new_items = [true_only(item) for item in t.items]
600
+ can_be_true_items = [item for item in new_items if item.can_be_true]
601
+ return make_simplified_union(can_be_true_items, line=t.line, column=t.column)
602
+ else:
603
+ ret_type = _get_type_method_ret_type(t, name="__bool__") or _get_type_method_ret_type(
604
+ t, name="__len__"
605
+ )
606
+
607
+ if ret_type and not ret_type.can_be_true:
608
+ return UninhabitedType(line=t.line, column=t.column)
609
+
610
+ new_t = copy_type(t)
611
+ new_t.can_be_false = False
612
+ return new_t
613
+
614
+
615
+ def false_only(t: Type) -> ProperType:
616
+ """
617
+ Restricted version of t with only False-ish values
618
+ """
619
+ t = get_proper_type(t)
620
+
621
+ if not t.can_be_false:
622
+ if state.strict_optional:
623
+ # All values of t are True-ish, so there are no false values in it
624
+ return UninhabitedType(line=t.line)
625
+ else:
626
+ # When strict optional checking is disabled, everything can be
627
+ # False-ish since anything can be None
628
+ return NoneType(line=t.line)
629
+ elif not t.can_be_true:
630
+ # All values of t are already False-ish, so false_only is idempotent in this case
631
+ return t
632
+ elif isinstance(t, UnionType):
633
+ # The false version of a union type is the union of the false versions of its components
634
+ new_items = [false_only(item) for item in t.items]
635
+ can_be_false_items = [item for item in new_items if item.can_be_false]
636
+ return make_simplified_union(can_be_false_items, line=t.line, column=t.column)
637
+ else:
638
+ ret_type = _get_type_method_ret_type(t, name="__bool__") or _get_type_method_ret_type(
639
+ t, name="__len__"
640
+ )
641
+
642
+ if ret_type:
643
+ if not ret_type.can_be_false:
644
+ return UninhabitedType(line=t.line)
645
+ elif isinstance(t, Instance) and t.type.is_final:
646
+ return UninhabitedType(line=t.line)
647
+
648
+ new_t = copy_type(t)
649
+ new_t.can_be_true = False
650
+ return new_t
651
+
652
+
653
+ def true_or_false(t: Type) -> ProperType:
654
+ """
655
+ Unrestricted version of t with both True-ish and False-ish values
656
+ """
657
+ t = get_proper_type(t)
658
+
659
+ if isinstance(t, UnionType):
660
+ new_items = [true_or_false(item) for item in t.items]
661
+ return make_simplified_union(new_items, line=t.line, column=t.column)
662
+
663
+ new_t = copy_type(t)
664
+ new_t.can_be_true = new_t.can_be_true_default()
665
+ new_t.can_be_false = new_t.can_be_false_default()
666
+ return new_t
667
+
668
+
669
+ def erase_def_to_union_or_bound(tdef: TypeVarLikeType) -> Type:
670
+ # TODO(PEP612): fix for ParamSpecType
671
+ if isinstance(tdef, ParamSpecType):
672
+ return AnyType(TypeOfAny.from_error)
673
+ if isinstance(tdef, TypeVarType) and tdef.values:
674
+ return make_simplified_union(tdef.values)
675
+ else:
676
+ return tdef.upper_bound
677
+
678
+
679
+ def erase_to_union_or_bound(typ: TypeVarType) -> ProperType:
680
+ if typ.values:
681
+ return make_simplified_union(typ.values)
682
+ else:
683
+ return get_proper_type(typ.upper_bound)
684
+
685
+
686
+ def function_type(func: FuncBase, fallback: Instance) -> FunctionLike:
687
+ if func.type:
688
+ assert isinstance(func.type, FunctionLike)
689
+ return func.type
690
+ else:
691
+ # Implicit type signature with dynamic types.
692
+ if isinstance(func, FuncItem):
693
+ return callable_type(func, fallback)
694
+ else:
695
+ # Broken overloads can have self.type set to None.
696
+ # TODO: should we instead always set the type in semantic analyzer?
697
+ assert isinstance(func, OverloadedFuncDef)
698
+ any_type = AnyType(TypeOfAny.from_error)
699
+ dummy = CallableType(
700
+ [any_type, any_type],
701
+ [ARG_STAR, ARG_STAR2],
702
+ [None, None],
703
+ any_type,
704
+ fallback,
705
+ line=func.line,
706
+ is_ellipsis_args=True,
707
+ )
708
+ # Return an Overloaded, because some callers may expect that
709
+ # an OverloadedFuncDef has an Overloaded type.
710
+ return Overloaded([dummy])
711
+
712
+
713
+ def callable_type(
714
+ fdef: FuncItem, fallback: Instance, ret_type: Type | None = None
715
+ ) -> CallableType:
716
+ # TODO: somewhat unfortunate duplication with prepare_method_signature in semanal
717
+ if fdef.info and (not fdef.is_static or fdef.name == "__new__") and fdef.arg_names:
718
+ self_type: Type = fill_typevars(fdef.info)
719
+ if fdef.is_class or fdef.name == "__new__":
720
+ self_type = TypeType.make_normalized(self_type)
721
+ args = [self_type] + [AnyType(TypeOfAny.unannotated)] * (len(fdef.arg_names) - 1)
722
+ else:
723
+ args = [AnyType(TypeOfAny.unannotated)] * len(fdef.arg_names)
724
+
725
+ return CallableType(
726
+ args,
727
+ fdef.arg_kinds,
728
+ fdef.arg_names,
729
+ ret_type or AnyType(TypeOfAny.unannotated),
730
+ fallback,
731
+ name=fdef.name,
732
+ line=fdef.line,
733
+ column=fdef.column,
734
+ implicit=True,
735
+ # We need this for better error messages, like missing `self` note:
736
+ definition=fdef if isinstance(fdef, FuncDef) else None,
737
+ )
738
+
739
+
740
+ def try_getting_str_literals(expr: Expression, typ: Type) -> list[str] | None:
741
+ """If the given expression or type corresponds to a string literal
742
+ or a union of string literals, returns a list of the underlying strings.
743
+ Otherwise, returns None.
744
+
745
+ Specifically, this function is guaranteed to return a list with
746
+ one or more strings if one of the following is true:
747
+
748
+ 1. 'expr' is a StrExpr
749
+ 2. 'typ' is a LiteralType containing a string
750
+ 3. 'typ' is a UnionType containing only LiteralType of strings
751
+ """
752
+ if isinstance(expr, StrExpr):
753
+ return [expr.value]
754
+
755
+ # TODO: See if we can eliminate this function and call the below one directly
756
+ return try_getting_str_literals_from_type(typ)
757
+
758
+
759
+ def try_getting_str_literals_from_type(typ: Type) -> list[str] | None:
760
+ """If the given expression or type corresponds to a string Literal
761
+ or a union of string Literals, returns a list of the underlying strings.
762
+ Otherwise, returns None.
763
+
764
+ For example, if we had the type 'Literal["foo", "bar"]' as input, this function
765
+ would return a list of strings ["foo", "bar"].
766
+ """
767
+ return try_getting_literals_from_type(typ, str, "builtins.str")
768
+
769
+
770
+ def try_getting_int_literals_from_type(typ: Type) -> list[int] | None:
771
+ """If the given expression or type corresponds to an int Literal
772
+ or a union of int Literals, returns a list of the underlying ints.
773
+ Otherwise, returns None.
774
+
775
+ For example, if we had the type 'Literal[1, 2, 3]' as input, this function
776
+ would return a list of ints [1, 2, 3].
777
+ """
778
+ return try_getting_literals_from_type(typ, int, "builtins.int")
779
+
780
+
781
+ T = TypeVar("T")
782
+
783
+
784
+ def try_getting_literals_from_type(
785
+ typ: Type, target_literal_type: type[T], target_fullname: str
786
+ ) -> list[T] | None:
787
+ """If the given expression or type corresponds to a Literal or
788
+ union of Literals where the underlying values correspond to the given
789
+ target type, returns a list of those underlying values. Otherwise,
790
+ returns None.
791
+ """
792
+ typ = get_proper_type(typ)
793
+
794
+ if isinstance(typ, Instance) and typ.last_known_value is not None:
795
+ possible_literals: list[Type] = [typ.last_known_value]
796
+ elif isinstance(typ, UnionType):
797
+ possible_literals = list(typ.items)
798
+ else:
799
+ possible_literals = [typ]
800
+
801
+ literals: list[T] = []
802
+ for lit in get_proper_types(possible_literals):
803
+ if isinstance(lit, LiteralType) and lit.fallback.type.fullname == target_fullname:
804
+ val = lit.value
805
+ if isinstance(val, target_literal_type):
806
+ literals.append(val)
807
+ else:
808
+ return None
809
+ else:
810
+ return None
811
+ return literals
812
+
813
+
814
+ def is_literal_type_like(t: Type | None) -> bool:
815
+ """Returns 'true' if the given type context is potentially either a LiteralType,
816
+ a Union of LiteralType, or something similar.
817
+ """
818
+ t = get_proper_type(t)
819
+ if t is None:
820
+ return False
821
+ elif isinstance(t, LiteralType):
822
+ return True
823
+ elif isinstance(t, UnionType):
824
+ return any(is_literal_type_like(item) for item in t.items)
825
+ elif isinstance(t, TypeVarType):
826
+ return is_literal_type_like(t.upper_bound) or any(
827
+ is_literal_type_like(item) for item in t.values
828
+ )
829
+ else:
830
+ return False
831
+
832
+
833
+ def is_singleton_type(typ: Type) -> bool:
834
+ """Returns 'true' if this type is a "singleton type" -- if there exists
835
+ exactly only one runtime value associated with this type.
836
+
837
+ That is, given two values 'a' and 'b' that have the same type 't',
838
+ 'is_singleton_type(t)' returns True if and only if the expression 'a is b' is
839
+ always true.
840
+
841
+ Currently, this returns True when given NoneTypes, enum LiteralTypes,
842
+ enum types with a single value and ... (Ellipses).
843
+
844
+ Note that other kinds of LiteralTypes cannot count as singleton types. For
845
+ example, suppose we do 'a = 100000 + 1' and 'b = 100001'. It is not guaranteed
846
+ that 'a is b' will always be true -- some implementations of Python will end up
847
+ constructing two distinct instances of 100001.
848
+ """
849
+ typ = get_proper_type(typ)
850
+ return typ.is_singleton_type()
851
+
852
+
853
+ def try_expanding_sum_type_to_union(typ: Type, target_fullname: str) -> ProperType:
854
+ """Attempts to recursively expand any enum Instances with the given target_fullname
855
+ into a Union of all of its component LiteralTypes.
856
+
857
+ For example, if we have:
858
+
859
+ class Color(Enum):
860
+ RED = 1
861
+ BLUE = 2
862
+ YELLOW = 3
863
+
864
+ class Status(Enum):
865
+ SUCCESS = 1
866
+ FAILURE = 2
867
+ UNKNOWN = 3
868
+
869
+ ...and if we call `try_expanding_enum_to_union(Union[Color, Status], 'module.Color')`,
870
+ this function will return Literal[Color.RED, Color.BLUE, Color.YELLOW, Status].
871
+ """
872
+ typ = get_proper_type(typ)
873
+
874
+ if isinstance(typ, UnionType):
875
+ items = [
876
+ try_expanding_sum_type_to_union(item, target_fullname) for item in typ.relevant_items()
877
+ ]
878
+ return make_simplified_union(items, contract_literals=False)
879
+ elif isinstance(typ, Instance) and typ.type.fullname == target_fullname:
880
+ if typ.type.is_enum:
881
+ new_items = []
882
+ for name, symbol in typ.type.names.items():
883
+ if not isinstance(symbol.node, Var):
884
+ continue
885
+ # Skip these since Enum will remove it
886
+ if name in ENUM_REMOVED_PROPS:
887
+ continue
888
+ new_items.append(LiteralType(name, typ))
889
+ return make_simplified_union(new_items, contract_literals=False)
890
+ elif typ.type.fullname == "builtins.bool":
891
+ return make_simplified_union(
892
+ [LiteralType(True, typ), LiteralType(False, typ)], contract_literals=False
893
+ )
894
+
895
+ return typ
896
+
897
+
898
+ def try_contracting_literals_in_union(types: Sequence[Type]) -> list[ProperType]:
899
+ """Contracts any literal types back into a sum type if possible.
900
+
901
+ Will replace the first instance of the literal with the sum type and
902
+ remove all others.
903
+
904
+ If we call `try_contracting_union(Literal[Color.RED, Color.BLUE, Color.YELLOW])`,
905
+ this function will return Color.
906
+
907
+ We also treat `Literal[True, False]` as `bool`.
908
+ """
909
+ proper_types = [get_proper_type(typ) for typ in types]
910
+ sum_types: dict[str, tuple[set[Any], list[int]]] = {}
911
+ marked_for_deletion = set()
912
+ for idx, typ in enumerate(proper_types):
913
+ if isinstance(typ, LiteralType):
914
+ fullname = typ.fallback.type.fullname
915
+ if typ.fallback.type.is_enum or isinstance(typ.value, bool):
916
+ if fullname not in sum_types:
917
+ sum_types[fullname] = (
918
+ (
919
+ set(typ.fallback.get_enum_values())
920
+ if typ.fallback.type.is_enum
921
+ else {True, False}
922
+ ),
923
+ [],
924
+ )
925
+ literals, indexes = sum_types[fullname]
926
+ literals.discard(typ.value)
927
+ indexes.append(idx)
928
+ if not literals:
929
+ first, *rest = indexes
930
+ proper_types[first] = typ.fallback
931
+ marked_for_deletion |= set(rest)
932
+ return list(
933
+ itertools.compress(
934
+ proper_types, [(i not in marked_for_deletion) for i in range(len(proper_types))]
935
+ )
936
+ )
937
+
938
+
939
+ def coerce_to_literal(typ: Type) -> Type:
940
+ """Recursively converts any Instances that have a last_known_value or are
941
+ instances of enum types with a single value into the corresponding LiteralType.
942
+ """
943
+ original_type = typ
944
+ typ = get_proper_type(typ)
945
+ if isinstance(typ, UnionType):
946
+ new_items = [coerce_to_literal(item) for item in typ.items]
947
+ return UnionType.make_union(new_items)
948
+ elif isinstance(typ, Instance):
949
+ if typ.last_known_value:
950
+ return typ.last_known_value
951
+ elif typ.type.is_enum:
952
+ enum_values = typ.get_enum_values()
953
+ if len(enum_values) == 1:
954
+ return LiteralType(value=enum_values[0], fallback=typ)
955
+ return original_type
956
+
957
+
958
+ def get_type_vars(tp: Type) -> list[TypeVarType]:
959
+ return cast("list[TypeVarType]", tp.accept(TypeVarExtractor()))
960
+
961
+
962
+ def get_all_type_vars(tp: Type) -> list[TypeVarLikeType]:
963
+ # TODO: should we always use this function instead of get_type_vars() above?
964
+ return tp.accept(TypeVarExtractor(include_all=True))
965
+
966
+
967
+ class TypeVarExtractor(TypeQuery[List[TypeVarLikeType]]):
968
+ def __init__(self, include_all: bool = False) -> None:
969
+ super().__init__(self._merge)
970
+ self.include_all = include_all
971
+
972
+ def _merge(self, iter: Iterable[list[TypeVarLikeType]]) -> list[TypeVarLikeType]:
973
+ out = []
974
+ for item in iter:
975
+ out.extend(item)
976
+ return out
977
+
978
+ def visit_type_var(self, t: TypeVarType) -> list[TypeVarLikeType]:
979
+ return [t]
980
+
981
+ def visit_param_spec(self, t: ParamSpecType) -> list[TypeVarLikeType]:
982
+ return [t] if self.include_all else []
983
+
984
+ def visit_type_var_tuple(self, t: TypeVarTupleType) -> list[TypeVarLikeType]:
985
+ return [t] if self.include_all else []
986
+
987
+
988
+ def custom_special_method(typ: Type, name: str, check_all: bool = False) -> bool:
989
+ """Does this type have a custom special method such as __format__() or __eq__()?
990
+
991
+ If check_all is True ensure all items of a union have a custom method, not just some.
992
+ """
993
+ typ = get_proper_type(typ)
994
+ if isinstance(typ, Instance):
995
+ method = typ.type.get(name)
996
+ if method and isinstance(method.node, (SYMBOL_FUNCBASE_TYPES, Decorator, Var)):
997
+ if method.node.info:
998
+ return not method.node.info.fullname.startswith(("builtins.", "typing."))
999
+ return False
1000
+ if isinstance(typ, UnionType):
1001
+ if check_all:
1002
+ return all(custom_special_method(t, name, check_all) for t in typ.items)
1003
+ return any(custom_special_method(t, name) for t in typ.items)
1004
+ if isinstance(typ, TupleType):
1005
+ return custom_special_method(tuple_fallback(typ), name, check_all)
1006
+ if isinstance(typ, FunctionLike) and typ.is_type_obj():
1007
+ # Look up __method__ on the metaclass for class objects.
1008
+ return custom_special_method(typ.fallback, name, check_all)
1009
+ if isinstance(typ, AnyType):
1010
+ # Avoid false positives in uncertain cases.
1011
+ return True
1012
+ # TODO: support other types (see ExpressionChecker.has_member())?
1013
+ return False
1014
+
1015
+
1016
+ def separate_union_literals(t: UnionType) -> tuple[Sequence[LiteralType], Sequence[Type]]:
1017
+ """Separate literals from other members in a union type."""
1018
+ literal_items = []
1019
+ union_items = []
1020
+
1021
+ for item in t.items:
1022
+ proper = get_proper_type(item)
1023
+ if isinstance(proper, LiteralType):
1024
+ literal_items.append(proper)
1025
+ else:
1026
+ union_items.append(item)
1027
+
1028
+ return literal_items, union_items
1029
+
1030
+
1031
+ def try_getting_instance_fallback(typ: Type) -> Instance | None:
1032
+ """Returns the Instance fallback for this type if one exists or None."""
1033
+ typ = get_proper_type(typ)
1034
+ if isinstance(typ, Instance):
1035
+ return typ
1036
+ elif isinstance(typ, LiteralType):
1037
+ return typ.fallback
1038
+ elif isinstance(typ, NoneType):
1039
+ return None # Fast path for None, which is common
1040
+ elif isinstance(typ, FunctionLike):
1041
+ return typ.fallback
1042
+ elif isinstance(typ, TupleType):
1043
+ return typ.partial_fallback
1044
+ elif isinstance(typ, TypedDictType):
1045
+ return typ.fallback
1046
+ elif isinstance(typ, TypeVarType):
1047
+ return try_getting_instance_fallback(typ.upper_bound)
1048
+ return None
1049
+
1050
+
1051
+ def fixup_partial_type(typ: Type) -> Type:
1052
+ """Convert a partial type that we couldn't resolve into something concrete.
1053
+
1054
+ This means, for None we make it Optional[Any], and for anything else we
1055
+ fill in all of the type arguments with Any.
1056
+ """
1057
+ if not isinstance(typ, PartialType):
1058
+ return typ
1059
+ if typ.type is None:
1060
+ return UnionType.make_union([AnyType(TypeOfAny.unannotated), NoneType()])
1061
+ else:
1062
+ return Instance(typ.type, [AnyType(TypeOfAny.unannotated)] * len(typ.type.type_vars))
1063
+
1064
+
1065
+ def get_protocol_member(left: Instance, member: str, class_obj: bool) -> ProperType | None:
1066
+ if member == "__call__" and class_obj:
1067
+ # Special case: class objects always have __call__ that is just the constructor.
1068
+ from mypy.checkmember import type_object_type
1069
+
1070
+ def named_type(fullname: str) -> Instance:
1071
+ return Instance(left.type.mro[-1], [])
1072
+
1073
+ return type_object_type(left.type, named_type)
1074
+
1075
+ if member == "__call__" and left.type.is_metaclass():
1076
+ # Special case: we want to avoid falling back to metaclass __call__
1077
+ # if constructor signature didn't match, this can cause many false negatives.
1078
+ return None
1079
+
1080
+ from mypy.subtypes import find_member
1081
+
1082
+ return get_proper_type(find_member(member, left, left, class_obj=class_obj))