B
    d               &   @   sr  U d Z ddlZddlmZmZmZmZmZ ejdkr>ddl	Z	n.yddl
mZ	 W n ek
rj   ddl	Z	Y nX e	jde	jde	jde	jd	e	jd
e	jde	jde	jde	jde	jde	jde	jde	jde	jde	jde	jde	jde	jde	jdiZ eee	j! e"f e#d< d%e"e"ddddZ$ed&de"dddd Z%ed'e	j!e"e"dd!d Z%d(ee	j! e"ee" dd"d Z%G d#d$ d$e	j&Z'dS ))z'Helpers for AST (Abstract Syntax Tree).    N)DictListOptionalTypeoverload)      )ast3+and&|^/z//~z<<@*%notz**orz>>-	OPERATORSexeczast.AST)codemodereturnc             C   sP   yt j| |ddS  tk
r.   t j| |dS  tk
rJ   t j| |dS X dS )z{Parse the *code* using the built-in ast or typed_ast libraries.

    This enables "type_comments" feature if possible.
    T)r   Ztype_comments)r   N)astparseSyntaxError	TypeError)r   r    r    ^/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sphinx/pycode/ast.pyr   '   s    r    )noder   r   c             C   s   d S )Nr    )r#   r   r    r    r!   unparse9   s    r$   c             C   s   d S )Nr    )r#   r   r    r    r!   r$   >   s    c             C   s(   | dkrdS t | tr| S t|| S )zUnparse an AST to string.N)
isinstancestr_UnparseVisitorvisit)r#   r   r    r    r!   r$   C   s
    
c               @   s  e Zd Zd:eddddZejedddZxeD ]Z	ee
 d	e	j < q2W ejedd
dZejeej edddZejedddZejedddZejedddZejedddZejedddZejedddZejedddZejedddZej eddd Z!ej"edd!d"Z#ej$edd#d$Z%ej&edd%d&Z'ej(edd'd(Z)ej*edd)d*Z+ej,edd+d,Z-e.j/d-k rej0edd.d/Z1ej2edd0d1Z3ej4edd2d3Z5ej6edd4d5Z7ej8edd6d7Z9d8d9 Z:dS );r'   r"   N)r   r   c             C   s
   || _ d S )N)r   )selfr   r    r    r!   __init__N   s    z_UnparseVisitor.__init__)r#   r   c             C   s
   t |j S )N)r   	__class__)r)   r#   r    r    r!   	_visit_opQ   s    z_UnparseVisitor._visit_opzvisit_{}c             C   s&   |j rd|j| |j f S |jS d S )Nz%s: %s)
annotationargr(   )r)   r#   r    r    r!   	visit_argV   s    z_UnparseVisitor.visit_arg)r.   defaultr   c             C   s>   |  |}|r:|jr(|d|  | 7 }n|d|  | 7 }|S )z&Unparse a single argument to a string.z = %sz=%s)r(   r-   )r)   r.   r0   namer    r    r!   _visit_arg_with_default\   s    
z'_UnparseVisitor._visit_arg_with_defaultc       
   	   C   s  t |j}t|j}d}t|dr8|t|j7 }||7 }x"tt||D ]}|dd  qHW t |j}x(tt|t|j	D ]}|dd  q|W g }t|drx,t
|jD ]\}}	|| |	||  qW |jr|d x0t
|jD ]"\}}	|| |	|||   qW |jr,|d| |j  |j	rF|jsF|d x.t
|j	D ] \}}	|| |	||  qRW |jr|d| |j  d|S )Nr   posonlyargsr   r   z**z, )listdefaultslenargshasattrr3   rangeinsertkw_defaults
kwonlyargs	enumerateappendr2   varargr(   kwargjoin)
r)   r#   r5   positionalsr3   _r;   r7   ir.   r    r    r!   visit_argumentsf   s8    






z_UnparseVisitor.visit_argumentsc             C   s   d|  |j|jf S )Nz%s.%s)r(   valueattr)r)   r#   r    r    r!   visit_Attribute   s    z_UnparseVisitor.visit_Attributec                sP   t |jtjr,dt j|j|j|jfS d fdd|j|j|jgD S )Nr"    c             3   s   | ]}  |V  qd S )N)r(   ).0e)r)   r    r!   	<genexpr>   s    z._UnparseVisitor.visit_BinOp.<locals>.<genexpr>)	r%   opr   PowrA   mapr(   leftright)r)   r#   r    )r)   r!   visit_BinOp   s    z_UnparseVisitor.visit_BinOpc                s*   d  |j }| fdd|jD S )Nz %s c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    z/_UnparseVisitor.visit_BoolOp.<locals>.<genexpr>)r(   rM   rA   values)r)   r#   rM   r    )r)   r!   visit_BoolOp   s    z_UnparseVisitor.visit_BoolOpc                sB    fdd|j D  fdd|jD  }d |jd|f S )Nc                s   g | ]}  |qS r    )r(   )rJ   rK   )r)   r    r!   
<listcomp>   s    z._UnparseVisitor.visit_Call.<locals>.<listcomp>c                s"   g | ]}d |j  |jf qS )z%s=%s)r.   r(   rF   )rJ   k)r)   r    r!   rU      s    z%s(%s)z, )r7   keywordsr(   funcrA   )r)   r#   r7   r    )r)   r!   
visit_Call   s    z_UnparseVisitor.visit_Callc             C   sX   |j tkrdS t|j tttfrJ| jr>tjdkr>t	
| j|S t|j S n
t|j S d S )Nz...)r   r   )rF   Ellipsisr%   intfloatcomplexr   sysversion_infor   Zget_source_segmentrepr)r)   r#   r    r    r!   visit_Constant   s    
z_UnparseVisitor.visit_Constantc                sN    fdd|j D } fdd|jD }dd t||D }dd| d S )Nc             3   s   | ]}  |V  qd S )N)r(   )rJ   rV   )r)   r    r!   rL      s    z-_UnparseVisitor.visit_Dict.<locals>.<genexpr>c             3   s   | ]}  |V  qd S )N)r(   )rJ   v)r)   r    r!   rL      s    c             s   s   | ]\}}|d  | V  qdS )z: Nr    )rJ   rV   rb   r    r    r!   rL      s    {z, })keysrS   ziprA   )r)   r#   re   rS   itemsr    )r)   r!   
visit_Dict   s    z_UnparseVisitor.visit_Dictc             C   s   |  |jS )N)r(   rF   )r)   r#   r    r    r!   visit_Index   s    z_UnparseVisitor.visit_Indexc             C   s   d|  |j S )Nzlambda %s: ...)r(   r7   )r)   r#   r    r    r!   visit_Lambda   s    z_UnparseVisitor.visit_Lambdac                s"   dd  fdd|jD  d S )N[z, c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    z-_UnparseVisitor.visit_List.<locals>.<genexpr>])rA   elts)r)   r#   r    )r)   r!   
visit_List   s    z_UnparseVisitor.visit_Listc             C   s   |j S )N)id)r)   r#   r    r    r!   
visit_Name   s    z_UnparseVisitor.visit_Namec                s"   dd  fdd|jD  d S )Nrc   z, c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    z,_UnparseVisitor.visit_Set.<locals>.<genexpr>rd   )rA   rm   )r)   r#   r    )r)   r!   	visit_Set   s    z_UnparseVisitor.visit_Setc                s   t jtddd}||jrLd fdd|jjD }d |j|f S t|jt j	r||jjrd fdd|jjjD }d |j|f S d |j |jf S d S )	N)rF   r   c             S   s,   t | tjo*t| jo*tdd | jD  S )Nc             s   s   | ]}t |tjV  qd S )N)r%   r   Starred)rJ   eltr    r    r!   rL      s    zK_UnparseVisitor.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)r%   r   Tupleboolrm   any)rF   r    r    r!   is_simple_tuple   s    
z8_UnparseVisitor.visit_Subscript.<locals>.is_simple_tuplez, c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    z2_UnparseVisitor.visit_Subscript.<locals>.<genexpr>z%s[%s]c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    )
r   ASTru   slicerA   rm   r(   rF   r%   Index)r)   r#   rw   rm   r    )r)   r!   visit_Subscript   s    
z_UnparseVisitor.visit_Subscriptc             C   sF   t |jtjr*d| |j| |jf S d| |j| |jf S )Nz%s %sz%s%s)r%   rM   r   Notr(   operand)r)   r#   r    r    r!   visit_UnaryOp   s    z_UnparseVisitor.visit_UnaryOpc                sZ   t |jdkrdS t |jdkr4d |jd  S dd fdd|jD  d	 S d S )
Nr   z()   z(%s,)(z, c             3   s   | ]}  |V  qd S )N)r(   )rJ   rK   )r)   r    r!   rL      s    z._UnparseVisitor.visit_Tuple.<locals>.<genexpr>))r6   rm   r(   rA   )r)   r#   r    )r)   r!   visit_Tuple   s
    z_UnparseVisitor.visit_Tuple)r   r   c             C   s
   t |jS )N)r`   s)r)   r#   r    r    r!   visit_Bytes   s    z_UnparseVisitor.visit_Bytesc             C   s   dS )Nz...r    )r)   r#   r    r    r!   visit_Ellipsis   s    z_UnparseVisitor.visit_Ellipsisc             C   s
   t |jS )N)r`   rF   )r)   r#   r    r    r!   visit_NameConstant   s    z"_UnparseVisitor.visit_NameConstantc             C   s
   t |jS )N)r`   n)r)   r#   r    r    r!   	visit_Num   s    z_UnparseVisitor.visit_Numc             C   s
   t |jS )N)r`   r   )r)   r#   r    r    r!   	visit_Str   s    z_UnparseVisitor.visit_Strc             C   s   t dt|j d S )NzUnable to parse %s object)NotImplementedErrortype__name__)r)   r#   r    r    r!   generic_visit   s    z_UnparseVisitor.generic_visit)r"   );r   
__module____qualname__r&   r*   r   rx   r,   r   Z_oplocalsformatr.   r/   r   r2   	argumentsrE   	AttributerH   BinOprR   BoolOprT   CallrY   Constantra   r   rh   rz   ri   Lambdarj   r   rn   Namerp   Setrq   	Subscriptr{   UnaryOpr~   rt   r   r^   r_   Bytesr   rZ   r   NameConstantr   Numr   Strr   r   r    r    r    r!   r'   M   s8   

&r'   )r   )r"   )r"   )r"   )(__doc__r^   typingr   r   r   r   r   r_   r   Z	typed_astr	   ImportErrorAddAndBitAndBitOrBitXorDivFloorDivInvertLShiftMatMultMultModr|   rN   OrRShiftSubUAddUSubr   rx   r&   __annotations__r   r$   NodeVisitorr'   r    r    r    r!   <module>   sD   

 
