o
    IAf                     @   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+sd,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s!dGdH 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rxeH  dS dS )c    N)*)contextmanagernullcontext)IntEnumauto	<unknown>execF)type_commentsfeature_versionc                C   sH   	 t }|r	|tO }t|tr|\}}|}n|d u rd}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.10/ast.pyparse!   s   

r   c                    sh   	 t | trt| ddd} t | tr| j} dd fddfdd	 fd
d  | S )Nz 	evalr   c                 S   s4   d}t | dd  }r|d| 7 }t|d|  )Nzmalformed node or stringlinenoz	 on line : )getattr
ValueError)nodemsglnor   r   r   _raise_malformed_nodeC   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complexr   )r"   r   r   _convert_numH   s   z"literal_eval.<locals>._convert_numc                    sD   t | trt | jttfr | j}t | jtr|
 S | S  | S r#   )r   ZUnaryOpopUAddUSuboperand)r   r/   )r+   r   r   _convert_signed_numL   s   
z)literal_eval.<locals>._convert_signed_numc                    sL  t | tr| jS t | trtt | jS t | tr"tt | jS t | t	r/t
t | jS t | trOt | jtrO| jjdkrO| j| j  krNg krOt
 S  t | trqt| jt| jkrb|  ttt | jt | jS t | trt | jttfr| j}| j}t |ttfrt |trt | jtr|| S || S | S )Nset) r   r$   r&   Tupler   mapeltsZListlistSetr1   ZCallfuncNameidargskeywordsZDictlenkeysvaluesdictzipZBinOpr,   AddSubleftrightr'   r(   r)   )r   rC   rD   _convertr+   r0   r"   r   r   rF   T   s4   



"



zliteral_eval.<locals>._convert)r   strr   lstripZ
Expressionbody)Znode_or_stringr   rE   r   literal_eval6   s   

rJ   T)indentc                   sV   	 d fdd	 t | tstd| jj d ur%t ts%d  | 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 q+w |	d u rOt||dd u rOd}q+|	 \}	}
|oY|
}|rf|d||	f  q+||	 q+r| jr| jD ]4}zt| |}	W n	 ty   Y qtw |	d u rt||dd u rqt|	 \}	}
|o|
}|d||	f  qt|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>   s    z(dump.<locals>._format.<locals>.<genexpr>)r   ASTr%   _fieldsr   AttributeErrorappend_attributesr<   	__class____name__joinr5   repr)r   rU   prefixsepclsr:   Z	allsimpler;   namer&   simplerT   annotate_fieldsinclude_attributesrK   )rU   r   rT   }   s\   




&zdump.<locals>._formatzexpected AST, got %r )r   )r   rW   	TypeErrorr\   r]   rG   )r   rf   rg   rK   r   re   r   dumpq   s   
0rj   c                 C   sX   	 dD ]&}||j v r)|| j v r)t||d }|d us#t||r)|dr)t| || q| S )N)r   
col_offset
end_linenoend_col_offsetZend_)r[   r   hasattr
startswithsetattr)new_nodeZold_nodeattrr&   r   r   r   copy_location   s   rs   c                    s"   	  fdd  | dddd | S )Nc                    s   d| j v rt| ds|| _n| j}d| j v r%t| dd d u r"|| _n| j}d| j v r6t| ds3|| _n| j}d| j v rJt| dd d u rG|| _n| j}t| D ]
} ||||| qNd S )Nr   rl   rk   rm   )r[   rn   r   r   rl   rk   rm   iter_child_nodes)r   r   rk   rl   rm   child_fixr   r   rw      s&   





z#fix_missing_locations.<locals>._fixrL   r   r   r*   r   rv   r   fix_missing_locations   s   rx   rL   c                 C   sX   	 t | D ]$}d|jv rt|dd| |_d|jv r)t|dd }d ur)|| |_q| S )Nr   r   rl   )walkr[   r   r   rl   )r   nru   rl   r   r   r   increment_lineno   s   


r{   c              	   c   s:    	 | j D ]}z
|t| |fV  W q ty   Y qw d S r#   )rX   r   rY   )r   fieldr   r   r   iter_fields   s   
r}   c                 c   sP    	 t | D ]\}}t|tr|V  qt|tr%|D ]
}t|tr$|V  qqd S r#   )r}   r   rW   r5   )r   rc   r|   itemr   r   r   rt     s   


rt   c                 C   s   	 t | ttttfstd| jj | jrt | jd t	sd S | jd j
} t | tr.| j}nt | tr=t | j
tr=| j
}nd S |rJdd l}||}|S )Nz%r can't have docstringsr   )r   AsyncFunctionDefFunctionDefClassDefModuleri   r\   r]   rI   Exprr&   Strsr$   rG   inspectZcleandoc)r   Zcleantextr   r   r   r   get_docstring  s   

r   c                 C   s   	 d}g }d}|t | k rB| | }||7 }|d7 }|dkr1|t | k r1| | dkr1|d7 }|d7 }|dv r<|| d}|t | k s|rI|| |S )Nr   rN   rL   rM   z
)r<   rZ   )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 )NrN   z	rh   r   )r   resultr   r   r   r   _pad_whitespaceF  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y*   Y d S w t| }||kr?||  ||  S |rPt||  d |  }nd}|||  |d    }	||  d |  }
||d | }|	d|	 |
|
 d|S )NrL   rN   r   )rl   rm   r   rk   rY   r   encodedecoder   insertrZ   r^   )r   r   r   r   rl   rk   rm   r   ZpaddingfirstZlastr   r   r   get_source_segmentQ  s.   




r   c                 c   sF    	 ddl m} || g}|r!| } |t|  | V  |sd S d S )Nr   )deque)collectionsr   popleftextendrt   )r   r   Ztodor   r   r   ry   v  s   
ry   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_)r\   r]   r   generic_visit)selfr   methodvisitorr   r   r   visit  s   zNodeVisitor.visitc                 C   sV   	 t |D ]#\}}t|tr|D ]}t|tr| | qqt|tr(| | qd S r#   )r}   r   r5   rW   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|} nq|d urKd| }zt| |}W n	 ty8   Y nw dd l}|	| dt
d ||S | |S )Nr   r   z" is deprecated; add visit_Constant   )r&   _const_node_type_namesgetr%   itemsr   r   rY   warningswarnDeprecationWarningr   )	r   r   r&   	type_namerb   rc   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                   @      e Zd Z	 dd ZdS )NodeTransformerc                 C   s   t |D ]P\}}t|tr:g }|D ]!}t|tr-| |}|d u r"qt|ts-|| q|| q||d d < qt|trT| |}|d u rNt|| qt||| q|S r#   )	r}   r   r5   rW   r   r   rZ   delattrrp   )r   r   r|   	old_valueZ
new_valuesr&   rq   r   r   r   r     s(   






zNodeTransformer.generic_visitN)r]   r   r   r   r   r   r   r   r     s    #r   rz   c                 C      	 | j S r#   r&   r   r   r   r   _getter     r   c                 C   
   || _ d S r#   r   r   r&   r   r   r   _setter     
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__)rb   r:   r   r   r   __init__
  r   z_ABC.__init__c                 C   sd   t |tsdS | tv r,z|j}W n
 ty   Y dS w t |t|  o+t |t| d S t| |S )NFr   )	r   r$   _const_typesr&   rY   _const_types_notr   r%   __instancecheck__)rb   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 r,t|i |S tj| g|R i |S )Nz" got multiple values for argument )rX   indexr<   ri   r]   r   r$   __new__)rb   r:   kwargskeyposr   r   r   _new  s   
r   c                   @      e Zd ZdZeZdS )Num)rz   Nr]   r   r   rX   r   r   r   r   r   r   r   (      r   )	metaclassc                   @   r   )r   r   Nr   r   r   r   r   r   ,  r   r   c                   @   r   )Bytesr   Nr   r   r   r   r   r   0  r   r   c                   @   s   e Zd ZeZdS )NameConstantN)r]   r   r   r   r   r   r   r   r   r   4  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   )rb   r:   r   r   r   r   r   :  s   zEllipsis.__new__N)r]   r   r   rX   r   r   r   r   r   r   7  s    r   .c                   @      e Zd ZdS )sliceNr]   r   r   r   r   r   r   r   U      r   c                   @   r   )Indexc                 K   s   |S r#   r   )rb   r&   r   r   r   r   r   Z  s   zIndex.__new__Nr]   r   r   r   r   r   r   r   r   X  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#   )r2   r5   ZLoad)rb   dimsr   r   r   r   r   _  s   zExtSlice.__new__N)r   r   r   r   r   r   r   ]  s    r   r   c                 C   r   r#   r4   r   r   r   r   _dims_getterg  r   r   c                 C   r   r#   r   r   r   r   r   _dims_setterk  r   r   c                   @   r   )SuiteNr   r   r   r   r   r   p  r   r   c                   @   r   )AugLoadNr   r   r   r   r   r   s  r   r   c                   @   r   )AugStoreNr   r   r   r   r   r   v  r   r   c                   @   r   )ParamNr   r   r   r   r   r   y  r   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 w NrL   )r\   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ބ Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~  ZS )	_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   sL   	 t |}z|t| W n
 ty   Y d S w |D ]	}|  || qd S r#   )iterr   StopIteration)r   ZinterfseqrS   r   r   r   
interleave  s   
z_Unparser.interleavec                    sB   	 t |dkr||d   d d S   fdd|| d S )NrL   r   ,c                      
     dS NrO   writer   r   r   r   <lambda>     
 z&_Unparser.items_view.<locals>.<lambda>)r<   r  r  )r   Z	traverserr   r   r   r   
items_view  s
   z_Unparser.items_viewc                 C   s   	 | j r| d d S d S )NrM   )r   r  r   r   r   r   maybe_newline  s   z_Unparser.maybe_newlinerN   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   rZ   r  r   r   r   r    s   z_Unparser.writec                 C   s   | j | d S r#   )r   rZ   r  r   r   r   buffer_writer     z_Unparser.buffer_writerc                 C   s   d | j}| j  |S NrN   )r^   r   clearr   r   r   r   buffer  s   
z_Unparser.bufferNextrac                c   sB    	 |  d |r|  | |  jd7  _d V  |  jd8  _d S )N:rL   )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 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    r  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   sf   	 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
r1|S d S d S )NrL   r   )r   r   r   r   r   r<   rI   r   r&   r$   rG   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   r   type_comment)r   r   Zcommentr   r   r   get_type_comment  s   
z_Unparser.get_type_commentc                    s2   t |tr|D ]}| | qd S t | d S r#   )r   r5   traversesuperr   )r   r   r~   r\   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   d S | |j d S r   )r#  _write_docstringr&  rI   )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)r   tag)rR   r+  r   r   r   
<dictcomp>4  s    z*_Unparser.visit_Module.<locals>.<dictcomp>)type_ignoresr   r*  r  r!  r   r   r   visit_Module3  s
   
z_Unparser.visit_Modulec                    s`     dd   fdd j|j W d    n1 sw   Y   d  |j d S )Nr  r  c                      r  r  r  r   r   r   r   r  >  r  z._Unparser.visit_FunctionType.<locals>.<lambda> -> )r  r  r&  argtypesr  returnsr!  r   r   r   visit_FunctionType;  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_ExprD  s   z_Unparser.visit_Exprc                 C   sj   |  tj|$ | tj|j|j | |j | d | |j W d    d S 1 s.w   Y  d S )Nz := )	r   r   r   r"  r   targetr&   r&  r  r!  r   r   r   visit_NamedExprI  s   
"z_Unparser.visit_NamedExprc                    (     d   fdd j|j d S )Nzimport c                      r  r  r  r   r   r   r   r  R  r  z(_Unparser.visit_Import.<locals>.<lambda>)r  r  r&  namesr!  r   r   r   visit_ImportP     
z_Unparser.visit_Importc                    sX     d  d|jpd  |jr |j  d   fdd j|j d S )Nzfrom .r   z import c                      r  r  r  r   r   r   r   r  Z  r  z,_Unparser.visit_ImportFrom.<locals>.<lambda>)r  r  rU   moduler  r&  r8  r!  r   r   r   visit_ImportFromT  s   

z_Unparser.visit_ImportFromc                 C   sT   |    |jD ]}| | | d q| |j | | }r(| | d S d S )N = )r  targetsr&  r  r&   r%  )r   r   r5  r$  r   r   r   visit_Assign\  s   

z_Unparser.visit_Assignc                 C   sB   |    | |j | d| j|jjj  d  | |j d S )Nrh   z= )	r  r&  r5  r  binopr,   r\   r]   r&   r!  r   r   r   visit_AugAssigne  s   z_Unparser.visit_AugAssignc                 C   s   |    | dd|j ot|jt | |j W d    n1 s$w   Y  | d | |j |j	rD| d | |j	 d S d S )Nr  r  r   r>  )
r  r  rd   r   r5  r8   r&  r  
annotationr&   r!  r   r   r   visit_AnnAssignk  s    

z_Unparser.visit_AnnAssignc                 C   s.   |  d |jr| d | |j d S d S )Nreturnrh   )r  r&   r  r&  r!  r   r   r   visit_Returnu  s
   

z_Unparser.visit_Returnc                 C      |  d d S )Npassr  r!  r   r   r   
visit_Pass{     z_Unparser.visit_Passc                 C   rG  )NbreakrI  r!  r   r   r   visit_Break~  rK  z_Unparser.visit_Breakc                 C   rG  )NcontinuerI  r!  r   r   r   visit_Continue  rK  z_Unparser.visit_Continuec                    r7  )Nzdel c                      r  r  r  r   r   r   r   r    r  z(_Unparser.visit_Delete.<locals>.<lambda>)r  r  r&  r?  r!  r   r   r   visit_Delete  r:  z_Unparser.visit_Deletec                 C   s:   |  d | |j |jr| d | |j d S d S )Nzassert rO   )r  r&  testr    r  r!  r   r   r   visit_Assert  s   

z_Unparser.visit_Assertc                    r7  )Nzglobal c                      r  r  r  r   r   r   r   r    r  z(_Unparser.visit_Global.<locals>.<lambda>r  r  r  r8  r!  r   r   r   visit_Global  r:  z_Unparser.visit_Globalc                    r7  )Nz	nonlocal c                      r  r  r  r   r   r   r   r    r  z*_Unparser.visit_Nonlocal.<locals>.<lambda>rS  r!  r   r   r   visit_Nonlocal  r:  z_Unparser.visit_Nonlocalc                 C   z   |  tj|, | d |jr+| d | tj|j | |j W d    d S W d    d S 1 s6w   Y  d S )Nawaitrh   )r   r   r   r  r&   r"  r   r&  r!  r   r   r   visit_Await     

"z_Unparser.visit_Awaitc                 C   rV  )Nyieldrh   )r   r   r   r  r&   r"  r   r&  r!  r   r   r   visit_Yield  rY  z_Unparser.visit_Yieldc                 C   sh   |  tj|# | d |jstd| tj|j | |j W d    d S 1 s-w   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   s\   |  d |js|jrtdd S | d | |j |jr,| d | |j d S d S )Nraisez*Node can't use cause without an exception.rh   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 sw   Y  |jD ]}| | q"|jrL|  d |   | |j W d    n1 sGw   Y  |jrq|  d |   | |j W d    d S 1 sjw   Y  d S d S )Ntryelsefinally)r  r  r&  rI   handlersorelse	finalbody)r   r   exr   r   r   	visit_Try  s"   






"z_Unparser.visit_Tryc                 C   s|   |  d |jr| d | |j |jr!| d | |j |   | |j W d    d S 1 s7w   Y  d S )Nexceptrh    as )r  r%   r  r&  rc   r  rI   r!  r   r   r   visit_ExceptHandler  s   



"z_Unparser.visit_ExceptHandlerc                 C   s   |    |jD ]}| d | | q| d|j  | jdd|jp%|jd4 d}|jD ]}|r8| d nd}| | q.|jD ]}|rM| d nd}| | qCW d    n1 s_w   Y  | 	  | 
| W d    d S 1 syw   Y  d S )	N@zclass r  r  )r  FrO   T)r
  decorator_listr  r&  rc   r  basesr;   r  r  r*  )r   r   decocommaer   r   r   visit_ClassDef  s,   




"z_Unparser.visit_ClassDefc                 C      |  |d d S )Ndef_function_helperr!  r   r   r   visit_FunctionDef  r  z_Unparser.visit_FunctionDefc                 C   rs  )Nz	async defru  r!  r   r   r   visit_AsyncFunctionDef  r  z _Unparser.visit_AsyncFunctionDefc                 C   s   |    |jD ]}| d | | q|d |j }| | | dd | |j W d    n1 s7w   Y  |jrJ| d | |j | j	| 
|d | | W d    d S 1 sdw   Y  d S )Nrl  rh   r  r  r0  r  )r
  rm  r  r&  rc   r  r:   r2  r  r  r%  r*  )r   r   Zfill_suffixro  Zdef_strr   r   r   rv    s   



"z_Unparser._function_helperc                 C      |  d| d S )Nzfor _for_helperr!  r   r   r   	visit_For  r  z_Unparser.visit_Forc                 C   ry  )Nz
async for rz  r!  r   r   r   visit_AsyncFor  r  z_Unparser.visit_AsyncForc                 C   s   |  | | |j | d | |j | j| |d | |j W d    n1 s0w   Y  |jrZ|  d |   | |j W d    d S 1 sSw   Y  d S d S )N in r  rb  )	r  r&  r5  r  r   r  r%  rI   re  )r   r  r   r   r   r   r{    s   



"z_Unparser._for_helperc                 C   s4  |  d | |j |   | |j W d    n1 s w   Y  |jrst|jdkrst|jd trs|jd }|  d | |j |   | |j W d    n1 s\w   Y  |jrst|jdkrst|jd ts7|jr|  d |   | |j W d    d S 1 sw   Y  d S d S )Nzif rL   r   zelif rb  )	r  r&  rQ  r  rI   re  r<   r   ZIfr!  r   r   r   visit_If  s&   

$


$

"z_Unparser.visit_Ifc                 C   s   |  d | |j |   | |j W d    n1 s w   Y  |jrJ|  d |   | |j W d    d S 1 sCw   Y  d S d S )Nzwhile rb  )r  r&  rQ  r  rI   re  r!  r   r   r   visit_While&  s   



"z_Unparser.visit_Whilec                    h     d   fdd j|j  j |d  |j W d    d S 1 s-w   Y  d S )Nzwith c                      r  r  r  r   r   r   r   r  2  r  z&_Unparser.visit_With.<locals>.<lambda>r  r  r  r&  r   r  r%  rI   r!  r   r   r   
visit_With0  
   
"z_Unparser.visit_Withc                    r  )Nzasync with c                      r  r  r  r   r   r   r   r  8  r  z+_Unparser.visit_AsyncWith.<locals>.<lambda>r  r  r!  r   r   r   visit_AsyncWith6  r  z_Unparser.visit_AsyncWithquote_typesescape_special_whitespacec                   s   	  fdd}d t||}dv rdd |D }fdd|D }|sBttfdd	|D d
 }dd |gfS rd|jfddd |d
 d
 d krdd d d d  |fS )Nc                    s4    s| dv r| S | dks|   s| ddS | S )Nz
	\Zunicode_escapeascii)isprintabler   r   )r   )r  r   r   escape_charB  s
   z2_Unparser._str_literal_helper.<locals>.escape_charrN   rM   c                 S   s   g | ]}|t v r|qS r   )_MULTI_QUOTESrR   qr   r   r   
<listcomp>O      z1_Unparser._str_literal_helper.<locals>.<listcomp>c                    s   g | ]}| vr|qS r   r   r  escaped_stringr   r   r  P  r  c                 3   s     | ]} d  |v r|V  qdS rQ   r   r  )stringr   r   rV   V  s    z0_Unparser._str_literal_helper.<locals>.<genexpr>r   rL   r   c                    s   | d  d kS )Nr   r   r   )r  r  r   r   r  Z  s    z/_Unparser._str_literal_helper.<locals>.<lambda>)r   r  )r^   r3   r_   r   sort)r   r  r  r  r  Zpossible_quotesquoter   )r  r  r  r   _str_literal_helper<  s    
z_Unparser._str_literal_helperr  c                C   s6   	 | j ||d\}}|d }| | | |  d S )Nr  r   )r  r  )r   r  r  
quote_typer   r   r   _write_str_avoiding_backslashesb  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 qg }t}|D ]\}}| j|||d\}}|
| q@d|}|d }|  | | |  d S )Nr   	_fstring_r  rN   r   )r  r   _fstring_JoinedStrr  r  r  r>   r   r%   r]   rZ   r   r$   _ALL_QUOTESr  r^   )	r   r   r  r&   methZ
new_bufferr  Zis_constantr  r   r   r   visit_JoinedStrh  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>   r   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&   rG   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r$|d d|v r,td|| |j	dkrIt
|j	}|dvrBtd	|d
|  |jra|d t| dt |jj }||j| |d d S )Nr  Tr   rh   r  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   ro   r   
conversionchrformat_specr   r]   )r   r   r  unparserexprr  r  r   r   r   r    s&   


z!_Unparser._fstring_FormattedValuec                 C      |  |j d S r#   )r  r9   r!  r   r   r   
visit_Name  r  z_Unparser.visit_Namec                 C   s0   |    |jdkr| d | j|jtd d S )Nur  )r  kindr  r  r&   r  r!  r   r   r   r)    s   

z_Unparser._write_docstringc              
   C   sn   t |ttfr| t|dtddt dt d d S | jr.t |tr.| 	| d S | t| d S )Ninfnanr  -r  )
r   r(   r)   r  r_   r  _INFSTRr   rG   r  r   r   r   r   _write_constant  s   z_Unparser._write_constantc                 C   s   |j }t|tr(| dd | | j| W d    d S 1 s!w   Y  d S |du r3| d d S |jdkr=| 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                    L     dd   fdd j|j W d    d S 1 sw   Y  d S )N[]c                      r  r  r  r   r   r   r   r    r  z&_Unparser.visit_List.<locals>.<lambda>)r  r  r&  r4   r!  r   r   r   
visit_List  s   "z_Unparser.visit_Listc                 C   T   |  dd | |j |jD ]}| | qW d    d S 1 s#w   Y  d S )Nr  r  r  r&  elt
generatorsr   r   genr   r   r   visit_ListComp     
"z_Unparser.visit_ListCompc                 C   r  r  r  r  r   r   r   visit_GeneratorExp  r  z_Unparser.visit_GeneratorExpc                 C   r  )Nr  r  r  r  r   r   r   visit_SetComp  r  z_Unparser.visit_SetCompc                 C   sj   |  dd% | |j | d | |j |jD ]}| | qW d    d S 1 s.w   Y  d S )Nr  r  r   )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 | | q9d S )Nz async for z for r~   if )is_asyncr  r"  r   r   r5  r&  r   r   r   ifs)r   r   Z	if_clauser   r   r   visit_comprehension  s   



z_Unparser.visit_comprehensionc                 C   s   |  tj|9 | tj |j|j | |j | d | |j | d | tj|j	 | |j	 W d    d S 1 sCw   Y  d S )Nr  z else )
r   r   r   r"  r   rI   rQ  r&  r  re  r!  r   r   r   visit_IfExp  s   

"z_Unparser.visit_IfExpc                    s`   |j r) dd   fdd j|j  W d    d S 1 s"w   Y  d S  d d S )Nr  r  c                      r  r  r  r   r   r   r   r    r  z%_Unparser.visit_Set.<locals>.<lambda>z{*()})r4   r  r  r&  r  r!  r   r   r   	visit_Set  s
   "z_Unparser.visit_Setc                    sl    fdd fdd}  dd   fdd|t|j|j W d    d S 1 s/w   Y  d S )	Nc                    s"     |   d   | d S Nr   r&  r  )kvr   r   r   write_key_value_pair  s   

z2_Unparser.visit_Dict.<locals>.write_key_value_pairc                    sD   | \}}|d u r  d  tj|  | d S || 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                      r  r  r  r   r   r   r   r  !  r  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   sB   |  dd | | j|j W d    d S 1 sw   Y  d S r  )r  r	  r&  r4   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| }| ||% | | |tjur#| d | 	||j
 | |j
 W d    d S 1 s;w   Y  d S Nrh   )unopr,   r\   r]   unop_precedencer   r  r   r   r"  r/   r&  )r   r   operatoroperator_precedencer   r   r   visit_UnaryOp0  s   



"z_Unparser.visit_UnaryOpr   rl  /%<<>>|^&//r  )rA   rB   ZMultZMatMultZDivZModZLShiftZRShiftZBitOrZBitXorZBitAndZFloorDivZPow)r  r  r   rl  r  r  r  r  r  r  r  r  r  )r  c                 C   s   | j |jjj }| j| }| ||> || jv r | }|}n|}| }| ||j	 | 
|j	 | d| d | ||j | 
|j W d    d S 1 sTw   Y  d S r  )rA  r,   r\   r]   binop_precedencer   binop_rassocr   r"  rC   r&  r  rD   )r   r   r  r  Zleft_precedenceZright_precedencer   r   r   visit_BinOp]  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|= | jtj |jg|jR   | |j t|j	|jD ]\}}| 
d| j|jj  d  | | q$W d    d S 1 sGw   Y  d S r  )r   r   r   r"  r   rC   comparatorsr&  r@   opsr  cmpopsr\   r]   )r   r   orq  r   r   r   visit_Compare{  s   "z_Unparser.visit_Compareandor)ZAndZOr)r  r  c                    s   j |jjj }j|   fdd} | d| dfdd||j W d    d S 1 s9w   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_traverserh   c                      s
     S r#   r  r   )r   r   r   r   r    r  z(_Unparser.visit_BoolOp.<locals>.<lambda>)boolopsr,   r\   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 )Nrh   r;  )
r"  r   r   r&   r&  r   r$   r'   r  rr   r!  r   r   r   visit_Attribute  s   

z_Unparser.visit_Attributec                 C   s   |  tj|j | |j | dd5 d}|jD ]}|r$| d nd}| | q|jD ]}|r9| d nd}| | q/W d    d S 1 sLw   Y  d S )Nr  r  FrO   T)	r"  r   r   r7   r&  r  r:   r  r;   )r   r   rp  rq  r   r   r   
visit_Call  s    

"z_Unparser.visit_Callc                 C   s   dd }|  tj|j | |j | dd& ||jr(| | j|jj n| |j W d    d S W d    d S 1 sAw   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)rR   r  r   r   r   rV     s    zE_Unparser.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)r   r2   r4   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	  r4   )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   rG  )Nr  r  r!  r   r   r   visit_Ellipsis  rK  z_Unparser.visit_Ellipsisc                 C   sR   |j r	| |j  | d |jr| |j |jr'| d | |j d S d S )Nr  )lowerr&  r  upperstepr!  r   r   r   visit_Slice  s   

z_Unparser.visit_Slicec                 C   sZ   |  d | |j |   |jD ]}| | qW d    d S 1 s&w   Y  d S )Nzmatch )r  r&  subjectr  cases)r   r   caser   r   r   visit_Match  s   


"z_Unparser.visit_Matchc                 C   s0   |  |j |jr|  d | |j d S d S r  )r  argrC  r&  r!  r   r   r   	visit_arg  
   
z_Unparser.visit_argc           	      C   s  d}|j |j }d gt|t|j  |j }tt||dD ]/\}}|\}}|r,d}n| d | | |rB| d | | |t|j krN| d q|jsU|j	r~|rZd}n| d | d |jr~| |jj
 |jjr~| d | |jj |j	rt|j	|jD ]\}}| d | | |r| d | | q|jr|rd}n| d | d	|jj
  |jjr| d | |jj d S d S d S )
NTrL   FrO   =z, /r   r   r  )posonlyargsr:   r<   defaults	enumerater@   r  r&  vararg
kwonlyargsr  rC  kw_defaultskwarg)	r   r   r   Zall_argsr  r   elementsadr   r   r   visit_arguments  sV   













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   sp   |  tj|' | d | |j | d | tj|j | |j W d    d S 1 s1w   Y  d S )Nzlambda r   )r   r   r   r  r&  r:   r"  rI   r!  r   r   r   visit_Lambda  s   

"z_Unparser.visit_Lambdac                 C   s*   |  |j |jr|  d|j  d S d S Nrj  )r  rc   asnamer!  r   r   r   visit_alias&  s   z_Unparser.visit_aliasc                 C   s0   |  |j |jr| d |  |j d S d S r  )r&  context_exproptional_varsr  r!  r   r   r   visit_withitem+  r	  z_Unparser.visit_withitemc                 C   sl   |  d | |j |jr| d | |j |   | |j W d    d S 1 s/w   Y  d S )Nzcase r  )r  r&  patternguardr  r  rI   r!  r   r   r   visit_match_case1  s   


"z_Unparser.visit_match_casec                 C   r  r#   )r&  r&   r!  r   r   r   visit_MatchValue:  r  z_Unparser.visit_MatchValuec                 C   r  r#   )r  r&   r!  r   r   r   visit_MatchSingleton=  r  z_Unparser.visit_MatchSingletonc                    r  )Nr  r  c                      r  r  r  r   r   r   r   r  C  r  z/_Unparser.visit_MatchSequence.<locals>.<lambda>)r  r  r&  patternsr!  r   r   r   visit_MatchSequence@  s
   "z_Unparser.visit_MatchSequencec                 C   s&   |j }|d u r	d}| d|  d S )N_r   )rc   r  )r   r   rc   r   r   r   visit_MatchStarF  s   z_Unparser.visit_MatchStarc              
      s    fdd}  dd; |j}  fdd|t||jdd |j}|d ur?|r/ d	  d
|  W d    d S W d    d S 1 sJw   Y  d S )Nc                    s*   | \}}  |  d   | d S r  r  )pairr  pr   r   r   write_key_pattern_pairM  s   

z<_Unparser.visit_MatchMapping.<locals>.write_key_pattern_pairr  r  c                      r  r  r  r   r   r   r   r  V  r  z._Unparser.visit_MatchMapping.<locals>.<lambda>TstrictrO   r  )r  r=   r  r@   r#  restr  )r   r   r)  r=   r,  r   r   r   visit_MatchMappingL  s    

"z_Unparser.visit_MatchMappingc              
      s     tj|j  |j  ddC |j}  fdd j| |j}|rO fdd}|r6 	d   fdd|t
||jd	d
 W d    d S W d    d S 1 sZw   Y  d S )Nr  r  c                      r  r  r  r   r   r   r   r  f  r  z,_Unparser.visit_MatchClass.<locals>.<lambda>c                    s&   | \}}  | d  | d S )Nr
  )r  r&  )r'  rr   r  r   r   r   write_attr_patternj  s   z6_Unparser.visit_MatchClass.<locals>.write_attr_patternrO   c                      r  r  r  r   r   r   r   r  r  r  Tr*  )r"  r   r   rb   r&  r  r#  r  	kwd_attrsr  r@   kwd_patterns)r   r   r#  Zattrsr.  r   r   r   visit_MatchClass`  s(   

"z_Unparser.visit_MatchClassc                 C   s   |j }|j}|d u r| d d S |d u r| |j  d S | tj|  | tj|j | |j | d|j   W d    d S 1 sGw   Y  d S )Nr%  rj  )	rc   r  r  r   r   r   r"  r   r&  )r   r   rc   r  r   r   r   visit_MatchAsw  s   "z_Unparser.visit_MatchAsc                    sh     tj|#  jtj g|jR     fdd j|j W d    d S 1 s-w   Y  d S )Nc                      r  )Nz | r  r   r   r   r   r    r  z)_Unparser.visit_MatchOr.<locals>.<lambda>)r   r   r   r"  r   r#  r  r&  r!  r   r   r   visit_MatchOr  s   "z_Unparser.visit_MatchOr)rN   )r]   r   r   r   r  r	  r
  r  r  r  propertyr  r   r  r  r  r   r  r"  r#  r%  r&  r   r*  r/  r3  r4  r6  r9  r=  r@  rB  rD  rF  rJ  rM  rO  rP  rR  rT  rU  rX  r[  r\  r`  rh  rk  rr  rw  rx  rv  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  r  r  r   r   r   r  r  rA  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  r  r   r!  r"  r$  r&  r-  r1  r2  r3  __classcell__r   r   r(  r   r     s4   




		

&
	

3	r   c                 C   s   t  }|| S r#   )r   r   )Zast_objr  r   r   r   unparse  s   
r7  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 sTw   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)rA  r>  z-iz--indentrP   z'indentation of nodes (number of spaces))r%   r=  r>  )r	   )rg   rK   )argparseArgumentParseradd_argumentFileTyper'   
parse_argsr9  readr   rc   r   Zno_type_commentsprintrj   rg   rK   )rC  parserr:   r9  r   Ztreer   r   r   main  s2   



rK  __main__)r   r   )TF)rL   )T)JsysZ_ast
contextlibr   r   enumr   r   r   rJ   rj   rs   rx   r{   r}   rt   r   r   r   r   ry   objectr   r   rn   r$   r   r   r4  rz   r   r%   r   r   r   r   r   r   r   r'   r(   r)   rG   bytesboolr   r   r   rW   r   r   r   r2   r   r   r   modr   Zexpr_contextr   r   r   r_   
float_info
max_10_expr  r   Z_SINGLE_QUOTESr  r  r   r7  rK  r]   r   r   r   r   <module>   s    ;C
#
%:
<
	
       m

