U
    ª/eG  ã                   @   sd   d dl Z d dlZd dlZd dlmZ d dlmZ G dd„ dƒZeƒ Ze j	 
e¡ e e jd ¡ dS )é    N)Úimport_module)Ú
ModuleSpecc                   @   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 jh| _d S ©N)ÚtoolzÚpipeÚalways_from_toolz)Úself© r
   ú2/tmp/pip-unpacked-wheel-zr66a21f/tlz/_build_tlz.pyÚ__init__
   s    ÿzTlzLoader.__init__c                 C   s   i }|  d¡\}}}z d d||g¡}t|ƒ|d< W n tk
rH   Y nX z 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 r   )ÚsysÚmodulesr   Ú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 r   )r   r   )r	   r   r   Útargetr   r   r   r
   r
   r   Ú	find_spec.   s    zTlzLoader.find_specc                 C   s   t  |j¡S r   )ÚtypesÚ
ModuleTypeÚname)r	   r"   r
   r
   r   r    3   s    zTlzLoader.create_modulec              	   C   sV  |   |j¡}| d¡p|d }| d¡p.|d }|j t |j|j¡¡ |j}|d k	rx| d¡\}}}d 	d||g¡|_|j
s†|j
|_
z|j|_W n tk
r¦   Y nX |j ¡ D ]ž\}}	|j |¡}
z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²d S )Nr   r   r   r   r   )r   Ú__name__ÚgetÚ__dict__Úupdater   ÚmergeÚ__package__r   r   Ú__doc__Ú__file__ÚAttributeErrorÚitemsÚhashÚ	TypeErrorr   Ú
isinstancer'   r(   r   )r	   r#   Z
toolz_modsZfast_modZslow_modr   r   r   ÚkÚvÚtvr   Ú	submoduler
   r
   r   r!   6   s<    

ÿ
þzTlzLoader.exec_module)N)N)r*   Ú
__module__Ú__qualname__r0   r   r   r   r$   r&   r    r!   r
   r
   r
   r   r      s   
	
r   r   )r   r'   r   Ú	importlibr   Zimportlib.machineryr   r   Z
tlz_loaderÚ	meta_pathÚappendr!   r   r
   r
   r
   r   Ú<module>   s   R