B
    ­»ˆd"k  ã               @   s®   d Z ddlmZmZ ddlZddlZddlZddlZddlZddlm	Z	 de
ejjd ƒ Zdd„ ZG d	d
„ d
ƒZejfdd„Zdd„ Zdd„ Zedkrªeejdd… ƒ dS )z'Usage: unparse.py <path to source file>é    )Úprint_functionÚunicode_literalsN)ÚStringIOZ1eé   c             C   sN   t |ƒ}y|t|ƒƒ W n tk
r,   Y nX x|D ]}| ƒ  ||ƒ q4W dS )z<Call f on each item in seq, calling inter() in between.
    N)ÚiterÚnextÚStopIteration)ZinterÚfÚseqÚx© r   úE/var/www/html/venv/lib/python3.7/site-packages/astunparse/unparser.pyÚ
interleave   s    
r   c               @   s2  e Zd ZdZejfdd„ZdÓdd„Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!d;d<„ Z"d=d>„ Z#d?d@„ Z$dAdB„ Z%dCdD„ Z&dEdF„ Z'dGdH„ Z(dIdJ„ Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,dQdR„ Z-dSdT„ Z.dUdV„ Z/dWdX„ Z0dÔdZd[„Z1d\d]„ Z2d^d_„ Z3d`da„ Z4dbdc„ Z5ddde„ Z6dfdg„ Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ ZBd~d„ ZCd€d„ ZDd‚dƒ„ ZEd„d…„ ZFd†d‡„ ZGdˆd‰„ ZHdŠd‹„ ZIdŒd„ ZJdŽd„ ZKdd‘d’d“d”œZLd•d–„ ZMd’d“d—d˜d™dšd›dœddždŸd d¡d¢œZNd£d¤„ ZOd¥d¦d§d¨d©dªd«d¬d­d®d¯œ
ZPd°d±„ ZQeRjSd²eRjTd³iZUd´dµ„ ZVd¶d·„ ZWd¸d¹„ ZXdºd»„ ZYd¼d½„ ZZd¾d¿„ Z[dÀdÁ„ Z\dÂdÃ„ Z]dÄdÅ„ Z^dÆdÇ„ Z_dÈdÉ„ Z`dÊdË„ ZadÌdÍ„ ZbdÎdÏ„ ZcdÐdÑ„ ZddÒS )ÕÚUnparserzŽMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. c             C   s8   || _ g | _d| _|  |¡ td| j d | j  ¡  dS )zTUnparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file.r   Ú )ÚfileN)r	   Úfuture_importsÚ_indentÚdispatchÚprintÚflush)ÚselfÚtreer   r   r   r   Ú__init__    s    
zUnparser.__init__r   c             C   s   | j  dd| j  | ¡ dS )zBIndent a piece of text, according to the current indentation levelÚ
z    N)r	   Úwriter   )r   Útextr   r   r   Úfill*   s    zUnparser.fillc             C   s   | j  t |¡¡ dS )z+Append a piece of text to the current line.N)r	   r   ÚsixÚ	text_type)r   r   r   r   r   r   .   s    zUnparser.writec             C   s   |   d¡ |  jd7  _dS )z(Print ':', and increase the indentation.ú:r   N)r   r   )r   r   r   r   Úenter2   s    
zUnparser.enterc             C   s   |  j d8  _ dS )zDecrease the indentation level.r   N)r   )r   r   r   r   Úleave7   s    zUnparser.leavec             C   sD   t |tƒr&x|D ]}|  |¡ qW dS t| d|jj ƒ}||ƒ dS )z:Dispatcher function, dispatching tree type T to method _T.NÚ_)Ú
isinstanceÚlistr   ÚgetattrÚ	__class__Ú__name__)r   r   ÚtÚmethr   r   r   r   ;   s    

zUnparser.dispatchc             C   s   x|j D ]}|  |¡ qW d S )N)Úbodyr   )r   r   Ústmtr   r   r   Ú_ModuleL   s    zUnparser._Modulec             C   s   x|j D ]}|  |¡ qW d S )N)r+   r   )r   r   r,   r   r   r   Ú_InteractiveP   s    zUnparser._Interactivec             C   s   |   |j¡ d S )N)r   r+   )r   r   r   r   r   Ú_ExpressionT   s    zUnparser._Expressionc             C   s   |   ¡  |  |j¡ d S )N)r   r   Úvalue)r   r   r   r   r   Ú_ExprX   s    zUnparser._Exprc             C   s:   |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nú(z := ú))r   r   Útargetr0   )r   r   r   r   r   Ú
_NamedExpr\   s
    

zUnparser._NamedExprc                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzimport c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   Ú<lambda>e   ó    z"Unparser._Import.<locals>.<lambda>)r   r   r   Únames)r   r)   r   )r   r   Ú_Importc   s    
zUnparser._Importc                sz   |j r(|j dkr(ˆ j dd„ |jD ƒ¡ ˆ  d¡ ˆ  d|j ¡ |j rTˆ  |j ¡ ˆ  d¡ t‡ fdd„ˆ j|jƒ d S )	NÚ
__future__c             s   s   | ]}|j V  qd S )N)Úname)Ú.0Únr   r   r   ú	<genexpr>j   s    z'Unparser._ImportFrom.<locals>.<genexpr>zfrom Ú.z import c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   q   r7   z&Unparser._ImportFrom.<locals>.<lambda>)	Úmoduler   Úextendr8   r   r   Úlevelr   r   )r   r)   r   )r   r   Ú_ImportFromg   s    

zUnparser._ImportFromc             C   s<   |   ¡  x"|jD ]}|  |¡ |  d¡ qW |  |j¡ d S )Nz = )r   Útargetsr   r   r0   )r   r)   r4   r   r   r   Ú_Assigns   s
    
zUnparser._Assignc             C   sB   |   ¡  |  |j¡ |  d| j|jjj  d ¡ |  |j¡ d S )Nú z= )	r   r   r4   r   ÚbinopÚopr'   r(   r0   )r   r)   r   r   r   Ú
_AugAssignz   s    zUnparser._AugAssignc             C   s†   |   ¡  |js&t|jtjƒr&|  d¡ |  |j¡ |jsPt|jtjƒrP|  d¡ |  d¡ |  |j¡ |j	r‚|  d¡ |  |j	¡ d S )Nr2   r3   z: z = )
r   Úsimpler$   r4   ÚastÚNamer   r   Ú
annotationr0   )r   r)   r   r   r   Ú
_AnnAssign€   s    



zUnparser._AnnAssignc             C   s*   |   d¡ |jr&|  d¡ |  |j¡ d S )NÚreturnrF   )r   r0   r   r   )r   r)   r   r   r   Ú_Return   s    

zUnparser._Returnc             C   s   |   d¡ d S )NÚpass)r   )r   r)   r   r   r   Ú_Pass“   s    zUnparser._Passc             C   s   |   d¡ d S )NÚbreak)r   )r   r)   r   r   r   Ú_Break–   s    zUnparser._Breakc             C   s   |   d¡ d S )NÚcontinue)r   )r   r)   r   r   r   Ú	_Continue™   s    zUnparser._Continuec                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzdel c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   ž   r7   z"Unparser._Delete.<locals>.<lambda>)r   r   r   rD   )r   r)   r   )r   r   Ú_Deleteœ   s    
zUnparser._Deletec             C   s6   |   d¡ |  |j¡ |jr2|  d¡ |  |j¡ d S )Nzassert z, )r   r   ÚtestÚmsgr   )r   r)   r   r   r   Ú_Assert    s
    

zUnparser._Assertc             C   sR   |   d¡ |  |j¡ |jr2|  d¡ |  |j¡ |jrN|  d¡ |  |j¡ d S )Nzexec z in z, )r   r   r+   Úglobalsr   Úlocals)r   r)   r   r   r   Ú_Exec§   s    


zUnparser._Execc             C   sp   |   d¡ d}|jr.|  d¡ |  |j¡ d}x,|jD ]"}|rJ|  d¡ nd}|  |¡ q6W |jsl|  d¡ d S )Nzprint Fz>>Tz, ú,)r   Údestr   r   ÚvaluesÚnl)r   r)   Zdo_commaÚer   r   r   Ú_Print±   s    

 zUnparser._Printc                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzglobal c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   Á   r7   z"Unparser._Global.<locals>.<lambda>)r   r   r   r8   )r   r)   r   )r   r   Ú_Global¿   s    
zUnparser._Globalc                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nz	nonlocal c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   Å   r7   z$Unparser._Nonlocal.<locals>.<lambda>)r   r   r   r8   )r   r)   r   )r   r   Ú	_NonlocalÃ   s    
zUnparser._Nonlocalc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr2   ÚawaitrF   r3   )r   r0   r   )r   r)   r   r   r   Ú_AwaitÇ   s    


zUnparser._Awaitc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr2   ÚyieldrF   r3   )r   r0   r   )r   r)   r   r   r   Ú_YieldÏ   s    


zUnparser._Yieldc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr2   z
yield fromrF   r3   )r   r0   r   )r   r)   r   r   r   Ú
_YieldFrom×   s    


zUnparser._YieldFromc             C   s°   |   d¡ tjrX|js$|jr t‚d S |  d¡ |  |j¡ |jr¬|  d¡ |  |j¡ nT|  d¡ |jrt|  |j¡ |j	r|  d¡ |  |j	¡ |j
r¬|  d¡ |  |j
¡ d S )NÚraiserF   z from z, )r   r   ÚPY3ÚexcÚcauseÚAssertionErrorr   r   ÚtypeÚinstZtback)r   r)   r   r   r   Ú_Raiseß   s&    






zUnparser._Raisec             C   sœ   |   d¡ |  ¡  |  |j¡ |  ¡  x|jD ]}|  |¡ q.W |jrl|   d¡ |  ¡  |  |j¡ |  ¡  |jr˜|   d¡ |  ¡  |  |j¡ |  ¡  d S )NÚtryÚelseÚfinally)r   r!   r   r+   r"   ÚhandlersÚorelseÚ	finalbody)r   r)   Úexr   r   r   Ú_Tryõ   s     


zUnparser._Tryc             C   sp   |   d¡ |  ¡  |  |j¡ |  ¡  x|jD ]}|  |¡ q.W |jrl|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nrs   rt   )r   r!   r   r+   r"   rv   rw   )r   r)   ry   r   r   r   Ú
_TryExcept  s    

zUnparser._TryExceptc             C   s~   t |jƒdkr.t|jd tjƒr.|  |j¡ n&|  d¡ |  ¡  |  |j¡ |  ¡  |  d¡ |  ¡  |  |j	¡ |  ¡  d S )Nr   r   rs   ru   )
Úlenr+   r$   rK   Z	TryExceptr   r   r!   r"   rx   )r   r)   r   r   r   Ú_TryFinally  s     

zUnparser._TryFinallyc             C   sv   |   d¡ |jr&|  d¡ |  |j¡ |jrV|  d¡ tjrJ|  |j¡ n|  |j¡ |  ¡  |  |j¡ |  	¡  d S )NÚexceptrF   z as )
r   rp   r   r   r;   r   rl   r!   r+   r"   )r   r)   r   r   r   Ú_ExceptHandler$  s    


zUnparser._ExceptHandlerc             C   s–  |   d¡ x"|jD ]}|  d¡ |  |¡ qW |  d|j ¡ tjr4|   d¡ d}x,|jD ]"}|rp|   d¡ nd}|  |¡ q\W x,|jD ]"}|rž|   d¡ nd}|  |¡ qŠW t	j
d d… d	k r(|jrô|rÚ|   d¡ nd}|   d
¡ |  |j¡ |jr(|r|   d¡ nd}|   d¡ |  |j¡ |   d¡ nB|jrv|   d¡ x$|jD ]}|  |¡ |   d¡ qNW |   d¡ |  ¡  |  |j¡ |  ¡  d S )Nr   ú@zclass r2   Fz, Té   )é   é   Ú*z**r3   )r   Údecorator_listr   r   r;   r   rl   ÚbasesÚkeywordsÚsysÚversion_infoÚstarargsÚkwargsr!   r+   r"   )r   r)   ÚdecoÚcommarb   Úar   r   r   Ú	_ClassDef3  sR    


   
 



zUnparser._ClassDefc             C   s   |   |d¡ d S )NÚdef)Ú_Unparser__FunctionDef_helper)r   r)   r   r   r   Ú_FunctionDefZ  s    zUnparser._FunctionDefc             C   s   |   |d¡ d S )Nz	async def)r‘   )r   r)   r   r   r   Ú_AsyncFunctionDef]  s    zUnparser._AsyncFunctionDefc             C   s¢   |   d¡ x"|jD ]}|  d¡ |  |¡ qW |d |j d }|  |¡ |  |j¡ |   d¡ t|ddƒr‚|   d¡ |  |j¡ |  ¡  |  |j	¡ |  
¡  d S )	Nr   r€   rF   r2   r3   ÚreturnsFz -> )r   r…   r   r   r;   Úargsr&   r”   r!   r+   r"   )r   r)   Zfill_suffixrŒ   Zdef_strr   r   r   Z__FunctionDef_helper`  s    




zUnparser.__FunctionDef_helperc             C   s   |   d|¡ d S )Nzfor )Ú_Unparser__For_helper)r   r)   r   r   r   Ú_Forp  s    zUnparser._Forc             C   s   |   d|¡ d S )Nz
async for )r–   )r   r)   r   r   r   Ú	_AsyncFors  s    zUnparser._AsyncForc             C   sx   |   |¡ |  |j¡ |  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jrt|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nz in rt   )	r   r   r4   r   r   r!   r+   r"   rw   )r   r   r)   r   r   r   Z__For_helperv  s    


zUnparser.__For_helperc             C   sÊ   |   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  xf|jr˜t|jƒdkr˜t|jd t	j
ƒr˜|jd }|   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  q4W |jrÆ|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nzif r   r   zelif rt   )r   r   rX   r!   r+   r"   rw   r|   r$   rK   ÚIf)r   r)   r   r   r   Ú_If„  s$    



zUnparser._Ifc             C   sb   |   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr^|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nzwhile rt   )r   r   rX   r!   r+   r"   rw   )r   r)   r   r   r   Ú_Whileš  s    

zUnparser._WhileFc                s~   ˆ   |rdnd¡ t|dƒr6t‡ fdd„ˆ j|jƒ n(ˆ  |j¡ |jr^ˆ  d¡ ˆ  |j¡ ˆ  ¡  ˆ  |j	¡ ˆ  
¡  d S )Nzasync with zwith Úitemsc                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   ©  r7   z(Unparser._generic_With.<locals>.<lambda>z as )r   Úhasattrr   r   rœ   Úcontext_exprÚoptional_varsr   r!   r+   r"   )r   r)   Úasync_r   )r   r   Ú_generic_With¦  s    

zUnparser._generic_Withc             C   s   |   |¡ d S )N)r¡   )r   r)   r   r   r   Ú_With³  s    zUnparser._Withc             C   s   | j |dd d S )NT)r    )r¡   )r   r)   r   r   r   Ú
_AsyncWith¶  s    zUnparser._AsyncWithc             C   s   |   t|jƒ¡ d S )N)r   ÚreprÚs)r   r)   r   r   r   Ú_Bytesº  s    zUnparser._Bytesc             C   sŠ   t jr|  t|jƒ¡ nnd| jkr4|  t|jƒ¡ nRt|jtƒrV|  dt|jƒ ¡ n0t|jtƒrz|  t|jƒ 	d¡¡ nds†t
dƒ‚d S )Nr   ÚbÚuFzshouldn't get here)r   rl   r   r¤   r¥   r   r$   ÚstrÚunicodeÚlstripro   )r   r   r   r   r   Ú_Str½  s    
zUnparser._Strc             C   sˆ   |   d¡ tƒ }|  ||j ¡ | ¡ }d|ks6d|kr@ddg}nddddg}x,|D ]}||krRdj||d	}P qRW t|ƒ}|   |¡ d S )
Nr	   r   úz'''z"""ú'ú"z{quote_type}{v}{quote_type})Ú
quote_typeÚv)r   r   Ú_fstring_JoinedStrÚgetvalueÚformatr¤   )r   r)   Ústringr±   Zquote_typesr°   r   r   r   Ú
_JoinedStrÍ  s    


zUnparser._JoinedStrc             C   s4   |   d¡ tƒ }|  ||j ¡ |   t| ¡ ƒ¡ d S )Nr	   )r   r   r²   r¤   r³   )r   r)   rµ   r   r   r   Ú_FormattedValueá  s    
zUnparser._FormattedValuec             C   s2   x,|j D ]"}t| dt|ƒj ƒ}|||ƒ qW d S )NÚ	_fstring_)r`   r&   rp   r(   )r   r)   r   r0   r*   r   r   r   r²   è  s    zUnparser._fstring_JoinedStrc             C   s"   |j  dd¡ dd¡}||ƒ d S )NÚ{z{{Ú}z}})r¥   Úreplace)r   r)   r   r0   r   r   r   Ú_fstring_Strí  s    zUnparser._fstring_Strc             C   s2   t |jtƒst‚|j dd¡ dd¡}||ƒ d S )Nr¹   z{{rº   z}})r$   r0   r©   ro   r»   )r   r)   r   r0   r   r   r   Ú_fstring_Constantñ  s    zUnparser._fstring_Constantc             C   s®   |dƒ t ƒ }t|j|ƒ | ¡  d¡}| d¡r:|dƒ ||ƒ |jdkrrt|jƒ}|dksbt‚|dj	|dƒ |j
r¢|dƒ t| d	t|j
ƒj ƒ}||j
|ƒ |d
ƒ d S )Nr¹   r   rF   éÿÿÿÿZsraz!{conversion})Ú
conversionr    r¸   rº   )r   r   r0   r³   ÚrstripÚ
startswithr¿   Úchrro   r´   Úformat_specr&   rp   r(   )r   r)   r   Úexprr¿   r*   r   r   r   Ú_fstring_FormattedValueö  s     


z Unparser._fstring_FormattedValuec             C   s   |   |j¡ d S )N)r   Úid)r   r)   r   r   r   Ú_Name  s    zUnparser._Namec             C   s   |   t|jƒ¡ d S )N)r   r¤   r0   )r   r)   r   r   r   Ú_NameConstant  s    zUnparser._NameConstantc             C   s$   |   d¡ |  |j¡ |   d¡ d S )Nú`)r   r   r0   )r   r)   r   r   r   Ú_Repr  s    
zUnparser._Reprc             C   s8   t |ttfƒr&|  t|ƒ dt¡¡ n|  t|ƒ¡ d S )NÚinf)r$   ÚfloatÚcomplexr   r¤   r»   ÚINFSTR)r   r0   r   r   r   Ú_write_constant  s    zUnparser._write_constantc                sš   |j }t|tƒrbˆ  d¡ t|ƒdkr@ˆ  |d ¡ ˆ  d¡ nt‡ fdd„ˆ j|ƒ ˆ  d¡ n4|tkrvˆ  d¡ n |jd	krŠˆ  d	¡ ˆ  |j ¡ d S )
Nr2   r   r   r^   c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   "  r7   z$Unparser._Constant.<locals>.<lambda>r3   z...r¨   )	r0   r$   Útupler   r|   rÏ   r   ÚEllipsisÚkind)r   r)   r0   r   )r   r   Ú	_Constant  s    



zUnparser._Constantc             C   s€   t |jƒ}tjr$|  | dt¡¡ nX| d¡r8|  d¡ d|krV| d¡rV| dd¡}|  | dt¡¡ | d¡r||  d¡ d S )NrË   ú-r2   z*jÚjr3   )	r¤   r=   r   rl   r   r»   rÎ   rÁ   Úendswith)r   r)   Zrepr_nr   r   r   Ú_Num+  s    



zUnparser._Numc                s0   ˆ   d¡ t‡ fdd„ˆ j|jƒ ˆ   d¡ d S )Nú[c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   <  r7   z Unparser._List.<locals>.<lambda>ú])r   r   r   Úelts)r   r)   r   )r   r   Ú_List:  s    
zUnparser._Listc             C   s>   |   d¡ |  |j¡ x|jD ]}|  |¡ qW |   d¡ d S )NrØ   rÙ   )r   r   ÚeltÚ
generators)r   r)   Úgenr   r   r   Ú	_ListComp?  s
    
zUnparser._ListCompc             C   s>   |   d¡ |  |j¡ x|jD ]}|  |¡ qW |   d¡ d S )Nr2   r3   )r   r   rÜ   rÝ   )r   r)   rÞ   r   r   r   Ú_GeneratorExpF  s
    
zUnparser._GeneratorExpc             C   s>   |   d¡ |  |j¡ x|jD ]}|  |¡ qW |   d¡ d S )Nr¹   rº   )r   r   rÜ   rÝ   )r   r)   rÞ   r   r   r   Ú_SetCompM  s
    
zUnparser._SetCompc             C   sT   |   d¡ |  |j¡ |   d¡ |  |j¡ x|jD ]}|  |¡ q4W |   d¡ d S )Nr¹   z: rº   )r   r   Úkeyr0   rÝ   )r   r)   rÞ   r   r   r   Ú	_DictCompT  s    

zUnparser._DictCompc             C   sl   t |ddƒr|  d¡ n
|  d¡ |  |j¡ |  d¡ |  |j¡ x"|jD ]}|  d¡ |  |¡ qLW d S )NZis_asyncFz async for z for z in z if )r&   r   r   r4   r   Zifs)r   r)   Z	if_clauser   r   r   Ú_comprehension]  s    


zUnparser._comprehensionc             C   sP   |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nr2   z if z else r3   )r   r   r+   rX   rw   )r   r)   r   r   r   Ú_IfExpi  s    


zUnparser._IfExpc                s:   |j s
t‚ˆ  d¡ t‡ fdd„ˆ j|j ƒ ˆ  d¡ d S )Nr¹   c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   u  r7   zUnparser._Set.<locals>.<lambda>rº   )rÚ   ro   r   r   r   )r   r)   r   )r   r   Ú_Setr  s    

zUnparser._Setc                sP   ˆ   d¡ ‡ fdd„‰‡ ‡fdd„}t‡ fdd„|t|j|jƒƒ ˆ   d¡ d S )	Nr¹   c                s"   ˆ   | ¡ ˆ  d¡ ˆ   |¡ d S )Nz: )r   r   )Úkr±   )r   r   r   Úwrite_key_value_pairz  s    

z,Unparser._Dict.<locals>.write_key_value_pairc                s4   | \}}|d kr&ˆ   d¡ ˆ  |¡ n
ˆ||ƒ d S )Nz**)r   r   )Úitemrç   r±   )r   rè   r   r   Ú
write_item  s
    
z"Unparser._Dict.<locals>.write_itemc                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   ˆ  r7   z Unparser._Dict.<locals>.<lambda>rº   )r   r   ÚzipÚkeysr`   )r   r)   rê   r   )r   rè   r   Ú_Dictx  s
    
	zUnparser._Dictc                s^   ˆ   d¡ t|jƒdkr8|jd }ˆ  |¡ ˆ   d¡ nt‡ fdd„ˆ j|jƒ ˆ   d¡ d S )Nr2   r   r   r^   c                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6   ’  r7   z!Unparser._Tuple.<locals>.<lambda>r3   )r   r|   rÚ   r   r   )r   r)   rÜ   r   )r   r   Ú_Tuple‹  s    


zUnparser._Tupleú~Únotú+rÔ   )ÚInvertÚNotÚUAddÚUSubc             C   sˆ   |   d¡ |   | j|jjj ¡ |   d¡ tjrnt|jtj	ƒrnt|j
tjƒrn|   d¡ |  |j
¡ |   d¡ n|  |j
¡ |   d¡ d S )Nr2   rF   r3   )r   ÚunoprH   r'   r(   r   ÚPY2r$   rK   rõ   ÚoperandÚNumr   )r   r)   r   r   r   Ú_UnaryOp–  s    

"
zUnparser._UnaryOpr„   r€   ú/ú%z<<z>>ú|ú^ú&z//z**)ÚAddÚSubÚMultÚMatMultÚDivÚModÚLShiftÚRShiftÚBitOrÚBitXorÚBitAndÚFloorDivÚPowc             C   sN   |   d¡ |  |j¡ |   d| j|jjj  d ¡ |  |j¡ |   d¡ d S )Nr2   rF   r3   )r   r   ÚleftrG   rH   r'   r(   Úright)r   r)   r   r   r   Ú_BinOpª  s
    
zUnparser._BinOpz==z!=ú<z<=ú>z>=Úiszis notÚinznot in)
ÚEqÚNotEqÚLtÚLtEÚGtÚGtEÚIsÚIsNotÚInÚNotInc             C   sf   |   d¡ |  |j¡ x@t|j|jƒD ].\}}|   d| j|jj  d ¡ |  |¡ q&W |   d¡ d S )Nr2   rF   r3   )	r   r   r  rë   ZopsZcomparatorsÚcmpopsr'   r(   )r   r)   Úorb   r   r   r   Ú_Compare³  s    
zUnparser._CompareÚandÚorc                sD   ˆ  d¡ dˆj|jj  ‰ t‡ ‡fdd„ˆj|jƒ ˆ  d¡ d S )Nr2   z %s c                  s
   ˆ  ˆ ¡S )N)r   r   )r¥   r   r   r   r6   ¿  r7   z"Unparser._BoolOp.<locals>.<lambda>r3   )r   ÚboolopsrH   r'   r   r   r`   )r   r)   r   )r¥   r   r   Ú_BoolOp¼  s    
zUnparser._BoolOpc          	   C   sZ   |   |j¡ t|jttdttdd ƒƒƒr@t|jjtƒr@|  d¡ |  d¡ |  |j¡ d S )NÚConstantrù   rF   r?   )	r   r0   r$   r&   rK   r=   Úintr   Úattr)r   r)   r   r   r   Ú
_AttributeÂ  s
    *

zUnparser._Attributec             C   sö   |   |j¡ |  d¡ d}x,|jD ]"}|r6|  d¡ nd}|   |¡ q"W x,|jD ]"}|rd|  d¡ nd}|   |¡ qPW tjd d… dk rè|jr¸|rž|  d¡ nd}|  d¡ |   |j¡ |jrè|rÎ|  d¡ nd}|  d¡ |   |j¡ |  d	¡ d S )
Nr2   Fz, Tr   )r‚   rƒ   r„   z**r3   )	r   Úfuncr   r•   r‡   rˆ   r‰   rŠ   r‹   )r   r)   r   rb   r   r   r   Ú_CallÌ  s6    
   
 
zUnparser._Callc             C   s0   |   |j¡ |  d¡ |   |j¡ |  d¡ d S )NrØ   rÙ   )r   r0   r   Úslice)r   r)   r   r   r   Ú
_Subscriptå  s    
zUnparser._Subscriptc             C   s   |   d¡ |  |j¡ d S )Nr„   )r   r   r0   )r   r)   r   r   r   Ú_Starredë  s    
zUnparser._Starredc             C   s   |   d¡ d S )Nz...)r   )r   r)   r   r   r   Ú	_Ellipsisð  s    zUnparser._Ellipsisc             C   s   |   |j¡ d S )N)r   r0   )r   r)   r   r   r   Ú_Indexó  s    zUnparser._Indexc             C   sN   |j r|  |j ¡ |  d¡ |jr.|  |j¡ |jrJ|  d¡ |  |j¡ d S )Nr    )Úlowerr   r   ÚupperÚstep)r   r)   r   r   r   Ú_Sliceö  s    

zUnparser._Slicec                s   t ‡ fdd„ˆ j|jƒ d S )Nc                  s
   ˆ   d¡S )Nz, )r   r   )r   r   r   r6     r7   z$Unparser._ExtSlice.<locals>.<lambda>)r   r   Zdims)r   r)   r   )r   r   Ú	_ExtSlice   s    zUnparser._ExtSlicec             C   s,   |   |j¡ |jr(|   d¡ |  |j¡ d S )Nz: )r   ÚargrM   r   )r   r)   r   r   r   Ú_arg  s    
zUnparser._argc       	      C   sZ  d}t |dg ƒ|j }d gt|ƒt|jƒ  |j }xxtt||ƒdƒD ]d\}}|\}}|r`d}n
|  d¡ |  |¡ |rŒ|  d¡ |  |¡ |tt |ddƒƒkrF|  d¡ qFW |jsÂt |d	dƒrX|rÌd}n
|  d¡ |  d
¡ |jrXt	|jdƒr(|  |jj
¡ |jjrX|  d¡ |  |jj¡ n0|  |j¡ t |dd ƒrX|  d¡ |  |j¡ t |d	dƒrÀxXt|j|jƒD ]F\}}|rŠd}n
|  d¡ |  |¡f |rv|  d¡ |  |¡ qvW |jrV|rÔd}n
|  d¡ t	|jdƒr"|  d|jj
 ¡ |jjrV|  d¡ |  |jj¡ n4|  d|j ¡ t |dd ƒrV|  d¡ |  |j¡ d S )NTZposonlyargsr   Fz, ú=r   z, /Ú
kwonlyargsr„   r5  z: Úvarargannotationz**Úkwargannotation)r&   r•   r|   ÚdefaultsÚ	enumeraterë   r   r   Úvarargr   r5  rM   r9  r8  Úkw_defaultsÚkwargr:  )	r   r)   ÚfirstZall_argsr;  ÚindexÚelementsrŽ   Údr   r   r   Ú
_arguments  sf     



 




 

 



zUnparser._argumentsc             C   s<   |j d kr|  d¡ n|  |j ¡ |  d¡ |  |j¡ d S )Nz**r7  )r5  r   r   r0   )r   r)   r   r   r   Ú_keywordE  s
    

zUnparser._keywordc             C   sD   |   d¡ |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nr2   zlambda z: r3   )r   r   r•   r+   )r   r)   r   r   r   Ú_LambdaN  s    


zUnparser._Lambdac             C   s&   |   |j¡ |jr"|   d|j ¡ d S )Nz as )r   r;   Zasname)r   r)   r   r   r   Ú_aliasV  s    zUnparser._aliasc             C   s,   |   |j¡ |jr(|  d¡ |   |j¡ d S )Nz as )r   rž   rŸ   r   )r   r)   r   r   r   Ú	_withitem[  s    
zUnparser._withitemN)r   )F)er(   Ú
__module__Ú__qualname__Ú__doc__rˆ   Ústdoutr   r   r   r!   r"   r   r-   r.   r/   r1   r5   r9   rC   rE   rI   rN   rP   rR   rT   rV   rW   rZ   r]   rc   rd   re   rg   ri   rj   rr   rz   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ä   rå   ræ   rí   rî   rö   rú   rG   r  r  r   rK   ÚAndÚOrr#  r$  r(  r*  r,  r-  r.  r/  r3  r4  r6  rD  rE  rF  rG  rH  r   r   r   r   r      sÀ   


'
		




:	r   c          	   C   s   t jrPt| dƒ}t |j¡d }W d Q R X t| d|d}| ¡ }W d Q R X nt| dƒ}| ¡ }W d Q R X t|| dtj	dd}t
||ƒ d S )NÚrbr   Úr)ÚencodingÚexecT)Údont_inherit)r   rl   ÚopenÚtokenizeÚdetect_encodingÚreadlineÚreadÚcompilerK   ÚPyCF_ONLY_ASTr   )ÚfilenameÚoutputZpyfilerQ  Úsourcer   r   r   r   Ú	roundtripa  s    r^  c             C   sÖ   ydd„ t  | ¡D ƒ}W n& tk
r>   td|  tjd Y n”X x|D ]ˆ}t j | |¡}t j |¡rºt	ƒ }td| ƒ yt
||ƒ W qÎ tk
r¶ } ztdt|ƒ ƒ W d d }~X Y qÎX qFt j |¡rFt|ƒ qFW d S )Nc             S   s   g | ]}|  d ¡r|‘qS )z.py)rÖ   )r<   r=   r   r   r   ú
<listcomp>q  s    ztestdir.<locals>.<listcomp>zDirectory not readable: %s)r   z
Testing %sz$  Failed to compile, exception is %s)ÚosÚlistdirÚOSErrorr   rˆ   ÚstderrÚpathÚjoinÚisfiler   r^  Ú	Exceptionr¤   ÚisdirÚtestdir)rŽ   r8   r=   Úfullnamer\  rb   r   r   r   ri  o  s    
$ri  c             C   sF   | d dkr,x4| dd … D ]}t |ƒ qW nx| D ]}t|ƒ q2W d S )Nr   z	--testdirr   )ri  r^  )r•   rŽ   r   r   r   Úmain  s
    
rk  Ú__main__)rK  r:   r   r   r   rˆ   rK   r`  rU  r   r¤   Ú
float_infoÚ
max_10_exprÎ   r   r   rL  r^  ri  rk  r(   Úargvr   r   r   r   Ú<module>   s*         L