
    ede                        d Z ddlmZ ddlmZ ddlmZ ddlmZ er&ddlm	Z	 ddl
m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 d	Z G d
 d      ZddZ ed      Zy)z+This module renders Astroid nodes as string    )annotations)Iterator)TYPE_CHECKING)nodes)objects)Const)MatchMatchAs	MatchCase
MatchClassMatchMappingMatchOrMatchSequenceMatchSingleton	MatchStar
MatchValueUnknown c                     e Zd ZdZdbdcdZdddZdedZdfdgdZdfdhdZdidZ	dddZ
ddd	Zddd
ZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZdddZ dddZ!djd Z"ddd!Z#ddd"Z$ddd#Z%ddd$Z&ddd%Z'ddd&Z(ddd'Z)ddd(Z*ddd)Z+ddd*Z,dkd+Z-dld,Z.dmd-Z/ddd.Z0ddd/Z1ddd0Z2ddd1Z3ddd2Z4ddd3Z5ddd4Z6ddd5Z7ddd6Z8ddd7Z9ddd8Z:ddd9Z;ddd:Z<ddd;Z=dnd<Z>ddd=Z?dod>Z@ddd?ZAddd@ZBdddAZCdddBZDdddCZEdddDZFdddEZGdddFZHdddGZIdpdHZJdqdIZKdrdJZLdddKZMdddLZNdddMZOdddNZPdddOZQdddPZRdsdQZSdtdRZTdudSZUeVdvdT       ZWdwdUZXdxdVZYdydWZZdzdXZ[d{dYZ\d|dZZ]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd}d`Zcya)~AsStringVisitorz?Visitor to render an Astroid node as a valid python code stringc                    || _         y Nindent)selfr   s     9/usr/lib/python3/dist-packages/astroid/nodes/as_string.py__init__zAsStringVisitor.__init__)   s	    !    c                L    |j                  |       j                  t        d      S )z.Makes this visitor behave as a simple function
)acceptreplaceDOC_NEWLINEr   nodes     r   __call__zAsStringVisitor.__call__,   s    {{4 ((d;;r   c                |    |sydj                  | j                  |j                  j                  dt                    S )z7Stop newlines in docs being indented by self._stmt_list z
{}"""{}"""r    )formatr   valuer"   r#   )r   doc_nodes     r   _docs_dedentzAsStringVisitor._docs_dedent0   s5    $$KK//kB
 	
r   c           	         dj                  d |D cg c]  }|j                  |        c}D              }|s|S | j                  |j                  dd| j                  z         z   S c c}w )z return a list of nodes to stringr    c              3  &   K   | ]	  }|s|  y wr    ).0nstrs     r   	<genexpr>z-AsStringVisitor._stmt_list.<locals>.<genexpr>;   s      #
D#
s   )joinr!   r   r"   )r   stmtsr   n	stmts_strs        r   
_stmt_listzAsStringVisitor._stmt_list9   se     #
6;<ahhtn<#
 
	 {{Y..tTDKK5GHHH =s   A&
c                t    | j                  |||      rd|j                  |        dS |j                  |       S )z<Wrap child in parens only if required to keep same semantics())_should_wrapr!   )r   r%   childis_lefts       r   _precedence_parensz"AsStringVisitor._precedence_parensC   s<    T5'2u||D)*!,,||D!!r   c                    |j                         }|j                         }||kD  ry||k(  r||j                         k7  ryy)zWrap child if:
        - it has lower precedence
        - same precedence with position opposite to associativity direction
        TF)op_precedenceop_left_associative)r   r%   r<   r=   node_precedencechild_precedences         r   r;   zAsStringVisitor._should_wrapJ   sQ    
 ,,. ..0-- //43355 r   c                >    d|j                   j                  |        S )Nzawait r*   r!   r$   s     r   visit_awaitzAsStringVisitor.visit_awaitb   s    

))$/011r   c                *    d| j                  |       S Nasync )
visit_withr$   s     r   visit_asyncwithzAsStringVisitor.visit_asyncwithe   s    -.//r   c                *    d| j                  |       S rH   )	visit_forr$   s     r   visit_asyncforzAsStringVisitor.visit_asyncforh   s    t,-..r   c                "    |j                         S )z)return an astroid.Function node as string)format_argsr$   s     r   visit_argumentszAsStringVisitor.visit_argumentsk   s    !!r   c                $    | j                  |      S )z(return an astroid.AssAttr node as stringvisit_attributer$   s     r   visit_assignattrz AsStringVisitor.visit_assignattro       ##D))r   c                    |j                   r:d|j                  j                  |        d|j                   j                  |        S d|j                  j                  |        S )z'return an astroid.Assert node as stringzassert , )failtestr!   r$   s     r   visit_assertzAsStringVisitor.visit_asserts   sY    99TYY--d34Btyy7G7G7M6NOO))$/011r   c                    |j                   S )z(return an astroid.AssName node as stringnamer$   s     r   visit_assignnamez AsStringVisitor.visit_assignnamey       yyr   c                     dj                   fd|j                  D              }| d|j                  j                          S )z'return an astroid.Assign node as string = c              3  @   K   | ]  }|j                          y wr   r!   r0   r5   r   s     r   r2   z/AsStringVisitor.visit_assign.<locals>.<genexpr>   s     >A$>   )r3   targetsr*   r!   )r   r%   lhss   `  r   visit_assignzAsStringVisitor.visit_assign}   s<    jj>>>c$**++D1233r   c                    |j                   j                  |        d|j                   d|j                  j                  |        S )z*return an astroid.AugAssign node as string )targetr!   opr*   r$   s     r   visit_augassignzAsStringVisitor.visit_augassign   s=    ++$$T*+1TWWIQtzz7H7H7N6OPPr   c                    |j                   j                  |       }|j                  j                  |       }|j                  | d| S | d| d|j                  j                  |        S )z*Return an astroid.AugAssign node as string: rb   )rl   r!   
annotationr*   )r   r%   rl   rq   s       r   visit_annassignzAsStringVisitor.visit_annassign   sn     ##D)__++D1
::XR
|,,J<s4::+<+<T+B*CDDr   c                    | j                  ||j                        }| j                  ||j                  d      }|j                  dk(  r| |j                   | S | d|j                   d| S )z&return an astroid.BinOp node as stringFr=   **rk   )r>   leftrightrm   )r   r%   rv   rw   s       r   visit_binopzAsStringVisitor.visit_binop   sp    &&tTYY7''djj%'H77d?VDGG9UG,,q	5'**r   c                    |j                   D cg c]  }| j                  ||        }}d|j                   dj                  |      S c c}w )z'return an astroid.BoolOp node as stringrk   )valuesr>   rm   r3   )r   r%   r5   rz   s       r   visit_boolopzAsStringVisitor.visit_boolop   sO    AEMAT,,T1567MMDGG9A$$V,, Ns   A
c                     y)z&return an astroid.Break node as stringbreakr/   r$   s     r   visit_breakzAsStringVisitor.visit_break   s    r   c                \   | j                  ||j                        }|j                  D cg c]  }|j                  |        }}|j                  r)|j                  D cg c]  }|j                  |        }}ng }|j                  |       | ddj                  |       dS c c}w c c}w )z%return an astroid.Call node as stringr9   rX   r:   )r>   funcargsr!   keywordsextendr3   )r   r%   expr_strargr   kwargr   s          r   
visit_callzAsStringVisitor.visit_call   s    **4;,0II6S

4 66==8<FuT*FHFHH1TYYt_-Q// 7Fs   B$B)c           	     z   |j                   r|j                   j                  |       nd}|j                  D cg c]  }|j                  |        }}|j                  r=|j	                         s-|j                  d|j                  j                  |       z          ||j                  D cg c]  }|j                  |        c}z  }|rddj                  |       dnd}| j                  |j                        }dj                  ||j                  ||| j                  |j                              S c c}w c c}w )z)return an astroid.ClassDef node as stringr(   z
metaclass=r9   rX   r:   z

{}class {}{}:{}
{}
)
decoratorsr!   bases
_metaclasshas_metaclass_hackappendr   r3   r,   r+   r)   r^   r7   body)r   r%   decorater5   r   args_strdocss          r   visit_classdefzAsStringVisitor.visit_classdef   s    37??4??))$/(,

3133??4#:#:#<KKt'='=d'CCD7A$77-1Qtyy'q)r  /*11dii41K
 	
 4 8s   D3*D8c                     dj                   fdj                  D              } j                  j                         d| S )z(return an astroid.Compare node as stringrk   c              3  V   K   | ]   \  }}| d j                  |d        " yw)rk   Frt   N)r>   )r0   rm   exprr%   r   s      r   r2   z0AsStringVisitor.visit_compare.<locals>.<genexpr>   s;      
D d!D++D$+FGH
s   &))r3   opsr>   rv   )r   r%   rhs_strs   `` r   visit_comparezAsStringVisitor.visit_compare   sG    (( 
 HH
 
 ))$		:;1WIFFr   c                     dj                   fd|j                  D              }d|j                  j                          d|j                  j                          | }|j
                  rdnd | S )z.return an astroid.Comprehension node as stringr(   c              3  F   K   | ]  }d |j                           yw) if Nrd   re   s     r   r2   z6AsStringVisitor.visit_comprehension.<locals>.<genexpr>   s!     @!QXXd^,-@s   !zfor z in rI   )r3   ifsrl   r!   iteris_async)r   r%   r   	generateds   `   r   visit_comprehensionz#AsStringVisitor.visit_comprehension   sk    gg@txx@@4;;--d34D9I9I$9O8PQTPUV	"mm(4YK@@r   c                R    |j                   t        u ryt        |j                         S )z&return an astroid.Const node as stringz...)r*   Ellipsisreprr$   s     r   visit_constzAsStringVisitor.visit_const   s     ::!DJJr   c                     y)z)return an astroid.Continue node as stringcontinuer/   r$   s     r   visit_continuezAsStringVisitor.visit_continue   s    r   c                R     ddj                   fd|j                  D               S )z'return an astroid.Delete node as stringzdel rX   c              3  @   K   | ]  }|j                          y wr   rd   r0   r<   r   s     r   r2   z/AsStringVisitor.visit_delete.<locals>.<genexpr>   s     MuT 2Mrf   )r3   rg   r$   s   ` r   visit_deletezAsStringVisitor.visit_delete   s$    diiMMMNOOr   c                $    | j                  |      S )z(return an astroid.DelAttr node as stringrS   r$   s     r   visit_delattrzAsStringVisitor.visit_delattr   rV   r   c                    |j                   S )z(return an astroid.DelName node as stringr]   r$   s     r   visit_delnamezAsStringVisitor.visit_delname   r`   r   c                R     ddj                   fd|j                  D              z  S )z+return an astroid.Decorators node as stringz@%s
z
@c              3  @   K   | ]  }|j                          y wr   rd   )r0   itemr   s     r   r2   z3AsStringVisitor.visit_decorators.<locals>.<genexpr>   s     #M$DKK$5#Mrf   )r3   r   r$   s   ` r   visit_decoratorsz AsStringVisitor.visit_decorators   s!    #M$**#MMMMr   c                H    ddj                  | j                  |            z  S )z%return an astroid.Dict node as string{%s}rX   )r3   _visit_dictr$   s     r   
visit_dictzAsStringVisitor.visit_dict   s!    		$"2"24"8999r   c              #     K   |j                   D ]=  \  }}|j                  |       }|j                  |       }|dk(  r||z    5| d|  ? y w)Nru   rp   )itemsr!   )r   r%   keyr*   s       r   r   zAsStringVisitor._visit_dict   s[     ** 	(JC**T"CLL&Ed{Ek!Rw''	(s   AAc                     y)Nru   r/   r$   s     r   visit_dictunpackz AsStringVisitor.visit_dictunpack   s    r   c                     dj                  |j                  j                         |j                  j                         dj	                   fd|j
                  D                    S )z)return an astroid.DictComp node as stringz{{{}: {} {}}}rk   c              3  @   K   | ]  }|j                          y wr   rd   re   s     r   r2   z1AsStringVisitor.visit_dictcomp.<locals>.<genexpr>   s     =QXXd^=rf   )r)   r   r!   r*   r3   
generatorsr$   s   ` r   visit_dictcompzAsStringVisitor.visit_dictcomp   sN    %%HHOOD!JJd#HH=T__==
 	
r   c                8    |j                   j                  |       S )z(return an astroid.Discard node as stringrE   r$   s     r   
visit_exprzAsStringVisitor.visit_expr       zz  &&r   c                     y)z'dummy method for visiting an Empty noder(   r/   r$   s     r   visit_emptynodezAsStringVisitor.visit_emptynode       r   c                   d}t        t        |dd       t        j                        rd}|j                  rj|j
                  r=| d|j                  j                  |        d|j
                  j                  |        }n$| d|j                  j                  |        }n| }| d| j                  |j                         S )Nexceptparentzexcept*rk    as :
)	
isinstancegetattrr   TryStartyper^   r!   r7   r   )r   r%   r5   excss       r   visit_excepthandlerz#AsStringVisitor.visit_excepthandler  s    gdHd3U]]CA99yyAdii..t45T$)):J:J4:P9QRAdii..t456SDs4??4995677r   c                     y)zreturn an Empty node as stringr(   r/   r$   s     r   visit_emptyzAsStringVisitor.visit_empty  r   r   c                   dj                  |j                  j                  |       |j                  j                  |       | j	                  |j
                              }|j                  r | d| j	                  |j                         }|S )z$return an astroid.For node as stringzfor {} in {}:
{}
else:
)r)   rl   r!   r   r7   r   orelse)r   r%   forss      r   rM   zAsStringVisitor.visit_for  sp    "))KKt$dii&6&6t&<doodii>X
 ;;V9T__T[[%A$BCDr   c                    dj                  d|j                  xs dz  |j                  z   t        |j                              S )z+return an astroid.ImportFrom node as stringzfrom {} import {}.r   )r)   levelmodname_import_stringnamesr$   s     r   visit_importfromz AsStringVisitor.visit_importfrom  s9    "))4::?#dll2N4::4N
 	
r   c                |     dj                   fd|j                  D              }dD ]  }||vs n dz   |z   |z   S )Nr(   c              3     K   | ]e  }t        |      j                  d k(  r8t        |j                        dd j	                  dd      j	                  dd      n|j                         g yw)r      {z{{}z}}N)r   __name__r   r*   r"   r!   )r0   r*   r   s     r   r2   z2AsStringVisitor.visit_joinedstr.<locals>.<genexpr>%  sj      
  E{##w. a#WS$T 2 5:LL4FG
s   A+A.)'""""z'''f)r3   rz   )r   r%   stringquotes   `   r   visit_joinedstrzAsStringVisitor.visit_joinedstr$  sV     
 
 
" . 	EF"	 U{V#e++r   c                   |j                   j                  |       }|j                  r*|j                  dk\  r|dt        |j                        z   z  }|j                  r$|d|j                  j                  |       dd z   z  }d|z  S )Nr   !:   r   r   )r*   r!   
conversionchrformat_spec)r   r%   results      r   visit_formattedvaluez$AsStringVisitor.visit_formattedvalue<  s|    ""4(??t!3cC000F cD,,33D9!B???Fr   c           
     ~   |j                   r|j                   j                  |       nd}| j                  |j                        }d}|j                  r"d|j                  j                         z   }|dz   }d}||||j                  |j                  j                  |       ||| j                  |j                        fz  S )z<return a (possibly async) function definition node as stringr(   r   z -> z
%s%s %s(%s)%s%s
%s)
r   r!   r,   r+   returns	as_stringr^   r   r7   r   )r   r%   keywordr   r   trailerreturn_annotation
def_formats           r   handle_functiondefz"AsStringVisitor.handle_functiondefG  s    37??4??))$/  /<< &)?)?)A A'#-G,
IIIIT"OODII&
 
 	
r   c                &    | j                  |d      S )z,return an astroid.FunctionDef node as stringdefr   r$   s     r   visit_functiondefz!AsStringVisitor.visit_functiondef[  s    &&tU33r   c                &    | j                  |d      S )z.return an astroid.AsyncFunction node as stringz	async defr   r$   s     r   visit_asyncfunctiondefz&AsStringVisitor.visit_asyncfunctiondef_  s    &&t[99r   c                     dj                  |j                  j                         dj                   fd|j                  D                    S )z-return an astroid.GeneratorExp node as stringz({} {})rk   c              3  @   K   | ]  }|j                          y wr   rd   re   s     r   r2   z5AsStringVisitor.visit_generatorexp.<locals>.<genexpr>f       +TqAHHTN+Trf   r)   eltr!   r3   r   r$   s   ` r   visit_generatorexpz"AsStringVisitor.visit_generatorexpc  ;    HHOOD!388+TDOO+T#T
 	
r   c                    | j                  ||j                        }|j                         rd| d}| d|j                   S )z(return an astroid.Getattr node as stringr9   r:   r   )r>   r   isdigitattrname)r   r%   rv   s      r   rT   zAsStringVisitor.visit_attributei  sC    &&tTYY7<<>tfA;Dq((r   c                >    ddj                  |j                         S )z'return an astroid.Global node as stringzglobal rX   r3   r   r$   s     r   visit_globalzAsStringVisitor.visit_globalp  s    4::./00r   c                   d|j                   j                  |        d| j                  |j                         g}|j	                         r0|j                  d| j                  |j                  d              n9|j                  r-|j                  d| j                  |j                                dj                  |      S )z#return an astroid.If node as stringzif r   elFr   else:
r    )rZ   r!   r7   r   has_elif_blockr   r   r3   )r   r%   r   s      r   visit_ifzAsStringVisitor.visit_ift  s    TYY%%d+,C		0J/KLM JJDOODKKOFGHI[[JJ!= >?@yy~r   c           	         dj                  | j                  ||j                  d      | j                  ||j                  d      | j                  ||j                  d            S )z&return an astroid.IfExp node as stringz{} if {} else {}Trt   F)r)   r>   r   rZ   r   r$   s     r   visit_ifexpzAsStringVisitor.visit_ifexp}  s`    !((##D$))T#B##D$))T#B##D$++u#E
 	
r   c                2    dt        |j                         S )z'return an astroid.Import node as stringzimport )r   r   r$   s     r   visit_importzAsStringVisitor.visit_import  s    

3455r   c                    |j                   d|j                  j                  |        S |j                    d|j                  j                  |        S )z(return an astroid.Keyword node as stringru   =)r   r*   r!   r$   s     r   visit_keywordzAsStringVisitor.visit_keyword  sN    88

))$/011((1TZZ..t4566r   c                    |j                   j                  |       }|j                  j                  |       }|rd| d| S d| S )z'return an astroid.Lambda node as stringzlambda rp   zlambda: )r   r!   r   )r   r%   r   r   s       r   visit_lambdazAsStringVisitor.visit_lambda  sM    yy%yy%TF"TF++$  r   c                T     ddj                   fd|j                  D               dS )z%return an astroid.List node as string[rX   c              3  @   K   | ]  }|j                          y wr   rd   r   s     r   r2   z-AsStringVisitor.visit_list.<locals>.<genexpr>       GEU\\$/Grf   ]r3   eltsr$   s   ` r   
visit_listzAsStringVisitor.visit_list  s&    499GTYYGGHJJr   c                     dj                  |j                  j                         dj                   fd|j                  D                    S )z)return an astroid.ListComp node as stringz[{} {}]rk   c              3  @   K   | ]  }|j                          y wr   rd   re   s     r   r2   z1AsStringVisitor.visit_listcomp.<locals>.<genexpr>  r  rf   r  r$   s   ` r   visit_listcompzAsStringVisitor.visit_listcomp  r
  r   c                     |j                   rd|j                   j                   dnd}|dj                   fd|j                  D              z   dz   S )z'return an astroid.Module node as stringr   z"""

r(   r    c              3  @   K   | ]  }|j                          y wr   rd   re   s     r   r2   z/AsStringVisitor.visit_module.<locals>.<genexpr>  s     B1Brf   z

)r+   r*   r3   r   )r   r%   r   s   `  r   visit_modulezAsStringVisitor.visit_module  sG    59]]T]](()1diiB		BBBVKKr   c                    |j                   S )z%return an astroid.Name node as stringr]   r$   s     r   
visit_namezAsStringVisitor.visit_name  r`   r   c                |    |j                   j                  |       }|j                  j                  |       }| d| S )z.Return an assignment expression node as stringz := )rl   r!   r*   )r   r%   rl   r*   s       r   visit_namedexprzAsStringVisitor.visit_namedexpr  s;    ##D)

!!$'eW%%r   c                >    ddj                  |j                         S )z)return an astroid.Nonlocal node as stringz	nonlocal rX   r  r$   s     r   visit_nonlocalzAsStringVisitor.visit_nonlocal  s    499TZZ0122r   c                8    |j                   j                  |       S )z*return an astroid.ParamSpec node as stringr^   r!   r$   s     r   visit_paramspeczAsStringVisitor.visit_paramspec  s    yy%%r   c                     y)z%return an astroid.Pass node as stringpassr/   r$   s     r   
visit_passzAsStringVisitor.visit_pass  s    r   c                $    | j                  |      S )z,Return an objects.PartialFunction as string.)r  r$   s     r   visit_partialfunctionz%AsStringVisitor.visit_partialfunction  s    %%d++r   c                    |j                   rd|j                  r:d|j                   j                  |        d|j                  j                  |        S d|j                   j                  |        S y)z&return an astroid.Raise node as stringzraise z from raise)exccauser!   r$   s     r   visit_raisezAsStringVisitor.visit_raise  s_    88zz 56fTZZ=N=Nt=T<UVVDHHOOD1233r   c                R   |j                         rht        |j                  j                        dkD  rF|j                  j                  D cg c]  }|j	                  |        }}ddj                  |       S |j                  rd|j                  j	                  |        S yc c}w )z'return an astroid.Return node as stringr   zreturn rX   return)is_tuple_returnlenr*   r%  r!   r3   )r   r%   r<   r%  s       r   visit_returnzAsStringVisitor.visit_return  s    !c$**//&:Q&>48JJOOD5ELL&DDDTYYt_-..::TZZ..t4566 Es   B$c                R     ddj                   fd|j                  D              z  S )z$return an astroid.Set node as stringr   rX   c              3  @   K   | ]  }|j                          y wr   rd   r   s     r   r2   z,AsStringVisitor.visit_set.<locals>.<genexpr>  s     !L%,,t"4!Lrf   r$  r$   s   ` r   	visit_setzAsStringVisitor.visit_set  s!    		!L$))!LLLLr   c                     dj                  |j                  j                         dj                   fd|j                  D                    S )z(return an astroid.SetComp node as stringz	{{{} {}}}rk   c              3  @   K   | ]  }|j                          y wr   rd   re   s     r   r2   z0AsStringVisitor.visit_setcomp.<locals>.<genexpr>  r  rf   r  r$   s   ` r   visit_setcompzAsStringVisitor.visit_setcomp  s;    !!HHOOD!388+TDOO+T#T
 	
r   c                   |j                   r|j                   j                  |       nd}|j                  r|j                  j                  |       nd}|j                  r|j                  j                  |       nd}|r
| d| d| S | d| S )z&return an astroid.Slice node as stringr(   r   )lowerr!   upperstep)r   r%   rL  rM  rN  s        r   visit_slicezAsStringVisitor.visit_slice  s    +/::

!!$'2+/::

!!$'2)-tyy%WAeWAdV,,%!!r   c                V   |j                   }|j                  j                  j                         dk(  r|j                  }|j                  |       }|j                  j                  j                         dk(  r|j                  r|dd }| j                  ||j                         d| dS )z*return an astroid.Subscript node as stringindextupler   r   r   r#  )slice	__class__r   rL  r*   r!   r%  r>   )r   r%   idxidxstrs       r   visit_subscriptzAsStringVisitor.visit_subscript  s    jj==!!'')W4))CD!==!!'')W4 Ab\F))$

;<AfXQGGr   c                   d| j                  |j                         g}|j                  D ]"  }|j                  |j	                  |              $ |j
                  r-|j                  d| j                  |j
                                |j                  r-|j                  d| j                  |j                                dj                  |      S )z$return an astroid.Try node as stringtry:
r  	finally:
r    r7   r   handlersr   r!   r   	finalbodyr3   r   r%   tryshandlers       r   	visit_tryzAsStringVisitor.visit_try      3456}} 	.GKKt,-	.;;KK'$//$++">!?@A>>KK*T__T^^%D$EFGyyr   c                   d| j                  |j                         g}|j                  D ]"  }|j                  |j	                  |              $ |j
                  r-|j                  d| j                  |j
                                |j                  r-|j                  d| j                  |j                                dj                  |      S )z(return an astroid.TryStar node as stringrY  r  rZ  r    r[  r^  s       r   visit_trystarzAsStringVisitor.visit_trystar  rb  r   c                     t        |j                        dk(  r"d|j                  d   j                          dS ddj                   fd|j                  D               dS )z&return an astroid.Tuple node as stringr   r9   r   z, )rX   c              3  @   K   | ]  }|j                          y wr   rd   r   s     r   r2   z.AsStringVisitor.visit_tuple.<locals>.<genexpr>  r"  rf   r:   )rC  r%  r!   r3   r$   s   ` r   visit_tuplezAsStringVisitor.visit_tuple	  sY    tyy>Qtyy|**40155499GTYYGGHJJr   c                T    |j                   r|j                   j                  |       S dS )z*return an astroid.TypeAlias node as string_r4  r$   s     r   visit_typealiaszAsStringVisitor.visit_typealias  "    )-tyy%;;r   c                T    |j                   r|j                   j                  |       S dS )z(return an astroid.TypeVar node as stringri  r4  r$   s     r   visit_typevarzAsStringVisitor.visit_typevar  rk  r   c                Z    |j                   rd|j                   j                  |       z   S dS )z-return an astroid.TypeVarTuple node as string*r(   r4  r$   s     r   visit_typevartuplez"AsStringVisitor.visit_typevartuple  s'    /3yysTYY%%d++@b@r   c                ~    |j                   dk(  rd}n|j                   }| | j                  ||j                         S )z(return an astroid.UnaryOp node as stringnotznot )rm   r>   operand)r   r%   operators      r   visit_unaryopzAsStringVisitor.visit_unaryop  s=    77eHwwHD33D$,,GHIIr   c                    d|j                   j                  |        d| j                  |j                         }|j                  r | d| j                  |j                         }|S )z&return an astroid.While node as stringzwhile r   r   )rZ   r!   r7   r   r   )r   r%   whiless      r   visit_whilezAsStringVisitor.visit_while#  s\    $))**401T__TYY5O4PQ;;xy)E(FGFr   c                     dj                   fd|j                  D              }d| d j                  |j                         S )z%return an astroid.With node as stringrX   c              3     K   | ]6  \  }}|j                         |xr d |j                         xs dz    8 yw)r   r(   Nrd   )r0   r   vr   s      r   r2   z-AsStringVisitor.visit_with.<locals>.<genexpr>,  sH      
a {{4 !a&Cd188D>2B,C&IrJ
s   <?zwith r   )r3   r   r7   r   )r   r%   r   s   `  r   rJ   zAsStringVisitor.visit_with*  sE    		 
::
 
 ugS!; <==r   c                    |j                   rd|j                   j                  |       z   nd}d|z   }|j                  j                  r|S d| dS )z!yield an ast.Yield node as stringrk   r(   yieldr9   r:   r*   r!   r   is_statementr   r%   yi_valr   s       r   visit_yieldzAsStringVisitor.visit_yield2  sM    48JJ#

))$//B;;##K4&{r   c                    |j                   rd|j                   j                  |       z   nd}d|z   }|j                  j                  r|S d| dS )z+Return an astroid.YieldFrom node as string.rk   r(   z
yield fromr9   r:   r~  r  s       r   visit_yieldfromzAsStringVisitor.visit_yieldfrom;  sM    48JJ#

))$//Bf$;;##K4&{r   c                >    d|j                   j                  |       z   S )zreturn Starred node as stringro  rE   r$   s     r   visit_starredzAsStringVisitor.visit_starredD  s    TZZ&&t,,,r   c                v    d|j                   j                  |        d| j                  |j                         S )z'Return an astroid.Match node as string.zmatch r   )subjectr!   r7   casesr$   s     r   visit_matchzAsStringVisitor.visit_matchH  s3    ++D12#doodjj6Q5RSSr   c                    |j                   rd|j                   j                  |        nd}d|j                  j                  |        | d| j                  |j                         S )z+Return an astroid.MatchCase node as string.r   r(   zcase r   )guardr!   patternr7   r   )r   r%   	guard_strs      r   visit_matchcasezAsStringVisitor.visit_matchcaseL  s`    8<

d4::,,T234	DLL''-.yktyy)*,	
r   c                8    |j                   j                  |       S )z,Return an astroid.MatchValue node as string.rE   r$   s     r   visit_matchvaluez AsStringVisitor.visit_matchvalueT  r   r   c                ,    t        | j                        S )z0Return an astroid.MatchSingleton node as string.)strr*   )r%   s    r   visit_matchsingletonz$AsStringVisitor.visit_matchsingletonX  s     4::r   c                n     |j                   yddj                   fd|j                   D               dS )z/Return an astroid.MatchSequence node as string.z[]r   rX   c              3  @   K   | ]  }|j                          y wr   rd   r0   pr   s     r   r2   z6AsStringVisitor.visit_matchsequence.<locals>.<genexpr>a  s     CQXXd^Crf   r#  )patternsr3   r$   s   ` r   visit_matchsequencez#AsStringVisitor.visit_matchsequence]  s3    == 499CT]]CCDAFFr   c                H    g }|j                   rD|j                  r8|j                   fdt        |j                   |j                        D               |j                  r-|j                  d|j                  j                                 d dj                  |       d S )z.Return an astroid.MatchMapping node as string.c              3  n   K   | ],  \  }}|j                         d |j                          . yw)rp   Nrd   )r0   r   r  r   s      r   r2   z5AsStringVisitor.visit_matchmapping.<locals>.<genexpr>g  s;      #C ::d#$Bqxx~&67#s   25ru   r   rX   r   )keysr  r   ziprestr   r!   r3   )r   r%   mapping_stringss   `  r   visit_matchmappingz"AsStringVisitor.visit_matchmappingc  s    %'99"" #!$))T]];#  99""R		(8(8(>'?#@Atyy123%88r   c                    |j                   t        | d      g }|j                  r$|j                   fd|j                  D               |j                  rY|j
                  rMt        |j                  |j
                        D ]*  \  }}|j                  | d|j                                 , |j                   j                          ddj                  |       dS )z,Return an astroid.MatchClass node as string.z does not have a 'cls' nodec              3  @   K   | ]  }|j                          y wr   rd   r  s     r   r2   z3AsStringVisitor.visit_matchclass.<locals>.<genexpr>u  s      GA$ Grf   r  r9   rX   r:   )
clsAssertionErrorr  r   	kwd_attrskwd_patternsr  r   r!   r3   )r   r%   class_stringsattrr  s   `    r   visit_matchclassz AsStringVisitor.visit_matchclasso  s    88 D6)D!EFF#%==   G GG>>d//!$T^^T5F5F!G Gg$$vQw~~d/C.D%EFG((//$'($))M*B)C1EEr   c                ^    d|j                   r|j                   j                  |        S d S )z+Return an astroid.MatchStar node as string.ro  ri  r4  r$   s     r   visit_matchstarzAsStringVisitor.visit_matchstar{  s0    TYY499##D)@AAC@AAr   c                L   ddl m}m}m} t	        |j
                  |||f      r)|j                  r|j                  j                  |       S dS |j                  r|j                  j                  |       nd |j                  r d|j                  j                  |         S d S )z)Return an astroid.MatchAs node as string.r   )r   r   r   ri  r   r(   )	astroid.nodes.node_classesr   r   r   r   r   r^   r!   r  )r   r%   r   r   r   s        r   visit_matchaszAsStringVisitor.visit_matchas  s     	WVdkkM<#LM-1YY499##D)?C?,0LLt||""4(cB26))dii&&t,-.DF	
ACDF	
r   c                     |j                   t        | d      dj                   fd|j                   D              S )z)Return an astroid.MatchOr node as string.z does not have pattern nodesz | c              3  @   K   | ]  }|j                          y wr   rd   r  s     r   r2   z0AsStringVisitor.visit_matchor.<locals>.<genexpr>  s     @Q!((4.@rf   )r  r  r3   r$   s   ` r   visit_matchorzAsStringVisitor.visit_matchor  s9    ==  D6)E!FGGzz@$--@@@r   c                8    |j                   j                  |       S r   r   r!   r$   s     r   visit_frozensetzAsStringVisitor.visit_frozenset      {{!!$''r   c                8    |j                   j                  |       S r   r  r$   s     r   visit_superzAsStringVisitor.visit_super  r  r   c                    t        |      S r   r  r$   s     r   visit_uninferablez!AsStringVisitor.visit_uninferable      4yr   c                8    |j                   j                  |       S r   )functionr!   r$   s     r   visit_propertyzAsStringVisitor.visit_property      }}##D))r   c                8    |j                   j                  |       S r   )originalr!   r$   s     r   visit_evaluatedobjectz%AsStringVisitor.visit_evaluatedobject  r  r   c                    t        |      S r   r  r$   s     r   visit_unknownzAsStringVisitor.visit_unknown  r  r   N)    )r   r  rA  r  )r+   zConst | NonerA  r  )T)r4   listr   boolrA  r  )r=   r  rA  r  )r=   r  rA  r  )rA  zIterator[str])r%   nodes.FunctionDefr   r  rA  r  )r%   r  rA  r  )r%   znodes.AsyncFunctionDefrA  r  )r%   znodes.ParamSpecrA  r  )r%   zobjects.PartialFunctionrA  r  )r%   znodes.TypeAliasrA  r  )r%   znodes.TypeVarrA  r  )r%   znodes.TypeVarTuplerA  r  )r%   r	   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r   rA  r  )r%   r
   rA  r  )r%   r   rA  r  )r%   r   rA  r  )dr   
__module____qualname____doc__r   r&   r,   r7   r>   r;   rF   rK   rN   rQ   rU   r[   r_   ri   rn   rr   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r  r  r	  rT   r  r  r  r  r  r  r&  r)  r,  r.  r0  r2  r5  r8  r:  r?  rD  rG  rJ  rO  rW  ra  rd  rg  rj  rm  rp  ru  rx  rJ   r  r  r  r  r  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r/   r   r   r   r   &   s   I"<
I"020/"*24
QE+-

0
GA P*N:(
'8
,0	
(4:
)1
67!K
L
&3&,	M
"
H		K<<AJ>-T
'  G
9
FB
A((**r   r   c                    g }| D ]/  \  }}||j                  | d|        |j                  |       1 dj                  |      S )z5return a list of (name, asname) formatted as a stringr   rX   )r   r3   )r   _namesr^   asnames       r   r   r     sT    F  fMMTF$vh/0MM$	 
 99Vr   r  Nr  )r  
__future__r   collections.abcr   typingr   astroidr   r   astroid.nodesr   r  r	   r
   r   r   r   r   r   r   r   r   r   r#   r   r   to_coder/   r   r   <module>r     sX   
 2 " $   #     
~	 ~	B &
!r   