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
mypyc/ir/rtypes.py ADDED
@@ -0,0 +1,1038 @@
1
+ """Types used in the intermediate representation.
2
+
3
+ These are runtime types (RTypes), as opposed to mypy Type objects.
4
+ The latter are only used during type checking and not directly used at
5
+ runtime. Runtime types are derived from mypy types, but there's no
6
+ simple one-to-one correspondence. (Here 'runtime' means 'runtime
7
+ checked'.)
8
+
9
+ The generated IR ensures some runtime type safety properties based on
10
+ RTypes. Compiled code can assume that the runtime value matches the
11
+ static RType of a value. If the RType of a register is 'builtins.str'
12
+ (str_rprimitive), for example, the generated IR will ensure that the
13
+ register will have a 'str' object.
14
+
15
+ RTypes are simpler and less expressive than mypy (or PEP 484)
16
+ types. For example, all mypy types of form 'list[T]' (for arbitrary T)
17
+ are erased to the single RType 'builtins.list' (list_rprimitive).
18
+
19
+ mypyc.irbuild.mapper.Mapper.type_to_rtype converts mypy Types to mypyc
20
+ RTypes.
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ from abc import abstractmethod
26
+ from typing import TYPE_CHECKING, ClassVar, Final, Generic, TypeVar
27
+ from typing_extensions import TypeGuard
28
+
29
+ from mypyc.common import IS_32_BIT_PLATFORM, PLATFORM_SIZE, JsonDict, short_name
30
+ from mypyc.namegen import NameGenerator
31
+
32
+ if TYPE_CHECKING:
33
+ from mypyc.ir.class_ir import ClassIR
34
+ from mypyc.ir.ops import DeserMaps
35
+
36
+ T = TypeVar("T")
37
+
38
+
39
+ class RType:
40
+ """Abstract base class for runtime types (erased, only concrete; no generics)."""
41
+
42
+ name: str
43
+ # If True, the type has a special unboxed representation. If False, the
44
+ # type is represented as PyObject *. Even if True, the representation
45
+ # may contain pointers.
46
+ is_unboxed = False
47
+ # This is the C undefined value for this type. It's used for initialization
48
+ # if there's no value yet, and for function return value on error/exception.
49
+ #
50
+ # TODO: This shouldn't be specific to C or a string
51
+ c_undefined: str
52
+ # If unboxed: does the unboxed version use reference counting?
53
+ is_refcounted = True
54
+ # C type; use Emitter.ctype() to access
55
+ _ctype: str
56
+ # If True, error/undefined value overlaps with a valid value. To
57
+ # detect an exception, PyErr_Occurred() must be used in addition
58
+ # to checking for error value as the return value of a function.
59
+ #
60
+ # For example, no i64 value can be reserved for error value, so we
61
+ # pick an arbitrary value (e.g. -113) to signal error, but this is
62
+ # also a valid non-error value.
63
+ error_overlap = False
64
+
65
+ @abstractmethod
66
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
67
+ raise NotImplementedError
68
+
69
+ def short_name(self) -> str:
70
+ return short_name(self.name)
71
+
72
+ def __str__(self) -> str:
73
+ return short_name(self.name)
74
+
75
+ def __repr__(self) -> str:
76
+ return "<%s>" % self.__class__.__name__
77
+
78
+ def serialize(self) -> JsonDict | str:
79
+ raise NotImplementedError(f"Cannot serialize {self.__class__.__name__} instance")
80
+
81
+
82
+ def deserialize_type(data: JsonDict | str, ctx: DeserMaps) -> RType:
83
+ """Deserialize a JSON-serialized RType.
84
+
85
+ Arguments:
86
+ data: The decoded JSON of the serialized type
87
+ ctx: The deserialization maps to use
88
+ """
89
+ # Since there are so few types, we just case on them directly. If
90
+ # more get added we should switch to a system like mypy.types
91
+ # uses.
92
+ if isinstance(data, str):
93
+ if data in ctx.classes:
94
+ return RInstance(ctx.classes[data])
95
+ elif data in RPrimitive.primitive_map:
96
+ return RPrimitive.primitive_map[data]
97
+ elif data == "void":
98
+ return RVoid()
99
+ else:
100
+ assert False, f"Can't find class {data}"
101
+ elif data[".class"] == "RTuple":
102
+ return RTuple.deserialize(data, ctx)
103
+ elif data[".class"] == "RUnion":
104
+ return RUnion.deserialize(data, ctx)
105
+ raise NotImplementedError("unexpected .class {}".format(data[".class"]))
106
+
107
+
108
+ class RTypeVisitor(Generic[T]):
109
+ """Generic visitor over RTypes (uses the visitor design pattern)."""
110
+
111
+ @abstractmethod
112
+ def visit_rprimitive(self, typ: RPrimitive) -> T:
113
+ raise NotImplementedError
114
+
115
+ @abstractmethod
116
+ def visit_rinstance(self, typ: RInstance) -> T:
117
+ raise NotImplementedError
118
+
119
+ @abstractmethod
120
+ def visit_runion(self, typ: RUnion) -> T:
121
+ raise NotImplementedError
122
+
123
+ @abstractmethod
124
+ def visit_rtuple(self, typ: RTuple) -> T:
125
+ raise NotImplementedError
126
+
127
+ @abstractmethod
128
+ def visit_rstruct(self, typ: RStruct) -> T:
129
+ raise NotImplementedError
130
+
131
+ @abstractmethod
132
+ def visit_rarray(self, typ: RArray) -> T:
133
+ raise NotImplementedError
134
+
135
+ @abstractmethod
136
+ def visit_rvoid(self, typ: RVoid) -> T:
137
+ raise NotImplementedError
138
+
139
+
140
+ class RVoid(RType):
141
+ """The void type (no value).
142
+
143
+ This is a singleton -- use void_rtype (below) to refer to this instead of
144
+ constructing a new instance.
145
+ """
146
+
147
+ is_unboxed = False
148
+ name = "void"
149
+ ctype = "void"
150
+
151
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
152
+ return visitor.visit_rvoid(self)
153
+
154
+ def serialize(self) -> str:
155
+ return "void"
156
+
157
+ def __eq__(self, other: object) -> bool:
158
+ return isinstance(other, RVoid)
159
+
160
+ def __hash__(self) -> int:
161
+ return hash(RVoid)
162
+
163
+
164
+ # Singleton instance of RVoid
165
+ void_rtype: Final = RVoid()
166
+
167
+
168
+ class RPrimitive(RType):
169
+ """Primitive type such as 'object' or 'int'.
170
+
171
+ These often have custom ops associated with them. The 'object'
172
+ primitive type can be used to hold arbitrary Python objects.
173
+
174
+ Different primitive types have different representations, and
175
+ primitives may be unboxed or boxed. Primitive types don't need to
176
+ directly correspond to Python types, but most do.
177
+
178
+ NOTE: All supported primitive types are defined below
179
+ (e.g. object_rprimitive).
180
+ """
181
+
182
+ # Map from primitive names to primitive types and is used by deserialization
183
+ primitive_map: ClassVar[dict[str, RPrimitive]] = {}
184
+
185
+ def __init__(
186
+ self,
187
+ name: str,
188
+ *,
189
+ is_unboxed: bool,
190
+ is_refcounted: bool,
191
+ is_native_int: bool = False,
192
+ is_signed: bool = False,
193
+ ctype: str = "PyObject *",
194
+ size: int = PLATFORM_SIZE,
195
+ error_overlap: bool = False,
196
+ ) -> None:
197
+ RPrimitive.primitive_map[name] = self
198
+
199
+ self.name = name
200
+ self.is_unboxed = is_unboxed
201
+ self.is_refcounted = is_refcounted
202
+ self.is_native_int = is_native_int
203
+ self.is_signed = is_signed
204
+ self._ctype = ctype
205
+ self.size = size
206
+ self.error_overlap = error_overlap
207
+ if ctype == "CPyTagged":
208
+ self.c_undefined = "CPY_INT_TAG"
209
+ elif ctype in ("int16_t", "int32_t", "int64_t"):
210
+ # This is basically an arbitrary value that is pretty
211
+ # unlikely to overlap with a real value.
212
+ self.c_undefined = "-113"
213
+ elif ctype == "CPyPtr":
214
+ # TODO: Invent an overlapping error value?
215
+ self.c_undefined = "0"
216
+ elif ctype == "PyObject *":
217
+ # Boxed types use the null pointer as the error value.
218
+ self.c_undefined = "NULL"
219
+ elif ctype == "char":
220
+ self.c_undefined = "2"
221
+ elif ctype in ("PyObject **", "void *"):
222
+ self.c_undefined = "NULL"
223
+ elif ctype == "double":
224
+ self.c_undefined = "-113.0"
225
+ elif ctype in ("uint8_t", "uint16_t", "uint32_t", "uint64_t"):
226
+ self.c_undefined = "239" # An arbitrary number
227
+ else:
228
+ assert False, "Unrecognized ctype: %r" % ctype
229
+
230
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
231
+ return visitor.visit_rprimitive(self)
232
+
233
+ def serialize(self) -> str:
234
+ return self.name
235
+
236
+ def __repr__(self) -> str:
237
+ return "<RPrimitive %s>" % self.name
238
+
239
+ def __eq__(self, other: object) -> bool:
240
+ return isinstance(other, RPrimitive) and other.name == self.name
241
+
242
+ def __hash__(self) -> int:
243
+ return hash(self.name)
244
+
245
+
246
+ # NOTE: All the supported instances of RPrimitive are defined
247
+ # below. Use these instead of creating new instances.
248
+
249
+ # Used to represent arbitrary objects and dynamically typed (Any)
250
+ # values. There are various ops that let you perform generic, runtime
251
+ # checked operations on these (that match Python semantics). See the
252
+ # ops in mypyc.primitives.misc_ops, including py_getattr_op,
253
+ # py_call_op, and many others.
254
+ #
255
+ # If there is no more specific RType available for some value, we fall
256
+ # back to using this type.
257
+ #
258
+ # NOTE: Even though this is very flexible, this type should be used as
259
+ # little as possible, as generic ops are typically slow. Other types,
260
+ # including other primitive types and RInstance, are usually much
261
+ # faster.
262
+ object_rprimitive: Final = RPrimitive("builtins.object", is_unboxed=False, is_refcounted=True)
263
+
264
+ # represents a low level pointer of an object
265
+ object_pointer_rprimitive: Final = RPrimitive(
266
+ "object_ptr", is_unboxed=False, is_refcounted=False, ctype="PyObject **"
267
+ )
268
+
269
+ # Arbitrary-precision integer (corresponds to Python 'int'). Small
270
+ # enough values are stored unboxed, while large integers are
271
+ # represented as a tagged pointer to a Python 'int' PyObject. The
272
+ # lowest bit is used as the tag to decide whether it is a signed
273
+ # unboxed value (shifted left by one) or a PyObject * pointing to an
274
+ # 'int' object. Pointers have the least significant bit set.
275
+ #
276
+ # The undefined/error value is the null pointer (1 -- only the least
277
+ # significant bit is set)).
278
+ #
279
+ # This cannot represent a subclass of int. An instance of a subclass
280
+ # of int is coerced to the corresponding 'int' value.
281
+ int_rprimitive: Final = RPrimitive(
282
+ "builtins.int", is_unboxed=True, is_refcounted=True, ctype="CPyTagged"
283
+ )
284
+
285
+ # An unboxed integer. The representation is the same as for unboxed
286
+ # int_rprimitive (shifted left by one). These can be used when an
287
+ # integer is known to be small enough to fit size_t (CPyTagged).
288
+ short_int_rprimitive: Final = RPrimitive(
289
+ "short_int", is_unboxed=True, is_refcounted=False, ctype="CPyTagged"
290
+ )
291
+
292
+ # Low level integer types (correspond to C integer types)
293
+
294
+ int16_rprimitive: Final = RPrimitive(
295
+ "i16",
296
+ is_unboxed=True,
297
+ is_refcounted=False,
298
+ is_native_int=True,
299
+ is_signed=True,
300
+ ctype="int16_t",
301
+ size=2,
302
+ error_overlap=True,
303
+ )
304
+ int32_rprimitive: Final = RPrimitive(
305
+ "i32",
306
+ is_unboxed=True,
307
+ is_refcounted=False,
308
+ is_native_int=True,
309
+ is_signed=True,
310
+ ctype="int32_t",
311
+ size=4,
312
+ error_overlap=True,
313
+ )
314
+ int64_rprimitive: Final = RPrimitive(
315
+ "i64",
316
+ is_unboxed=True,
317
+ is_refcounted=False,
318
+ is_native_int=True,
319
+ is_signed=True,
320
+ ctype="int64_t",
321
+ size=8,
322
+ error_overlap=True,
323
+ )
324
+ uint8_rprimitive: Final = RPrimitive(
325
+ "u8",
326
+ is_unboxed=True,
327
+ is_refcounted=False,
328
+ is_native_int=True,
329
+ is_signed=False,
330
+ ctype="uint8_t",
331
+ size=1,
332
+ error_overlap=True,
333
+ )
334
+
335
+ # The following unsigned native int types (u16, u32, u64) are not
336
+ # exposed to the user. They are for internal use within mypyc only.
337
+
338
+ u16_rprimitive: Final = RPrimitive(
339
+ "u16",
340
+ is_unboxed=True,
341
+ is_refcounted=False,
342
+ is_native_int=True,
343
+ is_signed=False,
344
+ ctype="uint16_t",
345
+ size=2,
346
+ error_overlap=True,
347
+ )
348
+ uint32_rprimitive: Final = RPrimitive(
349
+ "u32",
350
+ is_unboxed=True,
351
+ is_refcounted=False,
352
+ is_native_int=True,
353
+ is_signed=False,
354
+ ctype="uint32_t",
355
+ size=4,
356
+ error_overlap=True,
357
+ )
358
+ uint64_rprimitive: Final = RPrimitive(
359
+ "u64",
360
+ is_unboxed=True,
361
+ is_refcounted=False,
362
+ is_native_int=True,
363
+ is_signed=False,
364
+ ctype="uint64_t",
365
+ size=8,
366
+ error_overlap=True,
367
+ )
368
+
369
+ # The C 'int' type
370
+ c_int_rprimitive = int32_rprimitive
371
+
372
+ if IS_32_BIT_PLATFORM:
373
+ c_size_t_rprimitive = uint32_rprimitive
374
+ c_pyssize_t_rprimitive = RPrimitive(
375
+ "native_int",
376
+ is_unboxed=True,
377
+ is_refcounted=False,
378
+ is_native_int=True,
379
+ is_signed=True,
380
+ ctype="int32_t",
381
+ size=4,
382
+ )
383
+ else:
384
+ c_size_t_rprimitive = uint64_rprimitive
385
+ c_pyssize_t_rprimitive = RPrimitive(
386
+ "native_int",
387
+ is_unboxed=True,
388
+ is_refcounted=False,
389
+ is_native_int=True,
390
+ is_signed=True,
391
+ ctype="int64_t",
392
+ size=8,
393
+ )
394
+
395
+ # Untyped pointer, represented as integer in the C backend
396
+ pointer_rprimitive: Final = RPrimitive("ptr", is_unboxed=True, is_refcounted=False, ctype="CPyPtr")
397
+
398
+ # Untyped pointer, represented as void * in the C backend
399
+ c_pointer_rprimitive: Final = RPrimitive(
400
+ "c_ptr", is_unboxed=False, is_refcounted=False, ctype="void *"
401
+ )
402
+
403
+ # The type corresponding to mypyc.common.BITMAP_TYPE
404
+ bitmap_rprimitive: Final = uint32_rprimitive
405
+
406
+ # Floats are represent as 'float' PyObject * values. (In the future
407
+ # we'll likely switch to a more efficient, unboxed representation.)
408
+ float_rprimitive: Final = RPrimitive(
409
+ "builtins.float",
410
+ is_unboxed=True,
411
+ is_refcounted=False,
412
+ ctype="double",
413
+ size=8,
414
+ error_overlap=True,
415
+ )
416
+
417
+ # An unboxed Python bool value. This actually has three possible values
418
+ # (0 -> False, 1 -> True, 2 -> error). If you only need True/False, use
419
+ # bit_rprimitive instead.
420
+ bool_rprimitive: Final = RPrimitive(
421
+ "builtins.bool", is_unboxed=True, is_refcounted=False, ctype="char", size=1
422
+ )
423
+
424
+ # A low-level boolean value with two possible values: 0 and 1. Any
425
+ # other value results in undefined behavior. Undefined or error values
426
+ # are not supported.
427
+ bit_rprimitive: Final = RPrimitive(
428
+ "bit", is_unboxed=True, is_refcounted=False, ctype="char", size=1
429
+ )
430
+
431
+ # The 'None' value. The possible values are 0 -> None and 2 -> error.
432
+ none_rprimitive: Final = RPrimitive(
433
+ "builtins.None", is_unboxed=True, is_refcounted=False, ctype="char", size=1
434
+ )
435
+
436
+ # Python list object (or an instance of a subclass of list).
437
+ list_rprimitive: Final = RPrimitive("builtins.list", is_unboxed=False, is_refcounted=True)
438
+
439
+ # Python dict object (or an instance of a subclass of dict).
440
+ dict_rprimitive: Final = RPrimitive("builtins.dict", is_unboxed=False, is_refcounted=True)
441
+
442
+ # Python set object (or an instance of a subclass of set).
443
+ set_rprimitive: Final = RPrimitive("builtins.set", is_unboxed=False, is_refcounted=True)
444
+
445
+ # Python str object. At the C layer, str is referred to as unicode
446
+ # (PyUnicode).
447
+ str_rprimitive: Final = RPrimitive("builtins.str", is_unboxed=False, is_refcounted=True)
448
+
449
+ # Python bytes object.
450
+ bytes_rprimitive: Final = RPrimitive("builtins.bytes", is_unboxed=False, is_refcounted=True)
451
+
452
+ # Tuple of an arbitrary length (corresponds to Tuple[t, ...], with
453
+ # explicit '...').
454
+ tuple_rprimitive: Final = RPrimitive("builtins.tuple", is_unboxed=False, is_refcounted=True)
455
+
456
+ # Python range object.
457
+ range_rprimitive: Final = RPrimitive("builtins.range", is_unboxed=False, is_refcounted=True)
458
+
459
+
460
+ def is_tagged(rtype: RType) -> bool:
461
+ return rtype is int_rprimitive or rtype is short_int_rprimitive
462
+
463
+
464
+ def is_int_rprimitive(rtype: RType) -> bool:
465
+ return rtype is int_rprimitive
466
+
467
+
468
+ def is_short_int_rprimitive(rtype: RType) -> bool:
469
+ return rtype is short_int_rprimitive
470
+
471
+
472
+ def is_int16_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
473
+ return rtype is int16_rprimitive
474
+
475
+
476
+ def is_int32_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
477
+ return rtype is int32_rprimitive or (
478
+ rtype is c_pyssize_t_rprimitive and rtype._ctype == "int32_t"
479
+ )
480
+
481
+
482
+ def is_int64_rprimitive(rtype: RType) -> bool:
483
+ return rtype is int64_rprimitive or (
484
+ rtype is c_pyssize_t_rprimitive and rtype._ctype == "int64_t"
485
+ )
486
+
487
+
488
+ def is_fixed_width_rtype(rtype: RType) -> TypeGuard[RPrimitive]:
489
+ return (
490
+ is_int64_rprimitive(rtype)
491
+ or is_int32_rprimitive(rtype)
492
+ or is_int16_rprimitive(rtype)
493
+ or is_uint8_rprimitive(rtype)
494
+ )
495
+
496
+
497
+ def is_uint8_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
498
+ return rtype is uint8_rprimitive
499
+
500
+
501
+ def is_uint32_rprimitive(rtype: RType) -> bool:
502
+ return rtype is uint32_rprimitive
503
+
504
+
505
+ def is_uint64_rprimitive(rtype: RType) -> bool:
506
+ return rtype is uint64_rprimitive
507
+
508
+
509
+ def is_c_py_ssize_t_rprimitive(rtype: RType) -> bool:
510
+ return rtype is c_pyssize_t_rprimitive
511
+
512
+
513
+ def is_pointer_rprimitive(rtype: RType) -> bool:
514
+ return rtype is pointer_rprimitive
515
+
516
+
517
+ def is_float_rprimitive(rtype: RType) -> bool:
518
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.float"
519
+
520
+
521
+ def is_bool_rprimitive(rtype: RType) -> bool:
522
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.bool"
523
+
524
+
525
+ def is_bit_rprimitive(rtype: RType) -> bool:
526
+ return isinstance(rtype, RPrimitive) and rtype.name == "bit"
527
+
528
+
529
+ def is_object_rprimitive(rtype: RType) -> bool:
530
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.object"
531
+
532
+
533
+ def is_none_rprimitive(rtype: RType) -> bool:
534
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.None"
535
+
536
+
537
+ def is_list_rprimitive(rtype: RType) -> bool:
538
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.list"
539
+
540
+
541
+ def is_dict_rprimitive(rtype: RType) -> bool:
542
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.dict"
543
+
544
+
545
+ def is_set_rprimitive(rtype: RType) -> bool:
546
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.set"
547
+
548
+
549
+ def is_str_rprimitive(rtype: RType) -> bool:
550
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.str"
551
+
552
+
553
+ def is_bytes_rprimitive(rtype: RType) -> bool:
554
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.bytes"
555
+
556
+
557
+ def is_tuple_rprimitive(rtype: RType) -> bool:
558
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.tuple"
559
+
560
+
561
+ def is_range_rprimitive(rtype: RType) -> bool:
562
+ return isinstance(rtype, RPrimitive) and rtype.name == "builtins.range"
563
+
564
+
565
+ def is_sequence_rprimitive(rtype: RType) -> bool:
566
+ return isinstance(rtype, RPrimitive) and (
567
+ is_list_rprimitive(rtype) or is_tuple_rprimitive(rtype) or is_str_rprimitive(rtype)
568
+ )
569
+
570
+
571
+ class TupleNameVisitor(RTypeVisitor[str]):
572
+ """Produce a tuple name based on the concrete representations of types."""
573
+
574
+ def visit_rinstance(self, t: RInstance) -> str:
575
+ return "O"
576
+
577
+ def visit_runion(self, t: RUnion) -> str:
578
+ return "O"
579
+
580
+ def visit_rprimitive(self, t: RPrimitive) -> str:
581
+ if t._ctype == "CPyTagged":
582
+ return "I"
583
+ elif t._ctype == "char":
584
+ return "C"
585
+ elif t._ctype == "int64_t":
586
+ return "8" # "8 byte integer"
587
+ elif t._ctype == "int32_t":
588
+ return "4" # "4 byte integer"
589
+ elif t._ctype == "int16_t":
590
+ return "2" # "2 byte integer"
591
+ elif t._ctype == "uint8_t":
592
+ return "U1" # "1 byte unsigned integer"
593
+ elif t._ctype == "double":
594
+ return "F"
595
+ assert not t.is_unboxed, f"{t} unexpected unboxed type"
596
+ return "O"
597
+
598
+ def visit_rtuple(self, t: RTuple) -> str:
599
+ parts = [elem.accept(self) for elem in t.types]
600
+ return "T{}{}".format(len(parts), "".join(parts))
601
+
602
+ def visit_rstruct(self, t: RStruct) -> str:
603
+ assert False, "RStruct not supported in tuple"
604
+
605
+ def visit_rarray(self, t: RArray) -> str:
606
+ assert False, "RArray not supported in tuple"
607
+
608
+ def visit_rvoid(self, t: RVoid) -> str:
609
+ assert False, "rvoid in tuple?"
610
+
611
+
612
+ class RTuple(RType):
613
+ """Fixed-length unboxed tuple (represented as a C struct).
614
+
615
+ These are used to represent mypy TupleType values (fixed-length
616
+ Python tuples). Since this is unboxed, the identity of a tuple
617
+ object is not preserved within compiled code. If the identity of a
618
+ tuple is important, or there is a need to have multiple references
619
+ to a single tuple object, a variable-length tuple should be used
620
+ (tuple_rprimitive or Tuple[T, ...] with explicit '...'), as they
621
+ are boxed.
622
+
623
+ These aren't immutable. However, user code won't be able to mutate
624
+ individual tuple items.
625
+ """
626
+
627
+ is_unboxed = True
628
+
629
+ def __init__(self, types: list[RType]) -> None:
630
+ self.name = "tuple"
631
+ self.types = tuple(types)
632
+ self.is_refcounted = any(t.is_refcounted for t in self.types)
633
+ # Generate a unique id which is used in naming corresponding C identifiers.
634
+ # This is necessary since C does not have anonymous structural type equivalence
635
+ # in the same way python can just assign a Tuple[int, bool] to a Tuple[int, bool].
636
+ self.unique_id = self.accept(TupleNameVisitor())
637
+ # Nominally the max c length is 31 chars, but I'm not honestly worried about this.
638
+ self.struct_name = f"tuple_{self.unique_id}"
639
+ self._ctype = f"{self.struct_name}"
640
+ self.error_overlap = all(t.error_overlap for t in self.types) and bool(self.types)
641
+
642
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
643
+ return visitor.visit_rtuple(self)
644
+
645
+ def __str__(self) -> str:
646
+ return "tuple[%s]" % ", ".join(str(typ) for typ in self.types)
647
+
648
+ def __repr__(self) -> str:
649
+ return "<RTuple %s>" % ", ".join(repr(typ) for typ in self.types)
650
+
651
+ def __eq__(self, other: object) -> bool:
652
+ return isinstance(other, RTuple) and self.types == other.types
653
+
654
+ def __hash__(self) -> int:
655
+ return hash((self.name, self.types))
656
+
657
+ def serialize(self) -> JsonDict:
658
+ types = [x.serialize() for x in self.types]
659
+ return {".class": "RTuple", "types": types}
660
+
661
+ @classmethod
662
+ def deserialize(cls, data: JsonDict, ctx: DeserMaps) -> RTuple:
663
+ types = [deserialize_type(t, ctx) for t in data["types"]]
664
+ return RTuple(types)
665
+
666
+
667
+ # Exception tuple: (exception class, exception instance, traceback object)
668
+ exc_rtuple = RTuple([object_rprimitive, object_rprimitive, object_rprimitive])
669
+
670
+ # Dictionary iterator tuple: (should continue, internal offset, key, value)
671
+ # See mypyc.irbuild.for_helpers.ForDictionaryCommon for more details.
672
+ dict_next_rtuple_pair = RTuple(
673
+ [bool_rprimitive, short_int_rprimitive, object_rprimitive, object_rprimitive]
674
+ )
675
+ # Same as above but just for key or value.
676
+ dict_next_rtuple_single = RTuple([bool_rprimitive, short_int_rprimitive, object_rprimitive])
677
+
678
+
679
+ def compute_rtype_alignment(typ: RType) -> int:
680
+ """Compute alignment of a given type based on platform alignment rule"""
681
+ platform_alignment = PLATFORM_SIZE
682
+ if isinstance(typ, RPrimitive):
683
+ return typ.size
684
+ elif isinstance(typ, RInstance):
685
+ return platform_alignment
686
+ elif isinstance(typ, RUnion):
687
+ return platform_alignment
688
+ elif isinstance(typ, RArray):
689
+ return compute_rtype_alignment(typ.item_type)
690
+ else:
691
+ if isinstance(typ, RTuple):
692
+ items = list(typ.types)
693
+ elif isinstance(typ, RStruct):
694
+ items = typ.types
695
+ else:
696
+ assert False, "invalid rtype for computing alignment"
697
+ max_alignment = max(compute_rtype_alignment(item) for item in items)
698
+ return max_alignment
699
+
700
+
701
+ def compute_rtype_size(typ: RType) -> int:
702
+ """Compute unaligned size of rtype"""
703
+ if isinstance(typ, RPrimitive):
704
+ return typ.size
705
+ elif isinstance(typ, RTuple):
706
+ return compute_aligned_offsets_and_size(list(typ.types))[1]
707
+ elif isinstance(typ, RUnion):
708
+ return PLATFORM_SIZE
709
+ elif isinstance(typ, RStruct):
710
+ return compute_aligned_offsets_and_size(typ.types)[1]
711
+ elif isinstance(typ, RInstance):
712
+ return PLATFORM_SIZE
713
+ elif isinstance(typ, RArray):
714
+ alignment = compute_rtype_alignment(typ)
715
+ aligned_size = (compute_rtype_size(typ.item_type) + (alignment - 1)) & ~(alignment - 1)
716
+ return aligned_size * typ.length
717
+ else:
718
+ assert False, "invalid rtype for computing size"
719
+
720
+
721
+ def compute_aligned_offsets_and_size(types: list[RType]) -> tuple[list[int], int]:
722
+ """Compute offsets and total size of a list of types after alignment
723
+
724
+ Note that the types argument are types of values that are stored
725
+ sequentially with platform default alignment.
726
+ """
727
+ unaligned_sizes = [compute_rtype_size(typ) for typ in types]
728
+ alignments = [compute_rtype_alignment(typ) for typ in types]
729
+
730
+ current_offset = 0
731
+ offsets = []
732
+ final_size = 0
733
+ for i in range(len(unaligned_sizes)):
734
+ offsets.append(current_offset)
735
+ if i + 1 < len(unaligned_sizes):
736
+ cur_size = unaligned_sizes[i]
737
+ current_offset += cur_size
738
+ next_alignment = alignments[i + 1]
739
+ # compute aligned offset,
740
+ # check https://en.wikipedia.org/wiki/Data_structure_alignment for more information
741
+ current_offset = (current_offset + (next_alignment - 1)) & -next_alignment
742
+ else:
743
+ struct_alignment = max(alignments)
744
+ final_size = current_offset + unaligned_sizes[i]
745
+ final_size = (final_size + (struct_alignment - 1)) & -struct_alignment
746
+ return offsets, final_size
747
+
748
+
749
+ class RStruct(RType):
750
+ """C struct type"""
751
+
752
+ def __init__(self, name: str, names: list[str], types: list[RType]) -> None:
753
+ self.name = name
754
+ self.names = names
755
+ self.types = types
756
+ # generate dummy names
757
+ if len(self.names) < len(self.types):
758
+ for i in range(len(self.types) - len(self.names)):
759
+ self.names.append("_item" + str(i))
760
+ self.offsets, self.size = compute_aligned_offsets_and_size(types)
761
+ self._ctype = name
762
+
763
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
764
+ return visitor.visit_rstruct(self)
765
+
766
+ def __str__(self) -> str:
767
+ # if not tuple(unnamed structs)
768
+ return "{}{{{}}}".format(
769
+ self.name,
770
+ ", ".join(name + ":" + str(typ) for name, typ in zip(self.names, self.types)),
771
+ )
772
+
773
+ def __repr__(self) -> str:
774
+ return "<RStruct {}{{{}}}>".format(
775
+ self.name,
776
+ ", ".join(name + ":" + repr(typ) for name, typ in zip(self.names, self.types)),
777
+ )
778
+
779
+ def __eq__(self, other: object) -> bool:
780
+ return (
781
+ isinstance(other, RStruct)
782
+ and self.name == other.name
783
+ and self.names == other.names
784
+ and self.types == other.types
785
+ )
786
+
787
+ def __hash__(self) -> int:
788
+ return hash((self.name, tuple(self.names), tuple(self.types)))
789
+
790
+ def serialize(self) -> JsonDict:
791
+ assert False
792
+
793
+ @classmethod
794
+ def deserialize(cls, data: JsonDict, ctx: DeserMaps) -> RStruct:
795
+ assert False
796
+
797
+
798
+ class RInstance(RType):
799
+ """Instance of user-defined class (compiled to C extension class).
800
+
801
+ The runtime representation is 'PyObject *', and these are always
802
+ boxed and thus reference-counted.
803
+
804
+ These support fast method calls and fast attribute access using
805
+ vtables, and they usually use a dict-free, struct-based
806
+ representation of attributes. Method calls and attribute access
807
+ can skip the vtable if we know that there is no overriding.
808
+
809
+ These are also sometimes called 'native' types, since these have
810
+ the most efficient representation and ops (along with certain
811
+ RPrimitive types and RTuple).
812
+ """
813
+
814
+ is_unboxed = False
815
+
816
+ def __init__(self, class_ir: ClassIR) -> None:
817
+ # name is used for formatting the name in messages and debug output
818
+ # so we want the fullname for precision.
819
+ self.name = class_ir.fullname
820
+ self.class_ir = class_ir
821
+ self._ctype = "PyObject *"
822
+
823
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
824
+ return visitor.visit_rinstance(self)
825
+
826
+ def struct_name(self, names: NameGenerator) -> str:
827
+ return self.class_ir.struct_name(names)
828
+
829
+ def getter_index(self, name: str) -> int:
830
+ return self.class_ir.vtable_entry(name)
831
+
832
+ def setter_index(self, name: str) -> int:
833
+ return self.getter_index(name) + 1
834
+
835
+ def method_index(self, name: str) -> int:
836
+ return self.class_ir.vtable_entry(name)
837
+
838
+ def attr_type(self, name: str) -> RType:
839
+ return self.class_ir.attr_type(name)
840
+
841
+ def __repr__(self) -> str:
842
+ return "<RInstance %s>" % self.name
843
+
844
+ def __eq__(self, other: object) -> bool:
845
+ return isinstance(other, RInstance) and other.name == self.name
846
+
847
+ def __hash__(self) -> int:
848
+ return hash(self.name)
849
+
850
+ def serialize(self) -> str:
851
+ return self.name
852
+
853
+
854
+ class RUnion(RType):
855
+ """union[x, ..., y]"""
856
+
857
+ is_unboxed = False
858
+
859
+ def __init__(self, items: list[RType]) -> None:
860
+ self.name = "union"
861
+ self.items = items
862
+ self.items_set = frozenset(items)
863
+ self._ctype = "PyObject *"
864
+
865
+ @staticmethod
866
+ def make_simplified_union(items: list[RType]) -> RType:
867
+ """Return a normalized union that covers the given items.
868
+
869
+ Flatten nested unions and remove duplicate items.
870
+
871
+ Overlapping items are *not* simplified. For example,
872
+ [object, str] will not be simplified.
873
+ """
874
+ items = flatten_nested_unions(items)
875
+ assert items
876
+
877
+ unique_items = dict.fromkeys(items)
878
+ if len(unique_items) > 1:
879
+ return RUnion(list(unique_items))
880
+ else:
881
+ return next(iter(unique_items))
882
+
883
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
884
+ return visitor.visit_runion(self)
885
+
886
+ def __repr__(self) -> str:
887
+ return "<RUnion %s>" % ", ".join(str(item) for item in self.items)
888
+
889
+ def __str__(self) -> str:
890
+ return "union[%s]" % ", ".join(str(item) for item in self.items)
891
+
892
+ # We compare based on the set because order in a union doesn't matter
893
+ def __eq__(self, other: object) -> bool:
894
+ return isinstance(other, RUnion) and self.items_set == other.items_set
895
+
896
+ def __hash__(self) -> int:
897
+ return hash(("union", self.items_set))
898
+
899
+ def serialize(self) -> JsonDict:
900
+ types = [x.serialize() for x in self.items]
901
+ return {".class": "RUnion", "types": types}
902
+
903
+ @classmethod
904
+ def deserialize(cls, data: JsonDict, ctx: DeserMaps) -> RUnion:
905
+ types = [deserialize_type(t, ctx) for t in data["types"]]
906
+ return RUnion(types)
907
+
908
+
909
+ def flatten_nested_unions(types: list[RType]) -> list[RType]:
910
+ if not any(isinstance(t, RUnion) for t in types):
911
+ return types # Fast path
912
+
913
+ flat_items: list[RType] = []
914
+ for t in types:
915
+ if isinstance(t, RUnion):
916
+ flat_items.extend(flatten_nested_unions(t.items))
917
+ else:
918
+ flat_items.append(t)
919
+ return flat_items
920
+
921
+
922
+ def optional_value_type(rtype: RType) -> RType | None:
923
+ """If rtype is the union of none_rprimitive and another type X, return X.
924
+
925
+ Otherwise return None.
926
+ """
927
+ if isinstance(rtype, RUnion) and len(rtype.items) == 2:
928
+ if rtype.items[0] == none_rprimitive:
929
+ return rtype.items[1]
930
+ elif rtype.items[1] == none_rprimitive:
931
+ return rtype.items[0]
932
+ return None
933
+
934
+
935
+ def is_optional_type(rtype: RType) -> bool:
936
+ """Is rtype an optional type with exactly two union items?"""
937
+ return optional_value_type(rtype) is not None
938
+
939
+
940
+ class RArray(RType):
941
+ """Fixed-length C array type (for example, int[5]).
942
+
943
+ Note that the implementation is a bit limited, and these can basically
944
+ be only used for local variables that are initialized in one location.
945
+ """
946
+
947
+ def __init__(self, item_type: RType, length: int) -> None:
948
+ self.item_type = item_type
949
+ # Number of items
950
+ self.length = length
951
+ self.is_refcounted = False
952
+
953
+ def accept(self, visitor: RTypeVisitor[T]) -> T:
954
+ return visitor.visit_rarray(self)
955
+
956
+ def __str__(self) -> str:
957
+ return f"{self.item_type}[{self.length}]"
958
+
959
+ def __repr__(self) -> str:
960
+ return f"<RArray {self.item_type!r}[{self.length}]>"
961
+
962
+ def __eq__(self, other: object) -> bool:
963
+ return (
964
+ isinstance(other, RArray)
965
+ and self.item_type == other.item_type
966
+ and self.length == other.length
967
+ )
968
+
969
+ def __hash__(self) -> int:
970
+ return hash((self.item_type, self.length))
971
+
972
+ def serialize(self) -> JsonDict:
973
+ assert False
974
+
975
+ @classmethod
976
+ def deserialize(cls, data: JsonDict, ctx: DeserMaps) -> RArray:
977
+ assert False
978
+
979
+
980
+ PyObject = RStruct(
981
+ name="PyObject",
982
+ names=["ob_refcnt", "ob_type"],
983
+ types=[c_pyssize_t_rprimitive, pointer_rprimitive],
984
+ )
985
+
986
+ PyVarObject = RStruct(
987
+ name="PyVarObject", names=["ob_base", "ob_size"], types=[PyObject, c_pyssize_t_rprimitive]
988
+ )
989
+
990
+ setentry = RStruct(
991
+ name="setentry", names=["key", "hash"], types=[pointer_rprimitive, c_pyssize_t_rprimitive]
992
+ )
993
+
994
+ smalltable = RStruct(name="smalltable", names=[], types=[setentry] * 8)
995
+
996
+ PySetObject = RStruct(
997
+ name="PySetObject",
998
+ names=[
999
+ "ob_base",
1000
+ "fill",
1001
+ "used",
1002
+ "mask",
1003
+ "table",
1004
+ "hash",
1005
+ "finger",
1006
+ "smalltable",
1007
+ "weakreflist",
1008
+ ],
1009
+ types=[
1010
+ PyObject,
1011
+ c_pyssize_t_rprimitive,
1012
+ c_pyssize_t_rprimitive,
1013
+ c_pyssize_t_rprimitive,
1014
+ pointer_rprimitive,
1015
+ c_pyssize_t_rprimitive,
1016
+ c_pyssize_t_rprimitive,
1017
+ smalltable,
1018
+ pointer_rprimitive,
1019
+ ],
1020
+ )
1021
+
1022
+ PyListObject = RStruct(
1023
+ name="PyListObject",
1024
+ names=["ob_base", "ob_item", "allocated"],
1025
+ types=[PyVarObject, pointer_rprimitive, c_pyssize_t_rprimitive],
1026
+ )
1027
+
1028
+
1029
+ def check_native_int_range(rtype: RPrimitive, n: int) -> bool:
1030
+ """Is n within the range of a native, fixed-width int type?
1031
+
1032
+ Assume the type is a fixed-width int type.
1033
+ """
1034
+ if not rtype.is_signed:
1035
+ return 0 <= n < (1 << (8 * rtype.size))
1036
+ else:
1037
+ limit = 1 << (rtype.size * 8 - 1)
1038
+ return -limit <= n < limit