
    X-Ph	d                       d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4 d d	l5m6Z6 d d
l7m8Z8m9Z9m:Z:  G d d          Z; G d d          Z< G d de          Z= G d d          Z> G d d          Z? G d d          Z@ G d de6          ZAdS )    )annotations)Enum)checker
errorcodes)MessageBuilder)#
AssertStmtAssignmentExprAssignmentStmt	BreakStmtClassDefContextContinueStmtDictionaryComprehension
ExpressionExpressionStmtForStmtFuncDefFuncItemGeneratorExpr
GlobalDeclIfStmtImport
ImportFrom
LambdaExprListExprLvalue	MatchStmtMypyFileNameExprNonlocalDecl	RaiseStmt
ReturnStmtStarExprSymbolTableTryStmt	TupleExprTypeAliasStmt	WhileStmtWithStmtimplicit_module_attrs)Options)	AsPatternStarredPattern)ALWAYS_TRUEinfer_pattern_value)ExtendedTraverserVisitor)TypeUninhabitedTypeget_proper_typec                  *    e Zd ZdZ	 	 	 dddZddZdS )BranchStatea=  BranchState contains information about variable definition at the end of a branching statement.
    `if` and `match` are examples of branching statements.

    `may_be_defined` contains variables that were defined in only some branches.
    `must_be_defined` contains variables that were defined in all branches.
    NFmust_be_definedset[str] | Nonemay_be_definedskippedboolreturnNonec                    |t                      }|t                      }t          |          | _        t          |          | _        || _        d S N)setr8   r6   r9   )selfr6   r8   r9   s       V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/partially_defined.py__init__zBranchState.__init__;   sM     ! UUN"!eeO!.11"?33    c                x    t          t          | j                  t          | j                  | j                  S )Nr6   r8   r9   )r5   r?   r6   r8   r9   r@   s    rA   copyzBranchState.copyJ   s:     455t233L
 
 
 	
rC   )NNF)r6   r7   r8   r7   r9   r:   r;   r<   r;   r5   )__name__
__module____qualname____doc__rB   rG    rC   rA   r5   r5   3   sV          ,0*.	    
 
 
 
 
 
rC   r5   c                  h    e Zd ZdddZddZddZddZddZddZddZ	ddZ
ddZddZddZdS )BranchStatementNinitial_stateBranchState | Noner;   r<   c                    |t                      }|| _        t          | j        j        | j        j                  g| _        d S N)r6   r8   )r5   rP   r6   r8   branches)r@   rP   s     rA   rB   zBranchStatement.__init__S   sJ     'MMM* $ 2 B#1@  ,
rC   c                Z    t          | j                  }d | j        D             |_        |S )Nc                6    g | ]}|                                 S rM   rG   .0bs     rA   
<listcomp>z(BranchStatement.copy.<locals>.<listcomp>`   s     ;;;16688;;;rC   )rO   rP   rT   r@   results     rA   rG   zBranchStatement.copy^   s.     !344;;T];;;rC   c                    | j                             t          | j        j        | j        j                             d S rS   )rT   appendr5   rP   r6   r8   rF   s    rA   next_branchzBranchStatement.next_branchc   sJ     $ 2 B#1@  	
 	
 	
 	
 	
rC   namestrc                    t          | j                  dk    sJ | j        d         j                            |           | j        d         j                            |           d S Nr   )lenrT   r6   addr8   discardr@   ra   s     rA   record_definitionz!BranchStatement.record_definitionk   s_    4=!!A%%%%b)--d333b(0066666rC   c                    t          | j                  dk    sJ | j        d         j                            |           | j        d         j                            |           d S rd   )rf   rT   r6   rh   r8   ri   s     rA   
delete_varzBranchStatement.delete_varp   s_    4=!!A%%%%b)11$777b(0066666rC   stater5   c                .   t          | j                  dk    sJ | j        d         }|j        r	d|_        d S |j                            |j                   |j                            |j                   |j                            |j                   d S )Nr   re   T)rf   rT   r9   r6   updater8   difference_update)r@   rm   current_branchs      rA   record_nested_branchz$BranchStatement.record_nested_branchu   s    4=!!A%%%%r*= 	%)N"F&--e.CDDD%,,U-ABBB%778VWWWWWrC   c                ^    t          | j                  dk    sJ d| j        d         _        d S )Nr   Tre   )rf   rT   r9   rF   s    rA   skip_branchzBranchStatement.skip_branch   s2    4=!!A%%%%$(b!!!rC   r:   c                ^    t          | j                  dk    sJ || j        d         j        v S rd   )rf   rT   r8   ri   s     rA   is_possibly_undefinedz%BranchStatement.is_possibly_undefined   s2    4=!!A%%%%t}R(777rC   c                t    t          | j                  dk    sJ | j        d         }||j        vo||j        vS rd   )rf   rT   r8   r6   )r@   ra   branchs      rA   is_undefinedzBranchStatement.is_undefined   sD    4=!!A%%%%r"600WTAW5WWrC   c                x    t          | j                  dk    sJ | j        D ]}||j        v s	||j        v r dS dS )Nr   TF)rf   rT   r6   r8   )r@   ra   rZ   s      rA   is_defined_in_a_branchz&BranchStatement.is_defined_in_a_branch   s[    4=!!A%%%% 	 	Aq(((DA4D,D,Dtt -EurC   c                   t                      }| j        D ]6}|                    |j                   |                    |j                   7d | j        D             }|r5|d         j        }|dd          D ]}|                    |j                   nt                      }|                    |          }t          ||t          |          dk              S )Nc                     g | ]}|j         	|S rM   )r9   rX   s     rA   r[   z(BranchStatement.done.<locals>.<listcomp>   s    JJJa	JJJJrC   r      rE   )	r?   rT   ro   r8   r6   intersection_update
differencer5   rf   )r@   all_varsrZ   non_skipped_branchesr6   r8   s         rA   donezBranchStatement.done   s     55 	/ 	/AOOA,---OOA-....JJ4=JJJ 	$215EO)!""- G G33A4EFFFFG "eeO ",,_==+),--2
 
 
 	
rC   r>   )rP   rQ   r;   r<   )r;   rO   r;   r<   ra   rb   r;   r<   )rm   r5   r;   r<   ra   rb   r;   r:   rH   )rI   rJ   rK   rB   rG   r`   rj   rl   rr   rt   rv   ry   r{   r   rM   rC   rA   rO   rO   R   s        	
 	
 	
 	
 	
   

 
 
 
7 7 7 7
7 7 7 7
X X X X) ) ) )8 8 8 8X X X X
   
 
 
 
 
 
rC   rO   c                      e Zd ZdZdZdZdZdS )	ScopeTyper~            N)rI   rJ   rK   GlobalClassFunc	GeneratorrM   rC   rA   r   r      s"        FEDIIIrC   r   c                  .    e Zd ZddZddZddZddZdS )Scopestmtslist[BranchStatement]
scope_typer   r;   r<   c                0    || _         || _        i | _        d S r>   )branch_stmtsr   undefined_refs)r@   r   r   s      rA   rB   zScope.__init__   s    38$8:rC   c                    t          d | j        D             | j                  }| j                                        |_        |S )Nc                6    g | ]}|                                 S rM   rW   rY   ss     rA   r[   zScope.copy.<locals>.<listcomp>   s     <<<Q<<<rC   )r   r   r   r   rG   r\   s     rA   rG   z
Scope.copy   sA    <<$*;<<<doNN $ 3 8 8 : :rC   or   c                    |j         | j        vrt                      | j        |j         <   | j        |j                                      |           d S r>   )ra   r   r?   rg   r@   r   s     rA   record_undefined_refzScope.record_undefined_ref   sI    6,,,*-%%D'AF#''*****rC   ra   rb   set[NameExpr]c                P    | j                             |t                                S r>   )r   popr?   ri   s     rA   pop_undefined_refzScope.pop_undefined_ref   s    "&&tSUU333rC   N)r   r   r   r   r;   r<   r;   r   r   r   r;   r<   ra   rb   r;   r   )rI   rJ   rK   rB   rG   r   r   rM   rC   rA   r   r      sd        ; ; ; ;
   
+ + + +
4 4 4 4 4 4rC   r   c                      e Zd ZdZddZd dZd!dZd"d
ZddZd#dZ	ddZ
ddZddZddZd$dZd$dZd%dZd&dZd'dZd'dZd'dZdS )(DefinedVariableTrackerzUDefinedVariableTracker manages the state and scope for the UndefinedVariablesVisitor.r;   r<   c                n    t          t                      gt          j                  g| _        d| _        d S NF)r   rO   r   r   scopesdisable_branch_skiprF   s    rA   rB   zDefinedVariableTracker.__init__   s2    $)?+<+<*=y?O$P$P#Q $)   rC   c                f    t                      }d | j        D             |_        | j        |_        |S )Nc                6    g | ]}|                                 S rM   rW   r   s     rA   r[   z/DefinedVariableTracker.copy.<locals>.<listcomp>   s     777a777rC   )r   r   r   r\   s     rA   rG   zDefinedVariableTracker.copy   s4    '))774;777%)%="rC   r   c                P    t          | j                  dk    sJ | j        d         S rd   )rf   r   rF   s    rA   _scopezDefinedVariableTracker._scope   s)    4;!####{2rC   r   r   c                B   t          |                                 j                  dk    sJ d }|t          j        k    r*|                                 j        d         j        d         }| j                            t          t          |          g|                     d S rd   )
rf   r   r   r   r   rT   r   r_   r   rO   )r@   r   rP   s      rA   enter_scopez"DefinedVariableTracker.enter_scope   s    4;;==-..2222,,, KKMM6r:CBGM5/-"@"@!A:NNOOOOOrC   c                8    | j                                          d S r>   )r   r   rF   s    rA   
exit_scopez!DefinedVariableTracker.exit_scope   s    rC   r:   c                <    |                                  j        |k    S r>   )r   r   )r@   r   s     rA   in_scopezDefinedVariableTracker.in_scope   s    {{}}':55rC   c                    t          |                                 j                  dk    sJ |                                 j                            t	          |                                 j        d         j        d                              d S rd   )rf   r   r   r_   rO   rT   rF   s    rA   start_branch_statementz-DefinedVariableTracker.start_branch_statement   sv    4;;==-..2222"))DKKMM6r:CBGHH	
 	
 	
 	
 	
rC   c                    t          |                                 j                  dk    sJ |                                 j        d                                          d S Nr~   re   )rf   r   r   r`   rF   s    rA   r`   z"DefinedVariableTracker.next_branch   sN    4;;==-..2222"2&2244444rC   c                <   t          |                                 j                  dk    sJ |                                 j                                                                        }|                                 j        d                             |           d S r   )rf   r   r   r   r   rr   r\   s     rA   end_branch_statementz+DefinedVariableTracker.end_branch_statement   sx    4;;==-..2222+//116688"2&;;FCCCCCrC   c                    t          |                                 j                  dk    r:| j        s5|                                 j        d                                          d S d S d S r   )rf   r   r   r   rt   rF   s    rA   rt   z"DefinedVariableTracker.skip_branch   s^    t{{}})**Q..t7O.KKMM&r*6688888 /...rC   ra   rb   c                    t          | j                  dk    sJ t          | j        d         j                  dk    sJ |                                 j        d                             |           d S rd   )rf   r   r   r   rj   ri   s     rA   rj   z(DefinedVariableTracker.record_definition   si    4;!####4;r?/0014444"2&88>>>>>rC   c                    t          | j                  dk    sJ t          | j        d         j                  dk    sJ |                                 j        d                             |           d S rd   )rf   r   r   r   rl   ri   s     rA   rl   z!DefinedVariableTracker.delete_var  si    4;!####4;r?/0014444"2&11$77777rC   r   r   c                    t          | j                  dk    sJ |                                                     |           dS )zURecords an undefined reference. These can later be retrieved via `pop_undefined_ref`.r   N)rf   r   r   r   r   s     rA   r   z+DefinedVariableTracker.record_undefined_ref  s?    4;!####**1-----rC   r   c                    t          | j                  dk    sJ |                                                     |          S )zaIf name has previously been reported as undefined, the NameExpr that was called will be returned.r   )rf   r   r   r   ri   s     rA   r   z(DefinedVariableTracker.pop_undefined_ref  s9    4;!####{{}}..t444rC   c                    t          |                                 j                  dk    sJ |                                 j        d                             |          S rd   )rf   r   r   rv   ri   s     rA   rv   z,DefinedVariableTracker.is_possibly_undefined  sJ    4;;==-..2222{{}})"-CCDIIIrC   c                2   t          |                                 j                  dk    sJ |                                 j        d         }|                    |          sdS |                                 j        D ]}|                    |          r dS dS )zYThis will return true if a variable is defined in a branch that's not the current branch.r   re   FT)rf   r   r   ry   r{   )r@   ra   stmts      rA   is_defined_in_different_branchz5DefinedVariableTracker.is_defined_in_different_branch  s    4;;==-..2222{{}})"-  && 	5KKMM. 	 	D**400 tturC   c                    t          |                                 j                  dk    sJ |                                 j        d                             |          S rd   )rf   r   r   ry   ri   s     rA   ry   z#DefinedVariableTracker.is_undefined"  sJ    4;;==-..2222{{}})"-::4@@@rC   Nr   )r;   r   r   )r   r   r;   r<   )r   r   r;   r:   r   r   r   r   )rI   rJ   rK   rL   rB   rG   r   r   r   r   r   r`   r   rt   rj   rl   r   r   rv   r   ry   rM   rC   rA   r   r      s       __) ) ) )      P P P P   6 6 6 6
 
 
 
5 5 5 5D D D D
9 9 9 9
? ? ? ?
8 8 8 8
. . . .
5 5 5 5
J J J J
	 	 	 	A A A A A ArC   r   c                      e Zd ZddZdS )Loopr;   r<   c                    d| _         d S r   )	has_breakrF   s    rA   rB   zLoop.__init__(  s    rC   Nr   )rI   rJ   rK   rB   rM   rC   rA   r   r   '  s(             rC   r   c                  x    e Zd ZdZdQdZdRdZdRdZdSdZdT fdZdU fdZ	dVdZ
dW fdZdXdZdYd!ZdZd#Zd[ fd%Zd\ fd'Zd] fd)Zd^ fd+Zd_d-Zd` fd/Zda fd1Zdb fd3Zdc fd5Zdd fd7Zde fd9Zdf fd;Zdgd=Zdgd>Zdhd@Zdi fdBZdj fdDZdk fdFZ dldHZ!dm fdJZ"dn fdLZ#do fdNZ$dpdPZ% xZ&S )q PossiblyUndefinedVariableVisitora  Detects the following cases:
    - A variable that's defined only part of the time.
    - If a variable is used before definition

    An example of a partial definition:
    if foo():
        x = 1
    print(x)  # Error: "x" may be undefined.

    Example of a used before definition:
    x = y
    y: int = 2

    Note that this code does not detect variables not defined in any of the branches -- that is
    handled by the semantic analyzer.
    msgr   type_mapdict[Expression, Type]optionsr+   namesr$   r;   r<   c                j   || _         || _        || _        t                      | _        |                    dd           }|r-t          |j        t                    sJ |j        j	        | _        g | _
        d| _        t                      | _        t          D ]}| j                            |           d S )N__builtins__r   )r   r   r   r$   builtinsget
isinstancenoder   r   loops	try_depthr   trackerr*   rj   )r@   r   r   r   r   builtins_modra   s          rA   rB   z)PossiblyUndefinedVariableVisitor.__init__>  s      #yy66 	4l/:::::(-3DM!#
-//) 	1 	1DL**40000	1 	1rC   ra   rb   contextr   c                    | j         j                            t          j                  r| j                             ||           d S d S r>   )r   errorsis_error_code_enabledr   USED_BEFORE_DEFvar_used_before_defr@   ra   r   s      rA   r   z4PossiblyUndefinedVariableVisitor.var_used_before_defS  sG    8?001KLL 	8H((w77777	8 	8rC   c                    | j         j                            t          j                  r| j                             ||           d S d S r>   )r   r   r   r   POSSIBLY_UNDEFINEDvariable_may_be_undefinedr   s      rA   r   z:PossiblyUndefinedVariableVisitor.variable_may_be_undefinedW  sG    8?001NOO 	>H..tW=====	> 	>rC   c                ,   | j                             t          j                  sT| j                             |          }|D ]6}| j        r|                     ||            |                     ||           7n	 | j                             |           d S r>   )	r   r   r   r   r   r   r   r   rj   )r@   ra   refsrefs       rA   process_definitionz3PossiblyUndefinedVariableVisitor.process_definition[  s    |$$Y_55 		<11$77D 8 8: 8224====,,T37777	8 &&t,,,,,rC   r   r   c                    |j         D ]}|                     |           t                                          |           d S r>   )r   r   supervisit_global_declr@   r   ra   	__class__s      rA   r   z2PossiblyUndefinedVariableVisitor.visit_global_decli  sI    G 	* 	*D##D))))!!!$$$$$rC   r    c                    |j         D ]}|                     |           t                                          |           d S r>   )r   r   r   visit_nonlocal_declr   s      rA   r   z4PossiblyUndefinedVariableVisitor.visit_nonlocal_decln  sI    G 	* 	*D##D))))##A&&&&&rC   lvalueLvalue | Nonec                D   t          |t                    r|                     |j                   d S t          |t                    r|                     |j                   d S t          |t          t          f          r|j	        D ]}|                     |           d S d S r>   )
r   r   r   ra   r#   process_lvalueexprr   r&   items)r@   r   items      rA   r   z/PossiblyUndefinedVariableVisitor.process_lvalues  s    fh'' 	*##FK00000)) 	*,,,,,9 566 	* * *##D))))	* 	** *rC   r
   c                    |j         D ]}|                     |           t                                          |           d S r>   )lvaluesr   r   visit_assignment_stmt)r@   r   r   r   s      rA   r   z6PossiblyUndefinedVariableVisitor.visit_assignment_stmt|  sI    i 	( 	(F''''%%a(((((rC   r	   c                n    |j                             |            |                     |j                   d S r>   )valueacceptr   targetr   s     rA   visit_assignment_exprz6PossiblyUndefinedVariableVisitor.visit_assignment_expr  s2    	tAH%%%%%rC   r   c                   |j         D ]}|                    |            | j                                         |j        D ]8}|j        r
|                    |            | j                                         9|j        r@|j        j        s|j                            |            n| j                                         | j        	                                 d S r>   )
r   r   r   r   bodyis_unreachabler`   	else_bodyrt   r   )r@   r   erZ   s       rA   visit_if_stmtz.PossiblyUndefinedVariableVisitor.visit_if_stmt  s     	 	AHHTNNNN++--- 	' 	'A HHTNNNL$$&&&&; 	+;- +""4((((((***))+++++rC   r   c                p   |j                             |            | j                                         t	          t          |j                            D ]}|j        |         }|                    |            |j        |         }||                    |            |j        |         j	        s!|j        |                             |            n| j        
                                 t          |          t          k    }|s| j                                         | j                                         d S r>   )subjectr   r   r   rangerf   patternsguardsbodiesr  rt   r/   r.   r`   r   )r@   r   ipatternguardis_catchalls         rA   visit_match_stmtz1PossiblyUndefinedVariableVisitor.visit_match_stmt  s   		++---s1:'' 	+ 	+AjmGNN4   HQKE T"""8A;- +""4((((((***-g66+EK +((***))+++++rC   r   c                ~    |                      |j                   t                                          |           d S r>   )r   ra   r   visit_func_defr@   r   r   s     rA   r  z/PossiblyUndefinedVariableVisitor.visit_func_def  s7    '''q!!!!!rC   r   c                   |                                 r| j        j        sd S |j        pg }|D ]#}|j        |j                            |            $| j                            t          j	                   |D ]G}| 
                    |j        j                   t                                          |j                   H|j                            |            | j                                         d S r>   )
is_dynamicr   check_untyped_defs	argumentsinitializerr   r   r   r   r   r   variablera   r   	visit_varr  r   )r@   r   argsargr   s       rA   
visit_funcz+PossiblyUndefinedVariableVisitor.visit_func  s    <<>> 	$,"A 	F{ b 	- 	-C*&&t,,,  000 	, 	,C##CL$5666GGcl++++	d!!!!!rC   r   c                   | j                             t          j                   |j        D ]}|                     |           t                                          |           | j                                          d S r>   )	r   r   r   r   indicesr   r   visit_generator_exprr   r@   r   idxr   s      rA   r   z5PossiblyUndefinedVariableVisitor.visit_generator_expr  sv      !45559 	% 	%C$$$$$$Q'''!!!!!rC   r   c                   | j                             t          j                   |j        D ]}|                     |           t                                          |           | j                                          d S r>   )	r   r   r   r   r  r   r   visit_dictionary_comprehensionr   r!  s      rA   r$  z?PossiblyUndefinedVariableVisitor.visit_dictionary_comprehension  sv      !45559 	% 	%C$$$$..q111!!!!!rC   r   c                   |j                             |            |                     |j                   |j                            |            | j                                         t                      }| j                            |           |j	                            |            | j        
                                 | j                                         |j        p|j        }|r2| j                                         | j        
                                 |j                            |            |r| j                                         | j                                         d S r>   )r   r   r   indexr   r   r   r   r_   r  r`   r   r  r   r   r@   r   loopr   s       rA   visit_for_stmtz/PossiblyUndefinedVariableVisitor.visit_for_stmt  s:   	dAG$$$	t++---vv
$	d  """))+++;" I +33555((***Kt$$$ 411333
rC   r"   c                |    t                                          |           | j                                         d S r>   )r   visit_return_stmtr   rt   r  s     rA   r+  z2PossiblyUndefinedVariableVisitor.visit_return_stmt  s5    !!!$$$  """""rC   r   c                    | j                             t          j                   t	                                          |           | j                                          d S r>   )r   r   r   r   r   visit_lambda_exprr   r  s     rA   r-  z2PossiblyUndefinedVariableVisitor.visit_lambda_expr  sM      000!!!$$$!!!!!rC   r   c                    t                                          |           t          j        |j                  r| j                                         d S d S r>   )r   visit_assert_stmtr   is_false_literalr   r   rt   r  s     rA   r/  z2PossiblyUndefinedVariableVisitor.visit_assert_stmt  sT    !!!$$$#AF++ 	'L$$&&&&&	' 	'rC   r!   c                |    t                                          |           | j                                         d S r>   )r   visit_raise_stmtr   rt   r  s     rA   r2  z1PossiblyUndefinedVariableVisitor.visit_raise_stmt  s5      ###  """""rC   r   c                |    t                                          |           | j                                         d S r>   )r   visit_continue_stmtr   rt   r  s     rA   r4  z4PossiblyUndefinedVariableVisitor.visit_continue_stmt  s5    ##A&&&  """""rC   r   c                    t                                          |           | j        rd| j        d         _        | j                                         d S )NTre   )r   visit_break_stmtr   r   r   rt   r  s     rA   r6  z1PossiblyUndefinedVariableVisitor.visit_break_stmt  sM      ###: 	,'+DJrN$  """""rC   r   c                   | j                             |j                  }|"t          t	          |          t
                    r| j                                         t                      	                    |           d S r>   )
r   r   r   r   r3   r2   r   rt   r   visit_expression_stmt)r@   r   typr   s      rA   r8  z6PossiblyUndefinedVariableVisitor.visit_expression_stmt  sg    m'';*_S%9%9?KK;L$$&&&%%a(((((rC   r%   c                    | xj         dz  c_         |j        A| j                                        }d| j        _        |                     |           || _        |                     |           | xj         dz  c_         dS )a  
        Note that finding undefined vars in `finally` requires different handling from
        the rest of the code. In particular, we want to disallow skipping branches due to jump
        statements in except/else clauses for finally but not for other cases. Imagine a case like:
        def f() -> int:
            try:
                x = 1
            except:
                # This jump statement needs to be handled differently depending on whether or
                # not we're trying to process `finally` or not.
                return 0
            finally:
                # `x` may be undefined here.
                pass
            # `x` is always defined here.
            return x
        r~   NT)r   finally_bodyr   rG   r   process_try_stmt)r@   r   old_trackers      rA   visit_try_stmtz/PossiblyUndefinedVariableVisitor.visit_try_stmt  s~    $ 	!>% ,++--K/3DL,!!!$$$&DLa   !rC   c                   | j                                          |j                            |            |j        |j                            |            t          |j                  dk    r't          |j                  t          |j                  cxk    rt          |j                  k    sn J t          t          |j                            D ]}| j         
                                 |j        |         }||                    |            |j        |         }|/|                     |j                   |                    |            |j        |                             |            || j                             |j                   | j                                          |j        |j                            |            dS dS )a  
        Processes try statement decomposing it into the following:
        if ...:
            body
            else_body
        elif ...:
            except 1
        elif ...:
            except 2
        else:
            except n
        finally
        Nr   )r   r   r  r   r  rf   handlersvarstypesr  r`   r   ra   rl   r   r;  )r@   r   r  exc_typevars        rA   r<  z1PossiblyUndefinedVariableVisitor.process_try_stmt#  s    	++---	d;"Kt$$$qz??Qqz??c!&kkAAAAS\\AAAAAA3qz??++ 6 6((***71:'OOD)))fQi?++CH555JJt$$$
1$$T***?L++CH555))+++>%N!!$''''' &%rC   r(   c                   |j                             |            | j                                         t	                      }| j                            |           |j                            |            |j        }t          j
        |j                   s| j                                         | j                                         |j        p|r2| j                                         | j                                         |j        r|j                            |            |r| j                                         | j                                         d S r>   )r   r   r   r   r   r   r_   r  r   r   is_true_literalr`   r   r  r   r'  s       rA   visit_while_stmtz1PossiblyUndefinedVariableVisitor.visit_while_stmtH  s1   	d++---vv
$	dN	&qv.. 	' L$$&&&))+++;"  +33555((***{ )""4((( 411333
rC   r,   c                    |j         |                     |j                    t                                          |           d S r>   )ra   r   r   visit_as_patternr  s     rA   rI  z1PossiblyUndefinedVariableVisitor.visit_as_patternb  s?    6'''  #####rC   r-   c                    |j         |                     |j                    t                                          |           d S r>   )capturer   r   visit_starred_patternr  s     rA   rL  z6PossiblyUndefinedVariableVisitor.visit_starred_patterng  s?    9 	***%%a(((((rC   r   c                   |j         | j        v r&| j                            t          j                  rd S | j                            |j                   r;|                     |j         |           | j                            |j                    n| j        	                    |j                   rJ| j
        s| j        dk    r|                     |j         |           nU|                     |j         |           n9| j                            |j                   r| j                            |           t                                          |           d S )Nr   )ra   r   r   r   r   r   rv   r   rj   r   r   r   r   ry   r   r   visit_name_exprr  s     rA   rN  z0PossiblyUndefinedVariableVisitor.visit_name_exprl  s4   6T]""t|'<'<Y=M'N'N"F<--af55 	1**161555L**162222\88@@ 	1z 4T^a// ..qvq9999((3333\&&qv.. 	1 L--a000"""""rC   r)   c                    t          |j        |j                  D ]/\  }}|                    |            |                     |           0|j                            |            d S r>   )zipr   r   r   r   r  )r@   r   r   r"  s       rA   visit_with_stmtz0PossiblyUndefinedVariableVisitor.visit_with_stmt  sf    QVQX.. 	% 	%ID#KK$$$$	drC   r   c                    |                      |j                   | j                            t          j                   t                                          |           | j                                         d S r>   )	r   ra   r   r   r   r   r   visit_class_defr   r  s     rA   rS  z0PossiblyUndefinedVariableVisitor.visit_class_def  sc    '''  111"""!!!!!rC   r   c                   |j         D ]Y\  }}|| j                            |           "|                    d          }|r | j                            |d                    Zt	                                          |           d S )N.r   )idsr   rj   splitr   visit_import)r@   r   modaliasr   r   s        rA   rX  z-PossiblyUndefinedVariableVisitor.visit_import  s    % 		= 		=JC ..u5555 		# = L2258<<<QrC   r   c                    |j         D ]%\  }}|}||}| j                            |           &t                                          |           d S r>   )r   r   rj   r   visit_import_from)r@   r   rY  rZ  ra   r   s        rA   r\  z2PossiblyUndefinedVariableVisitor.visit_import_from  s^    ' 	1 	1JCD|L**40000!!!$$$$$rC   r'   c                N    | j                             |j        j                   d S r>   )r   rj   ra   r   s     rA   visit_type_alias_stmtz6PossiblyUndefinedVariableVisitor.visit_type_alias_stmt  s"    &&qv{33333rC   )
r   r   r   r   r   r+   r   r$   r;   r<   )ra   rb   r   r   r;   r<   r   )r   r   r;   r<   )r   r    r;   r<   )r   r   r;   r<   )r   r
   r;   r<   )r   r	   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r"   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r!   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r%   r;   r<   )r   r(   r;   r<   )r   r,   r;   r<   )r   r-   r;   r<   r   )r   r)   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r   r;   r<   )r   r'   r;   r<   )'rI   rJ   rK   rL   rB   r   r   r   r   r   r   r   r   r  r  r  r  r   r$  r)  r+  r-  r/  r2  r4  r6  r8  r>  r<  rG  rI  rL  rN  rQ  rS  rX  r\  r^  __classcell__)r   s   @rA   r   r   ,  s        "1 1 1 1*8 8 8 8> > > >- - - -% % % % % %
' ' ' ' ' '
* * * *) ) ) ) ) )
& & & &, , , , , , , ,$" " " " " "" " " " " """ " " " " "" " " " " "   .# # # # # #" " " " " "
' ' ' ' ' '
# # # # # ## # # # # ## # # # # #) ) ) ) ) )   @#( #( #( #(J   4$ $ $ $ $ $
) ) ) ) ) )
# # # # # #4   " " " " " "           % % % % % %4 4 4 4 4 4 4 4rC   r   N)B
__future__r   enumr   mypyr   r   mypy.messagesr   
mypy.nodesr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   mypy.optionsr+   mypy.patternsr,   r-   mypy.reachabilityr.   r/   mypy.traverserr0   
mypy.typesr1   r2   r3   r5   rO   r   r   r   r   r   rM   rC   rA   <module>rj     s   " " " " " "       $ $ $ $ $ $ $ $ ( ( ( ( ( ($ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $J !           3 3 3 3 3 3 3 3 > > > > > > > > 3 3 3 3 3 3 = = = = = = = = = =
 
 
 
 
 
 
 
>X
 X
 X
 X
 X
 X
 X
 X
v       4 4 4 4 4 4 4 4(\A \A \A \A \A \A \A \A~       
}4 }4 }4 }4 }4'? }4 }4 }4 }4 }4rC   