B
    .Kc               &   @   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    0lib/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_defaultsZ
kwonlyargs	enumerateappendr2   Zvarargr(   Z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   Powr>   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(   )rG   rH   )r)   r    r!   rI      s    z/_UnparseVisitor.visit_BoolOp.<locals>.<genexpr>)r(   rJ   r>   values)r)   r#   rJ   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(   )rG   rH   )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(   rC   )rG   k)r)   r    r!   rR      s    z%s(%s)z, )r7   keywordsr(   funcr>   )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   )rC   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(   )rG   rS   )r)   r    r!   rI      s    z-_UnparseVisitor.visit_Dict.<locals>.<genexpr>c             3   s   | ]}  |V  qd S )N)r(   )rG   v)r)   r    r!   rI      s    c             s   s   | ]\}}|d  | V  qdS )z: Nr    )rG   rS   r_   r    r    r!   rI      s    {z, })keysrP   zipr>   )r)   r#   rb   rP   itemsr    )r)   r!   
visit_Dict   s    z_UnparseVisitor.visit_Dictc             C   s   |  |jS )N)r(   rC   )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(   )rG   rH   )r)   r    r!   rI      s    z-_UnparseVisitor.visit_List.<locals>.<genexpr>])r>   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 )Nr`   z, c             3   s   | ]}  |V  qd S )N)r(   )rG   rH   )r)   r    r!   rI      s    z,_UnparseVisitor.visit_Set.<locals>.<genexpr>ra   )r>   rj   )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)rC   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   ZStarred)rG   Zeltr    r    r!   rI      s    zK_UnparseVisitor.visit_Subscript.<locals>.is_simple_tuple.<locals>.<genexpr>)r%   r   Tupleboolrj   any)rC   r    r    r!   is_simple_tuple   s    
z8_UnparseVisitor.visit_Subscript.<locals>.is_simple_tuplez, c             3   s   | ]}  |V  qd S )N)r(   )rG   rH   )r)   r    r!   rI      s    z2_UnparseVisitor.visit_Subscript.<locals>.<genexpr>z%s[%s]c             3   s   | ]}  |V  qd S )N)r(   )rG   rH   )r)   r    r!   rI      s    )
r   ASTrp   slicer>   rj   r(   rC   r%   Index)r)   r#   rr   rj   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%   rJ   r   Notr(   Z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(   )rG   rH   )r)   r    r!   rI      s    z._UnparseVisitor.visit_Tuple.<locals>.<genexpr>))r6   rj   r(   r>   )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]   rC   )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   rs   r,   r   Z_oplocalsformatr.   r/   r   r2   Z	argumentsrB   Z	AttributerE   ZBinOprO   ZBoolOprQ   ZCallrV   ZConstantr^   r   re   ru   rf   ZLambdarg   r   rk   Namerm   Setrn   Z	Subscriptrv   ZUnaryOprx   ro   r|   r[   r\   ZBytesr~   rW   r   ZNameConstantr   ZNumr   Z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	   ImportErrorZAddZAndZBitAndZBitOrZBitXorZDivZFloorDivZInvertZLShiftZMatMultZMultZModrw   rK   ZOrZRShiftZSubZUAddZUSubr   rs   r&   __annotations__r   r$   ZNodeVisitorr'   r    r    r    r!   <module>   sD   

 
