B
    /d,                 @   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d1d"d#Zd2d$d%Zd&d' Z d(d) Z!d3d+d,Z"d4d-d.Z#dS )5    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   sJ   xD| D ]<}||krqt |ts$|V  |jdkrt| | E d H  qW d S )Nmodule)
isinstancer   api_type_resolve_namesgoto)Zdefinition_namesZavoid_namesnamer   r   f/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/jedi/inference/references.pyr      s    


r   c             C   s   t dd | D S )Nc             s   s&   | ]}|j d k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 | |}x2t|D ]&}|tt|g|   ddO }qW |tt||jO }xJt|D ]>}|jdks\|j	d ks\|j	j
jdkrq\|tt|j|jO }q\W 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 )N)Zcreate_namer    r   addr   )r)   r   r   r*   r   r   r   r   H   s    

r   c             c   s`   | j d krd S d }xHt| |d}t||}|s4P |E d H  t|dd d}|d j}qW d S )N)r'   until_positionc             S   s   | j S )N)	start_pos)xr   r   r   <lambda>^       z,_add_names_in_same_context.<locals>.<lambda>)keyr   )	tree_noder   r    getsortedr.   )contextr(   r-   filter_r   Zorderedr   r   r   r&   P   s    

r&   c          	   c   s   x|| D ]t}|j d krq| }y
|j}W n tk
r>   wY qX x8| |D ](}|V  ||j }t||jE d H  qNW qW d S )N)r   r!   Zget_global_filterAttributeErrorr4   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 d|_X t| g}|sxHtdd |D D ]2}|krP|jd k	rP|jj|	 j
krP|| qPW |stdd |D r|}nt|||}i }	x|D ]ȉxj |g D ]}
tt|
}t fdd|D rZ | xv|D ]J}x |	|g D ]} | qW y
|	|= W n tk
rP   Y nX q
W qx |D ]}|	|g | q`W qW qW   }|rfdd|D S |S )	NFTc             s   s   | ]}|  V  qd S )N)r!   )r   dr   r   r   r      s    z"find_references.<locals>.<genexpr>c             s   s   | ]}|j d kV  qdS )r   N)r   )r   r   r   r   r   r      s    c             3   s   | ]}| kV  qd S )Nr   )r   r   )found_names_dctr   r   r      s    c                s   g | ]}|   kr|qS r   )r!   )r   r   )r)   r   r   
<listcomp>   s    z#find_references.<locals>.<listcomp>)inference_stater#   Zflow_analysis_enabledr+   r   r    r3   projectpath
py__file__parentsappendany#get_module_contexts_containing_nameZget_used_namesr4   r   updateKeyError
setdefaultvalues)r)   r   Zonly_in_moduleinfr9   r*   module_contextsmZpotential_modulesZnon_matching_reference_mapsZ	name_leafnewdctr   resultr   )r=   r)   r   find_referencesr   sL    




 rQ   c             C   sf   y|  }W n tk
r    d S X t|dd}||s<d S t|j|}t| |}| r^d S | S )Nreplace)errors)	readFileNotFoundErrorr   searchr   rA   r   is_compiledZ
as_context)r?   file_ioregexcodeZnew_file_iorM   r   r   r   	_check_fs   s    

r[   c             C   s   t  }t  }x|  D ]v}|r|ds|dsd|kr@q|ddd}d|kr||d}|tj	
| j	| q|}|| j	|f qW ||fS )N   #   !   *zutf-8ignore/)r    rT   
splitlines
startswithdecoderstriplstripr,   osrA   join)	folder_iorX   ignored_paths_absignored_paths_rellpr   r   r   r   gitignored_paths   s     
rm   c                s   | j   fdd|D S )Nc                s,   h | ]$}  |d  rtj |d qS )r      )rb   rf   rA   rg   )r   rl   )	curr_pathr   r   	<setcomp>   s    z/expand_relative_ignore_paths.<locals>.<setcomp>)rA   )rh   Zrelative_pathsr   )ro   r   expand_relative_ignore_paths   s    rq   c       
      #   s   t   t  }x|  D ]\}}}xV|D ]N}|j}|jdkrN| krNd |fV  |jdkr(t||\}}	 |O  ||	O }q(W t|| fdd|D |d d < x|D ]} | d fV  qW qW d S )N)z.pyz.pyiz
.gitignorec                s0   g | ](}|j  kr|j kr| tkr|qS r   )rA   Zget_base_name_IGNORE_FOLDERS)r   rh   )except_pathsexcept_paths_relative_expandedr   r   r>      s   

z9recurse_find_python_folders_and_files.<locals>.<listcomp>)r    walkrA   suffixr   rm   rq   )
rh   rs   Zexcept_paths_relativeZroot_folder_ioZ
folder_iosZfile_iosrX   rA   ri   rj   r   )rs   rt   r   %recurse_find_python_folders_and_files   s&    




rw   c             c   s*   x$t | |D ]\} }|d k	r|V  qW d S )N)rw   )rh   rs   rX   r   r   r   recurse_find_python_files   s    rx   c             #   s   |   }t }dd |D }x|D ]}| j}|d kr:q"| }x`|j t fdd|D rh |krjP x"t||D ]}|j|krv|V  qvW |  | }qDW q"W d S )Nc             S   s   g | ]}|  qS r   )rB   )r   rM   r   r   r   r>      s    z2_find_python_files_in_sys_path.<locals>.<listcomp>c             3   s   | ]}  |V  qd S )N)rb   )r   rl   )rA   r   r   r     s    z1_find_python_files_in_sys_path.<locals>.<genexpr>)	Zget_sys_pathr    	get_valuerX   Zget_parent_folderrA   rE   rx   r,   )r?   rL   sys_pathrs   Zyielded_pathsr)   rX   rh   r   )rA   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   s   g | ]}|  qS r   )rB   )r   rM   r   r   r   r>     s    z)_find_project_modules.<locals>.<listcomp>)rx   r   r@   rA   )r?   rL   Zexcept_r   r   r   _find_project_modules  s    r|   rn   c             c   sR   x|D ]}|  rq|V  qW 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)rW   lenr|   search_in_file_ios)r?   rL   r   r~   r)   file_io_iteratorr   r   r   rF     s    	


rF   c             c   s   t | }t| }d}d}tdt| |r0dnd }	x^|D ]V}
|d7 }t| |
|	}|d k	r|d7 }|V  ||krtd| P ||kr>td| P q>W d S )Nr   z\b rn   zHit limit of parsed files: %szHit limit of opened files: %s)_PARSED_FILE_LIMIT_OPENED_FILE_LIMITrecompileescaper[   r   )r?   r   r   r~   ZcompleteZparse_limitZ
open_limitZfile_io_countZparsed_file_countrY   rX   rM   r   r   r   r   ,  s"     


r   )r   )F)r   )r   )rn   )rn   F)$rf   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	   rr   r   r   r   r   r+   r   r&   r"   rQ   r[   rm   rq   rw   rx   r{   r|   rF   r   r   r   r   r   <module>   s6   

6
"

