
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \½  ã               @   sŒ   d Z ddlmZ ddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZ dd„ ZG dd	„ d	ejƒZd
d„ Zdd„ Zg dfdd„Zdd„ ZdS )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             C   s   t | tjƒo| jd jtjkS )Né    )Ú
isinstancer   ÚNodeÚchildrenÚtyper   ÚSTRING)Ústmt© r   ú6/usr/lib64/python3.6/lib2to3/fixes/fix_tuple_params.pyÚis_docstring   s    r   c               @   s(   e Zd ZdZdZdZdd„ Zdd„ ZdS )	ÚFixTupleParamsé   Ta  
              funcdef< 'def' any parameters< '(' args=any ')' >
                       ['->' any] ':' suite=any+ >
              |
              lambda=
              lambdef< 'lambda' args=vfpdef< '(' inner=any ')' >
                       ':' body=any
              >
              c                sª  d|krˆj ||ƒS g ‰|d }|d }|d jd jtjkrZd}|d jd j}tƒ ‰ nd}d}tjtjdƒ‰ d‡ ‡‡fd
d„	}|jt	j
kr˜||ƒ n@|jt	jkrØx2t|jƒD ]$\}}	|	jt	j
kr°||	|dkd� q°W ˆsàd S xˆD ]}
|d |
_qæW |}|dk�rdˆd _n&t|d j| ƒ�r8|ˆd _|d }xˆD ]}
|d |
_�q>W ˆ|d j||…< x4t|d |tˆƒ d ƒD ]}||d j| _�q€W |d jƒ  d S )NÚlambdaÚsuiteÚargsr   é   r   z; Ú Fc                s\   t ˆjƒ ƒ}| jƒ }d|_t||jƒ ƒ}|r2d|_| j|ƒ ˆjtjt	j
|ˆ jƒ gƒƒ d S )Nr   ú )r   Únew_nameÚcloneÚprefixr   ÚreplaceÚappendr   r   r
   Zsimple_stmt)Z	tuple_argÚ
add_prefixÚnÚargr   )ÚendÚ	new_linesÚselfr   r   Úhandle_tupleC   s    
z.FixTupleParams.transform.<locals>.handle_tuple)r"   r   )F)Útransform_lambdar   r   r   ÚINDENTÚvaluer   r   ZLeafr
   ZtfpdefZtypedargslistÚ	enumerateÚparentr   r   ÚrangeÚlenZchanged)r'   ÚnodeÚresultsr   r   ÚstartÚindentr(   Úir$   ÚlineÚafterr   )r%   r&   r'   r   Ú	transform.   sF    




 zFixTupleParams.transformc             C   sæ   |d }|d }t |d ƒ}|jtjkrD|jƒ }d|_|j|ƒ d S t|ƒ}t|ƒ}| j	t
|ƒƒ}t|dd�}	|j|	jƒ ƒ xd|jƒ D ]X}
|
jtjkr†|
j|kr†dd„ ||
j D ƒ}tjtj|	jƒ g| ƒ}|
j|_|
j|ƒ q†W d S )Nr   ÚbodyÚinnerr   )r   c             S   s   g | ]}|j ƒ ‘qS r   )r   )Ú.0Úcr   r   r   ú
<listcomp>‚   s    z3FixTupleParams.transform_lambda.<locals>.<listcomp>)Úsimplify_argsr   r   ÚNAMEr   r   r    Úfind_paramsÚmap_to_indexr   Ú
tuple_namer   Z
post_orderr+   r   r   r
   Zpower)r'   r0   r1   r   r8   r9   ZparamsZto_indexZtup_nameZ	new_paramr#   Z
subscriptsÚnewr   r   r   r)   n   s(    
zFixTupleParams.transform_lambdaN)Ú__name__Ú
__module__Ú__qualname__Z	run_orderZBM_compatibleZPATTERNr7   r)   r   r   r   r   r      s
   
@r   c             C   sR   | j tjtjfkr| S | j tjkrBx| j tjkr<| jd } q$W | S td|  ƒ‚d S )Nr   zReceived unexpected node %s)r   r
   Zvfplistr   r>   Úvfpdefr   ÚRuntimeError)r0   r   r   r   r=   ‹   s    r=   c             C   s<   | j tjkrt| jd ƒS | j tjkr,| jS dd„ | jD ƒS )Nr   c             S   s    g | ]}|j tjkrt|ƒ‘qS r   )r   r   ÚCOMMAr?   )r:   r;   r   r   r   r<   ›   s    zfind_params.<locals>.<listcomp>)r   r
   rF   r?   r   r   r>   r+   )r0   r   r   r   r?   –   s
    r?   Nc             C   s^   |d kri }xLt | ƒD ]@\}}ttt|ƒƒƒg}t|tƒrJt|||d� q|| ||< qW |S )N)Úd)r,   r	   r   Ústrr   Úlistr@   )Ú
param_listr   rI   r4   ÚobjZtrailerr   r   r   r@   �   s    
r@   c             C   s@   g }x0| D ](}t |tƒr(|jt|ƒƒ q
|j|ƒ q
W dj|ƒS )NÚ_)r   rK   r!   rA   Újoin)rL   ÚlrM   r   r   r   rA   ¨   s    

rA   )Ú__doc__r   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r=   r?   r@   rA   r   r   r   r   Ú<module>   s    l