
    c_                        d 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
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dS )z+This module renders Astroid nodes as string    )annotations)Iterator)TYPE_CHECKING)Const)MatchMatchAs	MatchCase
MatchClassMatchMappingMatchOrMatchSequenceMatchSingleton	MatchStar
MatchValueUnknown c                     e Zd ZdZdudvdZdwdZdxd
ZdydzdZdyd{dZd|dZ	dwdZ
dwdZdwdZdwdZdwdZdwdZdwdZdwdZdwdZdwdZdwdZdwdZdwdZdwd Zdwd!Zdwd"Zdwd#Zdwd$Zdwd%Zdwd&Zdwd'Zdwd(Zdwd)Z dwd*Z!d}d,Z"dwd-Z#dwd.Z$dwd/Z%dwd0Z&dwd1Z'dwd2Z(dwd3Z)dwd4Z*dwd5Z+dwd6Z,dwd7Z-dwd8Z.dwd9Z/dwd:Z0dwd;Z1dwd<Z2dwd=Z3dwd>Z4dwd?Z5dwd@Z6dwdAZ7dwdBZ8dwdCZ9dwdDZ:dwdEZ;dwdFZ<dwdGZ=dwdHZ>dwdIZ?dwdJZ@dwdKZAdwdLZBdwdMZCdwdNZDdwdOZEdwdPZFdwdQZGdwdRZHdwdSZIdwdTZJdwdUZKdwdVZLdwdWZMd~dZZNdd\ZOdd^ZPeQdd`            ZRddbZSdddZTddfZUddhZVddjZWddlZXdm ZYdn ZZdo Z[dp Z\dq Z]ddsZ^dtS )AsStringVisitorz?Visitor to render an Astroid node as a valid python code string    indentstrc                    || _         d S Nr   )selfr   s     7lib/python3.11/site-packages/astroid/nodes/as_string.py__init__zAsStringVisitor.__init__&   s    !    returnc                ^    |                     |                               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   doc_nodeConst | Nonec                |    |sdS d                     | j        |j                            dt                              S )z7Stop newlines in docs being indented by self._stmt_list z
{}"""{}"""r!   )formatr   valuer#   r$   )r   r(   s     r   _docs_dedentzAsStringVisitor._docs_dedent-   s@     	2$$K//kBB
 
 	
r   Tstmtslistboolc                     d                     d  fd|D             D                       }|s|S  j        |                    dd j        z             z   S )z return a list of nodes to stringr!   c              3     K   | ]}||V  	d S r    ).0nstrs     r   	<genexpr>z-AsStringVisitor._stmt_list.<locals>.<genexpr>8   s;       #
 #
#
#
 #
 #
 #
 #
 #
r   c                :    g | ]}|                               S r4   r"   r5   nr   s     r   
<listcomp>z.AsStringVisitor._stmt_list.<locals>.<listcomp>9   s#    <<<ahhtnn<<<r   )joinr   r#   )r   r/   r   	stmts_strs   `   r   
_stmt_listzAsStringVisitor._stmt_list6   sz     #
 #
<<<<e<<<#
 #
 #
 
 
	  	{Y..tTDK5GHHHHr   is_leftc                    |                      |||          rd|                    |            dS |                    |           S )z<Wrap child in parens only if required to keep same semantics())_should_wrapr"   )r   r&   childr@   s       r   _precedence_parensz"AsStringVisitor._precedence_parens@   sK    T5'22 	-,u||D)),,,,||D!!!r   c                    |                                 }|                                 }||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)op_precedenceop_left_associative)r   r&   rE   r@   node_precedencechild_precedences         r   rD   zAsStringVisitor._should_wrapG   so    
 ,,.. ..00-- 	4 //	433555	 4ur   c                <    d|j                             |            S )Nzawait r-   r"   r%   s     r   visit_awaitzAsStringVisitor.visit_await_   s     1
))$//111r   c                2    d|                      |           S Nasync )
visit_withr%   s     r   visit_asyncwithzAsStringVisitor.visit_asyncwithb   s    /--///r   c                2    d|                      |           S rP   )	visit_forr%   s     r   visit_asyncforzAsStringVisitor.visit_asyncfore   s    .t,,...r   c                *    |                                 S )z)return an astroid.Function node as string)format_argsr%   s     r   visit_argumentszAsStringVisitor.visit_argumentsh   s    !!!r   c                ,    |                      |          S )z(return an astroid.AssAttr node as stringvisit_attributer%   s     r   visit_assignattrz AsStringVisitor.visit_assignattrl       ##D)))r   c                    |j         r8d|j                            |            d|j                             |            S d|j                            |            S )z'return an astroid.Assert node as stringzassert , )failtestr"   r%   s     r   visit_assertzAsStringVisitor.visit_assertp   sa    9 	POTY--d33OOty7G7G7M7MOOO1))$//111r   c                    |j         S )z(return an astroid.AssName node as stringnamer%   s     r   visit_assignnamez AsStringVisitor.visit_assignnamev   
    yr   c                     d                      fd|j        D                       }| d|j                                        S )z'return an astroid.Assign node as string = c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z/AsStringVisitor.visit_assign.<locals>.<genexpr>|   s-      >>A$>>>>>>r   )r=   targetsr-   r"   )r   r&   lhss   `  r   visit_assignzAsStringVisitor.visit_assignz   sO    jj>>>>>>>>>33$*++D11333r   c                    |j                             |            d|j         d|j                            |            S )z*return an astroid.AugAssign node as string )targetr"   opr-   r%   s     r   visit_augassignzAsStringVisitor.visit_augassign   s@    +$$T**PPTWPPtz7H7H7N7NPPPr   c                    |j                             |           }|j                            |           }|j        | d| S | d| d|j                            |            S )z*Return an astroid.AugAssign node as stringN: rj   )rq   r"   
annotationr-   )r   r&   rq   rv   s       r   visit_annassignzAsStringVisitor.visit_annassign   sx     ##D))_++D11
: 	-,,
,,,DDJDD4:+<+<T+B+BDDDr   c                    |                      ||j                  }|                      ||j        d          }|j        dk    r| |j         | S | d|j         d| S )z&return an astroid.BinOp node as stringFr@   **rp   )rF   leftrightrr   )r   r&   r{   r|   s       r   visit_binopzAsStringVisitor.visit_binop   sy    &&tTY77''dj%'HH7d? 	-,DG,U,,,****5***r   c                j      fdj         D             }dj         d                    |          S )z'return an astroid.BoolOp node as stringc                >    g | ]}                     |           S r4   rF   )r5   r;   r&   r   s     r   r<   z0AsStringVisitor.visit_boolop.<locals>.<listcomp>   s,    MMMAT,,T1557MMMr   rp   )valuesrr   r=   )r   r&   r   s   `` r   visit_boolopzAsStringVisitor.visit_boolop   s@    MMMMMMMMDG$$V,,,r   c                    dS )z&return an astroid.Break node as stringbreakr4   r%   s     r   visit_breakzAsStringVisitor.visit_break   s    wr   c                                           ||j                  } fd|j        D             }|j        r fd|j        D             }ng }|                    |           | dd                    |           dS )z%return an astroid.Call node as stringc                :    g | ]}|                               S r4   r9   )r5   argr   s     r   r<   z.AsStringVisitor.visit_call.<locals>.<listcomp>   s%    666S

4  666r   c                :    g | ]}|                               S r4   r9   )r5   kwargr   s     r   r<   z.AsStringVisitor.visit_call.<locals>.<listcomp>   s%    FFFuT**FFFr   rB   r`   rC   )rF   funcargskeywordsextendr=   )r   r&   expr_strr   r   s   `    r   
visit_callzAsStringVisitor.visit_call   s    **4;;6666DI666= 	FFFFFFFHHHH//TYYt__////r   c           	         |j         r|j                                        nd} fd|j        D             }|j        rD|                                s0|                    d|j                                       z              | fd|j        D             z  }|rdd                    |           dnd}                     |j	                  }d
                    ||j        ||                     |j                            S )	z)return an astroid.ClassDef node as stringr+   c                :    g | ]}|                               S r4   r9   r:   s     r   r<   z2AsStringVisitor.visit_classdef.<locals>.<listcomp>   s#    3331333r   z
metaclass=c                :    g | ]}|                               S r4   r9   r:   s     r   r<   z2AsStringVisitor.visit_classdef.<locals>.<listcomp>   s#    777A$777r   rB   r`   rC   z

{}class {}{}:{}
{}
)
decoratorsr"   bases
_metaclasshas_metaclass_hackappendr   r=   r.   r(   r,   rf   r?   body)r   r&   decorater   args_strdocss   `     r   visit_classdefzAsStringVisitor.visit_classdef   s   37?J4?))$///3333
333? 	E4#:#:#<#< 	EKKt'='=d'C'CCDDD77777777-19)tyy))))r  //*11di41K1K
 
 	
r   c                     d                      fdj        D                       }                     j                   d| S )z(return an astroid.Compare node as stringrp   c              3  X   K   | ]$\  }}| d                      |d           V  %dS )rp   Fry   Nr   )r5   rr   exprr&   r   s      r   r7   z0AsStringVisitor.visit_compare.<locals>.<genexpr>   s^       
 
D HHD++D$+FFHH
 
 
 
 
 
r   )r=   opsrF   r{   )r   r&   rhs_strs   `` r   visit_comparezAsStringVisitor.visit_compare   sl    (( 
 
 
 
 
 H
 
 
 
 
 ))$	::FFWFFFr   c                     d                      fd|j        D                       }d|j                                        d|j                                        | }|j        rdnd | S )z.return an astroid.Comprehension node as stringr+   c              3  H   K   | ]}d |                                V  dS ) if Nr9   r:   s     r   r7   z6AsStringVisitor.visit_comprehension.<locals>.<genexpr>   s6      @@!-QXXd^^--@@@@@@r   zfor z in rQ   )r=   ifsrq   r"   iteris_async)r   r&   r   	generateds   `   r   visit_comprehensionz#AsStringVisitor.visit_comprehension   s    gg@@@@tx@@@@@V4;--d33VV9I9I$9O9OVQTVV	"m3((@Y@@@r   c                J    |j         t          u rdS t          |j                   S )z&return an astroid.Const node as stringz...)r-   Ellipsisreprr%   s     r   visit_constzAsStringVisitor.visit_const   s&    :! 	5DJr   c                    dS )z)return an astroid.Continue node as stringcontinuer4   r%   s     r   visit_continuezAsStringVisitor.visit_continue   s    zr   c                V     dd                      fd|j        D                        S )z'return an astroid.Delete node as stringzdel r`   c              3  B   K   | ]}|                               V  d S r   r9   r5   rE   r   s     r   r7   z/AsStringVisitor.visit_delete.<locals>.<genexpr>   s/      MMuT 2 2MMMMMMr   )r=   rl   r%   s   ` r   visit_deletezAsStringVisitor.visit_delete   s4    OdiiMMMMMMMMMOOOr   c                ,    |                      |          S )z(return an astroid.DelAttr node as stringr[   r%   s     r   visit_delattrzAsStringVisitor.visit_delattr   r^   r   c                    |j         S )z(return an astroid.DelName node as stringre   r%   s     r   visit_delnamezAsStringVisitor.visit_delname   rh   r   c                V     dd                      fd|j        D                       z  S )z+return an astroid.Decorators node as stringz@%s
z
@c              3  B   K   | ]}|                               V  d S r   r9   )r5   itemr   s     r   r7   z3AsStringVisitor.visit_decorators.<locals>.<genexpr>   s/      #M#M$DKK$5$5#M#M#M#M#M#Mr   )r=   nodesr%   s   ` r   visit_decoratorsz AsStringVisitor.visit_decorators   s1    #M#M#M#M$*#M#M#MMMMMr   c                X    dd                     |                     |                    z  S )z%return an astroid.Dict node as string{%s}r`   )r=   _visit_dictr%   s     r   
visit_dictzAsStringVisitor.visit_dict   s'    		$"2"24"8"89999r   Iterator[str]c              #     K   |j         D ]F\  }}|                    |           }|                    |           }|dk    r||z   V  =| d| V  Gd S )Nrz   ru   )itemsr"   )r   r&   keyr-   s       r   r   zAsStringVisitor._visit_dict   s      * 	( 	(JC**T""CLL&&Ed{ (Ek!!!!''''''''	( 	(r   c                    dS )Nrz   r4   r%   s     r   visit_dictunpackz AsStringVisitor.visit_dictunpack   s    tr   c                     d                     |j                                       |j                                       d                     fd|j        D                                 S )z)return an astroid.DictComp node as stringz{{{}: {} {}}}rp   c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z1AsStringVisitor.visit_dictcomp.<locals>.<genexpr>   s-      ==QXXd^^======r   )r,   r   r"   r-   r=   
generatorsr%   s   ` r   visit_dictcompzAsStringVisitor.visit_dictcomp   se    %%HOOD!!Jd##HH====T_=====
 
 	
r   c                6    |j                             |           S )z(return an astroid.Discard node as stringrM   r%   s     r   
visit_exprzAsStringVisitor.visit_expr       z  &&&r   c                    dS )z'dummy method for visiting an Empty noder+   r4   r%   s     r   visit_emptynodezAsStringVisitor.visit_emptynode       rr   c                   |j         r^|j        r9d|j                             |            d|j                            |            }n d|j                             |            }nd}| d|                     |j                   S )Nzexcept  as except:
)typerf   r"   r?   r   )r   r&   excss      r   visit_excepthandlerz#AsStringVisitor.visit_excepthandler   s    9 	y :U!1!1$!7!7UUTY=M=Md=S=SUU9!1!1$!7!799D774??4955777r   c                    dS )zreturn an Empty node as stringr+   r4   r%   s     r   visit_emptyzAsStringVisitor.visit_empty
  r   r   c                   d                     |j                            |           |j                            |           |                     |j                            }|j        r| d|                     |j                   }|S )z$return an astroid.For node as stringzfor {} in {}:
{}
else:
)r,   rq   r"   r   r?   r   orelse)r   r&   forss      r   rU   zAsStringVisitor.visit_for  s    "))Kt$$di&6&6t&<&<doodi>X>X
 
 ; 	DCCT__T[%A%ACCDr   c                v    d                     d|j        p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  s;    "))4:?#dl2N4:4N4N
 
 	
r   c                |     d                      fd|j        D                       }dD ]}||vr n	d|z   |z   |z   S )Nr+   c              3     K   | ]u}t          |          j        d k    rDt          |j                  dd                             dd                              dd          n|                              V  vdS )r      {z{{}z}}N)r   __name__r   r-   r#   r"   )r5   r-   r   s     r   r7   z2AsStringVisitor.visit_joinedstr.<locals>.<genexpr>  s       
 
  E{{#w.GDad#WS$T 2 2 2 5:LL4F4F
 
 
 
 
 
r   )'""""z'''f)r=   r   )r   r&   stringquotes   `   r   visit_joinedstrzAsStringVisitor.visit_joinedstr  s~     
 
 
 
 
 
 
 
 
" . 	 	EF"  U{V#e++r   c                    |j                             |           }|j        r%|j        dk    r|dt          |j                  z   z  }|j        r(|d|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_formattedvalue5  s    ""4((? 	1t!3 	1cC0000F 	@ cD,33D99!B$???Fr   c           
     V   |j         r|j                             |           nd}|                     |j                  }d}|j        r!d|j                                        z   }|dz   }d}||||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_stringrf   r   r?   r   )r   r&   keywordr   r   trailerreturn_annotation
def_formats           r   handle_functiondefz"AsStringVisitor.handle_functiondef@  s    37?J4?))$///  //< 	. &)?)?)A)A A'#-G,
IIT""OODI&&
 
 	
r   c                .    |                      |d          S )z,return an astroid.FunctionDef node as stringdefr  r%   s     r   visit_functiondefz!AsStringVisitor.visit_functiondefS  s    &&tU333r   c                .    |                      |d          S )z.return an astroid.AsyncFunction node as stringz	async defr	  r%   s     r   visit_asyncfunctiondefz&AsStringVisitor.visit_asyncfunctiondefW  s    &&t[999r   c                     d                     |j                                       d                     fd|j        D                                 S )z-return an astroid.GeneratorExp node as stringz({} {})rp   c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z5AsStringVisitor.visit_generatorexp.<locals>.<genexpr>^  -      +T+TqAHHTNN+T+T+T+T+T+Tr   r,   eltr"   r=   r   r%   s   ` r   visit_generatorexpz"AsStringVisitor.visit_generatorexp[  Q    HOOD!!388+T+T+T+TDO+T+T+T#T#T
 
 	
r   c                    |                      ||j                  }|                                rd| d}| d|j         S )z(return an astroid.Getattr node as stringrB   rC   r   )rF   r   isdigitattrname)r   r&   r{   s      r   r\   zAsStringVisitor.visit_attributea  sL    &&tTY77<<>> 	t;;;D(((((r   c                <    dd                     |j                   S )z'return an astroid.Global node as stringzglobal r`   r=   r   r%   s     r   visit_globalzAsStringVisitor.visit_globalh  s    04:..000r   c                   d|j                             |            d|                     |j                   g}|                                r3|                    d|                     |j        d                      n7|j        r0|                    d|                     |j                              d                    |          S )z#return an astroid.If node as stringzif r   elFr   else:
r!   )rb   r"   r?   r   has_elif_blockr   r   r=   )r   r&   r   s      r   visit_ifzAsStringVisitor.visit_ifl  s    LTY%%d++LL	0J0JLLM   	AJJHDOODKOFFHHIIII[ 	AJJ?!=!=??@@@yy~~r   c           	         d                     |                     ||j        d          |                     ||j        d          |                     ||j        d                    S )z&return an astroid.IfExp node as stringz{} if {} else {}Try   F)r,   rF   r   rb   r   r%   s     r   visit_ifexpzAsStringVisitor.visit_ifexpu  sh    !((##D$)T#BB##D$)T#BB##D$+u#EE
 
 	
r   c                0    dt          |j                   S )z'return an astroid.Import node as stringzimport )r   r   r%   s     r   visit_importzAsStringVisitor.visit_import}  s    5
33555r   c                    |j         d|j                            |            S |j          d|j                            |            S )z(return an astroid.Keyword node as stringNrz   =)r   r-   r"   r%   s     r   visit_keywordzAsStringVisitor.visit_keyword  sP    8 	21
))$//111(66TZ..t44666r   c                    |j                             |           }|j                            |           }|rd| d| S d| S )z'return an astroid.Lambda node as stringzlambda ru   zlambda: )r   r"   r   )r   r&   r   r   s       r   visit_lambdazAsStringVisitor.visit_lambda  sX    y%%y%% 	,+T++T+++ $   r   c                X     dd                      fd|j        D                        dS )z%return an astroid.List node as string[r`   c              3  B   K   | ]}|                               V  d S r   r9   r   s     r   r7   z-AsStringVisitor.visit_list.<locals>.<genexpr>  /      GGEU\\$//GGGGGGr   ]r=   eltsr%   s   ` r   
visit_listzAsStringVisitor.visit_list  s7    J499GGGGTYGGGGGJJJJr   c                     d                     |j                                       d                     fd|j        D                                 S )z)return an astroid.ListComp node as stringz[{} {}]rp   c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z1AsStringVisitor.visit_listcomp.<locals>.<genexpr>  r  r   r  r%   s   ` r   visit_listcompzAsStringVisitor.visit_listcomp  r  r   c                     |j         rd|j         j         dnd}|d                     fd|j        D                       z   dz   S )z'return an astroid.Module node as stringr   z"""

r+   r!   c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z/AsStringVisitor.visit_module.<locals>.<genexpr>  s-      BB1BBBBBBr   z

)r(   r-   r=   r   )r   r&   r   s   `  r   visit_modulezAsStringVisitor.visit_module  sX    59]J1T](1111diiBBBB	BBBBBBVKKr   c                    |j         S )z%return an astroid.Name node as stringre   r%   s     r   
visit_namezAsStringVisitor.visit_name  rh   r   c                x    |j                             |           }|j                            |           }| d| S )z.Return an assignment expression node as stringz := )rq   r"   r-   )r   r&   rq   r-   s       r   visit_namedexprzAsStringVisitor.visit_namedexpr  s@    ##D))
!!$''%%e%%%r   c                <    dd                     |j                   S )z)return an astroid.Nonlocal node as stringz	nonlocal r`   r  r%   s     r   visit_nonlocalzAsStringVisitor.visit_nonlocal  s    2499TZ00222r   c                    dS )z%return an astroid.Pass node as stringpassr4   r%   s     r   
visit_passzAsStringVisitor.visit_pass  s    vr   c                    |j         r\|j        r8d|j                             |            d|j                            |            S d|j                             |            S dS )z&return an astroid.Raise node as stringzraise z from raise)exccauser"   r%   s     r   visit_raisezAsStringVisitor.visit_raise  sl    8 	4z WV 5 5VVTZ=N=Nt=T=TVVV3DHOOD11333wr   c                    |                                 rMt          |j        j                  dk    r0 fd|j        j        D             }dd                    |           S |j        rd|j                                        S dS )z'return an astroid.Return node as stringr   c                :    g | ]}|                               S r4   r9   r   s     r   r<   z0AsStringVisitor.visit_return.<locals>.<listcomp>  s%    DDD5ELL&&DDDr   zreturn r`   r   )is_tuple_returnlenr-   r.  r=   r"   )r   r&   r.  s   `  r   visit_returnzAsStringVisitor.visit_return  s    !! 	/c$*/&:&:Q&> 	/DDDDDJODDDD.TYYt__...: 	76TZ..t44666xr   c                V     dd                      fd|j        D                       z  S )z$return an astroid.Set node as stringr   r`   c              3  B   K   | ]}|                               V  d S r   r9   r   s     r   r7   z,AsStringVisitor.visit_set.<locals>.<genexpr>  s/      !L!L%,,t"4"4!L!L!L!L!L!Lr   r-  r%   s   ` r   	visit_setzAsStringVisitor.visit_set  s1    		!L!L!L!L$)!L!L!LLLLLr   c                     d                     |j                                       d                     fd|j        D                                 S )z(return an astroid.SetComp node as stringz	{{{} {}}}rp   c              3  B   K   | ]}|                               V  d S r   r9   r:   s     r   r7   z0AsStringVisitor.visit_setcomp.<locals>.<genexpr>  r  r   r  r%   s   ` r   visit_setcompzAsStringVisitor.visit_setcomp  sQ    !!HOOD!!388+T+T+T+TDO+T+T+T#T#T
 
 	
r   c                    |j         r|j                             |           nd}|j        r|j                            |           nd}|j        r|j                            |           nd}|r
| d| d| S | d| S )z&return an astroid.Slice node as stringr+   r   )lowerr"   upperstep)r   r&   rP  rQ  rR  s        r   visit_slicezAsStringVisitor.visit_slice  s    +/:=
!!$'''2+/:=
!!$'''2)-:ty%%% 	-,,e,,d,,,!!%!!!r   c                4   |j         }|j        j                                        dk    r|j        }|                    |           }|j        j                                        dk    r|j        r
|dd         }|                     ||j                   d| dS )z*return an astroid.Subscript node as stringindextupler   r   r)  r,  )slice	__class__r   rP  r-   r"   r.  rF   )r   r&   idxidxstrs       r   visit_subscriptzAsStringVisitor.visit_subscript  s    j=!''))W4 	)CD!!=!''))W4 	" 	" AbD\F))$
;;GGfGGGGr   c                :   d|                      |j                   g}|j        D ]*}|                    |                    |                      +|j        r0|                    d|                      |j                              d                    |          S )z*return an astroid.TryExcept node as stringztry:
r  r!   )r?   r   handlersr   r"   r   r=   )r   r&   tryshandlers       r   visit_tryexceptzAsStringVisitor.visit_tryexcept  s    533556} 	. 	.GKKt,,----; 	BKK@$//$+">">@@AAAyyr   c                    d                     |                     |j                  |                     |j                            S )z+return an astroid.TryFinally node as stringztry:
{}
finally:
{})r,   r?   r   	finalbodyr%   s     r   visit_tryfinallyz AsStringVisitor.visit_tryfinally  s;    '..OODI&&(G(G
 
 	
r   c                     t          |j                  dk    r$d|j        d                                         dS dd                     fd|j        D                        dS )z&return an astroid.Tuple node as stringr   rB   r   z, )r`   c              3  B   K   | ]}|                               V  d S r   r9   r   s     r   r7   z.AsStringVisitor.visit_tuple.<locals>.<genexpr>  r+  r   rC   )rG  r.  r"   r=   r%   s   ` r   visit_tuplezAsStringVisitor.visit_tuple  sq    ty>>Q 	65ty|**4005555J499GGGGTYGGGGGJJJJr   c                j    |j         dk    rd}n|j         }| |                     ||j                   S )z(return an astroid.UnaryOp node as stringnotznot )rr   rF   operand)r   r&   operators      r   visit_unaryopzAsStringVisitor.visit_unaryop  sB    7e 	HHwHID33D$,GGIIIr   c                    d|j                             |            d|                     |j                   }|j        r| d|                     |j                   }|S )z&return an astroid.While node as stringzwhile r   r   )rb   r"   r?   r   r   )r   r&   whiless      r   visit_whilezAsStringVisitor.visit_while   sf    Q$)**400QQT__TY5O5OQQ; 	HGG)E)EGGFr   c                     d                      fd|j        D                       }d| d                     |j                   S )z%return an astroid.With node as stringr`   c              3     K   | ]:\  }}|                                |rd |                                pdz   V  ;dS )r   r+   Nr9   )r5   r   vr   s      r   r7   z-AsStringVisitor.visit_with.<locals>.<genexpr>	  sl       
 
a {{4  "a&C,C188D>>,C,C&IrJ
 
 
 
 
 
r   zwith r   )r=   r   r?   r   )r   r&   r   s   `  r   rR   zAsStringVisitor.visit_with  sd    		 
 
 
 
:
 
 
 
 
 >u==!;!;===r   c                    |j         rd|j                             |           z   nd}d|z   }|j        j        r|S d| dS )z!yield an ast.Yield node as stringrp   r+   yieldrB   rC   r-   r"   parentis_statementr   r&   yi_valr   s       r   visit_yieldzAsStringVisitor.visit_yield  sR    48JF#
))$////B;# 	K4{{{r   c                    |j         rd|j                             |           z   nd}d|z   }|j        j        r|S d| dS )z+Return an astroid.YieldFrom node as string.rp   r+   z
yield fromrB   rC   rt  rw  s       r   visit_yieldfromzAsStringVisitor.visit_yieldfrom  sR    48JF#
))$////Bf$;# 	K4{{{r   c                <    d|j                             |           z   S )zreturn Starred node as string*rM   r%   s     r   visit_starredzAsStringVisitor.visit_starred!  s    TZ&&t,,,,r   r&   r   c                r    d|j                             |            d|                     |j                   S )z'Return an astroid.Match node as string.zmatch r   )subjectr"   r?   casesr%   s     r   visit_matchzAsStringVisitor.visit_match%  s6    S++D11SSdoodj6Q6QSSSr   r	   c                    |j         rd|j                             |            nd}d|j                            |            | d|                     |j                   S )z+Return an astroid.MatchCase node as string.r   r+   zcase r   )guardr"   patternr?   r   )r   r&   	guard_strs      r   visit_matchcasezAsStringVisitor.visit_matchcase)  st    8<
J44:,,T22444	,DL''-- ,y , ,ty)), ,	
r   r   c                6    |j                             |           S )z,Return an astroid.MatchValue node as string.rM   r%   s     r   visit_matchvaluez AsStringVisitor.visit_matchvalue1  r   r   r   c                *    t          | j                  S )z0Return an astroid.MatchSingleton node as string.)r   r-   )r&   s    r   visit_matchsingletonz$AsStringVisitor.visit_matchsingleton5  s     4:r   r   c                j     |j         dS dd                     fd|j         D                        dS )z/Return an astroid.MatchSequence node as string.Nz[]r)  r`   c              3  B   K   | ]}|                               V  d S r   r9   r5   pr   s     r   r7   z6AsStringVisitor.visit_matchsequence.<locals>.<genexpr>>  s-      CCQXXd^^CCCCCCr   r,  )patternsr=   r%   s   ` r   visit_matchsequencez#AsStringVisitor.visit_matchsequence:  sF    = 	4F499CCCCT]CCCCCFFFFr   r   c                :    g }|j         r@|j        r9|                     fdt          |j         |j                  D                        |j        r0|                    d|j                                                   d d                    |           d S )z.Return an astroid.MatchMapping node as string.c              3  x   K   | ]4\  }}|                                d |                                V  5dS )ru   Nr9   )r5   r   r  r   s      r   r7   z5AsStringVisitor.visit_matchmapping.<locals>.<genexpr>D  s_       # #C ::d##77qxx~~77# # # # # #r   rz   r   r`   r   )keysr  r   ziprestr   r"   r=   )r   r&   mapping_stringss   `  r   visit_matchmappingz"AsStringVisitor.visit_matchmapping@  s    %'9 	 	"" # # # #!$)T];;# # #    9 	B""#@	(8(8(>(>#@#@AAA8tyy1183888r   r
   c                    |j         t          | d          g }|j        r&|                     fd|j        D                        |j        rT|j        rMt          |j        |j                  D ]2\  }}|                    | d|                                           3|j                                         dd	                    |           dS )z,Return an astroid.MatchClass node as string.Nz does not have a 'cls' nodec              3  B   K   | ]}|                               V  d S r   r9   r  s     r   r7   z3AsStringVisitor.visit_matchclass.<locals>.<genexpr>R  s-       G GA$ G G G G G Gr   r$  rB   r`   rC   )
clsAssertionErrorr  r   	kwd_attrskwd_patternsr  r   r"   r=   )r   r&   class_stringsattrr  s   `    r   visit_matchclassz AsStringVisitor.visit_matchclassL  s    8 	G D!E!E!EFFF#%= 	H   G G G G G G GGGG> 	Gd/ 	G!$T^T5F!G!G G Gg$$%E%Ew~~d/C/C%E%EFFFF(//$''EE$))M*B*BEEEEr   r   c                N    d|j         r|j                             |           nd S )z+Return an astroid.MatchStar node as string.r}  _)rf   r"   r%   s     r   visit_matchstarzAsStringVisitor.visit_matchstarX  s,    ATY?49##D)))CAAAr   r   c                "   ddl m}m}m} t	          |j        |||f          r#|j        r|j                            |           ndS |j        r|j                            |           nd |j        rd|j                            |            nd S )z)Return an astroid.MatchAs node as string.r   )r
   r   r   r  r   r+   )	astroid.nodes.node_classesr
   r   r   
isinstanceru  rf   r"   r  )r   r&   r
   r   r   s        r   visit_matchaszAsStringVisitor.visit_matchas\  s     	WVVVVVVVVVdkM<#LMM 	@-1Y?49##D)))C?,0LAt|""4(((c F26)C.di&&t,,...F F	
r   r   c                     |j         t          | d          d                     fd|j         D                       S )z)Return an astroid.MatchOr node as string.Nz does not have pattern nodesz | c              3  B   K   | ]}|                               V  d S r   r9   r  s     r   r7   z0AsStringVisitor.visit_matchor.<locals>.<genexpr>m  s-      @@Q!((4..@@@@@@r   )r  r  r=   r%   s   ` r   visit_matchorzAsStringVisitor.visit_matchori  sN    = 	H D!F!F!FGGGzz@@@@$-@@@@@@r   c                6    |j                             |           S r   ru  r"   r%   s     r   visit_frozensetzAsStringVisitor.visit_frozensetq      {!!$'''r   c                6    |j                             |           S r   r  r%   s     r   visit_superzAsStringVisitor.visit_supert  r  r   c                     t          |          S r   r   r%   s     r   visit_uninferablez!AsStringVisitor.visit_uninferablew      4yyr   c                6    |j                             |           S r   )functionr"   r%   s     r   visit_propertyzAsStringVisitor.visit_propertyz      }##D)))r   c                6    |j                             |           S r   )originalr"   r%   s     r   visit_evaluatedobjectz%AsStringVisitor.visit_evaluatedobject}  r  r   r   c                     t          |          S r   r  r%   s     r   visit_unknownzAsStringVisitor.visit_unknown  r  r   N)r   )r   r   r   r   )r(   r)   r   r   )T)r/   r0   r   r1   r   r   )r@   r1   r   r   )r@   r1   r   r1   )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   
__module____qualname____doc__r   r'   r.   r?   rF   rD   rN   rS   rV   rY   r]   rc   rg   rn   rs   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   r   r   r   r  r
  r  r  r\   r  r  r   r"  r%  r'  r/  r2  r5  r7  r9  r;  r>  rC  rH  rK  rN  rS  r[  r`  rc  rf  rk  rn  rR   ry  r{  r~  r  r  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r4   r   r   r   r   #   sm       II" " " " "< < < <
 
 
 
I I I I I" " " " "   02 2 2 20 0 0 0/ / / /" " " "* * * *2 2 2 2   4 4 4 4
Q Q Q QE E E E+ + + +- - - -
   
0 
0 
0 
0
 
 
 
G G G GA A A A          P P P P* * * *   N N N N: : : :( ( ( (   
 
 
 
' ' ' '   8 8 8 8      
 
 
 
, , , ,0	 	 	 	
 
 
 
&4 4 4 4: : : :
 
 
 
) ) ) )1 1 1 1   
 
 
 
6 6 6 67 7 7 7! ! ! !K K K K
 
 
 
L L L L
   & & & &3 3 3 3      	 	 	 	M M M M
 
 
 
" " " "
H 
H 
H 
H   
 
 
 
K K K KJ J J J   > > > >      - - - -T T T T
 
 
 
' ' ' '    \G G G G
9 
9 
9 
9
F 
F 
F 
FB B B B
 
 
 
A A A A( ( (( ( (  * * ** * *     r   r   r   r   c                    g }| D ]7\  }}||                     | d|            "|                     |           8d                    |          S )z5return a list of (name, asname) formatted as a stringNr   r`   )r   r=   )r   _namesrf   asnames       r   r   r     sl    F    f 	 MMT//v//0000MM$99Vr   r   Nr  )r  
__future__r   collections.abcr   typingr   astroid.nodesr   r  r   r   r	   r
   r   r   r   r   r   r   r   r$   r   r   to_coder4   r   r   <module>r     s@  
 2 1 " " " " " " $ $ $ $ $ $             ######                           
^	 ^	 ^	 ^	 ^	 ^	 ^	 ^	B    /&
!
!r   