o
    tBhX1                  
   @  s  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	 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 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< dYd$d%Z/dZd'd(Z0d[d+d,Z1d\d0d1Z2d]d4d5Z3d^d8d9Z4d_d<d=Z5ed>e6e7ee6d?f Z8d`dCdDZ9dadFdGZ:dbdIdJZ;dcdLdMZ<dddPdQZ=G dRdS dSe&Z>dddTdUZ?G dVdW dWe&Z@dXS )ezQUtilities related to determining the reachability of code (in semantic analysis).    )annotations)TupleTypeVar)Final)literal)LITERAL_YES
AssertStmtBlockCallExprComparisonExpr
Expression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-   r0   r/   
reverse_opsr   optionsr   returnNonec                 C  s   t t| jD ]I}t| j| |}|ttfv rt| j|  q|tt	fv rP|t	kr0t
| j|  | j|d d  D ]}t| q9| jsHtg | _t| j  d S qd S Nr    )rangelenexprinfer_condition_valuer%   r'   mark_block_unreachablebodyr!   r#   mark_block_mypy_only	else_bodyr	   )r2   r3   iresultr<    rA   h/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/reachability.py"infer_reachability_of_if_statement5   s   


rC   r   c                 C  s   t | jD ]R\}}t| j| }|d urt||}nt}|ttfv s(|ttfv r0t| j	|  n|tt
fv rL|tt
fv rL| j	|d d  D ]}t| qE|t
krWt| j	|  qd S r6   )	enumerateguardsinfer_pattern_valuepatternsr:   r!   r%   r'   r;   bodiesr#   r=   )r2   r3   r?   guardpattern_valueguard_valuer<   rA   rA   rB   %infer_reachability_of_match_statementO   s(   
rL   r   boolc                 C  s   t | j|ttfv S N)r:   r9   r%   r'   )r2   r3   rA   rA   rB   assert_will_always_failk   s   rO   r9   r   intc                 C  s:  |j }d}d}| }t|tr|jdkr|j} d}t}t| tr#| j}nFt| tr,| j}n=t| t	rZ| jdv rZt
| j|}|ttfv rG| jdksR|ttfv rX| jdkrXt
| j|S |S t| |}|tkrit| |j}|tkr|dkrtt}n!|d	kr{t}n|d
ks|dkrt}n||jv rt}n||jv rt}|rt| }|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orrS   rT   PY2PY3MYPYTYPE_CHECKING)python_version
isinstancer   opr9   r)   r   namer   r   r:   leftr!   r#   r%   r'   rightconsider_sys_version_infoconsider_sys_platformplatformalways_truealways_falser*   )r9   r3   	pyversionr\   negatedaliasr@   r]   rA   rA   rB   r:   o   sH   






r:   patternr   c                 C  s>   t | tr| jd u rtS t | trtdd | jD rtS tS )Nc                 s  s    | ]	}t |tkV  qd S rN   )rF   r!   ).0prA   rA   rB   	<genexpr>   s    
z&infer_pattern_value.<locals>.<genexpr>)rZ   r   rg   r!   r   anyrG   r)   )rg   rA   rA   rB   rF      s   rF   rd   tuple[int, ...]c                 C  sd  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 }|du s1|du rCt| jd }t| jd }t| }t |t	rdt |t	rdd|  krWdkrbn tS t
|| ||S tS t |trt |tr|\}}|du rxd}|du r~d}d|  kr|  k rdkrn tS ||| }t|t|kst|t|kr|dvrt
|||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,   r0   r/   r.   r-   Nr"   r+   r,   )rZ   r   r)   r8   	operatorscontains_sys_version_infooperandscontains_int_or_tuple_of_intsr1   rP   fixed_comparisontuple)r9   rd   r[   indexthinglohivalrA   rA   rB   r_      s<   


 (r_   ra   strc                 C  s   t | tr6t| 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
rrt | jtsCtS t| jdksRt | jd tsTtS t| jjds]tS | jjdkretS || jd j	rpt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   rm   ra   
startswith)rZ   r   r8   rn   r)   is_sys_attrrp   r   rr   valuer
   calleer   argsr9   r\   rz   r!   r%   )r9   ra   r[   r^   rA   rA   rB   r`      s2   
	



r`   Targ.r]   r[   r^   c                 C  s   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r7|| |k  S |dkrA|| |k S tS )N)FTr+   r,   r0   r/   r.   r-   )r%   r!   r)   )r]   r[   r^   rmaprA   rA   rB   rr     s   
rr   )None | int | tuple[int] | tuple[int, ...]c                 C  s^   t | tr| jS t | tr-t| tkr-g }| jD ]}t |ts" d S ||j qt|S d S rN   )	rZ   r   r|   r   r   r   itemsappendrs   )r9   ru   xrA   rA   rB   rq     s   



rq   *None | int | tuple[int | None, int | None]c                 C  s   t | drdS t| tr_t | jdr_| j}t|tr|jS t|tr_|jd ur5t|jtr3|jjdkr5d S d  }}|j	d urJt|j	tsFd S |j	j}|j
d ur[t|j
tsWd S |j
j}||fS d S )Nversion_info)NNr    )r{   rZ   r   basert   r   r|   r   stridebegin_index	end_index)r9   rt   beginendrA   rA   rB   ro   #  s*   





ro   r\   c                 C  s4   t | tr| j|krt | jtr| jjdkrdS dS )NsysTF)rZ   r   r\   r9   r   )r9   r\   rA   rA   rB   r{   ;  s   r{   blockr	   c                 C  s   d| _ | t  d S NT)is_unreachableacceptMarkImportsUnreachableVisitorr   rA   rA   rB   r;   G  s   r;   c                   @  .   e Zd ZdZdddZdd	d
ZdddZdS )r   zCVisitor that flags all imports nested within a node as unreachable.noder   r4   r5   c                 C  
   d|_ d S r   r   selfr   rA   rA   rB   visit_importO     
z*MarkImportsUnreachableVisitor.visit_importr   c                 C  r   r   r   r   rA   rA   rB   visit_import_fromR  r   z/MarkImportsUnreachableVisitor.visit_import_fromr   c                 C  r   r   r   r   rA   rA   rB   visit_import_allU  r   z.MarkImportsUnreachableVisitor.visit_import_allNr   r   r4   r5   r   r   r4   r5   r   r   r4   r5   __name__
__module____qualname____doc__r   r   r   rA   rA   rA   rB   r   L  
    

r   c                 C  s   |  t  d S rN   )r   MarkImportsMypyOnlyVisitorr   rA   rA   rB   r=   Y  s   r=   c                   @  r   )r   z8Visitor that sets is_mypy_only (which affects priority).r   r   r4   r5   c                 C  r   r   is_mypy_onlyr   rA   rA   rB   r   `  r   z'MarkImportsMypyOnlyVisitor.visit_importr   c                 C  r   r   r   r   rA   rA   rB   r   c  r   z,MarkImportsMypyOnlyVisitor.visit_import_fromr   c                 C  r   r   r   r   rA   rA   rB   r   f  r   z+MarkImportsMypyOnlyVisitor.visit_import_allNr   r   r   r   rA   rA   rA   rB   r   ]  r   r   N)r2   r   r3   r   r4   r5   )r2   r   r3   r   r4   r5   )r2   r   r3   r   r4   rM   )r9   r   r3   r   r4   rP   )rg   r   r4   rP   )r9   r   rd   rl   r4   rP   )r9   r   ra   ry   r4   rP   )r]   r   r[   ry   r^   r   r4   rP   )r9   r   r4   r   )r9   r   r4   r   )r9   r   r\   ry   r4   rM   )r   r	   r4   r5   )Ar   
__future__r   typingr   r   typing_extensionsr   mypy.literalsr   
mypy.nodesr   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*   r1   rC   rL   rO   r:   rF   r_   r`   rP   ry   r   rr   rq   ro   r{   r;   r   r=   r   rA   rA   rA   rB   <module>   sJ    X




4

,'





