B
    18™\ªN  ã               @   s’   d Z ddlZddlZddlZddlZddl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>é    NZ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	   úT/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/parser/unparse.pyÚ
interleave   s    
r   c               @   sè  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„ Z0dYdZ„ Z1d[d\„ Z2d]d^„ Z3d_d`„ Z4dadb„ Z5dcdd„ Z6dedf„ Z7dgdh„ Z8didj„ Z9dkdl„ Z:dmdn„ Z;dodp„ Z<dqdr„ Z=dsdt„ Z>dudv„ Z?dwdx„ Z@dydz„ ZAd{d|„ ZBd}d~dd€dœZCd‚dƒ„ ZDdd€d„d…d†d‡dˆd‰dŠd‹dŒddŽdœZEdd‘„ ZFd’d“d”d•d–d—d˜d™dšd›dœœ
ZGddž„ ZHeIjJdŸeIjKd iZLd¡d¢„ ZMd£d¤„ ZNd¥d¦„ ZOd§d¨„ ZPd©dª„ ZQd«d¬„ ZRd­d®„ ZSd¯d°„ ZTd±d²„ ZUd³d´„ ZVdµd¶„ ZWd·d¸„ ZXd¹dº„ ZYd»d¼„ ZZd½d¾„ Z[d¿S )ÁÚUnparserzŽMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. c             C   s2   || _ d| _|  |¡ td| j d | j  ¡  dS )zTUnparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file.r   Ú )ÚfileN)r   Ú_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  |¡ dS )z+Append a piece of text to the current line.N)r   r   )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
   Úenter/   s    
zUnparser.enterc             C   s   |  j d8  _ dS )zDecrease the indentation level.r   N)r   )r   r	   r	   r
   Úleave4   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   8   s    

zUnparser.dispatchc             C   s   x|j D ]}|  |¡ qW d S )N)Úbodyr   )r   r   Ústmtr	   r	   r
   Ú_ModuleI   s    zUnparser._Modulec             C   s   |   ¡  |  |j¡ d S )N)r   r   Úvalue)r   r   r	   r	   r
   Ú_ExprN   s    zUnparser._Exprc                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzimport c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   Ú<lambda>T   ó    z"Unparser._Import.<locals>.<lambda>)r   r   r   Únames)r   r#   r	   )r   r
   Ú_ImportR   s    
zUnparser._Importc                sR   ˆ   d¡ ˆ  d|j ¡ |jr,ˆ  |j¡ ˆ  d¡ t‡ fdd„ˆ j|jƒ d S )Nzfrom Ú.z import c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   \   r+   z&Unparser._ImportFrom.<locals>.<lambda>)r   r   ÚlevelÚmoduler   r   r,   )r   r#   r	   )r   r
   Ú_ImportFromV   s    

zUnparser._ImportFromc             C   s<   |   ¡  x"|jD ]}|  |¡ |  d¡ qW |  |j¡ d S )Nz = )r   Útargetsr   r   r(   )r   r#   Útargetr	   r	   r
   Ú_Assign^   s
    
zUnparser._Assignc             C   sB   |   ¡  |  |j¡ |  d| j|jjj  d ¡ |  |j¡ d S )Nú z= )	r   r   r3   r   ÚbinopÚopr!   r"   r(   )r   r#   r	   r	   r
   Ú
_AugAssigne   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 )Nú(ú)z: z = )
r   Zsimpler   r3   ÚastÚNamer   r   Ú
annotationr(   )r   r#   r	   r	   r
   Ú
_AnnAssignk   s    



zUnparser._AnnAssignc             C   s*   |   d¡ |jr&|  d¡ |  |j¡ d S )NÚreturnr5   )r   r(   r   r   )r   r#   r	   r	   r
   Ú_Returnx   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
   r*   ‰   r+   z"Unparser._Delete.<locals>.<lambda>)r   r   r   r2   )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                s&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzglobal c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   ”   r+   z"Unparser._Global.<locals>.<lambda>)r   r   r   r,   )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
   r*   ˜   r+   z$Unparser._Nonlocal.<locals>.<lambda>)r   r   r   r,   )r   r#   r	   )r   r
   Ú	_Nonlocal–   s    
zUnparser._Nonlocalc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr9   Úawaitr5   r:   )r   r(   r   )r   r#   r	   r	   r
   Ú_Awaitš   s    


zUnparser._Awaitc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr9   Úyieldr5   r:   )r   r(   r   )r   r#   r	   r	   r
   Ú_Yield¢   s    


zUnparser._Yieldc             C   s>   |   d¡ |   d¡ |jr0|   d¡ |  |j¡ |   d¡ d S )Nr9   z
yield fromr5   r:   )r   r(   r   )r   r#   r	   r	   r
   Ú
_YieldFromª   s    


zUnparser._YieldFromc             C   sT   |   d¡ |js|jrt‚d S |  d¡ |  |j¡ |jrP|  d¡ |  |j¡ d S )NÚraiser5   z from )r   ÚexcÚcauseÚAssertionErrorr   r   )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ÚorelseZ	finalbody)r   r#   Úexr	   r	   r
   Ú_Try½   s     


zUnparser._Tryc             C   sb   |   d¡ |jr&|  d¡ |  |j¡ |jrB|  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  d S )NÚexceptr5   z as )r   Útyper   r   Únamer   r%   r   )r   r#   r	   r	   r
   Ú_ExceptHandlerÏ   s    


zUnparser._ExceptHandlerc             C   sÒ   |   d¡ x"|jD ]}|  d¡ |  |¡ qW |  d|j ¡ |   d¡ d}x,|jD ]"}|rh|   d¡ nd}|  |¡ qTW x,|jD ]"}|r–|   d¡ nd}|  |¡ q‚W |   d¡ |  ¡  |  |j¡ |  	¡  d S )	Nr   ú@zclass r9   Fz, Tr:   )
r   Údecorator_listr   r   r`   ÚbasesÚkeywordsr   r%   r   )r   r#   ÚdecoÚcommaÚer	   r	   r
   Ú	_ClassDefÛ   s*    


  
zUnparser._ClassDefc             C   s   |   |d¡ d S )NÚdef)Ú_Unparser__FunctionDef_helper)r   r#   r	   r	   r
   Ú_FunctionDefñ   s    zUnparser._FunctionDefc             C   s   |   |d¡ d S )Nz	async def)rk   )r   r#   r	   r	   r
   Ú_AsyncFunctionDefô   s    zUnparser._AsyncFunctionDefc             C   sœ   |   d¡ x"|jD ]}|  d¡ |  |¡ qW |d |j d }|  |¡ |  |j¡ |   d¡ |jr||   d¡ |  |j¡ |  ¡  |  |j¡ |  	¡  d S )Nr   rb   r5   r9   r:   z -> )
r   rc   r   r   r`   ÚargsZreturnsr   r%   r   )r   r#   Zfill_suffixrf   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
   Ú_For  s    zUnparser._Forc             C   s   |   d|¡ d S )Nz
async for )ro   )r   r#   r	   r	   r
   Ú	_AsyncFor
  s    zUnparser._AsyncForc             C   sx   |   |¡ |  |j¡ |  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jrt|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nz in rX   )	r   r   r3   r   r   r   r%   r   r[   )r   r   r#   r	   r	   r
   Z__For_helper  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 rX   )r   r   rH   r   r%   r   r[   Úlenr   r;   ÚIf)r   r#   r	   r	   r
   Ú_If  s$    



zUnparser._Ifc             C   sb   |   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr^|   d¡ |  ¡  |  |j¡ |  ¡  d S )Nzwhile rX   )r   r   rH   r   r%   r   r[   )r   r#   r	   r	   r
   Ú_While1  s    

zUnparser._Whilec                sB   ˆ   d¡ t‡ fdd„ˆ j|jƒ ˆ  ¡  ˆ  |j¡ ˆ  ¡  d S )Nzwith c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   ?  r+   z Unparser._With.<locals>.<lambda>)r   r   r   Úitemsr   r%   r   )r   r#   r	   )r   r
   Ú_With=  s
    
zUnparser._Withc                sB   ˆ   d¡ t‡ fdd„ˆ j|jƒ ˆ  ¡  ˆ  |j¡ ˆ  ¡  d S )Nzasync with c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   F  r+   z%Unparser._AsyncWith.<locals>.<lambda>)r   r   r   rv   r   r%   r   )r   r#   r	   )r   r
   Ú
_AsyncWithD  s
    
zUnparser._AsyncWithc             C   s   |   t|jƒ¡ d S )N)r   ÚreprÚs)r   r#   r	   r	   r
   Ú_BytesL  s    zUnparser._Bytesc             C   s   |   t|jƒ¡ d S )N)r   ry   rz   )r   r   r	   r	   r
   Ú_StrO  s    zUnparser._Strc             C   s6   |   d¡ t ¡ }|  ||j ¡ |   t| ¡ ƒ¡ d S )Nr   )r   ÚioÚStringIOÚ_fstring_JoinedStrry   Úgetvalue)r   r#   Ústringr	   r	   r
   Ú
_JoinedStrR  s    
zUnparser._JoinedStrc             C   s6   |   d¡ t ¡ }|  ||j ¡ |   t| ¡ ƒ¡ d S )Nr   )r   r}   r~   Ú_fstring_FormattedValuery   r€   )r   r#   r   r	   r	   r
   Ú_FormattedValueX  s    
zUnparser._FormattedValuec             C   s2   x,|j D ]"}t| dt|ƒj ƒ}|||ƒ qW d S )NÚ	_fstring_)Úvaluesr    r_   r"   )r   r#   r   r(   r$   r	   r	   r
   r   ^  s    zUnparser._fstring_JoinedStrc             C   s"   |j  dd¡ dd¡}||ƒ d S )Nú{z{{ú}z}})rz   Úreplace)r   r#   r   r(   r	   r	   r
   Ú_fstring_Strc  s    zUnparser._fstring_Strc             C   s2   t |jtƒst‚|j dd¡ dd¡}||ƒ d S )Nr‡   z{{rˆ   z}})r   r(   ÚstrrU   r‰   )r   r#   r   r(   r	   r	   r
   Ú_fstring_Constantg  s    zUnparser._fstring_Constantc             C   s®   |dƒ t  ¡ }t|j|ƒ | ¡  d¡}| d¡r<|dƒ ||ƒ |jdkrrt|jƒ}|dksdt	‚|d|› ƒ |j
r¢|dƒ t| dt|j
ƒj ƒ}||j
|ƒ |d	ƒ d S )
Nr‡   r   r5   éÿÿÿÿZsraú!r   r…   rˆ   )r}   r~   r   r(   r€   ÚrstripÚ
startswithÚ
conversionÚchrrU   Úformat_specr    r_   r"   )r   r#   r   Úexprr‘   r$   r	   r	   r
   rƒ   l  s     


z Unparser._fstring_FormattedValuec             C   s   |   |j¡ d S )N)r   Úid)r   r#   r	   r	   r
   Ú_Name~  s    zUnparser._Namec             C   s8   t |ttfƒr&|  t|ƒ dt¡¡ n|  t|ƒ¡ d S )NÚinf)r   ÚfloatÚcomplexr   ry   r‰   ÚINFSTR)r   r(   r	   r	   r
   Ú_write_constant  s    zUnparser._write_constantc                sr   |j }t|tƒrbˆ  d¡ t|ƒdkr@ˆ  |d ¡ ˆ  d¡ nt‡ fdd„ˆ j|ƒ ˆ  d¡ nˆ  |j ¡ d S )Nr9   r   r   ú,c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*     r+   z$Unparser._Constant.<locals>.<lambda>r:   )r(   r   Útupler   rr   r›   r   )r   r#   r(   r	   )r   r
   Ú	_Constant‡  s    

zUnparser._Constantc             C   s   |   t|jƒ¡ d S )N)r   ry   r(   )r   r#   r	   r	   r
   Ú_NameConstant”  s    zUnparser._NameConstantc             C   s   |   t|jƒ dt¡¡ d S )Nr—   )r   ry   Únr‰   rš   )r   r#   r	   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
   r*     r+   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 )Nr9   r:   )r   r   r¦   r§   )r   r#   r¨   r	   r	   r
   Ú_GeneratorExp§  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
   Ú_SetComp®  s
    
zUnparser._SetCompc             C   sT   |   d¡ |  |j¡ |   d¡ |  |j¡ x|jD ]}|  |¡ q4W |   d¡ d S )Nr‡   z: rˆ   )r   r   Úkeyr(   r§   )r   r#   r¨   r	   r	   r
   Ú	_DictCompµ  s    

zUnparser._DictCompc             C   sf   |j r|  d¡ n
|  d¡ |  |j¡ |  d¡ |  |j¡ x"|jD ]}|  d¡ |  |¡ qFW d S )Nz async for z for z in z if )Zis_asyncr   r   r3   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 )Nr9   z if z else r:   )r   r   r%   rH   r[   )r   r#   r	   r	   r
   Ú_IfExpÊ  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
   r*   Ö  r+   zUnparser._Set.<locals>.<lambda>rˆ   )r¤   rU   r   r   r   )r   r#   r	   )r   r
   Ú_SetÓ  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   )ÚkÚv)r   r	   r
   Úwrite_key_value_pairÛ  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
   r*   é  r+   z Unparser._Dict.<locals>.<lambda>rˆ   )r   r   ÚzipÚkeysr†   )r   r#   rµ   r	   )r   r³   r
   Ú_DictÙ  s
    
	zUnparser._Dictc                s^   ˆ   d¡ t|jƒdkr8|jd }ˆ  |¡ ˆ   d¡ nt‡ fdd„ˆ j|jƒ ˆ   d¡ d S )Nr9   r   r   rœ   c                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   ó  r+   z!Unparser._Tuple.<locals>.<lambda>r:   )r   rr   r¤   r   r   )r   r#   r¦   r	   )r   r
   Ú_Tupleì  s    


zUnparser._Tupleú~Únotú+ú-)ÚInvertÚNotÚUAddÚUSubc             C   sD   |   d¡ |   | j|jjj ¡ |   d¡ |  |j¡ |   d¡ d S )Nr9   r5   r:   )r   Úunopr7   r!   r"   r   Úoperand)r   r#   r	   r	   r
   Ú_UnaryOp÷  s
    

zUnparser._UnaryOpÚ*rb   ú/ú%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 )Nr9   r5   r:   )r   r   Úleftr6   r7   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 )Nr9   r5   r:   )	r   r   rØ   r¶   ÚopsZcomparatorsÚcmpopsr!   r"   )r   r#   Úorh   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 )Nr9   z %s c                  s
   ˆ  ˆ ¡S )N)r   r	   )rz   r   r	   r
   r*     r+   z"Unparser._BoolOp.<locals>.<lambda>r:   )r   Úboolopsr7   r!   r   r   r†   )r   r#   r	   )rz   r   r
   Ú_BoolOp  s    
zUnparser._BoolOpc             C   sh   |   |j¡ t|jtjƒr(t|jjtƒsDt|jtjƒrNt|jjtƒrN|  d¡ |  d¡ |  |j	¡ d S )Nr5   r.   )
r   r(   r   r;   ÚNumr    ÚintÚConstantr   Ú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 |  d¡ d S )Nr9   Fz, Tr:   )r   Úfuncr   rn   re   )r   r#   rg   rh   r	   r	   r
   Ú_Call$  s    
  zUnparser._Callc             C   s0   |   |j¡ |  d¡ |   |j¡ |  d¡ d S )Nr¢   r£   )r   r(   r   Úslice)r   r#   r	   r	   r
   Ú
_Subscript2  s    
zUnparser._Subscriptc             C   s   |   d¡ |  |j¡ d S )NrÅ   )r   r   r(   )r   r#   r	   r	   r
   Ú_Starred8  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   r(   )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
   Ú_SliceC  s    

zUnparser._Slicec                s   t ‡ fdd„ˆ j|jƒ d S )Nc                  s
   ˆ   d¡S )Nz, )r   r	   )r   r	   r
   r*   N  r+   z$Unparser._ExtSlice.<locals>.<lambda>)r   r   Zdims)r   r#   r	   )r   r
   Ú	_ExtSliceM  s    zUnparser._ExtSlicec             C   s,   |   |j¡ |jr(|   d¡ |  |j¡ d S )Nz: )r   Úargr=   r   )r   r#   r	   r	   r
   Ú_argQ  s    
zUnparser._argc             C   s„  d}d gt |jƒt |jƒ  |j }xNt|j|ƒD ]>\}}|rDd}n
|  d¡ |  |¡ |r2|  d¡ |  |¡ q2W |js€|jrÒ|rŠd}n
|  d¡ |  d¡ |jrÒ|  |jj¡ |jj	rÒ|  d¡ |  |jj	¡ |jr.xRt|j|j
ƒD ]@\}}|rüd}n
|  d¡ |  |¡f |rê|  d¡ |  |¡ qêW |jr€|rBd}n
|  d¡ |  d|jj ¡ |jj	r€|  d¡ |  |jj	¡ d S )NTFz, ú=rÅ   z: z**)rr   rn   Údefaultsr¶   r   r   ÚvarargÚ
kwonlyargsr  r=   Úkw_defaultsÚkwarg)r   r#   Úfirstr  ÚaÚdr	   r	   r
   Ú
_argumentsX  sJ      


 


 

 


zUnparser._argumentsc             C   s<   |j d kr|  d¡ n|  |j ¡ |  d¡ |  |j¡ d S )Nz**r  )r  r   r   r(   )r   r#   r	   r	   r
   Ú_keyword‚  s
    

zUnparser._keywordc             C   sD   |   d¡ |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nr9   zlambda z: r:   )r   r   rn   r%   )r   r#   r	   r	   r
   Ú_LambdaŠ  s    


zUnparser._Lambdac             C   s&   |   |j¡ |jr"|   d|j ¡ d S )Nz as )r   r`   Zasname)r   r#   r	   r	   r
   Ú_alias’  s    zUnparser._aliasc             C   s,   |   |j¡ |jr(|  d¡ |   |j¡ d S )Nz as )r   Zcontext_exprZoptional_varsr   )r   r#   r	   r	   r
   Ú	_withitem—  s    
zUnparser._withitemN)r   )\r"   Ú
__module__Ú__qualname__Ú__doc__ÚsysÚstdoutr   r   r   r   r   r   r'   r)   r-   r1   r4   r8   r>   r@   rB   rD   rF   rG   rJ   rK   rL   rN   rP   rQ   rV   r]   ra   ri   rl   rm   rk   rp   rq   ro   rt   ru   rw   rx   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Ä   r6   rÚ   rê   rì   r;   ÚAndÚOrrï   rð   rõ   r÷   rù   rú   rû   rü   r   r  r  r  r  r  r  r  r	   r	   r	   r
   r      s®   	
		



*r   c          	   C   sf   t | dƒ}t |j¡d }W d Q R X t | d|d}| ¡ }W d Q R X t|| dtjƒ}t||ƒ d S )NÚrbr   Úr)ÚencodingÚexec)	ÚopenÚtokenizeÚdetect_encodingÚreadlineÚreadÚcompiler;   ÚPyCF_ONLY_ASTr   )ÚfilenameÚoutputÚpyfiler  Úsourcer   r	   r	   r
   Ú	roundtrip  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)Úendswith)Ú.0r    r	   r	   r
   ú
<listcomp>©  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~   r(  Ú	Exceptionry   ÚisdirÚtestdir)r  r,   r    Úfullnamer%  rh   r	   r	   r
   r5  §  s    
$r5  c             C   sF   | d dkr,x4| dd … D ]}t |ƒ qW nx| D ]}t|ƒ q2W d S )Nr   z	--testdirr   )r5  r(  )rn   r  r	   r	   r
   Úmain¹  s
    
r7  Ú__main__)r  r  r;   r  r}   r,  ry   Ú
float_infoÚ
max_10_exprš   r   r   r  r(  r5  r7  r"   Úargvr	   r	   r	   r
   Ú<module>   s$        	
