
    i^                         S r SSKJr  SSK7  SSKJr   " S S5      r " S S\5      r " S	 S
\5      r " S S\5      r	 " S S\\	5      r
 " S S\\	5      rg)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                   ,    \ rS rSrS rS rS rS rSrg)LinesResult   c                      / U l         SU l        g N linessselfs    Q/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/Cython/CodeWriter.py__init__LinesResult.__init__   s    
    c                 .    U =R                   U-  sl         g N)r   r   r   s     r   putLinesResult.put   s    !r   c                 \    U R                   R                  U R                  5        SU l        g r
   )r   appendr   r   s    r   newlineLinesResult.newline   s    

$&&!r   c                 F    U R                  U5        U R                  5         g r   )r   r   r   s     r   putlineLinesResult.putline   s    r   r   N)	__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes__ r   r   r   r      s    r   r   c                   *  ^  \ rS rSrSrSrS-U 4S jjrS rS rS r	S.S jr
S	 rS
 rS.S jrS rS/S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S,r.U =r/$ )0DeclarationWriter   z=
A Cython code writer that is limited to declarations nodes.
z    c                 r   > [         TU ]  5         Uc
  [        5       nXl        SU l        0 U l        SU l        g )N    )superr   r   result
numindents	tempnamestempblockindex)r   r-   	__class__s     r   r   DeclarationWriter.__init__&   s5    > ]Fr   c                 <    U R                  U5        U R                  $ r   visitr-   r   trees     r   writeDeclarationWriter.write/       

4{{r   c                 .    U =R                   S-  sl         g Nr   r.   r   s    r   indentDeclarationWriter.indent3       1r   c                 .    U =R                   S-  sl         g r<   r=   r   s    r   dedentDeclarationWriter.dedent6   r@   r   c                 n    U R                   R                  U R                  U R                  -  U-   5        g r   )r-   r   indent_stringr.   r   s     r   	startlineDeclarationWriter.startline9   s&    **T__<q@Ar   c                 :    U R                   R                  U5        g r   )r-   r   r   s     r   r   DeclarationWriter.put<   s    r   c                 n    U R                   R                  U R                  U R                  -  U-   5        g r   )r-   r   rE   r.   r   s     r   r   DeclarationWriter.putline?   s(    D..@1DEr   c                 :    U R                   R                  U5        g r   )r-   r   r   s     r   endlineDeclarationWriter.endlineB   s    Ar   c                 F    U R                  U5        U R                  5         g r   rF   rM   r   s     r   lineDeclarationWriter.lineE   s    qr   c                    [        U5      S:  a  US S  He  nU R                  U5        U(       a9  UR                  b,  U R                  S5        U R                  UR                  5        U R                  S5        Mg     U R                  US   5        U(       aA  US   R                  b0  U R                  S5        U R                  US   R                  5        g g g g )Nr+    = , )lenr5   defaultr   )r   items
output_rhsitems       r   comma_separated_list&DeclarationWriter.comma_separated_listI   s    u:>cr


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

59,,- <z r   c                 f    U R                  5         U R                  U5        U R                  5         g r   )r>   r5   rB   r   nodes     r   _visit_indented!DeclarationWriter._visit_indentedV   s     

4r   c                     [        SU-  5      e)N"Node not handled by serializer: %r)AssertionErrorr_   s     r   
visit_NodeDeclarationWriter.visit_Node[   s    ADHIIr   c                 &    U R                  U5        g r   visitchildrenr_   s     r   visit_ModuleNode"DeclarationWriter.visit_ModuleNode^       4 r   c                 &    U R                  U5        g r   ri   r_   s     r   visit_StatListNode$DeclarationWriter.visit_StatListNodea   rm   r   c                     UR                   c  SnOSUR                   -  nU R                  SU-  5        U R                  UR                  5        g )Nr   z"%s"zcdef extern from %s:)include_filer   ra   body)r   r`   files      r   visit_CDefExternNode&DeclarationWriter.visit_CDefExternNoded   sG    $DD---D+d23TYY'r   c                 \    U R                  S5        U R                  UR                  5        g )Nr   r   r5   baser_   s     r   visit_CPtrDeclaratorNode*DeclarationWriter.visit_CPtrDeclaratorNodel       

499r   c                 \    U R                  S5        U R                  UR                  5        g )N&rx   r_   s     r   visit_CReferenceDeclaratorNode0DeclarationWriter.visit_CReferenceDeclaratorNodep   r|   r   c                     U R                  UR                  5        U R                  S5        UR                  b  U R                  UR                  5        U R                  S5        g N[])r5   ry   r   	dimensionr_   s     r   visit_CArrayDeclaratorNode,DeclarationWriter.visit_CArrayDeclaratorNodet   sB    

499>>%JJt~~&r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  S5        g N())r5   ry   r   r\   argsrM   r_   s     r   visit_CFuncDeclaratorNode+DeclarationWriter.visit_CFuncDeclaratorNode{   s;    

499!!$)),Sr   c                 :    U R                  UR                  5        g r   r   namer_   s     r   visit_CNameDeclaratorNode+DeclarationWriter.visit_CNameDeclaratorNode       r   c                 p   UR                   (       a|  U R                  SUR                     5        UR                  S:  a   U R                  SUR                  * -  5        O.UR                  S:  a  U R                  SUR                  -  5        UR                  b  U R                  UR                  5        g g )N)z	unsigned r   zsigned r+   zshort zlong )is_basic_c_typer   signedlongnessr   r_   s     r   visit_CSimpleBaseTypeNode+DeclarationWriter.visit_CSimpleBaseTypeNode   s    HH1$++>?}}q T]]N23"4==0199 HHTYY !r   c                 p    U R                  UR                  5        U R                  UR                  5        g r   )r5   	base_type
declaratorr_   s     r   visit_CComplexBaseTypeNode,DeclarationWriter.visit_CComplexBaseTypeNode   s"    

4>>"

4??#r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        g )N.)r5   r   r   r   r_   s     r   visit_CNestedBaseTypeNode+DeclarationWriter.visit_CNestedBaseTypeNode   s-    

4>>"r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  UR
                  R                  -   5        U R                  S5        g r   )r5   base_type_noder   r\   positional_argskeyword_argskey_value_pairsr_   s     r   visit_TemplatedTypeNode)DeclarationWriter.visit_TemplatedTypeNode   sO    

4&&'!!$"6"69J9J9Z9Z"Z[r   c                     U R                  S5        U R                  UR                  5        U R                  S5        U R	                  UR
                  SS9  U R                  5         g )Ncdef  T)rZ   )rF   r5   r   r   r\   declaratorsrM   r_   s     r   visit_CVarDefNode#DeclarationWriter.visit_CVarDefNode   sK    w

4>>"!!$"2"2t!Dr   c                    U R                  U5        UR                  (       aW  U R                  S5        U R                  UR                  5        UR                  b  U R                  SUR                  -  5        U(       a  U R                  U5        U R	                  S5        U R                  5         U(       d  U R                  S5        OU H  nU R                  U5        M     U R                  5         g )Nr    "%s":pass)	rF   r   r   cnamerM   r>   r   r5   rB   )r   r`   declextras
attributes	attributes         r   _visit_container_node'DeclarationWriter._visit_container_node   s    t99HHSMHHTYYzz%4::-.HHVSLL '	

9% (r   c                     UR                   (       a  SnOSnUR                  S:X  a  US-  nUR                  (       a  US-  nX!R                  -  nU R	                  XS UR
                  5        g )N	ctypedef r   publiczpublic zpacked )typedef_flag
visibilitypackedkindr   r   )r   r`   r   s      r   visit_CStructOrUnionDefNode-DeclarationWriter.visit_CStructOrUnionDefNode   s^    DD??h&ID;;ID		""4tT__Er   c                    SnUR                   (       a  SSR                  UR                   5      -  nUR                  (       a!  USSR                  UR                  5      -  -  nU R                  USX!R                  5        g )Nr   z[%s]rV   z(%s)zcdef cppclass)	templatesjoinbase_classesr   r   )r   r`   r   s      r   visit_CppClassNode$DeclarationWriter.visit_CppClassNode   sb    >>dii77Fftyy):):;;;F""4&//Rr   c                 @    U R                  USS UR                  5        g )Nz	cdef enum)r   rY   r_   s     r   visit_CEnumDefNode$DeclarationWriter.visit_CEnumDefNode   s    ""4dDJJGr   c                 2   U R                  UR                  5        UR                  (       a  U R                  SUR                  -  5        UR                  (       a,  U R                  S5        U R                  UR                  5        U R                  5         g )Nr   rU   )rF   r   r   r   valuer5   rM   r_   s     r   visit_CEnumDefItemNode(DeclarationWriter.visit_CEnumDefItemNode   sY    tyy!::HHWtzz)*::HHUOJJtzz"r   c                 Z   UR                   (       a   eUR                  (       a$  UR                   H  nU R                  U5        M     U R                  S5        U R	                  UR
                  5        UR                  (       az  U R	                  S5        UR                  (       a,  U R	                  UR                  5        U R	                  S5        U R	                  UR                  5        U R	                  S5        U R                  S5        U R                  UR                  5        g )Nzcdef class r   r   r   r   )module_name
decoratorsr5   rF   r   
class_namebase_class_namebase_class_modulerM   ra   rs   )r   r`   	decorators      r   visit_CClassDefNode%DeclarationWriter.visit_CClassDefNode   s    ####??!__	

9% -}%!HHSM%%//0HHT))*HHSMSTYY'r   c                     U R                  S5        U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  5         g )Nr   r   )rF   r5   r   r   r   rM   r_   s     r   visit_CTypeDefNode$DeclarationWriter.visit_CTypeDefNode   sB    {#

4>>"

4??#r   c                     U R                  SUR                  -  5        U R                  UR                  5        U R	                  S5        U R                  UR                  5        g )Nzdef %s():)rF   r   r\   r   rM   ra   rs   r_   s     r   visit_FuncDefNode#DeclarationWriter.visit_FuncDefNode   sG    y499,-!!$)),TTYY'r   c                 V   U R                  UR                  (       a  SOS5        UR                  (       a;  U R                  SR	                  UR                  5      5        U R                  S5        UR
                  S:w  a,  U R                  UR
                  5        U R                  S5        UR                  (       a  U R                  S5        UR                  (       aC  U R                  UR                  5        UR                  R                  b  U R                  S5        U R                  UR                  R                  5        U R                  S5        U R                  UR                  R                  5        U R                  S5        U R                  UR                   5        g )Ncpdef r   r   privateapi r   r   )rF   overridable	modifiersr   r   r   apir   r5   r   r   ry   r\   r   rM   ra   rs   r_   s     r   visit_CFuncDefNode$DeclarationWriter.visit_CFuncDefNode   s   4#3#3xA>>HHSXXdnn-.HHSM??i'HHT__%HHSM88HHV>>JJt~~&~~"". 	

4??''(!!$//"6"67TTYY'r   c                    [        UR                  [        5      (       a  UR                  R                  bK  U R	                  UR                  5        UR
                  R                  5       (       a  U R                  S5        U R	                  UR
                  5        UR                  b-  U R                  S5        U R	                  UR                  5        g g )Nr   rU   )	
isinstancer   r   r   r5   r   declared_namer   rX   r_   s     r   visit_CArgDeclNode$DeclarationWriter.visit_CArgDeclNode  s     $..*=>>##/JJt~~& ,,..

4??#<<#HHUOJJt||$ $r   c                     U R                  S5        U R                  UR                  5        UR                  (       a,  U R                  S5        U R                  UR                  5        U R	                  5         g )Nzcimport  as )rF   r   r   as_namerM   r_   s     r   visit_CImportStatNode'DeclarationWriter.visit_CImportStatNode"  sL    z"!!"<<HHVHHT\\"r   c                    U R                  S5        U R                  UR                  5        U R                  S5        SnUR                   Hb  u  p4pVUb   eU(       a  SnOU R                  S5        U R                  U5        U(       d  M@  U R                  S5        U R                  U5        Md     U R	                  5         g )Nzfrom z	 cimport TFrV   r   )rF   r   r   imported_namesrM   )r   r`   firstposr   r   r   s          r   visit_FromCImportStatNode+DeclarationWriter.visit_FromCImportStatNode*  s    w!!"(,(;(;$Cw<<HHTNw ! )< 	r   c                 :    U R                  UR                  5        g r   r   r_   s     r   visit_NameNode DeclarationWriter.visit_NameNode;  r   r   c                 |    U R                  S5        U R                  UR                  5        U R                  5         g )N@)rF   r5   r   rM   r_   s     r   visit_DecoratorNode%DeclarationWriter.visit_DecoratorNode>  s'    s

4>>"r   c                 F    U R                  S5        U R                  5         g )Nr   rP   r_   s     r   visit_PassStatNode$DeclarationWriter.visit_PassStatNodeC  s    vr   )r.   r-   r0   r/   r   )r   )F)0r!   r"   r#   r$   __doc__rE   r   r8   r>   rB   rF   r   r   rM   rQ   r\   ra   rf   rk   ro   ru   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%   __classcell__r1   s   @r   r(   r(      s     M BF.
J!!(	 $
&
FSH("((0%$"
 r   r(   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)StatementWriteriH  z<
A Cython code writer for most language statement features.
c                     U R                  5         U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  5         g NrU   )rF   r5   lhsr   rhsrM   r_   s     r   visit_SingleAssignmentNode*StatementWriter.visit_SingleAssignmentNodeM  s@    

488

488r   c                     U R                  5         UR                   H%  nU R                  U5        U R                  S5        M'     U R                  UR                  5        U R                  5         g r  )rF   lhs_listr5   r   r  rM   )r   r`   r  s      r   visit_CascadedAssignmentNode,StatementWriter.visit_CascadedAssignmentNodeT  sK    ==CJJsOHHUO ! 	

488r   c                     U R                  S5        U R                  UR                  R                  5        UR                  (       d  U R                  S5        U R                  5         g )Nzprint ,)rF   r\   	arg_tupler   append_newliner   rM   r_   s     r   visit_PrintStatNode#StatementWriter.visit_PrintStatNode\  sC    x !!$.."5"56""HHSMr   c                    U R                  S5        UR                  R                  (       a&  U R                  UR                  R                  5        OU R                  UR                  5        U R                  S5        U R                  UR                  R                  5        U R                  S5        U R                  UR                  5        UR                  b-  U R                  S5        U R                  UR                  5        g g )Nzfor  in r   else:)rF   targetis_sequence_constructorr\   r   r5   r   iteratorsequencerM   ra   rs   else_clauserQ   r_   s     r   visit_ForInStatNode#StatementWriter.visit_ForInStatNodec  s    v;;..%%dkk&6&67JJt{{#

4==))*STYY''IIg  !1!12 (r   c                 8   U R                  S5        U R                  UR                  S   R                  5        U R	                  S5        U R                  UR                  S   R                  5        UR                  SS   H[  nU R                  S5        U R                  UR                  5        U R	                  S5        U R                  UR                  5        M]     UR                  b-  U R                  S5        U R                  UR                  5        g g )Nzif r+   r   r   zelif r  )	rF   r5   
if_clauses	conditionrM   ra   rs   r!  rQ   )r   r`   clauses      r   visit_IfStatNode 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                 (   U R                  S5        U R                  UR                  5        U R                  S5        U R	                  UR
                  5        UR                  b-  U R                  S5        U R	                  UR                  5        g g )Nzwhile r   r  )rF   r5   r&  rM   ra   rs   r!  rQ   r_   s     r   visit_WhileStatNode#StatementWriter.visit_WhileStatNode  sm    x 

4>>"STYY''IIg  !1!12 (r   c                 &    U R                  S5        g )NcontinuerQ   r_   s     r   visit_ContinueStatNode&StatementWriter.visit_ContinueStatNode  s    		*r   c                 &    U R                  S5        g )Nbreakr/  r_   s     r   visit_BreakStatNode#StatementWriter.visit_BreakStatNode      		'r   c                 :    U R                  UR                  5        g r   )r\   r   r_   s     r   visit_SequenceNode"StatementWriter.visit_SequenceNode  s    !!$)),r   c                 z    U R                  5         U R                  UR                  5        U R                  5         g r   )rF   r5   exprrM   r_   s     r   visit_ExprStatNode"StatementWriter.visit_ExprStatNode  s%    

499r   c                     U R                  5         U R                  UR                  5        U R                  SUR                  -  5        U R                  UR
                  5        U R                  5         g )Nz %s= )rF   r5   r  r   operatorr  rM   r_   s     r   visit_InPlaceAssignmentNode+StatementWriter.visit_InPlaceAssignmentNode  sJ    

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

488r   c                 F   U R                  5         U R                  S5        U R                  UR                  5        UR                  b,  U R                  S5        U R                  UR                  5        U R                  S5        U R                  UR                  5        g )Nzwith r   r   )rF   r   r5   managerr  rM   ra   rs   r_   s     r   visit_WithStatNode"StatementWriter.visit_WithStatNode  sl    

4<< ;;"HHVJJt{{#STYY'r   c                     U R                  S5        U R                  UR                  5        U R                  S5        U R                  UR                  5        g )Ntry:zfinally:)rQ   ra   rs   finally_clauser_   s     r   visit_TryFinallyStatNode(StatementWriter.visit_TryFinallyStatNode  s@    		&TYY'		*T001r   c                     U R                  S5        U R                  UR                  5        UR                   H  nU R	                  U5        M     UR
                  b  U R	                  UR
                  5        g g )NrG  )rQ   ra   rs   except_clausesr5   r!  )r   r`   xs      r   visit_TryExceptStatNode'StatementWriter.visit_TryExceptStatNode  s^    		&TYY'$$AJJqM %'JJt''( (r   c                 b   U R                  S5        UR                  b,  U R                  S5        U R                  UR                  5        UR                  b,  U R                  S5        U R                  UR                  5        U R                  S5        U R                  UR                  5        g )Nexceptr   rV   r   )rF   patternr   r5   r  rM   ra   rs   r_   s     r   visit_ExceptClauseNode&StatementWriter.visit_ExceptClauseNode  sv    x <<#HHSMJJt||$;;"HHTNJJt{{#STYY'r   c                     U R                  S5        UR                  b,  U R                  S5        U R                  UR                  5        U R	                  5         g )Nreturnr   )rF   r   r   r5   rM   r_   s     r   visit_ReturnStatNode$StatementWriter.visit_ReturnStatNode  s<    x ::!HHSMJJtzz"r   c                 &    U R                  S5        g )Nraiser/  r_   s     r   visit_ReraiseStatNode%StatementWriter.visit_ReraiseStatNode  r6  r   c                 T    U R                  SUR                  R                  -  5        g )Nz(import %s))r   r   r   r_   s     r   visit_ImportNode StatementWriter.visit_ImportNode  s    !1!1!7!778r   c                     SnUR                    H&  nSU R                  U4-  U R                  U'   US-  nM(     U =R                  S-  sl        U R                  UR                  5        g)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)tempsr0   r/   r5   rs   )r   r`   idxhandles       r   visit_TempsBlockNode$StatementWriter.visit_TempsBlockNode  sa     jjF%-1D1Dc0J%JDNN6"1HC ! 	q 

499r   c                 T    U R                  U R                  UR                     5        g r   )r   r/   rc  r_   s     r   visit_TempRefNode!StatementWriter.visit_TempRefNode  s    ,-r   r&   N)r!   r"   r#   r$   r  r  r  r  r"  r(  r+  r0  r4  r8  r<  r@  rD  rI  rN  rS  rW  r[  r^  rd  rg  r%   r&   r   r   r	  r	  H  sk    33 3-
(2)	(9.r   r	  c            
         ^  \ rS rSrSrSNU 4S jjrS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSOS jrS rS rS rS rS rSSSSSS.r0 SS_SS_S S!_S"S!_S#S!_S$S!_S%S!_S&S!_S'S!_S(S!_S)S!_S*S!_S+S,_S-S._S/S0_S1S2_S3S2_S4S4S5S5S5S5S5S6S7.ErS8 rS9 rS: rS; r S< r!S= r"S> r#S? r$S@ r%SA r&SB r'SC r(SD r)SE r*SF r+SG r, SOSH jr-SI r.SJ r/SK r0SL r1SMr2U =r3$ )PExpressionWriteri  zD
A Cython code writer that is intentionally limited to expressions.
c                 T   > [         TU ]  5         Uc  SnXl        X l        S/U l        g )Nr   r+   )r,   r   r-   allow_unknown_nodes
precedence)r   r-   rl  r1   s      r   r   ExpressionWriter.__init__  s,    >F#6 #r   c                 <    U R                  U5        U R                  $ r   r4   r6   s     r   r8   ExpressionWriter.write  r:   r   c                 .    U =R                   U-  sl         g r   )r-   r   s     r   r   ExpressionWriter.put  s    qr   c                     U R                   R                  U5      (       a  U R                   S [        U5      *  U l         g g r   )r-   endswithrW   r   s     r   removeExpressionWriter.remove  s4    ;;""++hAw/DK #r   c                     [        U5      S:  aC  US S  H%  nU R                  U5        U R                  S5        M'     U R                  US   5        g g )Nr+   rT   rV   )rW   r5   r   )r   rY   r[   s      r   r\   %ExpressionWriter.comma_separated_list  sK    u:>cr


4  # JJuRy!	 r   c                 d    U R                   (       a  U R                  S5        g [        SU-  5      e)N...rd   )rl  r   re   r_   s     r   rf   ExpressionWriter.visit_Node  s'    ##HHUO !E!LMMr   c                 :    U R                  UR                  5        g r   r   r   r_   s     r   visit_IntNodeExpressionWriter.visit_IntNode      r   c                 :    U R                  UR                  5        g r   r}  r_   s     r   visit_FloatNode ExpressionWriter.visit_FloatNode
  r  r   c                 &    U R                  S5        g )NNoner   r_   s     r   visit_NoneNodeExpressionWriter.visit_NoneNode  s    r   c                 :    U R                  UR                  5        g r   r   r_   s     r   r   ExpressionWriter.visit_NameNode  r   r   c                 &    U R                  S5        g )Nrz  r  r_   s     r   visit_EllipsisNode#ExpressionWriter.visit_EllipsisNode  s    r   c                 L    U R                  [        UR                  5      5        g r   r   strr   r_   s     r   visit_BoolNodeExpressionWriter.visit_BoolNode      TZZ!r   c                 L    U R                  [        UR                  5      5        g r   r  r_   s     r   visit_ConstNode ExpressionWriter.visit_ConstNode  r  r   c                 @    U R                  UR                   S35        g )Njr}  r_   s     r   visit_ImagNodeExpressionWriter.visit_ImagNode  s    DJJ<q!"r   c                 L    U R                  [        UR                  5      5        g r   r   reprr   r_   s     r   visit_BytesNode ExpressionWriter.visit_BytesNode      djj!"r   c                 L    U R                  [        UR                  5      5        g r   r  r_   s     r   visit_UnicodeNode"ExpressionWriter.visit_UnicodeNode"  r  r   c                     Uu  p4UR                  5       nU R                  U5        U R                  U5        U R                  U5        g r   )subexpr_nodesr   r\   )r   r`   parens
open_parenclose_parenrY   s         r   emit_sequenceExpressionWriter.emit_sequence%  s>    "(
""$!!%(r   c                 (    U R                  US5        g )N[]r  r_   s     r   visit_ListNodeExpressionWriter.visit_ListNode,      4&r   c                 (    U R                  US5        g )N()r  r_   s     r   visit_TupleNode ExpressionWriter.visit_TupleNode/  r  r   c                     [        UR                  5       5      S:  a  U R                  US5        g U R                  S5        g )Nr+   {}zset())rW   r  r  r   r_   s     r   visit_SetNodeExpressionWriter.visit_SetNode2  s4    t!!#$q(tT*HHWr   c                 (    U R                  US5        g )Nr  r  r_   s     r   visit_DictNodeExpressionWriter.visit_DictNode8  r  r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        g Nz: )r5   keyr   r   r_   s     r   visit_DictItemNode#ExpressionWriter.visit_DictItemNode;  s-    

488

4::r         )not!+-~orr   and   in   not_inisis_not<z<=>z>=z!=z==|   ^   r~      z<<   z>>	   
      )r  r  r   r   /z//%**c                     U R                   S   nX!:  a  U R                  S5        U R                   R                  U5        g )NrT   r   )rm  r   r   )r   new_precold_precs      r   operator_enterExpressionWriter.operator_enterS  s3    ??2&HHSMx(r   c                     U R                   SS  u  pX:  a  U R                  S5        U R                   R                  5         g )Nr   )rm  r   pop)r   r  r  s      r   operator_exitExpressionWriter.operator_exitY  s6    !__RS1HHSMr   c                     SnU R                   U   nU R                  U5        U R                  S5        U R                  UR                  5        U R                  5         g )Nr  znot )unop_precedencer  r   r5   operandr  r   r`   opprecs       r   visit_NotNodeExpressionWriter.visit_NotNode_  sM    ##B'D!

4<< r   c                     UR                   nU R                  U   nU R                  U5        U R                  SUR                   -  5        U R	                  UR
                  5        U R                  5         g )Nz%s)r?  r  r  r   r5   r  r  r  s       r   visit_UnopNodeExpressionWriter.visit_UnopNodeg  sZ    ]]##B'D!%&

4<< r   c                 J   UR                   nU R                  R                  US5      nU R                  U5        U R	                  UR
                  5        U R                  SUR                  SS5      -  5        U R	                  UR                  5        U R                  5         g )Nr+   z %s _r   )
r?  binop_precedencegetr  r5   operand1r   replaceoperand2r  r  s       r   visit_BinopNode ExpressionWriter.visit_BinopNodeo  sy    ]]$$((Q/D!

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

4==!r   c                 &    U R                  U5        g r   r  r_   s     r   visit_BoolBinopNode$ExpressionWriter.visit_BoolBinopNodex      T"r   c                 &    U R                  U5        g r   r  r_   s     r   visit_PrimaryCmpNode%ExpressionWriter.visit_PrimaryCmpNode{  r   r   c                    U R                  UR                  5        U R                  S5        [        UR                  [
        5      (       aM  UR                  R                  5       (       a  U R                  UR                  5        O-U R                  S5        OU R                  UR                  5        U R                  S5        g )Nr   r  r   )r5   ry   r   r   index	TupleNoder  r  r_   s     r   visit_IndexNode ExpressionWriter.visit_IndexNode~  sy    

499djj),,zz''))""4::.JJtzz"r   c                    U R                  UR                  5        U R                  S5        UR                  (       a  U R                  UR                  5        U R                  S5        UR                  (       a  U R                  UR                  5        UR
                  (       a,  U R                  S5        U R                  UR
                  5        U R                  S5        g )Nr   r   r   )r5   ry   r   startstopslicer_   s     r   visit_SliceIndexNode%ExpressionWriter.visit_SliceIndexNode  s    

499::JJtzz"99JJtyy!::HHSMJJtzz"r   c                    UR                   R                  (       d  U R                  UR                   5        U R                  S5        UR                  R                  (       d  U R                  UR                  5        UR
                  R                  (       d-  U R                  S5        U R                  UR
                  5        g g )Nr   )r
  is_noner5   r   r  stepr_   s     r   visit_SliceNode ExpressionWriter.visit_SliceNode  st    zz!!JJtzz"yy  JJtyy!yy  HHSMJJtyy! !r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  S5        U R                  UR                  5        g )N if z else )r5   true_valr   test	false_valr_   s     r   visit_CondExprNode#ExpressionWriter.visit_CondExprNode  sJ    

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

499

4>>"r   c                 v    U R                  UR                  5        U R                  SUR                  -  5        g )Nz.%s)r5   objr   r   r_   s     r   visit_AttributeNode$ExpressionWriter.visit_AttributeNode  s'    

488'(r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  S5        g r   )r5   functionr   r\   r   r_   s     r   visit_SimpleCallNode%ExpressionWriter.visit_SimpleCallNode  s:    

4==!!!$)),r   c                 ,   Uc  g [        U[        5      (       a7  U R                  UR                  5        U R                  UR                  5        g [        U[
        5      (       a:  UR                  5        H%  nU R                  U5        U R                  S5        M'     g [        U[        5      (       a>  U R                  S5        U R                  UR                  5        U R                  S5        g U R                  U5        U R                  S5        g )NrV   r   )r   AddNodeemit_pos_argsr  r  r  r  r5   r   AsTupleNodeargr   r`   r;  s      r   r%  ExpressionWriter.emit_pos_args  s    <dG$$t}}-t}}-i((**,

4  - k**HHSMJJtxx HHTNJJtHHTNr   c                    Uc  g [        U[        5      (       a)  UR                  5        H  nU R                  U5        M     g [        U[        5      (       al  UR                  5        HW  nU R                  SUR                  R                  -  5        U R                  UR                  5        U R                  S5        MY     g U R                  S5        U R                  U5        U R                  S5        g )Nz%s=rV   r  )	r   MergedDictNoder  emit_kwd_argsDictNoder   r  r   r5   r(  s      r   r,  ExpressionWriter.emit_kwd_args  s    <dN++**,""4( -h''**,/0

4::& -
 HHTNJJtHHTNr   c                    U R                  UR                  5        U R                  S5        U R                  UR                  5        U R                  UR                  5        U R                  S5        U R                  S5        g )Nr   rV   r   )r5   r   r   r%  r   r,  r   ru  r_   s     r   visit_GeneralCallNode&ExpressionWriter.visit_GeneralCallNode  s\    

4==!4//04,,-Dr   c                 L   Uu  pgU R                  U5        U R                  U5        U R                  S5        U R                  U5        U R                  S5        U R                  U5        U(       a"  U R                  S5        U R                  U5        U R                  U5        g )Nz for r  r  )r   r5   )r   rs   r  r   r&  r  r  r  s           r   emit_comprehension#ExpressionWriter.emit_comprehension  s{     #)


4

6

8HHVJJy!r   c                 :    U R                  UR                  5        g r   )r5   r;  r_   s     r   visit_ComprehensionAppendNode.ExpressionWriter.visit_ComprehensionAppendNode  s    

499r   c                     U R                  UR                  5        U R                  S5        U R                  UR                  5        g r  )r5   key_exprr   
value_exprr_   s     r   !visit_DictComprehensionAppendNode2ExpressionWriter.visit_DictComprehensionAppendNode  s-    

4==!

4??#r   c                    SSSS.nX!R                   R                  5          nUR                  R                  nUR                  R                  nUR                  R
                  R                  nS n[        US5      (       a2  UR                  S   R                  nUR                  S   R                  nU R                  XEXgU5        g )Nr  r  )listdictsetr%  r+   )typepy_type_namelooprs   r  r  r   hasattrr%  r&  r3  )r   r`   tpmapr  rs   r  r   r&  s           r   visit_ComprehensionNode(ExpressionWriter.visit_ComprehensionNode  s    tD9yy--/0yy~~!!99%%..	4&&*44I??1%**Dh6Jr   c                    UR                   R                  nUR                   R                  nUR                   R                  R                  nS n[        US5      (       aG  UR                  S   R                  nUR                  S   R                  R                  R                  nO'[        US5      (       a  UR                  R                  nU R                  X#XES5        g )Nr%  r+   r;  r  )rC  rs   r  r  r   rD  r%  r&  r;  r'  r3  )r   r`   rs   r  r   r&  s         r   visit_GeneratorExpressionNode.ExpressionWriter.visit_GeneratorExpressionNode   s    yy~~!!99%%..	4&&*44I??1%**//33DT6""99==Dh4Hr   )rl  rm  r-   )NF))r   r   )4r!   r"   r#   r$   r  r   r8   r   ru  r\   rf   r~  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r,  r0  r3  r6  r;  rF  rI  r%   r  r  s   @r   rj  rj    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 Ir   rj  c                   *    \ rS rSrSrS rS rS rSrg)	PxdWriteri  zP
A Cython code writer for everything supported in pxd files.
(currently unused)
c                 l    [        SR                  U R                  U5      R                  5      5        U$ )N
)printr   r8   r   r_   s     r   __call__PxdWriter.__call__  s'    dii

4(../0r   c                    UR                   (       a  U R                  S5        OU R                  S5        UR                  (       a;  U R                  SR	                  UR                  5      5        U R                  S5        UR
                  S:w  a,  U R                  UR
                  5        U R                  S5        UR                  (       a  U R                  S5        U R                  UR                  5        g )Nr   r   r   r   r   )	r   rF   r   r   r   r   r   r5   r   r_   s     r   r   PxdWriter.visit_CFuncDefNode  s    NN8$NN7#>>HHSXXdnn-.HHSM??i'HHT__%HHSM88HHV

4??#r   c                     g r   r&   r_   s     r   visit_StatNodePxdWriter.visit_StatNode(  s    r   r&   N)	r!   r"   r#   r$   r  rP  r   rU  r%   r&   r   r   rL  rL    s    
$r   rL  c                       \ rS rSrSrSrg)
CodeWriteri,  z 
A complete Cython code writer.
r&   N)r!   r"   r#   r$   r  r%   r&   r   r   rX  rX  ,  s    r   rX  N)r  Compiler.Visitorr   Compiler.ExprNodesCompiler.Nodesr   r   r(   r	  rj  rL  rX  r&   r   r   <module>r\     sn    * ! / "f fR	U.' U.plI{ lI^	!#3 :"2 r   