B
    a                 @   sF  U d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZmZmZmZ ddlmZ ddlmZ ejd	krdd
lm Z  ndd
l!m Z  erddl"Z"ddddddddZ#e ee$e$f  e%d< eddded Z&edej'ej(Z)edej*ej+Z,edej-ej.Z/G dd dZ0dS )zkthis module contains utilities for rebuilding an _ast tree in
order to get a single Astroid representation
    N)TYPE_CHECKINGCallableDict	GeneratorListOptionalTupleTypeTypeVarUnioncastoverload)node_classesnodes)ParserModuleget_parser_moduleparse_function_type_comment)	PY37_PLUS	PY38_PLUS	PY39_PLUSContext)AstroidManager)NodeNG)      )Final	ArgumentsComprehensionExceptHandlerKeyword	MatchCase)	argumentsZcomprehensionZListCompForZ
GenExprForZexcepthandlerkeywordZ
match_caseREDIRECTT_Docz
ast.Modulezast.ClassDef)zast.FunctionDefzast.AsyncFunctionDef
T_FunctionT_ForT_Withc               @   s  e Zd ZdZdeee dddZee	eee
 f dddZed	 edd
dZde
e
eejdddZejdkredeejdddZedeejdddZedeejdddZedeejdddZedeejdddZedeejdddZedeejdd dZed!eejdd"dZed#eej dd$dZed%eej!dd&dZed'eej"dd(dZed)eej#dd*dZed+eej$dd,dZed-eej%dd.dZed/eej&dd0dZed1eej'dd2dZed3eej(dd4dZed5eej)dd6dZed7eej*dd8dZed9eej+dd:dZed;eej,dd<dZed=eej-dd>dZed?eej.dd@dZedAeej/ddBdZedCej0ej	ddDdZedEeej1ddFdZedGeej2ddHdZedIeej3ddJdZedKeej4ddLdZedMeej5ddNdZedOeej6ddPdZedQeej7ddRdZedSeej8ddTdZedUeej9ddVdZedWeej:ddXdZedYeej;ddZdZed[eej<dd\dZed]ej0edd^dZed_eej=dd`dZedaeej>ddbdZedceej?ddddZedeeej@ddfdZedgeeejAej.ejejBf ddhdZedieej.ddjdZedkeejCddldZedmeej.ddndZedoeej.ddpdZedqeej.ddrdZedseej.ddtdZedueejDddvdZedweejEddxdZedyeejFddzdZed{eejGdd|dZed}eejHdd~dZedej0ejIdddZedeej0dddZedeejJdddZedeeejKejLf dddZedeej	dddZedeejMdddZedeejNdddZedeejOdddZedeejPdddZedeejQdddZedeejRdddZedeejSdddZedeejTdddZedeejUdddZedeejVdddZedeejWdddZedeejXdddZedeejYdddZedeejZdddZedeej[dddZedee\j]dddZedeedddZededdddZed eee dddZnfedeejdddZedeejdddZedeejdddZedeejdddZedeejdddZedeejdddZedeejdddZed!eejdddZed#eej dddZed%eej!dddZed'eej"dddZed)eej#dddZed+eej$dddZed-eej%dddZed/eej&dddZed1eej'dddZed3eej(dddZed5eej)dddZed7eej*dddZed9eej+dddZed;eej,dddZed=eej-dddZed?eej.dddZedAeej/dddZedCej0ej	dddZedEeej1dddZedGeej2dddZedIeej3dddZedKeej4dddZedMeej5dddZedOeej6dddZedQeej7dddZedSeej8dddZedUeej9dddZedWeej:dddZedYeej;dddZed[eej<dddZed]ej0edddZed_eej=dddZedaeej>dddZedceej?dddZedeeej@dddZedgeeejAej.ejejBf dddZedieej.dddZedkeejCdddZedmeej.dddZedoeej.dddZedqeej.dddZedseej.dddZedueejDdddZedweejEdddZedyeejFdddZed{eejGdddZed}eejHdddZedej0ejIdddZedeej0dddZedeejJdddZedeeejKejLf dddZedeej	dddZedeejMdddZedeejNdddZedeejOdddZedeejPdddZedeejQdddZedeedddZededdddZed eee dddZeejejBf ddddZ^deejdddZ_deejdddZ`deejdddZaed eejejej1ejejOejf ee dddZbed eee	ee e?e f  dddZcdeejdddZddeejdd dZedeejdddZfdeejdddZgd!eejdddZhd#eej ddd	Ziedee
ejd
ddZjededdd
ddZjdeee
 eej d
ddZjd%eej!dddZkd'eej"dddZld)eej#dddZmd+eej$dddZnd-eej%dddZodd/eeej&dddZpd1eej'dddZqd3eej(ddd Zrd5eej)dd!d"Zsed# eeejt dd$d%Zud7eej*dd&d'Zvd9eej+ewe	eef ddf d(d)d*Zxd9eej+dd+d,Zyd;eej,dd-d.Zzd=eej-dd/d0Z{d?eej.dd1d2Z|dAeej/dd3d4Z}dCej0ej	dd5d6Z~eeej1 dEeej1d7d8d9Zeeej deejd7d:d9Zee ed; eed7d<d9ZdEeej1dd=d>ZdGeej2dd?d@Zeeej3 dIeej3d7dAdBZeeej deejd7dCdBZee ed eed7dDdBZdIeej3ddEdFZdKeej4ddGdHZdMeeej5ejejf ddIdJZdOeej6ddKdLZdQeej7ddMdNZdSeej8ddOdPZdUeej9ddQdRZdWeej:ddSdTZdYeej;ddUdVZd[eej<ddWdXZd]ej0eddYdZZd_eej=dd[d\Zdaeej>dd]d^Zdceej?dd_d`Zdeeej@ddadbZdgeeejAejejBf ddcddZdieej.ddedfZdkeejCddgdhZdseej.ddidjZedk eej.ddldmZeZdqeej.ddndoZdueejDddpdqZdweejEddrdsZdyeejFddtduZd{eejGddvdwZd}eejHddxdyZdej0ejIddzd{Zdeej0dd|d}ZdeejJdd~dZdeejKdddZdeeejKejLdf dddZdeejLdddZdeej	dddZdeejMdddZdeejNdddZeeejO deejOd7ddZeeej deejd7ddZee ed eed7ddZdeedddZdeedddZdeedddZejdkrdeejRdddZdeejSdddZdeejTdddZdeejUdddZdeejVdddZdeejWdddZdeejXdddZdeejYdddZdeejZdddZdeej[dddZdS (  TreeRebuilderz0Rebuilds the _ast tree to become an Astroid treeN)managerparser_modulec             C   sD   || _ g | _g | _g | _i | _|d kr0t | _n|| _| jj| _d S )N)	_manager_global_names_import_from_nodes_delayed_assattr_visit_methsr   _parser_modulemodule_module)selfr)   r*    r4   5/tmp/pip-unpacked-wheel-mm06h1t3/astroid/rebuilder.py__init__Z   s    
zTreeRebuilder.__init__)nodereturnc             C   s   yt rt|dr|j}||fS |jrt|jd | jjr|jd j}t|| jjspt	rt|| jj
rt|jtrt	rz|jn|j}|jdd  |_||fS W n tk
r   Y nX |d fS )N	docstringr      )r   hasattrr9   body
isinstancer2   ExprvalueStrr   ZConstantstrs
IndexError)r3   r7   docZfirst_valuer4   r4   r5   _get_dock   s     zTreeRebuilder._get_doc)zast.Attributezast.Listzast.Namezast.Subscriptzast.Starredz	ast.Tuplec             C   s   | j jt|jtjS )N)r0   Zcontext_classesgettypectxr   Load)r3   r7   r4   r4   r5   _get_context   s    zTreeRebuilder._get_contextz
ast.Module)r7   modnamemodpathpackager8   c                sF    |\}}tj||||g|dd   fdd|jD   S )zlvisit a Module node by returning a fresh instance of it

        Note: Method not called by 'visit'
        N)namerD   filepathrM   parentc                s   g | ]} | qS r4   )visit).0child)newnoder3   r4   r5   
<listcomp>   s    z.TreeRebuilder.visit_module.<locals>.<listcomp>)rE   r   Modulepostinitr<   )r3   r7   rK   rL   rM   rD   r4   )rU   r3   r5   visit_module   s    zTreeRebuilder.visit_module)r   
   zast.arg)r7   rQ   r8   c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zTreeRebuilder.visitzast.argumentsc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z
ast.Assertc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.AsyncFunctionDefc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.AsyncForc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z	ast.Awaitc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.AsyncWithc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z
ast.Assignc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.AnnAssignc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.AugAssignc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z	ast.BinOpc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z
ast.BoolOpc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z	ast.Breakc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Callc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.ClassDefc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Continuec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Comparec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.comprehensionc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    z
ast.Deletec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Dictc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.DictCompc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Exprc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.Ellipsisc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR      s    zast.ExceptHandlerc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.ExtSlicec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   	  s    zast.Forc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.ImportFromc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.FunctionDefc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.GeneratorExpc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.Attributec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z
ast.Globalc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   !  s    zast.Ifc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   %  s    z	ast.IfExpc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   )  s    z
ast.Importc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   -  s    zast.JoinedStrc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   1  s    zast.FormattedValuec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   5  s    zast.NamedExprc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   ;  s    z	ast.Indexc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   @  s    zast.keywordc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   D  s    z
ast.Lambdac             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   H  s    zast.Listc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   L  s    zast.ListCompc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   P  s    zast.Namec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   T  s    zast.NameConstantc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   [  s    zast.Nonlocalc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   _  s    zast.Strc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   d  s    z	ast.Bytesc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   i  s    zast.Numc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   n  s    zast.Constantc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   r  s    zast.Passc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   v  s    z	ast.Raisec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   z  s    z
ast.Returnc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   ~  s    zast.Setc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.SetCompc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z	ast.Slicec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.Subscriptc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.Starredc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.Tryc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z	ast.Tuplec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.UnaryOpc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z	ast.Whilec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.Withc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z	ast.Yieldc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.YieldFromc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    z	ast.Matchc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.match_casec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchValuec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchSingletonc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchSequencec             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchMappingc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchClassc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchStarc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchAsc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.MatchOrc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.patternc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    zast.ASTc             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s`   |d krd S |j }|| jkr(| j| }n.|j}dt||  }t| |}|| j|< |||S )Nvisit_)	__class__r/   __name__r#   rF   lowergetattr)r3   r7   rQ   clsvisit_methodcls_name
visit_namer4   r4   r5   rR     s    


c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   !  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   %  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   )  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   -  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   1  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   5  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   9  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   =  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   A  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   G  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   K  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   O  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   S  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   X  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   \  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   c  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   g  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   k  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   o  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   s  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   w  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   {  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR   
  s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s   d S )Nr4   )r3   r7   rQ   r4   r4   r5   rR     s    c             C   s`   |d krd S |j }|| jkr(| j| }n.|j}dt||  }t| |}|| j|< |||S )Nr[   )r\   r/   r]   r#   rF   r^   r_   )r3   r7   rQ   r`   ra   rb   rc   r4   r4   r5   rR     s    


c             C   s>   | j r*|j| j d kr*| |j| n|j|j| dS )zAsave assignement situation since node.parent is not available yetN)r,   rN   root	set_localrQ   )r3   r7   r4   r4   r5   _save_assignment#  s    zTreeRebuilder._save_assignmentc             C   s   |  |||jS )z7visit an arg node by returning a fresh AssName instance)visit_assignnamearg)r3   r7   rQ   r4   r4   r5   	visit_arg*  s    zTreeRebuilder.visit_argc                s  d}d}t |jr|jjnd|jr*|jjnd|  fdd|jD } fdd|jD }d}d}g }	|jr|jj}|jj }|jr|jj}|jj } fdd|j	D }
 fdd|j
D } fdd|jD } fdd|j	D }g }tr4 fd	d|jD }	 fd
d|jD } fdd|jD } fdd|j	D }g }tr fdd|jD } j|||
|	|||||||||d |r j|  |r̈ j|   S )z;visit an Arguments node by returning a fresh instance of itNc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   7  s    z1TreeRebuilder.visit_arguments.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   8  s    c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   B  s    c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   C  s    c                s   g | ]} |j qS r4   )rR   
annotation)rS   ri   )rU   r3   r4   r5   rV   D  s    c                s   g | ]} |j qS r4   )rR   rk   )rS   ri   )rU   r3   r4   r5   rV   F  s    c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   K  s    c                s   g | ]} |j qS r4   )rR   rk   )rS   ri   )rU   r3   r4   r5   rV   M  s    c                s   g | ]}j | d qS ))rQ   )check_type_comment)rS   rT   )rU   r3   r4   r5   rV   P  s    c                s   g | ]}j | d qS ))rQ   )rl   )rS   rT   )rU   r3   r4   r5   rV   S  s    c                s   g | ]}j | d qS ))rQ   )rl   )rS   rT   )rU   r3   r4   r5   rV   X  s   )argsdefaults
kwonlyargsposonlyargskw_defaultsannotationskwonlyargs_annotationsposonlyargs_annotationsvarargannotationkwargannotationtype_comment_argstype_comment_kwonlyargstype_comment_posonlyargs)r   r   varargri   kwargrm   rn   rR   rk   ro   rq   r   rp   rX   rQ   rf   )r3   r7   rQ   rz   r{   rm   rn   ru   rv   rp   ro   rq   rr   rs   rt   rw   rx   ry   r4   )rU   r3   r5   visit_arguments.  sd    
zTreeRebuilder.visit_argumentsc             C   sD   t |j|j|}d}|jr*| |j|}|| |j|| |S )z7visit a Assert node by returning a fresh instance of itN)r   Assertlineno
col_offsetmsgrR   rX   test)r3   r7   rQ   rU   r   r4   r4   r5   visit_assertr  s    zTreeRebuilder.visit_assert)z
ast.Assignzast.argzast.Forzast.AsyncForzast.Withzast.AsyncWithc             C   sd   t |dd }|sd S y| j|}W n tk
r8   d S X | j|jd |d}t|tjs^d S |j	S )Ntype_commentr   )rQ   )
r_   r0   parseSyntaxErrorrR   r<   r=   r   r>   r?   )r3   r7   rQ   r   type_comment_astZtype_objectr4   r4   r5   rl   {  s    z TreeRebuilder.check_type_comment)zast.FunctionDefzast.AsyncFunctionDefc                sp   t |dd }|sd S yt|}W n tk
r4   d S X d } fdd|jpNg D }|jrh|j }||fS )Nr   c                s   g | ]} | qS r4   )rR   )rS   elem)rQ   r3   r4   r5   rV     s    z=TreeRebuilder.check_function_type_comment.<locals>.<listcomp>)r_   r   r   argtypesreturnsrR   )r3   r7   rQ   r   r   r   r   r4   )rQ   r3   r5   check_function_type_comment  s    z)TreeRebuilder.check_function_type_commentc             C   s   |  tj||S )N)_visit_functiondefr   AsyncFunctionDef)r3   r7   rQ   r4   r4   r5   visit_asyncfunctiondef  s    z$TreeRebuilder.visit_asyncfunctiondefc             C   s   |  tj||S )N)
_visit_forr   AsyncFor)r3   r7   rQ   r4   r4   r5   visit_asyncfor  s    zTreeRebuilder.visit_asyncforc             C   s,   t |j|j|}|j| |j|d |S )N)r?   )r   Awaitr~   r   rX   rR   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_await  s    zTreeRebuilder.visit_awaitc             C   s   |  tj||S )N)_visit_withr   	AsyncWith)r3   r7   rQ   r4   r4   r5   visit_asyncwith  s    zTreeRebuilder.visit_asyncwithc                sP   t |j|j| j| d} j fdd|jD |j |d  S )z7visit a Assign node by returning a fresh instance of it)rQ   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z.TreeRebuilder.visit_assign.<locals>.<listcomp>)targetsr?   type_annotation)	r   Assignr~   r   rl   rX   r   rR   r?   )r3   r7   rQ   r   r4   )rU   r3   r5   visit_assign  s    zTreeRebuilder.visit_assignc             C   sH   t |j|j|}|j| |j|| |j||j| |j	|d |S )z;visit an AnnAssign node by returning a fresh instance of it)targetrk   simpler?   )
r   	AnnAssignr~   r   rX   rR   r   rk   r   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_annassign  s    zTreeRebuilder.visit_annassign)r7   rQ   	node_namer8   c             C   s   d S )Nr4   )r3   r7   rQ   r   r4   r4   r5   rh     s    zTreeRebuilder.visit_assignnamec             C   s   d S )Nr4   )r3   r7   rQ   r   r4   r4   r5   rh     s    c             C   s.   |dkrdS t ||j|j|}| | |S )z^visit a node and return a AssignName node

        Note: Method not called by 'visit'
        N)r   
AssignNamer~   r   rg   )r3   r7   rQ   r   rU   r4   r4   r5   rh     s    
c             C   sJ   t | jjt|j d |j|j|}|| 	|j
|| 	|j| |S )z:visit a AugAssign node by returning a fresh instance of it=)r   	AugAssignr0   bin_op_classesrG   opr~   r   rX   rR   r   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_augassign  s    zTreeRebuilder.visit_augassignc             C   sF   t | jjt|j |j|j|}|| 	|j
|| 	|j| |S )z6visit a BinOp node by returning a fresh instance of it)r   BinOpr0   r   rG   r   r~   r   rX   rR   leftright)r3   r7   rQ   rU   r4   r4   r5   visit_binop  s    zTreeRebuilder.visit_binopc                sB   t jjt|j |j|j|   fdd|j	D   S )z7visit a BoolOp node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z.TreeRebuilder.visit_boolop.<locals>.<listcomp>)
r   BoolOpr0   Zbool_op_classesrG   r   r~   r   rX   values)r3   r7   rQ   r4   )rU   r3   r5   visit_boolop  s    zTreeRebuilder.visit_boolopc             C   s   t |j|j|S )z6visit a Break node by returning a fresh instance of it)r   Breakr~   r   )r3   r7   rQ   r4   r4   r5   visit_break  s    zTreeRebuilder.visit_breakc                sT   t |j|j|  j|j  fdd|jD  fdd|jD d  S )z9visit a CallFunc node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   &  s    z,TreeRebuilder.visit_call.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   '  s    )funcrm   keywords)	r   Callr~   r   rX   rR   r   rm   r   )r3   r7   rQ   r4   )rU   r3   r5   
visit_call!  s    zTreeRebuilder.visit_callT)r7   rQ   newstyler8   c          
      s    |\}}t|j||j|j| d}x(|jD ]}|jdkr2| j	}P q2W 
| }  fdd|jD  fdd|jD ||| fdd|jD   S )z'visit a ClassDef node to become astroidN	metaclassc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   8  s    z0TreeRebuilder.visit_classdef.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   9  s    c                s"   g | ]}|j d kr| qS )r   )ri   rR   )rS   Zkwd)rU   r3   r4   r5   rV   >  s   )rE   r   ClassDefrN   r~   r   r   ri   rR   r?   visit_decoratorsrX   basesr<   )r3   r7   rQ   r   rD   r   r"   
decoratorsr4   )rU   r3   r5   visit_classdef+  s"    
zTreeRebuilder.visit_classdefc             C   s   t |j|j|S )z9visit a Continue node by returning a fresh instance of it)r   Continuer~   r   )r3   r7   rQ   r4   r4   r5   visit_continueE  s    zTreeRebuilder.visit_continuec                sF   t |j|j|  |j  fddt|j|j	D   S )z8visit a Compare node by returning a fresh instance of itc                s*   g | ]"\}}j j|j | fqS r4   )r0   Zcmp_op_classesr\   rR   )rS   r   expr)rU   r3   r4   r5   rV   O  s   z/TreeRebuilder.visit_compare.<locals>.<listcomp>)
r   Comparer~   r   rX   rR   r   zipopsZcomparators)r3   r7   rQ   r4   )rU   r3   r5   visit_compareI  s    zTreeRebuilder.visit_comparec                sJ   t |  |j |j  fdd|jD t|j  S )z>visit a Comprehension node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   `  s    z5TreeRebuilder.visit_comprehension.<locals>.<listcomp>)	r   r   rX   rR   r   iterZifsboolZis_async)r3   r7   rQ   r4   )rU   r3   r5   visit_comprehensionX  s    
z!TreeRebuilder.visit_comprehension)zast.ClassDefzast.FunctionDefzast.AsyncFunctionDefc                sR   |j s
dS tr|j d j}n|j}t||j|   fdd|j D   S )zpvisit a Decorators node by returning a fresh instance of it

        Note: Method not called by 'visit'
        Nr   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   x  s    z2TreeRebuilder.visit_decorators.<locals>.<listcomp>)decorator_listr   r~   r   
Decoratorsr   rX   )r3   r7   rQ   r~   r4   )rU   r3   r5   r   e  s    	zTreeRebuilder.visit_decoratorsc                s2   t |j|j|   fdd|jD   S )z7visit a Delete node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   ~  s    z.TreeRebuilder.visit_delete.<locals>.<listcomp>)r   Deleter~   r   rX   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_delete{  s    zTreeRebuilder.visit_delete)r7   rQ   rU   r8   c             c   sZ   xTt |j|jD ]B\}}| ||}|s<t|j|j|}n| ||}||fV  qW d S )N)r   keysr   rR   r   Z
DictUnpackr~   r   )r3   r7   rQ   rU   keyr?   Zrebuilt_valueZrebuilt_keyr4   r4   r5   _visit_dict_items  s    zTreeRebuilder._visit_dict_itemsc             C   s2   t |j|j|}t| |||}|| |S )z5visit a Dict node by returning a fresh instance of it)r   r   r~   r   listr   rX   )r3   r7   rQ   rU   itemsr4   r4   r5   
visit_dict  s    
zTreeRebuilder.visit_dictc                sJ   t |j|j|  |j |j  fdd|jD   S )z9visit a DictComp node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z0TreeRebuilder.visit_dictcomp.<locals>.<listcomp>)	r   DictCompr~   r   rX   rR   r   r?   
generators)r3   r7   rQ   r4   )rU   r3   r5   visit_dictcomp  s    zTreeRebuilder.visit_dictcompc             C   s*   t |j|j|}|| |j| |S )z5visit a Expr node by returning a fresh instance of it)r   r>   r~   r   rX   rR   r?   )r3   r7   rQ   rU   r4   r4   r5   
visit_expr  s    zTreeRebuilder.visit_exprc             C   s   t jt|j|j|dS )z=visit an Ellipsis node by returning a fresh instance of Const)r?   r~   r   rQ   )r   ConstEllipsisr~   r   )r3   r7   rQ   r4   r4   r5   visit_ellipsis  s
    zTreeRebuilder.visit_ellipsisc                sL   t |j|j|  |j | |j fdd|j	D   S )z?visit an ExceptHandler node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z5TreeRebuilder.visit_excepthandler.<locals>.<listcomp>)
r   r   r~   r   rX   rR   rG   rh   rN   r<   )r3   r7   rQ   r4   )rU   r3   r5   visit_excepthandler  s    z!TreeRebuilder.visit_excepthandlerc                s0   t jtj|d   fdd|jD   S )z=visit an ExtSlice node by returning a fresh instance of Tuple)rH   rQ   c                s   g | ]} | qS r4   )rR   )rS   Zdim)rU   r3   r4   r5   rV     s    z0TreeRebuilder.visit_extslice.<locals>.<listcomp>)r   r   r   rI   rX   Zdims)r3   r7   rQ   r4   )rU   r3   r5   visit_extslice  s    zTreeRebuilder.visit_extslice)r`   r7   rQ   r8   c             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    zTreeRebuilder._visit_forc             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    )zast.Forzast.AsyncForc                sn   ||j |j| j| d} j|j |j  fdd|jD  fdd|jD |d  S )z4visit a For node by returning a fresh instance of it)rQ   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z,TreeRebuilder._visit_for.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    )r   r   r<   orelser   )	r~   r   rl   rX   rR   r   r   r<   r   )r3   r`   r7   rQ   r   r4   )rU   r3   r5   r     s    c             C   s   |  tj||S )N)r   r   For)r3   r7   rQ   r4   r4   r5   	visit_for  s    zTreeRebuilder.visit_forc             C   sD   dd |j D }t|jpd||jp&d|j|j|}| j| |S )z<visit an ImportFrom node by returning a fresh instance of itc             S   s   g | ]}|j |jfqS r4   )rN   asname)rS   aliasr4   r4   r5   rV     s    z2TreeRebuilder.visit_importfrom.<locals>.<listcomp> N)	namesr   
ImportFromr1   levelr~   r   r-   append)r3   r7   rQ   r   rU   r4   r4   r5   visit_importfrom  s    zTreeRebuilder.visit_importfromc             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    z TreeRebuilder._visit_functiondefc             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    c                s   j i  |\}}|j}tr6|jr6|jd j}||j|||j| | }|j	rl
|j	 }nd}d }}	| }
|
r|
\}	} j
|j  fdd|jD |||	|d j    S )z+visit an FunctionDef node to become astroidr   Nc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   '  s    z4TreeRebuilder._visit_functiondef.<locals>.<listcomp>)rm   r<   r   r   type_comment_returnsrw   )r,   r   rE   r~   r   r   rN   r   r   r   rR   r   rX   rm   r<   pop)r3   r`   r7   rQ   rD   r~   r   r   rw   r   Ztype_comment_annotationr4   )rU   r3   r5   r     s.    

c             C   s   |  tj||S )N)r   r   FunctionDef)r3   r7   rQ   r4   r4   r5   visit_functiondef0  s    zTreeRebuilder.visit_functiondefc                s>   t |j|j|  |j  fdd|jD   S )z=visit a GeneratorExp node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   <  s    z4TreeRebuilder.visit_generatorexp.<locals>.<listcomp>)r   GeneratorExpr~   r   rX   rR   eltr   )r3   r7   rQ   r4   )rU   r3   r5   visit_generatorexp5  s
    z TreeRebuilder.visit_generatorexpc             C   s   |  |}|tjkr,t|j|j|j|}nP|tjkrft	|j|j|j|}t
|tjs|| j| nt|j|j|j|}|| |j| |S )z;visit an Attribute node by returning a fresh instance of it)rJ   r   Delr   DelAttrattrr~   r   Store
AssignAttrr=   r   r.   r   	AttributerX   rR   r?   )r3   r7   rQ   contextrU   r4   r4   r5   visit_attribute@  s    


zTreeRebuilder.visit_attributec             C   sH   t |j|j|j|}| jrDx&|jD ]}| jd |g | q$W |S )z%visit a Global node to become astroidrd   )r   Globalr   r~   r   r,   
setdefaultr   )r3   r7   rQ   rU   rN   r4   r4   r5   visit_globalT  s    zTreeRebuilder.visit_globalc                sR   t |j|j|  |j  fdd|jD  fdd|jD   S )z4visit an If node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   f  s    z*TreeRebuilder.visit_if.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   g  s    )	r   Ifr~   r   rX   rR   r   r<   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_ifa  s    zTreeRebuilder.visit_ifc             C   sB   t |j|j|}|| |j|| |j|| |j| |S )z6visit a IfExp node by returning a fresh instance of it)	r   IfExpr~   r   rX   rR   r   r<   r   )r3   r7   rQ   rU   r4   r4   r5   visit_ifexpk  s    zTreeRebuilder.visit_ifexpc             C   sZ   dd |j D }t||j|j|}x0|j D ]&\}}|p:|}||dd | q,W |S )z7visit a Import node by returning a fresh instance of itc             S   s   g | ]}|j |jfqS r4   )rN   r   )rS   r   r4   r4   r5   rV   w  s    z.TreeRebuilder.visit_import.<locals>.<listcomp>.r   )r   r   Importr~   r   rf   split)r3   r7   rQ   r   rU   rN   r   r4   r4   r5   visit_importu  s    zTreeRebuilder.visit_importc                s2   t |j|j|   fdd|jD   S )Nc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z1TreeRebuilder.visit_joinedstr.<locals>.<listcomp>)r   	JoinedStrr~   r   rX   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_joinedstr  s    zTreeRebuilder.visit_joinedstrc             C   s:   t |j|j|}|| |j||j| |j| |S )N)	r   FormattedValuer~   r   rX   rR   r?   
conversionformat_spec)r3   r7   rQ   rU   r4   r4   r5   visit_formattedvalue  s    z"TreeRebuilder.visit_formattedvaluec             C   s6   t |j|j|}|| |j|| |j| |S )N)r   	NamedExprr~   r   rX   rR   r   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_namedexpr  s    zTreeRebuilder.visit_namedexprc             C   s   |  |j|S )z:visit a Index node by returning a fresh instance of NodeNG)rR   r?   )r3   r7   rQ   r4   r4   r5   visit_index  s    zTreeRebuilder.visit_indexc             C   sD   t rt|j|j|j|}ntj|j|d}|| |j| |S )z8visit a Keyword node by returning a fresh instance of it)rQ   )	r   r   r   ri   r~   r   rX   rR   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_keyword  s
    zTreeRebuilder.visit_keywordc             C   s6   t |j|j|}|| |j|| |j| |S )z7visit a Lambda node by returning a fresh instance of it)r   Lambdar~   r   rX   rR   rm   r<   )r3   r7   rQ   rU   r4   r4   r5   visit_lambda  s     zTreeRebuilder.visit_lambdac                s@    |}tj||j|j|d   fdd|jD   S )z5visit a List node by returning a fresh instance of it)rH   r~   r   rQ   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z,TreeRebuilder.visit_list.<locals>.<listcomp>)rJ   r   r   r~   r   rX   elts)r3   r7   rQ   r   r4   )rU   r3   r5   
visit_list  s
    
zTreeRebuilder.visit_listc                s>   t |j|j|  |j  fdd|jD   S )z9visit a ListComp node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z0TreeRebuilder.visit_listcomp.<locals>.<listcomp>)r   ListCompr~   r   rX   rR   r   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_listcomp  s
    zTreeRebuilder.visit_listcompc             C   s   |  |}|tjkr,t|j|j|j|}n8|tjkrNt	|j|j|j|}nt
|j|j|j|}|tjtjfkrtttj	tjf |}| | |S )z5visit a Name node by returning a fresh instance of it)rJ   r   r   r   DelNameidr~   r   r   r   Namer   r   rg   )r3   r7   rQ   r   rU   r4   r4   r5   rc     s    



zTreeRebuilder.visit_namec             C   s   t |j|j|j|S )N)r   r   r?   r~   r   )r3   r7   rQ   r4   r4   r5   visit_nameconstant  s
    z TreeRebuilder.visit_nameconstantc             C   s   t |j|j|j|S )z5visit a Nonlocal node and return a new instance of it)r   Nonlocalr   r~   r   )r3   r7   rQ   r4   r4   r5   visit_nonlocal  s
    zTreeRebuilder.visit_nonlocalc             C   s   t |j|j|j||jS )z<visit a Constant node by returning a fresh instance of Const)r   r   r?   r~   r   kind)r3   r7   rQ   r4   r4   r5   visit_constant  s    zTreeRebuilder.visit_constant)zast.Strz	ast.Bytesc             C   s   t |j|j|j|S )z@visit a String/Bytes node by returning a fresh instance of Const)r   r   rB   r~   r   )r3   r7   rQ   r4   r4   r5   	visit_str  s
    zTreeRebuilder.visit_strc             C   s   t |j|j|j|S )z7visit a Num node by returning a fresh instance of Const)r   r   nr~   r   )r3   r7   rQ   r4   r4   r5   	visit_num  s
    zTreeRebuilder.visit_numc             C   s   t |j|j|S )z5visit a Pass node by returning a fresh instance of it)r   Passr~   r   )r3   r7   rQ   r4   r4   r5   
visit_pass  s    zTreeRebuilder.visit_passc             C   s8   t |j|j|}|j| |j|| |j|d |S )z6visit a Raise node by returning a fresh instance of it)exccause)r   Raiser~   r   rX   rR   r  r  )r3   r7   rQ   rU   r4   r4   r5   visit_raise  s
    zTreeRebuilder.visit_raisec             C   s4   t |j|j|}|jdk	r0|| |j| |S )z7visit a Return node by returning a fresh instance of itN)r   Returnr~   r   r?   rX   rR   )r3   r7   rQ   rU   r4   r4   r5   visit_return  s    
zTreeRebuilder.visit_returnc                s2   t |j|j|   fdd|jD   S )z4visit a Set node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   #  s    z+TreeRebuilder.visit_set.<locals>.<listcomp>)r   Setr~   r   rX   r  )r3   r7   rQ   r4   )rU   r3   r5   	visit_set   s    zTreeRebuilder.visit_setc                s>   t |j|j|  |j  fdd|jD   S )z8visit a SetComp node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   +  s    z/TreeRebuilder.visit_setcomp.<locals>.<listcomp>)r   SetCompr~   r   rX   rR   r   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_setcomp&  s
    zTreeRebuilder.visit_setcompc             C   s>   t j|d}|j| |j|| |j|| |j|d |S )z6visit a Slice node by returning a fresh instance of it)rQ   )r^   upperstep)r   SlicerX   rR   r^   r"  r#  )r3   r7   rQ   rU   r4   r4   r5   visit_slice/  s    zTreeRebuilder.visit_slicec             C   sD   |  |}tj||j|j|d}|| |j|| |j| |S )z:visit a Subscript node by returning a fresh instance of it)rH   r~   r   rQ   )	rJ   r   	Subscriptr~   r   rX   rR   r?   slice)r3   r7   rQ   r   rU   r4   r4   r5   visit_subscript9  s    
zTreeRebuilder.visit_subscriptc             C   s8   |  |}tj||j|j|d}|| |j| |S )z4visit a Starred node and return a new instance of it)rH   r~   r   rQ   )rJ   r   Starredr~   r   rX   rR   r?   )r3   r7   rQ   r   rU   r4   r4   r5   visit_starredD  s
    
zTreeRebuilder.visit_starredc                sZ   t |j|j|   fdd|jD  fdd|jD  fdd|jD   S )z:visit a TryExcept node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   Q  s    z1TreeRebuilder.visit_tryexcept.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   R  s    c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   S  s    )r   	TryExceptr~   r   rX   r<   handlersr   )r3   r7   rQ   r4   )rU   r3   r5   visit_tryexceptM  s    zTreeRebuilder.visit_tryexceptc                s|   |j rft|j|j| |jr.| g}n fdd|jD } | fdd|j D   S |jrx||S d S )Nc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   b  s    z+TreeRebuilder.visit_try.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   r  )rU   r3   r4   r5   rV   c  s    )		finalbodyr   
TryFinallyr~   r   r,  r-  r<   rX   )r3   r7   rQ   r<   r4   )rU   r3   r5   	visit_tryW  s    zTreeRebuilder.visit_tryc                sF   t |j|j|   fdd|jD  fdd|jD   S )z;visit a TryFinally node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   m  s    z2TreeRebuilder.visit_tryfinally.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   r  )rU   r3   r4   r5   rV   n  s    )r   r/  r~   r   rX   r<   r.  )r3   r7   rQ   r4   )rU   r3   r5   visit_tryfinallyi  s
    zTreeRebuilder.visit_tryfinallyc                s@    |}tj||j|j|d   fdd|jD   S )z6visit a Tuple node by returning a fresh instance of it)rH   r~   r   rQ   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV   x  s    z-TreeRebuilder.visit_tuple.<locals>.<listcomp>)rJ   r   r   r~   r   rX   r  )r3   r7   rQ   r   r4   )rU   r3   r5   visit_tupler  s
    
zTreeRebuilder.visit_tuplec             C   s8   t | jj|jj |j|j|}|| 	|j
| |S )z8visit a UnaryOp node by returning a fresh instance of it)r   UnaryOpr0   Zunary_op_classesr   r\   r~   r   rX   rR   Zoperand)r3   r7   rQ   rU   r4   r4   r5   visit_unaryop{  s    zTreeRebuilder.visit_unaryopc                sR   t |j|j|  |j  fdd|jD  fdd|jD   S )z6visit a While node by returning a fresh instance of itc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z-TreeRebuilder.visit_while.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    )	r   Whiler~   r   rX   rR   r   r<   r   )r3   r7   rQ   r4   )rU   r3   r5   visit_while  s    zTreeRebuilder.visit_whilec             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    zTreeRebuilder._visit_withc             C   s   d S )Nr4   )r3   r`   r7   rQ   r4   r4   r5   r     s    )zast.Withzast.AsyncWithc                sv   ||j |j| dtttt f d fddj| d} jfdd|jD  fdd|jD |d	  S )
Nzast.withitem)rT   r8   c                s$    | j } | j }||fS )N)rR   Zcontext_exprZoptional_vars)rT   r   var)rU   r3   r4   r5   visit_child  s    z.TreeRebuilder._visit_with.<locals>.visit_child)rQ   c                s   g | ]} |qS r4   r4   )rS   rT   )r8  r4   r5   rV     s    z-TreeRebuilder._visit_with.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    )r   r<   r   )	r~   r   r   r   r   rl   rX   r   r<   )r3   r`   r7   rQ   r   r4   )rU   r3   r8  r5   r     s    "c             C   s   |  tj||S )N)r   r   With)r3   r7   rQ   r4   r4   r5   
visit_with  s    zTreeRebuilder.visit_withc             C   s4   t |j|j|}|jdk	r0|| |j| |S )z6visit a Yield node by returning a fresh instance of itN)r   Yieldr~   r   r?   rX   rR   )r3   r7   rQ   rU   r4   r4   r5   visit_yield  s    
zTreeRebuilder.visit_yieldc             C   s4   t |j|j|}|jd k	r0|| |j| |S )N)r   	YieldFromr~   r   r?   rX   rR   )r3   r7   rQ   rU   r4   r4   r5   visit_yieldfrom  s    
zTreeRebuilder.visit_yieldfromc                s@   t |j|j|  j|j  fdd|jD d  S )Nc                s   g | ]} | qS r4   )rR   )rS   Zcase)rU   r3   r4   r5   rV     s    z-TreeRebuilder.visit_match.<locals>.<listcomp>)subjectcases)r   Matchr~   r   rX   rR   r?  r@  )r3   r7   rQ   r4   )rU   r3   r5   visit_match  s
    zTreeRebuilder.visit_matchc                sF   t j|d  j|j |j  fdd|jD d  S )N)rQ   c                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z1TreeRebuilder.visit_matchcase.<locals>.<listcomp>)patternguardr<   )r   r    rX   rR   rC  rD  r<   )r3   r7   rQ   r4   )rU   r3   r5   visit_matchcase  s    zTreeRebuilder.visit_matchcasec             C   s,   t |j|j|}|j| |j|d |S )N)r?   )r   
MatchValuer~   r   rX   rR   r?   )r3   r7   rQ   rU   r4   r4   r5   visit_matchvalue  s    zTreeRebuilder.visit_matchvaluec             C   s   t j|j|j|j|dS )N)r?   r~   r   rQ   )r   MatchSingletonr?   r~   r   )r3   r7   rQ   r4   r4   r5   visit_matchsingleton  s
    z"TreeRebuilder.visit_matchsingletonc                s4   t |j|j|  j fdd|jD d  S )Nc                s   g | ]} | qS r4   )rR   )rS   rC  )rU   r3   r4   r5   rV     s    z5TreeRebuilder.visit_matchsequence.<locals>.<listcomp>)patterns)r   MatchSequencer~   r   rX   rJ  )r3   r7   rQ   r4   )rU   r3   r5   visit_matchsequence  s    z!TreeRebuilder.visit_matchsequencec                sV   t |j|j|  j fdd|jD  fdd|jD | |jd  S )Nc                s   g | ]} | qS r4   )rR   )rS   rT   )rU   r3   r4   r5   rV     s    z4TreeRebuilder.visit_matchmapping.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rC  )rU   r3   r4   r5   rV     s    )r   rJ  rest)	r   MatchMappingr~   r   rX   r   rJ  rh   rM  )r3   r7   rQ   r4   )rU   r3   r5   visit_matchmapping  s    z TreeRebuilder.visit_matchmappingc                sX   t |j|j|  j|j  fdd|jD |j fdd|j	D d  S )Nc                s   g | ]} | qS r4   )rR   )rS   rC  )rU   r3   r4   r5   rV     s    z2TreeRebuilder.visit_matchclass.<locals>.<listcomp>c                s   g | ]} | qS r4   )rR   )rS   rC  )rU   r3   r4   r5   rV     s    )r`   rJ  	kwd_attrskwd_patterns)
r   
MatchClassr~   r   rX   rR   r`   rJ  rP  rQ  )r3   r7   rQ   r4   )rU   r3   r5   visit_matchclass  s    zTreeRebuilder.visit_matchclassc             C   s.   t |j|j|}|j| |||jd |S )N)rN   )r   	MatchStarr~   r   rX   rh   rN   )r3   r7   rQ   rU   r4   r4   r5   visit_matchstar  s    zTreeRebuilder.visit_matchstarc             C   s:   t |j|j|}|j| |j|| |||jd |S )N)rC  rN   )	r   MatchAsr~   r   rX   rR   rC  rh   rN   )r3   r7   rQ   rU   r4   r4   r5   visit_matchas  s
    zTreeRebuilder.visit_matchasc                s4   t |j|j|  j fdd|jD d  S )Nc                s   g | ]} | qS r4   )rR   )rS   rC  )rU   r3   r4   r5   rV   !  s    z/TreeRebuilder.visit_matchor.<locals>.<listcomp>)rJ  )r   MatchOrr~   r   rX   rJ  )r3   r7   rQ   r4   )rU   r3   r5   visit_matchor  s    zTreeRebuilder.visit_matchor)N)T)r]   
__module____qualname____doc__r   r   r   r6   r$   r   rA   rE   r   r   rJ   r   r   rW   rY   sysversion_infor   r   r   rR   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   r   r   r  r   r  r   r	  r  r  r  r  r  r  r  r   r$  r)  r+  r/  r3  r5  r9  r;  r=  rA  r    rF  rH  rK  rN  rR  rT  rV  rX  r   Patternrg   rj   r|   r   rl   r   r   r   r   r   r   r   rh   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   r   r   r   r   r   r  r  r  r  r  r
  rc   r  r  r  r  Zvisit_bytesr  r  r  r  r  r!  r%  r(  r*  r-  r0  r1  r2  r4  r6  r   r'   r:  r<  r>  rB  rE  rG  rI  rL  rO  rS  rU  rW  rY  r4   r4   r4   r5   r(   W   s  $$D"

&

(
"

			
"		

	
	
	 		
	
	
r(   )1r\  r]  typingr   r   r   r   r   r   r   r	   r
   r   r   r   Zastroidr   r   Zastroid._astr   r   r   Zastroid.constr   r   r   r   Zastroid.managerr   Zastroid.node_classesr   r^  r   typing_extensionsastr#   rA   __annotations__r$   r   r   r%   r   r   r&   r9  r   r'   r(   r4   r4   r4   r5   <module>   s8   8

