o
     JAf                     @   s   	 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 )   )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   5/usr/lib/python3.10/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|v r
 ||S g |d }|d }|d jd jtjkr-d}|d jd j}t  nd}d}ttjd d fd
d	}|jt	j
krL|| n|jt	jkrjt|jD ]\}}	|	jt	j
kri||	|dkd qWsnd S D ]}
|d |
_qp|}|dkrdd _nt|d j| r|d _|d }D ]}
|d |
_q|d j||< t|d |t d D ]
}||d j| _q|d   d S )Nlambdasuiteargsr      r   z;  Fc                    s\   t  }|  }d|_t|| }|rd|_| | tt	j
|  g d S )Nr    )r   new_namecloneprefixr   replaceappendr   r   r
   Zsimple_stmt)Z	tuple_arg
add_prefixnargr   endZ	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lenchanged)r'   noderesultsr   r   startindentr(   ir$   lineZafterr   r%   r   	transform.   sH   

zFixTupleParams.transformc                 C   s   |d }|d }t |d }|jtjkr"| }d|_|| d S t|}t|}| 	t
|}t|dd}	||	  | D ],}
|
jtjkrn|
j|v rndd ||
j D }ttj|	 g| }|
j|_|
| qBd S )Nr   bodyinnerr   )r   c                 S   s   g | ]}|  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'   r1   r2   r   r8   r9   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   sT   | j tjtjfv r| S | j tjkr$| j tjkr"| jd } | j tjks| S td|  )Nr   zReceived unexpected node %s)r   r
   Zvfplistr   r?   vfpdefr   RuntimeErrorr1   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=      s     zfind_params.<locals>.<listcomp>)r   r
   rH   r@   r   r   r?   r+   rJ   r   r   r   r@      s
   r@   Nc                 C   sZ   |d u ri }t | D ] \}}ttt|g}t|tr$t|||d q
|| ||< q
|S )N)d)r,   r	   r   strr   listrA   )
param_listr   rL   r5   objZtrailerr   r   r   rA      s   
rA   c                 C   s<   g }| D ]}t |tr|t| q|| qd|S )N_)r   rN   r!   rB   join)rO   lrP   r   r   r   rB      s   

rB   )r   r   Zpgen2r   r   Z
fixer_utilr   r   r   r   r	   r
   r   ZBaseFixr   r>   r@   rA   rB   r   r   r   r   <module>   s     l