B
    ™^X"  ã               @   sj   d dl Z d dlZd dlZd dlmZ G dd„ deƒZG dd„ deƒZeƒ Ze j	 
e¡ e e jd ¡ dS )é    N)Úimport_modulec               @   sL   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ Zddd„Zdd„ Z	dd„ Z
dS )Ú	TlzLoaderz< Finds and loads ``tlz`` modules when added to sys.meta_pathc             C   s   t tjgƒ| _d S )N)ÚsetÚtoolzÚpipeÚalways_from_toolz)Úself© r	   ú-lib/python3.7/site-packages/tlz/_build_tlz.pyÚ__init__	   s    zTlzLoader.__init__c             C   s   i }|  d¡\}}}y d d||g¡}t|ƒ|d< W n tk
rH   Y nX y d d||g¡}t|ƒ|d< W n tk
r~   Y nX |sŒt|ƒ‚|S )NÚ.Ú Úcytoolzr   )Ú	partitionÚjoinr   ÚImportError)r   ÚfullnameÚrvÚpackageÚdotÚ
submodulesÚmodule_namer	   r	   r
   Ú_load_toolz   s    zTlzLoader._load_toolzNc             C   s    |  d¡\}}}|dkr| S d S )Nr   Útlz)r   )r   r   Úpathr   r   r   r	   r	   r
   Úfind_module   s    zTlzLoader.find_modulec             C   s@   |t jkrt j| S t|| ƒ}|  |¡}|t j|< |  |¡ |S )N)ÚsysÚmodulesÚTlzSpecÚcreate_moduleÚexec_module)r   r   ÚspecÚmoduler	   r	   r
   Úload_module$   s    





zTlzLoader.load_modulec             C   s&   |  d¡\}}}|dkr"t|| ƒS d S )Nr   r   )r   r   )r   r   r   Útargetr   r   r   r	   r	   r
   Ú	find_spec-   s    zTlzLoader.find_specc             C   s   t  |j¡S )N)ÚtypesÚ
ModuleTypeÚname)r   r!   r	   r	   r
   r   2   s    zTlzLoader.create_modulec          	   C   s>  |   |j¡}| d¡p|d }| d¡p.|d }|j t |j|j¡¡ |j}|d k	rx| d¡\}}}d 	d||g¡|_|j
s†|j
|_
|j|_xª|j ¡ D ]œ\}}	|j |¡}
yt|
ƒ W n tk
rÒ   d }
Y nX |
| jkrê|
|j|< qšt|	tjƒrš|	j|jkrš|	j d¡\}}}d 	d||g¡}t|ƒ}||j|< qšW d S )Nr   r   r   r   r   )r   Ú__name__ÚgetÚ__dict__Úupdater   ÚmergeÚ__package__r   r   Ú__doc__Ú__file__ÚitemsÚhashÚ	TypeErrorr   Ú
isinstancer&   r'   r   )r   r"   Z
toolz_modsZfast_modZslow_modr   r   r   ÚkÚvZtvr   Z	submoduler	   r	   r
   r    5   s2    

zTlzLoader.exec_module)N)N)r)   Ú
__module__Ú__qualname__r/   r   r   r   r#   r%   r   r    r	   r	   r	   r
   r      s   
	
r   c               @   s   e Zd Zdd„ ZdS )r   c             C   s4   || _ || _d | _g | _d | _d | _d | _d| _d S )NF)r(   ÚloaderÚoriginÚsubmodule_search_locationsÚloader_stateÚcachedÚparentÚhas_location)r   r(   r9   r	   r	   r
   r   W   s    zTlzSpec.__init__N)r)   r7   r8   r   r	   r	   r	   r
   r   V   s   r   r   )r   r&   r   Ztoolz.compatibilityr   Úobjectr   r   Z
tlz_loaderÚ	meta_pathÚappendr    r   r	   r	   r	   r
   Ú<module>   s   O