a
    zef;                     @   s  d dl mZ d dlmZmZ d dlmZ d dlm	Z	 dd Z
dd Zd	d
 Zdd ZdMddZdd Zdd Zdd Ze e fddZdNddZdd Zdd ZdOddZd d! ZdPd"d#ZdQd$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zh d0Zd1d2 Z d3a!d4a"d5a#d6a$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,ej-ej.hZ/dRdGdHZ0ej.ej-ej1hZ2dIdJ Z3dSdKdLZ4dS )T   )token)LeafNode)python_symbols)patcompc                 C   s   t tj| ttjd|gS )N=)r   symsargumentr   r   EQUAL)keywordvalue r   (/usr/lib/python3.9/lib2to3/fixer_util.py
KeywordArg   s    r   c                   C   s   t tjdS )N()r   r   LPARr   r   r   r   LParen   s    r   c                   C   s   t tjdS )N))r   r   RPARr   r   r   r   RParen   s    r   c                 C   sH   t | ts| g} t |ts&d|_|g}ttj| ttjdddg | S )N r   prefix)	
isinstancelistr   r   r   atomr   r   r
   )targetsourcer   r   r   Assign   s    

r   Nc                 C   s   t tj| |dS Nr   )r   r   NAME)namer   r   r   r   Name$   s    r"   c                 C   s   | t tjt |ggS N)r   r   trailerDot)objattrr   r   r   Attr(   s    r(   c                   C   s   t tjdS )N,)r   r   COMMAr   r   r   r   Comma,   s    r+   c                   C   s   t tjdS )N.)r   r   DOTr   r   r   r   r%   0   s    r%   c                 C   s4   t tj| | g}| r0|dt tj|  |S )Nr   )r   r   r$   cloneinsert_childarglist)argsZlparenZrparennoder   r   r   ArgList4   s    r3   c                 C   s&   t tj| t|g}|d ur"||_|S r#   )r   r   powerr3   r   )	func_namer1   r   r2   r   r   r   Call;   s    r6   c                   C   s   t tjdS )N
r   r   NEWLINEr   r   r   r   NewlineB   s    r:   c                   C   s   t tjdS )N r8   r   r   r   r   	BlankLineF   s    r<   c                 C   s   t tj| |dS r   )r   r   NUMBER)nr   r   r   r   NumberJ   s    r?   c                 C   s"   t tjttjd| ttjdgS )N[])r   r   r$   r   r   LBRACERBRACE)Z
index_noder   r   r   	SubscriptM   s    
rD   c                 C   s   t tj| |dS r   )r   r   STRING)stringr   r   r   r   StringS   s    rG   c           	      C   s   d| _ d|_ d|_ ttjd}d|_ ttjd}d|_ ||||g}|rtd|_ ttjd}d|_ |ttj||g ttj| ttj	|g}ttj
ttjd|ttjdgS )Nr;   r   forinifr@   rA   )r   r   r   r    appendr   r   Zcomp_ifZ	listmakerZcomp_forr   rB   rC   )	ZxpfpittestZfor_leafZin_leafZ
inner_argsZif_leafinnerr   r   r   ListCompW   s(    

rP   c                 C   sV   |D ]}|   qttjdttj| ddttjdddttj|g}ttj|}|S )Nfromr   r   import)remover   r   r    r   r   import_as_namesimport_from)Zpackage_nameZ
name_leafsZleafchildrenimpr   r   r   
FromImporto   s    


rX   c              	   C   s   |d   }|jtjkr"|  }nttj|  g}|d }|rNdd |D }ttjtt|d t|d ttj|d   ||d   gg | }| j	|_	|S )	Nr&   afterc                 S   s   g | ]}|  qS r   )r.   ).0r>   r   r   r   
<listcomp>       z!ImportAndCall.<locals>.<listcomp>    r   ZlparZrpar)
r.   typer   r0   r   r4   r(   r"   r$   r   )r2   resultsnamesr&   Z
newarglistrY   newr   r   r   ImportAndCall   s*    


rb   c                 C   s   t | tr | jt t gkr dS t | tot| jdkot | jd tot | jd tot | jd to| jd jdko| jd jdkS )NT   r]   r      r   r   )r   r   rV   r   r   lenr   r   r2   r   r   r   is_tuple   s    
rg   c                 C   sX   t | toVt| jdkoVt | jd toVt | jd toV| jd jdkoV| jd jdkS )Nr   r]   r@   rA   )r   r   re   rV   r   r   rf   r   r   r   is_list   s    
ri   c                 C   s   t tjt | t gS r#   )r   r   r   r   r   rf   r   r   r   parenthesize   s    rj   >
   tupleanyminr   setsortedallsummax	enumeratec                 c   s$   t | |}|r |V  t ||}q
d S r#   )getattr)r&   r'   nextr   r   r   
attr_chain   s    
rv   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<node=any any*> ')' >
    any*
>
Fc                 C   sp   t s&ttattattada tttg}t|t| dD ]*\}}i }|||r@|d | u r@ dS q@dS )NTparentr2   F)	
pats_builtr   compile_patternp0p1p2ziprv   match)r2   patternspatternrw   r_   r   r   r   in_special_context   s    



r   c                 C   s   | j }|d ur|jtjkrdS | j}|jtjtjfv r:dS |jtjkrX|j	d | u rXdS |jtj
ks|jtjkr|d ur|jtjks|j	d | u rdS dS )NFr]   T)Zprev_siblingr^   r   r-   rw   r   funcdefclassdef	expr_stmtrV   
parametersZtypedargslistr*   )r2   prevrw   r   r   r   is_probably_builtin   s&    

r   c                 C   sJ   | d urF| j tjkr>t| jdkr>| jd }|j tjkr>|jS | j} q dS )Nrd   r   r;   )	r^   r   suitere   rV   r   INDENTr   rw   )r2   indentr   r   r   find_indentation  s    
r   c                 C   s>   | j tjkr| S |  } | jd  }| _ttj| g}||_|S r#   )r^   r   r   r.   rw   r   )r2   rw   r   r   r   r   
make_suite  s    r   c                 C   s$   | j tjkr | j} | s tdq | S )Nz,root found before file_input node was found.)r^   r   Z
file_inputrw   
ValueErrorrf   r   r   r   	find_root&  s
    
r   c                 C   s   t |t|| }t|S r#   )find_bindingr   bool)packager!   r2   Zbindingr   r   r   does_tree_import/  s    r   c                 C   s   | j tjtjfv S r#   )r^   r   import_namerU   rf   r   r   r   	is_import7  s    r   c                 C   s.  dd }t |}t| ||r d S d }}t|jD ]F\}}||sDq2t|j|d  D ]\}}||sV qlqV|| } qzq2|dkrt|jD ]8\}}|jtjkr|jr|jd jtjkr|d } qq| d u rt	tj
ttjdttj|ddg}	nt| ttj|ddg}	|	t g}
||t	tj|
 d S )Nc                 S   s    | j tjko| jot| jd S )Nr]   )r^   r   simple_stmtrV   r   rf   r   r   r   is_import_stmt>  s    z$touch_import.<locals>.is_import_stmtr]   r   rR   r   r   )r   r   rs   rV   r^   r   r   r   rE   r   r   r   r    rX   r:   r/   )r   r!   r2   r   rootZ
insert_posoffsetidxZnode2import_rV   r   r   r   touch_import;  s8    

r   c                 C   s  |j D ]}d }|jtjkrVt| |j d r4|  S t| t|j d |}|rR|}n0|jtjtjfv rt| t|j d |}|r|} n|jtj	krt| t|j d |}|r|}nTt
|j dd  D ]@\}}|jtjkr|jdkrt| t|j |d  |}|r|}qnx|jtv r2|j d j| kr2|}nTt|| |rF|}n@|jtjkrbt| ||}n$|jtjkrt| |j d r|}|r|s|  S t|r|  S qd S )Nr   rh   rd   rc   :   r]   )rV   r^   r   Zfor_stmt_findr   r   Zif_stmtZ
while_stmtZtry_stmtrs   r   COLONr   	_def_syms_is_import_bindingr   r   r   )r!   r2   r   childretr>   iZkidr   r   r   r   i  sB    
r   c                 C   sT   |g}|rP|  }|jdkr4|jtvr4||j q|jtjkr|j| kr|S qd S )N   )popr^   _block_symsextendrV   r   r    r   )r!   r2   Znodesr   r   r   r     s    r   c                 C   s  | j tjkr|s| jd }|j tjkrx|jD ]H}|j tjkrV|jd j|krt|   S q,|j tjkr,|j|kr,|   S q,nL|j tjkr|jd }|j tjkr|j|kr| S n|j tjkr|j|kr| S n| j tj	kr|rt
| jd  |krd S | jd }|rtd|rd S |j tjkr0t||r0| S |j tjkrh|jd }|j tjkr|j|kr| S n6|j tjkr|j|kr| S |r|j tjkr| S d S )Nr   rd   rh   rc   as)r^   r   r   rV   Zdotted_as_namesZdotted_as_namer   r   r    rU   strstripr   rT   Zimport_as_nameSTAR)r2   r!   r   rW   r   Zlastr>   r   r   r   r     s@    





r   )N)NN)N)N)N)N)N)5Zpgen2r   Zpytreer   r   Zpygramr   r   r;   r   r   r   r   r   r"   r(   r+   r%   r3   r6   r:   r<   r?   rD   rG   rP   rX   rb   rg   ri   rj   Zconsuming_callsrv   rz   r{   r|   rx   r   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   r   r   r   r   r   <module>   sV   




		-
*
