o
    bV                     @   sP   d Z ddlZdZG dd dZG dd deZdd	 Zejd
kr"eZedZdS )a  This module renders Astroid nodes as string:

* :func:`to_code` function return equivalent (hopefully valid) python string

* :func:`dump` function return an internal representation of nodes found
  in the tree, useful for debugging or understanding the tree structure
    N c                   @   s\  e Zd ZdZdd Zdd Zdd Zdd	d
Zdd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d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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 Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdS )AsStringVisitorz?Visitor to render an Astroid node as a valid python code stringc                 C   s
   || _ d S Nindent)selfr    r   P/var/www/secure340b-portal/env/lib/python3.10/site-packages/astroid/as_string.py__init__#   s   
zAsStringVisitor.__init__c                 C   s   | | tdS )z.Makes this visitor behave as a simple function
)acceptreplaceDOC_NEWLINEr   noder   r   r	   __call__&   s   zAsStringVisitor.__call__c                 C   s   d| j |dtf S )z7Stop newlines in docs being indented by self._stmt_listz
%s"""%s"""r   )r   r   r   )r   docr   r   r	   _docs_dedent*   s   zAsStringVisitor._docs_dedentTc                    sB   d dd  fdd|D D }|r j|dd j  S |S )z return a list of nodes to stringr   c                 s   s    | ]}|r|V  qd S r   r   ).0Znstrr   r   r	   	<genexpr>0   s    z-AsStringVisitor._stmt_list.<locals>.<genexpr>c                       g | ]}|  qS r   r   r   nr   r   r	   
<listcomp>0       z.AsStringVisitor._stmt_list.<locals>.<listcomp>)joinr   r   )r   Zstmtsr   r   r   r	   
_stmt_list.   s   "zAsStringVisitor._stmt_listc                 C   s&   |  |||rd||  S || S )z<Wrap child in parens only if required to keep same semantics(%s))_should_wrapr   )r   r   childis_leftr   r   r	   _precedence_parens6   s   
z"AsStringVisitor._precedence_parensc                 C   s8   |  }|  }||krdS ||kr|| krdS dS )zWrap child if:
            - it has lower precedence
            - same precedence with position opposite to associativity direction
        TF)Zop_precedenceZop_left_associative)r   r   r!   r"   Znode_precedenceZchild_precedencer   r   r	   r    =   s   
zAsStringVisitor._should_wrapc                 C   s   |  S ))return an astroid.Function node as string)Zformat_argsr   r   r   r	   visit_argumentsU   s   zAsStringVisitor.visit_argumentsc                 C   
   |  |S )z(return an astroid.AssAttr node as stringvisit_attributer   r   r   r	   visit_assignattrY      
z AsStringVisitor.visit_assignattrc                 C   s2   |j rd|j| |j | f S d|j|  S )z'return an astroid.Assert node as stringzassert %s, %sz	assert %s)Zfailtestr   r   r   r   r	   visit_assert]   s   zAsStringVisitor.visit_assertc                 C      |j S )z(return an astroid.AssName node as stringnamer   r   r   r	   visit_assignnamec      z AsStringVisitor.visit_assignnamec                    s.   d  fdd|jD }d||j f S )z'return an astroid.Assign node as stringz = c                 3       | ]}|  V  qd S r   r   r   r   r   r	   r   i       z/AsStringVisitor.visit_assign.<locals>.<genexpr>z%s = %s)r   targetsvaluer   )r   r   lhsr   r   r	   visit_assigng   s   zAsStringVisitor.visit_assignc                 C   s    d|j | |j|j| f S )z*return an astroid.AugAssign node as string%s %s %s)targetr   opr5   r   r   r   r	   visit_augassignl   s    zAsStringVisitor.visit_augassignc                 C   sD   |j | }|j| }|jdu rd||f S d|||j| f S )z*Return an astroid.AugAssign node as stringN%s: %sz%s: %s = %s)r9   r   
annotationr5   )r   r   r9   r=   r   r   r	   visit_annassignp   s
   
zAsStringVisitor.visit_annassignc                 C      d|j |  S )z%return an astroid.Repr node as stringz`%s`r5   r   r   r   r   r	   
visit_repry      zAsStringVisitor.visit_reprc                 C   sJ   |  ||j}| j ||jdd}|jdkrd||j|f S d||j|f S )z&return an astroid.BinOp node as stringFr"   **z%s%s%sr8   )r#   leftrightr:   )r   r   rE   rF   r   r   r	   visit_binop}   s
   
zAsStringVisitor.visit_binopc                    s&    fdd j D }d j |S )z'return an astroid.BoolOp node as stringc                    s   g | ]
}d   | qS )%sr#   r   r   r   r   r	   r      s    z0AsStringVisitor.visit_boolop.<locals>.<listcomp>z %s )valuesr:   r   )r   r   rK   r   rJ   r	   visit_boolop   s   zAsStringVisitor.visit_boolopc                 C      dS )z&return an astroid.Break node as stringbreakr   r   r   r   r	   visit_break      zAsStringVisitor.visit_breakc                    s^     ||j} fdd|jD }|jr fdd|jD }ng }|| d|d|f S )z%return an astroid.Call node as stringc                    r   r   r   )r   argr   r   r	   r      r   z.AsStringVisitor.visit_call.<locals>.<listcomp>c                    r   r   r   )r   kwargr   r   r	   r      r   z%s(%s), )r#   funcargskeywordsextendr   )r   r   Zexpr_strrU   rV   r   r   r	   
visit_call   s   
zAsStringVisitor.visit_callc                    s   |j r	|j  nd}d fdd|jD }| }|r2| s2|r,d||jf }nd|j }n|r8d| nd}|jrC |jnd}d||j|| 	|j
f S )	z)return an astroid.ClassDef node as string rS   c                 3   r2   r   r   r   r   r   r	   r      r3   z1AsStringVisitor.visit_classdef.<locals>.<genexpr>z(%s, metaclass=%s)z(metaclass=%s)r   z

%sclass %s%s:%s
%s
)
decoratorsr   r   bases	metaclassZhas_metaclass_hackr/   r   r   r   body)r   r   decorater[   r\   docsr   r   r	   visit_classdef   s    
zAsStringVisitor.visit_classdefc                    s2   d  fdd jD }d  j|f S )z(return an astroid.Compare node as string c              	      s(   g | ]\}}d |j  |ddf qS )%s %sFrC   rI   )r   r:   exprrJ   r   r	   r      s    z1AsStringVisitor.visit_compare.<locals>.<listcomp>rb   )r   opsr#   rE   )r   r   Zrhs_strr   rJ   r	   visit_compare   s   zAsStringVisitor.visit_comparec                    s8   d  fdd|jD }d|j |j |f S ).return an astroid.Comprehension node as stringrY   c                 3   s    | ]
}d |   V  qdS )z if %sNr   r   r   r   r	   r      s    z6AsStringVisitor.visit_comprehension.<locals>.<genexpr>zfor %s in %s%s)r   ifsr9   r   iterr   r   rg   r   r   r	   visit_comprehension   s   

z#AsStringVisitor.visit_comprehensionc                 C   s   |j tu rdS t|j S )z&return an astroid.Const node as string...)r5   Ellipsisreprr   r   r   r	   visit_const   s   

zAsStringVisitor.visit_constc                 C   rM   )z)return an astroid.Continue node as stringcontinuer   r   r   r   r	   visit_continue   rP   zAsStringVisitor.visit_continuec                       dd  fdd|jD  S )z'return an astroid.Delete node as stringzdel %srS   c                 3   r2   r   r   r   r!   r   r   r	   r      r3   z/AsStringVisitor.visit_delete.<locals>.<genexpr>)r   r4   r   r   r   r	   visit_delete      zAsStringVisitor.visit_deletec                 C   r&   )z(return an astroid.DelAttr node as stringr'   r   r   r   r	   visit_delattr   r*   zAsStringVisitor.visit_delattrc                 C   r-   )z(return an astroid.DelName node as stringr.   r   r   r   r	   visit_delname   r1   zAsStringVisitor.visit_delnamec                    rq   )z+return an astroid.Decorators node as stringz@%s
z
@c                 3   r2   r   r   )r   itemr   r   r	   r      r3   z3AsStringVisitor.visit_decorators.<locals>.<genexpr>)r   nodesr   r   r   r	   visit_decorators   rt   z AsStringVisitor.visit_decoratorsc                 C   s   dd | | S )z%return an astroid.Dict node as string{%s}rS   )r   _visit_dictr   r   r   r	   
visit_dict   s   zAsStringVisitor.visit_dictc                 c   sL    |j D ]\}}|| }|| }|dkr|| V  qd||f V  qd S )NrD   r<   )itemsr   )r   r   keyr5   r   r   r	   r{      s   

zAsStringVisitor._visit_dictc                 C   rM   )NrD   r   r   r   r   r	   visit_dictunpack   s   z AsStringVisitor.visit_dictunpackc                    s4   d|j  |j d fdd|jD f S )z)return an astroid.DictComp node as stringz{%s: %s %s}ra   c                 3   r2   r   r   r   r   r   r	   r      r3   z1AsStringVisitor.visit_dictcomp.<locals>.<genexpr>)r~   r   r5   r   
generatorsr   r   r   r	   visit_dictcomp   s
   

zAsStringVisitor.visit_dictcompc                 C      |j | S )z(return an astroid.Discard node as stringr@   r   r   r   r	   
visit_expr      zAsStringVisitor.visit_exprc                 C   rM   )z'dummy method for visiting an Empty noderY   r   r   r   r   r	   visit_emptynode   rP   zAsStringVisitor.visit_emptynodec                 C   T   |j r|jrd|j | |j| f }nd|j |  }nd}d|| |jf S )Nzexcept %s, %s	except %sexcept%s:
%styper/   r   r   r]   r   r   Zexcsr   r   r	   visit_excepthandler      

z#AsStringVisitor.visit_excepthandlerc                 C   rM   )z)return an astroid.Ellipsis node as stringrk   r   r   r   r   r	   visit_ellipsis  rP   zAsStringVisitor.visit_ellipsisc                 C   rM   )zreturn an Empty node as stringrY   r   r   r   r   r	   visit_empty  rP   zAsStringVisitor.visit_emptyc                 C   s^   |j rd|j| |j | |j| f S |jr'd|j| |j| f S d|j|  S )z%return an astroid.Exec node as stringzexec %s in %s, %szexec %s in %szexec %s)localsrc   r   globalsr   r   r   r	   
visit_exec  s   


zAsStringVisitor.visit_execc                    s   d  fdd|jD S )z)return an astroid.ExtSlice node as stringrS   c                 3   r2   r   r   )r   dimr   r   r	   r   !  r3   z1AsStringVisitor.visit_extslice.<locals>.<genexpr>)r   dimsr   r   r   r	   visit_extslice  s   zAsStringVisitor.visit_extslicec                 C   sD   d|j | |j| | |jf }|jr d|| |jf }|S )z$return an astroid.For node as stringzfor %s in %s:
%s%s
else:
%s)r9   r   rh   r   r]   orelse)r   r   Zforsr   r   r	   	visit_for#  s   


zAsStringVisitor.visit_forc                 C   s"   dd|j pd |j t|jf S )z+return an astroid.ImportFrom node as stringzfrom %s import %s.r   )levelmodname_import_stringnamesr   r   r   r	   visit_importfrom.  s   z AsStringVisitor.visit_importfromc              	   C   sv   |j r	|j | nd}|jr| |jnd}d}|jr&d|j  }|d }d}|||j|j| ||| |j	f S )r$   rY   :z->z
%sdef %s(%s)%s%s
%s)
rZ   r   r   r   returns	as_stringr/   rU   r   r]   )r   r   r^   r_   trailerreturn_annotationZ
def_formatr   r   r	   visit_functiondef5  s   

z!AsStringVisitor.visit_functiondefc                    *   d|j  d fdd|jD f S )z-return an astroid.GeneratorExp node as stringz(%s %s)ra   c                 3   r2   r   r   r   r   r   r	   r   K  r3   z5AsStringVisitor.visit_generatorexp.<locals>.<genexpr>eltr   r   r   r   r   r   r	   visit_generatorexpG     
z"AsStringVisitor.visit_generatorexpc                 C   s   d|  ||j|jf S )z(return an astroid.Getattr node as stringz%s.%s)r#   rc   attrnamer   r   r   r	   r(   N  s   zAsStringVisitor.visit_attributec                 C      dd |j S )z'return an astroid.Global node as stringz	global %srS   r   r   r   r   r   r	   visit_globalR  rB   zAsStringVisitor.visit_globalc                 C   sh   d|j | | |jf g}| r!|d| j|jdd  n|jr/|d| |j  d|S )z#return an astroid.If node as stringz	if %s:
%szel%sFr   else:
%sr   )r+   r   r   r]   Zhas_elif_blockappendr   r   ri   r   r   r	   visit_ifV  s   
zAsStringVisitor.visit_ifc                 C   s8   d| j ||jdd| j ||jdd| j ||jddf S )z&return an astroid.IfExp node as stringz%s if %s else %sTrC   F)r#   r]   r+   r   r   r   r   r	   visit_ifexp_  s
   zAsStringVisitor.visit_ifexpc                 C   s   dt |j S )z'return an astroid.Import node as stringz	import %s)r   r   r   r   r   r	   visit_importg  s   zAsStringVisitor.visit_importc                 C   s0   |j du rd|j|  S d|j |j| f S )z(return an astroid.Keyword node as stringNz**%sz%s=%s)rQ   r5   r   r   r   r   r	   visit_keywordk  s   
zAsStringVisitor.visit_keywordc                 C   s0   |j | }|j| }|rd||f S d| S )z'return an astroid.Lambda node as stringzlambda %s: %sz
lambda: %s)rU   r   r]   )r   r   rU   r]   r   r   r	   visit_lambdaq  s
   zAsStringVisitor.visit_lambdac                    rq   )z%return an astroid.List node as stringz[%s]rS   c                 3   r2   r   r   rr   r   r   r	   r   |  r3   z-AsStringVisitor.visit_list.<locals>.<genexpr>r   eltsr   r   r   r	   
visit_listz  rt   zAsStringVisitor.visit_listc                    r   )z)return an astroid.ListComp node as stringz[%s %s]ra   c                 3   r2   r   r   r   r   r   r	   r     r3   z1AsStringVisitor.visit_listcomp.<locals>.<genexpr>r   r   r   r   r	   visit_listcomp~  r   zAsStringVisitor.visit_listcompc                    s6   |j rd|j  nd}|d fdd|jD  d S )z'return an astroid.Module node as stringz
"""%s"""

rY   r   c                 3   r2   r   r   r   r   r   r	   r     r3   z/AsStringVisitor.visit_module.<locals>.<genexpr>z

)r   r   r]   )r   r   r_   r   r   r	   visit_module  s   "zAsStringVisitor.visit_modulec                 C   r-   )z%return an astroid.Name node as stringr.   r   r   r   r	   
visit_name  r1   zAsStringVisitor.visit_namec                 C   rM   )z%return an astroid.Pass node as stringpassr   r   r   r   r	   
visit_pass  rP   zAsStringVisitor.visit_passc                    sJ   d  fdd|jD }|jsd| }|jr!d|j |f S d| S )z&return an astroid.Print node as stringrS   c                 3   r2   r   r   r   r   r   r	   r     r3   z.AsStringVisitor.visit_print.<locals>.<genexpr>z%s,zprint >> %s, %szprint %s)r   rK   nldestr   )r   r   rx   r   r   r	   visit_print  s   zAsStringVisitor.visit_printc                 C   sh   |j r2|jr*|jrd|j | |j| |j| f S d|j | |j| f S d|j |  S dS )&return an astroid.Raise node as stringzraise %s, %s, %szraise %s, %sraise %sraise)excinstZtbackr   r   r   r   r	   visit_raise  s   


zAsStringVisitor.visit_raisec                    sV   |  rt|jjdkr fdd|jjD }dd| S |jr)d|j  S dS )z'return an astroid.Return node as string   c                    r   r   r   rr   r   r   r	   r     r   z0AsStringVisitor.visit_return.<locals>.<listcomp>z	return %srS   return)Zis_tuple_returnlenr5   r   r   r   )r   r   r   r   r   r	   visit_return  s   zAsStringVisitor.visit_returnc                 C   r   )z&return an astroid.Index node as stringr@   r   r   r   r	   visit_index  r   zAsStringVisitor.visit_indexc                    rq   )z$return an astroid.Set node as stringrz   rS   c                 3   r2   r   r   rr   r   r   r	   r     r3   z,AsStringVisitor.visit_set.<locals>.<genexpr>r   r   r   r   r	   	visit_set  rt   zAsStringVisitor.visit_setc                    r   )z(return an astroid.SetComp node as stringz{%s %s}ra   c                 3   r2   r   r   r   r   r   r	   r     r3   z0AsStringVisitor.visit_setcomp.<locals>.<genexpr>r   r   r   r   r	   visit_setcomp  r   zAsStringVisitor.visit_setcompc                 C   s`   |j r	|j | nd}|jr|j| nd}|jr|j| nd}|r*d|||f S d||f S )z&return an astroid.Slice node as stringrY   z%s:%s:%sz%s:%s)lowerr   upperstep)r   r   r   r   r   r   r   r	   visit_slice  s   zAsStringVisitor.visit_slicec                 C   s^   |j }|jj dkr|j}|| }|jj dkr$|jr$|dd }d| ||j|f S )z*return an astroid.Subscript node as stringindextupler   z%s[%s])slice	__class____name__r   r5   r   r   r#   )r   r   idxZidxstrr   r   r	   visit_subscript  s   
zAsStringVisitor.visit_subscriptc                 C   sT   d|  |j g}|jD ]
}|||  q|jr%|d|  |j  d|S )z*return an astroid.TryExcept node as stringztry:
%sr   r   )r   r]   handlersr   r   r   r   )r   r   Ztryshandlerr   r   r	   visit_tryexcept  s   

zAsStringVisitor.visit_tryexceptc                 C   s   d|  |j|  |jf S )z+return an astroid.TryFinally node as stringztry:
%s
finally:
%s)r   r]   	finalbodyr   r   r   r	   visit_tryfinally  s   

z AsStringVisitor.visit_tryfinallyc                    s@   t |jdkrd|jd   S dd fdd|jD  S )z&return an astroid.Tuple node as stringr   z(%s, )r   r   rS   c                 3   r2   r   r   rr   r   r   r	   r     r3   z.AsStringVisitor.visit_tuple.<locals>.<genexpr>)r   r   r   r   r   r   r   r	   visit_tuple  s   zAsStringVisitor.visit_tuplec                 C   s,   |j dkrd}n|j }d|| ||jf S )z(return an astroid.UnaryOp node as stringnotznot %s%s)r:   r#   operand)r   r   operatorr   r   r	   visit_unaryop  s   
zAsStringVisitor.visit_unaryopc                 C   s:   d|j | | |jf }|jrd|| |jf }|S )z&return an astroid.While node as stringzwhile %s:
%sr   )r+   r   r   r]   r   )r   r   Zwhilesr   r   r	   visit_while  s   zAsStringVisitor.visit_whilec                    s.   d  fdd|jD }d| |jf S )z%return an astroid.With node as stringrS   c                 3   s8    | ]\}}d |   |rd|   pd V  qdS )rH   z as %srY   Nr   )r   rc   varsr   r   r	   r     s
    "
z-AsStringVisitor.visit_with.<locals>.<genexpr>zwith %s:
%s)r   r}   r   r]   )r   r   r}   r   r   r	   
visit_with  s   zAsStringVisitor.visit_withc                 C   8   |j rd|j |  nd}d| }|jjr|S d|f S )z!yield an ast.Yield node as stringra   rY   yieldr   r5   r   parentZis_statementr   r   Zyi_valrc   r   r   r	   visit_yield  
   
zAsStringVisitor.visit_yieldc                 C   s   d|j |  S )zreturn Starred node as string*r@   r   r   r   r	   visit_starred  rB   zAsStringVisitor.visit_starredc                 C   r   r   r   r   r   r   r   r	   visit_frozenset     zAsStringVisitor.visit_frozensetc                 C   r   r   r   r   r   r   r	   visit_super  r   zAsStringVisitor.visit_superc                 C   s   t |S r   )strr   r   r   r	   visit_uninferable  s   z!AsStringVisitor.visit_uninferableN)T)Mr   
__module____qualname____doc__r
   r   r   r   r#   r    r%   r)   r,   r0   r7   r;   r>   rA   rG   rL   rO   rX   r`   re   rj   rn   rp   rs   ru   rv   ry   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       s    

		
	
						r   c                       st   e Zd Z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d Zdd Zdd Z fddZ  ZS )AsStringVisitor3z8AsStringVisitor3 overwrites some AsStringVisitor methodsc                 C   r   )Nzexcept %s as %sr   r   r   r   r   r   r   r	   r   !  r   z$AsStringVisitor3.visit_excepthandlerc                 C   r   )z)return an astroid.Nonlocal node as stringznonlocal %srS   r   r   r   r   r	   visit_nonlocal.  rB   zAsStringVisitor3.visit_nonlocalc                 C   s<   |j r|jrd|j | |j| f S d|j |  S dS )r   zraise %s from %sr   r   )r   causer   r   r   r   r	   r   2  s   

zAsStringVisitor3.visit_raisec                 C   r   )z- Return an astroid.YieldFrom node as string. ra   rY   z
yield fromr   r   r   r   r   r	   visit_yieldfrom=  r   z AsStringVisitor3.visit_yieldfromc                    s   t t| |}d|  S )Nasync )superr   r   strip)r   r   functionr   r   r	   visit_asyncfunctiondefF  s   z'AsStringVisitor3.visit_asyncfunctiondefc                 C   r?   )Nzawait %sr@   r   r   r   r	   visit_awaitJ     zAsStringVisitor3.visit_awaitc                 C      d|  | S Nzasync %s)r   r   r   r   r	   visit_asyncwithM     z AsStringVisitor3.visit_asyncwithc                 C   r  r  )r   r   r   r   r	   visit_asyncforP  r	  zAsStringVisitor3.visit_asyncforc                    s"   d  fdd|jD }d| S )NrY   c                 3   s.    | ]}t |jd kr|jn| V  qdS )ZConstN)r   r   r5   r   )r   r5   r   r   r	   r   V  s
    
z3AsStringVisitor3.visit_joinedstr.<locals>.<genexpr>zf'%s')r   rK   )r   r   stringr   r   r	   visit_joinedstrS  s   z AsStringVisitor3.visit_joinedstrc                 C   r?   )Nrz   r@   r   r   r   r	   visit_formattedvalue\  r  z%AsStringVisitor3.visit_formattedvaluec                    s"   d|j rdndtt| |f S )rf   r   r   rY   )is_asyncr   r   rj   r   r  r   r	   rj   _  s   z$AsStringVisitor3.visit_comprehension)r   r   r   r   r   r   r   r   r  r  r  r
  r  r  rj   __classcell__r   r   r  r	   r     s    		r   c                 C   sB   g }| D ]\}}|dur| d||f  q| | qd|S )z5return a list of (name, asname) formatted as a stringNz%s as %srS   )r   r   )r   Z_namesr/   asnamer   r   r	   r   g  s   
r   )   r   z    )r   sysr   r   r   r   version_infoZto_coder   r   r   r	   <module>   s       I
