python-constricter 0.4.1__cp313-cp313-win32.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 (261) hide show
  1. constricter/__init__.py +55 -0
  2. constricter/__main__.py +26 -0
  3. constricter/_version.py +4 -0
  4. constricter/cli/__init__.py +2 -0
  5. constricter/cli/baseline.py +107 -0
  6. constricter/cli/collecting.py +54 -0
  7. constricter/cli/command.py +547 -0
  8. constricter/cli/config.py +322 -0
  9. constricter/cli/explain.py +104 -0
  10. constricter/cli/lsp/__init__.py +2 -0
  11. constricter/cli/lsp/connection.py +475 -0
  12. constricter/cli/lsp/edits.py +188 -0
  13. constricter/cli/lsp/guard.py +133 -0
  14. constricter/cli/lsp/hints.py +391 -0
  15. constricter/cli/lsp/protocol.py +192 -0
  16. constricter/cli/lsp/remembered.py +81 -0
  17. constricter/cli/lsp/stored.py +200 -0
  18. constricter/cli/options.py +799 -0
  19. constricter/cli/paths.py +151 -0
  20. constricter/cli/reading.py +36 -0
  21. constricter/cli/report.py +397 -0
  22. constricter/cli/rounds.py +328 -0
  23. constricter/cli/runs.py +90 -0
  24. constricter/cli/schedule.py +463 -0
  25. constricter/cli/traced.py +401 -0
  26. constricter/cli/workers.py +286 -0
  27. constricter/empty.py +66 -0
  28. constricter/fix/__init__.cp313-win32.pyd +0 -0
  29. constricter/fix/__init__.py +2 -0
  30. constricter/fix/core/__init__.cp313-win32.pyd +0 -0
  31. constricter/fix/core/__init__.py +2 -0
  32. constricter/fix/core/asked.cp313-win32.pyd +0 -0
  33. constricter/fix/core/asked.py +56 -0
  34. constricter/fix/core/fixes.cp313-win32.pyd +0 -0
  35. constricter/fix/core/fixes.py +317 -0
  36. constricter/fix/core/imports.cp313-win32.pyd +0 -0
  37. constricter/fix/core/imports.py +580 -0
  38. constricter/fix/core/inherited.cp313-win32.pyd +0 -0
  39. constricter/fix/core/inherited.py +311 -0
  40. constricter/fix/core/known.cp313-win32.pyd +0 -0
  41. constricter/fix/core/known.py +730 -0
  42. constricter/fix/core/signatures.cp313-win32.pyd +0 -0
  43. constricter/fix/core/signatures.py +132 -0
  44. constricter/fix/index/__init__.cp313-win32.pyd +0 -0
  45. constricter/fix/index/__init__.py +2 -0
  46. constricter/fix/index/awaits.cp313-win32.pyd +0 -0
  47. constricter/fix/index/awaits.py +90 -0
  48. constricter/fix/index/beyond.cp313-win32.pyd +0 -0
  49. constricter/fix/index/beyond.py +149 -0
  50. constricter/fix/index/callers.cp313-win32.pyd +0 -0
  51. constricter/fix/index/callers.py +155 -0
  52. constricter/fix/index/crossed.cp313-win32.pyd +0 -0
  53. constricter/fix/index/crossed.py +327 -0
  54. constricter/fix/index/decorated.cp313-win32.pyd +0 -0
  55. constricter/fix/index/decorated.py +140 -0
  56. constricter/fix/index/fixtures.cp313-win32.pyd +0 -0
  57. constricter/fix/index/fixtures.py +176 -0
  58. constricter/fix/index/linked.cp313-win32.pyd +0 -0
  59. constricter/fix/index/linked.py +142 -0
  60. constricter/fix/index/loose.cp313-win32.pyd +0 -0
  61. constricter/fix/index/loose.py +103 -0
  62. constricter/fix/index/managed.cp313-win32.pyd +0 -0
  63. constricter/fix/index/managed.py +63 -0
  64. constricter/fix/index/modules.cp313-win32.pyd +0 -0
  65. constricter/fix/index/modules.py +741 -0
  66. constricter/fix/index/offers.cp313-win32.pyd +0 -0
  67. constricter/fix/index/offers.py +252 -0
  68. constricter/fix/index/order.cp313-win32.pyd +0 -0
  69. constricter/fix/index/order.py +155 -0
  70. constricter/fix/index/origins.cp313-win32.pyd +0 -0
  71. constricter/fix/index/origins.py +238 -0
  72. constricter/fix/index/own_methods.cp313-win32.pyd +0 -0
  73. constricter/fix/index/own_methods.py +91 -0
  74. constricter/fix/index/own_overloads.cp313-win32.pyd +0 -0
  75. constricter/fix/index/own_overloads.py +70 -0
  76. constricter/fix/index/own_types.cp313-win32.pyd +0 -0
  77. constricter/fix/index/own_types.py +330 -0
  78. constricter/fix/index/params.cp313-win32.pyd +0 -0
  79. constricter/fix/index/params.py +81 -0
  80. constricter/fix/index/plain.cp313-win32.pyd +0 -0
  81. constricter/fix/index/plain.py +221 -0
  82. constricter/fix/index/project.cp313-win32.pyd +0 -0
  83. constricter/fix/index/project.py +797 -0
  84. constricter/fix/index/sides.cp313-win32.pyd +0 -0
  85. constricter/fix/index/sides.py +160 -0
  86. constricter/fix/index/strings.cp313-win32.pyd +0 -0
  87. constricter/fix/index/strings.py +46 -0
  88. constricter/fix/index/stubs/__init__.cp313-win32.pyd +0 -0
  89. constricter/fix/index/stubs/__init__.py +2 -0
  90. constricter/fix/index/stubs/atoms.cp313-win32.pyd +0 -0
  91. constricter/fix/index/stubs/atoms.py +425 -0
  92. constricter/fix/index/stubs/chained.cp313-win32.pyd +0 -0
  93. constricter/fix/index/stubs/chained.py +69 -0
  94. constricter/fix/index/stubs/classnames.cp313-win32.pyd +0 -0
  95. constricter/fix/index/stubs/classnames.py +124 -0
  96. constricter/fix/index/stubs/declared.cp313-win32.pyd +0 -0
  97. constricter/fix/index/stubs/declared.py +508 -0
  98. constricter/fix/index/stubs/installed.cp313-win32.pyd +0 -0
  99. constricter/fix/index/stubs/installed.py +425 -0
  100. constricter/fix/index/stubs/names.cp313-win32.pyd +0 -0
  101. constricter/fix/index/stubs/names.py +200 -0
  102. constricter/fix/index/stubs/read.cp313-win32.pyd +0 -0
  103. constricter/fix/index/stubs/read.py +70 -0
  104. constricter/fix/index/stubs/signatures.cp313-win32.pyd +0 -0
  105. constricter/fix/index/stubs/signatures.py +656 -0
  106. constricter/fix/index/stubs/stubbed.cp313-win32.pyd +0 -0
  107. constricter/fix/index/stubs/stubbed.py +208 -0
  108. constricter/fix/index/taken.cp313-win32.pyd +0 -0
  109. constricter/fix/index/taken.py +45 -0
  110. constricter/fix/index/tuples.cp313-win32.pyd +0 -0
  111. constricter/fix/index/tuples.py +112 -0
  112. constricter/fix/libraries/__init__.cp313-win32.pyd +0 -0
  113. constricter/fix/libraries/__init__.py +2 -0
  114. constricter/fix/libraries/library.cp313-win32.pyd +0 -0
  115. constricter/fix/libraries/library.py +420 -0
  116. constricter/fix/libraries/opened.cp313-win32.pyd +0 -0
  117. constricter/fix/libraries/opened.py +147 -0
  118. constricter/fix/libraries/overloads.cp313-win32.pyd +0 -0
  119. constricter/fix/libraries/overloads.py +960 -0
  120. constricter/fix/libraries/receivers.cp313-win32.pyd +0 -0
  121. constricter/fix/libraries/receivers.py +274 -0
  122. constricter/fix/libraries/stdlib.cp313-win32.pyd +0 -0
  123. constricter/fix/libraries/stdlib.py +752 -0
  124. constricter/fix/libraries/walks.cp313-win32.pyd +0 -0
  125. constricter/fix/libraries/walks.py +49 -0
  126. constricter/fix/tables/aliases.json +147 -0
  127. constricter/fix/tables/attributes.json +700 -0
  128. constricter/fix/tables/awaited.json +69 -0
  129. constricter/fix/tables/awaited_overloads.json +14 -0
  130. constricter/fix/tables/bases.json +888 -0
  131. constricter/fix/tables/classes.json +1941 -0
  132. constricter/fix/tables/elements.json +156 -0
  133. constricter/fix/tables/functions.json +58 -0
  134. constricter/fix/tables/generic_attributes.json +254 -0
  135. constricter/fix/tables/method_overloads.json +461 -0
  136. constricter/fix/tables/method_signatures.json +954 -0
  137. constricter/fix/tables/methods.json +954 -0
  138. constricter/fix/tables/overloads.json +540 -0
  139. constricter/fix/tables/platform.json +37 -0
  140. constricter/fix/tables/returns.json +1362 -0
  141. constricter/fix/tables/scalar_members.json +16 -0
  142. constricter/fix/tables/scalars.json +2707 -0
  143. constricter/fix/tables/source.json +28 -0
  144. constricter/fix/tables/subscriptable.json +77 -0
  145. constricter/fix/tables/type_parameters.json +178 -0
  146. constricter/fix/tables/variables.json +2962 -0
  147. constricter/fix/values/__init__.cp313-win32.pyd +0 -0
  148. constricter/fix/values/__init__.py +2 -0
  149. constricter/fix/values/aliased.cp313-win32.pyd +0 -0
  150. constricter/fix/values/aliased.py +195 -0
  151. constricter/fix/values/bodies.cp313-win32.pyd +0 -0
  152. constricter/fix/values/bodies.py +76 -0
  153. constricter/fix/values/callables.cp313-win32.pyd +0 -0
  154. constricter/fix/values/callables.py +323 -0
  155. constricter/fix/values/called.cp313-win32.pyd +0 -0
  156. constricter/fix/values/called.py +194 -0
  157. constricter/fix/values/classvars.cp313-win32.pyd +0 -0
  158. constricter/fix/values/classvars.py +629 -0
  159. constricter/fix/values/decided.cp313-win32.pyd +0 -0
  160. constricter/fix/values/decided.py +429 -0
  161. constricter/fix/values/displays.cp313-win32.pyd +0 -0
  162. constricter/fix/values/displays.py +101 -0
  163. constricter/fix/values/doubts.cp313-win32.pyd +0 -0
  164. constricter/fix/values/doubts.py +677 -0
  165. constricter/fix/values/entered.cp313-win32.pyd +0 -0
  166. constricter/fix/values/entered.py +332 -0
  167. constricter/fix/values/fills.cp313-win32.pyd +0 -0
  168. constricter/fix/values/fills.py +446 -0
  169. constricter/fix/values/guesses.cp313-win32.pyd +0 -0
  170. constricter/fix/values/guesses.py +376 -0
  171. constricter/fix/values/hinted.cp313-win32.pyd +0 -0
  172. constricter/fix/values/hinted.py +811 -0
  173. constricter/fix/values/inference.cp313-win32.pyd +0 -0
  174. constricter/fix/values/inference.py +698 -0
  175. constricter/fix/values/loops.cp313-win32.pyd +0 -0
  176. constricter/fix/values/loops.py +335 -0
  177. constricter/fix/values/members.cp313-win32.pyd +0 -0
  178. constricter/fix/values/members.py +578 -0
  179. constricter/fix/values/narrowed.cp313-win32.pyd +0 -0
  180. constricter/fix/values/narrowed.py +220 -0
  181. constricter/fix/values/operated.cp313-win32.pyd +0 -0
  182. constricter/fix/values/operated.py +202 -0
  183. constricter/fix/values/ordered.cp313-win32.pyd +0 -0
  184. constricter/fix/values/ordered.py +74 -0
  185. constricter/fix/values/returned.cp313-win32.pyd +0 -0
  186. constricter/fix/values/returned.py +479 -0
  187. constricter/fix/values/returns.cp313-win32.pyd +0 -0
  188. constricter/fix/values/returns.py +237 -0
  189. constricter/fix/values/shapes.cp313-win32.pyd +0 -0
  190. constricter/fix/values/shapes.py +654 -0
  191. constricter/fix/values/stored.cp313-win32.pyd +0 -0
  192. constricter/fix/values/stored.py +564 -0
  193. constricter/fix/values/targets.cp313-win32.pyd +0 -0
  194. constricter/fix/values/targets.py +419 -0
  195. constricter/fix/values/unchecked.cp313-win32.pyd +0 -0
  196. constricter/fix/values/unchecked.py +278 -0
  197. constricter/jsonc.py +50 -0
  198. constricter/noqa.py +47 -0
  199. constricter/notebook.py +115 -0
  200. constricter/offences.py +436 -0
  201. constricter/overrides.py +24 -0
  202. constricter/plugins/__init__.py +2 -0
  203. constricter/plugins/flake8.py +133 -0
  204. constricter/plugins/pylint.py +186 -0
  205. constricter/py.typed +0 -0
  206. constricter/recording.py +660 -0
  207. constricter/rules/__init__.cp313-win32.pyd +0 -0
  208. constricter/rules/__init__.py +2 -0
  209. constricter/rules/annotations.cp313-win32.pyd +0 -0
  210. constricter/rules/annotations.py +296 -0
  211. constricter/rules/binding.cp313-win32.pyd +0 -0
  212. constricter/rules/binding.py +652 -0
  213. constricter/rules/calls.cp313-win32.pyd +0 -0
  214. constricter/rules/calls.py +460 -0
  215. constricter/rules/checker.cp313-win32.pyd +0 -0
  216. constricter/rules/checker.py +536 -0
  217. constricter/rules/declarations.cp313-win32.pyd +0 -0
  218. constricter/rules/declarations.py +730 -0
  219. constricter/rules/decorators.cp313-win32.pyd +0 -0
  220. constricter/rules/decorators.py +351 -0
  221. constricter/rules/flow.cp313-win32.pyd +0 -0
  222. constricter/rules/flow.py +502 -0
  223. constricter/rules/keys.cp313-win32.pyd +0 -0
  224. constricter/rules/keys.py +79 -0
  225. constricter/rules/late.cp313-win32.pyd +0 -0
  226. constricter/rules/late.py +969 -0
  227. constricter/rules/narrowing.cp313-win32.pyd +0 -0
  228. constricter/rules/narrowing.py +98 -0
  229. constricter/rules/parsed.cp313-win32.pyd +0 -0
  230. constricter/rules/parsed.py +136 -0
  231. constricter/rules/quoted.cp313-win32.pyd +0 -0
  232. constricter/rules/quoted.py +141 -0
  233. constricter/rules/rebinding.cp313-win32.pyd +0 -0
  234. constricter/rules/rebinding.py +169 -0
  235. constricter/rules/recorded.cp313-win32.pyd +0 -0
  236. constricter/rules/recorded.py +168 -0
  237. constricter/rules/redundant.cp313-win32.pyd +0 -0
  238. constricter/rules/redundant.py +160 -0
  239. constricter/rules/scope.cp313-win32.pyd +0 -0
  240. constricter/rules/scope.py +802 -0
  241. constricter/rules/scoped.cp313-win32.pyd +0 -0
  242. constricter/rules/scoped.py +232 -0
  243. constricter/rules/scoping.cp313-win32.pyd +0 -0
  244. constricter/rules/scoping.py +346 -0
  245. constricter/rules/settings.cp313-win32.pyd +0 -0
  246. constricter/rules/settings.py +189 -0
  247. constricter/rules/syntax.cp313-win32.pyd +0 -0
  248. constricter/rules/syntax.py +472 -0
  249. constricter/rules/tables.cp313-win32.pyd +0 -0
  250. constricter/rules/tables.py +169 -0
  251. constricter/rules/walked.cp313-win32.pyd +0 -0
  252. constricter/rules/walked.py +127 -0
  253. constricter/rules/widened.cp313-win32.pyd +0 -0
  254. constricter/rules/widened.py +322 -0
  255. constricter/trace.py +374 -0
  256. e45ce06b2fdd5c43f782__mypyc.cp313-win32.pyd +0 -0
  257. python_constricter-0.4.1.dist-info/METADATA +400 -0
  258. python_constricter-0.4.1.dist-info/RECORD +261 -0
  259. python_constricter-0.4.1.dist-info/WHEEL +4 -0
  260. python_constricter-0.4.1.dist-info/entry_points.txt +5 -0
  261. python_constricter-0.4.1.dist-info/licenses/LICENSE.md +21 -0
@@ -0,0 +1,49 @@
1
+ # SPDX-License-Identifier: MIT
2
+ """`--fix` for `os.walk(top)`: what a loop over it binds, by `top`'s type.
3
+
4
+ Its return (`Iterator[tuple[AnyStr, list[AnyStr], list[AnyStr]]]`) nests deeper than the tables hold.
5
+ """
6
+
7
+ import ast
8
+ from collections.abc import Callable
9
+ from typing import Final, TypeAlias
10
+
11
+ from constricter.fix.core.known import Inference, Known
12
+ from constricter.fix.libraries import stdlib
13
+
14
+ _WALK: Final = "os.walk"
15
+ _STR: Final = "str"
16
+ _BYTES: Final = "bytes"
17
+ _KINDS: Final = frozenset({"loop", "stdlib"})
18
+ _Infer: TypeAlias = Callable[[ast.expr], Inference | None]
19
+
20
+
21
+ def walked(iterable: ast.expr, known: Known, infer: _Infer) -> Inference | None:
22
+ """Infer what a loop over `os.walk(top)` binds: a directory's path, its directories' names and its files'.
23
+
24
+ A `str` and two lists of them, where `top` is a `str` or a `pathlib` path; `bytes`, where it's
25
+ a `bytes`. `infer` types `top`.
26
+
27
+ Returns:
28
+ The tuple's annotation and its reason; `None` for any other value, or a `top` of no such type.
29
+
30
+ """
31
+ func: ast.expr
32
+ top: ast.expr
33
+ match iterable:
34
+ case ast.Call(func=func, args=[top, *_]) if stdlib.resolved(func, known.names.stdlib) == _WALK:
35
+ found: Inference | None
36
+ if (found := infer(top)) is None:
37
+ return None
38
+ name: str | None = _BYTES if found.annotation == _BYTES else None
39
+ if found.annotation == _STR or stdlib.is_path(found.annotation, known):
40
+ name = _STR
41
+ if name is None:
42
+ return None
43
+ return Inference(
44
+ f"tuple[{name}, list[{name}], list[{name}]]",
45
+ "`os.walk`, which yields a directory's path and its entries' names",
46
+ found.kinds | _KINDS,
47
+ )
48
+ case _:
49
+ return None
@@ -0,0 +1,147 @@
1
+ {
2
+ "asyncio.base_events.BaseEventLoop": "asyncio.BaseEventLoop",
3
+ "asyncio.base_events.Server": "asyncio.Server",
4
+ "asyncio.events.AbstractEventLoop": "asyncio.AbstractEventLoop",
5
+ "asyncio.events.AbstractServer": "asyncio.AbstractServer",
6
+ "asyncio.events.Handle": "asyncio.Handle",
7
+ "asyncio.events.TimerHandle": "asyncio.TimerHandle",
8
+ "asyncio.exceptions.BrokenBarrierError": "asyncio.BrokenBarrierError",
9
+ "asyncio.exceptions.CancelledError": "asyncio.CancelledError",
10
+ "asyncio.exceptions.IncompleteReadError": "asyncio.IncompleteReadError",
11
+ "asyncio.exceptions.InvalidStateError": "asyncio.InvalidStateError",
12
+ "asyncio.exceptions.LimitOverrunError": "asyncio.LimitOverrunError",
13
+ "asyncio.exceptions.SendfileNotAvailableError": "asyncio.SendfileNotAvailableError",
14
+ "asyncio.exceptions.TimeoutError": "asyncio.TimeoutError",
15
+ "asyncio.graph.FrameCallGraphEntry": "asyncio.FrameCallGraphEntry",
16
+ "asyncio.graph.FutureCallGraph": "asyncio.FutureCallGraph",
17
+ "asyncio.locks.Barrier": "asyncio.Barrier",
18
+ "asyncio.locks.BoundedSemaphore": "asyncio.BoundedSemaphore",
19
+ "asyncio.locks.Condition": "asyncio.Condition",
20
+ "asyncio.locks.Event": "asyncio.Event",
21
+ "asyncio.locks.Lock": "asyncio.Lock",
22
+ "asyncio.locks.Semaphore": "asyncio.Semaphore",
23
+ "asyncio.protocols.BaseProtocol": "asyncio.BaseProtocol",
24
+ "asyncio.protocols.BufferedProtocol": "asyncio.BufferedProtocol",
25
+ "asyncio.protocols.DatagramProtocol": "asyncio.DatagramProtocol",
26
+ "asyncio.protocols.Protocol": "asyncio.Protocol",
27
+ "asyncio.protocols.SubprocessProtocol": "asyncio.SubprocessProtocol",
28
+ "asyncio.queues.QueueEmpty": "asyncio.QueueEmpty",
29
+ "asyncio.queues.QueueFull": "asyncio.QueueFull",
30
+ "asyncio.queues.QueueShutDown": "asyncio.QueueShutDown",
31
+ "asyncio.runners.Runner": "asyncio.Runner",
32
+ "asyncio.streams.StreamReader": "asyncio.StreamReader",
33
+ "asyncio.streams.StreamReaderProtocol": "asyncio.StreamReaderProtocol",
34
+ "asyncio.streams.StreamWriter": "asyncio.StreamWriter",
35
+ "asyncio.taskgroups.TaskGroup": "asyncio.TaskGroup",
36
+ "asyncio.timeouts.Timeout": "asyncio.Timeout",
37
+ "asyncio.transports.BaseTransport": "asyncio.BaseTransport",
38
+ "asyncio.transports.DatagramTransport": "asyncio.DatagramTransport",
39
+ "asyncio.transports.ReadTransport": "asyncio.ReadTransport",
40
+ "asyncio.transports.SubprocessTransport": "asyncio.SubprocessTransport",
41
+ "asyncio.transports.Transport": "asyncio.Transport",
42
+ "asyncio.transports.WriteTransport": "asyncio.WriteTransport",
43
+ "asyncio.unix_events.AbstractChildWatcher": "asyncio.AbstractChildWatcher",
44
+ "asyncio.unix_events.FastChildWatcher": "asyncio.FastChildWatcher",
45
+ "asyncio.unix_events.MultiLoopChildWatcher": "asyncio.MultiLoopChildWatcher",
46
+ "asyncio.unix_events.PidfdChildWatcher": "asyncio.PidfdChildWatcher",
47
+ "asyncio.unix_events.SafeChildWatcher": "asyncio.SafeChildWatcher",
48
+ "asyncio.unix_events.ThreadedChildWatcher": "asyncio.ThreadedChildWatcher",
49
+ "asyncio.windows_events.IocpProactor": "asyncio.IocpProactor",
50
+ "asyncio.windows_events.ProactorEventLoop": "asyncio.ProactorEventLoop",
51
+ "asyncio.windows_events.WindowsProactorEventLoopPolicy": "asyncio.WindowsProactorEventLoopPolicy",
52
+ "asyncio.windows_events.WindowsSelectorEventLoopPolicy": "asyncio.WindowsSelectorEventLoopPolicy",
53
+ "compression.bz2.BZ2Compressor": "bz2.BZ2Compressor",
54
+ "compression.bz2.BZ2Decompressor": "bz2.BZ2Decompressor",
55
+ "compression.bz2.BZ2File": "bz2.BZ2File",
56
+ "compression.gzip.BadGzipFile": "gzip.BadGzipFile",
57
+ "compression.gzip.GzipFile": "gzip.GzipFile",
58
+ "compression.lzma.LZMACompressor": "lzma.LZMACompressor",
59
+ "compression.lzma.LZMADecompressor": "lzma.LZMADecompressor",
60
+ "compression.lzma.LZMAError": "lzma.LZMAError",
61
+ "compression.lzma.LZMAFile": "lzma.LZMAFile",
62
+ "compression.zlib.error": "zlib.error",
63
+ "concurrent.futures.TimeoutError": "asyncio.TimeoutError",
64
+ "concurrent.futures.interpreter.InterpreterPoolExecutor": "concurrent.futures.InterpreterPoolExecutor",
65
+ "concurrent.futures.process.ProcessPoolExecutor": "concurrent.futures.ProcessPoolExecutor",
66
+ "concurrent.futures.thread.ThreadPoolExecutor": "concurrent.futures.ThreadPoolExecutor",
67
+ "distutils.command.build_py.Mixin2to3": "distutils.util.Mixin2to3",
68
+ "distutils.command.build_scripts.Mixin2to3": "distutils.util.Mixin2to3",
69
+ "distutils.core.Command": "distutils.cmd.Command",
70
+ "distutils.core.Distribution": "distutils.dist.Distribution",
71
+ "distutils.core.Extension": "distutils.extension.Extension",
72
+ "importlib.resources.ResourceReader": "importlib.abc.ResourceReader",
73
+ "importlib.resources.abc.Traversable": "importlib.abc.Traversable",
74
+ "importlib.resources.abc.TraversableResources": "importlib.abc.TraversableResources",
75
+ "importlib.resources.readers.FileReader": "importlib.readers.FileReader",
76
+ "importlib.resources.readers.MultiplexedPath": "importlib.readers.MultiplexedPath",
77
+ "importlib.resources.readers.NamespaceReader": "importlib.readers.NamespaceReader",
78
+ "importlib.resources.readers.ZipReader": "importlib.readers.ZipReader",
79
+ "importlib.resources.simple.ResourceContainer": "importlib.simple.ResourceContainer",
80
+ "importlib.resources.simple.ResourceHandle": "importlib.simple.ResourceHandle",
81
+ "importlib.resources.simple.SimpleReader": "importlib.simple.SimpleReader",
82
+ "importlib.resources.simple.TraversableReader": "importlib.simple.TraversableReader",
83
+ "json.decoder.JSONDecodeError": "json.JSONDecodeError",
84
+ "json.decoder.JSONDecoder": "json.JSONDecoder",
85
+ "json.encoder.JSONEncoder": "json.JSONEncoder",
86
+ "multiprocessing.context.AuthenticationError": "multiprocessing.AuthenticationError",
87
+ "multiprocessing.context.BufferTooShort": "multiprocessing.BufferTooShort",
88
+ "multiprocessing.context.Process": "multiprocessing.Process",
89
+ "multiprocessing.context.ProcessError": "multiprocessing.ProcessError",
90
+ "multiprocessing.context.TimeoutError": "multiprocessing.TimeoutError",
91
+ "multiprocessing.dummy.Barrier": "threading.Barrier",
92
+ "multiprocessing.dummy.BoundedSemaphore": "threading.BoundedSemaphore",
93
+ "multiprocessing.dummy.Condition": "threading.Condition",
94
+ "multiprocessing.dummy.Event": "threading.Event",
95
+ "multiprocessing.dummy.Semaphore": "threading.Semaphore",
96
+ "nt.stat_result": "os.stat_result",
97
+ "nt.statvfs_result": "os.statvfs_result",
98
+ "nt.terminal_size": "os.terminal_size",
99
+ "nt.times_result": "os.times_result",
100
+ "nt.uname_result": "os.uname_result",
101
+ "posix.sched_param": "os.sched_param",
102
+ "posix.stat_result": "os.stat_result",
103
+ "posix.statvfs_result": "os.statvfs_result",
104
+ "posix.terminal_size": "os.terminal_size",
105
+ "posix.times_result": "os.times_result",
106
+ "posix.uname_result": "os.uname_result",
107
+ "posix.waitid_result": "os.waitid_result",
108
+ "secrets.SystemRandom": "random.SystemRandom",
109
+ "sqlite3.dbapi2.Blob": "sqlite3.Blob",
110
+ "sqlite3.dbapi2.Connection": "sqlite3.Connection",
111
+ "sqlite3.dbapi2.Cursor": "sqlite3.Cursor",
112
+ "sqlite3.dbapi2.DataError": "sqlite3.DataError",
113
+ "sqlite3.dbapi2.DatabaseError": "sqlite3.DatabaseError",
114
+ "sqlite3.dbapi2.Error": "sqlite3.Error",
115
+ "sqlite3.dbapi2.IntegrityError": "sqlite3.IntegrityError",
116
+ "sqlite3.dbapi2.InterfaceError": "sqlite3.InterfaceError",
117
+ "sqlite3.dbapi2.InternalError": "sqlite3.InternalError",
118
+ "sqlite3.dbapi2.NotSupportedError": "sqlite3.NotSupportedError",
119
+ "sqlite3.dbapi2.OperationalError": "sqlite3.OperationalError",
120
+ "sqlite3.dbapi2.PrepareProtocol": "sqlite3.PrepareProtocol",
121
+ "sqlite3.dbapi2.ProgrammingError": "sqlite3.ProgrammingError",
122
+ "sqlite3.dbapi2.Row": "sqlite3.Row",
123
+ "sqlite3.dbapi2.Warning": "sqlite3.Warning",
124
+ "sre_compile.error": "re.error",
125
+ "sre_constants.error": "re.error",
126
+ "sre_parse.error": "re.error",
127
+ "unittest.async_case.IsolatedAsyncioTestCase": "unittest.IsolatedAsyncioTestCase",
128
+ "unittest.case.FunctionTestCase": "unittest.FunctionTestCase",
129
+ "unittest.case.SkipTest": "unittest.SkipTest",
130
+ "unittest.case.TestCase": "unittest.TestCase",
131
+ "unittest.loader.TestLoader": "unittest.TestLoader",
132
+ "unittest.main.TestProgram": "unittest.TestProgram",
133
+ "unittest.result.TestResult": "unittest.TestResult",
134
+ "unittest.runner.TextTestRunner": "unittest.TextTestRunner",
135
+ "unittest.suite.BaseTestSuite": "unittest.BaseTestSuite",
136
+ "unittest.suite.TestSuite": "unittest.TestSuite",
137
+ "urllib.request.HTTPError": "urllib.error.HTTPError",
138
+ "xml.etree.cElementTree.C14NWriterTarget": "xml.etree.ElementTree.C14NWriterTarget",
139
+ "xml.etree.cElementTree.ParseError": "xml.etree.ElementTree.ParseError",
140
+ "xml.etree.cElementTree.QName": "xml.etree.ElementTree.QName",
141
+ "xml.etree.cElementTree.TreeBuilder": "xml.etree.ElementTree.TreeBuilder",
142
+ "xml.parsers.expat.ExpatError": "pyexpat.ExpatError",
143
+ "xml.parsers.expat.XMLParserType": "pyexpat.XMLParserType",
144
+ "xml.sax.handler.ContentHandler": "xml.sax.ContentHandler",
145
+ "xml.sax.handler.ErrorHandler": "xml.sax.ErrorHandler",
146
+ "xml.sax.xmlreader.InputSource": "xml.sax.InputSource"
147
+ }