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/treetransform.py ADDED
@@ -0,0 +1,800 @@
1
+ """Base visitor that implements an identity AST transform.
2
+
3
+ Subclass TransformVisitor to perform non-trivial transformations.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import Iterable, Optional, cast
9
+
10
+ from mypy.nodes import (
11
+ GDEF,
12
+ REVEAL_TYPE,
13
+ Argument,
14
+ AssertStmt,
15
+ AssertTypeExpr,
16
+ AssignmentExpr,
17
+ AssignmentStmt,
18
+ AwaitExpr,
19
+ Block,
20
+ BreakStmt,
21
+ BytesExpr,
22
+ CallExpr,
23
+ CastExpr,
24
+ ClassDef,
25
+ ComparisonExpr,
26
+ ComplexExpr,
27
+ ConditionalExpr,
28
+ ContinueStmt,
29
+ Decorator,
30
+ DelStmt,
31
+ DictExpr,
32
+ DictionaryComprehension,
33
+ EllipsisExpr,
34
+ EnumCallExpr,
35
+ Expression,
36
+ ExpressionStmt,
37
+ FloatExpr,
38
+ ForStmt,
39
+ FuncDef,
40
+ FuncItem,
41
+ GeneratorExpr,
42
+ GlobalDecl,
43
+ IfStmt,
44
+ Import,
45
+ ImportAll,
46
+ ImportFrom,
47
+ IndexExpr,
48
+ IntExpr,
49
+ LambdaExpr,
50
+ ListComprehension,
51
+ ListExpr,
52
+ MatchStmt,
53
+ MemberExpr,
54
+ MypyFile,
55
+ NamedTupleExpr,
56
+ NameExpr,
57
+ NewTypeExpr,
58
+ Node,
59
+ NonlocalDecl,
60
+ OperatorAssignmentStmt,
61
+ OpExpr,
62
+ OverloadedFuncDef,
63
+ OverloadPart,
64
+ ParamSpecExpr,
65
+ PassStmt,
66
+ PromoteExpr,
67
+ RaiseStmt,
68
+ RefExpr,
69
+ ReturnStmt,
70
+ RevealExpr,
71
+ SetComprehension,
72
+ SetExpr,
73
+ SliceExpr,
74
+ StarExpr,
75
+ Statement,
76
+ StrExpr,
77
+ SuperExpr,
78
+ SymbolTable,
79
+ TempNode,
80
+ TryStmt,
81
+ TupleExpr,
82
+ TypeAliasExpr,
83
+ TypeApplication,
84
+ TypedDictExpr,
85
+ TypeVarExpr,
86
+ TypeVarTupleExpr,
87
+ UnaryExpr,
88
+ Var,
89
+ WhileStmt,
90
+ WithStmt,
91
+ YieldExpr,
92
+ YieldFromExpr,
93
+ )
94
+ from mypy.patterns import (
95
+ AsPattern,
96
+ ClassPattern,
97
+ MappingPattern,
98
+ OrPattern,
99
+ Pattern,
100
+ SequencePattern,
101
+ SingletonPattern,
102
+ StarredPattern,
103
+ ValuePattern,
104
+ )
105
+ from mypy.traverser import TraverserVisitor
106
+ from mypy.types import FunctionLike, ProperType, Type
107
+ from mypy.util import replace_object_state
108
+ from mypy.visitor import NodeVisitor
109
+
110
+
111
+ class TransformVisitor(NodeVisitor[Node]):
112
+ """Transform a semantically analyzed AST (or subtree) to an identical copy.
113
+
114
+ Use the node() method to transform an AST node.
115
+
116
+ Subclass to perform a non-identity transform.
117
+
118
+ Notes:
119
+
120
+ * This can only be used to transform functions or classes, not top-level
121
+ statements, and/or modules as a whole.
122
+ * Do not duplicate TypeInfo nodes. This would generally not be desirable.
123
+ * Only update some name binding cross-references, but only those that
124
+ refer to Var, Decorator or FuncDef nodes, not those targeting ClassDef or
125
+ TypeInfo nodes.
126
+ * Types are not transformed, but you can override type() to also perform
127
+ type transformation.
128
+
129
+ TODO nested classes and functions have not been tested well enough
130
+ """
131
+
132
+ def __init__(self) -> None:
133
+ # To simplify testing, set this flag to True if you want to transform
134
+ # all statements in a file (this is prohibited in normal mode).
135
+ self.test_only = False
136
+ # There may be multiple references to a Var node. Keep track of
137
+ # Var translations using a dictionary.
138
+ self.var_map: dict[Var, Var] = {}
139
+ # These are uninitialized placeholder nodes used temporarily for nested
140
+ # functions while we are transforming a top-level function. This maps an
141
+ # untransformed node to a placeholder (which will later become the
142
+ # transformed node).
143
+ self.func_placeholder_map: dict[FuncDef, FuncDef] = {}
144
+
145
+ def visit_mypy_file(self, node: MypyFile) -> MypyFile:
146
+ assert self.test_only, "This visitor should not be used for whole files."
147
+ # NOTE: The 'names' and 'imports' instance variables will be empty!
148
+ ignored_lines = {line: codes.copy() for line, codes in node.ignored_lines.items()}
149
+ new = MypyFile(self.statements(node.defs), [], node.is_bom, ignored_lines=ignored_lines)
150
+ new._fullname = node._fullname
151
+ new.path = node.path
152
+ new.names = SymbolTable()
153
+ return new
154
+
155
+ def visit_import(self, node: Import) -> Import:
156
+ return Import(node.ids.copy())
157
+
158
+ def visit_import_from(self, node: ImportFrom) -> ImportFrom:
159
+ return ImportFrom(node.id, node.relative, node.names.copy())
160
+
161
+ def visit_import_all(self, node: ImportAll) -> ImportAll:
162
+ return ImportAll(node.id, node.relative)
163
+
164
+ def copy_argument(self, argument: Argument) -> Argument:
165
+ arg = Argument(
166
+ self.visit_var(argument.variable),
167
+ argument.type_annotation,
168
+ argument.initializer,
169
+ argument.kind,
170
+ )
171
+
172
+ # Refresh lines of the inner things
173
+ arg.set_line(argument)
174
+
175
+ return arg
176
+
177
+ def visit_func_def(self, node: FuncDef) -> FuncDef:
178
+ # Note that a FuncDef must be transformed to a FuncDef.
179
+
180
+ # These contortions are needed to handle the case of recursive
181
+ # references inside the function being transformed.
182
+ # Set up placeholder nodes for references within this function
183
+ # to other functions defined inside it.
184
+ # Don't create an entry for this function itself though,
185
+ # since we want self-references to point to the original
186
+ # function if this is the top-level node we are transforming.
187
+ init = FuncMapInitializer(self)
188
+ for stmt in node.body.body:
189
+ stmt.accept(init)
190
+
191
+ new = FuncDef(
192
+ node.name,
193
+ [self.copy_argument(arg) for arg in node.arguments],
194
+ self.block(node.body),
195
+ cast(Optional[FunctionLike], self.optional_type(node.type)),
196
+ )
197
+
198
+ self.copy_function_attributes(new, node)
199
+
200
+ new._fullname = node._fullname
201
+ new.is_decorated = node.is_decorated
202
+ new.is_conditional = node.is_conditional
203
+ new.abstract_status = node.abstract_status
204
+ new.is_static = node.is_static
205
+ new.is_class = node.is_class
206
+ new.is_property = node.is_property
207
+ new.is_final = node.is_final
208
+ new.original_def = node.original_def
209
+
210
+ if node in self.func_placeholder_map:
211
+ # There is a placeholder definition for this function. Replace
212
+ # the attributes of the placeholder with those form the transformed
213
+ # function. We know that the classes will be identical (otherwise
214
+ # this wouldn't work).
215
+ result = self.func_placeholder_map[node]
216
+ replace_object_state(result, new)
217
+ return result
218
+ else:
219
+ return new
220
+
221
+ def visit_lambda_expr(self, node: LambdaExpr) -> LambdaExpr:
222
+ new = LambdaExpr(
223
+ [self.copy_argument(arg) for arg in node.arguments],
224
+ self.block(node.body),
225
+ cast(Optional[FunctionLike], self.optional_type(node.type)),
226
+ )
227
+ self.copy_function_attributes(new, node)
228
+ return new
229
+
230
+ def copy_function_attributes(self, new: FuncItem, original: FuncItem) -> None:
231
+ new.info = original.info
232
+ new.min_args = original.min_args
233
+ new.max_pos = original.max_pos
234
+ new.is_overload = original.is_overload
235
+ new.is_generator = original.is_generator
236
+ new.is_coroutine = original.is_coroutine
237
+ new.is_async_generator = original.is_async_generator
238
+ new.is_awaitable_coroutine = original.is_awaitable_coroutine
239
+ new.line = original.line
240
+
241
+ def visit_overloaded_func_def(self, node: OverloadedFuncDef) -> OverloadedFuncDef:
242
+ items = [cast(OverloadPart, item.accept(self)) for item in node.items]
243
+ for newitem, olditem in zip(items, node.items):
244
+ newitem.line = olditem.line
245
+ new = OverloadedFuncDef(items)
246
+ new._fullname = node._fullname
247
+ new_type = self.optional_type(node.type)
248
+ assert isinstance(new_type, ProperType)
249
+ new.type = new_type
250
+ new.info = node.info
251
+ new.is_static = node.is_static
252
+ new.is_class = node.is_class
253
+ new.is_property = node.is_property
254
+ new.is_final = node.is_final
255
+ if node.impl:
256
+ new.impl = cast(OverloadPart, node.impl.accept(self))
257
+ return new
258
+
259
+ def visit_class_def(self, node: ClassDef) -> ClassDef:
260
+ new = ClassDef(
261
+ node.name,
262
+ self.block(node.defs),
263
+ node.type_vars,
264
+ self.expressions(node.base_type_exprs),
265
+ self.optional_expr(node.metaclass),
266
+ )
267
+ new.fullname = node.fullname
268
+ new.info = node.info
269
+ new.decorators = [self.expr(decorator) for decorator in node.decorators]
270
+ return new
271
+
272
+ def visit_global_decl(self, node: GlobalDecl) -> GlobalDecl:
273
+ return GlobalDecl(node.names.copy())
274
+
275
+ def visit_nonlocal_decl(self, node: NonlocalDecl) -> NonlocalDecl:
276
+ return NonlocalDecl(node.names.copy())
277
+
278
+ def visit_block(self, node: Block) -> Block:
279
+ return Block(self.statements(node.body))
280
+
281
+ def visit_decorator(self, node: Decorator) -> Decorator:
282
+ # Note that a Decorator must be transformed to a Decorator.
283
+ func = self.visit_func_def(node.func)
284
+ func.line = node.func.line
285
+ new = Decorator(func, self.expressions(node.decorators), self.visit_var(node.var))
286
+ new.is_overload = node.is_overload
287
+ return new
288
+
289
+ def visit_var(self, node: Var) -> Var:
290
+ # Note that a Var must be transformed to a Var.
291
+ if node in self.var_map:
292
+ return self.var_map[node]
293
+ new = Var(node.name, self.optional_type(node.type))
294
+ new.line = node.line
295
+ new._fullname = node._fullname
296
+ new.info = node.info
297
+ new.is_self = node.is_self
298
+ new.is_ready = node.is_ready
299
+ new.is_initialized_in_class = node.is_initialized_in_class
300
+ new.is_staticmethod = node.is_staticmethod
301
+ new.is_classmethod = node.is_classmethod
302
+ new.is_property = node.is_property
303
+ new.is_final = node.is_final
304
+ new.final_value = node.final_value
305
+ new.final_unset_in_class = node.final_unset_in_class
306
+ new.final_set_in_init = node.final_set_in_init
307
+ new.set_line(node)
308
+ self.var_map[node] = new
309
+ return new
310
+
311
+ def visit_expression_stmt(self, node: ExpressionStmt) -> ExpressionStmt:
312
+ return ExpressionStmt(self.expr(node.expr))
313
+
314
+ def visit_assignment_stmt(self, node: AssignmentStmt) -> AssignmentStmt:
315
+ return self.duplicate_assignment(node)
316
+
317
+ def duplicate_assignment(self, node: AssignmentStmt) -> AssignmentStmt:
318
+ new = AssignmentStmt(
319
+ self.expressions(node.lvalues),
320
+ self.expr(node.rvalue),
321
+ self.optional_type(node.unanalyzed_type),
322
+ )
323
+ new.line = node.line
324
+ new.is_final_def = node.is_final_def
325
+ new.type = self.optional_type(node.type)
326
+ return new
327
+
328
+ def visit_operator_assignment_stmt(
329
+ self, node: OperatorAssignmentStmt
330
+ ) -> OperatorAssignmentStmt:
331
+ return OperatorAssignmentStmt(node.op, self.expr(node.lvalue), self.expr(node.rvalue))
332
+
333
+ def visit_while_stmt(self, node: WhileStmt) -> WhileStmt:
334
+ return WhileStmt(
335
+ self.expr(node.expr), self.block(node.body), self.optional_block(node.else_body)
336
+ )
337
+
338
+ def visit_for_stmt(self, node: ForStmt) -> ForStmt:
339
+ new = ForStmt(
340
+ self.expr(node.index),
341
+ self.expr(node.expr),
342
+ self.block(node.body),
343
+ self.optional_block(node.else_body),
344
+ self.optional_type(node.unanalyzed_index_type),
345
+ )
346
+ new.is_async = node.is_async
347
+ new.index_type = self.optional_type(node.index_type)
348
+ return new
349
+
350
+ def visit_return_stmt(self, node: ReturnStmt) -> ReturnStmt:
351
+ return ReturnStmt(self.optional_expr(node.expr))
352
+
353
+ def visit_assert_stmt(self, node: AssertStmt) -> AssertStmt:
354
+ return AssertStmt(self.expr(node.expr), self.optional_expr(node.msg))
355
+
356
+ def visit_del_stmt(self, node: DelStmt) -> DelStmt:
357
+ return DelStmt(self.expr(node.expr))
358
+
359
+ def visit_if_stmt(self, node: IfStmt) -> IfStmt:
360
+ return IfStmt(
361
+ self.expressions(node.expr),
362
+ self.blocks(node.body),
363
+ self.optional_block(node.else_body),
364
+ )
365
+
366
+ def visit_break_stmt(self, node: BreakStmt) -> BreakStmt:
367
+ return BreakStmt()
368
+
369
+ def visit_continue_stmt(self, node: ContinueStmt) -> ContinueStmt:
370
+ return ContinueStmt()
371
+
372
+ def visit_pass_stmt(self, node: PassStmt) -> PassStmt:
373
+ return PassStmt()
374
+
375
+ def visit_raise_stmt(self, node: RaiseStmt) -> RaiseStmt:
376
+ return RaiseStmt(self.optional_expr(node.expr), self.optional_expr(node.from_expr))
377
+
378
+ def visit_try_stmt(self, node: TryStmt) -> TryStmt:
379
+ new = TryStmt(
380
+ self.block(node.body),
381
+ self.optional_names(node.vars),
382
+ self.optional_expressions(node.types),
383
+ self.blocks(node.handlers),
384
+ self.optional_block(node.else_body),
385
+ self.optional_block(node.finally_body),
386
+ )
387
+ new.is_star = node.is_star
388
+ return new
389
+
390
+ def visit_with_stmt(self, node: WithStmt) -> WithStmt:
391
+ new = WithStmt(
392
+ self.expressions(node.expr),
393
+ self.optional_expressions(node.target),
394
+ self.block(node.body),
395
+ self.optional_type(node.unanalyzed_type),
396
+ )
397
+ new.is_async = node.is_async
398
+ new.analyzed_types = [self.type(typ) for typ in node.analyzed_types]
399
+ return new
400
+
401
+ def visit_as_pattern(self, p: AsPattern) -> AsPattern:
402
+ return AsPattern(
403
+ pattern=self.pattern(p.pattern) if p.pattern is not None else None,
404
+ name=self.duplicate_name(p.name) if p.name is not None else None,
405
+ )
406
+
407
+ def visit_or_pattern(self, p: OrPattern) -> OrPattern:
408
+ return OrPattern([self.pattern(pat) for pat in p.patterns])
409
+
410
+ def visit_value_pattern(self, p: ValuePattern) -> ValuePattern:
411
+ return ValuePattern(self.expr(p.expr))
412
+
413
+ def visit_singleton_pattern(self, p: SingletonPattern) -> SingletonPattern:
414
+ return SingletonPattern(p.value)
415
+
416
+ def visit_sequence_pattern(self, p: SequencePattern) -> SequencePattern:
417
+ return SequencePattern([self.pattern(pat) for pat in p.patterns])
418
+
419
+ def visit_starred_pattern(self, p: StarredPattern) -> StarredPattern:
420
+ return StarredPattern(self.duplicate_name(p.capture) if p.capture is not None else None)
421
+
422
+ def visit_mapping_pattern(self, p: MappingPattern) -> MappingPattern:
423
+ return MappingPattern(
424
+ keys=[self.expr(expr) for expr in p.keys],
425
+ values=[self.pattern(pat) for pat in p.values],
426
+ rest=self.duplicate_name(p.rest) if p.rest is not None else None,
427
+ )
428
+
429
+ def visit_class_pattern(self, p: ClassPattern) -> ClassPattern:
430
+ class_ref = p.class_ref.accept(self)
431
+ assert isinstance(class_ref, RefExpr)
432
+ return ClassPattern(
433
+ class_ref=class_ref,
434
+ positionals=[self.pattern(pat) for pat in p.positionals],
435
+ keyword_keys=list(p.keyword_keys),
436
+ keyword_values=[self.pattern(pat) for pat in p.keyword_values],
437
+ )
438
+
439
+ def visit_match_stmt(self, o: MatchStmt) -> MatchStmt:
440
+ return MatchStmt(
441
+ subject=self.expr(o.subject),
442
+ patterns=[self.pattern(p) for p in o.patterns],
443
+ guards=self.optional_expressions(o.guards),
444
+ bodies=self.blocks(o.bodies),
445
+ )
446
+
447
+ def visit_star_expr(self, node: StarExpr) -> StarExpr:
448
+ return StarExpr(node.expr)
449
+
450
+ def visit_int_expr(self, node: IntExpr) -> IntExpr:
451
+ return IntExpr(node.value)
452
+
453
+ def visit_str_expr(self, node: StrExpr) -> StrExpr:
454
+ return StrExpr(node.value)
455
+
456
+ def visit_bytes_expr(self, node: BytesExpr) -> BytesExpr:
457
+ return BytesExpr(node.value)
458
+
459
+ def visit_float_expr(self, node: FloatExpr) -> FloatExpr:
460
+ return FloatExpr(node.value)
461
+
462
+ def visit_complex_expr(self, node: ComplexExpr) -> ComplexExpr:
463
+ return ComplexExpr(node.value)
464
+
465
+ def visit_ellipsis(self, node: EllipsisExpr) -> EllipsisExpr:
466
+ return EllipsisExpr()
467
+
468
+ def visit_name_expr(self, node: NameExpr) -> NameExpr:
469
+ return self.duplicate_name(node)
470
+
471
+ def duplicate_name(self, node: NameExpr) -> NameExpr:
472
+ # This method is used when the transform result must be a NameExpr.
473
+ # visit_name_expr() is used when there is no such restriction.
474
+ new = NameExpr(node.name)
475
+ self.copy_ref(new, node)
476
+ new.is_special_form = node.is_special_form
477
+ return new
478
+
479
+ def visit_member_expr(self, node: MemberExpr) -> MemberExpr:
480
+ member = MemberExpr(self.expr(node.expr), node.name)
481
+ if node.def_var:
482
+ # This refers to an attribute and we don't transform attributes by default,
483
+ # just normal variables.
484
+ member.def_var = node.def_var
485
+ self.copy_ref(member, node)
486
+ return member
487
+
488
+ def copy_ref(self, new: RefExpr, original: RefExpr) -> None:
489
+ new.kind = original.kind
490
+ new.fullname = original.fullname
491
+ target = original.node
492
+ if isinstance(target, Var):
493
+ # Do not transform references to global variables. See
494
+ # testGenericFunctionAliasExpand for an example where this is important.
495
+ if original.kind != GDEF:
496
+ target = self.visit_var(target)
497
+ elif isinstance(target, Decorator):
498
+ target = self.visit_var(target.var)
499
+ elif isinstance(target, FuncDef):
500
+ # Use a placeholder node for the function if it exists.
501
+ target = self.func_placeholder_map.get(target, target)
502
+ new.node = target
503
+ new.is_new_def = original.is_new_def
504
+ new.is_inferred_def = original.is_inferred_def
505
+
506
+ def visit_yield_from_expr(self, node: YieldFromExpr) -> YieldFromExpr:
507
+ return YieldFromExpr(self.expr(node.expr))
508
+
509
+ def visit_yield_expr(self, node: YieldExpr) -> YieldExpr:
510
+ return YieldExpr(self.optional_expr(node.expr))
511
+
512
+ def visit_await_expr(self, node: AwaitExpr) -> AwaitExpr:
513
+ return AwaitExpr(self.expr(node.expr))
514
+
515
+ def visit_call_expr(self, node: CallExpr) -> CallExpr:
516
+ return CallExpr(
517
+ self.expr(node.callee),
518
+ self.expressions(node.args),
519
+ node.arg_kinds.copy(),
520
+ node.arg_names.copy(),
521
+ self.optional_expr(node.analyzed),
522
+ )
523
+
524
+ def visit_op_expr(self, node: OpExpr) -> OpExpr:
525
+ new = OpExpr(
526
+ node.op,
527
+ self.expr(node.left),
528
+ self.expr(node.right),
529
+ cast(Optional[TypeAliasExpr], self.optional_expr(node.analyzed)),
530
+ )
531
+ new.method_type = self.optional_type(node.method_type)
532
+ return new
533
+
534
+ def visit_comparison_expr(self, node: ComparisonExpr) -> ComparisonExpr:
535
+ new = ComparisonExpr(node.operators, self.expressions(node.operands))
536
+ new.method_types = [self.optional_type(t) for t in node.method_types]
537
+ return new
538
+
539
+ def visit_cast_expr(self, node: CastExpr) -> CastExpr:
540
+ return CastExpr(self.expr(node.expr), self.type(node.type))
541
+
542
+ def visit_assert_type_expr(self, node: AssertTypeExpr) -> AssertTypeExpr:
543
+ return AssertTypeExpr(self.expr(node.expr), self.type(node.type))
544
+
545
+ def visit_reveal_expr(self, node: RevealExpr) -> RevealExpr:
546
+ if node.kind == REVEAL_TYPE:
547
+ assert node.expr is not None
548
+ return RevealExpr(kind=REVEAL_TYPE, expr=self.expr(node.expr))
549
+ else:
550
+ # Reveal locals expressions don't have any sub expressions
551
+ return node
552
+
553
+ def visit_super_expr(self, node: SuperExpr) -> SuperExpr:
554
+ call = self.expr(node.call)
555
+ assert isinstance(call, CallExpr)
556
+ new = SuperExpr(node.name, call)
557
+ new.info = node.info
558
+ return new
559
+
560
+ def visit_assignment_expr(self, node: AssignmentExpr) -> AssignmentExpr:
561
+ return AssignmentExpr(self.expr(node.target), self.expr(node.value))
562
+
563
+ def visit_unary_expr(self, node: UnaryExpr) -> UnaryExpr:
564
+ new = UnaryExpr(node.op, self.expr(node.expr))
565
+ new.method_type = self.optional_type(node.method_type)
566
+ return new
567
+
568
+ def visit_list_expr(self, node: ListExpr) -> ListExpr:
569
+ return ListExpr(self.expressions(node.items))
570
+
571
+ def visit_dict_expr(self, node: DictExpr) -> DictExpr:
572
+ return DictExpr(
573
+ [(self.expr(key) if key else None, self.expr(value)) for key, value in node.items]
574
+ )
575
+
576
+ def visit_tuple_expr(self, node: TupleExpr) -> TupleExpr:
577
+ return TupleExpr(self.expressions(node.items))
578
+
579
+ def visit_set_expr(self, node: SetExpr) -> SetExpr:
580
+ return SetExpr(self.expressions(node.items))
581
+
582
+ def visit_index_expr(self, node: IndexExpr) -> IndexExpr:
583
+ new = IndexExpr(self.expr(node.base), self.expr(node.index))
584
+ if node.method_type:
585
+ new.method_type = self.type(node.method_type)
586
+ if node.analyzed:
587
+ if isinstance(node.analyzed, TypeApplication):
588
+ new.analyzed = self.visit_type_application(node.analyzed)
589
+ else:
590
+ new.analyzed = self.visit_type_alias_expr(node.analyzed)
591
+ new.analyzed.set_line(node.analyzed)
592
+ return new
593
+
594
+ def visit_type_application(self, node: TypeApplication) -> TypeApplication:
595
+ return TypeApplication(self.expr(node.expr), self.types(node.types))
596
+
597
+ def visit_list_comprehension(self, node: ListComprehension) -> ListComprehension:
598
+ generator = self.duplicate_generator(node.generator)
599
+ generator.set_line(node.generator)
600
+ return ListComprehension(generator)
601
+
602
+ def visit_set_comprehension(self, node: SetComprehension) -> SetComprehension:
603
+ generator = self.duplicate_generator(node.generator)
604
+ generator.set_line(node.generator)
605
+ return SetComprehension(generator)
606
+
607
+ def visit_dictionary_comprehension(
608
+ self, node: DictionaryComprehension
609
+ ) -> DictionaryComprehension:
610
+ return DictionaryComprehension(
611
+ self.expr(node.key),
612
+ self.expr(node.value),
613
+ [self.expr(index) for index in node.indices],
614
+ [self.expr(s) for s in node.sequences],
615
+ [[self.expr(cond) for cond in conditions] for conditions in node.condlists],
616
+ node.is_async,
617
+ )
618
+
619
+ def visit_generator_expr(self, node: GeneratorExpr) -> GeneratorExpr:
620
+ return self.duplicate_generator(node)
621
+
622
+ def duplicate_generator(self, node: GeneratorExpr) -> GeneratorExpr:
623
+ return GeneratorExpr(
624
+ self.expr(node.left_expr),
625
+ [self.expr(index) for index in node.indices],
626
+ [self.expr(s) for s in node.sequences],
627
+ [[self.expr(cond) for cond in conditions] for conditions in node.condlists],
628
+ node.is_async,
629
+ )
630
+
631
+ def visit_slice_expr(self, node: SliceExpr) -> SliceExpr:
632
+ return SliceExpr(
633
+ self.optional_expr(node.begin_index),
634
+ self.optional_expr(node.end_index),
635
+ self.optional_expr(node.stride),
636
+ )
637
+
638
+ def visit_conditional_expr(self, node: ConditionalExpr) -> ConditionalExpr:
639
+ return ConditionalExpr(
640
+ self.expr(node.cond), self.expr(node.if_expr), self.expr(node.else_expr)
641
+ )
642
+
643
+ def visit_type_var_expr(self, node: TypeVarExpr) -> TypeVarExpr:
644
+ return TypeVarExpr(
645
+ node.name,
646
+ node.fullname,
647
+ self.types(node.values),
648
+ self.type(node.upper_bound),
649
+ self.type(node.default),
650
+ variance=node.variance,
651
+ )
652
+
653
+ def visit_paramspec_expr(self, node: ParamSpecExpr) -> ParamSpecExpr:
654
+ return ParamSpecExpr(
655
+ node.name,
656
+ node.fullname,
657
+ self.type(node.upper_bound),
658
+ self.type(node.default),
659
+ variance=node.variance,
660
+ )
661
+
662
+ def visit_type_var_tuple_expr(self, node: TypeVarTupleExpr) -> TypeVarTupleExpr:
663
+ return TypeVarTupleExpr(
664
+ node.name,
665
+ node.fullname,
666
+ self.type(node.upper_bound),
667
+ node.tuple_fallback,
668
+ self.type(node.default),
669
+ variance=node.variance,
670
+ )
671
+
672
+ def visit_type_alias_expr(self, node: TypeAliasExpr) -> TypeAliasExpr:
673
+ return TypeAliasExpr(node.node)
674
+
675
+ def visit_newtype_expr(self, node: NewTypeExpr) -> NewTypeExpr:
676
+ res = NewTypeExpr(node.name, node.old_type, line=node.line, column=node.column)
677
+ res.info = node.info
678
+ return res
679
+
680
+ def visit_namedtuple_expr(self, node: NamedTupleExpr) -> NamedTupleExpr:
681
+ return NamedTupleExpr(node.info)
682
+
683
+ def visit_enum_call_expr(self, node: EnumCallExpr) -> EnumCallExpr:
684
+ return EnumCallExpr(node.info, node.items, node.values)
685
+
686
+ def visit_typeddict_expr(self, node: TypedDictExpr) -> Node:
687
+ return TypedDictExpr(node.info)
688
+
689
+ def visit__promote_expr(self, node: PromoteExpr) -> PromoteExpr:
690
+ return PromoteExpr(node.type)
691
+
692
+ def visit_temp_node(self, node: TempNode) -> TempNode:
693
+ return TempNode(self.type(node.type))
694
+
695
+ def node(self, node: Node) -> Node:
696
+ new = node.accept(self)
697
+ new.set_line(node)
698
+ return new
699
+
700
+ def mypyfile(self, node: MypyFile) -> MypyFile:
701
+ new = node.accept(self)
702
+ assert isinstance(new, MypyFile)
703
+ new.set_line(node)
704
+ return new
705
+
706
+ def expr(self, expr: Expression) -> Expression:
707
+ new = expr.accept(self)
708
+ assert isinstance(new, Expression)
709
+ new.set_line(expr)
710
+ return new
711
+
712
+ def stmt(self, stmt: Statement) -> Statement:
713
+ new = stmt.accept(self)
714
+ assert isinstance(new, Statement)
715
+ new.set_line(stmt)
716
+ return new
717
+
718
+ def pattern(self, pattern: Pattern) -> Pattern:
719
+ new = pattern.accept(self)
720
+ assert isinstance(new, Pattern)
721
+ new.set_line(pattern)
722
+ return new
723
+
724
+ # Helpers
725
+ #
726
+ # All the node helpers also propagate line numbers.
727
+
728
+ def optional_expr(self, expr: Expression | None) -> Expression | None:
729
+ if expr:
730
+ return self.expr(expr)
731
+ else:
732
+ return None
733
+
734
+ def block(self, block: Block) -> Block:
735
+ new = self.visit_block(block)
736
+ new.line = block.line
737
+ return new
738
+
739
+ def optional_block(self, block: Block | None) -> Block | None:
740
+ if block:
741
+ return self.block(block)
742
+ else:
743
+ return None
744
+
745
+ def statements(self, statements: list[Statement]) -> list[Statement]:
746
+ return [self.stmt(stmt) for stmt in statements]
747
+
748
+ def expressions(self, expressions: list[Expression]) -> list[Expression]:
749
+ return [self.expr(expr) for expr in expressions]
750
+
751
+ def optional_expressions(
752
+ self, expressions: Iterable[Expression | None]
753
+ ) -> list[Expression | None]:
754
+ return [self.optional_expr(expr) for expr in expressions]
755
+
756
+ def blocks(self, blocks: list[Block]) -> list[Block]:
757
+ return [self.block(block) for block in blocks]
758
+
759
+ def names(self, names: list[NameExpr]) -> list[NameExpr]:
760
+ return [self.duplicate_name(name) for name in names]
761
+
762
+ def optional_names(self, names: Iterable[NameExpr | None]) -> list[NameExpr | None]:
763
+ result: list[NameExpr | None] = []
764
+ for name in names:
765
+ if name:
766
+ result.append(self.duplicate_name(name))
767
+ else:
768
+ result.append(None)
769
+ return result
770
+
771
+ def type(self, type: Type) -> Type:
772
+ # Override this method to transform types.
773
+ return type
774
+
775
+ def optional_type(self, type: Type | None) -> Type | None:
776
+ if type:
777
+ return self.type(type)
778
+ else:
779
+ return None
780
+
781
+ def types(self, types: list[Type]) -> list[Type]:
782
+ return [self.type(type) for type in types]
783
+
784
+
785
+ class FuncMapInitializer(TraverserVisitor):
786
+ """This traverser creates mappings from nested FuncDefs to placeholder FuncDefs.
787
+
788
+ The placeholders will later be replaced with transformed nodes.
789
+ """
790
+
791
+ def __init__(self, transformer: TransformVisitor) -> None:
792
+ self.transformer = transformer
793
+
794
+ def visit_func_def(self, node: FuncDef) -> None:
795
+ if node not in self.transformer.func_placeholder_map:
796
+ # Haven't seen this FuncDef before, so create a placeholder node.
797
+ self.transformer.func_placeholder_map[node] = FuncDef(
798
+ node.name, node.arguments, node.body, None
799
+ )
800
+ super().visit_func_def(node)