B
    18\S                 @   st  d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dl	Zd dl
Z
d dlmZ d dlZddddd	d
ddddddgZeddZde_dd Zdd Zd*dd	Zd+dd
Zed,ddZd-ddZeejje dd ZG dd dZG d d dZy.d dlZd d!lmZ d.d"d#Zeee W n e k
r<   Y nX d$d Z!d/d%dZ"d&d Z#d'd Z$d(d Z%d)d Z&dS )0    )
namedtuple)singledispatchN)
ModuleTypeget_importeriter_importers
get_loaderfind_loaderwalk_packagesiter_modulesget_dataImpImporter	ImpLoader	read_codeextend_path
ModuleInfozmodule_finder name ispkgz.A namedtuple with minimal info about a module.c             C   sL   y
| j }W n4 tk
r>   | |}|d kr0d S tj||S X ||S d S )N)	find_specAttributeErrorfind_module	importlibutilspec_from_loader)findernamer   loader r   K/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/pkgutil.py	_get_spec   s    

r   c             C   s6   dd l }| d}|tjjkr"d S | d || S )Nr         )marshalreadr   r   MAGIC_NUMBERload)streamr   magicr   r   r   r   (   s    

 c          	   #   s   i fdd xt | |D ]}|V  |jryt|j W nN tk
r\   |d k	rX||j Y q tk
r   |d k	r~||j n Y qX ttj|j dd pg }  fdd| D } t	| |jd |E d H  qW d S )Nc             S   s   | |krdS d|| < d S )NTr   )pmr   r   r   seenR   s    zwalk_packages.<locals>.seen__path__c                s   g | ]} |s|qS r   r   ).0r&   )r(   r   r   
<listcomp>i   s    z!walk_packages.<locals>.<listcomp>.)
r
   ispkg
__import__r   ImportError	Exceptiongetattrsysmodulesr	   )pathprefixonerrorinfor   )r(   r   r	   5   s     c             c   sz   | d krt  }nt| tr$tdn
tt| }i }xB|D ]:}x4t||D ]&\}}||krHd||< t|||V  qHW q8W d S )Nz9path must be None or list of paths to look for modules in   )r   
isinstancestr
ValueErrormapr   iter_importer_modulesr   )r4   r5   Z	importersyieldedir   r-   r   r   r   r
   n   s    




c             C   s   t | dsg S | |S )Nr
   )hasattrr
   )importerr5   r   r   r   r=      s    
r=   c          	   c   s0  | j d kstj | j sd S i }dd l}yt| j }W n tk
rP   g }Y nX |  x|D ]}||}|dks`||krq`tj | j |}d}|stj |rd|kr|}yt|}	W n tk
r   g }	Y nX x&|	D ]}||}
|
dkrd}P qW q`|r`d|kr`d||< || |fV  q`W d S )Nr   __init__Fr,   Tr8   )	r4   osisdirinspectlistdirOSErrorsortgetmodulenamejoin)rA   r5   r>   rE   	filenamesfnmodnamer4   r-   dircontentssubnamer   r   r   _iter_file_finder_modules   s<    





rP   c            	   C   s.   t   t dt tdaW d Q R X d S )Nignoreimp)warningscatch_warningssimplefilterDeprecationWarningr   import_modulerR   r   r   r   r   _import_imp   s    
rX   c               @   s*   e Zd Zd	ddZd
ddZdddZdS )r   Nc             C   s   t dt t  || _d S )Nz5This emulation is deprecated, use 'importlib' instead)rS   warnrV   rX   r4   )selfr4   r   r   r   rB      s    zImpImporter.__init__c             C   s~   | dd }||kr$| jd kr$d S | jd kr4d }ntj| jg}yt||\}}}W n tk
rn   d S X t||||S )Nr,   )splitr4   rC   realpathrR   r   r/   r   )rZ   fullnamer4   rO   filefilenameetcr   r   r   r      s    
zImpImporter.find_moduler%   c          	   c   s0  | j d kstj | j sd S i }dd l}yt| j }W n tk
rP   g }Y nX |  x|D ]}||}|dks`||krq`tj | j |}d}|stj |rd|kr|}yt|}	W n tk
r   g }	Y nX x&|	D ]}||}
|
dkrd}P qW q`|r`d|kr`d||< || |fV  q`W d S )Nr   rB   Fr,   Tr8   )	r4   rC   rD   rE   rF   rG   rH   rI   rJ   )rZ   r5   r>   rE   rK   rL   rM   r4   r-   rN   rO   r   r   r   r
      s<    





zImpImporter.iter_modules)N)N)r%   )__name__
__module____qualname__rB   r   r
   r   r   r   r   r      s   

c               @   sj   e Zd Zd ZZdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dddZdddZdd ZdddZdS )r   Nc             C   s.   t dt t  || _|| _|| _|| _d S )Nz5This emulation is deprecated, use 'importlib' instead)rS   rY   rV   rX   r_   r`   r^   ra   )rZ   r^   r_   r`   ra   r   r   r   rB     s    zImpLoader.__init__c             C   s:   |    zt|| j| j| j}W d | jr4| j  X |S )N)_reopenrR   load_moduler_   r`   ra   close)rZ   r^   modr   r   r   rf     s    zImpLoader.load_modulec          	   C   s   t |d
}| S Q R X d S )Nrb)openr    )rZ   pathnamer_   r   r   r   r   %  s    zImpLoader.get_datac             C   sT   | j rP| j jrP| jd }|tjkr2t| jd| _ n|tjtjfkrPt| jd| _ d S )N   rri   )	r_   closedra   rR   	PY_SOURCErj   r`   PY_COMPILEDC_EXTENSION)rZ   mod_typer   r   r   re   )  s    

zImpLoader._reopenc             C   s0   |d kr| j }n|| j kr,td| j |f |S )Nz,Loader for module %s cannot handle module %s)r^   r/   )rZ   r^   r   r   r   	_fix_name1  s    
zImpLoader._fix_namec             C   s   |  |}| jd tjkS )Nrl   )rs   ra   rR   PKG_DIRECTORY)rZ   r^   r   r   r   
is_package9  s    
zImpLoader.is_packagec             C   s   |  |}| jd kr| jd }|tjkrD| |}t|| jd| _nJ|tjkrv| 	  zt
| j| _W d | j  X n|tjkr|   | _| jS )Nrl   exec)rs   codera   rR   ro   
get_sourcecompiler`   rp   re   r   r_   rg   rt   _get_delegateget_code)rZ   r^   rr   sourcer   r   r   r{   =  s    






zImpLoader.get_codec          	   C   s   |  |}| jd kr| jd }|tjkrP|   z| j | _W d | j  X nd|tj	krt
j| jd d rt| jd d d}| | _W d Q R X n|tjkr|   | _| jS )Nrl   r[   rm   )rs   r|   ra   rR   ro   re   r_   r    rg   rp   rC   r4   existsr`   rj   rt   rz   rx   )rZ   r^   rr   fr   r   r   rx   N  s    





zImpLoader.get_sourcec             C   s   t | j}t|d}|jS )NrB   )r   r`   r   r   )rZ   r   specr   r   r   rz   `  s    

zImpLoader._get_delegatec             C   sH   |  |}| jd }|tjkr*|   S |tjtjtjfkrD| j	S d S )Nrl   )
rs   ra   rR   rt   rz   get_filenamero   rp   rq   r`   )rZ   r^   rr   r   r   r   r   e  s    


zImpLoader.get_filename)N)N)N)rb   rc   rd   rw   r|   rB   rf   r   re   rs   ru   r{   rx   rz   r   r   r   r   r   r     s   	

)zipimporterc       	      c   s   t tj| j }| j}t|}i }dd l}x|D ]}||s@q0||d  t	j
}t|dkr|d dr|d |krd||d < ||d  dfV  t|dkrq0||d }|dkrq0|r0d|kr0||kr0d||< || dfV  q0W d S )	Nr   rl   r8   z__init__.pyTrB   r,   F)sorted	zipimport_zip_directory_cachearchiver5   lenrE   
startswithr\   rC   seprI   )	rA   r5   ZdirlistZ_prefixZplenr>   rE   rL   rM   r   r   r   iter_zipimport_moduless  s*    

r   c             C   sn   yt j|  }W nZ tk
rh   xDt jD ]6}y|| }t j| | P W q& tk
rZ   Y q&X q&W d }Y nX |S )N)r2   path_importer_cacheKeyError
path_hooks
setdefaultr/   )Z	path_itemrA   	path_hookr   r   r   r     s    	

c             c   s   |  drd| }t|d| krV| dd }t|}t|dd }|d krhd S ntjE d H  tj	}x|D ]}t
|V  qnW d S )Nr,   z'Relative module name {!r} not supportedr   r)   )r   formatr/   
rpartitionr   rW   r1   r2   	meta_pathr4   r   )r^   msgpkg_nameZpkgr4   itemr   r   r   r     s    



c             C   sn   | t jkr t j|  } | d kr d S t| trb| }t|dd }|d k	rF|S t|dd d krZd S |j}n| }t|S )N
__loader____spec__)r2   r3   r9   r   r1   rb   r   )Zmodule_or_namemoduler   r^   r   r   r   r     s    


c             C   s   |  drd| }t|ytj| }W nF ttttfk
rr } z d}t|| t	|||W d d }~X Y nX |d k	r|j
S d S )Nr,   z'Relative module name {!r} not supportedz,Error while finding loader for {!r} ({}: {}))r   r   r/   r   r   r   r   	TypeErrorr;   typer   )r^   r   r   exr   r   r   r     s    

*c             C   s  t | ts| S |d }| d d  } |d\}}}|rbytj| j}W qh ttfk
r^   | S X ntj}x8|D ].}t |t	sqpt
|}|d k	rg }	t|dr||}
|
d k	r|
jpg }	nt|dr||\}}	x|	D ]}|| kr| | qW tj||}tj|rpyt|}W n8 tk
rT } ztjd||f  W d d }~X Y qpX |@ x8|D ]0}|d}|rb|drqb| | qbW W d Q R X qpW | S )Nz.pkgr,   r   r   zCan't open %s: %s

#)r9   listr   r2   r3   r)   r   r   r4   r:   r   r@   r   submodule_search_locationsr   appendrC   rJ   isfilerj   rG   stderrwriterstripr   )r4   r   Z	sname_pkgZparent_package_Z
final_nameZsearch_pathdirr   portionsr   ZportionZpkgfiler~   r   liner   r   r   r     sP    !







c             C   s   t j| }|d krd S |j}|d ks0t|ds4d S tj| pJt j	|}|d ks^t|dsbd S |
d}|dtj|j tjj| }||S )Nr   __file__/r   )r   r   r   r   r@   r2   r3   get
_bootstrap_loadr\   insertrC   r4   dirnamer   rJ   r   )packageresourcer   r   rh   partsZresource_namer   r   r   r   U  s    
)Nr%   N)Nr%   )r%   )r%   )r%   )r%   )'collectionsr   	functoolsr   Zsimplegenericr   importlib.utilimportlib.machineryrC   Zos.pathr2   typesr   rS   __all__r   __doc__r   r   r	   r
   r=   rP   register	machinery
FileFinderrX   r   r   r   r   r   r/   r   r   r   r   r   r   r   r   r   r   <module>   sP   

9

(Jc

^