_compiler.py000064400000063437152462750210007110 0ustar00# # Secret Labs' Regular Expression Engine # # convert template to internal format # # Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. # # See the __init__.py file for information on usage and redistribution. # """Internal support module for sre""" import _sre from . import _parser from ._constants import * from ._casefix import _EXTRA_CASES assert _sre.MAGIC == MAGIC, "SRE module mismatch" _LITERAL_CODES = {LITERAL, NOT_LITERAL} _SUCCESS_CODES = {SUCCESS, FAILURE} _ASSERT_CODES = {ASSERT, ASSERT_NOT} _UNIT_CODES = _LITERAL_CODES | {ANY, IN} _REPEATING_CODES = { MIN_REPEAT: (REPEAT, MIN_UNTIL, MIN_REPEAT_ONE), MAX_REPEAT: (REPEAT, MAX_UNTIL, REPEAT_ONE), POSSESSIVE_REPEAT: (POSSESSIVE_REPEAT, SUCCESS, POSSESSIVE_REPEAT_ONE), } def _combine_flags(flags, add_flags, del_flags, TYPE_FLAGS=_parser.TYPE_FLAGS): if add_flags & TYPE_FLAGS: flags &= ~TYPE_FLAGS return (flags | add_flags) & ~del_flags def _compile(code, pattern, flags): # internal: compile a (sub)pattern emit = code.append _len = len LITERAL_CODES = _LITERAL_CODES REPEATING_CODES = _REPEATING_CODES SUCCESS_CODES = _SUCCESS_CODES ASSERT_CODES = _ASSERT_CODES iscased = None tolower = None fixes = None if flags & SRE_FLAG_IGNORECASE and not flags & SRE_FLAG_LOCALE: if flags & SRE_FLAG_UNICODE: iscased = _sre.unicode_iscased tolower = _sre.unicode_tolower fixes = _EXTRA_CASES else: iscased = _sre.ascii_iscased tolower = _sre.ascii_tolower for op, av in pattern: if op in LITERAL_CODES: if not flags & SRE_FLAG_IGNORECASE: emit(op) emit(av) elif flags & SRE_FLAG_LOCALE: emit(OP_LOCALE_IGNORE[op]) emit(av) elif not iscased(av): emit(op) emit(av) else: lo = tolower(av) if not fixes: # ascii emit(OP_IGNORE[op]) emit(lo) elif lo not in fixes: emit(OP_UNICODE_IGNORE[op]) emit(lo) else: emit(IN_UNI_IGNORE) skip = _len(code); emit(0) if op is NOT_LITERAL: emit(NEGATE) for k in (lo,) + fixes[lo]: emit(LITERAL) emit(k) emit(FAILURE) code[skip] = _len(code) - skip elif op is IN: charset, hascased = _optimize_charset(av, iscased, tolower, fixes) if flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE: emit(IN_LOC_IGNORE) elif not hascased: emit(IN) elif not fixes: # ascii emit(IN_IGNORE) else: emit(IN_UNI_IGNORE) skip = _len(code); emit(0) _compile_charset(charset, flags, code) code[skip] = _len(code) - skip elif op is ANY: if flags & SRE_FLAG_DOTALL: emit(ANY_ALL) else: emit(ANY) elif op in REPEATING_CODES: if flags & SRE_FLAG_TEMPLATE: raise error("internal: unsupported template operator %r" % (op,)) if _simple(av[2]): emit(REPEATING_CODES[op][2]) skip = _len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) emit(SUCCESS) code[skip] = _len(code) - skip else: emit(REPEATING_CODES[op][0]) skip = _len(code); emit(0) emit(av[0]) emit(av[1]) _compile(code, av[2], flags) code[skip] = _len(code) - skip emit(REPEATING_CODES[op][1]) elif op is SUBPATTERN: group, add_flags, del_flags, p = av if group: emit(MARK) emit((group-1)*2) # _compile_info(code, p, _combine_flags(flags, add_flags, del_flags)) _compile(code, p, _combine_flags(flags, add_flags, del_flags)) if group: emit(MARK) emit((group-1)*2+1) elif op is ATOMIC_GROUP: # Atomic Groups are handled by starting with an Atomic # Group op code, then putting in the atomic group pattern # and finally a success op code to tell any repeat # operations within the Atomic Group to stop eating and # pop their stack if they reach it emit(ATOMIC_GROUP) skip = _len(code); emit(0) _compile(code, av, flags) emit(SUCCESS) code[skip] = _len(code) - skip elif op in SUCCESS_CODES: emit(op) elif op in ASSERT_CODES: emit(op) skip = _len(code); emit(0) if av[0] >= 0: emit(0) # look ahead else: lo, hi = av[1].getwidth() if lo > MAXCODE: raise error("looks too much behind") if lo != hi: raise error("look-behind requires fixed-width pattern") emit(lo) # look behind _compile(code, av[1], flags) emit(SUCCESS) code[skip] = _len(code) - skip elif op is AT: emit(op) if flags & SRE_FLAG_MULTILINE: av = AT_MULTILINE.get(av, av) if flags & SRE_FLAG_LOCALE: av = AT_LOCALE.get(av, av) elif flags & SRE_FLAG_UNICODE: av = AT_UNICODE.get(av, av) emit(av) elif op is BRANCH: emit(op) tail = [] tailappend = tail.append for av in av[1]: skip = _len(code); emit(0) # _compile_info(code, av, flags) _compile(code, av, flags) emit(JUMP) tailappend(_len(code)); emit(0) code[skip] = _len(code) - skip emit(FAILURE) # end of branch for tail in tail: code[tail] = _len(code) - tail elif op is CATEGORY: emit(op) if flags & SRE_FLAG_LOCALE: av = CH_LOCALE[av] elif flags & SRE_FLAG_UNICODE: av = CH_UNICODE[av] emit(av) elif op is GROUPREF: if not flags & SRE_FLAG_IGNORECASE: emit(op) elif flags & SRE_FLAG_LOCALE: emit(GROUPREF_LOC_IGNORE) elif not fixes: # ascii emit(GROUPREF_IGNORE) else: emit(GROUPREF_UNI_IGNORE) emit(av-1) elif op is GROUPREF_EXISTS: emit(op) emit(av[0]-1) skipyes = _len(code); emit(0) _compile(code, av[1], flags) if av[2]: emit(JUMP) skipno = _len(code); emit(0) code[skipyes] = _len(code) - skipyes + 1 _compile(code, av[2], flags) code[skipno] = _len(code) - skipno else: code[skipyes] = _len(code) - skipyes + 1 else: raise error("internal: unsupported operand type %r" % (op,)) def _compile_charset(charset, flags, code): # compile charset subprogram emit = code.append for op, av in charset: emit(op) if op is NEGATE: pass elif op is LITERAL: emit(av) elif op is RANGE or op is RANGE_UNI_IGNORE: emit(av[0]) emit(av[1]) elif op is CHARSET: code.extend(av) elif op is BIGCHARSET: code.extend(av) elif op is CATEGORY: if flags & SRE_FLAG_LOCALE: emit(CH_LOCALE[av]) elif flags & SRE_FLAG_UNICODE: emit(CH_UNICODE[av]) else: emit(av) else: raise error("internal: unsupported set operator %r" % (op,)) emit(FAILURE) def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): # internal: optimize character set out = [] tail = [] charmap = bytearray(256) hascased = False for op, av in charset: while True: try: if op is LITERAL: if fixup: # IGNORECASE and not LOCALE av = fixup(av) charmap[av] = 1 if fixes and av in fixes: for k in fixes[av]: charmap[k] = 1 if not hascased and iscased(av): hascased = True else: charmap[av] = 1 elif op is RANGE: r = range(av[0], av[1]+1) if fixup: # IGNORECASE and not LOCALE if fixes: for i in map(fixup, r): charmap[i] = 1 if i in fixes: for k in fixes[i]: charmap[k] = 1 else: for i in map(fixup, r): charmap[i] = 1 if not hascased: hascased = any(map(iscased, r)) else: for i in r: charmap[i] = 1 elif op is NEGATE: out.append((op, av)) else: tail.append((op, av)) except IndexError: if len(charmap) == 256: # character set contains non-UCS1 character codes charmap += b'\0' * 0xff00 continue # Character set contains non-BMP character codes. # For range, all BMP characters in the range are already # proceeded. if fixup: # IGNORECASE and not LOCALE # For now, IN_UNI_IGNORE+LITERAL and # IN_UNI_IGNORE+RANGE_UNI_IGNORE work for all non-BMP # characters, because two characters (at least one of # which is not in the BMP) match case-insensitively # if and only if: # 1) c1.lower() == c2.lower() # 2) c1.lower() == c2 or c1.lower().upper() == c2 # Also, both c.lower() and c.lower().upper() are single # characters for every non-BMP character. if op is RANGE: if fixes: # not ASCII op = RANGE_UNI_IGNORE hascased = True else: assert op is LITERAL if not hascased and iscased(av): hascased = True tail.append((op, av)) break # compress character map runs = [] q = 0 while True: p = charmap.find(1, q) if p < 0: break if len(runs) >= 2: runs = None break q = charmap.find(0, p) if q < 0: runs.append((p, len(charmap))) break runs.append((p, q)) if runs is not None: # use literal/range for p, q in runs: if q - p == 1: out.append((LITERAL, p)) else: out.append((RANGE, (p, q - 1))) out += tail # if the case was changed or new representation is more compact if hascased or len(out) < len(charset): return out, hascased # else original character set is good enough return charset, hascased # use bitmap if len(charmap) == 256: data = _mk_bitmap(charmap) out.append((CHARSET, data)) out += tail return out, hascased # To represent a big charset, first a bitmap of all characters in the # set is constructed. Then, this bitmap is sliced into chunks of 256 # characters, duplicate chunks are eliminated, and each chunk is # given a number. In the compiled expression, the charset is # represented by a 32-bit word sequence, consisting of one word for # the number of different chunks, a sequence of 256 bytes (64 words) # of chunk numbers indexed by their original chunk position, and a # sequence of 256-bit chunks (8 words each). # Compression is normally good: in a typical charset, large ranges of # Unicode will be either completely excluded (e.g. if only cyrillic # letters are to be matched), or completely included (e.g. if large # subranges of Kanji match). These ranges will be represented by # chunks of all one-bits or all zero-bits. # Matching can be also done efficiently: the more significant byte of # the Unicode character is an index into the chunk number, and the # less significant byte is a bit index in the chunk (just like the # CHARSET matching). charmap = bytes(charmap) # should be hashable comps = {} mapping = bytearray(256) block = 0 data = bytearray() for i in range(0, 65536, 256): chunk = charmap[i: i + 256] if chunk in comps: mapping[i // 256] = comps[chunk] else: mapping[i // 256] = comps[chunk] = block block += 1 data += chunk data = _mk_bitmap(data) data[0:0] = [block] + _bytes_to_codes(mapping) out.append((BIGCHARSET, data)) out += tail return out, hascased _CODEBITS = _sre.CODESIZE * 8 MAXCODE = (1 << _CODEBITS) - 1 _BITS_TRANS = b'0' + b'1' * 255 def _mk_bitmap(bits, _CODEBITS=_CODEBITS, _int=int): s = bits.translate(_BITS_TRANS)[::-1] return [_int(s[i - _CODEBITS: i], 2) for i in range(len(s), 0, -_CODEBITS)] def _bytes_to_codes(b): # Convert block indices to word array a = memoryview(b).cast('I') assert a.itemsize == _sre.CODESIZE assert len(a) * a.itemsize == len(b) return a.tolist() def _simple(p): # check if this subpattern is a "simple" operator if len(p) != 1: return False op, av = p[0] if op is SUBPATTERN: return av[0] is None and _simple(av[-1]) return op in _UNIT_CODES def _generate_overlap_table(prefix): """ Generate an overlap table for the following prefix. An overlap table is a table of the same size as the prefix which informs about the potential self-overlap for each index in the prefix: - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with prefix[0:k] """ table = [0] * len(prefix) for i in range(1, len(prefix)): idx = table[i - 1] while prefix[i] != prefix[idx]: if idx == 0: table[i] = 0 break idx = table[idx - 1] else: table[i] = idx + 1 return table def _get_iscased(flags): if not flags & SRE_FLAG_IGNORECASE: return None elif flags & SRE_FLAG_UNICODE: return _sre.unicode_iscased else: return _sre.ascii_iscased def _get_literal_prefix(pattern, flags): # look for literal prefix prefix = [] prefixappend = prefix.append prefix_skip = None iscased = _get_iscased(flags) for op, av in pattern.data: if op is LITERAL: if iscased and iscased(av): break prefixappend(av) elif op is SUBPATTERN: group, add_flags, del_flags, p = av flags1 = _combine_flags(flags, add_flags, del_flags) if flags1 & SRE_FLAG_IGNORECASE and flags1 & SRE_FLAG_LOCALE: break prefix1, prefix_skip1, got_all = _get_literal_prefix(p, flags1) if prefix_skip is None: if group is not None: prefix_skip = len(prefix) elif prefix_skip1 is not None: prefix_skip = len(prefix) + prefix_skip1 prefix.extend(prefix1) if not got_all: break else: break else: return prefix, prefix_skip, True return prefix, prefix_skip, False def _get_charset_prefix(pattern, flags): while True: if not pattern.data: return None op, av = pattern.data[0] if op is not SUBPATTERN: break group, add_flags, del_flags, pattern = av flags = _combine_flags(flags, add_flags, del_flags) if flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE: return None iscased = _get_iscased(flags) if op is LITERAL: if iscased and iscased(av): return None return [(op, av)] elif op is BRANCH: charset = [] charsetappend = charset.append for p in av[1]: if not p: return None op, av = p[0] if op is LITERAL and not (iscased and iscased(av)): charsetappend((op, av)) else: return None return charset elif op is IN: charset = av if iscased: for op, av in charset: if op is LITERAL: if iscased(av): return None elif op is RANGE: if av[1] > 0xffff: return None if any(map(iscased, range(av[0], av[1]+1))): return None return charset return None def _compile_info(code, pattern, flags): # internal: compile an info block. in the current version, # this contains min/max pattern width, and an optional literal # prefix or a character map lo, hi = pattern.getwidth() if hi > MAXCODE: hi = MAXCODE if lo == 0: code.extend([INFO, 4, 0, lo, hi]) return # look for a literal prefix prefix = [] prefix_skip = 0 charset = [] # not used if not (flags & SRE_FLAG_IGNORECASE and flags & SRE_FLAG_LOCALE): # look for literal prefix prefix, prefix_skip, got_all = _get_literal_prefix(pattern, flags) # if no prefix, look for charset prefix if not prefix: charset = _get_charset_prefix(pattern, flags) ## if prefix: ## print("*** PREFIX", prefix, prefix_skip) ## if charset: ## print("*** CHARSET", charset) # add an info block emit = code.append emit(INFO) skip = len(code); emit(0) # literal flag mask = 0 if prefix: mask = SRE_INFO_PREFIX if prefix_skip is None and got_all: mask = mask | SRE_INFO_LITERAL elif charset: mask = mask | SRE_INFO_CHARSET emit(mask) # pattern length if lo < MAXCODE: emit(lo) else: emit(MAXCODE) prefix = prefix[:MAXCODE] emit(hi) # add literal prefix if prefix: emit(len(prefix)) # length if prefix_skip is None: prefix_skip = len(prefix) emit(prefix_skip) # skip code.extend(prefix) # generate overlap table code.extend(_generate_overlap_table(prefix)) elif charset: charset, hascased = _optimize_charset(charset) assert not hascased _compile_charset(charset, flags, code) code[skip] = len(code) - skip def isstring(obj): return isinstance(obj, (str, bytes)) def _code(p, flags): flags = p.state.flags | flags code = [] # compile info block _compile_info(code, p, flags) # compile the pattern _compile(code, p.data, flags) code.append(SUCCESS) return code def _hex_code(code): return '[%s]' % ', '.join('%#0*x' % (_sre.CODESIZE*2+2, x) for x in code) def dis(code): import sys labels = set() level = 0 offset_width = len(str(len(code) - 1)) def dis_(start, end): def print_(*args, to=None): if to is not None: labels.add(to) args += ('(to %d)' % (to,),) print('%*d%s ' % (offset_width, start, ':' if start in labels else '.'), end=' '*(level-1)) print(*args) def print_2(*args): print(end=' '*(offset_width + 2*level)) print(*args) nonlocal level level += 1 i = start while i < end: start = i op = code[i] i += 1 op = OPCODES[op] if op in (SUCCESS, FAILURE, ANY, ANY_ALL, MAX_UNTIL, MIN_UNTIL, NEGATE): print_(op) elif op in (LITERAL, NOT_LITERAL, LITERAL_IGNORE, NOT_LITERAL_IGNORE, LITERAL_UNI_IGNORE, NOT_LITERAL_UNI_IGNORE, LITERAL_LOC_IGNORE, NOT_LITERAL_LOC_IGNORE): arg = code[i] i += 1 print_(op, '%#02x (%r)' % (arg, chr(arg))) elif op is AT: arg = code[i] i += 1 arg = str(ATCODES[arg]) assert arg[:3] == 'AT_' print_(op, arg[3:]) elif op is CATEGORY: arg = code[i] i += 1 arg = str(CHCODES[arg]) assert arg[:9] == 'CATEGORY_' print_(op, arg[9:]) elif op in (IN, IN_IGNORE, IN_UNI_IGNORE, IN_LOC_IGNORE): skip = code[i] print_(op, skip, to=i+skip) dis_(i+1, i+skip) i += skip elif op in (RANGE, RANGE_UNI_IGNORE): lo, hi = code[i: i+2] i += 2 print_(op, '%#02x %#02x (%r-%r)' % (lo, hi, chr(lo), chr(hi))) elif op is CHARSET: print_(op, _hex_code(code[i: i + 256//_CODEBITS])) i += 256//_CODEBITS elif op is BIGCHARSET: arg = code[i] i += 1 mapping = list(b''.join(x.to_bytes(_sre.CODESIZE, sys.byteorder) for x in code[i: i + 256//_sre.CODESIZE])) print_(op, arg, mapping) i += 256//_sre.CODESIZE level += 1 for j in range(arg): print_2(_hex_code(code[i: i + 256//_CODEBITS])) i += 256//_CODEBITS level -= 1 elif op in (MARK, GROUPREF, GROUPREF_IGNORE, GROUPREF_UNI_IGNORE, GROUPREF_LOC_IGNORE): arg = code[i] i += 1 print_(op, arg) elif op is JUMP: skip = code[i] print_(op, skip, to=i+skip) i += 1 elif op is BRANCH: skip = code[i] print_(op, skip, to=i+skip) while skip: dis_(i+1, i+skip) i += skip start = i skip = code[i] if skip: print_('branch', skip, to=i+skip) else: print_(FAILURE) i += 1 elif op in (REPEAT, REPEAT_ONE, MIN_REPEAT_ONE, POSSESSIVE_REPEAT, POSSESSIVE_REPEAT_ONE): skip, min, max = code[i: i+3] if max == MAXREPEAT: max = 'MAXREPEAT' print_(op, skip, min, max, to=i+skip) dis_(i+3, i+skip) i += skip elif op is GROUPREF_EXISTS: arg, skip = code[i: i+2] print_(op, arg, skip, to=i+skip) i += 2 elif op in (ASSERT, ASSERT_NOT): skip, arg = code[i: i+2] print_(op, skip, arg, to=i+skip) dis_(i+2, i+skip) i += skip elif op is ATOMIC_GROUP: skip = code[i] print_(op, skip, to=i+skip) dis_(i+1, i+skip) i += skip elif op is INFO: skip, flags, min, max = code[i: i+4] if max == MAXREPEAT: max = 'MAXREPEAT' print_(op, skip, bin(flags), min, max, to=i+skip) start = i+4 if flags & SRE_INFO_PREFIX: prefix_len, prefix_skip = code[i+4: i+6] print_2(' prefix_skip', prefix_skip) start = i + 6 prefix = code[start: start+prefix_len] print_2(' prefix', '[%s]' % ', '.join('%#02x' % x for x in prefix), '(%r)' % ''.join(map(chr, prefix))) start += prefix_len print_2(' overlap', code[start: start+prefix_len]) start += prefix_len if flags & SRE_INFO_CHARSET: level += 1 print_2('in') dis_(start, i+skip) level -= 1 i += skip else: raise ValueError(op) level -= 1 dis_(0, len(code)) def compile(p, flags=0): # internal: convert pattern list to internal format if isstring(p): pattern = p p = _parser.parse(p, flags) else: pattern = None code = _code(p, flags) if flags & SRE_FLAG_DEBUG: print() dis(code) # map in either direction groupindex = p.state.groupdict indexgroup = [None] * p.state.groups for k, i in groupindex.items(): indexgroup[i] = k return _sre.compile( pattern, flags | p.state.flags, code, p.state.groups-1, groupindex, tuple(indexgroup) ) _constants.py000064400000013452152462750210007302 0ustar00# # Secret Labs' Regular Expression Engine # # various symbols used by the regular expression engine. # run this script to update the _sre include files! # # Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. # # See the __init__.py file for information on usage and redistribution. # """Internal support module for sre""" # update when constants are added or removed MAGIC = 20221023 from _sre import MAXREPEAT, MAXGROUPS # SRE standard exception (access as sre.error) # should this really be here? class error(Exception): """Exception raised for invalid regular expressions. Attributes: msg: The unformatted error message pattern: The regular expression pattern pos: The index in the pattern where compilation failed (may be None) lineno: The line corresponding to pos (may be None) colno: The column corresponding to pos (may be None) """ __module__ = 're' def __init__(self, msg, pattern=None, pos=None): self.msg = msg self.pattern = pattern self.pos = pos if pattern is not None and pos is not None: msg = '%s at position %d' % (msg, pos) if isinstance(pattern, str): newline = '\n' else: newline = b'\n' self.lineno = pattern.count(newline, 0, pos) + 1 self.colno = pos - pattern.rfind(newline, 0, pos) if newline in pattern: msg = '%s (line %d, column %d)' % (msg, self.lineno, self.colno) else: self.lineno = self.colno = None super().__init__(msg) class _NamedIntConstant(int): def __new__(cls, value, name): self = super(_NamedIntConstant, cls).__new__(cls, value) self.name = name return self def __repr__(self): return self.name __reduce__ = None MAXREPEAT = _NamedIntConstant(MAXREPEAT, 'MAXREPEAT') def _makecodes(*names): items = [_NamedIntConstant(i, name) for i, name in enumerate(names)] globals().update({item.name: item for item in items}) return items # operators OPCODES = _makecodes( # failure=0 success=1 (just because it looks better that way :-) 'FAILURE', 'SUCCESS', 'ANY', 'ANY_ALL', 'ASSERT', 'ASSERT_NOT', 'AT', 'BRANCH', 'CATEGORY', 'CHARSET', 'BIGCHARSET', 'GROUPREF', 'GROUPREF_EXISTS', 'IN', 'INFO', 'JUMP', 'LITERAL', 'MARK', 'MAX_UNTIL', 'MIN_UNTIL', 'NOT_LITERAL', 'NEGATE', 'RANGE', 'REPEAT', 'REPEAT_ONE', 'SUBPATTERN', 'MIN_REPEAT_ONE', 'ATOMIC_GROUP', 'POSSESSIVE_REPEAT', 'POSSESSIVE_REPEAT_ONE', 'GROUPREF_IGNORE', 'IN_IGNORE', 'LITERAL_IGNORE', 'NOT_LITERAL_IGNORE', 'GROUPREF_LOC_IGNORE', 'IN_LOC_IGNORE', 'LITERAL_LOC_IGNORE', 'NOT_LITERAL_LOC_IGNORE', 'GROUPREF_UNI_IGNORE', 'IN_UNI_IGNORE', 'LITERAL_UNI_IGNORE', 'NOT_LITERAL_UNI_IGNORE', 'RANGE_UNI_IGNORE', # The following opcodes are only occurred in the parser output, # but not in the compiled code. 'MIN_REPEAT', 'MAX_REPEAT', ) del OPCODES[-2:] # remove MIN_REPEAT and MAX_REPEAT # positions ATCODES = _makecodes( 'AT_BEGINNING', 'AT_BEGINNING_LINE', 'AT_BEGINNING_STRING', 'AT_BOUNDARY', 'AT_NON_BOUNDARY', 'AT_END', 'AT_END_LINE', 'AT_END_STRING', 'AT_LOC_BOUNDARY', 'AT_LOC_NON_BOUNDARY', 'AT_UNI_BOUNDARY', 'AT_UNI_NON_BOUNDARY', ) # categories CHCODES = _makecodes( 'CATEGORY_DIGIT', 'CATEGORY_NOT_DIGIT', 'CATEGORY_SPACE', 'CATEGORY_NOT_SPACE', 'CATEGORY_WORD', 'CATEGORY_NOT_WORD', 'CATEGORY_LINEBREAK', 'CATEGORY_NOT_LINEBREAK', 'CATEGORY_LOC_WORD', 'CATEGORY_LOC_NOT_WORD', 'CATEGORY_UNI_DIGIT', 'CATEGORY_UNI_NOT_DIGIT', 'CATEGORY_UNI_SPACE', 'CATEGORY_UNI_NOT_SPACE', 'CATEGORY_UNI_WORD', 'CATEGORY_UNI_NOT_WORD', 'CATEGORY_UNI_LINEBREAK', 'CATEGORY_UNI_NOT_LINEBREAK', ) # replacement operations for "ignore case" mode OP_IGNORE = { LITERAL: LITERAL_IGNORE, NOT_LITERAL: NOT_LITERAL_IGNORE, } OP_LOCALE_IGNORE = { LITERAL: LITERAL_LOC_IGNORE, NOT_LITERAL: NOT_LITERAL_LOC_IGNORE, } OP_UNICODE_IGNORE = { LITERAL: LITERAL_UNI_IGNORE, NOT_LITERAL: NOT_LITERAL_UNI_IGNORE, } AT_MULTILINE = { AT_BEGINNING: AT_BEGINNING_LINE, AT_END: AT_END_LINE } AT_LOCALE = { AT_BOUNDARY: AT_LOC_BOUNDARY, AT_NON_BOUNDARY: AT_LOC_NON_BOUNDARY } AT_UNICODE = { AT_BOUNDARY: AT_UNI_BOUNDARY, AT_NON_BOUNDARY: AT_UNI_NON_BOUNDARY } CH_LOCALE = { CATEGORY_DIGIT: CATEGORY_DIGIT, CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT, CATEGORY_SPACE: CATEGORY_SPACE, CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE, CATEGORY_WORD: CATEGORY_LOC_WORD, CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD, CATEGORY_LINEBREAK: CATEGORY_LINEBREAK, CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK } CH_UNICODE = { CATEGORY_DIGIT: CATEGORY_UNI_DIGIT, CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT, CATEGORY_SPACE: CATEGORY_UNI_SPACE, CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE, CATEGORY_WORD: CATEGORY_UNI_WORD, CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD, CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK, CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK } # flags SRE_FLAG_TEMPLATE = 1 # template mode (unknown purpose, deprecated) SRE_FLAG_IGNORECASE = 2 # case insensitive SRE_FLAG_LOCALE = 4 # honour system locale SRE_FLAG_MULTILINE = 8 # treat target as multiline string SRE_FLAG_DOTALL = 16 # treat target as a single string SRE_FLAG_UNICODE = 32 # use unicode "locale" SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments SRE_FLAG_DEBUG = 128 # debugging SRE_FLAG_ASCII = 256 # use ascii "locale" # flags for INFO primitive SRE_INFO_PREFIX = 1 # has prefix SRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix) SRE_INFO_CHARSET = 4 # pattern starts with character from given set __init__.py000064400000037673152462750210006701 0ustar00# # Secret Labs' Regular Expression Engine # # re-compatible interface for the sre matching engine # # Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. # # This version of the SRE library can be redistributed under CNRI's # Python 1.6 license. For any other use, please contact Secret Labs # AB (info@pythonware.com). # # Portions of this engine have been developed in cooperation with # CNRI. Hewlett-Packard provided funding for 1.6 integration and # other compatibility work. # r"""Support for regular expressions (RE). This module provides regular expression matching operations similar to those found in Perl. It supports both 8-bit and Unicode strings; both the pattern and the strings being processed can contain null bytes and characters outside the US ASCII range. Regular expressions can contain both special and ordinary characters. Most ordinary characters, like "A", "a", or "0", are the simplest regular expressions; they simply match themselves. You can concatenate ordinary characters, so last matches the string 'last'. The special characters are: "." Matches any character except a newline. "^" Matches the start of the string. "$" Matches the end of the string or just before the newline at the end of the string. "*" Matches 0 or more (greedy) repetitions of the preceding RE. Greedy means that it will match as many repetitions as possible. "+" Matches 1 or more (greedy) repetitions of the preceding RE. "?" Matches 0 or 1 (greedy) of the preceding RE. *?,+?,?? Non-greedy versions of the previous three special characters. {m,n} Matches from m to n repetitions of the preceding RE. {m,n}? Non-greedy version of the above. "\\" Either escapes special characters or signals a special sequence. [] Indicates a set of characters. A "^" as the first character indicates a complementing set. "|" A|B, creates an RE that will match either A or B. (...) Matches the RE inside the parentheses. The contents can be retrieved or matched later in the string. (?aiLmsux) The letters set the corresponding flags defined below. (?:...) Non-grouping version of regular parentheses. (?P...) The substring matched by the group is accessible by name. (?P=name) Matches the text matched earlier by the group named name. (?#...) A comment; ignored. (?=...) Matches if ... matches next, but doesn't consume the string. (?!...) Matches if ... doesn't match next. (?<=...) Matches if preceded by ... (must be fixed length). (?= _MAXCACHE: # Drop the least recently used item. # next(iter(_cache)) is known to have linear amortized time, # but it is used here to avoid a dependency from using OrderedDict. # For the small _MAXCACHE value it doesn't make much of a difference. try: del _cache[next(iter(_cache))] except (StopIteration, RuntimeError, KeyError): pass # Append to the end. _cache[key] = p if len(_cache2) >= _MAXCACHE2: # Drop the oldest item. try: del _cache2[next(iter(_cache2))] except (StopIteration, RuntimeError, KeyError): pass _cache2[key] = p return p @functools.lru_cache(_MAXCACHE) def _compile_template(pattern, repl): # internal: compile replacement pattern return _sre.template(pattern, _parser.parse_template(repl, pattern)) # register myself for pickling import copyreg def _pickle(p): return _compile, (p.pattern, p.flags) copyreg.pickle(Pattern, _pickle, _compile) # -------------------------------------------------------------------- # experimental stuff (see python-dev discussions for details) class Scanner: def __init__(self, lexicon, flags=0): from ._constants import BRANCH, SUBPATTERN if isinstance(flags, RegexFlag): flags = flags.value self.lexicon = lexicon # combine phrases into a compound pattern p = [] s = _parser.State() s.flags = flags for phrase, action in lexicon: gid = s.opengroup() p.append(_parser.SubPattern(s, [ (SUBPATTERN, (gid, 0, 0, _parser.parse(phrase, flags))), ])) s.closegroup(gid, p[-1]) p = _parser.SubPattern(s, [(BRANCH, (None, p))]) self.scanner = _compiler.compile(p) def scan(self, string): result = [] append = result.append match = self.scanner.scanner(string).match i = 0 while True: m = match() if not m: break j = m.end() if i == j: break action = self.lexicon[m.lastindex-1][1] if callable(action): self.match = m action = action(self, m.group()) if action is not None: append(action) i = j return result, string[i:] _casefix.py000064400000012504152462750210006705 0ustar00# Auto-generated by Tools/build/generate_re_casefix.py. # Maps the code of lowercased character to codes of different lowercased # characters which have the same uppercase. _EXTRA_CASES = { # LATIN SMALL LETTER I: LATIN SMALL LETTER DOTLESS I 0x0069: (0x0131,), # 'i': 'ı' # LATIN SMALL LETTER S: LATIN SMALL LETTER LONG S 0x0073: (0x017f,), # 's': 'ſ' # MICRO SIGN: GREEK SMALL LETTER MU 0x00b5: (0x03bc,), # 'µ': 'μ' # LATIN SMALL LETTER DOTLESS I: LATIN SMALL LETTER I 0x0131: (0x0069,), # 'ı': 'i' # LATIN SMALL LETTER LONG S: LATIN SMALL LETTER S 0x017f: (0x0073,), # 'ſ': 's' # COMBINING GREEK YPOGEGRAMMENI: GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI 0x0345: (0x03b9, 0x1fbe), # '\u0345': 'ιι' # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 0x0390: (0x1fd3,), # 'ΐ': 'ΐ' # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 0x03b0: (0x1fe3,), # 'ΰ': 'ΰ' # GREEK SMALL LETTER BETA: GREEK BETA SYMBOL 0x03b2: (0x03d0,), # 'β': 'ϐ' # GREEK SMALL LETTER EPSILON: GREEK LUNATE EPSILON SYMBOL 0x03b5: (0x03f5,), # 'ε': 'ϵ' # GREEK SMALL LETTER THETA: GREEK THETA SYMBOL 0x03b8: (0x03d1,), # 'θ': 'ϑ' # GREEK SMALL LETTER IOTA: COMBINING GREEK YPOGEGRAMMENI, GREEK PROSGEGRAMMENI 0x03b9: (0x0345, 0x1fbe), # 'ι': '\u0345ι' # GREEK SMALL LETTER KAPPA: GREEK KAPPA SYMBOL 0x03ba: (0x03f0,), # 'κ': 'ϰ' # GREEK SMALL LETTER MU: MICRO SIGN 0x03bc: (0x00b5,), # 'μ': 'µ' # GREEK SMALL LETTER PI: GREEK PI SYMBOL 0x03c0: (0x03d6,), # 'π': 'ϖ' # GREEK SMALL LETTER RHO: GREEK RHO SYMBOL 0x03c1: (0x03f1,), # 'ρ': 'ϱ' # GREEK SMALL LETTER FINAL SIGMA: GREEK SMALL LETTER SIGMA 0x03c2: (0x03c3,), # 'ς': 'σ' # GREEK SMALL LETTER SIGMA: GREEK SMALL LETTER FINAL SIGMA 0x03c3: (0x03c2,), # 'σ': 'ς' # GREEK SMALL LETTER PHI: GREEK PHI SYMBOL 0x03c6: (0x03d5,), # 'φ': 'ϕ' # GREEK BETA SYMBOL: GREEK SMALL LETTER BETA 0x03d0: (0x03b2,), # 'ϐ': 'β' # GREEK THETA SYMBOL: GREEK SMALL LETTER THETA 0x03d1: (0x03b8,), # 'ϑ': 'θ' # GREEK PHI SYMBOL: GREEK SMALL LETTER PHI 0x03d5: (0x03c6,), # 'ϕ': 'φ' # GREEK PI SYMBOL: GREEK SMALL LETTER PI 0x03d6: (0x03c0,), # 'ϖ': 'π' # GREEK KAPPA SYMBOL: GREEK SMALL LETTER KAPPA 0x03f0: (0x03ba,), # 'ϰ': 'κ' # GREEK RHO SYMBOL: GREEK SMALL LETTER RHO 0x03f1: (0x03c1,), # 'ϱ': 'ρ' # GREEK LUNATE EPSILON SYMBOL: GREEK SMALL LETTER EPSILON 0x03f5: (0x03b5,), # 'ϵ': 'ε' # CYRILLIC SMALL LETTER VE: CYRILLIC SMALL LETTER ROUNDED VE 0x0432: (0x1c80,), # 'в': 'ᲀ' # CYRILLIC SMALL LETTER DE: CYRILLIC SMALL LETTER LONG-LEGGED DE 0x0434: (0x1c81,), # 'д': 'ᲁ' # CYRILLIC SMALL LETTER O: CYRILLIC SMALL LETTER NARROW O 0x043e: (0x1c82,), # 'о': 'ᲂ' # CYRILLIC SMALL LETTER ES: CYRILLIC SMALL LETTER WIDE ES 0x0441: (0x1c83,), # 'с': 'ᲃ' # CYRILLIC SMALL LETTER TE: CYRILLIC SMALL LETTER TALL TE, CYRILLIC SMALL LETTER THREE-LEGGED TE 0x0442: (0x1c84, 0x1c85), # 'т': 'ᲄᲅ' # CYRILLIC SMALL LETTER HARD SIGN: CYRILLIC SMALL LETTER TALL HARD SIGN 0x044a: (0x1c86,), # 'ъ': 'ᲆ' # CYRILLIC SMALL LETTER YAT: CYRILLIC SMALL LETTER TALL YAT 0x0463: (0x1c87,), # 'ѣ': 'ᲇ' # CYRILLIC SMALL LETTER ROUNDED VE: CYRILLIC SMALL LETTER VE 0x1c80: (0x0432,), # 'ᲀ': 'в' # CYRILLIC SMALL LETTER LONG-LEGGED DE: CYRILLIC SMALL LETTER DE 0x1c81: (0x0434,), # 'ᲁ': 'д' # CYRILLIC SMALL LETTER NARROW O: CYRILLIC SMALL LETTER O 0x1c82: (0x043e,), # 'ᲂ': 'о' # CYRILLIC SMALL LETTER WIDE ES: CYRILLIC SMALL LETTER ES 0x1c83: (0x0441,), # 'ᲃ': 'с' # CYRILLIC SMALL LETTER TALL TE: CYRILLIC SMALL LETTER TE, CYRILLIC SMALL LETTER THREE-LEGGED TE 0x1c84: (0x0442, 0x1c85), # 'ᲄ': 'тᲅ' # CYRILLIC SMALL LETTER THREE-LEGGED TE: CYRILLIC SMALL LETTER TE, CYRILLIC SMALL LETTER TALL TE 0x1c85: (0x0442, 0x1c84), # 'ᲅ': 'тᲄ' # CYRILLIC SMALL LETTER TALL HARD SIGN: CYRILLIC SMALL LETTER HARD SIGN 0x1c86: (0x044a,), # 'ᲆ': 'ъ' # CYRILLIC SMALL LETTER TALL YAT: CYRILLIC SMALL LETTER YAT 0x1c87: (0x0463,), # 'ᲇ': 'ѣ' # CYRILLIC SMALL LETTER UNBLENDED UK: CYRILLIC SMALL LETTER MONOGRAPH UK 0x1c88: (0xa64b,), # 'ᲈ': 'ꙋ' # LATIN SMALL LETTER S WITH DOT ABOVE: LATIN SMALL LETTER LONG S WITH DOT ABOVE 0x1e61: (0x1e9b,), # 'ṡ': 'ẛ' # LATIN SMALL LETTER LONG S WITH DOT ABOVE: LATIN SMALL LETTER S WITH DOT ABOVE 0x1e9b: (0x1e61,), # 'ẛ': 'ṡ' # GREEK PROSGEGRAMMENI: COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA 0x1fbe: (0x0345, 0x03b9), # 'ι': '\u0345ι' # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA: GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 0x1fd3: (0x0390,), # 'ΐ': 'ΐ' # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA: GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 0x1fe3: (0x03b0,), # 'ΰ': 'ΰ' # CYRILLIC SMALL LETTER MONOGRAPH UK: CYRILLIC SMALL LETTER UNBLENDED UK 0xa64b: (0x1c88,), # 'ꙋ': 'ᲈ' # LATIN SMALL LIGATURE LONG S T: LATIN SMALL LIGATURE ST 0xfb05: (0xfb06,), # 'ſt': 'st' # LATIN SMALL LIGATURE ST: LATIN SMALL LIGATURE LONG S T 0xfb06: (0xfb05,), # 'st': 'ſt' } _parser.py000064400000120361152462750210006560 0ustar00# # Secret Labs' Regular Expression Engine # # convert re-style regular expression to sre pattern # # Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. # # See the __init__.py file for information on usage and redistribution. # """Internal support module for sre""" # XXX: show string offset and offending character for all errors from ._constants import * SPECIAL_CHARS = ".\\[{()*+?^$|" REPEAT_CHARS = "*+?{" DIGITS = frozenset("0123456789") OCTDIGITS = frozenset("01234567") HEXDIGITS = frozenset("0123456789abcdefABCDEF") ASCIILETTERS = frozenset("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") WHITESPACE = frozenset(" \t\n\r\v\f") _REPEATCODES = frozenset({MIN_REPEAT, MAX_REPEAT, POSSESSIVE_REPEAT}) _UNITCODES = frozenset({ANY, RANGE, IN, LITERAL, NOT_LITERAL, CATEGORY}) ESCAPES = { r"\a": (LITERAL, ord("\a")), r"\b": (LITERAL, ord("\b")), r"\f": (LITERAL, ord("\f")), r"\n": (LITERAL, ord("\n")), r"\r": (LITERAL, ord("\r")), r"\t": (LITERAL, ord("\t")), r"\v": (LITERAL, ord("\v")), r"\\": (LITERAL, ord("\\")) } CATEGORIES = { r"\A": (AT, AT_BEGINNING_STRING), # start of string r"\b": (AT, AT_BOUNDARY), r"\B": (AT, AT_NON_BOUNDARY), r"\d": (IN, [(CATEGORY, CATEGORY_DIGIT)]), r"\D": (IN, [(CATEGORY, CATEGORY_NOT_DIGIT)]), r"\s": (IN, [(CATEGORY, CATEGORY_SPACE)]), r"\S": (IN, [(CATEGORY, CATEGORY_NOT_SPACE)]), r"\w": (IN, [(CATEGORY, CATEGORY_WORD)]), r"\W": (IN, [(CATEGORY, CATEGORY_NOT_WORD)]), r"\Z": (AT, AT_END_STRING), # end of string } FLAGS = { # standard flags "i": SRE_FLAG_IGNORECASE, "L": SRE_FLAG_LOCALE, "m": SRE_FLAG_MULTILINE, "s": SRE_FLAG_DOTALL, "x": SRE_FLAG_VERBOSE, # extensions "a": SRE_FLAG_ASCII, "t": SRE_FLAG_TEMPLATE, "u": SRE_FLAG_UNICODE, } TYPE_FLAGS = SRE_FLAG_ASCII | SRE_FLAG_LOCALE | SRE_FLAG_UNICODE GLOBAL_FLAGS = SRE_FLAG_DEBUG | SRE_FLAG_TEMPLATE # Maximal value returned by SubPattern.getwidth(). # Must be larger than MAXREPEAT, MAXCODE and sys.maxsize. MAXWIDTH = 1 << 64 class State: # keeps track of state for parsing def __init__(self): self.flags = 0 self.groupdict = {} self.groupwidths = [None] # group 0 self.lookbehindgroups = None self.grouprefpos = {} @property def groups(self): return len(self.groupwidths) def opengroup(self, name=None): gid = self.groups self.groupwidths.append(None) if self.groups > MAXGROUPS: raise error("too many groups") if name is not None: ogid = self.groupdict.get(name, None) if ogid is not None: raise error("redefinition of group name %r as group %d; " "was group %d" % (name, gid, ogid)) self.groupdict[name] = gid return gid def closegroup(self, gid, p): self.groupwidths[gid] = p.getwidth() def checkgroup(self, gid): return gid < self.groups and self.groupwidths[gid] is not None def checklookbehindgroup(self, gid, source): if self.lookbehindgroups is not None: if not self.checkgroup(gid): raise source.error('cannot refer to an open group') if gid >= self.lookbehindgroups: raise source.error('cannot refer to group defined in the same ' 'lookbehind subpattern') class SubPattern: # a subpattern, in intermediate form def __init__(self, state, data=None): self.state = state if data is None: data = [] self.data = data self.width = None def dump(self, level=0): seqtypes = (tuple, list) for op, av in self.data: print(level*" " + str(op), end='') if op is IN: # member sublanguage print() for op, a in av: print((level+1)*" " + str(op), a) elif op is BRANCH: print() for i, a in enumerate(av[1]): if i: print(level*" " + "OR") a.dump(level+1) elif op is GROUPREF_EXISTS: condgroup, item_yes, item_no = av print('', condgroup) item_yes.dump(level+1) if item_no: print(level*" " + "ELSE") item_no.dump(level+1) elif isinstance(av, SubPattern): print() av.dump(level+1) elif isinstance(av, seqtypes): nl = False for a in av: if isinstance(a, SubPattern): if not nl: print() a.dump(level+1) nl = True else: if not nl: print(' ', end='') print(a, end='') nl = False if not nl: print() else: print('', av) def __repr__(self): return repr(self.data) def __len__(self): return len(self.data) def __delitem__(self, index): del self.data[index] def __getitem__(self, index): if isinstance(index, slice): return SubPattern(self.state, self.data[index]) return self.data[index] def __setitem__(self, index, code): self.data[index] = code def insert(self, index, code): self.data.insert(index, code) def append(self, code): self.data.append(code) def getwidth(self): # determine the width (min, max) for this subpattern if self.width is not None: return self.width lo = hi = 0 for op, av in self.data: if op is BRANCH: i = MAXWIDTH j = 0 for av in av[1]: l, h = av.getwidth() i = min(i, l) j = max(j, h) lo = lo + i hi = hi + j elif op is ATOMIC_GROUP: i, j = av.getwidth() lo = lo + i hi = hi + j elif op is SUBPATTERN: i, j = av[-1].getwidth() lo = lo + i hi = hi + j elif op in _REPEATCODES: i, j = av[2].getwidth() lo = lo + i * av[0] if av[1] == MAXREPEAT and j: hi = MAXWIDTH else: hi = hi + j * av[1] elif op in _UNITCODES: lo = lo + 1 hi = hi + 1 elif op is GROUPREF: i, j = self.state.groupwidths[av] lo = lo + i hi = hi + j elif op is GROUPREF_EXISTS: i, j = av[1].getwidth() if av[2] is not None: l, h = av[2].getwidth() i = min(i, l) j = max(j, h) else: i = 0 lo = lo + i hi = hi + j elif op is SUCCESS: break self.width = min(lo, MAXWIDTH), min(hi, MAXWIDTH) return self.width class Tokenizer: def __init__(self, string): self.istext = isinstance(string, str) self.string = string if not self.istext: string = str(string, 'latin1') self.decoded_string = string self.index = 0 self.next = None self.__next() def __next(self): index = self.index try: char = self.decoded_string[index] except IndexError: self.next = None return if char == "\\": index += 1 try: char += self.decoded_string[index] except IndexError: raise error("bad escape (end of pattern)", self.string, len(self.string) - 1) from None self.index = index + 1 self.next = char def match(self, char): if char == self.next: self.__next() return True return False def get(self): this = self.next self.__next() return this def getwhile(self, n, charset): result = '' for _ in range(n): c = self.next if c not in charset: break result += c self.__next() return result def getuntil(self, terminator, name): result = '' while True: c = self.next self.__next() if c is None: if not result: raise self.error("missing " + name) raise self.error("missing %s, unterminated name" % terminator, len(result)) if c == terminator: if not result: raise self.error("missing " + name, 1) break result += c return result @property def pos(self): return self.index - len(self.next or '') def tell(self): return self.index - len(self.next or '') def seek(self, index): self.index = index self.__next() def error(self, msg, offset=0): if not self.istext: msg = msg.encode('ascii', 'backslashreplace').decode('ascii') return error(msg, self.string, self.tell() - offset) def checkgroupname(self, name, offset): if not (self.istext or name.isascii()): msg = "bad character in group name %a" % name raise self.error(msg, len(name) + offset) if not name.isidentifier(): msg = "bad character in group name %r" % name raise self.error(msg, len(name) + offset) def _class_escape(source, escape): # handle escape code inside character class code = ESCAPES.get(escape) if code: return code code = CATEGORIES.get(escape) if code and code[0] is IN: return code try: c = escape[1:2] if c == "x": # hexadecimal escape (exactly two digits) escape += source.getwhile(2, HEXDIGITS) if len(escape) != 4: raise source.error("incomplete escape %s" % escape, len(escape)) return LITERAL, int(escape[2:], 16) elif c == "u" and source.istext: # unicode escape (exactly four digits) escape += source.getwhile(4, HEXDIGITS) if len(escape) != 6: raise source.error("incomplete escape %s" % escape, len(escape)) return LITERAL, int(escape[2:], 16) elif c == "U" and source.istext: # unicode escape (exactly eight digits) escape += source.getwhile(8, HEXDIGITS) if len(escape) != 10: raise source.error("incomplete escape %s" % escape, len(escape)) c = int(escape[2:], 16) chr(c) # raise ValueError for invalid code return LITERAL, c elif c == "N" and source.istext: import unicodedata # named unicode escape e.g. \N{EM DASH} if not source.match('{'): raise source.error("missing {") charname = source.getuntil('}', 'character name') try: c = ord(unicodedata.lookup(charname)) except (KeyError, TypeError): raise source.error("undefined character name %r" % charname, len(charname) + len(r'\N{}')) from None return LITERAL, c elif c in OCTDIGITS: # octal escape (up to three digits) escape += source.getwhile(2, OCTDIGITS) c = int(escape[1:], 8) if c > 0o377: raise source.error('octal escape value %s outside of ' 'range 0-0o377' % escape, len(escape)) return LITERAL, c elif c in DIGITS: raise ValueError if len(escape) == 2: if c in ASCIILETTERS: raise source.error('bad escape %s' % escape, len(escape)) return LITERAL, ord(escape[1]) except ValueError: pass raise source.error("bad escape %s" % escape, len(escape)) def _escape(source, escape, state): # handle escape code in expression code = CATEGORIES.get(escape) if code: return code code = ESCAPES.get(escape) if code: return code try: c = escape[1:2] if c == "x": # hexadecimal escape escape += source.getwhile(2, HEXDIGITS) if len(escape) != 4: raise source.error("incomplete escape %s" % escape, len(escape)) return LITERAL, int(escape[2:], 16) elif c == "u" and source.istext: # unicode escape (exactly four digits) escape += source.getwhile(4, HEXDIGITS) if len(escape) != 6: raise source.error("incomplete escape %s" % escape, len(escape)) return LITERAL, int(escape[2:], 16) elif c == "U" and source.istext: # unicode escape (exactly eight digits) escape += source.getwhile(8, HEXDIGITS) if len(escape) != 10: raise source.error("incomplete escape %s" % escape, len(escape)) c = int(escape[2:], 16) chr(c) # raise ValueError for invalid code return LITERAL, c elif c == "N" and source.istext: import unicodedata # named unicode escape e.g. \N{EM DASH} if not source.match('{'): raise source.error("missing {") charname = source.getuntil('}', 'character name') try: c = ord(unicodedata.lookup(charname)) except (KeyError, TypeError): raise source.error("undefined character name %r" % charname, len(charname) + len(r'\N{}')) from None return LITERAL, c elif c == "0": # octal escape escape += source.getwhile(2, OCTDIGITS) return LITERAL, int(escape[1:], 8) elif c in DIGITS: # octal escape *or* decimal group reference (sigh) if source.next in DIGITS: escape += source.get() if (escape[1] in OCTDIGITS and escape[2] in OCTDIGITS and source.next in OCTDIGITS): # got three octal digits; this is an octal escape escape += source.get() c = int(escape[1:], 8) if c > 0o377: raise source.error('octal escape value %s outside of ' 'range 0-0o377' % escape, len(escape)) return LITERAL, c # not an octal escape, so this is a group reference group = int(escape[1:]) if group < state.groups: if not state.checkgroup(group): raise source.error("cannot refer to an open group", len(escape)) state.checklookbehindgroup(group, source) return GROUPREF, group raise source.error("invalid group reference %d" % group, len(escape) - 1) if len(escape) == 2: if c in ASCIILETTERS: raise source.error("bad escape %s" % escape, len(escape)) return LITERAL, ord(escape[1]) except ValueError: pass raise source.error("bad escape %s" % escape, len(escape)) def _uniq(items): return list(dict.fromkeys(items)) def _parse_sub(source, state, verbose, nested): # parse an alternation: a|b|c items = [] itemsappend = items.append sourcematch = source.match start = source.tell() while True: itemsappend(_parse(source, state, verbose, nested + 1, not nested and not items)) if not sourcematch("|"): break if not nested: verbose = state.flags & SRE_FLAG_VERBOSE if len(items) == 1: return items[0] subpattern = SubPattern(state) # check if all items share a common prefix while True: prefix = None for item in items: if not item: break if prefix is None: prefix = item[0] elif item[0] != prefix: break else: # all subitems start with a common "prefix". # move it out of the branch for item in items: del item[0] subpattern.append(prefix) continue # check next one break # check if the branch can be replaced by a character set set = [] for item in items: if len(item) != 1: break op, av = item[0] if op is LITERAL: set.append((op, av)) elif op is IN and av[0][0] is not NEGATE: set.extend(av) else: break else: # we can store this as a character set instead of a # branch (the compiler may optimize this even more) subpattern.append((IN, _uniq(set))) return subpattern subpattern.append((BRANCH, (None, items))) return subpattern def _parse(source, state, verbose, nested, first=False): # parse a simple pattern subpattern = SubPattern(state) # precompute constants into local variables subpatternappend = subpattern.append sourceget = source.get sourcematch = source.match _len = len _ord = ord while True: this = source.next if this is None: break # end of pattern if this in "|)": break # end of subpattern sourceget() if verbose: # skip whitespace and comments if this in WHITESPACE: continue if this == "#": while True: this = sourceget() if this is None or this == "\n": break continue if this[0] == "\\": code = _escape(source, this, state) subpatternappend(code) elif this not in SPECIAL_CHARS: subpatternappend((LITERAL, _ord(this))) elif this == "[": here = source.tell() - 1 # character set set = [] setappend = set.append ## if sourcematch(":"): ## pass # handle character classes if source.next == '[': import warnings warnings.warn( 'Possible nested set at position %d' % source.tell(), FutureWarning, stacklevel=nested + 6 ) negate = sourcematch("^") # check remaining characters while True: this = sourceget() if this is None: raise source.error("unterminated character set", source.tell() - here) if this == "]" and set: break elif this[0] == "\\": code1 = _class_escape(source, this) else: if set and this in '-&~|' and source.next == this: import warnings warnings.warn( 'Possible set %s at position %d' % ( 'difference' if this == '-' else 'intersection' if this == '&' else 'symmetric difference' if this == '~' else 'union', source.tell() - 1), FutureWarning, stacklevel=nested + 6 ) code1 = LITERAL, _ord(this) if sourcematch("-"): # potential range that = sourceget() if that is None: raise source.error("unterminated character set", source.tell() - here) if that == "]": if code1[0] is IN: code1 = code1[1][0] setappend(code1) setappend((LITERAL, _ord("-"))) break if that[0] == "\\": code2 = _class_escape(source, that) else: if that == '-': import warnings warnings.warn( 'Possible set difference at position %d' % ( source.tell() - 2), FutureWarning, stacklevel=nested + 6 ) code2 = LITERAL, _ord(that) if code1[0] != LITERAL or code2[0] != LITERAL: msg = "bad character range %s-%s" % (this, that) raise source.error(msg, len(this) + 1 + len(that)) lo = code1[1] hi = code2[1] if hi < lo: msg = "bad character range %s-%s" % (this, that) raise source.error(msg, len(this) + 1 + len(that)) setappend((RANGE, (lo, hi))) else: if code1[0] is IN: code1 = code1[1][0] setappend(code1) set = _uniq(set) # XXX: should move set optimization to compiler! if _len(set) == 1 and set[0][0] is LITERAL: # optimization if negate: subpatternappend((NOT_LITERAL, set[0][1])) else: subpatternappend(set[0]) else: if negate: set.insert(0, (NEGATE, None)) # charmap optimization can't be added here because # global flags still are not known subpatternappend((IN, set)) elif this in REPEAT_CHARS: # repeat previous item here = source.tell() if this == "?": min, max = 0, 1 elif this == "*": min, max = 0, MAXREPEAT elif this == "+": min, max = 1, MAXREPEAT elif this == "{": if source.next == "}": subpatternappend((LITERAL, _ord(this))) continue min, max = 0, MAXREPEAT lo = hi = "" while source.next in DIGITS: lo += sourceget() if sourcematch(","): while source.next in DIGITS: hi += sourceget() else: hi = lo if not sourcematch("}"): subpatternappend((LITERAL, _ord(this))) source.seek(here) continue if lo: min = int(lo) if min >= MAXREPEAT: raise OverflowError("the repetition number is too large") if hi: max = int(hi) if max >= MAXREPEAT: raise OverflowError("the repetition number is too large") if max < min: raise source.error("min repeat greater than max repeat", source.tell() - here) else: raise AssertionError("unsupported quantifier %r" % (char,)) # figure out which item to repeat if subpattern: item = subpattern[-1:] else: item = None if not item or item[0][0] is AT: raise source.error("nothing to repeat", source.tell() - here + len(this)) if item[0][0] in _REPEATCODES: raise source.error("multiple repeat", source.tell() - here + len(this)) if item[0][0] is SUBPATTERN: group, add_flags, del_flags, p = item[0][1] if group is None and not add_flags and not del_flags: item = p if sourcematch("?"): # Non-Greedy Match subpattern[-1] = (MIN_REPEAT, (min, max, item)) elif sourcematch("+"): # Possessive Match (Always Greedy) subpattern[-1] = (POSSESSIVE_REPEAT, (min, max, item)) else: # Greedy Match subpattern[-1] = (MAX_REPEAT, (min, max, item)) elif this == ".": subpatternappend((ANY, None)) elif this == "(": start = source.tell() - 1 capture = True atomic = False name = None add_flags = 0 del_flags = 0 if sourcematch("?"): # options char = sourceget() if char is None: raise source.error("unexpected end of pattern") if char == "P": # python extensions if sourcematch("<"): # named group: skip forward to end of name name = source.getuntil(">", "group name") source.checkgroupname(name, 1) elif sourcematch("="): # named backreference name = source.getuntil(")", "group name") source.checkgroupname(name, 1) gid = state.groupdict.get(name) if gid is None: msg = "unknown group name %r" % name raise source.error(msg, len(name) + 1) if not state.checkgroup(gid): raise source.error("cannot refer to an open group", len(name) + 1) state.checklookbehindgroup(gid, source) subpatternappend((GROUPREF, gid)) continue else: char = sourceget() if char is None: raise source.error("unexpected end of pattern") raise source.error("unknown extension ?P" + char, len(char) + 2) elif char == ":": # non-capturing group capture = False elif char == "#": # comment while True: if source.next is None: raise source.error("missing ), unterminated comment", source.tell() - start) if sourceget() == ")": break continue elif char in "=!<": # lookahead assertions dir = 1 if char == "<": char = sourceget() if char is None: raise source.error("unexpected end of pattern") if char not in "=!": raise source.error("unknown extension ?<" + char, len(char) + 2) dir = -1 # lookbehind lookbehindgroups = state.lookbehindgroups if lookbehindgroups is None: state.lookbehindgroups = state.groups p = _parse_sub(source, state, verbose, nested + 1) if dir < 0: if lookbehindgroups is None: state.lookbehindgroups = None if not sourcematch(")"): raise source.error("missing ), unterminated subpattern", source.tell() - start) if char == "=": subpatternappend((ASSERT, (dir, p))) else: subpatternappend((ASSERT_NOT, (dir, p))) continue elif char == "(": # conditional backreference group condname = source.getuntil(")", "group name") if not (condname.isdecimal() and condname.isascii()): source.checkgroupname(condname, 1) condgroup = state.groupdict.get(condname) if condgroup is None: msg = "unknown group name %r" % condname raise source.error(msg, len(condname) + 1) else: condgroup = int(condname) if not condgroup: raise source.error("bad group number", len(condname) + 1) if condgroup >= MAXGROUPS: msg = "invalid group reference %d" % condgroup raise source.error(msg, len(condname) + 1) if condgroup not in state.grouprefpos: state.grouprefpos[condgroup] = ( source.tell() - len(condname) - 1 ) if not (condname.isdecimal() and condname.isascii()): import warnings warnings.warn( "bad character in group name %s at position %d" % (repr(condname) if source.istext else ascii(condname), source.tell() - len(condname) - 1), DeprecationWarning, stacklevel=nested + 6 ) state.checklookbehindgroup(condgroup, source) item_yes = _parse(source, state, verbose, nested + 1) if source.match("|"): item_no = _parse(source, state, verbose, nested + 1) if source.next == "|": raise source.error("conditional backref with more than two branches") else: item_no = None if not source.match(")"): raise source.error("missing ), unterminated subpattern", source.tell() - start) subpatternappend((GROUPREF_EXISTS, (condgroup, item_yes, item_no))) continue elif char == ">": # non-capturing, atomic group capture = False atomic = True elif char in FLAGS or char == "-": # flags flags = _parse_flags(source, state, char) if flags is None: # global flags if not first or subpattern: raise source.error('global flags not at the start ' 'of the expression', source.tell() - start) verbose = state.flags & SRE_FLAG_VERBOSE continue add_flags, del_flags = flags capture = False else: raise source.error("unknown extension ?" + char, len(char) + 1) # parse group contents if capture: try: group = state.opengroup(name) except error as err: raise source.error(err.msg, len(name) + 1) from None else: group = None sub_verbose = ((verbose or (add_flags & SRE_FLAG_VERBOSE)) and not (del_flags & SRE_FLAG_VERBOSE)) p = _parse_sub(source, state, sub_verbose, nested + 1) if not source.match(")"): raise source.error("missing ), unterminated subpattern", source.tell() - start) if group is not None: state.closegroup(group, p) if atomic: assert group is None subpatternappend((ATOMIC_GROUP, p)) else: subpatternappend((SUBPATTERN, (group, add_flags, del_flags, p))) elif this == "^": subpatternappend((AT, AT_BEGINNING)) elif this == "$": subpatternappend((AT, AT_END)) else: raise AssertionError("unsupported special character %r" % (char,)) # unpack non-capturing groups for i in range(len(subpattern))[::-1]: op, av = subpattern[i] if op is SUBPATTERN: group, add_flags, del_flags, p = av if group is None and not add_flags and not del_flags: subpattern[i: i+1] = p return subpattern def _parse_flags(source, state, char): sourceget = source.get add_flags = 0 del_flags = 0 if char != "-": while True: flag = FLAGS[char] if source.istext: if char == 'L': msg = "bad inline flags: cannot use 'L' flag with a str pattern" raise source.error(msg) else: if char == 'u': msg = "bad inline flags: cannot use 'u' flag with a bytes pattern" raise source.error(msg) add_flags |= flag if (flag & TYPE_FLAGS) and (add_flags & TYPE_FLAGS) != flag: msg = "bad inline flags: flags 'a', 'u' and 'L' are incompatible" raise source.error(msg) char = sourceget() if char is None: raise source.error("missing -, : or )") if char in ")-:": break if char not in FLAGS: msg = "unknown flag" if char.isalpha() else "missing -, : or )" raise source.error(msg, len(char)) if char == ")": state.flags |= add_flags return None if add_flags & GLOBAL_FLAGS: raise source.error("bad inline flags: cannot turn on global flag", 1) if char == "-": char = sourceget() if char is None: raise source.error("missing flag") if char not in FLAGS: msg = "unknown flag" if char.isalpha() else "missing flag" raise source.error(msg, len(char)) while True: flag = FLAGS[char] if flag & TYPE_FLAGS: msg = "bad inline flags: cannot turn off flags 'a', 'u' and 'L'" raise source.error(msg) del_flags |= flag char = sourceget() if char is None: raise source.error("missing :") if char == ":": break if char not in FLAGS: msg = "unknown flag" if char.isalpha() else "missing :" raise source.error(msg, len(char)) assert char == ":" if del_flags & GLOBAL_FLAGS: raise source.error("bad inline flags: cannot turn off global flag", 1) if add_flags & del_flags: raise source.error("bad inline flags: flag turned on and off", 1) return add_flags, del_flags def fix_flags(src, flags): # Check and fix flags according to the type of pattern (str or bytes) if isinstance(src, str): if flags & SRE_FLAG_LOCALE: raise ValueError("cannot use LOCALE flag with a str pattern") if not flags & SRE_FLAG_ASCII: flags |= SRE_FLAG_UNICODE elif flags & SRE_FLAG_UNICODE: raise ValueError("ASCII and UNICODE flags are incompatible") else: if flags & SRE_FLAG_UNICODE: raise ValueError("cannot use UNICODE flag with a bytes pattern") if flags & SRE_FLAG_LOCALE and flags & SRE_FLAG_ASCII: raise ValueError("ASCII and LOCALE flags are incompatible") return flags def parse(str, flags=0, state=None): # parse 're' pattern into list of (opcode, argument) tuples source = Tokenizer(str) if state is None: state = State() state.flags = flags state.str = str p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0) p.state.flags = fix_flags(str, p.state.flags) if source.next is not None: assert source.next == ")" raise source.error("unbalanced parenthesis") for g in p.state.grouprefpos: if g >= p.state.groups: msg = "invalid group reference %d" % g raise error(msg, str, p.state.grouprefpos[g]) if flags & SRE_FLAG_DEBUG: p.dump() return p def parse_template(source, pattern): # parse 're' replacement string into list of literals and # group references s = Tokenizer(source) sget = s.get result = [] literal = [] lappend = literal.append def addliteral(): if s.istext: result.append(''.join(literal)) else: # The tokenizer implicitly decodes bytes objects as latin-1, we must # therefore re-encode the final representation. result.append(''.join(literal).encode('latin-1')) del literal[:] def addgroup(index, pos): if index > pattern.groups: raise s.error("invalid group reference %d" % index, pos) addliteral() result.append(index) groupindex = pattern.groupindex while True: this = sget() if this is None: break # end of replacement string if this[0] == "\\": # group c = this[1] if c == "g": if not s.match("<"): raise s.error("missing <") name = s.getuntil(">", "group name") if not (name.isdecimal() and name.isascii()): s.checkgroupname(name, 1) try: index = groupindex[name] except KeyError: raise IndexError("unknown group name %r" % name) from None else: index = int(name) if index >= MAXGROUPS: raise s.error("invalid group reference %d" % index, len(name) + 1) if not (name.isdecimal() and name.isascii()): import warnings warnings.warn( "bad character in group name %s at position %d" % (repr(name) if s.istext else ascii(name), s.tell() - len(name) - 1), DeprecationWarning, stacklevel=5 ) addgroup(index, len(name) + 1) elif c == "0": if s.next in OCTDIGITS: this += sget() if s.next in OCTDIGITS: this += sget() lappend(chr(int(this[1:], 8) & 0xff)) elif c in DIGITS: isoctal = False if s.next in DIGITS: this += sget() if (c in OCTDIGITS and this[2] in OCTDIGITS and s.next in OCTDIGITS): this += sget() isoctal = True c = int(this[1:], 8) if c > 0o377: raise s.error('octal escape value %s outside of ' 'range 0-0o377' % this, len(this)) lappend(chr(c)) if not isoctal: addgroup(int(this[1:]), len(this) - 1) else: try: this = chr(ESCAPES[this][1]) except KeyError: if c in ASCIILETTERS: raise s.error('bad escape %s' % this, len(this)) from None lappend(this) else: lappend(this) addliteral() return result __pycache__/__init__.cpython-312.pyc000064400000043014152462750210013224 0ustar00 Th?dZddlZddlmZmZddlZddlZgdZdZejejejejGdd Z ejZd d Zd d Zd d Zd!d Zd!dZd!dZd dZd dZd dZdZd dZdDcic]}|de|zc}ZdZeej.ddZeej.ddjdZiZ iZ!dZ"dZ#e#e"ksJdZ$ejJe"dZ&ddl'Z'dZ(e'jRee(e$GddZ*ycc}w)"aSupport for regular expressions (RE). This module provides regular expression matching operations similar to those found in Perl. It supports both 8-bit and Unicode strings; both the pattern and the strings being processed can contain null bytes and characters outside the US ASCII range. Regular expressions can contain both special and ordinary characters. Most ordinary characters, like "A", "a", or "0", are the simplest regular expressions; they simply match themselves. You can concatenate ordinary characters, so last matches the string 'last'. The special characters are: "." Matches any character except a newline. "^" Matches the start of the string. "$" Matches the end of the string or just before the newline at the end of the string. "*" Matches 0 or more (greedy) repetitions of the preceding RE. Greedy means that it will match as many repetitions as possible. "+" Matches 1 or more (greedy) repetitions of the preceding RE. "?" Matches 0 or 1 (greedy) of the preceding RE. *?,+?,?? Non-greedy versions of the previous three special characters. {m,n} Matches from m to n repetitions of the preceding RE. {m,n}? Non-greedy version of the above. "\\" Either escapes special characters or signals a special sequence. [] Indicates a set of characters. A "^" as the first character indicates a complementing set. "|" A|B, creates an RE that will match either A or B. (...) Matches the RE inside the parentheses. The contents can be retrieved or matched later in the string. (?aiLmsux) The letters set the corresponding flags defined below. (?:...) Non-grouping version of regular parentheses. (?P...) The substring matched by the group is accessible by name. (?P=name) Matches the text matched earlier by the group named name. (?#...) A comment; ignored. (?=...) Matches if ... matches next, but doesn't consume the string. (?!...) Matches if ... doesn't match next. (?<=...) Matches if preceded by ... (must be fixed length). (?rr?s r<rrs GU # - -f 55r;c8t||j|S)ztScan through string looking for a match to the pattern, returning a Match object, or None if no match was found.)r>rr?s r<rrs GU # * *6 22r;c<t||j|||S)aZReturn the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or a callable; if a string, backslash escapes in it are processed. If it is a callable, it's passed the Match object and must return a replacement string to be used.)r>r r@replrAcountrBs r<r r s  GU # ' 'fe <r rFs r<r r s  GU # ( (vu ==r;c:t||j||S)aSplit the source string by the occurrences of the pattern, returning a list containing the resulting substrings. If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list. If maxsplit is nonzero, at most maxsplit splits occur, and the remainder of the string is returned as the final element of the list.)r>r )r@rAmaxsplitrBs r<r r s GU # ) )&( ;;r;c8t||j|S)aReturn a list of all non-overlapping matches in the string. If one or more capturing groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. Empty matches are included in the result.)r>r r?s r<r r s GU # + +F 33r;c8t||j|S)zReturn an iterator over all non-overlapping matches in the string. For each match, the iterator returns a Match object. Empty matches are included in the result.)r>r r?s r<r r s GU # , ,V 44r;ct||S)zACompile a regular expression pattern, returning a Pattern object.)r>)r@rBs r<rrs GU ##r;c|tjtjtj y)z#Clear the regular expression cachesN)_cacheclear_cache2_compile_template cache_clearr:r;r<rrs  LLN MMO!!#r;cddl}|jdt|j5|j dtt ||t zcdddS#1swYyxYw)zBCompile a template pattern, returning a Pattern object, deprecatedrNzThe re.template() function is deprecated as it is an undocumented function without an obvious purpose. Use re.compile() instead.ignore)warningswarnDeprecationWarningcatch_warnings simplefilterr>r3)r@rBrWs r<rrsT MM.% &  "h(:;q) # " "s )AA's()[]{}?*+-|^$\.&~# \ct|tr|jtSt|d}|jtj dS)z0 Escape special characters in a string. latin1) isinstancestr translate_special_chars_mapencode)r@s r<rrsI'3  !344gx(  !34;;HEEr;ic:t|tr |j} tt |||fS#t $rYnwxYwt |||f}t j|d}|t|tr|r td|Stj|s td|tzrddl}|jdt tj"||}|t$zr|St't t(k\r9 t t+t-t =n#t.t0t f$rYnwxYw|t |<t'tt2k\r9 tt+t-t=n#t.t0t f$rYnwxYw|t|<|S)Nz5cannot process flags argument with a compiled patternz1first argument must be string or compiled patternrzoThe re.TEMPLATE/re.T flag is deprecated as it is an undocumented flag without an obvious purpose. Don't use it.)r_r$valuerRtypeKeyErrorrPpopr ValueErrorrisstring TypeErrorr3rWrXrYrr5len _MAXCACHEnextiter StopIteration RuntimeError _MAXCACHE2)r@rBkeyprWs r<r>r>sv%#  tG}gu455     ='5 )C 3Ay gw ' KMMN!!'*OP P 19  MM$'  (   gu - 5=H v;) #  4V -.!<:  F3K 7|z! T']+,|X6   GCL Hs03 ??D D76D7E88FFcVtj|tj||SN)_srerrparse_template)r@rGs r<rSrSKs" =='"8"8w"G HHr;c>t|j|jffSrx)r>r@rB)rvs r<_pickler|Ts aii) ))r;ceZdZddZdZy)Scannercddlm}m}t|tr |j }||_g}tj}||_ |D]j\}}|j} |jtj||| ddtj||ffg|j| |dltj||d|ffg}tj ||_y)Nr)BRANCH SUBPATTERNr) _constantsrrr_r$rglexiconrStaterB opengroupappend SubPatternparse closegrouprrscanner) selfrrBrrrvsphraseactiongids r<__init__zScanner.__init__]s2 eY 'KKE  MMO%NFF++-C HHW''c1avu)EFG,  LLae $ &   qFT1I#6"7 8 ((+ r;cfg}|j}|jj|j}d} |}|snk|j}||k(rnU|j|j dz d}t |r||_|||j}||||}u|||dfS)Nrr)rrrendr lastindexcallablegroup) rrAresultrrimjrs r<scanz Scanner.scanns $$V,22 AAAv\\!++a-03F aggi0!vAvabz!!r;Nr)r'r(r)rrr:r;r<r~r~\s ,""r;r~r)rr)+__doc__enumrdrr functoolsry__all__ __version__ global_enum _simple_enumIntFlagKEEPr$rrrrr r r r r rrrchrrbrrhrrrPrRrortr> lru_cacherScopyregr|pickler~)rs0r<rs"iV    4<<$))4  5   2 6 3 = ><45$$ *"1RR0Q1aA&0QRF  y  Q' ( Y  r1 % + +B /0     I1 fYI I *w* %"%"SsE__pycache__/__init__.cpython-312.opt-2.pyc000064400000022634152462750210014171 0ustar00 Th? ddlZddlmZmZddlZddlZgdZdZejejejejGddZ ejZ dd Zdd Zdd Zd d Zd d Zd dZddZddZddZdZddZdDcic]}|de|zc}ZdZeej,ddZeej,ddjdZiZiZ dZ!dZ"dZ#ejHe!dZ%ddl&Z&dZ'e&jPee'e#GddZ)ycc}w)!N) _compiler_parser)match fullmatchsearchsubsubnsplitfindallfinditercompilepurgetemplateescapeerrorPatternMatchAILMSXUASCII IGNORECASELOCALE MULTILINEDOTALLVERBOSEUNICODENOFLAG RegexFlagz2.2.1)boundaryc$eZdZdZej xZZejxZ Z ejxZ Z ejxZZej"xZZej(xZZej.xZZej4xZZej:Zej@Z e!Z"y)r$rN)#__name__ __module__ __qualname__r#rSRE_FLAG_ASCIIrrSRE_FLAG_IGNORECASErrSRE_FLAG_LOCALErrSRE_FLAG_UNICODEr"rSRE_FLAG_MULTILINErrSRE_FLAG_DOTALLr rSRE_FLAG_VERBOSEr!rSRE_FLAG_TEMPLATETEMPLATETSRE_FLAG_DEBUGDEBUGobject__str__hex_numeric_repr_$/usr/lib64/python3.12/re/__init__.pyr$r$sF(((EA222J***FQ,,,Ga000I***FQ,,,Ga...Hq  $ $EnnGNr;r$c: t||j|SN)_compilerpatternstringflagss r<rrs6 GU # ) )& 11r;c: t||j|Sr>)r?rr@s r<rrs6 GU # - -f 55r;c: t||j|Sr>)r?rr@s r<rrs6 GU # * *6 22r;c> t||j|||Sr>)r?r rAreplrBcountrCs r<r r s%( GU # ' 'fe < t||j|||Sr>)r?r rGs r<r r s%/ GU # ( (vu ==r;c< t||j||Sr>)r?r )rArBmaxsplitrCs r<r r s# GU # ) )&( ;;r;c: t||j|Sr>)r?r r@s r<r r s!1 GU # + +F 33r;c: t||j|Sr>)r?r r@s r<r r s!1 GU # , ,V 44r;c t||Sr>)r?)rArCs r<rrsG GU ##r;c~ tjtjtj yr>)_cacheclear_cache2_compile_template cache_clearr:r;r<rrs#) LLN MMO!!#r;c ddl}|jdt|j5|j dtt ||t zcdddS#1swYyxYw)NrzThe re.template() function is deprecated as it is an undocumented function without an obvious purpose. Use re.compile() instead.ignore)warningswarnDeprecationWarningcatch_warnings simplefilterr?r3)rArCrXs r<rrsWH MM.% &  "h(:;q) # " "s )AA(s()[]{}?*+-|^$\.&~# \c t|tr|jtSt|d}|jtj dS)Nlatin1) isinstancestr translate_special_chars_mapencode)rAs r<rrsN'3  !344gx(  !34;;HEEr;ic:t|tr |j} tt |||fS#t $rYnwxYwt |||f}t j|d}|t|tr|r td|Stj|s td|tzrddl}|jdt tj"||}|t$zr|St't t(k\r9 t t+t-t =n#t.t0t f$rYnwxYw|t |<t'tt2k\r9 tt+t-t=n#t.t0t f$rYnwxYw|t|<|S)Nz5cannot process flags argument with a compiled patternz1first argument must be string or compiled patternrzoThe re.TEMPLATE/re.T flag is deprecated as it is an undocumented flag without an obvious purpose. Don't use it.)r`r$valuerStypeKeyErrorrQpopr ValueErrorrisstring TypeErrorr3rXrYrZrr5len _MAXCACHEnextiter StopIteration RuntimeError _MAXCACHE2)rArCkeyprXs r<r?r?sv%#  tG}gu455     ='5 )C 3Ay gw ' KMMN!!'*OP P 19  MM$'  (   gu - 5=H v;) #  4V -.!<:  F3K 7|z! T']+,|X6   GCL Hs03 ??D D76D7E88FFcVtj|tj||Sr>)_srerrparse_template)rArHs r<rTrTKs" =='"8"8w"G HHr;c>t|j|jffSr>)r?rArC)rws r<_pickler|Ts aii) ))r;ceZdZddZdZy)Scannercddlm}m}t|tr |j }||_g}tj}||_ |D]j\}}|j} |jtj||| ddtj||ffg|j| |dltj||d|ffg}tj ||_y)Nr)BRANCH SUBPATTERNr) _constantsrrr`r$rhlexiconrStaterC opengroupappend SubPatternparse closegrouprrscanner) selfrrCrrrwsphraseactiongids r<__init__zScanner.__init__]s2 eY 'KKE  MMO%NFF++-C HHW''c1avu)EFG,  LLae $ &   qFT1I#6"7 8 ((+ r;cfg}|j}|jj|j}d} |}|snk|j}||k(rnU|j|j dz d}t |r||_|||j}||||}u|||dfS)Nrr)rrrendr lastindexcallablegroup) rrBresultrrimjrs r<scanz Scanner.scanns $$V,22 AAAv\\!++a-03F aggi0!vAvabz!!r;Nr)r'r(r)rrr:r;r<r~r~\s ,""r;r~r)rr)*enumrerr functoolsry__all__ __version__ global_enum _simple_enumIntFlagKEEPr$rrrrr r r r r rrrchrrcrrirrrQrSrprur? lru_cacherTcopyregr|pickler~)rs0r<rs"iV    4<<$))4  5   2 6 3 = ><45$$ *"1RR0Q1aA&0QRF  y  Q' ( Y  r1 % + +B /0     1 fYI I *w* %"%"SsD>__pycache__/_constants.cpython-312.opt-2.pyc000064400000011430152462750210014575 0ustar00 Th* dZddlmZmZGddeZGddeZeedZdZed Z e d d =ed d dddddddddd Z eddddddddd d!d"d#d$d%d&d'd(d)Z e e eeiZe eeeiZe eeeiZeeeeiZeeeeiZ ee!ee"iZ#e$e$e%e%e&e&e'e'e(e)e*e+e,e,e-e-iZ.e$e/e%e0e&e1e'e2e(e3e*e4e,e5e-e6iZ7d*Z8d+Z9d,Z:d-Z;d.Zd1Z?d2Z@d*ZAd+ZBd,ZCy )3i_4) MAXREPEAT MAXGROUPSc&eZdZ dZdfd ZxZS)errorrecX||_||_||_|u|sd||fz}t|trd}nd}|j |d|dz|_||j|d|z |_||vr+d||j |jfz}ndx|_|_t|)|y)Nz%s at position %d  rz%s (line %d, column %d)) msgpatternpos isinstancestrcountlinenorfindcolnosuper__init__)selfr r rnewline __class__s &/usr/lib64/python3.12/re/_constants.pyrzerror.__init__%s   3?%c 2C'3'!--C81tt| ||}||_|SN)rr"__new__name)clsvaluer&rrs rr%z_NamedIntConstant.__new__9s#&4S%@  rc|jSr$)r&)rs r__repr__z_NamedIntConstant.__repr__>s yyrN)rrrr%r* __reduce__rr s@rr"r"8s Jrr"rct|Dcgc]\}}t||}}}tj|Dcic]}|j|c}|Scc}}wcc}wr$) enumerater"globalsupdater&)namesir&itemsitems r _makecodesr4Es^7@7G H7GGAt q$ '7GE H I%8%$diio%89 L I8s AA")-FAILURESUCCESSANYANY_ALLASSERT ASSERT_NOTATBRANCHCATEGORYCHARSET BIGCHARSETGROUPREFGROUPREF_EXISTSININFOJUMPLITERALMARK MAX_UNTIL MIN_UNTIL NOT_LITERALNEGATERANGEREPEAT REPEAT_ONE SUBPATTERNMIN_REPEAT_ONE ATOMIC_GROUPPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONEGROUPREF_IGNORE IN_IGNORELITERAL_IGNORENOT_LITERAL_IGNOREGROUPREF_LOC_IGNORE IN_LOC_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREGROUPREF_UNI_IGNORE IN_UNI_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORERANGE_UNI_IGNORE MIN_REPEAT MAX_REPEATN AT_BEGINNINGAT_BEGINNING_LINEAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYAT_END AT_END_LINE AT_END_STRINGAT_LOC_BOUNDARYAT_LOC_NON_BOUNDARYAT_UNI_BOUNDARYAT_UNI_NON_BOUNDARYCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORDCATEGORY_LINEBREAKCATEGORY_NOT_LINEBREAKCATEGORY_LOC_WORDCATEGORY_LOC_NOT_WORDCATEGORY_UNI_DIGITCATEGORY_UNI_NOT_DIGITCATEGORY_UNI_SPACECATEGORY_UNI_NOT_SPACECATEGORY_UNI_WORDCATEGORY_UNI_NOT_WORDCATEGORY_UNI_LINEBREAKCATEGORY_UNI_NOT_LINEBREAKr  @)DMAGIC_srerr Exceptionrintr"r4OPCODESATCODESCHCODESrErUrIrV OP_IGNORErYrZOP_LOCALE_IGNOREr]r^OP_UNICODE_IGNORErcrdrhri AT_MULTILINErfrkrgrl AT_LOCALErmrn AT_UNICODErorprqrrrsrwrtrxrurv CH_LOCALEryrzr{r|r}r~rr CH_UNICODESRE_FLAG_TEMPLATESRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLSRE_FLAG_UNICODESRE_FLAG_VERBOSESRE_FLAG_DEBUGSRE_FLAG_ASCIISRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrrrs& % IB   i 5  0 b BCL ')>$ m_,,  **(20220: " ^#   '  ' # K (  ( N*N*$,*2  &.&.$,.6  r__pycache__/_parser.cpython-312.pyc000064400000121735152462750210013127 0ustar00 Th BdZddldZdZedZedZedZedZed Z ee e e hZ eeeeeeehZeed feed feed feed feedfeedfeedfeedfdZeefeefeefeeefgfeeefgfeeefgfeeefgfeeefgfeee fgfee!fd Z"e#e$e%e&e'e(e)e*dZ+e(e$ze*zZ,e-e)zZ.dZ/GddZ0GddZ1GddZ2dZ3dZ4dZ5dZ6d&d Z7d!Z8d"Z9d'd$Z:d%Z;y#)(zInternal support module for sre)*z .\[{()*+?^$|z*+?{ 0123456789012345670123456789abcdefABCDEF4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz      \)z\a\bz\fz\nz\rz\tz\vz\\) z\Arz\Bz\dz\Dz\sz\Sz\wz\Wz\Z)iLmsxatulc<eZdZdZedZddZdZdZdZ y) StatecLd|_i|_dg|_d|_i|_y)N)flags groupdict groupwidthslookbehindgroups grouprefposselfs #/usr/lib64/python3.12/re/_parser.py__init__zState.__init__Ms*  6 $c,t|jSN)lenrr"s r$groupsz State.groupsSs4##$$r&Nc|j}|jjd|jtkDr t d|>|j j |d}|t d|||fz||j |<|S)Nztoo many groupsz7redefinition of group name %r as group %d; was group %d)r*rappend MAXGROUPSerrorrget)r#namegidogids r$ opengroupzState.opengroupVskk % ;; ")* *  >>%%dD1D+.2C$-?@AA#&DNN4  r&c>|j|j|<yr()getwidthr)r#r1ps r$ closegroupzState.closegroupbs ! r&cF||jkxr|j|duSr()r*r)r#r1s r$ checkgroupzState.checkgroupds&T[[ FT%5%5c%:$%FFr&c|jC|j|s|jd||jk\r|jdyy)Ncannot refer to an open groupz?cannot refer to group defined in the same lookbehind subpattern)r r9r.)r#r1sources r$checklookbehindgroupzState.checklookbehindgroupgsX  ,??3'll#BCCd+++ll$;<<, -r&r() __name__ __module__ __qualname__r%propertyr*r3r7r9r=r&r$rrKs0 %% -G>+DAqAq AAq AA!V!VwW XX&B(99 zzr&r(r) r>r?r@r%rVrcrerjrmrqrsr,r5rBr&r$rDrDos5)T  &2r&rDcZeZdZdZdZdZdZdZdZe dZ dZ d Z d d Z d Zy ) Tokenizerct|t|_||_|js t|d}||_d|_d|_|jy)Nlatin1r)rXrRistextstringdecoded_stringrinext_Tokenizer__next)r#rs r$r%zTokenizer.__init__sI -  {{*F$   r&c:|j} |j|}|dk(r|dz } ||j|z }|dz|_||_y#t$r d|_YywxYw#t$r/t d|j t |j dz dwxYw)Nrrzbad escape (end of pattern))rir IndexErrorrr.rr))r#richars r$__nextzTokenizer.__nexts  &&u-D 4< QJE I++E22QY   DI   I9 KKT[[)9A)=?DHI IsA A" AA"8BcD||jk(r|jyy)NTFrr)r#rs r$matchzTokenizer.matchs 499  KKMr&c>|j}|j|Sr(r)r#thiss r$r/z Tokenizer.getsyy  r&czd}t|D]*}|j}||vr|S||z }|j,|SNrJ)rangerr)r#ncharsetresult_cs r$getwhilezTokenizer.getwhile sKqA A  aKF KKM   r&cd} |j}|j|4|s|jd|z|jd|zt|||k(r|s|jd|zd |S||z }w)NrJzmissing zmissing %s, unterminated namer)rrr.r))r# terminatorr0rrs r$getuntilzTokenizer.getuntils A KKMy**Z$%677jj!@:!M!$V..J**Z$%6::  aKFr&cN|jt|jxsdz Srrir)rr"s r$posz Tokenizer.pos"szzC R000r&cN|jt|jxsdz Srrr"s r$tellzTokenizer.tell%szzC R000r&c2||_|jyr()rirrhs r$seekzTokenizer.seek's  r&c|js!|jddjd}t||j|j |z S)Nasciibackslashreplace)rencodedecoder.rr)r#msgoffsets r$r.zTokenizer.error+sC{{**W&89@@ICS$++tyy{V';<r?r@r%rrr/rrrArrrr.rrBr&r$rrsH   111= 6r&rctj|}|r|Stj|}|r |dtur|S |dd}|dk(rZ||j dt z }t |dk7r|jd|zt |tt|dddfS|dk(rf|jrZ||j dt z }t |d k7r|jd|zt |tt|dddfS|d k(rs|jrg||j d t z }t |d k7r|jd|zt |t|ddd}t|t|fS|d k(rg|jr[ddl }|jds|jd|jdd} t|j!|}t|fS|t&vrS||j dt&z }t|ddd }|dkDr|jd|zt |t|fS|t(vrt*t |dk(r:|t,vr|jd|zt |tt|dfS |jd|zt |#t"t$f$r,|jd|zt |t dzdwxYw#t*$rYgwxYw)Nrrrwrincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr/ CATEGORIESrSr HEXDIGITSr)r.LITERALintrchr unicodedatarrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r<escaperprrcharnames r$ _class_escaper8s ;;v D  >>& !D Q2  1 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  )^ fooa3 3FF12J"A5yll$35;$<=@[JJA:  &[  v;! L ll?V#;S[IICq N* *  ,,/V ==)i( Kll#@8#K#&x=3w<#?AFJK K$    sMA#L#A*LA7LA LK*L2AL AL;K==L L  L ctj|}|r|Stj|}|r|S |dd}|dk(rZ||jdtz }t |dk7r|j d|zt |tt|dddfS|dk(rf|jrZ||jdtz }t |dk7r|j d|zt |tt|dddfS|d k(rs|jrg||jd tz }t |d k7r|j d|zt |t|ddd}t|t|fS|d k(rg|jr[d dl }|jds|j d|jdd} t|j|}t|fS|dk(r.||jdt$z }tt|ddd fS|t&vr|j(t&vr||jz }|dt$vrj|dt$vr_|j(t$vrM||jz }t|ddd }|dkDr|j d|zt |t|fSt|dd}||j*krF|j-|s|j dt ||j/||t0|fS|j d|zt |dz t |dk(r:|t2vr|j d|zt |tt|dfS |j d|zt |#t t"f$r,|j d|zt |t dzdwxYw#t4$rYgwxYw)Nrrwrrrrrrrrrrrrrrrrr0rrr;invalid group reference %dr)rr/rrrr)r.rrrrrrrrrrrrrrr*r9r=rrr)r<rrFrprrrgroups r$_escaperts >>& !D  ;;v D  B 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  #X fooa3 3FCqr A.. . &[{{f$&**,&1I*vayI/EKK9,fjjl*FF12J*A5y$ll,;=C,D+.v;88#A:%qr OEu||#''. ,,'F'*6{44**5&9&,,;eCS[ST_U U v;! L ll?V#;S[IICq N* *  ,,/V ==Ki( Kll#@8#K#&x=3w<#?AFJK KF    sZA#O&A*O&A7O&;A O&N(O&'2O&B"O&=A"O& A(O&(;O##O&& O21O2c>ttj|Sr()rPdictfromkeys)itemss r$_uniqrs  e$ %%r&c g}|j}|j}|j} |t||||dz| xr| |dsn|s|jt z}=t |dk(r|dSt|} d} |D]} | sn0| | d} | d| k7sn|D]} | d=|j| < g} |D]_} t | dk7rnq| d\} } | tur| j| | f7| tur | ddtur| j| _n#|jtt| f|S|jtd|ff|S)Nr|r)r,rr_parserSRE_FLAG_VERBOSEr)rDrrSNEGATEextendrrT)r<rFverbosenestedr itemsappend sourcematchstart subpatternprefixitemsetr[r\s r$ _parse_subrs E,,K,,K KKME F65'6A:%:3e)5 63 kk$44G  5zQQxE"J D~aaF" G   f %   C t9> aB = JJBx 2X"Q%(&0 JJrN  2uSz*+ve}-. r&c~t|}|j}|j}|j}t} t } |j } |  nn| dvr nh||r | tvr)| dk(r |} | | dk(rn@| ddk(rt|| |} ||  n| tvr|t| | f n| dk(r|jdz } g}|j}|j dk(r0ddl }|jd |jzt|d z |d } |} | #|jd |j| z | dk(r|rn| ddk(r t!|| }nm|r]| dvrY|j | k(rJddl }|jd| dk(rdn| dk(rdn| dk(rdnd|jdz fzt|d z t| | f}|drY|}|#|jd |j| z |dk(r1|dt"ur|dd}|||t| dfn|ddk(r t!||}nF|dk(r3ddl }|jd|jdz zt|d z t| |f}|dtk7s |dtk7r2d| d|}|j|t | dzt |z|d}|d}||kr2d| d|}|j|t | dzt |z|t$||ffn|dt"ur|dd}||6t'|}| |dk(r3|ddtur%|r|t(|ddf n||d n|r|j+dt,df|t"|fn| t.vrj|j} | dk(rd\}}ne| dk(r dt0}}nV| dk(r dt0}}nG| dk(r3|j d k(r|t| | fdt0}}d!x}}|j t2vr||z }|j t2vr|d"r0|j t2vr ||z }|j t2vrn|}|d s'|t| | f|j5| |rt7|}|t0k\r t9d#|rUt7|}|t0k\r t9d#||kr1|jd$|j| z t;d%|r|d&d}nd}|r|ddt<ur/|jd'|j| z t | z|ddt>vr/|jd(|j| z t | z|ddt@ur|dd\}}}}||s|s|}|drtB|||ff|d&<n|drtD|||ff|d&<ntF|||ff|d&<nu| d)k(r|tHdfn`| d*k(r|jdz } d}!d+}"d}#d}d}|drE|}||jd,|d-k(r&|d.r&|jKd/d0}#|jM|#dn|d1r|jKd2d0}#|jM|#d|jNj|#}$|$#d3|#z}|j|t |#dz|jQ|$s|jd4t |#dz|jS|$||tT|$fT|}||jd,|jd5|zt |dz|d6k(rd+}!n|dk(r> |j #|jd7|j| z |d2k(rn;|d8vrd}%|d.k(r`|}||jd,|d9vr!|jd:|zt |dzd&}%|jV}&|&|jX|_+t[||||dz}|%dkr &d|_+|d2s#|jd;|j| z |d1k(r|t\|%|ffn|t^|%|ff|d*k(rE|jKd2d0}'|'jar|'jcsS|jM|'d|jNj|'}(|(5d3|'z}|j|t |'dzt7|'}(|(s|jd|jhr tk|'n tm|'|jt |'z dz fztn|d z |jS|(|tq||||dz})|jd?r1tq||||dz}*|j d?k(r|jd@d}*|jd2s#|jd;|j| z |tr|(|)|*ff |d/k(rd+}!d}"n|ttvs|dk(rStw|||}+|+<|r|r#|jdA|j| z |jxtzz} e|+\}}d+}!n!|jdB|zt |dz|!r |j}|#}nd}|xs |tzzxr |tzz }-t[|||-|dz}|jd2s#|jd;|j| z ||j|||"r|J|t|fnQ|t@||||ffn>| d k(r|t<tfn&| dCk(r|t<tfnt;dD ~tt |ddd&D]+}.||.\}/}0|/t@us|0\}}}}||r!|r$|||.|.dz-|S#t$r.},|j|,j~t |#dzdd},~,wwxYw)ENTz|)#r rr[rz"Possible nested set at position %dr stacklevel^zunterminated character set]z-&~|zPossible set %s at position %d- difference& intersection~zsymmetric differenceunionz&Possible set difference at position %drwzbad character range ?)rrr+rrrJ,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier rvznothing to repeatzmultiple repeat.(Fzunexpected end of patternP<> group name=)unknown group name %rr;zunknown extension ?P:zmissing ), unterminated commentz=!#+ 6 ' &  1 @33 *fqj&$T$Z/Es#$;D|$ll+G+1;;=4+?AAs{ 8r>$)!HQKE!%(!7DI"67Aw$ -fd ;3;+$MM H$*KKMA$5!7 -&1** !(d 3Qx7*eAh'.A=A4H$ll3D A D 0IJJqBqBBw=A4H$ll3D A D 0IJJur2h/0Qx2~ %a e$sv*CCyA~#a&)w"6$k3q6!9%=>$SV,JJq64.1!"c+ \ !;;=Ds{SiSiS;;#%$gtDz%:;iS RkkV+)+%BkkV+s# ++/ik)!++/B"3'$gtDz%:;KK%b'Ci'+,PQQb'Ci'+,PQQSy$ll+O+1;;=4+?AA%D%JKK!"#471:+ll#6#);;=4#7#d)#CEEAwqz\)ll#4#);;=4#7#d)#CEEAwqzZ'15a.y)Q=9D3",sC.>!? 2S!"3c35E!F 2#-sC.>!? 2 S[ c4[ ) S[KKMA%EGFDII3 {< ,,'BCC3;"3'%sLA--dA6$S)%sLA--dA6#oo11$7;"9D"@C"(,,sCIM"BB$//4"(,,/N/24y1}#>>223?((C9  ){<"(,,/J"KK$ll+AD+H+.t9q=::S[#GS[!;;."(,,/P/5{{}u/D#FF$;#-!  U]Cs{({<"(,,/J"KKt+"(,,/E/L/24y1}#>> +0+A+A(+35:\\E2"65'6A:FAQw+359E2&s+$ll+O+1;;=5+@BBs{(&3();<(*sAh)?@S[%sLAH$..0X5E5E5G--h:$)OO$7$7$A $,"9H"DC"(,,sCMA4E"FF$'M ("(,,/A/28}q/@#BB$ 1">"JC"(,,sCMA4E"FF$E,=,== & H = A"--i8!) 2 2 49I9I9K+$MM O39==heHo!'X!>!B!D!D!3vz * ..y&A%feWfqjIH||C("(!"L!;;#-"(,,/`"aa"&!<<,$ll+O+1;;=5+@BB$o 8W7U%VWS[#G!FU]dck(=E}$ "(,,0C/5{{}u/D#FF#(++0@"@ +0(Iy#G ,,' ),< <= 65+vzBA<<$ll#G#);;=5#8::   *}$} ,!23 *uiA.N!OP S[ b,/ 0 S[ b&\ *!t!MN NM R 3z? #DbD )AB  -/ *E9i}Yy%& 1ac" * GI ,,swwD A >DHIs t t<)t77t<cX|j}d}d}|dk7r t|}|jr|dk(r+d}|j||dk(rd}|j|||z}|tzr|tz|k7rd}|j||}||jd|d vrn8|tvr/|j rd nd}|j|t ||d k(r|xj|zc_y|tzr|jd d |dk(r|}||jd|tvr/|j rd nd}|j|t | t|}|tzrd}|j|||z}|}||jd|dk(rn8|tvr/|j rd nd}|j|t ||dk(sJ|tzr|jdd ||zr|jdd ||fS)Nrrrz8bad inline flags: cannot use 'L' flag with a str patternrz:bad inline flags: cannot use 'u' flag with a bytes patternz9bad inline flags: flags 'a', 'u' and 'L' are incompatiblezmissing -, : or )z)-:z unknown flagr z,bad inline flags: cannot turn on global flagrz missing flagz8bad inline flags: cannot turn off flags 'a', 'u' and 'L'z missing :rz-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and off) r/r%rr. TYPE_FLAGSisalphar)r GLOBAL_FLAGS)r<rFrr+r4r5flagrs r$r&r&}sF III s{;D}}3;TC ,,s++3;VC ,,s++  Iz! J(>4'GQll3'';D|ll#677u}5 (, n|tzr td|tzs |t z}|S|t zr td|S|t zr td|tzr|tzr td|S)Nz)cannot use LOCALE flag with a str patternz(ASCII and UNICODE flags are incompatiblez,cannot use UNICODE flag with a bytes patternz'ASCII and LOCALE flags are incompatible)rXrRSRE_FLAG_LOCALErSRE_FLAG_ASCIISRE_FLAG_UNICODE)srcrs r$ fix_flagsrFs#s ? "HI I~% % %E L% %GH H L # #KL L ? "u~'=FG G Lr&Nc t|}| t}||_||_t |||t zd}t ||jj|j_|j"|jdk(sJ|jd|jjD]D}||jjk\sd|z}t|||jj||tzr|j|S)Nrr zunbalanced parenthesisr)rrrrRrrrFrFrr.r!r*SRE_FLAG_DEBUGrV)rRrrFr<r6grs r$parserJss^F }EKEI65%*:":A>Ac177==1AGGM {{{{c!!!ll344 WW   .2CS!''"5"5a"89 9!  ~  Hr&c  t|j}gg j} fd fd}j} |}|n|ddk(r~|d}|dk(r7j dsj d j d d }|jr|jsj|d ||} nt|} | tk\r!j d | zt|dz|jr|js^ddl} | j!dj"r t%|n t'|j)t|z dz fzt*d|| t|dznD|dk(rZj,t.vr&||z }j,t.vr ||z }|t1t|ddddzn|t2vrd} j,t2vr~||z }|t.vrl|dt.vraj,t.vrO||z }d} t|ddd}|dkDrj d|zt||t1|| sI|t|ddt|dz n' t1t4|d}||n|| S#t$rtd |zdwxYw#t$r*|t6vrj d|zt|dYjwxYw)Ncjr!jdjn/jdjjddd=y)NrJzlatin-1)rr,joinr)literalrrsr$ addliteralz"parse_template..addliteralsH 88 MM"'''* + MM"'''*11)< = AJr&c~|jkDrjd|z|j|y)Nr)r*r.r,)rirrOpatternrrs r$addgroupz parse_template..addgroups7 7>> !''6>D D  er&TrrrrIr z missing rks &  <  j ! . / OP } % *j2CDE UBhG H  SY  SY  SY  SY  SY  SY  SY  SY   # $    (N+, - (./0 1 (N+, - (./0 1 (M*+ , (-./ 0             o -0@ @  11  "<"xK>Z&:x{z : x  6Tr&__pycache__/_casefix.cpython-312.pyc000064400000003432152462750210013246 0ustar00 ThD<idddddddddd d d d d ddddddddddddddddddd d!id"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCidDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcZyd)ei)1s))r)rr)rE))))))r )rr )r)r)))r)r)r)rr)rr)rr)rr)rr)rr)r2)4)>)A)B)J)c)r )rr")r!r$)r#r&)r%r()r'r)r))r'r(r+)r*r-)r,)Ka)r1)r0r )rr r )r r)r r/)r.)r3)r2N) _EXTRA_CASES$/usr/lib64/python3.12/re/_casefix.pyr8s e Ie I e  I e Ie Ie e Ie  I!e$ I%e( I)e, I-e0 1e4 I5e8 I9e< I=e@ IAeD IEeH IIeL IMeP IQeT IUeX IYe\ I]e` Iaed Ieeh Iiel Imep Iqet Iuex Iye| }e@ IAeD IEeH IIeL IMeP IQeT IUeX Ye\ ]e` Iaed Ieeh Iiel Imep Iqet uex Iye| I}e@ IAeD IEeH IIe r6__pycache__/_compiler.cpython-312.opt-1.pyc000064400000062676152462750210014414 0ustar00 Thg4dZddlZddlmZddlddlmZeehZ e e hZ e ehZe eehzZeeeefeeeefeee efiZej:fdZdZd Z dd Z!ejDd zZ#de#zdz Z$d Z%e#e&fd Z'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2ddZ3y)zInternal support module for sreN)_parser)*) _EXTRA_CASESc*||zr||z}||z|zSN)flags add_flags del_flags TYPE_FLAGSs %/usr/lib64/python3.12/re/_compiler.py_combine_flagsrs(: * I ) ++c  |j}t}t}t}t}t }d} d} d} |t zrY|tzsP|tzr'tj} tj} t} n tj} tj} |D]d\} } | |vr|t zs|| || &|tzr|t| || G| | s|| || `| | }| s|t | |||| vr|t"| |||t$||}|d| t&ur |t(|f| |zD]}|t*|||t,|||z ||< | t.urt1| | | | \}}|t zr|tzr |t2n*|s |t.n| s |t4n |t$||}|dt7||||||z ||<| t8ur%|t:zr|t<|t8| |vr|t>zrtAd| tC| dr`||| d||}|d|| d|| dtE|| d||tF|||z ||<Q||| d||}|d|| d|| dtE|| d||||z ||<||| d| tHur^| \}}}}|r|tJ||dz dztE||tM||||s|tJ||dz dzdz| tNurE|tN||}|dtE|| ||tF|||z ||<f| |vr || t| |vr|| ||}|d| ddk\r |dnB| djQ\}}|tRkDr tAd||k7r tAd||tE|| d||tF|||z ||<| tTurp|| |tVzrtXj[| | } |tzrt\j[| | } n|tzrt^j[| | } || | t`ur|| g}|j}| dD]O} ||}|dtE|| ||tb||||d|||z ||<Q|t,|D]}|||z ||<| tdur7|| |tzr tf| } n|tzr th| } || ^| tjurP|t zs || n1|tzr |tln| s |tnn |tp|| dz | trur|| || ddz ||}|dtE|| d|| drM|tb||}|d|||z dz||<tE|| d||||z ||<F|||z dz||<YtAd| y)Nrz(internal: unsupported template operator rzlooks too much behindz(look-behind requires fixed-width patternz#internal: unsupported operand type ):appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES _ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODE_sreunicode_iscasedunicode_tolowerr ascii_iscased ascii_tolowerOP_LOCALE_IGNORE OP_IGNOREOP_UNICODE_IGNORE IN_UNI_IGNORE NOT_LITERALNEGATELITERALFAILUREIN_optimize_charset IN_LOC_IGNORE IN_IGNORE_compile_charsetANYSRE_FLAG_DOTALLANY_ALLSRE_FLAG_TEMPLATEerror_simple_compileSUCCESS SUBPATTERNMARKr ATOMIC_GROUPgetwidthMAXCODEATSRE_FLAG_MULTILINE AT_MULTILINEget AT_LOCALE AT_UNICODEBRANCHJUMPCATEGORY CH_LOCALE CH_UNICODEGROUPREFGROUPREF_LOC_IGNOREGROUPREF_IGNOREGROUPREF_UNI_IGNOREGROUPREF_EXISTS)codepatternr emit_len LITERAL_CODESREPEATING_CODES SUCCESS_CODES ASSERT_CODESiscasedtolowerfixesopavloskipkcharsethascasedgroupr r phitail tailappendskipyesskipnos rr4r4%s ;;D D"M&O"M LGG E ""5?+B # #**G**G E((G((GB  ..RR(%b)*RR[RRR[2'Hu_*2./H':DtAw[(V  UU2Y.W Q/M!%dd!2DJ 2X 1"gw N GX**u/F]#RY]#:DtAw WeT 2dd*DJ 3Y&W S ? "((BPQQr!u~_R(+,Dz47RU RU r!ue,W !$Z$.T _R(+,Dz47RU RU r!ue,!$Z$.T _R(+, : -/ *E9iT eAgq[! T1nUIyI JT eAgq[]# <   :DtAw T2u % Mdd*DJ = H <  H:DtAw!uzQA)B< 7888 JKKR T2a5% ( Mdd*DJ 2X H))!%%b"-&]]2r*))^^B+ H 6\ HDJeDz47r5)T 4:&Q!$Z$.T  M!$Z$.T  8^ H&r]))^ H 8^..R(()_%() AJ ? " H AqM4jG$q' T2a5% (!uT dT!W $T W 4q 8W r!ue,#DzF2V $T W 4q 8W 2GH H}rc|j}|D]\}}|||tur|tur ||(|tus|tur||d||dO|t ur|j |i|tur|j ||tur;|tzr|t||tzr|t|||td||ty)Nrrz#internal: unsupported set operator )rr&r'RANGERANGE_UNI_IGNORECHARSETextend BIGCHARSETrCrrDrrEr2r()r[r rKrMrVrWs rr-r-s ;;DB R <  7] H 5[B"22 AK AK 7] KKO :  KKO 8^&Yr]#))Z^$R2GH H+, Mrc^g}g}td}d}|D]\}} |tur7|r/|| } d|| <|r| |vr|| D]} d|| < |s|| rd}nd|| <n|turt| d| ddz} |r[|r+t || D]} d|| <| |vs || D]} d|| < nt || D]} d|| < |sRt t || }n<| D]} d|| < n/|t ur|j|| fn|j|| fg} d} |jd|}|dkrnYt| dk\rd} nH|jd|}|dkr| j|t|fn| j||fq| l| D]A\}}||z dk(r|jt|f&|jt||dz ffC||z }|st|t|kr||fS||fSt|dk(r+t|}|jt|f||z }||fSt|}i}td}d}t}tdd dD]1} || | dz}||vr |||| dz<|x|| dz<||<|dz }||z }3t|}|gt|z|dd|jt |f||z }||fS#t$rQt|dk(r |ddzz }Y|r|tur |rt}d}n |s || rd}|j|| fYwxYw) NFTrriri) bytearrayr'rerangemapanyr&r IndexErrorrrffind _mk_bitmaprgbytes_bytes_to_codesri)r[rSfixuprUoutr`charmapr\rVrWrZrirunsqr^datacompsmappingblockchunks rr*r*s C DnGHB; &="2Y&'  R5[%*2Y-. &/'GBK'+H&' 5[beRU1W-A %(]-. #$:-21X56 .6&3 &)]-. &3''*3w?';H!"A)*GAJ"#6\JJBx(KKR)8 }B D A  LLA  q5  t9>D  LLA  q5 KKCL) *  QF  DAq1uz GQ<( EAq1u:./  t  s3x#g,.=    7|s'" GT?# t H},GnG EnG E ;D 1eS !1s7# E> %e GAH /4 4GAH e QJE EMD" d D/'22D1IJJ D!"4KC =M &w<3&uv~-GU{ !1B#' (GBK'+H RH%5 &sA8KA|S)aj Generate an overlap table for the following prefix. An overlap table is a table of the same size as the prefix which informs about the potential self-overlap for each index in the prefix: - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with prefix[0:k] rr)rrn)prefixtablerzidxs r_generate_overlap_tablersC#f+ E 1c&k "AElQi6#;&axaa.C Qi6#;& QwE!H# Lrch|tzsy|tzrtjStjSr)rrrrr)r s r _get_iscasedrs/ & & ! !###!!!rcg}|j}d}t|}|jD]\}}|tur|r ||rn||#|turn|\}} } } t || | } | t zr | tzrnNt| | \} }}|| t|}n|t||z}|j| |rnn||dfS||dfS)NTF) rrr}r'r6rrr_get_literal_prefixrrh)rLr r prefixappend prefix_skiprSrVrWr]r r r^flags1prefix1 prefix_skip1got_alls rrrs F==LK5!G,,B =72;   : -/ *E9i#E9i@F++0H-@F-K *G\7"$"%f+K!-"%f+ "?#" rc|j\}}|tkDrt}|dk(r|jtdd||gyg}d}g}|tzr |t zst ||\}}}|s t||}|j} | tt|} | dd} |rt} |r| tz} n |r | tz} | | |tkr | |n| t|dt}| ||rR| t|| t|}| ||j||jt|n|rt|\}} t|||t|| z || <y)Nr)r9r:rhINFOrrrrrrSRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrr*r-) rKrLr rXr_rrr[rrMrYmaskr\s r _compile_inforsv   FB G|  Qw T1aR() FKG ' 'EO,C':7E'J$ W)'59G ;;DJ t9Dd1g D   7**D &&J G| R W !H  S[  v;K [ F +F34 -g6%.TT!DJrc.t|ttfSr) isinstancestrrt)objs risstringr?s cC< ((rc|jj|z}g}t|||t||j||j t |Sr)stater rr4r}rr5)r^r rKs r_coderBsJ GGMME !E D$5! T1665!KK Krc8ddjd|DzS)N[%s], c3RK|]}dtjdzdz|fz!yw)z%#0*xrN)rCODESIZE.0xs r z_hex_code..Rs(M1gq):A(>>s%')join)rKs r _hex_coderQs DIIMMM MMrcddltdtttdz fddty)Nrrc l ddfd }fd}dz }||kr||}|dz }t|}|ttttt t tfvr ||n|ttttttttfvr#|}|dz }||d|t!|fzns|t"ur*|}|dz }t%t&|}|||ddnA|t(ur*|}|dz }t%t*|}|||ddn|t,t.t0t2fvr)|}|||||z|dz||z||z }n|t4t6fvr4||dz\}} |dz }||d || t!|t!| fzn|t8ur-||t;||d t<zz|d t<zz }nW|t>ur|}|dz }tAd jCfd ||d tDjFzzD} |||| |d tDjFzz }dz tI|D],} |t;||d t<zz|d t<zz }.dzn|tJtLtNtPtRfvr|}|dz }|||ns|tTur|}|||||z|dz }nQ|tVurW|}|||||z|r;|dz||z||z }||}|r|d |||zn |t|r;|dz }n|tXtZt\t^t`fvr=||dz\}} } | tbk(rd} |||| | ||z|dz||z||z }n|tdur!||dz\}}||||||z|dz }no|tfthfvr0||dz\}}||||||z|dz||z||z }n1|tjur)|}|||||z|dz||z||z }n|tlur||dz\}}} } | tbk(rd} |||to|| | ||z|dz|tpzr|dz|dz\}}|d||dz|z}|dddjCd|DzddjCtst |z|z |d|z|z |ttzrdz |d||zdz||z }n tw|||krdzy)N)toc|j||d|fzfz }tdvrdndfzddz zt|y)Nz(to %d)z%*d%s :.z rend)addprint)rargslabelslevel offset_widthstarts rprint_z!dis..dis_..print_\sW~ 2bU*,, (lE%6/3sSSE!Gn & 4Lrc@tddzzzt|y)N rr)r)rrrs rprint_2z"dis..dis_..print_2ds c.dis_..s-(R1PA)* 4==#--(P1Ps47branch MAXREPEATrz prefix_skipz prefixrrc3&K|] }d|z yw)z%#02xNr rs rrz$dis..dis_..s.KFqw{Fsz(%r)z overlapin)<OPCODESr5r(r.r0 MAX_UNTIL MIN_UNTILr&r'r%LITERAL_IGNORENOT_LITERAL_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREchrr;rATCODESrCCHCODESr)r,r$r+rerfrgrrrilistrrrrnr7rFrHrIrGrBrAREPEAT REPEAT_ONEMIN_REPEAT_ONEPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONErrJASSERT ASSERT_NOTr8rbinrror ValueError)rrrrrzrVargrYrXr_rjminmaxr prefix_lenrrrKdis_rrrrs` rrzdis..dis_[s!      #gEaB FABgwWF44r &(:*,B*,BDD1gQr<3C/9:r1gQ'#,'r3qr7#x1gQ'#,'r3qr7#I}mDDAwr4AdF+QqS!D&!T /00a1BQr0BCGSW3MMNwr9T!Qi-?%@ABS)^#z!1gQsxx(R15aS$--=O9O1P(R RSr3(S$--'' sAId1a#y..@&ABCi'A$ h9L+--1gQr3tAwr4AdF+QvAwr4AdF+1af%IAE7Dx!D&9wQ N)+@BB!%a1c3)#%Cr4caf5QqS!D&!T & AaCL Tr340Q ++ AaCL cr440QqS!D&!T |#Awr4AdF+QqS!D&!T t(,Q! %eS#)#%Cr4US#!D&A!?*.21Q3!n+J O[9EE!%z)9:FJ"TYY.KF.K%KK"RWWSf-=%>>@Z'EKeU:5E)FGZ'E++QJEDM$'QJET  n$o#gr  r)rsetrr)rKrrrrrs`@@@@@rdisrTsF UF Es3t9q=)*LIIV CIrc t|r|}tj||}nd}t||}|tzrt t ||jj}dg|jjz}|jD] \}}|||< tj|||jjz||jjdz |t|S)Nr)rrparserSRE_FLAG_DEBUGrrr groupdictgroupsitemsrcompiler tuple)r^r rLrK groupindex indexgrouprZrzs rrrs{ MM!U # E?D ~  D ""J!''..(J  "1 1 # <<& qE*%  r)NNN)r)4__doc__rrr _constants_casefixrr'r%rr5r(rrrrr.r)r MIN_REPEATrrr MAX_REPEATrrrrrr rr4r-r*rrr:rintrsrur3rrrrrrrrrrr rrrs& ";'7#$ Ry( N3J/)74IJ&00, qIf6Ob MMA  >Q  (s3 *"&>*X9"v) NRj r__pycache__/_casefix.cpython-312.opt-1.pyc000064400000003432152462750210014205 0ustar00 ThD<idddddddddd d d d d ddddddddddddddddddd d!id"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCidDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcZyd)ei)1s))r)rr)rE))))))r )rr )r)r)))r)r)r)rr)rr)rr)rr)rr)rr)r2)4)>)A)B)J)c)r )rr")r!r$)r#r&)r%r()r'r)r))r'r(r+)r*r-)r,)Ka)r1)r0r )rr r )r r)r r/)r.)r3)r2N) _EXTRA_CASES$/usr/lib64/python3.12/re/_casefix.pyr8s e Ie I e  I e Ie Ie e Ie  I!e$ I%e( I)e, I-e0 1e4 I5e8 I9e< I=e@ IAeD IEeH IIeL IMeP IQeT IUeX IYe\ I]e` Iaed Ieeh Iiel Imep Iqet Iuex Iye| }e@ IAeD IEeH IIeL IMeP IQeT IUeX Ye\ ]e` Iaed Ieeh Iiel Imep Iqet uex Iye| I}e@ IAeD IEeH IIe r6__pycache__/_parser.cpython-312.opt-2.pyc000064400000121514152462750210014062 0ustar00 Th @ ddldZdZedZedZedZedZedZee e e hZ ee eeeeehZeed feed feed feed feed feedfeedfeedfdZeefeefeefeeefgfeeefgfeeefgfeeefgfeeefgfeeefgfee fd Z!e"e#e$e%e&e'e(e)dZ*e'e#ze)zZ+e,e(zZ-dZ.GddZ/GddZ0GddZ1dZ2dZ3dZ4dZ5d%dZ6d Z7d!Z8d&d#Z9d$Z:y")')*z .\[{()*+?^$|z*+?{ 0123456789012345670123456789abcdefABCDEF4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz      \)z\a\bz\fz\nz\rz\tz\vz\\) z\Arz\Bz\dz\Dz\sz\Sz\wz\Wz\Z)iLmsxatulc<eZdZdZedZddZdZdZdZ y) StatecLd|_i|_dg|_d|_i|_y)N)flags groupdict groupwidthslookbehindgroups grouprefposselfs #/usr/lib64/python3.12/re/_parser.py__init__zState.__init__Ms*  6 $c,t|jSN)lenrr"s r$groupsz State.groupsSs4##$$r&Nc|j}|jjd|jtkDr t d|>|j j |d}|t d|||fz||j |<|S)Nztoo many groupsz7redefinition of group name %r as group %d; was group %d)r*rappend MAXGROUPSerrorrget)r#namegidogids r$ opengroupzState.opengroupVskk % ;; ")* *  >>%%dD1D+.2C$-?@AA#&DNN4  r&c>|j|j|<yr()getwidthr)r#r1ps r$ closegroupzState.closegroupbs ! r&cF||jkxr|j|duSr()r*r)r#r1s r$ checkgroupzState.checkgroupds&T[[ FT%5%5c%:$%FFr&c|jC|j|s|jd||jk\r|jdyy)Ncannot refer to an open groupz?cannot refer to group defined in the same lookbehind subpattern)r r9r.)r#r1sources r$checklookbehindgroupzState.checklookbehindgroupgsX  ,??3'll#BCCd+++ll$;<<, -r&r() __name__ __module__ __qualname__r%propertyr*r3r7r9r=r&r$rrKs0 %% -G>+DAqAq AAq AA!V!VwW XX&B(99 zzr&r(r) r>r?r@r%rVrcrerjrmrqrsr,r5rBr&r$rDrDos5)T  &2r&rDcZeZdZdZdZdZdZdZdZe dZ dZ d Z d d Z d Zy ) Tokenizerct|t|_||_|js t|d}||_d|_d|_|jy)Nlatin1r)rXrRistextstringdecoded_stringrinext_Tokenizer__next)r#rs r$r%zTokenizer.__init__sI -  {{*F$   r&c:|j} |j|}|dk(r|dz } ||j|z }|dz|_||_y#t$r d|_YywxYw#t$r/t d|j t |j dz dwxYw)Nrrzbad escape (end of pattern))rir IndexErrorrr.rr))r#richars r$__nextzTokenizer.__nexts  &&u-D 4< QJE I++E22QY   DI   I9 KKT[[)9A)=?DHI IsA A" AA"8BcD||jk(r|jyy)NTFrr)r#rs r$matchzTokenizer.matchs 499  KKMr&c>|j}|j|Sr(r)r#thiss r$r/z Tokenizer.getsyy  r&czd}t|D]*}|j}||vr|S||z }|j,|SNrJ)rangerr)r#ncharsetresult_cs r$getwhilezTokenizer.getwhile sKqA A  aKF KKM   r&cd} |j}|j|4|s|jd|z|jd|zt|||k(r|s|jd|zd |S||z }w)NrJzmissing zmissing %s, unterminated namer)rrr.r))r# terminatorr0rrs r$getuntilzTokenizer.getuntils A KKMy**Z$%677jj!@:!M!$V..J**Z$%6::  aKFr&cN|jt|jxsdz Srrir)rr"s r$posz Tokenizer.pos"szzC R000r&cN|jt|jxsdz Srrr"s r$tellzTokenizer.tell%szzC R000r&c2||_|jyr()rirrhs r$seekzTokenizer.seek's  r&c|js!|jddjd}t||j|j |z S)Nasciibackslashreplace)rencodedecoder.rr)r#msgoffsets r$r.zTokenizer.error+sC{{**W&89@@ICS$++tyy{V';<r?r@r%rrr/rrrArrrr.rrBr&r$rrsH   111= 6r&rctj|}|r|Stj|}|r |dtur|S |dd}|dk(rZ||j dt z }t |dk7r|jd|zt |tt|dddfS|dk(rf|jrZ||j dt z }t |d k7r|jd|zt |tt|dddfS|d k(rs|jrg||j d t z }t |d k7r|jd|zt |t|ddd}t|t|fS|d k(rg|jr[ddl }|jds|jd|jdd} t|j!|}t|fS|t&vrS||j dt&z }t|ddd }|dkDr|jd|zt |t|fS|t(vrt*t |dk(r:|t,vr|jd|zt |tt|dfS |jd|zt |#t"t$f$r,|jd|zt |t dzdwxYw#t*$rYgwxYw)Nrrrwrincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr/ CATEGORIESrSr HEXDIGITSr)r.LITERALintrchr unicodedatarrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r<escaperprrcharnames r$ _class_escaper8s ;;v D  >>& !D Q2  1 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  )^ fooa3 3FF12J"A5yll$35;$<=@[JJA:  &[  v;! L ll?V#;S[IICq N* *  ,,/V ==)i( Kll#@8#K#&x=3w<#?AFJK K$    sMA#L#A*LA7LA LK*L2AL AL;K==L L  L ctj|}|r|Stj|}|r|S |dd}|dk(rZ||jdtz }t |dk7r|j d|zt |tt|dddfS|dk(rf|jrZ||jdtz }t |dk7r|j d|zt |tt|dddfS|d k(rs|jrg||jd tz }t |d k7r|j d|zt |t|ddd}t|t|fS|d k(rg|jr[d dl }|jds|j d|jdd} t|j|}t|fS|dk(r.||jdt$z }tt|ddd fS|t&vr|j(t&vr||jz }|dt$vrj|dt$vr_|j(t$vrM||jz }t|ddd }|dkDr|j d|zt |t|fSt|dd}||j*krF|j-|s|j dt ||j/||t0|fS|j d|zt |dz t |dk(r:|t2vr|j d|zt |tt|dfS |j d|zt |#t t"f$r,|j d|zt |t dzdwxYw#t4$rYgwxYw)Nrrwrrrrrrrrrrrrrrrrr0rrr;invalid group reference %dr)rr/rrrr)r.rrrrrrrrrrrrrrr*r9r=rrr)r<rrFrprrrgroups r$_escaperts >>& !D  ;;v D  B 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  #X fooa3 3FCqr A.. . &[{{f$&**,&1I*vayI/EKK9,fjjl*FF12J*A5y$ll,;=C,D+.v;88#A:%qr OEu||#''. ,,'F'*6{44**5&9&,,;eCS[ST_U U v;! L ll?V#;S[IICq N* *  ,,/V ==Ki( Kll#@8#K#&x=3w<#?AFJK KF    sZA#O&A*O&A7O&;A O&N(O&'2O&B"O&=A"O& A(O&(;O##O&& O21O2c>ttj|Sr()rPdictfromkeys)itemss r$_uniqrs  e$ %%r&c g}|j}|j}|j} |t||||dz| xr| |dsn|s|jt z}=t |dk(r|dSt|} d} |D]} | sn0| | d} | d| k7sn|D]} | d=|j| < g} |D]_} t | dk7rnq| d\} } | tur| j| | f7| tur | ddtur| j| _n#|jtt| f|S|jtd|ff|S)Nr|r)r,rr_parserSRE_FLAG_VERBOSEr)rDrrSNEGATEextendrrT)r<rFverbosenestedr itemsappend sourcematchstart subpatternprefixitemsetr[r\s r$ _parse_subrs E,,K,,K KKME F65'6A:%:3e)5 63 kk$44G  5zQQxE"J D~aaF" G   f %   C t9> aB = JJBx 2X"Q%(&0 JJrN  2uSz*+ve}-. r&cvt|}|j}|j}|j}t} t } |j } |  nj| dvr nd||r | tvr)| dk(r |} | | dk(rn@| ddk(rt|| |} ||  n| tvr|t| | f n| dk(r|jdz } g}|j}|j dk(r0ddl }|jd |jzt|d z |d } |} | #|jd |j| z | dk(r|rn| ddk(r t!|| }nm|r]| dvrY|j | k(rJddl }|jd| dk(rdn| dk(rdn| dk(rdnd|jdz fzt|d z t| | f}|drY|}|#|jd |j| z |dk(r1|dt"ur|dd}|||t| dfn|ddk(r t!||}nF|dk(r3ddl }|jd|jdz zt|d z t| |f}|dtk7s |dtk7r2d| d|}|j|t | dzt |z|d}|d}||kr2d| d|}|j|t | dzt |z|t$||ffn|dt"ur|dd}||6t'|}| |dk(r3|ddtur%|r|t(|ddf n||d n|r|j+dt,df|t"|fn| t.vrj|j} | dk(rd\}}ne| dk(r dt0}}nV| dk(r dt0}}nG| dk(r3|j d k(r|t| | fdt0}}d!x}}|j t2vr||z }|j t2vr|d"r0|j t2vr ||z }|j t2vrn|}|d s'|t| | f|j5| |rt7|}|t0k\r t9d#|rUt7|}|t0k\r t9d#||kr1|jd$|j| z t;d%|r|d&d}nd}|r|ddt<ur/|jd'|j| z t | z|ddt>vr/|jd(|j| z t | z|ddt@ur|dd\}}}}||s|s|}|drtB|||ff|d&<n|drtD|||ff|d&<ntF|||ff|d&<nq| d)k(r|tHdfn\| d*k(r|jdz } d}!d+}"d}#d}d}|drE|}||jd,|d-k(r&|d.r&|jKd/d0}#|jM|#dn|d1r|jKd2d0}#|jM|#d|jNj|#}$|$#d3|#z}|j|t |#dz|jQ|$s|jd4t |#dz|jS|$||tT|$fT|}||jd,|jd5|zt |dz|d6k(rd+}!n|dk(r> |j #|jd7|j| z |d2k(rn;|d8vrd}%|d.k(r`|}||jd,|d9vr!|jd:|zt |dzd&}%|jV}&|&|jX|_+t[||||dz}|%dkr &d|_+|d2s#|jd;|j| z |d1k(r|t\|%|ffn|t^|%|ff|d*k(rE|jKd2d0}'|'jar|'jcsS|jM|'d|jNj|'}(|(5d3|'z}|j|t |'dzt7|'}(|(s|jd|jhr tk|'n tm|'|jt |'z dz fztn|d z |jS|(|tq||||dz})|jd?r1tq||||dz}*|j d?k(r|jd@d}*|jd2s#|jd;|j| z |tr|(|)|*ff |d/k(rd+}!d}"n|ttvs|dk(rStw|||}+|+<|r|r#|jdA|j| z |jxtzz} e|+\}}d+}!n!|jdB|zt |dz|!r |j}|#}nd}|xs |tzzxr |tzz }-t[|||-|dz}|jd2s#|jd;|j| z ||j|||"r|t|fnQ|t@||||ffn>| d k(r|t<tfn&| dCk(r|t<tfnt;dD ztt |ddd&D]+}.||.\}/}0|/t@us|0\}}}}||r!|r$|||.|.dz-|S#t$r.},|j|,j~t |#dzdd},~,wwxYw)ENTz|)#r rr[rz"Possible nested set at position %dr stacklevel^zunterminated character set]z-&~|zPossible set %s at position %d- difference& intersection~zsymmetric differenceunionz&Possible set difference at position %drwzbad character range ?)rrr+rrrJ,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier rvznothing to repeatzmultiple repeat.(Fzunexpected end of patternP<> group name=)unknown group name %rr;zunknown extension ?P:zmissing ), unterminated commentz=!#+ 6 ' &  1 @33 *fqj&$T$Z/Es#$;D|$ll+G+1;;=4+?AAs{ 8r>$)!HQKE!%(!7DI"67Aw$ -fd ;3;+$MM H$*KKMA$5!7 -&1** !(d 3Qx7*eAh'.A=A4H$ll3D A D 0IJJqBqBBw=A4H$ll3D A D 0IJJur2h/0Qx2~ %a e$sv*CCyA~#a&)w"6$k3q6!9%=>$SV,JJq64.1!"c+ \ !;;=Ds{SiSiS;;#%$gtDz%:;iS RkkV+)+%BkkV+s# ++/ik)!++/B"3'$gtDz%:;KK%b'Ci'+,PQQb'Ci'+,PQQSy$ll+O+1;;=4+?AA%D%JKK!"#471:+ll#6#);;=4#7#d)#CEEAwqz\)ll#4#);;=4#7#d)#CEEAwqzZ'15a.y)Q=9D3",sC.>!? 2S!"3c35E!F 2#-sC.>!? 2 S[ c4[ ) S[KKMA%EGFDII3 {< ,,'BCC3;"3'%sLA--dA6$S)%sLA--dA6#oo11$7;"9D"@C"(,,sCIM"BB$//4"(,,/N/24y1}#>>223?((C9  ){<"(,,/J"KK$ll+AD+H+.t9q=::S[#GS[!;;."(,,/P/5{{}u/D#FF$;#-!  U]Cs{({<"(,,/J"KKt+"(,,/E/L/24y1}#>> +0+A+A(+35:\\E2"65'6A:FAQw+359E2&s+$ll+O+1;;=5+@BBs{(&3();<(*sAh)?@S[%sLAH$..0X5E5E5G--h:$)OO$7$7$A $,"9H"DC"(,,sCMA4E"FF$'M ("(,,/A/28}q/@#BB$ 1">"JC"(,,sCMA4E"FF$E,=,== & H = A"--i8!) 2 2 49I9I9K+$MM O39==heHo!'X!>!B!D!D!3vz * ..y&A%feWfqjIH||C("(!"L!;;#-"(,,/`"aa"&!<<,$ll+O+1;;=5+@BB$o 8W7U%VWS[#G!FU]dck(=E}$ "(,,0C/5{{}u/D#FF#(++0@"@ +0(Iy#G ,,' ),< <= 65+vzBA<<$ll#G#);;=5#8::   * ,!23 *uiA.N!OP S[ b,/ 0 S[ b&\ *!t!MN NM R 3z? #DbD )AB  -/ *E9i}Yy%& 1ac" * GI ,,swwD A >DHIs t t8 )t33t8cJ|j}d}d}|dk7r t|}|jr|dk(r+d}|j||dk(rd}|j|||z}|tzr|tz|k7rd}|j||}||jd|d vrn8|tvr/|j rd nd}|j|t ||d k(r|xj|zc_y|tzr|jd d |dk(r|}||jd|tvr/|j rd nd}|j|t | t|}|tzrd}|j|||z}|}||jd|dk(rn8|tvr/|j rd nd}|j|t ||tzr|jdd ||zr|jdd ||fS)Nrrrz8bad inline flags: cannot use 'L' flag with a str patternrz:bad inline flags: cannot use 'u' flag with a bytes patternz9bad inline flags: flags 'a', 'u' and 'L' are incompatiblezmissing -, : or )z)-:z unknown flagr z,bad inline flags: cannot turn on global flagrz missing flagz8bad inline flags: cannot turn off flags 'a', 'u' and 'L'z missing :rz-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and off) r/r%rr. TYPE_FLAGSisalphar)r GLOBAL_FLAGS)r<rFrr+r4r5flagrs r$r&r&}s: III s{;D}}3;TC ,,s++3;VC ,,s++  Iz! J(>4'GQll3'';D|ll#677u}5 (, n|tzr td|tzs |t z}|S|t zr td|S|t zr td|tzr|tzr td|S)Nz)cannot use LOCALE flag with a str patternz(ASCII and UNICODE flags are incompatiblez,cannot use UNICODE flag with a bytes patternz'ASCII and LOCALE flags are incompatible)rXrRSRE_FLAG_LOCALErSRE_FLAG_ASCIISRE_FLAG_UNICODE)srcrs r$ fix_flagsrFs#s ? "HI I~% % %E L% %GH H L # #KL L ? "u~'=FG G Lr&Nct|}| t}||_||_t |||t zd}t ||jj|j_|j|jd|jjD]D}||jjk\sd|z}t|||jj||tzr|j|S)Nrzunbalanced parenthesisr)rrrrRrrrFrFrr.r!r*SRE_FLAG_DEBUGrV)rRrrFr<r6grs r$parserJss^F }EKEI65%*:":A>Ac177==1AGGM {{ll344 WW   .2CS!''"5"5a"89 9!  ~  Hr&c  t|j}gg j} fd fd}j} |}|n|ddk(r~|d}|dk(r7j dsj d j d d }|jr|jsj|d ||} nt|} | tk\r!j d | zt|dz|jr|js^ddl} | j!dj"r t%|n t'|j)t|z dz fzt*d|| t|dznD|dk(rZj,t.vr&||z }j,t.vr ||z }|t1t|ddddzn|t2vrd} j,t2vr~||z }|t.vrl|dt.vraj,t.vrO||z }d} t|ddd}|dkDrj d|zt||t1|| sI|t|ddt|dz n' t1t4|d}||n|| S#t$rtd |zdwxYw#t$r*|t6vrj d|zt|dYjwxYw)Ncjr!jdjn/jdjjddd=y)NrJzlatin-1)rr,joinr)literalrrsr$ addliteralz"parse_template..addliteralsH 88 MM"'''* + MM"'''*11)< = AJr&c~|jkDrjd|z|j|y)Nr)r*r.r,)rirrOpatternrrs r$addgroupz parse_template..addgroups7 7>> !''6>D D  er&TrrrrIr z missing rjs &  <  j ! . / OP } % *j2CDE UBhG H  SY  SY  SY  SY  SY  SY  SY  SY   # $    (N+, - (./0 1 (N+, - (./0 1 (M*+ , (-./ 0             o -0@ @  11  "<"xK>Z&:x{z : x  6Tr&__pycache__/_parser.cpython-312.opt-1.pyc000064400000121570152462750210014063 0ustar00 Th BdZddldZdZedZedZedZedZed Z ee e e hZ eeeeeeehZeed feed feed feed feedfeedfeedfeedfdZeefeefeefeeefgfeeefgfeeefgfeeefgfeeefgfeee fgfee!fd Z"e#e$e%e&e'e(e)e*dZ+e(e$ze*zZ,e-e)zZ.dZ/GddZ0GddZ1GddZ2dZ3dZ4dZ5dZ6d&d Z7d!Z8d"Z9d'd$Z:d%Z;y#)(zInternal support module for sre)*z .\[{()*+?^$|z*+?{ 0123456789012345670123456789abcdefABCDEF4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz      \)z\a\bz\fz\nz\rz\tz\vz\\) z\Arz\Bz\dz\Dz\sz\Sz\wz\Wz\Z)iLmsxatulc<eZdZdZedZddZdZdZdZ y) StatecLd|_i|_dg|_d|_i|_y)N)flags groupdict groupwidthslookbehindgroups grouprefposselfs #/usr/lib64/python3.12/re/_parser.py__init__zState.__init__Ms*  6 $c,t|jSN)lenrr"s r$groupsz State.groupsSs4##$$r&Nc|j}|jjd|jtkDr t d|>|j j |d}|t d|||fz||j |<|S)Nztoo many groupsz7redefinition of group name %r as group %d; was group %d)r*rappend MAXGROUPSerrorrget)r#namegidogids r$ opengroupzState.opengroupVskk % ;; ")* *  >>%%dD1D+.2C$-?@AA#&DNN4  r&c>|j|j|<yr()getwidthr)r#r1ps r$ closegroupzState.closegroupbs ! r&cF||jkxr|j|duSr()r*r)r#r1s r$ checkgroupzState.checkgroupds&T[[ FT%5%5c%:$%FFr&c|jC|j|s|jd||jk\r|jdyy)Ncannot refer to an open groupz?cannot refer to group defined in the same lookbehind subpattern)r r9r.)r#r1sources r$checklookbehindgroupzState.checklookbehindgroupgsX  ,??3'll#BCCd+++ll$;<<, -r&r() __name__ __module__ __qualname__r%propertyr*r3r7r9r=r&r$rrKs0 %% -G>+DAqAq AAq AA!V!VwW XX&B(99 zzr&r(r) r>r?r@r%rVrcrerjrmrqrsr,r5rBr&r$rDrDos5)T  &2r&rDcZeZdZdZdZdZdZdZdZe dZ dZ d Z d d Z d Zy ) Tokenizerct|t|_||_|js t|d}||_d|_d|_|jy)Nlatin1r)rXrRistextstringdecoded_stringrinext_Tokenizer__next)r#rs r$r%zTokenizer.__init__sI -  {{*F$   r&c:|j} |j|}|dk(r|dz } ||j|z }|dz|_||_y#t$r d|_YywxYw#t$r/t d|j t |j dz dwxYw)Nrrzbad escape (end of pattern))rir IndexErrorrr.rr))r#richars r$__nextzTokenizer.__nexts  &&u-D 4< QJE I++E22QY   DI   I9 KKT[[)9A)=?DHI IsA A" AA"8BcD||jk(r|jyy)NTFrr)r#rs r$matchzTokenizer.matchs 499  KKMr&c>|j}|j|Sr(r)r#thiss r$r/z Tokenizer.getsyy  r&czd}t|D]*}|j}||vr|S||z }|j,|SNrJ)rangerr)r#ncharsetresult_cs r$getwhilezTokenizer.getwhile sKqA A  aKF KKM   r&cd} |j}|j|4|s|jd|z|jd|zt|||k(r|s|jd|zd |S||z }w)NrJzmissing zmissing %s, unterminated namer)rrr.r))r# terminatorr0rrs r$getuntilzTokenizer.getuntils A KKMy**Z$%677jj!@:!M!$V..J**Z$%6::  aKFr&cN|jt|jxsdz Srrir)rr"s r$posz Tokenizer.pos"szzC R000r&cN|jt|jxsdz Srrr"s r$tellzTokenizer.tell%szzC R000r&c2||_|jyr()rirrhs r$seekzTokenizer.seek's  r&c|js!|jddjd}t||j|j |z S)Nasciibackslashreplace)rencodedecoder.rr)r#msgoffsets r$r.zTokenizer.error+sC{{**W&89@@ICS$++tyy{V';<r?r@r%rrr/rrrArrrr.rrBr&r$rrsH   111= 6r&rctj|}|r|Stj|}|r |dtur|S |dd}|dk(rZ||j dt z }t |dk7r|jd|zt |tt|dddfS|dk(rf|jrZ||j dt z }t |d k7r|jd|zt |tt|dddfS|d k(rs|jrg||j d t z }t |d k7r|jd|zt |t|ddd}t|t|fS|d k(rg|jr[ddl }|jds|jd|jdd} t|j!|}t|fS|t&vrS||j dt&z }t|ddd }|dkDr|jd|zt |t|fS|t(vrt*t |dk(r:|t,vr|jd|zt |tt|dfS |jd|zt |#t"t$f$r,|jd|zt |t dzdwxYw#t*$rYgwxYw)Nrrrwrincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr/ CATEGORIESrSr HEXDIGITSr)r.LITERALintrchr unicodedatarrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r<escaperprrcharnames r$ _class_escaper8s ;;v D  >>& !D Q2  1 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  )^ fooa3 3FF12J"A5yll$35;$<=@[JJA:  &[  v;! L ll?V#;S[IICq N* *  ,,/V ==)i( Kll#@8#K#&x=3w<#?AFJK K$    sMA#L#A*LA7LA LK*L2AL AL;K==L L  L ctj|}|r|Stj|}|r|S |dd}|dk(rZ||jdtz }t |dk7r|j d|zt |tt|dddfS|dk(rf|jrZ||jdtz }t |dk7r|j d|zt |tt|dddfS|d k(rs|jrg||jd tz }t |d k7r|j d|zt |t|ddd}t|t|fS|d k(rg|jr[d dl }|jds|j d|jdd} t|j|}t|fS|dk(r.||jdt$z }tt|ddd fS|t&vr|j(t&vr||jz }|dt$vrj|dt$vr_|j(t$vrM||jz }t|ddd }|dkDr|j d|zt |t|fSt|dd}||j*krF|j-|s|j dt ||j/||t0|fS|j d|zt |dz t |dk(r:|t2vr|j d|zt |tt|dfS |j d|zt |#t t"f$r,|j d|zt |t dzdwxYw#t4$rYgwxYw)Nrrwrrrrrrrrrrrrrrrrr0rrr;invalid group reference %dr)rr/rrrr)r.rrrrrrrrrrrrrrr*r9r=rrr)r<rrFrprrrgroups r$_escaperts >>& !D  ;;v D  B 1QK 8 fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{all#9F#BCKPPCqr B// / #X&-- fooa3 3F6{b ll#9F#BCKPPF12J#A FA:  #X&-- <<$ll;//s,<=H K **845A:  #X fooa3 3FCqr A.. . &[{{f$&**,&1I*vayI/EKK9,fjjl*FF12J*A5y$ll,;=C,D+.v;88#A:%qr OEu||#''. ,,'F'*6{44**5&9&,,;eCS[ST_U U v;! L ll?V#;S[IICq N* *  ,,/V ==Ki( Kll#@8#K#&x=3w<#?AFJK KF    sZA#O&A*O&A7O&;A O&N(O&'2O&B"O&=A"O& A(O&(;O##O&& O21O2c>ttj|Sr()rPdictfromkeys)itemss r$_uniqrs  e$ %%r&c g}|j}|j}|j} |t||||dz| xr| |dsn|s|jt z}=t |dk(r|dSt|} d} |D]} | sn0| | d} | d| k7sn|D]} | d=|j| < g} |D]_} t | dk7rnq| d\} } | tur| j| | f7| tur | ddtur| j| _n#|jtt| f|S|jtd|ff|S)Nr|r)r,rr_parserSRE_FLAG_VERBOSEr)rDrrSNEGATEextendrrT)r<rFverbosenestedr itemsappend sourcematchstart subpatternprefixitemsetr[r\s r$ _parse_subrs E,,K,,K KKME F65'6A:%:3e)5 63 kk$44G  5zQQxE"J D~aaF" G   f %   C t9> aB = JJBx 2X"Q%(&0 JJrN  2uSz*+ve}-. r&cvt|}|j}|j}|j}t} t } |j } |  nj| dvr nd||r | tvr)| dk(r |} | | dk(rn@| ddk(rt|| |} ||  n| tvr|t| | f n| dk(r|jdz } g}|j}|j dk(r0ddl }|jd |jzt|d z |d } |} | #|jd |j| z | dk(r|rn| ddk(r t!|| }nm|r]| dvrY|j | k(rJddl }|jd| dk(rdn| dk(rdn| dk(rdnd|jdz fzt|d z t| | f}|drY|}|#|jd |j| z |dk(r1|dt"ur|dd}|||t| dfn|ddk(r t!||}nF|dk(r3ddl }|jd|jdz zt|d z t| |f}|dtk7s |dtk7r2d| d|}|j|t | dzt |z|d}|d}||kr2d| d|}|j|t | dzt |z|t$||ffn|dt"ur|dd}||6t'|}| |dk(r3|ddtur%|r|t(|ddf n||d n|r|j+dt,df|t"|fn| t.vrj|j} | dk(rd\}}ne| dk(r dt0}}nV| dk(r dt0}}nG| dk(r3|j d k(r|t| | fdt0}}d!x}}|j t2vr||z }|j t2vr|d"r0|j t2vr ||z }|j t2vrn|}|d s'|t| | f|j5| |rt7|}|t0k\r t9d#|rUt7|}|t0k\r t9d#||kr1|jd$|j| z t;d%|r|d&d}nd}|r|ddt<ur/|jd'|j| z t | z|ddt>vr/|jd(|j| z t | z|ddt@ur|dd\}}}}||s|s|}|drtB|||ff|d&<n|drtD|||ff|d&<ntF|||ff|d&<nq| d)k(r|tHdfn\| d*k(r|jdz } d}!d+}"d}#d}d}|drE|}||jd,|d-k(r&|d.r&|jKd/d0}#|jM|#dn|d1r|jKd2d0}#|jM|#d|jNj|#}$|$#d3|#z}|j|t |#dz|jQ|$s|jd4t |#dz|jS|$||tT|$fT|}||jd,|jd5|zt |dz|d6k(rd+}!n|dk(r> |j #|jd7|j| z |d2k(rn;|d8vrd}%|d.k(r`|}||jd,|d9vr!|jd:|zt |dzd&}%|jV}&|&|jX|_+t[||||dz}|%dkr &d|_+|d2s#|jd;|j| z |d1k(r|t\|%|ffn|t^|%|ff|d*k(rE|jKd2d0}'|'jar|'jcsS|jM|'d|jNj|'}(|(5d3|'z}|j|t |'dzt7|'}(|(s|jd|jhr tk|'n tm|'|jt |'z dz fztn|d z |jS|(|tq||||dz})|jd?r1tq||||dz}*|j d?k(r|jd@d}*|jd2s#|jd;|j| z |tr|(|)|*ff |d/k(rd+}!d}"n|ttvs|dk(rStw|||}+|+<|r|r#|jdA|j| z |jxtzz} e|+\}}d+}!n!|jdB|zt |dz|!r |j}|#}nd}|xs |tzzxr |tzz }-t[|||-|dz}|jd2s#|jd;|j| z ||j|||"r|t|fnQ|t@||||ffn>| d k(r|t<tfn&| dCk(r|t<tfnt;dD ztt |ddd&D]+}.||.\}/}0|/t@us|0\}}}}||r!|r$|||.|.dz-|S#t$r.},|j|,j~t |#dzdd},~,wwxYw)ENTz|)#r rr[rz"Possible nested set at position %dr stacklevel^zunterminated character set]z-&~|zPossible set %s at position %d- difference& intersection~zsymmetric differenceunionz&Possible set difference at position %drwzbad character range ?)rrr+rrrJ,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier rvznothing to repeatzmultiple repeat.(Fzunexpected end of patternP<> group name=)unknown group name %rr;zunknown extension ?P:zmissing ), unterminated commentz=!#+ 6 ' &  1 @33 *fqj&$T$Z/Es#$;D|$ll+G+1;;=4+?AAs{ 8r>$)!HQKE!%(!7DI"67Aw$ -fd ;3;+$MM H$*KKMA$5!7 -&1** !(d 3Qx7*eAh'.A=A4H$ll3D A D 0IJJqBqBBw=A4H$ll3D A D 0IJJur2h/0Qx2~ %a e$sv*CCyA~#a&)w"6$k3q6!9%=>$SV,JJq64.1!"c+ \ !;;=Ds{SiSiS;;#%$gtDz%:;iS RkkV+)+%BkkV+s# ++/ik)!++/B"3'$gtDz%:;KK%b'Ci'+,PQQb'Ci'+,PQQSy$ll+O+1;;=4+?AA%D%JKK!"#471:+ll#6#);;=4#7#d)#CEEAwqz\)ll#4#);;=4#7#d)#CEEAwqzZ'15a.y)Q=9D3",sC.>!? 2S!"3c35E!F 2#-sC.>!? 2 S[ c4[ ) S[KKMA%EGFDII3 {< ,,'BCC3;"3'%sLA--dA6$S)%sLA--dA6#oo11$7;"9D"@C"(,,sCIM"BB$//4"(,,/N/24y1}#>>223?((C9  ){<"(,,/J"KK$ll+AD+H+.t9q=::S[#GS[!;;."(,,/P/5{{}u/D#FF$;#-!  U]Cs{({<"(,,/J"KKt+"(,,/E/L/24y1}#>> +0+A+A(+35:\\E2"65'6A:FAQw+359E2&s+$ll+O+1;;=5+@BBs{(&3();<(*sAh)?@S[%sLAH$..0X5E5E5G--h:$)OO$7$7$A $,"9H"DC"(,,sCMA4E"FF$'M ("(,,/A/28}q/@#BB$ 1">"JC"(,,sCMA4E"FF$E,=,== & H = A"--i8!) 2 2 49I9I9K+$MM O39==heHo!'X!>!B!D!D!3vz * ..y&A%feWfqjIH||C("(!"L!;;#-"(,,/`"aa"&!<<,$ll+O+1;;=5+@BB$o 8W7U%VWS[#G!FU]dck(=E}$ "(,,0C/5{{}u/D#FF#(++0@"@ +0(Iy#G ,,' ),< <= 65+vzBA<<$ll#G#);;=5#8::   * ,!23 *uiA.N!OP S[ b,/ 0 S[ b&\ *!t!MN NM R 3z? #DbD )AB  -/ *E9i}Yy%& 1ac" * GI ,,swwD A >DHIs t t8 )t33t8cJ|j}d}d}|dk7r t|}|jr|dk(r+d}|j||dk(rd}|j|||z}|tzr|tz|k7rd}|j||}||jd|d vrn8|tvr/|j rd nd}|j|t ||d k(r|xj|zc_y|tzr|jd d |dk(r|}||jd|tvr/|j rd nd}|j|t | t|}|tzrd}|j|||z}|}||jd|dk(rn8|tvr/|j rd nd}|j|t ||tzr|jdd ||zr|jdd ||fS)Nrrrz8bad inline flags: cannot use 'L' flag with a str patternrz:bad inline flags: cannot use 'u' flag with a bytes patternz9bad inline flags: flags 'a', 'u' and 'L' are incompatiblezmissing -, : or )z)-:z unknown flagr z,bad inline flags: cannot turn on global flagrz missing flagz8bad inline flags: cannot turn off flags 'a', 'u' and 'L'z missing :rz-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and off) r/r%rr. TYPE_FLAGSisalphar)r GLOBAL_FLAGS)r<rFrr+r4r5flagrs r$r&r&}s: III s{;D}}3;TC ,,s++3;VC ,,s++  Iz! J(>4'GQll3'';D|ll#677u}5 (, n|tzr td|tzs |t z}|S|t zr td|S|t zr td|tzr|tzr td|S)Nz)cannot use LOCALE flag with a str patternz(ASCII and UNICODE flags are incompatiblez,cannot use UNICODE flag with a bytes patternz'ASCII and LOCALE flags are incompatible)rXrRSRE_FLAG_LOCALErSRE_FLAG_ASCIISRE_FLAG_UNICODE)srcrs r$ fix_flagsrFs#s ? "HI I~% % %E L% %GH H L # #KL L ? "u~'=FG G Lr&Nct|}| t}||_||_t |||t zd}t ||jj|j_|j|jd|jjD]D}||jjk\sd|z}t|||jj||tzr|j|S)Nrzunbalanced parenthesisr)rrrrRrrrFrFrr.r!r*SRE_FLAG_DEBUGrV)rRrrFr<r6grs r$parserJss^F }EKEI65%*:":A>Ac177==1AGGM {{ll344 WW   .2CS!''"5"5a"89 9!  ~  Hr&c  t|j}gg j} fd fd}j} |}|n|ddk(r~|d}|dk(r7j dsj d j d d }|jr|jsj|d ||} nt|} | tk\r!j d | zt|dz|jr|js^ddl} | j!dj"r t%|n t'|j)t|z dz fzt*d|| t|dznD|dk(rZj,t.vr&||z }j,t.vr ||z }|t1t|ddddzn|t2vrd} j,t2vr~||z }|t.vrl|dt.vraj,t.vrO||z }d} t|ddd}|dkDrj d|zt||t1|| sI|t|ddt|dz n' t1t4|d}||n|| S#t$rtd |zdwxYw#t$r*|t6vrj d|zt|dYjwxYw)Ncjr!jdjn/jdjjddd=y)NrJzlatin-1)rr,joinr)literalrrsr$ addliteralz"parse_template..addliteralsH 88 MM"'''* + MM"'''*11)< = AJr&c~|jkDrjd|z|j|y)Nr)r*r.r,)rirrOpatternrrs r$addgroupz parse_template..addgroups7 7>> !''6>D D  er&TrrrrIr z missing rks &  <  j ! . / OP } % *j2CDE UBhG H  SY  SY  SY  SY  SY  SY  SY  SY   # $    (N+, - (./0 1 (N+, - (./0 1 (M*+ , (-./ 0             o -0@ @  11  "<"xK>Z&:x{z : x  6Tr&__pycache__/_casefix.cpython-312.opt-2.pyc000064400000003432152462750210014206 0ustar00 ThD<idddddddddd d d d d ddddddddddddddddddd d!id"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCidDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcZyd)ei)1s))r)rr)rE))))))r )rr )r)r)))r)r)r)rr)rr)rr)rr)rr)rr)r2)4)>)A)B)J)c)r )rr")r!r$)r#r&)r%r()r'r)r))r'r(r+)r*r-)r,)Ka)r1)r0r )rr r )r r)r r/)r.)r3)r2N) _EXTRA_CASES$/usr/lib64/python3.12/re/_casefix.pyr8s e Ie I e  I e Ie Ie e Ie  I!e$ I%e( I)e, I-e0 1e4 I5e8 I9e< I=e@ IAeD IEeH IIeL IMeP IQeT IUeX IYe\ I]e` Iaed Ieeh Iiel Imep Iqet Iuex Iye| }e@ IAeD IEeH IIeL IMeP IQeT IUeX Ye\ ]e` Iaed Ieeh Iiel Imep Iqet uex Iye| I}e@ IAeD IEeH IIe r6__pycache__/_compiler.cpython-312.pyc000064400000063600152462750210013441 0ustar00 Thg`dZddlZddlmZddlddlmZejek(sJdee hZ e e hZ eehZe eehzZeeeefeeeefeee efiZej<fdZd Z d Z!dd Z"ejFd zZ$de$zdz Z%d Z&e$e'fdZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3ddZ4y)zInternal support module for sreN)_parser)*) _EXTRA_CASESzSRE module mismatchc*||zr||z}||z|zSN)flags add_flags del_flags TYPE_FLAGSs %/usr/lib64/python3.12/re/_compiler.py_combine_flagsrs(: * I ) ++c  |j}t}t}t}t}t }d} d} d} |t zrY|tzsP|tzr'tj} tj} t} n tj} tj} |D]d\} } | |vr|t zs|| || &|tzr|t| || G| | s|| || `| | }| s|t | |||| vr|t"| |||t$||}|d| t&ur |t(|f| |zD]}|t*|||t,|||z ||< | t.urt1| | | | \}}|t zr|tzr |t2n*|s |t.n| s |t4n |t$||}|dt7||||||z ||<| t8ur%|t:zr|t<|t8| |vr|t>zrtAd| tC| dr`||| d||}|d|| d|| dtE|| d||tF|||z ||<Q||| d||}|d|| d|| dtE|| d||||z ||<||| d| tHur^| \}}}}|r|tJ||dz dztE||tM||||s|tJ||dz dzdz| tNurE|tN||}|dtE|| ||tF|||z ||<f| |vr || t| |vr|| ||}|d| ddk\r |dnB| djQ\}}|tRkDr tAd||k7r tAd||tE|| d||tF|||z ||<| tTurp|| |tVzrtXj[| | } |tzrt\j[| | } n|tzrt^j[| | } || | t`ur|| g}|j}| dD]O} ||}|dtE|| ||tb||||d|||z ||<Q|t,|D]}|||z ||<| tdur7|| |tzr tf| } n|tzr th| } || ^| tjurP|t zs || n1|tzr |tln| s |tnn |tp|| dz | trur|| || ddz ||}|dtE|| d|| drM|tb||}|d|||z dz||<tE|| d||||z ||<F|||z dz||<YtAd| y)Nrz(internal: unsupported template operator rzlooks too much behindz(look-behind requires fixed-width patternz#internal: unsupported operand type ):appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES _ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODE_sreunicode_iscasedunicode_tolowerr ascii_iscased ascii_tolowerOP_LOCALE_IGNORE OP_IGNOREOP_UNICODE_IGNORE IN_UNI_IGNORE NOT_LITERALNEGATELITERALFAILUREIN_optimize_charset IN_LOC_IGNORE IN_IGNORE_compile_charsetANYSRE_FLAG_DOTALLANY_ALLSRE_FLAG_TEMPLATEerror_simple_compileSUCCESS SUBPATTERNMARKr ATOMIC_GROUPgetwidthMAXCODEATSRE_FLAG_MULTILINE AT_MULTILINEget AT_LOCALE AT_UNICODEBRANCHJUMPCATEGORY CH_LOCALE CH_UNICODEGROUPREFGROUPREF_LOC_IGNOREGROUPREF_IGNOREGROUPREF_UNI_IGNOREGROUPREF_EXISTS)codepatternr emit_len LITERAL_CODESREPEATING_CODES SUCCESS_CODES ASSERT_CODESiscasedtolowerfixesopavloskipkcharsethascasedgroupr r phitail tailappendskipyesskipnos rr4r4%s ;;D D"M&O"M LGG E ""5?+B # #**G**G E((G((GB  ..RR(%b)*RR[RRR[2'Hu_*2./H':DtAw[(V  UU2Y.W Q/M!%dd!2DJ 2X 1"gw N GX**u/F]#RY]#:DtAw WeT 2dd*DJ 3Y&W S ? "((BPQQr!u~_R(+,Dz47RU RU r!ue,W !$Z$.T _R(+,Dz47RU RU r!ue,!$Z$.T _R(+, : -/ *E9iT eAgq[! T1nUIyI JT eAgq[]# <   :DtAw T2u % Mdd*DJ = H <  H:DtAw!uzQA)B< 7888 JKKR T2a5% ( Mdd*DJ 2X H))!%%b"-&]]2r*))^^B+ H 6\ HDJeDz47r5)T 4:&Q!$Z$.T  M!$Z$.T  8^ H&r]))^ H 8^..R(()_%() AJ ? " H AqM4jG$q' T2a5% (!uT dT!W $T W 4q 8W r!ue,#DzF2V $T W 4q 8W 2GH H}rc|j}|D]\}}|||tur|tur ||(|tus|tur||d||dO|t ur|j |i|tur|j ||tur;|tzr|t||tzr|t|||td||ty)Nrrz#internal: unsupported set operator )rr&r'RANGERANGE_UNI_IGNORECHARSETextend BIGCHARSETrCrrDrrEr2r()r[r rKrMrVrWs rr-r-s ;;DB R <  7] H 5[B"22 AK AK 7] KKO :  KKO 8^&Yr]#))Z^$R2GH H+, Mrcrg}g}td}d}|D]\}} |tur7|r/|| } d|| <|r| |vr|| D]} d|| < |s|| rd}nd|| <n|turt| d| ddz} |r[|r+t || D]} d|| <| |vs || D]} d|| < nt || D]} d|| < |sRt t || }n<| D]} d|| < n/|t ur|j|| fn|j|| fg} d} |jd|}|dkrnYt| dk\rd} nH|jd|}|dkr| j|t|fn| j||fq| l| D]A\}}||z dk(r|jt|f&|jt||dz ffC||z }|st|t|kr||fS||fSt|dk(r+t|}|jt|f||z }||fSt|}i}td}d}t}tdd dD]1} || | dz}||vr |||| dz<|x|| dz<||<|dz }||z }3t|}|gt|z|dd|jt |f||z }||fS#t$r[t|dk(r |ddzz }Y|r)|tur |rt}d}n|tusJ|s || rd}|j|| fY$wxYw) NFTrriri) bytearrayr'rerangemapanyr&r IndexErrorrrffind _mk_bitmaprgbytes_bytes_to_codesri)r[rSfixuprUoutr`charmapr\rVrWrZrirunsqr^datacompsmappingblockchunks rr*r*s C DnGHB; &="2Y&'  R5[%*2Y-. &/'GBK'+H&' 5[beRU1W-A %(]-. #$:-21X56 .6&3 &)]-. &3''*3w?';H!"A)*GAJ"#6\JJBx(KKR)8 }B D A  LLA  q5  t9>D  LLA  q5 KKCL) *  QF  DAq1uz GQ<( EAq1u:./  t  s3x#g,.=    7|s'" GT?# t H},GnG EnG E ;D 1eS !1s7# E> %e GAH /4 4GAH e QJE EMD" d D/'22D1IJJ D!"4KC =M &w<3&uv~-GU{ !1B#'!W},}'GBK'+H RH%5 &sA8KAL65L6s0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111c|jtddd}tt|d| Dcgc]}||||z |dc}Scc}w)Nrr) translate _BITS_TRANSrnr)bits _CODEBITS_intsrzs rrsrss_ {#DbD)A3q61yj1 31 1y=!$a (1 33 3sAct|jd}|jtjk(sJt ||jzt |k(sJ|j S)NI) memoryviewcastitemsizerCODESIZErtolist)bas rrurusW1 3A :: && & q6AJJ #a& (( ( 88:rc~t|dk7ry|d\}}|tur|dduxrt|dS|tvS)NrFrr)rr6r3 _UNIT_CODES)r^rVrWs rr3r3sK 1v{ qTFB Z!u}0B0  rcdgt|z}tdt|D]<}||dz }||||k7r|dk(rd||<!||dz }||||k7r|dz||<>|S)aj Generate an overlap table for the following prefix. An overlap table is a table of the same size as the prefix which informs about the potential self-overlap for each index in the prefix: - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with prefix[0:k] rr)rrn)prefixtablerzidxs r_generate_overlap_tablersC#f+ E 1c&k "AElQi6#;&axaa.C Qi6#;& QwE!H# Lrch|tzsy|tzrtjStjSr)rrrrr)r s r _get_iscasedrs/ & & ! !###!!!rcg}|j}d}t|}|jD]\}}|tur|r ||rn||#|turn|\}} } } t || | } | t zr | tzrnNt| | \} }}|| t|}n|t||z}|j| |rnn||dfS||dfS)NTF) rrr}r'r6rrr_get_literal_prefixrrh)rLr r prefixappend prefix_skiprSrVrWr]r r r^flags1prefix1 prefix_skip1got_alls rrrs F==LK5!G,,B =72;   : -/ *E9i#E9i@F++0H-@F-K *G\7"$"%f+K!-"%f+ "?#" rc |j\}}|tkDrt}|dk(r|jtdd||gyg}d}g}|tzr |t zst ||\}}}|s t||}|j} | tt|} | dd} |rt} |r| tz} n |r | tz} | | |tkr | |n| t|dt}| ||rR| t|| t|}| ||j||jt|n!|rt|\}} | rJt|||t|| z || <y)Nr)r9r:rhINFOrrrrrrSRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrr*r-) rKrLr rXr_rrr[rrMrYmaskr\s r _compile_infors~   FB G|  Qw T1aR() FKG ' 'EO,C':7E'J$ W)'59G ;;DJ t9Dd1g D   7**D &&J G| R W !H  S[  v;K [ F +F34 -g6|%.TT!DJrc.t|ttfSr) isinstancestrrt)objs risstringr?s cC< ((rc|jj|z}g}t|||t||j||j t |Sr)stater rr4r}rr5)r^r rKs r_coderBsJ GGMME !E D$5! T1665!KK Krc8ddjd|DzS)N[%s], c3RK|]}dtjdzdz|fz!yw)z%#0*xrN)rr.0xs r z_hex_code..Rs(M1gq):A(>>s%')join)rKs r _hex_coderQs DIIMMM MMrcddltdtttdz fddty)Nrrc  ddfd }fd}dz }||kr#||}|dz }t|}|ttttt t tfvr ||n|ttttttttfvr#|}|dz }||d|t!|fzn|t"ur4|}|dz }t%t&|}|dddk(sJ|||ddnK|t(ur4|}|dz }t%t*|}|ddd k(sJ|||ddn|t,t.t0t2fvr)|}|||||z|dz||z||z }n|t4t6fvr4||d z\}} |d z }||d || t!|t!| fzn|t8ur-||t;||d t<zz|d t<zz }nW|t>ur|}|dz }tAd jCfd||d tDjFzzD} |||| |d tDjFzz }dz tI|D],} |t;||d t<zz|d t<zz }.dzn|tJtLtNtPtRfvr|}|dz }|||ns|tTur|}|||||z|dz }nQ|tVurW|}|||||z|r;|dz||z||z }||}|r|d|||zn |t|r;|dz }n|tXtZt\t^t`fvr=||dz\}} } | tbk(rd} |||| | ||z|dz||z||z }n|tdur!||d z\}}||||||z|d z }no|tfthfvr0||d z\}}||||||z|d z||z||z }n1|tjur)|}|||||z|dz||z||z }n|tlur||dz\}}} } | tbk(rd} |||to|| | ||z|dz|tpzr|dz|dz\}}|d||dz|z}|dddjCd|DzddjCtst |z|z |d|z|z |ttzrdz |d||zdz||z }n tw|||kr#dzy)N)toc|j||d|fzfz }tdvrdndfzddz zt|y)Nz(to %d)z%*d%s :.z rend)addprint)rargslabelslevel offset_widthstarts rprint_z!dis..dis_..print_\sW~ 2bU*,, (lE%6/3sSSE!Gn & 4Lrc@tddzzzt|y)N rr)r)rrrs rprint_2z"dis..dis_..print_2ds c.dis_..s-(R1PA)* 4==#--(P1Ps47branch MAXREPEATrz prefix_skipz prefixrrc3&K|] }d|z yw)z%#02xNr rs rrz$dis..dis_..s.KFqw{Fsz(%r)z overlapin)<OPCODESr5r(r.r0 MAX_UNTIL MIN_UNTILr&r'r%LITERAL_IGNORENOT_LITERAL_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREchrr;rATCODESrCCHCODESr)r,r$r+rerfrgrrrilistrrrrnr7rFrHrIrGrBrAREPEAT REPEAT_ONEMIN_REPEAT_ONEPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONErrJASSERT ASSERT_NOTr8rbinrror ValueError)rrrrrzrVargrYrXr_rjminmaxr prefix_lenrrrKdis_rrrrs` rrzdis..dis_[s*!      #gEaB FABgwWF44r &(:*,B*,BDD1gQr<3C/9:r1gQ'#,'2Aw%'''r3qr7#x1gQ'#,'2Aw+---r3qr7#I}mDDAwr4AdF+QqS!D&!T /00a1BQr0BCGSW3MMNwr9T!Qi-?%@ABS)^#z!1gQsxx(R15aS$--=O9O1P(R RSr3(S$--'' sAId1a#y..@&ABCi'A$ h9L+--1gQr3tAwr4AdF+QvAwr4AdF+1af%IAE7Dx!D&9wQ N)+@BB!%a1c3)#%Cr4caf5QqS!D&!T & AaCL Tr340Q ++ AaCL cr440QqS!D&!T |#Awr4AdF+QqS!D&!T t(,Q! %eS#)#%Cr4US#!D&A!?*.21Q3!n+J O[9EE!%z)9:FJ"TYY.KF.K%KK"RWWSf-=%>>@Z'EKeU:5E)FGZ'E++QJEDM$'QJET  n$o#gr  r)rsetrr)rKrrrrrs`@@@@@rdisrTsF UF Es3t9q=)*LIIV CIrc t|r|}tj||}nd}t||}|tzrt t ||jj}dg|jjz}|jD] \}}|||< tj|||jjz||jjdz |t|S)Nr)rrparserSRE_FLAG_DEBUGrrr groupdictgroupsitemsrcompiler tuple)r^r rLrK groupindex indexgrouprZrzs rrrs{ MM!U # E?D ~  D ""J!''..(J  "1 1 # <<& qE*%  r)NNN)r)5__doc__rrr _constants_casefixrMAGICr'r%rr5r(rrrrr.r)r MIN_REPEATrrr MAX_REPEATrrrrrr rr4r-r*rrr:rintrsrur3rrrrrrrrrrr rrrs& " zzU111;'7#$ Ry( N3J/)74IJ&00, qIf6Ob MMA  >Q  (s3 *"&>*X9"v) NRj r__pycache__/_constants.cpython-312.opt-1.pyc000064400000012271152462750210014600 0ustar00 Th*dZdZddlmZmZGddeZGddeZeedZd Z e d Z e d d =e d ddddddddddd Z e dddddddd d!d"d#d$d%d&d'd(d)d*Z e eeeiZe eeeiZe eeeiZeeeeiZeeee iZ!ee"ee#iZ$e%e%e&e&e'e'e(e(e)e*e+e,e-e-e.e.iZ/e%e0e&e1e'e2e(e3e)e4e+e5e-e6e.e7iZ8d+Z9d,Z:d-Z;d.Zd1Z?d2Z@d3ZAd+ZBd,ZCd-ZDy )4zInternal support module for srei_4) MAXREPEAT MAXGROUPSc(eZdZdZdZdfd ZxZS)erroraiException raised for invalid regular expressions. Attributes: msg: The unformatted error message pattern: The regular expression pattern pos: The index in the pattern where compilation failed (may be None) lineno: The line corresponding to pos (may be None) colno: The column corresponding to pos (may be None) recX||_||_||_|u|sd||fz}t|trd}nd}|j |d|dz|_||j|d|z |_||vr+d||j |jfz}ndx|_|_t|)|y)Nz%s at position %d  rz%s (line %d, column %d)) msgpatternpos isinstancestrcountlinenorfindcolnosuper__init__)selfr r rnewline __class__s &/usr/lib64/python3.12/re/_constants.pyrzerror.__init__%s   3?%c 2C'3'!--C81tt| ||}||_|SN)rr#__new__name)clsvaluer'rrs rr&z_NamedIntConstant.__new__9s#&4S%@  rc|jSr%)r')rs r__repr__z_NamedIntConstant.__repr__>s yyrN)rrrr&r+ __reduce__r r!s@rr#r#8s Jrr#rct|Dcgc]\}}t||}}}tj|Dcic]}|j|c}|Scc}}wcc}wr%) enumerater#globalsupdater')namesir'itemsitems r _makecodesr5Es^7@7G H7GGAt q$ '7GE H I%8%$diio%89 L I8s AA")-FAILURESUCCESSANYANY_ALLASSERT ASSERT_NOTATBRANCHCATEGORYCHARSET BIGCHARSETGROUPREFGROUPREF_EXISTSININFOJUMPLITERALMARK MAX_UNTIL MIN_UNTIL NOT_LITERALNEGATERANGEREPEAT REPEAT_ONE SUBPATTERNMIN_REPEAT_ONE ATOMIC_GROUPPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONEGROUPREF_IGNORE IN_IGNORELITERAL_IGNORENOT_LITERAL_IGNOREGROUPREF_LOC_IGNORE IN_LOC_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREGROUPREF_UNI_IGNORE IN_UNI_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORERANGE_UNI_IGNORE MIN_REPEAT MAX_REPEATN AT_BEGINNINGAT_BEGINNING_LINEAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYAT_END AT_END_LINE AT_END_STRINGAT_LOC_BOUNDARYAT_LOC_NON_BOUNDARYAT_UNI_BOUNDARYAT_UNI_NON_BOUNDARYCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORDCATEGORY_LINEBREAKCATEGORY_NOT_LINEBREAKCATEGORY_LOC_WORDCATEGORY_LOC_NOT_WORDCATEGORY_UNI_DIGITCATEGORY_UNI_NOT_DIGITCATEGORY_UNI_SPACECATEGORY_UNI_NOT_SPACECATEGORY_UNI_WORDCATEGORY_UNI_NOT_WORDCATEGORY_UNI_LINEBREAKCATEGORY_UNI_NOT_LINEBREAKr  @)ErMAGIC_srerr Exceptionrintr#r5OPCODESATCODESCHCODESrFrVrJrW OP_IGNORErZr[OP_LOCALE_IGNOREr^r_OP_UNICODE_IGNORErdrerirj AT_MULTILINErgrlrhrm AT_LOCALErnro AT_UNICODErprqrrrsrtrxruryrvrw CH_LOCALErzr{r|r}r~rrr CH_UNICODESRE_FLAG_TEMPLATESRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLSRE_FLAG_UNICODESRE_FLAG_VERBOSESRE_FLAG_DEBUGSRE_FLAG_ASCIISRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrrrs& % IB   i 5  0 b BCL ')>$ m_,,  **(20220: " ^#   '  ' # K (  ( N*N*$,*2  &.&.$,.6  r__pycache__/_compiler.cpython-312.opt-2.pyc000064400000062053152462750210014402 0ustar00 Thg2 ddlZddlmZddlddlmZeehZe e hZ e e hZeeehzZeeeefeeeefeee efiZej8fdZdZdZdd Z ejBd zZ"de"zdz Z#d Z$e"e%fd Z&d Z'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1ddZ2y)N)_parser)*) _EXTRA_CASESc*||zr||z}||z|zSN)flags add_flags del_flags TYPE_FLAGSs %/usr/lib64/python3.12/re/_compiler.py_combine_flagsrs(: * I ) ++c  |j}t}t}t}t}t }d} d} d} |t zrY|tzsP|tzr'tj} tj} t} n tj} tj} |D]d\} } | |vr|t zs|| || &|tzr|t| || G| | s|| || `| | }| s|t | |||| vr|t"| |||t$||}|d| t&ur |t(|f| |zD]}|t*|||t,|||z ||< | t.urt1| | | | \}}|t zr|tzr |t2n*|s |t.n| s |t4n |t$||}|dt7||||||z ||<| t8ur%|t:zr|t<|t8| |vr|t>zrtAd| tC| dr`||| d||}|d|| d|| dtE|| d||tF|||z ||<Q||| d||}|d|| d|| dtE|| d||||z ||<||| d| tHur^| \}}}}|r|tJ||dz dztE||tM||||s|tJ||dz dzdz| tNurE|tN||}|dtE|| ||tF|||z ||<f| |vr || t| |vr|| ||}|d| ddk\r |dnB| djQ\}}|tRkDr tAd||k7r tAd||tE|| d||tF|||z ||<| tTurp|| |tVzrtXj[| | } |tzrt\j[| | } n|tzrt^j[| | } || | t`ur|| g}|j}| dD]O} ||}|dtE|| ||tb||||d|||z ||<Q|t,|D]}|||z ||<| tdur7|| |tzr tf| } n|tzr th| } || ^| tjurP|t zs || n1|tzr |tln| s |tnn |tp|| dz | trur|| || ddz ||}|dtE|| d|| drM|tb||}|d|||z dz||<tE|| d||||z ||<F|||z dz||<YtAd| y)Nrz(internal: unsupported template operator rzlooks too much behindz(look-behind requires fixed-width patternz#internal: unsupported operand type ):appendlen_LITERAL_CODES_REPEATING_CODES_SUCCESS_CODES _ASSERT_CODESSRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_UNICODE_sreunicode_iscasedunicode_tolowerr ascii_iscased ascii_tolowerOP_LOCALE_IGNORE OP_IGNOREOP_UNICODE_IGNORE IN_UNI_IGNORE NOT_LITERALNEGATELITERALFAILUREIN_optimize_charset IN_LOC_IGNORE IN_IGNORE_compile_charsetANYSRE_FLAG_DOTALLANY_ALLSRE_FLAG_TEMPLATEerror_simple_compileSUCCESS SUBPATTERNMARKr ATOMIC_GROUPgetwidthMAXCODEATSRE_FLAG_MULTILINE AT_MULTILINEget AT_LOCALE AT_UNICODEBRANCHJUMPCATEGORY CH_LOCALE CH_UNICODEGROUPREFGROUPREF_LOC_IGNOREGROUPREF_IGNOREGROUPREF_UNI_IGNOREGROUPREF_EXISTS)codepatternr emit_len LITERAL_CODESREPEATING_CODES SUCCESS_CODES ASSERT_CODESiscasedtolowerfixesopavloskipkcharsethascasedgroupr r phitail tailappendskipyesskipnos rr4r4%s ;;D D"M&O"M LGG E ""5?+B # #**G**G E((G((GB  ..RR(%b)*RR[RRR[2'Hu_*2./H':DtAw[(V  UU2Y.W Q/M!%dd!2DJ 2X 1"gw N GX**u/F]#RY]#:DtAw WeT 2dd*DJ 3Y&W S ? "((BPQQr!u~_R(+,Dz47RU RU r!ue,W !$Z$.T _R(+,Dz47RU RU r!ue,!$Z$.T _R(+, : -/ *E9iT eAgq[! T1nUIyI JT eAgq[]# <   :DtAw T2u % Mdd*DJ = H <  H:DtAw!uzQA)B< 7888 JKKR T2a5% ( Mdd*DJ 2X H))!%%b"-&]]2r*))^^B+ H 6\ HDJeDz47r5)T 4:&Q!$Z$.T  M!$Z$.T  8^ H&r]))^ H 8^..R(()_%() AJ ? " H AqM4jG$q' T2a5% (!uT dT!W $T W 4q 8W r!ue,#DzF2V $T W 4q 8W 2GH H}rc|j}|D]\}}|||tur|tur ||(|tus|tur||d||dO|t ur|j |i|tur|j ||tur;|tzr|t||tzr|t|||td||ty)Nrrz#internal: unsupported set operator )rr&r'RANGERANGE_UNI_IGNORECHARSETextend BIGCHARSETrCrrDrrEr2r()r[r rKrMrVrWs rr-r-s ;;DB R <  7] H 5[B"22 AK AK 7] KKO :  KKO 8^&Yr]#))Z^$R2GH H+, Mrc^g}g}td}d}|D]\}} |tur7|r/|| } d|| <|r| |vr|| D]} d|| < |s|| rd}nd|| <n|turt| d| ddz} |r[|r+t || D]} d|| <| |vs || D]} d|| < nt || D]} d|| < |sRt t || }n<| D]} d|| < n/|t ur|j|| fn|j|| fg} d} |jd|}|dkrnYt| dk\rd} nH|jd|}|dkr| j|t|fn| j||fq| l| D]A\}}||z dk(r|jt|f&|jt||dz ffC||z }|st|t|kr||fS||fSt|dk(r+t|}|jt|f||z }||fSt|}i}td}d}t}tdd dD]1} || | dz}||vr |||| dz<|x|| dz<||<|dz }||z }3t|}|gt|z|dd|jt |f||z }||fS#t$rQt|dk(r |ddzz }Y|r|tur |rt}d}n |s || rd}|j|| fYwxYw) NFTrriri) bytearrayr'rerangemapanyr&r IndexErrorrrffind _mk_bitmaprgbytes_bytes_to_codesri)r[rSfixuprUoutr`charmapr\rVrWrZrirunsqr^datacompsmappingblockchunks rr*r*s C DnGHB; &="2Y&'  R5[%*2Y-. &/'GBK'+H&' 5[beRU1W-A %(]-. #$:-21X56 .6&3 &)]-. &3''*3w?';H!"A)*GAJ"#6\JJBx(KKR)8 }B D A  LLA  q5  t9>D  LLA  q5 KKCL) *  QF  DAq1uz GQ<( EAq1u:./  t  s3x#g,.=    7|s'" GT?# t H},GnG EnG E ;D 1eS !1s7# E> %e GAH /4 4GAH e QJE EMD" d D/'22D1IJJ D!"4KC =M &w<3&uv~-GU{ !1B#' (GBK'+H RH%5 &sA8KA|S)Nrr)rrn)prefixtablerzidxs r_generate_overlap_tablersC#f+ E 1c&k "AElQi6#;&axaa.C Qi6#;& QwE!H# Lrch|tzsy|tzrtjStjSr)rrrrr)r s r _get_iscasedrs/ & & ! !###!!!rcg}|j}d}t|}|jD]\}}|tur|r ||rn||#|turn|\}} } } t || | } | t zr | tzrnNt| | \} }}|| t|}n|t||z}|j| |rnn||dfS||dfS)NTF) rrr}r'r6rrr_get_literal_prefixrrh)rLr r prefixappend prefix_skiprSrVrWr]r r r^flags1prefix1 prefix_skip1got_alls rrrs F==LK5!G,,B =72;   : -/ *E9i#E9i@F++0H-@F-K *G\7"$"%f+K!-"%f+ "?#" rc|j\}}|tkDrt}|dk(r|jtdd||gyg}d}g}|tzr |t zst ||\}}}|s t||}|j} | tt|} | dd} |rt} |r| tz} n |r | tz} | | |tkr | |n| t|dt}| ||rR| t|| t|}| ||j||jt|n|rt|\}} t|||t|| z || <y)Nr)r9r:rhINFOrrrrrrSRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrr*r-) rKrLr rXr_rrr[rrMrYmaskr\s r _compile_inforsv   FB G|  Qw T1aR() FKG ' 'EO,C':7E'J$ W)'59G ;;DJ t9Dd1g D   7**D &&J G| R W !H  S[  v;K [ F +F34 -g6%.TT!DJrc.t|ttfSr) isinstancestrrt)objs risstringr?s cC< ((rc|jj|z}g}t|||t||j||j t |Sr)stater rr4r}rr5)r^r rKs r_coderBsJ GGMME !E D$5! T1665!KK Krc8ddjd|DzS)N[%s], c3RK|]}dtjdzdz|fz!yw)z%#0*xrN)rCODESIZE.0xs r z_hex_code..Rs(M1gq):A(>>s%')join)rKs r _hex_coderQs DIIMMM MMrcddltdtttdz fddty)Nrrc l ddfd }fd}dz }||kr||}|dz }t|}|ttttt t tfvr ||n|ttttttttfvr#|}|dz }||d|t!|fzns|t"ur*|}|dz }t%t&|}|||ddnA|t(ur*|}|dz }t%t*|}|||ddn|t,t.t0t2fvr)|}|||||z|dz||z||z }n|t4t6fvr4||dz\}} |dz }||d || t!|t!| fzn|t8ur-||t;||d t<zz|d t<zz }nW|t>ur|}|dz }tAd jCfd ||d tDjFzzD} |||| |d tDjFzz }dz tI|D],} |t;||d t<zz|d t<zz }.dzn|tJtLtNtPtRfvr|}|dz }|||ns|tTur|}|||||z|dz }nQ|tVurW|}|||||z|r;|dz||z||z }||}|r|d |||zn |t|r;|dz }n|tXtZt\t^t`fvr=||dz\}} } | tbk(rd} |||| | ||z|dz||z||z }n|tdur!||dz\}}||||||z|dz }no|tfthfvr0||dz\}}||||||z|dz||z||z }n1|tjur)|}|||||z|dz||z||z }n|tlur||dz\}}} } | tbk(rd} |||to|| | ||z|dz|tpzr|dz|dz\}}|d||dz|z}|dddjCd|DzddjCtst |z|z |d|z|z |ttzrdz |d||zdz||z }n tw|||krdzy)N)toc|j||d|fzfz }tdvrdndfzddz zt|y)Nz(to %d)z%*d%s :.z rend)addprint)rargslabelslevel offset_widthstarts rprint_z!dis..dis_..print_\sW~ 2bU*,, (lE%6/3sSSE!Gn & 4Lrc@tddzzzt|y)N rr)r)rrrs rprint_2z"dis..dis_..print_2ds c.dis_..s-(R1PA)* 4==#--(P1Ps47branch MAXREPEATrz prefix_skipz prefixrrc3&K|] }d|z yw)z%#02xNr rs rrz$dis..dis_..s.KFqw{Fsz(%r)z overlapin)<OPCODESr5r(r.r0 MAX_UNTIL MIN_UNTILr&r'r%LITERAL_IGNORENOT_LITERAL_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREchrr;rATCODESrCCHCODESr)r,r$r+rerfrgrrrilistrrrrnr7rFrHrIrGrBrAREPEAT REPEAT_ONEMIN_REPEAT_ONEPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONErrJASSERT ASSERT_NOTr8rbinrror ValueError)rrrrrzrVargrYrXr_rjminmaxr prefix_lenrrrKdis_rrrrs` rrzdis..dis_[s!      #gEaB FABgwWF44r &(:*,B*,BDD1gQr<3C/9:r1gQ'#,'r3qr7#x1gQ'#,'r3qr7#I}mDDAwr4AdF+QqS!D&!T /00a1BQr0BCGSW3MMNwr9T!Qi-?%@ABS)^#z!1gQsxx(R15aS$--=O9O1P(R RSr3(S$--'' sAId1a#y..@&ABCi'A$ h9L+--1gQr3tAwr4AdF+QvAwr4AdF+1af%IAE7Dx!D&9wQ N)+@BB!%a1c3)#%Cr4caf5QqS!D&!T & AaCL Tr340Q ++ AaCL cr440QqS!D&!T |#Awr4AdF+QqS!D&!T t(,Q! %eS#)#%Cr4US#!D&A!?*.21Q3!n+J O[9EE!%z)9:FJ"TYY.KF.K%KK"RWWSf-=%>>@Z'EKeU:5E)FGZ'E++QJEDM$'QJET  n$o#gr  r)rsetrr)rKrrrrrs`@@@@@rdisrTsF UF Es3t9q=)*LIIV CIrc t|r|}tj||}nd}t||}|tzrt t ||jj}dg|jjz}|jD] \}}|||< tj|||jjz||jjdz |t|S)Nr)rrparserSRE_FLAG_DEBUGrrr groupdictgroupsitemsrcompiler tuple)r^r rLrK groupindex indexgrouprZrzs rrrs{ MM!U # E?D ~  D ""J!''..(J  "1 1 # <<& qE*%  r)NNN)r)3rrr _constants_casefixrr'r%rr5r(rrrrr.r)r MIN_REPEATrrr MAX_REPEATrrrrrr rr4r-r*rrr:rintrsrur3rrrrrrrrrrr rrr s& ";'7#$ Ry( N3J/)74IJ&00, qIf6Ob MMA  >Q  (s3 *"&>*X9"v) NRj r__pycache__/__init__.cpython-312.opt-1.pyc000064400000042760152462750210014172 0ustar00 Th?dZddlZddlmZmZddlZddlZgdZdZejejejejGdd Z ejZd d Zd d Zd d Zd!d Zd!dZd!dZd dZd dZd dZdZd dZdDcic]}|de|zc}ZdZeej.ddZeej.ddjdZiZ iZ!dZ"dZ#dZ$ejJe"dZ&ddl'Z'dZ(e'jRee(e$GddZ*ycc}w)"aSupport for regular expressions (RE). This module provides regular expression matching operations similar to those found in Perl. It supports both 8-bit and Unicode strings; both the pattern and the strings being processed can contain null bytes and characters outside the US ASCII range. Regular expressions can contain both special and ordinary characters. Most ordinary characters, like "A", "a", or "0", are the simplest regular expressions; they simply match themselves. You can concatenate ordinary characters, so last matches the string 'last'. The special characters are: "." Matches any character except a newline. "^" Matches the start of the string. "$" Matches the end of the string or just before the newline at the end of the string. "*" Matches 0 or more (greedy) repetitions of the preceding RE. Greedy means that it will match as many repetitions as possible. "+" Matches 1 or more (greedy) repetitions of the preceding RE. "?" Matches 0 or 1 (greedy) of the preceding RE. *?,+?,?? Non-greedy versions of the previous three special characters. {m,n} Matches from m to n repetitions of the preceding RE. {m,n}? Non-greedy version of the above. "\\" Either escapes special characters or signals a special sequence. [] Indicates a set of characters. A "^" as the first character indicates a complementing set. "|" A|B, creates an RE that will match either A or B. (...) Matches the RE inside the parentheses. The contents can be retrieved or matched later in the string. (?aiLmsux) The letters set the corresponding flags defined below. (?:...) Non-grouping version of regular parentheses. (?P...) The substring matched by the group is accessible by name. (?P=name) Matches the text matched earlier by the group named name. (?#...) A comment; ignored. (?=...) Matches if ... matches next, but doesn't consume the string. (?!...) Matches if ... doesn't match next. (?<=...) Matches if preceded by ... (must be fixed length). (?rr?s r<rrs GU # - -f 55r;c8t||j|S)ztScan through string looking for a match to the pattern, returning a Match object, or None if no match was found.)r>rr?s r<rrs GU # * *6 22r;c<t||j|||S)aZReturn the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or a callable; if a string, backslash escapes in it are processed. If it is a callable, it's passed the Match object and must return a replacement string to be used.)r>r r@replrAcountrBs r<r r s  GU # ' 'fe <r rFs r<r r s  GU # ( (vu ==r;c:t||j||S)aSplit the source string by the occurrences of the pattern, returning a list containing the resulting substrings. If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list. If maxsplit is nonzero, at most maxsplit splits occur, and the remainder of the string is returned as the final element of the list.)r>r )r@rAmaxsplitrBs r<r r s GU # ) )&( ;;r;c8t||j|S)aReturn a list of all non-overlapping matches in the string. If one or more capturing groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. Empty matches are included in the result.)r>r r?s r<r r s GU # + +F 33r;c8t||j|S)zReturn an iterator over all non-overlapping matches in the string. For each match, the iterator returns a Match object. Empty matches are included in the result.)r>r r?s r<r r s GU # , ,V 44r;ct||S)zACompile a regular expression pattern, returning a Pattern object.)r>)r@rBs r<rrs GU ##r;c|tjtjtj y)z#Clear the regular expression cachesN)_cacheclear_cache2_compile_template cache_clearr:r;r<rrs  LLN MMO!!#r;cddl}|jdt|j5|j dtt ||t zcdddS#1swYyxYw)zBCompile a template pattern, returning a Pattern object, deprecatedrNzThe re.template() function is deprecated as it is an undocumented function without an obvious purpose. Use re.compile() instead.ignore)warningswarnDeprecationWarningcatch_warnings simplefilterr>r3)r@rBrWs r<rrsT MM.% &  "h(:;q) # " "s )AA's()[]{}?*+-|^$\.&~# \ct|tr|jtSt|d}|jtj dS)z0 Escape special characters in a string. latin1) isinstancestr translate_special_chars_mapencode)r@s r<rrsI'3  !344gx(  !34;;HEEr;ic:t|tr |j} tt |||fS#t $rYnwxYwt |||f}t j|d}|t|tr|r td|Stj|s td|tzrddl}|jdt tj"||}|t$zr|St't t(k\r9 t t+t-t =n#t.t0t f$rYnwxYw|t |<t'tt2k\r9 tt+t-t=n#t.t0t f$rYnwxYw|t|<|S)Nz5cannot process flags argument with a compiled patternz1first argument must be string or compiled patternrzoThe re.TEMPLATE/re.T flag is deprecated as it is an undocumented flag without an obvious purpose. Don't use it.)r_r$valuerRtypeKeyErrorrPpopr ValueErrorrisstring TypeErrorr3rWrXrYrr5len _MAXCACHEnextiter StopIteration RuntimeError _MAXCACHE2)r@rBkeyprWs r<r>r>sv%#  tG}gu455     ='5 )C 3Ay gw ' KMMN!!'*OP P 19  MM$'  (   gu - 5=H v;) #  4V -.!<:  F3K 7|z! T']+,|X6   GCL Hs03 ??D D76D7E88FFcVtj|tj||SN)_srerrparse_template)r@rGs r<rSrSKs" =='"8"8w"G HHr;c>t|j|jffSrx)r>r@rB)rvs r<_pickler|Ts aii) ))r;ceZdZddZdZy)Scannercddlm}m}t|tr |j }||_g}tj}||_ |D]j\}}|j} |jtj||| ddtj||ffg|j| |dltj||d|ffg}tj ||_y)Nr)BRANCH SUBPATTERNr) _constantsrrr_r$rglexiconrStaterB opengroupappend SubPatternparse closegrouprrscanner) selfrrBrrrvsphraseactiongids r<__init__zScanner.__init__]s2 eY 'KKE  MMO%NFF++-C HHW''c1avu)EFG,  LLae $ &   qFT1I#6"7 8 ((+ r;cfg}|j}|jj|j}d} |}|snk|j}||k(rnU|j|j dz d}t |r||_|||j}||||}u|||dfS)Nrr)rrrendr lastindexcallablegroup) rrAresultrrimjrs r<scanz Scanner.scanns $$V,22 AAAv\\!++a-03F aggi0!vAvabz!!r;Nr)r'r(r)rrr:r;r<r~r~\s ,""r;r~r)rr)+__doc__enumrdrr functoolsry__all__ __version__ global_enum _simple_enumIntFlagKEEPr$rrrrr r r r r rrrchrrbrrhrrrPrRrortr> lru_cacherScopyregr|pickler~)rs0r<rs"iV    4<<$))4  5   2 6 3 = ><45$$ *"1RR0Q1aA&0QRF  y  Q' ( Y  r1 % + +B /0     1 fYI I *w* %"%"SsD?__pycache__/_constants.cpython-312.pyc000064400000012271152462750210013641 0ustar00 Th*dZdZddlmZmZGddeZGddeZeedZd Z e d Z e d d =e d ddddddddddd Z e dddddddd d!d"d#d$d%d&d'd(d)d*Z e eeeiZe eeeiZe eeeiZeeeeiZeeee iZ!ee"ee#iZ$e%e%e&e&e'e'e(e(e)e*e+e,e-e-e.e.iZ/e%e0e&e1e'e2e(e3e)e4e+e5e-e6e.e7iZ8d+Z9d,Z:d-Z;d.Zd1Z?d2Z@d3ZAd+ZBd,ZCd-ZDy )4zInternal support module for srei_4) MAXREPEAT MAXGROUPSc(eZdZdZdZdfd ZxZS)erroraiException raised for invalid regular expressions. Attributes: msg: The unformatted error message pattern: The regular expression pattern pos: The index in the pattern where compilation failed (may be None) lineno: The line corresponding to pos (may be None) colno: The column corresponding to pos (may be None) recX||_||_||_|u|sd||fz}t|trd}nd}|j |d|dz|_||j|d|z |_||vr+d||j |jfz}ndx|_|_t|)|y)Nz%s at position %d  rz%s (line %d, column %d)) msgpatternpos isinstancestrcountlinenorfindcolnosuper__init__)selfr r rnewline __class__s &/usr/lib64/python3.12/re/_constants.pyrzerror.__init__%s   3?%c 2C'3'!--C81tt| ||}||_|SN)rr#__new__name)clsvaluer'rrs rr&z_NamedIntConstant.__new__9s#&4S%@  rc|jSr%)r')rs r__repr__z_NamedIntConstant.__repr__>s yyrN)rrrr&r+ __reduce__r r!s@rr#r#8s Jrr#rct|Dcgc]\}}t||}}}tj|Dcic]}|j|c}|Scc}}wcc}wr%) enumerater#globalsupdater')namesir'itemsitems r _makecodesr5Es^7@7G H7GGAt q$ '7GE H I%8%$diio%89 L I8s AA")-FAILURESUCCESSANYANY_ALLASSERT ASSERT_NOTATBRANCHCATEGORYCHARSET BIGCHARSETGROUPREFGROUPREF_EXISTSININFOJUMPLITERALMARK MAX_UNTIL MIN_UNTIL NOT_LITERALNEGATERANGEREPEAT REPEAT_ONE SUBPATTERNMIN_REPEAT_ONE ATOMIC_GROUPPOSSESSIVE_REPEATPOSSESSIVE_REPEAT_ONEGROUPREF_IGNORE IN_IGNORELITERAL_IGNORENOT_LITERAL_IGNOREGROUPREF_LOC_IGNORE IN_LOC_IGNORELITERAL_LOC_IGNORENOT_LITERAL_LOC_IGNOREGROUPREF_UNI_IGNORE IN_UNI_IGNORELITERAL_UNI_IGNORENOT_LITERAL_UNI_IGNORERANGE_UNI_IGNORE MIN_REPEAT MAX_REPEATN AT_BEGINNINGAT_BEGINNING_LINEAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYAT_END AT_END_LINE AT_END_STRINGAT_LOC_BOUNDARYAT_LOC_NON_BOUNDARYAT_UNI_BOUNDARYAT_UNI_NON_BOUNDARYCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORDCATEGORY_LINEBREAKCATEGORY_NOT_LINEBREAKCATEGORY_LOC_WORDCATEGORY_LOC_NOT_WORDCATEGORY_UNI_DIGITCATEGORY_UNI_NOT_DIGITCATEGORY_UNI_SPACECATEGORY_UNI_NOT_SPACECATEGORY_UNI_WORDCATEGORY_UNI_NOT_WORDCATEGORY_UNI_LINEBREAKCATEGORY_UNI_NOT_LINEBREAKr  @)ErMAGIC_srerr Exceptionrintr#r5OPCODESATCODESCHCODESrFrVrJrW OP_IGNORErZr[OP_LOCALE_IGNOREr^r_OP_UNICODE_IGNORErdrerirj AT_MULTILINErgrlrhrm AT_LOCALErnro AT_UNICODErprqrrrsrtrxruryrvrw CH_LOCALErzr{r|r}r~rrr CH_UNICODESRE_FLAG_TEMPLATESRE_FLAG_IGNORECASESRE_FLAG_LOCALESRE_FLAG_MULTILINESRE_FLAG_DOTALLSRE_FLAG_UNICODESRE_FLAG_VERBOSESRE_FLAG_DEBUGSRE_FLAG_ASCIISRE_INFO_PREFIXSRE_INFO_LITERALSRE_INFO_CHARSETrrrs& % IB   i 5  0 b BCL ')>$ m_,,  **(20220: " ^#   '  ' # K (  ( N*N*$,*2  &.&.$,.6  r