@rowstile/cli-linux-x64 0.1.0-alpha.2

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 (565) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +26 -0
  4. package/python/bin/python3.13 +0 -0
  5. package/python/bin/python3.13-config +122 -0
  6. package/python/lib/libpython3.13.so.1.0 +0 -0
  7. package/python/lib/libpython3.so +0 -0
  8. package/python/lib/python3.13/LICENSE.txt +277 -0
  9. package/python/lib/python3.13/__future__.py +147 -0
  10. package/python/lib/python3.13/__hello__.py +16 -0
  11. package/python/lib/python3.13/_aix_support.py +108 -0
  12. package/python/lib/python3.13/_android_support.py +192 -0
  13. package/python/lib/python3.13/_apple_support.py +66 -0
  14. package/python/lib/python3.13/_collections_abc.py +1187 -0
  15. package/python/lib/python3.13/_colorize.py +119 -0
  16. package/python/lib/python3.13/_compat_pickle.py +251 -0
  17. package/python/lib/python3.13/_compression.py +162 -0
  18. package/python/lib/python3.13/_ios_support.py +71 -0
  19. package/python/lib/python3.13/_markupbase.py +396 -0
  20. package/python/lib/python3.13/_opcode_metadata.py +343 -0
  21. package/python/lib/python3.13/_osx_support.py +579 -0
  22. package/python/lib/python3.13/_py_abc.py +147 -0
  23. package/python/lib/python3.13/_pydatetime.py +2640 -0
  24. package/python/lib/python3.13/_pydecimal.py +6356 -0
  25. package/python/lib/python3.13/_pyio.py +2714 -0
  26. package/python/lib/python3.13/_pylong.py +363 -0
  27. package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
  28. package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
  29. package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
  30. package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
  31. package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
  32. package/python/lib/python3.13/_pyrepl/commands.py +492 -0
  33. package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
  34. package/python/lib/python3.13/_pyrepl/console.py +229 -0
  35. package/python/lib/python3.13/_pyrepl/curses.py +33 -0
  36. package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
  37. package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
  38. package/python/lib/python3.13/_pyrepl/input.py +114 -0
  39. package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
  40. package/python/lib/python3.13/_pyrepl/main.py +59 -0
  41. package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
  42. package/python/lib/python3.13/_pyrepl/pager.py +175 -0
  43. package/python/lib/python3.13/_pyrepl/reader.py +764 -0
  44. package/python/lib/python3.13/_pyrepl/readline.py +599 -0
  45. package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
  46. package/python/lib/python3.13/_pyrepl/trace.py +21 -0
  47. package/python/lib/python3.13/_pyrepl/types.py +10 -0
  48. package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
  49. package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
  50. package/python/lib/python3.13/_pyrepl/utils.py +83 -0
  51. package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
  52. package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
  53. package/python/lib/python3.13/_sitebuiltins.py +91 -0
  54. package/python/lib/python3.13/_strptime.py +800 -0
  55. package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
  56. package/python/lib/python3.13/_threading_local.py +120 -0
  57. package/python/lib/python3.13/_weakrefset.py +205 -0
  58. package/python/lib/python3.13/abc.py +188 -0
  59. package/python/lib/python3.13/antigravity.py +17 -0
  60. package/python/lib/python3.13/argparse.py +2690 -0
  61. package/python/lib/python3.13/ast.py +1865 -0
  62. package/python/lib/python3.13/asyncio/__init__.py +47 -0
  63. package/python/lib/python3.13/asyncio/__main__.py +211 -0
  64. package/python/lib/python3.13/asyncio/base_events.py +2086 -0
  65. package/python/lib/python3.13/asyncio/base_futures.py +67 -0
  66. package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
  67. package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
  68. package/python/lib/python3.13/asyncio/constants.py +41 -0
  69. package/python/lib/python3.13/asyncio/coroutines.py +109 -0
  70. package/python/lib/python3.13/asyncio/events.py +885 -0
  71. package/python/lib/python3.13/asyncio/exceptions.py +62 -0
  72. package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
  73. package/python/lib/python3.13/asyncio/futures.py +425 -0
  74. package/python/lib/python3.13/asyncio/locks.py +617 -0
  75. package/python/lib/python3.13/asyncio/log.py +7 -0
  76. package/python/lib/python3.13/asyncio/mixins.py +21 -0
  77. package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
  78. package/python/lib/python3.13/asyncio/protocols.py +216 -0
  79. package/python/lib/python3.13/asyncio/queues.py +309 -0
  80. package/python/lib/python3.13/asyncio/runners.py +217 -0
  81. package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
  82. package/python/lib/python3.13/asyncio/sslproto.py +929 -0
  83. package/python/lib/python3.13/asyncio/staggered.py +174 -0
  84. package/python/lib/python3.13/asyncio/streams.py +787 -0
  85. package/python/lib/python3.13/asyncio/subprocess.py +229 -0
  86. package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
  87. package/python/lib/python3.13/asyncio/tasks.py +1121 -0
  88. package/python/lib/python3.13/asyncio/threads.py +26 -0
  89. package/python/lib/python3.13/asyncio/timeouts.py +185 -0
  90. package/python/lib/python3.13/asyncio/transports.py +337 -0
  91. package/python/lib/python3.13/asyncio/trsock.py +98 -0
  92. package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
  93. package/python/lib/python3.13/asyncio/windows_events.py +906 -0
  94. package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
  95. package/python/lib/python3.13/base64.py +628 -0
  96. package/python/lib/python3.13/bdb.py +973 -0
  97. package/python/lib/python3.13/bisect.py +118 -0
  98. package/python/lib/python3.13/bz2.py +352 -0
  99. package/python/lib/python3.13/cProfile.py +197 -0
  100. package/python/lib/python3.13/calendar.py +813 -0
  101. package/python/lib/python3.13/cmd.py +409 -0
  102. package/python/lib/python3.13/code.py +386 -0
  103. package/python/lib/python3.13/codecs.py +1132 -0
  104. package/python/lib/python3.13/codeop.py +155 -0
  105. package/python/lib/python3.13/collections/__init__.py +1603 -0
  106. package/python/lib/python3.13/colorsys.py +166 -0
  107. package/python/lib/python3.13/compileall.py +470 -0
  108. package/python/lib/python3.13/concurrent/__init__.py +1 -0
  109. package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
  110. package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
  111. package/python/lib/python3.13/concurrent/futures/process.py +892 -0
  112. package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
  113. package/python/lib/python3.13/configparser.py +1396 -0
  114. package/python/lib/python3.13/contextlib.py +814 -0
  115. package/python/lib/python3.13/contextvars.py +4 -0
  116. package/python/lib/python3.13/copy.py +306 -0
  117. package/python/lib/python3.13/copyreg.py +217 -0
  118. package/python/lib/python3.13/csv.py +527 -0
  119. package/python/lib/python3.13/ctypes/__init__.py +605 -0
  120. package/python/lib/python3.13/ctypes/_aix.py +327 -0
  121. package/python/lib/python3.13/ctypes/_endian.py +78 -0
  122. package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
  123. package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
  124. package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
  125. package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
  126. package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
  127. package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
  128. package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
  129. package/python/lib/python3.13/ctypes/util.py +387 -0
  130. package/python/lib/python3.13/ctypes/wintypes.py +202 -0
  131. package/python/lib/python3.13/curses/__init__.py +101 -0
  132. package/python/lib/python3.13/curses/ascii.py +99 -0
  133. package/python/lib/python3.13/curses/has_key.py +192 -0
  134. package/python/lib/python3.13/curses/panel.py +6 -0
  135. package/python/lib/python3.13/curses/textpad.py +236 -0
  136. package/python/lib/python3.13/dataclasses.py +1679 -0
  137. package/python/lib/python3.13/datetime.py +9 -0
  138. package/python/lib/python3.13/dbm/__init__.py +194 -0
  139. package/python/lib/python3.13/dbm/dumb.py +319 -0
  140. package/python/lib/python3.13/dbm/gnu.py +3 -0
  141. package/python/lib/python3.13/dbm/ndbm.py +3 -0
  142. package/python/lib/python3.13/dbm/sqlite3.py +144 -0
  143. package/python/lib/python3.13/decimal.py +109 -0
  144. package/python/lib/python3.13/difflib.py +2058 -0
  145. package/python/lib/python3.13/dis.py +1075 -0
  146. package/python/lib/python3.13/doctest.py +2919 -0
  147. package/python/lib/python3.13/email/__init__.py +61 -0
  148. package/python/lib/python3.13/email/_encoded_words.py +233 -0
  149. package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
  150. package/python/lib/python3.13/email/_parseaddr.py +563 -0
  151. package/python/lib/python3.13/email/_policybase.py +382 -0
  152. package/python/lib/python3.13/email/architecture.rst +216 -0
  153. package/python/lib/python3.13/email/base64mime.py +115 -0
  154. package/python/lib/python3.13/email/charset.py +396 -0
  155. package/python/lib/python3.13/email/contentmanager.py +254 -0
  156. package/python/lib/python3.13/email/encoders.py +65 -0
  157. package/python/lib/python3.13/email/errors.py +117 -0
  158. package/python/lib/python3.13/email/feedparser.py +536 -0
  159. package/python/lib/python3.13/email/generator.py +530 -0
  160. package/python/lib/python3.13/email/header.py +582 -0
  161. package/python/lib/python3.13/email/headerregistry.py +618 -0
  162. package/python/lib/python3.13/email/iterators.py +68 -0
  163. package/python/lib/python3.13/email/message.py +1217 -0
  164. package/python/lib/python3.13/email/mime/__init__.py +0 -0
  165. package/python/lib/python3.13/email/mime/application.py +37 -0
  166. package/python/lib/python3.13/email/mime/audio.py +97 -0
  167. package/python/lib/python3.13/email/mime/base.py +29 -0
  168. package/python/lib/python3.13/email/mime/image.py +152 -0
  169. package/python/lib/python3.13/email/mime/message.py +33 -0
  170. package/python/lib/python3.13/email/mime/multipart.py +47 -0
  171. package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
  172. package/python/lib/python3.13/email/mime/text.py +40 -0
  173. package/python/lib/python3.13/email/parser.py +127 -0
  174. package/python/lib/python3.13/email/policy.py +232 -0
  175. package/python/lib/python3.13/email/quoprimime.py +300 -0
  176. package/python/lib/python3.13/email/utils.py +497 -0
  177. package/python/lib/python3.13/encodings/__init__.py +179 -0
  178. package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  179. package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  180. package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  181. package/python/lib/python3.13/encodings/aliases.py +560 -0
  182. package/python/lib/python3.13/encodings/ascii.py +50 -0
  183. package/python/lib/python3.13/encodings/base64_codec.py +55 -0
  184. package/python/lib/python3.13/encodings/big5.py +39 -0
  185. package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
  186. package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
  187. package/python/lib/python3.13/encodings/charmap.py +69 -0
  188. package/python/lib/python3.13/encodings/cp037.py +307 -0
  189. package/python/lib/python3.13/encodings/cp1006.py +307 -0
  190. package/python/lib/python3.13/encodings/cp1026.py +307 -0
  191. package/python/lib/python3.13/encodings/cp1125.py +698 -0
  192. package/python/lib/python3.13/encodings/cp1140.py +307 -0
  193. package/python/lib/python3.13/encodings/cp1250.py +307 -0
  194. package/python/lib/python3.13/encodings/cp1251.py +307 -0
  195. package/python/lib/python3.13/encodings/cp1252.py +307 -0
  196. package/python/lib/python3.13/encodings/cp1253.py +307 -0
  197. package/python/lib/python3.13/encodings/cp1254.py +307 -0
  198. package/python/lib/python3.13/encodings/cp1255.py +307 -0
  199. package/python/lib/python3.13/encodings/cp1256.py +307 -0
  200. package/python/lib/python3.13/encodings/cp1257.py +307 -0
  201. package/python/lib/python3.13/encodings/cp1258.py +307 -0
  202. package/python/lib/python3.13/encodings/cp273.py +307 -0
  203. package/python/lib/python3.13/encodings/cp424.py +307 -0
  204. package/python/lib/python3.13/encodings/cp437.py +698 -0
  205. package/python/lib/python3.13/encodings/cp500.py +307 -0
  206. package/python/lib/python3.13/encodings/cp720.py +309 -0
  207. package/python/lib/python3.13/encodings/cp737.py +698 -0
  208. package/python/lib/python3.13/encodings/cp775.py +697 -0
  209. package/python/lib/python3.13/encodings/cp850.py +698 -0
  210. package/python/lib/python3.13/encodings/cp852.py +698 -0
  211. package/python/lib/python3.13/encodings/cp855.py +698 -0
  212. package/python/lib/python3.13/encodings/cp856.py +307 -0
  213. package/python/lib/python3.13/encodings/cp857.py +694 -0
  214. package/python/lib/python3.13/encodings/cp858.py +698 -0
  215. package/python/lib/python3.13/encodings/cp860.py +698 -0
  216. package/python/lib/python3.13/encodings/cp861.py +698 -0
  217. package/python/lib/python3.13/encodings/cp862.py +698 -0
  218. package/python/lib/python3.13/encodings/cp863.py +698 -0
  219. package/python/lib/python3.13/encodings/cp864.py +690 -0
  220. package/python/lib/python3.13/encodings/cp865.py +698 -0
  221. package/python/lib/python3.13/encodings/cp866.py +698 -0
  222. package/python/lib/python3.13/encodings/cp869.py +689 -0
  223. package/python/lib/python3.13/encodings/cp874.py +307 -0
  224. package/python/lib/python3.13/encodings/cp875.py +307 -0
  225. package/python/lib/python3.13/encodings/cp932.py +39 -0
  226. package/python/lib/python3.13/encodings/cp949.py +39 -0
  227. package/python/lib/python3.13/encodings/cp950.py +39 -0
  228. package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
  229. package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
  230. package/python/lib/python3.13/encodings/euc_jp.py +39 -0
  231. package/python/lib/python3.13/encodings/euc_kr.py +39 -0
  232. package/python/lib/python3.13/encodings/gb18030.py +39 -0
  233. package/python/lib/python3.13/encodings/gb2312.py +39 -0
  234. package/python/lib/python3.13/encodings/gbk.py +39 -0
  235. package/python/lib/python3.13/encodings/hex_codec.py +55 -0
  236. package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
  237. package/python/lib/python3.13/encodings/hz.py +39 -0
  238. package/python/lib/python3.13/encodings/idna.py +387 -0
  239. package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
  240. package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
  241. package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
  242. package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
  243. package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
  244. package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
  245. package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
  246. package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
  247. package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
  248. package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
  249. package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
  250. package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
  251. package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
  252. package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
  253. package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
  254. package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
  255. package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
  256. package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
  257. package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
  258. package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
  259. package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
  260. package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
  261. package/python/lib/python3.13/encodings/johab.py +39 -0
  262. package/python/lib/python3.13/encodings/koi8_r.py +307 -0
  263. package/python/lib/python3.13/encodings/koi8_t.py +308 -0
  264. package/python/lib/python3.13/encodings/koi8_u.py +307 -0
  265. package/python/lib/python3.13/encodings/kz1048.py +307 -0
  266. package/python/lib/python3.13/encodings/latin_1.py +50 -0
  267. package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
  268. package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
  269. package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
  270. package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
  271. package/python/lib/python3.13/encodings/mac_greek.py +307 -0
  272. package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
  273. package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
  274. package/python/lib/python3.13/encodings/mac_roman.py +307 -0
  275. package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
  276. package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
  277. package/python/lib/python3.13/encodings/mbcs.py +47 -0
  278. package/python/lib/python3.13/encodings/oem.py +41 -0
  279. package/python/lib/python3.13/encodings/palmos.py +308 -0
  280. package/python/lib/python3.13/encodings/ptcp154.py +312 -0
  281. package/python/lib/python3.13/encodings/punycode.py +253 -0
  282. package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
  283. package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
  284. package/python/lib/python3.13/encodings/rot_13.py +113 -0
  285. package/python/lib/python3.13/encodings/shift_jis.py +39 -0
  286. package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
  287. package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
  288. package/python/lib/python3.13/encodings/tis_620.py +307 -0
  289. package/python/lib/python3.13/encodings/undefined.py +49 -0
  290. package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
  291. package/python/lib/python3.13/encodings/utf_16.py +155 -0
  292. package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
  293. package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
  294. package/python/lib/python3.13/encodings/utf_32.py +150 -0
  295. package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
  296. package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
  297. package/python/lib/python3.13/encodings/utf_7.py +38 -0
  298. package/python/lib/python3.13/encodings/utf_8.py +42 -0
  299. package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
  300. package/python/lib/python3.13/encodings/uu_codec.py +103 -0
  301. package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
  302. package/python/lib/python3.13/enum.py +2183 -0
  303. package/python/lib/python3.13/filecmp.py +320 -0
  304. package/python/lib/python3.13/fileinput.py +442 -0
  305. package/python/lib/python3.13/fnmatch.py +192 -0
  306. package/python/lib/python3.13/fractions.py +1043 -0
  307. package/python/lib/python3.13/ftplib.py +975 -0
  308. package/python/lib/python3.13/functools.py +1036 -0
  309. package/python/lib/python3.13/genericpath.py +200 -0
  310. package/python/lib/python3.13/getopt.py +215 -0
  311. package/python/lib/python3.13/getpass.py +192 -0
  312. package/python/lib/python3.13/gettext.py +657 -0
  313. package/python/lib/python3.13/glob.py +572 -0
  314. package/python/lib/python3.13/graphlib.py +250 -0
  315. package/python/lib/python3.13/gzip.py +693 -0
  316. package/python/lib/python3.13/hashlib.py +255 -0
  317. package/python/lib/python3.13/heapq.py +603 -0
  318. package/python/lib/python3.13/hmac.py +220 -0
  319. package/python/lib/python3.13/html/__init__.py +132 -0
  320. package/python/lib/python3.13/html/entities.py +2513 -0
  321. package/python/lib/python3.13/html/parser.py +583 -0
  322. package/python/lib/python3.13/http/__init__.py +202 -0
  323. package/python/lib/python3.13/http/client.py +1598 -0
  324. package/python/lib/python3.13/http/cookiejar.py +2122 -0
  325. package/python/lib/python3.13/http/cookies.py +635 -0
  326. package/python/lib/python3.13/http/server.py +1355 -0
  327. package/python/lib/python3.13/imaplib.py +1769 -0
  328. package/python/lib/python3.13/importlib/__init__.py +136 -0
  329. package/python/lib/python3.13/importlib/_abc.py +39 -0
  330. package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
  331. package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
  332. package/python/lib/python3.13/importlib/abc.py +243 -0
  333. package/python/lib/python3.13/importlib/machinery.py +21 -0
  334. package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
  335. package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
  336. package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
  337. package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
  338. package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
  339. package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
  340. package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
  341. package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
  342. package/python/lib/python3.13/importlib/readers.py +12 -0
  343. package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
  344. package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
  345. package/python/lib/python3.13/importlib/resources/_common.py +211 -0
  346. package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
  347. package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
  348. package/python/lib/python3.13/importlib/resources/abc.py +173 -0
  349. package/python/lib/python3.13/importlib/resources/readers.py +203 -0
  350. package/python/lib/python3.13/importlib/resources/simple.py +106 -0
  351. package/python/lib/python3.13/importlib/simple.py +14 -0
  352. package/python/lib/python3.13/importlib/util.py +274 -0
  353. package/python/lib/python3.13/inspect.py +3479 -0
  354. package/python/lib/python3.13/io.py +99 -0
  355. package/python/lib/python3.13/ipaddress.py +2440 -0
  356. package/python/lib/python3.13/json/__init__.py +365 -0
  357. package/python/lib/python3.13/json/decoder.py +364 -0
  358. package/python/lib/python3.13/json/encoder.py +446 -0
  359. package/python/lib/python3.13/json/scanner.py +73 -0
  360. package/python/lib/python3.13/json/tool.py +90 -0
  361. package/python/lib/python3.13/keyword.py +64 -0
  362. package/python/lib/python3.13/lib-dynload/.empty +0 -0
  363. package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
  364. package/python/lib/python3.13/linecache.py +236 -0
  365. package/python/lib/python3.13/locale.py +1987 -0
  366. package/python/lib/python3.13/logging/__init__.py +2330 -0
  367. package/python/lib/python3.13/logging/config.py +1080 -0
  368. package/python/lib/python3.13/logging/handlers.py +1629 -0
  369. package/python/lib/python3.13/lzma.py +364 -0
  370. package/python/lib/python3.13/mailbox.py +2219 -0
  371. package/python/lib/python3.13/mimetypes.py +679 -0
  372. package/python/lib/python3.13/modulefinder.py +671 -0
  373. package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
  374. package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
  375. package/python/lib/python3.13/multiprocessing/context.py +383 -0
  376. package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
  377. package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
  378. package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
  379. package/python/lib/python3.13/multiprocessing/heap.py +337 -0
  380. package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
  381. package/python/lib/python3.13/multiprocessing/pool.py +957 -0
  382. package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
  383. package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
  384. package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
  385. package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
  386. package/python/lib/python3.13/multiprocessing/process.py +436 -0
  387. package/python/lib/python3.13/multiprocessing/queues.py +399 -0
  388. package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
  389. package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
  390. package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
  391. package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
  392. package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
  393. package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
  394. package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
  395. package/python/lib/python3.13/multiprocessing/util.py +562 -0
  396. package/python/lib/python3.13/netrc.py +199 -0
  397. package/python/lib/python3.13/ntpath.py +872 -0
  398. package/python/lib/python3.13/nturl2path.py +69 -0
  399. package/python/lib/python3.13/numbers.py +427 -0
  400. package/python/lib/python3.13/opcode.py +115 -0
  401. package/python/lib/python3.13/operator.py +467 -0
  402. package/python/lib/python3.13/optparse.py +1681 -0
  403. package/python/lib/python3.13/os.py +1184 -0
  404. package/python/lib/python3.13/pathlib/__init__.py +12 -0
  405. package/python/lib/python3.13/pathlib/_abc.py +930 -0
  406. package/python/lib/python3.13/pathlib/_local.py +861 -0
  407. package/python/lib/python3.13/pdb.py +2550 -0
  408. package/python/lib/python3.13/pickle.py +1860 -0
  409. package/python/lib/python3.13/pickletools.py +2904 -0
  410. package/python/lib/python3.13/pkgutil.py +529 -0
  411. package/python/lib/python3.13/platform.py +1454 -0
  412. package/python/lib/python3.13/plistlib.py +948 -0
  413. package/python/lib/python3.13/poplib.py +477 -0
  414. package/python/lib/python3.13/posixpath.py +578 -0
  415. package/python/lib/python3.13/pprint.py +658 -0
  416. package/python/lib/python3.13/profile.py +616 -0
  417. package/python/lib/python3.13/pstats.py +778 -0
  418. package/python/lib/python3.13/pty.py +211 -0
  419. package/python/lib/python3.13/py_compile.py +212 -0
  420. package/python/lib/python3.13/pyclbr.py +314 -0
  421. package/python/lib/python3.13/pydoc.py +2861 -0
  422. package/python/lib/python3.13/queue.py +383 -0
  423. package/python/lib/python3.13/quopri.py +237 -0
  424. package/python/lib/python3.13/random.py +1078 -0
  425. package/python/lib/python3.13/re/__init__.py +428 -0
  426. package/python/lib/python3.13/re/_casefix.py +106 -0
  427. package/python/lib/python3.13/re/_compiler.py +768 -0
  428. package/python/lib/python3.13/re/_constants.py +222 -0
  429. package/python/lib/python3.13/re/_parser.py +1081 -0
  430. package/python/lib/python3.13/reprlib.py +230 -0
  431. package/python/lib/python3.13/rlcompleter.py +222 -0
  432. package/python/lib/python3.13/runpy.py +326 -0
  433. package/python/lib/python3.13/sched.py +167 -0
  434. package/python/lib/python3.13/secrets.py +71 -0
  435. package/python/lib/python3.13/selectors.py +603 -0
  436. package/python/lib/python3.13/shelve.py +250 -0
  437. package/python/lib/python3.13/shlex.py +345 -0
  438. package/python/lib/python3.13/shutil.py +1569 -0
  439. package/python/lib/python3.13/signal.py +94 -0
  440. package/python/lib/python3.13/site.py +773 -0
  441. package/python/lib/python3.13/smtplib.py +1123 -0
  442. package/python/lib/python3.13/socket.py +988 -0
  443. package/python/lib/python3.13/socketserver.py +863 -0
  444. package/python/lib/python3.13/sqlite3/__init__.py +70 -0
  445. package/python/lib/python3.13/sqlite3/__main__.py +139 -0
  446. package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
  447. package/python/lib/python3.13/sqlite3/dump.py +118 -0
  448. package/python/lib/python3.13/sre_compile.py +7 -0
  449. package/python/lib/python3.13/sre_constants.py +7 -0
  450. package/python/lib/python3.13/sre_parse.py +7 -0
  451. package/python/lib/python3.13/ssl.py +1541 -0
  452. package/python/lib/python3.13/stat.py +212 -0
  453. package/python/lib/python3.13/statistics.py +1817 -0
  454. package/python/lib/python3.13/string.py +314 -0
  455. package/python/lib/python3.13/stringprep.py +272 -0
  456. package/python/lib/python3.13/struct.py +15 -0
  457. package/python/lib/python3.13/subprocess.py +2258 -0
  458. package/python/lib/python3.13/symtable.py +414 -0
  459. package/python/lib/python3.13/sysconfig/__init__.py +734 -0
  460. package/python/lib/python3.13/sysconfig/__main__.py +248 -0
  461. package/python/lib/python3.13/tabnanny.py +340 -0
  462. package/python/lib/python3.13/tarfile.py +3136 -0
  463. package/python/lib/python3.13/tempfile.py +958 -0
  464. package/python/lib/python3.13/textwrap.py +497 -0
  465. package/python/lib/python3.13/this.py +28 -0
  466. package/python/lib/python3.13/threading.py +1602 -0
  467. package/python/lib/python3.13/timeit.py +381 -0
  468. package/python/lib/python3.13/token.py +141 -0
  469. package/python/lib/python3.13/tokenize.py +592 -0
  470. package/python/lib/python3.13/tomllib/__init__.py +10 -0
  471. package/python/lib/python3.13/tomllib/_parser.py +703 -0
  472. package/python/lib/python3.13/tomllib/_re.py +107 -0
  473. package/python/lib/python3.13/tomllib/_types.py +10 -0
  474. package/python/lib/python3.13/tomllib/mypy.ini +15 -0
  475. package/python/lib/python3.13/trace.py +754 -0
  476. package/python/lib/python3.13/traceback.py +1639 -0
  477. package/python/lib/python3.13/tracemalloc.py +560 -0
  478. package/python/lib/python3.13/tty.py +73 -0
  479. package/python/lib/python3.13/types.py +346 -0
  480. package/python/lib/python3.13/typing.py +3846 -0
  481. package/python/lib/python3.13/unittest/__init__.py +80 -0
  482. package/python/lib/python3.13/unittest/__main__.py +18 -0
  483. package/python/lib/python3.13/unittest/_log.py +86 -0
  484. package/python/lib/python3.13/unittest/async_case.py +146 -0
  485. package/python/lib/python3.13/unittest/case.py +1478 -0
  486. package/python/lib/python3.13/unittest/loader.py +460 -0
  487. package/python/lib/python3.13/unittest/main.py +280 -0
  488. package/python/lib/python3.13/unittest/mock.py +3189 -0
  489. package/python/lib/python3.13/unittest/result.py +256 -0
  490. package/python/lib/python3.13/unittest/runner.py +292 -0
  491. package/python/lib/python3.13/unittest/signals.py +71 -0
  492. package/python/lib/python3.13/unittest/suite.py +379 -0
  493. package/python/lib/python3.13/unittest/util.py +170 -0
  494. package/python/lib/python3.13/urllib/__init__.py +0 -0
  495. package/python/lib/python3.13/urllib/error.py +74 -0
  496. package/python/lib/python3.13/urllib/parse.py +1264 -0
  497. package/python/lib/python3.13/urllib/request.py +2796 -0
  498. package/python/lib/python3.13/urllib/response.py +84 -0
  499. package/python/lib/python3.13/urllib/robotparser.py +363 -0
  500. package/python/lib/python3.13/uuid.py +784 -0
  501. package/python/lib/python3.13/warnings.py +735 -0
  502. package/python/lib/python3.13/wave.py +665 -0
  503. package/python/lib/python3.13/weakref.py +674 -0
  504. package/python/lib/python3.13/webbrowser.py +724 -0
  505. package/python/lib/python3.13/wsgiref/__init__.py +25 -0
  506. package/python/lib/python3.13/wsgiref/handlers.py +575 -0
  507. package/python/lib/python3.13/wsgiref/headers.py +192 -0
  508. package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
  509. package/python/lib/python3.13/wsgiref/types.py +54 -0
  510. package/python/lib/python3.13/wsgiref/util.py +159 -0
  511. package/python/lib/python3.13/wsgiref/validate.py +438 -0
  512. package/python/lib/python3.13/xml/__init__.py +20 -0
  513. package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
  514. package/python/lib/python3.13/xml/dom/__init__.py +140 -0
  515. package/python/lib/python3.13/xml/dom/domreg.py +99 -0
  516. package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
  517. package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
  518. package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
  519. package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
  520. package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
  521. package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
  522. package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
  523. package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
  524. package/python/lib/python3.13/xml/etree/__init__.py +33 -0
  525. package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
  526. package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
  527. package/python/lib/python3.13/xml/parsers/expat.py +8 -0
  528. package/python/lib/python3.13/xml/sax/__init__.py +94 -0
  529. package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
  530. package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
  531. package/python/lib/python3.13/xml/sax/handler.py +387 -0
  532. package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
  533. package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
  534. package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
  535. package/python/lib/python3.13/xmlrpc/client.py +1503 -0
  536. package/python/lib/python3.13/xmlrpc/server.py +1002 -0
  537. package/python/lib/python3.13/zipapp.py +229 -0
  538. package/python/lib/python3.13/zipfile/__init__.py +2391 -0
  539. package/python/lib/python3.13/zipfile/__main__.py +4 -0
  540. package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
  541. package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
  542. package/python/lib/python3.13/zipimport.py +803 -0
  543. package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
  544. package/python/lib/python3.13/zoneinfo/_common.py +172 -0
  545. package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
  546. package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
  547. package/python/licenses/LICENSE.bdb.txt +126 -0
  548. package/python/licenses/LICENSE.bzip2.txt +37 -0
  549. package/python/licenses/LICENSE.cpython.txt +771 -0
  550. package/python/licenses/LICENSE.expat.txt +21 -0
  551. package/python/licenses/LICENSE.libX11.txt +942 -0
  552. package/python/licenses/LICENSE.libXau.txt +21 -0
  553. package/python/licenses/LICENSE.libedit.txt +29 -0
  554. package/python/licenses/LICENSE.libffi.txt +21 -0
  555. package/python/licenses/LICENSE.liblzma.txt +13 -0
  556. package/python/licenses/LICENSE.libuuid.txt +27 -0
  557. package/python/licenses/LICENSE.libxcb.txt +30 -0
  558. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  559. package/python/licenses/LICENSE.ncurses.txt +29 -0
  560. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  561. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  562. package/python/licenses/LICENSE.sqlite.txt +23 -0
  563. package/python/licenses/LICENSE.tcl.txt +40 -0
  564. package/python/licenses/LICENSE.tix.txt +54 -0
  565. package/python/licenses/LICENSE.zlib.txt +21 -0
@@ -0,0 +1,1081 @@
1
+ #
2
+ # Secret Labs' Regular Expression Engine
3
+ #
4
+ # convert re-style regular expression to sre pattern
5
+ #
6
+ # Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved.
7
+ #
8
+ # See the __init__.py file for information on usage and redistribution.
9
+ #
10
+
11
+ """Internal support module for sre"""
12
+
13
+ # XXX: show string offset and offending character for all errors
14
+
15
+ from ._constants import *
16
+
17
+ SPECIAL_CHARS = ".\\[{()*+?^$|"
18
+ REPEAT_CHARS = "*+?{"
19
+
20
+ DIGITS = frozenset("0123456789")
21
+
22
+ OCTDIGITS = frozenset("01234567")
23
+ HEXDIGITS = frozenset("0123456789abcdefABCDEF")
24
+ ASCIILETTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
25
+
26
+ WHITESPACE = frozenset(" \t\n\r\v\f")
27
+
28
+ _REPEATCODES = frozenset({MIN_REPEAT, MAX_REPEAT, POSSESSIVE_REPEAT})
29
+ _UNITCODES = frozenset({ANY, RANGE, IN, LITERAL, NOT_LITERAL, CATEGORY})
30
+
31
+ ESCAPES = {
32
+ r"\a": (LITERAL, ord("\a")),
33
+ r"\b": (LITERAL, ord("\b")),
34
+ r"\f": (LITERAL, ord("\f")),
35
+ r"\n": (LITERAL, ord("\n")),
36
+ r"\r": (LITERAL, ord("\r")),
37
+ r"\t": (LITERAL, ord("\t")),
38
+ r"\v": (LITERAL, ord("\v")),
39
+ r"\\": (LITERAL, ord("\\"))
40
+ }
41
+
42
+ CATEGORIES = {
43
+ r"\A": (AT, AT_BEGINNING_STRING), # start of string
44
+ r"\b": (AT, AT_BOUNDARY),
45
+ r"\B": (AT, AT_NON_BOUNDARY),
46
+ r"\d": (IN, [(CATEGORY, CATEGORY_DIGIT)]),
47
+ r"\D": (IN, [(CATEGORY, CATEGORY_NOT_DIGIT)]),
48
+ r"\s": (IN, [(CATEGORY, CATEGORY_SPACE)]),
49
+ r"\S": (IN, [(CATEGORY, CATEGORY_NOT_SPACE)]),
50
+ r"\w": (IN, [(CATEGORY, CATEGORY_WORD)]),
51
+ r"\W": (IN, [(CATEGORY, CATEGORY_NOT_WORD)]),
52
+ r"\Z": (AT, AT_END_STRING), # end of string
53
+ }
54
+
55
+ FLAGS = {
56
+ # standard flags
57
+ "i": SRE_FLAG_IGNORECASE,
58
+ "L": SRE_FLAG_LOCALE,
59
+ "m": SRE_FLAG_MULTILINE,
60
+ "s": SRE_FLAG_DOTALL,
61
+ "x": SRE_FLAG_VERBOSE,
62
+ # extensions
63
+ "a": SRE_FLAG_ASCII,
64
+ "u": SRE_FLAG_UNICODE,
65
+ }
66
+
67
+ TYPE_FLAGS = SRE_FLAG_ASCII | SRE_FLAG_LOCALE | SRE_FLAG_UNICODE
68
+ GLOBAL_FLAGS = SRE_FLAG_DEBUG
69
+
70
+ # Maximal value returned by SubPattern.getwidth().
71
+ # Must be larger than MAXREPEAT, MAXCODE and sys.maxsize.
72
+ MAXWIDTH = 1 << 64
73
+
74
+ class State:
75
+ # keeps track of state for parsing
76
+ def __init__(self):
77
+ self.flags = 0
78
+ self.groupdict = {}
79
+ self.groupwidths = [None] # group 0
80
+ self.lookbehindgroups = None
81
+ self.grouprefpos = {}
82
+ @property
83
+ def groups(self):
84
+ return len(self.groupwidths)
85
+ def opengroup(self, name=None):
86
+ gid = self.groups
87
+ self.groupwidths.append(None)
88
+ if self.groups > MAXGROUPS:
89
+ raise error("too many groups")
90
+ if name is not None:
91
+ ogid = self.groupdict.get(name, None)
92
+ if ogid is not None:
93
+ raise error("redefinition of group name %r as group %d; "
94
+ "was group %d" % (name, gid, ogid))
95
+ self.groupdict[name] = gid
96
+ return gid
97
+ def closegroup(self, gid, p):
98
+ self.groupwidths[gid] = p.getwidth()
99
+ def checkgroup(self, gid):
100
+ return gid < self.groups and self.groupwidths[gid] is not None
101
+
102
+ def checklookbehindgroup(self, gid, source):
103
+ if self.lookbehindgroups is not None:
104
+ if not self.checkgroup(gid):
105
+ raise source.error('cannot refer to an open group')
106
+ if gid >= self.lookbehindgroups:
107
+ raise source.error('cannot refer to group defined in the same '
108
+ 'lookbehind subpattern')
109
+
110
+ class SubPattern:
111
+ # a subpattern, in intermediate form
112
+ def __init__(self, state, data=None):
113
+ self.state = state
114
+ if data is None:
115
+ data = []
116
+ self.data = data
117
+ self.width = None
118
+
119
+ def dump(self, level=0):
120
+ seqtypes = (tuple, list)
121
+ for op, av in self.data:
122
+ print(level*" " + str(op), end='')
123
+ if op is IN:
124
+ # member sublanguage
125
+ print()
126
+ for op, a in av:
127
+ print((level+1)*" " + str(op), a)
128
+ elif op is BRANCH:
129
+ print()
130
+ for i, a in enumerate(av[1]):
131
+ if i:
132
+ print(level*" " + "OR")
133
+ a.dump(level+1)
134
+ elif op is GROUPREF_EXISTS:
135
+ condgroup, item_yes, item_no = av
136
+ print('', condgroup)
137
+ item_yes.dump(level+1)
138
+ if item_no:
139
+ print(level*" " + "ELSE")
140
+ item_no.dump(level+1)
141
+ elif isinstance(av, SubPattern):
142
+ print()
143
+ av.dump(level+1)
144
+ elif isinstance(av, seqtypes):
145
+ nl = False
146
+ for a in av:
147
+ if isinstance(a, SubPattern):
148
+ if not nl:
149
+ print()
150
+ a.dump(level+1)
151
+ nl = True
152
+ else:
153
+ if not nl:
154
+ print(' ', end='')
155
+ print(a, end='')
156
+ nl = False
157
+ if not nl:
158
+ print()
159
+ else:
160
+ print('', av)
161
+ def __repr__(self):
162
+ return repr(self.data)
163
+ def __len__(self):
164
+ return len(self.data)
165
+ def __delitem__(self, index):
166
+ del self.data[index]
167
+ def __getitem__(self, index):
168
+ if isinstance(index, slice):
169
+ return SubPattern(self.state, self.data[index])
170
+ return self.data[index]
171
+ def __setitem__(self, index, code):
172
+ self.data[index] = code
173
+ def insert(self, index, code):
174
+ self.data.insert(index, code)
175
+ def append(self, code):
176
+ self.data.append(code)
177
+ def getwidth(self):
178
+ # determine the width (min, max) for this subpattern
179
+ if self.width is not None:
180
+ return self.width
181
+ lo = hi = 0
182
+ for op, av in self.data:
183
+ if op is BRANCH:
184
+ i = MAXWIDTH
185
+ j = 0
186
+ for av in av[1]:
187
+ l, h = av.getwidth()
188
+ i = min(i, l)
189
+ j = max(j, h)
190
+ lo = lo + i
191
+ hi = hi + j
192
+ elif op is ATOMIC_GROUP:
193
+ i, j = av.getwidth()
194
+ lo = lo + i
195
+ hi = hi + j
196
+ elif op is SUBPATTERN:
197
+ i, j = av[-1].getwidth()
198
+ lo = lo + i
199
+ hi = hi + j
200
+ elif op in _REPEATCODES:
201
+ i, j = av[2].getwidth()
202
+ lo = lo + i * av[0]
203
+ if av[1] == MAXREPEAT and j:
204
+ hi = MAXWIDTH
205
+ else:
206
+ hi = hi + j * av[1]
207
+ elif op in _UNITCODES:
208
+ lo = lo + 1
209
+ hi = hi + 1
210
+ elif op is GROUPREF:
211
+ i, j = self.state.groupwidths[av]
212
+ lo = lo + i
213
+ hi = hi + j
214
+ elif op is GROUPREF_EXISTS:
215
+ i, j = av[1].getwidth()
216
+ if av[2] is not None:
217
+ l, h = av[2].getwidth()
218
+ i = min(i, l)
219
+ j = max(j, h)
220
+ else:
221
+ i = 0
222
+ lo = lo + i
223
+ hi = hi + j
224
+ elif op is SUCCESS:
225
+ break
226
+ self.width = min(lo, MAXWIDTH), min(hi, MAXWIDTH)
227
+ return self.width
228
+
229
+ class Tokenizer:
230
+ def __init__(self, string):
231
+ self.istext = isinstance(string, str)
232
+ self.string = string
233
+ if not self.istext:
234
+ string = str(string, 'latin1')
235
+ self.decoded_string = string
236
+ self.index = 0
237
+ self.next = None
238
+ self.__next()
239
+ def __next(self):
240
+ index = self.index
241
+ try:
242
+ char = self.decoded_string[index]
243
+ except IndexError:
244
+ self.next = None
245
+ return
246
+ if char == "\\":
247
+ index += 1
248
+ try:
249
+ char += self.decoded_string[index]
250
+ except IndexError:
251
+ raise error("bad escape (end of pattern)",
252
+ self.string, len(self.string) - 1) from None
253
+ self.index = index + 1
254
+ self.next = char
255
+ def match(self, char):
256
+ if char == self.next:
257
+ self.__next()
258
+ return True
259
+ return False
260
+ def get(self):
261
+ this = self.next
262
+ self.__next()
263
+ return this
264
+ def getwhile(self, n, charset):
265
+ result = ''
266
+ for _ in range(n):
267
+ c = self.next
268
+ if c not in charset:
269
+ break
270
+ result += c
271
+ self.__next()
272
+ return result
273
+ def getuntil(self, terminator, name):
274
+ result = ''
275
+ while True:
276
+ c = self.next
277
+ self.__next()
278
+ if c is None:
279
+ if not result:
280
+ raise self.error("missing " + name)
281
+ raise self.error("missing %s, unterminated name" % terminator,
282
+ len(result))
283
+ if c == terminator:
284
+ if not result:
285
+ raise self.error("missing " + name, 1)
286
+ break
287
+ result += c
288
+ return result
289
+ @property
290
+ def pos(self):
291
+ return self.index - len(self.next or '')
292
+ def tell(self):
293
+ return self.index - len(self.next or '')
294
+ def seek(self, index):
295
+ self.index = index
296
+ self.__next()
297
+
298
+ def error(self, msg, offset=0):
299
+ if not self.istext:
300
+ msg = msg.encode('ascii', 'backslashreplace').decode('ascii')
301
+ return error(msg, self.string, self.tell() - offset)
302
+
303
+ def checkgroupname(self, name, offset):
304
+ if not (self.istext or name.isascii()):
305
+ msg = "bad character in group name %a" % name
306
+ raise self.error(msg, len(name) + offset)
307
+ if not name.isidentifier():
308
+ msg = "bad character in group name %r" % name
309
+ raise self.error(msg, len(name) + offset)
310
+
311
+ def _class_escape(source, escape):
312
+ # handle escape code inside character class
313
+ code = ESCAPES.get(escape)
314
+ if code:
315
+ return code
316
+ code = CATEGORIES.get(escape)
317
+ if code and code[0] is IN:
318
+ return code
319
+ try:
320
+ c = escape[1:2]
321
+ if c == "x":
322
+ # hexadecimal escape (exactly two digits)
323
+ escape += source.getwhile(2, HEXDIGITS)
324
+ if len(escape) != 4:
325
+ raise source.error("incomplete escape %s" % escape, len(escape))
326
+ return LITERAL, int(escape[2:], 16)
327
+ elif c == "u" and source.istext:
328
+ # unicode escape (exactly four digits)
329
+ escape += source.getwhile(4, HEXDIGITS)
330
+ if len(escape) != 6:
331
+ raise source.error("incomplete escape %s" % escape, len(escape))
332
+ return LITERAL, int(escape[2:], 16)
333
+ elif c == "U" and source.istext:
334
+ # unicode escape (exactly eight digits)
335
+ escape += source.getwhile(8, HEXDIGITS)
336
+ if len(escape) != 10:
337
+ raise source.error("incomplete escape %s" % escape, len(escape))
338
+ c = int(escape[2:], 16)
339
+ chr(c) # raise ValueError for invalid code
340
+ return LITERAL, c
341
+ elif c == "N" and source.istext:
342
+ import unicodedata
343
+ # named unicode escape e.g. \N{EM DASH}
344
+ if not source.match('{'):
345
+ raise source.error("missing {")
346
+ charname = source.getuntil('}', 'character name')
347
+ try:
348
+ c = ord(unicodedata.lookup(charname))
349
+ except (KeyError, TypeError):
350
+ raise source.error("undefined character name %r" % charname,
351
+ len(charname) + len(r'\N{}')) from None
352
+ return LITERAL, c
353
+ elif c in OCTDIGITS:
354
+ # octal escape (up to three digits)
355
+ escape += source.getwhile(2, OCTDIGITS)
356
+ c = int(escape[1:], 8)
357
+ if c > 0o377:
358
+ raise source.error('octal escape value %s outside of '
359
+ 'range 0-0o377' % escape, len(escape))
360
+ return LITERAL, c
361
+ elif c in DIGITS:
362
+ raise ValueError
363
+ if len(escape) == 2:
364
+ if c in ASCIILETTERS:
365
+ raise source.error('bad escape %s' % escape, len(escape))
366
+ return LITERAL, ord(escape[1])
367
+ except ValueError:
368
+ pass
369
+ raise source.error("bad escape %s" % escape, len(escape))
370
+
371
+ def _escape(source, escape, state):
372
+ # handle escape code in expression
373
+ code = CATEGORIES.get(escape)
374
+ if code:
375
+ return code
376
+ code = ESCAPES.get(escape)
377
+ if code:
378
+ return code
379
+ try:
380
+ c = escape[1:2]
381
+ if c == "x":
382
+ # hexadecimal escape
383
+ escape += source.getwhile(2, HEXDIGITS)
384
+ if len(escape) != 4:
385
+ raise source.error("incomplete escape %s" % escape, len(escape))
386
+ return LITERAL, int(escape[2:], 16)
387
+ elif c == "u" and source.istext:
388
+ # unicode escape (exactly four digits)
389
+ escape += source.getwhile(4, HEXDIGITS)
390
+ if len(escape) != 6:
391
+ raise source.error("incomplete escape %s" % escape, len(escape))
392
+ return LITERAL, int(escape[2:], 16)
393
+ elif c == "U" and source.istext:
394
+ # unicode escape (exactly eight digits)
395
+ escape += source.getwhile(8, HEXDIGITS)
396
+ if len(escape) != 10:
397
+ raise source.error("incomplete escape %s" % escape, len(escape))
398
+ c = int(escape[2:], 16)
399
+ chr(c) # raise ValueError for invalid code
400
+ return LITERAL, c
401
+ elif c == "N" and source.istext:
402
+ import unicodedata
403
+ # named unicode escape e.g. \N{EM DASH}
404
+ if not source.match('{'):
405
+ raise source.error("missing {")
406
+ charname = source.getuntil('}', 'character name')
407
+ try:
408
+ c = ord(unicodedata.lookup(charname))
409
+ except (KeyError, TypeError):
410
+ raise source.error("undefined character name %r" % charname,
411
+ len(charname) + len(r'\N{}')) from None
412
+ return LITERAL, c
413
+ elif c == "0":
414
+ # octal escape
415
+ escape += source.getwhile(2, OCTDIGITS)
416
+ return LITERAL, int(escape[1:], 8)
417
+ elif c in DIGITS:
418
+ # octal escape *or* decimal group reference (sigh)
419
+ if source.next in DIGITS:
420
+ escape += source.get()
421
+ if (escape[1] in OCTDIGITS and escape[2] in OCTDIGITS and
422
+ source.next in OCTDIGITS):
423
+ # got three octal digits; this is an octal escape
424
+ escape += source.get()
425
+ c = int(escape[1:], 8)
426
+ if c > 0o377:
427
+ raise source.error('octal escape value %s outside of '
428
+ 'range 0-0o377' % escape,
429
+ len(escape))
430
+ return LITERAL, c
431
+ # not an octal escape, so this is a group reference
432
+ group = int(escape[1:])
433
+ if group < state.groups:
434
+ if not state.checkgroup(group):
435
+ raise source.error("cannot refer to an open group",
436
+ len(escape))
437
+ state.checklookbehindgroup(group, source)
438
+ return GROUPREF, group
439
+ raise source.error("invalid group reference %d" % group, len(escape) - 1)
440
+ if len(escape) == 2:
441
+ if c in ASCIILETTERS:
442
+ raise source.error("bad escape %s" % escape, len(escape))
443
+ return LITERAL, ord(escape[1])
444
+ except ValueError:
445
+ pass
446
+ raise source.error("bad escape %s" % escape, len(escape))
447
+
448
+ def _uniq(items):
449
+ return list(dict.fromkeys(items))
450
+
451
+ def _parse_sub(source, state, verbose, nested):
452
+ # parse an alternation: a|b|c
453
+
454
+ items = []
455
+ itemsappend = items.append
456
+ sourcematch = source.match
457
+ start = source.tell()
458
+ while True:
459
+ itemsappend(_parse(source, state, verbose, nested + 1,
460
+ not nested and not items))
461
+ if not sourcematch("|"):
462
+ break
463
+ if not nested:
464
+ verbose = state.flags & SRE_FLAG_VERBOSE
465
+
466
+ if len(items) == 1:
467
+ return items[0]
468
+
469
+ subpattern = SubPattern(state)
470
+
471
+ # check if all items share a common prefix
472
+ while True:
473
+ prefix = None
474
+ for item in items:
475
+ if not item:
476
+ break
477
+ if prefix is None:
478
+ prefix = item[0]
479
+ elif item[0] != prefix:
480
+ break
481
+ else:
482
+ # all subitems start with a common "prefix".
483
+ # move it out of the branch
484
+ for item in items:
485
+ del item[0]
486
+ subpattern.append(prefix)
487
+ continue # check next one
488
+ break
489
+
490
+ # check if the branch can be replaced by a character set
491
+ set = []
492
+ for item in items:
493
+ if len(item) != 1:
494
+ break
495
+ op, av = item[0]
496
+ if op is LITERAL:
497
+ set.append((op, av))
498
+ elif op is IN and av[0][0] is not NEGATE:
499
+ set.extend(av)
500
+ else:
501
+ break
502
+ else:
503
+ # we can store this as a character set instead of a
504
+ # branch (the compiler may optimize this even more)
505
+ subpattern.append((IN, _uniq(set)))
506
+ return subpattern
507
+
508
+ subpattern.append((BRANCH, (None, items)))
509
+ return subpattern
510
+
511
+ def _parse(source, state, verbose, nested, first=False):
512
+ # parse a simple pattern
513
+ subpattern = SubPattern(state)
514
+
515
+ # precompute constants into local variables
516
+ subpatternappend = subpattern.append
517
+ sourceget = source.get
518
+ sourcematch = source.match
519
+ _len = len
520
+ _ord = ord
521
+
522
+ while True:
523
+
524
+ this = source.next
525
+ if this is None:
526
+ break # end of pattern
527
+ if this in "|)":
528
+ break # end of subpattern
529
+ sourceget()
530
+
531
+ if verbose:
532
+ # skip whitespace and comments
533
+ if this in WHITESPACE:
534
+ continue
535
+ if this == "#":
536
+ while True:
537
+ this = sourceget()
538
+ if this is None or this == "\n":
539
+ break
540
+ continue
541
+
542
+ if this[0] == "\\":
543
+ code = _escape(source, this, state)
544
+ subpatternappend(code)
545
+
546
+ elif this not in SPECIAL_CHARS:
547
+ subpatternappend((LITERAL, _ord(this)))
548
+
549
+ elif this == "[":
550
+ here = source.tell() - 1
551
+ # character set
552
+ set = []
553
+ setappend = set.append
554
+ ## if sourcematch(":"):
555
+ ## pass # handle character classes
556
+ if source.next == '[':
557
+ import warnings
558
+ warnings.warn(
559
+ 'Possible nested set at position %d' % source.tell(),
560
+ FutureWarning, stacklevel=nested + 6
561
+ )
562
+ negate = sourcematch("^")
563
+ # check remaining characters
564
+ while True:
565
+ this = sourceget()
566
+ if this is None:
567
+ raise source.error("unterminated character set",
568
+ source.tell() - here)
569
+ if this == "]" and set:
570
+ break
571
+ elif this[0] == "\\":
572
+ code1 = _class_escape(source, this)
573
+ else:
574
+ if set and this in '-&~|' and source.next == this:
575
+ import warnings
576
+ warnings.warn(
577
+ 'Possible set %s at position %d' % (
578
+ 'difference' if this == '-' else
579
+ 'intersection' if this == '&' else
580
+ 'symmetric difference' if this == '~' else
581
+ 'union',
582
+ source.tell() - 1),
583
+ FutureWarning, stacklevel=nested + 6
584
+ )
585
+ code1 = LITERAL, _ord(this)
586
+ if sourcematch("-"):
587
+ # potential range
588
+ that = sourceget()
589
+ if that is None:
590
+ raise source.error("unterminated character set",
591
+ source.tell() - here)
592
+ if that == "]":
593
+ if code1[0] is IN:
594
+ code1 = code1[1][0]
595
+ setappend(code1)
596
+ setappend((LITERAL, _ord("-")))
597
+ break
598
+ if that[0] == "\\":
599
+ code2 = _class_escape(source, that)
600
+ else:
601
+ if that == '-':
602
+ import warnings
603
+ warnings.warn(
604
+ 'Possible set difference at position %d' % (
605
+ source.tell() - 2),
606
+ FutureWarning, stacklevel=nested + 6
607
+ )
608
+ code2 = LITERAL, _ord(that)
609
+ if code1[0] != LITERAL or code2[0] != LITERAL:
610
+ msg = "bad character range %s-%s" % (this, that)
611
+ raise source.error(msg, len(this) + 1 + len(that))
612
+ lo = code1[1]
613
+ hi = code2[1]
614
+ if hi < lo:
615
+ msg = "bad character range %s-%s" % (this, that)
616
+ raise source.error(msg, len(this) + 1 + len(that))
617
+ setappend((RANGE, (lo, hi)))
618
+ else:
619
+ if code1[0] is IN:
620
+ code1 = code1[1][0]
621
+ setappend(code1)
622
+
623
+ set = _uniq(set)
624
+ # XXX: <fl> should move set optimization to compiler!
625
+ if _len(set) == 1 and set[0][0] is LITERAL:
626
+ # optimization
627
+ if negate:
628
+ subpatternappend((NOT_LITERAL, set[0][1]))
629
+ else:
630
+ subpatternappend(set[0])
631
+ else:
632
+ if negate:
633
+ set.insert(0, (NEGATE, None))
634
+ # charmap optimization can't be added here because
635
+ # global flags still are not known
636
+ subpatternappend((IN, set))
637
+
638
+ elif this in REPEAT_CHARS:
639
+ # repeat previous item
640
+ here = source.tell()
641
+ if this == "?":
642
+ min, max = 0, 1
643
+ elif this == "*":
644
+ min, max = 0, MAXREPEAT
645
+
646
+ elif this == "+":
647
+ min, max = 1, MAXREPEAT
648
+ elif this == "{":
649
+ if source.next == "}":
650
+ subpatternappend((LITERAL, _ord(this)))
651
+ continue
652
+
653
+ min, max = 0, MAXREPEAT
654
+ lo = hi = ""
655
+ while source.next in DIGITS:
656
+ lo += sourceget()
657
+ if sourcematch(","):
658
+ while source.next in DIGITS:
659
+ hi += sourceget()
660
+ else:
661
+ hi = lo
662
+ if not sourcematch("}"):
663
+ subpatternappend((LITERAL, _ord(this)))
664
+ source.seek(here)
665
+ continue
666
+
667
+ if lo:
668
+ min = int(lo)
669
+ if min >= MAXREPEAT:
670
+ raise OverflowError("the repetition number is too large")
671
+ if hi:
672
+ max = int(hi)
673
+ if max >= MAXREPEAT:
674
+ raise OverflowError("the repetition number is too large")
675
+ if max < min:
676
+ raise source.error("min repeat greater than max repeat",
677
+ source.tell() - here)
678
+ else:
679
+ raise AssertionError("unsupported quantifier %r" % (char,))
680
+ # figure out which item to repeat
681
+ if subpattern:
682
+ item = subpattern[-1:]
683
+ else:
684
+ item = None
685
+ if not item or item[0][0] is AT:
686
+ raise source.error("nothing to repeat",
687
+ source.tell() - here + len(this))
688
+ if item[0][0] in _REPEATCODES:
689
+ raise source.error("multiple repeat",
690
+ source.tell() - here + len(this))
691
+ if item[0][0] is SUBPATTERN:
692
+ group, add_flags, del_flags, p = item[0][1]
693
+ if group is None and not add_flags and not del_flags:
694
+ item = p
695
+ if sourcematch("?"):
696
+ # Non-Greedy Match
697
+ subpattern[-1] = (MIN_REPEAT, (min, max, item))
698
+ elif sourcematch("+"):
699
+ # Possessive Match (Always Greedy)
700
+ subpattern[-1] = (POSSESSIVE_REPEAT, (min, max, item))
701
+ else:
702
+ # Greedy Match
703
+ subpattern[-1] = (MAX_REPEAT, (min, max, item))
704
+
705
+ elif this == ".":
706
+ subpatternappend((ANY, None))
707
+
708
+ elif this == "(":
709
+ start = source.tell() - 1
710
+ capture = True
711
+ atomic = False
712
+ name = None
713
+ add_flags = 0
714
+ del_flags = 0
715
+ if sourcematch("?"):
716
+ # options
717
+ char = sourceget()
718
+ if char is None:
719
+ raise source.error("unexpected end of pattern")
720
+ if char == "P":
721
+ # python extensions
722
+ if sourcematch("<"):
723
+ # named group: skip forward to end of name
724
+ name = source.getuntil(">", "group name")
725
+ source.checkgroupname(name, 1)
726
+ elif sourcematch("="):
727
+ # named backreference
728
+ name = source.getuntil(")", "group name")
729
+ source.checkgroupname(name, 1)
730
+ gid = state.groupdict.get(name)
731
+ if gid is None:
732
+ msg = "unknown group name %r" % name
733
+ raise source.error(msg, len(name) + 1)
734
+ if not state.checkgroup(gid):
735
+ raise source.error("cannot refer to an open group",
736
+ len(name) + 1)
737
+ state.checklookbehindgroup(gid, source)
738
+ subpatternappend((GROUPREF, gid))
739
+ continue
740
+
741
+ else:
742
+ char = sourceget()
743
+ if char is None:
744
+ raise source.error("unexpected end of pattern")
745
+ raise source.error("unknown extension ?P" + char,
746
+ len(char) + 2)
747
+ elif char == ":":
748
+ # non-capturing group
749
+ capture = False
750
+ elif char == "#":
751
+ # comment
752
+ while True:
753
+ if source.next is None:
754
+ raise source.error("missing ), unterminated comment",
755
+ source.tell() - start)
756
+ if sourceget() == ")":
757
+ break
758
+ continue
759
+
760
+ elif char in "=!<":
761
+ # lookahead assertions
762
+ dir = 1
763
+ if char == "<":
764
+ char = sourceget()
765
+ if char is None:
766
+ raise source.error("unexpected end of pattern")
767
+ if char not in "=!":
768
+ raise source.error("unknown extension ?<" + char,
769
+ len(char) + 2)
770
+ dir = -1 # lookbehind
771
+ lookbehindgroups = state.lookbehindgroups
772
+ if lookbehindgroups is None:
773
+ state.lookbehindgroups = state.groups
774
+ p = _parse_sub(source, state, verbose, nested + 1)
775
+ if dir < 0:
776
+ if lookbehindgroups is None:
777
+ state.lookbehindgroups = None
778
+ if not sourcematch(")"):
779
+ raise source.error("missing ), unterminated subpattern",
780
+ source.tell() - start)
781
+ if char == "=":
782
+ subpatternappend((ASSERT, (dir, p)))
783
+ elif p:
784
+ subpatternappend((ASSERT_NOT, (dir, p)))
785
+ else:
786
+ subpatternappend((FAILURE, ()))
787
+ continue
788
+
789
+ elif char == "(":
790
+ # conditional backreference group
791
+ condname = source.getuntil(")", "group name")
792
+ if not (condname.isdecimal() and condname.isascii()):
793
+ source.checkgroupname(condname, 1)
794
+ condgroup = state.groupdict.get(condname)
795
+ if condgroup is None:
796
+ msg = "unknown group name %r" % condname
797
+ raise source.error(msg, len(condname) + 1)
798
+ else:
799
+ condgroup = int(condname)
800
+ if not condgroup:
801
+ raise source.error("bad group number",
802
+ len(condname) + 1)
803
+ if condgroup >= MAXGROUPS:
804
+ msg = "invalid group reference %d" % condgroup
805
+ raise source.error(msg, len(condname) + 1)
806
+ if condgroup not in state.grouprefpos:
807
+ state.grouprefpos[condgroup] = (
808
+ source.tell() - len(condname) - 1
809
+ )
810
+ if not (condname.isdecimal() and condname.isascii()):
811
+ import warnings
812
+ warnings.warn(
813
+ "bad character in group name %s at position %d" %
814
+ (repr(condname) if source.istext else ascii(condname),
815
+ source.tell() - len(condname) - 1),
816
+ DeprecationWarning, stacklevel=nested + 6
817
+ )
818
+ state.checklookbehindgroup(condgroup, source)
819
+ item_yes = _parse(source, state, verbose, nested + 1)
820
+ if source.match("|"):
821
+ item_no = _parse(source, state, verbose, nested + 1)
822
+ if source.next == "|":
823
+ raise source.error("conditional backref with more than two branches")
824
+ else:
825
+ item_no = None
826
+ if not source.match(")"):
827
+ raise source.error("missing ), unterminated subpattern",
828
+ source.tell() - start)
829
+ subpatternappend((GROUPREF_EXISTS, (condgroup, item_yes, item_no)))
830
+ continue
831
+
832
+ elif char == ">":
833
+ # non-capturing, atomic group
834
+ capture = False
835
+ atomic = True
836
+ elif char in FLAGS or char == "-":
837
+ # flags
838
+ flags = _parse_flags(source, state, char)
839
+ if flags is None: # global flags
840
+ if not first or subpattern:
841
+ raise source.error('global flags not at the start '
842
+ 'of the expression',
843
+ source.tell() - start)
844
+ verbose = state.flags & SRE_FLAG_VERBOSE
845
+ continue
846
+
847
+ add_flags, del_flags = flags
848
+ capture = False
849
+ else:
850
+ raise source.error("unknown extension ?" + char,
851
+ len(char) + 1)
852
+
853
+ # parse group contents
854
+ if capture:
855
+ try:
856
+ group = state.opengroup(name)
857
+ except error as err:
858
+ raise source.error(err.msg, len(name) + 1) from None
859
+ else:
860
+ group = None
861
+ sub_verbose = ((verbose or (add_flags & SRE_FLAG_VERBOSE)) and
862
+ not (del_flags & SRE_FLAG_VERBOSE))
863
+ p = _parse_sub(source, state, sub_verbose, nested + 1)
864
+ if not source.match(")"):
865
+ raise source.error("missing ), unterminated subpattern",
866
+ source.tell() - start)
867
+ if group is not None:
868
+ state.closegroup(group, p)
869
+ if atomic:
870
+ assert group is None
871
+ subpatternappend((ATOMIC_GROUP, p))
872
+ else:
873
+ subpatternappend((SUBPATTERN, (group, add_flags, del_flags, p)))
874
+
875
+ elif this == "^":
876
+ subpatternappend((AT, AT_BEGINNING))
877
+
878
+ elif this == "$":
879
+ subpatternappend((AT, AT_END))
880
+
881
+ else:
882
+ raise AssertionError("unsupported special character %r" % (char,))
883
+
884
+ # unpack non-capturing groups
885
+ for i in range(len(subpattern))[::-1]:
886
+ op, av = subpattern[i]
887
+ if op is SUBPATTERN:
888
+ group, add_flags, del_flags, p = av
889
+ if group is None and not add_flags and not del_flags:
890
+ subpattern[i: i+1] = p
891
+
892
+ return subpattern
893
+
894
+ def _parse_flags(source, state, char):
895
+ sourceget = source.get
896
+ add_flags = 0
897
+ del_flags = 0
898
+ if char != "-":
899
+ while True:
900
+ flag = FLAGS[char]
901
+ if source.istext:
902
+ if char == 'L':
903
+ msg = "bad inline flags: cannot use 'L' flag with a str pattern"
904
+ raise source.error(msg)
905
+ else:
906
+ if char == 'u':
907
+ msg = "bad inline flags: cannot use 'u' flag with a bytes pattern"
908
+ raise source.error(msg)
909
+ add_flags |= flag
910
+ if (flag & TYPE_FLAGS) and (add_flags & TYPE_FLAGS) != flag:
911
+ msg = "bad inline flags: flags 'a', 'u' and 'L' are incompatible"
912
+ raise source.error(msg)
913
+ char = sourceget()
914
+ if char is None:
915
+ raise source.error("missing -, : or )")
916
+ if char in ")-:":
917
+ break
918
+ if char not in FLAGS:
919
+ msg = "unknown flag" if char.isalpha() else "missing -, : or )"
920
+ raise source.error(msg, len(char))
921
+ if char == ")":
922
+ state.flags |= add_flags
923
+ return None
924
+ if add_flags & GLOBAL_FLAGS:
925
+ raise source.error("bad inline flags: cannot turn on global flag", 1)
926
+ if char == "-":
927
+ char = sourceget()
928
+ if char is None:
929
+ raise source.error("missing flag")
930
+ if char not in FLAGS:
931
+ msg = "unknown flag" if char.isalpha() else "missing flag"
932
+ raise source.error(msg, len(char))
933
+ while True:
934
+ flag = FLAGS[char]
935
+ if flag & TYPE_FLAGS:
936
+ msg = "bad inline flags: cannot turn off flags 'a', 'u' and 'L'"
937
+ raise source.error(msg)
938
+ del_flags |= flag
939
+ char = sourceget()
940
+ if char is None:
941
+ raise source.error("missing :")
942
+ if char == ":":
943
+ break
944
+ if char not in FLAGS:
945
+ msg = "unknown flag" if char.isalpha() else "missing :"
946
+ raise source.error(msg, len(char))
947
+ assert char == ":"
948
+ if del_flags & GLOBAL_FLAGS:
949
+ raise source.error("bad inline flags: cannot turn off global flag", 1)
950
+ if add_flags & del_flags:
951
+ raise source.error("bad inline flags: flag turned on and off", 1)
952
+ return add_flags, del_flags
953
+
954
+ def fix_flags(src, flags):
955
+ # Check and fix flags according to the type of pattern (str or bytes)
956
+ if isinstance(src, str):
957
+ if flags & SRE_FLAG_LOCALE:
958
+ raise ValueError("cannot use LOCALE flag with a str pattern")
959
+ if not flags & SRE_FLAG_ASCII:
960
+ flags |= SRE_FLAG_UNICODE
961
+ elif flags & SRE_FLAG_UNICODE:
962
+ raise ValueError("ASCII and UNICODE flags are incompatible")
963
+ else:
964
+ if flags & SRE_FLAG_UNICODE:
965
+ raise ValueError("cannot use UNICODE flag with a bytes pattern")
966
+ if flags & SRE_FLAG_LOCALE and flags & SRE_FLAG_ASCII:
967
+ raise ValueError("ASCII and LOCALE flags are incompatible")
968
+ return flags
969
+
970
+ def parse(str, flags=0, state=None):
971
+ # parse 're' pattern into list of (opcode, argument) tuples
972
+
973
+ source = Tokenizer(str)
974
+
975
+ if state is None:
976
+ state = State()
977
+ state.flags = flags
978
+ state.str = str
979
+
980
+ p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
981
+ p.state.flags = fix_flags(str, p.state.flags)
982
+
983
+ if source.next is not None:
984
+ assert source.next == ")"
985
+ raise source.error("unbalanced parenthesis")
986
+
987
+ for g in p.state.grouprefpos:
988
+ if g >= p.state.groups:
989
+ msg = "invalid group reference %d" % g
990
+ raise error(msg, str, p.state.grouprefpos[g])
991
+
992
+ if flags & SRE_FLAG_DEBUG:
993
+ p.dump()
994
+
995
+ return p
996
+
997
+ def parse_template(source, pattern):
998
+ # parse 're' replacement string into list of literals and
999
+ # group references
1000
+ s = Tokenizer(source)
1001
+ sget = s.get
1002
+ result = []
1003
+ literal = []
1004
+ lappend = literal.append
1005
+ def addliteral():
1006
+ if s.istext:
1007
+ result.append(''.join(literal))
1008
+ else:
1009
+ # The tokenizer implicitly decodes bytes objects as latin-1, we must
1010
+ # therefore re-encode the final representation.
1011
+ result.append(''.join(literal).encode('latin-1'))
1012
+ del literal[:]
1013
+ def addgroup(index, pos):
1014
+ if index > pattern.groups:
1015
+ raise s.error("invalid group reference %d" % index, pos)
1016
+ addliteral()
1017
+ result.append(index)
1018
+ groupindex = pattern.groupindex
1019
+ while True:
1020
+ this = sget()
1021
+ if this is None:
1022
+ break # end of replacement string
1023
+ if this[0] == "\\":
1024
+ # group
1025
+ c = this[1]
1026
+ if c == "g":
1027
+ if not s.match("<"):
1028
+ raise s.error("missing <")
1029
+ name = s.getuntil(">", "group name")
1030
+ if not (name.isdecimal() and name.isascii()):
1031
+ s.checkgroupname(name, 1)
1032
+ try:
1033
+ index = groupindex[name]
1034
+ except KeyError:
1035
+ raise IndexError("unknown group name %r" % name) from None
1036
+ else:
1037
+ index = int(name)
1038
+ if index >= MAXGROUPS:
1039
+ raise s.error("invalid group reference %d" % index,
1040
+ len(name) + 1)
1041
+ if not (name.isdecimal() and name.isascii()):
1042
+ import warnings
1043
+ warnings.warn(
1044
+ "bad character in group name %s at position %d" %
1045
+ (repr(name) if s.istext else ascii(name),
1046
+ s.tell() - len(name) - 1),
1047
+ DeprecationWarning, stacklevel=5
1048
+ )
1049
+ addgroup(index, len(name) + 1)
1050
+ elif c == "0":
1051
+ if s.next in OCTDIGITS:
1052
+ this += sget()
1053
+ if s.next in OCTDIGITS:
1054
+ this += sget()
1055
+ lappend(chr(int(this[1:], 8) & 0xff))
1056
+ elif c in DIGITS:
1057
+ isoctal = False
1058
+ if s.next in DIGITS:
1059
+ this += sget()
1060
+ if (c in OCTDIGITS and this[2] in OCTDIGITS and
1061
+ s.next in OCTDIGITS):
1062
+ this += sget()
1063
+ isoctal = True
1064
+ c = int(this[1:], 8)
1065
+ if c > 0o377:
1066
+ raise s.error('octal escape value %s outside of '
1067
+ 'range 0-0o377' % this, len(this))
1068
+ lappend(chr(c))
1069
+ if not isoctal:
1070
+ addgroup(int(this[1:]), len(this) - 1)
1071
+ else:
1072
+ try:
1073
+ this = chr(ESCAPES[this][1])
1074
+ except KeyError:
1075
+ if c in ASCIILETTERS:
1076
+ raise s.error('bad escape %s' % this, len(this)) from None
1077
+ lappend(this)
1078
+ else:
1079
+ lappend(this)
1080
+ addliteral()
1081
+ return result