o
    Zh                     @   s   d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 G dd dZeddZed	d
ZeddZdd ZdddZdd Zdd ZdS )    )DictOptional)get_flow_branch_keywordis_scopeget_parent_scope)execution_allowed)is_big_annoying_libraryc                   @   sX   e Zd ZU i Zeee d f ed< dee deddfddZ	dd	 Z
d
d Zdd ZdS )Statuslookup_tablevaluenamereturnNc                 C   s   || _ || _| tj|< d S N)_value_namer	   r
   )selfr   r    r   S/var/www/html/lang_env/lib/python3.10/site-packages/jedi/inference/flow_analysis.py__init__   s   zStatus.__init__c                 C   s   | t u rtS | tu rt S tS r   )	REACHABLEUNREACHABLEUNSUREr   r   r   r   invert   s
   zStatus.invertc                 C   s$   t | |fv rt S | jr|jrtS tS r   )r   r   r   r   )r   otherr   r   r   __and__   s   zStatus.__and__c                 C   s   dt | j| jf S )Nz<%s: %s>)type__name__r   r   r   r   r   __repr__   s   zStatus.__repr__)r   
__module____qualname__r
   r   r   bool__annotations__strr   r   r   r   r   r   r   r   r	      s   
 r	   T	reachableFZunreachableNZunsurec                 c   s,    	 t | dd} | d u st| rd S | V  q)NTZinclude_flows)r   r   )noder   r   r   _get_flow_scopes'   s   r'   c                 C   s   t | s| jjs
tS t|dd}|d urott|}tt|}d}|D ]7}||v r[t||}	t||}
|	|
k}|jdkrD|sCt	  S n|jdkrW|sW|
dkrW|	dkrWt	  S |r[ nq$|d uro||krh|rht
S |j}|d us`t| |||S )NTr%   if_stmttry_stmtelseexcept)r   inference_stateZflow_analysis_enabledr   r   listr'   r   r   r   r   parent_break_check)contextvalue_scoper&   Zorigin_scopeZfirst_flow_scopeZorigin_flow_scopesZnode_flow_scopesZbranch_matches
flow_scopeZnode_keywordZorigin_keywordr   r   r   reachability_check/   s>   



	r3   c                 C   s   t }|jdkr4||r%| D ]}t| |}|t tfv r nq| }n||}|d ur3t| |}n|jdv r;tS |ttfv rC|S ||kr[||j	kr[t
|dd}|t| |||@ S |S )Nr(   )r)   Z
while_stmtTr%   )r   r   Zis_node_after_elseZget_test_nodes	_check_ifr   r   Zget_corresponding_test_noder   r.   r   r/   )r0   r1   r2   r&   r$   Z
check_nodeZ	flow_noder   r   r   r/   X   s*   






r/   c                 C   s   t | j|7}|stW  d    S | |}tdd |D }t|dkr4tj|  W  d    S tW  d    S 1 s@w   Y  d S )Nc                 s   s    | ]}|  V  qd S r   )Z
py__bool__).0xr   r   r   	<genexpr>y   s    z_check_if.<locals>.<genexpr>   )	r   r,   r   Z
infer_nodesetlenr	   r
   pop)r0   r&   allowedtypesvaluesr   r   r   r4   s   s   
	$r4   r   )typingr   r   Zjedi.parser_utilsr   r   r   Zjedi.inference.recursionr   Zjedi.inference.helpersr   r	   r   r   r   r'   r3   r/   r4   r   r   r   r   <module>   s    



)