+
    i                   *  a  0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHtHtHtHtHt ^ RIHt ^ RI	HtHtHtHtHt ^ RIHtHtHt ^ RIHtHt ^ RIH t H!t!H"t" ^ R	I#H$t$H%t%H&t& ^ R
I'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2 ^ RI3H4t4 ^ RI5H6t6 ^ RI7H8t8 ^ RI9H:t: ^ RI;H<t< ^ RI=H>t> ^ RI?H@t@HAtAHBtBHCtC ]P                  R8  d   ^ RI	HEtE M^ RIFHEtE ]'       d   ^ RIHGtG ^ RI7HHtH ^ RI;HItI R R ltJ]	P                  ! R]<R7      tL]	P                  ! R]P                  R7      tN]R,          tO]]L]O]%R,          ]P]Q,          R,          .]3,          tR]]L]%R,          .]]B]N,          ,          3,          tS]]L]%R,          .]]BR]AR,          3,          3,          tT]]L]U.]@3,          tV]P                  RR R  ll4       tXRR! R" lltY]Z! 4       t[RR# R$ llt\RR% R& llt]RR' R( llt^ ! R) R*]8P                  ]]P                  R+7      ta ! R, R]8P                  ]8P                  ]8P                  4      td ! R- R.]8P                  ]8P                  ]8P                  4      te ! R/ R0]8P                  ]8P                  4      tfR1tg ! R2 R3]8P                  4      tiR4 tjRR5 R6 lltkRR7 R8 lltl ! R9 R]8P                  ]8P                  4      tm ! R: R;]8P                  4      to ! R< R=]8P                  ]8P                  4      tp ! R> R?]8P                  ]8P                  4      tq ! R@ RA]8P                  ]8P                  ]8P                  4      ts ! RB RC]8P                  4      tt ! RD RE]<4      tu ! RF RG]8P                  ]8P                  4      tv ! RH RI]<4      twRJ]P                  RK]P                  RL]P                  RM]P                  RN]P                  RO]P                  RPRQ RRRS /t~RT]RU&   RVRW0t ! RX RY]<4      t ! RZ R[]<4      t ! R\ R]]8P                  ]4      t ! R^ R_]8P                  ]8P                  4      t ! R` Ra]<4      t ! Rb Rc]8P                  4      t ! Rd Re]8P                  ]8P                  4      t ! Rf Rg]<]4      t ! Rh Ri]8P                  4      t ! Rj Rk]8P                  4      t ! Rl Rm]8EP                  ]8P                  ]8P                  4      t ! Rn Ro]8EP                  ]8P                  ]8P                  4      t ! Rp Rq]4      t ! Rr Rs]<4      t ! Rt Ru]8EP"                  4      t ! Rv Rw]<4      t ! Rx Ry]8P                  ]8P                  4      t ! Rz R{]8EP                  ]8P                  4      t ! R| R}]<4      t ! R~ R]8EP"                  4      t ! R R]<4      t ! R R]a4      t ! R R]8P                  ]8P                  4      t ! R R]8P                  4      t ! R R]8P                  ]8P                  4      t ! R R]8P                  4      t ! R R]8P                  4      t ! R R]a4      t ! R R]<4      t ! R R]8P                  4      t ! R R]<4      t ! R R]8EP                  ]8P                  4      t ! R R]8EP                  ]8P                  4      t ! R R]a4      t ! R R]8P                  ]8P                  4      t ! R R]8P                  4      tK ! R R]8P                  4      tRRRRRRRR/t ! R R]8P                  4      t ! R R]8EP                  ]8P                  4      t ! R R]8EP                  ]8P                  ]8P                  4      t ! R R]4      t ! R R]<4      t ! R R]4      t ! R R]8P                  4      t ! R R]<4      tRt ! R R]<4      t ! R R]8P                  4      t ! R R]8P                  4      t]! ]>R7      t ! R R]<4      t ! R R]8P                  ]8EP                  4      t ! R R]<4      t ! R R]8EP                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]8P                  ]4      t ! R R]4      t ! R R]8P                  ]4      t ! R R]8P                  ]4      t ! R R]4      t ! R R]<4      t ! R R]<4      t]P]]]]]]]]! R4      ]]! ]4      ]]! R4      ]]]]Q]]]]]]U]]]/tR]R&   R R ltR R ltR R ltR# )z;Module for some node classes. More nodes in scoped_nodes.py)annotationsN)Callable	GeneratorIterableIteratorMapping)cached_property)TYPE_CHECKINGAnyClassVarLiteralUnion)
decorators	protocolsutil)Instance_infer_stmts)_EMPTY_OBJECT_MARKER
PY314_PLUSContext)CallContextInferenceContextcopy_context)AstroidBuildingErrorAstroidErrorAstroidIndexErrorAstroidTypeErrorAstroidValueErrorAttributeInferenceErrorInferenceErrorNameInferenceError	NoDefaultParentMissingError_NonDeducibleTypeHierarchy)dunder_lookup)AstroidManager)_base_nodes)OP_PRECEDENCE)NodeNG)SYNTHETIC_ROOT)ConstFactoryResultInferenceErrorInfoInferenceResultSuccessfulInferenceResult)Selfnodes)LocalsDictNodeNG)	FrameTypec                   V ^8  d   QhRR/#    returnbool )formats   "</usr/lib/python3/dist-packages/astroid/nodes/node_classes.py__annotate__r;   =   s     / / /    c                4    \        V \        \        4      4      # N)
isinstancetuple	CONST_CLSvalues   &r:   	_is_constrD   =   s    eU9-..r<   _NodesT)bound_BadOpMessageTListTuple
AssignName
AssignAttrc                   V ^8  d   QhRR/# r5   contextInferenceContext | Noner8   )r9   s   "r:   r;   r;   [   s     . . 7 .r<   c              #    "   \        V \        \        34      '       dG   V P                   F0  pV\        P
                  J d   Vx  K  \        W!4       Rj  xL
  K2  	  RV RV/# \        V P                  V4      \        P
                  4      pW0J d   Vx  RV RV/# V P                  V4       F<  p\        V\        P                  4      '       d   Vx  K)  \        W14       Rj  xL
  K>  	  RV RV/#  L L5i)zrecursively generate nodes inferred by the given statement.
If the inferred value is a list or a tuple, recurse on the elements
NnoderN   )
r?   rH   rI   eltsr   Uninferableunpack_infernextinferUninferableBase)stmtrN   eltinferreds   &&  r:   rT   rT   Z   s     
 $u&&99Cd&&&	#C111	 
 i11DJJw')9)9:Hi11JJw'h 4 455N#H666	 ( D)W-- 2 7s%   AC8C4BC8%C6&C86C8c                    V ^8  d   QhRRRR/# r5   
exceptionszlist[str] | Noner6   r7   r8   )r9   s   "r:   r;   r;   u   s     F F,< F Fr<   c                X   / p/ pT pV P                  4        F  p^W6&   WTV&   TpK  	  TpVP                  4        EFk  pWc9   Ed_   \        V\        4      '       dI   VfE   VP                  V4      w  rxVP                  WF,          4      w  rRW39   d    R# W8w  d    R#   R# \        V\        4      '       d   VP                  V4      w  rxVP                  WF,          4      w  rWJd   VR8H  ;'       d    V	R8H  ;'       d    VP                  V4      pVR8H  ;'       d%    V	R8H  ;'       d    WF,          P                  V4      pVR8H  ;'       d    V	R8H  pVR8H  ;'       d    V	R8H  p\        VVVV34      '       d    R#   R# VR8X  d   V	R8X  d   WTV,          Ju #  R# TpEKn  	  R# )a  return true if the two given statements are mutually exclusive

`exceptions` may be a list of exception names. If specified, discard If
branches and check one of the statement is in an exception handler catching
one of the given exceptions.

algorithm :
 1) index stmt1's parents
 2) climb among stmt2's parents until we find a common parent
 3) if the common parent is a If or Try statement, look if nodes are
    in exclusive branches
testFThandlersbodyorelse)node_ancestorsr?   Iflocate_childTrycatchany)stmt1stmt2r]   stmt1_parentschildrenpreviousrQ   c2attrc2nodec1attrc1node first_in_body_caught_by_handlers!second_in_body_caught_by_handlersfirst_in_else_other_in_handlers second_in_else_other_in_handlerss   &&&            r:   are_exclusiverv   u   s    MHH$$&! '
 H$$&  $##
(:!%!2!28!<!%!2!28>!Bf-- !# $D ? D#&&!%!2!28!<!%!2!28>!B'*, 7 7"f,7 7$NN:6 5 &( = ="j0= =$N00< 6 *,CC81C 4 (*CCv/C 5 <=;<	   $  z)f
.B#D>99] '^ r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r;      s      !8 r<   c                   \        V \        4      '       d?   \        V P                  \        \	        R4      34      '       d   V P                  #  \        # V f   R#  \        V P                  VR7      4      p\        V\        4      '       d8   \        VP                  \        \	        R4      34      '       d   VP                  # \        #   \        \        3 d	     \        # i ; i)z'Get the value of the given slice index.NrN   )
r?   ConstrC   inttyperU   rV   r   StopIteration_SLICE_SENTINEL)indexrN   rZ   s   && r:   _slice_valuer      s     %ekkCd#455;; 6( % 

	*EKKK89H (E**hnnsDJ.?@@#>>)
  . 	 	s   C
 
C#"C#c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r;      s       7 r<   c                L   \        V P                  V4      p\        V P                  V4      p\        V P                  V4      p\        ;QJ d    R  W#V3 4       F  '       d   K   RM	  RM! R  W#V3 4       4      '       d   \        W#V4      # \        RV V P                  VR7      h)c              3  0   "   T F  q\         Jx  K  	  R # 5ir>   )r~   .0elems   & r:   	<genexpr>_infer_slice.<locals>.<genexpr>   s     
H3G4&3Gs   FTz'Could not infer slice used in subscriptmessagerQ   r   rN   )r   lowerupperstepallslicer   parent)rQ   rN   r   r   r   s   &&   r:   _infer_slicer      s    W-EW-E		7+D
s
HE$3G
Hsss
HE$3G
HHHU4((
9kk	 r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r;      s     H H7N Hr<   c                    \        V\        4      '       d=   \        W#R7      pV P                  4       pW,          Vn        V P
                  Vn        V# \        V\        4      '       d   WP                  ,          #  \        RT R24      h  \         d   p\        RT TTR7      ThRp?i\         d   p\        RT TTR7      ThRp?i\         d   p\        RYTR7      ThRp?ii ; i)	zHGet a slice or an item, using the given *index*, for the given sequence.ry   z&Slice {index!r} cannot index containerr   NzIndex {index!s} out of rangeType error {error!r}zCould not use  as subscript index)r?   Slicer   	__class__rR   r   rz   rC   
ValueErrorr   
IndexErrorr   	TypeErrorr   )instancerR   r   rN   index_slicenew_clsexcs   &&&&   r:   _container_getitemr      s    eU##&u>K((*G,GL%__GNNeU##$$ $* ^E72EF
GG'  <	

 	  2	

 	  *PW
	sB   AB 'B C'B''C'4C'5CC'C'C""C'c                     a  ] tR tRtRtRtR V 3R lltR R lt]R R l4       t	R	 t
RR
 R llt]P                  R R l4       tR t]P"                  RR R ll4       tRR R lltRtV ;t# )BaseContaineri  z.Base class for Set, FrozenSet, Tuple and List.c               0    V ^8  d   QhRRRRRRRRRRRR	/# 
r5   lineno
int | None
col_offsetr   NodeNG | None
end_linenoend_col_offsetr6   Noner8   )r9   s   "r:   r;   BaseContainer.__annotate__  F     
 

 
 	
 
 #
 

r<   c               	@   < . V n          \        SV `	  VVVVVR 7       R# r   r   r   r   r   N)rR   super__init__selfr   r   r   r   r   r   s   &&&&$$r:   r   BaseContainer.__init__  s0     68	'!!) 	 	
r<   c                    V ^8  d   QhRRRR/# )r5   rR   list[SuccessfulInferenceResult]r6   r   r8   )r9   s   "r:   r;   r   '  s      <  r<   c                	    Wn         R # r>   rR   )r   rR   s   &&r:   postinitBaseContainer.postinit'      	r<   c                    V ^8  d   QhRRRR/# )r5   rR   Iterable[Any]r6   r.   r8   )r9   s   "r:   r;   r   +  s       4 r<   c                    V ! RRRRRR7      pV Uu. uF!  p\        V4      '       d   \        V4      MTNK#  	  upVn        V# u upi )zCreate a node of this type from the given list of elements.

:param elts: The list of elements that the node should contain.

:returns: A new node containing the given elements.
Nr   r   r   r   r   )rD   const_factoryrR   )clsrR   rQ   es   &&  r:   from_elementsBaseContainer.from_elements*  sT     
 GKKd1]1%1<dK	 Ls   'Ac                    V P                   # )zqAn iterator over the elements this node contains.

:returns: The contents of this node.
:rtype: iterable(NodeNG)
r   r   s   &r:   iteredBaseContainer.itered<  s     yyr<   c                    V ^8  d   QhRRRR/# )r5   rN   rO   r6   r7   r8   )r9   s   "r:   r;   r   D  s      "9 T r<   c                ,    \        V P                  4      # )zUDetermine the boolean value of this node.

:returns: The boolean value of this node.
)r7   rR   r   rN   s   &&r:   
bool_valueBaseContainer.bool_valueD  s    
 DIIr<   c                   V ^8  d   QhRR/# r5   r6   strr8   )r9   s   "r:   r;   r   L  s       r<   c                    R# )UGet the name of the type that this node represents.

:returns: The name of the type.
Nr8   r   s   &r:   pytypeBaseContainer.pytypeK  s    r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   r   r   s   &r:   get_childrenBaseContainer.get_childrenR  s     99   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   kwargsr
   r6   zIterator[Self]r8   )r9   s   "r:   r;   r   V  s(      (  
	r<   c              +  	  "   \         ;QJ d&    R  V P                   4       F  '       g   K   RM	  RM! R  V P                   4       4      pV'       dq   V P                  V4      p\        V 4      ! V P                  V P
                  V P                  V P                  V P                  R7      pVP                  V4       Vx  R# V x  R# 5i)c              3  N   "   T F  p\        V\        \        34      x  K  	  R # 5ir>   )r?   Starred	NamedExpr)r   r   s   & r:   r   'BaseContainer._infer.<locals>.<genexpr>[  s"      %
9BAJq7I.//s   #%TFr   N)
rh   rR   _infer_sequence_helperr|   r   r   r   r   r   r   )r   rN   r   has_starred_named_exprvaluesnew_seqs   &&,   r:   _inferBaseContainer._inferU  s      "% %
9=%
 %
9=%
 "
 "009F4j{{??{{??#22G V$MJs   'C	&C	A6C	c                    V ^8  d   QhRRRR/# )r5   rN   rO   r6   r   r8   )r9   s   "r:   r;   r   m  s      .	(r<   c                $   . pV P                    F  p\        V\        4      '       dv   \        P                  ! VP
                  V4      pV'       g   \        WR7      h\        VR4      '       g   \        WR7      hVP                  VP                  V4      4       K  \        V\        4      '       dI   \        P                  ! VP
                  V4      pV'       g   \        WR7      hVP                  V4       K  VP                  V4       K  	  V# )z-Infer all values based on BaseContainer.elts.rQ   rN   rR   )rR   r?   r   r   
safe_inferrC   r   hasattrextendr   r   append)r   rN   r   rY   starredrC   s   &&    r:   r   $BaseContainer._infer_sequence_helperm  s     99C#w''//#))W=(dDDw//(dDDg<<WEFC++		7;(dDDe$c"   r<   r   r>   )__name__
__module____qualname____firstlineno____doc___astroid_fieldsr   r   classmethodr   r   r   abcabstractmethodr   r   r   raise_if_nothing_inferredr   r   __static_attributes____classcell__r   s   @r:   r   r     s{    8O
 
(  " 	  )) *. r<   r   )	metaclassc                     a  ] tR tRtRtR	tR V 3R llt]P                  t	 ]
P                  ]
P                  R
R R ll4       4       t]
P                  R
R R ll4       tR	tV ;t# )rJ   i  a  Variation of :class:`ast.Assign` representing assignment to a name.

An :class:`AssignName` is the name of something that is assigned to.
This includes variables defined in a function signature or in a loop.

>>> import astroid
>>> node = astroid.extract_node('variable = range(10)')
>>> node
<Assign l.1 at 0x7effe1db8550>
>>> list(node.get_children())
[<AssignName.variable l.1 at 0x7effe1db8748>, <Call l.1 at 0x7effe1db8630>]
>>> list(node.get_children())[0].as_string()
'variable'
c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r5   namer   r   r{   r   r   r(   r   r   r   r6   r   r8   )r9   s   "r:   r;   AssignName.__annotate__  P     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r   r   r   r   r   r   r   r   r   r   r   s   &&&&&$$r:   r   AssignName.__init__  s.     	+!!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# r5   rN   rO   r   r
   r6   ;Generator[InferenceResult, None, InferenceErrorInfo | None]r8   )r9   s   "r:   r;   r    $     
, 
,.
,AD
,	D
,r<   c                    \        V P                  \        4      '       d   V P                  P                  V4      # \	        V P                  VR7      4      p\        W14      # )zFInfer an AssignName: need to inspect the RHS part of the
assign node.
ry   r?   r   	AugAssignrV   listassigned_stmtsr   r   rN   r   stmtss   &&, r:   r   AssignName._infer  M     dkk9--;;$$W--T(((9:E++r<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r    $     3 3.3AD3	D3r<   c                   ^ RI Hp ^ RIHp V P	                  V P
                  4      w  rVV'       gj   V! V P                  4       4      pV'       d   VP	                  V P
                  4      w  rV'       g'   \        V P
                  V P                  4       VR7      h\        V4      pV P
                  Vn	        V! W4      VP                  V P
                  &   \        WaV4      # )zIInfer a Name: use name lookup rules.

Same implementation as Name._infer.get_constraints_higher_function_scoper   scoperN   astroid.constraintr  astroid.helpersr  lookupr   r  r    r   
lookupnameconstraintsr   	r   rN   r   r  r  framer  parent_function_s	   &&,      r:   	infer_lhsAssignName.infer_lhs  s     	7:{{499- 5TZZ\BO*11$))<($**,  w'!YY)8)EDII&EE22r<   r   r>   )r   r   r   r   r   _other_fieldsr   r   assend_assigned_stmtsr  r   r   path_wrapperr   r'  r   r   r   s   @r:   rJ   rJ     sm    
 M
 
* 44N ))
,  *
, ))3 *3r<   c                  6   a  ] tR tRtRtRtR V 3R lltRtV ;t# )DelNamei  aH  Variation of :class:`ast.Delete` representing deletion of a name.

A :class:`DelName` is the name of something that is deleted.

>>> import astroid
>>> node = astroid.extract_node("del variable #@")
>>> list(node.get_children())
[<DelName.variable l.1 at 0x7effe1da4d30>]
>>> list(node.get_children())[0].as_string()
'variable'
c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r   r8   )r9   s   "r:   r;   DelName.__annotate__  r  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   DelName.__init__  s.     	-!!) 	 	
r<   r)  	r   r   r   r   r   r*  r   r   r   r   s   @r:   r.  r.    s    
 M
 
r<   r.  c                     a  ] tR tRtRtRtR V 3R lltR t]P                  ]P                  R	R R ll4       4       tRtV ;t# )
Namei  a  Class representing an :class:`ast.Name` node.

A :class:`Name` node is something that is named, but not covered by
:class:`AssignName` or :class:`DelName`.

>>> import astroid
>>> node = astroid.extract_node('range(10)')
>>> node
<Call l.1 at 0x7effe1db8710>
>>> list(node.get_children())
[<Name.range l.1 at 0x7effe1db86a0>, <Const.int l.1 at 0x7effe1db8518>]
>>> list(node.get_children())[0].as_string()
'range'
c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r   r8   )r9   s   "r:   r;   Name.__annotate__  r  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   Name.__init__  s.     	0!!) 	 	
r<   c              #  	x   "   V x  V P                  4        F  pVP                  4        R j  xL
  K  	  R #  L
5ir>   )r   _get_name_nodes)r   
child_nodes   & r:   r;  Name._get_name_nodes3  s2     
++-J!11333 .3s   +:8:c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r7  ;  r  r<   c                   ^ RI Hp ^ RIHp V P	                  V P
                  4      w  rVV'       gj   V! V P                  4       4      pV'       d   VP	                  V P
                  4      w  rV'       g'   \        V P
                  V P                  4       VR7      h\        V4      pV P
                  Vn	        V! W4      VP                  V P
                  &   \        WaV4      # )zRInfer a Name: use name lookup rules

Same implementation as AssignName._infer_lhs.r  r  r  r  r#  s	   &&,      r:   r   Name._infer9  s     	7:{{499- 5TZZ\BO*11$))<($**,  w'!YY)8)EDII&EE22r<   r)  r>   )r   r   r   r   r   r*  r   r;  r   r   r,  r   r   r   r   s   @r:   r5  r5    sF     M
 
*4 ))3  *3r<   r5  DEPRECATED_ARGUMENT_DEFAULTc                    a  ] tR tRt$ RtR1tR2t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&    R3R V 3R llltR4R R llt	]
P                  t R t]R V 3R  ll4       t]R! 4       tR"R/R# R$ lltR% R& ltR' tR( R) lt]3R* ltR+ tR, R- lt]P4                  R5R. R/ ll4       tR0tV ;t# )6	Argumentsi[  a.  Class representing an :class:`ast.arguments` node.

An :class:`Arguments` node represents that arguments in a
function definition.

>>> import astroid
>>> node = astroid.extract_node('def foo(bar): pass')
>>> node
<FunctionDef.foo l.1 at 0x7effe1db8198>
>>> node.args
<Arguments l.1 at 0x7effe1db82e8>
argsdefaults
kwonlyargsposonlyargsposonlyargs_annotationskw_defaultsr   varargannotationkwargannotationkwonlyargs_annotationstype_comment_argstype_comment_kwonlyargstype_comment_posonlyargslist[AssignName] | Nonelist[NodeNG] | Nonelist[AssignName]list[NodeNG | None] | Nonelist[NodeNG | None]r   AssignName | Nonevararg_node
kwarg_nodeNc               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r5   vararg
str | Nonekwargr   r(   rV  rU  rW  r6   r   r8   )r9   s   "r:   r;   Arguments.__annotate__  sF     % %% % 	%
 '% &% 
%r<   c                d   < \         SV `  VRRRRR7       Wn         W n         W@n        WPn        R# )zPAlmost all attributes can be None for living objects where introspection failed.Nr   r   r   r   r   )r   r   rY  r[  rV  rW  )r   rY  r[  r   rV  rW  r   s   &&&&&&r:   r   Arguments.__init__  sC     	 	 	
 8
@&$r<   c               P    V ^8  d   Qh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/# )r5   rD  rP  rE  rQ  rF  rR  rI  rS  r   rT  rG  rL  rH  rJ  r   rK  rM  rN  rO  r6   r   r8   )r9   s   "r:   r;   r\    s     $A $A%$A &$A %	$A
 0$A )$A &$A !4$A "5$A ($A '$A 6$A "<$A #=$A 
$Ar<   c                	    Wn         W n        W0n        W`n        W@n        WPn        Wpn        Wn        Wn        Wn	        Vf   . pWn
        Vf   . pWn        Vf   . pWn        R # r>   )rD  rE  rF  rG  rI  r   rL  rH  rJ  rK  rM  rN  rO  )r   rD  rE  rF  rI  r   rG  rL  rH  rJ  rK  rM  rN  rO  s   &&&&&&&&&&&&&&r:   r   Arguments.postinit  su      	 $&&&&<#'>$ !1.$ "!2"*&(#'>$#+')$(@%r<   c                	*    V P                   VJ d   V# R # r>   r   r   r$  r   s   &&&r:   _infer_nameArguments._infer_name  s    ;;%Kr<   c                   V ^8  d   QhRR/# r5   r6   r{   r8   )r9   s   "r:   r;   r\    s     8 8C 8r<   c                j   < \         SV `  p\        YP                  P                  ;'       g    ^ 4      # )zsThe first line that this node appears on in the source code.

Can also return 0 if the line can not be determined.
)r   
fromlinenomaxr   )r   r   r   s   & r:   rk  Arguments.fromlineno  s,     #6;;1166Q77r<   c                   \        \        P                  ! V P                  ;'       g    RV P                  ;'       g    R4      4      pV P
                  '       d   VP                  V P
                  4       YP                  ;'       g    R,          pV P                  '       d   VP                  V P                  4       V# )zGet all the arguments for this node. This includes:
* Positional only arguments
* Positional arguments
* Keyword arguments
* Variable arguments (.e.g *args)
* Variable keyword arguments (e.g **kwargs)
r8   )	r  	itertoolschainrG  rD  rV  r   rF  rW  )r   retvals   & r:   	argumentsArguments.arguments  s     ioot'7'7'='=2bRSMM$**+//''R'???MM$//*r<   skippable_namesc                    V ^8  d   QhRRRR/# r5   rt  zset[str] | Noner6   r   r8   )r9   s   "r:   r;   r\  ,  s     0! 0!o 0! 0!r<   c                   . p. pV P                   pV P                   '       db   V P                  ;'       g    . pV P                   \        V4      ) R pV P                   R\        V P                   4      \        V4      ,
           pV P                  '       dD   VP	                  \        V P                  VV P                  VR7      4       VP	                  R4       V P                  '       d4   VP	                  \        V P                  V\        V RR4      VR7      4       V P                  '       d   VP	                  RV P                   24       V P                  '       d`   V P                  '       g   VP	                  R4       VP	                  \        V P                  V P                  V P                  VR7      4       V P                  '       d   VP	                  RV P                   24       RP                  V4      # )zWGet the arguments formatted as string.

:returns: The formatted arguments.
:rtype: str
N)rt  /r   ***, )rE  rD  lenrG  r   _format_argsrH  getattrrY  rF  rI  rL  r[  join)r   rt  resultpositional_only_defaultspositional_or_keyword_defaultsrD  s   &$    r:   format_argsArguments.format_args,  s    #% )-&===99??D-1]]CI:<-H*'+}}5Us4==7ICPTI7U'V$MM$$,00$3	 MM#999MMII2D-6$3	 ;;;MMAdkk]+,???;;;c"MMOO$$//$3	 :::MMBtzzl+,yy  r<   c                   V ^8  d   QhRR/# )r5   r6   zYtuple[dict[str, tuple[str | None, str | None]], dict[str, tuple[str | None, str | None]]]r8   )r9   s   "r:   r;   r\  ^  s     C! C!
C!r<   c                X   / p/ p. pV P                   pV P                   '       db   V P                  ;'       g    . pV P                   \        V4      ) R pV P                   R\        V P                   4      \        V4      ,
           p\        V P                  4       FZ  w  rgV P
                  V,          RrVe   VP                  4       pV'       d   W6,          P                  4       p	W3WP                  &   K\  	  \        V P                  4       F  w  rjV P                  V,          RrVe   VP                  4       pV'       dU   \        V P                  4      \        V4      ,
          pWk,
          pVR8  d!   WL,          e   WL,          P                  4       p	W3WP                  &   K  	  V P                  '       d1   V P                  pVe   VP                  4       pVR3WP                  &   \        V P                  4       Fb  w  rmV P                  V,          pVe   VP                  4       pV P                  V,          p	V	e   V	P                  4       p	W3W-P                  &   Kd  	  V P                  '       d1   V P                  pVe   VP                  4       pVR3W P                  &   W3# )aQ  Get the arguments as dictionary with information about typing and defaults.

The return tuple contains a dictionary for positional and keyword arguments with their typing
and their default value, if any.
The method follows a similar order as format_args but instead of formatting into a string it
returns the data that is used to do so.
N)rE  rD  r|  	enumeraterG  rH  	as_stringr   r   rY  rJ  rF  rL  rI  r[  rK  )r   pos_onlykw_onlyr  r  rD  r   posonly
annotationdefaultargdefaults_offsetdefault_indexr[  s   &             r:   _get_arguments_dataArguments._get_arguments_data^  sQ    >@<> $& )-&===99??D-1]]CI:<-H*'+}}5Us4==7ICPTI7U'V$'(8(89NE"&">">u"Et%'113
'29CCE&0%:H\\" : $DII.JE"&"2"25"94%'113
-"%dii.37U3V"V % 7!B&6EQ<KUUWG",!6HXX / ;;;..J%'113
%/$6H[[!%doo6LE44U;J%'113
&&u-G"!++-#-"7GJJ 7 :::--J%'113
#-t"4GJJ  r<   c                   V P                    Uu. uF-  q"P                  V P                  V P                  39  g   K+  VNK/  	  pp\	        WP
                  4      ^ ,          pVeZ   \        V P                  4      V8  d@   V P                  V,          e   V P                  V,          # \        V P                  VR7      h\	        W4      ^ ,          pVea   V\        V4      \        V P                  4      ,
          \        V P                  4      ,
          ,
          pV^ 8  d   V P                  V,          # \        V P                  VR7      hu upi )zGet the default value for an argument.

:param argname: The name of the argument to get the default value for.
:type argname: str

:raises NoDefault: If there is no default value defined for the
    given argument.
)funcr   )rr  r   rY  r[  	_find_argrF  r|  rI  r!   r   rE  )r   argnamer  rD  r   idxs   &&    r:   default_valueArguments.default_value  s	     >>
)CXXdkk4::=V-VCC> 	 
 '??3A6C(8(8$9E$A&2''..7;;'(+3t9s4=='99C@P@P<QQRCax}}S))T[[w77!
s
   (E
E
c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   r\    s     6 64 6r<   c                ~    WP                   8X  d   R# WP                  8X  d   R# V P                  V4      ^,          RJ# )zCheck if the given name is defined in the arguments.

:param name: The name to check for.
:type name: str

:returns: Whether the given name is defined in the arguments,
TN)rY  r[  find_argnamer   r   s   &&r:   is_argumentArguments.is_argument  s9     ;;::  &q)55r<   c                    V\         8w  d   \        P                  ! R\        ^R7       V P                  '       d#   \        WP                  4      w  r4V'       d   W43# R# )zGet the index and :class:`AssignName` node for given name.

:param argname: The name of the argument to search for.
:type argname: str

:returns: The index and node for the argument.
:rtype: tuple(str or None, AssignName or None)
z0The rec argument will be removed in astroid 3.1.
stacklevelNN)rA  warningswarnDeprecationWarningrr  r  )r   r  recr   arguments   &&&  r:   r  Arguments.find_argname  sN     --MMB"
 >>>'@OE&r<   c              #  	p  "   V P                   ;'       g    R R j  xL
  V P                   F  pVf   K	  Vx  K  	  V P                  ;'       g    R R j  xL
  V P                  e   V P                   R j  xL
  V P                   R j  xL
  V P
                  ;'       g    R F  pVf   K	  Vx  K  	  V P                   F  pVf   K	  Vx  K  	  V P                  e   V P                  x  V P                  e   V P                  x  V P                   F  pVf   K	  Vx  K  	  R #  EL L L L5i)Nr8   )
rG  rH  rD  rE  rF  rI  r   rJ  rK  rL  r   rY   s   & r:   r   Arguments.get_children  s    ##))r))//C	 0 99??""==$}}$$??""##))r)C	 * ##C	 $   ,'''+&&&..C	 /5 	* 	# %"si   D6D-D6D6D6D0!D69D2:D6D4D6%D61D6AD6#D60D62D64D6c                   V ^8  d   QhRR/# )r5   r6   zIterator[nodes.NodeNG]r8   )r9   s   "r:   r;   r\     s     ' '!7 'r<   c              #  0  "   V P                    F  pVf   K	  Vx  K  	  V P                   F  pVf   K	  Vx  K  	  V P                  e   V P                  x  V P                   F  pVf   K	  Vx  K  	  V P                  e   V P                  x  R# R# 5i)z#Iterate over all annotations nodes.N)rH  r   rJ  rL  rK  r  s   & r:   get_annotationsArguments.get_annotations   s     //C	 0 ##C	 $   ,'''..C	 / +&&& ,s   BB4B.(Bc               $    V ^8  d   QhRRRRRR/# r5   rN   rO   r   r
   r6   Generator[InferenceResult]r8   )r9   s   "r:   r;   r\    s)     K K.KADK	#Kr<   c                	p    ^ RI Hp Ve   VP                  f   \        WR7      hV! WP                  V4      # )    )_arguments_infer_argnamer   )astroid.protocolsr  r!  r   )r   rN   r   r  s   &&, r:   r   Arguments._infer  s5    
 	??g008 d<<'.@.@'JJr<   )r   rD  rE  rI  r[  rW  rK  rF  rL  rG  rH  rM  rN  rO  rY  rV  rJ  )rD  rE  rF  rG  rH  rI  r   rJ  rK  rL  rM  rN  rO  )rY  r[  r  )NNNNNr>   )r   r   r   r   r   r   r*  __annotations__r   r   r   arguments_assigned_stmtsr  rf  r   rk  rr  r  r  r  r  rA  r  r   r  r   r   r   r   r   r   s   @r:   rC  rC  [  sL   .O  (M
!! "!K  C!!=++V$$L00Q//O** 10 21 $#@""H""0!!1% %6$AL 77N
 8 8  "0! 0!dC!J866 )D *>'" ))K *Kr<   rC  c                Z    \        V4       F  w  r#VP                  V 8X  g   K  W#3u # 	  R# )Nr  )r  r   )r  rD  ir  s   &&  r:   r  r    s-    D/88w6M " r<   c                    V ^8  d   QhRRRR/# rv  r8   )r9   s   "r:   r;   r;   $  s      <Kr<   c                   Vf   \        4       p. pV f   R# Vf   . pVe   \        V 4      \        V4      ,
          pMR p\        P                  ! W4      p\	        V4       F  w  pw  rVP
                  V9   d   K  \        V\        4      '       d+   VP                  R\        VP                  4       R24       K[  VP
                  p
RpV	e!   V
RV	P                  4       ,           ,          p
RpVP                  V
4       Vf   K  Wu8  g   K  WV,
          ,          f   K  VR;;,          WWu,
          ,          P                  4       ,           ,          uu&   K  	  RP                  V4      # )	N ()=z: z = r{  r  )setr|  ro  zip_longestr  r   r?   rI   r   r}  rR   r  r  )rD  rE  r   rt  r   default_offsetpackedr  r  r  r  default_seps   &&&&        r:   r}  r}  $  s1    %F|TS]2""45F )& 1C88&c5!!MMAl38845Q78hhGK%4*"6"6"888#MM'")a.A./;2J+9K0L0V0V0X"XXJ !2  99Vr<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   rQ   z"nodes.AssignAttr | nodes.AttributerN   rO   r   r
   r6   4Generator[InferenceResult, None, InferenceErrorInfo]r8   )r9   s   "r:   r;   r;   F  s0     $: $:
,$:$$: $: :	$:r<   c              +    "   ^ RI Hp ^ RIHp V P                  P                  V4       F  p\        V\        P                  4      '       d   Vx  K)  \        V4      pVP                  p WQn
        \        WT\        34      '       d@   \        WT4      '       d   TMVP                  pV! WR7      VP                  V P                  &   V P                  R8X  d%   VP                  R8X  d   \        P                   x  M%VP#                  V P                  V4       Rj  xL
   Wan
        K  	  \+        WR7      #  L  \$        \&        \(        3 d     L0i ; i  Yan
        i ; i5i)zMInfer an AssignAttr/Attribute node by using getattr on the associated object.r  ClassDef)r$  argvsysNr   )r  r  astroid.nodesr  exprrV   r?   r   rW   r   	boundnoder   _proxiedr"  attrnamer   rS   igetattrr   r   AttributeErrorr+   )rQ   rN   r   r  r  ownerold_boundnoder$  s   &&,     r:   _infer_attributer  F  s     3&)eT1122Kw'))	. %%H!566!+E!<!<%..5DT5W##DMM2}}&5::+> &&& >>$--AAA !.3 *4 499 B#
 	
 	 !.s[   A(E +BD9;E<D9D7D9 E!E 7D99EEEEEE c                  
  a  ] tR tRt$ RtR]R&   RtRtR V 3R lltR R lt	]
P                  t R	 t]P                  ]P                   RR
 R ll4       4       t]P                  ]P                   RR R ll4       4       tRtV ;t# )rK   im  am  Variation of :class:`ast.Assign` representing assignment to an attribute.

>>> import astroid
>>> node = astroid.extract_node('self.attribute = range(10)')
>>> node
<Assign l.1 at 0x7effe1d521d0>
>>> list(node.get_children())
[<AssignAttr.attribute l.1 at 0x7effe1d52320>, <Call l.1 at 0x7effe1d522e8>]
>>> list(node.get_children())[0].as_string()
'self.attribute'
r(   r  c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r5   r  r   r   r{   r   r   r(   r   r   r   r6   r   r8   )r9   s   "r:   r;   AssignAttr.__annotate__  P     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r   r   r   r  r   r   r   r   r   r   s   &&&&&$$r:   r   AssignAttr.__init__  s.     !:!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r5   r  r(   r6   r   r8   )r9   s   "r:   r;   r          V  r<   c                	    Wn         R # r>   r  r   r  s   &&r:   r   AssignAttr.postinit  r   r<   c              #  	*   "   V P                   x  R # 5ir>   r  r   s   &r:   r   AssignAttr.get_children       ii   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r    r
  r<   c                    \        V P                  \        4      '       d   V P                  P                  V4      # \	        V P                  VR7      4      p\        W14      # )zFInfer an AssignAttr: need to inspect the RHS part of the
assign node.
ry   r  r  s   &&, r:   r   AssignAttr._infer  r  r<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r    s$     9 9.9AD9	D9r<   c                	    \        W3/ VB # r>   r  r   rN   r   s   &&,r:   r'  AssignAttr.infer_lhs      
  888r<   r  r  r  r  r>   )r   r   r   r   r   r  r   r*  r   r   r   r+  r  r   r   r   r,  r   r'  r   r   r   s   @r:   rK   rK   m  s    
 LO!M
 
* 44N ))
,  *
, ))9  *9r<   c                  J    ] tR tRt$ RtRtR]R&    R]R&    R R ltR	 tR
t	R# )Asserti  zClass representing an :class:`ast.Assert` node.

An :class:`Assert` node represents an assert statement.

>>> import astroid
>>> node = astroid.extract_node('assert len(things) == 10, "Not enough things"')
>>> node
<Assert l.1 at 0x7effe1d527b8>
r_   failr(   r   c               $    V ^8  d   QhRRRRRR/# )r5   r_   r(   r  r   r6   r   r8   )r9   s   "r:   r;   Assert.__annotate__  s!      V = T r<   c                	    W n         Wn        R # r>   r  r_   )r   r_   r  s   &&&r:   r   Assert.postinit  s    		r<   c              #  	f   "   V P                   x  V P                  e   V P                  x  R # R # 5ir>   r_   r  r   s   &r:   r   Assert.get_children  s&     ii99 ))O !   /1r  Nr  
r   r   r   r   r   r   r  r   r   r   r8   r<   r:   r  r    s)     'O
L6
5r<   r  c                      ] tR tRt$ RtR]R&    R]R&    R]R&    RtRtR	 R
 lt]	P                  t R t]R R l4       tR tR tRtR# )Assigni  zClass representing an :class:`ast.Assign` node.

An :class:`Assign` is a statement where something is explicitly
asssigned to.

>>> import astroid
>>> node = astroid.extract_node('variable = range(10)')
>>> node
<Assign l.1 at 0x7effe1db8550>
list[NodeNG]targetsr(   rC   r   type_annotationc               (    V ^8  d   QhRRRRRRRR/# )	r5   r	  r  rC   r(   r
  r   r6   r   r8   )r9   s   "r:   r;   Assign.__annotate__  s2     / // / '	/
 
/r<   c                	*    Wn         W n        W0n        R # r>   )r	  rC   r
  )r   r	  rC   r
  s   &&&&r:   r   Assign.postinit  s     
.r<   c              #  	V   "   V P                    R j  xL
  V P                  x  R #  L5ir>   r	  rC   r   s   &r:   r   Assign.get_children  s!     <<jj 	 s   )')c                   V ^8  d   QhRR/# )r5   r6   zlist[nodes.Assign]r8   )r9   s   "r:   r;   r     s     : :(: :r<   c                	4    V .V P                   P                  O# r>   )rC   _assign_nodes_in_scoper   s   &r:   r  Assign._assign_nodes_in_scope  s    9tzz8899r<   c              #  	V   "   V P                   P                  4        R j  xL
  R #  L5ir>   )rC   _get_yield_nodes_skip_functionsr   s   &r:   r  &Assign._get_yield_nodes_skip_functions  s     ::==???   )')c              #  	V   "   V P                   P                  4        R j  xL
  R #  L5ir>   )rC   _get_yield_nodes_skip_lambdasr   s   &r:   r  $Assign._get_yield_nodes_skip_lambdas  s     ::;;===r  )r	  r
  rC   Nr  r
  )r   r   r   r   r   r  r   _other_other_fieldsr   r   assign_assigned_stmtsr  r   r   r  r  r  r   r8   r<   r:   r  r    si    	 $M4""T*O./ 44N
 : :@>r<   r  c                      ] tR tRt$ RtRtRtR]R&    R]R&    R	]R&    R
]R&    R R lt]	P                  t R tRtR# )	AnnAssigni
  zClass representing an :class:`ast.AnnAssign` node.

An :class:`AnnAssign` is an assignment with a type annotation.

>>> import astroid
>>> node = astroid.extract_node('variable: List[int] = range(10)')
>>> node
<AnnAssign l.1 at 0x7effe1d4c630>
targetr  rC   simpleName | Attribute | Subscriptr(   r   r{   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r5   r"  r$  r  r(   r#  r{   rC   r   r6   r   r8   )r9   s   "r:   r;   AnnAssign.__annotate__$  s<     
 
,
 
 	

 
 

r<   c                	6    Wn         W n        W@n        W0n        R # r>   )r"  r  rC   r#  )r   r"  r  r#  rC   s   &&&&&r:   r   AnnAssign.postinit$  s     $
r<   c              #  	   "   V P                   x  V P                  x  V P                  e   V P                  x  R # R # 5ir>   r"  r  rC   r   s   &r:   r   AnnAssign.get_children5  s2     kkoo::!** "   =?)r  r#  r"  rC   Nr*  )r#  )r   r   r   r   r   r   r*  r  r   r   assign_annassigned_stmtsr  r   r   r8   r<   r:   r!  r!  
  sR     8OM(($;4KG
 77Nr<   r!  c                    a  ] tR tRt$ RtRtRtR]R&    R]R&    R V 3R lltR	 R
 lt	]
P                  t RR R lltR tV 3R ltV 3R ltRR R llt]P&                  ]P(                  RR R ll4       4       tRtV ;t# )r  i=  zClass representing an :class:`ast.AugAssign` node.

An :class:`AugAssign` is an assignment paired with an operator.

>>> import astroid
>>> node = astroid.extract_node('variable += 1')
>>> node
<AugAssign l.1 at 0x7effe1db4d68>
r"  rC   r$  r(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r5   opr   r   r{   r   r   r(   r   r   r   r6   r   r8   )r9   s   "r:   r;   AugAssign.__annotate__S  sP     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r1  r   r   r   r1  r   r   r   r   r   r   s   &&&&&$$r:   r   AugAssign.__init__S  s2     	
 	!!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   r"  r$  rC   r(   r6   r   r8   )r9   s   "r:   r;   r2  k  s"      ; F t r<   c                	    Wn         W n        R # r>   r"  rC   r   r"  rC   s   &&&r:   r   AugAssign.postinitk      
r<   c                    V ^8  d   QhRRRR/# r5   rN   rO   r6   z$list[util.BadBinaryOperationMessage]r8   )r9   s   "r:   r;   r2  t        .	-r<   c                    . p V P                  VR7       FP  pV\        P                  J d   \        h\	        V\        P
                  4      '       g   K?  VP                  V4       KR  	  V#   \         d    . u # i ; i)zGet a list of type errors which can occur during inference.

Each TypeError is represented by a :class:`BadBinaryOperationMessage` ,
which holds the original exception.

If any inferred result is uninferable, an empty list is returned.
ry   )_infer_augassignr   rS   r   r?   BadBinaryOperationMessager   r   rN   badr  s   &&  r:   type_errorsAugAssign.type_errorst  sw     	///@T---((fd&D&DEEJJv&	 A 
  	I	   AA, A, ,A<;A<c              #  	F   "   V P                   x  V P                  x  R # 5ir>   r9  r   s   &r:   r   AugAssign.get_children  s     kkjj   !c              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5iz7An AugAssign node can contain a Yield node in the valueN)rC   r  r   r   r   s   &r:   r  )AugAssign._get_yield_nodes_skip_functions  s6     ::==???7:<<< 	@<   A>AA A Ac              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5irL  )rC   r  r   rM  s   &r:   r  'AugAssign._get_yield_nodes_skip_lambdas  s5     ::;;===78::: 	>:rO  c                    V ^8  d   QhRRRR/# )r5   rN   rO   r6   z;Generator[InferenceResult | util.BadBinaryOperationMessage]r8   )r9   s   "r:   r;   r2    s     ' '.'	D'r<   c           	   #  D  "   T;'       g    \        4       pVP                  4       pV P                  P                  VR7      pV P                  P                  VR7      p\        P                  ! W44       F  w  rV\        ;QJ d    R We3 4       F  '       g   K   RM	  RM! R We3 4       4      '       d   \        P                  x   R#  V P                  VVV VV P                  R7       Rj  xL
  K  	  R#  L
  \         d    \        P                  x   K  i ; i5i)z0Inference logic for augmented binary operations.ry   c              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir>   r?   r   rW   r   rC   s   & r:   r   -AugAssign._infer_augassign.<locals>.<genexpr>        S
u:eT%9%9::
   ')TFN)leftrightbinary_opnoderN   flow_factory)r   cloner"  r'  rC   rV   ro  productrh   r   rS   _infer_binary_operation_get_aug_flowr#   )r   rN   rhs_contextlhs_iterrhs_iterlhsrhss   &&     r:   rA  AugAssign._infer_augassign  s      //-/mmo;;(((9::##K#8!))(=HCsS
SsssS
SSS&&&	'77"&#!%!3!3 8    > . '&&&'sH   BD D 6D #C</C:0C<4D :C<<DD DD c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r2    $     
 
.
AD
	#
r<   c                	X    V P                  V P                  V\        P                  4      # r>   )_filter_operation_errorsrA  r   rB  r  s   &&,r:   r   AugAssign._infer  s*    
 ,,!!7D,J,J
 	
r<   )r1  r"  rC   r9  r1  r>   )r   r   r   r   r   r   r*  r  r   r   r   r  r  rE  r   r  r  rA  r   r   r,  r   r   r   r   s   @r:   r  r  =  s     *OM(($M3
 
0 44N*=
;
'8 ))
  *
r<   r  c                     a  ] tR tRt$ RtRtRtR]R&    R]R&    R V 3R lltR R	 lt	RR
 R llt
R tR R ltR R ltRR R llt]P                   ]P"                  RR R ll4       4       tRtV ;t# )BinOpi  zClass representing an :class:`ast.BinOp` node.

A :class:`BinOp` node is an application of a binary operator.

>>> import astroid
>>> node = astroid.extract_node('a + b')
>>> node
<BinOp l.1 at 0x7f23b2e8cfd0>
rZ  r[  r(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r0  r8   )r9   s   "r:   r;   BinOp.__annotate__  P     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r4  r5  s   &&&&&$$r:   r   BinOp.__init__  .     !!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   rZ  r(   r[  r6   r   r8   )r9   s   "r:   r;   rq    s!      V F t r<   c                	    Wn         W n        R # r>   rZ  r[  )r   rZ  r[  s   &&&r:   r   BinOp.postinit  s    	
r<   c                    V ^8  d   QhRRRR/# r>  r8   )r9   s   "r:   r;   rq    r?  r<   c                    . p V P                  VR7       FP  pV\        P                  J d   \        h\	        V\        P
                  4      '       g   K?  VP                  V4       KR  	  V#   \         d    . u # i ; i)zGet a list of type errors which can occur during inference.

Each TypeError is represented by a :class:`BadBinaryOperationMessage`,
which holds the original exception.

If any inferred result is uninferable, an empty list is returned.
ry   )_infer_binopr   rS   r   r?   rB  r   rC  s   &&  r:   rE  BinOp.type_errors  sv     	++G+<T---((fd&D&DEEJJv&	 = 
  	I	rG  c              #  	F   "   V P                   x  V P                  x  R # 5ir>   rx  r   s   &r:   r   BinOp.get_children  s     iijjrJ  c                   V ^8  d   QhRR/# ri  r8   )r9   s   "r:   r;   rq         & &s &r<   c                	0    \         V P                  ,          # r>   r'   r1  r   s   &r:   op_precedenceBinOp.op_precedence      TWW%%r<   c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   rq    s      T r<   c                	     V P                   R 8g  # )rz  rm  r   s   &r:   op_left_associativeBinOp.op_left_associative  s    ww$r<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   rq  
  s$     ' '.'AD'	#'r<   c              +  R  "   V P                   pV P                  pT;'       g    \        4       p\        V4      p\        V4      pVP	                  VR7      pVP	                  VR7      p\
        P                  ! Wx4       F|  w  r\        ;QJ d    R W3 4       F  '       g   K   RM	  RM! R W3 4       4      '       d   \        P                  x   R#  V P                  WWV P                  4       Rj  xL
  K~  	  R#  L
  \         d    \        P                  x   K  i ; i5i)z!Binary operation inference logic.ry   c              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir>   rU  rV  s   & r:   r   %BinOp._infer_binop.<locals>.<genexpr>  rX  rY  TFN)rZ  r[  r   r   rV   ro  r_  rh   r   rS   r`  _get_binop_flowr#   )r   rN   r   rZ  r[  lhs_contextrb  rc  rd  re  rf  s   &&,        r:   r|  BinOp._infer_binop
  s      yy


 //-/"7+"7+::k:2;;{;3!))(=HCsS
SsssS
SSS&&&'77dT-A-A   > . '&&&'sH   BD'$D' D' D6D7D;D'DD$ D'#D$$D'c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   rq  (  ri  r<   c                	X    V P                  V P                  V\        P                  4      # r>   )rk  r|  r   rB  r  s   &&,r:   r   BinOp._infer&  s*    
 ,,w(F(F
 	
r<   )rZ  r1  r[  rx  rm  r>   )r   r   r   r   r   r   r*  r  r   r   rE  r   r  r  r|  r   yes_if_nothing_inferredr,  r   r   r   r   s   @r:   ro  ro    st     (OM
LAMB
 
**&'8 ''
  (
r<   ro  c                     a  ] tR tRtRtRtRtRRRRR/R V 3R lllltRR R	 lltR
 t	R R lt
]P                  ]P                  RR R ll4       4       tRtV ;t# )BoolOpi0  zClass representing an :class:`ast.BoolOp` node.

A :class:`BoolOp` is an application of a boolean operator.

>>> import astroid
>>> node = astroid.extract_node('a and b')
>>> node
<BinOp l.1 at 0x7f23b2e71c50>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r5   r1  r   r   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   BoolOp.__annotate__>  sP     %
 %
%
 %
 	%

 %
 %
 #%
 
%
r<   c               N   < Wn          . V n         \        SV `  VVVVVR7       R# )a  
:param op: The operator.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   N)r1  r   r   r   r5  s   &&&&&$$r:   r   BoolOp.__init__>  s8    2 $&7!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r5   r   rQ  r6   r   r8   )r9   s   "r:   r;   r  e  s     ! !2 !d !r<   c                    Ve	   Wn         R# R# )z^Do some setup after initialisation.

:param values: The values being applied to the operator.
Nr   r   r   s   &&r:   r   BoolOp.postinite  s    
  K r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   r  r   s   &r:   r   BoolOp.get_childrenm       ;;r   c                   V ^8  d   QhRR/# ri  r8   )r9   s   "r:   r;   r  p  r  r<   c                	0    \         V P                  ,          # r>   r  r   s   &r:   r  BoolOp.op_precedencep  r  r<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r  u  s$     2> 2>.2>AD2>	D2>r<   c              +  `  "   V P                   pV P                  R8X  d   \        P                  pM\        P                  p V Uu. uF  qUP                  VR7      NK  	  pp\        P                  ! T!   F  p\        ;QJ d    R T 4       F  '       g   K   RM	  RM! R T 4       4      '       d   \        P                  x  KQ  T Uu. uF  qP                  4       NK  	  p	p\        ;QJ d    R T	 4       F  '       g   K   RM	  RM! R T	 4       4      '       d   \        P                  x  K  \        P                  p\        Yy4       F  w  rZT! T
4      '       g   K  Tx   K  	  Tx  K  	  \        YR7      # u upi   \         d    \        P                  x   R# i ; iu upi 5i)	zInfer a boolean operation (and / or / not).

The function will calculate the boolean operation
for all pairs generated through inference for each component
node.
orry   Nc              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir>   rU  r   items   & r:   r    BoolOp._infer.<locals>.<genexpr>  s      Kdd:dD$8$899drY  TFc              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir>   rU  r  s   & r:   r   r    s      Rkd:dD$8$899krY  r   )r   r1  operatortruthnot_rV   r   r   rS   ro  r_  rh   r   zipr+   )r   rN   r   r   	predicaterC   inferred_valuespairr  bool_valuesr   s   &&,        r:   r   BoolOp._infers  sN     77d? I I	IOP{{7{;OP
 %%7DsKdKsssKdKKK&&&9=>??,K>sRkRsssRkRRR&&& $$E%(%;!Z((K &<
 7 8: "t==E Q 	"""	 ?se   ?F.F F  F "3F.F.3F.F)#F.F.?F.#F. F F&"F.%F&&F.)r1  r   r  rm  NNNr>   )r   r   r   r   r   r   r*  r   r   r   r  r   r   r,  r   r   r   r   s   @r:   r  r  0  sj     "OM%
 "&%
 &*%
 %
N!& ))2>  *2>r<   r  c                      ] tR tRtRtRtR# )Breaki  zClass representing an :class:`ast.Break` node.

>>> import astroid
>>> node = astroid.extract_node('break')
>>> node
<Break l.1 at 0x7f23b2e9e5c0>
r8   Nr   r   r   r   r   r   r8   r<   r:   r  r        r<   r  c                      ] tR tRt$ RtRtR]R&    R]R&    R]R&    R	 R
 lt]R R l4       t	]R R l4       t
R t]P                  ]P                  RR R ll4       4       tR R ltRtR# )Calli  zClass representing an :class:`ast.Call` node.

A :class:`Call` node is a call to a function, method, etc.

>>> import astroid
>>> node = astroid.extract_node('function()')
>>> node
<Call l.1 at 0x7f23b2e71eb8>
r  rD  keywordsr(   r  list[Keyword]c               (    V ^8  d   QhRRRRRRRR/# )	r5   r  r(   rD  r  r  r  r6   r   r8   )r9   s   "r:   r;   Call.__annotate__  s,     ! !!".!:G!	!r<   c                	*    Wn         W n        W0n        R # r>   r  rD  r  )r   r  rD  r  s   &&&&r:   r   Call.postinit  s     		 r<   c                   V ^8  d   QhRR/# )r5   r6   zlist[Starred]r8   )r9   s   "r:   r;   r    s     F F- Fr<   c                t    V P                    Uu. uF  p\        V\        4      '       g   K  VNK  	  up# u upi )z/The positional arguments that unpack something.)rD  r?   r   )r   r  s   & r:   starargsCall.starargs  s+      $yyEyJsG,DyEEEs   55c                   V ^8  d   QhRR/# )r5   r6   r  r8   )r9   s   "r:   r;   r    s     M M Mr<   c                b    V P                    Uu. uF  qP                  e   K  VNK  	  up# u upi )z,The keyword arguments that unpack something.)r  r  )r   keywords   & r:   r   Call.kwargs  s&     (,}}L}G}LLLs   ,,c              #  	   "   V P                   x  V P                   R j  xL
  V P                   R j  xL
  R #  L L5ir>   r  r   s   &r:   r   Call.get_children  s0     ii99==   	    ?;?=??Nc               $    V ^8  d   QhRRRRRR/# r5   rN   rO   r   r
   r6   r  r8   )r9   s   "r:   r;   r    s$     > >.>AD>	=>r<   c              +    "   \        V4      pRVn        Ve%   V P                  VP                  4       4      Vn        V P
                  P                  V4       F  p\        V\        P                  4      '       d   Vx  K)   \        VR4      '       dD   \        V P                  V P                  VR7      Vn        VP                  WR7       Rj  xL
  K  K  	  \#        WR7      #  L  \          d     K  i ; i5i)z?Infer a Call node by trying to guess what the function returns.Ninfer_call_result)rD  r  callee)callerrN   r   )r   r  _populate_context_lookupr^  extra_contextr  rV   r?   r   rW   r   r   rD  r  callcontextr  r   r+   )r   rN   r   r  r  s   &&,  r:   r   Call._infer  s      #7+ $(,(E(Egmmo(VK%iioog.F&$"6"677	6#677.9!YYv/K+  &77#  8    	 8 / "t== " s=   A?C;AC)C'C)C;'C))C84C;7C88C;c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r    s      0G r<   c                    / pVf   V# V P                    F-  p\        V\        4      '       d   WVP                  &   K)  WV&   K/  	  V P                  e   V P                  M. pV F  pWVP                  &   K  	  V# )zEAllows context to be saved for later for inference inside a function.)rD  r?   r   rC   r  )r   rN   context_lookupr  r  r  s   &&    r:   r  Call._populate_context_lookup  ss    BD?!!99C#w'',3syy)&-s#	 
 %)MM$=4==2G,37==)  r<   )rD  r  r  r  r>   )r   r   r   r   r   r   r  r   propertyr  r   r   r   r   r,  r   r  r   r8   r<   r:   r  r    s     3O
L
;8! F F M M! ))>  *>2 r<   r  z==z!=<z<=>z>=inc                
    W9   # r>   r8   abs   &&r:   <lambda>r    s    qvr<   znot inc                
    W9  # r>   r8   r  s   &&r:   r  r    s    1:r<   z%dict[str, Callable[[Any, Any], bool]]COMPARE_OPSiszis notc                      ] tR tRt$ RtRtR]R&    R]R&    R R ltR	 tR
 t	]
R R l4       tR R ltRR R lltRtR# )Comparei  a,  Class representing an :class:`ast.Compare` node.

A :class:`Compare` node indicates a comparison.

>>> import astroid
>>> node = astroid.extract_node('a <= b <= c')
>>> node
<Compare l.1 at 0x7f23b2e9e6d8>
>>> node.ops
[('<=', <Name.b l.1 at 0x7f23b2e9e2b0>), ('<=', <Name.c l.1 at 0x7f23b2e9e390>)]
rZ  opsr(   list[tuple[str, NodeNG]]c               $    V ^8  d   QhRRRRRR/# )r5   rZ  r(   r  r  r6   r   r8   )r9   s   "r:   r;   Compare.__annotate__2  s"      V *B t r<   c                	    Wn         W n        R # r>   rZ  r  )r   rZ  r  s   &&&r:   r   Compare.postinit2  s    	r<   c              #  \   "   V P                   x  V P                   F	  w  rVx  K  	  R# 5i)zGet the child nodes below this node.

Overridden to handle the tuple fields and skip returning the operator
strings.

:returns: The children.
:rtype: iterable(NodeNG)
Nr  )r   r&  
comparators   &  r:   r   Compare.get_children6  s&      ii!XXMA &s   *,c                6    V P                   R,          ^,          # )z[An optimized version of list(get_children())[-1]

:returns: The last child.
:rtype: NodeNG
r  )r  r   s   &r:   
last_childCompare.last_childC  s     xx|Ar<   c                    V ^8  d   QhRRRR/# )r5   rQ   r-   r6   r
   r8   )r9   s   "r:   r;   r  O  s     2 23 2 2r<   c                	J    \         P                  ! V P                  4       4      # r>   )astliteral_evalr  )rQ   s   &r:   _to_literalCompare._to_literalN  s    
  011r<   c               (    V ^8  d   QhRRRRRRRR/# )r5   	left_iterzIterable[InferenceResult]r1  r   
right_iterr6   zbool | util.UninferableBaser8   )r9   s   "r:   r;   r  U  s2     . .,. . .	.
 
%.r<   c                x   RpV\         9   d   \        P                  # \        V,          p\        P
                  ! W4       F  w  rg\        V\        P                  4      '       g!   \        V\        P                  4      '       d   \        P                  u #  V P                  V4      V P                  V4      rv T! Yg4      pTf   TpK  YH8w  g   K  \        P                  u # 	  Vf   Q hV#   \        \        \        \        3 d    \        P                  u u # i ; i  \         d   p	\        T	hRp	?	ii ; i)a9  
If all possible combinations are either True or False, return that:
>>> _do_compare([1, 2], '<=', [3, 4])
True
>>> _do_compare([1, 2], '==', [3, 4])
False

If any item is uninferable, or if some combinations are True and some
are False, return Uninferable:
>>> _do_compare([1, 3], '<=', [2, 4])
util.Uninferable
N)UNINFERABLE_OPSr   rS   r  ro  r_  r?   rW   r  SyntaxErrorr   r  r   r   )
r   r  r1  r  rq  op_funcrZ  r[  r  r   s
   &&&&      r:   _do_compareCompare._do_compareU  s   $ # ###b/$,,YCKD$ 4 455t++: : '''("..t4d6F6Fu6Me0t+ ~'''' D, !!!  ^YG ('''(
  0&C/0s*   !C/;D"/+DD"D9-D44D9Nc               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   z-Generator[nodes.Const | util.UninferableBase]r8   )r9   s   "r:   r;   r    s$        . AD 	6 r<   c              +    "   RpV P                   pV P                  p\        VP                  VR7      4      pV F=  w  rx\        VP                  VR7      4      p	 V P	                  WgV	4      pTRJd    MT	pK?  	  V\        P                  J d   Vx  R# \        V4      x  R#   \
         d    \        P                  p  KH  i ; i5i)z#Chained comparison inference logic.Try   N)	r  rZ  r  rV   r  r   r   rS   rz   )
r   rN   r   rq  r  	left_nodere  r1  
right_noderf  s
   &&,       r:   r   Compare._infer  s      /3hhII	9??7?34!NBz'''89C))#37 T!C " T%%%L- $ ))s*   ACB$-7C$C?CCCr  r>   )r   r   r   r   r   r   r  r   r   r  staticmethodr  r  r   r   r8   r<   r:   r  r    sR    
 &O
LG	!!M 2 2.`   r<   r  c                      ] tR tRt$ RtRtRtRt R]R&    R]R&    R	]R&    R
]R&    R R lt	]
P                  t R tR R ltR tRtR# )Comprehensioni  a  Class representing an :class:`ast.comprehension` node.

A :class:`Comprehension` indicates the loop inside any type of
comprehension including generator expressions.

>>> import astroid
>>> node = astroid.extract_node('[x for x in some_values]')
>>> list(node.get_children())
[<Name.x l.1 at 0x7f23b2e352b0>, <Comprehension l.1 at 0x7f23b2e35320>]
>>> list(node.get_children())[1].as_string()
'for x in some_values'
r"  iterifsis_asyncTr(   r  r7   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r5   r"  r(   r  r  r  r  r7   r6   r   r8   )r9   s   "r:   r;   Comprehension.__annotate__  s<     
! 
!
! 
! 	
!
 
! 

!r<   c                	6    Wn         W n        W0n        W@n        R # r>   )r"  r  r  r  )r   r"  r  r  r  s   &&&&&r:   r   Comprehension.postinit  s     	 r<   c                    V # )z_The type of assignment that this node performs.

:returns: The assignment type.
:rtype: NodeNG
r8   r   s   &r:   assign_typeComprehension.assign_type  s	     r<   c                   V ^8  d   QhRR/# )r5   mystmtz_base_nodes.Statement | Noner8   )r9   s   "r:   r;   r    s      0Lr<   c                    WJ d'   \        V\        \        34      '       d   V.R3#  VR3# V P                  4       VJ d   V.R3# VR3# )zmethod used in filter_stmtsTF)r?   rz   r5  	statement)r   lookup_noderQ   r  r  s   &&&&&r:   _get_filtered_stmts!Comprehension._get_filtered_stmts  sa     >+t}55#}d** 6 e| ^^' 64<e|r<   c              #  	r   "   V P                   x  V P                  x  V P                   R j  xL
  R #  L5ir>   r"  r  r  r   s   &r:   r   Comprehension.get_children  s%     kkii88s   ,757)r  r  r  r"  Nr$  )r  )r   r   r   r   r   r   r*  optional_assignr  r   r   for_assigned_stmtsr  r  r!  r   r   r8   r<   r:   r  r    sb     0O!MO:N3
L5	JN?
! 11N r<   r  c                     a  ] tR tRtRtRtRR]R3RRRR/R V 3R llllt]P                  t
]P                  tV 3R ltRR	 R
 lltR R ltR tR R ltRR R lltRR R lltRtV ;t# )rz   i  a  Class representing any constant including num, str, bool, None, bytes.

>>> import astroid
>>> node = astroid.extract_node('(5, "This is a string.", True, None, b"bytes")')
>>> node
<Tuple.tuple l.1 at 0x7f23b2e358d0>
>>> list(node.get_children())
[<Const.int l.1 at 0x7f23b2e35940>,
<Const.str l.1 at 0x7f23b2e35978>,
<Const.bool l.1 at 0x7f23b2e359b0>,
<Const.NoneType l.1 at 0x7f23b2e359e8>,
<Const.bytes l.1 at 0x7f23b2e35a20>]
Nr   r   c               8    V ^8  d   QhRRRRRRRRRR	R
RRRRR/# )r5   rC   r
   r   r   r   r   r(   kindrZ  r   r   r6   r   r8   )r9   s   "r:   r;   Const.__annotate__  sZ     3& 3&3& 3& 	3&
 3& 3& 3& #3& 
3&r<   c                  < \        VRR4      R8X  d   \        P                  ! R\        ^ R7       Wn         WPn         \        SV `  VVVVVR7       \        P                  ! V R4       R# )a-  
:param value: The value that the constant represents.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param kind: The string prefix. "u" for u-prefixed strings and ``None`` otherwise. Python 3.8+ only.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr   zYou have most likely called a __doc__ field of some object and it didn't return a string. That happens to some symbols from the standard library. Check for isinstance(<X>.__doc__, str).r  r   )	r~  r  r  RuntimeWarningrC   r*  r   r   r   )	r   rC   r   r   r   r*  r   r   r   s	   &&&&&&$$r:   r   Const.__init__  st    8 5*d+y8MM:  
5 $	f!!) 	 	
 	$%r<   c                	<   < VR 8X  d   \         h\        SV `	  V4      # rB   )r  r   __getattr__)r   r   r   s   &&r:   r0  Const.__getattr__9  s"     7?  w"4((r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r+  D  s     &A &A&= &Ar<   c                V   \        V\        4      '       d   VP                  pM;\        V\        4      '       d   \	        WR7      pM\        R\        V4       R24      h \        V P                  \        \        34      '       d   \        V P                  V,          4      #  \        T : R
T P                   R24      h  \         d$   p\        RT P                  : RT: 24      ThRp?i\         d   p\        RT TTR7      ThRp?i\         d   p\        R	YTR7      ThRp?ii ; i)zGet an item from this node if subscriptable.

:param index: The node to use as a subscript index.
:type index: Const or Slice

:raises AstroidTypeError: When the given index cannot be used as a
    subscript index, or if this node is not subscriptable.
ry   zCould not use type r   zCould not index z with NzIndex {index!r} out of ranger   r   z (value=r  )r?   rz   rC   r   r   r   r|   r   bytesr   r   r   r   r   )r   r   rN   index_valuer   s   &&&  r:   getitemConst.getitemD  s$    eU##++Ku%%&u>K #%d5k]2EF 	$**sEl33TZZ455 4$ $$**Q?@@!  	#"4::.{oF  	#6	
   	".TPW	s=    AB? ?D(
C((D(5D(6DD(D(D##D(c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   r+  l  s      T r<   c                    R# )zCheck if the node has a custom __getattr__ or __getattribute__.

:returns: Whether the class has a custom __getattr__ or __getattribute__.
    For a :class:`Const` this is always ``False``.
Fr8   r   s   &r:   has_dynamic_getattrConst.has_dynamic_getattrl  s     r<   c                    \        V P                  \        4      '       d&   V P                   Uu. uF  p\        V4      NK  	  up# \	        R\        V P                  4      : 24      hu upi )zAn iterator over the elements this node contains.

:returns: The contents of this node.
:rtype: iterable(Const)

:raises TypeError: If this node does not represent something that is iterable.
zCannot iterate over type )r?   rC   r   r   r   r|   )r   r   s   & r:   r   Const.iteredt  sV     djj#&&48JJ?JDM$'J??3D4D3GHII @s   A(c                   V ^8  d   QhRR/# r   r8   )r9   s   "r:   r;   r+    s     % % %r<   c                6    V P                   P                  4       # )r   )r  qnamer   s   &r:   r   Const.pytype  s    
 }}""$$r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r+    s     
  
 "9 
 r<   c                    V P                   \        J d   \        '       d   \        P                  # R# \        V P                   4      # )zqDetermine the boolean value of this node.

:returns: The boolean value of this node.
:rtype: bool or Uninferable
T)rC   NotImplementedr   r   rS   r7   r   s   &&r:   r   Const.bool_value  s4     ::''1z4##;t;DJJr<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[Const]r8   )r9   s   "r:   r;   r+    $      .AD	r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   Const._infer        
   	)r*  rC   )rC   r*  r>   )r   r   r   r   r   r*  r)   r   r   const_infer_unary_opinfer_unary_opconst_infer_binary_opinfer_binary_opr0  r6  r:  r   r   r   r   r   r   r   s   @r:   rz   rz     s     &M
 "!%'3& "&3& &*3& 3&j 33N55O	)&AP
J%
  r<   rz   c                      ] tR tRtRtRtR# )Continuei  zClass representing an :class:`ast.Continue` node.

>>> import astroid
>>> node = astroid.extract_node('continue')
>>> node
<Continue l.1 at 0x7f23b2e35588>
r8   Nr  r8   r<   r:   rQ  rQ    r  r<   rQ  c                  V    ] tR tRt$ RtRtR]R&    R R ltR R ltR	 R
 lt	R t
RtR# )
Decoratorsi  ae  A node representing a list of decorators.

A :class:`Decorators` is the decorators that are applied to
a method or function.

>>> import astroid
>>> node = astroid.extract_node('''
@property
def my_property(self):
    return 3
''')
>>> node
<FunctionDef.my_property l.2 at 0x7f23b2e35d30>
>>> list(node.get_children())[0]
<Decorators l.1 at 0x7f23b2e35d68>
r0   r  c                    V ^8  d   QhRRRR/# )r5   r0   r  r6   r   r8   )r9   s   "r:   r;   Decorators.__annotate__  s      l t r<   c                	    Wn         R # r>   r/   )r   r0   s   &&r:   r   Decorators.postinit      
r<   c                   V ^8  d   QhRR/# r5   r6   r1   r8   )r9   s   "r:   r;   rU    s     * *' *r<   c                    V P                   '       g   \        V R7      hV P                   P                   '       g   \        V P                   R7      hV P                   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"  )r   r"   r  r   s   &r:   r  Decorators.scope  sP     {{{$D11{{!!!$DKK88{{!!''))r<   c                   V ^8  d   QhRR/# r5   r6   r2   r8   )r9   s   "r:   r;   rU    s     * *y *r<   c                    V P                   '       g   \        V R7      hV P                   P                   '       g   \        V P                   R7      hV P                   P                   P                  4       # )z+The first parent node defining a new frame.r]  )r   r"   r$  r   s   &r:   r$  Decorators.frame  sP     {{{$D11{{!!!$DKK88{{!!''))r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   r/   r   s   &r:   r   Decorators.get_children  s     ::r   r/   N)r   r   r   r   r   r   r  r   r  r$  r   r   r8   r<   r:   rS  rS    s+    " !O1**r<   rS  c                  Z   a  ] tR tRt$ RtRtRtR]R&    R V 3R lltR R lt	R	 t
R
tV ;t# )DelAttri  zVariation of :class:`ast.Delete` representing deletion of an attribute.

>>> import astroid
>>> node = astroid.extract_node('del self.attr')
>>> node
<Delete l.1 at 0x7f23b2e35f60>
>>> list(node.get_children())[0]
<DelAttr.attr l.1 at 0x7f23b2e411d0>
r  r(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r  r8   )r9   s   "r:   r;   DelAttr.__annotate__  r  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   DelAttr.__init__  s.     !>!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   rh    r  r<   c                	    Wn         R # r>   r  r  s   &&r:   r   DelAttr.postinit  r   r<   c              #  	*   "   V P                   x  R # 5ir>   r  r   s   &r:   r   DelAttr.get_children 	  r  r  r  r  r  r   r   r   r   r   r   r*  r  r   r   r   r   r   r   s   @r:   rf  rf    s5      O!M
L-
 
* r<   rf  c                  H   a  ] tR tRtRtRtR V 3R lltR R ltR tRt	V ;t
# )	Deletei	  zClass representing an :class:`ast.Delete` node.

A :class:`Delete` is a ``del`` statement this is deleting something.

>>> import astroid
>>> node = astroid.extract_node('del self.attr')
>>> node
<Delete l.1 at 0x7f23b2e35f60>
c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r5   r   r{   r   r   r(   r   r   r   r6   r   r8   )r9   s   "r:   r;   Delete.__annotate__	  sF     
 

 
 	
 
 #
 

r<   c               	@   < . V n          \        SV `	  VVVVVR 7       R# r   )r	  r   r   r   s   &&&&$$r:   r   Delete.__init__	  s0     &($!!) 	 	
r<   c                    V ^8  d   QhRRRR/# )r5   r	  r  r6   r   r8   )r9   s   "r:   r;   rt  %	  s        r<   c                	    Wn         R # r>   r	  )r   r	  s   &&r:   r   Delete.postinit%	      r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   ry  r   s   &r:   r   Delete.get_children(	  s     <<r   ry  r   r   r   r   r   r   r   r   r   r   r   r   s   @r:   rr  rr  	  s(     #O
 
(   r<   rr  c                     a  ] tR tRtRtRtR V 3R lltR R lt]P                  t
R R ltR	 tR
 tR tRR R lltRR R lltRR R llt]R R l4       tR R ltRtV ;t# )Dicti,	  zClass representing an :class:`ast.Dict` node.

A :class:`Dict` is a dictionary that is created with ``{}`` syntax.

>>> import astroid
>>> node = astroid.extract_node('{1: "1"}')
>>> node
<Dict.dict l.1 at 0x7f23b2e35cc0>
c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   Dict.__annotate__9	  r   r<   c               	@   < . V n          \        SV `	  VVVVVR 7       R# r   )itemsr   r   r   s   &&&&$$r:   r   Dict.__init__9	  s2     EG
>!!) 	 	
r<   c                    V ^8  d   QhRRRR/# )r5   r  z-list[tuple[InferenceResult, InferenceResult]]r6   r   r8   )r9   s   "r:   r;   r  M	  s      K PT r<   c                    Wn         R# )zdDo some setup after initialisation.

:param items: The key-value pairs contained in the dictionary.
Nr  )r   r  s   &&r:   r   Dict.postinitM	  s	    
 
r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['builtins.dict']r8   )r9   s   "r:   r;   r  V	        0 r<   c                    R# )r   zbuiltins.dictr8   r   s   &r:   r   Dict.pytypeV	      
 r<   c              #  H   "   V P                    F  w  rVx  Vx  K  	  R# 5i)zGet the key and value nodes below this node.

Children are returned in the order that they are defined in the source
code, key first then the value.

:returns: The children.
:rtype: iterable(NodeNG)
Nr  )r   keyrC   s   &  r:   r   Dict.get_children]	  s!      **JCIK %s    "c                ^    V P                   '       d   V P                   R,          ^,          # R# )zAn optimized version of list(get_children())[-1]

:returns: The last child, or None if no children exist.
:rtype: NodeNG or None
Nr  r  r   s   &r:   r  Dict.last_childj	  s#     :::::b>!$$r<   c                N    V P                    UUu. uF  w  rVNK	  	  upp# u uppi )ziAn iterator over the keys this node contains.

:returns: The keys of this node.
:rtype: iterable(NodeNG)
r  )r   r  r&  s   &  r:   r   Dict.iteredt	  s"     %)JJ/JJ///s   !c               $    V ^8  d   QhRRRRRR/# )r5   r   zConst | SlicerN   rO   r6   r(   r8   )r9   s   "r:   r;   r  |	  s$     ' '"'-D'	'r<   c                :   V P                    F  w  r4\        V\        4      '       dC   \        P                  ! WB4      p\        V\
        4      '       g   KI   VP                  W4      u # VP                  V4       Fv  p\        V\        P                  4      '       d   K%  \        V\        4      '       g   K=  \        V\        4      '       g   KU  VP                  VP                  8X  g   Kr  Vu u # 	  K  	  \        V4      h  \        \        3 d     EK  i ; i)a$  Get an item from this node.

:param index: The node to use as a subscript index.

:raises AstroidTypeError: When the given index cannot be used as a
    subscript index, or if this node is not subscriptable.
:raises AstroidIndexError: If the given index does not exist in the
    dictionary.
)r  r?   
DictUnpackr   r   r  r6  r   r   rV   rW   rz   rC   )r   r   rN   r  rC   inferred_valueinferredkeys   &&&    r:   r6  Dict.getitem|	  s     **JC#z**!%!@!.$77)11%AA  #yy1k4+?+?@@k511j6N6N"((EKK7$  2 %&  && )*;< s   DDDc                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r  	  s        "9  r<   c                ,    \        V P                  4      # )zbDetermine the boolean value of this node.

:returns: The boolean value of this node.
:rtype: bool
)r7   r  r   s   &&r:   r   Dict.bool_value	  s     DJJr<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[nodes.Dict]r8   )r9   s   "r:   r;   r  	  s$      .AD	r<   c              +  	  "   \         ;QJ d&    R  V P                   4       F  '       g   K   RM	  RM! R  V P                   4       4      '       g   V x  R# V P                  V4      p\        V 4      ! V P                  V P
                  V P                  V P                  V P                  R7      pVP                  \        VP                  4       4      4       Vx  R# 5i)c              3  F   "   T F  w  r\        V\        4      x  K  	  R # 5ir>   )r?   r  )r   kr&  s   &  r:   r   Dict._infer.<locals>.<genexpr>	  s     D:a,,rJ  TFr   N)rh   r  
_infer_mapr|   r   r   r   r   r   r   r  )r   rN   r   r  r   s   &&,  r:   r   Dict._infer	  s      sDDsssDDDDJOOG,E4j{{??{{??#22G T%++-01Ms   'C$CBCc               $    V ^8  d   QhRRRRRR/# )r5   lhs_dict:dict[SuccessfulInferenceResult, SuccessfulInferenceResult]rhs_dictr6   r8   )r9   s   "r:   r;   r  	  s'     ) )L)L) 
D)r<   c                    \         P                  ! V P                  4       VP                  4       4      pV UUu/ uF  w  r4VP                  4       W43bK  	  ppp\	        VP                  4       4      # u uppi )a  Delete nodes that equate to duplicate keys.

Since an astroid node doesn't 'equal' another node with the same value,
this function uses the as_string method to make sure duplicate keys
don't get through

Note that both the key and the value are astroid nodes

Fixes issue with DictUnpack causing duplicate keys
in inferred Dict items

:param lhs_dict: Dictionary to 'merge' nodes into
:param rhs_dict: Dictionary with nodes to pull from
:return : merged dictionary of nodes
)ro  rp  r  r  dictr   )r  r  combined_dictr  rC   
string_maps   &&    r:   _update_with_replacementDict._update_with_replacement	  s_    ( "(8(..:JKFSTm
cmmo|3m
TJ%%'(( Us   A2c                    V ^8  d   QhRRRR/# )r5   rN   rO   r6   r  r8   )r9   s   "r:   r;   r  	  s      .	Cr<   c                J   / pV P                    EF  w  r4\        V\        4      '       dk   \        P                  ! WA4      pV'       g   \
        h\        V\        4      '       g   \        WR7      hVP                  V4      pV P                  W&4      pK  \        P                  ! W1R7      p\        P                  ! WAR7      p\        ;QJ d    R Wx3 4       F  '       g   K   RM	  RM! R Wx3 4       4      '       d   \        WR7      hV P                  W'V/4      pEK  	  V# )z%Infer all values based on Dict.items.r   ry   c              3  .   "   T F  q'       * x  K  	  R # 5ir>   r8   r   s   & r:   r   "Dict._infer_map.<locals>.<genexpr>	  s     >,=Dxx,=s   TF)
r  r?   r  r   r   r   r  r  r  rh   )	r   rN   r   r   rC   double_starredunpack_itemsr  
safe_values	   &&       r:   r  Dict._infer_map	  s     NP::KD$
++!%!@%((!.$77(dDD-88A66vLood<!__UD
3>S,=>333>S,=>>>(dDD66vZ?PQ &  r<   r  r>   )r   r   r   r   r   r   r   r   r   dict_infer_unary_oprM  r   r   r  r   r6  r   r   r  r  r  r   r   r   s   @r:   r  r  ,	  sm     !O
 
( 22N0'B " ) )2 r<   r  c                  J    ] tR tRt$ RtR
tR]R&    R R ltR tR t	R	 t
R
tR# )Expri	  a  Class representing an :class:`ast.Expr` node.

An :class:`Expr` is any expression that does not have its value used or
stored.

>>> import astroid
>>> node = astroid.extract_node('method()')
>>> node
<Call l.1 at 0x7f23b2e352b0>
>>> node.parent
<Expr l.1 at 0x7f23b2e35278>
rC   r(   c                    V ^8  d   QhRRRR/# r5   rC   r(   r6   r   r8   )r9   s   "r:   r;   Expr.__annotate__	        f  r<   c                	    Wn         R # r>   rB   r   rC   s   &&r:   r   Expr.postinit	  rX  r<   c              #  	*   "   V P                   x  R # 5ir>   rB   r   s   &r:   r   Expr.get_children	       jjr  c              #  	   "   V P                   P                  '       g%   V P                   P                  4        R j  xL
  R # R #  L5ir>   )rC   is_functionr  r   s   &r:   r  $Expr._get_yield_nodes_skip_functions
  s3     zz%%%zzAACCC &C   :AA	Ac              #  	   "   V P                   P                  '       g%   V P                   P                  4        R j  xL
  R # R #  L5ir>   )rC   	is_lambdar  r   s   &r:   r  "Expr._get_yield_nodes_skip_lambdas
  s3     zz###zz??AAA $Ar  rB   Nr   r   r   r   r   r   r  r   r   r  r  r   r8   r<   r:   r  r  	  s,     !OM#DBr<   r  c                     a  ] tR tRtRtRtRR]3RRRR/R V 3R lllltR R	 lt]	P                  ]	P                  RR
 R ll4       4       tRtV ;t# )	EmptyNodei

  zAHolds an arbitrary object in the :attr:`LocalsDictNodeNG.locals`.Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR/# )	r5   r   r   r   r   r(   r   r   r6   r8   )r9   s   "r:   r;   EmptyNode.__annotate__
  sF     
 

 
 	
 
 
 

r<   c               	0   < \         SV `  VVVVVR 7       R# r   r   r   r   s   &&&&$$r:   r   EmptyNode.__init__
  &     	!!) 	 	
r<   c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   r   
  s     S St Sr<   c                	R    V P                   R J;'       d    V P                   \        J# r>   )objectr   r   s   &r:   has_underlying_objectEmptyNode.has_underlying_object 
  s#    {{$&RR4;;>R+RRr<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r  %
  s$     ' '.'AD'	#'r<   c              +  	
  "   V P                  4       '       g   \        P                  x  R#  \        4       P	                  V P
                  VR 7       Rj  xL
  R#  L  \         d    \        P                  x   R# i ; i5i)ry   N)r  r   rS   r%   infer_ast_from_somethingr  r   r  s   &&,r:   r   EmptyNode._infer#
  sm     
 ))++"""')+DDKK E      '&&&'s:   +B(A AA BA B <B?B  Br8   r>   )r   r   r   r   r   r  r)   r   r  r   r   r,  r   r   r   r   s   @r:   r  r  

  sb    KF '	
  
  $
 
"S ))'  *'r<   r  c                      ] tR tRt$ RtRtRtR]R&    R]R&    R]R&    ]P                  t
 R	 R
 ltR t]R 4       tR R ltRtR# )ExceptHandleri3
  ar  Class representing an :class:`ast.ExceptHandler`. node.

An :class:`ExceptHandler` is an ``except`` block on a try-except.

>>> import astroid
>>> node = astroid.extract_node('''
    try:
        do_something()
    except Exception as error:
        print("Error!")
    ''')
>>> node
<Try l.2 at 0x7f23b2e9d908>
>>> node.handlers
[<ExceptHandler l.4 at 0x7f23b2e9e860>]
r|   r   ra   r   rU  r  c               (    V ^8  d   QhRRRRRRRR/# )	r5   r|   r   r   rU  ra   r  r6   r   r8   )r9   s   "r:   r;   ExceptHandler.__annotate__X
  s2         	
 
r<   c                	*    Wn         W n        W0n        R # r>   r|   r   ra   )r   r|   r   ra   s   &&&&r:   r   ExceptHandler.postinitX
  s     			r<   c              #  	   "   V P                   e   V P                   x  V P                  e   V P                  x  V P                   R j  xL
  R #  L5ir>   r  r   s   &r:   r   ExceptHandler.get_childrenb
  s8     99 ))O99 ))O99s   AA
AAc                    V P                   '       d   V P                   P                  # V P                  '       d   V P                  P                  # V P                  # @The line on which the beginning of this block ends.

:type: int
)r   tolinenor|   r   r   s   &r:   blockstart_tolineno!ExceptHandler.blockstart_tolinenok
  s@     99999%%%99999%%%{{r<   c                    V ^8  d   QhRRRR/# r\   r8   )r9   s   "r:   r;   r  w
  s     T T 0 TT Tr<   c                   a V P                   e   Sf   R# \        ;QJ d7    V3R lV P                   P                  4        4       F  '       g   K   R# 	  R# ! V3R lV P                   P                  4        4       4      # )zjCheck if this node handles any of the given

:param exceptions: The names of the exceptions to check for.
Tc              3  @   <"   T F  qP                   S9   x  K  	  R # 5ir>   r)  )r   rQ   r]   s   & r:   r   &ExceptHandler.catch.<locals>.<genexpr>~
  s     S7Rt99
*7Rs   F)r|   rh   r;  )r   r]   s   &fr:   rg   ExceptHandler.catchw
  sZ    
 99
 2sStyy7P7P7RSssSsSsStyy7P7P7RSSSr<   )ra   r   r|   Nr  ra   )r   r   r   r   r   r   _multi_line_block_fieldsr  r   excepthandler_assigned_stmtsr  r   r   r   r  rg   r   r8   r<   r:   r  r  3
  si    " /O(
+
<
$;;N 	 	T Tr<   r  c                      ] tR tRt$ RtRtRtRtRt R	]	R&    R	]	R&    R
]	R&    R
]	R&    R]	R&    R R lt
]P                  t ]R 4       tR tRtR# )Fori
  zClass representing an :class:`ast.For` node.

>>> import astroid
>>> node = astroid.extract_node('for thing in things: print(thing)')
>>> node
<For l.1 at 0x7f23b2e8cf28>
r"  r  ra   rb   r
  Tr(   r  r   c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r5   r"  r(   r  ra   r  rb   r
  r   r6   r   r8   )r9   s   "r:   r;   For.__annotate__
  sF     / // / 	/
 / '/ 
/r<   c                	B    Wn         W n        W0n        W@n        WPn        R # r>   )r"  r  ra   rb   r
  )r   r"  r  ra   rb   r
  s   &&&&&&r:   r   For.postinit
  s     		.r<   c                .    V P                   P                  # r  )r  r  r   s   &r:   r  For.blockstart_tolineno
       yy!!!r<   c              #  	   "   V P                   x  V P                  x  V P                   R j  xL
  V P                   R j  xL
  R #  L L5ir>   r"  r  ra   rb   r   s   &r:   r   For.get_children
  s:     kkii99;; 	s!   ,AA	AAAA)ra   r  rb   r"  r
  Nr  r  ra   rb   )r   r   r   r   r   r   r  r  r&  r  r   r   r'  r  r   r  r   r   r8   r<   r:   r  r  
  s    
 ;O.1O
 N#
L&
/9""T/ 11N " "r<   r  c                      ] tR tRtRtRtR# )AsyncFori
  a|  Class representing an :class:`ast.AsyncFor` node.

An :class:`AsyncFor` is an asynchronous :class:`For` built with
the ``async`` keyword.

>>> import astroid
>>> node = astroid.extract_node('''
async def func(things):
    async for thing in things:
        print(thing)
''')
>>> node
<AsyncFunctionDef.func l.2 at 0x7f23b2e416d8>
>>> node.body[0]
<AsyncFor l.3 at 0x7f23b2e417b8>
r8   Nr  r8   r<   r:   r  r  
  s    r<   r  c                  >    ] tR tRt$ RtRtR]R&    R R ltR tRt	R	# )
Awaiti
  at  Class representing an :class:`ast.Await` node.

An :class:`Await` is the ``await`` keyword.

>>> import astroid
>>> node = astroid.extract_node('''
async def func(things):
    await other_func()
''')
>>> node
<AsyncFunctionDef.func l.2 at 0x7f23b2e41748>
>>> node.body[0]
<Expr l.3 at 0x7f23b2e419e8>
>>> list(node.body[0].get_children())[0]
<Await l.3 at 0x7f23b2e41a20>
rC   r(   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   Await.__annotate__
  r  r<   c                	    Wn         R # r>   rB   r  s   &&r:   r   Await.postinit
  rX  r<   c              #  	*   "   V P                   x  R # 5ir>   rB   r   s   &r:   r   Await.get_children
  r  r  rB   Nr  r8   r<   r:   r  r  
  s     " !OMr<   r  c                     a  ] tR tRtRtRtRRRRR/R V 3R llllt]P                  ]P                  RR R	 ll4       4       t
R
tV ;t# )
ImportFromi
  zClass representing an :class:`ast.ImportFrom` node.

>>> import astroid
>>> node = astroid.extract_node('from my_package import my_module')
>>> node
<ImportFrom l.1 at 0x7f23b2e415c0>
Nr   r   c               <    V ^8  d   QhRRRRRRRRRRR	R
RRRRRR/	# )r5   fromnamerZ  nameslist[tuple[str, str | None]]levelr   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   ImportFrom.__annotate__  sd     :
 :
:
 ,:
 	:

 :
 :
 :
 :
 #:
 
:
r<   c               Z   < Wn          W n         W0n         \        S	V `  VVVVVR7       R# )a.  
:param fromname: The module that is being imported from.

:param names: What is being imported from the module.

:param level: The level of relative import.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   N)modnamer  r  r   r   )
r   r  r  r  r   r   r   r   r   r   s
   &&&&&&&$$r:   r   ImportFrom.__init__  sJ    > $,	
 49
	 "'
	 	!!) 	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   rN   rO   asnamer7   r   r
   r6   r  r8   )r9   s   "r:   r;   r  D  s2      (  	
 
$r<   c                   T;'       g    \        4       pVP                  pVf   \        WR7      hV'       d    V P                  V4      p V P                  4       p \        T4      pYAn        TP                  YFT P                  4       J R7      p\        Yq4      #   \         d   p\        YR7      ThRp?ii ; i  \         d   p\        YR7      ThRp?ii ; i  \         d   p\        \        T4      YTR7      ThRp?ii ; i)z;Infer a ImportFrom node: return the imported module/object.Nr   )ignore_localsr"  	attributerN   )r   r!  r   	real_namer   do_import_moduler   r   r~  rootr   r   )	r   rN   r  r   r   r   moduler  errors	   &&&,     r:   r   ImportFrom._inferB  s    //-/!!< d<<J~~d+	F**,F	"7+G!%NN47LNME// + J$$@cIJ
 $ 	F d<#E	F ' 	 E
4	sG   B B; =C B8&B33B8;CCCD&C>>D)r  r  r  )r  r  r  )r  NNNNTr   r   r   r   r   r*  r   r   r   r,  r   r   r   r   s   @r:   r  r  
  sV     2M:
 "&:
 &*:
 :
x ))  *r<   r  c                     a  ] tR tRt$ RtR]R&   RtRtR V 3R lltR R lt	R	 t
]P                  ]P                  RR
 R ll4       4       tRtV ;t# )	Attributeie  z2Class representing an :class:`ast.Attribute` node.r(   r  c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r  r8   )r9   s   "r:   r;   Attribute.__annotate__m  r  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   Attribute.__init__m  s.     !(!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r(    r  r<   c                	    Wn         R # r>   r  r  s   &&r:   r   Attribute.postinit  r   r<   c              #  	*   "   V P                   x  R # 5ir>   r  r   s   &r:   r   Attribute.get_children  r  r  c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r(    s$     9 9.9AD9	=9r<   c                	    \        W3/ VB # r>   r  r  s   &&,r:   r   Attribute._infer  r  r<   r  r  r  r>   )r   r   r   r   r   r  r   r*  r   r   r   r   r   r,  r   r   r   r   s   @r:   r&  r&  e  sQ    <
LO!M
 
* ))9  *9r<   r&  c                     a  ] tR tRtRtRtRRRRR/R V 3R lllltR t]P                  ]P                  RR	 R
 ll4       4       tRtV ;t# )Globali  zClass representing an :class:`ast.Global` node.

>>> import astroid
>>> node = astroid.extract_node('global a_global')
>>> node
<Global l.1 at 0x7f23b2e9de10>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# r5   r  	list[str]r   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   Global.__annotate__  P     "
 "
"
 "
 	"

 "
 "
 #"
 
"
r<   c               >   < Wn          \        SV `	  VVVVVR7       R# )a  
:param names: The names being declared as global.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr  r   r   r   r  r   r   r   r   r   r   s   &&&&&$$r:   r   Global.__init__  s.    2 !&
1!!) 	 	
r<   c                	    V# r>   r8   re  s   &&&r:   rf  Global._infer_name      r<   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r8    s$      .AD	#r<   c                	   Ve   VP                   f   \        WR7      h \        V P                  4       P	                  VP                   4      V4      #   \
         d(   p\        \        T4      YP                   TR7      ThR p?ii ; i)Nr   r  )r!  r   r   r  r~  r   r   )r   rN   r   r!  s   &&, r:   r   Global._infer  sy    
 ?g008 d<<			 3 3G4F4F GQQ& 	 E
43E3Ew	s   2A B"B  Br  r  r>   )r   r   r   r   r   r*  r   rf  r   r   r,  r   r   r   r   s   @r:   r4  r4    s[     M"
 "&"
 &*"
 "
H ))  *r<   r4  c                     a  ] tR tRt$ RtRtRtR]R&    R]R&    R]R&    R R	 lt]	R
 4       t
R R ltR tR R ltV 3R ltV 3R ltRtV ;t# )rd   i  zClass representing an :class:`ast.If` node.

>>> import astroid
>>> node = astroid.extract_node('if condition: print(True)')
>>> node
<If l.1 at 0x7f23b2e9dd30>
r_   ra   rb   r(   r  c               (    V ^8  d   QhRRRRRRRR/# r5   r_   r(   ra   r  rb   r6   r   r8   )r9   s   "r:   r;   If.__annotate__  s)      V <  RV r<   c                	*    Wn         W n        W0n        R # r>   r_   ra   rb   r   r_   ra   rb   s   &&&&r:   r   If.postinit      		r<   c                .    V P                   P                  # r  r_   r  r   s   &r:   r  If.blockstart_tolineno  r  r<   c                    V ^8  d   QhRRRR/# r5   r   r{   r6   ztuple[int, int]r8   )r9   s   "r:   r;   rH    s     Y Y# Y/ Yr<   c                D   WP                   ^ ,          P                  8X  d   W3# WP                   R,          P                  8:  d   WP                   R,          P                  3# V P                  WP                  V P                   ^ ,          P                  ^,
          4      # )Get 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   rk  r  _elsed_block_rangerb   r   r   s   &&r:   block_rangeIf.block_range  sv     YYq\,,,>!YYr]+++99R=1111&&v{{DIIaL<S<SVW<WXXr<   c              #  	   "   V P                   x  V P                   R j  xL
  V P                   R j  xL
  R #  L L5ir>   rJ  r   s   &r:   r   If.get_children  0     ii99;; 	r  c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   rH    s     H H Hr<   c                	    \        V P                  4      ^8H  ;'       d"    \        V P                  ^ ,          \        4      # )   )r|  rb   r?   rd   r   s   &r:   has_elif_blockIf.has_elif_block  s-    4;;1$GGDKKNB)GGr<   c              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5iz/An If node can contain a Yield node in the testNr_   r  r   rM  s   &r:   r  "If._get_yield_nodes_skip_functions  5     99<<>>>7:<<< 	?<rO  c              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5irb  r_   r  r   rM  s   &r:   r   If._get_yield_nodes_skip_lambdas  5     99::<<<78::: 	=:rO  ra   rb   r_   rJ  r  )r   r   r   r   r   r   r  r  r   r   r  rW  r   r_  r  r  r   r   r   s   @r:   rd   rd     sh     1O1
L1
$-
 " "YH=
; ;r<   rd   c                      ] tR tRt$ RtRtR]R&    R]R&    R]R&    R R ltR	 tR
 R lt	]
P                  RR R ll4       tRtR# )IfExpi  zClass representing an :class:`ast.IfExp` node.
>>> import astroid
>>> node = astroid.extract_node('value if condition else other')
>>> node
<IfExp l.1 at 0x7f23b2e9dbe0>
r_   ra   rb   r(   c               (    V ^8  d   QhRRRRRRRR/# )r5   r_   r(   ra   rb   r6   r   r8   )r9   s   "r:   r;   IfExp.__annotate__)  s(      V 6 6 d r<   c                	*    Wn         W n        W0n        R # r>   rJ  rK  s   &&&&r:   r   IfExp.postinit)  rM  r<   c              #  	b   "   V P                   x  V P                  x  V P                  x  R # 5ir>   rJ  r   s   &r:   r   IfExp.get_children.  s!     iiiikks   -/c                   V ^8  d   QhRR/# )r5   r6   zLiteral[False]r8   )r9   s   "r:   r;   rn  3  s      ^ r<   c                	    R # )Fr8   r   s   &r:   r  IfExp.op_left_associative3  s     r<   Nc               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   rn  9  s$     (> (>.(>AD(>	#(>r<   c              +    "   T;'       g    \        4       p\        V4      p\        V4      pRp V P                  P                  VP	                  4       R7       Fm  p\        V\        P                  4      '       d   Rp MKVP                  4       p\        V\        P                  4      '       d   Rp MVf   TpKc  Wu8w  g   Kk  Rp M	   VRJ g   Vf%   V P                  P                  VR7       Rj  xL
  VRJ g   Vf'   V P                  P                  VR7       Rj  xL
  R# R#   \         d    Rp Loi ; i LI L5i)zSupport IfExp inference.

If we can't infer the truthiness of the condition, we default
to inferring both branches. Otherwise, we infer either branch
depending on the condition.
Nry   TF)r   r   r_   rV   r^  r?   r   rW   r   r   ra   rb   )r   rN   r   r  rb  	conditionr_   test_bool_values   &&,     r:   r   IfExp._infer8  s%     //-/"7+"7+ "&				@dD$8$899 $I"&//"3ot/C/CDD $I$ /I$1 $I A  	 1yy{;;;!2{{(((=== "3  	I	 <=sq   -EAD,  E3D, 4E5D, D, E	D, *E5D?6-E#E$E,D<9E;D<<EErj  rJ  r>   )r   r   r   r   r   r   r  r   r   r  r   r   r   r   r8   r<   r:   rl  rl    sO     1O
L1
L$N-


 ))(> *(>r<   rl  c                     a  ] tR tRtRtR
tRRRRR/R V 3R llllt]P                  ]P                  RR R	 ll4       4       t
R
tV ;t# )Importid  zClass representing an :class:`ast.Import` node.
>>> import astroid
>>> node = astroid.extract_node('import astroid')
>>> node
<Import l.1 at 0x7f23b2e4e5c0>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r5   r  r  r   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   Import.__annotate__n  sP     &
 &
+&
 &
 	&

 &
 &
 #&
 
&
r<   c               >   < Wn          \        SV `	  VVVVVR7       R# )a  
:param names: The names being imported.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr;  r<  s   &&&&&$$r:   r   Import.__init__n  s2    2 49
	 	!!) 	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   rN   rO   r  r7   r   r
   r6   zGenerator[nodes.Module]r8   )r9   s   "r:   r;   r~    s8     F F(F F 	F
 
!Fr<   c              +  .  "   T;'       g    \        4       pVP                  pVf   \        WR7      h V'       d%   V P                  V P	                  V4      4      x  R# V P                  V4      x  R#   \
         d   p\        YR7      ThRp?ii ; i5i)z8Infer an Import node: return the imported module/object.Nr   )r   r!  r   r  r  r   )r   rN   r  r   r   r   s   &&&,  r:   r   Import._infer  s      //-/!!< d<<	F++DNN4,@AA++D11# 	F d<#E	Fs9   1BA5 "A5 B A5 3B5B BBBrD  r  r#  r$  r   s   @r:   r|  r|  d  sX     M&
 "&&
 &*&
 &
P ))F  *Fr<   r|  c                  Z   a  ] tR tRt$ RtRtRtR]R&    R V 3R lltR R lt	R	 t
R
tV ;t# )Keywordi  zClass representing an :class:`ast.keyword` node.

>>> import astroid
>>> node = astroid.extract_node('function(a_kwarg=True)')
>>> node
<Call l.1 at 0x7f23b2e9e320>
>>> node.keywords
[<Keyword l.1 at 0x7f23b2e9e9b0>]
rC   r(   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r5   r  rZ  r   r   r   r   r(   r   r   r6   r   r8   )r9   s   "r:   r;   Keyword.__annotate__  sP     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   )r  r   r   )r   r  r   r   r   r   r   r   s   &&&&&$$r:   r   Keyword.__init__  s.     -!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r    r  r<   c                	    Wn         R # r>   rB   r  s   &&r:   r   Keyword.postinit  rX  r<   c              #  	*   "   V P                   x  R # 5ir>   rB   r   s   &r:   r   Keyword.get_children  r  r  )r  rC   rB   )r  rp  r   s   @r:   r  r    s5     !OMM;
 
* r<   r  c                     a  ] tR tRtRtRtRRRRR/R V 3R llllt]P                  t	 ]P                  t]P                  tR R	 ltRR
 R lltRtV ;t# )rH   i  zClass representing an :class:`ast.List` node.

>>> import astroid
>>> node = astroid.extract_node('[1, 2, 3]')
>>> node
<List.list l.1 at 0x7f23b2e9e128>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# r5   ctxzContext | Noner   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   List.__annotate__  P     "
 "
"
 "
 	"

 "
 "
 #"
 
"
r<   c               >   < Wn          \        SV `	  VVVVVR7       R# )a  
:param ctx: Whether the list is assigned to or loaded from.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr  r   r   r   r  r   r   r   r   r   r   s   &&&&&$$r:   r   List.__init__  s.    2 $'=!!) 	 	
r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['builtins.list']r8   )r9   s   "r:   r;   r    r  r<   c                    R# )r   zbuiltins.listr8   r   s   &r:   r   List.pytype  r  r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r         K K&= Kr<   c                0    \        W P                  WR7      # zmGet an item from this node.

:param index: The node to use as a subscript index.
:type index: Const or Slice
ry   r   rR   r   r   rN   s   &&&r:   r6  List.getitem       "$		5JJr<   r  NNNNr>   )r   r   r   r   r   r*  r   r   sequence_assigned_stmtsr  list_infer_unary_oprM  tl_infer_binary_oprO  r   r6  r   r   r   s   @r:   rH   rH     si     M"
 "&"
 &*"
 "
H 66N 22N22OK Kr<   c                  L   a  ] tR tRtRtR	tR
RRRR/R V 3R lllltR tR	tV ;t	# )Nonlocali!  zClass representing an :class:`ast.Nonlocal` node.

>>> import astroid
>>> node = astroid.extract_node('''
def function():
    nonlocal var
''')
>>> node
<FunctionDef.function l.2 at 0x7f23b2e9e208>
>>> node.body[0]
<Nonlocal l.3 at 0x7f23b2e9e908>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# r6  r8   )r9   s   "r:   r;   Nonlocal.__annotate__1  r9  r<   c               >   < Wn          \        SV `	  VVVVVR7       R# )a  
:param names: The names being declared as not local.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr;  r<  s   &&&&&$$r:   r   Nonlocal.__init__1  s.    2 !&
4!!) 	 	
r<   c                	    V# r>   r8   re  s   &&&r:   rf  Nonlocal._infer_nameU  r@  r<   rD  r  )
r   r   r   r   r   r*  r   rf  r   r   r   s   @r:   r  r  !  s8     M"
 "&"
 &*"
 "
H r<   r  c                     a  ] tR tRt$ RtRtR]R&   R]R&   R V 3R lltR	 R
 ltRR R llt	]
P                  tRtV ;t# )	ParamSpeciY  zClass representing a :class:`ast.ParamSpec` node.

>>> import astroid
>>> node = astroid.extract_node('type Alias[**P] = Callable[P, int]')
>>> node.type_params[0]
<ParamSpec l.1 at 0x7f23b2e4e198>
r   r  rJ   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# 
r5   r   r{   r   r   r(   r   r   r6   r   r8   )r9   s   "r:   r;   ParamSpec.__annotate__f  F     
 

 
 	
 
 
 

r<   c               	0   < \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   ParamSpec.__init__f  r  r<   c               $    V ^8  d   QhRRRRRR/# r5   r   rJ   r  r   r6   r   r8   )r9   s   "r:   r;   r  w  s!     + +
 += +T +r<   c               	    Wn         W n        R # r>   r   r  r   r   r  s   &$$r:   r   ParamSpec.postinitw  s    	*r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[ParamSpec]r8   )r9   s   "r:   r;   r  {  $      .AD	r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   ParamSpec._infer{  rJ  rK  r  r   r  r>   r   r   r   r   r   r   r  r   r   r   r   generic_type_assigned_stmtsr  r   r   r   s   @r:   r  r  Y  sA     0O
  
 
"+
 ::Nr<   r  c                      ] tR tRtRtRtR# )Passi  zClass representing an :class:`ast.Pass` node.

>>> import astroid
>>> node = astroid.extract_node('pass')
>>> node
<Pass l.1 at 0x7f23b2e9e748>
r8   Nr  r8   r<   r:   r  r    r  r<   r  c                  V    ] tR tRt$ RtRtR]R&    R]R&    R R ltR R	 ltR
 t	Rt
R# )Raisei  zClass representing an :class:`ast.Raise` node.

>>> import astroid
>>> node = astroid.extract_node('raise RuntimeError("Something bad happened!")')
>>> node
<Raise l.1 at 0x7f23b2e9e828>
r   causer   c               $    V ^8  d   QhRRRRRR/# )r5   r   r   r  r6   r   r8   )r9   s   "r:   r;   Raise.__annotate__  s(        
	r<   c                	    Wn         W n        R # r>   r   r  )r   r   r  s   &&&r:   r   Raise.postinit  s    
 
r<   c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   r    s     	
 	
 	
r<   c                    V P                   '       g   R# \        ;QJ d4    R V P                   P                  4        4       F  '       g   K   R# 	  R# ! R V P                   P                  4        4       4      # )z~Check if this node raises a :class:`NotImplementedError`.

:returns: Whether this node raises a :class:`NotImplementedError`.
Fc              3  >   "   T F  qP                   R 8H  x  K  	  R# 5i)NotImplementedErrorNr)  )r   r   s   & r:   r   /Raise.raises_not_implemented.<locals>.<genexpr>  s      
;U4II..;Us   T)r   rh   r;  r   s   &r:   raises_not_implementedRaise.raises_not_implemented  se    
 xxxs 
;?88;S;S;U
ss 	
s 	
s 
;?88;S;S;U
 
 	
r<   c              #  	   "   V P                   e   V P                   x  V P                  e   V P                  x  R # R # 5ir>   r  r   s   &r:   r   Raise.get_children  s1     88((N::!** "r,  )r  r   Nr  )r   r   r   r   r   r   r  r   r  r   r   r8   r<   r:   r  r    s/     'O	5	
r<   r  c                  P    ] tR tRt$ RtRtR]R&    R R ltR tR R	 lt	R
 t
RtR# )Returni  zClass representing an :class:`ast.Return` node.

>>> import astroid
>>> node = astroid.extract_node('return True')
>>> node
<Return l.1 at 0x7f23b8211908>
rC   r   c                    V ^8  d   QhRRRR/# r5   rC   r   r6   r   r8   )r9   s   "r:   r;   Return.__annotate__        m  r<   c                	    Wn         R # r>   rB   r  s   &&r:   r   Return.postinit  rX  r<   c              #  	J   "   V P                   e   V P                   x  R # R # 5ir>   rB   r   s   &r:   r   Return.get_children       ::!** "   !#c                   V ^8  d   QhRR/# r4   r8   )r9   s   "r:   r;   r    s     - - -r<   c                	6    \        V P                  \        4      # r>   )r?   rC   rI   r   s   &r:   is_tuple_returnReturn.is_tuple_return  s    $**e,,r<   c              #  	   "   V x  R # 5ir>   r8   r   s   &r:    _get_return_nodes_skip_functions'Return._get_return_nodes_skip_functions  
     
rK  rB   N)r   r   r   r   r   r   r  r   r   r  r  r   r8   r<   r:   r  r    s+     !O#-r<   r  c                  >    ] tR tRtRt]P                  tR R ltRt	R# )Seti  zClass representing an :class:`ast.Set` node.

>>> import astroid
>>> node = astroid.extract_node('{1, 2, 3}')
>>> node
<Set.set l.1 at 0x7f23b2e71d68>
c                   V ^8  d   QhRR/# )r5   r6   zLiteral['builtins.set']r8   )r9   s   "r:   r;   Set.__annotate__  s      / r<   c                    R# )r   zbuiltins.setr8   r   s   &r:   r   
Set.pytype  s    
 r<   r8   N)
r   r   r   r   r   r   set_infer_unary_oprM  r   r   r8   r<   r:   r  r    s     11N r<   r  c                      ] tR tRt$ RtRtR]R&    R]R&    R]R&    R R ltR	 t]	R
 R l4       t
R R ltR R ltRR R lltRR R lltR tRR R lltRtR# )r   i  zClass representing an :class:`ast.Slice` node.

>>> import astroid
>>> node = astroid.extract_node('things[1:3]')
>>> node
<Subscript l.1 at 0x7f23b2e71f60>
>>> node.slice
<Slice l.1 at 0x7f23b2e71e80>
r   r   r   r   c               (    V ^8  d   QhRRRRRRRR/# )r5   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   Slice.__annotate__  s2        	
 
r<   c                	*    Wn         W n        W0n        R # r>   r   r   r   )r   r   r   r   s   &&&&r:   r   Slice.postinit  s     

	r<   c                <    V'       g   \        V4      pWn        V# V# )z7Wrap the empty attributes of the Slice in a Const node.)r   r   )r   attrconsts   && r:   _wrap_attributeSlice._wrap_attribute  s    !$'ELLr<   c                   V ^8  d   QhRR/# )r5   r6   znodes.ClassDefr8   )r9   s   "r:   r;   r    s     , ,. ,r<   c                	Z    \        4       P                  pVP                  R 4      ^ ,          # )r   )r%   builtins_moduler~  )r   builtinss   & r:   r  Slice._proxied  s&    !#33(++r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['builtins.slice']r8   )r9   s   "r:   r;   r            1  r<   c                    R# )r   zbuiltins.slicer8   r   s   &r:   r   Slice.pytype      
  r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['Slice']r8   )r9   s   "r:   r;   r    s      . r<   c                    R# )zFA human readable type of this node.

:returns: The type of this node.
r   r8   r   s   &r:   display_typeSlice.display_type  s    
 r<   Nc               $    V ^8  d   QhRRRRRR/# )r5   r  r   rN   rO   r6   z#Iterator[SuccessfulInferenceResult]r8   )r9   s   "r:   r;   r  &  s$     ? ??&=?	,?r<   c              #  *  "   VR8X  d    V P                  V P                  4      x  R# VR8X  d    V P                  V P                  4      x  R# VR8X  d    V P                  V P                  4      x  R# V P	                  WR7       Rj  xL
  R#  L5i)zInfer the possible values of the given attribute on the slice.

:param attrname: The name of the attribute to infer.

:returns: The inferred possible values.
startstopr   ry   N)r  r   r   r   r~  r   r  rN   s   &&&r:   r  Slice.igetattr&  sr      w&&tzz22&&tzz22&&tyy11||H|>>>s   BB
BBc                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   r  8  s     8 8)@ 8r<   c                	8    V P                   P                  W4      # r>   )r  r~  r  s   &&&r:   r~  Slice.getattr8  s    }}$$X77r<   c              #  	   "   V P                   e   V P                   x  V P                  e   V P                  x  V P                  e   V P                  x  R # R # 5ir>   r  r   s   &r:   r   Slice.get_children;  sE     ::!**::!**99 ))O !s   AAc               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[Slice]r8   )r9   s   "r:   r;   r  E  rG  r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   Slice._inferE  rJ  rK  )r   r   r   r  r>   )r   r   r   r   r   r   r  r   r  r   r  r   r  r  r~  r   r   r   r8   r<   r:   r   r     sj     1O''
+ , , ?$8 r<   r   c                  t   a  ] tR tRt$ RtRtRtR]R&    R V 3R lltR R lt	]
P                  t R	 tR
tV ;t# )r   iK  zClass representing an :class:`ast.Starred` node.

>>> import astroid
>>> node = astroid.extract_node('*args')
>>> node
<Starred l.1 at 0x7f23b2e41978>
rC   r(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r5   r  r   r   r{   r   r   r(   r   r   r   r6   r   r8   )r9   s   "r:   r;   Starred.__annotate__Z  P     
 

 
 	

 
 
 #
 

r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   Starred.__init__Z  s.     E!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r  o  r  r<   c                	    Wn         R # r>   rB   r  s   &&r:   r   Starred.postinito  rX  r<   c              #  	*   "   V P                   x  R # 5ir>   rB   r   s   &r:   r   Starred.get_childrenw  r  r  )r  rC   rB   r  )r   r   r   r   r   r   r*  r  r   r   r   starred_assigned_stmtsr  r   r   r   r   s   @r:   r   r   K  sG     !OMM!
 
* 55N r<   r   c                     a  ] tR tRt$ Rt]! 4       tRtRtR]	R&    R]	R&    R V 3R llt
R R	 ltR
 tRR R llt]P                  ]P                   RR R ll4       4       t]P                  RR R ll4       tRtV ;t# )	Subscripti{  zClass representing an :class:`ast.Subscript` node.

>>> import astroid
>>> node = astroid.extract_node('things[1:3]')
>>> node
<Subscript l.1 at 0x7f23b2e71f60>
rC   r   r(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r  r8   )r9   s   "r:   r;   Subscript.__annotate__  r  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r  r  s   &&&&&$$r:   r   Subscript.__init__  s.     I!!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   rC   r(   r   r6   r   r8   )r9   s   "r:   r;   r+    s!      f V  r<   c                	    Wn         W n        R # r>   rC   r   )r   rC   r   s   &&&r:   r   Subscript.postinit  s    

r<   c              #  	F   "   V P                   x  V P                  x  R # 5ir>   r0  r   s   &r:   r   Subscript.get_children  s     jjjjrJ  c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r+    s$     9 9.9AD9	D9r<   c           	   +    "   ^ RI Hp RpV P                  P                  V4       EFm  p\	        V\
        P                  4      '       d   \
        P                  x   R# V P                  P                  V4       EF  p\	        V\
        P                  4      '       d   \
        P                  x    R# V P                  pVP                  \        8X  d   TpM3VP                  \        8X  d   VP                  V4      pV'       d   TpMTpWpP                  J d   \        WR7      h VP                  Wq4      p	Y	J g!   \	        T	\
        P                  4      '       d   \
        P                  x    R# T	P                  T4       Rj  xL
  RpEK  	  EKp  	  V'       d   \)        WR7      # R#   \        \         \"        \$        \&        3 d   p
\        YR7      T
hRp
?
ii ; i L[5i)zInference for subscripts.

We're understanding if the index is a Const
or a slice, passing the result of inference
to the value's `getitem` method, which should
handle each supported index type accordingly.
)helpersFNr   T)astroidr6  rC   rV   r?   r   rW   rS   r   _SUBSCRIPT_SENTINELr   r   class_instance_as_indexr   r6  r   r   r   r   r  r+   )r   rN   r   r6  	found_onerC   r   r5  instance_as_indexassignedr   s   &&,        r:   _infer_subscriptSubscript._infer_subscript  s     	$	ZZ%%g.E%!5!566&&&))'2eT%9%9::*** #66??h."'K__0(/(G(G(N%(&7"'K":"::(dDD	N$}}[BH #z(D<P<P'Q'Q***#>>'222 	I 3	 /T %4AA% %%%+" N )dD#MN 3sC   DG% G%'F.8AG%G#G% G%. G GG  G%c                    V ^8  d   QhRRRR/# r5   rN   rO   r   r
   r8   )r9   s   "r:   r;   r+    s     8 85 8 8r<   c                	(    V P                   ! V3/ VB # r>   r=  r  s   &&,r:   r   Subscript._infer  s     $$W777r<   c                    V ^8  d   QhRRRR/# r@  r8   )r9   s   "r:   r;   r+    s     8 8!8 83 8r<   c                	(    V P                   ! V3/ VB # r>   rB  r  s   &&,r:   r'  Subscript.infer_lhs  s    $$W777r<   )r  r   rC   r0  r  r>   )r   r   r   r   r   r  r8  r   r*  r  r   r   r   r=  r   r   r,  r   r'  r   r   r   s   @r:   r)  r)  {  s     !((OMM M)
 
,9v ))8  *8 ))8 *8r<   r)  c                  ^   a  ] tR tRtRtRtRtR V 3R lltR R ltR t	R R	 lt
R
 tRtV ;t# )rf   i  a  Class representing a :class:`ast.Try` node.

>>> import astroid
>>> node = astroid.extract_node('''
    try:
        do_something()
    except Exception as error:
        print("Error!")
    finally:
        print("Cleanup!")
    ''')
>>> node
<Try l.2 at 0x7f23b2e41d68>
c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r5   r   r{   r   r   r   r   r(   r6   r   r8   )r9   s   "r:   r;   Try.__annotate__  sH     (
 (
 (
 	(

 (
 (
 (
 
(
r<   c               p   < . V n          . V n         . V n         . V n         \        SV `  VVVVVR7       R#   
:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nra   r`   rb   	finalbodyr   r   r   r   r   r   r   r   r   s   &$$$$$r:   r   Try.__init__  sN    , #%	A-/%$&1')4!!) 	 	
r<   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r5   ra   r  r`   zlist[ExceptHandler]rb   rN  r6   r   r8   )r9   s   "r:   r;   rI  .  s>     # # # &	#
 #  # 
#r<   c               6    Wn         W n        W0n        W@n        R# )zDo some setup after initialisation.

:param body: The contents of the block to catch exceptions from.

:param handlers: The exception handlers.

:param orelse: The contents of the ``else`` block.

:param finalbody: The contents of the ``finally`` block.
Nra   r`   rb   rN  r   ra   r`   rb   rN  s   &$$$$r:   r   Try.postinit.  s    $ 	 "r<   c                	    V# r>   r8   re  s   &&&r:   rf  Try._infer_nameE  r@  r<   c                    V ^8  d   QhRRRR/# rR  r8   )r9   s   "r:   r;   rI  H       % %# %/ %r<   c                   WP                   8X  d   W3# V P                  '       dg   V P                  ^ ,          P                   Tu;8:  d#   V P                  R,          P                  8:  d"   M MWP                  R,          P                  3# V P                   F  pVP                  '       d    WP                  P                   8X  d   W3u # VP                  ^ ,          P                   Tu;8:  d%   VP                  R,          P                  8:  g   K{  M K  WP                  R,          P                  3u # 	  V P
                  '       d   V P
                  ^ ,          P                   ^,
          V8X  d   W3# V P
                  ^ ,          P                   Tu;8:  d#   V P
                  R,          P                  8:  d"   M MWP
                  R,          P                  3# V P                  '       d   V P                  ^ ,          P                   ^,
          V8X  d   W3# V P                  ^ ,          P                   Tu;8:  d#   V P                  R,          P                  8:  d"   M MWP                  R,          P                  3# WP                  3# z=Get a range from a given line number to where this node ends.r  rk  ra   r  r`   r|   rb   rN  r   r   	exhandlers   && r:   rW  Try.block_rangeH     __$>!999100FTdiim>T>TT99R=1111I~~~&NN,E,E"E~%~~a ++vT9K9T9TTT~~b1::::	 '
 ;;;{{1~((1,6~%{{1~((FNdkk"o6N6NN{{27777>>>~~a ++a/69~%~~a ++vT9K9T9TT~~b1::::}}$$r<   c              #  	   "   V P                    R j  xL
  V P                   R j  xL
  V P                   R j  xL
  V P                   R j  xL
  R #  LB L0 L L5ir>   rS  r   s   &r:   r   Try.get_children`  G     99==  ;;>>!! 	 !A   AAAAAAAAAAAAra   rN  r`   rb   rS  r   r   r   r   r   r   r  r   r   rf  rW  r   r   r   r   s   @r:   rf   rf     s:     BOJ(
 (
T#.%0" "r<   rf   c            
         a  ] tR tRtRtRtRtRRR	RR
RRRRR/R V 3R llltRRRRRRRR/R R lltR t	R R lt
R tRtV ;t# )TryStarig  z0Class representing an :class:`ast.TryStar` node.ra   r`   rb   rN  r   Nr   r   r   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r5   r   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   TryStar.__annotate__m  sH     $
 $
 $
 	$

 $
 #$
 $
 
$
r<   c               p   < . V n          . V n         . V n         . V n         \        SV `  VVVVVR7       R# )a  
:param lineno: The line that this node appears on in the source code.
:param col_offset: The column that this node appears on in the
    source code.
:param parent: The parent node in the syntax tree.
:param end_lineno: The last line this node appears on in the source code.
:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   NrM  rO  s   &$$$$$r:   r   TryStar.__init__m  sN    $ #%	A-/%$&1')4!!) 	 	
r<   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r5   ra   rQ  r`   zlist[ExceptHandler] | Nonerb   rN  r6   r   r8   )r9   s   "r:   r;   rj    s>     ' ' "' -	'
 $' '' 
'r<   c               z    V'       d   Wn         V'       d   W n        V'       d   W0n        V'       d	   W@n        R# R# )zDo some setup after initialisation.
:param body: The contents of the block to catch exceptions from.
:param handlers: The exception handlers.
:param orelse: The contents of the ``else`` block.
:param finalbody: The contents of the ``finally`` block.
NrS  rT  s   &$$$$r:   r   TryStar.postinit  s)     I$M K&N r<   c                	    V# r>   r8   re  s   &&&r:   rf  TryStar._infer_name  r@  r<   c                    V ^8  d   QhRRRR/# rR  r8   )r9   s   "r:   r;   rj    rY  r<   c                   WP                   8X  d   W3# V P                  '       dg   V P                  ^ ,          P                   Tu;8:  d#   V P                  R,          P                  8:  d"   M MWP                  R,          P                  3# V P                   F  pVP                  '       d    WP                  P                   8X  d   W3u # VP                  ^ ,          P                   Tu;8:  d%   VP                  R,          P                  8:  g   K{  M K  WP                  R,          P                  3u # 	  V P
                  '       d   V P
                  ^ ,          P                   ^,
          V8X  d   W3# V P
                  ^ ,          P                   Tu;8:  d#   V P
                  R,          P                  8:  d"   M MWP
                  R,          P                  3# V P                  '       d   V P                  ^ ,          P                   ^,
          V8X  d   W3# V P                  ^ ,          P                   Tu;8:  d#   V P                  R,          P                  8:  d"   M MWP                  R,          P                  3# WP                  3# r[  r\  r]  s   && r:   rW  TryStar.block_range  r`  r<   c              #  	   "   V P                    R j  xL
  V P                   R j  xL
  V P                   R j  xL
  V P                   R j  xL
  R #  LB L0 L L5ir>   rS  r   s   &r:   r   TryStar.get_children  rc  rd  re  rS  rf  r   s   @r:   rh  rh  g  s    :AOJ$
 "$
 "&	$

 "&$
 &*$
 !%$
 $
L' %)' 04	'
 '+' *.'.%0" "r<   rh  c                     a  ] tR tRtRtRtRRRRR/R V 3R llllt]P                  t	 ]P                  t]P                  tR R	 ltRR
 R lltRtV ;t# )rI   i  zClass representing an :class:`ast.Tuple` node.

>>> import astroid
>>> node = astroid.extract_node('(1, 2, 3)')
>>> node
<Tuple.tuple l.1 at 0x7f23b2e41780>
Nr   r   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# r  r8   )r9   s   "r:   r;   Tuple.__annotate__  r  r<   c               >   < Wn          \        SV `	  VVVVVR7       R# )a  
:param ctx: Whether the tuple is assigned to or loaded from.

:param lineno: The line that this node appears on in the source code.

:param col_offset: The column that this node appears on in the
    source code.

:param parent: The parent node in the syntax tree.

:param end_lineno: The last line this node appears on in the source code.

:param end_col_offset: The end column this node appears on in the
    source code. Note: This is after the last symbol.
r   Nr  r  s   &&&&&$$r:   r   Tuple.__init__  s.    2 $'>!!) 	 	
r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['builtins.tuple']r8   )r9   s   "r:   r;   ry    r  r<   c                    R# )r   zbuiltins.tupler8   r   s   &r:   r   Tuple.pytype  r  r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   ry  
  r  r<   c                0    \        W P                  WR7      # r  r  r  s   &&&r:   r6  Tuple.getitem
  r  r<   r  r  r>   )r   r   r   r   r   r*  r   r   r  r  tuple_infer_unary_oprM  r  rO  r   r6  r   r   r   s   @r:   rI   rI     si     M"
 "&"
 &*"
 "
H 66N 33N22O K Kr<   c                     a  ] tR tRt$ RtRtR]R&   R]R&   R]R&   R	 V 3R
 lltR R ltRR R llt	]
P                  tR]R&   RtV ;t# )	TypeAliasi  zClass representing a :class:`ast.TypeAlias` node.

>>> import astroid
>>> node = astroid.extract_node('type Point = tuple[float, float]')
>>> node
<TypeAlias l.1 at 0x7f23b2e4e198>
r   type_paramsrC   rJ   (list[TypeVar | ParamSpec | TypeVarTuple]r(   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r  r8   )r9   s   "r:   r;   TypeAlias.__annotate__"  r  r<   c               	0   < \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   TypeAlias.__init__"  r  r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   r   rJ   r  r  rC   r(   r6   r   r8   )r9   s   "r:   r;   r  3  s4     	 	 	 >		
 	 
	r<   c               	*    Wn         W n        W0n        R # r>   r   r  rC   )r   r   r  rC   s   &$$$r:   r   TypeAlias.postinit3  s     	&
r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[TypeAlias]r8   )r9   s   "r:   r;   r  >  r  r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   TypeAlias._infer>  rJ  rK  z]ClassVar[Callable[[TypeAlias, AssignName, InferenceContext | None, None], Generator[NodeNG]]]r  r  r>   )r   r   r   r   r   r   r  r   r   r   r   r  r  r   r   r   s   @r:   r  r    sS     7O
99M
 
"	 	''  
 
( 
(r<   r  c                     a  ] tR tRt$ RtRtR]R&   R]R&   R]R&   R V 3R	 lltRR
/R R lltRR R llt	]
P                  tRtV ;t# )TypeVariP  zClass representing a :class:`ast.TypeVar` node.

>>> import astroid
>>> node = astroid.extract_node('type Point[T] = tuple[float, float]')
>>> node.type_params[0]
<TypeVar l.1 at 0x7f23b2e4e198>
r   rF   r  rJ   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r  r8   )r9   s   "r:   r;   TypeVar.__annotate__^  r  r<   c               	0   < \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   TypeVar.__init__^  r  r<   Nc               (    V ^8  d   QhRRRRRRRR/# )r5   r   rJ   rF   r   r  r6   r   r8   )r9   s   "r:   r;   r  o  s4     	+ 	+ 	+ 		+
 %	+ 
	+r<   c               	*    Wn         W n        W0n        R # r>   r   rF   r  )r   r   rF   r  s   &$$$r:   r   TypeVar.postinito  s     	
*r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[TypeVar]r8   )r9   s   "r:   r;   r  z  s$      .AD	r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   TypeVar._inferz  rJ  rK  )rF   r  r   r  r>   r  r   s   @r:   r  r  P  sQ     9O
  
 
"	+
 (,	+
 ::Nr<   r  c                     a  ] tR tRt$ RtRtR]R&   R]R&   R V 3R lltRR	/R
 R lltRR R llt	]
P                  tRtV ;t# )TypeVarTuplei  zClass representing a :class:`ast.TypeVarTuple` node.

>>> import astroid
>>> node = astroid.extract_node('type Alias[*Ts] = tuple[*Ts]')
>>> node.type_params[0]
<TypeVarTuple l.1 at 0x7f23b2e4e198>
r   r  rJ   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r  r8   )r9   s   "r:   r;   TypeVarTuple.__annotate__  r  r<   c               	0   < \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   TypeVarTuple.__init__  r  r<   Nc               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r    s$     + +!+2?+	+r<   c               	    Wn         W n        R # r>   r  r  s   &$$r:   r   TypeVarTuple.postinit  s     	*r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zIterator[TypeVarTuple]r8   )r9   s   "r:   r;   r    s$      .AD	r<   c              +  	   "   V x  R # 5ir>   r8   r  s   &&,r:   r   TypeVarTuple._infer  rJ  rK  r  r  r>   r  r   s   @r:   r  r    sI     0O
  
 
"+BF+
 ::Nr<   r  +__pos__-__neg__~
__invert__notc                     a  ] tR tRt$ RtRtRtR]R&    R V 3R lltR R lt	RR	 R
 llt
R tR V 3R lltRR R llt]P                  ]P                   RR R ll4       4       tRtV ;t# )UnaryOpi  zClass representing an :class:`ast.UnaryOp` node.

>>> import astroid
>>> node = astroid.extract_node('-5')
>>> node
<UnaryOp l.1 at 0x7f23b2e4e198>
operandr(   c               4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# r0  r8   )r9   s   "r:   r;   UnaryOp.__annotate__  rr  r<   c               	>   < Wn          \        SV `	  VVVVVR 7       R# r   r4  r5  s   &&&&&$$r:   r   UnaryOp.__init__  ru  r<   c                    V ^8  d   QhRRRR/# )r5   r  r(   r6   r   r8   )r9   s   "r:   r;   r    s       4 r<   c                	    Wn         R # r>   r  )r   r  s   &&r:   r   UnaryOp.postinit  r{  r<   c                    V ^8  d   QhRRRR/# )r5   rN   rO   r6   z#list[util.BadUnaryOperationMessage]r8   )r9   s   "r:   r;   r    s      .	,r<   c                    . p V P                  VR7       FP  pV\        P                  J d   \        h\	        V\        P
                  4      '       g   K?  VP                  V4       KR  	  V#   \         d    . u # i ; i)zGet a list of type errors which can occur during inference.

Each TypeError is represented by a :class:`BadUnaryOperationMessage`,
which holds the original exception.

If any inferred result is uninferable, an empty list is returned.
ry   )_infer_unaryopr   rS   r   r?   BadUnaryOperationMessager   rC  s   &&  r:   rE  UnaryOp.type_errors  sv     	--g->T---((fd&C&CDDJJv&	 ? 
  	I	rG  c              #  	*   "   V P                   x  R # 5ir>   r  r   s   &r:   r   UnaryOp.get_children  s     llr  c                   V ^8  d   QhRR/# ri  r8   )r9   s   "r:   r;   r    s     ' 's 'r<   c                	p   < V P                   R 8X  d   \        V P                   ,          # \        SV `  4       # )r  )r1  r'   r   r  rM  s   &r:   r  UnaryOp.op_precedence  s,    77e ))w$&&r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   zTGenerator[InferenceResult | util.BadUnaryOperationMessage, None, InferenceErrorInfo]r8   )r9   s   "r:   r;   r    s&     >/ >/.>/AD>/
>/r<   c              +    "   ^ RI Hp V P                  P                  V4       F!  p VP	                  V P
                  4      x  K#  	  R#   \         d/   p\        P                  ! Y@P
                  T4      x   Rp?K[  Rp?i\         Ed8   p\        T P
                  ,          pTfa   TP                  4       p\        T\        P                  4      '       g   \        T'       * 4      x   Rp?K  \        P                  x   Rp?K  \        T\         T34      '       g+   \        P                  ! Y@P
                  T4      x   Rp?EK'    \"        P$                  ! YF4      pM:  \&         d-    \        P                  ! Y@P
                  T4      x    Rp?EKv  i ; iT^ ,          p\)        TP                  TR7      R4      p	\        T	\        P                  4      '       g   T	P+                  4       '       g    Rp?EK  \-        T4      pYAn        \1        . T	R7      Tn        T	P5                  YR7      p
\)        T
R4      pTf   Tx   Rp?EK,  Tx   Rp?EK7    \&         d4   p\        P                  ! Y@P
                  T4      x   Rp? Rp?EKp  Rp?i\6         d    \        P                  x    Rp?EK  i ; iRp?ii ; i5i)3Infer what an UnaryOp should return when evaluated.r  Nry   )rD  r  )r  r  r  rV   rM  r1  r   r   r  r  UNARY_OP_METHODr   r?   rW   r   rS   r   r$   r   r   rU   callabler   r  r   r  r  r   )r   rN   r   r  r  r   methr   methodsrZ   call_resultsr  	inner_excs   &&,          r:   r  UnaryOp._infer_unaryop  s     	+||))'2G5/,,TWW55 3  K33GWWcJJJ! 0/&tww/< ")!3!3!5J%j$2F2FGG+
N;;;"....%g(/CDD #;;GWWcRR /%&3&:&:7&IG6 %"&"?"?RU"VV$%  'qz#'

7
(CT#J&x1E1EFF#+#4#4#6#6$".w"7,3).9r(.S+'/'A'A$'A'X!%lD!9!>")MM"(LL2 Y";;GWWiXXX) /"..../_0/s   %KAKK#A?9K?KKAK +K1K K	;K KE$#I$.FIKFAI9K A	I	KIKJ=&#J	K KJ=!J=4K 5K<J==K  KKc               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r  C  s$     > >.>AD>	=>r<   c              +     "   V P                  V P                  V\        P                  4       Rj  xL
  \	        WR7      #  L5i)r  Nr   )rk  r  r   r  r+   r  s   &&,r:   r   UnaryOp._inferA  sD      00$*G*G
 	
 	
 "t==	
s   /AAA)r1  r  r  rm  r>   )r   r   r   r   r   r   r*  r  r   r   rE  r   r  r  r   r   r,  r   r   r   r   s   @r:   r  r    sm     #OMO0
 
**' '>/@ ))>  *>r<   r  c                     a  ] tR tRt$ RtRtRtR]R&    R]R&    R]R&    R R	 lt]	R
 4       t
R R ltR tV 3R ltV 3R ltRtV ;t# )WhileiM  zClass representing an :class:`ast.While` node.

>>> import astroid
>>> node = astroid.extract_node('''
while condition():
    print("True")
''')
>>> node
<While l.2 at 0x7f23b2e4e390>
r_   ra   rb   r(   r  c               (    V ^8  d   QhRRRRRRRR/# rG  r8   )r9   s   "r:   r;   While.__annotate__e  s2        	
 
r<   c                	*    Wn         W n        W0n        R # r>   rJ  rK  s   &&&&r:   r   While.postinite  s     		r<   c                .    V P                   P                  # r  rO  r   s   &r:   r  While.blockstart_tolinenoo  r  r<   c                    V ^8  d   QhRRRR/# rR  r8   )r9   s   "r:   r;   r  w  s     < <# </ <r<   c                8    V P                  WP                  4      # )rT  )rU  rb   rV  s   &&r:   rW  While.block_rangew  s     &&v{{;;r<   c              #  	   "   V P                   x  V P                   R j  xL
  V P                   R j  xL
  R #  L L5ir>   rJ  r   s   &r:   r   While.get_children  r[  r  c              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5iz1A While node can contain a Yield node in the testNrc  rM  s   &r:   r  %While._get_yield_nodes_skip_functions  re  rO  c              #     <"   V P                   P                  4        Rj  xL
  \        SV `  4        Rj  xL
  R#  L L5ir  rg  rM  s   &r:   r  #While._get_yield_nodes_skip_lambdas  ri  rO  rj  rJ  r  )r   r   r   r   r   r   r  r  r   r   r  rW  r   r  r  r   r   r   s   @r:   r  r  M  sa    	 1O1
L,
#- " "<=
; ;r<   r  c                     a  ] tR tRtRtRtRtRtRRRRR/R V 3R lllltRR R	 llt	]
P                  t ]R
 4       tR tRtV ;t# )Withi  zClass representing an :class:`ast.With` node.

>>> import astroid
>>> node = astroid.extract_node('''
with open(file_path) as file_:
    print(file_.read())
''')
>>> node
<With l.2 at 0x7f23b2e4e710>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   With.__annotate__  F     %
 %
%
 %
 	%
 %
 #%
 
%
r<   c               `   < . V n          . V n         RV n         \        SV `  VVVVVR7       R# rL  Nr   )r  ra   r
  r   r   r   s   &&&&$$r:   r   With.__init__  sE    , :<
O"$	1.2X!!) 	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   r  z)list[tuple[NodeNG, NodeNG | None]] | Nonera   rQ  r
  r   r6   r   r8   )r9   s   "r:   r;   r    s2     / /8/ "/ '	/
 
/r<   c                :    Ve   Wn         Ve   W n        W0n        R# )zDo some setup after initialisation.

:param items: The pairs of context managers and the names
    they are assigned to.

:param body: The contents of the ``with`` block.
N)r  ra   r
  )r   r  ra   r
  s   &&&&r:   r   With.postinit  s      JI.r<   c                J    V P                   R,          ^ ,          P                  # )r  r  )r  r  r   s   &r:   r  With.blockstart_tolineno  s     zz"~a )))r<   c              #     "   V P                    F  w  rVx  V'       g   K  Vx  K  	  V P                   Rj  xL
  R#  L5i)zWGet the child nodes below this node.

:returns: The children.
:rtype: iterable(NodeNG)
Nr  ra   )r   r  vars   &  r:   r   With.get_children  s5      IDJs	 $ 99s   AAA A)ra   r  r
  r  r  r  r  )r   r   r   r   r   r   r  r  r   r   r   with_assigned_stmtsr  r   r  r   r   r   r   s   @r:   r  r    so    
	 (O.(%
 "&%
 &*%
 %
N/& 22N * *
 
r<   r  c                      ] tR tRtRtRtR# )	AsyncWithi  z7Asynchronous ``with`` built with the ``async`` keyword.r8   Nr  r8   r<   r:   r  r    s    Ar<   r  c                  J    ] tR tRt$ RtR
tR]R&    R R ltR tR t	R	 t
R
tR# )Yieldi  zClass representing an :class:`ast.Yield` node.

>>> import astroid
>>> node = astroid.extract_node('yield True')
>>> node
<Yield l.1 at 0x7f23b2e4e5f8>
rC   r   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   Yield.__annotate__  r  r<   c                	    Wn         R # r>   rB   r  s   &&r:   r   Yield.postinit  rX  r<   c              #  	J   "   V P                   e   V P                   x  R # R # 5ir>   rB   r   s   &r:   r   Yield.get_children  r  r  c              #  	   "   V x  R # 5ir>   r8   r   s   &r:   r  %Yield._get_yield_nodes_skip_functions  r  rK  c              #  	   "   V x  R # 5ir>   r8   r   s   &r:   r  #Yield._get_yield_nodes_skip_lambdas  r  rK  rB   Nr  r8   r<   r:   r  r    s+     !Or<   r  c                      ] tR tRtRtRtR# )	YieldFromi  z2Class representing an :class:`ast.YieldFrom` node.r8   Nr  r8   r<   r:   r  r    s    <r<   r  c                      ] tR tRtRtRtR# )r  i  z>Represents the unpacking of dicts into dicts using :pep:`448`.r8   Nr  r8   r<   r:   r  r    s    Hr<   r  c                  t   a  ] tR tRtRtRtRtRRRRR/R V 3R lllltRR/R	 R
 lltR t	RR R llt
RtV ;t# )FormattedValuei"  a0  Class representing an :class:`ast.FormattedValue` node.

Represents a :pep:`498` format string.

>>> import astroid
>>> node = astroid.extract_node('f"Format {type_}"')
>>> node
<JoinedStr l.1 at 0x7f23b2e4ed30>
>>> node.values
[<Const.str l.1 at 0x7f23b2e4eda0>, <FormattedValue l.1 at 0x7f23b2e4edd8>]
format_specNr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   FormattedValue.__annotate__2  sF     -
 -
-
 -
 	-
 -
 #-
 
-
r<   c               L   < V   V   RV n          \        SV `	  VVVVVR7       R# r  r  r   r   r   s   &&&&$$r:   r   FormattedValue.__init__2  sE    , 	8	 .2	 	!!) 	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   rC   r(   
conversionr{   r  JoinedStr | Noner6   r   r8   )r9   s   "r:   r;   r  a  s4     ' ' ' 	'
 &' 
'r<   c               *    Wn         W n        W0n        R# )a
  Do some setup after initialisation.

:param value: The value to be formatted into the string.

:param conversion: The type of formatting to be applied to the value.

:param format_spec: The formatting to be applied to the value.
:type format_spec: JoinedStr or None
N)rC   r  r  )r   rC   r  r  s   &$$$r:   r   FormattedValue.postinita  s      
$&r<   c              #  	f   "   V P                   x  V P                  e   V P                  x  R # R # 5ir>   rC   r  r   s   &r:   r   FormattedValue.get_childrenu  s,     jj'""" (r  c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r  {  s$        . AD 	D r<   c           
   +  	  "   V P                   f   \        R4      MV P                   pRpVP                  ! V3/ VB  F  p\        V\        4      '       g   V'       g   \        P
                  x  RpK7  V P                  P                  ! V3/ VB  F  pV\        P
                  J d   \        P
                  x    R # Tp\        V\        4      '       d   VP                  p \        WuP                  4      p\        VV P                  V P                  V P                  V P                  R7      x  K  	  K  	  R #   \        \        3 d    \        P
                  x  Rp Mi ; iK  5i)Nr  FT)r   r   r   r   )r  rz   rV   r?   r   rS   rC   r9   r   r   r   r   r   r   )	r   rN   r   format_specsuninferable_already_generatedr  rC   value_to_format	formatteds	   &&,      r:   r   FormattedValue._infer{  s4     %)$4$4$<uRy$BRBR(-%'--g@@Kk5114***481))'<V<D,,,***"'eU++&+kkO9 &8I8I JI!#{{#'??#'??'+':':  ! = A. #I. 9***4819 s2   AE)BE)#AD<2
E)<%E$!E)#E$$E))r  r  rC   r  )r  r  r>   )r   r   r   r   r   r   r*  r   r   r   r   r   r   r   s   @r:   r
  r
  "  sQ    
 /O#M-
 "&-
 &*-
 -
^'
 )-'(#   r<   r
  z{Uninferable}c                     a  ] tR tRtRtRtRRRRR/R V 3R lllltRR R	 lltR
 tRR R llt	RR R llt
]RR R ll4       t]RR R ll4       tRtV ;t# )	JoinedStri  zRepresents a list of string expressions to be joined.

>>> import astroid
>>> node = astroid.extract_node('f"Format {type_}"')
>>> node
<JoinedStr l.1 at 0x7f23b2e4ed30>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   JoinedStr.__annotate__  sF     "
 "
"
 "
 	"
 "
 #"
 
"
r<   c               @   < . V n          \        SV `	  VVVVVR7       R# rK  )r   r   r   r   s   &&&&$$r:   r   JoinedStr.__init__  s4    , %'	
 	!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r#    s     ! !2 !d !r<   c                    Ve	   Wn         R# R# )z~Do some setup after initialisation.

:param value: The string expressions to be joined.

:type: list(FormattedValue or Const)
Nr  r  s   &&r:   r   JoinedStr.postinit  s      K r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   r  r   s   &r:   r   JoinedStr.get_children  r  r   c               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r#    s$      .AD	Dr<   c              +  	   "   V P                   '       d   V P                  V4       R j  xL
  R # \        R4      x  R #  L5i)Nr  )r   _infer_with_valuesrz   r  s   &&,r:   r   JoinedStr._infer  s2      ;;;..w777)O 8s   'A?Ac               $    V ^8  d   QhRRRRRR/# r  r8   )r9   s   "r:   r;   r#    s$      .AD	Dr<   c              +  	6  "   R pV P                  V P                  V4       Fr  pV\        P                  J ;'       g,    \	        V\
        4      ;'       d    \        VP                  9   pV'       d   V'       g   Rp\        P                  x  Kn  Vx  Kt  	  R# 5i)FTN)_infer_from_valuesr   r   rS   r?   rz   UNINFERABLE_VALUErC   )r   rN   r   r  rZ   faileds   &&,   r:   r-  JoinedStr._infer_with_values  s      ).%//WEH!1!11  8U+SS0AX^^0S  4481***N Fs   :BBB1B9 Bc               (    V ^8  d   QhRRRRRRRR/# )	r5   r0   r  rN   rO   r   r
   r6   r	  r8   )r9   s   "r:   r;   r#    s,     $ $ $+B$UX$	D$r<   c              +  	   "   V'       g   R # \        V4      ^8X  dR   V P                  ! V^ ,          V3/ VB  F0  p\        V\        4      '       d   Vx  K  \        \        4      x  K2  	  R # V P                  ! V^ ,          V3/ VB  F  pV P
                  ! VR,          V3/ VB  F]  pRpWV3 FD  p\        V\        4      '       d   V\        VP                  4      ,          pK7  V\        ,          pKF  	  \        V4      x  K_  	  K  	  R # 5i)N:r^  NNr  )r|  _safe_infer_from_noder?   rz   r2  r1  r   rC   )r   r0   rN   r   rQ   prefixsuffixr  s   &&&,    r:   r1  JoinedStr._infer_from_values  s      u:?11%(GNvNdE**J-..	 O
 //a'LVLF00rGNvN#,D!$..#djj/1 //F	 -
 Fm# O Ms   DDc               (    V ^8  d   QhRRRRRRRR/# )	r5   rQ   r(   rN   rO   r   r
   r6   r	  r8   )r9   s   "r:   r;   r#    s,     # ##$;#NQ#	D#r<   c              +  	   "    VP                   ! V3/ VB  R j  xL
  R #  L  \         d    \        P                  x   R # i ; i5ir>   )r   r   r   rS   )r   rQ   rN   r   s   &&&,r:   r7  JoinedStr._safe_infer_from_node  s;     	#{{75f555 	#"""	#s1   A# !# A# A AAAr  r  r>   )r   r   r   r   r   r   r   r   r   r   r-  r   r1  r7  r   r   r   s   @r:   r!  r!    sj     "O"
 "&"
 &*"
 "
H! $ $, # #r<   r!  c                     a  ] tR tRtRtRtRt RRRRR/R V 3R lllltR	 R
 lt]	P                  t R R ltR R ltR R ltRtV ;t# )r   i  zRepresents the assignment from the assignment expression

>>> import astroid
>>> module = astroid.parse('if a := 1: pass')
>>> module.body[0].test
<NamedExpr l.1 at 0x7f23b2e4ed30>
TNr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   NamedExpr.__annotate__%  r  r<   c               <   < V   V   \         SV `  VVVVVR7       R# rK  r  r   s   &&&&$$r:   r   NamedExpr.__init__%  s6    , 		
 	<!!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   r"  r(   rC   r6   r   r8   )r9   s   "r:   r;   r@  L  s!      v f  r<   c                	    Wn         W n        R # r>   r9  r:  s   &&&r:   r   NamedExpr.postinitL  r<  r<   c                   V ^8  d   QhRR/# r`  r8   )r9   s   "r:   r;   r@  U  s     # #y #r<   c                   V P                   '       g   \        V R7      h\        V P                   \        \        \
        34      '       d   V P                   P                   '       g   \        V P                   R7      hV P                   P                   P                   '       g!   \        V P                   P                   R7      hV P                   P                   P                   P                  4       # V P                   P                  4       # )zThe first parent frame node.

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

:returns: The first parent frame node.
r]  )r   r"   r?   rC  r  r  r$  r   s   &r:   r$  NamedExpr.frameU  s     {{{$D11 dkkIw#FGG;;%%%(<<;;%%,,,(0B0BCC;;%%,,2244{{  ""r<   c                   V ^8  d   QhRR/# rZ  r8   )r9   s   "r:   r;   r@  j  s     # #' #r<   c                   V P                   '       g   \        V R7      h\        V P                   \        \        \
        34      '       d   V P                   P                   '       g   \        V P                   R7      hV P                   P                   P                   '       g!   \        V P                   P                   R7      hV P                   P                   P                   P                  4       # V P                   P                  4       # r\  )r   r"   r?   rC  r  r  r  r   s   &r:   r  NamedExpr.scopej  s     {{{$D11 dkkIw#FGG;;%%%(<<;;%%,,,(0B0BCC;;%%,,2244{{  ""r<   c               $    V ^8  d   QhRRRRRR/# )r5   r   r   rX   r(   r6   r   r8   )r9   s   "r:   r;   r@  }  s!     + +c + +D +r<   c                D    V P                  4       P                  W4       R# )aK  Define that the given name is declared in the given statement node.
NamedExpr's in Arguments, Keyword or Comprehension are evaluated in their
parent's parent scope. So we add to their frame's locals.

.. seealso:: :meth:`scope`

:param name: The name that is being defined.

:param stmt: The statement that defines the given name.
N)r$  	set_local)r   r   rX   s   &&&r:   rN  NamedExpr.set_local}  s     	

t*r<   r9  r  )r   r   r   r   r   r   r&  r   r   r   named_expr_assigned_stmtsr  r$  r  rN  r   r   r   s   @r:   r   r     sd     *OOH%
 "&%
 &*%
 %
N 88N#*#&+ +r<   r   c                  b   a  ] tR tRtRtR tRRRRR/R V 3R lllltR R	 ltRR
 R lltRt	V ;t
# )Unknowni  zThis node represents a node in a constructed AST where
introspection is not possible.

Used in the args attribute of FunctionDef nodes where function signature
introspection failed, and as a placeholder in ObjectModel.
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR/# )	r5   r   r(   r   r   r   r   r   r6   r8   )r9   s   "r:   r;   Unknown.__annotate__  sF     
 

 
 	
 
 
 

r<   c               	0   < \         SV `  VVVVVR 7       R# r   r  )r   r   r   r   r   r   r   s   &&&&$$r:   r   Unknown.__init__  r  r<   c                   V ^8  d   QhRR/# )r5   r6   zLiteral['Unknown']r8   )r9   s   "r:   r;   rT    s      ) r<   c                	    R # )rR  r8   r   s   &r:   r@  Unknown.qname  s    r<   c                   V ^8  d   QhRR/# rM   r8   )r9   s   "r:   r;   rT    s      5 r<   c              +  2   "   \         P                  x  R# 5i)z4Inference on an Unknown node immediately terminates.N)r   rS   r  s   &&,r:   r   Unknown._infer  s     s   r8   r  r>   )r   r   r   r   r   r   r   r@  r   r   r   r   s   @r:   rR  rR    s<     D
  
  $
 
" r<   rR  rd  c                  N   a  ] tR tRtRtR tRtR	tR V 3R lltR
R R llt	Rt
V ;t# )EvaluatedObjecti  zContains an object that has already been inferred

This class is useful to pre-evaluate a particular node,
with the resulting class acting as the non-evaluated node.
c               $    V ^8  d   QhRRRRRR/# )r5   originalr-   rC   r,   r6   r   r8   )r9   s   "r:   r;   EvaluatedObject.__annotate__  s$     
 
1
:I
	
r<   c                	  < Wn          W n         \        SV `  V P                   P                  V P                   P
                  V P                   P                  V P                   P                  V P                   P                  R 7       R# )r   N)	r`  rC   r   r   r   r   r   r   r   )r   r`  rC   r   s   &&&r:   r   EvaluatedObject.__init__  sh     4<?&+
 ==''}}//==''}}//==77 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   rN   rO   r   r
   r6   z(Generator[NodeNG | util.UninferableBase]r8   )r9   s   "r:   r;   ra    s$      .AD	1r<   c              +  	*   "   V P                   x  R # 5ir>   rB   r  s   &&,r:   r   EvaluatedObject._infer  s      jjr  )r`  rC   )r`  rB   r>   )r   r   r   r   r   r   r   r*  r   r   r   r   r   s   @r:   r^  r^    s-     D#OM
 
" r<   r^  c                  V   a  ] tR tRtRtRtRtRRRRR/R V 3R lllltR R	 ltR
t	V ;t
# )Matchi  zClass representing a :class:`ast.Match` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case 200:
        ...
    case _:
        ...
''')
>>> node
<Match l.2 at 0x10c24e170>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   Match.__annotate__  F     
 

 
 	
 
 #
 

r<   c               	8   < V  V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   Match.__init__  ,     	!!) 	 	
r<   c               $    V ^8  d   QhRRRRRR/# )r5   subjectr(   caseszlist[MatchCase]r6   r   r8   )r9   s   "r:   r;   rj    s*        	
 
r<   c               	    Wn         W n        R # r>   rp  rq  )r   rp  rq  s   &$$r:   r   Match.postinit  s     
r<   )rq  rp  rs  )rq  r  )r   r   r   r   r   r   r  r   r   r   r   r   s   @r:   rh  rh    s=     +O)
 "&
 &*
 
& r<   rh  c                      ] tR tRtRtRtR# )Patterni  z!Base class for all Pattern nodes.r8   Nr  r8   r<   r:   rv  rv    s    +r<   rv  c                  x   a  ] tR tRt$ RtRtRtR]R&   R]R&   R]R&   R]R&   RR	/R
 V 3R llltR R lt	Rt
V ;t# )	MatchCasei	  zClass representing a :class:`ast.match_case` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case 200:
        ...
''')
>>> node.cases[0]
<MatchCase l.3 at 0x10c24e590>
r   r   r   r   r   r   Nc                    V ^8  d   QhRRRR/# )r5   r   r   r6   r   r8   )r9   s   "r:   r;   MatchCase.__annotate__  s     

 

- 

4 

r<   c               	<   < V  V  V  \         SV `  VR R R R R7       R # )Nr^  r  )r   r   r   s   &$r:   r   MatchCase.__init__  s-     	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   patternrv  guardr   ra   r  r6   r   r8   )r9   s   "r:   r;   rz  *  s4     	 	 	 		
 	 
	r<   c               	*    Wn         W n        W0n        R # r>   r~  r  ra   )r   r~  r  ra   s   &$$$r:   r   MatchCase.postinit*  s     
	r<   )ra   r  r~  r  r  )r   r   r   r   r   r   r  r  r   r   r   r   r   s   @r:   rx  rx  	  sG    
 3O(L

$ 

 

	 	r<   rx  c                  R   a  ] tR tRtRtR
tRRRRR/R V 3R lllltR R	 ltR
tV ;t	# )
MatchValuei6  zClass representing a :class:`ast.MatchValue` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case 200:
        ...
''')
>>> node.cases[0].pattern
<MatchValue l.3 at 0x10c24e200>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchValue.__annotate__E  F     
 

 
 	
 
 #
 

r<   c               	4   < V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchValue.__init__E  )     	!!) 	 	
r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r  W  s       D r<   c               	    Wn         R # r>   rB   r  s   &$r:   r   MatchValue.postinitW  rX  r<   rB   r  
r   r   r   r   r   r   r   r   r   r   r   s   @r:   r  r  6  s7    
 !O
 "&
 &*
 
$ r<   r  c            
      N   a  ] tR tRtRtRtRRRRRRRRRR/R	 V 3R
 llltRtV ;t# )MatchSingletoni[  a  Class representing a :class:`ast.MatchSingleton` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case True:
        ...
    case False:
        ...
    case None:
        ...
''')
>>> node.cases[0].pattern
<MatchSingleton l.3 at 0x10c2282e0>
>>> node.cases[1].pattern
<MatchSingleton l.5 at 0x10c228af0>
>>> node.cases[2].pattern
<MatchSingleton l.7 at 0x10c229f90>
r   Nr   r   r   r   c               4    V ^8  d   QhRRRRRRRRRRRR	R
R/# )r5   rC   zLiteral[True, False, None]r   r   r   r   r   r   r   r6   r   r8   )r9   s   "r:   r;   MatchSingleton.__annotate__r  sR     
 
 *
 	

 
 
 #
 
 

r<   c               	<   < Wn         \        SV `	  VVVVVR 7       R# r   )rC   r   r   )r   rC   r   r   r   r   r   r   s   &$$$$$$r:   r   MatchSingleton.__init__r  s+     
!!) 	 	
r<   rB   r3  r   s   @r:   r  r  [  sP    ( M
 "	

 "&
 "&
 &*
 !%
 
 
r<   r  c                  R   a  ] tR tRtRtR
tRRRRR/R V 3R lllltR R	 ltR
tV ;t	# )MatchSequencei  a4  Class representing a :class:`ast.MatchSequence` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case [1, 2]:
        ...
    case (1, 2, *_):
        ...
''')
>>> node.cases[0].pattern
<MatchSequence l.3 at 0x10ca80d00>
>>> node.cases[1].pattern
<MatchSequence l.5 at 0x10ca80b20>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchSequence.__annotate__  r  r<   c               	4   < V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchSequence.__init__  r  r<   c                    V ^8  d   QhRRRR/# r5   patternslist[Pattern]r6   r   r8   )r9   s   "r:   r;   r         ! !M !d !r<   c               	    Wn         R # r>   r  r   r  s   &$r:   r   MatchSequence.postinit       r<   r  r  r  r   s   @r:   r  r    s7      $O
 "&
 &*
 
$! !r<   r  c                  j   a  ] tR tRtRtR
tRRRRR/R V 3R lllltR R	 lt]P                  t
R
tV ;t# )MatchMappingi  zClass representing a :class:`ast.MatchMapping` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case {1: "Hello", 2: "World", 3: _, **rest}:
        ...
''')
>>> node.cases[0].pattern
<MatchMapping l.3 at 0x10c8a8850>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchMapping.__annotate__  r   r<   c               	<   < V  V  V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchMapping.__init__  s/     	!!) 	 	
r<   c               (    V ^8  d   QhRRRRRRRR/# )	r5   keysr  r  r  restrU  r6   r   r8   )r9   s   "r:   r;   r    s4     	 	 	  		
  	 
	r<   c               	*    Wn         W n        W0n        R # r>   r  r  r  )r   r  r  r  s   &$$$r:   r   MatchMapping.postinit  s     	 	r<   r  r  )r   r   r   r   r   r   r   r   r   match_mapping_assigned_stmtsr  r   r   r   s   @r:   r  r    sD    
 3O
 "&
 &*
 
(	 ;;Nr<   r  c                  V   a  ] tR tRtRtRtRtRRRRR/R V 3R lllltR R	 ltR
t	V ;t
# )
MatchClassi  a>  Class representing a :class:`ast.MatchClass` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case Point2D(0, 0):
        ...
    case Point3D(x=0, y=0, z=0):
        ...
''')
>>> node.cases[0].pattern
<MatchClass l.3 at 0x10ca83940>
>>> node.cases[1].pattern
<MatchClass l.5 at 0x10ca80880>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchClass.__annotate__  sF     
 

 
 	
 
 #
 

r<   c               	@   < V  V  V  V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchClass.__init__  s2     	!!) 	 	
r<   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r5   r   r(   r  r  	kwd_attrsr7  kwd_patternsr6   r   r8   )r9   s   "r:   r;   r    s>     ) ) )  	)
 ) $) 
)r<   c               	6    Wn         W n        W0n        W@n        R # r>   )r   r  r  r  )r   r   r  r  r  s   &$$$$r:   r   MatchClass.postinit  s      "(r<   )r   r  r  r  )r   r  r  )r  r  )r   r   r   r   r   r   r*  r   r   r   r   r   s   @r:   r  r    s<      :O"M
 "&
 &*
 
*) )r<   r  c                  j   a  ] tR tRtRtR
tRRRRR/R V 3R lllltR R	 lt]P                  t
R
tV ;t# )	MatchStari  zClass representing a :class:`ast.MatchStar` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case [1, *_]:
        ...
''')
>>> node.cases[0].pattern.patterns[1]
<MatchStar l.3 at 0x10ca809a0>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchStar.__annotate__)  r  r<   c               	4   < V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchStar.__init__)  r  r<   c                    V ^8  d   QhRRRR/# )r5   r   rU  r6   r   r8   )r9   s   "r:   r;   r  ;  s       1 d r<   c               	    Wn         R # r>   r)  r  s   &$r:   r   MatchStar.postinit;  r   r<   r)  r  )r   r   r   r   r   r   r   r   r   match_star_assigned_stmtsr  r   r   r   s   @r:   r  r    sD    
  O
 "&
 &*
 
$ 88Nr<   r  c                  j   a  ] tR tRtRtRtRRRRR/R V 3R lllltR R	 lt]P                  t
R
tV ;t# )MatchAsiD  a  Class representing a :class:`ast.MatchAs` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case [1, a]:
        ...
    case {'key': b}:
        ...
    case Point2D(0, 0) as c:
        ...
    case d:
        ...
''')
>>> node.cases[0].pattern.patterns[1]
<MatchAs l.3 at 0x10d0b2da0>
>>> node.cases[1].pattern.patterns[0]
<MatchAs l.5 at 0x10d0b2920>
>>> node.cases[2].pattern
<MatchAs l.7 at 0x10d0b06a0>
>>> node.cases[3].pattern
<MatchAs l.9 at 0x10d09b880>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchAs.__annotate___  rk  r<   c               	8   < V  V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchAs.__init___  rn  r<   c               $    V ^8  d   QhRRRRRR/# )r5   r~  zPattern | Noner   rU  r6   r   r8   )r9   s   "r:   r;   r  r  s*          	
 
r<   c               	    Wn         W n        R # r>   r~  r   )r   r~  r   s   &$$r:   r   MatchAs.postinitr  s     	r<   )r   r~  r  r  )r   r   r   r   r   r   r   r   r   match_as_assigned_stmtsr  r   r   r   s   @r:   r  r  D  sD    0 *O
 "&
 &*
 
& 66Nr<   r  c                  R   a  ] tR tRtRtR
tRRRRR/R V 3R lllltR R	 ltR
tV ;t	# )MatchOri  zClass representing a :class:`ast.MatchOr` node.

>>> import astroid
>>> node = astroid.extract_node('''
match x:
    case 400 | 401 | 402:
        ...
''')
>>> node.cases[0].pattern
<MatchOr l.3 at 0x10d0b0b50>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   MatchOr.__annotate__  r  r<   c               	4   < V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   MatchOr.__init__  r  r<   c                    V ^8  d   QhRRRR/# r  r8   )r9   s   "r:   r;   r    r  r<   c               	    Wn         R # r>   r  r  s   &$r:   r   MatchOr.postinit  r  r<   r  r  r  r   s   @r:   r  r    s7    
 $O
 "&
 &*
 
$! !r<   r  c                  ^   a  ] tR tRtRtRtRRRRR/R V 3R lllltR R	 ltR
 R ltRt	V ;t
# )TemplateStri  zClass representing an :class:`ast.TemplateStr` node.

>>> import astroid
>>> node = astroid.extract_node('t"{name} finished {place!s}"')
>>> node
<TemplateStr l.1 at 0x103b7aa50>
Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   TemplateStr.__annotate__  r  r<   c               	4   < V  \         SV `  VVVVVR 7       R# r   r  r   s   &&&&$$r:   r   TemplateStr.__init__  r  r<   c                    V ^8  d   QhRRRR/# )r5   r   r  r6   r   r8   )r9   s   "r:   r;   r    s      , 4 r<   c               	    Wn         R # r>   r  r  s   &$r:   r   TemplateStr.postinit  s    r<   c                   V ^8  d   QhRR/# r5   r6   zIterator[NodeNG]r8   )r9   s   "r:   r;   r    s      . r<   c              #  	:   "   V P                    R j  xL
  R #  L5ir>   r  r   s   &r:   r   TemplateStr.get_children  r  r   r  r  r~  r   s   @r:   r  r    s<     "O
 "&
 &*
 
$ r<   r  c                  n   a  ] tR tRtRtRtRtRRRRR/R V 3R	 lllltRRRR/R
 R lltR R lt	Rt
V ;t# )Interpolationi  a!  Class representing an :class:`ast.Interpolation` node.

>>> import astroid
>>> node = astroid.extract_node('t"{name} finished {place!s}"')
>>> node
<TemplateStr l.1 at 0x103b7aa50>
>>> node.values[0]
<Interpolation l.1 at 0x103b7acf0>
>>> node.values[2]
<Interpolation l.1 at 0x10411e5d0>
r  r  Nr   r   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r8   )r9   s   "r:   r;   Interpolation.__annotate__  sF     #
 #
#
 #
 	#
 #
 ##
 
#
r<   c               	R   < V   V   V   R V n          \        SV `	  VVVVVR7       R # )Nr   r  r   s   &&&&$$r:   r   Interpolation.__init__  sK     	"3	 .2	 	!!) 	 	
r<   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r5   rC   r(   r   r  r{   r  r  r6   r   r8   )r9   s   "r:   r;   r    s>     ' ' ' 	'
 ' &' 
'r<   c               	6    Wn         W n        W0n        W@n        R # r>   )rC   r   r  r  )r   rC   r   r  r  s   &$$$$r:   r   Interpolation.postinit  s     
$&r<   c                   V ^8  d   QhRR/# r  r8   )r9   s   "r:   r;   r    s     # #. #r<   c              #  	n   "   V P                   x  V P                  '       d   V P                  x  R # R # 5ir>   r  r   s   &r:   r   Interpolation.get_children  s,     jj""" s   35)r  r  r   rC   r  )r   r  r  r  )r   r   r   r   r   r   r*  r   r   r   r   r   r   s   @r:   r  r    sV    
 /O)M#
 "&#
 &*#
 #
J'
 ' )-'# #r<   r  .zdict[type, type[NodeNG]]rA   c               $    V ^8  d   QhRRRRRR/# )r5   rC   r   rQ   zList | Set | Tupler6   r  r8   )r9   s   "r:   r;   r;   '  s$     
 

 2

r<   c                `    . pV  F%  p\        V4      pWn        VP                  V4       K'  	  V# )zACreate a list of nodes to function as the elements of a new node.)r   r   r   )rC   rQ   elementselementelement_nodes   &&   r:   _create_basic_elementsr  '  s6      H$W-"%	 
 Or<   c               $    V ^8  d   QhRRRRRR/# )r5   r   zMapping[Any, Any]rQ   r  r6   zAlist[tuple[SuccessfulInferenceResult, SuccessfulInferenceResult]]r8   )r9   s   "r:   r;   r;   4  s$      %)Fr<   c                    . pV P                  4        F9  w  r4\        V4      pWn        \        V4      pWn        VP                  WV34       K;  	  V# )zHCreate a list of node pairs to function as the items of a new dict node.)r  r   r   r   )r   rQ   r  r  rC   key_node
value_nodes   &&     r:   _create_dict_itemsr  4  sR     SUHlln
 %"5)
 ./ % Or<   c                    V ^8  d   QhRRRR/# )r5   rC   r
   r6   r*   r8   )r9   s   "r:   r;   r;   C  s     ' ' '!3 'r<   c                   \        V 4      p\        V\        4      '       d   Q hV\        9  d   \	        4       pWn        V# \        V,          p\        V\        \        \        34      '       d.   V! RR\        RRR7      pVP                  \        W4      4       V# \        V\        4      '       d.   V! RR\        RRR7      pVP                  \        W4      4       V# \        V 4      # )z*Return an astroid node for a python value.Nr   )r|   
issubclassr(   rA   r  r  rH   r  rI   r)   r   r  r  r  rz   )rC   
value_typerQ   initializer_clsr   s   &    r:   r   r   C  s     eJ*f----
 "{  
+O/D#u#566"!
 	0AB/4(("!
 	,U=><r<   )      )rH   rI   rJ   rK   Nr>   r  )__conditional_annotations__r   
__future__r   r   r  ro  r  r  typingr  collections.abcr   r   r   r   r   	functoolsr   r	   r
   r   r   r   r7  r   r   r   astroid.basesr   r   astroid.constr   r   r   astroid.contextr   r   r   astroid.exceptionsr   r   r   r   r   r   r   r    r!   r"   r#   astroid.interpreterr$   astroid.managerr%   r  r&   astroid.nodes.constr'   astroid.nodes.node_ngr(   astroid.nodes.scoped_nodesr)   astroid.typingr*   r+   r,   r-   version_infor.   typing_extensionsr0   r1   r2   rD   r  rE   BadOperationMessagerG   AssignedStmtsPossibleNoder  r{   AssignedStmtsCallInferBinaryOperationInferLHSr   InferUnaryOpr   rT   rv   r  r~   r   r   r   ParentAssignNodeABCMetar   NoChildrenNodeLookupMixInrJ   r.  r5  rA  AssignTypeNoderC  r  r}  r  rK   	Statementr  r  r!  OperatorNoder  ro  r  r  r  eqneltlegtger  r  r  r  r  rz   rQ  rS  rf  rr  r  r  r  MultiLineBlockNoder  MultiLineWithElseBlockNoder  r  r  
ImportNoder  r&  r4  rd   rl  r|  r  rH   r  r  r  r  r  r  r   r   r)  rf   rh  rI   r  r  r  r  r  r  r  r  r  r  r
  r2  r!  r   rR  UNATTACHED_UNKNOWNr^  rh  rv  rx  r  r  r  r  r  r  r  r  r  r  r@   r  r  r|   rD  r7   floatcomplexr4  rA   r  r  r   )r  s   @r:   <module>r0     s	  
 B " 
 
   
   L L % ? ? / / 0 C C G G    . * % - ( 5  w&.// ..&
1 08P8PQ ""ST !4S	D	 	   %&o./1  %&ot%7$%>>?A #(::; %%. &.4FV (6HBuK00(ckk uvY3  Y3x$
 7 79U9U$
NI3;""K$>$> I3X < KKDD$:NE9((+*F*F E9P["" <4>['')>)> 4>n0**K,A,A 0f}
 8 8+:O:O}
@p
K$$ p
fw>V w>tK&&(=(= V6 Vt 	(++(++(++(++
%	62 	 	@ f @ FMF M`fK&& fR{));+@+@ 1 1h*k** *Z% ['')>)> % Py68 yxB;   BD&'** &'RKT""K$>$>@U@UKT\F**FRs &F <g'' gT(9 (9V?['')>)> ?DA;	/	/1F1F A;HK>F K>\FF[## FFR*f *ZDK= DKN5{));+@+@ 5p*** *Z;%%{'<'< )K!! )X["" 8- &]F ]@-k** -`s8 s8ls"+
0
0+2G2G s"lb"k44k6K6K b"JDKM DKN:(**K,A,A :(z2k(( 2j,;-- ,` 	4	N>k&& N>bB;K22K4I4I B;Je**ePB BF 8= =I++ IyV yx $ q# q#hs+** s+l k((  F N3 f J,K!!;#A#A ,^,f ,*.. *Z" "J(
W (
V&!G &!R1;--w 1h4) 4)n'**G 'T:k((' :z"!g "!J!& !HE#F E#Z 	$	5$J%Iu%	5U	5'	# "
'r<   