3
¬øÖhâ_  ã               @   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   úc/var/www/html/CrowdFlow/Picklecon/ble_analysis_env/lib/python3.6/site-packages/Cython/CodeWriter.pyÚ__init__   s    zLinesResult.__init__c             C   s   |  j |7  _ d S )N)r   )r   r   r   r   r   Úput   s    zLinesResult.putc             C   s   | j j| jƒ d| _d S )Nr	   )r
   Úappendr   )r   r   r   r   Únewline   s    zLinesResult.newlinec             C   s   | j |ƒ | jƒ  d S )N)r   r   )r   r   r   r   r   Úputline   s    
zLinesResult.putlineN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s   r   c                   sd  e Zd ZdZdZdV‡ fdd„	Zdd„ Zdd	„ Zd
d„ ZdWdd„Z	dd„ Z
dd„ ZdXdd„Zdd„ ZdYdd„Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@dA„ Z"dBdC„ Z#dDdE„ Z$dFdG„ Z%dHdI„ Z&dJdK„ Z'dLdM„ Z(dNdO„ Z)dPdQ„ Z*dRdS„ Z+dTdU„ Z,‡  Z-S )ZÚDeclarationWriterzE
    A Cython code writer that is limited to declarations nodes.
    z    Nc                s8   t t| ƒjƒ  |d k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   s   | j |ƒ | jS )N)Úvisitr   )r   Útreer   r   r   Úwrite0   s    
zDeclarationWriter.writec             C   s   |  j d7  _ d S )Nr   )r   )r   r   r   r   Úindent4   s    zDeclarationWriter.indentc             C   s   |  j d8  _ d S )Nr   )r   )r   r   r   r   Údedent7   s    zDeclarationWriter.dedentr	   c             C   s   | j j| j| j | ƒ d S )N)r   r   Úindent_stringr   )r   r   r   r   r   Ú	startline:   s    zDeclarationWriter.startlinec             C   s   | j j|ƒ d S )N)r   r   )r   r   r   r   r   r   =   s    zDeclarationWriter.putc             C   s   | j j| j| j | ƒ d S )N)r   r   r#   r   )r   r   r   r   r   r   @   s    zDeclarationWriter.putlinec             C   s   | j j|ƒ d S )N)r   r   )r   r   r   r   r   ÚendlineC   s    zDeclarationWriter.endlinec             C   s   | j |ƒ | jƒ  d S )N)r$   r%   )r   r   r   r   r   ÚlineF   s    
zDeclarationWriter.lineFc             C   s˜   t |ƒdkr”xL|d d… D ]<}| j|ƒ |rL|jd k	rL| jdƒ | j|jƒ | jdƒ qW | j|d ƒ |r”|d jd k	r”| jdƒ | j|d jƒ d S )	Nr   r   z = z, éÿÿÿÿr'   r'   r'   )Úlenr   Údefaultr   )r   ÚitemsÚ
output_rhsÚitemr   r   r   Úcomma_separated_listJ   s    


z&DeclarationWriter.comma_separated_listc             C   s   | j ƒ  | j|ƒ | jƒ  d S )N)r!   r   r"   )r   Únoder   r   r   Ú_visit_indentedW   s    
z!DeclarationWriter._visit_indentedc             C   s   t d| ƒ‚d S )Nz"Node not handled by serializer: %r)ÚAssertionError)r   r.   r   r   r   Ú
visit_Node\   s    zDeclarationWriter.visit_Nodec             C   s   | j |ƒ d S )N)Úvisitchildren)r   r.   r   r   r   Úvisit_ModuleNode_   s    z"DeclarationWriter.visit_ModuleNodec             C   s   | j |ƒ d S )N)r2   )r   r.   r   r   r   Úvisit_StatListNodeb   s    z$DeclarationWriter.visit_StatListNodec             C   s8   |j d krd}n
d|j  }| jd| ƒ | j|jƒ d S )Nr   z"%s"zcdef extern from %s:)Zinclude_filer   r/   Úbody)r   r.   Úfiler   r   r   Úvisit_CDefExternNodee   s
    

z&DeclarationWriter.visit_CDefExternNodec             C   s   | j dƒ | j|jƒ d S )Nr   )r   r   Úbase)r   r.   r   r   r   Úvisit_CPtrDeclaratorNodem   s    
z*DeclarationWriter.visit_CPtrDeclaratorNodec             C   s   | j dƒ | j|jƒ d S )Nú&)r   r   r8   )r   r.   r   r   r   Úvisit_CReferenceDeclaratorNodeq   s    
z0DeclarationWriter.visit_CReferenceDeclaratorNodec             C   s:   | j |jƒ | jdƒ |jd k	r,| j |jƒ | jdƒ d S )Nú[ú])r   r8   r   Z	dimension)r   r.   r   r   r   Úvisit_CArrayDeclaratorNodeu   s
    

z,DeclarationWriter.visit_CArrayDeclaratorNodec             C   s0   | j |jƒ | jdƒ | j|jƒ | jdƒ d S )Nú(ú))r   r8   r   r-   Úargsr%   )r   r.   r   r   r   Úvisit_CFuncDeclaratorNode|   s    
z+DeclarationWriter.visit_CFuncDeclaratorNodec             C   s   | j |jƒ d S )N)r   Úname)r   r.   r   r   r   Úvisit_CNameDeclaratorNodeƒ   s    z+DeclarationWriter.visit_CNameDeclaratorNodec             C   sh   |j rN| jd|j ƒ |jdk r4| jd|j  ƒ n|jdkrN| jd|j ƒ |jd k	rd| j|jƒ d S )Nú	unsigned r	   úsigned r   zshort zlong )rE   r	   rF   )Zis_basic_c_typer   ÚsignedZlongnessrC   )r   r.   r   r   r   Úvisit_CSimpleBaseTypeNode†   s    


z+DeclarationWriter.visit_CSimpleBaseTypeNodec             C   s   | j |jƒ | j |jƒ d S )N)r   Ú	base_typeÚ
declarator)r   r.   r   r   r   Úvisit_CComplexBaseTypeNode‘   s    z,DeclarationWriter.visit_CComplexBaseTypeNodec             C   s&   | j |jƒ | jdƒ | j|jƒ d S )NÚ.)r   rI   r   rC   )r   r.   r   r   r   Úvisit_CNestedBaseTypeNode•   s    
z+DeclarationWriter.visit_CNestedBaseTypeNodec             C   s8   | j |jƒ | jdƒ | j|j|jj ƒ | jdƒ d S )Nr<   r=   )r   Zbase_type_noder   r-   Úpositional_argsÚkeyword_argsZkey_value_pairs)r   r.   r   r   r   Úvisit_TemplatedTypeNodeš   s    
z)DeclarationWriter.visit_TemplatedTypeNodec             C   s<   | j dƒ | j|jƒ | jdƒ | j|jdd | jƒ  d S )Nzcdef ú T)r+   )r$   r   rI   r   r-   Zdeclaratorsr%   )r   r.   r   r   r   Úvisit_CVarDefNode    s
    

z#DeclarationWriter.visit_CVarDefNodec             C   s”   | j |ƒ |jr@| jdƒ | j|jƒ |jd k	r@| jd|j ƒ |rN| j|ƒ | jdƒ | jƒ  |sp| jdƒ nx|D ]}| j|ƒ qvW | jƒ  d S )NrQ   z "%s"ú:Úpass)	r$   rC   r   Úcnamer%   r!   r   r   r"   )r   r.   ÚdeclÚextrasÚ
attributesÚ	attributer   r   r   Ú_visit_container_node§   s    





z'DeclarationWriter._visit_container_nodec             C   sP   |j rd}nd}|jdkr"|d7 }|jr0|d7 }||j7 }| j||d |jƒ d S )Nz	ctypedef zcdef Úpubliczpublic zpacked )Ztypedef_flagÚ
visibilityÚpackedÚkindrZ   rX   )r   r.   rV   r   r   r   Úvisit_CStructOrUnionDefNodeº   s    

z-DeclarationWriter.visit_CStructOrUnionDefNodec             C   sJ   d}|j rddj|j ƒ }|jr4|ddj|jƒ 7 }| j|d||jƒ d S )Nr	   z[%s]z, z(%s)zcdef cppclass)Z	templatesÚjoinZbase_classesrZ   rX   )r   r.   rW   r   r   r   Úvisit_CppClassNodeÆ   s    z$DeclarationWriter.visit_CppClassNodec             C   s   | j |dd |jƒ d S )Nz	cdef enum)rZ   r*   )r   r.   r   r   r   Úvisit_CEnumDefNodeÎ   s    z$DeclarationWriter.visit_CEnumDefNodec             C   sJ   | j |jƒ |jr"| jd|j ƒ |jr>| jdƒ | j|jƒ | jƒ  d S )Nz "%s"z = )r$   rC   rU   r   Úvaluer   r%   )r   r.   r   r   r   Úvisit_CEnumDefItemNodeÑ   s    
z(DeclarationWriter.visit_CEnumDefItemNodec             C   sž   |j  st‚|jr,x|jD ]}| j|ƒ qW | jdƒ | j|jƒ |jr„| jdƒ |jrn| j|jƒ | jdƒ | j|jƒ | jdƒ | j	dƒ | j
|jƒ d S )Nzcdef class r?   rL   r@   rS   )Úmodule_namer0   Z
decoratorsr   r$   r   Ú
class_nameZbase_class_nameZbase_class_moduler%   r/   r5   )r   r.   Ú	decoratorr   r   r   Úvisit_CClassDefNodeÚ   s    




z%DeclarationWriter.visit_CClassDefNodec             C   s8   | j dƒ | j|jƒ | jdƒ | j|jƒ | jƒ  d S )Nz	ctypedef rQ   )r$   r   rI   r   rJ   r%   )r   r.   r   r   r   Úvisit_CTypeDefNodeë   s
    

z$DeclarationWriter.visit_CTypeDefNodec             C   s6   | j d|j ƒ | j|jƒ | jdƒ | j|jƒ d S )Nzdef %s(z):)r$   rC   r-   rA   r%   r/   r5   )r   r.   r   r   r   Úvisit_FuncDefNodeò   s    
z#DeclarationWriter.visit_FuncDefNodec             C   sÎ   | j |jrdndƒ |jr6| jdj|jƒƒ | jdƒ |jdkrV| j|jƒ | jdƒ |jrf| jdƒ |jrŽ| j|jƒ |jj	d k	rŽ| jdƒ | j|j
jƒ | jdƒ | j|j
jƒ | jdƒ | j|jƒ d S )Nzcpdef zcdef rQ   Úprivatezapi r?   z):)r$   ÚoverridableÚ	modifiersr   r`   r\   ÚapirI   r   rC   rJ   r8   r-   rA   r%   r/   r5   )r   r.   r   r   r   Úvisit_CFuncDefNodeù   s$    






z$DeclarationWriter.visit_CFuncDefNodec             C   sj   t |jtƒ s|jjd k	r:| j|jƒ |jjƒ r:| jdƒ | j|jƒ |jd k	rf| jdƒ | j|jƒ d S )NrQ   z = )	Ú
isinstancerI   r   rC   r   rJ   Zdeclared_namer   r)   )r   r.   r   r   r   Úvisit_CArgDeclNode  s    



z$DeclarationWriter.visit_CArgDeclNodec             C   s>   | j dƒ | j|jƒ |jr2| jdƒ | j|jƒ | jƒ  d S )Nzcimport z as )r$   r   re   Úas_namer%   )r   r.   r   r   r   Úvisit_CImportStatNode#  s    

z'DeclarationWriter.visit_CImportStatNodec             C   sŠ   | j dƒ | j|jƒ | jdƒ d}xX|jD ]N\}}}}|d ksDt‚|rNd}n
| jdƒ | j|ƒ |r,| jdƒ | j|ƒ q,W | jƒ  d S )Nzfrom z	 cimport TFz, z as )r$   r   re   Zimported_namesr0   r%   )r   r.   ÚfirstÚposrC   rr   r^   r   r   r   Úvisit_FromCImportStatNode+  s    




z+DeclarationWriter.visit_FromCImportStatNodec             C   s   | j |jƒ d S )N)r   rC   )r   r.   r   r   r   Úvisit_NameNode<  s    z DeclarationWriter.visit_NameNodec             C   s"   | j dƒ | j|jƒ | jƒ  d S )Nú@)r$   r   rg   r%   )r   r.   r   r   r   Úvisit_DecoratorNode?  s    
z%DeclarationWriter.visit_DecoratorNodec             C   s   | j dƒ | jƒ  d S )NrT   )r$   r%   )r   r.   r   r   r   Úvisit_PassStatNodeD  s    
z$DeclarationWriter.visit_PassStatNode)N)r	   )r	   )F).r   r   r   Ú__doc__r#   r   r    r!   r"   r$   r   r   r%   r&   r-   r/   r1   r3   r4   r7   r9   r;   r>   rB   rD   rH   rK   rM   rP   rR   rZ   r_   ra   rb   rd   rh   ri   rj   ro   rq   rs   rv   rw   ry   rz   Ú__classcell__r   r   )r   r   r       sT   	


	r   c               @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*S )+ÚStatementWriterzD
    A Cython code writer for most language statement features.
    c             C   s6   | j ƒ  | j|jƒ | jdƒ | j|jƒ | jƒ  d S )Nz = )r$   r   Úlhsr   Úrhsr%   )r   r.   r   r   r   Úvisit_SingleAssignmentNodeN  s
    
z*StatementWriter.visit_SingleAssignmentNodec             C   sD   | j ƒ  x"|jD ]}| j|ƒ | jdƒ qW | j|jƒ | jƒ  d S )Nz = )r$   Zlhs_listr   r   r   r%   )r   r.   r~   r   r   r   Úvisit_CascadedAssignmentNodeU  s    
z,StatementWriter.visit_CascadedAssignmentNodec             C   s4   | j dƒ | j|jjƒ |js(| jdƒ | jƒ  d S )Nzprint ú,)r$   r-   Z	arg_tuplerA   Zappend_newliner   r%   )r   r.   r   r   r   Úvisit_PrintStatNode]  s
    

z#StatementWriter.visit_PrintStatNodec             C   s€   | j dƒ |jjr"| j|jjƒ n| j|jƒ | jdƒ | j|jjƒ | j	dƒ | j
|jƒ |jd k	r|| jdƒ | j
|jƒ d S )Nzfor z in rS   zelse:)r$   ÚtargetZis_sequence_constructorr-   rA   r   r   ÚiteratorÚsequencer%   r/   r5   Úelse_clauser&   )r   r.   r   r   r   Úvisit_ForInStatNoded  s    




z#StatementWriter.visit_ForInStatNodec             C   s    | j dƒ | j|jd jƒ | jdƒ | j|jd jƒ xB|jdd … D ]0}| j dƒ | j|jƒ | jdƒ | j|jƒ qHW |jd k	rœ| jdƒ | j|jƒ d S )Nzif r   rS   r   zelif zelse:)	r$   r   Ú
if_clausesÚ	conditionr%   r/   r5   r‡   r&   )r   r.   Zclauser   r   r   Úvisit_IfStatNoder  s    





z StatementWriter.visit_IfStatNodec             C   sP   | j dƒ | j|jƒ | jdƒ | j|jƒ |jd k	rL| jdƒ | j|jƒ d S )Nzwhile rS   zelse:)r$   r   rŠ   r%   r/   r5   r‡   r&   )r   r.   r   r   r   Úvisit_WhileStatNode‚  s    



z#StatementWriter.visit_WhileStatNodec             C   s   | j dƒ d S )NÚcontinue)r&   )r   r.   r   r   r   Úvisit_ContinueStatNode‹  s    z&StatementWriter.visit_ContinueStatNodec             C   s   | j dƒ d S )NÚbreak)r&   )r   r.   r   r   r   Úvisit_BreakStatNodeŽ  s    z#StatementWriter.visit_BreakStatNodec             C   s   | j |jƒ d S )N)r-   rA   )r   r.   r   r   r   Úvisit_SequenceNode‘  s    z"StatementWriter.visit_SequenceNodec             C   s    | j ƒ  | j|jƒ | jƒ  d S )N)r$   r   Úexprr%   )r   r.   r   r   r   Úvisit_ExprStatNode”  s    z"StatementWriter.visit_ExprStatNodec             C   s<   | j ƒ  | j|jƒ | jd|j ƒ | j|jƒ | jƒ  d S )Nz %s= )r$   r   r~   r   Úoperatorr   r%   )r   r.   r   r   r   Úvisit_InPlaceAssignmentNode™  s
    z+StatementWriter.visit_InPlaceAssignmentNodec             C   sX   | j ƒ  | jdƒ | j|jƒ |jd k	r>| jdƒ | j|jƒ | jdƒ | j|jƒ d S )Nzwith z as rS   )r$   r   r   Úmanagerr„   r%   r/   r5   )r   r.   r   r   r   Úvisit_WithStatNode   s    



z"StatementWriter.visit_WithStatNodec             C   s0   | j dƒ | j|jƒ | j dƒ | j|jƒ d S )Nztry:zfinally:)r&   r/   r5   Zfinally_clause)r   r.   r   r   r   Úvisit_TryFinallyStatNodeª  s    

z(StatementWriter.visit_TryFinallyStatNodec             C   sJ   | j dƒ | j|jƒ x|jD ]}| j|ƒ qW |jd k	rF| j|jƒ d S )Nztry:)r&   r/   r5   Zexcept_clausesr   r‡   )r   r.   Úxr   r   r   Úvisit_TryExceptStatNode°  s    

z'StatementWriter.visit_TryExceptStatNodec             C   sd   | j dƒ |jd k	r*| jdƒ | j|jƒ |jd k	rJ| jdƒ | j|jƒ | jdƒ | j|jƒ d S )NÚexceptrQ   z, rS   )r$   Úpatternr   r   r„   r%   r/   r5   )r   r.   r   r   r   Úvisit_ExceptClauseNode¸  s    





z&StatementWriter.visit_ExceptClauseNodec             C   s6   | j dƒ |jd k	r*| jdƒ | j|jƒ | jƒ  d S )NÚreturnrQ   )r$   rc   r   r   r%   )r   r.   r   r   r   Úvisit_ReturnStatNodeÃ  s
    


z$StatementWriter.visit_ReturnStatNodec             C   s   | j dƒ d S )NÚraise)r&   )r   r.   r   r   r   Úvisit_ReraiseStatNodeÊ  s    z%StatementWriter.visit_ReraiseStatNodec             C   s   | j d|jj ƒ d S )Nz(import %s))r   re   rc   )r   r.   r   r   r   Úvisit_ImportNodeÍ  s    z StatementWriter.visit_ImportNodec             C   sN   d}x*|j D ] }d| j|f | j|< |d7 }qW |  jd7  _| j|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   r5   )r   r.   ÚidxÚhandler   r   r   Úvisit_TempsBlockNodeÐ  s    z$StatementWriter.visit_TempsBlockNodec             C   s   | j | j|j ƒ d S )N)r   r   r¤   )r   r.   r   r   r   Úvisit_TempRefNodeÝ  s    z!StatementWriter.visit_TempRefNodeN)r   r   r   r{   r€   r   rƒ   rˆ   r‹   rŒ   rŽ   r   r‘   r“   r•   r—   r˜   rš   r   rŸ   r¡   r¢   r¥   r¦   r   r   r   r   r}   I  s*   	
r}   c                   sÐ  e Zd ZdZdl‡ 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dmd d!„Zd"d#„ Zd$d%„ Zd&d'„ Zdod(d)„Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d4d5d5d5d6œZd7d8d9d9d9d9d9d9d9d9d9d9d:d;d<d=d=d>d>d?d?d?d?d?d@dAœZdBdC„ ZdDdE„ ZdFdG„ Z dHdI„ Z!dJdK„ Z"dLdM„ Z#dNdO„ Z$dPdQ„ Z%dRdS„ Z&dTdU„ Z'dVdW„ Z(dXdY„ Z)dZd[„ Z*d\d]„ Z+d^d_„ Z,d`da„ Z-dqdbdc„Z.ddde„ Z/dfdg„ Z0dhdi„ Z1djdk„ Z2‡  Z3S )rÚExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    Nc                s,   t t| ƒjƒ  |d krd}|| _dg| _d S )Nr	   r   )r   r§   r   r   Ú
precedence)r   r   )r   r   r   r   æ  s
    zExpressionWriter.__init__c             C   s   | j |ƒ | jS )N)r   r   )r   r   r   r   r   r    í  s    
zExpressionWriter.writec             C   s   |  j |7  _ d S )N)r   )r   r   r   r   r   r   ñ  s    zExpressionWriter.putc             C   s&   | j j|ƒr"| j d t|ƒ … | _ d S )N)r   Úendswithr(   )r   r   r   r   r   Úremoveô  s    zExpressionWriter.removec             C   sH   t |ƒdkrDx(|d d… D ]}| j|ƒ | jdƒ qW | j|d ƒ d S )Nr   r   z, r'   r'   )r(   r   r   )r   r*   r,   r   r   r   r-   ø  s
    
z%ExpressionWriter.comma_separated_listc             C   s   t d| ƒ‚d S )Nz"Node not handled by serializer: %r)r0   )r   r.   r   r   r   r1   ÿ  s    zExpressionWriter.visit_Nodec             C   s   | j |jƒ d S )N)r   rc   )r   r.   r   r   r   Úvisit_IntNode  s    zExpressionWriter.visit_IntNodec             C   s   | j |jƒ d S )N)r   rc   )r   r.   r   r   r   Úvisit_FloatNode  s    z ExpressionWriter.visit_FloatNodec             C   s   | j dƒ d S )NÚNone)r   )r   r.   r   r   r   Úvisit_NoneNode  s    zExpressionWriter.visit_NoneNodec             C   s   | j |jƒ d S )N)r   rC   )r   r.   r   r   r   rw     s    zExpressionWriter.visit_NameNodec             C   s   | j dƒ d S )Nz...)r   )r   r.   r   r   r   Úvisit_EllipsisNode  s    z#ExpressionWriter.visit_EllipsisNodec             C   s   | j t|jƒƒ d S )N)r   Ústrrc   )r   r.   r   r   r   Úvisit_BoolNode  s    zExpressionWriter.visit_BoolNodec             C   s   | j t|jƒƒ d S )N)r   r°   rc   )r   r.   r   r   r   Úvisit_ConstNode  s    z ExpressionWriter.visit_ConstNodec             C   s   | j |jƒ | j dƒ d S )NÚj)r   rc   )r   r.   r   r   r   Úvisit_ImagNode  s    zExpressionWriter.visit_ImagNoder	   c             C   s8   t |jƒ}|d dkr"|dd … }| jd||f ƒ d S )Nr   Zubr   z%s%s)Úreprrc   r   )r   r.   ÚprefixZrepr_valr   r   r   Úemit_string  s    
zExpressionWriter.emit_stringc             C   s   | j |dƒ d S )NÚb)r·   )r   r.   r   r   r   Úvisit_BytesNode!  s    z ExpressionWriter.visit_BytesNodec             C   s   | j |ƒ d S )N)r·   )r   r.   r   r   r   Úvisit_StringNode$  s    z!ExpressionWriter.visit_StringNodec             C   s   | j |dƒ d S )NÚu)r·   )r   r.   r   r   r   Úvisit_UnicodeNode'  s    z"ExpressionWriter.visit_UnicodeNodec             C   s2   |\}}|j ƒ }| j|ƒ | j|ƒ | j|ƒ d S )N)Úsubexpr_nodesr   r-   )r   r.   ÚparensÚ
open_parenÚclose_parenr*   r   r   r   Úemit_sequence*  s
    

zExpressionWriter.emit_sequencec             C   s   | j |dƒ d S )Nz[])rÁ   )r   r.   r   r   r   Úvisit_ListNode1  s    zExpressionWriter.visit_ListNodec             C   s   | j |dƒ d S )Nz())rÁ   )r   r.   r   r   r   Úvisit_TupleNode4  s    z ExpressionWriter.visit_TupleNodec             C   s,   t |jƒ ƒdkr| j|dƒ n
| jdƒ d S )Nr   z{}zset())r(   r½   rÁ   r   )r   r.   r   r   r   Úvisit_SetNode7  s    zExpressionWriter.visit_SetNodec             C   s   | j |dƒ d S )Nz{})rÁ   )r   r.   r   r   r   Úvisit_DictNode=  s    zExpressionWriter.visit_DictNodec             C   s&   | j |jƒ | jdƒ | j |jƒ d S )Nz: )r   Úkeyr   rc   )r   r.   r   r   r   Úvisit_DictItemNode@  s    
z#ExpressionWriter.visit_DictItemNodeé   é   )Únotú!ú+ú-ú~r   é   é   é   é   é   é   é	   é
   é   )ÚorÚandÚinZnot_inÚisÚis_notú<z<=ú>z>=z!=z==ú|ú^r:   z<<z>>rÌ   rÍ   r   rx   ú/z//ú%z**c             C   s,   | j d }||kr| jdƒ | j j|ƒ d S )Nr   r?   r'   )r¨   r   r   )r   Únew_precÚold_precr   r   r   Úoperator_enterX  s    

zExpressionWriter.operator_enterc             C   s2   | j dd … \}}||kr$| jdƒ | j jƒ  d S )NrÏ   r@   éþÿÿÿ)r¨   r   Úpop)r   rä   rã   r   r   r   Úoperator_exit^  s    
zExpressionWriter.operator_exitc             C   s:   d}| j | }| j|ƒ | jdƒ | j|jƒ | jƒ  d S )NrÊ   znot )Úunop_precedencerå   r   r   Úoperandrè   )r   r.   ÚopÚprecr   r   r   Úvisit_NotNoded  s    


zExpressionWriter.visit_NotNodec             C   sB   |j }| j| }| j|ƒ | jd|j  ƒ | j|jƒ | jƒ  d S )Nz%s)r”   ré   rå   r   r   rê   rè   )r   r.   rë   rì   r   r   r   Úvisit_UnopNodel  s    

zExpressionWriter.visit_UnopNodec             C   sX   |j }| jj|dƒ}| j|ƒ | j|jƒ | jd|jddƒ ƒ | j|jƒ | j	ƒ  d S )Nr   z %s Ú_rQ   )
r”   Úbinop_precedenceÚgetrå   r   Úoperand1r   ÚreplaceÚoperand2rè   )r   r.   rë   rì   r   r   r   Úvisit_BinopNodet  s    
z ExpressionWriter.visit_BinopNodec             C   s   | j |ƒ d S )N)rõ   )r   r.   r   r   r   Úvisit_BoolBinopNode}  s    z$ExpressionWriter.visit_BoolBinopNodec             C   s   | j |ƒ d S )N)rõ   )r   r.   r   r   r   Úvisit_PrimaryCmpNode€  s    z%ExpressionWriter.visit_PrimaryCmpNodec             C   s`   | j |jƒ | jdƒ t|jtƒrF|jjƒ r:| j|jƒ qR| jdƒ n| j |jƒ | jdƒ d S )Nr<   z()r=   )r   r8   r   rp   ÚindexÚ	TupleNoder½   rÁ   )r   r.   r   r   r   Úvisit_IndexNodeƒ  s    

z ExpressionWriter.visit_IndexNodec             C   sn   | j |jƒ | jdƒ |jr(| j |jƒ | jdƒ |jrD| j |jƒ |jr`| jdƒ | j |jƒ | jdƒ d S )Nr<   rS   r=   )r   r8   r   ÚstartÚstopÚslice)r   r.   r   r   r   Úvisit_SliceIndexNode  s    


z%ExpressionWriter.visit_SliceIndexNodec             C   sT   |j js| j|j ƒ | jdƒ |jjs2| j|jƒ |jjsP| jdƒ | j|jƒ d S )NrS   )rû   Zis_noner   r   rü   Ústep)r   r.   r   r   r   Úvisit_SliceNodeœ  s    

z ExpressionWriter.visit_SliceNodec             C   s<   | j |jƒ | jdƒ | j |jƒ | jdƒ | j |jƒ d S )Nz if z else )r   Ztrue_valr   ÚtestZ	false_val)r   r.   r   r   r   Úvisit_CondExprNode¦  s
    

z#ExpressionWriter.visit_CondExprNodec             C   s    | j |jƒ | jd|j ƒ d S )Nz.%s)r   Úobjr   rY   )r   r.   r   r   r   Úvisit_AttributeNode­  s    z$ExpressionWriter.visit_AttributeNodec             C   s0   | j |jƒ | jdƒ | j|jƒ | jdƒ d S )Nr?   r@   )r   Úfunctionr   r-   rA   )r   r.   r   r   r   Úvisit_SimpleCallNode±  s    
z%ExpressionWriter.visit_SimpleCallNodec             C   s¦   |d krd S t |tƒr0| j|jƒ | j|jƒ nrt |tƒrbxf|jƒ D ]}| j|ƒ | jdƒ qDW n@t |t	ƒrŽ| jdƒ | j|j
ƒ | jdƒ n| j|ƒ | jdƒ d S )Nz, r   )rp   ZAddNodeÚemit_pos_argsrò   rô   rù   r½   r   r   ZAsTupleNodeÚarg)r   r.   r’   r   r   r   r  ·  s    





zExpressionWriter.emit_pos_argsc             C   sœ   |d krd S t |tƒr4x€|jƒ D ]}| j|ƒ q W ndt |tƒrzxX|jƒ D ],}| jd|jj ƒ | j|jƒ | jdƒ qHW n| jdƒ | j|ƒ | jdƒ d S )Nz%s=z, z**)	rp   ZMergedDictNoder½   Úemit_kwd_argsZDictNoder   rÆ   rc   r   )r   r.   r’   r   r   r   r	  É  s    



zExpressionWriter.emit_kwd_argsc             C   sF   | j |jƒ | jdƒ | j|jƒ | j|jƒ | jdƒ | jdƒ d S )Nr?   z, r@   )r   r  r   r  rN   r	  rO   rª   )r   r.   r   r   r   Úvisit_GeneralCallNodeÙ  s    

z&ExpressionWriter.visit_GeneralCallNodec             C   sj   |\}}| j |ƒ | j|ƒ | j dƒ | j|ƒ | j dƒ | j|ƒ |r\| j dƒ | j|ƒ | j |ƒ d S )Nz for z in z if )r   r   )r   r5   r„   r†   rŠ   r¾   r¿   rÀ   r   r   r   Úemit_comprehensioná  s    







z#ExpressionWriter.emit_comprehensionc             C   s   | j |jƒ d S )N)r   r’   )r   r.   r   r   r   Úvisit_ComprehensionAppendNodeð  s    z.ExpressionWriter.visit_ComprehensionAppendNodec             C   s&   | j |jƒ | jdƒ | j |jƒ d S )Nz: )r   Zkey_exprr   Z
value_expr)r   r.   r   r   r   Ú!visit_DictComprehensionAppendNodeó  s    
z2ExpressionWriter.visit_DictComprehensionAppendNodec             C   sp   ddddœ}||j jƒ  }|jj}|jj}|jjj}d }t|dƒrZ|jd j	}|jd j}| j
|||||ƒ d S )Nz[]z{})ÚlistÚdictÚsetr‰   r   )ÚtypeZpy_type_nameÚloopr5   r„   r…   r†   Úhasattrr‰   rŠ   r  )r   r.   Ztpmapr¾   r5   r„   r†   rŠ   r   r   r   Úvisit_ComprehensionNodeø  s    

z(ExpressionWriter.visit_ComprehensionNodec             C   sn   |j j}|j j}|j jj}d }t|dƒrF|jd j}|jd jjj	}nt|dƒrX|jj	}| j
||||dƒ d S )Nr‰   r   r’   z())r  r5   r„   r…   r†   r  r‰   rŠ   r’   r  r  )r   r.   r5   r„   r†   rŠ   r   r   r   Úvisit_GeneratorExpressionNode  s    


z.ExpressionWriter.visit_GeneratorExpressionNode)N)r	   ©r	   r	   )r  ©r	   r	   )r  )4r   r   r   r{   r   r    r   rª   r-   r1   r«   r¬   r®   rw   r¯   r±   r²   r´   r·   r¹   rº   r¼   rÁ   rÂ   rÃ   rÄ   rÅ   rÇ   ré   rð   rå   rè   rí   rî   rõ   rö   r÷   rú   rþ   r   r  r  r  r  r	  r
  r  r  r  r  r  r|   r   r   )r   r   r§   á  st   


	


r§   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	PxdWriterz\
    A Cython code writer for everything supported in pxd files.
    (currently unused)
    c             C   s   t dj| j|ƒjƒƒ |S )NÚ
)Úprintr`   r    r
   )r   r.   r   r   r   Ú__call__  s    zPxdWriter.__call__c             C   s~   |j r| jdƒ n
| jdƒ |jr>| jdj|jƒƒ | jdƒ |jdkr^| j|jƒ | jdƒ |jrn| jdƒ | j|jƒ d S )Nzcpdef zcdef rQ   rk   zapi )	rl   r$   rm   r   r`   r\   rn   r   rJ   )r   r.   r   r   r   ro     s    




zPxdWriter.visit_CFuncDefNodec             C   s   d S )Nr   )r   r.   r   r   r   Úvisit_StatNode-  s    zPxdWriter.visit_StatNodeN)r   r   r   r{   r  ro   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   ZCompiler.Visitorr   ZCompiler.ExprNodesZCompiler.Nodesr   Úobjectr   r   r}   r§   r  r  r   r   r   r   Ú<module>   s     +   5