o
    ï›h�,  ã                   @   s  d dl Z d dlZd dlm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 d dlmZ d	Zd
Z	 dZ	 d/dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd0dd„Zdd„ Zdd„ Zd d!„ Zd/d"d#„Zd/d$d%„Zd&d'„ Z d(d)„ Z!	*d1d+d,„Z"	d2d-d.„Z#dS )3é    N)Úpython_bytes_to_unicode)Údbg)ÚKnownContentFileIOÚFolderIO)ÚSubModuleName)Úload_module_from_path)ÚParserTreeFilter)Úconvert_names)z.toxz.venvz.mypy_cacheÚvenvÚ__pycache__iÐ  é   © c                 c   sH   � | D ]}||v r
qt |tƒs|V  |jdkr!t| ¡ | ƒE d H  qd S )NÚmodule)Ú
isinstancer   Úapi_typeÚ_resolve_namesÚgoto)Zdefinition_namesZavoid_namesÚnamer   r   úOc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/inference/references.pyr      s   €

€ôr   c                 C   s   t dd„ | D ƒƒS )Nc                 s   s(   � | ]}|j d u r|n|j |fV  qd S ©N)Ú	tree_name©Ú.0Únr   r   r   Ú	<genexpr>.   s
   € ÿ
ÿz _dictionarize.<locals>.<genexpr>)Údict)Únamesr   r   r   Ú_dictionarize-   s   þr   c                 C   s¢   t | |ƒ}t|ƒD ]}|tt|g| ¡  ¡  dd�ƒO }q	|tt||jƒƒO }t|ƒD ]}|jdks>|j	d u s>|j	j
jdkr?q+|tt|j|jƒƒO }q+tt|ƒƒS )NF)Z
only_stubsZprefer_stub_to_compiledÚparamÚtrailer)Ú_find_namesÚlistÚsetr	   Úget_root_contextZis_stubÚ_find_global_variablesÚvaluer   r   ÚparentÚtypeÚ_add_names_in_same_contextÚparent_contextÚstring_namer   )Úmodule_contextr   Úfound_namesr   r   r   r   Ú_find_defining_names4   s   
ýr-   c                 C   s,   |   |¡}t| ¡ ƒ}| |¡ tt|ƒƒS r   )Zcreate_namer"   r   Úaddr   )r+   r   r   r,   r   r   r   r    H   s   

r    c                 c   s^   � | j d u rd S d }	 t| |d�}t| |¡ƒ}|sd S |E d H  t|dd„ d�}|d j}q)NT)r)   Úuntil_positionc                 S   s   | j S r   )Ú	start_pos)Úxr   r   r   Ú<lambda>^   s    z,_add_names_in_same_context.<locals>.<lambda>)Úkeyr   )Ú	tree_noder   r"   ÚgetÚsortedr0   )Úcontextr*   r/   Úfilter_r   Zorderedr   r   r   r(   P   s    €
þ

ör(   c              	   c   sx   � | D ]6}|j d u rq| ¡ }z|j}W n	 ty   Y qw |ƒ  |¡D ]}|V  | |j ¡}t||jƒE d H  q$qd S r   )r   r#   Zget_global_filterÚAttributeErrorr5   Zcreate_contextr(   r*   )r   Úsearch_namer   r+   ÚmethodZglobal_nameÚcr   r   r   r$   b   s    €

ÿý÷r$   Fc                    s†  ˆj }|j}zd|_tˆ|ƒ}W d|_nd|_w t|ƒ‰ ˆg}|sDtdd„ |D ƒƒD ]}|ˆkrC|jd urC|jj| 	¡ j
v rC| |¡ q*|sOtdd„ |D ƒƒrR|}nt|||ƒ}i }	|D ]U‰ˆj ¡  |g ¡D ]I}
ttˆ|
ƒƒ}t‡ fdd„|D ƒƒr¢ˆ  |¡ |D ]}|	 |g ¡D ]}ˆ  |¡ qŠz|	|= W q‚ ty    Y q‚w qg|D ]}|	 |g ¡ |¡ q¤qgq\ˆ  ¡ }|rÁ‡fdd„|D ƒS |S )	NFTc                 s   s   � | ]}|  ¡ V  qd S r   ©r#   )r   Údr   r   r   r   ‚   ó   € z"find_references.<locals>.<genexpr>c                 s   s   � | ]}|j d kV  qdS )r   N)r   r   r   r   r   r   ‡   ó   € c                 3   s   � | ]}|ˆ v V  qd S r   r   )r   r   )Úfound_names_dctr   r   r   ”   r?   c                    s   g | ]
}|  ¡ ˆ kr|‘qS r   r=   r   )r+   r   r   Ú
<listcomp>¤   s    z#find_references.<locals>.<listcomp>)Úinference_stater%   Zflow_analysis_enabledr-   r   r"   r4   ÚprojectÚpathÚ
py__file__ÚparentsÚappendÚanyÚ#get_module_contexts_containing_nameZget_used_namesr5   r    ÚupdateÚKeyErrorÚ
setdefaultÚvalues)r+   r   Zonly_in_moduleÚinfr:   r,   Úmodule_contextsÚmZpotential_modulesZnon_matching_reference_mapsZ	name_leafÚnewÚdctr   Úresultr   )rA   r+   r   Úfind_referencesr   sX   
€ý

ÿù
ÿòrU   c                 C   sf   z|  ¡ }W n
 ty   Y d S w t|dd�}| |¡sd S t|j|ƒ}t| |ƒ}| ¡ r/d S | ¡ S )NÚreplace)Úerrors)	ÚreadÚFileNotFoundErrorr   Úsearchr   rE   r   Úis_compiledZ
as_context)rC   Úfile_ioÚregexÚcodeZnew_file_iorQ   r   r   r   Ú	_check_fs¨   s   ÿ

r_   c                 C   s˜   t ƒ }t ƒ }| ¡  ¡ D ];}|r| d¡s| d¡sd|v rq| dd¡ d¡}d|v r=| d¡}| tj	 
| j	|¡¡ q|}| | j	|f¡ q||fS )Nó   #ó   !ó   *zutf-8Úignoreú/)r"   rX   Ú
splitlinesÚ
startswithÚdecodeÚrstripÚlstripr.   ÚosrE   Újoin)Ú	folder_ior\   Úignored_paths_absÚignored_paths_relÚlÚpr   r   r   r   Úgitignored_paths·   s    
rq   c                    s   | j ‰ ‡ fdd„|D ƒS )Nc                    s,   h | ]}ˆ   |d  ¡rtj ˆ |d ¡’qS )r   é   )rf   rj   rE   rk   ©r   rp   ©Z	curr_pathr   r   Ú	<setcomp>Ì   s   , z/expand_relative_ignore_paths.<locals>.<setcomp>©rE   )rl   Zrelative_pathsr   rt   r   Úexpand_relative_ignore_pathsÊ   s   rw   c           
      #   s¶   � t ˆ ƒ‰ t ƒ }|  ¡ D ]L\}}}|D ]'}|j}|jdv r&|ˆ vr&d |fV  |jdkr:t||ƒ\}}	ˆ |O ‰ ||	O }qt||ƒ‰‡ ‡fdd„|D ƒ|d d …< |D ]} | d fV  qPqd S )N)z.pyz.pyiz
.gitignorec                    s0   g | ]}|j ˆ vr|j ˆvr| ¡ tvr|‘qS r   )rE   Zget_base_nameÚ_IGNORE_FOLDERS)r   rl   ©Úexcept_pathsZexcept_paths_relative_expandedr   r   rB   æ   s    

üz9recurse_find_python_folders_and_files.<locals>.<listcomp>)r"   ÚwalkrE   Úsuffixr   rq   rw   )
rl   rz   Zexcept_paths_relativeZroot_folder_ioZ
folder_iosZfile_iosr\   rE   rm   rn   r   ry   r   Ú%recurse_find_python_folders_and_filesÏ   s4   €


ÿ€ÿþÿær}   c                 c   s(   � t | |ƒD ]\} }|d ur|V  qd S r   )r}   )rl   rz   r\   r   r   r   Úrecurse_find_python_filesñ   s   €€þr~   c                 #   s¤   � |   ¡ }tƒ }dd„ |D ƒ}|D ]>}| ¡ j}|d u rq| ¡ }	 |j‰ t‡ fdd„|D ƒƒr4ˆ |v r5nt||ƒD ]
}|j|vrD|V  q:| ˆ ¡ | ¡ }q"qd S )Nc                 S   ó   g | ]}|  ¡ ‘qS r   ©rF   ©r   rQ   r   r   r   rB   ú   ó    z2_find_python_files_in_sys_path.<locals>.<listcomp>Tc                 3   s   � | ]}ˆ   |¡V  qd S r   )rf   rs   rv   r   r   r     r@   z1_find_python_files_in_sys_path.<locals>.<genexpr>)	Zget_sys_pathr"   Ú	get_valuer\   Zget_parent_folderrE   rI   r~   r.   )rC   rP   Úsys_pathrz   Zyielded_pathsr+   r\   rl   r   rv   r   Ú_find_python_files_in_sys_path÷   s,   €

€
ø÷r…   c                 c   s,   � dd„ |D ƒ}t t| jjƒ|ƒE d H  d S )Nc                 S   r   r   r€   r�   r   r   r   rB     r‚   z)_find_project_modules.<locals>.<listcomp>)r~   r   rD   rE   )rC   rP   Zexcept_r   r   r   Ú_find_project_modules  s   €r†   rr   c                 c   sP   � |D ]
}|  ¡ r
q|V  qt|ƒdkrdS t| |ƒ}t| |||d�E dH  dS )z—
    Search a name in the directories of modules.

    :param limit_reduction: Divides the limits on opening/parsing files by this
        factor.
    é   N)Úlimit_reduction)r[   Úlenr†   Úsearch_in_file_ios)rC   rP   r   rˆ   r+   Úfile_io_iteratorr   r   r   rJ     s   €	
ÿrJ   c                 c   s¢   � t | }t| }d}d}t dt |¡ |rdnd ¡}	|D ]/}
|d7 }t| |
|	ƒ}|d urB|d7 }|V  ||krBtd|ƒ  d S ||krNtd|ƒ  d S qd S )Nr   z\bÚ rr   zHit limit of parsed files: %szHit limit of opened files: %s)Ú_PARSED_FILE_LIMITÚ_OPENED_FILE_LIMITÚreÚcompileÚescaper_   r   )rC   r‹   r   rˆ   ZcompleteZparse_limitZ
open_limitZfile_io_countZparsed_file_countr]   r\   rQ   r   r   r   rŠ   ,  s(   € 

þörŠ   )r   )F)rr   )rr   F)$rj   r�   Zparsor   Z
jedi.debugr   Zjedi.file_ior   r   Zjedi.inference.namesr   Zjedi.inference.importsr   Zjedi.inference.filtersr   Z!jedi.inference.gradual.conversionr	   rx   rŽ   r�   r   r   r-   r    r(   r$   rU   r_   rq   rw   r}   r~   r…   r†   rJ   rŠ   r   r   r   r   Ú<module>   s@    

6

"
ÿÿ