a
    ze                     @   s  d dl a d dlZd dlad dlZd dlZtjdkZerHd dlZd dl	Z	nd dl
Zer^ddgZndgZed  ZeeZdeZdd eD ZdZd	Zee Zd
d Zdd Zdd Zdd Zerdd Zndd Zdd Zdd Zdd Zdd Zdd Zer
dd  Znd!d  Zdld#d$Ze ej!Z"d%#d&d'd( Z$e%&e$d'Z'd)Z(d*Z)d+gZ*d,gZ+e+ Z,Z-dmdd-d.d/Z.d0d1 Z/d2d3 Z0d4d5 Z1d6d7 Z2d8d9 Z3d:d; Z4d<d= Z5d>d? Z6d@dA Z7dndBdCZ8dodDdEZ9dpdGdHZ:dIdJ Z;e< Z=dqde=dKdLdMZ>G dNdO dOZ?G dPdQ dQZ@G dRdS dSe@ZAG dTdU dUZBG dVdW dWeBeAZCG dXdY dYeBe@ZDg ZEG dZd[ d[eBe@ZFG d\d] d]ZGG d^d_ d_ZHG d`da daZIG dbdc dcZJdrdddeZKdfdg ZLdhdi ZMdjdk ZNdS )s    Nwin32\/ c                 C   s   h | ]}d | qS : .0sr   r   3/usr/lib/python3.9/importlib/_bootstrap_external.py	<setcomp>/       r   )win)cygwindarwinc                     s<   t jtr0t jtrd nd  fdd} ndd } | S )NPYTHONCASEOKs   PYTHONCASEOKc                      s   t jj o tjv S N)sysflagsignore_environment_osenvironr   keyr   r   _relax_case@   s    z%_make_relax_case.<locals>._relax_casec                   S   s   dS )NFr   r   r   r   r   r   D   s    )r   platform
startswith_CASE_INSENSITIVE_PLATFORMS#_CASE_INSENSITIVE_PLATFORMS_STR_KEY)r   r   r   r   _make_relax_case9   s    r    c                 C   s   t | d@ ddS )N       little)intto_bytes)xr   r   r   _pack_uint32J   s    r'   c                 C   s   t | dS Nr#   r$   
from_bytesdatar   r   r   _unpack_uint32O   s    r-   c                 C   s   t | dS r(   r)   r+   r   r   r   _unpack_uint16T   s    r.   c                  G   s   | sdS t | dkr| d S d}g }ttj| D ]z\}}|tsL|trf|tpX|}t	| g}q0|dr|
 |
 kr|}|g}q|| q0|p|}|| q0dd |D }t |dkr|d s|t	 S |t	| S )Nr      r   r   c                 S   s   g | ]}|r| tqS r   rstrippath_separatorsr
   pr   r   r   
<listcomp>r   r   _path_join.<locals>.<listcomp>)lenmapr   _path_splitrootr   path_sep_tupleendswithr1   r2   path_sepcasefoldappendjoin)
path_partsrootpathZnew_roottailr   r   r   
_path_join[   s*    
rD   c                  G   s   t dd | D S )Nc                 S   s   g | ]}|r| tqS r   r0   )r
   partr   r   r   r5   {   s   r6   )r<   r?   )r@   r   r   r   rD   y   s    
c                    sB   t  fddtD }|dk r&d fS  d |  |d d  fS )Nc                 3   s   | ]}  |V  qd S r   )rfindr3   rB   r   r   	<genexpr>   r   z_path_split.<locals>.<genexpr>r   r   r/   )maxr2   )rB   ir   rG   r   _path_split   s    rK   c                 C   s
   t | S r   )r   statrG   r   r   r   
_path_stat   s    rM   c                 C   s0   zt | }W n ty    Y dS 0 |jd@ |kS )NFi   )rM   OSErrorst_mode)rB   mode	stat_infor   r   r   _path_is_mode_type   s
    rR   c                 C   s
   t | dS )Ni   )rR   rG   r   r   r   _path_isfile   s    rS   c                 C   s   | st  } t| dS )Ni @  )r   getcwdrR   rG   r   r   r   _path_isdir   s    rU   c                 C   s>   | sdS t | d dd}t|dko<|dp<|dS )NFr   r   r   r/   z\\)r   r9   replacer7   r   r;   )rB   rA   r   r   r   _path_isabs   s    rW   c                 C   s
   |  tS r   )r   r2   rG   r   r   r   rW      s      c                 C   s   d | t| }t|tjtjB tjB |d@ }zFt|d}|	| W d    n1 s^0    Y  t
||  W n6 ty   zt| W n ty   Y n0  Y n0 d S )N{}.{}rX   wb)formatidr   openO_EXCLO_CREATO_WRONLY_ioFileIOwriterV   rN   unlink)rB   r,   rP   path_tmpfdfiler   r   r   _write_atomic   s    (rh   ia     r#   s   
__pycache__zopt-z.pyz.pyc)optimizationc                C   sX  |d ur4t dt |d ur(d}t||r0dnd}t| } t| \}}|d\}}}tj	j
}	|	d u rrtdd|r~|n|||	g}
|d u rtjjdkrd}ntjj}t|}|dkr| std|d	|
t|}
|
td  }tjd urLt|stt |}|d d
kr8|d tvr8|dd  }ttj|t|S t|t|S )NzFthe debug_override parameter is deprecated; use 'optimization' insteadz2debug_override or optimization must be set to Noner   r/   .$sys.implementation.cache_tag is Noner   z{!r} is not alphanumericz{}.{}{}r   ri   )	_warningswarnDeprecationWarning	TypeErrorr   fspathrK   
rpartitionr   implementation	cache_tagNotImplementedErrorr?   r   optimizestrisalnum
ValueErrorr[   _OPTBYTECODE_SUFFIXESpycache_prefixrW   rD   rT   r2   lstrip_PYCACHE)rB   debug_overriderk   messageheadrC   basesepresttagalmost_filenamefilenamer   r   r   cache_from_sourcei  sH    
	
r   c           
      C   s.  t jjd u rtdt| } t| \}}d}t jd urft jt	}|
|t rf|t|d  }d}|st|\}}|tkrtt d| |d}|dvrtd|n\|dkr|dd	d
 }|
tstdt|ttd  }| std|d|dd }	t||	td  S )Nrm   FTz not bottom-level directory in rl   >   ri      zexpected only 2 or 3 dots in r   ri   z5optimization portion of filename does not start with zoptimization level z is not an alphanumeric valuer   )r   rt   ru   rv   r   rr   rK   r}   r1   r2   r   r<   r7   r   rz   countrsplitr{   ry   	partitionrD   SOURCE_SUFFIXES)
rB   r   pycache_filenamefound_in_pycache_prefixstripped_pathpycache	dot_countrk   	opt_levelbase_filenamer   r   r   source_from_cache  s<    	





r   c              	   C   s|   t | dkrd S | d\}}}|r8| dd dkr<| S zt| }W n" ttfyj   | d d }Y n0 t|rx|S | S )Nr   rl   py)r7   rs   lowerr   rv   rz   rS   )bytecode_pathr   _	extensionsource_pathr   r   r   _get_sourcefile  s    r   c                 C   sH   |  ttr.z
t| W S  ty*   Y qD0 n|  ttr@| S d S d S r   )r;   tupler   r   rv   r|   )r   r   r   r   _get_cached  s    
r   c                 C   s2   zt | j}W n ty$   d}Y n0 |dO }|S )NrX      )rM   rO   rN   )rB   rP   r   r   r   
_calc_mode  s    
r   c                    sB   d fdd	}z
t j}W n ty2   dd }Y n0 ||  |S )Nc                    sH   |d u r| j }n | j |kr0td| j |f |d | |g|R i |S )Nzloader for %s cannot handle %sname)r   ImportError)selfr   argskwargsmethodr   r   _check_name_wrapper  s    
z(_check_name.<locals>._check_name_wrapperc                 S   s8   dD ] }t ||rt| |t|| q| j|j d S )N)
__module____name____qualname____doc__)hasattrsetattrgetattr__dict__update)newoldrV   r   r   r   _wrap  s    
z_check_name.<locals>._wrap)N)
_bootstrapr   	NameError)r   r   r   r   r   r   _check_name  s    

r   c                 C   s<   |  |\}}|d u r8t|r8d}t||d t |S )Nz,Not importing directory {}: missing __init__r   )find_loaderr7   rn   ro   r[   ImportWarning)r   fullnameloaderportionsmsgr   r   r   _find_module_shim  s
    
r   c                 C   s   | d d }|t kr@d|d|}td| t|fi |t| dk rjd|}td| t|t| dd }|d@ rd	|d
|}t|fi ||S )Nr"   zbad magic number in z: {}   z(reached EOF while reading pyc header of    zinvalid flags z in )MAGIC_NUMBERr   _verbose_messager   r7   EOFErrorr-   )r,   r   exc_detailsmagicr   r   r   r   r   _classify_pyc0  s    
r   c                 C   sx   t | dd |d@ kr>d|}td| t|fi ||d urtt | dd |d@ krttd|fi |d S )Nr      r!   zbytecode is stale for r   r   )r-   r   r   r   )r,   source_mtimesource_sizer   r   r   r   r   r   _validate_timestamp_pycQ  s    
r   c                 C   s*   | dd |kr&t d|fi |d S )Nr   r   z.hash in bytecode doesn't match hash of source )r   )r,   source_hashr   r   r   r   r   _validate_hash_pycm  s    r   c                 C   sP   t | }t|tr8td| |d ur4t|| |S td	|||dd S )Nzcode object from {!r}zNon-code object in {!r}r   rB   )
marshalloads
isinstance
_code_typer   r   _imp_fix_co_filenamer   r[   )r,   r   r   r   coder   r   r   _compile_bytecode  s    


r   c                 C   sF   t t}|td |t| |t| |t|  |S Nr   	bytearrayr   extendr'   r   dumps)r   mtimer   r,   r   r   r   _code_to_timestamp_pyc  s    r   Tc                 C   s@   t t}d|d> B }|t| || |t|  |S )Nr/   r   )r   r   checkedr,   r   r   r   r   _code_to_hash_pyc  s    
r   c                 C   s>   dd l }t| j}||}td d}|| |d S )Nr   T)tokenizera   BytesIOreadlinedetect_encodingIncrementalNewlineDecoderdecode)source_bytesr   source_bytes_readlineencodingnewline_decoderr   r   r   decode_source  s
    
r   r   submodule_search_locationsc          	      C   s  |d u r:d}t |drDz|| }W qD ty6   Y qD0 n
t|}tj| ||d}d|_|d u rt D ]*\}}|	t
|rh|| |}||_ qqhd S |tu rt |drz|| }W n ty   Y q0 |rg |_n||_|jg kr|rt|d }|j| |S )Nz	<unknown>get_filenameoriginT
is_packager   )r   r   r   r   rr   r   
ModuleSpec_set_fileattr_get_supported_file_loadersr;   r   r   	_POPULATEr   r   rK   r>   )	r   locationr   r   specloader_classsuffixesr   dirnamer   r   r   spec_from_file_location  s>    



r   c                   @   sL   e Zd ZdZdZdZedd Zedd Zedd	d
Z	edddZ
dS )WindowsRegistryFinderz;Software\Python\PythonCore\{sys_version}\Modules\{fullname}zASoftware\Python\PythonCore\{sys_version}\Modules\{fullname}\DebugFc                 C   s6   zt t j|W S  ty0   t t j| Y S 0 d S r   )winregOpenKeyHKEY_CURRENT_USERrN   HKEY_LOCAL_MACHINE)clsr   r   r   r   _open_registry  s    z$WindowsRegistryFinder._open_registryc                 C   s   | j r| j}n| j}|j|dtjd d  d}z:| |}t|d}W d    n1 s^0    Y  W n t	y~   Y d S 0 |S )Nz%d.%dri   )r   sys_versionr   )
DEBUG_BUILDREGISTRY_KEY_DEBUGREGISTRY_KEYr[   r   version_infor  r  
QueryValuerN   )r  r   registry_keyr   hkeyfilepathr   r   r   _search_registry  s    .z&WindowsRegistryFinder._search_registryNc                 C   sx   |  |}|d u rd S zt| W n ty6   Y d S 0 t D ]4\}}|t|r>tj|||||d}|  S q>d S )Nr   )r  rM   rN   r   r;   r   r   spec_from_loader)r  r   rB   targetr  r   r   r   r   r   r   	find_spec  s    
zWindowsRegistryFinder.find_specc                 C   s"   |  ||}|d ur|jS d S d S r   r  r   r  r   rB   r   r   r   r   find_module.  s    z!WindowsRegistryFinder.find_module)NN)N)r   r   r   r  r
  r	  classmethodr  r  r  r  r   r   r   r   r    s   

r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_LoaderBasicsc                 C   s@   t | |d }|ddd }|dd }|dko>|dkS )Nr/   rl   r   ri   __init__)rK   r   r   rs   )r   r   r   filename_base	tail_namer   r   r   r   A  s    z_LoaderBasics.is_packagec                 C   s   d S r   r   r   r   r   r   r   create_moduleI  s    z_LoaderBasics.create_modulec                 C   s8   |  |j}|d u r$td|jtt||j d S )Nz4cannot load module {!r} when get_code() returns None)get_coder   r   r[   r   _call_with_frames_removedexecr   )r   moduler   r   r   r   exec_moduleL  s    z_LoaderBasics.exec_modulec                 C   s   t | |S r   )r   _load_module_shimr   r   r   r   r   load_moduleT  s    z_LoaderBasics.load_moduleN)r   r   r   r   r  r#  r&  r   r   r   r   r  <  s   r  c                   @   sJ   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZddddZdd Z	dS )SourceLoaderc                 C   s   t d S r   )rN   r   rB   r   r   r   
path_mtime[  s    zSourceLoader.path_mtimec                 C   s   d|  |iS )Nr   )r)  r(  r   r   r   
path_statsc  s    zSourceLoader.path_statsc                 C   s   |  ||S r   )set_data)r   r   
cache_pathr,   r   r   r   _cache_bytecodeq  s    zSourceLoader._cache_bytecodec                 C   s   d S r   r   )r   rB   r,   r   r   r   r+  {  s    zSourceLoader.set_datac              
   C   sT   |  |}z| |}W n2 tyJ } ztd|d|W Y d }~n
d }~0 0 t|S )Nz'source not available through get_data()r   )r   get_datarN   r   r   )r   r   rB   r   excr   r   r   
get_source  s    
zSourceLoader.get_sourcer   )	_optimizec                C   s   t jt||dd|dS )Nr!  T)dont_inheritrw   )r   r   compile)r   r,   rB   r1  r   r   r   source_to_code  s    zSourceLoader.source_to_codec              	   C   s  |  |}d }d }d }d}d}zt|}W n tyB   d }Y n*0 z| |}	W n tyf   Y n0 t|	d }z| |}
W n ty   Y n0 ||d}zt|
||}t|
dd  }|d@ dk}|r|d@ dk}t	j
d	kr2|st	j
d
kr2| |}t	t|}t|
||| nt|
||	d || W n ttfyL   Y n 0 td|| t||||dS |d u r| |}| ||}td| tjs|d ur|d ur|r|d u rt	|}t|||}
nt||t|}
z| |||
 W n ty   Y n0 |S )NFTr   r   r   r/   r   ri   neveralwayssizez{} matches {})r   r   r   zcode object from {})r   r   rv   r*  rN   r$   r.  r   
memoryviewr   check_hash_based_pycsr   _RAW_MAGIC_NUMBERr   r   r   r   r   r   r   r4  r   dont_write_bytecoder   r   r7   r-  )r   r   r   r   r   r   
hash_basedcheck_sourcer   str,   r   r   
bytes_datacode_objectr   r   r   r    s    





zSourceLoader.get_codeN)
r   r   r   r)  r*  r-  r+  r0  r4  r  r   r   r   r   r'  Y  s   

r'  c                       sx   e Zd Zdd Zdd Zdd Ze fddZed	d
 Zdd Z	edd Z
dd Zdd Zdd Zdd Z  ZS )
FileLoaderc                 C   s   || _ || _d S r   r   )r   r   rB   r   r   r   r    s    zFileLoader.__init__c                 C   s   | j |j ko| j|jkS r   	__class__r   r   otherr   r   r   __eq__  s    
zFileLoader.__eq__c                 C   s   t | jt | jA S r   hashr   rB   r   r   r   r   __hash__  s    zFileLoader.__hash__c                    s   t t| |S r   )superrA  r&  r%  rC  r   r   r&    s    
zFileLoader.load_modulec                 C   s   | j S r   rG   r%  r   r   r   r     s    zFileLoader.get_filenamec                 C   s~   t | ttfrFtt|}| W  d    S 1 s:0    Y  n4t|d}| W  d    S 1 sp0    Y  d S )Nr)r   r'  ExtensionFileLoaderra   	open_coderx   readrb   )r   rB   rg   r   r   r   r.    s
    (zFileLoader.get_datac                 C   s   |  |r| S d S r   )r   r   r"  r   r   r   get_resource_reader  s    
zFileLoader.get_resource_readerc                 C   s    t t| jd |}t|dS )Nr   rM  )rD   rK   rB   ra   rb   r   resourcerB   r   r   r   open_resource  s    zFileLoader.open_resourcec                 C   s&   |  |sttt| jd |}|S r   )is_resourceFileNotFoundErrorrD   rK   rB   rS  r   r   r   resource_path!  s    
zFileLoader.resource_pathc                 C   s(   t |v rdS tt| jd |}t|S )NFr   )r<   rD   rK   rB   rS   r   r   rB   r   r   r   rV  '  s    zFileLoader.is_resourcec                 C   s   t tt| jd S r   )iterr   listdirrK   rB   rI  r   r   r   contents-  s    zFileLoader.contents)r   r   r   r  rF  rJ  r   r&  r   r.  rR  rU  rX  rV  r\  __classcell__r   r   rL  r   rA    s   

rA  c                   @   s*   e Zd Zdd Zdd ZddddZd	S )
SourceFileLoaderc                 C   s   t |}|j|jdS )N)r   r7  )rM   st_mtimest_size)r   rB   r>  r   r   r   r*  5  s    zSourceFileLoader.path_statsc                 C   s   t |}| j|||dS )N_mode)r   r+  )r   r   r   r,   rP   r   r   r   r-  :  s    z SourceFileLoader._cache_bytecoderX   ra  c          	      C   s   t |\}}g }|r4t|s4t |\}}|| qt|D ]h}t||}zt| W q< tyn   Y q<Y q< ty } zt	
d|| W Y d }~ d S d }~0 0 q<zt||| t	
d| W n4 t y } zt	
d|| W Y d }~n
d }~0 0 d S )Nzcould not create {!r}: {!r}zcreated {!r})rK   rU   r>   reversedrD   r   mkdirFileExistsErrorrN   r   r   rh   )	r   rB   r,   rb  parentr   r@   rE   r/  r   r   r   r+  ?  s.    
zSourceFileLoader.set_dataN)r   r   r   r*  r-  r+  r   r   r   r   r^  1  s   r^  c                   @   s   e Zd Zdd Zdd ZdS )SourcelessFileLoaderc                 C   sD   |  |}| |}||d}t||| tt|dd  ||dS )Nr   r   )r   r   )r   r.  r   r   r8  )r   r   rB   r,   r   r   r   r   r  b  s    

zSourcelessFileLoader.get_codec                 C   s   d S r   r   r%  r   r   r   r0  r  s    zSourcelessFileLoader.get_sourceN)r   r   r   r  r0  r   r   r   r   rg  ^  s   rg  c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
edd ZdS )rN  c                 C   s>   || _ t|s4ztt |}W n ty2   Y n0 || _d S r   )r   rW   rD   r   rT   rN   rB   rY  r   r   r   r    s    zExtensionFileLoader.__init__c                 C   s   | j |j ko| j|jkS r   rB  rD  r   r   r   rF    s    
zExtensionFileLoader.__eq__c                 C   s   t | jt | jA S r   rG  rI  r   r   r   rJ    s    zExtensionFileLoader.__hash__c                 C   s$   t tj|}t d|j| j |S )Nz&extension module {!r} loaded from {!r})r   r   r   create_dynamicr   r   rB   )r   r   r"  r   r   r   r    s    z!ExtensionFileLoader.create_modulec                 C   s$   t tj| t d| j| j d S )Nz(extension module {!r} executed from {!r})r   r   r   exec_dynamicr   r   rB   rQ  r   r   r   r#    s    zExtensionFileLoader.exec_modulec                    s$   t | jd  t fddtD S )Nr/   c                 3   s   | ]} d | kV  qdS )r  Nr   r
   suffix	file_namer   r   rH     s   z1ExtensionFileLoader.is_package.<locals>.<genexpr>)rK   rB   anyEXTENSION_SUFFIXESr%  r   rl  r   r     s    zExtensionFileLoader.is_packagec                 C   s   d S r   r   r%  r   r   r   r    s    zExtensionFileLoader.get_codec                 C   s   d S r   r   r%  r   r   r   r0    s    zExtensionFileLoader.get_sourcec                 C   s   | j S r   rG   r%  r   r   r   r     s    z ExtensionFileLoader.get_filenameN)r   r   r   r  rF  rJ  r  r#  r   r  r0  r   r   r   r   r   r   rN  {  s   	rN  c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )_NamespacePathr   c                 C   s,   || _ || _t|  | _| j| _|| _d S r   )_name_pathr   _get_parent_path_last_parent_path_epoch_last_epoch_path_finderr   r   rB   path_finderr   r   r   r    s
    z_NamespacePath.__init__c                 C   s&   | j d\}}}|dkrdS |dfS )Nrl   r   )r   rB   __path__)rq  rs   )r   rf  dotmer   r   r   _find_parent_path_names  s    z&_NamespacePath._find_parent_path_namesc                 C   s   |   \}}ttj| |S r   )r}  r   r   modules)r   parent_module_namepath_attr_namer   r   r   rs    s    z_NamespacePath._get_parent_pathc                 C   sd   t |  }|| jks"| j| jkr^| | j|}|d urP|jd u rP|jrP|j| _	|| _| j| _| j	S r   )
r   rs  rt  ru  rv  rw  rq  r   r   rr  )r   parent_pathr   r   r   r   _recalculate  s    z_NamespacePath._recalculatec                 C   s   t |  S r   )rZ  r  rI  r   r   r   __iter__  s    z_NamespacePath.__iter__c                 C   s   |   | S r   r  )r   indexr   r   r   __getitem__  s    z_NamespacePath.__getitem__c                 C   s   || j |< d S r   )rr  )r   r  rB   r   r   r   __setitem__  s    z_NamespacePath.__setitem__c                 C   s   t |  S r   )r7   r  rI  r   r   r   __len__  s    z_NamespacePath.__len__c                 C   s   d | jS )Nz_NamespacePath({!r}))r[   rr  rI  r   r   r   __repr__  s    z_NamespacePath.__repr__c                 C   s   ||   v S r   r  r   itemr   r   r   __contains__  s    z_NamespacePath.__contains__c                 C   s   | j | d S r   )rr  r>   r  r   r   r   r>     s    z_NamespacePath.appendN)r   r   r   ru  r  r}  rs  r  r  r  r  r  r  r  r>   r   r   r   r   rp    s   	
rp  c                   @   sP   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )_NamespaceLoaderc                 C   s   t |||| _d S r   )rp  rr  rx  r   r   r   r    s    z_NamespaceLoader.__init__c                 C   s   d |jS )Nz<module {!r} (namespace)>)r[   r   )r  r"  r   r   r   module_repr  s    z_NamespaceLoader.module_reprc                 C   s   dS )NTr   r%  r   r   r   r     s    z_NamespaceLoader.is_packagec                 C   s   dS Nr   r   r%  r   r   r   r0  
  s    z_NamespaceLoader.get_sourcec                 C   s   t dddddS )Nr   z<string>r!  T)r2  )r3  r%  r   r   r   r    s    z_NamespaceLoader.get_codec                 C   s   d S r   r   r  r   r   r   r    s    z_NamespaceLoader.create_modulec                 C   s   d S r   r   rQ  r   r   r   r#    s    z_NamespaceLoader.exec_modulec                 C   s   t d| j t | |S )Nz&namespace module loaded with path {!r})r   r   rr  r$  r%  r   r   r   r&    s    z_NamespaceLoader.load_moduleN)r   r   r   r  r  r  r   r0  r  r  r#  r&  r   r   r   r   r    s   
r  c                   @   sr   e Zd Zedd Zedd Zedd Zedd Zedd
dZedddZ	edddZ
edd Zd	S )
PathFinderc                 C   sN   t tj D ],\}}|d u r(tj|= qt|dr|  qt jd7  _d S )Ninvalidate_cachesr/   )listr   path_importer_cacheitemsr   r  rp  ru  )r  r   finderr   r   r   r  (  s    


zPathFinder.invalidate_cachesc              	   C   sR   t jd urt jstdt t jD ]*}z||W   S  tyJ   Y q"Y q"0 q"d S )Nzsys.path_hooks is empty)r   
path_hooksrn   ro   r   r   )r  rB   hookr   r   r   _path_hooks5  s    
zPathFinder._path_hooksc                 C   sd   |dkr*zt  }W n ty(   Y d S 0 ztj| }W n& ty^   | |}|tj|< Y n0 |S r  )r   rT   rW  r   r  KeyErrorr  )r  rB   r  r   r   r   _path_importer_cacheB  s    
zPathFinder._path_importer_cachec                 C   sR   t |dr||\}}n||}g }|d ur<t||S t|d }||_|S )Nr   )r   r   r  r   r  r   r   )r  r   r  r   r   r   r   r   r   _legacy_get_specX  s    

zPathFinder._legacy_get_specNc           	      C   s   g }|D ]}t |ttfsq| |}|d urt|drF|||}n| ||}|d u r\q|jd urn|  S |j}|d u rt	d|
| qt|d }||_|S )Nr  zspec missing loader)r   rx   bytesr  r   r  r  r   r   r   r   r   r   )	r  r   rB   r  namespace_pathentryr  r   r   r   r   r   	_get_specg  s(    


zPathFinder._get_specc                 C   sd   |d u rt j}| |||}|d u r(d S |jd u r\|j}|rVd |_t||| j|_|S d S n|S d S r   )r   rB   r  r   r   r   rp  )r  r   rB   r  r   r  r   r   r   r    s    
zPathFinder.find_specc                 C   s   |  ||}|d u rd S |jS r   r  r  r   r   r   r    s    zPathFinder.find_modulec                 O   s   ddl m} |j|i |S )Nr   )MetadataPathFinder)importlib.metadatar  find_distributions)r  r   r   r  r   r   r   r    s    
zPathFinder.find_distributions)N)NN)N)r   r   r   r  r  r  r  r  r  r  r  r  r   r   r   r   r  $  s    



r  c                   @   sV   e Zd Zdd Zdd ZeZdd Zdd Zdd
dZ	dd Z
edd Zdd Zd	S )
FileFinderc                    sp   g }|D ] \ }|  fdd|D  q|| _|p6d| _t| jsVtt | j| _d| _t | _	t | _
d S )Nc                 3   s   | ]}| fV  qd S r   r   rj  r   r   r   rH     r   z&FileFinder.__init__.<locals>.<genexpr>rl   r   )r   _loadersrB   rW   rD   r   rT   _path_mtimeset_path_cache_relaxed_path_cache)r   rB   loader_detailsloadersr   r   r  r   r    s    

zFileFinder.__init__c                 C   s
   d| _ d S )Nr   )r  rI  r   r   r   r    s    zFileFinder.invalidate_cachesc                 C   s*   |  |}|d u rd g fS |j|jp&g fS r   )r  r   r   )r   r   r   r   r   r   r     s    
zFileFinder.find_loaderc                 C   s   |||}t ||||dS )Nr   )r   )r   r   r   rB   smslr  r   r   r   r   r    s    
zFileFinder._get_specNc              	   C   s~  d}| dd }zt| jp"t j}W n ty@   d}Y n0 || jkrZ|   || _t	 rp| j
}| }n
| j}|}||v rt| j|}| jD ]:\}	}
d|	 }t||}t|r| |
|||g|  S qt|}| jD ]p\}	}
zt| j||	 }W n ty   Y  d S 0 tjd|dd ||	 |v rt|r| |
||d |  S q|rztd| t|d }|g|_|S d S )	NFrl   ri   r   r  z	trying {})	verbosityzpossible namespace for {})rs   rM   rB   r   rT   r_  rN   r  _fill_cacher   r  r   r  rD   r  rS   r  rU   rz   r   r   r   r   )r   r   r  is_namespacetail_moduler   cachecache_module	base_pathrk  r   init_filename	full_pathr   r   r   r   r    sN    






zFileFinder.find_specc           	   
   C   s   | j }zt|pt }W n tttfy8   g }Y n0 tj	dsRt
|| _nJt
 }|D ]8}|d\}}}|rd|| }n|}|| q\|| _tj	trdd |D | _d S )Nr   rl   rY   c                 S   s   h | ]}|  qS r   )r   )r
   fnr   r   r   r   :  r   z)FileFinder._fill_cache.<locals>.<setcomp>)rB   r   r[  rT   rW  PermissionErrorNotADirectoryErrorr   r   r   r  r  r   r[   r   addr   r  )	r   rB   r\  lower_suffix_contentsr  r   r{  rk  new_namer   r   r   r    s"    
zFileFinder._fill_cachec                    s    fdd}|S )Nc                    s$   t | std| d | gR  S )Nzonly directories are supportedrG   )rU   r   rG   r  r  r   r   path_hook_for_FileFinderF  s    z6FileFinder.path_hook.<locals>.path_hook_for_FileFinderr   )r  r  r  r   r  r   	path_hook<  s    
zFileFinder.path_hookc                 C   s   d | jS )NzFileFinder({!r}))r[   rB   rI  r   r   r   r  N  s    zFileFinder.__repr__)N)r   r   r   r  r  r   r  r   r  r  r  r  r  r  r   r   r   r   r    s   	
3
r  c                 C   s   |  d}|  d}|sB|r$|j}n||kr8t||}n
t||}|sTt|||d}z$|| d< || d< || d< || d< W n ty   Y n0 d S )N
__loader____spec__r  __file__
__cached__)getr   rg  r^  r   	Exception)nsr   pathname	cpathnamer   r   r   r   r   _fix_up_moduleT  s"    


r  c                  C   s&   t t f} ttf}ttf}| ||gS r   )rN  r   extension_suffixesr^  r   rg  r|   )
extensionssourcebytecoder   r   r   r   k  s    r   c           
   	   C   sj  | a t jat jatjt }ddgfdddgff}|D ]V\}}|d }|tjv r^tj| } qq4zt |}W  qW q4 ty   Y q4Y q40 q4tdt|d| t|d| t|d	d
| t|ddd |D  g d}|dkr|	d |D ]2}|tjvrt |}	n
tj| }	t|||	 qt|dt
  tt  |dkrft	d dtv rfdt_d S )Nposixr   ntr   r   zimportlib requires posix or ntr   r<   r2   r   _pathseps_with_colonc                 S   s   h | ]}d | qS r   r   r	   r   r   r   r     r   z_setup.<locals>.<setcomp>)ra   rn   r   r  r   z.pywz_d.pydT)r   r   r   r~  r   _builtin_from_namer   r   r?   r>   r    ro  r   r  r   r  r	  )
_bootstrap_moduleself_module
os_details
builtin_osr2   r<   	os_modulebuiltin_namesbuiltin_namebuiltin_moduler   r   r   _setupv  sD    









r  c                 C   s2   t |  t }tjtj| g tjt	 d S r   )
r  r   r   r  r   r  r  	meta_pathr>   r  )r  supported_loadersr   r   r   _install  s    r  )rX   )N)NNN)r   r   )T)N)N)Or   ra   r   rn   r   r   _MS_WINDOWSr  r   r  r  r2   r<   r   r:   r?   r  r   %_CASE_INSENSITIVE_PLATFORMS_BYTES_KEYr   r    r'   r-   r.   rD   rK   rM   rR   rS   rU   rW   rh   type__code__r   r%   r   r$   r*   r:  r   r{   r   r|   DEBUG_BYTECODE_SUFFIXESOPTIMIZED_BYTECODE_SUFFIXESr   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr   r   r  r  r'  rA  r^  rg  ro  rN  rp  r  r  r  r  r   r  r  r   r   r   r   <module>   s   





	


 G(!



D@ H-:E*  
9