a
    zes                     @   s  d dl Z d dlT d dlmZmZ d dlmZmZ d_dddd	d
Zdd Z	d`ddddZ
dd Zdd ZdaddZdd Zdd ZdbddZdd Zd d! Zdd"d#d$Zd%d& ZG d'd( d(eZG d)d* d*eZeed+sd,d- Zd.d/ Zeeee_eeee_G d0d1 d1eZ d2d3 Z!G d4d5 d5ee d6Z"G d7d8 d8ee d6Z#G d9d: d:ee d6Z$G d;d< d<ee d6Z%G d=d> d>ee d6Z&e"e'e(e)fe#e*fe$e+fe%ede,fe&ed?fiZ-e"e,fiZ.e,d<edd<e'd5e(d5e)d5e*d8e+d:ed?d>iZ/G d@dA dAe0Z1G dBdC dCe1Z2G dDdE dEe1Z3ee4dFsBdGdH Z5dIdJ Z6ee5e6e4_7G dKdL dLe8Z9G dMdN dNe:Z;G dOdP dPe:Z<G dQdR dRe:Z=dSe>e j?j@d  ZAG dTdU dUeZBdVZCdWZDg eCeDR ZEG dXdY dYeZFdZd[ ZGd\d] ZHeId^kreH  dS )c    N)*)contextmanagernullcontext)IntEnumauto	<unknown>execF)type_commentsfeature_versionc                C   sF   t }|r|tO }t|tr(|\}}|}n|d u r4d}t| ||||dS )N)_feature_version)ZPyCF_ONLY_ASTZPyCF_TYPE_COMMENTS
isinstancetuplecompile)sourcefilenamemoder	   r
   flagsmajorminor r   /usr/lib/python3.9/ast.pyparse!   s    

r   c                    s`   t | trt| dd} t | tr&| j} dd fddfdd fd	d
  | S )Nevalr   c                 S   s   t d| d S )Nzmalformed node or string: )
ValueErrornoder   r   r   _raise_malformed_nodeA   s    z+literal_eval.<locals>._raise_malformed_nodec                    s,   t | trt| jtttfvr& |  | jS N)r   Constanttypevalueintfloatcomplexr   )r   r   r   _convert_numC   s    z"literal_eval.<locals>._convert_numc                    sD   t | tr<t | jttfr< | j}t | jtr6|
 S | S  | S r   )r   ZUnaryOpopUAddUSuboperand)r   r*   )r&   r   r   _convert_signed_numG   s    
z)literal_eval.<locals>._convert_signed_numc                    sZ  t | tr| jS t | tr*tt | jS t | trDtt | jS t | t	r^t
t | jS t | trt | jtr| jjdkr| j| j  krg krn nt
 S t | trt| jt| jkrȈ|  ttt | jt | jS t | trRt | jttfrR| j}| j}t |ttfrRt |trRt | jtrJ|| S || S | S )Nset) r   r    r"   Tupler   mapeltsListlistSetr,   ZCallfuncNameidargskeywordsDictlenkeysvaluesdictzipZBinOpr'   AddSubleftrightr#   r$   r%   )r   r@   rA   _convertr&   r+   r   r   r   rC   O   s<    









zliteral_eval.<locals>._convert)r   strr   Z
Expressionbody)Znode_or_stringr   rB   r   literal_eval6   s    

rF   T)indentc                   sT   d fdd	 t | ts.td| jj d urHt tsHd  | d S )Nr   c              	      s  d ur* d7  d   }d   }nd}d}t | trt| }g }d}}| jD ]}zt| |}	W n ty   d}Y qXY n0 |	d u rt||dd u rd}qX|	 \}	}
|o|
}|r|d||	f  qX||	 qXrh| jrh| jD ]t}zt| |}	W n ty   Y qY n0 |	d u r<t||dd u r<q|	 \}	}
|oR|
}|d||	f  q|rt|d	krd
| j	j
d|f | fS d| j	j
|||f dfS t | tr| sdS d|| fdd| D f dfS t| dfS )N   
z,
 , T.z%s=%s   z%s(%s)z%s(%s%s)F)z[]Tz[%s%s]c                 3   s   | ]} |d  V  qdS r   Nr   ).0x)_formatlevelr   r   	<genexpr>       z(dump.<locals>._format.<locals>.<genexpr>)r   ASTr!   _fieldsgetattrAttributeErrorappend_attributesr9   	__class____name__joinr1   repr)r   rQ   prefixsepclsr6   Z	allsimpler7   namer"   simplerP   annotate_fieldsinclude_attributesrG   )rQ   r   rP   x   sX    




&zdump.<locals>._formatzexpected AST, got %r )r   )r   rT   	TypeErrorrZ   r[   rD   )r   rd   re   rG   r   rc   r   dumpl   s    0
rh   c                 C   sV   dD ]L}||j v r|| j v rt||d }|d usDt||r|drt| || q| S )N)lineno
col_offset
end_linenoend_col_offsetZend_)rY   rV   hasattr
startswithsetattr)new_nodeZold_nodeattrr"   r   r   r   copy_location   s    rr   c                    s     fdd  | dddd | S )Nc                    s   d| j v r"t| ds|| _n| j}d| j v rJt| dd d u rD|| _n| j}d| j v rlt| dsf|| _n| j}d| j v rt| dd d u r|| _n| j}t| D ]} ||||| qd S )Nri   rk   rj   rl   )rY   rm   ri   rV   rk   rj   rl   iter_child_nodes)r   ri   rj   rk   rl   child_fixr   r   rv      s$    





z#fix_missing_locations.<locals>._fixrH   r   r   r   r   ru   r   fix_missing_locations   s    rw   rH   c                 C   sV   t | D ]H}d|jv r(t|dd| |_d|jv rt|dd }d ur|| |_q| S )Nri   r   rk   )walkrY   rV   ri   rk   )r   nrt   rk   r   r   r   increment_lineno   s    
rz   c              	   c   s8   | j D ],}z|t| |fV  W q ty0   Y q0 qd S r   )rU   rV   rW   )r   fieldr   r   r   iter_fields   s
    
r|   c                 c   sL   t | D ]>\}}t|tr"|V  qt|tr|D ]}t|tr0|V  q0qd S r   )r|   r   rT   r1   )r   ra   r{   itemr   r   r   rs      s    


rs   c                 C   s   t | ttttfs"td| jj | jr8t | jd t	s<d S | jd j
} t | trZ| j}n"t | trxt | j
trx| j
}nd S |rdd l}||}|S )Nz%r can't have docstringsr   )r   AsyncFunctionDefFunctionDefClassDefModulerg   rZ   r[   rE   Exprr"   Strsr    rD   inspectZcleandoc)r   Zcleantextr   r   r   r   get_docstring  s    	

r   c                 C   s   d}g }d}|t | k rx| | }||7 }|d7 }|dkr`|t | k r`| | dkr`|d7 }|d7 }|dv r|| d}q|r|| |S )Nr   rJ   rH   rI   z
)r9   rX   )r   idxlinesZ	next_linecr   r   r   _splitlines_no_ff(  s      

r   c                 C   s,   d}| D ]}|dv r||7 }q|d7 }q|S )NrJ   z	rf   r   )r   resultr   r   r   r   _pad_whitespaceA  s    

r   )paddedc                C   s  z>|j d u s|jd u rW d S |jd }|j d }|j}|j}W n tyR   Y d S 0 t| }||kr|||  ||  S |rt||  d |  }nd}|||  |d    }	||  d |  }
||d | }|	d|	 |
|
 d|S )NrH   rJ   r   )rk   rl   ri   rj   rW   r   encodedecoder   insertrX   r\   )r   r   r   ri   rk   rj   rl   r   ZpaddingfirstZlastr   r   r   get_source_segmentL  s*    	



r   c                 c   s<   ddl m} || g}|r8| } |t|  | V  qd S )Nr   )deque)collectionsr   popleftextendrs   )r   r   Ztodor   r   r   rx   q  s    
rx   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NodeVisitorc                 C   s"   d|j j }t| || j}||S )Nvisit_)rZ   r[   rV   generic_visit)selfr   methodvisitorr   r   r   visit  s    zNodeVisitor.visitc                 C   sT   t |D ]F\}}t|tr:|D ]}t|tr| | qqt|tr| | qd S r   )r|   r   r1   rT   r   )r   r   r{   r"   r}   r   r   r   r     s    


zNodeVisitor.generic_visitc           	      C   s   |j }tt|}|d u r@t D ]\}}t||r$|} q@q$|d urd| }zt| |}W n typ   Y n&0 dd l}|	| dt
d ||S | |S )Nr   r   z" is deprecated; add visit_Constant   )r"   _const_node_type_namesgetr!   itemsr   rV   rW   warningswarnDeprecationWarningr   )	r   r   r"   	type_namer`   ra   r   r   r   r   r   r   visit_Constant  s&    
zNodeVisitor.visit_ConstantN)r[   
__module____qualname__r   r   r   r   r   r   r   r     s   
r   c                   @   s   e Zd Zdd ZdS )NodeTransformerc                 C   s   t |D ]\}}t|trvg }|D ]D}t|tr\| |}|d u rFq"nt|ts\|| q"|| q"||d d < qt|tr| |}|d u rt|| qt||| q|S r   )	r|   r   r1   rT   r   r   rX   delattrro   )r   r   r{   	old_valueZ
new_valuesr"   rp   r   r   r   r     s&    






zNodeTransformer.generic_visitN)r[   r   r   r   r   r   r   r   r     s   $r   ry   c                 C   s   | j S r   r"   r   r   r   r   _getter  s    r   c                 C   s
   || _ d S r   r   r   r"   r   r   r   _setter  s    r   c                   @   s   e Zd Zdd Zdd ZdS )_ABCc                 G   s
   d| _ d S )Nz3Deprecated AST node class. Use ast.Constant instead)__doc__)r`   r6   r   r   r   __init__  s    z_ABC.__init__c                 C   sd   t |tsdS | tv rXz
|j}W n ty4   Y dS 0 t |t|  oVt |t| d S t| |S )NFr   )	r   r    _const_typesr"   rW   _const_types_notr   r!   __instancecheck__)r`   instr"   r   r   r   r     s    

z_ABC.__instancecheck__N)r[   r   r   r   r   r   r   r   r   r     s   r   c                 O   sp   |D ]<}|| j vrq| j |}|t|k rt| j d|q| tv rXt|i |S tj| g|R i |S )Nz" got multiple values for argument )rU   indexr9   rg   r[   r   r    __new__)r`   r6   kwargskeyposr   r   r   _new  s    
r   c                   @   s   e Zd ZdZeZdS )Num)ry   Nr[   r   r   rU   r   r   r   r   r   r   r   #  s   r   )	metaclassc                   @   s   e Zd ZdZeZdS )r   r   Nr   r   r   r   r   r   '  s   r   c                   @   s   e Zd ZdZeZdS )Bytesr   Nr   r   r   r   r   r   +  s   r   c                   @   s   e Zd ZeZdS )NameConstantN)r[   r   r   r   r   r   r   r   r   r   /  s   r   c                   @   s   e Zd ZdZdd ZdS )Ellipsisr   c                 O   s6   | t u rtdg|R i |S tj| g|R i |S )N.)r   r    r   )r`   r6   r   r   r   r   r   5  s    zEllipsis.__new__N)r[   r   r   rU   r   r   r   r   r   r   2  s   r   .c                   @   s   e Zd ZdS )sliceNr[   r   r   r   r   r   r   r   P  s   r   c                   @   s   e Zd Zdd ZdS )Indexc                 K   s   |S r   r   )r`   r"   r   r   r   r   r   U  s    zIndex.__new__Nr[   r   r   r   r   r   r   r   r   S  s   r   c                   @   s   e Zd ZdddZdS )ExtSlicer   c                 K   s   t t|t fi |S r   )r-   r1   ZLoad)r`   dimsr   r   r   r   r   Z  s    zExtSlice.__new__N)r   r   r   r   r   r   r   X  s   r   r   c                 C   s   | j S r   r/   r   r   r   r   _dims_getterb  s    r   c                 C   s
   || _ d S r   r   r   r   r   r   _dims_setterf  s    r   c                   @   s   e Zd ZdS )SuiteNr   r   r   r   r   r   k  s   r   c                   @   s   e Zd ZdS )AugLoadNr   r   r   r   r   r   n  s   r   c                   @   s   e Zd ZdS )AugStoreNr   r   r   r   r   r   q  s   r   c                   @   s   e Zd ZdS )ParamNr   r   r   r   r   r   t  s   r   Z1ec                   @   s~   e Zd Ze Ze Ze Ze Ze Ze Z	e Z
e ZeZe Ze Ze Ze Ze Ze Ze Ze Ze Zdd ZdS )_Precedencec                 C   s,   z|  | d W S  ty&   |  Y S 0 d S NrH   )rZ   r   r   r   r   r   next  s    z_Precedence.nextN)r[   r   r   r   TUPLEYIELDTESTORANDNOTCMPEXPRBORBXORBANDSHIFTARITHTERMFACTORPOWERAWAITATOMr   r   r   r   r   r   |  s&   r   )'")z"""z'''c                       s  e Zd ZddddZdd Zdd Zd	d
 ZdddZdd Zdd Z	e
dd ZeddddZedd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Z fd&d'Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/d\d] Z0d^d_ Z1d`da Z2dbdc Z3ddde Z4dfdg Z5dhdi Z6djdk Z7dldm Z8dndo Z9e:ddpdqdrZ;e:dsdtduZ<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdddddZPeQjReQjSeQjSeQjSdZTdd ZUddddddddddddddZVeQjWeQjWeQjXeQjXeQjXeQjXeQjYeQjYeQjZeQj[eQj\eQjXeQj]dZ^e_dZ`dd Zaddddddddddd
Zbdd ZcdddÜZdeQjeeQjfdĜZgddƄ ZhddȄ Ziddʄ Zjdd̄ Zkdd΄ ZlddЄ Zmdd҄ ZnddԄ Zoddք Zpdd؄ Zqddڄ Zrdd܄ Zsddބ Zt  ZuS )	_UnparserF_avoid_backslashesc                C   s(   g | _ g | _i | _i | _d| _|| _d S )Nr   )_source_buffer_precedences_type_ignores_indentr   )r   r   r   r   r   r     s    z_Unparser.__init__c                 C   sH   t |}z|t| W n ty*   Y n0 |D ]}|  || q0d S r   )iterr   StopIteration)r   ZinterfseqrO   r   r   r   
interleave  s    z_Unparser.interleavec                    s>   t |dkr$||d   d n  fdd|| d S )NrH   r   ,c                      s
     dS NrK   writer   r   r   r   <lambda>  rS   z&_Unparser.items_view.<locals>.<lambda>)r9   r   r   )r   Z	traverserr   r   r   r   
items_view  s    z_Unparser.items_viewc                 C   s   | j r| d d S )NrI   )r   r   r   r   r   r   maybe_newline  s    z_Unparser.maybe_newlinerJ   c                 C   s    |    | d| j |  d S )Nz    )r   r   r   r   r   r   r   r   fill  s    z_Unparser.fillc                 C   s   | j | d S r   )r   rX   r   r   r   r   r     s    z_Unparser.writec                 C   s   | j | d S r   )r   rX   r   r   r   r   buffer_writer  s    z_Unparser.buffer_writerc                 C   s   d | j}| j  |S NrJ   )r\   r   clearr   r   r   r   buffer  s    
z_Unparser.bufferNextrac                c   s>   |  d |r|  | |  jd7  _d V  |  jd8  _d S )N:rH   )r   r   )r   r  r   r   r   block  s    

z_Unparser.blockc                 c   s   |  | d V  |  | d S r   r   )r   startendr   r   r   delimit  s    
z_Unparser.delimitc                 C   s   |r|  ||S t S d S r   )r  r   )r   r	  r
  	conditionr   r   r   
delimit_if  s    z_Unparser.delimit_ifc                 C   s   |  dd| ||kS N())r  get_precedence)r   
precedencer   r   r   r   require_parens  s    z_Unparser.require_parensc                 C   s   | j |tjS r   )r   r   r   r   r   r   r   r   r   r    s    z_Unparser.get_precedencec                 G   s   |D ]}|| j |< qd S r   )r   )r   r  Znodesr   r   r   r   set_precedence  s    z_Unparser.set_precedencec                 C   s`   t |ttttfr t|jdk r$d S |jd }t |ts<d S |j}t |t	r\t |jt
r\|S d S )NrH   r   )r   r~   r   r   r   r9   rE   r   r"   r    rD   r  r   r   r   get_raw_docstring  s    

z_Unparser.get_raw_docstringc                 C   s*   | j |jp|j}|d ur&d| S d S )Nz	 # type: )r   r   ri   type_comment)r   r   Zcommentr   r   r   get_type_comment  s    z_Unparser.get_type_commentc                    s0   t |tr |D ]}| | qnt | d S r   )r   r1   traversesuperr   )r   r   r}   rZ   r   r   r    s    
z_Unparser.traversec                 C   s   g | _ | | d| j S r  )r   r  r\   r  r   r   r   r     s    
z_Unparser.visitc                 C   s>   |  | }r.| | | |jdd   n| |j d S r   )r  _write_docstringr  rE   )r   r   Z	docstringr   r   r   "_write_docstring_and_traverse_body$  s    
z,_Unparser._write_docstring_and_traverse_bodyc                 C   s*   dd |j D | _| | | j  d S )Nc                 S   s   i | ]}|j d |j qS )ignore)ri   tag)rN   r  r   r   r   
<dictcomp>,  s   z*_Unparser.visit_Module.<locals>.<dictcomp>)type_ignoresr   r  r  r  r   r   r   visit_Module+  s
    
z_Unparser.visit_Modulec                    s`     dd*   fdd j|j W d    n1 s<0    Y   d  |j d S )Nr  r  c                      s
     dS r   r   r   r   r   r   r   6  rS   z._Unparser.visit_FunctionType.<locals>.<lambda> -> )r  r   r  argtypesr   returnsr  r   r   r   visit_FunctionType3  s    "
z_Unparser.visit_FunctionTypec                 C   s(   |    | tj|j | |j d S r   )r   r  r   r   r"   r  r  r   r   r   
visit_Expr<  s    z_Unparser.visit_Exprc                 C   sh   |  tj|F | tj|j|j | |j | d | |j W d    n1 sZ0    Y  d S )Nz := )	r  r   r   r  r   targetr"   r  r   r  r   r   r   visit_NamedExprA  s
    
z_Unparser.visit_NamedExprc                    s(     d   fdd j|j d S )Nzimport c                      s
     dS r   r   r   r   r   r   r   J  rS   z(_Unparser.visit_Import.<locals>.<lambda>)r   r   r  namesr  r   r   r   visit_ImportH  s    
z_Unparser.visit_Importc                    sT     d  d|j  |jr, |j  d   fdd j|j d S )Nzfrom .z import c                      s
     dS r   r   r   r   r   r   r   R  rS   z,_Unparser.visit_ImportFrom.<locals>.<lambda>)r   r   rQ   moduler   r  r*  r  r   r   r   visit_ImportFromL  s    

z_Unparser.visit_ImportFromc                 C   sP   |    |jD ]}| | | d q| |j | | }rL| | d S )N = )r   targetsr  r   r"   r  )r   r   r(  r  r   r   r   visit_AssignT  s    

z_Unparser.visit_Assignc                 C   sB   |    | |j | d| j|jjj  d  | |j d S )Nrf   z= )	r   r  r(  r   binopr'   rZ   r[   r"   r  r   r   r   visit_AugAssign]  s    z_Unparser.visit_AugAssignc                 C   s   |    | dd|j o"t|jt | |j W d    n1 sH0    Y  | d | |j |j	r| d | |j	 d S )Nr  r  : r/  )
r   r  rb   r   r(  r4   r  r   
annotationr"   r  r   r   r   visit_AnnAssignc  s     *

z_Unparser.visit_AnnAssignc                 C   s*   |  d |jr&| d | |j d S )Nreturnrf   )r   r"   r   r  r  r   r   r   visit_Returnm  s    

z_Unparser.visit_Returnc                 C   s   |  d d S )Npassr   r  r   r   r   
visit_Passs  s    z_Unparser.visit_Passc                 C   s   |  d d S )Nbreakr:  r  r   r   r   visit_Breakv  s    z_Unparser.visit_Breakc                 C   s   |  d d S )Ncontinuer:  r  r   r   r   visit_Continuey  s    z_Unparser.visit_Continuec                    s(     d   fdd j|j d S )Nzdel c                      s
     dS r   r   r   r   r   r   r   ~  rS   z(_Unparser.visit_Delete.<locals>.<lambda>)r   r   r  r0  r  r   r   r   visit_Delete|  s    
z_Unparser.visit_Deletec                 C   s6   |  d | |j |jr2| d | |j d S )Nzassert rK   )r   r  testmsgr   r  r   r   r   visit_Assert  s
    

z_Unparser.visit_Assertc                    s(     d   fdd j|j d S )Nzglobal c                      s
     dS r   r   r   r   r   r   r     rS   z(_Unparser.visit_Global.<locals>.<lambda>r   r   r   r*  r  r   r   r   visit_Global  s    
z_Unparser.visit_Globalc                    s(     d   fdd j|j d S )Nz	nonlocal c                      s
     dS r   r   r   r   r   r   r     rS   z*_Unparser.visit_Nonlocal.<locals>.<lambda>rD  r  r   r   r   visit_Nonlocal  s    
z_Unparser.visit_Nonlocalc                 C   sh   |  tj|F | d |jrF| d | tj|j | |j W d    n1 sZ0    Y  d S )Nawaitrf   )r  r   r   r   r"   r  r   r  r  r   r   r   visit_Await  s    

z_Unparser.visit_Awaitc                 C   sh   |  tj|F | d |jrF| d | tj|j | |j W d    n1 sZ0    Y  d S )Nyieldrf   )r  r   r   r   r"   r  r   r  r  r   r   r   visit_Yield  s    

z_Unparser.visit_Yieldc                 C   sf   |  tj|D | d |js(td| tj|j | |j W d    n1 sX0    Y  d S )Nzyield from z-Node can't be used without a value attribute.)	r  r   r   r   r"   r   r  r   r  r  r   r   r   visit_YieldFrom  s    
z_Unparser.visit_YieldFromc                 C   sX   |  d |js"|jrtdd S | d | |j |jrT| d | |j d S )Nraisez*Node can't use cause without an exception.rf   z from )r   exccauser   r   r  r  r   r   r   visit_Raise  s    


z_Unparser.visit_Raisec                 C   s   |  d |   | |j W d    n1 s40    Y  |jD ]}| | qD|jr|  d |   | |j W d    n1 s0    Y  |jr|  d |   | |j W d    n1 s0    Y  d S )Ntryelsefinally)r   r  r  rE   handlersorelse	finalbody)r   r   exr   r   r   	visit_Try  s    

*


*

z_Unparser.visit_Tryc                 C   sz   |  d |jr&| d | |j |jrB| d | |j |   | |j W d    n1 sl0    Y  d S )Nexceptrf    as )r   r!   r   r  ra   r  rE   r  r   r   r   visit_ExceptHandler  s    



z_Unparser.visit_ExceptHandlerc                 C   s   |    |jD ]}| d | | q| d|j  | jdd|jpJ|jdh d}|jD ]"}|rp| d nd}| | q\|jD ]"}|r| d nd}| | qW d    n1 s0    Y  | 	  | 
| W d    n1 s0    Y  d S )	N@zclass r  r  )r  FrK   T)r   decorator_listr   r  ra   r  basesr7   r   r  r  )r   r   decocommaer   r   r   visit_ClassDef  s&    



*
z_Unparser.visit_ClassDefc                 C   s   |  |d d S )Ndef_function_helperr  r   r   r   visit_FunctionDef  s    z_Unparser.visit_FunctionDefc                 C   s   |  |d d S )Nz	async defrc  r  r   r   r   visit_AsyncFunctionDef  s    z _Unparser.visit_AsyncFunctionDefc                 C   s   |    |jD ]}| d | | q|d |j }| | | dd | |j W d    n1 sn0    Y  |jr| d | |j | j	| 
|d | | W d    n1 s0    Y  d S )Nr[  rf   r  r  r#  r  )r   r\  r   r  ra   r  r6   r%  r   r  r  r  )r   r   Zfill_suffixr^  Zdef_strr   r   r   rd    s    


*
z_Unparser._function_helperc                 C   s   |  d| d S )Nzfor _for_helperr  r   r   r   	visit_For  s    z_Unparser.visit_Forc                 C   s   |  d| d S )Nz
async for rg  r  r   r   r   visit_AsyncFor  s    z_Unparser.visit_AsyncForc                 C   s   |  | | |j | d | |j | j| |d | |j W d    n1 s`0    Y  |jr|  d |   | |j W d    n1 s0    Y  d S )N in r  rQ  )	r   r  r(  r   r   r  r  rE   rT  )r   r   r   r   r   r   rh     s    

*

z_Unparser._for_helperc                 C   s  |  d | |j |   | |j W d    n1 s@0    Y  |jrt|jdkrt|jd tr|jd }|  d | |j |   | |j W d    qJ1 s0    Y  qJ|jr|  d |   | |j W d    n1 s0    Y  d S )Nzif rH   r   zelif rQ  )	r   r  rA  r  rE   rT  r9   r   ZIfr  r   r   r   visit_If  s    

*$


,

z_Unparser.visit_Ifc                 C   s   |  d | |j |   | |j W d    n1 s@0    Y  |jr|  d |   | |j W d    n1 s0    Y  d S )Nzwhile rQ  )r   r  rA  r  rE   rT  r  r   r   r   visit_While  s    

*

z_Unparser.visit_Whilec                    sf     d   fdd j|j  j |d  |j W d    n1 sX0    Y  d S )Nzwith c                      s
     dS r   r   r   r   r   r   r   *  rS   z&_Unparser.visit_With.<locals>.<lambda>r  r   r   r  r   r  r  rE   r  r   r   r   
visit_With(  s    
z_Unparser.visit_Withc                    sf     d   fdd j|j  j |d  |j W d    n1 sX0    Y  d S )Nzasync with c                      s
     dS r   r   r   r   r   r   r   0  rS   z+_Unparser.visit_AsyncWith.<locals>.<lambda>r  rn  r  r   r   r   visit_AsyncWith.  s    
z_Unparser.visit_AsyncWithquote_typesescape_special_whitespacec                   s    fdd}d t||}dv r6dd |D }fdd|D }|sttfdd	|D d
 }dd |gfS r|jfddd |d
 d
 d krƈd d d d  |fS )Nc                    s4    s| dv r| S | dks |   s0| ddS | S )Nz
	\Zunicode_escapeascii)isprintabler   r   )r   )rs  r   r   escape_char:  s
    z2_Unparser._str_literal_helper.<locals>.escape_charrJ   rI   c                 S   s   g | ]}|t v r|qS r   )_MULTI_QUOTESrN   qr   r   r   
<listcomp>G  rS   z1_Unparser._str_literal_helper.<locals>.<listcomp>c                    s   g | ]}| vr|qS r   r   ry  escaped_stringr   r   r{  H  rS   c                 3   s   | ]} d  |v r|V  qdS rM   r   ry  )stringr   r   rR   N  rS   z0_Unparser._str_literal_helper.<locals>.<genexpr>r   rH   r   c                    s   | d  d kS )Nr   r   r   )rz  r|  r   r   r   R  rS   z/_Unparser._str_literal_helper.<locals>.<lambda>)r   rt  )r\   r.   r]   r   sort)r   r~  rr  rs  rw  Zpossible_quotesquoter   )rs  r}  r~  r   _str_literal_helper4  s    
z_Unparser._str_literal_helperrr  c                C   s4   | j ||d\}}|d }| | | |  d S )Nr  r   )r  r   )r   r~  rr  
quote_typer   r   r   _write_str_avoiding_backslashesZ  s    z)_Unparser._write_str_avoiding_backslashesc           	      C   s   |  d | jr.| || j | | j d S g }|jD ]:}t| dt|j	 }||| j |
| jt|tf q8g }t}|D ]&\}}| j|||d\}}|
| qd|}|d }|  | | |  d S )Nr   	_fstring_rq  rJ   r   )r   r   _fstring_JoinedStrr  r  r  r;   rV   r!   r[   rX   r   r    _ALL_QUOTESr  r\   )	r   r   r  r"   methZ
new_bufferrr  Zis_constantr  r   r   r   visit_JoinedStr`  s*    



z_Unparser.visit_JoinedStrc                 C   s(   |  d | || j | | j d S )Nr   )r   _fstring_FormattedValuer  r  r  r  r   r   r   visit_FormattedValue  s    
z_Unparser.visit_FormattedValuec                 C   s.   |j D ]"}t| dt|j }||| qd S )Nr  )r;   rV   r!   r[   )r   r   r   r"   r  r   r   r   r    s    
z_Unparser._fstring_JoinedStrc                 C   s6   t |jtstd|jdddd}|| d S )Nz.Constants inside JoinedStr should be a string.{z{{}z}})r   r"   rD   r   replace)r   r   r   r"   r   r   r   _fstring_Constant  s    z_Unparser._fstring_Constantc                 C   s   |d t | dd}|tj |j ||j}|drH|d d|v rXtd|| |j	dkrt
|j	}|dvrtd	|d
|  |jr|d t| dt |jj }||j| |d d S )Nr  Tr   rf   rt  z5Unable to avoid backslash in f-string expression partr   ZsrazUnknown f-string conversion.!r  r  r  )r!   r  r   r   r   r"   r   rn   r   
conversionchrformat_specrV   r[   )r   r   r   unparserexprr  r  r   r   r   r    s&    


z!_Unparser._fstring_FormattedValuec                 C   s   |  |j d S r   )r   r5   r  r   r   r   
visit_Name  s    z_Unparser.visit_Namec                 C   s0   |    |jdkr| d | j|jtd d S )Nur  )r   kindr   r  r"   rx  r  r   r   r   r    s    

z_Unparser._write_docstringc              
   C   sj   t |ttfr<| t|dtddt dt d n*| jrXt |trX| 	| n| t| d S )Ninfnanr  -r  )
r   r$   r%   r   r]   r  _INFSTRr   rD   r  r   r   r   r   _write_constant  s    z_Unparser._write_constantc                 C   s   |j }t|trL| dd | | j| W d    q1 s@0    Y  n4|du r`| d n |jdkrt| d | |j  d S )Nr  r  ....r  )r"   r   r   r  r   r  r   r  )r   r   r"   r   r   r   r     s    
.

z_Unparser.visit_Constantc                    sJ     dd*   fdd j|j W d    n1 s<0    Y  d S )N[]c                      s
     dS r   r   r   r   r   r   r     rS   z&_Unparser.visit_List.<locals>.<lambda>)r  r   r  r/   r  r   r   r   
visit_List  s    z_Unparser.visit_Listc                 C   sR   |  dd2 | |j |jD ]}| | q W d    n1 sD0    Y  d S )Nr  r  r  r  elt
generatorsr   r   genr   r   r   visit_ListComp  s    
z_Unparser.visit_ListCompc                 C   sR   |  dd2 | |j |jD ]}| | q W d    n1 sD0    Y  d S r  r  r  r   r   r   visit_GeneratorExp  s    
z_Unparser.visit_GeneratorExpc                 C   sR   |  dd2 | |j |jD ]}| | q W d    n1 sD0    Y  d S )Nr  r  r  r  r   r   r   visit_SetComp  s    
z_Unparser.visit_SetCompc                 C   sh   |  ddH | |j | d | |j |jD ]}| | q6W d    n1 sZ0    Y  d S )Nr  r  r4  )r  r  r   r   r"   r  r  r   r   r   visit_DictComp  s    

z_Unparser.visit_DictCompc                 C   s   |j r| d n
| d | tj|j | |j | d | jtj |j	g|j
R   | |j	 |j
D ]}| d | | qrd S )Nz async for z for rk   if )is_asyncr   r  r   r   r(  r  r   r   r   ifs)r   r   Z	if_clauser   r   r   visit_comprehension  s    



z_Unparser.visit_comprehensionc                 C   s   |  tj|p | tj |j|j | |j | d | |j | d | tj|j	 | |j	 W d    n1 s0    Y  d S )Nr  z else )
r  r   r   r  r   rE   rA  r  r   rT  r  r   r   r   visit_IfExp  s    

z_Unparser.visit_IfExpc                    s\   |j rN dd*   fdd j|j  W d    qX1 sB0    Y  n
 d d S )Nr  r  c                      s
     dS r   r   r   r   r   r   r      rS   z%_Unparser.visit_Set.<locals>.<lambda>z{*()})r/   r  r   r  r   r  r   r   r   	visit_Set  s    :z_Unparser.visit_Setc                    sj    fdd fdd}  dd0   fdd|t|j|j W d    n1 s\0    Y  d S )	Nc                    s"     |   d   | d S Nr4  )r  r   )kvr   r   r   write_key_value_pair  s    

z2_Unparser.visit_Dict.<locals>.write_key_value_pairc                    sB   | \}}|d u r4  d  tj|  | n
|| d S )N**)r   r  r   r   r  )r}   r  r  r   r  r   r   
write_item  s    
z(_Unparser.visit_Dict.<locals>.write_itemr  r  c                      s
     dS r   r   r   r   r   r   r     rS   z&_Unparser.visit_Dict.<locals>.<lambda>)r  r   r=   r:   r;   )r   r   r  r   r  r   
visit_Dict  s    z_Unparser.visit_Dictc                 C   s@   |  dd  | | j|j W d    n1 s20    Y  d S r  )r  r   r  r/   r  r   r   r   visit_Tuple  s    z_Unparser.visit_Tuple~not+r  )ZInvertZNotr(   r)   )r  r  r  r  c                 C   s   | j |jjj }| j| }| ||H | | |tjurF| d | 	||j
 | |j
 W d    n1 st0    Y  d S Nrf   )unopr'   rZ   r[   unop_precedencer  r   r   r   r  r*   r  )r   r   operatoroperator_precedencer   r   r   visit_UnaryOp(  s    



z_Unparser.visit_UnaryOpr   r[  /%<<>>|^&//r  )r>   r?   ZMultZMatMultZDivZModZLShiftZRShiftZBitOrZBitXorZBitAndZFloorDivZPow)r  r  r   r[  r  r  r  r  r  r  r  r  r  )r  c                 C   s   | j |jjj }| j| }| ||z || jv r@| }|}n|}| }| ||j	 | 
|j	 | d| d | ||j | 
|j W d    n1 s0    Y  d S r  )r2  r'   rZ   r[   binop_precedencer  binop_rassocr   r  r@   r  r   rA   )r   r   r  r  Zleft_precedenceZright_precedencer   r   r   visit_BinOpU  s    

z_Unparser.visit_BinOpz==z!=<z<=>z>=iszis notinznot in)
ZEqZNotEqZLtZLtEZGtZGtEZIsZIsNotZInZNotInc                 C   s   |  tj|x | jtj |jg|jR   | |j t|j	|jD ].\}}| 
d| j|jj  d  | | qHW d    n1 s0    Y  d S r  )r  r   r   r  r   r@   comparatorsr  r=   opsr   cmpopsrZ   r[   )r   r   or`  r   r   r   visit_Compares  s    z_Unparser.visit_Compareandor)ZAndZOr)r  r  c                    s~   j |jjj }j|   fdd} |6 d| dfdd||j W d    n1 sp0    Y  d S )Nc                    s"        |  |  d S r   )r   r  r  r   )r  r   r   r   increasing_level_traverse  s    z9_Unparser.visit_BoolOp.<locals>.increasing_level_traverserf   c                      s
     S r   r   r   )r   r   r   r   r     rS   z(_Unparser.visit_BoolOp.<locals>.<lambda>)boolopsr'   rZ   r[   boolop_precedencer  r   r;   )r   r   r  r  r   )r  r   r   r   visit_BoolOp~  s    
z_Unparser.visit_BoolOpc                 C   sZ   |  tj|j | |j t|jtr@t|jjtr@| d | d | |j	 d S )Nrf   r,  )
r  r   r   r"   r  r   r    r#   r   rq   r  r   r   r   visit_Attribute  s    

z_Unparser.visit_Attributec                 C   s   |  tj|j | |j | ddh d}|jD ]"}|rH| d nd}| | q4|jD ]"}|rr| d nd}| | q^W d    n1 s0    Y  d S )Nr  r  FrK   T)	r  r   r   r3   r  r  r6   r   r7   )r   r   r_  r`  r   r   r   
visit_Call  s    

z_Unparser.visit_Callc                 C   s~   dd }|  tj|j | |j | dd: ||jrP| | j|jj n| |j W d    n1 sp0    Y  d S )Nc                 S   s&   t | to$| jo$tdd | jD  S )Nc                 s   s   | ]}t |tV  qd S r   )r   ZStarred)rN   r  r   r   r   rR     rS   zE_Unparser.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)r   r-   r/   any)Zslice_valuer   r   r   is_simple_tuple  s
    
z2_Unparser.visit_Subscript.<locals>.is_simple_tupler  r  )	r  r   r   r"   r  r  r   r   r/   )r   r   r  r   r   r   visit_Subscript  s    

z_Unparser.visit_Subscriptc                 C   s*   |  d | tj|j | |j d S )Nr   )r   r  r   r   r"   r  r  r   r   r   visit_Starred  s    
z_Unparser.visit_Starredc                 C   s   |  d d S )Nr  r   r  r   r   r   visit_Ellipsis  s    z_Unparser.visit_Ellipsisc                 C   sN   |j r| |j  | d |jr.| |j |jrJ| d | |j d S )Nr  )lowerr  r   upperstepr  r   r   r   visit_Slice  s    

z_Unparser.visit_Slicec                 C   s,   |  |j |jr(|  d | |j d S r  )r   argr5  r  r  r   r   r   	visit_arg  s    
z_Unparser.visit_argc           	      C   s  d}|j |j }d gt|t|j  |j }tt||dD ]^\}}|\}}|rXd}n
| d | | |r| d | | |t|j kr>| d q>|js|j	r|rd}n
| d | d |jr| |jj
 |jjr| d | |jj |j	rLt|j	|jD ]8\}}| d | | |r| d | | q|jr|r`d}n
| d | d	|jj
  |jjr| d | |jj d S )
NTrH   FrK   =z, /r   r4  r  )posonlyargsr6   r9   defaults	enumerater=   r   r  vararg
kwonlyargsr  r5  kw_defaultskwarg)	r   r   r   Zall_argsr  r   elementsadr   r   r   visit_arguments  sN    












z_Unparser.visit_argumentsc                 C   s<   |j d u r| d n| |j  | d | |j d S )Nr  r  )r  r   r  r"   r  r   r   r   visit_keyword  s
    

z_Unparser.visit_keywordc                 C   sn   |  tj|L | d | |j | d | tj|j | |j W d    n1 s`0    Y  d S )Nzlambda r4  )r  r   r   r   r  r6   r  rE   r  r   r   r   visit_Lambda  s    

z_Unparser.visit_Lambdac                 C   s&   |  |j |jr"|  d|j  d S NrY  )r   ra   asnamer  r   r   r   visit_alias  s    z_Unparser.visit_aliasc                 C   s,   |  |j |jr(| d |  |j d S r  )r  context_exproptional_varsr   r  r   r   r   visit_withitem  s    
z_Unparser.visit_withitem)rJ   )vr[   r   r   r   r   r   r   r   r   r  propertyr  r   r  r  r  r  r  r  r  r  r  r   r  r"  r&  r'  r)  r+  r.  r1  r3  r6  r8  r;  r=  r?  r@  rC  rE  rF  rH  rJ  rK  rO  rW  rZ  ra  re  rf  rd  ri  rj  rh  rl  rm  ro  rp  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  r2  r   r   r   r   r   r   r   r  	frozensetr  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r   r   r  r   r     s  



		

&
	

3r   c                 C   s   t  }|| S r   )r   r   )Zast_objr  r   r   r   unparse"  s    r  c                  C   s   dd l } | jdd}|jd| jddddd	d
 |jdddddd |jddddd |jddddd |jddtddd | }|j}| }W d    n1 s0    Y  t||jj	|j
|jd }tt||j|jd! d S )"Nr   zpython -m ast)proginfilerbr   ?r  z$the file to parse; defaults to stdin)r!   nargsdefaulthelpz-mz--moder   )r   Zsingler   Z	func_typez(specify what kind of code must be parsed)r  choicesr  z--no-type-commentsTstore_falsez)don't add information about type comments)r  actionr  z-az--include-attributes
store_truez:include attributes such as line numbers and column offsets)r  r  z-iz--indentrL   z'indentation of nodes (number of spaces))r!   r  r  )r	   )re   rG   )argparseArgumentParseradd_argumentFileTyper#   
parse_argsr  readr   ra   r   Zno_type_commentsprintrh   re   rG   )r  parserr6   r  r   Ztreer   r   r   main'  s0    


&r  __main__)r   r   )TF)rH   )T)JsysZ_ast
contextlibr   r   enumr   r   r   rF   rh   rr   rw   rz   r|   rs   r   r   r   r   rx   objectr   r   rm   r    r   r   r  ry   r   r!   r   r   r   r   r   r   r   r#   r$   r%   rD   bytesboolr   r   r   rT   r   r   r   r-   r   r   r   modr   Zexpr_contextr   r   r   r]   
float_info
max_10_expr  r   Z_SINGLE_QUOTESrx  r  r   r  r  r[   r   r   r   r   <module>   s   6C#

%:<	

       
