o
    ýÑÐb:ž  ã                   @   sÖ   d Z ddlZddlZddlmZmZmZ ddlmZ ddddœZdd	d	d	d
ddœZ	ej
dkZej
dkZej
dkZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd!dd„ZG dd„ dƒZG dd „ d eƒZej
dkrieZdS dS )"zjthis module contains utilities for rebuilding a _ast tree in
order to get a single Astroid representation
é    N)Ú_parseÚ_get_parser_moduleÚparse_function_type_comment)ÚnodesTF)ÚNoneÚTrueÚFalseÚ	ArgumentsÚComprehensionÚExceptHandlerÚKeyword)Ú	argumentsÚcomprehensionZListCompForZ
GenExprForÚexcepthandlerÚkeyword)é   r   )r   é   )r   é   c                 C   sd   | j d| jd| jd| jd| jd| jd| jd| jd| jd	| j	d
| j
d| jdi}tjdkr0d|| j< |S )Nú+ú&ú|ú^ú/z//ú%Ú*z**ú-z<<z>>)r   é   ú@)ÚAddÚBitAndÚBitOrÚBitXorÚDivÚFloorDivÚModÚMultÚPowÚSubÚLShiftÚRShiftÚsysÚversion_infoÚMatMult)ÚmoduleZbinary_operators© r.   úP/var/www/secure340b-portal/env/lib/python3.10/site-packages/astroid/rebuilder.pyÚ_binary_operators_from_module-   s    ô

r0   c                 C   s   | j d| jdiS )NÚandÚor)ÚAndÚOr©r-   r.   r.   r/   Ú_bool_operators_from_moduleA   ó   r6   c                 C   s   | j d| jd| jd| jdiS )Nr   r   Únotú~)ÚUAddÚUSubÚNotÚInvertr5   r.   r.   r/   Ú_unary_operators_from_moduleE   s   r>   c                 C   s@   | j d| jd| jd| jd| jd| jd| jd| jd| jd	| j	d
i
S )Nz==ú>z>=ÚinÚiszis notú<z<=z!=znot in)
ÚEqÚGtÚGtEÚInÚIsÚIsNotÚLtÚLtEÚNotEqÚNotInr5   r.   r.   r/   Ú_compare_operators_from_moduleI   s   örM   c                 C   s$   | j tj | jtj| jtj| jtjiS ©N)ÚLoadÚastroidÚStoreÚDelÚParamr5   r.   r.   r/   Ú_contexts_from_moduleX   s
   ürT   Úvisitc                 K   s,   t | |dƒ}|rt ||ƒ||fi |¤ŽS dS )z_If the given node has an attribute, visits the attribute, and
    otherwise returns None.

    N)Úgetattr)ÚnodeÚattrÚvisitorÚparentrU   ÚkwsÚvaluer.   r.   r/   Ú_visit_or_nonea   s   r]   c                   @   sJ  e Zd ZdZddefdd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	ddd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zdd)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkdl„ Z8dmdn„ Z9e9Z:dodp„ Z;dqdr„ Z<dsdt„ Z=dudv„ Z>dwdx„ Z?dydz„ Z@d{d|„ ZAd}d~„ ZBdd€„ ZCdd‚„ ZDdƒd„„ ZEd…d†„ ZFd‡dˆ„ ZGd‰dŠ„ ZHd‹dŒ„ ZIddŽ„ ZJdS )‘ÚTreeRebuilderz0Rebuilds the _ast tree to become an Astroid treeFÚparse_python_twoc                 C   sj   || _ g | _g | _g | _i | _t|d| _t| jƒ| _t	| jƒ| _
t| jƒ| _t| jƒ| _t| jƒ| _d S )N)r_   )Ú_managerÚ_global_namesÚ_import_from_nodesÚ_delayed_assattrÚ_visit_methsr   Ú_parser_moduler>   Ú_unary_op_classesrM   Ú_cmp_op_classesr6   Ú_bool_op_classesr0   Ú_bin_op_classesrT   Ú_context_classes)ÚselfÚmanagerr_   r.   r.   r/   Ú__init__p   s   zTreeRebuilder.__init__c                 C   s®   zJt rt|dƒr|j}||fW S |jr<t|jd | jjƒrAt|jd j| jjƒrF|jd jj	}|jdd … |_||fW S W |d fS W |d fS W |d fS  t
yV   Y |d fS w )NÚ	docstringr   é   )ÚPY37Úhasattrrn   ÚbodyÚ
isinstancere   ÚExprr\   ÚStrÚsÚ
IndexError)rk   rW   Údocr.   r.   r/   Ú_get_doc   s.   
ÿþý
ù
ö
ö
þþzTreeRebuilder._get_docc                 C   s   | j  t|jƒtj¡S rN   )rj   ÚgetÚtypeÚctxrP   rO   )rk   rW   r.   r.   r/   Ú_get_context   s   zTreeRebuilder._get_contextc                    sF   ˆ  |¡\}}tj||||g|dd‰ ˆ  ‡ ‡fdd„|jD ƒ¡ ˆ S )z7visit a Module node by returning a fresh instance of itN)Únamerx   ÚfileÚpathÚpackagerZ   c                    ó   g | ]}ˆ  |ˆ ¡‘qS r.   ©rU   ©Ú.0Úchild©Únewnoderk   r.   r/   Ú
<listcomp>ž   ó    z.TreeRebuilder.visit_module.<locals>.<listcomp>)ry   r   ÚModuleÚpostinitrr   )rk   rW   ÚmodnameÚmodpathr   rx   r.   r‡   r/   Úvisit_module“   s   úzTreeRebuilder.visit_modulec                 C   sT   |j }|| jv r| j| }n|j}dt ||¡ ¡  }t| |ƒ}|| j|< |||ƒS )NÚvisit_)Ú	__class__rd   Ú__name__ÚREDIRECTrz   ÚlowerrV   )rk   rW   rZ   ÚclsZvisit_methodÚcls_nameÚ
visit_namer.   r.   r/   rU   ¡   s   



zTreeRebuilder.visitNc                 C   s@   | j r|j| j d v r| ¡  |j|¡ dS |j |j|¡ dS )zAsave assignement situation since node.parent is not available yetéÿÿÿÿN)ra   r~   ÚrootÚ	set_localrZ   )rk   rW   r~   r.   r.   r/   Ú_save_assignment¬   s   zTreeRebuilder._save_assignmentc              
      st  |j |j}}trt |r|jnd|r|jnd|¡‰ nt |||¡‰ ‡ ‡fdd„|jD ƒ}‡ ‡fdd„|jD ƒ}d}d}|rOtrO|j jrLˆ 	|j jˆ ¡}|j}|rbtrb|jjr_ˆ 	|jjˆ ¡}|j}t
r‘‡ ‡fdd„|jD ƒ}	‡ ‡fdd„|jD ƒ}
‡ ‡fdd„|jD ƒ}‡ ‡fdd„|jD ƒ}ng }	g }
g }g }ˆ j|||	|
||||d	 |r¯ˆ j |ˆ ¡ |r¸ˆ j |ˆ ¡ ˆ S )
z;visit an Arguments node by returning a fresh instance of itNc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ¼   rŠ   z1TreeRebuilder.visit_arguments.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ½   rŠ   c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Í   rŠ   c                    s    g | ]}|rˆ  |ˆ ¡nd ‘qS rN   rƒ   r„   r‡   r.   r/   r‰   Î   s    ÿÿc                    ó$   g | ]}|j rˆ |j ˆ ¡nd ‘qS rN   ©Ú
annotationrU   ©r…   Úargr‡   r.   r/   r‰   Ò   ó    ÿÿc                    rœ   rN   r   rŸ   r‡   r.   r/   r‰   Ö   r¡   )ÚargsÚdefaultsÚ
kwonlyargsÚkw_defaultsÚannotationsÚkwonlyargs_annotationsÚvarargannotationÚkwargannotation)ÚvarargÚkwargÚPY34r   r	   r    r¢   r£   rž   rU   ÚPY3r¤   r¥   rŒ   rZ   rš   )rk   rW   rZ   rª   r«   r¢   r£   r¨   r©   r¤   r¥   r¦   r§   r.   r‡   r/   Úvisit_arguments³   sd   ÿþþþøzTreeRebuilder.visit_argumentsc                 C   sF   t  |j|j|¡}|jr|  |j|¡}nd}| |  |j|¡|¡ |S )z7visit a Assert node by returning a fresh instance of itN)r   ÚAssertÚlinenoÚ
col_offsetÚmsgrU   rŒ   Útest)rk   rW   rZ   rˆ   r²   r.   r.   r/   Úvisit_assertñ   s   zTreeRebuilder.visit_assertc                 C   s^   t |dd ƒ}|s
d S zt|ƒ}W n
 ty   Y d S w |  |jd |¡}t|tjƒs,d S |jS )NÚtype_commentr   )	rV   r   ÚSyntaxErrorrU   rr   rs   r   rt   r\   )rk   rW   rµ   Útype_comment_astZtype_objectr.   r.   r/   Úcheck_type_commentû   s   þz TreeRebuilder.check_type_commentc                    sp   t ˆ dd ƒ}|s
d S zt|ƒ}W n
 ty   Y d S w d }‡ ‡fdd„|jp'g D ƒ}|jr4ˆ |jˆ ¡}||fS )Nrµ   c                    r‚   r.   rƒ   )r…   Úelem©rW   rk   r.   r/   r‰     s    ÿz=TreeRebuilder.check_function_type_comment.<locals>.<listcomp>)rV   r   r¶   ÚargtypesÚreturnsrU   )rk   rW   rµ   r·   r¼   r»   r.   rº   r/   Úcheck_function_type_comment  s   þÿz)TreeRebuilder.check_function_type_commentc                    sL   ˆ  |¡}t |j|j|¡‰ ˆ j‡ ‡fdd„|jD ƒˆ |jˆ ¡|d ˆ S )z7visit a Assign node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   %  rŠ   z.TreeRebuilder.visit_assign.<locals>.<listcomp>)Útargetsr\   Útype_annotation)	r¸   r   ÚAssignr°   r±   rŒ   r¾   rU   r\   )rk   rW   rZ   r¿   r.   r‡   r/   Úvisit_assign   s   
ýzTreeRebuilder.visit_assignc                 C   s.   t  |t|ddƒt|ddƒ|¡}|  |¡ |S )z)visit a node and return a AssignName noder°   Nr±   )r   Ú
AssignNamerV   r›   )rk   rW   rZ   Z	node_namerˆ   r.   r.   r/   Úvisit_assignname+  s   

ü
zTreeRebuilder.visit_assignnamec                 C   sH   t  | jt|jƒ d |j|j|¡}| |  |j	|¡|  |j
|¡¡ |S )z:visit a AugAssign node by returning a fresh instance of itú=)r   Ú	AugAssignri   r{   Úopr°   r±   rŒ   rU   Útargetr\   ©rk   rW   rZ   rˆ   r.   r.   r/   Úvisit_augassign6  s   üÿzTreeRebuilder.visit_augassignc                 C   ó*   t  |j|j|¡}| |  |j|¡¡ |S )z:visit a Backquote node by returning a fresh instance of it)r   ÚReprr°   r±   rŒ   rU   r\   rÈ   r.   r.   r/   Ú
visit_reprC  ó   zTreeRebuilder.visit_reprc                 C   sD   t  | jt|jƒ |j|j|¡}| |  |j	|¡|  |j
|¡¡ |S )z6visit a BinOp node by returning a fresh instance of it)r   ÚBinOpri   r{   rÆ   r°   r±   rŒ   rU   ÚleftÚrightrÈ   r.   r.   r/   Úvisit_binopI  s   ÿÿzTreeRebuilder.visit_binopc                    s@   t  ˆjt|jƒ |j|j|¡‰ ˆ  ‡ ‡fdd„|jD ƒ¡ ˆ S )z7visit a BoolOp node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   X  rŠ   z.TreeRebuilder.visit_boolop.<locals>.<listcomp>)	r   ÚBoolOprh   r{   rÆ   r°   r±   rŒ   Úvalues©rk   rW   rZ   r.   r‡   r/   Úvisit_boolopS  s
   ÿzTreeRebuilder.visit_boolopc                 C   ó   t  t|ddƒt|ddƒ|¡S )z6visit a Break node by returning a fresh instance of itr°   Nr±   )r   ÚBreakrV   rÔ   r.   r.   r/   Úvisit_break[  ó   ÿzTreeRebuilder.visit_breakc           	         sð   t  |j|j|¡‰ t|dˆˆ ƒ}t|dˆˆ ƒ}‡ ‡fdd„|jD ƒ}|jr1‡ ‡fdd„|jD ƒ}nd}|rKt j|j|j|jd}|j	|d | 
|¡ |rjt jd|j|j|jd	}|j	|d |rg| 
|¡ n|g}ˆ  	ˆ |jˆ ¡||¡ ˆ S )
z9visit a CallFunc node by returning a fresh instance of itÚstarargsÚkwargsc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   f  rŠ   z,TreeRebuilder.visit_call.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   i  rŠ   N)r±   r°   rZ   ©r\   )r    r±   r°   rZ   )r   ÚCallr°   r±   r]   r¢   ÚkeywordsÚStarredrZ   rŒ   Úappendr   rU   Úfunc)	rk   rW   rZ   rÚ   rÛ   r¢   rÞ   Znew_starargsZ
new_kwargsr.   r‡   r/   Ú
visit_calla  s8   ý
üzTreeRebuilder.visit_callc              
      sÊ   ˆ  |¡\}}t |j||j|j|¡‰ d}tr+|jD ]}|jdkr*ˆ 	|ˆ ¡j
} nq|jr5ˆ |ˆ ¡}nd}ˆ  ‡ ‡fdd„|jD ƒ‡ ‡fdd„|jD ƒ|||tr`‡ ‡fdd„|jD ƒ¡ ˆ S g ¡ ˆ S )z'visit a ClassDef node to become astroidNÚ	metaclassc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   “  rŠ   z0TreeRebuilder.visit_classdef.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ”  rŠ   c                    s"   g | ]}|j d krˆ |ˆ ¡‘qS )rã   )r    rU   )r…   Zkwdr‡   r.   r/   r‰   ˜  s    ý
ÿ)ry   r   ÚClassDefr~   r°   r±   r­   rÞ   r    rU   r\   Údecorator_listÚvisit_decoratorsrŒ   Úbasesrr   )rk   rW   rZ   Únewstylerx   rã   r   Ú
decoratorsr.   r‡   r/   Úvisit_classdef„  s6   

þûþúþôzTreeRebuilder.visit_classdefc                 C   ó"   t  |jt|ddƒt|ddƒ|¡S )z6visit a Const node by returning a fresh instance of itr°   Nr±   ©r   ÚConstr\   rV   rÔ   r.   r.   r/   Úvisit_const¢  ó   

üzTreeRebuilder.visit_constc                 C   rÖ   )z9visit a Continue node by returning a fresh instance of itr°   Nr±   )r   ÚContinuerV   rÔ   r.   r.   r/   Úvisit_continue«  rÙ   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 ˆ |ˆ ¡f‘qS r.   )rg   r‘   rU   )r…   rÆ   Úexprr‡   r.   r/   r‰   ¶  s    ÿÿz/TreeRebuilder.visit_compare.<locals>.<listcomp>)
r   ÚComparer°   r±   rŒ   rU   rÏ   ÚzipÚopsÚcomparatorsrÔ   r.   r‡   r/   Úvisit_compare±  s   þþzTreeRebuilder.visit_comparec              	      sL   t  |¡‰ ˆ  ˆ |jˆ ¡ˆ |jˆ ¡‡ ‡fdd„|jD ƒt|ddƒ¡ ˆ S )z>visit a Comprehension node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ã  rŠ   z5TreeRebuilder.visit_comprehension.<locals>.<listcomp>Úis_asyncN)r   r
   rŒ   rU   rÇ   ÚiterÚifsrV   rÔ   r.   r‡   r/   Úvisit_comprehension½  s   

üz!TreeRebuilder.visit_comprehensionc                    ó2   t  |j|j|¡‰ ˆ  ‡ ‡fdd„|jD ƒ¡ ˆ S )z;visit a Decorators node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Í  rŠ   z2TreeRebuilder.visit_decorators.<locals>.<listcomp>)r   Z
Decoratorsr°   r±   rŒ   rå   rÔ   r.   r‡   r/   ræ   È  s   zTreeRebuilder.visit_decoratorsc                    rü   )z7visit a Delete node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ó  rŠ   z.TreeRebuilder.visit_delete.<locals>.<listcomp>)r   ÚDeleter°   r±   rŒ   r¾   rÔ   r.   r‡   r/   Úvisit_deleteÐ  ó   zTreeRebuilder.visit_deletec                 c   sX    t |j|jƒD ]!\}}|  ||¡}|st |j|j|¡}n|  ||¡}||fV  qd S rN   )rô   ÚkeysrÓ   rU   r   Z
DictUnpackr°   r±   )rk   rW   rZ   rˆ   Úkeyr\   Zrebuilt_valueZrebuilt_keyr.   r.   r/   Ú_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   ÚDictr°   r±   Úlistr  rŒ   )rk   rW   rZ   rˆ   Úitemsr.   r.   r/   Ú
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                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ï  rŠ   z0TreeRebuilder.visit_dictcomp.<locals>.<listcomp>)	r   ÚDictCompr°   r±   rŒ   rU   r  r\   Ú
generatorsrÔ   r.   r‡   r/   Úvisit_dictcompé  s   ýzTreeRebuilder.visit_dictcompc                 C   rÊ   )z5visit a Expr node by returning a fresh instance of it)r   rt   r°   r±   rŒ   rU   r\   rÈ   r.   r.   r/   Ú
visit_expró  rÍ   zTreeRebuilder.visit_exprc                 C   rÖ   )z:visit an Ellipsis node by returning a fresh instance of itr°   Nr±   )r   ÚEllipsisrV   rÔ   r.   r.   r/   Úvisit_ellipsisú  rÙ   zTreeRebuilder.visit_ellipsisc                 C   rÖ   )z;visit an EmptyNode node by returning a fresh instance of itr°   Nr±   )r   Z	EmptyNoderV   rÔ   r.   r.   r/   Úvisit_emptynode   rÙ   zTreeRebuilder.visit_emptynodec                    sJ   t  |j|j|¡‰ ˆ  t|dˆˆ ƒt|dˆˆ ƒ‡ ‡fdd„|jD ƒ¡ ˆ S )ú?visit an ExceptHandler node by returning a fresh instance of itr{   r~   c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰     rŠ   z5TreeRebuilder.visit_excepthandler.<locals>.<listcomp>)r   r   r°   r±   rŒ   r]   rr   rÔ   r.   r‡   r/   Úvisit_excepthandler  s   ýz!TreeRebuilder.visit_excepthandlerc              	   C   sB   t  |j|j|¡}| |  |j|¡t|d| |ƒt|d| |ƒ¡ |S )z6visit an Exec node by returning a fresh instance of itÚglobalsÚlocals)r   ZExecr°   r±   rŒ   rU   rr   r]   rÈ   r.   r.   r/   Ú
visit_exec  ó   ýzTreeRebuilder.visit_execc                    s,   t j|d‰ ˆ  ‡ ‡fdd„|jD ƒ¡ ˆ S )z:visit an ExtSlice node by returning a fresh instance of it©rZ   c                    r‚   r.   rƒ   )r…   Údimr‡   r.   r/   r‰     rŠ   z0TreeRebuilder.visit_extslice.<locals>.<listcomp>)r   ÚExtSlicerŒ   ÚdimsrÔ   r.   r‡   r/   Úvisit_extslice  s   zTreeRebuilder.visit_extslicec                    sj   ||j |j|ƒ‰ ˆ |¡}ˆ 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 itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   )  rŠ   z,TreeRebuilder._visit_for.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   *  rŠ   )rÇ   rù   rr   Úorelser¿   )	r°   r±   r¸   rŒ   rU   rÇ   rù   rr   r  ©rk   r•   rW   rZ   r¿   r.   r‡   r/   Ú
_visit_for"  s   
ûzTreeRebuilder._visit_forc                 C   ó   |   tj||¡S rN   )r  r   ÚForrÔ   r.   r.   r/   Ú	visit_for/  r7   zTreeRebuilder.visit_forc              
   C   sP   dd„ |j D ƒ}t |jpd||jpdt|ddƒt|ddƒ|¡}| j |¡ |S )z<visit an ImportFrom node by returning a fresh instance of itc                 S   ó   g | ]}|j |jf‘qS r.   ©r~   Úasname©r…   Úaliasr.   r.   r/   r‰   4  rŠ   z2TreeRebuilder.visit_importfrom.<locals>.<listcomp>Ú Nr°   r±   )Únamesr   Ú
ImportFromr-   ÚlevelrV   rb   rà   )rk   rW   rZ   r%  rˆ   r.   r.   r/   Úvisit_importfrom2  s   

ú	zTreeRebuilder.visit_importfromc           
         sÄ   ˆj  i ¡ ˆ |¡\}}||j||j|j|ƒ‰ |jr"ˆ |ˆ ¡}nd}tr1|j	r1ˆ 
|j	ˆ ¡}nd}d }}ˆ |¡}	|	rB|	\}}ˆ jˆ 
|jˆ ¡‡ ‡fdd„|jD ƒ||||d ˆj  ¡  ˆ S )z+visit an FunctionDef node to become astroidNc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   U  rŠ   z4TreeRebuilder._visit_functiondef.<locals>.<listcomp>)r¢   rr   ré   r¼   Útype_comment_returnsÚtype_comment_args)ra   rà   ry   r~   r°   r±   rå   ræ   r­   r¼   rU   r½   rŒ   r¢   rr   Úpop)
rk   r•   rW   rZ   rx   ré   r¼   r*  r)  Ztype_comment_annotationr.   r‡   r/   Ú_visit_functiondefA  s.   

ú
z TreeRebuilder._visit_functiondefc                 C   r  rN   )r,  r   ÚFunctionDefrÔ   r.   r.   r/   Úvisit_functiondef^  r7   zTreeRebuilder.visit_functiondefc                    ó>   t  |j|j|¡‰ ˆ  ˆ |jˆ ¡‡ ‡fdd„|jD ƒ¡ ˆ S )z=visit a GeneratorExp node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   f  rŠ   z4TreeRebuilder.visit_generatorexp.<locals>.<listcomp>)r   ÚGeneratorExpr°   r±   rŒ   rU   Úeltr  rÔ   r.   r‡   r/   Úvisit_generatorexpa  ó   þz TreeRebuilder.visit_generatorexpc                 C   s”   |   |¡}|tjkrt |j|j|j|¡}n(|tjkr3t 	|j|j|j|¡}t
|tjƒs2| j |¡ nt |j|j|j|¡}| |  |j|¡¡ |S )z;visit an Attribute node by returning a fresh instance of it)r}   rP   rR   r   ZDelAttrrX   r°   r±   rQ   Z
AssignAttrrs   r   rc   rà   Ú	AttributerŒ   rU   r\   ©rk   rW   rZ   Úcontextrˆ   r.   r.   r/   Úvisit_attributej  s   


€zTreeRebuilder.visit_attributec                 C   sP   t  |jt|ddƒt|ddƒ|¡}| jr&|jD ]}| jd  |g ¡ |¡ q|S )z%visit a Global node to become astroidr°   Nr±   r˜   )r   ÚGlobalr%  rV   ra   Ú
setdefaultrà   )rk   rW   rZ   rˆ   r~   r.   r.   r/   Úvisit_global{  s   

ü
zTreeRebuilder.visit_globalc                    óR   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                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰     rŠ   z*TreeRebuilder.visit_if.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ž  rŠ   )	r   ÚIfr°   r±   rŒ   rU   r³   rr   r  rÔ   r.   r‡   r/   Úvisit_ifˆ  ó   ý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±   rŒ   rU   r³   rr   r  rÈ   r.   r.   r/   Úvisit_ifexp’  r  zTreeRebuilder.visit_ifexpc                 C   sb   dd„ |j D ƒ}t |t|ddƒt|ddƒ|¡}|j D ]\}}|p"|}| | d¡d |¡ q|S )z7visit a Import node by returning a fresh instance of itc                 S   r  r.   r   r"  r.   r.   r/   r‰   ž  rŠ   z.TreeRebuilder.visit_import.<locals>.<listcomp>r°   Nr±   Ú.r   )r%  r   ÚImportrV   rš   Úsplit)rk   rW   rZ   r%  rˆ   r~   r!  r.   r.   r/   Úvisit_importœ  s   

üzTreeRebuilder.visit_importc                 C   s$   t j|d}| |  |j|¡¡ |S )z6visit a Index node by returning a fresh instance of itr  )r   ÚIndexrŒ   rU   r\   rÈ   r.   r.   r/   Úvisit_index¬  s   zTreeRebuilder.visit_indexc                 C   s(   t j|j|d}| |  |j|¡¡ |S )z8visit a Keyword node by returning a fresh instance of itr  )r   r   r    rŒ   rU   r\   rÈ   r.   r.   r/   Ú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±   rŒ   rU   r¢   rr   rÈ   r.   r.   r/   Úvisit_lambda¸  s    zTreeRebuilder.visit_lambdac                    ó@   ˆ  |¡}tj||j|j|d‰ ˆ  ‡ ‡fdd„|jD ƒ¡ ˆ S )z5visit a List node by returning a fresh instance of it©r|   r°   r±   rZ   c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ä  rŠ   z,TreeRebuilder.visit_list.<locals>.<listcomp>)r}   r   ÚListr°   r±   rŒ   Úelts©rk   rW   rZ   r6  r.   r‡   r/   Ú
visit_list¾  ó   
ÿzTreeRebuilder.visit_listc                    r/  )z9visit a ListComp node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ì  rŠ   z0TreeRebuilder.visit_listcomp.<locals>.<listcomp>)r   ÚListCompr°   r±   rŒ   rU   r1  r  rÔ   r.   r‡   r/   Úvisit_listcompÇ  r3  zTreeRebuilder.visit_listcompc                 C   s¶   |   |¡}|tjkrt |j|j|j|¡}n6|tjkr't 	|j|j|j|¡}n%|jt
v rAt t
|j t|ddƒt|ddƒ|¡}|S t |j|j|j|¡}|tjtjfv rY|  |¡ |S )z5visit a Name node by returning a fresh instance of itr°   Nr±   )r}   rP   rR   r   ZDelNameÚidr°   r±   rQ   rÂ   ÚCONST_NAME_TRANSFORMSrí   rV   ÚNamer›   r5  r.   r.   r/   r—   Ð  s"   





ü
zTreeRebuilder.visit_namec                 C   rë   )z<visit a Constant node by returning a fresh instance of Constr°   Nr±   rì   rÔ   r.   r.   r/   Úvisit_constantè  rï   zTreeRebuilder.visit_constantc                 C   rë   )z@visit a String/Bytes node by returning a fresh instance of Constr°   Nr±   )r   rí   rv   rV   rÔ   r.   r.   r/   Ú	visit_strò  rï   zTreeRebuilder.visit_strc                 C   rë   )z7visit a Num node by returning a fresh instance of Constr°   Nr±   )r   rí   ÚnrV   rÔ   r.   r.   r/   Ú	visit_numþ  rï   zTreeRebuilder.visit_numc                 C   s   t  |j|j|¡S )z5visit a Pass node by returning a fresh instance of it)r   ÚPassr°   r±   rÔ   r.   r.   r/   Ú
visit_pass  s   zTreeRebuilder.visit_passc                    sB   t  |j|j|j|¡‰ ˆ  t|dˆˆ ƒ‡ ‡fdd„|jD ƒ¡ ˆ S )z6visit a Print node by returning a fresh instance of itÚdestc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰     rŠ   z-TreeRebuilder.visit_print.<locals>.<listcomp>)r   ZPrintÚnlr°   r±   rŒ   r]   rÓ   rÔ   r.   r‡   r/   Úvisit_print  s   þzTreeRebuilder.visit_printc              	   C   sB   t  |j|j|¡}| t|d| |ƒt|d| |ƒt|d| |ƒ¡ |S )ú6visit a Raise node by returning a fresh instance of itr{   ÚinstZtback©r   ÚRaiser°   r±   rŒ   r]   rÈ   r.   r.   r/   Úvisit_raise  s   ýzTreeRebuilder.visit_raisec                 C   ó4   t  |j|j|¡}|jdur| |  |j|¡¡ |S )z7visit a Return node by returning a fresh instance of itN)r   ÚReturnr°   r±   r\   rŒ   rU   rÈ   r.   r.   r/   Úvisit_return  ó   
zTreeRebuilder.visit_returnc                    rü   )z4visit a Set node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   )  rŠ   z+TreeRebuilder.visit_set.<locals>.<listcomp>)r   ÚSetr°   r±   rŒ   rM  rÔ   r.   r‡   r/   Ú	visit_set&  rÿ   zTreeRebuilder.visit_setc                    r/  )z8visit a SetComp node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   1  rŠ   z/TreeRebuilder.visit_setcomp.<locals>.<listcomp>)r   ÚSetCompr°   r±   rŒ   rU   r1  r  rÔ   r.   r‡   r/   Úvisit_setcomp,  r3  zTreeRebuilder.visit_setcompc              	   C   s<   t j|d}| t|d| |ƒt|d| |ƒt|d| |ƒ¡ |S )z6visit a Slice node by returning a fresh instance of itr  r”   ÚupperÚstep)r   ÚSlicerŒ   r]   rÈ   r.   r.   r/   Úvisit_slice5  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 itrK  )	r}   r   Ú	Subscriptr°   r±   rŒ   rU   r\   Úslicer5  r.   r.   r/   Úvisit_subscript?  s   
ÿÿzTreeRebuilder.visit_subscriptc                    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                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   N  rŠ   z1TreeRebuilder.visit_tryexcept.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   O  rŠ   c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   P  rŠ   )r   Z	TryExceptr°   r±   rŒ   rr   Úhandlersr  rÔ   r.   r‡   r/   Úvisit_tryexceptJ  s   ýzTreeRebuilder.visit_tryexceptc                    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                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   X  rŠ   z2TreeRebuilder.visit_tryfinally.<locals>.<listcomp>c                    r‚   r.   rƒ   ©r…   rX  r‡   r.   r/   r‰   Y  rŠ   )r   Ú
TryFinallyr°   r±   rŒ   rr   Ú	finalbodyrÔ   r.   r‡   r/   Úvisit_tryfinallyT  s   þzTreeRebuilder.visit_tryfinallyc                    rJ  )z6visit a Tuple node by returning a fresh instance of itrK  c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   c  rŠ   z-TreeRebuilder.visit_tuple.<locals>.<listcomp>)r}   r   ÚTupler°   r±   rŒ   rM  rN  r.   r‡   r/   Úvisit_tuple]  rP  zTreeRebuilder.visit_tuplec                 C   s6   t  | j|jj |j|j|¡}| |  |j	|¡¡ |S )z8visit a UnaryOp node by returning a fresh instance of it)
r   ÚUnaryOprf   rÆ   r‘   r°   r±   rŒ   rU   ÚoperandrÈ   r.   r.   r/   Úvisit_unaryopf  s   üzTreeRebuilder.visit_unaryopc                    r;  )z6visit a While node by returning a fresh instance of itc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   v  rŠ   z-TreeRebuilder.visit_while.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   w  rŠ   )	r   ÚWhiler°   r±   rŒ   rU   r³   rr   r  rÔ   r.   r‡   r/   Úvisit_whileq  r>  zTreeRebuilder.visit_whilec                    st   t  |j|j|¡‰ ˆ |jˆ ¡}|jd urˆ |jˆ ¡}nd }ˆ |¡}ˆ j||fg‡ ‡fdd„|j	D ƒ|d ˆ S )Nc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   †  rŠ   z,TreeRebuilder.visit_with.<locals>.<listcomp>©r  rr   r¿   )
r   ÚWithr°   r±   rU   Úcontext_exprÚoptional_varsr¸   rŒ   rr   )rk   rW   rZ   rò   rƒ  r¿   r.   r‡   r/   Ú
visit_with{  s   

ýzTreeRebuilder.visit_withc                 C   rd  )z6visit a Yield node by returning a fresh instance of itN)r   ÚYieldr°   r±   r\   rŒ   rU   rÈ   r.   r.   r/   Úvisit_yield‹  rg  zTreeRebuilder.visit_yield)FrN   )Kr’   Ú
__module__Ú__qualname__Ú__doc__Úboolrm   ry   r}   r   rU   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.  r2  r7  r:  r=  r@  rD  rF  rG  rI  rO  rR  r—   rV  rW  Zvisit_bytesrY  r[  r^  rc  rf  ri  rk  ro  rr  rt  rx  rz  r}  r  r„  r†  r.   r.   r.   r/   r^   m   s    
>



#	
	

		
				

		
r^   c                       s®   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Z‡ fdd„Zdd„ Zdd„ Zd'‡ fdd„	Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Z‡  ZS )(ÚTreeRebuilder3z/extend and overwrite TreeRebuilder for python3kc                 C   s   |   |||j¡S )z7visit an arg node by returning a fresh AssName instance)rÃ   r    rÔ   r.   r.   r/   Ú	visit_arg–  s   zTreeRebuilder3.visit_argc                 C   s"   t  |jt|dd ƒt|dd ƒ|¡S )Nr°   r±   rì   rÔ   r.   r.   r/   Úvisit_nameconstant›  rï   z!TreeRebuilder3.visit_nameconstantc                    s\   t  |j|j|¡‰ |jrˆ |ˆ |j¡}nd}ˆ  t|dˆˆ ƒ|‡ ‡fdd„|jD ƒ¡ ˆ S )r  Nr{   c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ®  rŠ   z6TreeRebuilder3.visit_excepthandler.<locals>.<listcomp>)	r   r   r°   r±   r~   rÃ   rŒ   r]   rr   )rk   rW   rZ   r~   r.   r‡   r/   r  ¤  s   ýz"TreeRebuilder3.visit_excepthandlerc                 C   rë   )z5visit a Nonlocal node and return a new instance of itr°   Nr±   )r   ÚNonlocalr%  rV   rÔ   r.   r.   r/   Úvisit_nonlocal²  rï   zTreeRebuilder3.visit_nonlocalc                 C   s6   t  |j|j|¡}| t|d| |ƒt|d| |ƒ¡ |S )r_  ÚexcÚcausera  rÈ   r.   r.   r/   rc  »  s   þzTreeRebuilder3.visit_raisec                 C   s8   |   |¡}tj||j|j|d}| |  |j|¡¡ |S )z4visit a Starred node and return a new instance of itrK  )r}   r   rß   r°   r±   rŒ   rU   r\   r5  r.   r.   r/   Úvisit_starredÅ  s   
ÿzTreeRebuilder3.visit_starredc                    s|   |j r3t |j|j|¡‰ |jrˆ |ˆ ¡g}n‡ ‡fdd„|jD ƒ}ˆ  |‡ ‡fdd„|j D ƒ¡ ˆ S |jr<ˆ ||¡S d S )Nc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   Ö  rŠ   z,TreeRebuilder3.visit_try.<locals>.<listcomp>c                    r‚   r.   rƒ   ru  r‡   r.   r/   r‰   ×  rŠ   )	rw  r   rv  r°   r±   rs  rt  rr   rŒ   )rk   rW   rZ   rr   r.   r‡   r/   Ú	visit_tryÎ  s   zTreeRebuilder3.visit_tryc              	   C   sL   t  |j|j|¡}t|d| |ƒ}|j|  |j|¡||jt|d| |ƒd |S )z;visit an AnnAssign node by returning a fresh instance of itrž   r\   )rÇ   rž   Úsimpler\   )	r   Ú	AnnAssignr°   r±   r]   rŒ   rU   rÇ   r”  )rk   rW   rZ   rˆ   rž   r.   r.   r/   Úvisit_annassignÝ  s   üzTreeRebuilder3.visit_annassignc                    sz   d|j vrttˆƒ ||¡S ||j|j|ƒ‰ ‡ ‡fdd„‰ˆ |¡}ˆ j‡fdd„|jD ƒ‡ ‡fdd„|j	D ƒ|d ˆ S )Nr  c                    s$   ˆ  | jˆ ¡}t| dˆˆ ƒ}||fS )Nrƒ  )rU   r‚  r]   )r†   rò   Úvarr‡   r.   r/   Úvisit_childð  s   z/TreeRebuilder3._visit_with.<locals>.visit_childc                    s   g | ]}ˆ |ƒ‘qS r.   r.   r„   )r˜  r.   r/   r‰   ÷  s    z.TreeRebuilder3._visit_with.<locals>.<listcomp>c                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰   ø  rŠ   r€  )
Ú_fieldsÚsuperr‹  r„  r°   r±   r¸   rŒ   r  rr   r  ©r‘   )rˆ   rk   r˜  r/   Ú_visit_withé  s   

ýzTreeRebuilder3._visit_withc                 C   r  rN   )rœ  r   r  rÔ   r.   r.   r/   r„  ý  r7   zTreeRebuilder3.visit_withc                 C   s4   t  |j|j|¡}|jd ur| |  |j|¡¡ |S rN   )r   Ú	YieldFromr°   r±   r\   rŒ   rU   rÈ   r.   r.   r/   Úvisit_yieldfrom   s   
zTreeRebuilder3.visit_yieldfromTc                    s   t t| ƒj|||dS )N)rè   )rš  r‹  rê   )rk   rW   rZ   rè   r›  r.   r/   rê     s   
ÿzTreeRebuilder3.visit_classdefc                 C   r  rN   )r,  r   ÚAsyncFunctionDefrÔ   r.   r.   r/   Úvisit_asyncfunctiondef  r7   z%TreeRebuilder3.visit_asyncfunctiondefc                 C   r  rN   )r  r   ÚAsyncForrÔ   r.   r.   r/   Úvisit_asyncfor  r7   zTreeRebuilder3.visit_asyncforc                 C   s,   t  |j|j|¡}|j|  |j|¡d |S )NrÜ   )r   ÚAwaitr°   r±   rŒ   rU   r\   rÈ   r.   r.   r/   Úvisit_await  s   zTreeRebuilder3.visit_awaitc                 C   r  rN   )rœ  r   Ú	AsyncWithrÔ   r.   r.   r/   Úvisit_asyncwith  r7   zTreeRebuilder3.visit_asyncwithc                    rü   )Nc                    r‚   r.   rƒ   r„   r‡   r.   r/   r‰     rŠ   z2TreeRebuilder3.visit_joinedstr.<locals>.<listcomp>)r   Ú	JoinedStrr°   r±   rŒ   rÓ   rÔ   r.   r‡   r/   Úvisit_joinedstr  s   zTreeRebuilder3.visit_joinedstrc              	   C   s:   t  |j|j|¡}| |  |j|¡|jt|d| |ƒ¡ |S )NÚformat_spec)	r   ÚFormattedValuer°   r±   rŒ   rU   r\   Ú
conversionr]   rÈ   r.   r.   r/   Úvisit_formattedvalue  s   ýz#TreeRebuilder3.visit_formattedvalue)T)r’   r‡  rˆ  r‰  rŒ  r  r  r  rc  r’  r“  r–  rœ  r„  rž  rê   r   r¢  r¤  r¦  r¨  r¬  Ú__classcell__r.   r.   r›  r/   r‹  “  s(    		
	r‹  rƒ   )r‰  r*   rP   Zastroid._astr   r   r   r   rT  r“   r+   r­   r¬   rp   r0   r6   r>   rM   rT   r]   r^   r‹  r.   r.   r.   r/   Ú<module>   sD   ú



	      , 
ÿ