primary-api-models 0.1.0__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 (1580) hide show
  1. primary_api_models/__init__.py +53 -0
  2. primary_api_models/account_data.py +62 -0
  3. primary_api_models/commons.py +49 -0
  4. primary_api_models/detailed_instruments.py +11 -0
  5. primary_api_models/detailed_position.py +53 -0
  6. primary_api_models/enhanced_models.py +27 -0
  7. primary_api_models/enums.py +184 -0
  8. primary_api_models/instrument_details.py +48 -0
  9. primary_api_models/listed_instruments.py +14 -0
  10. primary_api_models/market_data.py +25 -0
  11. primary_api_models/order_report.py +34 -0
  12. primary_api_models/order_status.py +11 -0
  13. primary_api_models/positions.py +27 -0
  14. primary_api_models-0.1.0.dist-info/METADATA +7 -0
  15. primary_api_models-0.1.0.dist-info/RECORD +1580 -0
  16. primary_api_models-0.1.0.dist-info/WHEEL +5 -0
  17. primary_api_models-0.1.0.dist-info/top_level.txt +3 -0
  18. tests/conftest.py +6 -0
  19. tests/test_models.py +61 -0
  20. venv/Lib/site-packages/_pytest/__init__.py +13 -0
  21. venv/Lib/site-packages/_pytest/_argcomplete.py +117 -0
  22. venv/Lib/site-packages/_pytest/_code/__init__.py +26 -0
  23. venv/Lib/site-packages/_pytest/_code/code.py +1571 -0
  24. venv/Lib/site-packages/_pytest/_code/source.py +225 -0
  25. venv/Lib/site-packages/_pytest/_io/__init__.py +10 -0
  26. venv/Lib/site-packages/_pytest/_io/pprint.py +673 -0
  27. venv/Lib/site-packages/_pytest/_io/saferepr.py +130 -0
  28. venv/Lib/site-packages/_pytest/_io/terminalwriter.py +258 -0
  29. venv/Lib/site-packages/_pytest/_io/wcwidth.py +57 -0
  30. venv/Lib/site-packages/_pytest/_py/__init__.py +0 -0
  31. venv/Lib/site-packages/_pytest/_py/error.py +119 -0
  32. venv/Lib/site-packages/_pytest/_py/path.py +1475 -0
  33. venv/Lib/site-packages/_pytest/_version.py +24 -0
  34. venv/Lib/site-packages/_pytest/assertion/__init__.py +208 -0
  35. venv/Lib/site-packages/_pytest/assertion/rewrite.py +1202 -0
  36. venv/Lib/site-packages/_pytest/assertion/truncate.py +137 -0
  37. venv/Lib/site-packages/_pytest/assertion/util.py +615 -0
  38. venv/Lib/site-packages/_pytest/cacheprovider.py +646 -0
  39. venv/Lib/site-packages/_pytest/capture.py +1144 -0
  40. venv/Lib/site-packages/_pytest/compat.py +314 -0
  41. venv/Lib/site-packages/_pytest/config/__init__.py +2203 -0
  42. venv/Lib/site-packages/_pytest/config/argparsing.py +578 -0
  43. venv/Lib/site-packages/_pytest/config/compat.py +85 -0
  44. venv/Lib/site-packages/_pytest/config/exceptions.py +15 -0
  45. venv/Lib/site-packages/_pytest/config/findpaths.py +350 -0
  46. venv/Lib/site-packages/_pytest/debugging.py +407 -0
  47. venv/Lib/site-packages/_pytest/deprecated.py +99 -0
  48. venv/Lib/site-packages/_pytest/doctest.py +736 -0
  49. venv/Lib/site-packages/_pytest/faulthandler.py +119 -0
  50. venv/Lib/site-packages/_pytest/fixtures.py +2047 -0
  51. venv/Lib/site-packages/_pytest/freeze_support.py +45 -0
  52. venv/Lib/site-packages/_pytest/helpconfig.py +293 -0
  53. venv/Lib/site-packages/_pytest/hookspec.py +1342 -0
  54. venv/Lib/site-packages/_pytest/junitxml.py +695 -0
  55. venv/Lib/site-packages/_pytest/legacypath.py +468 -0
  56. venv/Lib/site-packages/_pytest/logging.py +960 -0
  57. venv/Lib/site-packages/_pytest/main.py +1203 -0
  58. venv/Lib/site-packages/_pytest/mark/__init__.py +301 -0
  59. venv/Lib/site-packages/_pytest/mark/expression.py +353 -0
  60. venv/Lib/site-packages/_pytest/mark/structures.py +664 -0
  61. venv/Lib/site-packages/_pytest/monkeypatch.py +435 -0
  62. venv/Lib/site-packages/_pytest/nodes.py +772 -0
  63. venv/Lib/site-packages/_pytest/outcomes.py +308 -0
  64. venv/Lib/site-packages/_pytest/pastebin.py +117 -0
  65. venv/Lib/site-packages/_pytest/pathlib.py +1063 -0
  66. venv/Lib/site-packages/_pytest/py.typed +0 -0
  67. venv/Lib/site-packages/_pytest/pytester.py +1791 -0
  68. venv/Lib/site-packages/_pytest/pytester_assertions.py +74 -0
  69. venv/Lib/site-packages/_pytest/python.py +1772 -0
  70. venv/Lib/site-packages/_pytest/python_api.py +819 -0
  71. venv/Lib/site-packages/_pytest/raises.py +1517 -0
  72. venv/Lib/site-packages/_pytest/recwarn.py +367 -0
  73. venv/Lib/site-packages/_pytest/reports.py +694 -0
  74. venv/Lib/site-packages/_pytest/runner.py +580 -0
  75. venv/Lib/site-packages/_pytest/scope.py +91 -0
  76. venv/Lib/site-packages/_pytest/setuponly.py +98 -0
  77. venv/Lib/site-packages/_pytest/setupplan.py +39 -0
  78. venv/Lib/site-packages/_pytest/skipping.py +321 -0
  79. venv/Lib/site-packages/_pytest/stash.py +116 -0
  80. venv/Lib/site-packages/_pytest/stepwise.py +209 -0
  81. venv/Lib/site-packages/_pytest/subtests.py +411 -0
  82. venv/Lib/site-packages/_pytest/terminal.py +1763 -0
  83. venv/Lib/site-packages/_pytest/terminalprogress.py +30 -0
  84. venv/Lib/site-packages/_pytest/threadexception.py +152 -0
  85. venv/Lib/site-packages/_pytest/timing.py +95 -0
  86. venv/Lib/site-packages/_pytest/tmpdir.py +337 -0
  87. venv/Lib/site-packages/_pytest/tracemalloc.py +24 -0
  88. venv/Lib/site-packages/_pytest/unittest.py +632 -0
  89. venv/Lib/site-packages/_pytest/unraisableexception.py +163 -0
  90. venv/Lib/site-packages/_pytest/warning_types.py +172 -0
  91. venv/Lib/site-packages/_pytest/warnings.py +151 -0
  92. venv/Lib/site-packages/annotated_types/__init__.py +432 -0
  93. venv/Lib/site-packages/annotated_types/py.typed +0 -0
  94. venv/Lib/site-packages/annotated_types/test_cases.py +151 -0
  95. venv/Lib/site-packages/build/__init__.py +47 -0
  96. venv/Lib/site-packages/build/__main__.py +654 -0
  97. venv/Lib/site-packages/build/_builder.py +393 -0
  98. venv/Lib/site-packages/build/_compat/__init__.py +0 -0
  99. venv/Lib/site-packages/build/_compat/importlib.py +22 -0
  100. venv/Lib/site-packages/build/_compat/tarfile.py +31 -0
  101. venv/Lib/site-packages/build/_compat/tomllib.py +19 -0
  102. venv/Lib/site-packages/build/_ctx.py +105 -0
  103. venv/Lib/site-packages/build/_exceptions.py +69 -0
  104. venv/Lib/site-packages/build/_types.py +22 -0
  105. venv/Lib/site-packages/build/_util.py +68 -0
  106. venv/Lib/site-packages/build/env.py +507 -0
  107. venv/Lib/site-packages/build/py.typed +0 -0
  108. venv/Lib/site-packages/build/util.py +70 -0
  109. venv/Lib/site-packages/certifi/__init__.py +4 -0
  110. venv/Lib/site-packages/certifi/__main__.py +12 -0
  111. venv/Lib/site-packages/certifi/core.py +83 -0
  112. venv/Lib/site-packages/certifi/py.typed +0 -0
  113. venv/Lib/site-packages/charset_normalizer/__init__.py +48 -0
  114. venv/Lib/site-packages/charset_normalizer/__main__.py +6 -0
  115. venv/Lib/site-packages/charset_normalizer/api.py +988 -0
  116. venv/Lib/site-packages/charset_normalizer/cd.py +454 -0
  117. venv/Lib/site-packages/charset_normalizer/cli/__init__.py +8 -0
  118. venv/Lib/site-packages/charset_normalizer/cli/__main__.py +362 -0
  119. venv/Lib/site-packages/charset_normalizer/constant.py +2050 -0
  120. venv/Lib/site-packages/charset_normalizer/legacy.py +79 -0
  121. venv/Lib/site-packages/charset_normalizer/md.py +936 -0
  122. venv/Lib/site-packages/charset_normalizer/models.py +369 -0
  123. venv/Lib/site-packages/charset_normalizer/py.typed +0 -0
  124. venv/Lib/site-packages/charset_normalizer/utils.py +422 -0
  125. venv/Lib/site-packages/charset_normalizer/version.py +8 -0
  126. venv/Lib/site-packages/colorama/__init__.py +7 -0
  127. venv/Lib/site-packages/colorama/ansi.py +102 -0
  128. venv/Lib/site-packages/colorama/ansitowin32.py +277 -0
  129. venv/Lib/site-packages/colorama/initialise.py +121 -0
  130. venv/Lib/site-packages/colorama/tests/__init__.py +1 -0
  131. venv/Lib/site-packages/colorama/tests/ansi_test.py +76 -0
  132. venv/Lib/site-packages/colorama/tests/ansitowin32_test.py +294 -0
  133. venv/Lib/site-packages/colorama/tests/initialise_test.py +189 -0
  134. venv/Lib/site-packages/colorama/tests/isatty_test.py +57 -0
  135. venv/Lib/site-packages/colorama/tests/utils.py +49 -0
  136. venv/Lib/site-packages/colorama/tests/winterm_test.py +131 -0
  137. venv/Lib/site-packages/colorama/win32.py +180 -0
  138. venv/Lib/site-packages/colorama/winterm.py +195 -0
  139. venv/Lib/site-packages/docutils/__init__.py +341 -0
  140. venv/Lib/site-packages/docutils/__main__.py +103 -0
  141. venv/Lib/site-packages/docutils/core.py +855 -0
  142. venv/Lib/site-packages/docutils/examples.py +123 -0
  143. venv/Lib/site-packages/docutils/frontend.py +1178 -0
  144. venv/Lib/site-packages/docutils/io.py +716 -0
  145. venv/Lib/site-packages/docutils/languages/__init__.py +117 -0
  146. venv/Lib/site-packages/docutils/languages/af.py +58 -0
  147. venv/Lib/site-packages/docutils/languages/ar.py +60 -0
  148. venv/Lib/site-packages/docutils/languages/ca.py +65 -0
  149. venv/Lib/site-packages/docutils/languages/cs.py +60 -0
  150. venv/Lib/site-packages/docutils/languages/da.py +61 -0
  151. venv/Lib/site-packages/docutils/languages/de.py +58 -0
  152. venv/Lib/site-packages/docutils/languages/en.py +60 -0
  153. venv/Lib/site-packages/docutils/languages/eo.py +61 -0
  154. venv/Lib/site-packages/docutils/languages/es.py +58 -0
  155. venv/Lib/site-packages/docutils/languages/fa.py +60 -0
  156. venv/Lib/site-packages/docutils/languages/fi.py +60 -0
  157. venv/Lib/site-packages/docutils/languages/fr.py +58 -0
  158. venv/Lib/site-packages/docutils/languages/gl.py +62 -0
  159. venv/Lib/site-packages/docutils/languages/he.py +62 -0
  160. venv/Lib/site-packages/docutils/languages/it.py +58 -0
  161. venv/Lib/site-packages/docutils/languages/ja.py +60 -0
  162. venv/Lib/site-packages/docutils/languages/ka.py +58 -0
  163. venv/Lib/site-packages/docutils/languages/ko.py +60 -0
  164. venv/Lib/site-packages/docutils/languages/lt.py +60 -0
  165. venv/Lib/site-packages/docutils/languages/lv.py +59 -0
  166. venv/Lib/site-packages/docutils/languages/nl.py +60 -0
  167. venv/Lib/site-packages/docutils/languages/pl.py +60 -0
  168. venv/Lib/site-packages/docutils/languages/pt_br.py +60 -0
  169. venv/Lib/site-packages/docutils/languages/ru.py +58 -0
  170. venv/Lib/site-packages/docutils/languages/sk.py +58 -0
  171. venv/Lib/site-packages/docutils/languages/sv.py +59 -0
  172. venv/Lib/site-packages/docutils/languages/uk.py +58 -0
  173. venv/Lib/site-packages/docutils/languages/zh_cn.py +62 -0
  174. venv/Lib/site-packages/docutils/languages/zh_tw.py +61 -0
  175. venv/Lib/site-packages/docutils/nodes.py +3341 -0
  176. venv/Lib/site-packages/docutils/parsers/__init__.py +115 -0
  177. venv/Lib/site-packages/docutils/parsers/commonmark_wrapper.py +56 -0
  178. venv/Lib/site-packages/docutils/parsers/docutils_xml.py +194 -0
  179. venv/Lib/site-packages/docutils/parsers/null.py +24 -0
  180. venv/Lib/site-packages/docutils/parsers/recommonmark_wrapper.py +174 -0
  181. venv/Lib/site-packages/docutils/parsers/rst/__init__.py +414 -0
  182. venv/Lib/site-packages/docutils/parsers/rst/directives/__init__.py +480 -0
  183. venv/Lib/site-packages/docutils/parsers/rst/directives/admonitions.py +101 -0
  184. venv/Lib/site-packages/docutils/parsers/rst/directives/body.py +329 -0
  185. venv/Lib/site-packages/docutils/parsers/rst/directives/html.py +21 -0
  186. venv/Lib/site-packages/docutils/parsers/rst/directives/images.py +186 -0
  187. venv/Lib/site-packages/docutils/parsers/rst/directives/misc.py +690 -0
  188. venv/Lib/site-packages/docutils/parsers/rst/directives/parts.py +129 -0
  189. venv/Lib/site-packages/docutils/parsers/rst/directives/references.py +28 -0
  190. venv/Lib/site-packages/docutils/parsers/rst/directives/tables.py +523 -0
  191. venv/Lib/site-packages/docutils/parsers/rst/languages/__init__.py +63 -0
  192. venv/Lib/site-packages/docutils/parsers/rst/languages/af.py +107 -0
  193. venv/Lib/site-packages/docutils/parsers/rst/languages/ar.py +99 -0
  194. venv/Lib/site-packages/docutils/parsers/rst/languages/ca.py +130 -0
  195. venv/Lib/site-packages/docutils/parsers/rst/languages/cs.py +110 -0
  196. venv/Lib/site-packages/docutils/parsers/rst/languages/da.py +113 -0
  197. venv/Lib/site-packages/docutils/parsers/rst/languages/de.py +106 -0
  198. venv/Lib/site-packages/docutils/parsers/rst/languages/en.py +115 -0
  199. venv/Lib/site-packages/docutils/parsers/rst/languages/eo.py +118 -0
  200. venv/Lib/site-packages/docutils/parsers/rst/languages/es.py +121 -0
  201. venv/Lib/site-packages/docutils/parsers/rst/languages/fa.py +102 -0
  202. venv/Lib/site-packages/docutils/parsers/rst/languages/fi.py +98 -0
  203. venv/Lib/site-packages/docutils/parsers/rst/languages/fr.py +107 -0
  204. venv/Lib/site-packages/docutils/parsers/rst/languages/gl.py +106 -0
  205. venv/Lib/site-packages/docutils/parsers/rst/languages/he.py +110 -0
  206. venv/Lib/site-packages/docutils/parsers/rst/languages/it.py +98 -0
  207. venv/Lib/site-packages/docutils/parsers/rst/languages/ja.py +119 -0
  208. venv/Lib/site-packages/docutils/parsers/rst/languages/ka.py +89 -0
  209. venv/Lib/site-packages/docutils/parsers/rst/languages/ko.py +111 -0
  210. venv/Lib/site-packages/docutils/parsers/rst/languages/lt.py +109 -0
  211. venv/Lib/site-packages/docutils/parsers/rst/languages/lv.py +108 -0
  212. venv/Lib/site-packages/docutils/parsers/rst/languages/nl.py +113 -0
  213. venv/Lib/site-packages/docutils/parsers/rst/languages/pl.py +100 -0
  214. venv/Lib/site-packages/docutils/parsers/rst/languages/pt_br.py +109 -0
  215. venv/Lib/site-packages/docutils/parsers/rst/languages/ru.py +90 -0
  216. venv/Lib/site-packages/docutils/parsers/rst/languages/sk.py +96 -0
  217. venv/Lib/site-packages/docutils/parsers/rst/languages/sv.py +96 -0
  218. venv/Lib/site-packages/docutils/parsers/rst/languages/uk.py +91 -0
  219. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_cn.py +104 -0
  220. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_tw.py +109 -0
  221. venv/Lib/site-packages/docutils/parsers/rst/roles.py +450 -0
  222. venv/Lib/site-packages/docutils/parsers/rst/states.py +3266 -0
  223. venv/Lib/site-packages/docutils/parsers/rst/tableparser.py +543 -0
  224. venv/Lib/site-packages/docutils/readers/__init__.py +135 -0
  225. venv/Lib/site-packages/docutils/readers/doctree.py +50 -0
  226. venv/Lib/site-packages/docutils/readers/pep.py +55 -0
  227. venv/Lib/site-packages/docutils/readers/standalone.py +65 -0
  228. venv/Lib/site-packages/docutils/statemachine.py +1534 -0
  229. venv/Lib/site-packages/docutils/transforms/__init__.py +196 -0
  230. venv/Lib/site-packages/docutils/transforms/components.py +56 -0
  231. venv/Lib/site-packages/docutils/transforms/frontmatter.py +548 -0
  232. venv/Lib/site-packages/docutils/transforms/misc.py +143 -0
  233. venv/Lib/site-packages/docutils/transforms/parts.py +175 -0
  234. venv/Lib/site-packages/docutils/transforms/peps.py +315 -0
  235. venv/Lib/site-packages/docutils/transforms/references.py +990 -0
  236. venv/Lib/site-packages/docutils/transforms/universal.py +364 -0
  237. venv/Lib/site-packages/docutils/transforms/writer_aux.py +57 -0
  238. venv/Lib/site-packages/docutils/utils/__init__.py +850 -0
  239. venv/Lib/site-packages/docutils/utils/_roman_numerals.py +264 -0
  240. venv/Lib/site-packages/docutils/utils/_typing.py +39 -0
  241. venv/Lib/site-packages/docutils/utils/code_analyzer.py +140 -0
  242. venv/Lib/site-packages/docutils/utils/math/__init__.py +77 -0
  243. venv/Lib/site-packages/docutils/utils/math/latex2mathml.py +1252 -0
  244. venv/Lib/site-packages/docutils/utils/math/math2html.py +3166 -0
  245. venv/Lib/site-packages/docutils/utils/math/mathalphabet2unichar.py +892 -0
  246. venv/Lib/site-packages/docutils/utils/math/mathml_elements.py +482 -0
  247. venv/Lib/site-packages/docutils/utils/math/tex2mathml_extern.py +263 -0
  248. venv/Lib/site-packages/docutils/utils/math/tex2unichar.py +730 -0
  249. venv/Lib/site-packages/docutils/utils/math/unichar2tex.py +808 -0
  250. venv/Lib/site-packages/docutils/utils/punctuation_chars.py +123 -0
  251. venv/Lib/site-packages/docutils/utils/smartquotes.py +1006 -0
  252. venv/Lib/site-packages/docutils/utils/urischemes.py +138 -0
  253. venv/Lib/site-packages/docutils/writers/__init__.py +277 -0
  254. venv/Lib/site-packages/docutils/writers/_html_base.py +1895 -0
  255. venv/Lib/site-packages/docutils/writers/docutils_xml.py +191 -0
  256. venv/Lib/site-packages/docutils/writers/html4css1/__init__.py +964 -0
  257. venv/Lib/site-packages/docutils/writers/html5_polyglot/__init__.py +398 -0
  258. venv/Lib/site-packages/docutils/writers/latex2e/__init__.py +3417 -0
  259. venv/Lib/site-packages/docutils/writers/manpage.py +1353 -0
  260. venv/Lib/site-packages/docutils/writers/null.py +28 -0
  261. venv/Lib/site-packages/docutils/writers/odf_odt/__init__.py +3461 -0
  262. venv/Lib/site-packages/docutils/writers/odf_odt/prepstyles.py +80 -0
  263. venv/Lib/site-packages/docutils/writers/odf_odt/pygmentsformatter.py +106 -0
  264. venv/Lib/site-packages/docutils/writers/pep_html/__init__.py +102 -0
  265. venv/Lib/site-packages/docutils/writers/pseudoxml.py +41 -0
  266. venv/Lib/site-packages/docutils/writers/s5_html/__init__.py +354 -0
  267. venv/Lib/site-packages/docutils/writers/xetex/__init__.py +168 -0
  268. venv/Lib/site-packages/id/__init__.py +114 -0
  269. venv/Lib/site-packages/id/__main__.py +88 -0
  270. venv/Lib/site-packages/id/_internal/oidc/__init__.py +13 -0
  271. venv/Lib/site-packages/id/_internal/oidc/ambient.py +363 -0
  272. venv/Lib/site-packages/id/py.typed +4 -0
  273. venv/Lib/site-packages/idna/__init__.py +45 -0
  274. venv/Lib/site-packages/idna/codec.py +122 -0
  275. venv/Lib/site-packages/idna/compat.py +15 -0
  276. venv/Lib/site-packages/idna/core.py +440 -0
  277. venv/Lib/site-packages/idna/idnadata.py +4367 -0
  278. venv/Lib/site-packages/idna/intranges.py +57 -0
  279. venv/Lib/site-packages/idna/package_data.py +1 -0
  280. venv/Lib/site-packages/idna/py.typed +0 -0
  281. venv/Lib/site-packages/idna/uts46data.py +8384 -0
  282. venv/Lib/site-packages/iniconfig/__init__.py +249 -0
  283. venv/Lib/site-packages/iniconfig/_parse.py +163 -0
  284. venv/Lib/site-packages/iniconfig/_version.py +34 -0
  285. venv/Lib/site-packages/iniconfig/exceptions.py +16 -0
  286. venv/Lib/site-packages/iniconfig/py.typed +0 -0
  287. venv/Lib/site-packages/jaraco/classes/__init__.py +0 -0
  288. venv/Lib/site-packages/jaraco/classes/ancestry.py +76 -0
  289. venv/Lib/site-packages/jaraco/classes/meta.py +85 -0
  290. venv/Lib/site-packages/jaraco/classes/properties.py +241 -0
  291. venv/Lib/site-packages/jaraco/classes/py.typed +0 -0
  292. venv/Lib/site-packages/jaraco/context/__init__.py +422 -0
  293. venv/Lib/site-packages/jaraco/context/py.typed +0 -0
  294. venv/Lib/site-packages/jaraco/functools/__init__.py +722 -0
  295. venv/Lib/site-packages/jaraco/functools/__init__.pyi +123 -0
  296. venv/Lib/site-packages/jaraco/functools/py.typed +0 -0
  297. venv/Lib/site-packages/keyring/__init__.py +17 -0
  298. venv/Lib/site-packages/keyring/__main__.py +4 -0
  299. venv/Lib/site-packages/keyring/backend.py +300 -0
  300. venv/Lib/site-packages/keyring/backends/SecretService.py +120 -0
  301. venv/Lib/site-packages/keyring/backends/Windows.py +168 -0
  302. venv/Lib/site-packages/keyring/backends/__init__.py +0 -0
  303. venv/Lib/site-packages/keyring/backends/chainer.py +71 -0
  304. venv/Lib/site-packages/keyring/backends/fail.py +30 -0
  305. venv/Lib/site-packages/keyring/backends/kwallet.py +164 -0
  306. venv/Lib/site-packages/keyring/backends/libsecret.py +155 -0
  307. venv/Lib/site-packages/keyring/backends/macOS/__init__.py +85 -0
  308. venv/Lib/site-packages/keyring/backends/macOS/api.py +184 -0
  309. venv/Lib/site-packages/keyring/backends/null.py +20 -0
  310. venv/Lib/site-packages/keyring/cli.py +220 -0
  311. venv/Lib/site-packages/keyring/compat/__init__.py +7 -0
  312. venv/Lib/site-packages/keyring/compat/properties.py +169 -0
  313. venv/Lib/site-packages/keyring/compat/py312.py +9 -0
  314. venv/Lib/site-packages/keyring/completion.py +55 -0
  315. venv/Lib/site-packages/keyring/core.py +202 -0
  316. venv/Lib/site-packages/keyring/credentials.py +85 -0
  317. venv/Lib/site-packages/keyring/devpi_client.py +29 -0
  318. venv/Lib/site-packages/keyring/errors.py +67 -0
  319. venv/Lib/site-packages/keyring/http.py +39 -0
  320. venv/Lib/site-packages/keyring/py.typed +0 -0
  321. venv/Lib/site-packages/keyring/testing/__init__.py +0 -0
  322. venv/Lib/site-packages/keyring/testing/backend.py +200 -0
  323. venv/Lib/site-packages/keyring/testing/util.py +68 -0
  324. venv/Lib/site-packages/keyring/util/__init__.py +11 -0
  325. venv/Lib/site-packages/keyring/util/platform_.py +40 -0
  326. venv/Lib/site-packages/markdown_it/__init__.py +6 -0
  327. venv/Lib/site-packages/markdown_it/_compat.py +1 -0
  328. venv/Lib/site-packages/markdown_it/_punycode.py +67 -0
  329. venv/Lib/site-packages/markdown_it/cli/__init__.py +0 -0
  330. venv/Lib/site-packages/markdown_it/cli/parse.py +127 -0
  331. venv/Lib/site-packages/markdown_it/common/__init__.py +0 -0
  332. venv/Lib/site-packages/markdown_it/common/entities.py +5 -0
  333. venv/Lib/site-packages/markdown_it/common/html_blocks.py +69 -0
  334. venv/Lib/site-packages/markdown_it/common/html_re.py +39 -0
  335. venv/Lib/site-packages/markdown_it/common/normalize_url.py +81 -0
  336. venv/Lib/site-packages/markdown_it/common/utils.py +313 -0
  337. venv/Lib/site-packages/markdown_it/helpers/__init__.py +6 -0
  338. venv/Lib/site-packages/markdown_it/helpers/parse_link_destination.py +83 -0
  339. venv/Lib/site-packages/markdown_it/helpers/parse_link_label.py +44 -0
  340. venv/Lib/site-packages/markdown_it/helpers/parse_link_title.py +75 -0
  341. venv/Lib/site-packages/markdown_it/main.py +351 -0
  342. venv/Lib/site-packages/markdown_it/parser_block.py +113 -0
  343. venv/Lib/site-packages/markdown_it/parser_core.py +46 -0
  344. venv/Lib/site-packages/markdown_it/parser_inline.py +215 -0
  345. venv/Lib/site-packages/markdown_it/presets/__init__.py +48 -0
  346. venv/Lib/site-packages/markdown_it/presets/commonmark.py +75 -0
  347. venv/Lib/site-packages/markdown_it/presets/default.py +36 -0
  348. venv/Lib/site-packages/markdown_it/presets/zero.py +44 -0
  349. venv/Lib/site-packages/markdown_it/py.typed +1 -0
  350. venv/Lib/site-packages/markdown_it/renderer.py +356 -0
  351. venv/Lib/site-packages/markdown_it/ruler.py +275 -0
  352. venv/Lib/site-packages/markdown_it/rules_block/__init__.py +28 -0
  353. venv/Lib/site-packages/markdown_it/rules_block/blockquote.py +368 -0
  354. venv/Lib/site-packages/markdown_it/rules_block/code.py +36 -0
  355. venv/Lib/site-packages/markdown_it/rules_block/fence.py +146 -0
  356. venv/Lib/site-packages/markdown_it/rules_block/heading.py +69 -0
  357. venv/Lib/site-packages/markdown_it/rules_block/hr.py +56 -0
  358. venv/Lib/site-packages/markdown_it/rules_block/html_block.py +90 -0
  359. venv/Lib/site-packages/markdown_it/rules_block/lheading.py +86 -0
  360. venv/Lib/site-packages/markdown_it/rules_block/list.py +408 -0
  361. venv/Lib/site-packages/markdown_it/rules_block/paragraph.py +66 -0
  362. venv/Lib/site-packages/markdown_it/rules_block/reference.py +235 -0
  363. venv/Lib/site-packages/markdown_it/rules_block/state_block.py +261 -0
  364. venv/Lib/site-packages/markdown_it/rules_block/table.py +250 -0
  365. venv/Lib/site-packages/markdown_it/rules_core/__init__.py +19 -0
  366. venv/Lib/site-packages/markdown_it/rules_core/block.py +13 -0
  367. venv/Lib/site-packages/markdown_it/rules_core/inline.py +10 -0
  368. venv/Lib/site-packages/markdown_it/rules_core/linkify.py +149 -0
  369. venv/Lib/site-packages/markdown_it/rules_core/normalize.py +19 -0
  370. venv/Lib/site-packages/markdown_it/rules_core/replacements.py +127 -0
  371. venv/Lib/site-packages/markdown_it/rules_core/smartquotes.py +202 -0
  372. venv/Lib/site-packages/markdown_it/rules_core/state_core.py +25 -0
  373. venv/Lib/site-packages/markdown_it/rules_core/text_join.py +53 -0
  374. venv/Lib/site-packages/markdown_it/rules_inline/__init__.py +31 -0
  375. venv/Lib/site-packages/markdown_it/rules_inline/autolink.py +77 -0
  376. venv/Lib/site-packages/markdown_it/rules_inline/backticks.py +72 -0
  377. venv/Lib/site-packages/markdown_it/rules_inline/balance_pairs.py +138 -0
  378. venv/Lib/site-packages/markdown_it/rules_inline/emphasis.py +102 -0
  379. venv/Lib/site-packages/markdown_it/rules_inline/entity.py +53 -0
  380. venv/Lib/site-packages/markdown_it/rules_inline/escape.py +93 -0
  381. venv/Lib/site-packages/markdown_it/rules_inline/fragments_join.py +54 -0
  382. venv/Lib/site-packages/markdown_it/rules_inline/html_inline.py +43 -0
  383. venv/Lib/site-packages/markdown_it/rules_inline/image.py +148 -0
  384. venv/Lib/site-packages/markdown_it/rules_inline/link.py +149 -0
  385. venv/Lib/site-packages/markdown_it/rules_inline/linkify.py +62 -0
  386. venv/Lib/site-packages/markdown_it/rules_inline/newline.py +44 -0
  387. venv/Lib/site-packages/markdown_it/rules_inline/state_inline.py +167 -0
  388. venv/Lib/site-packages/markdown_it/rules_inline/strikethrough.py +173 -0
  389. venv/Lib/site-packages/markdown_it/rules_inline/text.py +23 -0
  390. venv/Lib/site-packages/markdown_it/token.py +178 -0
  391. venv/Lib/site-packages/markdown_it/tree.py +333 -0
  392. venv/Lib/site-packages/markdown_it/utils.py +194 -0
  393. venv/Lib/site-packages/mdurl/__init__.py +18 -0
  394. venv/Lib/site-packages/mdurl/_decode.py +104 -0
  395. venv/Lib/site-packages/mdurl/_encode.py +85 -0
  396. venv/Lib/site-packages/mdurl/_format.py +27 -0
  397. venv/Lib/site-packages/mdurl/_parse.py +304 -0
  398. venv/Lib/site-packages/mdurl/_url.py +14 -0
  399. venv/Lib/site-packages/mdurl/py.typed +1 -0
  400. venv/Lib/site-packages/more_itertools/__init__.py +6 -0
  401. venv/Lib/site-packages/more_itertools/__init__.pyi +2 -0
  402. venv/Lib/site-packages/more_itertools/more.py +5457 -0
  403. venv/Lib/site-packages/more_itertools/more.pyi +963 -0
  404. venv/Lib/site-packages/more_itertools/py.typed +0 -0
  405. venv/Lib/site-packages/more_itertools/recipes.py +1599 -0
  406. venv/Lib/site-packages/more_itertools/recipes.pyi +234 -0
  407. venv/Lib/site-packages/nh3/__init__.py +5 -0
  408. venv/Lib/site-packages/nh3/__init__.pyi +42 -0
  409. venv/Lib/site-packages/nh3/py.typed +0 -0
  410. venv/Lib/site-packages/packaging/__init__.py +15 -0
  411. venv/Lib/site-packages/packaging/_elffile.py +108 -0
  412. venv/Lib/site-packages/packaging/_manylinux.py +262 -0
  413. venv/Lib/site-packages/packaging/_musllinux.py +85 -0
  414. venv/Lib/site-packages/packaging/_parser.py +393 -0
  415. venv/Lib/site-packages/packaging/_structures.py +33 -0
  416. venv/Lib/site-packages/packaging/_tokenizer.py +193 -0
  417. venv/Lib/site-packages/packaging/dependency_groups.py +302 -0
  418. venv/Lib/site-packages/packaging/direct_url.py +325 -0
  419. venv/Lib/site-packages/packaging/errors.py +94 -0
  420. venv/Lib/site-packages/packaging/licenses/__init__.py +186 -0
  421. venv/Lib/site-packages/packaging/licenses/_spdx.py +799 -0
  422. venv/Lib/site-packages/packaging/markers.py +492 -0
  423. venv/Lib/site-packages/packaging/metadata.py +964 -0
  424. venv/Lib/site-packages/packaging/py.typed +0 -0
  425. venv/Lib/site-packages/packaging/pylock.py +905 -0
  426. venv/Lib/site-packages/packaging/requirements.py +129 -0
  427. venv/Lib/site-packages/packaging/specifiers.py +1943 -0
  428. venv/Lib/site-packages/packaging/tags.py +932 -0
  429. venv/Lib/site-packages/packaging/utils.py +296 -0
  430. venv/Lib/site-packages/packaging/version.py +1231 -0
  431. venv/Lib/site-packages/pip/__init__.py +13 -0
  432. venv/Lib/site-packages/pip/__main__.py +24 -0
  433. venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  434. venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
  435. venv/Lib/site-packages/pip/_internal/build_env.py +606 -0
  436. venv/Lib/site-packages/pip/_internal/cache.py +291 -0
  437. venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  438. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  439. venv/Lib/site-packages/pip/_internal/cli/base_command.py +255 -0
  440. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1267 -0
  441. venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  442. venv/Lib/site-packages/pip/_internal/cli/index_command.py +195 -0
  443. venv/Lib/site-packages/pip/_internal/cli/main.py +85 -0
  444. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +136 -0
  445. venv/Lib/site-packages/pip/_internal/cli/parser.py +358 -0
  446. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +153 -0
  447. venv/Lib/site-packages/pip/_internal/cli/req_command.py +447 -0
  448. venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  449. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  450. venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  451. venv/Lib/site-packages/pip/_internal/commands/cache.py +255 -0
  452. venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  453. venv/Lib/site-packages/pip/_internal/commands/completion.py +136 -0
  454. venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  455. venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  456. venv/Lib/site-packages/pip/_internal/commands/download.py +146 -0
  457. venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  458. venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  459. venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  460. venv/Lib/site-packages/pip/_internal/commands/index.py +166 -0
  461. venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  462. venv/Lib/site-packages/pip/_internal/commands/install.py +810 -0
  463. venv/Lib/site-packages/pip/_internal/commands/list.py +398 -0
  464. venv/Lib/site-packages/pip/_internal/commands/lock.py +175 -0
  465. venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  466. venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  467. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  468. venv/Lib/site-packages/pip/_internal/commands/wheel.py +171 -0
  469. venv/Lib/site-packages/pip/_internal/configuration.py +396 -0
  470. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  471. venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  472. venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  473. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
  474. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  475. venv/Lib/site-packages/pip/_internal/exceptions.py +971 -0
  476. venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  477. venv/Lib/site-packages/pip/_internal/index/collector.py +488 -0
  478. venv/Lib/site-packages/pip/_internal/index/package_finder.py +1125 -0
  479. venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  480. venv/Lib/site-packages/pip/_internal/locations/__init__.py +440 -0
  481. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  482. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +218 -0
  483. venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  484. venv/Lib/site-packages/pip/_internal/main.py +12 -0
  485. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
  486. venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  487. venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  488. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  489. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  490. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
  491. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  492. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  493. venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
  494. venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
  495. venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
  496. venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
  497. venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
  498. venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
  499. venv/Lib/site-packages/pip/_internal/models/link.py +617 -0
  500. venv/Lib/site-packages/pip/_internal/models/release_control.py +92 -0
  501. venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
  502. venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
  503. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +56 -0
  504. venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
  505. venv/Lib/site-packages/pip/_internal/models/wheel.py +80 -0
  506. venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  507. venv/Lib/site-packages/pip/_internal/network/auth.py +568 -0
  508. venv/Lib/site-packages/pip/_internal/network/cache.py +128 -0
  509. venv/Lib/site-packages/pip/_internal/network/download.py +341 -0
  510. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  511. venv/Lib/site-packages/pip/_internal/network/session.py +532 -0
  512. venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  513. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  514. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  515. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  516. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  517. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  518. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  519. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  520. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  521. venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  522. venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  523. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  524. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +745 -0
  525. venv/Lib/site-packages/pip/_internal/operations/prepare.py +747 -0
  526. venv/Lib/site-packages/pip/_internal/pyproject.py +123 -0
  527. venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  528. venv/Lib/site-packages/pip/_internal/req/constructors.py +568 -0
  529. venv/Lib/site-packages/pip/_internal/req/pep723.py +41 -0
  530. venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  531. venv/Lib/site-packages/pip/_internal/req/req_file.py +631 -0
  532. venv/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
  533. venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  534. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  535. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  536. venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  537. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  538. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  539. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  540. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  541. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
  542. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +856 -0
  543. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  544. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
  545. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  546. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +251 -0
  547. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  548. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +255 -0
  549. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  550. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  551. venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  552. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  553. venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  554. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  555. venv/Lib/site-packages/pip/_internal/utils/datetime.py +28 -0
  556. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  557. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  558. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  559. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  560. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +203 -0
  561. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  562. venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  563. venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  564. venv/Lib/site-packages/pip/_internal/utils/logging.py +396 -0
  565. venv/Lib/site-packages/pip/_internal/utils/misc.py +771 -0
  566. venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  567. venv/Lib/site-packages/pip/_internal/utils/pylock.py +116 -0
  568. venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  569. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  570. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  571. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
  572. venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  573. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  574. venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  575. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  576. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  577. venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  578. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  579. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  580. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +695 -0
  581. venv/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
  582. venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  583. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +32 -0
  584. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  585. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +167 -0
  586. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  587. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  588. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  589. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  590. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  591. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +121 -0
  592. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  593. venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  594. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  595. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  596. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  597. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  598. venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  599. venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  600. venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  601. venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  602. venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  603. venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  604. venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  605. venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  606. venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  607. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  608. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  609. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  610. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  611. venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  612. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  613. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  614. venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  615. venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  616. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  617. venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  618. venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  619. venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  620. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4309 -0
  621. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  622. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  623. venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  624. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8841 -0
  625. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  626. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  627. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  628. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  629. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  630. venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +108 -0
  631. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  632. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  633. venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +365 -0
  634. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +69 -0
  635. venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +193 -0
  636. venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +147 -0
  637. venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +799 -0
  638. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +388 -0
  639. venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +978 -0
  640. venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  641. venv/Lib/site-packages/pip/_vendor/packaging/pylock.py +635 -0
  642. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +86 -0
  643. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1068 -0
  644. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +651 -0
  645. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +158 -0
  646. venv/Lib/site-packages/pip/_vendor/packaging/version.py +792 -0
  647. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  648. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  649. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  650. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  651. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  652. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  653. venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  654. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  655. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  656. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +278 -0
  657. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  658. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  659. venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  660. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  661. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  662. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  663. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  664. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  665. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  666. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  667. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  668. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  669. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  670. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  671. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  672. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  673. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  674. venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  675. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  676. venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  677. venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  678. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  679. venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  680. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  681. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  682. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  683. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  684. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  685. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  686. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  687. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  688. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
  689. venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  690. venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  691. venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  692. venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  693. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  694. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  695. venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  696. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  697. venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  698. venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  699. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  700. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  701. venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  702. venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  703. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  704. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  705. venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  706. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  707. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  708. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  709. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  710. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  711. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  712. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  713. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  714. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  715. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  716. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  717. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  718. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  719. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  720. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  721. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  722. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  723. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  724. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  725. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  726. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  727. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  728. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  729. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  730. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  731. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  732. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  733. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  734. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  735. venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  736. venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  737. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  738. venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  739. venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  740. venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  741. venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  742. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  743. venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  744. venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  745. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  746. venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  747. venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  748. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  749. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  750. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  751. venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  752. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  753. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  754. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  755. venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  756. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  757. venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  758. venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  759. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  760. venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  761. venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  762. venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  763. venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  764. venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  765. venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  766. venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  767. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  768. venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  769. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  770. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  771. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  772. venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  773. venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  774. venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  775. venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  776. venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  777. venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  778. venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  779. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  780. venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  781. venv/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
  782. venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  783. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  784. venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  785. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  786. venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  787. venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  788. venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  789. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  790. venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  791. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  792. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
  793. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
  794. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  795. venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  796. venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  797. venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  798. venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  799. venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  800. venv/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
  801. venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  802. venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  803. venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  804. venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  805. venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  806. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  807. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  808. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  809. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  810. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  811. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  812. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  813. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  814. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  815. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  816. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  817. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  818. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  819. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  820. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  821. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  822. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  823. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  824. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  825. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  826. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  827. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  828. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  829. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  830. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  831. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  832. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  833. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  834. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  835. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  836. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  837. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  838. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  839. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  840. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  841. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  842. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  843. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  844. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  845. venv/Lib/site-packages/pip/py.typed +4 -0
  846. venv/Lib/site-packages/pluggy/__init__.py +30 -0
  847. venv/Lib/site-packages/pluggy/_callers.py +169 -0
  848. venv/Lib/site-packages/pluggy/_hooks.py +714 -0
  849. venv/Lib/site-packages/pluggy/_manager.py +523 -0
  850. venv/Lib/site-packages/pluggy/_result.py +107 -0
  851. venv/Lib/site-packages/pluggy/_tracing.py +72 -0
  852. venv/Lib/site-packages/pluggy/_version.py +21 -0
  853. venv/Lib/site-packages/pluggy/_warnings.py +27 -0
  854. venv/Lib/site-packages/pluggy/py.typed +0 -0
  855. venv/Lib/site-packages/py.py +15 -0
  856. venv/Lib/site-packages/pydantic/__init__.py +456 -0
  857. venv/Lib/site-packages/pydantic/_internal/__init__.py +0 -0
  858. venv/Lib/site-packages/pydantic/_internal/_config.py +386 -0
  859. venv/Lib/site-packages/pydantic/_internal/_core_metadata.py +97 -0
  860. venv/Lib/site-packages/pydantic/_internal/_core_utils.py +174 -0
  861. venv/Lib/site-packages/pydantic/_internal/_dataclasses.py +315 -0
  862. venv/Lib/site-packages/pydantic/_internal/_decorators.py +873 -0
  863. venv/Lib/site-packages/pydantic/_internal/_decorators_v1.py +174 -0
  864. venv/Lib/site-packages/pydantic/_internal/_discriminated_union.py +494 -0
  865. venv/Lib/site-packages/pydantic/_internal/_docs_extraction.py +113 -0
  866. venv/Lib/site-packages/pydantic/_internal/_fields.py +729 -0
  867. venv/Lib/site-packages/pydantic/_internal/_forward_ref.py +23 -0
  868. venv/Lib/site-packages/pydantic/_internal/_generate_schema.py +2934 -0
  869. venv/Lib/site-packages/pydantic/_internal/_generics.py +530 -0
  870. venv/Lib/site-packages/pydantic/_internal/_git.py +27 -0
  871. venv/Lib/site-packages/pydantic/_internal/_import_utils.py +20 -0
  872. venv/Lib/site-packages/pydantic/_internal/_internal_dataclass.py +7 -0
  873. venv/Lib/site-packages/pydantic/_internal/_known_annotated_metadata.py +403 -0
  874. venv/Lib/site-packages/pydantic/_internal/_mock_val_ser.py +228 -0
  875. venv/Lib/site-packages/pydantic/_internal/_model_construction.py +868 -0
  876. venv/Lib/site-packages/pydantic/_internal/_namespace_utils.py +293 -0
  877. venv/Lib/site-packages/pydantic/_internal/_repr.py +124 -0
  878. venv/Lib/site-packages/pydantic/_internal/_schema_gather.py +212 -0
  879. venv/Lib/site-packages/pydantic/_internal/_schema_generation_shared.py +125 -0
  880. venv/Lib/site-packages/pydantic/_internal/_serializers.py +53 -0
  881. venv/Lib/site-packages/pydantic/_internal/_signature.py +189 -0
  882. venv/Lib/site-packages/pydantic/_internal/_typing_extra.py +785 -0
  883. venv/Lib/site-packages/pydantic/_internal/_utils.py +446 -0
  884. venv/Lib/site-packages/pydantic/_internal/_validate_call.py +141 -0
  885. venv/Lib/site-packages/pydantic/_internal/_validators.py +534 -0
  886. venv/Lib/site-packages/pydantic/_migration.py +316 -0
  887. venv/Lib/site-packages/pydantic/alias_generators.py +62 -0
  888. venv/Lib/site-packages/pydantic/aliases.py +135 -0
  889. venv/Lib/site-packages/pydantic/annotated_handlers.py +122 -0
  890. venv/Lib/site-packages/pydantic/class_validators.py +5 -0
  891. venv/Lib/site-packages/pydantic/color.py +604 -0
  892. venv/Lib/site-packages/pydantic/config.py +1296 -0
  893. venv/Lib/site-packages/pydantic/dataclasses.py +413 -0
  894. venv/Lib/site-packages/pydantic/datetime_parse.py +5 -0
  895. venv/Lib/site-packages/pydantic/decorator.py +5 -0
  896. venv/Lib/site-packages/pydantic/deprecated/__init__.py +0 -0
  897. venv/Lib/site-packages/pydantic/deprecated/class_validators.py +256 -0
  898. venv/Lib/site-packages/pydantic/deprecated/config.py +72 -0
  899. venv/Lib/site-packages/pydantic/deprecated/copy_internals.py +224 -0
  900. venv/Lib/site-packages/pydantic/deprecated/decorator.py +284 -0
  901. venv/Lib/site-packages/pydantic/deprecated/json.py +141 -0
  902. venv/Lib/site-packages/pydantic/deprecated/parse.py +80 -0
  903. venv/Lib/site-packages/pydantic/deprecated/tools.py +103 -0
  904. venv/Lib/site-packages/pydantic/env_settings.py +5 -0
  905. venv/Lib/site-packages/pydantic/error_wrappers.py +5 -0
  906. venv/Lib/site-packages/pydantic/errors.py +189 -0
  907. venv/Lib/site-packages/pydantic/experimental/__init__.py +1 -0
  908. venv/Lib/site-packages/pydantic/experimental/arguments_schema.py +44 -0
  909. venv/Lib/site-packages/pydantic/experimental/missing_sentinel.py +5 -0
  910. venv/Lib/site-packages/pydantic/experimental/pipeline.py +663 -0
  911. venv/Lib/site-packages/pydantic/fields.py +1892 -0
  912. venv/Lib/site-packages/pydantic/functional_serializers.py +470 -0
  913. venv/Lib/site-packages/pydantic/functional_validators.py +889 -0
  914. venv/Lib/site-packages/pydantic/generics.py +5 -0
  915. venv/Lib/site-packages/pydantic/json.py +5 -0
  916. venv/Lib/site-packages/pydantic/json_schema.py +2911 -0
  917. venv/Lib/site-packages/pydantic/main.py +1838 -0
  918. venv/Lib/site-packages/pydantic/mypy.py +1412 -0
  919. venv/Lib/site-packages/pydantic/networks.py +1332 -0
  920. venv/Lib/site-packages/pydantic/parse.py +5 -0
  921. venv/Lib/site-packages/pydantic/plugin/__init__.py +193 -0
  922. venv/Lib/site-packages/pydantic/plugin/_loader.py +58 -0
  923. venv/Lib/site-packages/pydantic/plugin/_schema_validator.py +143 -0
  924. venv/Lib/site-packages/pydantic/py.typed +0 -0
  925. venv/Lib/site-packages/pydantic/root_model.py +157 -0
  926. venv/Lib/site-packages/pydantic/schema.py +5 -0
  927. venv/Lib/site-packages/pydantic/tools.py +5 -0
  928. venv/Lib/site-packages/pydantic/type_adapter.py +801 -0
  929. venv/Lib/site-packages/pydantic/types.py +3310 -0
  930. venv/Lib/site-packages/pydantic/typing.py +5 -0
  931. venv/Lib/site-packages/pydantic/utils.py +5 -0
  932. venv/Lib/site-packages/pydantic/v1/__init__.py +131 -0
  933. venv/Lib/site-packages/pydantic/v1/_hypothesis_plugin.py +391 -0
  934. venv/Lib/site-packages/pydantic/v1/annotated_types.py +72 -0
  935. venv/Lib/site-packages/pydantic/v1/class_validators.py +361 -0
  936. venv/Lib/site-packages/pydantic/v1/color.py +494 -0
  937. venv/Lib/site-packages/pydantic/v1/config.py +191 -0
  938. venv/Lib/site-packages/pydantic/v1/dataclasses.py +500 -0
  939. venv/Lib/site-packages/pydantic/v1/datetime_parse.py +248 -0
  940. venv/Lib/site-packages/pydantic/v1/decorator.py +264 -0
  941. venv/Lib/site-packages/pydantic/v1/env_settings.py +350 -0
  942. venv/Lib/site-packages/pydantic/v1/error_wrappers.py +161 -0
  943. venv/Lib/site-packages/pydantic/v1/errors.py +646 -0
  944. venv/Lib/site-packages/pydantic/v1/fields.py +1253 -0
  945. venv/Lib/site-packages/pydantic/v1/generics.py +400 -0
  946. venv/Lib/site-packages/pydantic/v1/json.py +112 -0
  947. venv/Lib/site-packages/pydantic/v1/main.py +1130 -0
  948. venv/Lib/site-packages/pydantic/v1/mypy.py +949 -0
  949. venv/Lib/site-packages/pydantic/v1/networks.py +747 -0
  950. venv/Lib/site-packages/pydantic/v1/parse.py +66 -0
  951. venv/Lib/site-packages/pydantic/v1/py.typed +0 -0
  952. venv/Lib/site-packages/pydantic/v1/schema.py +1163 -0
  953. venv/Lib/site-packages/pydantic/v1/tools.py +92 -0
  954. venv/Lib/site-packages/pydantic/v1/types.py +1205 -0
  955. venv/Lib/site-packages/pydantic/v1/typing.py +627 -0
  956. venv/Lib/site-packages/pydantic/v1/utils.py +807 -0
  957. venv/Lib/site-packages/pydantic/v1/validators.py +768 -0
  958. venv/Lib/site-packages/pydantic/v1/version.py +38 -0
  959. venv/Lib/site-packages/pydantic/validate_call_decorator.py +116 -0
  960. venv/Lib/site-packages/pydantic/validators.py +5 -0
  961. venv/Lib/site-packages/pydantic/version.py +113 -0
  962. venv/Lib/site-packages/pydantic/warnings.py +122 -0
  963. venv/Lib/site-packages/pydantic_core/__init__.py +171 -0
  964. venv/Lib/site-packages/pydantic_core/_pydantic_core.pyi +1056 -0
  965. venv/Lib/site-packages/pydantic_core/core_schema.py +4461 -0
  966. venv/Lib/site-packages/pydantic_core/py.typed +0 -0
  967. venv/Lib/site-packages/pygments/__init__.py +82 -0
  968. venv/Lib/site-packages/pygments/__main__.py +17 -0
  969. venv/Lib/site-packages/pygments/cmdline.py +668 -0
  970. venv/Lib/site-packages/pygments/console.py +70 -0
  971. venv/Lib/site-packages/pygments/filter.py +70 -0
  972. venv/Lib/site-packages/pygments/filters/__init__.py +942 -0
  973. venv/Lib/site-packages/pygments/formatter.py +129 -0
  974. venv/Lib/site-packages/pygments/formatters/__init__.py +157 -0
  975. venv/Lib/site-packages/pygments/formatters/_mapping.py +23 -0
  976. venv/Lib/site-packages/pygments/formatters/bbcode.py +108 -0
  977. venv/Lib/site-packages/pygments/formatters/groff.py +170 -0
  978. venv/Lib/site-packages/pygments/formatters/html.py +997 -0
  979. venv/Lib/site-packages/pygments/formatters/img.py +686 -0
  980. venv/Lib/site-packages/pygments/formatters/irc.py +153 -0
  981. venv/Lib/site-packages/pygments/formatters/latex.py +518 -0
  982. venv/Lib/site-packages/pygments/formatters/other.py +160 -0
  983. venv/Lib/site-packages/pygments/formatters/pangomarkup.py +83 -0
  984. venv/Lib/site-packages/pygments/formatters/rtf.py +349 -0
  985. venv/Lib/site-packages/pygments/formatters/svg.py +185 -0
  986. venv/Lib/site-packages/pygments/formatters/terminal.py +127 -0
  987. venv/Lib/site-packages/pygments/formatters/terminal256.py +338 -0
  988. venv/Lib/site-packages/pygments/lexer.py +963 -0
  989. venv/Lib/site-packages/pygments/lexers/__init__.py +362 -0
  990. venv/Lib/site-packages/pygments/lexers/_ada_builtins.py +103 -0
  991. venv/Lib/site-packages/pygments/lexers/_asy_builtins.py +1644 -0
  992. venv/Lib/site-packages/pygments/lexers/_cl_builtins.py +231 -0
  993. venv/Lib/site-packages/pygments/lexers/_cocoa_builtins.py +75 -0
  994. venv/Lib/site-packages/pygments/lexers/_csound_builtins.py +1780 -0
  995. venv/Lib/site-packages/pygments/lexers/_css_builtins.py +558 -0
  996. venv/Lib/site-packages/pygments/lexers/_googlesql_builtins.py +918 -0
  997. venv/Lib/site-packages/pygments/lexers/_julia_builtins.py +411 -0
  998. venv/Lib/site-packages/pygments/lexers/_lasso_builtins.py +5326 -0
  999. venv/Lib/site-packages/pygments/lexers/_lilypond_builtins.py +5184 -0
  1000. venv/Lib/site-packages/pygments/lexers/_lua_builtins.py +285 -0
  1001. venv/Lib/site-packages/pygments/lexers/_luau_builtins.py +62 -0
  1002. venv/Lib/site-packages/pygments/lexers/_mapping.py +603 -0
  1003. venv/Lib/site-packages/pygments/lexers/_mql_builtins.py +1171 -0
  1004. venv/Lib/site-packages/pygments/lexers/_mysql_builtins.py +1384 -0
  1005. venv/Lib/site-packages/pygments/lexers/_openedge_builtins.py +2600 -0
  1006. venv/Lib/site-packages/pygments/lexers/_php_builtins.py +3328 -0
  1007. venv/Lib/site-packages/pygments/lexers/_postgres_builtins.py +739 -0
  1008. venv/Lib/site-packages/pygments/lexers/_qlik_builtins.py +666 -0
  1009. venv/Lib/site-packages/pygments/lexers/_scheme_builtins.py +1609 -0
  1010. venv/Lib/site-packages/pygments/lexers/_scilab_builtins.py +3093 -0
  1011. venv/Lib/site-packages/pygments/lexers/_sourcemod_builtins.py +1151 -0
  1012. venv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
  1013. venv/Lib/site-packages/pygments/lexers/_stan_builtins.py +761 -0
  1014. venv/Lib/site-packages/pygments/lexers/_stata_builtins.py +457 -0
  1015. venv/Lib/site-packages/pygments/lexers/_tsql_builtins.py +1003 -0
  1016. venv/Lib/site-packages/pygments/lexers/_usd_builtins.py +112 -0
  1017. venv/Lib/site-packages/pygments/lexers/_vbscript_builtins.py +279 -0
  1018. venv/Lib/site-packages/pygments/lexers/_vim_builtins.py +1938 -0
  1019. venv/Lib/site-packages/pygments/lexers/actionscript.py +243 -0
  1020. venv/Lib/site-packages/pygments/lexers/ada.py +144 -0
  1021. venv/Lib/site-packages/pygments/lexers/agile.py +25 -0
  1022. venv/Lib/site-packages/pygments/lexers/algebra.py +300 -0
  1023. venv/Lib/site-packages/pygments/lexers/ambient.py +75 -0
  1024. venv/Lib/site-packages/pygments/lexers/amdgpu.py +54 -0
  1025. venv/Lib/site-packages/pygments/lexers/ampl.py +87 -0
  1026. venv/Lib/site-packages/pygments/lexers/apdlexer.py +593 -0
  1027. venv/Lib/site-packages/pygments/lexers/apl.py +103 -0
  1028. venv/Lib/site-packages/pygments/lexers/archetype.py +315 -0
  1029. venv/Lib/site-packages/pygments/lexers/arrow.py +116 -0
  1030. venv/Lib/site-packages/pygments/lexers/arturo.py +249 -0
  1031. venv/Lib/site-packages/pygments/lexers/asc.py +55 -0
  1032. venv/Lib/site-packages/pygments/lexers/asm.py +1058 -0
  1033. venv/Lib/site-packages/pygments/lexers/asn1.py +178 -0
  1034. venv/Lib/site-packages/pygments/lexers/automation.py +379 -0
  1035. venv/Lib/site-packages/pygments/lexers/bare.py +101 -0
  1036. venv/Lib/site-packages/pygments/lexers/basic.py +656 -0
  1037. venv/Lib/site-packages/pygments/lexers/bdd.py +57 -0
  1038. venv/Lib/site-packages/pygments/lexers/berry.py +99 -0
  1039. venv/Lib/site-packages/pygments/lexers/bibtex.py +159 -0
  1040. venv/Lib/site-packages/pygments/lexers/blueprint.py +173 -0
  1041. venv/Lib/site-packages/pygments/lexers/boa.py +97 -0
  1042. venv/Lib/site-packages/pygments/lexers/bqn.py +112 -0
  1043. venv/Lib/site-packages/pygments/lexers/business.py +625 -0
  1044. venv/Lib/site-packages/pygments/lexers/c_cpp.py +415 -0
  1045. venv/Lib/site-packages/pygments/lexers/c_like.py +738 -0
  1046. venv/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
  1047. venv/Lib/site-packages/pygments/lexers/carbon.py +95 -0
  1048. venv/Lib/site-packages/pygments/lexers/cddl.py +172 -0
  1049. venv/Lib/site-packages/pygments/lexers/chapel.py +139 -0
  1050. venv/Lib/site-packages/pygments/lexers/clean.py +180 -0
  1051. venv/Lib/site-packages/pygments/lexers/codeql.py +80 -0
  1052. venv/Lib/site-packages/pygments/lexers/comal.py +81 -0
  1053. venv/Lib/site-packages/pygments/lexers/compiled.py +35 -0
  1054. venv/Lib/site-packages/pygments/lexers/configs.py +1433 -0
  1055. venv/Lib/site-packages/pygments/lexers/console.py +114 -0
  1056. venv/Lib/site-packages/pygments/lexers/cplint.py +43 -0
  1057. venv/Lib/site-packages/pygments/lexers/crystal.py +364 -0
  1058. venv/Lib/site-packages/pygments/lexers/csound.py +466 -0
  1059. venv/Lib/site-packages/pygments/lexers/css.py +632 -0
  1060. venv/Lib/site-packages/pygments/lexers/d.py +259 -0
  1061. venv/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
  1062. venv/Lib/site-packages/pygments/lexers/data.py +763 -0
  1063. venv/Lib/site-packages/pygments/lexers/dax.py +135 -0
  1064. venv/Lib/site-packages/pygments/lexers/devicetree.py +120 -0
  1065. venv/Lib/site-packages/pygments/lexers/diff.py +169 -0
  1066. venv/Lib/site-packages/pygments/lexers/dns.py +109 -0
  1067. venv/Lib/site-packages/pygments/lexers/dotnet.py +873 -0
  1068. venv/Lib/site-packages/pygments/lexers/dsls.py +970 -0
  1069. venv/Lib/site-packages/pygments/lexers/dylan.py +279 -0
  1070. venv/Lib/site-packages/pygments/lexers/ecl.py +144 -0
  1071. venv/Lib/site-packages/pygments/lexers/eiffel.py +68 -0
  1072. venv/Lib/site-packages/pygments/lexers/elm.py +123 -0
  1073. venv/Lib/site-packages/pygments/lexers/elpi.py +201 -0
  1074. venv/Lib/site-packages/pygments/lexers/email.py +132 -0
  1075. venv/Lib/site-packages/pygments/lexers/erlang.py +526 -0
  1076. venv/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
  1077. venv/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
  1078. venv/Lib/site-packages/pygments/lexers/factor.py +363 -0
  1079. venv/Lib/site-packages/pygments/lexers/fantom.py +251 -0
  1080. venv/Lib/site-packages/pygments/lexers/felix.py +275 -0
  1081. venv/Lib/site-packages/pygments/lexers/fift.py +68 -0
  1082. venv/Lib/site-packages/pygments/lexers/floscript.py +81 -0
  1083. venv/Lib/site-packages/pygments/lexers/forth.py +178 -0
  1084. venv/Lib/site-packages/pygments/lexers/fortran.py +212 -0
  1085. venv/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
  1086. venv/Lib/site-packages/pygments/lexers/freefem.py +893 -0
  1087. venv/Lib/site-packages/pygments/lexers/func.py +110 -0
  1088. venv/Lib/site-packages/pygments/lexers/functional.py +21 -0
  1089. venv/Lib/site-packages/pygments/lexers/futhark.py +105 -0
  1090. venv/Lib/site-packages/pygments/lexers/gcodelexer.py +35 -0
  1091. venv/Lib/site-packages/pygments/lexers/gdscript.py +189 -0
  1092. venv/Lib/site-packages/pygments/lexers/gleam.py +74 -0
  1093. venv/Lib/site-packages/pygments/lexers/go.py +97 -0
  1094. venv/Lib/site-packages/pygments/lexers/grammar_notation.py +262 -0
  1095. venv/Lib/site-packages/pygments/lexers/graph.py +108 -0
  1096. venv/Lib/site-packages/pygments/lexers/graphics.py +794 -0
  1097. venv/Lib/site-packages/pygments/lexers/graphql.py +176 -0
  1098. venv/Lib/site-packages/pygments/lexers/graphviz.py +58 -0
  1099. venv/Lib/site-packages/pygments/lexers/gsql.py +103 -0
  1100. venv/Lib/site-packages/pygments/lexers/hare.py +73 -0
  1101. venv/Lib/site-packages/pygments/lexers/haskell.py +867 -0
  1102. venv/Lib/site-packages/pygments/lexers/haxe.py +941 -0
  1103. venv/Lib/site-packages/pygments/lexers/hdl.py +466 -0
  1104. venv/Lib/site-packages/pygments/lexers/hexdump.py +102 -0
  1105. venv/Lib/site-packages/pygments/lexers/html.py +670 -0
  1106. venv/Lib/site-packages/pygments/lexers/idl.py +284 -0
  1107. venv/Lib/site-packages/pygments/lexers/igor.py +435 -0
  1108. venv/Lib/site-packages/pygments/lexers/inferno.py +95 -0
  1109. venv/Lib/site-packages/pygments/lexers/installers.py +352 -0
  1110. venv/Lib/site-packages/pygments/lexers/int_fiction.py +1370 -0
  1111. venv/Lib/site-packages/pygments/lexers/iolang.py +61 -0
  1112. venv/Lib/site-packages/pygments/lexers/j.py +151 -0
  1113. venv/Lib/site-packages/pygments/lexers/javascript.py +1591 -0
  1114. venv/Lib/site-packages/pygments/lexers/jmespath.py +69 -0
  1115. venv/Lib/site-packages/pygments/lexers/jslt.py +94 -0
  1116. venv/Lib/site-packages/pygments/lexers/json5.py +83 -0
  1117. venv/Lib/site-packages/pygments/lexers/jsonnet.py +169 -0
  1118. venv/Lib/site-packages/pygments/lexers/jsx.py +100 -0
  1119. venv/Lib/site-packages/pygments/lexers/julia.py +294 -0
  1120. venv/Lib/site-packages/pygments/lexers/jvm.py +1807 -0
  1121. venv/Lib/site-packages/pygments/lexers/kuin.py +332 -0
  1122. venv/Lib/site-packages/pygments/lexers/kusto.py +93 -0
  1123. venv/Lib/site-packages/pygments/lexers/ldap.py +155 -0
  1124. venv/Lib/site-packages/pygments/lexers/lean.py +241 -0
  1125. venv/Lib/site-packages/pygments/lexers/lilypond.py +225 -0
  1126. venv/Lib/site-packages/pygments/lexers/lisp.py +3152 -0
  1127. venv/Lib/site-packages/pygments/lexers/macaulay2.py +1847 -0
  1128. venv/Lib/site-packages/pygments/lexers/make.py +212 -0
  1129. venv/Lib/site-packages/pygments/lexers/maple.py +291 -0
  1130. venv/Lib/site-packages/pygments/lexers/markup.py +1659 -0
  1131. venv/Lib/site-packages/pygments/lexers/math.py +21 -0
  1132. venv/Lib/site-packages/pygments/lexers/matlab.py +3307 -0
  1133. venv/Lib/site-packages/pygments/lexers/maxima.py +84 -0
  1134. venv/Lib/site-packages/pygments/lexers/meson.py +139 -0
  1135. venv/Lib/site-packages/pygments/lexers/mime.py +210 -0
  1136. venv/Lib/site-packages/pygments/lexers/minecraft.py +392 -0
  1137. venv/Lib/site-packages/pygments/lexers/mips.py +130 -0
  1138. venv/Lib/site-packages/pygments/lexers/ml.py +958 -0
  1139. venv/Lib/site-packages/pygments/lexers/modeling.py +368 -0
  1140. venv/Lib/site-packages/pygments/lexers/modula2.py +1579 -0
  1141. venv/Lib/site-packages/pygments/lexers/mojo.py +707 -0
  1142. venv/Lib/site-packages/pygments/lexers/monte.py +203 -0
  1143. venv/Lib/site-packages/pygments/lexers/mosel.py +447 -0
  1144. venv/Lib/site-packages/pygments/lexers/ncl.py +894 -0
  1145. venv/Lib/site-packages/pygments/lexers/nimrod.py +199 -0
  1146. venv/Lib/site-packages/pygments/lexers/nit.py +63 -0
  1147. venv/Lib/site-packages/pygments/lexers/nix.py +144 -0
  1148. venv/Lib/site-packages/pygments/lexers/numbair.py +63 -0
  1149. venv/Lib/site-packages/pygments/lexers/oberon.py +120 -0
  1150. venv/Lib/site-packages/pygments/lexers/objective.py +513 -0
  1151. venv/Lib/site-packages/pygments/lexers/ooc.py +84 -0
  1152. venv/Lib/site-packages/pygments/lexers/openscad.py +96 -0
  1153. venv/Lib/site-packages/pygments/lexers/other.py +41 -0
  1154. venv/Lib/site-packages/pygments/lexers/parasail.py +78 -0
  1155. venv/Lib/site-packages/pygments/lexers/parsers.py +798 -0
  1156. venv/Lib/site-packages/pygments/lexers/pascal.py +644 -0
  1157. venv/Lib/site-packages/pygments/lexers/pawn.py +202 -0
  1158. venv/Lib/site-packages/pygments/lexers/pddl.py +82 -0
  1159. venv/Lib/site-packages/pygments/lexers/perl.py +733 -0
  1160. venv/Lib/site-packages/pygments/lexers/phix.py +363 -0
  1161. venv/Lib/site-packages/pygments/lexers/php.py +335 -0
  1162. venv/Lib/site-packages/pygments/lexers/pointless.py +70 -0
  1163. venv/Lib/site-packages/pygments/lexers/pony.py +93 -0
  1164. venv/Lib/site-packages/pygments/lexers/praat.py +303 -0
  1165. venv/Lib/site-packages/pygments/lexers/procfile.py +41 -0
  1166. venv/Lib/site-packages/pygments/lexers/prolog.py +318 -0
  1167. venv/Lib/site-packages/pygments/lexers/promql.py +176 -0
  1168. venv/Lib/site-packages/pygments/lexers/prql.py +251 -0
  1169. venv/Lib/site-packages/pygments/lexers/ptx.py +119 -0
  1170. venv/Lib/site-packages/pygments/lexers/python.py +1204 -0
  1171. venv/Lib/site-packages/pygments/lexers/q.py +187 -0
  1172. venv/Lib/site-packages/pygments/lexers/qlik.py +117 -0
  1173. venv/Lib/site-packages/pygments/lexers/qvt.py +153 -0
  1174. venv/Lib/site-packages/pygments/lexers/r.py +196 -0
  1175. venv/Lib/site-packages/pygments/lexers/rdf.py +468 -0
  1176. venv/Lib/site-packages/pygments/lexers/rebol.py +419 -0
  1177. venv/Lib/site-packages/pygments/lexers/rego.py +57 -0
  1178. venv/Lib/site-packages/pygments/lexers/rell.py +68 -0
  1179. venv/Lib/site-packages/pygments/lexers/resource.py +83 -0
  1180. venv/Lib/site-packages/pygments/lexers/ride.py +138 -0
  1181. venv/Lib/site-packages/pygments/lexers/rita.py +42 -0
  1182. venv/Lib/site-packages/pygments/lexers/rnc.py +66 -0
  1183. venv/Lib/site-packages/pygments/lexers/roboconf.py +81 -0
  1184. venv/Lib/site-packages/pygments/lexers/robotframework.py +551 -0
  1185. venv/Lib/site-packages/pygments/lexers/ruby.py +518 -0
  1186. venv/Lib/site-packages/pygments/lexers/rust.py +222 -0
  1187. venv/Lib/site-packages/pygments/lexers/sas.py +227 -0
  1188. venv/Lib/site-packages/pygments/lexers/savi.py +171 -0
  1189. venv/Lib/site-packages/pygments/lexers/scdoc.py +85 -0
  1190. venv/Lib/site-packages/pygments/lexers/scripting.py +1638 -0
  1191. venv/Lib/site-packages/pygments/lexers/sgf.py +59 -0
  1192. venv/Lib/site-packages/pygments/lexers/shell.py +902 -0
  1193. venv/Lib/site-packages/pygments/lexers/sieve.py +78 -0
  1194. venv/Lib/site-packages/pygments/lexers/slash.py +183 -0
  1195. venv/Lib/site-packages/pygments/lexers/smalltalk.py +194 -0
  1196. venv/Lib/site-packages/pygments/lexers/smithy.py +77 -0
  1197. venv/Lib/site-packages/pygments/lexers/smv.py +78 -0
  1198. venv/Lib/site-packages/pygments/lexers/snobol.py +82 -0
  1199. venv/Lib/site-packages/pygments/lexers/solidity.py +87 -0
  1200. venv/Lib/site-packages/pygments/lexers/soong.py +78 -0
  1201. venv/Lib/site-packages/pygments/lexers/sophia.py +102 -0
  1202. venv/Lib/site-packages/pygments/lexers/special.py +122 -0
  1203. venv/Lib/site-packages/pygments/lexers/spice.py +70 -0
  1204. venv/Lib/site-packages/pygments/lexers/sql.py +1111 -0
  1205. venv/Lib/site-packages/pygments/lexers/srcinfo.py +62 -0
  1206. venv/Lib/site-packages/pygments/lexers/stata.py +170 -0
  1207. venv/Lib/site-packages/pygments/lexers/supercollider.py +94 -0
  1208. venv/Lib/site-packages/pygments/lexers/tablegen.py +177 -0
  1209. venv/Lib/site-packages/pygments/lexers/tact.py +303 -0
  1210. venv/Lib/site-packages/pygments/lexers/tal.py +77 -0
  1211. venv/Lib/site-packages/pygments/lexers/tcl.py +148 -0
  1212. venv/Lib/site-packages/pygments/lexers/teal.py +88 -0
  1213. venv/Lib/site-packages/pygments/lexers/templates.py +2355 -0
  1214. venv/Lib/site-packages/pygments/lexers/teraterm.py +335 -0
  1215. venv/Lib/site-packages/pygments/lexers/testing.py +209 -0
  1216. venv/Lib/site-packages/pygments/lexers/text.py +27 -0
  1217. venv/Lib/site-packages/pygments/lexers/textedit.py +205 -0
  1218. venv/Lib/site-packages/pygments/lexers/textfmts.py +436 -0
  1219. venv/Lib/site-packages/pygments/lexers/theorem.py +410 -0
  1220. venv/Lib/site-packages/pygments/lexers/thingsdb.py +143 -0
  1221. venv/Lib/site-packages/pygments/lexers/tlb.py +59 -0
  1222. venv/Lib/site-packages/pygments/lexers/tls.py +54 -0
  1223. venv/Lib/site-packages/pygments/lexers/tnt.py +270 -0
  1224. venv/Lib/site-packages/pygments/lexers/trafficscript.py +51 -0
  1225. venv/Lib/site-packages/pygments/lexers/typoscript.py +216 -0
  1226. venv/Lib/site-packages/pygments/lexers/typst.py +160 -0
  1227. venv/Lib/site-packages/pygments/lexers/ul4.py +309 -0
  1228. venv/Lib/site-packages/pygments/lexers/unicon.py +413 -0
  1229. venv/Lib/site-packages/pygments/lexers/urbi.py +145 -0
  1230. venv/Lib/site-packages/pygments/lexers/usd.py +85 -0
  1231. venv/Lib/site-packages/pygments/lexers/varnish.py +189 -0
  1232. venv/Lib/site-packages/pygments/lexers/verification.py +113 -0
  1233. venv/Lib/site-packages/pygments/lexers/verifpal.py +65 -0
  1234. venv/Lib/site-packages/pygments/lexers/vip.py +150 -0
  1235. venv/Lib/site-packages/pygments/lexers/vyper.py +140 -0
  1236. venv/Lib/site-packages/pygments/lexers/web.py +24 -0
  1237. venv/Lib/site-packages/pygments/lexers/webassembly.py +119 -0
  1238. venv/Lib/site-packages/pygments/lexers/webidl.py +298 -0
  1239. venv/Lib/site-packages/pygments/lexers/webmisc.py +1006 -0
  1240. venv/Lib/site-packages/pygments/lexers/wgsl.py +406 -0
  1241. venv/Lib/site-packages/pygments/lexers/whiley.py +115 -0
  1242. venv/Lib/site-packages/pygments/lexers/wowtoc.py +120 -0
  1243. venv/Lib/site-packages/pygments/lexers/wren.py +98 -0
  1244. venv/Lib/site-packages/pygments/lexers/x10.py +66 -0
  1245. venv/Lib/site-packages/pygments/lexers/xorg.py +38 -0
  1246. venv/Lib/site-packages/pygments/lexers/yang.py +103 -0
  1247. venv/Lib/site-packages/pygments/lexers/yara.py +69 -0
  1248. venv/Lib/site-packages/pygments/lexers/zig.py +125 -0
  1249. venv/Lib/site-packages/pygments/modeline.py +43 -0
  1250. venv/Lib/site-packages/pygments/plugin.py +74 -0
  1251. venv/Lib/site-packages/pygments/regexopt.py +102 -0
  1252. venv/Lib/site-packages/pygments/scanner.py +104 -0
  1253. venv/Lib/site-packages/pygments/sphinxext.py +247 -0
  1254. venv/Lib/site-packages/pygments/style.py +203 -0
  1255. venv/Lib/site-packages/pygments/styles/__init__.py +61 -0
  1256. venv/Lib/site-packages/pygments/styles/_mapping.py +54 -0
  1257. venv/Lib/site-packages/pygments/styles/abap.py +32 -0
  1258. venv/Lib/site-packages/pygments/styles/algol.py +65 -0
  1259. venv/Lib/site-packages/pygments/styles/algol_nu.py +65 -0
  1260. venv/Lib/site-packages/pygments/styles/arduino.py +100 -0
  1261. venv/Lib/site-packages/pygments/styles/autumn.py +67 -0
  1262. venv/Lib/site-packages/pygments/styles/borland.py +53 -0
  1263. venv/Lib/site-packages/pygments/styles/bw.py +52 -0
  1264. venv/Lib/site-packages/pygments/styles/coffee.py +80 -0
  1265. venv/Lib/site-packages/pygments/styles/colorful.py +83 -0
  1266. venv/Lib/site-packages/pygments/styles/default.py +76 -0
  1267. venv/Lib/site-packages/pygments/styles/dracula.py +90 -0
  1268. venv/Lib/site-packages/pygments/styles/emacs.py +75 -0
  1269. venv/Lib/site-packages/pygments/styles/friendly.py +76 -0
  1270. venv/Lib/site-packages/pygments/styles/friendly_grayscale.py +80 -0
  1271. venv/Lib/site-packages/pygments/styles/fruity.py +47 -0
  1272. venv/Lib/site-packages/pygments/styles/gh_dark.py +113 -0
  1273. venv/Lib/site-packages/pygments/styles/gruvbox.py +118 -0
  1274. venv/Lib/site-packages/pygments/styles/igor.py +32 -0
  1275. venv/Lib/site-packages/pygments/styles/inkpot.py +72 -0
  1276. venv/Lib/site-packages/pygments/styles/lightbulb.py +110 -0
  1277. venv/Lib/site-packages/pygments/styles/lilypond.py +62 -0
  1278. venv/Lib/site-packages/pygments/styles/lovelace.py +100 -0
  1279. venv/Lib/site-packages/pygments/styles/manni.py +79 -0
  1280. venv/Lib/site-packages/pygments/styles/material.py +124 -0
  1281. venv/Lib/site-packages/pygments/styles/monokai.py +112 -0
  1282. venv/Lib/site-packages/pygments/styles/murphy.py +82 -0
  1283. venv/Lib/site-packages/pygments/styles/native.py +70 -0
  1284. venv/Lib/site-packages/pygments/styles/nord.py +156 -0
  1285. venv/Lib/site-packages/pygments/styles/onedark.py +73 -0
  1286. venv/Lib/site-packages/pygments/styles/paraiso_dark.py +124 -0
  1287. venv/Lib/site-packages/pygments/styles/paraiso_light.py +124 -0
  1288. venv/Lib/site-packages/pygments/styles/pastie.py +78 -0
  1289. venv/Lib/site-packages/pygments/styles/perldoc.py +73 -0
  1290. venv/Lib/site-packages/pygments/styles/rainbow_dash.py +95 -0
  1291. venv/Lib/site-packages/pygments/styles/rrt.py +54 -0
  1292. venv/Lib/site-packages/pygments/styles/sas.py +46 -0
  1293. venv/Lib/site-packages/pygments/styles/solarized.py +144 -0
  1294. venv/Lib/site-packages/pygments/styles/staroffice.py +31 -0
  1295. venv/Lib/site-packages/pygments/styles/stata_dark.py +42 -0
  1296. venv/Lib/site-packages/pygments/styles/stata_light.py +42 -0
  1297. venv/Lib/site-packages/pygments/styles/tango.py +143 -0
  1298. venv/Lib/site-packages/pygments/styles/trac.py +66 -0
  1299. venv/Lib/site-packages/pygments/styles/vim.py +67 -0
  1300. venv/Lib/site-packages/pygments/styles/vs.py +41 -0
  1301. venv/Lib/site-packages/pygments/styles/xcode.py +53 -0
  1302. venv/Lib/site-packages/pygments/styles/zenburn.py +83 -0
  1303. venv/Lib/site-packages/pygments/token.py +214 -0
  1304. venv/Lib/site-packages/pygments/unistring.py +153 -0
  1305. venv/Lib/site-packages/pygments/util.py +324 -0
  1306. venv/Lib/site-packages/pyproject_hooks/__init__.py +31 -0
  1307. venv/Lib/site-packages/pyproject_hooks/_impl.py +410 -0
  1308. venv/Lib/site-packages/pyproject_hooks/_in_process/__init__.py +21 -0
  1309. venv/Lib/site-packages/pyproject_hooks/_in_process/_in_process.py +389 -0
  1310. venv/Lib/site-packages/pyproject_hooks/py.typed +0 -0
  1311. venv/Lib/site-packages/pytest/__init__.py +186 -0
  1312. venv/Lib/site-packages/pytest/__main__.py +9 -0
  1313. venv/Lib/site-packages/pytest/py.typed +0 -0
  1314. venv/Lib/site-packages/readme_renderer/__init__.py +13 -0
  1315. venv/Lib/site-packages/readme_renderer/__main__.py +66 -0
  1316. venv/Lib/site-packages/readme_renderer/clean.py +89 -0
  1317. venv/Lib/site-packages/readme_renderer/markdown.py +123 -0
  1318. venv/Lib/site-packages/readme_renderer/py.typed +0 -0
  1319. venv/Lib/site-packages/readme_renderer/rst.py +135 -0
  1320. venv/Lib/site-packages/readme_renderer/txt.py +24 -0
  1321. venv/Lib/site-packages/requests/__init__.py +183 -0
  1322. venv/Lib/site-packages/requests/__version__.py +14 -0
  1323. venv/Lib/site-packages/requests/_internal_utils.py +51 -0
  1324. venv/Lib/site-packages/requests/adapters.py +697 -0
  1325. venv/Lib/site-packages/requests/api.py +157 -0
  1326. venv/Lib/site-packages/requests/auth.py +314 -0
  1327. venv/Lib/site-packages/requests/certs.py +18 -0
  1328. venv/Lib/site-packages/requests/compat.py +106 -0
  1329. venv/Lib/site-packages/requests/cookies.py +561 -0
  1330. venv/Lib/site-packages/requests/exceptions.py +152 -0
  1331. venv/Lib/site-packages/requests/help.py +131 -0
  1332. venv/Lib/site-packages/requests/hooks.py +34 -0
  1333. venv/Lib/site-packages/requests/models.py +1041 -0
  1334. venv/Lib/site-packages/requests/packages.py +23 -0
  1335. venv/Lib/site-packages/requests/sessions.py +834 -0
  1336. venv/Lib/site-packages/requests/status_codes.py +128 -0
  1337. venv/Lib/site-packages/requests/structures.py +99 -0
  1338. venv/Lib/site-packages/requests/utils.py +1083 -0
  1339. venv/Lib/site-packages/requests_toolbelt/__init__.py +34 -0
  1340. venv/Lib/site-packages/requests_toolbelt/_compat.py +302 -0
  1341. venv/Lib/site-packages/requests_toolbelt/adapters/__init__.py +15 -0
  1342. venv/Lib/site-packages/requests_toolbelt/adapters/appengine.py +206 -0
  1343. venv/Lib/site-packages/requests_toolbelt/adapters/fingerprint.py +48 -0
  1344. venv/Lib/site-packages/requests_toolbelt/adapters/host_header_ssl.py +43 -0
  1345. venv/Lib/site-packages/requests_toolbelt/adapters/socket_options.py +129 -0
  1346. venv/Lib/site-packages/requests_toolbelt/adapters/source.py +67 -0
  1347. venv/Lib/site-packages/requests_toolbelt/adapters/ssl.py +66 -0
  1348. venv/Lib/site-packages/requests_toolbelt/adapters/x509.py +196 -0
  1349. venv/Lib/site-packages/requests_toolbelt/auth/__init__.py +0 -0
  1350. venv/Lib/site-packages/requests_toolbelt/auth/_digest_auth_compat.py +29 -0
  1351. venv/Lib/site-packages/requests_toolbelt/auth/guess.py +146 -0
  1352. venv/Lib/site-packages/requests_toolbelt/auth/handler.py +142 -0
  1353. venv/Lib/site-packages/requests_toolbelt/auth/http_proxy_digest.py +103 -0
  1354. venv/Lib/site-packages/requests_toolbelt/cookies/__init__.py +0 -0
  1355. venv/Lib/site-packages/requests_toolbelt/cookies/forgetful.py +7 -0
  1356. venv/Lib/site-packages/requests_toolbelt/downloadutils/__init__.py +0 -0
  1357. venv/Lib/site-packages/requests_toolbelt/downloadutils/stream.py +176 -0
  1358. venv/Lib/site-packages/requests_toolbelt/downloadutils/tee.py +123 -0
  1359. venv/Lib/site-packages/requests_toolbelt/exceptions.py +25 -0
  1360. venv/Lib/site-packages/requests_toolbelt/multipart/__init__.py +31 -0
  1361. venv/Lib/site-packages/requests_toolbelt/multipart/decoder.py +156 -0
  1362. venv/Lib/site-packages/requests_toolbelt/multipart/encoder.py +655 -0
  1363. venv/Lib/site-packages/requests_toolbelt/sessions.py +89 -0
  1364. venv/Lib/site-packages/requests_toolbelt/streaming_iterator.py +116 -0
  1365. venv/Lib/site-packages/requests_toolbelt/threaded/__init__.py +97 -0
  1366. venv/Lib/site-packages/requests_toolbelt/threaded/pool.py +211 -0
  1367. venv/Lib/site-packages/requests_toolbelt/threaded/thread.py +53 -0
  1368. venv/Lib/site-packages/requests_toolbelt/utils/__init__.py +0 -0
  1369. venv/Lib/site-packages/requests_toolbelt/utils/deprecated.py +91 -0
  1370. venv/Lib/site-packages/requests_toolbelt/utils/dump.py +198 -0
  1371. venv/Lib/site-packages/requests_toolbelt/utils/formdata.py +108 -0
  1372. venv/Lib/site-packages/requests_toolbelt/utils/user_agent.py +143 -0
  1373. venv/Lib/site-packages/rfc3986/__init__.py +53 -0
  1374. venv/Lib/site-packages/rfc3986/_mixin.py +373 -0
  1375. venv/Lib/site-packages/rfc3986/abnf_regexp.py +275 -0
  1376. venv/Lib/site-packages/rfc3986/api.py +104 -0
  1377. venv/Lib/site-packages/rfc3986/builder.py +388 -0
  1378. venv/Lib/site-packages/rfc3986/compat.py +59 -0
  1379. venv/Lib/site-packages/rfc3986/exceptions.py +120 -0
  1380. venv/Lib/site-packages/rfc3986/iri.py +161 -0
  1381. venv/Lib/site-packages/rfc3986/misc.py +131 -0
  1382. venv/Lib/site-packages/rfc3986/normalizers.py +171 -0
  1383. venv/Lib/site-packages/rfc3986/parseresult.py +474 -0
  1384. venv/Lib/site-packages/rfc3986/uri.py +160 -0
  1385. venv/Lib/site-packages/rfc3986/validators.py +440 -0
  1386. venv/Lib/site-packages/rich/__init__.py +177 -0
  1387. venv/Lib/site-packages/rich/__main__.py +245 -0
  1388. venv/Lib/site-packages/rich/_emoji_codes.py +3610 -0
  1389. venv/Lib/site-packages/rich/_emoji_replace.py +31 -0
  1390. venv/Lib/site-packages/rich/_export_format.py +76 -0
  1391. venv/Lib/site-packages/rich/_extension.py +10 -0
  1392. venv/Lib/site-packages/rich/_fileno.py +24 -0
  1393. venv/Lib/site-packages/rich/_inspect.py +272 -0
  1394. venv/Lib/site-packages/rich/_log_render.py +94 -0
  1395. venv/Lib/site-packages/rich/_loop.py +43 -0
  1396. venv/Lib/site-packages/rich/_null_file.py +69 -0
  1397. venv/Lib/site-packages/rich/_palettes.py +309 -0
  1398. venv/Lib/site-packages/rich/_pick.py +17 -0
  1399. venv/Lib/site-packages/rich/_ratio.py +153 -0
  1400. venv/Lib/site-packages/rich/_spinners.py +482 -0
  1401. venv/Lib/site-packages/rich/_stack.py +16 -0
  1402. venv/Lib/site-packages/rich/_timer.py +19 -0
  1403. venv/Lib/site-packages/rich/_unicode_data/__init__.py +93 -0
  1404. venv/Lib/site-packages/rich/_unicode_data/_versions.py +23 -0
  1405. venv/Lib/site-packages/rich/_unicode_data/unicode10-0-0.py +611 -0
  1406. venv/Lib/site-packages/rich/_unicode_data/unicode11-0-0.py +625 -0
  1407. venv/Lib/site-packages/rich/_unicode_data/unicode12-0-0.py +637 -0
  1408. venv/Lib/site-packages/rich/_unicode_data/unicode12-1-0.py +636 -0
  1409. venv/Lib/site-packages/rich/_unicode_data/unicode13-0-0.py +648 -0
  1410. venv/Lib/site-packages/rich/_unicode_data/unicode14-0-0.py +661 -0
  1411. venv/Lib/site-packages/rich/_unicode_data/unicode15-0-0.py +671 -0
  1412. venv/Lib/site-packages/rich/_unicode_data/unicode15-1-0.py +670 -0
  1413. venv/Lib/site-packages/rich/_unicode_data/unicode16-0-0.py +683 -0
  1414. venv/Lib/site-packages/rich/_unicode_data/unicode17-0-0.py +691 -0
  1415. venv/Lib/site-packages/rich/_unicode_data/unicode4-1-0.py +425 -0
  1416. venv/Lib/site-packages/rich/_unicode_data/unicode5-0-0.py +430 -0
  1417. venv/Lib/site-packages/rich/_unicode_data/unicode5-1-0.py +433 -0
  1418. venv/Lib/site-packages/rich/_unicode_data/unicode5-2-0.py +461 -0
  1419. venv/Lib/site-packages/rich/_unicode_data/unicode6-0-0.py +469 -0
  1420. venv/Lib/site-packages/rich/_unicode_data/unicode6-1-0.py +480 -0
  1421. venv/Lib/site-packages/rich/_unicode_data/unicode6-2-0.py +480 -0
  1422. venv/Lib/site-packages/rich/_unicode_data/unicode6-3-0.py +481 -0
  1423. venv/Lib/site-packages/rich/_unicode_data/unicode7-0-0.py +507 -0
  1424. venv/Lib/site-packages/rich/_unicode_data/unicode8-0-0.py +515 -0
  1425. venv/Lib/site-packages/rich/_unicode_data/unicode9-0-0.py +598 -0
  1426. venv/Lib/site-packages/rich/_win32_console.py +661 -0
  1427. venv/Lib/site-packages/rich/_windows.py +71 -0
  1428. venv/Lib/site-packages/rich/_windows_renderer.py +56 -0
  1429. venv/Lib/site-packages/rich/_wrap.py +93 -0
  1430. venv/Lib/site-packages/rich/abc.py +33 -0
  1431. venv/Lib/site-packages/rich/align.py +320 -0
  1432. venv/Lib/site-packages/rich/ansi.py +241 -0
  1433. venv/Lib/site-packages/rich/bar.py +93 -0
  1434. venv/Lib/site-packages/rich/box.py +474 -0
  1435. venv/Lib/site-packages/rich/cells.py +352 -0
  1436. venv/Lib/site-packages/rich/color.py +621 -0
  1437. venv/Lib/site-packages/rich/color_triplet.py +38 -0
  1438. venv/Lib/site-packages/rich/columns.py +187 -0
  1439. venv/Lib/site-packages/rich/console.py +2698 -0
  1440. venv/Lib/site-packages/rich/constrain.py +37 -0
  1441. venv/Lib/site-packages/rich/containers.py +167 -0
  1442. venv/Lib/site-packages/rich/control.py +219 -0
  1443. venv/Lib/site-packages/rich/default_styles.py +196 -0
  1444. venv/Lib/site-packages/rich/diagnose.py +39 -0
  1445. venv/Lib/site-packages/rich/emoji.py +93 -0
  1446. venv/Lib/site-packages/rich/errors.py +34 -0
  1447. venv/Lib/site-packages/rich/file_proxy.py +60 -0
  1448. venv/Lib/site-packages/rich/filesize.py +88 -0
  1449. venv/Lib/site-packages/rich/highlighter.py +232 -0
  1450. venv/Lib/site-packages/rich/json.py +139 -0
  1451. venv/Lib/site-packages/rich/jupyter.py +101 -0
  1452. venv/Lib/site-packages/rich/layout.py +442 -0
  1453. venv/Lib/site-packages/rich/live.py +404 -0
  1454. venv/Lib/site-packages/rich/live_render.py +116 -0
  1455. venv/Lib/site-packages/rich/logging.py +305 -0
  1456. venv/Lib/site-packages/rich/markdown.py +802 -0
  1457. venv/Lib/site-packages/rich/markup.py +251 -0
  1458. venv/Lib/site-packages/rich/measure.py +151 -0
  1459. venv/Lib/site-packages/rich/padding.py +141 -0
  1460. venv/Lib/site-packages/rich/pager.py +34 -0
  1461. venv/Lib/site-packages/rich/palette.py +100 -0
  1462. venv/Lib/site-packages/rich/panel.py +317 -0
  1463. venv/Lib/site-packages/rich/pretty.py +1016 -0
  1464. venv/Lib/site-packages/rich/progress.py +1716 -0
  1465. venv/Lib/site-packages/rich/progress_bar.py +223 -0
  1466. venv/Lib/site-packages/rich/prompt.py +400 -0
  1467. venv/Lib/site-packages/rich/protocol.py +41 -0
  1468. venv/Lib/site-packages/rich/py.typed +0 -0
  1469. venv/Lib/site-packages/rich/region.py +10 -0
  1470. venv/Lib/site-packages/rich/repr.py +150 -0
  1471. venv/Lib/site-packages/rich/rule.py +130 -0
  1472. venv/Lib/site-packages/rich/scope.py +92 -0
  1473. venv/Lib/site-packages/rich/screen.py +54 -0
  1474. venv/Lib/site-packages/rich/segment.py +780 -0
  1475. venv/Lib/site-packages/rich/spinner.py +132 -0
  1476. venv/Lib/site-packages/rich/status.py +131 -0
  1477. venv/Lib/site-packages/rich/style.py +796 -0
  1478. venv/Lib/site-packages/rich/styled.py +42 -0
  1479. venv/Lib/site-packages/rich/syntax.py +988 -0
  1480. venv/Lib/site-packages/rich/table.py +1015 -0
  1481. venv/Lib/site-packages/rich/terminal_theme.py +153 -0
  1482. venv/Lib/site-packages/rich/text.py +1363 -0
  1483. venv/Lib/site-packages/rich/theme.py +116 -0
  1484. venv/Lib/site-packages/rich/themes.py +5 -0
  1485. venv/Lib/site-packages/rich/traceback.py +924 -0
  1486. venv/Lib/site-packages/rich/tree.py +257 -0
  1487. venv/Lib/site-packages/twine/__init__.py +54 -0
  1488. venv/Lib/site-packages/twine/__main__.py +54 -0
  1489. venv/Lib/site-packages/twine/auth.py +307 -0
  1490. venv/Lib/site-packages/twine/cli.py +139 -0
  1491. venv/Lib/site-packages/twine/commands/__init__.py +93 -0
  1492. venv/Lib/site-packages/twine/commands/check.py +195 -0
  1493. venv/Lib/site-packages/twine/commands/register.py +87 -0
  1494. venv/Lib/site-packages/twine/commands/upload.py +253 -0
  1495. venv/Lib/site-packages/twine/distribution.py +8 -0
  1496. venv/Lib/site-packages/twine/exceptions.py +175 -0
  1497. venv/Lib/site-packages/twine/package.py +403 -0
  1498. venv/Lib/site-packages/twine/py.typed +0 -0
  1499. venv/Lib/site-packages/twine/repository.py +246 -0
  1500. venv/Lib/site-packages/twine/sdist.py +83 -0
  1501. venv/Lib/site-packages/twine/settings.py +360 -0
  1502. venv/Lib/site-packages/twine/utils.py +387 -0
  1503. venv/Lib/site-packages/twine/wheel.py +81 -0
  1504. venv/Lib/site-packages/typing_extensions.py +4317 -0
  1505. venv/Lib/site-packages/typing_inspection/__init__.py +0 -0
  1506. venv/Lib/site-packages/typing_inspection/introspection.py +587 -0
  1507. venv/Lib/site-packages/typing_inspection/py.typed +0 -0
  1508. venv/Lib/site-packages/typing_inspection/typing_objects.py +607 -0
  1509. venv/Lib/site-packages/typing_inspection/typing_objects.pyi +417 -0
  1510. venv/Lib/site-packages/urllib3/__init__.py +211 -0
  1511. venv/Lib/site-packages/urllib3/_base_connection.py +167 -0
  1512. venv/Lib/site-packages/urllib3/_collections.py +486 -0
  1513. venv/Lib/site-packages/urllib3/_request_methods.py +278 -0
  1514. venv/Lib/site-packages/urllib3/_version.py +24 -0
  1515. venv/Lib/site-packages/urllib3/connection.py +1099 -0
  1516. venv/Lib/site-packages/urllib3/connectionpool.py +1191 -0
  1517. venv/Lib/site-packages/urllib3/contrib/__init__.py +0 -0
  1518. venv/Lib/site-packages/urllib3/contrib/emscripten/__init__.py +17 -0
  1519. venv/Lib/site-packages/urllib3/contrib/emscripten/connection.py +260 -0
  1520. venv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +726 -0
  1521. venv/Lib/site-packages/urllib3/contrib/emscripten/request.py +22 -0
  1522. venv/Lib/site-packages/urllib3/contrib/emscripten/response.py +281 -0
  1523. venv/Lib/site-packages/urllib3/contrib/pyopenssl.py +563 -0
  1524. venv/Lib/site-packages/urllib3/contrib/socks.py +228 -0
  1525. venv/Lib/site-packages/urllib3/exceptions.py +335 -0
  1526. venv/Lib/site-packages/urllib3/fields.py +341 -0
  1527. venv/Lib/site-packages/urllib3/filepost.py +89 -0
  1528. venv/Lib/site-packages/urllib3/http2/__init__.py +53 -0
  1529. venv/Lib/site-packages/urllib3/http2/connection.py +356 -0
  1530. venv/Lib/site-packages/urllib3/http2/probe.py +87 -0
  1531. venv/Lib/site-packages/urllib3/poolmanager.py +653 -0
  1532. venv/Lib/site-packages/urllib3/py.typed +2 -0
  1533. venv/Lib/site-packages/urllib3/response.py +1493 -0
  1534. venv/Lib/site-packages/urllib3/util/__init__.py +42 -0
  1535. venv/Lib/site-packages/urllib3/util/connection.py +137 -0
  1536. venv/Lib/site-packages/urllib3/util/proxy.py +43 -0
  1537. venv/Lib/site-packages/urllib3/util/request.py +263 -0
  1538. venv/Lib/site-packages/urllib3/util/response.py +101 -0
  1539. venv/Lib/site-packages/urllib3/util/retry.py +557 -0
  1540. venv/Lib/site-packages/urllib3/util/ssl_.py +477 -0
  1541. venv/Lib/site-packages/urllib3/util/ssl_match_hostname.py +153 -0
  1542. venv/Lib/site-packages/urllib3/util/ssltransport.py +271 -0
  1543. venv/Lib/site-packages/urllib3/util/timeout.py +275 -0
  1544. venv/Lib/site-packages/urllib3/util/url.py +469 -0
  1545. venv/Lib/site-packages/urllib3/util/util.py +42 -0
  1546. venv/Lib/site-packages/urllib3/util/wait.py +124 -0
  1547. venv/Lib/site-packages/win32ctypes/__init__.py +8 -0
  1548. venv/Lib/site-packages/win32ctypes/core/__init__.py +60 -0
  1549. venv/Lib/site-packages/win32ctypes/core/_winerrors.py +9 -0
  1550. venv/Lib/site-packages/win32ctypes/core/cffi/__init__.py +11 -0
  1551. venv/Lib/site-packages/win32ctypes/core/cffi/_authentication.py +172 -0
  1552. venv/Lib/site-packages/win32ctypes/core/cffi/_common.py +29 -0
  1553. venv/Lib/site-packages/win32ctypes/core/cffi/_dll.py +30 -0
  1554. venv/Lib/site-packages/win32ctypes/core/cffi/_nl_support.py +18 -0
  1555. venv/Lib/site-packages/win32ctypes/core/cffi/_resource.py +132 -0
  1556. venv/Lib/site-packages/win32ctypes/core/cffi/_system_information.py +32 -0
  1557. venv/Lib/site-packages/win32ctypes/core/cffi/_time.py +18 -0
  1558. venv/Lib/site-packages/win32ctypes/core/cffi/_util.py +105 -0
  1559. venv/Lib/site-packages/win32ctypes/core/compat.py +10 -0
  1560. venv/Lib/site-packages/win32ctypes/core/ctypes/__init__.py +11 -0
  1561. venv/Lib/site-packages/win32ctypes/core/ctypes/_authentication.py +122 -0
  1562. venv/Lib/site-packages/win32ctypes/core/ctypes/_common.py +53 -0
  1563. venv/Lib/site-packages/win32ctypes/core/ctypes/_dll.py +21 -0
  1564. venv/Lib/site-packages/win32ctypes/core/ctypes/_nl_support.py +12 -0
  1565. venv/Lib/site-packages/win32ctypes/core/ctypes/_resource.py +148 -0
  1566. venv/Lib/site-packages/win32ctypes/core/ctypes/_system_information.py +36 -0
  1567. venv/Lib/site-packages/win32ctypes/core/ctypes/_time.py +15 -0
  1568. venv/Lib/site-packages/win32ctypes/core/ctypes/_util.py +78 -0
  1569. venv/Lib/site-packages/win32ctypes/pywin32/__init__.py +12 -0
  1570. venv/Lib/site-packages/win32ctypes/pywin32/pywintypes.py +67 -0
  1571. venv/Lib/site-packages/win32ctypes/pywin32/win32api.py +294 -0
  1572. venv/Lib/site-packages/win32ctypes/pywin32/win32cred.py +145 -0
  1573. venv/Lib/site-packages/win32ctypes/pywintypes.py +13 -0
  1574. venv/Lib/site-packages/win32ctypes/tests/__init__.py +21 -0
  1575. venv/Lib/site-packages/win32ctypes/tests/test_backends.py +36 -0
  1576. venv/Lib/site-packages/win32ctypes/tests/test_win32api.py +304 -0
  1577. venv/Lib/site-packages/win32ctypes/tests/test_win32cred.py +230 -0
  1578. venv/Lib/site-packages/win32ctypes/version.py +1 -0
  1579. venv/Lib/site-packages/win32ctypes/win32api.py +13 -0
  1580. venv/Lib/site-packages/win32ctypes/win32cred.py +13 -0
@@ -0,0 +1,1517 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC
4
+ from abc import abstractmethod
5
+ import re
6
+ from re import Pattern
7
+ import sys
8
+ from textwrap import indent
9
+ from typing import Any
10
+ from typing import cast
11
+ from typing import final
12
+ from typing import Generic
13
+ from typing import get_args
14
+ from typing import get_origin
15
+ from typing import Literal
16
+ from typing import overload
17
+ from typing import TYPE_CHECKING
18
+ import warnings
19
+
20
+ from _pytest._code import ExceptionInfo
21
+ from _pytest._code.code import stringify_exception
22
+ from _pytest.outcomes import fail
23
+ from _pytest.warning_types import PytestWarning
24
+
25
+
26
+ if TYPE_CHECKING:
27
+ from collections.abc import Callable
28
+ from collections.abc import Sequence
29
+
30
+ # for some reason Sphinx does not play well with 'from types import TracebackType'
31
+ import types
32
+ from typing import TypeGuard
33
+
34
+ from typing_extensions import ParamSpec
35
+ from typing_extensions import TypeVar
36
+
37
+ P = ParamSpec("P")
38
+
39
+ # this conditional definition is because we want to allow a TypeVar default
40
+ BaseExcT_co_default = TypeVar(
41
+ "BaseExcT_co_default",
42
+ bound=BaseException,
43
+ default=BaseException,
44
+ covariant=True,
45
+ )
46
+
47
+ # Use short name because it shows up in docs.
48
+ E = TypeVar("E", bound=BaseException, default=BaseException)
49
+ else:
50
+ from typing import TypeVar
51
+
52
+ BaseExcT_co_default = TypeVar(
53
+ "BaseExcT_co_default", bound=BaseException, covariant=True
54
+ )
55
+
56
+ # RaisesGroup doesn't work with a default.
57
+ BaseExcT_co = TypeVar("BaseExcT_co", bound=BaseException, covariant=True)
58
+ BaseExcT_1 = TypeVar("BaseExcT_1", bound=BaseException)
59
+ BaseExcT_2 = TypeVar("BaseExcT_2", bound=BaseException)
60
+ ExcT_1 = TypeVar("ExcT_1", bound=Exception)
61
+ ExcT_2 = TypeVar("ExcT_2", bound=Exception)
62
+
63
+ if sys.version_info < (3, 11):
64
+ from exceptiongroup import BaseExceptionGroup
65
+ from exceptiongroup import ExceptionGroup
66
+
67
+
68
+ # String patterns default to including the unicode flag.
69
+ _REGEX_NO_FLAGS = re.compile(r"").flags
70
+
71
+
72
+ # pytest.raises helper
73
+ @overload
74
+ def raises(
75
+ expected_exception: type[E] | tuple[type[E], ...],
76
+ *,
77
+ match: str | re.Pattern[str] | None = ...,
78
+ check: Callable[[E], bool] = ...,
79
+ ) -> RaisesExc[E]: ...
80
+
81
+
82
+ @overload
83
+ def raises(
84
+ *,
85
+ match: str | re.Pattern[str],
86
+ # If exception_type is not provided, check() must do any typechecks itself.
87
+ check: Callable[[BaseException], bool] = ...,
88
+ ) -> RaisesExc[BaseException]: ...
89
+
90
+
91
+ @overload
92
+ def raises(*, check: Callable[[BaseException], bool]) -> RaisesExc[BaseException]: ...
93
+
94
+
95
+ @overload
96
+ def raises(
97
+ expected_exception: type[E] | tuple[type[E], ...],
98
+ func: Callable[..., Any],
99
+ *args: Any,
100
+ **kwargs: Any,
101
+ ) -> ExceptionInfo[E]: ...
102
+
103
+
104
+ def raises(
105
+ expected_exception: type[E] | tuple[type[E], ...] | None = None,
106
+ *args: Any,
107
+ **kwargs: Any,
108
+ ) -> RaisesExc[BaseException] | ExceptionInfo[E]:
109
+ r"""Assert that a code block/function call raises an exception type, or one of its subclasses.
110
+
111
+ :param expected_exception:
112
+ The expected exception type, or a tuple if one of multiple possible
113
+ exception types are expected. Note that subclasses of the passed exceptions
114
+ will also match.
115
+
116
+ This is not a required parameter, you may opt to only use ``match`` and/or
117
+ ``check`` for verifying the raised exception.
118
+
119
+ :kwparam str | re.Pattern[str] | None match:
120
+ If specified, a string containing a regular expression,
121
+ or a regular expression object, that is tested against the string
122
+ representation of the exception and its :pep:`678` `__notes__`
123
+ using :func:`re.search`.
124
+
125
+ To match a literal string that may contain :ref:`special characters
126
+ <re-syntax>`, the pattern can first be escaped with :func:`re.escape`.
127
+
128
+ (This is only used when ``pytest.raises`` is used as a context manager,
129
+ and passed through to the function otherwise.
130
+ When using ``pytest.raises`` as a function, you can use:
131
+ ``pytest.raises(Exc, func, match="passed on").match("my pattern")``.)
132
+
133
+ :kwparam Callable[[BaseException], bool] check:
134
+
135
+ .. versionadded:: 8.4
136
+
137
+ If specified, a callable that will be called with the exception as a parameter
138
+ after checking the type and the match regex if specified.
139
+ If it returns ``True`` it will be considered a match, if not it will
140
+ be considered a failed match.
141
+
142
+
143
+ Use ``pytest.raises`` as a context manager, which will capture the exception of the given
144
+ type, or any of its subclasses::
145
+
146
+ >>> import pytest
147
+ >>> with pytest.raises(ZeroDivisionError):
148
+ ... 1/0
149
+
150
+ If the code block does not raise the expected exception (:class:`ZeroDivisionError` in the example
151
+ above), or no exception at all, the check will fail instead.
152
+
153
+ You can also use the keyword argument ``match`` to assert that the
154
+ exception matches a text or regex::
155
+
156
+ >>> with pytest.raises(ValueError, match='must be 0 or None'):
157
+ ... raise ValueError("value must be 0 or None")
158
+
159
+ >>> with pytest.raises(ValueError, match=r'must be \d+$'):
160
+ ... raise ValueError("value must be 42")
161
+
162
+ The ``match`` argument searches the formatted exception string, which includes any
163
+ `PEP-678 <https://peps.python.org/pep-0678/>`__ ``__notes__``:
164
+
165
+ >>> with pytest.raises(ValueError, match=r"had a note added"): # doctest: +SKIP
166
+ ... e = ValueError("value must be 42")
167
+ ... e.add_note("had a note added")
168
+ ... raise e
169
+
170
+ The ``check`` argument, if provided, must return True when passed the raised exception
171
+ for the match to be successful, otherwise an :exc:`AssertionError` is raised.
172
+
173
+ >>> import errno
174
+ >>> with pytest.raises(OSError, check=lambda e: e.errno == errno.EACCES):
175
+ ... raise OSError(errno.EACCES, "no permission to view")
176
+
177
+ The context manager produces an :class:`ExceptionInfo` object which can be used to inspect the
178
+ details of the captured exception::
179
+
180
+ >>> with pytest.raises(ValueError) as exc_info:
181
+ ... raise ValueError("value must be 42")
182
+ >>> assert exc_info.type is ValueError
183
+ >>> assert exc_info.value.args[0] == "value must be 42"
184
+
185
+ .. warning::
186
+
187
+ Given that ``pytest.raises`` matches subclasses, be wary of using it to match :class:`Exception` like this::
188
+
189
+ # Careful, this will catch ANY exception raised.
190
+ with pytest.raises(Exception):
191
+ some_function()
192
+
193
+ Because :class:`Exception` is the base class of almost all exceptions, it is easy for this to hide
194
+ real bugs, where the user wrote this expecting a specific exception, but some other exception is being
195
+ raised due to a bug introduced during a refactoring.
196
+
197
+ Avoid using ``pytest.raises`` to catch :class:`Exception` unless certain that you really want to catch
198
+ **any** exception raised.
199
+
200
+ .. note::
201
+
202
+ When using ``pytest.raises`` as a context manager, it's worthwhile to
203
+ note that normal context manager rules apply and that the exception
204
+ raised *must* be the final line in the scope of the context manager.
205
+ Lines of code after that, within the scope of the context manager will
206
+ not be executed. For example::
207
+
208
+ >>> value = 15
209
+ >>> with pytest.raises(ValueError) as exc_info:
210
+ ... if value > 10:
211
+ ... raise ValueError("value must be <= 10")
212
+ ... assert exc_info.type is ValueError # This will not execute.
213
+
214
+ Instead, the following approach must be taken (note the difference in
215
+ scope)::
216
+
217
+ >>> with pytest.raises(ValueError) as exc_info:
218
+ ... if value > 10:
219
+ ... raise ValueError("value must be <= 10")
220
+ ...
221
+ >>> assert exc_info.type is ValueError
222
+
223
+ **Expecting exception groups**
224
+
225
+ When expecting exceptions wrapped in :exc:`BaseExceptionGroup` or
226
+ :exc:`ExceptionGroup`, you should instead use :class:`pytest.RaisesGroup`.
227
+
228
+ **Using with** ``pytest.mark.parametrize``
229
+
230
+ When using :ref:`pytest.mark.parametrize ref`
231
+ it is possible to parametrize tests such that
232
+ some runs raise an exception and others do not.
233
+
234
+ See :ref:`parametrizing_conditional_raising` for an example.
235
+
236
+ .. seealso::
237
+
238
+ :ref:`assertraises` for more examples and detailed discussion.
239
+
240
+ **Legacy form**
241
+
242
+ It is possible to specify a callable by passing a to-be-called lambda::
243
+
244
+ >>> raises(ZeroDivisionError, lambda: 1/0)
245
+ <ExceptionInfo ...>
246
+
247
+ or you can specify an arbitrary callable with arguments::
248
+
249
+ >>> def f(x): return 1/x
250
+ ...
251
+ >>> raises(ZeroDivisionError, f, 0)
252
+ <ExceptionInfo ...>
253
+ >>> raises(ZeroDivisionError, f, x=0)
254
+ <ExceptionInfo ...>
255
+
256
+ The form above is fully supported but discouraged for new code because the
257
+ context manager form is regarded as more readable and less error-prone.
258
+
259
+ .. note::
260
+ Similar to caught exception objects in Python, explicitly clearing
261
+ local references to returned ``ExceptionInfo`` objects can
262
+ help the Python interpreter speed up its garbage collection.
263
+
264
+ Clearing those references breaks a reference cycle
265
+ (``ExceptionInfo`` --> caught exception --> frame stack raising
266
+ the exception --> current frame stack --> local variables -->
267
+ ``ExceptionInfo``) which makes Python keep all objects referenced
268
+ from that cycle (including all local variables in the current
269
+ frame) alive until the next cyclic garbage collection run.
270
+ More detailed information can be found in the official Python
271
+ documentation for :ref:`the try statement <python:try>`.
272
+ """
273
+ __tracebackhide__ = True
274
+
275
+ if not args:
276
+ if set(kwargs) - {"match", "check", "expected_exception"}:
277
+ msg = "Unexpected keyword arguments passed to pytest.raises: "
278
+ msg += ", ".join(sorted(kwargs))
279
+ msg += "\nUse context-manager form instead?"
280
+ raise TypeError(msg)
281
+
282
+ if expected_exception is None:
283
+ return RaisesExc(**kwargs)
284
+ return RaisesExc(expected_exception, **kwargs)
285
+
286
+ if not expected_exception:
287
+ raise ValueError(
288
+ f"Expected an exception type or a tuple of exception types, but got `{expected_exception!r}`. "
289
+ f"Raising exceptions is already understood as failing the test, so you don't need "
290
+ f"any special code to say 'this should never raise an exception'."
291
+ )
292
+ func = args[0]
293
+ if not callable(func):
294
+ raise TypeError(f"{func!r} object (type: {type(func)}) must be callable")
295
+ with RaisesExc(expected_exception) as excinfo:
296
+ func(*args[1:], **kwargs)
297
+ try:
298
+ return excinfo
299
+ finally:
300
+ del excinfo
301
+
302
+
303
+ # note: RaisesExc/RaisesGroup uses fail() internally, so this alias
304
+ # indicates (to [internal] plugins?) that `pytest.raises` will
305
+ # raise `_pytest.outcomes.Failed`, where
306
+ # `outcomes.Failed is outcomes.fail.Exception is raises.Exception`
307
+ # note: this is *not* the same as `_pytest.main.Failed`
308
+ # note: mypy does not recognize this attribute, and it's not possible
309
+ # to use a protocol/decorator like the others in outcomes due to
310
+ # https://github.com/python/mypy/issues/18715
311
+ raises.Exception = fail.Exception # type: ignore[attr-defined]
312
+
313
+
314
+ def _match_pattern(match: Pattern[str]) -> str | Pattern[str]:
315
+ """Helper function to remove redundant `re.compile` calls when printing regex"""
316
+ return match.pattern if match.flags == _REGEX_NO_FLAGS else match
317
+
318
+
319
+ def repr_callable(fun: Callable[[BaseExcT_1], bool]) -> str:
320
+ """Get the repr of a ``check`` parameter.
321
+
322
+ Split out so it can be monkeypatched (e.g. by hypothesis)
323
+ """
324
+ return repr(fun)
325
+
326
+
327
+ def backquote(s: str) -> str:
328
+ return "`" + s + "`"
329
+
330
+
331
+ def _exception_type_name(
332
+ e: type[BaseException] | tuple[type[BaseException], ...],
333
+ ) -> str:
334
+ if isinstance(e, type):
335
+ return e.__name__
336
+ if len(e) == 1:
337
+ return e[0].__name__
338
+ return "(" + ", ".join(ee.__name__ for ee in e) + ")"
339
+
340
+
341
+ def _check_raw_type(
342
+ expected_type: type[BaseException] | tuple[type[BaseException], ...] | None,
343
+ exception: BaseException,
344
+ ) -> str | None:
345
+ if expected_type is None or expected_type == ():
346
+ return None
347
+
348
+ if not isinstance(
349
+ exception,
350
+ expected_type,
351
+ ):
352
+ actual_type_str = backquote(_exception_type_name(type(exception)) + "()")
353
+ expected_type_str = backquote(_exception_type_name(expected_type))
354
+ if (
355
+ isinstance(exception, BaseExceptionGroup)
356
+ and isinstance(expected_type, type)
357
+ and not issubclass(expected_type, BaseExceptionGroup)
358
+ ):
359
+ return f"Unexpected nested {actual_type_str}, expected {expected_type_str}"
360
+ return f"{actual_type_str} is not an instance of {expected_type_str}"
361
+ return None
362
+
363
+
364
+ def is_fully_escaped(s: str) -> bool:
365
+ # we know we won't compile with re.VERBOSE, so whitespace doesn't need to be escaped
366
+ metacharacters = "{}()+.*?^$[]"
367
+ return not any(
368
+ c in metacharacters and (i == 0 or s[i - 1] != "\\") for (i, c) in enumerate(s)
369
+ )
370
+
371
+
372
+ def unescape(s: str) -> str:
373
+ return re.sub(r"\\([{}()+-.*?^$\[\]\s\\])", r"\1", s)
374
+
375
+
376
+ # These classes conceptually differ from ExceptionInfo in that ExceptionInfo is tied, and
377
+ # constructed from, a particular exception - whereas these are constructed with expected
378
+ # exceptions, and later allow matching towards particular exceptions.
379
+ # But there's overlap in `ExceptionInfo.match` and `AbstractRaises._check_match`, as with
380
+ # `AbstractRaises.matches` and `ExceptionInfo.errisinstance`+`ExceptionInfo.group_contains`.
381
+ # The interaction between these classes should perhaps be improved.
382
+ class AbstractRaises(ABC, Generic[BaseExcT_co]):
383
+ """ABC with common functionality shared between RaisesExc and RaisesGroup"""
384
+
385
+ def __init__(
386
+ self,
387
+ *,
388
+ match: str | Pattern[str] | None,
389
+ check: Callable[[BaseExcT_co], bool] | None,
390
+ ) -> None:
391
+ if isinstance(match, str):
392
+ # juggle error in order to avoid context to fail (necessary?)
393
+ re_error = None
394
+ try:
395
+ self.match: Pattern[str] | None = re.compile(match)
396
+ except re.error as e:
397
+ re_error = e
398
+ if re_error is not None:
399
+ fail(f"Invalid regex pattern provided to 'match': {re_error}")
400
+ if match == "":
401
+ warnings.warn(
402
+ PytestWarning(
403
+ "matching against an empty string will *always* pass. If you want "
404
+ "to check for an empty message you need to pass '^$'. If you don't "
405
+ "want to match you should pass `None` or leave out the parameter."
406
+ ),
407
+ stacklevel=2,
408
+ )
409
+ else:
410
+ self.match = match
411
+
412
+ # check if this is a fully escaped regex and has ^$ to match fully
413
+ # in which case we can do a proper diff on error
414
+ self.rawmatch: str | None = None
415
+ if isinstance(match, str) or (
416
+ isinstance(match, Pattern) and match.flags == _REGEX_NO_FLAGS
417
+ ):
418
+ if isinstance(match, Pattern):
419
+ match = match.pattern
420
+ if (
421
+ match
422
+ and match[0] == "^"
423
+ and match[-1] == "$"
424
+ and is_fully_escaped(match[1:-1])
425
+ ):
426
+ self.rawmatch = unescape(match[1:-1])
427
+
428
+ self.check = check
429
+ self._fail_reason: str | None = None
430
+
431
+ # used to suppress repeated printing of `repr(self.check)`
432
+ self._nested: bool = False
433
+
434
+ # set in self._parse_exc
435
+ self.is_baseexception = False
436
+
437
+ def _parse_exc(
438
+ self, exc: type[BaseExcT_1] | types.GenericAlias, expected: str
439
+ ) -> type[BaseExcT_1]:
440
+ if isinstance(exc, type) and issubclass(exc, BaseException):
441
+ if not issubclass(exc, Exception):
442
+ self.is_baseexception = True
443
+ return exc
444
+ # because RaisesGroup does not support variable number of exceptions there's
445
+ # still a use for RaisesExc(ExceptionGroup[Exception]).
446
+ origin_exc: type[BaseException] | None = get_origin(exc)
447
+ if origin_exc and issubclass(origin_exc, BaseExceptionGroup):
448
+ exc_type = get_args(exc)[0]
449
+ if (
450
+ issubclass(origin_exc, ExceptionGroup) and exc_type in (Exception, Any)
451
+ ) or (
452
+ issubclass(origin_exc, BaseExceptionGroup)
453
+ and exc_type in (BaseException, Any)
454
+ ):
455
+ if not issubclass(origin_exc, ExceptionGroup):
456
+ self.is_baseexception = True
457
+ return cast(type[BaseExcT_1], origin_exc)
458
+ else:
459
+ raise ValueError(
460
+ f"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` "
461
+ f"are accepted as generic types but got `{exc}`. "
462
+ f"As `raises` will catch all instances of the specified group regardless of the "
463
+ f"generic argument specific nested exceptions has to be checked "
464
+ f"with `RaisesGroup`."
465
+ )
466
+ # unclear if the Type/ValueError distinction is even helpful here
467
+ msg = f"Expected {expected}, but got "
468
+ if isinstance(exc, type): # type: ignore[unreachable]
469
+ raise ValueError(msg + f"{exc.__name__!r}")
470
+ if isinstance(exc, BaseException): # type: ignore[unreachable]
471
+ raise TypeError(msg + f"an exception instance: {type(exc).__name__}")
472
+ raise TypeError(msg + repr(type(exc).__name__))
473
+
474
+ @property
475
+ def fail_reason(self) -> str | None:
476
+ """Set after a call to :meth:`matches` to give a human-readable reason for why the match failed.
477
+ When used as a context manager the string will be printed as the reason for the
478
+ test failing."""
479
+ return self._fail_reason
480
+
481
+ def _check_check(
482
+ self: AbstractRaises[BaseExcT_1],
483
+ exception: BaseExcT_1,
484
+ ) -> bool:
485
+ if self.check is None:
486
+ return True
487
+
488
+ if self.check(exception):
489
+ return True
490
+
491
+ check_repr = "" if self._nested else " " + repr_callable(self.check)
492
+ self._fail_reason = f"check{check_repr} did not return True"
493
+ return False
494
+
495
+ # TODO: harmonize with ExceptionInfo.match
496
+ def _check_match(self, e: BaseException) -> bool:
497
+ if self.match is None or re.search(
498
+ self.match,
499
+ stringified_exception := stringify_exception(
500
+ e, include_subexception_msg=False
501
+ ),
502
+ ):
503
+ return True
504
+
505
+ # if we're matching a group, make sure we're explicit to reduce confusion
506
+ # if they're trying to match an exception contained within the group
507
+ maybe_specify_type = (
508
+ f" the `{_exception_type_name(type(e))}()`"
509
+ if isinstance(e, BaseExceptionGroup)
510
+ else ""
511
+ )
512
+ if isinstance(self.rawmatch, str):
513
+ # TODO: it instructs to use `-v` to print leading text, but that doesn't work
514
+ # I also don't know if this is the proper entry point, or tool to use at all
515
+ from _pytest.assertion.util import _diff_text
516
+ from _pytest.assertion.util import dummy_highlighter
517
+
518
+ diff = _diff_text(self.rawmatch, stringified_exception, dummy_highlighter)
519
+ self._fail_reason = ("\n" if diff[0][0] == "-" else "") + "\n".join(diff)
520
+ return False
521
+
522
+ self._fail_reason = (
523
+ f"Regex pattern did not match{maybe_specify_type}.\n"
524
+ f" Expected regex: {_match_pattern(self.match)!r}\n"
525
+ f" Actual message: {stringified_exception!r}"
526
+ )
527
+ if _match_pattern(self.match) == stringified_exception:
528
+ self._fail_reason += "\n Did you mean to `re.escape()` the regex?"
529
+ return False
530
+
531
+ @abstractmethod
532
+ def matches(
533
+ self: AbstractRaises[BaseExcT_1], exception: BaseException
534
+ ) -> TypeGuard[BaseExcT_1]:
535
+ """Check if an exception matches the requirements of this AbstractRaises.
536
+ If it fails, :meth:`AbstractRaises.fail_reason` should be set.
537
+ """
538
+
539
+
540
+ @final
541
+ class RaisesExc(AbstractRaises[BaseExcT_co_default]):
542
+ """
543
+ .. versionadded:: 8.4
544
+
545
+
546
+ This is the class constructed when calling :func:`pytest.raises`, but may be used
547
+ directly as a helper class with :class:`RaisesGroup` when you want to specify
548
+ requirements on sub-exceptions.
549
+
550
+ You don't need this if you only want to specify the type, since :class:`RaisesGroup`
551
+ accepts ``type[BaseException]``.
552
+
553
+ :param type[BaseException] | tuple[type[BaseException]] | None expected_exception:
554
+ The expected type, or one of several possible types.
555
+ May be ``None`` in order to only make use of ``match`` and/or ``check``
556
+
557
+ The type is checked with :func:`isinstance`, and does not need to be an exact match.
558
+ If that is wanted you can use the ``check`` parameter.
559
+
560
+ :kwparam str | Pattern[str] match:
561
+ A regex to match.
562
+
563
+ :kwparam Callable[[BaseException], bool] check:
564
+ If specified, a callable that will be called with the exception as a parameter
565
+ after checking the type and the match regex if specified.
566
+ If it returns ``True`` it will be considered a match, if not it will
567
+ be considered a failed match.
568
+
569
+ :meth:`RaisesExc.matches` can also be used standalone to check individual exceptions.
570
+
571
+ Examples::
572
+
573
+ with RaisesGroup(RaisesExc(ValueError, match="string"))
574
+ ...
575
+ with RaisesGroup(RaisesExc(check=lambda x: x.args == (3, "hello"))):
576
+ ...
577
+ with RaisesGroup(RaisesExc(check=lambda x: type(x) is ValueError)):
578
+ ...
579
+ """
580
+
581
+ # Trio bundled hypothesis monkeypatching, we will probably instead assume that
582
+ # hypothesis will handle that in their pytest plugin by the time this is released.
583
+ # Alternatively we could add a version of get_pretty_function_description ourselves
584
+ # https://github.com/HypothesisWorks/hypothesis/blob/8ced2f59f5c7bea3344e35d2d53e1f8f8eb9fcd8/hypothesis-python/src/hypothesis/internal/reflection.py#L439
585
+
586
+ # At least one of the three parameters must be passed.
587
+ @overload
588
+ def __init__(
589
+ self,
590
+ expected_exception: (
591
+ type[BaseExcT_co_default] | tuple[type[BaseExcT_co_default], ...]
592
+ ),
593
+ /,
594
+ *,
595
+ match: str | Pattern[str] | None = ...,
596
+ check: Callable[[BaseExcT_co_default], bool] | None = ...,
597
+ ) -> None: ...
598
+
599
+ @overload
600
+ def __init__(
601
+ self: RaisesExc[BaseException], # Give E a value.
602
+ /,
603
+ *,
604
+ match: str | Pattern[str] | None,
605
+ # If exception_type is not provided, check() must do any typechecks itself.
606
+ check: Callable[[BaseException], bool] | None = ...,
607
+ ) -> None: ...
608
+
609
+ @overload
610
+ def __init__(self, /, *, check: Callable[[BaseException], bool]) -> None: ...
611
+
612
+ def __init__(
613
+ self,
614
+ expected_exception: (
615
+ type[BaseExcT_co_default] | tuple[type[BaseExcT_co_default], ...] | None
616
+ ) = None,
617
+ /,
618
+ *,
619
+ match: str | Pattern[str] | None = None,
620
+ check: Callable[[BaseExcT_co_default], bool] | None = None,
621
+ ):
622
+ super().__init__(match=match, check=check)
623
+ if isinstance(expected_exception, tuple):
624
+ expected_exceptions = expected_exception
625
+ elif expected_exception is None:
626
+ expected_exceptions = ()
627
+ else:
628
+ expected_exceptions = (expected_exception,)
629
+
630
+ if (expected_exceptions == ()) and match is None and check is None:
631
+ raise ValueError("You must specify at least one parameter to match on.")
632
+
633
+ self.expected_exceptions = tuple(
634
+ self._parse_exc(e, expected="a BaseException type")
635
+ for e in expected_exceptions
636
+ )
637
+
638
+ self._just_propagate = False
639
+
640
+ def matches(
641
+ self,
642
+ exception: BaseException | None,
643
+ ) -> TypeGuard[BaseExcT_co_default]:
644
+ """Check if an exception matches the requirements of this :class:`RaisesExc`.
645
+ If it fails, :attr:`RaisesExc.fail_reason` will be set.
646
+
647
+ Examples::
648
+
649
+ assert RaisesExc(ValueError).matches(my_exception):
650
+ # is equivalent to
651
+ assert isinstance(my_exception, ValueError)
652
+
653
+ # this can be useful when checking e.g. the ``__cause__`` of an exception.
654
+ with pytest.raises(ValueError) as excinfo:
655
+ ...
656
+ assert RaisesExc(SyntaxError, match="foo").matches(excinfo.value.__cause__)
657
+ # above line is equivalent to
658
+ assert isinstance(excinfo.value.__cause__, SyntaxError)
659
+ assert re.search("foo", str(excinfo.value.__cause__)
660
+
661
+ """
662
+ self._just_propagate = False
663
+ if exception is None:
664
+ self._fail_reason = "exception is None"
665
+ return False
666
+ if not self._check_type(exception):
667
+ self._just_propagate = True
668
+ return False
669
+
670
+ if not self._check_match(exception):
671
+ return False
672
+
673
+ return self._check_check(exception)
674
+
675
+ def __repr__(self) -> str:
676
+ parameters = []
677
+ if self.expected_exceptions:
678
+ parameters.append(_exception_type_name(self.expected_exceptions))
679
+ if self.match is not None:
680
+ # If no flags were specified, discard the redundant re.compile() here.
681
+ parameters.append(
682
+ f"match={_match_pattern(self.match)!r}",
683
+ )
684
+ if self.check is not None:
685
+ parameters.append(f"check={repr_callable(self.check)}")
686
+ return f"RaisesExc({', '.join(parameters)})"
687
+
688
+ def _check_type(self, exception: BaseException) -> TypeGuard[BaseExcT_co_default]:
689
+ self._fail_reason = _check_raw_type(self.expected_exceptions, exception)
690
+ return self._fail_reason is None
691
+
692
+ def __enter__(self) -> ExceptionInfo[BaseExcT_co_default]:
693
+ self.excinfo: ExceptionInfo[BaseExcT_co_default] = ExceptionInfo.for_later()
694
+ return self.excinfo
695
+
696
+ # TODO: move common code into superclass
697
+ def __exit__(
698
+ self,
699
+ exc_type: type[BaseException] | None,
700
+ exc_val: BaseException | None,
701
+ exc_tb: types.TracebackType | None,
702
+ ) -> bool:
703
+ __tracebackhide__ = True
704
+ if exc_type is None:
705
+ if not self.expected_exceptions:
706
+ fail("DID NOT RAISE any exception")
707
+ if len(self.expected_exceptions) > 1:
708
+ fail(f"DID NOT RAISE any of {self.expected_exceptions!r}")
709
+
710
+ fail(f"DID NOT RAISE {self.expected_exceptions[0]!r}")
711
+
712
+ assert self.excinfo is not None, (
713
+ "Internal error - should have been constructed in __enter__"
714
+ )
715
+
716
+ if not self.matches(exc_val):
717
+ if self._just_propagate:
718
+ return False
719
+ raise AssertionError(self._fail_reason)
720
+
721
+ # Cast to narrow the exception type now that it's verified....
722
+ # even though the TypeGuard in self.matches should be narrowing
723
+ exc_info = cast(
724
+ "tuple[type[BaseExcT_co_default], BaseExcT_co_default, types.TracebackType]",
725
+ (exc_type, exc_val, exc_tb),
726
+ )
727
+ self.excinfo.fill_unfilled(exc_info)
728
+ return True
729
+
730
+
731
+ @final
732
+ class RaisesGroup(AbstractRaises[BaseExceptionGroup[BaseExcT_co]]):
733
+ """
734
+ .. versionadded:: 8.4
735
+
736
+ Contextmanager for checking for an expected :exc:`ExceptionGroup`.
737
+ This works similar to :func:`pytest.raises`, but allows for specifying the structure of an :exc:`ExceptionGroup`.
738
+ :meth:`ExceptionInfo.group_contains` also tries to handle exception groups,
739
+ but it is very bad at checking that you *didn't* get unexpected exceptions.
740
+
741
+ The catching behaviour differs from :ref:`except* <except_star>`, being much
742
+ stricter about the structure by default.
743
+ By using ``allow_unwrapped=True`` and ``flatten_subgroups=True`` you can match
744
+ :ref:`except* <except_star>` fully when expecting a single exception.
745
+
746
+ :param args:
747
+ Any number of exception types, :class:`RaisesGroup` or :class:`RaisesExc`
748
+ to specify the exceptions contained in this exception.
749
+ All specified exceptions must be present in the raised group, *and no others*.
750
+
751
+ If you expect a variable number of exceptions you need to use
752
+ :func:`pytest.raises(ExceptionGroup) <pytest.raises>` and manually check
753
+ the contained exceptions. Consider making use of :meth:`RaisesExc.matches`.
754
+
755
+ It does not care about the order of the exceptions, so
756
+ ``RaisesGroup(ValueError, TypeError)``
757
+ is equivalent to
758
+ ``RaisesGroup(TypeError, ValueError)``.
759
+ :kwparam str | re.Pattern[str] | None match:
760
+ If specified, a string containing a regular expression,
761
+ or a regular expression object, that is tested against the string
762
+ representation of the exception group and its :pep:`678` `__notes__`
763
+ using :func:`re.search`.
764
+
765
+ To match a literal string that may contain :ref:`special characters
766
+ <re-syntax>`, the pattern can first be escaped with :func:`re.escape`.
767
+
768
+ Note that " (5 subgroups)" will be stripped from the ``repr`` before matching.
769
+ :kwparam Callable[[E], bool] check:
770
+ If specified, a callable that will be called with the group as a parameter
771
+ after successfully matching the expected exceptions. If it returns ``True``
772
+ it will be considered a match, if not it will be considered a failed match.
773
+ :kwparam bool allow_unwrapped:
774
+ If expecting a single exception or :class:`RaisesExc` it will match even
775
+ if the exception is not inside an exceptiongroup.
776
+
777
+ Using this together with ``match``, ``check`` or expecting multiple exceptions
778
+ will raise an error.
779
+ :kwparam bool flatten_subgroups:
780
+ "flatten" any groups inside the raised exception group, extracting all exceptions
781
+ inside any nested groups, before matching. Without this it expects you to
782
+ fully specify the nesting structure by passing :class:`RaisesGroup` as expected
783
+ parameter.
784
+
785
+ Examples::
786
+
787
+ with RaisesGroup(ValueError):
788
+ raise ExceptionGroup("", (ValueError(),))
789
+ # match
790
+ with RaisesGroup(
791
+ ValueError,
792
+ ValueError,
793
+ RaisesExc(TypeError, match="^expected int$"),
794
+ match="^my group$",
795
+ ):
796
+ raise ExceptionGroup(
797
+ "my group",
798
+ [
799
+ ValueError(),
800
+ TypeError("expected int"),
801
+ ValueError(),
802
+ ],
803
+ )
804
+ # check
805
+ with RaisesGroup(
806
+ KeyboardInterrupt,
807
+ match="^hello$",
808
+ check=lambda x: isinstance(x.__cause__, ValueError),
809
+ ):
810
+ raise BaseExceptionGroup("hello", [KeyboardInterrupt()]) from ValueError
811
+ # nested groups
812
+ with RaisesGroup(RaisesGroup(ValueError)):
813
+ raise ExceptionGroup("", (ExceptionGroup("", (ValueError(),)),))
814
+
815
+ # flatten_subgroups
816
+ with RaisesGroup(ValueError, flatten_subgroups=True):
817
+ raise ExceptionGroup("", (ExceptionGroup("", (ValueError(),)),))
818
+
819
+ # allow_unwrapped
820
+ with RaisesGroup(ValueError, allow_unwrapped=True):
821
+ raise ValueError
822
+
823
+
824
+ :meth:`RaisesGroup.matches` can also be used directly to check a standalone exception group.
825
+
826
+
827
+ The matching algorithm is greedy, which means cases such as this may fail::
828
+
829
+ with RaisesGroup(ValueError, RaisesExc(ValueError, match="hello")):
830
+ raise ExceptionGroup("", (ValueError("hello"), ValueError("goodbye")))
831
+
832
+ even though it generally does not care about the order of the exceptions in the group.
833
+ To avoid the above you should specify the first :exc:`ValueError` with a :class:`RaisesExc` as well.
834
+
835
+ .. note::
836
+ When raised exceptions don't match the expected ones, you'll get a detailed error
837
+ message explaining why. This includes ``repr(check)`` if set, which in Python can be
838
+ overly verbose, showing memory locations etc etc.
839
+
840
+ If installed and imported (in e.g. ``conftest.py``), the ``hypothesis`` library will
841
+ monkeypatch this output to provide shorter & more readable repr's.
842
+ """
843
+
844
+ # allow_unwrapped=True requires: singular exception, exception not being
845
+ # RaisesGroup instance, match is None, check is None
846
+ @overload
847
+ def __init__(
848
+ self,
849
+ expected_exception: type[BaseExcT_co] | RaisesExc[BaseExcT_co],
850
+ /,
851
+ *,
852
+ allow_unwrapped: Literal[True],
853
+ flatten_subgroups: bool = False,
854
+ ) -> None: ...
855
+
856
+ # flatten_subgroups = True also requires no nested RaisesGroup
857
+ @overload
858
+ def __init__(
859
+ self,
860
+ expected_exception: type[BaseExcT_co] | RaisesExc[BaseExcT_co],
861
+ /,
862
+ *other_exceptions: type[BaseExcT_co] | RaisesExc[BaseExcT_co],
863
+ flatten_subgroups: Literal[True],
864
+ match: str | Pattern[str] | None = None,
865
+ check: Callable[[BaseExceptionGroup[BaseExcT_co]], bool] | None = None,
866
+ ) -> None: ...
867
+
868
+ # simplify the typevars if possible (the following 3 are equivalent but go simpler->complicated)
869
+ # ... the first handles RaisesGroup[ValueError], the second RaisesGroup[ExceptionGroup[ValueError]],
870
+ # the third RaisesGroup[ValueError | ExceptionGroup[ValueError]].
871
+ # ... otherwise, we will get results like RaisesGroup[ValueError | ExceptionGroup[Never]] (I think)
872
+ # (technically correct but misleading)
873
+ @overload
874
+ def __init__(
875
+ self: RaisesGroup[ExcT_1],
876
+ expected_exception: type[ExcT_1] | RaisesExc[ExcT_1],
877
+ /,
878
+ *other_exceptions: type[ExcT_1] | RaisesExc[ExcT_1],
879
+ match: str | Pattern[str] | None = None,
880
+ check: Callable[[ExceptionGroup[ExcT_1]], bool] | None = None,
881
+ ) -> None: ...
882
+
883
+ @overload
884
+ def __init__(
885
+ self: RaisesGroup[ExceptionGroup[ExcT_2]],
886
+ expected_exception: RaisesGroup[ExcT_2],
887
+ /,
888
+ *other_exceptions: RaisesGroup[ExcT_2],
889
+ match: str | Pattern[str] | None = None,
890
+ check: Callable[[ExceptionGroup[ExceptionGroup[ExcT_2]]], bool] | None = None,
891
+ ) -> None: ...
892
+
893
+ @overload
894
+ def __init__(
895
+ self: RaisesGroup[ExcT_1 | ExceptionGroup[ExcT_2]],
896
+ expected_exception: type[ExcT_1] | RaisesExc[ExcT_1] | RaisesGroup[ExcT_2],
897
+ /,
898
+ *other_exceptions: type[ExcT_1] | RaisesExc[ExcT_1] | RaisesGroup[ExcT_2],
899
+ match: str | Pattern[str] | None = None,
900
+ check: (
901
+ Callable[[ExceptionGroup[ExcT_1 | ExceptionGroup[ExcT_2]]], bool] | None
902
+ ) = None,
903
+ ) -> None: ...
904
+
905
+ # same as the above 3 but handling BaseException
906
+ @overload
907
+ def __init__(
908
+ self: RaisesGroup[BaseExcT_1],
909
+ expected_exception: type[BaseExcT_1] | RaisesExc[BaseExcT_1],
910
+ /,
911
+ *other_exceptions: type[BaseExcT_1] | RaisesExc[BaseExcT_1],
912
+ match: str | Pattern[str] | None = None,
913
+ check: Callable[[BaseExceptionGroup[BaseExcT_1]], bool] | None = None,
914
+ ) -> None: ...
915
+
916
+ @overload
917
+ def __init__(
918
+ self: RaisesGroup[BaseExceptionGroup[BaseExcT_2]],
919
+ expected_exception: RaisesGroup[BaseExcT_2],
920
+ /,
921
+ *other_exceptions: RaisesGroup[BaseExcT_2],
922
+ match: str | Pattern[str] | None = None,
923
+ check: (
924
+ Callable[[BaseExceptionGroup[BaseExceptionGroup[BaseExcT_2]]], bool] | None
925
+ ) = None,
926
+ ) -> None: ...
927
+
928
+ @overload
929
+ def __init__(
930
+ self: RaisesGroup[BaseExcT_1 | BaseExceptionGroup[BaseExcT_2]],
931
+ expected_exception: type[BaseExcT_1]
932
+ | RaisesExc[BaseExcT_1]
933
+ | RaisesGroup[BaseExcT_2],
934
+ /,
935
+ *other_exceptions: type[BaseExcT_1]
936
+ | RaisesExc[BaseExcT_1]
937
+ | RaisesGroup[BaseExcT_2],
938
+ match: str | Pattern[str] | None = None,
939
+ check: (
940
+ Callable[
941
+ [BaseExceptionGroup[BaseExcT_1 | BaseExceptionGroup[BaseExcT_2]]],
942
+ bool,
943
+ ]
944
+ | None
945
+ ) = None,
946
+ ) -> None: ...
947
+
948
+ def __init__(
949
+ self: RaisesGroup[ExcT_1 | BaseExcT_1 | BaseExceptionGroup[BaseExcT_2]],
950
+ expected_exception: type[BaseExcT_1]
951
+ | RaisesExc[BaseExcT_1]
952
+ | RaisesGroup[BaseExcT_2],
953
+ /,
954
+ *other_exceptions: type[BaseExcT_1]
955
+ | RaisesExc[BaseExcT_1]
956
+ | RaisesGroup[BaseExcT_2],
957
+ allow_unwrapped: bool = False,
958
+ flatten_subgroups: bool = False,
959
+ match: str | Pattern[str] | None = None,
960
+ check: (
961
+ Callable[[BaseExceptionGroup[BaseExcT_1]], bool]
962
+ | Callable[[ExceptionGroup[ExcT_1]], bool]
963
+ | None
964
+ ) = None,
965
+ ):
966
+ # The type hint on the `self` and `check` parameters uses different formats
967
+ # that are *very* hard to reconcile while adhering to the overloads, so we cast
968
+ # it to avoid an error when passing it to super().__init__
969
+ check = cast(
970
+ "Callable[[BaseExceptionGroup[ExcT_1|BaseExcT_1|BaseExceptionGroup[BaseExcT_2]]], bool]",
971
+ check,
972
+ )
973
+ super().__init__(match=match, check=check)
974
+ self.allow_unwrapped = allow_unwrapped
975
+ self.flatten_subgroups: bool = flatten_subgroups
976
+ self.is_baseexception = False
977
+
978
+ if allow_unwrapped and other_exceptions:
979
+ raise ValueError(
980
+ "You cannot specify multiple exceptions with `allow_unwrapped=True.`"
981
+ " If you want to match one of multiple possible exceptions you should"
982
+ " use a `RaisesExc`."
983
+ " E.g. `RaisesExc(check=lambda e: isinstance(e, (...)))`",
984
+ )
985
+ if allow_unwrapped and isinstance(expected_exception, RaisesGroup):
986
+ raise ValueError(
987
+ "`allow_unwrapped=True` has no effect when expecting a `RaisesGroup`."
988
+ " You might want it in the expected `RaisesGroup`, or"
989
+ " `flatten_subgroups=True` if you don't care about the structure.",
990
+ )
991
+ if allow_unwrapped and (match is not None or check is not None):
992
+ raise ValueError(
993
+ "`allow_unwrapped=True` bypasses the `match` and `check` parameters"
994
+ " if the exception is unwrapped. If you intended to match/check the"
995
+ " exception you should use a `RaisesExc` object. If you want to match/check"
996
+ " the exceptiongroup when the exception *is* wrapped you need to"
997
+ " do e.g. `if isinstance(exc.value, ExceptionGroup):"
998
+ " assert RaisesGroup(...).matches(exc.value)` afterwards.",
999
+ )
1000
+
1001
+ self.expected_exceptions: tuple[
1002
+ type[BaseExcT_co] | RaisesExc[BaseExcT_co] | RaisesGroup[BaseException], ...
1003
+ ] = tuple(
1004
+ self._parse_excgroup(e, "a BaseException type, RaisesExc, or RaisesGroup")
1005
+ for e in (
1006
+ expected_exception,
1007
+ *other_exceptions,
1008
+ )
1009
+ )
1010
+
1011
+ def _parse_excgroup(
1012
+ self,
1013
+ exc: (
1014
+ type[BaseExcT_co]
1015
+ | types.GenericAlias
1016
+ | RaisesExc[BaseExcT_1]
1017
+ | RaisesGroup[BaseExcT_2]
1018
+ ),
1019
+ expected: str,
1020
+ ) -> type[BaseExcT_co] | RaisesExc[BaseExcT_1] | RaisesGroup[BaseExcT_2]:
1021
+ # verify exception type and set `self.is_baseexception`
1022
+ if isinstance(exc, RaisesGroup):
1023
+ if self.flatten_subgroups:
1024
+ raise ValueError(
1025
+ "You cannot specify a nested structure inside a RaisesGroup with"
1026
+ " `flatten_subgroups=True`. The parameter will flatten subgroups"
1027
+ " in the raised exceptiongroup before matching, which would never"
1028
+ " match a nested structure.",
1029
+ )
1030
+ self.is_baseexception |= exc.is_baseexception
1031
+ exc._nested = True
1032
+ return exc
1033
+ elif isinstance(exc, RaisesExc):
1034
+ self.is_baseexception |= exc.is_baseexception
1035
+ exc._nested = True
1036
+ return exc
1037
+ elif isinstance(exc, tuple):
1038
+ raise TypeError(
1039
+ f"Expected {expected}, but got {type(exc).__name__!r}.\n"
1040
+ "RaisesGroup does not support tuples of exception types when expecting one of "
1041
+ "several possible exception types like RaisesExc.\n"
1042
+ "If you meant to expect a group with multiple exceptions, list them as separate arguments."
1043
+ )
1044
+ else:
1045
+ return super()._parse_exc(exc, expected)
1046
+
1047
+ @overload
1048
+ def __enter__(
1049
+ self: RaisesGroup[ExcT_1],
1050
+ ) -> ExceptionInfo[ExceptionGroup[ExcT_1]]: ...
1051
+ @overload
1052
+ def __enter__(
1053
+ self: RaisesGroup[BaseExcT_1],
1054
+ ) -> ExceptionInfo[BaseExceptionGroup[BaseExcT_1]]: ...
1055
+
1056
+ def __enter__(self) -> ExceptionInfo[BaseExceptionGroup[BaseException]]:
1057
+ self.excinfo: ExceptionInfo[BaseExceptionGroup[BaseExcT_co]] = (
1058
+ ExceptionInfo.for_later()
1059
+ )
1060
+ return self.excinfo
1061
+
1062
+ def __repr__(self) -> str:
1063
+ reqs = [
1064
+ e.__name__ if isinstance(e, type) else repr(e)
1065
+ for e in self.expected_exceptions
1066
+ ]
1067
+ if self.allow_unwrapped:
1068
+ reqs.append(f"allow_unwrapped={self.allow_unwrapped}")
1069
+ if self.flatten_subgroups:
1070
+ reqs.append(f"flatten_subgroups={self.flatten_subgroups}")
1071
+ if self.match is not None:
1072
+ # If no flags were specified, discard the redundant re.compile() here.
1073
+ reqs.append(f"match={_match_pattern(self.match)!r}")
1074
+ if self.check is not None:
1075
+ reqs.append(f"check={repr_callable(self.check)}")
1076
+ return f"RaisesGroup({', '.join(reqs)})"
1077
+
1078
+ def _unroll_exceptions(
1079
+ self,
1080
+ exceptions: Sequence[BaseException],
1081
+ ) -> Sequence[BaseException]:
1082
+ """Used if `flatten_subgroups=True`."""
1083
+ res: list[BaseException] = []
1084
+ for exc in exceptions:
1085
+ if isinstance(exc, BaseExceptionGroup):
1086
+ res.extend(self._unroll_exceptions(exc.exceptions))
1087
+
1088
+ else:
1089
+ res.append(exc)
1090
+ return res
1091
+
1092
+ @overload
1093
+ def matches(
1094
+ self: RaisesGroup[ExcT_1],
1095
+ exception: BaseException | None,
1096
+ ) -> TypeGuard[ExceptionGroup[ExcT_1]]: ...
1097
+ @overload
1098
+ def matches(
1099
+ self: RaisesGroup[BaseExcT_1],
1100
+ exception: BaseException | None,
1101
+ ) -> TypeGuard[BaseExceptionGroup[BaseExcT_1]]: ...
1102
+
1103
+ def matches(
1104
+ self,
1105
+ exception: BaseException | None,
1106
+ ) -> bool:
1107
+ """Check if an exception matches the requirements of this RaisesGroup.
1108
+ If it fails, `RaisesGroup.fail_reason` will be set.
1109
+
1110
+ Example::
1111
+
1112
+ with pytest.raises(TypeError) as excinfo:
1113
+ ...
1114
+ assert RaisesGroup(ValueError).matches(excinfo.value.__cause__)
1115
+ # the above line is equivalent to
1116
+ myexc = excinfo.value.__cause
1117
+ assert isinstance(myexc, BaseExceptionGroup)
1118
+ assert len(myexc.exceptions) == 1
1119
+ assert isinstance(myexc.exceptions[0], ValueError)
1120
+ """
1121
+ self._fail_reason = None
1122
+ if exception is None:
1123
+ self._fail_reason = "exception is None"
1124
+ return False
1125
+ if not isinstance(exception, BaseExceptionGroup):
1126
+ # we opt to only print type of the exception here, as the repr would
1127
+ # likely be quite long
1128
+ not_group_msg = f"`{type(exception).__name__}()` is not an exception group"
1129
+ if len(self.expected_exceptions) > 1:
1130
+ self._fail_reason = not_group_msg
1131
+ return False
1132
+ # if we have 1 expected exception, check if it would work even if
1133
+ # allow_unwrapped is not set
1134
+ res = self._check_expected(self.expected_exceptions[0], exception)
1135
+ if res is None and self.allow_unwrapped:
1136
+ return True
1137
+
1138
+ if res is None:
1139
+ self._fail_reason = (
1140
+ f"{not_group_msg}, but would match with `allow_unwrapped=True`"
1141
+ )
1142
+ elif self.allow_unwrapped:
1143
+ self._fail_reason = res
1144
+ else:
1145
+ self._fail_reason = not_group_msg
1146
+ return False
1147
+
1148
+ actual_exceptions: Sequence[BaseException] = exception.exceptions
1149
+ if self.flatten_subgroups:
1150
+ actual_exceptions = self._unroll_exceptions(actual_exceptions)
1151
+
1152
+ if not self._check_match(exception):
1153
+ self._fail_reason = cast(str, self._fail_reason)
1154
+ old_reason = self._fail_reason
1155
+ if (
1156
+ len(actual_exceptions) == len(self.expected_exceptions) == 1
1157
+ and isinstance(expected := self.expected_exceptions[0], type)
1158
+ and isinstance(actual := actual_exceptions[0], expected)
1159
+ and self._check_match(actual)
1160
+ ):
1161
+ assert self.match is not None, "can't be None if _check_match failed"
1162
+ assert self._fail_reason is old_reason is not None
1163
+ self._fail_reason += (
1164
+ f"\n"
1165
+ f" but matched the expected `{self._repr_expected(expected)}`.\n"
1166
+ f" You might want "
1167
+ f"`RaisesGroup(RaisesExc({expected.__name__}, match={_match_pattern(self.match)!r}))`"
1168
+ )
1169
+ else:
1170
+ self._fail_reason = old_reason
1171
+ return False
1172
+
1173
+ # do the full check on expected exceptions
1174
+ if not self._check_exceptions(
1175
+ exception,
1176
+ actual_exceptions,
1177
+ ):
1178
+ self._fail_reason = cast(str, self._fail_reason)
1179
+ assert self._fail_reason is not None
1180
+ old_reason = self._fail_reason
1181
+ # if we're not expecting a nested structure, and there is one, do a second
1182
+ # pass where we try flattening it
1183
+ if (
1184
+ not self.flatten_subgroups
1185
+ and not any(
1186
+ isinstance(e, RaisesGroup) for e in self.expected_exceptions
1187
+ )
1188
+ and any(isinstance(e, BaseExceptionGroup) for e in actual_exceptions)
1189
+ and self._check_exceptions(
1190
+ exception,
1191
+ self._unroll_exceptions(exception.exceptions),
1192
+ )
1193
+ ):
1194
+ # only indent if it's a single-line reason. In a multi-line there's already
1195
+ # indented lines that this does not belong to.
1196
+ indent = " " if "\n" not in self._fail_reason else ""
1197
+ self._fail_reason = (
1198
+ old_reason
1199
+ + f"\n{indent}Did you mean to use `flatten_subgroups=True`?"
1200
+ )
1201
+ else:
1202
+ self._fail_reason = old_reason
1203
+ return False
1204
+
1205
+ # Only run `self.check` once we know `exception` is of the correct type.
1206
+ if not self._check_check(exception):
1207
+ reason = (
1208
+ cast(str, self._fail_reason) + f" on the {type(exception).__name__}"
1209
+ )
1210
+ if (
1211
+ len(actual_exceptions) == len(self.expected_exceptions) == 1
1212
+ and isinstance(expected := self.expected_exceptions[0], type)
1213
+ # we explicitly break typing here :)
1214
+ and self._check_check(actual_exceptions[0]) # type: ignore[arg-type]
1215
+ ):
1216
+ self._fail_reason = reason + (
1217
+ f", but did return True for the expected {self._repr_expected(expected)}."
1218
+ f" You might want RaisesGroup(RaisesExc({expected.__name__}, check=<...>))"
1219
+ )
1220
+ else:
1221
+ self._fail_reason = reason
1222
+ return False
1223
+
1224
+ return True
1225
+
1226
+ @staticmethod
1227
+ def _check_expected(
1228
+ expected_type: (
1229
+ type[BaseException] | RaisesExc[BaseException] | RaisesGroup[BaseException]
1230
+ ),
1231
+ exception: BaseException,
1232
+ ) -> str | None:
1233
+ """Helper method for `RaisesGroup.matches` and `RaisesGroup._check_exceptions`
1234
+ to check one of potentially several expected exceptions."""
1235
+ if isinstance(expected_type, type):
1236
+ return _check_raw_type(expected_type, exception)
1237
+ res = expected_type.matches(exception)
1238
+ if res:
1239
+ return None
1240
+ assert expected_type.fail_reason is not None
1241
+ if expected_type.fail_reason.startswith("\n"):
1242
+ return f"\n{expected_type!r}: {indent(expected_type.fail_reason, ' ')}"
1243
+ return f"{expected_type!r}: {expected_type.fail_reason}"
1244
+
1245
+ @staticmethod
1246
+ def _repr_expected(e: type[BaseException] | AbstractRaises[BaseException]) -> str:
1247
+ """Get the repr of an expected type/RaisesExc/RaisesGroup, but we only want
1248
+ the name if it's a type"""
1249
+ if isinstance(e, type):
1250
+ return _exception_type_name(e)
1251
+ return repr(e)
1252
+
1253
+ @overload
1254
+ def _check_exceptions(
1255
+ self: RaisesGroup[ExcT_1],
1256
+ _exception: Exception,
1257
+ actual_exceptions: Sequence[Exception],
1258
+ ) -> TypeGuard[ExceptionGroup[ExcT_1]]: ...
1259
+ @overload
1260
+ def _check_exceptions(
1261
+ self: RaisesGroup[BaseExcT_1],
1262
+ _exception: BaseException,
1263
+ actual_exceptions: Sequence[BaseException],
1264
+ ) -> TypeGuard[BaseExceptionGroup[BaseExcT_1]]: ...
1265
+
1266
+ def _check_exceptions(
1267
+ self,
1268
+ _exception: BaseException,
1269
+ actual_exceptions: Sequence[BaseException],
1270
+ ) -> bool:
1271
+ """Helper method for RaisesGroup.matches that attempts to pair up expected and actual exceptions"""
1272
+ # The _exception parameter is not used, but necessary for the TypeGuard
1273
+
1274
+ # full table with all results
1275
+ results = ResultHolder(self.expected_exceptions, actual_exceptions)
1276
+
1277
+ # (indexes of) raised exceptions that haven't (yet) found an expected
1278
+ remaining_actual = list(range(len(actual_exceptions)))
1279
+ # (indexes of) expected exceptions that haven't found a matching raised
1280
+ failed_expected: list[int] = []
1281
+ # successful greedy matches
1282
+ matches: dict[int, int] = {}
1283
+
1284
+ # loop over expected exceptions first to get a more predictable result
1285
+ for i_exp, expected in enumerate(self.expected_exceptions):
1286
+ for i_rem in remaining_actual:
1287
+ res = self._check_expected(expected, actual_exceptions[i_rem])
1288
+ results.set_result(i_exp, i_rem, res)
1289
+ if res is None:
1290
+ remaining_actual.remove(i_rem)
1291
+ matches[i_exp] = i_rem
1292
+ break
1293
+ else:
1294
+ failed_expected.append(i_exp)
1295
+
1296
+ # All exceptions matched up successfully
1297
+ if not remaining_actual and not failed_expected:
1298
+ return True
1299
+
1300
+ # in case of a single expected and single raised we simplify the output
1301
+ if 1 == len(actual_exceptions) == len(self.expected_exceptions):
1302
+ assert not matches
1303
+ self._fail_reason = res
1304
+ return False
1305
+
1306
+ # The test case is failing, so we can do a slow and exhaustive check to find
1307
+ # duplicate matches etc that will be helpful in debugging
1308
+ for i_exp, expected in enumerate(self.expected_exceptions):
1309
+ for i_actual, actual in enumerate(actual_exceptions):
1310
+ if results.has_result(i_exp, i_actual):
1311
+ continue
1312
+ results.set_result(
1313
+ i_exp, i_actual, self._check_expected(expected, actual)
1314
+ )
1315
+
1316
+ successful_str = (
1317
+ f"{len(matches)} matched exception{'s' if len(matches) > 1 else ''}. "
1318
+ if matches
1319
+ else ""
1320
+ )
1321
+
1322
+ # all expected were found
1323
+ if not failed_expected and results.no_match_for_actual(remaining_actual):
1324
+ self._fail_reason = (
1325
+ f"{successful_str}Unexpected exception(s):"
1326
+ f" {[actual_exceptions[i] for i in remaining_actual]!r}"
1327
+ )
1328
+ return False
1329
+ # all raised exceptions were expected
1330
+ if not remaining_actual and results.no_match_for_expected(failed_expected):
1331
+ no_match_for_str = ", ".join(
1332
+ self._repr_expected(self.expected_exceptions[i])
1333
+ for i in failed_expected
1334
+ )
1335
+ self._fail_reason = f"{successful_str}Too few exceptions raised, found no match for: [{no_match_for_str}]"
1336
+ return False
1337
+
1338
+ # if there's only one remaining and one failed, and the unmatched didn't match anything else,
1339
+ # we elect to only print why the remaining and the failed didn't match.
1340
+ if (
1341
+ 1 == len(remaining_actual) == len(failed_expected)
1342
+ and results.no_match_for_actual(remaining_actual)
1343
+ and results.no_match_for_expected(failed_expected)
1344
+ ):
1345
+ self._fail_reason = f"{successful_str}{results.get_result(failed_expected[0], remaining_actual[0])}"
1346
+ return False
1347
+
1348
+ # there's both expected and raised exceptions without matches
1349
+ s = ""
1350
+ if matches:
1351
+ s += f"\n{successful_str}"
1352
+ indent_1 = " " * 2
1353
+ indent_2 = " " * 4
1354
+
1355
+ if not remaining_actual:
1356
+ s += "\nToo few exceptions raised!"
1357
+ elif not failed_expected:
1358
+ s += "\nUnexpected exception(s)!"
1359
+
1360
+ if failed_expected:
1361
+ s += "\nThe following expected exceptions did not find a match:"
1362
+ rev_matches = {v: k for k, v in matches.items()}
1363
+ for i_failed in failed_expected:
1364
+ s += (
1365
+ f"\n{indent_1}{self._repr_expected(self.expected_exceptions[i_failed])}"
1366
+ )
1367
+ for i_actual, actual in enumerate(actual_exceptions):
1368
+ if results.get_result(i_exp, i_actual) is None:
1369
+ # we print full repr of match target
1370
+ s += (
1371
+ f"\n{indent_2}It matches {backquote(repr(actual))} which was paired with "
1372
+ + backquote(
1373
+ self._repr_expected(
1374
+ self.expected_exceptions[rev_matches[i_actual]]
1375
+ )
1376
+ )
1377
+ )
1378
+
1379
+ if remaining_actual:
1380
+ s += "\nThe following raised exceptions did not find a match"
1381
+ for i_actual in remaining_actual:
1382
+ s += f"\n{indent_1}{actual_exceptions[i_actual]!r}:"
1383
+ for i_exp, expected in enumerate(self.expected_exceptions):
1384
+ res = results.get_result(i_exp, i_actual)
1385
+ if i_exp in failed_expected:
1386
+ assert res is not None
1387
+ if res[0] != "\n":
1388
+ s += "\n"
1389
+ s += indent(res, indent_2)
1390
+ if res is None:
1391
+ # we print full repr of match target
1392
+ s += (
1393
+ f"\n{indent_2}It matches {backquote(self._repr_expected(expected))} "
1394
+ f"which was paired with {backquote(repr(actual_exceptions[matches[i_exp]]))}"
1395
+ )
1396
+
1397
+ if len(self.expected_exceptions) == len(actual_exceptions) and possible_match(
1398
+ results
1399
+ ):
1400
+ s += (
1401
+ "\nThere exist a possible match when attempting an exhaustive check,"
1402
+ " but RaisesGroup uses a greedy algorithm. "
1403
+ "Please make your expected exceptions more stringent with `RaisesExc` etc"
1404
+ " so the greedy algorithm can function."
1405
+ )
1406
+ self._fail_reason = s
1407
+ return False
1408
+
1409
+ def __exit__(
1410
+ self,
1411
+ exc_type: type[BaseException] | None,
1412
+ exc_val: BaseException | None,
1413
+ exc_tb: types.TracebackType | None,
1414
+ ) -> bool:
1415
+ __tracebackhide__ = True
1416
+ if exc_type is None:
1417
+ fail(f"DID NOT RAISE any exception, expected `{self.expected_type()}`")
1418
+
1419
+ assert self.excinfo is not None, (
1420
+ "Internal error - should have been constructed in __enter__"
1421
+ )
1422
+
1423
+ # group_str is the only thing that differs between RaisesExc and RaisesGroup...
1424
+ # I might just scrap it? Or make it part of fail_reason
1425
+ group_str = (
1426
+ "(group)"
1427
+ if self.allow_unwrapped and not issubclass(exc_type, BaseExceptionGroup)
1428
+ else "group"
1429
+ )
1430
+
1431
+ if not self.matches(exc_val):
1432
+ fail(f"Raised exception {group_str} did not match: {self._fail_reason}")
1433
+
1434
+ # Cast to narrow the exception type now that it's verified....
1435
+ # even though the TypeGuard in self.matches should be narrowing
1436
+ exc_info = cast(
1437
+ "tuple[type[BaseExceptionGroup[BaseExcT_co]], BaseExceptionGroup[BaseExcT_co], types.TracebackType]",
1438
+ (exc_type, exc_val, exc_tb),
1439
+ )
1440
+ self.excinfo.fill_unfilled(exc_info)
1441
+ return True
1442
+
1443
+ def expected_type(self) -> str:
1444
+ subexcs = []
1445
+ for e in self.expected_exceptions:
1446
+ if isinstance(e, RaisesExc):
1447
+ subexcs.append(repr(e))
1448
+ elif isinstance(e, RaisesGroup):
1449
+ subexcs.append(e.expected_type())
1450
+ elif isinstance(e, type):
1451
+ subexcs.append(e.__name__)
1452
+ else: # pragma: no cover
1453
+ raise AssertionError("unknown type")
1454
+ group_type = "Base" if self.is_baseexception else ""
1455
+ return f"{group_type}ExceptionGroup({', '.join(subexcs)})"
1456
+
1457
+
1458
+ @final
1459
+ class NotChecked:
1460
+ """Singleton for unchecked values in ResultHolder"""
1461
+
1462
+
1463
+ class ResultHolder:
1464
+ """Container for results of checking exceptions.
1465
+ Used in RaisesGroup._check_exceptions and possible_match.
1466
+ """
1467
+
1468
+ def __init__(
1469
+ self,
1470
+ expected_exceptions: tuple[
1471
+ type[BaseException] | AbstractRaises[BaseException], ...
1472
+ ],
1473
+ actual_exceptions: Sequence[BaseException],
1474
+ ) -> None:
1475
+ self.results: list[list[str | type[NotChecked] | None]] = [
1476
+ [NotChecked for _ in expected_exceptions] for _ in actual_exceptions
1477
+ ]
1478
+
1479
+ def set_result(self, expected: int, actual: int, result: str | None) -> None:
1480
+ self.results[actual][expected] = result
1481
+
1482
+ def get_result(self, expected: int, actual: int) -> str | None:
1483
+ res = self.results[actual][expected]
1484
+ assert res is not NotChecked
1485
+ # mypy doesn't support identity checking against anything but None
1486
+ return res # type: ignore[return-value]
1487
+
1488
+ def has_result(self, expected: int, actual: int) -> bool:
1489
+ return self.results[actual][expected] is not NotChecked
1490
+
1491
+ def no_match_for_expected(self, expected: list[int]) -> bool:
1492
+ for i in expected:
1493
+ for actual_results in self.results:
1494
+ assert actual_results[i] is not NotChecked
1495
+ if actual_results[i] is None:
1496
+ return False
1497
+ return True
1498
+
1499
+ def no_match_for_actual(self, actual: list[int]) -> bool:
1500
+ for i in actual:
1501
+ for res in self.results[i]:
1502
+ assert res is not NotChecked
1503
+ if res is None:
1504
+ return False
1505
+ return True
1506
+
1507
+
1508
+ def possible_match(results: ResultHolder, used: set[int] | None = None) -> bool:
1509
+ if used is None:
1510
+ used = set()
1511
+ curr_row = len(used)
1512
+ if curr_row == len(results.results):
1513
+ return True
1514
+ return any(
1515
+ val is None and i not in used and possible_match(results, used | {i})
1516
+ for (i, val) in enumerate(results.results[curr_row])
1517
+ )