Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/Cython/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/Cython/__pycache__/CodeWriter.cpython-35.pyc



Z��Z]]�@s�dZddlmZmZddlmZddlTGdd�de�ZGdd	�d	e�Z	Gd
d�de	�Z
Gdd
�d
e	�ZGdd�de�ZdS)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@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LinesResultcCsg|_d|_dS)N�)�lines�s)�self�r�D/opt/alt/python35/lib64/python3.5/site-packages/Cython/CodeWriter.py�__init__s	zLinesResult.__init__cCs|j|7_dS)N)r
)rr
rrr
�putszLinesResult.putcCs |jj|j�d|_dS)Nr)r	�appendr
)rrrr
�newlineszLinesResult.newlinecCs|j|�|j�dS)N)rr)rr
rrr
�putlines
zLinesResult.putlineN)�__name__�
__module__�__qualname__rrrrrrrr
rsrcsPeZdZdZd�fdd�Zdd�Zdd�Zd	d
�Zddd
�Zdd�Z	dd�Z
ddd�Zdd�Zddd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd&�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Z d@dA�Z!dBdC�Z"dDdE�Z#dFdG�Z$dHdI�Z%dJdK�Z&dLdM�Z'dNdO�Z(dPdQ�Z)dRdS�Z*dTdU�Z+dVdW�Z,dXdY�Z-dZd[�Z.d\d]�Z/d^d_�Z0�S)`�DeclarationWriterz    NcsPtt|�j�|dkr(t�}||_d|_i|_d|_dS)Nr)�superrrr�result�
numindents�	tempnames�tempblockindex)rr)�	__class__rr
r#s				zDeclarationWriter.__init__cCs|j|�|jS)N)�visitr)r�treerrr
�write,s
zDeclarationWriter.writecCs|jd7_dS)Nr)r)rrrr
�indent0szDeclarationWriter.indentcCs|jd8_dS)Nr)r)rrrr
�dedent3szDeclarationWriter.dedentrcCs"|jj|j|j|�dS)N)rr�
indent_stringr)rr
rrr
�	startline6szDeclarationWriter.startlinecCs|jj|�dS)N)rr)rr
rrr
r9szDeclarationWriter.putcCs"|jj|j|j|�dS)N)rrr"r)rr
rrr
r<szDeclarationWriter.putlinecCs|jj|�dS)N)rr)rr
rrr
�endline?szDeclarationWriter.endlinecCs|j|�|j�dS)N)r#r$)rr
rrr
�lineBs
zDeclarationWriter.lineFcCs�t|�dkr�xd|dd�D]R}|j|�|rh|jdk	rh|jd�|j|j�|jd�q#W|j|d�dS)Nrrz = z, ���r&)�lenr�defaultr)r�items�
output_rhs�itemrrr
�comma_separated_listFs

z&DeclarationWriter.comma_separated_listcCstd|��dS)Nz"Node not handled by serializer: %r)�AssertionError)r�noderrr
�
visit_NodePszDeclarationWriter.visit_NodecCs|j|�dS)N)�
visitchildren)rr.rrr
�visit_ModuleNodeSsz"DeclarationWriter.visit_ModuleNodecCs|j|�dS)N)r0)rr.rrr
�visit_StatListNodeVsz$DeclarationWriter.visit_StatListNodecCs^|jdkrd}n
d|j}|jd|�|j�|j|j�|j�dS)Nrz"%s"zcdef extern from %s:)Zinclude_filerr r�bodyr!)rr.�filerrr
�visit_CDefExternNodeYs	

z&DeclarationWriter.visit_CDefExternNodecCs!|jd�|j|j�dS)Nr)rr�base)rr.rrr
�visit_CPtrDeclaratorNodecs
z*DeclarationWriter.visit_CPtrDeclaratorNodecCs!|jd�|j|j�dS)N�&)rrr6)rr.rrr
�visit_CReferenceDeclaratorNodegs
z0DeclarationWriter.visit_CReferenceDeclaratorNodecCsM|j|j�|jd�|jdk	r<|j|j�|jd�dS)N�[�])rr6r�	dimension)rr.rrr
�visit_CArrayDeclaratorNodeks

z,DeclarationWriter.visit_CArrayDeclaratorNodecCsM|j|j�|jd�|jdk	r<|j|j�|jd�dS)Nr:r;)rr6rr<)rr.rrr
r=rs

cCs>|j|j�|jd�|j|j�|jd�dS)N�(�))rr6rr,�argsr$)rr.rrr
�visit_CFuncDeclaratorNodeys
z+DeclarationWriter.visit_CFuncDeclaratorNodecCs|j|j�dS)N)r�name)rr.rrr
�visit_CNameDeclaratorNode�sz+DeclarationWriter.visit_CNameDeclaratorNodecCs{|jrg|jd|j�|jdkrD|jd|j�n#|jdkrg|jd|j�|j|j�dS)N�	unsigned r�signed rzshort zlong )rDrrE)Zis_basic_c_typer�signedZlongnessrB)rr.rrr
�visit_CSimpleBaseTypeNode�s	z+DeclarationWriter.visit_CSimpleBaseTypeNodecCs>|jd�|j|j�|j|j�|jd�dS)Nr>r?)rr�	base_type�
declarator)rr.rrr
�visit_CComplexBaseTypeNode�s
z,DeclarationWriter.visit_CComplexBaseTypeNodecCs1|j|j�|jd�|j|j�dS)N�.)rrHrrB)rr.rrr
�visit_CNestedBaseTypeNode�s
z+DeclarationWriter.visit_CNestedBaseTypeNodecCsH|j|j�|jd�|j|j|jj�|jd�dS)Nr:r;)rZbase_type_noderr,�positional_args�keyword_args�key_value_pairs)rr.rrr
�visit_TemplatedTypeNode�s
z)DeclarationWriter.visit_TemplatedTypeNodecCsN|jd�|j|j�|jd�|j|jdd�|j�dS)Nzcdef � r*T)r#rrHrr,Zdeclaratorsr$)rr.rrr
�visit_CVarDefNode�s


z#DeclarationWriter.visit_CVarDefNodecCs�|j|�|jrV|jd�|j|j�|jdk	rV|jd|j�|ri|j|�|jd�|j�|s�|jd�nx|D]}|j|�q�W|j�dS)NrQz "%s"�:�pass)	r#rBr�cnamer$r rrr!)rr.�decl�extras�
attributes�	attributerrr
�visit_container_node�s
	




z&DeclarationWriter.visit_container_nodecCsn|jrd}nd}|jdkr1|d7}|jrD|d7}||j7}|j||d|j�dS)Nz	ctypedef zcdef �publiczpublic zpacked )Ztypedef_flag�
visibilityZpacked�kindrZrX)rr.rVrrr
�visit_CStructOrUnionDefNode�s		
	

z-DeclarationWriter.visit_CStructOrUnionDefNodecCsed}|jr%ddj|j�}|jrH|ddj|j�7}|j|d||j�dS)Nrz[%s]z, z(%s)z
cdef cppclass)Z	templates�joinZbase_classesrZrX)rr.rWrrr
�visit_CppClassNode�s		z$DeclarationWriter.visit_CppClassNodecCs|j|dd|j�dS)Nz	cdef enum)rZr))rr.rrr
�visit_CEnumDefNode�sz$DeclarationWriter.visit_CEnumDefNodecCsa|j|j�|jr-|jd|j�|jrS|jd�|j|j�|j�dS)Nz "%s"z = )r#rBrUr�valuerr$)rr.rrr
�visit_CEnumDefItemNode�s		
z(DeclarationWriter.visit_CEnumDefItemNodecCs�|jst�|jr:x|jD]}|j|�q#W|jd�|j|j�|jr�|jd�|jr�|j|j�|jd�|j|j�|jd�|j	d�|j
�|j|j�|j�dS)Nzcdef class r>rKr?rS)
�module_namer-Z
decoratorsrr#r�
class_nameZbase_class_nameZbase_class_moduler$r r3r!)rr.�	decoratorrrr
�visit_CClassDefNode�s"	
	
	



z%DeclarationWriter.visit_CClassDefNodecCsH|jd�|j|j�|jd�|j|j�|j�dS)Nz	ctypedef rQ)r#rrHrrIr$)rr.rrr
�visit_CTypeDefNode�s


z$DeclarationWriter.visit_CTypeDefNodecCsY|jd|j�|j|j�|jd�|j�|j|j�|j�dS)Nzdef %s(z):)	r#rBr,r@r$r rr3r!)rr.rrr
�visit_FuncDefNode�s

z#DeclarationWriter.visit_FuncDefNodecCso|jjdk	r/|j|j�|jd�|j|j�|jdk	rk|jd�|j|j�dS)NrQz = )rHrBrrrIr()rr.rrr
�visit_CArgDeclNode�s

z$DeclarationWriter.visit_CArgDeclNodecCsQ|jd�|j|j�|jrC|jd�|j|j�|j�dS)Nzcimport z as )r#rrd�as_namer$)rr.rrr
�visit_CImportStatNodes
	
z'DeclarationWriter.visit_CImportStatNodecCs�|jd�|j|j�|jd�d}xx|jD]m\}}}}|dks^t�|rmd}n
|jd�|j|�|r:|jd�|j|�q:W|j�dS)Nzfrom z	 cimport TFz, z as )r#rrdZimported_namesr-r$)rr.�first�posrBrkr]rrr
�visit_FromCImportStatNodes

	


z+DeclarationWriter.visit_FromCImportStatNodecCs|j|j�dS)N)rrB)rr.rrr
�visit_NameNodesz DeclarationWriter.visit_NameNodecCs|j|j�dS)N)rrb)rr.rrr
�
visit_IntNodeszDeclarationWriter.visit_IntNodecCs|jd�dS)N�None)r)rr.rrr
�visit_NoneNode"sz DeclarationWriter.visit_NoneNodecCs.|jd�|j|j�|jd�dS)Nz(not r?)rr�operand)rr.rrr
�
visit_NotNode%s
zDeclarationWriter.visit_NotNodecCs+|jd�|j|j�|j�dS)N�@)r#rrfr$)rr.rrr
�visit_DecoratorNode*s
z%DeclarationWriter.visit_DecoratorNodecCs8|j|j�|jd|j�|j|j�dS)Nz %s )r�operand1r�operator�operand2)rr.rrr
�visit_BinopNode/sz!DeclarationWriter.visit_BinopNodecCs(|j|j�|jd|j�dS)Nz.%s)r�objrrY)rr.rrr
�visit_AttributeNode4sz%DeclarationWriter.visit_AttributeNodecCs|jt|j��dS)N)r�strrb)rr.rrr
�visit_BoolNode8sz DeclarationWriter.visit_BoolNodecCsA|j}|jdk	r*|j|j�}|jt|��dS)N)rb�encoding�encoder�repr)rr.rbrrr
�visit_StringNode<s	z"DeclarationWriter.visit_StringNodecCs|jd�|j�dS)NrT)r#r$)rr.rrr
�visit_PassStatNodeBs
z$DeclarationWriter.visit_PassStatNode)1rrrr"rrr r!r#rrr$r%r,r/r1r2r5r7r9r=rArCrGrJrLrPrRrZr^r`rarcrgrhrirjrlrorprqrsrurwr{r}rr�r�rr)rr
rs^	


		rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'S)(�
CodeWritercCsE|j�|j|j�|jd�|j|j�|j�dS)Nz = )r#r�lhsr�rhsr$)rr.rrr
�visit_SingleAssignmentNodeHs


z%CodeWriter.visit_SingleAssignmentNodecCsV|j�x+|jD] }|j|�|jd�qW|j|j�|j�dS)Nz = )r#Zlhs_listrrr�r$)rr.r�rrr
�visit_CascadedAssignmentNodeOs

z'CodeWriter.visit_CascadedAssignmentNodecCsD|jd�|j|jj�|js6|jd�|j�dS)Nzprint �,)r#r,Z	arg_tupler@Zappend_newlinerr$)rr.rrr
�visit_PrintStatNodeWs

	
zCodeWriter.visit_PrintStatNodecCs�|jd�|j|j�|jd�|j|jj�|jd�|j�|j|j�|j	�|j
dk	r�|jd�|j�|j|j
�|j	�dS)Nzfor z in rSzelse:)r#r�targetr�iterator�sequencer$r r3r!�else_clauser%)rr.rrr
�visit_ForInStatNode^s






zCodeWriter.visit_ForInStatNodecCs|jd�|j|jdj�|jd�|j�|j|jdj�|j�xi|jdd�D]T}|jd�|j|j�|jd�|j�|j|j�|j�qpW|jdk	r|j	d�|j�|j|j�|j�dS)Nzif rrSrzelif zelse:)
r#r�
if_clauses�	conditionr$r r3r!r�r%)rr.Zclauserrr
�visit_IfStatNodems$








zCodeWriter.visit_IfStatNodecCs|j|j�dS)N)r,r@)rr.rrr
�visit_SequenceNode�szCodeWriter.visit_SequenceNodecCs>|j|j�|jd�|j|j�|jd�dS)Nr>r?)r�functionrr,r@)rr.rrr
�visit_SimpleCallNode�s
zCodeWriter.visit_SimpleCallNodecCs�|j|j�|jd�|j}t|t�rH|j|j�n|j|j�|j	r�t|j	t
�r�xut|j	j�D]R\}\}}|dkr�|jd�|j|�|jd�|j|�q�Wnt
d��|jd�dS)Nr>rz, �=zNot implemented yetr?)rr�rrM�
isinstance�AsTupleNode�argr,r@rN�DictNode�	enumeraterO�	Exception)rr.Zposarg�irBrbrrr
�visit_GeneralCallNode�s 
		%


z CodeWriter.visit_GeneralCallNodecCs(|j�|j|j�|j�dS)N)r#r�exprr$)rr.rrr
�visit_ExprStatNode�s
zCodeWriter.visit_ExprStatNodecCsL|j�|j|j�|jd|j�|j|j�|j�dS)Nz %s= )r#rr�rryr�r$)rr.rrr
�visit_InPlaceAssignmentNode�s

z&CodeWriter.visit_InPlaceAssignmentNodecCs�|j�|jd�|j|j�|jdk	rS|jd�|j|j�|jd�|j�|j|j�|j�dS)Nzwith z as rS)	r#rr�managerr�r$r r3r!)rr.rrr
�visit_WithStatNode�s




zCodeWriter.visit_WithStatNodecCsf|jd�|j�|j|j�|j�|jd�|j�|j|j�|j�dS)Nztry:zfinally:)r%r rr3r!Zfinally_clause)rr.rrr
�visit_TryFinallyStatNode�s




z#CodeWriter.visit_TryFinallyStatNodecCsu|jd�|j�|j|j�|j�x|jD]}|j|�q;W|jdk	rq|j|j�dS)Nztry:)r%r rr3r!Zexcept_clausesr�)rr.�xrrr
�visit_TryExceptStatNode�s


z"CodeWriter.visit_TryExceptStatNodecCs�|jd�|jdk	r9|jd�|j|j�|jdk	re|jd�|j|j�|jd�|j�|j|j�|j�dS)N�exceptrQz, rS)	r#�patternrrr�r$r r3r!)rr.rrr
�visit_ExceptClauseNode�s




z!CodeWriter.visit_ExceptClauseNodecCs+|jd�|j|j�|j�dS)Nzreturn )r#rrbr$)rr.rrr
�visit_ReturnStatNode�s
zCodeWriter.visit_ReturnStatNodecCs|jd�dS)N�raise)r%)rr.rrr
�visit_ReraiseStatNode�sz CodeWriter.visit_ReraiseStatNodecCs|jd|jj�dS)Nz(import %s))rrdrb)rr.rrr
�visit_ImportNode�szCodeWriter.visit_ImportNodecCsad}x5|jD]*}d|j|f|j|<|d7}qW|jd7_|j|j�dS)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.
        rz$%d_%drN)Ztempsrrrr3)rr.�idx�handlerrr
�visit_TempsBlockNode�szCodeWriter.visit_TempsBlockNodecCs|j|j|j�dS)N)rrr�)rr.rrr
�visit_TempRefNode�szCodeWriter.visit_TempRefNodeN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r�Fs&



r�c@s4eZdZdd�Zdd�Zdd�ZdS)�	PxdWritercCs#tdj|j|�j��|S)N�
)�printr_rr	)rr.rrr
�__call__�szPxdWriter.__call__cCs�d|jkrdS|jr,|jd�n
|jd�|jdkre|j|j�|jd�|jr{|jd�|j|j�dS)N�inlinezcpdef zcdef ZprivaterQzapi )�	modifiersZoverridabler#r\rZapirrI)rr.rrr
�visit_CFuncDefNode�s	

	
zPxdWriter.visit_CFuncDefNodecCsdS)Nr)rr.rrr
�visit_StatNodeszPxdWriter.visit_StatNodeN)rrrr�r�r�rrrr
r��sr�c2s�eZdZd�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zddd�Zdd�Zdd �Zd!d"�Zd�d#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0d1d0d2d3d4d3d5d3iZd6d7d8d9d:d;d<d;d=d;d>d;d?d;d@d;dAd;dBd;dCd;dDd;dEdFdGdHdIdJdKdLdMdLd2dNd4dNdOdPdQdPdRdPdSdPdTdPdUdViZdWdX�ZdYdZ�Zd[d\�Zd]d^�Zd_d`�Zdadb�Z dcdd�Z!dedf�Z"dgdh�Z#didj�Z$dkdl�Z%dmdn�Z&dodp�Z'dqdr�Z(dsdt�Z)dudv�Z*d�dwdx�Z+dydz�Z,d{d|�Z-d}d~�Z.dd��Z/�S)��ExpressionWriterNcs>tt|�j�|dkr%d}||_dg|_dS)Nrr)rr�rr�
precedence)rr)rrr
rs
	zExpressionWriter.__init__cCs|j|�|jS)N)rr)rrrrr
rs
zExpressionWriter.writecCs|j|7_dS)N)r)rr
rrr
rszExpressionWriter.putcCs3|jj|�r/|jdt|��|_dS)N)r�endswithr')rr
rrr
�removeszExpressionWriter.removecCs\t|�dkrXx2|dd�D] }|j|�|jd�q#W|j|d�dS)Nrrz, r&r&)r'rr)rr)r+rrr
r, s

z%ExpressionWriter.comma_separated_listcCstd|��dS)Nz"Node not handled by serializer: %r)r-)rr.rrr
r/'szExpressionWriter.visit_NodecCs|j|j�dS)N)rrB)rr.rrr
rp*szExpressionWriter.visit_NameNodecCs|jd�dS)Nrr)r)rr.rrr
rs-szExpressionWriter.visit_NoneNodecCs|jd�dS)Nz...)r)rr.rrr
�visit_EllipsisNode0sz#ExpressionWriter.visit_EllipsisNodecCs|jt|j��dS)N)rr~rb)rr.rrr
r3szExpressionWriter.visit_BoolNodecCs|jt|j��dS)N)rr~rb)rr.rrr
�visit_ConstNode6sz ExpressionWriter.visit_ConstNodecCs!|j|j�|jd�dS)N�j)rrb)rr.rrr
�visit_ImagNode9szExpressionWriter.visit_ImagNodercCsJt|j�}|ddkr/|dd�}|jd||f�dS)NrZubrz%s%s)r�rbr)rr.�prefixZrepr_valrrr
�emit_string=szExpressionWriter.emit_stringcCs|j|d�dS)N�b)r�)rr.rrr
�visit_BytesNodeCsz ExpressionWriter.visit_BytesNodecCs|j|�dS)N)r�)rr.rrr
r�Fsz!ExpressionWriter.visit_StringNodecCs|j|d�dS)N�u)r�)rr.rrr
�visit_UnicodeNodeIsz"ExpressionWriter.visit_UnicodeNodecCsC|\}}|j�}|j|�|j|�|j|�dS)N)�
subexpr_nodesrr,)rr.�parens�
open_paren�close_parenr)rrr
�
emit_sequenceLs


zExpressionWriter.emit_sequencecCs|j|d�dS)Nz[])r�)rr.rrr
�visit_ListNodeSszExpressionWriter.visit_ListNodecCs|j|d�dS)Nz())r�)rr.rrr
�visit_TupleNodeVsz ExpressionWriter.visit_TupleNodecCs<t|j��dkr+|j|d�n
|jd�dS)Nrz{}zset())r'r�r�r)rr.rrr
�
visit_SetNodeYszExpressionWriter.visit_SetNodecCs|j|d�dS)Nz{})r�)rr.rrr
�visit_DictNode_szExpressionWriter.visit_DictNodecCs1|j|j�|jd�|j|j�dS)Nz: )r�keyrrb)rr.rrr
�visit_DictItemNodebs
z#ExpressionWriter.visit_DictItemNode�not��!�+��-�~�orr�and��in�Znot_in�is�is_not�<z<=�>z>=z!=z==�|��^�r8�z<<�z>>�	r�
rv�/z//�%z**�cCs:|jd}||kr&|jd�|jj|�dS)Nrr>r&)r�rr)r�new_prec�old_precrrr
�operator_enterzs

zExpressionWriter.operator_entercCsC|jdd�\}}||kr2|jd�|jj�dS)Nr�r?���)r�r�pop)rr�r�rrr
�
operator_exit�s
zExpressionWriter.operator_exitcCsKd}|j|}|j|�|jd�|j|j�|j�dS)Nr�znot )�unop_precedencer�rrrtr�)rr.�op�precrrr
ru�s


zExpressionWriter.visit_NotNodecCsU|j}|j|}|j|�|jd|j�|j|j�|j�dS)Nz%s)ryr�r�rrrtr�)rr.r�r�rrr
�visit_UnopNode�s	

zExpressionWriter.visit_UnopNodecCsv|j}|jj|d�}|j|�|j|j�|jd|jdd��|j|j�|j	�dS)Nrz %s �_rQ)
ry�binop_precedence�getr�rrxr�replacerzr�)rr.r�r�rrr
r{�s	
z ExpressionWriter.visit_BinopNodecCs|j|�dS)N)r{)rr.rrr
�visit_BoolBinopNode�sz$ExpressionWriter.visit_BoolBinopNodecCs|j|�dS)N)r{)rr.rrr
�visit_PrimaryCmpNode�sz%ExpressionWriter.visit_PrimaryCmpNodecCsc|j|j�|jd�t|jt�rB|j|j�n|j|j�|jd�dS)Nr:r;)rr6rr��index�	TupleNoder�)rr.rrr
�visit_IndexNode�s
z ExpressionWriter.visit_IndexNodecCs�|j|j�|jd�|jr6|j|j�|jd�|jr\|j|j�|jr�|jd�|j|j�|jd�dS)Nr:rSr;)rr6r�start�stop�slice)rr.rrr
�visit_SliceIndexNode�s
	
		
z%ExpressionWriter.visit_SliceIndexNodecCsr|jjs|j|j�|jd�|jjsE|j|j�|jjsn|jd�|j|j�dS)NrS)rZis_nonerrr�step)rr.rrr
�visit_SliceNode�s

z ExpressionWriter.visit_SliceNodecCsN|j|j�|jd�|j|j�|jd�|j|j�dS)Nz if z else )rZtrue_valr�testZ	false_val)rr.rrr
�visit_CondExprNode�s


z#ExpressionWriter.visit_CondExprNodecCs(|j|j�|jd|j�dS)Nz.%s)rr|rrY)rr.rrr
r}�sz$ExpressionWriter.visit_AttributeNodecCs>|j|j�|jd�|j|j�|jd�dS)Nr>r?)rr�rr,r@)rr.rrr
r��s
z%ExpressionWriter.visit_SimpleCallNodecCs�|dkrdSt|t�rB|j|j�|j|j�n�t|t�r�x�|j�D] }|j|�|jd�q^WnVt|t	�r�|jd�|j|j
�|jd�n|j|�|jd�dS)Nz, r)r�ZAddNode�
emit_pos_argsrxrzrr�rrr�r�)rr.r�rrr
r
�s


zExpressionWriter.emit_pos_argscCs�|dkrdSt|t�rFx�|j�D]}|j|�q,Wn�t|t�r�xr|j�D]:}|jd|jj�|j|j�|jd�qbWn'|jd�|j|�|jd�dS)Nz%s=z, z**)	r�ZMergedDictNoder��
emit_kwd_argsr�rr�rbr)rr.r�rrr
r�s

zExpressionWriter.emit_kwd_argscCs[|j|j�|jd�|j|j�|j|j�|jd�|jd�dS)Nr>z, r?)rr�rr
rMrrNr�)rr.rrr
r��s

z&ExpressionWriter.visit_GeneralCallNodecCs�|\}}|j|�|j|�|jd�|j|�|jd�|j|�|rz|jd�|j|�|j|�dS)Nz for z in z if )rr)rr3r�r�r�r�r�r�rrr
�emit_comprehensions







z#ExpressionWriter.emit_comprehensioncCs|j|j�dS)N)rr�)rr.rrr
�visit_ComprehensionAppendNodesz.ExpressionWriter.visit_ComprehensionAppendNodecCs1|j|j�|jd�|j|j�dS)Nz: )rZkey_exprrZ
value_expr)rr.rrr
�!visit_DictComprehensionAppendNodes
z2ExpressionWriter.visit_DictComprehensionAppendNodecCs�ddddddi}||jj�}|jj}|jj}|jjj}d}t|d�r�|jdj	}|jdj}|j
|||||�dS)N�listz[]�dictz{}�setr�r)�typeZpy_type_name�loopr3r�r�r��hasattrr�r�r)rr.Ztpmapr�r3r�r�r�rrr
�visit_ComprehensionNodesz(ExpressionWriter.visit_ComprehensionNodecCs�|jj}|jj}|jjj}d}t|d�re|jdj}|jdjjj	}nt|d�r�|jj	}|j
||||d�dS)Nr�rr�z())rr3r�r�r�rr�r�r�r�r)rr.r3r�r�r�rrr
�visit_GeneratorExpressionNode$sz.ExpressionWriter.visit_GeneratorExpressionNode)rr)rr)0rrrrrrr�r,r/rprsr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rur�r{r�r�rrrr	r}r�r
rr�rr
rrrrr)rr
r�sn<		




r�N)
�__doc__�
__future__rrZCompiler.VisitorrZCompiler.ExprNodes�objectrrr�r�r�rrrr
�<module>s
�(�