
    Ae]                         d Z ddlmZmZ ddlmZ ddl  G d de      Z G d d	e      Z	 G d
 de	      Z
 G d de	      Z G d d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).
    )absolute_importprint_function   )TreeVisitor)*c                   $    e Zd Zd Zd Zd Zd Zy)LinesResultc                      g | _         d| _        y N )linessselfs    1lib/python3.12/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                   8    e Zd ZdZd0 fd	Zd Zd Zd Zd1dZd Z	d Z
d1d	Zd
 Zd2d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*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0 xZ1S )3DeclarationWriterz    c                 z    t         t        |           |
t               }|| _        d| _        i | _        d| _        y )Nr   )superr"   r   r	   result
numindents	tempnamestempblockindexr   r%   	__class__s     r   r   zDeclarationWriter.__init__#   s:    /1> ]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.indent0       1r   c                 .    | xj                   dz  c_         y r3   r4   r   s    r   dedentzDeclarationWriter.dedent3   r6   r   c                 n    | j                   j                  | j                  | j                  z  |z          y r   )r%   r   indent_stringr&   r   s     r   	startlinezDeclarationWriter.startline6   s&    **T__<q@Ar   c                 :    | j                   j                  |       y r   )r%   r   r   s     r   r   zDeclarationWriter.put9   s    r   c                 n    | j                   j                  | j                  | j                  z  |z          y r   )r%   r   r:   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.endline?   s    Ar   c                 F    | j                  |       | j                          y r   r;   r?   r   s     r   linezDeclarationWriter.lineB   s    qr   c                    t        |      dkD  r{|d d D ]^  }| j                  |       |r8|j                  ,| j                  d       | j                  |j                         | j                  d       ` | j                  |d          y y )Nr    = , )lenr-   defaultr   )r   items
output_rhsitems       r   comma_separated_listz&DeclarationWriter.comma_separated_listF   sx    u:>cr
  

4 $,,":HHV$JJt||,  JJuRy! r   c                     t        d|z        Nz"Node not handled by serializer: %rAssertionErrorr   nodes     r   
visit_NodezDeclarationWriter.visit_NodeP       ADHIIr   c                 &    | j                  |       y r   visitchildrenrQ   s     r   visit_ModuleNodez"DeclarationWriter.visit_ModuleNodeS       4 r   c                 &    | j                  |       y r   rV   rQ   s     r   visit_StatListNodez$DeclarationWriter.visit_StatListNodeV   rY   r   c                     |j                   d}nd|j                   z  }| j                  d|z         | j                          | j                  |j                         | j                          y )Nr   z"%s"zcdef extern from %s:)include_filer   r5   r-   bodyr8   )r   rR   files      r   visit_CDefExternNodez&DeclarationWriter.visit_CDefExternNodeY   sW    $DT...D,t34

499r   c                 \    | j                  d       | j                  |j                         y )Nr   r   r-   baserQ   s     r   visit_CPtrDeclaratorNodez*DeclarationWriter.visit_CPtrDeclaratorNodec       

499r   c                 \    | j                  d       | j                  |j                         y )N&rb   rQ   s     r   visit_CReferenceDeclaratorNodez0DeclarationWriter.visit_CReferenceDeclaratorNodeg   re   r   c                     | j                  |j                         | j                  d       |j                  | j                  |j                         | j                  d       y N[]r-   rc   r   	dimensionrQ   s     r   visit_CArrayDeclaratorNodez,DeclarationWriter.visit_CArrayDeclaratorNodek   B    

499>>%JJt~~&r   c                     | j                  |j                         | j                  d       |j                  | j                  |j                         | j                  d       y rj   rm   rQ   s     r   ro   z,DeclarationWriter.visit_CArrayDeclaratorNoder   rp   r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       y N())r-   rc   r   rL   argsr?   rQ   s     r   visit_CFuncDeclaratorNodez+DeclarationWriter.visit_CFuncDeclaratorNodey   s;    

499!!$)),Tr   c                 :    | j                  |j                         y r   r   namerQ   s     r   visit_CNameDeclaratorNodez+DeclarationWriter.visit_CNameDeclaratorNode       r   c                 F   |j                   rz| j                  d|j                            |j                  dk  r | j                  d|j                   z         n-|j                  dkD  r| j                  d|j                  z         | j                  |j                         y )N)z	unsigned r   zsigned r   zshort zlong )is_basic_c_typer   signedlongnessrz   rQ   s     r   visit_CSimpleBaseTypeNodez+DeclarationWriter.visit_CSimpleBaseTypeNode   su    HH1$++>?}}q T]]N23"4==01r   c                     | j                  d       | j                  |j                         | j                  |j                         | j                  d       y rs   )r   r-   	base_type
declaratorrQ   s     r   visit_CComplexBaseTypeNodez,DeclarationWriter.visit_CComplexBaseTypeNode   s8    

4>>"

4??#r   c                     | j                  |j                         | j                  d       | j                  |j                         y )N.)r-   r   r   rz   rQ   s     r   visit_CNestedBaseTypeNodez+DeclarationWriter.visit_CNestedBaseTypeNode   s-    

4>>"r   c                     | j                  |j                         | j                  d       | j                  |j                  |j
                  j                  z          | j                  d       y rj   )r-   base_type_noder   rL   positional_argskeyword_argskey_value_pairsrQ   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)rJ   )r;   r-   r   r   rL   declaratorsr?   rQ   s     r   visit_CVarDefNodez#DeclarationWriter.visit_CVarDefNode   sK    x 

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)	r;   rz   r   cnamer?   r5   r   r-   r8   )r   rR   declextras
attributes	attributes         r   visit_container_nodez&DeclarationWriter.visit_container_node   s    t99HHTNHHTYYzz%DJJ./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   rR   r   s      r   visit_CStructOrUnionDefNodez-DeclarationWriter.visit_CStructOrUnionDefNode   sb    DD??h&JD;;JD		!!$dDOODr   c                     d}|j                   rddj                  |j                         z  }|j                  r!|ddj                  |j                        z  z  }| j                  |d||j                         y )Nr   z[%s]rF   z(%s)zcdef cppclass)	templatesjoinbase_classesr   r   )r   rR   r   s      r   visit_CppClassNodez$DeclarationWriter.visit_CppClassNode   se    >>tyy88Fftyy):):;;;F!!$(8&$//Rr   c                 @    | j                  |dd |j                         y )Nz	cdef enum)r   rI   rQ   s     r   visit_CEnumDefNodez$DeclarationWriter.visit_CEnumDefNode   s    !!$dDJJGr   c                    | j                  |j                         |j                  r| j                  d|j                  z         |j                  r,| j                  d       | j                  |j                         | j                          y )Nr   rE   )r;   rz   r   r   valuer-   r?   rQ   s     r   visit_CEnumDefItemNodez(DeclarationWriter.visit_CEnumDefItemNode   sZ    tyy!::HHX

*+::HHVJJtzz"r   c                 n   |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                  |j                         | j                          y )Nzcdef class rt   r   ru   r   )module_name
decoratorsr-   r;   r   
class_namebase_class_namebase_class_moduler?   r5   r^   r8   )r   rR   	decorators      r   visit_CClassDefNodez%DeclarationWriter.visit_CClassDefNode   s    ###??!__ &	

9%&~&!HHTN%%//0HHT))*HHTNT

499r   c                     | j                  d       | j                  |j                         | j                  d       | j                  |j                         | j                          y )Nr   r   )r;   r-   r   r   r   r?   rQ   s     r   visit_CTypeDefNodez$DeclarationWriter.visit_CTypeDefNode   sB    |$

4>>"

4??#r   c                    | j                  d|j                  z         | j                  |j                         | j	                  d       | j                          | j                  |j                         | j                          y )Nzdef %s(z):)	r;   rz   rL   rv   r?   r5   r-   r^   r8   rQ   s     r   visit_FuncDefNodez#DeclarationWriter.visit_FuncDefNode   sW    zDII-.!!$)),U

499r   c                 0   |j                   j                  ,| j                  |j                          | j                  d       | j                  |j                         |j
                  -| j                  d       | j                  |j
                         y y )Nr   rE   )r   rz   r-   r   r   rH   rQ   s     r   visit_CArgDeclNodez$DeclarationWriter.visit_CArgDeclNode   sh    >>*JJt~~&HHTN

4??#<<#HHVJJt||$ $r   c                     | j                  d       | j                  |j                         |j                  r,| j                  d       | j                  |j                         | j	                          y )Nzcimport  as )r;   r   r   as_namer?   rQ   s     r   visit_CImportStatNodez'DeclarationWriter.visit_CImportStatNode  sL    {#!!"<<HHW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 TFrF   r   )r;   r   r   imported_namesr?   )r   rR   firstposrz   r   r   s          r   visit_FromCImportStatNodez+DeclarationWriter.visit_FromCImportStatNode  s    x !!"(,(;(; 		"$Cw<HHTN!!		" 	r   c                 :    | j                  |j                         y r   ry   rQ   s     r   visit_NameNodez DeclarationWriter.visit_NameNode  r|   r   c                 :    | j                  |j                         y r   r   r   rQ   s     r   visit_IntNodezDeclarationWriter.visit_IntNode  s    r   c                 &    | j                  d       y NNoner   rQ   s     r   visit_NoneNodez DeclarationWriter.visit_NoneNode"      r   c                 ~    | j                  d       | j                  |j                         | j                  d       y )Nz(not ru   )r   r-   operandrQ   s     r   visit_NotNodezDeclarationWriter.visit_NotNode%  s)    

4<< r   c                 |    | j                  d       | j                  |j                         | j                          y )N@)r;   r-   r   r?   rQ   s     r   visit_DecoratorNodez%DeclarationWriter.visit_DecoratorNode*  s'    s

4>>"r   c                     | j                  |j                         | j                  d|j                  z         | j                  |j                         y )N %s )r-   operand1r   operatoroperand2rQ   s     r   visit_BinopNodez!DeclarationWriter.visit_BinopNode/  s7    

4==!4==()

4==!r   c                 v    | j                  |j                         | j                  d|j                  z         y Nz.%sr-   objr   r   rQ   s     r   visit_AttributeNodez%DeclarationWriter.visit_AttributeNode4  '    

488$..()r   c                 L    | j                  t        |j                               y r   r   strr   rQ   s     r   visit_BoolNodez DeclarationWriter.visit_BoolNode8      TZZ!r   c                     |j                   }|j                  |j                  |j                        }| j                  t	        |             y r   )r   encodingencoder   repr)r   rR   r   s      r   visit_StringNodez"DeclarationWriter.visit_StringNode<  s7    

>>%LL0Eer   c                 F    | j                  d       | j                          y )Nr   rA   rQ   s     r   visit_PassStatNodez$DeclarationWriter.visit_PassStatNodeB  s    wr   r   r   )F)2r   r   r   r:   r   r0   r5   r8   r;   r   r   r?   rB   rL   rS   rX   r[   r`   rd   rh   ro   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   __classcell__r*   s   @r   r"   r"      s    M BF"J!!
&
ESH&%"

"
*"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y)
CodeWriterc                     | j                          | j                  |j                         | j                  d       | j                  |j                         | j                          y NrE   )r;   r-   lhsr   rhsr?   rQ   s     r   visit_SingleAssignmentNodez%CodeWriter.visit_SingleAssignmentNodeH  sA    

488

488r   c                     | j                          |j                  D ]$  }| j                  |       | j                  d       & | j                  |j                         | j                          y r   )r;   lhs_listr-   r   r   r?   )r   rR   r   s      r   visit_CascadedAssignmentNodez'CodeWriter.visit_CascadedAssignmentNodeO  sQ    == 	CJJsOHHV	 	

488r   c                     | j                  d       | j                  |j                  j                         |j                  s| j                  d       | j                          y )Nzprint ,)r;   rL   	arg_tuplerv   append_newliner   r?   rQ   s     r   visit_PrintStatNodezCodeWriter.visit_PrintStatNodeW  sC    y!!!$.."5"56""HHTNr   c                    | j                  d       | j                  |j                         | j                  d       | j                  |j                  j
                         | j                  d       | j                          | j                  |j                         | j                          |j                  M| j                  d       | j                          | j                  |j                         | j                          y y )Nzfor  in r   else:)r;   r-   targetr   iteratorsequencer?   r5   r^   r8   else_clauserB   rQ   s     r   visit_ForInStatNodezCodeWriter.visit_ForInStatNode^  s    w

4;;

4==))*T

499'IIhKKMJJt''(KKM	 (r   c                    | j                  d       | j                  |j                  d   j                         | j	                  d       | j                          | j                  |j                  d   j                         | j                          |j                  dd  D ]z  }| j                  d       | j                  |j                         | j	                  d       | j                          | j                  |j                         | j                          | |j                  M| j                  d       | j                          | j                  |j                         | j                          y y )Nzif r   r   r   zelif r  )
r;   r-   
if_clauses	conditionr?   r5   r^   r8   r  rB   )r   rR   clauses      r   visit_IfStatNodezCodeWriter.visit_IfStatNodem  s    	v

4??1%//0S

4??1%**+ooab) 	FNN7#JJv''(LLKKMJJv{{#KKM	 'IIgKKMJJt''(KKM	 (r   c                 :    | j                  |j                         y r   )rL   rv   rQ   s     r   visit_SequenceNodezCodeWriter.visit_SequenceNode  s    !!$)),r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       y rs   r-   functionr   rL   rv   rQ   s     r   visit_SimpleCallNodezCodeWriter.visit_SimpleCallNode  :    

4==!!!$)),r   c                 n   | j                  |j                         | j                  d       |j                  }t	        |t
              r| j                  |j                         n| j                  |j                         |j                  rt	        |j                  t              rtt        |j                  j                        D ]Q  \  }\  }}|dkD  r| j                  d       | j                  |       | j                  d       | j                  |       S nt        d      | j                  d       y )Nrt   r   rF   =zNot implemented yetru   )r-   r  r   r   
isinstanceAsTupleNodeargrL   rv   r   DictNode	enumerater   	Exception)r   rR   posargirz   r   s         r   visit_GeneralCallNodez CodeWriter.visit_GeneralCallNode  s    

4==!%%fk*JJvzz"%%fkk2$++X6(1$2C2C2S2S(T &$A}e1uJJt$HHSMJJu%&   566r   c                 z    | j                          | j                  |j                         | j                          y r   )r;   r-   exprr?   rQ   s     r   visit_ExprStatNodezCodeWriter.visit_ExprStatNode  s%    

499r   c                     | j                          | j                  |j                         | j                  d|j                  z         | j                  |j
                         | j                          y )Nz %s= )r;   r-   r   r   r   r   r?   rQ   s     r   visit_InPlaceAssignmentNodez&CodeWriter.visit_InPlaceAssignmentNode  sJ    

488DMM)*

488r   c                    | j                          | j                  d       | j                  |j                         |j                  ,| j                  d       | j                  |j                         | j                  d       | j                          | j                  |j                         | j                          y )Nzwith r   r   )	r;   r   r-   managerr  r?   r5   r^   r8   rQ   s     r   visit_WithStatNodezCodeWriter.visit_WithStatNode  s|    

4<< ;;"HHWJJt{{#T

499r   c                 4   | j                  d       | j                          | j                  |j                         | j	                          | j                  d       | j                          | j                  |j
                         | j	                          y )Ntry:zfinally:)rB   r5   r-   r^   r8   finally_clauserQ   s     r   visit_TryFinallyStatNodez#CodeWriter.visit_TryFinallyStatNode  s`    		'

499		+

4&&'r   c                 0   | j                  d       | j                          | j                  |j                         | j	                          |j
                  D ]  }| j                  |        |j                  | j                  |j                         y y )Nr*  )rB   r5   r-   r^   r8   except_clausesr  )r   rR   xs      r   visit_TryExceptStatNodez"CodeWriter.visit_TryExceptStatNode  ss    		'

499$$ 	AJJqM	'JJt''( (r   c                    | j                  d       |j                  ,| j                  d       | j                  |j                         |j                  ,| j                  d       | j                  |j                         | j                  d       | j                          | j                  |j                         | j                          y )Nexceptr   rF   r   )	r;   patternr   r-   r  r?   r5   r^   r8   rQ   s     r   visit_ExceptClauseNodez!CodeWriter.visit_ExceptClauseNode  s    y!<<#HHTNJJt||$;;"HHUOJJt{{#S

499r   c                 |    | j                  d       | j                  |j                         | j                          y )Nzreturn )r;   r-   r   r?   rQ   s     r   visit_ReturnStatNodezCodeWriter.visit_ReturnStatNode  s'    y!

4::r   c                 &    | j                  d       y )Nraise)rB   rQ   s     r   visit_ReraiseStatNodez CodeWriter.visit_ReraiseStatNode  s    		'r   c                 T    | j                  d|j                  j                  z         y )Nz(import %s))r   r   r   rQ   s     r   visit_ImportNodezCodeWriter.visit_ImportNode  s    $"2"2"8"889r   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   rR   idxhandles       r   visit_TempsBlockNodezCodeWriter.visit_TempsBlockNode  sf     jj 	F%-1D1Dc0J%JDNN6"1HC	 	q 

499r   c                 T    | j                  | j                  |j                            y r   )r   r'   r?  rQ   s     r   visit_TempRefNodezCodeWriter.visit_TempRefNode  s    ,-r   N)r   r   r   r   r   r  r	  r  r  r  r   r#  r%  r(  r,  r0  r4  r6  r9  r;  r@  rB  r    r   r   r   r   F  sa    ,-(

)
:.r   r   c                       e Zd Zd Zd Zd Zy)	PxdWriterc                 l    t        dj                  | j                  |      j                               |S )N
)printr   r0   r   rQ   s     r   __call__zPxdWriter.__call__  s'    ejjD)//01r   c                 f   d|j                   v ry |j                  r| j                  d       n| j                  d       |j                  dk7  r,| j	                  |j                         | j	                  d       |j
                  r| j	                  d       | j                  |j                         y )Ninlinezcpdef r   privater   zapi )	modifiersoverridabler;   r   r   apir-   r   rQ   s     r   visit_CFuncDefNodezPxdWriter.visit_CFuncDefNode  s|    t~~%NN9%NN8$??i'HHT__%HHTN88HHW

4??#r   c                      y r   r    rQ   s     r   visit_StatNodezPxdWriter.visit_StatNode  s    r   N)r   r   r   rH  rO  rQ  r    r   r   rD  rD    s    $r   rD  c            
           e Zd ZdK 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dLd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.d/d0d1d0d2d2d3d3d3d3d3d4d5Zd6 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*	 dMdFZ+dG Z,dH Z-dI Z.dJ Z/ xZ0S )NExpressionWriterc                 P    t         t        |           |d}|| _        dg| _        y )Nr   r   )r$   rS  r   r%   
precedencer)   s     r   r   zExpressionWriter.__init__  s+    .0>F#r   c                 <    | j                  |       | j                  S r   r,   r.   s     r   r0   zExpressionWriter.write  r1   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%   endswithrG   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   rD   rF   )rG   r-   r   )r   rI   rK   s      r   rL   z%ExpressionWriter.comma_separated_list   sP    u:>cr
  

4   JJuRy!	 r   c                     t        d|z        rN   rO   rQ   s     r   rS   zExpressionWriter.visit_Node'  rT   r   c                 :    | j                  |j                         y r   ry   rQ   s     r   r   zExpressionWriter.visit_NameNode*  r|   r   c                 &    | j                  d       y r   r   rQ   s     r   r   zExpressionWriter.visit_NoneNode-  r   r   c                 &    | j                  d       y )Nz...r   rQ   s     r   visit_EllipsisNodez#ExpressionWriter.visit_EllipsisNode0  s    r   c                 L    | j                  t        |j                               y r   r   rQ   s     r   r   zExpressionWriter.visit_BoolNode3  r   r   c                 L    | j                  t        |j                               y r   r   rQ   s     r   visit_ConstNodez ExpressionWriter.visit_ConstNode6  r   r   c                 \    | j                  |j                         | j                  d       y )Njr   rQ   s     r   visit_ImagNodezExpressionWriter.visit_ImagNode9  s    r   c                 p    t        |j                        }|d   dv r|dd  }| j                  ||       y )Nr   ubr   )r   r   r   )r   rR   prefixrepr_vals       r   emit_stringzExpressionWriter.emit_string=  s8    

#A;$|HFH-.r   c                 (    | j                  |d       y )Nbrk  rQ   s     r   visit_BytesNodez ExpressionWriter.visit_BytesNodeC      t$r   c                 &    | j                  |       y r   rn  rQ   s     r   r   z!ExpressionWriter.visit_StringNodeF  s    r   c                 (    | j                  |d       y )Nurn  rQ   s     r   visit_UnicodeNodez"ExpressionWriter.visit_UnicodeNodeI  rp  r   c                     |\  }}|j                         }| j                  |       | j                  |       | j                  |       y r   )subexpr_nodesr   rL   )r   rR   parens
open_parenclose_parenrI   s         r   emit_sequencezExpressionWriter.emit_sequenceL  s@    "(
K""$!!%(r   c                 (    | j                  |d       y )N[]rz  rQ   s     r   visit_ListNodezExpressionWriter.visit_ListNodeS      4'r   c                 (    | j                  |d       y )N()r}  rQ   s     r   visit_TupleNodez ExpressionWriter.visit_TupleNodeV  r  r   c                     t        |j                               dkD  r| j                  |d       y | j                  d       y )Nr   {}zset())rG   rv  rz  r   rQ   s     r   visit_SetNodezExpressionWriter.visit_SetNodeY  s4    t!!#$q(tU+HHXr   c                 (    | j                  |d       y )Nr  r}  rQ   s     r   visit_DictNodezExpressionWriter.visit_DictNode_  r  r   c                     | j                  |j                         | j                  d       | j                  |j                         y Nz: )r-   keyr   r   rQ   s     r   visit_DictItemNodez#ExpressionWriter.visit_DictItemNodeb  s-    

488

4::r         )not!+-~orr   and   in   not_inisis_not<z<=>z>=z!=z==|   ^   rg      z<<   z>>	   
      )r  r  r   r   /z//%**c                     | j                   d   }||kD  r| j                  d       | j                   j                  |       y )NrD   rt   )rU  r   r   )r   new_precold_precs      r   operator_enterzExpressionWriter.operator_enterz  s5    ??2&hHHTNx(r   c                     | j                   dd  \  }}||kD  r| j                  d       | j                   j                          y )Nru   )rU  r   pop)r   r  r  s      r   operator_exitzExpressionWriter.operator_exit  s:    !__RS1(hHHTNr   c                     d}| j                   |   }| j                  |       | j                  d       | j                  |j                         | j                          y )Nr  znot )unop_precedencer  r   r-   r   r  r   rR   opprecs       r   r   z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_UnopNode  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   r   _r   )
r   binop_precedencegetr  r-   r   r   replacer   r  r  s       r   r   z ExpressionWriter.visit_BinopNode  sy    ]]$$((Q/D!

4==!2::c3//0

4==!r   c                 &    | j                  |       y r   r   rQ   s     r   visit_BoolBinopNodez$ExpressionWriter.visit_BoolBinopNode      T"r   c                 &    | j                  |       y r   r  rQ   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 )Nrk   r  rl   )r-   rc   r   r  index	TupleNoderv  rz  rQ   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 )Nrk   r   rl   )r-   rc   r   startstopslicerQ   s     r   visit_SliceIndexNodez%ExpressionWriter.visit_SliceIndexNode  s    

499::JJtzz"99JJtyy!::HHTN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  steprQ   s     r   visit_SliceNodez ExpressionWriter.visit_SliceNode  st    zz!!JJtzz"yy  JJtyy!yy  HHTNJJtyy! !r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       | j                  |j                         y )N if z else )r-   true_valr   test	false_valrQ   s     r   visit_CondExprNodez#ExpressionWriter.visit_CondExprNode  sJ    

4==!

499

4>>"r   c                 v    | j                  |j                         | j                  d|j                  z         y r   r   rQ   s     r   r   z$ExpressionWriter.visit_AttributeNode  r   r   c                     | j                  |j                         | j                  d       | j                  |j                         | j                  d       y rs   r  rQ   s     r   r  z%ExpressionWriter.visit_SimpleCallNode  r  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 )NrF   r   )r  AddNodeemit_pos_argsr   r   r  rv  r-   r   r  r  r   rR   r"  s      r   r  zExpressionWriter.emit_pos_args  s    <dG$t}}-t}}-i(**,  

4   k*HHSMJJtxx HHUOJJtHHUOr   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=rF   r  )	r  MergedDictNoderv  emit_kwd_argsr  r   r  r   r-   r  s      r   r  zExpressionWriter.emit_kwd_args  s    <dN+**, )""4()h'**,  $((..01

4::& 
 HHUOJJtHHUOr   c                    | j                  |j                         | j                  d       | j                  |j                         | j                  |j                         | j                  d       | j                  d       y )Nrt   rF   ru   )r-   r  r   r  r   r  r   rZ  rQ   s     r   r   z&ExpressionWriter.visit_GeneralCallNode  s\    

4==!4//04,,-E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  rw  rx  ry  s           r   emit_comprehensionz#ExpressionWriter.emit_comprehension  s}     #)
K

4

6

8HHWJJy!r   c                 :    | j                  |j                         y r   )r-   r"  rQ   s     r   visit_ComprehensionAppendNodez.ExpressionWriter.visit_ComprehensionAppendNode  s    

499r   c                     | j                  |j                         | j                  d       | j                  |j                         y r  )r-   key_exprr   
value_exprrQ   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 )Nr|  r  )listdictsetr  r   )typepy_type_nameloopr^   r  r  r  hasattrr  r  r  )r   rR   tpmaprw  r^   r  r  r  s           r   visit_ComprehensionNodez(ExpressionWriter.visit_ComprehensionNode  s    e<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   rR   r^   r  r  r  s         r   visit_GeneratorExpressionNodez.ExpressionWriter.visit_GeneratorExpressionNode'  s    yy~~!!99%%..	4&*44I??1%**//33DT6"99==Dfh	5Ir   r   r   ))r   r   )1r   r   r   r   r0   r   rZ  rL   rS   r   r   r`  r   rc  rf  rk  ro  r   rt  rz  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   s   @r   rS  rS    s   0"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Jr   rS  N)__doc__
__future__r   r   Compiler.Visitorr   Compiler.ExprNodesobjectr	   r"   r   rD  rS  r    r   r   <module>r     s]    7 ) !&  e eN	l." l.^! .gJ{ gJr   