B
    7r\	                 @   sj   d Z ddlZddlmZ ddlmZ i Zdd Ze ZG dd de	Z
d	d
 Zdd Zdd Zdd ZdS )z
Loads functions that are mixed in to the standard library. E.g. builtins are
written in C (binaries), but my autocompletion only understands Python code. By
mixing in Python code, the autocompletion should work much better for builtins.
    N)chain)unicodec              C   sb   t jt jt} t j| d}i }x6t |D ](}|dr2t j||||d d < q2W |S )NZfakez.pym)ospathdirnameabspath__file__joinlistdirendswith)r   	base_pathZdct	file_name r   :lib/python3.7/site-packages/jedi/evaluate/compiled/fake.py_get_path_dict   s    
r   c               @   s   e Zd ZdS )FakeDoesNotExistN)__name__
__module____qualname__r   r   r   r   r      s   r   c          	   C   s   yt | S  tk
r   Y nX |}|dkr<| jjjdkr<d}yt| }W n tk
rd   d t |< d S X t|}| }W d Q R X | j	t
| t |< }||krt|d}d|jd _t|d}d|jd _|S )NZ__builtin__   builtinsopenZopen_python3   Zopen_python2)fake_modulesKeyErrorZenvironmentversion_infomajor
_path_dictr   readZlatest_grammarparser   _search_scopeZchildrenvalue)	evaluatorZmodule_nameZcheck_module_namer   fsourcemZ	open_funcr   r   r   _load_faked_module    s*    


r'   c             C   s0   x*t |  |  D ]}|jj|kr|S qW d S )N)r   Ziter_classdefsZiter_funcdefsnamer"   )ZscopeZobj_namesr   r   r   r!   ?   s    r!   c             C   s*   | j d k	r"t| j |}|d k	r"|S td S )N)Z	tree_noder!   r   )Zparent_contextr(   foundr   r   r   get_faked_with_parent_contextE   s
    
r+   c             C   s   t | |}|d krt|S )N)r'   r   )r#   Zstring_namemoduler   r   r   get_faked_moduleN   s    
r-   )__doc__r   	itertoolsr   Zjedi._compatibilityr   r   r   r   	Exceptionr   r'   r!   r+   r-   r   r   r   r   <module>   s   
	