U
    *üÖh/^  ã                   @   sŠ   d Z ddlmZ ddlT ddlmZ G dd„ dƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZ	G dd„ dee	ƒZ
G dd„ de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).
é   )ÚTreeVisitor)Ú*)ÚCSimpleBaseTypeNodec                   @   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   úd/var/www/html/CrowdFlow/HYROX/ble_analysis_env_py38/lib/python3.8/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 r   )r   Úappendr	   r
   r   r   r   Únewline   s    zLinesResult.newlinec                 C   s   |   |¡ |  ¡  d S 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                       sd  e Zd ZdZdZdV‡ fdd„	Zdd„ Zdd	„ Zd
d„ ZdWdd„Z	dd„ Z
dd„ ZdXdd„Zdd„ ZdYd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,‡  Z-S )ZÚDeclarationWriterzE
    A Cython code writer that is limited to declarations nodes.
    z    Nc                    s4   t ƒ  ¡  |d krtƒ }|| _d| _i | _d| _d S )Né    )Úsuperr   r   ÚresultÚ
numindentsÚ	tempnamesÚtempblockindex©r   r   ©Ú	__class__r   r   r   &   s    
zDeclarationWriter.__init__c                 C   s   |   |¡ | jS r   ©Úvisitr   ©r   Útreer   r   r   Úwrite/   s    
zDeclarationWriter.writec                 C   s   |  j d7  _ d S ©Nr   ©r   r
   r   r   r   Úindent3   s    zDeclarationWriter.indentc                 C   s   |  j d8  _ d S r'   r(   r
   r   r   r   Údedent6   s    zDeclarationWriter.dedentr   c                 C   s   | j  | j| j | ¡ d S r   )r   r   Úindent_stringr   r   r   r   r   Ú	startline9   s    zDeclarationWriter.startlinec                 C   s   | j  |¡ d S r   )r   r   r   r   r   r   r   <   s    zDeclarationWriter.putc                 C   s   | j  | j| j | ¡ d S r   )r   r   r+   r   r   r   r   r   r   ?   s    zDeclarationWriter.putlinec                 C   s   | j  |¡ d S r   )r   r   r   r   r   r   ÚendlineB   s    zDeclarationWriter.endlinec                 C   s   |   |¡ |  ¡  d S r   ©r,   r-   r   r   r   r   ÚlineE   s    
zDeclarationWriter.lineFc                 C   s”   t |ƒdkr|d d… D ]<}|  |¡ |rJ|jd k	rJ|  d¡ |  |j¡ |  d¡ q|  |d ¡ |r|d jd k	r|  d¡ |  |d j¡ d S )Nr   éÿÿÿÿú = ú, )Úlenr#   Údefaultr   )r   ÚitemsÚ
output_rhsÚitemr   r   r   Úcomma_separated_listI   s    


z&DeclarationWriter.comma_separated_listc                 C   s   |   ¡  |  |¡ |  ¡  d S r   )r)   r#   r*   ©r   Únoder   r   r   Ú_visit_indentedV   s    
z!DeclarationWriter._visit_indentedc                 C   s   t d| ƒ‚d S ©Nz"Node not handled by serializer: %r©ÚAssertionErrorr9   r   r   r   Ú
visit_Node[   s    zDeclarationWriter.visit_Nodec                 C   s   |   |¡ d S r   ©Zvisitchildrenr9   r   r   r   Úvisit_ModuleNode^   s    z"DeclarationWriter.visit_ModuleNodec                 C   s   |   |¡ d S r   r@   r9   r   r   r   Úvisit_StatListNodea   s    z$DeclarationWriter.visit_StatListNodec                 C   s8   |j d krd}n
d|j  }|  d| ¡ |  |j¡ d S )Nr   z"%s"zcdef extern from %s:)Zinclude_filer   r;   Úbody)r   r:   Úfiler   r   r   Úvisit_CDefExternNoded   s
    

z&DeclarationWriter.visit_CDefExternNodec                 C   s   |   d¡ |  |j¡ d S )Nr   ©r   r#   Úbaser9   r   r   r   Úvisit_CPtrDeclaratorNodel   s    
z*DeclarationWriter.visit_CPtrDeclaratorNodec                 C   s   |   d¡ |  |j¡ d S )Nú&rF   r9   r   r   r   Úvisit_CReferenceDeclaratorNodep   s    
z0DeclarationWriter.visit_CReferenceDeclaratorNodec                 C   s:   |   |j¡ |  d¡ |jd k	r,|   |j¡ |  d¡ d S ©Nú[ú])r#   rG   r   Ú	dimensionr9   r   r   r   Úvisit_CArrayDeclaratorNodet   s
    

z,DeclarationWriter.visit_CArrayDeclaratorNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S ©Nú(ú))r#   rG   r   r8   Úargsr-   r9   r   r   r   Úvisit_CFuncDeclaratorNode{   s    
z+DeclarationWriter.visit_CFuncDeclaratorNodec                 C   s   |   |j¡ d S r   ©r   Únamer9   r   r   r   Úvisit_CNameDeclaratorNode‚   s    z+DeclarationWriter.visit_CNameDeclaratorNodec                 C   sh   |j rN|  d|j ¡ |jdk r4|  d|j  ¡ n|jdkrN|  d|j ¡ |jd k	rd|  |j¡ d S )N)z	unsigned r   zsigned r   zshort zlong )Zis_basic_c_typer   ÚsignedZlongnessrV   r9   r   r   r   Úvisit_CSimpleBaseTypeNode…   s    


z+DeclarationWriter.visit_CSimpleBaseTypeNodec                 C   s   |   |j¡ |   |j¡ d S r   )r#   Ú	base_typeÚ
declaratorr9   r   r   r   Úvisit_CComplexBaseTypeNode   s    z,DeclarationWriter.visit_CComplexBaseTypeNodec                 C   s&   |   |j¡ |  d¡ |  |j¡ d S )NÚ.)r#   rZ   r   rV   r9   r   r   r   Úvisit_CNestedBaseTypeNode”   s    
z+DeclarationWriter.visit_CNestedBaseTypeNodec                 C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S rK   )r#   Zbase_type_noder   r8   Úpositional_argsÚkeyword_argsZkey_value_pairsr9   r   r   r   Úvisit_TemplatedTypeNode™   s    
z)DeclarationWriter.visit_TemplatedTypeNodec                 C   s<   |   d¡ |  |j¡ |  d¡ | j|jdd |  ¡  d S )Núcdef ú T)r6   )r,   r#   rZ   r   r8   Zdeclaratorsr-   r9   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|D ]}|  |¡ qt|  ¡  d S )Nrc   ú "%s"ú:Úpass)	r,   rV   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 )Nú	ctypedef rb   Úpubliczpublic zpacked )Ztypedef_flagÚ
visibilityÚpackedÚkindrm   rk   )r   r:   ri   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]r2   z(%s)zcdef cppclass)Z	templatesÚjoinZbase_classesrm   rk   )r   r:   rj   r   r   r   Úvisit_CppClassNodeÅ   s    z$DeclarationWriter.visit_CppClassNodec                 C   s   |   |dd |j¡ d S )Nz	cdef enum)rm   r5   r9   r   r   r   Úvisit_CEnumDefNodeÍ   s    z$DeclarationWriter.visit_CEnumDefNodec                 C   sJ   |   |j¡ |jr"|  d|j ¡ |jr>|  d¡ |  |j¡ |  ¡  d S )Nre   r1   )r,   rV   rh   r   Úvaluer#   r-   r9   r   r   r   Úvisit_CEnumDefItemNodeÐ   s    
z(DeclarationWriter.visit_CEnumDefItemNodec                 C   s˜   |j r
t‚|jr&|jD ]}|  |¡ q|  d¡ |  |j¡ |jr~|  d¡ |jrh|  |j¡ |  d¡ |  |j¡ |  d¡ |  	d¡ |  
|j¡ d S )Nzcdef class rQ   r]   rR   rf   )Úmodule_namer>   Z
decoratorsr#   r,   r   Ú
class_nameZbase_class_nameZbase_class_moduler-   r;   rC   )r   r:   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÙ   s    






z%DeclarationWriter.visit_CClassDefNodec                 C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nrn   rc   )r,   r#   rZ   r   r[   r-   r9   r   r   r   Úvisit_CTypeDefNodeê   s
    

z$DeclarationWriter.visit_CTypeDefNodec                 C   s6   |   d|j ¡ |  |j¡ |  d¡ |  |j¡ d S )Nzdef %s(ú):)r,   rV   r8   rS   r-   r;   rC   r9   r   r   r   Úvisit_FuncDefNodeñ   s    
z#DeclarationWriter.visit_FuncDefNodec                 C   sÎ   |   |jrdnd¡ |jr6|  d |j¡¡ |  d¡ |jdkrV|  |j¡ |  d¡ |jrf|  d¡ |jrŽ|  |j¡ |jj	d k	rŽ|  d¡ |  |j
j¡ |  d¡ |  |j
j¡ |  d¡ |  |j¡ d S )Núcpdef rb   rc   Úprivateúapi rQ   r~   )r,   ÚoverridableÚ	modifiersr   rt   rp   ÚapirZ   r#   rV   r[   rG   r8   rS   r-   r;   rC   r9   r   r   r   Úvisit_CFuncDefNodeø   s$    






z$DeclarationWriter.visit_CFuncDefNodec                 C   sh   t |jtƒr|jjd k	r8|  |j¡ |j ¡ r8|  d¡ |  |j¡ |jd k	rd|  d¡ |  |j¡ d S )Nrc   r1   )	Ú
isinstancerZ   r   rV   r#   r[   Zdeclared_namer   r4   r9   r   r   r   Úvisit_CArgDeclNode  s    
ÿ



z$DeclarationWriter.visit_CArgDeclNodec                 C   s>   |   d¡ |  |j¡ |jr2|  d¡ |  |j¡ |  ¡  d S )Nzcimport ú as )r,   r   ry   Úas_namer-   r9   r   r   r   Úvisit_CImportStatNode"  s    

z'DeclarationWriter.visit_CImportStatNodec                 C   s†   |   d¡ |  |j¡ |  d¡ d}|jD ]N\}}}}|d ksBt‚|rLd}n
|  d¡ |  |¡ |r*|  d¡ |  |¡ q*|  ¡  d S )Nzfrom z	 cimport TFr2   r‰   )r,   r   ry   Zimported_namesr>   r-   )r   r:   ÚfirstÚposrV   rŠ   rr   r   r   r   Úvisit_FromCImportStatNode*  s    




z+DeclarationWriter.visit_FromCImportStatNodec                 C   s   |   |j¡ d S r   rU   r9   r   r   r   Úvisit_NameNode;  s    z DeclarationWriter.visit_NameNodec                 C   s"   |   d¡ |  |j¡ |  ¡  d S )Nú@)r,   r#   r{   r-   r9   r   r   r   Úvisit_DecoratorNode>  s    
z%DeclarationWriter.visit_DecoratorNodec                 C   s   |   d¡ |  ¡  d S )Nrg   r.   r9   r   r   r   Úvisit_PassStatNodeC  s    
z$DeclarationWriter.visit_PassStatNode)N)r   )r   )F).r   r   r   Ú__doc__r+   r   r&   r)   r*   r,   r   r   r-   r/   r8   r;   r?   rA   rB   rE   rH   rJ   rO   rT   rW   rY   r\   r^   ra   rd   rm   rs   ru   rv   rx   r|   r}   r   r†   rˆ   r‹   rŽ   r   r‘   r’   Ú__classcell__r   r   r    r   r      sT   	


	r   c                   @   s°   e Zd 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(d)„ Zd*S )+ÚStatementWriterzD
    A Cython code writer for most language statement features.
    c                 C   s6   |   ¡  |  |j¡ |  d¡ |  |j¡ |  ¡  d S ©Nr1   )r,   r#   Úlhsr   Úrhsr-   r9   r   r   r   Úvisit_SingleAssignmentNodeM  s
    
z*StatementWriter.visit_SingleAssignmentNodec                 C   s@   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ |  ¡  d S r–   )r,   Zlhs_listr#   r   r˜   r-   )r   r:   r—   r   r   r   Úvisit_CascadedAssignmentNodeT  s    

z,StatementWriter.visit_CascadedAssignmentNodec                 C   s4   |   d¡ |  |jj¡ |js(|  d¡ |  ¡  d S )Nzprint ú,)r,   r8   Z	arg_tuplerS   Zappend_newliner   r-   r9   r   r   r   Úvisit_PrintStatNode\  s
    

z#StatementWriter.visit_PrintStatNodec                 C   s€   |   d¡ |jjr"|  |jj¡ n|  |j¡ |  d¡ |  |jj¡ |  	d¡ |  
|j¡ |jd k	r||  d¡ |  
|j¡ d S )Nzfor ú in rf   úelse:)r,   ÚtargetZis_sequence_constructorr8   rS   r#   r   ÚiteratorÚsequencer-   r;   rC   Úelse_clauser/   r9   r   r   r   Úvisit_ForInStatNodec  s    




z#StatementWriter.visit_ForInStatNodec                 C   sœ   |   d¡ |  |jd j¡ |  d¡ |  |jd j¡ |jdd … D ]0}|   d¡ |  |j¡ |  d¡ |  |j¡ qF|jd k	r˜|  d¡ |  |j¡ d S )Nzif r   rf   r   zelif rž   )	r,   r#   Ú
if_clausesÚ	conditionr-   r;   rC   r¢   r/   )r   r:   Zclauser   r   r   Úvisit_IfStatNodeq  s    





z StatementWriter.visit_IfStatNodec                 C   sP   |   d¡ |  |j¡ |  d¡ |  |j¡ |jd k	rL|  d¡ |  |j¡ d S )Nzwhile rf   rž   )r,   r#   r¥   r-   r;   rC   r¢   r/   r9   r   r   r   Úvisit_WhileStatNode  s    



z#StatementWriter.visit_WhileStatNodec                 C   s   |   d¡ d S )NÚcontinue©r/   r9   r   r   r   Úvisit_ContinueStatNodeŠ  s    z&StatementWriter.visit_ContinueStatNodec                 C   s   |   d¡ d S )NÚbreakr©   r9   r   r   r   Úvisit_BreakStatNode  s    z#StatementWriter.visit_BreakStatNodec                 C   s   |   |j¡ d S r   )r8   rS   r9   r   r   r   Úvisit_SequenceNode  s    z"StatementWriter.visit_SequenceNodec                 C   s    |   ¡  |  |j¡ |  ¡  d S r   )r,   r#   Úexprr-   r9   r   r   r   Úvisit_ExprStatNode“  s    z"StatementWriter.visit_ExprStatNodec                 C   s<   |   ¡  |  |j¡ |  d|j ¡ |  |j¡ |  ¡  d S )Nz %s= )r,   r#   r—   r   Úoperatorr˜   r-   r9   r   r   r   Úvisit_InPlaceAssignmentNode˜  s
    z+StatementWriter.visit_InPlaceAssignmentNodec                 C   sX   |   ¡  |  d¡ |  |j¡ |jd k	r>|  d¡ |  |j¡ |  d¡ |  |j¡ d S )Nzwith r‰   rf   )r,   r   r#   ÚmanagerrŸ   r-   r;   rC   r9   r   r   r   Úvisit_WithStatNodeŸ  s    



z"StatementWriter.visit_WithStatNodec                 C   s0   |   d¡ |  |j¡ |   d¡ |  |j¡ d S )Nútry:zfinally:)r/   r;   rC   Zfinally_clauser9   r   r   r   Úvisit_TryFinallyStatNode©  s    

z(StatementWriter.visit_TryFinallyStatNodec                 C   sF   |   d¡ |  |j¡ |jD ]}|  |¡ q|jd k	rB|  |j¡ d S )Nr´   )r/   r;   rC   Zexcept_clausesr#   r¢   )r   r:   Úxr   r   r   Úvisit_TryExceptStatNode¯  s    


z'StatementWriter.visit_TryExceptStatNodec                 C   sd   |   d¡ |jd k	r*|  d¡ |  |j¡ |jd k	rJ|  d¡ |  |j¡ |  d¡ |  |j¡ d S )NÚexceptrc   r2   rf   )r,   Úpatternr   r#   rŸ   r-   r;   rC   r9   r   r   r   Úvisit_ExceptClauseNode·  s    





z&StatementWriter.visit_ExceptClauseNodec                 C   s6   |   d¡ |jd k	r*|  d¡ |  |j¡ |  ¡  d S )NÚreturnrc   )r,   rw   r   r#   r-   r9   r   r   r   Úvisit_ReturnStatNodeÂ  s
    


z$StatementWriter.visit_ReturnStatNodec                 C   s   |   d¡ d S )NÚraiser©   r9   r   r   r   Úvisit_ReraiseStatNodeÉ  s    z%StatementWriter.visit_ReraiseStatNodec                 C   s   |   d|jj ¡ d S )Nz(import %s))r   ry   rw   r9   r   r   r   Úvisit_ImportNodeÌ  s    z StatementWriter.visit_ImportNodec                 C   sJ   d}|j D ] }d| j|f | j|< |d7 }q
|  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#   rC   )r   r:   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeÏ  s    

z$StatementWriter.visit_TempsBlockNodec                 C   s   |   | j|j ¡ d S r   )r   r   rÁ   r9   r   r   r   Úvisit_TempRefNodeÜ  s    z!StatementWriter.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   r   r•   H  s*   	
r•   c                       s¾  e Zd 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dd„ Zdd„ Zdd „ Zd!d"„ Zdid$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+djd^d_„Z,d`da„ Z-dbdc„ Z.ddde„ Z/dfdg„ Z0‡  Z1S )kÚExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    Nc                    s(   t ƒ  ¡  |d krd}|| _dg| _d S )Nr   r   )r   r   r   Ú
precedencer   r    r   r   r   å  s
    
zExpressionWriter.__init__c                 C   s   |   |¡ | jS r   r"   r$   r   r   r   r&   ì  s    
zExpressionWriter.writec                 C   s   |  j |7  _ d S r   )r   r   r   r   r   r   ð  s    zExpressionWriter.putc                 C   s&   | j  |¡r"| j d t|ƒ … | _ d S r   )r   Úendswithr3   r   r   r   r   Úremoveó  s    zExpressionWriter.removec                 C   sD   t |ƒdkr@|d d… D ]}|  |¡ |  d¡ q|  |d ¡ d S )Nr   r0   r2   )r3   r#   r   )r   r5   r7   r   r   r   r8   ÷  s
    
z%ExpressionWriter.comma_separated_listc                 C   s   t d| ƒ‚d S r<   r=   r9   r   r   r   r?   þ  s    zExpressionWriter.visit_Nodec                 C   s   |   |j¡ d S r   ©r   rw   r9   r   r   r   Úvisit_IntNode  s    zExpressionWriter.visit_IntNodec                 C   s   |   |j¡ d S r   rÈ   r9   r   r   r   Úvisit_FloatNode  s    z ExpressionWriter.visit_FloatNodec                 C   s   |   d¡ d S )NÚNone©r   r9   r   r   r   Úvisit_NoneNode	  s    zExpressionWriter.visit_NoneNodec                 C   s   |   |j¡ d S r   rU   r9   r   r   r   r     s    zExpressionWriter.visit_NameNodec                 C   s   |   d¡ d S )Nz...rÌ   r9   r   r   r   Úvisit_EllipsisNode  s    z#ExpressionWriter.visit_EllipsisNodec                 C   s   |   t|jƒ¡ d S r   ©r   Ústrrw   r9   r   r   r   Úvisit_BoolNode  s    zExpressionWriter.visit_BoolNodec                 C   s   |   t|jƒ¡ d S r   rÏ   r9   r   r   r   Úvisit_ConstNode  s    z ExpressionWriter.visit_ConstNodec                 C   s   |   |j› d¡ d S )NÚjrÈ   r9   r   r   r   Úvisit_ImagNode  s    zExpressionWriter.visit_ImagNodec                 C   s   |   t|jƒ¡ d S r   ©r   Úreprrw   r9   r   r   r   Úvisit_BytesNode  s    z ExpressionWriter.visit_BytesNodec                 C   s   |   t|jƒ¡ d S r   rÕ   r9   r   r   r   Úvisit_UnicodeNode  s    z"ExpressionWriter.visit_UnicodeNode©r   r   c                 C   s2   |\}}|  ¡ }|  |¡ |  |¡ |  |¡ d S r   )Úsubexpr_nodesr   r8   )r   r:   ÚparensÚ
open_parenÚclose_parenr5   r   r   r   Úemit_sequence!  s
    

zExpressionWriter.emit_sequencec                 C   s   |   |d¡ d S )Nú[]©rÞ   r9   r   r   r   Úvisit_ListNode(  s    zExpressionWriter.visit_ListNodec                 C   s   |   |d¡ d S )Nú()rà   r9   r   r   r   Úvisit_TupleNode+  s    z ExpressionWriter.visit_TupleNodec                 C   s,   t | ¡ ƒdkr|  |d¡ n
|  d¡ d S )Nr   ú{}zset())r3   rÚ   rÞ   r   r9   r   r   r   Úvisit_SetNode.  s    zExpressionWriter.visit_SetNodec                 C   s   |   |d¡ d S )Nrä   rà   r9   r   r   r   Úvisit_DictNode4  s    zExpressionWriter.visit_DictNodec                 C   s&   |   |j¡ |  d¡ |   |j¡ d S ©Nz: )r#   Úkeyr   rw   r9   r   r   r   Úvisit_DictItemNode7  s    
z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~r   é   é   é   é   é   é   é	   é
   é   )ÚorÚandÚinZnot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|ú^rI   z<<z>>rî   rï   r   r   ú/z//ú%ú**c                 C   s,   | j d }||kr|  d¡ | j  |¡ d S )Nr0   rQ   )rÅ   r   r   )r   Únew_precÚold_precr   r   r   Úoperator_enterO  s    

zExpressionWriter.operator_enterc                 C   s2   | j dd … \}}||kr$|  d¡ | j  ¡  d S )NéþÿÿÿrR   )rÅ   r   Úpop)r   r  r  r   r   r   Úoperator_exitU  s    
zExpressionWriter.operator_exitc                 C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )Nrì   znot )Úunop_precedencer  r   r#   Úoperandr  ©r   r:   ÚopÚprecr   r   r   Úvisit_NotNode[  s    


zExpressionWriter.visit_NotNodec                 C   sB   |j }| j| }|  |¡ |  d|j  ¡ |  |j¡ |  ¡  d S )Nz%s)r°   r  r  r   r#   r  r  r  r   r   r   Úvisit_UnopNodec  s    

zExpressionWriter.visit_UnopNodec                 C   sX   |j }| j |d¡}|  |¡ |  |j¡ |  d| dd¡ ¡ |  |j¡ |  	¡  d S )Nr   z %s Ú_rc   )
r°   Úbinop_precedenceÚgetr  r#   Úoperand1r   ÚreplaceÚoperand2r  r  r   r   r   Úvisit_BinopNodek  s    
z ExpressionWriter.visit_BinopNodec                 C   s   |   |¡ d S r   ©r  r9   r   r   r   Úvisit_BoolBinopNodet  s    z$ExpressionWriter.visit_BoolBinopNodec                 C   s   |   |¡ d S r   r  r9   r   r   r   Úvisit_PrimaryCmpNodew  s    z%ExpressionWriter.visit_PrimaryCmpNodec                 C   s`   |   |j¡ |  d¡ t|jtƒrF|j ¡ r:|  |j¡ qR|  d¡ n|   |j¡ |  d¡ d S )NrL   râ   rM   )r#   rG   r   r‡   ÚindexÚ	TupleNoderÚ   rÞ   r9   r   r   r   Úvisit_IndexNodez  s    

z ExpressionWriter.visit_IndexNodec                 C   sn   |   |j¡ |  d¡ |jr(|   |j¡ |  d¡ |jrD|   |j¡ |jr`|  d¡ |   |j¡ |  d¡ d S )NrL   rf   rM   )r#   rG   r   ÚstartÚstopÚslicer9   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 )Nrf   )r   Zis_noner#   r   r!  Ústepr9   r   r   r   Úvisit_SliceNode“  s    

z ExpressionWriter.visit_SliceNodec                 C   s<   |   |j¡ |  d¡ |   |j¡ |  d¡ |   |j¡ d S )Nú if z else )r#   Ztrue_valr   ÚtestZ	false_valr9   r   r   r   Úvisit_CondExprNode  s
    

z#ExpressionWriter.visit_CondExprNodec                 C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r#   Úobjr   rl   r9   r   r   r   Úvisit_AttributeNode¤  s    z$ExpressionWriter.visit_AttributeNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S rP   )r#   Úfunctionr   r8   rS   r9   r   r   r   Úvisit_SimpleCallNode¨  s    
z%ExpressionWriter.visit_SimpleCallNodec                 C   s¢   |d krd S t |tƒr0|  |j¡ |  |j¡ nnt |tƒr^| ¡ D ]}|  |¡ |  d¡ qBn@t |t	ƒrŠ|  d¡ |  |j
¡ |  d¡ n|  |¡ |  d¡ d S )Nr2   r   )r‡   ZAddNodeÚemit_pos_argsr  r  r  rÚ   r#   r   ZAsTupleNodeÚarg©r   r:   r®   r   r   r   r-  ®  s    





zExpressionWriter.emit_pos_argsc                 C   s”   |d krd S t |tƒr0| ¡ D ]}|  |¡ qn`t |tƒrr| ¡ D ],}|  d|jj ¡ |  |j¡ |  d¡ qBn|  d¡ |  |¡ |  d¡ d S )Nz%s=r2   r  )	r‡   ZMergedDictNoderÚ   Úemit_kwd_argsZDictNoder   rè   rw   r#   r/  r   r   r   r0  À  s    



zExpressionWriter.emit_kwd_argsc                 C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )NrQ   r2   rR   )r#   r+  r   r-  r_   r0  r`   rÇ   r9   r   r   r   Úvisit_GeneralCallNodeÐ  s    

z&ExpressionWriter.visit_GeneralCallNodec                 C   sj   |\}}|   |¡ |  |¡ |   d¡ |  |¡ |   d¡ |  |¡ |r\|   d¡ |  |¡ |   |¡ d S )Nz for r   r&  )r   r#   )r   rC   rŸ   r¡   r¥   rÛ   rÜ   rÝ   r   r   r   Úemit_comprehensionØ  s    







z#ExpressionWriter.emit_comprehensionc                 C   s   |   |j¡ d S r   )r#   r®   r9   r   r   r   Úvisit_ComprehensionAppendNodeç  s    z.ExpressionWriter.visit_ComprehensionAppendNodec                 C   s&   |   |j¡ |  d¡ |   |j¡ d S rç   )r#   Zkey_exprr   Z
value_exprr9   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 )Nrß   rä   )ÚlistÚdictÚsetr¤   r   )ÚtypeZpy_type_nameÚlooprC   rŸ   r    r¡   Úhasattrr¤   r¥   r2  )r   r:   ZtpmaprÛ   rC   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®   râ   )r9  rC   rŸ   r    r¡   r:  r¤   r¥   r®   r.  r2  )r   r:   rC   rŸ   r¡   r¥   r   r   r   Úvisit_GeneratorExpressionNodeü  s    


z.ExpressionWriter.visit_GeneratorExpressionNode)N)rÙ   )rÙ   )2r   r   r   r“   r   r&   r   rÇ   r8   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-  r0  r1  r2  r3  r4  r;  r<  r”   r   r   r    r   rÄ   à  sš   
   þ               ô	

 þ
rÄ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	PxdWriterz\
    A Cython code writer for everything supported in pxd files.
    (currently unused)
    c                 C   s   t d |  |¡j¡ƒ |S )NÚ
)Úprintrt   r&   r   r9   r   r   r   Ú__call__  s    zPxdWriter.__call__c                 C   s~   |j r|  d¡ n
|  d¡ |jr>|  d |j¡¡ |  d¡ |jdkr^|  |j¡ |  d¡ |jrn|  d¡ |  |j¡ d S )Nr€   rb   rc   r   r‚   )	rƒ   r,   r„   r   rt   rp   r…   r#   r[   r9   r   r   r   r†     s    




zPxdWriter.visit_CFuncDefNodec                 C   s   d S r   r   r9   r   r   r   Úvisit_StatNode$  s    zPxdWriter.visit_StatNodeN)r   r   r   r“   r@  r†   rA  r   r   r   r   r=    s   r=  c                   @   s   e Zd ZdZdS )Ú
CodeWriterz(
    A complete Cython code writer.
    N)r   r   r   r“   r   r   r   r   rB  (  s   rB  N)r“   ZCompiler.Visitorr   ZCompiler.ExprNodesZCompiler.Nodesr   r   r   r•   rÄ   r=  rB  r   r   r   r   Ú<module>   s     +   -