+
    i^g                    Z   ^ RI Ht ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t
 ^ RIHtHtHtHtHtHt ^ RIHtHt ^ RIHt ^ R	IHtHtHtHtHt ^ R
IHt ^ RIH t  ^ RI!H"t" ^ RI#H$t$ ^ RI%H&t&H't'H(t( ]PR                  R8  d   ^ RIH*t* M^ RI+H*t* ]'       dF   ^ RI,H-t- ]P\                  ]P^                  ,          ]P`                  ,          ]Pb                  ,          t2]! RRR7      t3]! RRR7      t4]! RRR7      t5R]6R,          ,          ]7]6R,          R3,          ,          t8 ! R R4      t9R# )    )annotationsN)	GeneratorIterator)cached_property)singledispatch)TYPE_CHECKINGAnyClassVarTypeVarcastoverload)nodesutil)InferenceContext)AstroidErrorInferenceErrorParentMissingErrorStatementMissingUseInferenceDefault)AstroidManagerAsStringVisitor)OP_PRECEDENCE)Position)InferenceErrorInfoInferenceResultInferFn)Self)_base_nodes_NodesTNodeNG)bound_NodesT2_NodesT3.c                     ] tR t^7t$ RtRtR]R&    RtR]R&    RtR]R&    Rt	R]R&   R_t
R]R	&    R_tR]R
&    R_tR]R&    RtR]R&   R R ltR`R R lltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ tR, tR- tR. t] R/ R0 l4       t!] R1 R2 l4       t"R3 R4 lt#R5 R6 lt$R7 R8 lt%]&RaR9 R: ll4       t']&RaR; R< ll4       t']&RaR= R> ll4       t']&RaR? R@ ll4       t'R`RA RB llt'] RC RD l4       t(RE t)RF t*RG t+RH t,RI t-R`RJ RK llt.RL t/RM t0RN RO lt1RP RQ lt2RR RS lt3RT RU lt4RbRV RW llt5R`RX RY llt6RZ R[ lt7R\ R] lt8R^t9R# )cr!   zdA node of the new Abstract Syntax Tree (AST).

This is the base class for all Astroid node classes.
FzClassVar[bool]is_statementoptional_assignis_function	is_lambdazClassVar[tuple[str, ...]]_astroid_fields_other_fields_other_other_fieldsNzInferFn[Self] | None_explicit_inferencec               0    V ^8  d   QhRRRRRRRRRRRR	/# )
   linenoz
int | None
col_offsetparentNodeNG | None
end_linenoend_col_offsetreturnNone )formats   "7/usr/lib/python3/dist-packages/astroid/nodes/node_ng.py__annotate__NodeNG.__annotate__Y   sF            	    #  
     c               	Z    Wn          W n         W0n         W@n         WPn         R V n        R # N)r0   r1   r2   r4   r5   position)selfr0   r1   r2   r4   r5   s   &&&&$$r:   __init__NodeNG.__init__Y   s=     D$F1$D,	
 *.	r=   c               $    V ^8  d   QhRRRRRR/# )r/   contextInferenceContext | Nonekwargsr	   r6   zGenerator[InferenceResult]r8   )r9   s   "r:   r;   r<   {   s$     7 7.7AD7	#7r=   c              +  h  "   Vf   \        4       pMVP                  P                  W4      pV P                  e<    V P                  ! V V3/ VB  F   pV;P                  ^,          un        Vx  K"  	  R# WP                  VP                  VP                  3pWAP                  9   d   VP                  V,           Rj  xL
  R# . p\        4       P                  p\        V P                  ! RRV/VB 4       F  w  rsWv8  g   VP                  VP                  8  d4   VP                  \         P"                  4       \         P"                  x   M2VP                  V4       Vx  V;P                  ^,          un        K  	  \%        V4      VP                  V&   R#   \
         d     EL6i ; i L5i)a  Get a generator of the inferred values.

This is the main entry point to the inference system.

.. seealso:: :ref:`inference`

If the instance has some explicit inference function set, it will be
called instead of the default interface.

:returns: The inferred values.
:rtype: iterable
NrE   r8   )r   extra_contextgetr-   nodes_inferredr   
lookupnamecallcontext	boundnodeinferredr   max_inferable_values	enumerate_infermax_inferredappendr   Uninferabletuple)rA   rE   rG   resultkeyresultslimitis   &&,     r:   inferNodeNG.infer{   s     ?&(G++//>G##/
"66 F
 **a/* L  '')<)<g>O>OP"""'',,,  55"4;;#Iw#I&#IJIAzg44w7K7KKt//0&&&NN6"L""a'" K !&g3 ' 
 -s6   9F28F 4AF2?F0 CF2F-)F2,F--F2c                   V ^8  d   QhRR/# r/   r6   strr8   )r9   s   "r:   r;   r<      s      3 r=   c                   a  \         ;QJ d    V 3R lR 4       F  '       d   K   RM	  RM! V 3R lR 4       4      '       d#   \        S RR4      ;'       g    \        S RR4      # R# )ziGet a name for nice representation.

This is either :attr:`name`, :attr:`attrname`, or the empty string.
c              3  @   <"   T F  qSP                   9  x  K  	  R # 5ir?   )r*   ).0namerA   s   & r:   	<genexpr>#NodeNG.repr_name.<locals>.<genexpr>   s     Q<PD4///<Ps   rd   attrnameFT )rd   rg   )allgetattrrA   s   fr:   	repr_nameNodeNG.repr_name   sK    
 3Q<PQ333Q<PQQQ4,MMj"0MMr=   c                   V ^8  d   QhRR/# r_   r8   )r9   s   "r:   r;   r<      s     
 
 
r=   c           	     	   V P                  4       p\        V 4      P                  pV'       d&   R p\        V4      \        V4      ,           ^,           pMRp\        V4      ^,           p. pV P                  V P
                  ,            F  p\        WR4      p^P\        V4      ,
          V,
          p\        P                  ! V^VR7      P                  R4      p	V	^ ,          .p
V	R,           F"  pV
P                  RV,          V,           4       K$  	  VP                  V RRP                  V
4       24       K  	  VR	VR
VRRRV,          ,           P                  V4      /,          # )z%(cname)s.%(rname)s(%(fields)s)z%(cname)s(%(fields)s)Unknown)indentwidthT   NN =rh   cnamernamefields,
)rl   type__name__lenr+   r*   rj   pprintpformat
splitlinesrT   join)rA   rx   rw   string	alignmentrW   fieldvaluerr   linesinnerlines   &           r:   __str__NodeNG.__str__   s3    T
##6FE
SZ/!3I,FE
QI''$*>*>>>ED3EUOi/ENN5%@KKDQE1XJEb		S9_t34 "MMUG1RWWU^$456 ? UUusY.44V<
 
 	
r=   c                   V ^8  d   QhRR/# r_   r8   )r9   s   "r:   r;   r<      s     
 
# 
r=   c                	    V P                  4       p V P                  pV'       d   RpMRpVR\        V 4      P                  RVRVR\        V 4      /,          #   \         d    ^ p LIi ; i)r   z.<%(cname)s.%(rname)s l.%(lineno)s at 0x%(id)x>z$<%(cname)s l.%(lineno)s at 0x%(id)x>rw   rx   r0   id)rl   
fromlinenoAttributeErrorr{   r|   r   )rA   rx   r0   r   s   &   r:   __repr__NodeNG.__repr__   su     	__F EF;FT$Z((Uf"T(	
 
 	
  	F	s   A A('A(c                    V ^8  d   QhRRRR/# )r/   visitorr   r6   r`   r8   )r9   s   "r:   r;   r<      s      o # r=   c                |    \        VRV P                  P                  P                  4       ,           4      pV! V 4      # )z(Visit this node using the given visitor.visit_)rj   	__class__r|   lower)rA   r   funcs   && r:   acceptNodeNG.accept   s0    w4>>+B+B+H+H+J JKDzr=   c                   V ^8  d   QhRR/# r/   r6   zIterator[NodeNG]r8   )r9   s   "r:   r;   r<      s     
 
. 
r=   c              #     "   V P                    F@  p\        W4      pVf   K  \        V\        \        34      '       d   T Rj  xL
  K<  Vx  KB  	  R Rj  xL
  R#  L L5i)z$Get the child nodes below this node.Nr8   r*   rj   
isinstancelistrV   rA   r   attrs   &  r:   get_childrenNodeNG.get_children   sW     ))E4'D|$u..
 *    	s$   AA#AA#A!A#!A#c                   V ^8  d   QhRR/# )r/   r6   r3   r8   )r9   s   "r:   r;   r<      s     	 	M 	r=   c                    V P                   RRR1,           FA  p\        W4      pV'       g   K  \        V\        \        34      '       d   VR,          u # Vu # 	  R# )z1An optimized version of list(get_children())[-1].Nr   r   s   &  r:   
last_childNodeNG.last_child   sR    ))$B$//E4'D$u..BxK 0 r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<     s     # # 0 #r=   c              #  R   "   V P                   pVe   Vx  VP                   pK  R# 5i)z7Yield parent, grandparent, etc until there are no more.N)r2   rA   r2   s   & r:   node_ancestorsNodeNG.node_ancestors  s'      L]]F !s   %'c                   V ^8  d   QhRR/# r/   r6   boolr8   )r9   s   "r:   r;   r<     s     G G Gr=   c                   a  \         ;QJ d-    V 3R lVP                  4        4       F  '       g   K   R# 	  R# ! V 3R lVP                  4        4       4      # )zCheck if this node is the parent of the given node.

:param node: The node to check if it is the child.
:type node: NodeNG

:returns: Whether this node is the parent of the given node.
c              3  ,   <"   T F	  pSVJ x  K  	  R # 5ir?   r8   )rc   r2   rA   s   & r:   re   #NodeNG.parent_of.<locals>.<genexpr>  s     F0Ef46>0Es   TF)anyr   rA   nodes   f&r:   	parent_ofNodeNG.parent_of  s@     sF0C0C0EFssFsFsF0C0C0EFFFr=   c                   V ^8  d   QhRR/# )r/   r6   _base_nodes.Statementr8   )r9   s   "r:   r;   r<     s     	' 	'0 	'r=   c                    V P                   '       d   \        RV 4      # V P                  '       g   \        V R7      hV P                  P	                  4       # )z}The first parent node, including self, marked as statement node.

:raises StatementMissing: If self has no parent attribute.
r   target)r&   r   r2   r   	statementrk   s   &r:   r   NodeNG.statement  sE    
 /66{{{"$//{{$$&&r=   c                   V ^8  d   QhRR/# )r/   r6   	FrameTyper8   )r9   s   "r:   r;   r<   !  s     # #y #r=   c                j    V P                   f   \        V R7      hV P                   P                  4       # )zThe first parent frame node.

A frame node is a :class:`Module`, :class:`FunctionDef`,
:class:`ClassDef` or :class:`Lambda`.

:returns: The first parent frame node.
:raises ParentMissingError: If self has no parent attribute.
r   )r2   r   framerk   s   &r:   r   NodeNG.frame!  s,     ;;$D11{{  ""r=   c                   V ^8  d   QhRR/# )r/   r6   znodes.LocalsDictNodeNGr8   )r9   s   "r:   r;   r<   .  s     	# 	#- 	#r=   c                r    V P                   '       g   \        V R7      hV P                   P                  4       # )zThe first parent node defining a new scope.

These can be Module, FunctionDef, ClassDef, Lambda, or GeneratorExp nodes.

:returns: The first parent scope node.
r   )r2   r   scoperk   s   &r:   r   NodeNG.scope.  s+     {{{$D11{{  ""r=   c                   V ^8  d   QhRR/# )r/   r6   znodes.Moduler8   )r9   s   "r:   r;   r<   9  s      l r=   c                    V P                   ;p'       g%   \        V \        P                  4      '       g   Q hV # VP                   '       d   VP                   pK   \        V\        P                  4      '       g   Q hV# )zCReturn the root node of the syntax tree.

:returns: The root node.
)r2   r   r   Moduler   s   & r:   rootNodeNG.root9  s]    
 ++%%dELL1111Kmmm]]F&%,,////r=   c                    V P                    F@  p\        W4      pW1J d   V.u # \        V\        \        34      '       g   K6  W9   g   K>  Vu # 	  Rp\        V\        V4      \        V 4      3,          4      h)a'  Search for the sequence that contains this child.

:param child: The child node to search sequences for.
:type child: NodeNG

:returns: The sequence containing the given child node.
:rtype: iterable(NodeNG)

:raises AstroidError: If no sequence could be found that contains
    the given child.
"Could not find %s in %s's childrenr*   rj   r   rV   r   r   reprrA   childr   node_or_sequencemsgs   &&   r:   child_sequenceNodeNG.child_sequenceG  sr     ))E&t3(()) +eT];;-'' * 33$u+tDz!::;;r=   c                    V P                    FA  p\        W4      pWJ d   W!3u # \        V\        \        34      '       g   K6  W9   g   K>  W#3u # 	  Rp\        V\        V4      \        V 4      3,          4      h)a  Find the field of this node that contains the given child.

:param child: The child node to search fields for.
:type child: NodeNG

:returns: A tuple of the name of the field that contains the child,
    and the sequence or node that contains the child node.
:rtype: tuple(str, iterable(NodeNG) or NodeNG)

:raises AstroidError: If no field could be found that contains
    the given child.
r   r   r   s   &&   r:   locate_childNodeNG.locate_childa  sr     ))E&t3(|#+eT];;-.. * 33$u+tDz!::;;r=   c                6    V P                   P                  4       # )zdThe next sibling statement node.

:returns: The next sibling statement node.
:rtype: NodeNG or None
)r2   next_siblingrk   s   &r:   r   NodeNG.next_sibling~  s     {{''))r=   c                6    V P                   P                  4       # )zgThe previous sibling statement.

:returns: The previous sibling statement node.
:rtype: NodeNG or None
)r2   previous_siblingrk   s   &r:   r   NodeNG.previous_sibling  s     {{++--r=   c                   V ^8  d   QhRR/# r/   r6   intr8   )r9   s   "r:   r;   r<     s      C r=   c                V    V P                   f   V P                  4       # V P                   # )zsThe first line that this node appears on in the source code.

Can also return 0 if the line can not be determined.
)r0   _fixed_source_linerk   s   &r:   r   NodeNG.fromlineno  s'     ;;**,,{{r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<     s     # ## #r=   c                    V P                   e   V P                   # V P                  '       g   RpMV P                  4       pVf   V P                  # VP                  # )zrThe last line that this node appears on in the source code.

Can also return 0 if the line can not be determined.
N)r4   r*   r   r   tolineno)rA   r   s   & r:   r   NodeNG.tolineno  sQ     ??&??"###J*J??""""r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<     s      C r=   c                   V P                   pT p Vf(   \        VP                  4       4      pVP                   pK+   T;'       g    ^ #   \         d6    T P                  pT'       d   Tf   TP                   pTP                  pK&   LKi ; i)zAttempt to find the line that this node appears on.

We need this method since not all nodes have :attr:`lineno` set.
Will return 0 if the line number can not be determined.
)r0   nextr   StopIterationr2   )rA   r   _noder2   s   &   r:   r   NodeNG._fixed_source_line  s     {{	',U//12||  yyq  	'[[FT\}}		's   +A B'BBc                    V ^8  d   QhRRRR/# )r/   r0   r   r6   ztuple[int, int]r8   )r9   s   "r:   r;   r<     s     % %# %/ %r=   c                    WP                   3# )zGet a range from the given line number to where this node ends.

:param lineno: The line number to start the range at.

:returns: The range of line numbers that this node belongs to,
    starting at the given line number.
)r   )rA   r0   s   &&r:   block_rangeNodeNG.block_range  s     }}$$r=   c               $    V ^8  d   QhRRRRRR/# )r/   rd   r`   stmtr!   r6   r7   r8   )r9   s   "r:   r;   r<     s!     * *c * *D *r=   c                d    V P                   '       g   Q hV P                   P                  W4       R# )zDefine that the given name is declared in the given statement node.

This definition is stored on the parent scope node.

.. seealso:: :meth:`scope`

:param name: The name that is being defined.

:param stmt: The statement that defines the given name.
N)r2   	set_local)rA   rd   r   s   &&&r:   r   NodeNG.set_local  s$     {{{{d)r=   c               $    V ^8  d   QhRRRRRR/# )r/   klassztype[_NodesT]
skip_klass
SkipKlassTr6   Iterator[_NodesT]r8   )r9   s   "r:   r;   r<     s(            
	 r=   c                	    R # r?   r8   rA   r   r   s   &&&r:   nodes_of_classNodeNG.nodes_of_class      
  r=   c               $    V ^8  d   QhRRRRRR/# )r/   r   z$tuple[type[_NodesT], type[_NodesT2]]r   r   r6   z&Iterator[_NodesT] | Iterator[_NodesT2]r8   )r9   s   "r:   r;   r<     s(     5 535 5 
0	5r=   c                	    R # r?   r8   r  s   &&&r:   r  r    s    
 25r=   c               $    V ^8  d   QhRRRRRR/# )r/   r   z4tuple[type[_NodesT], type[_NodesT2], type[_NodesT3]]r   r   r6   ;Iterator[_NodesT] | Iterator[_NodesT2] | Iterator[_NodesT3]r8   )r9   s   "r:   r;   r<     s.     J JCJ J 
E	Jr=   c                	    R # r?   r8   r  s   &&&r:   r  r    s	    
 GJr=   c               $    V ^8  d   QhRRRRRR/# )r/   r   ztuple[type[_NodesT], ...]r   r   r6   r   r8   )r9   s   "r:   r;   r<     s(        (    
	 r=   c                	    R # r?   r8   r  s   &&&r:   r  r    r  r=   c               $    V ^8  d   QhRRRRRR/# )r/   r   ztype[_NodesT] | tuple[type[_NodesT], type[_NodesT2]] | tuple[type[_NodesT], type[_NodesT2], type[_NodesT3]] | tuple[type[_NodesT], ...]r   r   r6   r  r8   )r9   s   "r:   r;   r<     s0     D D(D D 
EDr=   c              #  2  "   \        W4      '       d   V x  Vf3   V P                  4        F  pVP                  W4       Rj  xL
  K  	  R# V P                  4        F/  p\        W24      '       d   K  VP                  W4       Rj  xL
  K1  	  R#  LO L5i)a  Get the nodes (including this one or below) of the given types.

:param klass: The types of node to search for.

:param skip_klass: The types of node to ignore. This is useful to ignore
    subclasses of :attr:`klass`.

:returns: The node of the given types.
N)r   r   r  )rA   r   r   
child_nodes   &&& r:   r  r    s     & d""J"//1
%44UGGG 2 ++-J*11!00CCC .	 H Ds%   ABBABB	BBc                   V ^8  d   QhRR/# )r/   r6   zlist[nodes.Assign]r8   )r9   s   "r:   r;   r<     s      (: r=   c                	    . # r?   r8   rk   s   &r:   _assign_nodes_in_scopeNodeNG._assign_nodes_in_scope  s    	r=   c              #  	p   "   V P                  4        F  pVP                  4        R j  xL
  K  	  R #  L
5ir?   )r   _get_name_nodes)rA   r  s   & r:   r  NodeNG._get_name_nodes  s-     ++-J!11333 .3s   '646c              #  	&   "   R R j  xL
  R #  L5iNr8   r8   rk   s   &r:    _get_return_nodes_skip_functions'NodeNG._get_return_nodes_skip_functions          c              #  	&   "   R R j  xL
  R #  L5ir  r8   rk   s   &r:   _get_yield_nodes_skip_functions&NodeNG._get_yield_nodes_skip_functions  r  r  c              #  	&   "   R R j  xL
  R #  L5ir  r8   rk   s   &r:   _get_yield_nodes_skip_lambdas$NodeNG._get_yield_nodes_skip_lambdas"  r  r  c                	    R # r?   r8   )rA   r   rd   s   &&&r:   _infer_nameNodeNG._infer_name%  s    r=   c               $    V ^8  d   QhRRRRRR/# )r/   rE   rF   rG   r	   r6   z;Generator[InferenceResult, None, InferenceErrorInfo | None]r8   )r9   s   "r:   r;   r<   )  s$     
 
.
AD
	D
r=   c                    \        RWR7      h)z4We don't know how to resolve a statement by default.z#No inference function for {node!r}.)r   rE   )r   )rA   rE   rG   s   &&,r:   rR   NodeNG._infer)  s    
 1
 	
r=   c                4    \        V P                  4       4      # )zoGet a list of the inferred values.

.. seealso:: :ref:`inference`

:returns: The inferred values.
:rtype: list
)r   r\   rk   s   &r:   rO   NodeNG.inferred2  s     DJJL!!r=   c                    V # )zInstantiate an instance of the defined class.

.. note::

    On anything other than a :class:`ClassDef` this will return self.

:returns: An instance of the defined class.
:rtype: object
r8   rk   s   &r:   instantiate_classNodeNG.instantiate_class<  s	     r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<   H  s       r=   c                    R# )zCheck if this node inherits from the given type.

:param node: The node defining the base to look for.
    Usually this is a :class:`Name` node.
:type node: NodeNG
Fr8   r   s   &&r:   has_baseNodeNG.has_baseH  s     r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<   Q  s      $ r=   c                    R# )zrWhether this node defines something that is callable.

:returns: Whether this defines something that is callable.
Fr8   rk   s   &r:   callableNodeNG.callableQ  s    
 r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<   X  s      4 r=   c                	    R # )Fr8   )rA   r   s   &&r:   eq	NodeNG.eqX  s    r=   c                   V ^8  d   QhRR/# r_   r8   )r9   s   "r:   r;   r<   [  s     ' '3 'r=   c                "    \        4       ! V 4      # )z.Get the source code that this node represents.r   rk   s   &r:   	as_stringNodeNG.as_string[  s     &&r=   c                   V ^8  d   QhRR/# r_   r8   )r9   s   "r:   r;   r<   _  s     J J 
Jr=   c                6  aaaaaaa
 \         RV3R ll4       o
S
P                  \        4      S
P                  \        4      RV
V3R ll4       4       pS
P                  \        4      RV
VVVVV3R ll4       p. p	S
! W	\        4       4       RP                  V	4      # )ar  Get a string representation of the AST from this node.

:param ids: If true, includes the ids with the node type names.
:type ids: bool

:param include_linenos: If true, includes the line numbers and
    column offsets.
:type include_linenos: bool

:param ast_state: If true, includes information derived from
    the whole AST like local and global variables.
:type ast_state: bool

:param indent: A string to use to indent the output string.
:type indent: str

:param max_depth: If set to a positive integer, won't return
    nodes deeper than max_depth in the string.
:type max_depth: int

:param max_width: Attempt to format the output string to stay
    within this number of characters, but can exceed it under some
    circumstances. Only positive integer values are valid, the default is 80.
:type max_width: int

:returns: The string representation of the AST.
:rtype: str
rh   c           	     8  < \         P                  ! V \        S\        V4      ,
          ^4      R7      P	                  R4      pVP                  V^ ,          4       TP                  VR,           Uu. uF  qcV,           NK  	  up4       \        V4      ^8g  # u upi )zjOutputs a representation of a non-tuple/list, non-node that's
contained within an AST, including strings.
)rr   Trs   )r~   r   maxr}   r   rT   extend)r   rW   done
cur_indentdepthr   r   	max_widths   &&&&&  r:   
_repr_tree$NodeNG.repr_tree.<locals>._repr_tree  s    
 NNC	C
O ;Q?j  MM%(#MMrC,,CDu:?" Ds   1Bc                  < VS,          pVP                  R4       V '       g   RpEM\        V 4      ^8X  d   S! V ^ ,          WW44      pM\        V 4      ^8X  dj   S! V ^ ,          WW44      pV'       g   VP                  R4       M"VP                  R4       VP                  V4       S! V ^,          WW44      ;'       g    TpMmVP                  R4       VP                  V4       V RR	  F/  pS! WaW#V4       VP                  R4       VP                  V4       K1  	  S! V R	,          WW44       RpVP                  R4       V# )
zGOutputs a representation of a sequence that's contained within an
AST.
[Fz, rz   
NT]r   )rT   r}   )	r   rW   rB  rC  rD  brokenr   rF  rq   s	   &&&&&  r:   	_repr_seq#NodeNG.repr_tree.<locals>._repr_seq  s    & JMM#Ta#DGV:MTa#DGV:MMM$'MM%(MM*-#DGV:MWWQWd#j)!#2YEudFMM%(MM*- ' 48V:EMM#Mr=   c           	       < W9   d=   VP                  SR\        V 4      P                   R\        V 4       2,           4       R# VP	                  V 4       S'       d   VS8  d   VP                  R4       R# V^,          pVS,          pS
'       d6   VP                  \        V 4      P                   R\        V 4      R R24       M'VP                  \        V 4      P                   R24       . pS'       d   VP                  R4       VP                  V P                  4       VP                  V P                  4       S	'       d   VP                  V P                  4       V'       g   RpM\        V4      ^8X  d7   VP                  V^ ,           R	24       S! \        W^ ,          4      WW44      pMVP                  R
4       VP                  V4       VRR  FU  pVR8X  d   K  VP                  V R	24       S! \        W4      WW44       VP                  R4       VP                  V4       KW  	  VP                  VR,           R	24       S! \        WR,          4      WW44       RpVP                  R4       V# )z4Outputs a strings representation of an astroid node.z<Recursion on z	 with id=Fz...z<0xxz>(
(rv   rJ  Ndocrz   T))r0   r1   r   )rT   r{   r|   r   addrA  r+   r*   r,   r}   rj   )r   rW   rB  rC  rD  ry   rL  r   rF  	ast_stateidsinclude_linenosrq   	max_depths   &&&&&   r:   
_repr_node$NodeNG.repr_tree.<locals>._repr_node  s    |~d4j.A.A-B)BtH:VV HHTNUY.e$QJE& Jd!4!4 5SD!DIJd!4!4 5Q78F67MM$,,-MM$../d667V!1o.#D),fJ d#j)#CR[E~ MMUG1+.wt3V:UMM%(MM*- ) A./744fJVMM#Mr=   )rh   rt   )_singledispatchregisterrV   r   r!   setr   )rA   rV  rW  rU  rq   rX  rE  rM  rY  rW   rF  s   &ffffff   @r:   	repr_treeNodeNG.repr_tree_  s    P 
		# 
		# 
		U	#			T	"	 
# 
$	> 
		V	$/	 /	 
%/	b 4'wwvr=   c                   V ^8  d   QhRR/# )r/   rE   rF   r8   )r9   s   "r:   r;   r<     s        "9  r=   c                "    \         P                  # )a  Determine the boolean value of this node.

The boolean value of a node can have three
possible values:

    * False: For instance, empty data structures,
      False, empty strings, instances which return
      explicitly False from the __nonzero__ / __bool__
      method.
    * True: Most of constructs are True by default:
      classes, functions, modules etc
    * Uninferable: The inference engine is uncertain of the
      node's value.

:returns: The boolean value of this node.
:rtype: bool or Uninferable
)r   rU   )rA   rE   s   &&r:   
bool_valueNodeNG.bool_value  s    $ r=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<     s     N Ns Nr=   c                	r    \         P                  ! V P                  P                  \	        \         4      4      # r?   )r   rJ   r   r|   r}   rk   s   &r:   op_precedenceNodeNG.op_precedence  s$      !8!8#m:LMMr=   c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r<     s      T r=   c                	    R # )Tr8   rk   s   &r:   op_left_associativeNodeNG.op_left_associative  s    r=   )r1   r5   r4   r0   r2   r@   r8   r?   ).)FFFz   r   P   ):r|   
__module____qualname____firstlineno____doc__r&   __annotations__r'   r(   r)   r*   r+   r,   r-   rB   r\   rl   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#  rR   rO   r+  r/  r3  r7  r;  r^  rb  rf  rj  __static_attributes__r8   r=   r:   r!   r!   7   s   
 $)L.(2 ^  #(K'1 %I~% 24O.3 02M,1:5727704-4 D7r
4
$

	#G	'#	#<4<:*.   # # &%*     5 5 J J    DB  4
"
'JX (N r=   )      ):
__future__r   r~   syscollections.abcr   r   	functoolsr   r   r[  typingr   r	   r
   r   r   r   astroidr   r   astroid.contextr   astroid.exceptionsr   r   r   r   r   astroid.managerr   astroid.nodes.as_stringr   astroid.nodes.constr   astroid.nodes.utilsr   astroid.typingr   r   r   version_infor   typing_extensionsastroid.nodesr   FunctionDefr   ClassDefLambdar   r    r#   r$   r{   rV   r   r!   r8   r=   r:   <module>r     s   
 #  
 / % 7    ,  + 3 - ( G Gw& )!!ELL05>>AELLPI )8
,:X.:X.DN"U4>3+>%??
N Nr=   