
    -Ph/^                         d Z ddlmZ ddlT ddlmZ  G d d          Z G d de          Z G d	 d
e          Z G d de          Z	 G d dee	          Z
 G 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                   &    e Zd Zd Zd Zd Zd ZdS )LinesResultc                 "    g | _         d| _        d S N )linessselfs    Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/CodeWriter.py__init__zLinesResult.__init__   s    
    c                 &    | xj         |z  c_         d S N)r   r   r   s     r   putzLinesResult.put   s    !r   c                 R    | j                             | j                   d| _        d S r	   )r   appendr   r   s    r   newlinezLinesResult.newline   s%    
$&!!!r   c                 X    |                      |           |                                  d S r   )r   r   r   s     r   putlinezLinesResult.putline   s"    r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      sP                  r   r   c                       e Zd ZdZdZd. fd	Zd Zd Zd Zd/d	Z	d
 Z
d Zd/dZd Zd0dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*d, Z+d- Z, xZ-S )1DeclarationWriterzE
    A Cython code writer that is limited to declarations nodes.
    z    Nc                     t                                                       |t                      }|| _        d| _        i | _        d| _        d S )N    )superr   r   result
numindents	tempnamestempblockindexr   r$   	__class__s     r   r   zDeclarationWriter.__init__&   sJ    > ]]Fr   c                 :    |                      |           | j        S r   visitr$   r   trees     r   writezDeclarationWriter.write/       

4{r   c                 &    | xj         dz  c_         d S Nr   r%   r   s    r   indentzDeclarationWriter.indent3       1r   c                 &    | xj         dz  c_         d S r2   r3   r   s    r   dedentzDeclarationWriter.dedent6   r5   r   r
   c                 Z    | j                             | j        | j        z  |z              d S r   )r$   r   indent_stringr%   r   s     r   	startlinezDeclarationWriter.startline9   s+    *T_<q@AAAAAr   c                 :    | j                             |           d S r   )r$   r   r   s     r   r   zDeclarationWriter.put<   s    r   c                 Z    | j                             | j        | j        z  |z              d S r   )r$   r   r9   r%   r   s     r   r   zDeclarationWriter.putline?   s-    D.@1DEEEEEr   c                 :    | j                             |           d S r   )r$   r   r   s     r   endlinezDeclarationWriter.endlineB   s    Ar   c                 X    |                      |           |                                  d S r   r:   r>   r   s     r   linezDeclarationWriter.lineE   s%    qr   Fc                    t          |          dk    r|d d         D ]d}|                     |           |r6|j        /|                     d           |                     |j                   |                     d           e|                     |d                    |rF|d         j        ;|                     d           |                     |d         j                   d S d S d S d S )Nr"    = , )lenr,   defaultr   )r   items
output_rhsitems       r   comma_separated_listz&DeclarationWriter.comma_separated_listI   s    u::>>crc
  

4    -$,":HHUOOOJJt|,,,JJuRy!!! .eBi/;

59,----- >. .;;r   c                     |                                   |                     |           |                                  d S r   )r4   r,   r7   r   nodes     r   _visit_indentedz!DeclarationWriter._visit_indentedV   s2    

4r   c                 &    t          d|z            Nz"Node not handled by serializer: %rAssertionErrorrM   s     r   
visit_NodezDeclarationWriter.visit_Node[       ADHIIIr   c                 0    |                      |           d S r   visitchildrenrM   s     r   visit_ModuleNodez"DeclarationWriter.visit_ModuleNode^       4     r   c                 0    |                      |           d S r   rW   rM   s     r   visit_StatListNodez$DeclarationWriter.visit_StatListNodea   rZ   r   c                     |j         d}n
d|j         z  }|                     d|z             |                     |j                   d S )Nr   z"%s"zcdef extern from %s:)include_filer   rO   body)r   rN   files      r   visit_CDefExternNodez&DeclarationWriter.visit_CDefExternNoded   sS    $DDD--D+d2333TY'''''r   c                 d    |                      d           |                     |j                   d S )Nr   r   r,   baserM   s     r   visit_CPtrDeclaratorNodez*DeclarationWriter.visit_CPtrDeclaratorNodel   +    

49r   c                 d    |                      d           |                     |j                   d S )N&rc   rM   s     r   visit_CReferenceDeclaratorNodez0DeclarationWriter.visit_CReferenceDeclaratorNodep   rf   r   c                     |                      |j                   |                     d           |j        |                      |j                   |                     d           d S N[])r,   rd   r   	dimensionrM   s     r   visit_CArrayDeclaratorNodez,DeclarationWriter.visit_CArrayDeclaratorNodet   sT    

49>%JJt~&&&r   c                     |                      |j                   |                     d           |                     |j                   |                     d           d S N())r,   rd   r   rK   argsr>   rM   s     r   visit_CFuncDeclaratorNodez+DeclarationWriter.visit_CFuncDeclaratorNode{   sS    

49!!$),,,Sr   c                 :    |                      |j                   d S r   r   namerM   s     r   visit_CNameDeclaratorNodez+DeclarationWriter.visit_CNameDeclaratorNode       r   c                 >   |j         rr|                     d|j                            |j        dk     r|                     d|j         z             n(|j        dk    r|                     d|j        z             |j        |                     |j                   d S d S )N)z	unsigned r
   zsigned r"   zshort zlong )is_basic_c_typer   signedlongnessrx   rM   s     r   visit_CSimpleBaseTypeNodez+DeclarationWriter.visit_CSimpleBaseTypeNode   s     	2HH1$+>???}q  T]N23333""4=01119 HHTY ! r   c                 n    |                      |j                   |                      |j                   d S r   )r,   	base_type
declaratorrM   s     r   visit_CComplexBaseTypeNodez,DeclarationWriter.visit_CComplexBaseTypeNode   s0    

4>"""

4?#####r   c                     |                      |j                   |                     d           |                     |j                   d S )N.)r,   r   r   rx   rM   s     r   visit_CNestedBaseTypeNodez+DeclarationWriter.visit_CNestedBaseTypeNode   s?    

4>"""r   c                     |                      |j                   |                     d           |                     |j        |j        j        z              |                     d           d S rk   )r,   base_type_noder   rK   positional_argskeyword_argskey_value_pairsrM   s     r   visit_TemplatedTypeNodez)DeclarationWriter.visit_TemplatedTypeNode   s[    

4&'''!!$"69J9Z"Z[[[r   c                     |                      d           |                     |j                   |                     d           |                     |j        d           |                                  d S )Ncdef  T)rI   )r:   r,   r   r   rK   declaratorsr>   rM   s     r   visit_CVarDefNodez#DeclarationWriter.visit_CVarDefNode   sd    w

4>"""!!$"2t!DDDr   c                    |                      |           |j        rS|                     d           |                     |j                   |j        |                     d|j        z             |r|                     |           |                     d           |                                  |s|                     d           n|D ]}|                     |           |                                  d S )Nr    "%s":pass)	r:   rx   r   cnamer>   r4   r   r,   r7   )r   rN   declextras
attributes	attributes         r   _visit_container_nodez'DeclarationWriter._visit_container_node   s    t9 	/HHSMMMHHTYz%4:-... 	HHVS 	&LL    ' & &	

9%%%%r   c                     |j         rd}nd}|j        dk    r|dz  }|j        r|dz  }||j        z  }|                     ||d |j                   d S )N	ctypedef r   publiczpublic zpacked )typedef_flag
visibilitypackedkindr   r   )r   rN   r   s      r   visit_CStructOrUnionDefNodez-DeclarationWriter.visit_CStructOrUnionDefNode   sr     	DDD?h&&ID; 	ID	""4tT_EEEEEr   c                     d}|j         rdd                    |j                   z  }|j        r |dd                    |j                  z  z  }|                     |d||j                   d S )Nr
   z[%s]rE   z(%s)zcdef cppclass)	templatesjoinbase_classesr   r   )r   rN   r   s      r   visit_CppClassNodez$DeclarationWriter.visit_CppClassNode   st    > 	8dii777F 	<ftyy):;;;;F""4&$/RRRRRr   c                 @    |                      |dd |j                   d S )Nz	cdef enum)r   rH   rM   s     r   visit_CEnumDefNodez$DeclarationWriter.visit_CEnumDefNode   s$    ""4dDJGGGGGr   c                    |                      |j                   |j        r|                     d|j        z             |j        r/|                     d           |                     |j                   |                                  d S )Nr   rD   )r:   rx   r   r   valuer,   r>   rM   s     r   visit_CEnumDefItemNodez(DeclarationWriter.visit_CEnumDefItemNode   sw    ty!!!: 	+HHWtz)***: 	#HHUOOOJJtz"""r   c                 "   |j         rJ |j        r|j        D ]}|                     |           |                     d           |                     |j                   |j        rz|                     d           |j        r/|                     |j                   |                     d           |                     |j                   |                     d           |                     d           | 	                    |j
                   d S )Nzcdef class rr   r   rs   r   )module_name
decoratorsr,   r:   r   
class_namebase_class_namebase_class_moduler>   rO   r_   )r   rN   	decorators      r   visit_CClassDefNodez%DeclarationWriter.visit_CClassDefNode   s   ####? 	&!_ & &	

9%%%%}%%%!!! 	HHSMMM% /000HHT)***HHSMMMSTY'''''r   c                     |                      d           |                     |j                   |                     d           |                     |j                   |                                  d S )Nr   r   )r:   r,   r   r   r   r>   rM   s     r   visit_CTypeDefNodez$DeclarationWriter.visit_CTypeDefNode   s\    {###

4>"""

4?###r   c                     |                      d|j        z             |                     |j                   |                     d           |                     |j                   d S )Nzdef %s():)r:   rx   rK   rt   r>   rO   r_   rM   s     r   visit_FuncDefNodez#DeclarationWriter.visit_FuncDefNode   s_    y49,---!!$),,,TTY'''''r   c                    |                      |j        rdnd           |j        rB|                     d                    |j                             |                     d           |j        dk    r/|                     |j                   |                     d           |j        r|                     d           |j        r;|                     |j                   |j        j	        |                     d           |                     |j
        j                   |                     d           |                     |j
        j                   |                     d           |                     |j                   d S )Ncpdef r   r   privateapi rr   r   )r:   overridable	modifiersr   r   r   apir   r,   rx   r   rd   rK   rt   r>   rO   r_   rM   s     r   visit_CFuncDefNodez$DeclarationWriter.visit_CFuncDefNode   sL   4#3@xxAAA> 	HHSXXdn--...HHSMMM?i''HHT_%%%HHSMMM8 	HHV> 	JJt~&&&~". 	

4?'(((!!$/"6777TTY'''''r   c                    t          |j        t                    r|j        j        H|                     |j                   |j                                        r|                     d           |                     |j                   |j        1|                     d           |                     |j                   d S d S )Nr   rD   )	
isinstancer   r   rx   r,   r   declared_namer   rG   rM   s     r   visit_CArgDeclNodez$DeclarationWriter.visit_CArgDeclNode  s     $.*=>> 		#/JJt~&&& ,,.. 

4?###<#HHUOOOJJt|$$$$$ $#r   c                     |                      d           |                     |j                   |j        r/|                     d           |                     |j                   |                                  d S )Nzcimport  as )r:   r   r   as_namer>   rM   s     r   visit_CImportStatNodez'DeclarationWriter.visit_CImportStatNode"  sj    z"""!"""< 	#HHVHHT\"""r   c                    |                      d           |                     |j                   |                     d           d}|j        D ]f\  }}}}|J |rd}n|                     d           |                     |           |r*|                     d           |                     |           g|                                  d S )Nzfrom z	 cimport TFrE   r   )r:   r   r   imported_namesr>   )r   rN   firstposrx   r   r   s          r   visit_FromCImportStatNodez+DeclarationWriter.visit_FromCImportStatNode*  s    w!"""(,(; 		" 		"$Cw<<< HHTNNN "   !!!r   c                 :    |                      |j                   d S r   rw   rM   s     r   visit_NameNodez DeclarationWriter.visit_NameNode;  rz   r   c                     |                      d           |                     |j                   |                                  d S )N@)r:   r,   r   r>   rM   s     r   visit_DecoratorNodez%DeclarationWriter.visit_DecoratorNode>  s9    s

4>"""r   c                 X    |                      d           |                                  d S )Nr   r@   rM   s     r   visit_PassStatNodez$DeclarationWriter.visit_PassStatNodeC  s%    vr   r   )r
   )F).r   r   r   __doc__r9   r   r/   r4   r7   r:   r   r   r>   rA   rK   rO   rT   rY   r\   ra   re   ri   ro   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r)   s   @r   r    r       s         M                 B B B B  F F F     . . . .  
J J J! ! !! ! !( ( (          	  	  	 $ $ $  
      &
F 
F 
FS S SH H H  ( ( ("  ( ( (( ( (0% % %$    "    
      r   r    c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )StatementWriterzD
    A Cython code writer for most language statement features.
    c                     |                                   |                     |j                   |                     d           |                     |j                   |                                  d S NrD   )r:   r,   lhsr   rhsr>   rM   s     r   visit_SingleAssignmentNodez*StatementWriter.visit_SingleAssignmentNodeM  sZ    

48

48r   c                     |                                   |j        D ],}|                     |           |                     d           -|                     |j                   |                                  d S r   )r:   lhs_listr,   r   r   r>   )r   rN   r   s      r   visit_CascadedAssignmentNodez,StatementWriter.visit_CascadedAssignmentNodeT  sh    = 	 	CJJsOOOHHUOOOO

48r   c                     |                      d           |                     |j        j                   |j        s|                     d           |                                  d S )Nzprint ,)r:   rK   	arg_tuplert   append_newliner   r>   rM   s     r   visit_PrintStatNodez#StatementWriter.visit_PrintStatNode\  sX    x   !!$."5666" 	HHSMMMr   c                    |                      d           |j        j        r |                     |j        j                   n|                     |j                   |                     d           |                     |j        j                   | 	                    d           | 
                    |j                   |j        1|                     d           | 
                    |j                   d S d S )Nzfor  in r   else:)r:   targetis_sequence_constructorrK   rt   r,   r   iteratorsequencer>   rO   r_   else_clauserA   rM   s     r   visit_ForInStatNodez#StatementWriter.visit_ForInStatNodec  s    v;. 	$%%dk&67777JJt{###

4=)***STY''''IIg  !122222 ('r   c                 >   |                      d           |                     |j        d         j                   |                     d           |                     |j        d         j                   |j        dd          D ]`}|                      d           |                     |j                   |                     d           |                     |j                   a|j        1|                     d           |                     |j                   d S d S )Nzif r"   r   r   zelif r   )	r:   r,   
if_clauses	conditionr>   rO   r_   r   rA   )r   rN   clauses      r   visit_IfStatNodez StatementWriter.visit_IfStatNodeq  s    	u

4?1%/000ST_Q/4555oabb) 	. 	.FNN7###JJv'(((LL  ----'IIg  !122222 ('r   c                 2   |                      d           |                     |j                   |                     d           |                     |j                   |j        1|                     d           |                     |j                   d S d S )Nzwhile r   r   )r:   r,   r   r>   rO   r_   r   rA   rM   s     r   visit_WhileStatNodez#StatementWriter.visit_WhileStatNode  s    x   

4>"""STY''''IIg  !122222 ('r   c                 0    |                      d           d S )NcontinuerA   rM   s     r   visit_ContinueStatNodez&StatementWriter.visit_ContinueStatNode  s    		*r   c                 0    |                      d           d S )Nbreakr   rM   s     r   visit_BreakStatNodez#StatementWriter.visit_BreakStatNode      		'r   c                 :    |                      |j                   d S r   )rK   rt   rM   s     r   visit_SequenceNodez"StatementWriter.visit_SequenceNode  s    !!$),,,,,r   c                     |                                   |                     |j                   |                                  d S r   )r:   r,   exprr>   rM   s     r   visit_ExprStatNodez"StatementWriter.visit_ExprStatNode  s7    

49r   c                     |                                   |                     |j                   |                     d|j        z             |                     |j                   |                                  d S )Nz %s= )r:   r,   r   r   operatorr   r>   rM   s     r   visit_InPlaceAssignmentNodez+StatementWriter.visit_InPlaceAssignmentNode  sd    

484=()))

48r   c                 V   |                                   |                     d           |                     |j                   |j        /|                     d           |                     |j                   |                     d           |                     |j                   d S )Nzwith r   r   )r:   r   r,   managerr   r>   rO   r_   rM   s     r   visit_WithStatNodez"StatementWriter.visit_WithStatNode  s    

4<   ;"HHVJJt{###STY'''''r   c                     |                      d           |                     |j                   |                      d           |                     |j                   d S )Ntry:zfinally:)rA   rO   r_   finally_clauserM   s     r   visit_TryFinallyStatNodez(StatementWriter.visit_TryFinallyStatNode  sY    		&TY'''		*T011111r   c                     |                      d           |                     |j                   |j        D ]}|                     |           |j        |                     |j                   d S d S )Nr  )rA   rO   r_   except_clausesr,   r   )r   rN   xs      r   visit_TryExceptStatNodez'StatementWriter.visit_TryExceptStatNode  sy    		&TY'''$ 	 	AJJqMMMM'JJt'((((( ('r   c                 f   |                      d           |j        /|                     d           |                     |j                   |j        /|                     d           |                     |j                   |                     d           |                     |j                   d S )Nexceptr   rE   r   )r:   patternr   r,   r   r>   rO   r_   rM   s     r   visit_ExceptClauseNodez&StatementWriter.visit_ExceptClauseNode  s    x   <#HHSMMMJJt|$$$;"HHTNNNJJt{###STY'''''r   c                     |                      d           |j        /|                     d           |                     |j                   |                                  d S )Nreturnr   )r:   r   r   r,   r>   rM   s     r   visit_ReturnStatNodez$StatementWriter.visit_ReturnStatNode  sP    x   :!HHSMMMJJtz"""r   c                 0    |                      d           d S )Nraiser   rM   s     r   visit_ReraiseStatNodez%StatementWriter.visit_ReraiseStatNode  r   r   c                 J    |                      d|j        j        z             d S )Nz(import %s))r   r   r   rM   s     r   visit_ImportNodez StatementWriter.visit_ImportNode  s%    !1!7788888r   c                     d}|j         D ]}d| j        |fz  | j        |<   |dz  }| xj        dz  c_        |                     |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,   r_   )r   rN   idxhandles       r   visit_TempsBlockNodez$StatementWriter.visit_TempsBlockNode  sl     j 	 	F%-1Dc0J%JDN6"1HCCq 

49r   c                 P    |                      | j        |j                            d S r   )r   r&   r#  rM   s     r   visit_TempRefNodez!StatementWriter.visit_TempRefNode  s#    ,-----r   N)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  sJ              3 3 33 3 3 3 3 3    - - -  
  ( ( (2 2 2) ) )	( 	( 	(    9 9 9  . . . . .r   r   c            
           e Zd ZdZdN fd	Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd ZdOdZd Zd Zd Zd Zd ZddddddZi dddd d!d"d#d"d$d"d%d"d&d"d'd"d(d"d)d"d*d"d+d"d,d-d.d/d0d1d2d3d4d3d5d5d6d6d6d6d6d7d8Zd9 Zd: Zd; Zd< Zd= Z d> Z!d? Z"d@ Z#dA Z$dB Z%dC Z&dD Z'dE Z(dF Z)dG Z*dH Z+	 dOdIZ,dJ Z-dK Z.dL Z/dM Z0 xZ1S )PExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    Nc                 n    t                                                       |d}|| _        dg| _        d S )Nr
   r"   )r#   r   r$   
precedencer(   s     r   r   zExpressionWriter.__init__  s7    >F#r   c                 :    |                      |           | j        S r   r+   r-   s     r   r/   zExpressionWriter.write  r0   r   c                 &    | xj         |z  c_         d S r   )r$   r   s     r   r   zExpressionWriter.put  s    qr   c                     | j                             |          r$| j         d t          |                    | _         d S d S r   )r$   endswithrF   r   s     r   removezExpressionWriter.remove  sB    ;"" 	0+hAwh/DKKK	0 	0r   c                     t          |          dk    rT|d d         D ],}|                     |           |                     d           -|                     |d                    d S d S )Nr"   rC   rE   )rF   r,   r   )r   rH   rJ   s      r   rK   z%ExpressionWriter.comma_separated_list  sn    u::>>crc
  

4   JJuRy!!!!!	 >r   c                 &    t          d|z            rQ   rR   rM   s     r   rT   zExpressionWriter.visit_Node  rU   r   c                 :    |                      |j                   d S r   r   r   rM   s     r   visit_IntNodezExpressionWriter.visit_IntNode      r   c                 :    |                      |j                   d S r   r3  rM   s     r   visit_FloatNodez ExpressionWriter.visit_FloatNode  r5  r   c                 0    |                      d           d S )NNoner   rM   s     r   visit_NoneNodezExpressionWriter.visit_NoneNode	  s    r   c                 :    |                      |j                   d S r   rw   rM   s     r   r   zExpressionWriter.visit_NameNode  rz   r   c                 0    |                      d           d S )Nz...r:  rM   s     r   visit_EllipsisNodez#ExpressionWriter.visit_EllipsisNode  s    r   c                 T    |                      t          |j                             d S r   r   strr   rM   s     r   visit_BoolNodezExpressionWriter.visit_BoolNode  "    TZ!!!!!r   c                 T    |                      t          |j                             d S r   r@  rM   s     r   visit_ConstNodez ExpressionWriter.visit_ConstNode  rC  r   c                 @    |                      |j         d           d S )Njr3  rM   s     r   visit_ImagNodezExpressionWriter.visit_ImagNode  s%    DJ!!!"""""r   c                 T    |                      t          |j                             d S r   r   reprr   rM   s     r   visit_BytesNodez ExpressionWriter.visit_BytesNode  $    dj!!"""""r   c                 T    |                      t          |j                             d S r   rJ  rM   s     r   visit_UnicodeNodez"ExpressionWriter.visit_UnicodeNode  rM  r   r
   r
   c                     |\  }}|                                 }|                     |           |                     |           |                     |           d S r   )subexpr_nodesr   rK   )r   rN   parens
open_parenclose_parenrH   s         r   emit_sequencezExpressionWriter.emit_sequence!  s[    "(
K""$$!!%(((r   c                 2    |                      |d           d S )N[]rV  rM   s     r   visit_ListNodezExpressionWriter.visit_ListNode(      4&&&&&r   c                 2    |                      |d           d S )N()rY  rM   s     r   visit_TupleNodez ExpressionWriter.visit_TupleNode+  r[  r   c                     t          |                                          dk    r|                     |d           d S |                     d           d S )Nr"   {}zset())rF   rR  rV  r   rM   s     r   visit_SetNodezExpressionWriter.visit_SetNode.  sU    t!!##$$q((tT*****HHWr   c                 2    |                      |d           d S )Nr`  rY  rM   s     r   visit_DictNodezExpressionWriter.visit_DictNode4  r[  r   c                     |                      |j                   |                     d           |                      |j                   d S Nz: )r,   keyr   r   rM   s     r   visit_DictItemNodez#ExpressionWriter.visit_DictItemNode7  s?    

48

4:r         )not!+-~orr   and   in   not_inisis_not<z<=>z>=z!=z==|   ^   rh      z<<   z>>	   
      )rl  rm  r   r   /z//%**c                     | j         d         }||k    r|                     d           | j                             |           d S )NrC   rr   )r*  r   r   )r   new_precold_precs      r   operator_enterzExpressionWriter.operator_enterO  sD    ?2&hHHSMMMx(((((r   c                     | j         dd          \  }}||k    r|                     d           | j                                          d S )Nrs   )r*  r   pop)r   r  r  s      r   operator_exitzExpressionWriter.operator_exitU  sK    !_RSS1(hHHSMMMr   c                     d}| j         |         }|                     |           |                     d           |                     |j                   |                                  d S )Nrj  znot )unop_precedencer  r   r,   operandr  r   rN   opprecs       r   visit_NotNodezExpressionWriter.visit_NotNode[  sf    #B'D!!!

4<   r   c                     |j         }| j        |         }|                     |           |                     d|j         z             |                     |j                   |                                  d S )Nz%s)r  r  r  r   r,   r  r  r  s       r   visit_UnopNodezExpressionWriter.visit_UnopNodec  so    ]#B'D!!!%&&&

4<   r   c                 \   |j         }| j                            |d          }|                     |           |                     |j                   |                     d|                    dd          z             |                     |j                   | 	                                 d S )Nr"   z %s _r   )
r  binop_precedencegetr  r,   operand1r   replaceoperand2r  r  s       r   visit_BinopNodez ExpressionWriter.visit_BinopNodek  s    ]$((Q//D!!!

4=!!!"**S#...///

4=!!!r   c                 0    |                      |           d S r   r  rM   s     r   visit_BoolBinopNodez$ExpressionWriter.visit_BoolBinopNodet      T"""""r   c                 0    |                      |           d S r   r  rM   s     r   visit_PrimaryCmpNodez%ExpressionWriter.visit_PrimaryCmpNodew  r  r   c                    |                      |j                   |                     d           t          |j        t
                    rJ|j                                        r|                     |j                   n0|                     d           n|                      |j                   |                     d           d S )Nrl   r]  rm   )r,   rd   r   r   index	TupleNoderR  rV  rM   s     r   visit_IndexNodez ExpressionWriter.visit_IndexNodez  s    

49dj),, 	#z'')) ""4:....JJtz"""r   c                    |                      |j                   |                     d           |j        r|                      |j                   |                     d           |j        r|                      |j                   |j        r/|                     d           |                      |j                   |                     d           d S )Nrl   r   rm   )r,   rd   r   startstopslicerM   s     r   visit_SliceIndexNodez%ExpressionWriter.visit_SliceIndexNode  s    

49: 	#JJtz"""9 	"JJty!!!: 	#HHSMMMJJtz"""r   c                 B   |j         j        s|                     |j                    |                     d           |j        j        s|                     |j                   |j        j        s1|                     d           |                     |j                   d S d S )Nr   )r  is_noner,   r   r  steprM   s     r   visit_SliceNodez ExpressionWriter.visit_SliceNode  s    z! 	#JJtz"""y  	"JJty!!!y  	"HHSMMMJJty!!!!!	" 	"r   c                     |                      |j                   |                     d           |                      |j                   |                     d           |                      |j                   d S )N if z else )r,   true_valr   test	false_valrM   s     r   visit_CondExprNodez#ExpressionWriter.visit_CondExprNode  sh    

4=!!!

49

4>"""""r   c                 t    |                      |j                   |                     d|j        z             d S )Nz.%s)r,   objr   r   rM   s     r   visit_AttributeNodez$ExpressionWriter.visit_AttributeNode  s5    

48'(((((r   c                     |                      |j                   |                     d           |                     |j                   |                     d           d S rq   )r,   functionr   rK   rt   rM   s     r   visit_SimpleCallNodez%ExpressionWriter.visit_SimpleCallNode  sN    

4=!!!!!$),,,r   c                 ^   |d S t          |t                    r6|                     |j                   |                     |j                   d S t          |t
                    rC|                                D ],}|                     |           |                     d           -d S t          |t                    rF|                     d           |                     |j
                   |                     d           d S |                     |           |                     d           d S )NrE   r   )r   AddNodeemit_pos_argsr  r  r  rR  r,   r   AsTupleNodeargr   rN   r  s      r   r  zExpressionWriter.emit_pos_args  s   <FdG$$ 	t}---t}-----i(( 
	**,,  

4     k** 	HHSMMMJJtx   HHTNNNNNJJtHHTNNNNNr   c                    |d S t          |t                    r.|                                D ]}|                     |           d S t          |t                    rj|                                D ]S}|                     d|j        j        z             |                     |j                   |                     d           Td S |                     d           |                     |           |                     d           d S )Nz%s=rE   r  )	r   MergedDictNoderR  emit_kwd_argsDictNoder   rf  r   r,   r  s      r   r  zExpressionWriter.emit_kwd_args  s   <FdN++ 	**,, ) )""4(((() )h'' 	**,,  /000

4:&&& 
 HHTNNNJJtHHTNNNNNr   c                     |                      |j                   |                     d           |                     |j                   |                     |j                   |                     d           |                     d           d S )Nrr   rE   rs   )r,   r  r   r  r   r  r   r/  rM   s     r   visit_GeneralCallNodez&ExpressionWriter.visit_GeneralCallNode  sx    

4=!!!4/0004,---Dr   c                    |\  }}|                      |           |                     |           |                      d           |                     |           |                      d           |                     |           |r*|                      d           |                     |           |                      |           d S )Nz for r   r  )r   r,   )r   r_   r   r   r   rS  rT  rU  s           r   emit_comprehensionz#ExpressionWriter.emit_comprehension  s     #)
K

4

6

8 	"HHVJJy!!!r   c                 :    |                      |j                   d S r   )r,   r  rM   s     r   visit_ComprehensionAppendNodez.ExpressionWriter.visit_ComprehensionAppendNode  s    

49r   c                     |                      |j                   |                     d           |                      |j                   d S re  )r,   key_exprr   
value_exprrM   s     r   !visit_DictComprehensionAppendNodez2ExpressionWriter.visit_DictComprehensionAppendNode  s?    

4=!!!

4?#####r   c                 @   dddd}||j                                                  }|j        j        }|j        j        }|j        j        j        }d }t          |d          r$|j        d         j	        }|j        d         j        }| 
                    |||||           d S )NrX  r`  )listdictsetr   r"   )typepy_type_nameloopr_   r   r   r   hasattrr   r   r  )r   rN   tpmaprS  r_   r   r   r   s           r   visit_ComprehensionNodez(ExpressionWriter.visit_ComprehensionNode  s    tD99ty--//0y~!9%.	4&& 	+*4I?1%*Dfh	6JJJJJr   c                 D   |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  r_   r   r   r   r  r   r   r  r  r  )r   rN   r_   r   r   r   s         r   visit_GeneratorExpressionNodez.ExpressionWriter.visit_GeneratorExpressionNode  s    y~!9%.	4&& 	!*4I?1%*/3DDT6"" 	!9=Dfh	4HHHHHr   r   )rP  )2r   r   r   r   r   r/   r   r/  rK   rT   r4  r7  r;  r   r>  rB  rE  rH  rL  rO  rV  rZ  r^  ra  rc  rg  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   s   @r   r(  r(    s                 0 0 0" " "J J J
          " " "" " "# # ## # ## # #   ' ' '' ' '  ' ' '   qbr Oaq 	a	 1	 #A	 (0	 58	 =A!	 FI!	 NRST	 W[\]	 `def	
 	Q 	Q 	Q 	a q Qbr"  ) ) )        # # ## # #
 
 
  " " "# # #) ) )    $      #+     $ $ $
K K KI I I I I I Ir   r(  c                   $    e Zd ZdZd Zd Zd ZdS )	PxdWriterz\
    A Cython code writer for everything supported in pxd files.
    (currently unused)
    c                 z    t          d                    |                     |          j                             |S )N
)printr   r/   r   rM   s     r   __call__zPxdWriter.__call__  s0    dii

4((.//000r   c                    |j         r|                     d           n|                     d           |j        rB|                     d                    |j                             |                     d           |j        dk    r/|                     |j                   |                     d           |j        r|                     d           |                     |j                   d S )Nr   r   r   r   r   )	r   r:   r   r   r   r   r   r,   r   rM   s     r   r   zPxdWriter.visit_CFuncDefNode  s     	$NN8$$$$NN7###> 	HHSXXdn--...HHSMMM?i''HHT_%%%HHSMMM8 	HHV

4?#####r   c                     d S r   r   rM   s     r   visit_StatNodezPxdWriter.visit_StatNode$  s    r   N)r   r   r   r   r  r   r  r   r   r   r  r    sK         
  $ $ $    r   r  c                       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   r  N)r   Compiler.Visitorr   Compiler.ExprNodesCompiler.Nodesr   r   r    r   r(  r  r  r   r   r   <module>r     sp    * ) ) ) ) ) ! ! ! ! / / / / / /       "f f f f f f f fR	U. U. U. U. U.' U. U. U.phI hI hI hI hI{ hI hI hIV	    !#3   :    "2     r   