o
    wÖ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   úN/home/ubuntu/sommelier/.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   r1   r   )r   r   r2   r    r   r   r   r   r   ?   r4   zDeclarationWriter.putlinec                 C   r5   r   )r   r   r   r   r   r   ÚendlineB   r6   zDeclarationWriter.endlinec                 C   r   r   ©r3   r7   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(   r0   ©r   Únoder   r   r   Ú_visit_indentedV   s   
z!DeclarationWriter._visit_indentedc                 C   ó   t d| ƒ‚©Nz"Node not handled by serializer: %r©ÚAssertionErrorrC   r   r   r   Ú
visit_Node[   ó   zDeclarationWriter.visit_Nodec                 C   ó   |   |¡ d S r   ©ÚvisitchildrenrC   r   r   r   Úvisit_ModuleNode^   ó   z"DeclarationWriter.visit_ModuleNodec                 C   rL   r   rM   rC   r   r   r   Úvisit_StatListNodea   rP   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   rE   Úbody)r   rD   Úfiler   r   r   Úvisit_CDefExternNoded   s
   

z&DeclarationWriter.visit_CDefExternNodec                 C   ó   |   d¡ |  |j¡ d S )Nr   ©r   r(   ÚbaserC   r   r   r   Úvisit_CPtrDeclaratorNodel   ó   
z*DeclarationWriter.visit_CPtrDeclaratorNodec                 C   rV   )Nú&rW   rC   r   r   r   Úvisit_CReferenceDeclaratorNodep   rZ   z0DeclarationWriter.visit_CReferenceDeclaratorNodec                 C   s:   |   |j¡ |  d¡ |jd ur|   |j¡ |  d¡ d S ©Nú[ú])r(   rX   r   Ú	dimensionrC   r   r   r   Úvisit_CArrayDeclaratorNodet   s
   

z,DeclarationWriter.visit_CArrayDeclaratorNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S ©Nú(ú))r(   rX   r   rB   Úargsr7   rC   r   r   r   Úvisit_CFuncDeclaratorNode{   s   
z+DeclarationWriter.visit_CFuncDeclaratorNodec                 C   ó   |   |j¡ d S r   ©r   ÚnamerC   r   r   r   Úvisit_CNameDeclaratorNode‚   r6   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Úlongnessri   rC   r   r   r   Úvisit_CSimpleBaseTypeNode…   s   


ÿz+DeclarationWriter.visit_CSimpleBaseTypeNodec                 C   s   |   |j¡ |   |j¡ d S r   )r(   Ú	base_typeÚ
declaratorrC   r   r   r   Úvisit_CComplexBaseTypeNode   s   z,DeclarationWriter.visit_CComplexBaseTypeNodec                 C   s&   |   |j¡ |  d¡ |  |j¡ d S )NÚ.)r(   ro   r   ri   rC   r   r   r   Úvisit_CNestedBaseTypeNode”   ó   
z+DeclarationWriter.visit_CNestedBaseTypeNodec                 C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S r]   )r(   Úbase_type_noder   rB   Úpositional_argsÚkeyword_argsÚkey_value_pairsrC   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@   )r3   r(   ro   r   rB   Údeclaratorsr7   rC   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 )Nr{   ú "%s"ú:Úpass)	r3   ri   r   Úcnamer7   r/   r   r(   r0   )r   rD   Ú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 rz   Úpubliczpublic zpacked )Útypedef_flagÚ
visibilityÚpackedÚkindr†   r„   )r   rD   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   rD   rƒ   r   r   r   Úvisit_CppClassNodeÅ   s   z$DeclarationWriter.visit_CppClassNodec                 C   s   |   |dd |j¡ d S )Nz	cdef enum)r†   r?   rC   r   r   r   Úvisit_CEnumDefNodeÍ   ó   z$DeclarationWriter.visit_CEnumDefNodec                 C   sJ   |   |j¡ |jr|  d|j ¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nr~   r;   )r3   ri   r   r   Úvaluer(   r7   rC   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 rc   rr   rd   r   )Úmodule_nameÚ
decoratorsr(   r3   r   Ú
class_nameÚbase_class_nameÚbase_class_moduler7   rE   rS   )r   rD   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÙ   s   






z%DeclarationWriter.visit_CClassDefNodec                 C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nr‡   r{   )r3   r(   ro   r   rp   r7   rC   r   r   r   Úvisit_CTypeDefNodeê   s
   

z$DeclarationWriter.visit_CTypeDefNodec                 C   s6   |   d|j ¡ |  |j¡ |  d¡ |  |j¡ d S )Nzdef %s(ú):)r3   ri   rB   re   r7   rE   rS   rC   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 rz   r{   Úprivateúapi rc   rž   )r3   ÚoverridableÚ	modifiersr   r   rŠ   Úapiro   r(   ri   rp   rX   rB   re   r7   rE   rS   rC   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 )Nr{   r;   )	Ú
isinstancero   r   ri   r(   rp   Údeclared_namer   r>   rC   r   r   r   Úvisit_CArgDeclNode  s   



þz$DeclarationWriter.visit_CArgDeclNodec                 C   s>   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nzcimport ú as )r3   r   r–   Úas_namer7   rC   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ª   )r3   r   r–   Úimported_namesr7   )r   rD   ÚfirstÚposri   r«   rŒ   r   r   r   Úvisit_FromCImportStatNode*  s   





€z+DeclarationWriter.visit_FromCImportStatNodec                 C   rg   r   rh   rC   r   r   r   Úvisit_NameNode;  r6   z DeclarationWriter.visit_NameNodec                 C   s"   |   d¡ |  |j¡ |  ¡  d S )Nú@)r3   r(   r›   r7   rC   r   r   r   Úvisit_DecoratorNode>  s   
z%DeclarationWriter.visit_DecoratorNodec                 C   s   |   d¡ |  ¡  d S )Nr€   r8   rC   r   r   r   Úvisit_PassStatNodeC  r   z$DeclarationWriter.visit_PassStatNoder   )r   )F).r   r   r   Ú__doc__r2   r   r+   r/   r0   r3   r   r   r7   r9   rB   rE   rJ   rO   rQ   rU   rY   r\   ra   rf   rj   rn   rq   rs   ry   r}   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;   )r3   r(   Úlhsr   Úrhsr7   rC   r   r   r   Úvisit_SingleAssignmentNodeM  s
   
z*StatementWriter.visit_SingleAssignmentNodec                 C   s@   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ |  ¡  d S r¸   )r3   Úlhs_listr(   r   rº   r7   )r   rD   r¹   r   r   r   Úvisit_CascadedAssignmentNodeT  s   

z,StatementWriter.visit_CascadedAssignmentNodec                 C   s4   |   d¡ |  |jj¡ |js|  d¡ |  ¡  d S )Nzprint ú,)r3   rB   Ú	arg_tuplere   Úappend_newliner   r7   rC   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:)r3   ÚtargetÚis_sequence_constructorrB   re   r(   r   ÚiteratorÚsequencer7   rE   rS   Úelse_clauser9   rC   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Ã   )	r3   r(   Ú
if_clausesÚ	conditionr7   rE   rS   rÈ   r9   )r   rD   Ú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Ã   )r3   r(   rË   r7   rE   rS   rÈ   r9   rC   r   r   r   Úvisit_WhileStatNode  s   



þz#StatementWriter.visit_WhileStatNodec                 C   ó   |   d¡ d S )NÚcontinue©r9   rC   r   r   r   Úvisit_ContinueStatNodeŠ  rP   z&StatementWriter.visit_ContinueStatNodec                 C   rÏ   )NÚbreakrÑ   rC   r   r   r   Úvisit_BreakStatNode  rP   z#StatementWriter.visit_BreakStatNodec                 C   rg   r   )rB   re   rC   r   r   r   Úvisit_SequenceNode  r6   z"StatementWriter.visit_SequenceNodec                 C   s    |   ¡  |  |j¡ |  ¡  d S r   )r3   r(   Úexprr7   rC   r   r   r   Úvisit_ExprStatNode“  s   z"StatementWriter.visit_ExprStatNodec                 C   s<   |   ¡  |  |j¡ |  d|j ¡ |  |j¡ |  ¡  d S )Nz %s= )r3   r(   r¹   r   Úoperatorrº   r7   rC   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   )r3   r   r(   ÚmanagerrÄ   r7   rE   rS   rC   r   r   r   Úvisit_WithStatNodeŸ  s   



z"StatementWriter.visit_WithStatNodec                 C   s0   |   d¡ |  |j¡ |   d¡ |  |j¡ d S )Nútry:zfinally:)r9   rE   rS   Úfinally_clauserC   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Ü   )r9   rE   rS   Úexcept_clausesr(   rÈ   )r   rD   Ú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Úexceptr{   r<   r   )r3   Úpatternr   r(   rÄ   r7   rE   rS   rC   r   r   r   Úvisit_ExceptClauseNode·  s   





z&StatementWriter.visit_ExceptClauseNodec                 C   s6   |   d¡ |jd ur|  d¡ |  |j¡ |  ¡  d S )NÚreturnr{   )r3   r”   r   r(   r7   rC   r   r   r   Úvisit_ReturnStatNodeÂ  s
   


z$StatementWriter.visit_ReturnStatNodec                 C   rÏ   )NÚraiserÑ   rC   r   r   r   Úvisit_ReraiseStatNodeÉ  rP   z%StatementWriter.visit_ReraiseStatNodec                 C   s   |   d|jj ¡ d S )Nz(import %s))r   r–   r”   rC   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(   rS   )r   rD   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeÏ  s   

z$StatementWriter.visit_TempsBlockNodec                 C   s   |   | j|j ¡ d S r   )r   r!   rì   rC   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dy‡ 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dzd$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d0d1d1d1d2œZi d3d4“d5d6“d7d8“d9d8“d:d8“d;d8“d<d8“d=d8“d>d8“d?d8“d@d8“dAd8“dBdC“dDdE“dFdG“dHdI“dJdI“dKdKdLdLdLdLdLdMdNœ¥ZdOdP„ ZdQdR„ ZdSdT„ ZdUdV„ ZdWdX„ Z dYdZ„ Z!d[d\„ Z"d]d^„ Z#d_d`„ Z$dadb„ Z%dcdd„ Z&dedf„ Z'dgdh„ Z(didj„ Z)dkdl„ Z*dmdn„ Z+	#dzdodp„Z,dqdr„ Z-dsdt„ Z.dudv„ Z/dwdx„ Z0‡  Z1S ){ÚExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    Nc                    s(   t ƒ  ¡  |d u rd}|| _dg| _d S )Nr   r   )r   r   r   Ú
precedencer#   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   r:   r<   )r=   r(   r   )r   r?   rA   r   r   r   rB   ÷  s   
üz%ExpressionWriter.comma_separated_listc                 C   rF   rG   rH   rC   r   r   r   rJ   þ  rK   zExpressionWriter.visit_Nodec                 C   rg   r   ©r   r”   rC   r   r   r   Úvisit_IntNode  r6   zExpressionWriter.visit_IntNodec                 C   rg   r   ró   rC   r   r   r   Úvisit_FloatNode  r6   z ExpressionWriter.visit_FloatNodec                 C   rÏ   )NÚNone©r   rC   r   r   r   Úvisit_NoneNode	  rP   zExpressionWriter.visit_NoneNodec                 C   rg   r   rh   rC   r   r   r   r±     r6   zExpressionWriter.visit_NameNodec                 C   rÏ   )Nz...r÷   rC   r   r   r   Úvisit_EllipsisNode  rP   z#ExpressionWriter.visit_EllipsisNodec                 C   ó   |   t|jƒ¡ d S r   ©r   Ústrr”   rC   r   r   r   Úvisit_BoolNode  ó   zExpressionWriter.visit_BoolNodec                 C   rú   r   rû   rC   r   r   r   Úvisit_ConstNode  rþ   z ExpressionWriter.visit_ConstNodec                 C   s   |   |j› d¡ d S )NÚjró   rC   r   r   r   Úvisit_ImagNode  r“   zExpressionWriter.visit_ImagNodec                 C   rú   r   ©r   Úreprr”   rC   r   r   r   Úvisit_BytesNode  rþ   z ExpressionWriter.visit_BytesNodec                 C   rú   r   r  rC   r   r   r   Úvisit_UnicodeNode  rþ   z"ExpressionWriter.visit_UnicodeNode©r   r   c                 C   s2   |\}}|  ¡ }|  |¡ |  |¡ |  |¡ d S r   )Úsubexpr_nodesr   rB   )r   rD   ÚparensÚ
open_parenÚclose_parenr?   r   r   r   Úemit_sequence!  s
   

zExpressionWriter.emit_sequencec                 C   ó   |   |d¡ d S )Nú[]©r  rC   r   r   r   Úvisit_ListNode(  r6   zExpressionWriter.visit_ListNodec                 C   r  )Nú()r  rC   r   r   r   Úvisit_TupleNode+  r6   z ExpressionWriter.visit_TupleNodec                 C   s.   t | ¡ ƒdkr|  |d¡ d S |  d¡ d S )Nr   ú{}zset())r=   r  r  r   rC   r   r   r   Úvisit_SetNode.  s   zExpressionWriter.visit_SetNodec                 C   r  )Nr  r  rC   r   r   r   Úvisit_DictNode4  r6   zExpressionWriter.visit_DictNodec                 C   ó&   |   |j¡ |  d¡ |   |j¡ d S ©Nz: )r(   Úkeyr   r”   rC   r   r   r   Úvisit_DictItemNode7  rt   z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~Úorr   Úandé   Úiné   Únot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|é   ú^é   r[   é   z<<é   z>>é	   é
   é   )r  r  r   r²   ú/z//ú%ú**c                 C   s,   | j d }||kr|  d¡ | j  |¡ d S )Nr:   rc   )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éþÿÿÿrd   )rð   r   Úpop)r   r7  r6  r   r   r   Úoperator_exitU  s   
zExpressionWriter.operator_exitc                 C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )Nr  znot )Úunop_precedencer8  r   r(   Úoperandr;  ©r   rD   ÚopÚprecr   r   r   Úvisit_NotNode[  s   


zExpressionWriter.visit_NotNodec                 C   sB   |j }| j| }|  |¡ |  d|j  ¡ |  |j¡ |  ¡  d S )Nz%s)rØ   r<  r8  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 Ú_r{   )
rØ   Úbinop_precedenceÚgetr8  r(   Úoperand1r   ÚreplaceÚoperand2r;  r>  r   r   r   Úvisit_BinopNodek  s   
z ExpressionWriter.visit_BinopNodec                 C   rL   r   ©rI  rC   r   r   r   Úvisit_BoolBinopNodet  rP   z$ExpressionWriter.visit_BoolBinopNodec                 C   rL   r   rJ  rC   r   r   r   Úvisit_PrimaryCmpNodew  rP   z%ExpressionWriter.visit_PrimaryCmpNodec                 C   s`   |   |j¡ |  d¡ t|jtƒr#|j ¡ r|  |j¡ n|  d¡ n|   |j¡ |  d¡ d S )Nr^   r  r_   )r(   rX   r   r§   ÚindexÚ	TupleNoder  r  rC   r   r   r   Úvisit_IndexNodez  s   

z ExpressionWriter.visit_IndexNodec                 C   sn   |   |j¡ |  d¡ |jr|   |j¡ |  d¡ |jr"|   |j¡ |jr0|  d¡ |   |j¡ |  d¡ d S )Nr^   r   r_   )r(   rX   r   ÚstartÚstopÚslicerC   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   )rP  Úis_noner(   r   rQ  ÚsteprC   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_valrC   r   r   r   Úvisit_CondExprNode  s
   

z#ExpressionWriter.visit_CondExprNodec                 C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r(   Úobjr   r…   rC   r   r   r   Úvisit_AttributeNode¤  s   z$ExpressionWriter.visit_AttributeNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S rb   )r(   Úfunctionr   rB   re   rC   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_argsrF  rH  rN  r  r(   r   ÚAsTupleNodeÚarg©r   rD   rÖ   r   r   r   ra  ®  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<   r5  )	r§   ÚMergedDictNoder  Úemit_kwd_argsÚDictNoder   r  r”   r(   rd  r   r   r   rf  À  s   
ÿ
ý

zExpressionWriter.emit_kwd_argsc                 C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )Nrc   r<   rd   )r(   r^  r   ra  rv   rf  rw   rò   rC   r   r   r   Úvisit_GeneralCallNodeÐ  s   

z&ExpressionWriter.visit_GeneralCallNodec                 C   sj   |\}}|   |¡ |  |¡ |   d¡ |  |¡ |   d¡ |  |¡ |r.|   d¡ |  |¡ |   |¡ d S )Nz for rÂ   rW  )r   r(   )r   rS   rÄ   rÇ   rË   r  r	  r
  r   r   r   Úemit_comprehensionØ  s   







z#ExpressionWriter.emit_comprehensionc                 C   rg   r   )r(   rÖ   rC   r   r   r   Úvisit_ComprehensionAppendNodeç  r6   z.ExpressionWriter.visit_ComprehensionAppendNodec                 C   r  r  )r(   Úkey_exprr   Ú
value_exprrC   r   r   r   Ú!visit_DictComprehensionAppendNodeê  rt   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ÚlooprS   rÄ   rÆ   rÇ   ÚhasattrrÊ   rË   ri  )r   rD   Útpmapr  rS   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  )rs  rS   rÄ   rÆ   rÇ   rt  rÊ   rË   rÖ   rc  ri  )r   rD   rS   rÄ   rÇ   rË   r   r   r   Úvisit_GeneratorExpressionNodeü  s   


z.ExpressionWriter.visit_GeneratorExpressionNoder   )r  )2r   r   r   rµ   r   r+   r   rò   rB   rJ   rô   rõ   rø   r±   rù   rý   rÿ   r  r  r  r  r  r  r  r  r  r<  rD  r8  r;  rA  rB  rI  rK  rL  rO  rS  rV  r[  r]  r_  ra  rf  rh  ri  rj  rm  rv  rw  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   rC   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    rz   r{   r¡   r¢   )	r£   r3   r¤   r   r   rŠ   r¥   r(   rp   rC   r   r   r   r¦     s   




zPxdWriter.visit_CFuncDefNodec                 C   s   d S r   r   rC   r   r   r   Úvisit_StatNode$  s   zPxdWriter.visit_StatNodeN)r   r   r   rµ   r{  r¦   r|  r   r   r   r   rx    s
    rx  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ï   rx  r}  r   r   r   r   Ú<module>   s      +   -