copy.py000064400000020334152462633570006107 0ustar00"""Generic (shallow and deep) copying operations. Interface summary: import copy x = copy.copy(y) # make a shallow copy of y x = copy.deepcopy(y) # make a deep copy of y For module specific errors, copy.Error is raised. The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances). - A shallow copy constructs a new compound object and then (to the extent possible) inserts *the same objects* into it that the original contains. - A deep copy constructs a new compound object and then, recursively, inserts *copies* into it of the objects found in the original. Two problems often exist with deep copy operations that don't exist with shallow copy operations: a) recursive objects (compound objects that, directly or indirectly, contain a reference to themselves) may cause a recursive loop b) because deep copy copies *everything* it may copy too much, e.g. administrative data structures that should be shared even between copies Python's deep copy operation avoids these problems by: a) keeping a table of objects already copied during the current copying pass b) letting user-defined classes override the copying operation or the set of components copied This version does not copy types like module, class, function, method, nor stack trace, stack frame, nor file, socket, window, nor any similar types. Classes can use the same interfaces to control copying that they use to control pickling: they can define methods called __getinitargs__(), __getstate__() and __setstate__(). See the documentation for module "pickle" for information on these methods. """ import types import weakref from copyreg import dispatch_table class Error(Exception): pass error = Error # backward compatibility __all__ = ["Error", "copy", "deepcopy"] def copy(x): """Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ cls = type(x) copier = _copy_dispatch.get(cls) if copier: return copier(x) if issubclass(cls, type): # treat it as a regular class: return _copy_immutable(x) copier = getattr(cls, "__copy__", None) if copier is not None: return copier(x) reductor = dispatch_table.get(cls) if reductor is not None: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error("un(shallow)copyable object of type %s" % cls) if isinstance(rv, str): return x return _reconstruct(x, None, *rv) _copy_dispatch = d = {} def _copy_immutable(x): return x for t in (types.NoneType, int, float, bool, complex, str, tuple, bytes, frozenset, type, range, slice, property, types.BuiltinFunctionType, types.EllipsisType, types.NotImplementedType, types.FunctionType, types.CodeType, weakref.ref): d[t] = _copy_immutable d[list] = list.copy d[dict] = dict.copy d[set] = set.copy d[bytearray] = bytearray.copy del d, t def deepcopy(x, memo=None, _nil=[]): """Deep copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ if memo is None: memo = {} d = id(x) y = memo.get(d, _nil) if y is not _nil: return y cls = type(x) copier = _deepcopy_dispatch.get(cls) if copier is not None: y = copier(x, memo) else: if issubclass(cls, type): y = _deepcopy_atomic(x, memo) else: copier = getattr(x, "__deepcopy__", None) if copier is not None: y = copier(memo) else: reductor = dispatch_table.get(cls) if reductor: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error( "un(deep)copyable object of type %s" % cls) if isinstance(rv, str): y = x else: y = _reconstruct(x, memo, *rv) # If is its own copy, don't memoize. if y is not x: memo[d] = y _keep_alive(x, memo) # Make sure x lives at least as long as d return y _deepcopy_dispatch = d = {} def _deepcopy_atomic(x, memo): return x d[types.NoneType] = _deepcopy_atomic d[types.EllipsisType] = _deepcopy_atomic d[types.NotImplementedType] = _deepcopy_atomic d[int] = _deepcopy_atomic d[float] = _deepcopy_atomic d[bool] = _deepcopy_atomic d[complex] = _deepcopy_atomic d[bytes] = _deepcopy_atomic d[str] = _deepcopy_atomic d[types.CodeType] = _deepcopy_atomic d[type] = _deepcopy_atomic d[range] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic d[weakref.ref] = _deepcopy_atomic d[property] = _deepcopy_atomic def _deepcopy_list(x, memo, deepcopy=deepcopy): y = [] memo[id(x)] = y append = y.append for a in x: append(deepcopy(a, memo)) return y d[list] = _deepcopy_list def _deepcopy_tuple(x, memo, deepcopy=deepcopy): y = [deepcopy(a, memo) for a in x] # We're not going to put the tuple in the memo, but it's still important we # check for it, in case the tuple contains recursive mutable structures. try: return memo[id(x)] except KeyError: pass for k, j in zip(x, y): if k is not j: y = tuple(y) break else: y = x return y d[tuple] = _deepcopy_tuple def _deepcopy_dict(x, memo, deepcopy=deepcopy): y = {} memo[id(x)] = y for key, value in x.items(): y[deepcopy(key, memo)] = deepcopy(value, memo) return y d[dict] = _deepcopy_dict def _deepcopy_method(x, memo): # Copy instance methods return type(x)(x.__func__, deepcopy(x.__self__, memo)) d[types.MethodType] = _deepcopy_method del d def _keep_alive(x, memo): """Keeps a reference to the object x in the memo. Because we remember objects by their id, we have to assure that possibly temporary objects are kept alive by referencing them. We store a reference at the id of the memo, which should normally not be used unless someone tries to deepcopy the memo itself... """ try: memo[id(memo)].append(x) except KeyError: # aha, this is the first one :-) memo[id(memo)]=[x] def _reconstruct(x, memo, func, args, state=None, listiter=None, dictiter=None, *, deepcopy=deepcopy): deep = memo is not None if deep and args: args = (deepcopy(arg, memo) for arg in args) y = func(*args) if deep: memo[id(x)] = y if state is not None: if deep: state = deepcopy(state, memo) if hasattr(y, '__setstate__'): y.__setstate__(state) else: if isinstance(state, tuple) and len(state) == 2: state, slotstate = state else: slotstate = None if state is not None: y.__dict__.update(state) if slotstate is not None: for key, value in slotstate.items(): setattr(y, key, value) if listiter is not None: if deep: for item in listiter: item = deepcopy(item, memo) y.append(item) else: for item in listiter: y.append(item) if dictiter is not None: if deep: for key, value in dictiter: key = deepcopy(key, memo) value = deepcopy(value, memo) y[key] = value else: for key, value in dictiter: y[key] = value return y del types, weakref posixpath.py000064400000042113152462633570007153 0ustar00"""Common operations on Posix pathnames. Instead of importing this module directly, import os and refer to this module as os.path. The "os.path" name is an alias for this module on Posix systems; on other systems (e.g. Windows), os.path provides the same operations in a manner specific to that platform, and is an alias to another module (e.g. ntpath). Some of this can actually be useful on non-Posix systems too, e.g. for manipulation of the pathname component of URLs. """ # Strings representing various path-related bits and pieces. # These are primarily for export; internally, they are hardcoded. # Should be set before imports for resolving cyclic dependency. curdir = '.' pardir = '..' extsep = '.' sep = '/' pathsep = ':' defpath = '/bin:/usr/bin' altsep = None devnull = '/dev/null' import os import sys import stat import genericpath from genericpath import * __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", "getatime","getctime","islink","exists","lexists","isdir","isfile", "ismount", "expanduser","expandvars","normpath","abspath", "samefile","sameopenfile","samestat", "curdir","pardir","sep","pathsep","defpath","altsep","extsep", "devnull","realpath","supports_unicode_filenames","relpath", "commonpath", "isjunction", "ALLOW_MISSING"] def _get_sep(path): if isinstance(path, bytes): return b'/' else: return '/' # Normalize the case of a pathname. Trivial in Posix, string.lower on Mac. # On MS-DOS this may also turn slashes into backslashes; however, other # normalizations (such as optimizing '../' away) are not allowed # (another function should be defined to do that). def normcase(s): """Normalize case of pathname. Has no effect under Posix""" return os.fspath(s) # Return whether a path is absolute. # Trivial in Posix, harder on the Mac or MS-DOS. def isabs(s): """Test whether a path is absolute""" s = os.fspath(s) sep = _get_sep(s) return s.startswith(sep) # Join pathnames. # Ignore the previous parts if a part is absolute. # Insert a '/' unless the first part is empty or already ends in '/'. def join(a, *p): """Join two or more pathname components, inserting '/' as needed. If any component is an absolute path, all previous path components will be discarded. An empty last part will result in a path that ends with a separator.""" a = os.fspath(a) sep = _get_sep(a) path = a try: if not p: path[:0] + sep #23780: Ensure compatible data type even if p is null. for b in map(os.fspath, p): if b.startswith(sep): path = b elif not path or path.endswith(sep): path += b else: path += sep + b except (TypeError, AttributeError, BytesWarning): genericpath._check_arg_types('join', a, *p) raise return path # Split a path in head (everything up to the last '/') and tail (the # rest). If the path ends in '/', tail will be empty. If there is no # '/' in the path, head will be empty. # Trailing '/'es are stripped from head unless it is the root. def split(p): """Split a pathname. Returns tuple "(head, tail)" where "tail" is everything after the final slash. Either part may be empty.""" p = os.fspath(p) sep = _get_sep(p) i = p.rfind(sep) + 1 head, tail = p[:i], p[i:] if head and head != sep*len(head): head = head.rstrip(sep) return head, tail # Split a path in root and extension. # The extension is everything starting at the last dot in the last # pathname component; the root is everything before that. # It is always true that root + ext == p. def splitext(p): p = os.fspath(p) if isinstance(p, bytes): sep = b'/' extsep = b'.' else: sep = '/' extsep = '.' return genericpath._splitext(p, sep, None, extsep) splitext.__doc__ = genericpath._splitext.__doc__ # Split a pathname into a drive specification and the rest of the # path. Useful on DOS/Windows/NT; on Unix, the drive is always empty. def splitdrive(p): """Split a pathname into drive and path. On Posix, drive is always empty.""" p = os.fspath(p) return p[:0], p def splitroot(p): """Split a pathname into drive, root and tail. On Posix, drive is always empty; the root may be empty, a single slash, or two slashes. The tail contains anything after the root. For example: splitroot('foo/bar') == ('', '', 'foo/bar') splitroot('/foo/bar') == ('', '/', 'foo/bar') splitroot('//foo/bar') == ('', '//', 'foo/bar') splitroot('///foo/bar') == ('', '/', '//foo/bar') """ p = os.fspath(p) if isinstance(p, bytes): sep = b'/' empty = b'' else: sep = '/' empty = '' if p[:1] != sep: # Relative path, e.g.: 'foo' return empty, empty, p elif p[1:2] != sep or p[2:3] == sep: # Absolute path, e.g.: '/foo', '///foo', '////foo', etc. return empty, sep, p[1:] else: # Precisely two leading slashes, e.g.: '//foo'. Implementation defined per POSIX, see # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13 return empty, p[:2], p[2:] # Return the tail (basename) part of a path, same as split(path)[1]. def basename(p): """Returns the final component of a pathname""" p = os.fspath(p) sep = _get_sep(p) i = p.rfind(sep) + 1 return p[i:] # Return the head (dirname) part of a path, same as split(path)[0]. def dirname(p): """Returns the directory component of a pathname""" p = os.fspath(p) sep = _get_sep(p) i = p.rfind(sep) + 1 head = p[:i] if head and head != sep*len(head): head = head.rstrip(sep) return head # Is a path a junction? def isjunction(path): """Test whether a path is a junction Junctions are not a part of posix semantics""" os.fspath(path) return False # Being true for dangling symbolic links is also useful. def lexists(path): """Test whether a path exists. Returns True for broken symbolic links""" try: os.lstat(path) except (OSError, ValueError): return False return True # Is a path a mount point? # (Does this work for all UNIXes? Is it even guaranteed to work by Posix?) def ismount(path): """Test whether a path is a mount point""" try: s1 = os.lstat(path) except (OSError, ValueError): # It doesn't exist -- so not a mount point. :-) return False else: # A symlink can never be a mount point if stat.S_ISLNK(s1.st_mode): return False path = os.fspath(path) if isinstance(path, bytes): parent = join(path, b'..') else: parent = join(path, '..') parent = realpath(parent) try: s2 = os.lstat(parent) except (OSError, ValueError): return False dev1 = s1.st_dev dev2 = s2.st_dev if dev1 != dev2: return True # path/.. on a different device as path ino1 = s1.st_ino ino2 = s2.st_ino if ino1 == ino2: return True # path/.. is the same i-node as path return False # Expand paths beginning with '~' or '~user'. # '~' means $HOME; '~user' means that user's home directory. # If the path doesn't begin with '~', or if the user or $HOME is unknown, # the path is returned unchanged (leaving error reporting to whatever # function is called with the expanded path as argument). # See also module 'glob' for expansion of *, ? and [...] in pathnames. # (A function should also be defined to do full *sh-style environment # variable expansion.) def expanduser(path): """Expand ~ and ~user constructions. If user or $HOME is unknown, do nothing.""" path = os.fspath(path) if isinstance(path, bytes): tilde = b'~' else: tilde = '~' if not path.startswith(tilde): return path sep = _get_sep(path) i = path.find(sep, 1) if i < 0: i = len(path) if i == 1: if 'HOME' not in os.environ: try: import pwd except ImportError: # pwd module unavailable, return path unchanged return path try: userhome = pwd.getpwuid(os.getuid()).pw_dir except KeyError: # bpo-10496: if the current user identifier doesn't exist in the # password database, return the path unchanged return path else: userhome = os.environ['HOME'] else: try: import pwd except ImportError: # pwd module unavailable, return path unchanged return path name = path[1:i] if isinstance(name, bytes): name = os.fsdecode(name) try: pwent = pwd.getpwnam(name) except KeyError: # bpo-10496: if the user name from the path doesn't exist in the # password database, return the path unchanged return path userhome = pwent.pw_dir # if no user home, return the path unchanged on VxWorks if userhome is None and sys.platform == "vxworks": return path if isinstance(path, bytes): userhome = os.fsencode(userhome) root = b'/' else: root = '/' userhome = userhome.rstrip(root) return (userhome + path[i:]) or root # Expand paths containing shell variable substitutions. # This expands the forms $variable and ${variable} only. # Non-existent variables are left unchanged. _varprog = None _varprogb = None def expandvars(path): """Expand shell variables of form $var and ${var}. Unknown variables are left unchanged.""" path = os.fspath(path) global _varprog, _varprogb if isinstance(path, bytes): if b'$' not in path: return path if not _varprogb: import re _varprogb = re.compile(br'\$(\w+|\{[^}]*\})', re.ASCII) search = _varprogb.search start = b'{' end = b'}' environ = getattr(os, 'environb', None) else: if '$' not in path: return path if not _varprog: import re _varprog = re.compile(r'\$(\w+|\{[^}]*\})', re.ASCII) search = _varprog.search start = '{' end = '}' environ = os.environ i = 0 while True: m = search(path, i) if not m: break i, j = m.span(0) name = m.group(1) if name.startswith(start) and name.endswith(end): name = name[1:-1] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(name)]) else: value = environ[name] except KeyError: i = j else: tail = path[j:] path = path[:i] + value i = len(path) path += tail return path # Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B. # It should be understood that this may change the meaning of the path # if it contains symbolic links! try: from posix import _path_normpath as normpath except ImportError: def normpath(path): """Normalize path, eliminating double slashes, etc.""" path = os.fspath(path) if isinstance(path, bytes): sep = b'/' empty = b'' dot = b'.' dotdot = b'..' else: sep = '/' empty = '' dot = '.' dotdot = '..' if path == empty: return dot _, initial_slashes, path = splitroot(path) comps = path.split(sep) new_comps = [] for comp in comps: if comp in (empty, dot): continue if (comp != dotdot or (not initial_slashes and not new_comps) or (new_comps and new_comps[-1] == dotdot)): new_comps.append(comp) elif new_comps: new_comps.pop() comps = new_comps path = initial_slashes + sep.join(comps) return path or dot def abspath(path): """Return an absolute path.""" path = os.fspath(path) if not isabs(path): if isinstance(path, bytes): cwd = os.getcwdb() else: cwd = os.getcwd() path = join(cwd, path) return normpath(path) # Return a canonical path (i.e. the absolute location of a file on the # filesystem). def realpath(filename, *, strict=False): """Return the canonical path of the specified filename, eliminating any symbolic links encountered in the path.""" filename = os.fspath(filename) path, ok = _joinrealpath(filename[:0], filename, strict, {}) return abspath(path) # Join two paths, normalizing and eliminating any symbolic links # encountered in the second path. def _joinrealpath(path, rest, strict, seen): if isinstance(path, bytes): sep = b'/' curdir = b'.' pardir = b'..' else: sep = '/' curdir = '.' pardir = '..' getcwd = os.getcwd if strict is ALLOW_MISSING: ignored_error = FileNotFoundError elif strict: ignored_error = () else: ignored_error = OSError maxlinks = None if isabs(rest): rest = rest[1:] path = sep while rest: name, _, rest = rest.partition(sep) if not name or name == curdir: # current dir continue if name == pardir: # parent dir if path: path, name = split(path) if name == pardir: path = join(path, pardir, pardir) else: path = pardir continue newpath = join(path, name) try: st = os.lstat(newpath) except ignored_error: is_link = False else: is_link = stat.S_ISLNK(st.st_mode) if not is_link: path = newpath continue # Resolve the symbolic link if newpath in seen: # Already seen this path path = seen[newpath] if path is not None: # use cached value continue # The symlink is not resolved, so we must have a symlink loop. if strict: # Raise OSError(errno.ELOOP) os.stat(newpath) else: # Return already resolved part + rest of the path unchanged. return join(newpath, rest), False seen[newpath] = None # not resolved symlink path, ok = _joinrealpath(path, os.readlink(newpath), strict, seen) if not ok: return join(path, rest), False seen[newpath] = path # resolved symlink return path, True supports_unicode_filenames = (sys.platform == 'darwin') def relpath(path, start=None): """Return a relative version of a path""" if not path: raise ValueError("no path specified") path = os.fspath(path) if isinstance(path, bytes): curdir = b'.' sep = b'/' pardir = b'..' else: curdir = '.' sep = '/' pardir = '..' if start is None: start = curdir else: start = os.fspath(start) try: start_list = [x for x in abspath(start).split(sep) if x] path_list = [x for x in abspath(path).split(sep) if x] # Work out how much of the filepath is shared by start and path. i = len(commonprefix([start_list, path_list])) rel_list = [pardir] * (len(start_list)-i) + path_list[i:] if not rel_list: return curdir return join(*rel_list) except (TypeError, AttributeError, BytesWarning, DeprecationWarning): genericpath._check_arg_types('relpath', path, start) raise # Return the longest common sub-path of the sequence of paths given as input. # The paths are not normalized before comparing them (this is the # responsibility of the caller). Any trailing separator is stripped from the # returned path. def commonpath(paths): """Given a sequence of path names, returns the longest common sub-path.""" if not paths: raise ValueError('commonpath() arg is an empty sequence') paths = tuple(map(os.fspath, paths)) if isinstance(paths[0], bytes): sep = b'/' curdir = b'.' else: sep = '/' curdir = '.' try: split_paths = [path.split(sep) for path in paths] try: isabs, = set(p[:1] == sep for p in paths) except ValueError: raise ValueError("Can't mix absolute and relative paths") from None split_paths = [[c for c in s if c and c != curdir] for s in split_paths] s1 = min(split_paths) s2 = max(split_paths) common = s1 for i, c in enumerate(s1): if c != s2[i]: common = s1[:i] break prefix = sep if isabs else sep[:0] return prefix + sep.join(common) except (TypeError, AttributeError): genericpath._check_arg_types('commonpath', *paths) raise netrc.py000064400000015412152462633570006251 0ustar00"""An object-oriented interface to .netrc files.""" # Module and documentation by Eric S. Raymond, 21 Dec 1998 import os, stat __all__ = ["netrc", "NetrcParseError"] class NetrcParseError(Exception): """Exception raised on syntax errors in the .netrc file.""" def __init__(self, msg, filename=None, lineno=None): self.filename = filename self.lineno = lineno self.msg = msg Exception.__init__(self, msg) def __str__(self): return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno) class _netrclex: def __init__(self, fp): self.lineno = 1 self.instream = fp self.whitespace = "\n\t\r " self.pushback = [] def _read_char(self): ch = self.instream.read(1) if ch == "\n": self.lineno += 1 return ch def get_token(self): if self.pushback: return self.pushback.pop(0) token = "" fiter = iter(self._read_char, "") for ch in fiter: if ch in self.whitespace: continue if ch == '"': for ch in fiter: if ch == '"': return token elif ch == "\\": ch = self._read_char() token += ch else: if ch == "\\": ch = self._read_char() token += ch for ch in fiter: if ch in self.whitespace: return token elif ch == "\\": ch = self._read_char() token += ch return token def push_token(self, token): self.pushback.append(token) class netrc: def __init__(self, file=None): default_netrc = file is None if file is None: file = os.path.join(os.path.expanduser("~"), ".netrc") self.hosts = {} self.macros = {} try: with open(file, encoding="utf-8") as fp: self._parse(file, fp, default_netrc) except UnicodeDecodeError: with open(file, encoding="locale") as fp: self._parse(file, fp, default_netrc) def _parse(self, file, fp, default_netrc): lexer = _netrclex(fp) while 1: # Look for a machine, default, or macdef top-level keyword saved_lineno = lexer.lineno toplevel = tt = lexer.get_token() if not tt: break elif tt[0] == '#': if lexer.lineno == saved_lineno and len(tt) == 1: lexer.instream.readline() continue elif tt == 'machine': entryname = lexer.get_token() elif tt == 'default': entryname = 'default' elif tt == 'macdef': entryname = lexer.get_token() self.macros[entryname] = [] while 1: line = lexer.instream.readline() if not line: raise NetrcParseError( "Macro definition missing null line terminator.", file, lexer.lineno) if line == '\n': # a macro definition finished with consecutive new-line # characters. The first \n is encountered by the # readline() method and this is the second \n. break self.macros[entryname].append(line) continue else: raise NetrcParseError( "bad toplevel token %r" % tt, file, lexer.lineno) if not entryname: raise NetrcParseError("missing %r name" % tt, file, lexer.lineno) # We're looking at start of an entry for a named machine or default. login = account = password = '' self.hosts[entryname] = {} while 1: prev_lineno = lexer.lineno tt = lexer.get_token() if tt.startswith('#'): if lexer.lineno == prev_lineno: lexer.instream.readline() continue if tt in {'', 'machine', 'default', 'macdef'}: self.hosts[entryname] = (login, account, password) lexer.push_token(tt) break elif tt == 'login' or tt == 'user': login = lexer.get_token() elif tt == 'account': account = lexer.get_token() elif tt == 'password': password = lexer.get_token() else: raise NetrcParseError("bad follower token %r" % tt, file, lexer.lineno) self._security_check(fp, default_netrc, self.hosts[entryname][0]) def _security_check(self, fp, default_netrc, login): if os.name == 'posix' and default_netrc and login != "anonymous": prop = os.fstat(fp.fileno()) if prop.st_uid != os.getuid(): import pwd try: fowner = pwd.getpwuid(prop.st_uid)[0] except KeyError: fowner = 'uid %s' % prop.st_uid try: user = pwd.getpwuid(os.getuid())[0] except KeyError: user = 'uid %s' % os.getuid() raise NetrcParseError( (f"~/.netrc file owner ({fowner}, {user}) does not match" " current user")) if (prop.st_mode & (stat.S_IRWXG | stat.S_IRWXO)): raise NetrcParseError( "~/.netrc access too permissive: access" " permissions must restrict access to only" " the owner") def authenticators(self, host): """Return a (user, account, password) tuple for given host.""" if host in self.hosts: return self.hosts[host] elif 'default' in self.hosts: return self.hosts['default'] else: return None def __repr__(self): """Dump the class data in the format of a .netrc file.""" rep = "" for host in self.hosts.keys(): attrs = self.hosts[host] rep += f"machine {host}\n\tlogin {attrs[0]}\n" if attrs[1]: rep += f"\taccount {attrs[1]}\n" rep += f"\tpassword {attrs[2]}\n" for macro in self.macros.keys(): rep += f"macdef {macro}\n" for line in self.macros[macro]: rep += line rep += "\n" return rep if __name__ == '__main__': print(netrc()) html/entities.py000064400000223370152462633570007732 0ustar00"""HTML character entity references.""" __all__ = ['html5', 'name2codepoint', 'codepoint2name', 'entitydefs'] # maps HTML4 entity name to the Unicode code point name2codepoint = { 'AElig': 0x00c6, # latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1 'Aacute': 0x00c1, # latin capital letter A with acute, U+00C1 ISOlat1 'Acirc': 0x00c2, # latin capital letter A with circumflex, U+00C2 ISOlat1 'Agrave': 0x00c0, # latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1 'Alpha': 0x0391, # greek capital letter alpha, U+0391 'Aring': 0x00c5, # latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1 'Atilde': 0x00c3, # latin capital letter A with tilde, U+00C3 ISOlat1 'Auml': 0x00c4, # latin capital letter A with diaeresis, U+00C4 ISOlat1 'Beta': 0x0392, # greek capital letter beta, U+0392 'Ccedil': 0x00c7, # latin capital letter C with cedilla, U+00C7 ISOlat1 'Chi': 0x03a7, # greek capital letter chi, U+03A7 'Dagger': 0x2021, # double dagger, U+2021 ISOpub 'Delta': 0x0394, # greek capital letter delta, U+0394 ISOgrk3 'ETH': 0x00d0, # latin capital letter ETH, U+00D0 ISOlat1 'Eacute': 0x00c9, # latin capital letter E with acute, U+00C9 ISOlat1 'Ecirc': 0x00ca, # latin capital letter E with circumflex, U+00CA ISOlat1 'Egrave': 0x00c8, # latin capital letter E with grave, U+00C8 ISOlat1 'Epsilon': 0x0395, # greek capital letter epsilon, U+0395 'Eta': 0x0397, # greek capital letter eta, U+0397 'Euml': 0x00cb, # latin capital letter E with diaeresis, U+00CB ISOlat1 'Gamma': 0x0393, # greek capital letter gamma, U+0393 ISOgrk3 'Iacute': 0x00cd, # latin capital letter I with acute, U+00CD ISOlat1 'Icirc': 0x00ce, # latin capital letter I with circumflex, U+00CE ISOlat1 'Igrave': 0x00cc, # latin capital letter I with grave, U+00CC ISOlat1 'Iota': 0x0399, # greek capital letter iota, U+0399 'Iuml': 0x00cf, # latin capital letter I with diaeresis, U+00CF ISOlat1 'Kappa': 0x039a, # greek capital letter kappa, U+039A 'Lambda': 0x039b, # greek capital letter lambda, U+039B ISOgrk3 'Mu': 0x039c, # greek capital letter mu, U+039C 'Ntilde': 0x00d1, # latin capital letter N with tilde, U+00D1 ISOlat1 'Nu': 0x039d, # greek capital letter nu, U+039D 'OElig': 0x0152, # latin capital ligature OE, U+0152 ISOlat2 'Oacute': 0x00d3, # latin capital letter O with acute, U+00D3 ISOlat1 'Ocirc': 0x00d4, # latin capital letter O with circumflex, U+00D4 ISOlat1 'Ograve': 0x00d2, # latin capital letter O with grave, U+00D2 ISOlat1 'Omega': 0x03a9, # greek capital letter omega, U+03A9 ISOgrk3 'Omicron': 0x039f, # greek capital letter omicron, U+039F 'Oslash': 0x00d8, # latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1 'Otilde': 0x00d5, # latin capital letter O with tilde, U+00D5 ISOlat1 'Ouml': 0x00d6, # latin capital letter O with diaeresis, U+00D6 ISOlat1 'Phi': 0x03a6, # greek capital letter phi, U+03A6 ISOgrk3 'Pi': 0x03a0, # greek capital letter pi, U+03A0 ISOgrk3 'Prime': 0x2033, # double prime = seconds = inches, U+2033 ISOtech 'Psi': 0x03a8, # greek capital letter psi, U+03A8 ISOgrk3 'Rho': 0x03a1, # greek capital letter rho, U+03A1 'Scaron': 0x0160, # latin capital letter S with caron, U+0160 ISOlat2 'Sigma': 0x03a3, # greek capital letter sigma, U+03A3 ISOgrk3 'THORN': 0x00de, # latin capital letter THORN, U+00DE ISOlat1 'Tau': 0x03a4, # greek capital letter tau, U+03A4 'Theta': 0x0398, # greek capital letter theta, U+0398 ISOgrk3 'Uacute': 0x00da, # latin capital letter U with acute, U+00DA ISOlat1 'Ucirc': 0x00db, # latin capital letter U with circumflex, U+00DB ISOlat1 'Ugrave': 0x00d9, # latin capital letter U with grave, U+00D9 ISOlat1 'Upsilon': 0x03a5, # greek capital letter upsilon, U+03A5 ISOgrk3 'Uuml': 0x00dc, # latin capital letter U with diaeresis, U+00DC ISOlat1 'Xi': 0x039e, # greek capital letter xi, U+039E ISOgrk3 'Yacute': 0x00dd, # latin capital letter Y with acute, U+00DD ISOlat1 'Yuml': 0x0178, # latin capital letter Y with diaeresis, U+0178 ISOlat2 'Zeta': 0x0396, # greek capital letter zeta, U+0396 'aacute': 0x00e1, # latin small letter a with acute, U+00E1 ISOlat1 'acirc': 0x00e2, # latin small letter a with circumflex, U+00E2 ISOlat1 'acute': 0x00b4, # acute accent = spacing acute, U+00B4 ISOdia 'aelig': 0x00e6, # latin small letter ae = latin small ligature ae, U+00E6 ISOlat1 'agrave': 0x00e0, # latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1 'alefsym': 0x2135, # alef symbol = first transfinite cardinal, U+2135 NEW 'alpha': 0x03b1, # greek small letter alpha, U+03B1 ISOgrk3 'amp': 0x0026, # ampersand, U+0026 ISOnum 'and': 0x2227, # logical and = wedge, U+2227 ISOtech 'ang': 0x2220, # angle, U+2220 ISOamso 'aring': 0x00e5, # latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1 'asymp': 0x2248, # almost equal to = asymptotic to, U+2248 ISOamsr 'atilde': 0x00e3, # latin small letter a with tilde, U+00E3 ISOlat1 'auml': 0x00e4, # latin small letter a with diaeresis, U+00E4 ISOlat1 'bdquo': 0x201e, # double low-9 quotation mark, U+201E NEW 'beta': 0x03b2, # greek small letter beta, U+03B2 ISOgrk3 'brvbar': 0x00a6, # broken bar = broken vertical bar, U+00A6 ISOnum 'bull': 0x2022, # bullet = black small circle, U+2022 ISOpub 'cap': 0x2229, # intersection = cap, U+2229 ISOtech 'ccedil': 0x00e7, # latin small letter c with cedilla, U+00E7 ISOlat1 'cedil': 0x00b8, # cedilla = spacing cedilla, U+00B8 ISOdia 'cent': 0x00a2, # cent sign, U+00A2 ISOnum 'chi': 0x03c7, # greek small letter chi, U+03C7 ISOgrk3 'circ': 0x02c6, # modifier letter circumflex accent, U+02C6 ISOpub 'clubs': 0x2663, # black club suit = shamrock, U+2663 ISOpub 'cong': 0x2245, # approximately equal to, U+2245 ISOtech 'copy': 0x00a9, # copyright sign, U+00A9 ISOnum 'crarr': 0x21b5, # downwards arrow with corner leftwards = carriage return, U+21B5 NEW 'cup': 0x222a, # union = cup, U+222A ISOtech 'curren': 0x00a4, # currency sign, U+00A4 ISOnum 'dArr': 0x21d3, # downwards double arrow, U+21D3 ISOamsa 'dagger': 0x2020, # dagger, U+2020 ISOpub 'darr': 0x2193, # downwards arrow, U+2193 ISOnum 'deg': 0x00b0, # degree sign, U+00B0 ISOnum 'delta': 0x03b4, # greek small letter delta, U+03B4 ISOgrk3 'diams': 0x2666, # black diamond suit, U+2666 ISOpub 'divide': 0x00f7, # division sign, U+00F7 ISOnum 'eacute': 0x00e9, # latin small letter e with acute, U+00E9 ISOlat1 'ecirc': 0x00ea, # latin small letter e with circumflex, U+00EA ISOlat1 'egrave': 0x00e8, # latin small letter e with grave, U+00E8 ISOlat1 'empty': 0x2205, # empty set = null set = diameter, U+2205 ISOamso 'emsp': 0x2003, # em space, U+2003 ISOpub 'ensp': 0x2002, # en space, U+2002 ISOpub 'epsilon': 0x03b5, # greek small letter epsilon, U+03B5 ISOgrk3 'equiv': 0x2261, # identical to, U+2261 ISOtech 'eta': 0x03b7, # greek small letter eta, U+03B7 ISOgrk3 'eth': 0x00f0, # latin small letter eth, U+00F0 ISOlat1 'euml': 0x00eb, # latin small letter e with diaeresis, U+00EB ISOlat1 'euro': 0x20ac, # euro sign, U+20AC NEW 'exist': 0x2203, # there exists, U+2203 ISOtech 'fnof': 0x0192, # latin small f with hook = function = florin, U+0192 ISOtech 'forall': 0x2200, # for all, U+2200 ISOtech 'frac12': 0x00bd, # vulgar fraction one half = fraction one half, U+00BD ISOnum 'frac14': 0x00bc, # vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum 'frac34': 0x00be, # vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum 'frasl': 0x2044, # fraction slash, U+2044 NEW 'gamma': 0x03b3, # greek small letter gamma, U+03B3 ISOgrk3 'ge': 0x2265, # greater-than or equal to, U+2265 ISOtech 'gt': 0x003e, # greater-than sign, U+003E ISOnum 'hArr': 0x21d4, # left right double arrow, U+21D4 ISOamsa 'harr': 0x2194, # left right arrow, U+2194 ISOamsa 'hearts': 0x2665, # black heart suit = valentine, U+2665 ISOpub 'hellip': 0x2026, # horizontal ellipsis = three dot leader, U+2026 ISOpub 'iacute': 0x00ed, # latin small letter i with acute, U+00ED ISOlat1 'icirc': 0x00ee, # latin small letter i with circumflex, U+00EE ISOlat1 'iexcl': 0x00a1, # inverted exclamation mark, U+00A1 ISOnum 'igrave': 0x00ec, # latin small letter i with grave, U+00EC ISOlat1 'image': 0x2111, # blackletter capital I = imaginary part, U+2111 ISOamso 'infin': 0x221e, # infinity, U+221E ISOtech 'int': 0x222b, # integral, U+222B ISOtech 'iota': 0x03b9, # greek small letter iota, U+03B9 ISOgrk3 'iquest': 0x00bf, # inverted question mark = turned question mark, U+00BF ISOnum 'isin': 0x2208, # element of, U+2208 ISOtech 'iuml': 0x00ef, # latin small letter i with diaeresis, U+00EF ISOlat1 'kappa': 0x03ba, # greek small letter kappa, U+03BA ISOgrk3 'lArr': 0x21d0, # leftwards double arrow, U+21D0 ISOtech 'lambda': 0x03bb, # greek small letter lambda, U+03BB ISOgrk3 'lang': 0x2329, # left-pointing angle bracket = bra, U+2329 ISOtech 'laquo': 0x00ab, # left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum 'larr': 0x2190, # leftwards arrow, U+2190 ISOnum 'lceil': 0x2308, # left ceiling = apl upstile, U+2308 ISOamsc 'ldquo': 0x201c, # left double quotation mark, U+201C ISOnum 'le': 0x2264, # less-than or equal to, U+2264 ISOtech 'lfloor': 0x230a, # left floor = apl downstile, U+230A ISOamsc 'lowast': 0x2217, # asterisk operator, U+2217 ISOtech 'loz': 0x25ca, # lozenge, U+25CA ISOpub 'lrm': 0x200e, # left-to-right mark, U+200E NEW RFC 2070 'lsaquo': 0x2039, # single left-pointing angle quotation mark, U+2039 ISO proposed 'lsquo': 0x2018, # left single quotation mark, U+2018 ISOnum 'lt': 0x003c, # less-than sign, U+003C ISOnum 'macr': 0x00af, # macron = spacing macron = overline = APL overbar, U+00AF ISOdia 'mdash': 0x2014, # em dash, U+2014 ISOpub 'micro': 0x00b5, # micro sign, U+00B5 ISOnum 'middot': 0x00b7, # middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum 'minus': 0x2212, # minus sign, U+2212 ISOtech 'mu': 0x03bc, # greek small letter mu, U+03BC ISOgrk3 'nabla': 0x2207, # nabla = backward difference, U+2207 ISOtech 'nbsp': 0x00a0, # no-break space = non-breaking space, U+00A0 ISOnum 'ndash': 0x2013, # en dash, U+2013 ISOpub 'ne': 0x2260, # not equal to, U+2260 ISOtech 'ni': 0x220b, # contains as member, U+220B ISOtech 'not': 0x00ac, # not sign, U+00AC ISOnum 'notin': 0x2209, # not an element of, U+2209 ISOtech 'nsub': 0x2284, # not a subset of, U+2284 ISOamsn 'ntilde': 0x00f1, # latin small letter n with tilde, U+00F1 ISOlat1 'nu': 0x03bd, # greek small letter nu, U+03BD ISOgrk3 'oacute': 0x00f3, # latin small letter o with acute, U+00F3 ISOlat1 'ocirc': 0x00f4, # latin small letter o with circumflex, U+00F4 ISOlat1 'oelig': 0x0153, # latin small ligature oe, U+0153 ISOlat2 'ograve': 0x00f2, # latin small letter o with grave, U+00F2 ISOlat1 'oline': 0x203e, # overline = spacing overscore, U+203E NEW 'omega': 0x03c9, # greek small letter omega, U+03C9 ISOgrk3 'omicron': 0x03bf, # greek small letter omicron, U+03BF NEW 'oplus': 0x2295, # circled plus = direct sum, U+2295 ISOamsb 'or': 0x2228, # logical or = vee, U+2228 ISOtech 'ordf': 0x00aa, # feminine ordinal indicator, U+00AA ISOnum 'ordm': 0x00ba, # masculine ordinal indicator, U+00BA ISOnum 'oslash': 0x00f8, # latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1 'otilde': 0x00f5, # latin small letter o with tilde, U+00F5 ISOlat1 'otimes': 0x2297, # circled times = vector product, U+2297 ISOamsb 'ouml': 0x00f6, # latin small letter o with diaeresis, U+00F6 ISOlat1 'para': 0x00b6, # pilcrow sign = paragraph sign, U+00B6 ISOnum 'part': 0x2202, # partial differential, U+2202 ISOtech 'permil': 0x2030, # per mille sign, U+2030 ISOtech 'perp': 0x22a5, # up tack = orthogonal to = perpendicular, U+22A5 ISOtech 'phi': 0x03c6, # greek small letter phi, U+03C6 ISOgrk3 'pi': 0x03c0, # greek small letter pi, U+03C0 ISOgrk3 'piv': 0x03d6, # greek pi symbol, U+03D6 ISOgrk3 'plusmn': 0x00b1, # plus-minus sign = plus-or-minus sign, U+00B1 ISOnum 'pound': 0x00a3, # pound sign, U+00A3 ISOnum 'prime': 0x2032, # prime = minutes = feet, U+2032 ISOtech 'prod': 0x220f, # n-ary product = product sign, U+220F ISOamsb 'prop': 0x221d, # proportional to, U+221D ISOtech 'psi': 0x03c8, # greek small letter psi, U+03C8 ISOgrk3 'quot': 0x0022, # quotation mark = APL quote, U+0022 ISOnum 'rArr': 0x21d2, # rightwards double arrow, U+21D2 ISOtech 'radic': 0x221a, # square root = radical sign, U+221A ISOtech 'rang': 0x232a, # right-pointing angle bracket = ket, U+232A ISOtech 'raquo': 0x00bb, # right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum 'rarr': 0x2192, # rightwards arrow, U+2192 ISOnum 'rceil': 0x2309, # right ceiling, U+2309 ISOamsc 'rdquo': 0x201d, # right double quotation mark, U+201D ISOnum 'real': 0x211c, # blackletter capital R = real part symbol, U+211C ISOamso 'reg': 0x00ae, # registered sign = registered trade mark sign, U+00AE ISOnum 'rfloor': 0x230b, # right floor, U+230B ISOamsc 'rho': 0x03c1, # greek small letter rho, U+03C1 ISOgrk3 'rlm': 0x200f, # right-to-left mark, U+200F NEW RFC 2070 'rsaquo': 0x203a, # single right-pointing angle quotation mark, U+203A ISO proposed 'rsquo': 0x2019, # right single quotation mark, U+2019 ISOnum 'sbquo': 0x201a, # single low-9 quotation mark, U+201A NEW 'scaron': 0x0161, # latin small letter s with caron, U+0161 ISOlat2 'sdot': 0x22c5, # dot operator, U+22C5 ISOamsb 'sect': 0x00a7, # section sign, U+00A7 ISOnum 'shy': 0x00ad, # soft hyphen = discretionary hyphen, U+00AD ISOnum 'sigma': 0x03c3, # greek small letter sigma, U+03C3 ISOgrk3 'sigmaf': 0x03c2, # greek small letter final sigma, U+03C2 ISOgrk3 'sim': 0x223c, # tilde operator = varies with = similar to, U+223C ISOtech 'spades': 0x2660, # black spade suit, U+2660 ISOpub 'sub': 0x2282, # subset of, U+2282 ISOtech 'sube': 0x2286, # subset of or equal to, U+2286 ISOtech 'sum': 0x2211, # n-ary summation, U+2211 ISOamsb 'sup': 0x2283, # superset of, U+2283 ISOtech 'sup1': 0x00b9, # superscript one = superscript digit one, U+00B9 ISOnum 'sup2': 0x00b2, # superscript two = superscript digit two = squared, U+00B2 ISOnum 'sup3': 0x00b3, # superscript three = superscript digit three = cubed, U+00B3 ISOnum 'supe': 0x2287, # superset of or equal to, U+2287 ISOtech 'szlig': 0x00df, # latin small letter sharp s = ess-zed, U+00DF ISOlat1 'tau': 0x03c4, # greek small letter tau, U+03C4 ISOgrk3 'there4': 0x2234, # therefore, U+2234 ISOtech 'theta': 0x03b8, # greek small letter theta, U+03B8 ISOgrk3 'thetasym': 0x03d1, # greek small letter theta symbol, U+03D1 NEW 'thinsp': 0x2009, # thin space, U+2009 ISOpub 'thorn': 0x00fe, # latin small letter thorn with, U+00FE ISOlat1 'tilde': 0x02dc, # small tilde, U+02DC ISOdia 'times': 0x00d7, # multiplication sign, U+00D7 ISOnum 'trade': 0x2122, # trade mark sign, U+2122 ISOnum 'uArr': 0x21d1, # upwards double arrow, U+21D1 ISOamsa 'uacute': 0x00fa, # latin small letter u with acute, U+00FA ISOlat1 'uarr': 0x2191, # upwards arrow, U+2191 ISOnum 'ucirc': 0x00fb, # latin small letter u with circumflex, U+00FB ISOlat1 'ugrave': 0x00f9, # latin small letter u with grave, U+00F9 ISOlat1 'uml': 0x00a8, # diaeresis = spacing diaeresis, U+00A8 ISOdia 'upsih': 0x03d2, # greek upsilon with hook symbol, U+03D2 NEW 'upsilon': 0x03c5, # greek small letter upsilon, U+03C5 ISOgrk3 'uuml': 0x00fc, # latin small letter u with diaeresis, U+00FC ISOlat1 'weierp': 0x2118, # script capital P = power set = Weierstrass p, U+2118 ISOamso 'xi': 0x03be, # greek small letter xi, U+03BE ISOgrk3 'yacute': 0x00fd, # latin small letter y with acute, U+00FD ISOlat1 'yen': 0x00a5, # yen sign = yuan sign, U+00A5 ISOnum 'yuml': 0x00ff, # latin small letter y with diaeresis, U+00FF ISOlat1 'zeta': 0x03b6, # greek small letter zeta, U+03B6 ISOgrk3 'zwj': 0x200d, # zero width joiner, U+200D NEW RFC 2070 'zwnj': 0x200c, # zero width non-joiner, U+200C NEW RFC 2070 } # HTML5 named character references # Generated by Tools/build/parse_html5_entities.py # from https://html.spec.whatwg.org/entities.json and # https://html.spec.whatwg.org/multipage/named-characters.html. # Map HTML5 named character references to the equivalent Unicode character(s). html5 = { 'Aacute': '\xc1', 'aacute': '\xe1', 'Aacute;': '\xc1', 'aacute;': '\xe1', 'Abreve;': '\u0102', 'abreve;': '\u0103', 'ac;': '\u223e', 'acd;': '\u223f', 'acE;': '\u223e\u0333', 'Acirc': '\xc2', 'acirc': '\xe2', 'Acirc;': '\xc2', 'acirc;': '\xe2', 'acute': '\xb4', 'acute;': '\xb4', 'Acy;': '\u0410', 'acy;': '\u0430', 'AElig': '\xc6', 'aelig': '\xe6', 'AElig;': '\xc6', 'aelig;': '\xe6', 'af;': '\u2061', 'Afr;': '\U0001d504', 'afr;': '\U0001d51e', 'Agrave': '\xc0', 'agrave': '\xe0', 'Agrave;': '\xc0', 'agrave;': '\xe0', 'alefsym;': '\u2135', 'aleph;': '\u2135', 'Alpha;': '\u0391', 'alpha;': '\u03b1', 'Amacr;': '\u0100', 'amacr;': '\u0101', 'amalg;': '\u2a3f', 'AMP': '&', 'amp': '&', 'AMP;': '&', 'amp;': '&', 'And;': '\u2a53', 'and;': '\u2227', 'andand;': '\u2a55', 'andd;': '\u2a5c', 'andslope;': '\u2a58', 'andv;': '\u2a5a', 'ang;': '\u2220', 'ange;': '\u29a4', 'angle;': '\u2220', 'angmsd;': '\u2221', 'angmsdaa;': '\u29a8', 'angmsdab;': '\u29a9', 'angmsdac;': '\u29aa', 'angmsdad;': '\u29ab', 'angmsdae;': '\u29ac', 'angmsdaf;': '\u29ad', 'angmsdag;': '\u29ae', 'angmsdah;': '\u29af', 'angrt;': '\u221f', 'angrtvb;': '\u22be', 'angrtvbd;': '\u299d', 'angsph;': '\u2222', 'angst;': '\xc5', 'angzarr;': '\u237c', 'Aogon;': '\u0104', 'aogon;': '\u0105', 'Aopf;': '\U0001d538', 'aopf;': '\U0001d552', 'ap;': '\u2248', 'apacir;': '\u2a6f', 'apE;': '\u2a70', 'ape;': '\u224a', 'apid;': '\u224b', 'apos;': "'", 'ApplyFunction;': '\u2061', 'approx;': '\u2248', 'approxeq;': '\u224a', 'Aring': '\xc5', 'aring': '\xe5', 'Aring;': '\xc5', 'aring;': '\xe5', 'Ascr;': '\U0001d49c', 'ascr;': '\U0001d4b6', 'Assign;': '\u2254', 'ast;': '*', 'asymp;': '\u2248', 'asympeq;': '\u224d', 'Atilde': '\xc3', 'atilde': '\xe3', 'Atilde;': '\xc3', 'atilde;': '\xe3', 'Auml': '\xc4', 'auml': '\xe4', 'Auml;': '\xc4', 'auml;': '\xe4', 'awconint;': '\u2233', 'awint;': '\u2a11', 'backcong;': '\u224c', 'backepsilon;': '\u03f6', 'backprime;': '\u2035', 'backsim;': '\u223d', 'backsimeq;': '\u22cd', 'Backslash;': '\u2216', 'Barv;': '\u2ae7', 'barvee;': '\u22bd', 'Barwed;': '\u2306', 'barwed;': '\u2305', 'barwedge;': '\u2305', 'bbrk;': '\u23b5', 'bbrktbrk;': '\u23b6', 'bcong;': '\u224c', 'Bcy;': '\u0411', 'bcy;': '\u0431', 'bdquo;': '\u201e', 'becaus;': '\u2235', 'Because;': '\u2235', 'because;': '\u2235', 'bemptyv;': '\u29b0', 'bepsi;': '\u03f6', 'bernou;': '\u212c', 'Bernoullis;': '\u212c', 'Beta;': '\u0392', 'beta;': '\u03b2', 'beth;': '\u2136', 'between;': '\u226c', 'Bfr;': '\U0001d505', 'bfr;': '\U0001d51f', 'bigcap;': '\u22c2', 'bigcirc;': '\u25ef', 'bigcup;': '\u22c3', 'bigodot;': '\u2a00', 'bigoplus;': '\u2a01', 'bigotimes;': '\u2a02', 'bigsqcup;': '\u2a06', 'bigstar;': '\u2605', 'bigtriangledown;': '\u25bd', 'bigtriangleup;': '\u25b3', 'biguplus;': '\u2a04', 'bigvee;': '\u22c1', 'bigwedge;': '\u22c0', 'bkarow;': '\u290d', 'blacklozenge;': '\u29eb', 'blacksquare;': '\u25aa', 'blacktriangle;': '\u25b4', 'blacktriangledown;': '\u25be', 'blacktriangleleft;': '\u25c2', 'blacktriangleright;': '\u25b8', 'blank;': '\u2423', 'blk12;': '\u2592', 'blk14;': '\u2591', 'blk34;': '\u2593', 'block;': '\u2588', 'bne;': '=\u20e5', 'bnequiv;': '\u2261\u20e5', 'bNot;': '\u2aed', 'bnot;': '\u2310', 'Bopf;': '\U0001d539', 'bopf;': '\U0001d553', 'bot;': '\u22a5', 'bottom;': '\u22a5', 'bowtie;': '\u22c8', 'boxbox;': '\u29c9', 'boxDL;': '\u2557', 'boxDl;': '\u2556', 'boxdL;': '\u2555', 'boxdl;': '\u2510', 'boxDR;': '\u2554', 'boxDr;': '\u2553', 'boxdR;': '\u2552', 'boxdr;': '\u250c', 'boxH;': '\u2550', 'boxh;': '\u2500', 'boxHD;': '\u2566', 'boxHd;': '\u2564', 'boxhD;': '\u2565', 'boxhd;': '\u252c', 'boxHU;': '\u2569', 'boxHu;': '\u2567', 'boxhU;': '\u2568', 'boxhu;': '\u2534', 'boxminus;': '\u229f', 'boxplus;': '\u229e', 'boxtimes;': '\u22a0', 'boxUL;': '\u255d', 'boxUl;': '\u255c', 'boxuL;': '\u255b', 'boxul;': '\u2518', 'boxUR;': '\u255a', 'boxUr;': '\u2559', 'boxuR;': '\u2558', 'boxur;': '\u2514', 'boxV;': '\u2551', 'boxv;': '\u2502', 'boxVH;': '\u256c', 'boxVh;': '\u256b', 'boxvH;': '\u256a', 'boxvh;': '\u253c', 'boxVL;': '\u2563', 'boxVl;': '\u2562', 'boxvL;': '\u2561', 'boxvl;': '\u2524', 'boxVR;': '\u2560', 'boxVr;': '\u255f', 'boxvR;': '\u255e', 'boxvr;': '\u251c', 'bprime;': '\u2035', 'Breve;': '\u02d8', 'breve;': '\u02d8', 'brvbar': '\xa6', 'brvbar;': '\xa6', 'Bscr;': '\u212c', 'bscr;': '\U0001d4b7', 'bsemi;': '\u204f', 'bsim;': '\u223d', 'bsime;': '\u22cd', 'bsol;': '\\', 'bsolb;': '\u29c5', 'bsolhsub;': '\u27c8', 'bull;': '\u2022', 'bullet;': '\u2022', 'bump;': '\u224e', 'bumpE;': '\u2aae', 'bumpe;': '\u224f', 'Bumpeq;': '\u224e', 'bumpeq;': '\u224f', 'Cacute;': '\u0106', 'cacute;': '\u0107', 'Cap;': '\u22d2', 'cap;': '\u2229', 'capand;': '\u2a44', 'capbrcup;': '\u2a49', 'capcap;': '\u2a4b', 'capcup;': '\u2a47', 'capdot;': '\u2a40', 'CapitalDifferentialD;': '\u2145', 'caps;': '\u2229\ufe00', 'caret;': '\u2041', 'caron;': '\u02c7', 'Cayleys;': '\u212d', 'ccaps;': '\u2a4d', 'Ccaron;': '\u010c', 'ccaron;': '\u010d', 'Ccedil': '\xc7', 'ccedil': '\xe7', 'Ccedil;': '\xc7', 'ccedil;': '\xe7', 'Ccirc;': '\u0108', 'ccirc;': '\u0109', 'Cconint;': '\u2230', 'ccups;': '\u2a4c', 'ccupssm;': '\u2a50', 'Cdot;': '\u010a', 'cdot;': '\u010b', 'cedil': '\xb8', 'cedil;': '\xb8', 'Cedilla;': '\xb8', 'cemptyv;': '\u29b2', 'cent': '\xa2', 'cent;': '\xa2', 'CenterDot;': '\xb7', 'centerdot;': '\xb7', 'Cfr;': '\u212d', 'cfr;': '\U0001d520', 'CHcy;': '\u0427', 'chcy;': '\u0447', 'check;': '\u2713', 'checkmark;': '\u2713', 'Chi;': '\u03a7', 'chi;': '\u03c7', 'cir;': '\u25cb', 'circ;': '\u02c6', 'circeq;': '\u2257', 'circlearrowleft;': '\u21ba', 'circlearrowright;': '\u21bb', 'circledast;': '\u229b', 'circledcirc;': '\u229a', 'circleddash;': '\u229d', 'CircleDot;': '\u2299', 'circledR;': '\xae', 'circledS;': '\u24c8', 'CircleMinus;': '\u2296', 'CirclePlus;': '\u2295', 'CircleTimes;': '\u2297', 'cirE;': '\u29c3', 'cire;': '\u2257', 'cirfnint;': '\u2a10', 'cirmid;': '\u2aef', 'cirscir;': '\u29c2', 'ClockwiseContourIntegral;': '\u2232', 'CloseCurlyDoubleQuote;': '\u201d', 'CloseCurlyQuote;': '\u2019', 'clubs;': '\u2663', 'clubsuit;': '\u2663', 'Colon;': '\u2237', 'colon;': ':', 'Colone;': '\u2a74', 'colone;': '\u2254', 'coloneq;': '\u2254', 'comma;': ',', 'commat;': '@', 'comp;': '\u2201', 'compfn;': '\u2218', 'complement;': '\u2201', 'complexes;': '\u2102', 'cong;': '\u2245', 'congdot;': '\u2a6d', 'Congruent;': '\u2261', 'Conint;': '\u222f', 'conint;': '\u222e', 'ContourIntegral;': '\u222e', 'Copf;': '\u2102', 'copf;': '\U0001d554', 'coprod;': '\u2210', 'Coproduct;': '\u2210', 'COPY': '\xa9', 'copy': '\xa9', 'COPY;': '\xa9', 'copy;': '\xa9', 'copysr;': '\u2117', 'CounterClockwiseContourIntegral;': '\u2233', 'crarr;': '\u21b5', 'Cross;': '\u2a2f', 'cross;': '\u2717', 'Cscr;': '\U0001d49e', 'cscr;': '\U0001d4b8', 'csub;': '\u2acf', 'csube;': '\u2ad1', 'csup;': '\u2ad0', 'csupe;': '\u2ad2', 'ctdot;': '\u22ef', 'cudarrl;': '\u2938', 'cudarrr;': '\u2935', 'cuepr;': '\u22de', 'cuesc;': '\u22df', 'cularr;': '\u21b6', 'cularrp;': '\u293d', 'Cup;': '\u22d3', 'cup;': '\u222a', 'cupbrcap;': '\u2a48', 'CupCap;': '\u224d', 'cupcap;': '\u2a46', 'cupcup;': '\u2a4a', 'cupdot;': '\u228d', 'cupor;': '\u2a45', 'cups;': '\u222a\ufe00', 'curarr;': '\u21b7', 'curarrm;': '\u293c', 'curlyeqprec;': '\u22de', 'curlyeqsucc;': '\u22df', 'curlyvee;': '\u22ce', 'curlywedge;': '\u22cf', 'curren': '\xa4', 'curren;': '\xa4', 'curvearrowleft;': '\u21b6', 'curvearrowright;': '\u21b7', 'cuvee;': '\u22ce', 'cuwed;': '\u22cf', 'cwconint;': '\u2232', 'cwint;': '\u2231', 'cylcty;': '\u232d', 'Dagger;': '\u2021', 'dagger;': '\u2020', 'daleth;': '\u2138', 'Darr;': '\u21a1', 'dArr;': '\u21d3', 'darr;': '\u2193', 'dash;': '\u2010', 'Dashv;': '\u2ae4', 'dashv;': '\u22a3', 'dbkarow;': '\u290f', 'dblac;': '\u02dd', 'Dcaron;': '\u010e', 'dcaron;': '\u010f', 'Dcy;': '\u0414', 'dcy;': '\u0434', 'DD;': '\u2145', 'dd;': '\u2146', 'ddagger;': '\u2021', 'ddarr;': '\u21ca', 'DDotrahd;': '\u2911', 'ddotseq;': '\u2a77', 'deg': '\xb0', 'deg;': '\xb0', 'Del;': '\u2207', 'Delta;': '\u0394', 'delta;': '\u03b4', 'demptyv;': '\u29b1', 'dfisht;': '\u297f', 'Dfr;': '\U0001d507', 'dfr;': '\U0001d521', 'dHar;': '\u2965', 'dharl;': '\u21c3', 'dharr;': '\u21c2', 'DiacriticalAcute;': '\xb4', 'DiacriticalDot;': '\u02d9', 'DiacriticalDoubleAcute;': '\u02dd', 'DiacriticalGrave;': '`', 'DiacriticalTilde;': '\u02dc', 'diam;': '\u22c4', 'Diamond;': '\u22c4', 'diamond;': '\u22c4', 'diamondsuit;': '\u2666', 'diams;': '\u2666', 'die;': '\xa8', 'DifferentialD;': '\u2146', 'digamma;': '\u03dd', 'disin;': '\u22f2', 'div;': '\xf7', 'divide': '\xf7', 'divide;': '\xf7', 'divideontimes;': '\u22c7', 'divonx;': '\u22c7', 'DJcy;': '\u0402', 'djcy;': '\u0452', 'dlcorn;': '\u231e', 'dlcrop;': '\u230d', 'dollar;': '$', 'Dopf;': '\U0001d53b', 'dopf;': '\U0001d555', 'Dot;': '\xa8', 'dot;': '\u02d9', 'DotDot;': '\u20dc', 'doteq;': '\u2250', 'doteqdot;': '\u2251', 'DotEqual;': '\u2250', 'dotminus;': '\u2238', 'dotplus;': '\u2214', 'dotsquare;': '\u22a1', 'doublebarwedge;': '\u2306', 'DoubleContourIntegral;': '\u222f', 'DoubleDot;': '\xa8', 'DoubleDownArrow;': '\u21d3', 'DoubleLeftArrow;': '\u21d0', 'DoubleLeftRightArrow;': '\u21d4', 'DoubleLeftTee;': '\u2ae4', 'DoubleLongLeftArrow;': '\u27f8', 'DoubleLongLeftRightArrow;': '\u27fa', 'DoubleLongRightArrow;': '\u27f9', 'DoubleRightArrow;': '\u21d2', 'DoubleRightTee;': '\u22a8', 'DoubleUpArrow;': '\u21d1', 'DoubleUpDownArrow;': '\u21d5', 'DoubleVerticalBar;': '\u2225', 'DownArrow;': '\u2193', 'Downarrow;': '\u21d3', 'downarrow;': '\u2193', 'DownArrowBar;': '\u2913', 'DownArrowUpArrow;': '\u21f5', 'DownBreve;': '\u0311', 'downdownarrows;': '\u21ca', 'downharpoonleft;': '\u21c3', 'downharpoonright;': '\u21c2', 'DownLeftRightVector;': '\u2950', 'DownLeftTeeVector;': '\u295e', 'DownLeftVector;': '\u21bd', 'DownLeftVectorBar;': '\u2956', 'DownRightTeeVector;': '\u295f', 'DownRightVector;': '\u21c1', 'DownRightVectorBar;': '\u2957', 'DownTee;': '\u22a4', 'DownTeeArrow;': '\u21a7', 'drbkarow;': '\u2910', 'drcorn;': '\u231f', 'drcrop;': '\u230c', 'Dscr;': '\U0001d49f', 'dscr;': '\U0001d4b9', 'DScy;': '\u0405', 'dscy;': '\u0455', 'dsol;': '\u29f6', 'Dstrok;': '\u0110', 'dstrok;': '\u0111', 'dtdot;': '\u22f1', 'dtri;': '\u25bf', 'dtrif;': '\u25be', 'duarr;': '\u21f5', 'duhar;': '\u296f', 'dwangle;': '\u29a6', 'DZcy;': '\u040f', 'dzcy;': '\u045f', 'dzigrarr;': '\u27ff', 'Eacute': '\xc9', 'eacute': '\xe9', 'Eacute;': '\xc9', 'eacute;': '\xe9', 'easter;': '\u2a6e', 'Ecaron;': '\u011a', 'ecaron;': '\u011b', 'ecir;': '\u2256', 'Ecirc': '\xca', 'ecirc': '\xea', 'Ecirc;': '\xca', 'ecirc;': '\xea', 'ecolon;': '\u2255', 'Ecy;': '\u042d', 'ecy;': '\u044d', 'eDDot;': '\u2a77', 'Edot;': '\u0116', 'eDot;': '\u2251', 'edot;': '\u0117', 'ee;': '\u2147', 'efDot;': '\u2252', 'Efr;': '\U0001d508', 'efr;': '\U0001d522', 'eg;': '\u2a9a', 'Egrave': '\xc8', 'egrave': '\xe8', 'Egrave;': '\xc8', 'egrave;': '\xe8', 'egs;': '\u2a96', 'egsdot;': '\u2a98', 'el;': '\u2a99', 'Element;': '\u2208', 'elinters;': '\u23e7', 'ell;': '\u2113', 'els;': '\u2a95', 'elsdot;': '\u2a97', 'Emacr;': '\u0112', 'emacr;': '\u0113', 'empty;': '\u2205', 'emptyset;': '\u2205', 'EmptySmallSquare;': '\u25fb', 'emptyv;': '\u2205', 'EmptyVerySmallSquare;': '\u25ab', 'emsp13;': '\u2004', 'emsp14;': '\u2005', 'emsp;': '\u2003', 'ENG;': '\u014a', 'eng;': '\u014b', 'ensp;': '\u2002', 'Eogon;': '\u0118', 'eogon;': '\u0119', 'Eopf;': '\U0001d53c', 'eopf;': '\U0001d556', 'epar;': '\u22d5', 'eparsl;': '\u29e3', 'eplus;': '\u2a71', 'epsi;': '\u03b5', 'Epsilon;': '\u0395', 'epsilon;': '\u03b5', 'epsiv;': '\u03f5', 'eqcirc;': '\u2256', 'eqcolon;': '\u2255', 'eqsim;': '\u2242', 'eqslantgtr;': '\u2a96', 'eqslantless;': '\u2a95', 'Equal;': '\u2a75', 'equals;': '=', 'EqualTilde;': '\u2242', 'equest;': '\u225f', 'Equilibrium;': '\u21cc', 'equiv;': '\u2261', 'equivDD;': '\u2a78', 'eqvparsl;': '\u29e5', 'erarr;': '\u2971', 'erDot;': '\u2253', 'Escr;': '\u2130', 'escr;': '\u212f', 'esdot;': '\u2250', 'Esim;': '\u2a73', 'esim;': '\u2242', 'Eta;': '\u0397', 'eta;': '\u03b7', 'ETH': '\xd0', 'eth': '\xf0', 'ETH;': '\xd0', 'eth;': '\xf0', 'Euml': '\xcb', 'euml': '\xeb', 'Euml;': '\xcb', 'euml;': '\xeb', 'euro;': '\u20ac', 'excl;': '!', 'exist;': '\u2203', 'Exists;': '\u2203', 'expectation;': '\u2130', 'ExponentialE;': '\u2147', 'exponentiale;': '\u2147', 'fallingdotseq;': '\u2252', 'Fcy;': '\u0424', 'fcy;': '\u0444', 'female;': '\u2640', 'ffilig;': '\ufb03', 'fflig;': '\ufb00', 'ffllig;': '\ufb04', 'Ffr;': '\U0001d509', 'ffr;': '\U0001d523', 'filig;': '\ufb01', 'FilledSmallSquare;': '\u25fc', 'FilledVerySmallSquare;': '\u25aa', 'fjlig;': 'fj', 'flat;': '\u266d', 'fllig;': '\ufb02', 'fltns;': '\u25b1', 'fnof;': '\u0192', 'Fopf;': '\U0001d53d', 'fopf;': '\U0001d557', 'ForAll;': '\u2200', 'forall;': '\u2200', 'fork;': '\u22d4', 'forkv;': '\u2ad9', 'Fouriertrf;': '\u2131', 'fpartint;': '\u2a0d', 'frac12': '\xbd', 'frac12;': '\xbd', 'frac13;': '\u2153', 'frac14': '\xbc', 'frac14;': '\xbc', 'frac15;': '\u2155', 'frac16;': '\u2159', 'frac18;': '\u215b', 'frac23;': '\u2154', 'frac25;': '\u2156', 'frac34': '\xbe', 'frac34;': '\xbe', 'frac35;': '\u2157', 'frac38;': '\u215c', 'frac45;': '\u2158', 'frac56;': '\u215a', 'frac58;': '\u215d', 'frac78;': '\u215e', 'frasl;': '\u2044', 'frown;': '\u2322', 'Fscr;': '\u2131', 'fscr;': '\U0001d4bb', 'gacute;': '\u01f5', 'Gamma;': '\u0393', 'gamma;': '\u03b3', 'Gammad;': '\u03dc', 'gammad;': '\u03dd', 'gap;': '\u2a86', 'Gbreve;': '\u011e', 'gbreve;': '\u011f', 'Gcedil;': '\u0122', 'Gcirc;': '\u011c', 'gcirc;': '\u011d', 'Gcy;': '\u0413', 'gcy;': '\u0433', 'Gdot;': '\u0120', 'gdot;': '\u0121', 'gE;': '\u2267', 'ge;': '\u2265', 'gEl;': '\u2a8c', 'gel;': '\u22db', 'geq;': '\u2265', 'geqq;': '\u2267', 'geqslant;': '\u2a7e', 'ges;': '\u2a7e', 'gescc;': '\u2aa9', 'gesdot;': '\u2a80', 'gesdoto;': '\u2a82', 'gesdotol;': '\u2a84', 'gesl;': '\u22db\ufe00', 'gesles;': '\u2a94', 'Gfr;': '\U0001d50a', 'gfr;': '\U0001d524', 'Gg;': '\u22d9', 'gg;': '\u226b', 'ggg;': '\u22d9', 'gimel;': '\u2137', 'GJcy;': '\u0403', 'gjcy;': '\u0453', 'gl;': '\u2277', 'gla;': '\u2aa5', 'glE;': '\u2a92', 'glj;': '\u2aa4', 'gnap;': '\u2a8a', 'gnapprox;': '\u2a8a', 'gnE;': '\u2269', 'gne;': '\u2a88', 'gneq;': '\u2a88', 'gneqq;': '\u2269', 'gnsim;': '\u22e7', 'Gopf;': '\U0001d53e', 'gopf;': '\U0001d558', 'grave;': '`', 'GreaterEqual;': '\u2265', 'GreaterEqualLess;': '\u22db', 'GreaterFullEqual;': '\u2267', 'GreaterGreater;': '\u2aa2', 'GreaterLess;': '\u2277', 'GreaterSlantEqual;': '\u2a7e', 'GreaterTilde;': '\u2273', 'Gscr;': '\U0001d4a2', 'gscr;': '\u210a', 'gsim;': '\u2273', 'gsime;': '\u2a8e', 'gsiml;': '\u2a90', 'GT': '>', 'gt': '>', 'GT;': '>', 'Gt;': '\u226b', 'gt;': '>', 'gtcc;': '\u2aa7', 'gtcir;': '\u2a7a', 'gtdot;': '\u22d7', 'gtlPar;': '\u2995', 'gtquest;': '\u2a7c', 'gtrapprox;': '\u2a86', 'gtrarr;': '\u2978', 'gtrdot;': '\u22d7', 'gtreqless;': '\u22db', 'gtreqqless;': '\u2a8c', 'gtrless;': '\u2277', 'gtrsim;': '\u2273', 'gvertneqq;': '\u2269\ufe00', 'gvnE;': '\u2269\ufe00', 'Hacek;': '\u02c7', 'hairsp;': '\u200a', 'half;': '\xbd', 'hamilt;': '\u210b', 'HARDcy;': '\u042a', 'hardcy;': '\u044a', 'hArr;': '\u21d4', 'harr;': '\u2194', 'harrcir;': '\u2948', 'harrw;': '\u21ad', 'Hat;': '^', 'hbar;': '\u210f', 'Hcirc;': '\u0124', 'hcirc;': '\u0125', 'hearts;': '\u2665', 'heartsuit;': '\u2665', 'hellip;': '\u2026', 'hercon;': '\u22b9', 'Hfr;': '\u210c', 'hfr;': '\U0001d525', 'HilbertSpace;': '\u210b', 'hksearow;': '\u2925', 'hkswarow;': '\u2926', 'hoarr;': '\u21ff', 'homtht;': '\u223b', 'hookleftarrow;': '\u21a9', 'hookrightarrow;': '\u21aa', 'Hopf;': '\u210d', 'hopf;': '\U0001d559', 'horbar;': '\u2015', 'HorizontalLine;': '\u2500', 'Hscr;': '\u210b', 'hscr;': '\U0001d4bd', 'hslash;': '\u210f', 'Hstrok;': '\u0126', 'hstrok;': '\u0127', 'HumpDownHump;': '\u224e', 'HumpEqual;': '\u224f', 'hybull;': '\u2043', 'hyphen;': '\u2010', 'Iacute': '\xcd', 'iacute': '\xed', 'Iacute;': '\xcd', 'iacute;': '\xed', 'ic;': '\u2063', 'Icirc': '\xce', 'icirc': '\xee', 'Icirc;': '\xce', 'icirc;': '\xee', 'Icy;': '\u0418', 'icy;': '\u0438', 'Idot;': '\u0130', 'IEcy;': '\u0415', 'iecy;': '\u0435', 'iexcl': '\xa1', 'iexcl;': '\xa1', 'iff;': '\u21d4', 'Ifr;': '\u2111', 'ifr;': '\U0001d526', 'Igrave': '\xcc', 'igrave': '\xec', 'Igrave;': '\xcc', 'igrave;': '\xec', 'ii;': '\u2148', 'iiiint;': '\u2a0c', 'iiint;': '\u222d', 'iinfin;': '\u29dc', 'iiota;': '\u2129', 'IJlig;': '\u0132', 'ijlig;': '\u0133', 'Im;': '\u2111', 'Imacr;': '\u012a', 'imacr;': '\u012b', 'image;': '\u2111', 'ImaginaryI;': '\u2148', 'imagline;': '\u2110', 'imagpart;': '\u2111', 'imath;': '\u0131', 'imof;': '\u22b7', 'imped;': '\u01b5', 'Implies;': '\u21d2', 'in;': '\u2208', 'incare;': '\u2105', 'infin;': '\u221e', 'infintie;': '\u29dd', 'inodot;': '\u0131', 'Int;': '\u222c', 'int;': '\u222b', 'intcal;': '\u22ba', 'integers;': '\u2124', 'Integral;': '\u222b', 'intercal;': '\u22ba', 'Intersection;': '\u22c2', 'intlarhk;': '\u2a17', 'intprod;': '\u2a3c', 'InvisibleComma;': '\u2063', 'InvisibleTimes;': '\u2062', 'IOcy;': '\u0401', 'iocy;': '\u0451', 'Iogon;': '\u012e', 'iogon;': '\u012f', 'Iopf;': '\U0001d540', 'iopf;': '\U0001d55a', 'Iota;': '\u0399', 'iota;': '\u03b9', 'iprod;': '\u2a3c', 'iquest': '\xbf', 'iquest;': '\xbf', 'Iscr;': '\u2110', 'iscr;': '\U0001d4be', 'isin;': '\u2208', 'isindot;': '\u22f5', 'isinE;': '\u22f9', 'isins;': '\u22f4', 'isinsv;': '\u22f3', 'isinv;': '\u2208', 'it;': '\u2062', 'Itilde;': '\u0128', 'itilde;': '\u0129', 'Iukcy;': '\u0406', 'iukcy;': '\u0456', 'Iuml': '\xcf', 'iuml': '\xef', 'Iuml;': '\xcf', 'iuml;': '\xef', 'Jcirc;': '\u0134', 'jcirc;': '\u0135', 'Jcy;': '\u0419', 'jcy;': '\u0439', 'Jfr;': '\U0001d50d', 'jfr;': '\U0001d527', 'jmath;': '\u0237', 'Jopf;': '\U0001d541', 'jopf;': '\U0001d55b', 'Jscr;': '\U0001d4a5', 'jscr;': '\U0001d4bf', 'Jsercy;': '\u0408', 'jsercy;': '\u0458', 'Jukcy;': '\u0404', 'jukcy;': '\u0454', 'Kappa;': '\u039a', 'kappa;': '\u03ba', 'kappav;': '\u03f0', 'Kcedil;': '\u0136', 'kcedil;': '\u0137', 'Kcy;': '\u041a', 'kcy;': '\u043a', 'Kfr;': '\U0001d50e', 'kfr;': '\U0001d528', 'kgreen;': '\u0138', 'KHcy;': '\u0425', 'khcy;': '\u0445', 'KJcy;': '\u040c', 'kjcy;': '\u045c', 'Kopf;': '\U0001d542', 'kopf;': '\U0001d55c', 'Kscr;': '\U0001d4a6', 'kscr;': '\U0001d4c0', 'lAarr;': '\u21da', 'Lacute;': '\u0139', 'lacute;': '\u013a', 'laemptyv;': '\u29b4', 'lagran;': '\u2112', 'Lambda;': '\u039b', 'lambda;': '\u03bb', 'Lang;': '\u27ea', 'lang;': '\u27e8', 'langd;': '\u2991', 'langle;': '\u27e8', 'lap;': '\u2a85', 'Laplacetrf;': '\u2112', 'laquo': '\xab', 'laquo;': '\xab', 'Larr;': '\u219e', 'lArr;': '\u21d0', 'larr;': '\u2190', 'larrb;': '\u21e4', 'larrbfs;': '\u291f', 'larrfs;': '\u291d', 'larrhk;': '\u21a9', 'larrlp;': '\u21ab', 'larrpl;': '\u2939', 'larrsim;': '\u2973', 'larrtl;': '\u21a2', 'lat;': '\u2aab', 'lAtail;': '\u291b', 'latail;': '\u2919', 'late;': '\u2aad', 'lates;': '\u2aad\ufe00', 'lBarr;': '\u290e', 'lbarr;': '\u290c', 'lbbrk;': '\u2772', 'lbrace;': '{', 'lbrack;': '[', 'lbrke;': '\u298b', 'lbrksld;': '\u298f', 'lbrkslu;': '\u298d', 'Lcaron;': '\u013d', 'lcaron;': '\u013e', 'Lcedil;': '\u013b', 'lcedil;': '\u013c', 'lceil;': '\u2308', 'lcub;': '{', 'Lcy;': '\u041b', 'lcy;': '\u043b', 'ldca;': '\u2936', 'ldquo;': '\u201c', 'ldquor;': '\u201e', 'ldrdhar;': '\u2967', 'ldrushar;': '\u294b', 'ldsh;': '\u21b2', 'lE;': '\u2266', 'le;': '\u2264', 'LeftAngleBracket;': '\u27e8', 'LeftArrow;': '\u2190', 'Leftarrow;': '\u21d0', 'leftarrow;': '\u2190', 'LeftArrowBar;': '\u21e4', 'LeftArrowRightArrow;': '\u21c6', 'leftarrowtail;': '\u21a2', 'LeftCeiling;': '\u2308', 'LeftDoubleBracket;': '\u27e6', 'LeftDownTeeVector;': '\u2961', 'LeftDownVector;': '\u21c3', 'LeftDownVectorBar;': '\u2959', 'LeftFloor;': '\u230a', 'leftharpoondown;': '\u21bd', 'leftharpoonup;': '\u21bc', 'leftleftarrows;': '\u21c7', 'LeftRightArrow;': '\u2194', 'Leftrightarrow;': '\u21d4', 'leftrightarrow;': '\u2194', 'leftrightarrows;': '\u21c6', 'leftrightharpoons;': '\u21cb', 'leftrightsquigarrow;': '\u21ad', 'LeftRightVector;': '\u294e', 'LeftTee;': '\u22a3', 'LeftTeeArrow;': '\u21a4', 'LeftTeeVector;': '\u295a', 'leftthreetimes;': '\u22cb', 'LeftTriangle;': '\u22b2', 'LeftTriangleBar;': '\u29cf', 'LeftTriangleEqual;': '\u22b4', 'LeftUpDownVector;': '\u2951', 'LeftUpTeeVector;': '\u2960', 'LeftUpVector;': '\u21bf', 'LeftUpVectorBar;': '\u2958', 'LeftVector;': '\u21bc', 'LeftVectorBar;': '\u2952', 'lEg;': '\u2a8b', 'leg;': '\u22da', 'leq;': '\u2264', 'leqq;': '\u2266', 'leqslant;': '\u2a7d', 'les;': '\u2a7d', 'lescc;': '\u2aa8', 'lesdot;': '\u2a7f', 'lesdoto;': '\u2a81', 'lesdotor;': '\u2a83', 'lesg;': '\u22da\ufe00', 'lesges;': '\u2a93', 'lessapprox;': '\u2a85', 'lessdot;': '\u22d6', 'lesseqgtr;': '\u22da', 'lesseqqgtr;': '\u2a8b', 'LessEqualGreater;': '\u22da', 'LessFullEqual;': '\u2266', 'LessGreater;': '\u2276', 'lessgtr;': '\u2276', 'LessLess;': '\u2aa1', 'lesssim;': '\u2272', 'LessSlantEqual;': '\u2a7d', 'LessTilde;': '\u2272', 'lfisht;': '\u297c', 'lfloor;': '\u230a', 'Lfr;': '\U0001d50f', 'lfr;': '\U0001d529', 'lg;': '\u2276', 'lgE;': '\u2a91', 'lHar;': '\u2962', 'lhard;': '\u21bd', 'lharu;': '\u21bc', 'lharul;': '\u296a', 'lhblk;': '\u2584', 'LJcy;': '\u0409', 'ljcy;': '\u0459', 'Ll;': '\u22d8', 'll;': '\u226a', 'llarr;': '\u21c7', 'llcorner;': '\u231e', 'Lleftarrow;': '\u21da', 'llhard;': '\u296b', 'lltri;': '\u25fa', 'Lmidot;': '\u013f', 'lmidot;': '\u0140', 'lmoust;': '\u23b0', 'lmoustache;': '\u23b0', 'lnap;': '\u2a89', 'lnapprox;': '\u2a89', 'lnE;': '\u2268', 'lne;': '\u2a87', 'lneq;': '\u2a87', 'lneqq;': '\u2268', 'lnsim;': '\u22e6', 'loang;': '\u27ec', 'loarr;': '\u21fd', 'lobrk;': '\u27e6', 'LongLeftArrow;': '\u27f5', 'Longleftarrow;': '\u27f8', 'longleftarrow;': '\u27f5', 'LongLeftRightArrow;': '\u27f7', 'Longleftrightarrow;': '\u27fa', 'longleftrightarrow;': '\u27f7', 'longmapsto;': '\u27fc', 'LongRightArrow;': '\u27f6', 'Longrightarrow;': '\u27f9', 'longrightarrow;': '\u27f6', 'looparrowleft;': '\u21ab', 'looparrowright;': '\u21ac', 'lopar;': '\u2985', 'Lopf;': '\U0001d543', 'lopf;': '\U0001d55d', 'loplus;': '\u2a2d', 'lotimes;': '\u2a34', 'lowast;': '\u2217', 'lowbar;': '_', 'LowerLeftArrow;': '\u2199', 'LowerRightArrow;': '\u2198', 'loz;': '\u25ca', 'lozenge;': '\u25ca', 'lozf;': '\u29eb', 'lpar;': '(', 'lparlt;': '\u2993', 'lrarr;': '\u21c6', 'lrcorner;': '\u231f', 'lrhar;': '\u21cb', 'lrhard;': '\u296d', 'lrm;': '\u200e', 'lrtri;': '\u22bf', 'lsaquo;': '\u2039', 'Lscr;': '\u2112', 'lscr;': '\U0001d4c1', 'Lsh;': '\u21b0', 'lsh;': '\u21b0', 'lsim;': '\u2272', 'lsime;': '\u2a8d', 'lsimg;': '\u2a8f', 'lsqb;': '[', 'lsquo;': '\u2018', 'lsquor;': '\u201a', 'Lstrok;': '\u0141', 'lstrok;': '\u0142', 'LT': '<', 'lt': '<', 'LT;': '<', 'Lt;': '\u226a', 'lt;': '<', 'ltcc;': '\u2aa6', 'ltcir;': '\u2a79', 'ltdot;': '\u22d6', 'lthree;': '\u22cb', 'ltimes;': '\u22c9', 'ltlarr;': '\u2976', 'ltquest;': '\u2a7b', 'ltri;': '\u25c3', 'ltrie;': '\u22b4', 'ltrif;': '\u25c2', 'ltrPar;': '\u2996', 'lurdshar;': '\u294a', 'luruhar;': '\u2966', 'lvertneqq;': '\u2268\ufe00', 'lvnE;': '\u2268\ufe00', 'macr': '\xaf', 'macr;': '\xaf', 'male;': '\u2642', 'malt;': '\u2720', 'maltese;': '\u2720', 'Map;': '\u2905', 'map;': '\u21a6', 'mapsto;': '\u21a6', 'mapstodown;': '\u21a7', 'mapstoleft;': '\u21a4', 'mapstoup;': '\u21a5', 'marker;': '\u25ae', 'mcomma;': '\u2a29', 'Mcy;': '\u041c', 'mcy;': '\u043c', 'mdash;': '\u2014', 'mDDot;': '\u223a', 'measuredangle;': '\u2221', 'MediumSpace;': '\u205f', 'Mellintrf;': '\u2133', 'Mfr;': '\U0001d510', 'mfr;': '\U0001d52a', 'mho;': '\u2127', 'micro': '\xb5', 'micro;': '\xb5', 'mid;': '\u2223', 'midast;': '*', 'midcir;': '\u2af0', 'middot': '\xb7', 'middot;': '\xb7', 'minus;': '\u2212', 'minusb;': '\u229f', 'minusd;': '\u2238', 'minusdu;': '\u2a2a', 'MinusPlus;': '\u2213', 'mlcp;': '\u2adb', 'mldr;': '\u2026', 'mnplus;': '\u2213', 'models;': '\u22a7', 'Mopf;': '\U0001d544', 'mopf;': '\U0001d55e', 'mp;': '\u2213', 'Mscr;': '\u2133', 'mscr;': '\U0001d4c2', 'mstpos;': '\u223e', 'Mu;': '\u039c', 'mu;': '\u03bc', 'multimap;': '\u22b8', 'mumap;': '\u22b8', 'nabla;': '\u2207', 'Nacute;': '\u0143', 'nacute;': '\u0144', 'nang;': '\u2220\u20d2', 'nap;': '\u2249', 'napE;': '\u2a70\u0338', 'napid;': '\u224b\u0338', 'napos;': '\u0149', 'napprox;': '\u2249', 'natur;': '\u266e', 'natural;': '\u266e', 'naturals;': '\u2115', 'nbsp': '\xa0', 'nbsp;': '\xa0', 'nbump;': '\u224e\u0338', 'nbumpe;': '\u224f\u0338', 'ncap;': '\u2a43', 'Ncaron;': '\u0147', 'ncaron;': '\u0148', 'Ncedil;': '\u0145', 'ncedil;': '\u0146', 'ncong;': '\u2247', 'ncongdot;': '\u2a6d\u0338', 'ncup;': '\u2a42', 'Ncy;': '\u041d', 'ncy;': '\u043d', 'ndash;': '\u2013', 'ne;': '\u2260', 'nearhk;': '\u2924', 'neArr;': '\u21d7', 'nearr;': '\u2197', 'nearrow;': '\u2197', 'nedot;': '\u2250\u0338', 'NegativeMediumSpace;': '\u200b', 'NegativeThickSpace;': '\u200b', 'NegativeThinSpace;': '\u200b', 'NegativeVeryThinSpace;': '\u200b', 'nequiv;': '\u2262', 'nesear;': '\u2928', 'nesim;': '\u2242\u0338', 'NestedGreaterGreater;': '\u226b', 'NestedLessLess;': '\u226a', 'NewLine;': '\n', 'nexist;': '\u2204', 'nexists;': '\u2204', 'Nfr;': '\U0001d511', 'nfr;': '\U0001d52b', 'ngE;': '\u2267\u0338', 'nge;': '\u2271', 'ngeq;': '\u2271', 'ngeqq;': '\u2267\u0338', 'ngeqslant;': '\u2a7e\u0338', 'nges;': '\u2a7e\u0338', 'nGg;': '\u22d9\u0338', 'ngsim;': '\u2275', 'nGt;': '\u226b\u20d2', 'ngt;': '\u226f', 'ngtr;': '\u226f', 'nGtv;': '\u226b\u0338', 'nhArr;': '\u21ce', 'nharr;': '\u21ae', 'nhpar;': '\u2af2', 'ni;': '\u220b', 'nis;': '\u22fc', 'nisd;': '\u22fa', 'niv;': '\u220b', 'NJcy;': '\u040a', 'njcy;': '\u045a', 'nlArr;': '\u21cd', 'nlarr;': '\u219a', 'nldr;': '\u2025', 'nlE;': '\u2266\u0338', 'nle;': '\u2270', 'nLeftarrow;': '\u21cd', 'nleftarrow;': '\u219a', 'nLeftrightarrow;': '\u21ce', 'nleftrightarrow;': '\u21ae', 'nleq;': '\u2270', 'nleqq;': '\u2266\u0338', 'nleqslant;': '\u2a7d\u0338', 'nles;': '\u2a7d\u0338', 'nless;': '\u226e', 'nLl;': '\u22d8\u0338', 'nlsim;': '\u2274', 'nLt;': '\u226a\u20d2', 'nlt;': '\u226e', 'nltri;': '\u22ea', 'nltrie;': '\u22ec', 'nLtv;': '\u226a\u0338', 'nmid;': '\u2224', 'NoBreak;': '\u2060', 'NonBreakingSpace;': '\xa0', 'Nopf;': '\u2115', 'nopf;': '\U0001d55f', 'not': '\xac', 'Not;': '\u2aec', 'not;': '\xac', 'NotCongruent;': '\u2262', 'NotCupCap;': '\u226d', 'NotDoubleVerticalBar;': '\u2226', 'NotElement;': '\u2209', 'NotEqual;': '\u2260', 'NotEqualTilde;': '\u2242\u0338', 'NotExists;': '\u2204', 'NotGreater;': '\u226f', 'NotGreaterEqual;': '\u2271', 'NotGreaterFullEqual;': '\u2267\u0338', 'NotGreaterGreater;': '\u226b\u0338', 'NotGreaterLess;': '\u2279', 'NotGreaterSlantEqual;': '\u2a7e\u0338', 'NotGreaterTilde;': '\u2275', 'NotHumpDownHump;': '\u224e\u0338', 'NotHumpEqual;': '\u224f\u0338', 'notin;': '\u2209', 'notindot;': '\u22f5\u0338', 'notinE;': '\u22f9\u0338', 'notinva;': '\u2209', 'notinvb;': '\u22f7', 'notinvc;': '\u22f6', 'NotLeftTriangle;': '\u22ea', 'NotLeftTriangleBar;': '\u29cf\u0338', 'NotLeftTriangleEqual;': '\u22ec', 'NotLess;': '\u226e', 'NotLessEqual;': '\u2270', 'NotLessGreater;': '\u2278', 'NotLessLess;': '\u226a\u0338', 'NotLessSlantEqual;': '\u2a7d\u0338', 'NotLessTilde;': '\u2274', 'NotNestedGreaterGreater;': '\u2aa2\u0338', 'NotNestedLessLess;': '\u2aa1\u0338', 'notni;': '\u220c', 'notniva;': '\u220c', 'notnivb;': '\u22fe', 'notnivc;': '\u22fd', 'NotPrecedes;': '\u2280', 'NotPrecedesEqual;': '\u2aaf\u0338', 'NotPrecedesSlantEqual;': '\u22e0', 'NotReverseElement;': '\u220c', 'NotRightTriangle;': '\u22eb', 'NotRightTriangleBar;': '\u29d0\u0338', 'NotRightTriangleEqual;': '\u22ed', 'NotSquareSubset;': '\u228f\u0338', 'NotSquareSubsetEqual;': '\u22e2', 'NotSquareSuperset;': '\u2290\u0338', 'NotSquareSupersetEqual;': '\u22e3', 'NotSubset;': '\u2282\u20d2', 'NotSubsetEqual;': '\u2288', 'NotSucceeds;': '\u2281', 'NotSucceedsEqual;': '\u2ab0\u0338', 'NotSucceedsSlantEqual;': '\u22e1', 'NotSucceedsTilde;': '\u227f\u0338', 'NotSuperset;': '\u2283\u20d2', 'NotSupersetEqual;': '\u2289', 'NotTilde;': '\u2241', 'NotTildeEqual;': '\u2244', 'NotTildeFullEqual;': '\u2247', 'NotTildeTilde;': '\u2249', 'NotVerticalBar;': '\u2224', 'npar;': '\u2226', 'nparallel;': '\u2226', 'nparsl;': '\u2afd\u20e5', 'npart;': '\u2202\u0338', 'npolint;': '\u2a14', 'npr;': '\u2280', 'nprcue;': '\u22e0', 'npre;': '\u2aaf\u0338', 'nprec;': '\u2280', 'npreceq;': '\u2aaf\u0338', 'nrArr;': '\u21cf', 'nrarr;': '\u219b', 'nrarrc;': '\u2933\u0338', 'nrarrw;': '\u219d\u0338', 'nRightarrow;': '\u21cf', 'nrightarrow;': '\u219b', 'nrtri;': '\u22eb', 'nrtrie;': '\u22ed', 'nsc;': '\u2281', 'nsccue;': '\u22e1', 'nsce;': '\u2ab0\u0338', 'Nscr;': '\U0001d4a9', 'nscr;': '\U0001d4c3', 'nshortmid;': '\u2224', 'nshortparallel;': '\u2226', 'nsim;': '\u2241', 'nsime;': '\u2244', 'nsimeq;': '\u2244', 'nsmid;': '\u2224', 'nspar;': '\u2226', 'nsqsube;': '\u22e2', 'nsqsupe;': '\u22e3', 'nsub;': '\u2284', 'nsubE;': '\u2ac5\u0338', 'nsube;': '\u2288', 'nsubset;': '\u2282\u20d2', 'nsubseteq;': '\u2288', 'nsubseteqq;': '\u2ac5\u0338', 'nsucc;': '\u2281', 'nsucceq;': '\u2ab0\u0338', 'nsup;': '\u2285', 'nsupE;': '\u2ac6\u0338', 'nsupe;': '\u2289', 'nsupset;': '\u2283\u20d2', 'nsupseteq;': '\u2289', 'nsupseteqq;': '\u2ac6\u0338', 'ntgl;': '\u2279', 'Ntilde': '\xd1', 'ntilde': '\xf1', 'Ntilde;': '\xd1', 'ntilde;': '\xf1', 'ntlg;': '\u2278', 'ntriangleleft;': '\u22ea', 'ntrianglelefteq;': '\u22ec', 'ntriangleright;': '\u22eb', 'ntrianglerighteq;': '\u22ed', 'Nu;': '\u039d', 'nu;': '\u03bd', 'num;': '#', 'numero;': '\u2116', 'numsp;': '\u2007', 'nvap;': '\u224d\u20d2', 'nVDash;': '\u22af', 'nVdash;': '\u22ae', 'nvDash;': '\u22ad', 'nvdash;': '\u22ac', 'nvge;': '\u2265\u20d2', 'nvgt;': '>\u20d2', 'nvHarr;': '\u2904', 'nvinfin;': '\u29de', 'nvlArr;': '\u2902', 'nvle;': '\u2264\u20d2', 'nvlt;': '<\u20d2', 'nvltrie;': '\u22b4\u20d2', 'nvrArr;': '\u2903', 'nvrtrie;': '\u22b5\u20d2', 'nvsim;': '\u223c\u20d2', 'nwarhk;': '\u2923', 'nwArr;': '\u21d6', 'nwarr;': '\u2196', 'nwarrow;': '\u2196', 'nwnear;': '\u2927', 'Oacute': '\xd3', 'oacute': '\xf3', 'Oacute;': '\xd3', 'oacute;': '\xf3', 'oast;': '\u229b', 'ocir;': '\u229a', 'Ocirc': '\xd4', 'ocirc': '\xf4', 'Ocirc;': '\xd4', 'ocirc;': '\xf4', 'Ocy;': '\u041e', 'ocy;': '\u043e', 'odash;': '\u229d', 'Odblac;': '\u0150', 'odblac;': '\u0151', 'odiv;': '\u2a38', 'odot;': '\u2299', 'odsold;': '\u29bc', 'OElig;': '\u0152', 'oelig;': '\u0153', 'ofcir;': '\u29bf', 'Ofr;': '\U0001d512', 'ofr;': '\U0001d52c', 'ogon;': '\u02db', 'Ograve': '\xd2', 'ograve': '\xf2', 'Ograve;': '\xd2', 'ograve;': '\xf2', 'ogt;': '\u29c1', 'ohbar;': '\u29b5', 'ohm;': '\u03a9', 'oint;': '\u222e', 'olarr;': '\u21ba', 'olcir;': '\u29be', 'olcross;': '\u29bb', 'oline;': '\u203e', 'olt;': '\u29c0', 'Omacr;': '\u014c', 'omacr;': '\u014d', 'Omega;': '\u03a9', 'omega;': '\u03c9', 'Omicron;': '\u039f', 'omicron;': '\u03bf', 'omid;': '\u29b6', 'ominus;': '\u2296', 'Oopf;': '\U0001d546', 'oopf;': '\U0001d560', 'opar;': '\u29b7', 'OpenCurlyDoubleQuote;': '\u201c', 'OpenCurlyQuote;': '\u2018', 'operp;': '\u29b9', 'oplus;': '\u2295', 'Or;': '\u2a54', 'or;': '\u2228', 'orarr;': '\u21bb', 'ord;': '\u2a5d', 'order;': '\u2134', 'orderof;': '\u2134', 'ordf': '\xaa', 'ordf;': '\xaa', 'ordm': '\xba', 'ordm;': '\xba', 'origof;': '\u22b6', 'oror;': '\u2a56', 'orslope;': '\u2a57', 'orv;': '\u2a5b', 'oS;': '\u24c8', 'Oscr;': '\U0001d4aa', 'oscr;': '\u2134', 'Oslash': '\xd8', 'oslash': '\xf8', 'Oslash;': '\xd8', 'oslash;': '\xf8', 'osol;': '\u2298', 'Otilde': '\xd5', 'otilde': '\xf5', 'Otilde;': '\xd5', 'otilde;': '\xf5', 'Otimes;': '\u2a37', 'otimes;': '\u2297', 'otimesas;': '\u2a36', 'Ouml': '\xd6', 'ouml': '\xf6', 'Ouml;': '\xd6', 'ouml;': '\xf6', 'ovbar;': '\u233d', 'OverBar;': '\u203e', 'OverBrace;': '\u23de', 'OverBracket;': '\u23b4', 'OverParenthesis;': '\u23dc', 'par;': '\u2225', 'para': '\xb6', 'para;': '\xb6', 'parallel;': '\u2225', 'parsim;': '\u2af3', 'parsl;': '\u2afd', 'part;': '\u2202', 'PartialD;': '\u2202', 'Pcy;': '\u041f', 'pcy;': '\u043f', 'percnt;': '%', 'period;': '.', 'permil;': '\u2030', 'perp;': '\u22a5', 'pertenk;': '\u2031', 'Pfr;': '\U0001d513', 'pfr;': '\U0001d52d', 'Phi;': '\u03a6', 'phi;': '\u03c6', 'phiv;': '\u03d5', 'phmmat;': '\u2133', 'phone;': '\u260e', 'Pi;': '\u03a0', 'pi;': '\u03c0', 'pitchfork;': '\u22d4', 'piv;': '\u03d6', 'planck;': '\u210f', 'planckh;': '\u210e', 'plankv;': '\u210f', 'plus;': '+', 'plusacir;': '\u2a23', 'plusb;': '\u229e', 'pluscir;': '\u2a22', 'plusdo;': '\u2214', 'plusdu;': '\u2a25', 'pluse;': '\u2a72', 'PlusMinus;': '\xb1', 'plusmn': '\xb1', 'plusmn;': '\xb1', 'plussim;': '\u2a26', 'plustwo;': '\u2a27', 'pm;': '\xb1', 'Poincareplane;': '\u210c', 'pointint;': '\u2a15', 'Popf;': '\u2119', 'popf;': '\U0001d561', 'pound': '\xa3', 'pound;': '\xa3', 'Pr;': '\u2abb', 'pr;': '\u227a', 'prap;': '\u2ab7', 'prcue;': '\u227c', 'prE;': '\u2ab3', 'pre;': '\u2aaf', 'prec;': '\u227a', 'precapprox;': '\u2ab7', 'preccurlyeq;': '\u227c', 'Precedes;': '\u227a', 'PrecedesEqual;': '\u2aaf', 'PrecedesSlantEqual;': '\u227c', 'PrecedesTilde;': '\u227e', 'preceq;': '\u2aaf', 'precnapprox;': '\u2ab9', 'precneqq;': '\u2ab5', 'precnsim;': '\u22e8', 'precsim;': '\u227e', 'Prime;': '\u2033', 'prime;': '\u2032', 'primes;': '\u2119', 'prnap;': '\u2ab9', 'prnE;': '\u2ab5', 'prnsim;': '\u22e8', 'prod;': '\u220f', 'Product;': '\u220f', 'profalar;': '\u232e', 'profline;': '\u2312', 'profsurf;': '\u2313', 'prop;': '\u221d', 'Proportion;': '\u2237', 'Proportional;': '\u221d', 'propto;': '\u221d', 'prsim;': '\u227e', 'prurel;': '\u22b0', 'Pscr;': '\U0001d4ab', 'pscr;': '\U0001d4c5', 'Psi;': '\u03a8', 'psi;': '\u03c8', 'puncsp;': '\u2008', 'Qfr;': '\U0001d514', 'qfr;': '\U0001d52e', 'qint;': '\u2a0c', 'Qopf;': '\u211a', 'qopf;': '\U0001d562', 'qprime;': '\u2057', 'Qscr;': '\U0001d4ac', 'qscr;': '\U0001d4c6', 'quaternions;': '\u210d', 'quatint;': '\u2a16', 'quest;': '?', 'questeq;': '\u225f', 'QUOT': '"', 'quot': '"', 'QUOT;': '"', 'quot;': '"', 'rAarr;': '\u21db', 'race;': '\u223d\u0331', 'Racute;': '\u0154', 'racute;': '\u0155', 'radic;': '\u221a', 'raemptyv;': '\u29b3', 'Rang;': '\u27eb', 'rang;': '\u27e9', 'rangd;': '\u2992', 'range;': '\u29a5', 'rangle;': '\u27e9', 'raquo': '\xbb', 'raquo;': '\xbb', 'Rarr;': '\u21a0', 'rArr;': '\u21d2', 'rarr;': '\u2192', 'rarrap;': '\u2975', 'rarrb;': '\u21e5', 'rarrbfs;': '\u2920', 'rarrc;': '\u2933', 'rarrfs;': '\u291e', 'rarrhk;': '\u21aa', 'rarrlp;': '\u21ac', 'rarrpl;': '\u2945', 'rarrsim;': '\u2974', 'Rarrtl;': '\u2916', 'rarrtl;': '\u21a3', 'rarrw;': '\u219d', 'rAtail;': '\u291c', 'ratail;': '\u291a', 'ratio;': '\u2236', 'rationals;': '\u211a', 'RBarr;': '\u2910', 'rBarr;': '\u290f', 'rbarr;': '\u290d', 'rbbrk;': '\u2773', 'rbrace;': '}', 'rbrack;': ']', 'rbrke;': '\u298c', 'rbrksld;': '\u298e', 'rbrkslu;': '\u2990', 'Rcaron;': '\u0158', 'rcaron;': '\u0159', 'Rcedil;': '\u0156', 'rcedil;': '\u0157', 'rceil;': '\u2309', 'rcub;': '}', 'Rcy;': '\u0420', 'rcy;': '\u0440', 'rdca;': '\u2937', 'rdldhar;': '\u2969', 'rdquo;': '\u201d', 'rdquor;': '\u201d', 'rdsh;': '\u21b3', 'Re;': '\u211c', 'real;': '\u211c', 'realine;': '\u211b', 'realpart;': '\u211c', 'reals;': '\u211d', 'rect;': '\u25ad', 'REG': '\xae', 'reg': '\xae', 'REG;': '\xae', 'reg;': '\xae', 'ReverseElement;': '\u220b', 'ReverseEquilibrium;': '\u21cb', 'ReverseUpEquilibrium;': '\u296f', 'rfisht;': '\u297d', 'rfloor;': '\u230b', 'Rfr;': '\u211c', 'rfr;': '\U0001d52f', 'rHar;': '\u2964', 'rhard;': '\u21c1', 'rharu;': '\u21c0', 'rharul;': '\u296c', 'Rho;': '\u03a1', 'rho;': '\u03c1', 'rhov;': '\u03f1', 'RightAngleBracket;': '\u27e9', 'RightArrow;': '\u2192', 'Rightarrow;': '\u21d2', 'rightarrow;': '\u2192', 'RightArrowBar;': '\u21e5', 'RightArrowLeftArrow;': '\u21c4', 'rightarrowtail;': '\u21a3', 'RightCeiling;': '\u2309', 'RightDoubleBracket;': '\u27e7', 'RightDownTeeVector;': '\u295d', 'RightDownVector;': '\u21c2', 'RightDownVectorBar;': '\u2955', 'RightFloor;': '\u230b', 'rightharpoondown;': '\u21c1', 'rightharpoonup;': '\u21c0', 'rightleftarrows;': '\u21c4', 'rightleftharpoons;': '\u21cc', 'rightrightarrows;': '\u21c9', 'rightsquigarrow;': '\u219d', 'RightTee;': '\u22a2', 'RightTeeArrow;': '\u21a6', 'RightTeeVector;': '\u295b', 'rightthreetimes;': '\u22cc', 'RightTriangle;': '\u22b3', 'RightTriangleBar;': '\u29d0', 'RightTriangleEqual;': '\u22b5', 'RightUpDownVector;': '\u294f', 'RightUpTeeVector;': '\u295c', 'RightUpVector;': '\u21be', 'RightUpVectorBar;': '\u2954', 'RightVector;': '\u21c0', 'RightVectorBar;': '\u2953', 'ring;': '\u02da', 'risingdotseq;': '\u2253', 'rlarr;': '\u21c4', 'rlhar;': '\u21cc', 'rlm;': '\u200f', 'rmoust;': '\u23b1', 'rmoustache;': '\u23b1', 'rnmid;': '\u2aee', 'roang;': '\u27ed', 'roarr;': '\u21fe', 'robrk;': '\u27e7', 'ropar;': '\u2986', 'Ropf;': '\u211d', 'ropf;': '\U0001d563', 'roplus;': '\u2a2e', 'rotimes;': '\u2a35', 'RoundImplies;': '\u2970', 'rpar;': ')', 'rpargt;': '\u2994', 'rppolint;': '\u2a12', 'rrarr;': '\u21c9', 'Rrightarrow;': '\u21db', 'rsaquo;': '\u203a', 'Rscr;': '\u211b', 'rscr;': '\U0001d4c7', 'Rsh;': '\u21b1', 'rsh;': '\u21b1', 'rsqb;': ']', 'rsquo;': '\u2019', 'rsquor;': '\u2019', 'rthree;': '\u22cc', 'rtimes;': '\u22ca', 'rtri;': '\u25b9', 'rtrie;': '\u22b5', 'rtrif;': '\u25b8', 'rtriltri;': '\u29ce', 'RuleDelayed;': '\u29f4', 'ruluhar;': '\u2968', 'rx;': '\u211e', 'Sacute;': '\u015a', 'sacute;': '\u015b', 'sbquo;': '\u201a', 'Sc;': '\u2abc', 'sc;': '\u227b', 'scap;': '\u2ab8', 'Scaron;': '\u0160', 'scaron;': '\u0161', 'sccue;': '\u227d', 'scE;': '\u2ab4', 'sce;': '\u2ab0', 'Scedil;': '\u015e', 'scedil;': '\u015f', 'Scirc;': '\u015c', 'scirc;': '\u015d', 'scnap;': '\u2aba', 'scnE;': '\u2ab6', 'scnsim;': '\u22e9', 'scpolint;': '\u2a13', 'scsim;': '\u227f', 'Scy;': '\u0421', 'scy;': '\u0441', 'sdot;': '\u22c5', 'sdotb;': '\u22a1', 'sdote;': '\u2a66', 'searhk;': '\u2925', 'seArr;': '\u21d8', 'searr;': '\u2198', 'searrow;': '\u2198', 'sect': '\xa7', 'sect;': '\xa7', 'semi;': ';', 'seswar;': '\u2929', 'setminus;': '\u2216', 'setmn;': '\u2216', 'sext;': '\u2736', 'Sfr;': '\U0001d516', 'sfr;': '\U0001d530', 'sfrown;': '\u2322', 'sharp;': '\u266f', 'SHCHcy;': '\u0429', 'shchcy;': '\u0449', 'SHcy;': '\u0428', 'shcy;': '\u0448', 'ShortDownArrow;': '\u2193', 'ShortLeftArrow;': '\u2190', 'shortmid;': '\u2223', 'shortparallel;': '\u2225', 'ShortRightArrow;': '\u2192', 'ShortUpArrow;': '\u2191', 'shy': '\xad', 'shy;': '\xad', 'Sigma;': '\u03a3', 'sigma;': '\u03c3', 'sigmaf;': '\u03c2', 'sigmav;': '\u03c2', 'sim;': '\u223c', 'simdot;': '\u2a6a', 'sime;': '\u2243', 'simeq;': '\u2243', 'simg;': '\u2a9e', 'simgE;': '\u2aa0', 'siml;': '\u2a9d', 'simlE;': '\u2a9f', 'simne;': '\u2246', 'simplus;': '\u2a24', 'simrarr;': '\u2972', 'slarr;': '\u2190', 'SmallCircle;': '\u2218', 'smallsetminus;': '\u2216', 'smashp;': '\u2a33', 'smeparsl;': '\u29e4', 'smid;': '\u2223', 'smile;': '\u2323', 'smt;': '\u2aaa', 'smte;': '\u2aac', 'smtes;': '\u2aac\ufe00', 'SOFTcy;': '\u042c', 'softcy;': '\u044c', 'sol;': '/', 'solb;': '\u29c4', 'solbar;': '\u233f', 'Sopf;': '\U0001d54a', 'sopf;': '\U0001d564', 'spades;': '\u2660', 'spadesuit;': '\u2660', 'spar;': '\u2225', 'sqcap;': '\u2293', 'sqcaps;': '\u2293\ufe00', 'sqcup;': '\u2294', 'sqcups;': '\u2294\ufe00', 'Sqrt;': '\u221a', 'sqsub;': '\u228f', 'sqsube;': '\u2291', 'sqsubset;': '\u228f', 'sqsubseteq;': '\u2291', 'sqsup;': '\u2290', 'sqsupe;': '\u2292', 'sqsupset;': '\u2290', 'sqsupseteq;': '\u2292', 'squ;': '\u25a1', 'Square;': '\u25a1', 'square;': '\u25a1', 'SquareIntersection;': '\u2293', 'SquareSubset;': '\u228f', 'SquareSubsetEqual;': '\u2291', 'SquareSuperset;': '\u2290', 'SquareSupersetEqual;': '\u2292', 'SquareUnion;': '\u2294', 'squarf;': '\u25aa', 'squf;': '\u25aa', 'srarr;': '\u2192', 'Sscr;': '\U0001d4ae', 'sscr;': '\U0001d4c8', 'ssetmn;': '\u2216', 'ssmile;': '\u2323', 'sstarf;': '\u22c6', 'Star;': '\u22c6', 'star;': '\u2606', 'starf;': '\u2605', 'straightepsilon;': '\u03f5', 'straightphi;': '\u03d5', 'strns;': '\xaf', 'Sub;': '\u22d0', 'sub;': '\u2282', 'subdot;': '\u2abd', 'subE;': '\u2ac5', 'sube;': '\u2286', 'subedot;': '\u2ac3', 'submult;': '\u2ac1', 'subnE;': '\u2acb', 'subne;': '\u228a', 'subplus;': '\u2abf', 'subrarr;': '\u2979', 'Subset;': '\u22d0', 'subset;': '\u2282', 'subseteq;': '\u2286', 'subseteqq;': '\u2ac5', 'SubsetEqual;': '\u2286', 'subsetneq;': '\u228a', 'subsetneqq;': '\u2acb', 'subsim;': '\u2ac7', 'subsub;': '\u2ad5', 'subsup;': '\u2ad3', 'succ;': '\u227b', 'succapprox;': '\u2ab8', 'succcurlyeq;': '\u227d', 'Succeeds;': '\u227b', 'SucceedsEqual;': '\u2ab0', 'SucceedsSlantEqual;': '\u227d', 'SucceedsTilde;': '\u227f', 'succeq;': '\u2ab0', 'succnapprox;': '\u2aba', 'succneqq;': '\u2ab6', 'succnsim;': '\u22e9', 'succsim;': '\u227f', 'SuchThat;': '\u220b', 'Sum;': '\u2211', 'sum;': '\u2211', 'sung;': '\u266a', 'sup1': '\xb9', 'sup1;': '\xb9', 'sup2': '\xb2', 'sup2;': '\xb2', 'sup3': '\xb3', 'sup3;': '\xb3', 'Sup;': '\u22d1', 'sup;': '\u2283', 'supdot;': '\u2abe', 'supdsub;': '\u2ad8', 'supE;': '\u2ac6', 'supe;': '\u2287', 'supedot;': '\u2ac4', 'Superset;': '\u2283', 'SupersetEqual;': '\u2287', 'suphsol;': '\u27c9', 'suphsub;': '\u2ad7', 'suplarr;': '\u297b', 'supmult;': '\u2ac2', 'supnE;': '\u2acc', 'supne;': '\u228b', 'supplus;': '\u2ac0', 'Supset;': '\u22d1', 'supset;': '\u2283', 'supseteq;': '\u2287', 'supseteqq;': '\u2ac6', 'supsetneq;': '\u228b', 'supsetneqq;': '\u2acc', 'supsim;': '\u2ac8', 'supsub;': '\u2ad4', 'supsup;': '\u2ad6', 'swarhk;': '\u2926', 'swArr;': '\u21d9', 'swarr;': '\u2199', 'swarrow;': '\u2199', 'swnwar;': '\u292a', 'szlig': '\xdf', 'szlig;': '\xdf', 'Tab;': '\t', 'target;': '\u2316', 'Tau;': '\u03a4', 'tau;': '\u03c4', 'tbrk;': '\u23b4', 'Tcaron;': '\u0164', 'tcaron;': '\u0165', 'Tcedil;': '\u0162', 'tcedil;': '\u0163', 'Tcy;': '\u0422', 'tcy;': '\u0442', 'tdot;': '\u20db', 'telrec;': '\u2315', 'Tfr;': '\U0001d517', 'tfr;': '\U0001d531', 'there4;': '\u2234', 'Therefore;': '\u2234', 'therefore;': '\u2234', 'Theta;': '\u0398', 'theta;': '\u03b8', 'thetasym;': '\u03d1', 'thetav;': '\u03d1', 'thickapprox;': '\u2248', 'thicksim;': '\u223c', 'ThickSpace;': '\u205f\u200a', 'thinsp;': '\u2009', 'ThinSpace;': '\u2009', 'thkap;': '\u2248', 'thksim;': '\u223c', 'THORN': '\xde', 'thorn': '\xfe', 'THORN;': '\xde', 'thorn;': '\xfe', 'Tilde;': '\u223c', 'tilde;': '\u02dc', 'TildeEqual;': '\u2243', 'TildeFullEqual;': '\u2245', 'TildeTilde;': '\u2248', 'times': '\xd7', 'times;': '\xd7', 'timesb;': '\u22a0', 'timesbar;': '\u2a31', 'timesd;': '\u2a30', 'tint;': '\u222d', 'toea;': '\u2928', 'top;': '\u22a4', 'topbot;': '\u2336', 'topcir;': '\u2af1', 'Topf;': '\U0001d54b', 'topf;': '\U0001d565', 'topfork;': '\u2ada', 'tosa;': '\u2929', 'tprime;': '\u2034', 'TRADE;': '\u2122', 'trade;': '\u2122', 'triangle;': '\u25b5', 'triangledown;': '\u25bf', 'triangleleft;': '\u25c3', 'trianglelefteq;': '\u22b4', 'triangleq;': '\u225c', 'triangleright;': '\u25b9', 'trianglerighteq;': '\u22b5', 'tridot;': '\u25ec', 'trie;': '\u225c', 'triminus;': '\u2a3a', 'TripleDot;': '\u20db', 'triplus;': '\u2a39', 'trisb;': '\u29cd', 'tritime;': '\u2a3b', 'trpezium;': '\u23e2', 'Tscr;': '\U0001d4af', 'tscr;': '\U0001d4c9', 'TScy;': '\u0426', 'tscy;': '\u0446', 'TSHcy;': '\u040b', 'tshcy;': '\u045b', 'Tstrok;': '\u0166', 'tstrok;': '\u0167', 'twixt;': '\u226c', 'twoheadleftarrow;': '\u219e', 'twoheadrightarrow;': '\u21a0', 'Uacute': '\xda', 'uacute': '\xfa', 'Uacute;': '\xda', 'uacute;': '\xfa', 'Uarr;': '\u219f', 'uArr;': '\u21d1', 'uarr;': '\u2191', 'Uarrocir;': '\u2949', 'Ubrcy;': '\u040e', 'ubrcy;': '\u045e', 'Ubreve;': '\u016c', 'ubreve;': '\u016d', 'Ucirc': '\xdb', 'ucirc': '\xfb', 'Ucirc;': '\xdb', 'ucirc;': '\xfb', 'Ucy;': '\u0423', 'ucy;': '\u0443', 'udarr;': '\u21c5', 'Udblac;': '\u0170', 'udblac;': '\u0171', 'udhar;': '\u296e', 'ufisht;': '\u297e', 'Ufr;': '\U0001d518', 'ufr;': '\U0001d532', 'Ugrave': '\xd9', 'ugrave': '\xf9', 'Ugrave;': '\xd9', 'ugrave;': '\xf9', 'uHar;': '\u2963', 'uharl;': '\u21bf', 'uharr;': '\u21be', 'uhblk;': '\u2580', 'ulcorn;': '\u231c', 'ulcorner;': '\u231c', 'ulcrop;': '\u230f', 'ultri;': '\u25f8', 'Umacr;': '\u016a', 'umacr;': '\u016b', 'uml': '\xa8', 'uml;': '\xa8', 'UnderBar;': '_', 'UnderBrace;': '\u23df', 'UnderBracket;': '\u23b5', 'UnderParenthesis;': '\u23dd', 'Union;': '\u22c3', 'UnionPlus;': '\u228e', 'Uogon;': '\u0172', 'uogon;': '\u0173', 'Uopf;': '\U0001d54c', 'uopf;': '\U0001d566', 'UpArrow;': '\u2191', 'Uparrow;': '\u21d1', 'uparrow;': '\u2191', 'UpArrowBar;': '\u2912', 'UpArrowDownArrow;': '\u21c5', 'UpDownArrow;': '\u2195', 'Updownarrow;': '\u21d5', 'updownarrow;': '\u2195', 'UpEquilibrium;': '\u296e', 'upharpoonleft;': '\u21bf', 'upharpoonright;': '\u21be', 'uplus;': '\u228e', 'UpperLeftArrow;': '\u2196', 'UpperRightArrow;': '\u2197', 'Upsi;': '\u03d2', 'upsi;': '\u03c5', 'upsih;': '\u03d2', 'Upsilon;': '\u03a5', 'upsilon;': '\u03c5', 'UpTee;': '\u22a5', 'UpTeeArrow;': '\u21a5', 'upuparrows;': '\u21c8', 'urcorn;': '\u231d', 'urcorner;': '\u231d', 'urcrop;': '\u230e', 'Uring;': '\u016e', 'uring;': '\u016f', 'urtri;': '\u25f9', 'Uscr;': '\U0001d4b0', 'uscr;': '\U0001d4ca', 'utdot;': '\u22f0', 'Utilde;': '\u0168', 'utilde;': '\u0169', 'utri;': '\u25b5', 'utrif;': '\u25b4', 'uuarr;': '\u21c8', 'Uuml': '\xdc', 'uuml': '\xfc', 'Uuml;': '\xdc', 'uuml;': '\xfc', 'uwangle;': '\u29a7', 'vangrt;': '\u299c', 'varepsilon;': '\u03f5', 'varkappa;': '\u03f0', 'varnothing;': '\u2205', 'varphi;': '\u03d5', 'varpi;': '\u03d6', 'varpropto;': '\u221d', 'vArr;': '\u21d5', 'varr;': '\u2195', 'varrho;': '\u03f1', 'varsigma;': '\u03c2', 'varsubsetneq;': '\u228a\ufe00', 'varsubsetneqq;': '\u2acb\ufe00', 'varsupsetneq;': '\u228b\ufe00', 'varsupsetneqq;': '\u2acc\ufe00', 'vartheta;': '\u03d1', 'vartriangleleft;': '\u22b2', 'vartriangleright;': '\u22b3', 'Vbar;': '\u2aeb', 'vBar;': '\u2ae8', 'vBarv;': '\u2ae9', 'Vcy;': '\u0412', 'vcy;': '\u0432', 'VDash;': '\u22ab', 'Vdash;': '\u22a9', 'vDash;': '\u22a8', 'vdash;': '\u22a2', 'Vdashl;': '\u2ae6', 'Vee;': '\u22c1', 'vee;': '\u2228', 'veebar;': '\u22bb', 'veeeq;': '\u225a', 'vellip;': '\u22ee', 'Verbar;': '\u2016', 'verbar;': '|', 'Vert;': '\u2016', 'vert;': '|', 'VerticalBar;': '\u2223', 'VerticalLine;': '|', 'VerticalSeparator;': '\u2758', 'VerticalTilde;': '\u2240', 'VeryThinSpace;': '\u200a', 'Vfr;': '\U0001d519', 'vfr;': '\U0001d533', 'vltri;': '\u22b2', 'vnsub;': '\u2282\u20d2', 'vnsup;': '\u2283\u20d2', 'Vopf;': '\U0001d54d', 'vopf;': '\U0001d567', 'vprop;': '\u221d', 'vrtri;': '\u22b3', 'Vscr;': '\U0001d4b1', 'vscr;': '\U0001d4cb', 'vsubnE;': '\u2acb\ufe00', 'vsubne;': '\u228a\ufe00', 'vsupnE;': '\u2acc\ufe00', 'vsupne;': '\u228b\ufe00', 'Vvdash;': '\u22aa', 'vzigzag;': '\u299a', 'Wcirc;': '\u0174', 'wcirc;': '\u0175', 'wedbar;': '\u2a5f', 'Wedge;': '\u22c0', 'wedge;': '\u2227', 'wedgeq;': '\u2259', 'weierp;': '\u2118', 'Wfr;': '\U0001d51a', 'wfr;': '\U0001d534', 'Wopf;': '\U0001d54e', 'wopf;': '\U0001d568', 'wp;': '\u2118', 'wr;': '\u2240', 'wreath;': '\u2240', 'Wscr;': '\U0001d4b2', 'wscr;': '\U0001d4cc', 'xcap;': '\u22c2', 'xcirc;': '\u25ef', 'xcup;': '\u22c3', 'xdtri;': '\u25bd', 'Xfr;': '\U0001d51b', 'xfr;': '\U0001d535', 'xhArr;': '\u27fa', 'xharr;': '\u27f7', 'Xi;': '\u039e', 'xi;': '\u03be', 'xlArr;': '\u27f8', 'xlarr;': '\u27f5', 'xmap;': '\u27fc', 'xnis;': '\u22fb', 'xodot;': '\u2a00', 'Xopf;': '\U0001d54f', 'xopf;': '\U0001d569', 'xoplus;': '\u2a01', 'xotime;': '\u2a02', 'xrArr;': '\u27f9', 'xrarr;': '\u27f6', 'Xscr;': '\U0001d4b3', 'xscr;': '\U0001d4cd', 'xsqcup;': '\u2a06', 'xuplus;': '\u2a04', 'xutri;': '\u25b3', 'xvee;': '\u22c1', 'xwedge;': '\u22c0', 'Yacute': '\xdd', 'yacute': '\xfd', 'Yacute;': '\xdd', 'yacute;': '\xfd', 'YAcy;': '\u042f', 'yacy;': '\u044f', 'Ycirc;': '\u0176', 'ycirc;': '\u0177', 'Ycy;': '\u042b', 'ycy;': '\u044b', 'yen': '\xa5', 'yen;': '\xa5', 'Yfr;': '\U0001d51c', 'yfr;': '\U0001d536', 'YIcy;': '\u0407', 'yicy;': '\u0457', 'Yopf;': '\U0001d550', 'yopf;': '\U0001d56a', 'Yscr;': '\U0001d4b4', 'yscr;': '\U0001d4ce', 'YUcy;': '\u042e', 'yucy;': '\u044e', 'yuml': '\xff', 'Yuml;': '\u0178', 'yuml;': '\xff', 'Zacute;': '\u0179', 'zacute;': '\u017a', 'Zcaron;': '\u017d', 'zcaron;': '\u017e', 'Zcy;': '\u0417', 'zcy;': '\u0437', 'Zdot;': '\u017b', 'zdot;': '\u017c', 'zeetrf;': '\u2128', 'ZeroWidthSpace;': '\u200b', 'Zeta;': '\u0396', 'zeta;': '\u03b6', 'Zfr;': '\u2128', 'zfr;': '\U0001d537', 'ZHcy;': '\u0416', 'zhcy;': '\u0436', 'zigrarr;': '\u21dd', 'Zopf;': '\u2124', 'zopf;': '\U0001d56b', 'Zscr;': '\U0001d4b5', 'zscr;': '\U0001d4cf', 'zwj;': '\u200d', 'zwnj;': '\u200c', } # maps the Unicode code point to the HTML entity name codepoint2name = {} # maps the HTML entity name to the character # (or a character reference if the character is outside the Latin-1 range) entitydefs = {} for (name, codepoint) in name2codepoint.items(): codepoint2name[codepoint] = name entitydefs[name] = chr(codepoint) del name, codepoint html/parser.py000064400000047317152462633570007407 0ustar00"""A parser for HTML and XHTML.""" # This file is based on sgmllib.py, but the API is slightly different. # XXX There should be a way to distinguish between PCDATA (parsed # character data -- the normal case), RCDATA (replaceable character # data -- only char and entity references and end tags are special) # and CDATA (character data -- only end tags are special). import re import _markupbase from html import unescape __all__ = ['HTMLParser'] # Regular expressions used for parsing interesting_normal = re.compile('[&<]') incomplete = re.compile('&[a-zA-Z#]') entityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]') charref = re.compile('&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]') starttagopen = re.compile('<[a-zA-Z]') endtagopen = re.compile('') commentclose = re.compile(r'--!?>') commentabruptclose = re.compile(r'-?>') # Note: # 1) if you change tagfind/attrfind remember to update locatetagend too; # 2) if you change tagfind/attrfind and/or locatetagend the parser will # explode, so don't do it. # see the HTML5 specs section "13.2.5.6 Tag open state", # "13.2.5.8 Tag name state" and "13.2.5.33 Attribute name state". # https://html.spec.whatwg.org/multipage/parsing.html#tag-open-state # https://html.spec.whatwg.org/multipage/parsing.html#tag-name-state # https://html.spec.whatwg.org/multipage/parsing.html#attribute-name-state tagfind_tolerant = re.compile(r'([a-zA-Z][^\t\n\r\f />]*)(?:[\t\n\r\f ]|/(?!>))*') attrfind_tolerant = re.compile(r""" ( (?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name ) ([\t\n\r\f ]*=[\t\n\r\f ]* # value indicator ('[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\t\n\r\f ]* # bare value ) )? (?:[\t\n\r\f ]|/(?!>))* # possibly followed by a space """, re.VERBOSE) locatetagend = re.compile(r""" [a-zA-Z][^\t\n\r\f />]* # tag name [\t\n\r\f /]* # optional whitespace before attribute name (?:(?<=['"\t\n\r\f /])[^\t\n\r\f />][^\t\n\r\f /=>]* # attribute name (?:[\t\n\r\f ]*=[\t\n\r\f ]* # value indicator (?:'[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\t\n\r\f ]* # bare value ) )? [\t\n\r\f /]* # possibly followed by a space )* >? """, re.VERBOSE) # The following variables are not used, but are temporarily left for # backward compatibility. locatestarttagend_tolerant = re.compile(r""" <[a-zA-Z][^\t\n\r\f />\x00]* # tag name (?:[\s/]* # optional whitespace before attribute name (?:(?<=['"\s/])[^\s/>][^\s/=>]* # attribute name (?:\s*=+\s* # value indicator (?:'[^']*' # LITA-enclosed value |"[^"]*" # LIT-enclosed value |(?!['"])[^>\s]* # bare value ) \s* # possibly followed by a space )?(?:\s|/(?!>))* )* )? \s* # trailing whitespace """, re.VERBOSE) endendtag = re.compile('>') endtagfind = re.compile(r'') class HTMLParser(_markupbase.ParserBase): """Find tags and other markup and call handler functions. Usage: p = HTMLParser() p.feed(data) ... p.close() Start tags are handled by calling self.handle_starttag() or self.handle_startendtag(); end tags by self.handle_endtag(). The data between tags is passed from the parser to the derived class by calling self.handle_data() with the data as argument (the data may be split up in arbitrary chunks). If convert_charrefs is True the character references are converted automatically to the corresponding Unicode character (and self.handle_data() is no longer split in chunks), otherwise they are passed by calling self.handle_entityref() or self.handle_charref() with the string containing respectively the named or numeric reference as the argument. """ CDATA_CONTENT_ELEMENTS = ("script", "style") RCDATA_CONTENT_ELEMENTS = ("textarea", "title") def __init__(self, *, convert_charrefs=True): """Initialize and reset this instance. If convert_charrefs is True (the default), all character references are automatically converted to the corresponding Unicode characters. """ super().__init__() self.convert_charrefs = convert_charrefs self.reset() def reset(self): """Reset this instance. Loses all unprocessed data.""" self.rawdata = '' self.lasttag = '???' self.interesting = interesting_normal self.cdata_elem = None self._support_cdata = True self._escapable = True super().reset() def feed(self, data): r"""Feed data to the parser. Call this as often as you want, with as little or as much text as you want (may include '\n'). """ self.rawdata = self.rawdata + data self.goahead(0) def close(self): """Handle any buffered data.""" self.goahead(1) __starttag_text = None def get_starttag_text(self): """Return full source of start tag: '<...>'.""" return self.__starttag_text def set_cdata_mode(self, elem, *, escapable=False): self.cdata_elem = elem.lower() self._escapable = escapable if escapable and not self.convert_charrefs: self.interesting = re.compile(r'&|])' % self.cdata_elem, re.IGNORECASE|re.ASCII) else: self.interesting = re.compile(r'])' % self.cdata_elem, re.IGNORECASE|re.ASCII) def clear_cdata_mode(self): self.interesting = interesting_normal self.cdata_elem = None self._escapable = True def _set_support_cdata(self, flag=True): """Enable or disable support of the CDATA sections. If enabled, "<[CDATA[" starts a CDATA section which ends with "]]>". If disabled, "<[CDATA[" starts a bogus comments which ends with ">". This method is not called by default. Its purpose is to be called in custom handle_starttag() and handle_endtag() methods, with value that depends on the adjusted current node. See https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state for details. """ self._support_cdata = flag # Internal -- handle data as far as reasonable. May leave state # and data to be processed by a subsequent call. If 'end' is # true, force handling all data as if followed by EOF marker. def goahead(self, end): rawdata = self.rawdata i = 0 n = len(rawdata) while i < n: if self.convert_charrefs and not self.cdata_elem: j = rawdata.find('<', i) if j < 0: # if we can't find the next <, either we are at the end # or there's more text incoming. If the latter is True, # we can't pass the text to handle_data in case we have # a charref cut in half at end. Try to determine if # this is the case before proceeding by looking for an # & near the end and see if it's followed by a space or ;. amppos = rawdata.rfind('&', max(i, n-34)) if (amppos >= 0 and not re.compile(r'[\t\n\r\f ;]').search(rawdata, amppos)): break # wait till we get all the text j = n else: match = self.interesting.search(rawdata, i) # < or & if match: j = match.start() else: if self.cdata_elem: break j = n if i < j: if self.convert_charrefs and self._escapable: self.handle_data(unescape(rawdata[i:j])) else: self.handle_data(rawdata[i:j]) i = self.updatepos(i, j) if i == n: break startswith = rawdata.startswith if startswith('<', i): if starttagopen.match(rawdata, i): # < + letter k = self.parse_starttag(i) elif startswith("', i+9) if j < 0: return -1 self.unknown_decl(rawdata[i+3: j]) return j + 3 elif rawdata[i:i+9].lower() == ' gtpos = rawdata.find('>', i+9) if gtpos == -1: return -1 self.handle_decl(rawdata[i+2:gtpos]) return gtpos+1 elif rawdata[i:i+3] == '', i+3) if j < 0: return -1 if rawdata[j-1] == ']': self.unknown_decl(rawdata[i+3: j-1]) else: self.handle_comment(rawdata[i+2: j]) return j + 1 else: return self.parse_bogus_comment(i) # Internal -- parse comment, return length or -1 if not terminated # see https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state def parse_comment(self, i, report=True): rawdata = self.rawdata assert rawdata.startswith(' (map|filter|zip) and itertools.ifilterfalse --> itertools.filterfalse (bugs 2360-2363) imports from itertools are fixed in fix_itertools_import.py If itertools is imported as something else (ie: import itertools as it; it.izip(spam, eggs)) method calls will not get fixed. """ # Local imports from .. import fixer_base from ..fixer_util import Name class FixItertools(fixer_base.BaseFix): BM_compatible = True it_funcs = "('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')" PATTERN = """ power< it='itertools' trailer< dot='.' func=%(it_funcs)s > trailer< '(' [any] ')' > > | power< func=%(it_funcs)s trailer< '(' [any] ')' > > """ %(locals()) # Needs to be run after fix_(map|zip|filter) run_order = 6 def transform(self, node, results): prefix = None func = results['func'][0] if ('it' in results and func.value not in ('ifilterfalse', 'izip_longest')): dot, it = (results['dot'], results['it']) # Remove the 'itertools' prefix = it.prefix it.remove() # Replace the node which contains ('.', 'function') with the # function (to be consistent with the second part of the pattern) dot.remove() func.parent.replace(func) prefix = prefix or func.prefix func.replace(Name(func.value[1:], prefix=prefix)) lib2to3/fixes/fix_future.py000064400000001043152462633570011705 0ustar00"""Remove __future__ imports from __future__ import foo is replaced with an empty line. """ # Author: Christian Heimes # Local imports from .. import fixer_base from ..fixer_util import BlankLine class FixFuture(fixer_base.BaseFix): BM_compatible = True PATTERN = """import_from< 'from' module_name="__future__" 'import' any >""" # This should be run last -- some things check for the import run_order = 10 def transform(self, node, results): new = BlankLine() new.prefix = node.prefix return new lib2to3/fixes/__pycache__/fix_operator.cpython-312.pyc000064400000012761152462633570016600 0ustar00Ë T—çhb ãód—dZddlZddlmZddlmZmZmZm Z d„Z Gd„dej«Z y)aÐFixer for operator functions. operator.isCallable(obj) -> callable(obj) operator.sequenceIncludes(obj) -> operator.contains(obj) operator.isSequenceType(obj) -> isinstance(obj, collections.abc.Sequence) operator.isMappingType(obj) -> isinstance(obj, collections.abc.Mapping) operator.isNumberType(obj) -> isinstance(obj, numbers.Number) operator.repeat(obj, n) -> operator.mul(obj, n) operator.irepeat(obj, n) -> operator.imul(obj, n) éN)Ú fixer_base)ÚCallÚNameÚStringÚ touch_importcó‡—ˆfd„}|S)Ncó•—‰|_|S©N)Ú invocation)ÚfÚss €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_operator.pyÚdeczinvocation..decsø€ØˆŒ ؈ó©)r rs` rr r sø€ôð €Jrcó—eZdZdZdZdZdZdeee¬«zZd„Z e d«d „«Z e d «d „«Z e d «d „«Z e d«d„«Ze d«d„«Ze d«d„«Ze d«d„«Zd„Zd„Zd„Zy)Ú FixOperatorTÚprezµ method=('isCallable'|'sequenceIncludes' |'isSequenceType'|'isMappingType'|'isNumberType' |'repeat'|'irepeat') z'(' obj=any ')'z¼ power< module='operator' trailer< '.' %(methods)s > trailer< %(obj)s > > | power< %(methods)s trailer< %(obj)s > > )ÚmethodsÚobjcó>—|j||«}| |||«Syr )Ú _check_method)ÚselfÚnodeÚresultsÚmethods rÚ transformzFixOperator.transform+s,€Ø×#Ñ# D¨'Ó2ˆØ Ð Ù˜$ Ó(Ð (ð rzoperator.contains(%s)có(—|j||d«S)NÚcontains©Ú_handle_rename©rrrs rÚ_sequenceIncludeszFixOperator._sequenceIncludes0s€à×"Ñ" 4¨°*Ó=Ð=rz callable(%s)cól—|d}ttd«|j«g|j¬«S)NrÚcallable©Úprefix)rrÚcloner')rrrrs rÚ _isCallablezFixOperator._isCallable4s+€àe‰nˆÜ”D˜Ó$ s§y¡y£{ m¸D¿K¹KÔHÐHrzoperator.mul(%s)có(—|j||d«S)NÚmulr r"s rÚ_repeatzFixOperator._repeat9s€à×"Ñ" 4¨°%Ó8Ð8rzoperator.imul(%s)có(—|j||d«S)NÚimulr r"s rÚ_irepeatzFixOperator._irepeat=s€à×"Ñ" 4¨°&Ó9Ð9rz(isinstance(%s, collections.abc.Sequence)có*—|j||dd«S)Núcollections.abcÚSequence©Ú_handle_type2abcr"s rÚ_isSequenceTypezFixOperator._isSequenceTypeAs€à×$Ñ$ T¨7Ð4EÀzÓRÐRrz'isinstance(%s, collections.abc.Mapping)có*—|j||dd«S)Nr1ÚMappingr3r"s rÚ_isMappingTypezFixOperator._isMappingTypeEs€à×$Ñ$ T¨7Ð4EÀyÓQÐQrzisinstance(%s, numbers.Number)có*—|j||dd«S)NÚnumbersÚNumberr3r"s rÚ _isNumberTypezFixOperator._isNumberTypeIs€à×$Ñ$ T¨7°I¸xÓHÐHrcóB—|dd}||_|j«y)Nrr)ÚvalueÚchanged)rrrÚnamers rr!zFixOperator._handle_renameMs"€Ø˜Ñ" 1Ñ%ˆØˆŒ ؉ÕrcóÆ—td||«|d}|j«tddj||g«z«g}t t d«||j ¬«S)Nrz, Ú.Ú isinstancer&)rr(rÚjoinrrr')rrrÚmoduleÚabcrÚargss rr4zFixOperator._handle_type2abcRsV€ÜT˜6 4Ô(Øe‰nˆØ— ‘ “ œV D¨3¯8©8°V¸S°MÓ+BÑ$BÓCÐDˆÜ”D˜Ó&¨°T·[±[ÔAÐArcóü—t|d|ddjz«}t|tjj «r9d|vr|St |d«f}|j|z}|j|d|z«y)NÚ_rrrErzYou should use '%s' here.) Úgetattrr>rCÚ collectionsrFÚCallableÚstrr Úwarning)rrrrÚsubÚinvocation_strs rrzFixOperator._check_methodXs|€Ü˜˜s W¨XÑ%6°qÑ%9×%?Ñ%?Ñ?Ó@ˆÜ fœkŸo™o×6Ñ6Ô 7ؘ7Ñ"Ø ä˜7 5™>Ó*Ð,Ø!'×!2Ñ!2°SÑ!8Ø— ‘ ˜TÐ#>ÀÑ#OÔPØrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderrrÚdictÚPATTERNrr r#r)r,r/r5r8r<r!r4rrrrrrs„Ø€MØ €Eð€Gð €Cðñ  ¨cÔ2ñ 3€Gò)ñ Ð'Ó(ñ>ó)ð>ñÓñIó ðIñÐ"Ó#ñ9ó$ð9ñÐ#Ó$ñ:ó%ð:ñÐ:Ó;ñSó<ðSñÐ9Ó:ñRó;ðRñÐ0Ó1ñIó2ðIòò Bó rr) Ú__doc__Úcollections.abcrKÚlib2to3rÚlib2to3.fixer_utilrrrrr ÚBaseFixrrrrÚr]s3ðñ óõß?Ó?òôG*×$Ñ$õGrlib2to3/fixes/__pycache__/fix_sys_exc.cpython-312.opt-1.pyc000064400000003734152462633570017361 0ustar00Ë T—çh ãób—dZddlmZddlmZmZmZmZmZm Z m Z Gd„dej«Z y)z˜Fixer for sys.exc_{type, value, traceback} sys.exc_type -> sys.exc_info()[0] sys.exc_value -> sys.exc_info()[1] sys.exc_traceback -> sys.exc_info()[2] é)Ú fixer_base)ÚAttrÚCallÚNameÚNumberÚ SubscriptÚNodeÚsymscóT—eZdZgd¢ZdZddj d„eD««zZd„Zy)Ú FixSysExc)Úexc_typeÚ exc_valueÚ exc_tracebackTzN power< 'sys' trailer< dot='.' attribute=(%s) > > Ú|c#ó&K—|] }d|z–—Œ y­w)z'%s'N©)Ú.0Úes ú2/usr/lib64/python3.12/lib2to3/fixes/fix_sys_exc.pyÚ zFixSysExc.sèø€Ð:±¨A˜V aZ±ùs‚có —|dd}t|jj|j««}t t d«|j ¬«}tt d«|«}|dj |djd_|jt|««ttj||j ¬«S)NÚ attributeéÚexc_info)ÚprefixÚsysÚdoté)rrÚindexÚvaluerrrrÚchildrenÚappendrr r Úpower)ÚselfÚnodeÚresultsÚsys_attrrÚcallÚattrs rÚ transformzFixSysExc.transformsœ€Ø˜;Ñ'¨Ñ*ˆÜt—}‘}×*Ñ*¨8¯>©>Ó:Ó;ˆä”D˜Ó$¨X¯_©_Ô=ˆÜ”D˜“K Ó&ˆØ%,¨U¡^×%:Ñ%:ˆˆQ‰×јÑÔ"Ø ‰ ”I˜eÓ$Ô%Ü”D—J‘J ¨T¯[©[Ô9Ð9óN)Ú__name__Ú __module__Ú __qualname__rÚ BM_compatibleÚjoinÚPATTERNr*rr+rr r s/„â9€HØ€Mðà—H‘HÑ:±Ó:Ó:ñ;€Gó:r+r N) Ú__doc__ÚrÚ fixer_utilrrrrrr r ÚBaseFixr rr+rÚr6s*ðñõßH×HÑHô: ×"Ñ"õ:r+lib2to3/fixes/__pycache__/__init__.cpython-312.pyc000064400000000220152462633570015621 0ustar00Ë T—çh/ãó—y)N©róú//usr/lib64/python3.12/lib2to3/fixes/__init__.pyÚrsñrlib2to3/fixes/__pycache__/fix_long.cpython-312.pyc000064400000001506152462633570015677 0ustar00Ë T—çhÜãóJ—dZddlmZddlmZGd„dej «Zy)z/Fixer that turns 'long' into 'int' everywhere. é)Ú fixer_base)Úis_probably_builtincó—eZdZdZdZd„Zy)ÚFixLongTz'long'cóJ—t|«rd|_|j«yy)NÚint)rÚvalueÚchanged)ÚselfÚnodeÚresultss ú//usr/lib64/python3.12/lib2to3/fixes/fix_long.pyÚ transformzFixLong.transforms€Ü ˜tÔ $؈DŒJØ L‰LNð %óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€MØ€GórrN)Ú__doc__Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ðñõÝ2ôˆj× Ñ õrlib2to3/fixes/__pycache__/fix_zip.cpython-312.opt-1.pyc000064400000003671152462633570016506 0ustar00Ë T—çh ãój—dZddlmZddlmZddlmZddlm Z m Z m Z Gd„dej«Z y) a7 Fixer that changes zip(seq0, seq1, ...) into list(zip(seq0, seq1, ...) unless there exists a 'from future_builtins import zip' statement in the top-level namespace. We avoid the transformation if the zip() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚin_special_contextcó—eZdZdZdZdZd„Zy)ÚFixZipTzN power< 'zip' args=trailer< '(' [any] ')' > [trailers=trailer*] > zfuture_builtins.zipcó¼—|j|«ryt|«ry|dj«}d|_g}d|vr.|dDcgc]}|j«‘Œ}}|D] }d|_Œ t t j td«|gd¬«}t t j td«t|g«g|z«}|j|_|Scc}w)NÚargsÚÚtrailersÚzip)ÚprefixÚlist) Ú should_skiprÚclonerrÚsymsÚpowerrr)ÚselfÚnodeÚresultsr rÚnÚnews ú./usr/lib64/python3.12/lib2to3/fixes/fix_zip.pyÚ transformzFixZip.transformsÍ€Ø × Ñ ˜DÔ !Ø ä ˜dÔ #Øàv‰×$Ñ$Ó&ˆØˆŒ àˆØ ˜Ñ Ø+2°:Ò+>Ó?Ñ+> a˜Ÿ™ Ð+>ˆHÐ?ÛØ•ðô”4—:‘:¤ U£ ¨TÐ2¸2Ô>ˆÜ”4—:‘:¤ V£ ¬g°s°e«nÐ=ÀÑHÓIˆØ—[‘[ˆŒ ؈ ùò@sÁCN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr©órr r s„à€Mð€Gð $€Gór$r N)Ú__doc__r rÚpytreerÚpygramrrÚ fixer_utilrrrÚConditionalFixr r#r$rÚr*s-ðñõÝÝ+ß:Ñ:ôˆZ× &Ñ &õr$lib2to3/fixes/__pycache__/fix_methodattrs.cpython-312.opt-1.pyc000064400000002172152462633570020235 0ustar00Ë T—çh^ãóV—dZddlmZddlmZddddœZGd„d ej «Zy ) z;Fix bound method attributes (method.im_? -> method.__?__). é)Ú fixer_base)ÚNameÚ__func__Ú__self__z__self__.__class__)Úim_funcÚim_selfÚim_classcó—eZdZdZdZd„Zy)ÚFixMethodattrsTzU power< any+ trailer< '.' attr=('im_func' | 'im_self' | 'im_class') > any* > có†—|dd}t|j}|jt||j¬««y)NÚattré)Úprefix)ÚMAPÚvalueÚreplacerr)ÚselfÚnodeÚresultsr Únews ú6/usr/lib64/python3.12/lib2to3/fixes/fix_methodattrs.pyÚ transformzFixMethodattrs.transforms4€Øv‰˜qÑ!ˆÜ$—*‘*‰oˆØ ‰ ”T˜# d§k¡kÔ2Õ3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrr r s„Ø€Mð€Gó4rr N)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixr rrrÚr$s6ðñõ ÝðØØ%ñ€ô 4Z×'Ñ'õ 4rlib2to3/fixes/__pycache__/fix_xreadlines.cpython-312.pyc000064400000002402152462633570017072 0ustar00Ë T—çh±ãóJ—dZddlmZddlmZGd„dej «Zy)zpFix "for x in f.xreadlines()" -> "for x in f". This fixer will also convert g(f.xreadlines) into g(f.__iter__).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixXreadlinesTz‡ power< call=any+ trailer< '.' 'xreadlines' > trailer< '(' ')' > > | power< any+ trailer< '.' no_call='xreadlines' > > cóâ—|jd«}|r'|jtd|j¬««y|j|dDcgc]}|j «‘Œc}«ycc}w)NÚno_callÚ__iter__)ÚprefixÚcall)ÚgetÚreplacerr Úclone)ÚselfÚnodeÚresultsrÚxs ú5/usr/lib64/python3.12/lib2to3/fixes/fix_xreadlines.pyÚ transformzFixXreadlines.transformsR€Ø—+‘+˜iÓ(ˆá Ø O‰OœD °G·N±NÔCÕ Dà L‰L¨W°Vª_Ó=©_¨˜!Ÿ'™')¨_Ñ=Õ >ùÒ=sÁ A,N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©órrr s„Ø€Mð€Gó ?rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚr s%ðñDõ Ýô?J×&Ñ&õ?rlib2to3/fixes/__pycache__/fix_execfile.cpython-312.opt-2.pyc000064400000005047152462633570017470 0ustar00Ë T—çhãól— ddlmZddlmZmZmZmZmZmZm Z m Z m Z m Z Gd„dej«Zy)é)Ú fixer_base) ÚCommaÚNameÚCallÚLParenÚRParenÚDotÚNodeÚArgListÚStringÚsymscó—eZdZdZdZd„Zy)Ú FixExecfileTz« power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > > | power< 'execfile' trailer< '(' filename=any ')' > > có¤—|d}|jd«}|jd«}|jdjdj«}t|j«t «t dd«g|¬«}t tjtd«|g«}t tjt«td «g«t tjt«t«g«g} |g| z} |j«} d| _t d d«} | t «| t «| gz} ttd «| d «}|g}|)|j!t «|j«g«|)|j!t «|j«g«ttd «||j¬«S)NÚfilenameÚglobalsÚlocalséÿÿÿÿz"rb"Ú )ÚrparenÚopenÚreadz'exec'ÚcompileÚÚexec)Úprefix)ÚgetÚchildrenÚcloner rr r r ÚpowerrÚtrailerr rrrrÚextend)ÚselfÚnodeÚresultsrrrÚexecfile_parenÚ open_argsÚ open_callrÚ open_exprÚ filename_argÚexec_strÚ compile_argsÚ compile_callÚargss ú3/usr/lib64/python3.12/lib2to3/fixes/fix_execfile.pyÚ transformzFixExecfile.transformsu€à˜:Ñ&ˆØ—+‘+˜iÓ(ˆØ—‘˜XÓ&ˆðŸ™ rÑ*×3Ñ3°BÑ7×=Ñ=Ó?ˆä˜XŸ^™^Ó-¬u«w¼¸vÀsÓ8KÐLØ#1ô3ˆ 䜟™¤d¨6£l°IÐ%>Ó?ˆ Ü”T—\‘\¤C£E¬4°«<Ð#8Ó9Ü”T—\‘\¤F£H¬f«hÐ#7Ó8ð:ˆàK $Ñ&ˆ ð —~‘~Ó'ˆ Ø!ˆ Ôܘ( CÓ(ˆØ ¤E£G¨\¼5»7ÀHÐ#MÑMˆ ÜœD ›O¨\¸2Ó>ˆ àˆ~ˆØ Ð Ø K‰Kœ› '§-¡-£/Ð2Ô 3Ø Ð Ø K‰Kœ› &§,¡,£.Ð1Ô 2Ü”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr0©r1r/rrs„Ø€Mð€Gó r:s0ððõ ÷1÷1÷1ô&<*×$Ñ$õ&r(s'ðñõ ÝÝô/Z×'Ñ'õ/rlib2to3/fixes/__pycache__/fix_unicode.cpython-312.opt-2.pyc000064400000003707152462633570017333 0ustar00Ë T—çhèãóR— ddlmZddlmZdddœZGd„dej «Zy) é)Útoken)Ú fixer_baseÚchrÚstr)ÚunichrÚunicodecó,‡—eZdZdZdZˆfd„Zd„ZˆxZS)Ú FixUnicodeTzSTRING | 'unicode' | 'unichr'cóT•—tt| ||«d|jv|_y)NÚunicode_literals)Úsuperr Ú start_treeÚfuture_featuresr )ÚselfÚtreeÚfilenameÚ __class__s €ú2/usr/lib64/python3.12/lib2to3/fixes/fix_unicode.pyrzFixUnicode.start_trees'ø€Ü Œj˜$Ñ*¨4°Ô:Ø 2°d×6JÑ6JÐ JˆÕóc ó$—|jtjk(r*|j«}t|j |_|S|jtj k(r§|j }|jsY|ddvrRd|vrNdj|jd«Dcgc]$}|jdd«jdd«‘Œ&c}«}|dd vr|d d}||j k(r|S|j«}||_|Sycc}w) Néz'"Ú\z\\z\uz\\uz\Uz\\UÚuUé) ÚtyperÚNAMEÚcloneÚ_mappingÚvalueÚSTRINGr ÚjoinÚsplitÚreplace)rÚnodeÚresultsÚnewÚvalÚvs rÚ transformzFixUnicode.transformsø€Ø 9‰9œŸ ™ Ò "Ø—*‘*“,ˆCÜ  §¡Ñ,ˆCŒI؈JØ Y‰Yœ%Ÿ,™,Ò &Ø—*‘*ˆCØ×(Ò(¨S°©V°u©_ÀÈÁØ—j‘jà ŸY™Y uÔ-ó"á-˜ð—I‘I˜e VÓ,×4Ñ4°U¸FÕCØ-ñ"óð1‰v˜‰~ؘ!˜"gØd—j‘jÒ Ø Ø—*‘*“,ˆC؈CŒI؈Jð'ùò"sÂ&)D )Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNrr)Ú __classcell__)rs@rr r sø„Ø€MØ-€GôKörr N)Úpgen2rÚrrÚBaseFixr ©rrÚr4s.ððõÝà¨%Ñ 0€ô×#Ñ#õrlib2to3/fixes/__pycache__/fix_asserts.cpython-312.pyc000064400000002766152462633570016435 0ustar00Ë T—çhØãób—dZddlmZddlmZedddddd d dddddd d ¬ «ZGd„de«Zy)z5Fixer that replaces deprecated unittest method names.é)ÚBaseFix)ÚNameÚ assertTrueÚ assertEqualÚassertNotEqualÚassertAlmostEqualÚassertNotAlmostEqualÚ assertRegexÚassertRaisesRegexÚ assertRaisesÚ assertFalse)Úassert_Ú assertEqualsÚassertNotEqualsÚassertAlmostEqualsÚassertNotAlmostEqualsÚassertRegexpMatchesÚassertRaisesRegexpÚfailUnlessEqualÚ failIfEqualÚfailUnlessAlmostEqualÚfailIfAlmostEqualÚ failUnlessÚfailUnlessRaisesÚfailIfcóH—eZdZddjeee««zZd„Zy)Ú FixAssertszH power< any+ trailer< '.' meth=(%s)> any* > Ú|có€—|dd}|jttt|«|j¬««y)NÚmethé)Úprefix)ÚreplacerÚNAMESÚstrr")ÚselfÚnodeÚresultsÚnames ú2/usr/lib64/python3.12/lib2to3/fixes/fix_asserts.pyÚ transformzFixAsserts.transform s0€Øv‰˜qÑ!ˆØ ‰ ”Tœ%¤ D£ Ñ*°4·;±;Ô?Õ@óN) Ú__name__Ú __module__Ú __qualname__ÚjoinÚmapÚreprr$ÚPATTERNr+©r,r*rrs'„ðà—H‘H™S  uÓ-Ó.ñ/€GóAr,rN)Ú__doc__Ú fixer_baserÚ fixer_utilrÚdictr$rr4r,r*Úr9sRðÙ;õ!Ýá Ø ØØ$Ø*Ø0Ø%Ø*Ø!Ø Ø-Ø,ØØ#Ø ô €ô$AõAr,lib2to3/fixes/__pycache__/fix_numliterals.cpython-312.opt-2.pyc000064400000002535152462633570020242 0ustar00Ë T—çhãóT— ddlmZddlmZddlmZGd„dej «Zy)é)Útoken)Ú fixer_base)ÚNumbercó0—eZdZejZd„Zd„Zy)ÚFixNumliteralscó^—|jjd«xs|jddvS)NÚ0éÿÿÿÿÚLl)ÚvalueÚ startswith)ÚselfÚnodes ú6/usr/lib64/python3.12/lib2to3/fixes/fix_numliterals.pyÚmatchzFixNumliterals.matchs)€à— ‘ ×%Ñ% cÓ*ÒD¨d¯j©j¸©nÀÐ.DÐEócóâ—|j}|ddvr|dd}n@|jd«r/|j«rtt |««dkDrd|ddz}t ||j ¬«S)Nr r r éÚ0o)Úprefix)r r ÚisdigitÚlenÚsetrr)rrÚresultsÚvals rÚ transformzFixNumliterals.transformsd€Øj‰jˆØ ˆr‰7d‰?Øcr(‰CØ ^‰^˜CÔ  S§[¡[¤]´s¼3¸s»8³}ÀqÒ7Hؘ˜Q˜R˜‘.ˆCäc $§+¡+Ô.Ð.rN)Ú__name__Ú __module__Ú __qualname__rÚNUMBERÚ _accept_typerr©rrrr s„ð—<‘<€LòFó/rrN)Úpgen2rÚrÚ fixer_utilrÚBaseFixrr"rrÚr's'ððõ ÝÝô/Z×'Ñ'õ/rlib2to3/fixes/__pycache__/fix_import.cpython-312.pyc000064400000010234152462633570016250 0ustar00Ë T—çh¸ ãóp—dZddlmZddlmZmZmZmZddlm Z m Z m Z d„Z Gd„dej«Zy ) zÞFixer for import statements. If spam is being imported from the local directory, this import: from spam import eggs Becomes: from .spam import eggs And this import: import spam Becomes: from . import spam é)Ú fixer_baseé)ÚdirnameÚjoinÚexistsÚsep)Ú FromImportÚsymsÚtokenc#óVK—|g}|r|j«}|jtjk(r|j–—nÙ|jt j k(r6dj|jDcgc]}|j‘Œc}«–—n†|jt jk(r|j|jd«nJ|jt jk(r"|j|jddd…«n td«‚|rŒyycc}w­w)zF Walks over all the names imported in a dotted_as_names node. ÚrNéþÿÿÿzunknown node type)ÚpopÚtyper ÚNAMEÚvaluer Ú dotted_namerÚchildrenÚdotted_as_nameÚappendÚdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnodeÚchs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_import.pyÚtraverse_importsrs×èø€ðˆg€GÚ Ø{‰{‹}ˆØ 9‰9œŸ ™ Ò "Ø—*‘*Ó Ø Y‰Yœ$×*Ñ*Ò *Ø—'‘'¨d¯mªmÓ<©m¨˜2Ÿ8›8¨mÑ<Ó=Ó =Ø Y‰Yœ$×-Ñ-Ò -Ø N‰N˜4Ÿ=™=¨Ñ+Õ ,Ø Y‰Yœ$×.Ñ.Ò .Ø N‰N˜4Ÿ=™=©¨2¨Ñ.Õ /ä Ð!4Ó5Ð 5õ ùò =ùs‚A9D)Á;D$ÂBD)Ä"D)có2‡—eZdZdZdZˆfd„Zd„Zd„ZˆxZS)Ú FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cóT•—tt| ||«d|jv|_y)NÚabsolute_import)Úsuperr!Ú start_treeÚfuture_featuresÚskip)ÚselfÚtreeÚnameÚ __class__s €rr%zFixImport.start_tree/s&ø€Ü Œi˜Ñ)¨$°Ô5Ø%¨×)=Ñ)=Ð=ˆ ócóô—|jry|d}|jtjk(rit |d«s|j d}t |d«sŒ|j |j«r%d|jz|_|j«yyd}d}t|«D]}|j |«rd}Œd}Œ|r|r|j|d«ytd|g«}|j|_ |S)NÚimprrÚ.FTz#absolute and local imports together) r'rr Ú import_fromÚhasattrrÚprobably_a_local_importrÚchangedrÚwarningr Úprefix)r(rÚresultsr.Ú have_localÚ have_absoluteÚmod_nameÚnews rÚ transformzFixImport.transform3sè€Ø 9Š9Ø Øe‰nˆà 9‰9œ×(Ñ(Ò (ô ˜c 7Ô+Ø—l‘l 1‘oô˜c 7Õ+à×+Ñ+¨C¯I©IÔ6Ø #§)¡)™O” Ø— ‘ • ð7ðˆJØ!ˆMÜ,¨SÖ1Ø×/Ñ/°Ô9Ø!%‘Jà$(‘Mð 2ñ Ùð—L‘L Ð'LÔMØä˜S 3 %Ó(ˆCØŸ™ˆCŒJ؈Jr,có—|jd«ry|jdd«d}t|j«}t ||«}t t t|«d««sydt ddd d fD]}t ||z«sŒy y) Nr/Férz __init__.pyz.pyz.pycz.soz.slz.pydT)Ú startswithÚsplitrÚfilenamerrr)r(Úimp_nameÚ base_pathÚexts rr2z!FixImport.probably_a_local_importUs†€Ø × Ñ ˜sÔ #àØ—>‘> # qÓ)¨!Ñ,ˆÜ˜DŸM™MÓ*ˆ ܘ HÓ-ˆ ô”dœ7 9Ó-¨}Ó=Ô>ØØœ3 ¨¨u°fÓ=ˆCÜi #‘oÕ&Ùð>ðr,) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr%r;r2Ú __classcell__)r+s@rr!r!&sø„Ø€Mð€Gô >ò öDr,r!N)Ú__doc__r rÚos.pathrrrrÚ fixer_utilr r r rÚBaseFixr!©r,rÚrOs2ðñ õß.Ó.ß0Ñ0ò6ô&= ×"Ñ"õ=r,lib2to3/fixes/__pycache__/fix_basestring.cpython-312.pyc000064400000001404152462633570017076 0ustar00Ë T—çh@ãóJ—dZddlmZddlmZGd„dej «Zy)zFixer for basestring -> str.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixBasestringTz 'basestring'có0—td|j¬«S)NÚstr)Úprefix)rr )ÚselfÚnodeÚresultss ú5/usr/lib64/python3.12/lib2to3/fixes/fix_basestring.pyÚ transformzFixBasestring.transform s€ÜE $§+¡+Ô.Ð.óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rrs„Ø€Mà€Gó/rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrr Úrs"ðÙ"õÝô/J×&Ñ&õ/rlib2to3/fixes/__pycache__/fix_future.cpython-312.pyc000064400000001617152462633570016255 0ustar00Ë T—çh#ãóJ—dZddlmZddlmZGd„dej «Zy)zVRemove __future__ imports from __future__ import foo is replaced with an empty line. é)Ú fixer_base)Ú BlankLinecó—eZdZdZdZdZd„Zy)Ú FixFutureTz;import_from< 'from' module_name="__future__" 'import' any >é có<—t«}|j|_|S)N)rÚprefix)ÚselfÚnodeÚresultsÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_future.pyÚ transformzFixFuture.transforms€Ü‹kˆØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr©rrrr s„Ø€MàO€Gð€IórrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñõÝ"ô  ×"Ñ"õ rlib2to3/fixes/__pycache__/fix_ws_comma.cpython-312.opt-1.pyc000064400000003021152462633570017476 0ustar00Ë T—çhBãóV—dZddlmZddlmZddlmZGd„dej «Zy)z©Fixer that changes 'a ,b' into 'a, b'. This also changes '{a :b}' into '{a: b}', but does not touch other uses of colons. It does not touch other uses of whitespace. é)Úpytree)Útoken)Ú fixer_basecó–—eZdZdZdZej ejd«Zej ejd«Z ee fZ d„Z y)Ú FixWsCommaTzH any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]> Ú,Ú:cóî—|j«}d}|jD]S}||jvr*|j}|j «r d|vrd|_d}Œ;|r|j}|sd|_d}ŒU|S)NFÚ ÚTÚ )ÚcloneÚchildrenÚSEPSÚprefixÚisspace)ÚselfÚnodeÚresultsÚnewÚcommaÚchildrs ú3/usr/lib64/python3.12/lib2to3/fixes/fix_ws_comma.pyÚ transformzFixWsComma.transformst€Øj‰j‹lˆØˆØ—\”\ˆEؘŸ ™ Ñ!ØŸ™Ø—>‘>Ô#¨°FÑ(:Ø#%E”LØ‘áØ"Ÿ\™\FÙ!Ø'*˜œ Ø‘ð"ðˆ óN) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚPATTERNrÚLeafrÚCOMMAÚCOLONrr©rrrr sJ„à€Hð€Gð ˆFK‰K˜Ÿ ™  SÓ )€EØ ˆFK‰K˜Ÿ ™  SÓ )€EØ 5ˆ>€DórrN)Ú__doc__r rÚpgen2rrÚBaseFixrr$rrÚr(s'ðñõÝÝô×#Ñ#õrlib2to3/fixes/__pycache__/fix_urllib.cpython-312.pyc000064400000021673152462633570016240 0ustar00Ë T—çh¯ ãóÆ—dZddlmZmZddlmZmZmZmZm Z m Z m Z dgd¢fdgd¢fdd gfgdgd ¢fdd d gfgd œZ e dje dd«d„ZGd„de«Zy)z¾Fix changes imports of urllib which are now incompatible. This is rather similar to fix_imports, but because of the more complex nature of the fixing for urllib, it has its own fixer. é)Ú alternatesÚ FixImports)ÚNameÚCommaÚ FromImportÚNewlineÚfind_indentationÚNodeÚsymszurllib.request) Ú URLopenerÚFancyURLopenerÚ urlretrieveÚ _urlopenerÚurlopenÚ urlcleanupÚ pathname2urlÚ url2pathnameÚ getproxiesz urllib.parse)ÚquoteÚ quote_plusÚunquoteÚ unquote_plusÚ urlencodeÚ splitattrÚ splithostÚ splitnportÚ splitpasswdÚ splitportÚ splitqueryÚsplittagÚ splittypeÚ splituserÚ splitvaluez urllib.errorÚContentTooShortError)rÚinstall_openerÚ build_openerÚRequestÚOpenerDirectorÚ BaseHandlerÚHTTPDefaultErrorHandlerÚHTTPRedirectHandlerÚHTTPCookieProcessorÚ ProxyHandlerÚHTTPPasswordMgrÚHTTPPasswordMgrWithDefaultRealmÚAbstractBasicAuthHandlerÚHTTPBasicAuthHandlerÚProxyBasicAuthHandlerÚAbstractDigestAuthHandlerÚHTTPDigestAuthHandlerÚProxyDigestAuthHandlerÚ HTTPHandlerÚ HTTPSHandlerÚ FileHandlerÚ FTPHandlerÚCacheFTPHandlerÚUnknownHandlerÚURLErrorÚ HTTPError)ÚurllibÚurllib2r?r>éc #óêK—t«}tj«D]N\}}|D]D}|\}}t|«}d|›d|›d–—d|›d|›d|›d–—d|z–—d |z–—d |›d |›d –—ŒFŒPy­w) Nzimport_name< 'import' (module=zB | dotted_as_names< any* module=z any* >) > zimport_from< 'from' mod_member=z* 'import' ( member=z | import_as_name< member=z] 'as' any > | import_as_names< members=any* >) > zIimport_from< 'from' module_star=%r 'import' star='*' > ztimport_name< 'import' dotted_as_name< module_as=%r 'as' any > > zpower< bare_with_attr=z trailer< '.' member=z > any* > )ÚsetÚMAPPINGÚitemsr)ÚbareÚ old_moduleÚchangesÚchangeÚ new_moduleÚmemberss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_urllib.pyÚ build_patternrL0s™èø€Ü ‹5€DÜ&Ÿ}™}žÑˆ GÛˆFØ"(Ñ ˆJ˜Ü  Ó)‰Gò$¢Zð1ó 1ò $¢Wªgð7ò 7ðØ"ñ#ò #ðà"ñ#ó #ò $¢Wð.ó .ñ!ñ /ùs‚A1A3có*—eZdZd„Zd„Zd„Zd„Zd„Zy)Ú FixUrllibcó4—djt««S)NÚ|)ÚjoinrL)Úselfs rKrLzFixUrllib.build_patternIs€Øx‰xœ ›Ó(Ð(ócóR—|jd«}|j}g}t|jddD]+}|j t |d|¬«t «g«Œ-|jt t|jdd|¬««|j|«y)z‘Transform for the basic import case. Replaces the old import name with a comma separated list of its replacements. ÚmoduleNéÿÿÿÿr©Úprefix) ÚgetrXrCÚvalueÚextendrrÚappendÚreplace)rRÚnodeÚresultsÚ import_modÚprefÚnamesÚnames rKÚtransform_importzFixUrllib.transform_importLs”€ð —[‘[ Ó*ˆ Ø× Ñ ˆàˆô˜J×,Ñ,Ñ-¨c¨rÓ2ˆDØ L‰Lœ$˜t A™w¨tÔ4´e³gÐ>Õ ?ð3à ‰ ”Tœ' *×"2Ñ"2Ñ3°BÑ7¸Ñ:À4ÔHÔIØ×ј5Õ!rScóD—|jd«}|j}|jd«}|ryt|t«r|d}d}t|j D]}|j |dvsŒ|d}n|r|j t||¬««y|j|d«yg}i} |d} | D]Å}|jtjk(r3|jd j } |jdj } n|j } d} | d k7sŒgt|j D]I}| |dvsŒ |d| vr|j|d«| j|dg«j|«ŒKŒÇg} t|«}d }d „}|D]¬}| |}g}|dd D]3}|j!|||««|jt#««Œ5|j!||d |««t%||«}|r%|j&jj)|«r||_| j|«d}Œ®| rMg}| dd D]}|j!|t+«g«Œ|j| d «|j |«y|j|d«y)zšTransform for imports of specific module elements. Replaces the module to be imported from with the appropriate new module. Ú mod_memberÚmemberrNr@rWú!This is an invalid module elementrJéÚ,Tcó\—|jtjk(rxt|jdj |¬«|jdj «|jdj «g}ttj|«gSt|j |¬«gS)NrrWr@ri)Útyper Úimport_as_namerÚchildrenrZÚcloner )rcrXÚkidss rKÚ handle_namez/FixUrllib.transform_member..handle_nameŒsŠ€Ø—9‘9¤× 3Ñ 3Ò3Ü  §¡¨qÑ!1×!7Ñ!7ÀÔGØ ŸM™M¨!Ñ,×2Ñ2Ó4Ø ŸM™M¨!Ñ,×2Ñ2Ó4ð6Dô!¤×!4Ñ!4°dÓ;Ð<Ð<ܘTŸZ™Z°Ô7Ð8Ð8rSrVFzAll module elements are invalid)rYrXÚ isinstanceÚlistrCrZr]rÚcannot_convertrlr rmrnr\Ú setdefaultr r[rrÚparentÚendswithr)rRr^r_rfrargÚnew_namerHÚmodulesÚmod_dictrJÚas_nameÚ member_nameÚ new_nodesÚ indentationÚfirstrqrUÚeltsrbÚeltÚnewÚnodesÚnew_nodes rKÚtransform_memberzFixUrllib.transform_member\sŠ€ð —[‘[ Ó.ˆ Ø× Ñ ˆØ—‘˜XÓ&ˆñ ä˜&¤$Ô'Ø ™ØˆHÜ! *×"2Ñ"2Ô3Ø—<‘< 6¨!¡9Ò,Ø% a™yHÙð4ñØ×"Ñ"¤4¨¸Ô#>Õ?à×#Ñ# DÐ*MÕNð ˆG؈HؘiÑ(ˆGÛ!à—;‘;¤$×"5Ñ"5Ò5Ø$Ÿo™o¨aÑ0×6Ñ6GØ"(§/¡/°!Ñ"4×":Ñ":‘Kà"(§,¡,KØ"GØ #Ó%Ü")¨*×*:Ñ*:Ô";˜Ø&¨&°©)Ò3Ø% a™y°Ñ8Ø '§¡¨v°a©yÔ 9Ø$×/Ñ/°°q± ¸2Ó>×EÑEÀfÕMñ #<ð"ðˆIÜ*¨4Ó0ˆK؈Eò 9ó"Ø Ñ'ØØ  ›9CØ—L‘L¡¨S°$Ó!7Ô8Ø—L‘L¤£Õ)ð%ð— ‘ ™[¨¨b©°4Ó8Ô9Ü  ¨Ó/Ù § ¡ × 2Ñ 2× ;Ñ ;¸KÔ HØ!,C”JØ× Ñ  Ô%Ø‘ð"ñØØ )¨#¨2£HØ—L‘L (¬G«IÐ!6Õ7ð!/à— ‘ ˜Y r™]Ô+Ø— ‘ ˜UÕ#à×#Ñ# DÐ*KÕLrScóL—|jd«}|jd«}d}t|t«r|d}t|jD]}|j|dvsŒ|d}n|r'|j t ||j¬««y|j|d«y)z.Transform for calls to module members in code.Úbare_with_attrrgNrr@rWrh) rYrrrsrCrZr]rrXrt)rRr^r_Ú module_dotrgrxrHs rKÚ transform_dotzFixUrllib.transform_dot¨s €à—[‘[Ð!1Ó2ˆ Ø—‘˜XÓ&ˆØˆÜ fœdÔ #ؘA‘YˆFܘj×.Ñ.Ô/ˆFØ|‰|˜v a™yÒ(Ø! !™9Ùð0ñ Ø × Ñ œt HØ+5×+<Ñ+<ô >õ ?ð × Ñ  Ð&IÕ JrScól—|jd«r|j||«y|jd«r|j||«y|jd«r|j||«y|jd«r|j |d«y|jd«r|j |d«yy)NrUrfr‡Ú module_starzCannot handle star imports.Ú module_asz#This module is now multiple modules)rYrdr…r‰rt)rRr^r_s rKÚ transformzFixUrllib.transform¹s–€Ø ;‰;xÔ Ø × !Ñ ! $¨Õ 0Ø [‰[˜Ô &Ø × !Ñ ! $¨Õ 0Ø [‰[Ð)Ô *Ø × Ñ ˜t WÕ -à [‰[˜Ô 'Ø × Ñ  Ð&CÕ DØ [‰[˜Ô %Ø × Ñ  Ð&KÕ Lð&rSN)Ú__name__Ú __module__Ú __qualname__rLrdr…r‰r©rSrKrNrNGs „ò)ò"ò JMòXKó" MrSrNN)Ú__doc__Úlib2to3.fixes.fix_importsrrÚlib2to3.fixer_utilrrrrr r r rCr\rLrNr‘rSrKÚr•s¶ðñ÷=÷>÷>ñ>ð"òCðDð ò?ð@ð  Ø+Ð,ð.ð /ð"ò 'ð (ð Ø Ð-ð/ð ñ €ðBˆ Ñ×ј' (Ñ+¨AÑ.Ô/ò.ô.}M õ}MrSlib2to3/fixes/__pycache__/fix_metaclass.cpython-312.opt-2.pyc000064400000021441152462633570017654 0ustar00Ë T—çh ãó€— ddlmZddlmZddlmZmZmZd„Zd„Z d„Z d„Z d„Z d „Z Gd „d ej«Zy ) é)Ú fixer_base)Útoken)ÚsymsÚNodeÚLeafcó¨— |jD]Â}|jtjk(r t |«cS|jtj k(sŒK|jsŒX|jd}|jtj k(sŒ…|jsŒ’|jd}t|t«sŒ²|jdk(sŒÂyy)NéÚ __metaclass__TF) ÚchildrenÚtyperÚsuiteÚ has_metaclassÚ simple_stmtÚ expr_stmtÚ isinstancerÚvalue)ÚparentÚnodeÚ expr_nodeÚ left_sides ú4/usr/lib64/python3.12/lib2to3/fixes/fix_metaclass.pyrrsž€ðð —”ˆØ 9‰9œŸ ™ Ò "Ü  Ó&Ò &Ø Y‰Yœ$×*Ñ*Ó *¨t¯}«}ØŸ ™  aÑ(ˆIØ~‰~¤§¡Ó/°I×4FÓ4FØ%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:Ùð ð ócó— |jD]!}|jtjk(sŒ!yt |j«D]$\}}|jt j k(sŒ$n td«‚ttjg«}|j|dzdrT|j|dz}|j|j««|j«|j|dzdrŒT|j|«|}y)NzNo class suite and no ':'!é) r r rr Ú enumeraterÚCOLONÚ ValueErrorrÚ append_childÚcloneÚremove)Úcls_noderÚir Ú move_nodes rÚfixup_parse_treer$-sî€ðð×!Ô!ˆØ 9‰9œŸ ™ Ó "á ð"ô ˜X×.Ñ.Ö/‰ˆˆ4Ø 9‰9œŸ ™ Ó #Ù ð0ôÐ5Ó6Ð6ô ”—‘˜RÓ €EØ × Ñ ˜A˜a™C˜DÑ !Ø×%Ñ% a¨¡cÑ*ˆ Ø ×ј9Ÿ?™?Ó,Ô-Ø×ÑÔð × Ñ ˜A˜a™C˜DÒ !ð ×ј%Ô Ø Drcóz— t|j«D]$\}}|jtjk(sŒ$ny|j «t tjg«}t tj|g«}|j|drN|j|}|j|j««|j «|j|drŒN|j||«|jdjd}|jdjd} | j|_ y)Nr )rr r rÚSEMIr rrrrrrÚ insert_childÚprefix) rr"Ú stmt_nodeÚsemi_indrÚnew_exprÚnew_stmtr#Ú new_leaf1Ú old_leaf1s rÚfixup_simple_stmtr/Gs€ðô$ I×$6Ñ$6Ö7‰ˆ$Ø 9‰9œŸ ™ Ó "Ù ð8ð à‡KK„MÜ”D—N‘N BÓ'€HÜ”D×$Ñ$ x jÓ1€HØ × Ñ ˜X˜YÑ 'Ø×&Ñ& xÑ0ˆ Ø×јiŸo™oÓ/Ô0Ø×ÑÔð × Ñ ˜X˜YÒ 'ð ×ј˜8Ô$Ø×!Ñ! !Ñ$×-Ñ-¨aÑ0€IØ×"Ñ" 1Ñ%×.Ñ.¨qÑ1€IØ ×'Ñ'€IÕrcó®—|jrI|jdjtjk(r|jdj «yyy)Néÿÿÿÿ)r r rÚNEWLINEr )rs rÚremove_trailing_newliner3_s@€Ø ‡}‚}˜Ÿ™ rÑ*×/Ñ/´5·=±=Ò@Ø ‰ bÑ× Ñ Õ"ðA€}rc#ó6K—|jD]!}|jtjk(sŒ!n t d«‚t t |j««D]¹\}}|jtjk(sŒ$|jsŒ1|jd}|jtjk(sŒ^|jsŒk|jd}t|t«sŒ‹|jdk(sŒ›t|||«t|«|||f–—Œ»y­w)NzNo class suite!r r )r r rr rÚlistrrrrrrr/r3)r!rr"Ú simple_noderÚ left_nodes rÚ find_metasr8dsàèø€à×!Ô!ˆØ 9‰9œŸ ™ Ó "Ù ð"ôÐ*Ó+Ð+ôœy¨¯©Ó7Ö8‰ˆˆ;Ø × Ñ œt×/Ñ/Ó /°K×4HÓ4HØ#×,Ñ,¨QÑ/ˆIØ~‰~¤§¡Ó/°I×4FÓ4Fà%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:ä% d¨A¨{Ô;Ü+¨KÔ8Ø  KÐ0Ó0ñ9ùs/‚-D°AD D ,DÂ: DÃDÃ'DÃ7"Dcó€— |jddd…}|r1|j«}|jtjk(rn|rŒ1|rv|j«}t |t «r1|jtjk7r|jrd|_y|j|jddd…«|rŒuyy)Nr1Ú) r Úpopr rÚINDENTrrÚDEDENTr(Úextend)r Úkidsrs rÚ fixup_indentr@{s™€ðð >‰>™$˜B˜$Ñ €Dá Øx‰x‹zˆØ 9‰9œŸ ™ Ò $Ø ò ñ Øx‰x‹zˆÜ dœDÔ ! d§i¡i´5·<±<Ò&?Ø{Š{Ø ” Ø à K‰K˜Ÿ ™ ¡d¨ dÑ+Ô ,ô rcó—eZdZdZdZd„Zy)Ú FixMetaclassTz classdef có—t|«syt|«d}t|«D]\}}}|}|j«Œ|jdj }t |j«dk(r†|jdj tjk(r|jd}n4|jdj«} ttj| g«}|jd|«nét |j«dk(r-ttjg«}|jd|«n¤t |j«dk(rttjg«}|jdttjd««|jd|«|jdttj d««n t#d «‚|jdjd} d | _| j&} |jr1|j)ttj*d ««d | _nd | _|jd} d | jd_d | jd_|j)|«t-«|js^|j«t|d«} | | _|j)| «|j)ttj.d««yt |j«dkDrŸ|jdj tj0k(rt|jdj tj2k(rIt|d«} |jd| «|jdttj.d««yyyy)Nr éééérÚ)Ú(zUnexpected class definitionÚ metaclassÚ,Ú r:rÚpassÚ éþÿÿÿr1)rr$r8r r r ÚlenrÚarglistrrÚ set_childr'rrÚRPARÚLPARrrr(rÚCOMMAr@r2r<r=)ÚselfrÚresultsÚlast_metaclassr r"ÚstmtÚ text_typerQrÚmeta_txtÚorig_meta_prefixrÚ pass_leafs rÚ transformzFixMetaclass.transform˜sú€Ü˜TÔ"Ø ä˜ÔðˆÜ(¨Ö.‰NˆE1dØ!ˆNØ K‰KMð/ð—M‘M !Ñ$×)Ñ)ˆ ô ˆt}‰}Ó  Ò "ð}‰}˜QÑ×$Ñ$¬¯ © Ò4ØŸ-™-¨Ñ*’🙠qÑ)×/Ñ/Ó1ÜœtŸ|™|¨f¨XÓ6Ø—‘˜q 'Õ*Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a Õ )Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a¤¤e§j¡j°#Ó!6Ô 7Ø × Ñ ˜a Ô )Ø × Ñ ˜a¤¤e§j¡j°#Ó!6Õ 7äÐ:Ó;Ð ;ð"×*Ñ*¨1Ñ-×6Ñ6°qÑ9ˆØ$ˆŒØ#Ÿ?™?Ðà × Ò Ø × Ñ ¤¤e§k¡k°3Ó!7Ô 8Ø!ˆHOà ˆHŒOð#×+Ñ+¨AÑ.ˆ à')ˆ ×ј1ÑÔ$Ø')ˆ ×ј1ÑÔ$à×ј^Ô,äUÔð~Š~à L‰LŒNܘY¨Ó/ˆIØ/ˆIÔ Ø × Ñ ˜iÔ (Ø × Ñ œd¤5§=¡=°$Ó7Õ 8ä —‘Ó  1Ò $Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9ä˜Y¨Ó/ˆIØ × Ñ ˜r 9Ô -Ø × Ñ ˜r¤4¬¯ © °tÓ#<Õ =ð :ð:ð%rN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr^©rrrBrB‘s„Ø€Mð€GóL>rrBN)r:rÚpygramrÚ fixer_utilrrrrr$r/r3r8r@ÚBaseFixrBrdrrÚrhsJððõ(Ýß)Ñ)òò&ò4(ò0#ò 1ò.-ô,S>:×%Ñ%õS>rlib2to3/fixes/__pycache__/fix_raw_input.cpython-312.opt-1.pyc000064400000001660152462633570017710 0ustar00Ë T—çhÆãóJ—dZddlmZddlmZGd„dej «Zy)z2Fixer that changes raw_input(...) into input(...).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixRawInputTzU power< name='raw_input' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚinput)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_raw_input.pyÚ transformzFixRawInput.transforms"€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Õ7óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„à€Mð€Gó8rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ8õÝô 8*×$Ñ$õ 8rlib2to3/fixes/__pycache__/fix_itertools.cpython-312.opt-1.pyc000064400000003666152462633570017734 0ustar00Ë T—çh ãóJ—dZddlmZddlmZGd„dej «Zy)aT Fixer for itertools.(imap|ifilter|izip) --> (map|filter|zip) and itertools.ifilterfalse --> itertools.filterfalse (bugs 2360-2363) imports from itertools are fixed in fix_itertools_import.py If itertools is imported as something else (ie: import itertools as it; it.izip(spam, eggs)) method calls will not get fixed. é)Ú fixer_base)ÚNamecó2—eZdZdZdZde«zZdZd„Zy)Ú FixItertoolsTz7('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')zì power< it='itertools' trailer< dot='.' func=%(it_funcs)s > trailer< '(' [any] ')' > > | power< func=%(it_funcs)s trailer< '(' [any] ')' > > écóP—d}|dd}d|vr_|jdvrQ|d|d}}|j}|j«|j«|jj |«|xs |j}|j t |jdd|¬««y)NÚfuncéÚit)Ú ifilterfalseÚ izip_longestÚdoté)Úprefix)ÚvaluerÚremoveÚparentÚreplacer)ÚselfÚnodeÚresultsrr rr s ú4/usr/lib64/python3.12/lib2to3/fixes/fix_itertools.pyÚ transformzFixItertools.transforms”€ØˆØv‰˜qÑ!ˆØ G‰OØ J‰JÐ>Ñ >ؘu‘~ w¨t¡}ˆCà—Y‘YˆFØ I‰IŒKð J‰JŒLØ K‰K× Ñ  Ô %àÒ&˜4Ÿ;™;ˆØ ‰ ”T˜$Ÿ*™* Q R˜.°Ô8Õ9óN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚit_funcsÚlocalsÚPATTERNÚ run_orderr©rrrrs+„Ø€MØH€Hðñ “Hñ €Gð€Ió:rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrr#rrÚr(s$ðñõÝô::×%Ñ%õ:rlib2to3/fixes/__pycache__/fix_operator.cpython-312.opt-1.pyc000064400000012761152462633570017537 0ustar00Ë T—çhb ãód—dZddlZddlmZddlmZmZmZm Z d„Z Gd„dej«Z y)aÐFixer for operator functions. operator.isCallable(obj) -> callable(obj) operator.sequenceIncludes(obj) -> operator.contains(obj) operator.isSequenceType(obj) -> isinstance(obj, collections.abc.Sequence) operator.isMappingType(obj) -> isinstance(obj, collections.abc.Mapping) operator.isNumberType(obj) -> isinstance(obj, numbers.Number) operator.repeat(obj, n) -> operator.mul(obj, n) operator.irepeat(obj, n) -> operator.imul(obj, n) éN)Ú fixer_base)ÚCallÚNameÚStringÚ touch_importcó‡—ˆfd„}|S)Ncó•—‰|_|S©N)Ú invocation)ÚfÚss €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_operator.pyÚdeczinvocation..decsø€ØˆŒ ؈ó©)r rs` rr r sø€ôð €Jrcó—eZdZdZdZdZdZdeee¬«zZd„Z e d«d „«Z e d «d „«Z e d «d „«Z e d«d„«Ze d«d„«Ze d«d„«Ze d«d„«Zd„Zd„Zd„Zy)Ú FixOperatorTÚprezµ method=('isCallable'|'sequenceIncludes' |'isSequenceType'|'isMappingType'|'isNumberType' |'repeat'|'irepeat') z'(' obj=any ')'z¼ power< module='operator' trailer< '.' %(methods)s > trailer< %(obj)s > > | power< %(methods)s trailer< %(obj)s > > )ÚmethodsÚobjcó>—|j||«}| |||«Syr )Ú _check_method)ÚselfÚnodeÚresultsÚmethods rÚ transformzFixOperator.transform+s,€Ø×#Ñ# D¨'Ó2ˆØ Ð Ù˜$ Ó(Ð (ð rzoperator.contains(%s)có(—|j||d«S)NÚcontains©Ú_handle_rename©rrrs rÚ_sequenceIncludeszFixOperator._sequenceIncludes0s€à×"Ñ" 4¨°*Ó=Ð=rz callable(%s)cól—|d}ttd«|j«g|j¬«S)NrÚcallable©Úprefix)rrÚcloner')rrrrs rÚ _isCallablezFixOperator._isCallable4s+€àe‰nˆÜ”D˜Ó$ s§y¡y£{ m¸D¿K¹KÔHÐHrzoperator.mul(%s)có(—|j||d«S)NÚmulr r"s rÚ_repeatzFixOperator._repeat9s€à×"Ñ" 4¨°%Ó8Ð8rzoperator.imul(%s)có(—|j||d«S)NÚimulr r"s rÚ_irepeatzFixOperator._irepeat=s€à×"Ñ" 4¨°&Ó9Ð9rz(isinstance(%s, collections.abc.Sequence)có*—|j||dd«S)Núcollections.abcÚSequence©Ú_handle_type2abcr"s rÚ_isSequenceTypezFixOperator._isSequenceTypeAs€à×$Ñ$ T¨7Ð4EÀzÓRÐRrz'isinstance(%s, collections.abc.Mapping)có*—|j||dd«S)Nr1ÚMappingr3r"s rÚ_isMappingTypezFixOperator._isMappingTypeEs€à×$Ñ$ T¨7Ð4EÀyÓQÐQrzisinstance(%s, numbers.Number)có*—|j||dd«S)NÚnumbersÚNumberr3r"s rÚ _isNumberTypezFixOperator._isNumberTypeIs€à×$Ñ$ T¨7°I¸xÓHÐHrcóB—|dd}||_|j«y)Nrr)ÚvalueÚchanged)rrrÚnamers rr!zFixOperator._handle_renameMs"€Ø˜Ñ" 1Ñ%ˆØˆŒ ؉ÕrcóÆ—td||«|d}|j«tddj||g«z«g}t t d«||j ¬«S)Nrz, Ú.Ú isinstancer&)rr(rÚjoinrrr')rrrÚmoduleÚabcrÚargss rr4zFixOperator._handle_type2abcRsV€ÜT˜6 4Ô(Øe‰nˆØ— ‘ “ œV D¨3¯8©8°V¸S°MÓ+BÑ$BÓCÐDˆÜ”D˜Ó&¨°T·[±[ÔAÐArcóü—t|d|ddjz«}t|tjj «r9d|vr|St |d«f}|j|z}|j|d|z«y)NÚ_rrrErzYou should use '%s' here.) Úgetattrr>rCÚ collectionsrFÚCallableÚstrr Úwarning)rrrrÚsubÚinvocation_strs rrzFixOperator._check_methodXs|€Ü˜˜s W¨XÑ%6°qÑ%9×%?Ñ%?Ñ?Ó@ˆÜ fœkŸo™o×6Ñ6Ô 7ؘ7Ñ"Ø ä˜7 5™>Ó*Ð,Ø!'×!2Ñ!2°SÑ!8Ø— ‘ ˜TÐ#>ÀÑ#OÔPØrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderrrÚdictÚPATTERNrr r#r)r,r/r5r8r<r!r4rrrrrrs„Ø€MØ €Eð€Gð €Cðñ  ¨cÔ2ñ 3€Gò)ñ Ð'Ó(ñ>ó)ð>ñÓñIó ðIñÐ"Ó#ñ9ó$ð9ñÐ#Ó$ñ:ó%ð:ñÐ:Ó;ñSó<ðSñÐ9Ó:ñRó;ðRñÐ0Ó1ñIó2ðIòò Bó rr) Ú__doc__Úcollections.abcrKÚlib2to3rÚlib2to3.fixer_utilrrrrr ÚBaseFixrrrrÚr]s3ðñ óõß?Ó?òôG*×$Ñ$õGrlib2to3/fixes/__pycache__/fix_methodattrs.cpython-312.opt-2.pyc000064400000002062152462633570020234 0ustar00Ë T—çh^ãóT— ddlmZddlmZddddœZGd„dej «Zy ) é)Ú fixer_base)ÚNameÚ__func__Ú__self__z__self__.__class__)Úim_funcÚim_selfÚim_classcó—eZdZdZdZd„Zy)ÚFixMethodattrsTzU power< any+ trailer< '.' attr=('im_func' | 'im_self' | 'im_class') > any* > có†—|dd}t|j}|jt||j¬««y)NÚattré)Úprefix)ÚMAPÚvalueÚreplacerr)ÚselfÚnodeÚresultsr Únews ú6/usr/lib64/python3.12/lib2to3/fixes/fix_methodattrs.pyÚ transformzFixMethodattrs.transforms4€Øv‰˜qÑ!ˆÜ$—*‘*‰oˆØ ‰ ”T˜# d§k¡kÔ2Õ3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrr r s„Ø€Mð€Gó4rr N)ÚrÚ fixer_utilrrÚBaseFixr rrrÚr#s6ððõ ÝðØØ%ñ€ô 4Z×'Ñ'õ 4rlib2to3/fixes/__pycache__/fix_nonzero.cpython-312.pyc000064400000002064152462633570016432 0ustar00Ë T—çhOãóJ—dZddlmZddlmZGd„dej «Zy)z*Fixer for __nonzero__ -> __bool__ methods.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixNonzeroTzÓ classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='__nonzero__' parameters< '(' NAME ')' > any+ > any* > > có^—|d}td|j¬«}|j|«y)NÚnameÚ__bool__)Úprefix)rr Úreplace)ÚselfÚnodeÚresultsrÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_nonzero.pyÚ transformzFixNonzero.transforms'€Øv‰ˆÜ: d§k¡kÔ2ˆØ ‰ SÕóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€GórrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ0õÝô ×#Ñ#õ rlib2to3/fixes/__pycache__/fix_imports2.cpython-312.pyc000064400000001144152462633570016515 0ustar00Ë T—çh!ãóH—dZddlmZdddœZGd„dej«Zy)zTFix incompatible imports and module references that must be fixed after fix_imports.é)Ú fix_importsÚdbm)ÚwhichdbÚanydbmcó—eZdZdZeZy)Ú FixImports2éN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚMAPPINGÚmapping©óú3/usr/lib64/python3.12/lib2to3/fixes/fix_imports2.pyrr s „à€IàGrrN)Ú__doc__ÚrrÚ FixImportsrrrrÚrs.ðñåðØñ €ô +×(Ñ(õrlib2to3/fixes/__pycache__/fix_standarderror.cpython-312.opt-2.pyc000064400000001417152462633570020553 0ustar00Ë T—çhÁãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)ÚFixStandarderrorTz- 'StandardError' có0—td|j¬«S)NÚ Exception)Úprefix)rr )ÚselfÚnodeÚresultss ú8/usr/lib64/python3.12/lib2to3/fixes/fix_standarderror.pyÚ transformzFixStandarderror.transforms€ÜK¨¯ © Ô4Ð4óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rr s„Ø€Mð€Gó5rrN)ÚrÚ fixer_utilrÚBaseFixrrrr Úrs$ðð,õÝô5z×)Ñ)õ5rlib2to3/fixes/__pycache__/fix_tuple_params.cpython-312.pyc000064400000017226152462633570017442 0ustar00Ë T—çh½ãóš—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z d„Z Gd„dej«Zd „Zd „Zgd fd „Zd „Zy )a:Fixer for function definitions with tuple parameters. def func(((a, b), c), d): ... -> def func(x, d): ((a, b), c) = x ... It will also support lambdas: lambda (x, y): x + y -> lambda t: t[0] + t[1] # The parens are a syntax error in Python 3 lambda (x): x + y -> lambda x: x + y é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚNameÚNewlineÚNumberÚ SubscriptÚsymscóŽ—t|tj«xr*|jdjt j k(S)Né)Ú isinstancerÚNodeÚchildrenÚtyperÚSTRING)Ústmts ú7/usr/lib64/python3.12/lib2to3/fixes/fix_tuple_params.pyÚ is_docstringrs5€Ü dœFŸK™KÓ (ò 1Ø =‰=˜Ñ × Ñ ¤E§L¡LÑ 0ð1ócó$—eZdZdZdZdZd„Zd„Zy)ÚFixTupleParamséTa funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > cóð‡‡ ‡ —d|vr‰j||«SgŠ |d}|d}|djdjtjk(r)d}|djdj }t «Š n(d}d}tjtjd«Š d ˆ ˆ ˆfd „ }|jtjk(r ||«ne|jtjk(rHt|j«D]0\}} | jtjk(sŒ$|| |dkD¬ «Œ2‰ sy‰ D] } |d| _ Œ|} |dk(r d ‰ d_n*t|dj|«r|‰ d_|dz} ‰ D] } |d| _ Œ‰ |dj| | t!| dz| t#‰ «zdz«D]}||dj|_Œ|dj%«y) NÚlambdaÚsuiteÚargsr érz; ÚcóT•—t‰j««}|j«}d|_t ||j««}|rd|_|j |«‰j tjtj|‰j«g««y)NrÚ ) rÚnew_nameÚcloneÚprefixrÚreplaceÚappendrrr Ú simple_stmt)Ú tuple_argÚ add_prefixÚnÚargrÚendÚ new_linesÚselfs €€€rÚ handle_tuplez.FixTupleParams.transform..handle_tupleCsø€ÜT—]‘]“_Ó%ˆAØ—/‘/Ó#ˆC؈CŒJܘ#˜qŸw™w›yÓ)ˆDÙØ”Ø × Ñ ˜aÔ Ø × Ñ œVŸ[™[¬×)9Ñ)9Ø*.°· ± ³ Ð)<ó>õ ?r)r)r!)F)Útransform_lambdarrrÚINDENTÚvaluerrÚLeafr ÚtfpdefÚ typedargslistÚ enumerateÚparentr$rÚrangeÚlenÚchanged)r.ÚnodeÚresultsrrÚstartÚindentr/Úir+ÚlineÚafterr,r-s` @@rÚ transformzFixTupleParams.transform.sßú€Ø wÑ Ø×(Ñ(¨¨wÓ7Ð 7àˆ Ø˜Ñ ˆØv‰ˆð ‰8× Ñ ˜QÑ × $Ñ $¬¯ © Ò 4؈Eؘ1‘X×&Ñ& qÑ)×/Ñ/ˆFÜ“)‰CàˆE؈FÜ—+‘+œeŸl™l¨BÓ/ˆC÷ ?ð 9‰9œŸ ™ Ò #Ù ˜Õ Ø Y‰Yœ$×,Ñ,Ò ,Ü# D§M¡MÖ2‘3Ø—8‘8œtŸ{™{Ó*ñ! °!°a±%Ö9ð 3ñ Ø óˆDØ ™(ˆDKððˆØ AŠ:Ø"%ˆIa‰LÕ Ü ˜% ™(×+Ñ+¨EÑ2Ô 3Ø"(ˆIa‰LÔ Ø˜A‘IˆEãˆDØ ™(ˆDKðà)2ˆˆa‰×ј% Ð&Üu˜Q‘w ¤c¨)£nÑ 4°QÑ 6Ö7ˆAØ*0ˆE!‰H× Ñ ˜aÑ Õ 'ð8à ˆa‰×ÑÕrcó —|d}|d}t|d«}|jtjk(r)|j «}d|_|j |«yt|«}t|«}|jt|««}t|d¬«} |j | j ««|j«D]±} | jtjk(sŒ!| j|vsŒ0|| jD cgc]} | j «‘Œ} } tjt j"| j «g| z«} | j | _| j | «Œ³ycc} w)NrÚbodyÚinnerr!)r$)Ú simplify_argsrrÚNAMEr#r$r%Ú find_paramsÚ map_to_indexr"Ú tuple_namerÚ post_orderr2rrr Úpower)r.r;r<rrDrEÚparamsÚto_indexÚtup_nameÚ new_paramr*ÚcÚ subscriptsÚnews rr0zFixTupleParams.transform_lambdans-€Øv‰ˆØv‰ˆÜ˜g gÑ.Ó/ˆð :‰:œŸ™Ò #Ø—K‘K“MˆE؈EŒLØ L‰L˜Ô Ø ä˜TÓ"ˆÜ Ó'ˆØ—=‘=¤¨FÓ!3Ó4ˆä˜¨#Ô.ˆ Ø ‰ Y—_‘_Ó&Ô'Ø—‘Ö"ˆAØv‰vœŸ™Ó#¨¯©°8Ò(;Ø19¸!¿'¹'Ò1BÓCÑ1B¨A˜aŸg™giÐ1B ÐCÜ—k‘k¤$§*¡*Ø#,§?¡?Ó#4Ð"5¸ Ñ"BóDàŸX™X” Ø— ‘ ˜#•ñ #ùâCsÄ FN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚ BM_compatibleÚPATTERNrBr0©rrrrs„Ø€Ià€Mð€Gò>ó@rrcóL—|jtjtjfvr|S|jtj k(rL|jtj k(r-|j d}|jtj k(rŒ-|Std|z«‚)NrzReceived unexpected node %s)rr ÚvfplistrrGÚvfpdefrÚ RuntimeError)r;s rrFrF‹sx€Ø ‡yy”T—\‘\¤5§:¡:Ð.Ñ.؈ Ø ‰”d—k‘kÒ !ði‰iœ4Ÿ;™;Ò&Ø—=‘= Ñ#ˆDði‰iœ4Ÿ;™;Ó&àˆ Ü Ð4°tÑ;Ó <Ð}t|t«r|jt|««Œ.|j|«Œ@dj |«S)NÚ_)rrdr&rJÚjoin)reÚlrfs rrJrJ¨sF€Ø €AÛˆÜ cœ4Ô Ø H‰H”Z “_Õ %à H‰HSMð ð 8‰8A‹;Ðr)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrFrHrIrJrZrrÚrpsQðñõ*ÝÝßG×Gò1ôgZ×'Ñ'ôgòX =òLð%'¨$ó  órlib2to3/fixes/__pycache__/fix_urllib.cpython-312.opt-2.pyc000064400000020644152462633570017175 0ustar00Ë T—çh¯ ãóÄ— ddlmZmZddlmZmZmZmZmZm Z m Z dgd¢fdgd¢fddgfgdgd ¢fdd d gfgd œZ e d je dd«d„Z Gd„de«Zy)é)Ú alternatesÚ FixImports)ÚNameÚCommaÚ FromImportÚNewlineÚfind_indentationÚNodeÚsymszurllib.request) Ú URLopenerÚFancyURLopenerÚ urlretrieveÚ _urlopenerÚurlopenÚ urlcleanupÚ pathname2urlÚ url2pathnameÚ getproxiesz urllib.parse)ÚquoteÚ quote_plusÚunquoteÚ unquote_plusÚ urlencodeÚ splitattrÚ splithostÚ splitnportÚ splitpasswdÚ splitportÚ splitqueryÚsplittagÚ splittypeÚ splituserÚ splitvaluez urllib.errorÚContentTooShortError)rÚinstall_openerÚ build_openerÚRequestÚOpenerDirectorÚ BaseHandlerÚHTTPDefaultErrorHandlerÚHTTPRedirectHandlerÚHTTPCookieProcessorÚ ProxyHandlerÚHTTPPasswordMgrÚHTTPPasswordMgrWithDefaultRealmÚAbstractBasicAuthHandlerÚHTTPBasicAuthHandlerÚProxyBasicAuthHandlerÚAbstractDigestAuthHandlerÚHTTPDigestAuthHandlerÚProxyDigestAuthHandlerÚ HTTPHandlerÚ HTTPSHandlerÚ FileHandlerÚ FTPHandlerÚCacheFTPHandlerÚUnknownHandlerÚURLErrorÚ HTTPError)ÚurllibÚurllib2r?r>éc #óêK—t«}tj«D]N\}}|D]D}|\}}t|«}d|›d|›d–—d|›d|›d|›d–—d|z–—d |z–—d |›d |›d –—ŒFŒPy­w) Nzimport_name< 'import' (module=zB | dotted_as_names< any* module=z any* >) > zimport_from< 'from' mod_member=z* 'import' ( member=z | import_as_name< member=z] 'as' any > | import_as_names< members=any* >) > zIimport_from< 'from' module_star=%r 'import' star='*' > ztimport_name< 'import' dotted_as_name< module_as=%r 'as' any > > zpower< bare_with_attr=z trailer< '.' member=z > any* > )ÚsetÚMAPPINGÚitemsr)ÚbareÚ old_moduleÚchangesÚchangeÚ new_moduleÚmemberss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_urllib.pyÚ build_patternrL0s™èø€Ü ‹5€DÜ&Ÿ}™}žÑˆ GÛˆFØ"(Ñ ˆJ˜Ü  Ó)‰Gò$¢Zð1ó 1ò $¢Wªgð7ò 7ðØ"ñ#ò #ðà"ñ#ó #ò $¢Wð.ó .ñ!ñ /ùs‚A1A3có*—eZdZd„Zd„Zd„Zd„Zd„Zy)Ú FixUrllibcó4—djt««S)NÚ|)ÚjoinrL)Úselfs rKrLzFixUrllib.build_patternIs€Øx‰xœ ›Ó(Ð(ócóT— |jd«}|j}g}t|jddD]+}|j t |d|¬«t «g«Œ-|jt t|jdd|¬««|j|«y)NÚmoduleéÿÿÿÿr©Úprefix) ÚgetrXrCÚvalueÚextendrrÚappendÚreplace)rRÚnodeÚresultsÚ import_modÚprefÚnamesÚnames rKÚtransform_importzFixUrllib.transform_importLs™€ð ð—[‘[ Ó*ˆ Ø× Ñ ˆàˆô˜J×,Ñ,Ñ-¨c¨rÓ2ˆDØ L‰Lœ$˜t A™w¨tÔ4´e³gÐ>Õ ?ð3à ‰ ”Tœ' *×"2Ñ"2Ñ3°BÑ7¸Ñ:À4ÔHÔIØ×ј5Õ!rScóF— |jd«}|j}|jd«}|ryt|t«r|d}d}t|j D]}|j |dvsŒ|d}n|r|j t||¬««y|j|d«yg}i} |d} | D]Å}|jtjk(r3|jdj } |jdj } n|j } d} | d k7sŒgt|j D]I}| |dvsŒ |d| vr|j|d«| j|dg«j|«ŒKŒÇg} t|«}d }d „}|D]¬}| |}g}|dd D]3}|j!|||««|jt#««Œ5|j!||d |««t%||«}|r%|j&jj)|«r||_| j|«d }Œ®| rMg}| dd D]}|j!|t+«g«Œ|j| d «|j |«y|j|d«y)NÚ mod_memberÚmemberrr@rWú!This is an invalid module elementrJéÚ,Tcó\—|jtjk(rxt|jdj |¬«|jdj «|jdj «g}ttj|«gSt|j |¬«gS)NrrWr@ri)Útyper Úimport_as_namerÚchildrenrZÚcloner )rcrXÚkidss rKÚ handle_namez/FixUrllib.transform_member..handle_nameŒsŠ€Ø—9‘9¤× 3Ñ 3Ò3Ü  §¡¨qÑ!1×!7Ñ!7ÀÔGØ ŸM™M¨!Ñ,×2Ñ2Ó4Ø ŸM™M¨!Ñ,×2Ñ2Ó4ð6Dô!¤×!4Ñ!4°dÓ;Ð<Ð<ܘTŸZ™Z°Ô7Ð8Ð8rSrVFzAll module elements are invalid)rYrXÚ isinstanceÚlistrCrZr]rÚcannot_convertrlr rmrnr\Ú setdefaultr r[rrÚparentÚendswithr)rRr^r_rfrargÚnew_namerHÚmodulesÚmod_dictrJÚas_nameÚ member_nameÚ new_nodesÚ indentationÚfirstrqrUÚeltsrbÚeltÚnewÚnodesÚnew_nodes rKÚtransform_memberzFixUrllib.transform_member\s€ð ð—[‘[ Ó.ˆ Ø× Ñ ˆØ—‘˜XÓ&ˆñ ä˜&¤$Ô'Ø ™ØˆHÜ! *×"2Ñ"2Ô3Ø—<‘< 6¨!¡9Ò,Ø% a™yHÙð4ñØ×"Ñ"¤4¨¸Ô#>Õ?à×#Ñ# DÐ*MÕNð ˆG؈HؘiÑ(ˆGÛ!à—;‘;¤$×"5Ñ"5Ò5Ø$Ÿo™o¨aÑ0×6Ñ6GØ"(§/¡/°!Ñ"4×":Ñ":‘Kà"(§,¡,KØ"GØ #Ó%Ü")¨*×*:Ñ*:Ô";˜Ø&¨&°©)Ò3Ø% a™y°Ñ8Ø '§¡¨v°a©yÔ 9Ø$×/Ñ/°°q± ¸2Ó>×EÑEÀfÕMñ #<ð"ðˆIÜ*¨4Ó0ˆK؈Eò 9ó"Ø Ñ'ØØ  ›9CØ—L‘L¡¨S°$Ó!7Ô8Ø—L‘L¤£Õ)ð%ð— ‘ ™[¨¨b©°4Ó8Ô9Ü  ¨Ó/Ù § ¡ × 2Ñ 2× ;Ñ ;¸KÔ HØ!,C”JØ× Ñ  Ô%Ø‘ð"ñØØ )¨#¨2£HØ—L‘L (¬G«IÐ!6Õ7ð!/à— ‘ ˜Y r™]Ô+Ø— ‘ ˜UÕ#à×#Ñ# DÐ*KÕLrScóN— |jd«}|jd«}d}t|t«r|d}t|jD]}|j|dvsŒ|d}n|r'|j t ||j¬««y|j|d«y)NÚbare_with_attrrgrr@rWrh) rYrrrsrCrZr]rrXrt)rRr^r_Ú module_dotrgrxrHs rKÚ transform_dotzFixUrllib.transform_dot¨s£€Ø<Ø—[‘[Ð!1Ó2ˆ Ø—‘˜XÓ&ˆØˆÜ fœdÔ #ؘA‘YˆFܘj×.Ñ.Ô/ˆFØ|‰|˜v a™yÒ(Ø! !™9Ùð0ñ Ø × Ñ œt HØ+5×+<Ñ+<ô >õ ?ð × Ñ  Ð&IÕ JrScól—|jd«r|j||«y|jd«r|j||«y|jd«r|j||«y|jd«r|j |d«y|jd«r|j |d«yy)NrUrfr‡Ú module_starzCannot handle star imports.Ú module_asz#This module is now multiple modules)rYrdr…r‰rt)rRr^r_s rKÚ transformzFixUrllib.transform¹s–€Ø ;‰;xÔ Ø × !Ñ ! $¨Õ 0Ø [‰[˜Ô &Ø × !Ñ ! $¨Õ 0Ø [‰[Ð)Ô *Ø × Ñ ˜t WÕ -à [‰[˜Ô 'Ø × Ñ  Ð&CÕ DØ [‰[˜Ô %Ø × Ñ  Ð&KÕ Lð&rSN)Ú__name__Ú __module__Ú __qualname__rLrdr…r‰r©rSrKrNrNGs „ò)ò"ò JMòXKó" MrSrNN)Úlib2to3.fixes.fix_importsrrÚlib2to3.fixer_utilrrrrr r r rCr\rLrNr‘rSrKÚr”s¶ðð÷=÷>÷>ñ>ð"òCðDð ò?ð@ð  Ø+Ð,ð.ð /ð"ò 'ð (ð Ø Ð-ð/ð ñ €ðBˆ Ñ×ј' (Ñ+¨AÑ.Ô/ò.ô.}M õ}MrSlib2to3/fixes/__pycache__/fix_imports.cpython-312.pyc000064400000013732152462633570016441 0ustar00Ë T—çh4ãóT—dZddlmZddlmZmZidd“dd“dd“d d “d d “d d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“id#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dDdEdFdGdHdIdJdJdJdKdLdLdMdNdOœ¥ZdP„ZefdQ„ZGdR„dSej«Z yT)Uz/Fix incompatible imports and module references.é)Ú fixer_base)ÚNameÚ attr_chainÚStringIOÚioÚ cStringIOÚcPickleÚpickleÚ __builtin__ÚbuiltinsÚcopy_regÚcopyregÚQueueÚqueueÚ SocketServerÚ socketserverÚ ConfigParserÚ configparserÚreprÚreprlibÚ FileDialogztkinter.filedialogÚ tkFileDialogÚ SimpleDialogztkinter.simpledialogÚtkSimpleDialogÚtkColorChooserztkinter.colorchooserÚtkCommonDialogztkinter.commondialogÚDialogztkinter.dialogÚTkdndz tkinter.dndÚtkFontz tkinter.fontÚ tkMessageBoxztkinter.messageboxÚ ScrolledTextztkinter.scrolledtextÚ Tkconstantsztkinter.constantsÚTixz tkinter.tixÚttkz tkinter.ttkÚTkinterÚtkinterÚ markupbaseÚ _markupbaseÚ_winregÚwinregÚthreadÚ_threadÚ dummy_threadÚ _dummy_threadÚdbhashzdbm.bsdÚdumbdbmzdbm.dumbÚdbmzdbm.ndbmÚgdbmzdbm.gnuÚ xmlrpclibz xmlrpc.clientÚDocXMLRPCServerz xmlrpc.serverz http.clientz html.entitiesz html.parserz http.cookieszhttp.cookiejarz http.serverÚ subprocessÚ collectionsz urllib.parsezurllib.robotparser)ÚSimpleXMLRPCServerÚhttplibÚhtmlentitydefsÚ HTMLParserÚCookieÚ cookielibÚBaseHTTPServerÚSimpleHTTPServerÚ CGIHTTPServerÚcommandsÚ UserStringÚUserListÚurlparseÚ robotparsercóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_imports.pyÚ alternatesrM=s"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc#óÔK—dj|Dcgc]}d|z‘Œ c}«}t|j««}d|›d|›d–—d|z–—d|›d|›d –—d |z–—ycc}w­w) Nz | zmodule_name='%s'z$name_import=import_name< 'import' ((z;) | multiple_imports=dotted_as_names< any* (z) any* >) > z›import_from< 'from' (%s) 'import' ['('] ( any | import_as_name< any 'as' any > | import_as_names< any* >) [')'] > z(import_name< 'import' (dotted_as_name< (zg) 'as' any > | multiple_imports=dotted_as_names< any* dotted_as_name< (z!) 'as' any > any* >) > z3power< bare_with_attr=(%s) trailer<'.' any > any* >)rIrMÚkeys)ÚmappingÚkeyÚmod_listÚ bare_namess rLÚ build_patternrUAsƒèø€Øz‰z¹wÓG¹w¸Ð-°Ó3¸wÑGÓH€HܘGŸL™L›NÓ+Jòš8ð %ò%ð ðñ óòš8ð %ò%ð @À*Ñ LÓLùò!Hùs‚A(’ A#žA A(cóN‡—eZdZdZdZeZdZd„Zˆfd„Z ˆfd„Z ˆfd„Z d„Z ˆxZ S)Ú FixImportsTécóJ—djt|j««S)NrG)rIrUrQ)Úselfs rLrUzFixImports.build_pattern`s€Øx‰xœ  d§l¡lÓ3Ó4Ð4rNcóT•—|j«|_tt|«y©N)rUÚPATTERNÚsuperrWÚcompile_pattern)rZÚ __class__s €rLr_zFixImports.compile_patterncs"ø€ð×)Ñ)Ó+ˆŒ Ü Œj˜$Ñ/Õ1rNc󂕇—tt| Љ|«}|r%d|vrtˆfd„t |d«D««ry|Sy)NÚbare_with_attrc3ó.•K—|] }‰|«–—Œy­wr\©)Ú.0ÚobjÚmatchs €rLÚ z#FixImports.match..qsøèø€ÐIÑ.H s™˜cŸ Ñ.HùsƒÚparentF)r^rWrgÚanyr)rZÚnodeÚresultsrgr`s @€rLrgzFixImports.matchjsEù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ð  wÑ.ÜÓI¬j¸¸xÔ.HÓIÔIØØˆNØrNcó<•—tt| ||«i|_yr\)r^rWÚ start_treeÚreplace)rZÚtreeÚfilenamer`s €rLrnzFixImports.start_treevsø€Ü Œj˜$Ñ*¨4°Ô:؈ rNcóÖ—|jd«}|r€|j}|j|}|jt ||j ¬««d|vr||j|<d|vr'|j |«}|r|j||«yyy|dd}|jj|j«}|r'|jt ||j ¬««yy)NÚ module_name)ÚprefixÚ name_importÚmultiple_importsrbé)ÚgetÚvaluerQrorrtrgÚ transform)rZrkrlÚ import_modÚmod_nameÚnew_nameÚ bare_names rLrzzFixImports.transformzs߀Ø—[‘[ Ó/ˆ Ù Ø!×'Ñ'ˆHØ—|‘| HÑ-ˆHØ × Ñ œt H°Z×5FÑ5FÔGÔ HØ Ñ'ð*2— ‘ ˜XÑ&Ø! WÑ,ð Ÿ*™* TÓ*ÙØ—N‘N 4¨Õ1ðð -ð Ð 0Ñ1°!Ñ4ˆIØ—|‘|×'Ñ'¨ ¯©Ó8ˆHÙØ×!Ñ!¤$ x¸ ×8HÑ8HÔ"IÕJðrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚkeep_line_orderÚMAPPINGrQÚ run_orderrUr_rgrnrzÚ __classcell__)r`s@rLrWrWUs3ø„à€MØ€Oà€Gð€Iò5ô2ô ôöKrNrWN) Ú__doc__ÚrÚ fixer_utilrrr„rMrUÚBaseFixrWrdrNrLÚr‹sðÙ5õß)ð2 ˆ:˜ð2 Ø ˜ð2 à hð2 ð ˜:ð2 ð yð 2 ð Gð 2 ð ˜>ð 2 ð ˜>ð2 ð 9ð2 ð Ð-ð2 ð Ð/ð2 ð Ð1ð2 ð Ð3ð2 ð Ð3ð2 ð Ð3ð2 ð Ð%ð2 ð Mñ!2 ð" ^ð#2 ð$ Ð/ð%2 ð& Ð1ð'2 ð( Ð-ð)2 ð* -ð+2 ð, -ð-2 ð. ið/2 ð0 ˜ð12 ð2 hð32 ð4 Yð52 ð6 ˜?ð72 ð: Yð;2 ð< jð=2 ð> *ð?2 ð@ 9ðA2 ðB ˜ðC2 ðD ˜oñE2 ðF"1Ø#Ø-Ø'Ø#Ø(Ø*Ø,Ø)à#Ø'Ø%Ø&Ø/òc2 €òj4ð"óMô(<K×#Ñ#õ<KrNlib2to3/fixes/__pycache__/fix_paren.cpython-312.opt-1.pyc000064400000003127152462633570017005 0ustar00Ë T—çhÊãóN—dZddlmZddlmZmZGd„dej «Zy)ztFixer that adds parentheses where they are required This converts ``[x for x in 1, 2]`` to ``[x for x in (1, 2)]``.é)Ú fixer_base)ÚLParenÚRParencó—eZdZdZdZd„Zy)ÚFixParenTa atom< ('[' | '(') (listmaker< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > > | testlist_gexp< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > >) (']' | ')') > có¨—|d}t«}|j|_d|_|jd|«|jt ««y)NÚtargetÚé)rÚprefixÚ insert_childÚ append_childr)ÚselfÚnodeÚresultsr Úlparens ú0/usr/lib64/python3.12/lib2to3/fixes/fix_paren.pyÚ transformzFixParen.transform%sE€Ø˜Ñ"ˆä“ˆØŸ ™ ˆŒ ؈Œ Ø×јA˜vÔ&Ø×ÑœF›HÕ%óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó,&rrN)Ú__doc__r rÚ fixer_utilrrÚBaseFixrrrrÚrs%ðñCõß'ô &ˆz×!Ñ!õ &rlib2to3/fixes/__pycache__/fix_metaclass.cpython-312.opt-1.pyc000064400000024145152462633570017657 0ustar00Ë T—çh ãó‚—dZddlmZddlmZddlmZmZmZd„Z d„Z d„Z d„Z d „Z d „ZGd „d ej«Zy )a‹Fixer for __metaclass__ = X -> (metaclass=X) methods. The various forms of classef (inherits nothing, inherits once, inherits many) don't parse the same in the CST so we look at ALL classes for a __metaclass__ and if we find one normalize the inherits to all be an arglist. For one-liner classes ('class X: pass') there is no indent/dedent so we normalize those into having a suite. Moving the __metaclass__ into the classdef can also cause the class body to be empty so there is some special casing for that as well. This fixer also tries very hard to keep original indenting and spacing in all those corner cases. é)Ú fixer_base)Útoken)ÚsymsÚNodeÚLeafcó¦—|jD]Â}|jtjk(r t |«cS|jtj k(sŒK|jsŒX|jd}|jtj k(sŒ…|jsŒ’|jd}t|t«sŒ²|jdk(sŒÂyy)zì we have to check the cls_node without changing it. There are two possibilities: 1) clsdef => suite => simple_stmt => expr_stmt => Leaf('__meta') 2) clsdef => simple_stmt => expr_stmt => Leaf('__meta') éÚ __metaclass__TF) ÚchildrenÚtyperÚsuiteÚ has_metaclassÚ simple_stmtÚ expr_stmtÚ isinstancerÚvalue)ÚparentÚnodeÚ expr_nodeÚ left_sides ú4/usr/lib64/python3.12/lib2to3/fixes/fix_metaclass.pyrrs™€ð —”ˆØ 9‰9œŸ ™ Ò "Ü  Ó&Ò &Ø Y‰Yœ$×*Ñ*Ó *¨t¯}«}ØŸ ™  aÑ(ˆIØ~‰~¤§¡Ó/°I×4FÓ4FØ%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:Ùð ð ócó—|jD]!}|jtjk(sŒ!yt |j«D]$\}}|jt j k(sŒ$n td«‚ttjg«}|j|dzdrT|j|dz}|j|j««|j«|j|dzdrŒT|j|«|}y)zf one-line classes don't get a suite in the parse tree so we add one to normalize the tree NzNo class suite and no ':'!é) r r rr Ú enumeraterÚCOLONÚ ValueErrorrÚ append_childÚcloneÚremove)Úcls_noderÚir Ú move_nodes rÚfixup_parse_treer$-sé€ð×!Ô!ˆØ 9‰9œŸ ™ Ó "á ð"ô ˜X×.Ñ.Ö/‰ˆˆ4Ø 9‰9œŸ ™ Ó #Ù ð0ôÐ5Ó6Ð6ô ”—‘˜RÓ €EØ × Ñ ˜A˜a™C˜DÑ !Ø×%Ñ% a¨¡cÑ*ˆ Ø ×ј9Ÿ?™?Ó,Ô-Ø×ÑÔð × Ñ ˜A˜a™C˜DÒ !ð ×ј%Ô Ø Drcóx—t|j«D]$\}}|jtjk(sŒ$ny|j «t tjg«}t tj|g«}|j|drN|j|}|j|j««|j «|j|drŒN|j||«|jdjd}|jdjd} | j|_ y)zÑ if there is a semi-colon all the parts count as part of the same simple_stmt. We just want the __metaclass__ part so we move everything after the semi-colon into its own simple_stmt node Nr )rr r rÚSEMIr rrrrrrÚ insert_childÚprefix) rr"Ú stmt_nodeÚsemi_indrÚnew_exprÚnew_stmtr#Ú new_leaf1Ú old_leaf1s rÚfixup_simple_stmtr/Gs €ô $ I×$6Ñ$6Ö7‰ˆ$Ø 9‰9œŸ ™ Ó "Ù ð8ð à‡KK„MÜ”D—N‘N BÓ'€HÜ”D×$Ñ$ x jÓ1€HØ × Ñ ˜X˜YÑ 'Ø×&Ñ& xÑ0ˆ Ø×јiŸo™oÓ/Ô0Ø×ÑÔð × Ñ ˜X˜YÒ 'ð ×ј˜8Ô$Ø×!Ñ! !Ñ$×-Ñ-¨aÑ0€IØ×"Ñ" 1Ñ%×.Ñ.¨qÑ1€IØ ×'Ñ'€IÕrcó®—|jrI|jdjtjk(r|jdj «yyy)Néÿÿÿÿ)r r rÚNEWLINEr )rs rÚremove_trailing_newliner3_s@€Ø ‡}‚}˜Ÿ™ rÑ*×/Ñ/´5·=±=Ò@Ø ‰ bÑ× Ñ Õ"ðA€}rc#ó6K—|jD]!}|jtjk(sŒ!n t d«‚t t |j««D]¹\}}|jtjk(sŒ$|jsŒ1|jd}|jtjk(sŒ^|jsŒk|jd}t|t«sŒ‹|jdk(sŒ›t|||«t|«|||f–—Œ»y­w)NzNo class suite!r r )r r rr rÚlistrrrrrrr/r3)r!rr"Ú simple_noderÚ left_nodes rÚ find_metasr8dsàèø€à×!Ô!ˆØ 9‰9œŸ ™ Ó "Ù ð"ôÐ*Ó+Ð+ôœy¨¯©Ó7Ö8‰ˆˆ;Ø × Ñ œt×/Ñ/Ó /°K×4HÓ4HØ#×,Ñ,¨QÑ/ˆIØ~‰~¤§¡Ó/°I×4FÓ4Fà%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:ä% d¨A¨{Ô;Ü+¨KÔ8Ø  KÐ0Ó0ñ9ùs/‚-D°AD D ,DÂ: DÃDÃ'DÃ7"Dcó~—|jddd…}|r1|j«}|jtjk(rn|rŒ1|rv|j«}t |t «r1|jtjk7r|jrd|_y|j|jddd…«|rŒuyy)z› If an INDENT is followed by a thing with a prefix then nuke the prefix Otherwise we get in trouble when removing __metaclass__ at suite start Nr1Ú) r Úpopr rÚINDENTrrÚDEDENTr(Úextend)r Úkidsrs rÚ fixup_indentr@{s”€ð >‰>™$˜B˜$Ñ €Dá Øx‰x‹zˆØ 9‰9œŸ ™ Ò $Ø ò ñ Øx‰x‹zˆÜ dœDÔ ! d§i¡i´5·<±<Ò&?Ø{Š{Ø ” Ø à K‰K˜Ÿ ™ ¡d¨ dÑ+Ô ,ô rcó—eZdZdZdZd„Zy)Ú FixMetaclassTz classdef có—t|«syt|«d}t|«D]\}}}|}|j«Œ|jdj }t |j«dk(r†|jdj tjk(r|jd}n4|jdj«} ttj| g«}|jd|«nét |j«dk(r-ttjg«}|jd|«n¤t |j«dk(rttjg«}|jdttjd««|jd|«|jdttj d««n t#d «‚|jdjd} d | _| j&} |jr1|j)ttj*d ««d | _nd | _|jd} d | jd_d | jd_|j)|«t-«|js^|j«t|d«} | | _|j)| «|j)ttj.d««yt |j«dkDrŸ|jdj tj0k(rt|jdj tj2k(rIt|d«} |jd| «|jdttj.d««yyyy)Nr éééérÚ)Ú(zUnexpected class definitionÚ metaclassÚ,Ú r:rÚpassÚ éþÿÿÿr1)rr$r8r r r ÚlenrÚarglistrrÚ set_childr'rrÚRPARÚLPARrrr(rÚCOMMAr@r2r<r=)ÚselfrÚresultsÚlast_metaclassr r"ÚstmtÚ text_typerQrÚmeta_txtÚorig_meta_prefixrÚ pass_leafs rÚ transformzFixMetaclass.transform˜sú€Ü˜TÔ"Ø ä˜ÔðˆÜ(¨Ö.‰NˆE1dØ!ˆNØ K‰KMð/ð—M‘M !Ñ$×)Ñ)ˆ ô ˆt}‰}Ó  Ò "ð}‰}˜QÑ×$Ñ$¬¯ © Ò4ØŸ-™-¨Ñ*’🙠qÑ)×/Ñ/Ó1ÜœtŸ|™|¨f¨XÓ6Ø—‘˜q 'Õ*Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a Õ )Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a¤¤e§j¡j°#Ó!6Ô 7Ø × Ñ ˜a Ô )Ø × Ñ ˜a¤¤e§j¡j°#Ó!6Õ 7äÐ:Ó;Ð ;ð"×*Ñ*¨1Ñ-×6Ñ6°qÑ9ˆØ$ˆŒØ#Ÿ?™?Ðà × Ò Ø × Ñ ¤¤e§k¡k°3Ó!7Ô 8Ø!ˆHOà ˆHŒOð#×+Ñ+¨AÑ.ˆ à')ˆ ×ј1ÑÔ$Ø')ˆ ×ј1ÑÔ$à×ј^Ô,äUÔð~Š~à L‰LŒNܘY¨Ó/ˆIØ/ˆIÔ Ø × Ñ ˜iÔ (Ø × Ñ œd¤5§=¡=°$Ó7Õ 8ä —‘Ó  1Ò $Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9ä˜Y¨Ó/ˆIØ × Ñ ˜r 9Ô -Ø × Ñ ˜r¤4¬¯ © °tÓ#<Õ =ð :ð:ð%rN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr^©rrrBrB‘s„Ø€Mð€GóL>rrBN)Ú__doc__r:rÚpygramrÚ fixer_utilrrrrr$r/r3r8r@ÚBaseFixrBrdrrÚrisJðñõ(Ýß)Ñ)òò&ò4(ò0#ò 1ò.-ô,S>:×%Ñ%õS>rlib2to3/fixes/__pycache__/fix_has_key.cpython-312.opt-1.pyc000064400000010155152462633570017322 0ustar00Ë T—çh| ãóZ—dZddlmZddlmZddlmZmZGd„dej«Zy)a&Fixer for has_key(). Calls to .has_key() methods are expressed in terms of the 'in' operator: d.has_key(k) -> k in d CAVEATS: 1) While the primary target of this fixer is dict.has_key(), the fixer will change any has_key() method call, regardless of its class. 2) Cases like this will not be converted: m = d.has_key if m(k): ... Only *calls* to has_key() are converted. While it is possible to convert the above to something like m = d.__contains__ if m(k): ... this is currently not done. é)Úpytree)Ú fixer_base)ÚNameÚ parenthesizecó—eZdZdZdZd„Zy)Ú FixHasKeyTa• anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > after=any* > | negation=not_test< 'not' anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > > > c ó`—|j}|jj|jk(r&|jj |j«ry|j d«}|d}|j}|dDcgc]}|j«‘Œ}}|dj«} |j d«} | r| Dcgc]}|j«‘Œ} }| j|j|j|j|j|j|j|jfvr t| «} t!|«dk(r|d}n t#j$|j&|«}d|_t)d d¬ «} |r/t)d d¬ «} t#j$|j*| | f«} t#j$|j| | |f«} | r8t| «} t#j$|j&| ft-| «z«} |jj|j|j.|j0|j2|j4|j6|j8|j:|j&f vr t| «} || _| Scc}wcc}w) NÚnegationÚanchorÚbeforeÚargÚafterééÚ Úin)ÚprefixÚnot)ÚsymsÚparentÚtypeÚnot_testÚpatternÚmatchÚgetrÚcloneÚ comparisonÚand_testÚor_testÚtestÚlambdefÚargumentrÚlenrÚNodeÚpowerrÚcomp_opÚtupleÚexprÚxor_exprÚand_exprÚ shift_exprÚ arith_exprÚtermÚfactor)ÚselfÚnodeÚresultsrr r rÚnr r rÚn_opÚn_notÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_has_key.pyÚ transformzFixHasKey.transformGs€ày‰yˆØ K‰K× Ñ  § ¡ Ò -Ø L‰L× Ñ ˜tŸ{™{Ô +ðØ—;‘;˜zÓ*ˆØ˜Ñ"ˆØ—‘ˆØ%,¨XÒ%6Ó7Ñ%6 !—'‘'•)Ð%6ˆÐ7Øe‰n×"Ñ"Ó$ˆØ— ‘ ˜GÓ$ˆÙ Ù(-Ó.© 1Q—W‘W•Y¨ˆEÐ.Ø 8‰8˜Ÿ™¨¯©¸¿ ¹ ØŸ ™  d§i¡i°·±¸t¿}¹}ðNñ Nä˜sÓ#ˆCÜ ˆv‹;˜!Ò Ø˜A‘Y‰Fä—[‘[ §¡¨VÓ4ˆF؈Œ ÜD Ô%ˆÙ ܘ sÔ+ˆEÜ—;‘;˜tŸ|™|¨e°T¨]Ó;ˆDÜk‰k˜$Ÿ/™/¨C°°vÐ+>Ó?ˆÙ ܘsÓ#ˆCÜ—+‘+˜dŸj™j¨3¨&´5¸³<Ñ*?Ó@ˆCØ ;‰;× Ñ  §¡°·±¸D¿M¹MØ $§ ¡ ¨t¯©Ø $§¡°·±Ø $§ ¡ ¨T¯Z©Zð 9ñ 9ô˜sÓ#ˆC؈Œ ؈ ùò78ùò/s Á?J&ÃJ+N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr7©ór6rr&s„Ø€Mð€Gó<&r>rN) Ú__doc__ÚrrÚ fixer_utilrrÚBaseFixrr=r>r6ÚrCs)ðñõ:Ýß+ôG ×"Ñ"õGr>lib2to3/fixes/__pycache__/fix_execfile.cpython-312.opt-1.pyc000064400000005243152462633570017465 0ustar00Ë T—çhãón—dZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z Gd„dej«Zy)zoFixer for execfile. This converts usages of the execfile function into calls to the built-in exec() function. é)Ú fixer_base) ÚCommaÚNameÚCallÚLParenÚRParenÚDotÚNodeÚArgListÚStringÚsymscó—eZdZdZdZd„Zy)Ú FixExecfileTz« power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > > | power< 'execfile' trailer< '(' filename=any ')' > > có¤—|d}|jd«}|jd«}|jdjdj«}t|j«t «t dd«g|¬«}t tjtd«|g«}t tjt«td «g«t tjt«t«g«g} |g| z} |j«} d| _t d d«} | t «| t «| gz} ttd «| d «}|g}|)|j!t «|j«g«|)|j!t «|j«g«ttd «||j¬«S)NÚfilenameÚglobalsÚlocalséÿÿÿÿz"rb"Ú )ÚrparenÚopenÚreadz'exec'ÚcompileÚÚexec)Úprefix)ÚgetÚchildrenÚcloner rr r r ÚpowerrÚtrailerr rrrrÚextend)ÚselfÚnodeÚresultsrrrÚexecfile_parenÚ open_argsÚ open_callrÚ open_exprÚ filename_argÚexec_strÚ compile_argsÚ compile_callÚargss ú3/usr/lib64/python3.12/lib2to3/fixes/fix_execfile.pyÚ transformzFixExecfile.transformsu€à˜:Ñ&ˆØ—+‘+˜iÓ(ˆØ—‘˜XÓ&ˆðŸ™ rÑ*×3Ñ3°BÑ7×=Ñ=Ó?ˆä˜XŸ^™^Ó-¬u«w¼¸vÀsÓ8KÐLØ#1ô3ˆ 䜟™¤d¨6£l°IÐ%>Ó?ˆ Ü”T—\‘\¤C£E¬4°«<Ð#8Ó9Ü”T—\‘\¤F£H¬f«hÐ#7Ó8ð:ˆàK $Ñ&ˆ ð —~‘~Ó'ˆ Ø!ˆ Ôܘ( CÓ(ˆØ ¤E£G¨\¼5»7ÀHÐ#MÑMˆ ÜœD ›O¨\¸2Ó>ˆ àˆ~ˆØ Ð Ø K‰Kœ› '§-¡-£/Ð2Ô 3Ø Ð Ø K‰Kœ› &§,¡,£.Ð1Ô 2Ü”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr0©r1r/rrs„Ø€Mð€Gó r;s0ðñõ ÷1÷1÷1ô&<*×$Ñ$õ& sys.maxsize é)Ú fixer_base)ÚNameÚ attr_chainÚsysÚmaxintÚmaxsizecóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapÚrepr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_renames.pyÚ alternatesrs"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc #óàK—ttj««D]J\}}t|j««D])\}}|t||f<d|›d|›d|›d–—d|›d|›d–—Œ+ŒLy­w)Nz3 import_from< 'from' module_name=z, 'import' ( attr_name=z | import_as_name< attr_name=z! 'as' any >) > z& power< module_name=z trailer< '.' attr_name=z > any* > )ÚlistÚMAPPINGÚitemsÚLOOKUP)ÚmoduleÚreplaceÚold_attrÚnew_attrs rÚ build_patternrslèø€ä¤§ ¡ £Ö0‰ˆÜ"& w§}¡}£Ö"7Ñ ˆHhØ)1ŒFF˜HÐ%Ò &ò ¢ª8ð5ó 5ò  ¢ð+ó +ñ#8ñ1ùs‚A,A.cóX‡—eZdZdZdj e««ZdZˆfd„Zd„Z ˆxZ S)Ú FixRenamesTr Úprecóz•‡—tt| Љ|«}|r!tˆfd„t |d«D««ry|Sy)Nc3ó.•K—|] }‰|«–—Œy­w)N©)Ú.0ÚobjÚmatchs €rÚ z#FixRenames.match..5søèø€ÐDÑ)C #‘5˜—:Ñ)CùsƒÚparentF)Úsuperrr&Úanyr)ÚselfÚnodeÚresultsr&Ú __class__s @€rr&zFixRenames.match1s;ù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ÜÓD¬°D¸(Ô)CÓDÔDØØˆNØrcóÞ—|jd«}|jd«}|rI|rFt|j|jf}|jt ||j ¬««yyy)NÚ module_nameÚ attr_name)Úprefix)ÚgetrÚvaluerrr2)r+r,r-Úmod_namer1rs rÚ transformzFixRenames.transform>s^€Ø—;‘;˜}Ó-ˆØ—K‘K  Ó,ˆ ñ ™ ܘxŸ~™~¨y¯©Ð?Ñ@ˆHØ × Ñ œd 8°I×4DÑ4DÔEÕ Fð"ˆ8r) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibler rÚPATTERNÚorderr&r6Ú __classcell__)r.s@rrr*s(ø„Ø€MØh‰h‘}“Ó'€Gà €EôöGrrN) Ú__doc__ÚrÚ fixer_utilrrrrrrÚBaseFixrr#rrÚrBsFðñõß)à H˜yÐ)ð €à €ò4ò+ô*G×#Ñ#õGrlib2to3/fixes/__pycache__/fix_except.cpython-312.pyc000064400000007665152462633570016244 0ustar00Ë T—çh ãó|—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z d„Z Gd„dej«Zy ) aªFixer for except statements with named exceptions. The following cases will be converted: - "except E, T:" where T is a name: except E as T: - "except E, T:" where T is not a name, tuple or list: except E as t: T = t This is done because the target of an "except" clause must be a name. - "except E, T:" where T is a tuple or list literal: except E as t: T = t.args é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚAttrÚNameÚis_tupleÚis_listÚsymsc#óÀK—t|«D]L\}}|jtjk(sŒ$|jdj dk(sŒA|||dzf–—ŒNy­w)NéÚexceptr)Ú enumerateÚtyper Ú except_clauseÚchildrenÚvalue)ÚnodesÚiÚns ú1/usr/lib64/python3.12/lib2to3/fixes/fix_except.pyÚ find_exceptsrsSèø€Ü˜%Ö ‰ˆˆ1Ø 6‰6”T×'Ñ'Ó 'Øz‰z˜!‰}×"Ñ" hÓ.ؘ%  !¡™*oÓ%ñ!ùs‚/A²AÁAcó—eZdZdZdZd„Zy)Ú FixExceptTa1 try_stmt< 'try' ':' (simple_stmt | suite) cleanup=(except_clause ':' (simple_stmt | suite))+ tail=(['except' ':' (simple_stmt | suite)] ['else' ':' (simple_stmt | suite)] ['finally' ':' (simple_stmt | suite)]) > c ó’—|j}|dDcgc]}|j«‘Œ}}|dDcgc]}|j«‘Œ}}t|«D]\}} t|j«dk(sŒ |jdd\} } } | j t dd¬««| jtjk7r t |j«d¬«} | j«}d|_ | j | «| j«} | j}t|«D]!\}}t|tj«sŒ!nt!| «s t#| «r t%|t'| t d «««}n t%|| «}t)|d«D]}| j+d |«Œ| j+||«Œv| jdk(sŒ‡d| _ Œ|jdd Dcgc]}|j«‘Œc}|z|z}tj|j|«Scc}wcc}wcc}w) NÚtailÚcleanupééÚasÚ )ÚprefixÚÚargsr é)r ÚclonerÚlenrÚreplacerrrÚNAMEÚnew_namer"rÚ isinstancerÚNoder r rrÚreversedÚ insert_child)ÚselfÚnodeÚresultsr rrÚchÚ try_cleanuprÚe_suiteÚEÚcommaÚNÚnew_NÚtargetÚ suite_stmtsrÚstmtÚassignÚchildÚcrs rÚ transformzFixExcept.transform/sï€Øy‰yˆà#*¨6¢?Ó3¡?˜a—‘•  ?ˆÐ3à,3°IÒ,>Ó?Ñ,> br—x‘x•zÐ,>ˆ Ð?Ü&2°;×&?Ñ "ˆM˜7Ü=×)Ñ)Ó*¨aÓ/Ø -× 6Ñ 6°q¸Ð ;‘ E˜1Ø— ‘ œd 4°Ô4Ô5à—6‘6œUŸZ™ZÓ'ä  §¡£¸Ô=EØŸW™W›YFØ$&F”MØ—I‘I˜eÔ$Ø!ŸK™K›MEð #*×"2Ñ"2KÜ#,¨[Ö#9™˜˜4Ü% d¬F¯K©KÕ8Ù!ð$:ô   ”{¤g¨a¤jÜ!'¨´°U¼DÀ»LÓ0IÓ!J™ä!'¨°Ó!6˜ô"*¨+°b°q¨/Ö!:˜Ø×,Ñ,¨Q°Õ6ð";à×(Ñ(¨¨FÖ3Ø—X‘X ”^ð #A–HðI'@ðN(,§}¡}°R°aÑ'8Ó9Ñ'8 !A—G‘G•IÐ'8Ñ9¸KÑGÈ$ÑNˆÜ{‰{˜4Ÿ9™9 hÓ/Ð/ùòW4ùâ?ùòP:s”H:´H?Ç:IN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr?©órrr$s„Ø€Mð€Gó.0rFrN)Ú__doc__r#rÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrErFrÚrKs2ðñõ0ÝÝßD×Dò&ô 90 ×"Ñ"õ90rFlib2to3/fixes/__pycache__/fix_itertools_imports.cpython-312.opt-2.pyc000064400000004762152462633570021510 0ustar00Ë T—çh&ãóP— ddlmZddlmZmZmZGd„dej «Zy)é)Ú fixer_base)Ú BlankLineÚsymsÚtokencó*—eZdZdZde«zZd„Zy)ÚFixItertoolsImportsTzT import_from< 'from' 'itertools' 'import' imports=any > cóÜ—|d}|jtjk(s |js|g}n |j}|ddd…D]ª}|jtj k(r|j }|}n.|jtjk(ry|jd}|j }|dvrd|_|j«Œ…|dvsŒŠ|j«|ddk(rdnd |_Œ¬|jddxs|g}d } |D]7}| r.|jtjk(r|j«Œ3| d z} Œ9|ra|d jtjk(rA|j«j«|r!|d jtjk(rŒA|js t|d d«r |j€|j} t«}| |_|Sy) NÚimportsér)ÚimapÚizipÚifilter)Ú ifilterfalseÚ izip_longestéÚfÚ filterfalseÚ zip_longestTéÿÿÿÿÚvalue)ÚtyperÚimport_as_nameÚchildrenrÚNAMErÚSTARÚremoveÚchangedÚCOMMAÚpopÚgetattrÚparentÚprefixr) ÚselfÚnodeÚresultsr rÚchildÚmemberÚ name_nodeÚ member_nameÚ remove_commaÚps úr9s%ðØGõß5Ñ5ô1˜*×,Ñ,õ1r.lib2to3/fixes/__pycache__/fix_funcattrs.cpython-312.pyc000064400000002216152462633570016750 0ustar00Ë T—çh„ãóJ—dZddlmZddlmZGd„dej «Zy)z3Fix function attribute names (f.func_x -> f.__x__).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixFuncattrsTzß power< any+ trailer< '.' attr=('func_closure' | 'func_doc' | 'func_globals' | 'func_name' | 'func_defaults' | 'func_code' | 'func_dict') > any* > có€—|dd}|jtd|jddz|j¬««y)NÚattréz__%s__é)Úprefix)ÚreplacerÚvaluer )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_funcattrs.pyÚ transformzFixFuncattrs.transforms;€Øv‰˜qÑ!ˆØ ‰ ”T˜8 d§j¡j°° nÑ4Ø!%§¡ô.õ /óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó /rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ9õÝô /:×%Ñ%õ /rlib2to3/fixes/__pycache__/fix_repr.cpython-312.opt-2.pyc000064400000002050152462633570016643 0ustar00Ë T—çheãóP— ddlmZddlmZmZmZGd„dej «Zy)é)Ú fixer_base)ÚCallÚNameÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixReprTz7 atom < '`' expr=any '`' > cóÈ—|dj«}|j|jjk(r t |«}t t d«|g|j¬«S)NÚexprÚrepr)Úprefix)ÚcloneÚtypeÚsymsÚ testlist1rrrr )ÚselfÚnodeÚresultsr s ú//usr/lib64/python3.12/lib2to3/fixes/fix_repr.pyÚ transformzFixRepr.transformsM€Øv‰×$Ñ$Ó&ˆà 9‰9˜Ÿ ™ ×+Ñ+Ò +Ü Ó%ˆDÜ”D˜“L 4 &°·±Ô=Ð=óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„à€Mð€Gó>rrN)ÚrÚ fixer_utilrrrÚBaseFixrrrrÚr s'ðð6õß1Ñ1ô >ˆj× Ñ õ >rlib2to3/fixes/__pycache__/fix_metaclass.cpython-312.pyc000064400000024276152462633570016725 0ustar00Ë T—çh ãó‚—dZddlmZddlmZddlmZmZmZd„Z d„Z d„Z d„Z d „Z d „ZGd „d ej«Zy )a‹Fixer for __metaclass__ = X -> (metaclass=X) methods. The various forms of classef (inherits nothing, inherits once, inherits many) don't parse the same in the CST so we look at ALL classes for a __metaclass__ and if we find one normalize the inherits to all be an arglist. For one-liner classes ('class X: pass') there is no indent/dedent so we normalize those into having a suite. Moving the __metaclass__ into the classdef can also cause the class body to be empty so there is some special casing for that as well. This fixer also tries very hard to keep original indenting and spacing in all those corner cases. é)Ú fixer_base)Útoken)ÚsymsÚNodeÚLeafcó¦—|jD]Â}|jtjk(r t |«cS|jtj k(sŒK|jsŒX|jd}|jtj k(sŒ…|jsŒ’|jd}t|t«sŒ²|jdk(sŒÂyy)zì we have to check the cls_node without changing it. There are two possibilities: 1) clsdef => suite => simple_stmt => expr_stmt => Leaf('__meta') 2) clsdef => simple_stmt => expr_stmt => Leaf('__meta') éÚ __metaclass__TF) ÚchildrenÚtyperÚsuiteÚ has_metaclassÚ simple_stmtÚ expr_stmtÚ isinstancerÚvalue)ÚparentÚnodeÚ expr_nodeÚ left_sides ú4/usr/lib64/python3.12/lib2to3/fixes/fix_metaclass.pyrrs™€ð —”ˆØ 9‰9œŸ ™ Ò "Ü  Ó&Ò &Ø Y‰Yœ$×*Ñ*Ó *¨t¯}«}ØŸ ™  aÑ(ˆIØ~‰~¤§¡Ó/°I×4FÓ4FØ%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:Ùð ð ócó—|jD]!}|jtjk(sŒ!yt |j«D]$\}}|jt j k(sŒ$n td«‚ttjg«}|j|dzdrT|j|dz}|j|j««|j«|j|dzdrŒT|j|«|}y)zf one-line classes don't get a suite in the parse tree so we add one to normalize the tree NzNo class suite and no ':'!é) r r rr Ú enumeraterÚCOLONÚ ValueErrorrÚ append_childÚcloneÚremove)Úcls_noderÚir Ú move_nodes rÚfixup_parse_treer$-sé€ð×!Ô!ˆØ 9‰9œŸ ™ Ó "á ð"ô ˜X×.Ñ.Ö/‰ˆˆ4Ø 9‰9œŸ ™ Ó #Ù ð0ôÐ5Ó6Ð6ô ”—‘˜RÓ €EØ × Ñ ˜A˜a™C˜DÑ !Ø×%Ñ% a¨¡cÑ*ˆ Ø ×ј9Ÿ?™?Ó,Ô-Ø×ÑÔð × Ñ ˜A˜a™C˜DÒ !ð ×ј%Ô Ø Drcóx—t|j«D]$\}}|jtjk(sŒ$ny|j «t tjg«}t tj|g«}|j|drN|j|}|j|j««|j «|j|drŒN|j||«|jdjd}|jdjd} | j|_ y)zÑ if there is a semi-colon all the parts count as part of the same simple_stmt. We just want the __metaclass__ part so we move everything after the semi-colon into its own simple_stmt node Nr )rr r rÚSEMIr rrrrrrÚ insert_childÚprefix) rr"Ú stmt_nodeÚsemi_indrÚnew_exprÚnew_stmtr#Ú new_leaf1Ú old_leaf1s rÚfixup_simple_stmtr/Gs €ô $ I×$6Ñ$6Ö7‰ˆ$Ø 9‰9œŸ ™ Ó "Ù ð8ð à‡KK„MÜ”D—N‘N BÓ'€HÜ”D×$Ñ$ x jÓ1€HØ × Ñ ˜X˜YÑ 'Ø×&Ñ& xÑ0ˆ Ø×јiŸo™oÓ/Ô0Ø×ÑÔð × Ñ ˜X˜YÒ 'ð ×ј˜8Ô$Ø×!Ñ! !Ñ$×-Ñ-¨aÑ0€IØ×"Ñ" 1Ñ%×.Ñ.¨qÑ1€IØ ×'Ñ'€IÕrcó®—|jrI|jdjtjk(r|jdj «yyy)Néÿÿÿÿ)r r rÚNEWLINEr )rs rÚremove_trailing_newliner3_s@€Ø ‡}‚}˜Ÿ™ rÑ*×/Ñ/´5·=±=Ò@Ø ‰ bÑ× Ñ Õ"ðA€}rc#ó6K—|jD]!}|jtjk(sŒ!n t d«‚t t |j««D]¹\}}|jtjk(sŒ$|jsŒ1|jd}|jtjk(sŒ^|jsŒk|jd}t|t«sŒ‹|jdk(sŒ›t|||«t|«|||f–—Œ»y­w)NzNo class suite!r r )r r rr rÚlistrrrrrrr/r3)r!rr"Ú simple_noderÚ left_nodes rÚ find_metasr8dsàèø€à×!Ô!ˆØ 9‰9œŸ ™ Ó "Ù ð"ôÐ*Ó+Ð+ôœy¨¯©Ó7Ö8‰ˆˆ;Ø × Ñ œt×/Ñ/Ó /°K×4HÓ4HØ#×,Ñ,¨QÑ/ˆIØ~‰~¤§¡Ó/°I×4FÓ4Fà%×.Ñ.¨qÑ1 ܘi¬Õ.Ø!Ÿ™¨?Ó:ä% d¨A¨{Ô;Ü+¨KÔ8Ø  KÐ0Ó0ñ9ùs/‚-D°AD D ,DÂ: DÃDÃ'DÃ7"Dcó~—|jddd…}|r1|j«}|jtjk(rn|rŒ1|rv|j«}t |t «r1|jtjk7r|jrd|_y|j|jddd…«|rŒuyy)z› If an INDENT is followed by a thing with a prefix then nuke the prefix Otherwise we get in trouble when removing __metaclass__ at suite start Nr1Ú) r Úpopr rÚINDENTrrÚDEDENTr(Úextend)r Úkidsrs rÚ fixup_indentr@{s”€ð >‰>™$˜B˜$Ñ €Dá Øx‰x‹zˆØ 9‰9œŸ ™ Ò $Ø ò ñ Øx‰x‹zˆÜ dœDÔ ! d§i¡i´5·<±<Ò&?Ø{Š{Ø ” Ø à K‰K˜Ÿ ™ ¡d¨ dÑ+Ô ,ô rcó—eZdZdZdZd„Zy)Ú FixMetaclassTz classdef cóΗt|«syt|«d}t|«D]\}}}|}|j«Œ|jdj }t |j«dk(r†|jdj tjk(r|jd}n4|jdj«} ttj| g«}|jd|«nét |j«dk(r-ttjg«}|jd|«n¤t |j«dk(rttjg«}|jdttjd««|jd|«|jdttj d««n t#d «‚|jdjd} d | _| j&} |jr1|j)ttj*d ««d | _nd | _|jd} | j tj,k(sJ‚d | jd_d | jd_|j)|«t/«|js^|j«t|d«} | | _|j)| «|j)ttj0d««yt |j«dkDrŸ|jdj tj2k(rt|jdj tj4k(rIt|d«} |jd| «|jdttj0d««yyyy)Nr éééérÚ)Ú(zUnexpected class definitionÚ metaclassÚ,Ú r:rÚpassÚ éþÿÿÿr1)rr$r8r r r ÚlenrÚarglistrrÚ set_childr'rrÚRPARÚLPARrrr(rÚCOMMArr@r2r<r=)ÚselfrÚresultsÚlast_metaclassr r"ÚstmtÚ text_typerQrÚmeta_txtÚorig_meta_prefixrÚ pass_leafs rÚ transformzFixMetaclass.transform˜s€Ü˜TÔ"Ø ä˜ÔðˆÜ(¨Ö.‰NˆE1dØ!ˆNØ K‰KMð/ð—M‘M !Ñ$×)Ñ)ˆ ô ˆt}‰}Ó  Ò "ð}‰}˜QÑ×$Ñ$¬¯ © Ò4ØŸ-™-¨Ñ*’🙠qÑ)×/Ñ/Ó1ÜœtŸ|™|¨f¨XÓ6Ø—‘˜q 'Õ*Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a Õ )Ü —‘Ó  1Ò $ôœ4Ÿ<™<¨Ó,ˆGØ × Ñ ˜a¤¤e§j¡j°#Ó!6Ô 7Ø × Ñ ˜a Ô )Ø × Ñ ˜a¤¤e§j¡j°#Ó!6Õ 7äÐ:Ó;Ð ;ð"×*Ñ*¨1Ñ-×6Ñ6°qÑ9ˆØ$ˆŒØ#Ÿ?™?Ðà × Ò Ø × Ñ ¤¤e§k¡k°3Ó!7Ô 8Ø!ˆHOà ˆHŒOð#×+Ñ+¨AÑ.ˆ Ø~‰~¤§¡Ò/Ð/Ð/Ø')ˆ ×ј1ÑÔ$Ø')ˆ ×ј1ÑÔ$à×ј^Ô,äUÔð~Š~à L‰LŒNܘY¨Ó/ˆIØ/ˆIÔ Ø × Ñ ˜iÔ (Ø × Ñ œd¤5§=¡=°$Ó7Õ 8ä —‘Ó  1Ò $Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9Ø—.‘. Ñ$×)Ñ)¬U¯\©\Ò9ä˜Y¨Ó/ˆIØ × Ñ ˜r 9Ô -Ø × Ñ ˜r¤4¬¯ © °tÓ#<Õ =ð :ð:ð%rN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr^©rrrBrB‘s„Ø€Mð€GóL>rrBN)Ú__doc__r:rÚpygramrÚ fixer_utilrrrrr$r/r3r8r@ÚBaseFixrBrdrrÚrisJðñõ(Ýß)Ñ)òò&ò4(ò0#ò 1ò.-ô,S>:×%Ñ%õS>rlib2to3/fixes/__pycache__/fix_zip.cpython-312.opt-2.pyc000064400000003162152462633570016502 0ustar00Ë T—çh ãóh— ddlmZddlmZddlmZddlmZm Z m Z Gd„dej«Z y)é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚin_special_contextcó—eZdZdZdZdZd„Zy)ÚFixZipTzN power< 'zip' args=trailer< '(' [any] ')' > [trailers=trailer*] > zfuture_builtins.zipcó¼—|j|«ryt|«ry|dj«}d|_g}d|vr.|dDcgc]}|j«‘Œ}}|D] }d|_Œ t t j td«|gd¬«}t t j td«t|g«g|z«}|j|_|Scc}w)NÚargsÚÚtrailersÚzip)ÚprefixÚlist) Ú should_skiprÚclonerrÚsymsÚpowerrr)ÚselfÚnodeÚresultsr rÚnÚnews ú./usr/lib64/python3.12/lib2to3/fixes/fix_zip.pyÚ transformzFixZip.transformsÍ€Ø × Ñ ˜DÔ !Ø ä ˜dÔ #Øàv‰×$Ñ$Ó&ˆØˆŒ àˆØ ˜Ñ Ø+2°:Ò+>Ó?Ñ+> a˜Ÿ™ Ð+>ˆHÐ?ÛØ•ðô”4—:‘:¤ U£ ¨TÐ2¸2Ô>ˆÜ”4—:‘:¤ V£ ¬g°s°e«nÐ=ÀÑHÓIˆØ—[‘[ˆŒ ؈ ùò@sÁCN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr©órr r s„à€Mð€Gð $€Gór$r N) r rÚpytreerÚpygramrrÚ fixer_utilrrrÚConditionalFixr r#r$rÚr)s-ððõÝÝ+ß:Ñ:ôˆZ× &Ñ &õr$lib2to3/fixes/__pycache__/__init__.cpython-312.opt-2.pyc000064400000000220152462633570016561 0ustar00Ë T—çh/ãó—y)N©róú//usr/lib64/python3.12/lib2to3/fixes/__init__.pyÚrsñrlib2to3/fixes/__pycache__/fix_exec.cpython-312.opt-2.pyc000064400000002626152462633570016630 0ustar00Ë T—çhÓãóP— ddlmZddlmZmZmZGd„dej «Zy)é)Ú fixer_base)ÚCommaÚNameÚCallcó—eZdZdZdZd„Zy)ÚFixExecTzx exec_stmt< 'exec' a=any 'in' b=any [',' c=any] > | exec_stmt< 'exec' (not atom<'(' [any] ')'>) a=any > cóŒ—|j}|d}|jd«}|jd«}|j«g}d|d_|)|j t «|j«g«|)|j t «|j«g«t td«||j¬«S)NÚaÚbÚcÚéÚexec)Úprefix)ÚsymsÚgetÚclonerÚextendrrr)ÚselfÚnodeÚresultsrr r r Úargss ú//usr/lib64/python3.12/lib2to3/fixes/fix_exec.pyÚ transformzFixExec.transforms›€ày‰yˆØ C‰LˆØ K‰K˜Ó ˆØ K‰K˜Ó ˆØ—‘“ ˆ{ˆØˆˆQ‰ŒØ ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -Ø ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -ä”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€Gó r$s'ððõß*Ñ*ô<ˆj× Ñ õ Exception.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)ÚFixStandarderrorTz- 'StandardError' có0—td|j¬«S)NÚ Exception)Úprefix)rr )ÚselfÚnodeÚresultss ú8/usr/lib64/python3.12/lib2to3/fixes/fix_standarderror.pyÚ transformzFixStandarderror.transforms€ÜK¨¯ © Ô4Ð4óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rr s„Ø€Mð€Gó5rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrr Úrs$ðñ,õÝô5z×)Ñ)õ5rlib2to3/fixes/__pycache__/fix_renames.cpython-312.opt-2.pyc000064400000005337152462633570017340 0ustar00Ë T—çh­ãóh— ddlmZddlmZmZdddiiZiZd„Zd„ZGd„d ej«Z y ) é)Ú fixer_base)ÚNameÚ attr_chainÚsysÚmaxintÚmaxsizecóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapÚrepr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_renames.pyÚ alternatesrs"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc #óàK—ttj««D]J\}}t|j««D])\}}|t||f<d|›d|›d|›d–—d|›d|›d–—Œ+ŒLy­w)Nz3 import_from< 'from' module_name=z, 'import' ( attr_name=z | import_as_name< attr_name=z! 'as' any >) > z& power< module_name=z trailer< '.' attr_name=z > any* > )ÚlistÚMAPPINGÚitemsÚLOOKUP)ÚmoduleÚreplaceÚold_attrÚnew_attrs rÚ build_patternrslèø€ä¤§ ¡ £Ö0‰ˆÜ"& w§}¡}£Ö"7Ñ ˆHhØ)1ŒFF˜HÐ%Ò &ò ¢ª8ð5ó 5ò  ¢ð+ó +ñ#8ñ1ùs‚A,A.cóX‡—eZdZdZdj e««ZdZˆfd„Zd„Z ˆxZ S)Ú FixRenamesTr Úprecóz•‡—tt| Љ|«}|r!tˆfd„t |d«D««ry|Sy)Nc3ó.•K—|] }‰|«–—Œy­w)N©)Ú.0ÚobjÚmatchs €rÚ z#FixRenames.match..5søèø€ÐDÑ)C #‘5˜—:Ñ)CùsƒÚparentF)Úsuperrr&Úanyr)ÚselfÚnodeÚresultsr&Ú __class__s @€rr&zFixRenames.match1s;ù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ÜÓD¬°D¸(Ô)CÓDÔDØØˆNØrcóÞ—|jd«}|jd«}|rI|rFt|j|jf}|jt ||j ¬««yyy)NÚ module_nameÚ attr_name)Úprefix)ÚgetrÚvaluerrr2)r+r,r-Úmod_namer1rs rÚ transformzFixRenames.transform>s^€Ø—;‘;˜}Ó-ˆØ—K‘K  Ó,ˆ ñ ™ ܘxŸ~™~¨y¯©Ð?Ñ@ˆHØ × Ñ œd 8°I×4DÑ4DÔEÕ Fð"ˆ8r) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibler rÚPATTERNÚorderr&r6Ú __classcell__)r.s@rrr*s(ø„Ø€MØh‰h‘}“Ó'€Gà €EôöGrrN) ÚrÚ fixer_utilrrrrrrÚBaseFixrr#rrÚrAsFððõß)à H˜yÐ)ð €à €ò4ò+ô*G×#Ñ#õGrlib2to3/fixes/__pycache__/fix_isinstance.cpython-312.opt-2.pyc000064400000003753152462633570020046 0ustar00Ë T—çhHãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)Útokencó—eZdZdZdZdZd„Zy)Ú FixIsinstanceTz˜ power< 'isinstance' trailer< '(' arglist< any ',' atom< '(' args=testlist_gexp< any+ > ')' > > ')' > > écóЗt«}|d}|j}g}t|«}|D]¼\}} | jtj k(rP| j |vrB|t|«dz ksŒC||dzjtjk(sŒgt|«Œs|j| «| jtj k(sŒ¢|j| j «Œ¾|r#|djtjk(r|d=t|«dk(r5|j} | j|d_ | j|d«y||dd|j«y)NÚargsééÿÿÿÿé)ÚsetÚchildrenÚ enumerateÚtyperÚNAMEÚvalueÚlenÚCOMMAÚnextÚappendÚaddÚparentÚprefixÚreplaceÚchanged) ÚselfÚnodeÚresultsÚnames_insertedÚtestlistr Únew_argsÚiteratorÚidxÚargÚatoms ú5/usr/lib64/python3.12/lib2to3/fixes/fix_isinstance.pyÚ transformzFixIsinstance.transforms€Ü›ˆØ˜6‘?ˆØ× Ñ ˆØˆÜ˜T“?ˆÛ ‰HˆCØx‰xœ5Ÿ:™:Ò%¨#¯)©)°~Ñ*EØœ˜T› Q™Ó&¨4°°a±©=×+=Ñ+=ÄÇÁÓ+Lܘ”NØà—‘ Ô$Ø—8‘8œuŸz™zÓ)Ø"×&Ñ& s§y¡yÕ1ð!ñ ˜ ™ ×)Ñ)¬U¯[©[Ò8ؘ Ü ˆx‹=˜AÒ Ø—?‘?ˆDØ!%§¡ˆHQ‰KÔ Ø L‰L˜ !™Õ %àˆD‘ˆGØ L‰LNóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr'©r(r&rrs„Ø€Mð€Gð€Iór(rN)ÚrÚ fixer_utilrÚBaseFixrr/r(r&Úr3s$ððõÝô$J×&Ñ&õ$r(lib2to3/fixes/__pycache__/fix_long.cpython-312.opt-1.pyc000064400000001506152462633570016636 0ustar00Ë T—çhÜãóJ—dZddlmZddlmZGd„dej «Zy)z/Fixer that turns 'long' into 'int' everywhere. é)Ú fixer_base)Úis_probably_builtincó—eZdZdZdZd„Zy)ÚFixLongTz'long'cóJ—t|«rd|_|j«yy)NÚint)rÚvalueÚchanged)ÚselfÚnodeÚresultss ú//usr/lib64/python3.12/lib2to3/fixes/fix_long.pyÚ transformzFixLong.transforms€Ü ˜tÔ $؈DŒJØ L‰LNð %óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€MØ€GórrN)Ú__doc__Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ðñõÝ2ôˆj× Ñ õrlib2to3/fixes/__pycache__/fix_repr.cpython-312.opt-1.pyc000064400000002144152462633570016646 0ustar00Ë T—çheãóR—dZddlmZddlmZmZmZGd„dej«Zy)z/Fixer that transforms `xyzzy` into repr(xyzzy).é)Ú fixer_base)ÚCallÚNameÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixReprTz7 atom < '`' expr=any '`' > cóÈ—|dj«}|j|jjk(r t |«}t t d«|g|j¬«S)NÚexprÚrepr)Úprefix)ÚcloneÚtypeÚsymsÚ testlist1rrrr )ÚselfÚnodeÚresultsr s ú//usr/lib64/python3.12/lib2to3/fixes/fix_repr.pyÚ transformzFixRepr.transformsM€Øv‰×$Ñ$Ó&ˆà 9‰9˜Ÿ ™ ×+Ñ+Ò +Ü Ó%ˆDÜ”D˜“L 4 &°·±Ô=Ð=óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„à€Mð€Gó>rrN) Ú__doc__ÚrÚ fixer_utilrrrÚBaseFixrrrrÚr!s'ðñ6õß1Ñ1ô >ˆj× Ñ õ >rlib2to3/fixes/__pycache__/fix_throw.cpython-312.opt-1.pyc000064400000004617152462633570017050 0ustar00Ë T—çh.ãór—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z Gd„dej«Z y) zÖFixer for generator.throw(E, V, T). g.throw(E) -> g.throw(E) g.throw(E, V) -> g.throw(E(V)) g.throw(E, V, T) -> g.throw(E(V).with_traceback(T)) g.throw("foo"[, V[, T]]) will warn about string exceptions.é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚArgListÚAttrÚis_tuplecó—eZdZdZdZd„Zy)ÚFixThrowTzÉ power< any trailer< '.' 'throw' > trailer< '(' args=arglist< exc=any ',' val=any [',' tb=any] > ')' > > | power< any trailer< '.' 'throw' > trailer< '(' exc=any ')' > > có¬—|j}|dj«}|jtjur|j |d«y|j d«}|€y|j«}t|«r+|jddDcgc]}|j«‘Œ}}n d|_ |g}|d}d|vry|dj«} d| _ t||«} t| td ««t| g«gz} |jtj |j"| ««y|jt||««ycc}w) NÚexcz+Python 3 does not support string exceptionsÚvalééÿÿÿÿÚÚargsÚtbÚwith_traceback)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertÚgetr ÚchildrenÚprefixrr rrÚreplacerÚNodeÚpower) ÚselfÚnodeÚresultsrrrÚcrÚ throw_argsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_throw.pyÚ transformzFixThrow.transforms)€Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ñ #Ø × Ñ  Ð&SÔ TØ ðk‰k˜%Ó ˆØ ˆ;Ø ài‰i‹kˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà˜V‘_ˆ à 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIäS˜$“ˆAܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGØ × Ñ œvŸ{™{¨4¯:©:°wÓ?Õ @à × Ñ œt C¨›Õ /ùò;sÂEN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©ór(r r s„Ø€Mð€Gó0r0r N)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r/r0r(Úr5s-ðñ?õÝÝß<Õ<ô(0ˆz×!Ñ!õ(0r0lib2to3/fixes/__pycache__/fix_sys_exc.cpython-312.opt-2.pyc000064400000003467152462633570017365 0ustar00Ë T—çh ãó`— ddlmZddlmZmZmZmZmZmZm Z Gd„dej«Z y)é)Ú fixer_base)ÚAttrÚCallÚNameÚNumberÚ SubscriptÚNodeÚsymscóT—eZdZgd¢ZdZddj d„eD««zZd„Zy)Ú FixSysExc)Úexc_typeÚ exc_valueÚ exc_tracebackTzN power< 'sys' trailer< dot='.' attribute=(%s) > > Ú|c#ó&K—|] }d|z–—Œ y­w)z'%s'N©)Ú.0Úes ú2/usr/lib64/python3.12/lib2to3/fixes/fix_sys_exc.pyÚ zFixSysExc.sèø€Ð:±¨A˜V aZ±ùs‚có —|dd}t|jj|j««}t t d«|j ¬«}tt d«|«}|dj |djd_|jt|««ttj||j ¬«S)NÚ attributeéÚexc_info)ÚprefixÚsysÚdoté)rrÚindexÚvaluerrrrÚchildrenÚappendrr r Úpower)ÚselfÚnodeÚresultsÚsys_attrrÚcallÚattrs rÚ transformzFixSysExc.transformsœ€Ø˜;Ñ'¨Ñ*ˆÜt—}‘}×*Ñ*¨8¯>©>Ó:Ó;ˆä”D˜Ó$¨X¯_©_Ô=ˆÜ”D˜“K Ó&ˆØ%,¨U¡^×%:Ñ%:ˆˆQ‰×јÑÔ"Ø ‰ ”I˜eÓ$Ô%Ü”D—J‘J ¨T¯[©[Ô9Ð9óN)Ú__name__Ú __module__Ú __qualname__rÚ BM_compatibleÚjoinÚPATTERNr*rr+rr r s/„â9€HØ€Mðà—H‘HÑ:±Ó:Ó:ñ;€Gó:r+r N) ÚrÚ fixer_utilrrrrrr r ÚBaseFixr rr+rÚr5s*ððõßH×HÑHô: ×"Ñ"õ:r+lib2to3/fixes/__pycache__/fix_filter.cpython-312.opt-2.pyc000064400000006114152462633570017165 0ustar00Ë T—çhÍ ãóp— ddlmZddlmZddlmZddlmZm Z m Z m Z m Z Gd„dej«Zy)é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚListCompÚin_special_contextÚ parenthesizecó—eZdZdZdZdZd„Zy)Ú FixFilterTaV filter_lambda=power< 'filter' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'filter' trailer< '(' arglist< none='None' ',' seq=any > ')' > [extra_trailers=trailer*] > | power< 'filter' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.filtercó—|j|«ryg}d|vr)|dD]!}|j|j««Œ#d|vrÔ|jd«j«}|jt j k(rd|_t|«}t|jd«j«|jd«j«|jd«j«|«}tt j|g|zd¬«}nÞd|vr[ttd «td «|d j«td ««}tt j|g|zd¬«}nt|«ry|d j«}tt jtd «|gd¬«}tt jtd «t|g«g|z«}d|_|j|_|S)NÚextra_trailersÚ filter_lambdaÚxpÚÚfpÚit)ÚprefixÚnoneÚ_fÚseqÚargsÚfilterÚlist)Ú should_skipÚappendÚcloneÚgetÚtypeÚsymsÚtestrr rrÚpowerrr r)ÚselfÚnodeÚresultsÚtrailersÚtrÚnewrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_filter.pyÚ transformzFixFilter.transform:s¯€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ˜gÑ %Ø—‘˜TÓ"×(Ñ(Ó*ˆBØw‰wœ$Ÿ)™)Ò#Ø” Ü! "Ó%ä˜7Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4°bó:ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cà wÑ Üœ4 ›:Ü ›:Ø" 5™>×/Ñ/Ó1Ü ›:ó'ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cô" $Ô'Øà˜6‘?×(Ñ(Ó*ˆDÜ”t—z‘z¤D¨£N°DÐ#9À"ÔEˆCÜ”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr*©r+r)r r s„Ø€Mð€Gð<'€Gó$r+r N)rrÚpytreerÚpygramrr Ú fixer_utilrrrr r ÚConditionalFixr r2r+r)Úr7s/ðð õÝÝ+ßRÕRôG ×)Ñ)õGr+lib2to3/fixes/__pycache__/fix_apply.cpython-312.opt-2.pyc000064400000005156152462633570017032 0ustar00Ë T—çh* ãóh— ddlmZddlmZddlmZddlmZmZmZGd„dej«Z y)é)Úpytree)Útoken)Ú fixer_base)ÚCallÚCommaÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixApplyTa. power< 'apply' trailer< '(' arglist< (not argument ')' > > cóä—|j}|d}|d}|jd«}|r?|j|jjk(r|jdj dvry|r@|j|jjk(r|jdj dk(ry|j }|j«}|jtj|jfvrN|j|jk7s*|jdjtjk(r t|«}d|_|j«}d|_||j«}d|_tjtj d «|g}|H|j#t%«tjtjd«|g«d |d_t'|||¬ «S) NÚfuncÚargsÚkwdsé>Ú*ú**réþÿÿÿÚrÚ )Úprefix)ÚsymsÚgetÚtypeÚargumentÚchildrenÚvaluerÚclonerÚNAMEÚatomÚpowerÚ DOUBLESTARrrÚLeafÚSTARÚextendrr) ÚselfÚnodeÚresultsrr r rrÚ l_newargss ú0/usr/lib64/python3.12/lib2to3/fixes/fix_apply.pyÚ transformzFixApply.transforms“€Øy‰yˆàv‰ˆØv‰ˆØ{‰{˜6Ó"ˆñ Ø— ‘ ˜TŸY™Y×/Ñ/Ò/Ø— ‘ ˜aÑ ×&Ñ&¨+Ñ5ØÙ T—Y‘Y $§)¡)×"4Ñ"4Ò4Ø—]‘] 1Ñ%×+Ñ+¨tÒ3Ø Ø—‘ˆØz‰z‹|ˆØ I‰IœeŸj™j¨$¯)©)Ð4Ñ 4Ø Y‰Y˜$Ÿ*™*Ò $Ø ]‰]˜2Ñ × #Ñ #¤u×'7Ñ'7Ò 7ä Ó%ˆD؈Œ Øz‰z‹|ˆØˆŒ Ø Ð Ø—:‘:“<ˆD؈DŒKÜ—[‘[¤§¡¨SÓ1°4Ð8ˆ Ø Ð Ø × Ñ œe›gÜ$Ÿk™k¬%×*:Ñ*:¸DÓAØ"ð$ô %ð$'ˆIb‰MÔ ôD˜)¨FÔ3Ð3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©r*r(r r s„Ø€Mð €Gó%4r*r N) rrÚpgen2rrÚ fixer_utilrrrÚBaseFixr r0r*r(Úr4s-ðð9õ ÝÝß2Ñ2ô64ˆz×!Ñ!õ64r*lib2to3/fixes/__pycache__/fix_apply.cpython-312.opt-1.pyc000064400000005304152462633570017024 0ustar00Ë T—çh* ãój—dZddlmZddlmZddlmZddlmZmZm Z Gd„dej«Z y) zIFixer for apply(). This converts apply(func, v, k) into (func)(*v, **k).é)Úpytree)Útoken)Ú fixer_base)ÚCallÚCommaÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixApplyTa. power< 'apply' trailer< '(' arglist< (not argument ')' > > cóä—|j}|d}|d}|jd«}|r?|j|jjk(r|jdj dvry|r@|j|jjk(r|jdj dk(ry|j }|j«}|jtj|jfvrN|j|jk7s*|jdjtjk(r t|«}d|_|j«}d|_||j«}d|_tjtj d «|g}|H|j#t%«tjtjd«|g«d |d_t'|||¬ «S) NÚfuncÚargsÚkwdsé>Ú*ú**réþÿÿÿÚrÚ )Úprefix)ÚsymsÚgetÚtypeÚargumentÚchildrenÚvaluerÚclonerÚNAMEÚatomÚpowerÚ DOUBLESTARrrÚLeafÚSTARÚextendrr) ÚselfÚnodeÚresultsrr r rrÚ l_newargss ú0/usr/lib64/python3.12/lib2to3/fixes/fix_apply.pyÚ transformzFixApply.transforms“€Øy‰yˆàv‰ˆØv‰ˆØ{‰{˜6Ó"ˆñ Ø— ‘ ˜TŸY™Y×/Ñ/Ò/Ø— ‘ ˜aÑ ×&Ñ&¨+Ñ5ØÙ T—Y‘Y $§)¡)×"4Ñ"4Ò4Ø—]‘] 1Ñ%×+Ñ+¨tÒ3Ø Ø—‘ˆØz‰z‹|ˆØ I‰IœeŸj™j¨$¯)©)Ð4Ñ 4Ø Y‰Y˜$Ÿ*™*Ò $Ø ]‰]˜2Ñ × #Ñ #¤u×'7Ñ'7Ò 7ä Ó%ˆD؈Œ Øz‰z‹|ˆØˆŒ Ø Ð Ø—:‘:“<ˆD؈DŒKÜ—[‘[¤§¡¨SÓ1°4Ð8ˆ Ø Ð Ø × Ñ œe›gÜ$Ÿk™k¬%×*:Ñ*:¸DÓAØ"ð$ô %ð$'ˆIb‰MÔ ôD˜)¨FÔ3Ð3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©r*r(r r s„Ø€Mð €Gó%4r*r N) Ú__doc__rrÚpgen2rrÚ fixer_utilrrrÚBaseFixr r0r*r(Úr5s-ðñ9õ ÝÝß2Ñ2ô64ˆz×!Ñ!õ64r*lib2to3/fixes/__pycache__/fix_import.cpython-312.opt-1.pyc000064400000010234152462633570017207 0ustar00Ë T—çh¸ ãóp—dZddlmZddlmZmZmZmZddlm Z m Z m Z d„Z Gd„dej«Zy ) zÞFixer for import statements. If spam is being imported from the local directory, this import: from spam import eggs Becomes: from .spam import eggs And this import: import spam Becomes: from . import spam é)Ú fixer_baseé)ÚdirnameÚjoinÚexistsÚsep)Ú FromImportÚsymsÚtokenc#óVK—|g}|r|j«}|jtjk(r|j–—nÙ|jt j k(r6dj|jDcgc]}|j‘Œc}«–—n†|jt jk(r|j|jd«nJ|jt jk(r"|j|jddd…«n td«‚|rŒyycc}w­w)zF Walks over all the names imported in a dotted_as_names node. ÚrNéþÿÿÿzunknown node type)ÚpopÚtyper ÚNAMEÚvaluer Ú dotted_namerÚchildrenÚdotted_as_nameÚappendÚdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnodeÚchs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_import.pyÚtraverse_importsrs×èø€ðˆg€GÚ Ø{‰{‹}ˆØ 9‰9œŸ ™ Ò "Ø—*‘*Ó Ø Y‰Yœ$×*Ñ*Ò *Ø—'‘'¨d¯mªmÓ<©m¨˜2Ÿ8›8¨mÑ<Ó=Ó =Ø Y‰Yœ$×-Ñ-Ò -Ø N‰N˜4Ÿ=™=¨Ñ+Õ ,Ø Y‰Yœ$×.Ñ.Ò .Ø N‰N˜4Ÿ=™=©¨2¨Ñ.Õ /ä Ð!4Ó5Ð 5õ ùò =ùs‚A9D)Á;D$ÂBD)Ä"D)có2‡—eZdZdZdZˆfd„Zd„Zd„ZˆxZS)Ú FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cóT•—tt| ||«d|jv|_y)NÚabsolute_import)Úsuperr!Ú start_treeÚfuture_featuresÚskip)ÚselfÚtreeÚnameÚ __class__s €rr%zFixImport.start_tree/s&ø€Ü Œi˜Ñ)¨$°Ô5Ø%¨×)=Ñ)=Ð=ˆ ócóô—|jry|d}|jtjk(rit |d«s|j d}t |d«sŒ|j |j«r%d|jz|_|j«yyd}d}t|«D]}|j |«rd}Œd}Œ|r|r|j|d«ytd|g«}|j|_ |S)NÚimprrÚ.FTz#absolute and local imports together) r'rr Ú import_fromÚhasattrrÚprobably_a_local_importrÚchangedrÚwarningr Úprefix)r(rÚresultsr.Ú have_localÚ have_absoluteÚmod_nameÚnews rÚ transformzFixImport.transform3sè€Ø 9Š9Ø Øe‰nˆà 9‰9œ×(Ñ(Ò (ô ˜c 7Ô+Ø—l‘l 1‘oô˜c 7Õ+à×+Ñ+¨C¯I©IÔ6Ø #§)¡)™O” Ø— ‘ • ð7ðˆJØ!ˆMÜ,¨SÖ1Ø×/Ñ/°Ô9Ø!%‘Jà$(‘Mð 2ñ Ùð—L‘L Ð'LÔMØä˜S 3 %Ó(ˆCØŸ™ˆCŒJ؈Jr,có—|jd«ry|jdd«d}t|j«}t ||«}t t t|«d««sydt ddd d fD]}t ||z«sŒy y) Nr/Férz __init__.pyz.pyz.pycz.soz.slz.pydT)Ú startswithÚsplitrÚfilenamerrr)r(Úimp_nameÚ base_pathÚexts rr2z!FixImport.probably_a_local_importUs†€Ø × Ñ ˜sÔ #àØ—>‘> # qÓ)¨!Ñ,ˆÜ˜DŸM™MÓ*ˆ ܘ HÓ-ˆ ô”dœ7 9Ó-¨}Ó=Ô>ØØœ3 ¨¨u°fÓ=ˆCÜi #‘oÕ&Ùð>ðr,) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr%r;r2Ú __classcell__)r+s@rr!r!&sø„Ø€Mð€Gô >ò öDr,r!N)Ú__doc__r rÚos.pathrrrrÚ fixer_utilr r r rÚBaseFixr!©r,rÚrOs2ðñ õß.Ó.ß0Ñ0ò6ô&= ×"Ñ"õ=r,lib2to3/fixes/__pycache__/fix_reduce.cpython-312.opt-2.pyc000064400000002105152462633570017143 0ustar00Ë T—çhEãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base©Ú touch_importcó—eZdZdZdZdZd„Zy)Ú FixReduceTÚpreai power< 'reduce' trailer< '(' arglist< ( (not(argument) any ',' not(argument > có—tdd|«y)NÚ functoolsÚreducer)ÚselfÚnodeÚresultss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reduce.pyÚ transformzFixReduce.transform"s€Ü[ (¨DÕ1óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrrs„à€MØ €Eð €Gó2rrN)Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ððõ Ý+ô2 ×"Ñ"õ2rlib2to3/fixes/__pycache__/fix_tuple_params.cpython-312.opt-1.pyc000064400000017226152462633570020401 0ustar00Ë T—çh½ãóš—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z d„Z Gd„dej«Zd „Zd „Zgd fd „Zd „Zy )a:Fixer for function definitions with tuple parameters. def func(((a, b), c), d): ... -> def func(x, d): ((a, b), c) = x ... It will also support lambdas: lambda (x, y): x + y -> lambda t: t[0] + t[1] # The parens are a syntax error in Python 3 lambda (x): x + y -> lambda x: x + y é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚNameÚNewlineÚNumberÚ SubscriptÚsymscóŽ—t|tj«xr*|jdjt j k(S)Né)Ú isinstancerÚNodeÚchildrenÚtyperÚSTRING)Ústmts ú7/usr/lib64/python3.12/lib2to3/fixes/fix_tuple_params.pyÚ is_docstringrs5€Ü dœFŸK™KÓ (ò 1Ø =‰=˜Ñ × Ñ ¤E§L¡LÑ 0ð1ócó$—eZdZdZdZdZd„Zd„Zy)ÚFixTupleParamséTa funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > cóð‡‡ ‡ —d|vr‰j||«SgŠ |d}|d}|djdjtjk(r)d}|djdj }t «Š n(d}d}tjtjd«Š d ˆ ˆ ˆfd „ }|jtjk(r ||«ne|jtjk(rHt|j«D]0\}} | jtjk(sŒ$|| |dkD¬ «Œ2‰ sy‰ D] } |d| _ Œ|} |dk(r d ‰ d_n*t|dj|«r|‰ d_|dz} ‰ D] } |d| _ Œ‰ |dj| | t!| dz| t#‰ «zdz«D]}||dj|_Œ|dj%«y) NÚlambdaÚsuiteÚargsr érz; ÚcóT•—t‰j««}|j«}d|_t ||j««}|rd|_|j |«‰j tjtj|‰j«g««y)NrÚ ) rÚnew_nameÚcloneÚprefixrÚreplaceÚappendrrr Ú simple_stmt)Ú tuple_argÚ add_prefixÚnÚargrÚendÚ new_linesÚselfs €€€rÚ handle_tuplez.FixTupleParams.transform..handle_tupleCsø€ÜT—]‘]“_Ó%ˆAØ—/‘/Ó#ˆC؈CŒJܘ#˜qŸw™w›yÓ)ˆDÙØ”Ø × Ñ ˜aÔ Ø × Ñ œVŸ[™[¬×)9Ñ)9Ø*.°· ± ³ Ð)<ó>õ ?r)r)r!)F)Útransform_lambdarrrÚINDENTÚvaluerrÚLeafr ÚtfpdefÚ typedargslistÚ enumerateÚparentr$rÚrangeÚlenÚchanged)r.ÚnodeÚresultsrrÚstartÚindentr/Úir+ÚlineÚafterr,r-s` @@rÚ transformzFixTupleParams.transform.sßú€Ø wÑ Ø×(Ñ(¨¨wÓ7Ð 7àˆ Ø˜Ñ ˆØv‰ˆð ‰8× Ñ ˜QÑ × $Ñ $¬¯ © Ò 4؈Eؘ1‘X×&Ñ& qÑ)×/Ñ/ˆFÜ“)‰CàˆE؈FÜ—+‘+œeŸl™l¨BÓ/ˆC÷ ?ð 9‰9œŸ ™ Ò #Ù ˜Õ Ø Y‰Yœ$×,Ñ,Ò ,Ü# D§M¡MÖ2‘3Ø—8‘8œtŸ{™{Ó*ñ! °!°a±%Ö9ð 3ñ Ø óˆDØ ™(ˆDKððˆØ AŠ:Ø"%ˆIa‰LÕ Ü ˜% ™(×+Ñ+¨EÑ2Ô 3Ø"(ˆIa‰LÔ Ø˜A‘IˆEãˆDØ ™(ˆDKðà)2ˆˆa‰×ј% Ð&Üu˜Q‘w ¤c¨)£nÑ 4°QÑ 6Ö7ˆAØ*0ˆE!‰H× Ñ ˜aÑ Õ 'ð8à ˆa‰×ÑÕrcó —|d}|d}t|d«}|jtjk(r)|j «}d|_|j |«yt|«}t|«}|jt|««}t|d¬«} |j | j ««|j«D]±} | jtjk(sŒ!| j|vsŒ0|| jD cgc]} | j «‘Œ} } tjt j"| j «g| z«} | j | _| j | «Œ³ycc} w)NrÚbodyÚinnerr!)r$)Ú simplify_argsrrÚNAMEr#r$r%Ú find_paramsÚ map_to_indexr"Ú tuple_namerÚ post_orderr2rrr Úpower)r.r;r<rrDrEÚparamsÚto_indexÚtup_nameÚ new_paramr*ÚcÚ subscriptsÚnews rr0zFixTupleParams.transform_lambdans-€Øv‰ˆØv‰ˆÜ˜g gÑ.Ó/ˆð :‰:œŸ™Ò #Ø—K‘K“MˆE؈EŒLØ L‰L˜Ô Ø ä˜TÓ"ˆÜ Ó'ˆØ—=‘=¤¨FÓ!3Ó4ˆä˜¨#Ô.ˆ Ø ‰ Y—_‘_Ó&Ô'Ø—‘Ö"ˆAØv‰vœŸ™Ó#¨¯©°8Ò(;Ø19¸!¿'¹'Ò1BÓCÑ1B¨A˜aŸg™giÐ1B ÐCÜ—k‘k¤$§*¡*Ø#,§?¡?Ó#4Ð"5¸ Ñ"BóDàŸX™X” Ø— ‘ ˜#•ñ #ùâCsÄ FN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚ BM_compatibleÚPATTERNrBr0©rrrrs„Ø€Ià€Mð€Gò>ó@rrcóL—|jtjtjfvr|S|jtj k(rL|jtj k(r-|j d}|jtj k(rŒ-|Std|z«‚)NrzReceived unexpected node %s)rr ÚvfplistrrGÚvfpdefrÚ RuntimeError)r;s rrFrF‹sx€Ø ‡yy”T—\‘\¤5§:¡:Ð.Ñ.؈ Ø ‰”d—k‘kÒ !ði‰iœ4Ÿ;™;Ò&Ø—=‘= Ñ#ˆDði‰iœ4Ÿ;™;Ó&àˆ Ü Ð4°tÑ;Ó <Ð}t|t«r|jt|««Œ.|j|«Œ@dj |«S)NÚ_)rrdr&rJÚjoin)reÚlrfs rrJrJ¨sF€Ø €AÛˆÜ cœ4Ô Ø H‰H”Z “_Õ %à H‰HSMð ð 8‰8A‹;Ðr)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrFrHrIrJrZrrÚrpsQðñõ*ÝÝßG×Gò1ôgZ×'Ñ'ôgòX =òLð%'¨$ó  órlib2to3/fixes/__pycache__/fix_getcwdu.cpython-312.opt-1.pyc000064400000001653152462633570017344 0ustar00Ë T—çhÃãóJ—dZddlmZddlmZGd„dej «Zy)z1 Fixer that changes os.getcwdu() to os.getcwd(). é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixGetcwduTzR power< 'os' trailer< dot='.' name='getcwdu' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚgetcwd)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú2/usr/lib64/python3.12/lib2to3/fixes/fix_getcwdu.pyÚ transformzFixGetcwdu.transforms"€Øv‰ˆØ ‰ ”T˜(¨4¯;©;Ô7Õ8óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó9rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñõ Ýô 9×#Ñ#õ 9rlib2to3/fixes/__pycache__/fix_raw_input.cpython-312.opt-2.pyc000064400000001561152462633570017711 0ustar00Ë T—çhÆãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixRawInputTzU power< name='raw_input' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚinput)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_raw_input.pyÚ transformzFixRawInput.transforms"€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Õ7óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„à€Mð€Gó8rrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðØ8õÝô 8*×$Ñ$õ 8rlib2to3/fixes/__pycache__/fix_next.cpython-312.opt-1.pyc000064400000010400152462633570016646 0ustar00Ë T—çhf ãó€—dZddlmZddlmZddlmZddlm Z m Z m Z dZ Gd„dej«Zd „Zd „Zd „Zy ) z.Fixer for it.next() -> next(it), per PEP 3114.é)Útoken)Úpython_symbols)Ú fixer_base)ÚNameÚCallÚ find_bindingz;Calls to builtin next() possibly shadowed by global bindingcó0‡—eZdZdZdZdZˆfd„Zd„ZˆxZS)ÚFixNextTa¾ power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > > | power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > > | classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='next' parameters< '(' NAME ')' > any+ > any* > > | global=global_stmt< 'global' any* 'next' any* > Úprecó”•—tt| ||«td|«}|r|j |t «d|_yd|_y)NÚnextTF)Úsuperr Ú start_treerÚwarningÚ bind_warningÚ shadowed_next)ÚselfÚtreeÚfilenameÚnÚ __class__s €ú//usr/lib64/python3.12/lib2to3/fixes/fix_next.pyrzFixNext.start_tree$sAø€Ü ŒgtÑ'¨¨hÔ7ä ˜ Ó &ˆÙ Ø L‰L˜œLÔ )Ø!%ˆDÕ à!&ˆDÕ ócó,—|jd«}|jd«}|jd«}|r‹|jr'|jtd|j¬««y|Dcgc]}|j «‘Œ}}d|d_|jt td|j¬«|««y|r)td|j¬«}|j|«y|r{t|«rU|d }dj|Dcgc] }t|«‘Œc}«j«d k(r|j|t«y|jtd««yd |vr|j|t«d |_yycc}wcc}w) NÚbaseÚattrÚnameÚ__next__)ÚprefixÚér ÚheadÚ __builtin__ÚglobalT) ÚgetrÚreplacerrÚclonerÚis_assign_targetÚjoinÚstrÚstriprr)rÚnodeÚresultsrrrrr"s rÚ transformzFixNext.transform.sD€ð{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆá Ø×!Ò!Ø— ‘ œT *°T·[±[ÔAÕBá+/Ó0©4 a˜Ÿ™ ¨4Ð0Ø!#Q‘”Ø— ‘ œT¤$ v°d·k±kÔ"BÀDÓIÕJÙ ÜZ¨¯ © Ô4ˆAØ L‰L˜OÙ ô  Ô%ؘv‘Ø—7‘7©DÓ1©D qœC F¨DÑ1Ó2×8Ñ8Ó:¸mÒKØ—L‘L ¤|Ô4ØØ L‰Lœ˜jÓ)Õ *Ø ˜Ñ Ø L‰L˜œ|Ô ,Ø!%ˆDÕ ð!ùò!1ùò2s Á-F Ä F) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚorderrr.Ú __classcell__)rs@rr r s ø„Ø€Mð €Gð €Eô'ö&rr cóœ—t|«}|€y|jD]/}|jtjk(ryt ||«sŒ/yy)NFT)Ú find_assignÚchildrenÚtyperÚEQUALÚ is_subtree)r,ÚassignÚchilds rr(r(QsG€Ü ˜Ó €FØ €~Øà—”ˆØ :‰:œŸ™Ò $ÙÜ ˜˜tÕ $Ùð !ð rcó¾—|jtjk(r|S|jtjk(s |j€yt |j«S©N)r9ÚsymsÚ expr_stmtÚ simple_stmtÚparentr7)r,s rr7r7]sD€Ø ‡yy”D—N‘NÒ"؈ Ø ‡yy”D×$Ñ$Ò$¨¯ © Ð(;ØÜ t—{‘{Ó #Ð#rcóL‡—|‰k(rytˆfd„|jD««S)NTc3ó6•K—|]}t|‰«–—Œy­wr?)r;)Ú.0Úcr,s €rÚ zis_subtree..gsøèø€Ð:©M qŒz˜!˜T×"©Mùsƒ)Úanyr8)Úrootr,s `rr;r;ds"ø€Ø ˆt‚|ØÜ Ó:¨D¯MªMÓ:Ó :Ð:rN)Ú__doc__Úpgen2rÚpygramrr@r rÚ fixer_utilrrrrÚBaseFixr r(r7r;©rrÚrQs@ðÙ4õÝ+Ýß1Ñ1àL€ ô:&ˆj× Ñ ô:&ò@ ò$ó;rlib2to3/fixes/__pycache__/fix_getcwdu.cpython-312.opt-2.pyc000064400000001555152462633570017346 0ustar00Ë T—çhÃãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixGetcwduTzR power< 'os' trailer< dot='.' name='getcwdu' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚgetcwd)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú2/usr/lib64/python3.12/lib2to3/fixes/fix_getcwdu.pyÚ transformzFixGetcwdu.transforms"€Øv‰ˆØ ‰ ”T˜(¨4¯;©;Ô7Õ8óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó9rrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ððõ Ýô 9×#Ñ#õ 9rlib2to3/fixes/__pycache__/fix_zip.cpython-312.pyc000064400000003671152462633570015547 0ustar00Ë T—çh ãój—dZddlmZddlmZddlmZddlm Z m Z m Z Gd„dej«Z y) a7 Fixer that changes zip(seq0, seq1, ...) into list(zip(seq0, seq1, ...) unless there exists a 'from future_builtins import zip' statement in the top-level namespace. We avoid the transformation if the zip() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚin_special_contextcó—eZdZdZdZdZd„Zy)ÚFixZipTzN power< 'zip' args=trailer< '(' [any] ')' > [trailers=trailer*] > zfuture_builtins.zipcó¼—|j|«ryt|«ry|dj«}d|_g}d|vr.|dDcgc]}|j«‘Œ}}|D] }d|_Œ t t j td«|gd¬«}t t j td«t|g«g|z«}|j|_|Scc}w)NÚargsÚÚtrailersÚzip)ÚprefixÚlist) Ú should_skiprÚclonerrÚsymsÚpowerrr)ÚselfÚnodeÚresultsr rÚnÚnews ú./usr/lib64/python3.12/lib2to3/fixes/fix_zip.pyÚ transformzFixZip.transformsÍ€Ø × Ñ ˜DÔ !Ø ä ˜dÔ #Øàv‰×$Ñ$Ó&ˆØˆŒ àˆØ ˜Ñ Ø+2°:Ò+>Ó?Ñ+> a˜Ÿ™ Ð+>ˆHÐ?ÛØ•ðô”4—:‘:¤ U£ ¨TÐ2¸2Ô>ˆÜ”4—:‘:¤ V£ ¬g°s°e«nÐ=ÀÑHÓIˆØ—[‘[ˆŒ ؈ ùò@sÁCN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr©órr r s„à€Mð€Gð $€Gór$r N)Ú__doc__r rÚpytreerÚpygramrrÚ fixer_utilrrrÚConditionalFixr r#r$rÚr*s-ðñõÝÝ+ß:Ñ:ôˆZ× &Ñ &õr$lib2to3/fixes/__pycache__/fix_paren.cpython-312.pyc000064400000003127152462633570016046 0ustar00Ë T—çhÊãóN—dZddlmZddlmZmZGd„dej «Zy)ztFixer that adds parentheses where they are required This converts ``[x for x in 1, 2]`` to ``[x for x in (1, 2)]``.é)Ú fixer_base)ÚLParenÚRParencó—eZdZdZdZd„Zy)ÚFixParenTa atom< ('[' | '(') (listmaker< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > > | testlist_gexp< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > >) (']' | ')') > có¨—|d}t«}|j|_d|_|jd|«|jt ««y)NÚtargetÚé)rÚprefixÚ insert_childÚ append_childr)ÚselfÚnodeÚresultsr Úlparens ú0/usr/lib64/python3.12/lib2to3/fixes/fix_paren.pyÚ transformzFixParen.transform%sE€Ø˜Ñ"ˆä“ˆØŸ ™ ˆŒ ؈Œ Ø×јA˜vÔ&Ø×ÑœF›HÕ%óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó,&rrN)Ú__doc__r rÚ fixer_utilrrÚBaseFixrrrrÚrs%ðñCõß'ô &ˆz×!Ñ!õ &rlib2to3/fixes/__pycache__/fix_dict.cpython-312.opt-2.pyc000064400000007016152462633570016625 0ustar00Ë T—çh°ãó”— ddlmZddlmZddlmZddlmZmZmZddlmZejdhzZ Gd„dej«Z y ) é)Úpytree)Úpatcomp)Ú fixer_base)ÚNameÚCallÚDot)Ú fixer_utilÚitercóp—eZdZdZdZd„ZdZeje«Z dZ eje «Z d„Z y)ÚFixDictTa power< head=any+ trailer< '.' method=('keys'|'items'|'values'| 'iterkeys'|'iteritems'|'itervalues'| 'viewkeys'|'viewitems'|'viewvalues') > parens=trailer< '(' ')' > tail=any* > c ó—|d}|dd}|d}|j}|j}|jd«}|jd«} |s| r|dd}|D cgc]} | j«‘Œ}} |D cgc]} | j«‘Œ}} | xr|j ||«} |t j |jt«t||j¬«g«|d j«gz} t j |j| «} | s#| s!d | _ tt|rdnd «| g«} |r$t j |j| g|z«} |j| _ | Scc} wcc} w) NÚheadÚmethodéÚtailr Úviewé)ÚprefixÚparensÚÚlist) ÚsymsÚvalueÚ startswithÚcloneÚin_special_contextrÚNodeÚtrailerrrrÚpowerr)ÚselfÚnodeÚresultsrrrrÚ method_nameÚisiterÚisviewÚnÚspecialÚargsÚnews ú//usr/lib64/python3.12/lib2to3/fixes/fix_dict.pyÚ transformzFixDict.transform6sp€Øv‰ˆØ˜Ñ" 1Ñ%ˆØv‰ˆØy‰yˆØ—l‘lˆ Ø×'Ñ'¨Ó/ˆØ×'Ñ'¨Ó/ˆÙ ‘VØ% a b˜/ˆKá#'Ó(¡4˜a—‘•  4ˆÐ(Ù#'Ó(¡4˜a—‘•  4ˆÐ(Ø(ÒD˜t×6Ñ6°t¸VÓDˆØ”v—{‘{ 4§<¡<Ü$'£EÜ$(¨Ø06· ± ô%?ð$@óAð˜xÑ(×.Ñ.Ó0ð 2ñ2ˆô k‰k˜$Ÿ*™* dÓ+ˆÙ™6؈CŒJÜ”t¡f™F°&Ó9¸C¸5ÓAˆCÙ Ü—+‘+˜dŸj™j¨3¨%°$©,Ó7ˆCØ—[‘[ˆŒ ؈ ùò)ùÚ(s ÁE:Á7E?z3power< func=NAME trailer< '(' node=any ')' > any* >zmfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > cóŠ—|j€yi}|jjm|jj|jj|«r=|d|ur6|r|djtvS|djt j vS|sy|jj|j|«xr|d|uS)NFr!Úfunc)ÚparentÚp1ÚmatchrÚ iter_exemptr Úconsuming_callsÚp2)r r!r$r"s r*rzFixDict.in_special_contextZs®€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&Ùà˜v‘×,Ñ,´ Ð;Ð;ð˜v‘×,Ñ,´ ×0JÑ0JÐJÐJÙØàw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNóN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr+ÚP1rÚcompile_patternr/ÚP2r3r©r4r*r r )sM„Ø€Mð€Gòð8 ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€BóOr4r N) rrrrr rrrr2r1ÚBaseFixr r=r4r*Úr?sHððõ6ÝÝß(Ñ(Ýð×(Ñ(¨F¨8Ñ3€ ôAOˆj× Ñ õAOr4lib2to3/fixes/__pycache__/fix_intern.cpython-312.opt-2.pyc000064400000002502152462633570017174 0ustar00Ë T—çhxãóL— ddlmZddlmZmZGd„dej «Zy)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixInternTÚprezÿ power< 'intern' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)ÚsysÚinternr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_intern.pyÚ transformzFixIntern.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ!ˆÜ˜D '¨5Ó1ˆÜT˜5 $Ô'؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr's$ððõ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_unicode.cpython-312.pyc000064400000004166152462633570016373 0ustar00Ë T—çhèãóT—dZddlmZddlmZdddœZGd„dej «Zy ) z¢Fixer for unicode. * Changes unicode to str and unichr to chr. * If "...\u..." is not unicode literal change it into "...\\u...". * Change u"..." into "...". é)Útoken)Ú fixer_baseÚchrÚstr)ÚunichrÚunicodecó,‡—eZdZdZdZˆfd„Zd„ZˆxZS)Ú FixUnicodeTzSTRING | 'unicode' | 'unichr'cóT•—tt| ||«d|jv|_y)NÚunicode_literals)Úsuperr Ú start_treeÚfuture_featuresr )ÚselfÚtreeÚfilenameÚ __class__s €ú2/usr/lib64/python3.12/lib2to3/fixes/fix_unicode.pyrzFixUnicode.start_trees'ø€Ü Œj˜$Ñ*¨4°Ô:Ø 2°d×6JÑ6JÐ JˆÕóc ó$—|jtjk(r*|j«}t|j |_|S|jtj k(r§|j }|jsY|ddvrRd|vrNdj|jd«Dcgc]$}|jdd«jdd«‘Œ&c}«}|dd vr|d d}||j k(r|S|j«}||_|Sycc}w) Néz'"Ú\z\\z\uz\\uz\Uz\\UÚuUé) ÚtyperÚNAMEÚcloneÚ_mappingÚvalueÚSTRINGr ÚjoinÚsplitÚreplace)rÚnodeÚresultsÚnewÚvalÚvs rÚ transformzFixUnicode.transformsø€Ø 9‰9œŸ ™ Ò "Ø—*‘*“,ˆCÜ  §¡Ñ,ˆCŒI؈JØ Y‰Yœ%Ÿ,™,Ò &Ø—*‘*ˆCØ×(Ò(¨S°©V°u©_ÀÈÁØ—j‘jà ŸY™Y uÔ-ó"á-˜ð—I‘I˜e VÓ,×4Ñ4°U¸FÕCØ-ñ"óð1‰v˜‰~ؘ!˜"gØd—j‘jÒ Ø Ø—*‘*“,ˆC؈CŒI؈Jð'ùò"sÂ&)D )Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNrr)Ú __classcell__)rs@rr r sø„Ø€MØ-€GôKörr N)Ú__doc__Úpgen2rÚrrÚBaseFixr ©rrÚr5s.ðñõÝà¨%Ñ 0€ô×#Ñ#õrlib2to3/fixes/__pycache__/fix_input.cpython-312.opt-2.pyc000064400000002256152462633570017042 0ustar00Ë T—çhÄãó|— ddlmZddlmZmZddlmZej d«ZGd„dej«Z y)é)Ú fixer_base)ÚCallÚName)Úpatcompz&power< 'eval' trailer< '(' any ')' > >có—eZdZdZdZd„Zy)ÚFixInputTzL power< 'input' args=trailer< '(' [any] ')' > > cóÈ—tj|jj«ry|j«}d|_t t d«|g|j¬«S)NÚÚeval)Úprefix)ÚcontextÚmatchÚparentÚcloner rr)ÚselfÚnodeÚresultsÚnews ú0/usr/lib64/python3.12/lib2to3/fixes/fix_input.pyÚ transformzFixInput.transformsF€ä =‰=˜Ÿ™×+Ñ+Ô ,Ø àj‰j‹lˆØˆŒ Ü”D˜“L 3 %°· ± Ô<Ð<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó=rrN) r rÚ fixer_utilrrrÚcompile_patternr ÚBaseFixrrrrÚr!s:ðØ:õß#Ýð "ˆ'× !Ñ !Ð"JÓ K€ô =ˆz×!Ñ!õ =rlib2to3/fixes/__pycache__/fix_imports.cpython-312.opt-1.pyc000064400000013732152462633570017400 0ustar00Ë T—çh4ãóT—dZddlmZddlmZmZidd“dd“dd“d d “d d “d d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“id#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“¥dDdEdFdGdHdIdJdJdJdKdLdLdMdNdOœ¥ZdP„ZefdQ„ZGdR„dSej«Z yT)Uz/Fix incompatible imports and module references.é)Ú fixer_base)ÚNameÚ attr_chainÚStringIOÚioÚ cStringIOÚcPickleÚpickleÚ __builtin__ÚbuiltinsÚcopy_regÚcopyregÚQueueÚqueueÚ SocketServerÚ socketserverÚ ConfigParserÚ configparserÚreprÚreprlibÚ FileDialogztkinter.filedialogÚ tkFileDialogÚ SimpleDialogztkinter.simpledialogÚtkSimpleDialogÚtkColorChooserztkinter.colorchooserÚtkCommonDialogztkinter.commondialogÚDialogztkinter.dialogÚTkdndz tkinter.dndÚtkFontz tkinter.fontÚ tkMessageBoxztkinter.messageboxÚ ScrolledTextztkinter.scrolledtextÚ Tkconstantsztkinter.constantsÚTixz tkinter.tixÚttkz tkinter.ttkÚTkinterÚtkinterÚ markupbaseÚ _markupbaseÚ_winregÚwinregÚthreadÚ_threadÚ dummy_threadÚ _dummy_threadÚdbhashzdbm.bsdÚdumbdbmzdbm.dumbÚdbmzdbm.ndbmÚgdbmzdbm.gnuÚ xmlrpclibz xmlrpc.clientÚDocXMLRPCServerz xmlrpc.serverz http.clientz html.entitiesz html.parserz http.cookieszhttp.cookiejarz http.serverÚ subprocessÚ collectionsz urllib.parsezurllib.robotparser)ÚSimpleXMLRPCServerÚhttplibÚhtmlentitydefsÚ HTMLParserÚCookieÚ cookielibÚBaseHTTPServerÚSimpleHTTPServerÚ CGIHTTPServerÚcommandsÚ UserStringÚUserListÚurlparseÚ robotparsercóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_imports.pyÚ alternatesrM=s"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc#óÔK—dj|Dcgc]}d|z‘Œ c}«}t|j««}d|›d|›d–—d|z–—d|›d|›d –—d |z–—ycc}w­w) Nz | zmodule_name='%s'z$name_import=import_name< 'import' ((z;) | multiple_imports=dotted_as_names< any* (z) any* >) > z›import_from< 'from' (%s) 'import' ['('] ( any | import_as_name< any 'as' any > | import_as_names< any* >) [')'] > z(import_name< 'import' (dotted_as_name< (zg) 'as' any > | multiple_imports=dotted_as_names< any* dotted_as_name< (z!) 'as' any > any* >) > z3power< bare_with_attr=(%s) trailer<'.' any > any* >)rIrMÚkeys)ÚmappingÚkeyÚmod_listÚ bare_namess rLÚ build_patternrUAsƒèø€Øz‰z¹wÓG¹w¸Ð-°Ó3¸wÑGÓH€HܘGŸL™L›NÓ+Jòš8ð %ò%ð ðñ óòš8ð %ò%ð @À*Ñ LÓLùò!Hùs‚A(’ A#žA A(cóN‡—eZdZdZdZeZdZd„Zˆfd„Z ˆfd„Z ˆfd„Z d„Z ˆxZ S)Ú FixImportsTécóJ—djt|j««S)NrG)rIrUrQ)Úselfs rLrUzFixImports.build_pattern`s€Øx‰xœ  d§l¡lÓ3Ó4Ð4rNcóT•—|j«|_tt|«y©N)rUÚPATTERNÚsuperrWÚcompile_pattern)rZÚ __class__s €rLr_zFixImports.compile_patterncs"ø€ð×)Ñ)Ó+ˆŒ Ü Œj˜$Ñ/Õ1rNc󂕇—tt| Љ|«}|r%d|vrtˆfd„t |d«D««ry|Sy)NÚbare_with_attrc3ó.•K—|] }‰|«–—Œy­wr\©)Ú.0ÚobjÚmatchs €rLÚ z#FixImports.match..qsøèø€ÐIÑ.H s™˜cŸ Ñ.HùsƒÚparentF)r^rWrgÚanyr)rZÚnodeÚresultsrgr`s @€rLrgzFixImports.matchjsEù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ð  wÑ.ÜÓI¬j¸¸xÔ.HÓIÔIØØˆNØrNcó<•—tt| ||«i|_yr\)r^rWÚ start_treeÚreplace)rZÚtreeÚfilenamer`s €rLrnzFixImports.start_treevsø€Ü Œj˜$Ñ*¨4°Ô:؈ rNcóÖ—|jd«}|r€|j}|j|}|jt ||j ¬««d|vr||j|<d|vr'|j |«}|r|j||«yyy|dd}|jj|j«}|r'|jt ||j ¬««yy)NÚ module_name)ÚprefixÚ name_importÚmultiple_importsrbé)ÚgetÚvaluerQrorrtrgÚ transform)rZrkrlÚ import_modÚmod_nameÚnew_nameÚ bare_names rLrzzFixImports.transformzs߀Ø—[‘[ Ó/ˆ Ù Ø!×'Ñ'ˆHØ—|‘| HÑ-ˆHØ × Ñ œt H°Z×5FÑ5FÔGÔ HØ Ñ'ð*2— ‘ ˜XÑ&Ø! WÑ,ð Ÿ*™* TÓ*ÙØ—N‘N 4¨Õ1ðð -ð Ð 0Ñ1°!Ñ4ˆIØ—|‘|×'Ñ'¨ ¯©Ó8ˆHÙØ×!Ñ!¤$ x¸ ×8HÑ8HÔ"IÕJðrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚkeep_line_orderÚMAPPINGrQÚ run_orderrUr_rgrnrzÚ __classcell__)r`s@rLrWrWUs3ø„à€MØ€Oà€Gð€Iò5ô2ô ôöKrNrWN) Ú__doc__ÚrÚ fixer_utilrrr„rMrUÚBaseFixrWrdrNrLÚr‹sðÙ5õß)ð2 ˆ:˜ð2 Ø ˜ð2 à hð2 ð ˜:ð2 ð yð 2 ð Gð 2 ð ˜>ð 2 ð ˜>ð2 ð 9ð2 ð Ð-ð2 ð Ð/ð2 ð Ð1ð2 ð Ð3ð2 ð Ð3ð2 ð Ð3ð2 ð Ð%ð2 ð Mñ!2 ð" ^ð#2 ð$ Ð/ð%2 ð& Ð1ð'2 ð( Ð-ð)2 ð* -ð+2 ð, -ð-2 ð. ið/2 ð0 ˜ð12 ð2 hð32 ð4 Yð52 ð6 ˜?ð72 ð: Yð;2 ð< jð=2 ð> *ð?2 ð@ 9ðA2 ðB ˜ðC2 ðD ˜oñE2 ðF"1Ø#Ø-Ø'Ø#Ø(Ø*Ø,Ø)à#Ø'Ø%Ø&Ø/òc2 €òj4ð"óMô(<K×#Ñ#õ<KrNlib2to3/fixes/__pycache__/fix_itertools_imports.cpython-312.opt-1.pyc000064400000005100152462633570021472 0ustar00Ë T—çh&ãóR—dZddlmZddlmZmZmZGd„dej«Zy)zA Fixer for imports of itertools.(imap|ifilter|izip|ifilterfalse) é)Ú fixer_base)Ú BlankLineÚsymsÚtokencó*—eZdZdZde«zZd„Zy)ÚFixItertoolsImportsTzT import_from< 'from' 'itertools' 'import' imports=any > cóÜ—|d}|jtjk(s |js|g}n |j}|ddd…D]ª}|jtj k(r|j }|}n.|jtjk(ry|jd}|j }|dvrd|_|j«Œ…|dvsŒŠ|j«|ddk(rdnd |_Œ¬|jddxs|g}d } |D]7}| r.|jtjk(r|j«Œ3| d z} Œ9|ra|d jtjk(rA|j«j«|r!|d jtjk(rŒA|js t|d d«r |j€|j} t«}| |_|Sy) NÚimportsér)ÚimapÚizipÚifilter)Ú ifilterfalseÚ izip_longestéÚfÚ filterfalseÚ zip_longestTéÿÿÿÿÚvalue)ÚtyperÚimport_as_nameÚchildrenrÚNAMErÚSTARÚremoveÚchangedÚCOMMAÚpopÚgetattrÚparentÚprefixr) ÚselfÚnodeÚresultsr rÚchildÚmemberÚ name_nodeÚ member_nameÚ remove_commaÚps úr:s%ðÙGõß5Ñ5ô1˜*×,Ñ,õ1r.lib2to3/fixes/__pycache__/fix_imports.cpython-312.opt-2.pyc000064400000013636152462633570017404 0ustar00Ë T—çh4ãóR— ddlmZddlmZmZidd“dd“dd“dd “d d “d d “dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“id"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“dd?“d@dA“dBdC“¥dCdDdEdFdGdHdIdIdIdJdKdKdLdMdNœ¥ZdO„ZefdP„ZGdQ„dRej«Z yS)Té)Ú fixer_base)ÚNameÚ attr_chainÚStringIOÚioÚ cStringIOÚcPickleÚpickleÚ __builtin__ÚbuiltinsÚcopy_regÚcopyregÚQueueÚqueueÚ SocketServerÚ socketserverÚ ConfigParserÚ configparserÚreprÚreprlibÚ FileDialogztkinter.filedialogÚ tkFileDialogÚ SimpleDialogztkinter.simpledialogÚtkSimpleDialogÚtkColorChooserztkinter.colorchooserÚtkCommonDialogztkinter.commondialogÚDialogztkinter.dialogÚTkdndz tkinter.dndÚtkFontz tkinter.fontÚ tkMessageBoxztkinter.messageboxÚ ScrolledTextztkinter.scrolledtextÚ Tkconstantsztkinter.constantsÚTixz tkinter.tixÚttkz tkinter.ttkÚTkinterÚtkinterÚ markupbaseÚ _markupbaseÚ_winregÚwinregÚthreadÚ_threadÚ dummy_threadÚ _dummy_threadÚdbhashzdbm.bsdÚdumbdbmzdbm.dumbÚdbmzdbm.ndbmÚgdbmzdbm.gnuÚ xmlrpclibz xmlrpc.clientÚDocXMLRPCServerz xmlrpc.serverz http.clientz html.entitiesz html.parserz http.cookieszhttp.cookiejarz http.serverÚ subprocessÚ collectionsz urllib.parsezurllib.robotparser)ÚSimpleXMLRPCServerÚhttplibÚhtmlentitydefsÚ HTMLParserÚCookieÚ cookielibÚBaseHTTPServerÚSimpleHTTPServerÚ CGIHTTPServerÚcommandsÚ UserStringÚUserListÚurlparseÚ robotparsercóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_imports.pyÚ alternatesrM=s"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc#óÔK—dj|Dcgc]}d|z‘Œ c}«}t|j««}d|›d|›d–—d|z–—d|›d|›d –—d |z–—ycc}w­w) Nz | zmodule_name='%s'z$name_import=import_name< 'import' ((z;) | multiple_imports=dotted_as_names< any* (z) any* >) > z›import_from< 'from' (%s) 'import' ['('] ( any | import_as_name< any 'as' any > | import_as_names< any* >) [')'] > z(import_name< 'import' (dotted_as_name< (zg) 'as' any > | multiple_imports=dotted_as_names< any* dotted_as_name< (z!) 'as' any > any* >) > z3power< bare_with_attr=(%s) trailer<'.' any > any* >)rIrMÚkeys)ÚmappingÚkeyÚmod_listÚ bare_namess rLÚ build_patternrUAsƒèø€Øz‰z¹wÓG¹w¸Ð-°Ó3¸wÑGÓH€HܘGŸL™L›NÓ+Jòš8ð %ò%ð ðñ óòš8ð %ò%ð @À*Ñ LÓLùò!Hùs‚A(’ A#žA A(cóN‡—eZdZdZdZeZdZd„Zˆfd„Z ˆfd„Z ˆfd„Z d„Z ˆxZ S)Ú FixImportsTécóJ—djt|j««S)NrG)rIrUrQ)Úselfs rLrUzFixImports.build_pattern`s€Øx‰xœ  d§l¡lÓ3Ó4Ð4rNcóT•—|j«|_tt|«y©N)rUÚPATTERNÚsuperrWÚcompile_pattern)rZÚ __class__s €rLr_zFixImports.compile_patterncs"ø€ð×)Ñ)Ó+ˆŒ Ü Œj˜$Ñ/Õ1rNc󂕇—tt| Љ|«}|r%d|vrtˆfd„t |d«D««ry|Sy)NÚbare_with_attrc3ó.•K—|] }‰|«–—Œy­wr\©)Ú.0ÚobjÚmatchs €rLÚ z#FixImports.match..qsøèø€ÐIÑ.H s™˜cŸ Ñ.HùsƒÚparentF)r^rWrgÚanyr)rZÚnodeÚresultsrgr`s @€rLrgzFixImports.matchjsEù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ð  wÑ.ÜÓI¬j¸¸xÔ.HÓIÔIØØˆNØrNcó<•—tt| ||«i|_yr\)r^rWÚ start_treeÚreplace)rZÚtreeÚfilenamer`s €rLrnzFixImports.start_treevsø€Ü Œj˜$Ñ*¨4°Ô:؈ rNcóÖ—|jd«}|r€|j}|j|}|jt ||j ¬««d|vr||j|<d|vr'|j |«}|r|j||«yyy|dd}|jj|j«}|r'|jt ||j ¬««yy)NÚ module_name)ÚprefixÚ name_importÚmultiple_importsrbé)ÚgetÚvaluerQrorrtrgÚ transform)rZrkrlÚ import_modÚmod_nameÚnew_nameÚ bare_names rLrzzFixImports.transformzs߀Ø—[‘[ Ó/ˆ Ù Ø!×'Ñ'ˆHØ—|‘| HÑ-ˆHØ × Ñ œt H°Z×5FÑ5FÔGÔ HØ Ñ'ð*2— ‘ ˜XÑ&Ø! WÑ,ð Ÿ*™* TÓ*ÙØ—N‘N 4¨Õ1ðð -ð Ð 0Ñ1°!Ñ4ˆIØ—|‘|×'Ñ'¨ ¯©Ó8ˆHÙØ×!Ñ!¤$ x¸ ×8HÑ8HÔ"IÕJðrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚkeep_line_orderÚMAPPINGrQÚ run_orderrUr_rgrnrzÚ __classcell__)r`s@rLrWrWUs3ø„à€MØ€Oà€Gð€Iò5ô2ô ôöKrNrWN) ÚrÚ fixer_utilrrr„rMrUÚBaseFixrWrdrNrLÚrŠsðØ5õß)ð2 ˆ:˜ð2 Ø ˜ð2 à hð2 ð ˜:ð2 ð yð 2 ð Gð 2 ð ˜>ð 2 ð ˜>ð2 ð 9ð2 ð Ð-ð2 ð Ð/ð2 ð Ð1ð2 ð Ð3ð2 ð Ð3ð2 ð Ð3ð2 ð Ð%ð2 ð Mñ!2 ð" ^ð#2 ð$ Ð/ð%2 ð& Ð1ð'2 ð( Ð-ð)2 ð* -ð+2 ð, -ð-2 ð. ið/2 ð0 ˜ð12 ð2 hð32 ð4 Yð52 ð6 ˜?ð72 ð: Yð;2 ð< jð=2 ð> *ð?2 ð@ 9ðA2 ðB ˜ðC2 ðD ˜oñE2 ðF"1Ø#Ø-Ø'Ø#Ø(Ø*Ø,Ø)à#Ø'Ø%Ø&Ø/òc2 €òj4ð"óMô(<K×#Ñ#õ<KrNlib2to3/fixes/__pycache__/fix_raise.cpython-312.opt-1.pyc000064400000006467152462633570017015 0ustar00Ë T—çhn ãór—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z Gd„dej«Z y) a[Fixer for 'raise E, V, T' raise -> raise raise E -> raise E raise E, V -> raise E(V) raise E, V, T -> raise E(V).with_traceback(T) raise E, None, T -> raise E.with_traceback(T) raise (((E, E'), E''), E'''), V -> raise E(V) raise "foo", V, T -> warns about string exceptions CAVEATS: 1) "raise E, V" will be incorrectly translated if V is an exception instance. The correct Python 3 idiom is raise E from V but since we can't detect instance-hood by syntax alone and since any client code would have to be changed as well, we don't automate this. é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚAttrÚArgListÚis_tuplecó—eZdZdZdZd„Zy)ÚFixRaiseTzB raise_stmt< 'raise' exc=any [',' val=any [',' tb=any]] > cóv—|j}|dj«}|jtjk(rd}|j ||«yt |«rHt |«r6|jdjdj«}t |«rŒ6d|_d|vr>tj|jtd«|g«}|j|_|S|dj«}t |«r+|jddDcgc]}|j«‘Œ} }n d |_|g} d |vr·|d j«} d | _|} |jtjk7s|jd k7r t|| «} t!| td ««t#| g«gz} tj|j$td«g| z«}|j|_|Stj|jtd«t|| «g|j¬ «Scc}w)NÚexcz+Python 3 does not support string exceptionsééÚ ÚvalÚraiseéÿÿÿÿÚÚtbÚNoneÚwith_traceback)Úprefix)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertr ÚchildrenrrÚNodeÚ raise_stmtrÚNAMEÚvaluerrr Ú simple_stmt) ÚselfÚnodeÚresultsrrÚmsgÚnewrÚcÚargsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_raise.pyÚ transformzFixRaise.transform&s߀Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ò #Ø?ˆCØ × Ñ   cÔ *Ø ô CŒ=ܘ3”-ð—l‘l 1‘o×.Ñ.¨qÑ1×7Ñ7Ó9ô˜3•-ðˆCŒJà ˜Ñ ä—+‘+˜dŸo™o´°W³ ¸sÐ/CÓDˆCØŸ™ˆCŒJ؈Jàe‰n×"Ñ"Ó$ˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIàˆAðx‰xœ5Ÿ:™:Ò%¨¯©°fÒ)<ܘ˜d“Oܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGÜ—+‘+˜d×.Ñ.´°g³°À'Ñ0IÓJˆCØŸ™ˆCŒJ؈Jä—;‘;˜tŸ™Ü $ W£ ¬t°C¸«Ð?Ø&*§k¡kô3ð 3ùò);sÄH6N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr/©ór.r r s„à€Mð€Gó43r6r N)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r5r6r.Úr;s-ðñõ2ÝÝß<Õ<ô;3ˆz×!Ñ!õ;3r6lib2to3/fixes/__pycache__/fix_future.cpython-312.opt-2.pyc000064400000001454152462633570017214 0ustar00Ë T—çh#ãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)Ú BlankLinecó—eZdZdZdZdZd„Zy)Ú FixFutureTz;import_from< 'from' module_name="__future__" 'import' any >é có<—t«}|j|_|S)N)rÚprefix)ÚselfÚnodeÚresultsÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_future.pyÚ transformzFixFuture.transforms€Ü‹kˆØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr©rrrr s„Ø€MàO€Gð€IórrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ððõÝ"ô  ×"Ñ"õ rlib2to3/fixes/__pycache__/fix_long.cpython-312.opt-2.pyc000064400000001412152462633570016633 0ustar00Ë T—çhÜãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)Úis_probably_builtincó—eZdZdZdZd„Zy)ÚFixLongTz'long'cóJ—t|«rd|_|j«yy)NÚint)rÚvalueÚchanged)ÚselfÚnodeÚresultss ú//usr/lib64/python3.12/lib2to3/fixes/fix_long.pyÚ transformzFixLong.transforms€Ü ˜tÔ $؈DŒJØ L‰LNð %óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€MØ€GórrN)Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ððõÝ2ôˆj× Ñ õrlib2to3/fixes/__pycache__/fix_set_literal.cpython-312.pyc000064400000005105152462633570017246 0ustar00Ë T—çh¡ãóR—dZddlmZmZddlmZmZGd„dej«Zy)z: Optional fixer to transform set() calls to set literals. é)Ú fixer_baseÚpytree)ÚtokenÚsymscó—eZdZdZdZdZd„Zy)Ú FixSetLiteralTajpower< 'set' trailer< '(' (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) > | single=any) ']' > | atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' > ) ')' > > có—|jd«}|rGtjtj|j «g«}|j |«|}n|d}tjtjd«g}|jd„|jD««|jtjtjd««|jj|d_tjtj |«}|j|_t#|j«dk(r=|jd}|j%«|j|jd_|S) NÚsingleÚitemsÚ{c3ó<K—|]}|j«–—Œy­w)N)Úclone)Ú.0Úns ú6/usr/lib64/python3.12/lib2to3/fixes/fix_set_literal.pyÚ z*FixSetLiteral.transform..'sèø€Ð9©. Qq—w‘w—y©.ùs‚Ú}éÿÿÿÿéé)ÚgetrÚNoderÚ listmakerrÚreplaceÚLeafrÚLBRACEÚextendÚchildrenÚappendÚRBRACEÚ next_siblingÚprefixÚ dictsetmakerÚlenÚremove) ÚselfÚnodeÚresultsr Úfaker ÚliteralÚmakerrs rÚ transformzFixSetLiteral.transforms€Ø—‘˜XÓ&ˆÙ ä—;‘;œtŸ~™~°· ± ³Ð/?Ó@ˆDØ N‰N˜4Ô Ø‰Eà˜GÑ$ˆEô—;‘;œuŸ|™|¨SÓ1Ð2ˆØ‰Ñ9¨%¯.ª.Ó9Ô9؉”v—{‘{¤5§<¡<°Ó5Ô6à"×/Ñ/×6Ñ6ˆ‰ ÔÜ— ‘ œD×-Ñ-¨wÓ7ˆØ—{‘{ˆŒ ô ˆu~‰~Ó  !Ò #Ø—‘˜qÑ!ˆAØ H‰HŒJØ()¯©ˆEN‰N˜2Ñ Ô %ðˆ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr,©r-rrr s„à€MØ€Hð€Gór-rN) Ú__doc__Úlib2to3rrÚlib2to3.fixer_utilrrÚBaseFixrr4r-rÚr9s$ðñ÷ 'ß*ô)J×&Ñ&õ)r-lib2to3/fixes/__pycache__/fix_methodattrs.cpython-312.pyc000064400000002172152462633570017276 0ustar00Ë T—çh^ãóV—dZddlmZddlmZddddœZGd„d ej «Zy ) z;Fix bound method attributes (method.im_? -> method.__?__). é)Ú fixer_base)ÚNameÚ__func__Ú__self__z__self__.__class__)Úim_funcÚim_selfÚim_classcó—eZdZdZdZd„Zy)ÚFixMethodattrsTzU power< any+ trailer< '.' attr=('im_func' | 'im_self' | 'im_class') > any* > có†—|dd}t|j}|jt||j¬««y)NÚattré)Úprefix)ÚMAPÚvalueÚreplacerr)ÚselfÚnodeÚresultsr Únews ú6/usr/lib64/python3.12/lib2to3/fixes/fix_methodattrs.pyÚ transformzFixMethodattrs.transforms4€Øv‰˜qÑ!ˆÜ$—*‘*‰oˆØ ‰ ”T˜# d§k¡kÔ2Õ3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrr r s„Ø€Mð€Gó4rr N)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixr rrrÚr$s6ðñõ ÝðØØ%ñ€ô 4Z×'Ñ'õ 4rlib2to3/fixes/__pycache__/fix_map.cpython-312.opt-2.pyc000064400000007200152462633570016452 0ustar00Ë T—çh8ãó|— ddlmZddlmZddlmZmZmZmZm Z ddl m Z ddl mZGd„dej«Zy) é)Útoken)Ú fixer_base)ÚNameÚArgListÚCallÚListCompÚin_special_context)Úpython_symbols)ÚNodecó—eZdZdZdZdZd„Zy)ÚFixMapTaL map_none=power< 'map' trailer< '(' arglist< 'None' ',' arg=any [','] > ')' > [extra_trailers=trailer*] > | map_lambda=power< 'map' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'map' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.mapcó —|j|«ryg}d|vr)|dD]!}|j|j««Œ#|jjt j k(rA|j|d«|j«}d|_ttd«|g«}nÈd|vrbt|dj«|dj«|dj««}tt j|g|zd¬ «}nbd |vr|d j«}d|_n d |vrù|d }|jt jk(r|jd jt j k(rs|jd jdjt"j$k(r<|jd jdj&dk(r|j|d«ytt jtd«|j«g«}d|_t)|«rytt jtd«t+g«g|z«}d|_|j|_|S)NÚextra_trailerszYou should use a for loop hereÚÚlistÚ map_lambdaÚxpÚfpÚit)ÚprefixÚmap_noneÚargÚargsééÚNonezjcannot convert map(None, ...) with multiple arguments because map() now truncates to the shortest sequenceÚmap)Ú should_skipÚappendÚcloneÚparentÚtypeÚsymsÚ simple_stmtÚwarningrrrrr ÚpowerÚtrailerÚchildrenÚarglistrÚNAMEÚvaluer r)ÚselfÚnodeÚresultsÚtrailersÚtÚnewrs ú./usr/lib64/python3.12/lib2to3/fixes/fix_map.pyÚ transformzFixMap.transform@s€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ;‰;× Ñ œt×/Ñ/Ò /Ø L‰L˜Ð?Ô @Ø—*‘*“,ˆC؈CŒJÜ”t˜F“| c UÓ+ŠCØ ˜WÑ $ܘ7 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0ó2ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?ŠCð˜WÑ$ؘe‘n×*Ñ*Ó,Ø– à˜WÑ$Ø" 6™?DØ—y‘y¤D§L¡LÒ0Ø—}‘} QÑ'×,Ñ,´· ± Ò<Ø—}‘} QÑ'×0Ñ0°Ñ3×8Ñ8¼E¿J¹JÒFØ—}‘} QÑ'×0Ñ0°Ñ3×9Ñ9¸VÒCØŸ ™  Tð,NôOðäœtŸz™z¬D°«K¸¿¹»Ð+FÓGCØ!#C”Jä% dÔ+Øä”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJà—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr3©r4r2r r s„Ø€Mð€Gð:$€Gó.r4r N)Úpgen2rrrÚ fixer_utilrrrrr Úpygramr r#Úpytreer ÚConditionalFixr r;r4r2ÚrAs2ððõ&ÝßJÕJÝ+ÝôPˆZ× &Ñ &õPr4lib2to3/fixes/__pycache__/fix_has_key.cpython-312.opt-2.pyc000064400000007067152462633570017333 0ustar00Ë T—çh| ãóX— ddlmZddlmZddlmZmZGd„dej «Zy)é)Úpytree)Ú fixer_base)ÚNameÚ parenthesizecó—eZdZdZdZd„Zy)Ú FixHasKeyTa• anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > after=any* > | negation=not_test< 'not' anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > > > c ó`—|j}|jj|jk(r&|jj |j«ry|j d«}|d}|j}|dDcgc]}|j«‘Œ}}|dj«} |j d«} | r| Dcgc]}|j«‘Œ} }| j|j|j|j|j|j|j|jfvr t| «} t!|«dk(r|d}n t#j$|j&|«}d|_t)d d¬ «} |r/t)d d¬ «} t#j$|j*| | f«} t#j$|j| | |f«} | r8t| «} t#j$|j&| ft-| «z«} |jj|j|j.|j0|j2|j4|j6|j8|j:|j&f vr t| «} || _| Scc}wcc}w) NÚnegationÚanchorÚbeforeÚargÚafterééÚ Úin)ÚprefixÚnot)ÚsymsÚparentÚtypeÚnot_testÚpatternÚmatchÚgetrÚcloneÚ comparisonÚand_testÚor_testÚtestÚlambdefÚargumentrÚlenrÚNodeÚpowerrÚcomp_opÚtupleÚexprÚxor_exprÚand_exprÚ shift_exprÚ arith_exprÚtermÚfactor)ÚselfÚnodeÚresultsrr r rÚnr r rÚn_opÚn_notÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_has_key.pyÚ transformzFixHasKey.transformGs€ày‰yˆØ K‰K× Ñ  § ¡ Ò -Ø L‰L× Ñ ˜tŸ{™{Ô +ðØ—;‘;˜zÓ*ˆØ˜Ñ"ˆØ—‘ˆØ%,¨XÒ%6Ó7Ñ%6 !—'‘'•)Ð%6ˆÐ7Øe‰n×"Ñ"Ó$ˆØ— ‘ ˜GÓ$ˆÙ Ù(-Ó.© 1Q—W‘W•Y¨ˆEÐ.Ø 8‰8˜Ÿ™¨¯©¸¿ ¹ ØŸ ™  d§i¡i°·±¸t¿}¹}ðNñ Nä˜sÓ#ˆCÜ ˆv‹;˜!Ò Ø˜A‘Y‰Fä—[‘[ §¡¨VÓ4ˆF؈Œ ÜD Ô%ˆÙ ܘ sÔ+ˆEÜ—;‘;˜tŸ|™|¨e°T¨]Ó;ˆDÜk‰k˜$Ÿ/™/¨C°°vÐ+>Ó?ˆÙ ܘsÓ#ˆCÜ—+‘+˜dŸj™j¨3¨&´5¸³<Ñ*?Ó@ˆCØ ;‰;× Ñ  §¡°·±¸D¿M¹MØ $§ ¡ ¨t¯©Ø $§¡°·±Ø $§ ¡ ¨T¯Z©Zð 9ñ 9ô˜sÓ#ˆC؈Œ ؈ ùò78ùò/s Á?J&ÃJ+N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr7©ór6rr&s„Ø€Mð€Gó<&r>rN)ÚrrÚ fixer_utilrrÚBaseFixrr=r>r6ÚrBs)ððõ:Ýß+ôG ×"Ñ"õGr>lib2to3/fixes/__pycache__/fix_raise.cpython-312.pyc000064400000006467152462633570016056 0ustar00Ë T—çhn ãór—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z Gd„dej«Z y) a[Fixer for 'raise E, V, T' raise -> raise raise E -> raise E raise E, V -> raise E(V) raise E, V, T -> raise E(V).with_traceback(T) raise E, None, T -> raise E.with_traceback(T) raise (((E, E'), E''), E'''), V -> raise E(V) raise "foo", V, T -> warns about string exceptions CAVEATS: 1) "raise E, V" will be incorrectly translated if V is an exception instance. The correct Python 3 idiom is raise E from V but since we can't detect instance-hood by syntax alone and since any client code would have to be changed as well, we don't automate this. é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚAttrÚArgListÚis_tuplecó—eZdZdZdZd„Zy)ÚFixRaiseTzB raise_stmt< 'raise' exc=any [',' val=any [',' tb=any]] > cóv—|j}|dj«}|jtjk(rd}|j ||«yt |«rHt |«r6|jdjdj«}t |«rŒ6d|_d|vr>tj|jtd«|g«}|j|_|S|dj«}t |«r+|jddDcgc]}|j«‘Œ} }n d |_|g} d |vr·|d j«} d | _|} |jtjk7s|jd k7r t|| «} t!| td ««t#| g«gz} tj|j$td«g| z«}|j|_|Stj|jtd«t|| «g|j¬ «Scc}w)NÚexcz+Python 3 does not support string exceptionsééÚ ÚvalÚraiseéÿÿÿÿÚÚtbÚNoneÚwith_traceback)Úprefix)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertr ÚchildrenrrÚNodeÚ raise_stmtrÚNAMEÚvaluerrr Ú simple_stmt) ÚselfÚnodeÚresultsrrÚmsgÚnewrÚcÚargsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_raise.pyÚ transformzFixRaise.transform&s߀Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ò #Ø?ˆCØ × Ñ   cÔ *Ø ô CŒ=ܘ3”-ð—l‘l 1‘o×.Ñ.¨qÑ1×7Ñ7Ó9ô˜3•-ðˆCŒJà ˜Ñ ä—+‘+˜dŸo™o´°W³ ¸sÐ/CÓDˆCØŸ™ˆCŒJ؈Jàe‰n×"Ñ"Ó$ˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIàˆAðx‰xœ5Ÿ:™:Ò%¨¯©°fÒ)<ܘ˜d“Oܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGÜ—+‘+˜d×.Ñ.´°g³°À'Ñ0IÓJˆCØŸ™ˆCŒJ؈Jä—;‘;˜tŸ™Ü $ W£ ¬t°C¸«Ð?Ø&*§k¡kô3ð 3ùò);sÄH6N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr/©ór.r r s„à€Mð€Gó43r6r N)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r5r6r.Úr;s-ðñõ2ÝÝß<Õ<ô;3ˆz×!Ñ!õ;3r6lib2to3/fixes/__pycache__/fix_filter.cpython-312.pyc000064400000007024152462633570016226 0ustar00Ë T—çhÍ ãór—dZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z Gd„dej«Zy) a¸Fixer that changes filter(F, X) into list(filter(F, X)). We avoid the transformation if the filter() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. NOTE: This is still not correct if the original code was depending on filter(F, X) to return a string if X is a string and a tuple if X is a tuple. That would require type inference, which we don't do. Let Python 2.6 figure it out. é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚListCompÚin_special_contextÚ parenthesizecó—eZdZdZdZdZd„Zy)Ú FixFilterTaV filter_lambda=power< 'filter' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'filter' trailer< '(' arglist< none='None' ',' seq=any > ')' > [extra_trailers=trailer*] > | power< 'filter' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.filtercó—|j|«ryg}d|vr)|dD]!}|j|j««Œ#d|vrÔ|jd«j«}|jt j k(rd|_t|«}t|jd«j«|jd«j«|jd«j«|«}tt j|g|zd¬«}nÞd|vr[ttd «td «|d j«td ««}tt j|g|zd¬«}nt|«ry|d j«}tt jtd «|gd¬«}tt jtd «t|g«g|z«}d|_|j|_|S)NÚextra_trailersÚ filter_lambdaÚxpÚÚfpÚit)ÚprefixÚnoneÚ_fÚseqÚargsÚfilterÚlist)Ú should_skipÚappendÚcloneÚgetÚtypeÚsymsÚtestrr rrÚpowerrr r)ÚselfÚnodeÚresultsÚtrailersÚtrÚnewrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_filter.pyÚ transformzFixFilter.transform:s¯€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ˜gÑ %Ø—‘˜TÓ"×(Ñ(Ó*ˆBØw‰wœ$Ÿ)™)Ò#Ø” Ü! "Ó%ä˜7Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4°bó:ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cà wÑ Üœ4 ›:Ü ›:Ø" 5™>×/Ñ/Ó1Ü ›:ó'ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cô" $Ô'Øà˜6‘?×(Ñ(Ó*ˆDÜ”t—z‘z¤D¨£N°DÐ#9À"ÔEˆCÜ”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr*©r+r)r r s„Ø€Mð€Gð<'€Gó$r+r N)Ú__doc__rrÚpytreerÚpygramrr Ú fixer_utilrrrr r ÚConditionalFixr r2r+r)Úr8s/ðñ õÝÝ+ßRÕRôG ×)Ñ)õGr+lib2to3/fixes/__pycache__/fix_filter.cpython-312.opt-1.pyc000064400000007024152462633570017165 0ustar00Ë T—çhÍ ãór—dZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z Gd„dej«Zy) a¸Fixer that changes filter(F, X) into list(filter(F, X)). We avoid the transformation if the filter() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. NOTE: This is still not correct if the original code was depending on filter(F, X) to return a string if X is a string and a tuple if X is a tuple. That would require type inference, which we don't do. Let Python 2.6 figure it out. é)Ú fixer_base)ÚNode)Úpython_symbols)ÚNameÚArgListÚListCompÚin_special_contextÚ parenthesizecó—eZdZdZdZdZd„Zy)Ú FixFilterTaV filter_lambda=power< 'filter' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'filter' trailer< '(' arglist< none='None' ',' seq=any > ')' > [extra_trailers=trailer*] > | power< 'filter' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.filtercó—|j|«ryg}d|vr)|dD]!}|j|j««Œ#d|vrÔ|jd«j«}|jt j k(rd|_t|«}t|jd«j«|jd«j«|jd«j«|«}tt j|g|zd¬«}nÞd|vr[ttd «td «|d j«td ««}tt j|g|zd¬«}nt|«ry|d j«}tt jtd «|gd¬«}tt jtd «t|g«g|z«}d|_|j|_|S)NÚextra_trailersÚ filter_lambdaÚxpÚÚfpÚit)ÚprefixÚnoneÚ_fÚseqÚargsÚfilterÚlist)Ú should_skipÚappendÚcloneÚgetÚtypeÚsymsÚtestrr rrÚpowerrr r)ÚselfÚnodeÚresultsÚtrailersÚtrÚnewrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_filter.pyÚ transformzFixFilter.transform:s¯€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ˜gÑ %Ø—‘˜TÓ"×(Ñ(Ó*ˆBØw‰wœ$Ÿ)™)Ò#Ø” Ü! "Ó%ä˜7Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4Ø"Ÿ;™; tÓ,×2Ñ2Ó4°bó:ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cà wÑ Üœ4 ›:Ü ›:Ø" 5™>×/Ñ/Ó1Ü ›:ó'ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?‰Cô" $Ô'Øà˜6‘?×(Ñ(Ó*ˆDÜ”t—z‘z¤D¨£N°DÐ#9À"ÔEˆCÜ”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr*©r+r)r r s„Ø€Mð€Gð<'€Gó$r+r N)Ú__doc__rrÚpytreerÚpygramrr Ú fixer_utilrrrr r ÚConditionalFixr r2r+r)Úr8s/ðñ õÝÝ+ßRÕRôG ×)Ñ)õGr+lib2to3/fixes/__pycache__/fix_reload.cpython-312.pyc000064400000002612152462633570016205 0ustar00Ë T—çh9ãóN—dZddlmZddlmZmZGd„dej «Zy)z5Fixer for reload(). reload(s) -> importlib.reload(s)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixReloadTÚprezÿ power< 'reload' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)Ú importlibÚreloadr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reload.pyÚ transformzFixReload.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ'ˆÜ˜D '¨5Ó1ˆÜT˜;¨Ô-؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr(s$ðñ$õ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_raw_input.cpython-312.pyc000064400000001660152462633570016751 0ustar00Ë T—çhÆãóJ—dZddlmZddlmZGd„dej «Zy)z2Fixer that changes raw_input(...) into input(...).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixRawInputTzU power< name='raw_input' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚinput)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_raw_input.pyÚ transformzFixRawInput.transforms"€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Õ7óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„à€Mð€Gó8rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ8õÝô 8*×$Ñ$õ 8rlib2to3/fixes/__pycache__/fix_asserts.cpython-312.opt-1.pyc000064400000002766152462633570017374 0ustar00Ë T—çhØãób—dZddlmZddlmZedddddd d dddddd d ¬ «ZGd„de«Zy)z5Fixer that replaces deprecated unittest method names.é)ÚBaseFix)ÚNameÚ assertTrueÚ assertEqualÚassertNotEqualÚassertAlmostEqualÚassertNotAlmostEqualÚ assertRegexÚassertRaisesRegexÚ assertRaisesÚ assertFalse)Úassert_Ú assertEqualsÚassertNotEqualsÚassertAlmostEqualsÚassertNotAlmostEqualsÚassertRegexpMatchesÚassertRaisesRegexpÚfailUnlessEqualÚ failIfEqualÚfailUnlessAlmostEqualÚfailIfAlmostEqualÚ failUnlessÚfailUnlessRaisesÚfailIfcóH—eZdZddjeee««zZd„Zy)Ú FixAssertszH power< any+ trailer< '.' meth=(%s)> any* > Ú|có€—|dd}|jttt|«|j¬««y)NÚmethé)Úprefix)ÚreplacerÚNAMESÚstrr")ÚselfÚnodeÚresultsÚnames ú2/usr/lib64/python3.12/lib2to3/fixes/fix_asserts.pyÚ transformzFixAsserts.transform s0€Øv‰˜qÑ!ˆØ ‰ ”Tœ%¤ D£ Ñ*°4·;±;Ô?Õ@óN) Ú__name__Ú __module__Ú __qualname__ÚjoinÚmapÚreprr$ÚPATTERNr+©r,r*rrs'„ðà—H‘H™S  uÓ-Ó.ñ/€GóAr,rN)Ú__doc__Ú fixer_baserÚ fixer_utilrÚdictr$rr4r,r*Úr9sRðÙ;õ!Ýá Ø ØØ$Ø*Ø0Ø%Ø*Ø!Ø Ø-Ø,ØØ#Ø ô €ô$AõAr,lib2to3/fixes/__pycache__/fix_dict.cpython-312.opt-1.pyc000064400000010610152462633570016616 0ustar00Ë T—çh°ãó–—dZddlmZddlmZddlmZddlmZmZmZddlmZejdhzZ Gd„d ej«Z y ) ajFixer for dict methods. d.keys() -> list(d.keys()) d.items() -> list(d.items()) d.values() -> list(d.values()) d.iterkeys() -> iter(d.keys()) d.iteritems() -> iter(d.items()) d.itervalues() -> iter(d.values()) d.viewkeys() -> d.keys() d.viewitems() -> d.items() d.viewvalues() -> d.values() Except in certain very specific contexts: the iter() can be dropped when the context is list(), sorted(), iter() or for...in; the list() can be dropped when the context is list() or sorted() (but not iter() or for...in!). Special contexts that apply to both: list(), sorted(), tuple() set(), any(), all(), sum(). Note: iter(d.keys()) could be written as iter(d) but since the original d.iterkeys() was also redundant we don't fix this. And there are (rare) contexts where it makes a difference (e.g. when passing it as an argument to a function that introspects the argument). é)Úpytree)Úpatcomp)Ú fixer_base)ÚNameÚCallÚDot)Ú fixer_utilÚitercóp—eZdZdZdZd„ZdZeje«Z dZ eje «Z d„Z y)ÚFixDictTa power< head=any+ trailer< '.' method=('keys'|'items'|'values'| 'iterkeys'|'iteritems'|'itervalues'| 'viewkeys'|'viewitems'|'viewvalues') > parens=trailer< '(' ')' > tail=any* > c ó—|d}|dd}|d}|j}|j}|jd«}|jd«} |s| r|dd}|D cgc]} | j«‘Œ}} |D cgc]} | j«‘Œ}} | xr|j ||«} |t j |jt«t||j¬«g«|d j«gz} t j |j| «} | s#| s!d | _ tt|rdnd «| g«} |r$t j |j| g|z«} |j| _ | Scc} wcc} w) NÚheadÚmethodéÚtailr Úviewé)ÚprefixÚparensÚÚlist) ÚsymsÚvalueÚ startswithÚcloneÚin_special_contextrÚNodeÚtrailerrrrÚpowerr)ÚselfÚnodeÚresultsrrrrÚ method_nameÚisiterÚisviewÚnÚspecialÚargsÚnews ú//usr/lib64/python3.12/lib2to3/fixes/fix_dict.pyÚ transformzFixDict.transform6sp€Øv‰ˆØ˜Ñ" 1Ñ%ˆØv‰ˆØy‰yˆØ—l‘lˆ Ø×'Ñ'¨Ó/ˆØ×'Ñ'¨Ó/ˆÙ ‘VØ% a b˜/ˆKá#'Ó(¡4˜a—‘•  4ˆÐ(Ù#'Ó(¡4˜a—‘•  4ˆÐ(Ø(ÒD˜t×6Ñ6°t¸VÓDˆØ”v—{‘{ 4§<¡<Ü$'£EÜ$(¨Ø06· ± ô%?ð$@óAð˜xÑ(×.Ñ.Ó0ð 2ñ2ˆô k‰k˜$Ÿ*™* dÓ+ˆÙ™6؈CŒJÜ”t¡f™F°&Ó9¸C¸5ÓAˆCÙ Ü—+‘+˜dŸj™j¨3¨%°$©,Ó7ˆCØ—[‘[ˆŒ ؈ ùò)ùÚ(s ÁE:Á7E?z3power< func=NAME trailer< '(' node=any ')' > any* >zmfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > cóŠ—|j€yi}|jjm|jj|jj|«r=|d|ur6|r|djtvS|djt j vS|sy|jj|j|«xr|d|uS)NFr!Úfunc)ÚparentÚp1ÚmatchrÚ iter_exemptr Úconsuming_callsÚp2)r r!r$r"s r*rzFixDict.in_special_contextZs®€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&Ùà˜v‘×,Ñ,´ Ð;Ð;ð˜v‘×,Ñ,´ ×0JÑ0JÐJÐJÙØàw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNóN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr+ÚP1rÚcompile_patternr/ÚP2r3r©r4r*r r )sM„Ø€Mð€Gòð8 ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€BóOr4r N) Ú__doc__rrrrr rrrr2r1ÚBaseFixr r=r4r*Úr@sHðñõ6ÝÝß(Ñ(Ýð×(Ñ(¨F¨8Ñ3€ ôAOˆj× Ñ õAOr4lib2to3/fixes/__pycache__/fix_xrange.cpython-312.opt-2.pyc000064400000007250152462633570017166 0ustar00Ë T—çh† ãó\— ddlmZddlmZmZmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNameÚCallÚconsuming_calls)Úpatcompc󔇗eZdZdZdZˆfd„Zd„Zd„Zd„Zd„Z dZ e je «Z d Ze je«Zd „ZˆxZS) Ú FixXrangeTzˆ power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cóL•—tt| ||«t«|_y©N)Úsuperr Ú start_treeÚsetÚtransformed_xranges)ÚselfÚtreeÚfilenameÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_xrange.pyr zFixXrange.start_treesø€Ü Œi˜Ñ)¨$°Ô9Ü#&£5ˆÕ ócó—d|_yr )r)rrrs rÚ finish_treezFixXrange.finish_trees €Ø#'ˆÕ rcó¸—|d}|jdk(r|j||«S|jdk(r|j||«Stt |««‚)NÚnameÚxrangeÚrange)ÚvalueÚtransform_xrangeÚtransform_rangeÚ ValueErrorÚrepr©rÚnodeÚresultsrs rÚ transformzFixXrange.transformsX€Øv‰ˆØ :‰:˜Ò !Ø×(Ñ(¨¨wÓ7Ð 7Ø Z‰Z˜7Ò "Ø×'Ñ'¨¨gÓ6Ð 6äœT $›ZÓ(Ð (rcó¢—|d}|jtd|j¬««|jj t |««y)Nrr©Úprefix)Úreplacerr'rÚaddÚidr!s rrzFixXrange.transform_xrange$s:€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Ô7à × Ñ ×$Ñ$¤R¨£XÕ.rcó"—t|«|jvrx|j|«sftt d«|dj «g«}tt d«|g|j ¬«}|dD]}|j|«Œ|Syy)NrÚargsÚlistr&Úrest)r*rÚin_special_contextrrÚcloner'Ú append_child)rr"r#Ú range_callÚ list_callÚns rrzFixXrange.transform_range*s‹€Ü ˆt‹H˜D×4Ñ4Ñ 4Ø×'Ñ'¨Ô-Üœd 7›m¨g°f©o×.CÑ.CÓ.EÐ-FÓGˆJäœT &›\¨J¨<Ø$(§K¡Kô1ˆIð˜V”_Ø×&Ñ& qÕ)ð%àÐ ð.ð 5rz3power< func=NAME trailer< '(' node=any ')' > any* >zŸfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > | comparison< any 'in' node=any any*> cóB—|j€yi}|jjL|jj|jj|«r|d|ur|djtvS|j j|j|«xr|d|uS)NFr"Úfunc)ÚparentÚp1ÚmatchrrÚp2)rr"r#s rr/zFixXrange.in_special_context?sˆ€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&à˜6‘?×(Ñ(¬OÐ;Ð ;àw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNr)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr rr$rrÚP1rÚcompile_patternr8ÚP2r:r/Ú __classcell__)rs@rr r sbø„Ø€Mð€Gô )ò(ò)ò/ò ð ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€Bö Orr N) ÚrÚ fixer_utilrrrrÚBaseFixr ©rrÚrHs,ðð6õß4Ñ4Ýô=O ×"Ñ"õ=Orlib2to3/fixes/__pycache__/fix_input.cpython-312.pyc000064400000002357152462633570016104 0ustar00Ë T—çhÄãó~—dZddlmZddlmZmZddlmZejd«ZGd„dej«Z y) z4Fixer that changes input(...) into eval(input(...)).é)Ú fixer_base)ÚCallÚName)Úpatcompz&power< 'eval' trailer< '(' any ')' > >có—eZdZdZdZd„Zy)ÚFixInputTzL power< 'input' args=trailer< '(' [any] ')' > > cóÈ—tj|jj«ry|j«}d|_t t d«|g|j¬«S)NÚÚeval)Úprefix)ÚcontextÚmatchÚparentÚcloner rr)ÚselfÚnodeÚresultsÚnews ú0/usr/lib64/python3.12/lib2to3/fixes/fix_input.pyÚ transformzFixInput.transformsF€ä =‰=˜Ÿ™×+Ñ+Ô ,Ø àj‰j‹lˆØˆŒ Ü”D˜“L 3 %°· ± Ô<Ð<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó=rrN) Ú__doc__r rÚ fixer_utilrrrÚcompile_patternr ÚBaseFixrrrrÚr"s:ðÙ:õß#Ýð "ˆ'× !Ñ !Ð"JÓ K€ô =ˆz×!Ñ!õ =rlib2to3/fixes/__pycache__/fix_imports2.cpython-312.opt-1.pyc000064400000001144152462633570017454 0ustar00Ë T—çh!ãóH—dZddlmZdddœZGd„dej«Zy)zTFix incompatible imports and module references that must be fixed after fix_imports.é)Ú fix_importsÚdbm)ÚwhichdbÚanydbmcó—eZdZdZeZy)Ú FixImports2éN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚMAPPINGÚmapping©óú3/usr/lib64/python3.12/lib2to3/fixes/fix_imports2.pyrr s „à€IàGrrN)Ú__doc__ÚrrÚ FixImportsrrrrÚrs.ðñåðØñ €ô +×(Ñ(õrlib2to3/fixes/__pycache__/fix_types.cpython-312.opt-1.pyc000064400000004345152462633570017047 0ustar00Ë T—çhîãóò—dZddlmZddlmZidd“dd“dd “d d “d d “dd “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d d%d&d'œ¥ZeDcgc]}d(|z‘Œ c}ZGd)„d*ej«Zy+cc}w),aÆFixer for removing uses of the types module. These work for only the known names in the types module. The forms above can include types. or not. ie, It is assumed the module is imported either as: import types from types import ... # either * or specific types The import statements are not modified. There should be another fixer that handles at least the following constants: type([]) -> list type(()) -> tuple type('') -> str é)Ú fixer_base)ÚNameÚ BooleanTypeÚboolÚ BufferTypeÚ memoryviewÚ ClassTypeÚtypeÚ ComplexTypeÚcomplexÚDictTypeÚdictÚDictionaryTypeÚ EllipsisTypeztype(Ellipsis)Ú FloatTypeÚfloatÚIntTypeÚintÚListTypeÚlistÚLongTypeÚ ObjectTypeÚobjectÚNoneTypez type(None)ÚNotImplementedTypeztype(NotImplemented)Ú SliceTypeÚsliceÚ StringTypeÚbytesÚ StringTypesz(str,)ÚtupleÚstrÚrange)Ú TupleTypeÚTypeTypeÚ UnicodeTypeÚ XRangeTypez)power< 'types' trailer< '.' name='%s' > >có8—eZdZdZdj e«Zd„Zy)ÚFixTypesTÚ|cóz—tj|dj«}|rt||j¬«Sy)NÚname)Úprefix)Ú _TYPE_MAPPINGÚgetÚvaluerr-)ÚselfÚnodeÚresultsÚ new_values ú0/usr/lib64/python3.12/lib2to3/fixes/fix_types.pyÚ transformzFixTypes.transform9s3€Ü!×%Ñ% g¨f¡o×&;Ñ&;Ó<ˆ ٠ܘ ¨$¯+©+Ô6Ð 6ØóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚjoinÚ_patsÚPATTERNr6©r7r5r)r)5s„Ø€MØh‰hu‹o€Gór7r)N) Ú__doc__ÚrÚ fixer_utilrr.r=ÚBaseFixr))Úts0r5ÚrEs,ðñõ&Ýðؘðà|ðð fðð ˜ ð ð Fð ð ˜6ð ð Ð)ðð Wðð 5ðð Fðð Eðð xðð Lðð Ð5ðð gð!ð" gð#ð$ ˜ð%ð&ØØØò-€ ñ2CPÓPÁ-¸QÐ 4°qÓ 8À-ÑP€ôˆz×!Ñ!õùò QsÁ A4lib2to3/fixes/__pycache__/fix_xreadlines.cpython-312.opt-1.pyc000064400000002402152462633570020031 0ustar00Ë T—çh±ãóJ—dZddlmZddlmZGd„dej «Zy)zpFix "for x in f.xreadlines()" -> "for x in f". This fixer will also convert g(f.xreadlines) into g(f.__iter__).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixXreadlinesTz‡ power< call=any+ trailer< '.' 'xreadlines' > trailer< '(' ')' > > | power< any+ trailer< '.' no_call='xreadlines' > > cóâ—|jd«}|r'|jtd|j¬««y|j|dDcgc]}|j «‘Œc}«ycc}w)NÚno_callÚ__iter__)ÚprefixÚcall)ÚgetÚreplacerr Úclone)ÚselfÚnodeÚresultsrÚxs ú5/usr/lib64/python3.12/lib2to3/fixes/fix_xreadlines.pyÚ transformzFixXreadlines.transformsR€Ø—+‘+˜iÓ(ˆá Ø O‰OœD °G·N±NÔCÕ Dà L‰L¨W°Vª_Ó=©_¨˜!Ÿ'™')¨_Ñ=Õ >ùÒ=sÁ A,N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©órrr s„Ø€Mð€Gó ?rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚr s%ðñDõ Ýô?J×&Ñ&õ?rlib2to3/fixes/__pycache__/fix_set_literal.cpython-312.opt-1.pyc000064400000005105152462633570020205 0ustar00Ë T—çh¡ãóR—dZddlmZmZddlmZmZGd„dej«Zy)z: Optional fixer to transform set() calls to set literals. é)Ú fixer_baseÚpytree)ÚtokenÚsymscó—eZdZdZdZdZd„Zy)Ú FixSetLiteralTajpower< 'set' trailer< '(' (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) > | single=any) ']' > | atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' > ) ')' > > có—|jd«}|rGtjtj|j «g«}|j |«|}n|d}tjtjd«g}|jd„|jD««|jtjtjd««|jj|d_tjtj |«}|j|_t#|j«dk(r=|jd}|j%«|j|jd_|S) NÚsingleÚitemsÚ{c3ó<K—|]}|j«–—Œy­w)N)Úclone)Ú.0Úns ú6/usr/lib64/python3.12/lib2to3/fixes/fix_set_literal.pyÚ z*FixSetLiteral.transform..'sèø€Ð9©. Qq—w‘w—y©.ùs‚Ú}éÿÿÿÿéé)ÚgetrÚNoderÚ listmakerrÚreplaceÚLeafrÚLBRACEÚextendÚchildrenÚappendÚRBRACEÚ next_siblingÚprefixÚ dictsetmakerÚlenÚremove) ÚselfÚnodeÚresultsr Úfaker ÚliteralÚmakerrs rÚ transformzFixSetLiteral.transforms€Ø—‘˜XÓ&ˆÙ ä—;‘;œtŸ~™~°· ± ³Ð/?Ó@ˆDØ N‰N˜4Ô Ø‰Eà˜GÑ$ˆEô—;‘;œuŸ|™|¨SÓ1Ð2ˆØ‰Ñ9¨%¯.ª.Ó9Ô9؉”v—{‘{¤5§<¡<°Ó5Ô6à"×/Ñ/×6Ñ6ˆ‰ ÔÜ— ‘ œD×-Ñ-¨wÓ7ˆØ—{‘{ˆŒ ô ˆu~‰~Ó  !Ò #Ø—‘˜qÑ!ˆAØ H‰HŒJØ()¯©ˆEN‰N˜2Ñ Ô %ðˆ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr,©r-rrr s„à€MØ€Hð€Gór-rN) Ú__doc__Úlib2to3rrÚlib2to3.fixer_utilrrÚBaseFixrr4r-rÚr9s$ðñ÷ 'ß*ô)J×&Ñ&õ)r-lib2to3/fixes/__pycache__/fix_reduce.cpython-312.pyc000064400000002303152462633570016203 0ustar00Ë T—çhEãóJ—dZddlmZddlmZGd„dej «Zy)zqFixer for reduce(). Makes sure reduce() is imported from the functools module if reduce is used in that module. é)Ú fixer_base©Ú touch_importcó—eZdZdZdZdZd„Zy)Ú FixReduceTÚpreai power< 'reduce' trailer< '(' arglist< ( (not(argument) any ',' not(argument > có—tdd|«y)NÚ functoolsÚreducer)ÚselfÚnodeÚresultss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reduce.pyÚ transformzFixReduce.transform"s€Ü[ (¨DÕ1óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrrs„à€MØ €Eð €Gó2rrN)Ú__doc__Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ðñõ Ý+ô2 ×"Ñ"õ2rlib2to3/fixes/__pycache__/fix_exitfunc.cpython-312.pyc000064400000006763152462633570016577 0ustar00Ë T—çh¿ ãób—dZddlmZmZddlmZmZmZmZm Z m Z Gd„dej«Z y)z7 Convert use of sys.exitfunc to use the atexit module. é)ÚpytreeÚ fixer_base)ÚNameÚAttrÚCallÚCommaÚNewlineÚsymscó:‡—eZdZdZdZdZˆfd„Zˆfd„Zd„ZˆxZ S)Ú FixExitfuncTa” ( sys_import=import_name<'import' ('sys' | dotted_as_names< (any ',')* 'sys' (',' any)* > ) > | expr_stmt< power< 'sys' trailer< '.' 'exitfunc' > > '=' func=any > ) có&•—tt| |Žy©N)Úsuperr Ú__init__)ÚselfÚargsÚ __class__s €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_exitfunc.pyrzFixExitfunc.__init__sø€Ü Œk˜4Ñ)¨4Ò0ócó<•—tt| ||«d|_yr)rr Ú start_treeÚ sys_import)rÚtreeÚfilenamers €rrzFixExitfunc.start_tree!sø€Ü Œk˜4Ñ+¨D°(Ô;؈rc ó—d|vr|j€ |d|_y|dj«}d|_tjt j ttd«td«««}t||g|j«}|j|«|j€|j|d«y|jjd}|jt jk(r5|jt!««|jtdd««y|jj"}|jj%|j«}|j"} tjt j&td «tdd«g«} tjt j(| g«} |j+|dzt-««|j+|d z| «y) NrÚfuncÚÚatexitÚregisterzKCan't find sys import; Please add an atexit import at the top of your file.éÚ Úimporté)rÚcloneÚprefixrÚNoder ÚpowerrrrÚreplaceÚwarningÚchildrenÚtypeÚdotted_as_namesÚ append_childrÚparentÚindexÚ import_nameÚ simple_stmtÚ insert_childr ) rÚnodeÚresultsrrÚcallÚnamesÚcontaining_stmtÚpositionÚstmt_containerÚ new_importÚnews rÚ transformzFixExitfunc.transform%s”€à ˜7Ñ "؉Ð&Ø")¨,Ñ"7”Ø àv‰×$Ñ$Ó&ˆØˆŒ Ü—;‘;œtŸz™zÜ#¤D¨£N´D¸Ó4DÓEó!ˆôH˜t˜f d§k¡kÓ2ˆØ ‰ TÔà ?‰?Ð "à L‰L˜ð ?ô @à ð—‘×(Ñ(¨Ñ+ˆØ :‰:œ×-Ñ-Ò -Ø × Ñ œu›wÔ 'Ø × Ñ œt H¨cÓ2Õ 3à"Ÿo™o×4Ñ4ˆOØ&×/Ñ/×5Ñ5°d·o±oÓFˆHØ,×3Ñ3ˆNÜŸ™¤T×%5Ñ%5Ü# H›~¬t°H¸cÓ/BÐCó ˆJô—+‘+œd×.Ñ.°° Ó=ˆCØ × (Ñ (¨°A©´w³yÔ AØ × (Ñ (¨°A©°sÕ ;r) Ú__name__Ú __module__Ú __qualname__Úkeep_line_orderÚ BM_compatibleÚPATTERNrrr<Ú __classcell__)rs@rr r s#ø„Ø€OØ€Mð €Gô1ôö#rIs'ðñ÷ 'ßE×Eô=<*×$Ñ$õ= f.__x__).é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixFuncattrsTzß power< any+ trailer< '.' attr=('func_closure' | 'func_doc' | 'func_globals' | 'func_name' | 'func_defaults' | 'func_code' | 'func_dict') > any* > có€—|dd}|jtd|jddz|j¬««y)NÚattréz__%s__é)Úprefix)ÚreplacerÚvaluer )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_funcattrs.pyÚ transformzFixFuncattrs.transforms;€Øv‰˜qÑ!ˆØ ‰ ”T˜8 d§j¡j°° nÑ4Ø!%§¡ô.õ /óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó /rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ9õÝô /:×%Ñ%õ /rlib2to3/fixes/__pycache__/fix_funcattrs.cpython-312.opt-2.pyc000064400000002116152462633570017707 0ustar00Ë T—çh„ãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixFuncattrsTzß power< any+ trailer< '.' attr=('func_closure' | 'func_doc' | 'func_globals' | 'func_name' | 'func_defaults' | 'func_code' | 'func_dict') > any* > có€—|dd}|jtd|jddz|j¬««y)NÚattréz__%s__é)Úprefix)ÚreplacerÚvaluer )ÚselfÚnodeÚresultsrs ú4/usr/lib64/python3.12/lib2to3/fixes/fix_funcattrs.pyÚ transformzFixFuncattrs.transforms;€Øv‰˜qÑ!ˆØ ‰ ”T˜8 d§j¡j°° nÑ4Ø!%§¡ô.õ /óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó /rrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðØ9õÝô /:×%Ñ%õ /rlib2to3/fixes/__pycache__/fix_ws_comma.cpython-312.opt-2.pyc000064400000002533152462633570017506 0ustar00Ë T—çhBãóT— ddlmZddlmZddlmZGd„dej «Zy)é)Úpytree)Útoken)Ú fixer_basecó–—eZdZdZdZej ejd«Zej ejd«Z ee fZ d„Z y)Ú FixWsCommaTzH any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]> Ú,Ú:cóî—|j«}d}|jD]S}||jvr*|j}|j «r d|vrd|_d}Œ;|r|j}|sd|_d}ŒU|S)NFÚ ÚTÚ )ÚcloneÚchildrenÚSEPSÚprefixÚisspace)ÚselfÚnodeÚresultsÚnewÚcommaÚchildrs ú3/usr/lib64/python3.12/lib2to3/fixes/fix_ws_comma.pyÚ transformzFixWsComma.transformst€Øj‰j‹lˆØˆØ—\”\ˆEؘŸ ™ Ñ!ØŸ™Ø—>‘>Ô#¨°FÑ(:Ø#%E”LØ‘áØ"Ÿ\™\FÙ!Ø'*˜œ Ø‘ð"ðˆ óN) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚPATTERNrÚLeafrÚCOMMAÚCOLONrr©rrrr sJ„à€Hð€Gð ˆFK‰K˜Ÿ ™  SÓ )€EØ ˆFK‰K˜Ÿ ™  SÓ )€EØ 5ˆ>€DórrN)r rÚpgen2rrÚBaseFixrr$rrÚr's'ððõÝÝô×#Ñ#õrlib2to3/fixes/__pycache__/fix_types.cpython-312.pyc000064400000004345152462633570016110 0ustar00Ë T—çhîãóò—dZddlmZddlmZidd“dd“dd “d d “d d “dd “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d d%d&d'œ¥ZeDcgc]}d(|z‘Œ c}ZGd)„d*ej«Zy+cc}w),aÆFixer for removing uses of the types module. These work for only the known names in the types module. The forms above can include types. or not. ie, It is assumed the module is imported either as: import types from types import ... # either * or specific types The import statements are not modified. There should be another fixer that handles at least the following constants: type([]) -> list type(()) -> tuple type('') -> str é)Ú fixer_base)ÚNameÚ BooleanTypeÚboolÚ BufferTypeÚ memoryviewÚ ClassTypeÚtypeÚ ComplexTypeÚcomplexÚDictTypeÚdictÚDictionaryTypeÚ EllipsisTypeztype(Ellipsis)Ú FloatTypeÚfloatÚIntTypeÚintÚListTypeÚlistÚLongTypeÚ ObjectTypeÚobjectÚNoneTypez type(None)ÚNotImplementedTypeztype(NotImplemented)Ú SliceTypeÚsliceÚ StringTypeÚbytesÚ StringTypesz(str,)ÚtupleÚstrÚrange)Ú TupleTypeÚTypeTypeÚ UnicodeTypeÚ XRangeTypez)power< 'types' trailer< '.' name='%s' > >có8—eZdZdZdj e«Zd„Zy)ÚFixTypesTÚ|cóz—tj|dj«}|rt||j¬«Sy)NÚname)Úprefix)Ú _TYPE_MAPPINGÚgetÚvaluerr-)ÚselfÚnodeÚresultsÚ new_values ú0/usr/lib64/python3.12/lib2to3/fixes/fix_types.pyÚ transformzFixTypes.transform9s3€Ü!×%Ñ% g¨f¡o×&;Ñ&;Ó<ˆ ٠ܘ ¨$¯+©+Ô6Ð 6ØóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚjoinÚ_patsÚPATTERNr6©r7r5r)r)5s„Ø€MØh‰hu‹o€Gór7r)N) Ú__doc__ÚrÚ fixer_utilrr.r=ÚBaseFixr))Úts0r5ÚrEs,ðñõ&Ýðؘðà|ðð fðð ˜ ð ð Fð ð ˜6ð ð Ð)ðð Wðð 5ðð Fðð Eðð xðð Lðð Ð5ðð gð!ð" gð#ð$ ˜ð%ð&ØØØò-€ ñ2CPÓPÁ-¸QÐ 4°qÓ 8À-ÑP€ôˆz×!Ñ!õùò QsÁ A4lib2to3/fixes/__pycache__/fix_future.cpython-312.opt-1.pyc000064400000001617152462633570017214 0ustar00Ë T—çh#ãóJ—dZddlmZddlmZGd„dej «Zy)zVRemove __future__ imports from __future__ import foo is replaced with an empty line. é)Ú fixer_base)Ú BlankLinecó—eZdZdZdZdZd„Zy)Ú FixFutureTz;import_from< 'from' module_name="__future__" 'import' any >é có<—t«}|j|_|S)N)rÚprefix)ÚselfÚnodeÚresultsÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_future.pyÚ transformzFixFuture.transforms€Ü‹kˆØ—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr©rrrr s„Ø€MàO€Gð€IórrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñõÝ"ô  ×"Ñ"õ rlib2to3/fixes/__pycache__/fix_sys_exc.cpython-312.pyc000064400000003734152462633570016422 0ustar00Ë T—çh ãób—dZddlmZddlmZmZmZmZmZm Z m Z Gd„dej«Z y)z˜Fixer for sys.exc_{type, value, traceback} sys.exc_type -> sys.exc_info()[0] sys.exc_value -> sys.exc_info()[1] sys.exc_traceback -> sys.exc_info()[2] é)Ú fixer_base)ÚAttrÚCallÚNameÚNumberÚ SubscriptÚNodeÚsymscóT—eZdZgd¢ZdZddj d„eD««zZd„Zy)Ú FixSysExc)Úexc_typeÚ exc_valueÚ exc_tracebackTzN power< 'sys' trailer< dot='.' attribute=(%s) > > Ú|c#ó&K—|] }d|z–—Œ y­w)z'%s'N©)Ú.0Úes ú2/usr/lib64/python3.12/lib2to3/fixes/fix_sys_exc.pyÚ zFixSysExc.sèø€Ð:±¨A˜V aZ±ùs‚có —|dd}t|jj|j««}t t d«|j ¬«}tt d«|«}|dj |djd_|jt|««ttj||j ¬«S)NÚ attributeéÚexc_info)ÚprefixÚsysÚdoté)rrÚindexÚvaluerrrrÚchildrenÚappendrr r Úpower)ÚselfÚnodeÚresultsÚsys_attrrÚcallÚattrs rÚ transformzFixSysExc.transformsœ€Ø˜;Ñ'¨Ñ*ˆÜt—}‘}×*Ñ*¨8¯>©>Ó:Ó;ˆä”D˜Ó$¨X¯_©_Ô=ˆÜ”D˜“K Ó&ˆØ%,¨U¡^×%:Ñ%:ˆˆQ‰×јÑÔ"Ø ‰ ”I˜eÓ$Ô%Ü”D—J‘J ¨T¯[©[Ô9Ð9óN)Ú__name__Ú __module__Ú __qualname__rÚ BM_compatibleÚjoinÚPATTERNr*rr+rr r s/„â9€HØ€Mðà—H‘HÑ:±Ó:Ó:ñ;€Gó:r+r N) Ú__doc__ÚrÚ fixer_utilrrrrrr r ÚBaseFixr rr+rÚr6s*ðñõßH×HÑHô: ×"Ñ"õ:r+lib2to3/fixes/__pycache__/fix_basestring.cpython-312.opt-2.pyc000064400000001333152462633570020037 0ustar00Ë T—çh@ãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixBasestringTz 'basestring'có0—td|j¬«S)NÚstr)Úprefix)rr )ÚselfÚnodeÚresultss ú5/usr/lib64/python3.12/lib2to3/fixes/fix_basestring.pyÚ transformzFixBasestring.transform s€ÜE $§+¡+Ô.Ð.óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rrs„Ø€Mà€Gó/rrN)ÚrÚ fixer_utilrÚBaseFixrrrr Úrs"ðØ"õÝô/J×&Ñ&õ/rlib2to3/fixes/__pycache__/fix_throw.cpython-312.pyc000064400000004617152462633570016111 0ustar00Ë T—çh.ãór—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z Gd„dej«Z y) zÖFixer for generator.throw(E, V, T). g.throw(E) -> g.throw(E) g.throw(E, V) -> g.throw(E(V)) g.throw(E, V, T) -> g.throw(E(V).with_traceback(T)) g.throw("foo"[, V[, T]]) will warn about string exceptions.é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚArgListÚAttrÚis_tuplecó—eZdZdZdZd„Zy)ÚFixThrowTzÉ power< any trailer< '.' 'throw' > trailer< '(' args=arglist< exc=any ',' val=any [',' tb=any] > ')' > > | power< any trailer< '.' 'throw' > trailer< '(' exc=any ')' > > có¬—|j}|dj«}|jtjur|j |d«y|j d«}|€y|j«}t|«r+|jddDcgc]}|j«‘Œ}}n d|_ |g}|d}d|vry|dj«} d| _ t||«} t| td ««t| g«gz} |jtj |j"| ««y|jt||««ycc}w) NÚexcz+Python 3 does not support string exceptionsÚvalééÿÿÿÿÚÚargsÚtbÚwith_traceback)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertÚgetr ÚchildrenÚprefixrr rrÚreplacerÚNodeÚpower) ÚselfÚnodeÚresultsrrrÚcrÚ throw_argsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_throw.pyÚ transformzFixThrow.transforms)€Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ñ #Ø × Ñ  Ð&SÔ TØ ðk‰k˜%Ó ˆØ ˆ;Ø ài‰i‹kˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà˜V‘_ˆ à 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIäS˜$“ˆAܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGØ × Ñ œvŸ{™{¨4¯:©:°wÓ?Õ @à × Ñ œt C¨›Õ /ùò;sÂEN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©ór(r r s„Ø€Mð€Gó0r0r N)Ú__doc__rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r/r0r(Úr5s-ðñ?õÝÝß<Õ<ô(0ˆz×!Ñ!õ(0r0lib2to3/fixes/__pycache__/fix_reduce.cpython-312.opt-1.pyc000064400000002303152462633570017142 0ustar00Ë T—çhEãóJ—dZddlmZddlmZGd„dej «Zy)zqFixer for reduce(). Makes sure reduce() is imported from the functools module if reduce is used in that module. é)Ú fixer_base©Ú touch_importcó—eZdZdZdZdZd„Zy)Ú FixReduceTÚpreai power< 'reduce' trailer< '(' arglist< ( (not(argument) any ',' not(argument > có—tdd|«y)NÚ functoolsÚreducer)ÚselfÚnodeÚresultss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reduce.pyÚ transformzFixReduce.transform"s€Ü[ (¨DÕ1óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrrs„à€MØ €Eð €Gó2rrN)Ú__doc__Úlib2to3rÚlib2to3.fixer_utilrÚBaseFixrrrrÚrs$ðñõ Ý+ô2 ×"Ñ"õ2rlib2to3/fixes/__pycache__/fix_tuple_params.cpython-312.opt-2.pyc000064400000016514152462633570020401 0ustar00Ë T—çh½ãó˜— ddlmZddlmZddlmZddlmZmZmZm Z m Z m Z d„Z Gd„dej«Zd„Zd „Zgd fd „Zd „Zy ) é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚNameÚNewlineÚNumberÚ SubscriptÚsymscóŽ—t|tj«xr*|jdjt j k(S)Né)Ú isinstancerÚNodeÚchildrenÚtyperÚSTRING)Ústmts ú7/usr/lib64/python3.12/lib2to3/fixes/fix_tuple_params.pyÚ is_docstringrs5€Ü dœFŸK™KÓ (ò 1Ø =‰=˜Ñ × Ñ ¤E§L¡LÑ 0ð1ócó$—eZdZdZdZdZd„Zd„Zy)ÚFixTupleParamséTa funcdef< 'def' any parameters< '(' args=any ')' > ['->' any] ':' suite=any+ > | lambda= lambdef< 'lambda' args=vfpdef< '(' inner=any ')' > ':' body=any > cóð‡‡ ‡ —d|vr‰j||«SgŠ |d}|d}|djdjtjk(r)d}|djdj }t «Š n(d}d}tjtjd«Š d ˆ ˆ ˆfd „ }|jtjk(r ||«ne|jtjk(rHt|j«D]0\}} | jtjk(sŒ$|| |dkD¬ «Œ2‰ sy‰ D] } |d| _ Œ|} |dk(r d ‰ d_n*t|dj|«r|‰ d_|dz} ‰ D] } |d| _ Œ‰ |dj| | t!| dz| t#‰ «zdz«D]}||dj|_Œ|dj%«y) NÚlambdaÚsuiteÚargsr érz; ÚcóT•—t‰j««}|j«}d|_t ||j««}|rd|_|j |«‰j tjtj|‰j«g««y)NrÚ ) rÚnew_nameÚcloneÚprefixrÚreplaceÚappendrrr Ú simple_stmt)Ú tuple_argÚ add_prefixÚnÚargrÚendÚ new_linesÚselfs €€€rÚ handle_tuplez.FixTupleParams.transform..handle_tupleCsø€ÜT—]‘]“_Ó%ˆAØ—/‘/Ó#ˆC؈CŒJܘ#˜qŸw™w›yÓ)ˆDÙØ”Ø × Ñ ˜aÔ Ø × Ñ œVŸ[™[¬×)9Ñ)9Ø*.°· ± ³ Ð)<ó>õ ?r)r)r!)F)Útransform_lambdarrrÚINDENTÚvaluerrÚLeafr ÚtfpdefÚ typedargslistÚ enumerateÚparentr$rÚrangeÚlenÚchanged)r.ÚnodeÚresultsrrÚstartÚindentr/Úir+ÚlineÚafterr,r-s` @@rÚ transformzFixTupleParams.transform.sßú€Ø wÑ Ø×(Ñ(¨¨wÓ7Ð 7àˆ Ø˜Ñ ˆØv‰ˆð ‰8× Ñ ˜QÑ × $Ñ $¬¯ © Ò 4؈Eؘ1‘X×&Ñ& qÑ)×/Ñ/ˆFÜ“)‰CàˆE؈FÜ—+‘+œeŸl™l¨BÓ/ˆC÷ ?ð 9‰9œŸ ™ Ò #Ù ˜Õ Ø Y‰Yœ$×,Ñ,Ò ,Ü# D§M¡MÖ2‘3Ø—8‘8œtŸ{™{Ó*ñ! °!°a±%Ö9ð 3ñ Ø óˆDØ ™(ˆDKððˆØ AŠ:Ø"%ˆIa‰LÕ Ü ˜% ™(×+Ñ+¨EÑ2Ô 3Ø"(ˆIa‰LÔ Ø˜A‘IˆEãˆDØ ™(ˆDKðà)2ˆˆa‰×ј% Ð&Üu˜Q‘w ¤c¨)£nÑ 4°QÑ 6Ö7ˆAØ*0ˆE!‰H× Ñ ˜aÑ Õ 'ð8à ˆa‰×ÑÕrcó —|d}|d}t|d«}|jtjk(r)|j «}d|_|j |«yt|«}t|«}|jt|««}t|d¬«} |j | j ««|j«D]±} | jtjk(sŒ!| j|vsŒ0|| jD cgc]} | j «‘Œ} } tjt j"| j «g| z«} | j | _| j | «Œ³ycc} w)NrÚbodyÚinnerr!)r$)Ú simplify_argsrrÚNAMEr#r$r%Ú find_paramsÚ map_to_indexr"Ú tuple_namerÚ post_orderr2rrr Úpower)r.r;r<rrDrEÚparamsÚto_indexÚtup_nameÚ new_paramr*ÚcÚ subscriptsÚnews rr0zFixTupleParams.transform_lambdans-€Øv‰ˆØv‰ˆÜ˜g gÑ.Ó/ˆð :‰:œŸ™Ò #Ø—K‘K“MˆE؈EŒLØ L‰L˜Ô Ø ä˜TÓ"ˆÜ Ó'ˆØ—=‘=¤¨FÓ!3Ó4ˆä˜¨#Ô.ˆ Ø ‰ Y—_‘_Ó&Ô'Ø—‘Ö"ˆAØv‰vœŸ™Ó#¨¯©°8Ò(;Ø19¸!¿'¹'Ò1BÓCÑ1B¨A˜aŸg™giÐ1B ÐCÜ—k‘k¤$§*¡*Ø#,§?¡?Ó#4Ð"5¸ Ñ"BóDàŸX™X” Ø— ‘ ˜#•ñ #ùâCsÄ FN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚ BM_compatibleÚPATTERNrBr0©rrrrs„Ø€Ià€Mð€Gò>ó@rrcóL—|jtjtjfvr|S|jtj k(rL|jtj k(r-|j d}|jtj k(rŒ-|Std|z«‚)NrzReceived unexpected node %s)rr ÚvfplistrrGÚvfpdefrÚ RuntimeError)r;s rrFrF‹sx€Ø ‡yy”T—\‘\¤5§:¡:Ð.Ñ.؈ Ø ‰”d—k‘kÒ !ði‰iœ4Ÿ;™;Ò&Ø—=‘= Ñ#ˆDði‰iœ4Ÿ;™;Ó&àˆ Ü Ð4°tÑ;Ó <Ð}t|t«r|jt|««Œ.|j|«Œ@dj |«S)NÚ_)rrdr&rJÚjoin)reÚlrfs rrJrJ¨sF€Ø €AÛˆÜ cœ4Ô Ø H‰H”Z “_Õ %à H‰HSMð ð 8‰8A‹;Ðr)rrÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrFrHrIrJrZrrÚrosQððõ*ÝÝßG×Gò1ôgZ×'Ñ'ôgòX =òLð%'¨$ó  órlib2to3/fixes/__pycache__/fix_asserts.cpython-312.opt-2.pyc000064400000002664152462633570017372 0ustar00Ë T—çhØãó`— ddlmZddlmZeddddddd dddddd d ¬ «ZGd „de«Zy)é)ÚBaseFix)ÚNameÚ assertTrueÚ assertEqualÚassertNotEqualÚassertAlmostEqualÚassertNotAlmostEqualÚ assertRegexÚassertRaisesRegexÚ assertRaisesÚ assertFalse)Úassert_Ú assertEqualsÚassertNotEqualsÚassertAlmostEqualsÚassertNotAlmostEqualsÚassertRegexpMatchesÚassertRaisesRegexpÚfailUnlessEqualÚ failIfEqualÚfailUnlessAlmostEqualÚfailIfAlmostEqualÚ failUnlessÚfailUnlessRaisesÚfailIfcóH—eZdZddjeee««zZd„Zy)Ú FixAssertszH power< any+ trailer< '.' meth=(%s)> any* > Ú|có€—|dd}|jttt|«|j¬««y)NÚmethé)Úprefix)ÚreplacerÚNAMESÚstrr")ÚselfÚnodeÚresultsÚnames ú2/usr/lib64/python3.12/lib2to3/fixes/fix_asserts.pyÚ transformzFixAsserts.transform s0€Øv‰˜qÑ!ˆØ ‰ ”Tœ%¤ D£ Ñ*°4·;±;Ô?Õ@óN) Ú__name__Ú __module__Ú __qualname__ÚjoinÚmapÚreprr$ÚPATTERNr+©r,r*rrs'„ðà—H‘H™S  uÓ-Ó.ñ/€GóAr,rN)Ú fixer_baserÚ fixer_utilrÚdictr$rr4r,r*Úr8sRðØ;õ!Ýá Ø ØØ$Ø*Ø0Ø%Ø*Ø!Ø Ø-Ø,ØØ#Ø ô €ô$AõAr,lib2to3/fixes/__pycache__/fix_exitfunc.cpython-312.opt-2.pyc000064400000006657152462633570017541 0ustar00Ë T—çh¿ ãó`— ddlmZmZddlmZmZmZmZmZm Z Gd„dej«Z y)é)ÚpytreeÚ fixer_base)ÚNameÚAttrÚCallÚCommaÚNewlineÚsymscó:‡—eZdZdZdZdZˆfd„Zˆfd„Zd„ZˆxZ S)Ú FixExitfuncTa” ( sys_import=import_name<'import' ('sys' | dotted_as_names< (any ',')* 'sys' (',' any)* > ) > | expr_stmt< power< 'sys' trailer< '.' 'exitfunc' > > '=' func=any > ) có&•—tt| |Žy©N)Úsuperr Ú__init__)ÚselfÚargsÚ __class__s €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_exitfunc.pyrzFixExitfunc.__init__sø€Ü Œk˜4Ñ)¨4Ò0ócó<•—tt| ||«d|_yr)rr Ú start_treeÚ sys_import)rÚtreeÚfilenamers €rrzFixExitfunc.start_tree!sø€Ü Œk˜4Ñ+¨D°(Ô;؈rc ó—d|vr|j€ |d|_y|dj«}d|_tjt j ttd«td«««}t||g|j«}|j|«|j€|j|d«y|jjd}|jt jk(r5|jt!««|jtdd««y|jj"}|jj%|j«}|j"} tjt j&td «tdd«g«} tjt j(| g«} |j+|dzt-««|j+|d z| «y) NrÚfuncÚÚatexitÚregisterzKCan't find sys import; Please add an atexit import at the top of your file.éÚ Úimporté)rÚcloneÚprefixrÚNoder ÚpowerrrrÚreplaceÚwarningÚchildrenÚtypeÚdotted_as_namesÚ append_childrÚparentÚindexÚ import_nameÚ simple_stmtÚ insert_childr ) rÚnodeÚresultsrrÚcallÚnamesÚcontaining_stmtÚpositionÚstmt_containerÚ new_importÚnews rÚ transformzFixExitfunc.transform%s”€à ˜7Ñ "؉Ð&Ø")¨,Ñ"7”Ø àv‰×$Ñ$Ó&ˆØˆŒ Ü—;‘;œtŸz™zÜ#¤D¨£N´D¸Ó4DÓEó!ˆôH˜t˜f d§k¡kÓ2ˆØ ‰ TÔà ?‰?Ð "à L‰L˜ð ?ô @à ð—‘×(Ñ(¨Ñ+ˆØ :‰:œ×-Ñ-Ò -Ø × Ñ œu›wÔ 'Ø × Ñ œt H¨cÓ2Õ 3à"Ÿo™o×4Ñ4ˆOØ&×/Ñ/×5Ñ5°d·o±oÓFˆHØ,×3Ñ3ˆNÜŸ™¤T×%5Ñ%5Ü# H›~¬t°H¸cÓ/BÐCó ˆJô—+‘+œd×.Ñ.°° Ó=ˆCØ × (Ñ (¨°A©´w³yÔ AØ × (Ñ (¨°A©°sÕ ;r) Ú__name__Ú __module__Ú __qualname__Úkeep_line_orderÚ BM_compatibleÚPATTERNrrr<Ú __classcell__)rs@rr r s#ø„Ø€OØ€Mð €Gô1ôö#rHs'ðð÷ 'ßE×Eô=<*×$Ñ$õ= rest=any* > cóL•—tt| ||«t«|_y©N)Úsuperr Ú start_treeÚsetÚtransformed_xranges)ÚselfÚtreeÚfilenameÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_xrange.pyr zFixXrange.start_treesø€Ü Œi˜Ñ)¨$°Ô9Ü#&£5ˆÕ ócó—d|_yr )r)rrrs rÚ finish_treezFixXrange.finish_trees €Ø#'ˆÕ rcó¸—|d}|jdk(r|j||«S|jdk(r|j||«Stt |««‚)NÚnameÚxrangeÚrange)ÚvalueÚtransform_xrangeÚtransform_rangeÚ ValueErrorÚrepr©rÚnodeÚresultsrs rÚ transformzFixXrange.transformsX€Øv‰ˆØ :‰:˜Ò !Ø×(Ñ(¨¨wÓ7Ð 7Ø Z‰Z˜7Ò "Ø×'Ñ'¨¨gÓ6Ð 6äœT $›ZÓ(Ð (rcó¢—|d}|jtd|j¬««|jj t |««y)Nrr©Úprefix)Úreplacerr'rÚaddÚidr!s rrzFixXrange.transform_xrange$s:€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Ô7à × Ñ ×$Ñ$¤R¨£XÕ.rcó"—t|«|jvrx|j|«sftt d«|dj «g«}tt d«|g|j ¬«}|dD]}|j|«Œ|Syy)NrÚargsÚlistr&Úrest)r*rÚin_special_contextrrÚcloner'Ú append_child)rr"r#Ú range_callÚ list_callÚns rrzFixXrange.transform_range*s‹€Ü ˆt‹H˜D×4Ñ4Ñ 4Ø×'Ñ'¨Ô-Üœd 7›m¨g°f©o×.CÑ.CÓ.EÐ-FÓGˆJäœT &›\¨J¨<Ø$(§K¡Kô1ˆIð˜V”_Ø×&Ñ& qÕ)ð%àÐ ð.ð 5rz3power< func=NAME trailer< '(' node=any ')' > any* >zŸfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > | comparison< any 'in' node=any any*> cóB—|j€yi}|jjL|jj|jj|«r|d|ur|djtvS|j j|j|«xr|d|uS)NFr"Úfunc)ÚparentÚp1ÚmatchrrÚp2)rr"r#s rr/zFixXrange.in_special_context?sˆ€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&à˜6‘?×(Ñ(¬OÐ;Ð ;àw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNr)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr rr$rrÚP1rÚcompile_patternr8ÚP2r:r/Ú __classcell__)rs@rr r sbø„Ø€Mð€Gô )ò(ò)ò/ò ð ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€Bö Orr N) Ú__doc__ÚrÚ fixer_utilrrrrÚBaseFixr ©rrÚrIs,ðñ6õß4Ñ4Ýô=O ×"Ñ"õ=Orlib2to3/fixes/__pycache__/fix_exitfunc.cpython-312.opt-1.pyc000064400000006763152462633570017536 0ustar00Ë T—çh¿ ãób—dZddlmZmZddlmZmZmZmZm Z m Z Gd„dej«Z y)z7 Convert use of sys.exitfunc to use the atexit module. é)ÚpytreeÚ fixer_base)ÚNameÚAttrÚCallÚCommaÚNewlineÚsymscó:‡—eZdZdZdZdZˆfd„Zˆfd„Zd„ZˆxZ S)Ú FixExitfuncTa” ( sys_import=import_name<'import' ('sys' | dotted_as_names< (any ',')* 'sys' (',' any)* > ) > | expr_stmt< power< 'sys' trailer< '.' 'exitfunc' > > '=' func=any > ) có&•—tt| |Žy©N)Úsuperr Ú__init__)ÚselfÚargsÚ __class__s €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_exitfunc.pyrzFixExitfunc.__init__sø€Ü Œk˜4Ñ)¨4Ò0ócó<•—tt| ||«d|_yr)rr Ú start_treeÚ sys_import)rÚtreeÚfilenamers €rrzFixExitfunc.start_tree!sø€Ü Œk˜4Ñ+¨D°(Ô;؈rc ó—d|vr|j€ |d|_y|dj«}d|_tjt j ttd«td«««}t||g|j«}|j|«|j€|j|d«y|jjd}|jt jk(r5|jt!««|jtdd««y|jj"}|jj%|j«}|j"} tjt j&td «tdd«g«} tjt j(| g«} |j+|dzt-««|j+|d z| «y) NrÚfuncÚÚatexitÚregisterzKCan't find sys import; Please add an atexit import at the top of your file.éÚ Úimporté)rÚcloneÚprefixrÚNoder ÚpowerrrrÚreplaceÚwarningÚchildrenÚtypeÚdotted_as_namesÚ append_childrÚparentÚindexÚ import_nameÚ simple_stmtÚ insert_childr ) rÚnodeÚresultsrrÚcallÚnamesÚcontaining_stmtÚpositionÚstmt_containerÚ new_importÚnews rÚ transformzFixExitfunc.transform%s”€à ˜7Ñ "؉Ð&Ø")¨,Ñ"7”Ø àv‰×$Ñ$Ó&ˆØˆŒ Ü—;‘;œtŸz™zÜ#¤D¨£N´D¸Ó4DÓEó!ˆôH˜t˜f d§k¡kÓ2ˆØ ‰ TÔà ?‰?Ð "à L‰L˜ð ?ô @à ð—‘×(Ñ(¨Ñ+ˆØ :‰:œ×-Ñ-Ò -Ø × Ñ œu›wÔ 'Ø × Ñ œt H¨cÓ2Õ 3à"Ÿo™o×4Ñ4ˆOØ&×/Ñ/×5Ñ5°d·o±oÓFˆHØ,×3Ñ3ˆNÜŸ™¤T×%5Ñ%5Ü# H›~¬t°H¸cÓ/BÐCó ˆJô—+‘+œd×.Ñ.°° Ó=ˆCØ × (Ñ (¨°A©´w³yÔ AØ × (Ñ (¨°A©°sÕ ;r) Ú__name__Ú __module__Ú __qualname__Úkeep_line_orderÚ BM_compatibleÚPATTERNrrr<Ú __classcell__)rs@rr r s#ø„Ø€OØ€Mð €Gô1ôö#rIs'ðñ÷ 'ßE×Eô=<*×$Ñ$õ=>x, ...' into 'print(..., file=x)' No changes are applied if print_function is imported from __future__ é)Úpatcomp)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚCommaÚStringz"atom< '(' [atom|STRING|NAME] ')' >có —eZdZdZdZd„Zd„Zy)ÚFixPrintTzP simple_stmt< any* bare='print' any* > | print_stmt c óœ—|sJ‚|jd«}|r1|jttd«g|j¬««y|j dtd«k(sJ‚|j dd}t |«dk(rtj|d«rydx}x}}|r|dt«k(r|dd}d}|rR|dtjtjd«k(r(t |«d k\sJ‚|dj«}|d d}|Dcgc]}|j«‘Œ} }| r d | d_|€|€|c|%|j| d t!t#|«««|%|j| d t!t#|«««||j| d|«ttd«| «} |j| _| Scc}w)NÚbareÚprint)ÚprefixéééÿÿÿÿÚ z>>réÚÚsepÚendÚfile)ÚgetÚreplacerrrÚchildrenÚlenÚ parend_exprÚmatchr rÚLeafrÚ RIGHTSHIFTÚcloneÚ add_kwargr Úrepr) ÚselfÚnodeÚresultsÚ bare_printÚargsrrrÚargÚl_argsÚn_stmts ú0/usr/lib64/python3.12/lib2to3/fixes/fix_print.pyÚ transformzFixPrint.transform%sµ€Ùˆˆwà—[‘[ Ó(ˆ á à × Ñ œt¤D¨£M°2Ø&0×&7Ñ&7ô 9ô :à Ø}‰}˜QѤ4¨£=Ò0Ð0Ð0Ø}‰}˜Q˜RÐ ˆÜ ˆt‹9˜Š>œk×/Ñ/°°Q±Ô8ð àЈЈcDÙ D˜‘H¤£Ò'ؘ˜9ˆD؈CÙ D˜‘GœvŸ{™{¬5×+;Ñ+;¸TÓBÒBÜt“9 ’>Ð !>ؘ‘7—=‘=“?ˆDؘ˜8ˆDá)-Ó.© ##—)‘)•+¨ˆÐ.Ù Ø!ˆF1‰IÔ Ø ˆ?˜c˜o°Ð1A؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@ØÐØ—‘˜v v¨tÔ4Ü”d˜7“m VÓ,ˆØŸ ™ ˆŒ ؈ ùò/sÄG có(—d|_tj|jjt |«tj tjd«|f«}|r |jt««d|_|j|«y)NrÚ=r) rrÚNodeÚsymsÚargumentrr rÚEQUALÚappendr )r%Úl_nodesÚs_kwdÚn_exprÚ n_arguments r-r#zFixPrint.add_kwargMsk€àˆŒ Ü—[‘[ §¡×!3Ñ!3Ü"& u£+Ü"(§+¡+¬e¯k©k¸3Ó"?Ø"(ð"*ó+ˆ ñ Ø N‰Nœ5›7Ô #Ø #ˆJÔ Ø‰zÕ"óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr.r#©r:r-r r s„à€Mð€Gò&óP #r:r N)Ú__doc__rrrÚpgen2rrÚ fixer_utilrrr r Úcompile_patternrÚBaseFixr r@r:r-ÚrFsGðñ õÝÝÝß2Ó2ð&ˆg×%Ñ%Ø6ó€ ô :#ˆz×!Ñ!õ:#r:lib2to3/fixes/__pycache__/fix_print.cpython-312.opt-1.pyc000064400000006430152462633570017034 0ustar00Ë T—çh ãóž—dZddlmZddlmZddlmZddlmZddlmZm Z m Z m Z ejd«Z Gd„d ej«Zy ) a Fixer for print. Change: 'print' into 'print()' 'print ...' into 'print(...)' 'print ... ,' into 'print(..., end=" ")' 'print >>x, ...' into 'print(..., file=x)' No changes are applied if print_function is imported from __future__ é)Úpatcomp)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚCommaÚStringz"atom< '(' [atom|STRING|NAME] ')' >có —eZdZdZdZd„Zd„Zy)ÚFixPrintTzP simple_stmt< any* bare='print' any* > | print_stmt c ó:—|jd«}|r1|jttd«g|j¬««y|j dd}t |«dk(rtj|d«rydx}x}}|r|dt«k(r|dd}d}|rB|dtjtjd«k(r|dj«}|d d}|Dcgc]}|j«‘Œ} }| r d | d_|€|€|c|%|j| d t!t#|«««|%|j| d t!t#|«««||j| d |«ttd«| «} |j| _| Scc}w)NÚbareÚprint)ÚprefixéééÿÿÿÿÚ z>>éÚÚsepÚendÚfile)ÚgetÚreplacerrrÚchildrenÚlenÚ parend_exprÚmatchr rÚLeafrÚ RIGHTSHIFTÚcloneÚ add_kwargr Úrepr) ÚselfÚnodeÚresultsÚ bare_printÚargsrrrÚargÚl_argsÚn_stmts ú0/usr/lib64/python3.12/lib2to3/fixes/fix_print.pyÚ transformzFixPrint.transform%s…€ð—[‘[ Ó(ˆ á à × Ñ œt¤D¨£M°2Ø&0×&7Ñ&7ô 9ô :à à}‰}˜Q˜RÐ ˆÜ ˆt‹9˜Š>œk×/Ñ/°°Q±Ô8ð àЈЈcDÙ D˜‘H¤£Ò'ؘ˜9ˆD؈CÙ D˜‘GœvŸ{™{¬5×+;Ñ+;¸TÓBÒBà˜‘7—=‘=“?ˆDؘ˜8ˆDá)-Ó.© ##—)‘)•+¨ˆÐ.Ù Ø!ˆF1‰IÔ Ø ˆ?˜c˜o°Ð1A؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@ØÐØ—‘˜v v¨tÔ4Ü”d˜7“m VÓ,ˆØŸ ™ ˆŒ ؈ ùò/sÃ"Fcó(—d|_tj|jjt |«tj tjd«|f«}|r |jt««d|_|j|«y)NrÚ=r) rrÚNodeÚsymsÚargumentrr rÚEQUALÚappendr )r%Úl_nodesÚs_kwdÚn_exprÚ n_arguments r-r#zFixPrint.add_kwargMsk€àˆŒ Ü—[‘[ §¡×!3Ñ!3Ü"& u£+Ü"(§+¡+¬e¯k©k¸3Ó"?Ø"(ð"*ó+ˆ ñ Ø N‰Nœ5›7Ô #Ø #ˆJÔ Ø‰zÕ"óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr.r#©r:r-r r s„à€Mð€Gò&óP #r:r N)Ú__doc__rrrÚpgen2rrÚ fixer_utilrrr r Úcompile_patternrÚBaseFixr r@r:r-ÚrFsGðñ õÝÝÝß2Ó2ð&ˆg×%Ñ%Ø6ó€ ô :#ˆz×!Ñ!õ:#r:lib2to3/fixes/__pycache__/fix_nonzero.cpython-312.opt-2.pyc000064400000001775152462633570017402 0ustar00Ë T—çhOãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixNonzeroTzÓ classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='__nonzero__' parameters< '(' NAME ')' > any+ > any* > > có^—|d}td|j¬«}|j|«y)NÚnameÚ__bool__)Úprefix)rr Úreplace)ÚselfÚnodeÚresultsrÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_nonzero.pyÚ transformzFixNonzero.transforms'€Øv‰ˆÜ: d§k¡kÔ2ˆØ ‰ SÕóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€GórrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðØ0õÝô ×#Ñ#õ rlib2to3/fixes/__pycache__/fix_types.cpython-312.opt-2.pyc000064400000003417152462633570017047 0ustar00Ë T—çhîãóð— ddlmZddlmZidd“dd“dd“d d “d d “d d “dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#dd$d%d&œ¥ZeDcgc]}d'|z‘Œ c}ZGd(„d)ej «Zy*cc}w)+é)Ú fixer_base)ÚNameÚ BooleanTypeÚboolÚ BufferTypeÚ memoryviewÚ ClassTypeÚtypeÚ ComplexTypeÚcomplexÚDictTypeÚdictÚDictionaryTypeÚ EllipsisTypeztype(Ellipsis)Ú FloatTypeÚfloatÚIntTypeÚintÚListTypeÚlistÚLongTypeÚ ObjectTypeÚobjectÚNoneTypez type(None)ÚNotImplementedTypeztype(NotImplemented)Ú SliceTypeÚsliceÚ StringTypeÚbytesÚ StringTypesz(str,)ÚtupleÚstrÚrange)Ú TupleTypeÚTypeTypeÚ UnicodeTypeÚ XRangeTypez)power< 'types' trailer< '.' name='%s' > >có8—eZdZdZdj e«Zd„Zy)ÚFixTypesTÚ|cóz—tj|dj«}|rt||j¬«Sy)NÚname)Úprefix)Ú _TYPE_MAPPINGÚgetÚvaluerr-)ÚselfÚnodeÚresultsÚ new_values ú0/usr/lib64/python3.12/lib2to3/fixes/fix_types.pyÚ transformzFixTypes.transform9s3€Ü!×%Ñ% g¨f¡o×&;Ñ&;Ó<ˆ ٠ܘ ¨$¯+©+Ô6Ð 6ØóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚjoinÚ_patsÚPATTERNr6©r7r5r)r)5s„Ø€MØh‰hu‹o€Gór7r)N)ÚrÚ fixer_utilrr.r=ÚBaseFixr))Úts0r5ÚrDs,ððõ&Ýðؘðà|ðð fðð ˜ ð ð Fð ð ˜6ð ð Ð)ðð Wðð 5ðð Fðð Eðð xðð Lðð Ð5ðð gð!ð" gð#ð$ ˜ð%ð&ØØØò-€ ñ2CPÓPÁ-¸QÐ 4°qÓ 8À-ÑP€ôˆz×!Ñ!õùò QsÁ A3lib2to3/fixes/__pycache__/fix_buffer.cpython-312.opt-2.pyc000064400000001601152462633570017145 0ustar00Ë T—çhNãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó—eZdZdZdZdZd„Zy)Ú FixBufferTzR power< name='buffer' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚ memoryview)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_buffer.pyÚ transformzFixBuffer.transforms"€Øv‰ˆØ ‰ ”T˜,¨t¯{©{Ô;Õ<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr©rrrr s„Ø€Mà€Hð€Gó=rrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðð;õÝô = ×"Ñ"õ =rlib2to3/fixes/__pycache__/fix_isinstance.cpython-312.pyc000064400000004447152462633570017107 0ustar00Ë T—çhHãóJ—dZddlmZddlmZGd„dej «Zy)a,Fixer that cleans up a tuple argument to isinstance after the tokens in it were fixed. This is mainly used to remove double occurrences of tokens as a leftover of the long -> int / unicode -> str conversion. eg. isinstance(x, (int, long)) -> isinstance(x, (int, int)) -> isinstance(x, int) é)Ú fixer_base)Útokencó—eZdZdZdZdZd„Zy)Ú FixIsinstanceTz˜ power< 'isinstance' trailer< '(' arglist< any ',' atom< '(' args=testlist_gexp< any+ > ')' > > ')' > > écóЗt«}|d}|j}g}t|«}|D]¼\}} | jtj k(rP| j |vrB|t|«dz ksŒC||dzjtjk(sŒgt|«Œs|j| «| jtj k(sŒ¢|j| j «Œ¾|r#|djtjk(r|d=t|«dk(r5|j} | j|d_ | j|d«y||dd|j«y)NÚargsééÿÿÿÿé)ÚsetÚchildrenÚ enumerateÚtyperÚNAMEÚvalueÚlenÚCOMMAÚnextÚappendÚaddÚparentÚprefixÚreplaceÚchanged) ÚselfÚnodeÚresultsÚnames_insertedÚtestlistr Únew_argsÚiteratorÚidxÚargÚatoms ú5/usr/lib64/python3.12/lib2to3/fixes/fix_isinstance.pyÚ transformzFixIsinstance.transforms€Ü›ˆØ˜6‘?ˆØ× Ñ ˆØˆÜ˜T“?ˆÛ ‰HˆCØx‰xœ5Ÿ:™:Ò%¨#¯)©)°~Ñ*EØœ˜T› Q™Ó&¨4°°a±©=×+=Ñ+=ÄÇÁÓ+Lܘ”NØà—‘ Ô$Ø—8‘8œuŸz™zÓ)Ø"×&Ñ& s§y¡yÕ1ð!ñ ˜ ™ ×)Ñ)¬U¯[©[Ò8ؘ Ü ˆx‹=˜AÒ Ø—?‘?ˆDØ!%§¡ˆHQ‰KÔ Ø L‰L˜ !™Õ %àˆD‘ˆGØ L‰LNóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr'©r(r&rrs„Ø€Mð€Gð€Iór(rN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrr/r(r&Úr4s$ðñõÝô$J×&Ñ&õ$r(lib2to3/fixes/__pycache__/fix_map.cpython-312.opt-1.pyc000064400000010630152462633570016452 0ustar00Ë T—çh8ãó~—dZddlmZddlmZddlmZmZmZm Z m Z ddl m Z ddlmZGd„dej «Zy ) aFixer that changes map(F, ...) into list(map(F, ...)) unless there exists a 'from future_builtins import map' statement in the top-level namespace. As a special case, map(None, X) is changed into list(X). (This is necessary because the semantics are changed in this case -- the new map(None, X) is equivalent to [(x,) for x in X].) We avoid the transformation (except for the special case mentioned above) if the map() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. NOTE: This is still not correct if the original code was depending on map(F, X, Y, ...) to go on until the longest argument is exhausted, substituting None for missing values -- like zip(), it now stops as soon as the shortest argument is exhausted. é)Útoken)Ú fixer_base)ÚNameÚArgListÚCallÚListCompÚin_special_context)Úpython_symbols)ÚNodecó—eZdZdZdZdZd„Zy)ÚFixMapTaL map_none=power< 'map' trailer< '(' arglist< 'None' ',' arg=any [','] > ')' > [extra_trailers=trailer*] > | map_lambda=power< 'map' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'map' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.mapcó —|j|«ryg}d|vr)|dD]!}|j|j««Œ#|jjt j k(rA|j|d«|j«}d|_ttd«|g«}nÈd|vrbt|dj«|dj«|dj««}tt j|g|zd¬ «}nbd |vr|d j«}d|_n d |vrù|d }|jt jk(r|jd jt j k(rs|jd jdjt"j$k(r<|jd jdj&dk(r|j|d«ytt jtd«|j«g«}d|_t)|«rytt jtd«t+g«g|z«}d|_|j|_|S)NÚextra_trailerszYou should use a for loop hereÚÚlistÚ map_lambdaÚxpÚfpÚit)ÚprefixÚmap_noneÚargÚargsééÚNonezjcannot convert map(None, ...) with multiple arguments because map() now truncates to the shortest sequenceÚmap)Ú should_skipÚappendÚcloneÚparentÚtypeÚsymsÚ simple_stmtÚwarningrrrrr ÚpowerÚtrailerÚchildrenÚarglistrÚNAMEÚvaluer r)ÚselfÚnodeÚresultsÚtrailersÚtÚnewrs ú./usr/lib64/python3.12/lib2to3/fixes/fix_map.pyÚ transformzFixMap.transform@s€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ;‰;× Ñ œt×/Ñ/Ò /Ø L‰L˜Ð?Ô @Ø—*‘*“,ˆC؈CŒJÜ”t˜F“| c UÓ+ŠCØ ˜WÑ $ܘ7 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0ó2ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?ŠCð˜WÑ$ؘe‘n×*Ñ*Ó,Ø– à˜WÑ$Ø" 6™?DØ—y‘y¤D§L¡LÒ0Ø—}‘} QÑ'×,Ñ,´· ± Ò<Ø—}‘} QÑ'×0Ñ0°Ñ3×8Ñ8¼E¿J¹JÒFØ—}‘} QÑ'×0Ñ0°Ñ3×9Ñ9¸VÒCØŸ ™  Tð,NôOðäœtŸz™z¬D°«K¸¿¹»Ð+FÓGCØ!#C”Jä% dÔ+Øä”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJà—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr3©r4r2r r s„Ø€Mð€Gð:$€Gó.r4r N)Ú__doc__Úpgen2rrrÚ fixer_utilrrrrr Úpygramr r#Úpytreer ÚConditionalFixr r;r4r2ÚrBs2ðñõ&ÝßJÕJÝ+ÝôPˆZ× &Ñ &õPr4lib2to3/fixes/__pycache__/fix_ne.cpython-312.pyc000064400000002015152462633570015336 0ustar00Ë T—çh;ãóV—dZddlmZddlmZddlmZGd„dej «Zy)zFixer that turns <> into !=.é)Úpytree)Útoken)Ú fixer_basecó0—eZdZejZd„Zd„Zy)ÚFixNecó —|jdk(S)Nz<>)Úvalue)ÚselfÚnodes ú-/usr/lib64/python3.12/lib2to3/fixes/fix_ne.pyÚmatchz FixNe.matchs€àz‰z˜TÑ!Ð!ócóf—tjtjd|j¬«}|S)Nz!=)Úprefix)rÚLeafrÚNOTEQUALr)r r ÚresultsÚnews r Ú transformzFixNe.transforms!€Ük‰kœ%Ÿ.™.¨$°t·{±{ÔCˆØˆ rN)Ú__name__Ú __module__Ú __qualname__rrÚ _accept_typer r©rr rr s„ð—>‘>€Lò"órrN)Ú__doc__ÚrÚpgen2rrÚBaseFixrrrr Úrs'ðñ#õÝÝô ˆJ× Ñ õ rlib2to3/fixes/__pycache__/fix_idioms.cpython-312.opt-1.pyc000064400000012275152462633570017170 0ustar00Ë T—çh ãóf—dZddlmZddlmZmZmZmZmZm Z dZ dZ Gd„dej«Z y) aÜAdjust some old Python 2 idioms to their modern counterparts. * Change some type comparisons to isinstance() calls: type(x) == T -> isinstance(x, T) type(x) is T -> isinstance(x, T) type(x) != T -> not isinstance(x, T) type(x) is not T -> not isinstance(x, T) * Change "while 1:" into "while True:". * Change both v = list(EXPR) v.sort() foo(v) and the more general v = EXPR v.sort() foo(v) into v = sorted(EXPR) foo(v) é)Ú fixer_base)ÚCallÚCommaÚNameÚNodeÚ BlankLineÚsymsz0(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)z(power< 'type' trailer< '(' x=any ')' > >c óX‡—eZdZdZde›de›de›de›d Zˆfd„Zd„Zd„Z d „Z d „Z ˆxZ S) Ú FixIdiomsTz isinstance=comparison< Ú z8 T=any > | isinstance=comparison< T=any aX > | while_stmt< 'while' while='1' ':' any+ > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' power< list='list' trailer< '(' (not arglist) any ')' > > > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' expr=any > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > cóV•—tt| |«}|rd|vr|d|dk(r|Sy|S)NÚsortedÚid1Úid2)Úsuperr Úmatch)ÚselfÚnodeÚrÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_idioms.pyrzFixIdioms.matchOs<ø€Ü ”)˜TÑ (¨Ó .ˆñ ˜Q‘؉x˜1˜U™8Ò#ØØØˆócóœ—d|vr|j||«Sd|vr|j||«Sd|vr|j||«Std«‚)NÚ isinstanceÚwhilerz Invalid match)Útransform_isinstanceÚtransform_whileÚtransform_sortÚ RuntimeError)rrÚresultss rÚ transformzFixIdioms.transformZs^€Ø ˜7Ñ "Ø×,Ñ,¨T°7Ó;Ð ;Ø ˜Ñ Ø×'Ñ'¨¨gÓ6Ð 6Ø ˜Ñ Ø×&Ñ& t¨WÓ5Ð 5ä˜Ó/Ð /rcó0—|dj«}|dj«}d|_d|_ttd«|t «|g«}d|vr,d|_t t jtd«|g«}|j|_|S)NÚxÚTÚr rÚnÚnot)ÚcloneÚprefixrrrrr Únot_test)rrr r#r$Útests rrzFixIdioms.transform_isinstanceds„€Ø C‰L× Ñ Ó ˆØ C‰L× Ñ Ó ˆØˆŒØˆŒÜ”D˜Ó&¨¬E«G°Q¨Ó8ˆØ '‰>؈DŒKÜœŸ ™ ¬¨U« °TÐ':Ó;ˆDØ—k‘kˆŒ ؈ rcóZ—|d}|jtd|j¬««y)NrÚTrue©r))Úreplacerr))rrr Úones rrzFixIdioms.transform_whileps#€ØgÑˆØ ‰ ”D˜¨¯ © Ô3Õ4rcó–—|d}|d}|jd«}|jd«}|r'|jtd|j¬««nV|rI|j «}d|_|jt td«|g|j¬««n t d«‚|j«|j}d |vr~|r=|jd «d |d jf} d j| «|d _yt«} |jj| «|jd «d | _yy) NÚsortÚnextÚlistÚexprrr.r%zshould not have reached hereÚ é) Úgetr/rr)r(rrÚremoveÚ rpartitionÚjoinrÚparentÚ append_child) rrr Ú sort_stmtÚ next_stmtÚ list_callÚ simple_exprÚnewÚbtwnÚ prefix_linesÚend_lines rrzFixIdioms.transform_sortts3€Ø˜F‘Oˆ ؘF‘Oˆ Ø—K‘K Ó'ˆ Ø—k‘k &Ó)ˆ á Ø × Ñ œd 8°I×4DÑ4DÔEÕ FÙ Ø×#Ñ#Ó%ˆC؈CŒJØ × Ñ ¤¤T¨(£^°c°UØ,7×,>Ñ,>ô!@õ AôÐ=Ó>Ð >Ø×ÑÔà×шð 4‰<Ùð!%§¡°Ó 5°aÑ 8¸)ÀA¹,×:MÑ:MÐN Ø&*§i¡i° Ó&= ˜!‘ Õ#ô %›;Ø× Ñ ×-Ñ-¨hÔ7ð#'§/¡/°$Ó"7¸Ñ":•ð! r) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚTYPEÚCMPÚPATTERNrr!rrrÚ __classcell__)rs@rr r %s6ø„ØHòN ’’cš4ðK%!€GôN ò0ò ò5ö$;rr N)Ú__doc__r%rÚ fixer_utilrrrrrr rKrJÚBaseFixr ©rrÚrRs3ðñõ<ßA×Aà8€Ø1€ôs; ×"Ñ"õs;rlib2to3/fixes/__pycache__/fix_except.cpython-312.opt-1.pyc000064400000007665152462633570017203 0ustar00Ë T—çh ãó|—dZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z d„Z Gd„dej«Zy ) aªFixer for except statements with named exceptions. The following cases will be converted: - "except E, T:" where T is a name: except E as T: - "except E, T:" where T is not a name, tuple or list: except E as t: T = t This is done because the target of an "except" clause must be a name. - "except E, T:" where T is a tuple or list literal: except E as t: T = t.args é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚAttrÚNameÚis_tupleÚis_listÚsymsc#óÀK—t|«D]L\}}|jtjk(sŒ$|jdj dk(sŒA|||dzf–—ŒNy­w)NéÚexceptr)Ú enumerateÚtyper Ú except_clauseÚchildrenÚvalue)ÚnodesÚiÚns ú1/usr/lib64/python3.12/lib2to3/fixes/fix_except.pyÚ find_exceptsrsSèø€Ü˜%Ö ‰ˆˆ1Ø 6‰6”T×'Ñ'Ó 'Øz‰z˜!‰}×"Ñ" hÓ.ؘ%  !¡™*oÓ%ñ!ùs‚/A²AÁAcó—eZdZdZdZd„Zy)Ú FixExceptTa1 try_stmt< 'try' ':' (simple_stmt | suite) cleanup=(except_clause ':' (simple_stmt | suite))+ tail=(['except' ':' (simple_stmt | suite)] ['else' ':' (simple_stmt | suite)] ['finally' ':' (simple_stmt | suite)]) > c ó’—|j}|dDcgc]}|j«‘Œ}}|dDcgc]}|j«‘Œ}}t|«D]\}} t|j«dk(sŒ |jdd\} } } | j t dd¬««| jtjk7r t |j«d¬«} | j«}d|_ | j | «| j«} | j}t|«D]!\}}t|tj«sŒ!nt!| «s t#| «r t%|t'| t d «««}n t%|| «}t)|d«D]}| j+d |«Œ| j+||«Œv| jdk(sŒ‡d| _ Œ|jdd Dcgc]}|j«‘Œc}|z|z}tj|j|«Scc}wcc}wcc}w) NÚtailÚcleanupééÚasÚ )ÚprefixÚÚargsr é)r ÚclonerÚlenrÚreplacerrrÚNAMEÚnew_namer"rÚ isinstancerÚNoder r rrÚreversedÚ insert_child)ÚselfÚnodeÚresultsr rrÚchÚ try_cleanuprÚe_suiteÚEÚcommaÚNÚnew_NÚtargetÚ suite_stmtsrÚstmtÚassignÚchildÚcrs rÚ transformzFixExcept.transform/sï€Øy‰yˆà#*¨6¢?Ó3¡?˜a—‘•  ?ˆÐ3à,3°IÒ,>Ó?Ñ,> br—x‘x•zÐ,>ˆ Ð?Ü&2°;×&?Ñ "ˆM˜7Ü=×)Ñ)Ó*¨aÓ/Ø -× 6Ñ 6°q¸Ð ;‘ E˜1Ø— ‘ œd 4°Ô4Ô5à—6‘6œUŸZ™ZÓ'ä  §¡£¸Ô=EØŸW™W›YFØ$&F”MØ—I‘I˜eÔ$Ø!ŸK™K›MEð #*×"2Ñ"2KÜ#,¨[Ö#9™˜˜4Ü% d¬F¯K©KÕ8Ù!ð$:ô   ”{¤g¨a¤jÜ!'¨´°U¼DÀ»LÓ0IÓ!J™ä!'¨°Ó!6˜ô"*¨+°b°q¨/Ö!:˜Ø×,Ñ,¨Q°Õ6ð";à×(Ñ(¨¨FÖ3Ø—X‘X ”^ð #A–HðI'@ðN(,§}¡}°R°aÑ'8Ó9Ñ'8 !A—G‘G•IÐ'8Ñ9¸KÑGÈ$ÑNˆÜ{‰{˜4Ÿ9™9 hÓ/Ð/ùòW4ùâ?ùòP:s”H:´H?Ç:IN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr?©órrr$s„Ø€Mð€Gó.0rFrN)Ú__doc__r#rÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrErFrÚrKs2ðñõ0ÝÝßD×Dò&ô 90 ×"Ñ"õ90rFlib2to3/fixes/__pycache__/fix_repr.cpython-312.pyc000064400000002144152462633570015707 0ustar00Ë T—çheãóR—dZddlmZddlmZmZmZGd„dej«Zy)z/Fixer that transforms `xyzzy` into repr(xyzzy).é)Ú fixer_base)ÚCallÚNameÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixReprTz7 atom < '`' expr=any '`' > cóÈ—|dj«}|j|jjk(r t |«}t t d«|g|j¬«S)NÚexprÚrepr)Úprefix)ÚcloneÚtypeÚsymsÚ testlist1rrrr )ÚselfÚnodeÚresultsr s ú//usr/lib64/python3.12/lib2to3/fixes/fix_repr.pyÚ transformzFixRepr.transformsM€Øv‰×$Ñ$Ó&ˆà 9‰9˜Ÿ ™ ×+Ñ+Ò +Ü Ó%ˆDÜ”D˜“L 4 &°·±Ô=Ð=óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„à€Mð€Gó>rrN) Ú__doc__ÚrÚ fixer_utilrrrÚBaseFixrrrrÚr!s'ðñ6õß1Ñ1ô >ˆj× Ñ õ >rlib2to3/fixes/__pycache__/fix_numliterals.cpython-312.pyc000064400000002627152462633570017304 0ustar00Ë T—çhãóV—dZddlmZddlmZddlmZGd„dej«Zy)z-Fixer that turns 1L into 1, 0755 into 0o755. é)Útoken)Ú fixer_base)ÚNumbercó0—eZdZejZd„Zd„Zy)ÚFixNumliteralscó^—|jjd«xs|jddvS)NÚ0éÿÿÿÿÚLl)ÚvalueÚ startswith)ÚselfÚnodes ú6/usr/lib64/python3.12/lib2to3/fixes/fix_numliterals.pyÚmatchzFixNumliterals.matchs)€à— ‘ ×%Ñ% cÓ*ÒD¨d¯j©j¸©nÀÐ.DÐEócóâ—|j}|ddvr|dd}n@|jd«r/|j«rtt |««dkDrd|ddz}t ||j ¬«S)Nr r r éÚ0o)Úprefix)r r ÚisdigitÚlenÚsetrr)rrÚresultsÚvals rÚ transformzFixNumliterals.transformsd€Øj‰jˆØ ˆr‰7d‰?Øcr(‰CØ ^‰^˜CÔ  S§[¡[¤]´s¼3¸s»8³}ÀqÒ7Hؘ˜Q˜R˜‘.ˆCäc $§+¡+Ô.Ð.rN)Ú__name__Ú __module__Ú __qualname__rÚNUMBERÚ _accept_typerr©rrrr s„ð—<‘<€LòFó/rrN) Ú__doc__Úpgen2rÚrÚ fixer_utilrÚBaseFixrr"rrÚr(s'ðñõ ÝÝô/Z×'Ñ'õ/rlib2to3/fixes/__pycache__/fix_intern.cpython-312.opt-1.pyc000064400000002576152462633570017206 0ustar00Ë T—çhxãóN—dZddlmZddlmZmZGd„dej «Zy)z/Fixer for intern(). intern(s) -> sys.intern(s)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixInternTÚprezÿ power< 'intern' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)ÚsysÚinternr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_intern.pyÚ transformzFixIntern.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ!ˆÜ˜D '¨5Ó1ˆÜT˜5 $Ô'؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr(s$ðñõ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_next.cpython-312.opt-2.pyc000064400000010305152462633570016653 0ustar00Ë T—çhf ãó~— ddlmZddlmZddlmZddlmZm Z m Z dZ Gd„dej«Z d„Zd „Zd „Zy ) é)Útoken)Úpython_symbols)Ú fixer_base)ÚNameÚCallÚ find_bindingz;Calls to builtin next() possibly shadowed by global bindingcó0‡—eZdZdZdZdZˆfd„Zd„ZˆxZS)ÚFixNextTa¾ power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > > | power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > > | classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='next' parameters< '(' NAME ')' > any+ > any* > > | global=global_stmt< 'global' any* 'next' any* > Úprecó”•—tt| ||«td|«}|r|j |t «d|_yd|_y)NÚnextTF)Úsuperr Ú start_treerÚwarningÚ bind_warningÚ shadowed_next)ÚselfÚtreeÚfilenameÚnÚ __class__s €ú//usr/lib64/python3.12/lib2to3/fixes/fix_next.pyrzFixNext.start_tree$sAø€Ü ŒgtÑ'¨¨hÔ7ä ˜ Ó &ˆÙ Ø L‰L˜œLÔ )Ø!%ˆDÕ à!&ˆDÕ ócó,—|jd«}|jd«}|jd«}|r‹|jr'|jtd|j¬««y|Dcgc]}|j «‘Œ}}d|d_|jt td|j¬«|««y|r)td|j¬«}|j|«y|r{t|«rU|d }dj|Dcgc] }t|«‘Œc}«j«d k(r|j|t«y|jtd««yd |vr|j|t«d |_yycc}wcc}w) NÚbaseÚattrÚnameÚ__next__)ÚprefixÚér ÚheadÚ __builtin__ÚglobalT) ÚgetrÚreplacerrÚclonerÚis_assign_targetÚjoinÚstrÚstriprr)rÚnodeÚresultsrrrrr"s rÚ transformzFixNext.transform.sD€ð{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆá Ø×!Ò!Ø— ‘ œT *°T·[±[ÔAÕBá+/Ó0©4 a˜Ÿ™ ¨4Ð0Ø!#Q‘”Ø— ‘ œT¤$ v°d·k±kÔ"BÀDÓIÕJÙ ÜZ¨¯ © Ô4ˆAØ L‰L˜OÙ ô  Ô%ؘv‘Ø—7‘7©DÓ1©D qœC F¨DÑ1Ó2×8Ñ8Ó:¸mÒKØ—L‘L ¤|Ô4ØØ L‰Lœ˜jÓ)Õ *Ø ˜Ñ Ø L‰L˜œ|Ô ,Ø!%ˆDÕ ð!ùò!1ùò2s Á-F Ä F) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚorderrr.Ú __classcell__)rs@rr r s ø„Ø€Mð €Gð €Eô'ö&rr cóœ—t|«}|€y|jD]/}|jtjk(ryt ||«sŒ/yy)NFT)Ú find_assignÚchildrenÚtyperÚEQUALÚ is_subtree)r,ÚassignÚchilds rr(r(QsG€Ü ˜Ó €FØ €~Øà—”ˆØ :‰:œŸ™Ò $ÙÜ ˜˜tÕ $Ùð !ð rcó¾—|jtjk(r|S|jtjk(s |j€yt |j«S©N)r9ÚsymsÚ expr_stmtÚ simple_stmtÚparentr7)r,s rr7r7]sD€Ø ‡yy”D—N‘NÒ"؈ Ø ‡yy”D×$Ñ$Ò$¨¯ © Ð(;ØÜ t—{‘{Ó #Ð#rcóL‡—|‰k(rytˆfd„|jD««S)NTc3ó6•K—|]}t|‰«–—Œy­wr?)r;)Ú.0Úcr,s €rÚ zis_subtree..gsøèø€Ð:©M qŒz˜!˜T×"©Mùsƒ)Úanyr8)Úrootr,s `rr;r;ds"ø€Ø ˆt‚|ØÜ Ó:¨D¯MªMÓ:Ó :Ð:rN)Úpgen2rÚpygramrr@r rÚ fixer_utilrrrrÚBaseFixr r(r7r;©rrÚrPs@ðØ4õÝ+Ýß1Ñ1àL€ ô:&ˆj× Ñ ô:&ò@ ò$ó;rlib2to3/fixes/__pycache__/fix_getcwdu.cpython-312.pyc000064400000001653152462633570016405 0ustar00Ë T—çhÃãóJ—dZddlmZddlmZGd„dej «Zy)z1 Fixer that changes os.getcwdu() to os.getcwd(). é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixGetcwduTzR power< 'os' trailer< dot='.' name='getcwdu' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚgetcwd)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú2/usr/lib64/python3.12/lib2to3/fixes/fix_getcwdu.pyÚ transformzFixGetcwdu.transforms"€Øv‰ˆØ ‰ ”T˜(¨4¯;©;Ô7Õ8óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó9rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñõ Ýô 9×#Ñ#õ 9rlib2to3/fixes/__pycache__/fix_throw.cpython-312.opt-2.pyc000064400000004254152462633570017046 0ustar00Ë T—çh.ãóp— ddlmZddlmZddlmZddlmZmZmZm Z m Z Gd„dej«Z y)é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚArgListÚAttrÚis_tuplecó—eZdZdZdZd„Zy)ÚFixThrowTzÉ power< any trailer< '.' 'throw' > trailer< '(' args=arglist< exc=any ',' val=any [',' tb=any] > ')' > > | power< any trailer< '.' 'throw' > trailer< '(' exc=any ')' > > có¬—|j}|dj«}|jtjur|j |d«y|j d«}|€y|j«}t|«r+|jddDcgc]}|j«‘Œ}}n d|_ |g}|d}d|vry|dj«} d| _ t||«} t| td ««t| g«gz} |jtj |j"| ««y|jt||««ycc}w) NÚexcz+Python 3 does not support string exceptionsÚvalééÿÿÿÿÚÚargsÚtbÚwith_traceback)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertÚgetr ÚchildrenÚprefixrr rrÚreplacerÚNodeÚpower) ÚselfÚnodeÚresultsrrrÚcrÚ throw_argsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_throw.pyÚ transformzFixThrow.transforms)€Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ñ #Ø × Ñ  Ð&SÔ TØ ðk‰k˜%Ó ˆØ ˆ;Ø ài‰i‹kˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà˜V‘_ˆ à 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIäS˜$“ˆAܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGØ × Ñ œvŸ{™{¨4¯:©:°wÓ?Õ @à × Ñ œt C¨›Õ /ùò;sÂEN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©ór(r r s„Ø€Mð€Gó0r0r N) rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r/r0r(Úr4s-ðð?õÝÝß<Õ<ô(0ˆz×!Ñ!õ(0r0lib2to3/fixes/__pycache__/fix_buffer.cpython-312.pyc000064400000001702152462633570016207 0ustar00Ë T—çhNãóJ—dZddlmZddlmZGd„dej «Zy)z4Fixer that changes buffer(...) into memoryview(...).é)Ú fixer_base)ÚNamecó—eZdZdZdZdZd„Zy)Ú FixBufferTzR power< name='buffer' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚ memoryview)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_buffer.pyÚ transformzFixBuffer.transforms"€Øv‰ˆØ ‰ ”T˜,¨t¯{©{Ô;Õ<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr©rrrr s„Ø€Mà€Hð€Gó=rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñ;õÝô = ×"Ñ"õ =rlib2to3/fixes/__pycache__/fix_unicode.cpython-312.opt-1.pyc000064400000004166152462633570017332 0ustar00Ë T—çhèãóT—dZddlmZddlmZdddœZGd„dej «Zy ) z¢Fixer for unicode. * Changes unicode to str and unichr to chr. * If "...\u..." is not unicode literal change it into "...\\u...". * Change u"..." into "...". é)Útoken)Ú fixer_baseÚchrÚstr)ÚunichrÚunicodecó,‡—eZdZdZdZˆfd„Zd„ZˆxZS)Ú FixUnicodeTzSTRING | 'unicode' | 'unichr'cóT•—tt| ||«d|jv|_y)NÚunicode_literals)Úsuperr Ú start_treeÚfuture_featuresr )ÚselfÚtreeÚfilenameÚ __class__s €ú2/usr/lib64/python3.12/lib2to3/fixes/fix_unicode.pyrzFixUnicode.start_trees'ø€Ü Œj˜$Ñ*¨4°Ô:Ø 2°d×6JÑ6JÐ JˆÕóc ó$—|jtjk(r*|j«}t|j |_|S|jtj k(r§|j }|jsY|ddvrRd|vrNdj|jd«Dcgc]$}|jdd«jdd«‘Œ&c}«}|dd vr|d d}||j k(r|S|j«}||_|Sycc}w) Néz'"Ú\z\\z\uz\\uz\Uz\\UÚuUé) ÚtyperÚNAMEÚcloneÚ_mappingÚvalueÚSTRINGr ÚjoinÚsplitÚreplace)rÚnodeÚresultsÚnewÚvalÚvs rÚ transformzFixUnicode.transformsø€Ø 9‰9œŸ ™ Ò "Ø—*‘*“,ˆCÜ  §¡Ñ,ˆCŒI؈JØ Y‰Yœ%Ÿ,™,Ò &Ø—*‘*ˆCØ×(Ò(¨S°©V°u©_ÀÈÁØ—j‘jà ŸY™Y uÔ-ó"á-˜ð—I‘I˜e VÓ,×4Ñ4°U¸FÕCØ-ñ"óð1‰v˜‰~ؘ!˜"gØd—j‘jÒ Ø Ø—*‘*“,ˆC؈CŒI؈Jð'ùò"sÂ&)D )Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNrr)Ú __classcell__)rs@rr r sø„Ø€MØ-€GôKörr N)Ú__doc__Úpgen2rÚrrÚBaseFixr ©rrÚr5s.ðñõÝà¨%Ñ 0€ô×#Ñ#õrlib2to3/fixes/__pycache__/fix_ws_comma.cpython-312.pyc000064400000003021152462633570016537 0ustar00Ë T—çhBãóV—dZddlmZddlmZddlmZGd„dej «Zy)z©Fixer that changes 'a ,b' into 'a, b'. This also changes '{a :b}' into '{a: b}', but does not touch other uses of colons. It does not touch other uses of whitespace. é)Úpytree)Útoken)Ú fixer_basecó–—eZdZdZdZej ejd«Zej ejd«Z ee fZ d„Z y)Ú FixWsCommaTzH any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]> Ú,Ú:cóî—|j«}d}|jD]S}||jvr*|j}|j «r d|vrd|_d}Œ;|r|j}|sd|_d}ŒU|S)NFÚ ÚTÚ )ÚcloneÚchildrenÚSEPSÚprefixÚisspace)ÚselfÚnodeÚresultsÚnewÚcommaÚchildrs ú3/usr/lib64/python3.12/lib2to3/fixes/fix_ws_comma.pyÚ transformzFixWsComma.transformst€Øj‰j‹lˆØˆØ—\”\ˆEؘŸ ™ Ñ!ØŸ™Ø—>‘>Ô#¨°FÑ(:Ø#%E”LØ‘áØ"Ÿ\™\FÙ!Ø'*˜œ Ø‘ð"ðˆ óN) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚPATTERNrÚLeafrÚCOMMAÚCOLONrr©rrrr sJ„à€Hð€Gð ˆFK‰K˜Ÿ ™  SÓ )€EØ ˆFK‰K˜Ÿ ™  SÓ )€EØ 5ˆ>€DórrN)Ú__doc__r rÚpgen2rrÚBaseFixrr$rrÚr(s'ðñõÝÝô×#Ñ#õrlib2to3/fixes/__pycache__/fix_has_key.cpython-312.pyc000064400000010174152462633570016364 0ustar00Ë T—çh| ãóZ—dZddlmZddlmZddlmZmZGd„dej«Zy)a&Fixer for has_key(). Calls to .has_key() methods are expressed in terms of the 'in' operator: d.has_key(k) -> k in d CAVEATS: 1) While the primary target of this fixer is dict.has_key(), the fixer will change any has_key() method call, regardless of its class. 2) Cases like this will not be converted: m = d.has_key if m(k): ... Only *calls* to has_key() are converted. While it is possible to convert the above to something like m = d.__contains__ if m(k): ... this is currently not done. é)Úpytree)Ú fixer_base)ÚNameÚ parenthesizecó—eZdZdZdZd„Zy)Ú FixHasKeyTa• anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > after=any* > | negation=not_test< 'not' anchor=power< before=any+ trailer< '.' 'has_key' > trailer< '(' ( not(arglist | argument) arg=any ','> ) ')' > > > c óh—|sJ‚|j}|jj|jk(r&|jj |j«ry|j d«}|d}|j}|dDcgc]}|j«‘Œ}}|dj«} |j d«} | r| Dcgc]}|j«‘Œ} }| j|j|j|j|j|j|j|jfvr t| «} t!|«dk(r|d}n t#j$|j&|«}d|_t)d d¬ «} |r/t)d d¬ «} t#j$|j*| | f«} t#j$|j| | |f«} | r8t| «} t#j$|j&| ft-| «z«} |jj|j|j.|j0|j2|j4|j6|j8|j:|j&f vr t| «} || _| Scc}wcc}w) NÚnegationÚanchorÚbeforeÚargÚafterééÚ Úin)ÚprefixÚnot)ÚsymsÚparentÚtypeÚnot_testÚpatternÚmatchÚgetrÚcloneÚ comparisonÚand_testÚor_testÚtestÚlambdefÚargumentrÚlenrÚNodeÚpowerrÚcomp_opÚtupleÚexprÚxor_exprÚand_exprÚ shift_exprÚ arith_exprÚtermÚfactor)ÚselfÚnodeÚresultsrr r rÚnr r rÚn_opÚn_notÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_has_key.pyÚ transformzFixHasKey.transformGs&€ÙˆˆwØy‰yˆØ K‰K× Ñ  § ¡ Ò -Ø L‰L× Ñ ˜tŸ{™{Ô +ðØ—;‘;˜zÓ*ˆØ˜Ñ"ˆØ—‘ˆØ%,¨XÒ%6Ó7Ñ%6 !—'‘'•)Ð%6ˆÐ7Øe‰n×"Ñ"Ó$ˆØ— ‘ ˜GÓ$ˆÙ Ù(-Ó.© 1Q—W‘W•Y¨ˆEÐ.Ø 8‰8˜Ÿ™¨¯©¸¿ ¹ ØŸ ™  d§i¡i°·±¸t¿}¹}ðNñ Nä˜sÓ#ˆCÜ ˆv‹;˜!Ò Ø˜A‘Y‰Fä—[‘[ §¡¨VÓ4ˆF؈Œ ÜD Ô%ˆÙ ܘ sÔ+ˆEÜ—;‘;˜tŸ|™|¨e°T¨]Ó;ˆDÜk‰k˜$Ÿ/™/¨C°°vÐ+>Ó?ˆÙ ܘsÓ#ˆCÜ—+‘+˜dŸj™j¨3¨&´5¸³<Ñ*?Ó@ˆCØ ;‰;× Ñ  §¡°·±¸D¿M¹MØ $§ ¡ ¨t¯©Ø $§¡°·±Ø $§ ¡ ¨T¯Z©Zð 9ñ 9ô˜sÓ#ˆC؈Œ ؈ ùò78ùò/s ÂJ*ÃJ/N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr7©ór6rr&s„Ø€Mð€Gó<&r>rN) Ú__doc__ÚrrÚ fixer_utilrrÚBaseFixrr=r>r6ÚrCs)ðñõ:Ýß+ôG ×"Ñ"õGr>lib2to3/fixes/__pycache__/fix_basestring.cpython-312.opt-1.pyc000064400000001404152462633570020035 0ustar00Ë T—çh@ãóJ—dZddlmZddlmZGd„dej «Zy)zFixer for basestring -> str.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixBasestringTz 'basestring'có0—td|j¬«S)NÚstr)Úprefix)rr )ÚselfÚnodeÚresultss ú5/usr/lib64/python3.12/lib2to3/fixes/fix_basestring.pyÚ transformzFixBasestring.transform s€ÜE $§+¡+Ô.Ð.óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rrs„Ø€Mà€Gó/rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrr Úrs"ðÙ"õÝô/J×&Ñ&õ/rlib2to3/fixes/__pycache__/fix_ne.cpython-312.opt-1.pyc000064400000002015152462633570016275 0ustar00Ë T—çh;ãóV—dZddlmZddlmZddlmZGd„dej «Zy)zFixer that turns <> into !=.é)Úpytree)Útoken)Ú fixer_basecó0—eZdZejZd„Zd„Zy)ÚFixNecó —|jdk(S)Nz<>)Úvalue)ÚselfÚnodes ú-/usr/lib64/python3.12/lib2to3/fixes/fix_ne.pyÚmatchz FixNe.matchs€àz‰z˜TÑ!Ð!ócóf—tjtjd|j¬«}|S)Nz!=)Úprefix)rÚLeafrÚNOTEQUALr)r r ÚresultsÚnews r Ú transformzFixNe.transforms!€Ük‰kœ%Ÿ.™.¨$°t·{±{ÔCˆØˆ rN)Ú__name__Ú __module__Ú __qualname__rrÚ _accept_typer r©rr rr s„ð—>‘>€Lò"órrN)Ú__doc__ÚrÚpgen2rrÚBaseFixrrrr Úrs'ðñ#õÝÝô ˆJ× Ñ õ rlib2to3/fixes/__pycache__/fix_itertools.cpython-312.opt-2.pyc000064400000003122152462633570017720 0ustar00Ë T—çh ãóH— ddlmZddlmZGd„dej«Zy)é)Ú fixer_base)ÚNamecó2—eZdZdZdZde«zZdZd„Zy)Ú FixItertoolsTz7('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')zì power< it='itertools' trailer< dot='.' func=%(it_funcs)s > trailer< '(' [any] ')' > > | power< func=%(it_funcs)s trailer< '(' [any] ')' > > écóP—d}|dd}d|vr_|jdvrQ|d|d}}|j}|j«|j«|jj |«|xs |j}|j t |jdd|¬««y)NÚfuncéÚit)Ú ifilterfalseÚ izip_longestÚdoté)Úprefix)ÚvaluerÚremoveÚparentÚreplacer)ÚselfÚnodeÚresultsrr rr s ú4/usr/lib64/python3.12/lib2to3/fixes/fix_itertools.pyÚ transformzFixItertools.transforms”€ØˆØv‰˜qÑ!ˆØ G‰OØ J‰JÐ>Ñ >ؘu‘~ w¨t¡}ˆCà—Y‘YˆFØ I‰IŒKð J‰JŒLØ K‰K× Ñ  Ô %àÒ&˜4Ÿ;™;ˆØ ‰ ”T˜$Ÿ*™* Q R˜.°Ô8Õ9óN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚit_funcsÚlocalsÚPATTERNÚ run_orderr©rrrrs+„Ø€MØH€Hðñ “Hñ €Gð€Ió:rrN)ÚrÚ fixer_utilrÚBaseFixrr#rrÚr's$ððõÝô::×%Ñ%õ:rlib2to3/fixes/__pycache__/fix_exec.cpython-312.pyc000064400000003107152462633570015663 0ustar00Ë T—çhÓãóR—dZddlmZddlmZmZmZGd„dej«Zy)z•Fixer for exec. This converts usages of the exec statement into calls to a built-in exec() function. exec code in ns1, ns2 -> exec(code, ns1, ns2) é)Ú fixer_base)ÚCommaÚNameÚCallcó—eZdZdZdZd„Zy)ÚFixExecTzx exec_stmt< 'exec' a=any 'in' b=any [',' c=any] > | exec_stmt< 'exec' (not atom<'(' [any] ')'>) a=any > có”—|sJ‚|j}|d}|jd«}|jd«}|j«g}d|d_|)|j t «|j«g«|)|j t «|j«g«t td«||j¬«S)NÚaÚbÚcÚéÚexec)Úprefix)ÚsymsÚgetÚclonerÚextendrrr)ÚselfÚnodeÚresultsrr r r Úargss ú//usr/lib64/python3.12/lib2to3/fixes/fix_exec.pyÚ transformzFixExec.transforms¢€ÙˆˆwØy‰yˆØ C‰LˆØ K‰K˜Ó ˆØ K‰K˜Ó ˆØ—‘“ ˆ{ˆØˆˆQ‰ŒØ ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -Ø ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -ä”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€Gó r%s'ðñõß*Ñ*ô<ˆj× Ñ õ trailer< '(' ')' > > | power< any+ trailer< '.' no_call='xreadlines' > > cóâ—|jd«}|r'|jtd|j¬««y|j|dDcgc]}|j «‘Œc}«ycc}w)NÚno_callÚ__iter__)ÚprefixÚcall)ÚgetÚreplacerr Úclone)ÚselfÚnodeÚresultsrÚxs ú5/usr/lib64/python3.12/lib2to3/fixes/fix_xreadlines.pyÚ transformzFixXreadlines.transformsR€Ø—+‘+˜iÓ(ˆá Ø O‰OœD °G·N±NÔCÕ Dà L‰L¨W°Vª_Ó=©_¨˜!Ÿ'™')¨_Ñ=Õ >ùÒ=sÁ A,N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©órrr s„Ø€Mð€Gó ?rrN)ÚrÚ fixer_utilrÚBaseFixrrrrÚrs%ððDõ Ýô?J×&Ñ&õ?rlib2to3/fixes/__pycache__/fix_paren.cpython-312.opt-2.pyc000064400000002726152462633570017012 0ustar00Ë T—çhÊãóL— ddlmZddlmZmZGd„dej «Zy)é)Ú fixer_base)ÚLParenÚRParencó—eZdZdZdZd„Zy)ÚFixParenTa atom< ('[' | '(') (listmaker< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > > | testlist_gexp< any comp_for< 'for' NAME 'in' target=testlist_safe< any (',' any)+ [','] > [any] > >) (']' | ')') > có¨—|d}t«}|j|_d|_|jd|«|jt ««y)NÚtargetÚé)rÚprefixÚ insert_childÚ append_childr)ÚselfÚnodeÚresultsr Úlparens ú0/usr/lib64/python3.12/lib2to3/fixes/fix_paren.pyÚ transformzFixParen.transform%sE€Ø˜Ñ"ˆä“ˆØŸ ™ ˆŒ ؈Œ Ø×јA˜vÔ&Ø×ÑœF›HÕ%óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó,&rrN)r rÚ fixer_utilrrÚBaseFixrrrrÚrs%ððCõß'ô &ˆz×!Ñ!õ &rlib2to3/fixes/__pycache__/fix_intern.cpython-312.pyc000064400000002576152462633570016247 0ustar00Ë T—çhxãóN—dZddlmZddlmZmZGd„dej «Zy)z/Fixer for intern(). intern(s) -> sys.intern(s)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixInternTÚprezÿ power< 'intern' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)ÚsysÚinternr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_intern.pyÚ transformzFixIntern.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ!ˆÜ˜D '¨5Ó1ˆÜT˜5 $Ô'؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr(s$ðñõ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_except.cpython-312.opt-2.pyc000064400000006773152462633570017203 0ustar00Ë T—çh ãóz— ddlmZddlmZddlmZddlmZmZmZm Z m Z m Z d„Z Gd„dej«Zy) é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚAttrÚNameÚis_tupleÚis_listÚsymsc#óÀK—t|«D]L\}}|jtjk(sŒ$|jdj dk(sŒA|||dzf–—ŒNy­w)NéÚexceptr)Ú enumerateÚtyper Ú except_clauseÚchildrenÚvalue)ÚnodesÚiÚns ú1/usr/lib64/python3.12/lib2to3/fixes/fix_except.pyÚ find_exceptsrsSèø€Ü˜%Ö ‰ˆˆ1Ø 6‰6”T×'Ñ'Ó 'Øz‰z˜!‰}×"Ñ" hÓ.ؘ%  !¡™*oÓ%ñ!ùs‚/A²AÁAcó—eZdZdZdZd„Zy)Ú FixExceptTa1 try_stmt< 'try' ':' (simple_stmt | suite) cleanup=(except_clause ':' (simple_stmt | suite))+ tail=(['except' ':' (simple_stmt | suite)] ['else' ':' (simple_stmt | suite)] ['finally' ':' (simple_stmt | suite)]) > c ó’—|j}|dDcgc]}|j«‘Œ}}|dDcgc]}|j«‘Œ}}t|«D]\}} t|j«dk(sŒ |jdd\} } } | j t dd¬««| jtjk7r t |j«d¬«} | j«}d|_ | j | «| j«} | j}t|«D]!\}}t|tj«sŒ!nt!| «s t#| «r t%|t'| t d «««}n t%|| «}t)|d«D]}| j+d |«Œ| j+||«Œv| jdk(sŒ‡d| _ Œ|jdd Dcgc]}|j«‘Œc}|z|z}tj|j|«Scc}wcc}wcc}w) NÚtailÚcleanupééÚasÚ )ÚprefixÚÚargsr é)r ÚclonerÚlenrÚreplacerrrÚNAMEÚnew_namer"rÚ isinstancerÚNoder r rrÚreversedÚ insert_child)ÚselfÚnodeÚresultsr rrÚchÚ try_cleanuprÚe_suiteÚEÚcommaÚNÚnew_NÚtargetÚ suite_stmtsrÚstmtÚassignÚchildÚcrs rÚ transformzFixExcept.transform/sï€Øy‰yˆà#*¨6¢?Ó3¡?˜a—‘•  ?ˆÐ3à,3°IÒ,>Ó?Ñ,> br—x‘x•zÐ,>ˆ Ð?Ü&2°;×&?Ñ "ˆM˜7Ü=×)Ñ)Ó*¨aÓ/Ø -× 6Ñ 6°q¸Ð ;‘ E˜1Ø— ‘ œd 4°Ô4Ô5à—6‘6œUŸZ™ZÓ'ä  §¡£¸Ô=EØŸW™W›YFØ$&F”MØ—I‘I˜eÔ$Ø!ŸK™K›MEð #*×"2Ñ"2KÜ#,¨[Ö#9™˜˜4Ü% d¬F¯K©KÕ8Ù!ð$:ô   ”{¤g¨a¤jÜ!'¨´°U¼DÀ»LÓ0IÓ!J™ä!'¨°Ó!6˜ô"*¨+°b°q¨/Ö!:˜Ø×,Ñ,¨Q°Õ6ð";à×(Ñ(¨¨FÖ3Ø—X‘X ”^ð #A–HðI'@ðN(,§}¡}°R°aÑ'8Ó9Ñ'8 !A—G‘G•IÐ'8Ñ9¸KÑGÈ$ÑNˆÜ{‰{˜4Ÿ9™9 hÓ/Ð/ùòW4ùâ?ùòP:s”H:´H?Ç:IN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr?©órrr$s„Ø€Mð€Gó.0rFrN)r#rÚpgen2rrÚ fixer_utilrrrr r r rÚBaseFixrrErFrÚrJs2ððõ0ÝÝßD×Dò&ô 90 ×"Ñ"õ90rFlib2to3/fixes/__pycache__/fix_dict.cpython-312.pyc000064400000010745152462633570015670 0ustar00Ë T—çh°ãó–—dZddlmZddlmZddlmZddlmZmZmZddlmZejdhzZ Gd„d ej«Z y ) ajFixer for dict methods. d.keys() -> list(d.keys()) d.items() -> list(d.items()) d.values() -> list(d.values()) d.iterkeys() -> iter(d.keys()) d.iteritems() -> iter(d.items()) d.itervalues() -> iter(d.values()) d.viewkeys() -> d.keys() d.viewitems() -> d.items() d.viewvalues() -> d.values() Except in certain very specific contexts: the iter() can be dropped when the context is list(), sorted(), iter() or for...in; the list() can be dropped when the context is list() or sorted() (but not iter() or for...in!). Special contexts that apply to both: list(), sorted(), tuple() set(), any(), all(), sum(). Note: iter(d.keys()) could be written as iter(d) but since the original d.iterkeys() was also redundant we don't fix this. And there are (rare) contexts where it makes a difference (e.g. when passing it as an argument to a function that introspects the argument). é)Úpytree)Úpatcomp)Ú fixer_base)ÚNameÚCallÚDot)Ú fixer_utilÚitercóp—eZdZdZdZd„ZdZeje«Z dZ eje «Z d„Z y)ÚFixDictTa power< head=any+ trailer< '.' method=('keys'|'items'|'values'| 'iterkeys'|'iteritems'|'itervalues'| 'viewkeys'|'viewitems'|'viewvalues') > parens=trailer< '(' ')' > tail=any* > c ó0—|d}|dd}|d}|j}|j}|jd«}|jd«} |s| r|dd}|dvsJt|««‚|D cgc]} | j «‘Œ}} |D cgc]} | j «‘Œ}} | xr|j ||«} |t j|jt«t||j¬ «g«|d j «gz} t j|j| «} | s#| s!d | _ tt|rdnd «| g«} |r$t j|j| g|z«} |j| _ | Scc} wcc} w) NÚheadÚmethodéÚtailr Úviewé)ÚkeysÚitemsÚvalues)ÚprefixÚparensÚÚlist)ÚsymsÚvalueÚ startswithÚreprÚcloneÚin_special_contextrÚNodeÚtrailerrrrÚpowerr)ÚselfÚnodeÚresultsrrrrÚ method_nameÚisiterÚisviewÚnÚspecialÚargsÚnews ú//usr/lib64/python3.12/lib2to3/fixes/fix_dict.pyÚ transformzFixDict.transform6sˆ€Øv‰ˆØ˜Ñ" 1Ñ%ˆØv‰ˆØy‰yˆØ—l‘lˆ Ø×'Ñ'¨Ó/ˆØ×'Ñ'¨Ó/ˆÙ ‘VØ% a b˜/ˆKØÐ9Ñ9ÐG¼4À»<ÓGÐ9Ù#'Ó(¡4˜a—‘•  4ˆÐ(Ù#'Ó(¡4˜a—‘•  4ˆÐ(Ø(ÒD˜t×6Ñ6°t¸VÓDˆØ”v—{‘{ 4§<¡<Ü$'£EÜ$(¨Ø06· ± ô%?ð$@óAð˜xÑ(×.Ñ.Ó0ð 2ñ2ˆô k‰k˜$Ÿ*™* dÓ+ˆÙ™6؈CŒJÜ”t¡f™F°&Ó9¸C¸5ÓAˆCÙ Ü—+‘+˜dŸj™j¨3¨%°$©,Ó7ˆCØ—[‘[ˆŒ ؈ ùò)ùÚ(s Á.F Fz3power< func=NAME trailer< '(' node=any ')' > any* >zmfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > cóŠ—|j€yi}|jjm|jj|jj|«r=|d|ur6|r|djtvS|djt j vS|sy|jj|j|«xr|d|uS)NFr%Úfunc)ÚparentÚp1ÚmatchrÚ iter_exemptr Úconsuming_callsÚp2)r$r%r(r&s r.r zFixDict.in_special_contextZs®€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&Ùà˜v‘×,Ñ,´ Ð;Ð;ð˜v‘×,Ñ,´ ×0JÑ0JÐJÐJÙØàw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNóN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr/ÚP1rÚcompile_patternr3ÚP2r7r ©r8r.r r )sM„Ø€Mð€Gòð8 ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€BóOr8r N) Ú__doc__rrrrr rrrr6r5ÚBaseFixr rAr8r.ÚrDsHðñõ6ÝÝß(Ñ(Ýð×(Ñ(¨F¨8Ñ3€ ôAOˆj× Ñ õAOr8lib2to3/fixes/__pycache__/fix_map.cpython-312.pyc000064400000010630152462633570015513 0ustar00Ë T—çh8ãó~—dZddlmZddlmZddlmZmZmZm Z m Z ddl m Z ddlmZGd„dej «Zy ) aFixer that changes map(F, ...) into list(map(F, ...)) unless there exists a 'from future_builtins import map' statement in the top-level namespace. As a special case, map(None, X) is changed into list(X). (This is necessary because the semantics are changed in this case -- the new map(None, X) is equivalent to [(x,) for x in X].) We avoid the transformation (except for the special case mentioned above) if the map() call is directly contained in iter(<>), list(<>), tuple(<>), sorted(<>), ...join(<>), or for V in <>:. NOTE: This is still not correct if the original code was depending on map(F, X, Y, ...) to go on until the longest argument is exhausted, substituting None for missing values -- like zip(), it now stops as soon as the shortest argument is exhausted. é)Útoken)Ú fixer_base)ÚNameÚArgListÚCallÚListCompÚin_special_context)Úpython_symbols)ÚNodecó—eZdZdZdZdZd„Zy)ÚFixMapTaL map_none=power< 'map' trailer< '(' arglist< 'None' ',' arg=any [','] > ')' > [extra_trailers=trailer*] > | map_lambda=power< 'map' trailer< '(' arglist< lambdef< 'lambda' (fp=NAME | vfpdef< '(' fp=NAME ')'> ) ':' xp=any > ',' it=any > ')' > [extra_trailers=trailer*] > | power< 'map' args=trailer< '(' [any] ')' > [extra_trailers=trailer*] > zfuture_builtins.mapcó —|j|«ryg}d|vr)|dD]!}|j|j««Œ#|jjt j k(rA|j|d«|j«}d|_ttd«|g«}nÈd|vrbt|dj«|dj«|dj««}tt j|g|zd¬ «}nbd |vr|d j«}d|_n d |vrù|d }|jt jk(r|jd jt j k(rs|jd jdjt"j$k(r<|jd jdj&dk(r|j|d«ytt jtd«|j«g«}d|_t)|«rytt jtd«t+g«g|z«}d|_|j|_|S)NÚextra_trailerszYou should use a for loop hereÚÚlistÚ map_lambdaÚxpÚfpÚit)ÚprefixÚmap_noneÚargÚargsééÚNonezjcannot convert map(None, ...) with multiple arguments because map() now truncates to the shortest sequenceÚmap)Ú should_skipÚappendÚcloneÚparentÚtypeÚsymsÚ simple_stmtÚwarningrrrrr ÚpowerÚtrailerÚchildrenÚarglistrÚNAMEÚvaluer r)ÚselfÚnodeÚresultsÚtrailersÚtÚnewrs ú./usr/lib64/python3.12/lib2to3/fixes/fix_map.pyÚ transformzFixMap.transform@s€Ø × Ñ ˜DÔ !Ø àˆØ ˜wÑ &ØÐ-Ô.Ø—‘ §¡£ Õ*ð/ð ;‰;× Ñ œt×/Ñ/Ò /Ø L‰L˜Ð?Ô @Ø—*‘*“,ˆC؈CŒJÜ”t˜F“| c UÓ+ŠCØ ˜WÑ $ܘ7 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0Ø" 4™=×.Ñ.Ó0ó2ˆCô”t—z‘z C 5¨8Ñ#3¸BÔ?ŠCð˜WÑ$ؘe‘n×*Ñ*Ó,Ø– à˜WÑ$Ø" 6™?DØ—y‘y¤D§L¡LÒ0Ø—}‘} QÑ'×,Ñ,´· ± Ò<Ø—}‘} QÑ'×0Ñ0°Ñ3×8Ñ8¼E¿J¹JÒFØ—}‘} QÑ'×0Ñ0°Ñ3×9Ñ9¸VÒCØŸ ™  Tð,NôOðäœtŸz™z¬D°«K¸¿¹»Ð+FÓGCØ!#C”Jä% dÔ+Øä”t—z‘z¤D¨£L´'¸3¸%³.Ð#AÀHÑ#LÓMˆC؈CŒJà—[‘[ˆŒ ؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚskip_onr3©r4r2r r s„Ø€Mð€Gð:$€Gó.r4r N)Ú__doc__Úpgen2rrrÚ fixer_utilrrrrr Úpygramr r#Úpytreer ÚConditionalFixr r;r4r2ÚrBs2ðñõ&ÝßJÕJÝ+ÝôPˆZ× &Ñ &õPr4lib2to3/fixes/__pycache__/fix_isinstance.cpython-312.opt-1.pyc000064400000004447152462633570020046 0ustar00Ë T—çhHãóJ—dZddlmZddlmZGd„dej «Zy)a,Fixer that cleans up a tuple argument to isinstance after the tokens in it were fixed. This is mainly used to remove double occurrences of tokens as a leftover of the long -> int / unicode -> str conversion. eg. isinstance(x, (int, long)) -> isinstance(x, (int, int)) -> isinstance(x, int) é)Ú fixer_base)Útokencó—eZdZdZdZdZd„Zy)Ú FixIsinstanceTz˜ power< 'isinstance' trailer< '(' arglist< any ',' atom< '(' args=testlist_gexp< any+ > ')' > > ')' > > écóЗt«}|d}|j}g}t|«}|D]¼\}} | jtj k(rP| j |vrB|t|«dz ksŒC||dzjtjk(sŒgt|«Œs|j| «| jtj k(sŒ¢|j| j «Œ¾|r#|djtjk(r|d=t|«dk(r5|j} | j|d_ | j|d«y||dd|j«y)NÚargsééÿÿÿÿé)ÚsetÚchildrenÚ enumerateÚtyperÚNAMEÚvalueÚlenÚCOMMAÚnextÚappendÚaddÚparentÚprefixÚreplaceÚchanged) ÚselfÚnodeÚresultsÚnames_insertedÚtestlistr Únew_argsÚiteratorÚidxÚargÚatoms ú5/usr/lib64/python3.12/lib2to3/fixes/fix_isinstance.pyÚ transformzFixIsinstance.transforms€Ü›ˆØ˜6‘?ˆØ× Ñ ˆØˆÜ˜T“?ˆÛ ‰HˆCØx‰xœ5Ÿ:™:Ò%¨#¯)©)°~Ñ*EØœ˜T› Q™Ó&¨4°°a±©=×+=Ñ+=ÄÇÁÓ+Lܘ”NØà—‘ Ô$Ø—8‘8œuŸz™zÓ)Ø"×&Ñ& s§y¡yÕ1ð!ñ ˜ ™ ×)Ñ)¬U¯[©[Ò8ؘ Ü ˆx‹=˜AÒ Ø—?‘?ˆDØ!%§¡ˆHQ‰KÔ Ø L‰L˜ !™Õ %àˆD‘ˆGØ L‰LNóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚ run_orderr'©r(r&rrs„Ø€Mð€Gð€Iór(rN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrr/r(r&Úr4s$ðñõÝô$J×&Ñ&õ$r(lib2to3/fixes/__pycache__/fix_apply.cpython-312.pyc000064400000005323152462633570016066 0ustar00Ë T—çh* ãój—dZddlmZddlmZddlmZddlmZmZm Z Gd„dej«Z y) zIFixer for apply(). This converts apply(func, v, k) into (func)(*v, **k).é)Úpytree)Útoken)Ú fixer_base)ÚCallÚCommaÚ parenthesizecó—eZdZdZdZd„Zy)ÚFixApplyTa. power< 'apply' trailer< '(' arglist< (not argument ')' > > cóì—|j}|sJ‚|d}|d}|jd«}|r?|j|jjk(r|jdj dvry|r@|j|jjk(r|jdj dk(ry|j }|j«}|jtj|jfvrN|j|jk7s*|jdjtjk(r t|«}d|_|j«}d|_||j«}d|_tjtj d «|g}|H|j#t%«tjtjd«|g«d |d_t'|||¬ «S) NÚfuncÚargsÚkwdsé>Ú*ú**réþÿÿÿÚrÚ )Úprefix)ÚsymsÚgetÚtypeÚargumentÚchildrenÚvaluerÚclonerÚNAMEÚatomÚpowerÚ DOUBLESTARrrÚLeafÚSTARÚextendrr) ÚselfÚnodeÚresultsrr r rrÚ l_newargss ú0/usr/lib64/python3.12/lib2to3/fixes/fix_apply.pyÚ transformzFixApply.transformsš€Øy‰yˆÙˆˆwØv‰ˆØv‰ˆØ{‰{˜6Ó"ˆñ Ø— ‘ ˜TŸY™Y×/Ñ/Ò/Ø— ‘ ˜aÑ ×&Ñ&¨+Ñ5ØÙ T—Y‘Y $§)¡)×"4Ñ"4Ò4Ø—]‘] 1Ñ%×+Ñ+¨tÒ3Ø Ø—‘ˆØz‰z‹|ˆØ I‰IœeŸj™j¨$¯)©)Ð4Ñ 4Ø Y‰Y˜$Ÿ*™*Ò $Ø ]‰]˜2Ñ × #Ñ #¤u×'7Ñ'7Ò 7ä Ó%ˆD؈Œ Øz‰z‹|ˆØˆŒ Ø Ð Ø—:‘:“<ˆD؈DŒKÜ—[‘[¤§¡¨SÓ1°4Ð8ˆ Ø Ð Ø × Ñ œe›gÜ$Ÿk™k¬%×*:Ñ*:¸DÓAØ"ð$ô %ð$'ˆIb‰MÔ ôD˜)¨FÔ3Ð3óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr)©r*r(r r s„Ø€Mð €Gó%4r*r N) Ú__doc__rrÚpgen2rrÚ fixer_utilrrrÚBaseFixr r0r*r(Úr5s-ðñ9õ ÝÝß2Ñ2ô64ˆz×!Ñ!õ64r*lib2to3/fixes/__pycache__/fix_print.cpython-312.opt-2.pyc000064400000005775152462633570017050 0ustar00Ë T—çh ãóœ— ddlmZddlmZddlmZddlmZddlmZmZm Z m Z ejd«Z Gd„dej«Zy ) é)Úpatcomp)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚCommaÚStringz"atom< '(' [atom|STRING|NAME] ')' >có —eZdZdZdZd„Zd„Zy)ÚFixPrintTzP simple_stmt< any* bare='print' any* > | print_stmt c ó:—|jd«}|r1|jttd«g|j¬««y|j dd}t |«dk(rtj|d«rydx}x}}|r|dt«k(r|dd}d}|rB|dtjtjd«k(r|dj«}|d d}|Dcgc]}|j«‘Œ} }| r d | d_|€|€|c|%|j| d t!t#|«««|%|j| d t!t#|«««||j| d |«ttd«| «} |j| _| Scc}w)NÚbareÚprint)ÚprefixéééÿÿÿÿÚ z>>éÚÚsepÚendÚfile)ÚgetÚreplacerrrÚchildrenÚlenÚ parend_exprÚmatchr rÚLeafrÚ RIGHTSHIFTÚcloneÚ add_kwargr Úrepr) ÚselfÚnodeÚresultsÚ bare_printÚargsrrrÚargÚl_argsÚn_stmts ú0/usr/lib64/python3.12/lib2to3/fixes/fix_print.pyÚ transformzFixPrint.transform%s…€ð—[‘[ Ó(ˆ á à × Ñ œt¤D¨£M°2Ø&0×&7Ñ&7ô 9ô :à à}‰}˜Q˜RÐ ˆÜ ˆt‹9˜Š>œk×/Ñ/°°Q±Ô8ð àЈЈcDÙ D˜‘H¤£Ò'ؘ˜9ˆD؈CÙ D˜‘GœvŸ{™{¬5×+;Ñ+;¸TÓBÒBà˜‘7—=‘=“?ˆDؘ˜8ˆDá)-Ó.© ##—)‘)•+¨ˆÐ.Ù Ø!ˆF1‰IÔ Ø ˆ?˜c˜o°Ð1A؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@؈ؗ‘˜v u¬f´T¸#³YÓ.?Ô@ØÐØ—‘˜v v¨tÔ4Ü”d˜7“m VÓ,ˆØŸ ™ ˆŒ ؈ ùò/sÃ"Fcó(—d|_tj|jjt |«tj tjd«|f«}|r |jt««d|_|j|«y)NrÚ=r) rrÚNodeÚsymsÚargumentrr rÚEQUALÚappendr )r%Úl_nodesÚs_kwdÚn_exprÚ n_arguments r-r#zFixPrint.add_kwargMsk€àˆŒ Ü—[‘[ §¡×!3Ñ!3Ü"& u£+Ü"(§+¡+¬e¯k©k¸3Ó"?Ø"(ð"*ó+ˆ ñ Ø N‰Nœ5›7Ô #Ø #ˆJÔ Ø‰zÕ"óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr.r#©r:r-r r s„à€Mð€Gò&óP #r:r N)rrrÚpgen2rrÚ fixer_utilrrr r Úcompile_patternrÚBaseFixr r@r:r-ÚrEsGðð õÝÝÝß2Ó2ð&ˆg×%Ñ%Ø6ó€ ô :#ˆz×!Ñ!õ:#r:lib2to3/fixes/__pycache__/fix_ne.cpython-312.opt-2.pyc000064400000001744152462633570016306 0ustar00Ë T—çh;ãóT— ddlmZddlmZddlmZGd„dej «Zy)é)Úpytree)Útoken)Ú fixer_basecó0—eZdZejZd„Zd„Zy)ÚFixNecó —|jdk(S)Nz<>)Úvalue)ÚselfÚnodes ú-/usr/lib64/python3.12/lib2to3/fixes/fix_ne.pyÚmatchz FixNe.matchs€àz‰z˜TÑ!Ð!ócóf—tjtjd|j¬«}|S)Nz!=)Úprefix)rÚLeafrÚNOTEQUALr)r r ÚresultsÚnews r Ú transformzFixNe.transforms!€Ük‰kœ%Ÿ.™.¨$°t·{±{ÔCˆØˆ rN)Ú__name__Ú __module__Ú __qualname__rrÚ _accept_typer r©rr rr s„ð—>‘>€Lò"órrN)ÚrÚpgen2rrÚBaseFixrrrr Úrs'ðð#õÝÝô ˆJ× Ñ õ rlib2to3/fixes/__pycache__/fix_buffer.cpython-312.opt-1.pyc000064400000001702152462633570017146 0ustar00Ë T—çhNãóJ—dZddlmZddlmZGd„dej «Zy)z4Fixer that changes buffer(...) into memoryview(...).é)Ú fixer_base)ÚNamecó—eZdZdZdZdZd„Zy)Ú FixBufferTzR power< name='buffer' trailer< '(' [any] ')' > any* > cóZ—|d}|jtd|j¬««y)NÚnameÚ memoryview)Úprefix)Úreplacerr )ÚselfÚnodeÚresultsrs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_buffer.pyÚ transformzFixBuffer.transforms"€Øv‰ˆØ ‰ ”T˜,¨t¯{©{Ô;Õ<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr©rrrr s„Ø€Mà€Hð€Gó=rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs$ðñ;õÝô = ×"Ñ"õ =rlib2to3/fixes/__pycache__/fix_execfile.cpython-312.pyc000064400000005262152462633570016527 0ustar00Ë T—çhãón—dZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z Gd„dej«Zy)zoFixer for execfile. This converts usages of the execfile function into calls to the built-in exec() function. é)Ú fixer_base) ÚCommaÚNameÚCallÚLParenÚRParenÚDotÚNodeÚArgListÚStringÚsymscó—eZdZdZdZd„Zy)Ú FixExecfileTz« power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > > | power< 'execfile' trailer< '(' filename=any ')' > > có¬—|sJ‚|d}|jd«}|jd«}|jdjdj«}t|j«t «t dd«g|¬«}t tjtd«|g«}t tjt«td «g«t tjt«t«g«g} |g| z} |j«} d| _t d d«} | t «| t «| gz} ttd «| d «}|g}|)|j!t «|j«g«|)|j!t «|j«g«ttd «||j¬«S)NÚfilenameÚglobalsÚlocalséÿÿÿÿz"rb"Ú )ÚrparenÚopenÚreadz'exec'ÚcompileÚÚexec)Úprefix)ÚgetÚchildrenÚcloner rr r r ÚpowerrÚtrailerr rrrrÚextend)ÚselfÚnodeÚresultsrrrÚexecfile_parenÚ open_argsÚ open_callrÚ open_exprÚ filename_argÚexec_strÚ compile_argsÚ compile_callÚargss ú3/usr/lib64/python3.12/lib2to3/fixes/fix_execfile.pyÚ transformzFixExecfile.transforms|€Ùˆˆwؘ:Ñ&ˆØ—+‘+˜iÓ(ˆØ—‘˜XÓ&ˆðŸ™ rÑ*×3Ñ3°BÑ7×=Ñ=Ó?ˆä˜XŸ^™^Ó-¬u«w¼¸vÀsÓ8KÐLØ#1ô3ˆ 䜟™¤d¨6£l°IÐ%>Ó?ˆ Ü”T—\‘\¤C£E¬4°«<Ð#8Ó9Ü”T—\‘\¤F£H¬f«hÐ#7Ó8ð:ˆàK $Ñ&ˆ ð —~‘~Ó'ˆ Ø!ˆ Ôܘ( CÓ(ˆØ ¤E£G¨\¼5»7ÀHÐ#MÑMˆ ÜœD ›O¨\¸2Ó>ˆ àˆ~ˆØ Ð Ø K‰Kœ› '§-¡-£/Ð2Ô 3Ø Ð Ø K‰Kœ› &§,¡,£.Ð1Ô 2Ü”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr0©r1r/rrs„Ø€Mð€Gó r;s0ðñõ ÷1÷1÷1ô&<*×$Ñ$õ& sys.maxsize é)Ú fixer_base)ÚNameÚ attr_chainÚsysÚmaxintÚmaxsizecóL—ddjtt|««zdzS)NÚ(Ú|Ú))ÚjoinÚmapÚrepr)Úmemberss ú2/usr/lib64/python3.12/lib2to3/fixes/fix_renames.pyÚ alternatesrs"€Ø —‘œ#œd GÓ,Ó-Ñ -°Ñ 3Ð3óc #óàK—ttj««D]J\}}t|j««D])\}}|t||f<d|›d|›d|›d–—d|›d|›d–—Œ+ŒLy­w)Nz3 import_from< 'from' module_name=z, 'import' ( attr_name=z | import_as_name< attr_name=z! 'as' any >) > z& power< module_name=z trailer< '.' attr_name=z > any* > )ÚlistÚMAPPINGÚitemsÚLOOKUP)ÚmoduleÚreplaceÚold_attrÚnew_attrs rÚ build_patternrslèø€ä¤§ ¡ £Ö0‰ˆÜ"& w§}¡}£Ö"7Ñ ˆHhØ)1ŒFF˜HÐ%Ò &ò ¢ª8ð5ó 5ò  ¢ð+ó +ñ#8ñ1ùs‚A,A.cóX‡—eZdZdZdj e««ZdZˆfd„Zd„Z ˆxZ S)Ú FixRenamesTr Úprecóz•‡—tt| Љ|«}|r!tˆfd„t |d«D««ry|Sy)Nc3ó.•K—|] }‰|«–—Œy­w)N©)Ú.0ÚobjÚmatchs €rÚ z#FixRenames.match..5søèø€ÐDÑ)C #‘5˜—:Ñ)CùsƒÚparentF)Úsuperrr&Úanyr)ÚselfÚnodeÚresultsr&Ú __class__s @€rr&zFixRenames.match1s;ù€Ü”j $Ñ-ˆÙ˜“+ˆÙ ÜÓD¬°D¸(Ô)CÓDÔDØØˆNØrcóÞ—|jd«}|jd«}|rI|rFt|j|jf}|jt ||j ¬««yyy)NÚ module_nameÚ attr_name)Úprefix)ÚgetrÚvaluerrr2)r+r,r-Úmod_namer1rs rÚ transformzFixRenames.transform>s^€Ø—;‘;˜}Ó-ˆØ—K‘K  Ó,ˆ ñ ™ ܘxŸ~™~¨y¯©Ð?Ñ@ˆHØ × Ñ œd 8°I×4DÑ4DÔEÕ Fð"ˆ8r) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibler rÚPATTERNÚorderr&r6Ú __classcell__)r.s@rrr*s(ø„Ø€MØh‰h‘}“Ó'€Gà €EôöGrrN) Ú__doc__ÚrÚ fixer_utilrrrrrrÚBaseFixrr#rrÚrBsFðñõß)à H˜yÐ)ð €à €ò4ò+ô*G×#Ñ#õGrlib2to3/fixes/__pycache__/fix_reload.cpython-312.opt-2.pyc000064400000002510152462633570017142 0ustar00Ë T—çh9ãóL— ddlmZddlmZmZGd„dej «Zy)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixReloadTÚprezÿ power< 'reload' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)Ú importlibÚreloadr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reload.pyÚ transformzFixReload.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ'ˆÜ˜D '¨5Ó1ˆÜT˜;¨Ô-؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr's$ðð$õ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_itertools_imports.cpython-312.pyc000064400000005224152462633570020542 0ustar00Ë T—çh&ãóR—dZddlmZddlmZmZmZGd„dej«Zy)zA Fixer for imports of itertools.(imap|ifilter|izip|ifilterfalse) é)Ú fixer_base)Ú BlankLineÚsymsÚtokencó*—eZdZdZde«zZd„Zy)ÚFixItertoolsImportsTzT import_from< 'from' 'itertools' 'import' imports=any > có—|d}|jtjk(s |js|g}n |j}|ddd…D]É}|jtj k(r|j }|}nM|jtjk(ry|jtjk(sJ‚|jd}|j }|dvrd|_|j«Œ¤|dvsŒ©|j«|ddk(rdnd |_ŒË|jddxs|g}d } |D]7}| r.|jtjk(r|j«Œ3| d z} Œ9|ra|d jtjk(rA|j«j«|r!|d jtjk(rŒA|js t|d d«r |j€|j} t«}| |_|Sy) NÚimportsér)ÚimapÚizipÚifilter)Ú ifilterfalseÚ izip_longestéÚfÚ filterfalseÚ zip_longestTéÿÿÿÿÚvalue)ÚtyperÚimport_as_nameÚchildrenrÚNAMErÚSTARÚremoveÚchangedÚCOMMAÚpopÚgetattrÚparentÚprefixr) ÚselfÚnodeÚresultsr rÚchildÚmemberÚ name_nodeÚ member_nameÚ remove_commaÚps úr:s%ðÙGõß5Ñ5ô1˜*×,Ñ,õ1r.lib2to3/fixes/__pycache__/fix_next.cpython-312.pyc000064400000010415152462633570015715 0ustar00Ë T—çhf ãó€—dZddlmZddlmZddlmZddlm Z m Z m Z dZ Gd„dej«Zd „Zd „Zd „Zy ) z.Fixer for it.next() -> next(it), per PEP 3114.é)Útoken)Úpython_symbols)Ú fixer_base)ÚNameÚCallÚ find_bindingz;Calls to builtin next() possibly shadowed by global bindingcó0‡—eZdZdZdZdZˆfd„Zd„ZˆxZS)ÚFixNextTa¾ power< base=any+ trailer< '.' attr='next' > trailer< '(' ')' > > | power< head=any+ trailer< '.' attr='next' > not trailer< '(' ')' > > | classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='next' parameters< '(' NAME ')' > any+ > any* > > | global=global_stmt< 'global' any* 'next' any* > Úprecó”•—tt| ||«td|«}|r|j |t «d|_yd|_y)NÚnextTF)Úsuperr Ú start_treerÚwarningÚ bind_warningÚ shadowed_next)ÚselfÚtreeÚfilenameÚnÚ __class__s €ú//usr/lib64/python3.12/lib2to3/fixes/fix_next.pyrzFixNext.start_tree$sAø€Ü ŒgtÑ'¨¨hÔ7ä ˜ Ó &ˆÙ Ø L‰L˜œLÔ )Ø!%ˆDÕ à!&ˆDÕ ócó4—|sJ‚|jd«}|jd«}|jd«}|r‹|jr'|jtd|j¬««y|Dcgc]}|j «‘Œ}}d|d_|jt td|j¬«|««y|r)td|j¬«}|j|«y|r{t|«rU|d }dj|Dcgc] }t|«‘Œc}«j«d k(r|j|t«y|jtd««yd |vr|j|t«d |_yycc}wcc}w) NÚbaseÚattrÚnameÚ__next__)ÚprefixÚér ÚheadÚ __builtin__ÚglobalT) ÚgetrÚreplacerrÚclonerÚis_assign_targetÚjoinÚstrÚstriprr)rÚnodeÚresultsrrrrr"s rÚ transformzFixNext.transform.sI€Ùˆˆwà{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆØ{‰{˜6Ó"ˆá Ø×!Ò!Ø— ‘ œT *°T·[±[ÔAÕBá+/Ó0©4 a˜Ÿ™ ¨4Ð0Ø!#Q‘”Ø— ‘ œT¤$ v°d·k±kÔ"BÀDÓIÕJÙ ÜZ¨¯ © Ô4ˆAØ L‰L˜OÙ ô  Ô%ؘv‘Ø—7‘7©DÓ1©D qœC F¨DÑ1Ó2×8Ñ8Ó:¸mÒKØ—L‘L ¤|Ô4ØØ L‰Lœ˜jÓ)Õ *Ø ˜Ñ Ø L‰L˜œ|Ô ,Ø!%ˆDÕ ð!ùò!1ùò2s Á1FÄF) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNÚorderrr.Ú __classcell__)rs@rr r s ø„Ø€Mð €Gð €Eô'ö&rr cóœ—t|«}|€y|jD]/}|jtjk(ryt ||«sŒ/yy)NFT)Ú find_assignÚchildrenÚtyperÚEQUALÚ is_subtree)r,ÚassignÚchilds rr(r(QsG€Ü ˜Ó €FØ €~Øà—”ˆØ :‰:œŸ™Ò $ÙÜ ˜˜tÕ $Ùð !ð rcó¾—|jtjk(r|S|jtjk(s |j€yt |j«S©N)r9ÚsymsÚ expr_stmtÚ simple_stmtÚparentr7)r,s rr7r7]sD€Ø ‡yy”D—N‘NÒ"؈ Ø ‡yy”D×$Ñ$Ò$¨¯ © Ð(;ØÜ t—{‘{Ó #Ð#rcóL‡—|‰k(rytˆfd„|jD««S)NTc3ó6•K—|]}t|‰«–—Œy­wr?)r;)Ú.0Úcr,s €rÚ zis_subtree..gsøèø€Ð:©M qŒz˜!˜T×"©Mùsƒ)Úanyr8)Úrootr,s `rr;r;ds"ø€Ø ˆt‚|ØÜ Ó:¨D¯MªMÓ:Ó :Ð:rN)Ú__doc__Úpgen2rÚpygramrr@r rÚ fixer_utilrrrrÚBaseFixr r(r7r;©rrÚrQs@ðÙ4õÝ+Ýß1Ñ1àL€ ô:&ˆj× Ñ ô:&ò@ ò$ó;rlib2to3/fixes/__pycache__/fix_input.cpython-312.opt-1.pyc000064400000002357152462633570017043 0ustar00Ë T—çhÄãó~—dZddlmZddlmZmZddlmZejd«ZGd„dej«Z y) z4Fixer that changes input(...) into eval(input(...)).é)Ú fixer_base)ÚCallÚName)Úpatcompz&power< 'eval' trailer< '(' any ')' > >có—eZdZdZdZd„Zy)ÚFixInputTzL power< 'input' args=trailer< '(' [any] ')' > > cóÈ—tj|jj«ry|j«}d|_t t d«|g|j¬«S)NÚÚeval)Úprefix)ÚcontextÚmatchÚparentÚcloner rr)ÚselfÚnodeÚresultsÚnews ú0/usr/lib64/python3.12/lib2to3/fixes/fix_input.pyÚ transformzFixInput.transformsF€ä =‰=˜Ÿ™×+Ñ+Ô ,Ø àj‰j‹lˆØˆŒ Ü”D˜“L 3 %°· ± Ô<Ð<óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrr s„Ø€Mð€Gó=rrN) Ú__doc__r rÚ fixer_utilrrrÚcompile_patternr ÚBaseFixrrrrÚr"s:ðÙ:õß#Ýð "ˆ'× !Ñ !Ð"JÓ K€ô =ˆz×!Ñ!õ =rlib2to3/fixes/__pycache__/fix_itertools.cpython-312.pyc000064400000003666152462633570016775 0ustar00Ë T—çh ãóJ—dZddlmZddlmZGd„dej «Zy)aT Fixer for itertools.(imap|ifilter|izip) --> (map|filter|zip) and itertools.ifilterfalse --> itertools.filterfalse (bugs 2360-2363) imports from itertools are fixed in fix_itertools_import.py If itertools is imported as something else (ie: import itertools as it; it.izip(spam, eggs)) method calls will not get fixed. é)Ú fixer_base)ÚNamecó2—eZdZdZdZde«zZdZd„Zy)Ú FixItertoolsTz7('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')zì power< it='itertools' trailer< dot='.' func=%(it_funcs)s > trailer< '(' [any] ')' > > | power< func=%(it_funcs)s trailer< '(' [any] ')' > > écóP—d}|dd}d|vr_|jdvrQ|d|d}}|j}|j«|j«|jj |«|xs |j}|j t |jdd|¬««y)NÚfuncéÚit)Ú ifilterfalseÚ izip_longestÚdoté)Úprefix)ÚvaluerÚremoveÚparentÚreplacer)ÚselfÚnodeÚresultsrr rr s ú4/usr/lib64/python3.12/lib2to3/fixes/fix_itertools.pyÚ transformzFixItertools.transforms”€ØˆØv‰˜qÑ!ˆØ G‰OØ J‰JÐ>Ñ >ؘu‘~ w¨t¡}ˆCà—Y‘YˆFØ I‰IŒKð J‰JŒLØ K‰K× Ñ  Ô %àÒ&˜4Ÿ;™;ˆØ ‰ ”T˜$Ÿ*™* Q R˜.°Ô8Õ9óN) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚit_funcsÚlocalsÚPATTERNÚ run_orderr©rrrrs+„Ø€MØH€Hðñ “Hñ €Gð€Ió:rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrr#rrÚr(s$ðñõÝô::×%Ñ%õ:rlib2to3/fixes/__pycache__/fix_idioms.cpython-312.pyc000064400000012526152462633570016230 0ustar00Ë T—çh ãóf—dZddlmZddlmZmZmZmZmZm Z dZ dZ Gd„dej«Z y) aÜAdjust some old Python 2 idioms to their modern counterparts. * Change some type comparisons to isinstance() calls: type(x) == T -> isinstance(x, T) type(x) is T -> isinstance(x, T) type(x) != T -> not isinstance(x, T) type(x) is not T -> not isinstance(x, T) * Change "while 1:" into "while True:". * Change both v = list(EXPR) v.sort() foo(v) and the more general v = EXPR v.sort() foo(v) into v = sorted(EXPR) foo(v) é)Ú fixer_base)ÚCallÚCommaÚNameÚNodeÚ BlankLineÚsymsz0(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)z(power< 'type' trailer< '(' x=any ')' > >c óX‡—eZdZdZde›de›de›de›d Zˆfd„Zd„Zd„Z d „Z d „Z ˆxZ S) Ú FixIdiomsTz isinstance=comparison< Ú z8 T=any > | isinstance=comparison< T=any aX > | while_stmt< 'while' while='1' ':' any+ > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' power< list='list' trailer< '(' (not arglist) any ')' > > > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' expr=any > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > cóV•—tt| |«}|rd|vr|d|dk(r|Sy|S)NÚsortedÚid1Úid2)Úsuperr Úmatch)ÚselfÚnodeÚrÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_idioms.pyrzFixIdioms.matchOs<ø€Ü ”)˜TÑ (¨Ó .ˆñ ˜Q‘؉x˜1˜U™8Ò#ØØØˆócóœ—d|vr|j||«Sd|vr|j||«Sd|vr|j||«Std«‚)NÚ isinstanceÚwhilerz Invalid match)Útransform_isinstanceÚtransform_whileÚtransform_sortÚ RuntimeError)rrÚresultss rÚ transformzFixIdioms.transformZs^€Ø ˜7Ñ "Ø×,Ñ,¨T°7Ó;Ð ;Ø ˜Ñ Ø×'Ñ'¨¨gÓ6Ð 6Ø ˜Ñ Ø×&Ñ& t¨WÓ5Ð 5ä˜Ó/Ð /rcó0—|dj«}|dj«}d|_d|_ttd«|t «|g«}d|vr,d|_t t jtd«|g«}|j|_|S)NÚxÚTÚr rÚnÚnot)ÚcloneÚprefixrrrrr Únot_test)rrr r#r$Útests rrzFixIdioms.transform_isinstanceds„€Ø C‰L× Ñ Ó ˆØ C‰L× Ñ Ó ˆØˆŒØˆŒÜ”D˜Ó&¨¬E«G°Q¨Ó8ˆØ '‰>؈DŒKÜœŸ ™ ¬¨U« °TÐ':Ó;ˆDØ—k‘kˆŒ ؈ rcóZ—|d}|jtd|j¬««y)NrÚTrue©r))Úreplacerr))rrr Úones rrzFixIdioms.transform_whileps#€ØgÑˆØ ‰ ”D˜¨¯ © Ô3Õ4rcóî—|d}|d}|jd«}|jd«}|r'|jtd|j¬««nV|rI|j «}d|_|jt td«|g|j¬««n t d«‚|j«|j}d |vrª|r=|jd «d |d jf} d j| «|d _y|jsJ‚|jJ‚t«} |jj| «|j| usJ‚|jd «d | _yy) NÚsortÚnextÚlistÚexprrr.r%zshould not have reached hereÚ é)Úgetr/rr)r(rrÚremoveÚ rpartitionÚjoinÚparentÚ next_siblingrÚ append_child) rrr Ú sort_stmtÚ next_stmtÚ list_callÚ simple_exprÚnewÚbtwnÚ prefix_linesÚend_lines rrzFixIdioms.transform_sorttsf€Ø˜F‘Oˆ ؘF‘Oˆ Ø—K‘K Ó'ˆ Ø—k‘k &Ó)ˆ á Ø × Ñ œd 8°I×4DÑ4DÔEÕ FÙ Ø×#Ñ#Ó%ˆC؈CŒJØ × Ñ ¤¤T¨(£^°c°UØ,7×,>Ñ,>ô!@õ AôÐ=Ó>Ð >Ø×ÑÔà×шð 4‰<Ùð!%§¡°Ó 5°aÑ 8¸)ÀA¹,×:MÑ:MÐN Ø&*§i¡i° Ó&= ˜!‘ Õ#à ×'Ò'Ð'Ð'Ø ×-Ñ-Ð5Ð5Ð5ä$›;Ø× Ñ ×-Ñ-¨hÔ7Ø ×-Ñ-°Ñ9Ð9Ð9ð#'§/¡/°$Ó"7¸Ñ":•ð! r) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚTYPEÚCMPÚPATTERNrr!rrrÚ __classcell__)rs@rr r %s6ø„ØHòN ’’cš4ðK%!€GôN ò0ò ò5ö$;rr N)Ú__doc__r%rÚ fixer_utilrrrrrr rLrKÚBaseFixr ©rrÚrSs3ðñõ<ßA×Aà8€Ø1€ôs; ×"Ñ"õs;rlib2to3/fixes/__pycache__/fix_exec.cpython-312.opt-1.pyc000064400000003070152462633570016621 0ustar00Ë T—çhÓãóR—dZddlmZddlmZmZmZGd„dej«Zy)z•Fixer for exec. This converts usages of the exec statement into calls to a built-in exec() function. exec code in ns1, ns2 -> exec(code, ns1, ns2) é)Ú fixer_base)ÚCommaÚNameÚCallcó—eZdZdZdZd„Zy)ÚFixExecTzx exec_stmt< 'exec' a=any 'in' b=any [',' c=any] > | exec_stmt< 'exec' (not atom<'(' [any] ')'>) a=any > cóŒ—|j}|d}|jd«}|jd«}|j«g}d|d_|)|j t «|j«g«|)|j t «|j«g«t td«||j¬«S)NÚaÚbÚcÚéÚexec)Úprefix)ÚsymsÚgetÚclonerÚextendrrr)ÚselfÚnodeÚresultsrr r r Úargss ú//usr/lib64/python3.12/lib2to3/fixes/fix_exec.pyÚ transformzFixExec.transforms›€ày‰yˆØ C‰LˆØ K‰K˜Ó ˆØ K‰K˜Ó ˆØ—‘“ ˆ{ˆØˆˆQ‰ŒØ ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -Ø ˆ=Ø K‰Kœ› !§'¡'£)Ð,Ô -ä”D˜“L $¨t¯{©{Ô;Ð;óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€Gó r%s'ðñõß*Ñ*ô<ˆj× Ñ õ Exception.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)ÚFixStandarderrorTz- 'StandardError' có0—td|j¬«S)NÚ Exception)Úprefix)rr )ÚselfÚnodeÚresultss ú8/usr/lib64/python3.12/lib2to3/fixes/fix_standarderror.pyÚ transformzFixStandarderror.transforms€ÜK¨¯ © Ô4Ð4óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rr rr s„Ø€Mð€Gó5rrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrr Úrs$ðñ,õÝô5z×)Ñ)õ5rlib2to3/fixes/__pycache__/fix_operator.cpython-312.opt-2.pyc000064400000012021152462633570017525 0ustar00Ë T—çhb ãób— ddlZddlmZddlmZmZmZmZd„Z Gd„dej«Z y)éN)Ú fixer_base)ÚCallÚNameÚStringÚ touch_importcó‡—ˆfd„}|S)Ncó•—‰|_|S©N)Ú invocation)ÚfÚss €ú3/usr/lib64/python3.12/lib2to3/fixes/fix_operator.pyÚdeczinvocation..decsø€ØˆŒ ؈ó©)r rs` rr r sø€ôð €Jrcó—eZdZdZdZdZdZdeee¬«zZd„Z e d«d „«Z e d «d „«Z e d «d „«Z e d«d„«Ze d«d„«Ze d«d„«Ze d«d„«Zd„Zd„Zd„Zy)Ú FixOperatorTÚprezµ method=('isCallable'|'sequenceIncludes' |'isSequenceType'|'isMappingType'|'isNumberType' |'repeat'|'irepeat') z'(' obj=any ')'z¼ power< module='operator' trailer< '.' %(methods)s > trailer< %(obj)s > > | power< %(methods)s trailer< %(obj)s > > )ÚmethodsÚobjcó>—|j||«}| |||«Syr )Ú _check_method)ÚselfÚnodeÚresultsÚmethods rÚ transformzFixOperator.transform+s,€Ø×#Ñ# D¨'Ó2ˆØ Ð Ù˜$ Ó(Ð (ð rzoperator.contains(%s)có(—|j||d«S)NÚcontains©Ú_handle_rename©rrrs rÚ_sequenceIncludeszFixOperator._sequenceIncludes0s€à×"Ñ" 4¨°*Ó=Ð=rz callable(%s)cól—|d}ttd«|j«g|j¬«S)NrÚcallable©Úprefix)rrÚcloner')rrrrs rÚ _isCallablezFixOperator._isCallable4s+€àe‰nˆÜ”D˜Ó$ s§y¡y£{ m¸D¿K¹KÔHÐHrzoperator.mul(%s)có(—|j||d«S)NÚmulr r"s rÚ_repeatzFixOperator._repeat9s€à×"Ñ" 4¨°%Ó8Ð8rzoperator.imul(%s)có(—|j||d«S)NÚimulr r"s rÚ_irepeatzFixOperator._irepeat=s€à×"Ñ" 4¨°&Ó9Ð9rz(isinstance(%s, collections.abc.Sequence)có*—|j||dd«S)Núcollections.abcÚSequence©Ú_handle_type2abcr"s rÚ_isSequenceTypezFixOperator._isSequenceTypeAs€à×$Ñ$ T¨7Ð4EÀzÓRÐRrz'isinstance(%s, collections.abc.Mapping)có*—|j||dd«S)Nr1ÚMappingr3r"s rÚ_isMappingTypezFixOperator._isMappingTypeEs€à×$Ñ$ T¨7Ð4EÀyÓQÐQrzisinstance(%s, numbers.Number)có*—|j||dd«S)NÚnumbersÚNumberr3r"s rÚ _isNumberTypezFixOperator._isNumberTypeIs€à×$Ñ$ T¨7°I¸xÓHÐHrcóB—|dd}||_|j«y)Nrr)ÚvalueÚchanged)rrrÚnamers rr!zFixOperator._handle_renameMs"€Ø˜Ñ" 1Ñ%ˆØˆŒ ؉ÕrcóÆ—td||«|d}|j«tddj||g«z«g}t t d«||j ¬«S)Nrz, Ú.Ú isinstancer&)rr(rÚjoinrrr')rrrÚmoduleÚabcrÚargss rr4zFixOperator._handle_type2abcRsV€ÜT˜6 4Ô(Øe‰nˆØ— ‘ “ œV D¨3¯8©8°V¸S°MÓ+BÑ$BÓCÐDˆÜ”D˜Ó&¨°T·[±[ÔAÐArcóü—t|d|ddjz«}t|tjj «r9d|vr|St |d«f}|j|z}|j|d|z«y)NÚ_rrrErzYou should use '%s' here.) Úgetattrr>rCÚ collectionsrFÚCallableÚstrr Úwarning)rrrrÚsubÚinvocation_strs rrzFixOperator._check_methodXs|€Ü˜˜s W¨XÑ%6°qÑ%9×%?Ñ%?Ñ?Ó@ˆÜ fœkŸo™o×6Ñ6Ô 7ؘ7Ñ"Ø ä˜7 5™>Ó*Ð,Ø!'×!2Ñ!2°SÑ!8Ø— ‘ ˜TÐ#>ÀÑ#OÔPØrN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderrrÚdictÚPATTERNrr r#r)r,r/r5r8r<r!r4rrrrrrs„Ø€MØ €Eð€Gð €Cðñ  ¨cÔ2ñ 3€Gò)ñ Ð'Ó(ñ>ó)ð>ñÓñIó ðIñÐ"Ó#ñ9ó$ð9ñÐ#Ó$ñ:ó%ð:ñÐ:Ó;ñSó<ðSñÐ9Ó:ñRó;ðRñÐ0Ó1ñIó2ðIòò Bó rr) Úcollections.abcrKÚlib2to3rÚlib2to3.fixer_utilrrrrr ÚBaseFixrrrrÚr\s3ðð óõß?Ó?òôG*×$Ñ$õGrlib2to3/fixes/__pycache__/fix_raise.cpython-312.opt-2.pyc000064400000005314152462633570017004 0ustar00Ë T—çhn ãóp— ddlmZddlmZddlmZddlmZmZmZm Z m Z Gd„dej«Z y)é)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚAttrÚArgListÚis_tuplecó—eZdZdZdZd„Zy)ÚFixRaiseTzB raise_stmt< 'raise' exc=any [',' val=any [',' tb=any]] > cóv—|j}|dj«}|jtjk(rd}|j ||«yt |«rHt |«r6|jdjdj«}t |«rŒ6d|_d|vr>tj|jtd«|g«}|j|_|S|dj«}t |«r+|jddDcgc]}|j«‘Œ} }n d |_|g} d |vr·|d j«} d | _|} |jtjk7s|jd k7r t|| «} t!| td ««t#| g«gz} tj|j$td«g| z«}|j|_|Stj|jtd«t|| «g|j¬ «Scc}w)NÚexcz+Python 3 does not support string exceptionsééÚ ÚvalÚraiseéÿÿÿÿÚÚtbÚNoneÚwith_traceback)Úprefix)ÚsymsÚcloneÚtyperÚSTRINGÚcannot_convertr ÚchildrenrrÚNodeÚ raise_stmtrÚNAMEÚvaluerrr Ú simple_stmt) ÚselfÚnodeÚresultsrrÚmsgÚnewrÚcÚargsrÚeÚwith_tbs ú0/usr/lib64/python3.12/lib2to3/fixes/fix_raise.pyÚ transformzFixRaise.transform&s߀Øy‰yˆàe‰n×"Ñ"Ó$ˆØ 8‰8”u—|‘|Ò #Ø?ˆCØ × Ñ   cÔ *Ø ô CŒ=ܘ3”-ð—l‘l 1‘o×.Ñ.¨qÑ1×7Ñ7Ó9ô˜3•-ðˆCŒJà ˜Ñ ä—+‘+˜dŸo™o´°W³ ¸sÐ/CÓDˆCØŸ™ˆCŒJ؈Jàe‰n×"Ñ"Ó$ˆÜ CŒ=Ø'*§|¡|°A°bÑ'9Ó:Ñ'9 !A—G‘G•IÐ'9ˆDÑ:àˆCŒJØ5ˆDà 7‰?ؘ‘×$Ñ$Ó&ˆB؈BŒIàˆAðx‰xœ5Ÿ:™:Ò%¨¯©°fÒ)<ܘ˜d“Oܘ1œdÐ#3Ó4Ó5¼À"À»¸ÑGˆGÜ—+‘+˜d×.Ñ.´°g³°À'Ñ0IÓJˆCØŸ™ˆCŒJ؈Jä—;‘;˜tŸ™Ü $ W£ ¬t°C¸«Ð?Ø&*§k¡kô3ð 3ùò);sÄH6N)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr/©ór.r r s„à€Mð€Gó43r6r N) rrÚpgen2rrÚ fixer_utilrrrr r ÚBaseFixr r5r6r.Úr:s-ððõ2ÝÝß<Õ<ô;3ˆz×!Ñ!õ;3r6lib2to3/fixes/__pycache__/fix_set_literal.cpython-312.opt-2.pyc000064400000004776152462633570020223 0ustar00Ë T—çh¡ãóP— ddlmZmZddlmZmZGd„dej «Zy)é)Ú fixer_baseÚpytree)ÚtokenÚsymscó—eZdZdZdZdZd„Zy)Ú FixSetLiteralTajpower< 'set' trailer< '(' (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) > | single=any) ']' > | atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' > ) ')' > > có—|jd«}|rGtjtj|j «g«}|j |«|}n|d}tjtjd«g}|jd„|jD««|jtjtjd««|jj|d_tjtj |«}|j|_t#|j«dk(r=|jd}|j%«|j|jd_|S) NÚsingleÚitemsÚ{c3ó<K—|]}|j«–—Œy­w)N)Úclone)Ú.0Úns ú6/usr/lib64/python3.12/lib2to3/fixes/fix_set_literal.pyÚ z*FixSetLiteral.transform..'sèø€Ð9©. Qq—w‘w—y©.ùs‚Ú}éÿÿÿÿéé)ÚgetrÚNoderÚ listmakerrÚreplaceÚLeafrÚLBRACEÚextendÚchildrenÚappendÚRBRACEÚ next_siblingÚprefixÚ dictsetmakerÚlenÚremove) ÚselfÚnodeÚresultsr Úfaker ÚliteralÚmakerrs rÚ transformzFixSetLiteral.transforms€Ø—‘˜XÓ&ˆÙ ä—;‘;œtŸ~™~°· ± ³Ð/?Ó@ˆDØ N‰N˜4Ô Ø‰Eà˜GÑ$ˆEô—;‘;œuŸ|™|¨SÓ1Ð2ˆØ‰Ñ9¨%¯.ª.Ó9Ô9؉”v—{‘{¤5§<¡<°Ó5Ô6à"×/Ñ/×6Ñ6ˆ‰ ÔÜ— ‘ œD×-Ñ-¨wÓ7ˆØ—{‘{ˆŒ ô ˆu~‰~Ó  !Ò #Ø—‘˜qÑ!ˆAØ H‰HŒJØ()¯©ˆEN‰N˜2Ñ Ô %ðˆ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚexplicitÚPATTERNr,©r-rrr s„à€MØ€Hð€Gór-rN)Úlib2to3rrÚlib2to3.fixer_utilrrÚBaseFixrr4r-rÚr8s$ðð÷ 'ß*ô)J×&Ñ&õ)r-lib2to3/fixes/__pycache__/fix_import.cpython-312.opt-2.pyc000064400000007560152462633570017220 0ustar00Ë T—çh¸ ãón— ddlmZddlmZmZmZmZddlmZm Z m Z d„Z Gd„dej«Z y) é)Ú fixer_baseé)ÚdirnameÚjoinÚexistsÚsep)Ú FromImportÚsymsÚtokenc#óXK— |g}|r|j«}|jtjk(r|j–—nÙ|jt j k(r6dj|jDcgc]}|j‘Œc}«–—n†|jt jk(r|j|jd«nJ|jt jk(r"|j|jddd…«n td«‚|rŒyycc}w­w)NÚréþÿÿÿzunknown node type)ÚpopÚtyper ÚNAMEÚvaluer Ú dotted_namerÚchildrenÚdotted_as_nameÚappendÚdotted_as_namesÚextendÚAssertionError)ÚnamesÚpendingÚnodeÚchs ú1/usr/lib64/python3.12/lib2to3/fixes/fix_import.pyÚtraverse_importsrsÜèø€ððˆg€GÚ Ø{‰{‹}ˆØ 9‰9œŸ ™ Ò "Ø—*‘*Ó Ø Y‰Yœ$×*Ñ*Ò *Ø—'‘'¨d¯mªmÓ<©m¨˜2Ÿ8›8¨mÑ<Ó=Ó =Ø Y‰Yœ$×-Ñ-Ò -Ø N‰N˜4Ÿ=™=¨Ñ+Õ ,Ø Y‰Yœ$×.Ñ.Ò .Ø N‰N˜4Ÿ=™=©¨2¨Ñ.Õ /ä Ð!4Ó5Ð 5õ ùò =ùs‚A:D*Á<D%ÂBD*Ä#D*có2‡—eZdZdZdZˆfd„Zd„Zd„ZˆxZS)Ú FixImportTzj import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > cóT•—tt| ||«d|jv|_y)NÚabsolute_import)Úsuperr!Ú start_treeÚfuture_featuresÚskip)ÚselfÚtreeÚnameÚ __class__s €rr%zFixImport.start_tree/s&ø€Ü Œi˜Ñ)¨$°Ô5Ø%¨×)=Ñ)=Ð=ˆ ócóô—|jry|d}|jtjk(rit |d«s|j d}t |d«sŒ|j |j«r%d|jz|_|j«yyd}d}t|«D]}|j |«rd}Œd}Œ|r|r|j|d«ytd|g«}|j|_ |S)NÚimprrÚ.FTz#absolute and local imports together) r'rr Ú import_fromÚhasattrrÚprobably_a_local_importrÚchangedrÚwarningr Úprefix)r(rÚresultsr.Ú have_localÚ have_absoluteÚmod_nameÚnews rÚ transformzFixImport.transform3sè€Ø 9Š9Ø Øe‰nˆà 9‰9œ×(Ñ(Ò (ô ˜c 7Ô+Ø—l‘l 1‘oô˜c 7Õ+à×+Ñ+¨C¯I©IÔ6Ø #§)¡)™O” Ø— ‘ • ð7ðˆJØ!ˆMÜ,¨SÖ1Ø×/Ñ/°Ô9Ø!%‘Jà$(‘Mð 2ñ Ùð—L‘L Ð'LÔMØä˜S 3 %Ó(ˆCØŸ™ˆCŒJ؈Jr,có—|jd«ry|jdd«d}t|j«}t ||«}t t t|«d««sydt ddd d fD]}t ||z«sŒy y) Nr/Férz __init__.pyz.pyz.pycz.soz.slz.pydT)Ú startswithÚsplitrÚfilenamerrr)r(Úimp_nameÚ base_pathÚexts rr2z!FixImport.probably_a_local_importUs†€Ø × Ñ ˜sÔ #àØ—>‘> # qÓ)¨!Ñ,ˆÜ˜DŸM™MÓ*ˆ ܘ HÓ-ˆ ô”dœ7 9Ó-¨}Ó=Ô>ØØœ3 ¨¨u°fÓ=ˆCÜi #‘oÕ&Ùð>ðr,) Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr%r;r2Ú __classcell__)r+s@rr!r!&sø„Ø€Mð€Gô >ò öDr,r!N)r rÚos.pathrrrrÚ fixer_utilr r r rÚBaseFixr!©r,rÚrNs2ðð õß.Ó.ß0Ñ0ò6ô&= ×"Ñ"õ=r,lib2to3/fixes/__pycache__/__init__.cpython-312.opt-1.pyc000064400000000220152462633570016560 0ustar00Ë T—çh/ãó—y)N©róú//usr/lib64/python3.12/lib2to3/fixes/__init__.pyÚrsñrlib2to3/fixes/__pycache__/fix_idioms.cpython-312.opt-2.pyc000064400000011321152462633570017160 0ustar00Ë T—çh ãód— ddlmZddlmZmZmZmZmZmZdZ dZ Gd„dej«Z y)é)Ú fixer_base)ÚCallÚCommaÚNameÚNodeÚ BlankLineÚsymsz0(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)z(power< 'type' trailer< '(' x=any ')' > >c óX‡—eZdZdZde›de›de›de›d Zˆfd„Zd„Zd„Z d „Z d „Z ˆxZ S) Ú FixIdiomsTz isinstance=comparison< Ú z8 T=any > | isinstance=comparison< T=any aX > | while_stmt< 'while' while='1' ':' any+ > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' power< list='list' trailer< '(' (not arglist) any ')' > > > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > | sorted=any< any* simple_stmt< expr_stmt< id1=any '=' expr=any > '\n' > sort= simple_stmt< power< id2=any trailer< '.' 'sort' > trailer< '(' ')' > > '\n' > next=any* > cóV•—tt| |«}|rd|vr|d|dk(r|Sy|S)NÚsortedÚid1Úid2)Úsuperr Úmatch)ÚselfÚnodeÚrÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_idioms.pyrzFixIdioms.matchOs<ø€Ü ”)˜TÑ (¨Ó .ˆñ ˜Q‘؉x˜1˜U™8Ò#ØØØˆócóœ—d|vr|j||«Sd|vr|j||«Sd|vr|j||«Std«‚)NÚ isinstanceÚwhilerz Invalid match)Útransform_isinstanceÚtransform_whileÚtransform_sortÚ RuntimeError)rrÚresultss rÚ transformzFixIdioms.transformZs^€Ø ˜7Ñ "Ø×,Ñ,¨T°7Ó;Ð ;Ø ˜Ñ Ø×'Ñ'¨¨gÓ6Ð 6Ø ˜Ñ Ø×&Ñ& t¨WÓ5Ð 5ä˜Ó/Ð /rcó0—|dj«}|dj«}d|_d|_ttd«|t «|g«}d|vr,d|_t t jtd«|g«}|j|_|S)NÚxÚTÚr rÚnÚnot)ÚcloneÚprefixrrrrr Únot_test)rrr r#r$Útests rrzFixIdioms.transform_isinstanceds„€Ø C‰L× Ñ Ó ˆØ C‰L× Ñ Ó ˆØˆŒØˆŒÜ”D˜Ó&¨¬E«G°Q¨Ó8ˆØ '‰>؈DŒKÜœŸ ™ ¬¨U« °TÐ':Ó;ˆDØ—k‘kˆŒ ؈ rcóZ—|d}|jtd|j¬««y)NrÚTrue©r))Úreplacerr))rrr Úones rrzFixIdioms.transform_whileps#€ØgÑˆØ ‰ ”D˜¨¯ © Ô3Õ4rcó–—|d}|d}|jd«}|jd«}|r'|jtd|j¬««nV|rI|j «}d|_|jt td«|g|j¬««n t d«‚|j«|j}d |vr~|r=|jd «d |d jf} d j| «|d _yt«} |jj| «|jd «d | _yy) NÚsortÚnextÚlistÚexprrr.r%zshould not have reached hereÚ é) Úgetr/rr)r(rrÚremoveÚ rpartitionÚjoinrÚparentÚ append_child) rrr Ú sort_stmtÚ next_stmtÚ list_callÚ simple_exprÚnewÚbtwnÚ prefix_linesÚend_lines rrzFixIdioms.transform_sortts3€Ø˜F‘Oˆ ؘF‘Oˆ Ø—K‘K Ó'ˆ Ø—k‘k &Ó)ˆ á Ø × Ñ œd 8°I×4DÑ4DÔEÕ FÙ Ø×#Ñ#Ó%ˆC؈CŒJØ × Ñ ¤¤T¨(£^°c°UØ,7×,>Ñ,>ô!@õ AôÐ=Ó>Ð >Ø×ÑÔà×шð 4‰<Ùð!%§¡°Ó 5°aÑ 8¸)ÀA¹,×:MÑ:MÐN Ø&*§i¡i° Ó&= ˜!‘ Õ#ô %›;Ø× Ñ ×-Ñ-¨hÔ7ð#'§/¡/°$Ó"7¸Ñ":•ð! r) Ú__name__Ú __module__Ú __qualname__ÚexplicitÚTYPEÚCMPÚPATTERNrr!rrrÚ __classcell__)rs@rr r %s6ø„ØHòN ’’cš4ðK%!€GôN ò0ò ò5ö$;rr N) r%rÚ fixer_utilrrrrrr rKrJÚBaseFixr ©rrÚrQs3ððõ<ßA×Aà8€Ø1€ôs; ×"Ñ"õs;rlib2to3/fixes/__pycache__/fix_reload.cpython-312.opt-1.pyc000064400000002612152462633570017144 0ustar00Ë T—çh9ãóN—dZddlmZddlmZmZGd„dej «Zy)z5Fixer for reload(). reload(s) -> importlib.reload(s)é)Ú fixer_base)Ú ImportAndCallÚ touch_importcó—eZdZdZdZdZd„Zy)Ú FixReloadTÚprezÿ power< 'reload' trailer< lpar='(' ( not(arglist | argument) any ','> ) rpar=')' > after=any* > cóΗ|rF|d}|r?|j|jjk(r|jdjdvryd}t |||«}t dd|«|S)NÚobjé>ú**Ú*)Ú importlibÚreloadr)ÚtypeÚsymsÚargumentÚchildrenÚvaluerr)ÚselfÚnodeÚresultsr ÚnamesÚnews ú1/usr/lib64/python3.12/lib2to3/fixes/fix_reload.pyÚ transformzFixReload.transformsf€Ù ð˜%‘.ˆCÙØ—H‘H § ¡ × 2Ñ 2Ò2Ø—L‘L ‘O×)Ñ)¨[Ñ8ØØ'ˆÜ˜D '¨5Ó1ˆÜT˜;¨Ô-؈ óN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚorderÚPATTERNr©rrrr s„Ø€MØ €Eð€Gó rrN)Ú__doc__ÚrÚ fixer_utilrrÚBaseFixrr#rrÚr(s$ðñ$õ ß4ô ×"Ñ"õrlib2to3/fixes/__pycache__/fix_xrange.cpython-312.pyc000064400000007344152462633570016232 0ustar00Ë T—çh† ãó^—dZddlmZddlmZmZmZddlmZGd„dej«Z y)z/Fixer that changes xrange(...) into range(...).é)Ú fixer_base)ÚNameÚCallÚconsuming_calls)Úpatcompc󔇗eZdZdZdZˆfd„Zd„Zd„Zd„Zd„Z dZ e je «Z d Ze je«Zd „ZˆxZS) Ú FixXrangeTzˆ power< (name='range'|name='xrange') trailer< '(' args=any ')' > rest=any* > cóL•—tt| ||«t«|_y©N)Úsuperr Ú start_treeÚsetÚtransformed_xranges)ÚselfÚtreeÚfilenameÚ __class__s €ú1/usr/lib64/python3.12/lib2to3/fixes/fix_xrange.pyr zFixXrange.start_treesø€Ü Œi˜Ñ)¨$°Ô9Ü#&£5ˆÕ ócó—d|_yr )r)rrrs rÚ finish_treezFixXrange.finish_trees €Ø#'ˆÕ rcó¸—|d}|jdk(r|j||«S|jdk(r|j||«Stt |««‚)NÚnameÚxrangeÚrange)ÚvalueÚtransform_xrangeÚtransform_rangeÚ ValueErrorÚrepr©rÚnodeÚresultsrs rÚ transformzFixXrange.transformsX€Øv‰ˆØ :‰:˜Ò !Ø×(Ñ(¨¨wÓ7Ð 7Ø Z‰Z˜7Ò "Ø×'Ñ'¨¨gÓ6Ð 6äœT $›ZÓ(Ð (rcó¢—|d}|jtd|j¬««|jj t |««y)Nrr©Úprefix)Úreplacerr'rÚaddÚidr!s rrzFixXrange.transform_xrange$s:€Øv‰ˆØ ‰ ”T˜'¨$¯+©+Ô6Ô7à × Ñ ×$Ñ$¤R¨£XÕ.rcó"—t|«|jvrx|j|«sftt d«|dj «g«}tt d«|g|j ¬«}|dD]}|j|«Œ|Syy)NrÚargsÚlistr&Úrest)r*rÚin_special_contextrrÚcloner'Ú append_child)rr"r#Ú range_callÚ list_callÚns rrzFixXrange.transform_range*s‹€Ü ˆt‹H˜D×4Ñ4Ñ 4Ø×'Ñ'¨Ô-Üœd 7›m¨g°f©o×.CÑ.CÓ.EÐ-FÓGˆJäœT &›\¨J¨<Ø$(§K¡Kô1ˆIð˜V”_Ø×&Ñ& qÕ)ð%àÐ ð.ð 5rz3power< func=NAME trailer< '(' node=any ')' > any* >zŸfor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > | comparison< any 'in' node=any any*> cóB—|j€yi}|jjL|jj|jj|«r|d|ur|djtvS|j j|j|«xr|d|uS)NFr"Úfunc)ÚparentÚp1ÚmatchrrÚp2)rr"r#s rr/zFixXrange.in_special_context?sˆ€Ø ;‰;Ð ØØˆØ K‰K× Ñ Ð *Øw‰w}‰}˜TŸ[™[×/Ñ/°Ô9Øv‰ $Ñ&à˜6‘?×(Ñ(¬OÐ;Ð ;àw‰w}‰}˜TŸ[™[¨'Ó2ÒN°w¸v±È$Ð7NÐNr)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr rr$rrÚP1rÚcompile_patternr8ÚP2r:r/Ú __classcell__)rs@rr r sbø„Ø€Mð€Gô )ò(ò)ò/ò ð ?€BØ ˆ× Ñ  Ó $€Bð €Bð !ˆ× Ñ  Ó $€Bö Orr N) Ú__doc__ÚrÚ fixer_utilrrrrÚBaseFixr ©rrÚrIs,ðñ6õß4Ñ4Ýô=O ×"Ñ"õ=Orlib2to3/fixes/__pycache__/fix_imports2.cpython-312.opt-2.pyc000064400000001003152462633570017447 0ustar00Ë T—çh!ãóF— ddlmZdddœZGd„dej«Zy)é)Ú fix_importsÚdbm)ÚwhichdbÚanydbmcó—eZdZdZeZy)Ú FixImports2éN)Ú__name__Ú __module__Ú __qualname__Ú run_orderÚMAPPINGÚmapping©óú3/usr/lib64/python3.12/lib2to3/fixes/fix_imports2.pyrr s „à€IàGrrN)ÚrrÚ FixImportsrrrrÚrs.ððåðØñ €ô +×(Ñ(õrlib2to3/fixes/__pycache__/fix_urllib.cpython-312.opt-1.pyc000064400000021673152462633570017177 0ustar00Ë T—çh¯ ãóÆ—dZddlmZmZddlmZmZmZmZm Z m Z m Z dgd¢fdgd¢fdd gfgdgd ¢fdd d gfgd œZ e dje dd«d„ZGd„de«Zy)z¾Fix changes imports of urllib which are now incompatible. This is rather similar to fix_imports, but because of the more complex nature of the fixing for urllib, it has its own fixer. é)Ú alternatesÚ FixImports)ÚNameÚCommaÚ FromImportÚNewlineÚfind_indentationÚNodeÚsymszurllib.request) Ú URLopenerÚFancyURLopenerÚ urlretrieveÚ _urlopenerÚurlopenÚ urlcleanupÚ pathname2urlÚ url2pathnameÚ getproxiesz urllib.parse)ÚquoteÚ quote_plusÚunquoteÚ unquote_plusÚ urlencodeÚ splitattrÚ splithostÚ splitnportÚ splitpasswdÚ splitportÚ splitqueryÚsplittagÚ splittypeÚ splituserÚ splitvaluez urllib.errorÚContentTooShortError)rÚinstall_openerÚ build_openerÚRequestÚOpenerDirectorÚ BaseHandlerÚHTTPDefaultErrorHandlerÚHTTPRedirectHandlerÚHTTPCookieProcessorÚ ProxyHandlerÚHTTPPasswordMgrÚHTTPPasswordMgrWithDefaultRealmÚAbstractBasicAuthHandlerÚHTTPBasicAuthHandlerÚProxyBasicAuthHandlerÚAbstractDigestAuthHandlerÚHTTPDigestAuthHandlerÚProxyDigestAuthHandlerÚ HTTPHandlerÚ HTTPSHandlerÚ FileHandlerÚ FTPHandlerÚCacheFTPHandlerÚUnknownHandlerÚURLErrorÚ HTTPError)ÚurllibÚurllib2r?r>éc #óêK—t«}tj«D]N\}}|D]D}|\}}t|«}d|›d|›d–—d|›d|›d|›d–—d|z–—d |z–—d |›d |›d –—ŒFŒPy­w) Nzimport_name< 'import' (module=zB | dotted_as_names< any* module=z any* >) > zimport_from< 'from' mod_member=z* 'import' ( member=z | import_as_name< member=z] 'as' any > | import_as_names< members=any* >) > zIimport_from< 'from' module_star=%r 'import' star='*' > ztimport_name< 'import' dotted_as_name< module_as=%r 'as' any > > zpower< bare_with_attr=z trailer< '.' member=z > any* > )ÚsetÚMAPPINGÚitemsr)ÚbareÚ old_moduleÚchangesÚchangeÚ new_moduleÚmemberss ú1/usr/lib64/python3.12/lib2to3/fixes/fix_urllib.pyÚ build_patternrL0s™èø€Ü ‹5€DÜ&Ÿ}™}žÑˆ GÛˆFØ"(Ñ ˆJ˜Ü  Ó)‰Gò$¢Zð1ó 1ò $¢Wªgð7ò 7ðØ"ñ#ò #ðà"ñ#ó #ò $¢Wð.ó .ñ!ñ /ùs‚A1A3có*—eZdZd„Zd„Zd„Zd„Zd„Zy)Ú FixUrllibcó4—djt««S)NÚ|)ÚjoinrL)Úselfs rKrLzFixUrllib.build_patternIs€Øx‰xœ ›Ó(Ð(ócóR—|jd«}|j}g}t|jddD]+}|j t |d|¬«t «g«Œ-|jt t|jdd|¬««|j|«y)z‘Transform for the basic import case. Replaces the old import name with a comma separated list of its replacements. ÚmoduleNéÿÿÿÿr©Úprefix) ÚgetrXrCÚvalueÚextendrrÚappendÚreplace)rRÚnodeÚresultsÚ import_modÚprefÚnamesÚnames rKÚtransform_importzFixUrllib.transform_importLs”€ð —[‘[ Ó*ˆ Ø× Ñ ˆàˆô˜J×,Ñ,Ñ-¨c¨rÓ2ˆDØ L‰Lœ$˜t A™w¨tÔ4´e³gÐ>Õ ?ð3à ‰ ”Tœ' *×"2Ñ"2Ñ3°BÑ7¸Ñ:À4ÔHÔIØ×ј5Õ!rScóD—|jd«}|j}|jd«}|ryt|t«r|d}d}t|j D]}|j |dvsŒ|d}n|r|j t||¬««y|j|d«yg}i} |d} | D]Å}|jtjk(r3|jd j } |jdj } n|j } d} | d k7sŒgt|j D]I}| |dvsŒ |d| vr|j|d«| j|dg«j|«ŒKŒÇg} t|«}d }d „}|D]¬}| |}g}|dd D]3}|j!|||««|jt#««Œ5|j!||d |««t%||«}|r%|j&jj)|«r||_| j|«d}Œ®| rMg}| dd D]}|j!|t+«g«Œ|j| d «|j |«y|j|d«y)zšTransform for imports of specific module elements. Replaces the module to be imported from with the appropriate new module. Ú mod_memberÚmemberrNr@rWú!This is an invalid module elementrJéÚ,Tcó\—|jtjk(rxt|jdj |¬«|jdj «|jdj «g}ttj|«gSt|j |¬«gS)NrrWr@ri)Útyper Úimport_as_namerÚchildrenrZÚcloner )rcrXÚkidss rKÚ handle_namez/FixUrllib.transform_member..handle_nameŒsŠ€Ø—9‘9¤× 3Ñ 3Ò3Ü  §¡¨qÑ!1×!7Ñ!7ÀÔGØ ŸM™M¨!Ñ,×2Ñ2Ó4Ø ŸM™M¨!Ñ,×2Ñ2Ó4ð6Dô!¤×!4Ñ!4°dÓ;Ð<Ð<ܘTŸZ™Z°Ô7Ð8Ð8rSrVFzAll module elements are invalid)rYrXÚ isinstanceÚlistrCrZr]rÚcannot_convertrlr rmrnr\Ú setdefaultr r[rrÚparentÚendswithr)rRr^r_rfrargÚnew_namerHÚmodulesÚmod_dictrJÚas_nameÚ member_nameÚ new_nodesÚ indentationÚfirstrqrUÚeltsrbÚeltÚnewÚnodesÚnew_nodes rKÚtransform_memberzFixUrllib.transform_member\sŠ€ð —[‘[ Ó.ˆ Ø× Ñ ˆØ—‘˜XÓ&ˆñ ä˜&¤$Ô'Ø ™ØˆHÜ! *×"2Ñ"2Ô3Ø—<‘< 6¨!¡9Ò,Ø% a™yHÙð4ñØ×"Ñ"¤4¨¸Ô#>Õ?à×#Ñ# DÐ*MÕNð ˆG؈HؘiÑ(ˆGÛ!à—;‘;¤$×"5Ñ"5Ò5Ø$Ÿo™o¨aÑ0×6Ñ6GØ"(§/¡/°!Ñ"4×":Ñ":‘Kà"(§,¡,KØ"GØ #Ó%Ü")¨*×*:Ñ*:Ô";˜Ø&¨&°©)Ò3Ø% a™y°Ñ8Ø '§¡¨v°a©yÔ 9Ø$×/Ñ/°°q± ¸2Ó>×EÑEÀfÕMñ #<ð"ðˆIÜ*¨4Ó0ˆK؈Eò 9ó"Ø Ñ'ØØ  ›9CØ—L‘L¡¨S°$Ó!7Ô8Ø—L‘L¤£Õ)ð%ð— ‘ ™[¨¨b©°4Ó8Ô9Ü  ¨Ó/Ù § ¡ × 2Ñ 2× ;Ñ ;¸KÔ HØ!,C”JØ× Ñ  Ô%Ø‘ð"ñØØ )¨#¨2£HØ—L‘L (¬G«IÐ!6Õ7ð!/à— ‘ ˜Y r™]Ô+Ø— ‘ ˜UÕ#à×#Ñ# DÐ*KÕLrScóL—|jd«}|jd«}d}t|t«r|d}t|jD]}|j|dvsŒ|d}n|r'|j t ||j¬««y|j|d«y)z.Transform for calls to module members in code.Úbare_with_attrrgNrr@rWrh) rYrrrsrCrZr]rrXrt)rRr^r_Ú module_dotrgrxrHs rKÚ transform_dotzFixUrllib.transform_dot¨s €à—[‘[Ð!1Ó2ˆ Ø—‘˜XÓ&ˆØˆÜ fœdÔ #ؘA‘YˆFܘj×.Ñ.Ô/ˆFØ|‰|˜v a™yÒ(Ø! !™9Ùð0ñ Ø × Ñ œt HØ+5×+<Ñ+<ô >õ ?ð × Ñ  Ð&IÕ JrScól—|jd«r|j||«y|jd«r|j||«y|jd«r|j||«y|jd«r|j |d«y|jd«r|j |d«yy)NrUrfr‡Ú module_starzCannot handle star imports.Ú module_asz#This module is now multiple modules)rYrdr…r‰rt)rRr^r_s rKÚ transformzFixUrllib.transform¹s–€Ø ;‰;xÔ Ø × !Ñ ! $¨Õ 0Ø [‰[˜Ô &Ø × !Ñ ! $¨Õ 0Ø [‰[Ð)Ô *Ø × Ñ ˜t WÕ -à [‰[˜Ô 'Ø × Ñ  Ð&CÕ DØ [‰[˜Ô %Ø × Ñ  Ð&KÕ Lð&rSN)Ú__name__Ú __module__Ú __qualname__rLrdr…r‰r©rSrKrNrNGs „ò)ò"ò JMòXKó" MrSrNN)Ú__doc__Úlib2to3.fixes.fix_importsrrÚlib2to3.fixer_utilrrrrr r r rCr\rLrNr‘rSrKÚr•s¶ðñ÷=÷>÷>ñ>ð"òCðDð ò?ð@ð  Ø+Ð,ð.ð /ð"ò 'ð (ð Ø Ð-ð/ð ñ €ðBˆ Ñ×ј' (Ñ+¨AÑ.Ô/ò.ô.}M õ}MrSlib2to3/fixes/__pycache__/fix_nonzero.cpython-312.opt-1.pyc000064400000002064152462633570017371 0ustar00Ë T—çhOãóJ—dZddlmZddlmZGd„dej «Zy)z*Fixer for __nonzero__ -> __bool__ methods.é)Ú fixer_base)ÚNamecó—eZdZdZdZd„Zy)Ú FixNonzeroTzÓ classdef< 'class' any+ ':' suite< any* funcdef< 'def' name='__nonzero__' parameters< '(' NAME ')' > any+ > any* > > có^—|d}td|j¬«}|j|«y)NÚnameÚ__bool__)Úprefix)rr Úreplace)ÚselfÚnodeÚresultsrÚnews ú2/usr/lib64/python3.12/lib2to3/fixes/fix_nonzero.pyÚ transformzFixNonzero.transforms'€Øv‰ˆÜ: d§k¡kÔ2ˆØ ‰ SÕóN)Ú__name__Ú __module__Ú __qualname__Ú BM_compatibleÚPATTERNr©rrrrs„Ø€Mð€GórrN)Ú__doc__ÚrÚ fixer_utilrÚBaseFixrrrrÚrs"ðÙ0õÝô ×#Ñ#õ rlib2to3/fixes/fix_set_literal.py000064400000003241152462633570012704 0ustar00""" Optional fixer to transform set() calls to set literals. """ # Author: Benjamin Peterson from lib2to3 import fixer_base, pytree from lib2to3.fixer_util import token, syms class FixSetLiteral(fixer_base.BaseFix): BM_compatible = True explicit = True PATTERN = """power< 'set' trailer< '(' (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) > | single=any) ']' > | atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' > ) ')' > > """ def transform(self, node, results): single = results.get("single") if single: # Make a fake listmaker fake = pytree.Node(syms.listmaker, [single.clone()]) single.replace(fake) items = fake else: items = results["items"] # Build the contents of the literal literal = [pytree.Leaf(token.LBRACE, "{")] literal.extend(n.clone() for n in items.children) literal.append(pytree.Leaf(token.RBRACE, "}")) # Set the prefix of the right brace to that of the ')' or ']' literal[-1].prefix = items.next_sibling.prefix maker = pytree.Node(syms.dictsetmaker, literal) maker.prefix = node.prefix # If the original was a one tuple, we need to remove the extra comma. if len(maker.children) == 4: n = maker.children[2] n.remove() maker.children[-1].prefix = n.prefix # Finally, replace the set call with our shiny new literal. return maker lib2to3/fixes/fix_import.py000064400000006270152462633570011714 0ustar00"""Fixer for import statements. If spam is being imported from the local directory, this import: from spam import eggs Becomes: from .spam import eggs And this import: import spam Becomes: from . import spam """ # Local imports from .. import fixer_base from os.path import dirname, join, exists, sep from ..fixer_util import FromImport, syms, token def traverse_imports(names): """ Walks over all the names imported in a dotted_as_names node. """ pending = [names] while pending: node = pending.pop() if node.type == token.NAME: yield node.value elif node.type == syms.dotted_name: yield "".join([ch.value for ch in node.children]) elif node.type == syms.dotted_as_name: pending.append(node.children[0]) elif node.type == syms.dotted_as_names: pending.extend(node.children[::-2]) else: raise AssertionError("unknown node type") class FixImport(fixer_base.BaseFix): BM_compatible = True PATTERN = """ import_from< 'from' imp=any 'import' ['('] any [')'] > | import_name< 'import' imp=any > """ def start_tree(self, tree, name): super(FixImport, self).start_tree(tree, name) self.skip = "absolute_import" in tree.future_features def transform(self, node, results): if self.skip: return imp = results['imp'] if node.type == syms.import_from: # Some imps are top-level (eg: 'import ham') # some are first level (eg: 'import ham.eggs') # some are third level (eg: 'import ham.eggs as spam') # Hence, the loop while not hasattr(imp, 'value'): imp = imp.children[0] if self.probably_a_local_import(imp.value): imp.value = "." + imp.value imp.changed() else: have_local = False have_absolute = False for mod_name in traverse_imports(imp): if self.probably_a_local_import(mod_name): have_local = True else: have_absolute = True if have_absolute: if have_local: # We won't handle both sibling and absolute imports in the # same statement at the moment. self.warning(node, "absolute and local imports together") return new = FromImport(".", [imp]) new.prefix = node.prefix return new def probably_a_local_import(self, imp_name): if imp_name.startswith("."): # Relative imports are certainly not local imports. return False imp_name = imp_name.split(".", 1)[0] base_path = dirname(self.filename) base_path = join(base_path, imp_name) # If there is no __init__.py next to the file its not in a package # so can't be a relative import. if not exists(join(dirname(base_path), "__init__.py")): return False for ext in [".py", sep, ".pyc", ".so", ".sl", ".pyd"]: if exists(base_path + ext): return True return False lib2to3/fixes/fix_xreadlines.py000064400000001261152462633570012533 0ustar00"""Fix "for x in f.xreadlines()" -> "for x in f". This fixer will also convert g(f.xreadlines) into g(f.__iter__).""" # Author: Collin Winter # Local imports from .. import fixer_base from ..fixer_util import Name class FixXreadlines(fixer_base.BaseFix): BM_compatible = True PATTERN = """ power< call=any+ trailer< '.' 'xreadlines' > trailer< '(' ')' > > | power< any+ trailer< '.' no_call='xreadlines' > > """ def transform(self, node, results): no_call = results.get("no_call") if no_call: no_call.replace(Name("__iter__", prefix=no_call.prefix)) else: node.replace([x.clone() for x in results["call"]]) lib2to3/Grammar.txt000064400000020770152462633570010174 0ustar00# Grammar for 2to3. This grammar supports Python 2.x and 3.x. # NOTE WELL: You should also follow all the steps listed at # https://devguide.python.org/grammar/ # Start symbols for the grammar: # file_input is a module or sequence of commands read from an input file; # single_input is a single interactive statement; # eval_input is the input for the eval() and input() functions. # NB: compound_stmt in single_input is followed by extra NEWLINE! file_input: (NEWLINE | stmt)* ENDMARKER single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE eval_input: testlist NEWLINE* ENDMARKER decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE decorators: decorator+ decorated: decorators (classdef | funcdef | async_funcdef) async_funcdef: ASYNC funcdef funcdef: 'def' NAME parameters ['->' test] ':' suite parameters: '(' [typedargslist] ')' # The following definition for typedarglist is equivalent to this set of rules: # # arguments = argument (',' argument)* # argument = tfpdef ['=' test] # kwargs = '**' tname [','] # args = '*' [tname] # kwonly_kwargs = (',' argument)* [',' [kwargs]] # args_kwonly_kwargs = args kwonly_kwargs | kwargs # poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] # typedargslist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs # typedarglist = arguments ',' '/' [',' [typedargslist_no_posonly]])|(typedargslist_no_posonly)" # # It needs to be fully expanded to allow our LL(1) parser to work on it. typedargslist: tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [ ',' [((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* [',' ['**' tname [',']]] | '**' tname [',']) | tfpdef ['=' test] (',' tfpdef ['=' test])* [','])] ] | ((tfpdef ['=' test] ',')* ('*' [tname] (',' tname ['=' test])* [',' ['**' tname [',']]] | '**' tname [',']) | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) tname: NAME [':' test] tfpdef: tname | '(' tfplist ')' tfplist: tfpdef (',' tfpdef)* [','] # The following definition for varargslist is equivalent to this set of rules: # # arguments = argument (',' argument )* # argument = vfpdef ['=' test] # kwargs = '**' vname [','] # args = '*' [vname] # kwonly_kwargs = (',' argument )* [',' [kwargs]] # args_kwonly_kwargs = args kwonly_kwargs | kwargs # poskeyword_args_kwonly_kwargs = arguments [',' [args_kwonly_kwargs]] # vararglist_no_posonly = poskeyword_args_kwonly_kwargs | args_kwonly_kwargs # varargslist = arguments ',' '/' [','[(vararglist_no_posonly)]] | (vararglist_no_posonly) # # It needs to be fully expanded to allow our LL(1) parser to work on it. varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [ ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]] | '**' vname [',']) | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) ]] | ((vfpdef ['=' test] ',')* ('*' [vname] (',' vname ['=' test])* [',' ['**' vname [',']]]| '**' vname [',']) | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) vname: NAME vfpdef: vname | '(' vfplist ')' vfplist: vfpdef (',' vfpdef)* [','] stmt: simple_stmt | compound_stmt simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt) expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*) annassign: ':' test ['=' test] testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=') # For normal and annotated assignments, additional restrictions enforced by the interpreter print_stmt: 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] ) del_stmt: 'del' exprlist pass_stmt: 'pass' flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt break_stmt: 'break' continue_stmt: 'continue' return_stmt: 'return' [testlist_star_expr] yield_stmt: yield_expr raise_stmt: 'raise' [test ['from' test | ',' test [',' test]]] import_stmt: import_name | import_from import_name: 'import' dotted_as_names import_from: ('from' ('.'* dotted_name | '.'+) 'import' ('*' | '(' import_as_names ')' | import_as_names)) import_as_name: NAME ['as' NAME] dotted_as_name: dotted_name ['as' NAME] import_as_names: import_as_name (',' import_as_name)* [','] dotted_as_names: dotted_as_name (',' dotted_as_name)* dotted_name: NAME ('.' NAME)* global_stmt: ('global' | 'nonlocal') NAME (',' NAME)* exec_stmt: 'exec' expr ['in' test [',' test]] assert_stmt: 'assert' test [',' test] compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt async_stmt: ASYNC (funcdef | with_stmt | for_stmt) if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite] while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite] for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] try_stmt: ('try' ':' suite ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] | 'finally' ':' suite)) with_stmt: 'with' with_item (',' with_item)* ':' suite with_item: test ['as' expr] with_var: 'as' expr # NB compile.c makes sure that the default except clause is last except_clause: 'except' [test [(',' | 'as') test]] suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT # Backward compatibility cruft to support: # [ x for x in lambda: True, lambda: False if x() ] # even while also allowing: # lambda x: 5 if x else 2 # (But not a mix of the two) testlist_safe: old_test [(',' old_test)+ [',']] old_test: or_test | old_lambdef old_lambdef: 'lambda' [varargslist] ':' old_test namedexpr_test: test [':=' test] test: or_test ['if' or_test 'else' test] | lambdef or_test: and_test ('or' and_test)* and_test: not_test ('and' not_test)* not_test: 'not' not_test | comparison comparison: expr (comp_op expr)* comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' star_expr: '*' expr expr: xor_expr ('|' xor_expr)* xor_expr: and_expr ('^' and_expr)* and_expr: shift_expr ('&' shift_expr)* shift_expr: arith_expr (('<<'|'>>') arith_expr)* arith_expr: term (('+'|'-') term)* term: factor (('*'|'@'|'/'|'%'|'//') factor)* factor: ('+'|'-'|'~') factor | power power: [AWAIT] atom trailer* ['**' factor] atom: ('(' [yield_expr|testlist_gexp] ')' | '[' [listmaker] ']' | '{' [dictsetmaker] '}' | '`' testlist1 '`' | NAME | NUMBER | STRING+ | '.' '.' '.') listmaker: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] ) testlist_gexp: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] ) lambdef: 'lambda' [varargslist] ':' test trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME subscriptlist: subscript (',' subscript)* [','] subscript: test | [test] ':' [test] [sliceop] sliceop: ':' [test] exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] testlist: test (',' test)* [','] dictsetmaker: ( ((test ':' test | '**' expr) (comp_for | (',' (test ':' test | '**' expr))* [','])) | ((test | star_expr) (comp_for | (',' (test | star_expr))* [','])) ) classdef: 'class' NAME ['(' [arglist] ')'] ':' suite arglist: argument (',' argument)* [','] # "test '=' test" is really "keyword '=' test", but we have no such token. # These need to be in a single rule to avoid grammar that is ambiguous # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, # we explicitly match '*' here, too, to give it proper precedence. # Illegal combinations and orderings are blocked in ast.c: # multiple (test comp_for) arguments are blocked; keyword unpackings # that precede iterable unpackings are blocked; etc. argument: ( test [comp_for] | test ':=' test | test '=' test | '**' test | '*' test ) comp_iter: comp_for | comp_if comp_for: [ASYNC] 'for' exprlist 'in' testlist_safe [comp_iter] comp_if: 'if' old_test [comp_iter] testlist1: test (',' test)* # not used in grammar, but may appear in "node" passed from Parser to Compiler encoding_decl: NAME yield_expr: 'yield' [yield_arg] yield_arg: 'from' test | testlist_star_expr lib2to3/refactor.py000064400000065563152462633570010235 0ustar00# Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Refactoring framework. Used as a main program, this can refactor any number of files and/or recursively descend down directories. Imported as a module, this provides infrastructure to write your own refactoring tool. """ __author__ = "Guido van Rossum " # Python imports import io import os import pkgutil import sys import logging import operator import collections from itertools import chain # Local imports from .pgen2 import driver, tokenize, token from .fixer_util import find_root from . import pytree, pygram from . import btm_matcher as bm def get_all_fix_names(fixer_pkg, remove_prefix=True): """Return a sorted list of all available fix names in the given package.""" pkg = __import__(fixer_pkg, [], [], ["*"]) fix_names = [] for finder, name, ispkg in pkgutil.iter_modules(pkg.__path__): if name.startswith("fix_"): if remove_prefix: name = name[4:] fix_names.append(name) return fix_names class _EveryNode(Exception): pass def _get_head_types(pat): """ Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. """ if isinstance(pat, (pytree.NodePattern, pytree.LeafPattern)): # NodePatters must either have no type and no content # or a type and content -- so they don't get any farther # Always return leafs if pat.type is None: raise _EveryNode return {pat.type} if isinstance(pat, pytree.NegatedPattern): if pat.content: return _get_head_types(pat.content) raise _EveryNode # Negated Patterns don't have a type if isinstance(pat, pytree.WildcardPattern): # Recurse on each node in content r = set() for p in pat.content: for x in p: r.update(_get_head_types(x)) return r raise Exception("Oh no! I don't understand pattern %s" %(pat)) def _get_headnode_dict(fixer_list): """ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. """ head_nodes = collections.defaultdict(list) every = [] for fixer in fixer_list: if fixer.pattern: try: heads = _get_head_types(fixer.pattern) except _EveryNode: every.append(fixer) else: for node_type in heads: head_nodes[node_type].append(fixer) else: if fixer._accept_type is not None: head_nodes[fixer._accept_type].append(fixer) else: every.append(fixer) for node_type in chain(pygram.python_grammar.symbol2number.values(), pygram.python_grammar.tokens): head_nodes[node_type].extend(every) return dict(head_nodes) def get_fixers_from_package(pkg_name): """ Return the fully qualified names for fixers in the package pkg_name. """ return [pkg_name + "." + fix_name for fix_name in get_all_fix_names(pkg_name, False)] def _identity(obj): return obj def _detect_future_features(source): have_docstring = False gen = tokenize.generate_tokens(io.StringIO(source).readline) def advance(): tok = next(gen) return tok[0], tok[1] ignore = frozenset({token.NEWLINE, tokenize.NL, token.COMMENT}) features = set() try: while True: tp, value = advance() if tp in ignore: continue elif tp == token.STRING: if have_docstring: break have_docstring = True elif tp == token.NAME and value == "from": tp, value = advance() if tp != token.NAME or value != "__future__": break tp, value = advance() if tp != token.NAME or value != "import": break tp, value = advance() if tp == token.OP and value == "(": tp, value = advance() while tp == token.NAME: features.add(value) tp, value = advance() if tp != token.OP or value != ",": break tp, value = advance() else: break except StopIteration: pass return frozenset(features) class FixerError(Exception): """A fixer could not be loaded.""" class RefactoringTool(object): _default_options = {"print_function" : False, "exec_function": False, "write_unchanged_files" : False} CLASS_PREFIX = "Fix" # The prefix for fixer classes FILE_PREFIX = "fix_" # The prefix for modules with a fixer within def __init__(self, fixer_names, options=None, explicit=None): """Initializer. Args: fixer_names: a list of fixers to import options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. """ self.fixers = fixer_names self.explicit = explicit or [] self.options = self._default_options.copy() if options is not None: self.options.update(options) self.grammar = pygram.python_grammar.copy() if self.options['print_function']: del self.grammar.keywords["print"] elif self.options['exec_function']: del self.grammar.keywords["exec"] # When this is True, the refactor*() methods will call write_file() for # files processed even if they were not changed during refactoring. If # and only if the refactor method's write parameter was True. self.write_unchanged_files = self.options.get("write_unchanged_files") self.errors = [] self.logger = logging.getLogger("RefactoringTool") self.fixer_log = [] self.wrote = False self.driver = driver.Driver(self.grammar, convert=pytree.convert, logger=self.logger) self.pre_order, self.post_order = self.get_fixers() self.files = [] # List of files that were or should be modified self.BM = bm.BottomMatcher() self.bmi_pre_order = [] # Bottom Matcher incompatible fixers self.bmi_post_order = [] for fixer in chain(self.post_order, self.pre_order): if fixer.BM_compatible: self.BM.add_fixer(fixer) # remove fixers that will be handled by the bottom-up # matcher elif fixer in self.pre_order: self.bmi_pre_order.append(fixer) elif fixer in self.post_order: self.bmi_post_order.append(fixer) self.bmi_pre_order_heads = _get_headnode_dict(self.bmi_pre_order) self.bmi_post_order_heads = _get_headnode_dict(self.bmi_post_order) def get_fixers(self): """Inspects the options to load the requested patterns and handlers. Returns: (pre_order, post_order), where pre_order is the list of fixers that want a pre-order AST traversal, and post_order is the list that want post-order traversal. """ pre_order_fixers = [] post_order_fixers = [] for fix_mod_path in self.fixers: mod = __import__(fix_mod_path, {}, {}, ["*"]) fix_name = fix_mod_path.rsplit(".", 1)[-1] if fix_name.startswith(self.FILE_PREFIX): fix_name = fix_name[len(self.FILE_PREFIX):] parts = fix_name.split("_") class_name = self.CLASS_PREFIX + "".join([p.title() for p in parts]) try: fix_class = getattr(mod, class_name) except AttributeError: raise FixerError("Can't find %s.%s" % (fix_name, class_name)) from None fixer = fix_class(self.options, self.fixer_log) if fixer.explicit and self.explicit is not True and \ fix_mod_path not in self.explicit: self.log_message("Skipping optional fixer: %s", fix_name) continue self.log_debug("Adding transformation: %s", fix_name) if fixer.order == "pre": pre_order_fixers.append(fixer) elif fixer.order == "post": post_order_fixers.append(fixer) else: raise FixerError("Illegal fixer order: %r" % fixer.order) key_func = operator.attrgetter("run_order") pre_order_fixers.sort(key=key_func) post_order_fixers.sort(key=key_func) return (pre_order_fixers, post_order_fixers) def log_error(self, msg, *args, **kwds): """Called when an error occurs.""" raise def log_message(self, msg, *args): """Hook to log a message.""" if args: msg = msg % args self.logger.info(msg) def log_debug(self, msg, *args): if args: msg = msg % args self.logger.debug(msg) def print_output(self, old_text, new_text, filename, equal): """Called with the old version, new version, and filename of a refactored file.""" pass def refactor(self, items, write=False, doctests_only=False): """Refactor a list of files and directories.""" for dir_or_file in items: if os.path.isdir(dir_or_file): self.refactor_dir(dir_or_file, write, doctests_only) else: self.refactor_file(dir_or_file, write, doctests_only) def refactor_dir(self, dir_name, write=False, doctests_only=False): """Descends down a directory and refactor every Python file found. Python files are assumed to have a .py extension. Files and subdirectories starting with '.' are skipped. """ py_ext = os.extsep + "py" for dirpath, dirnames, filenames in os.walk(dir_name): self.log_debug("Descending into %s", dirpath) dirnames.sort() filenames.sort() for name in filenames: if (not name.startswith(".") and os.path.splitext(name)[1] == py_ext): fullname = os.path.join(dirpath, name) self.refactor_file(fullname, write, doctests_only) # Modify dirnames in-place to remove subdirs with leading dots dirnames[:] = [dn for dn in dirnames if not dn.startswith(".")] def _read_python_source(self, filename): """ Do our best to decode a Python source file correctly. """ try: f = open(filename, "rb") except OSError as err: self.log_error("Can't open %s: %s", filename, err) return None, None try: encoding = tokenize.detect_encoding(f.readline)[0] finally: f.close() with io.open(filename, "r", encoding=encoding, newline='') as f: return f.read(), encoding def refactor_file(self, filename, write=False, doctests_only=False): """Refactors a file.""" input, encoding = self._read_python_source(filename) if input is None: # Reading the file failed. return input += "\n" # Silence certain parse errors if doctests_only: self.log_debug("Refactoring doctests in %s", filename) output = self.refactor_docstring(input, filename) if self.write_unchanged_files or output != input: self.processed_file(output, filename, input, write, encoding) else: self.log_debug("No doctest changes in %s", filename) else: tree = self.refactor_string(input, filename) if self.write_unchanged_files or (tree and tree.was_changed): # The [:-1] is to take off the \n we added earlier self.processed_file(str(tree)[:-1], filename, write=write, encoding=encoding) else: self.log_debug("No changes in %s", filename) def refactor_string(self, data, name): """Refactor a given input string. Args: data: a string holding the code to be refactored. name: a human-readable name for use in error/log messages. Returns: An AST corresponding to the refactored input stream; None if there were errors during the parse. """ features = _detect_future_features(data) if "print_function" in features: self.driver.grammar = pygram.python_grammar_no_print_statement try: tree = self.driver.parse_string(data) except Exception as err: self.log_error("Can't parse %s: %s: %s", name, err.__class__.__name__, err) return finally: self.driver.grammar = self.grammar tree.future_features = features self.log_debug("Refactoring %s", name) self.refactor_tree(tree, name) return tree def refactor_stdin(self, doctests_only=False): input = sys.stdin.read() if doctests_only: self.log_debug("Refactoring doctests in stdin") output = self.refactor_docstring(input, "") if self.write_unchanged_files or output != input: self.processed_file(output, "", input) else: self.log_debug("No doctest changes in stdin") else: tree = self.refactor_string(input, "") if self.write_unchanged_files or (tree and tree.was_changed): self.processed_file(str(tree), "", input) else: self.log_debug("No changes in stdin") def refactor_tree(self, tree, name): """Refactors a parse tree (modifying the tree in place). For compatible patterns the bottom matcher module is used. Otherwise the tree is traversed node-to-node for matches. Args: tree: a pytree.Node instance representing the root of the tree to be refactored. name: a human-readable name for this tree. Returns: True if the tree was modified, False otherwise. """ for fixer in chain(self.pre_order, self.post_order): fixer.start_tree(tree, name) #use traditional matching for the incompatible fixers self.traverse_by(self.bmi_pre_order_heads, tree.pre_order()) self.traverse_by(self.bmi_post_order_heads, tree.post_order()) # obtain a set of candidate nodes match_set = self.BM.run(tree.leaves()) while any(match_set.values()): for fixer in self.BM.fixers: if fixer in match_set and match_set[fixer]: #sort by depth; apply fixers from bottom(of the AST) to top match_set[fixer].sort(key=pytree.Base.depth, reverse=True) if fixer.keep_line_order: #some fixers(eg fix_imports) must be applied #with the original file's line order match_set[fixer].sort(key=pytree.Base.get_lineno) for node in list(match_set[fixer]): if node in match_set[fixer]: match_set[fixer].remove(node) try: find_root(node) except ValueError: # this node has been cut off from a # previous transformation ; skip continue if node.fixers_applied and fixer in node.fixers_applied: # do not apply the same fixer again continue results = fixer.match(node) if results: new = fixer.transform(node, results) if new is not None: node.replace(new) #new.fixers_applied.append(fixer) for node in new.post_order(): # do not apply the fixer again to # this or any subnode if not node.fixers_applied: node.fixers_applied = [] node.fixers_applied.append(fixer) # update the original match set for # the added code new_matches = self.BM.run(new.leaves()) for fxr in new_matches: if not fxr in match_set: match_set[fxr]=[] match_set[fxr].extend(new_matches[fxr]) for fixer in chain(self.pre_order, self.post_order): fixer.finish_tree(tree, name) return tree.was_changed def traverse_by(self, fixers, traversal): """Traverse an AST, applying a set of fixers to each node. This is a helper method for refactor_tree(). Args: fixers: a list of fixer instances. traversal: a generator that yields AST nodes. Returns: None """ if not fixers: return for node in traversal: for fixer in fixers[node.type]: results = fixer.match(node) if results: new = fixer.transform(node, results) if new is not None: node.replace(new) node = new def processed_file(self, new_text, filename, old_text=None, write=False, encoding=None): """ Called when a file has been refactored and there may be changes. """ self.files.append(filename) if old_text is None: old_text = self._read_python_source(filename)[0] if old_text is None: return equal = old_text == new_text self.print_output(old_text, new_text, filename, equal) if equal: self.log_debug("No changes to %s", filename) if not self.write_unchanged_files: return if write: self.write_file(new_text, filename, old_text, encoding) else: self.log_debug("Not writing changes to %s", filename) def write_file(self, new_text, filename, old_text, encoding=None): """Writes a string to a file. It first shows a unified diff between the old text and the new text, and then rewrites the file; the latter is only done if the write option is set. """ try: fp = io.open(filename, "w", encoding=encoding, newline='') except OSError as err: self.log_error("Can't create %s: %s", filename, err) return with fp: try: fp.write(new_text) except OSError as err: self.log_error("Can't write %s: %s", filename, err) self.log_debug("Wrote changes to %s", filename) self.wrote = True PS1 = ">>> " PS2 = "... " def refactor_docstring(self, input, filename): """Refactors a docstring, looking for doctests. This returns a modified version of the input string. It looks for doctests, which start with a ">>>" prompt, and may be continued with "..." prompts, as long as the "..." is indented the same as the ">>>". (Unfortunately we can't use the doctest module's parser, since, like most parsers, it is not geared towards preserving the original source.) """ result = [] block = None block_lineno = None indent = None lineno = 0 for line in input.splitlines(keepends=True): lineno += 1 if line.lstrip().startswith(self.PS1): if block is not None: result.extend(self.refactor_doctest(block, block_lineno, indent, filename)) block_lineno = lineno block = [line] i = line.find(self.PS1) indent = line[:i] elif (indent is not None and (line.startswith(indent + self.PS2) or line == indent + self.PS2.rstrip() + "\n")): block.append(line) else: if block is not None: result.extend(self.refactor_doctest(block, block_lineno, indent, filename)) block = None indent = None result.append(line) if block is not None: result.extend(self.refactor_doctest(block, block_lineno, indent, filename)) return "".join(result) def refactor_doctest(self, block, lineno, indent, filename): """Refactors one doctest. A doctest is given as a block of lines, the first of which starts with ">>>" (possibly indented), while the remaining lines start with "..." (identically indented). """ try: tree = self.parse_block(block, lineno, indent) except Exception as err: if self.logger.isEnabledFor(logging.DEBUG): for line in block: self.log_debug("Source: %s", line.rstrip("\n")) self.log_error("Can't parse docstring in %s line %s: %s: %s", filename, lineno, err.__class__.__name__, err) return block if self.refactor_tree(tree, filename): new = str(tree).splitlines(keepends=True) # Undo the adjustment of the line numbers in wrap_toks() below. clipped, new = new[:lineno-1], new[lineno-1:] assert clipped == ["\n"] * (lineno-1), clipped if not new[-1].endswith("\n"): new[-1] += "\n" block = [indent + self.PS1 + new.pop(0)] if new: block += [indent + self.PS2 + line for line in new] return block def summarize(self): if self.wrote: were = "were" else: were = "need to be" if not self.files: self.log_message("No files %s modified.", were) else: self.log_message("Files that %s modified:", were) for file in self.files: self.log_message(file) if self.fixer_log: self.log_message("Warnings/messages while refactoring:") for message in self.fixer_log: self.log_message(message) if self.errors: if len(self.errors) == 1: self.log_message("There was 1 error:") else: self.log_message("There were %d errors:", len(self.errors)) for msg, args, kwds in self.errors: self.log_message(msg, *args, **kwds) def parse_block(self, block, lineno, indent): """Parses a block into a tree. This is necessary to get correct line number / offset information in the parser diagnostics and embedded into the parse tree. """ tree = self.driver.parse_tokens(self.wrap_toks(block, lineno, indent)) tree.future_features = frozenset() return tree def wrap_toks(self, block, lineno, indent): """Wraps a tokenize stream to systematically modify start/end.""" tokens = tokenize.generate_tokens(self.gen_lines(block, indent).__next__) for type, value, (line0, col0), (line1, col1), line_text in tokens: line0 += lineno - 1 line1 += lineno - 1 # Don't bother updating the columns; this is too complicated # since line_text would also have to be updated and it would # still break for tokens spanning lines. Let the user guess # that the column numbers for doctests are relative to the # end of the prompt string (PS1 or PS2). yield type, value, (line0, col0), (line1, col1), line_text def gen_lines(self, block, indent): """Generates lines as expected by tokenize from a list of lines. This strips the first len(indent + self.PS1) characters off each line. """ prefix1 = indent + self.PS1 prefix2 = indent + self.PS2 prefix = prefix1 for line in block: if line.startswith(prefix): yield line[len(prefix):] elif line == prefix.rstrip() + "\n": yield "\n" else: raise AssertionError("line=%r, prefix=%r" % (line, prefix)) prefix = prefix2 while True: yield "" class MultiprocessingUnsupported(Exception): pass class MultiprocessRefactoringTool(RefactoringTool): def __init__(self, *args, **kwargs): super(MultiprocessRefactoringTool, self).__init__(*args, **kwargs) self.queue = None self.output_lock = None def refactor(self, items, write=False, doctests_only=False, num_processes=1): if num_processes == 1: return super(MultiprocessRefactoringTool, self).refactor( items, write, doctests_only) try: import multiprocessing except ImportError: raise MultiprocessingUnsupported if self.queue is not None: raise RuntimeError("already doing multiple processes") self.queue = multiprocessing.JoinableQueue() self.output_lock = multiprocessing.Lock() processes = [multiprocessing.Process(target=self._child) for i in range(num_processes)] try: for p in processes: p.start() super(MultiprocessRefactoringTool, self).refactor(items, write, doctests_only) finally: self.queue.join() for i in range(num_processes): self.queue.put(None) for p in processes: if p.is_alive(): p.join() self.queue = None def _child(self): task = self.queue.get() while task is not None: args, kwargs = task try: super(MultiprocessRefactoringTool, self).refactor_file( *args, **kwargs) finally: self.queue.task_done() task = self.queue.get() def refactor_file(self, *args, **kwargs): if self.queue is not None: self.queue.put((args, kwargs)) else: return super(MultiprocessRefactoringTool, self).refactor_file( *args, **kwargs) lib2to3/btm_matcher.py000064400000014737152462633570010712 0ustar00"""A bottom-up tree matching algorithm implementation meant to speed up 2to3's matching process. After the tree patterns are reduced to their rarest linear path, a linear Aho-Corasick automaton is created. The linear automaton traverses the linear paths from the leaves to the root of the AST and returns a set of nodes for further matching. This reduces significantly the number of candidate nodes.""" __author__ = "George Boutsioukis " import logging import itertools from collections import defaultdict from . import pytree from .btm_utils import reduce_tree class BMNode(object): """Class for a node of the Aho-Corasick automaton used in matching""" count = itertools.count() def __init__(self): self.transition_table = {} self.fixers = [] self.id = next(BMNode.count) self.content = '' class BottomMatcher(object): """The main matcher class. After instantiating the patterns should be added using the add_fixer method""" def __init__(self): self.match = set() self.root = BMNode() self.nodes = [self.root] self.fixers = [] self.logger = logging.getLogger("RefactoringTool") def add_fixer(self, fixer): """Reduces a fixer's pattern tree to a linear path and adds it to the matcher(a common Aho-Corasick automaton). The fixer is appended on the matching states and called when they are reached""" self.fixers.append(fixer) tree = reduce_tree(fixer.pattern_tree) linear = tree.get_linear_subpattern() match_nodes = self.add(linear, start=self.root) for match_node in match_nodes: match_node.fixers.append(fixer) def add(self, pattern, start): "Recursively adds a linear pattern to the AC automaton" #print("adding pattern", pattern, "to", start) if not pattern: #print("empty pattern") return [start] if isinstance(pattern[0], tuple): #alternatives #print("alternatives") match_nodes = [] for alternative in pattern[0]: #add all alternatives, and add the rest of the pattern #to each end node end_nodes = self.add(alternative, start=start) for end in end_nodes: match_nodes.extend(self.add(pattern[1:], end)) return match_nodes else: #single token #not last if pattern[0] not in start.transition_table: #transition did not exist, create new next_node = BMNode() start.transition_table[pattern[0]] = next_node else: #transition exists already, follow next_node = start.transition_table[pattern[0]] if pattern[1:]: end_nodes = self.add(pattern[1:], start=next_node) else: end_nodes = [next_node] return end_nodes def run(self, leaves): """The main interface with the bottom matcher. The tree is traversed from the bottom using the constructed automaton. Nodes are only checked once as the tree is retraversed. When the automaton fails, we give it one more shot(in case the above tree matches as a whole with the rejected leaf), then we break for the next leaf. There is the special case of multiple arguments(see code comments) where we recheck the nodes Args: The leaves of the AST tree to be matched Returns: A dictionary of node matches with fixers as the keys """ current_ac_node = self.root results = defaultdict(list) for leaf in leaves: current_ast_node = leaf while current_ast_node: current_ast_node.was_checked = True for child in current_ast_node.children: # multiple statements, recheck if isinstance(child, pytree.Leaf) and child.value == ";": current_ast_node.was_checked = False break if current_ast_node.type == 1: #name node_token = current_ast_node.value else: node_token = current_ast_node.type if node_token in current_ac_node.transition_table: #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: results[fixer].append(current_ast_node) else: #matching failed, reset automaton current_ac_node = self.root if (current_ast_node.parent is not None and current_ast_node.parent.was_checked): #the rest of the tree upwards has been checked, next leaf break #recheck the rejected node once from the root if node_token in current_ac_node.transition_table: #token matches current_ac_node = current_ac_node.transition_table[node_token] for fixer in current_ac_node.fixers: results[fixer].append(current_ast_node) current_ast_node = current_ast_node.parent return results def print_ac(self): "Prints a graphviz diagram of the BM automaton(for debugging)" print("digraph g{") def print_node(node): for subnode_key in node.transition_table.keys(): subnode = node.transition_table[subnode_key] print("%d -> %d [label=%s] //%s" % (node.id, subnode.id, type_repr(subnode_key), str(subnode.fixers))) if subnode_key == 1: print(subnode.content) print_node(subnode) print_node(self.root) print("}") # taken from pytree.py for debugging; only used by print_ac _type_reprs = {} def type_repr(type_num): global _type_reprs if not _type_reprs: from .pygram import python_symbols # printing tokens is possible but not as useful # from .pgen2 import token // token.__dict__.items(): for name, val in python_symbols.__dict__.items(): if type(val) == int: _type_reprs[val] = name return _type_reprs.setdefault(type_num, type_num) lib2to3/__init__.py000064400000000234152462633570010147 0ustar00import warnings warnings.warn( "lib2to3 package is deprecated and may not be able to parse Python 3.10+", DeprecationWarning, stacklevel=2, ) lib2to3/pgen2/conv.py000064400000022652152462633570010400 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Convert graminit.[ch] spit out by pgen to Python code. Pgen is the Python parser generator. It is useful to quickly create a parser from a grammar file in Python's grammar notation. But I don't want my parsers to be written in C (yet), so I'm translating the parsing tables to Python data structures and writing a Python parse engine. Note that the token numbers are constants determined by the standard Python tokenizer. The standard token module defines these numbers and their names (the names are not used much). The token numbers are hardcoded into the Python tokenizer and into pgen. A Python implementation of the Python tokenizer is also available, in the standard tokenize module. On the other hand, symbol numbers (representing the grammar's non-terminals) are assigned by pgen based on the actual grammar input. Note: this module is pretty much obsolete; the pgen module generates equivalent grammar tables directly from the Grammar.txt input file without having to invoke the Python pgen C program. """ # Python imports import re # Local imports from pgen2 import grammar, token class Converter(grammar.Grammar): """Grammar subclass that reads classic pgen output files. The run() method reads the tables as produced by the pgen parser generator, typically contained in two C files, graminit.h and graminit.c. The other methods are for internal use only. See the base class for more documentation. """ def run(self, graminit_h, graminit_c): """Load the grammar tables from the text files written by pgen.""" self.parse_graminit_h(graminit_h) self.parse_graminit_c(graminit_c) self.finish_off() def parse_graminit_h(self, filename): """Parse the .h file written by pgen. (Internal) This file is a sequence of #define statements defining the nonterminals of the grammar as numbers. We build two tables mapping the numbers to names and back. """ try: f = open(filename) except OSError as err: print("Can't open %s: %s" % (filename, err)) return False self.symbol2number = {} self.number2symbol = {} lineno = 0 for line in f: lineno += 1 mo = re.match(r"^#define\s+(\w+)\s+(\d+)$", line) if not mo and line.strip(): print("%s(%s): can't parse %s" % (filename, lineno, line.strip())) else: symbol, number = mo.groups() number = int(number) assert symbol not in self.symbol2number assert number not in self.number2symbol self.symbol2number[symbol] = number self.number2symbol[number] = symbol return True def parse_graminit_c(self, filename): """Parse the .c file written by pgen. (Internal) The file looks as follows. The first two lines are always this: #include "pgenheaders.h" #include "grammar.h" After that come four blocks: 1) one or more state definitions 2) a table defining dfas 3) a table defining labels 4) a struct defining the grammar A state definition has the following form: - one or more arc arrays, each of the form: static arc arcs__[] = { {, }, ... }; - followed by a state array, of the form: static state states_[] = { {, arcs__}, ... }; """ try: f = open(filename) except OSError as err: print("Can't open %s: %s" % (filename, err)) return False # The code below essentially uses f's iterator-ness! lineno = 0 # Expect the two #include lines lineno, line = lineno+1, next(f) assert line == '#include "pgenheaders.h"\n', (lineno, line) lineno, line = lineno+1, next(f) assert line == '#include "grammar.h"\n', (lineno, line) # Parse the state definitions lineno, line = lineno+1, next(f) allarcs = {} states = [] while line.startswith("static arc "): while line.startswith("static arc "): mo = re.match(r"static arc arcs_(\d+)_(\d+)\[(\d+)\] = {$", line) assert mo, (lineno, line) n, m, k = list(map(int, mo.groups())) arcs = [] for _ in range(k): lineno, line = lineno+1, next(f) mo = re.match(r"\s+{(\d+), (\d+)},$", line) assert mo, (lineno, line) i, j = list(map(int, mo.groups())) arcs.append((i, j)) lineno, line = lineno+1, next(f) assert line == "};\n", (lineno, line) allarcs[(n, m)] = arcs lineno, line = lineno+1, next(f) mo = re.match(r"static state states_(\d+)\[(\d+)\] = {$", line) assert mo, (lineno, line) s, t = list(map(int, mo.groups())) assert s == len(states), (lineno, line) state = [] for _ in range(t): lineno, line = lineno+1, next(f) mo = re.match(r"\s+{(\d+), arcs_(\d+)_(\d+)},$", line) assert mo, (lineno, line) k, n, m = list(map(int, mo.groups())) arcs = allarcs[n, m] assert k == len(arcs), (lineno, line) state.append(arcs) states.append(state) lineno, line = lineno+1, next(f) assert line == "};\n", (lineno, line) lineno, line = lineno+1, next(f) self.states = states # Parse the dfas dfas = {} mo = re.match(r"static dfa dfas\[(\d+)\] = {$", line) assert mo, (lineno, line) ndfas = int(mo.group(1)) for i in range(ndfas): lineno, line = lineno+1, next(f) mo = re.match(r'\s+{(\d+), "(\w+)", (\d+), (\d+), states_(\d+),$', line) assert mo, (lineno, line) symbol = mo.group(2) number, x, y, z = list(map(int, mo.group(1, 3, 4, 5))) assert self.symbol2number[symbol] == number, (lineno, line) assert self.number2symbol[number] == symbol, (lineno, line) assert x == 0, (lineno, line) state = states[z] assert y == len(state), (lineno, line) lineno, line = lineno+1, next(f) mo = re.match(r'\s+("(?:\\\d\d\d)*")},$', line) assert mo, (lineno, line) first = {} rawbitset = eval(mo.group(1)) for i, c in enumerate(rawbitset): byte = ord(c) for j in range(8): if byte & (1<>=?", r"<<=?", r"<>", r"!=", r"//=?", r"->", r"[+\-*/%&@|^=<>]=?", r"~") Bracket = '[][(){}]' Special = group(r'\r?\n', r':=', r'[:;.,`@]') Funny = group(Operator, Bracket, Special) PlainToken = group(Number, Funny, String, Name) Token = Ignore + PlainToken # First (or only) line of ' or " string. ContStr = group(_litprefix + r"'[^\n'\\]*(?:\\.[^\n'\\]*)*" + group("'", r'\\\r?\n'), _litprefix + r'"[^\n"\\]*(?:\\.[^\n"\\]*)*' + group('"', r'\\\r?\n')) PseudoExtras = group(r'\\\r?\n', Comment, Triple) PseudoToken = Whitespace + group(PseudoExtras, Number, Funny, ContStr, Name) tokenprog, pseudoprog, single3prog, double3prog = map( re.compile, (Token, PseudoToken, Single3, Double3)) _strprefixes = ( _combinations('r', 'R', 'f', 'F') | _combinations('r', 'R', 'b', 'B') | {'u', 'U', 'ur', 'uR', 'Ur', 'UR'} ) endprogs = {"'": re.compile(Single), '"': re.compile(Double), "'''": single3prog, '"""': double3prog, **{f"{prefix}'''": single3prog for prefix in _strprefixes}, **{f'{prefix}"""': double3prog for prefix in _strprefixes}, **{prefix: None for prefix in _strprefixes}} triple_quoted = ( {"'''", '"""'} | {f"{prefix}'''" for prefix in _strprefixes} | {f'{prefix}"""' for prefix in _strprefixes} ) single_quoted = ( {"'", '"'} | {f"{prefix}'" for prefix in _strprefixes} | {f'{prefix}"' for prefix in _strprefixes} ) tabsize = 8 class TokenError(Exception): pass class StopTokenizing(Exception): pass def printtoken(type, token, xxx_todo_changeme, xxx_todo_changeme1, line): # for testing (srow, scol) = xxx_todo_changeme (erow, ecol) = xxx_todo_changeme1 print("%d,%d-%d,%d:\t%s\t%s" % \ (srow, scol, erow, ecol, tok_name[type], repr(token))) def tokenize(readline, tokeneater=printtoken): """ The tokenize() function accepts two parameters: one representing the input stream, and one providing an output mechanism for tokenize(). The first parameter, readline, must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. The second parameter, tokeneater, must also be a callable object. It is called once for each token, with five arguments, corresponding to the tuples generated by generate_tokens(). """ try: tokenize_loop(readline, tokeneater) except StopTokenizing: pass # backwards compatible interface def tokenize_loop(readline, tokeneater): for token_info in generate_tokens(readline): tokeneater(*token_info) class Untokenizer: def __init__(self): self.tokens = [] self.prev_row = 1 self.prev_col = 0 def add_whitespace(self, start): row, col = start assert row <= self.prev_row col_offset = col - self.prev_col if col_offset: self.tokens.append(" " * col_offset) def untokenize(self, iterable): for t in iterable: if len(t) == 2: self.compat(t, iterable) break tok_type, token, start, end, line = t self.add_whitespace(start) self.tokens.append(token) self.prev_row, self.prev_col = end if tok_type in (NEWLINE, NL): self.prev_row += 1 self.prev_col = 0 return "".join(self.tokens) def compat(self, token, iterable): startline = False indents = [] toks_append = self.tokens.append toknum, tokval = token if toknum in (NAME, NUMBER): tokval += ' ' if toknum in (NEWLINE, NL): startline = True for tok in iterable: toknum, tokval = tok[:2] if toknum in (NAME, NUMBER, ASYNC, AWAIT): tokval += ' ' if toknum == INDENT: indents.append(tokval) continue elif toknum == DEDENT: indents.pop() continue elif toknum in (NEWLINE, NL): startline = True elif startline and indents: toks_append(indents[-1]) startline = False toks_append(tokval) cookie_re = re.compile(r'^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)', re.ASCII) blank_re = re.compile(br'^[ \t\f]*(?:[#\r\n]|$)', re.ASCII) def _get_normal_name(orig_enc): """Imitates get_normal_name in tokenizer.c.""" # Only care about the first 12 characters. enc = orig_enc[:12].lower().replace("_", "-") if enc == "utf-8" or enc.startswith("utf-8-"): return "utf-8" if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): return "iso-8859-1" return orig_enc def detect_encoding(readline): """ The detect_encoding() function is used to detect the encoding that should be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used (as a string) and a list of any lines (left as bytes) it has read in. It detects the encoding from the presence of a utf-8 bom or an encoding cookie as specified in pep-0263. If both a bom and a cookie are present, but disagree, a SyntaxError will be raised. If the encoding cookie is an invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. """ bom_found = False encoding = None default = 'utf-8' def read_or_stop(): try: return readline() except StopIteration: return bytes() def find_cookie(line): try: line_string = line.decode('ascii') except UnicodeDecodeError: return None match = cookie_re.match(line_string) if not match: return None encoding = _get_normal_name(match.group(1)) try: codec = lookup(encoding) except LookupError: # This behaviour mimics the Python interpreter raise SyntaxError("unknown encoding: " + encoding) if bom_found: if codec.name != 'utf-8': # This behaviour mimics the Python interpreter raise SyntaxError('encoding problem: utf-8') encoding += '-sig' return encoding first = read_or_stop() if first.startswith(BOM_UTF8): bom_found = True first = first[3:] default = 'utf-8-sig' if not first: return default, [] encoding = find_cookie(first) if encoding: return encoding, [first] if not blank_re.match(first): return default, [first] second = read_or_stop() if not second: return default, [first] encoding = find_cookie(second) if encoding: return encoding, [first, second] return default, [first, second] def untokenize(iterable): """Transform tokens back into Python source code. Each element returned by the iterable must be a token sequence with at least two elements, a token number and token value. If only two tokens are passed, the resulting output is poor. Round-trip invariant for full input: Untokenized source will match input source exactly Round-trip invariant for limited input: # Output text will tokenize the back to the input t1 = [tok[:2] for tok in generate_tokens(f.readline)] newcode = untokenize(t1) readline = iter(newcode.splitlines(1)).next t2 = [tok[:2] for tokin generate_tokens(readline)] assert t1 == t2 """ ut = Untokenizer() return ut.untokenize(iterable) def generate_tokens(readline): """ The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline can be a callable function terminating with StopIteration: readline = open(myfile).next # Example of alternate readline The generator produces 5-tuples with these members: the token type; the token string; a 2-tuple (srow, scol) of ints specifying the row and column where the token begins in the source; a 2-tuple (erow, ecol) of ints specifying the row and column where the token ends in the source; and the line on which the token was found. The line passed is the physical line. """ lnum = parenlev = continued = 0 contstr, needcont = '', 0 contline = None indents = [0] # 'stashed' and 'async_*' are used for async/await parsing stashed = None async_def = False async_def_indent = 0 async_def_nl = False while 1: # loop over lines in stream try: line = readline() except StopIteration: line = '' lnum = lnum + 1 pos, max = 0, len(line) if contstr: # continued string if not line: raise TokenError("EOF in multi-line string", strstart) endmatch = endprog.match(line) if endmatch: pos = end = endmatch.end(0) yield (STRING, contstr + line[:end], strstart, (lnum, end), contline + line) contstr, needcont = '', 0 contline = None elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n': yield (ERRORTOKEN, contstr + line, strstart, (lnum, len(line)), contline) contstr = '' contline = None continue else: contstr = contstr + line contline = contline + line continue elif parenlev == 0 and not continued: # new statement if not line: break column = 0 while pos < max: # measure leading whitespace if line[pos] == ' ': column = column + 1 elif line[pos] == '\t': column = (column//tabsize + 1)*tabsize elif line[pos] == '\f': column = 0 else: break pos = pos + 1 if pos == max: break if stashed: yield stashed stashed = None if line[pos] in '#\r\n': # skip comments or blank lines if line[pos] == '#': comment_token = line[pos:].rstrip('\r\n') nl_pos = pos + len(comment_token) yield (COMMENT, comment_token, (lnum, pos), (lnum, pos + len(comment_token)), line) yield (NL, line[nl_pos:], (lnum, nl_pos), (lnum, len(line)), line) else: yield ((NL, COMMENT)[line[pos] == '#'], line[pos:], (lnum, pos), (lnum, len(line)), line) continue if column > indents[-1]: # count indents or dedents indents.append(column) yield (INDENT, line[:pos], (lnum, 0), (lnum, pos), line) while column < indents[-1]: if column not in indents: raise IndentationError( "unindent does not match any outer indentation level", ("", lnum, pos, line)) indents = indents[:-1] if async_def and async_def_indent >= indents[-1]: async_def = False async_def_nl = False async_def_indent = 0 yield (DEDENT, '', (lnum, pos), (lnum, pos), line) if async_def and async_def_nl and async_def_indent >= indents[-1]: async_def = False async_def_nl = False async_def_indent = 0 else: # continued statement if not line: raise TokenError("EOF in multi-line statement", (lnum, 0)) continued = 0 while pos < max: pseudomatch = pseudoprog.match(line, pos) if pseudomatch: # scan for tokens start, end = pseudomatch.span(1) spos, epos, pos = (lnum, start), (lnum, end), end token, initial = line[start:end], line[start] if initial in string.digits or \ (initial == '.' and token != '.'): # ordinary number yield (NUMBER, token, spos, epos, line) elif initial in '\r\n': newline = NEWLINE if parenlev > 0: newline = NL elif async_def: async_def_nl = True if stashed: yield stashed stashed = None yield (newline, token, spos, epos, line) elif initial == '#': assert not token.endswith("\n") if stashed: yield stashed stashed = None yield (COMMENT, token, spos, epos, line) elif token in triple_quoted: endprog = endprogs[token] endmatch = endprog.match(line, pos) if endmatch: # all on one line pos = endmatch.end(0) token = line[start:pos] if stashed: yield stashed stashed = None yield (STRING, token, spos, (lnum, pos), line) else: strstart = (lnum, start) # multiple lines contstr = line[start:] contline = line break elif initial in single_quoted or \ token[:2] in single_quoted or \ token[:3] in single_quoted: if token[-1] == '\n': # continued string strstart = (lnum, start) endprog = (endprogs[initial] or endprogs[token[1]] or endprogs[token[2]]) contstr, needcont = line[start:], 1 contline = line break else: # ordinary string if stashed: yield stashed stashed = None yield (STRING, token, spos, epos, line) elif initial.isidentifier(): # ordinary name if token in ('async', 'await'): if async_def: yield (ASYNC if token == 'async' else AWAIT, token, spos, epos, line) continue tok = (NAME, token, spos, epos, line) if token == 'async' and not stashed: stashed = tok continue if token in ('def', 'for'): if (stashed and stashed[0] == NAME and stashed[1] == 'async'): if token == 'def': async_def = True async_def_indent = indents[-1] yield (ASYNC, stashed[1], stashed[2], stashed[3], stashed[4]) stashed = None if stashed: yield stashed stashed = None yield tok elif initial == '\\': # continued stmt # This yield is new; needed for better idempotency: if stashed: yield stashed stashed = None yield (NL, token, spos, (lnum, pos), line) continued = 1 else: if initial in '([{': parenlev = parenlev + 1 elif initial in ')]}': parenlev = parenlev - 1 if stashed: yield stashed stashed = None yield (OP, token, spos, epos, line) else: yield (ERRORTOKEN, line[pos], (lnum, pos), (lnum, pos+1), line) pos = pos + 1 if stashed: yield stashed stashed = None for indent in indents[1:]: # pop remaining indent levels yield (DEDENT, '', (lnum, 0), (lnum, 0), '') yield (ENDMARKER, '', (lnum, 0), (lnum, 0), '') if __name__ == '__main__': # testing import sys if len(sys.argv) > 1: tokenize(open(sys.argv[1]).readline) else: tokenize(sys.stdin.readline) lib2to3/pgen2/driver.py000064400000013521152462633570010721 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. # Modifications: # Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Parser driver. This provides a high-level interface to parse a file into a syntax tree. """ __author__ = "Guido van Rossum " __all__ = ["Driver", "load_grammar"] # Python imports import io import os import logging import pkgutil import sys # Pgen imports from . import grammar, parse, token, tokenize, pgen class Driver(object): def __init__(self, grammar, convert=None, logger=None): self.grammar = grammar if logger is None: logger = logging.getLogger() self.logger = logger self.convert = convert def parse_tokens(self, tokens, debug=False): """Parse a series of tokens and return the syntax tree.""" # XXX Move the prefix computation into a wrapper around tokenize. p = parse.Parser(self.grammar, self.convert) p.setup() lineno = 1 column = 0 type = value = start = end = line_text = None prefix = "" for quintuple in tokens: type, value, start, end, line_text = quintuple if start != (lineno, column): assert (lineno, column) <= start, ((lineno, column), start) s_lineno, s_column = start if lineno < s_lineno: prefix += "\n" * (s_lineno - lineno) lineno = s_lineno column = 0 if column < s_column: prefix += line_text[column:s_column] column = s_column if type in (tokenize.COMMENT, tokenize.NL): prefix += value lineno, column = end if value.endswith("\n"): lineno += 1 column = 0 continue if type == token.OP: type = grammar.opmap[value] if debug: self.logger.debug("%s %r (prefix=%r)", token.tok_name[type], value, prefix) if p.addtoken(type, value, (prefix, start)): if debug: self.logger.debug("Stop.") break prefix = "" lineno, column = end if value.endswith("\n"): lineno += 1 column = 0 else: # We never broke out -- EOF is too soon (how can this happen???) raise parse.ParseError("incomplete input", type, value, (prefix, start)) return p.rootnode def parse_stream_raw(self, stream, debug=False): """Parse a stream and return the syntax tree.""" tokens = tokenize.generate_tokens(stream.readline) return self.parse_tokens(tokens, debug) def parse_stream(self, stream, debug=False): """Parse a stream and return the syntax tree.""" return self.parse_stream_raw(stream, debug) def parse_file(self, filename, encoding=None, debug=False): """Parse a file and return the syntax tree.""" with io.open(filename, "r", encoding=encoding) as stream: return self.parse_stream(stream, debug) def parse_string(self, text, debug=False): """Parse a string and return the syntax tree.""" tokens = tokenize.generate_tokens(io.StringIO(text).readline) return self.parse_tokens(tokens, debug) def _generate_pickle_name(gt): head, tail = os.path.splitext(gt) if tail == ".txt": tail = "" return head + tail + ".".join(map(str, sys.version_info)) + ".pickle" def load_grammar(gt="Grammar.txt", gp=None, save=True, force=False, logger=None): """Load the grammar (maybe from a pickle).""" if logger is None: logger = logging.getLogger() gp = _generate_pickle_name(gt) if gp is None else gp if force or not _newer(gp, gt): logger.info("Generating grammar tables from %s", gt) g = pgen.generate_grammar(gt) if save: logger.info("Writing grammar tables to %s", gp) try: g.dump(gp) except OSError as e: logger.info("Writing failed: %s", e) else: g = grammar.Grammar() g.load(gp) return g def _newer(a, b): """Inquire whether file a was written since file b.""" if not os.path.exists(a): return False if not os.path.exists(b): return True return os.path.getmtime(a) >= os.path.getmtime(b) def load_packaged_grammar(package, grammar_source): """Normally, loads a pickled grammar by doing pkgutil.get_data(package, pickled_grammar) where *pickled_grammar* is computed from *grammar_source* by adding the Python version and using a ``.pickle`` extension. However, if *grammar_source* is an extant file, load_grammar(grammar_source) is called instead. This facilitates using a packaged grammar file when needed but preserves load_grammar's automatic regeneration behavior when possible. """ if os.path.isfile(grammar_source): return load_grammar(grammar_source) pickled_name = _generate_pickle_name(os.path.basename(grammar_source)) data = pkgutil.get_data(package, pickled_name) g = grammar.Grammar() g.loads(data) return g def main(*args): """Main program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. """ if not args: args = sys.argv[1:] logging.basicConfig(level=logging.INFO, stream=sys.stdout, format='%(message)s') for gt in args: load_grammar(gt, save=True, force=True) return True if __name__ == "__main__": sys.exit(int(not main())) lib2to3/pgen2/parse.py000064400000017733152462633570010551 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Parser engine for the grammar tables generated by pgen. The grammar table must be loaded first. See Parser/parser.c in the Python distribution for additional info on how this parsing engine works. """ # Local imports from . import token class ParseError(Exception): """Exception to signal the parser is stuck.""" def __init__(self, msg, type, value, context): Exception.__init__(self, "%s: type=%r, value=%r, context=%r" % (msg, type, value, context)) self.msg = msg self.type = type self.value = value self.context = context def __reduce__(self): return type(self), (self.msg, self.type, self.value, self.context) class Parser(object): """Parser engine. The proper usage sequence is: p = Parser(grammar, [converter]) # create instance p.setup([start]) # prepare for parsing : if p.addtoken(...): # parse a token; may raise ParseError break root = p.rootnode # root of abstract syntax tree A Parser instance may be reused by calling setup() repeatedly. A Parser instance contains state pertaining to the current token sequence, and should not be used concurrently by different threads to parse separate token sequences. See driver.py for how to get input tokens by tokenizing a file or string. Parsing is complete when addtoken() returns True; the root of the abstract syntax tree can then be retrieved from the rootnode instance variable. When a syntax error occurs, addtoken() raises the ParseError exception. There is no error recovery; the parser cannot be used after a syntax error was reported (but it can be reinitialized by calling setup()). """ def __init__(self, grammar, convert=None): """Constructor. The grammar argument is a grammar.Grammar instance; see the grammar module for more information. The parser is not ready yet for parsing; you must call the setup() method to get it started. The optional convert argument is a function mapping concrete syntax tree nodes to abstract syntax tree nodes. If not given, no conversion is done and the syntax tree produced is the concrete syntax tree. If given, it must be a function of two arguments, the first being the grammar (a grammar.Grammar instance), and the second being the concrete syntax tree node to be converted. The syntax tree is converted from the bottom up. A concrete syntax tree node is a (type, value, context, nodes) tuple, where type is the node type (a token or symbol number), value is None for symbols and a string for tokens, context is None or an opaque value used for error reporting (typically a (lineno, offset) pair), and nodes is a list of children for symbols, and None for tokens. An abstract syntax tree node may be anything; this is entirely up to the converter function. """ self.grammar = grammar self.convert = convert or (lambda grammar, node: node) def setup(self, start=None): """Prepare for parsing. This *must* be called before starting to parse. The optional argument is an alternative start symbol; it defaults to the grammar's start symbol. You can use a Parser instance to parse any number of programs; each time you call setup() the parser is reset to an initial state determined by the (implicit or explicit) start symbol. """ if start is None: start = self.grammar.start # Each stack entry is a tuple: (dfa, state, node). # A node is a tuple: (type, value, context, children), # where children is a list of nodes or None, and context may be None. newnode = (start, None, None, []) stackentry = (self.grammar.dfas[start], 0, newnode) self.stack = [stackentry] self.rootnode = None self.used_names = set() # Aliased to self.rootnode.used_names in pop() def addtoken(self, type, value, context): """Add a token; return True iff this is the end of the program.""" # Map from token to label ilabel = self.classify(type, value, context) # Loop until the token is shifted; may raise exceptions while True: dfa, state, node = self.stack[-1] states, first = dfa arcs = states[state] # Look for a state with this label for i, newstate in arcs: t, v = self.grammar.labels[i] if ilabel == i: # Look it up in the list of labels assert t < 256 # Shift a token; we're done with it self.shift(type, value, newstate, context) # Pop while we are in an accept-only state state = newstate while states[state] == [(0, state)]: self.pop() if not self.stack: # Done parsing! return True dfa, state, node = self.stack[-1] states, first = dfa # Done with this token return False elif t >= 256: # See if it's a symbol and if we're in its first set itsdfa = self.grammar.dfas[t] itsstates, itsfirst = itsdfa if ilabel in itsfirst: # Push a symbol self.push(t, self.grammar.dfas[t], newstate, context) break # To continue the outer while loop else: if (0, state) in arcs: # An accepting state, pop it and try something else self.pop() if not self.stack: # Done parsing, but another token is input raise ParseError("too much input", type, value, context) else: # No success finding a transition raise ParseError("bad input", type, value, context) def classify(self, type, value, context): """Turn a token into a label. (Internal)""" if type == token.NAME: # Keep a listing of all used names self.used_names.add(value) # Check for reserved words ilabel = self.grammar.keywords.get(value) if ilabel is not None: return ilabel ilabel = self.grammar.tokens.get(type) if ilabel is None: raise ParseError("bad token", type, value, context) return ilabel def shift(self, type, value, newstate, context): """Shift a token. (Internal)""" dfa, state, node = self.stack[-1] newnode = (type, value, context, None) newnode = self.convert(self.grammar, newnode) if newnode is not None: node[-1].append(newnode) self.stack[-1] = (dfa, newstate, node) def push(self, type, newdfa, newstate, context): """Push a nonterminal. (Internal)""" dfa, state, node = self.stack[-1] newnode = (type, None, context, []) self.stack[-1] = (dfa, newstate, node) self.stack.append((newdfa, 0, newnode)) def pop(self): """Pop a nonterminal. (Internal)""" popdfa, popstate, popnode = self.stack.pop() newnode = self.convert(self.grammar, popnode) if newnode is not None: if self.stack: dfa, state, node = self.stack[-1] node[-1].append(newnode) else: self.rootnode = newnode self.rootnode.used_names = self.used_names lib2to3/pgen2/__init__.py000064400000000217152462633570011163 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """The pgen2 package.""" lib2to3/pgen2/pgen.py000064400000033006152462633570010357 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. # Pgen imports from . import grammar, token, tokenize class PgenGrammar(grammar.Grammar): pass class ParserGenerator(object): def __init__(self, filename, stream=None): close_stream = None if stream is None: stream = open(filename, encoding="utf-8") close_stream = stream.close self.filename = filename self.stream = stream self.generator = tokenize.generate_tokens(stream.readline) self.gettoken() # Initialize lookahead self.dfas, self.startsymbol = self.parse() if close_stream is not None: close_stream() self.first = {} # map from symbol name to set of tokens self.addfirstsets() def make_grammar(self): c = PgenGrammar() names = list(self.dfas.keys()) names.sort() names.remove(self.startsymbol) names.insert(0, self.startsymbol) for name in names: i = 256 + len(c.symbol2number) c.symbol2number[name] = i c.number2symbol[i] = name for name in names: dfa = self.dfas[name] states = [] for state in dfa: arcs = [] for label, next in sorted(state.arcs.items()): arcs.append((self.make_label(c, label), dfa.index(next))) if state.isfinal: arcs.append((0, dfa.index(state))) states.append(arcs) c.states.append(states) c.dfas[c.symbol2number[name]] = (states, self.make_first(c, name)) c.start = c.symbol2number[self.startsymbol] return c def make_first(self, c, name): rawfirst = self.first[name] first = {} for label in sorted(rawfirst): ilabel = self.make_label(c, label) ##assert ilabel not in first # XXX failed on <> ... != first[ilabel] = 1 return first def make_label(self, c, label): # XXX Maybe this should be a method on a subclass of converter? ilabel = len(c.labels) if label[0].isalpha(): # Either a symbol name or a named token if label in c.symbol2number: # A symbol name (a non-terminal) if label in c.symbol2label: return c.symbol2label[label] else: c.labels.append((c.symbol2number[label], None)) c.symbol2label[label] = ilabel return ilabel else: # A named token (NAME, NUMBER, STRING) itoken = getattr(token, label, None) assert isinstance(itoken, int), label assert itoken in token.tok_name, label if itoken in c.tokens: return c.tokens[itoken] else: c.labels.append((itoken, None)) c.tokens[itoken] = ilabel return ilabel else: # Either a keyword or an operator assert label[0] in ('"', "'"), label value = eval(label) if value[0].isalpha(): # A keyword if value in c.keywords: return c.keywords[value] else: c.labels.append((token.NAME, value)) c.keywords[value] = ilabel return ilabel else: # An operator (any non-numeric token) itoken = grammar.opmap[value] # Fails if unknown token if itoken in c.tokens: return c.tokens[itoken] else: c.labels.append((itoken, None)) c.tokens[itoken] = ilabel return ilabel def addfirstsets(self): names = list(self.dfas.keys()) names.sort() for name in names: if name not in self.first: self.calcfirst(name) #print name, self.first[name].keys() def calcfirst(self, name): dfa = self.dfas[name] self.first[name] = None # dummy to detect left recursion state = dfa[0] totalset = {} overlapcheck = {} for label, next in state.arcs.items(): if label in self.dfas: if label in self.first: fset = self.first[label] if fset is None: raise ValueError("recursion for rule %r" % name) else: self.calcfirst(label) fset = self.first[label] totalset.update(fset) overlapcheck[label] = fset else: totalset[label] = 1 overlapcheck[label] = {label: 1} inverse = {} for label, itsfirst in overlapcheck.items(): for symbol in itsfirst: if symbol in inverse: raise ValueError("rule %s is ambiguous; %s is in the" " first sets of %s as well as %s" % (name, symbol, label, inverse[symbol])) inverse[symbol] = label self.first[name] = totalset def parse(self): dfas = {} startsymbol = None # MSTART: (NEWLINE | RULE)* ENDMARKER while self.type != token.ENDMARKER: while self.type == token.NEWLINE: self.gettoken() # RULE: NAME ':' RHS NEWLINE name = self.expect(token.NAME) self.expect(token.OP, ":") a, z = self.parse_rhs() self.expect(token.NEWLINE) #self.dump_nfa(name, a, z) dfa = self.make_dfa(a, z) #self.dump_dfa(name, dfa) oldlen = len(dfa) self.simplify_dfa(dfa) newlen = len(dfa) dfas[name] = dfa #print name, oldlen, newlen if startsymbol is None: startsymbol = name return dfas, startsymbol def make_dfa(self, start, finish): # To turn an NFA into a DFA, we define the states of the DFA # to correspond to *sets* of states of the NFA. Then do some # state reduction. Let's represent sets as dicts with 1 for # values. assert isinstance(start, NFAState) assert isinstance(finish, NFAState) def closure(state): base = {} addclosure(state, base) return base def addclosure(state, base): assert isinstance(state, NFAState) if state in base: return base[state] = 1 for label, next in state.arcs: if label is None: addclosure(next, base) states = [DFAState(closure(start), finish)] for state in states: # NB states grows while we're iterating arcs = {} for nfastate in state.nfaset: for label, next in nfastate.arcs: if label is not None: addclosure(next, arcs.setdefault(label, {})) for label, nfaset in sorted(arcs.items()): for st in states: if st.nfaset == nfaset: break else: st = DFAState(nfaset, finish) states.append(st) state.addarc(st, label) return states # List of DFAState instances; first one is start def dump_nfa(self, name, start, finish): print("Dump of NFA for", name) todo = [start] for i, state in enumerate(todo): print(" State", i, state is finish and "(final)" or "") for label, next in state.arcs: if next in todo: j = todo.index(next) else: j = len(todo) todo.append(next) if label is None: print(" -> %d" % j) else: print(" %s -> %d" % (label, j)) def dump_dfa(self, name, dfa): print("Dump of DFA for", name) for i, state in enumerate(dfa): print(" State", i, state.isfinal and "(final)" or "") for label, next in sorted(state.arcs.items()): print(" %s -> %d" % (label, dfa.index(next))) def simplify_dfa(self, dfa): # This is not theoretically optimal, but works well enough. # Algorithm: repeatedly look for two states that have the same # set of arcs (same labels pointing to the same nodes) and # unify them, until things stop changing. # dfa is a list of DFAState instances changes = True while changes: changes = False for i, state_i in enumerate(dfa): for j in range(i+1, len(dfa)): state_j = dfa[j] if state_i == state_j: #print " unify", i, j del dfa[j] for state in dfa: state.unifystate(state_j, state_i) changes = True break def parse_rhs(self): # RHS: ALT ('|' ALT)* a, z = self.parse_alt() if self.value != "|": return a, z else: aa = NFAState() zz = NFAState() aa.addarc(a) z.addarc(zz) while self.value == "|": self.gettoken() a, z = self.parse_alt() aa.addarc(a) z.addarc(zz) return aa, zz def parse_alt(self): # ALT: ITEM+ a, b = self.parse_item() while (self.value in ("(", "[") or self.type in (token.NAME, token.STRING)): c, d = self.parse_item() b.addarc(c) b = d return a, b def parse_item(self): # ITEM: '[' RHS ']' | ATOM ['+' | '*'] if self.value == "[": self.gettoken() a, z = self.parse_rhs() self.expect(token.OP, "]") a.addarc(z) return a, z else: a, z = self.parse_atom() value = self.value if value not in ("+", "*"): return a, z self.gettoken() z.addarc(a) if value == "+": return a, z else: return a, a def parse_atom(self): # ATOM: '(' RHS ')' | NAME | STRING if self.value == "(": self.gettoken() a, z = self.parse_rhs() self.expect(token.OP, ")") return a, z elif self.type in (token.NAME, token.STRING): a = NFAState() z = NFAState() a.addarc(z, self.value) self.gettoken() return a, z else: self.raise_error("expected (...) or NAME or STRING, got %s/%s", self.type, self.value) def expect(self, type, value=None): if self.type != type or (value is not None and self.value != value): self.raise_error("expected %s/%s, got %s/%s", type, value, self.type, self.value) value = self.value self.gettoken() return value def gettoken(self): tup = next(self.generator) while tup[0] in (tokenize.COMMENT, tokenize.NL): tup = next(self.generator) self.type, self.value, self.begin, self.end, self.line = tup #print token.tok_name[self.type], repr(self.value) def raise_error(self, msg, *args): if args: try: msg = msg % args except: msg = " ".join([msg] + list(map(str, args))) raise SyntaxError(msg, (self.filename, self.end[0], self.end[1], self.line)) class NFAState(object): def __init__(self): self.arcs = [] # list of (label, NFAState) pairs def addarc(self, next, label=None): assert label is None or isinstance(label, str) assert isinstance(next, NFAState) self.arcs.append((label, next)) class DFAState(object): def __init__(self, nfaset, final): assert isinstance(nfaset, dict) assert isinstance(next(iter(nfaset)), NFAState) assert isinstance(final, NFAState) self.nfaset = nfaset self.isfinal = final in nfaset self.arcs = {} # map from label to DFAState def addarc(self, next, label): assert isinstance(label, str) assert label not in self.arcs assert isinstance(next, DFAState) self.arcs[label] = next def unifystate(self, old, new): for label, next in self.arcs.items(): if next is old: self.arcs[label] = new def __eq__(self, other): # Equality test -- ignore the nfaset instance variable assert isinstance(other, DFAState) if self.isfinal != other.isfinal: return False # Can't just return self.arcs == other.arcs, because that # would invoke this method recursively, with cycles... if len(self.arcs) != len(other.arcs): return False for label, next in self.arcs.items(): if next is not other.arcs.get(label): return False return True __hash__ = None # For Py3 compatibility. def generate_grammar(filename="Grammar.txt"): p = ParserGenerator(filename) return p.make_grammar() lib2to3/pgen2/grammar.py000064400000012660152462633570011057 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """This module defines the data structures used to represent a grammar. These are a bit arcane because they are derived from the data structures used by Python's 'pgen' parser generator. There's also a table here mapping operators to their names in the token module; the Python tokenize module reports all operators as the fallback token code OP, but the parser needs the actual token code. """ # Python imports import pickle # Local imports from . import token class Grammar(object): """Pgen parsing tables conversion class. Once initialized, this class supplies the grammar tables for the parsing engine implemented by parse.py. The parsing engine accesses the instance variables directly. The class here does not provide initialization of the tables; several subclasses exist to do this (see the conv and pgen modules). The load() method reads the tables from a pickle file, which is much faster than the other ways offered by subclasses. The pickle file is written by calling dump() (after loading the grammar tables using a subclass). The report() method prints a readable representation of the tables to stdout, for debugging. The instance variables are as follows: symbol2number -- a dict mapping symbol names to numbers. Symbol numbers are always 256 or higher, to distinguish them from token numbers, which are between 0 and 255 (inclusive). number2symbol -- a dict mapping numbers to symbol names; these two are each other's inverse. states -- a list of DFAs, where each DFA is a list of states, each state is a list of arcs, and each arc is a (i, j) pair where i is a label and j is a state number. The DFA number is the index into this list. (This name is slightly confusing.) Final states are represented by a special arc of the form (0, j) where j is its own state number. dfas -- a dict mapping symbol numbers to (DFA, first) pairs, where DFA is an item from the states list above, and first is a set of tokens that can begin this grammar rule (represented by a dict whose values are always 1). labels -- a list of (x, y) pairs where x is either a token number or a symbol number, and y is either None or a string; the strings are keywords. The label number is the index in this list; label numbers are used to mark state transitions (arcs) in the DFAs. start -- the number of the grammar's start symbol. keywords -- a dict mapping keyword strings to arc labels. tokens -- a dict mapping token numbers to arc labels. """ def __init__(self): self.symbol2number = {} self.number2symbol = {} self.states = [] self.dfas = {} self.labels = [(0, "EMPTY")] self.keywords = {} self.tokens = {} self.symbol2label = {} self.start = 256 def dump(self, filename): """Dump the grammar tables to a pickle file.""" with open(filename, "wb") as f: pickle.dump(self.__dict__, f, pickle.HIGHEST_PROTOCOL) def load(self, filename): """Load the grammar tables from a pickle file.""" with open(filename, "rb") as f: d = pickle.load(f) self.__dict__.update(d) def loads(self, pkl): """Load the grammar tables from a pickle bytes object.""" self.__dict__.update(pickle.loads(pkl)) def copy(self): """ Copy the grammar. """ new = self.__class__() for dict_attr in ("symbol2number", "number2symbol", "dfas", "keywords", "tokens", "symbol2label"): setattr(new, dict_attr, getattr(self, dict_attr).copy()) new.labels = self.labels[:] new.states = self.states[:] new.start = self.start return new def report(self): """Dump the grammar tables to standard output, for debugging.""" from pprint import pprint print("s2n") pprint(self.symbol2number) print("n2s") pprint(self.number2symbol) print("states") pprint(self.states) print("dfas") pprint(self.dfas) print("labels") pprint(self.labels) print("start", self.start) # Map from operator to number (since tokenize doesn't do this) opmap_raw = """ ( LPAR ) RPAR [ LSQB ] RSQB : COLON , COMMA ; SEMI + PLUS - MINUS * STAR / SLASH | VBAR & AMPER < LESS > GREATER = EQUAL . DOT % PERCENT ` BACKQUOTE { LBRACE } RBRACE @ AT @= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL <= LESSEQUAL >= GREATEREQUAL ~ TILDE ^ CIRCUMFLEX << LEFTSHIFT >> RIGHTSHIFT ** DOUBLESTAR += PLUSEQUAL -= MINEQUAL *= STAREQUAL /= SLASHEQUAL %= PERCENTEQUAL &= AMPEREQUAL |= VBAREQUAL ^= CIRCUMFLEXEQUAL <<= LEFTSHIFTEQUAL >>= RIGHTSHIFTEQUAL **= DOUBLESTAREQUAL // DOUBLESLASH //= DOUBLESLASHEQUAL -> RARROW := COLONEQUAL """ opmap = {} for line in opmap_raw.splitlines(): if line: op, name = line.split() opmap[op] = getattr(token, name) del line, op, name lib2to3/pgen2/literals.py000064400000003143152462633570011244 0ustar00# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Safely evaluate Python string literals without using eval().""" import re simple_escapes = {"a": "\a", "b": "\b", "f": "\f", "n": "\n", "r": "\r", "t": "\t", "v": "\v", "'": "'", '"': '"', "\\": "\\"} def escape(m): all, tail = m.group(0, 1) assert all.startswith("\\") esc = simple_escapes.get(tail) if esc is not None: return esc if tail.startswith("x"): hexes = tail[1:] if len(hexes) < 2: raise ValueError("invalid hex string escape ('\\%s')" % tail) try: i = int(hexes, 16) except ValueError: raise ValueError("invalid hex string escape ('\\%s')" % tail) from None else: try: i = int(tail, 8) except ValueError: raise ValueError("invalid octal string escape ('\\%s')" % tail) from None return chr(i) def evalString(s): assert s.startswith("'") or s.startswith('"'), repr(s[:1]) q = s[0] if s[:3] == q*3: q = q*3 assert s.endswith(q), repr(s[-len(q):]) assert len(s) >= 2*len(q) s = s[len(q):-len(q)] return re.sub(r"\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3})", escape, s) def test(): for i in range(256): c = chr(i) s = repr(c) e = evalString(s) if e != c: print(i, c, s, e) if __name__ == "__main__": test() lib2to3/pgen2/token.py000075500000002425152462633570010552 0ustar00#! /usr/bin/python3.12 """Token constants (from "token.h").""" # Taken from Python (r53757) and modified to include some tokens # originally monkeypatched in by pgen2.tokenize #--start constants-- ENDMARKER = 0 NAME = 1 NUMBER = 2 STRING = 3 NEWLINE = 4 INDENT = 5 DEDENT = 6 LPAR = 7 RPAR = 8 LSQB = 9 RSQB = 10 COLON = 11 COMMA = 12 SEMI = 13 PLUS = 14 MINUS = 15 STAR = 16 SLASH = 17 VBAR = 18 AMPER = 19 LESS = 20 GREATER = 21 EQUAL = 22 DOT = 23 PERCENT = 24 BACKQUOTE = 25 LBRACE = 26 RBRACE = 27 EQEQUAL = 28 NOTEQUAL = 29 LESSEQUAL = 30 GREATEREQUAL = 31 TILDE = 32 CIRCUMFLEX = 33 LEFTSHIFT = 34 RIGHTSHIFT = 35 DOUBLESTAR = 36 PLUSEQUAL = 37 MINEQUAL = 38 STAREQUAL = 39 SLASHEQUAL = 40 PERCENTEQUAL = 41 AMPEREQUAL = 42 VBAREQUAL = 43 CIRCUMFLEXEQUAL = 44 LEFTSHIFTEQUAL = 45 RIGHTSHIFTEQUAL = 46 DOUBLESTAREQUAL = 47 DOUBLESLASH = 48 DOUBLESLASHEQUAL = 49 AT = 50 ATEQUAL = 51 OP = 52 COMMENT = 53 NL = 54 RARROW = 55 AWAIT = 56 ASYNC = 57 ERRORTOKEN = 58 COLONEQUAL = 59 N_TOKENS = 60 NT_OFFSET = 256 #--end constants-- tok_name = {} for _name, _value in list(globals().items()): if isinstance(_value, int): tok_name[_value] = _name def ISTERMINAL(x): return x < NT_OFFSET def ISNONTERMINAL(x): return x >= NT_OFFSET def ISEOF(x): return x == ENDMARKER lib2to3/pgen2/__pycache__/__init__.cpython-312.pyc000064400000000263152462633570015525 0ustar00Ë T—çhãó—dZy)zThe pgen2 package.N)Ú__doc__©óú//usr/lib64/python3.12/lib2to3/pgen2/__init__.pyÚrs ðòrlib2to3/pgen2/__pycache__/grammar.cpython-312.pyc000064400000015534152462633570015423 0ustar00Ë T—çh°ãó®—dZddlZddlmZGd„de«ZdZiZej«D]$Z e sŒe j«\Z Z e ee «ee <Œ&[ [ [ y)a‡This module defines the data structures used to represent a grammar. These are a bit arcane because they are derived from the data structures used by Python's 'pgen' parser generator. There's also a table here mapping operators to their names in the token module; the Python tokenize module reports all operators as the fallback token code OP, but the parser needs the actual token code. éNé)Útokencó4—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z y) ÚGrammara¶ Pgen parsing tables conversion class. Once initialized, this class supplies the grammar tables for the parsing engine implemented by parse.py. The parsing engine accesses the instance variables directly. The class here does not provide initialization of the tables; several subclasses exist to do this (see the conv and pgen modules). The load() method reads the tables from a pickle file, which is much faster than the other ways offered by subclasses. The pickle file is written by calling dump() (after loading the grammar tables using a subclass). The report() method prints a readable representation of the tables to stdout, for debugging. The instance variables are as follows: symbol2number -- a dict mapping symbol names to numbers. Symbol numbers are always 256 or higher, to distinguish them from token numbers, which are between 0 and 255 (inclusive). number2symbol -- a dict mapping numbers to symbol names; these two are each other's inverse. states -- a list of DFAs, where each DFA is a list of states, each state is a list of arcs, and each arc is a (i, j) pair where i is a label and j is a state number. The DFA number is the index into this list. (This name is slightly confusing.) Final states are represented by a special arc of the form (0, j) where j is its own state number. dfas -- a dict mapping symbol numbers to (DFA, first) pairs, where DFA is an item from the states list above, and first is a set of tokens that can begin this grammar rule (represented by a dict whose values are always 1). labels -- a list of (x, y) pairs where x is either a token number or a symbol number, and y is either None or a string; the strings are keywords. The label number is the index in this list; label numbers are used to mark state transitions (arcs) in the DFAs. start -- the number of the grammar's start symbol. keywords -- a dict mapping keyword strings to arc labels. tokens -- a dict mapping token numbers to arc labels. có„—i|_i|_g|_i|_dg|_i|_i|_i|_d|_y)N)rÚEMPTYé) Ú symbol2numberÚ number2symbolÚstatesÚdfasÚlabelsÚkeywordsÚtokensÚ symbol2labelÚstart)Úselfs ú./usr/lib64/python3.12/lib2to3/pgen2/grammar.pyÚ__init__zGrammar.__init__LsF€ØˆÔØˆÔØˆŒ ؈Œ Ø#nˆŒ ؈Œ ؈Œ ØˆÔØˆ ócó¤—t|d«5}tj|j|tj«ddd«y#1swYyxYw)z)Dump the grammar tables to a pickle file.ÚwbN)ÚopenÚpickleÚdumpÚ__dict__ÚHIGHEST_PROTOCOL)rÚfilenameÚfs rrz Grammar.dumpWs4€ä (˜DÔ ! QÜ K‰K˜Ÿ ™  q¬&×*AÑ*AÔ B÷"× !Ñ !ús 0AÁAcó¦—t|d«5}tj|«}ddd«|jj «y#1swYŒ%xYw)z+Load the grammar tables from a pickle file.ÚrbN)rrÚloadrÚupdate)rrrÚds rr"z Grammar.load\s;€ä (˜DÔ ! QÜ— ‘ ˜A“ˆA÷"à ‰ ×јQÕ÷"Ð !ús AÁAcó`—|jjtj|««y)z3Load the grammar tables from a pickle bytes object.N)rr#rÚloads)rÚpkls rr&z Grammar.loadsbs€à ‰ ×ÑœVŸ\™\¨#Ó.Õ/rc óð—|j«}dD]'}t||t||«j««Œ)|jdd|_|j dd|_|j |_|S)z# Copy the grammar. )r r r rrrN)Ú __class__ÚsetattrÚgetattrÚcopyrr r)rÚnewÚ dict_attrs rr,z Grammar.copyfsh€ðn‰nÓˆó4ˆIä C˜¤G¨D°)Ó$<×$AÑ$AÓ$CÕ Dð4ð—[‘[¡^ˆŒ Ø—[‘[¡^ˆŒ Ø—J‘JˆŒ ؈ rcó^—ddlm}td«||j«td«||j«td«||j«td«||j «td«||j «td|j«y ) z:Dump the grammar tables to standard output, for debugging.r)ÚpprintÚs2nÚn2sr r rrN)r0Úprintr r r r rr)rr0s rÚreportzGrammar.reportssv€å!Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆhŒÙˆt{‰{ÔÜ ˆfŒ Ùˆty‰yÔÜ ˆhŒÙˆt{‰{ÔÜ ˆgt—z‘zÕ"rN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr"r&r,r4©rrrrs'„ñ3òj òCò  ò 0ò ó #rra ( LPAR ) RPAR [ LSQB ] RSQB : COLON , COMMA ; SEMI + PLUS - MINUS * STAR / SLASH | VBAR & AMPER < LESS > GREATER = EQUAL . DOT % PERCENT ` BACKQUOTE { LBRACE } RBRACE @ AT @= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL <= LESSEQUAL >= GREATEREQUAL ~ TILDE ^ CIRCUMFLEX << LEFTSHIFT >> RIGHTSHIFT ** DOUBLESTAR += PLUSEQUAL -= MINEQUAL *= STAREQUAL /= SLASHEQUAL %= PERCENTEQUAL &= AMPEREQUAL |= VBAREQUAL ^= CIRCUMFLEXEQUAL <<= LEFTSHIFTEQUAL >>= RIGHTSHIFTEQUAL **= DOUBLESTAREQUAL // DOUBLESLASH //= DOUBLESLASHEQUAL -> RARROW := COLONEQUAL )r8rÚrÚobjectrÚ opmap_rawÚopmapÚ splitlinesÚlineÚsplitÚopÚnamer+r9rrÚrCspðñ óõôj#ˆfôj#ð^1 € ðf €Ø × Ñ Ö "€DÚ Ø—:‘:“<‰ˆˆDÙ˜E 4Ó(ˆˆbŠ ð #ð ˆ"‰drlib2to3/pgen2/__pycache__/pgen.cpython-312.opt-1.pyc000064400000042465152462633570015670 0ustar00Ë T—çh6ãóŒ—ddlmZmZmZGd„dej«ZGd„de«ZGd„de«ZGd„d e«Z d d „Z y ) é)ÚgrammarÚtokenÚtokenizecó —eZdZy)Ú PgenGrammarN)Ú__name__Ú __module__Ú __qualname__©óú+/usr/lib64/python3.12/lib2to3/pgen2/pgen.pyrrs„Ør rcó|—eZdZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zdd„Zd„Zd„Zy)ÚParserGeneratorNcó<—d}|€t|d¬«}|j}||_||_t j |j «|_|j«|j«\|_ |_ ||«i|_ |j«y)Nzutf-8)Úencoding)ÚopenÚcloseÚfilenameÚstreamrÚgenerate_tokensÚreadlineÚ generatorÚgettokenÚparseÚdfasÚ startsymbolÚfirstÚ addfirstsets)ÚselfrrÚ close_streams r Ú__init__zParserGenerator.__init__ s€Øˆ Ø ˆ>ܘ(¨WÔ5ˆFØ!Ÿ<™<ˆLØ ˆŒ ؈Œ Ü!×1Ñ1°&·/±/ÓBˆŒØ ‰ ŒØ&*§j¡j£lÑ#ˆŒ 4Ô#Ø Ð #Ù ŒN؈Œ Ø ×ÑÕr c ó´—t«}t|jj««}|j «|j |j «|jd|j «|D]8}dt|j«z}||j|<||j|<Œ:|D]}|j|}g}|D] }g}t|jj««D]7\} } |j|j|| «|j!| «f«Œ9|j"r"|jd|j!|«f«|j|«Œ¢|j$j|«||j'||«f|j|j|<Œ|j|j |_|S)Néé)rÚlistrÚkeysÚsortÚremoverÚinsertÚlenÚ symbol2numberÚ number2symbolÚsortedÚarcsÚitemsÚappendÚ make_labelÚindexÚisfinalÚstatesÚ make_firstÚstart) rÚcÚnamesÚnameÚiÚdfar4Ústater.ÚlabelÚnexts r Ú make_grammarzParserGenerator.make_grammarsz€Ü ‹MˆÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ Ø ‰ T×%Ñ%Ô&Ø ‰ Q˜×(Ñ(Ô)ÛˆDØ”c˜!Ÿ/™/Ó*Ñ*ˆAØ$%ˆAO‰O˜DÑ !Ø!%ˆAO‰O˜AÒ ðôˆDØ—)‘)˜D‘/ˆC؈FÛØÜ#)¨%¯*©*×*:Ñ*:Ó*<Ö#=‘KE˜4Ø—K‘K §¡°°EÓ!:¸C¿I¹IÀd»OÐ LÕMð$>à—=’=Ø—K‘K  C§I¡I¨eÓ$4Ð 5Ô6Ø— ‘ ˜dÕ#ð ð H‰HO‰O˜FÔ #Ø-3°T·_±_ÀQÈÓ5MÐ,NˆAF‰F1—?‘? 4Ñ(Ó )ðð—/‘/ $×"2Ñ"2Ñ3ˆŒØˆr cóv—|j|}i}t|«D]}|j||«}d||<Œ|S©Nr)rr-r1)rr7r9Úrawfirstrr=Úilabels r r5zParserGenerator.make_first4sD€Ø—:‘:˜dÑ#ˆØˆÜ˜HÖ%ˆEØ—_‘_ Q¨Ó.ˆFàˆE&ŠMð&ðˆ r có€—t|j«}|dj«rÂ||jvrX||jvr|j|S|jj |j|df«||j|<|St t|d«}||jvr|j|S|jj |df«||j|<|St|«}|dj«rY||jvr|j|S|jj tj|f«||j|<|Stj|}||jvr|j|S|jj |df«||j|<|S©Nr#)r*ÚlabelsÚisalphar+Ú symbol2labelr0ÚgetattrrÚtokensÚevalÚkeywordsÚNAMErÚopmap)rr7r=rCÚitokenÚvalues r r1zParserGenerator.make_label=s€äQ—X‘X“ˆØ ‰8× Ñ Ô à˜Ÿ™Ñ'à˜AŸN™NÑ*ØŸ>™>¨%Ñ0Ð0à—H‘H—O‘O Q§_¡_°UÑ%;¸TÐ$BÔCØ,2A—N‘N 5Ñ)Ø!Mô!¤¨¨tÓ4ð˜QŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mô˜“KˆEØQ‰x×ÑÔ!à˜AŸJ™JÑ&ØŸ:™: eÑ,Ð,à—H‘H—O‘O¤U§Z¡Z°Ð$7Ô8Ø(.A—J‘J˜uÑ%Ø!Mô!Ÿ™ uÑ-ؘQŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mr có¸—t|jj««}|j«|D]"}||jvsŒ|j |«Œ$y©N)r%rr&r'rÚ calcfirst)rr8r9s r rzParserGenerator.addfirstsetsksB€ÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ ÛˆDؘ4Ÿ:™:Ò%Ø—‘˜tÕ$ñr c ó8—|j|}d|j|<|d}i}i}|jj«D]ƒ\}}||jvrd||jvr|j|}|€.t d|z«‚|j |«|j|}|j |«|||<Œxd||<|di||<Œ…i} |j«D]/\}} | D]%} | | vrt d|›d| ›d|›d| | ›«‚|| | <Œ'Œ1||j|<y)Nr#zrecursion for rule %rrzrule z is ambiguous; z is in the first sets of z as well as )rrr.r/Ú ValueErrorrSÚupdate) rr9r;r<ÚtotalsetÚ overlapcheckr=r>ÚfsetÚinverseÚitsfirstÚsymbols r rSzParserGenerator.calcfirstss;€Øi‰i˜‰oˆØˆ ‰ 4ÑØA‘ˆØˆØˆ Ø Ÿ:™:×+Ñ+Ö-‰KˆE4ؘŸ ™ Ñ!ؘDŸJ™JÑ&ØŸ:™: eÑ,DØ|Ü(Ð)@À4Ñ)GÓHÐHà—N‘N 5Ô)ØŸ:™: eÑ,DØ—‘ Ô%Ø&* ˜UÒ#à"#˜‘Ø',¨a j ˜UÒ#ð.ðˆØ+×1Ñ1Ö3‰OˆE8Û"ؘWÑ$Ý$â&*ªF²E¸7À6º?ð&LóMðMð#(˜’ñ #ð 4ð$ˆ ‰ 4Òr cóˆ—i}d}|jtjk7r|jtjk(r.|j «|jtjk(rŒ.|j tj «}|j tjd«|j«\}}|j tj«|j||«}t|«}|j|«t|«}|||<|€|}|jtjk7rŒ||fS)NÚ:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectrMÚOPÚ parse_rhsÚmake_dfar*Ú simplify_dfa) rrrr9ÚaÚzr;ÚoldlenÚnewlens r rzParserGenerator.parse‘sð€ØˆØˆ ài‰iœ5Ÿ?™?Ó*Ø—)‘)œuŸ}™}Ò,Ø— ‘ ”ð—)‘)œuŸ}™}Ó,ð—;‘;œuŸz™zÓ*ˆDØ K‰KœŸ™ #Ô &Ø—>‘>Ó#‰DˆAˆqØ K‰KœŸ ™ Ô &à—-‘-  1Ó%ˆC䘓XˆFØ × Ñ ˜cÔ "ܘ“XˆF؈D‰JàÐ"Ø" ð#i‰iœ5Ÿ?™?Ô*ð$[Ð Ð r c ó¦‡ —ˆ fd„}ˆ fd„Š t||«|«g}|D]­}i}|jD]2}|jD]!\}} |€Œ ‰ | |j|i««Œ#Œ4t |j ««D]L\}} |D]} | j| k(sŒnt| |«} |j | «|j| |«ŒNŒ¯|S)Ncó•—i}‰||«|SrRr )r<ÚbaseÚ addclosures €r Úclosurez)ParserGenerator.make_dfa..closure°sø€ØˆDÙ u˜dÔ #؈Kr cóZ•—||vryd||<|jD]\}}|Œ ‰||«ŒyrA©r.)r<rmr=r>rns €r rnz,ParserGenerator.make_dfa..addclosure´s7ø€à˜‰}ØØˆD‰KØ$Ÿzœz‘ tØ‘=Ù˜t TÕ*ñ *r )ÚDFAStateÚnfasetr.Ú setdefaultr-r/r0Úaddarc) rr6Úfinishror4r<r.Únfastater=r>rsÚstrns @r rezParserGenerator.make_dfa©sÏø€ô ô +ô™7 5›>¨6Ó2Ð3ˆÛˆE؈DØ!ŸLœLØ#+§=¤=‘KE˜4ØÑ(Ù" 4¨¯©¸ÀÓ)CÕDñ$1ð)ô"(¨¯ © « Ö!5‘ vÛ BØ—y‘y FÓ*Ùð!ô" &¨&Ó1BØ—M‘M "Ô%Ø— ‘ ˜R Õ'ñ"6ð ðˆ r cóD—td|«|g}t|«D]ƒ\}}td|||uxrdxsd«|jD]X\}}||vr|j|«} nt |«} |j |«|€td| z«ŒItd|| fz«ŒZŒ…y)NzDump of NFA forú Stateú(final)Úz -> %dú %s -> %d)ÚprintÚ enumerater.r2r*r0) rr9r6rvÚtodor:r<r=r>Újs r Údump_nfazParserGenerator.dump_nfaÍsž€Ü РÔ&؈wˆÜ! $ž‰HˆAˆuÜ )˜Q ¨ Ò =°IÒ CÀÔ DØ$Ÿzœz‘ tؘ4‘<ØŸ ™  4Ó(‘Aä˜D› AØ—K‘K Ô%Ø=ܘ+¨™/Õ*ä˜.¨E°1¨:Ñ5Õ6ñ *ñ(r c ó—td|«t|«D]n\}}td||jxrdxsd«t|jj ««D]$\}}td||j |«fz«Œ&Œpy)NzDump of DFA forrzr{r|r})r~rr3r-r.r/r2)rr9r;r:r<r=r>s r Údump_dfazParserGenerator.dump_dfaÝss€Ü РÔ&Ü! #ž‰HˆAˆuÜ )˜Q § ¡ Ò ;°)Ò A¸rÔ BÜ% e§j¡j×&6Ñ&6Ó&8Ö9‘ tÜn¨¨s¯y©y¸«Ð'?Ñ?Õ@ñ :ñ'r cóÌ—d}|r`d}t|«D]L\}}t|dzt|««D],}||}||k(sŒ||=|D]}|j||«Œd}ŒLŒN|rŒ_yy)NTFr)rÚranger*Ú unifystate)rr;Úchangesr:Ústate_irÚstate_jr<s r rfzParserGenerator.simplify_dfaäs{€ðˆÙ؈GÜ'¨žn‘ 7ܘq ™s¤C¨£HÖ-AØ! !™fGØ 'Ó)à ˜FÛ%(˜EØ!×,Ñ,¨W°gÕ>ð&)à"&˜Ùñ.ð-ôr cóŠ—|j«\}}|jdk7r||fSt«}t«}|j|«|j|«|jdk(rU|j «|j«\}}|j|«|j|«|jdk(rŒU||fS)NÚ|)Ú parse_altrPÚNFAStaterur)rrgrhÚaaÚzzs r rdzParserGenerator.parse_rhsùsŸ€à~‰~Ó‰ˆˆ1Ø :‰:˜Ò Øa4ˆK䓈BÜ“ˆBØ I‰IaŒLØ H‰HRŒLØ—*‘* Ò#Ø— ‘ ”Ø—~‘~Ó'‘1Ø— ‘ ˜!” Ø—‘˜” ð —*‘* Ó#ð r6ˆMr cóh—|j«\}}|jdvs,|jtjtj fvrb|j«\}}|j |«|}|jdvrŒ5|jtjtj fvrŒb||fS)N)Ú(Ú[)Ú parse_itemrPr_rrMÚSTRINGru)rrgÚbr7Úds r rzParserGenerator.parse_alt s‰€à‰Ó ‰ˆˆ1Øz‰z˜ZÑ'Øy‰yœUŸZ™Z¬¯©Ð6Ñ6Ø—?‘?Ó$‰DˆAˆqØ H‰HQŒK؈Að z‰z˜ZÒ'Øy‰yœUŸZ™Z¬¯©Ð6Ò6ð!ˆtˆ r cóz—|jdk(rX|j«|j«\}}|jtj d«|j |«||fS|j«\}}|j}|dvr||fS|j«|j |«|dk(r||fS||fS)Nr“Ú])Ú+Ú*rš)rPrrdrbrrcruÚ parse_atom)rrgrhrPs r r”zParserGenerator.parse_items¤€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Ø H‰HQŒKØa4ˆKà—?‘?Ó$‰DˆAˆqØ—J‘JˆEؘJÑ&ؘ!t Ø M‰MŒOØ H‰HQŒKؘŠ|ؘ!t à˜!t r cóÞ—|jdk(rG|j«|j«\}}|jtj d«||fS|j tjtjfvrDt«}t«}|j||j«|j«||fS|jd|j |j«y)Nr’Ú)z+expected (...) or NAME or STRING, got %s/%s) rPrrdrbrrcr_rMr•rŽruÚ raise_error)rrgrhs r rœzParserGenerator.parse_atom(s«€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Øa4ˆKØ Y‰Yœ5Ÿ:™:¤u§|¡|Ð4Ñ 4Ü“ ˆAÜ“ ˆAØ H‰HQ˜Ÿ ™ Ô #Ø M‰MŒOØa4ˆKà × Ñ ÐJØ!ŸY™Y¨¯ © õ 4r cóЗ|j|k7s|8|j|k7r)|jd|||j|j«|j}|j«|S)Nzexpected %s/%s, got %s/%s)r_rPrŸr)rr_rPs r rbzParserGenerator.expect9sX€Ø 9‰9˜Ò  Ð!2°t·z±zÀUÒ7JØ × Ñ Ð8Ø! 5¨$¯)©)°T·Z±Zô Aà— ‘ ˆØ ‰ ŒØˆ r có0—t|j«}|dtjtjfvr;t|j«}|dtjtjfvrŒ;|\|_|_|_|_|_ yrE) r>rrÚCOMMENTÚNLr_rPÚbeginÚendÚline)rÚtups r rzParserGenerator.gettokenAsp€Ü4—>‘>Ó"ˆØ!‰fœ×)Ñ)¬8¯;©;Ð7Ñ7Üt—~‘~Ó&ˆCð!‰fœ×)Ñ)¬8¯;©;Ð7Ò7àADÑ>ˆŒ 4”:˜tœz¨4¬8°TµYr c óô—|r ||z}t ||j |j d|j d|jf«‚#dj|gttt|««z«}YŒnxYw)NÚ r#r)Újoinr%ÚmapÚstrÚ SyntaxErrorrr¥r¦)rÚmsgÚargss r rŸzParserGenerator.raise_errorHsq€Ù ð =ؘD‘jô˜# § ¡ ¨t¯x©x¸©{Ø $§¡¨¡ ¨T¯Y©Yð 8ó9ð 9øð =Ø—h‘h ˜u¤t¬C´°T«NÓ';Ñ;Ó<’ús „AÁ.A7rR)rr r r!r?r5r1rrSrrer‚r„rfrdrr”rœrbrrŸr r r rr s`„ó òò2ò,"ò\%ò$ò<!ò0"òH7ò Aòò*ò"òò(4ó"òEó9r rcó—eZdZd„Zdd„Zy)rŽcó—g|_yrRrq)rs r r!zNFAState.__init__Ss €Øˆ r Ncó>—|jj||f«yrR)r.r0©rr>r=s r ruzNFAState.addarcVs€ð ‰ ×ј% ˜Õ'r rR)rr r r!rur r r rŽrŽQs „òô(r rŽcó(—eZdZd„Zd„Zd„Zd„ZdZy)rrcó2—||_||v|_i|_yrR)rsr3r.)rrsÚfinals r r!zDFAState.__init__]s€ðˆŒ Ø ˆŒ ؈ r có"—||j|<yrRrqr³s r ruzDFAState.addarces€ð ˆ ‰ %Òr cóp—|jj«D]\}}||usŒ ||j|<ŒyrR)r.r/)rÚoldÚnewr=r>s r r‡zDFAState.unifystateks0€ØŸ9™9Ÿ?™?Ö,‰KˆE4ØsŠ{Ø#&— ‘ ˜%Ò ñ-r có—|j|jk7ryt|j«t|j«k7ry|jj«D]$\}}||jj |«usŒ$yy)NFT)r3r*r.r/Úget)rÚotherr=r>s r Ú__eq__zDFAState.__eq__psj€ð <‰<˜5Ÿ=™=Ò (Øô ˆty‰y‹>œS §¡›_Ò ,ØØŸ9™9Ÿ?™?Ö,‰KˆE4ؘ5Ÿ:™:Ÿ>™>¨%Ó0Ò0Ùð-ðr N)rr r r!rur‡r¾Ú__hash__r r r rrrr[s„òò ò 'ò ðHr rrcó8—t|«}|j«SrR)rr?)rÚps r Úgenerate_grammarr€s€Ü˜Ó!€AØ >‰>Ó Ðr N)z Grammar.txt) r|rrrÚGrammarrÚobjectrrŽrrrÂr r r ÚrÅsJð÷ 'Ñ&ô '—/‘/ô ôE9fôE9ôN (ˆvô(ô#ˆvô#ôJr lib2to3/pgen2/__pycache__/token.cpython-312.opt-1.pyc000064400000004304152462633570016045 0ustar00Ë T—çhãóz—dZdZdZdZdZdZdZdZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&d'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9d:Z:d;Z;dZ>iZ?e@eA«j…««D]\ZCZDeEeDeF«sŒeCe?eD<Œd?„ZGd@„ZHdA„ZIyB)Cz!Token constants (from "token.h").éééééééééé é é é é ééééééééééééééééééé é!é"é#é$é%é&é'é(é)é*é+é,é-é.é/é0é1é2é3é4é5é6é7é8é9é:é;é<écó—|tkS©N©Ú NT_OFFSET©Úxs ú,/usr/lib64/python3.12/lib2to3/pgen2/token.pyÚ ISTERMINALrGOs €Ø Œy‰=Ðócó—|tk\SrArBrDs rFÚ ISNONTERMINALrJRó €Ø ” ‰>ÐrHcó—|tk(SrA)Ú ENDMARKERrDs rFÚISEOFrNUrKrHN)JÚ__doc__rMÚNAMEÚNUMBERÚSTRINGÚNEWLINEÚINDENTÚDEDENTÚLPARÚRPARÚLSQBÚRSQBÚCOLONÚCOMMAÚSEMIÚPLUSÚMINUSÚSTARÚSLASHÚVBARÚAMPERÚLESSÚGREATERÚEQUALÚDOTÚPERCENTÚ BACKQUOTEÚLBRACEÚRBRACEÚEQEQUALÚNOTEQUALÚ LESSEQUALÚ GREATEREQUALÚTILDEÚ CIRCUMFLEXÚ LEFTSHIFTÚ RIGHTSHIFTÚ DOUBLESTARÚ PLUSEQUALÚMINEQUALÚ STAREQUALÚ SLASHEQUALÚ PERCENTEQUALÚ AMPEREQUALÚ VBAREQUALÚCIRCUMFLEXEQUALÚLEFTSHIFTEQUALÚRIGHTSHIFTEQUALÚDOUBLESTAREQUALÚ DOUBLESLASHÚDOUBLESLASHEQUALÚATÚATEQUALÚOPÚCOMMENTÚNLÚRARROWÚAWAITÚASYNCÚ ERRORTOKENÚ COLONEQUALÚN_TOKENSrCÚtok_nameÚlistÚglobalsÚitemsÚ_nameÚ_valueÚ isinstanceÚintrGrJrN©rHrFÚr•s‰ðñ(ð € Ø€Ø €Ø €Ø €Ø €Ø €Ø€Ø€Ø€Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø€Ø €Ø € Ø €Ø €Ø €Ø €Ø € Ø€ Ø €Ø € Ø € Ø € Ø € Ø € Ø €Ø € Ø € Ø€ Ø € Ø € ؀؀؀؀؀ ØÐØ€Ø €Ø€Ø €Ø€Ø €Ø €Ø €Ø € Ø € Ø €Ø € ð €Ù™'›)Ÿ/™/Ó+Ö,M€Eˆ6Ù&˜#ÕØ ˆÒð-ò òórHlib2to3/pgen2/__pycache__/pgen.cpython-312.opt-2.pyc000064400000042465152462633570015671 0ustar00Ë T—çh6ãóŒ—ddlmZmZmZGd„dej«ZGd„de«ZGd„de«ZGd„d e«Z d d „Z y ) é)ÚgrammarÚtokenÚtokenizecó —eZdZy)Ú PgenGrammarN)Ú__name__Ú __module__Ú __qualname__©óú+/usr/lib64/python3.12/lib2to3/pgen2/pgen.pyrrs„Ør rcó|—eZdZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zdd„Zd„Zd„Zy)ÚParserGeneratorNcó<—d}|€t|d¬«}|j}||_||_t j |j «|_|j«|j«\|_ |_ ||«i|_ |j«y)Nzutf-8)Úencoding)ÚopenÚcloseÚfilenameÚstreamrÚgenerate_tokensÚreadlineÚ generatorÚgettokenÚparseÚdfasÚ startsymbolÚfirstÚ addfirstsets)ÚselfrrÚ close_streams r Ú__init__zParserGenerator.__init__ s€Øˆ Ø ˆ>ܘ(¨WÔ5ˆFØ!Ÿ<™<ˆLØ ˆŒ ؈Œ Ü!×1Ñ1°&·/±/ÓBˆŒØ ‰ ŒØ&*§j¡j£lÑ#ˆŒ 4Ô#Ø Ð #Ù ŒN؈Œ Ø ×ÑÕr c ó´—t«}t|jj««}|j «|j |j «|jd|j «|D]8}dt|j«z}||j|<||j|<Œ:|D]}|j|}g}|D] }g}t|jj««D]7\} } |j|j|| «|j!| «f«Œ9|j"r"|jd|j!|«f«|j|«Œ¢|j$j|«||j'||«f|j|j|<Œ|j|j |_|S)Néé)rÚlistrÚkeysÚsortÚremoverÚinsertÚlenÚ symbol2numberÚ number2symbolÚsortedÚarcsÚitemsÚappendÚ make_labelÚindexÚisfinalÚstatesÚ make_firstÚstart) rÚcÚnamesÚnameÚiÚdfar4Ústater.ÚlabelÚnexts r Ú make_grammarzParserGenerator.make_grammarsz€Ü ‹MˆÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ Ø ‰ T×%Ñ%Ô&Ø ‰ Q˜×(Ñ(Ô)ÛˆDØ”c˜!Ÿ/™/Ó*Ñ*ˆAØ$%ˆAO‰O˜DÑ !Ø!%ˆAO‰O˜AÒ ðôˆDØ—)‘)˜D‘/ˆC؈FÛØÜ#)¨%¯*©*×*:Ñ*:Ó*<Ö#=‘KE˜4Ø—K‘K §¡°°EÓ!:¸C¿I¹IÀd»OÐ LÕMð$>à—=’=Ø—K‘K  C§I¡I¨eÓ$4Ð 5Ô6Ø— ‘ ˜dÕ#ð ð H‰HO‰O˜FÔ #Ø-3°T·_±_ÀQÈÓ5MÐ,NˆAF‰F1—?‘? 4Ñ(Ó )ðð—/‘/ $×"2Ñ"2Ñ3ˆŒØˆr cóv—|j|}i}t|«D]}|j||«}d||<Œ|S©Nr)rr-r1)rr7r9Úrawfirstrr=Úilabels r r5zParserGenerator.make_first4sD€Ø—:‘:˜dÑ#ˆØˆÜ˜HÖ%ˆEØ—_‘_ Q¨Ó.ˆFàˆE&ŠMð&ðˆ r có€—t|j«}|dj«rÂ||jvrX||jvr|j|S|jj |j|df«||j|<|St t|d«}||jvr|j|S|jj |df«||j|<|St|«}|dj«rY||jvr|j|S|jj tj|f«||j|<|Stj|}||jvr|j|S|jj |df«||j|<|S©Nr#)r*ÚlabelsÚisalphar+Ú symbol2labelr0ÚgetattrrÚtokensÚevalÚkeywordsÚNAMErÚopmap)rr7r=rCÚitokenÚvalues r r1zParserGenerator.make_label=s€äQ—X‘X“ˆØ ‰8× Ñ Ô à˜Ÿ™Ñ'à˜AŸN™NÑ*ØŸ>™>¨%Ñ0Ð0à—H‘H—O‘O Q§_¡_°UÑ%;¸TÐ$BÔCØ,2A—N‘N 5Ñ)Ø!Mô!¤¨¨tÓ4ð˜QŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mô˜“KˆEØQ‰x×ÑÔ!à˜AŸJ™JÑ&ØŸ:™: eÑ,Ð,à—H‘H—O‘O¤U§Z¡Z°Ð$7Ô8Ø(.A—J‘J˜uÑ%Ø!Mô!Ÿ™ uÑ-ؘQŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mr có¸—t|jj««}|j«|D]"}||jvsŒ|j |«Œ$y©N)r%rr&r'rÚ calcfirst)rr8r9s r rzParserGenerator.addfirstsetsksB€ÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ ÛˆDؘ4Ÿ:™:Ò%Ø—‘˜tÕ$ñr c ó8—|j|}d|j|<|d}i}i}|jj«D]ƒ\}}||jvrd||jvr|j|}|€.t d|z«‚|j |«|j|}|j |«|||<Œxd||<|di||<Œ…i} |j«D]/\}} | D]%} | | vrt d|›d| ›d|›d| | ›«‚|| | <Œ'Œ1||j|<y)Nr#zrecursion for rule %rrzrule z is ambiguous; z is in the first sets of z as well as )rrr.r/Ú ValueErrorrSÚupdate) rr9r;r<ÚtotalsetÚ overlapcheckr=r>ÚfsetÚinverseÚitsfirstÚsymbols r rSzParserGenerator.calcfirstss;€Øi‰i˜‰oˆØˆ ‰ 4ÑØA‘ˆØˆØˆ Ø Ÿ:™:×+Ñ+Ö-‰KˆE4ؘŸ ™ Ñ!ؘDŸJ™JÑ&ØŸ:™: eÑ,DØ|Ü(Ð)@À4Ñ)GÓHÐHà—N‘N 5Ô)ØŸ:™: eÑ,DØ—‘ Ô%Ø&* ˜UÒ#à"#˜‘Ø',¨a j ˜UÒ#ð.ðˆØ+×1Ñ1Ö3‰OˆE8Û"ؘWÑ$Ý$â&*ªF²E¸7À6º?ð&LóMðMð#(˜’ñ #ð 4ð$ˆ ‰ 4Òr cóˆ—i}d}|jtjk7r|jtjk(r.|j «|jtjk(rŒ.|j tj «}|j tjd«|j«\}}|j tj«|j||«}t|«}|j|«t|«}|||<|€|}|jtjk7rŒ||fS)NÚ:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectrMÚOPÚ parse_rhsÚmake_dfar*Ú simplify_dfa) rrrr9ÚaÚzr;ÚoldlenÚnewlens r rzParserGenerator.parse‘sð€ØˆØˆ ài‰iœ5Ÿ?™?Ó*Ø—)‘)œuŸ}™}Ò,Ø— ‘ ”ð—)‘)œuŸ}™}Ó,ð—;‘;œuŸz™zÓ*ˆDØ K‰KœŸ™ #Ô &Ø—>‘>Ó#‰DˆAˆqØ K‰KœŸ ™ Ô &à—-‘-  1Ó%ˆC䘓XˆFØ × Ñ ˜cÔ "ܘ“XˆF؈D‰JàÐ"Ø" ð#i‰iœ5Ÿ?™?Ô*ð$[Ð Ð r c ó¦‡ —ˆ fd„}ˆ fd„Š t||«|«g}|D]­}i}|jD]2}|jD]!\}} |€Œ ‰ | |j|i««Œ#Œ4t |j ««D]L\}} |D]} | j| k(sŒnt| |«} |j | «|j| |«ŒNŒ¯|S)Ncó•—i}‰||«|SrRr )r<ÚbaseÚ addclosures €r Úclosurez)ParserGenerator.make_dfa..closure°sø€ØˆDÙ u˜dÔ #؈Kr cóZ•—||vryd||<|jD]\}}|Œ ‰||«ŒyrA©r.)r<rmr=r>rns €r rnz,ParserGenerator.make_dfa..addclosure´s7ø€à˜‰}ØØˆD‰KØ$Ÿzœz‘ tØ‘=Ù˜t TÕ*ñ *r )ÚDFAStateÚnfasetr.Ú setdefaultr-r/r0Úaddarc) rr6Úfinishror4r<r.Únfastater=r>rsÚstrns @r rezParserGenerator.make_dfa©sÏø€ô ô +ô™7 5›>¨6Ó2Ð3ˆÛˆE؈DØ!ŸLœLØ#+§=¤=‘KE˜4ØÑ(Ù" 4¨¯©¸ÀÓ)CÕDñ$1ð)ô"(¨¯ © « Ö!5‘ vÛ BØ—y‘y FÓ*Ùð!ô" &¨&Ó1BØ—M‘M "Ô%Ø— ‘ ˜R Õ'ñ"6ð ðˆ r cóD—td|«|g}t|«D]ƒ\}}td|||uxrdxsd«|jD]X\}}||vr|j|«} nt |«} |j |«|€td| z«ŒItd|| fz«ŒZŒ…y)NzDump of NFA forú Stateú(final)Úz -> %dú %s -> %d)ÚprintÚ enumerater.r2r*r0) rr9r6rvÚtodor:r<r=r>Újs r Údump_nfazParserGenerator.dump_nfaÍsž€Ü РÔ&؈wˆÜ! $ž‰HˆAˆuÜ )˜Q ¨ Ò =°IÒ CÀÔ DØ$Ÿzœz‘ tؘ4‘<ØŸ ™  4Ó(‘Aä˜D› AØ—K‘K Ô%Ø=ܘ+¨™/Õ*ä˜.¨E°1¨:Ñ5Õ6ñ *ñ(r c ó—td|«t|«D]n\}}td||jxrdxsd«t|jj ««D]$\}}td||j |«fz«Œ&Œpy)NzDump of DFA forrzr{r|r})r~rr3r-r.r/r2)rr9r;r:r<r=r>s r Údump_dfazParserGenerator.dump_dfaÝss€Ü РÔ&Ü! #ž‰HˆAˆuÜ )˜Q § ¡ Ò ;°)Ò A¸rÔ BÜ% e§j¡j×&6Ñ&6Ó&8Ö9‘ tÜn¨¨s¯y©y¸«Ð'?Ñ?Õ@ñ :ñ'r cóÌ—d}|r`d}t|«D]L\}}t|dzt|««D],}||}||k(sŒ||=|D]}|j||«Œd}ŒLŒN|rŒ_yy)NTFr)rÚranger*Ú unifystate)rr;Úchangesr:Ústate_irÚstate_jr<s r rfzParserGenerator.simplify_dfaäs{€ðˆÙ؈GÜ'¨žn‘ 7ܘq ™s¤C¨£HÖ-AØ! !™fGØ 'Ó)à ˜FÛ%(˜EØ!×,Ñ,¨W°gÕ>ð&)à"&˜Ùñ.ð-ôr cóŠ—|j«\}}|jdk7r||fSt«}t«}|j|«|j|«|jdk(rU|j «|j«\}}|j|«|j|«|jdk(rŒU||fS)NÚ|)Ú parse_altrPÚNFAStaterur)rrgrhÚaaÚzzs r rdzParserGenerator.parse_rhsùsŸ€à~‰~Ó‰ˆˆ1Ø :‰:˜Ò Øa4ˆK䓈BÜ“ˆBØ I‰IaŒLØ H‰HRŒLØ—*‘* Ò#Ø— ‘ ”Ø—~‘~Ó'‘1Ø— ‘ ˜!” Ø—‘˜” ð —*‘* Ó#ð r6ˆMr cóh—|j«\}}|jdvs,|jtjtj fvrb|j«\}}|j |«|}|jdvrŒ5|jtjtj fvrŒb||fS)N)Ú(Ú[)Ú parse_itemrPr_rrMÚSTRINGru)rrgÚbr7Úds r rzParserGenerator.parse_alt s‰€à‰Ó ‰ˆˆ1Øz‰z˜ZÑ'Øy‰yœUŸZ™Z¬¯©Ð6Ñ6Ø—?‘?Ó$‰DˆAˆqØ H‰HQŒK؈Að z‰z˜ZÒ'Øy‰yœUŸZ™Z¬¯©Ð6Ò6ð!ˆtˆ r cóz—|jdk(rX|j«|j«\}}|jtj d«|j |«||fS|j«\}}|j}|dvr||fS|j«|j |«|dk(r||fS||fS)Nr“Ú])Ú+Ú*rš)rPrrdrbrrcruÚ parse_atom)rrgrhrPs r r”zParserGenerator.parse_items¤€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Ø H‰HQŒKØa4ˆKà—?‘?Ó$‰DˆAˆqØ—J‘JˆEؘJÑ&ؘ!t Ø M‰MŒOØ H‰HQŒKؘŠ|ؘ!t à˜!t r cóÞ—|jdk(rG|j«|j«\}}|jtj d«||fS|j tjtjfvrDt«}t«}|j||j«|j«||fS|jd|j |j«y)Nr’Ú)z+expected (...) or NAME or STRING, got %s/%s) rPrrdrbrrcr_rMr•rŽruÚ raise_error)rrgrhs r rœzParserGenerator.parse_atom(s«€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Øa4ˆKØ Y‰Yœ5Ÿ:™:¤u§|¡|Ð4Ñ 4Ü“ ˆAÜ“ ˆAØ H‰HQ˜Ÿ ™ Ô #Ø M‰MŒOØa4ˆKà × Ñ ÐJØ!ŸY™Y¨¯ © õ 4r cóЗ|j|k7s|8|j|k7r)|jd|||j|j«|j}|j«|S)Nzexpected %s/%s, got %s/%s)r_rPrŸr)rr_rPs r rbzParserGenerator.expect9sX€Ø 9‰9˜Ò  Ð!2°t·z±zÀUÒ7JØ × Ñ Ð8Ø! 5¨$¯)©)°T·Z±Zô Aà— ‘ ˆØ ‰ ŒØˆ r có0—t|j«}|dtjtjfvr;t|j«}|dtjtjfvrŒ;|\|_|_|_|_|_ yrE) r>rrÚCOMMENTÚNLr_rPÚbeginÚendÚline)rÚtups r rzParserGenerator.gettokenAsp€Ü4—>‘>Ó"ˆØ!‰fœ×)Ñ)¬8¯;©;Ð7Ñ7Üt—~‘~Ó&ˆCð!‰fœ×)Ñ)¬8¯;©;Ð7Ò7àADÑ>ˆŒ 4”:˜tœz¨4¬8°TµYr c óô—|r ||z}t ||j |j d|j d|jf«‚#dj|gttt|««z«}YŒnxYw)NÚ r#r)Újoinr%ÚmapÚstrÚ SyntaxErrorrr¥r¦)rÚmsgÚargss r rŸzParserGenerator.raise_errorHsq€Ù ð =ؘD‘jô˜# § ¡ ¨t¯x©x¸©{Ø $§¡¨¡ ¨T¯Y©Yð 8ó9ð 9øð =Ø—h‘h ˜u¤t¬C´°T«NÓ';Ñ;Ó<’ús „AÁ.A7rR)rr r r!r?r5r1rrSrrer‚r„rfrdrr”rœrbrrŸr r r rr s`„ó òò2ò,"ò\%ò$ò<!ò0"òH7ò Aòò*ò"òò(4ó"òEó9r rcó—eZdZd„Zdd„Zy)rŽcó—g|_yrRrq)rs r r!zNFAState.__init__Ss €Øˆ r Ncó>—|jj||f«yrR)r.r0©rr>r=s r ruzNFAState.addarcVs€ð ‰ ×ј% ˜Õ'r rR)rr r r!rur r r rŽrŽQs „òô(r rŽcó(—eZdZd„Zd„Zd„Zd„ZdZy)rrcó2—||_||v|_i|_yrR)rsr3r.)rrsÚfinals r r!zDFAState.__init__]s€ðˆŒ Ø ˆŒ ؈ r có"—||j|<yrRrqr³s r ruzDFAState.addarces€ð ˆ ‰ %Òr cóp—|jj«D]\}}||usŒ ||j|<ŒyrR)r.r/)rÚoldÚnewr=r>s r r‡zDFAState.unifystateks0€ØŸ9™9Ÿ?™?Ö,‰KˆE4ØsŠ{Ø#&— ‘ ˜%Ò ñ-r có—|j|jk7ryt|j«t|j«k7ry|jj«D]$\}}||jj |«usŒ$yy)NFT)r3r*r.r/Úget)rÚotherr=r>s r Ú__eq__zDFAState.__eq__psj€ð <‰<˜5Ÿ=™=Ò (Øô ˆty‰y‹>œS §¡›_Ò ,ØØŸ9™9Ÿ?™?Ö,‰KˆE4ؘ5Ÿ:™:Ÿ>™>¨%Ó0Ò0Ùð-ðr N)rr r r!rur‡r¾Ú__hash__r r r rrrr[s„òò ò 'ò ðHr rrcó8—t|«}|j«SrR)rr?)rÚps r Úgenerate_grammarr€s€Ü˜Ó!€AØ >‰>Ó Ðr N)z Grammar.txt) r|rrrÚGrammarrÚobjectrrŽrrrÂr r r ÚrÅsJð÷ 'Ñ&ô '—/‘/ô ôE9fôE9ôN (ˆvô(ô#ˆvô#ôJr lib2to3/pgen2/__pycache__/tokenize.cpython-312.opt-1.pyc000064400000050512152462633570016557 0ustar00Ë T—çhRã ó´—dZdZdZddlZddlZddlmZmZddl­ddl m Z e e «Dcgc] }|dd k7sŒ |‘Œc}gd ¢zZ [ e d „Zd „Zd „Zd„ZdZdZeedez«zee«zZdZdZdZdZedd«Zeeeee«ZdZedd«ee«zZdezZeee«Z ede dz«Z!ee!e e«Z"dZ#dZ$d Z%d!Z&d"Z'ee'd#ze'd$z«Z(ee'd%ze'd&z«Z)ed'd(d)d*d+d,d-d.d/« Z*d0Z+ed1d2d3«Z,ee*e+e,«Z-ee"e-e)e«Z.ee.zZ/ee'd4zed5d«ze'd6zed7d«z«Z0edee(«Z1eee1e"e-e0e«zZ2e3ejhe/e2e%e&f«\Z5Z6Z7Z8ed8d9d:d;«ed8d9d£zZ9ejhe#«ejhe$«e7e8d?œe9Dcic]}|›d#e7“Œ c}¥e9Dcic]}|›d$e8“Œ c}¥e9Dcic]}|d“Œc}¥Z:d#d$he9Dchc]}|›d#’Œ c}ze9Dchc]}|›d$’Œ c}zZ;d5d7he9Dchc]}|›d5’Œ c}ze9Dchc]}|›d7’Œ c}zZ«Z?GdC„dDe>«Z@dE„ZAeAfdF„ZBdG„ZCGdH„dI«ZDejhdJejŠ«ZFejhdKejŠ«ZGdL„ZHdM„ZIdN„ZJdO„ZKeLdPk(r\ddlMZMeNeMjž«dkDr&eBePeMjžd«j¢«yeBeMj¤j¢«yycc}w#e$reZ YŒéwxYwcc}wcc}wcc}wcc}wcc}wcc}wcc}w)QaÀTokenization help for Python programs. generate_tokens(readline) is a generator that breaks a stream of text into Python tokens. It accepts a readline-like method which is called repeatedly to get the next line of input (or "" for EOF). It generates 5-tuples with these members: the token type (see token.py) the token (a string) the starting (row, column) indices of the token (a 2-tuple of ints) the ending (row, column) indices of the token (a 2-tuple of ints) the original line (string) It is designed to match the working of the Python tokenizer exactly, except that it produces COMMENT tokens for comments and gives type OP for all operators Older entry points tokenize_loop(readline, tokeneater) tokenize(readline, tokeneater=printtoken) are the same, except instead of generating tokens, tokeneater is a callback function to which the 5 fields described above are passed as 5 arguments, each time a new token is found.zKa-Ping Yee z@GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip MontanaroéN)ÚBOM_UTF8Úlookup)Ú*é)ÚtokenÚ_)ÚtokenizeÚgenerate_tokensÚ untokenizecó0—ddj|«zdzS)NÚ(Ú|Ú))Újoin©Úchoicess ú//usr/lib64/python3.12/lib2to3/pgen2/tokenize.pyÚgroupr0s€˜C #§(¡(¨7Ó"3Ñ3°cÑ9Ð9ócó—t|ŽdzS)Nr©rrs rÚanyr1s€œ% ˜/¨CÑ/Ð/rcó—t|ŽdzS)NÚ?rrs rÚmayber2s€œE 7˜O¨cÑ1Ð1rcó,‡—tˆfd„‰D««S)Nc3ó€•K—|]5}‰dzD]+}|j«|j«k7sŒ%||z–—Œ-Œ7y­w))ÚN)Úcasefold)Ú.0ÚxÚyÚls €rÚ z _combinations..4s8øèø€ðÙ! ! e¤)˜Q¨q¯z©z«|¸q¿z¹z»|Ó/KˆˆA )ˆ‘qùsƒ.>² >)Úset)r#s`rÚ _combinationsr&3sø€Ü óÙóó ðrz[ \f\t]*z #[^\r\n]*z\\\r?\nz\w+z0[bB]_?[01]+(?:_[01]+)*z(0[xX]_?[\da-fA-F]+(?:_[\da-fA-F]+)*[lL]?z0[oO]?_?[0-7]+(?:_[0-7]+)*[lL]?z[1-9]\d*(?:_\d+)*[lL]?z0[lL]?z[eE][-+]?\d+(?:_\d+)*z\d+(?:_\d+)*\.(?:\d+(?:_\d+)*)?z\.\d+(?:_\d+)*z \d+(?:_\d+)*z\d+(?:_\d+)*[jJ]z[jJ]z[^'\\]*(?:\\.[^'\\]*)*'z[^"\\]*(?:\\.[^"\\]*)*"z%[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''z%[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""z'(?:[uUrRbBfF]|[rR][fFbB]|[fFbBuU][rR])?ú'''ú"""z'[^\n'\\]*(?:\\.[^\n'\\]*)*'z"[^\n"\\]*(?:\\.[^\n"\\]*)*"z\*\*=?z>>=?z<<=?z<>z!=z//=?z->z[+\-*/%&@|^=<>]=?Ú~z[][(){}]z\r?\nz:=z[:;.,`@]z'[^\n'\\]*(?:\\.[^\n'\\]*)*Ú'z"[^\n"\\]*(?:\\.[^\n"\\]*)*Ú"ÚrÚRÚfÚFÚbÚB>ÚUÚuÚURÚUrÚuRÚur)r*r+r'r(écó —eZdZy)Ú TokenErrorN©Ú__name__Ú __module__Ú __qualname__©rrr:r:Šó…rr:có —eZdZy)ÚStopTokenizingNr;r?rrrBrBŒr@rrBc ó`—|\}}|\}}td||||t|t|«fz«y)Nz%d,%d-%d,%d: %s %s)ÚprintÚtok_nameÚrepr) ÚtyperÚxxx_todo_changemeÚxxx_todo_changeme1ÚlineÚsrowÚscolÚerowÚecols rÚ printtokenrOŽs<€Ø$L€Tˆ4Ø%L€Tˆ4Ü Ð Ø ˆtT˜4¤¨$¡´°e³Ð=ñ >õ?rcó<— t||«y#t$rYywxYw)a: The tokenize() function accepts two parameters: one representing the input stream, and one providing an output mechanism for tokenize(). The first parameter, readline, must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. The second parameter, tokeneater, must also be a callable object. It is called once for each token, with five arguments, corresponding to the tuples generated by generate_tokens(). N)Ú tokenize_looprB)ÚreadlineÚ tokeneaters rr r ”s#€ð Üh  Õ+øÜ ò Ù ð ús ‚  šcó.—t|«D]}||ŽŒ y©N)r )rRrSÚ token_infos rrQrQ§s€Ü% hÖ/ˆ ÙJÒñ0rcó$—eZdZd„Zd„Zd„Zd„Zy)Ú Untokenizercó.—g|_d|_d|_y)Nrr)ÚtokensÚprev_rowÚprev_col)Úselfs rÚ__init__zUntokenizer.__init__­s€ØˆŒ ؈Œ ؈ rcón—|\}}||jz }|r|jjd|z«yy)NÚ )r\rZÚappend)r]ÚstartÚrowÚcolÚ col_offsets rÚadd_whitespacezUntokenizer.add_whitespace²s8€Ø‰ˆˆSà˜4Ÿ=™=Ñ(ˆ Ù Ø K‰K× Ñ ˜s ZÑ/Õ 0ð rcóf—|D]’}t|«dk(r|j||«np|\}}}}}|j|«|jj |«|\|_|_|ttfvsŒw|xj dz c_d|_Œ”dj|j«S)Nérrr) ÚlenÚcompatrfrZrar[r\ÚNEWLINEÚNLr)r]ÚiterableÚtÚtok_typerrbÚendrJs rr zUntokenizer.untokenize¹sœ€ÛˆAÜ1‹v˜Š{Ø— ‘ ˜A˜xÔ(ÙØ01Ñ -ˆHe˜U C¨Ø × Ñ  Ô &Ø K‰K× Ñ ˜uÔ %Ø+.Ñ (ˆDŒM˜4œ=ØœG¤R˜=Ò(Ø— ’  Ñ"• Ø !• ððw‰wt—{‘{Ó#Ð#rcóž—d}g}|jj}|\}}|ttfvr|dz }|tt fvrd}|D]†}|dd\}}|ttt tfvr|dz }|tk(r|j|«ŒC|tk(r|j«Œ]|tt fvrd}n|r|r ||d«d}||«Œˆy)NFr`Trhéÿÿÿÿ) rZraÚNAMEÚNUMBERrkrlÚASYNCÚAWAITÚINDENTÚDEDENTÚpop) r]rrmÚ startlineÚindentsÚ toks_appendÚtoknumÚtokvalÚtoks rrjzUntokenizer.compatÇs׀؈ ؈ؗk‘k×(Ñ(ˆ ؉ˆØ ”dœF^Ñ #Ø c‰MˆFØ ”gœr]Ñ "؈IÛˆCØ   !˜W‰NˆFFàœ$¤¬¬uÐ5Ñ5ؘ#‘ àœÒØ—‘˜vÔ&ØØœ6Ò!Ø— ‘ ” ØØœG¤R˜=Ñ(Ø ‘ Ù™wÙ˜G B™KÔ(Ø! Ù ˜Õ ñ#rN)r<r=r>r^rfr rjr?rrrXrX«s„òò 1ò $ó rrXz&^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)s^[ \t\f]*(?:[#\r\n]|$)có¦—|ddj«jdd«}|dk(s|jd«ry|dvs|jd«ry |S) z(Imitates get_normal_name in tokenizer.c.Né rÚ-úutf-8zutf-8-)zlatin-1ú iso-8859-1z iso-latin-1)zlatin-1-z iso-8859-1-z iso-latin-1-r„)ÚlowerÚreplaceÚ startswith)Úorig_encÚencs rÚ_get_normal_namerŠæsX€ð 3Bˆ-× Ñ Ó × 'Ñ '¨¨SÓ 1€CØ ˆg‚~˜Ÿ™¨Ô1ØØ Ð6Ñ6Ø ‡~~ÐAÔBØØ €Orc󇇗dŠd}d}ˆfd„}ˆfd„}|«}|jt«r dŠ|dd}d}|s|gfS||«}|r||gfStj|«s||gfS|«}|s||gfS||«}|r|||gfS|||gfS) a The detect_encoding() function is used to detect the encoding that should be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used (as a string) and a list of any lines (left as bytes) it has read in. It detects the encoding from the presence of a utf-8 bom or an encoding cookie as specified in pep-0263. If both a bom and a cookie are present, but disagree, a SyntaxError will be raised. If the encoding cookie is an invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. FNrƒcóF•— ‰«S#t$r t«cYSwxYwrU)Ú StopIterationÚbytes)rRs€rÚ read_or_stopz%detect_encoding..read_or_stops&ø€ð Ù“:Ð øÜò Ü“7ŠNð ús ƒ Š Ÿ có>•— |jd«}tj|«}|syt |j d««} t |«}‰r|jdk7r td«‚|dz }|S#t$rYywxYw#t$rtd|z«‚wxYw)NÚasciirzunknown encoding: rƒzencoding problem: utf-8z-sig) ÚdecodeÚUnicodeDecodeErrorÚ cookie_reÚmatchrŠrrÚ LookupErrorÚ SyntaxErrorÚname)rJÚ line_stringr•ÚencodingÚcodecÚ bom_founds €rÚ find_cookiez$detect_encoding..find_cookie s®ø€ð ØŸ+™+ gÓ.ˆKô—‘  Ó,ˆÙØÜ# E§K¡K°£NÓ3ˆð ?ܘ8Ó$ˆEñ Øz‰z˜WÒ$ä!Ð";Ó<Ð<Ø ˜Ñ ˆH؈øô#"ò Ùð ûôò ?äÐ2°XÑ=Ó>Ð >ð ?úsƒA5Á BÁ5 BÂBÂBTéz utf-8-sig)r‡rÚblank_rer•)rRršÚdefaultrrÚfirstÚsecondrœs` @rÚdetect_encodingr£ñsÌù€ð$€IØ€HØ€Gôô ñ, ‹N€EØ ×ÑœÔ!؈ Øab ˆØˆÙ ؘˆ{Ðá˜5Ó!€HÙØ˜%˜Ð Ð Ü >‰>˜%Ô Ø˜˜ÐÐá ‹^€F٠ؘ˜ÐÐá˜6Ó"€HÙØ˜% ˜Ð(Ð(à U˜FOÐ #Ð#rcó8—t«}|j|«S)a«Transform tokens back into Python source code. Each element returned by the iterable must be a token sequence with at least two elements, a token number and token value. If only two tokens are passed, the resulting output is poor. Round-trip invariant for full input: Untokenized source will match input source exactly Round-trip invariant for limited input: # Output text will tokenize the back to the input t1 = [tok[:2] for tok in generate_tokens(f.readline)] newcode = untokenize(t1) readline = iter(newcode.splitlines(1)).next t2 = [tok[:2] for tokin generate_tokens(readline)] assert t1 == t2 )rXr )rmÚuts rr r :s€ô$ ‹€BØ =‰=˜Ó "Ð"rc#óv K—dx}x}}d\}}d}dg}d}d} d} d} |«} |dz}dt| «}} |r’| s td«‚j| «}|r4|j d«x} }t || d|z||f|| zf–—d\}}d}nØ|r0| ddd k7r(| d dd k7r t || z|t| «f|f–—d}d}Œ¤|| z}|| z}Œ¯|dk(rƒ|s€| snd}| |krA| | d k(r|dz}n(| | d k(r|tzdztz}n | | dk(rd}nn | dz} | |krŒA| |k(rnÌ|r|–—d}| | dvr“| | dk(r]| | djd«}| t|«z}t||| f|| t|«zf| f–—t| |d||f|t| «f| f–—n,ttf| | dk(| | d|| f|t| «f| f–—Œ­||dkDr%|j|«t| d| |df|| f| f–—||dkrC||vrtdd|| | f«‚|dd}| r| |dk\rd} d} d} td|| f|| f| f–—||dkrŒC| r#| r!| |dk\rd} d} d} n| std|df«‚d}| |kr…tj| | «}|rI|j!d«\}}||f||f|} }}| ||| |}}|t"j$vs |dk(r|dk7rt&|||| f–—n|dvr)t(}|dkDrt}n| rd} |r|–—d}||||| f–—nå|dk(r|r|–—d}t|||| f–—nÉ|t*vrYt,|}|j| | «}|r/|j d«} | || }|r|–—d}t |||| f| f–—nu||f}| |d}| }no|t.vs|ddt.vs |ddt.vrR|ddk(r4||f}t,|xst,|dxs t,|d}| |dd}}| }n|r|–—d}t |||| f–—nø|j1«r„|dvr| r|dk(rt2nt4|||| f–—Œ¼t6|||| f}|dk(r|s|}ŒÒ|dvr=|r;|dt6k(r/|ddk(r'|dk(rd} |d} t2|d|d|d|df–—d}|r|–—d}|–—nd|d k(r|r|–—d}t|||| f| f–—d}nE|d!vr|dz}n |d"vr|dz }|r|–—d}t8|||| f–—nt | | || f|| dzf| f–—| dz} | |krŒ…ŒÖ|r|–—d}|ddD]}td|df|dfdf–—Œt:d|df|dfdf–—y#t$rd} YŒwxYw­w)#a4 The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline can be a callable function terminating with StopIteration: readline = open(myfile).next # Example of alternate readline The generator produces 5-tuples with these members: the token type; the token string; a 2-tuple (srow, scol) of ints specifying the row and column where the token begins in the source; a 2-tuple (erow, ecol) of ints specifying the row and column where the token ends in the source; and the line on which the token was found. The line passed is the physical line. r)rrNFrrzEOF in multi-line stringéþÿÿÿz\ éýÿÿÿz\ r`Ú Ú z# Ú#z rrz3unindent does not match any outer indentation levelz zEOF in multi-line statementÚ.TrhržÚ )ÚasyncÚawaitr®)ÚdefÚforr°éÚ\z([{z)]})rrir:r•rpÚSTRINGÚ ERRORTOKENÚtabsizeÚrstripÚCOMMENTrlrarwÚIndentationErrorrxÚ pseudoprogÚspanÚstringÚdigitsrtrkÚ triple_quotedÚendprogsÚ single_quotedÚ isidentifierrurvrsÚOPÚ ENDMARKER)rRÚlnumÚparenlevÚ continuedÚcontstrÚneedcontÚcontliner{ÚstashedÚ async_defÚasync_def_indentÚ async_def_nlrJÚposÚmaxÚstrstartÚendprogÚendmatchrpÚcolumnÚ comment_tokenÚnl_posÚ pseudomatchrbÚsposÚeposrÚinitialÚnewlinerÚindents rr r Osyèø€ð #$Ð#€DÐ#ˆ8iØÑ€GˆXØ€H؈c€Gð€GØ€IØÐØ€Là ð Ù“:ˆDða‰xˆØ”c˜$“iˆSˆá ÙÜ Ð!;¸XÓFÐFØ—}‘} TÓ*ˆHÙØ$ŸL™L¨›OÐ+cܘw¨¨d¨s¨Ñ3Ø $¨ ¨h¸©oð?ò?à$)Ñ!˜Ø’Ù˜d 2 3˜i¨6Ò1°d¸2¸3°iÀ8Ò6KÜ! 7¨T¡>Ø# d¬C°«IÐ%6¸ðBòBàØØà! D™.Ø# d™?Øà ˜‹]¢9ٙ؈Fؘ’)ؘ‘9 Ò#¨f°q©j¡Vؘ#‘Y $Ò&°&¼'±/ÀAÑ2EÄwÑ1N©Ø˜#‘Y $Ò&°©ØØ˜A‘g𠘓)ð cŠz™5áØ’ ØàC‰y˜GÑ#ؘ‘9 Ò#Ø$(¨¨ J×$5Ñ$5°fÓ$=MØ ¤3 }Ó#5Ñ5FÜ" MØ  #˜;¨¨s´S¸Ó5GÑ/GÐ(HÈ$ðPòPä˜t F G˜}Ø  &˜>¨D´#°d³)Ð+<¸dðDóDô¤˜=¨¨c©°cÑ)9Ñ:¸DÀÀ¸JØ  #˜;¨¬s°4«yÐ(9¸4ðAòAáà˜ ™ Ò#Ø—‘˜vÔ&ܘt D S˜z¨D°!¨9°t¸S°kÀ4ÐHÒHؘ7 2™;Ò&Ø Ñ(Ü*ØMØ% t¨S°$Ð7ó9ð9ð" # 2˜,áÐ!1°W¸R±[Ò!@Ø %IØ#(LØ'(Ð$ä˜r D¨# ;°°s° ¸TÐBÒBð˜7 2™;Ó&ñ™\Ð.>À'È"Á+Ò.MØ! Ø$ Ø#$Ñ ñÜ Ð!>ÀÀqÀ ÓJÐJ؈IàC‹iÜ$×*Ñ*¨4°Ó5ˆKÚØ(×-Ñ-¨aÓ0‘ sØ#'¨ -°$¸°¸c˜CdØ!% e¨C °$°u±+wàœfŸm™mÑ+ؘs’N u°¢|Ü! 5¨$°°dÐ;Ô;Ø Ñ&Ü%GØ !’|Ü"$™Ù"Ø'+˜ ÙØ%š Ø"&˜Ø" E¨4°°tÐ<Ô<à ’^áØ%š Ø"&˜Ü" E¨4°°tÐ<Ô<ØœmÑ+Ü& u™oGØ&Ÿ}™}¨T°3Ó7HÙØ&Ÿl™l¨1›o˜Ø $ U¨3 ˜Ù"Ø")šMØ&*˜GÜ% u¨d°T¸3°KÀÐFÔFà$(¨% =˜Ø"& u v ,˜Ø#'˜Ùؤ Ñ-ؘ"˜1I¤Ñ.ؘ"˜1I¤Ñ.ؘR‘y DÒ(Ø$(¨% =˜Ü#+¨GÑ#4ò$6¼ÀÀqÁÑ8Jò$6Ü#+¨E°!©HÑ#5ð à,0°°¨L¸! ˜Ø#'˜Ùá"Ø")šMØ&*˜GÜ% u¨d°D¸$Ð?Ó?Ø×)Ñ)Ô+ØÐ 2Ñ2Ù$Ø,1°WÒ,<¥5Ä%Ø#(¨$°°dð#<ò<á$ä ¨¨d°DÐ9CØ Ò'±Ø"%˜Ù à Ñ.Ù#Ø$+¨A¡J´$Ò$6Ø$+¨A¡J°'Ò$9à$¨š~Ø,0  Ø3:¸2±;Ð 0ä#(¨'°!©*Ø#*¨1¡:¨w°q©zØ#*¨1¡:ð#/ò/ð'+˜GáØ%š Ø"&˜à“IØ ’_áØ%š Ø"&˜Ü˜u d¨T°3¨K¸Ð>Ò>Ø !‘Ià %Ñ'°H¸q±L©Ø  EÑ)°hÀ±l¨8ÙØ%š Ø"&˜Ü˜u d¨D°$Ð7Ó7ä! 4¨¡9Ø  #˜;¨¨s°1©u¨ °tð=ò=à˜A‘gðSCŒiñi ñ~ØŠ ؈à˜!˜"“+ˆÜr˜D !˜9 t¨Q i°Ð4Ó4ðä b˜4 ˜) d¨A Y°Ð 3Ó3øôEò Ø‹Dð üs<‚T9T'¤C:T9ÄD T9ÉJ.T9Ó07T9Ô' T6Ô2T9Ô5T6Ô6T9Ú__main__)SÚ__doc__Ú __author__Ú __credits__r¼ÚreÚcodecsrrÚlib2to3.pgen2.tokenrrÚdirÚ__all__rŽÚ NameErrorÚstrrrrr&Ú WhitespaceÚCommentÚIgnoreÚNameÚ BinnumberÚ HexnumberÚ OctnumberÚ DecnumberÚ IntnumberÚExponentÚ PointfloatÚExpfloatÚ FloatnumberÚ ImagnumberÚNumberÚSingleÚDoubleÚSingle3ÚDouble3Ú _litprefixÚTripleÚStringÚOperatorÚBracketÚSpecialÚFunnyÚ PlainTokenÚTokenÚContStrÚ PseudoExtrasÚ PseudoTokenÚmapÚcompileÚ tokenprogrºÚ single3progÚ double3progÚ _strprefixesr¿r¾rÀr¶Ú Exceptionr:rBrOr rQrXÚASCIIr”rŸrŠr£r r r<ÚsysriÚargvÚopenrRÚstdin)r!Úprefixs00rÚrsŸðñ#ð0*€ àFð ÷ß#Ü!åÙ˜%”jÓ 0‘j A a¡D¨C£KŠ1jÑ 0ò4,ñ ,€à ðÙ ò :Ú/Ú1òð € Ø €Ø ‘c˜* zÑ1Ó2Ñ 2±U¸7³^Ñ C€Ø €à &€ Ø 7€ Ø .€ Ù Ð+¨XÓ 6€ Ù )˜Y¨ °9Ó =€ Ø #€Ù Ð5Ð7HÓ IÉEÐRZËOÑ [€ Ø ˜XÑ %€ÙJ Ó)€ Ù Ð&¨ °gÑ(=Ó >€ Ù ˆz˜;¨ Ó 2€ð $€à #€à 2€à 2€Ø 7€ Ù ˆz˜EÑ! :°Ñ#5Ó 6€á ˆzÐ;Ñ;ØÐ;Ñ;ó =€ñ ˜G W¨e°Uؘ%Ø%Øó €ð €Ù ˜% Ó -€Ù ˆh˜ Ó)€á 6˜5 &¨$Ó /€ ØÑ€ñ  Ð;Ñ;Ùc˜:Ó&ñ'àÐ;Ñ;Ùc˜:Ó&ñ'ó (€ñZ ¨&Ó1€ Ø™5 ¨v°u¸gÀtÓLÑL€ á25؇JJ˜  W¨gÐ6ó38Ñ/€ ˆ:{ Kñ#s˜C Ó%Ù#s˜C Ó%ñ&â&ñ'ð ð —‘˜FÓ#¨*¨"¯*©*°VÓ*<Ø {ñ 9á9EÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ:FÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ+7Ó7©, ˆvt‰|¨,Ñ7ð  9€ð ˆE€NÙ".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0á".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0ðð  ˆ#€JÙ ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.á ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.ðð €ä!Ô!ä%YÔ%ò?ð #-ó ò& ÷6 ñ6 ðp ˆBJ‰JÐ@À"Ç(Á(Ó K€ Ø ˆ2:‰:Ð0°"·(±(Ó ;€ò òG$òR#ò*`4ðD ˆzÒÛÙ ˆ38‰8ƒ}qÒ™(¡4¨¯©°© Ó#4×#=Ñ#=Õ>Ù 3—9‘9×%Ñ%Õ &ðùòY 1øð òð ƒEðüò\GùÚFùÚ7ùò0ùÚ/ùò.ùÚ-sF¬ L$ºL$ÁL)Ç L7Ç L<Ç) MÇ> MÈ M È* MÈ> MÌ)L4Ì3L4lib2to3/pgen2/__pycache__/conv.cpython-312.pyc000064400000026757152462633570014753 0ustar00Ë T—çhª%ãóJ—dZddlZddlmZmZGd„dej «Zy)aýConvert graminit.[ch] spit out by pgen to Python code. Pgen is the Python parser generator. It is useful to quickly create a parser from a grammar file in Python's grammar notation. But I don't want my parsers to be written in C (yet), so I'm translating the parsing tables to Python data structures and writing a Python parse engine. Note that the token numbers are constants determined by the standard Python tokenizer. The standard token module defines these numbers and their names (the names are not used much). The token numbers are hardcoded into the Python tokenizer and into pgen. A Python implementation of the Python tokenizer is also available, in the standard tokenize module. On the other hand, symbol numbers (representing the grammar's non-terminals) are assigned by pgen based on the actual grammar input. Note: this module is pretty much obsolete; the pgen module generates equivalent grammar tables directly from the Grammar.txt input file without having to invoke the Python pgen C program. éN)ÚgrammarÚtokencó(—eZdZdZd„Zd„Zd„Zd„Zy)Ú Convertera2Grammar subclass that reads classic pgen output files. The run() method reads the tables as produced by the pgen parser generator, typically contained in two C files, graminit.h and graminit.c. The other methods are for internal use only. See the base class for more documentation. cóh—|j|«|j|«|j«y)z_[] = { {, }, ... }; - followed by a state array, of the form: static state states_[] = { {, arcs__}, ... }; rrNFrrz#include "pgenheaders.h" z#include "grammar.h" z static arc z)static arc arcs_(\d+)_(\d+)\[(\d+)\] = {$z\s+{(\d+), (\d+)},$z}; z'static state states_(\d+)\[(\d+)\] = {$z\s+{(\d+), arcs_(\d+)_(\d+)},$zstatic dfa dfas\[(\d+)\] = {$z0\s+{(\d+), "(\w+)", (\d+), (\d+), states_(\d+),$ééééz\s+("(?:\\\d\d\d)*")},$éz!static label labels\[(\d+)\] = {$z\s+{(\d+), (0|"\w+")},$Ú0zgrammar _PyParser_Grammar = { z \s+(\d+),$z dfas, z\s+{(\d+), labels},$z \s+(\d+)$)rrrÚnextÚ startswithrrÚlistÚmaprrÚrangeÚappendÚlenÚstatesÚgrouprrÚevalÚ enumerateÚordÚdfasÚlabelsÚstartÚ StopIteration)!r r r!r"r#r$Úallarcsr6r%ÚnÚmÚkÚarcsÚ_ÚiÚjÚsÚtÚstater;Úndfasr&r'ÚxÚyÚzÚfirstÚ rawbitsetÚcÚbyter<Únlabelsr=s! rr zConverter.parse_graminit_cTsç€ð8 ÜX“ˆAð ˆð˜a‘x¤ a£ˆØÐ3Ò3ÐC°f¸d°^ÓCÐ3ؘa‘x¤ a£ˆØÐ/Ò/Ð?°&¸$°Ó?Ð/ð˜a‘x¤ a£ˆØˆØˆØo‰o˜mÕ,Ø—/‘/ -Õ0Ü—X‘XÐJØ"ó$áÐ)˜F D˜>Ó)rÜœs¤3¨¯ © « Ó4Ó5‘1aØÜ˜qžAØ#)¨!¡8¬T°!«W˜DFÜŸ™Ð"8¸$Ó?BÙÐ- ¨˜~Ó-˜2ܤ¤C¨¯©«Ó 5Ó6‘DAqØ—K‘K  A Õ'ð "ð & a™x¬¨a«˜Ø˜v’~Ð5¨° ~Ó5~Ø"&˜˜A˜‘Ø% a™x¬¨a«˜ð—/‘/ -Ö0ô —‘ÐDÀdÓKˆBÙÐ %˜ ~Ó %2ÜœœC §¡£Ó-Ó.‰DˆAˆqØœ˜F› Ò#Ð 3 f¨d ^Ó 3Ð#؈Eܘ1–XØ% a™x¬¨a«˜Ü—X‘XÐ?ÀÓFÙÐ)˜F D˜>Ó)rÜœs¤3¨¯ © « Ó4Ó5‘1aؘq !˜t‘}ØœC ›I’~Ð5¨° ~Ó5~Ø— ‘ ˜TÕ"ðð M‰M˜%Ô Ø! !™8¤T¨!£WDˆFؘ6’>Ð 1 F¨D >Ó 1>Ø! !™8¤T¨!£WDˆFðCo‰o˜mÖ,ðDˆŒ ðˆÜ X‰XÐ6¸Ó =ˆÙÐ!F˜D>Ó!ˆrÜB—H‘H˜Q“KÓ ˆÜu—ˆAØ! !™8¤T¨!£WDˆFÜ—‘ÐMØó ˆBáÐ %˜ ~Ó %2Ø—X‘X˜a“[ˆFÜ"¤3¤s¨B¯H©H°Q¸¸1¸aÓ,@Ó#AÓB‰OˆFAq˜!Ø×%Ñ% fÑ-°Ò7Ð G¸&À$¸Ó GÐ7Ø×%Ñ% fÑ-°Ò7Ð G¸&À$¸Ó GÐ7ؘ’6Ð )˜F D˜>Ó )6ؘ1‘IˆEØœ˜E› ’?Ð 2 V¨T NÓ 2?Ø! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBÙÐ %˜ ~Ó %2؈EܘRŸX™X a›[Ó)ˆIÜ! )Ö,‘1ܘ1“vܘqžAؘq !™t“}Ø)*˜˜a ™c A™gšñ"ð-ð " 5˜>ˆD‹Lð-ð.˜a‘x¤ a£ˆØvŠ~Ð- ¨˜~Ó-ˆ~؈Œ ðˆØ˜a‘x¤ a£ˆÜ X‰XÐ:¸DÓ AˆÙÐ!F˜D>Ó!ˆrÜb—h‘h˜q“kÓ"ˆÜw–ˆAØ! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBÙÐ %˜ ~Ó %2Ø—9‘9“;‰DˆAˆqÜA“ˆAØCŠxؑ䘓GØ M‰M˜1˜a˜&Õ !ð ð˜a‘x¤ a£ˆØvŠ~Ð- ¨˜~Ó-ˆ~؈Œ ð˜a‘x¤ a£ˆØÐ8Ò8ÐH¸6À4¸.ÓHÐ8ؘa‘x¤ a£ˆÜ X‰Xm TÓ *ˆÙÐ!F˜D>Ó!ˆrÜB—H‘H˜Q“KÓ ˆØœ˜DŸI™I›Ò&Ð&Ð&ؘa‘x¤ a£ˆØ{Ò"Ð2 V¨T NÓ2Ð"ؘa‘x¤ a£ˆÜ X‰XÐ-¨tÓ 4ˆÙÐ!F˜D>Ó!ˆrÜb—h‘h˜q“kÓ"ˆØœ#˜dŸk™kÓ*Ò*Ð:¨V°T¨NÓ:Ð*ؘa‘x¤ a£ˆÜ X‰Xl DÓ )ˆÙÐ!F˜D>Ó!ˆrÜB—H‘H˜Q“KÓ ˆØ˜×*Ñ*Ñ*Ð:¨V°T¨NÓ:Ð*؈Œ ؘa‘x¤ a£ˆØvŠ~Ð- ¨˜~Ó-ˆ~ð %Ø! !™8¤T¨!£WDˆFð %v˜tnÓ $1øôKò Ý ª±3Ð7Ô 8Üûð ûôDò Ù ð ús)‚ ]0Ý^Ý0 ^Ý9^Þ^Þ ^#Þ"^#cóΗi|_i|_t|j«D]?\}\}}|tj k(r|||j|<Œ.|Œ1||j|<ŒAy)z1Create additional useful structures. (Internal).N)ÚkeywordsÚtokensr9r<rÚNAME)r ÚilabelÚtypeÚvalues rr zConverter.finish_offùs^€àˆŒ ؈Œ Ü%.¨t¯{©{Ö%;Ñ !ˆF‘MT˜5Ø”u—z‘zÒ! eÐ&7Ø'-— ‘ ˜eÒ$Ø‘Ø$*— ‘ ˜DÒ!ñ &c%óJ+rr)r]rÚpgen2rrÚGrammarrr^rrÚras&ðñó4 ÷!ô]+—‘õ]+rlib2to3/pgen2/__pycache__/__init__.cpython-312.opt-2.pyc000064400000000225152462633570016463 0ustar00Ë T—çhãó—y)N©róú//usr/lib64/python3.12/lib2to3/pgen2/__init__.pyÚrs ððrlib2to3/pgen2/__pycache__/driver.cpython-312.opt-1.pyc000064400000017534152462633570016231 0ustar00Ë T—çhQãóÚ—dZdZddgZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z Gd„de«Zd „Z dd „Zd „Zd „Zd „Zedk(rej,ee« ««yy)zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum ÚDriverÚ load_grammaréNé)ÚgrammarÚparseÚtokenÚtokenizeÚpgencó<—eZdZdd„Zd d„Zd d„Zd d„Zd d„Zd d„Zy) rNcóZ—||_|€tj«}||_||_y)N)rÚloggingÚ getLoggerÚloggerÚconvert)Úselfrrrs ú-/usr/lib64/python3.12/lib2to3/pgen2/driver.pyÚ__init__zDriver.__init__s*€ØˆŒ Ø ˆ>Ü×&Ñ&Ó(ˆF؈Œ ؈ ócóB—tj|j|j«}|j «d}d}dx}x}x}x} } d} |D]6} | \}}}} } |||fk7r(|\} }|| kr| d| |z zz } | }d}||kr | | ||z } |}|t j t jfvr#| |z } | \}}|jd«r|dz }d}Œ€|tjk(rtj|}|r/|jjdtj||| «|j||| |f«r*|r|jjd«|j"Sd} | \}}|jd«sŒ0|dz }d}Œ9tj d||| |f«‚) z4Parse a series of tokens and return the syntax tree.rrNÚÚ z%s %r (prefix=%r)zStop.zincomplete input)rÚParserrrÚsetupr ÚCOMMENTÚNLÚendswithrÚOPÚopmaprÚdebugÚtok_nameÚaddtokenÚ ParseErrorÚrootnode)rÚtokensrÚpÚlinenoÚcolumnÚtypeÚvalueÚstartÚendÚ line_textÚprefixÚ quintupleÚs_linenoÚs_columns rÚ parse_tokenszDriver.parse_tokens&sÔ€ô L‰L˜Ÿ™ t§|¡|Ó 4ˆØ ‰Œ ؈؈Ø15Ð5ˆÐ5ˆuÐ5uÐ5˜s Y؈܈IØ1:Ñ .ˆD%˜  Yؘ Ð(Ò(à%*Ñ"˜(ؘHÒ$ؘd h°Ñ&7Ñ8Ñ8FØ%FØFؘHÒ$ؘi¨¨xÐ8Ñ8FØ%FØœ×(Ñ(¬(¯+©+Ð6Ñ6ؘ%‘Ø!$‘˜Ø—>‘> $Ô'ؘa‘KFØFØØ”u—x‘xÒÜ—}‘} UÑ+ÙØ— ‘ ×!Ñ!Ð"5Ü"'§.¡.°Ñ"6¸¸vôGàz‰z˜$ ¨° Ô7ÙØ—K‘K×%Ñ% gÔ.Øðz‰zÐðˆFØ ‰NˆFFØ~‰~˜dÖ#ؘ!‘ Ø’ðA ôF×"Ñ"Ð#5Ø#'¨°¸°óAð Arcód—tj|j«}|j||«S©z*Parse a stream and return the syntax tree.)r Úgenerate_tokensÚreadliner1)rÚstreamrr$s rÚparse_stream_rawzDriver.parse_stream_rawVs)€ä×)Ñ)¨&¯/©/Ó:ˆØ× Ñ  ¨Ó/Ð/rcó&—|j||«Sr3)r7)rr6rs rÚ parse_streamzDriver.parse_stream[s€à×$Ñ$ V¨UÓ3Ð3rcó‚—tj|d|¬«5}|j||«cddd«S#1swYyxYw)z(Parse a file and return the syntax tree.Úr)ÚencodingN)ÚioÚopenr9)rÚfilenamer<rr6s rÚ parse_filezDriver.parse_file_s0€ä W‰WX˜s¨XÕ 6¸&Ø×$Ñ$ V¨UÓ3÷7× 6Ò 6ús™5µ>cóŠ—tjtj|«j«}|j ||«S)z*Parse a string and return the syntax tree.)r r4r=ÚStringIOr5r1)rÚtextrr$s rÚ parse_stringzDriver.parse_stringds4€ä×)Ñ)¬"¯+©+°dÓ*;×*DÑ*DÓEˆØ× Ñ  ¨Ó/Ð/r)NN)F)NF) Ú__name__Ú __module__Ú __qualname__rr1r7r9r@rD©rrrrs!„óó.ó`0ó 4ó4ô 0rcóÀ—tjj|«\}}|dk(rd}||zdjt t t j««zdzS)Nz.txtrÚ.z.pickle)ÚosÚpathÚsplitextÚjoinÚmapÚstrÚsysÚ version_info)ÚgtÚheadÚtails rÚ_generate_pickle_namerVjsP€Ü—‘×!Ñ! "Ó%J€Dˆ$Ø ˆv‚~ØˆØ $‰;˜Ÿ™¤#¤c¬3×+;Ñ+;Ó"<Ó=Ñ =À Ñ IÐIrcóª—|€tj«}|€ t|«n|}|s t||«sQ|j d|«t j |«}|r&|j d|« |j|«|S|Stj«}|j|«|S#t$r}|j d|«Yd}~|Sd}~wwxYw)z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s) r rrVÚ_newerÚinfor Úgenerate_grammarÚdumpÚOSErrorrÚGrammarÚload)rSÚgpÚsaveÚforcerÚgÚes rrrqsÈ€ð€~Ü×"Ñ"Ó$ˆØ&( jÔ ˜rÔ "°b€BÙ ”F˜2˜r”NØ ‰ Ð7¸Ô<Ü × !Ñ ! "Ó %ˆÙ Ø K‰KÐ6¸Ô ;ð 5Ø—‘r” ð €Hˆ1€Hô O‰OÓ ˆØ ‰ˆrŒ Ø €Høô ò 5Ø— ‘ Ð0°!×4Ð4ð €Hûð  5úsÁ0B,Â, CÂ5C à Ccó—tjj|«sytjj|«sytjj|«tjj|«k\S)z0Inquire whether file a was written since file b.FT)rKrLÚexistsÚgetmtime)ÚaÚbs rrXrX†sQ€ä 7‰7>‰>˜!Ô ØÜ 7‰7>‰>˜!Ô ØÜ 7‰7× Ñ ˜AÓ ¤"§'¡'×"2Ñ"2°1Ó"5Ñ 5Ð5rcó —tjj|«r t|«St tjj |««}t j||«}tj«}|j|«|S)aÙNormally, loads a pickled grammar by doing pkgutil.get_data(package, pickled_grammar) where *pickled_grammar* is computed from *grammar_source* by adding the Python version and using a ``.pickle`` extension. However, if *grammar_source* is an extant file, load_grammar(grammar_source) is called instead. This facilitates using a packaged grammar file when needed but preserves load_grammar's automatic regeneration behavior when possible. ) rKrLÚisfilerrVÚbasenameÚpkgutilÚget_datarr]Úloads)ÚpackageÚgrammar_sourceÚ pickled_nameÚdatarbs rÚload_packaged_grammarrssf€ô ‡ww‡~~nÔ%ܘNÓ+Ð+Ü(¬¯©×)9Ñ)9¸.Ó)IÓJ€LÜ × Ñ ˜G \Ó 2€D܉ӀA؇GGˆD„MØ €HrcóÀ—|stjdd}tjtjtj d¬«|D]}t |dd¬«Œy)zMain program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. rNz %(message)s)Úlevelr6ÚformatT)r`ra)rQÚargvr Ú basicConfigÚINFOÚstdoutr)ÚargsrSs rÚmainr|£sL€ñ Üx‰x˜˜ˆ|ˆÜ ×ÑœgŸl™l´3·:±:Ø,õ.ãˆÜR˜d¨$Ö/ðà rÚ__main__)z Grammar.txtNTFN)Ú__doc__Ú __author__Ú__all__r=rKr rlrQrrrrr r ÚobjectrrVrrXrsr|rEÚexitÚintrHrrÚr„sŠðñð 3€ à ^Ð $€ó Û ÛÛÛ ÷4Õ3ôJ0ˆVôJ0òZJð'+Ø04ó ò*6ò ò( ð ˆzÒØ €C‡HH‰S‘T“V‹_Õðrlib2to3/pgen2/__pycache__/parse.cpython-312.opt-2.pyc000064400000012630152462633570016041 0ustar00Ë T—çhÛãó>— ddlmZGd„de«ZGd„de«Zy)é)Útokencó—eZdZ d„Zd„Zy)Ú ParseErrorc ó~—tj||›d|›d|›d|›«||_||_||_||_y)Nz: type=z, value=z , context=)Ú ExceptionÚ__init__ÚmsgÚtypeÚvalueÚcontext)Úselfr r r r s ú,/usr/lib64/python3.12/lib2to3/pgen2/parse.pyrzParseError.__init__s<€Ü×ј4Ú¢¢u©gð"7ô 8àˆŒØˆŒ ؈Œ ؈ ócót—t|«|j|j|j|jffS©N)r r r r )r s rÚ __reduce__zParseError.__reduce__s*€ÜD‹z˜DŸH™H d§i¡i°·±¸T¿\¹\ÐJÐJÐJrN)Ú__name__Ú __module__Ú __qualname__rr©rrrrs„Ø2òóKrrcó<—eZdZ d d„Zd d„Zd„Zd„Zd„Zd„Zd„Z y) ÚParserNcó,— ||_|xsd„|_y)Ncó—|Srr)ÚgrammarÚnodes rÚz!Parser.__init__..Zs€¹r)rÚconvert)r rrs rrzParser.__init__<s€ð ð8ˆŒ ØÒ>Ñ#=ˆ rcó¶— |€|jj}|ddgf}|jj|d|f}|g|_d|_t «|_y)Né)rÚstartÚdfasÚstackÚrootnodeÚsetÚ used_names)r r!ÚnewnodeÚ stackentrys rÚsetupz Parser.setup\sa€ð ð ˆ=Ø—L‘L×&Ñ&ˆEð˜$  bÐ)ˆØ—l‘l×'Ñ'¨Ñ.°°7Ð;ˆ Ø \ˆŒ ؈Œ Ü›%ˆrcó°— |j|||«} |jd\}}}|\}} ||} | D]à\} } |jj| \} }|| k(re|j ||| |«| }||d|fgk(rB|j «|jsy|jd\}}}|\}} ||d|fgk(rŒBy| dk\sŒ’|jj | }|\}}||vsŒµ|j| |jj | | |«n?d|f| vr*|j «|jstd|||«‚td|||«‚ŒB)NTéÿÿÿÿr Féztoo much inputz bad input) Úclassifyr#rÚlabelsÚshiftÚpopr"Úpushr)r r r r ÚilabelÚdfaÚstaterÚstatesÚfirstÚarcsÚiÚnewstateÚtÚvÚitsdfaÚ itsstatesÚitsfirsts rÚaddtokenzParser.addtokents€€ØJà—‘˜t U¨GÓ4ˆàØ#Ÿz™z¨"™~Ñ ˆC˜Ø‰MˆFEؘ%‘=ˆDã#‘ 8Ø—|‘|×*Ñ*¨1Ñ-‘1ؘQ’;ð—J‘J˜t U¨H°gÔ>à$EØ  ™-¨Q°¨J¨<Ò7ØŸ™œ Ø#Ÿzšzá#'Ø+/¯:©:°b©>Ñ(˜˜U DØ(+™ ˜ ð ! ™-¨Q°¨J¨<Ó7ñ!ؘ#“Xà!Ÿ\™\×.Ñ.¨qÑ1FØ*0Ñ'I˜xØ Ò)àŸ ™  ! T§\¡\×%6Ñ%6°qÑ%9¸8ÀWÔMÙð3 $ð6u: Ñ%à—H‘H”JØŸ:š:ä(Ð)9Ø)-¨u°gó?ð?ô% [°$¸¸wÓGÐGñSrcó — |tjk(rD|jj|«|jj j |«}||S|jjj |«}|€td|||«‚|S)Nz bad token) rÚNAMEr&ÚaddrÚkeywordsÚgetÚtokensr)r r r r r2s rr-zParser.classify¤s}€Ø4Ø ”5—:‘:Ò à O‰O× Ñ  Ô &à—\‘\×*Ñ*×.Ñ.¨uÓ5ˆFØÐ!Ø Ø—‘×$Ñ$×(Ñ(¨Ó.ˆØ ˆ>ܘ[¨$°°wÓ?Ð ?؈ rcóÀ— |jd\}}}|||df}|j|j|«}||dj|«|||f|jd<y©Nr+)r#rrÚappend) r r r r9r r3r4rr's rr/z Parser.shift²se€Ø(ØŸ:™: b™>шˆUDؘ ¨Ð.ˆØ—,‘,˜tŸ|™|¨WÓ5ˆØ Ð Ø ‰HO‰O˜GÔ $ؘx¨Ð.ˆ ‰ 2Šrcó˜— |jd\}}}|d|gf}|||f|jd<|jj|d|f«y)Nr+r )r#rH) r r Únewdfar9r r3r4rr's rr1z Parser.push»sT€Ø-ØŸ:™: b™>шˆUDؘ˜w¨Ð+ˆØ˜x¨Ð.ˆ ‰ 2‰Ø ‰ ×ј6 1 gÐ.Õ/rcó,— |jj«\}}}|j|j|«}|W|jr(|jd\}}}|dj |«y||_|j |j _yyrG)r#r0rrrHr$r&)r ÚpopdfaÚpopstateÚpopnoder'r3r4rs rr0z Parser.popÂs}€Ø,Ø$(§J¡J§N¡NÓ$4Ñ!ˆ˜'Ø—,‘,˜tŸ|™|¨WÓ5ˆØ Ð ØzŠzØ#'§:¡:¨b¡>Ñ U˜DØR‘—‘ Õ(à '” Ø+/¯?©?— ‘ Õ(ð rr) rrrrr)r?r-r/r1r0rrrrrs-„ðó:?ó@ ò0.Hò` ò/ò0ó ;rrN)ÚrrrÚobjectrrrrÚrQs+ððõô Kô Kôn;ˆVõn;rlib2to3/pgen2/__pycache__/driver.cpython-312.pyc000064400000017642152462633570015272 0ustar00Ë T—çhQãóÚ—dZdZddgZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z Gd„de«Zd „Z dd „Zd „Zd „Zd „Zedk(rej,ee« ««yy)zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum ÚDriverÚ load_grammaréNé)ÚgrammarÚparseÚtokenÚtokenizeÚpgencó<—eZdZdd„Zd d„Zd d„Zd d„Zd d„Zd d„Zy) rNcóZ—||_|€tj«}||_||_y)N)rÚloggingÚ getLoggerÚloggerÚconvert)Úselfrrrs ú-/usr/lib64/python3.12/lib2to3/pgen2/driver.pyÚ__init__zDriver.__init__s*€ØˆŒ Ø ˆ>Ü×&Ñ&Ó(ˆF؈Œ ؈ ócóf—tj|j|j«}|j «d}d}dx}x}x}x} } d} |D]H} | \}}}} } |||fk7r:||f|ks J||f|f«‚|\} }|| kr| d| |z zz } | }d}||kr | | ||z } |}|t j t jfvr#| |z } | \}}|jd«r|dz }d}Œ’|tjk(rtj|}|r/|jjdtj||| «|j||| |f«r*|r|jjd«|j"Sd} | \}}|jd«sŒB|dz }d}ŒKtj d||| |f«‚) z4Parse a series of tokens and return the syntax tree.rrNÚÚ z%s %r (prefix=%r)zStop.zincomplete input)rÚParserrrÚsetupr ÚCOMMENTÚNLÚendswithrÚOPÚopmaprÚdebugÚtok_nameÚaddtokenÚ ParseErrorÚrootnode)rÚtokensrÚpÚlinenoÚcolumnÚtypeÚvalueÚstartÚendÚ line_textÚprefixÚ quintupleÚs_linenoÚs_columns rÚ parse_tokenszDriver.parse_tokens&sö€ô L‰L˜Ÿ™ t§|¡|Ó 4ˆØ ‰Œ ؈؈Ø15Ð5ˆÐ5ˆuÐ5uÐ5˜s Y؈܈IØ1:Ñ .ˆD%˜  Yؘ Ð(Ò(Ø Ð'¨5Ò0ÐK°F¸FÐ3CÀUÐ2KÓKÐ0Ø%*Ñ"˜(ؘHÒ$ؘd h°Ñ&7Ñ8Ñ8FØ%FØFؘHÒ$ؘi¨¨xÐ8Ñ8FØ%FØœ×(Ñ(¬(¯+©+Ð6Ñ6ؘ%‘Ø!$‘˜Ø—>‘> $Ô'ؘa‘KFØFØØ”u—x‘xÒÜ—}‘} UÑ+ÙØ— ‘ ×!Ñ!Ð"5Ü"'§.¡.°Ñ"6¸¸vôGàz‰z˜$ ¨° Ô7ÙØ—K‘K×%Ñ% gÔ.Øðz‰zÐðˆFØ ‰NˆFFØ~‰~˜dÖ#ؘ!‘ Ø’ðA ôF×"Ñ"Ð#5Ø#'¨°¸°óAð Arcód—tj|j«}|j||«S©z*Parse a stream and return the syntax tree.)r Úgenerate_tokensÚreadliner1)rÚstreamrr$s rÚparse_stream_rawzDriver.parse_stream_rawVs)€ä×)Ñ)¨&¯/©/Ó:ˆØ× Ñ  ¨Ó/Ð/rcó&—|j||«Sr3)r7)rr6rs rÚ parse_streamzDriver.parse_stream[s€à×$Ñ$ V¨UÓ3Ð3rcó‚—tj|d|¬«5}|j||«cddd«S#1swYyxYw)z(Parse a file and return the syntax tree.Úr)ÚencodingN)ÚioÚopenr9)rÚfilenamer<rr6s rÚ parse_filezDriver.parse_file_s0€ä W‰WX˜s¨XÕ 6¸&Ø×$Ñ$ V¨UÓ3÷7× 6Ò 6ús™5µ>cóŠ—tjtj|«j«}|j ||«S)z*Parse a string and return the syntax tree.)r r4r=ÚStringIOr5r1)rÚtextrr$s rÚ parse_stringzDriver.parse_stringds4€ä×)Ñ)¬"¯+©+°dÓ*;×*DÑ*DÓEˆØ× Ñ  ¨Ó/Ð/r)NN)F)NF) Ú__name__Ú __module__Ú __qualname__rr1r7r9r@rD©rrrrs!„óó.ó`0ó 4ó4ô 0rcóÀ—tjj|«\}}|dk(rd}||zdjt t t j««zdzS)Nz.txtrÚ.z.pickle)ÚosÚpathÚsplitextÚjoinÚmapÚstrÚsysÚ version_info)ÚgtÚheadÚtails rÚ_generate_pickle_namerVjsP€Ü—‘×!Ñ! "Ó%J€Dˆ$Ø ˆv‚~ØˆØ $‰;˜Ÿ™¤#¤c¬3×+;Ñ+;Ó"<Ó=Ñ =À Ñ IÐIrcóª—|€tj«}|€ t|«n|}|s t||«sQ|j d|«t j |«}|r&|j d|« |j|«|S|Stj«}|j|«|S#t$r}|j d|«Yd}~|Sd}~wwxYw)z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s) r rrVÚ_newerÚinfor Úgenerate_grammarÚdumpÚOSErrorrÚGrammarÚload)rSÚgpÚsaveÚforcerÚgÚes rrrqsÈ€ð€~Ü×"Ñ"Ó$ˆØ&( jÔ ˜rÔ "°b€BÙ ”F˜2˜r”NØ ‰ Ð7¸Ô<Ü × !Ñ ! "Ó %ˆÙ Ø K‰KÐ6¸Ô ;ð 5Ø—‘r” ð €Hˆ1€Hô O‰OÓ ˆØ ‰ˆrŒ Ø €Høô ò 5Ø— ‘ Ð0°!×4Ð4ð €Hûð  5úsÁ0B,Â, CÂ5C à Ccó—tjj|«sytjj|«sytjj|«tjj|«k\S)z0Inquire whether file a was written since file b.FT)rKrLÚexistsÚgetmtime)ÚaÚbs rrXrX†sQ€ä 7‰7>‰>˜!Ô ØÜ 7‰7>‰>˜!Ô ØÜ 7‰7× Ñ ˜AÓ ¤"§'¡'×"2Ñ"2°1Ó"5Ñ 5Ð5rcó —tjj|«r t|«St tjj |««}t j||«}tj«}|j|«|S)aÙNormally, loads a pickled grammar by doing pkgutil.get_data(package, pickled_grammar) where *pickled_grammar* is computed from *grammar_source* by adding the Python version and using a ``.pickle`` extension. However, if *grammar_source* is an extant file, load_grammar(grammar_source) is called instead. This facilitates using a packaged grammar file when needed but preserves load_grammar's automatic regeneration behavior when possible. ) rKrLÚisfilerrVÚbasenameÚpkgutilÚget_datarr]Úloads)ÚpackageÚgrammar_sourceÚ pickled_nameÚdatarbs rÚload_packaged_grammarrssf€ô ‡ww‡~~nÔ%ܘNÓ+Ð+Ü(¬¯©×)9Ñ)9¸.Ó)IÓJ€LÜ × Ñ ˜G \Ó 2€D܉ӀA؇GGˆD„MØ €HrcóÀ—|stjdd}tjtjtj d¬«|D]}t |dd¬«Œy)zMain program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. rNz %(message)s)Úlevelr6ÚformatT)r`ra)rQÚargvr Ú basicConfigÚINFOÚstdoutr)ÚargsrSs rÚmainr|£sL€ñ Üx‰x˜˜ˆ|ˆÜ ×ÑœgŸl™l´3·:±:Ø,õ.ãˆÜR˜d¨$Ö/ðà rÚ__main__)z Grammar.txtNTFN)Ú__doc__Ú __author__Ú__all__r=rKr rlrQrrrrr r ÚobjectrrVrrXrsr|rEÚexitÚintrHrrÚr„sŠðñð 3€ à ^Ð $€ó Û ÛÛÛ ÷4Õ3ôJ0ˆVôJ0òZJð'+Ø04ó ò*6ò ò( ð ˆzÒØ €C‡HH‰S‘T“V‹_Õðrlib2to3/pgen2/__pycache__/grammar.cpython-312.opt-2.pyc000064400000007460152462633570016362 0ustar00Ë T—çh°ãó¬— ddlZddlmZGd„de«ZdZiZej«D]$ZesŒej«\Z Z e ee «ee <Œ&[[ [ y)éNé)Útokencó2—eZdZ d„Zd„Zd„Zd„Zd„Zd„Zy)ÚGrammarcó„—i|_i|_g|_i|_dg|_i|_i|_i|_d|_y)N)rÚEMPTYé) Ú symbol2numberÚ number2symbolÚstatesÚdfasÚlabelsÚkeywordsÚtokensÚ symbol2labelÚstart)Úselfs ú./usr/lib64/python3.12/lib2to3/pgen2/grammar.pyÚ__init__zGrammar.__init__LsF€ØˆÔØˆÔØˆŒ ؈Œ Ø#nˆŒ ؈Œ ؈Œ ØˆÔØˆ ócó¦— t|d«5}tj|j|tj«ddd«y#1swYyxYw)NÚwb)ÚopenÚpickleÚdumpÚ__dict__ÚHIGHEST_PROTOCOL)rÚfilenameÚfs rrz Grammar.dumpWs7€Ø7Ü (˜DÔ ! QÜ K‰K˜Ÿ ™  q¬&×*AÑ*AÔ B÷"× !Ñ !ús Ž0AÁAcó¨— t|d«5}tj|«}ddd«|jj «y#1swYŒ%xYw)NÚrb)rrÚloadrÚupdate)rrrÚds rr"z Grammar.load\s>€Ø9Ü (˜DÔ ! QÜ— ‘ ˜A“ˆA÷"à ‰ ×јQÕ÷"Ð !ús ŽAÁAcób— |jjtj|««y)N)rr#rÚloads)rÚpkls rr&z Grammar.loadsbs €ØAØ ‰ ×ÑœVŸ\™\¨#Ó.Õ/rc óò— |j«}dD]'}t||t||«j««Œ)|jdd|_|j dd|_|j |_|S)N)r r r rrr)Ú __class__ÚsetattrÚgetattrÚcopyrr r)rÚnewÚ dict_attrs rr,z Grammar.copyfsm€ð ðn‰nÓˆó4ˆIä C˜¤G¨D°)Ó$<×$AÑ$AÓ$CÕ Dð4ð—[‘[¡^ˆŒ Ø—[‘[¡^ˆŒ Ø—J‘JˆŒ ؈ rcó`— ddlm}td«||j«td«||j«td«||j«td«||j «td«||j «td|j«y) Nr)ÚpprintÚs2nÚn2sr r rr)r0Úprintr r r r rr)rr0s rÚreportzGrammar.reportssy€ØHÝ!Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆhŒÙˆt{‰{ÔÜ ˆfŒ Ùˆty‰yÔÜ ˆhŒÙˆt{‰{ÔÜ ˆgt—z‘zÕ"rN) Ú__name__Ú __module__Ú __qualname__rrr"r&r,r4©rrrrs'„ð3òj òCò  ò 0ò ó #rra ( LPAR ) RPAR [ LSQB ] RSQB : COLON , COMMA ; SEMI + PLUS - MINUS * STAR / SLASH | VBAR & AMPER < LESS > GREATER = EQUAL . DOT % PERCENT ` BACKQUOTE { LBRACE } RBRACE @ AT @= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL <= LESSEQUAL >= GREATEREQUAL ~ TILDE ^ CIRCUMFLEX << LEFTSHIFT >> RIGHTSHIFT ** DOUBLESTAR += PLUSEQUAL -= MINEQUAL *= STAREQUAL /= SLASHEQUAL %= PERCENTEQUAL &= AMPEREQUAL |= VBAREQUAL ^= CIRCUMFLEXEQUAL <<= LEFTSHIFTEQUAL >>= RIGHTSHIFTEQUAL **= DOUBLESTAREQUAL // DOUBLESLASH //= DOUBLESLASHEQUAL -> RARROW := COLONEQUAL ) rÚrÚobjectrÚ opmap_rawÚopmapÚ splitlinesÚlineÚsplitÚopÚnamer+r8rrÚrBspðð óõôj#ˆfôj#ð^1 € ðf €Ø × Ñ Ö "€DÚ Ø—:‘:“<‰ˆˆDÙ˜E 4Ó(ˆˆbŠ ð #ð ˆ"‰drlib2to3/pgen2/__pycache__/tokenize.cpython-312.opt-2.pyc000064400000041067152462633570016565 0ustar00Ë T—çhRã ó²— dZdZddlZddlZddlmZmZddl­ddlm Z e e «Dcgc] }|ddk7sŒ |‘Œc}gd ¢zZ [ e d „Zd „Zd „Zd „ZdZdZeedez«zee«zZdZdZdZdZedd«Zeeeee«ZdZedd«ee«zZdezZeee«Zededz«Z ee ee«Z!dZ"dZ#dZ$d Z%d!Z&ee&d"ze&d#z«Z'ee&d$ze&d%z«Z(ed&d'd(d)d*d+d,d-d.« Z)d/Z*ed0d1d2«Z+ee)e*e+«Z,ee!e,e(e«Z-ee-zZ.ee&d3zed4d«ze&d5zed6d«z«Z/edee'«Z0eee0e!e,e/e«zZ1e2ejfe.e1e$e%f«\Z4Z5Z6Z7ed7d8d9d:«ed7d8d;d<«zhd=£zZ8ejfe"«ejfe#«e6e7d>œe8Dcic]}|›d"e6“Œ c}¥e8Dcic]}|›d#e7“Œ c}¥e8Dcic]}|d“Œc}¥Z9d"d#he8Dchc]}|›d"’Œ c}ze8Dchc]}|›d#’Œ c}zZ:d4d6he8Dchc]}|›d4’Œ c}ze8Dchc]}|›d6’Œ c}zZ;d?Z<Gd@„dAe=«Z>GdB„dCe=«Z?dD„Z@e@fdE„ZAdF„ZBGdG„dH«ZCejfdIejˆ«ZEejfdJejˆ«ZFdK„ZGdL„ZHdM„ZIdN„ZJeKdOk(r\ddlLZLeMeLjœ«dkDr&eAeOeLjœd«j «yeAeLj¢j «yycc}w#e $reZ YŒéwxYwcc}wcc}wcc}wcc}wcc}wcc}wcc}w)PzKa-Ping Yee z@GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip MontanaroéN)ÚBOM_UTF8Úlookup)Ú*é)ÚtokenÚ_)ÚtokenizeÚgenerate_tokensÚ untokenizecó0—ddj|«zdzS)NÚ(Ú|Ú))Újoin©Úchoicess ú//usr/lib64/python3.12/lib2to3/pgen2/tokenize.pyÚgroupr0s€˜C #§(¡(¨7Ó"3Ñ3°cÑ9Ð9ócó—t|ŽdzS)Nr©rrs rÚanyr1s€œ% ˜/¨CÑ/Ð/rcó—t|ŽdzS)NÚ?rrs rÚmayber2s€œE 7˜O¨cÑ1Ð1rcó,‡—tˆfd„‰D««S)Nc3ó€•K—|]5}‰dzD]+}|j«|j«k7sŒ%||z–—Œ-Œ7y­w))ÚN)Úcasefold)Ú.0ÚxÚyÚls €rÚ z _combinations..4s8øèø€ðÙ! ! e¤)˜Q¨q¯z©z«|¸q¿z¹z»|Ó/KˆˆA )ˆ‘qùsƒ.>² >)Úset)r#s`rÚ _combinationsr&3sø€Ü óÙóó ðrz[ \f\t]*z #[^\r\n]*z\\\r?\nz\w+z0[bB]_?[01]+(?:_[01]+)*z(0[xX]_?[\da-fA-F]+(?:_[\da-fA-F]+)*[lL]?z0[oO]?_?[0-7]+(?:_[0-7]+)*[lL]?z[1-9]\d*(?:_\d+)*[lL]?z0[lL]?z[eE][-+]?\d+(?:_\d+)*z\d+(?:_\d+)*\.(?:\d+(?:_\d+)*)?z\.\d+(?:_\d+)*z \d+(?:_\d+)*z\d+(?:_\d+)*[jJ]z[jJ]z[^'\\]*(?:\\.[^'\\]*)*'z[^"\\]*(?:\\.[^"\\]*)*"z%[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''z%[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""z'(?:[uUrRbBfF]|[rR][fFbB]|[fFbBuU][rR])?ú'''ú"""z'[^\n'\\]*(?:\\.[^\n'\\]*)*'z"[^\n"\\]*(?:\\.[^\n"\\]*)*"z\*\*=?z>>=?z<<=?z<>z!=z//=?z->z[+\-*/%&@|^=<>]=?Ú~z[][(){}]z\r?\nz:=z[:;.,`@]z'[^\n'\\]*(?:\\.[^\n'\\]*)*Ú'z"[^\n"\\]*(?:\\.[^\n"\\]*)*Ú"ÚrÚRÚfÚFÚbÚB>ÚUÚuÚURÚUrÚuRÚur)r*r+r'r(écó —eZdZy)Ú TokenErrorN©Ú__name__Ú __module__Ú __qualname__©rrr:r:Šó…rr:có —eZdZy)ÚStopTokenizingNr;r?rrrBrBŒr@rrBc ó`—|\}}|\}}td||||t|t|«fz«y)Nz%d,%d-%d,%d: %s %s)ÚprintÚtok_nameÚrepr) ÚtyperÚxxx_todo_changemeÚxxx_todo_changeme1ÚlineÚsrowÚscolÚerowÚecols rÚ printtokenrOŽs<€Ø$L€Tˆ4Ø%L€Tˆ4Ü Ð Ø ˆtT˜4¤¨$¡´°e³Ð=ñ >õ?rcó>— t||«y#t$rYywxYw©N)Ú tokenize_looprB)ÚreadlineÚ tokeneaters rr r ”s(€ð ð Üh  Õ+øÜ ò Ù ð ús ƒ  ›có.—t|«D]}||ŽŒ yrQ)r )rSrTÚ token_infos rrRrR§s€Ü% hÖ/ˆ ÙJÒñ0rcó$—eZdZd„Zd„Zd„Zd„Zy)Ú Untokenizercó.—g|_d|_d|_y)Nrr)ÚtokensÚprev_rowÚprev_col)Úselfs rÚ__init__zUntokenizer.__init__­s€ØˆŒ ؈Œ ؈ rcón—|\}}||jz }|r|jjd|z«yy)NÚ )r\rZÚappend)r]ÚstartÚrowÚcolÚ col_offsets rÚadd_whitespacezUntokenizer.add_whitespace²s8€Ø‰ˆˆSà˜4Ÿ=™=Ñ(ˆ Ù Ø K‰K× Ñ ˜s ZÑ/Õ 0ð rcóf—|D]’}t|«dk(r|j||«np|\}}}}}|j|«|jj |«|\|_|_|ttfvsŒw|xj dz c_d|_Œ”dj|j«S)Nérrr) ÚlenÚcompatrfrZrar[r\ÚNEWLINEÚNLr)r]ÚiterableÚtÚtok_typerrbÚendrJs rr zUntokenizer.untokenize¹sœ€ÛˆAÜ1‹v˜Š{Ø— ‘ ˜A˜xÔ(ÙØ01Ñ -ˆHe˜U C¨Ø × Ñ  Ô &Ø K‰K× Ñ ˜uÔ %Ø+.Ñ (ˆDŒM˜4œ=ØœG¤R˜=Ò(Ø— ’  Ñ"• Ø !• ððw‰wt—{‘{Ó#Ð#rcóž—d}g}|jj}|\}}|ttfvr|dz }|tt fvrd}|D]†}|dd\}}|ttt tfvr|dz }|tk(r|j|«ŒC|tk(r|j«Œ]|tt fvrd}n|r|r ||d«d}||«Œˆy)NFr`Trhéÿÿÿÿ) rZraÚNAMEÚNUMBERrkrlÚASYNCÚAWAITÚINDENTÚDEDENTÚpop) r]rrmÚ startlineÚindentsÚ toks_appendÚtoknumÚtokvalÚtoks rrjzUntokenizer.compatÇs׀؈ ؈ؗk‘k×(Ñ(ˆ ؉ˆØ ”dœF^Ñ #Ø c‰MˆFØ ”gœr]Ñ "؈IÛˆCØ   !˜W‰NˆFFàœ$¤¬¬uÐ5Ñ5ؘ#‘ àœÒØ—‘˜vÔ&ØØœ6Ò!Ø— ‘ ” ØØœG¤R˜=Ñ(Ø ‘ Ù™wÙ˜G B™KÔ(Ø! Ù ˜Õ ñ#rN)r<r=r>r^rfr rjr?rrrXrX«s„òò 1ò $ó rrXz&^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)s^[ \t\f]*(?:[#\r\n]|$)có¨— |ddj«jdd«}|dk(s|jd«ry|dvs|jd«ry|S) Né rÚ-úutf-8zutf-8-)zlatin-1ú iso-8859-1z iso-latin-1)zlatin-1-z iso-8859-1-z iso-latin-1-r„)ÚlowerÚreplaceÚ startswith)Úorig_encÚencs rÚ_get_normal_namerŠæsY€Ø2à 3Bˆ-× Ñ Ó × 'Ñ '¨¨SÓ 1€CØ ˆg‚~˜Ÿ™¨Ô1ØØ Ð6Ñ6Ø ‡~~ÐAÔBØØ €Orc󇇗 dŠd}d}ˆfd„}ˆfd„}|«}|jt«r dŠ|dd}d}|s|gfS||«}|r||gfStj|«s||gfS|«}|s||gfS||«}|r|||gfS|||gfS)NFrƒcóF•— ‰«S#t$r t«cYSwxYwrQ)Ú StopIterationÚbytes)rSs€rÚ read_or_stopz%detect_encoding..read_or_stops&ø€ð Ù“:Ð øÜò Ü“7ŠNð ús ƒ Š Ÿ có>•— |jd«}tj|«}|syt |j d««} t |«}‰r|jdk7r td«‚|dz }|S#t$rYywxYw#t$rtd|z«‚wxYw)NÚasciirzunknown encoding: rƒzencoding problem: utf-8z-sig) ÚdecodeÚUnicodeDecodeErrorÚ cookie_reÚmatchrŠrrÚ LookupErrorÚ SyntaxErrorÚname)rJÚ line_stringr•ÚencodingÚcodecÚ bom_founds €rÚ find_cookiez$detect_encoding..find_cookie s®ø€ð ØŸ+™+ gÓ.ˆKô—‘  Ó,ˆÙØÜ# E§K¡K°£NÓ3ˆð ?ܘ8Ó$ˆEñ Øz‰z˜WÒ$ä!Ð";Ó<Ð<Ø ˜Ñ ˆH؈øô#"ò Ùð ûôò ?äÐ2°XÑ=Ó>Ð >ð ?úsƒA5Á BÁ5 BÂBÂBTéz utf-8-sig)r‡rÚblank_rer•)rSršÚdefaultrrÚfirstÚsecondrœs` @rÚdetect_encodingr£ñsÑù€ðð"€IØ€HØ€Gôô ñ, ‹N€EØ ×ÑœÔ!؈ Øab ˆØˆÙ ؘˆ{Ðá˜5Ó!€HÙØ˜%˜Ð Ð Ü >‰>˜%Ô Ø˜˜ÐÐá ‹^€F٠ؘ˜ÐÐá˜6Ó"€HÙØ˜% ˜Ð(Ð(à U˜FOÐ #Ð#rcó:— t«}|j|«SrQ)rXr )rmÚuts rr r :s€ðô" ‹€BØ =‰=˜Ó "Ð"rc#óx K— dx}x}}d\}}d}dg}d}d} d} d} |«} |dz}dt| «}} |r’| s td«‚j| «}|r4|j d«x} }t || d|z||f|| zf–—d\}}d}nØ|r0| dddk7r(| d dd k7r t || z|t| «f|f–—d}d}Œ¤|| z}|| z}Œ¯|dk(rƒ|s€| snd}| |krA| | d k(r|dz}n(| | d k(r|tzdztz}n | | d k(rd}nn | dz} | |krŒA| |k(rnÌ|r|–—d}| | dvr“| | dk(r]| | djd«}| t|«z}t||| f|| t|«zf| f–—t| |d||f|t| «f| f–—n,ttf| | dk(| | d|| f|t| «f| f–—Œ­||dkDr%|j|«t| d| |df|| f| f–—||dkrC||vrtdd|| | f«‚|dd}| r| |dk\rd} d} d} td|| f|| f| f–—||dkrŒC| r#| r!| |dk\rd} d} d} n| std|df«‚d}| |kr…tj| | «}|rI|j!d«\}}||f||f|} }}| ||| |}}|t"j$vs |dk(r|dk7rt&|||| f–—n|dvr)t(}|dkDrt}n| rd} |r|–—d}||||| f–—nå|dk(r|r|–—d}t|||| f–—nÉ|t*vrYt,|}|j| | «}|r/|j d«} | || }|r|–—d}t |||| f| f–—nu||f}| |d}| }no|t.vs|ddt.vs |ddt.vrR|ddk(r4||f}t,|xst,|dxs t,|d}| |dd}}| }n|r|–—d}t |||| f–—nø|j1«r„|dvr| r|dk(rt2nt4|||| f–—Œ¼t6|||| f}|dk(r|s|}ŒÒ|dvr=|r;|dt6k(r/|ddk(r'|dk(rd} |d} t2|d|d|d|df–—d}|r|–—d}|–—nd|dk(r|r|–—d}t|||| f| f–—d}nE|d vr|dz}n |d!vr|dz }|r|–—d}t8|||| f–—nt | | || f|| dzf| f–—| dz} | |krŒ…ŒÖ|r|–—d}|ddD]}td|df|dfdf–—Œt:d|df|dfdf–—y#t$rd} YŒwxYw­w)"Nr)rrFrrzEOF in multi-line stringéþÿÿÿz\ éýÿÿÿz\ r`Ú Ú z# Ú#z rrz3unindent does not match any outer indentation levelz zEOF in multi-line statementÚ.TrhržÚ )ÚasyncÚawaitr®)ÚdefÚforr°éÚ\z([{z)]})rrir:r•rpÚSTRINGÚ ERRORTOKENÚtabsizeÚrstripÚCOMMENTrlrarwÚIndentationErrorrxÚ pseudoprogÚspanÚstringÚdigitsrtrkÚ triple_quotedÚendprogsÚ single_quotedÚ isidentifierrurvrsÚOPÚ ENDMARKER)rSÚlnumÚparenlevÚ continuedÚcontstrÚneedcontÚcontliner{ÚstashedÚ async_defÚasync_def_indentÚ async_def_nlrJÚposÚmaxÚstrstartÚendprogÚendmatchrpÚcolumnÚ comment_tokenÚnl_posÚ pseudomatchrbÚsposÚeposrÚinitialÚnewlinerÚindents rr r Os~èø€ðð#$Ð#€DÐ#ˆ8iØÑ€GˆXØ€H؈c€Gð€GØ€IØÐØ€Là ð Ù“:ˆDða‰xˆØ”c˜$“iˆSˆá ÙÜ Ð!;¸XÓFÐFØ—}‘} TÓ*ˆHÙØ$ŸL™L¨›OÐ+cܘw¨¨d¨s¨Ñ3Ø $¨ ¨h¸©oð?ò?à$)Ñ!˜Ø’Ù˜d 2 3˜i¨6Ò1°d¸2¸3°iÀ8Ò6KÜ! 7¨T¡>Ø# d¬C°«IÐ%6¸ðBòBàØØà! D™.Ø# d™?Øà ˜‹]¢9ٙ؈Fؘ’)ؘ‘9 Ò#¨f°q©j¡Vؘ#‘Y $Ò&°&¼'±/ÀAÑ2EÄwÑ1N©Ø˜#‘Y $Ò&°©ØØ˜A‘g𠘓)ð cŠz™5áØ’ ØàC‰y˜GÑ#ؘ‘9 Ò#Ø$(¨¨ J×$5Ñ$5°fÓ$=MØ ¤3 }Ó#5Ñ5FÜ" MØ  #˜;¨¨s´S¸Ó5GÑ/GÐ(HÈ$ðPòPä˜t F G˜}Ø  &˜>¨D´#°d³)Ð+<¸dðDóDô¤˜=¨¨c©°cÑ)9Ñ:¸DÀÀ¸JØ  #˜;¨¬s°4«yÐ(9¸4ðAòAáà˜ ™ Ò#Ø—‘˜vÔ&ܘt D S˜z¨D°!¨9°t¸S°kÀ4ÐHÒHؘ7 2™;Ò&Ø Ñ(Ü*ØMØ% t¨S°$Ð7ó9ð9ð" # 2˜,áÐ!1°W¸R±[Ò!@Ø %IØ#(LØ'(Ð$ä˜r D¨# ;°°s° ¸TÐBÒBð˜7 2™;Ó&ñ™\Ð.>À'È"Á+Ò.MØ! Ø$ Ø#$Ñ ñÜ Ð!>ÀÀqÀ ÓJÐJ؈IàC‹iÜ$×*Ñ*¨4°Ó5ˆKÚØ(×-Ñ-¨aÓ0‘ sØ#'¨ -°$¸°¸c˜CdØ!% e¨C °$°u±+wàœfŸm™mÑ+ؘs’N u°¢|Ü! 5¨$°°dÐ;Ô;Ø Ñ&Ü%GØ !’|Ü"$™Ù"Ø'+˜ ÙØ%š Ø"&˜Ø" E¨4°°tÐ<Ô<à ’^áØ%š Ø"&˜Ü" E¨4°°tÐ<Ô<ØœmÑ+Ü& u™oGØ&Ÿ}™}¨T°3Ó7HÙØ&Ÿl™l¨1›o˜Ø $ U¨3 ˜Ù"Ø")šMØ&*˜GÜ% u¨d°T¸3°KÀÐFÔFà$(¨% =˜Ø"& u v ,˜Ø#'˜Ùؤ Ñ-ؘ"˜1I¤Ñ.ؘ"˜1I¤Ñ.ؘR‘y DÒ(Ø$(¨% =˜Ü#+¨GÑ#4ò$6¼ÀÀqÁÑ8Jò$6Ü#+¨E°!©HÑ#5ð à,0°°¨L¸! ˜Ø#'˜Ùá"Ø")šMØ&*˜GÜ% u¨d°D¸$Ð?Ó?Ø×)Ñ)Ô+ØÐ 2Ñ2Ù$Ø,1°WÒ,<¥5Ä%Ø#(¨$°°dð#<ò<á$ä ¨¨d°DÐ9CØ Ò'±Ø"%˜Ù à Ñ.Ù#Ø$+¨A¡J´$Ò$6Ø$+¨A¡J°'Ò$9à$¨š~Ø,0  Ø3:¸2±;Ð 0ä#(¨'°!©*Ø#*¨1¡:¨w°q©zØ#*¨1¡:ð#/ò/ð'+˜GáØ%š Ø"&˜à“IØ ’_áØ%š Ø"&˜Ü˜u d¨T°3¨K¸Ð>Ò>Ø !‘Ià %Ñ'°H¸q±L©Ø  EÑ)°hÀ±l¨8ÙØ%š Ø"&˜Ü˜u d¨D°$Ð7Ó7ä! 4¨¡9Ø  #˜;¨¨s°1©u¨ °tð=ò=à˜A‘gðSCŒiñi ñ~ØŠ ؈à˜!˜"“+ˆÜr˜D !˜9 t¨Q i°Ð4Ó4ðä b˜4 ˜) d¨A Y°Ð 3Ó3øôEò Ø‹Dð üs<‚T:žT(¥C:T:Ä D T:ÉJ.T:Ó17T:Ô( T7Ô3T:Ô6T7Ô7T:Ú__main__)RÚ __author__Ú __credits__r¼ÚreÚcodecsrrÚlib2to3.pgen2.tokenrrÚdirÚ__all__rŽÚ NameErrorÚstrrrrr&Ú WhitespaceÚCommentÚIgnoreÚNameÚ BinnumberÚ HexnumberÚ OctnumberÚ DecnumberÚ IntnumberÚExponentÚ PointfloatÚExpfloatÚ FloatnumberÚ ImagnumberÚNumberÚSingleÚDoubleÚSingle3ÚDouble3Ú _litprefixÚTripleÚStringÚOperatorÚBracketÚSpecialÚFunnyÚ PlainTokenÚTokenÚContStrÚ PseudoExtrasÚ PseudoTokenÚmapÚcompileÚ tokenprogrºÚ single3progÚ double3progÚ _strprefixesr¿r¾rÀr¶Ú Exceptionr:rBrOr rRrXÚASCIIr”rŸrŠr£r r r<ÚsysriÚargvÚopenrSÚstdin)r!Úprefixs00rÚrsŸðð#ð0*€ àFð ÷ß#Ü!åÙ˜%”jÓ 0‘j A a¡D¨C£KŠ1jÑ 0ò4,ñ ,€à ðÙ ò :Ú/Ú1òð € Ø €Ø ‘c˜* zÑ1Ó2Ñ 2±U¸7³^Ñ C€Ø €à &€ Ø 7€ Ø .€ Ù Ð+¨XÓ 6€ Ù )˜Y¨ °9Ó =€ Ø #€Ù Ð5Ð7HÓ IÉEÐRZËOÑ [€ Ø ˜XÑ %€ÙJ Ó)€ Ù Ð&¨ °gÑ(=Ó >€ Ù ˆz˜;¨ Ó 2€ð $€à #€à 2€à 2€Ø 7€ Ù ˆz˜EÑ! :°Ñ#5Ó 6€á ˆzÐ;Ñ;ØÐ;Ñ;ó =€ñ ˜G W¨e°Uؘ%Ø%Øó €ð €Ù ˜% Ó -€Ù ˆh˜ Ó)€á 6˜5 &¨$Ó /€ ØÑ€ñ  Ð;Ñ;Ùc˜:Ó&ñ'àÐ;Ñ;Ùc˜:Ó&ñ'ó (€ñZ ¨&Ó1€ Ø™5 ¨v°u¸gÀtÓLÑL€ á25؇JJ˜  W¨gÐ6ó38Ñ/€ ˆ:{ Kñ#s˜C Ó%Ù#s˜C Ó%ñ&â&ñ'ð ð —‘˜FÓ#¨*¨"¯*©*°VÓ*<Ø {ñ 9á9EÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ:FÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ+7Ó7©, ˆvt‰|¨,Ñ7ð  9€ð ˆE€NÙ".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0á".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0ðð  ˆ#€JÙ ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.á ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.ðð €ä!Ô!ä%YÔ%ò?ð #-ó ò& ÷6 ñ6 ðp ˆBJ‰JÐ@À"Ç(Á(Ó K€ Ø ˆ2:‰:Ð0°"·(±(Ó ;€ò òG$òR#ò*`4ðD ˆzÒÛÙ ˆ38‰8ƒ}qÒ™(¡4¨¯©°© Ó#4×#=Ñ#=Õ>Ù 3—9‘9×%Ñ%Õ &ðùòY 1øð òð ƒEðüò\GùÚFùÚ7ùò0ùÚ/ùò.ùÚ-sF« L#¹L#ÁL(Ç L6Ç L;Ç( MÇ= MÈ M È) MÈ= MÌ(L3Ì2L3lib2to3/pgen2/__pycache__/parse.cpython-312.pyc000064400000021024152462633570015076 0ustar00Ë T—çhÛãó@—dZddlmZGd„de«ZGd„de«Zy)zÈParser engine for the grammar tables generated by pgen. The grammar table must be loaded first. See Parser/parser.c in the Python distribution for additional info on how this parsing engine works. é)Útokencó—eZdZdZd„Zd„Zy)Ú ParseErrorz(Exception to signal the parser is stuck.c ó~—tj||›d|›d|›d|›«||_||_||_||_y)Nz: type=z, value=z , context=)Ú ExceptionÚ__init__ÚmsgÚtypeÚvalueÚcontext)Úselfr r r r s ú,/usr/lib64/python3.12/lib2to3/pgen2/parse.pyrzParseError.__init__s<€Ü×ј4Ú¢¢u©gð"7ô 8àˆŒØˆŒ ؈Œ ؈ ócót—t|«|j|j|j|jffS©N)r r r r )r s rÚ __reduce__zParseError.__reduce__s*€ÜD‹z˜DŸH™H d§i¡i°·±¸T¿\¹\ÐJÐJÐJrN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr©rrrrs„Ù2òóKrrcó>—eZdZdZd d„Zd d„Zd„Zd„Zd„Zd„Z d „Z y) ÚParsera5Parser engine. The proper usage sequence is: p = Parser(grammar, [converter]) # create instance p.setup([start]) # prepare for parsing : if p.addtoken(...): # parse a token; may raise ParseError break root = p.rootnode # root of abstract syntax tree A Parser instance may be reused by calling setup() repeatedly. A Parser instance contains state pertaining to the current token sequence, and should not be used concurrently by different threads to parse separate token sequences. See driver.py for how to get input tokens by tokenizing a file or string. Parsing is complete when addtoken() returns True; the root of the abstract syntax tree can then be retrieved from the rootnode instance variable. When a syntax error occurs, addtoken() raises the ParseError exception. There is no error recovery; the parser cannot be used after a syntax error was reported (but it can be reinitialized by calling setup()). Ncó*—||_|xsd„|_y)aÚConstructor. The grammar argument is a grammar.Grammar instance; see the grammar module for more information. The parser is not ready yet for parsing; you must call the setup() method to get it started. The optional convert argument is a function mapping concrete syntax tree nodes to abstract syntax tree nodes. If not given, no conversion is done and the syntax tree produced is the concrete syntax tree. If given, it must be a function of two arguments, the first being the grammar (a grammar.Grammar instance), and the second being the concrete syntax tree node to be converted. The syntax tree is converted from the bottom up. A concrete syntax tree node is a (type, value, context, nodes) tuple, where type is the node type (a token or symbol number), value is None for symbols and a string for tokens, context is None or an opaque value used for error reporting (typically a (lineno, offset) pair), and nodes is a list of children for symbols, and None for tokens. An abstract syntax tree node may be anything; this is entirely up to the converter function. có—|Srr)ÚgrammarÚnodes rÚz!Parser.__init__..Zs€¹rN)rÚconvert)r rrs rrzParser.__init__<s€ð:ˆŒ ØÒ>Ñ#=ˆ rcó´—|€|jj}|ddgf}|jj|d|f}|g|_d|_t «|_y)a›Prepare for parsing. This *must* be called before starting to parse. The optional argument is an alternative start symbol; it defaults to the grammar's start symbol. You can use a Parser instance to parse any number of programs; each time you call setup() the parser is reset to an initial state determined by the (implicit or explicit) start symbol. Né)rÚstartÚdfasÚstackÚrootnodeÚsetÚ used_names)r r"ÚnewnodeÚ stackentrys rÚsetupz Parser.setup\s\€ð ˆ=Ø—L‘L×&Ñ&ˆEð˜$  bÐ)ˆØ—l‘l×'Ñ'¨Ñ.°°7Ð;ˆ Ø \ˆŒ ؈Œ Ü›%ˆrcó¼—|j|||«} |jd\}}}|\}} ||} | D]ç\} } |jj| \} }|| k(rl| dksJ‚|j ||| |«| }||d|fgk(rB|j «|jsy|jd\}}}|\}} ||d|fgk(rŒBy| dk\sŒ™|jj | }|\}}||vsŒ¼|j| |jj | | |«n?d|f| vr*|j «|jstd|||«‚td|||«‚ŒI)zà$EØ  ™-¨Q°¨J¨<Ò7ØŸ™œ Ø#Ÿzšzá#'Ø+/¯:©:°b©>Ñ(˜˜U DØ(+™ ˜ ð ! ™-¨Q°¨J¨<Ó7ñ!ؘ#“Xà!Ÿ\™\×.Ñ.¨qÑ1FØ*0Ñ'I˜xØ Ò)àŸ ™  ! T§\¡\×%6Ñ%6°qÑ%9¸8ÀWÔMÙð3 $ð6u: Ñ%à—H‘H”JØŸ:š:ä(Ð)9Ø)-¨u°gó?ð?ô% [°$¸¸wÓGÐGñSrcó—|tjk(rD|jj|«|jj j |«}||S|jjj |«}|€td|||«‚|S)z&Turn a token into a label. (Internal)z bad token) rÚNAMEr'ÚaddrÚkeywordsÚgetÚtokensr)r r r r r3s rr.zParser.classify¤sz€à ”5—:‘:Ò à O‰O× Ñ  Ô &à—\‘\×*Ñ*×.Ñ.¨uÓ5ˆFØÐ!Ø Ø—‘×$Ñ$×(Ñ(¨Ó.ˆØ ˆ>ܘ[¨$°°wÓ?Ð ?؈ rcó¾—|jd\}}}|||df}|j|j|«}||dj|«|||f|jd<y)zShift a token. (Internal)r,N)r$rrÚappend) r r r r:r r4r5rr(s rr0z Parser.shift²sb€àŸ:™: b™>шˆUDؘ ¨Ð.ˆØ—,‘,˜tŸ|™|¨WÓ5ˆØ Ð Ø ‰HO‰O˜GÔ $ؘx¨Ð.ˆ ‰ 2Šrcó–—|jd\}}}|d|gf}|||f|jd<|jj|d|f«y)zPush a nonterminal. (Internal)r,Nr!)r$rH) r r Únewdfar:r r4r5rr(s rr2z Parser.push»sQ€àŸ:™: b™>шˆUDؘ˜w¨Ð+ˆØ˜x¨Ð.ˆ ‰ 2‰Ø ‰ ×ј6 1 gÐ.Õ/rcó*—|jj«\}}}|j|j|«}|W|jr(|jd\}}}|dj |«y||_|j |j _yy)zPop a nonterminal. (Internal)Nr,)r$r1rrrHr%r')r ÚpopdfaÚpopstateÚpopnoder(r4r5rs rr1z Parser.popÂsz€à$(§J¡J§N¡NÓ$4Ñ!ˆ˜'Ø—,‘,˜tŸ|™|¨WÓ5ˆØ Ð ØzŠzØ#'§:¡:¨b¡>Ñ U˜DØR‘—‘ Õ(à '” Ø+/¯?©?— ‘ Õ(ð rr) rrrrrr*r@r.r0r2r1rrrrrs-„ñó:?ó@ ò0.Hò` ò/ò0ó ;rrN)rÚrrrÚobjectrrrrÚrQs+ðñõô Kô Kôn;ˆVõn;rlib2to3/pgen2/__pycache__/literals.cpython-312.opt-1.pyc000064400000004124152462633570016544 0ustar00Ë T—çhcã óV—dZddlZddddddd d d d d œ Zd„Zd„Zd„Zedk(re«yy)zÜÐAÀDÑHÓIÐ Ið TÜE˜2“ˆAô ˆq‹6€Mð  VÜD˜!“ ˆAô ˆq‹6€Møôò TÜÐAÀDÑHÓIÈtÐ Sð Tûô ò VÜÐCÀdÑJÓKÐQUÐ Uð VúsÁ" BÁ: B-ÂB*Â-Ccó’—|d}|dd|dzk(r|dz}|t|«t|« }tjdt|«S)Nréz)\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}))rÚreÚsubr))ÚsÚqs r(Ú evalStringr0(sQ€à ˆ!‰€A؈ˆ!€u!‘‚|Ø ˆa‰Cˆð Œ#ˆa‹&”#a“&ЀAÜ 6‰6Ð>ÄÈÓ JÐJócóŽ—td«D]7}t|«}t|«}t|«}||k7sŒ*t ||||«Œ9y)Né)Úranger!Úreprr0Úprint)r'Úcr.Úes r(Útestr92s@€Ü 3ŽZˆÜ ‹FˆÜ ‹GˆÜ q‹MˆØ ‹6Ü !Q˜˜1Õ ñ r1Ú__main__)Ú__doc__r,rr)r0r9Ú__name__©r1r(Úr>sWðñCã àØØØØØØØØØñ €òò*Kòð ˆzÒÙ…Fðr1lib2to3/pgen2/__pycache__/grammar.cpython-312.opt-1.pyc000064400000015534152462633570016362 0ustar00Ë T—çh°ãó®—dZddlZddlmZGd„de«ZdZiZej«D]$Z e sŒe j«\Z Z e ee «ee <Œ&[ [ [ y)a‡This module defines the data structures used to represent a grammar. These are a bit arcane because they are derived from the data structures used by Python's 'pgen' parser generator. There's also a table here mapping operators to their names in the token module; the Python tokenize module reports all operators as the fallback token code OP, but the parser needs the actual token code. éNé)Útokencó4—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z y) ÚGrammara¶ Pgen parsing tables conversion class. Once initialized, this class supplies the grammar tables for the parsing engine implemented by parse.py. The parsing engine accesses the instance variables directly. The class here does not provide initialization of the tables; several subclasses exist to do this (see the conv and pgen modules). The load() method reads the tables from a pickle file, which is much faster than the other ways offered by subclasses. The pickle file is written by calling dump() (after loading the grammar tables using a subclass). The report() method prints a readable representation of the tables to stdout, for debugging. The instance variables are as follows: symbol2number -- a dict mapping symbol names to numbers. Symbol numbers are always 256 or higher, to distinguish them from token numbers, which are between 0 and 255 (inclusive). number2symbol -- a dict mapping numbers to symbol names; these two are each other's inverse. states -- a list of DFAs, where each DFA is a list of states, each state is a list of arcs, and each arc is a (i, j) pair where i is a label and j is a state number. The DFA number is the index into this list. (This name is slightly confusing.) Final states are represented by a special arc of the form (0, j) where j is its own state number. dfas -- a dict mapping symbol numbers to (DFA, first) pairs, where DFA is an item from the states list above, and first is a set of tokens that can begin this grammar rule (represented by a dict whose values are always 1). labels -- a list of (x, y) pairs where x is either a token number or a symbol number, and y is either None or a string; the strings are keywords. The label number is the index in this list; label numbers are used to mark state transitions (arcs) in the DFAs. start -- the number of the grammar's start symbol. keywords -- a dict mapping keyword strings to arc labels. tokens -- a dict mapping token numbers to arc labels. có„—i|_i|_g|_i|_dg|_i|_i|_i|_d|_y)N)rÚEMPTYé) Ú symbol2numberÚ number2symbolÚstatesÚdfasÚlabelsÚkeywordsÚtokensÚ symbol2labelÚstart)Úselfs ú./usr/lib64/python3.12/lib2to3/pgen2/grammar.pyÚ__init__zGrammar.__init__LsF€ØˆÔØˆÔØˆŒ ؈Œ Ø#nˆŒ ؈Œ ؈Œ ØˆÔØˆ ócó¤—t|d«5}tj|j|tj«ddd«y#1swYyxYw)z)Dump the grammar tables to a pickle file.ÚwbN)ÚopenÚpickleÚdumpÚ__dict__ÚHIGHEST_PROTOCOL)rÚfilenameÚfs rrz Grammar.dumpWs4€ä (˜DÔ ! QÜ K‰K˜Ÿ ™  q¬&×*AÑ*AÔ B÷"× !Ñ !ús 0AÁAcó¦—t|d«5}tj|«}ddd«|jj «y#1swYŒ%xYw)z+Load the grammar tables from a pickle file.ÚrbN)rrÚloadrÚupdate)rrrÚds rr"z Grammar.load\s;€ä (˜DÔ ! QÜ— ‘ ˜A“ˆA÷"à ‰ ×јQÕ÷"Ð !ús AÁAcó`—|jjtj|««y)z3Load the grammar tables from a pickle bytes object.N)rr#rÚloads)rÚpkls rr&z Grammar.loadsbs€à ‰ ×ÑœVŸ\™\¨#Ó.Õ/rc óð—|j«}dD]'}t||t||«j««Œ)|jdd|_|j dd|_|j |_|S)z# Copy the grammar. )r r r rrrN)Ú __class__ÚsetattrÚgetattrÚcopyrr r)rÚnewÚ dict_attrs rr,z Grammar.copyfsh€ðn‰nÓˆó4ˆIä C˜¤G¨D°)Ó$<×$AÑ$AÓ$CÕ Dð4ð—[‘[¡^ˆŒ Ø—[‘[¡^ˆŒ Ø—J‘JˆŒ ؈ rcó^—ddlm}td«||j«td«||j«td«||j«td«||j «td«||j «td|j«y ) z:Dump the grammar tables to standard output, for debugging.r)ÚpprintÚs2nÚn2sr r rrN)r0Úprintr r r r rr)rr0s rÚreportzGrammar.reportssv€å!Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆeŒ Ùˆt×!Ñ!Ô"Ü ˆhŒÙˆt{‰{ÔÜ ˆfŒ Ùˆty‰yÔÜ ˆhŒÙˆt{‰{ÔÜ ˆgt—z‘zÕ"rN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr"r&r,r4©rrrrs'„ñ3òj òCò  ò 0ò ó #rra ( LPAR ) RPAR [ LSQB ] RSQB : COLON , COMMA ; SEMI + PLUS - MINUS * STAR / SLASH | VBAR & AMPER < LESS > GREATER = EQUAL . DOT % PERCENT ` BACKQUOTE { LBRACE } RBRACE @ AT @= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL <= LESSEQUAL >= GREATEREQUAL ~ TILDE ^ CIRCUMFLEX << LEFTSHIFT >> RIGHTSHIFT ** DOUBLESTAR += PLUSEQUAL -= MINEQUAL *= STAREQUAL /= SLASHEQUAL %= PERCENTEQUAL &= AMPEREQUAL |= VBAREQUAL ^= CIRCUMFLEXEQUAL <<= LEFTSHIFTEQUAL >>= RIGHTSHIFTEQUAL **= DOUBLESTAREQUAL // DOUBLESLASH //= DOUBLESLASHEQUAL -> RARROW := COLONEQUAL )r8rÚrÚobjectrÚ opmap_rawÚopmapÚ splitlinesÚlineÚsplitÚopÚnamer+r9rrÚrCspðñ óõôj#ˆfôj#ð^1 € ðf €Ø × Ñ Ö "€DÚ Ø—:‘:“<‰ˆˆDÙ˜E 4Ó(ˆˆbŠ ð #ð ˆ"‰drlib2to3/pgen2/__pycache__/literals.cpython-312.opt-2.pyc000064400000004013152462633570016542 0ustar00Ë T—çhcã óT— ddlZdddddddd d d d œ Zd „Zd„Zd„Zedk(re«yy)éNÚÚÚ Ú Ú Ú Ú Ú'Ú"Ú\) ÚaÚbÚfÚnÚrÚtÚvr r r có’—|jdd«\}}tj|«}||S|jd«r9|dd}t |«dkrt d|z«‚ t |d«}t|«S t |d«}t|«S#t $rt d|z«d‚wxYw#t $rt d|z«d‚wxYw) NréÚxéz!invalid hex string escape ('\%s')ééz#invalid octal string escape ('\%s'))ÚgroupÚsimple_escapesÚgetÚ startswithÚlenÚ ValueErrorÚintÚchr)ÚmÚallÚtailÚescÚhexesÚis ú//usr/lib64/python3.12/lib2to3/pgen2/literals.pyÚescaper)sæ€Ø—‘˜˜1“ I€Cˆä × Ñ ˜TÓ "€CØ €Øˆ Ø ‡sÔØQRˆÜ ˆu‹:˜Š>ÜÐAÀDÑHÓIÐ Ið TÜE˜2“ˆAô ˆq‹6€Mð  VÜD˜!“ ˆAô ˆq‹6€Møôò TÜÐAÀDÑHÓIÈtÐ Sð Tûô ò VÜÐCÀdÑJÓKÐQUÐ Uð VúsÁ" BÁ: B-ÂB*Â-Ccó’—|d}|dd|dzk(r|dz}|t|«t|« }tjdt|«S)Nréz)\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}))rÚreÚsubr))ÚsÚqs r(Ú evalStringr0(sQ€à ˆ!‰€A؈ˆ!€u!‘‚|Ø ˆa‰Cˆð Œ#ˆa‹&”#a“&ЀAÜ 6‰6Ð>ÄÈÓ JÐJócóŽ—td«D]7}t|«}t|«}t|«}||k7sŒ*t ||||«Œ9y)Né)Úranger!Úreprr0Úprint)r'Úcr.Úes r(Útestr92s@€Ü 3ŽZˆÜ ‹FˆÜ ‹GˆÜ q‹MˆØ ‹6Ü !Q˜˜1Õ ñ r1Ú__main__)r,rr)r0r9Ú__name__©r1r(Úr=sWððCã àØØØØØØØØØñ €òò*Kòð ˆzÒÙ…Fðr1lib2to3/pgen2/__pycache__/tokenize.cpython-312.pyc000064400000050711152462633570015621 0ustar00Ë T—çhRã ó´—dZdZdZddlZddlZddlmZmZddl­ddl m Z e e «Dcgc] }|dd k7sŒ |‘Œc}gd ¢zZ [ e d „Zd „Zd „Zd„ZdZdZeedez«zee«zZdZdZdZdZedd«Zeeeee«ZdZedd«ee«zZdezZeee«Z ede dz«Z!ee!e e«Z"dZ#dZ$d Z%d!Z&d"Z'ee'd#ze'd$z«Z(ee'd%ze'd&z«Z)ed'd(d)d*d+d,d-d.d/« Z*d0Z+ed1d2d3«Z,ee*e+e,«Z-ee"e-e)e«Z.ee.zZ/ee'd4zed5d«ze'd6zed7d«z«Z0edee(«Z1eee1e"e-e0e«zZ2e3ejhe/e2e%e&f«\Z5Z6Z7Z8ed8d9d:d;«ed8d9d£zZ9ejhe#«ejhe$«e7e8d?œe9Dcic]}|›d#e7“Œ c}¥e9Dcic]}|›d$e8“Œ c}¥e9Dcic]}|d“Œc}¥Z:d#d$he9Dchc]}|›d#’Œ c}ze9Dchc]}|›d$’Œ c}zZ;d5d7he9Dchc]}|›d5’Œ c}ze9Dchc]}|›d7’Œ c}zZ«Z?GdC„dDe>«Z@dE„ZAeAfdF„ZBdG„ZCGdH„dI«ZDejhdJejŠ«ZFejhdKejŠ«ZGdL„ZHdM„ZIdN„ZJdO„ZKeLdPk(r\ddlMZMeNeMjž«dkDr&eBePeMjžd«j¢«yeBeMj¤j¢«yycc}w#e$reZ YŒéwxYwcc}wcc}wcc}wcc}wcc}wcc}wcc}w)QaÀTokenization help for Python programs. generate_tokens(readline) is a generator that breaks a stream of text into Python tokens. It accepts a readline-like method which is called repeatedly to get the next line of input (or "" for EOF). It generates 5-tuples with these members: the token type (see token.py) the token (a string) the starting (row, column) indices of the token (a 2-tuple of ints) the ending (row, column) indices of the token (a 2-tuple of ints) the original line (string) It is designed to match the working of the Python tokenizer exactly, except that it produces COMMENT tokens for comments and gives type OP for all operators Older entry points tokenize_loop(readline, tokeneater) tokenize(readline, tokeneater=printtoken) are the same, except instead of generating tokens, tokeneater is a callback function to which the 5 fields described above are passed as 5 arguments, each time a new token is found.zKa-Ping Yee z@GvR, ESR, Tim Peters, Thomas Wouters, Fred Drake, Skip MontanaroéN)ÚBOM_UTF8Úlookup)Ú*é)ÚtokenÚ_)ÚtokenizeÚgenerate_tokensÚ untokenizecó0—ddj|«zdzS)NÚ(Ú|Ú))Újoin©Úchoicess ú//usr/lib64/python3.12/lib2to3/pgen2/tokenize.pyÚgroupr0s€˜C #§(¡(¨7Ó"3Ñ3°cÑ9Ð9ócó—t|ŽdzS)Nr©rrs rÚanyr1s€œ% ˜/¨CÑ/Ð/rcó—t|ŽdzS)NÚ?rrs rÚmayber2s€œE 7˜O¨cÑ1Ð1rcó,‡—tˆfd„‰D««S)Nc3ó€•K—|]5}‰dzD]+}|j«|j«k7sŒ%||z–—Œ-Œ7y­w))ÚN)Úcasefold)Ú.0ÚxÚyÚls €rÚ z _combinations..4s8øèø€ðÙ! ! e¤)˜Q¨q¯z©z«|¸q¿z¹z»|Ó/KˆˆA )ˆ‘qùsƒ.>² >)Úset)r#s`rÚ _combinationsr&3sø€Ü óÙóó ðrz[ \f\t]*z #[^\r\n]*z\\\r?\nz\w+z0[bB]_?[01]+(?:_[01]+)*z(0[xX]_?[\da-fA-F]+(?:_[\da-fA-F]+)*[lL]?z0[oO]?_?[0-7]+(?:_[0-7]+)*[lL]?z[1-9]\d*(?:_\d+)*[lL]?z0[lL]?z[eE][-+]?\d+(?:_\d+)*z\d+(?:_\d+)*\.(?:\d+(?:_\d+)*)?z\.\d+(?:_\d+)*z \d+(?:_\d+)*z\d+(?:_\d+)*[jJ]z[jJ]z[^'\\]*(?:\\.[^'\\]*)*'z[^"\\]*(?:\\.[^"\\]*)*"z%[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''z%[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""z'(?:[uUrRbBfF]|[rR][fFbB]|[fFbBuU][rR])?ú'''ú"""z'[^\n'\\]*(?:\\.[^\n'\\]*)*'z"[^\n"\\]*(?:\\.[^\n"\\]*)*"z\*\*=?z>>=?z<<=?z<>z!=z//=?z->z[+\-*/%&@|^=<>]=?Ú~z[][(){}]z\r?\nz:=z[:;.,`@]z'[^\n'\\]*(?:\\.[^\n'\\]*)*Ú'z"[^\n"\\]*(?:\\.[^\n"\\]*)*Ú"ÚrÚRÚfÚFÚbÚB>ÚUÚuÚURÚUrÚuRÚur)r*r+r'r(écó —eZdZy)Ú TokenErrorN©Ú__name__Ú __module__Ú __qualname__©rrr:r:Šó…rr:có —eZdZy)ÚStopTokenizingNr;r?rrrBrBŒr@rrBc ó`—|\}}|\}}td||||t|t|«fz«y)Nz%d,%d-%d,%d: %s %s)ÚprintÚtok_nameÚrepr) ÚtyperÚxxx_todo_changemeÚxxx_todo_changeme1ÚlineÚsrowÚscolÚerowÚecols rÚ printtokenrOŽs<€Ø$L€Tˆ4Ø%L€Tˆ4Ü Ð Ø ˆtT˜4¤¨$¡´°e³Ð=ñ >õ?rcó<— t||«y#t$rYywxYw)a: The tokenize() function accepts two parameters: one representing the input stream, and one providing an output mechanism for tokenize(). The first parameter, readline, must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. The second parameter, tokeneater, must also be a callable object. It is called once for each token, with five arguments, corresponding to the tuples generated by generate_tokens(). N)Ú tokenize_looprB)ÚreadlineÚ tokeneaters rr r ”s#€ð Üh  Õ+øÜ ò Ù ð ús ‚  šcó.—t|«D]}||ŽŒ y©N)r )rRrSÚ token_infos rrQrQ§s€Ü% hÖ/ˆ ÙJÒñ0rcó$—eZdZd„Zd„Zd„Zd„Zy)Ú Untokenizercó.—g|_d|_d|_y)Nrr)ÚtokensÚprev_rowÚprev_col)Úselfs rÚ__init__zUntokenizer.__init__­s€ØˆŒ ؈Œ ؈ rcó—|\}}||jksJ‚||jz }|r|jjd|z«yy)NÚ )r[r\rZÚappend)r]ÚstartÚrowÚcolÚ col_offsets rÚadd_whitespacezUntokenizer.add_whitespace²sJ€Ø‰ˆˆSØd—m‘mÒ#Ð#Ð#ؘ4Ÿ=™=Ñ(ˆ Ù Ø K‰K× Ñ ˜s ZÑ/Õ 0ð rcóf—|D]’}t|«dk(r|j||«np|\}}}}}|j|«|jj |«|\|_|_|ttfvsŒw|xj dz c_d|_Œ”dj|j«S)Nérrr) ÚlenÚcompatrfrZrar[r\ÚNEWLINEÚNLr)r]ÚiterableÚtÚtok_typerrbÚendrJs rr zUntokenizer.untokenize¹sœ€ÛˆAÜ1‹v˜Š{Ø— ‘ ˜A˜xÔ(ÙØ01Ñ -ˆHe˜U C¨Ø × Ñ  Ô &Ø K‰K× Ñ ˜uÔ %Ø+.Ñ (ˆDŒM˜4œ=ØœG¤R˜=Ò(Ø— ’  Ñ"• Ø !• ððw‰wt—{‘{Ó#Ð#rcóž—d}g}|jj}|\}}|ttfvr|dz }|tt fvrd}|D]†}|dd\}}|ttt tfvr|dz }|tk(r|j|«ŒC|tk(r|j«Œ]|tt fvrd}n|r|r ||d«d}||«Œˆy)NFr`Trhéÿÿÿÿ) rZraÚNAMEÚNUMBERrkrlÚASYNCÚAWAITÚINDENTÚDEDENTÚpop) r]rrmÚ startlineÚindentsÚ toks_appendÚtoknumÚtokvalÚtoks rrjzUntokenizer.compatÇs׀؈ ؈ؗk‘k×(Ñ(ˆ ؉ˆØ ”dœF^Ñ #Ø c‰MˆFØ ”gœr]Ñ "؈IÛˆCØ   !˜W‰NˆFFàœ$¤¬¬uÐ5Ñ5ؘ#‘ àœÒØ—‘˜vÔ&ØØœ6Ò!Ø— ‘ ” ØØœG¤R˜=Ñ(Ø ‘ Ù™wÙ˜G B™KÔ(Ø! Ù ˜Õ ñ#rN)r<r=r>r^rfr rjr?rrrXrX«s„òò 1ò $ó rrXz&^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)s^[ \t\f]*(?:[#\r\n]|$)có¦—|ddj«jdd«}|dk(s|jd«ry|dvs|jd«ry |S) z(Imitates get_normal_name in tokenizer.c.Né rÚ-úutf-8zutf-8-)zlatin-1ú iso-8859-1z iso-latin-1)zlatin-1-z iso-8859-1-z iso-latin-1-r„)ÚlowerÚreplaceÚ startswith)Úorig_encÚencs rÚ_get_normal_namerŠæsX€ð 3Bˆ-× Ñ Ó × 'Ñ '¨¨SÓ 1€CØ ˆg‚~˜Ÿ™¨Ô1ØØ Ð6Ñ6Ø ‡~~ÐAÔBØØ €Orc󇇗dŠd}d}ˆfd„}ˆfd„}|«}|jt«r dŠ|dd}d}|s|gfS||«}|r||gfStj|«s||gfS|«}|s||gfS||«}|r|||gfS|||gfS) a The detect_encoding() function is used to detect the encoding that should be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used (as a string) and a list of any lines (left as bytes) it has read in. It detects the encoding from the presence of a utf-8 bom or an encoding cookie as specified in pep-0263. If both a bom and a cookie are present, but disagree, a SyntaxError will be raised. If the encoding cookie is an invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. FNrƒcóF•— ‰«S#t$r t«cYSwxYwrU)Ú StopIterationÚbytes)rRs€rÚ read_or_stopz%detect_encoding..read_or_stops&ø€ð Ù“:Ð øÜò Ü“7ŠNð ús ƒ Š Ÿ có>•— |jd«}tj|«}|syt |j d««} t |«}‰r|jdk7r td«‚|dz }|S#t$rYywxYw#t$rtd|z«‚wxYw)NÚasciirzunknown encoding: rƒzencoding problem: utf-8z-sig) ÚdecodeÚUnicodeDecodeErrorÚ cookie_reÚmatchrŠrrÚ LookupErrorÚ SyntaxErrorÚname)rJÚ line_stringr•ÚencodingÚcodecÚ bom_founds €rÚ find_cookiez$detect_encoding..find_cookie s®ø€ð ØŸ+™+ gÓ.ˆKô—‘  Ó,ˆÙØÜ# E§K¡K°£NÓ3ˆð ?ܘ8Ó$ˆEñ Øz‰z˜WÒ$ä!Ð";Ó<Ð<Ø ˜Ñ ˆH؈øô#"ò Ùð ûôò ?äÐ2°XÑ=Ó>Ð >ð ?úsƒA5Á BÁ5 BÂBÂBTéz utf-8-sig)r‡rÚblank_rer•)rRršÚdefaultrrÚfirstÚsecondrœs` @rÚdetect_encodingr£ñsÌù€ð$€IØ€HØ€Gôô ñ, ‹N€EØ ×ÑœÔ!؈ Øab ˆØˆÙ ؘˆ{Ðá˜5Ó!€HÙØ˜%˜Ð Ð Ü >‰>˜%Ô Ø˜˜ÐÐá ‹^€F٠ؘ˜ÐÐá˜6Ó"€HÙØ˜% ˜Ð(Ð(à U˜FOÐ #Ð#rcó8—t«}|j|«S)a«Transform tokens back into Python source code. Each element returned by the iterable must be a token sequence with at least two elements, a token number and token value. If only two tokens are passed, the resulting output is poor. Round-trip invariant for full input: Untokenized source will match input source exactly Round-trip invariant for limited input: # Output text will tokenize the back to the input t1 = [tok[:2] for tok in generate_tokens(f.readline)] newcode = untokenize(t1) readline = iter(newcode.splitlines(1)).next t2 = [tok[:2] for tokin generate_tokens(readline)] assert t1 == t2 )rXr )rmÚuts rr r :s€ô$ ‹€BØ =‰=˜Ó "Ð"rc#óž K—dx}x}}d\}}d}dg}d}d} d} d} |«} |dz}dt| «}} |r’| s td«‚j| «}|r4|j d«x} }t || d|z||f|| zf–—d\}}d}nØ|r0| ddd k7r(| d dd k7r t || z|t| «f|f–—d}d}Œ¤|| z}|| z}Œ¯|dk(rƒ|s€| sn/d}| |krA| | d k(r|dz}n(| | d k(r|tzdztz}n | | dk(rd}nn | dz} | |krŒA| |k(rnà|r|–—d}| | dvr“| | dk(r]| | djd«}| t|«z}t||| f|| t|«zf| f–—t| |d||f|t| «f| f–—n,ttf| | dk(| | d|| f|t| «f| f–—Œ­||dkDr%|j|«t| d| |df|| f| f–—||dkrC||vrtdd|| | f«‚|dd}| r| |dk\rd} d} d} td|| f|| f| f–—||dkrŒC| r#| r!| |dk\rd} d} d} n| std|df«‚d}| |kr™tj| | «}|r]|j!d«\}}||f||f|} }}| ||| |}}|t"j$vs |dk(r|dk7rt&|||| f–—n&|dvr)t(}|dkDrt}n| rd} |r|–—d}||||| f–—nù|dk(r+|j*d«rJ‚|r|–—d}t|||| f–—nÉ|t,vrYt.|}|j| | «}|r/|j d«} | || }|r|–—d}t |||| f| f–—nu||f}| |d}| }no|t0vs|ddt0vs |ddt0vrR|ddk(r4||f}t.|xst.|dxs t.|d}| |dd}}| }n|r|–—d}t |||| f–—nø|j3«r„|dvr| r|dk(rt4nt6|||| f–—ŒÐt8|||| f}|dk(r|s|}Œæ|dvr=|r;|dt8k(r/|ddk(r'|dk(rd} |d} t4|d|d|d|df–—d}|r|–—d}|–—nd|d k(r|r|–—d}t|||| f| f–—d}nE|d!vr|dz}n |d"vr|dz }|r|–—d}t:|||| f–—nt | | || f|| dzf| f–—| dz} | |krŒ™Œê|r|–—d}|ddD]}td|df|dfdf–—Œt<d|df|dfdf–—y#t$rd} YŒ%wxYw­w)#a4 The generate_tokens() generator requires one argument, readline, which must be a callable object which provides the same interface as the readline() method of built-in file objects. Each call to the function should return one line of input as a string. Alternately, readline can be a callable function terminating with StopIteration: readline = open(myfile).next # Example of alternate readline The generator produces 5-tuples with these members: the token type; the token string; a 2-tuple (srow, scol) of ints specifying the row and column where the token begins in the source; a 2-tuple (erow, ecol) of ints specifying the row and column where the token ends in the source; and the line on which the token was found. The line passed is the physical line. r)rrNFrrzEOF in multi-line stringéþÿÿÿz\ éýÿÿÿz\ r`Ú Ú z# Ú#z rrz3unindent does not match any outer indentation levelz zEOF in multi-line statementÚ.TÚ rhrž)ÚasyncÚawaitr®)ÚdefÚforr°éÚ\z([{z)]})rrir:r•rpÚSTRINGÚ ERRORTOKENÚtabsizeÚrstripÚCOMMENTrlrarwÚIndentationErrorrxÚ pseudoprogÚspanÚstringÚdigitsrtrkÚendswithÚ triple_quotedÚendprogsÚ single_quotedÚ isidentifierrurvrsÚOPÚ ENDMARKER)rRÚlnumÚparenlevÚ continuedÚcontstrÚneedcontÚcontliner{ÚstashedÚ async_defÚasync_def_indentÚ async_def_nlrJÚposÚmaxÚstrstartÚendprogÚendmatchrpÚcolumnÚ comment_tokenÚnl_posÚ pseudomatchrbÚsposÚeposrÚinitialÚnewlinerÚindents rr r Osèø€ð #$Ð#€DÐ#ˆ8iØÑ€GˆXØ€H؈c€Gð€GØ€IØÐØ€Là ð Ù“:ˆDða‰xˆØ”c˜$“iˆSˆá ÙÜ Ð!;¸XÓFÐFØ—}‘} TÓ*ˆHÙØ$ŸL™L¨›OÐ+cܘw¨¨d¨s¨Ñ3Ø $¨ ¨h¸©oð?ò?à$)Ñ!˜Ø’Ù˜d 2 3˜i¨6Ò1°d¸2¸3°iÀ8Ò6KÜ! 7¨T¡>Ø# d¬C°«IÐ%6¸ðBòBàØØà! D™.Ø# d™?Øà ˜‹]¢9ٙ؈Fؘ’)ؘ‘9 Ò#¨f°q©j¡Vؘ#‘Y $Ò&°&¼'±/ÀAÑ2EÄwÑ1N©Ø˜#‘Y $Ò&°©ØØ˜A‘g𠘓)ð cŠz™5áØ’ ØàC‰y˜GÑ#ؘ‘9 Ò#Ø$(¨¨ J×$5Ñ$5°fÓ$=MØ ¤3 }Ó#5Ñ5FÜ" MØ  #˜;¨¨s´S¸Ó5GÑ/GÐ(HÈ$ðPòPä˜t F G˜}Ø  &˜>¨D´#°d³)Ð+<¸dðDóDô¤˜=¨¨c©°cÑ)9Ñ:¸DÀÀ¸JØ  #˜;¨¬s°4«yÐ(9¸4ðAòAáà˜ ™ Ò#Ø—‘˜vÔ&ܘt D S˜z¨D°!¨9°t¸S°kÀ4ÐHÒHؘ7 2™;Ò&Ø Ñ(Ü*ØMØ% t¨S°$Ð7ó9ð9ð" # 2˜,áÐ!1°W¸R±[Ò!@Ø %IØ#(LØ'(Ð$ä˜r D¨# ;°°s° ¸TÐBÒBð˜7 2™;Ó&ñ™\Ð.>À'È"Á+Ò.MØ! Ø$ Ø#$Ñ ñÜ Ð!>ÀÀqÀ ÓJÐJ؈IàC‹iÜ$×*Ñ*¨4°Ó5ˆKÚØ(×-Ñ-¨aÓ0‘ sØ#'¨ -°$¸°¸c˜CdØ!% e¨C °$°u±+wàœfŸm™mÑ+ؘs’N u°¢|Ü! 5¨$°°dÐ;Ô;Ø Ñ&Ü%GØ !’|Ü"$™Ù"Ø'+˜ ÙØ%š Ø"&˜Ø" E¨4°°tÐ<Ô<à ’^Ø-˜uŸ~™~¨dÔ3Ð3Ð3ÙØ%š Ø"&˜Ü" E¨4°°tÐ<Ô<ØœmÑ+Ü& u™oGØ&Ÿ}™}¨T°3Ó7HÙØ&Ÿl™l¨1›o˜Ø $ U¨3 ˜Ù"Ø")šMØ&*˜GÜ% u¨d°T¸3°KÀÐFÔFà$(¨% =˜Ø"& u v ,˜Ø#'˜Ùؤ Ñ-ؘ"˜1I¤Ñ.ؘ"˜1I¤Ñ.ؘR‘y DÒ(Ø$(¨% =˜Ü#+¨GÑ#4ò$6¼ÀÀqÁÑ8Jò$6Ü#+¨E°!©HÑ#5ð à,0°°¨L¸! ˜Ø#'˜Ùá"Ø")šMØ&*˜GÜ% u¨d°D¸$Ð?Ó?Ø×)Ñ)Ô+ØÐ 2Ñ2Ù$Ø,1°WÒ,<¥5Ä%Ø#(¨$°°dð#<ò<á$ä ¨¨d°DÐ9CØ Ò'±Ø"%˜Ù à Ñ.Ù#Ø$+¨A¡J´$Ò$6Ø$+¨A¡J°'Ò$9à$¨š~Ø,0  Ø3:¸2±;Ð 0ä#(¨'°!©*Ø#*¨1¡:¨w°q©zØ#*¨1¡:ð#/ò/ð'+˜GáØ%š Ø"&˜à“IØ ’_áØ%š Ø"&˜Ü˜u d¨T°3¨K¸Ð>Ò>Ø !‘Ià %Ñ'°H¸q±L©Ø  EÑ)°hÀ±l¨8ÙØ%š Ø"&˜Ü˜u d¨D°$Ð7Ó7ä! 4¨¡9Ø  #˜;¨¨s°1©u¨ °tð=ò=à˜A‘gðSCŒiñi ñ~ØŠ ؈à˜!˜"“+ˆÜr˜D !˜9 t¨Q i°Ð4Ó4ðä b˜4 ˜) d¨A Y°Ð 3Ó3øôEò Ø‹Dð üs<‚U T;¤C:U ÄD U ÉKU Ô7U Ô; U ÕU Õ U Õ U Ú__main__)SÚ__doc__Ú __author__Ú __credits__r¼ÚreÚcodecsrrÚlib2to3.pgen2.tokenrrÚdirÚ__all__rŽÚ NameErrorÚstrrrrr&Ú WhitespaceÚCommentÚIgnoreÚNameÚ BinnumberÚ HexnumberÚ OctnumberÚ DecnumberÚ IntnumberÚExponentÚ PointfloatÚExpfloatÚ FloatnumberÚ ImagnumberÚNumberÚSingleÚDoubleÚSingle3ÚDouble3Ú _litprefixÚTripleÚStringÚOperatorÚBracketÚSpecialÚFunnyÚ PlainTokenÚTokenÚContStrÚ PseudoExtrasÚ PseudoTokenÚmapÚcompileÚ tokenprogrºÚ single3progÚ double3progÚ _strprefixesrÀr¿rÁr¶Ú Exceptionr:rBrOr rQrXÚASCIIr”rŸrŠr£r r r<ÚsysriÚargvÚopenrRÚstdin)r!Úprefixs00rÚrsŸðñ#ð0*€ àFð ÷ß#Ü!åÙ˜%”jÓ 0‘j A a¡D¨C£KŠ1jÑ 0ò4,ñ ,€à ðÙ ò :Ú/Ú1òð € Ø €Ø ‘c˜* zÑ1Ó2Ñ 2±U¸7³^Ñ C€Ø €à &€ Ø 7€ Ø .€ Ù Ð+¨XÓ 6€ Ù )˜Y¨ °9Ó =€ Ø #€Ù Ð5Ð7HÓ IÉEÐRZËOÑ [€ Ø ˜XÑ %€ÙJ Ó)€ Ù Ð&¨ °gÑ(=Ó >€ Ù ˆz˜;¨ Ó 2€ð $€à #€à 2€à 2€Ø 7€ Ù ˆz˜EÑ! :°Ñ#5Ó 6€á ˆzÐ;Ñ;ØÐ;Ñ;ó =€ñ ˜G W¨e°Uؘ%Ø%Øó €ð €Ù ˜% Ó -€Ù ˆh˜ Ó)€á 6˜5 &¨$Ó /€ ØÑ€ñ  Ð;Ñ;Ùc˜:Ó&ñ'àÐ;Ñ;Ùc˜:Ó&ñ'ó (€ñZ ¨&Ó1€ Ø™5 ¨v°u¸gÀtÓLÑL€ á25؇JJ˜  W¨gÐ6ó38Ñ/€ ˆ:{ Kñ#s˜C Ó%Ù#s˜C Ó%ñ&â&ñ'ð ð —‘˜FÓ#¨*¨"¯*©*°VÓ*<Ø {ñ 9á9EÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ:FÓF¹¨v&˜ˆ~˜{Ñ*¸ÑFð 9ñ+7Ó7©, ˆvt‰|¨,Ñ7ð  9€ð ˆE€NÙ".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0á".Ó/¡,˜ˆ€xˆs‚^ ,Ñ/ñ0ðð  ˆ#€JÙ ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.á ,Ó-¡ fˆ€xˆq‚\  Ñ-ñ.ðð €ä!Ô!ä%YÔ%ò?ð #-ó ò& ÷6 ñ6 ðp ˆBJ‰JÐ@À"Ç(Á(Ó K€ Ø ˆ2:‰:Ð0°"·(±(Ó ;€ò òG$òR#ò*`4ðD ˆzÒÛÙ ˆ38‰8ƒ}qÒ™(¡4¨¯©°© Ó#4×#=Ñ#=Õ>Ù 3—9‘9×%Ñ%Õ &ðùòY 1øð òð ƒEðüò\GùÚFùÚ7ùò0ùÚ/ùò.ùÚ-sF¬ L$ºL$ÁL)Ç L7Ç L<Ç) MÇ> MÈ M È* MÈ> MÌ)L4Ì3L4lib2to3/pgen2/__pycache__/token.cpython-312.opt-2.pyc000064400000004226152462633570016051 0ustar00Ë T—çhãóx— dZdZdZdZdZdZdZdZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&d'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9d:Z:d;Z;de?e@«jƒ««D]\ZBZCeDeCeE«sŒeBe>eC<Œd>„ZFd?„ZGd@„ZHyA)Béééééééééé é é é é ééééééééééééééééééé é!é"é#é$é%é&é'é(é)é*é+é,é-é.é/é0é1é2é3é4é5é6é7é8é9é:é;é<écó—|tkS©N©Ú NT_OFFSET©Úxs ú,/usr/lib64/python3.12/lib2to3/pgen2/token.pyÚ ISTERMINALrGOs €Ø Œy‰=Ðócó—|tk\SrArBrDs rFÚ ISNONTERMINALrJRó €Ø ” ‰>ÐrHcó—|tk(SrA)Ú ENDMARKERrDs rFÚISEOFrNUrKrHN)IrMÚNAMEÚNUMBERÚSTRINGÚNEWLINEÚINDENTÚDEDENTÚLPARÚRPARÚLSQBÚRSQBÚCOLONÚCOMMAÚSEMIÚPLUSÚMINUSÚSTARÚSLASHÚVBARÚAMPERÚLESSÚGREATERÚEQUALÚDOTÚPERCENTÚ BACKQUOTEÚLBRACEÚRBRACEÚEQEQUALÚNOTEQUALÚ LESSEQUALÚ GREATEREQUALÚTILDEÚ CIRCUMFLEXÚ LEFTSHIFTÚ RIGHTSHIFTÚ DOUBLESTARÚ PLUSEQUALÚMINEQUALÚ STAREQUALÚ SLASHEQUALÚ PERCENTEQUALÚ AMPEREQUALÚ VBAREQUALÚCIRCUMFLEXEQUALÚLEFTSHIFTEQUALÚRIGHTSHIFTEQUALÚDOUBLESTAREQUALÚ DOUBLESLASHÚDOUBLESLASHEQUALÚATÚATEQUALÚOPÚCOMMENTÚNLÚRARROWÚAWAITÚASYNCÚ ERRORTOKENÚ COLONEQUALÚN_TOKENSrCÚtok_nameÚlistÚglobalsÚitemsÚ_nameÚ_valueÚ isinstanceÚintrGrJrN©rHrFÚr”s‰ðð(ð € Ø€Ø €Ø €Ø €Ø €Ø €Ø€Ø€Ø€Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø€Ø €Ø € Ø €Ø €Ø €Ø €Ø € Ø€ Ø €Ø € Ø € Ø € Ø € Ø € Ø €Ø € Ø € Ø€ Ø € Ø € ؀؀؀؀؀ ØÐØ€Ø €Ø€Ø €Ø€Ø €Ø €Ø €Ø € Ø € Ø €Ø € ð €Ù™'›)Ÿ/™/Ó+Ö,M€Eˆ6Ù&˜#ÕØ ˆÒð-ò òórHlib2to3/pgen2/__pycache__/literals.cpython-312.pyc000064400000005041152462633570015604 0ustar00Ë T—çhcã óV—dZddlZddddddd d d d d œ Zd„Zd„Zd„Zedk(re«yy)z‰>˜$Ô ÐÐ Ü × Ñ ˜TÓ "€CØ €Øˆ Ø ‡sÔØQRˆÜ ˆu‹:˜Š>ÜÐAÀDÑHÓIÐ Ið TÜE˜2“ˆAô ˆq‹6€Mð  VÜD˜!“ ˆAô ˆq‹6€Møôò TÜÐAÀDÑHÓIÈtÐ Sð Tûô ò VÜÐCÀdÑJÓKÐQUÐ Uð VúsÁ5 B$ CÂ$B=ÃCcó—|jd«s$|jd«sJt|dd««‚|d}|dd|dzk(r|dz}|j|«sJt|t|« d««‚t|«dt|«zk\sJ‚|t|«t|« }t j dt |«S)Nr r rrérz)\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}))rÚreprÚendswithrÚreÚsubr))ÚsÚqs r(Ú evalStringr2(s»€Ø <‰<˜Ô  § ¡ ¨SÔ 1Ð>´4¸¸"¸1¸³;Ó>Ð 1Ø ˆ!‰€A؈ˆ!€u!‘‚|Ø ˆa‰CˆØ :‰:aŒ=Ð+œ$˜q¤# a£&  ˜{Ó+Ó+ˆ=Ü ˆq‹6Q”s˜1“v‘XÒ ÐÐ Ø Œ#ˆa‹&”#a“&ЀAÜ 6‰6Ð>ÄÈÓ JÐJócóŽ—td«D]7}t|«}t|«}t|«}||k7sŒ*t ||||«Œ9y)Né)Úranger!r,r2Úprint)r'Úcr0Úes r(Útestr:2s@€Ü 3ŽZˆÜ ‹FˆÜ ‹GˆÜ q‹MˆØ ‹6Ü !Q˜˜1Õ ñ r3Ú__main__)Ú__doc__r.rr)r2r:Ú__name__©r3r(Úr?sWðñCã àØØØØØØØØØñ €òò*Kòð ˆzÒÙ…Fðr3lib2to3/pgen2/__pycache__/pgen.cpython-312.pyc000064400000044420152462633570014722 0ustar00Ë T—çh6ãóŒ—ddlmZmZmZGd„dej«ZGd„de«ZGd„de«ZGd„d e«Z d d „Z y ) é)ÚgrammarÚtokenÚtokenizecó —eZdZy)Ú PgenGrammarN)Ú__name__Ú __module__Ú __qualname__©óú+/usr/lib64/python3.12/lib2to3/pgen2/pgen.pyrrs„Ør rcó|—eZdZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zdd„Zd„Zd„Zy)ÚParserGeneratorNcó<—d}|€t|d¬«}|j}||_||_t j |j «|_|j«|j«\|_ |_ ||«i|_ |j«y)Nzutf-8)Úencoding)ÚopenÚcloseÚfilenameÚstreamrÚgenerate_tokensÚreadlineÚ generatorÚgettokenÚparseÚdfasÚ startsymbolÚfirstÚ addfirstsets)ÚselfrrÚ close_streams r Ú__init__zParserGenerator.__init__ s€Øˆ Ø ˆ>ܘ(¨WÔ5ˆFØ!Ÿ<™<ˆLØ ˆŒ ؈Œ Ü!×1Ñ1°&·/±/ÓBˆŒØ ‰ ŒØ&*§j¡j£lÑ#ˆŒ 4Ô#Ø Ð #Ù ŒN؈Œ Ø ×ÑÕr c ó´—t«}t|jj««}|j «|j |j «|jd|j «|D]8}dt|j«z}||j|<||j|<Œ:|D]}|j|}g}|D] }g}t|jj««D]7\} } |j|j|| «|j!| «f«Œ9|j"r"|jd|j!|«f«|j|«Œ¢|j$j|«||j'||«f|j|j|<Œ|j|j |_|S)Néé)rÚlistrÚkeysÚsortÚremoverÚinsertÚlenÚ symbol2numberÚ number2symbolÚsortedÚarcsÚitemsÚappendÚ make_labelÚindexÚisfinalÚstatesÚ make_firstÚstart) rÚcÚnamesÚnameÚiÚdfar4Ústater.ÚlabelÚnexts r Ú make_grammarzParserGenerator.make_grammarsz€Ü ‹MˆÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ Ø ‰ T×%Ñ%Ô&Ø ‰ Q˜×(Ñ(Ô)ÛˆDØ”c˜!Ÿ/™/Ó*Ñ*ˆAØ$%ˆAO‰O˜DÑ !Ø!%ˆAO‰O˜AÒ ðôˆDØ—)‘)˜D‘/ˆC؈FÛØÜ#)¨%¯*©*×*:Ñ*:Ó*<Ö#=‘KE˜4Ø—K‘K §¡°°EÓ!:¸C¿I¹IÀd»OÐ LÕMð$>à—=’=Ø—K‘K  C§I¡I¨eÓ$4Ð 5Ô6Ø— ‘ ˜dÕ#ð ð H‰HO‰O˜FÔ #Ø-3°T·_±_ÀQÈÓ5MÐ,NˆAF‰F1—?‘? 4Ñ(Ó )ðð—/‘/ $×"2Ñ"2Ñ3ˆŒØˆr cóv—|j|}i}t|«D]}|j||«}d||<Œ|S©Nr)rr-r1)rr7r9Úrawfirstrr=Úilabels r r5zParserGenerator.make_first4sD€Ø—:‘:˜dÑ#ˆØˆÜ˜HÖ%ˆEØ—_‘_ Q¨Ó.ˆFàˆE&ŠMð&ðˆ r cóü—t|j«}|dj«rò||jvrX||jvr|j|S|jj |j|df«||j|<|St t|d«}t|t«sJ|«‚|tjvsJ|«‚||jvr|j|S|jj |df«||j|<|S|ddvsJ|«‚t|«}|dj«rY||jvr|j|S|jj tj|f«||j|<|Stj |}||jvr|j|S|jj |df«||j|<|S)Nr#)Ú"Ú')r*ÚlabelsÚisalphar+Ú symbol2labelr0ÚgetattrrÚ isinstanceÚintÚtok_nameÚtokensÚevalÚkeywordsÚNAMErÚopmap)rr7r=rCÚitokenÚvalues r r1zParserGenerator.make_label=sÀ€äQ—X‘X“ˆØ ‰8× Ñ Ô à˜Ÿ™Ñ'à˜AŸN™NÑ*ØŸ>™>¨%Ñ0Ð0à—H‘H—O‘O Q§_¡_°UÑ%;¸TÐ$BÔCØ,2A—N‘N 5Ñ)Ø!Mô!¤¨¨tÓ4Ü! &¬#Ô.Ð5°Ó5Ð.ؤ§¡Ñ/Ð6°Ó6Ð/ؘQŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mð˜‘8˜zÑ)Ð 0¨5Ó 0Ð)ܘ“KˆEØQ‰x×ÑÔ!à˜AŸJ™JÑ&ØŸ:™: eÑ,Ð,à—H‘H—O‘O¤U§Z¡Z°Ð$7Ô8Ø(.A—J‘J˜uÑ%Ø!Mô!Ÿ™ uÑ-ؘQŸX™XÑ%ØŸ8™8 FÑ+Ð+à—H‘H—O‘O V¨T NÔ3Ø'-A—H‘H˜VÑ$Ø!Mr có¸—t|jj««}|j«|D]"}||jvsŒ|j |«Œ$y©N)r%rr&r'rÚ calcfirst)rr8r9s r rzParserGenerator.addfirstsetsksB€ÜT—Y‘Y—^‘^Ó%Ó&ˆØ ‰ Œ ÛˆDؘ4Ÿ:™:Ò%Ø—‘˜tÕ$ñr c ó8—|j|}d|j|<|d}i}i}|jj«D]ƒ\}}||jvrd||jvr|j|}|€.t d|z«‚|j |«|j|}|j |«|||<Œxd||<|di||<Œ…i} |j«D]/\}} | D]%} | | vrt d|›d| ›d|›d| | ›«‚|| | <Œ'Œ1||j|<y)Nr#zrecursion for rule %rrzrule z is ambiguous; z is in the first sets of z as well as )rrr.r/Ú ValueErrorrWÚupdate) rr9r;r<ÚtotalsetÚ overlapcheckr=r>ÚfsetÚinverseÚitsfirstÚsymbols r rWzParserGenerator.calcfirstss;€Øi‰i˜‰oˆØˆ ‰ 4ÑØA‘ˆØˆØˆ Ø Ÿ:™:×+Ñ+Ö-‰KˆE4ؘŸ ™ Ñ!ؘDŸJ™JÑ&ØŸ:™: eÑ,DØ|Ü(Ð)@À4Ñ)GÓHÐHà—N‘N 5Ô)ØŸ:™: eÑ,DØ—‘ Ô%Ø&* ˜UÒ#à"#˜‘Ø',¨a j ˜UÒ#ð.ðˆØ+×1Ñ1Ö3‰OˆE8Û"ؘWÑ$Ý$â&*ªF²E¸7À6º?ð&LóMðMð#(˜’ñ #ð 4ð$ˆ ‰ 4Òr cóˆ—i}d}|jtjk7r|jtjk(r.|j «|jtjk(rŒ.|j tj «}|j tjd«|j«\}}|j tj«|j||«}t|«}|j|«t|«}|||<|€|}|jtjk7rŒ||fS)NÚ:) ÚtyperÚ ENDMARKERÚNEWLINErÚexpectrQÚOPÚ parse_rhsÚmake_dfar*Ú simplify_dfa) rrrr9ÚaÚzr;ÚoldlenÚnewlens r rzParserGenerator.parse‘sð€ØˆØˆ ài‰iœ5Ÿ?™?Ó*Ø—)‘)œuŸ}™}Ò,Ø— ‘ ”ð—)‘)œuŸ}™}Ó,ð—;‘;œuŸz™zÓ*ˆDØ K‰KœŸ™ #Ô &Ø—>‘>Ó#‰DˆAˆqØ K‰KœŸ ™ Ô &à—-‘-  1Ó%ˆC䘓XˆFØ × Ñ ˜cÔ "ܘ“XˆF؈D‰JàÐ"Ø" ð#i‰iœ5Ÿ?™?Ô*ð$[Ð Ð r c óî‡ —t|t«sJ‚t|t«sJ‚ˆ fd„}ˆ fd„Š t||«|«g}|D]­}i}|jD]2}|jD]!\}} |€Œ ‰ | |j |i««Œ#Œ4t |j««D]L\}} |D]} | j| k(sŒnt| |«} |j| «|j| |«ŒNŒ¯|S)Ncó•—i}‰||«|SrVr )r<ÚbaseÚ addclosures €r Úclosurez)ParserGenerator.make_dfa..closure°sø€ØˆDÙ u˜dÔ #؈Kr có~•—t|t«sJ‚||vryd||<|jD]\}}|Œ ‰||«ŒyrA)rKÚNFAStater.)r<rqr=r>rrs €r rrz,ParserGenerator.make_dfa..addclosure´sGø€Ü˜e¤XÔ.Ð .Ð.ؘ‰}ØØˆD‰KØ$Ÿzœz‘ tØ‘=Ù˜t TÕ*ñ *r ) rKruÚDFAStateÚnfasetr.Ú setdefaultr-r/r0Úaddarc) rr6Úfinishrsr4r<r.Únfastater=r>rwÚstrrs @r rizParserGenerator.make_dfa©sñø€ô ˜%¤Ô*Ð*Ð*ܘ&¤(Ô+Ð+Ð+ô ô +ô™7 5›>¨6Ó2Ð3ˆÛˆE؈DØ!ŸLœLØ#+§=¤=‘KE˜4ØÑ(Ù" 4¨¯©¸ÀÓ)CÕDñ$1ð)ô"(¨¯ © « Ö!5‘ vÛ BØ—y‘y FÓ*Ùð!ô" &¨&Ó1BØ—M‘M "Ô%Ø— ‘ ˜R Õ'ñ"6ð ðˆ r cóD—td|«|g}t|«D]ƒ\}}td|||uxrdxsd«|jD]X\}}||vr|j|«} nt |«} |j |«|€td| z«ŒItd|| fz«ŒZŒ…y)NzDump of NFA forú Stateú(final)Úz -> %dú %s -> %d)ÚprintÚ enumerater.r2r*r0) rr9r6rzÚtodor:r<r=r>Újs r Údump_nfazParserGenerator.dump_nfaÍsž€Ü РÔ&؈wˆÜ! $ž‰HˆAˆuÜ )˜Q ¨ Ò =°IÒ CÀÔ DØ$Ÿzœz‘ tؘ4‘<ØŸ ™  4Ó(‘Aä˜D› AØ—K‘K Ô%Ø=ܘ+¨™/Õ*ä˜.¨E°1¨:Ñ5Õ6ñ *ñ(r c ó—td|«t|«D]n\}}td||jxrdxsd«t|jj ««D]$\}}td||j |«fz«Œ&Œpy)NzDump of DFA forr~rr€r)r‚rƒr3r-r.r/r2)rr9r;r:r<r=r>s r Údump_dfazParserGenerator.dump_dfaÝss€Ü РÔ&Ü! #ž‰HˆAˆuÜ )˜Q § ¡ Ò ;°)Ò A¸rÔ BÜ% e§j¡j×&6Ñ&6Ó&8Ö9‘ tÜn¨¨s¯y©y¸«Ð'?Ñ?Õ@ñ :ñ'r cóÌ—d}|r`d}t|«D]L\}}t|dzt|««D],}||}||k(sŒ||=|D]}|j||«Œd}ŒLŒN|rŒ_yy)NTFr)rƒÚranger*Ú unifystate)rr;Úchangesr:Ústate_ir…Ústate_jr<s r rjzParserGenerator.simplify_dfaäs{€ðˆÙ؈GÜ'¨žn‘ 7ܘq ™s¤C¨£HÖ-AØ! !™fGØ 'Ó)à ˜FÛ%(˜EØ!×,Ñ,¨W°gÕ>ð&)à"&˜Ùñ.ð-ôr cóŠ—|j«\}}|jdk7r||fSt«}t«}|j|«|j|«|jdk(rU|j «|j«\}}|j|«|j|«|jdk(rŒU||fS)NÚ|)Ú parse_altrTruryr)rrkrlÚaaÚzzs r rhzParserGenerator.parse_rhsùsŸ€à~‰~Ó‰ˆˆ1Ø :‰:˜Ò Øa4ˆK䓈BÜ“ˆBØ I‰IaŒLØ H‰HRŒLØ—*‘* Ò#Ø— ‘ ”Ø—~‘~Ó'‘1Ø— ‘ ˜!” Ø—‘˜” ð —*‘* Ó#ð r6ˆMr cóh—|j«\}}|jdvs,|jtjtj fvrb|j«\}}|j |«|}|jdvrŒ5|jtjtj fvrŒb||fS)N)Ú(Ú[)Ú parse_itemrTrcrrQÚSTRINGry)rrkÚbr7Úds r r‘zParserGenerator.parse_alt s‰€à‰Ó ‰ˆˆ1Øz‰z˜ZÑ'Øy‰yœUŸZ™Z¬¯©Ð6Ñ6Ø—?‘?Ó$‰DˆAˆqØ H‰HQŒK؈Að z‰z˜ZÒ'Øy‰yœUŸZ™Z¬¯©Ð6Ò6ð!ˆtˆ r cóz—|jdk(rX|j«|j«\}}|jtj d«|j |«||fS|j«\}}|j}|dvr||fS|j«|j |«|dk(r||fS||fS)Nr–Ú])Ú+Ú*r)rTrrhrfrrgryÚ parse_atom)rrkrlrTs r r—zParserGenerator.parse_items¤€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Ø H‰HQŒKØa4ˆKà—?‘?Ó$‰DˆAˆqØ—J‘JˆEؘJÑ&ؘ!t Ø M‰MŒOØ H‰HQŒKؘŠ|ؘ!t à˜!t r cóÞ—|jdk(rG|j«|j«\}}|jtj d«||fS|j tjtjfvrDt«}t«}|j||j«|j«||fS|jd|j |j«y)Nr•Ú)z+expected (...) or NAME or STRING, got %s/%s) rTrrhrfrrgrcrQr˜ruryÚ raise_error)rrkrls r rŸzParserGenerator.parse_atom(s«€à :‰:˜Ò Ø M‰MŒOØ—>‘>Ó#‰DˆAˆqØ K‰KœŸ™ #Ô &Øa4ˆKØ Y‰Yœ5Ÿ:™:¤u§|¡|Ð4Ñ 4Ü“ ˆAÜ“ ˆAØ H‰HQ˜Ÿ ™ Ô #Ø M‰MŒOØa4ˆKà × Ñ ÐJØ!ŸY™Y¨¯ © õ 4r cóЗ|j|k7s|8|j|k7r)|jd|||j|j«|j}|j«|S)Nzexpected %s/%s, got %s/%s)rcrTr¢r)rrcrTs r rfzParserGenerator.expect9sX€Ø 9‰9˜Ò  Ð!2°t·z±zÀUÒ7JØ × Ñ Ð8Ø! 5¨$¯)©)°T·Z±Zô Aà— ‘ ˆØ ‰ ŒØˆ r có0—t|j«}|dtjtjfvr;t|j«}|dtjtjfvrŒ;|\|_|_|_|_|_ y)Nr#) r>rrÚCOMMENTÚNLrcrTÚbeginÚendÚline)rÚtups r rzParserGenerator.gettokenAsp€Ü4—>‘>Ó"ˆØ!‰fœ×)Ñ)¬8¯;©;Ð7Ñ7Üt—~‘~Ó&ˆCð!‰fœ×)Ñ)¬8¯;©;Ð7Ò7àADÑ>ˆŒ 4”:˜tœz¨4¬8°TµYr c óô—|r ||z}t ||j |j d|j d|jf«‚#dj|gttt|««z«}YŒnxYw)NÚ r#r)Újoinr%ÚmapÚstrÚ SyntaxErrorrr¨r©)rÚmsgÚargss r r¢zParserGenerator.raise_errorHsq€Ù ð =ؘD‘jô˜# § ¡ ¨t¯x©x¸©{Ø $§¡¨¡ ¨T¯Y©Yð 8ó9ð 9øð =Ø—h‘h ˜u¤t¬C´°T«NÓ';Ñ;Ó<’ús „AÁ.A7rV)rr r r!r?r5r1rrWrrir†rˆrjrhr‘r—rŸrfrr¢r r r rr s`„ó òò2ò,"ò\%ò$ò<!ò0"òH7ò Aòò*ò"òò(4ó"òEó9r rcó—eZdZd„Zdd„Zy)rucó—g|_yrV)r.)rs r r!zNFAState.__init__Ss €Øˆ r NcóŠ—|t|t«sJ‚t|t«sJ‚|jj ||f«yrV)rKr¯rur.r0©rr>r=s r ryzNFAState.addarcVs<€Øˆ}¤ ¨5´#Ô 6Ð6Ð6ܘ$¤Ô)Ð)Ð)Ø ‰ ×ј% ˜Õ'r rV)rr r r!ryr r r ruruQs „òô(r rucó(—eZdZd„Zd„Zd„Zd„ZdZy)rvcó—t|t«sJ‚ttt|««t«sJ‚t|t«sJ‚||_||v|_i|_yrV)rKÚdictr>Úiterrurwr3r.)rrwÚfinals r r!zDFAState.__init__]sT€Ü˜&¤$Ô'Ð'Ð'Üœ$œt F›|Ó,¬hÔ7Ð7Ð7ܘ%¤Ô*Ð*Ð*؈Œ Ø ˆŒ ؈ r cóŠ—t|t«sJ‚||jvsJ‚t|t«sJ‚||j|<yrV)rKr¯r.rvr¶s r ryzDFAState.addarcesB€Ü˜%¤Ô%Ð%Ð%ؘDŸI™IÑ%Ð%Ð%ܘ$¤Ô)Ð)Ð)؈ ‰ %Òr cóp—|jj«D]\}}||usŒ ||j|<ŒyrV)r.r/)rÚoldÚnewr=r>s r r‹zDFAState.unifystateks0€ØŸ9™9Ÿ?™?Ö,‰KˆE4ØsŠ{Ø#&— ‘ ˜%Ò ñ-r có6—t|t«sJ‚|j|jk7ryt|j«t|j«k7ry|jj «D]$\}}||jj |«usŒ$yy)NFT)rKrvr3r*r.r/Úget)rÚotherr=r>s r Ú__eq__zDFAState.__eq__psx€ä˜%¤Ô*Ð*Ð*Ø <‰<˜5Ÿ=™=Ò (Øô ˆty‰y‹>œS §¡›_Ò ,ØØŸ9™9Ÿ?™?Ö,‰KˆE4ؘ5Ÿ:™:Ÿ>™>¨%Ó0Ò0Ùð-ðr N)rr r r!ryr‹rÃÚ__hash__r r r rvrv[s„òò ò 'ò ðHr rvcó8—t|«}|j«SrV)rr?)rÚps r Úgenerate_grammarrÇ€s€Ü˜Ó!€AØ >‰>Ó Ðr N)z Grammar.txt) r€rrrÚGrammarrÚobjectrrurvrÇr r r ÚrÊsJð÷ 'Ñ&ô '—/‘/ô ôE9fôE9ôN (ˆvô(ô#ˆvô#ôJr lib2to3/pgen2/__pycache__/parse.cpython-312.opt-1.pyc000064400000020775152462633570016051 0ustar00Ë T—çhÛãó@—dZddlmZGd„de«ZGd„de«Zy)zÈParser engine for the grammar tables generated by pgen. The grammar table must be loaded first. See Parser/parser.c in the Python distribution for additional info on how this parsing engine works. é)Útokencó—eZdZdZd„Zd„Zy)Ú ParseErrorz(Exception to signal the parser is stuck.c ó~—tj||›d|›d|›d|›«||_||_||_||_y)Nz: type=z, value=z , context=)Ú ExceptionÚ__init__ÚmsgÚtypeÚvalueÚcontext)Úselfr r r r s ú,/usr/lib64/python3.12/lib2to3/pgen2/parse.pyrzParseError.__init__s<€Ü×ј4Ú¢¢u©gð"7ô 8àˆŒØˆŒ ؈Œ ؈ ócót—t|«|j|j|j|jffS©N)r r r r )r s rÚ __reduce__zParseError.__reduce__s*€ÜD‹z˜DŸH™H d§i¡i°·±¸T¿\¹\ÐJÐJÐJrN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr©rrrrs„Ù2òóKrrcó>—eZdZdZd d„Zd d„Zd„Zd„Zd„Zd„Z d „Z y) ÚParsera5Parser engine. The proper usage sequence is: p = Parser(grammar, [converter]) # create instance p.setup([start]) # prepare for parsing : if p.addtoken(...): # parse a token; may raise ParseError break root = p.rootnode # root of abstract syntax tree A Parser instance may be reused by calling setup() repeatedly. A Parser instance contains state pertaining to the current token sequence, and should not be used concurrently by different threads to parse separate token sequences. See driver.py for how to get input tokens by tokenizing a file or string. Parsing is complete when addtoken() returns True; the root of the abstract syntax tree can then be retrieved from the rootnode instance variable. When a syntax error occurs, addtoken() raises the ParseError exception. There is no error recovery; the parser cannot be used after a syntax error was reported (but it can be reinitialized by calling setup()). Ncó*—||_|xsd„|_y)aÚConstructor. The grammar argument is a grammar.Grammar instance; see the grammar module for more information. The parser is not ready yet for parsing; you must call the setup() method to get it started. The optional convert argument is a function mapping concrete syntax tree nodes to abstract syntax tree nodes. If not given, no conversion is done and the syntax tree produced is the concrete syntax tree. If given, it must be a function of two arguments, the first being the grammar (a grammar.Grammar instance), and the second being the concrete syntax tree node to be converted. The syntax tree is converted from the bottom up. A concrete syntax tree node is a (type, value, context, nodes) tuple, where type is the node type (a token or symbol number), value is None for symbols and a string for tokens, context is None or an opaque value used for error reporting (typically a (lineno, offset) pair), and nodes is a list of children for symbols, and None for tokens. An abstract syntax tree node may be anything; this is entirely up to the converter function. có—|Srr)ÚgrammarÚnodes rÚz!Parser.__init__..Zs€¹rN)rÚconvert)r rrs rrzParser.__init__<s€ð:ˆŒ ØÒ>Ñ#=ˆ rcó´—|€|jj}|ddgf}|jj|d|f}|g|_d|_t «|_y)a›Prepare for parsing. This *must* be called before starting to parse. The optional argument is an alternative start symbol; it defaults to the grammar's start symbol. You can use a Parser instance to parse any number of programs; each time you call setup() the parser is reset to an initial state determined by the (implicit or explicit) start symbol. Né)rÚstartÚdfasÚstackÚrootnodeÚsetÚ used_names)r r"ÚnewnodeÚ stackentrys rÚsetupz Parser.setup\s\€ð ˆ=Ø—L‘L×&Ñ&ˆEð˜$  bÐ)ˆØ—l‘l×'Ñ'¨Ñ.°°7Ð;ˆ Ø \ˆŒ ؈Œ Ü›%ˆrcó®—|j|||«} |jd\}}}|\}} ||} | D]à\} } |jj| \} }|| k(re|j ||| |«| }||d|fgk(rB|j «|jsy|jd\}}}|\}} ||d|fgk(rŒBy| dk\sŒ’|jj | }|\}}||vsŒµ|j| |jj | | |«n?d|f| vr*|j «|jstd|||«‚td|||«‚ŒB)zà$EØ  ™-¨Q°¨J¨<Ò7ØŸ™œ Ø#Ÿzšzá#'Ø+/¯:©:°b©>Ñ(˜˜U DØ(+™ ˜ ð ! ™-¨Q°¨J¨<Ó7ñ!ؘ#“Xà!Ÿ\™\×.Ñ.¨qÑ1FØ*0Ñ'I˜xØ Ò)àŸ ™  ! T§\¡\×%6Ñ%6°qÑ%9¸8ÀWÔMÙð3 $ð6u: Ñ%à—H‘H”JØŸ:š:ä(Ð)9Ø)-¨u°gó?ð?ô% [°$¸¸wÓGÐGñSrcó—|tjk(rD|jj|«|jj j |«}||S|jjj |«}|€td|||«‚|S)z&Turn a token into a label. (Internal)z bad token) rÚNAMEr'ÚaddrÚkeywordsÚgetÚtokensr)r r r r r3s rr.zParser.classify¤sz€à ”5—:‘:Ò à O‰O× Ñ  Ô &à—\‘\×*Ñ*×.Ñ.¨uÓ5ˆFØÐ!Ø Ø—‘×$Ñ$×(Ñ(¨Ó.ˆØ ˆ>ܘ[¨$°°wÓ?Ð ?؈ rcó¾—|jd\}}}|||df}|j|j|«}||dj|«|||f|jd<y)zShift a token. (Internal)r,N)r$rrÚappend) r r r r:r r4r5rr(s rr0z Parser.shift²sb€àŸ:™: b™>шˆUDؘ ¨Ð.ˆØ—,‘,˜tŸ|™|¨WÓ5ˆØ Ð Ø ‰HO‰O˜GÔ $ؘx¨Ð.ˆ ‰ 2Šrcó–—|jd\}}}|d|gf}|||f|jd<|jj|d|f«y)zPush a nonterminal. (Internal)r,Nr!)r$rH) r r Únewdfar:r r4r5rr(s rr2z Parser.push»sQ€àŸ:™: b™>шˆUDؘ˜w¨Ð+ˆØ˜x¨Ð.ˆ ‰ 2‰Ø ‰ ×ј6 1 gÐ.Õ/rcó*—|jj«\}}}|j|j|«}|W|jr(|jd\}}}|dj |«y||_|j |j _yy)zPop a nonterminal. (Internal)Nr,)r$r1rrrHr%r')r ÚpopdfaÚpopstateÚpopnoder(r4r5rs rr1z Parser.popÂsz€à$(§J¡J§N¡NÓ$4Ñ!ˆ˜'Ø—,‘,˜tŸ|™|¨WÓ5ˆØ Ð ØzŠzØ#'§:¡:¨b¡>Ñ U˜DØR‘—‘ Õ(à '” Ø+/¯?©?— ‘ Õ(ð rr) rrrrrr*r@r.r0r2r1rrrrrs-„ñó:?ó@ ò0.Hò` ò/ò0ó ;rrN)rÚrrrÚobjectrrrrÚrQs+ðñõô Kô Kôn;ˆVõn;rlib2to3/pgen2/__pycache__/conv.cpython-312.opt-1.pyc000064400000023261152462633570015675 0ustar00Ë T—çhª%ãóJ—dZddlZddlmZmZGd„dej «Zy)aýConvert graminit.[ch] spit out by pgen to Python code. Pgen is the Python parser generator. It is useful to quickly create a parser from a grammar file in Python's grammar notation. But I don't want my parsers to be written in C (yet), so I'm translating the parsing tables to Python data structures and writing a Python parse engine. Note that the token numbers are constants determined by the standard Python tokenizer. The standard token module defines these numbers and their names (the names are not used much). The token numbers are hardcoded into the Python tokenizer and into pgen. A Python implementation of the Python tokenizer is also available, in the standard tokenize module. On the other hand, symbol numbers (representing the grammar's non-terminals) are assigned by pgen based on the actual grammar input. Note: this module is pretty much obsolete; the pgen module generates equivalent grammar tables directly from the Grammar.txt input file without having to invoke the Python pgen C program. éN)ÚgrammarÚtokencó(—eZdZdZd„Zd„Zd„Zd„Zy)Ú Convertera2Grammar subclass that reads classic pgen output files. The run() method reads the tables as produced by the pgen parser generator, typically contained in two C files, graminit.h and graminit.c. The other methods are for internal use only. See the base class for more documentation. cóh—|j|«|j|«|j«y)z_[] = { {, }, ... }; - followed by a state array, of the form: static state states_[] = { {, arcs__}, ... }; rrNFrrz static arc z)static arc arcs_(\d+)_(\d+)\[(\d+)\] = {$z\s+{(\d+), (\d+)},$z'static state states_(\d+)\[(\d+)\] = {$z\s+{(\d+), arcs_(\d+)_(\d+)},$zstatic dfa dfas\[(\d+)\] = {$z0\s+{(\d+), "(\w+)", (\d+), (\d+), states_(\d+),$ééééz\s+("(?:\\\d\d\d)*")},$éz!static label labels\[(\d+)\] = {$z\s+{(\d+), (0|"\w+")},$Ú0z \s+(\d+),$z\s+{(\d+), labels},$z \s+(\d+)$)rrrÚnextÚ startswithrrÚlistÚmaprrÚrangeÚappendÚstatesÚgroupÚevalÚ enumerateÚordÚdfasÚlabelsÚstartÚ StopIteration)!r r r!r"r#r$Úallarcsr5r%ÚnÚmÚkÚarcsÚ_ÚiÚjÚsÚtÚstater:Úndfasr&r'ÚxÚyÚzÚfirstÚ rawbitsetÚcÚbyter;Únlabelsr<s! rr zConverter.parse_graminit_cTsP€ð8 ÜX“ˆAð ˆð˜a‘x¤ a£ˆà˜a‘x¤ a£ˆð˜a‘x¤ a£ˆØˆØˆØo‰o˜mÕ,Ø—/‘/ -Ô0Ü—X‘XÐJØ"ó$ôœs¤3¨¯ © « Ó4Ó5‘1aØÜ˜qžAØ#)¨!¡8¬T°!«W˜DFÜŸ™Ð"8¸$Ó?B䤤C¨¯©«Ó 5Ó6‘DAqØ—K‘K  A Õ'ð "ð & a™x¬¨a«˜à"&˜˜A˜‘Ø% a™x¬¨a«˜ð—/‘/ -Õ0ô —‘ÐDÀdÓKˆB䜜C §¡£Ó-Ó.‰DˆAˆqàˆEܘ1–XØ% a™x¬¨a«˜Ü—X‘XÐ?ÀÓFäœs¤3¨¯ © « Ó4Ó5‘1aؘq !˜t‘}à— ‘ ˜TÕ"ðð M‰M˜%Ô Ø! !™8¤T¨!£WDˆFà! !™8¤T¨!£WDˆFðCo‰o˜mÖ,ðDˆŒ ðˆÜ X‰XÐ6¸Ó =ˆäB—H‘H˜Q“KÓ ˆÜu–ˆAØ! !™8¤T¨!£WDˆFÜ—‘ÐMØó ˆBð—X‘X˜a“[ˆFÜ"¤3¤s¨B¯H©H°Q¸¸1¸aÓ,@Ó#AÓB‰OˆFAq˜!ð˜1‘IˆEà! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBàˆEܘRŸX™X a›[Ó)ˆIÜ! )Ö,‘1ܘ1“vܘqžAؘq !™t“}Ø)*˜˜a ™c A™gšñ"ð-ð " 5˜>ˆDŠLð-ð.˜a‘x¤ a£ˆàˆŒ ðˆØ˜a‘x¤ a£ˆÜ X‰XÐ:¸DÓ Aˆäb—h‘h˜q“kÓ"ˆÜw–ˆAØ! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBà—9‘9“;‰DˆAˆqÜA“ˆAØCŠxؑ䘓GØ M‰M˜1˜a˜&Õ !ð ð˜a‘x¤ a£ˆàˆŒ ð˜a‘x¤ a£ˆà˜a‘x¤ a£ˆÜ X‰Xm TÓ *ˆäB—H‘H˜Q“KÓ ˆà˜a‘x¤ a£ˆà˜a‘x¤ a£ˆÜ X‰XÐ-¨tÓ 4ˆäb—h‘h˜q“kÓ"ˆà˜a‘x¤ a£ˆÜ X‰Xl DÓ )ˆäB—H‘H˜Q“KÓ ˆàˆŒ ؘa‘x¤ a£ˆð %Ø! !™8¤T¨!£WD‰FøôCò Ý ª±3Ð7Ô 8Üûð ûôDò Ù ð ús)‚ VÕ6V.Ö V+ÖV&Ö&V+Ö. V:Ö9V:cóΗi|_i|_t|j«D]?\}\}}|tj k(r|||j|<Œ.|Œ1||j|<ŒAy)z1Create additional useful structures. (Internal).N)ÚkeywordsÚtokensr8r;rÚNAME)r ÚilabelÚtypeÚvalues rr zConverter.finish_offùs^€àˆŒ ؈Œ Ü%.¨t¯{©{Ö%;Ñ !ˆF‘MT˜5Ø”u—z‘zÒ! eÐ&7Ø'-— ‘ ˜eÒ$Ø‘Ø$*— ‘ ˜DÒ!ñ &c%óJ+rr)r\rÚpgen2rrÚGrammarrr]rrÚr`s&ðñó4 ÷!ô]+—‘õ]+rlib2to3/pgen2/__pycache__/driver.cpython-312.opt-2.pyc000064400000015651152462633570016230 0ustar00Ë T—çhQãóØ— dZddgZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z Gd„de «Zd„Z dd „Zd „Zd „Zd „Zed k(rej*ee« ««yy)z#Guido van Rossum ÚDriverÚ load_grammaréNé)ÚgrammarÚparseÚtokenÚtokenizeÚpgencó<—eZdZdd„Zd d„Zd d„Zd d„Zd d„Zd d„Zy) rNcóZ—||_|€tj«}||_||_y©N)rÚloggingÚ getLoggerÚloggerÚconvert)Úselfrrrs ú-/usr/lib64/python3.12/lib2to3/pgen2/driver.pyÚ__init__zDriver.__init__s*€ØˆŒ Ø ˆ>Ü×&Ñ&Ó(ˆF؈Œ ؈ ócóD— tj|j|j«}|j «d}d}dx}x}x}x} } d} |D]6} | \}}}} } |||fk7r(|\} }|| kr| d| |z zz } | }d}||kr | | ||z } |}|t j t jfvr#| |z } | \}}|jd«r|dz }d}Œ€|tjk(rtj|}|r/|jjdtj||| «|j||| |f«r*|r|jjd«|j"Sd} | \}}|jd«sŒ0|dz }d}Œ9tj d||| |f«‚)NrrÚÚ z%s %r (prefix=%r)zStop.zincomplete input)rÚParserrrÚsetupr ÚCOMMENTÚNLÚendswithrÚOPÚopmaprÚdebugÚtok_nameÚaddtokenÚ ParseErrorÚrootnode)rÚtokensr ÚpÚlinenoÚcolumnÚtypeÚvalueÚstartÚendÚ line_textÚprefixÚ quintupleÚs_linenoÚs_columns rÚ parse_tokenszDriver.parse_tokens&sÕ€ØBä L‰L˜Ÿ™ t§|¡|Ó 4ˆØ ‰Œ ؈؈Ø15Ð5ˆÐ5ˆuÐ5uÐ5˜s Y؈܈IØ1:Ñ .ˆD%˜  Yؘ Ð(Ò(à%*Ñ"˜(ؘHÒ$ؘd h°Ñ&7Ñ8Ñ8FØ%FØFؘHÒ$ؘi¨¨xÐ8Ñ8FØ%FØœ×(Ñ(¬(¯+©+Ð6Ñ6ؘ%‘Ø!$‘˜Ø—>‘> $Ô'ؘa‘KFØFØØ”u—x‘xÒÜ—}‘} UÑ+ÙØ— ‘ ×!Ñ!Ð"5Ü"'§.¡.°Ñ"6¸¸vôGàz‰z˜$ ¨° Ô7ÙØ—K‘K×%Ñ% gÔ.Øðz‰zÐðˆFØ ‰NˆFFØ~‰~˜dÖ#ؘ!‘ Ø’ðA ôF×"Ñ"Ð#5Ø#'¨°¸°óAð Arcóf— tj|j«}|j||«Sr )r Úgenerate_tokensÚreadliner2)rÚstreamr r%s rÚparse_stream_rawzDriver.parse_stream_rawVs,€Ø8Ü×)Ñ)¨&¯/©/Ó:ˆØ× Ñ  ¨Ó/Ð/rcó(— |j||«Sr )r7)rr6r s rÚ parse_streamzDriver.parse_stream[s€Ø8Ø×$Ñ$ V¨UÓ3Ð3rcó„— tj|d|¬«5}|j||«cddd«S#1swYyxYw)NÚr)Úencoding)ÚioÚopenr9)rÚfilenamer<r r6s rÚ parse_filezDriver.parse_file_s3€Ø6Ü W‰WX˜s¨XÕ 6¸&Ø×$Ñ$ V¨UÓ3÷7× 6Ò 6úsš6¶?cóŒ— tjtj|«j«}|j ||«Sr )r r4r=ÚStringIOr5r2)rÚtextr r%s rÚ parse_stringzDriver.parse_stringds7€Ø8Ü×)Ñ)¬"¯+©+°dÓ*;×*DÑ*DÓEˆØ× Ñ  ¨Ó/Ð/r)NN)F)NF) Ú__name__Ú __module__Ú __qualname__rr2r7r9r@rD©rrrrs!„óó.ó`0ó 4ó4ô 0rcóÀ—tjj|«\}}|dk(rd}||zdjt t t j««zdzS)Nz.txtrÚ.z.pickle)ÚosÚpathÚsplitextÚjoinÚmapÚstrÚsysÚ version_info)ÚgtÚheadÚtails rÚ_generate_pickle_namerVjsP€Ü—‘×!Ñ! "Ó%J€Dˆ$Ø ˆv‚~ØˆØ $‰;˜Ÿ™¤#¤c¬3×+;Ñ+;Ó"<Ó=Ñ =À Ñ IÐIrcó¬— |€tj«}|€ t|«n|}|s t||«sQ|j d|«t j |«}|r&|j d|« |j|«|S|Stj«}|j|«|S#t$r}|j d|«Yd}~|Sd}~wwxYw)Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s) rrrVÚ_newerÚinfor Úgenerate_grammarÚdumpÚOSErrorrÚGrammarÚload)rSÚgpÚsaveÚforcerÚgÚes rrrqsÉ€à1Ø €~Ü×"Ñ"Ó$ˆØ&( jÔ ˜rÔ "°b€BÙ ”F˜2˜r”NØ ‰ Ð7¸Ô<Ü × !Ñ ! "Ó %ˆÙ Ø K‰KÐ6¸Ô ;ð 5Ø—‘r” ð €Hˆ1€Hô O‰OÓ ˆØ ‰ˆrŒ Ø €Høô ò 5Ø— ‘ Ð0°!×4Ð4ð €Hûð  5úsÁ1B-Â- CÂ6CÃCcó— tjj|«sytjj|«sytjj|«tjj|«k\S)NFT)rKrLÚexistsÚgetmtime)ÚaÚbs rrXrX†sT€Ø:Ü 7‰7>‰>˜!Ô ØÜ 7‰7>‰>˜!Ô ØÜ 7‰7× Ñ ˜AÓ ¤"§'¡'×"2Ñ"2°1Ó"5Ñ 5Ð5rcó"— tjj|«r t|«St tjj |««}t j||«}tj«}|j|«|Sr ) rKrLÚisfilerrVÚbasenameÚpkgutilÚget_datarr]Úloads)ÚpackageÚgrammar_sourceÚ pickled_nameÚdatarbs rÚload_packaged_grammarrssk€ð ô ‡ww‡~~nÔ%ܘNÓ+Ð+Ü(¬¯©×)9Ñ)9¸.Ó)IÓJ€LÜ × Ñ ˜G \Ó 2€D܉ӀA؇GGˆD„MØ €Hrcó— |stjdd}tjtjtj d¬«|D]}t |dd¬«Œy)Nrz %(message)s)Úlevelr6ÚformatT)r`ra)rQÚargvrÚ basicConfigÚINFOÚstdoutr)ÚargsrSs rÚmainr|£sQ€ðñ Üx‰x˜˜ˆ|ˆÜ ×ÑœgŸl™l´3·:±:Ø,õ.ãˆÜR˜d¨$Ö/ðà rÚ__main__)z Grammar.txtNTFN)Ú __author__Ú__all__r=rKrrlrQrrrrr r ÚobjectrrVrrXrsr|rEÚexitÚintrHrrÚrƒsŠððð 3€ à ^Ð $€ó Û ÛÛÛ ÷4Õ3ôJ0ˆVôJ0òZJð'+Ø04ó ò*6ò ò( ð ˆzÒØ €C‡HH‰S‘T“V‹_Õðrlib2to3/pgen2/__pycache__/__init__.cpython-312.opt-1.pyc000064400000000263152462633570016464 0ustar00Ë T—çhãó—dZy)zThe pgen2 package.N)Ú__doc__©óú//usr/lib64/python3.12/lib2to3/pgen2/__init__.pyÚrs ðòrlib2to3/pgen2/__pycache__/conv.cpython-312.opt-2.pyc000064400000016437152462633570015705 0ustar00Ë T—çhª%ãóH— ddlZddlmZmZGd„dej«Zy)éN)ÚgrammarÚtokencó&—eZdZ d„Zd„Zd„Zd„Zy)Ú Convertercój— |j|«|j|«|j«y©N)Úparse_graminit_hÚparse_graminit_cÚ finish_off)ÚselfÚ graminit_hÚ graminit_cs ú+/usr/lib64/python3.12/lib2to3/pgen2/conv.pyÚrunz Converter.run/s+€ØJØ ×јjÔ)Ø ×јjÔ)Ø ‰Õóc ó°— t|«}i|_i|_d}|D]}|dz }t j d|«}|s2|j«r"t|›d|›d|j«›«ŒR|j«\}}t|«}||j|<||j|<Œy #t$r}td|›d|›«Yd}~yd}~wwxYw) Nú Can't open ú: Fréz^#define\s+(\w+)\s+(\d+)$Ú(z): can't parse T) ÚopenÚOSErrorÚprintÚ symbol2numberÚ number2symbolÚreÚmatchÚstripÚgroupsÚint) r ÚfilenameÚfÚerrÚlinenoÚlineÚmoÚsymbolÚnumbers rr zConverter.parse_graminit_h5sÚ€ð ð ÜX“ˆAð ˆÔØˆÔØˆÛˆDØ a‰KˆFÜ—‘Ð6¸Ó=ˆBÙ˜$Ÿ*™*œ,ܲ(ºFØ26·*±*´,ð@õAð"$§¡£‘˜Ü˜V›ð.4×"Ñ" 6Ñ*Ø-3×"Ñ" 6Ò*ððøô'ò Ý ª±3Ð7Ô 8Üûð úsƒ B1Â1 CÂ:CÃCc ó| — t|«}d}|dzt|«}}|dzt|«}}|dzt|«}}i}g}|j d«rÿ|j d«rït j d|«}ttt|j«««\} } } g} t| «D]e} |dzt|«}}t j d|«}ttt|j«««\}}| j||f«Œg|dzt|«}}| || | f<|dzt|«}}|j d«rŒït j d |«}ttt|j«««\}}g}t|«D]k} |dzt|«}}t j d |«}ttt|j«««\} } } || | f} |j| «Œm|j|«|dzt|«}}|dzt|«}}|j d«rŒÿ||_ i}t j d |«}t|jd««}t|«D]ù}|dzt|«}}t j d |«}|jd «}ttt|jdddd«««\}}}}||}|dzt|«}}t j d|«}i}t|jd««}t!|«D]4\}}t#|«}td«D]}|d|zzsŒ d||dz|z<ŒŒ6||f||<Œû|dzt|«}}||_g}|dzt|«}}t j d|«}t|jd««}t|«D]l}|dzt|«}}t j d|«}|j«\}}t|«}|dk(rd}n t|«}|j||f«Œn|dzt|«}}||_|dzt|«}}|dzt|«}}t j d|«}t|jd««}|dzt|«}}|dzt|«}}t j d|«}t|jd««}|dzt|«}}t j d|«}t|jd««} | |_|dzt|«}} |dzt|«}}y#t$r}td|›d|›«Yd}~yd}~wwxYw#t*$rYywxYw)NrrFrrz static arc z)static arc arcs_(\d+)_(\d+)\[(\d+)\] = {$z\s+{(\d+), (\d+)},$z'static state states_(\d+)\[(\d+)\] = {$z\s+{(\d+), arcs_(\d+)_(\d+)},$zstatic dfa dfas\[(\d+)\] = {$z0\s+{(\d+), "(\w+)", (\d+), (\d+), states_(\d+),$ééééz\s+("(?:\\\d\d\d)*")},$éz!static label labels\[(\d+)\] = {$z\s+{(\d+), (0|"\w+")},$Ú0z \s+(\d+),$z\s+{(\d+), labels},$z \s+(\d+)$)rrrÚnextÚ startswithrrÚlistÚmapr rÚrangeÚappendÚstatesÚgroupÚevalÚ enumerateÚordÚdfasÚlabelsÚstartÚ StopIteration)!r r!r"r#r$r%Úallarcsr6r&ÚnÚmÚkÚarcsÚ_ÚiÚjÚsÚtÚstater;Úndfasr'r(ÚxÚyÚzÚfirstÚ rawbitsetÚcÚbyter<Únlabelsr=s! rr zConverter.parse_graminit_cTsU€ð ð6 ÜX“ˆAð ˆð˜a‘x¤ a£ˆà˜a‘x¤ a£ˆð˜a‘x¤ a£ˆØˆØˆØo‰o˜mÕ,Ø—/‘/ -Ô0Ü—X‘XÐJØ"ó$ôœs¤3¨¯ © « Ó4Ó5‘1aØÜ˜qžAØ#)¨!¡8¬T°!«W˜DFÜŸ™Ð"8¸$Ó?B䤤C¨¯©«Ó 5Ó6‘DAqØ—K‘K  A Õ'ð "ð & a™x¬¨a«˜à"&˜˜A˜‘Ø% a™x¬¨a«˜ð—/‘/ -Õ0ô —‘ÐDÀdÓKˆB䜜C §¡£Ó-Ó.‰DˆAˆqàˆEܘ1–XØ% a™x¬¨a«˜Ü—X‘XÐ?ÀÓFäœs¤3¨¯ © « Ó4Ó5‘1aؘq !˜t‘}à— ‘ ˜TÕ"ðð M‰M˜%Ô Ø! !™8¤T¨!£WDˆFà! !™8¤T¨!£WDˆFðCo‰o˜mÖ,ðDˆŒ ðˆÜ X‰XÐ6¸Ó =ˆäB—H‘H˜Q“KÓ ˆÜu–ˆAØ! !™8¤T¨!£WDˆFÜ—‘ÐMØó ˆBð—X‘X˜a“[ˆFÜ"¤3¤s¨B¯H©H°Q¸¸1¸aÓ,@Ó#AÓB‰OˆFAq˜!ð˜1‘IˆEà! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBàˆEܘRŸX™X a›[Ó)ˆIÜ! )Ö,‘1ܘ1“vܘqžAؘq !™t“}Ø)*˜˜a ™c A™gšñ"ð-ð " 5˜>ˆDŠLð-ð.˜a‘x¤ a£ˆàˆŒ ðˆØ˜a‘x¤ a£ˆÜ X‰XÐ:¸DÓ Aˆäb—h‘h˜q“kÓ"ˆÜw–ˆAØ! !™8¤T¨!£WDˆFÜ—‘Ð4°dÓ;ˆBà—9‘9“;‰DˆAˆqÜA“ˆAØCŠxؑ䘓GØ M‰M˜1˜a˜&Õ !ð ð˜a‘x¤ a£ˆàˆŒ ð˜a‘x¤ a£ˆà˜a‘x¤ a£ˆÜ X‰Xm TÓ *ˆäB—H‘H˜Q“KÓ ˆà˜a‘x¤ a£ˆà˜a‘x¤ a£ˆÜ X‰XÐ-¨tÓ 4ˆäb—h‘h˜q“kÓ"ˆà˜a‘x¤ a£ˆÜ X‰Xl DÓ )ˆäB—H‘H˜Q“KÓ ˆàˆŒ ؘa‘x¤ a£ˆð %Ø! !™8¤T¨!£WD‰FøôCò Ý ª±3Ð7Ô 8Üûð ûôDò Ù ð ús)ƒ VÕ7V/Ö V,ÖV'Ö'V,Ö/ V;Ö:V;cóЗ i|_i|_t|j«D]?\}\}}|tj k(r|||j|<Œ.|Œ1||j|<ŒAyr)ÚkeywordsÚtokensr9r<rÚNAME)r ÚilabelÚtypeÚvalues rr zConverter.finish_offùsa€Ø?؈Œ ؈Œ Ü%.¨t¯{©{Ö%;Ñ !ˆF‘MT˜5Ø”u—z‘zÒ! eÐ&7Ø'-— ‘ ˜eÒ$Ø‘Ø$*— ‘ ˜DÒ!ñ &c%óJ+rr)rÚpgen2rrÚGrammarrr]rrÚr`s&ððó4 ÷!ô]+—‘õ]+rlib2to3/pgen2/__pycache__/token.cpython-312.pyc000064400000004304152462633570015106 0ustar00Ë T—çhãóz—dZdZdZdZdZdZdZdZdZd Z d Z d Z d Z d Z dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&d'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9d:Z:d;Z;dZ>iZ?e@eA«j…««D]\ZCZDeEeDeF«sŒeCe?eD<Œd?„ZGd@„ZHdA„ZIyB)Cz!Token constants (from "token.h").éééééééééé é é é é ééééééééééééééééééé é!é"é#é$é%é&é'é(é)é*é+é,é-é.é/é0é1é2é3é4é5é6é7é8é9é:é;é<écó—|tkS©N©Ú NT_OFFSET©Úxs ú,/usr/lib64/python3.12/lib2to3/pgen2/token.pyÚ ISTERMINALrGOs €Ø Œy‰=Ðócó—|tk\SrArBrDs rFÚ ISNONTERMINALrJRó €Ø ” ‰>ÐrHcó—|tk(SrA)Ú ENDMARKERrDs rFÚISEOFrNUrKrHN)JÚ__doc__rMÚNAMEÚNUMBERÚSTRINGÚNEWLINEÚINDENTÚDEDENTÚLPARÚRPARÚLSQBÚRSQBÚCOLONÚCOMMAÚSEMIÚPLUSÚMINUSÚSTARÚSLASHÚVBARÚAMPERÚLESSÚGREATERÚEQUALÚDOTÚPERCENTÚ BACKQUOTEÚLBRACEÚRBRACEÚEQEQUALÚNOTEQUALÚ LESSEQUALÚ GREATEREQUALÚTILDEÚ CIRCUMFLEXÚ LEFTSHIFTÚ RIGHTSHIFTÚ DOUBLESTARÚ PLUSEQUALÚMINEQUALÚ STAREQUALÚ SLASHEQUALÚ PERCENTEQUALÚ AMPEREQUALÚ VBAREQUALÚCIRCUMFLEXEQUALÚLEFTSHIFTEQUALÚRIGHTSHIFTEQUALÚDOUBLESTAREQUALÚ DOUBLESLASHÚDOUBLESLASHEQUALÚATÚATEQUALÚOPÚCOMMENTÚNLÚRARROWÚAWAITÚASYNCÚ ERRORTOKENÚ COLONEQUALÚN_TOKENSrCÚtok_nameÚlistÚglobalsÚitemsÚ_nameÚ_valueÚ isinstanceÚintrGrJrN©rHrFÚr•s‰ðñ(ð € Ø€Ø €Ø €Ø €Ø €Ø €Ø€Ø€Ø€Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø €Ø€Ø €Ø € Ø €Ø €Ø €Ø €Ø € Ø€ Ø €Ø € Ø € Ø € Ø € Ø € Ø €Ø € Ø € Ø€ Ø € Ø € ؀؀؀؀؀ ØÐØ€Ø €Ø€Ø €Ø€Ø €Ø €Ø €Ø € Ø € Ø €Ø € ð €Ù™'›)Ÿ/™/Ó+Ö,M€Eˆ6Ù&˜#ÕØ ˆÒð-ò òórHlib2to3/patcomp.py000064400000015616152462633570010065 0ustar00# Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Pattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. """ __author__ = "Guido van Rossum " # Python imports import io # Fairly local imports from .pgen2 import driver, literals, token, tokenize, parse, grammar # Really local imports from . import pytree from . import pygram class PatternSyntaxError(Exception): pass def tokenize_wrapper(input): """Tokenizes a string suppressing significant whitespace.""" skip = {token.NEWLINE, token.INDENT, token.DEDENT} tokens = tokenize.generate_tokens(io.StringIO(input).readline) for quintuple in tokens: type, value, start, end, line_text = quintuple if type not in skip: yield quintuple class PatternCompiler(object): def __init__(self, grammar_file=None): """Initializer. Takes an optional alternative filename for the pattern grammar. """ if grammar_file is None: self.grammar = pygram.pattern_grammar self.syms = pygram.pattern_symbols else: self.grammar = driver.load_grammar(grammar_file) self.syms = pygram.Symbols(self.grammar) self.pygrammar = pygram.python_grammar self.pysyms = pygram.python_symbols self.driver = driver.Driver(self.grammar, convert=pattern_convert) def compile_pattern(self, input, debug=False, with_tree=False): """Compiles a pattern string to a nested pytree.*Pattern object.""" tokens = tokenize_wrapper(input) try: root = self.driver.parse_tokens(tokens, debug=debug) except parse.ParseError as e: raise PatternSyntaxError(str(e)) from None if with_tree: return self.compile_node(root), root else: return self.compile_node(root) def compile_node(self, node): """Compiles a node, recursively. This is one big switch on the node type. """ # XXX Optimize certain Wildcard-containing-Wildcard patterns # that can be merged if node.type == self.syms.Matcher: node = node.children[0] # Avoid unneeded recursion if node.type == self.syms.Alternatives: # Skip the odd children since they are just '|' tokens alts = [self.compile_node(ch) for ch in node.children[::2]] if len(alts) == 1: return alts[0] p = pytree.WildcardPattern([[a] for a in alts], min=1, max=1) return p.optimize() if node.type == self.syms.Alternative: units = [self.compile_node(ch) for ch in node.children] if len(units) == 1: return units[0] p = pytree.WildcardPattern([units], min=1, max=1) return p.optimize() if node.type == self.syms.NegatedUnit: pattern = self.compile_basic(node.children[1:]) p = pytree.NegatedPattern(pattern) return p.optimize() assert node.type == self.syms.Unit name = None nodes = node.children if len(nodes) >= 3 and nodes[1].type == token.EQUAL: name = nodes[0].value nodes = nodes[2:] repeat = None if len(nodes) >= 2 and nodes[-1].type == self.syms.Repeater: repeat = nodes[-1] nodes = nodes[:-1] # Now we've reduced it to: STRING | NAME [Details] | (...) | [...] pattern = self.compile_basic(nodes, repeat) if repeat is not None: assert repeat.type == self.syms.Repeater children = repeat.children child = children[0] if child.type == token.STAR: min = 0 max = pytree.HUGE elif child.type == token.PLUS: min = 1 max = pytree.HUGE elif child.type == token.LBRACE: assert children[-1].type == token.RBRACE assert len(children) in (3, 5) min = max = self.get_int(children[1]) if len(children) == 5: max = self.get_int(children[3]) else: assert False if min != 1 or max != 1: pattern = pattern.optimize() pattern = pytree.WildcardPattern([[pattern]], min=min, max=max) if name is not None: pattern.name = name return pattern.optimize() def compile_basic(self, nodes, repeat=None): # Compile STRING | NAME [Details] | (...) | [...] assert len(nodes) >= 1 node = nodes[0] if node.type == token.STRING: value = str(literals.evalString(node.value)) return pytree.LeafPattern(_type_of_literal(value), value) elif node.type == token.NAME: value = node.value if value.isupper(): if value not in TOKEN_MAP: raise PatternSyntaxError("Invalid token: %r" % value) if nodes[1:]: raise PatternSyntaxError("Can't have details for token") return pytree.LeafPattern(TOKEN_MAP[value]) else: if value == "any": type = None elif not value.startswith("_"): type = getattr(self.pysyms, value, None) if type is None: raise PatternSyntaxError("Invalid symbol: %r" % value) if nodes[1:]: # Details present content = [self.compile_node(nodes[1].children[1])] else: content = None return pytree.NodePattern(type, content) elif node.value == "(": return self.compile_node(nodes[1]) elif node.value == "[": assert repeat is None subpattern = self.compile_node(nodes[1]) return pytree.WildcardPattern([[subpattern]], min=0, max=1) assert False, node def get_int(self, node): assert node.type == token.NUMBER return int(node.value) # Map named tokens to the type value for a LeafPattern TOKEN_MAP = {"NAME": token.NAME, "STRING": token.STRING, "NUMBER": token.NUMBER, "TOKEN": None} def _type_of_literal(value): if value[0].isalpha(): return token.NAME elif value in grammar.opmap: return grammar.opmap[value] else: return None def pattern_convert(grammar, raw_node_info): """Converts raw node information to a Node or Leaf instance.""" type, value, context, children = raw_node_info if children or type in grammar.number2symbol: return pytree.Node(type, children, context=context) else: return pytree.Leaf(type, value, context=context) def compile_pattern(pattern): return PatternCompiler().compile_pattern(pattern) lib2to3/PatternGrammar.txt000064400000001431152462633570011523 0ustar00# Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. # A grammar to describe tree matching patterns. # Not shown here: # - 'TOKEN' stands for any token (leaf node) # - 'any' stands for any node (leaf or interior) # With 'any' we can still specify the sub-structure. # The start symbol is 'Matcher'. Matcher: Alternatives ENDMARKER Alternatives: Alternative ('|' Alternative)* Alternative: (Unit | NegatedUnit)+ Unit: [NAME '='] ( STRING [Repeater] | NAME [Details] [Repeater] | '(' Alternatives ')' [Repeater] | '[' Alternatives ']' ) NegatedUnit: 'not' (STRING | NAME [Details] | '(' Alternatives ')') Repeater: '*' | '+' | '{' NUMBER [',' NUMBER] '}' Details: '<' Alternatives '>' lib2to3/__pycache__/__init__.cpython-312.pyc000064400000000532152462633570014511 0ustar00Ë T—çhœãó6—ddlZejded¬«y)éNzGlib2to3 package is deprecated and may not be able to parse Python 3.10+é)Ú stacklevel)ÚwarningsÚwarnÚDeprecationWarning©óú)/usr/lib64/python3.12/lib2to3/__init__.pyÚr s!ðÛð€‡ ØMØØör lib2to3/__pycache__/btm_matcher.cpython-312.opt-1.pyc000064400000016230152462633570016200 0ustar00Ë T—çhßãóv—dZdZddlZddlZddlmZddlmZddlm Z Gd„d e «Z Gd „d e «Z ia d „Zy) aŒA bottom-up tree matching algorithm implementation meant to speed up 2to3's matching process. After the tree patterns are reduced to their rarest linear path, a linear Aho-Corasick automaton is created. The linear automaton traverses the linear paths from the leaves to the root of the AST and returns a set of nodes for further matching. This reduces significantly the number of candidate nodes.z+George Boutsioukis éN)Ú defaultdicté)Úpytree)Ú reduce_treecó8—eZdZdZej «Zd„Zy)ÚBMNodez?Class for a node of the Aho-Corasick automaton used in matchingcój—i|_g|_ttj«|_d|_y)NÚ)Útransition_tableÚfixersÚnextrÚcountÚidÚcontent©Úselfs ú,/usr/lib64/python3.12/lib2to3/btm_matcher.pyÚ__init__zBMNode.__init__s(€Ø "ˆÔ؈Œ Ü”v—|‘|Ó$ˆŒØˆ óN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú itertoolsrr©rrrrs„ÙIØ ˆIO‰OÓ €Eórrcó.—eZdZdZd„Zd„Zd„Zd„Zd„Zy)Ú BottomMatcherzgThe main matcher class. After instantiating the patterns should be added using the add_fixer methodcó¦—t«|_t«|_|jg|_g|_t jd«|_y)NÚRefactoringTool) ÚsetÚmatchrÚrootÚnodesr ÚloggingÚ getLoggerÚloggerrs rrzBottomMatcher.__init__s;€Ü“UˆŒ Ü“HˆŒ Ø—i‘i[ˆŒ ؈Œ Ü×'Ñ'Ð(9Ó:ˆ rcó—|jj|«t|j«}|j «}|j ||j ¬«}|D]}|jj|«Œy)zÒReduces a fixer's pattern tree to a linear path and adds it to the matcher(a common Aho-Corasick automaton). The fixer is appended on the matching states and called when they are reached©ÚstartN)r ÚappendrÚ pattern_treeÚget_linear_subpatternÚaddr")rÚfixerÚtreeÚlinearÚ match_nodesÚ match_nodes rÚ add_fixerzBottomMatcher.add_fixer%sh€ð ‰ ×ј5Ô!ܘ5×-Ñ-Ó.ˆØ×+Ñ+Ó-ˆØ—h‘h˜v¨T¯Y©YhÓ7ˆ Û%ˆJØ × Ñ × $Ñ $ UÕ +ñ&rc óŽ—|s|gSt|dt«rLg}|dD]@}|j||¬«}|D]&}|j|j|dd|««Œ(ŒB|S|d|jvrt «}||j|d<n|j|d}|ddr|j|dd|¬«}|S|g}|S)z5Recursively adds a linear pattern to the AC automatonrr(rN)Ú isinstanceÚtupler-Úextendr r)rÚpatternr)r1Ú alternativeÚ end_nodesÚendÚ next_nodes rr-zBottomMatcher.add1só€ñà7ˆNÜ g˜a‘j¤%Ô (ðˆKØ& qœz ð!ŸH™H [¸˜HÓ> Û$CØ×&Ñ& t§x¡x°¸¸° ¸SÓ'AÕBñ%ð *ð Ð ðq‰z ×!7Ñ!7Ñ7ä"›H Ø5>×&Ñ& w¨q¡zÒ2ð"×2Ñ2°7¸1±:Ñ> àqr‰{Ø ŸH™H W¨Q¨R [¸ ˜HÓB ðÐ ð'˜K ØÐ rcóÆ—|j}tt«}|D]?}|}|sŒ d|_|jD]5}t |t j«sŒ|jdk(sŒ.d|_n|jdk(r |j}n |j}||jvr5|j|}|jD]}||j|«Œnq|j}|j|jjrŒî||jvr4|j|}|jD]}||j|«Œ|j}|rŒ7ŒB|S)auThe main interface with the bottom matcher. The tree is traversed from the bottom using the constructed automaton. Nodes are only checked once as the tree is retraversed. When the automaton fails, we give it one more shot(in case the above tree matches as a whole with the rejected leaf), then we break for the next leaf. There is the special case of multiple arguments(see code comments) where we recheck the nodes Args: The leaves of the AST tree to be matched Returns: A dictionary of node matches with fixers as the keys TÚ;Fr)r"rÚlistÚ was_checkedÚchildrenr5rÚLeafÚvalueÚtyper r r*Úparent) rÚleavesÚcurrent_ac_nodeÚresultsÚleafÚcurrent_ast_nodeÚchildÚ node_tokenr.s rÚrunzBottomMatcher.runSsW€ð Ÿ)™)ˆÜœdÓ#ˆÜˆDØ#Ð Ú"Ø/3Ð Ô,Ø-×6Ô6Eä! %¬¯©Õ5¸%¿+¹+ÈÓ:LØ7<Ð(Ô4Ùð 7ð $×(Ñ(¨AÒ-à!1×!7Ñ!7‘Jà!1×!6Ñ!6Jà ×!AÑ!AÑAà&5×&FÑ&FÀzÑ&ROØ!0×!7Ô!7˜Ø ™×-Ñ-Ð.>Õ?ñ"8ð'+§i¡iOØ(×/Ñ/Ð;Ø,×3Ñ3×?Ò?àð" _×%EÑ%EÑEà*9×*JÑ*JÈ:Ñ*V˜Ø%4×%;Ô%;˜EØ# E™N×1Ñ1Ð2BÕCð&<ð$4×#:Ñ#:Ð õC#ððHˆrcó`‡—td«ˆfd„Љ|j«td«y)z %d [label=%s] //%sr)r ÚkeysÚprintrÚ type_reprÚstrr r)ÚnodeÚ subnode_keyÚsubnodeÚ print_nodes €rrWz*BottomMatcher.print_ac..print_nodeŽs|ø€Ø#×4Ñ4×9Ñ9Ö; Ø×/Ñ/° Ñ<ÜÐ0Ø—w‘w § ¡ ¬I°kÓ,BÄCÈÏÉÓDWÐXñYôZà !Ò#ܘ'Ÿ/™/Ô*Ù˜7Õ#ñ risHðñGð;€ ãÛÝ#åÝ"ôˆVôô}Fô}ð@€ ó6rlib2to3/__pycache__/__main__.cpython-312.opt-1.pyc000064400000000425152462633570015432 0ustar00Ë T—çhCãóH—ddlZddlmZejed««y)éNé)Úmainz lib2to3.fixes)ÚsysrÚexit©óú)/usr/lib64/python3.12/lib2to3/__main__.pyÚr sðÛ Ýà€‡‰ˆoÓ Õrlib2to3/__pycache__/btm_matcher.cpython-312.pyc000064400000016230152462633570015241 0ustar00Ë T—çhßãóv—dZdZddlZddlZddlmZddlmZddlm Z Gd„d e «Z Gd „d e «Z ia d „Zy) aŒA bottom-up tree matching algorithm implementation meant to speed up 2to3's matching process. After the tree patterns are reduced to their rarest linear path, a linear Aho-Corasick automaton is created. The linear automaton traverses the linear paths from the leaves to the root of the AST and returns a set of nodes for further matching. This reduces significantly the number of candidate nodes.z+George Boutsioukis éN)Ú defaultdicté)Úpytree)Ú reduce_treecó8—eZdZdZej «Zd„Zy)ÚBMNodez?Class for a node of the Aho-Corasick automaton used in matchingcój—i|_g|_ttj«|_d|_y)NÚ)Útransition_tableÚfixersÚnextrÚcountÚidÚcontent©Úselfs ú,/usr/lib64/python3.12/lib2to3/btm_matcher.pyÚ__init__zBMNode.__init__s(€Ø "ˆÔ؈Œ Ü”v—|‘|Ó$ˆŒØˆ óN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú itertoolsrr©rrrrs„ÙIØ ˆIO‰OÓ €Eórrcó.—eZdZdZd„Zd„Zd„Zd„Zd„Zy)Ú BottomMatcherzgThe main matcher class. After instantiating the patterns should be added using the add_fixer methodcó¦—t«|_t«|_|jg|_g|_t jd«|_y)NÚRefactoringTool) ÚsetÚmatchrÚrootÚnodesr ÚloggingÚ getLoggerÚloggerrs rrzBottomMatcher.__init__s;€Ü“UˆŒ Ü“HˆŒ Ø—i‘i[ˆŒ ؈Œ Ü×'Ñ'Ð(9Ó:ˆ rcó—|jj|«t|j«}|j «}|j ||j ¬«}|D]}|jj|«Œy)zÒReduces a fixer's pattern tree to a linear path and adds it to the matcher(a common Aho-Corasick automaton). The fixer is appended on the matching states and called when they are reached©ÚstartN)r ÚappendrÚ pattern_treeÚget_linear_subpatternÚaddr")rÚfixerÚtreeÚlinearÚ match_nodesÚ match_nodes rÚ add_fixerzBottomMatcher.add_fixer%sh€ð ‰ ×ј5Ô!ܘ5×-Ñ-Ó.ˆØ×+Ñ+Ó-ˆØ—h‘h˜v¨T¯Y©YhÓ7ˆ Û%ˆJØ × Ñ × $Ñ $ UÕ +ñ&rc óŽ—|s|gSt|dt«rLg}|dD]@}|j||¬«}|D]&}|j|j|dd|««Œ(ŒB|S|d|jvrt «}||j|d<n|j|d}|ddr|j|dd|¬«}|S|g}|S)z5Recursively adds a linear pattern to the AC automatonrr(rN)Ú isinstanceÚtupler-Úextendr r)rÚpatternr)r1Ú alternativeÚ end_nodesÚendÚ next_nodes rr-zBottomMatcher.add1só€ñà7ˆNÜ g˜a‘j¤%Ô (ðˆKØ& qœz ð!ŸH™H [¸˜HÓ> Û$CØ×&Ñ& t§x¡x°¸¸° ¸SÓ'AÕBñ%ð *ð Ð ðq‰z ×!7Ñ!7Ñ7ä"›H Ø5>×&Ñ& w¨q¡zÒ2ð"×2Ñ2°7¸1±:Ñ> àqr‰{Ø ŸH™H W¨Q¨R [¸ ˜HÓB ðÐ ð'˜K ØÐ rcóÆ—|j}tt«}|D]?}|}|sŒ d|_|jD]5}t |t j«sŒ|jdk(sŒ.d|_n|jdk(r |j}n |j}||jvr5|j|}|jD]}||j|«Œnq|j}|j|jjrŒî||jvr4|j|}|jD]}||j|«Œ|j}|rŒ7ŒB|S)auThe main interface with the bottom matcher. The tree is traversed from the bottom using the constructed automaton. Nodes are only checked once as the tree is retraversed. When the automaton fails, we give it one more shot(in case the above tree matches as a whole with the rejected leaf), then we break for the next leaf. There is the special case of multiple arguments(see code comments) where we recheck the nodes Args: The leaves of the AST tree to be matched Returns: A dictionary of node matches with fixers as the keys TÚ;Fr)r"rÚlistÚ was_checkedÚchildrenr5rÚLeafÚvalueÚtyper r r*Úparent) rÚleavesÚcurrent_ac_nodeÚresultsÚleafÚcurrent_ast_nodeÚchildÚ node_tokenr.s rÚrunzBottomMatcher.runSsW€ð Ÿ)™)ˆÜœdÓ#ˆÜˆDØ#Ð Ú"Ø/3Ð Ô,Ø-×6Ô6Eä! %¬¯©Õ5¸%¿+¹+ÈÓ:LØ7<Ð(Ô4Ùð 7ð $×(Ñ(¨AÒ-à!1×!7Ñ!7‘Jà!1×!6Ñ!6Jà ×!AÑ!AÑAà&5×&FÑ&FÀzÑ&ROØ!0×!7Ô!7˜Ø ™×-Ñ-Ð.>Õ?ñ"8ð'+§i¡iOØ(×/Ñ/Ð;Ø,×3Ñ3×?Ò?àð" _×%EÑ%EÑEà*9×*JÑ*JÈ:Ñ*V˜Ø%4×%;Ô%;˜EØ# E™N×1Ñ1Ð2BÕCð&<ð$4×#:Ñ#:Ð õC#ððHˆrcó`‡—td«ˆfd„Љ|j«td«y)z %d [label=%s] //%sr)r ÚkeysÚprintrÚ type_reprÚstrr r)ÚnodeÚ subnode_keyÚsubnodeÚ print_nodes €rrWz*BottomMatcher.print_ac..print_nodeŽs|ø€Ø#×4Ñ4×9Ñ9Ö; Ø×/Ñ/° Ñ<ÜÐ0Ø—w‘w § ¡ ¬I°kÓ,BÄCÈÏÉÓDWÐXñYôZà !Ò#ܘ'Ÿ/™/Ô*Ù˜7Õ#ñ risHðñGð;€ ãÛÝ#åÝ"ôˆVôô}Fô}ð@€ ó6rlib2to3/__pycache__/pytree.cpython-312.opt-1.pyc000064400000100640152462633570015222 0ustar00Ë T—çhFmãóê—dZdZddlZddlmZdZiad„ZGd„de«Z Gd „d e «Z Gd „d e «Z d „Z Gd„de«Z Gd„de «ZGd„de «ZGd„de «ZGd„de «Zd„Zy)zÌ Python parse tree definitions. This is a very concrete parse tree; we need to keep every token and even the comments and whitespace between tokens. There's also a pattern matching implementation here. z#Guido van Rossum éN)ÚStringIOiÿÿÿcó—tsDddlm}|jj «D]!\}}t |«t k(sŒ|t|<Œ#tj||«S)Né)Úpython_symbols)Ú _type_reprsÚpygramrÚ__dict__ÚitemsÚtypeÚintÚ setdefault)Útype_numrÚnameÚvals ú'/usr/lib64/python3.12/lib2to3/pytree.pyÚ type_reprrsO€å Ý*ð(×0Ñ0×6Ñ6Ö8‰IˆD#ÜC‹yœCÓ°D¤¨SÒ!1ð9ä × !Ñ ! (¨HÓ 5Ð5ócó¼—eZdZdZdZdZdZdZdZd„Z d„Z dZ d„Z d„Z d „Zd „Zd „Zd „Zd „Zd„Zed„«Zed„«Zd„Zd„Zd„Zej6dkrd„Zyy)ÚBasez Abstract base class for Node and Leaf. This provides some default functionality and boilerplate using the template pattern. A node may be a subnode of at most one parent. N©Fcó,—tj|«S)z7Constructor that prevents Base from being instantiated.©ÚobjectÚ__new__©ÚclsÚargsÚkwdss rrz Base.__new__1ó€ô~‰~˜cÓ"Ð"rcó`—|j|jurtS|j|«S)zW Compare two nodes for equality. This calls the method _eq(). )Ú __class__ÚNotImplementedÚ_eq©ÚselfÚothers rÚ__eq__z Base.__eq__6s(€ð >‰> §¡Ñ 0Ü!Ð !Øx‰x˜‹Ðrcó—t‚)a_ Compare two nodes for equality. This is called by __eq__ and __ne__. It is only called if the two nodes have the same type. This must be implemented by the concrete subclass. Nodes should be considered equal if they have the same structure, ignoring the prefix string and other context information. ©ÚNotImplementedErrorr$s rr#zBase._eqBs €ô"Ð!rcó—t‚)zr Return a cloned (deep) copy of self. This must be implemented by the concrete subclass. r)©r%s rÚclonez Base.cloneMó €ô "Ð!rcó—t‚)zx Return a post-order iterator for the tree. This must be implemented by the concrete subclass. r)r,s rÚ post_orderzBase.post_orderUr.rcó—t‚)zw Return a pre-order iterator for the tree. This must be implemented by the concrete subclass. r)r,s rÚ pre_orderzBase.pre_order]r.rcóR—t|t«s|g}g}d}|jjD]-}||ur||j |«d}Œ|j |«Œ/|jj «||j_|D]}|j|_Œd|_y)z/Replace this node with a new one in the parent.FNT)Ú isinstanceÚlistÚparentÚchildrenÚextendÚappendÚchanged)r%ÚnewÚ l_childrenÚfoundÚchÚxs rÚreplacez Base.replaceesš€ô˜#œtÔ$Ø%ˆC؈ ؈ؗ+‘+×&Ô&ˆBØT‰zà?Ø×%Ñ% cÔ*Ø‘à×!Ñ! "Õ%ð'ð ‰ ×ÑÔØ)ˆ ‰ ÔÛˆAØ—{‘{ˆAHðàˆ rcó˜—|}t|t«s-|jsy|jd}t|t«sŒ-|jS)z9Return the line number which generated the invocant node.Nr)r4ÚLeafr7Úlineno©r%Únodes rÚ get_linenozBase.get_lineno|sA€àˆÜ˜T¤4Ô(Ø—=’=ØØ—=‘= Ñ#ˆDô˜T¤4Õ(ð{‰{Ðrcó^—|jr|jj«d|_y)NT)r6r:Ú was_changedr,s rr:z Base.changed…s!€Ø ;Š;Ø K‰K× Ñ Ô !؈Õrcóì—|jrht|jj«D]E\}}||usŒ |jj«|jj|=d|_|cSyy)z‰ Remove the node from the tree. Returns the position of the node in its parent's children before it was removed. N)r6Ú enumerater7r:)r%ÚirEs rÚremovez Base.removeŠsb€ð ;Š;Ü$ T§[¡[×%9Ñ%9Ö:‘4ؘ4’<Ø—K‘K×'Ñ'Ô)ØŸ ™ ×,Ñ,¨QÐ/Ø"&D”KØ’Hñ ;ð rcóÒ—|j€yt|jj«D](\}}||usŒ |jj|dzcSy#t$rYywxYw)zŸ The node immediately following the invocant in their parent's children list. If the invocant does not have a next sibling, it is None Nr)r6rJr7Ú IndexError©r%rKÚchilds rÚ next_siblingzBase.next_sibling—si€ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ð ØŸ;™;×/Ñ/°°!±Ñ4Ò4ñ8øô"ò Úð ús¹AÁ A&Á%A&có¾—|j€yt|jj«D].\}}||usŒ |dk(ry|jj|dz cSy)z¤ The node immediately preceding the invocant in their parent's children list. If the invocant does not have a previous sibling, it is None. Nrr)r6rJr7rOs rÚ prev_siblingzBase.prev_sibling¨sZ€ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ؘ’6ÙØ—{‘{×+Ñ+¨A¨a©CÑ0Ò0ñ 8rc#óbK—|jD]}|j«Ed{–—†Œy7Œ­w©N)r7Úleaves©r%rPs rrVz Base.leaves¸s&èø€Ø—]”]ˆEØ—|‘|“~× %Ñ %ñ#Ø %ús ‚#/¥-¦/cóV—|j€yd|jj«zS)Nrr)r6Údepthr,s rrYz Base.depth¼s'€Ø ;‰;Ð ØØ4—;‘;×$Ñ$Ó&Ñ&Ð&rcó8—|j}|€y|jS)z Return the string immediately following the invocant node. This is effectively equivalent to node.next_sibling.prefix Ú)rQÚprefix)r%Únext_sibs rÚ get_suffixzBase.get_suffixÁs"€ð ×$Ñ$ˆØ Ð ØØ‰Ðr©ércó6—t|«jd«S)NÚascii)ÚstrÚencoder,s rÚ__str__z Base.__str__Ìs€Üt“9×#Ñ# GÓ,Ð ,r)Ú__name__Ú __module__Ú __qualname__Ú__doc__r r6r7rHÚ was_checkedrr'Ú__hash__r#r-r0r2r@rFr:rLÚpropertyrQrSrVrYr^ÚsysÚ version_inforerrrrrs¬„ñð €DØ €FØ€HØ€KØ€Kò#ò ð€Hò "ò"ò"ò"òò.ò ò ðñ óð ð ñ 1óð 1ò&ò'ò ð ×ј&Ò ó -ð!rrcóª—eZdZdZ dd„Zd„Zd„ZejdkDreZ d„Z d„Z d „Z d „Z ed „«Zej d „«Zd „Zd„Zd„Zy)ÚNodez+Concrete implementation for interior nodes.Ncóœ—||_t|«|_|jD] }||_Œ |||_|r |dd|_yd|_y)zð Initializer. Takes a type constant (a symbol number >= 256), a sequence of child nodes, and an optional context keyword argument. As a side effect, the parent pointers of the children are updated. N)r r5r7r6r\Úfixers_applied)r%r r7Úcontextr\rrr>s rÚ__init__z Node.__init__ÓsR€ðˆŒ ܘX›ˆŒ Ø—-”-ˆBàˆBIð ð Ð Ø ˆDŒKÙ Ø"0±Ð"3ˆDÕ à"&ˆDÕ rcóz—|jj›dt|j«›d|j›dS©z)Return a canonical string representation.Ú(ú, Ú))r!rfrr r7r,s rÚ__repr__z Node.__repr__ìs,€à#Ÿ~™~×6Ó6Ü(¨¯©Õ3Ø#Ÿ}›}ð.ð .rcóT—djtt|j««S)úk Return a pretty string representation. This reproduces the input source exactly. r[)ÚjoinÚmaprcr7r,s rÚ __unicode__zNode.__unicode__òs€ð w‰w”sœ3 § ¡ Ó.Ó/Ð/rr_cód—|j|jf|j|jfk(S©zCompare two nodes for equality.)r r7r$s rr#zNode._eqýs'€à— ‘ ˜4Ÿ=™=Ð)¨e¯j©j¸%¿.¹.Ð-IÑIÐIrcóœ—t|j|jDcgc]}|j«‘Œc}|j¬«Scc}w©z$Return a cloned (deep) copy of self.)rr)rpr r7r-rr)r%r>s rr-z Node.clones<€äD—I‘I°T·]²]ÓC±]¨r §¡¥ °]ÑCØ#'×#6Ñ#6ô8ð 8ùÒCsŸA c#ójK—|jD]}|j«Ed{–—†Œ|–—y7Œ ­w©z*Return a post-order iterator for the tree.N)r7r0rWs rr0zNode.post_orders0èø€à—]”]ˆEØ×'Ñ'Ó)× )Ñ )ð#à‹ ð *ús ‚#3¥1¦ 3c#ójK—|–—|jD]}|j«Ed{–—†Œy7Œ­w©z)Return a pre-order iterator for the tree.N)r7r2rWs rr2zNode.pre_order s,èø€àŠ Ø—]”]ˆEØ—‘Ó(× (Ñ (ñ#Ø (ús ‚'3©1ª3cóN—|jsy|jdjS)zO The whitespace and comments preceding this node in the input. r[r©r7r\r,s rr\z Node.prefixs#€ð }Š}ØØ}‰}˜QÑ×&Ñ&Ð&rcóF—|jr||jd_yy©Nrr‰©r%r\s rr\z Node.prefixs€à =Š=Ø&,ˆDM‰M˜!Ñ Õ #ð rcóx—||_d|j|_||j|<|j«y)z… Equivalent to 'node.children[i] = child'. This method also sets the child's parent attribute appropriately. N)r6r7r:rOs rÚ set_childzNode.set_child s3€ð ˆŒ Ø"&ˆ ‰ aÑÔØ ˆ ‰ aÑØ ‰ rcój—||_|jj||«|j«y)z‹ Equivalent to 'node.children.insert(i, child)'. This method also sets the child's parent attribute appropriately. N)r6r7Úinsertr:rOs rÚ insert_childzNode.insert_child*s(€ð ˆŒ Ø ‰ ×јQ Ô&Ø ‰ rcóh—||_|jj|«|j«y)zˆ Equivalent to 'node.children.append(child)'. This method also sets the child's parent attribute appropriately. N)r6r7r9r:rWs rÚ append_childzNode.append_child3s&€ð ˆŒ Ø ‰ ×јUÔ#Ø ‰ r©NNN)rfrgrhrirtrzrrmrnrer#r-r0r2rlr\ÚsetterrŽr‘r“rrrrprpÏs„„á5ðØØ $ó'ò2.ò 0ð ×ј&Ò ØˆòJò8ò ò )ð ñ'óð'ð ‡]]ñ-óð-òòórrpcóª—eZdZdZdZdZdZddgfd„Zd„Zd„Z e jdkDre Z d „Z d „Zd „Zd „Zd „Zed„«Zej(d„«Zy)rBz'Concrete implementation for leaf nodes.r[rNcóx—||\|_\|_|_||_||_|||_|dd|_y)z— Initializer. Takes a type constant (a token number < 256), a string value, and an optional context keyword argument. N)Ú_prefixrCÚcolumnr Úvaluerr)r%r ršrsr\rrs rrtz Leaf.__init__FsG€ð Ð Ø7>Ñ 4ˆDŒLÑ4˜4œ;¨¬ ؈Œ ؈Œ Ø Ð Ø!ˆDŒLØ,©QÐ/ˆÕrcóh—|jj›d|j›d|j›dSrv)r!rfr ršr,s rrzz Leaf.__repr__Ys'€à#Ÿ~™~×6Ó6Ø#Ÿy›yØ#Ÿz›zð+ð +rcóF—|jt|j«zS)r|)r\rcršr,s rrzLeaf.__unicode___s€ð {‰{œS §¡›_Ñ,Ð,rr_cód—|j|jf|j|jfk(Sr)r ršr$s rr#zLeaf._eqjs'€à— ‘ ˜4Ÿ:™:Ð&¨5¯:©:°u·{±{Ð*CÑCÐCrcó —t|j|j|j|j|j ff|j ¬«Srƒ)rBr ršr\rCr™rrr,s rr-z Leaf.clonens=€äD—I‘I˜tŸz™zØ—[‘[ 4§;¡;°· ± Ð"<Ð=Ø#'×#6Ñ#6ô8ð 8rc#óK—|–—y­wrUrr,s rrVz Leaf.leavests èø€Ø‹ ùó‚c#óK—|–—y­wr…rr,s rr0zLeaf.post_orderwó èø€à‹ ùr c#óK—|–—y­wr‡rr,s rr2zLeaf.pre_order{r¢r có—|jS)zP The whitespace and comments preceding this token in the input. )r˜r,s rr\z Leaf.prefixs€ð |‰|Ðrcó2—|j«||_yrU)r:r˜rŒs rr\z Leaf.prefix†s€à ‰ ŒØˆ r)rfrgrhrir˜rCr™rtrzrrmrnrer#r-rVr0r2rlr\r•rrrrBrB=s‹„á1ð€GØ €FØ €FðØØ "ó0ò&+ò -ð ×ј&Ò ØˆòDò8ò òòðñóðð  ‡]]ñóñrrBcóŽ—|\}}}}|s||jvr!t|«dk(r|dSt|||¬«St|||¬«S)zõ Convert raw node information to a Node or Leaf instance. This is passed to the parser driver which calls it whenever a reduction of a grammar rule produces a new complete node, so that the tree is build strictly bottom-up. rr)rs)Ú number2symbolÚlenrprB)ÚgrÚraw_noder ršrsr7s rÚconvertr«‹sX€ð&.Ñ"€Dˆ%˜(Ù4˜2×+Ñ+Ñ+ô ˆx‹=˜AÒ Ø˜A‘;Ð ÜD˜(¨GÔ4Ð4äD˜%¨Ô1Ð1rcóD—eZdZdZdZdZdZd„Zd„Zd„Z d d„Z d d„Z d„Z y) Ú BasePatterna” A pattern is a tree matching pattern. It looks for a specific node type (token or symbol), and optionally for a specific content. This is an abstract base class. There are three concrete subclasses: - LeafPattern matches a single leaf node; - NodePattern matches a single node (usually non-leaf); - WildcardPattern matches a sequence of nodes of variable length. Ncó,—tj|«S)z>Constructor that prevents BasePattern from being instantiated.rrs rrzBasePattern.__new__³rrcóð—t|j«|j|jg}|r|d€ |d=|r|d€Œ |jj ›ddj tt|««›dS)Néÿÿÿÿrwrxry) rr Úcontentrr!rfr}r~Úrepr)r%rs rrzzBasePattern.__repr__¸sd€Ü˜$Ÿ)™)Ó$ d§l¡l°D·I±IÐ>ˆÙt˜B‘xÐ'ØRñt˜B‘xÑ'àŸ>™>×2Ó2°D·I±I¼cÄ$È»oÕ4NÐOÐOrcó—|S)zŒ A subclass can define this as a hook for optimizations. Returns either self or another node with the same effect. rr,s rÚoptimizezBasePattern.optimize¾s €ð ˆ rcóú—|j|j|jk7ry|j,d}|i}|j||«sy|r|j|«||jr|||j<y)a# Does this pattern exactly match a node? Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. Default implementation for non-wildcard patterns. NFT)r r±Ú _submatchÚupdater)r%rEÚresultsÚrs rÚmatchzBasePattern.matchÆsw€ð 9‰9Ð  T§Y¡Y°$·)±)Ò%;ØØ <‰<Ð #؈AØÐ"ØØ—>‘> $¨Ô*ØÙØ—‘˜qÔ!Ø Ð  4§9¢9Ø!%ˆGD—I‘IÑ ØrcóJ—t|«dk7ry|j|d|«S)z Does this pattern exactly match a sequence of nodes? Default implementation for non-wildcard patterns. rFr)r¨rº)r%Únodesr¸s rÚ match_seqzBasePattern.match_seqßs'€ô ˆu‹:˜Š?ØØz‰z˜% ™( GÓ,Ð,rc#óNK—i}|r|j|d|«rd|f–—yyy­w)z} Generator yielding all matches for this pattern. Default implementation for non-wildcard patterns. rrN)rº)r%r¼r¹s rÚgenerate_matcheszBasePattern.generate_matchesés1èø€ð ˆÙ T—Z‘Z  a¡¨!Ô,ØQ$‹Jð-ˆ5ùs‚#%rU) rfrgrhrir r±rrrzr´rºr½r¿rrrr­r­žs7„ñ ð €DØ€GØ €Dò#ò Pò óó2-órr­có$—eZdZdd„Zdd„Zdd„Zy)Ú LeafPatternNcó6—||||_||_||_y)ap Initializer. Takes optional type, content, and name. The type, if given must be a token type (< 256). If not given, this matches any *leaf* node; the content may still be required. The content, if given, must be a string. If a name is given, the matching node is stored in the results dict under that key. N)r r±r)r%r r±rs rrtzLeafPattern.__init__ös%€ð Ð à Ð àˆŒ ؈Œ ؈ rcóR—t|t«sytj|||«S)z*Override match() to insist on a leaf node.F)r4rBr­rº©r%rEr¸s rrºzLeafPattern.match s$€ä˜$¤Ô%ØÜ× Ñ   t¨WÓ5Ð5rcó4—|j|jk(S)á„ Match the pattern's content to the node's children. This assumes the node type matches and self.content is not None. Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. When returning False, the results dict may still be updated. )r±ršrÄs rr¶zLeafPattern._submatchs€ð|‰|˜tŸz™zÑ)Ð)rr”rU)rfrgrhrtrºr¶rrrrÁrÁôs„óó(6ô *rrÁcó —eZdZdZdd„Zdd„Zy)Ú NodePatternFNcó¢—||6t|«}t|«D]\}}t|t«sŒd|_Œ||_||_||_y)ad Initializer. Takes optional type, content, and name. The type, if given, must be a symbol type (>= 256). If the type is None this matches *any* single node (leaf or not), except if content is not None, in which it only matches non-leaf nodes that also match the content pattern. The content, if not None, must be a sequence of Patterns that must match the node's children exactly. If the content is given, the type must not be None. If a name is given, the matching node is stored in the results dict under that key. NT)r5rJr4ÚWildcardPatternÚ wildcardsr r±r)r%r r±rrKÚitems rrtzNodePattern.__init__$sT€ð Ð à Ð ä˜7“mˆGÜ$ WÖ-‘4ä˜d¤OÕ4Ø%)D•Nð.ðˆŒ ØˆŒ ؈ rcó˜—|jrVt|j|j«D]2\}}|t |j«k(sŒ||j |«yyt |j«t |j«k7ryt |j|j«D]\}}|j||«rŒyy)rÆTF)rËr¿r±r7r¨r·Úziprº)r%rEr¸Úcr¹Ú subpatternrPs rr¶zNodePattern._submatchAs¨€ð >Š>Ü(¨¯©°t·}±}ÖE‘1Øœ˜DŸM™MÓ*Ó*ØÐ*ØŸ™ qÔ)Ùð Fð Ü ˆt|‰|Ó ¤ D§M¡MÓ 2Ò 2ØÜ!$ T§\¡\°4·=±=Ö!AÑ ˆJ˜Ø×#Ñ# E¨7Õ3Ùð"Bðrr”rU)rfrgrhrËrtr¶rrrrÈrÈ s„à€Ióô:rrÈcóN—eZdZdZddedfd„Zd„Zd d„Zd d„Zd„Z d „Z d „Z d „Z y) rÊa A wildcard pattern can match zero or more nodes. This has all the flexibility needed to implement patterns like: .* .+ .? .{m,n} (a b c | d e | f) (...)* (...)+ (...)? (...){m,n} except it always uses non-greedy matching. Nrcó€—| ttt|««}|D]}Œ||_||_||_||_y)aÏ Initializer. Args: content: optional sequence of subsequences of patterns; if absent, matches one node; if present, each subsequence is an alternative [*] min: optional minimum number of times to match, default 0 max: optional maximum number of times to match, default HUGE name: optional name assigned to this match [*] Thus, if content is [[a, b, c], [d, e], [f, g, h]] this is equivalent to (a b c | d e | f g h); if content is None, this is equivalent to '.' in regular expression terms. The min and max parameters work as follows: min=0, max=maxint: .* min=1, max=maxint: .+ min=0, max=1: .? min=1, max=1: . If content is not None, replace the dot with the parenthesized list of alternatives, e.g. (a b c | d e | f g h)* N)Útupler~r±ÚminÚmaxr)r%r±rÔrÕrÚalts rrtzWildcardPattern.__init__ks@€ð0 Ð ÜœC¤ wÓ/Ó0ˆGó‘wàˆŒ ؈ŒØˆŒØˆ rcó°—d}|jEt|j«dk(r-t|jd«dk(r|jdd}|jdk(r\|jdk(rM|j€t |j ¬«S|)|j |j k(r|j «S|jdkrˆt|t«rx|jdkri|j |j k(rPt|j|j|jz|j|jz|j «S|S)z+Optimize certain stacked wildcard patterns.Nrr)r) r±r¨rÔrÕrÈrr´r4rÊ)r%rÐs rr´zWildcardPattern.optimizeŽs €àˆ Ø L‰LÐ $Ü — ‘ Ó  Ò "¤s¨4¯<©<¸©?Ó';¸qÒ'@ØŸ™ a™¨Ñ+ˆJØ 8‰8qŠ=˜TŸX™X¨š]Ø|‰|Ð#Ü"¨¯ © Ô2Ð2ØÐ%¨4¯9©9¸ ¿¹Ò+GØ!×*Ñ*Ó,Ð,Ø H‰H˜ŠMœj¨´_ÔEØ N‰N˜aÒ  D§I¡I°·±Ò$@Ü" :×#5Ñ#5Ø#'§8¡8¨J¯N©NÑ#:Ø#'§8¡8¨J¯N©NÑ#:Ø#-§?¡?ó4ð 4ðˆ rcó(—|j|g|«S)z'Does this pattern exactly match a node?)r½rÄs rrºzWildcardPattern.match¡s€à~‰~˜t˜f gÓ.Ð.rcóÄ—|j|«D]L\}}|t|«k(sŒ|5|j|«|jrt |«||j<yy)z4Does this pattern exactly match a sequence of nodes?TF)r¿r¨r·rr5)r%r¼r¸rÏr¹s rr½zWildcardPattern.match_seq¥sY€à×)Ñ)¨%Ö0‰DˆAˆqØ”C˜“J‹ØÐ&Ø—N‘N 1Ô%Ø—y’yÜ-1°%«[˜ § ¡ Ñ*Ùð 1ðrc #ó&K—|j€bt|jdtt|«|j«z«D](}i}|j r|d|||j <||f–—Œ*y|j dk(r|j |«–—yttd«r#tj}t«t_ |j|d«D])\}}|j r|d|||j <||f–—Œ+ ttd«r t_ yy#t$r@|j|«D])\}}|j r|d|||j <||f–—Œ+YŒewxYw#ttd«r t_ wwxYw­w)a" Generator yielding matches for a sequence of nodes. Args: nodes: sequence of nodes Yields: (count, results) tuples where: count: the match comprises nodes[:count]; results: dict containing named submatches. NrÚ bare_nameÚ getrefcountr)r±ÚrangerÔr¨rÕrÚ_bare_name_matchesÚhasattrrmÚstderrrÚ_recursive_matchesÚ RuntimeErrorÚ_iterative_matches)r%r¼Úcountr¹Ú save_stderrs rr¿z WildcardPattern.generate_matches°sdèø€ð <‰<Ð ä˜tŸx™x¨¬S´°U³¸T¿X¹XÓ-FÑ)FÖGØØ—9’9Ø#(¨¨% =Ad—i‘i‘LؘQh“ñ Hð Y‰Y˜+Ò %Ø×)Ñ)¨%Ó0Ó 0ô ”s˜MÔ*Ü!Ÿj™j Ü%›Z”” ð -Ø $× 7Ñ 7¸¸qÖ A‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nñ!Bôœ3  Ô.Ø!,”C•Jð/øô ò #ð!%× 7Ñ 7¸Ö >‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nò!?ð #ûôœ3  Ô.Ø!,”C•Jð/üs=‚CFÃ>D$ÄE0ÄFÄ$AE-Å*E0Å,E-Å-E0Å0FÆFc#óK—t|«}d|jk\rdif–—g}|jD]/}t||«D]\}}||f–—|j ||f«Œ Œ1|r™g}|D]Œ\}} ||ksŒ ||j ksŒ|jD]b}t|||d«D]N\} } | dkDsŒ i}|j | «|j | «|| z|f–—|j || z|f«ŒPŒdŒŽ|}|rŒ˜yy­w)z(Helper to iteratively yield the matches.rN)r¨rÔr±r¿r9rÕr·) r%r¼Únodelenr¸rÖrÏr¹Ú new_resultsÚc0Úr0Úc1Úr1s rrãz"WildcardPattern._iterative_matchesÝs èø€äe“*ˆØ —‘Š=ØR%ŠKàˆà—<”<ˆCÜ(¨¨eÖ4‘1ؘd’ Ø—‘  1˜vÕ&ñ5ð ñ ؈KÛ!‘Bà˜“< B¨$¯(©(£NØ#Ÿ|œ|˜Ü&6°s¸EÀ"À#¸JÖ&G™F˜B Ø! A›vØ$& Ø !§¡¨¤ Ø !§¡¨¤ Ø&(¨2¡g¨q jÒ 0Ø +× 2Ñ 2°B¸±G¸Q°<Õ @ñ 'Hñ ,ð"ð"ˆGôùs‚A2C?Á5C?Â)C?Â/A C?Ã=C?cóÖ—d}i}d}t|«}|sA||krrþs¢ðñð3€ ã Ýà€à€ ò6ôn-ˆ6ôn-ô`kˆ4ôkô\Lˆ4ôLò\2ô&S&ôSôl)*+ô)*ôX:+ô:ôzy)kôy)ôx [ô óF%rlib2to3/__pycache__/fixer_util.cpython-312.opt-1.pyc000064400000052440152462633570016070 0ustar00Ë T—çhf;ãó¸—dZddlmZddlmZmZddlmZddl m Z d„Z d„Z d„Z d „Zd-d „Zd „Zd „Zd„Ze «e «fd„Zd.d„Zd„Zd„Zd-d„Zd„Zd-d„Zd-d„Zd„Zd„Zd„Zd„Zd„Zhd£Z d„Z!da"da#d a$d!a%d"„Z&d#„Z'd$„Z(d%„Z)d&„Z*d'„Z+d(„Z,d)„Z-ej\ej^hZ0d-d*„Z1ej^ej\ejdhZ3d+„Z4d-d,„Z5y )/z1Utility functions, node construction macros, etc.é)Útoken)ÚLeafÚNode)Úpython_symbols)Úpatcompcól—ttj|ttj d«|g«S)NÚ=)rÚsymsÚargumentrrÚEQUAL)ÚkeywordÚvalues ú+/usr/lib64/python3.12/lib2to3/fixer_util.pyÚ KeywordArgrs*€Ü ”— ‘ Øœ$œuŸ{™{¨CÓ0°%Ð8ó :ð:ócó6—ttjd«S)NÚ()rrÚLPAR©rrÚLParenró€Ü ”— ‘ ˜CÓ Ð rcó6—ttjd«S)NÚ))rrÚRPARrrrÚRParenrrrc óÒ—t|t«s|g}t|t«s d|_|g}ttj |t tjdd¬«gz|z«S)zBuild an assignment statementÚ r ©Úprefix) Ú isinstanceÚlistrrr Úatomrrr )ÚtargetÚsources rÚAssignr%s]€ä fœdÔ #ØˆÜ fœdÔ #؈Œ Øˆä ”— ‘ Øœ$œuŸ{™{¨C¸Ô<Ð=Ñ=ÀÑFó HðHrNcó:—ttj||¬«S)zReturn a NAME leafr)rrÚNAME)Únamers rÚNamer)$s€ä ”— ‘ ˜D¨Ô 0Ð0rcóN—|ttjt«|g«gS)zA node tuple for obj.attr)rr ÚtrailerÚDot)ÚobjÚattrs rÚAttrr/(s€à ””d—l‘l¤S£U¨D MÓ2Ð 3Ð3rcó6—ttjd«S)z A comma leafÚ,)rrÚCOMMArrrÚCommar3,s€ä ”— ‘ ˜SÓ !Ð!rcó6—ttjd«S)zA period (.) leafÚ.)rrÚDOTrrrr,r,0s€ä ”— ‘ ˜3Ó ÐrcóΗttj|j«|j«g«}|r*|j dttj |««|S)z-A parenthesised argument list, used by Call()r)rr r+ÚcloneÚ insert_childÚarglist)ÚargsÚlparenÚrparenÚnodes rÚArgListr?4sF€ä ”— ‘ ˜vŸ|™|›~¨v¯|©|«~Ð>Ó ?€DÙ Ø ×ј!œT¤$§,¡,°Ó5Ô6Ø €Krcób—ttj|t|«g«}|||_|S)zA function call)rr Úpowerr?r)Ú func_namer;rr>s rÚCallrC;s-€ä ”— ‘ ˜Y¬°« Ð6Ó 7€DØ ÐØˆŒ Ø €Krcó6—ttjd«S)zA newline literalÚ ©rrÚNEWLINErrrÚNewlinerHBs€ä ”— ‘ ˜tÓ $Ð$rcó6—ttjd«S)z A blank lineÚrFrrrÚ BlankLinerKFs€ä ”— ‘ ˜rÓ "Ð"rcó:—ttj||¬«S)Nr)rrÚNUMBER)Únrs rÚNumberrOJs€Ü ”— ‘ ˜a¨Ô /Ð/rc óœ—ttjttj d«|ttj d«g«S)zA numeric or string subscriptÚ[Ú])rr r+rrÚLBRACEÚRBRACE)Ú index_nodes rÚ SubscriptrVMs8€ä ”— ‘ œt¤E§L¡L°#Ó6Ø)Ü#¤E§L¡L°#Ó6ð8ó 9ð9rcó:—ttj||¬«S)z A string leafr)rrÚSTRING)Ústringrs rÚStringrZSs€ä ”— ‘ ˜f¨VÔ 4Ð4rc óh—d|_d|_d|_ttjd«}d|_ttjd«}d|_||||g}|rSd|_ttjd«}d|_|j t t j||g««t t j|t t j|«g«}t t jttjd«|ttjd«g«S)zuA list comprehension of the form [xp for fp in it if test]. If test is None, the "if test" part is omitted. rJrÚforÚinÚifrQrR) rrrr'Úappendrr Úcomp_ifÚ listmakerÚcomp_forr"rSrT) ÚxpÚfpÚitÚtestÚfor_leafÚin_leafÚ inner_argsÚif_leafÚinners rÚListComprlWsê€ð €B„IØ€B„IØ€B„IÜ”E—J‘J Ó&€HØ€H„OÜ”5—:‘:˜tÓ$€GØ€G„NؘB ¨Ð,€J٠؈Œ Ü”u—z‘z 4Ó(ˆØˆŒØ×Ñœ$œtŸ|™|¨g°t¨_Ó=Ô>Ü ”—‘ "¤d¬4¯=©=¸*Ó&EÐ!FÓ G€EÜ ”— ‘ ÜœUŸ\™\¨3Ó/ØÜœUŸ\™\¨3Ó/ð1ó 2ð2rcó<—|D]}|j«Œttjd«ttj|d¬«ttjdd¬«t t j |«g}t t j|«}|S)zO Return an import statement in the form: from package import name_leafsÚfromrrÚimport)Úremoverrr'rr Úimport_as_namesÚ import_from)Ú package_nameÚ name_leafsÚleafÚchildrenÚimps rÚ FromImportrxosw€óˆà ‰ ðô”U—Z‘Z Ó(Ü”U—Z‘Z °cÔ:Ü”U—Z‘Z °#Ô6Ü”T×)Ñ)¨:Ó6ð8€Hô Œt×Ñ Ó *€CØ €Jrc óN—|dj«}|jtjk(r|j«}n)t tj|j«g«}|d}|r|Dcgc]}|j«‘Œ}}t tj t t|d«t|d««t tj|dj«||dj«g«gz|z«}|j|_ |Scc}w)zfReturns an import statement and calls a method of the module: import module module.name()r-ÚafterérÚlparÚrpar) r8Útyper r:rrAr/r)r+r)r>ÚresultsÚnamesr-Ú newarglistrzrNÚnews rÚ ImportAndCallrƒ‚sû€ð %‰.× Ñ Ó €CØ ‡xx”4—<‘<ÒØ—Y‘Y“[‰ äœ$Ÿ,™,¨¯©«¨ Ó6ˆ Ø GÑ €EÙ Ù$)Ó*¡E˜q—‘• EˆÐ*Ü Œtz‰zÜ”D˜˜q™“N¤D¨¨q©£NÓ3Ü”T—\‘\ؘf‘o×+Ñ+Ó-Ø Ø˜f‘o×+Ñ+Ó-ð/ó0ð1ñ1ð49ñ 9ó :€Cð —‘€C„JØ €Jùò+sÁ6D"cóì—t|t«r"|jt«t «gk(ryt|t«xr±t |j«dk(xr—t|jdt «xrxt|jdt«xrYt|jdt «xr:|jdjdk(xr|jdjdk(S)z(Does the node represent a tuple literal?Tér{rérr)r rrvrrÚlenrr©r>s rÚis_tupler‰žsЀä$œÔ $§-¡-´F³H¼f»hÐ3GÒ"GØÜ tœTÓ "ò .ÜD—M‘MÓ" aÑ'ò .ä˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ð /rcóJ—t|t«xr’t|j«dkDxrxt|jdt«xrYt|jdt«xr:|jdj dk(xr|jdj dk(S)z'Does the node represent a list literal?rr{éÿÿÿÿrQrR)r rr‡rvrrrˆs rÚis_listrŒªs•€ä tœTÓ "ò /ÜD—M‘MÓ" QÑ&ò /ä˜4Ÿ=™=¨Ñ+¬TÓ2ò /ô˜4Ÿ=™=¨Ñ,¬dÓ3ò /ð— ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  /ð — ‘ ˜bÑ!×'Ñ'¨3Ñ.ð 0rcó\—ttjt«|t «g«S©N)rr r"rrrˆs rÚ parenthesizer¸s€Ü ”— ‘ œF›H d¬F«HÐ5Ó 6Ð6r> ÚallÚanyÚmaxÚminÚsetÚsumr!ÚtupleÚsortedÚ enumeratec#óPK—t||«}|r|–—t||«}|rŒyy­w)alFollow an attribute chain. If you have a chain of objects where a.foo -> b, b.foo-> c, etc, use this to iterate over all objects in the chain. Iteration is terminated by getattr(x, attr) is None. Args: obj: the starting object attr: the name of the chaining attribute Yields: Each successive object in the chain. N)Úgetattr)r-r.Únexts rÚ attr_chainrœ¿s-èø€ô 3˜Ó €DÙ ØŠ Üt˜TÓ"ˆô ùs‚!&¤&zefor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > z³ power< ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' | 'any' | 'all' | 'enumerate' | (any* trailer< '.' 'join' >) ) trailer< '(' node=any ')' > any* > z` power< ( 'sorted' | 'enumerate' ) trailer< '(' arglist ')' > any* > FcóD—tsMtjt«atjt«atjt «adattt g}t |t|d««D]#\}}i}|j||«sŒ|d|usŒ#yy)a Returns true if node is in an environment where all that is required of it is being iterable (ie, it doesn't matter if it returns a list or an iterator). See test_map_nochange in test_fixers.py for some examples and tests. TÚparentr>F) Ú pats_builtrÚcompile_patternÚp0Úp1Úp2ÚziprœÚmatch)r>ÚpatternsÚpatternržrs rÚin_special_contextr¨åsŠ€õ Ü × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆØˆ Ü”Bœˆ|€Hܘx¬°D¸(Ó)CÖD‰ˆØˆØ =‰=˜ Õ )¨g°f©oÀÒ.EÙðEð rcó—|j}||jtjk(ry|j}|jt j t jfvry|jt jk(r|jd|ury|jt jk(sM|jt jk(r1||jtjk(s|jd|uryy)zG Check that something isn't an attribute or function name etc. Fr{T) Ú prev_siblingr~rr6ržr ÚfuncdefÚclassdefÚ expr_stmtrvÚ parametersÚ typedargslistr2)r>Úprevržs rÚis_probably_builtinr±øs¿€ð × Ñ €DØ Ð˜DŸI™I¬¯©Ò2àØ [‰[€FØ ‡{{”t—|‘|¤T§]¡]Ð3Ñ3ØØ ‡{{”d—n‘nÒ$¨¯©¸Ñ);¸tÑ)CàØ ‡{{”d—o‘oÒ%Ø [‰[œD×.Ñ.Ò .Ø Ð  $§)¡)¬u¯{©{Ò":Ø O‰O˜AÑ  $Ñ &ðØ rcó—|||jtjk(rPt|j«dkDr8|jd}|jt j k(r |jS|j}|Œ|y)zFind the indentation of *node*.r†rrJ) r~r Úsuiter‡rvrÚINDENTrrž)r>Úindents rÚfind_indentationr¶sf€à Ð Ø 9‰9œŸ ™ Ò "¤s¨4¯=©=Ó'9¸AÒ'=Ø—]‘] 1Ñ%ˆFØ{‰{œeŸl™lÒ*Ø—|‘|Ð#Ø{‰{ˆð Ñ ð rcóЗ|jtjk(r|S|j«}|jdc}|_t tj|g«}||_|SrŽ)r~r r³r8ržr)r>ržr³s rÚ make_suiter¸sR€Ø ‡yy”D—J‘JÒØˆ Ø :‰:‹<€DØŸ+™+ tЀFˆDŒKÜ ”—‘˜d˜VÓ $€EØ€E„LØ €Lrcó®—|jtjk7r7|j}|s t d«‚|jtjk7rŒ7|S)zFind the top level namespace.z,root found before file_input node was found.)r~r Ú file_inputržÚ ValueErrorrˆs rÚ find_rootr¼&sE€ð )‰)”t—‘Ò &Ø{‰{ˆÙÜÐKÓLÐ Lð )‰)”t—‘Ó &ð €KrcóD—t|t|«|«}t|«S)zÞ Returns true if name is imported from package at the top level of the tree which node belongs to. To cover the case of an import like 'import foo', use None for the package and 'foo' for the name. )Ú find_bindingr¼Úbool)Úpackager(r>Úbindings rÚdoes_tree_importrÂ/s €ô ˜4¤¨4£°'Ó:€GÜ ‹=ÐrcóZ—|jtjtjfvS)z0Returns true if the node is an import statement.)r~r Ú import_namerrrˆs rÚ is_importrÅ7s"€à 9‰9œ×)Ñ)¬4×+;Ñ+;Ð<Ð <Ð\}}||«sŒt|j|d«D]\}}||«rŒn||z}n|dk(ryt|j«D]a\}}|jt j k(sŒ$|jsŒ1|jdjtjk(sŒ\|dz}n|€Ott jttjd«ttj|d¬«g«} n't|ttj|d¬«g«} | t«g} |j|tt j | ««y)z\ Works like `does_tree_import` but adds an import statement if it was not imported. cóŒ—|jtjk(xr&|jxrt |jd«S)Nr{)r~r Ú simple_stmtrvrÅrˆs rÚis_import_stmtz$touch_import..is_import_stmt>s:€Ø— ‘ œT×-Ñ-Ñ-ò,°$·-±-ò,ܘ$Ÿ-™-¨Ñ*Ó+ð -rNr{rrorr)r¼rÂr˜rvr~r rÈrrXrrÄrr'rxrHr9) rÀr(r>rÉÚrootÚ insert_posÚoffsetÚidxÚnode2Úimport_rvs rÚ touch_importrÐ;sh€ò-ô T‹?€D䘠 tÔ,ØðЀJܘtŸ}™}Ö-‰ ˆˆTÙ˜dÔ#Ø Ü& t§}¡}°S°TÐ':Ö;‰MˆFEÙ! %Õ(Ùð<ð˜6‘\ˆ Ù ð.ðQ‚Ü" 4§=¡=Ö1‰IˆCØ— ‘ œT×-Ñ-Ó-°$·-³-Ø}‰}˜QÑ×$Ñ$¬¯ © Ó4Ø  1™W Ùð 2ð €Ü”t×'Ñ'Ü ”—‘˜XÓ &Ü ”—‘˜T¨#Ô .ð* ó ‰ô ˜W¤t¬E¯J©J¸ÀSÔ'IÐ&JÓKˆàœ›Ð#€HØ×Ñj¤$¤t×'7Ñ'7¸Ó"BÕCrc óœ—|jD]<}d}|jtjk(rGt ||jd«r|cSt |t |jd«|«}|r¾|}nº|jtjtjfvr*t |t |jd«|«}|rh|}nd|jtjk(r£t |t |jd«|«}|r|}nt|jdd«D]^\}}|jtjk(sŒ$|jdk(sŒ4t |t |j|dz«|«}|sŒ]|}Œ`n¤|jtvr|jdj|k(r|}nst|||«r|}nc|jtj k(rt |||«}n8|jtj"k(rt ||jd«r|}|sŒ(|s|cSt%|«sŒ;|cSy) zº Returns the node which binds variable name, otherwise None. If optional argument package is supplied, only imports will be returned. See test cases for examples.Nrr‹r†r…Ú:ér{)rvr~r Úfor_stmtÚ_findr¾r¸Úif_stmtÚ while_stmtÚtry_stmtr˜rÚCOLONrÚ _def_symsÚ_is_import_bindingrÈr­rÅ)r(r>rÀÚchildÚretrNÚiÚkids rr¾r¾isӀ𠗕ˆØˆØ :‰:œŸ™Ò &ÜT˜5Ÿ>™>¨!Ñ,Ô-Ø’ ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰ZœDŸL™L¬$¯/©/Ð:Ñ :ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰Zœ4Ÿ=™=Ò (ܘT¤:¨e¯n©n¸QÑ.?Ó#@À'ÓJˆAÙØ’ä'¨¯©°q°rÐ(:Ö;‘FAsØ—x‘x¤5§;¡;Ó.°3·9±9ÀÓ3Cä(¨¬z¸%¿.¹.ÈÈ1ÉÑ:MÓ/NÐPWÓX˜Ú A™cñ <ð Z‰Zœ9Ñ $¨¯©¸Ñ):×)@Ñ)@ÀDÒ)H؉CÜ   t¨WÔ 5؉CØ Z‰Zœ4×+Ñ+Ò +ܘt U¨GÓ4‰CØ Z‰Zœ4Ÿ>™>Ò )ÜT˜5Ÿ>™>¨!Ñ,Ô-Øã ÙØ’ ܘŽ~Ø’ ðEðF rcó —|g}|r~|j«}|jdkDr.|jtvr|j|j«n.|jt j k(r|j|k(r|S|rŒ~y)Né)Úpopr~Ú _block_symsÚextendrvrr'r)r(r>Únodess rrÕrÕ”sg€Ø ˆF€EÙ Øy‰y‹{ˆØ 9‰9sŠ?˜tŸy™y´ Ñ;Ø L‰L˜Ÿ™Õ 'Ø Y‰Yœ%Ÿ*™*Ò $¨¯©°tÒ);؈Kò ð rcó,—|jtjk(r9|s6|jd}|jtjk(r|jD]q}|jtj k(r!|jdj |k(sŒ=|cS|jtjk(sŒ_|j |k(sŒo|cSy|jtj k(r=|jd}|jtjk(r?|j |k(r0|S|jtjk(r|j |k(r|Sy|jtjk(r|r*t|jd«j«|k7ry|jd}|r td|«ry|jtjk(rt||«r|S|jtjk(r>|jd}|jtjk(r|j |k(r|Sy|jtjk(r|j |k(r|S|r|jtjk(r|Sy)zš Will return node if node will import name, or node will import * from package. None is returned otherwise. See test cases for examples. rr†r‹Nr…Úas)r~r rÄrvÚdotted_as_namesÚdotted_as_namerrr'rrÚstrÚstriprÕrqÚimport_as_nameÚSTAR)r>r(rÀrwrÜÚlastrNs rrÛrÛžsô€ð  ‡yy”D×$Ñ$Ó$ªWØm‰m˜AÑˆØ 8‰8”t×+Ñ+Ò +ØŸœØ—:‘:¤×!4Ñ!4Ò4Ø—~‘~ aÑ(×.Ñ.°$Ó6Ø#š Ø—Z‘Z¤5§:¡:Ó-°%·+±+ÀÓ2EØ’Kð &ð> ð3X‰Xœ×,Ñ,Ò ,Ø—<‘< Ñ#ˆDØy‰yœEŸJ™JÒ&¨4¯:©:¸Ò+=Ø Ø X‰XœŸ™Ò #¨¯ © °TÒ(9؈Kð( ð' ‰”d×&Ñ&Ó &ñ ”s˜4Ÿ=™=¨Ñ+Ó,×2Ñ2Ó4¸Ò?ØØ M‰M˜!Ñ ˆÙ ”u˜T 1”~àØ V‰V”t×+Ñ+Ò +´°d¸A´ØˆKØ V‰V”t×*Ñ*Ò *Ø—J‘J˜q‘MˆEØz‰zœUŸZ™ZÒ'¨E¯K©K¸4Ò,?Ø ð ð V‰V”u—z‘zÒ ! a§g¡g°¢o؈KÙ ˜Ÿ™¤5§:¡:Ò-؈KØ rrŽ)NN)6Ú__doc__Úpgen2rÚpytreerrÚpygramrr rJrrrrr%r)r/r3r,r?rCrHrKrOrVrZrlrxrƒr‰rŒrÚconsuming_callsrœr¡r¢r£rŸr¨r±r¶r¸r¼rÂrÅrÐr¬r«rÚr¾r+rãrÕrÛrrrÚrôsðÙ7õßÝ*Ýò:ò!ò!ò Hó1ò4ò"ò ñ ›©&«(óóò%ò#ó0ò9ó 5ó2ò0ò&ò8 /ò0ò7ò.€ò#ð& €ð€ð€ð€ òò&ò.òòòò=ò*DðZ]‰]˜DŸL™LÐ )€ ó(ðT|‰|˜TŸ]™]¨D¯L©LÐ9€ òô'rlib2to3/__pycache__/__init__.cpython-312.opt-2.pyc000064400000000532152462633570015451 0ustar00Ë T—çhœãó6—ddlZejded¬«y)éNzGlib2to3 package is deprecated and may not be able to parse Python 3.10+é)Ú stacklevel)ÚwarningsÚwarnÚDeprecationWarning©óú)/usr/lib64/python3.12/lib2to3/__init__.pyÚr s!ðÛð€‡ ØMØØör lib2to3/__pycache__/btm_matcher.cpython-312.opt-2.pyc000064400000013230152462633570016176 0ustar00Ë T—çhßãót— dZddlZddlZddlmZddlmZddlmZGd„de «Z Gd „d e «Z ia d „Z y) z+George Boutsioukis éN)Ú defaultdicté)Úpytree)Ú reduce_treecó6—eZdZ ej«Zd„Zy)ÚBMNodecój—i|_g|_ttj«|_d|_y)NÚ)Útransition_tableÚfixersÚnextrÚcountÚidÚcontent©Úselfs ú,/usr/lib64/python3.12/lib2to3/btm_matcher.pyÚ__init__zBMNode.__init__s(€Ø "ˆÔ؈Œ Ü”v—|‘|Ó$ˆŒØˆ óN)Ú__name__Ú __module__Ú __qualname__Ú itertoolsrr©rrrrs„ØIØ ˆIO‰OÓ €Eórrcó,—eZdZ d„Zd„Zd„Zd„Zd„Zy)Ú BottomMatchercó¦—t«|_t«|_|jg|_g|_t jd«|_y)NÚRefactoringTool) ÚsetÚmatchrÚrootÚnodesr ÚloggingÚ getLoggerÚloggerrs rrzBottomMatcher.__init__s;€Ü“UˆŒ Ü“HˆŒ Ø—i‘i[ˆŒ ؈Œ Ü×'Ñ'Ð(9Ó:ˆ rcó— |jj|«t|j«}|j «}|j ||j ¬«}|D]}|jj|«Œy)N©Ústart)r ÚappendrÚ pattern_treeÚget_linear_subpatternÚaddr!)rÚfixerÚtreeÚlinearÚ match_nodesÚ match_nodes rÚ add_fixerzBottomMatcher.add_fixer%sm€ð ð ‰ ×ј5Ô!ܘ5×-Ñ-Ó.ˆØ×+Ñ+Ó-ˆØ—h‘h˜v¨T¯Y©YhÓ7ˆ Û%ˆJØ × Ñ × $Ñ $ UÕ +ñ&rc ó— |s|gSt|dt«rLg}|dD]@}|j||¬«}|D]&}|j|j|dd|««Œ(ŒB|S|d|jvrt «}||j|d<n|j|d}|ddr|j|dd|¬«}|S|g}|S)Nrr'r)Ú isinstanceÚtupler,Úextendr r)rÚpatternr(r0Ú alternativeÚ end_nodesÚendÚ next_nodes rr,zBottomMatcher.add1sô€Ø?áà7ˆNÜ g˜a‘j¤%Ô (ðˆKØ& qœz ð!ŸH™H [¸˜HÓ> Û$CØ×&Ñ& t§x¡x°¸¸° ¸SÓ'AÕBñ%ð *ð Ð ðq‰z ×!7Ñ!7Ñ7ä"›H Ø5>×&Ñ& w¨q¡zÒ2ð"×2Ñ2°7¸1±:Ñ> àqr‰{Ø ŸH™H W¨Q¨R [¸ ˜HÓB ðÐ ð'˜K ØÐ rcóÈ— |j}tt«}|D]?}|}|sŒ d|_|jD]5}t |t j«sŒ|jdk(sŒ.d|_n|jdk(r |j}n |j}||jvr5|j|}|jD]}||j|«Œnq|j}|j|jjrŒî||jvr4|j|}|jD]}||j|«Œ|j}|rŒ7ŒB|S)NTÚ;Fr)r!rÚlistÚ was_checkedÚchildrenr4rÚLeafÚvalueÚtyper r r)Úparent) rÚleavesÚcurrent_ac_nodeÚresultsÚleafÚcurrent_ast_nodeÚchildÚ node_tokenr-s rÚrunzBottomMatcher.runSs\€ð ðŸ)™)ˆÜœdÓ#ˆÜˆDØ#Ð Ú"Ø/3Ð Ô,Ø-×6Ô6Eä! %¬¯©Õ5¸%¿+¹+ÈÓ:LØ7<Ð(Ô4Ùð 7ð $×(Ñ(¨AÒ-à!1×!7Ñ!7‘Jà!1×!6Ñ!6Jà ×!AÑ!AÑAà&5×&FÑ&FÀzÑ&ROØ!0×!7Ô!7˜Ø ™×-Ñ-Ð.>Õ?ñ"8ð'+§i¡iOØ(×/Ñ/Ð;Ø,×3Ñ3×?Ò?àð" _×%EÑ%EÑEà*9×*JÑ*JÈ:Ñ*V˜Ø%4×%;Ô%;˜EØ# E™N×1Ñ1Ð2BÕCð&<ð$4×#:Ñ#:Ð õC#ððHˆrcób‡— td«ˆfd„Љ|j«td«y)Nz digraph g{c ó*•—|jj«D]u}|j|}td|j|jt |«t |j «fz«|dk(rt|j«‰|«Œwy)Nz%d -> %d [label=%s] //%sr)r ÚkeysÚprintrÚ type_reprÚstrr r)ÚnodeÚ subnode_keyÚsubnodeÚ print_nodes €rrVz*BottomMatcher.print_ac..print_nodeŽs|ø€Ø#×4Ñ4×9Ñ9Ö; Ø×/Ñ/° Ñ<ÜÐ0Ø—w‘w § ¡ ¬I°kÓ,BÄCÈÏÉÓDWÐXñYôZà !Ò#ܘ'Ÿ/™/Ô*Ù˜7Õ#ñ rhsHððGð;€ ãÛÝ#åÝ"ôˆVôô}Fô}ð@€ ó6rlib2to3/__pycache__/pygram.cpython-312.pyc000064400000003546152462633570014261 0ustar00Ë T—çhãóþ—dZddlZddlmZddlmZddlmZejjejje «d«Z ejjejje «d«Z Gd „d e «Zejd e «Zee«Zej%«Zej(d =ej%«Zej(d =ejd e «Zee«Zy)z&Export the Python grammar and symbols.éNé)Útoken)Údriver)Úpytreez Grammar.txtzPatternGrammar.txtcó—eZdZd„Zy)ÚSymbolscób—|jj«D]\}}t|||«Œy)z”Initializer. Creates an attribute for each grammar symbol (nonterminal), whose value is the symbol's type (an int >= 256). N)Ú symbol2numberÚitemsÚsetattr)ÚselfÚgrammarÚnameÚsymbols ú'/usr/lib64/python3.12/lib2to3/pygram.pyÚ__init__zSymbols.__init__s-€ð $×1Ñ1×7Ñ7Ö9‰LˆD&Ü D˜$ Õ 'ñ:óN)Ú__name__Ú __module__Ú __qualname__r©rrrrs„ó(rrÚlib2to3ÚprintÚexec)Ú__doc__ÚosÚpgen2rrÚrÚpathÚjoinÚdirnameÚ__file__Ú _GRAMMAR_FILEÚ_PATTERN_GRAMMAR_FILEÚobjectrÚload_packaged_grammarÚpython_grammarÚpython_symbolsÚcopyÚ!python_grammar_no_print_statementÚkeywordsÚ*python_grammar_no_print_and_exec_statementÚpattern_grammarÚpattern_symbolsrrrÚr/sçðñ-ó õÝÝð—‘— ‘ ˜RŸW™WŸ_™_¨XÓ6¸ ÓF€ ØŸ™Ÿ ™  R§W¡W§_¡_°XÓ%>Ø%9ó;Ðô (ˆfô (ð.×-Ñ-¨i¸ÓG€á˜Ó(€à$2×$7Ñ$7Ó$9Ð!Ø%×.Ñ.¨wÐ7à-N×-SÑ-SÓ-UÐ*Ø.×7Ñ7¸Ð?à.&×.Ñ.¨yÐ:OÓP€Ù˜/Ó*rlib2to3/__pycache__/main.cpython-312.pyc000064400000033356152462633570013710 0ustar00Ë T—çhN.ãó’—dZddlmZmZddlZddlZddlZddlZddlZddl Z ddl m Z d„Z Gd„de j«Zd „Zd d „Zy) z Main program for 2to3. é)Úwith_statementÚprint_functionNé)Úrefactorc óz—|j«}|j«}tj||||ddd¬«S)z%Return a unified diff of two strings.z (original)z (refactored)Ú)Úlineterm)Ú splitlinesÚdifflibÚ unified_diff)ÚaÚbÚfilenames ú%/usr/lib64/python3.12/lib2to3/main.pyÚ diff_textsrs;€à ‰ ‹€AØ ‰ ‹€AÜ × Ñ   1 h°Ø ,¨nØ)+ô -ð-ócó<‡—eZdZdZ dˆfd„ Zd„Zˆfd„Zd„ZˆxZS)ÚStdoutRefactoringToola2 A refactoring tool that can avoid overwriting its input files. Prints output to stdout. Output files can optionally be written to a different directory and or have an extra file suffix appended to their name for use in situations where you do not want to replace the input files. c óÞ•—||_||_|r2|jtj«s|tjz }||_||_||_tt|+|||«y)aF Args: fixers: A list of fixers to import. options: A dict with RefactoringTool configuration. explicit: A list of fixers to run even if they are explicit. nobackups: If true no backup '.bak' files will be created for those files that are being refactored. show_diffs: Should diffs of the refactoring be printed to stdout? input_base_dir: The base directory for all input files. This class will strip this path prefix off of filenames before substituting it with output_dir. Only meaningful if output_dir is supplied. All files processed by refactor() must start with this path. output_dir: If supplied, all converted files will be written into this directory tree instead of input_base_dir. append_suffix: If supplied, all files output by this tool will have this appended to their filename. Useful for changing .py to .py3 for example by passing append_suffix='3'. N) Ú nobackupsÚ show_diffsÚendswithÚosÚsepÚ_input_base_dirÚ _output_dirÚ_append_suffixÚsuperrÚ__init__) ÚselfÚfixersÚoptionsÚexplicitrrÚinput_base_dirÚ output_dirÚ append_suffixÚ __class__s €rrzStdoutRefactoringTool.__init__$saø€ð(#ˆŒØ$ˆŒÙ  .×"9Ñ"9¼"¿&¹&Ô"AØ œbŸf™fÑ $ˆNØ-ˆÔØ%ˆÔØ+ˆÔÜ Ô# TÑ3°F¸GÀXÕNrcó€—|jj|||f«|jj|g|¢­i|¤Žy©N)ÚerrorsÚappendÚloggerÚerror)r ÚmsgÚargsÚkwargss rÚ log_errorzStdoutRefactoringTool.log_errorAs9€Ø ‰ ×јC  vÐ.Ô/؈ ‰ ×ј#Ð/ Ò/¨Ó/rcó•—|}|jrw|j|j«rAtjj |j|t |j«d«}ntd|›d|j›«‚|jr||jz }||k7rhtjj|«}tjj|«s|rtj|«|jd||«|jsQ|dz}tjj|«r tj|« tj"||«t$t&|R}|||||«|jst+j,|«||k7rt+j,||«yy#t $r|jd|«YŒŒwxYw#t $r|jd||«YŒ—wxYw)Nz filename z( does not start with the input_base_dir zWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)rÚ startswithrrÚpathÚjoinÚlenÚ ValueErrorrÚdirnameÚisdirÚmakedirsÚ log_messagerÚlexistsÚremoveÚOSErrorÚrenamerrÚ write_fileÚshutilÚcopymode) r Únew_textrÚold_textÚencodingÚ orig_filenamer%ÚbackupÚwriter's €rr@z StdoutRefactoringTool.write_fileEs¾ø€Ø ˆ Ø × Ò Ø×"Ñ" 4×#7Ñ#7Ô8ÜŸ7™7Ÿ<™<¨×(8Ñ(8Ø(0´°T×5IÑ5IÓ1JÐ1KÐ(LóN‘õ!â)1°4×3GÒ3Gð"IóJðJð × Ò Ø ˜×+Ñ+Ñ +ˆHØ ˜HÒ $ÜŸ™Ÿ™¨Ó2ˆJÜ—7‘7—=‘= Ô,±Ü— ‘ ˜JÔ'Ø × Ñ Ð:¸MØ%ô 'à~Š~à Ñ&ˆFÜw‰w‰˜vÔ&ðGÜ—I‘I˜fÔ%ð LÜ— ‘ ˜( FÔ+ôÔ+¨TÑ=ˆÙ ˆh˜ (¨HÔ5Ø~Š~Ü O‰O˜F HÔ -Ø ˜HÒ $ä O‰O˜M¨8Õ 4ð %øôòGØ×$Ñ$Ð%=¸vÖFðGûôò LØ× Ñ Ð!8¸(ÀFÖKð Lús$ÅGÅG%ÇG"Ç!G"Ç%HÈHcó¤—|r|jd|«y|jd|«|jrst|||«} |jF|j5|D] }t |«Œt j j«ddd«y|D] }t |«Œyy#1swYyxYw#t$rtd|›d«YywxYw)NzNo changes to %sz Refactored %szcouldn't encode z's diff for your terminal) r;rrÚ output_lockÚprintÚsysÚstdoutÚflushÚUnicodeEncodeErrorÚwarn)r ÚoldÚnewrÚequalÚ diff_linesÚlines rÚ print_outputz"StdoutRefactoringTool.print_outputls€٠Ø × Ñ Ð/°Õ :à × Ñ ˜_¨hÔ 7ØŠÜ'¨¨S°(Ó; ð Ø×'Ñ'Ð3Ø!×-Ó-Û(2 Ü % d¥ ð)3äŸJ™J×,Ñ,Ô.÷.Ð-ó %/˜DÜ! $Kñ%/ð÷.Ð-ûô*òÝÚ"ð%ô&áðús6ÁB4Á1B( B4ÂB4Â(B1Â-B4Â1B4Â4CÃC)rrr) Ú__name__Ú __module__Ú __qualname__Ú__doc__rr1r@rVÚ __classcell__)r's@rrrs%ø„ñðBDõOò:0ô%5öNrrcó@—td|›tj¬«y)Nz WARNING: ©Úfile)rKrLÚstderr)r.s rrPrPs€Ý ™3Ð ¤s§z¡zÖ2rc ó¾ ‡—tjd¬«}|jdddd¬«|jdd d gd ¬ «|jd ddddd¬«|jddd gd¬ «|jdddd¬«|jdddd¬«|jdddd¬«|jd d!dd"¬«|jd#dd$¬«|jd%d&dd'¬«|jd(d)dd*d+¬ «|jd,d-dd.d/d0¬1«|jd2d3dd4¬«|jd5dd.d/d6¬1«d*}i}|j|«\}}|jr#d7|d8<|j s t d9«d7|_|jr|js|jd:«|jr|js|jd;«|j s|jr t d<«|j s|jr|jd=«|jr3td>«tj‰«D] }t|«Œ|sy?|s7td@t j"¬A«tdBt j"¬A«yCdD|vr*d7}|j rtdEt j"¬A«yC|j$rd7|dF<|j&rd7|dG<|j(rt*j,nt*j.}t+j0dH|¬I«t+j2dJ«}t5tj6‰««} t5ˆfdK„|j8D««} t5«} |j:rHd*} |j:D]!} | dLk(rd7} Œ | j=‰dMz| z«Œ#| r| j?| «n| }n| j?| «}|jA| «}tBjDjG|«}|r]|jItBjJ«s>tBjDjM|«stBjDjO|«}|jr<|jQtBjJ«}|jSdN|j|«tUtW|«|tW| «|j|j ||j|j¬O«}|jXsV|r|j[«n3 |j||j |j\|j^«|jc«tetg|jX««S#tj`$r/|j^dkDsJ‚tdPt j"¬A«YywxYw)QzþMain program. Args: fixer_pkg: the name of a package where the fixers are located. args: optional; a list of command line arguments. If omitted, sys.argv[1:] is used. Returns a suggested exit status (0, 1, 2). z2to3 [options] file|dir ...)Úusagez-dz--doctests_onlyÚ store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr+z1Each FIX specifies a transformation; default: all)rcÚdefaultrdz-jz --processesÚstorerÚintzRun 2to3 concurrently)rcreÚtyperdz-xz--nofixz'Prevent a transformation from being runz-lz --list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-ez--exec-functionz/Modify the grammar so that exec() is a functionz-vz --verbosezMore verbose loggingz --no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz --nobackupsFz&Don't write backups for modified filesz-oz --output-dirÚstrrzXPut output files in this directory instead of overwriting the input files. Requires -n.)rcrhrerdz-Wz--write-unchanged-fileszYAlso write files even if no changes were required (useful with --output-dir); implies -w.z --add-suffixzuAppend this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files.TÚwrite_unchanged_filesz&--write-unchanged-files/-W implies -w.z%Can't use --output-dir/-o without -n.z"Can't use --add-suffix without -n.z@not writing files and not printing diffs; that's not very usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:rz1At least one file or directory argument required.r]zUse --help to show usage.éÚ-zCan't write to stdin.rÚ exec_functionz%(name)s: %(message)s)ÚformatÚlevelz lib2to3.mainc3ó.•K—|] }‰dz|z–—Œy­w)ú.fix_N©)Ú.0ÚfixÚ fixer_pkgs €rÚ zmain..âsøèø€ÐL¹m°s˜ WÑ,¨sÕ2¹mùsƒÚallrqz7Output in %r will mirror the input directory %r layout.)r$r%r&z+Sorry, -j isn't supported on this platform.)4ÚoptparseÚ OptionParserÚ add_optionÚ parse_argsrjrHrPr%rr-Ú add_suffixÚno_diffsÚ list_fixesrKrÚget_all_fix_namesrLr_rrmÚverboseÚloggingÚDEBUGÚINFOÚ basicConfigÚ getLoggerÚsetÚget_fixers_from_packageÚnofixrtÚaddÚunionÚ differencerr4Ú commonprefixrrr9r8ÚrstripÚinforÚsortedr*Úrefactor_stdinÚ doctests_onlyÚ processesÚMultiprocessingUnsupportedÚ summarizergÚbool)rur/ÚparserrÚflagsr"Úfixnameror,Ú avail_fixesÚunwanted_fixesr#Ú all_presentrtÚ requestedÚ fixer_namesr$Úrts` rÚmainrŸ…soø€ô× "Ñ "Ð)FÔ G€FØ ×ÑdÐ-°lØ1ðô3à ×Ñd˜G¨H¸bØNðôPà ×Ñd˜M°'À1Ø Ð'>ðô@à ×Ñd˜I¨hÀØDðôFà ×Ñd˜N°<Ø;ðô=à ×ÑdÐ.°|ØMðôOà ×ÑdÐ-°lØLðôNà ×Ñd˜K° Ø1ðô3à ×Ñl¨<Ø@ðôBà ×Ñd˜I¨lØ6ðô8à ×Ñd˜M°,ÈØCðôEà ×Ñd˜N°7ÀØ ð(NðôOð ×ÑdÐ5¸lðAðôBð ×Ñn¨W¸5È"ðGðôHð €NØ €EØ×%Ñ% dÓ+M€GˆTØ×$Ò$Ø)-ˆÐ%Ñ&Ø}Š}Ü Ð9Ô :؈Œ ð×Ò '×"3Ò"3Ø ‰ Ð<Ô=Ø×Ò '×"3Ò"3Ø ‰ Ð9Ô:à =Š=˜W×-Ò-Ü Ð OÔPØ =Š=˜W×.Ò.Ø ‰ Ð.Ô/Ø×ÒÜ ÐBÔCÜ×1Ñ1°)Ö<ˆGÜ 'Nð=áØÙ Ü ÐAÌÏ É ÕSÜ Ð)´· ± Õ;ØØ ˆd{ØˆØ =Š=Ü Ð)´· ± Õ ;ØØ×ÒØ"&ˆÐÑà×ÒØ!%ˆˆoÑð%Ÿ_š_ŒGMŠM´'·,±,€EÜ ×ÑÐ6¸eÕDÜ × Ñ ˜~Ó .€Fô”h×6Ñ6°yÓAÓB€KÜÓL¸g¿mºmÓLÓL€NÜ‹u€H؇{‚{؈ Ø—;”;ˆCØeŠ|Ø"‘ à— ‘ ˜Y¨Ñ0°3Ñ6Õ7ð ñ 4?K×%Ñ% hÔ/ÀH‰ à×%Ñ% hÓ/ˆ Ø×&Ñ& ~Ó6€KÜ—W‘W×)Ñ)¨$Ó/€NÙ˜~×6Ñ6´r·v±vÔ>Ü—‘— ‘ ˜nÔ-ôŸ™Ÿ™¨Ó8ˆØ×ÒØ'×.Ñ.¬r¯v©vÓ6ˆØ ‰ ÐMØ×&Ñ&¨ô 8ä Ü ;Ó  ¬¨xÓ(8Ø × Ñ  7×#3Ñ#3Ð3Ø)Ø×)Ñ)Ø!×,Ñ,ô  .€Bð 9Š9Ù Ø × Ñ Õ ð Ø— ‘ ˜D '§-¡-°×1FÑ1FØ#×-Ñ-ô/ð ‰ Œô ŒtB—I‘I‹Ó Ðøô×6Ñ6ò Ø×(Ñ(¨1Ò,Ð,Ð,ÜÐCÜŸ:™:õ'áð  úsÔ:2VÖ?W×Wr))rZÚ __future__rrrLrr rrArxrrrÚMultiprocessRefactoringToolrrPrŸrrrrÚr¢sIðñ÷6ã Û ÛÛÛ Ûåò-ôe˜H×@Ñ@ôeòN3ôL rlib2to3/__pycache__/main.cpython-312.opt-1.pyc000064400000033270152462633570014642 0ustar00Ë T—çhN.ãó’—dZddlmZmZddlZddlZddlZddlZddlZddl Z ddl m Z d„Z Gd„de j«Zd „Zd d „Zy) z Main program for 2to3. é)Úwith_statementÚprint_functionNé)Úrefactorc óz—|j«}|j«}tj||||ddd¬«S)z%Return a unified diff of two strings.z (original)z (refactored)Ú)Úlineterm)Ú splitlinesÚdifflibÚ unified_diff)ÚaÚbÚfilenames ú%/usr/lib64/python3.12/lib2to3/main.pyÚ diff_textsrs;€à ‰ ‹€AØ ‰ ‹€AÜ × Ñ   1 h°Ø ,¨nØ)+ô -ð-ócó<‡—eZdZdZ dˆfd„ Zd„Zˆfd„Zd„ZˆxZS)ÚStdoutRefactoringToola2 A refactoring tool that can avoid overwriting its input files. Prints output to stdout. Output files can optionally be written to a different directory and or have an extra file suffix appended to their name for use in situations where you do not want to replace the input files. c óÞ•—||_||_|r2|jtj«s|tjz }||_||_||_tt|+|||«y)aF Args: fixers: A list of fixers to import. options: A dict with RefactoringTool configuration. explicit: A list of fixers to run even if they are explicit. nobackups: If true no backup '.bak' files will be created for those files that are being refactored. show_diffs: Should diffs of the refactoring be printed to stdout? input_base_dir: The base directory for all input files. This class will strip this path prefix off of filenames before substituting it with output_dir. Only meaningful if output_dir is supplied. All files processed by refactor() must start with this path. output_dir: If supplied, all converted files will be written into this directory tree instead of input_base_dir. append_suffix: If supplied, all files output by this tool will have this appended to their filename. Useful for changing .py to .py3 for example by passing append_suffix='3'. N) Ú nobackupsÚ show_diffsÚendswithÚosÚsepÚ_input_base_dirÚ _output_dirÚ_append_suffixÚsuperrÚ__init__) ÚselfÚfixersÚoptionsÚexplicitrrÚinput_base_dirÚ output_dirÚ append_suffixÚ __class__s €rrzStdoutRefactoringTool.__init__$saø€ð(#ˆŒØ$ˆŒÙ  .×"9Ñ"9¼"¿&¹&Ô"AØ œbŸf™fÑ $ˆNØ-ˆÔØ%ˆÔØ+ˆÔÜ Ô# TÑ3°F¸GÀXÕNrcó€—|jj|||f«|jj|g|¢­i|¤Žy©N)ÚerrorsÚappendÚloggerÚerror)r ÚmsgÚargsÚkwargss rÚ log_errorzStdoutRefactoringTool.log_errorAs9€Ø ‰ ×јC  vÐ.Ô/؈ ‰ ×ј#Ð/ Ò/¨Ó/rcó•—|}|jrw|j|j«rAtjj |j|t |j«d«}ntd|›d|j›«‚|jr||jz }||k7rhtjj|«}tjj|«s|rtj|«|jd||«|jsQ|dz}tjj|«r tj|« tj"||«t$t&|R}|||||«|jst+j,|«||k7rt+j,||«yy#t $r|jd|«YŒŒwxYw#t $r|jd||«YŒ—wxYw)Nz filename z( does not start with the input_base_dir zWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)rÚ startswithrrÚpathÚjoinÚlenÚ ValueErrorrÚdirnameÚisdirÚmakedirsÚ log_messagerÚlexistsÚremoveÚOSErrorÚrenamerrÚ write_fileÚshutilÚcopymode) r Únew_textrÚold_textÚencodingÚ orig_filenamer%ÚbackupÚwriter's €rr@z StdoutRefactoringTool.write_fileEs¾ø€Ø ˆ Ø × Ò Ø×"Ñ" 4×#7Ñ#7Ô8ÜŸ7™7Ÿ<™<¨×(8Ñ(8Ø(0´°T×5IÑ5IÓ1JÐ1KÐ(LóN‘õ!â)1°4×3GÒ3Gð"IóJðJð × Ò Ø ˜×+Ñ+Ñ +ˆHØ ˜HÒ $ÜŸ™Ÿ™¨Ó2ˆJÜ—7‘7—=‘= Ô,±Ü— ‘ ˜JÔ'Ø × Ñ Ð:¸MØ%ô 'à~Š~à Ñ&ˆFÜw‰w‰˜vÔ&ðGÜ—I‘I˜fÔ%ð LÜ— ‘ ˜( FÔ+ôÔ+¨TÑ=ˆÙ ˆh˜ (¨HÔ5Ø~Š~Ü O‰O˜F HÔ -Ø ˜HÒ $ä O‰O˜M¨8Õ 4ð %øôòGØ×$Ñ$Ð%=¸vÖFðGûôò LØ× Ñ Ð!8¸(ÀFÖKð Lús$ÅGÅG%ÇG"Ç!G"Ç%HÈHcó¤—|r|jd|«y|jd|«|jrst|||«} |jF|j5|D] }t |«Œt j j«ddd«y|D] }t |«Œyy#1swYyxYw#t$rtd|›d«YywxYw)NzNo changes to %sz Refactored %szcouldn't encode z's diff for your terminal) r;rrÚ output_lockÚprintÚsysÚstdoutÚflushÚUnicodeEncodeErrorÚwarn)r ÚoldÚnewrÚequalÚ diff_linesÚlines rÚ print_outputz"StdoutRefactoringTool.print_outputls€٠Ø × Ñ Ð/°Õ :à × Ñ ˜_¨hÔ 7ØŠÜ'¨¨S°(Ó; ð Ø×'Ñ'Ð3Ø!×-Ó-Û(2 Ü % d¥ ð)3äŸJ™J×,Ñ,Ô.÷.Ð-ó %/˜DÜ! $Kñ%/ð÷.Ð-ûô*òÝÚ"ð%ô&áðús6ÁB4Á1B( B4ÂB4Â(B1Â-B4Â1B4Â4CÃC)rrr) Ú__name__Ú __module__Ú __qualname__Ú__doc__rr1r@rVÚ __classcell__)r's@rrrs%ø„ñðBDõOò:0ô%5öNrrcó@—td|›tj¬«y)Nz WARNING: ©Úfile)rKrLÚstderr)r.s rrPrPs€Ý ™3Ð ¤s§z¡zÖ2rc óœ ‡—tjd¬«}|jdddd¬«|jdd d gd ¬ «|jd ddddd¬«|jddd gd¬ «|jdddd¬«|jdddd¬«|jdddd¬«|jd d!dd"¬«|jd#dd$¬«|jd%d&dd'¬«|jd(d)dd*d+¬ «|jd,d-dd.d/d0¬1«|jd2d3dd4¬«|jd5dd.d/d6¬1«d*}i}|j|«\}}|jr#d7|d8<|j s t d9«d7|_|jr|js|jd:«|jr|js|jd;«|j s|jr t d<«|j s|jr|jd=«|jr3td>«tj‰«D] }t|«Œ|sy?|s7td@t j"¬A«tdBt j"¬A«yCdD|vr*d7}|j rtdEt j"¬A«yC|j$rd7|dF<|j&rd7|dG<|j(rt*j,nt*j.}t+j0dH|¬I«t+j2dJ«}t5tj6‰««} t5ˆfdK„|j8D««} t5«} |j:rHd*} |j:D]!} | dLk(rd7} Œ | j=‰dMz| z«Œ#| r| j?| «n| }n| j?| «}|jA| «}tBjDjG|«}|r]|jItBjJ«s>tBjDjM|«stBjDjO|«}|jr<|jQtBjJ«}|jSdN|j|«tUtW|«|tW| «|j|j ||j|j¬O«}|jXsV|r|j[«n3 |j||j |j\|j^«|jc«tetg|jX««S#tj`$rtdPt j"¬A«YywxYw)QzþMain program. Args: fixer_pkg: the name of a package where the fixers are located. args: optional; a list of command line arguments. If omitted, sys.argv[1:] is used. Returns a suggested exit status (0, 1, 2). z2to3 [options] file|dir ...)Úusagez-dz--doctests_onlyÚ store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr+z1Each FIX specifies a transformation; default: all)rcÚdefaultrdz-jz --processesÚstorerÚintzRun 2to3 concurrently)rcreÚtyperdz-xz--nofixz'Prevent a transformation from being runz-lz --list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-ez--exec-functionz/Modify the grammar so that exec() is a functionz-vz --verbosezMore verbose loggingz --no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz --nobackupsFz&Don't write backups for modified filesz-oz --output-dirÚstrrzXPut output files in this directory instead of overwriting the input files. Requires -n.)rcrhrerdz-Wz--write-unchanged-fileszYAlso write files even if no changes were required (useful with --output-dir); implies -w.z --add-suffixzuAppend this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files.TÚwrite_unchanged_filesz&--write-unchanged-files/-W implies -w.z%Can't use --output-dir/-o without -n.z"Can't use --add-suffix without -n.z@not writing files and not printing diffs; that's not very usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:rz1At least one file or directory argument required.r]zUse --help to show usage.éÚ-zCan't write to stdin.rÚ exec_functionz%(name)s: %(message)s)ÚformatÚlevelz lib2to3.mainc3ó.•K—|] }‰dz|z–—Œy­w)ú.fix_N©)Ú.0ÚfixÚ fixer_pkgs €rÚ zmain..âsøèø€ÐL¹m°s˜ WÑ,¨sÕ2¹mùsƒÚallrqz7Output in %r will mirror the input directory %r layout.)r$r%r&z+Sorry, -j isn't supported on this platform.)4ÚoptparseÚ OptionParserÚ add_optionÚ parse_argsrjrHrPr%rr-Ú add_suffixÚno_diffsÚ list_fixesrKrÚget_all_fix_namesrLr_rrmÚverboseÚloggingÚDEBUGÚINFOÚ basicConfigÚ getLoggerÚsetÚget_fixers_from_packageÚnofixrtÚaddÚunionÚ differencerr4Ú commonprefixrrr9r8ÚrstripÚinforÚsortedr*Úrefactor_stdinÚ doctests_onlyÚ processesÚMultiprocessingUnsupportedÚ summarizergÚbool)rur/ÚparserrÚflagsr"Úfixnameror,Ú avail_fixesÚunwanted_fixesr#Ú all_presentrtÚ requestedÚ fixer_namesr$Úrts` rÚmainrŸ…s[ø€ô× "Ñ "Ð)FÔ G€FØ ×ÑdÐ-°lØ1ðô3à ×Ñd˜G¨H¸bØNðôPà ×Ñd˜M°'À1Ø Ð'>ðô@à ×Ñd˜I¨hÀØDðôFà ×Ñd˜N°<Ø;ðô=à ×ÑdÐ.°|ØMðôOà ×ÑdÐ-°lØLðôNà ×Ñd˜K° Ø1ðô3à ×Ñl¨<Ø@ðôBà ×Ñd˜I¨lØ6ðô8à ×Ñd˜M°,ÈØCðôEà ×Ñd˜N°7ÀØ ð(NðôOð ×ÑdÐ5¸lðAðôBð ×Ñn¨W¸5È"ðGðôHð €NØ €EØ×%Ñ% dÓ+M€GˆTØ×$Ò$Ø)-ˆÐ%Ñ&Ø}Š}Ü Ð9Ô :؈Œ ð×Ò '×"3Ò"3Ø ‰ Ð<Ô=Ø×Ò '×"3Ò"3Ø ‰ Ð9Ô:à =Š=˜W×-Ò-Ü Ð OÔPØ =Š=˜W×.Ò.Ø ‰ Ð.Ô/Ø×ÒÜ ÐBÔCÜ×1Ñ1°)Ö<ˆGÜ 'Nð=áØÙ Ü ÐAÌÏ É ÕSÜ Ð)´· ± Õ;ØØ ˆd{ØˆØ =Š=Ü Ð)´· ± Õ ;ØØ×ÒØ"&ˆÐÑà×ÒØ!%ˆˆoÑð%Ÿ_š_ŒGMŠM´'·,±,€EÜ ×ÑÐ6¸eÕDÜ × Ñ ˜~Ó .€Fô”h×6Ñ6°yÓAÓB€KÜÓL¸g¿mºmÓLÓL€NÜ‹u€H؇{‚{؈ Ø—;”;ˆCØeŠ|Ø"‘ à— ‘ ˜Y¨Ñ0°3Ñ6Õ7ð ñ 4?K×%Ñ% hÔ/ÀH‰ à×%Ñ% hÓ/ˆ Ø×&Ñ& ~Ó6€KÜ—W‘W×)Ñ)¨$Ó/€NÙ˜~×6Ñ6´r·v±vÔ>Ü—‘— ‘ ˜nÔ-ôŸ™Ÿ™¨Ó8ˆØ×ÒØ'×.Ñ.¬r¯v©vÓ6ˆØ ‰ ÐMØ×&Ñ&¨ô 8ä Ü ;Ó  ¬¨xÓ(8Ø × Ñ  7×#3Ñ#3Ð3Ø)Ø×)Ñ)Ø!×,Ñ,ô  .€Bð 9Š9Ù Ø × Ñ Õ ð Ø— ‘ ˜D '§-¡-°×1FÑ1FØ#×-Ñ-ô/ð ‰ Œô ŒtB—I‘I‹Ó Ðøô×6Ñ6ò äÐCÜŸ:™:õ'áð  úsÔ:2VÖ.W × W r))rZÚ __future__rrrLrr rrArxrrrÚMultiprocessRefactoringToolrrPrŸrrrrÚr¢sIðñ÷6ã Û ÛÛÛ Ûåò-ôe˜H×@Ñ@ôeòN3ôL rlib2to3/__pycache__/fixer_util.cpython-312.opt-2.pyc000064400000046510152462633570016072 0ustar00Ë T—çhf;ãó¶— ddlmZddlmZmZddlmZddlm Z d„Z d„Z d„Z d„Z d,d „Zd „Zd „Zd „Ze «e «fd„Zd-d„Zd„Zd„Zd,d„Zd„Zd,d„Zd,d„Zd„Zd„Zd„Zd„Zd„Zhd£Zd„Z da!da"da#d a$d!„Z%d"„Z&d#„Z'd$„Z(d%„Z)d&„Z*d'„Z+d(„Z,ejZej\hZ/d,d)„Z0ej\ejZejbhZ2d*„Z3d,d+„Z4y ).é)Útoken)ÚLeafÚNode)Úpython_symbols)Úpatcompcól—ttj|ttj d«|g«S)NÚ=)rÚsymsÚargumentrrÚEQUAL)ÚkeywordÚvalues ú+/usr/lib64/python3.12/lib2to3/fixer_util.pyÚ KeywordArgrs*€Ü ”— ‘ Øœ$œuŸ{™{¨CÓ0°%Ð8ó :ð:ócó6—ttjd«S)NÚ()rrÚLPAR©rrÚLParenró€Ü ”— ‘ ˜CÓ Ð rcó6—ttjd«S)NÚ))rrÚRPARrrrÚRParenrrrc óÔ— t|t«s|g}t|t«s d|_|g}ttj |t tjdd¬«gz|z«S)NÚ r ©Úprefix) Ú isinstanceÚlistrrr Úatomrrr )ÚtargetÚsources rÚAssignr%s`€Ø'Ü fœdÔ #ØˆÜ fœdÔ #؈Œ Øˆä ”— ‘ Øœ$œuŸ{™{¨C¸Ô<Ð=Ñ=ÀÑFó HðHrNcó<— ttj||¬«S©Nr)rrÚNAME)Únamers rÚNamer*$s€ØÜ ”— ‘ ˜D¨Ô 0Ð0rcóP— |ttjt«|g«gS©N)rr ÚtrailerÚDot)ÚobjÚattrs rÚAttrr1(s!€Ø#Ø ””d—l‘l¤S£U¨D MÓ2Ð 3Ð3rcó8— ttjd«S)NÚ,)rrÚCOMMArrrÚCommar5,s€ØÜ ”— ‘ ˜SÓ !Ð!rcó8— ttjd«S)NÚ.)rrÚDOTrrrr.r.0s€ØÜ ”— ‘ ˜3Ó ÐrcóЗ ttj|j«|j«g«}|r*|j dttj |««|S)Nr)rr r-ÚcloneÚ insert_childÚarglist)ÚargsÚlparenÚrparenÚnodes rÚArgListrA4sI€Ø7Ü ”— ‘ ˜vŸ|™|›~¨v¯|©|«~Ð>Ó ?€DÙ Ø ×ј!œT¤$§,¡,°Ó5Ô6Ø €Krcód— ttj|t|«g«}|||_|Sr,)rr ÚpowerrAr)Ú func_namer=rr@s rÚCallrE;s0€ØÜ ”— ‘ ˜Y¬°« Ð6Ó 7€DØ ÐØˆŒ Ø €Krcó8— ttjd«S)NÚ ©rrÚNEWLINErrrÚNewlinerJBs€ØÜ ”— ‘ ˜tÓ $Ð$rcó8— ttjd«S)NÚrHrrrÚ BlankLinerMFs€ØÜ ”— ‘ ˜rÓ "Ð"rcó:—ttj||¬«Sr')rrÚNUMBER)Únrs rÚNumberrQJs€Ü ”— ‘ ˜a¨Ô /Ð/rc óž— ttjttj d«|ttj d«g«S)NÚ[Ú])rr r-rrÚLBRACEÚRBRACE)Ú index_nodes rÚ SubscriptrXMs;€Ø'Ü ”— ‘ œt¤E§L¡L°#Ó6Ø)Ü#¤E§L¡L°#Ó6ð8ó 9ð9rcó<— ttj||¬«Sr')rrÚSTRING)Ústringrs rÚStringr\Ss€ØÜ ”— ‘ ˜f¨VÔ 4Ð4rc ój— d|_d|_d|_ttjd«}d|_ttjd«}d|_||||g}|rSd|_ttjd«}d|_|j t t j||g««t t j|t t j|«g«}t t jttjd«|ttjd«g«S)NrLrÚforÚinÚifrSrT) rrrr(Úappendrr Úcomp_ifÚ listmakerÚcomp_forr"rUrV) ÚxpÚfpÚitÚtestÚfor_leafÚin_leafÚ inner_argsÚif_leafÚinners rÚListComprnWsï€ðð€B„IØ€B„IØ€B„IÜ”E—J‘J Ó&€HØ€H„OÜ”5—:‘:˜tÓ$€GØ€G„NؘB ¨Ð,€J٠؈Œ Ü”u—z‘z 4Ó(ˆØˆŒØ×Ñœ$œtŸ|™|¨g°t¨_Ó=Ô>Ü ”—‘ "¤d¬4¯=©=¸*Ó&EÐ!FÓ G€EÜ ”— ‘ ÜœUŸ\™\¨3Ó/ØÜœUŸ\™\¨3Ó/ð1ó 2ð2rcó>— |D]}|j«Œttjd«ttj|d¬«ttjdd¬«t t j |«g}t t j|«}|S)NÚfromrrÚimport)Úremoverrr(rr Úimport_as_namesÚ import_from)Ú package_nameÚ name_leafsÚleafÚchildrenÚimps rÚ FromImportrzos|€ð*óˆà ‰ ðô”U—Z‘Z Ó(Ü”U—Z‘Z °cÔ:Ü”U—Z‘Z °#Ô6Ü”T×)Ñ)¨:Ó6ð8€Hô Œt×Ñ Ó *€CØ €Jrc óP— |dj«}|jtjk(r|j«}n)t tj|j«g«}|d}|r|Dcgc]}|j«‘Œ}}t tj t t|d«t|d««t tj|dj«||dj«g«gz|z«}|j|_ |Scc}w)Nr/ÚafterérÚlparÚrpar) r:Útyper r<rrCr1r*r-r)r@ÚresultsÚnamesr/Ú newarglistr|rPÚnews rÚ ImportAndCallr…‚s€ðð %‰.× Ñ Ó €CØ ‡xx”4—<‘<ÒØ—Y‘Y“[‰ äœ$Ÿ,™,¨¯©«¨ Ó6ˆ Ø GÑ €EÙ Ù$)Ó*¡E˜q—‘• EˆÐ*Ü Œtz‰zÜ”D˜˜q™“N¤D¨¨q©£NÓ3Ü”T—\‘\ؘf‘o×+Ñ+Ó-Ø Ø˜f‘o×+Ñ+Ó-ð/ó0ð1ñ1ð49ñ 9ó :€Cð —‘€C„JØ €Jùò+sÁ7D#cóî— t|t«r"|jt«t «gk(ryt|t«xr±t |j«dk(xr—t|jdt «xrxt|jdt«xrYt|jdt «xr:|jdjdk(xr|jdjdk(S)NTér}rérr)r rrxrrÚlenrr©r@s rÚis_tupler‹žsÓ€Ø2Ü$œÔ $§-¡-´F³H¼f»hÐ3GÒ"GØÜ tœTÓ "ò .ÜD—M‘MÓ" aÑ'ò .ä˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ð /rcóL— t|t«xr’t|j«dkDxrxt|jdt«xrYt|jdt«xr:|jdj dk(xr|jdj dk(S)Nrr}éÿÿÿÿrSrT)r rr‰rxrrrŠs rÚis_listrŽªs˜€Ø1Ü tœTÓ "ò /ÜD—M‘MÓ" QÑ&ò /ä˜4Ÿ=™=¨Ñ+¬TÓ2ò /ô˜4Ÿ=™=¨Ñ,¬dÓ3ò /ð— ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  /ð — ‘ ˜bÑ!×'Ñ'¨3Ñ.ð 0rcó\—ttjt«|t «g«Sr,)rr r"rrrŠs rÚ parenthesizer¸s€Ü ”— ‘ œF›H d¬F«HÐ5Ó 6Ð6r> ÚallÚanyÚmaxÚminÚsetÚsumr!ÚtupleÚsortedÚ enumeratec#óRK— t||«}|r|–—t||«}|rŒyy­wr,)Úgetattr)r/r0Únexts rÚ attr_chainr¿s2èø€ð ô 3˜Ó €DÙ ØŠ Üt˜TÓ"ˆô ùs‚"'¥'zefor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > z³ power< ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' | 'any' | 'all' | 'enumerate' | (any* trailer< '.' 'join' >) ) trailer< '(' node=any ')' > any* > z` power< ( 'sorted' | 'enumerate' ) trailer< '(' arglist ')' > any* > FcóF— tsMtjt«atjt«atjt «adattt g}t |t|d««D]#\}}i}|j||«sŒ|d|usŒ#yy)NTÚparentr@F) Ú pats_builtrÚcompile_patternÚp0Úp1Úp2ÚziprÚmatch)r@ÚpatternsÚpatternrŸrs rÚin_special_contextr©ås€ð õ Ü × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆØˆ Ü”Bœˆ|€Hܘx¬°D¸(Ó)CÖD‰ˆØˆØ =‰=˜ Õ )¨g°f©oÀÒ.EÙðEð rcó— |j}||jtjk(ry|j}|jt j t jfvry|jt jk(r|jd|ury|jt jk(sM|jt jk(r1||jtjk(s|jd|uryy)NFr}T) Ú prev_siblingr€rr8rŸr ÚfuncdefÚclassdefÚ expr_stmtrxÚ parametersÚ typedargslistr4)r@ÚprevrŸs rÚis_probably_builtinr²øsÄ€ðð × Ñ €DØ Ð˜DŸI™I¬¯©Ò2àØ [‰[€FØ ‡{{”t—|‘|¤T§]¡]Ð3Ñ3ØØ ‡{{”d—n‘nÒ$¨¯©¸Ñ);¸tÑ)CàØ ‡{{”d—o‘oÒ%Ø [‰[œD×.Ñ.Ò .Ø Ð  $§)¡)¬u¯{©{Ò":Ø O‰O˜AÑ  $Ñ &ðØ rcó— |||jtjk(rPt|j«dkDr8|jd}|jt j k(r |jS|j}|Œ|y)NrˆrrL) r€r Úsuiter‰rxrÚINDENTrrŸ)r@Úindents rÚfind_indentationr·si€Ø)Ø Ð Ø 9‰9œŸ ™ Ò "¤s¨4¯=©=Ó'9¸AÒ'=Ø—]‘] 1Ñ%ˆFØ{‰{œeŸl™lÒ*Ø—|‘|Ð#Ø{‰{ˆð Ñ ð rcóЗ|jtjk(r|S|j«}|jdc}|_t tj|g«}||_|Sr,)r€r r´r:rŸr)r@rŸr´s rÚ make_suiter¹sR€Ø ‡yy”D—J‘JÒØˆ Ø :‰:‹<€DØŸ+™+ tЀFˆDŒKÜ ”—‘˜d˜VÓ $€EØ€E„LØ €Lrcó°— |jtjk7r7|j}|s t d«‚|jtjk7rŒ7|S)Nz,root found before file_input node was found.)r€r Ú file_inputrŸÚ ValueErrorrŠs rÚ find_rootr½&sF€Ø'à )‰)”t—‘Ò &Ø{‰{ˆÙÜÐKÓLÐ Lð )‰)”t—‘Ó &ð €KrcóF— t|t|«|«}t|«Sr,)Ú find_bindingr½Úbool)Úpackager)r@Úbindings rÚdoes_tree_importrÃ/s%€ð9ô˜4¤¨4£°'Ó:€GÜ ‹=Ðrcó\— |jtjtjfvSr,)r€r Ú import_namertrŠs rÚ is_importrÆ7s%€Ø:Ø 9‰9œ×)Ñ)¬4×+;Ñ+;Ð<Ð <Ð\}}||«sŒt|j|d«D]\}}||«rŒn||z}n|dk(ryt|j«D]a\}}|jt j k(sŒ$|jsŒ1|jdjtjk(sŒ\|dz}n|€Ott jttjd«ttj|d¬«g«} n't|ttj|d¬«g«} | t«g} |j|tt j | ««y)NcóŒ—|jtjk(xr&|jxrt |jd«S)Nr})r€r Ú simple_stmtrxrÆrŠs rÚis_import_stmtz$touch_import..is_import_stmt>s:€Ø— ‘ œT×-Ñ-Ñ-ò,°$·-±-ò,ܘ$Ÿ-™-¨Ñ*Ó+ð -rr}rrqrr)r½rÃr™rxr€r rÉrrZrrÅrr(rzrJr;) rÁr)r@rÊÚrootÚ insert_posÚoffsetÚidxÚnode2Úimport_rxs rÚ touch_importrÑ;sm€ð$ò-ô T‹?€D䘠 tÔ,ØðЀJܘtŸ}™}Ö-‰ ˆˆTÙ˜dÔ#Ø Ü& t§}¡}°S°TÐ':Ö;‰MˆFEÙ! %Õ(Ùð<ð˜6‘\ˆ Ù ð.ðQ‚Ü" 4§=¡=Ö1‰IˆCØ— ‘ œT×-Ñ-Ó-°$·-³-Ø}‰}˜QÑ×$Ñ$¬¯ © Ó4Ø  1™W Ùð 2ð €Ü”t×'Ñ'Ü ”—‘˜XÓ &Ü ”—‘˜T¨#Ô .ð* ó ‰ô ˜W¤t¬E¯J©J¸ÀSÔ'IÐ&JÓKˆàœ›Ð#€HØ×Ñj¤$¤t×'7Ñ'7¸Ó"BÕCrc óž— |jD]<}d}|jtjk(rGt ||jd«r|cSt |t |jd«|«}|r¾|}nº|jtjtjfvr*t |t |jd«|«}|rh|}nd|jtjk(r£t |t |jd«|«}|r|}nt|jdd«D]^\}}|jtjk(sŒ$|jdk(sŒ4t |t |j|dz«|«}|sŒ]|}Œ`n¤|jtvr|jdj|k(r|}nst|||«r|}nc|jtj k(rt |||«}n8|jtj"k(rt ||jd«r|}|sŒ(|s|cSt%|«sŒ;|cSy)Nrrrˆr‡Ú:ér})rxr€r Úfor_stmtÚ_findr¿r¹Úif_stmtÚ while_stmtÚtry_stmtr™rÚCOLONrÚ _def_symsÚ_is_import_bindingrÉr®rÆ)r)r@rÁÚchildÚretrPÚiÚkids rr¿r¿isØ€ð(ð—•ˆØˆØ :‰:œŸ™Ò &ÜT˜5Ÿ>™>¨!Ñ,Ô-Ø’ ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰ZœDŸL™L¬$¯/©/Ð:Ñ :ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰Zœ4Ÿ=™=Ò (ܘT¤:¨e¯n©n¸QÑ.?Ó#@À'ÓJˆAÙØ’ä'¨¯©°q°rÐ(:Ö;‘FAsØ—x‘x¤5§;¡;Ó.°3·9±9ÀÓ3Cä(¨¬z¸%¿.¹.ÈÈ1ÉÑ:MÓ/NÐPWÓX˜Ú A™cñ <ð Z‰Zœ9Ñ $¨¯©¸Ñ):×)@Ñ)@ÀDÒ)H؉CÜ   t¨WÔ 5؉CØ Z‰Zœ4×+Ñ+Ò +ܘt U¨GÓ4‰CØ Z‰Zœ4Ÿ>™>Ò )ÜT˜5Ÿ>™>¨!Ñ,Ô-Øã ÙØ’ ܘŽ~Ø’ ðEðF rcó —|g}|r~|j«}|jdkDr.|jtvr|j|j«n.|jt j k(r|j|k(r|S|rŒ~y)Né)Úpopr€Ú _block_symsÚextendrxrr(r)r)r@Únodess rrÖrÖ”sg€Ø ˆF€EÙ Øy‰y‹{ˆØ 9‰9sŠ?˜tŸy™y´ Ñ;Ø L‰L˜Ÿ™Õ 'Ø Y‰Yœ%Ÿ*™*Ò $¨¯©°tÒ);؈Kò ð rcó.— |jtjk(r9|s6|jd}|jtjk(r|jD]q}|jtj k(r!|jdj |k(sŒ=|cS|jtjk(sŒ_|j |k(sŒo|cSy|jtj k(r=|jd}|jtjk(r?|j |k(r0|S|jtjk(r|j |k(r|Sy|jtjk(r|r*t|jd«j«|k7ry|jd}|r td|«ry|jtjk(rt||«r|S|jtjk(r>|jd}|jtjk(r|j |k(r|Sy|jtjk(r|j |k(r|S|r|jtjk(r|Sy)Nrrˆrr‡Úas)r€r rÅrxÚdotted_as_namesÚdotted_as_namerrr(rtÚstrÚstriprÖrsÚimport_as_nameÚSTAR)r@r)rÁryrÝÚlastrPs rrÜrÜžsù€ð)ð ‡yy”D×$Ñ$Ó$ªWØm‰m˜AÑˆØ 8‰8”t×+Ñ+Ò +ØŸœØ—:‘:¤×!4Ñ!4Ò4Ø—~‘~ aÑ(×.Ñ.°$Ó6Ø#š Ø—Z‘Z¤5§:¡:Ó-°%·+±+ÀÓ2EØ’Kð &ð> ð3X‰Xœ×,Ñ,Ò ,Ø—<‘< Ñ#ˆDØy‰yœEŸJ™JÒ&¨4¯:©:¸Ò+=Ø Ø X‰XœŸ™Ò #¨¯ © °TÒ(9؈Kð( ð' ‰”d×&Ñ&Ó &ñ ”s˜4Ÿ=™=¨Ñ+Ó,×2Ñ2Ó4¸Ò?ØØ M‰M˜!Ñ ˆÙ ”u˜T 1”~àØ V‰V”t×+Ñ+Ò +´°d¸A´ØˆKØ V‰V”t×*Ñ*Ò *Ø—J‘J˜q‘MˆEØz‰zœUŸZ™ZÒ'¨E¯K©K¸4Ò,?Ø ð ð V‰V”u—z‘zÒ ! a§g¡g°¢o؈KÙ ˜Ÿ™¤5§:¡:Ò-؈KØ rr,)NN)5Úpgen2rÚpytreerrÚpygramrr rLrrrrr%r*r1r5r.rArErJrMrQrXr\rnrzr…r‹rŽrÚconsuming_callsrr¢r£r¤r r©r²r·r¹r½rÃrÆrÑr­r¬rÛr¿r-rärÖrÜrrrÚrôsðØ7õßÝ*Ýò:ò!ò!ò Hó1ò4ò"ò ñ ›©&«(óóò%ò#ó0ò9ó 5ó2ò0ò&ò8 /ò0ò7ò.€ò#ð& €ð€ð€ð€ òò&ò.òòòò=ò*DðZ]‰]˜DŸL™LÐ )€ ó(ðT|‰|˜TŸ]™]¨D¯L©LÐ9€ òô'rlib2to3/__pycache__/refactor.cpython-312.opt-2.pyc000064400000073230152462633570015524 0ustar00Ë T—çhskãó— dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZddlmZdd „ZGd „d e«Zd „Zd „Zd„Zd„Zd„ZGd„de«ZGd„de«ZGd„de«Z Gd„de«Z!y)z#Guido van Rossum éN)Úchainé)ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Ú btm_matchercóΗ t|ggdg«}g}tj|j«D]0\}}}|j d«sŒ|r|dd}|j |«Œ2|S)NÚ*Úfix_é)Ú __import__ÚpkgutilÚ iter_modulesÚ__path__Ú startswithÚappend)Ú fixer_pkgÚ remove_prefixÚpkgÚ fix_namesÚfinderÚnameÚispkgs ú)/usr/lib64/python3.12/lib2to3/refactor.pyÚget_all_fix_namesrsm€ØOÜ Y  B¨¨Ó .€CØ€IÜ&×3Ñ3°C·L±LÖAшeØ ?‰?˜6Õ "ÙØ˜A˜BxØ × Ñ ˜TÕ "ð Bð Ðócó —eZdZy)Ú _EveryNodeN©Ú__name__Ú __module__Ú __qualname__©rrr!r!+ó„Ørr!cóä— t|tjtjf«r|j€t ‚|jhSt|tj «r'|jrt|j«St ‚t|tj«r>t«}|jD]#}|D]}|jt|««ŒŒ%|Std|z«‚)Nz$Oh no! I don't understand pattern %s) Ú isinstancer Ú NodePatternÚ LeafPatternÚtyper!ÚNegatedPatternÚcontentÚ_get_head_typesÚWildcardPatternÚsetÚupdateÚ Exception)ÚpatÚrÚpÚxs rr/r//sÆ€ð9ô#œ×*Ñ*¬F×,>Ñ,>Ð?Ô@ð 8‰8Ð ÜÐ Ø—‘ˆzÐä#”v×,Ñ,Ô-Ø ;Š;Ü" 3§;¡;Ó/Ð /ÜÐä#”v×-Ñ-Ô.ä ‹EˆØ—”ˆAÛØ—‘œ¨Ó+Õ,ñððˆä Ð:¸SÑAÓ BÐBrcóZ— tjt«}g}|D]|}|jr2 t |j«}|D]}||j |«ŒŒA|j||jj |«Œl|j |«Œ~ttjjj«tjj«D]}||j|«Œt|«S#t $r|j |«YŒ wxYw©N)Ú collectionsÚ defaultdictÚlistÚpatternr/rr!Ú _accept_typerr Úpython_grammarÚ symbol2numberÚvaluesÚtokensÚextendÚdict)Ú fixer_listÚ head_nodesÚeveryÚfixerÚheadsÚ node_types rÚ_get_headnode_dictrKKs€ð/ä×(Ñ(¬Ó.€JØ €EÛˆØ =Š=ð 8Ü'¨¯ © Ó6ó"'IؘyÑ)×0Ñ0°Õ7ñ"'ð×!Ñ!Ð-ؘ5×-Ñ-Ñ.×5Ñ5°eÕ<à— ‘ ˜UÕ#ðôœ6×0Ñ0×>Ñ>×EÑEÓGÜ!×0Ñ0×7Ñ7ö9ˆ à9Ñ×$Ñ$ UÕ+ð9ô  Ó Ðøôò $Ø— ‘ ˜U×#ð $ús¯D Ä D*Ä)D*cóN— t|d«Dcgc] }|dz|z‘Œ c}Scc}w)NFÚ.)r)Úpkg_nameÚfix_names rÚget_fixers_from_packagerPdsB€ðô.¨h¸Ô>ó @Ù>ð s‰N˜XÓ %Ø>ñ @ð@ùò @s"có—|Sr9r&)Úobjs rÚ _identityrSks€Ø €Jrcó|‡—d}tjtj|«j«Šˆfd„}t t jtjt jh«}t«} |«\}}||vrŒ|t jk(r|rnöd}nñ|t jk(rÝ|dk(rØ|«\}}|t jk7s|dk7rn¸|«\}}|t jk7s|dk7rn•|«\}}|t jk(r|dk(r |«\}}|t jk(rT|j|«|«\}}|t jk7s|dk7rn |«\}}|t jk(rŒRnnŒt |«S#t$r Yt |«SwxYw) NFcó.•—t‰«}|d|dfS)Nrr)Únext)ÚtokÚgens €rÚadvancez(_detect_future_features..advancersø€Ü3‹iˆØ1‰vs˜1‘vˆ~ÐrTÚfromÚ __future__ÚimportÚ(Ú,)rÚgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetrÚNEWLINEÚNLÚCOMMENTr1ÚSTRINGÚNAMEÚOPÚaddÚ StopIteration)ÚsourceÚhave_docstringrYÚignoreÚfeaturesÚtpÚvaluerXs @rÚ_detect_future_featuresrros‡ø€Ø€NÜ × "Ñ "¤2§;¡;¨vÓ#6×#?Ñ#?Ó @€CôôœŸ ™ ¤x§{¡{´E·M±MÐBÓ C€FÜ‹u€Hð ØÙ› ‰IˆBØV‰|ØØ”u—|‘|Ò#Ù!ØØ!%‘Ø”u—z‘zÒ! e¨v¢oÙ#›I‘ EØœŸ™Ò# u° Ò'<ØÙ#›I‘ EØœŸ™Ò# u°Ò'8ØÙ#›I‘ EØœŸ™’> e¨s¢lÙ '£ ‘IB˜ØœEŸJ™JÒ&Ø—L‘L Ô'Ù '£ ‘IB˜ØœUŸX™X’~¨°#ªØÙ '£ ‘IB˜ð œEŸJ™JÔ&ðñ3ô8 XÓ Ðøô ò Ø Ü XÓ Ðð úsÁ>DF%ÆF%Æ% F;Æ:F;có —eZdZy)Ú FixerErrorNr"r&rrrtrt—s„Ø&rrtcó¾—eZdZddddœZdZdZdd„Zd„Zd„Zd „Z d „Z d „Z dd „Z dd „Z d„Zdd„Zd„Zd d„Zd„Zd„Z d!d„Zd"d„ZdZdZd„Zd„Zd„Zd„Zd„Zd„Zy)#ÚRefactoringToolF)Úprint_functionÚ exec_functionÚwrite_unchanged_filesÚFixrNcóÞ— ||_|xsg|_|jj«|_||jj |«t jj«|_|jdr|jjd=n&|jdr|jjd=|jjd«|_ g|_ tjd«|_g|_d|_t%j&|jt(j*|j¬«|_|j-«\|_|_g|_t5j6«|_g|_g|_t?|j0|j.«D]~}|j@r|j8jC|«Œ+||j.vr|j:jE|«ŒU||j0vsŒd|j<jE|«Œ€tG|j:«|_$tG|j<«|_%y) NrwÚprintrxÚexecryrvF)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr2r r?ÚgrammarÚkeywordsÚgetryÚerrorsÚloggingÚ getLoggerrÚ fixer_logÚwroterÚDriverr r~Ú get_fixersÚ pre_orderÚ post_orderÚfilesÚbmÚ BottomMatcherÚBMÚ bmi_pre_orderÚbmi_post_orderrÚ BM_compatibleÚ add_fixerrrKÚbmi_pre_order_headsÚbmi_post_order_heads)ÚselfÚ fixer_namesr„rrHs rÚ__init__zRefactoringTool.__init__¤sà€ð ð"ˆŒ Ø š BˆŒ Ø×,Ñ,×1Ñ1Ó3ˆŒ Ø Ð Ø L‰L× Ñ  Ô (Ü×,Ñ,×1Ñ1Ó3ˆŒ à <‰<Ð(Ò )Ø— ‘ ×%Ñ% gÑ.Ø \‰\˜/Ò *Ø— ‘ ×%Ñ% fÐ-ð &*§\¡\×%5Ñ%5Ð6MÓ%NˆÔ"؈Œ Ü×'Ñ'Ð(9Ó:ˆŒ ؈ŒØˆŒ Ü—m‘m D§L¡LÜ,2¯N©NØ+/¯;©;ô8ˆŒ ð+/¯/©/Ó*;Ñ'ˆŒ˜œðˆŒ ä×"Ñ"Ó$ˆŒØˆÔØ ˆÔä˜4Ÿ?™?¨D¯N©NÖ;ˆEØ×"Ò"Ø—‘×!Ñ! %Õ(ð˜$Ÿ.™.Ñ(Ø×"Ñ"×)Ñ)¨%Õ0ؘ$Ÿ/™/Ò)Ø×#Ñ#×*Ñ*¨5Õ1ð<ô$6°d×6HÑ6HÓ#IˆÔ Ü$6°t×7JÑ7JÓ$KˆÕ!rc óÜ— g}g}|jD]w}t|iidg«}|jdd«d}|j|j«r|t |j«d}|j d«}|jdj|Dcgc]}|j«‘Œc}«z} t||«} | |j|j«} | jr0|jdur"||jvr|j!d |«Œ |j#d |«| j$d k(r|j'| «Œ@| j$d k(r|j'| «Œbtd | j$z«‚t)j*d«} |j-| ¬«|j-| ¬«||fScc}w#t$rtd|›d|›«d‚wxYw)Nr rMréÿÿÿÿÚ_Úz Can't find TzSkipping optional fixer: %szAdding transformation: %sÚpreÚpostzIllegal fixer order: %rÚ run_order©Úkey)r€rÚrsplitrÚ FILE_PREFIXÚlenÚsplitÚ CLASS_PREFIXÚjoinÚtitleÚgetattrÚAttributeErrorrtr„r‹rÚ log_messageÚ log_debugÚorderrÚoperatorÚ attrgetterÚsort) r›Úpre_order_fixersÚpost_order_fixersÚ fix_mod_pathÚmodrOÚpartsr6Ú class_nameÚ fix_classrHÚkey_funcs rrŽzRefactoringTool.get_fixersÛsÒ€ð ðÐØÐØ ŸKKˆLܘ\¨2¨r°C°5Ó9ˆCØ#×*Ñ*¨3°Ó2°2Ñ6ˆHØ×"Ñ" 4×#3Ñ#3Ô4Ø#¤C¨×(8Ñ(8Ó$9Ð$:Ð;Ø—N‘N 3Ó'ˆEØ×*Ñ*¨R¯W©WÉÓ5OÉÀA°a·g±gµiÈÑ5OÓ-PÑPˆJð XÜ# C¨Ó4 ñ˜dŸl™l¨D¯N©NÓ;ˆEØ~Š~ $§-¡-°tÑ";Ø ¨¯ © Ñ5Ø× Ñ Ð!>ÀÔIÙà N‰NÐ6¸Ô AØ{‰{˜eÒ#Ø ×'Ñ'¨Ö.Ø—‘ Ò&Ø!×(Ñ(¨Ö/ä Ð!:¸U¿[¹[Ñ!HÓIÐIð/(ô2×&Ñ& {Ó3ˆØ×Ñ (ÐÔ+Ø×Ñ 8ÐÔ,Ø Ð"3Ð4Ð4ùò-6Pøô"ò XÝ ²xÁÐ!LÓMÐSWÐWð XúsÂG Â9 GÇG+có— ‚r9r&)r›ÚmsgÚargsÚkwdss rÚ log_errorzRefactoringTool.log_errors€Ø*Ø rcóJ— |r||z}|jj|«yr9)rÚinfo©r›r¿rÀs rr°zRefactoringTool.log_messages#€Ø$٠ؘ‘*ˆCØ ‰ ×јÕrcóH—|r||z}|jj|«yr9)rÚdebugrÅs rr±zRefactoringTool.log_debug s €Ù ؘ‘*ˆCØ ‰ ×ј#Õrcó— yr9r&)r›Úold_textÚnew_textÚfilenameÚequals rÚ print_outputzRefactoringTool.print_outputs €ð à rcó — |D]H}tjj|«r|j|||«Œ6|j |||«ŒJyr9)ÚosÚpathÚisdirÚ refactor_dirÚ refactor_file)r›ÚitemsÚwriteÚ doctests_onlyÚ dir_or_files rÚrefactorzRefactoringTool.refactorsC€Ø7ã ˆKÜw‰w}‰}˜[Ô)Ø×!Ñ! +¨u°mÕDà×"Ñ" ;°°}ÕEñ !rcó— tjdz}tj|«D]Ï\}}}|jd|«|j «|j «|D]m}|j d«rŒtj j|«d|k(sŒ;tj j||«} |j| ||«Œo|D cgc]} | j d«rŒ| ‘Œc} |ddŒÑycc} w)NÚpyzDescending into %srMr) rÏÚextsepÚwalkr±rµrrÐÚsplitextr¬rÓ) r›Údir_namerÕrÖÚpy_extÚdirpathÚdirnamesÚ filenamesrÚfullnameÚdns rrÒzRefactoringTool.refactor_dir sÖ€ð ô —‘˜TÑ!ˆÜ,.¯G©G°HÖ,=Ñ (ˆGX˜yØ N‰NÐ/°Ô 9Ø M‰MŒOØ N‰NÔ Û!ØŸ™¨Õ,Ü—G‘G×$Ñ$ TÓ*¨1Ñ-°Ó7Ü!Ÿw™wŸ|™|¨G°TÓ:HØ×&Ñ& x°¸ ÕFð "ñ )1ÓK© "¸¿ ¹ ÀcÕ8Jš2¨ÑKˆH‘Q‰Kñ->ùòLs ÃC=Ã0C=có‚— t|d«} tj|j «d}|j «tj|d|d¬«5}|j«|fcddd«S#t$r}|jd||«Yd}~yd}~wwxYw#|j «wxYw#1swYyxYw)NÚrbzCan't open %s: %s©NNrr5r¡©ÚencodingÚnewline) ÚopenÚOSErrorrÂrÚdetect_encodingrbÚcloser`Úread)r›rËÚfÚerrrés rÚ_read_python_sourcez#RefactoringTool._read_python_source4s£€ð ð ÜX˜tÓ$ˆAð Ü×/Ñ/°· ± Ó;¸AÑ>ˆHà G‰GŒIÜ W‰WX˜s¨X¸rÕ BÀaØ—6‘6“8˜XÐ%÷CÑ Bøôò Ø N‰NÐ.°¸#Ô >Üûð ûð G‰GIúß BÐ Bús.ƒ A7"B ÁB5Á7 BÂBÂB B2Â5B>có¾— |j|«\}}|€y|dz }|r^|jd|«|j||«}|js||k7r|j |||||«y|jd|«y|j ||«}|js|r.|j r"|j t|«dd|||¬«y|jd|«y)NÚ zRefactoring doctests in %szNo doctest changes in %srŸ)rÕrézNo changes in %s)ròr±Úrefactor_docstringryÚprocessed_fileÚrefactor_stringÚ was_changedÚstr)r›rËrÕrÖÚinputréÚoutputÚtrees rrÓzRefactoringTool.refactor_fileDs߀ØØ×2Ñ2°8Ó<‰ˆˆxØ ˆ=à Ø ‰ ˆÙ Ø N‰NÐ7¸Ô BØ×,Ñ,¨U°HÓ=ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨H°e¸UÀHÕMà—‘Ð9¸8ÕDà×'Ñ'¨¨xÓ8ˆDØ×)Ò)©d°t×7GÒ7Gà×#Ñ#¤C¨£I¨c¨r N°HØ*/¸(ð$õDð—‘Ð1°8Õã à"&§,¡,ˆDK‰KÕ ûð  ûð #'§,¡,ˆDK‰KÕ ús)±B C+Â(C&ÃC.Ã&C+Ã+C.Ã.D có¬—tjj«}|rZ|jd«|j |d«}|j s||k7r|j |d|«y|jd«y|j|d«}|j s|r)|jr|j t|«d|«y|jd«y)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) ÚsysÚstdinrïr±rõryrör÷rørù)r›rÖrúrûrüs rÚrefactor_stdinzRefactoringTool.refactor_stdinvsª€Ü— ‘ —‘Ó ˆÙ Ø N‰NÐ:Ô ;Ø×,Ñ,¨U°IÓ>ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨I°uÕ=à—‘Ð<Õ=à×'Ñ'¨¨yÓ9ˆDØ×)Ò)©d°t×7GÒ7GØ×#Ñ#¤C¨£I¨y¸%Õ@à—‘Ð4Õ5rcóâ— t|j|j«D]}|j||«Œ|j |j |j««|j |j |j««|jj|j««}t|j««rÎ|jjD]™}||vsŒ ||sŒ||jtjj d¬«|j"r-||jtjj$¬«t'||«D]}|||vr||j)|« t+|«|j.r||j.vrŒF|j1|«}|sŒZ|j3||«}|€Œo|j5|«|j«D]0}|j.sg|_|j.j7|«Œ2|jj|j««}|D]"} | |vrg|| <|| j9|| «Œ$ŒŒœt|j««rŒÎt|j|j«D]}|j;||«Œ|j<S#t,$rYŒƒwxYw)NT)r¦Úreverser¥)rrrÚ start_treeÚ traverse_byr™ršr”ÚrunÚleavesÚanyrAr€rµr ÚBaseÚdepthÚkeep_line_orderÚ get_linenor<ÚremoverÚ ValueErrorÚfixers_appliedÚmatchÚ transformÚreplacerrCÚ finish_treerø) r›rürrHÚ match_setÚnodeÚresultsÚnewÚ new_matchesÚfxrs rrzRefactoringTool.refactor_tree†s{€ð ô˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜T 4Õ (ð<ð ×ј×1Ñ1°4·>±>Ó3CÔDØ ×ј×2Ñ2°D·O±OÓ4EÔFð—G‘G—K‘K § ¡ £ Ó.ˆ ä)×"Ñ"Ó$Õ%ØŸ™ŸØ˜IÒ%¨)°EÓ*:à˜eÑ$×)Ñ)¬f¯k©k×.?Ñ.?ÈÐ)ÔNà×,Ò,ð" %Ñ(×-Ñ-´&·+±+×2HÑ2HÐ-ÔIä $ Y¨uÑ%5× 6˜Ø 9¨UÑ#3Ñ3Ø% eÑ,×3Ñ3°DÔ9ð%Ü% dœOð  ×.Ò.°5¸D×Ò+>Ø>@¨Ô(;Ø$(×$7Ñ$7×$>Ñ$>¸uÕ$Eð -=ð/3¯g©g¯k©k¸#¿*¹*»,Ó.G  Û+6 CØ+.°)Ñ+;Ø79¨ °#©à$-¨c¡N×$9Ñ$9¸+ÀcÑ:JÕ$Kò ,7òA!7ð(ô)×"Ñ"Ó$Ö%ôb˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜d DÕ )ð<à×ÑÐøôE *ò%ò%ð%úsÆ K!Ë! K.Ë-K.cóº— |sy|D]R}||jD]>}|j|«}|sŒ|j||«}|€Œ,|j|«|}Œ@ŒTyr9)r,rrr)r›r€Ú traversalrrHrrs rr zRefactoringTool.traverse_byÕsc€ð ñØ ÛˆDØ § ¡ Ô*ØŸ+™+ dÓ+ÚØŸ/™/¨$°Ó8Cؑ؟ ™  SÔ)Ø"™ñ +ñrcó4— |jj|«|€|j|«d}|€y||k(}|j||||«|r|j d|«|j sy|r|j ||||«y|j d|«y)NrzNo changes to %szNot writing changes to %s)r‘rròrÍr±ryÚ write_file)r›rÊrËrÉrÕrérÌs rrözRefactoringTool.processed_fileìsŸ€ð ð ‰ ×ј(Ô#Ø Ð Ø×/Ñ/°Ó9¸!Ñ<ˆHØÐØØ˜HÑ$ˆØ ×ј( H¨h¸Ô>Ù Ø N‰NÐ-¨xÔ 8Ø×-Ò-ØÙ Ø O‰O˜H h°¸(Õ Cà N‰NÐ6¸Õ Arcób— tj|d|d¬«}|5 |j |«ddd«|j d|«d|_y#t$r}|jd||«Yd}~yd}~wwxYw#t$r}|jd||«Yd}~Œld}~wwxYw#1swYŒuxYw)NÚwr¡rèzCan't create %s: %szCan't write %s: %szWrote changes to %sT)r`rërìrÂrÕr±rŒ)r›rÊrËrÉréÚfprñs rr#zRefactoringTool.write_files©€ð ð  Ü—‘˜ 3°À2ÔFˆBò ð DØ—‘˜Ô"÷ð ‰Ð,¨hÔ7؈ øôò Ø N‰NÐ0°(¸CÔ @Ü ûð ûôò DØ—‘Ð3°X¸s×CÑCûð Dú÷ˆRúsEƒAžB% A<Á A9ÁA4Á4A9Á< B"ÂBÂB%ÂB"Â"B%Â%B.z>>> z... c óÆ— g}d}d}d}d}|jd¬«D] }|dz }|j«j|j«rK|#|j |j ||||««|}|g}|j |j«} |d| }Œ}|S|j||jz«s#|||jj«zdzk(r|j|«ŒÒ|#|j |j ||||««d}d}|j|«Œ|#|j |j ||||««dj|«S)NrT©Úkeependsrrôr¡) Ú splitlinesÚlstriprÚPS1rCÚrefactor_doctestÚfindÚPS2Úrstriprr¬) r›rúrËÚresultÚblockÚ block_linenoÚindentÚlinenoÚlineÚis rrõz"RefactoringTool.refactor_docstringsl€ð ðˆØˆØˆ ؈؈Ø×$Ñ$¨dÐ$×3ˆDØ a‰KˆFØ{‰{‹}×'Ñ'¨¯©Ô1ØÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKà% ؘؗI‘I˜dŸh™hÓ'ؘb˜q˜‘ØÐ$Ø—?‘? 6¨D¯H©HÑ#4Ô5ؘ6 D§H¡H§O¡OÓ$5Ñ5¸Ñ<Ò<Ø— ‘ ˜TÕ"àÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKàØØ— ‘ ˜dÖ#ð)4ð* Ð Ø M‰M˜$×/Ñ/°°|Ø06¸óBô Càw‰wv‹Ðrcó¨— |j|||«}|j||«r“t|«jd¬«}|d|dz ||dz d}} |djd«s |dxxdz cc<||jz|j!d«zg}|r#||Dcgc]}||j"z|z‘Œc}z }|S#t$r†}|jjtj «r(|D]#}|j d|jd««Œ%|jd|||jj|«|cYd}~Sd}~wwxYwcc}w) Nz Source: %srôz+Can't parse docstring in %s line %s: %s: %sTr(rrŸr)Ú parse_blockr3rÚ isEnabledForr‰ÚDEBUGr±r0rÂrr#rrùr*Úendswithr,Úpopr/) r›r2r5r4rËrürñr6rÚclippeds rr-z RefactoringTool.refactor_doctestDsH€ð ð Ø×#Ñ# E¨6°6Ó:ˆDð × Ñ ˜d HÔ -Üd“)×&Ñ&°Ð&Ó5ˆCà˜y  q¡˜>¨3¨v°a©x¨y¨>SˆGàr‘7×#Ñ# DÔ)ØB“˜4‘“ؘdŸh™hÑ&¨¯©°«Ñ3Ð4ˆEÙØ¹sÓC¹s°t˜& 4§8¡8Ñ+¨dÓ2¸sÑCÑC؈ øô#ò Ø{‰{×'Ñ'¬¯ © Ô6Û!DØ—N‘N <°·±¸TÓ1BÕCð"à N‰NÐHØ# V¨S¯]©]×-CÑ-CÀSô JàLûð  üò Ds$ƒB=ÂEÂ= E ÃA;EÅE ÅE cóX—|jrd}nd}|js|jd|«n4|jd|«|jD]}|j|«Œ|jr3|jd«|jD]}|j|«Œ|jr{t |j«dk(r|jd«n%|jdt |j««|jD]\}}}|j|g|¢­i|¤ŽŒyy) NÚwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)rŒr‘r°r‹rˆr©)r›r@ÚfileÚmessager¿rÀrÁs rÚ summarizezRefactoringTool.summarizeasþ€Ø :Š:؉DàˆDØzŠzØ × Ñ Ð4°dÕ ;à × Ñ Ð6¸Ô =ØŸ œ Ø× Ñ  Õ&ð#à >Š>Ø × Ñ ÐCÔ DØŸ>œ>Ø× Ñ  Õ)ð*à ;Š;Ü4—;‘;Ó 1Ò$Ø× Ñ Ð!5Õ6à× Ñ Ð!8¼#¸d¿k¹kÓ:JÔKØ#'§;¤;‘T˜4Ø × Ñ  Ð4 tÒ4¨tÓ4ñ$/ð rcó~— |jj|j|||««}t«|_|Sr9)rÚ parse_tokensÚ wrap_toksrcr)r›r2r5r4rüs rr9zRefactoringTool.parse_blockxs9€ð ð {‰{×'Ñ'¨¯©°u¸fÀfÓ(MÓNˆÜ(›{ˆÔ؈ rc#óÌK— tj|j||«j«}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| f–—Œ-y­w)Nr)rr_Ú gen_linesÚ__next__) r›r2r5r4rBr,rqÚline0Úcol0Úline1Úcol1Ú line_texts rrFzRefactoringTool.wrap_toks‚s€èø€ØIÜ×)Ñ)¨$¯.©.¸ÀÓ*G×*PÑ*PÓQˆÛDJÑ @ˆD%™˜% © ¨°°yØ V˜a‘ZÑ ˆEØ V˜a‘ZÑ ˆEð ˜  t˜}¨u°d¨m¸YÐFÓ FñEKùs‚A"A$c#óK— ||jz}||jz}|}|D]R}|j|«r|t|«d–—n,||j «dzk(rd–—nt d|›d|›«‚|}ŒT d–—Œ­w)Nrôzline=z , prefix=r¡)r,r/rr©r0ÚAssertionError)r›r2r4Úprefix1Úprefix2Úprefixr6s rrHzRefactoringTool.gen_liness‘èø€ð ð˜4Ÿ8™8Ñ#ˆØ˜4Ÿ8™8Ñ#ˆØˆÛˆD؉˜vÔ&Øœ3˜v›;˜<Ð(Ó(ؘŸ™›¨4Ñ/Ò/Ø“ å$ºTÁ6Ð%JÓKÐK؉FððØŠHðùs‚A?Brç)FF)F)NFNr9)r#r$r%r‚r«r¨rrŽrÂr°r±rÍrØrÒròrÓr÷rrr rör#r,r/rõr-rCr9rFrHr&rrrvrv›s­„à+0Ø).Ø27ñ9Ðð€LØ€Kó3Lòn&5òPòò ò  ó FóLò(&ó =ò.ó66ò M ò^#ð.GLØ $óBó*ð* €CØ €Cò)òVò:5ò.ò Górrvcó —eZdZy)ÚMultiprocessingUnsupportedNr"r&rrrUrU¤r'rrUcóB‡—eZdZˆfd„Z dˆfd„ Zˆfd„Zˆfd„ZˆxZS)ÚMultiprocessRefactoringToolcóH•—tt| |i|¤Žd|_d|_yr9)ÚsuperrWrÚqueueÚ output_lock©r›rÀÚkwargsrs €rrz$MultiprocessRefactoringTool.__init__ªs'ø€Ü Ô)¨4Ñ9¸4ÐJÀ6ÒJ؈Œ ؈ÕrcóŽ•—|dk(rtt| |||«S ddl}|j td«‚|j«|_|j«|_ t|«Dcgc]}|j|j¬«‘Œ }} |D]}|j«Œtt| |||«|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_y#t$rt ‚wxYwcc}w#|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_wxYw)Nrrz already doing multiple processes)Útarget)rYrWrØÚmultiprocessingÚ ImportErrorrUrZÚ RuntimeErrorÚ JoinableQueueÚLockr[ÚrangeÚProcessÚ_childÚstartr¬ÚputÚis_alive) r›rÔrÕrÖÚ num_processesr`r7Ú processesr6rs €rrØz$MultiprocessRefactoringTool.refactor¯s”ø€à ˜AÒ ÜÔ4°dÑDØu˜mó-ð -ð -Û "ð :‰:Ð !ÜÐAÓBÐ BØ$×2Ñ2Ó4ˆŒ Ø*×/Ñ/Ó1ˆÔä# MÔ2ó4Ù2˜ð%×,Ñ,°D·K±KÐ,Õ@Ø2ð ð4ð ÛØ—‘• ðä Ô-¨tÑ =¸eÀUØ>Kô Mð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJøô)ò -Ü,Ð ,ð -üò 4øð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJús$D6Á/#E Â,EÄ6EÅAGÆ*Gcó•—|jj«}|Q|\}} tt||i|¤Ž|jj «|jj«}|ŒPyy#|jj «wxYwr9)rZr‡rYrWrÓÚ task_done)r›ÚtaskrÀr]rs €rrgz"MultiprocessRefactoringTool._childÌs€ø€Øz‰z~‰~ÓˆØÐ؉LˆD&ð 'ÜÔ1°4ÑFØð%Ø#ò%ð— ‘ ×$Ñ$Ô&Ø—:‘:—>‘>Ó#ˆDðÓøð — ‘ ×$Ñ$Õ&ús ¤A0Á0B có~•—|j|jj||f«ytt||i|¤ŽSr9)rZrirYrWrÓr\s €rrÓz)MultiprocessRefactoringTool.refactor_file×sAø€Ø :‰:Ð !Ø J‰JN‰N˜D &˜>Õ *äÔ4°dÑIØð!Øñ!ð !r)FFr)r#r$r%rrØrgrÓÚ __classcell__)rs@rrWrW¨s$ø„ô ð :?Ø õô: $÷!ð!rrW)T)"Ú __author__r`rÏrrr‰r³r:Ú itertoolsrÚpgen2rrrÚ fixer_utilrr¡r r r r’rr3r!r/rKrPrSrrrtÚobjectrvrUrWr&rrÚrwsœððð3€ ó Û ÛÛ ÛÛÛÝ÷+Ñ*Ý!ßÝó ô ô òCò8ò2@òò%ôP'ô'ôFfôFôR  ô ô4! /õ4!rlib2to3/__pycache__/__main__.cpython-312.opt-2.pyc000064400000000425152462633570015433 0ustar00Ë T—çhCãóH—ddlZddlmZejed««y)éNé)Úmainz lib2to3.fixes)ÚsysrÚexit©óú)/usr/lib64/python3.12/lib2to3/__main__.pyÚr sðÛ Ýà€‡‰ˆoÓ Õrlib2to3/__pycache__/pytree.cpython-312.opt-2.pyc000064400000060435152462633570015232 0ustar00Ë T—çhFmãóè— dZddlZddlmZdZiad„ZGd„de«ZGd„d e«Z Gd „d e«Z d „Z Gd „de«Z Gd„de «Z Gd„de «ZGd„de «ZGd„de «Zd„Zy)z#Guido van Rossum éN)ÚStringIOiÿÿÿcó—tsDddlm}|jj «D]!\}}t |«t k(sŒ|t|<Œ#tj||«S)Né)Úpython_symbols)Ú _type_reprsÚpygramrÚ__dict__ÚitemsÚtypeÚintÚ setdefault)Útype_numrÚnameÚvals ú'/usr/lib64/python3.12/lib2to3/pytree.pyÚ type_reprrsO€å Ý*ð(×0Ñ0×6Ñ6Ö8‰IˆD#ÜC‹yœCÓ°D¤¨SÒ!1ð9ä × !Ñ ! (¨HÓ 5Ð5ócóº—eZdZ dZdZdZdZdZd„Zd„Z dZ d„Z d„Z d„Z d „Zd „Zd „Zd „Zd „Zed„«Zed„«Zd„Zd„Zd„Zej4dkrd„Zyy)ÚBaseN©Fcó.— tj|«S©N©ÚobjectÚ__new__©ÚclsÚargsÚkwdss rrz Base.__new__1s€ØEä~‰~˜cÓ"Ð"rcób— |j|jurtS|j|«Sr)Ú __class__ÚNotImplementedÚ_eq©ÚselfÚothers rÚ__eq__z Base.__eq__6s-€ð ð >‰> §¡Ñ 0Ü!Ð !Øx‰x˜‹Ðrcó— t‚r©ÚNotImplementedErrorr$s rr#zBase._eqBs€ð ô"Ð!rcó— t‚rr)©r%s rÚclonez Base.cloneMó€ð ô "Ð!rcó— t‚rr)r,s rÚ post_orderzBase.post_orderUr.rcó— t‚rr)r,s rÚ pre_orderzBase.pre_order]r.rcóT— t|t«s|g}g}d}|jjD]-}||ur||j |«d}Œ|j |«Œ/|jj «||j_|D]}|j|_Œd|_y©NFT)Ú isinstanceÚlistÚparentÚchildrenÚextendÚappendÚchanged)r%ÚnewÚ l_childrenÚfoundÚchÚxs rÚreplacez Base.replacees€Ø=ô˜#œtÔ$Ø%ˆC؈ ؈ؗ+‘+×&Ô&ˆBØT‰zà?Ø×%Ñ% cÔ*Ø‘à×!Ñ! "Õ%ð'ð ‰ ×ÑÔØ)ˆ ‰ ÔÛˆAØ—{‘{ˆAHðàˆ rcóš— |}t|t«s-|jsy|jd}t|t«sŒ-|jS©Nr)r5ÚLeafr8Úlineno©r%Únodes rÚ get_linenozBase.get_lineno|sD€ØG؈ܘT¤4Ô(Ø—=’=ØØ—=‘= Ñ#ˆDô˜T¤4Õ(ð{‰{Ðrcó^—|jr|jj«d|_y©NT)r7r;Ú was_changedr,s rr;z Base.changed…s!€Ø ;Š;Ø K‰K× Ñ Ô !؈Õrcóî— |jrht|jj«D]E\}}||usŒ |jj«|jj|=d|_|cSyyr)r7Ú enumerater8r;)r%ÚirGs rÚremovez Base.removeŠsg€ð ð ;Š;Ü$ T§[¡[×%9Ñ%9Ö:‘4ؘ4’<Ø—K‘K×'Ñ'Ô)ØŸ ™ ×,Ñ,¨QÐ/Ø"&D”KØ’Hñ ;ð rcóÔ— |j€yt|jj«D](\}}||usŒ |jj|dzcSy#t$rYywxYw)Nr)r7rMr8Ú IndexError©r%rNÚchilds rÚ next_siblingzBase.next_sibling—sn€ð ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ð ØŸ;™;×/Ñ/°°!±Ñ4Ò4ñ8øô"ò Úð úsºAÁ A'Á&A'cóÀ— |j€yt|jj«D].\}}||usŒ |dk(ry|jj|dz cSy©Nrr)r7rMr8rRs rÚ prev_siblingzBase.prev_sibling¨s_€ð ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ؘ’6ÙØ—{‘{×+Ñ+¨A¨a©CÑ0Ò0ñ 8rc#óbK—|jD]}|j«Ed{–—†Œy7Œ­wr)r8Úleaves©r%rSs rrYz Base.leaves¸s&èø€Ø—]”]ˆEØ—|‘|“~× %Ñ %ñ#Ø %ús ‚#/¥-¦/cóV—|j€yd|jj«zSrV)r7Údepthr,s rr\z Base.depth¼s'€Ø ;‰;Ð ØØ4—;‘;×$Ñ$Ó&Ñ&Ð&rcó:— |j}|€y|jS©NÚ)rTÚprefix)r%Únext_sibs rÚ get_suffixzBase.get_suffixÁs'€ð ð×$Ñ$ˆØ Ð ØØ‰Ðr©ércó6—t|«jd«S)NÚascii)ÚstrÚencoder,s rÚ__str__z Base.__str__Ìs€Üt“9×#Ñ# GÓ,Ð ,r)Ú__name__Ú __module__Ú __qualname__r r7r8rKÚ was_checkedrr'Ú__hash__r#r-r0r2rArHr;rOÚpropertyrTrWrYr\rbÚsysÚ version_inforirrrrrs¬„ðð €DØ €FØ€HØ€KØ€Kò#ò ð€Hò "ò"ò"ò"òò.ò ò ðñ óð ð ñ 1óð 1ò&ò'ò ð ×ј&Ò ó -ð!rrcó¨—eZdZ dd„Zd„Zd„ZejdkDreZd„Z d„Z d„Z d „Z e d „«Zejd „«Zd „Zd „Zd„Zy)ÚNodeNcóž— ||_t|«|_|jD] }||_Œ |||_|r |dd|_yd|_yr)r r6r8r7r`Úfixers_applied)r%r r8Úcontextr`rur?s rÚ__init__z Node.__init__ÓsW€ð ðˆŒ Ü˜X›ˆŒ Ø—-”-ˆBàˆBIð ð Ð Ø ˆDŒKÙ Ø"0±Ð"3ˆDÕ à"&ˆDÕ rcó|— |jj›dt|j«›d|j›dS©NÚ(ú, Ú))r!rjrr r8r,s rÚ__repr__z Node.__repr__ìs/€Ø7Ø#Ÿ~™~×6Ó6Ü(¨¯©Õ3Ø#Ÿ}›}ð.ð .rcóV— djtt|j««Sr^)ÚjoinÚmaprgr8r,s rÚ __unicode__zNode.__unicode__òs#€ð ð w‰w”sœ3 § ¡ Ó.Ó/Ð/rrccóf— |j|jf|j|jfk(Sr)r r8r$s rr#zNode._eqýs*€Ø-Ø— ‘ ˜4Ÿ=™=Ð)¨e¯j©j¸%¿.¹.Ð-IÑIÐIrcóž— t|j|jDcgc]}|j«‘Œc}|j¬«Scc}w©N)ru)rsr r8r-ru)r%r?s rr-z Node.clones?€Ø2ÜD—I‘I°T·]²]ÓC±]¨r §¡¥ °]ÑCØ#'×#6Ñ#6ô8ð 8ùÒCs A c#ólK— |jD]}|j«Ed{–—†Œ|–—y7Œ ­wr)r8r0rZs rr0zNode.post_orders3èø€Ø8Ø—]”]ˆEØ×'Ñ'Ó)× )Ñ )ð#à‹ ð *ús ‚$4¦2§ 4c#ólK— |–—|jD]}|j«Ed{–—†Œy7Œ­wr)r8r2rZs rr2zNode.pre_order s/èø€Ø7ØŠ Ø—]”]ˆEØ—‘Ó(× (Ñ (ñ#Ø (ús ‚(4ª2«4cóP— |jsy|jdjS)Nr_r©r8r`r,s rr`z Node.prefixs(€ð ð}Š}ØØ}‰}˜QÑ×&Ñ&Ð&rcóF—|jr||jd_yyrCrˆ©r%r`s rr`z Node.prefixs€à =Š=Ø&,ˆDM‰M˜!Ñ Õ #ð rcóz— ||_d|j|_||j|<|j«yr)r7r8r;rRs rÚ set_childzNode.set_child s8€ð ðˆŒ Ø"&ˆ ‰ aÑÔØ ˆ ‰ aÑØ ‰ rcól— ||_|jj||«|j«yr)r7r8Úinsertr;rRs rÚ insert_childzNode.insert_child*s-€ð ðˆŒ Ø ‰ ×јQ Ô&Ø ‰ rcój— ||_|jj|«|j«yr)r7r8r:r;rZs rÚ append_childzNode.append_child3s+€ð ðˆŒ Ø ‰ ×јUÔ#Ø ‰ r©NNN)rjrkrlrwr}rrprqrir#r-r0r2ror`ÚsetterrŒrr‘rrrrsrsÏs„„à5ðØØ $ó'ò2.ò 0ð ×ј&Ò ØˆòJò8ò ò )ð ñ'óð'ð ‡]]ñ-óð-òòórrscó¨—eZdZ dZdZdZddgfd„Zd„Zd„Ze jdkDreZ d„Z d „Z d „Zd „Zd „Zed „«Zej&d„«Zy)rDr_rNcóz— ||\|_\|_|_||_||_|||_|dd|_yr)Ú_prefixrEÚcolumnr Úvalueru)r%r r˜rvr`rus rrwz Leaf.__init__FsL€ð ð Ð Ø7>Ñ 4ˆDŒLÑ4˜4œ;¨¬ ؈Œ ؈Œ Ø Ð Ø!ˆDŒLØ,©QÐ/ˆÕrcój— |jj›d|j›d|j›dSry)r!rjr r˜r,s rr}z Leaf.__repr__Ys*€Ø7Ø#Ÿ~™~×6Ó6Ø#Ÿy›yØ#Ÿz›zð+ð +rcóH— |jt|j«zSr)r`rgr˜r,s rrzLeaf.__unicode___s €ð ð {‰{œS §¡›_Ñ,Ð,rrccóf— |j|jf|j|jfk(Sr)r r˜r$s rr#zLeaf._eqjs*€Ø-Ø— ‘ ˜4Ÿ:™:Ð&¨5¯:©:°u·{±{Ð*CÑCÐCrcó¢— t|j|j|j|j|j ff|j ¬«Sr„)rDr r˜r`rEr—rur,s rr-z Leaf.clonens@€Ø2ÜD—I‘I˜tŸz™zØ—[‘[ 4§;¡;°· ± Ð"<Ð=Ø#'×#6Ñ#6ô8ð 8rc#óK—|–—y­wrrr,s rrYz Leaf.leavests èø€Ø‹ ùs‚c#óK— |–—y­wrrr,s rr0zLeaf.post_orderwsèø€Ø8Ø‹ ùó‚ c#óK— |–—y­wrrr,s rr2zLeaf.pre_order{sèø€Ø7Ø‹ ùrŸcó— |jSr)r–r,s rr`z Leaf.prefixs€ð ð|‰|Ðrcó2—|j«||_yr)r;r–rŠs rr`z Leaf.prefix†s€à ‰ ŒØˆ r)rjrkrlr–rEr—rwr}rrprqrir#r-rYr0r2ror`r“rrrrDrD=s‹„à1ð€GØ €FØ €FðØØ "ó0ò&+ò -ð ×ј&Ò ØˆòDò8ò òòðñóðð  ‡]]ñóñrrDcó— |\}}}}|s||jvr!t|«dk(r|dSt|||¬«St|||¬«S)Nrr)rv)Ú number2symbolÚlenrsrD)ÚgrÚraw_noder r˜rvr8s rÚconvertr¨‹s]€ðð&.Ñ"€Dˆ%˜(Ù4˜2×+Ñ+Ñ+ô ˆx‹=˜AÒ Ø˜A‘;Ð ÜD˜(¨GÔ4Ð4äD˜%¨Ô1Ð1rcóB—eZdZ dZdZdZd„Zd„Zd„Zdd„Z dd„Z d„Z y) Ú BasePatternNcó.— tj|«Srrrs rrzBasePattern.__new__³s€ØLä~‰~˜cÓ"Ð"rcóð—t|j«|j|jg}|r|d€ |d=|r|d€Œ |jj ›ddj tt|««›dS)Néÿÿÿÿrzr{r|) rr Úcontentrr!rjrr€Úrepr)r%rs rr}zBasePattern.__repr__¸sd€Ü˜$Ÿ)™)Ó$ d§l¡l°D·I±IÐ>ˆÙt˜B‘xÐ'ØRñt˜B‘xÑ'àŸ>™>×2Ó2°D·I±I¼cÄ$È»oÕ4NÐOÐOrcó— |Srrr,s rÚoptimizezBasePattern.optimize¾s€ð ð ˆ rcóü— |j|j|jk7ry|j,d}|i}|j||«sy|r|j|«||jr|||j<yr4)r r®Ú _submatchÚupdater)r%rGÚresultsÚrs rÚmatchzBasePattern.matchÆs|€ð ð 9‰9Ð  T§Y¡Y°$·)±)Ò%;ØØ <‰<Ð #؈AØÐ"ØØ—>‘> $¨Ô*ØÙØ—‘˜qÔ!Ø Ð  4§9¢9Ø!%ˆGD—I‘IÑ ØrcóL— t|«dk7ry|j|d|«S)NrFr)r¥r·)r%Únodesrµs rÚ match_seqzBasePattern.match_seqßs,€ð ô ˆu‹:˜Š?ØØz‰z˜% ™( GÓ,Ð,rc#óPK— i}|r|j|d|«rd|f–—yyy­wrV)r·)r%r¹r¶s rÚgenerate_matcheszBasePattern.generate_matchesés6èø€ð ð ˆÙ T—Z‘Z  a¡¨!Ô,ØQ$‹Jð-ˆ5ùs‚$&r) rjrkrlr r®rrr}r±r·rºr¼rrrrªrªžs7„ð ð €DØ€GØ €Dò#ò Pò óó2-órrªcó$—eZdZdd„Zdd„Zdd„Zy)Ú LeafPatternNcó8— ||||_||_||_yr)r r®r)r%r r®rs rrwzLeafPattern.__init__ös*€ð ð Ð à Ð àˆŒ ؈Œ ؈ rcóT— t|t«sytj|||«S©NF)r5rDrªr·©r%rGrµs rr·zLeafPattern.match s'€Ø8ܘ$¤Ô%ØÜ× Ñ   t¨WÓ5Ð5rcó6— |j|jk(Sr)r®r˜rÂs rr³zLeafPattern._submatchs€ð ð|‰|˜tŸz™zÑ)Ð)rr’r)rjrkrlrwr·r³rrrr¾r¾ôs„óó(6ô *rr¾có —eZdZdZdd„Zdd„Zy)Ú NodePatternFNcó¤— ||6t|«}t|«D]\}}t|t«sŒd|_Œ||_||_||_yrJ)r6rMr5ÚWildcardPatternÚ wildcardsr r®r)r%r r®rrNÚitems rrwzNodePattern.__init__$sY€ð ð Ð à Ð ä˜7“mˆGÜ$ WÖ-‘4ä˜d¤OÕ4Ø%)D•Nð.ðˆŒ ØˆŒ ؈ rcóš— |jrVt|j|j«D]2\}}|t |j«k(sŒ||j |«yyt |j«t |j«k7ryt |j|j«D]\}}|j||«rŒyy©NTF)rÈr¼r®r8r¥r´Úzipr·)r%rGrµÚcr¶Ú subpatternrSs rr³zNodePattern._submatchAs­€ð ð >Š>Ü(¨¯©°t·}±}ÖE‘1Øœ˜DŸM™MÓ*Ó*ØÐ*ØŸ™ qÔ)Ùð Fð Ü ˆt|‰|Ó ¤ D§M¡MÓ 2Ò 2ØÜ!$ T§\¡\°4·=±=Ö!AÑ ˆJ˜Ø×#Ñ# E¨7Õ3Ùð"Bðrr’r)rjrkrlrÈrwr³rrrrÅrÅ s„à€Ióô:rrÅcóL—eZdZ ddedfd„Zd„Zd d„Zd d„Zd„Zd„Z d „Z d „Z y) rÇNrcó‚— | ttt|««}|D]}Œ||_||_||_||_yr)Útupler€r®ÚminÚmaxr)r%r®rÒrÓrÚalts rrwzWildcardPattern.__init__ksE€ð ð. Ð ÜœC¤ wÓ/Ó0ˆGó‘wàˆŒ ؈ŒØˆŒØˆ rcó²— d}|jEt|j«dk(r-t|jd«dk(r|jdd}|jdk(r\|jdk(rM|j€t |j ¬«S|)|j |j k(r|j «S|jdkrˆt|t«rx|jdkri|j |j k(rPt|j|j|jz|j|jz|j «S|S)Nrr)r) r®r¥rÒrÓrÅrr±r5rÇ)r%rÎs rr±zWildcardPattern.optimizeŽs€Ø9؈ Ø L‰LÐ $Ü — ‘ Ó  Ò "¤s¨4¯<©<¸©?Ó';¸qÒ'@ØŸ™ a™¨Ñ+ˆJØ 8‰8qŠ=˜TŸX™X¨š]Ø|‰|Ð#Ü"¨¯ © Ô2Ð2ØÐ%¨4¯9©9¸ ¿¹Ò+GØ!×*Ñ*Ó,Ð,Ø H‰H˜ŠMœj¨´_ÔEØ N‰N˜aÒ  D§I¡I°·±Ò$@Ü" :×#5Ñ#5Ø#'§8¡8¨J¯N©NÑ#:Ø#'§8¡8¨J¯N©NÑ#:Ø#-§?¡?ó4ð 4ðˆ rcó*— |j|g|«Sr)rºrÂs rr·zWildcardPattern.match¡s€Ø5Ø~‰~˜t˜f gÓ.Ð.rcóÆ— |j|«D]L\}}|t|«k(sŒ|5|j|«|jrt |«||j<yyrË)r¼r¥r´rr6)r%r¹rµrÍr¶s rrºzWildcardPattern.match_seq¥s\€ØBØ×)Ñ)¨%Ö0‰DˆAˆqØ”C˜“J‹ØÐ&Ø—N‘N 1Ô%Ø—y’yÜ-1°%«[˜ § ¡ Ñ*Ùð 1ðrc #ó(K— |j€bt|jdtt|«|j«z«D](}i}|j r|d|||j <||f–—Œ*y|j dk(r|j |«–—yttd«r#tj}t«t_ |j|d«D])\}}|j r|d|||j <||f–—Œ+ ttd«r t_ yy#t$r@|j|«D])\}}|j r|d|||j <||f–—Œ+YŒewxYw#ttd«r t_ wwxYw­w)NrÚ bare_nameÚ getrefcountr)r®ÚrangerÒr¥rÓrÚ_bare_name_matchesÚhasattrrpÚstderrrÚ_recursive_matchesÚ RuntimeErrorÚ_iterative_matches)r%r¹Úcountr¶Ú save_stderrs rr¼z WildcardPattern.generate_matches°sièø€ð ð <‰<Ð ä˜tŸx™x¨¬S´°U³¸T¿X¹XÓ-FÑ)FÖGØØ—9’9Ø#(¨¨% =Ad—i‘i‘LؘQh“ñ Hð Y‰Y˜+Ò %Ø×)Ñ)¨%Ó0Ó 0ô ”s˜MÔ*Ü!Ÿj™j Ü%›Z”” ð -Ø $× 7Ñ 7¸¸qÖ A‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nñ!Bôœ3  Ô.Ø!,”C•Jð/øô ò #ð!%× 7Ñ 7¸Ö >‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nò!?ð #ûôœ3  Ô.Ø!,”C•Jð/üs=‚CFà >D%ÄE1ÄFÄ%AE.Å+E1Å-E.Å.E1Å1FÆFc#óK— t|«}d|jk\rdif–—g}|jD]/}t||«D]\}}||f–—|j ||f«Œ Œ1|r™g}|D]Œ\}} ||ksŒ ||j ksŒ|jD]b}t|||d«D]N\} } | dkDsŒ i}|j | «|j | «|| z|f–—|j || z|f«ŒPŒdŒŽ|}|rŒ˜yy­wrC)r¥rÒr®r¼r:rÓr´) r%r¹ÚnodelenrµrÔrÍr¶Ú new_resultsÚc0Úr0Úc1Úr1s rráz"WildcardPattern._iterative_matchesÝs èø€Ø6Üe“*ˆØ —‘Š=ØR%ŠKàˆà—<”<ˆCÜ(¨¨eÖ4‘1ؘd’ Ø—‘  1˜vÕ&ñ5ð ñ ؈KÛ!‘Bà˜“< B¨$¯(©(£NØ#Ÿ|œ|˜Ü&6°s¸EÀ"À#¸JÖ&G™F˜B Ø! A›vØ$& Ø !§¡¨¤ Ø !§¡¨¤ Ø&(¨2¡g¨q jÒ 0Ø +× 2Ñ 2°B¸±G¸Q°<Õ @ñ 'Hñ ,ð"ð"ˆGôùs‚A3DÁ6DÂ)DÂ0A DÃ>DcóØ— d}i}d}t|«}|sA||kr)Ú __author__rpÚiorrïrrrrrsrDr¨rªr¾rÅrÇrñr¼rrrÚrüs¢ððð3€ ã Ýà€à€ ò6ôn-ˆ6ôn-ô`kˆ4ôkô\Lˆ4ôLò\2ô&S&ôSôl)*+ô)*ôX:+ô:ôzy)kôy)ôx [ô óF%rlib2to3/__pycache__/patcomp.cpython-312.pyc000064400000023364152462633570014425 0ustar00Ë T—çhŽãóÚ—dZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gd„d e «Zd „ZGd „d e«Zej$ej&ej(dd œZd„Zd„Zd„Zy)zPattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. z#Guido van Rossum éNé)ÚdriverÚliteralsÚtokenÚtokenizeÚparseÚgrammar)Úpytree)Úpygramcó —eZdZy)ÚPatternSyntaxErrorN)Ú__name__Ú __module__Ú __qualname__©óú(/usr/lib64/python3.12/lib2to3/patcomp.pyr r s„Ørr c#óþK—tjtjtjh}t j t j|«j«}|D]}|\}}}}}||vsŒ|–—Œy­w)z6Tokenizes a string suppressing significant whitespace.N) rÚNEWLINEÚINDENTÚDEDENTrÚgenerate_tokensÚioÚStringIOÚreadline) ÚinputÚskipÚtokensÚ quintupleÚtypeÚvalueÚstartÚendÚ line_texts rÚtokenize_wrapperr%sdèø€ä M‰Mœ5Ÿ<™<¬¯©Ð 6€DÜ × %Ñ %¤b§k¡k°%Ó&8×&AÑ&AÓ B€FÛˆ Ø-6Ñ*ˆˆeU˜C Ø tÒ Ø‹Oñùs ‚A3A=Á6A=có0—eZdZdd„Zdd„Zd„Zdd„Zd„Zy) ÚPatternCompilerNcó‚—|€+tj|_tj|_n>t j |«|_tj|j«|_tj|_ tj|_ t j|jt¬«|_y)z^Initializer. Takes an optional alternative filename for the pattern grammar. N)Úconvert)r Úpattern_grammarr Úpattern_symbolsÚsymsrÚ load_grammarÚSymbolsÚpython_grammarÚ pygrammarÚpython_symbolsÚpysymsÚDriverÚpattern_convert)ÚselfÚ grammar_files rÚ__init__zPatternCompiler.__init__(sz€ð Ð Ü!×1Ñ1ˆDŒLÜ×.Ñ.ˆDIä!×.Ñ.¨|Ó<ˆDŒLÜŸ™ t§|¡|Ó4ˆDŒIÜ×.Ñ.ˆŒÜ×+Ñ+ˆŒ Ü—m‘m D§L¡L¼/ÔJˆ rcó—t|«} |jj||¬«}|r|j|«|fS|j|«S#tj$r}t t |««d‚d}~wwxYw)z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)r%rÚ parse_tokensrÚ ParseErrorr ÚstrÚ compile_node)r5rr9Ú with_treerÚrootÚes rÚcompile_patternzPatternCompiler.compile_pattern7s€ä! %Ó(ˆð 7Ø—;‘;×+Ñ+¨F¸%Ð+Ó@ˆDñ Ø×$Ñ$ TÓ*¨DÐ0Ð 0à×$Ñ$ TÓ*Ð *øô ×Ñò 7Ü$¤S¨£VÓ,°$Ð 6ûð 7úsAÁA=Á#A8Á8A=có—|j|jjk(r|jd}|j|jjk(rx|jddd…Dcgc]}|j |«‘Œ}}t |«dk(r|dStj|Dcgc]}|g‘Œc}dd¬«}|j«S|j|jjk(rd|jDcgc]}|j |«‘Œ}}t |«dk(r|dStj|gdd¬«}|j«S|j|jjk(rC|j|jdd«}tj|«}|j«S|j|jjk(sJ‚d}|j} t | «dk\r4| djtj k(r| dj"}| dd} d} t | «dk\r0| dj|jj$k(r | d} | dd} |j| | «}| S| j|jj$k(sJ‚| j} | d} | jtj&k(rd} tj(}n¹| jtj*k(rd} tj(}n‰| jtj,k(rj| djtj.k(sJ‚t | «dvsJ‚|j1| d«x} }t | «d k(r|j1| d«}nJ‚| dk7s|dk7r*|j«}tj|gg| |¬«}|||_|j«Scc}wcc}wcc}w) zXCompiles a node, recursively. This is one big switch on the node type. rNér©ÚminÚmaxééÿÿÿÿ)rGérI)r r,ÚMatcherÚchildrenÚ Alternativesr=Úlenr ÚWildcardPatternÚoptimizeÚ AlternativeÚ NegatedUnitÚ compile_basicÚNegatedPatternÚUnitrÚEQUALr!ÚRepeaterÚSTARÚHUGEÚPLUSÚLBRACEÚRBRACEÚget_intÚname)r5ÚnodeÚchÚaltsÚaÚpÚunitsÚpatternr]ÚnodesÚrepeatrKÚchildrErFs rr=zPatternCompiler.compile_nodeCse€ð 9‰9˜Ÿ ™ ×)Ñ)Ò )Ø—=‘= Ñ#ˆDà 9‰9˜Ÿ ™ ×.Ñ.Ò .à48·M±MÁ#ÀAÀ#Ò4FÓGÑ4F¨bD×%Ñ% bÕ)Ð4FˆDÐGÜ4‹y˜AŠ~ؘA‘wÜ×&Ñ&±TÓ':±T°¨ª°TÑ':ÀÀqÔIˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø59·]²]ÓC±]¨rT×&Ñ& rÕ*°]ˆEÐCÜ5‹z˜QŠØ˜Q‘xÜ×&Ñ&¨ w°A¸1Ô=ˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø×(Ñ(¨¯©°q°rÐ):Ó;ˆGÜ×%Ñ% gÓ.ˆAØ—:‘:“<Ð ày‰y˜DŸI™IŸN™NÒ*Ð*Ð*àˆØ— ‘ ˆÜ ˆu‹:˜Š?˜u Q™xŸ}™}´· ± Ò;ؘ‘8—>‘>ˆDؘ!˜"IˆEØˆÜ ˆu‹:˜Š?˜u R™yŸ~™~°·±×1CÑ1CÒCؘ2‘YˆFؘ#˜2JˆEð×$Ñ$ U¨FÓ3ˆà Ñ Ø—;‘; $§)¡)×"4Ñ"4Ò4Ð 4Ð4Ø—‘ˆHؘQ‘KˆEØz‰zœUŸZ™ZÒ'ØÜ—k‘k‘Ø—‘œuŸz™zÒ)ØÜ—k‘k‘Ø—‘œuŸ|™|Ò+Ø ‘|×(Ñ(¬E¯L©LÒ8Ð8Ð8ܘH› ¨Ñ/Ð/Ð/Ø ŸL™L¨°!©Ó5Ð5cÜx“= AÒ%ØŸ,™, x°¡{Ó3‘CàuØaŠx˜3 !š8Ø!×*Ñ*Ó,Ü ×0Ñ0°7°)°À#È3ÔOà Р؈GŒLØ×ÑÓ!Ð!ùòsHùò(;ùòDsÁ*O1Â* O6Ã?O;cóÀ—t|«dk\sJ‚|d}|jtjk(rGt t j |j««}tjt|«|«S|jtjk(rÞ|j}|j«rB|tvrtd|z«‚|ddr td«‚tjt|«S|dk(rd}n8|jd«s't!|j"|d«}|€td|z«‚|ddr#|j%|dj&d«g}nd}tj(|«S|jdk(r|j%|d«S|jd k(r2|J‚|j%|d«}tj*|ggdd¬ «SJ|«‚) NrrzInvalid token: %rzCan't have details for tokenÚanyÚ_zInvalid symbol: %rÚ(Ú[rD)rMr rÚSTRINGr<rÚ evalStringr!r Ú LeafPatternÚ_type_of_literalÚNAMEÚisupperÚ TOKEN_MAPr Ú startswithÚgetattrr2r=rKÚ NodePatternrN)r5rerfr^r!r ÚcontentÚ subpatterns rrRzPatternCompiler.compile_basicŠs¶€ä5‹z˜QŠÐˆØQ‰xˆØ 9‰9œŸ ™ Ò $Üœ×+Ñ+¨D¯J©JÓ7Ó8ˆEÜ×%Ñ%Ô&6°uÓ&=¸uÓEÐ EØ Y‰Yœ%Ÿ*™*Ò $Ø—J‘JˆEØ}‰}ŒØ¤ Ñ)Ü,Ð-@À5Ñ-HÓIÐIؘ˜‘9Ü,Ð-KÓLÐLÜ×)Ñ)¬)°EÑ*:Ó;Ð;à˜E’>Ø‘DØ×)Ñ)¨#Ô.Ü" 4§;¡;°°tÓÐ !>Ø×*Ñ*¨5°©8Ó4ˆJÜ×)Ñ)¨J¨<¨.¸aÀQÔGÐ GØdÓˆurcój—|jtjk(sJ‚t|j«S©N)r rÚNUMBERÚintr!)r5r^s rr\zPatternCompiler.get_int­s&€Øy‰yœEŸL™LÒ(Ð(Ð(Ü4—:‘:‹Ðrrz)FF)rrrr7rAr=rRr\rrrr'r'&s„ó Kó +òE"óN!óFrr')rqrmr{ÚTOKENcó”—|dj«rtjS|tjvrtj|Sy)Nr)Úisalpharrqr Úopmap)r!s rrprp¹s:€Ø ˆQx×ÑÔÜz‰zÐØ ”'—-‘-Ñ Ü}‰}˜UÑ#Ð#àrcó—|\}}}}|s||jvrtj|||¬«Stj|||¬«S)z9Converts raw node information to a Node or Leaf instance.)Úcontext)Ú number2symbolr ÚNodeÚLeaf)r Ú raw_node_infor r!r‚rKs rr4r4ÂsF€à%2Ñ"€Dˆ%˜(Ù4˜7×0Ñ0Ñ0Ü{‰{˜4 °7Ô;Ð;ä{‰{˜4 °Ô8Ð8rcó4—t«j|«Srz)r'rA)rds rrArAËs€Ü Ó × ,Ñ ,¨WÓ 5Ð5r)Ú__doc__Ú __author__rÚpgen2rrrrrr Úr r Ú Exceptionr r%Úobjectr'rqrmr{rsrpr4rArrrÚrŽswðñð3€ ó ÷E×DõÝô ˜ô òôIfôIðZ—Z‘ZØ—|‘|Ø—|‘|Øñ € ò ò9ó6rlib2to3/__pycache__/refactor.cpython-312.pyc000064400000103023152462633570014556 0ustar00Ë T—çhskãó —dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z mZddlmZddlmZmZdd lmZdd „ZGd „d e«Zd „Zd„Zd„Zd„Zd„ZGd„de«ZGd„de«Z Gd„de«Z!Gd„de «Z"y)zÛRefactoring framework. Used as a main program, this can refactor any number of files and/or recursively descend down directories. Imported as a module, this provides infrastructure to write your own refactoring tool. z#Guido van Rossum éN)Úchainé)ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Ú btm_matchercóÌ—t|ggdg«}g}tj|j«D]0\}}}|j d«sŒ|r|dd}|j |«Œ2|S)zEReturn a sorted list of all available fix names in the given package.Ú*Úfix_éN)Ú __import__ÚpkgutilÚ iter_modulesÚ__path__Ú startswithÚappend)Ú fixer_pkgÚ remove_prefixÚpkgÚ fix_namesÚfinderÚnameÚispkgs ú)/usr/lib64/python3.12/lib2to3/refactor.pyÚget_all_fix_namesrsj€ä Y  B¨¨Ó .€CØ€IÜ&×3Ñ3°C·L±LÖAшeØ ?‰?˜6Õ "ÙØ˜A˜BxØ × Ñ ˜TÕ "ð Bð Ðócó —eZdZy)Ú _EveryNodeN©Ú__name__Ú __module__Ú __qualname__©rrr!r!+ó„Ørr!cóâ—t|tjtjf«r|j€t ‚|jhSt|tj «r'|jrt|j«St ‚t|tj«r>t«}|jD]#}|D]}|jt|««ŒŒ%|Std|z«‚)zf Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. z$Oh no! I don't understand pattern %s) Ú isinstancer Ú NodePatternÚ LeafPatternÚtyper!ÚNegatedPatternÚcontentÚ_get_head_typesÚWildcardPatternÚsetÚupdateÚ Exception)ÚpatÚrÚpÚxs rr/r//sÁ€ô#œ×*Ñ*¬F×,>Ñ,>Ð?Ô@ð 8‰8Ð ÜÐ Ø—‘ˆzÐä#”v×,Ñ,Ô-Ø ;Š;Ü" 3§;¡;Ó/Ð /ÜÐä#”v×-Ñ-Ô.ä ‹EˆØ—”ˆAÛØ—‘œ¨Ó+Õ,ñððˆä Ð:¸SÑAÓ BÐBrcóX—tjt«}g}|D]|}|jr2 t |j«}|D]}||j |«ŒŒA|j||jj |«Œl|j |«Œ~ttjjj«tjj«D]}||j|«Œt|«S#t $r|j |«YŒ wxYw)z^ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. )Ú collectionsÚ defaultdictÚlistÚpatternr/rr!Ú _accept_typerr Úpython_grammarÚ symbol2numberÚvaluesÚtokensÚextendÚdict)Ú fixer_listÚ head_nodesÚeveryÚfixerÚheadsÚ node_types rÚ_get_headnode_dictrJKs€ô×(Ñ(¬Ó.€JØ €EÛˆØ =Š=ð 8Ü'¨¯ © Ó6ó"'IؘyÑ)×0Ñ0°Õ7ñ"'ð×!Ñ!Ð-ؘ5×-Ñ-Ñ.×5Ñ5°eÕ<à— ‘ ˜UÕ#ðôœ6×0Ñ0×>Ñ>×EÑEÓGÜ!×0Ñ0×7Ñ7ö9ˆ à9Ñ×$Ñ$ UÕ+ð9ô  Ó Ðøôò $Ø— ‘ ˜U×#ð $ús®D Ä D)Ä(D)cóL—t|d«Dcgc] }|dz|z‘Œ c}Scc}w)zN Return the fully qualified names for fixers in the package pkg_name. FÚ.)r)Úpkg_nameÚfix_names rÚget_fixers_from_packagerOds=€ô .¨h¸Ô>ó @Ù>ð s‰N˜XÓ %Ø>ñ @ð@ùò @s!có—|S©Nr&)Úobjs rÚ _identityrSks€Ø €Jrcó|‡—d}tjtj|«j«Šˆfd„}t t jtjt jh«}t«} |«\}}||vrŒ|t jk(r|rnöd}nñ|t jk(rÝ|dk(rØ|«\}}|t jk7s|dk7rn¸|«\}}|t jk7s|dk7rn•|«\}}|t jk(r|dk(r |«\}}|t jk(rT|j|«|«\}}|t jk7s|dk7rn |«\}}|t jk(rŒRnnŒt |«S#t$r Yt |«SwxYw) NFcó.•—t‰«}|d|dfS)Nrr)Únext)ÚtokÚgens €rÚadvancez(_detect_future_features..advancersø€Ü3‹iˆØ1‰vs˜1‘vˆ~ÐrTÚfromÚ __future__ÚimportÚ(Ú,)rÚgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetrÚNEWLINEÚNLÚCOMMENTr1ÚSTRINGÚNAMEÚOPÚaddÚ StopIteration)ÚsourceÚhave_docstringrYÚignoreÚfeaturesÚtpÚvaluerXs @rÚ_detect_future_featuresrros‡ø€Ø€NÜ × "Ñ "¤2§;¡;¨vÓ#6×#?Ñ#?Ó @€CôôœŸ ™ ¤x§{¡{´E·M±MÐBÓ C€FÜ‹u€Hð ØÙ› ‰IˆBØV‰|ØØ”u—|‘|Ò#Ù!ØØ!%‘Ø”u—z‘zÒ! e¨v¢oÙ#›I‘ EØœŸ™Ò# u° Ò'<ØÙ#›I‘ EØœŸ™Ò# u°Ò'8ØÙ#›I‘ EØœŸ™’> e¨s¢lÙ '£ ‘IB˜ØœEŸJ™JÒ&Ø—L‘L Ô'Ù '£ ‘IB˜ØœUŸX™X’~¨°#ªØÙ '£ ‘IB˜ð œEŸJ™JÔ&ðñ3ô8 XÓ Ðøô ò Ø Ü XÓ Ðð úsÁ>DF%ÆF%Æ% F;Æ:F;có—eZdZdZy)Ú FixerErrorzA fixer could not be loaded.N)r#r$r%Ú__doc__r&rrrtrt—s„Ú&rrtcó¾—eZdZddddœZdZdZdd„Zd„Zd„Zd „Z d „Z d „Z dd „Z dd „Z d„Zdd„Zd„Zd d„Zd„Zd„Z d!d„Zd"d„ZdZdZd„Zd„Zd„Zd„Zd„Zd„Zy)#ÚRefactoringToolF)Úprint_functionÚ exec_functionÚwrite_unchanged_filesÚFixrNcóÜ—||_|xsg|_|jj«|_||jj |«t jj«|_|jdr|jjd=n&|jdr|jjd=|jjd«|_ g|_ tjd«|_g|_d|_t%j&|jt(j*|j¬ «|_|j-«\|_|_g|_t5j6«|_g|_g|_t?|j0|j.«D]~}|j@r|j8jC|«Œ+||j.vr|j:jE|«ŒU||j0vsŒd|j<jE|«Œ€tG|j:«|_$tG|j<«|_%y) zÑInitializer. Args: fixer_names: a list of fixers to import options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. NrxÚprintryÚexecrzrwF)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr2r r>ÚgrammarÚkeywordsÚgetrzÚerrorsÚloggingÚ getLoggerr€Ú fixer_logÚwroterÚDriverr rÚ get_fixersÚ pre_orderÚ post_orderÚfilesÚbmÚ BottomMatcherÚBMÚ bmi_pre_orderÚbmi_post_orderrÚ BM_compatibleÚ add_fixerrrJÚbmi_pre_order_headsÚbmi_post_order_heads)ÚselfÚ fixer_namesr…r‚rGs rÚ__init__zRefactoringTool.__init__¤sÛ€ð"ˆŒ Ø š BˆŒ Ø×,Ñ,×1Ñ1Ó3ˆŒ Ø Ð Ø L‰L× Ñ  Ô (Ü×,Ñ,×1Ñ1Ó3ˆŒ à <‰<Ð(Ò )Ø— ‘ ×%Ñ% gÑ.Ø \‰\˜/Ò *Ø— ‘ ×%Ñ% fÐ-ð &*§\¡\×%5Ñ%5Ð6MÓ%NˆÔ"؈Œ Ü×'Ñ'Ð(9Ó:ˆŒ ؈ŒØˆŒ Ü—m‘m D§L¡LÜ,2¯N©NØ+/¯;©;ô8ˆŒ ð+/¯/©/Ó*;Ñ'ˆŒ˜œðˆŒ ä×"Ñ"Ó$ˆŒØˆÔØ ˆÔä˜4Ÿ?™?¨D¯N©NÖ;ˆEØ×"Ò"Ø—‘×!Ñ! %Õ(ð˜$Ÿ.™.Ñ(Ø×"Ñ"×)Ñ)¨%Õ0ؘ$Ÿ/™/Ò)Ø×#Ñ#×*Ñ*¨5Õ1ð<ô$6°d×6HÑ6HÓ#IˆÔ Ü$6°t×7JÑ7JÓ$KˆÕ!rc óÚ—g}g}|jD]w}t|iidg«}|jdd«d}|j|j«r|t |j«d}|j d«}|jdj|Dcgc]}|j«‘Œc}«z} t||«} | |j|j«} | jr0|jd ur"||jvr|j!d |«Œ |j#d |«| j$d k(r|j'| «Œ@| j$d k(r|j'| «Œbtd| j$z«‚t)j*d«} |j-| ¬«|j-| ¬«||fScc}w#t$rtd|›d|›«d‚wxYw)aInspects the options to load the requested patterns and handlers. Returns: (pre_order, post_order), where pre_order is the list of fixers that want a pre-order AST traversal, and post_order is the list that want post-order traversal. r rLréÿÿÿÿNÚ_Úz Can't find TzSkipping optional fixer: %szAdding transformation: %sÚpreÚpostzIllegal fixer order: %rÚ run_order©Úkey)rrÚrsplitrÚ FILE_PREFIXÚlenÚsplitÚ CLASS_PREFIXÚjoinÚtitleÚgetattrÚAttributeErrorrtr…rŒr‚Ú log_messageÚ log_debugÚorderrÚoperatorÚ attrgetterÚsort) rœÚpre_order_fixersÚpost_order_fixersÚ fix_mod_pathÚmodrNÚpartsr6Ú class_nameÚ fix_classrGÚkey_funcs rrzRefactoringTool.get_fixersÛsÍ€ðÐØÐØ ŸKKˆLܘ\¨2¨r°C°5Ó9ˆCØ#×*Ñ*¨3°Ó2°2Ñ6ˆHØ×"Ñ" 4×#3Ñ#3Ô4Ø#¤C¨×(8Ñ(8Ó$9Ð$:Ð;Ø—N‘N 3Ó'ˆEØ×*Ñ*¨R¯W©WÉÓ5OÉÀA°a·g±gµiÈÑ5OÓ-PÑPˆJð XÜ# C¨Ó4 ñ˜dŸl™l¨D¯N©NÓ;ˆEØ~Š~ $§-¡-°tÑ";Ø ¨¯ © Ñ5Ø× Ñ Ð!>ÀÔIÙà N‰NÐ6¸Ô AØ{‰{˜eÒ#Ø ×'Ñ'¨Ö.Ø—‘ Ò&Ø!×(Ñ(¨Ö/ä Ð!:¸U¿[¹[Ñ!HÓIÐIð/(ô2×&Ñ& {Ó3ˆØ×Ñ (ÐÔ+Ø×Ñ 8ÐÔ,Ø Ð"3Ð4Ð4ùò-6Pøô"ò XÝ ²xÁÐ!LÓMÐSWÐWð XúsÂG Â8 GÇG*có—‚)zCalled when an error occurs.r&)rœÚmsgÚargsÚkwdss rÚ log_errorzRefactoringTool.log_errors€à rcóH—|r||z}|jj|«y)zHook to log a message.N)r€Úinfo©rœrÀrÁs rr±zRefactoringTool.log_messages €á ؘ‘*ˆCØ ‰ ×јÕrcóH—|r||z}|jj|«yrQ)r€ÚdebugrÆs rr²zRefactoringTool.log_debug s €Ù ؘ‘*ˆCØ ‰ ×ј#Õrcó—y)zTCalled with the old version, new version, and filename of a refactored file.Nr&)rœÚold_textÚnew_textÚfilenameÚequals rÚ print_outputzRefactoringTool.print_outputs€ð rcóž—|D]H}tjj|«r|j|||«Œ6|j |||«ŒJy)z)Refactor a list of files and directories.N)ÚosÚpathÚisdirÚ refactor_dirÚ refactor_file)rœÚitemsÚwriteÚ doctests_onlyÚ dir_or_files rÚrefactorzRefactoringTool.refactorsB€ó!ˆKÜw‰w}‰}˜[Ô)Ø×!Ñ! +¨u°mÕDà×"Ñ" ;°°}ÕEñ !rcó—tjdz}tj|«D]Ï\}}}|jd|«|j «|j «|D]m}|j d«rŒtj j|«d|k(sŒ;tj j||«} |j| ||«Œo|D cgc]} | j d«rŒ| ‘Œc} |ddŒÑycc} w)zÄDescends down a directory and refactor every Python file found. Python files are assumed to have a .py extension. Files and subdirectories starting with '.' are skipped. ÚpyzDescending into %srLrN) rÐÚextsepÚwalkr²r¶rrÑÚsplitextr­rÔ) rœÚdir_namerÖr×Úpy_extÚdirpathÚdirnamesÚ filenamesrÚfullnameÚdns rrÓzRefactoringTool.refactor_dir sÑ€ô—‘˜TÑ!ˆÜ,.¯G©G°HÖ,=Ñ (ˆGX˜yØ N‰NÐ/°Ô 9Ø M‰MŒOØ N‰NÔ Û!ØŸ™¨Õ,Ü—G‘G×$Ñ$ TÓ*¨1Ñ-°Ó7Ü!Ÿw™wŸ|™|¨G°TÓ:HØ×&Ñ& x°¸ ÕFð "ñ )1ÓK© "¸¿ ¹ ÀcÕ8Jš2¨ÑKˆH‘Q‰Kñ->ùòLs ÃC<Ã/C<có€— t|d«} tj|j «d}|j «tj|d|d¬«5}|j«|fcddd«S#t$r}|jd||«Yd}~yd}~wwxYw#|j «wxYw#1swYyxYw) zG Do our best to decode a Python source file correctly. ÚrbzCan't open %s: %sN©NNrr5r¢©ÚencodingÚnewline) ÚopenÚOSErrorrÃrÚdetect_encodingrbÚcloser`Úread)rœrÌÚfÚerrrês rÚ_read_python_sourcez#RefactoringTool._read_python_source4sž€ð ÜX˜tÓ$ˆAð Ü×/Ñ/°· ± Ó;¸AÑ>ˆHà G‰GŒIÜ W‰WX˜s¨X¸rÕ BÀaØ—6‘6“8˜XÐ%÷CÑ Bøôò Ø N‰NÐ.°¸#Ô >Üûð ûð G‰GIúß BÐ Bús.‚ A6"BÁB4Á6 BÁ?BÂBÂB1Â4B=có¼—|j|«\}}|€y|dz }|r^|jd|«|j||«}|js||k7r|j |||||«y|jd|«y|j ||«}|js|r.|j r"|j t|«dd|||¬«y|jd|«y)zRefactors a file.NÚ zRefactoring doctests in %szNo doctest changes in %sr )rÖrêzNo changes in %s)rór²Úrefactor_docstringrzÚprocessed_fileÚrefactor_stringÚ was_changedÚstr)rœrÌrÖr×ÚinputrêÚoutputÚtrees rrÔzRefactoringTool.refactor_fileDsÜ€à×2Ñ2°8Ó<‰ˆˆxØ ˆ=à Ø ‰ ˆÙ Ø N‰NÐ7¸Ô BØ×,Ñ,¨U°HÓ=ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨H°e¸UÀHÕMà—‘Ð9¸8ÕDà×'Ñ'¨¨xÓ8ˆDØ×)Ò)©d°t×7GÒ7Gà×#Ñ#¤C¨£I¨c¨r N°HØ*/¸(ð$õDð—‘Ð1°8Õã à"&§,¡,ˆDK‰KÕ ûð  ûð #'§,¡,ˆDK‰KÕ ús)°B C*Â(C%ÃC-Ã%C*Ã*C-Ã-D có¬—tjj«}|rZ|jd«|j |d«}|j s||k7r|j |d|«y|jd«y|j|d«}|j s|r)|jr|j t|«d|«y|jd«y)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) ÚsysÚstdinrðr²rörzr÷rørùrú)rœr×rûrürýs rÚrefactor_stdinzRefactoringTool.refactor_stdinvsª€Ü— ‘ —‘Ó ˆÙ Ø N‰NÐ:Ô ;Ø×,Ñ,¨U°IÓ>ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨I°uÕ=à—‘Ð<Õ=à×'Ñ'¨¨yÓ9ˆDØ×)Ò)©d°t×7GÒ7GØ×#Ñ#¤C¨£I¨y¸%Õ@à—‘Ð4Õ5rcóà—t|j|j«D]}|j||«Œ|j |j |j««|j |j |j««|jj|j««}t|j««rÎ|jjD]™}||vsŒ ||sŒ||jtjj d¬«|j"r-||jtjj$¬«t'||«D]}|||vr||j)|« t+|«|j.r||j.vrŒF|j1|«}|sŒZ|j3||«}|€Œo|j5|«|j«D]0}|j.sg|_|j.j7|«Œ2|jj|j««}|D]"} | |vrg|| <|| j9|| «Œ$ŒŒœt|j««rŒÎt|j|j«D]}|j;||«Œ|j<S#t,$rYŒƒwxYw)aÏRefactors a parse tree (modifying the tree in place). For compatible patterns the bottom matcher module is used. Otherwise the tree is traversed node-to-node for matches. Args: tree: a pytree.Node instance representing the root of the tree to be refactored. name: a human-readable name for this tree. Returns: True if the tree was modified, False otherwise. T)r§Úreverser¦)rrr‘Ú start_treeÚ traverse_byršr›r•ÚrunÚleavesÚanyr@rr¶r ÚBaseÚdepthÚkeep_line_orderÚ get_linenor;ÚremoverÚ ValueErrorÚfixers_appliedÚmatchÚ transformÚreplacerrBÚ finish_treerù) rœrýrrGÚ match_setÚnodeÚresultsÚnewÚ new_matchesÚfxrs rrzRefactoringTool.refactor_tree†sv€ô ˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜T 4Õ (ð<ð ×ј×1Ñ1°4·>±>Ó3CÔDØ ×ј×2Ñ2°D·O±OÓ4EÔFð—G‘G—K‘K § ¡ £ Ó.ˆ ä)×"Ñ"Ó$Õ%ØŸ™ŸØ˜IÒ%¨)°EÓ*:à˜eÑ$×)Ñ)¬f¯k©k×.?Ñ.?ÈÐ)ÔNà×,Ò,ð" %Ñ(×-Ñ-´&·+±+×2HÑ2HÐ-ÔIä $ Y¨uÑ%5× 6˜Ø 9¨UÑ#3Ñ3Ø% eÑ,×3Ñ3°DÔ9ð%Ü% dœOð  ×.Ò.°5¸D×Ò+>Ø>@¨Ô(;Ø$(×$7Ñ$7×$>Ñ$>¸uÕ$Eð -=ð/3¯g©g¯k©k¸#¿*¹*»,Ó.G  Û+6 CØ+.°)Ñ+;Ø79¨ °#©à$-¨c¡N×$9Ñ$9¸+ÀcÑ:JÕ$Kò ,7òA!7ð(ô)×"Ñ"Ó$Ö%ôb˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜d DÕ )ð<à×ÑÐøôE *ò%ò%ð%úsÆ K Ë K-Ë,K-có¸—|sy|D]R}||jD]>}|j|«}|sŒ|j||«}|€Œ,|j|«|}Œ@ŒTy)aTraverse an AST, applying a set of fixers to each node. This is a helper method for refactor_tree(). Args: fixers: a list of fixer instances. traversal: a generator that yields AST nodes. Returns: None N)r,rrr)rœrÚ traversalrrGrrs rr zRefactoringTool.traverse_byÕs^€ñØ ÛˆDØ § ¡ Ô*ØŸ+™+ dÓ+ÚØŸ/™/¨$°Ó8Cؑ؟ ™  SÔ)Ø"™ñ +ñrcó2—|jj|«|€|j|«d}|€y||k(}|j||||«|r|j d|«|j sy|r|j ||||«y|j d|«y)zR Called when a file has been refactored and there may be changes. NrzNo changes to %szNot writing changes to %s)r’rrórÎr²rzÚ write_file)rœrËrÌrÊrÖrêrÍs rr÷zRefactoringTool.processed_fileìsš€ð ‰ ×ј(Ô#Ø Ð Ø×/Ñ/°Ó9¸!Ñ<ˆHØÐØØ˜HÑ$ˆØ ×ј( H¨h¸Ô>Ù Ø N‰NÐ-¨xÔ 8Ø×-Ò-ØÙ Ø O‰O˜H h°¸(Õ Cà N‰NÐ6¸Õ Arcó`— tj|d|d¬«}|5 |j |«ddd«|j d|«d|_y#t$r}|jd||«Yd}~yd}~wwxYw#t$r}|jd||«Yd}~Œld}~wwxYw#1swYŒuxYw) zÑWrites a string to a file. It first shows a unified diff between the old text and the new text, and then rewrites the file; the latter is only done if the write option is set. Úwr¢rézCan't create %s: %sNzCan't write %s: %szWrote changes to %sT)r`rìrírÃrÖr²r)rœrËrÌrÊrêÚfpròs rr$zRefactoringTool.write_files¤€ð Ü—‘˜ 3°À2ÔFˆBò ð DØ—‘˜Ô"÷ð ‰Ð,¨hÔ7؈ øôò Ø N‰NÐ0°(¸CÔ @Ü ûð ûôò DØ—‘Ð3°X¸s×CÑCûð Dú÷ˆRúsE‚AB$ŸA;Á A8ÁA3Á3A8Á; B!ÂBÂB$ÂB!Â!B$Â$B-z>>> z... c óÄ—g}d}d}d}d}|jd¬«D] }|dz }|j«j|j«rK|#|j |j ||||««|}|g}|j |j«} |d| }Œ}|S|j||jz«s#|||jj«zdzk(r|j|«ŒÒ|#|j |j ||||««d}d}|j|«Œ|#|j |j ||||««dj|«S)aËRefactors a docstring, looking for doctests. This returns a modified version of the input string. It looks for doctests, which start with a ">>>" prompt, and may be continued with "..." prompts, as long as the "..." is indented the same as the ">>>". (Unfortunately we can't use the doctest module's parser, since, like most parsers, it is not geared towards preserving the original source.) NrT©Úkeependsrrõr¢) Ú splitlinesÚlstriprÚPS1rBÚrefactor_doctestÚfindÚPS2Úrstriprr­) rœrûrÌÚresultÚblockÚ block_linenoÚindentÚlinenoÚlineÚis rröz"RefactoringTool.refactor_docstringsg€ðˆØˆØˆ ؈؈Ø×$Ñ$¨dÐ$×3ˆDØ a‰KˆFØ{‰{‹}×'Ñ'¨¯©Ô1ØÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKà% ؘؗI‘I˜dŸh™hÓ'ؘb˜q˜‘ØÐ$Ø—?‘? 6¨D¯H©HÑ#4Ô5ؘ6 D§H¡H§O¡OÓ$5Ñ5¸Ñ<Ò<Ø— ‘ ˜TÕ"àÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKàØØ— ‘ ˜dÖ#ð)4ð* Ð Ø M‰M˜$×/Ñ/°°|Ø06¸óBô Càw‰wv‹ÐrcóÌ— |j|||«}|j||«r¦t|«jd¬«}|d|dz ||dz d}} | dg|dz zk(sJ| «‚|djd«s |dxxdz cc<||jz|j!d «zg}|r#||Dcgc]}||j"z|z‘Œc}z }|S#t$r†}|jjtj «r(|D]#}|j d|jd««Œ%|jd|||jj|«|cYd}~Sd}~wwxYwcc}w) zÞRefactors one doctest. A doctest is given as a block of lines, the first of which starts with ">>>" (possibly indented), while the remaining lines start with "..." (identically indented). z Source: %srõz+Can't parse docstring in %s line %s: %s: %sNTr)rr r)Ú parse_blockr3r€Ú isEnabledForrŠÚDEBUGr²r1rÃrr#rrúr+Úendswithr-Úpopr0) rœr3r6r5rÌrýròr7rÚclippeds rr.z RefactoringTool.refactor_doctestDsa€ð Ø×#Ñ# E¨6°6Ó:ˆDð × Ñ ˜d HÔ -Üd“)×&Ñ&°Ð&Ó5ˆCà˜y  q¡˜>¨3¨v°a©x¨y¨>SˆGؘt˜f¨¨q©Ñ1Ò1Ð :°7Ó :Ð1Ør‘7×#Ñ# DÔ)ØB“˜4‘“ؘdŸh™hÑ&¨¯©°«Ñ3Ð4ˆEÙØ¹sÓC¹s°t˜& 4§8¡8Ñ+¨dÓ2¸sÑCÑC؈ øô#ò Ø{‰{×'Ñ'¬¯ © Ô6Û!DØ—N‘N <°·±¸TÓ1BÕCð"à N‰NÐHØ# V¨S¯]©]×-CÑ-CÀSô JàLûð  üò Ds$‚CÂ/E!à EÃA;EÅEÅEcóX—|jrd}nd}|js|jd|«n4|jd|«|jD]}|j|«Œ|jr3|jd«|jD]}|j|«Œ|jr{t |j«dk(r|jd«n%|jdt |j««|jD]\}}}|j|g|¢­i|¤ŽŒyy) NÚwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)rr’r±rŒr‰rª)rœrAÚfileÚmessagerÀrÁrÂs rÚ summarizezRefactoringTool.summarizeasþ€Ø :Š:؉DàˆDØzŠzØ × Ñ Ð4°dÕ ;à × Ñ Ð6¸Ô =ØŸ œ Ø× Ñ  Õ&ð#à >Š>Ø × Ñ ÐCÔ DØŸ>œ>Ø× Ñ  Õ)ð*à ;Š;Ü4—;‘;Ó 1Ò$Ø× Ñ Ð!5Õ6à× Ñ Ð!8¼#¸d¿k¹kÓ:JÔKØ#'§;¤;‘T˜4Ø × Ñ  Ð4 tÒ4¨tÓ4ñ$/ð rcó|—|jj|j|||««}t«|_|S)z³Parses a block into a tree. This is necessary to get correct line number / offset information in the parser diagnostics and embedded into the parse tree. )rÚ parse_tokensÚ wrap_toksrcr)rœr3r6r5rýs rr:zRefactoringTool.parse_blockxs4€ð {‰{×'Ñ'¨¯©°u¸fÀfÓ(MÓNˆÜ(›{ˆÔ؈ rc#óÊK—tj|j||«j«}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| f–—Œ-y­w)z;Wraps a tokenize stream to systematically modify start/end.rN)rr_Ú gen_linesÚ__next__) rœr3r6r5rAr,rqÚline0Úcol0Úline1Úcol1Ú line_texts rrGzRefactoringTool.wrap_toks‚s}èø€ä×)Ñ)¨$¯.©.¸ÀÓ*G×*PÑ*PÓQˆÛDJÑ @ˆD%™˜% © ¨°°yØ V˜a‘ZÑ ˆEØ V˜a‘ZÑ ˆEð ˜  t˜}¨u°d¨m¸YÐFÓ FñEKùs‚A!A#c#óK—||jz}||jz}|}|D]R}|j|«r|t|«d–—n,||j «dzk(rd–—nt d|›d|›«‚|}ŒT d–—Œ­w)z–Generates lines as expected by tokenize from a list of lines. This strips the first len(indent + self.PS1) characters off each line. Nrõzline=z , prefix=r¢)r-r0rrªr1ÚAssertionError)rœr3r5Úprefix1Úprefix2Úprefixr7s rrIzRefactoringTool.gen_linessŒèø€ð ˜4Ÿ8™8Ñ#ˆØ˜4Ÿ8™8Ñ#ˆØˆÛˆD؉˜vÔ&Øœ3˜v›;˜<Ð(Ó(ؘŸ™›¨4Ñ/Ò/Ø“ å$ºTÁ6Ð%JÓKÐK؉FððØŠHðùs‚A>Brè)FF)F)NFNrQ)r#r$r%rƒr¬r©ržrrÃr±r²rÎrÙrÓrórÔrørrr r÷r$r-r0rör.rDr:rGrIr&rrrwrw›s­„à+0Ø).Ø27ñ9Ðð€LØ€Kó3Lòn&5òPòò ò  ó FóLò(&ó =ò.ó66ò M ò^#ð.GLØ $óBó*ð* €CØ €Cò)òVò:5ò.ò Górrwcó —eZdZy)ÚMultiprocessingUnsupportedNr"r&rrrVrV¤r'rrVcóB‡—eZdZˆfd„Z dˆfd„ Zˆfd„Zˆfd„ZˆxZS)ÚMultiprocessRefactoringToolcóH•—tt| |i|¤Žd|_d|_yrQ)ÚsuperrXržÚqueueÚ output_lock©rœrÁÚkwargsrs €rržz$MultiprocessRefactoringTool.__init__ªs'ø€Ü Ô)¨4Ñ9¸4ÐJÀ6ÒJ؈Œ ؈ÕrcóŽ•—|dk(rtt| |||«S ddl}|j td«‚|j«|_|j«|_ t|«Dcgc]}|j|j¬«‘Œ }} |D]}|j«Œtt| |||«|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_y#t$rt ‚wxYwcc}w#|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_wxYw)Nrrz already doing multiple processes)Útarget)rZrXrÙÚmultiprocessingÚ ImportErrorrVr[Ú RuntimeErrorÚ JoinableQueueÚLockr\ÚrangeÚProcessÚ_childÚstartr­ÚputÚis_alive) rœrÕrÖr×Ú num_processesrar8Ú processesr6rs €rrÙz$MultiprocessRefactoringTool.refactor¯s”ø€à ˜AÒ ÜÔ4°dÑDØu˜mó-ð -ð -Û "ð :‰:Ð !ÜÐAÓBÐ BØ$×2Ñ2Ó4ˆŒ Ø*×/Ñ/Ó1ˆÔä# MÔ2ó4Ù2˜ð%×,Ñ,°D·K±KÐ,Õ@Ø2ð ð4ð ÛØ—‘• ðä Ô-¨tÑ =¸eÀUØ>Kô Mð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJøô)ò -Ü,Ð ,ð -üò 4øð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJús$D6Á/#E Â,EÄ6EÅAGÆ*Gcó•—|jj«}|Q|\}} tt||i|¤Ž|jj «|jj«}|ŒPyy#|jj «wxYwrQ)r[rˆrZrXrÔÚ task_done)rœÚtaskrÁr^rs €rrhz"MultiprocessRefactoringTool._childÌs€ø€Øz‰z~‰~ÓˆØÐ؉LˆD&ð 'ÜÔ1°4ÑFØð%Ø#ò%ð— ‘ ×$Ñ$Ô&Ø—:‘:—>‘>Ó#ˆDðÓøð — ‘ ×$Ñ$Õ&ús ¤A0Á0B có~•—|j|jj||f«ytt||i|¤ŽSrQ)r[rjrZrXrÔr]s €rrÔz)MultiprocessRefactoringTool.refactor_file×sAø€Ø :‰:Ð !Ø J‰JN‰N˜D &˜>Õ *äÔ4°dÑIØð!Øñ!ð !r)FFr)r#r$r%ržrÙrhrÔÚ __classcell__)rs@rrXrX¨s$ø„ô ð :?Ø õô: $÷!ð!rrX)T)#ruÚ __author__r`rÐrrrŠr´r9Ú itertoolsrÚpgen2rrrÚ fixer_utilrr¢r r r r“rr3r!r/rJrOrSrrrtÚobjectrwrVrXr&rrÚrxsœðñð3€ ó Û ÛÛ ÛÛÛÝ÷+Ñ*Ý!ßÝó ô ô òCò8ò2@òò%ôP'ô'ôFfôFôR  ô ô4! /õ4!rlib2to3/__pycache__/fixer_util.cpython-312.pyc000064400000052440152462633570015131 0ustar00Ë T—çhf;ãó¸—dZddlmZddlmZmZddlmZddl m Z d„Z d„Z d„Z d „Zd-d „Zd „Zd „Zd„Ze «e «fd„Zd.d„Zd„Zd„Zd-d„Zd„Zd-d„Zd-d„Zd„Zd„Zd„Zd„Zd„Zhd£Z d„Z!da"da#d a$d!a%d"„Z&d#„Z'd$„Z(d%„Z)d&„Z*d'„Z+d(„Z,d)„Z-ej\ej^hZ0d-d*„Z1ej^ej\ejdhZ3d+„Z4d-d,„Z5y )/z1Utility functions, node construction macros, etc.é)Útoken)ÚLeafÚNode)Úpython_symbols)Úpatcompcól—ttj|ttj d«|g«S)NÚ=)rÚsymsÚargumentrrÚEQUAL)ÚkeywordÚvalues ú+/usr/lib64/python3.12/lib2to3/fixer_util.pyÚ KeywordArgrs*€Ü ”— ‘ Øœ$œuŸ{™{¨CÓ0°%Ð8ó :ð:ócó6—ttjd«S)NÚ()rrÚLPAR©rrÚLParenró€Ü ”— ‘ ˜CÓ Ð rcó6—ttjd«S)NÚ))rrÚRPARrrrÚRParenrrrc óÒ—t|t«s|g}t|t«s d|_|g}ttj |t tjdd¬«gz|z«S)zBuild an assignment statementÚ r ©Úprefix) Ú isinstanceÚlistrrr Úatomrrr )ÚtargetÚsources rÚAssignr%s]€ä fœdÔ #ØˆÜ fœdÔ #؈Œ Øˆä ”— ‘ Øœ$œuŸ{™{¨C¸Ô<Ð=Ñ=ÀÑFó HðHrNcó:—ttj||¬«S)zReturn a NAME leafr)rrÚNAME)Únamers rÚNamer)$s€ä ”— ‘ ˜D¨Ô 0Ð0rcóN—|ttjt«|g«gS)zA node tuple for obj.attr)rr ÚtrailerÚDot)ÚobjÚattrs rÚAttrr/(s€à ””d—l‘l¤S£U¨D MÓ2Ð 3Ð3rcó6—ttjd«S)z A comma leafÚ,)rrÚCOMMArrrÚCommar3,s€ä ”— ‘ ˜SÓ !Ð!rcó6—ttjd«S)zA period (.) leafÚ.)rrÚDOTrrrr,r,0s€ä ”— ‘ ˜3Ó ÐrcóΗttj|j«|j«g«}|r*|j dttj |««|S)z-A parenthesised argument list, used by Call()r)rr r+ÚcloneÚ insert_childÚarglist)ÚargsÚlparenÚrparenÚnodes rÚArgListr?4sF€ä ”— ‘ ˜vŸ|™|›~¨v¯|©|«~Ð>Ó ?€DÙ Ø ×ј!œT¤$§,¡,°Ó5Ô6Ø €Krcób—ttj|t|«g«}|||_|S)zA function call)rr Úpowerr?r)Ú func_namer;rr>s rÚCallrC;s-€ä ”— ‘ ˜Y¬°« Ð6Ó 7€DØ ÐØˆŒ Ø €Krcó6—ttjd«S)zA newline literalÚ ©rrÚNEWLINErrrÚNewlinerHBs€ä ”— ‘ ˜tÓ $Ð$rcó6—ttjd«S)z A blank lineÚrFrrrÚ BlankLinerKFs€ä ”— ‘ ˜rÓ "Ð"rcó:—ttj||¬«S)Nr)rrÚNUMBER)Únrs rÚNumberrOJs€Ü ”— ‘ ˜a¨Ô /Ð/rc óœ—ttjttj d«|ttj d«g«S)zA numeric or string subscriptÚ[Ú])rr r+rrÚLBRACEÚRBRACE)Ú index_nodes rÚ SubscriptrVMs8€ä ”— ‘ œt¤E§L¡L°#Ó6Ø)Ü#¤E§L¡L°#Ó6ð8ó 9ð9rcó:—ttj||¬«S)z A string leafr)rrÚSTRING)Ústringrs rÚStringrZSs€ä ”— ‘ ˜f¨VÔ 4Ð4rc óh—d|_d|_d|_ttjd«}d|_ttjd«}d|_||||g}|rSd|_ttjd«}d|_|j t t j||g««t t j|t t j|«g«}t t jttjd«|ttjd«g«S)zuA list comprehension of the form [xp for fp in it if test]. If test is None, the "if test" part is omitted. rJrÚforÚinÚifrQrR) rrrr'Úappendrr Úcomp_ifÚ listmakerÚcomp_forr"rSrT) ÚxpÚfpÚitÚtestÚfor_leafÚin_leafÚ inner_argsÚif_leafÚinners rÚListComprlWsê€ð €B„IØ€B„IØ€B„IÜ”E—J‘J Ó&€HØ€H„OÜ”5—:‘:˜tÓ$€GØ€G„NؘB ¨Ð,€J٠؈Œ Ü”u—z‘z 4Ó(ˆØˆŒØ×Ñœ$œtŸ|™|¨g°t¨_Ó=Ô>Ü ”—‘ "¤d¬4¯=©=¸*Ó&EÐ!FÓ G€EÜ ”— ‘ ÜœUŸ\™\¨3Ó/ØÜœUŸ\™\¨3Ó/ð1ó 2ð2rcó<—|D]}|j«Œttjd«ttj|d¬«ttjdd¬«t t j |«g}t t j|«}|S)zO Return an import statement in the form: from package import name_leafsÚfromrrÚimport)Úremoverrr'rr Úimport_as_namesÚ import_from)Ú package_nameÚ name_leafsÚleafÚchildrenÚimps rÚ FromImportrxosw€óˆà ‰ ðô”U—Z‘Z Ó(Ü”U—Z‘Z °cÔ:Ü”U—Z‘Z °#Ô6Ü”T×)Ñ)¨:Ó6ð8€Hô Œt×Ñ Ó *€CØ €Jrc óN—|dj«}|jtjk(r|j«}n)t tj|j«g«}|d}|r|Dcgc]}|j«‘Œ}}t tj t t|d«t|d««t tj|dj«||dj«g«gz|z«}|j|_ |Scc}w)zfReturns an import statement and calls a method of the module: import module module.name()r-ÚafterérÚlparÚrpar) r8Útyper r:rrAr/r)r+r)r>ÚresultsÚnamesr-Ú newarglistrzrNÚnews rÚ ImportAndCallrƒ‚sû€ð %‰.× Ñ Ó €CØ ‡xx”4—<‘<ÒØ—Y‘Y“[‰ äœ$Ÿ,™,¨¯©«¨ Ó6ˆ Ø GÑ €EÙ Ù$)Ó*¡E˜q—‘• EˆÐ*Ü Œtz‰zÜ”D˜˜q™“N¤D¨¨q©£NÓ3Ü”T—\‘\ؘf‘o×+Ñ+Ó-Ø Ø˜f‘o×+Ñ+Ó-ð/ó0ð1ñ1ð49ñ 9ó :€Cð —‘€C„JØ €Jùò+sÁ6D"cóì—t|t«r"|jt«t «gk(ryt|t«xr±t |j«dk(xr—t|jdt «xrxt|jdt«xrYt|jdt «xr:|jdjdk(xr|jdjdk(S)z(Does the node represent a tuple literal?Tér{rérr)r rrvrrÚlenrr©r>s rÚis_tupler‰žsЀä$œÔ $§-¡-´F³H¼f»hÐ3GÒ"GØÜ tœTÓ "ò .ÜD—M‘MÓ" aÑ'ò .ä˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò .ô˜4Ÿ=™=¨Ñ+¬TÓ2ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  .ð — ‘ ˜aÑ ×&Ñ&¨#Ñ-ð /rcóJ—t|t«xr’t|j«dkDxrxt|jdt«xrYt|jdt«xr:|jdj dk(xr|jdj dk(S)z'Does the node represent a list literal?rr{éÿÿÿÿrQrR)r rr‡rvrrrˆs rÚis_listrŒªs•€ä tœTÓ "ò /ÜD—M‘MÓ" QÑ&ò /ä˜4Ÿ=™=¨Ñ+¬TÓ2ò /ô˜4Ÿ=™=¨Ñ,¬dÓ3ò /ð— ‘ ˜aÑ ×&Ñ&¨#Ñ-ò  /ð — ‘ ˜bÑ!×'Ñ'¨3Ñ.ð 0rcó\—ttjt«|t «g«S©N)rr r"rrrˆs rÚ parenthesizer¸s€Ü ”— ‘ œF›H d¬F«HÐ5Ó 6Ð6r> ÚallÚanyÚmaxÚminÚsetÚsumr!ÚtupleÚsortedÚ enumeratec#óPK—t||«}|r|–—t||«}|rŒyy­w)alFollow an attribute chain. If you have a chain of objects where a.foo -> b, b.foo-> c, etc, use this to iterate over all objects in the chain. Iteration is terminated by getattr(x, attr) is None. Args: obj: the starting object attr: the name of the chaining attribute Yields: Each successive object in the chain. N)Úgetattr)r-r.Únexts rÚ attr_chainrœ¿s-èø€ô 3˜Ó €DÙ ØŠ Üt˜TÓ"ˆô ùs‚!&¤&zefor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > z³ power< ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' | 'any' | 'all' | 'enumerate' | (any* trailer< '.' 'join' >) ) trailer< '(' node=any ')' > any* > z` power< ( 'sorted' | 'enumerate' ) trailer< '(' arglist ')' > any* > FcóD—tsMtjt«atjt«atjt «adattt g}t |t|d««D]#\}}i}|j||«sŒ|d|usŒ#yy)a Returns true if node is in an environment where all that is required of it is being iterable (ie, it doesn't matter if it returns a list or an iterator). See test_map_nochange in test_fixers.py for some examples and tests. TÚparentr>F) Ú pats_builtrÚcompile_patternÚp0Úp1Úp2ÚziprœÚmatch)r>ÚpatternsÚpatternržrs rÚin_special_contextr¨åsŠ€õ Ü × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆÜ × $Ñ $¤RÓ (ˆØˆ Ü”Bœˆ|€Hܘx¬°D¸(Ó)CÖD‰ˆØˆØ =‰=˜ Õ )¨g°f©oÀÒ.EÙðEð rcó—|j}||jtjk(ry|j}|jt j t jfvry|jt jk(r|jd|ury|jt jk(sM|jt jk(r1||jtjk(s|jd|uryy)zG Check that something isn't an attribute or function name etc. Fr{T) Ú prev_siblingr~rr6ržr ÚfuncdefÚclassdefÚ expr_stmtrvÚ parametersÚ typedargslistr2)r>Úprevržs rÚis_probably_builtinr±øs¿€ð × Ñ €DØ Ð˜DŸI™I¬¯©Ò2àØ [‰[€FØ ‡{{”t—|‘|¤T§]¡]Ð3Ñ3ØØ ‡{{”d—n‘nÒ$¨¯©¸Ñ);¸tÑ)CàØ ‡{{”d—o‘oÒ%Ø [‰[œD×.Ñ.Ò .Ø Ð  $§)¡)¬u¯{©{Ò":Ø O‰O˜AÑ  $Ñ &ðØ rcó—|||jtjk(rPt|j«dkDr8|jd}|jt j k(r |jS|j}|Œ|y)zFind the indentation of *node*.r†rrJ) r~r Úsuiter‡rvrÚINDENTrrž)r>Úindents rÚfind_indentationr¶sf€à Ð Ø 9‰9œŸ ™ Ò "¤s¨4¯=©=Ó'9¸AÒ'=Ø—]‘] 1Ñ%ˆFØ{‰{œeŸl™lÒ*Ø—|‘|Ð#Ø{‰{ˆð Ñ ð rcóЗ|jtjk(r|S|j«}|jdc}|_t tj|g«}||_|SrŽ)r~r r³r8ržr)r>ržr³s rÚ make_suiter¸sR€Ø ‡yy”D—J‘JÒØˆ Ø :‰:‹<€DØŸ+™+ tЀFˆDŒKÜ ”—‘˜d˜VÓ $€EØ€E„LØ €Lrcó®—|jtjk7r7|j}|s t d«‚|jtjk7rŒ7|S)zFind the top level namespace.z,root found before file_input node was found.)r~r Ú file_inputržÚ ValueErrorrˆs rÚ find_rootr¼&sE€ð )‰)”t—‘Ò &Ø{‰{ˆÙÜÐKÓLÐ Lð )‰)”t—‘Ó &ð €KrcóD—t|t|«|«}t|«S)zÞ Returns true if name is imported from package at the top level of the tree which node belongs to. To cover the case of an import like 'import foo', use None for the package and 'foo' for the name. )Ú find_bindingr¼Úbool)Úpackager(r>Úbindings rÚdoes_tree_importrÂ/s €ô ˜4¤¨4£°'Ó:€GÜ ‹=ÐrcóZ—|jtjtjfvS)z0Returns true if the node is an import statement.)r~r Ú import_namerrrˆs rÚ is_importrÅ7s"€à 9‰9œ×)Ñ)¬4×+;Ñ+;Ð<Ð <Ð\}}||«sŒt|j|d«D]\}}||«rŒn||z}n|dk(ryt|j«D]a\}}|jt j k(sŒ$|jsŒ1|jdjtjk(sŒ\|dz}n|€Ott jttjd«ttj|d¬«g«} n't|ttj|d¬«g«} | t«g} |j|tt j | ««y)z\ Works like `does_tree_import` but adds an import statement if it was not imported. cóŒ—|jtjk(xr&|jxrt |jd«S)Nr{)r~r Ú simple_stmtrvrÅrˆs rÚis_import_stmtz$touch_import..is_import_stmt>s:€Ø— ‘ œT×-Ñ-Ñ-ò,°$·-±-ò,ܘ$Ÿ-™-¨Ñ*Ó+ð -rNr{rrorr)r¼rÂr˜rvr~r rÈrrXrrÄrr'rxrHr9) rÀr(r>rÉÚrootÚ insert_posÚoffsetÚidxÚnode2Úimport_rvs rÚ touch_importrÐ;sh€ò-ô T‹?€D䘠 tÔ,ØðЀJܘtŸ}™}Ö-‰ ˆˆTÙ˜dÔ#Ø Ü& t§}¡}°S°TÐ':Ö;‰MˆFEÙ! %Õ(Ùð<ð˜6‘\ˆ Ù ð.ðQ‚Ü" 4§=¡=Ö1‰IˆCØ— ‘ œT×-Ñ-Ó-°$·-³-Ø}‰}˜QÑ×$Ñ$¬¯ © Ó4Ø  1™W Ùð 2ð €Ü”t×'Ñ'Ü ”—‘˜XÓ &Ü ”—‘˜T¨#Ô .ð* ó ‰ô ˜W¤t¬E¯J©J¸ÀSÔ'IÐ&JÓKˆàœ›Ð#€HØ×Ñj¤$¤t×'7Ñ'7¸Ó"BÕCrc óœ—|jD]<}d}|jtjk(rGt ||jd«r|cSt |t |jd«|«}|r¾|}nº|jtjtjfvr*t |t |jd«|«}|rh|}nd|jtjk(r£t |t |jd«|«}|r|}nt|jdd«D]^\}}|jtjk(sŒ$|jdk(sŒ4t |t |j|dz«|«}|sŒ]|}Œ`n¤|jtvr|jdj|k(r|}nst|||«r|}nc|jtj k(rt |||«}n8|jtj"k(rt ||jd«r|}|sŒ(|s|cSt%|«sŒ;|cSy) zº Returns the node which binds variable name, otherwise None. If optional argument package is supplied, only imports will be returned. See test cases for examples.Nrr‹r†r…Ú:ér{)rvr~r Úfor_stmtÚ_findr¾r¸Úif_stmtÚ while_stmtÚtry_stmtr˜rÚCOLONrÚ _def_symsÚ_is_import_bindingrÈr­rÅ)r(r>rÀÚchildÚretrNÚiÚkids rr¾r¾isӀ𠗕ˆØˆØ :‰:œŸ™Ò &ÜT˜5Ÿ>™>¨!Ñ,Ô-Ø’ ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰ZœDŸL™L¬$¯/©/Ð:Ñ :ܘT¤:¨e¯n©n¸RÑ.@Ó#AÀ7ÓKˆAÚ˜’#Ø Z‰Zœ4Ÿ=™=Ò (ܘT¤:¨e¯n©n¸QÑ.?Ó#@À'ÓJˆAÙØ’ä'¨¯©°q°rÐ(:Ö;‘FAsØ—x‘x¤5§;¡;Ó.°3·9±9ÀÓ3Cä(¨¬z¸%¿.¹.ÈÈ1ÉÑ:MÓ/NÐPWÓX˜Ú A™cñ <ð Z‰Zœ9Ñ $¨¯©¸Ñ):×)@Ñ)@ÀDÒ)H؉CÜ   t¨WÔ 5؉CØ Z‰Zœ4×+Ñ+Ò +ܘt U¨GÓ4‰CØ Z‰Zœ4Ÿ>™>Ò )ÜT˜5Ÿ>™>¨!Ñ,Ô-Øã ÙØ’ ܘŽ~Ø’ ðEðF rcó —|g}|r~|j«}|jdkDr.|jtvr|j|j«n.|jt j k(r|j|k(r|S|rŒ~y)Né)Úpopr~Ú _block_symsÚextendrvrr'r)r(r>Únodess rrÕrÕ”sg€Ø ˆF€EÙ Øy‰y‹{ˆØ 9‰9sŠ?˜tŸy™y´ Ñ;Ø L‰L˜Ÿ™Õ 'Ø Y‰Yœ%Ÿ*™*Ò $¨¯©°tÒ);؈Kò ð rcó,—|jtjk(r9|s6|jd}|jtjk(r|jD]q}|jtj k(r!|jdj |k(sŒ=|cS|jtjk(sŒ_|j |k(sŒo|cSy|jtj k(r=|jd}|jtjk(r?|j |k(r0|S|jtjk(r|j |k(r|Sy|jtjk(r|r*t|jd«j«|k7ry|jd}|r td|«ry|jtjk(rt||«r|S|jtjk(r>|jd}|jtjk(r|j |k(r|Sy|jtjk(r|j |k(r|S|r|jtjk(r|Sy)zš Will return node if node will import name, or node will import * from package. None is returned otherwise. See test cases for examples. rr†r‹Nr…Úas)r~r rÄrvÚdotted_as_namesÚdotted_as_namerrr'rrÚstrÚstriprÕrqÚimport_as_nameÚSTAR)r>r(rÀrwrÜÚlastrNs rrÛrÛžsô€ð  ‡yy”D×$Ñ$Ó$ªWØm‰m˜AÑˆØ 8‰8”t×+Ñ+Ò +ØŸœØ—:‘:¤×!4Ñ!4Ò4Ø—~‘~ aÑ(×.Ñ.°$Ó6Ø#š Ø—Z‘Z¤5§:¡:Ó-°%·+±+ÀÓ2EØ’Kð &ð> ð3X‰Xœ×,Ñ,Ò ,Ø—<‘< Ñ#ˆDØy‰yœEŸJ™JÒ&¨4¯:©:¸Ò+=Ø Ø X‰XœŸ™Ò #¨¯ © °TÒ(9؈Kð( ð' ‰”d×&Ñ&Ó &ñ ”s˜4Ÿ=™=¨Ñ+Ó,×2Ñ2Ó4¸Ò?ØØ M‰M˜!Ñ ˆÙ ”u˜T 1”~àØ V‰V”t×+Ñ+Ò +´°d¸A´ØˆKØ V‰V”t×*Ñ*Ò *Ø—J‘J˜q‘MˆEØz‰zœUŸZ™ZÒ'¨E¯K©K¸4Ò,?Ø ð ð V‰V”u—z‘zÒ ! a§g¡g°¢o؈KÙ ˜Ÿ™¤5§:¡:Ò-؈KØ rrŽ)NN)6Ú__doc__Úpgen2rÚpytreerrÚpygramrr rJrrrrr%r)r/r3r,r?rCrHrKrOrVrZrlrxrƒr‰rŒrÚconsuming_callsrœr¡r¢r£rŸr¨r±r¶r¸r¼rÂrÅrÐr¬r«rÚr¾r+rãrÕrÛrrrÚrôsðÙ7õßÝ*Ýò:ò!ò!ò Hó1ò4ò"ò ñ ›©&«(óóò%ò#ó0ò9ó 5ó2ò0ò&ò8 /ò0ò7ò.€ò#ð& €ð€ð€ð€ òò&ò.òòòò=ò*DðZ]‰]˜DŸL™LÐ )€ ó(ðT|‰|˜TŸ]™]¨D¯L©LÐ9€ òô'rlib2to3/__pycache__/pygram.cpython-312.opt-2.pyc000064400000003244152462633570015214 0ustar00Ë T—çhãóü— ddlZddlmZddlmZddlmZej jej je «d«Z ej jej je «d«Z Gd„d e «Z ejd e «Ze e«Zej#«Zej&d =ej#«Zej&d =ejd e «Ze e«Zy) éNé)Útoken)Údriver)Úpytreez Grammar.txtzPatternGrammar.txtcó—eZdZd„Zy)ÚSymbolscód— |jj«D]\}}t|||«Œy)N)Ú symbol2numberÚitemsÚsetattr)ÚselfÚgrammarÚnameÚsymbols ú'/usr/lib64/python3.12/lib2to3/pygram.pyÚ__init__zSymbols.__init__s2€ð ð $×1Ñ1×7Ñ7Ö9‰LˆD&Ü D˜$ Õ 'ñ:óN)Ú__name__Ú __module__Ú __qualname__r©rrrrs„ó(rrÚlib2to3ÚprintÚexec)ÚosÚpgen2rrÚrÚpathÚjoinÚdirnameÚ__file__Ú _GRAMMAR_FILEÚ_PATTERN_GRAMMAR_FILEÚobjectrÚload_packaged_grammarÚpython_grammarÚpython_symbolsÚcopyÚ!python_grammar_no_print_statementÚkeywordsÚ*python_grammar_no_print_and_exec_statementÚpattern_grammarÚpattern_symbolsrrrÚr.sçðð-ó õÝÝð—‘— ‘ ˜RŸW™WŸ_™_¨XÓ6¸ ÓF€ ØŸ™Ÿ ™  R§W¡W§_¡_°XÓ%>Ø%9ó;Ðô (ˆfô (ð.×-Ñ-¨i¸ÓG€á˜Ó(€à$2×$7Ñ$7Ó$9Ð!Ø%×.Ñ.¨wÐ7à-N×-SÑ-SÓ-UÐ*Ø.×7Ñ7¸Ð?à.&×.Ñ.¨yÐ:OÓP€Ù˜/Ó*rlib2to3/__pycache__/__main__.cpython-312.pyc000064400000000425152462633570014473 0ustar00Ë T—çhCãóH—ddlZddlmZejed««y)éNé)Úmainz lib2to3.fixes)ÚsysrÚexit©óú)/usr/lib64/python3.12/lib2to3/__main__.pyÚr sðÛ Ýà€‡‰ˆoÓ Õrlib2to3/__pycache__/btm_utils.cpython-312.opt-1.pyc000064400000025516152462633570015724 0ustar00Ë T—çhÙ&ãóŽ—dZddlmZddlmZmZddlmZmZeZ eZ ejZ eZ dZdZdZGd„d e«Zdd „Zd „Zd „Zy )z0Utility functions used by the btm_matcher moduleé)Úpytree)ÚgrammarÚtoken)Úpattern_symbolsÚpython_symbolséÿÿÿÿéþÿÿÿéýÿÿÿcó0—eZdZdZdd„Zd„Zd„Zd„Zd„Zy) ÚMinNodez‰This class serves as an intermediate representation of the pattern tree during the conversion to sets of leaf-to-root subpatternsNcóf—||_||_g|_d|_d|_g|_g|_y)NF)ÚtypeÚnameÚchildrenÚleafÚparentÚ alternativesÚgroup)Úselfrrs ú*/usr/lib64/python3.12/lib2to3/btm_utils.pyÚ__init__zMinNode.__init__s4€ØˆŒ ؈Œ ؈Œ ؈Œ ؈Œ ØˆÔØˆ ócó^—t|j«dzt|j«zS)NÚ )Ústrrr)rs rÚ__repr__zMinNode.__repr__s"€Ü4—9‘9‹~ Ñ#¤c¨$¯)©)£nÑ4Ð4rcóD—|}g}|r˜|jtk(r|jj|«t |j«t |j «k(r*t |j«g}g|_|j}Œ†|j}d} |S|jtk(r|jj|«t |j«t |j «k(r*t|j«}g|_ |j}Œ|j}d} |S|jtjk(r(|jr|j|j«n|j|j«|j}|rŒ˜|S)z°Internal method. Returns a characteristic path of the pattern tree. This method must be run for all leaves until the linear subpatterns are merged into a singleN)rÚTYPE_ALTERNATIVESrÚappendÚlenrÚtuplerÚ TYPE_GROUPrÚget_characteristic_subpatternÚ token_labelsÚNAMEr)rÚnodeÚsubps rÚ leaf_to_rootzMinNode.leaf_to_root!sP€ðˆØˆÚØy‰yÔ-Ò-Ø×!Ñ!×(Ñ(¨Ô.Üt×(Ñ(Ó)¬S°·±Ó-?Ò?ä! $×"3Ñ"3Ó4Ð5DØ(*DÔ%ØŸ;™;DØàŸ;™;DØDØð,ˆ ð)y‰yœJÒ&Ø— ‘ ×!Ñ! $Ô'ät—z‘z“?¤c¨$¯-©-Ó&8Ò8Ü8¸¿¹ÓDDØ!#D”JØŸ;™;DÙàŸ;™;DØDØðˆ ðy‰yœL×-Ñ-Ò-°$·)²)à— ‘ ˜DŸI™IÕ&à— ‘ ˜DŸI™IÔ&à—;‘;ˆDóCðDˆ rcóZ—|j«D]}|j«}|sŒ|cSy)a‹Drives the leaf_to_root method. The reason that leaf_to_root must be run multiple times is because we need to reject 'group' matches; for example the alternative form (a | b c) creates a group [b c] that needs to be matched. Since matching multiple linear patterns overcomes the automaton's capabilities, leaf_to_root merges each group into a single choice based on 'characteristic'ity, i.e. (a|b c) -> (a|b) if b more characteristic than c Returns: The most 'characteristic'(as defined by get_characteristic_subpattern) path for the compiled pattern tree. N)Úleavesr()rÚlr's rÚget_linear_subpatternzMinNode.get_linear_subpatternKs(€ð —‘–ˆAØ—>‘>Ó#ˆDÚØ’ ñrc#ó„K—|jD]}|j«Ed{–—†Œ|js|–—yy7Œ­w)z-Generator that returns the leaves of the treeN)rr*)rÚchilds rr*zMinNode.leaves`s9èø€à—]”]ˆEØ—|‘|“~× %Ñ %ð#à}Š}Ø‹Jðð &ús‚#A¥>¦A)NN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr(r,r*©rrr r s!„ñóò5ò(òTó*rr Ncó® —d}|jtjk(r|jd}|jtjk(rŸt |j«dkrt |jd|«}nÍtt¬«}|jD]K}|jj|«dzrŒ"t ||«}|€Œ1|jj|«ŒMna|jtjk(rt |j«dkDr\tt¬«}|jD],}t ||«}|sŒ|jj|«Œ.|jsÔd}nÐt |jd|«}nµ|jtjk(r—t|jdtj «r5|jdj"dk(rt |jd|«St|jdtj «r|jdj"dk(sMt |j«dkDr6t%|jdd«r|jdj"dk(ryd }d}d}d }d} d } |jD]„}|jtj&k(rd }|}nA|jtj(k(rd }|} n|jtjk(r|}t%|d«sŒs|j"d k(sŒƒd } Œ†| r:|jd} t%| d«r.| j"dk(r|jd } n|jd} | jt*j,k(r„| j"d k(rtt.¬«}nýt%t*| j"«r%tt1t*| j"«¬«}n¾tt1t2| j"«¬«}n™| jt*j4k(rS| j"j7d«} | t8vrtt8| ¬«}nEtt*j,| ¬«}n)| jtjk(r t ||«}|rB| jdj"dk(rd}n#| jdj"dk(rnt:‚|r@|>|jddD],}t ||«}|€Œ|jj|«Œ.|r||_|S)zÏ Internal function. Reduces a compiled pattern tree to an intermediate representation suitable for feeding the automaton. This also trims off any optional pattern elements(like [a], a*). Néé)rrÚ(Ú[ÚvalueTFÚ=éÚanyÚ')rrÚ*Ú+r)rÚsymsÚMatcherrÚ Alternativesr Ú reduce_treer rÚindexrÚ Alternativer"ÚUnitÚ isinstancerÚLeafr9ÚhasattrÚDetailsÚRepeaterr$r%ÚTYPE_ANYÚgetattrÚpysymsÚSTRINGÚstripÚtokensÚNotImplementedErrorr) r&rÚnew_noder.ÚreducedrÚ details_nodeÚalternatives_nodeÚ has_repeaterÚ repeater_nodeÚhas_variable_nameÚ name_leafrs rrCrCgsI€ð€Hà ‡yy”D—L‘LÒ à}‰}˜QÑˆà ‡yy”D×%Ñ%Ò%ä ˆt}‰}Ó  Ò "ä" 4§=¡=°Ñ#3°VÓ<ŠHôÔ$5Ô6ˆHàŸœØ—=‘=×&Ñ& uÓ-¨aÒ/ØÜ% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ò '𠉔d×&Ñ&Ò &Ü ˆt}‰}Ó  Ò !ä¤JÔ/ˆHØŸœÜ% e¨XÓ6ÚØ×%Ñ%×,Ñ,¨WÕ5ð'ð×$Ó$à’ô# 4§=¡=°Ñ#3°VÓ<ŠHà ‰”d—i‘iÓ Ü t—}‘} QÑ'¬¯©Ô 5Ø M‰M˜!Ñ × "Ñ " cÒ )ä˜tŸ}™}¨QÑ/°Ó8Ð 8Ü ˜Ÿ ™  aÑ(¬&¯+©+Ô 6Ø}‰}˜QÑ×%Ñ%¨Ò,äD—M‘MÓ" 1Ò$Üt—}‘} QÑ'¨Ô1Ø}‰}˜QÑ×%Ñ%¨Ò,ààˆØˆ Ø ÐØˆ ؈ Ø!Ðà—]”]ˆEØz‰zœTŸ\™\Ò)ØØ$‘ Ø—‘œtŸ}™}Ò,Ø# Ø %‘ Ø—‘œt×0Ñ0Ò0Ø$)Ð!Üu˜gÕ&¨5¯;©;¸#Ó+=Ø$(Ñ!ð#ñ àŸ ™  aÑ(ˆIÜy 'Ô*¨y¯©À#Ò/Eà ŸM™M¨!Ñ,‘ àŸ ™  aÑ(ˆIð >‰>œ\×.Ñ.Ò .à‰ %Ò'Ü"¬Ô1‘äœ<¨¯©Ô9Ü&¬G´LÀ)Ç/Á/Ó,RÔS‘Hä&¬G´F¸I¿O¹OÓ,LÔM‘Hà ^‰^œ|×2Ñ2Ò 2ð—?‘?×(Ñ(¨Ó-ˆDØ”v‰~Ü"¬¨t© Ô5‘ä"¬ ×(9Ñ(9ÀÔE‘Ø ^‰^œt×0Ñ0Ò 0Ü"Ð#4°fÓ=ˆHñ Ø×%Ñ% aÑ(×.Ñ.°#Ò5à‘Ø×'Ñ'¨Ñ*×0Ñ0°CÒ7àô*Ð)ñ ˜HÐ0Ø%×.Ñ.¨q°Ó4ä% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ð 5ñ Ø ˆŒØ €Orc󬇇—t|t«s|St|«dk(r|dSg}g}gd¢Šg}dŠ|D]~}tt |d„««sŒtt |ˆfd„««r|j |«ŒDtt |ˆfd„««r|j |«Œn|j |«Œ€|r|}n |r|}n|r|}t |t¬«S) z„Picks the most characteristic from a list of linear patterns Current order used is: names > common_names > common_chars rr5)ÚinÚforÚifÚnotÚNonez[]().,:có$—t|«tuS©N)rr)Úxs rÚz/get_characteristic_subpattern..ýs €¬d°1«g¼©nrcó0•—t|t«xr|‰vSrb©rGr)rcÚ common_charss €rrdz/get_characteristic_subpattern..ÿsø€¤j°´CÓ&8Ò&N¸QÀ,Ð=NÐ&Nrcó0•—t|t«xr|‰vSrbrf)rcÚ common_namess €rrdz/get_characteristic_subpattern..sø€¬ °1´cÓ(:Ò(P¸qÀLÐ?PÐ(Pr)Úkey)rGÚlistr r<Úrec_testrÚmax)Ú subpatternsÚsubpatterns_with_namesÚsubpatterns_with_common_namesÚsubpatterns_with_common_charsÚ subpatternrgris @@rr#r#ìsãù€ô k¤4Ô (ØÐÜ ˆ;Ó˜ÒØ˜1‰~Ðð ÐØ$&Ð!Ú6€LØ$&Ð!Ø€LÛ!ˆ Ü Œx˜ Ñ$<Ó=Õ >Ü”8˜JÛNóPôQà-×4Ñ4°ZÕ@Ü”X˜jÛPóRôSà-×4Ñ4°ZÕ@ð'×-Ñ-¨jÕ9ð"ñØ,‰ Ù &Ø3‰ Ù &Ø3ˆ ä ˆ{¤Ô $Ð$rc#óˆK—|D]7}t|ttf«rt||«Ed{–—†Œ.||«–—Œ9y7Œ­w)zPTests test_func on all items of sequence and items of included sub-iterablesN)rGrkr!rl)ÚsequenceÚ test_funcrcs rrlrls=èø€óˆÜ aœ$¤˜Ô 'Ü  9Ó-× -Ñ -á˜A“,Ó ñ à -ús‚+A­A®Arb)r2ÚrÚpgen2rrÚpygramrrr@rNÚopmaprQr$rLrr"Úobjectr rCr#rlr3rrÚr{sZðÙ2åß!ß3à€Ø €Ø ‰€Ø€ à €ØÐØ € ôUˆfôUónBòJ#%óJrlib2to3/__pycache__/pygram.cpython-312.opt-1.pyc000064400000003546152462633570015220 0ustar00Ë T—çhãóþ—dZddlZddlmZddlmZddlmZejjejje «d«Z ejjejje «d«Z Gd „d e «Zejd e «Zee«Zej%«Zej(d =ej%«Zej(d =ejd e «Zee«Zy)z&Export the Python grammar and symbols.éNé)Útoken)Údriver)Úpytreez Grammar.txtzPatternGrammar.txtcó—eZdZd„Zy)ÚSymbolscób—|jj«D]\}}t|||«Œy)z”Initializer. Creates an attribute for each grammar symbol (nonterminal), whose value is the symbol's type (an int >= 256). N)Ú symbol2numberÚitemsÚsetattr)ÚselfÚgrammarÚnameÚsymbols ú'/usr/lib64/python3.12/lib2to3/pygram.pyÚ__init__zSymbols.__init__s-€ð $×1Ñ1×7Ñ7Ö9‰LˆD&Ü D˜$ Õ 'ñ:óN)Ú__name__Ú __module__Ú __qualname__r©rrrrs„ó(rrÚlib2to3ÚprintÚexec)Ú__doc__ÚosÚpgen2rrÚrÚpathÚjoinÚdirnameÚ__file__Ú _GRAMMAR_FILEÚ_PATTERN_GRAMMAR_FILEÚobjectrÚload_packaged_grammarÚpython_grammarÚpython_symbolsÚcopyÚ!python_grammar_no_print_statementÚkeywordsÚ*python_grammar_no_print_and_exec_statementÚpattern_grammarÚpattern_symbolsrrrÚr/sçðñ-ó õÝÝð—‘— ‘ ˜RŸW™WŸ_™_¨XÓ6¸ ÓF€ ØŸ™Ÿ ™  R§W¡W§_¡_°XÓ%>Ø%9ó;Ðô (ˆfô (ð.×-Ñ-¨i¸ÓG€á˜Ó(€à$2×$7Ñ$7Ó$9Ð!Ø%×.Ñ.¨wÐ7à-N×-SÑ-SÓ-UÐ*Ø.×7Ñ7¸Ð?à.&×.Ñ.¨yÐ:OÓP€Ù˜/Ó*rlib2to3/__pycache__/btm_utils.cpython-312.pyc000064400000025516152462633570014765 0ustar00Ë T—çhÙ&ãóŽ—dZddlmZddlmZmZddlmZmZeZ eZ ejZ eZ dZdZdZGd„d e«Zdd „Zd „Zd „Zy )z0Utility functions used by the btm_matcher moduleé)Úpytree)ÚgrammarÚtoken)Úpattern_symbolsÚpython_symbolséÿÿÿÿéþÿÿÿéýÿÿÿcó0—eZdZdZdd„Zd„Zd„Zd„Zd„Zy) ÚMinNodez‰This class serves as an intermediate representation of the pattern tree during the conversion to sets of leaf-to-root subpatternsNcóf—||_||_g|_d|_d|_g|_g|_y)NF)ÚtypeÚnameÚchildrenÚleafÚparentÚ alternativesÚgroup)Úselfrrs ú*/usr/lib64/python3.12/lib2to3/btm_utils.pyÚ__init__zMinNode.__init__s4€ØˆŒ ؈Œ ؈Œ ؈Œ ؈Œ ØˆÔØˆ ócó^—t|j«dzt|j«zS)NÚ )Ústrrr)rs rÚ__repr__zMinNode.__repr__s"€Ü4—9‘9‹~ Ñ#¤c¨$¯)©)£nÑ4Ð4rcóD—|}g}|r˜|jtk(r|jj|«t |j«t |j «k(r*t |j«g}g|_|j}Œ†|j}d} |S|jtk(r|jj|«t |j«t |j «k(r*t|j«}g|_ |j}Œ|j}d} |S|jtjk(r(|jr|j|j«n|j|j«|j}|rŒ˜|S)z°Internal method. Returns a characteristic path of the pattern tree. This method must be run for all leaves until the linear subpatterns are merged into a singleN)rÚTYPE_ALTERNATIVESrÚappendÚlenrÚtuplerÚ TYPE_GROUPrÚget_characteristic_subpatternÚ token_labelsÚNAMEr)rÚnodeÚsubps rÚ leaf_to_rootzMinNode.leaf_to_root!sP€ðˆØˆÚØy‰yÔ-Ò-Ø×!Ñ!×(Ñ(¨Ô.Üt×(Ñ(Ó)¬S°·±Ó-?Ò?ä! $×"3Ñ"3Ó4Ð5DØ(*DÔ%ØŸ;™;DØàŸ;™;DØDØð,ˆ ð)y‰yœJÒ&Ø— ‘ ×!Ñ! $Ô'ät—z‘z“?¤c¨$¯-©-Ó&8Ò8Ü8¸¿¹ÓDDØ!#D”JØŸ;™;DÙàŸ;™;DØDØðˆ ðy‰yœL×-Ñ-Ò-°$·)²)à— ‘ ˜DŸI™IÕ&à— ‘ ˜DŸI™IÔ&à—;‘;ˆDóCðDˆ rcóZ—|j«D]}|j«}|sŒ|cSy)a‹Drives the leaf_to_root method. The reason that leaf_to_root must be run multiple times is because we need to reject 'group' matches; for example the alternative form (a | b c) creates a group [b c] that needs to be matched. Since matching multiple linear patterns overcomes the automaton's capabilities, leaf_to_root merges each group into a single choice based on 'characteristic'ity, i.e. (a|b c) -> (a|b) if b more characteristic than c Returns: The most 'characteristic'(as defined by get_characteristic_subpattern) path for the compiled pattern tree. N)Úleavesr()rÚlr's rÚget_linear_subpatternzMinNode.get_linear_subpatternKs(€ð —‘–ˆAØ—>‘>Ó#ˆDÚØ’ ñrc#ó„K—|jD]}|j«Ed{–—†Œ|js|–—yy7Œ­w)z-Generator that returns the leaves of the treeN)rr*)rÚchilds rr*zMinNode.leaves`s9èø€à—]”]ˆEØ—|‘|“~× %Ñ %ð#à}Š}Ø‹Jðð &ús‚#A¥>¦A)NN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr(r,r*©rrr r s!„ñóò5ò(òTó*rr Ncó® —d}|jtjk(r|jd}|jtjk(rŸt |j«dkrt |jd|«}nÍtt¬«}|jD]K}|jj|«dzrŒ"t ||«}|€Œ1|jj|«ŒMna|jtjk(rt |j«dkDr\tt¬«}|jD],}t ||«}|sŒ|jj|«Œ.|jsÔd}nÐt |jd|«}nµ|jtjk(r—t|jdtj «r5|jdj"dk(rt |jd|«St|jdtj «r|jdj"dk(sMt |j«dkDr6t%|jdd«r|jdj"dk(ryd }d}d}d }d} d } |jD]„}|jtj&k(rd }|}nA|jtj(k(rd }|} n|jtjk(r|}t%|d«sŒs|j"d k(sŒƒd } Œ†| r:|jd} t%| d«r.| j"dk(r|jd } n|jd} | jt*j,k(r„| j"d k(rtt.¬«}nýt%t*| j"«r%tt1t*| j"«¬«}n¾tt1t2| j"«¬«}n™| jt*j4k(rS| j"j7d«} | t8vrtt8| ¬«}nEtt*j,| ¬«}n)| jtjk(r t ||«}|rB| jdj"dk(rd}n#| jdj"dk(rnt:‚|r@|>|jddD],}t ||«}|€Œ|jj|«Œ.|r||_|S)zÏ Internal function. Reduces a compiled pattern tree to an intermediate representation suitable for feeding the automaton. This also trims off any optional pattern elements(like [a], a*). Néé)rrÚ(Ú[ÚvalueTFÚ=éÚanyÚ')rrÚ*Ú+r)rÚsymsÚMatcherrÚ Alternativesr Ú reduce_treer rÚindexrÚ Alternativer"ÚUnitÚ isinstancerÚLeafr9ÚhasattrÚDetailsÚRepeaterr$r%ÚTYPE_ANYÚgetattrÚpysymsÚSTRINGÚstripÚtokensÚNotImplementedErrorr) r&rÚnew_noder.ÚreducedrÚ details_nodeÚalternatives_nodeÚ has_repeaterÚ repeater_nodeÚhas_variable_nameÚ name_leafrs rrCrCgsI€ð€Hà ‡yy”D—L‘LÒ à}‰}˜QÑˆà ‡yy”D×%Ñ%Ò%ä ˆt}‰}Ó  Ò "ä" 4§=¡=°Ñ#3°VÓ<ŠHôÔ$5Ô6ˆHàŸœØ—=‘=×&Ñ& uÓ-¨aÒ/ØÜ% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ò '𠉔d×&Ñ&Ò &Ü ˆt}‰}Ó  Ò !ä¤JÔ/ˆHØŸœÜ% e¨XÓ6ÚØ×%Ñ%×,Ñ,¨WÕ5ð'ð×$Ó$à’ô# 4§=¡=°Ñ#3°VÓ<ŠHà ‰”d—i‘iÓ Ü t—}‘} QÑ'¬¯©Ô 5Ø M‰M˜!Ñ × "Ñ " cÒ )ä˜tŸ}™}¨QÑ/°Ó8Ð 8Ü ˜Ÿ ™  aÑ(¬&¯+©+Ô 6Ø}‰}˜QÑ×%Ñ%¨Ò,äD—M‘MÓ" 1Ò$Üt—}‘} QÑ'¨Ô1Ø}‰}˜QÑ×%Ñ%¨Ò,ààˆØˆ Ø ÐØˆ ؈ Ø!Ðà—]”]ˆEØz‰zœTŸ\™\Ò)ØØ$‘ Ø—‘œtŸ}™}Ò,Ø# Ø %‘ Ø—‘œt×0Ñ0Ò0Ø$)Ð!Üu˜gÕ&¨5¯;©;¸#Ó+=Ø$(Ñ!ð#ñ àŸ ™  aÑ(ˆIÜy 'Ô*¨y¯©À#Ò/Eà ŸM™M¨!Ñ,‘ àŸ ™  aÑ(ˆIð >‰>œ\×.Ñ.Ò .à‰ %Ò'Ü"¬Ô1‘äœ<¨¯©Ô9Ü&¬G´LÀ)Ç/Á/Ó,RÔS‘Hä&¬G´F¸I¿O¹OÓ,LÔM‘Hà ^‰^œ|×2Ñ2Ò 2ð—?‘?×(Ñ(¨Ó-ˆDØ”v‰~Ü"¬¨t© Ô5‘ä"¬ ×(9Ñ(9ÀÔE‘Ø ^‰^œt×0Ñ0Ò 0Ü"Ð#4°fÓ=ˆHñ Ø×%Ñ% aÑ(×.Ñ.°#Ò5à‘Ø×'Ñ'¨Ñ*×0Ñ0°CÒ7àô*Ð)ñ ˜HÐ0Ø%×.Ñ.¨q°Ó4ä% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ð 5ñ Ø ˆŒØ €Orc󬇇—t|t«s|St|«dk(r|dSg}g}gd¢Šg}dŠ|D]~}tt |d„««sŒtt |ˆfd„««r|j |«ŒDtt |ˆfd„««r|j |«Œn|j |«Œ€|r|}n |r|}n|r|}t |t¬«S) z„Picks the most characteristic from a list of linear patterns Current order used is: names > common_names > common_chars rr5)ÚinÚforÚifÚnotÚNonez[]().,:có$—t|«tuS©N)rr)Úxs rÚz/get_characteristic_subpattern..ýs €¬d°1«g¼©nrcó0•—t|t«xr|‰vSrb©rGr)rcÚ common_charss €rrdz/get_characteristic_subpattern..ÿsø€¤j°´CÓ&8Ò&N¸QÀ,Ð=NÐ&Nrcó0•—t|t«xr|‰vSrbrf)rcÚ common_namess €rrdz/get_characteristic_subpattern..sø€¬ °1´cÓ(:Ò(P¸qÀLÐ?PÐ(Pr)Úkey)rGÚlistr r<Úrec_testrÚmax)Ú subpatternsÚsubpatterns_with_namesÚsubpatterns_with_common_namesÚsubpatterns_with_common_charsÚ subpatternrgris @@rr#r#ìsãù€ô k¤4Ô (ØÐÜ ˆ;Ó˜ÒØ˜1‰~Ðð ÐØ$&Ð!Ú6€LØ$&Ð!Ø€LÛ!ˆ Ü Œx˜ Ñ$<Ó=Õ >Ü”8˜JÛNóPôQà-×4Ñ4°ZÕ@Ü”X˜jÛPóRôSà-×4Ñ4°ZÕ@ð'×-Ñ-¨jÕ9ð"ñØ,‰ Ù &Ø3‰ Ù &Ø3ˆ ä ˆ{¤Ô $Ð$rc#óˆK—|D]7}t|ttf«rt||«Ed{–—†Œ.||«–—Œ9y7Œ­w)zPTests test_func on all items of sequence and items of included sub-iterablesN)rGrkr!rl)ÚsequenceÚ test_funcrcs rrlrls=èø€óˆÜ aœ$¤˜Ô 'Ü  9Ó-× -Ñ -á˜A“,Ó ñ à -ús‚+A­A®Arb)r2ÚrÚpgen2rrÚpygramrrr@rNÚopmaprQr$rLrr"Úobjectr rCr#rlr3rrÚr{sZðÙ2åß!ß3à€Ø €Ø ‰€Ø€ à €ØÐØ € ôUˆfôUónBòJ#%óJrlib2to3/__pycache__/fixer_base.cpython-312.pyc000064400000017277152462633570015077 0ustar00Ë T—çh"ãó`—dZddlZddlmZddlmZddlmZGd„de«Z Gd „d e «Z y) z2Base class for fixers (optional, but recommended).éNé)ÚPatternCompiler)Úpygram)Údoes_tree_importcóÌ—eZdZdZdZdZdZdZdZe jd«Z e «Z dZdZdZdZdZdZej*Zd„Zd„Zd „Zd „Zd „Zdd „Zd „Zdd„Zd„Zd„Z d„Z!y)ÚBaseFixaOptional base class for fixers. The subclass name must be FixFooBar where FooBar is the result of removing underscores and capitalizing the words of the fix name. For example, the class name for a fixer named 'has_key' should be FixHasKey. NrÚpostFécó@—||_||_|j«y)aInitializer. Subclass may override. Args: options: a dict containing the options passed to RefactoringTool that could be used to customize the fixer through the command line. log: a list to append warnings and other messages to. N)ÚoptionsÚlogÚcompile_pattern)Úselfr r s ú+/usr/lib64/python3.12/lib2to3/fixer_base.pyÚ__init__zBaseFix.__init__/s€ðˆŒ ؈ŒØ ×ÑÕócó†—|j5t«}|j|jd¬«\|_|_yy)z–Compiles self.PATTERN into self.pattern. Subclass may override if it doesn't want to use self.{pattern,PATTERN} in .match(). NT)Ú with_tree)ÚPATTERNrrÚpatternÚ pattern_tree)rÚPCs rrzBaseFix.compile_pattern;sE€ð <‰<Ð #Ü Ó"ˆBØ.0×.@Ñ.@ÀÇÁØKOð/Aó/QÑ +ˆDŒL˜$Õ+ð $rcó—||_y)zOSet the filename. The main refactoring tool should call this. N)Úfilename)rrs rÚ set_filenamezBaseFix.set_filenameFs €ð !ˆ rcóJ—d|i}|jj||«xr|S)aReturns match for a given parse tree node. Should return a true or false object (not necessarily a bool). It may return a non-empty dict of matching sub-nodes as returned by a matching pattern. Subclass may override. Únode)rÚmatch©rrÚresultss rrz BaseFix.matchMs)€ð˜4.ˆØ|‰|×!Ñ! $¨Ó0Ò<°WЊ>Ø"ˆDŒNØ H‰HO‰OÐ0°4·=±=Ñ@Ô AØ ‰‰˜Õ rcóª—|j«}|j«}d|_d}|j|||fz«|r|j|«yy)aWarn the user that a given chunk of code is not valid Python 3, but that it cannot be converted automatically. First argument is the top-level node for the code in question. Optional second argument is why it can't be converted. ÚzLine %d: could not convert: %sN)Ú get_linenoÚcloneÚprefixr1)rrÚreasonÚlinenoÚ for_outputÚmsgs rÚcannot_convertzBaseFix.cannot_convertzsV€ð—‘Ó"ˆØ—Z‘Z“\ˆ ؈ ÔØ.ˆØ ×ј ¨ Ð3Ñ3Ô4Ù Ø × Ñ ˜VÕ $ð rcóP—|j«}|jd||fz«y)zàUsed for warning the user about possible uncertainty in the translation. First argument is the top-level node for the code in question. Optional second argument is why it can't be converted. z Line %d: %sN)r4r1)rrr7r8s rÚwarningzBaseFix.warning‰s(€ð—‘Ó"ˆØ ×ј¨&°&Ð)9Ñ9Õ:rcóŠ—|j|_|j|«tjd«|_d|_y)zîSome fixers need to maintain tree-wide state. This method is called once, at the start of tree fix-up. tree - the root node of the tree to be processed. filename - the name of the file the tree came from. rTN)r%rÚ itertoolsÚcountr(r.©rÚtreers rÚ start_treezBaseFix.start_tree“s4€ðŸ/™/ˆŒØ ×ј(Ô#Ü —‘ qÓ)ˆŒ ؈rcó—y)zóSome fixers need to maintain tree-wide state. This method is called once, at the conclusion of tree fix-up. tree - the root node of the tree to be processed. filename - the name of the file the tree came from. N©rAs rÚ finish_treezBaseFix.finish_treeŸs€ð r)Úxxx_todo_changeme©N)"Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr rr?r@r(Úsetr%ÚorderÚexplicitÚ run_orderÚ _accept_typeÚkeep_line_orderÚ BM_compatiblerÚpython_symbolsÚsymsrrrrr#r,r1r;r=rCrFrErrrrsž„ñð€GØ€GØ€LØ€GØ€H؈io‰o˜aÓ €GÙ“€JØ €EØ€HØ€Ià€Lð€Oà€Mð × Ñ €Dò ò Qò!ò =ò$ó ò!ó %ò;ò ó rrcó,‡—eZdZdZdZˆfd„Zd„ZˆxZS)ÚConditionalFixz@ Base class for fixers which not execute if an import is found. Ncó4•—tt| |Žd|_yrH)ÚsuperrWrCÚ _should_skip)rÚargsÚ __class__s €rrCzConditionalFix.start_tree¯sø€Ü Œn˜dÑ.°Ñ5Ø ˆÕrcóÖ—|j |jS|jjd«}|d}dj|dd«}t |||«|_|jS)NÚ.éÿÿÿÿ)rZÚskip_onÚsplitÚjoinr)rrÚpkgr+s rÚ should_skipzConditionalFix.should_skip³sh€Ø × Ñ Ð (Ø×$Ñ$Ð $Øl‰l× Ñ  Ó%ˆØ2‰wˆØh‰hs˜3˜BxÓ ˆÜ,¨S°$¸Ó=ˆÔØ× Ñ Ð r)rIrJrKrLr`rCrdÚ __classcell__)r\s@rrWrW©sø„ÙJð€Gô!ö!rrW) rLr?Úpatcomprr3rÚ fixer_utilrÚobjectrrWrErrÚris5ðñ9óõ%ÝÝ(ôX ˆfôX ôv!Wõ!rlib2to3/__pycache__/btm_utils.cpython-312.opt-2.pyc000064400000022624152462633570015722 0ustar00Ë T—çhÙ&ãóŒ— ddlmZddlmZmZddlmZmZeZeZ ejZ eZ dZ dZdZGd„de«Zd d „Zd „Zd „Zy )é)Úpytree)ÚgrammarÚtoken)Úpattern_symbolsÚpython_symbolséÿÿÿÿéþÿÿÿéýÿÿÿcó.—eZdZ dd„Zd„Zd„Zd„Zd„Zy)ÚMinNodeNcóf—||_||_g|_d|_d|_g|_g|_y)NF)ÚtypeÚnameÚchildrenÚleafÚparentÚ alternativesÚgroup)Úselfrrs ú*/usr/lib64/python3.12/lib2to3/btm_utils.pyÚ__init__zMinNode.__init__s4€ØˆŒ ؈Œ ؈Œ ؈Œ ؈Œ ØˆÔØˆ ócó^—t|j«dzt|j«zS)NÚ )Ústrrr)rs rÚ__repr__zMinNode.__repr__s"€Ü4—9‘9‹~ Ñ#¤c¨$¯)©)£nÑ4Ð4rcóF— |}g}|r˜|jtk(r|jj|«t |j«t |j «k(r*t |j«g}g|_|j}Œ†|j}d} |S|jtk(r|jj|«t |j«t |j «k(r*t|j«}g|_ |j}Œ|j}d} |S|jtjk(r(|jr|j|j«n|j|j«|j}|rŒ˜|S©N)rÚTYPE_ALTERNATIVESrÚappendÚlenrÚtuplerÚ TYPE_GROUPrÚget_characteristic_subpatternÚ token_labelsÚNAMEr)rÚnodeÚsubps rÚ leaf_to_rootzMinNode.leaf_to_root!sU€ð 7ðˆØˆÚØy‰yÔ-Ò-Ø×!Ñ!×(Ñ(¨Ô.Üt×(Ñ(Ó)¬S°·±Ó-?Ò?ä! $×"3Ñ"3Ó4Ð5DØ(*DÔ%ØŸ;™;DØàŸ;™;DØDØð,ˆ ð)y‰yœJÒ&Ø— ‘ ×!Ñ! $Ô'ät—z‘z“?¤c¨$¯-©-Ó&8Ò8Ü8¸¿¹ÓDDØ!#D”JØŸ;™;DÙàŸ;™;DØDØðˆ ðy‰yœL×-Ñ-Ò-°$·)²)à— ‘ ˜DŸI™IÕ&à— ‘ ˜DŸI™IÔ&à—;‘;ˆDóCðDˆ rcó\— |j«D]}|j«}|sŒ|cSyr)Úleavesr))rÚlr(s rÚget_linear_subpatternzMinNode.get_linear_subpatternKs-€ð ð—‘–ˆAØ—>‘>Ó#ˆDÚØ’ ñrc#ó†K— |jD]}|j«Ed{–—†Œ|js|–—yy7Œ­wr)rr+)rÚchilds rr+zMinNode.leaves`s<èø€Ø7Ø—]”]ˆEØ—|‘|“~× %Ñ %ð#à}Š}Ø‹Jðð &ús‚$A¦?§A)NN)Ú__name__Ú __module__Ú __qualname__rrr)r-r+©rrr r s!„ðóò5ò(òTó*rr Ncó° — d}|jtjk(r|jd}|jtjk(rŸt |j«dkrt |jd|«}nÍtt¬«}|jD]K}|jj|«dzrŒ"t ||«}|€Œ1|jj|«ŒMna|jtjk(rt |j«dkDr\tt¬«}|jD],}t ||«}|sŒ|jj|«Œ.|jsÔd}nÐt |jd|«}nµ|jtjk(r—t|jdtj «r5|jdj"dk(rt |jd|«St|jdtj «r|jdj"dk(sMt |j«dkDr6t%|jdd«r|jdj"dk(ryd}d}d}d }d} d } |jD]„}|jtj&k(rd }|}nA|jtj(k(rd}|} n|jtjk(r|}t%|d«sŒs|j"d k(sŒƒd} Œ†| r:|jd} t%| d«r.| j"dk(r|jd } n|jd} | jt*j,k(r„| j"d k(rtt.¬«}nýt%t*| j"«r%tt1t*| j"«¬«}n¾tt1t2| j"«¬«}n™| jt*j4k(rS| j"j7d «} | t8vrtt8| ¬«}nEtt*j,| ¬«}n)| jtjk(r t ||«}|rB| jdj"dk(rd}n#| jdj"dk(rnt:‚|r@|>|jddD],}t ||«}|€Œ|jj|«Œ.|r||_|S)Néé)rrÚ(Ú[ÚvalueTFÚ=éÚanyÚ')rrÚ*Ú+r)rÚsymsÚMatcherrÚ Alternativesr!Ú reduce_treer rÚindexr Ú Alternativer#ÚUnitÚ isinstancerÚLeafr9ÚhasattrÚDetailsÚRepeaterr%r&ÚTYPE_ANYÚgetattrÚpysymsÚSTRINGÚstripÚtokensÚNotImplementedErrorr) r'rÚnew_noder/ÚreducedrÚ details_nodeÚalternatives_nodeÚ has_repeaterÚ repeater_nodeÚhas_variable_nameÚ name_leafrs rrCrCgsN€ðð€Hà ‡yy”D—L‘LÒ à}‰}˜QÑˆà ‡yy”D×%Ñ%Ò%ä ˆt}‰}Ó  Ò "ä" 4§=¡=°Ñ#3°VÓ<ŠHôÔ$5Ô6ˆHàŸœØ—=‘=×&Ñ& uÓ-¨aÒ/ØÜ% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ò '𠉔d×&Ñ&Ò &Ü ˆt}‰}Ó  Ò !ä¤JÔ/ˆHØŸœÜ% e¨XÓ6ÚØ×%Ñ%×,Ñ,¨WÕ5ð'ð×$Ó$à’ô# 4§=¡=°Ñ#3°VÓ<ŠHà ‰”d—i‘iÓ Ü t—}‘} QÑ'¬¯©Ô 5Ø M‰M˜!Ñ × "Ñ " cÒ )ä˜tŸ}™}¨QÑ/°Ó8Ð 8Ü ˜Ÿ ™  aÑ(¬&¯+©+Ô 6Ø}‰}˜QÑ×%Ñ%¨Ò,äD—M‘MÓ" 1Ò$Üt—}‘} QÑ'¨Ô1Ø}‰}˜QÑ×%Ñ%¨Ò,ààˆØˆ Ø ÐØˆ ؈ Ø!Ðà—]”]ˆEØz‰zœTŸ\™\Ò)ØØ$‘ Ø—‘œtŸ}™}Ò,Ø# Ø %‘ Ø—‘œt×0Ñ0Ò0Ø$)Ð!Üu˜gÕ&¨5¯;©;¸#Ó+=Ø$(Ñ!ð#ñ àŸ ™  aÑ(ˆIÜy 'Ô*¨y¯©À#Ò/Eà ŸM™M¨!Ñ,‘ àŸ ™  aÑ(ˆIð >‰>œ\×.Ñ.Ò .à‰ %Ò'Ü"¬Ô1‘äœ<¨¯©Ô9Ü&¬G´LÀ)Ç/Á/Ó,RÔS‘Hä&¬G´F¸I¿O¹OÓ,LÔM‘Hà ^‰^œ|×2Ñ2Ò 2ð—?‘?×(Ñ(¨Ó-ˆDØ”v‰~Ü"¬¨t© Ô5‘ä"¬ ×(9Ñ(9ÀÔE‘Ø ^‰^œt×0Ñ0Ò 0Ü"Ð#4°fÓ=ˆHñ Ø×%Ñ% aÑ(×.Ñ.°#Ò5à‘Ø×'Ñ'¨Ñ*×0Ñ0°CÒ7àô*Ð)ñ ˜HÐ0Ø%×.Ñ.¨q°Ó4ä% e¨XÓ6ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ð 5ñ Ø ˆŒØ €Orc󮇇— t|t«s|St|«dk(r|dSg}g}gd¢Šg}dŠ|D]~}tt |d„««sŒtt |ˆfd„««r|j |«ŒDtt |ˆfd„««r|j |«Œn|j |«Œ€|r|}n |r|}n|r|}t |t¬«S) Nrr5)ÚinÚforÚifÚnotÚNonez[]().,:có$—t|«tuSr)rr)Úxs rÚz/get_characteristic_subpattern..ýs €¬d°1«g¼©nrcó0•—t|t«xr|‰vSr©rGr)rbÚ common_charss €rrcz/get_characteristic_subpattern..ÿsø€¤j°´CÓ&8Ò&N¸QÀ,Ð=NÐ&Nrcó0•—t|t«xr|‰vSrre)rbÚ common_namess €rrcz/get_characteristic_subpattern..sø€¬ °1´cÓ(:Ò(P¸qÀLÐ?PÐ(Pr)Úkey)rGÚlistr!r<Úrec_testr Úmax)Ú subpatternsÚsubpatterns_with_namesÚsubpatterns_with_common_namesÚsubpatterns_with_common_charsÚ subpatternrfrhs @@rr$r$ìsèù€ðô k¤4Ô (ØÐÜ ˆ;Ó˜ÒØ˜1‰~Ðð ÐØ$&Ð!Ú6€LØ$&Ð!Ø€LÛ!ˆ Ü Œx˜ Ñ$<Ó=Õ >Ü”8˜JÛNóPôQà-×4Ñ4°ZÕ@Ü”X˜jÛPóRôSà-×4Ñ4°ZÕ@ð'×-Ñ-¨jÕ9ð"ñØ,‰ Ù &Ø3‰ Ù &Ø3ˆ ä ˆ{¤Ô $Ð$rc#óŠK— |D]7}t|ttf«rt||«Ed{–—†Œ.||«–—Œ9y7Œ­wr)rGrjr"rk)ÚsequenceÚ test_funcrbs rrkrks@èø€ðã ˆÜ aœ$¤˜Ô 'Ü  9Ó-× -Ñ -á˜A“,Ó ñ à -ús‚,A®A¯Ar)ÚrÚpgen2rrÚpygramrrr@rNÚopmaprQr%rLrr#Úobjectr rCr$rkr3rrÚrzsZðØ2åß!ß3à€Ø €Ø ‰€Ø€ à €ØÐØ € ôUˆfôUónBòJ#%óJrlib2to3/__pycache__/main.cpython-312.opt-2.pyc000064400000027772152462633570014655 0ustar00Ë T—çhN.ãó— ddlmZmZddlZddlZddlZddlZddlZddlZddl m Z d„Z Gd„de j«Z d„Zd d „Zy) é)Úwith_statementÚprint_functionNé)Úrefactorc ó|— |j«}|j«}tj||||ddd¬«S)Nz (original)z (refactored)Ú)Úlineterm)Ú splitlinesÚdifflibÚ unified_diff)ÚaÚbÚfilenames ú%/usr/lib64/python3.12/lib2to3/main.pyÚ diff_textsrs>€Ø/Ø ‰ ‹€AØ ‰ ‹€AÜ × Ñ   1 h°Ø ,¨nØ)+ô -ð-ócó:‡—eZdZ dˆfd„ Zd„Zˆfd„Zd„ZˆxZS)ÚStdoutRefactoringToolc óà•— ||_||_|r2|jtj«s|tjz }||_||_||_tt|+|||«y©N) Ú nobackupsÚ show_diffsÚendswithÚosÚsepÚ_input_base_dirÚ _output_dirÚ_append_suffixÚsuperrÚ__init__) ÚselfÚfixersÚoptionsÚexplicitrrÚinput_base_dirÚ output_dirÚ append_suffixÚ __class__s €rr zStdoutRefactoringTool.__init__$sfø€ð ð$#ˆŒØ$ˆŒÙ  .×"9Ñ"9¼"¿&¹&Ô"AØ œbŸf™fÑ $ˆNØ-ˆÔØ%ˆÔØ+ˆÔÜ Ô# TÑ3°F¸GÀXÕNrcó€—|jj|||f«|jj|g|¢­i|¤Žyr)ÚerrorsÚappendÚloggerÚerror)r!ÚmsgÚargsÚkwargss rÚ log_errorzStdoutRefactoringTool.log_errorAs9€Ø ‰ ×јC  vÐ.Ô/؈ ‰ ×ј#Ð/ Ò/¨Ó/rcó•—|}|jrw|j|j«rAtjj |j|t |j«d«}ntd|›d|j›«‚|jr||jz }||k7rhtjj|«}tjj|«s|rtj|«|jd||«|jsQ|dz}tjj|«r tj|« tj"||«t$t&|R}|||||«|jst+j,|«||k7rt+j,||«yy#t $r|jd|«YŒŒwxYw#t $r|jd||«YŒ—wxYw)Nz filename z( does not start with the input_base_dir zWriting converted %s to %s.z.bakzCan't remove backup %szCan't rename %s to %s)rÚ startswithrrÚpathÚjoinÚlenÚ ValueErrorrÚdirnameÚisdirÚmakedirsÚ log_messagerÚlexistsÚremoveÚOSErrorÚrenamerrÚ write_fileÚshutilÚcopymode) r!Únew_textrÚold_textÚencodingÚ orig_filenamer&ÚbackupÚwriter(s €rr@z StdoutRefactoringTool.write_fileEs¾ø€Ø ˆ Ø × Ò Ø×"Ñ" 4×#7Ñ#7Ô8ÜŸ7™7Ÿ<™<¨×(8Ñ(8Ø(0´°T×5IÑ5IÓ1JÐ1KÐ(LóN‘õ!â)1°4×3GÒ3Gð"IóJðJð × Ò Ø ˜×+Ñ+Ñ +ˆHØ ˜HÒ $ÜŸ™Ÿ™¨Ó2ˆJÜ—7‘7—=‘= Ô,±Ü— ‘ ˜JÔ'Ø × Ñ Ð:¸MØ%ô 'à~Š~à Ñ&ˆFÜw‰w‰˜vÔ&ðGÜ—I‘I˜fÔ%ð LÜ— ‘ ˜( FÔ+ôÔ+¨TÑ=ˆÙ ˆh˜ (¨HÔ5Ø~Š~Ü O‰O˜F HÔ -Ø ˜HÒ $ä O‰O˜M¨8Õ 4ð %øôòGØ×$Ñ$Ð%=¸vÖFðGûôò LØ× Ñ Ð!8¸(ÀFÖKð Lús$ÅGÅG%ÇG"Ç!G"Ç%HÈHcó¤—|r|jd|«y|jd|«|jrst|||«} |jF|j5|D] }t |«Œt j j«ddd«y|D] }t |«Œyy#1swYyxYw#t$rtd|›d«YywxYw)NzNo changes to %sz Refactored %szcouldn't encode z's diff for your terminal) r;rrÚ output_lockÚprintÚsysÚstdoutÚflushÚUnicodeEncodeErrorÚwarn)r!ÚoldÚnewrÚequalÚ diff_linesÚlines rÚ print_outputz"StdoutRefactoringTool.print_outputls€٠Ø × Ñ Ð/°Õ :à × Ñ ˜_¨hÔ 7ØŠÜ'¨¨S°(Ó; ð Ø×'Ñ'Ð3Ø!×-Ó-Û(2 Ü % d¥ ð)3äŸJ™J×,Ñ,Ô.÷.Ð-ó %/˜DÜ! $Kñ%/ð÷.Ð-ûô*òÝÚ"ð%ô&áðús6ÁB4Á1B( B4ÂB4Â(B1Â-B4Â1B4Â4CÃC)rrr)Ú__name__Ú __module__Ú __qualname__r r1r@rVÚ __classcell__)r(s@rrrs%ø„ððBDõOò:0ô%5öNrrcó@—td|›tj¬«y)Nz WARNING: ©Úfile)rKrLÚstderr)r.s rrPrPs€Ý ™3Ð ¤s§z¡zÖ2rc óž ‡— tjd¬«}|jdddd¬«|jdd d gd ¬ «|jd ddddd¬«|jddd gd¬ «|jdddd¬«|jdddd¬«|jdddd¬«|jd d!dd"¬«|jd#dd$¬«|jd%d&dd'¬«|jd(d)dd*d+¬ «|jd,d-dd.d/d0¬1«|jd2d3dd4¬«|jd5dd.d/d6¬1«d*}i}|j|«\}}|jr#d7|d8<|j s t d9«d7|_|jr|js|jd:«|jr|js|jd;«|j s|jr t d<«|j s|jr|jd=«|jr3td>«tj‰«D] }t|«Œ|sy?|s7td@t j"¬A«tdBt j"¬A«yCdD|vr*d7}|j rtdEt j"¬A«yC|j$rd7|dF<|j&rd7|dG<|j(rt*j,nt*j.}t+j0dH|¬I«t+j2dJ«}t5tj6‰««} t5ˆfdK„|j8D««} t5«} |j:rHd*} |j:D]!} | dLk(rd7} Œ | j=‰dMz| z«Œ#| r| j?| «n| }n| j?| «}|jA| «}tBjDjG|«}|r]|jItBjJ«s>tBjDjM|«stBjDjO|«}|jr<|jQtBjJ«}|jSdN|j|«tUtW|«|tW| «|j|j ||j|j¬O«}|jXsV|r|j[«n3 |j||j |j\|j^«|jc«tetg|jX««S#tj`$rtdPt j"¬A«YywxYw)QNz2to3 [options] file|dir ...)Úusagez-dz--doctests_onlyÚ store_truezFix up doctests only)ÚactionÚhelpz-fz--fixr+z1Each FIX specifies a transformation; default: all)rbÚdefaultrcz-jz --processesÚstorerÚintzRun 2to3 concurrently)rbrdÚtypercz-xz--nofixz'Prevent a transformation from being runz-lz --list-fixeszList available transformationsz-pz--print-functionz0Modify the grammar so that print() is a functionz-ez--exec-functionz/Modify the grammar so that exec() is a functionz-vz --verbosezMore verbose loggingz --no-diffsz#Don't show diffs of the refactoringz-wz--writezWrite back modified filesz-nz --nobackupsFz&Don't write backups for modified filesz-oz --output-dirÚstrrzXPut output files in this directory instead of overwriting the input files. Requires -n.)rbrgrdrcz-Wz--write-unchanged-fileszYAlso write files even if no changes were required (useful with --output-dir); implies -w.z --add-suffixzuAppend this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files.TÚwrite_unchanged_filesz&--write-unchanged-files/-W implies -w.z%Can't use --output-dir/-o without -n.z"Can't use --add-suffix without -n.z@not writing files and not printing diffs; that's not very usefulzCan't use -n without -wz2Available transformations for the -f/--fix option:rz1At least one file or directory argument required.r\zUse --help to show usage.éÚ-zCan't write to stdin.rÚ exec_functionz%(name)s: %(message)s)ÚformatÚlevelz lib2to3.mainc3ó.•K—|] }‰dz|z–—Œy­w)ú.fix_N©)Ú.0ÚfixÚ fixer_pkgs €rÚ zmain..âsøèø€ÐL¹m°s˜ WÑ,¨sÕ2¹mùsƒÚallrpz7Output in %r will mirror the input directory %r layout.)r%r&r'z+Sorry, -j isn't supported on this platform.)4ÚoptparseÚ OptionParserÚ add_optionÚ parse_argsrirHrPr&rr-Ú add_suffixÚno_diffsÚ list_fixesrKrÚget_all_fix_namesrLr^rrlÚverboseÚloggingÚDEBUGÚINFOÚ basicConfigÚ getLoggerÚsetÚget_fixers_from_packageÚnofixrsÚaddÚunionÚ differencerr4Ú commonprefixrrr9r8ÚrstripÚinforÚsortedr*Úrefactor_stdinÚ doctests_onlyÚ processesÚMultiprocessingUnsupportedÚ summarizerfÚbool)rtr/ÚparserrÚflagsr#Úfixnamernr,Ú avail_fixesÚunwanted_fixesr$Ú all_presentrsÚ requestedÚ fixer_namesr%Úrts` rÚmainrž…s`ø€ðô× "Ñ "Ð)FÔ G€FØ ×ÑdÐ-°lØ1ðô3à ×Ñd˜G¨H¸bØNðôPà ×Ñd˜M°'À1Ø Ð'>ðô@à ×Ñd˜I¨hÀØDðôFà ×Ñd˜N°<Ø;ðô=à ×ÑdÐ.°|ØMðôOà ×ÑdÐ-°lØLðôNà ×Ñd˜K° Ø1ðô3à ×Ñl¨<Ø@ðôBà ×Ñd˜I¨lØ6ðô8à ×Ñd˜M°,ÈØCðôEà ×Ñd˜N°7ÀØ ð(NðôOð ×ÑdÐ5¸lðAðôBð ×Ñn¨W¸5È"ðGðôHð €NØ €EØ×%Ñ% dÓ+M€GˆTØ×$Ò$Ø)-ˆÐ%Ñ&Ø}Š}Ü Ð9Ô :؈Œ ð×Ò '×"3Ò"3Ø ‰ Ð<Ô=Ø×Ò '×"3Ò"3Ø ‰ Ð9Ô:à =Š=˜W×-Ò-Ü Ð OÔPØ =Š=˜W×.Ò.Ø ‰ Ð.Ô/Ø×ÒÜ ÐBÔCÜ×1Ñ1°)Ö<ˆGÜ 'Nð=áØÙ Ü ÐAÌÏ É ÕSÜ Ð)´· ± Õ;ØØ ˆd{ØˆØ =Š=Ü Ð)´· ± Õ ;ØØ×ÒØ"&ˆÐÑà×ÒØ!%ˆˆoÑð%Ÿ_š_ŒGMŠM´'·,±,€EÜ ×ÑÐ6¸eÕDÜ × Ñ ˜~Ó .€Fô”h×6Ñ6°yÓAÓB€KÜÓL¸g¿mºmÓLÓL€NÜ‹u€H؇{‚{؈ Ø—;”;ˆCØeŠ|Ø"‘ à— ‘ ˜Y¨Ñ0°3Ñ6Õ7ð ñ 4?K×%Ñ% hÔ/ÀH‰ à×%Ñ% hÓ/ˆ Ø×&Ñ& ~Ó6€KÜ—W‘W×)Ñ)¨$Ó/€NÙ˜~×6Ñ6´r·v±vÔ>Ü—‘— ‘ ˜nÔ-ôŸ™Ÿ™¨Ó8ˆØ×ÒØ'×.Ñ.¬r¯v©vÓ6ˆØ ‰ ÐMØ×&Ñ&¨ô 8ä Ü ;Ó  ¬¨xÓ(8Ø × Ñ  7×#3Ñ#3Ð3Ø)Ø×)Ñ)Ø!×,Ñ,ô  .€Bð 9Š9Ù Ø × Ñ Õ ð Ø— ‘ ˜D '§-¡-°×1FÑ1FØ#×-Ñ-ô/ð ‰ Œô ŒtB—I‘I‹Ó Ðøô×6Ñ6ò äÐCÜŸ:™:õ'áð  úsÔ;2VÖ.W × W r)Ú __future__rrrLrr r€rArwrrrÚMultiprocessRefactoringToolrrPržrqrrÚr¡sIðð÷6ã Û ÛÛÛ Ûåò-ôe˜H×@Ñ@ôeòN3ôL rlib2to3/__pycache__/refactor.cpython-312.opt-1.pyc000064400000102717152462633570015526 0ustar00Ë T—çhskãó —dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z mZddlmZddlmZmZdd lmZdd „ZGd „d e«Zd „Zd„Zd„Zd„Zd„ZGd„de«ZGd„de«Z Gd„de«Z!Gd„de «Z"y)zÛRefactoring framework. Used as a main program, this can refactor any number of files and/or recursively descend down directories. Imported as a module, this provides infrastructure to write your own refactoring tool. z#Guido van Rossum éN)Úchainé)ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Ú btm_matchercóÌ—t|ggdg«}g}tj|j«D]0\}}}|j d«sŒ|r|dd}|j |«Œ2|S)zEReturn a sorted list of all available fix names in the given package.Ú*Úfix_éN)Ú __import__ÚpkgutilÚ iter_modulesÚ__path__Ú startswithÚappend)Ú fixer_pkgÚ remove_prefixÚpkgÚ fix_namesÚfinderÚnameÚispkgs ú)/usr/lib64/python3.12/lib2to3/refactor.pyÚget_all_fix_namesrsj€ä Y  B¨¨Ó .€CØ€IÜ&×3Ñ3°C·L±LÖAшeØ ?‰?˜6Õ "ÙØ˜A˜BxØ × Ñ ˜TÕ "ð Bð Ðócó —eZdZy)Ú _EveryNodeN©Ú__name__Ú __module__Ú __qualname__©rrr!r!+ó„Ørr!cóâ—t|tjtjf«r|j€t ‚|jhSt|tj «r'|jrt|j«St ‚t|tj«r>t«}|jD]#}|D]}|jt|««ŒŒ%|Std|z«‚)zf Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. z$Oh no! I don't understand pattern %s) Ú isinstancer Ú NodePatternÚ LeafPatternÚtyper!ÚNegatedPatternÚcontentÚ_get_head_typesÚWildcardPatternÚsetÚupdateÚ Exception)ÚpatÚrÚpÚxs rr/r//sÁ€ô#œ×*Ñ*¬F×,>Ñ,>Ð?Ô@ð 8‰8Ð ÜÐ Ø—‘ˆzÐä#”v×,Ñ,Ô-Ø ;Š;Ü" 3§;¡;Ó/Ð /ÜÐä#”v×-Ñ-Ô.ä ‹EˆØ—”ˆAÛØ—‘œ¨Ó+Õ,ñððˆä Ð:¸SÑAÓ BÐBrcóX—tjt«}g}|D]|}|jr2 t |j«}|D]}||j |«ŒŒA|j||jj |«Œl|j |«Œ~ttjjj«tjj«D]}||j|«Œt|«S#t $r|j |«YŒ wxYw)z^ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. )Ú collectionsÚ defaultdictÚlistÚpatternr/rr!Ú _accept_typerr Úpython_grammarÚ symbol2numberÚvaluesÚtokensÚextendÚdict)Ú fixer_listÚ head_nodesÚeveryÚfixerÚheadsÚ node_types rÚ_get_headnode_dictrJKs€ô×(Ñ(¬Ó.€JØ €EÛˆØ =Š=ð 8Ü'¨¯ © Ó6ó"'IؘyÑ)×0Ñ0°Õ7ñ"'ð×!Ñ!Ð-ؘ5×-Ñ-Ñ.×5Ñ5°eÕ<à— ‘ ˜UÕ#ðôœ6×0Ñ0×>Ñ>×EÑEÓGÜ!×0Ñ0×7Ñ7ö9ˆ à9Ñ×$Ñ$ UÕ+ð9ô  Ó Ðøôò $Ø— ‘ ˜U×#ð $ús®D Ä D)Ä(D)cóL—t|d«Dcgc] }|dz|z‘Œ c}Scc}w)zN Return the fully qualified names for fixers in the package pkg_name. FÚ.)r)Úpkg_nameÚfix_names rÚget_fixers_from_packagerOds=€ô .¨h¸Ô>ó @Ù>ð s‰N˜XÓ %Ø>ñ @ð@ùò @s!có—|S©Nr&)Úobjs rÚ _identityrSks€Ø €Jrcó|‡—d}tjtj|«j«Šˆfd„}t t jtjt jh«}t«} |«\}}||vrŒ|t jk(r|rnöd}nñ|t jk(rÝ|dk(rØ|«\}}|t jk7s|dk7rn¸|«\}}|t jk7s|dk7rn•|«\}}|t jk(r|dk(r |«\}}|t jk(rT|j|«|«\}}|t jk7s|dk7rn |«\}}|t jk(rŒRnnŒt |«S#t$r Yt |«SwxYw) NFcó.•—t‰«}|d|dfS)Nrr)Únext)ÚtokÚgens €rÚadvancez(_detect_future_features..advancersø€Ü3‹iˆØ1‰vs˜1‘vˆ~ÐrTÚfromÚ __future__ÚimportÚ(Ú,)rÚgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetrÚNEWLINEÚNLÚCOMMENTr1ÚSTRINGÚNAMEÚOPÚaddÚ StopIteration)ÚsourceÚhave_docstringrYÚignoreÚfeaturesÚtpÚvaluerXs @rÚ_detect_future_featuresrros‡ø€Ø€NÜ × "Ñ "¤2§;¡;¨vÓ#6×#?Ñ#?Ó @€CôôœŸ ™ ¤x§{¡{´E·M±MÐBÓ C€FÜ‹u€Hð ØÙ› ‰IˆBØV‰|ØØ”u—|‘|Ò#Ù!ØØ!%‘Ø”u—z‘zÒ! e¨v¢oÙ#›I‘ EØœŸ™Ò# u° Ò'<ØÙ#›I‘ EØœŸ™Ò# u°Ò'8ØÙ#›I‘ EØœŸ™’> e¨s¢lÙ '£ ‘IB˜ØœEŸJ™JÒ&Ø—L‘L Ô'Ù '£ ‘IB˜ØœUŸX™X’~¨°#ªØÙ '£ ‘IB˜ð œEŸJ™JÔ&ðñ3ô8 XÓ Ðøô ò Ø Ü XÓ Ðð úsÁ>DF%ÆF%Æ% F;Æ:F;có—eZdZdZy)Ú FixerErrorzA fixer could not be loaded.N)r#r$r%Ú__doc__r&rrrtrt—s„Ú&rrtcó¾—eZdZddddœZdZdZdd„Zd„Zd„Zd „Z d „Z d „Z dd „Z dd „Z d„Zdd„Zd„Zd d„Zd„Zd„Z d!d„Zd"d„ZdZdZd„Zd„Zd„Zd„Zd„Zd„Zy)#ÚRefactoringToolF)Úprint_functionÚ exec_functionÚwrite_unchanged_filesÚFixrNcóÜ—||_|xsg|_|jj«|_||jj |«t jj«|_|jdr|jjd=n&|jdr|jjd=|jjd«|_ g|_ tjd«|_g|_d|_t%j&|jt(j*|j¬ «|_|j-«\|_|_g|_t5j6«|_g|_g|_t?|j0|j.«D]~}|j@r|j8jC|«Œ+||j.vr|j:jE|«ŒU||j0vsŒd|j<jE|«Œ€tG|j:«|_$tG|j<«|_%y) zÑInitializer. Args: fixer_names: a list of fixers to import options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. NrxÚprintryÚexecrzrwF)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr2r r>ÚgrammarÚkeywordsÚgetrzÚerrorsÚloggingÚ getLoggerr€Ú fixer_logÚwroterÚDriverr rÚ get_fixersÚ pre_orderÚ post_orderÚfilesÚbmÚ BottomMatcherÚBMÚ bmi_pre_orderÚbmi_post_orderrÚ BM_compatibleÚ add_fixerrrJÚbmi_pre_order_headsÚbmi_post_order_heads)ÚselfÚ fixer_namesr…r‚rGs rÚ__init__zRefactoringTool.__init__¤sÛ€ð"ˆŒ Ø š BˆŒ Ø×,Ñ,×1Ñ1Ó3ˆŒ Ø Ð Ø L‰L× Ñ  Ô (Ü×,Ñ,×1Ñ1Ó3ˆŒ à <‰<Ð(Ò )Ø— ‘ ×%Ñ% gÑ.Ø \‰\˜/Ò *Ø— ‘ ×%Ñ% fÐ-ð &*§\¡\×%5Ñ%5Ð6MÓ%NˆÔ"؈Œ Ü×'Ñ'Ð(9Ó:ˆŒ ؈ŒØˆŒ Ü—m‘m D§L¡LÜ,2¯N©NØ+/¯;©;ô8ˆŒ ð+/¯/©/Ó*;Ñ'ˆŒ˜œðˆŒ ä×"Ñ"Ó$ˆŒØˆÔØ ˆÔä˜4Ÿ?™?¨D¯N©NÖ;ˆEØ×"Ò"Ø—‘×!Ñ! %Õ(ð˜$Ÿ.™.Ñ(Ø×"Ñ"×)Ñ)¨%Õ0ؘ$Ÿ/™/Ò)Ø×#Ñ#×*Ñ*¨5Õ1ð<ô$6°d×6HÑ6HÓ#IˆÔ Ü$6°t×7JÑ7JÓ$KˆÕ!rc óÚ—g}g}|jD]w}t|iidg«}|jdd«d}|j|j«r|t |j«d}|j d«}|jdj|Dcgc]}|j«‘Œc}«z} t||«} | |j|j«} | jr0|jd ur"||jvr|j!d |«Œ |j#d |«| j$d k(r|j'| «Œ@| j$d k(r|j'| «Œbtd| j$z«‚t)j*d«} |j-| ¬«|j-| ¬«||fScc}w#t$rtd|›d|›«d‚wxYw)aInspects the options to load the requested patterns and handlers. Returns: (pre_order, post_order), where pre_order is the list of fixers that want a pre-order AST traversal, and post_order is the list that want post-order traversal. r rLréÿÿÿÿNÚ_Úz Can't find TzSkipping optional fixer: %szAdding transformation: %sÚpreÚpostzIllegal fixer order: %rÚ run_order©Úkey)rrÚrsplitrÚ FILE_PREFIXÚlenÚsplitÚ CLASS_PREFIXÚjoinÚtitleÚgetattrÚAttributeErrorrtr…rŒr‚Ú log_messageÚ log_debugÚorderrÚoperatorÚ attrgetterÚsort) rœÚpre_order_fixersÚpost_order_fixersÚ fix_mod_pathÚmodrNÚpartsr6Ú class_nameÚ fix_classrGÚkey_funcs rrzRefactoringTool.get_fixersÛsÍ€ðÐØÐØ ŸKKˆLܘ\¨2¨r°C°5Ó9ˆCØ#×*Ñ*¨3°Ó2°2Ñ6ˆHØ×"Ñ" 4×#3Ñ#3Ô4Ø#¤C¨×(8Ñ(8Ó$9Ð$:Ð;Ø—N‘N 3Ó'ˆEØ×*Ñ*¨R¯W©WÉÓ5OÉÀA°a·g±gµiÈÑ5OÓ-PÑPˆJð XÜ# C¨Ó4 ñ˜dŸl™l¨D¯N©NÓ;ˆEØ~Š~ $§-¡-°tÑ";Ø ¨¯ © Ñ5Ø× Ñ Ð!>ÀÔIÙà N‰NÐ6¸Ô AØ{‰{˜eÒ#Ø ×'Ñ'¨Ö.Ø—‘ Ò&Ø!×(Ñ(¨Ö/ä Ð!:¸U¿[¹[Ñ!HÓIÐIð/(ô2×&Ñ& {Ó3ˆØ×Ñ (ÐÔ+Ø×Ñ 8ÐÔ,Ø Ð"3Ð4Ð4ùò-6Pøô"ò XÝ ²xÁÐ!LÓMÐSWÐWð XúsÂG Â8 GÇG*có—‚)zCalled when an error occurs.r&)rœÚmsgÚargsÚkwdss rÚ log_errorzRefactoringTool.log_errors€à rcóH—|r||z}|jj|«y)zHook to log a message.N)r€Úinfo©rœrÀrÁs rr±zRefactoringTool.log_messages €á ؘ‘*ˆCØ ‰ ×јÕrcóH—|r||z}|jj|«yrQ)r€ÚdebugrÆs rr²zRefactoringTool.log_debug s €Ù ؘ‘*ˆCØ ‰ ×ј#Õrcó—y)zTCalled with the old version, new version, and filename of a refactored file.Nr&)rœÚold_textÚnew_textÚfilenameÚequals rÚ print_outputzRefactoringTool.print_outputs€ð rcóž—|D]H}tjj|«r|j|||«Œ6|j |||«ŒJy)z)Refactor a list of files and directories.N)ÚosÚpathÚisdirÚ refactor_dirÚ refactor_file)rœÚitemsÚwriteÚ doctests_onlyÚ dir_or_files rÚrefactorzRefactoringTool.refactorsB€ó!ˆKÜw‰w}‰}˜[Ô)Ø×!Ñ! +¨u°mÕDà×"Ñ" ;°°}ÕEñ !rcó—tjdz}tj|«D]Ï\}}}|jd|«|j «|j «|D]m}|j d«rŒtj j|«d|k(sŒ;tj j||«} |j| ||«Œo|D cgc]} | j d«rŒ| ‘Œc} |ddŒÑycc} w)zÄDescends down a directory and refactor every Python file found. Python files are assumed to have a .py extension. Files and subdirectories starting with '.' are skipped. ÚpyzDescending into %srLrN) rÐÚextsepÚwalkr²r¶rrÑÚsplitextr­rÔ) rœÚdir_namerÖr×Úpy_extÚdirpathÚdirnamesÚ filenamesrÚfullnameÚdns rrÓzRefactoringTool.refactor_dir sÑ€ô—‘˜TÑ!ˆÜ,.¯G©G°HÖ,=Ñ (ˆGX˜yØ N‰NÐ/°Ô 9Ø M‰MŒOØ N‰NÔ Û!ØŸ™¨Õ,Ü—G‘G×$Ñ$ TÓ*¨1Ñ-°Ó7Ü!Ÿw™wŸ|™|¨G°TÓ:HØ×&Ñ& x°¸ ÕFð "ñ )1ÓK© "¸¿ ¹ ÀcÕ8Jš2¨ÑKˆH‘Q‰Kñ->ùòLs ÃC<Ã/C<có€— t|d«} tj|j «d}|j «tj|d|d¬«5}|j«|fcddd«S#t$r}|jd||«Yd}~yd}~wwxYw#|j «wxYw#1swYyxYw) zG Do our best to decode a Python source file correctly. ÚrbzCan't open %s: %sN©NNrr5r¢©ÚencodingÚnewline) ÚopenÚOSErrorrÃrÚdetect_encodingrbÚcloser`Úread)rœrÌÚfÚerrrês rÚ_read_python_sourcez#RefactoringTool._read_python_source4sž€ð ÜX˜tÓ$ˆAð Ü×/Ñ/°· ± Ó;¸AÑ>ˆHà G‰GŒIÜ W‰WX˜s¨X¸rÕ BÀaØ—6‘6“8˜XÐ%÷CÑ Bøôò Ø N‰NÐ.°¸#Ô >Üûð ûð G‰GIúß BÐ Bús.‚ A6"BÁB4Á6 BÁ?BÂBÂB1Â4B=có¼—|j|«\}}|€y|dz }|r^|jd|«|j||«}|js||k7r|j |||||«y|jd|«y|j ||«}|js|r.|j r"|j t|«dd|||¬«y|jd|«y)zRefactors a file.NÚ zRefactoring doctests in %szNo doctest changes in %sr )rÖrêzNo changes in %s)rór²Úrefactor_docstringrzÚprocessed_fileÚrefactor_stringÚ was_changedÚstr)rœrÌrÖr×ÚinputrêÚoutputÚtrees rrÔzRefactoringTool.refactor_fileDsÜ€à×2Ñ2°8Ó<‰ˆˆxØ ˆ=à Ø ‰ ˆÙ Ø N‰NÐ7¸Ô BØ×,Ñ,¨U°HÓ=ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨H°e¸UÀHÕMà—‘Ð9¸8ÕDà×'Ñ'¨¨xÓ8ˆDØ×)Ò)©d°t×7GÒ7Gà×#Ñ#¤C¨£I¨c¨r N°HØ*/¸(ð$õDð—‘Ð1°8Õã à"&§,¡,ˆDK‰KÕ ûð  ûð #'§,¡,ˆDK‰KÕ ús)°B C*Â(C%ÃC-Ã%C*Ã*C-Ã-D có¬—tjj«}|rZ|jd«|j |d«}|j s||k7r|j |d|«y|jd«y|j|d«}|j s|r)|jr|j t|«d|«y|jd«y)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) ÚsysÚstdinrðr²rörzr÷rørùrú)rœr×rûrürýs rÚrefactor_stdinzRefactoringTool.refactor_stdinvsª€Ü— ‘ —‘Ó ˆÙ Ø N‰NÐ:Ô ;Ø×,Ñ,¨U°IÓ>ˆFØ×)Ò)¨V°uª_Ø×#Ñ# F¨I°uÕ=à—‘Ð<Õ=à×'Ñ'¨¨yÓ9ˆDØ×)Ò)©d°t×7GÒ7GØ×#Ñ#¤C¨£I¨y¸%Õ@à—‘Ð4Õ5rcóà—t|j|j«D]}|j||«Œ|j |j |j««|j |j |j««|jj|j««}t|j««rÎ|jjD]™}||vsŒ ||sŒ||jtjj d¬«|j"r-||jtjj$¬«t'||«D]}|||vr||j)|« t+|«|j.r||j.vrŒF|j1|«}|sŒZ|j3||«}|€Œo|j5|«|j«D]0}|j.sg|_|j.j7|«Œ2|jj|j««}|D]"} | |vrg|| <|| j9|| «Œ$ŒŒœt|j««rŒÎt|j|j«D]}|j;||«Œ|j<S#t,$rYŒƒwxYw)aÏRefactors a parse tree (modifying the tree in place). For compatible patterns the bottom matcher module is used. Otherwise the tree is traversed node-to-node for matches. Args: tree: a pytree.Node instance representing the root of the tree to be refactored. name: a human-readable name for this tree. Returns: True if the tree was modified, False otherwise. T)r§Úreverser¦)rrr‘Ú start_treeÚ traverse_byršr›r•ÚrunÚleavesÚanyr@rr¶r ÚBaseÚdepthÚkeep_line_orderÚ get_linenor;ÚremoverÚ ValueErrorÚfixers_appliedÚmatchÚ transformÚreplacerrBÚ finish_treerù) rœrýrrGÚ match_setÚnodeÚresultsÚnewÚ new_matchesÚfxrs rrzRefactoringTool.refactor_tree†sv€ô ˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜T 4Õ (ð<ð ×ј×1Ñ1°4·>±>Ó3CÔDØ ×ј×2Ñ2°D·O±OÓ4EÔFð—G‘G—K‘K § ¡ £ Ó.ˆ ä)×"Ñ"Ó$Õ%ØŸ™ŸØ˜IÒ%¨)°EÓ*:à˜eÑ$×)Ñ)¬f¯k©k×.?Ñ.?ÈÐ)ÔNà×,Ò,ð" %Ñ(×-Ñ-´&·+±+×2HÑ2HÐ-ÔIä $ Y¨uÑ%5× 6˜Ø 9¨UÑ#3Ñ3Ø% eÑ,×3Ñ3°DÔ9ð%Ü% dœOð  ×.Ò.°5¸D×Ò+>Ø>@¨Ô(;Ø$(×$7Ñ$7×$>Ñ$>¸uÕ$Eð -=ð/3¯g©g¯k©k¸#¿*¹*»,Ó.G  Û+6 CØ+.°)Ñ+;Ø79¨ °#©à$-¨c¡N×$9Ñ$9¸+ÀcÑ:JÕ$Kò ,7òA!7ð(ô)×"Ñ"Ó$Ö%ôb˜4Ÿ>™>¨4¯?©?Ö;ˆEØ × Ñ ˜d DÕ )ð<à×ÑÐøôE *ò%ò%ð%úsÆ K Ë K-Ë,K-có¸—|sy|D]R}||jD]>}|j|«}|sŒ|j||«}|€Œ,|j|«|}Œ@ŒTy)aTraverse an AST, applying a set of fixers to each node. This is a helper method for refactor_tree(). Args: fixers: a list of fixer instances. traversal: a generator that yields AST nodes. Returns: None N)r,rrr)rœrÚ traversalrrGrrs rr zRefactoringTool.traverse_byÕs^€ñØ ÛˆDØ § ¡ Ô*ØŸ+™+ dÓ+ÚØŸ/™/¨$°Ó8Cؑ؟ ™  SÔ)Ø"™ñ +ñrcó2—|jj|«|€|j|«d}|€y||k(}|j||||«|r|j d|«|j sy|r|j ||||«y|j d|«y)zR Called when a file has been refactored and there may be changes. NrzNo changes to %szNot writing changes to %s)r’rrórÎr²rzÚ write_file)rœrËrÌrÊrÖrêrÍs rr÷zRefactoringTool.processed_fileìsš€ð ‰ ×ј(Ô#Ø Ð Ø×/Ñ/°Ó9¸!Ñ<ˆHØÐØØ˜HÑ$ˆØ ×ј( H¨h¸Ô>Ù Ø N‰NÐ-¨xÔ 8Ø×-Ò-ØÙ Ø O‰O˜H h°¸(Õ Cà N‰NÐ6¸Õ Arcó`— tj|d|d¬«}|5 |j |«ddd«|j d|«d|_y#t$r}|jd||«Yd}~yd}~wwxYw#t$r}|jd||«Yd}~Œld}~wwxYw#1swYŒuxYw) zÑWrites a string to a file. It first shows a unified diff between the old text and the new text, and then rewrites the file; the latter is only done if the write option is set. Úwr¢rézCan't create %s: %sNzCan't write %s: %szWrote changes to %sT)r`rìrírÃrÖr²r)rœrËrÌrÊrêÚfpròs rr$zRefactoringTool.write_files¤€ð Ü—‘˜ 3°À2ÔFˆBò ð DØ—‘˜Ô"÷ð ‰Ð,¨hÔ7؈ øôò Ø N‰NÐ0°(¸CÔ @Ü ûð ûôò DØ—‘Ð3°X¸s×CÑCûð Dú÷ˆRúsE‚AB$ŸA;Á A8ÁA3Á3A8Á; B!ÂBÂB$ÂB!Â!B$Â$B-z>>> z... c óÄ—g}d}d}d}d}|jd¬«D] }|dz }|j«j|j«rK|#|j |j ||||««|}|g}|j |j«} |d| }Œ}|S|j||jz«s#|||jj«zdzk(r|j|«ŒÒ|#|j |j ||||««d}d}|j|«Œ|#|j |j ||||««dj|«S)aËRefactors a docstring, looking for doctests. This returns a modified version of the input string. It looks for doctests, which start with a ">>>" prompt, and may be continued with "..." prompts, as long as the "..." is indented the same as the ">>>". (Unfortunately we can't use the doctest module's parser, since, like most parsers, it is not geared towards preserving the original source.) NrT©Úkeependsrrõr¢) Ú splitlinesÚlstriprÚPS1rBÚrefactor_doctestÚfindÚPS2Úrstriprr­) rœrûrÌÚresultÚblockÚ block_linenoÚindentÚlinenoÚlineÚis rröz"RefactoringTool.refactor_docstringsg€ðˆØˆØˆ ؈؈Ø×$Ñ$¨dÐ$×3ˆDØ a‰KˆFØ{‰{‹}×'Ñ'¨¯©Ô1ØÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKà% ؘؗI‘I˜dŸh™hÓ'ؘb˜q˜‘ØÐ$Ø—?‘? 6¨D¯H©HÑ#4Ô5ؘ6 D§H¡H§O¡OÓ$5Ñ5¸Ñ<Ò<Ø— ‘ ˜TÕ"àÐ$Ø—M‘M $×"7Ñ"7¸¸|Ø8>Àó#JôKàØØ— ‘ ˜dÖ#ð)4ð* Ð Ø M‰M˜$×/Ñ/°°|Ø06¸óBô Càw‰wv‹Ðrcó¦— |j|||«}|j||«r“t|«jd¬«}|d|dz ||dz d}} |djd«s |dxxdz cc<||jz|j!d «zg}|r#||Dcgc]}||j"z|z‘Œc}z }|S#t$r†}|jjtj «r(|D]#}|j d|jd««Œ%|jd|||jj|«|cYd}~Sd}~wwxYwcc}w) zÞRefactors one doctest. A doctest is given as a block of lines, the first of which starts with ">>>" (possibly indented), while the remaining lines start with "..." (identically indented). z Source: %srõz+Can't parse docstring in %s line %s: %s: %sNTr)rr r)Ú parse_blockr3r€Ú isEnabledForrŠÚDEBUGr²r1rÃrr#rrúr+Úendswithr-Úpopr0) rœr3r6r5rÌrýròr7rÚclippeds rr.z RefactoringTool.refactor_doctestDsC€ð Ø×#Ñ# E¨6°6Ó:ˆDð × Ñ ˜d HÔ -Üd“)×&Ñ&°Ð&Ó5ˆCà˜y  q¡˜>¨3¨v°a©x¨y¨>SˆGàr‘7×#Ñ# DÔ)ØB“˜4‘“ؘdŸh™hÑ&¨¯©°«Ñ3Ð4ˆEÙØ¹sÓC¹s°t˜& 4§8¡8Ñ+¨dÓ2¸sÑCÑC؈ øô#ò Ø{‰{×'Ñ'¬¯ © Ô6Û!DØ—N‘N <°·±¸TÓ1BÕCð"à N‰NÐHØ# V¨S¯]©]×-CÑ-CÀSô JàLûð  üò Ds$‚B<ÂEÂ< E ÃA;EÅE ÅE cóX—|jrd}nd}|js|jd|«n4|jd|«|jD]}|j|«Œ|jr3|jd«|jD]}|j|«Œ|jr{t |j«dk(r|jd«n%|jdt |j««|jD]\}}}|j|g|¢­i|¤ŽŒyy) NÚwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)rr’r±rŒr‰rª)rœrAÚfileÚmessagerÀrÁrÂs rÚ summarizezRefactoringTool.summarizeasþ€Ø :Š:؉DàˆDØzŠzØ × Ñ Ð4°dÕ ;à × Ñ Ð6¸Ô =ØŸ œ Ø× Ñ  Õ&ð#à >Š>Ø × Ñ ÐCÔ DØŸ>œ>Ø× Ñ  Õ)ð*à ;Š;Ü4—;‘;Ó 1Ò$Ø× Ñ Ð!5Õ6à× Ñ Ð!8¼#¸d¿k¹kÓ:JÔKØ#'§;¤;‘T˜4Ø × Ñ  Ð4 tÒ4¨tÓ4ñ$/ð rcó|—|jj|j|||««}t«|_|S)z³Parses a block into a tree. This is necessary to get correct line number / offset information in the parser diagnostics and embedded into the parse tree. )rÚ parse_tokensÚ wrap_toksrcr)rœr3r6r5rýs rr:zRefactoringTool.parse_blockxs4€ð {‰{×'Ñ'¨¯©°u¸fÀfÓ(MÓNˆÜ(›{ˆÔ؈ rc#óÊK—tj|j||«j«}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| f–—Œ-y­w)z;Wraps a tokenize stream to systematically modify start/end.rN)rr_Ú gen_linesÚ__next__) rœr3r6r5rAr,rqÚline0Úcol0Úline1Úcol1Ú line_texts rrGzRefactoringTool.wrap_toks‚s}èø€ä×)Ñ)¨$¯.©.¸ÀÓ*G×*PÑ*PÓQˆÛDJÑ @ˆD%™˜% © ¨°°yØ V˜a‘ZÑ ˆEØ V˜a‘ZÑ ˆEð ˜  t˜}¨u°d¨m¸YÐFÓ FñEKùs‚A!A#c#óK—||jz}||jz}|}|D]R}|j|«r|t|«d–—n,||j «dzk(rd–—nt d|›d|›«‚|}ŒT d–—Œ­w)z–Generates lines as expected by tokenize from a list of lines. This strips the first len(indent + self.PS1) characters off each line. Nrõzline=z , prefix=r¢)r-r0rrªr1ÚAssertionError)rœr3r5Úprefix1Úprefix2Úprefixr7s rrIzRefactoringTool.gen_linessŒèø€ð ˜4Ÿ8™8Ñ#ˆØ˜4Ÿ8™8Ñ#ˆØˆÛˆD؉˜vÔ&Øœ3˜v›;˜<Ð(Ó(ؘŸ™›¨4Ñ/Ò/Ø“ å$ºTÁ6Ð%JÓKÐK؉FððØŠHðùs‚A>Brè)FF)F)NFNrQ)r#r$r%rƒr¬r©ržrrÃr±r²rÎrÙrÓrórÔrørrr r÷r$r-r0rör.rDr:rGrIr&rrrwrw›s­„à+0Ø).Ø27ñ9Ðð€LØ€Kó3Lòn&5òPòò ò  ó FóLò(&ó =ò.ó66ò M ò^#ð.GLØ $óBó*ð* €CØ €Cò)òVò:5ò.ò Górrwcó —eZdZy)ÚMultiprocessingUnsupportedNr"r&rrrVrV¤r'rrVcóB‡—eZdZˆfd„Z dˆfd„ Zˆfd„Zˆfd„ZˆxZS)ÚMultiprocessRefactoringToolcóH•—tt| |i|¤Žd|_d|_yrQ)ÚsuperrXržÚqueueÚ output_lock©rœrÁÚkwargsrs €rržz$MultiprocessRefactoringTool.__init__ªs'ø€Ü Ô)¨4Ñ9¸4ÐJÀ6ÒJ؈Œ ؈ÕrcóŽ•—|dk(rtt| |||«S ddl}|j td«‚|j«|_|j«|_ t|«Dcgc]}|j|j¬«‘Œ }} |D]}|j«Œtt| |||«|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_y#t$rt ‚wxYwcc}w#|j j«t|«D]}|j j!d«Œ|D]#}|j#«sŒ|j«Œ%d|_wxYw)Nrrz already doing multiple processes)Útarget)rZrXrÙÚmultiprocessingÚ ImportErrorrVr[Ú RuntimeErrorÚ JoinableQueueÚLockr\ÚrangeÚProcessÚ_childÚstartr­ÚputÚis_alive) rœrÕrÖr×Ú num_processesrar8Ú processesr6rs €rrÙz$MultiprocessRefactoringTool.refactor¯s”ø€à ˜AÒ ÜÔ4°dÑDØu˜mó-ð -ð -Û "ð :‰:Ð !ÜÐAÓBÐ BØ$×2Ñ2Ó4ˆŒ Ø*×/Ñ/Ó1ˆÔä# MÔ2ó4Ù2˜ð%×,Ñ,°D·K±KÐ,Õ@Ø2ð ð4ð ÛØ—‘• ðä Ô-¨tÑ =¸eÀUØ>Kô Mð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJøô)ò -Ü,Ð ,ð -üò 4øð J‰JO‰OÔ Ü˜=Ö)Ø— ‘ —‘˜tÕ$ð*ãØ—:‘:•<Ø—F‘F•HððˆDJús$D6Á/#E Â,EÄ6EÅAGÆ*Gcó•—|jj«}|Q|\}} tt||i|¤Ž|jj «|jj«}|ŒPyy#|jj «wxYwrQ)r[rˆrZrXrÔÚ task_done)rœÚtaskrÁr^rs €rrhz"MultiprocessRefactoringTool._childÌs€ø€Øz‰z~‰~ÓˆØÐ؉LˆD&ð 'ÜÔ1°4ÑFØð%Ø#ò%ð— ‘ ×$Ñ$Ô&Ø—:‘:—>‘>Ó#ˆDðÓøð — ‘ ×$Ñ$Õ&ús ¤A0Á0B có~•—|j|jj||f«ytt||i|¤ŽSrQ)r[rjrZrXrÔr]s €rrÔz)MultiprocessRefactoringTool.refactor_file×sAø€Ø :‰:Ð !Ø J‰JN‰N˜D &˜>Õ *äÔ4°dÑIØð!Øñ!ð !r)FFr)r#r$r%ržrÙrhrÔÚ __classcell__)rs@rrXrX¨s$ø„ô ð :?Ø õô: $÷!ð!rrX)T)#ruÚ __author__r`rÐrrrŠr´r9Ú itertoolsrÚpgen2rrrÚ fixer_utilrr¢r r r r“rr3r!r/rJrOrSrrrtÚobjectrwrVrXr&rrÚrxsœðñð3€ ó Û ÛÛ ÛÛÛÝ÷+Ñ*Ý!ßÝó ô ô òCò8ò2@òò%ôP'ô'ôFfôFôR  ô ô4! /õ4!rlib2to3/__pycache__/__init__.cpython-312.opt-1.pyc000064400000000532152462633570015450 0ustar00Ë T—çhœãó6—ddlZejded¬«y)éNzGlib2to3 package is deprecated and may not be able to parse Python 3.10+é)Ú stacklevel)ÚwarningsÚwarnÚDeprecationWarning©óú)/usr/lib64/python3.12/lib2to3/__init__.pyÚr s!ðÛð€‡ ØMØØör lib2to3/__pycache__/fixer_base.cpython-312.opt-1.pyc000064400000017277152462633570016036 0ustar00Ë T—çh"ãó`—dZddlZddlmZddlmZddlmZGd„de«Z Gd „d e «Z y) z2Base class for fixers (optional, but recommended).éNé)ÚPatternCompiler)Úpygram)Údoes_tree_importcóÌ—eZdZdZdZdZdZdZdZe jd«Z e «Z dZdZdZdZdZdZej*Zd„Zd„Zd „Zd „Zd „Zdd „Zd „Zdd„Zd„Zd„Z d„Z!y)ÚBaseFixaOptional base class for fixers. The subclass name must be FixFooBar where FooBar is the result of removing underscores and capitalizing the words of the fix name. For example, the class name for a fixer named 'has_key' should be FixHasKey. NrÚpostFécó@—||_||_|j«y)aInitializer. Subclass may override. Args: options: a dict containing the options passed to RefactoringTool that could be used to customize the fixer through the command line. log: a list to append warnings and other messages to. N)ÚoptionsÚlogÚcompile_pattern)Úselfr r s ú+/usr/lib64/python3.12/lib2to3/fixer_base.pyÚ__init__zBaseFix.__init__/s€ðˆŒ ؈ŒØ ×ÑÕócó†—|j5t«}|j|jd¬«\|_|_yy)z–Compiles self.PATTERN into self.pattern. Subclass may override if it doesn't want to use self.{pattern,PATTERN} in .match(). NT)Ú with_tree)ÚPATTERNrrÚpatternÚ pattern_tree)rÚPCs rrzBaseFix.compile_pattern;sE€ð <‰<Ð #Ü Ó"ˆBØ.0×.@Ñ.@ÀÇÁØKOð/Aó/QÑ +ˆDŒL˜$Õ+ð $rcó—||_y)zOSet the filename. The main refactoring tool should call this. N)Úfilename)rrs rÚ set_filenamezBaseFix.set_filenameFs €ð !ˆ rcóJ—d|i}|jj||«xr|S)aReturns match for a given parse tree node. Should return a true or false object (not necessarily a bool). It may return a non-empty dict of matching sub-nodes as returned by a matching pattern. Subclass may override. Únode)rÚmatch©rrÚresultss rrz BaseFix.matchMs)€ð˜4.ˆØ|‰|×!Ñ! $¨Ó0Ò<°WЊ>Ø"ˆDŒNØ H‰HO‰OÐ0°4·=±=Ñ@Ô AØ ‰‰˜Õ rcóª—|j«}|j«}d|_d}|j|||fz«|r|j|«yy)aWarn the user that a given chunk of code is not valid Python 3, but that it cannot be converted automatically. First argument is the top-level node for the code in question. Optional second argument is why it can't be converted. ÚzLine %d: could not convert: %sN)Ú get_linenoÚcloneÚprefixr1)rrÚreasonÚlinenoÚ for_outputÚmsgs rÚcannot_convertzBaseFix.cannot_convertzsV€ð—‘Ó"ˆØ—Z‘Z“\ˆ ؈ ÔØ.ˆØ ×ј ¨ Ð3Ñ3Ô4Ù Ø × Ñ ˜VÕ $ð rcóP—|j«}|jd||fz«y)zàUsed for warning the user about possible uncertainty in the translation. First argument is the top-level node for the code in question. Optional second argument is why it can't be converted. z Line %d: %sN)r4r1)rrr7r8s rÚwarningzBaseFix.warning‰s(€ð—‘Ó"ˆØ ×ј¨&°&Ð)9Ñ9Õ:rcóŠ—|j|_|j|«tjd«|_d|_y)zîSome fixers need to maintain tree-wide state. This method is called once, at the start of tree fix-up. tree - the root node of the tree to be processed. filename - the name of the file the tree came from. rTN)r%rÚ itertoolsÚcountr(r.©rÚtreers rÚ start_treezBaseFix.start_tree“s4€ðŸ/™/ˆŒØ ×ј(Ô#Ü —‘ qÓ)ˆŒ ؈rcó—y)zóSome fixers need to maintain tree-wide state. This method is called once, at the conclusion of tree fix-up. tree - the root node of the tree to be processed. filename - the name of the file the tree came from. N©rAs rÚ finish_treezBaseFix.finish_treeŸs€ð r)Úxxx_todo_changeme©N)"Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrr rr?r@r(Úsetr%ÚorderÚexplicitÚ run_orderÚ _accept_typeÚkeep_line_orderÚ BM_compatiblerÚpython_symbolsÚsymsrrrrr#r,r1r;r=rCrFrErrrrsž„ñð€GØ€GØ€LØ€GØ€H؈io‰o˜aÓ €GÙ“€JØ €EØ€HØ€Ià€Lð€Oà€Mð × Ñ €Dò ò Qò!ò =ò$ó ò!ó %ò;ò ó rrcó,‡—eZdZdZdZˆfd„Zd„ZˆxZS)ÚConditionalFixz@ Base class for fixers which not execute if an import is found. Ncó4•—tt| |Žd|_yrH)ÚsuperrWrCÚ _should_skip)rÚargsÚ __class__s €rrCzConditionalFix.start_tree¯sø€Ü Œn˜dÑ.°Ñ5Ø ˆÕrcóÖ—|j |jS|jjd«}|d}dj|dd«}t |||«|_|jS)NÚ.éÿÿÿÿ)rZÚskip_onÚsplitÚjoinr)rrÚpkgr+s rÚ should_skipzConditionalFix.should_skip³sh€Ø × Ñ Ð (Ø×$Ñ$Ð $Øl‰l× Ñ  Ó%ˆØ2‰wˆØh‰hs˜3˜BxÓ ˆÜ,¨S°$¸Ó=ˆÔØ× Ñ Ð r)rIrJrKrLr`rCrdÚ __classcell__)r\s@rrWrW©sø„ÙJð€Gô!ö!rrW) rLr?Úpatcomprr3rÚ fixer_utilrÚobjectrrWrErrÚris5ðñ9óõ%ÝÝ(ôX ˆfôX ôv!Wõ!rlib2to3/__pycache__/patcomp.cpython-312.opt-1.pyc000064400000022302152462633570015353 0ustar00Ë T—çhŽãóÚ—dZdZddlZddlmZmZmZmZmZm Z ddl m Z ddl m Z Gd„d e «Zd „ZGd „d e«Zej$ej&ej(dd œZd„Zd„Zd„Zy)zPattern compiler. The grammar is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. z#Guido van Rossum éNé)ÚdriverÚliteralsÚtokenÚtokenizeÚparseÚgrammar)Úpytree)Úpygramcó —eZdZy)ÚPatternSyntaxErrorN)Ú__name__Ú __module__Ú __qualname__©óú(/usr/lib64/python3.12/lib2to3/patcomp.pyr r s„Ørr c#óþK—tjtjtjh}t j t j|«j«}|D]}|\}}}}}||vsŒ|–—Œy­w)z6Tokenizes a string suppressing significant whitespace.N) rÚNEWLINEÚINDENTÚDEDENTrÚgenerate_tokensÚioÚStringIOÚreadline) ÚinputÚskipÚtokensÚ quintupleÚtypeÚvalueÚstartÚendÚ line_texts rÚtokenize_wrapperr%sdèø€ä M‰Mœ5Ÿ<™<¬¯©Ð 6€DÜ × %Ñ %¤b§k¡k°%Ó&8×&AÑ&AÓ B€FÛˆ Ø-6Ñ*ˆˆeU˜C Ø tÒ Ø‹Oñùs ‚A3A=Á6A=có0—eZdZdd„Zdd„Zd„Zdd„Zd„Zy) ÚPatternCompilerNcó‚—|€+tj|_tj|_n>t j |«|_tj|j«|_tj|_ tj|_ t j|jt¬«|_y)z^Initializer. Takes an optional alternative filename for the pattern grammar. N)Úconvert)r Úpattern_grammarr Úpattern_symbolsÚsymsrÚ load_grammarÚSymbolsÚpython_grammarÚ pygrammarÚpython_symbolsÚpysymsÚDriverÚpattern_convert)ÚselfÚ grammar_files rÚ__init__zPatternCompiler.__init__(sz€ð Ð Ü!×1Ñ1ˆDŒLÜ×.Ñ.ˆDIä!×.Ñ.¨|Ó<ˆDŒLÜŸ™ t§|¡|Ó4ˆDŒIÜ×.Ñ.ˆŒÜ×+Ñ+ˆŒ Ü—m‘m D§L¡L¼/ÔJˆ rcó—t|«} |jj||¬«}|r|j|«|fS|j|«S#tj$r}t t |««d‚d}~wwxYw)z=Compiles a pattern string to a nested pytree.*Pattern object.)ÚdebugN)r%rÚ parse_tokensrÚ ParseErrorr ÚstrÚ compile_node)r5rr9Ú with_treerÚrootÚes rÚcompile_patternzPatternCompiler.compile_pattern7s€ä! %Ó(ˆð 7Ø—;‘;×+Ñ+¨F¸%Ð+Ó@ˆDñ Ø×$Ñ$ TÓ*¨DÐ0Ð 0à×$Ñ$ TÓ*Ð *øô ×Ñò 7Ü$¤S¨£VÓ,°$Ð 6ûð 7úsAÁA=Á#A8Á8A=có—|j|jjk(r|jd}|j|jjk(rx|jddd…Dcgc]}|j |«‘Œ}}t |«dk(r|dStj|Dcgc]}|g‘Œc}dd¬«}|j«S|j|jjk(rd|jDcgc]}|j |«‘Œ}}t |«dk(r|dStj|gdd¬«}|j«S|j|jjk(rC|j|jdd«}tj|«}|j«Sd}|j} t | «dk\r4| djtjk(r| dj }| dd} d} t | «dk\r0| dj|jj"k(r | d} | dd} |j| | «}| û| j} | d} | jtj$k(rd} tj&}n†| jtj(k(rd} tj&}nV| jtj*k(r9|j-| d«x} }t | «dk(r|j-| d«}  dk7sdk7r*|j«}tj|gg| ¬«}|||_|j«Scc}wcc}wcc}w) zXCompiles a node, recursively. This is one big switch on the node type. rNér©ÚminÚmaxééÿÿÿÿé)r r,ÚMatcherÚchildrenÚ Alternativesr=Úlenr ÚWildcardPatternÚoptimizeÚ AlternativeÚ NegatedUnitÚ compile_basicÚNegatedPatternrÚEQUALr!ÚRepeaterÚSTARÚHUGEÚPLUSÚLBRACEÚget_intÚname)r5ÚnodeÚchÚaltsÚaÚpÚunitsÚpatternr[ÚnodesÚrepeatrKÚchildrErFs rr=zPatternCompiler.compile_nodeCs€ð 9‰9˜Ÿ ™ ×)Ñ)Ò )Ø—=‘= Ñ#ˆDà 9‰9˜Ÿ ™ ×.Ñ.Ò .à48·M±MÁ#ÀAÀ#Ò4FÓGÑ4F¨bD×%Ñ% bÕ)Ð4FˆDÐGÜ4‹y˜AŠ~ؘA‘wÜ×&Ñ&±TÓ':±T°¨ª°TÑ':ÀÀqÔIˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø59·]²]ÓC±]¨rT×&Ñ& rÕ*°]ˆEÐCÜ5‹z˜QŠØ˜Q‘xÜ×&Ñ&¨ w°A¸1Ô=ˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø×(Ñ(¨¯©°q°rÐ):Ó;ˆGÜ×%Ñ% gÓ.ˆAØ—:‘:“<Ð ðˆØ— ‘ ˆÜ ˆu‹:˜Š?˜u Q™xŸ}™}´· ± Ò;ؘ‘8—>‘>ˆDؘ!˜"IˆEØˆÜ ˆu‹:˜Š?˜u R™yŸ~™~°·±×1CÑ1CÒCؘ2‘YˆFؘ#˜2JˆEð×$Ñ$ U¨FÓ3ˆà Ð à—‘ˆHؘQ‘KˆEØz‰zœUŸZ™ZÒ'ØÜ—k‘k‘Ø—‘œuŸz™zÒ)ØÜ—k‘k‘Ø—‘œuŸ|™|Ò+ð!ŸL™L¨°!©Ó5Ð5cÜx“= AÒ%ØŸ,™, x°¡{Ó3‘CðaŠx˜3 !š8Ø!×*Ñ*Ó,Ü ×0Ñ0°7°)°À#È3ÔOà Р؈GŒLØ×ÑÓ!Ð!ùòsHùò(;ùòDsÁ*M3Â* M8Ã?M=cóŒ—|d}|jtjk(rGtt j |j ««}tjt|«|«S|jtjk(rÞ|j }|j«rB|tvrtd|z«‚|ddr td«‚tjt|«S|dk(rd}n8|jd«s't|j |d«}|€td|z«‚|ddr#|j#|dj$d«g}nd}tj&|«S|j dk(r|j#|d«S|j d k(r.|j#|d«}tj(|ggdd¬ «Sy) NrzInvalid token: %rrzCan't have details for tokenÚanyÚ_zInvalid symbol: %rÚ(Ú[rD)r rÚSTRINGr<rÚ evalStringr!r Ú LeafPatternÚ_type_of_literalÚNAMEÚisupperÚ TOKEN_MAPr Ú startswithÚgetattrr2r=rKÚ NodePatternrN)r5rcrdr\r!r ÚcontentÚ subpatterns rrRzPatternCompiler.compile_basicŠs™€ðQ‰xˆØ 9‰9œŸ ™ Ò $Üœ×+Ñ+¨D¯J©JÓ7Ó8ˆEÜ×%Ñ%Ô&6°uÓ&=¸uÓEÐ EØ Y‰Yœ%Ÿ*™*Ò $Ø—J‘JˆEØ}‰}ŒØ¤ Ñ)Ü,Ð-@À5Ñ-HÓIÐIؘ˜‘9Ü,Ð-KÓLÐLÜ×)Ñ)¬)°EÑ*:Ó;Ð;à˜E’>Ø‘DØ×)Ñ)¨#Ô.Ü" 4§;¡;°°tÓrŒswðñð3€ ó ÷E×DõÝô ˜ô òôIfôIðZ—Z‘ZØ—|‘|Ø—|‘|Øñ € ò ò9ó6rlib2to3/__pycache__/patcomp.cpython-312.opt-2.pyc000064400000021350152462633570015356 0ustar00Ë T—çhŽãóØ— dZddlZddlmZmZmZmZmZmZddl m Z ddl m Z Gd„de «Z d „ZGd „d e«Zej"ej$ej&dd œZd „Zd„Zd„Zy)z#Guido van Rossum éNé)ÚdriverÚliteralsÚtokenÚtokenizeÚparseÚgrammar)Úpytree)Úpygramcó —eZdZy)ÚPatternSyntaxErrorN)Ú__name__Ú __module__Ú __qualname__©óú(/usr/lib64/python3.12/lib2to3/patcomp.pyr r s„Ørr c#óK— tjtjtjh}t j t j|«j«}|D]}|\}}}}}||vsŒ|–—Œy­w©N) rÚNEWLINEÚINDENTÚDEDENTrÚgenerate_tokensÚioÚStringIOÚreadline) ÚinputÚskipÚtokensÚ quintupleÚtypeÚvalueÚstartÚendÚ line_texts rÚtokenize_wrapperr&sgèø€Ø@Ü M‰Mœ5Ÿ<™<¬¯©Ð 6€DÜ × %Ñ %¤b§k¡k°%Ó&8×&AÑ&AÓ B€FÛˆ Ø-6Ñ*ˆˆeU˜C Ø tÒ Ø‹Oñùs ‚A4A>Á7A>có0—eZdZdd„Zdd„Zd„Zdd„Zd„Zy) ÚPatternCompilerNcó„— |€+tj|_tj|_n>t j |«|_tj|j«|_tj|_ tj|_ t j|jt¬«|_y)N)Úconvert)r Úpattern_grammarr Úpattern_symbolsÚsymsrÚ load_grammarÚSymbolsÚpython_grammarÚ pygrammarÚpython_symbolsÚpysymsÚDriverÚpattern_convert)ÚselfÚ grammar_files rÚ__init__zPatternCompiler.__init__(s€ð ð Ð Ü!×1Ñ1ˆDŒLÜ×.Ñ.ˆDIä!×.Ñ.¨|Ó<ˆDŒLÜŸ™ t§|¡|Ó4ˆDŒIÜ×.Ñ.ˆŒÜ×+Ñ+ˆŒ Ü—m‘m D§L¡L¼/ÔJˆ rcó— t|«} |jj||¬«}|r|j|«|fS|j|«S#tj$r}t t |««d‚d}~wwxYw)N)Údebug)r&rÚ parse_tokensrÚ ParseErrorr ÚstrÚ compile_node)r6rr:Ú with_treerÚrootÚes rÚcompile_patternzPatternCompiler.compile_pattern7s‚€ØKÜ! %Ó(ˆð 7Ø—;‘;×+Ñ+¨F¸%Ð+Ó@ˆDñ Ø×$Ñ$ TÓ*¨DÐ0Ð 0à×$Ñ$ TÓ*Ð *øô ×Ñò 7Ü$¤S¨£VÓ,°$Ð 6ûð 7úsŽAÁA>Á$A9Á9A>có— |j|jjk(r|jd}|j|jjk(rx|jddd…Dcgc]}|j |«‘Œ}}t |«dk(r|dStj|Dcgc]}|g‘Œc}dd¬«}|j«S|j|jjk(rd|jDcgc]}|j |«‘Œ}}t |«dk(r|dStj|gdd¬«}|j«S|j|jjk(rC|j|jdd«}tj|«}|j«Sd}|j} t | «dk\r4| djtjk(r| dj }| dd} d} t | «dk\r0| dj|jj"k(r | d} | dd} |j| | «}| û| j} | d} | jtj$k(rd} tj&}n†| jtj(k(rd} tj&}nV| jtj*k(r9|j-| d«x} }t | «dk(r|j-| d«}  dk7sdk7r*|j«}tj|gg| ¬«}|||_|j«Scc}wcc}wcc}w)Nrér©ÚminÚmaxééÿÿÿÿé)r!r-ÚMatcherÚchildrenÚ Alternativesr>Úlenr ÚWildcardPatternÚoptimizeÚ AlternativeÚ NegatedUnitÚ compile_basicÚNegatedPatternrÚEQUALr"ÚRepeaterÚSTARÚHUGEÚPLUSÚLBRACEÚget_intÚname)r6ÚnodeÚchÚaltsÚaÚpÚunitsÚpatternr\ÚnodesÚrepeatrLÚchildrFrGs rr>zPatternCompiler.compile_nodeCs€ð ð 9‰9˜Ÿ ™ ×)Ñ)Ò )Ø—=‘= Ñ#ˆDà 9‰9˜Ÿ ™ ×.Ñ.Ò .à48·M±MÁ#ÀAÀ#Ò4FÓGÑ4F¨bD×%Ñ% bÕ)Ð4FˆDÐGÜ4‹y˜AŠ~ؘA‘wÜ×&Ñ&±TÓ':±T°¨ª°TÑ':ÀÀqÔIˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø59·]²]ÓC±]¨rT×&Ñ& rÕ*°]ˆEÐCÜ5‹z˜QŠØ˜Q‘xÜ×&Ñ&¨ w°A¸1Ô=ˆAØ—:‘:“<Ð à 9‰9˜Ÿ ™ ×-Ñ-Ò -Ø×(Ñ(¨¯©°q°rÐ):Ó;ˆGÜ×%Ñ% gÓ.ˆAØ—:‘:“<Ð ðˆØ— ‘ ˆÜ ˆu‹:˜Š?˜u Q™xŸ}™}´· ± Ò;ؘ‘8—>‘>ˆDؘ!˜"IˆEØˆÜ ˆu‹:˜Š?˜u R™yŸ~™~°·±×1CÑ1CÒCؘ2‘YˆFؘ#˜2JˆEð×$Ñ$ U¨FÓ3ˆà Ð à—‘ˆHؘQ‘KˆEØz‰zœUŸZ™ZÒ'ØÜ—k‘k‘Ø—‘œuŸz™zÒ)ØÜ—k‘k‘Ø—‘œuŸ|™|Ò+ð!ŸL™L¨°!©Ó5Ð5cÜx“= AÒ%ØŸ,™, x°¡{Ó3‘CðaŠx˜3 !š8Ø!×*Ñ*Ó,Ü ×0Ñ0°7°)°À#È3ÔOà Р؈GŒLØ×ÑÓ!Ð!ùòsHùò(;ùòDsÁ+M4Â+ M9ÄM>cóŒ—|d}|jtjk(rGtt j |j ««}tjt|«|«S|jtjk(rÞ|j }|j«rB|tvrtd|z«‚|ddr td«‚tjt|«S|dk(rd}n8|jd«s't|j |d«}|€td|z«‚|ddr#|j#|dj$d«g}nd}tj&|«S|j dk(r|j#|d«S|j d k(r.|j#|d«}tj(|ggdd¬ «Sy) NrzInvalid token: %rrzCan't have details for tokenÚanyÚ_zInvalid symbol: %rÚ(Ú[rE)r!rÚSTRINGr=rÚ evalStringr"r Ú LeafPatternÚ_type_of_literalÚNAMEÚisupperÚ TOKEN_MAPr Ú startswithÚgetattrr3r>rLÚ NodePatternrO)r6rdrer]r"r!ÚcontentÚ subpatterns rrSzPatternCompiler.compile_basicŠs™€ðQ‰xˆØ 9‰9œŸ ™ Ò $Üœ×+Ñ+¨D¯J©JÓ7Ó8ˆEÜ×%Ñ%Ô&6°uÓ&=¸uÓEÐ EØ Y‰Yœ%Ÿ*™*Ò $Ø—J‘JˆEØ}‰}ŒØ¤ Ñ)Ü,Ð-@À5Ñ-HÓIÐIؘ˜‘9Ü,Ð-KÓLÐLÜ×)Ñ)¬)°EÑ*:Ó;Ð;à˜E’>Ø‘DØ×)Ñ)¨#Ô.Ü" 4§;¡;°°tÓrSr[rrrr(r(&s„ó Kó +òE"óN!óFrr()rprlÚNUMBERÚTOKENcó”—|dj«rtjS|tjvrtj|Sy)Nr)Úisalpharrpr Úopmap)r"s rroro¹s:€Ø ˆQx×ÑÔÜz‰zÐØ ”'—-‘-Ñ Ü}‰}˜UÑ#Ð#àrcó’— |\}}}}|s||jvrtj|||¬«Stj|||¬«S)N)Úcontext)Ú number2symbolr ÚNodeÚLeaf)r Ú raw_node_infor!r"r€rLs rr5r5ÂsI€ØCØ%2Ñ"€Dˆ%˜(Ù4˜7×0Ñ0Ñ0Ü{‰{˜4 °7Ô;Ð;ä{‰{˜4 °Ô8Ð8rcó4—t«j|«Sr)r(rB)rcs rrBrBËs€Ü Ó × ,Ñ ,¨WÓ 5Ð5r)Ú __author__rÚpgen2rrrrrr Úr r Ú Exceptionr r&Úobjectr(rprlrzrrror5rBrrrÚr‹swððð3€ ó ÷E×DõÝô ˜ô òôIfôIðZ—Z‘ZØ—|‘|Ø—|‘|Øñ € ò ò9ó6rlib2to3/__pycache__/pytree.cpython-312.pyc000064400000103610152462633570014263 0ustar00Ë T—çhFmãóê—dZdZddlZddlmZdZiad„ZGd„de«Z Gd „d e «Z Gd „d e «Z d „Z Gd„de«Z Gd„de «ZGd„de «ZGd„de «ZGd„de «Zd„Zy)zÌ Python parse tree definitions. This is a very concrete parse tree; we need to keep every token and even the comments and whitespace between tokens. There's also a pattern matching implementation here. z#Guido van Rossum éN)ÚStringIOiÿÿÿcó—tsDddlm}|jj «D]!\}}t |«t k(sŒ|t|<Œ#tj||«S)Né)Úpython_symbols)Ú _type_reprsÚpygramrÚ__dict__ÚitemsÚtypeÚintÚ setdefault)Útype_numrÚnameÚvals ú'/usr/lib64/python3.12/lib2to3/pytree.pyÚ type_reprrsO€å Ý*ð(×0Ñ0×6Ñ6Ö8‰IˆD#ÜC‹yœCÓ°D¤¨SÒ!1ð9ä × !Ñ ! (¨HÓ 5Ð5ócó¼—eZdZdZdZdZdZdZdZd„Z d„Z dZ d„Z d„Z d „Zd „Zd „Zd „Zd „Zd„Zed„«Zed„«Zd„Zd„Zd„Zej6dkrd„Zyy)ÚBasez Abstract base class for Node and Leaf. This provides some default functionality and boilerplate using the template pattern. A node may be a subnode of at most one parent. N©FcóJ—|tusJd«‚tj|«S)z7Constructor that prevents Base from being instantiated.zCannot instantiate Base)rÚobjectÚ__new__©ÚclsÚargsÚkwdss rrz Base.__new__1s#€àœ$‰Ð9Ð 9Ó9ˆÜ~‰~˜cÓ"Ð"rcó`—|j|jurtS|j|«S)zW Compare two nodes for equality. This calls the method _eq(). )Ú __class__ÚNotImplementedÚ_eq©ÚselfÚothers rÚ__eq__z Base.__eq__6s(€ð >‰> §¡Ñ 0Ü!Ð !Øx‰x˜‹Ðrcó—t‚)a_ Compare two nodes for equality. This is called by __eq__ and __ne__. It is only called if the two nodes have the same type. This must be implemented by the concrete subclass. Nodes should be considered equal if they have the same structure, ignoring the prefix string and other context information. ©ÚNotImplementedErrorr"s rr!zBase._eqBs €ô"Ð!rcó—t‚)zr Return a cloned (deep) copy of self. This must be implemented by the concrete subclass. r'©r#s rÚclonez Base.cloneMó €ô "Ð!rcó—t‚)zx Return a post-order iterator for the tree. This must be implemented by the concrete subclass. r'r*s rÚ post_orderzBase.post_orderUr,rcó—t‚)zw Return a pre-order iterator for the tree. This must be implemented by the concrete subclass. r'r*s rÚ pre_orderzBase.pre_order]r,rcóþ—|j€Jt|««‚|€J‚t|t«s|g}g}d}|jjD]M}||ur6|rJ|jj||f«‚||j |«d}Œ=|j |«ŒO|sJ|j||f«‚|jj«||j_|D]}|j|_Œd|_y)z/Replace this node with a new one in the parent.NFT)ÚparentÚstrÚ isinstanceÚlistÚchildrenÚextendÚappendÚchanged)r#ÚnewÚ l_childrenÚfoundÚchÚxs rÚreplacez Base.replaceesñ€à{‰{Ð&Ð1¬¨D« Ó1Ð&؈Јܘ#œtÔ$Ø%ˆC؈ ؈ؗ+‘+×&Ô&ˆBØT‰zÙ ÐC 4§;¡;×#7Ñ#7¸¸sÐ"CÓCyØ?Ø×%Ñ% cÔ*Ø‘à×!Ñ! "Õ%ð'ñÐ0t—}‘} d¨CÐ0Ó0ˆuØ ‰ ×ÑÔØ)ˆ ‰ ÔÛˆAØ—{‘{ˆAHðàˆ rcó˜—|}t|t«s-|jsy|jd}t|t«sŒ-|jS)z9Return the line number which generated the invocant node.Nr)r4ÚLeafr6Úlineno©r#Únodes rÚ get_linenozBase.get_lineno|sA€àˆÜ˜T¤4Ô(Ø—=’=ØØ—=‘= Ñ#ˆDô˜T¤4Õ(ð{‰{Ðrcó^—|jr|jj«d|_y)NT)r2r9Ú was_changedr*s rr9z Base.changed…s!€Ø ;Š;Ø K‰K× Ñ Ô !؈Õrcóì—|jrht|jj«D]E\}}||usŒ |jj«|jj|=d|_|cSyy)z‰ Remove the node from the tree. Returns the position of the node in its parent's children before it was removed. N)r2Ú enumerater6r9)r#ÚirDs rÚremovez Base.removeŠsb€ð ;Š;Ü$ T§[¡[×%9Ñ%9Ö:‘4ؘ4’<Ø—K‘K×'Ñ'Ô)ØŸ ™ ×,Ñ,¨QÐ/Ø"&D”KØ’Hñ ;ð rcóÒ—|j€yt|jj«D](\}}||usŒ |jj|dzcSy#t$rYywxYw)zŸ The node immediately following the invocant in their parent's children list. If the invocant does not have a next sibling, it is None Nr)r2rIr6Ú IndexError©r#rJÚchilds rÚ next_siblingzBase.next_sibling—si€ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ð ØŸ;™;×/Ñ/°°!±Ñ4Ò4ñ8øô"ò Úð ús¹AÁ A&Á%A&có¾—|j€yt|jj«D].\}}||usŒ |dk(ry|jj|dz cSy)z¤ The node immediately preceding the invocant in their parent's children list. If the invocant does not have a previous sibling, it is None. Nrr)r2rIr6rNs rÚ prev_siblingzBase.prev_sibling¨sZ€ð ;‰;Ð Øô" $§+¡+×"6Ñ"6Ö7‰HˆAˆuؘŠ}ؘ’6ÙØ—{‘{×+Ñ+¨A¨a©CÑ0Ò0ñ 8rc#óbK—|jD]}|j«Ed{–—†Œy7Œ­w©N)r6Úleaves©r#rOs rrUz Base.leaves¸s&èø€Ø—]”]ˆEØ—|‘|“~× %Ñ %ñ#Ø %ús ‚#/¥-¦/cóV—|j€yd|jj«zS)Nrr)r2Údepthr*s rrXz Base.depth¼s'€Ø ;‰;Ð ØØ4—;‘;×$Ñ$Ó&Ñ&Ð&rcó8—|j}|€y|jS)z Return the string immediately following the invocant node. This is effectively equivalent to node.next_sibling.prefix Ú)rPÚprefix)r#Únext_sibs rÚ get_suffixzBase.get_suffixÁs"€ð ×$Ñ$ˆØ Ð ØØ‰Ðr©ércó6—t|«jd«S)NÚascii)r3Úencoder*s rÚ__str__z Base.__str__Ìs€Üt“9×#Ñ# GÓ,Ð ,r)Ú__name__Ú __module__Ú __qualname__Ú__doc__r r2r6rGÚ was_checkedrr%Ú__hash__r!r+r.r0r?rEr9rKÚpropertyrPrRrUrXr]ÚsysÚ version_inforcrrrrrs¬„ñð €DØ €FØ€HØ€KØ€Kò#ò ð€Hò "ò"ò"ò"òò.ò ò ðñ óð ð ñ 1óð 1ò&ò'ò ð ×ј&Ò ó -ð!rrcóª—eZdZdZ dd„Zd„Zd„ZejdkDreZ d„Z d„Z d „Z d „Z ed „«Zej d „«Zd „Zd„Zd„Zy)ÚNodez+Concrete implementation for interior nodes.Ncóì—|dk\sJ|«‚||_t|«|_|jD]%}|jJt |««‚||_Œ'|||_|r |dd|_yd|_y)zð Initializer. Takes a type constant (a symbol number >= 256), a sequence of child nodes, and an optional context keyword argument. As a side effect, the parent pointers of the children are updated. éN)r r5r6r2Úreprr[Úfixers_applied)r#r r6Úcontextr[rrr=s rÚ__init__z Node.__init__Ós|€ðsŠ{Ð ˜DÓ ˆ{؈Œ ܘX›ˆŒ Ø—-”-ˆBØ—9‘9Ð$Ð .¤d¨2£hÓ .Ð$؈BIð ð Ð Ø ˆDŒKÙ Ø"0±Ð"3ˆDÕ à"&ˆDÕ rcóz—|jj›dt|j«›d|j›dS©z)Return a canonical string representation.Ú(ú, Ú))rrdrr r6r*s rÚ__repr__z Node.__repr__ìs,€à#Ÿ~™~×6Ó6Ü(¨¯©Õ3Ø#Ÿ}›}ð.ð .rcóT—djtt|j««S)úk Return a pretty string representation. This reproduces the input source exactly. rZ)ÚjoinÚmapr3r6r*s rÚ __unicode__zNode.__unicode__òs€ð w‰w”sœ3 § ¡ Ó.Ó/Ð/rr^cód—|j|jf|j|jfk(S©zCompare two nodes for equality.)r r6r"s rr!zNode._eqýs'€à— ‘ ˜4Ÿ=™=Ð)¨e¯j©j¸%¿.¹.Ð-IÑIÐIrcóœ—t|j|jDcgc]}|j«‘Œc}|j¬«Scc}w©z$Return a cloned (deep) copy of self.)rr)rnr r6r+rr)r#r=s rr+z Node.clones<€äD—I‘I°T·]²]ÓC±]¨r §¡¥ °]ÑCØ#'×#6Ñ#6ô8ð 8ùÒCsŸA c#ójK—|jD]}|j«Ed{–—†Œ|–—y7Œ ­w©z*Return a post-order iterator for the tree.N)r6r.rVs rr.zNode.post_orders0èø€à—]”]ˆEØ×'Ñ'Ó)× )Ñ )ð#à‹ ð *ús ‚#3¥1¦ 3c#ójK—|–—|jD]}|j«Ed{–—†Œy7Œ­w©z)Return a pre-order iterator for the tree.N)r6r0rVs rr0zNode.pre_order s,èø€àŠ Ø—]”]ˆEØ—‘Ó(× (Ñ (ñ#Ø (ús ‚'3©1ª3cóN—|jsy|jdjS)zO The whitespace and comments preceding this node in the input. rZr©r6r[r*s rr[z Node.prefixs#€ð }Š}ØØ}‰}˜QÑ×&Ñ&Ð&rcóF—|jr||jd_yy©Nrr‰©r#r[s rr[z Node.prefixs€à =Š=Ø&,ˆDM‰M˜!Ñ Õ #ð rcóx—||_d|j|_||j|<|j«y)z… Equivalent to 'node.children[i] = child'. This method also sets the child's parent attribute appropriately. N)r2r6r9rNs rÚ set_childzNode.set_child s3€ð ˆŒ Ø"&ˆ ‰ aÑÔØ ˆ ‰ aÑØ ‰ rcój—||_|jj||«|j«y)z‹ Equivalent to 'node.children.insert(i, child)'. This method also sets the child's parent attribute appropriately. N)r2r6Úinsertr9rNs rÚ insert_childzNode.insert_child*s(€ð ˆŒ Ø ‰ ×јQ Ô&Ø ‰ rcóh—||_|jj|«|j«y)zˆ Equivalent to 'node.children.append(child)'. This method also sets the child's parent attribute appropriately. N)r2r6r8r9rVs rÚ append_childzNode.append_child3s&€ð ˆŒ Ø ‰ ×јUÔ#Ø ‰ r©NNN)rdrerfrgrtrzrrkrlrcr!r+r.r0rjr[ÚsetterrŽr‘r“rrrrnrnÏs„„á5ðØØ $ó'ò2.ò 0ð ×ј&Ò ØˆòJò8ò ò )ð ñ'óð'ð ‡]]ñ-óð-òòórrncóª—eZdZdZdZdZdZddgfd„Zd„Zd„Z e jdkDre Z d „Z d „Zd „Zd „Zd „Zed„«Zej(d„«Zy)rAz'Concrete implementation for leaf nodes.rZrNcó¬—d|cxkr dksJ|«‚J|«‚||\|_\|_|_||_||_|||_|dd|_y)z— Initializer. Takes a type constant (a token number < 256), a string value, and an optional context keyword argument. rrpN)Ú_prefixrBÚcolumnr Úvaluerr)r#r ršrsr[rrs rrtz Leaf.__init__Fsf€ðDŒ˜3ŠÐ$ Ó$‰Ð$ Ó$ˆØ Ð Ø7>Ñ 4ˆDŒLÑ4˜4œ;¨¬ ؈Œ ؈Œ Ø Ð Ø!ˆDŒLØ,©QÐ/ˆÕrcóh—|jj›d|j›d|j›dSrv)rrdr ršr*s rrzz Leaf.__repr__Ys'€à#Ÿ~™~×6Ó6Ø#Ÿy›yØ#Ÿz›zð+ð +rcóF—|jt|j«zS)r|)r[r3ršr*s rrzLeaf.__unicode___s€ð {‰{œS §¡›_Ñ,Ð,rr^cód—|j|jf|j|jfk(Sr)r ršr"s rr!zLeaf._eqjs'€à— ‘ ˜4Ÿ:™:Ð&¨5¯:©:°u·{±{Ð*CÑCÐCrcó —t|j|j|j|j|j ff|j ¬«Srƒ)rAr ršr[rBr™rrr*s rr+z Leaf.clonens=€äD—I‘I˜tŸz™zØ—[‘[ 4§;¡;°· ± Ð"<Ð=Ø#'×#6Ñ#6ô8ð 8rc#óK—|–—y­wrTrr*s rrUz Leaf.leavests èø€Ø‹ ùó‚c#óK—|–—y­wr…rr*s rr.zLeaf.post_orderwó èø€à‹ ùr c#óK—|–—y­wr‡rr*s rr0zLeaf.pre_order{r¢r có—|jS)zP The whitespace and comments preceding this token in the input. )r˜r*s rr[z Leaf.prefixs€ð |‰|Ðrcó2—|j«||_yrT)r9r˜rŒs rr[z Leaf.prefix†s€à ‰ ŒØˆ r)rdrerfrgr˜rBr™rtrzrrkrlrcr!r+rUr.r0rjr[r•rrrrArA=s‹„á1ð€GØ €FØ €FðØØ "ó0ò&+ò -ð ×ј&Ò ØˆòDò8ò òòðñóðð  ‡]]ñóñrrAcóŽ—|\}}}}|s||jvr!t|«dk(r|dSt|||¬«St|||¬«S)zõ Convert raw node information to a Node or Leaf instance. This is passed to the parser driver which calls it whenever a reduction of a grammar rule produces a new complete node, so that the tree is build strictly bottom-up. rr)rs)Ú number2symbolÚlenrnrA)ÚgrÚraw_noder ršrsr6s rÚconvertr«‹sX€ð&.Ñ"€Dˆ%˜(Ù4˜2×+Ñ+Ñ+ô ˆx‹=˜AÒ Ø˜A‘;Ð ÜD˜(¨GÔ4Ð4äD˜%¨Ô1Ð1rcóD—eZdZdZdZdZdZd„Zd„Zd„Z d d„Z d d„Z d„Z y) Ú BasePatterna” A pattern is a tree matching pattern. It looks for a specific node type (token or symbol), and optionally for a specific content. This is an abstract base class. There are three concrete subclasses: - LeafPattern matches a single leaf node; - NodePattern matches a single node (usually non-leaf); - WildcardPattern matches a sequence of nodes of variable length. NcóJ—|tusJd«‚tj|«S)z>Constructor that prevents BasePattern from being instantiated.zCannot instantiate BasePattern)r­rrrs rrzBasePattern.__new__³s%€àœ+Ñ%ÐGÐ'GÓGÐ%Ü~‰~˜cÓ"Ð"rcóð—t|j«|j|jg}|r|d€ |d=|r|d€Œ |jj ›ddj tt|««›dS)Néÿÿÿÿrwrxry) rr Úcontentrrrdr}r~rq)r#rs rrzzBasePattern.__repr__¸sd€Ü˜$Ÿ)™)Ó$ d§l¡l°D·I±IÐ>ˆÙt˜B‘xÐ'ØRñt˜B‘xÑ'àŸ>™>×2Ó2°D·I±I¼cÄ$È»oÕ4NÐOÐOrcó—|S)zŒ A subclass can define this as a hook for optimizations. Returns either self or another node with the same effect. rr*s rÚoptimizezBasePattern.optimize¾s €ð ˆ rcóú—|j|j|jk7ry|j,d}|i}|j||«sy|r|j|«||jr|||j<y)a# Does this pattern exactly match a node? Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. Default implementation for non-wildcard patterns. NFT)r r±Ú _submatchÚupdater)r#rDÚresultsÚrs rÚmatchzBasePattern.matchÆsw€ð 9‰9Ð  T§Y¡Y°$·)±)Ò%;ØØ <‰<Ð #؈AØÐ"ØØ—>‘> $¨Ô*ØÙØ—‘˜qÔ!Ø Ð  4§9¢9Ø!%ˆGD—I‘IÑ ØrcóJ—t|«dk7ry|j|d|«S)z Does this pattern exactly match a sequence of nodes? Default implementation for non-wildcard patterns. rFr)r¨r¹)r#Únodesr·s rÚ match_seqzBasePattern.match_seqßs'€ô ˆu‹:˜Š?ØØz‰z˜% ™( GÓ,Ð,rc#óNK—i}|r|j|d|«rd|f–—yyy­w)z} Generator yielding all matches for this pattern. Default implementation for non-wildcard patterns. rrN)r¹)r#r»r¸s rÚgenerate_matcheszBasePattern.generate_matchesés1èø€ð ˆÙ T—Z‘Z  a¡¨!Ô,ØQ$‹Jð-ˆ5ùs‚#%rT) rdrerfrgr r±rrrzr³r¹r¼r¾rrrr­r­žs7„ñ ð €DØ€GØ €Dò#ò Pò óó2-órr­có$—eZdZdd„Zdd„Zdd„Zy)Ú LeafPatternNcóª—|d|cxkr dksJ|«‚J|«‚| t|t«sJt|««‚||_||_||_y)ap Initializer. Takes optional type, content, and name. The type, if given must be a token type (< 256). If not given, this matches any *leaf* node; the content may still be required. The content, if given, must be a string. If a name is given, the matching node is stored in the results dict under that key. Nrrp)r4r3rqr r±r)r#r r±rs rrtzLeafPattern.__init__ös]€ð Рؘ”?˜s’?Ð ( DÓ (‘?Ð ( DÓ (?Ø Ð Ü˜g¤sÔ+Ð :¬T°'«]Ó :Ð+؈Œ ؈Œ ؈ rcóR—t|t«sytj|||«S)z*Override match() to insist on a leaf node.F)r4rAr­r¹©r#rDr·s rr¹zLeafPattern.match s$€ä˜$¤Ô%ØÜ× Ñ   t¨WÓ5Ð5rcó4—|j|jk(S)á„ Match the pattern's content to the node's children. This assumes the node type matches and self.content is not None. Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. When returning False, the results dict may still be updated. )r±ršrÃs rrµzLeafPattern._submatchs€ð|‰|˜tŸz™zÑ)Ð)rr”rT)rdrerfrtr¹rµrrrrÀrÀôs„óó(6ô *rrÀcó —eZdZdZdd„Zdd„Zy)Ú NodePatternFNcó,—| |dk\sJ|«‚|ot|t«rJt|««‚t|«}t |«D]6\}}t|t «s J||f«‚t|t «sŒ0d|_Œ8||_||_ ||_ y)ad Initializer. Takes optional type, content, and name. The type, if given, must be a symbol type (>= 256). If the type is None this matches *any* single node (leaf or not), except if content is not None, in which it only matches non-leaf nodes that also match the content pattern. The content, if not None, must be a sequence of Patterns that must match the node's children exactly. If the content is given, the type must not be None. If a name is given, the matching node is stored in the results dict under that key. NrpT) r4r3rqr5rIr­ÚWildcardPatternÚ wildcardsr r±r)r#r r±rrJÚitems rrtzNodePattern.__init__$s—€ð Рؘ3’;Ð $ Ó $;Ø Ð Ü! '¬3Ô/Ð >´°g³Ó >Ð/ܘ7“mˆGÜ$ WÖ-‘4Ü! $¬ Ô4Ð?°q¸$°iÓ?Ð4ܘd¤OÕ4Ø%)D•Nð.ðˆŒ ØˆŒ ؈ rcó˜—|jrVt|j|j«D]2\}}|t |j«k(sŒ||j |«yyt |j«t |j«k7ryt |j|j«D]\}}|j||«rŒyy)rÅTF)rÊr¾r±r6r¨r¶Úzipr¹)r#rDr·Úcr¸Ú subpatternrOs rrµzNodePattern._submatchAs¨€ð >Š>Ü(¨¯©°t·}±}ÖE‘1Øœ˜DŸM™MÓ*Ó*ØÐ*ØŸ™ qÔ)Ùð Fð Ü ˆt|‰|Ó ¤ D§M¡MÓ 2Ò 2ØÜ!$ T§\¡\°4·=±=Ö!AÑ ˆJ˜Ø×#Ñ# E¨7Õ3Ùð"Bðrr”rT)rdrerfrÊrtrµrrrrÇrÇ s„à€Ióô:rrÇcóN—eZdZdZddedfd„Zd„Zd d„Zd d„Zd„Z d „Z d „Z d „Z y) rÉa A wildcard pattern can match zero or more nodes. This has all the flexibility needed to implement patterns like: .* .+ .? .{m,n} (a b c | d e | f) (...)* (...)+ (...)? (...){m,n} except it always uses non-greedy matching. Nrcó,—d|cxkr|cxkr tks nJ||f«‚|Vttt|««}t|«sJt |««‚|D]}t|«rŒJt |««‚||_||_||_||_y)aÏ Initializer. Args: content: optional sequence of subsequences of patterns; if absent, matches one node; if present, each subsequence is an alternative [*] min: optional minimum number of times to match, default 0 max: optional maximum number of times to match, default HUGE name: optional name assigned to this match [*] Thus, if content is [[a, b, c], [d, e], [f, g, h]] this is equivalent to (a b c | d e | f g h); if content is None, this is equivalent to '.' in regular expression terms. The min and max parameters work as follows: min=0, max=maxint: .* min=1, max=maxint: .+ min=0, max=1: .? min=1, max=1: . If content is not None, replace the dot with the parenthesized list of alternatives, e.g. (a b c | d e | f g h)* rN) ÚHUGEÚtupler~r¨rqr±ÚminÚmaxr)r#r±rÔrÕrÚalts rrtzWildcardPattern.__init__ksŒ€ð.CÔ&˜3Ô&¤$Ô&Ð2¨¨c¨ Ó2Ð&Ø Ð ÜœC¤ wÓ/Ó0ˆGäw”<Ð .¤ g£Ó .<Ûܘ3•xÐ*¤ c£Ó*xðàˆŒ ؈ŒØˆŒØˆ rcó°—d}|jEt|j«dk(r-t|jd«dk(r|jdd}|jdk(r\|jdk(rM|j€t |j ¬«S|)|j |j k(r|j «S|jdkrˆt|t«rx|jdkri|j |j k(rPt|j|j|jz|j|jz|j «S|S)z+Optimize certain stacked wildcard patterns.Nrr)r) r±r¨rÔrÕrÇrr³r4rÉ)r#rÏs rr³zWildcardPattern.optimizeŽs €àˆ Ø L‰LÐ $Ü — ‘ Ó  Ò "¤s¨4¯<©<¸©?Ó';¸qÒ'@ØŸ™ a™¨Ñ+ˆJØ 8‰8qŠ=˜TŸX™X¨š]Ø|‰|Ð#Ü"¨¯ © Ô2Ð2ØÐ%¨4¯9©9¸ ¿¹Ò+GØ!×*Ñ*Ó,Ð,Ø H‰H˜ŠMœj¨´_ÔEØ N‰N˜aÒ  D§I¡I°·±Ò$@Ü" :×#5Ñ#5Ø#'§8¡8¨J¯N©NÑ#:Ø#'§8¡8¨J¯N©NÑ#:Ø#-§?¡?ó4ð 4ðˆ rcó(—|j|g|«S)z'Does this pattern exactly match a node?)r¼rÃs rr¹zWildcardPattern.match¡s€à~‰~˜t˜f gÓ.Ð.rcóÄ—|j|«D]L\}}|t|«k(sŒ|5|j|«|jrt |«||j<yy)z4Does this pattern exactly match a sequence of nodes?TF)r¾r¨r¶rr5)r#r»r·rÎr¸s rr¼zWildcardPattern.match_seq¥sY€à×)Ñ)¨%Ö0‰DˆAˆqØ”C˜“J‹ØÐ&Ø—N‘N 1Ô%Ø—y’yÜ-1°%«[˜ § ¡ Ñ*Ùð 1ðrc #ó&K—|j€bt|jdtt|«|j«z«D](}i}|j r|d|||j <||f–—Œ*y|j dk(r|j |«–—yttd«r#tj}t«t_ |j|d«D])\}}|j r|d|||j <||f–—Œ+ ttd«r t_ yy#t$r@|j|«D])\}}|j r|d|||j <||f–—Œ+YŒewxYw#ttd«r t_ wwxYw­w)a" Generator yielding matches for a sequence of nodes. Args: nodes: sequence of nodes Yields: (count, results) tuples where: count: the match comprises nodes[:count]; results: dict containing named submatches. NrÚ bare_nameÚ getrefcountr)r±ÚrangerÔr¨rÕrÚ_bare_name_matchesÚhasattrrkÚstderrrÚ_recursive_matchesÚ RuntimeErrorÚ_iterative_matches)r#r»Úcountr¸Ú save_stderrs rr¾z WildcardPattern.generate_matches°sdèø€ð <‰<Ð ä˜tŸx™x¨¬S´°U³¸T¿X¹XÓ-FÑ)FÖGØØ—9’9Ø#(¨¨% =Ad—i‘i‘LؘQh“ñ Hð Y‰Y˜+Ò %Ø×)Ñ)¨%Ó0Ó 0ô ”s˜MÔ*Ü!Ÿj™j Ü%›Z”” ð -Ø $× 7Ñ 7¸¸qÖ A‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nñ!Bôœ3  Ô.Ø!,”C•Jð/øô ò #ð!%× 7Ñ 7¸Ö >‘HE˜1Ø—y’yØ',¨V¨e }˜˜$Ÿ)™)™ Ø ˜(“Nò!?ð #ûôœ3  Ô.Ø!,”C•Jð/üs=‚CFÃ>D$ÄE0ÄFÄ$AE-Å*E0Å,E-Å-E0Å0FÆFc#óK—t|«}d|jk\rdif–—g}|jD]/}t||«D]\}}||f–—|j ||f«Œ Œ1|r™g}|D]Œ\}} ||ksŒ ||j ksŒ|jD]b}t|||d«D]N\} } | dkDsŒ i}|j | «|j | «|| z|f–—|j || z|f«ŒPŒdŒŽ|}|rŒ˜yy­w)z(Helper to iteratively yield the matches.rN)r¨rÔr±r¾r8rÕr¶) r#r»Únodelenr·rÖrÎr¸Ú new_resultsÚc0Úr0Úc1Úr1s rrãz"WildcardPattern._iterative_matchesÝs èø€äe“*ˆØ —‘Š=ØR%ŠKàˆà—<”<ˆCÜ(¨¨eÖ4‘1ؘd’ Ø—‘  1˜vÕ&ñ5ð ñ ؈KÛ!‘Bà˜“< B¨$¯(©(£NØ#Ÿ|œ|˜Ü&6°s¸EÀ"À#¸JÖ&G™F˜B Ø! A›vØ$& Ø !§¡¨¤ Ø !§¡¨¤ Ø&(¨2¡g¨q jÒ 0Ø +× 2Ñ 2°B¸±G¸Q°<Õ @ñ 'Hñ ,ð"ð"ˆGôùs‚A2C?Á5C?Â)C?Â/A C?Ã=C?cóÖ—d}i}d}t|«}|sA||krrýs¢ðñð3€ ã Ýà€à€ ò6ôn-ˆ6ôn-ô`kˆ4ôkô\Lˆ4ôLò\2ô&S&ôSôl)*+ô)*ôX:+ô:ôzy)kôy)ôx [ô óF%rlib2to3/__pycache__/fixer_base.cpython-312.opt-2.pyc000064400000012123152462633570016020 0ustar00Ë T—çh"ãó^— ddlZddlmZddlmZddlmZGd„de«ZGd„d e«Z y) éNé)ÚPatternCompiler)Úpygram)Údoes_tree_importcóÊ—eZdZ dZdZdZdZdZejd«Z e «Z dZ dZdZdZdZdZej(Zd„Zd„Zd„Zd „Zd „Zdd „Zd „Zdd „Zd„Zd„Zd„Z y)ÚBaseFixNrÚpostFécóB— ||_||_|j«y©N)ÚoptionsÚlogÚcompile_pattern)Úselfr rs ú+/usr/lib64/python3.12/lib2to3/fixer_base.pyÚ__init__zBaseFix.__init__/s#€ð ðˆŒ ØˆŒØ ×ÑÕócóˆ— |j5t«}|j|jd¬«\|_|_yy)NT)Ú with_tree)ÚPATTERNrrÚpatternÚ pattern_tree)rÚPCs rrzBaseFix.compile_pattern;sJ€ð ð <‰<Ð #Ü Ó"ˆBØ.0×.@Ñ.@ÀÇÁØKOð/Aó/QÑ +ˆDŒL˜$Õ+ð $rcó— ||_yr )Úfilename)rrs rÚ set_filenamezBaseFix.set_filenameFs€ð ð!ˆ rcóL— d|i}|jj||«xr|S)NÚnode)rÚmatch©rrÚresultss rrz BaseFix.matchMs.€ð ð˜4.ˆØ|‰|×!Ñ! $¨Ó0Ò<°WЊ>Ø"ˆDŒNØ H‰HO‰OÐ0°4·=±=Ñ@Ô AØ ‰‰˜Õ rcó¬— |j«}|j«}d|_d}|j|||fz«|r|j|«yy)NÚzLine %d: could not convert: %s)Ú get_linenoÚcloneÚprefixr2)rrÚreasonÚlinenoÚ for_outputÚmsgs rÚcannot_convertzBaseFix.cannot_convertzs[€ð ð —‘Ó"ˆØ—Z‘Z“\ˆ ؈ ÔØ.ˆØ ×ј ¨ Ð3Ñ3Ô4Ù Ø × Ñ ˜VÕ $ð rcóR— |j«}|jd||fz«y)Nz Line %d: %s)r5r2)rrr8r9s rÚwarningzBaseFix.warning‰s-€ð ð —‘Ó"ˆØ ×ј¨&°&Ð)9Ñ9Õ:rcóŒ— |j|_|j|«tjd«|_d|_y)NrT)r&rÚ itertoolsÚcountr)r/©rÚtreers rÚ start_treezBaseFix.start_tree“s9€ð ð Ÿ/™/ˆŒØ ×ј(Ô#Ü —‘ qÓ)ˆŒ ؈rcó— yr ©rBs rÚ finish_treezBaseFix.finish_treeŸs €ð ð r)Úxxx_todo_changemer )!Ú__name__Ú __module__Ú __qualname__rrrr rr@rAr)Úsetr&ÚorderÚexplicitÚ run_orderÚ _accept_typeÚkeep_line_orderÚ BM_compatiblerÚpython_symbolsÚsymsrrrrr$r-r2r<r>rDrGrFrrrrsž„ðð€GØ€GØ€LØ€GØ€H؈io‰o˜aÓ €GÙ“€JØ €EØ€HØ€Ià€Lð€Oà€Mð × Ñ €Dò ò Qò!ò =ò$ó ò!ó %ò;ò ó rrcó*‡—eZdZ dZˆfd„Zd„ZˆxZS)ÚConditionalFixNcó4•—tt| |Žd|_yr )ÚsuperrVrDÚ _should_skip)rÚargsÚ __class__s €rrDzConditionalFix.start_tree¯sø€Ü Œn˜dÑ.°Ñ5Ø ˆÕrcóÖ—|j |jS|jjd«}|d}dj|dd«}t |||«|_|jS)NÚ.éÿÿÿÿ)rYÚskip_onÚsplitÚjoinr)rrÚpkgr,s rÚ should_skipzConditionalFix.should_skip³sh€Ø × Ñ Ð (Ø×$Ñ$Ð $Øl‰l× Ñ  Ó%ˆØ2‰wˆØh‰hs˜3˜BxÓ ˆÜ,¨S°$¸Ó=ˆÔØ× Ñ Ð r)rIrJrKr_rDrcÚ __classcell__)r[s@rrVrV©sø„ØJð€Gô!ö!rrV) r@Úpatcomprr4rÚ fixer_utilrÚobjectrrVrFrrÚrhs5ðð9óõ%ÝÝ(ôX ˆfôX ôv!Wõ!rlib2to3/pygram.py000064400000002431152462633570007710 0ustar00# Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. """Export the Python grammar and symbols.""" # Python imports import os # Local imports from .pgen2 import token from .pgen2 import driver from . import pytree # The grammar file _GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "Grammar.txt") _PATTERN_GRAMMAR_FILE = os.path.join(os.path.dirname(__file__), "PatternGrammar.txt") class Symbols(object): def __init__(self, grammar): """Initializer. Creates an attribute for each grammar symbol (nonterminal), whose value is the symbol's type (an int >= 256). """ for name, symbol in grammar.symbol2number.items(): setattr(self, name, symbol) python_grammar = driver.load_packaged_grammar("lib2to3", _GRAMMAR_FILE) python_symbols = Symbols(python_grammar) python_grammar_no_print_statement = python_grammar.copy() del python_grammar_no_print_statement.keywords["print"] python_grammar_no_print_and_exec_statement = python_grammar_no_print_statement.copy() del python_grammar_no_print_and_exec_statement.keywords["exec"] pattern_grammar = driver.load_packaged_grammar("lib2to3", _PATTERN_GRAMMAR_FILE) pattern_symbols = Symbols(pattern_grammar) this.py000064400000001753152462633570006110 0ustar00s = """Gur Mra bs Clguba, ol Gvz Crgref Ornhgvshy vf orggre guna htyl. Rkcyvpvg vf orggre guna vzcyvpvg. Fvzcyr vf orggre guna pbzcyrk. Pbzcyrk vf orggre guna pbzcyvpngrq. Syng vf orggre guna arfgrq. Fcnefr vf orggre guna qrafr. Ernqnovyvgl pbhagf. Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf. Nygubhtu cenpgvpnyvgl orngf chevgl. Reebef fubhyq arire cnff fvyragyl. Hayrff rkcyvpvgyl fvyraprq. Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff. Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg. Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu. Abj vf orggre guna arire. Nygubhtu arire vf bsgra orggre guna *evtug* abj. Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn. Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn. Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!""" d = {} for c in (65, 97): for i in range(26): d[chr(i+c)] = chr((i+13) % 26 + c) print("".join([d.get(c, c) for c in s])) _strptime.py000064400000067351152462633570007155 0ustar00"""Strptime-related classes and functions. CLASSES: LocaleTime -- Discovers and stores locale-specific time information TimeRE -- Creates regexes for pattern matching a string of text containing time information FUNCTIONS: _getlang -- Figure out what language is being used for the locale strptime -- Calculates the time struct represented by the passed-in string """ import time import locale import calendar from re import compile as re_compile from re import sub as re_sub from re import IGNORECASE from re import escape as re_escape from datetime import (date as datetime_date, timedelta as datetime_timedelta, timezone as datetime_timezone) from _thread import allocate_lock as _thread_allocate_lock __all__ = [] def _getlang(): # Figure out what the current language is set to. return locale.getlocale(locale.LC_TIME) def _findall(haystack, needle): # Find all positions of needle in haystack. if not needle: return i = 0 while True: i = haystack.find(needle, i) if i < 0: break yield i i += len(needle) class LocaleTime(object): """Stores and handles locale-specific information related to time. ATTRIBUTES: f_weekday -- full weekday names (7-item list) a_weekday -- abbreviated weekday names (7-item list) f_month -- full month names (13-item list; dummy value in [0], which is added by code) a_month -- abbreviated month names (13-item list, dummy value in [0], which is added by code) am_pm -- AM/PM representation (2-item list) LC_date_time -- format string for date/time representation (string) LC_date -- format string for date representation (string) LC_time -- format string for time representation (string) timezone -- daylight- and non-daylight-savings timezone representation (2-item list of sets) lang -- Language used by instance (2-item tuple) """ def __init__(self): """Set all attributes. Order of methods called matters for dependency reasons. The locale language is set at the offset and then checked again before exiting. This is to make sure that the attributes were not set with a mix of information from more than one locale. This would most likely happen when using threads where one thread calls a locale-dependent function while another thread changes the locale while the function in the other thread is still running. Proper coding would call for locks to prevent changing the locale while locale-dependent code is running. The check here is done in case someone does not think about doing this. Only other possible issue is if someone changed the timezone and did not call tz.tzset . That is an issue for the programmer, though, since changing the timezone is worthless without that call. """ self.lang = _getlang() self.__calc_weekday() self.__calc_month() self.__calc_am_pm() self.__calc_timezone() self.__calc_date_time() if _getlang() != self.lang: raise ValueError("locale changed during initialization") if time.tzname != self.tzname or time.daylight != self.daylight: raise ValueError("timezone changed during initialization") def __calc_weekday(self): # Set self.a_weekday and self.f_weekday using the calendar # module. a_weekday = [calendar.day_abbr[i].lower() for i in range(7)] f_weekday = [calendar.day_name[i].lower() for i in range(7)] self.a_weekday = a_weekday self.f_weekday = f_weekday def __calc_month(self): # Set self.f_month and self.a_month using the calendar module. a_month = [calendar.month_abbr[i].lower() for i in range(13)] f_month = [calendar.month_name[i].lower() for i in range(13)] self.a_month = a_month self.f_month = f_month def __calc_am_pm(self): # Set self.am_pm by using time.strftime(). # The magic date (1999,3,17,hour,44,55,2,76,0) is not really that # magical; just happened to have used it everywhere else where a # static date was needed. am_pm = [] for hour in (1, 22): time_tuple = time.struct_time((1999,3,17,hour,44,55,2,76,0)) # br_FR has AM/PM info (' ',' '). am_pm.append(time.strftime("%p", time_tuple).lower().strip()) self.am_pm = am_pm def __calc_date_time(self): # Set self.date_time, self.date, & self.time by using # time.strftime(). # Use (1999,3,17,22,44,55,2,76,0) for magic date because the amount of # overloaded numbers is minimized. The order in which searches for # values within the format string is very important; it eliminates # possible ambiguity for what something represents. time_tuple = time.struct_time((1999,3,17,22,44,55,2,76,0)) time_tuple2 = time.struct_time((1999,1,3,1,1,1,6,3,0)) replacement_pairs = [ ('1999', '%Y'), ('99', '%y'), ('22', '%H'), ('44', '%M'), ('55', '%S'), ('76', '%j'), ('17', '%d'), ('03', '%m'), ('3', '%m'), # '3' needed for when no leading zero. ('2', '%w'), ('10', '%I'), # Non-ASCII digits ('\u0661\u0669\u0669\u0669', '%Y'), ('\u0669\u0669', '%Oy'), ('\u0662\u0662', '%OH'), ('\u0664\u0664', '%OM'), ('\u0665\u0665', '%OS'), ('\u0661\u0667', '%Od'), ('\u0660\u0663', '%Om'), ('\u0663', '%Om'), ('\u0662', '%Ow'), ('\u0661\u0660', '%OI'), ] date_time = [] for directive in ('%c', '%x', '%X'): current_format = time.strftime(directive, time_tuple).lower() current_format = current_format.replace('%', '%%') # The month and the day of the week formats are treated specially # because of a possible ambiguity in some locales where the full # and abbreviated names are equal or names of different types # are equal. See doc of __find_month_format for more details. lst, fmt = self.__find_weekday_format(directive) if lst: current_format = current_format.replace(lst[2], fmt, 1) lst, fmt = self.__find_month_format(directive) if lst: current_format = current_format.replace(lst[3], fmt, 1) if self.am_pm[1]: # Must deal with possible lack of locale info # manifesting itself as the empty string (e.g., Swedish's # lack of AM/PM info) or a platform returning a tuple of empty # strings (e.g., MacOS 9 having timezone as ('','')). current_format = current_format.replace(self.am_pm[1], '%p') for tz_values in self.timezone: for tz in tz_values: if tz: current_format = current_format.replace(tz, "%Z") # Transform all non-ASCII digits to digits in range U+0660 to U+0669. current_format = re_sub(r'\d(?3[0-1]|[1-2]\d|0[1-9]|[1-9]| [1-9])", 'f': r"(?P[0-9]{1,6})", 'H': r"(?P2[0-3]|[0-1]\d|\d)", 'I': r"(?P1[0-2]|0[1-9]|[1-9]| [1-9])", 'G': r"(?P\d\d\d\d)", 'j': r"(?P36[0-6]|3[0-5]\d|[1-2]\d\d|0[1-9]\d|00[1-9]|[1-9]\d|0[1-9]|[1-9])", 'm': r"(?P1[0-2]|0[1-9]|[1-9])", 'M': r"(?P[0-5]\d|\d)", 'S': r"(?P6[0-1]|[0-5]\d|\d)", 'U': r"(?P5[0-3]|[0-4]\d|\d)", 'w': r"(?P[0-6])", 'u': r"(?P[1-7])", 'V': r"(?P5[0-3]|0[1-9]|[1-4]\d|\d)", # W is set below by using 'U' 'y': r"(?P\d\d)", 'Y': r"(?P\d\d\d\d)", 'z': r"(?P[+-]\d\d:?[0-5]\d(:?[0-5]\d(\.\d{1,6})?)?|(?-i:Z))", 'A': self.__seqToRE(self.locale_time.f_weekday, 'A'), 'a': self.__seqToRE(self.locale_time.a_weekday, 'a'), 'B': self.__seqToRE(self.locale_time.f_month[1:], 'B'), 'b': self.__seqToRE(self.locale_time.a_month[1:], 'b'), 'p': self.__seqToRE(self.locale_time.am_pm, 'p'), 'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone for tz in tz_names), 'Z'), '%': '%'} for d in 'dmyHIMS': mapping['O' + d] = r'(?P<%s>\d\d|\d| \d)' % d mapping['Ow'] = r'(?P\d)' mapping['W'] = mapping['U'].replace('U', 'W') base.__init__(mapping) base.__setitem__('X', self.pattern(self.locale_time.LC_time)) base.__setitem__('x', self.pattern(self.locale_time.LC_date)) base.__setitem__('c', self.pattern(self.locale_time.LC_date_time)) def __seqToRE(self, to_convert, directive): """Convert a list to a regex string for matching a directive. Want possible matching values to be from longest to shortest. This prevents the possibility of a match occurring for a value that also a substring of a larger value that should have matched (e.g., 'abc' matching when 'abcdef' should have been the match). """ to_convert = sorted(to_convert, key=len, reverse=True) for value in to_convert: if value != '': break else: return '' regex = '|'.join(re_escape(stuff) for stuff in to_convert) regex = '(?P<%s>%s' % (directive, regex) return '%s)' % regex def pattern(self, format): """Return regex pattern for the format string. Need to make sure that any characters that might be interpreted as regex syntax are escaped. """ # The sub() call escapes all characters that might be misconstrued # as regex syntax. Cannot use re.escape since we have to deal with # format directives (%m, etc.). format = re_sub(r"([\\.^$*+?\(\){}\[\]|])", r"\\\1", format) format = re_sub(r'\s+', r'\\s+', format) format = re_sub(r"'", "['\u02bc]", format) # needed for br_FR def repl(m): return self[m[1]] format = re_sub(r'%(O?.)', repl, format) return format def compile(self, format): """Return a compiled re object for the format string.""" return re_compile(self.pattern(format), IGNORECASE) _cache_lock = _thread_allocate_lock() # DO NOT modify _TimeRE_cache or _regex_cache without acquiring the cache lock # first! _TimeRE_cache = TimeRE() _CACHE_MAX_SIZE = 5 # Max number of regexes stored in _regex_cache _regex_cache = {} def _calc_julian_from_U_or_W(year, week_of_year, day_of_week, week_starts_Mon): """Calculate the Julian day based on the year, week of the year, and day of the week, with week_start_day representing whether the week of the year assumes the week starts on Sunday or Monday (6 or 0).""" first_weekday = datetime_date(year, 1, 1).weekday() # If we are dealing with the %U directive (week starts on Sunday), it's # easier to just shift the view to Sunday being the first day of the # week. if not week_starts_Mon: first_weekday = (first_weekday + 1) % 7 day_of_week = (day_of_week + 1) % 7 # Need to watch out for a week 0 (when the first day of the year is not # the same as that specified by %U or %W). week_0_length = (7 - first_weekday) % 7 if week_of_year == 0: return 1 + day_of_week - first_weekday else: days_to_week = week_0_length + (7 * (week_of_year - 1)) return 1 + days_to_week + day_of_week def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): """Return a 2-tuple consisting of a time struct and an int containing the number of microseconds based on the input string and the format string.""" for index, arg in enumerate([data_string, format]): if not isinstance(arg, str): msg = "strptime() argument {} must be str, not {}" raise TypeError(msg.format(index, type(arg))) global _TimeRE_cache, _regex_cache with _cache_lock: locale_time = _TimeRE_cache.locale_time if (_getlang() != locale_time.lang or time.tzname != locale_time.tzname or time.daylight != locale_time.daylight): _TimeRE_cache = TimeRE() _regex_cache.clear() locale_time = _TimeRE_cache.locale_time if len(_regex_cache) > _CACHE_MAX_SIZE: _regex_cache.clear() format_regex = _regex_cache.get(format) if not format_regex: try: format_regex = _TimeRE_cache.compile(format) # KeyError raised when a bad format is found; can be specified as # \\, in which case it was a stray % but with a space after it except KeyError as err: bad_directive = err.args[0] if bad_directive == "\\": bad_directive = "%" del err raise ValueError("'%s' is a bad directive in format '%s'" % (bad_directive, format)) from None # IndexError only occurs when the format string is "%" except IndexError: raise ValueError("stray %% in format '%s'" % format) from None _regex_cache[format] = format_regex found = format_regex.match(data_string) if not found: raise ValueError("time data %r does not match format %r" % (data_string, format)) if len(data_string) != found.end(): raise ValueError("unconverted data remains: %s" % data_string[found.end():]) iso_year = year = None month = day = 1 hour = minute = second = fraction = 0 tz = -1 gmtoff = None gmtoff_fraction = 0 iso_week = week_of_year = None week_of_year_start = None # weekday and julian defaulted to None so as to signal need to calculate # values weekday = julian = None found_dict = found.groupdict() for group_key in found_dict.keys(): # Directives not explicitly handled below: # c, x, X # handled by making out of other directives # U, W # worthless without day of the week if group_key == 'y': year = int(found_dict['y']) # Open Group specification for strptime() states that a %y #value in the range of [00, 68] is in the century 2000, while #[69,99] is in the century 1900 if year <= 68: year += 2000 else: year += 1900 elif group_key == 'Y': year = int(found_dict['Y']) elif group_key == 'G': iso_year = int(found_dict['G']) elif group_key == 'm': month = int(found_dict['m']) elif group_key == 'B': month = locale_time.f_month.index(found_dict['B'].lower()) elif group_key == 'b': month = locale_time.a_month.index(found_dict['b'].lower()) elif group_key == 'd': day = int(found_dict['d']) elif group_key == 'H': hour = int(found_dict['H']) elif group_key == 'I': hour = int(found_dict['I']) ampm = found_dict.get('p', '').lower() # If there was no AM/PM indicator, we'll treat this like AM if ampm in ('', locale_time.am_pm[0]): # We're in AM so the hour is correct unless we're # looking at 12 midnight. # 12 midnight == 12 AM == hour 0 if hour == 12: hour = 0 elif ampm == locale_time.am_pm[1]: # We're in PM so we need to add 12 to the hour unless # we're looking at 12 noon. # 12 noon == 12 PM == hour 12 if hour != 12: hour += 12 elif group_key == 'M': minute = int(found_dict['M']) elif group_key == 'S': second = int(found_dict['S']) elif group_key == 'f': s = found_dict['f'] # Pad to always return microseconds. s += "0" * (6 - len(s)) fraction = int(s) elif group_key == 'A': weekday = locale_time.f_weekday.index(found_dict['A'].lower()) elif group_key == 'a': weekday = locale_time.a_weekday.index(found_dict['a'].lower()) elif group_key == 'w': weekday = int(found_dict['w']) if weekday == 0: weekday = 6 else: weekday -= 1 elif group_key == 'u': weekday = int(found_dict['u']) weekday -= 1 elif group_key == 'j': julian = int(found_dict['j']) elif group_key in ('U', 'W'): week_of_year = int(found_dict[group_key]) if group_key == 'U': # U starts week on Sunday. week_of_year_start = 6 else: # W starts week on Monday. week_of_year_start = 0 elif group_key == 'V': iso_week = int(found_dict['V']) elif group_key == 'z': z = found_dict['z'] if z == 'Z': gmtoff = 0 else: if z[3] == ':': z = z[:3] + z[4:] if len(z) > 5: if z[5] != ':': msg = f"Inconsistent use of : in {found_dict['z']}" raise ValueError(msg) z = z[:5] + z[6:] hours = int(z[1:3]) minutes = int(z[3:5]) seconds = int(z[5:7] or 0) gmtoff = (hours * 60 * 60) + (minutes * 60) + seconds gmtoff_remainder = z[8:] # Pad to always return microseconds. gmtoff_remainder_padding = "0" * (6 - len(gmtoff_remainder)) gmtoff_fraction = int(gmtoff_remainder + gmtoff_remainder_padding) if z.startswith("-"): gmtoff = -gmtoff gmtoff_fraction = -gmtoff_fraction elif group_key == 'Z': # Since -1 is default value only need to worry about setting tz if # it can be something other than -1. found_zone = found_dict['Z'].lower() for value, tz_values in enumerate(locale_time.timezone): if found_zone in tz_values: # Deal with bad locale setup where timezone names are the # same and yet time.daylight is true; too ambiguous to # be able to tell what timezone has daylight savings if (time.tzname[0] == time.tzname[1] and time.daylight and found_zone not in ("utc", "gmt")): break else: tz = value break # Deal with the cases where ambiguities arise # don't assume default values for ISO week/year if iso_year is not None: if julian is not None: raise ValueError("Day of the year directive '%j' is not " "compatible with ISO year directive '%G'. " "Use '%Y' instead.") elif iso_week is None or weekday is None: raise ValueError("ISO year directive '%G' must be used with " "the ISO week directive '%V' and a weekday " "directive ('%A', '%a', '%w', or '%u').") elif iso_week is not None: if year is None or weekday is None: raise ValueError("ISO week directive '%V' must be used with " "the ISO year directive '%G' and a weekday " "directive ('%A', '%a', '%w', or '%u').") else: raise ValueError("ISO week directive '%V' is incompatible with " "the year directive '%Y'. Use the ISO year '%G' " "instead.") leap_year_fix = False if year is None: if month == 2 and day == 29: year = 1904 # 1904 is first leap year of 20th century leap_year_fix = True else: year = 1900 # If we know the week of the year and what day of that week, we can figure # out the Julian day of the year. if julian is None and weekday is not None: if week_of_year is not None: week_starts_Mon = True if week_of_year_start == 0 else False julian = _calc_julian_from_U_or_W(year, week_of_year, weekday, week_starts_Mon) elif iso_year is not None and iso_week is not None: datetime_result = datetime_date.fromisocalendar(iso_year, iso_week, weekday + 1) year = datetime_result.year month = datetime_result.month day = datetime_result.day if julian is not None and julian <= 0: year -= 1 yday = 366 if calendar.isleap(year) else 365 julian += yday if julian is None: # Cannot pre-calculate datetime_date() since can change in Julian # calculation and thus could have different value for the day of # the week calculation. # Need to add 1 to result since first day of the year is 1, not 0. julian = datetime_date(year, month, day).toordinal() - \ datetime_date(year, 1, 1).toordinal() + 1 else: # Assume that if they bothered to include Julian day (or if it was # calculated above with year/week/weekday) it will be accurate. datetime_result = datetime_date.fromordinal( (julian - 1) + datetime_date(year, 1, 1).toordinal()) year = datetime_result.year month = datetime_result.month day = datetime_result.day if weekday is None: weekday = datetime_date(year, month, day).weekday() # Add timezone info tzname = found_dict.get("Z") if leap_year_fix: # the caller didn't supply a year but asked for Feb 29th. We couldn't # use the default of 1900 for computations. We set it back to ensure # that February 29th is smaller than March 1st. year = 1900 return (year, month, day, hour, minute, second, weekday, julian, tz, tzname, gmtoff), fraction, gmtoff_fraction def _strptime_time(data_string, format="%a %b %d %H:%M:%S %Y"): """Return a time struct based on the input string and the format string.""" tt = _strptime(data_string, format)[0] return time.struct_time(tt[:time._STRUCT_TM_ITEMS]) def _strptime_datetime(cls, data_string, format="%a %b %d %H:%M:%S %Y"): """Return a class cls instance based on the input string and the format string.""" tt, fraction, gmtoff_fraction = _strptime(data_string, format) tzname, gmtoff = tt[-2:] args = tt[:6] + (fraction,) if gmtoff is not None: tzdelta = datetime_timedelta(seconds=gmtoff, microseconds=gmtoff_fraction) if tzname: tz = datetime_timezone(tzdelta, tzname) else: tz = datetime_timezone(tzdelta) args += (tz,) return cls(*args) selectors.py000064400000046327152462633570007152 0ustar00"""Selectors module. This module allows high-level and efficient I/O multiplexing, built upon the `select` module primitives. """ from abc import ABCMeta, abstractmethod from collections import namedtuple from collections.abc import Mapping import math import select import sys # generic events, that must be mapped to implementation-specific ones EVENT_READ = (1 << 0) EVENT_WRITE = (1 << 1) def _fileobj_to_fd(fileobj): """Return a file descriptor from a file object. Parameters: fileobj -- file object or file descriptor Returns: corresponding file descriptor Raises: ValueError if the object is invalid """ if isinstance(fileobj, int): fd = fileobj else: try: fd = int(fileobj.fileno()) except (AttributeError, TypeError, ValueError): raise ValueError("Invalid file object: " "{!r}".format(fileobj)) from None if fd < 0: raise ValueError("Invalid file descriptor: {}".format(fd)) return fd SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data']) SelectorKey.__doc__ = """SelectorKey(fileobj, fd, events, data) Object used to associate a file object to its backing file descriptor, selected event mask, and attached data. """ SelectorKey.fileobj.__doc__ = 'File object registered.' SelectorKey.fd.__doc__ = 'Underlying file descriptor.' SelectorKey.events.__doc__ = 'Events that must be waited for on this file object.' SelectorKey.data.__doc__ = ('''Optional opaque data associated to this file object. For example, this could be used to store a per-client session ID.''') class _SelectorMapping(Mapping): """Mapping of file objects to selector keys.""" def __init__(self, selector): self._selector = selector def __len__(self): return len(self._selector._fd_to_key) def __getitem__(self, fileobj): try: fd = self._selector._fileobj_lookup(fileobj) return self._selector._fd_to_key[fd] except KeyError: raise KeyError("{!r} is not registered".format(fileobj)) from None def __iter__(self): return iter(self._selector._fd_to_key) class BaseSelector(metaclass=ABCMeta): """Selector abstract base class. A selector supports registering file objects to be monitored for specific I/O events. A file object is a file descriptor or any object with a `fileno()` method. An arbitrary object can be attached to the file object, which can be used for example to store context information, a callback, etc. A selector can use various implementations (select(), poll(), epoll()...) depending on the platform. The default `Selector` class uses the most efficient implementation on the current platform. """ @abstractmethod def register(self, fileobj, events, data=None): """Register a file object. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: ValueError if events is invalid KeyError if fileobj is already registered OSError if fileobj is closed or otherwise is unacceptable to the underlying system call (if a system call is made) Note: OSError may or may not be raised """ raise NotImplementedError @abstractmethod def unregister(self, fileobj): """Unregister a file object. Parameters: fileobj -- file object or file descriptor Returns: SelectorKey instance Raises: KeyError if fileobj is not registered Note: If fileobj is registered but has since been closed this does *not* raise OSError (even if the wrapped syscall does) """ raise NotImplementedError def modify(self, fileobj, events, data=None): """Change a registered file object monitored events or attached data. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: Anything that unregister() or register() raises """ self.unregister(fileobj) return self.register(fileobj, events, data) @abstractmethod def select(self, timeout=None): """Perform the actual selection, until some monitored file objects are ready or a timeout expires. Parameters: timeout -- if timeout > 0, this specifies the maximum wait time, in seconds if timeout <= 0, the select() call won't block, and will report the currently ready file objects if timeout is None, select() will block until a monitored file object becomes ready Returns: list of (key, events) for ready file objects `events` is a bitwise mask of EVENT_READ|EVENT_WRITE """ raise NotImplementedError def close(self): """Close the selector. This must be called to make sure that any underlying resource is freed. """ pass def get_key(self, fileobj): """Return the key associated to a registered file object. Returns: SelectorKey for this file object """ mapping = self.get_map() if mapping is None: raise RuntimeError('Selector is closed') try: return mapping[fileobj] except KeyError: raise KeyError("{!r} is not registered".format(fileobj)) from None @abstractmethod def get_map(self): """Return a mapping of file objects to selector keys.""" raise NotImplementedError def __enter__(self): return self def __exit__(self, *args): self.close() class _BaseSelectorImpl(BaseSelector): """Base selector implementation.""" def __init__(self): # this maps file descriptors to keys self._fd_to_key = {} # read-only mapping returned by get_map() self._map = _SelectorMapping(self) def _fileobj_lookup(self, fileobj): """Return a file descriptor from a file object. This wraps _fileobj_to_fd() to do an exhaustive search in case the object is invalid but we still have it in our map. This is used by unregister() so we can unregister an object that was previously registered even if it is closed. It is also used by _SelectorMapping. """ try: return _fileobj_to_fd(fileobj) except ValueError: # Do an exhaustive search. for key in self._fd_to_key.values(): if key.fileobj is fileobj: return key.fd # Raise ValueError after all. raise def register(self, fileobj, events, data=None): if (not events) or (events & ~(EVENT_READ | EVENT_WRITE)): raise ValueError("Invalid events: {!r}".format(events)) key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data) if key.fd in self._fd_to_key: raise KeyError("{!r} (FD {}) is already registered" .format(fileobj, key.fd)) self._fd_to_key[key.fd] = key return key def unregister(self, fileobj): try: key = self._fd_to_key.pop(self._fileobj_lookup(fileobj)) except KeyError: raise KeyError("{!r} is not registered".format(fileobj)) from None return key def modify(self, fileobj, events, data=None): try: key = self._fd_to_key[self._fileobj_lookup(fileobj)] except KeyError: raise KeyError("{!r} is not registered".format(fileobj)) from None if events != key.events: self.unregister(fileobj) key = self.register(fileobj, events, data) elif data != key.data: # Use a shortcut to update the data. key = key._replace(data=data) self._fd_to_key[key.fd] = key return key def close(self): self._fd_to_key.clear() self._map = None def get_map(self): return self._map def _key_from_fd(self, fd): """Return the key associated to a given file descriptor. Parameters: fd -- file descriptor Returns: corresponding key, or None if not found """ try: return self._fd_to_key[fd] except KeyError: return None class SelectSelector(_BaseSelectorImpl): """Select-based selector.""" def __init__(self): super().__init__() self._readers = set() self._writers = set() def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) if events & EVENT_READ: self._readers.add(key.fd) if events & EVENT_WRITE: self._writers.add(key.fd) return key def unregister(self, fileobj): key = super().unregister(fileobj) self._readers.discard(key.fd) self._writers.discard(key.fd) return key if sys.platform == 'win32': def _select(self, r, w, _, timeout=None): r, w, x = select.select(r, w, w, timeout) return r, w + x, [] else: _select = select.select def select(self, timeout=None): timeout = None if timeout is None else max(timeout, 0) ready = [] try: r, w, _ = self._select(self._readers, self._writers, [], timeout) except InterruptedError: return ready r = set(r) w = set(w) for fd in r | w: events = 0 if fd in r: events |= EVENT_READ if fd in w: events |= EVENT_WRITE key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready class _PollLikeSelector(_BaseSelectorImpl): """Base class shared between poll, epoll and devpoll selectors.""" _selector_cls = None _EVENT_READ = None _EVENT_WRITE = None def __init__(self): super().__init__() self._selector = self._selector_cls() def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) poller_events = 0 if events & EVENT_READ: poller_events |= self._EVENT_READ if events & EVENT_WRITE: poller_events |= self._EVENT_WRITE try: self._selector.register(key.fd, poller_events) except: super().unregister(fileobj) raise return key def unregister(self, fileobj): key = super().unregister(fileobj) try: self._selector.unregister(key.fd) except OSError: # This can happen if the FD was closed since it # was registered. pass return key def modify(self, fileobj, events, data=None): try: key = self._fd_to_key[self._fileobj_lookup(fileobj)] except KeyError: raise KeyError(f"{fileobj!r} is not registered") from None changed = False if events != key.events: selector_events = 0 if events & EVENT_READ: selector_events |= self._EVENT_READ if events & EVENT_WRITE: selector_events |= self._EVENT_WRITE try: self._selector.modify(key.fd, selector_events) except: super().unregister(fileobj) raise changed = True if data != key.data: changed = True if changed: key = key._replace(events=events, data=data) self._fd_to_key[key.fd] = key return key def select(self, timeout=None): # This is shared between poll() and epoll(). # epoll() has a different signature and handling of timeout parameter. if timeout is None: timeout = None elif timeout <= 0: timeout = 0 else: # poll() has a resolution of 1 millisecond, round away from # zero to wait *at least* timeout seconds. timeout = math.ceil(timeout * 1e3) ready = [] try: fd_event_list = self._selector.poll(timeout) except InterruptedError: return ready for fd, event in fd_event_list: events = 0 if event & ~self._EVENT_READ: events |= EVENT_WRITE if event & ~self._EVENT_WRITE: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready if hasattr(select, 'poll'): class PollSelector(_PollLikeSelector): """Poll-based selector.""" _selector_cls = select.poll _EVENT_READ = select.POLLIN _EVENT_WRITE = select.POLLOUT if hasattr(select, 'epoll'): class EpollSelector(_PollLikeSelector): """Epoll-based selector.""" _selector_cls = select.epoll _EVENT_READ = select.EPOLLIN _EVENT_WRITE = select.EPOLLOUT def fileno(self): return self._selector.fileno() def select(self, timeout=None): if timeout is None: timeout = -1 elif timeout <= 0: timeout = 0 else: # epoll_wait() has a resolution of 1 millisecond, round away # from zero to wait *at least* timeout seconds. timeout = math.ceil(timeout * 1e3) * 1e-3 # epoll_wait() expects `maxevents` to be greater than zero; # we want to make sure that `select()` can be called when no # FD is registered. max_ev = max(len(self._fd_to_key), 1) ready = [] try: fd_event_list = self._selector.poll(timeout, max_ev) except InterruptedError: return ready for fd, event in fd_event_list: events = 0 if event & ~select.EPOLLIN: events |= EVENT_WRITE if event & ~select.EPOLLOUT: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready def close(self): self._selector.close() super().close() if hasattr(select, 'devpoll'): class DevpollSelector(_PollLikeSelector): """Solaris /dev/poll selector.""" _selector_cls = select.devpoll _EVENT_READ = select.POLLIN _EVENT_WRITE = select.POLLOUT def fileno(self): return self._selector.fileno() def close(self): self._selector.close() super().close() if hasattr(select, 'kqueue'): class KqueueSelector(_BaseSelectorImpl): """Kqueue-based selector.""" def __init__(self): super().__init__() self._selector = select.kqueue() self._max_events = 0 def fileno(self): return self._selector.fileno() def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) try: if events & EVENT_READ: kev = select.kevent(key.fd, select.KQ_FILTER_READ, select.KQ_EV_ADD) self._selector.control([kev], 0, 0) self._max_events += 1 if events & EVENT_WRITE: kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, select.KQ_EV_ADD) self._selector.control([kev], 0, 0) self._max_events += 1 except: super().unregister(fileobj) raise return key def unregister(self, fileobj): key = super().unregister(fileobj) if key.events & EVENT_READ: kev = select.kevent(key.fd, select.KQ_FILTER_READ, select.KQ_EV_DELETE) self._max_events -= 1 try: self._selector.control([kev], 0, 0) except OSError: # This can happen if the FD was closed since it # was registered. pass if key.events & EVENT_WRITE: kev = select.kevent(key.fd, select.KQ_FILTER_WRITE, select.KQ_EV_DELETE) self._max_events -= 1 try: self._selector.control([kev], 0, 0) except OSError: # See comment above. pass return key def select(self, timeout=None): timeout = None if timeout is None else max(timeout, 0) # If max_ev is 0, kqueue will ignore the timeout. For consistent # behavior with the other selector classes, we prevent that here # (using max). See https://bugs.python.org/issue29255 max_ev = self._max_events or 1 ready = [] try: kev_list = self._selector.control(None, max_ev, timeout) except InterruptedError: return ready for kev in kev_list: fd = kev.ident flag = kev.filter events = 0 if flag == select.KQ_FILTER_READ: events |= EVENT_READ if flag == select.KQ_FILTER_WRITE: events |= EVENT_WRITE key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready def close(self): self._selector.close() super().close() def _can_use(method): """Check if we can use the selector depending upon the operating system. """ # Implementation based upon https://github.com/sethmlarson/selectors2/blob/master/selectors2.py selector = getattr(select, method, None) if selector is None: # select module does not implement method return False # check if the OS and Kernel actually support the method. Call may fail with # OSError: [Errno 38] Function not implemented try: selector_obj = selector() if method == 'poll': # check that poll actually works selector_obj.poll(0) else: # close epoll, kqueue, and devpoll fd selector_obj.close() return True except OSError: return False # Choose the best implementation, roughly: # epoll|kqueue|devpoll > poll > select. # select() also can't accept a FD > FD_SETSIZE (usually around 1024) if _can_use('kqueue'): DefaultSelector = KqueueSelector elif _can_use('epoll'): DefaultSelector = EpollSelector elif _can_use('devpoll'): DefaultSelector = DevpollSelector elif _can_use('poll'): DefaultSelector = PollSelector else: DefaultSelector = SelectSelector pipes.py000064400000021422152462633570006254 0ustar00"""Conversion pipeline templates. The problem: ------------ Suppose you have some data that you want to convert to another format, such as from GIF image format to PPM image format. Maybe the conversion involves several steps (e.g. piping it through compress or uuencode). Some of the conversion steps may require that their input is a disk file, others may be able to read standard input; similar for their output. The input to the entire conversion may also be read from a disk file or from an open file, and similar for its output. The module lets you construct a pipeline template by sticking one or more conversion steps together. It will take care of creating and removing temporary files if they are necessary to hold intermediate data. You can then use the template to do conversions from many different sources to many different destinations. The temporary file names used are different each time the template is used. The templates are objects so you can create templates for many different conversion steps and store them in a dictionary, for instance. Directions: ----------- To create a template: t = Template() To add a conversion step to a template: t.append(command, kind) where kind is a string of two characters: the first is '-' if the command reads its standard input or 'f' if it requires a file; the second likewise for the output. The command must be valid /bin/sh syntax. If input or output files are required, they are passed as $IN and $OUT; otherwise, it must be possible to use the command in a pipeline. To add a conversion step at the beginning: t.prepend(command, kind) To convert a file to another file using a template: sts = t.copy(infile, outfile) If infile or outfile are the empty string, standard input is read or standard output is written, respectively. The return value is the exit status of the conversion pipeline. To open a file for reading or writing through a conversion pipeline: fp = t.open(file, mode) where mode is 'r' to read the file, or 'w' to write it -- just like for the built-in function open() or for os.popen(). To create a new template object initialized to a given one: t2 = t.clone() """ # ' import re import os import tempfile import warnings # we import the quote function rather than the module for backward compat # (quote used to be an undocumented but used function in pipes) from shlex import quote warnings._deprecated(__name__, remove=(3, 13)) __all__ = ["Template"] # Conversion step kinds FILEIN_FILEOUT = 'ff' # Must read & write real files STDIN_FILEOUT = '-f' # Must write a real file FILEIN_STDOUT = 'f-' # Must read a real file STDIN_STDOUT = '--' # Normal pipeline element SOURCE = '.-' # Must be first, writes stdout SINK = '-.' # Must be last, reads stdin stepkinds = [FILEIN_FILEOUT, STDIN_FILEOUT, FILEIN_STDOUT, STDIN_STDOUT, \ SOURCE, SINK] class Template: """Class representing a pipeline template.""" def __init__(self): """Template() returns a fresh pipeline template.""" self.debugging = 0 self.reset() def __repr__(self): """t.__repr__() implements repr(t).""" return '