o
    ï›hç  ã                   @   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   úRc:\Users\shubh\Videos\agent\nova\Lib\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    



)