GRAYBYTE WORDPRESS FILE MANAGER8191

Server IP : 198.54.121.189 / Your IP : 216.73.216.224
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/python27/lib64/python2.7/lib2to3/fixes/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/python27/lib64/python2.7/lib2to3/fixes//fix_tuple_params.py
"""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
"""
# Author: Collin Winter

# Local imports
from .. import pytree
from ..pgen2 import token
from .. import fixer_base
from ..fixer_util import Assign, Name, Newline, Number, Subscript, syms

def is_docstring(stmt):
    return isinstance(stmt, pytree.Node) and \
           stmt.children[0].type == token.STRING

class FixTupleParams(fixer_base.BaseFix):
    run_order = 4 #use a lower order since lambda is part of other
                  #patterns
    BM_compatible = True

    PATTERN = """
              funcdef< 'def' any parameters< '(' args=any ')' >
                       ['->' any] ':' suite=any+ >
              |
              lambda=
              lambdef< 'lambda' args=vfpdef< '(' inner=any ')' >
                       ':' body=any
              >
              """

    def transform(self, node, results):
        if "lambda" in results:
            return self.transform_lambda(node, results)

        new_lines = []
        suite = results["suite"]
        args = results["args"]
        # This crap is so "def foo(...): x = 5; y = 7" is handled correctly.
        # TODO(cwinter): suite-cleanup
        if suite[0].children[1].type == token.INDENT:
            start = 2
            indent = suite[0].children[1].value
            end = Newline()
        else:
            start = 0
            indent = u"; "
            end = pytree.Leaf(token.INDENT, u"")

        # We need access to self for new_name(), and making this a method
        #  doesn't feel right. Closing over self and new_lines makes the
        #  code below cleaner.
        def handle_tuple(tuple_arg, add_prefix=False):
            n = Name(self.new_name())
            arg = tuple_arg.clone()
            arg.prefix = u""
            stmt = Assign(arg, n.clone())
            if add_prefix:
                n.prefix = u" "
            tuple_arg.replace(n)
            new_lines.append(pytree.Node(syms.simple_stmt,
                                         [stmt, end.clone()]))

        if args.type == syms.tfpdef:
            handle_tuple(args)
        elif args.type == syms.typedargslist:
            for i, arg in enumerate(args.children):
                if arg.type == syms.tfpdef:
                    # Without add_prefix, the emitted code is correct,
                    #  just ugly.
                    handle_tuple(arg, add_prefix=(i > 0))

        if not new_lines:
            return

        # This isn't strictly necessary, but it plays nicely with other fixers.
        # TODO(cwinter) get rid of this when children becomes a smart list
        for line in new_lines:
            line.parent = suite[0]

        # TODO(cwinter) suite-cleanup
        after = start
        if start == 0:
            new_lines[0].prefix = u" "
        elif is_docstring(suite[0].children[start]):
            new_lines[0].prefix = indent
            after = start + 1

        for line in new_lines:
            line.parent = suite[0]
        suite[0].children[after:after] = new_lines
        for i in range(after+1, after+len(new_lines)+1):
            suite[0].children[i].prefix = indent
        suite[0].changed()

    def transform_lambda(self, node, results):
        args = results["args"]
        body = results["body"]
        inner = simplify_args(results["inner"])

        # Replace lambda ((((x)))): x  with lambda x: x
        if inner.type == token.NAME:
            inner = inner.clone()
            inner.prefix = u" "
            args.replace(inner)
            return

        params = find_params(args)
        to_index = map_to_index(params)
        tup_name = self.new_name(tuple_name(params))

        new_param = Name(tup_name, prefix=u" ")
        args.replace(new_param.clone())
        for n in body.post_order():
            if n.type == token.NAME and n.value in to_index:
                subscripts = [c.clone() for c in to_index[n.value]]
                new = pytree.Node(syms.power,
                                  [new_param.clone()] + subscripts)
                new.prefix = n.prefix
                n.replace(new)


### Helper functions for transform_lambda()

def simplify_args(node):
    if node.type in (syms.vfplist, token.NAME):
        return node
    elif node.type == syms.vfpdef:
        # These look like vfpdef< '(' x ')' > where x is NAME
        # or another vfpdef instance (leading to recursion).
        while node.type == syms.vfpdef:
            node = node.children[1]
        return node
    raise RuntimeError("Received unexpected node %s" % node)

def find_params(node):
    if node.type == syms.vfpdef:
        return find_params(node.children[1])
    elif node.type == token.NAME:
        return node.value
    return [find_params(c) for c in node.children if c.type != token.COMMA]

def map_to_index(param_list, prefix=[], d=None):
    if d is None:
        d = {}
    for i, obj in enumerate(param_list):
        trailer = [Subscript(Number(unicode(i)))]
        if isinstance(obj, list):
            map_to_index(obj, trailer, d=d)
        else:
            d[obj] = prefix + trailer
    return d

def tuple_name(param_list):
    l = []
    for obj in param_list:
        if isinstance(obj, list):
            l.append(tuple_name(obj))
        else:
            l.append(obj)
    return u"_".join(l)

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
January 24 2025 09:33:01
root / linksafe
0755
__init__.py
0.046 KB
January 08 2025 10:43:36
root / linksafe
0644
__init__.pyc
0.143 KB
January 08 2025 10:43:36
root / linksafe
0644
__init__.pyo
0.143 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_apply.py
2.376 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_apply.pyc
2.073 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_apply.pyo
2.041 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_asserts.py
0.961 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_asserts.pyc
1.563 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_asserts.pyo
1.563 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_basestring.py
0.313 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_basestring.pyc
0.826 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_basestring.pyo
0.826 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_buffer.py
0.577 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_buffer.pyc
0.979 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_buffer.pyo
0.979 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_dict.py
3.734 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_dict.pyc
3.731 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_dict.pyo
3.609 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_except.py
3.273 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_except.pyc
2.989 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_except.pyo
2.989 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exec.py
0.979 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exec.pyc
1.437 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exec.pyo
1.404 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_execfile.py
2.008 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_execfile.pyc
2.097 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_execfile.pyo
2.064 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exitfunc.py
2.444 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exitfunc.pyc
2.756 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_exitfunc.pyo
2.756 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_filter.py
2.058 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_filter.pyc
2.255 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_filter.pyo
2.255 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_funcattrs.py
0.63 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_funcattrs.pyc
1.14 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_funcattrs.pyo
1.14 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_future.py
0.534 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_future.pyc
0.949 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_future.pyo
0.949 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_getcwdu.py
0.441 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_getcwdu.pyc
0.956 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_getcwdu.pyo
0.956 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_has_key.py
3.151 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_has_key.pyc
3.161 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_has_key.pyo
3.129 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_idioms.py
4.774 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_idioms.pyc
4.52 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_idioms.pyo
4.418 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_import.py
3.184 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_import.pyc
3.253 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_import.pyo
3.253 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_imports.py
5.56 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_imports.pyc
5.381 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_imports.pyo
5.381 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_imports2.py
0.282 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_imports2.pyc
0.645 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_imports2.pyo
0.645 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_input.py
0.693 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_input.pyc
1.159 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_input.pyo
1.159 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_intern.py
1.822 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_intern.pyc
1.793 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_intern.pyo
1.793 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_isinstance.py
1.571 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_isinstance.pyc
1.847 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_isinstance.pyo
1.847 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_itertools.py
1.514 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_itertools.pyc
1.801 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_itertools.pyo
1.801 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_itertools_imports.py
2.045 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_itertools_imports.pyc
2.021 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_itertools_imports.pyo
1.977 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_long.py
0.466 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_long.pyc
0.873 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_long.pyo
0.873 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_map.py
2.99 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_map.pyc
3.021 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_map.pyo
3.021 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_metaclass.py
8.023 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_metaclass.pyc
6.564 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_metaclass.pyo
6.516 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_methodattrs.py
0.601 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_methodattrs.pyc
1.163 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_methodattrs.pyo
1.163 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_ne.py
0.56 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_ne.pyc
1.028 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_ne.pyo
1.028 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_next.py
3.106 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_next.pyc
3.573 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_next.pyo
3.541 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_nonzero.py
0.584 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_nonzero.pyc
1.112 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_nonzero.pyo
1.112 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_numliterals.py
0.755 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_numliterals.pyc
1.286 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_numliterals.pyo
1.286 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_operator.py
3.391 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_operator.pyc
5.22 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_operator.pyo
5.22 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_paren.py
1.199 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_paren.pyc
1.559 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_paren.pyo
1.559 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_print.py
2.798 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_print.pyc
2.729 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_print.pyo
2.635 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_raise.py
2.865 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_raise.pyc
2.491 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_raise.pyo
2.491 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_raw_input.py
0.444 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_raw_input.pyc
0.966 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_raw_input.pyo
0.966 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_reduce.py
0.819 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_reduce.pyc
1.284 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_reduce.pyo
1.284 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_renames.py
2.166 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_renames.pyc
2.502 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_renames.pyo
2.502 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_repr.py
0.6 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_repr.pyc
1.044 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_repr.pyo
1.044 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_set_literal.py
1.659 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_set_literal.pyc
2.008 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_set_literal.pyo
2.008 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_standarderror.py
0.439 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_standarderror.pyc
0.885 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_standarderror.pyo
0.885 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_sys_exc.py
1.015 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_sys_exc.pyc
1.731 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_sys_exc.pyo
1.731 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_throw.py
1.549 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_throw.pyc
2.001 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_throw.pyo
2.001 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_tuple_params.py
5.446 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_tuple_params.pyc
5.457 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_tuple_params.pyo
5.457 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_types.py
1.767 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_types.pyc
2.196 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_types.pyo
2.196 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_unicode.py
1.239 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_unicode.pyc
1.742 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_unicode.pyo
1.742 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_urllib.py
8.188 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_urllib.pyc
7.106 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_urllib.pyo
7.106 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_ws_comma.py
1.069 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_ws_comma.pyc
1.401 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_ws_comma.pyo
1.401 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_xrange.py
2.636 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_xrange.pyc
3.116 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_xrange.pyo
3.116 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_xreadlines.py
0.674 KB
January 08 2025 10:43:35
root / linksafe
0644
fix_xreadlines.pyc
1.177 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_xreadlines.pyo
1.177 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_zip.py
0.883 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_zip.pyc
1.366 KB
January 08 2025 10:43:36
root / linksafe
0644
fix_zip.pyo
1.366 KB
January 08 2025 10:43:36
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF