o
    ¯N iÔ^  ã                   @   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   úE/home/ubuntu/.local/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   ©ÚvisitchildrenrB   r   r   r   Úvisit_ModuleNode^   ó   z"DeclarationWriter.visit_ModuleNodec                 C   rH   r   rI   rB   r   r   r   Úvisit_StatListNodea   rL   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:)Ú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   rR   )Nú&rS   rB   r   r   r   Úvisit_CReferenceDeclaratorNodep   rV   z0DeclarationWriter.visit_CReferenceDeclaratorNodec                 C   s:   |   |j¡ |  d¡ |jd ur|   |j¡ |  d¡ d S ©Nú[ú])r'   rT   r   Ú	dimensionrB   r   r   r   Úvisit_CArrayDeclaratorNodet   s
   

z,DeclarationWriter.visit_CArrayDeclaratorNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S ©Nú(ú))r'   rT   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 )Úis_basic_c_typer   ÚsignedÚlongnessre   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'   rk   r   re   rB   r   r   r   Úvisit_CNestedBaseTypeNode”   ó   
z+DeclarationWriter.visit_CNestedBaseTypeNodec                 C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S rY   )r'   Úbase_type_noder   rA   Úpositional_argsÚkeyword_argsÚ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'   rk   r   rA   Ú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 )Nrw   ú "%s"ú:Úpass)	r2   re   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 rv   Úpubliczpublic zpacked )Útypedef_flagÚ
visibilityÚpackedÚkindr‚   r€   )r   rC   r~   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)Ú	templatesÚjoinÚbase_classesr‚   r€   )r   rC   r   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 )Nrz   r:   )r2   re   r}   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_   rn   r`   r{   )Úmodule_nameÚ
decoratorsr'   r2   r   Ú
class_nameÚbase_class_nameÚbase_class_moduler6   rD   rO   )r   rC   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÙ   s   






z%DeclarationWriter.visit_CClassDefNodec                 C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nrƒ   rw   )r2   r'   rk   r   rl   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   re   rA   ra   r6   rD   rO   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 rv   rw   Úprivateúapi r_   rš   )r2   ÚoverridableÚ	modifiersr   r‹   r†   Úapirk   r'   re   rl   rT   rA   ra   r6   rD   rO   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 )Nrw   r:   )	Ú
isinstancerk   r   re   r'   rl   Ú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’   Úimported_namesr6   )r   rC   ÚfirstÚposre   r§   rˆ   r   r   r   Úvisit_FromCImportStatNode*  s   





€z+DeclarationWriter.visit_FromCImportStatNodec                 C   rc   r   rd   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 )Nr|   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   rK   rM   rQ   rU   rX   r]   rb   rf   rj   rm   ro   ru   ry   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   Ú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   Ú	arg_tuplera   Ú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 r{   úelse:)r2   ÚtargetÚis_sequence_constructorrA   ra   r'   r   ÚiteratorÚsequencer6   rD   rO   Ú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   r{   r   zelif r¿   )	r2   r'   Ú
if_clausesÚ	conditionr6   rD   rO   rÄ   r8   )r   rC   Ú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 r{   r¿   )r2   r'   rÇ   r6   rD   rO   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Š  rL   z&StatementWriter.visit_ContinueStatNodec                 C   rË   )NÚbreakrÍ   rB   r   r   r   Úvisit_BreakStatNode  rL   z#StatementWriter.visit_BreakStatNodec                 C   rc   r   )rA   ra   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¦   r{   )r2   r   r'   ÚmanagerrÀ   r6   rD   rO   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   rO   Ú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   rO   Ú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Úexceptrw   r;   r{   )r2   Úpatternr   r'   rÀ   r6   rD   rO   rB   r   r   r   Úvisit_ExceptClauseNode·  s   





z&StatementWriter.visit_ExceptClauseNodec                 C   s6   |   d¡ |jd ur|  d¡ |  |j¡ |  ¡  d S )NÚreturnrw   )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É  rL   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)Útempsr"   r!   r'   rO   )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   rc   r   ©r   r   rB   r   r   r   Úvisit_IntNode  r5   zExpressionWriter.visit_IntNodec                 C   rc   r   rñ   rB   r   r   r   Úvisit_FloatNode
  r5   z ExpressionWriter.visit_FloatNodec                 C   rË   )NÚNone©r   rB   r   r   r   Úvisit_NoneNode  rL   zExpressionWriter.visit_NoneNodec                 C   rc   r   rd   rB   r   r   r   r­     r5   zExpressionWriter.visit_NameNodec                 C   rË   )Nrð   rõ   rB   r   r   r   Úvisit_EllipsisNode  rL   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;  rp   z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~Úorr   Úandé   Úiné   Únot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|é   ú^é   rW   é   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   r5  r4  r   r   r   Úoperator_exitY  s   
zExpressionWriter.operator_exitc                 C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )Nr  znot )Úunop_precedencer6  r   r'   Úoperandr9  ©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:  r6  r   r'   r;  r9  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 Ú_rw   )
rÔ   Úbinop_precedenceÚgetr6  r'   Úoperand1r   ÚreplaceÚoperand2r9  r<  r   r   r   Úvisit_BinopNodeo  s   
z ExpressionWriter.visit_BinopNodec                 C   rH   r   ©rG  rB   r   r   r   Úvisit_BoolBinopNodex  rL   z$ExpressionWriter.visit_BoolBinopNodec                 C   rH   r   rH  rB   r   r   r   Úvisit_PrimaryCmpNode{  rL   z%ExpressionWriter.visit_PrimaryCmpNodec                 C   s`   |   |j¡ |  d¡ t|jtƒr#|j ¡ r|  |j¡ n|  d¡ n|   |j¡ |  d¡ d S )NrZ   r  r[   )r'   rT   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 )NrZ   r{   r[   )r'   rT   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 )Nr{   )rN  Úis_noner'   r   rO  Ú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'   Útrue_valr   ÚtestÚ	false_valrB   r   r   r   Úvisit_CondExprNode¡  s
   

z#ExpressionWriter.visit_CondExprNodec                 C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r'   Úobjr   r   rB   r   r   r   Úvisit_AttributeNode¨  s   z$ExpressionWriter.visit_AttributeNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S r^   )r'   Úfunctionr   rA   ra   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£   ÚAddNodeÚemit_pos_argsrD  rF  rL  r  r'   r   ÚAsTupleNodeÚarg©r   rC   rÒ   r   r   r   r_  ²  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;   r3  )	r£   ÚMergedDictNoder  Úemit_kwd_argsÚDictNoder   r  r   r'   rb  r   r   r   rd  Ä  s   
ÿ
ý

zExpressionWriter.emit_kwd_argsc                 C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )Nr_   r;   r`   )r'   r\  r   r_  rr   rd  rs   rï   rB   r   r   r   Úvisit_GeneralCallNodeÔ  s   

z&ExpressionWriter.visit_GeneralCallNodec                 C   sj   |\}}|   |¡ |  |¡ |   d¡ |  |¡ |   d¡ |  |¡ |r.|   d¡ |  |¡ |   |¡ d S )Nz for r¾   rU  )r   r'   )r   rO   rÀ   rÃ   rÇ   r  r  r  r   r   r   Úemit_comprehensionÜ  s   







z#ExpressionWriter.emit_comprehensionc                 C   rc   r   )r'   rÒ   rB   r   r   r   Úvisit_ComprehensionAppendNodeë  r5   z.ExpressionWriter.visit_ComprehensionAppendNodec                 C   r  r  )r'   Úkey_exprr   Ú
value_exprrB   r   r   r   Ú!visit_DictComprehensionAppendNodeî  rp   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   )ÚtypeÚpy_type_nameÚlooprO   rÀ   rÂ   rÃ   ÚhasattrrÆ   rÇ   rg  )r   rC   Útpmapr  rO   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  )rq  rO   rÀ   rÂ   rÃ   rr  rÆ   rÇ   rÒ   ra  rg  )r   rC   rO   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:  rB  r6  r9  r?  r@  rG  rI  rJ  rM  rQ  rT  rY  r[  r]  r_  rd  rf  rg  rh  rk  rt  ru  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œ   rv   rw   r   rž   )	rŸ   r2   r    r   r‹   r†   r¡   r'   rl   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±   ry  r¢   rz  r   r   r   r   rv    s
    rv  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   r{  ,  s    r{  N)r±   ÚCompiler.Visitorr   ÚCompiler.ExprNodesÚCompiler.Nodesr   r   r   r³   rë   rv  r{  r   r   r   r   Ú<module>   s      +   1