o
    í@Ëa÷H  ã                   @   s¢   d Z ddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl
Z
ddlZ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rOee
jdd… ƒ dS dS )z~
This code is extracted from the python source tree, and thus under the PSF
License.

Usage: unparse.py <path to source file>
é    N)Úisnumz(1e1000 ** 2)c                 C   sJ   t |ƒ}z|t|ƒƒ W n
 ty   Y dS w |D ]	}| ƒ  ||ƒ qdS )z<Call f on each item in seq, calling inter() in between.
    N)ÚiterÚnextÚStopIteration)ZinterÚfÚseqÚx© r	   ú1/usr/lib/python3/dist-packages/pythran/unparse.pyÚ
interleave   s   ÿ
þr   c                   @   sx  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„ Z6dedfdgdhdiœZ7djdk„ Z8dgdhdldmdndodpdqdrdsdtdudvdwœZ9dxdy„ Z:dzd{d|d}d~dd€dd‚dƒd„œ
Z;d…d†„ Z<e=j>d‡e=j?dˆiZ@d‰dŠ„ ZAd‹dŒ„ ZBddŽ„ ZCdd„ ZDd‘d’„ ZEd“d”„ ZFd•d–„ ZGd—d˜„ ZHd™dš„ ZId›dœ„ ZJddž„ ZKdŸd „ ZLd¡d¢„ ZMd£S )¥ÚUnparserzŽMethods in this class recursively traverse an AST and
    output source code for the abstract syntax; original formatting
    is disregarded. c                 C   s<   || _ g | _d| _d| _|  |¡ | j  d¡ | j  ¡  dS )zTUnparser(tree, file=sys.stdout) -> None.
         Print the source for tree to file.r   Ú N)r   Úfuture_importsÚ_indentÚline_markerÚdispatchÚwriteÚflush)ÚselfÚtreeÚfiler	   r	   r
   Ú__init__*   s   
zUnparser.__init__r   c                 C   s&   | j  | jd| j  | ¡ d| _dS )zBIndent a piece of text, according to the current indentation levelz    Ú
N)r   r   r   r   ©r   Útextr	   r	   r
   Úfill5   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   :   s   zUnparser.writec                 C   s   |   d¡ |  jd7  _dS )z(Print ':', and increase the indentation.ú:é   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
   ÚleaveC   s   zUnparser.leavec           	   	   C   sº   t  |tj¡D ]5}tƒ }|jD ]}| j}t ¡ | _|  	|¡ | 
| j ¡ ¡ || _q|jj|Ž }|  t t |d¡¡¡ qt|tƒrN|D ]}|  	|¡ qDdS t| d|jj ƒ}||ƒ dS )z:Dispatcher function, dispatching tree type T to method _T.NÚ_)ÚmetadataÚgetÚopenmpZOMPDirectiveÚlistÚdepsr   ÚioÚStringIOr   ÚappendÚgetvalueÚsÚformatÚ_ExprÚastZExprZConstantÚ
isinstanceÚgetattrÚ	__class__Ú__name__)	r   r   Zompr&   ZdepZold_fileZ	directiveÚtZmethr	   r	   r
   r   G   s    



zUnparser.dispatchc                 C   sL   d}|j D ]}|  |¡ t|ƒtju r|jdkrd}q|r$|  d¡ d S d S )NFr   Tz
__init__())Úbodyr   Útyper.   ZFunctionDefÚnamer   )r   r   Zhas_initZstmtr	   r	   r
   Ú_Modulec   s   

ÿ€ÿzUnparser._Modulec                 C   s\   |j |j kr|  d |j ¡¡ |  |j¡ |  d¡ d S |  d¡ |  |j¡ |  d¡ d S )Nz|[{}]=ú|)Úindexr   r,   r   Z	containee)r   Úcor	   r	   r
   Ú_ContainerOfr   s   
zUnparser._ContainerOfc                 C   ó   |   d¡ d S )Nz<unbound-value>©r   )r   Zuir	   r	   r
   Ú_UnboundValueType|   ó   zUnparser._UnboundValueTypec                 C   s   |   ¡  |  |j¡ d S ©N)r   r   Úvalue©r   r   r	   r	   r
   r-   €   s   zUnparser._Exprc                    ó&   ˆ   d¡ t‡ fdd„ˆ j|jƒ d S )Nzimport c                      ó
   ˆ   d¡S ©Nú, r=   r	   r   r	   r
   Ú<lambda>†   ó   
 z"Unparser._Import.<locals>.<lambda>)r   r   r   Únames©r   r3   r	   r   r
   Ú_Import„   ó   
zUnparser._Importc                    sz   |j r|j dkrˆ j dd„ |jD ƒ¡ ˆ  d¡ ˆ  d|j ¡ |j r*ˆ  |j ¡ ˆ  d¡ t‡ fdd„ˆ j|jƒ d S )	NZ
__future__c                 s   s    | ]}|j V  qd S r@   )r6   ©Ú.0Únr	   r	   r
   Ú	<genexpr>‹   s   € z'Unparser._ImportFrom.<locals>.<genexpr>úfrom Ú.z import c                      rD   rE   r=   r	   r   r	   r
   rG   ’   rH   z&Unparser._ImportFrom.<locals>.<lambda>)	Úmoduler   ÚextendrI   r   r   Úlevelr   r   rJ   r	   r   r
   Ú_ImportFromˆ   s   

zUnparser._ImportFromc                 C   s8   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ d S )Nz = )r   Útargetsr   r   rA   )r   r3   Útargetr	   r	   r
   Ú_Assign”   s
   

zUnparser._Assignc                 C   sB   |   ¡  |  |j¡ |  d| j|jjj  d ¡ |  |j¡ d S )Nú z= )	r   r   rX   r   ÚbinopÚopr1   r2   rA   rJ   r	   r	   r
   Ú
_AugAssign›   s   zUnparser._AugAssignc                 C   s.   |   d¡ |jr|  d¡ |  |j¡ d S d S )NÚreturnrZ   )r   rA   r   r   rJ   r	   r	   r
   Ú_Return¡   s
   

þzUnparser._Returnc                 C   r<   )NÚpass©r   rJ   r	   r	   r
   Ú_Pass§   r?   zUnparser._Passc                 C   r<   )NÚbreakra   rJ   r	   r	   r
   Ú_Breakª   r?   zUnparser._Breakc                 C   r<   )NÚcontinuera   rJ   r	   r	   r
   Ú	_Continue­   r?   zUnparser._Continuec                    rC   )Nzdel c                      rD   rE   r=   r	   r   r	   r
   rG   ²   rH   z"Unparser._Delete.<locals>.<lambda>)r   r   r   rW   rJ   r	   r   r
   Ú_Delete°   rL   zUnparser._Deletec                 C   s:   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ d S d S )Nzassert rF   )r   r   ÚtestÚmsgr   rJ   r	   r	   r
   Ú_Assert´   s   

þzUnparser._Assertc                 C   sV   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |jr)|  d¡ |  |j¡ d S d S )Nzexec ú in rF   )r   r   r4   Úglobalsr   ÚlocalsrJ   r	   r	   r
   Ú_Exec»   s   


þzUnparser._Execc                 C   s   |   d |j¡¡ d S )Nz{})r   r,   rA   rJ   r	   r	   r
   Ú_NameConstantÅ   s   zUnparser._NameConstantc                 C   s|   |   d¡ d}|  d¡ |jD ]}|r|  d¡ nd}|  |¡ q|jr/|  d¡ |  |j¡ |js7|  d¡ |  d¡ d S )	NÚprintFú(rF   Tz, file=z, end=''ú))r   r   Úvaluesr   ÚdestÚnl)r   r3   Zdo_commaÚer	   r	   r
   Ú_PrintÈ   s   




zUnparser._Printc                    rC   )Nzglobal c                      rD   rE   r=   r	   r   r	   r
   rG   Ü   rH   z"Unparser._Global.<locals>.<lambda>)r   r   r   rI   rJ   r	   r   r
   Ú_GlobalÚ   rL   zUnparser._Globalc                 C   s>   |   d¡ |   d¡ |jr|   d¡ |  |j¡ |   d¡ d S )Nrq   ÚyieldrZ   rr   )r   rA   r   rJ   r	   r	   r
   Ú_YieldÞ   s   


zUnparser._Yieldc                 C   s@   |   d¡ |jr|  |j¡ |jr|  d¡ |  |j¡ d S d S )Nzraise rQ   )r   Úexcr   Úcauser   rJ   r	   r	   r
   Ú_Raiseæ   s   

þzUnparser._Raisec                 C   sp   |   d¡ |  ¡  |  |j¡ |  ¡  |jD ]}|  |¡ q|jr6|   d¡ |  ¡  |  |j¡ |  ¡  d S d S )NÚtryÚelse)r   r   r   r4   r    ÚhandlersÚorelse)r   r3   Úexr	   r	   r
   Ú_Tryî   s   


üzUnparser._Tryc                 C   sb   |   d¡ |jr|  d¡ |  |j¡ |jr!|  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  d S )NÚexceptrZ   ú as )r   r5   r   r   r6   r   r4   r    rJ   r	   r	   r
   Ú_ExceptHandlerü   s   


zUnparser._ExceptHandlerc                 C   sŠ   |j D ]}|  d¡ |  |¡ q|  d|j ¡ |jr5|  d¡ |jD ]}|  |¡ |  d¡ q#|  d¡ |  ¡  |  |j¡ |  ¡  d S )Nú@zclass rq   rF   rr   )	Údecorator_listr   r   r6   Úbasesr   r   r4   r    )r   r3   ÚdecoÚar	   r	   r
   Ú	_ClassDef  s   





zUnparser._ClassDefc                 C   sj   |j D ]}|  d¡ |  |¡ q|  d|j d ¡ |  |j¡ |  d¡ |  ¡  |  |j¡ |  ¡  d S )Nr‡   zdef rq   rr   )	rˆ   r   r   r6   Úargsr   r   r4   r    )r   r3   rŠ   r	   r	   r
   Ú_FunctionDef  s   


zUnparser._FunctionDefc                 C   s|   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr<|   d¡ |  ¡  |  |j¡ |  ¡  d S d S )Nzfor rk   r   )	r   r   rX   r   r   r   r4   r    r   rJ   r	   r	   r
   Ú_For"  s   


üzUnparser._Forc                 C   sî   |   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr]t|jƒdkr]t|jd t	j
ƒr]|jd }|   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr]t|jƒdkr]t|jd t	j
ƒs,|jru|   d¡ |  ¡  |  |j¡ |  ¡  d S d S )Nzif r   r   zelif r   )r   r   rh   r   r4   r    r   Úlenr/   r.   ZIfrJ   r	   r	   r
   Ú_If0  s.   
ÿ

ùÿ	
üzUnparser._Ifc                 C   sf   |   d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  |jr1|   d¡ |  ¡  |  |j¡ |  ¡  d S d S )Nzwhile r   )r   r   rh   r   r4   r    r   rJ   r	   r	   r
   Ú_WhileF  s   

üzUnparser._Whilec                 C   sR   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |  ¡  |  |j¡ |  ¡  d S )Nzwith r…   )r   r   Úcontext_exprÚoptional_varsr   r   r4   r    rJ   r	   r	   r
   Ú_WithR  s   

zUnparser._Withc                 C   sJ   d| j vr|  t|jƒ¡ d S t|jtƒr!|  dt|jƒ ¡ d S J dƒ‚)NZunicode_literalsÚbFzshouldn't get here)r   r   ÚreprrA   r/   ÚstrrB   r	   r	   r
   Ú_Str]  s
   
zUnparser._Strc                 C   ó   |   |j¡ d S r@   )r   ÚidrJ   r	   r	   r
   Ú_Nameh  ó   zUnparser._Namec                 C   s$   |   d¡ |  |j¡ |   d¡ d S )Nú`©r   r   rA   rJ   r	   r	   r
   Ú_Reprk  s   
zUnparser._Reprc                 C   sL   t |jƒ}| d¡r|  d¡ |  | dt¡¡ | d¡r$|  d¡ d S d S )Nú-rq   Úinfrr   )r—   rA   Ú
startswithr   ÚreplaceÚINFSTR)r   r3   Zrepr_nr	   r	   r
   Ú_Nump  s   



ÿzUnparser._Numc                 C   s:   t |tƒr
|  |¡S |d u st |tƒr|  |¡S |  |¡S r@   )r/   r˜   r™   Úboolro   r¦   rJ   r	   r	   r
   Ú	_Constantz  s
   



zUnparser._Constantc                    s0   ˆ   d¡ t‡ fdd„ˆ j|jƒ ˆ   d¡ d S )Nú[c                      rD   rE   r=   r	   r   r	   r
   rG   „  rH   z Unparser._List.<locals>.<lambda>ú])r   r   r   ÚeltsrJ   r	   r   r
   Ú_List‚  s   
zUnparser._Listc                 C   ó:   |   d¡ |  |j¡ |jD ]}|  |¡ q|   d¡ d S ©Nr©   rª   ©r   r   ÚeltÚ
generators©r   r3   Úgenr	   r	   r
   Ú	_ListComp‡  ó
   

zUnparser._ListCompc                 C   r­   )Nrq   rr   r¯   r²   r	   r	   r
   Ú_GeneratorExpŽ  rµ   zUnparser._GeneratorExpc                 C   r­   )Nú{ú}r¯   r²   r	   r	   r
   Ú_SetComp•  rµ   zUnparser._SetCompc                 C   sP   |   d¡ |  |j¡ |   d¡ |  |j¡ |jD ]}|  |¡ q|   d¡ d S )Nr·   ú: r¸   )r   r   ÚkeyrA   r±   r²   r	   r	   r
   Ú	_DictCompœ  ó   


zUnparser._DictCompc                 C   sP   |   d¡ |  |j¡ |   d¡ |  |j¡ |jD ]}|   d¡ |  |¡ qd S )Nz for rk   ú if )r   r   rX   r   Úifs)r   r3   Z	if_clauser	   r	   r
   Ú_comprehension¥  s   



þzUnparser._comprehensionc                 C   sP   |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nrq   r¾   z else rr   )r   r   r4   rh   r   rJ   r	   r	   r
   Ú_IfExp®  r½   zUnparser._IfExpc                    s:   |j sJ ‚ˆ  d¡ t‡ fdd„ˆ j|j ƒ ˆ  d¡ d S )Nr·   c                      rD   rE   r=   r	   r   r	   r
   rG   º  rH   zUnparser._Set.<locals>.<lambda>r¸   )r«   r   r   r   rJ   r	   r   r
   Ú_Set·  s   

zUnparser._Setc                    sB   ˆ   d¡ ‡ fdd„}t‡ fdd„|t|j|jƒƒ ˆ   d¡ d S )Nr·   c                    s*   | \}}ˆ   |¡ ˆ  d¡ ˆ   |¡ d S )Nrº   )r   r   )ZpairÚkÚvr   r	   r
   Ú
write_pairÀ  s   

z"Unparser._Dict.<locals>.write_pairc                      rD   rE   r=   r	   r   r	   r
   rG   Å  rH   z Unparser._Dict.<locals>.<lambda>r¸   )r   r   ÚzipÚkeysrs   )r   r3   rÅ   r	   r   r
   Ú_Dict½  s   
zUnparser._Dictc                    s\   ˆ   d¡ t|jƒdkr|j\}ˆ  |¡ ˆ   d¡ nt‡ fdd„ˆ j|jƒ ˆ   d¡ d S )Nrq   r   ú,c                      rD   rE   r=   r	   r   r	   r
   rG   Ï  rH   z!Unparser._Tuple.<locals>.<lambda>rr   )r   r   r«   r   r   )r   r3   r°   r	   r   r
   Ú_TupleÈ  s   

zUnparser._Tupleú~Únotú+r¡   )ZInvertZNotZUAddÚUSubc                 C   s~   |   d¡ |   | j|jjj ¡ |   d¡ t|jtjƒr2t|j	ƒr2|   d¡ |  
|j	¡ |   d¡ n|  
|j	¡ |   d¡ d S ©Nrq   rZ   rr   )r   Úunopr\   r1   r2   r/   r.   rÎ   r   Úoperandr   rJ   r	   r	   r
   Ú_UnaryOpÔ  s   


zUnparser._UnaryOpÚ*ú/ú%z<<z>>r8   ú^ú&z//ú**r‡   )ZAddZSubZMultZDivZModZLShiftZRShiftZBitOrZBitXorZBitAndZFloorDivZPowZMatMultc                 C   sN   |   d¡ |  |j¡ |   d| j|jjj  d ¡ |  |j¡ |   d¡ d S rÏ   )r   r   Úleftr[   r\   r1   r2   ÚrightrJ   r	   r	   r
   Ú_BinOpé  s
   
zUnparser._BinOpz==z!=ú<z<=ú>z>=Úiszis notÚinznot in)
ZEqZNotEqZLtZLtEZGtZGtEZIsZIsNotZInZNotInc                 C   sb   |   d¡ |  |j¡ t|j|jƒD ]\}}|   d| j|jj  d ¡ |  |¡ q|   d¡ d S rÏ   )	r   r   rÙ   rÆ   ÚopsÚcomparatorsÚcmpopsr1   r2   )r   r3   Úorv   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 )Nrq   z %s c                      s
   ˆ  ˆ ¡S r@   r=   r	   ©r+   r   r	   r
   rG     rH   z"Unparser._BoolOp.<locals>.<lambda>rr   )r   Úboolopsr\   r1   r   r   rs   rJ   r	   rç   r
   Ú_BoolOpþ  s   
zUnparser._BoolOpc                 C   sH   |   |j¡ t|jƒrt|jjtƒr|  d¡ |  d¡ |  |j¡ d S )NrZ   rR   )r   rA   r   r/   Úintr   ÚattrrJ   r	   r	   r
   Ú
_Attribute  s
   

zUnparser._Attributec                 C   s|   |   |j¡ |  d¡ d}|jD ]}|r|  d¡ nd}|   |¡ q|jD ]}|r/|  d¡ nd}|   |¡ q%|  d¡ d S )Nrq   FrF   Trr   )r   Úfuncr   r   Úkeywords)r   r3   Zcommarv   r	   r	   r
   Ú_Call  s   


zUnparser._Callc                 C   s   |   d¡ |  | j¡ d S )NrÓ   rŸ   rJ   r	   r	   r
   Ú_Starred   s   
zUnparser._Starredc                 C   s0   |   |j¡ |  d¡ |   |j¡ |  d¡ d S r®   )r   rA   r   ÚslicerJ   r	   r	   r
   Ú
_Subscript$  s   
zUnparser._Subscriptc                 C   r<   )Nz...r=   rJ   r	   r	   r
   Ú	_Ellipsis+  r?   zUnparser._Ellipsisc                 C   rš   r@   )r   rA   rJ   r	   r	   r
   Ú_Index.  r   zUnparser._Indexc                 C   sR   |j r	|  |j ¡ |  d¡ |jr|  |j¡ |jr'|  d¡ |  |j¡ d S d S )Nr   )Úlowerr   r   ÚupperÚsteprJ   r	   r	   r
   Ú_Slice1  s   

þzUnparser._Slicec                    s   t ‡ fdd„ˆ j|jƒ d S )Nc                      rD   rE   r=   r	   r   r	   r
   rG   <  rH   z$Unparser._ExtSlice.<locals>.<lambda>)r   r   ZdimsrJ   r	   r   r
   Ú	_ExtSlice;  s   zUnparser._ExtSlicec                 C   sÔ   d}d gt |jƒt |jƒ  |j }t|j|ƒD ] \}}|r!d}n|  d¡ |  |¡f |r8|  d¡ |  |¡ q|jrQ|rAd}n|  d¡ |  d¡ |  |j¡ |jrh|rYd}n|  d¡ |  d|j ¡ d S d S )NTFrF   ú=rÓ   rØ   )r   r   ÚdefaultsrÆ   r   r   ÚvarargÚkwarg)r   r3   Úfirstrû   r‹   Údr	   r	   r
   Ú
_arguments?  s.    


€


ûzUnparser._argumentsc                 C   s8   |j r
|  |j ¡ n|  d¡ |  d¡ |  |j¡ d S )NrØ   rú   )Úargr   r   rA   rJ   r	   r	   r
   Ú_keyword^  s
   

zUnparser._keywordc                 C   sD   |   d¡ |   d¡ |  |j¡ |   d¡ |  |j¡ |   d¡ d S )Nrq   zlambda rº   rr   )r   r   r   r4   rJ   r	   r	   r
   Ú_Lambdaf  s   


zUnparser._Lambdac                 C   s*   |   |j¡ |jr|   d|j ¡ d S d S )Nr…   )r   r6   ÚasnamerJ   r	   r	   r
   Ú_aliasn  s   ÿzUnparser._aliasN)r   )Nr2   Ú
__module__Ú__qualname__Ú__doc__ÚsysÚstdoutr   r   r   r   r    r   r7   r;   r>   r-   rK   rV   rY   r]   r_   rb   rd   rf   rg   rj   rn   ro   rw   rx   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.   ZAndZOrrè   ré   rì   rï   rð   rò   ró   rô   rø   rù   r   r  r  r  r	   r	   r	   r
   r   %   sš    



			

þ
þ

r   c                 C   sP   t | dƒ}| ¡ }W d   ƒ n1 sw   Y  t|| dtjƒ}t||ƒ d S )NÚrÚexec)ÚopenÚreadÚcompiler.   ZPyCF_ONLY_ASTr   )ÚfilenameÚoutputZpyfileÚsourcer   r	   r	   r
   Ú	roundtript  s
   
ÿr  c                 C   sÒ   zdd„ t  | ¡D ƒ}W n ty   tj d|  ¡ Y d S w |D ]E}t j | |¡}t j |¡r\t	 
¡ }td| ƒ zt||ƒ W q! ty[ } ztdt|ƒ ƒ W Y d }~q!d }~ww t j |¡rft|ƒ q!d S )Nc                 S   s   g | ]	}|  d ¡r|‘qS )z.py)ÚendswithrM   r	   r	   r
   Ú
<listcomp>}  s    ztestdir.<locals>.<listcomp>zDirectory not readable: %sz
Testing %sz$  Failed to compile, exception is %s)ÚosÚlistdirÚOSErrorr	  Ústderrr   ÚpathÚjoinÚisfiler'   r(   rp   r  Ú	Exceptionr—   ÚisdirÚtestdir)r‹   rI   rO   Úfullnamer  rv   r	   r	   r
   r  {  s(   ÿ€ÿ€ör  c                 C   s@   | d dkr| dd … D ]}t |ƒ qd S | D ]}t|ƒ qd S )Nr   z	--testdirr   )r  r  )r   r‹   r	   r	   r
   ÚmainŽ  s   
ÿ
ÿr!  Ú__main__r   )r  Zpythran.metadatar"   Zpythran.openmpr$   Zpythran.utilsr   Zgastr.   r  r	  r'   r¥   r   r   r
  r  r  r!  r2   Úargvr	   r	   r	   r
   Ú<module>   s*        S	ÿ