o
    Zh,                     @   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   P/var/www/html/lang_env/lib/python3.10/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 ]} | qz|	|= W q ty   Y qw qg|D ]}|	|g | qqgq\  }|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

"
