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/checkpattern.py ADDED
@@ -0,0 +1,801 @@
1
+ """Pattern checker. This file is conceptually part of TypeChecker."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections import defaultdict
6
+ from typing import Final, NamedTuple
7
+
8
+ import mypy.checker
9
+ from mypy import message_registry
10
+ from mypy.checkmember import analyze_member_access
11
+ from mypy.expandtype import expand_type_by_instance
12
+ from mypy.join import join_types
13
+ from mypy.literals import literal_hash
14
+ from mypy.maptype import map_instance_to_supertype
15
+ from mypy.meet import narrow_declared_type
16
+ from mypy.messages import MessageBuilder
17
+ from mypy.nodes import ARG_POS, Context, Expression, NameExpr, TypeAlias, TypeInfo, Var
18
+ from mypy.options import Options
19
+ from mypy.patterns import (
20
+ AsPattern,
21
+ ClassPattern,
22
+ MappingPattern,
23
+ OrPattern,
24
+ Pattern,
25
+ SequencePattern,
26
+ SingletonPattern,
27
+ StarredPattern,
28
+ ValuePattern,
29
+ )
30
+ from mypy.plugin import Plugin
31
+ from mypy.subtypes import is_subtype
32
+ from mypy.typeops import (
33
+ coerce_to_literal,
34
+ make_simplified_union,
35
+ try_getting_str_literals_from_type,
36
+ tuple_fallback,
37
+ )
38
+ from mypy.types import (
39
+ AnyType,
40
+ Instance,
41
+ LiteralType,
42
+ NoneType,
43
+ ProperType,
44
+ TupleType,
45
+ Type,
46
+ TypedDictType,
47
+ TypeOfAny,
48
+ TypeVarTupleType,
49
+ UninhabitedType,
50
+ UnionType,
51
+ UnpackType,
52
+ find_unpack_in_list,
53
+ get_proper_type,
54
+ split_with_prefix_and_suffix,
55
+ )
56
+ from mypy.typevars import fill_typevars
57
+ from mypy.visitor import PatternVisitor
58
+
59
+ self_match_type_names: Final = [
60
+ "builtins.bool",
61
+ "builtins.bytearray",
62
+ "builtins.bytes",
63
+ "builtins.dict",
64
+ "builtins.float",
65
+ "builtins.frozenset",
66
+ "builtins.int",
67
+ "builtins.list",
68
+ "builtins.set",
69
+ "builtins.str",
70
+ "builtins.tuple",
71
+ ]
72
+
73
+ non_sequence_match_type_names: Final = ["builtins.str", "builtins.bytes", "builtins.bytearray"]
74
+
75
+
76
+ # For every Pattern a PatternType can be calculated. This requires recursively calculating
77
+ # the PatternTypes of the sub-patterns first.
78
+ # Using the data in the PatternType the match subject and captured names can be narrowed/inferred.
79
+ class PatternType(NamedTuple):
80
+ type: Type # The type the match subject can be narrowed to
81
+ rest_type: Type # The remaining type if the pattern didn't match
82
+ captures: dict[Expression, Type] # The variables captured by the pattern
83
+
84
+
85
+ class PatternChecker(PatternVisitor[PatternType]):
86
+ """Pattern checker.
87
+
88
+ This class checks if a pattern can match a type, what the type can be narrowed to, and what
89
+ type capture patterns should be inferred as.
90
+ """
91
+
92
+ # Some services are provided by a TypeChecker instance.
93
+ chk: mypy.checker.TypeChecker
94
+ # This is shared with TypeChecker, but stored also here for convenience.
95
+ msg: MessageBuilder
96
+ # Currently unused
97
+ plugin: Plugin
98
+ # The expression being matched against the pattern
99
+ subject: Expression
100
+
101
+ subject_type: Type
102
+ # Type of the subject to check the (sub)pattern against
103
+ type_context: list[Type]
104
+ # Types that match against self instead of their __match_args__ if used as a class pattern
105
+ # Filled in from self_match_type_names
106
+ self_match_types: list[Type]
107
+ # Types that are sequences, but don't match sequence patterns. Filled in from
108
+ # non_sequence_match_type_names
109
+ non_sequence_match_types: list[Type]
110
+
111
+ options: Options
112
+
113
+ def __init__(
114
+ self, chk: mypy.checker.TypeChecker, msg: MessageBuilder, plugin: Plugin, options: Options
115
+ ) -> None:
116
+ self.chk = chk
117
+ self.msg = msg
118
+ self.plugin = plugin
119
+
120
+ self.type_context = []
121
+ self.self_match_types = self.generate_types_from_names(self_match_type_names)
122
+ self.non_sequence_match_types = self.generate_types_from_names(
123
+ non_sequence_match_type_names
124
+ )
125
+ self.options = options
126
+
127
+ def accept(self, o: Pattern, type_context: Type) -> PatternType:
128
+ self.type_context.append(type_context)
129
+ result = o.accept(self)
130
+ self.type_context.pop()
131
+
132
+ return result
133
+
134
+ def visit_as_pattern(self, o: AsPattern) -> PatternType:
135
+ current_type = self.type_context[-1]
136
+ if o.pattern is not None:
137
+ pattern_type = self.accept(o.pattern, current_type)
138
+ typ, rest_type, type_map = pattern_type
139
+ else:
140
+ typ, rest_type, type_map = current_type, UninhabitedType(), {}
141
+
142
+ if not is_uninhabited(typ) and o.name is not None:
143
+ typ, _ = self.chk.conditional_types_with_intersection(
144
+ current_type, [get_type_range(typ)], o, default=current_type
145
+ )
146
+ if not is_uninhabited(typ):
147
+ type_map[o.name] = typ
148
+
149
+ return PatternType(typ, rest_type, type_map)
150
+
151
+ def visit_or_pattern(self, o: OrPattern) -> PatternType:
152
+ current_type = self.type_context[-1]
153
+
154
+ #
155
+ # Check all the subpatterns
156
+ #
157
+ pattern_types = []
158
+ for pattern in o.patterns:
159
+ pattern_type = self.accept(pattern, current_type)
160
+ pattern_types.append(pattern_type)
161
+ current_type = pattern_type.rest_type
162
+
163
+ #
164
+ # Collect the final type
165
+ #
166
+ types = []
167
+ for pattern_type in pattern_types:
168
+ if not is_uninhabited(pattern_type.type):
169
+ types.append(pattern_type.type)
170
+
171
+ #
172
+ # Check the capture types
173
+ #
174
+ capture_types: dict[Var, list[tuple[Expression, Type]]] = defaultdict(list)
175
+ # Collect captures from the first subpattern
176
+ for expr, typ in pattern_types[0].captures.items():
177
+ node = get_var(expr)
178
+ capture_types[node].append((expr, typ))
179
+
180
+ # Check if other subpatterns capture the same names
181
+ for i, pattern_type in enumerate(pattern_types[1:]):
182
+ vars = {get_var(expr) for expr, _ in pattern_type.captures.items()}
183
+ if capture_types.keys() != vars:
184
+ self.msg.fail(message_registry.OR_PATTERN_ALTERNATIVE_NAMES, o.patterns[i])
185
+ for expr, typ in pattern_type.captures.items():
186
+ node = get_var(expr)
187
+ capture_types[node].append((expr, typ))
188
+
189
+ captures: dict[Expression, Type] = {}
190
+ for capture_list in capture_types.values():
191
+ typ = UninhabitedType()
192
+ for _, other in capture_list:
193
+ typ = join_types(typ, other)
194
+
195
+ captures[capture_list[0][0]] = typ
196
+
197
+ union_type = make_simplified_union(types)
198
+ return PatternType(union_type, current_type, captures)
199
+
200
+ def visit_value_pattern(self, o: ValuePattern) -> PatternType:
201
+ current_type = self.type_context[-1]
202
+ typ = self.chk.expr_checker.accept(o.expr)
203
+ typ = coerce_to_literal(typ)
204
+ narrowed_type, rest_type = self.chk.conditional_types_with_intersection(
205
+ current_type, [get_type_range(typ)], o, default=current_type
206
+ )
207
+ if not isinstance(get_proper_type(narrowed_type), (LiteralType, UninhabitedType)):
208
+ return PatternType(narrowed_type, UnionType.make_union([narrowed_type, rest_type]), {})
209
+ return PatternType(narrowed_type, rest_type, {})
210
+
211
+ def visit_singleton_pattern(self, o: SingletonPattern) -> PatternType:
212
+ current_type = self.type_context[-1]
213
+ value: bool | None = o.value
214
+ if isinstance(value, bool):
215
+ typ = self.chk.expr_checker.infer_literal_expr_type(value, "builtins.bool")
216
+ elif value is None:
217
+ typ = NoneType()
218
+ else:
219
+ assert False
220
+
221
+ narrowed_type, rest_type = self.chk.conditional_types_with_intersection(
222
+ current_type, [get_type_range(typ)], o, default=current_type
223
+ )
224
+ return PatternType(narrowed_type, rest_type, {})
225
+
226
+ def visit_sequence_pattern(self, o: SequencePattern) -> PatternType:
227
+ #
228
+ # check for existence of a starred pattern
229
+ #
230
+ current_type = get_proper_type(self.type_context[-1])
231
+ if not self.can_match_sequence(current_type):
232
+ return self.early_non_match()
233
+ star_positions = [i for i, p in enumerate(o.patterns) if isinstance(p, StarredPattern)]
234
+ star_position: int | None = None
235
+ if len(star_positions) == 1:
236
+ star_position = star_positions[0]
237
+ elif len(star_positions) >= 2:
238
+ assert False, "Parser should prevent multiple starred patterns"
239
+ required_patterns = len(o.patterns)
240
+ if star_position is not None:
241
+ required_patterns -= 1
242
+
243
+ #
244
+ # get inner types of original type
245
+ #
246
+ unpack_index = None
247
+ if isinstance(current_type, TupleType):
248
+ inner_types = current_type.items
249
+ unpack_index = find_unpack_in_list(inner_types)
250
+ if unpack_index is None:
251
+ size_diff = len(inner_types) - required_patterns
252
+ if size_diff < 0:
253
+ return self.early_non_match()
254
+ elif size_diff > 0 and star_position is None:
255
+ return self.early_non_match()
256
+ else:
257
+ normalized_inner_types = []
258
+ for it in inner_types:
259
+ # Unfortunately, it is not possible to "split" the TypeVarTuple
260
+ # into individual items, so we just use its upper bound for the whole
261
+ # analysis instead.
262
+ if isinstance(it, UnpackType) and isinstance(it.type, TypeVarTupleType):
263
+ it = UnpackType(it.type.upper_bound)
264
+ normalized_inner_types.append(it)
265
+ inner_types = normalized_inner_types
266
+ current_type = current_type.copy_modified(items=normalized_inner_types)
267
+ if len(inner_types) - 1 > required_patterns and star_position is None:
268
+ return self.early_non_match()
269
+ else:
270
+ inner_type = self.get_sequence_type(current_type, o)
271
+ if inner_type is None:
272
+ inner_type = self.chk.named_type("builtins.object")
273
+ inner_types = [inner_type] * len(o.patterns)
274
+
275
+ #
276
+ # match inner patterns
277
+ #
278
+ contracted_new_inner_types: list[Type] = []
279
+ contracted_rest_inner_types: list[Type] = []
280
+ captures: dict[Expression, Type] = {}
281
+
282
+ contracted_inner_types = self.contract_starred_pattern_types(
283
+ inner_types, star_position, required_patterns
284
+ )
285
+ for p, t in zip(o.patterns, contracted_inner_types):
286
+ pattern_type = self.accept(p, t)
287
+ typ, rest, type_map = pattern_type
288
+ contracted_new_inner_types.append(typ)
289
+ contracted_rest_inner_types.append(rest)
290
+ self.update_type_map(captures, type_map)
291
+
292
+ new_inner_types = self.expand_starred_pattern_types(
293
+ contracted_new_inner_types, star_position, len(inner_types), unpack_index is not None
294
+ )
295
+ rest_inner_types = self.expand_starred_pattern_types(
296
+ contracted_rest_inner_types, star_position, len(inner_types), unpack_index is not None
297
+ )
298
+
299
+ #
300
+ # Calculate new type
301
+ #
302
+ new_type: Type
303
+ rest_type: Type = current_type
304
+ if isinstance(current_type, TupleType) and unpack_index is None:
305
+ narrowed_inner_types = []
306
+ inner_rest_types = []
307
+ for inner_type, new_inner_type in zip(inner_types, new_inner_types):
308
+ (narrowed_inner_type, inner_rest_type) = (
309
+ self.chk.conditional_types_with_intersection(
310
+ new_inner_type, [get_type_range(inner_type)], o, default=new_inner_type
311
+ )
312
+ )
313
+ narrowed_inner_types.append(narrowed_inner_type)
314
+ inner_rest_types.append(inner_rest_type)
315
+ if all(not is_uninhabited(typ) for typ in narrowed_inner_types):
316
+ new_type = TupleType(narrowed_inner_types, current_type.partial_fallback)
317
+ else:
318
+ new_type = UninhabitedType()
319
+
320
+ if all(is_uninhabited(typ) for typ in inner_rest_types):
321
+ # All subpatterns always match, so we can apply negative narrowing
322
+ rest_type = TupleType(rest_inner_types, current_type.partial_fallback)
323
+ elif isinstance(current_type, TupleType):
324
+ # For variadic tuples it is too tricky to match individual items like for fixed
325
+ # tuples, so we instead try to narrow the entire type.
326
+ # TODO: use more precise narrowing when possible (e.g. for identical shapes).
327
+ new_tuple_type = TupleType(new_inner_types, current_type.partial_fallback)
328
+ new_type, rest_type = self.chk.conditional_types_with_intersection(
329
+ new_tuple_type, [get_type_range(current_type)], o, default=new_tuple_type
330
+ )
331
+ else:
332
+ new_inner_type = UninhabitedType()
333
+ for typ in new_inner_types:
334
+ new_inner_type = join_types(new_inner_type, typ)
335
+ new_type = self.construct_sequence_child(current_type, new_inner_type)
336
+ if is_subtype(new_type, current_type):
337
+ new_type, _ = self.chk.conditional_types_with_intersection(
338
+ current_type, [get_type_range(new_type)], o, default=current_type
339
+ )
340
+ else:
341
+ new_type = current_type
342
+ return PatternType(new_type, rest_type, captures)
343
+
344
+ def get_sequence_type(self, t: Type, context: Context) -> Type | None:
345
+ t = get_proper_type(t)
346
+ if isinstance(t, AnyType):
347
+ return AnyType(TypeOfAny.from_another_any, t)
348
+ if isinstance(t, UnionType):
349
+ items = [self.get_sequence_type(item, context) for item in t.items]
350
+ not_none_items = [item for item in items if item is not None]
351
+ if not_none_items:
352
+ return make_simplified_union(not_none_items)
353
+ else:
354
+ return None
355
+
356
+ if self.chk.type_is_iterable(t) and isinstance(t, (Instance, TupleType)):
357
+ if isinstance(t, TupleType):
358
+ t = tuple_fallback(t)
359
+ return self.chk.iterable_item_type(t, context)
360
+ else:
361
+ return None
362
+
363
+ def contract_starred_pattern_types(
364
+ self, types: list[Type], star_pos: int | None, num_patterns: int
365
+ ) -> list[Type]:
366
+ """
367
+ Contracts a list of types in a sequence pattern depending on the position of a starred
368
+ capture pattern.
369
+
370
+ For example if the sequence pattern [a, *b, c] is matched against types [bool, int, str,
371
+ bytes] the contracted types are [bool, Union[int, str], bytes].
372
+
373
+ If star_pos in None the types are returned unchanged.
374
+ """
375
+ unpack_index = find_unpack_in_list(types)
376
+ if unpack_index is not None:
377
+ # Variadic tuples require "re-shaping" to match the requested pattern.
378
+ unpack = types[unpack_index]
379
+ assert isinstance(unpack, UnpackType)
380
+ unpacked = get_proper_type(unpack.type)
381
+ # This should be guaranteed by the normalization in the caller.
382
+ assert isinstance(unpacked, Instance) and unpacked.type.fullname == "builtins.tuple"
383
+ if star_pos is None:
384
+ missing = num_patterns - len(types) + 1
385
+ new_types = types[:unpack_index]
386
+ new_types += [unpacked.args[0]] * missing
387
+ new_types += types[unpack_index + 1 :]
388
+ return new_types
389
+ prefix, middle, suffix = split_with_prefix_and_suffix(
390
+ tuple([UnpackType(unpacked) if isinstance(t, UnpackType) else t for t in types]),
391
+ star_pos,
392
+ num_patterns - star_pos,
393
+ )
394
+ new_middle = []
395
+ for m in middle:
396
+ # The existing code expects the star item type, rather than the type of
397
+ # the whole tuple "slice".
398
+ if isinstance(m, UnpackType):
399
+ new_middle.append(unpacked.args[0])
400
+ else:
401
+ new_middle.append(m)
402
+ return list(prefix) + [make_simplified_union(new_middle)] + list(suffix)
403
+ else:
404
+ if star_pos is None:
405
+ return types
406
+ new_types = types[:star_pos]
407
+ star_length = len(types) - num_patterns
408
+ new_types.append(make_simplified_union(types[star_pos : star_pos + star_length]))
409
+ new_types += types[star_pos + star_length :]
410
+ return new_types
411
+
412
+ def expand_starred_pattern_types(
413
+ self, types: list[Type], star_pos: int | None, num_types: int, original_unpack: bool
414
+ ) -> list[Type]:
415
+ """Undoes the contraction done by contract_starred_pattern_types.
416
+
417
+ For example if the sequence pattern is [a, *b, c] and types [bool, int, str] are extended
418
+ to length 4 the result is [bool, int, int, str].
419
+ """
420
+ if star_pos is None:
421
+ return types
422
+ if original_unpack:
423
+ # In the case where original tuple type has an unpack item, it is not practical
424
+ # to coerce pattern type back to the original shape (and may not even be possible),
425
+ # so we only restore the type of the star item.
426
+ res = []
427
+ for i, t in enumerate(types):
428
+ if i != star_pos:
429
+ res.append(t)
430
+ else:
431
+ res.append(UnpackType(self.chk.named_generic_type("builtins.tuple", [t])))
432
+ return res
433
+ new_types = types[:star_pos]
434
+ star_length = num_types - len(types) + 1
435
+ new_types += [types[star_pos]] * star_length
436
+ new_types += types[star_pos + 1 :]
437
+
438
+ return new_types
439
+
440
+ def visit_starred_pattern(self, o: StarredPattern) -> PatternType:
441
+ captures: dict[Expression, Type] = {}
442
+ if o.capture is not None:
443
+ list_type = self.chk.named_generic_type("builtins.list", [self.type_context[-1]])
444
+ captures[o.capture] = list_type
445
+ return PatternType(self.type_context[-1], UninhabitedType(), captures)
446
+
447
+ def visit_mapping_pattern(self, o: MappingPattern) -> PatternType:
448
+ current_type = get_proper_type(self.type_context[-1])
449
+ can_match = True
450
+ captures: dict[Expression, Type] = {}
451
+ for key, value in zip(o.keys, o.values):
452
+ inner_type = self.get_mapping_item_type(o, current_type, key)
453
+ if inner_type is None:
454
+ can_match = False
455
+ inner_type = self.chk.named_type("builtins.object")
456
+ pattern_type = self.accept(value, inner_type)
457
+ if is_uninhabited(pattern_type.type):
458
+ can_match = False
459
+ else:
460
+ self.update_type_map(captures, pattern_type.captures)
461
+
462
+ if o.rest is not None:
463
+ mapping = self.chk.named_type("typing.Mapping")
464
+ if is_subtype(current_type, mapping) and isinstance(current_type, Instance):
465
+ mapping_inst = map_instance_to_supertype(current_type, mapping.type)
466
+ dict_typeinfo = self.chk.lookup_typeinfo("builtins.dict")
467
+ rest_type = Instance(dict_typeinfo, mapping_inst.args)
468
+ else:
469
+ object_type = self.chk.named_type("builtins.object")
470
+ rest_type = self.chk.named_generic_type(
471
+ "builtins.dict", [object_type, object_type]
472
+ )
473
+
474
+ captures[o.rest] = rest_type
475
+
476
+ if can_match:
477
+ # We can't narrow the type here, as Mapping key is invariant.
478
+ new_type = self.type_context[-1]
479
+ else:
480
+ new_type = UninhabitedType()
481
+ return PatternType(new_type, current_type, captures)
482
+
483
+ def get_mapping_item_type(
484
+ self, pattern: MappingPattern, mapping_type: Type, key: Expression
485
+ ) -> Type | None:
486
+ mapping_type = get_proper_type(mapping_type)
487
+ if isinstance(mapping_type, TypedDictType):
488
+ with self.msg.filter_errors() as local_errors:
489
+ result: Type | None = self.chk.expr_checker.visit_typeddict_index_expr(
490
+ mapping_type, key
491
+ )
492
+ has_local_errors = local_errors.has_new_errors()
493
+ # If we can't determine the type statically fall back to treating it as a normal
494
+ # mapping
495
+ if has_local_errors:
496
+ with self.msg.filter_errors() as local_errors:
497
+ result = self.get_simple_mapping_item_type(pattern, mapping_type, key)
498
+
499
+ if local_errors.has_new_errors():
500
+ result = None
501
+ else:
502
+ with self.msg.filter_errors():
503
+ result = self.get_simple_mapping_item_type(pattern, mapping_type, key)
504
+ return result
505
+
506
+ def get_simple_mapping_item_type(
507
+ self, pattern: MappingPattern, mapping_type: Type, key: Expression
508
+ ) -> Type:
509
+ result, _ = self.chk.expr_checker.check_method_call_by_name(
510
+ "__getitem__", mapping_type, [key], [ARG_POS], pattern
511
+ )
512
+ return result
513
+
514
+ def visit_class_pattern(self, o: ClassPattern) -> PatternType:
515
+ current_type = get_proper_type(self.type_context[-1])
516
+
517
+ #
518
+ # Check class type
519
+ #
520
+ type_info = o.class_ref.node
521
+ if type_info is None:
522
+ return PatternType(AnyType(TypeOfAny.from_error), AnyType(TypeOfAny.from_error), {})
523
+ if isinstance(type_info, TypeAlias) and not type_info.no_args:
524
+ self.msg.fail(message_registry.CLASS_PATTERN_GENERIC_TYPE_ALIAS, o)
525
+ return self.early_non_match()
526
+ if isinstance(type_info, TypeInfo):
527
+ any_type = AnyType(TypeOfAny.implementation_artifact)
528
+ args: list[Type] = []
529
+ for tv in type_info.defn.type_vars:
530
+ if isinstance(tv, TypeVarTupleType):
531
+ args.append(
532
+ UnpackType(self.chk.named_generic_type("builtins.tuple", [any_type]))
533
+ )
534
+ else:
535
+ args.append(any_type)
536
+ typ: Type = Instance(type_info, args)
537
+ elif isinstance(type_info, TypeAlias):
538
+ typ = type_info.target
539
+ elif (
540
+ isinstance(type_info, Var)
541
+ and type_info.type is not None
542
+ and isinstance(get_proper_type(type_info.type), AnyType)
543
+ ):
544
+ typ = type_info.type
545
+ else:
546
+ if isinstance(type_info, Var) and type_info.type is not None:
547
+ name = type_info.type.str_with_options(self.options)
548
+ else:
549
+ name = type_info.name
550
+ self.msg.fail(message_registry.CLASS_PATTERN_TYPE_REQUIRED.format(name), o)
551
+ return self.early_non_match()
552
+
553
+ new_type, rest_type = self.chk.conditional_types_with_intersection(
554
+ current_type, [get_type_range(typ)], o, default=current_type
555
+ )
556
+ if is_uninhabited(new_type):
557
+ return self.early_non_match()
558
+ # TODO: Do I need this?
559
+ narrowed_type = narrow_declared_type(current_type, new_type)
560
+
561
+ #
562
+ # Convert positional to keyword patterns
563
+ #
564
+ keyword_pairs: list[tuple[str | None, Pattern]] = []
565
+ match_arg_set: set[str] = set()
566
+
567
+ captures: dict[Expression, Type] = {}
568
+
569
+ if len(o.positionals) != 0:
570
+ if self.should_self_match(typ):
571
+ if len(o.positionals) > 1:
572
+ self.msg.fail(message_registry.CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGS, o)
573
+ pattern_type = self.accept(o.positionals[0], narrowed_type)
574
+ if not is_uninhabited(pattern_type.type):
575
+ return PatternType(
576
+ pattern_type.type,
577
+ join_types(rest_type, pattern_type.rest_type),
578
+ pattern_type.captures,
579
+ )
580
+ captures = pattern_type.captures
581
+ else:
582
+ with self.msg.filter_errors() as local_errors:
583
+ match_args_type = analyze_member_access(
584
+ "__match_args__",
585
+ typ,
586
+ o,
587
+ False,
588
+ False,
589
+ False,
590
+ self.msg,
591
+ original_type=typ,
592
+ chk=self.chk,
593
+ )
594
+ has_local_errors = local_errors.has_new_errors()
595
+ if has_local_errors:
596
+ self.msg.fail(
597
+ message_registry.MISSING_MATCH_ARGS.format(
598
+ typ.str_with_options(self.options)
599
+ ),
600
+ o,
601
+ )
602
+ return self.early_non_match()
603
+
604
+ proper_match_args_type = get_proper_type(match_args_type)
605
+ if isinstance(proper_match_args_type, TupleType):
606
+ match_arg_names = get_match_arg_names(proper_match_args_type)
607
+
608
+ if len(o.positionals) > len(match_arg_names):
609
+ self.msg.fail(message_registry.CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGS, o)
610
+ return self.early_non_match()
611
+ else:
612
+ match_arg_names = [None] * len(o.positionals)
613
+
614
+ for arg_name, pos in zip(match_arg_names, o.positionals):
615
+ keyword_pairs.append((arg_name, pos))
616
+ if arg_name is not None:
617
+ match_arg_set.add(arg_name)
618
+
619
+ #
620
+ # Check for duplicate patterns
621
+ #
622
+ keyword_arg_set = set()
623
+ has_duplicates = False
624
+ for key, value in zip(o.keyword_keys, o.keyword_values):
625
+ keyword_pairs.append((key, value))
626
+ if key in match_arg_set:
627
+ self.msg.fail(
628
+ message_registry.CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL.format(key), value
629
+ )
630
+ has_duplicates = True
631
+ elif key in keyword_arg_set:
632
+ self.msg.fail(
633
+ message_registry.CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERN.format(key), value
634
+ )
635
+ has_duplicates = True
636
+ keyword_arg_set.add(key)
637
+
638
+ if has_duplicates:
639
+ return self.early_non_match()
640
+
641
+ #
642
+ # Check keyword patterns
643
+ #
644
+ can_match = True
645
+ for keyword, pattern in keyword_pairs:
646
+ key_type: Type | None = None
647
+ with self.msg.filter_errors() as local_errors:
648
+ if keyword is not None:
649
+ key_type = analyze_member_access(
650
+ keyword,
651
+ narrowed_type,
652
+ pattern,
653
+ False,
654
+ False,
655
+ False,
656
+ self.msg,
657
+ original_type=new_type,
658
+ chk=self.chk,
659
+ )
660
+ else:
661
+ key_type = AnyType(TypeOfAny.from_error)
662
+ has_local_errors = local_errors.has_new_errors()
663
+ if has_local_errors or key_type is None:
664
+ key_type = AnyType(TypeOfAny.from_error)
665
+ self.msg.fail(
666
+ message_registry.CLASS_PATTERN_UNKNOWN_KEYWORD.format(
667
+ typ.str_with_options(self.options), keyword
668
+ ),
669
+ pattern,
670
+ )
671
+
672
+ inner_type, inner_rest_type, inner_captures = self.accept(pattern, key_type)
673
+ if is_uninhabited(inner_type):
674
+ can_match = False
675
+ else:
676
+ self.update_type_map(captures, inner_captures)
677
+ if not is_uninhabited(inner_rest_type):
678
+ rest_type = current_type
679
+
680
+ if not can_match:
681
+ new_type = UninhabitedType()
682
+ return PatternType(new_type, rest_type, captures)
683
+
684
+ def should_self_match(self, typ: Type) -> bool:
685
+ typ = get_proper_type(typ)
686
+ if isinstance(typ, Instance) and typ.type.is_named_tuple:
687
+ return False
688
+ for other in self.self_match_types:
689
+ if is_subtype(typ, other):
690
+ return True
691
+ return False
692
+
693
+ def can_match_sequence(self, typ: ProperType) -> bool:
694
+ if isinstance(typ, UnionType):
695
+ return any(self.can_match_sequence(get_proper_type(item)) for item in typ.items)
696
+ for other in self.non_sequence_match_types:
697
+ # We have to ignore promotions, as memoryview should match, but bytes,
698
+ # which it can be promoted to, shouldn't
699
+ if is_subtype(typ, other, ignore_promotions=True):
700
+ return False
701
+ sequence = self.chk.named_type("typing.Sequence")
702
+ # If the static type is more general than sequence the actual type could still match
703
+ return is_subtype(typ, sequence) or is_subtype(sequence, typ)
704
+
705
+ def generate_types_from_names(self, type_names: list[str]) -> list[Type]:
706
+ types: list[Type] = []
707
+ for name in type_names:
708
+ try:
709
+ types.append(self.chk.named_type(name))
710
+ except KeyError as e:
711
+ # Some built in types are not defined in all test cases
712
+ if not name.startswith("builtins."):
713
+ raise e
714
+ return types
715
+
716
+ def update_type_map(
717
+ self, original_type_map: dict[Expression, Type], extra_type_map: dict[Expression, Type]
718
+ ) -> None:
719
+ # Calculating this would not be needed if TypeMap directly used literal hashes instead of
720
+ # expressions, as suggested in the TODO above it's definition
721
+ already_captured = {literal_hash(expr) for expr in original_type_map}
722
+ for expr, typ in extra_type_map.items():
723
+ if literal_hash(expr) in already_captured:
724
+ node = get_var(expr)
725
+ self.msg.fail(
726
+ message_registry.MULTIPLE_ASSIGNMENTS_IN_PATTERN.format(node.name), expr
727
+ )
728
+ else:
729
+ original_type_map[expr] = typ
730
+
731
+ def construct_sequence_child(self, outer_type: Type, inner_type: Type) -> Type:
732
+ """
733
+ If outer_type is a child class of typing.Sequence returns a new instance of
734
+ outer_type, that is a Sequence of inner_type. If outer_type is not a child class of
735
+ typing.Sequence just returns a Sequence of inner_type
736
+
737
+ For example:
738
+ construct_sequence_child(List[int], str) = List[str]
739
+
740
+ TODO: this doesn't make sense. For example if one has class S(Sequence[int], Generic[T])
741
+ or class T(Sequence[Tuple[T, T]]), there is no way any of those can map to Sequence[str].
742
+ """
743
+ proper_type = get_proper_type(outer_type)
744
+ if isinstance(proper_type, UnionType):
745
+ types = [
746
+ self.construct_sequence_child(item, inner_type)
747
+ for item in proper_type.items
748
+ if self.can_match_sequence(get_proper_type(item))
749
+ ]
750
+ return make_simplified_union(types)
751
+ sequence = self.chk.named_generic_type("typing.Sequence", [inner_type])
752
+ if is_subtype(outer_type, self.chk.named_type("typing.Sequence")):
753
+ proper_type = get_proper_type(outer_type)
754
+ if isinstance(proper_type, TupleType):
755
+ proper_type = tuple_fallback(proper_type)
756
+ assert isinstance(proper_type, Instance)
757
+ empty_type = fill_typevars(proper_type.type)
758
+ partial_type = expand_type_by_instance(empty_type, sequence)
759
+ return expand_type_by_instance(partial_type, proper_type)
760
+ else:
761
+ return sequence
762
+
763
+ def early_non_match(self) -> PatternType:
764
+ return PatternType(UninhabitedType(), self.type_context[-1], {})
765
+
766
+
767
+ def get_match_arg_names(typ: TupleType) -> list[str | None]:
768
+ args: list[str | None] = []
769
+ for item in typ.items:
770
+ values = try_getting_str_literals_from_type(item)
771
+ if values is None or len(values) != 1:
772
+ args.append(None)
773
+ else:
774
+ args.append(values[0])
775
+ return args
776
+
777
+
778
+ def get_var(expr: Expression) -> Var:
779
+ """
780
+ Warning: this in only true for expressions captured by a match statement.
781
+ Don't call it from anywhere else
782
+ """
783
+ assert isinstance(expr, NameExpr)
784
+ node = expr.node
785
+ assert isinstance(node, Var)
786
+ return node
787
+
788
+
789
+ def get_type_range(typ: Type) -> mypy.checker.TypeRange:
790
+ typ = get_proper_type(typ)
791
+ if (
792
+ isinstance(typ, Instance)
793
+ and typ.last_known_value
794
+ and isinstance(typ.last_known_value.value, bool)
795
+ ):
796
+ typ = typ.last_known_value
797
+ return mypy.checker.TypeRange(typ, is_upper_bound=False)
798
+
799
+
800
+ def is_uninhabited(typ: Type) -> bool:
801
+ return isinstance(get_proper_type(typ), UninhabitedType)