
    c.             	         U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZ ddlmZmZmZ ddlZdd	lmZmZmZ dd
lmZ ddlmZ ddlmZm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ej/        dk    rddlm0Z0 nddl1m2Z0 erddl3m4Z4  ej5        d          Z6dZ7 ej5        d          Z8ddiZ9dZ:dZ; e<h d          Z=ej>        j?        ej>        j@        ej>        jA        ej        jB        jC        fZDejE        ejF        ejG        ejH        ejI        ejJ        fZK G d de          ZLdd%ZM ed&'          dd,            ZNdd1ZOdd6ZPdd9ZQdd=ZRdd>ZSddBZTddEZUddGZVddKZWi dLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrgifdsdtdudqdvgifdwdxdydzd{d|ZXd}eYd~<    G d de          ZZ G d d          Z[ G d de          Z\ddZ]dS )z#Variables checkers for Python code.    )annotationsN)defaultdict)	GeneratorIterableIterator)Enum)	lru_cache)TYPE_CHECKINGAny
NamedTuple)basesextract_nodenodes)_base_nodes)InferenceResult)BaseCheckerutils)in_type_checking_blockis_postponed_evaluation_enabled)	PY39_PLUSTYPING_NEVERTYPING_NORETURN)CONTROL_FLOWHIGH	INFERENCEINFERENCE_FAILURE)MessageDefinitionTuple)      )cached_property)cachedproperty)PyLinterz^_{2}[a-z]+_{2}$
__future__z_.*|^ignored_|^unused__py_abcabczbuiltins.rangetyping>5   r   SetDictListTextTypeDequeSizedTupleUnionAnyStrCounterGenericMappingPatternTypeVarBinaryIOCallableClassVarHashabler   r   KeysViewOptionalSequence	Awaitable	Container	Coroutine	FrozenSetr   	ItemsView
ByteString
Collection
MutableSetr   
Reversible
ValuesViewAbstractSetDefaultDictMappingViewSupportsAbsSupportsIntAsyncIterableAsyncIteratorSupportsBytesSupportsFloatSupportsRoundAsyncGeneratorContextManagerMutableMappingMutableSequenceSupportsComplexAsyncContextManagerc                      e Zd ZdZdZdZdS )VariableVisitConsumerActionzReported by _check_consumer() and its sub-methods to determine the
    subsequent action to take in _undefined_and_used_before_checker().

    Continue -> continue loop to next consumer
    Return -> return and thereby break the loop
    r      N)__name__
__module____qualname____doc__CONTINUERETURN     9lib/python3.11/site-packages/pylint/checkers/variables.pyrX   rX      s$          HFFFra   rX   stmtnodes.ImportFromnamestrreturnbool | Nonec                    	 |                      | j                  }n# t          j        $ r Y dS w xY w|j                            |g           D ]/}t          |t          j                  r|j        t          k    r dS 0dS )z9Check if the name is a future import from another module.NT)
do_import_modulemodnameastroidAstroidBuildingExceptionlocalsget
isinstancer   
ImportFromFUTURE)rc   re   module
local_nodes       rb   _is_from_future_importru      s    &&t|44+   tt m''b11  
j%"233 	
8Jf8T 	444s    00i  )maxsizeklassnodes.LocalsDictNodeNG
str | Nonenodes.FunctionDef | Nonec                    	 t          |                     |                    }n# t          t          f$ r Y dS w xY w	 ||         }n# t          $ r Y dS w xY wt	          |t
          j                  r|S dS )zGet overridden method if any.N)nextlocal_attr_ancestorsStopIterationKeyErrorrp   r   FunctionDef)rw   re   parent	meth_nodes       rb   overridden_methodr      s    
e0066778$   tt4L		    tt )U.// 4s   "% ::A 
AAnodenodes.Assigninferredr   c                   d}t          |t                    rit          | t          j                  r| j                                        }n3t          | t          j                  r| j                                        }|S |                                j	        }|                                 j	        |k    r;| j
        |j
        k    rd|                                 d}n&|j
        r
d|j
         }n|j
        rd|j
         d| }|S )z~Return extra information to add to the message for unpacking-non-sequence
    and unbalanced-tuple/dict-unpacking errors.
     'zdefined at line z of )rp   
DICT_TYPESr   Assignvalue	as_stringForiterrootre   lineno)r   r   moreinferred_modules       rb   _get_unpacking_extra_infor      s	    D(J'' dEL)) 	):''))DDei(( 	)9&&((Dmmoo*Oyy{{?* I;(/) 	8.x))++...DD_ 	87ho77D	 IH(/HHHHKra   
nodes.Nameframedefframeboolc                j   dx}}|r |j         r|j                                         }|r |j         r|j                                         }t          |t          j                  r'||ur#|t          j        | t          j                  u rdS t          |t          j                  rS|                    |          r| j	        |j	        k     S t          | j         t          j        t          j
        f          sdS nt          d ||fD                       rdS g }||fD ]f}|}|r`t          |t          j        t          j        f          s|                    |           n$|j         r|j                                         }nn|`g|r"t          t          |                    dk    rdS |j	        |j	        k     S )a  Detect that the given frames share a global scope.

    Two frames share a global scope when neither
    of them are hidden under a function scope, as well
    as any parent scope of them, until the root scope.
    In this case, depending from something defined later on
    will only work if guarded by a nested function definition.

    Example:
        class A:
            # B has the same global scope as `C`, leading to a NameError.
            # Return True to indicate a shared scope.
            class B(C): ...
        class C: ...

    Whereas this does not lead to a NameError:
        class A:
            def guard():
                # Return False to indicate no scope sharing.
                class B(C): ...
        class C: ...
    NFc              3  d   K   | ]+}t          |t          j        t          j        f           V  ,d S N)rp   r   ClassDefModule).0fs     rb   	<genexpr>z'_detect_global_scope.<locals>.<genexpr>   sI        >?Jq5>5<8999     ra   rY   )r   scoperp   r   r   r   get_node_first_ancestor_of_typer   	parent_ofr   	Argumentsanyr   appendlenset)r   r   r   	def_scoper   break_scopescurrent_scopeparent_scopes           rb   _detect_global_scoper      s    2 I % %""$$ ,HO ,O))++	5%.))" U:4ARSSS u%*++  ??8$$ 	1;00$+(95?'KLL 	5		  DI8CT   
 
 
 uL+   % 	lU^U\,JKK ##L111" +288::  	  C--..!3  u <(/))ra   nodes.Import&Generator[InferenceResult, None, None]c                z    t           j                                        }||_        |                     |d          S )NF)asname)rl   contextInferenceContext
lookupnameinfer)r   re   r   s      rb   _infer_name_moduler     s5     o..00GG::ge:,,,ra   not_consumeddict[str, list[nodes.NodeNG]](list[tuple[str, _base_nodes.ImportNode]]c                   i }|                                  D ]\  }}t          d |D                       r|D ]}t          |t          j        t          j        f          s)|j        D ]Z}d}|d         }|dk    r|}n:d}|                    |          r|                    d          dk    rd}|s||v r|}|r	||vr|||<   [t          |                                 d	 
          S )a  Try to fix imports with multiple dots, by returning a dictionary
    with the import names expanded.

    The function unflattens root imports,
    like 'xml' (when we have both 'xml.etree' and 'xml.sax'), to 'xml.etree'
    and 'xml.sax' respectively.
    c              3     K   | ]J}t          |t          j                  o+t          |                                t          j                  V  Kd S r   )rp   r   
AssignNameassign_type	AugAssignr   rc   s     rb   r   z#_fix_dot_imports.<locals>.<genexpr>*  sf       
 
  tU-.. @4++--u??
 
 
 
 
 
ra   Nr   *F.Tc                    | d         j         S )NrY   )
fromlineno)as    rb   <lambda>z"_fix_dot_imports.<locals>.<lambda>I  s    qt ra   )key)
itemsr   rp   r   rq   Importnames
startswithfindsorted)	r   r   re   stmtsrc   importssecond_nameimport_module_namename_matches_dotted_imports	            rb   _fix_dot_importsr     sd    02E#))++ . .e 
 
 
 
 
 
 
 	
  	. 	.DdU%5u|$DEE : . ."%,QZ"%, 9 #'KK16.*55d;;:.33C882=: 6:21 9TW_ 9 '9 .;e#; .)-E+&+.	.2 %++--%>%>????ra   c                   | t          |                    t          j                            v rdS |                    t          j        t          j        f          }|D ](}|j        D ]\  }}|r|| k    r  dS |r
|| k    r  dS )dS )zDetect imports in the frame, with the required *name*.

    Such imports can be considered assignments if they are not globals.
    Returns True if an import for the given name was found.
    FT)_flattened_scope_namesnodes_of_classr   Globalr   rq   r   )re   r   r   import_nodeimport_nameimport_aliass         rb   _find_frame_importsr   L  s     %e&:&:5<&H&HIII u""EL%2B#CDDG  )4): 	 	%K  4'  444  !4 ttt	 5ra   %nodes.Global | _base_nodes.ImportNodeglobal_namesset[str]c                B    | j         D ]\  }}|r||v r dS ||v r dS dS )NTF)r   )rc   r   r   r   s       rb   _import_name_is_globalr   b  s[     &*Z  !\  	|+ ttL( 	44	5ra   iterator'Iterator[nodes.Global | nodes.Nonlocal]c                r    d | D             }t          t          j                            |                    S )Nc              3  >   K   | ]}t          |j                  V  d S r   )r   r   r   s     rb   r   z)_flattened_scope_names.<locals>.<genexpr>s  s*      33$c$*oo333333ra   )r   	itertoolschainfrom_iterable)r   valuess     rb   r   r   p  s5     43(333Fy,,V44555ra   	name_nodec                                                       }|                    t          j                  }t	           fd|D                       pt           j        |          S )zEChecks if name_node has corresponding assign statement in same scope.c              3  8   K   | ]}|j         j         k    V  d S r   re   )r   r   r   s     rb   r   z$_assigned_locally.<locals>.<genexpr>{  s,      >>Aqv'>>>>>>ra   )r   r   r   r   r   r   re   )r   name_node_scopeassign_stmtss   `  rb   _assigned_locallyr   w  sh    oo''O"11%2BCCL>>>>>>>>> BUC C ra   nodes.NodeNGr   nodes.FunctionDefc                T   t           j        t           j        t           j        t           j        f}|                    t           j        |          D ]W}t          j        |j	                  }t          j
        |          r(t          |dd           dk    r| j        |j        k     r dS XdS )N)
skip_klassre   rn   TF)r   r   r   r   rq   r   Callr   
safe_inferfuncis_builtin_objectgetattrr   )rc   r   
skip_nodescallr   s        rb   _has_locals_call_after_noder     s    	J $$UZJ$GG  #DI..#H--	&$//8;	 {T[( tt5ra   E0601)z#Using variable %r before assignmentused-before-assignmentaf  Emitted when a local variable is accessed before its assignment took place. Assignments in try blocks are assumed not to have occurred when evaluating associated except/finally blocks. Assignments in except blocks are assumed not to have occurred when evaluating statements outside the block, except when the associated try block contains a return statement.E0602)zUndefined variable %rundefined-variablez,Used when an undefined variable is accessed.E0603)z%Undefined variable name %r in __all__undefined-all-variablez>Used when an undefined variable name is referenced in __all__.E0604)z7Invalid object %r in __all__, must contain only stringsinvalid-all-objectz;Used when an invalid (non-string) object occurs in __all__.E0605)z1Invalid format for __all__, must be tuple or listinvalid-all-formatz(Used when __all__ has an invalid format.E0611)zNo name %r in module %rno-name-in-modulez-Used when a name cannot be found in a module.W0601)z0Global variable %r undefined at the module levelglobal-variable-undefinedzsUsed when a variable is defined through the "global" statement but the variable is not defined in the module scope.W0602)z-Using global for %r but no assignment is doneglobal-variable-not-assignedzjUsed when a variable is defined through the "global" statement but no assignment to this variable is done.W0603)zUsing the global statementglobal-statementzUsed when you use the "global" statement to update a global variable. Pylint just try to discourage this usage. That doesn't mean you cannot use it !W0604)z.Using the global statement at the module levelglobal-at-module-levelzSUsed when you use the "global" statement at the module level since it has no effectW0611)z	Unused %sunused-importz5Used when an imported module or variable is not used.W0612)zUnused variable %runused-variablez-Used when a variable is defined but not used.W0613)zUnused argument %runused-argumentz4Used when a function or method argument is not used.W0614)z.Unused import(s) %s from wildcard import of %sunused-wildcard-importz]Used when an imported module or variable is not used from a `'from X import *'` style import.W0621)z-Redefining name %r from outer scope (line %s)redefined-outer-namezUUsed when a variable's name hides a name defined in an outer scope or except handler.W0622)zRedefining built-in %rredefined-builtinz5Used when a variable or function override a built-in.W0631)z)Using possibly undefined loop variable %rundefined-loop-variablezUsed when a loop variable (i.e. defined by a for loop or a list comprehension or a generator expression) is used outside the loop.ziPossible unbalanced tuple unpacking with sequence %s: left side has %d label%s, right side has %d value%sunbalanced-tuple-unpackingz>Used when there is an unbalanced tuple unpacking in assignment	old_names)E0632zold-unbalanced-tuple-unpackingz%Attempting to unpack a non-sequence%sunpacking-non-sequencezKUsed when something which is not a sequence is used in an unpack assignment)W0633zold-unpacking-non-sequence)z Cell variable %s defined in loopcell-var-from-loopzA variable used in a closure is defined in a loop. This will result in all closures using the same value for the closed-over variable.)zPossibly unused variable %rpossibly-unused-variablezUsed when a variable is defined but might not be used. The possibility comes from the fact that locals() might be used, which could consume or not the said variable)z"Invalid assignment to %s in methodself-cls-assignmentzKInvalid assignment to self or cls in instance or class method respectively.)z!Invalid index for iterable lengthpotential-index-errorzREmitted when an index used on an iterable goes beyond the length of that iterable.)z_Possible unbalanced dict unpacking with %s: left side has %d label%s, right side has %d value%sunbalanced-dict-unpackingzIUsed when there is an unbalanced dict unpacking in assignment or for loop)W0632E0633W0640W0641W0642E0643W0644z!dict[str, MessageDefinitionTuple]MSGSc                  <    e Zd ZU dZded<   ded<   ded<   ded<   d	S )
ScopeConsumerz)Store nodes and their consumption states.r   
to_consumeconsumed$defaultdict[str, list[nodes.NodeNG]]consumed_uncertainrf   
scope_typeN)rZ   r[   r\   r]   __annotations__r`   ra   rb   r1  r1  $  sC         33----++++<<<<OOOOOra   r1  c                  z   e Zd ZdZd/dZd0d	Zd1dZed2d            Zed2d            Z	ed3d            Z
ed0d            Zd4dZd5dZed6d            Zed7d            Zd8dZed9d"            Zed6d#            Zed6d$            Zed:d'            Zed;d+            Zed<d,            Zed<d-            Zd.S )=NamesConsumerzQA simple class to handle consumed, to consume and scope type info of node locals.r   r   r6  rf   rg   Nonec                    t          t          j        |j                  i t          j        t
                    |          | _        || _        t                      | _	        d S r   )
r1  copyrn   collectionsr   list_atomicr   r   _if_nodes_deemed_uncertain)selfr   r6  s      rb   __init__zNamesConsumer.__init__0  sN    $Idk""B(?(E(Ez
 
 	9<'''ra   c           	        d | j         j                                        D             }d | j         j                                        D             }d | j         j                                        D             }d                    |          }d                    |          }d                    |          }d| d| d| d| j         j         d		S )
Nc                "    g | ]\  }}| d | S z->r`   r   kvs      rb   
<listcomp>z*NamesConsumer.__repr__.<locals>.<listcomp>8  s&    PPP11PPPra   c                "    g | ]\  }}| d | S rE  r`   rF  s      rb   rI  z*NamesConsumer.__repr__.<locals>.<listcomp>9  s&    KKKTQ[[Q[[KKKra   c                "    g | ]\  }}| d | S rE  r`   rF  s      rb   rI  z*NamesConsumer.__repr__.<locals>.<listcomp>:  s3     
 
 
 AqqKKAKK
 
 
ra   , z
to_consume : z
consumed : z
consumed_uncertain: z
scope_type : 
)r?  r2  r   r3  r5  joinr6  )rA  _to_consumes	_consumed_consumed_uncertainto_consumesr3  r5  s          rb   __repr__zNamesConsumer.__repr__7  s    PP0G0M0M0O0OPPPKKT\-B-H-H-J-JKKK	
 
$(L$C$I$I$K$K
 
 
 ii--99Y''!YY':;;   (  l%	   	ra   Iterator[Any]c                *    t          | j                  S r   )r   r?  rA  s    rb   __iter__zNamesConsumer.__iter__G  s    DL!!!ra   r   c                    | j         j        S r   )r?  r2  rV  s    rb   r2  zNamesConsumer.to_consumeJ      |&&ra   c                    | j         j        S r   )r?  r3  rV  s    rb   r3  zNamesConsumer.consumedN  s    |$$ra   r4  c                    | j         j        S )a  Retrieves nodes filtered out by get_next_to_consume() that may not
        have executed.

        These include nodes such as statements in except blocks, or statements
        in try blocks (when evaluating their corresponding except and finally
        blocks). Checkers that want to treat the statements as executed
        (e.g. for unused-variable) may need to add them back.
        )r?  r5  rV  s    rb   r5  z NamesConsumer.consumed_uncertainR  s     |..ra   c                    | j         j        S r   )r?  r6  rV  s    rb   r6  zNamesConsumer.scope_type^  rY  ra   re   consumed_nodeslist[nodes.NodeNG]c                z    fd| j         |         D             }| j        |<   |r|| j         |<   dS | j         |= dS )zMark the given nodes as consumed for the name.

        If all of the nodes for the name were consumed, delete the name from
        the to_consume dictionary
        c                6    g | ]}|t                    v|S r`   )r   )r   nr]  s     rb   rI  z2NamesConsumer.mark_as_consumed.<locals>.<listcomp>h  s+    WWWA!3~CVCV:VWaWWWra   N)r2  r3  )rA  re   r]  
unconsumeds     ` rb   mark_as_consumedzNamesConsumer.mark_as_consumedb  s\     XWWW!6WWW
,d 	&$.DOD!!!%%%ra   r   list[nodes.NodeNG] | Nonec                   j         }j        }| j                            |          }                    d          }|rPt          |t          j                  r6||d         j        k    r%|d         j        j        d         }|j         |k    rd}|r0t          |t          j	                  r|j
        k    r|j        |v rd}t          fd                    d                                          D                       r|S t                                        r|S |rM|                     |          }| j        j         xx         |z  cc<   t'          |          fd|D             }|rfd|D             }|rN|                     ||          }| j        j         xx         |z  cc<   t'          |          fd|D             }|rM|                     ||          }| j        j         xx         |z  cc<   t'          |          fd	|D             }|rM|                     ||          }| j        j         xx         |z  cc<   t'          |          fd
|D             }|S )aG  Return a list of the nodes that define `node` from this scope.

        If it is uncertain whether a node will be consumed, such as for statements in
        except blocks, add it to self.consumed_uncertain instead of returning it.
        Return None to indicate a special case that needs to be handled by the caller.
        Tfuturer   Nc              3  h   K   | ],}t          |t          j                  oj        |j        v V  -d S r   rp   r   Nonlocalre   r   r   childr   s     rb   r   z4NamesConsumer.get_next_to_consume.<locals>.<genexpr>  sQ       
 
 uen--J$)u{2J
 
 
 
 
 
ra   c                    g | ]}|v|	S r`   r`   r   ra  uncertain_nodes_sets     rb   rI  z5NamesConsumer.get_next_to_consume.<locals>.<listcomp>  $    RRRQ>Q5QR1RRRra   c                    g | ][}t          |                    d           t          j                  r)|                    d                                         Y|\S )Trf  )rp   	statementr   ExceptHandlerr   )r   ra  r   s     rb   rI  z5NamesConsumer.get_next_to_consume.<locals>.<listcomp>  sp       !!++T+":":E<OPP ;;d;++55d;;	  ra   c                    g | ]}|v|	S r`   r`   rn  s     rb   rI  z5NamesConsumer.get_next_to_consume.<locals>.<listcomp>  rp  ra   c                    g | ]}|v|	S r`   r`   rn  s     rb   rI  z5NamesConsumer.get_next_to_consume.<locals>.<listcomp>  rp  ra   c                    g | ]}|v|	S r`   r`   rn  s     rb   rI  z5NamesConsumer.get_next_to_consume.<locals>.<listcomp>  rp  ra   )re   r   r2  ro   rr  rp   r   r   targetsr   r   targetr   r   get_childrenVariablesChecker%_comprehension_between_frame_and_node_uncertain_nodes_in_false_testsr5  r   !_uncertain_nodes_in_except_blocks=_uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks<_uncertain_nodes_in_try_blocks_when_evaluating_except_blocks)	rA  r   re   parent_nodefound_nodesnode_statementlhsuncertain_nodesro  s	    `      @rb   get_next_to_consumez!NamesConsumer.get_next_to_consumep  sQ    yko))$//t44	#;55	# {1~44	#
 a.'/2Cx4 #" 	;	22	  D(	 "k1		 K  
 
 
 
400==??
 
 
 
 
 	  AA$GG 	  	S"BB;PTUUO#DI.../A..."%o"6"6RRRRkRRRK  	   $  K  	S"DDT> O #DI.../A..."%o"6"6RRRRkRRRK  	SRR  
 #DI.../A..."%o"6"6RRRRkRRRK  	SQQ  
 #DI.../A..."%o"6"6RRRRkRRRKra   r   c                    t          |t          j        t          j        f          rUt                               |          p9t          |t          j                  ot           fd|j        D                       S t          |t          j                  rt                               |          S t          |t          j	                  sdS t          |                    t          j                            rdS t                               |          rdS |j        sdS t                               |j                  ot                               |j                  S )zReturn True if there is a collectively exhaustive set of paths under
        this `if_node` that define `name`, raise, or return.
        c              3  N   K   | ]}t                               |          V   d S r   )r9  )_defines_name_raises_or_returns_recursive)r   handlerre   s     rb   r   zJNamesConsumer._exhaustively_define_name_raise_or_return.<locals>.<genexpr>  sN           "KKg      ra   FT)rp   r   	TryExcept
TryFinallyr9  r  allhandlersWithIfr   r   Break_defines_name_raises_or_returnsorelse_branch_handles_namebody)re   r   s   ` rb   )_exhaustively_define_name_raise_or_returnz7NamesConsumer._exhaustively_define_name_raise_or_return  sd    dU_e.>?@@ 	 GGdSS dEO44      $(=	    	 dEJ'' 	W JJ4QUVVV$)) 	5 t""5;//00 	4 88tDD 	4 { 	511$)
 
 D00t{CC	Dra   r  Iterable[nodes.NodeNG]c                :     t           fd|D                       S )Nc              3     K   | ]v}t                               |          pVt          |t          j        t          j        t          j        t          j        f          ot                               |          V  wd S r   )	r9  r  rp   r   r  r  r  r  r  )r   if_body_stmtre   s     rb   r   z5NamesConsumer._branch_handles_name.<locals>.<genexpr>  s       

 

  99$MM 5?E,<ejI   GGl 

 

 

 

 

 

ra   )r   )re   r  s   ` rb   r  z"NamesConsumer._branch_handles_name  s=     

 

 

 

 !%

 

 

 

 

 
	
ra   r  c                
   g }|D ]{}t          |          rt          |t          j                  s.t	          j        |t          j                  P|                                                                ury                    |          rt          
                    |j                  rt          fd| j        D                       r|                    |           t          j        t          j                  rj        j        }nj        }t	          j        |          }|rt'          d |D                       sL|                    |           | j                                       }|S )a  Identify nodes of uncertain execution because they are defined under
        tests that evaluate false.

        Don't identify a node if there is a collectively exhaustive set of paths
        that define the name, raise, or return (e.g. every if/else branch).
        Nc              3  B   K   | ]}|                               V  d S r   r   )r   if_node
closest_ifs     rb   r   z@NamesConsumer._uncertain_nodes_in_false_tests.<locals>.<genexpr>#  sE         !!*--     ra   c              3  Z   K   | ]&}t          |t          j                  o|j         V  'd S r   )rp   r   Constr   )r   r   s     rb   r   z@NamesConsumer._uncertain_nodes_in_false_tests.<locals>.<genexpr>0  sL       + + 8U[11H(.6H+ + + + + +ra   )r   rp   r   r   r   r   r  r   r   r9  r  re   r   r@  r   test	NamedExprr   	infer_allr  add)rA  r  r   r  
other_noder  all_inferredr  s          @rb   r|  z-NamesConsumer._uncertain_nodes_in_false_tests  s    % *	< *	<J%j11 j%*:;; >z58TTJ zz||:#3#3#5#55  **>*>t*D*D  FF        #>       &&z222 */5?;; '!,! ?400L s + + ,+ + + ( (  "":...+//
;;;;ra   r  nodes.Statementc                   g }| D ]}|                     d          }t          j        |t          j                  }|s;|                              rQ|j        }t          d |j        D                       }t          d |j	        D                       }	t          d |j	        D                       }
|s|	s|
rt          |j        t          j                  r>||j        j        v r0|j                            |          r|                    |           nt          |j        t          j                  r>||j        j	        v r0|j                            |          r|                    |           n"t          fd|j        D                       rt"                              |          r|                    |           |S )z}Return any nodes in ``found_nodes`` that should be treated as uncertain
        because they are in an except block.
        Trf  c              3  J   K   | ]}t          |t          j                  V  d S r   rp   r   Return)r   try_statements     rb   r   zBNamesConsumer._uncertain_nodes_in_except_blocks.<locals>.<genexpr>R  sB       $ $! =%,77$ $ $ $ $ $ra   c              3  J   K   | ]}t          |t          j                  V  d S r   r  r   else_statements     rb   r   zBNamesConsumer._uncertain_nodes_in_except_blocks.<locals>.<genexpr>V  sB       % %" >5<88% % % % % %ra   c              3     K   | ]V}t          |t          j                  o7t          |j        t          j                  ot          j        |j                  V  Wd S r   )rp   r   Exprr   r   r   is_terminating_funcr  s     rb   r   zBNamesConsumer._uncertain_nodes_in_except_blocks.<locals>.<genexpr>Z  ss       # # # >5:66 D~3UZ@@D-n.BCC# # # # # #ra   c              3  X   K   | ]$}t                               j        |          V  %d S r   )r9  r  re   )r   r  r   s     rb   r   zBNamesConsumer._uncertain_nodes_in_except_blocks.<locals>.<genexpr>s  sP           "KK	7      ra   )rr  r   r   r   rs  r   r   r   r  r  rp   r  	finalbodyr   r  r  r  r9  _check_loop_finishes_via_except)r  r   r  r  r  other_node_statementclosest_except_handlerclosest_try_excepttry_block_returnselse_block_returnselse_block_exitss    `         rb   r}  z/NamesConsumer._uncertain_nodes_in_except_blocks;  sg    % :	/ :	/J#-#7#7t#7#D#D %*%J$e&9& &" * %//55 2H2O # $ $%7%<$ $ $ ! ! "% % %&8&?% % % " "  # # # '9&?	# # #     ! $6 :J  ~4e6FGG&.*?*II +1;;NKK
 $**:6666 ~4eoFF&.*?*FF +1;;NKK
 $**:6666      $6#>	      <<TCUVV  "":....ra   c                    t          |t          j        t          j        t          j        f          rdS t          |t          j                  r8|j        r1t          |j        t          j                  r|j        j	         k    rdS t          |t          j
                  rk|j        D ]c}t          j        |          D ]L}t          |t          j                  r|j        }t          |t          j                  r|j	         k    r  dS Mdt          |t          j                  r:t!           fd|                    t          j                  D                       rdS dS )NTc              3  8   K   | ]}|j         j        k    V  d S r   )rx  re   )r   child_named_exprre   s     rb   r   z@NamesConsumer._defines_name_raises_or_returns.<locals>.<genexpr>  sB        $ !',4     ra   F)rp   r   RaiseAssertr  	AnnAssignr   rx  r   re   r   rw  r   get_all_elementsStarredr  r   r   r  )re   r   rx  elts   `   rb   r  z-NamesConsumer._defines_name_raises_or_returns  so   dU[%,EFF 	4tU_--	
	 4;(899	  D(		 4dEL)) 	$, $ $ 1&99 $ $C!#u}55 (!i!#u'788 $SX=M $#ttt	$
 dEH%% 	    (,(;(;EO(L(L      tura   c                    |                                 D ]v}t                               |          r dS t          |t          j        t          j        f          r0t           fd|                                 D                       r dS wdS )zaReturn True if some child of `node` defines the name `name`,
        raises, or returns.
        Tc              3  N   K   | ]}t                               |          V   d S r   )r9  r  )r   nested_stmtre   s     rb   r   zJNamesConsumer._defines_name_raises_or_returns_recursive.<locals>.<genexpr>  sG        # "AA$TT     ra   F)ry  r9  r  rp   r   r  r  r   )re   r   rc   s   `  rb   r  z7NamesConsumer._defines_name_raises_or_returns_recursive  s     %%'' 	  	 D<<T4HH tt$5: 677      '+'8'8':':        44ura   other_node_try_exceptnodes.TryExceptc                    |j         sdS t          j         t          j        t          j        f          }|dS t           fd|j         D                       sdS |j         D ] }t          |t          j                  r|} n!dS dd
} |||          sM|	                                D ]6}t          |t          j        t          j        f          r |||          r n7dS |j
        D ]}t                              ||          r n dS dS )aQ  Check for a case described in https://github.com/PyCQA/pylint/issues/5683.

        It consists of a specific control flow scenario where the only
        non-break exit from a loop consists of the very except handler we are
        examining, such that code in the `else` branch of the loop can depend on it
        being assigned.

        Example:

        for _ in range(3):
            try:
                do_something()
            except:
                name = 1  <-- only non-break exit from loop
            else:
                break
        else:
            print(name)
        FNc              3  J   K   | ]}|u p|                               V  d S r   r  )r   r  r   s     rb   r   z@NamesConsumer._check_loop_finishes_via_except.<locals>.<genexpr>  sO       
 
 d"Dn&>&>t&D&D
 
 
 
 
 
ra   r  r  loopnodes.For | nodes.Whilerg   r   c                D     t           fd|j        D                       S )zAReturn True if `other_node_try_except` is a descendant of `loop`.c              3  J   K   | ]}|u p|                               V  d S r   r  )r   loop_body_statementr  s     rb   r   z[NamesConsumer._check_loop_finishes_via_except.<locals>._try_in_loop_body.<locals>.<genexpr>  sW         ( $'<< H&001FGG     ra   )r   r  )r  r  s   ` rb   _try_in_loop_bodyzHNamesConsumer._check_loop_finishes_via_except.<locals>._try_in_loop_body  sA          ,09     ra   T)r  r  r  r  rg   r   )r  r   r   r   r   Whiler   rp   r  node_ancestorsr  r9  +_recursive_search_for_continue_before_break)r   r  closest_loopinner_else_statement
break_stmtr  ancestor	loop_stmts   `       rb   r  z-NamesConsumer._check_loop_finishes_via_except  s   . %+ 	5 1$EK8PQQ 	  	5 
 
 
 
"."5
 
 
 
 
 	
 5$9$@ 	 	 .<< 1

 5	 	 	 	 ! !6EE 	(7799  hEK(@AA (()>II  u%* 	 	IHH:    4ura   rc   r  nodes.Breakc                   | |u rdS t          | t          j                  rdS |                                 D ]G}t          | t          j        t          j        f          r)t                              ||          r dS HdS )zReturn True if any Continue node can be found in descendants of `stmt`
        before encountering `break_stmt`, ignoring any nested loops.
        FT)rp   r   Continuery  r   r  r9  r  )rc   r  rl  s      rb   r  z9NamesConsumer._recursive_search_for_continue_before_break  s     : 	5dEN++ 	4&&(( 	 	E$EK 899 HHz   tt ura   c                `   g }t          j        |t          j                  |S | D ]}|                    d          }|u rt          j        |t          j                  \  }B|j        vrLt          fdj	        D                       sn|
                    |           |S )zReturn any nodes in ``found_nodes`` that should be treated as uncertain.

        Nodes are uncertain when they are in a try block and the ``node_statement``
        being evaluated is in one of its except handlers.
        NTrf  c              3  V   K   | ]#}j         v p|                                v V  $d S r   )r  r  )r   &other_node_try_ancestor_except_handlerr  other_node_try_ancestors     rb   r   z]NamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_except_blocks.<locals>.<genexpr>0  s^         ; '*A*JJ ;9)88::;     ra   )r   r   r   rs  rr  -get_node_first_ancestor_of_type_and_its_childr  r  r   r  r   )r  r  r  r  r  %other_node_try_ancestor_visited_childr  r  s         @@rb   r  zJNamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_except_blocks  s    /1!&!FE/"
 "
 " 	#""% 	/ 	/J#-#7#7t#7#D#D #'== 
 C$eo '5 ' 5.34        ?V>^	      "":....ra   c                v   g }t          j        |t          j                  \  }|S |j        vr|S | D ]}|                    d          }t          j        |t          j                  \  }}|=||j        vrG|ur!t          fd|j        D                       sl|                    |           |S )NTrf  c              3  J   K   | ]}|u p|                               V  d S r   r  )r   other_node_final_statementclosest_try_finally_ancestors     rb   r   z^NamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks.<locals>.<genexpr>c  sZ        
 3	 /2NN 1;;4      ra   )	r   r  r   r  r  rr  r  r   r   )	r  r  r  %child_of_closest_try_finally_ancestorr  r  other_node_try_finally_ancestor(child_of_other_node_try_finally_ancestorr  s	           @rb   r~  zKNamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks;  s<    /1 ?E,
 
	
(1 ( 	#""1/9:	# #"%  	/  	/J#-#7#7t#7#D#D  C$e&6 /8 /  96;<  07SS
    
 7V6_    
 "":....ra   N)r   r   r6  rf   rg   r:  )rg   rf   )rg   rT  )rg   r   )rg   r4  )re   rf   r]  r^  rg   r:  )r   r   rg   rd  )re   rf   r   r   rg   r   )re   rf   r  r  rg   r   )r  r^  r   r   rg   r^  )r  r^  r   r   r  r  rg   r^  )r   r   r  r  rg   r   )rc   r  r  r  rg   r   )r  r^  r  r  rg   r^  )rZ   r[   r\   r]   rB  rS  rW  propertyr2  r3  r5  r6  rc  r  staticmethodr  r  r|  r}  r  r  r  r  r  r~  r`   ra   rb   r9  r9  -  sH       [[? ? ? ?    " " " " ' ' ' X' % % % X% 	/ 	/ 	/ X	/ ' ' ' X'& & & &Y Y Y Yv 'D 'D 'D \'DR 
 
 
 \
6 6 6 6p D D D \DL    \2    \" F F F \FP    \& - - - \-^ 2 2 2 \2 2 2ra   r9  c                  @    e Zd ZdZdZeZddddddfd	d
ddddfddddddfddddddfddddddfdeddddfddddddfddddd dffZdˈ fd%Z	 e
j        d&          dd)            Zdd*Zdd,Z e
j        d-d.d/d0d1d2d3d4          dd5            Zdd7Zdd8Zdd:Zdd<Zdd>Zdd?ZddAZddBZddDZddEZddGZddHZeZeZ e
j        dIdJdKdLd/          ddN            ZddPZddRZ ddTZ! e
j        dU          ddW            Z" e
j        dU          ddX            Z#dd\Z$ddaZ%ddhZ& e
j        di          ddk            Z' e
j        di          ddm            Z( e
j        dndodpdq          dds            Z)dduZ*ddvZ+ddwZ,ddyZ-dd{Z.e/dd|            Z0e/dd~            Z1e/dd            Z2e3dd            Z4e3dd            Z5e3dd            Z6e3dd            Z7ddZ8e3dd            Z9e3dd            Z:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBe3dd            ZCddZDddZEddZFddZGe3dd            ZHddZIddZJddZKddZLd dZMddZNddZOddÄZPddńZQddȄZR e
j        d-d3          ddʄ            ZS xZTS (  rz  a  BaseChecker for variables.

    Checks for
    * unused variables / imports
    * undefined variables
    * redefinition of variable from builtins or from an outer scope or except handler
    * use of variable before assignment
    * __all__ consistency
    * self/cls assignment
    	variableszinit-importFynz<y or n>zBTells whether we should check for unused import in __init__ files.)defaulttypemetavarhelpzdummy-variables-rgxz;_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_regexpz<regexp>zYA regular expression matching the name of dummy variables (i.e. expected to not be used).zadditional-builtinsr`   csvz<comma separated list>zList of additional names supposed to be defined in builtins. Remember that you should avoid defining new builtins when possible.	callbacks)cb__cbz<callbacks>z|List of strings which can identify a callback function by name. A callback name must start or end with one of those strings.zredefining-builtins-modules)z	six.moveszpast.builtinszfuture.builtinsbuiltinsiozQList of qualified module names which can have objects that can redefine builtins.zignored-argument-namesz:Argument names that match this expression will be ignored.zallow-global-unused-variablesTzGTells whether unused global variables should be treated as a violation.zallowed-redefined-builtinsz(List of names allowed to shadow builtinslinterr"   rg   r:  c                    t                                          |           g | _        g | _        g | _        	 d| _        d S NF)superrB  _to_consume_type_annotation_names_except_handler_names_queue_postponed_evaluation_enabled)rA  r  	__class__s     rb   rB  zVariablesChecker.__init__  sK       0213#  	( 	2-2***ra   r'  r   	nodes.Forc                X   t          |j        t          j                  sd S |j        j        }t          j        |j                  }t          |t                    sd S | 	                    |          }|sd S t          |t          j        j                  rIt          |          dk    rt          d |D                       rd S t          d |D                       rd S t          |          t          |          k    r+t!          ||          }|                     |||||           d S d S )N   c              3  F   K   | ]}t          |j                  d k    V  dS )r  N)r   elts)r   xs     rb   r   z-VariablesChecker.visit_for.<locals>.<genexpr>  s/      (J(JaQV)9(J(J(J(J(J(Jra   c              3  J   K   | ]}t          |t          j                  V  d S r   rp   r   r  r   rx  s     rb   r   z-VariablesChecker.visit_for.<locals>.<genexpr>  s.      KK:fem44KKKKKKra   )rp   rx  r   r.   r  r   r   r   r   _nodes_to_unpackrl   objects	DictItemsr   r  r   r   _report_unbalanced_unpacking)rA  r   rw  r   r   detailss         rb   	visit_forzVariablesChecker.visit_for  s>    $+u{33 	F+"#DI..(J// 	F&&x00 	Fh 9:: 	
 7||q  S(J(J6(J(J(J%J%J  KK7KKKKK w<<3v;;& 	X/h??G--dHgvwWWWWW	X 	Xra   c                0    |                      |           d S r   _store_type_annotation_namesrA  r   s     rb   	leave_forzVariablesChecker.leave_for      ))$/////ra   nodes.Modulec                @   t          |d          g| _        t          |          | _        |j                                        D ]Y\  }}t          j        |          r@|                     |d                   s|dk    r;| 	                    d||d                    ZdS )zoVisit module : update consumption analysis variable
        checks globals doesn't overrides builtins.
        rs   r   r]   r  argsr   N)
r9  r  r   r  rn   r   r   
is_builtin _should_ignore_redefined_builtinadd_message)rA  r   re   r   s       rb   visit_modulezVariablesChecker.visit_module  s     *$99:-LT-R-R*;,,.. 	P 	PKD%%% P88qBB diFW   !44eAh OOO		P 	Pra   r  r  r  r  r  r  r  r   c                t   t          | j                  dk    sJ |                     |           | j                                        j        }d|j        v r|                     ||           |                     |           | j        j	        j
        s	|j        rdS |                     |           g | _        dS )zLeave module: check globals.rY   __all__N)r   r  _check_metaclassespopr2  rn   
_check_all_check_globalsr  configinit_importpackage_check_importsr  )rA  r   r   s      rb   leave_modulezVariablesChecker.leave_module  s     4#$$))))%%%'++--8# 	0OOD,/// 	L))) {!- 	$, 	FL)))&(###ra   nodes.ClassDefc                V    | j                             t          |d                     dS )z2Visit class: update consumption analysis variable.classNr  r   r9  r  s     rb   visit_classdefzVariablesChecker.visit_classdef3  s)    dG < <=====ra   c                    |                     t          j                  D ]}t          |j        t          j                  rt          |j        j        t          j                  rt          |j        j        j        t          j                  rV|j        j        j        }| j	        D ]=}|j
        |j        v r-|                    |j
        |j        |j
                             n>| j	                                         dS )z2Leave class: update consumption analysis variable.N)r   r   Namerp   r   r   r   	Attributeexprr  re   r2  rc  r#  )rA  r   r   hidden_name_nodeconsumers        rb   leave_classdefzVariablesChecker.leave_classdef7  s     ,,UZ88 	 	I9+UZ88y/4eoFF y/495:FF
 $-#3#8#=  $ 0  H',0CC  11,1$/0@0EF    	ra   nodes.Lambdac                V    | j                             t          |d                     dS )z3Visit lambda: update consumption analysis variable.lambdaNr.  r  s     rb   visit_lambdazVariablesChecker.visit_lambdaK  s)    dH = =>>>>>ra   _c                8    | j                                          dS )z3Leave lambda: update consumption analysis variable.Nr  r#  rA  r;  s     rb   leave_lambdazVariablesChecker.leave_lambdaO       	ra   nodes.GeneratorExpc                V    | j                             t          |d                     dS )z4Visit genexpr: update consumption analysis variable.comprehensionNr.  r  s     rb   visit_generatorexpz#VariablesChecker.visit_generatorexpT  )    dO D DEEEEEra   c                8    | j                                          dS )z4Leave genexpr: update consumption analysis variable.Nr=  r>  s     rb   leave_generatorexpz#VariablesChecker.leave_generatorexpX  r@  ra   nodes.DictCompc                V    | j                             t          |d                     dS )z5Visit dictcomp: update consumption analysis variable.rC  Nr.  r  s     rb   visit_dictcompzVariablesChecker.visit_dictcomp]  rE  ra   c                8    | j                                          dS )z5Leave dictcomp: update consumption analysis variable.Nr=  r>  s     rb   leave_dictcompzVariablesChecker.leave_dictcompa  r@  ra   nodes.SetCompc                V    | j                             t          |d                     dS )z4Visit setcomp: update consumption analysis variable.rC  Nr.  r  s     rb   visit_setcompzVariablesChecker.visit_setcompf  rE  ra   c                8    | j                                          dS )z4Leave setcomp: update consumption analysis variable.Nr=  r>  s     rb   leave_setcompzVariablesChecker.leave_setcompj  r@  ra   r   c                6   | j                             t          |d                     | j                            d          s| j                            d          sdS |                                j        }|                                D ]\  }}||v rt          |t          j
                  s||         d         }t          |t          j                  r|j        t          k    r]t          d ||         D                       r}|j        }|                     ||          s|                     d||f|           t%          j        |          rB|                     |          s-|                     |          s|                     d||           dS )zFVisit function: update consumption analysis variable and check locals.functionr  r  Nr   c              3  4   K   | ]}t          |          V  d S r   )r   )r   
definitions     rb   r   z5VariablesChecker.visit_functiondef.<locals>.<genexpr>  s<        ;E*:66     ra   r  )r  r   r9  r  is_message_enabledr   globalsr   rp   r   r   rq   rk   rr   r   r   _is_name_ignoredr  r   r  _allowed_redefined_builtinr  )rA  r   globsre   rc   rU  lines          rb   visit_functiondefz"VariablesChecker.visit_functiondefo  s   dJ ? ?@@@K**+ABB	{--.ABB	 F		#**,, 	L 	LJD$u} LZel%C%C L"4[^
z5+;<<"*f4
    INt      !,,,T488 $$.dD\ %   
  &&L77==L ==dCCL   !44d KKK;	L 	Lra   c           	        |                      |           |j        r|                     |j                   |j        r|j        D ]}|                     |           | j                                        j        }| j                            d          s6| j                            d          s| j                            d          sdS t          j
        |          rdS |                                }|r|                                rdS t          |                    t          j                            }t          |                    t          j                            }t%                      }|                    t          j                  D ]=}|j        D ]3}	t          j        |	j                  D ]}
|                    |
           4>|                                D ]%\  }
}|                     |
||d         |||           &dS )z5Leave function: check function's locals are consumed.r  r$  r  Nr   )r"  type_comment_returns_store_type_annotation_nodetype_comment_argsr  r#  r2  r  rV  r   is_error	is_methodis_abstractr   r   r   r   rj  r   ComprehensionScope
generatorsfind_assigned_names_recursiverx  r  r   _check_is_unused)rA  r   argument_annotationr   rb  r   nonlocal_namescomprehension_target_namescomprehension_scope	generatorre   r   s               rb   leave_functiondefz"VariablesChecker.leave_functiondef  s:   %%%$ 	H,,T-FGGG! 	F'+'= F F#001DEEEE'++--8K**+<==	{--.HII	 {--.?@@	
 F >$ 	F NN$$	 	))++ 	F-d.A.A%,.O.OPP/0C0CEN0S0STT/2uu"#'#6#6u7O#P#P 	9 	90; 9 9	!?	@PQQ 9 9D.224888899 (--// 	 	KD%!!a*   	 	ra   r	  r  r  r  nodes.Globalc                   |                     d          }t          |t          j                  r|                     d|           dS |                                }d}|                                j        }|j        D ]T}	 |	                    |          }n# t          j        $ r g }Y nw xY wt          d |                    |d          D                        }t          j        ||          s2t          j        ||          s|r|                     d||	           d
}|D ]}	t          |	t          j                  r(|	j        |j        v r|                     d||	            nh|	                     d          |u r nNt          |	t          j        t          j        f          r|	j        |u r n|r|                     d||	           d
}V|r|                     d|           dS dS )z0Check names imported exists in the global scope.Trf  r  r   Nc              3  b   K   | ]*}t          |t          j        t          j        f          V  +d S r   )rp   r   r   rq   )r   locals     rb   r   z0VariablesChecker.visit_global.<locals>.<genexpr>  sJ       4 4 55<1A"BCC4 4 4 4 4 4ra   r`   r  r  Fr  r	  r  )r   rp   r   r   r  r   r   rn   r   r   rl   NotFoundErrorr   ro   r   is_reassigned_after_currentis_deleted_after_currentr   re   special_attributesr   r   r   )
rA  r   r   rs   default_messagelocals_re   assign_nodesnot_defined_locally_by_importanodes
             rb   visit_globalzVariablesChecker.visit_global  sc    

$
''eU\** 	5DAAAF**,,%J (	, (	,D"%~~d33( " " "!" 14 4 4$[[r224 4 4 1 1 -)
 5dDAA6tTBB 2
   !?dQU VVV"'% , ,ue&677
f&?? $$%8t$$OOOE;;d;++v5 Euu~u7H&IJJ.
 E0 ,$$%@tRV$WWW&+O 	</d;;;;;	< 	<s   BB.-B.nodes.AssignNamec                    t          |                                t          j                  r|                     |           d S d S r   )rp   r   r   r   
visit_namer  s     rb   visit_assignnamez!VariablesChecker.visit_assignname  sD    d&&((%/:: 	"OOD!!!!!	" 	"ra   nodes.DelNamec                0    |                      |           d S r   )r  r  s     rb   visit_delnamezVariablesChecker.visit_delname
  s    ra   -nodes.Name | nodes.AssignName | nodes.DelNamec                    |                     d          }|j        0|                                j                            d          rJ dS |                     ||           |                     |           dS )zDon't add the 'utils.only_required_for_messages' decorator here!

        It's important that all 'Name' nodes are visited, otherwise the
        'NamesConsumers' won't be correct.
        Trf  Nz.py)rr  r   r   fileendswith"_undefined_and_used_before_checker_loopvar_name)rA  r   rc   s      rb   r  zVariablesChecker.visit_name  s{     ~~T~**? 	yy{{'0077777F//d;;;4     ra   r  nodes.ExceptHandlerc                (   |j         rt          |j         t          j                  sd S | j        D ]@\  }}|j         j         |j         k    r&|                     d|j         |j        f|            nA| j                            ||j         f           d S )Nr  r  )re   rp   r   r   r   r  r   r   )rA  r   outer_exceptouter_except_assign_names       rb   visit_excepthandlerz$VariablesChecker.visit_excepthandler  s    y 	
49e6F G G 	F6:6V 	 	2L2y~!9!>>   *279PQ !   
  	(//ty0ABBBBBra   c                    |j         rt          |j         t          j                  sd S | j                                         d S r   )re   rp   r   r   r   r#  r  s     rb   leave_excepthandlerz$VariablesChecker.leave_excepthandler,  sB    y 	
49e6F G G 	F(,,.....ra   r   rc   r   c                V   |                                 }t          | j                  dz
  }| j        |         j        }t	          |dd          D ]}| j        |         }|                     ||||k              r+|                     |||||          \  }}	|	r0|	|j        |j                 z  }	|	                    |j        |	           |t          j        u r|t          j        u r d S |j        t          j        j        v st!          j        |j                  s|j        | j        j        j        v ss|j        dk    r+t+          d |                                D                       sAt!          j        |t0                    s%|                     d|j        |           d S d S d S d S d S d S )NrY   r   r  c              3  r   K   | ]2}t          |t          j                  |                                V  3d S r   )rp   r   r   rb  r   is     rb   r   zFVariablesChecker._undefined_and_used_before_checker.<locals>.<genexpr>Y  sQ        !!U%677KKMM     ra   r   r  )r   r   r  r6  range_should_node_be_skipped_check_consumerr5  re   rc  rX   r^   r_   r   r   scope_attrsr   r  r  r&  additional_builtinsr   r  node_ignores_exception	NameErrorr  )
rA  r   rc   r   start_indexbase_scope_typer  current_consumeractionnodes_to_consumes
             rb   r  z3VariablesChecker._undefined_and_used_before_checker2  s*    

$*++a/ *;7B{B++ 	 	A#/2 ++D2BADTUU '+';';dE#3_( ($F$   O
 !$4$G	$RR  11$)=MNNN4== 4;;  I11	N	**	N yDK.BB	N
 	[(	N   !0022    	N .tY??	N 1	MMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	Nra   r5  r9  is_start_indexr   c                   |j         dk    ryt          j        |j        |          s|s|                     |          rdS t          |j        t          j                  r&t          |j        j        t          j	                  rdS nO|j         dk    r| 
                    ||j                  rdS |j         dk    rt          j        ||j                  rdS dS )zTests a consumer and node for various conditions in which the node shouldn't
        be checked for the undefined-variable and used-before-assignment checks.
        r-  TrS  r9  F)r6  r   is_ancestor_namer   _ignore_class_scoperp   r   r   Keywordr   _defined_in_function_definitionis_default_argument)rA  r   r5  r  s       rb   r  z(VariablesChecker._should_node_be_skippedb  s     ') 	 %hmT:: "'+'?'?'E'E t $+u}55 *"EN; ;  t J. 	43W3W(-4
 4
 	 4 H, 	1J(-2
 2
 	 4ura   r   rx   r  r  rf   =tuple[VariableVisitConsumerAction, list[nodes.NodeNG] | None]c           
     "   |j         |j        v rVt          j        |j                  st          |t          j                  s#|                     |           t          j
        dfS |                    |          }|t          j        dfS |sY|j         |j        v rt          }nt          }|                     d|j         ||           t          j
        |j        |j                  fS |                     |           t          j        |d                   }|                    d          }	|	                    d          }
||
u o>|
                    |          o)t          |
t          j                  o|j         |
j         k    }|rnt          j        |t          j                  rOt          j        |          r-|                                j                                        |
urt          j
        dfS |                     ||||	||
||          \  }}}|rt          j        dfS |rt          j        |          st;          j        ||	d          s|	|u o%t          |t          j        t          j         f          }|s|s|st          |	t          j!                  rt          j"        |tF                    sw| j$        rQt          |t          j%        t          j&        t          j'        f          r |j         |(                                j)        v s|rt          j        |gfS t          j        dfS nT|dk    r| j$        r&t          |t          j%        t          j&        f          sjt          |t          j%                  rt          j        |t          j&                  s1|                     d|j         |t                     t          j
        |fS n|dk    r[t          |t          j                  rA|j         |j)        v r3|j*        |	j*        k    r#|                     d|j         |t                     nR| +                    ||	          r|                                j)        ,                    |j                   r$|                     d|j         |t                     n#|                     d	|j         |t                     t          j
        |fS t          |	t          j                  r| -                    ||	|          S t          |t          j.                  rkt          |j        t          j/                  rL| 0                    ||j                  r1|                     d	|j         |tb                     t          j
        |fS t          j
        |fS )
z>Checks a consumer for conditions that should trigger messages.Nr   r  r   
confidencer   Trf  )r  r9  r   )2re   r3  r   is_func_decoratorr   rp   r   rd  _check_late_binding_closurerX   r_   r  r^   r5  r   r   r  assign_parentrr  r   r   r   r   Lambdar  r   r   _is_variable_violationis_defined_beforerl   are_exclusiveDelNamer   Deleter  r  r  r  r   r   r   rn   r   _is_only_type_assignmentro   _is_first_level_self_referencer  IfExp_is_never_evaluatedr   )rA  r   rc   r   r  r  r  r  defnodedefstmtr   is_recursive_klassmaybe_before_assignannotation_returnuse_outer_definitiondefined_by_stmts                   rb   r  z VariablesChecker._check_consumer  s#    9(11 	B &'7'<== BZe.F F B 006663:DAA&::4@@ 	@/8$?? 	y,?? ")

!
(Y%	     ,2 3DI> 
 	((...%k!n55##4#00===-- X +""4((+8U^44+ 	X]*	 	 	>5dELII	> -d33		>
 ::<<&,,..h>	>2 06== ''	
 	
		
    	@/8$??  b	M+D11b	M )$HHb	M &o *u}e&673 3O #@"@ %@ gu|44	@ 3D)DD L :L&  % % 1 % L !I);;L + R$?$H4&#QQ ; DdKK H, ( 6M"4%/5;L)MNNM tU_55	M
 =dEDUVVM $$0!Y!#'	 %    8>LL H,  uen55
	U\1
 7+==

 $$0!Y!#'	 %    **499 	Mzz||"&&ty11   ,494TX !       (tytPT !    06DD00 	M66tWkRRR11 		M'.%+66 M++GW^DD M$$,!Y!#,	 %    8>LL+2K@@ra   r  r   c                   | j         st          j        |          rdS t          j        |          du rdS |j        D ]\  }}|                    d          }	 t          t          ||d                             }n# t          j	        $ r Y Pw xY wt          |t          j                  so|                     |||dd                    dS )!Check modules attribute accesses.NTr   r   rY   )_analyse_fallback_blocksr   is_from_fallback_blockis_node_in_guarded_import_blockr   splitr|   r   rl   ResolveErrorrp   r   r   _check_module_attrs)rA  r   re   r;  partsrs   s         rb   visit_importzVariablesChecker.visit_importT  s     , 	1Md1S1S 	 F066$> 	 Fz 	> 	>GD!JJsOOE0uQx@@AA'   fel33 $$T659====	> 	>s   #A<<BBrd   c                   | j         st          j        |          rdS t          j        |          du rdS |j                            d          }	 |                    |d                   }n# t          j        $ r Y dS w xY w| 	                    |||dd                   }|sdS |j
        D ]6\  }}|dk    r| 	                    |||                    d                     7dS )r  NTr   r   rY   r   )r  r   r  r  rk   r  rj   rl   rm   r  r   )rA  r   
name_partsrs   re   r;  s         rb   visit_importfromz!VariablesChecker.visit_importfromj  s"    , 	1Md1S1S 	 F066$> 	 F\'',,
	**:a=99FF/ 	 	 	FF	))$
122GG 	Fz 	D 	DGD!s{ $$T64::c??CCCC	D 	Ds   A- -B ?B r  r!  r%  unbalanced_dict_unpackingr   c                   |                      |           t          |j        d         t          j        t          j        f          sdS |j        d                                         }t          d |D                       rdS 	 t          j	        |j
                  }||                     |||           dS dS # t          j        $ r Y dS w xY w)zCheck unbalanced tuple unpacking for assignments and unpacking
        non-sequences as well as in case self/cls get assigned.
        r   Nc              3  J   K   | ]}t          |t          j                  V  d S r   r
  r  s     rb   r   z0VariablesChecker.visit_assign.<locals>.<genexpr>  s.      GGVz&%-00GGGGGGra   )_check_self_cls_assignrp   rw  r   r.   r)   iteredr   r   r   r   _check_unpackingrl   InferenceError)rA  r   rw  r   s       rb   visit_assignzVariablesChecker.visit_assign  s     	##D)))$,q/EK+DEE 	F,q/((** GGwGGGGG 	F	'
33H ?%%hg>>>>>? ?% 	 	 	FF	s   2B: :CCnodes.ListCompc                V    | j                             t          |d                     dS )z5Visit listcomp: update consumption analysis variable.rC  Nr.  r  s     rb   visit_listcompzVariablesChecker.visit_listcomp  rE  ra   c                8    | j                                          dS )z5Leave listcomp: update consumption analysis variable.Nr=  r>  s     rb   leave_listcompzVariablesChecker.leave_listcomp  r@  ra   c                0    |                      |           d S r   r  r  s     rb   leave_assignzVariablesChecker.leave_assign  r  ra   
nodes.Withc                0    |                      |           d S r   r  r  s     rb   
leave_withzVariablesChecker.leave_with  r  ra   nodes.Argumentsc                D    |j         D ]}|                     |           d S r   )r`  r_  )rA  r   
annotations      rb   visit_argumentsz VariablesChecker.visit_arguments  s5    0 	9 	9J,,Z8888	9 	9ra   c                >    t          | j        j        j                  S r   )r   r  r&  analyse_fallback_blocksrV  s    rb   r  z)VariablesChecker._analyse_fallback_blocks  s    DK&>???ra   Iterable[str]c                $    | j         j        j        S r   )r  r&  ignored_modulesrV  s    rb   _ignored_modulesz!VariablesChecker._ignored_modules  s    {!11ra   c                >    t          | j        j        j                  S r   )r   r  r&  allow_global_unused_variablesrV  s    rb   _allow_global_unused_variablesz/VariablesChecker._allow_global_unused_variables  s    DK&DEEEra   c                   d}t          |t          j                  r|                     d          |u r| |j        j        v p7| |j        j        v p)| |j        j        v p| |j        j        u p| |j        j	        u pd|j        
                    |           pJ|j        o|j        
                    |           p)|j        o"| |j        u p|j        
                    |           }|S )NFTrf  )rp   r   r   rr  r  r   posonlyargs_annotationskwonlyargs_annotationsvarargannotationkwargannotationr   
decoratorsreturns)r   r   %in_annotation_or_default_or_decorators      rb   r  z0VariablesChecker._defined_in_function_definition  s    16-ue/00	d++u4	 EJ22 :uzAA:uz@@: uz::: uz99 :''-- $I)9)C)CD)I)I M Q.O%-2I2I$2O2O 2 54ra   c                6   | }| j         }|||u rdS t          |t          j                  r||j        urdS t          |t          j                  r||j        urdS t          |t          j                  r|j        r||j        d         u sdS |}|j         }|dS )zReturn True if node within a lambda/comprehension body (or similar) and thus
        should not have access to class attributes in frame.
        NFTr   )	r   rp   r   r  r  Comprehensionr   rd  re  )r   r   rl  r   s       rb    _in_lambda_or_comprehension_bodyz1VariablesChecker._in_lambda_or_comprehension_body  s      	# u&%,// E4L t&%"566 5;S t&%":;; !&+v/@/C&C
 tE]F!  	#" ura   r  r  r  r   r  tuple[bool, bool, bool]c                
    d}d}	d}
||urt           ||          }n"|j        0 j        |j        v st	          j         j                  d         rd}nt          |t          j                  p-t           	                    d          t          j
                  ot                     }|sV|                                                     j                  d         r$d}||k    ot          t          j                   }
n< j        |j        v r.t!           fd|                                D                        }|dk    rtt          |t          j                  rZ j        |j        v rLt          t          j                  o. j        v o%|j         j                 d         j        |j        k      }nt          |t          j                  rt          |t          j                  r |j        u rZ|                    |j                  r@d}	|j        j        |j        v r)|j         j                 d         j        |j        k     rd}nd}t           j        t          j                  r|j        |j        k    }n|rd}n|o|j        |j        k    }|r|j        |j        k    rt          |t          j                  r!||u r|                               r||urd}n_t          |t2                    r;t4                              |          r!||u r|                               r||u rd}nt          t          j                  r||u r|                    |          r||u r؉j         j        k    rj         j        k     sj         j        k     srt<          sj         j        k    rt          |t          j        t          j         t          j!        t          j"        f          rUt          |j#        t          j$                  r6j#         u p,t!          fd %                                D                       }t          |t          j&        t          j'        f          rt          |j        t          j(                  rtS          |          rtS                     s|j        }tU          j+         t          j                   }|rtU          j+        |t          j                  su|                               }|s^|,                                r&tU          j-         j        |j.        d                   }n t!           fd	|j.        D                       }|sd}||	|
fS )
NTFrY   rf  c              3  h   K   | ],}t          |t          j                  oj        |j        v V  -d S r   ri  rk  s     rb   r   z:VariablesChecker._is_variable_violation.<locals>.<genexpr>  sQ       . . uen55R$)u{:R. . . . . .ra   r9  r   c              3  *   K   | ]}|j         u V  d S r   )r   )r   ancr  s     rb   r   z:VariablesChecker._is_variable_violation.<locals>.<genexpr>  sC       G G14w},G G G G G Gra   c              3  L   K   | ]}t          j        j        |          V  d S r   )r   
is_definedre   )r   contentr   s     rb   r   z:VariablesChecker._is_variable_violation.<locals>.<genexpr>  sF       5 5$+ !& 0G D D5 5 5 5 5 5ra   )/r   r   re   r  rl   builtin_lookuprp   r   r   r   r  r   r   lookupr  rn   r   ry  r   r   defaultsr   r  r   r   NODES_WITH_VALUE_ATTRrz   _maybe_used_and_assigned_at_oncer  
col_offsetr   r   r  r   r  r   	JoinedStrr  r   rq   r  r   r   r   has_elif_blockr  r  )r   r  rc   r  r   r   r  r  r  r  r  forbid_lookupdefstmt_parentmaybe_annotationused_in_branchdefined_in_or_elses   ``              rb   r  z'VariablesChecker._is_variable_violation  st    #!$  	"6tUH"M"M_ 	 	X11,)$)44Q7, ',# 5%"344 Edjjj55u|DD* $D))  ! 
X]]__%;%;DI%F%Fq%I 
&+#'+w (zU0@ @ <$$ ho- *- . . . .!)!6!6!8!8. . . + + '# x'M	75%.11M	7 	U\)M	7" 7EO44 OG,,OL+A.9G<NN#
 %.11 x	7j5$7
 7
 x	7
 u}$ 
/););EM)J)J 
/$(!M&(/9/ 	215<u|K/ +0''*.'$+u77 L&*o9K&K# f	7"& $M7;M(M   # <t':L'L <x):;;;); !**400; G+	; +0''w(=>>2(II'RR2 )2 !**400	2
 2 +0'' ' )	'
 !**400' ' $Ndk9' !( 2T_ D' $NT[8'" !*#'$ !($+ =%'& !+ '$)L$)O$)O$)L	!"! !''8 !+7=%/ J J9'J +2-4*? +3 G G G G8<8K8K8M8MG G G D D' 7U\53C$DEE 7w~ux88 7 +733 7 /t44	 7 ")#(#H%/$ $  %7=(%*; 7 &4%=%=d%C%CN) 7)88:: 161A $	>+@+C2 2.. 25 5 5 5 5/=/D5 5 5 2 2.
  2 726/"$57KKKra   c                   t          | t          j                  rt          d | j        D                       S t          | t          j                  rdS t          | j        t          j                  r#t          d | j        j        D                       S | j        }t          |t          j                  rdS t          |t          j	                  r!t          |j
        t          j                  rdS t          |t          j                  r t          d |j        D                       rdS t          |t          j                  sdS t          d |                    t          j                  D                       S )zeCheck if `defstmt` has the potential to use and assign a name in the
        same statement.
        c              3  $   K   | ]}|j         V  d S r   )guard)r   cases     rb   r   zDVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>  s$      <<dtz<<<<<<ra   Tc              3     K   | ]L}t          |t          t          j        t          j        fz             0t
                              |          V  Md S r   )rp   r  r   r  Matchrz  r  r   r  s     rb   r   zDVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>  sc        c#8EK;U#UVV AA#FF     ra   c              3     K   | ]D}t          |d          t          j                  pt          |d         t          j                  V  EdS )r   rY   Nrp   r   r  )r   items     rb   r   zDVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>  s[       1
 1
 tAw,,P
47EK0P0P1
 1
 1
 1
 1
 1
ra   Fc              3    K   | ]}t          d  |j        D                       p`t          d |j        D                       pBt          |j        t
          j                  o#t          |j        j        t
          j                  V  dS )c              3  T   K   | ]#}t          |j        t          j                  V  $d S r   )rp   r   r   r  )r   kwargs     rb   r   zNVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>.<genexpr>  s0      PP
5;44PPPPPPra   c              3  J   K   | ]}t          |t          j                  V  d S r   r  )r   args     rb   r   zNVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>.<genexpr>  s.      EEC:c5;//EEEEEEra   N)	r   keywordsr  rp   r   r   r2  r3  r  )r   r   s     rb   r   zDVariablesChecker._maybe_used_and_assigned_at_once.<locals>.<genexpr>  s       
 
  PP$-PPPPP EE49EEEEE 49eo66 <ty~u{;;
 
 
 
 
 
ra   )rw   )rp   r   r  r   casesr  r   BaseContainerr  r  r  r(   r   r   r   )r  r   s     rb   r  z1VariablesChecker._maybe_used_and_assigned_at_once  s   
 gu{++ 	=<<gm<<<<<<gu{++ 	4gmU%899 	  "=-     
 eU[)) 	4eU\** 	z%*ek/R/R 	4eUZ(( 	S 1
 1
1
 1
 1
 .
 .
 	 4%,, 	5 
 
 ,,5:,>>
 
 
 
 
 	
ra   c                  	 t          |t          j                  r|j        rdS j        | j        j        j        v st          j	        j                  rdS |
                    d          }
                    d          }}||j        urv|                                }|                    t          j                  D ]z}||u rt          fd|                    t          j                  D                       r;t          fd|                    t          j                  D                       r dS {|j                            j        g           }|D ]	||k    r	j        j        k    r n{t          	j        t          j                  r	j        j        rOt          	j        t          j                  r-t          	fd                                D                       s dS |j        }||j        uvdS )z>Check if variable only gets assigned a type and never a value.FTrf  c              3  4   K   | ]}j         |j        v V  d S r   )re   r   )r   nlr   s     rb   r   z<VariablesChecker._is_only_type_assignment.<locals>.<genexpr>  s@         I)     ra   c              3  8   K   | ]}j         |j         k    V  d S r   r   )r   anr   s     rb   r   z<VariablesChecker._is_only_type_assignment.<locals>.<genexpr>  s@         I(     ra   c              3  4   K   | ]}|j         j        u V  d S r   )r   r   )r   r  ref_nodes     rb   r   z<VariablesChecker._is_only_type_assignment.<locals>.<genexpr>	  s>        9<x44     ra   )rp   r   r  r   re   r  r&  r  r   r  r   r   r   r   r   r   rj  r   rn   ro   r   r  r  )
rA  r   r  defstmt_frame
node_framer   r   
inner_func
local_refsr$  s
    `       @rb   r  z)VariablesChecker._is_only_type_assignment  su    '5?33 	w} 	59*>> 	%BRIC
 C
 	 5T22ZZtZ,,
M00 +	)!<<>>L +99%:KLL 
! 
!
-     (77GG     !     (778HII    ! !55%,00B??J& ! ! !J. 8?T[3P E #8?EODD!,! x@@!     @D@S@S@U@U    ! !55!(FW M00 +	)X tra   r  r^  c                   |                      d          j        |k    r|                     d          |                      d          k    rt          j        |           r0t          j        |           st          j        dfS t          j        dfS t          | j        t          j                  r2t          | j        j        t          j                  rt          j        dfS t          j        |fS )zCheck if a first level method's annotation or default values
        refers to its own class, and return a consumer action.
        Trf  N)r   r   rr  r   "is_node_in_type_annotation_contextr   rX   r^   r_   rp   r   r   r   )r   r  r  s      rb   r  z/VariablesChecker._is_first_level_self_reference	  s     ::T:"")W4 	D :H :
 :
ZZtZ$$:% 	D
 7== B<TBB H7@$GG3:DAA$+uz22 Dz"EO8 8 D 4<dCC+2K@@ra   nodes.NamedExprdefnode_parentnodes.IfExpc                    t          j        |j                  }t          |t          j                  r,|j        du r| |j        k    rdS |j        du r| |j        k    rdS dS )z`Check if a NamedExpr is inside a side of if ... else that never
        gets evaluated.
        TF)	r   r   r  rp   r   r  r   r  r  )r  r,  inferred_tests      rb   r  z$VariablesChecker._is_never_evaluated/	  sx     ()<==mU[11 	"d* w.:O/O t"e+ >;N0N tura   c                z   |j         }|                    d                                          }|                     ||          }t	          j        ||          }|s|r|j                                        j        }n|j        }t          |t          j
                  s|o|                     ||           o||v  S )a  Return True if the node is in a local class scope, as an assignment.

        Detect if we are in a local class scope, as an assignment.
        For example, the following is fair game.

        class A:
           b = 1
           c = lambda b=b: b * b

        class B:
           tp = 1
           def func(self, arg: tp):
               ...
        class C:
           tp = 2
           def func(self, arg=tp):
               ...
        class C:
           class Tp:
               pass
           class D(Tp):
               ...
        Trf  )re   rr  r   r  r   r  r   rn   rp   r   r   r  )rA  r   re   r   r  in_ancestor_listframe_localss          rb   r  z$VariablesChecker._ignore_class_scope>	  s    0 yd++1133040T0T%1
 1
- !1%>>0 	(4D 	( <--//6LL <Lu~..W2W %99$FFF%$
 	
ra   astroid.Namec           	        d |                     |j                  d         D             }|                                t          t          j                  rt          fd|D                       rd S |r|d         j        |d                                         k    r |d         j        	                    |          sa|d         j
        sTt          |d         j        t          j                  s2|d                             d          	                    |          rg }n
|d d         }t          |dd                    D ]y\  }}||                             d          	                    |          r0t          j        ||                             d          |          sd|                    |           z|}t#          |          dk    rd S |d                                         }t          |t          j        t          j        t          j        f          r,|                    d          |                    d          usd S t          |t          j                  s|                     d|j        |           d S |j        D ]K}t          |t          j        t          j        t          j        t          j        f          r d S t          |t          j                  rt          |j        t          j                  rt          j        |j        j                   }t          |t          j!                  r|j"        rt          j        |j"                  }	t          |	t          j!                  r)|	#                                h tH          tJ          d	v r d S t          |	tL          j'                  r|	#                                d	k    r d S Mt          j(        |t          j)                  }
|
rnt          j(        |
t          j                  }|rMt          j(        |t          j*                  }|n+|j                                        u r|j        |j+        v rd S 	 tY          |j-        .                                          }t          |t^          j'                  r|#                                d
k    rx|j-        }t          |j-        t          j0                  r|j-        j1        }t          |t          j                  r,tY          |j2        d         .                                          }t          |t^          j'                  r|#                                tf          k    rd S t          j4        t          j5        t          j6        t          j7        t^          j8        j9        f}t          ||          s|                     d|j        |           d S tu          |dtu          |dg                     }|s|                     d|j        |           d S d S # t^          j;        $ r! |                     d|j        |           Y d S w xY w)Nc                2    g | ]}t          |d           |S )r   )hasattr)r   ss     rb   rI  z2VariablesChecker._loopvar_name.<locals>.<listcomp>i	  s'    TTT'!]:S:ST!TTTra   rY   c              3  f   K   | ]+}|                                                               V  ,d S r   )r   r   )r   asmtr   s     rb   r   z1VariablesChecker._loopvar_name.<locals>.<genexpr>r	  sJ       3
 3
.2DJJLL""5))3
 3
 3
 3
 3
 3
ra   r   Trf  r  r  ztyping._SpecialFormzbuiltins.enumerater  r   )<r   re   r   rp   r   r  r   r   r   r   is_statementr   rr  	enumerater   in_for_else_branchr   r   r   r   r  GeneratorExpr  r  r  r  r  r  r  r   r   r   r   r   r  qnamer   r   r   Instancer   r  rd  rn   r|   r   r   rl   r  r  r  BUILTIN_RANGEr)   r.   r(   r'   r  r@   r   r  )rA  r   astmts_astmtsr  rc   assign	else_stmtinferred_funcinferred_returnmaybe_walrusmaybe_comprehensionrk  r   likely_call	sequenceselementsr   s                    @rb   r  zVariablesChecker._loopvar_nameg	  st   TTT[[33A6TTT
 

 eU\** 	s 3
 3
 3
 3
6<3
 3
 3
 0
 0
 	 F 	! q	 F1INN$4$44	! 1I$..t44		! q	&	! "&)"2ELAA	! 1I''t'44>>tDD	! GGRaRjG ,, 	! 	!GAtay""$"//99  .vay/B/B$/B/O/OQUVV NN4    v;;! 	F&&((v	5+>@RSTT	   --T^^4^5P5PP	 F&%),, 	6TYTRRRF 	 	IEL%+u{ENS   )UZ00 Z6 6  !& 01E F F}e.?@@%- ',&6}7L&M&MO!'):  )//11 6(6%6 .6   #?ENCC+11337LL <T5?SS 	"'"Ge1# # # &+&K')A' '# ' '.4466%?	%8%?? F$	WFK--//00H 8W%566ANN$$(<<A %kfk5;77 3"(+"2Kk5:66 A#K$4Q$7$=$=$?$?@@H
 8W%566NN$$5
  

	)I h	22   !:QU VVVx7B1O1OPPH W  !:QU VVVVVW W/ % 	S 	S 	S6TYTRRRRRR	Ss   .CX' ',YYre   r   r   ri  rj  c                   |                      |          rd S t          |t          j                  rQdk    rKt	          |j        d                   dk    r-t          |j        d         d         t          j                  rd S t          |t          j        t          j        t          j	        f          r|rt          ||          rd S |v rd S | j        v rd S |                                }|v r|                     ||||           d S |j        rGt          |j        t          j        t          j        t          j        t          j        f          r|v rd S d x}}	t          |t          j        t          j	        f          rRt	          |j                  dk    r"t)          fd|j        D             d           }
n|j        d         }
|
r	|
\  }}	|	p|t+          ||                                          rd}nt          |t          j                  r)|	| d|	 }nd }|                     d||	           d S t          |t          j	                  r8|	| d
|j         d|	 }n d
|j         }|                     d||	           d S d}t          |t          j                  r	|j        rd S t5          j        |          rd S t          |j        t          j                  r?t;          fd|j                            t          j                  D                       rd S |                     ||	           d S )Nr  rY   r   c              3  $   K   | ]
}|v |V  d S r   r`   )r   r   re   s     rb   r   z4VariablesChecker._check_is_unused.<locals>.<genexpr>+
  s,      HH5$%-HHHHHHHra   r$   imported as import r  r   imported from  as r  c              3  .   K   | ]}|j         k    V  d S r   r   )r   ra  re   s     rb   r   z4VariablesChecker._check_is_unused.<locals>.<genexpr>N
  sB       D D#$$D D D D D Dra   ) rX  rp   r   r   r   rn   r   r   r   rq   r   r  argnames_check_unused_argumentsr   r   r  r.   r   r   r|   r   r   r  rk   r  r   is_overload_stubrs  r   r   r1  )rA  re   r   rc   r   ri  rj  rS  r>  r   import_namesmessage_namemsgs    `           rb   rg  z!VariablesChecker._check_is_unused	  s      t,, 	F tU.//	#	 DK,--2	 4;{3A6GG		 F dU\5<9IJKK 	  6t\ J J  -- 	F 4.. 	F==??8 6	A((tT8^TTTTT{ zelEOU[%)T     >) F!!EF$u/? @AA 
+tz??Q& 1#'HHHHDJHHH$$ $LL $(:a=L +$0ME6!?UD*4>> 19dEL11  /!&==V==...$$_3T$JJJFdE$455  E!&QQt|QQQQ!%DDdlDD$$_3T$JJJF0$ 122 t  %d++  $+u':;;  D D D D(,(B(B5:(N(ND D D A A  \4@@@@@ra   &re.Pattern[str] | re.Match[str] | Nonec                    | j         j        j        }t          |t          j                  rt          |j        t          j                  st          |t          j                  r| j         j        j        }n|}|o|	                    |          S r   )
r  r&  dummy_variables_rgxrp   r   r   r   r   ignored_argument_namesmatch)rA  rc   re   authorized_rgxregexs        rb   rX  z!VariablesChecker._is_name_ignoredU
  s     +?tU-..	#4;88	# $00	#
 &*[%7%NEE"E *T***ra   rS  	list[str]c                                                    }j                            d          }|r=t          |t          j                  r#t          j        |          rt          nt          }nt          }|rfj        dk    r||d         k    rd S t          |j                  }	|	||	                                v rd S j        t          j        v rj        dvrd S t!          fd| j        j        j        D                       rd S t          j                  rd S t          j                  rd S t          j        |          rd S ||v rd S |                     d|||           d S )	NTrf  r  r   )rB  __new__c              3     K   | ]8}j                             |          pj                             |          V  9d S r   )re   r   r  )r   cbr   s     rb   r   z;VariablesChecker._check_unused_arguments.<locals>.<genexpr>
  s\       
 
 I  $$>	(:(:2(>(>
 
 
 
 
 
ra   r  r  )rb  r   r   rp   r   r   r   has_known_basesr   r   r   r  r   re   rS  	PYMETHODSr   r  r&  r  (is_registered_in_singledispatch_functionrU  is_protocol_classr  )
rA  re   r   rc   rS  ri  rb  rw   r  
overriddens
     `       rb   rT  z(VariablesChecker._check_unused_argumentsf
  s    NN$$	!!!.. 	E5>:: 	"2599P		?P J J 	yN* tx{/B *5$)<<J $*2E2E2G2G*G yEO+ 	 B 1   
 
 
 
k(2
 
 
 
 
 	 F9$?? 	F !$'' 	F "5)) 	F>! 	F*DZXXXXXra   c                   | j                             d          sdS |                    d          }t          j        ||          r|j                            d          }t          |t          j        t          j	        f          r|j
        |j        v rdS |                    |j
                  \  }}|r|                    |          sdS t          j        |          r|                     d||j
                   dS |d         }|}|rCt          |t          j                  s)||u rdS |j        }|rt          |t          j                  )|r}|                    |          rjt          j        |          sX|j        rSt          |                    d          t          j                  s'|                     d||j
                   dS dS dS dS dS dS )a:  Check whether node is a cell var that is assigned within a containing loop.

        Special cases where we don't care about the error:
        1. When the node's function is immediately called, e.g. (lambda: i)()
        2. When the node's function is returned from within the loop, e.g. return lambda: i
        r#  NTrf  r   r  r   )r  rV  r   r   r  r   rp   r   r  r   re   rn   r   r   is_comprehensionr  r   is_being_calledrr  r  )rA  r   
node_scopeassign_scoper   assignment_node	maybe_fors          rb   r  z,VariablesChecker._check_late_binding_closure
  sD    {--.BCC 	FZZtZ,,
 $T:66 	>#*000==J :e6G'HII	yJ--	 F"kk$)44e 	L22:>> 	F!,// 	V149MMMMM $AhO'I VJy%)$D$D V, E%,	  VJy%)$D$D V V!++J77V "1*==V #)	V
 'z';';4';'H'H%,WWV $$%949$UUUUUV V V V V V V V V Vra   c                j    t          |t          j                  sdS |j        | j        j        j        v S r  )rp   r   rq   rk   r  r&  redefining_builtins_modules)rA  rc   s     rb   r  z1VariablesChecker._should_ignore_redefined_builtin
  s1    $ 011 	5|t{1MMMra   c                (    || j         j        j        v S r   )r  r&  allowed_redefined_builtins)rA  re   s     rb   rY  z+VariablesChecker._allowed_redefined_builtin
  s    t{)DDDra   c                    t          j        | t          j                  }|duo(|                     d                              |          S )z]Return True if a ComprehensionScope intervenes between `node` and its
        frame.
        NTrf  )r   r   r   rd  r   r   )r   closest_comprehension_scopes     rb   r{  z6VariablesChecker._comprehension_between_frame_and_node
  sZ    
 ',&K%*'
 '
# +$6 14:: <F <
 <

)/
0
0	1ra   type_annotationc                   t          |t          j                  r!| j                            |j                   dS t          |t          j                  r|                     |j                   dS t          |t          j	                  sdS t          |j
        t          j                  r_t          |j
        j        t          j                  r;|j
        j        j        t          k    r!| j                            t                     dS | j                            d |                    t          j                  D                        dS )z?Given a type annotation, store all the name nodes it refers to.Nc              3  $   K   | ]}|j         V  d S r   r   )r   r  s     rb   r   z?VariablesChecker._store_type_annotation_node.<locals>.<genexpr>
  s5       +
 +
 *JO+
 +
 +
 +
 +
 +
ra   )rp   r   r1  r  r   re   r2  r_  r3  	Subscriptr   TYPING_MODULEextendr   )rA  rx  s     rb   r_  z,VariablesChecker._store_type_annotation_node
  s8   ouz22 	'../CDDDFou77 	,,_-ABBBF/5?;; 	F ,eo>>	?05uzBB	  %*/=@	
 '..}===F#** +
 +
.=.L.LUZ.X.X+
 +
 +
 	
 	
 	
 	
 	
ra   %nodes.For | nodes.Assign | nodes.Withc                P    |j         }|sd S |                     |j                    d S r   )rx  r_  )rA  r   rx  s      rb   r  z-VariablesChecker._store_type_annotation_names
  s6     . 	F(()=>>>>>ra   c                   t                      }|j        D ]u}t          |t          j                  r|                    |j                   7t          |t          j                  r$|                    d |j	        D                        v|
                                }t          d |j        D                       }|r+|
                                j        
                                }t          |t          j                  r*|                                rd|                                vsdS |                                }|sdS |d         }||v r|                     d||f           dS dS )z'Check that self/cls don't get assigned.c              3  X   K   | ]%}t          |t          j                  |j        V  &d S r   )rp   r   r   re   r  s     rb   r   z:VariablesChecker._check_self_cls_assign.<locals>.<genexpr>	  sJ       $ $!$z#uGW7X7X$H$ $ $ $ $ $ra   c              3  N   K   | ] }t          |t          j                  |V  !d S r   )rp   r   rj  )r   rl  s     rb   r   z:VariablesChecker._check_self_cls_assign.<locals>.<genexpr>  sG       '
 '
Zu~-N-N'
'
 '
 '
 '
 '
 '
ra   zbuiltins.staticmethodNr   r%  rk  )r   rw  rp   r   r   r  re   r.   updater  r   r   r  r   r   rb  decoratornamesrS  r  )rA  r   assign_namesrx  r   nonlocals_with_same_nameargument_namesself_cls_names           rb   r  z'VariablesChecker._check_self_cls_assign  s   (+l 	 	F&%"233   ----FEK00 ## $ $(.$ $ $    

#& '
 '
$z'
 '
 '
 $
 $
  $ 	0JJLL'--//E ue/00	!!	 (u/C/C/E/EE	
 F)) 	F&q)L( 	V2]DTUUUUU	V 	Vra   r   r   rw  c                R   t          j        |          rdS t          j        |          rdS |t          j        u rdS t          |j        t          j                  r;t          |j	        t          j
                  r|j	        j        |j        j        k    rdS |                     |          }t          ||          }|=t          |          t          |          k    r|                     |||||           dS dS t          j        |          s|                     ||           dS dS )zRCheck for unbalanced tuple unpacking
        and unpacking non sequences.
        N)r   is_inside_abstract_classrl  rl   Uninferablerp   r   r   r   r   r1  re   varargr  r   r   r  is_iterable_report_unpacking_non_sequence)rA  r   r   rw  r   r  s         rb   r  z!VariablesChecker._check_unpacking   sK    )$// 	F!$'' 	Fw** 	Fx88	4:uz22	 
8?#99	 F &&x00+D(;; 	?7||s6{{* 11(GVW     
 "8,, 	?//g>>>>>	? 	?ra   rd  c                P   t          | t          j        t          j        ft          z             r|                                 S t          | t          j                  rIt          d | 	                                D                       rd | 
                                D             S dS )z/Return the list of values of the `Assign` node.c              3  F   K   | ]}|                                 d k    V  dS )ztyping.NamedTupleN)r>  )r   r  s     rb   r   z4VariablesChecker._nodes_to_unpack.<locals>.<genexpr>F  sC       6
 6
8@HNN 336
 6
 6
 6
 6
 6
ra   c                F    g | ]}t          |t          j                  |S r`   )rp   r   r   r  s     rb   rI  z5VariablesChecker._nodes_to_unpack.<locals>.<listcomp>I  s*    PPP!
1e>N0O0OPAPPPra   N)rp   r   r.   r)   r   r  rl   r?  r   	ancestorsr   rp  s    rb   r  z!VariablesChecker._nodes_to_unpackA  s     dU[%*5
BCC 	!;;== dG,-- 	Q# 6
 6
DHNNDTDT6
 6
 6
 3
 3
 	Q QPt{{}}PPPPtra   r   r  c                
   |t          |          t          |          dk    rdndt          |          t          |          dk    rdndf}t          |t                    rdnd}|                     |||t                     d S )NrY   r   r7  r'  r  )r   r  r  )r   rp   r   r  r   )rA  r   r   rw  r   r  r  symbols           rb   r  z-VariablesChecker._report_unbalanced_unpackingL  s     LLg,,!#,BBKKf++"+BB
 (J//.''- 	
 	d)LLLLLra   c                n    |r|                     d          sd| }|                     d||           d S )N r!  rk  )r   r  )rA  r   r  s      rb   r  z/VariablesChecker._report_unpacking_non_sequencec  sL     	$7--c22 	$#'mmG17KKKKKra   _base_nodes.ImportNoders   module_namesnodes.Module | Nonec                X   |r|                     d          }|dk    rd}n	 t          |                    |          d                                                   }t	          |t
          j                  sdS nW# t          j        $ r4 |j	        | j
        v rY dS |                     d||j	        f|           Y dS t          j        $ r Y dS w xY w||r:|r|j	        nd}|                     d|d                    |          |f           dS t	          |t
          j                  r|S dS )zCheck that module_names (list of string) are accessible through the
        given module, if the latest access name corresponds to a module, return it.
        r   __dict__Nr  r  r   rk  )r#  r|   r   r   rp   r   r   rl   rs  re   r  r  r  rN  )rA  r   rs   r  re   rk   s         rb   r  z$VariablesChecker._check_module_attrsh  s     	##A&&Dz! fnnT2215;;==>>!&%,77  4 (   ;$"77  44  'tV[.A !    tt)   tt!  	$  	%+;fkkG#$chh|6L6Lg5V     4fel++ 	Mts   AA9 9CC;CCr   r   c                l   t          |                    d                    }|t          j        u rd S |                                dvr)|j        |j        }}|                     d|||           d S t          |dd          D ]}	 t          |	                                          }n# t          j
        $ r Y 7w xY w|t          j        u rJ|j        sRt          |t          j                  rt          |j        t                     s+|                     d|                                |           |j        }||v r||= ||j        vr|j        s|                     d	|f|           t(          j                            |j                  d
         }t(          j                            |          dk    rx|j        dz   |z   }		 t          j                            |	                    d                     y# t:          $ r |                     d	|f|           Y t<          $ r Y w xY wd S )Nr!  >   builtins.listbuiltins.tupler  )r[  r  r   r  r`   r  r  r  r   rB  r   )r|   igetattrrl   r  pytypetolinenor  r  r   r   r  r   rp   r   r  r   rf   r   rn   r(  ospathsplitextr  basenamere   modutilsfile_from_modpathr  ImportErrorSyntaxError)
rA  r   r   assignedr[  colr  elt_namer  re   s
             rb   r$  zVariablesChecker._check_all  s    i0011w** 	F  $GG 	 )8+>#D1SWXXXF8VR00 )	! )	!C		,,)   7.. ? h44 J= =    !5CMMOORU VVV~H<'  *t{* !| !$$0{ %      "w//	::1=Hw''11Z? !#y39
!#,>>tzz#OOOO*    ,, 8{QT -       + ! ! ! !D	!K)	! )	!s*   !B))B;:B;2G<<#H/"	H/.H/dict[str, nodes.NodeNG]c                    | j         rd S |                                D ]#\  }}|D ]}|                     d|f|           $d S )Nr  r  )r  r   r  )rA  r   re   node_lstr   s        rb   r%  zVariablesChecker._check_globals  sw    . 	F*0022 	M 	MND(  M M  !2$t LLLLM	M 	Mra   c                R   t          |          }t                      }t          j        t                    }|D ]\  }}|j        D ]}|d         x}}	|	dk    r|}|d         }
||v r"|||
fvr)|                    |           |	| j        v p|
| j        v }t          |t          j
                  s!t          |t          j                  r~|j        swt          |t          j                  rt                              |	          r|r|
dk    r|
d|	 }n|	 d|
 }t          |          s|                     d||           t          |t          j                  r|j        t"          k    rt                              |	          rHt%          ||          rZ|r^|	dk    r$||j        |f                             |           |
|	 d	|j         }n|	 d	|j         d
|
 }t          |          s|                     d||           ϐ|                                D ]y\  }}t+          |          dk    r	|d         }n2d                    d |d d         D                        d|d          }|                     d||d         f|d                    z| `d S )Nr   r   rY   r;  rO  rN  r  r  rP  rQ  rL  c              3     K   | ]}|V  d S r   r`   r  s     rb   r   z2VariablesChecker._check_imports.<locals>.<genexpr>  s"       = =q = = = = = =ra   r   z and r  )r   r   r=  r   r>  r   r  r  rp   r   r   rq   rk   SPECIAL_OBJsearchr   r  rr   ru   r   r   r   rN  r  )rA  r   local_namescheckedunused_wildcard_importsre   rc   r   	real_nameimported_nameas_nameis_type_annotation_importrX  rs   unused_list
arg_strings                   rb   r)  zVariablesChecker._check_imports  s   &|44%% #D)) 	  & =	S =	SJD$: <S <S,3AJ6	M C' % $I!!*' 	733 I&&& "T%@@ >$"== * dEL11 -StU%566-S?C|-S "$(899 !k>P>P%? ? !
 !0 ! #~ !  G777!.FFWFF1$77 O((s(NNNe&677 SDLF<R S"))-88 ! !-dD99 ! !0 ! $+ S/t0DELLTRRRR" _%2"Q"Q4<"Q"QCC%2"^"^4<"^"^U\"^"^C5d;; S ,,_3T,RRRy<S~ $;#@#@#B#B 		 		FK;1$ (^

 yy = =K,< = = ===UUKPROUU  (
F1I/FVTUY      ra    nodes.Module | nodes.FunctionDefc                    g }|                                 D ]E}t          |t          j                  r)|                    |                     ||                     F|D ]\  }}|                    |d           dS )z,Update consumption analysis for metaclasses.N)ry  rp   r   r   r}  _check_classdef_metaclassesr#  )rA  r   r3  
child_nodescope_localsre   s         rb   r"  z#VariablesChecker._check_metaclasses  s    DF++-- 	T 	TJ*en55 T @ @T R RSSS #+ 	) 	)L$T4((((	) 	)ra   rw   r  /list[tuple[dict[str, list[nodes.NodeNG]], str]]c                   |j         sg S g }|                                }d}t          |j         t          j                  r|j         j        }nt          |j         t          j                  r[|j         j        rO|j         j        }t          |t          j                  s!|j        }t          |t          j                  !|j        }npt          |j         t          j                  r6t          |j         j	        t          j                  r|j         j	        j        }n|r|
                                j        }d}t                              ||          }|r| j        d d d         D ]M\  }}	}	}	|                    |g           }
|
D ]-}|j        |j        k    r|                    ||f           d} n.N|j                            |g           }|D ]}|j        |j        k    rd} n|sU|sS|t          j        j        v s@t'          j        |          s,|| j        j        j        v s|                     d||f           |S )Nr   Fr   Tr   rk  )
_metaclass	metaclassrp   r   r1  re   r2  r3  r   r   r   METACLASS_NAME_TRANSFORMSro   r  r   r   rn   r   r  r   r  r  r&  r  r  )rA  rw   r  r3  r  re   attrfoundr  r;  r  
found_nodenodes_in_parent_scopefound_node_parents                 rb   r  z,VariablesChecker._check_classdef_metaclasses)  s     	IDFOO%%	e&
33 	)#(DD(%/:: 
	)u?O?T 
	)#(D uz22 !y !uz22 !9DD(%*55 	)*!5:;
 ;
 	) #(-DD 	)>>##(D(,,T488 	)-)9$$B$)?  %aA*..tR88"-  J!(EL8  t(<=== $
 %0$6$:$:4$D$D!%:  !$+u|;  EE 		M		M 00			M
 #D))		M 4;-AA		M 1TGLLLra   nodes.Subscriptc                d    t          j        |j                  }|                     ||           d S r   )r   r   slice_check_potential_index_errorrA  r   inferred_slices      rb   visit_subscriptz VariablesChecker.visit_subscript_  s0    )$*55))$?????ra   r  nodes.NodeNG | Nonec                P   t          |t          j                  rt          |j        t                    sdS t          |j        t          j        t          j        f          rDt          |j        j                  |j        dz   k     r| 	                    d|t                     dS dS )z,Check for the potential-index-error message.NrY   r&  )r   r  )rp   r   r  r   intr.   r)   r   r  r  r   r  s      rb   r  z-VariablesChecker._check_potential_index_errord  s    
 .%+66 	j #?
 ?
 	 F dj5;
";<< 	4:?##n&:Q&>>   +$9 !    F	 	ra   nodes.Constc                   |                                 dk    rdS t          j        |          sdS |j        }t	          |t
          j                  r|j        }t	          |t
          j                  r;t          |	                                d          }|t          j
        |d          rdS 	 t          |j                  }|                     |           dS # t          $ r Y dS t          j        $ r Y dS w xY w)zTake note of names that appear inside string literal type annotations
        unless the string is a parameter to `typing.Literal` or `typing.Annotation`.
        zbuiltins.strN)	AnnotatedLiteral)r  r   r*  r   rp   r   r.   r{  r|   ry  is_typing_memberr   r   r_  
ValueErrorrl   AstroidSyntaxError)rA  r   r   originr  s        rb   visit_constzVariablesChecker.visit_constw  s    ;;==N* 	F7== 	F fek** 	#]Ffeo.. 	&--//66F e&<0' '  	%dj11J,,Z88888 	 	 	DD) 	 	 	DD	s   /)C 
C9'C98C9r  r"   rg   r:  )r   r  rg   r:  )r   r  rg   r:  )r   r+  rg   r:  )r   r7  rg   r:  )r;  r7  rg   r:  )r   rA  rg   r:  )r;  rA  rg   r:  )r   rH  rg   r:  )r;  rH  rg   r:  )r   rM  rg   r:  )r;  rM  rg   r:  )r   r   rg   r:  )r   rn  rg   r:  )r   r}  rg   r:  )r   r  rg   r:  )r   r  rg   r:  )r   r  rg   r:  )r   r   rc   r   rg   r:  )r   r   r5  r9  r  r   rg   r   )r   r   rc   r   r   rx   r  r9  r  rf   rg   r  )r   r   rg   r:  )r   rd   rg   r:  )r   r   rg   r:  )r   r  rg   r:  )r;  r  rg   r:  )r   r  rg   r:  )r   r  rg   r:  )rg   r   )rg   r  )r   r   r   r   rg   r   )r   r   r  r   rc   r  r  r  r   rx   r   rx   r  rf   r  r   rg   r  )r  r  rg   r   )r   r   r  r  rg   r   )r   r   r  r+  r  r^  rg   r  )r  r+  r,  r-  rg   r   )r   r   rg   r   )r   r3  rg   r:  )re   rf   r   r   rc   r   r   r   ri  r  rj  r  rg   r:  )rc   r   re   rf   rg   rY  )re   rf   r   r   rc   r   rS  r`  ri  r  rg   r:  )r   r   rg   r:  )rc   r   rg   r   )re   rf   rg   r   )r   r   rg   r   )rx  r   rg   r:  )r   r~  rg   r:  )r   r   r   r   rw  r^  rg   r:  )r   r   rg   rd  )r   r   r   r   rw  r^  r   r^  r  rf   rg   r:  )r   r   r  rf   rg   r:  )r   r  rs   r  r  r`  rg   r  )r   r  r   r   rg   r:  )r   r  rg   r:  )r   r   rg   r:  )r   r  rg   r:  )rw   r+  r  r  rg   r  )r   r  rg   r:  )r   r  r  r  rg   r:  )r   r  rg   r:  )UrZ   r[   r\   r]   re   r/  msgsIGNORED_ARGUMENT_NAMESoptionsrB  r   only_required_for_messagesr  r  r  r*  r/  r6  r:  r?  rD  rG  rJ  rL  rO  rQ  r\  rm  visit_asyncfunctiondefleave_asyncfunctiondefr|  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  rg  rX  rT  r  r  rY  r{  r_  r  r  r  r  r  r  r  r$  r%  r)  r"  r  r  r  r  __classcell__)r  s   @rb   rz  rz  r  s	       	 	 DD  %"	 		
 "X %<	 		
 "3!	 
	
 )(1	 
	
 * 3. 	
" %1 %T	 	
 ,%a	 	
 )3B	 	
[VGp3 3 3 3 3 3 &U%# X X X X@0 0 0 0P P P P &U%  	 	) ) )	 	)(> > > >   (? ? ? ?   
F F F F   
F F F F   
F F F F   
&L &L &L &LP, , , ,\ /.%U%#&  5< 5< 5< 5<n" " " "   ! ! ! ! &U%&<==C C C >=C &U%&<==/ / / >=/
.N .N .N .N`% % % %PHA HA HA HAT &U%&9::> > > ;:>* &U%&9::D D D ;:D0 &U%$ #	    ,F F F F   
0 0 0 00 0 0 09 9 9 9
 @ @ @ _@ 2 2 2 _2 F F F _F 5 5 5 \52    \8 |L |L |L \|L| "
 "
 "
 \"
H< < < <| A A A \A,    \&
 &
 &
 &
RNW NW NW NWb[A [A [A [Az+ + + +"3Y 3Y 3Y 3Yj0V 0V 0V 0VdN N N N
E E E E 	1 	1 	1 \	1
 
 
 
2? ? ? ?V V V V<? ? ? ?B    \M M M M.L L L L
# # # #J3! 3! 3! 3!jM M M MP P P Pd) ) ) )4 4 4 4l@ @ @ @
   & &U%   	     ra   rz  r  r"   r:  c                J    |                      t          |                      d S r   )register_checkerrz  )r  s    rb   registerr    s%    
,V4455555ra   )rc   rd   re   rf   rg   rh   )rw   rx   re   ry   rg   rz   )r   r   r   r   rg   rf   )r   r   r   rx   r   rx   rg   r   )r   r   re   rf   rg   r   )r   r   rg   r   )re   rf   r   rx   rg   r   )rc   r   r   r   rg   r   )r   r   rg   r   )r   r   rg   r   )rc   r   r   r   rg   r   r  )^r]   r#   r   r=  r<  r   r  resysr   collections.abcr   r   r   enumr   	functoolsr	   r&   r
   r   r   rl   r   r   r   astroid.nodesr   astroid.typingr   pylint.checkersr   r   pylint.checkers.utilsr   r   pylint.constantsr   r   r   pylint.interfacesr   r   r   r   pylint.typingr   version_infor    astroid.decoratorsr!   pylint.lintr"   compiler  rr   r  r  r@  r|  	frozensetTYPING_NAMESr  
DictValuesDictKeysr  node_classesr(   r   r   r  r   r  r  r  r  rX   ru   r   r   r   r   r   r   r   r   r   r   r/  r7  r1  r9  rz  r  r`   ra   rb   <module>r     s;  
 * ) ) " " " " " "          				 				 



 # # # # # # 9 9 9 9 9 9 9 9 9 9             1 1 1 1 1 1 1 1 1 1  . . . . . . . . . . % % % % % % * * * * * * . . . . . . . .        F E E E E E E E E E N N N N N N N N N N N N 0 0 0 0 0 0v E)))))))DDDDDD %$$$$$$bj+,,	#$<==  '.  y6 6 68 8v OOOM#	
 
L	O	O	J	L	K 	 	 	 	 	$ 	 	 	
 
 
 
 4   &   .O* O* O* O*d- - - -+@ +@ +@ +@\   ,   6 6 6 6      $O+ O+  O+  O+(  )O+2  3O+<  =O+F  GO+R  SO+^  _O+l  mO+x  yO+B  CO+L  MO+V  WO+b  cO+l  mO+v  wO+F	-$H	BCD 	0 U	>?@	SO+ O+ O+ O O O Od    J   A	 A	 A	 A	 A	 A	 A	 A	Je  e  e  e  e { e  e  e PA6 6 6 6 6 6ra   