
nWR                 @   s  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 g Z d d   Z d d   Z d d d d d  Z d d d d	  Z e d d d   Z d d d  Z e j e j j e  d d   Z Gd d   d  Z Gd d   d  Z y? d  d l Z d  d l m Z d d d  Z e j e e  Wn e k
 rYn Xd  d   Z d d! d  Z d" d   Z d# d   Z  d$ d   Z! d% d
   Z" d S)&    )singledispatchN)
ModuleTypeget_importeriter_importers
get_loaderfind_loaderwalk_packagesiter_modulesget_dataImpImporter	ImpLoader	read_codeextend_pathc             C   sb   y |  j  } WnD t k
 rS |  j |  } | d  k r< d  St j j | |  SYn X| |  Sd  S)N)	find_specAttributeErrorfind_module	importlibutilspec_from_loader)findernamer   loader r   ?/afs/cs.wisc.edu/s/python-3.5.2/src/Python-3.5.2/Lib/pkgutil.py	_get_spec   s    r   c             C   sK   d d  l  } |  j d  } | t j j k r1 d  S|  j d  | j |   S)Nr         )marshalreadr   r   MAGIC_NUMBERload)streamr   magicr   r   r   r   "   s     c             #   s  i  d d    x t  |  |  D] \ } } } | | | f V| r y t |  WnU t k
 rz | d  k	 rv | |  Yq t k
 r | d  k	 r | |  n   Yq Xt t j | d d   p g  }    f d d   |  D }  t |  | d |  Ed  Hq Wd  S)Nc             S   s   |  | k r d Sd | |  <d  S)NTr   )pmr   r   r   seenL   s    zwalk_packages.<locals>.seen__path__c                s"   g  |  ] }   |  s |  q Sr   r   ).0r$   )r&   r   r   
<listcomp>c   s   	 z!walk_packages.<locals>.<listcomp>.)r	   
__import__ImportError	Exceptiongetattrsysmodulesr   )pathprefixonerrorimporterr   ispkgr   )r&   r   r   /   s     c             c   s   |  d  k r t    } n t t |   } i  } xR | D]J } xA t | |  D]0 \ } } | | k rJ d | | <| | | f VqJ Wq4 Wd  S)N   )r   mapr   iter_importer_modules)r1   r2   Z	importersyieldedir   r5   r   r   r   r	   h   s    
c             C   s    t  |  d  s g  S|  j |  S)Nr	   )hasattrr	   )r4   r2   r   r   r   r8      s    r8   c             c   s  |  j  d  k s% t j  j |  j   r) d  Si  } d d  l } y t j |  j   } Wn t k
 rk g  } Yn X| j   x| D]} | j |  } | d k s} | | k r q} t j  j |  j  |  } d } | rZt j  j |  rZd | k rZ| } y t j |  }	 Wn t k
 r#g  }	 Yn Xx3 |	 D]( } | j |  }
 |
 d k r+d } Pq+Wq} | r} d | k r} d | | <| | | f Vq} Wd  S)Nr   __init__Fr*   Tr6   )	r1   osisdirinspectlistdirOSErrorsortgetmodulenamejoin)r4   r2   r9   r?   	filenamesfnmodnamer1   r5   dircontentssubnamer   r   r   _iter_file_finder_modules   s<    %
%
rJ   c            
   C   s7   t  j   $ t  j d t  t j d  a Wd  QRXd  S)Nignoreimp)warningscatch_warningssimplefilterPendingDeprecationWarningr   import_modulerL   r   r   r   r   _import_imp   s    rR   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  j d t  t   | |  _ d  S)Nz5This emulation is deprecated, use 'importlib' instead)rM   warnDeprecationWarningrR   r1   )selfr1   r   r   r   r<      s    	zImpImporter.__init__c             C   s   | j  d  d } | | k r2 |  j d  k r2 d  S|  j d  k rJ d  } n t j j |  j  g } y t j | |  \ } } } Wn t k
 r d  SYn Xt | | | |  S)Nr*   r6   )splitr1   r=   realpathrL   r   r,   r   )rU   fullnamer1   rI   filefilenameetcr   r   r   r      s    		zImpImporter.find_moduler#   c             c   s  |  j  d  k s% t j  j |  j   r) d  Si  } d d  l } y t j |  j   } Wn t k
 rk g  } Yn X| j   x| D]} | j |  } | d k s} | | k r q} t j  j |  j  |  } d } | rZt j  j |  rZd | k rZ| } y t j |  }	 Wn t k
 r#g  }	 Yn Xx3 |	 D]( } | j |  }
 |
 d k r+d } Pq+Wq} | r} d | k r} d | | <| | | f Vq} Wd  S)Nr   r<   Fr*   Tr6   )	r1   r=   r>   r?   r@   rA   rB   rC   rD   )rU   r2   r9   r?   rE   rF   rG   r1   r5   rH   rI   r   r   r   r	      s<    %
%
zImpImporter.iter_modules)__name__
__module____qualname__r<   r   r	   r   r   r   r   r      s   c               @   s   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  j d t  t   | |  _ | |  _ | |  _ | |  _ d  S)Nz5This emulation is deprecated, use 'importlib' instead)rM   rS   rT   rR   rZ   r[   rY   r\   )rU   rY   rZ   r[   r\   r   r   r   r<   	  s    				zImpLoader.__init__c             C   sM   |  j    z% t j | |  j |  j |  j  } Wd  |  j rH |  j j   X| S)N)_reopenrL   load_modulerZ   r[   r\   close)rU   rY   modr   r   r   ra     s    
%	zImpLoader.load_modulec          	   C   s'   t  | d   } | j   SWd  QRXd  S)Nrb)openr   )rU   pathnamerZ   r   r   r   r
     s    zImpLoader.get_datac             C   sz   |  j  rv |  j  j rv |  j d } | t j k rI t |  j d  |  _  n- | t j t j f k rv t |  j d  |  _  d  S)N   rrd   )	rZ   closedr\   rL   	PY_SOURCEre   r[   PY_COMPILEDC_EXTENSION)rU   mod_typer   r   r   r`   !  s    zImpLoader._reopenc             C   sD   | d  k r |  j  } n( | |  j  k r@ t d |  j  | f   | S)Nz,Loader for module %s cannot handle module %s)rY   r,   )rU   rY   r   r   r   	_fix_name)  s    zImpLoader._fix_namec             C   s#   |  j  |  } |  j d t j k S)Nrg   )rn   r\   rL   PKG_DIRECTORY)rU   rY   r   r   r   
is_package1  s    zImpLoader.is_packagec          
   C   s   |  j  |  } |  j d  k r |  j d } | t j k rd |  j |  } t | |  j d  |  _ ng | t j k r |  j	   z t
 |  j  |  _ Wd  |  j j   Xn$ | t j k r |  j   j   |  _ |  j S)Nrg   exec)rn   coder\   rL   rj   
get_sourcecompiler[   rk   r`   r   rZ   rb   ro   _get_delegateget_code)rU   rY   rm   sourcer   r   r   rv   5  s    
zImpLoader.get_codec          
   C   s   |  j  |  } |  j d  k r |  j d } | t j k rn |  j   z |  j j   |  _ Wd  |  j j   Xn | t j	 k r t
 j j |  j d  d   r t |  j d  d  d   } | j   |  _ Wd  QRXn$ | t j k r |  j   j   |  _ |  j S)Nrg   r6   rh   rV   rV   )rn   rw   r\   rL   rj   r`   rZ   r   rb   rk   r=   r1   existsr[   re   ro   ru   rs   )rU   rY   rm   fr   r   r   rs   F  s    
zImpLoader.get_sourcec             C   s%   t  |  j  } t | d  } | j S)Nr<   )r   r[   r   r   )rU   r   specr   r   r   ru   X  s    zImpLoader._get_delegatec             C   sd   |  j  |  } |  j d } | t j k r; |  j   j   S| t j t j t j f k r` |  j	 Sd  S)Nrg   )
rn   r\   rL   ro   ru   get_filenamerj   rk   rl   r[   )rU   rY   rm   r   r   r   r{   ]  s    zImpLoader.get_filename)r]   r^   r_   rr   rw   r<   ra   r
   r`   rn   rp   rv   rs   ru   r{   r   r   r   r   r     s   
	)zipimporterc       	      c   sD  t  t j |  j  } |  j } t |  } i  } d d  l } x | D] } | j |  s\ qD | | d   j t	 j
  } t |  d k r | d j d  r | d | k r d | | d <| | d d f Vt |  d k r qD | j | d  } | d k rqD | rD d | k rD | | k rD d | | <| | d f VqD Wd  S)	Nr   rg   r6   z__init__.pyTr<   r*   F)sorted	zipimport_zip_directory_cachearchiver2   lenr?   
startswithrW   r=   seprC   )	r4   r2   ZdirlistZ_prefixZplenr9   r?   rF   rG   r   r   r   iter_zipimport_modulesk  s*    	%
r   c             C   s}   y t  j |  } Wne t k
 rx xP t  j D]? } y$ | |   } t  j j |  |  PWq+ t k
 ri Yq+ Xq+ Wd  } Yn X| S)N)r/   path_importer_cacheKeyError
path_hooks
setdefaultr,   )Z	path_itemr4   	path_hookr   r   r   r     s    		c             c   s   |  j  d  r* d j |   } t |   d |  k r} |  j d  d } t j |  } t | d d   } | d  k r d  Sn t j Ed  Ht j	 } x | D] } t
 |  Vq Wd  S)Nr*   z'Relative module name {!r} not supportedr   r'   )r   formatr,   
rpartitionr   rQ   r.   r/   	meta_pathr1   r   )rY   msgpkg_nameZpkgr1   itemr   r   r   r     s    	c             C   s   |  t  j k r, t  j |  }  |  d  k r, d  St |  t  r |  } t | d d   } | d  k	 rc | St | d d   d  k r d  S| j } n |  } t |  S)N
__loader____spec__)r/   r0   
isinstancer   r.   r]   r   )Zmodule_or_namemoduler   rY   r   r   r   r     s    c             C   s   |  j  d  r* d j |   } t |   y t j j |   } Wn[ t t t t f k
 r } z/ d } t | j |  t	 |  |   |  WYd  d  } ~ Xn X| d  k	 r | j
 Sd  S)Nr*   z'Relative module name {!r} not supportedz,Error while finding loader for {!r} ({}: {}))r   r   r,   r   r   r   r   	TypeError
ValueErrortyper   )rY   r   rz   exr   r   r   r     s    7c             C   s&  t  |  t  s |  S| d } |  d  d   }  | j d  \ } } } | r y t j | j } Wq t t f k
 r} |  SYq Xn	 t j } x| D]} t  | t	  s q t
 |  } | d  k	 rQg  }	 t | d  r| j |  }
 |
 d  k	 r'|
 j p g  }	 n$ t | d  r'| j |  \ } }	 x' |	 D] } | |  k r.|  j |  q.Wt j j | |  } t j j |  r y t |  } Wn? t k
 r} z t j j d | | f  WYd  d  } ~ Xq X| K xC | D]; } | j d  } | s| j d  rq|  j |  qWWd  QRXq W|  S)Nz.pkgr*   r   r   zCan't open %s: %s

#)r   listr   r/   r0   r'   r   r   r1   strr   r;   r   submodule_search_locationsr   appendr=   rD   isfilere   rA   stderrwriterstripr   )r1   r   Z	sname_pkgZparent_package_Z
final_nameZsearch_pathdirr   portionsrz   ZportionZpkgfilery   r   liner   r   r   r     sP    !
	!c             C   s   t  j j |   } | d  k r" d  S| j } | d  k sG t | d  rK d  St j j |   pl t  j j	 |  } | d  k s t | d  r d  S| j
 d  } | j d t j j | j   t j j |   } | j |  S)Nr
   __file__/r   )r   r   r   r   r;   r/   r0   get
_bootstrap_loadrW   insertr=   r1   dirnamer   rD   r
   )packageZresourcerz   r   rc   partsZresource_namer   r   r   r
   M  s    	)#	functoolsr   Zsimplegenericr   importlib.utilimportlib.machineryr=   Zos.pathr/   typesr   rM   __all__r   r   r   r	   r8   rJ   register	machinery
FileFinderrR   r   r   r~   r|   r   r,   r   r   r   r   r   r
   r   r   r   r   <module>   sH   	9(Jc^