
    ڏDjb                         d Z ddlmZ ddl 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y)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y)LinesResultc                      g | _         d| _        y N )linessselfs    UC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/CodeWriter.py__init__zLinesResult.__init__   s    
    c                 .    | xj                   |z  c_         y N)r   r   r   s     r   putzLinesResult.put   s    !r   c                 \    | j                   j                  | j                         d| _        y r	   )r   appendr   r   s    r   newlinezLinesResult.newline   s    

$&&!r   c                 F    | j                  |       | j                          y r   )r   r   r   s     r   putlinezLinesResult.putline   s    r   N)__name__
__module____qualname__r   r   r   r    r   r   r   r      s    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d-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+d* Z, xZ-S ).DeclarationWriterzE
    A Cython code writer that is limited to declarations nodes.
    z    c                 r    t         |           |
t               }|| _        d| _        i | _        d| _        y )N    )superr   r   result
numindents	tempnamestempblockindex)r   r$   	__class__s     r   r   zDeclarationWriter.__init__&   s7    > ]Fr   c                 <    | j                  |       | j                  S r   visitr$   r   trees     r   writezDeclarationWriter.write/       

4{{r   c                 .    | xj                   dz  c_         y Nr   r%   r   s    r   indentzDeclarationWriter.indent3       1r   c                 .    | xj                   dz  c_         y r1   r2   r   s    r   dedentzDeclarationWriter.dedent6   r4   r   c                 n    | j                   j                  | j                  | j                  z  |z          y r   )r$   r   indent_stringr%   r   s     r   	startlinezDeclarationWriter.startline9   s&    **T__<q@Ar   c                 :    | j                   j                  |       y r   )r$   r   r   s     r   r   zDeclarationWriter.put<   s    r   c                 n    | j                   j                  | j                  | j                  z  |z          y r   )r$   r   r8   r%   r   s     r   r   zDeclarationWriter.putline?   s(    D..@1DEr   c                 :    | j                   j                  |       y r   )r$   r   r   s     r   endlinezDeclarationWriter.endlineB   s    Ar   c                 F    | j                  |       | j                          y r   r9   r=   r   s     r   linezDeclarationWriter.lineE   s    qr   c                    t        |      dkD  r|d d D ]^  }| j                  |       |r8|j                  ,| j                  d       | j                  |j                         | j                  d       ` | j                  |d          |r@|d   j                  0| j                  d       | j                  |d   j                         y y y y )Nr"    = , )lenr+   defaultr   )r   items
output_rhsitems       r   comma_separated_listz&DeclarationWriter.comma_separated_listI   s    u:>cr
 

4 $,,":HHUOJJt||, JJuRy!eBi//;

59,,- <z r   c                 f    | j                          | j                  |       | j                          y r   )r3   r+   r6   r   nodes     r   _visit_indentedz!DeclarationWriter._visit_indentedV   s     

4r   c                     t        d|z        )N"Node not handled by serializer: %r)AssertionErrorrL   s     r   
visit_NodezDeclarationWriter.visit_Node[   s    ADHIIr   c                 &    | j                  |       y r   visitchildrenrL   s     r   visit_ModuleNodez"DeclarationWriter.visit_ModuleNode^       4 r   c                 &    | j                  |       y r   rT   rL   s     r   visit_StatListNodez$DeclarationWriter.visit_StatListNodea   rW   r   c                     |j                   d}nd|j                   z  }| j                  d|z         | j                  |j                         y )Nr   z"%s"zcdef extern from %s:)include_filer   rN   body)r   rM   files      r   visit_CDefExternNodez&DeclarationWriter.visit_CDefExternNoded   sG    $DD---D+d23TYY'r   c                 \    | j                  d       | j                  |j                         y )Nr   r   r+   baserL   s     r   visit_CPtrDeclaratorNodez*DeclarationWriter.visit_CPtrDeclaratorNodel       

499r   c                 \    | j                  d       | j                  |j                         y )N&r`   rL   s     r   visit_CReferenceDeclaratorNodez0DeclarationWriter.visit_CReferenceDeclaratorNodep   rc   r   c                     | j                  |j                         | j                  d       |j                  | j                  |j                         | j                  d       y N[])r+   ra   r   	dimensionrL   s     r   visit_CArrayDeclaratorNodez,DeclarationWriter.visit_CArrayDeclaratorNodet   sB    

499>>%JJt~~&r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       y N())r+   ra   r   rJ   argsr=   rL   s     r   visit_CFuncDeclaratorNodez+DeclarationWriter.visit_CFuncDeclaratorNode{   s;    

499!!$)),Sr   c                 :    | j                  |j                         y r   r   namerL   s     r   visit_CNameDeclaratorNodez+DeclarationWriter.visit_CNameDeclaratorNode       r   c                 `   |j                   rz| j                  d|j                            |j                  dk  r | j                  d|j                   z         n-|j                  dkD  r| j                  d|j                  z         |j                  | j                  |j                         y y )N)z	unsigned r
   zsigned r"   zshort zlong )is_basic_c_typer   signedlongnessru   rL   s     r   visit_CSimpleBaseTypeNodez+DeclarationWriter.visit_CSimpleBaseTypeNode   s    HH1$++>?}}q T]]N23"4==0199 HHTYY !r   c                 p    | j                  |j                         | j                  |j                         y r   )r+   	base_type
declaratorrL   s     r   visit_CComplexBaseTypeNodez,DeclarationWriter.visit_CComplexBaseTypeNode   s"    

4>>"

4??#r   c                     | j                  |j                         | j                  d       | j                  |j                         y )N.)r+   r~   r   ru   rL   s     r   visit_CNestedBaseTypeNodez+DeclarationWriter.visit_CNestedBaseTypeNode   s-    

4>>"r   c                     | j                  |j                         | j                  d       | j                  |j                  |j
                  j                  z          | j                  d       y rh   )r+   base_type_noder   rJ   positional_argskeyword_argskey_value_pairsrL   s     r   visit_TemplatedTypeNodez)DeclarationWriter.visit_TemplatedTypeNode   sO    

4&&'!!$"6"69J9J9Z9Z"Z[r   c                     | j                  d       | j                  |j                         | j                  d       | j	                  |j
                  d       | j                          y )Ncdef  T)rH   )r9   r+   r~   r   rJ   declaratorsr=   rL   s     r   visit_CVarDefNodez#DeclarationWriter.visit_CVarDefNode   sK    w

4>>"!!$"2"2t!Dr   c                    | j                  |       |j                  rV| j                  d       | j                  |j                         |j                  | j                  d|j                  z         |r| j                  |       | j	                  d       | j                          |s| j                  d       n|D ]  }| j                  |        | j                          y )Nr    "%s":pass)	r9   ru   r   cnamer=   r3   r   r+   r6   )r   rM   declextras
attributes	attributes         r   _visit_container_nodez'DeclarationWriter._visit_container_node   s    t99HHSMHHTYYzz%4::-.HHVSLL ' &	

9%&r   c                     |j                   rd}nd}|j                  dk(  r|dz  }|j                  r|dz  }||j                  z  }| j	                  ||d |j
                         y )N	ctypedef r   publiczpublic zpacked )typedef_flag
visibilitypackedkindr   r   )r   rM   r   s      r   visit_CStructOrUnionDefNodez-DeclarationWriter.visit_CStructOrUnionDefNode   sb    DD??h&ID;;ID		""4tT__Er   c                     d}|j                   rddj                  |j                         z  }|j                  r!|ddj                  |j                        z  z  }| j                  |d||j                         y )Nr
   z[%s]rD   z(%s)zcdef cppclass)	templatesjoinbase_classesr   r   )r   rM   r   s      r   visit_CppClassNodez$DeclarationWriter.visit_CppClassNode   sd    >>dii77Fftyy):):;;;F""4&$//Rr   c                 @    | j                  |dd |j                         y )Nz	cdef enum)r   rG   rL   s     r   visit_CEnumDefNodez$DeclarationWriter.visit_CEnumDefNode   s    ""4dDJJGr   c                    | j                  |j                         |j                  r| j                  d|j                  z         |j                  r,| j                  d       | j                  |j                         | j                          y )Nr   rC   )r9   ru   r   r   valuer+   r=   rL   s     r   visit_CEnumDefItemNodez(DeclarationWriter.visit_CEnumDefItemNode   sY    tyy!::HHWtzz)*::HHUOJJtzz"r   c                 .   |j                   rJ |j                  r"|j                  D ]  }| j                  |        | j                  d       | j	                  |j
                         |j                  ru| j	                  d       |j                  r,| j	                  |j                         | j	                  d       | j	                  |j                         | j	                  d       | j                  d       | j                  |j                         y )Nzcdef class ro   r   rp   r   )module_name
decoratorsr+   r9   r   
class_namebase_class_namebase_class_moduler=   rN   r\   )r   rM   	decorators      r   visit_CClassDefNodez%DeclarationWriter.visit_CClassDefNode   s    ###??!__ &	

9%&}%!HHSM%%//0HHT))*HHSMSTYY'r   c                     | j                  d       | j                  |j                         | j                  d       | j                  |j                         | j                          y )Nr   r   )r9   r+   r~   r   r   r=   rL   s     r   visit_CTypeDefNodez$DeclarationWriter.visit_CTypeDefNode   sB    {#

4>>"

4??#r   c                     | j                  d|j                  z         | j                  |j                         | j	                  d       | j                  |j                         y )Nzdef %s():)r9   ru   rJ   rq   r=   rN   r\   rL   s     r   visit_FuncDefNodez#DeclarationWriter.visit_FuncDefNode   sG    y499,-!!$)),TTYY'r   c                 *   | j                  |j                  rdnd       |j                  r;| j                  dj	                  |j                               | j                  d       |j
                  dk7  r,| j                  |j
                         | j                  d       |j                  r| j                  d       |j                  rB| j                  |j                         |j                  j                  | j                  d       | j                  |j                  j                         | j                  d       | j                  |j                  j                         | j                  d       | j                  |j                          y )Ncpdef r   r   privateapi ro   r   )r9   overridable	modifiersr   r   r   apir~   r+   ru   r   ra   rJ   rq   r=   rN   r\   rL   s     r   visit_CFuncDefNodez$DeclarationWriter.visit_CFuncDefNode   s   4#3#3xA>>HHSXXdnn-.HHSM??i'HHT__%HHSM88HHV>>JJt~~&~~"". 	

4??''(!!$//"6"67TTYY'r   c                    t        |j                  t              r|j                  j                  F| j	                  |j                         |j
                  j                         r| j                  d       | j	                  |j
                         |j                  -| j                  d       | j	                  |j                         y y )Nr   rC   )	
isinstancer~   r   ru   r+   r   declared_namer   rF   rL   s     r   visit_CArgDeclNodez$DeclarationWriter.visit_CArgDeclNode  s     $..*=>##/JJt~~& ,,.

4??#<<#HHUOJJt||$ $r   c                     | j                  d       | j                  |j                         |j                  r,| j                  d       | j                  |j                         | j	                          y )Nzcimport  as )r9   r   r   as_namer=   rL   s     r   visit_CImportStatNodez'DeclarationWriter.visit_CImportStatNode"  sL    z"!!"<<HHVHHT\\"r   c                 n   | j                  d       | j                  |j                         | j                  d       d}|j                  D ]W  \  }}}}|J |rd}n| j                  d       | j                  |       |s6| j                  d       | j                  |       Y | j	                          y )Nzfrom z	 cimport TFrD   r   )r9   r   r   imported_namesr=   )r   rM   firstposru   r   r   s          r   visit_FromCImportStatNodez+DeclarationWriter.visit_FromCImportStatNode*  s    w!!"(,(;(; 		"$Cw<HHTN !		" 	r   c                 :    | j                  |j                         y r   rt   rL   s     r   visit_NameNodez DeclarationWriter.visit_NameNode;  rw   r   c                 |    | j                  d       | j                  |j                         | j                          y )N@)r9   r+   r   r=   rL   s     r   visit_DecoratorNodez%DeclarationWriter.visit_DecoratorNode>  s'    s

4>>"r   c                 F    | j                  d       | j                          y )Nr   r?   rL   s     r   visit_PassStatNodez$DeclarationWriter.visit_PassStatNodeC  s    vr   r   )r
   )F).r   r   r   __doc__r8   r   r.   r3   r6   r9   r   r   r=   r@   rJ   rN   rR   rV   rY   r^   rb   rf   rl   rr   rv   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F.
J!!(	 $
&
FS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y)StatementWriterzD
    A Cython code writer for most language statement features.
    c                     | j                          | j                  |j                         | j                  d       | j                  |j                         | j                          y NrC   )r9   r+   lhsr   rhsr=   rL   s     r   visit_SingleAssignmentNodez*StatementWriter.visit_SingleAssignmentNodeM  s@    

488

488r   c                     | j                          |j                  D ]$  }| j                  |       | j                  d       & | j                  |j                         | j                          y r   )r9   lhs_listr+   r   r   r=   )r   rM   r   s      r   visit_CascadedAssignmentNodez,StatementWriter.visit_CascadedAssignmentNodeT  sP    == 	CJJsOHHUO	 	

488r   c                     | j                  d       | j                  |j                  j                         |j                  s| j                  d       | j                          y )Nzprint ,)r9   rJ   	arg_tuplerq   append_newliner   r=   rL   s     r   visit_PrintStatNodez#StatementWriter.visit_PrintStatNode\  sC    x !!$.."5"56""HHSMr   c                 
   | j                  d       |j                  j                  r&| j                  |j                  j                         n| j                  |j                         | j                  d       | j                  |j                  j                         | j                  d       | j                  |j                         |j                  -| j                  d       | j                  |j                         y y )Nzfor  in r   else:)r9   targetis_sequence_constructorrJ   rq   r+   r   iteratorsequencer=   rN   r\   else_clauser@   rL   s     r   visit_ForInStatNodez#StatementWriter.visit_ForInStatNodec  s    v;;..%%dkk&6&67JJt{{#

4==))*STYY''IIg  !1!12 (r   c                 2   | j                  d       | j                  |j                  d   j                         | j	                  d       | j                  |j                  d   j                         |j                  dd  D ]Z  }| j                  d       | j                  |j                         | j	                  d       | j                  |j                         \ |j                  -| j                  d       | j                  |j                         y y )Nzif r"   r   r   zelif r   )	r9   r+   
if_clauses	conditionr=   rN   r\   r   r@   )r   rM   clauses      r   visit_IfStatNodez StatementWriter.visit_IfStatNodeq  s     	u

4??1%//0ST__Q/445ooab) 	.FNN7#JJv''(LL  -		.
 'IIg  !1!12 (r   c                 &   | j                  d       | j                  |j                         | j                  d       | j	                  |j
                         |j                  -| j                  d       | j	                  |j                         y y )Nzwhile r   r   )r9   r+   r   r=   rN   r\   r   r@   rL   s     r   visit_WhileStatNodez#StatementWriter.visit_WhileStatNode  sm    x 

4>>"STYY''IIg  !1!12 (r   c                 &    | j                  d       y )Ncontinuer@   rL   s     r   visit_ContinueStatNodez&StatementWriter.visit_ContinueStatNode  s    		*r   c                 &    | j                  d       y )Nbreakr   rL   s     r   visit_BreakStatNodez#StatementWriter.visit_BreakStatNode      		'r   c                 :    | j                  |j                         y r   )rJ   rq   rL   s     r   visit_SequenceNodez"StatementWriter.visit_SequenceNode  s    !!$)),r   c                 z    | j                          | j                  |j                         | j                          y r   )r9   r+   exprr=   rL   s     r   visit_ExprStatNodez"StatementWriter.visit_ExprStatNode  s%    

499r   c                     | j                          | j                  |j                         | j                  d|j                  z         | j                  |j
                         | j                          y )Nz %s= )r9   r+   r   r   operatorr   r=   rL   s     r   visit_InPlaceAssignmentNodez+StatementWriter.visit_InPlaceAssignmentNode  sJ    

4884==()

488r   c                 D   | j                          | j                  d       | j                  |j                         |j                  ,| j                  d       | j                  |j                         | j                  d       | j                  |j                         y )Nzwith r   r   )r9   r   r+   managerr   r=   rN   r\   rL   s     r   visit_WithStatNodez"StatementWriter.visit_WithStatNode  sl    

4<< ;;"HHVJJt{{#STYY'r   c                     | j                  d       | j                  |j                         | j                  d       | j                  |j                         y )Ntry:zfinally:)r@   rN   r\   finally_clauserL   s     r   visit_TryFinallyStatNodez(StatementWriter.visit_TryFinallyStatNode  s@    		&TYY'		*T001r   c                     | j                  d       | j                  |j                         |j                  D ]  }| j	                  |        |j
                  | j	                  |j
                         y y )Nr
  )r@   rN   r\   except_clausesr+   r   )r   rM   xs      r   visit_TryExceptStatNodez'StatementWriter.visit_TryExceptStatNode  sc    		&TYY'$$ 	AJJqM	'JJt''( (r   c                 ^   | j                  d       |j                  ,| j                  d       | j                  |j                         |j                  ,| j                  d       | j                  |j                         | j                  d       | j                  |j                         y )Nexceptr   rD   r   )r9   patternr   r+   r   r=   rN   r\   rL   s     r   visit_ExceptClauseNodez&StatementWriter.visit_ExceptClauseNode  sv    x <<#HHSMJJt||$;;"HHTNJJt{{#STYY'r   c                     | j                  d       |j                  ,| j                  d       | j                  |j                         | j	                          y )Nreturnr   )r9   r   r   r+   r=   rL   s     r   visit_ReturnStatNodez$StatementWriter.visit_ReturnStatNode  s<    x ::!HHSMJJtzz"r   c                 &    | j                  d       y )Nraiser   rL   s     r   visit_ReraiseStatNodez%StatementWriter.visit_ReraiseStatNode  r   r   c                 T    | j                  d|j                  j                  z         y )Nz(import %s))r   r   r   rL   s     r   visit_ImportNodez StatementWriter.visit_ImportNode  s    !1!1!7!778r   c                     d}|j                   D ]%  }d| j                  |fz  | j                  |<   |dz  }' | xj                  dz  c_        | j                  |j                         y)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   rM   idxhandles       r   visit_TempsBlockNodez$StatementWriter.visit_TempsBlockNode  sf     jj 	F%-1D1Dc0J%JDNN6"1HC	 	q 

499r   c                 T    | j                  | j                  |j                            y r   )r   r&   r   rL   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  sk    33 3-
(2)	(9.r   r   c            
           e Zd ZdZdL 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dMd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-d.d/d0d1d2d1d3d3d4d4d4d4d4d5d6Zd7 Zd8 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+	 dMdGZ,dH Z-dI Z.dJ Z/dK Z0 xZ1S )NExpressionWriterzL
    A Cython code writer that is intentionally limited to expressions.
    c                 V    t         |           |d}|| _        || _        dg| _        y )Nr
   r"   )r#   r   r$   allow_unknown_nodes
precedence)r   r$   r'  r(   s      r   r   zExpressionWriter.__init__  s0    >F#6 #r   c                 <    | j                  |       | j                  S r   r*   r,   s     r   r.   zExpressionWriter.write  r/   r   c                 .    | xj                   |z  c_         y r   )r$   r   s     r   r   zExpressionWriter.put  s    qr   c                 x    | j                   j                  |      r| j                   d t        |        | _         y y r   )r$   endswithrE   r   s     r   removezExpressionWriter.remove  s1    ;;"++hAw/DK #r   c                     t        |      dkD  rA|d d D ]$  }| j                  |       | j                  d       & | j                  |d          y y )Nr"   rB   rD   )rE   r+   r   )r   rG   rI   s      r   rJ   z%ExpressionWriter.comma_separated_list  sP    u:>cr
 

4  JJuRy!	 r   c                 Z    | j                   r| j                  d       y t        d|z        )N...rP   )r'  r   rQ   rL   s     r   rR   zExpressionWriter.visit_Node  s'    ##HHUO !E!LMMr   c                 :    | j                  |j                         y r   r   r   rL   s     r   visit_IntNodezExpressionWriter.visit_IntNode      r   c                 :    | j                  |j                         y r   r2  rL   s     r   visit_FloatNodez ExpressionWriter.visit_FloatNode
  r4  r   c                 &    | j                  d       y )NNoner   rL   s     r   visit_NoneNodezExpressionWriter.visit_NoneNode  s    r   c                 :    | j                  |j                         y r   rt   rL   s     r   r   zExpressionWriter.visit_NameNode  rw   r   c                 &    | j                  d       y )Nr0  r9  rL   s     r   visit_EllipsisNodez#ExpressionWriter.visit_EllipsisNode  s    r   c                 L    | j                  t        |j                               y r   r   strr   rL   s     r   visit_BoolNodezExpressionWriter.visit_BoolNode      TZZ!r   c                 L    | j                  t        |j                               y r   r?  rL   s     r   visit_ConstNodez ExpressionWriter.visit_ConstNode  rB  r   c                 @    | j                  |j                   d       y )Njr2  rL   s     r   visit_ImagNodezExpressionWriter.visit_ImagNode  s    DJJ<q!"r   c                 L    | j                  t        |j                               y r   r   reprr   rL   s     r   visit_BytesNodez ExpressionWriter.visit_BytesNode      djj!"r   c                 L    | j                  t        |j                               y r   rI  rL   s     r   visit_UnicodeNodez"ExpressionWriter.visit_UnicodeNode"  rL  r   c                     |\  }}|j                         }| j                  |       | j                  |       | j                  |       y r   )subexpr_nodesr   rJ   )r   rM   parens
open_parenclose_parenrG   s         r   emit_sequencezExpressionWriter.emit_sequence%  s@    "(
K""$!!%(r   c                 (    | j                  |d       y )N[]rT  rL   s     r   visit_ListNodezExpressionWriter.visit_ListNode,      4&r   c                 (    | j                  |d       y )N()rW  rL   s     r   visit_TupleNodez ExpressionWriter.visit_TupleNode/  rY  r   c                     t        |j                               dkD  r| j                  |d       y | j                  d       y )Nr"   {}zset())rE   rP  rT  r   rL   s     r   visit_SetNodezExpressionWriter.visit_SetNode2  s4    t!!#$q(tT*HHWr   c                 (    | j                  |d       y )Nr^  rW  rL   s     r   visit_DictNodezExpressionWriter.visit_DictNode8  rY  r   c                     | j                  |j                         | j                  d       | j                  |j                         y Nz: )r+   keyr   r   rL   s     r   visit_DictItemNodez#ExpressionWriter.visit_DictItemNode;  s-    

488

4::r         )not!+-~orr   and   in   not_inisis_not<z<=>z>=z!=z==|   ^   re      z<<   z>>	   
      )rj  rk  r   r   /z//%**c                     | j                   d   }||kD  r| j                  d       | j                   j                  |       y )NrB   ro   )r(  r   r   )r   new_precold_precs      r   operator_enterzExpressionWriter.operator_enterS  s5    ??2&hHHSMx(r   c                     | j                   dd  \  }}||kD  r| j                  d       | j                   j                          y )Nrp   )r(  r   pop)r   r  r  s      r   operator_exitzExpressionWriter.operator_exitY  s:    !__RS1(hHHSMr   c                     d}| j                   |   }| j                  |       | j                  d       | j                  |j                         | j                          y )Nrh  znot )unop_precedencer  r   r+   operandr  r   rM   opprecs       r   visit_NotNodezExpressionWriter.visit_NotNode_  sM    ##B'D!

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

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

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

4==!r   c                 &    | j                  |       y r   r  rL   s     r   visit_BoolBinopNodez$ExpressionWriter.visit_BoolBinopNodex      T"r   c                 &    | j                  |       y r   r  rL   s     r   visit_PrimaryCmpNodez%ExpressionWriter.visit_PrimaryCmpNode{  r  r   c                 x   | j                  |j                         | j                  d       t        |j                  t
              rH|j                  j                         r| j                  |j                         n-| j                  d       n| j                  |j                         | j                  d       y )Nri   r[  rj   )r+   ra   r   r   index	TupleNoderP  rT  rL   s     r   visit_IndexNodez ExpressionWriter.visit_IndexNode~  ss    

499djj),zz'')""4::.JJtzz"r   c                    | j                  |j                         | j                  d       |j                  r| j                  |j                         | j                  d       |j                  r| j                  |j                         |j
                  r,| j                  d       | j                  |j
                         | j                  d       y )Nri   r   rj   )r+   ra   r   startstopslicerL   s     r   visit_SliceIndexNodez%ExpressionWriter.visit_SliceIndexNode  s    

499::JJtzz"99JJtyy!::HHSMJJtzz"r   c                 p   |j                   j                  s| j                  |j                          | j                  d       |j                  j                  s| j                  |j                         |j
                  j                  s-| j                  d       | j                  |j
                         y y )Nr   )r  is_noner+   r   r  steprL   s     r   visit_SliceNodez ExpressionWriter.visit_SliceNode  st    zz!!JJtzz"yy  JJtyy!yy  HHSMJJtyy! !r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       | j                  |j                         y )N if z else )r+   true_valr   test	false_valrL   s     r   visit_CondExprNodez#ExpressionWriter.visit_CondExprNode  sJ    

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

499

4>>"r   c                 v    | j                  |j                         | j                  d|j                  z         y )Nz.%s)r+   objr   r   rL   s     r   visit_AttributeNodez$ExpressionWriter.visit_AttributeNode  s'    

488'(r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       y rn   )r+   functionr   rJ   rq   rL   s     r   visit_SimpleCallNodez%ExpressionWriter.visit_SimpleCallNode  s:    

4==!!!$)),r   c                    |y t        |t              r7| j                  |j                         | j                  |j                         y t        |t
              r8|j                         D ]$  }| j                  |       | j                  d       & y t        |t              r>| j                  d       | j                  |j                         | j                  d       y | j                  |       | j                  d       y )NrD   r   )r   AddNodeemit_pos_argsr  r  r  rP  r+   r   AsTupleNodeargr   rM   r  s      r   r  zExpressionWriter.emit_pos_args  s    <dG$t}}-t}}-i(**, 

4  k*HHSMJJtxx HHTNJJtHHTNr   c                    |y t        |t              r'|j                         D ]  }| j                  |        y t        |t              rj|j                         D ]V  }| j                  d|j                  j                  z         | j                  |j                         | j                  d       X y | j                  d       | j                  |       | j                  d       y )Nz%s=rD   r  )	r   MergedDictNoderP  emit_kwd_argsDictNoder   rd  r   r+   r  s      r   r  zExpressionWriter.emit_kwd_args  s    <dN+**, )""4()h'**, /0

4::&
 HHTNJJtHHTNr   c                    | j                  |j                         | j                  d       | j                  |j                         | j                  |j                         | j                  d       | j                  d       y )Nro   rD   rp   )r+   r  r   r  r   r  r   r-  rL   s     r   visit_GeneralCallNodez&ExpressionWriter.visit_GeneralCallNode  s\    

4==!4//04,,-Dr   c                 D   |\  }}| j                  |       | j                  |       | j                  d       | j                  |       | j                  d       | j                  |       |r"| j                  d       | j                  |       | j                  |       y )Nz for r   r  )r   r+   )r   r\   r   r   r   rQ  rR  rS  s           r   emit_comprehensionz#ExpressionWriter.emit_comprehension  s}     #)
K

4

6

8HHVJJy!r   c                 :    | j                  |j                         y r   )r+   r  rL   s     r   visit_ComprehensionAppendNodez.ExpressionWriter.visit_ComprehensionAppendNode  s    

499r   c                     | j                  |j                         | j                  d       | j                  |j                         y rc  )r+   key_exprr   
value_exprrL   s     r   !visit_DictComprehensionAppendNodez2ExpressionWriter.visit_DictComprehensionAppendNode  s-    

4==!

4??#r   c                    dddd}||j                   j                            }|j                  j                  }|j                  j                  }|j                  j
                  j                  }d }t        |d      r2|j                  d   j                  }|j                  d   j                  }| j                  |||||       y )NrV  r^  )listdictsetr   r"   )typepy_type_nameloopr\   r   r   r   hasattrr   r   r  )r   rM   tpmaprQ  r\   r   r   r   s           r   visit_ComprehensionNodez(ExpressionWriter.visit_ComprehensionNode  s    tD9tyy--/0yy~~!!99%%..	4&*44I??1%**Dfh	6Jr   c                    |j                   j                  }|j                   j                  }|j                   j                  j                  }d }t        |d      rG|j                  d   j                  }|j                  d   j                  j                  j                  }n"t        |d      r|j                  j                  }| j                  ||||d       y )Nr   r"   r  r[  )r  r\   r   r   r   r  r   r   r  r  r  )r   rM   r\   r   r   r   s         r   visit_GeneratorExpressionNodez.ExpressionWriter.visit_GeneratorExpressionNode   s    yy~~!!99%%..	4&*44I??1%**//33DT6"99==Dfh	4Hr   )NF))r
   r
   )2r   r   r   r   r   r.   r   r-  rJ   rR   r3  r6  r:  r   r=  rA  rD  rG  rK  rN  rT  rX  r\  r_  ra  re  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"N""###''' 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Ir   r%  c                   "    e Zd ZdZd Zd Zd Zy)	PxdWriterz\
    A Cython code writer for everything supported in pxd files.
    (currently unused)
    c                 l    t        dj                  | j                  |      j                               |S )N
)printr   r.   r   rL   s     r   __call__zPxdWriter.__call__  s'    dii

4(../0r   c                    |j                   r| j                  d       n| j                  d       |j                  r;| j                  dj	                  |j                               | j                  d       |j
                  dk7  r,| j                  |j
                         | j                  d       |j                  r| j                  d       | j                  |j                         y )Nr   r   r   r   r   )	r   r9   r   r   r   r   r   r+   r   rL   s     r   r   zPxdWriter.visit_CFuncDefNode  s    NN8$NN7#>>HHSXXdnn-.HHSM??i'HHT__%HHSM88HHV

4??#r   c                      y r   r   rL   s     r   visit_StatNodezPxdWriter.visit_StatNode(  s    r   N)r   r   r   r   r  r   r  r   r   r   r  r    s    
$r   r  c                       e Zd ZdZy)
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     sn    * ! / "f fR	U.' U.plI{ lI^	!#3 :"2 r   