B
    Ì‹d¾]  ã               @   s|   d Z ddlmZmZ ddlmZ ddlT G dd„ deƒZG dd	„ d	eƒZ	G d
d„ de	ƒZ
G dd„ de	ƒZG dd„ deƒZdS )a  
Serializes a Cython code tree to Cython code. This is primarily useful for
debugging and testing purposes.

The output is in a strict format, no whitespace or comments from the input
is preserved (and it could not be as it is not present in the code tree).
é    )Úabsolute_importÚprint_functioné   )ÚTreeVisitor)Ú*c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLinesResultc             C   s   g | _ d| _d S )NÚ )ÚlinesÚs)Úself© r   ú^/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/Cython/CodeWriter.pyÚ__init__   s    zLinesResult.__init__c             C   s   |  j |7  _ d S )N)r
   )r   r
   r   r   r   Úput   s    zLinesResult.putc             C   s   | j  | j¡ d| _d S )Nr   )r	   Úappendr
   )r   r   r   r   Únewline   s    zLinesResult.newlinec             C   s   |   |¡ |  ¡  d S )N)r   r   )r   r
   r   r   r   Úputline   s    
zLinesResult.putlineN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s   r   c                   s  e Zd ZdZd`‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zdadd„Zdd„ Z	dd„ Z
dbdd„Zdd„ Zdcd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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]„ Z/d^d_„ Z0‡  Z1S )dÚDeclarationWriterz    Nc                s8   t t| ƒ ¡  |d krtƒ }|| _d| _i | _d| _d S )Nr   )Úsuperr   r   r   ÚresultÚ
numindentsÚ	tempnamesÚtempblockindex)r   r   )Ú	__class__r   r   r   #   s    zDeclarationWriter.__init__c             C   s   |   |¡ | jS )N)Úvisitr   )r   Útreer   r   r   Úwrite,   s    
zDeclarationWriter.writec             C   s   |  j d7  _ d S )Nr   )r   )r   r   r   r   Úindent0   s    zDeclarationWriter.indentc             C   s   |  j d8  _ d S )Nr   )r   )r   r   r   r   Údedent3   s    zDeclarationWriter.dedentr   c             C   s   | j  | j| j | ¡ d S )N)r   r   Úindent_stringr   )r   r
   r   r   r   Ú	startline6   s    zDeclarationWriter.startlinec             C   s   | j  |¡ d S )N)r   r   )r   r
   r   r   r   r   9   s    zDeclarationWriter.putc             C   s   | j  | j| j | ¡ d S )N)r   r   r"   r   )r   r
   r   r   r   r   <   s    zDeclarationWriter.putlinec             C   s   | j  |¡ d S )N)r   r   )r   r
   r   r   r   Úendline?   s    zDeclarationWriter.endlinec             C   s   |   |¡ |  ¡  d S )N)r#   r$   )r   r
   r   r   r   ÚlineB   s    
zDeclarationWriter.lineFc             C   sl   t |ƒdkrhxL|d d… D ]<}|  |¡ |rL|jd k	rL|  d¡ |  |j¡ |  d¡ qW |  |d ¡ d S )Nr   éÿÿÿÿz = z, )Úlenr   Údefaultr   )r   ÚitemsÚ
output_rhsÚitemr   r   r   Úcomma_separated_listF   s    

z&DeclarationWriter.comma_separated_listc             C   s   t d| ƒ‚d S )Nz"Node not handled by serializer: %r)ÚAssertionError)r   Únoder   r   r   Ú
visit_NodeP   s    zDeclarationWriter.visit_Nodec             C   s   |   |¡ d S )N)Úvisitchildren)r   r.   r   r   r   Úvisit_ModuleNodeS   s    z"DeclarationWriter.visit_ModuleNodec             C   s   |   |¡ d S )N)r0   )r   r.   r   r   r   Úvisit_StatListNodeV   s    z$DeclarationWriter.visit_StatListNodec             C   sH   |j d krd}n
d|j  }|  d| ¡ |  ¡  |  |j¡ |  ¡  d S )Nr   z"%s"zcdef extern from %s:)Zinclude_filer   r    r   Úbodyr!   )r   r.   Úfiler   r   r   Úvisit_CDefExternNodeY   s    

z&DeclarationWriter.visit_CDefExternNodec             C   s   |   d¡ |  |j¡ d S )Nr   )r   r   Úbase)r   r.   r   r   r   Úvisit_CPtrDeclaratorNodec   s    
z*DeclarationWriter.visit_CPtrDeclaratorNodec             C   s   |   d¡ |  |j¡ d S )Nú&)r   r   r6   )r   r.   r   r   r   Úvisit_CReferenceDeclaratorNodeg   s    
z0DeclarationWriter.visit_CReferenceDeclaratorNodec             C   s:   |   |j¡ |  d¡ |jd k	r,|   |j¡ |  d¡ d S )Nú[ú])r   r6   r   Ú	dimension)r   r.   r   r   r   Úvisit_CArrayDeclaratorNodek   s
    

z,DeclarationWriter.visit_CArrayDeclaratorNodec             C   s:   |   |j¡ |  d¡ |jd k	r,|   |j¡ |  d¡ d S )Nr:   r;   )r   r6   r   r<   )r   r.   r   r   r   r=   r   s
    

c             C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S )Nú(ú))r   r6   r   r,   Úargsr$   )r   r.   r   r   r   Úvisit_CFuncDeclaratorNodey   s    
z+DeclarationWriter.visit_CFuncDeclaratorNodec             C   s   |   |j¡ d S )N)r   Úname)r   r.   r   r   r   Úvisit_CNameDeclaratorNode€   s    z+DeclarationWriter.visit_CNameDeclaratorNodec             C   s^   |j rN|  d|j ¡ |jdk r4|  d|j  ¡ n|jdkrN|  d|j ¡ |  |j¡ d S )N)z	unsigned r   zsigned r   zshort zlong )Zis_basic_c_typer   ÚsignedZlongnessrB   )r   r.   r   r   r   Úvisit_CSimpleBaseTypeNodeƒ   s    

z+DeclarationWriter.visit_CSimpleBaseTypeNodec             C   s0   |   d¡ |  |j¡ |  |j¡ |   d¡ d S )Nr>   r?   )r   r   Ú	base_typeÚ
declarator)r   r.   r   r   r   Úvisit_CComplexBaseTypeNode   s    
z,DeclarationWriter.visit_CComplexBaseTypeNodec             C   s&   |   |j¡ |  d¡ |  |j¡ d S )NÚ.)r   rF   r   rB   )r   r.   r   r   r   Úvisit_CNestedBaseTypeNode“   s    
z+DeclarationWriter.visit_CNestedBaseTypeNodec             C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S )Nr:   r;   )r   Zbase_type_noder   r,   Úpositional_argsÚkeyword_argsÚkey_value_pairs)r   r.   r   r   r   Úvisit_TemplatedTypeNode˜   s    
z)DeclarationWriter.visit_TemplatedTypeNodec             C   s<   |   d¡ |  |j¡ |  d¡ | j|jdd |  ¡  d S )Nzcdef ú T)r*   )r#   r   rF   r   r,   Zdeclaratorsr$   )r   r.   r   r   r   Úvisit_CVarDefNodež   s
    

z#DeclarationWriter.visit_CVarDefNodec             C   s”   |   |¡ |jr@|  d¡ |  |j¡ |jd k	r@|  d|j ¡ |rN|  |¡ |  d¡ |  ¡  |sp|  d¡ nx|D ]}|  |¡ qvW |  ¡  d S )NrO   z "%s"ú:Úpass)	r#   rB   r   Úcnamer$   r    r   r   r!   )r   r.   ÚdeclÚextrasÚ
attributesÚ	attributer   r   r   Úvisit_container_node¥   s    





z&DeclarationWriter.visit_container_nodec             C   sP   |j rd}nd}|jdkr"|d7 }|jr0|d7 }||j7 }|  ||d |j¡ d S )Nz	ctypedef zcdef Úpubliczpublic zpacked )Ztypedef_flagÚ
visibilityÚpackedÚkindrX   rV   )r   r.   rT   r   r   r   Úvisit_CStructOrUnionDefNode¸   s    

z-DeclarationWriter.visit_CStructOrUnionDefNodec             C   sJ   d}|j rdd |j ¡ }|jr4|dd |j¡ 7 }|  |d||j¡ d S )Nr   z[%s]z, z(%s)zcdef cppclass)Z	templatesÚjoinZbase_classesrX   rV   )r   r.   rU   r   r   r   Úvisit_CppClassNodeÄ   s    z$DeclarationWriter.visit_CppClassNodec             C   s   |   |dd |j¡ d S )Nz	cdef enum)rX   r)   )r   r.   r   r   r   Úvisit_CEnumDefNodeÌ   s    z$DeclarationWriter.visit_CEnumDefNodec             C   sJ   |   |j¡ |jr"|  d|j ¡ |jr>|  d¡ |  |j¡ |  ¡  d S )Nz "%s"z = )r#   rB   rS   r   Úvaluer   r$   )r   r.   r   r   r   Úvisit_CEnumDefItemNodeÏ   s    
z(DeclarationWriter.visit_CEnumDefItemNodec             C   s¬   |j r
t‚|jr*x|jD ]}|  |¡ qW |  d¡ |  |j¡ |jr‚|  d¡ |jrl|  |j¡ |  d¡ |  |j¡ |  d¡ |  	d¡ |  
¡  |  |j¡ |  ¡  d S )Nzcdef class r>   rI   r?   rQ   )Úmodule_namer-   Z
decoratorsr   r#   r   Ú
class_nameZbase_class_nameZbase_class_moduler$   r    r3   r!   )r   r.   Ú	decoratorr   r   r   Úvisit_CClassDefNodeØ   s"    





z%DeclarationWriter.visit_CClassDefNodec             C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nz	ctypedef rO   )r#   r   rF   r   rG   r$   )r   r.   r   r   r   Úvisit_CTypeDefNodeë   s
    

z$DeclarationWriter.visit_CTypeDefNodec             C   sF   |   d|j ¡ |  |j¡ |  d¡ |  ¡  |  |j¡ |  ¡  d S )Nzdef %s(z):)	r#   rB   r,   r@   r$   r    r   r3   r!   )r   r.   r   r   r   Úvisit_FuncDefNodeò   s    
z#DeclarationWriter.visit_FuncDefNodec             C   sR   |j jd k	r"|  |j ¡ |  d¡ |  |j¡ |jd k	rN|  d¡ |  |j¡ d S )NrO   z = )rF   rB   r   r   rG   r(   )r   r.   r   r   r   Úvisit_CArgDeclNodeú   s    


z$DeclarationWriter.visit_CArgDeclNodec             C   s>   |   d¡ |  |j¡ |jr2|  d¡ |  |j¡ |  ¡  d S )Nzcimport z as )r#   r   rc   Úas_namer$   )r   r.   r   r   r   Úvisit_CImportStatNode  s    

z'DeclarationWriter.visit_CImportStatNodec             C   sŠ   |   d¡ |  |j¡ |  d¡ d}xX|jD ]N\}}}}|d ksDt‚|rNd}n
|  d¡ |  |¡ |r,|  d¡ |  |¡ q,W |  ¡  d S )Nzfrom z	 cimport TFz, z as )r#   r   rc   Zimported_namesr-   r$   )r   r.   ÚfirstÚposrB   rj   r\   r   r   r   Úvisit_FromCImportStatNode  s    




z+DeclarationWriter.visit_FromCImportStatNodec             C   s   |   |j¡ d S )N)r   rB   )r   r.   r   r   r   Úvisit_NameNode  s    z DeclarationWriter.visit_NameNodec             C   s   |   |j¡ d S )N)r   ra   )r   r.   r   r   r   Úvisit_IntNode  s    zDeclarationWriter.visit_IntNodec             C   s   |   d¡ d S )NÚNone)r   )r   r.   r   r   r   Úvisit_NoneNode"  s    z DeclarationWriter.visit_NoneNodec             C   s$   |   d¡ |  |j¡ |   d¡ d S )Nz(not r?   )r   r   Úoperand)r   r.   r   r   r   Úvisit_NotNode%  s    
zDeclarationWriter.visit_NotNodec             C   s"   |   d¡ |  |j¡ |  ¡  d S )Nú@)r#   r   re   r$   )r   r.   r   r   r   Úvisit_DecoratorNode*  s    
z%DeclarationWriter.visit_DecoratorNodec             C   s,   |   |j¡ |  d|j ¡ |   |j¡ d S )Nz %s )r   Úoperand1r   ÚoperatorÚoperand2)r   r.   r   r   r   Úvisit_BinopNode/  s    z!DeclarationWriter.visit_BinopNodec             C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r   Úobjr   rW   )r   r.   r   r   r   Úvisit_AttributeNode4  s    z%DeclarationWriter.visit_AttributeNodec             C   s   |   t|jƒ¡ d S )N)r   Ústrra   )r   r.   r   r   r   Úvisit_BoolNode8  s    z DeclarationWriter.visit_BoolNodec             C   s.   |j }|jd k	r| |j¡}|  t|ƒ¡ d S )N)ra   ÚencodingÚencoder   Úrepr)r   r.   ra   r   r   r   Úvisit_StringNode<  s    
z"DeclarationWriter.visit_StringNodec             C   s   |   d¡ |  ¡  d S )NrR   )r#   r$   )r   r.   r   r   r   Úvisit_PassStatNodeB  s    
z$DeclarationWriter.visit_PassStatNode)N)r   )r   )F)2r   r   r   r"   r   r   r    r!   r#   r   r   r$   r%   r,   r/   r1   r2   r5   r7   r9   r=   rA   rC   rE   rH   rJ   rN   rP   rX   r]   r_   r`   rb   rf   rg   rh   ri   rk   rn   ro   rp   rr   rt   rv   rz   r|   r~   r‚   rƒ   Ú__classcell__r   r   )r   r   r      s^   	





		r   c               @   s¤   e Z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'S )(Ú
CodeWriterc             C   s6   |   ¡  |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nz = )r#   r   Úlhsr   Úrhsr$   )r   r.   r   r   r   Úvisit_SingleAssignmentNodeH  s
    
z%CodeWriter.visit_SingleAssignmentNodec             C   sD   |   ¡  x"|jD ]}|  |¡ |  d¡ qW |  |j¡ |  ¡  d S )Nz = )r#   Zlhs_listr   r   r‡   r$   )r   r.   r†   r   r   r   Úvisit_CascadedAssignmentNodeO  s    
z'CodeWriter.visit_CascadedAssignmentNodec             C   s4   |   d¡ |  |jj¡ |js(|  d¡ |  ¡  d S )Nzprint ú,)r#   r,   Z	arg_tupler@   Zappend_newliner   r$   )r   r.   r   r   r   Úvisit_PrintStatNodeW  s
    

zCodeWriter.visit_PrintStatNodec             C   sˆ   |   d¡ |  |j¡ |  d¡ |  |jj¡ |  d¡ |  ¡  |  |j¡ |  	¡  |j
d k	r„|  d¡ |  ¡  |  |j
¡ |  	¡  d S )Nzfor z in rQ   zelse:)r#   r   Útargetr   ÚiteratorÚsequencer$   r    r3   r!   Úelse_clauser%   )r   r.   r   r   r   Úvisit_ForInStatNode^  s    




zCodeWriter.visit_ForInStatNodec             C   sÐ   |   d¡ |  |jd j¡ |  d¡ |  ¡  |  |jd j¡ |  ¡  xR|jdd … D ]@}|   d¡ |  |j¡ |  d¡ |  ¡  |  |j¡ |  ¡  qXW |jd k	rÌ|  	d¡ |  ¡  |  |j¡ |  ¡  d S )Nzif r   rQ   r   zelif zelse:)
r#   r   Ú
if_clausesÚ	conditionr$   r    r3   r!   r   r%   )r   r.   Zclauser   r   r   Úvisit_IfStatNodem  s$    





zCodeWriter.visit_IfStatNodec             C   s   |   |j¡ d S )N)r,   r@   )r   r.   r   r   r   Úvisit_SequenceNodeƒ  s    zCodeWriter.visit_SequenceNodec             C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S )Nr>   r?   )r   Úfunctionr   r,   r@   )r   r.   r   r   r   Úvisit_SimpleCallNode†  s    
zCodeWriter.visit_SimpleCallNodec             C   s¸   |   |j¡ |  d¡ |j}t|tƒr4|   |j¡ n|  |j¡ |j	rªt|j	t
ƒr¢xVt|j	jƒD ]<\}\}}|dkr~|  d¡ |   |¡ |  d¡ |   |¡ q`W ntdƒ‚|  d¡ d S )Nr>   r   z, ú=zNot implemented yetr?   )r   r•   r   rK   Ú
isinstanceÚAsTupleNodeÚargr,   r@   rL   ÚDictNodeÚ	enumeraterM   Ú	Exception)r   r.   ZposargÚirB   ra   r   r   r   Úvisit_GeneralCallNodeŒ  s     




z CodeWriter.visit_GeneralCallNodec             C   s    |   ¡  |  |j¡ |  ¡  d S )N)r#   r   Úexprr$   )r   r.   r   r   r   Úvisit_ExprStatNode   s    zCodeWriter.visit_ExprStatNodec             C   s<   |   ¡  |  |j¡ |  d|j ¡ |  |j¡ |  ¡  d S )Nz %s= )r#   r   r†   r   rx   r‡   r$   )r   r.   r   r   r   Úvisit_InPlaceAssignmentNode¥  s
    z&CodeWriter.visit_InPlaceAssignmentNodec             C   sh   |   ¡  |  d¡ |  |j¡ |jd k	r>|  d¡ |  |j¡ |  d¡ |  ¡  |  |j¡ |  ¡  d S )Nzwith z as rQ   )	r#   r   r   ÚmanagerrŒ   r$   r    r3   r!   )r   r.   r   r   r   Úvisit_WithStatNode¬  s    



zCodeWriter.visit_WithStatNodec             C   sP   |   d¡ |  ¡  |  |j¡ |  ¡  |   d¡ |  ¡  |  |j¡ |  ¡  d S )Nztry:zfinally:)r%   r    r   r3   r!   Zfinally_clause)r   r.   r   r   r   Úvisit_TryFinallyStatNode¸  s    

z#CodeWriter.visit_TryFinallyStatNodec             C   sZ   |   d¡ |  ¡  |  |j¡ |  ¡  x|jD ]}|  |¡ q.W |jd k	rV|  |j¡ d S )Nztry:)r%   r    r   r3   r!   Zexcept_clausesr   )r   r.   Úxr   r   r   Úvisit_TryExceptStatNodeÂ  s    

z"CodeWriter.visit_TryExceptStatNodec             C   st   |   d¡ |jd k	r*|  d¡ |  |j¡ |jd k	rJ|  d¡ |  |j¡ |  d¡ |  ¡  |  |j¡ |  ¡  d S )NÚexceptrO   z, rQ   )	r#   Úpatternr   r   rŒ   r$   r    r3   r!   )r   r.   r   r   r   Úvisit_ExceptClauseNodeÌ  s    





z!CodeWriter.visit_ExceptClauseNodec             C   s"   |   d¡ |  |j¡ |  ¡  d S )Nzreturn )r#   r   ra   r$   )r   r.   r   r   r   Úvisit_ReturnStatNodeÙ  s    
zCodeWriter.visit_ReturnStatNodec             C   s   |   d¡ d S )NÚraise)r%   )r   r.   r   r   r   Úvisit_ReraiseStatNodeÞ  s    z CodeWriter.visit_ReraiseStatNodec             C   s   |   d|jj ¡ d S )Nz(import %s))r   rc   ra   )r   r.   r   r   r   Úvisit_ImportNodeá  s    zCodeWriter.visit_ImportNodec             C   sN   d}x*|j D ] }d| j|f | j|< |d7 }qW |  jd7  _|  |j¡ dS )zÌ
        Temporaries are output like $1_1', where the first number is
        an index of the TempsBlockNode and the second number is an index
        of the temporary which that block allocates.
        r   z$%d_%dr   N)Ztempsr   r   r   r3   )r   r.   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeä  s    zCodeWriter.visit_TempsBlockNodec             C   s   |   | j|j ¡ d S )N)r   r   r°   )r   r.   r   r   r   Úvisit_TempRefNodeñ  s    zCodeWriter.visit_TempRefNodeN)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…   F  s&   

r…   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	PxdWriterc             C   s   t d |  |¡j¡ƒ |S )NÚ
)Úprintr^   r   r	   )r   r.   r   r   r   Ú__call__ö  s    zPxdWriter.__call__c             C   sj   d|j krd S |jr |  d¡ n
|  d¡ |jdkrJ|  |j¡ |  d¡ |jrZ|  d¡ |  |j¡ d S )NÚinlinezcpdef zcdef ÚprivaterO   zapi )Ú	modifiersZoverridabler#   rZ   r   Úapir   rG   )r   r.   r   r   r   Úvisit_CFuncDefNodeú  s    




zPxdWriter.visit_CFuncDefNodec             C   s   d S )Nr   )r   r.   r   r   r   Úvisit_StatNode  s    zPxdWriter.visit_StatNodeN)r   r   r   r¶   r»   r¼   r   r   r   r   r³   õ  s   r³   c                   s¼  e Zd Zdh‡ f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didd„Zdd„ Zdd „ Zd!d"„ Zdjd$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d0d1d1d1d2œZd3d4d5d5d5d5d5d5d5d5d5d5d6d7d8d9d9d:d:d;d;d;d;d;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]„ Z*dkd^d_„Z+d`da„ Z,dbdc„ Z-ddde„ Z.dfdg„ Z/‡  Z0S )lÚExpressionWriterNc                s,   t t| ƒ ¡  |d krd}|| _dg| _d S )Nr   r   )r   r½   r   r   Ú
precedence)r   r   )r   r   r   r     s
    zExpressionWriter.__init__c             C   s   |   |¡ | jS )N)r   r   )r   r   r   r   r   r     s    
zExpressionWriter.writec             C   s   |  j |7  _ d S )N)r   )r   r
   r   r   r   r     s    zExpressionWriter.putc             C   s&   | j  |¡r"| j d t|ƒ … | _ d S )N)r   Úendswithr'   )r   r
   r   r   r   Úremove  s    zExpressionWriter.removec             C   sH   t |ƒdkrDx(|d d… D ]}|  |¡ |  d¡ qW |  |d ¡ d S )Nr   r&   z, )r'   r   r   )r   r)   r+   r   r   r   r,      s
    
z%ExpressionWriter.comma_separated_listc             C   s   t d| ƒ‚d S )Nz"Node not handled by serializer: %r)r-   )r   r.   r   r   r   r/   '  s    zExpressionWriter.visit_Nodec             C   s   |   |j¡ d S )N)r   rB   )r   r.   r   r   r   ro   *  s    zExpressionWriter.visit_NameNodec             C   s   |   d¡ d S )Nrq   )r   )r   r.   r   r   r   rr   -  s    zExpressionWriter.visit_NoneNodec             C   s   |   d¡ d S )Nz...)r   )r   r.   r   r   r   Úvisit_EllipsisNode0  s    z#ExpressionWriter.visit_EllipsisNodec             C   s   |   t|jƒ¡ d S )N)r   r}   ra   )r   r.   r   r   r   r~   3  s    zExpressionWriter.visit_BoolNodec             C   s   |   t|jƒ¡ d S )N)r   r}   ra   )r   r.   r   r   r   Úvisit_ConstNode6  s    z ExpressionWriter.visit_ConstNodec             C   s   |   |j¡ |   d¡ d S )NÚj)r   ra   )r   r.   r   r   r   Úvisit_ImagNode9  s    zExpressionWriter.visit_ImagNoder   c             C   s8   t |jƒ}|d dkr"|dd … }|  d||f ¡ d S )Nr   Zubr   z%s%s)r   ra   r   )r   r.   ÚprefixZrepr_valr   r   r   Úemit_string=  s    
zExpressionWriter.emit_stringc             C   s   |   |d¡ d S )NÚb)rÆ   )r   r.   r   r   r   Úvisit_BytesNodeC  s    z ExpressionWriter.visit_BytesNodec             C   s   |   |¡ d S )N)rÆ   )r   r.   r   r   r   r‚   F  s    z!ExpressionWriter.visit_StringNodec             C   s   |   |d¡ d S )NÚu)rÆ   )r   r.   r   r   r   Úvisit_UnicodeNodeI  s    z"ExpressionWriter.visit_UnicodeNode©r   r   c             C   s2   |\}}|  ¡ }|  |¡ |  |¡ |  |¡ d S )N)Úsubexpr_nodesr   r,   )r   r.   ÚparensÚ
open_parenÚclose_parenr)   r   r   r   Úemit_sequenceL  s
    

zExpressionWriter.emit_sequencec             C   s   |   |d¡ d S )Nz[])rÐ   )r   r.   r   r   r   Úvisit_ListNodeS  s    zExpressionWriter.visit_ListNodec             C   s   |   |d¡ d S )Nz())rÐ   )r   r.   r   r   r   Úvisit_TupleNodeV  s    z ExpressionWriter.visit_TupleNodec             C   s,   t | ¡ ƒdkr|  |d¡ n
|  d¡ d S )Nr   z{}zset())r'   rÌ   rÐ   r   )r   r.   r   r   r   Úvisit_SetNodeY  s    zExpressionWriter.visit_SetNodec             C   s   |   |d¡ d S )Nz{})rÐ   )r   r.   r   r   r   Úvisit_DictNode_  s    zExpressionWriter.visit_DictNodec             C   s&   |   |j¡ |  d¡ |   |j¡ d S )Nz: )r   Úkeyr   ra   )r   r.   r   r   r   Úvisit_DictItemNodeb  s    
z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~r   é   é   é   é   é   é   é	   é
   é   )ÚorÚandÚinZnot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|ú^r8   z<<z>>rÛ   rÜ   r   ru   ú/z//ú%z**c             C   s,   | j d }||kr|  d¡ | j  |¡ d S )Nr&   r>   )r¾   r   r   )r   Únew_precÚold_precr   r   r   Úoperator_enterz  s    

zExpressionWriter.operator_enterc             C   s2   | j dd … \}}||kr$|  d¡ | j  ¡  d S )Néþÿÿÿr?   )r¾   r   Úpop)r   ró   rò   r   r   r   Úoperator_exit€  s    
zExpressionWriter.operator_exitc             C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )NrÙ   znot )Úunop_precedencerô   r   r   rs   r÷   )r   r.   ÚopÚprecr   r   r   rt   †  s    


zExpressionWriter.visit_NotNodec             C   sB   |j }| j| }|  |¡ |  d|j  ¡ |  |j¡ |  ¡  d S )Nz%s)rx   rø   rô   r   r   rs   r÷   )r   r.   rù   rú   r   r   r   Úvisit_UnopNodeŽ  s    

zExpressionWriter.visit_UnopNodec             C   sX   |j }| j |d¡}|  |¡ |  |j¡ |  d| dd¡ ¡ |  |j¡ |  	¡  d S )Nr   z %s Ú_rO   )
rx   Úbinop_precedenceÚgetrô   r   rw   r   Úreplacery   r÷   )r   r.   rù   rú   r   r   r   rz   –  s    
z ExpressionWriter.visit_BinopNodec             C   s   |   |¡ d S )N)rz   )r   r.   r   r   r   Úvisit_BoolBinopNodeŸ  s    z$ExpressionWriter.visit_BoolBinopNodec             C   s   |   |¡ d S )N)rz   )r   r.   r   r   r   Úvisit_PrimaryCmpNode¢  s    z%ExpressionWriter.visit_PrimaryCmpNodec             C   s`   |   |j¡ |  d¡ t|jtƒrF|j ¡ r:|  |j¡ qR|  d¡ n|   |j¡ |  d¡ d S )Nr:   z()r;   )r   r6   r   r˜   ÚindexÚ	TupleNoderÌ   rÐ   )r   r.   r   r   r   Úvisit_IndexNode¥  s    

z ExpressionWriter.visit_IndexNodec             C   sn   |   |j¡ |  d¡ |jr(|   |j¡ |  d¡ |jrD|   |j¡ |jr`|  d¡ |   |j¡ |  d¡ d S )Nr:   rQ   r;   )r   r6   r   ÚstartÚstopÚslice)r   r.   r   r   r   Úvisit_SliceIndexNode±  s    


z%ExpressionWriter.visit_SliceIndexNodec             C   sT   |j js|  |j ¡ |  d¡ |jjs2|  |j¡ |jjsP|  d¡ |  |j¡ d S )NrQ   )r  Zis_noner   r   r  Ústep)r   r.   r   r   r   Úvisit_SliceNode¾  s    

z ExpressionWriter.visit_SliceNodec             C   s<   |   |j¡ |  d¡ |   |j¡ |  d¡ |   |j¡ d S )Nz if z else )r   Ztrue_valr   ÚtestZ	false_val)r   r.   r   r   r   Úvisit_CondExprNodeÈ  s
    

z#ExpressionWriter.visit_CondExprNodec             C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r   r{   r   rW   )r   r.   r   r   r   r|   Ï  s    z$ExpressionWriter.visit_AttributeNodec             C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S )Nr>   r?   )r   r•   r   r,   r@   )r   r.   r   r   r   r–   Ó  s    
z%ExpressionWriter.visit_SimpleCallNodec             C   s¦   |d krd S t |tƒr0|  |j¡ |  |j¡ nrt |tƒrbxf| ¡ D ]}|  |¡ |  d¡ qDW n@t |t	ƒrŽ|  d¡ |  |j
¡ |  d¡ n|  |¡ |  d¡ d S )Nz, r   )r˜   ZAddNodeÚemit_pos_argsrw   ry   r  rÌ   r   r   r™   rš   )r   r.   r    r   r   r   r  Ù  s    





zExpressionWriter.emit_pos_argsc             C   sœ   |d krd S t |tƒr4x€| ¡ D ]}|  |¡ q W ndt |tƒrzxX| ¡ D ],}|  d|jj ¡ |  |j¡ |  d¡ qHW n|  d¡ |  |¡ |  d¡ d S )Nz%s=z, z**)	r˜   ZMergedDictNoderÌ   Úemit_kwd_argsr›   r   rÕ   ra   r   )r   r.   r    r   r   r   r  ë  s    



zExpressionWriter.emit_kwd_argsc             C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )Nr>   z, r?   )r   r•   r   r  rK   r  rL   rÀ   )r   r.   r   r   r   rŸ   û  s    

z&ExpressionWriter.visit_GeneralCallNodec             C   sj   |\}}|   |¡ |  |¡ |   d¡ |  |¡ |   d¡ |  |¡ |r\|   d¡ |  |¡ |   |¡ d S )Nz for z in z if )r   r   )r   r3   rŒ   rŽ   r’   rÍ   rÎ   rÏ   r   r   r   Úemit_comprehension  s    







z#ExpressionWriter.emit_comprehensionc             C   s   |   |j¡ d S )N)r   r    )r   r.   r   r   r   Úvisit_ComprehensionAppendNode  s    z.ExpressionWriter.visit_ComprehensionAppendNodec             C   s&   |   |j¡ |  d¡ |   |j¡ d S )Nz: )r   Zkey_exprr   Z
value_expr)r   r.   r   r   r   Ú!visit_DictComprehensionAppendNode  s    
z2ExpressionWriter.visit_DictComprehensionAppendNodec             C   sp   ddddœ}||j  ¡  }|jj}|jj}|jjj}d }t|dƒrZ|jd j	}|jd j}|  
|||||¡ d S )Nz[]z{})ÚlistÚdictÚsetr‘   r   )ÚtypeZpy_type_nameÚloopr3   rŒ   r   rŽ   Úhasattrr‘   r’   r  )r   r.   ZtpmaprÍ   r3   rŒ   rŽ   r’   r   r   r   Úvisit_ComprehensionNode  s    

z(ExpressionWriter.visit_ComprehensionNodec             C   sn   |j j}|j j}|j jj}d }t|dƒrF|jd j}|jd jjj	}nt|dƒrX|jj	}|  
||||d¡ d S )Nr‘   r   r    z())r  r3   rŒ   r   rŽ   r  r‘   r’   r    rš   r  )r   r.   r3   rŒ   rŽ   r’   r   r   r   Úvisit_GeneratorExpressionNode'  s    


z.ExpressionWriter.visit_GeneratorExpressionNode)N)r   )rË   )rË   )1r   r   r   r   r   r   rÀ   r,   r/   ro   rr   rÁ   r~   rÂ   rÄ   rÆ   rÈ   r‚   rÊ   rÐ   rÑ   rÒ   rÓ   rÔ   rÖ   rø   rý   rô   r÷   rt   rû   rz   r   r  r  r  r
  r  r|   r–   r  r  rŸ   r  r  r  r  r  r„   r   r   )r   r   r½     sn   


	


r½   N)Ú__doc__Ú
__future__r   r   ZCompiler.Visitorr   ZCompiler.ExprNodesÚobjectr   r   r…   r³   r½   r   r   r   r   Ú<module>   s     ) 0