o
    ¢øÁfâ_  ã                   @   sœ   d Z ddlmZmZ ddlmZ ddlT ddlmZ G dd„ de	ƒZ
G d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZ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).
é    )Úabsolute_importÚprint_functioné   )Ú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   úM/var/www/html/mig_web/myenv/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                    s8   t t| ƒ ¡  |d u rtƒ }|| _d| _i | _d| _d S )Nr   )Úsuperr   r   r   ÚresultÚ
numindentsÚ	tempnamesÚtempblockindex©r   r!   ©Ú	__class__r   r   r   '   s   
zDeclarationWriter.__init__c                 C   ó   |   |¡ | jS r   ©Úvisitr!   ©r   Útreer   r   r   Úwrite0   ó   
zDeclarationWriter.writec                 C   s   |  j d7  _ d S ©Nr   ©r"   r   r   r   r   Úindent4   r   zDeclarationWriter.indentc                 C   s   |  j d8  _ d S r/   r0   r   r   r   r   Údedent7   r   zDeclarationWriter.dedentr
   c                 C   ó   | j  | j| j | ¡ d S r   )r!   r   Úindent_stringr"   r   r   r   r   Ú	startline:   ó   zDeclarationWriter.startlinec                 C   ó   | j  |¡ d S r   )r!   r   r   r   r   r   r   =   ó   zDeclarationWriter.putc                 C   r3   r   )r!   r   r4   r"   r   r   r   r   r   @   r6   zDeclarationWriter.putlinec                 C   r7   r   )r!   r   r   r   r   r   ÚendlineC   r8   zDeclarationWriter.endlinec                 C   r   r   ©r5   r9   r   r   r   r   ÚlineF   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_listJ   s   


öz&DeclarationWriter.comma_separated_listc                 C   s   |   ¡  |  |¡ |  ¡  d S r   )r1   r*   r2   ©r   Únoder   r   r   Ú_visit_indentedW   s   
z!DeclarationWriter._visit_indentedc                 C   ó   t d| ƒ‚©Nz"Node not handled by serializer: %r©ÚAssertionErrorrE   r   r   r   Ú
visit_Node\   ó   zDeclarationWriter.visit_Nodec                 C   ó   |   |¡ d S r   ©ÚvisitchildrenrE   r   r   r   Úvisit_ModuleNode_   ó   z"DeclarationWriter.visit_ModuleNodec                 C   rN   r   rO   rE   r   r   r   Úvisit_StatListNodeb   rR   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   rG   Úbody)r   rF   Úfiler   r   r   Úvisit_CDefExternNodee   s
   

z&DeclarationWriter.visit_CDefExternNodec                 C   ó   |   d¡ |  |j¡ d S )Nr   ©r   r*   ÚbaserE   r   r   r   Úvisit_CPtrDeclaratorNodem   ó   
z*DeclarationWriter.visit_CPtrDeclaratorNodec                 C   rX   )Nú&rY   rE   r   r   r   Úvisit_CReferenceDeclaratorNodeq   r\   z0DeclarationWriter.visit_CReferenceDeclaratorNodec                 C   s:   |   |j¡ |  d¡ |jd ur|   |j¡ |  d¡ d S ©Nú[ú])r*   rZ   r   Ú	dimensionrE   r   r   r   Úvisit_CArrayDeclaratorNodeu   s
   

z,DeclarationWriter.visit_CArrayDeclaratorNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S ©Nú(ú))r*   rZ   r   rD   Úargsr9   rE   r   r   r   Úvisit_CFuncDeclaratorNode|   s   
z+DeclarationWriter.visit_CFuncDeclaratorNodec                 C   ó   |   |j¡ d S r   ©r   ÚnamerE   r   r   r   Úvisit_CNameDeclaratorNodeƒ   r8   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Úlongnessrk   rE   r   r   r   Úvisit_CSimpleBaseTypeNode†   s   


ÿz+DeclarationWriter.visit_CSimpleBaseTypeNodec                 C   s   |   |j¡ |   |j¡ d S r   )r*   Ú	base_typeÚ
declaratorrE   r   r   r   Úvisit_CComplexBaseTypeNode‘   s   z,DeclarationWriter.visit_CComplexBaseTypeNodec                 C   s&   |   |j¡ |  d¡ |  |j¡ d S )NÚ.)r*   rq   r   rk   rE   r   r   r   Úvisit_CNestedBaseTypeNode•   ó   
z+DeclarationWriter.visit_CNestedBaseTypeNodec                 C   s8   |   |j¡ |  d¡ |  |j|jj ¡ |  d¡ d S r_   )r*   Úbase_type_noder   rD   Úpositional_argsÚkeyword_argsÚkey_value_pairsrE   r   r   r   Úvisit_TemplatedTypeNodeš   s   
z)DeclarationWriter.visit_TemplatedTypeNodec                 C   s<   |   d¡ |  |j¡ |  d¡ | j|jdd |  ¡  d S )Núcdef ú T)rB   )r5   r*   rq   r   rD   Údeclaratorsr9   rE   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)	r5   rk   r   Úcnamer9   r1   r   r*   r2   )r   rF   Ú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 r|   Úpubliczpublic zpacked )Útypedef_flagÚ
visibilityÚpackedÚkindrˆ   r†   )r   rF   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   rF   r…   r   r   r   Úvisit_CppClassNodeÆ   s   z$DeclarationWriter.visit_CppClassNodec                 C   s   |   |dd |j¡ d S )Nz	cdef enum)rˆ   rA   rE   r   r   r   Úvisit_CEnumDefNodeÎ   ó   z$DeclarationWriter.visit_CEnumDefNodec                 C   sJ   |   |j¡ |jr|  d|j ¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nr€   r=   )r5   rk   rƒ   r   Úvaluer*   r9   rE   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 re   rt   rf   r   )Úmodule_nameÚ
decoratorsr*   r5   r   Ú
class_nameÚbase_class_nameÚbase_class_moduler9   rG   rU   )r   rF   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÚ   s   






z%DeclarationWriter.visit_CClassDefNodec                 C   s8   |   d¡ |  |j¡ |  d¡ |  |j¡ |  ¡  d S )Nr‰   r}   )r5   r*   rq   r   rr   r9   rE   r   r   r   Úvisit_CTypeDefNodeë   s
   

z$DeclarationWriter.visit_CTypeDefNodec                 C   s6   |   d|j ¡ |  |j¡ |  d¡ |  |j¡ d S )Nzdef %s(ú):)r5   rk   rD   rg   r9   rG   rU   rE   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 r|   r}   Úprivateúapi re   r    )r5   ÚoverridableÚ	modifiersr   r‘   rŒ   Úapirq   r*   rk   rr   rZ   rD   rg   r9   rG   rU   rE   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=   )	Ú
isinstancerq   r   rk   r*   rr   Údeclared_namer   r@   rE   r   r   r   Úvisit_CArgDeclNode  s   



þz$DeclarationWriter.visit_CArgDeclNodec                 C   s>   |   d¡ |  |j¡ |jr|  d¡ |  |j¡ |  ¡  d S )Nzcimport ú as )r5   r   r˜   Úas_namer9   rE   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¬   )r5   r   r˜   Úimported_namesr9   )r   rF   ÚfirstÚposrk   r­   rŽ   r   r   r   Úvisit_FromCImportStatNode+  s   





€z+DeclarationWriter.visit_FromCImportStatNodec                 C   ri   r   rj   rE   r   r   r   Úvisit_NameNode<  r8   z DeclarationWriter.visit_NameNodec                 C   s"   |   d¡ |  |j¡ |  ¡  d S )Nú@)r5   r*   r   r9   rE   r   r   r   Úvisit_DecoratorNode?  s   
z%DeclarationWriter.visit_DecoratorNodec                 C   s   |   d¡ |  ¡  d S )Nr‚   r:   rE   r   r   r   Úvisit_PassStatNodeD  r   z$DeclarationWriter.visit_PassStatNoder   ©r
   )F).r   r   r   Ú__doc__r4   r   r-   r1   r2   r5   r   r   r9   r;   rD   rG   rL   rQ   rS   rW   r[   r^   rc   rh   rl   rp   rs   ru   r{   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=   )r5   r*   Úlhsr   Úrhsr9   rE   r   r   r   Úvisit_SingleAssignmentNodeN  s
   
z*StatementWriter.visit_SingleAssignmentNodec                 C   s@   |   ¡  |jD ]}|  |¡ |  d¡ q|  |j¡ |  ¡  d S r»   )r5   Úlhs_listr*   r   r½   r9   )r   rF   r¼   r   r   r   Úvisit_CascadedAssignmentNodeU  s   

z,StatementWriter.visit_CascadedAssignmentNodec                 C   s4   |   d¡ |  |jj¡ |js|  d¡ |  ¡  d S )Nzprint ú,)r5   rD   Ú	arg_tuplerg   Úappend_newliner   r9   rE   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:)r5   ÚtargetÚis_sequence_constructorrD   rg   r*   r   ÚiteratorÚsequencer9   rG   rU   Úelse_clauser;   rE   r   r   r   Úvisit_ForInStatNoded  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Æ   )	r5   r*   Ú
if_clausesÚ	conditionr9   rG   rU   rË   r;   )r   rF   Úclauser   r   r   Úvisit_IfStatNoder  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Æ   )r5   r*   rÎ   r9   rG   rU   rË   r;   rE   r   r   r   Úvisit_WhileStatNode‚  s   



þz#StatementWriter.visit_WhileStatNodec                 C   ó   |   d¡ d S )NÚcontinue©r;   rE   r   r   r   Úvisit_ContinueStatNode‹  rR   z&StatementWriter.visit_ContinueStatNodec                 C   rÒ   )NÚbreakrÔ   rE   r   r   r   Úvisit_BreakStatNodeŽ  rR   z#StatementWriter.visit_BreakStatNodec                 C   ri   r   )rD   rg   rE   r   r   r   Úvisit_SequenceNode‘  r8   z"StatementWriter.visit_SequenceNodec                 C   s    |   ¡  |  |j¡ |  ¡  d S r   )r5   r*   Úexprr9   rE   r   r   r   Úvisit_ExprStatNode”  s   z"StatementWriter.visit_ExprStatNodec                 C   s<   |   ¡  |  |j¡ |  d|j ¡ |  |j¡ |  ¡  d S )Nz %s= )r5   r*   r¼   r   Úoperatorr½   r9   rE   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   )r5   r   r*   ÚmanagerrÇ   r9   rG   rU   rE   r   r   r   Úvisit_WithStatNode   s   



z"StatementWriter.visit_WithStatNodec                 C   s0   |   d¡ |  |j¡ |   d¡ |  |j¡ d S )Nútry:zfinally:)r;   rG   rU   Úfinally_clauserE   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ß   )r;   rG   rU   Úexcept_clausesr*   rË   )r   rF   Ú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   )r5   Úpatternr   r*   rÇ   r9   rG   rU   rE   r   r   r   Úvisit_ExceptClauseNode¸  s   





z&StatementWriter.visit_ExceptClauseNodec                 C   s6   |   d¡ |jd ur|  d¡ |  |j¡ |  ¡  d S )NÚreturnr}   )r5   r–   r   r*   r9   rE   r   r   r   Úvisit_ReturnStatNodeÃ  s
   


z$StatementWriter.visit_ReturnStatNodec                 C   rÒ   )NÚraiserÔ   rE   r   r   r   Úvisit_ReraiseStatNodeÊ  rR   z%StatementWriter.visit_ReraiseStatNodec                 C   s   |   d|jj ¡ d S )Nz(import %s))r   r˜   r–   rE   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*   rU   )r   rF   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeÐ  s   

z$StatementWriter.visit_TempsBlockNodec                 C   s   |   | j|j ¡ d S r   )r   r#   rï   rE   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º   I  s,    	
rº   c                
       s  e Zd ZdZd~‡ 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 d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd€d)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d5d6d6d6d7œZi d8d9“d:d;“d<d=“d>d=“d?d=“d@d=“dAd=“dBd=“dCd=“dDd=“dEd=“dFd=“dGdH“dIdJ“dKdL“dMdN“dOdN“dPdPdQdQdQdQdQdRdSœ¥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+dpdq„ Z,drds„ Z-	(d€dtdu„Z.dvdw„ Z/dxdy„ Z0dzd{„ Z1d|d}„ Z2‡  Z3S )ÚExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    Nc                    s,   t t| ƒ ¡  |d u rd}|| _dg| _d S )Nr
   r   )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   rA   rC   r   r   r   rD   ø  s   
üz%ExpressionWriter.comma_separated_listc                 C   rH   rI   rJ   rE   r   r   r   rL   ÿ  rM   zExpressionWriter.visit_Nodec                 C   ri   r   ©r   r–   rE   r   r   r   Úvisit_IntNode  r8   zExpressionWriter.visit_IntNodec                 C   ri   r   rö   rE   r   r   r   Úvisit_FloatNode  r8   z ExpressionWriter.visit_FloatNodec                 C   rÒ   )NÚNone©r   rE   r   r   r   Úvisit_NoneNode  rR   zExpressionWriter.visit_NoneNodec                 C   ri   r   rj   rE   r   r   r   r³     r8   zExpressionWriter.visit_NameNodec                 C   rÒ   )Nz...rú   rE   r   r   r   Úvisit_EllipsisNode  rR   z#ExpressionWriter.visit_EllipsisNodec                 C   ó   |   t|jƒ¡ d S r   ©r   Ústrr–   rE   r   r   r   Úvisit_BoolNode  ó   zExpressionWriter.visit_BoolNodec                 C   rý   r   rþ   rE   r   r   r   Úvisit_ConstNode  r  z ExpressionWriter.visit_ConstNodec                 C   s   |   |j¡ |   d¡ d S )NÚjrö   rE   r   r   r   Úvisit_ImagNode  s   zExpressionWriter.visit_ImagNoder
   c                 C   s8   t |jƒ}|d dv r|dd … }|  d||f ¡ d S )Nr   Úubr   z%s%s)Úreprr–   r   )r   rF   ÚprefixÚrepr_valr   r   r   Úemit_string  s   
zExpressionWriter.emit_stringc                 C   ó   |   |d¡ d S )NÚb©r	  rE   r   r   r   Úvisit_BytesNode!  r8   z ExpressionWriter.visit_BytesNodec                 C   rN   r   r  rE   r   r   r   Úvisit_StringNode$  rR   z!ExpressionWriter.visit_StringNodec                 C   r
  )NÚur  rE   r   r   r   Úvisit_UnicodeNode'  r8   z"ExpressionWriter.visit_UnicodeNode©r
   r
   c                 C   s2   |\}}|  ¡ }|  |¡ |  |¡ |  |¡ d S r   )Úsubexpr_nodesr   rD   )r   rF   ÚparensÚ
open_parenÚclose_parenrA   r   r   r   Úemit_sequence*  s
   

zExpressionWriter.emit_sequencec                 C   r
  )Nú[]©r  rE   r   r   r   Úvisit_ListNode1  r8   zExpressionWriter.visit_ListNodec                 C   r
  )Nú()r  rE   r   r   r   Úvisit_TupleNode4  r8   z ExpressionWriter.visit_TupleNodec                 C   s.   t | ¡ ƒdkr|  |d¡ d S |  d¡ d S )Nr   ú{}zset())r?   r  r  r   rE   r   r   r   Úvisit_SetNode7  s   zExpressionWriter.visit_SetNodec                 C   r
  )Nr  r  rE   r   r   r   Úvisit_DictNode=  r8   zExpressionWriter.visit_DictNodec                 C   ó&   |   |j¡ |  d¡ |   |j¡ d S ©Nz: )r*   Úkeyr   r–   rE   r   r   r   Úvisit_DictItemNode@  rv   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<   re   )ró   r   r   )r   Únew_precÚold_precr   r   r   Úoperator_enterX  s   

zExpressionWriter.operator_enterc                 C   s2   | j dd … \}}||kr|  d¡ | j  ¡  d S )Néþÿÿÿrf   )ró   r   Úpop)r   rA  r@  r   r   r   Úoperator_exit^  s   
zExpressionWriter.operator_exitc                 C   s:   d}| j | }|  |¡ |  d¡ |  |j¡ |  ¡  d S )Nr%  znot )Úunop_precedencerB  r   r*   ÚoperandrE  ©r   rF   ÚopÚprecr   r   r   Úvisit_NotNoded  s   


zExpressionWriter.visit_NotNodec                 C   sB   |j }| j| }|  |¡ |  d|j  ¡ |  |j¡ |  ¡  d S )Nz%s)rÛ   rF  rB  r   r*   rG  rE  rH  r   r   r   Úvisit_UnopNodel  s   

zExpressionWriter.visit_UnopNodec                 C   sX   |j }| j |d¡}|  |¡ |  |j¡ |  d| dd¡ ¡ |  |j¡ |  	¡  d S )Nr   z %s Ú_r}   )
rÛ   Úbinop_precedenceÚgetrB  r*   Úoperand1r   ÚreplaceÚoperand2rE  rH  r   r   r   Úvisit_BinopNodet  s   
z ExpressionWriter.visit_BinopNodec                 C   rN   r   ©rS  rE   r   r   r   Úvisit_BoolBinopNode}  rR   z$ExpressionWriter.visit_BoolBinopNodec                 C   rN   r   rT  rE   r   r   r   Úvisit_PrimaryCmpNode€  rR   z%ExpressionWriter.visit_PrimaryCmpNodec                 C   s`   |   |j¡ |  d¡ t|jtƒr#|j ¡ r|  |j¡ n|  d¡ n|   |j¡ |  d¡ d S )Nr`   r  ra   )r*   rZ   r   r©   ÚindexÚ	TupleNoder  r  rE   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 )Nr`   r   ra   )r*   rZ   r   ÚstartÚstopÚslicerE   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   )rZ  Úis_noner*   r   r[  ÚsteprE   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_valrE   r   r   r   Úvisit_CondExprNode¦  s
   

z#ExpressionWriter.visit_CondExprNodec                 C   s    |   |j¡ |  d|j ¡ d S )Nz.%s)r*   Úobjr   r‡   rE   r   r   r   Úvisit_AttributeNode­  s   z$ExpressionWriter.visit_AttributeNodec                 C   s0   |   |j¡ |  d¡ |  |j¡ |  d¡ d S rd   )r*   Úfunctionr   rD   rg   rE   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_argsrP  rR  rX  r  r*   r   ÚAsTupleNodeÚarg©r   rF   rÙ   r   r   r   rk  ·  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©   ÚMergedDictNoder  Úemit_kwd_argsÚDictNoder   r!  r–   r*   rn  r   r   r   rp  É  s   
ÿ
ý

zExpressionWriter.emit_kwd_argsc                 C   sF   |   |j¡ |  d¡ |  |j¡ |  |j¡ |  d¡ |  d¡ d S )Nre   r>   rf   )r*   rh  r   rk  rx   rp  ry   rõ   rE   r   r   r   Úvisit_GeneralCallNodeÙ  s   

z&ExpressionWriter.visit_GeneralCallNodec                 C   sj   |\}}|   |¡ |  |¡ |   d¡ |  |¡ |   d¡ |  |¡ |r.|   d¡ |  |¡ |   |¡ d S )Nz for rÅ   ra  )r   r*   )r   rU   rÇ   rÊ   rÎ   r  r  r  r   r   r   Úemit_comprehensioná  s   







z#ExpressionWriter.emit_comprehensionc                 C   ri   r   )r*   rÙ   rE   r   r   r   Úvisit_ComprehensionAppendNodeð  r8   z.ExpressionWriter.visit_ComprehensionAppendNodec                 C   r  r   )r*   Úkey_exprr   Ú
value_exprrE   r   r   r   Ú!visit_DictComprehensionAppendNodeó  rv   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ÚlooprU   rÇ   rÉ   rÊ   ÚhasattrrÍ   rÎ   rs  )r   rF   Útpmapr  rU   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  )r}  rU   rÇ   rÉ   rÊ   r~  rÍ   rÎ   rÙ   rm  rs  )r   rF   rU   rÇ   rÊ   rÎ   r   r   r   Úvisit_GeneratorExpressionNode  s   


z.ExpressionWriter.visit_GeneratorExpressionNoder   r·   )r  )4r   r   r   r¸   r   r-   r   rõ   rD   rL   r÷   rø   rû   r³   rü   r   r  r  r	  r  r  r  r  r  r  r  r  r"  rF  rN  rB  rE  rK  rL  rS  rU  rV  rY  r]  r`  re  rg  ri  rk  rp  rr  rs  rt  rw  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Ú
)Úprintr‘   r-   r   rE   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¢   r|   r}   r£   r¤   )	r¥   r5   r¦   r   r‘   rŒ   r§   r*   rr   rE   r   r   r   r¨     s   




zPxdWriter.visit_CFuncDefNodec                 C   s   d S r   r   rE   r   r   r   Úvisit_StatNode-  s   zPxdWriter.visit_StatNodeN)r   r   r   r¸   r…  r¨   r†  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   r‡  1  s    r‡  N)r¸   Ú
__future__r   r   ÚCompiler.Visitorr   ÚCompiler.ExprNodesÚCompiler.Nodesr   Úobjectr   r   rº   rò   r‚  r‡  r   r   r   r   Ú<module>   s       +   5