o
    ÕjÔ^  ã                   @   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   úR/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/Cython/CodeWriter.pyÚ__init__   s   
zLinesResult.__init__c                 C   ó   |  j |7  _ d S ©N)r	   ©r   r	   r   r   r   Úput   ó   zLinesResult.putc                 C   s   | j  | j¡ d| _d S r   )r   Úappendr	   r
   r   r   r   Únewline   s   
zLinesResult.newlinec                 C   ó   |   |¡ |  ¡  d S r   )r   r   r   r   r   r   Úputline   ó   
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dWdd„Zdd„ ZdXd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 )YÚDeclarationWriterzE
    A Cython code writer that is limited to declarations nodes.
    z    Nc                    s4   t ƒ  ¡  |d u 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   ó   |   |¡ | jS r   ©Úvisitr   ©r   Útreer   r   r   Úwrite/   ó   
zDeclarationWriter.writec                 C   s   |  j d7  _ d S ©Nr   ©r    r
   r   r   r   Úindent3   r   zDeclarationWriter.indentc                 C   s   |  j d8  _ d S r,   r-   r
   r   r   r   Údedent6   r   zDeclarationWriter.dedentr   c                 C   ó   | j  | j| j | ¡ d S r   )r   r   Úindent_stringr    r   r   r   r   Ú	startline9   ó   zDeclarationWriter.startlinec                 C   ó   | j  |¡ d S r   )r   r   r   r   r   r   r   <   ó   zDeclarationWriter.putc                 C   r0   r   )r   r   r1   r    r   r   r   r   r   ?   r3   zDeclarationWriter.putlinec                 C   r4   r   )r   r   r   r   r   r   ÚendlineB   r5   zDeclarationWriter.endlinec                 C   r   r   ©r2   r6   r   r   r   r   ÚlineE   r   zDeclarationWriter.lineFc                 C   s    t |ƒdkrJ|d d… D ]}|  |¡ |r%|jd ur%|  d¡ |  |j¡ |  d¡ q|  |d ¡ |rL|d jd urN|  d¡ |  |d j¡ d S d S d S 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| ƒ‚)Nú"Node not handled by serializer: %r)ÚAssertionErrorrB   r   r   r   Ú
visit_Node[   s   zDeclarationWriter.visit_Nodec                 C   ó   |   |¡ d S r   ©ZvisitchildrenrB   r   r   r   Úvisit_ModuleNode^   ó   z"DeclarationWriter.visit_ModuleNodec                 C   rH   r   rI   rB   r   r   r   Úvisit_StatListNodea   rK   z$DeclarationWriter.visit_StatListNodec                 C   s8   |j d u rd}nd|j  }|  d| ¡ |  |j¡ d S )Nr   z"%s"zcdef extern from %s:)Zinclude_filer   rD   Úbody)r   rC   Úfiler   r   r   Úvisit_CDefExternNoded   s
   

z&DeclarationWriter.visit_CDefExternNodec                 C   ó   |   d¡ |  |j¡ d S )Nr   ©r   r'   ÚbaserB   r   r   r   Úvisit_CPtrDeclaratorNodel   ó   
z*DeclarationWriter.visit_CPtrDeclaratorNodec                 C   rP   )Nú&rQ   rB   r   r   r   Úvisit_CReferenceDeclaratorNodep   rT   z0DeclarationWriter.visit_CReferenceDeclaratorNodec                 C   s:   |   |j¡ |  d¡ |jd ur|   |j¡ |  d¡ d S ©Nú[ú])r'   rR   r   Ú	dimensionrB   r   r   r   Úvisit_CArrayDeclaratorNodet   s
   

z,DeclarationWriter.visit_CArrayDeclaratorNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S ©Nú(ú))r'   rR   r   rA   Úargsr6   rB   r   r   r   Úvisit_CFuncDeclaratorNode{   s   
z+DeclarationWriter.visit_CFuncDeclaratorNodec                 C   ó   |   |j¡ d S r   ©r   ÚnamerB   r   r   r   Úvisit_CNameDeclaratorNode‚   r5   z+DeclarationWriter.visit_CNameDeclaratorNodec                 C   sl   |j r'|  d|j ¡ |jdk r|  d|j  ¡ n|jdkr'|  d|j ¡ |jd ur4|  |j¡ d S d S )N)z	unsigned r   zsigned r   zshort zlong )Zis_basic_c_typer   ÚsignedZlongnessrc   rB   r   r   r   Úvisit_CSimpleBaseTypeNode…   s   


ÿz+DeclarationWriter.visit_CSimpleBaseTypeNodec                 C   s   |   |j¡ |   |j¡ d S r   )r'   Ú	base_typeÚ
declaratorrB   r   r   r   Úvisit_CComplexBaseTypeNode   s   z,DeclarationWriter.visit_CComplexBaseTypeNodec                 C   s&   |   |j¡ |  d¡ |  |j¡ d S )NÚ.)r'   rg   r   rc   rB   r   r   r   Úvisit_CNestedBaseTypeNode”   ó   
z+DeclarationWriter.visit_CNestedBaseTypeNodec                 C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S rW   )r'   Zbase_type_noder   rA   Úpositional_argsÚkeyword_argsZkey_value_pairsrB   r   r   r   Úvisit_TemplatedTypeNode™   s   
z)DeclarationWriter.visit_TemplatedTypeNodec                 C   s<   |   d¡ |  |j¡ |  d¡ | j|jdd |  ¡  d S )Núcdef ú T)r?   )r2   r'   rg   r   rA   Zdeclaratorsr6   rB   r   r   r   Úvisit_CVarDefNodeŸ   s
   

z#DeclarationWriter.visit_CVarDefNodec                 C   s   |   |¡ |jr |  d¡ |  |j¡ |jd ur |  d|j ¡ |r'|  |¡ |  d¡ |  ¡  |s8|  d¡ n
|D ]}|  |¡ q:|  ¡  d S )Nrq   ú "%s"ú:Úpass)	r2   rc   r   Úcnamer6   r.   r   r'   r/   )r   rC   Ú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r|d7 }||j7 }|  ||d |j¡ d S )Nú	ctypedef rp   Úpubliczpublic zpacked )Ztypedef_flagÚ
visibilityÚpackedÚkindr{   ry   )r   rC   rw   r   r   r   Úvisit_CStructOrUnionDefNode¹   s   

z-DeclarationWriter.visit_CStructOrUnionDefNodec                 C   sJ   d}|j rdd |j ¡ }|jr|dd |j¡ 7 }|  |d||j¡ d S )Nr   z[%s]r;   z(%s)zcdef cppclass)Z	templatesÚjoinZbase_classesr{   ry   )r   rC   rx   r   r   r   Úvisit_CppClassNodeÅ   s   z$DeclarationWriter.visit_CppClassNodec                 C   s   |   |dd |j¡ d S )Nz	cdef enum)r{   r>   rB   r   r   r   Úvisit_CEnumDefNodeÍ   ó   z$DeclarationWriter.visit_CEnumDefNodec                 C   sJ   |   |j¡ |jr|  d|j ¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nrs   r:   )r2   rc   rv   r   Úvaluer'   r6   rB   r   r   r   Úvisit_CEnumDefItemNodeÐ   s   
z(DeclarationWriter.visit_CEnumDefItemNodec                 C   s˜   |j rJ ‚|jr|jD ]}|  |¡ q|  d¡ |  |j¡ |jr?|  d¡ |jr4|  |j¡ |  d¡ |  |j¡ |  d¡ |  d¡ |  	|j
¡ d S )Nzcdef class r]   rj   r^   rt   )Úmodule_nameZ
decoratorsr'   r2   r   Ú
class_nameZbase_class_nameZbase_class_moduler6   rD   rM   )r   rC   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÙ   s   






z%DeclarationWriter.visit_CClassDefNodec                 C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nr|   rq   )r2   r'   rg   r   rh   r6   rB   r   r   r   Úvisit_CTypeDefNodeê   s
   

z$DeclarationWriter.visit_CTypeDefNodec                 C   s6   |   d|j ¡ |  |j¡ |  d¡ |  |j¡ d S )Nzdef %s(ú):)r2   rc   rA   r_   r6   rD   rM   rB   r   r   r   Úvisit_FuncDefNodeñ   s   
z#DeclarationWriter.visit_FuncDefNodec                 C   sÎ   |   |jrdnd¡ |jr|  d |j¡¡ |  d¡ |jdkr+|  |j¡ |  d¡ |jr3|  d¡ |jrG|  |j¡ |jj	d urG|  d¡ |  |j
j¡ |  d¡ |  |j
j¡ |  d¡ |  |j¡ d S )Núcpdef rp   rq   Úprivateúapi r]   r   )r2   ÚoverridableÚ	modifiersr   r‚   r~   Úapirg   r'   rc   rh   rR   rA   r_   r6   rD   rM   rB   r   r   r   Úvisit_CFuncDefNodeø   s$   






z$DeclarationWriter.visit_CFuncDefNodec                 C   sl   t |jtƒr|jjd ur|  |j¡ |j ¡ r|  d¡ |  |j¡ |jd ur4|  d¡ |  |j¡ d S d S )Nrq   r:   )	Ú
isinstancerg   r   rc   r'   rh   Zdeclared_namer   r=   rB   r   r   r   Úvisit_CArgDeclNode  s   



þz$DeclarationWriter.visit_CArgDeclNodec                 C   s>   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nzcimport ú as )r2   r   rˆ   Úas_namer6   rB   r   r   r   Úvisit_CImportStatNode"  s   

z'DeclarationWriter.visit_CImportStatNodec                 C   s†   |   d¡ |  |j¡ |  d¡ d}|jD ]'\}}}}|d u s!J ‚|r&d}n|  d¡ |  |¡ |r<|  d¡ |  |¡ q|  ¡  d S )Nzfrom z	 cimport TFr;   r˜   )r2   r   rˆ   Zimported_namesr6   )r   rC   ÚfirstÚposrc   r™   r€   r   r   r   Úvisit_FromCImportStatNode*  s   





€z+DeclarationWriter.visit_FromCImportStatNodec                 C   ra   r   rb   rB   r   r   r   Úvisit_NameNode;  r5   z DeclarationWriter.visit_NameNodec                 C   s"   |   d¡ |  |j¡ |  ¡  d S )Nú@)r2   r'   rŠ   r6   rB   r   r   r   Úvisit_DecoratorNode>  s   
z%DeclarationWriter.visit_DecoratorNodec                 C   s   |   d¡ |  ¡  d S )Nru   r7   rB   r   r   r   Úvisit_PassStatNodeC  r   z$DeclarationWriter.visit_PassStatNoder   )r   )F).r   r   r   Ú__doc__r1   r   r*   r.   r/   r2   r   r   r6   r8   rA   rD   rG   rJ   rL   rO   rS   rV   r[   r`   rd   rf   ri   rk   ro   rr   r{   r   rƒ   r„   r‡   r‹   rŒ   rŽ   r•   r—   rš   r   rž   r    r¡   Ú__classcell__r   r   r#   r   r      sV    	


	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 ©Nr:   )r2   r'   Úlhsr   Úrhsr6   rB   r   r   r   Úvisit_SingleAssignmentNodeM  s
   
z*StatementWriter.visit_SingleAssignmentNodec                 C   s@   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ |  ¡  d S r¥   )r2   Zlhs_listr'   r   r§   r6   )r   rC   r¦   r   r   r   Úvisit_CascadedAssignmentNodeT  s   

z,StatementWriter.visit_CascadedAssignmentNodec                 C   s4   |   d¡ |  |jj¡ |js|  d¡ |  ¡  d S )Nzprint ú,)r2   rA   Z	arg_tupler_   Zappend_newliner   r6   rB   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 ur@|  d¡ |  
|j¡ d S d S )Nzfor ú in rt   úelse:)r2   ÚtargetZis_sequence_constructorrA   r_   r'   r   ÚiteratorÚsequencer6   rD   rM   Úelse_clauser8   rB   r   r   r   Úvisit_ForInStatNodec  s   




þz#StatementWriter.visit_ForInStatNodec                 C   s    |   d¡ |  |jd j¡ |  d¡ |  |jd j¡ |jdd … D ]}|   d¡ |  |j¡ |  d¡ |  |j¡ q#|jd urN|  d¡ |  |j¡ d S d S )Nzif r   rt   r   zelif r­   )	r2   r'   Ú
if_clausesÚ	conditionr6   rD   rM   r±   r8   )r   rC   Zclauser   r   r   Úvisit_IfStatNodeq  s   





þz StatementWriter.visit_IfStatNodec                 C   sT   |   d¡ |  |j¡ |  d¡ |  |j¡ |jd ur(|  d¡ |  |j¡ d S d S )Nzwhile rt   r­   )r2   r'   r´   r6   rD   rM   r±   r8   rB   r   r   r   Úvisit_WhileStatNode  s   



þz#StatementWriter.visit_WhileStatNodec                 C   ó   |   d¡ d S )NÚcontinue©r8   rB   r   r   r   Úvisit_ContinueStatNodeŠ  rK   z&StatementWriter.visit_ContinueStatNodec                 C   r·   )NÚbreakr¹   rB   r   r   r   Úvisit_BreakStatNode  rK   z#StatementWriter.visit_BreakStatNodec                 C   ra   r   )rA   r_   rB   r   r   r   Úvisit_SequenceNode  r5   z"StatementWriter.visit_SequenceNodec                 C   s    |   ¡  |  |j¡ |  ¡  d S r   )r2   r'   Úexprr6   rB   r   r   r   Úvisit_ExprStatNode“  s   z"StatementWriter.visit_ExprStatNodec                 C   s<   |   ¡  |  |j¡ |  d|j ¡ |  |j¡ |  ¡  d S )Nz %s= )r2   r'   r¦   r   Úoperatorr§   r6   rB   r   r   r   Úvisit_InPlaceAssignmentNode˜  s
   z+StatementWriter.visit_InPlaceAssignmentNodec                 C   sX   |   ¡  |  d¡ |  |j¡ |jd ur|  d¡ |  |j¡ |  d¡ |  |j¡ d S )Nzwith r˜   rt   )r2   r   r'   Úmanagerr®   r6   rD   rM   rB   r   r   r   Úvisit_WithStatNodeŸ  s   



z"StatementWriter.visit_WithStatNodec                 C   s0   |   d¡ |  |j¡ |   d¡ |  |j¡ d S )Nútry:zfinally:)r8   rD   rM   Zfinally_clauserB   r   r   r   Úvisit_TryFinallyStatNode©  s   

z(StatementWriter.visit_TryFinallyStatNodec                 C   sJ   |   d¡ |  |j¡ |jD ]}|  |¡ q|jd ur#|  |j¡ d S d S )NrÄ   )r8   rD   rM   Zexcept_clausesr'   r±   )r   rC   Úxr   r   r   Úvisit_TryExceptStatNode¯  s   


ÿz'StatementWriter.visit_TryExceptStatNodec                 C   sd   |   d¡ |jd ur|  d¡ |  |j¡ |jd ur%|  d¡ |  |j¡ |  d¡ |  |j¡ d S )NÚexceptrq   r;   rt   )r2   Úpatternr   r'   r®   r6   rD   rM   rB   r   r   r   Úvisit_ExceptClauseNode·  s   





z&StatementWriter.visit_ExceptClauseNodec                 C   s6   |   d¡ |jd ur|  d¡ |  |j¡ |  ¡  d S )NÚreturnrq   )r2   r†   r   r'   r6   rB   r   r   r   Úvisit_ReturnStatNodeÂ  s
   


z$StatementWriter.visit_ReturnStatNodec                 C   r·   )NÚraiser¹   rB   r   r   r   Úvisit_ReraiseStatNodeÉ  rK   z%StatementWriter.visit_ReraiseStatNodec                 C   s   |   d|jj ¡ d S )Nz(import %s))r   rˆ   r†   rB   r   r   r   Úvisit_ImportNodeÌ  r…   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'   rM   )r   rC   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeÏ  s   

z$StatementWriter.visit_TempsBlockNodec                 C   s   |   | j|j ¡ d S r   )r   r!   rÑ   rB   r   r   r   Úvisit_TempRefNodeÜ  r…   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dz‡ 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d{d%d&„Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d1d2d2d2d3œZi d4d5“d6d7“d8d9“d:d9“d;d9“d<d9“d=d9“d>d9“d?d9“d@d9“dAd9“dBd9“dCdD“dEdF“dGdH“dIdJ“dKdJ“dLdLdMdMdMdMdMdNdOœ¥ZdPdQ„ ZdRdS„ ZdTdU„ ZdVdW„ ZdXdY„ Z dZd[„ Z!d\d]„ Z"d^d_„ Z#d`da„ Z$dbdc„ Z%ddde„ Z&dfdg„ Z'dhdi„ Z(djdk„ Z)dldm„ Z*dndo„ Z+	$d{dpdq„Z,drds„ Z-dtdu„ Z.dvdw„ Z/dxdy„ Z0‡  Z1S )|ÚExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    NFc                    s.   t ƒ  ¡  |d u rd}|| _|| _dg| _d S )Nr   r   )r   r   r   Úallow_unknown_nodesÚ
precedence)r   r   rÕ   r#   r   r   r   å  s   
zExpressionWriter.__init__c                 C   r%   r   r&   r(   r   r   r   r*   í  r+   zExpressionWriter.writec                 C   r   r   )r   r   r   r   r   r   ñ  r   zExpressionWriter.putc                 C   s*   | j  |¡r| j d t|ƒ … | _ d S d S r   )r   Úendswithr<   r   r   r   r   Úremoveô  s   ÿzExpressionWriter.removec                 C   sH   t |ƒdkr"|d d… D ]}|  |¡ |  d¡ q|  |d ¡ d S d S )Nr   r9   r;   )r<   r'   r   )r   r>   r@   r   r   r   rA   ø  s   
üz%ExpressionWriter.comma_separated_listc                 C   s    | j r
|  d¡ d S td| ƒ‚)Nú...rE   )rÕ   r   rF   rB   r   r   r   rG   ÿ  s   zExpressionWriter.visit_Nodec                 C   ra   r   ©r   r†   rB   r   r   r   Úvisit_IntNode  r5   zExpressionWriter.visit_IntNodec                 C   ra   r   rÚ   rB   r   r   r   Úvisit_FloatNode
  r5   z ExpressionWriter.visit_FloatNodec                 C   r·   )NÚNone©r   rB   r   r   r   Úvisit_NoneNode  rK   zExpressionWriter.visit_NoneNodec                 C   ra   r   rb   rB   r   r   r   rž     r5   zExpressionWriter.visit_NameNodec                 C   r·   )NrÙ   rÞ   rB   r   r   r   Úvisit_EllipsisNode  rK   z#ExpressionWriter.visit_EllipsisNodec                 C   ó   |   t|jƒ¡ d S r   ©r   Ústrr†   rB   r   r   r   Úvisit_BoolNode  ó   zExpressionWriter.visit_BoolNodec                 C   rá   r   râ   rB   r   r   r   Úvisit_ConstNode  rå   z ExpressionWriter.visit_ConstNodec                 C   s   |   |j› d¡ d S )NÚjrÚ   rB   r   r   r   Úvisit_ImagNode  r…   zExpressionWriter.visit_ImagNodec                 C   rá   r   ©r   Úreprr†   rB   r   r   r   Úvisit_BytesNode  rå   z ExpressionWriter.visit_BytesNodec                 C   rá   r   ré   rB   r   r   r   Úvisit_UnicodeNode"  rå   z"ExpressionWriter.visit_UnicodeNode©r   r   c                 C   s2   |\}}|  ¡ }|  |¡ |  |¡ |  |¡ d S r   )Úsubexpr_nodesr   rA   )r   rC   ÚparensÚ
open_parenÚclose_parenr>   r   r   r   Úemit_sequence%  s
   

zExpressionWriter.emit_sequencec                 C   ó   |   |d¡ d S )Nú[]©rò   rB   r   r   r   Úvisit_ListNode,  r5   zExpressionWriter.visit_ListNodec                 C   ró   )Nú()rõ   rB   r   r   r   Úvisit_TupleNode/  r5   z ExpressionWriter.visit_TupleNodec                 C   s.   t | ¡ ƒdkr|  |d¡ d S |  d¡ d S )Nr   ú{}zset())r<   rî   rò   r   rB   r   r   r   Úvisit_SetNode2  s   zExpressionWriter.visit_SetNodec                 C   ró   )Nrù   rõ   rB   r   r   r   Úvisit_DictNode8  r5   zExpressionWriter.visit_DictNodec                 C   ó&   |   |j¡ |  d¡ |   |j¡ d S ©Nz: )r'   Úkeyr   r†   rB   r   r   r   Úvisit_DictItemNode;  rl   z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~Úorr   Úandé   Úiné   Znot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|é   ú^é   rU   é   z<<é   z>>é	   é
   é   )r  r  r   rŸ   ú/z//ú%ú**c                 C   s,   | j d }||kr|  d¡ | j  |¡ d S )Nr9   r]   )rÖ   r   r   )r   Únew_precÚold_precr   r   r   Úoperator_enterS  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_exitY  s   
zExpressionWriter.operator_exitc                 C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )Nr  znot )Úunop_precedencer  r   r'   Úoperandr!  ©r   rC   Ú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_UnopNodeg  s   

zExpressionWriter.visit_UnopNodec                 C   sX   |j }| j |d¡}|  |¡ |  |j¡ |  d| dd¡ ¡ |  |j¡ |  	¡  d S )Nr   z %s Ú_rq   )
rÀ   Úbinop_precedenceÚgetr  r'   Úoperand1r   ÚreplaceÚoperand2r!  r$  r   r   r   Úvisit_BinopNodeo  s   
z ExpressionWriter.visit_BinopNodec                 C   rH   r   ©r/  rB   r   r   r   Úvisit_BoolBinopNodex  rK   z$ExpressionWriter.visit_BoolBinopNodec                 C   rH   r   r0  rB   r   r   r   Úvisit_PrimaryCmpNode{  rK   z%ExpressionWriter.visit_PrimaryCmpNodec                 C   s`   |   |j¡ |  d¡ t|jtƒr#|j ¡ r|  |j¡ n|  d¡ n|   |j¡ |  d¡ d S )NrX   r÷   rY   )r'   rR   r   r–   ÚindexÚ	TupleNoderî   rò   rB   r   r   r   Úvisit_IndexNode~  s   

z ExpressionWriter.visit_IndexNodec                 C   sn   |   |j¡ |  d¡ |jr|   |j¡ |  d¡ |jr"|   |j¡ |jr0|  d¡ |   |j¡ |  d¡ d S )NrX   rt   rY   )r'   rR   r   ÚstartÚstopÚslicerB   r   r   r   Úvisit_SliceIndexNodeŠ  s   


z%ExpressionWriter.visit_SliceIndexNodec                 C   sX   |j js
|  |j ¡ |  d¡ |jjs|  |j¡ |jjs*|  d¡ |  |j¡ d S d S )Nrt   )r6  Zis_noner'   r   r7  ÚsteprB   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_valrB   r   r   r   Úvisit_CondExprNode¡  s
   

z#ExpressionWriter.visit_CondExprNodec                 C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r'   Úobjr   rz   rB   r   r   r   Úvisit_AttributeNode¨  s   z$ExpressionWriter.visit_AttributeNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S r\   )r'   Úfunctionr   rA   r_   rB   r   r   r   Úvisit_SimpleCallNode¬  s   
z%ExpressionWriter.visit_SimpleCallNodec                 C   s¨   |d u rd S t |tƒr|  |j¡ |  |j¡ d S t |tƒr1| ¡ D ]}|  |¡ |  d¡ q"d S t |t	ƒrH|  d¡ |  |j
¡ |  d¡ d S |  |¡ |  d¡ d S )Nr;   r   )r–   ZAddNodeÚemit_pos_argsr,  r.  r4  rî   r'   r   ZAsTupleNodeÚarg©r   rC   r¾   r   r   r   rC  ²  s    


þ


zExpressionWriter.emit_pos_argsc                 C   s˜   |d u rd S t |tƒr| ¡ D ]}|  |¡ qd S t |tƒr;| ¡ D ]}|  d|jj ¡ |  |j¡ |  d¡ q"d S |  d¡ |  |¡ |  d¡ d S )Nz%s=r;   r  )	r–   ZMergedDictNoderî   Úemit_kwd_argsZDictNoder   rþ   r†   r'   rE  r   r   r   rF  Ä  s   
ÿ
ý

zExpressionWriter.emit_kwd_argsc                 C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )Nr]   r;   r^   )r'   rA  r   rC  rm   rF  rn   rØ   rB   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   rM   r®   r°   r´   rï   rð   rñ   r   r   r   Úemit_comprehensionÜ  s   







z#ExpressionWriter.emit_comprehensionc                 C   ra   r   )r'   r¾   rB   r   r   r   Úvisit_ComprehensionAppendNodeë  r5   z.ExpressionWriter.visit_ComprehensionAppendNodec                 C   rü   rý   )r'   Zkey_exprr   Z
value_exprrB   r   r   r   Ú!visit_DictComprehensionAppendNodeî  rl   z2ExpressionWriter.visit_DictComprehensionAppendNodec                 C   sp   ddddœ}||j  ¡  }|jj}|jj}|jjj}d }t|dƒr-|jd j	}|jd j}|  
|||||¡ d S )Nrô   rù   )ÚlistÚdictÚsetr³   r   )ÚtypeZpy_type_nameÚlooprM   r®   r¯   r°   Úhasattrr³   r´   rH  )r   rC   Ztpmaprï   rM   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ƒr#|jd j}|jd jjj	}n	t|dƒr,|jj	}|  
||||d¡ d S )Nr³   r   r¾   r÷   )rO  rM   r®   r¯   r°   rP  r³   r´   r¾   rD  rH  )r   rC   rM   r®   r°   r´   r   r   r   Úvisit_GeneratorExpressionNode   s   


z.ExpressionWriter.visit_GeneratorExpressionNode)NF)rí   )2r   r   r   r¢   r   r*   r   rØ   rA   rG   rÛ   rÜ   rß   rž   rà   rä   ræ   rè   rë   rì   rò   rö   rø   rú   rû   rÿ   r"  r*  r  r!  r'  r(  r/  r1  r2  r5  r9  r;  r>  r@  rB  rC  rF  rG  rH  rI  rJ  rQ  rR  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Ú
)Úprintr‚   r*   r   rB   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r7|  d¡ |  |j¡ d S )Nr   rp   rq   r   r‘   )	r’   r2   r“   r   r‚   r~   r”   r'   rh   rB   r   r   r   r•     s   




zPxdWriter.visit_CFuncDefNodec                 C   s   d S r   r   rB   r   r   r   Úvisit_StatNode(  s   zPxdWriter.visit_StatNodeN)r   r   r   r¢   rV  r•   rW  r   r   r   r   rS    s
    rS  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   rX  ,  s    rX  N)r¢   ZCompiler.Visitorr   ZCompiler.ExprNodesZCompiler.Nodesr   r   r   r¤   rÔ   rS  rX  r   r   r   r   Ú<module>   s      +   1