
    X-Ph1              
         U d 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 ddlmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% d	Z&d
e'd<   dZ(d
e'd<   dZ)d
e'd<   dZ*d
e'd<   dZ+d
e'd<   e&e)e)e&e+e+e(e*e*e(iZ,d
e'd<   dddddddZ-d
e'd<   dKd#Z.dLd%Z/dMd(Z0dNd,Z1dOd/Z2dPd2Z3dQd5Z4 ed6e5e6e7e5d7f                   Z8dRd;Z9dSd=Z:dTd?Z;dUdAZ<dVdDZ= G dE dFe%          Z>dVdGZ? G dH dIe%          Z@dJS )WzQUtilities related to determining the reachability of code (in semantic analysis).    )annotations)FinalTypeVar)literal)LITERAL_YES
AssertStmtBlockCallExprComparisonExpr
ExpressionFuncDefIfStmtImport	ImportAll
ImportFrom	IndexExprIntExpr	MatchStmt
MemberExprNameExprOpExpr	SliceExprStrExpr	TupleExpr	UnaryExpr)Options)	AsPattern	OrPatternPattern)TraverserVisitor   r   ALWAYS_TRUE   	MYPY_TRUE   ALWAYS_FALSE   
MYPY_FALSE   TRUTH_VALUE_UNKNOWNinverted_truth_mapping==!=><>=<=)r,   r-   r/   r.   r1   r0   
reverse_opsr   optionsr   returnNonec                   t          t          | j                            D ]}t          | j        |         |          }|t          t
          fv rt          | j        |                    H|t          t          fv r{|t          k    rt          | j        |                    | j        |dz   d          D ]}t          |           | j        st          g           | _        t          | j                    d S d S Nr!   )rangelenexprinfer_condition_valuer&   r(   mark_block_unreachablebodyr"   r$   mark_block_mypy_only	else_bodyr	   )r3   r4   iresultr>   s        Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/reachability.py"infer_reachability_of_if_statementrD   5   s    3qv;;  &qvay'::lJ///"16!9----Y/// "" %QVAY///q1uww - -&t,,,, ; (#Bii"1;///EE# 0     r   c                   t          | j                  D ]\  }}t          | j        |                   }|t	          ||          }nt
          }|t          t          fv s|t          t          fv rt          | j	        |                    nD|t          t          fv r4|t
          t          fv r$| j	        |dz   d          D ]}t          |           |t          k    rt          | j	        |                    d S r8   )	enumerateguardsinfer_pattern_valuepatternsr<   r"   r&   r(   r=   bodiesr$   r?   )r3   r4   rA   guardpattern_valueguard_valuer>   s          rC   %infer_reachability_of_match_statementrO   O   s   ah'' . .5+AJqM::/w??KK%K\:666+J
 ;
 ;

 #18A;////|Y777KL
 =
 =
 Q) - -&t,,,,)## !!---1. .rE   r   boolc                H    t          | j        |          t          t          fv S N)r<   r;   r&   r(   )r3   r4   s     rC   assert_will_always_failrS   k   s     11lJ5OOOrE   r;   r   intc                *   |j         }d}d}| }t          |t                    r|j        dk    r	|j        } d}t
          }t          | t                    r| j        }nt          | t                    r| j        }nt          | t                    rk| j        dv rbt          | j        |          }|t          t          fv r| j        dk    s|t          t          fv r | j        dk    rt          | j        |          S |S t#          | |          }|t
          k    rt%          | |j                  }|t
          k    rQ|dk    rt          }nC|d	k    rt          }n5|d
k    s|dk    rt          }n!||j        v rt          }n||j        v rt          }|rt,          |         }|S )a  Infer whether the given condition is always true/false.

    Return ALWAYS_TRUE if always true, ALWAYS_FALSE if always false,
    MYPY_TRUE if true under mypy and false at runtime, MYPY_FALSE if
    false under mypy and true at runtime, else TRUTH_VALUE_UNKNOWN.
     FnotT)andorrX   rY   PY2PY3MYPYTYPE_CHECKING)python_version
isinstancer   opr;   r*   r   namer   r   r<   leftr"   r$   r&   r(   rightconsider_sys_version_infoconsider_sys_platformplatformalways_truealways_falser+   )r;   r4   	pyversionra   negatedaliasrB   rb   s           rC   r<   r<   o   s    &IDGE%## 8u:DG F$!! Cy	D*	%	% Cy	D&	!	! Cdg&>&>$TY88[),,,E1A1A\:...47d?? )W=== K*4;;(((*41ABBF$$$5==!FFU]] FFV^^t66FFW((( FFW)))!F 0'/MrE   patternr   c                    t          | t                    r| j        t          S t          | t                    r%t          d | j        D                       rt          S t          S )Nc              3  F   K   | ]}t          |          t          k    V  d S rR   )rI   r"   ).0ps     rC   	<genexpr>z&infer_pattern_value.<locals>.<genexpr>   sA       0 023A+-0 0 0 0 0 0rE   )r_   r   rl   r"   r   anyrJ   r*   )rl   s    rC   rI   rI      sq    '9%% #'/*A	GY	'	' #C 0 07>7G0 0 0 - - # ""rE   ri   tuple[int, ...]c                   t          | t                    st          S t          | j                  dk    rt          S | j        d         }|dvrt          S t          | j        d                   }t          | j        d                   }||At          | j        d                   }t          | j        d                   }t          |         }t          |t                    rCt          |t                    r.d|cxk    rdk    rn nt          ||         ||          S t          S t          |t                    rt          |t                    r|\  }}|d}|d}d|cxk    r|cxk     rdk    rbn n_|||         }t          |          t          |          k    s$t          |          t          |          k    r|dvrt          |||          S t          S )zConsider whether expr is a comparison involving sys.version_info.

    Return ALWAYS_TRUE, ALWAYS_FALSE, or TRUTH_VALUE_UNKNOWN.
    r!   r   )r,   r-   r1   r0   r/   r.   Nr#   r,   r-   )r_   r   r*   r:   	operatorscontains_sys_version_infooperandscontains_int_or_tuple_of_intsr2   rT   fixed_comparisontuple)r;   ri   r`   indexthinglohivals           rC   rd   rd      s    dN++ #""
4>Q""		B	333""%dmA&677E)$-*:;;E})$-*:;;-dmA.>??^% 8*UC"8"8 8?????????#Ie$4b%@@@&&	E5	!	! 	8j&>&> 	8B:B:BR1BrE"C3xx3u::%%SCJJ)>)>2\CYCY'R777rE   rf   strc                *   t          | t                    rt          | j                  dk    rt          S | j        d         }|dvrt          S t          | j        d         d          st          S | j        d         }t          |t                    st          S t          |||j	                  S t          | t                    rt          | j        t                    st          S t          | j                  dk    s t          | j        d         t                    st          S t          | j        j        d          st          S | j        j        dk    rt          S |                    | j        d         j	                  rt"          S t$          S t          S )zConsider whether expr is a comparison involving sys.platform.

    Return ALWAYS_TRUE, ALWAYS_FALSE, or TRUTH_VALUE_UNKNOWN.
    r!   r   ru   rf   
startswith)r_   r   r:   rv   r*   is_sys_attrrx   r   rz   valuer
   calleer   argsr;   ra   r   r"   r&   )r;   rf   r`   rc   s       rC   re   re      sc    $'' #t~""&&^A\!!&&4=+Z88 	'&&a %)) 	'&&"ek:::	D(	#	# #$+z22 	'&&ty>>Qj1w&G&G&&4;+Z88 	'&&;|++&&ty|122 	 ""rE   Targ.rb   r`   rc   c                   t           t          d}|dk    r|| |k             S |dk    r|| |k             S |dk    r|| |k             S |dk    r|| |k             S |dk    r|| |k              S |dk    r|| |k             S t          S )N)FTr,   r-   r1   r0   r/   r.   )r&   r"   r*   )rb   r`   rc   rmaps       rC   rz   rz     s    {33D	TzzDEM""	TzzDEM""	TzzDEM""	TzzDEM""	SyyD5L!!	SyyD5L!!rE   None | int | tuple[int, ...]c                2   t          | t                    r| j        S t          | t                    ret	          |           t
          k    rMg }| j        D ]4}t          |t                    s d S |                    |j                   5t          |          S d S rR   )	r_   r   r   r   r   r   itemsappendr{   )r;   r}   xs      rC   ry   ry     s    $   z$	""  4==K''EZ & &!!W--  44QW%%%%<<4rE   *None | int | tuple[int | None, int | None]c                    t          | d          rdS t          | t                    rt          | j        d          r| j        }t          |t
                    r|j        S t          |t                    r|j        ,t          |j        t
                    r|j        j        dk    rd S d x}}|j	        (t          |j	        t
                    sd S |j	        j        }|j
        (t          |j
        t
                    sd S |j
        j        }||fS d S )Nversion_info)NNr!   )r   r_   r   baser|   r   r   r   stridebegin_index	end_index)r;   r|   beginends       rC   rw   rw   #  s   4(( |$	""  {49n'M'M  
eW%% 	;eY'' 	 |'!%,88  EL<NRS<S<S4EC ,!%"3W==  4)/*!%/7;;  4o+3<4rE   ra   c                    t          | t                    r7| j        |k    r,t          | j        t                    r| j        j        dk    rdS dS )NsysTF)r_   r   ra   r;   r   )r;   ra   s     rC   r   r   ;  sP     $
## 	T(9(9di** 	ty~/F/F 45rE   blockr	   c                V    d| _         |                     t                                 d S NT)is_unreachableacceptMarkImportsUnreachableVisitorr   s    rC   r=   r=   G  s)    E	LL.0011111rE   c                  *    e Zd ZdZddZddZdd
ZdS )r   zCVisitor that flags all imports nested within a node as unreachable.noder   r5   r6   c                    d|_         d S r   r   selfr   s     rC   visit_importz*MarkImportsUnreachableVisitor.visit_importO      "rE   r   c                    d|_         d S r   r   r   s     rC   visit_import_fromz/MarkImportsUnreachableVisitor.visit_import_fromR  r   rE   r   c                    d|_         d S r   r   r   s     rC   visit_import_allz.MarkImportsUnreachableVisitor.visit_import_allU  r   rE   Nr   r   r5   r6   r   r   r5   r6   r   r   r5   r6   )__name__
__module____qualname____doc__r   r   r    rE   rC   r   r   L  sV        MM# # # ## # # ## # # # # #rE   r   c                H    |                      t                                 d S rR   )r   MarkImportsMypyOnlyVisitorr   s    rC   r?   r?   Y  s!    	LL+--.....rE   c                  2    e Zd ZdZddZddZdd
ZddZdS )r   z8Visitor that sets is_mypy_only (which affects priority).r   r   r5   r6   c                    d|_         d S r   is_mypy_onlyr   s     rC   r   z'MarkImportsMypyOnlyVisitor.visit_import`       rE   r   c                    d|_         d S r   r   r   s     rC   r   z,MarkImportsMypyOnlyVisitor.visit_import_fromc  r   rE   r   c                    d|_         d S r   r   r   s     rC   r   z+MarkImportsMypyOnlyVisitor.visit_import_allf  r   rE   r   c                    d|_         d S r   r   r   s     rC   visit_func_defz)MarkImportsMypyOnlyVisitor.visit_func_defi  r   rE   Nr   r   r   )r   r   r5   r6   )r   r   r   r   r   r   r   r   r   rE   rC   r   r   ]  sj        BB! ! ! !! ! ! !! ! ! !! ! ! ! ! !rE   r   N)r3   r   r4   r   r5   r6   )r3   r   r4   r   r5   r6   )r3   r   r4   r   r5   rP   )r;   r   r4   r   r5   rT   )rl   r   r5   rT   )r;   r   ri   rs   r5   rT   )r;   r   rf   r   r5   rT   )rb   r   r`   r   rc   r   r5   rT   )r;   r   r5   r   )r;   r   r5   r   )r;   r   ra   r   r5   rP   )r   r	   r5   r6   )Ar   
__future__r   typingr   r   mypy.literalsr   
mypy.nodesr   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   r   mypy.traverserr    r"   __annotations__r$   r&   r(   r*   r+   r2   rD   rO   rS   r<   rI   rd   re   rT   r   r{   r   rz   ry   rw   r   r=   r   r?   r   r   rE   rC   <module>r      s   W W W " " " " " " ! ! ! ! ! ! ! ! ! ! ! ! ! !                                             . !           7 7 7 7 7 7 7 7 7 7 + + + + + +     	        
          +,z	!       t#CtSWXX
 X X X X   4. . . .8P P P P1 1 1 1h# # # #) ) ) )X$# $# $# $#N wvsCsCx11   "      0	 	 	 	2 2 2 2

# 
# 
# 
# 
#$4 
# 
# 
#/ / / /! ! ! ! !!1 ! ! ! ! !rE   