o
    ˷e                     @   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/ideatree/venv/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	reachableFunreachableNunsurec                 c   s,    	 t | dd} | d u st| rd S | V  q)NT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_stateflow_analysis_enabledr   r   listr*   r   r   r   r   parent_break_check)contextvalue_scoper)   origin_scopefirst_flow_scopeorigin_flow_scopesnode_flow_scopesbranch_matches
flow_scopenode_keywordorigin_keywordr   r   r   reachability_check/   s>   



	r>   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,   
while_stmtTr'   )r   r   is_node_after_elseget_test_nodes	_check_ifr   r   get_corresponding_test_noder   r2   r   r3   )r4   r5   r;   r)   r$   
check_node	flow_noder   r   r   r3   X   s*   






r3   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   )
py__bool__).0xr   r   r   	<genexpr>y   s    z_check_if.<locals>.<genexpr>   )	r   r/   r   
infer_nodesetlenr	   r
   pop)r4   r)   allowedtypesvaluesr   r   r   rB   s   s   
	$rB   r   )typingr   r   jedi.parser_utilsr   r   r   jedi.inference.recursionr   jedi.inference.helpersr   r	   r   r   r   r*   r>   r3   rB   r   r   r   r   <module>   s    



)