o
     JAf `                     @   sj  	 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g d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zd dlZd dlmZ d/ddZeee W n	 e y   Y nw dd  Z!d/d!d"Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&da'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
ModuleInfor   zmodule_finder name ispkgz.A namedtuple with minimal info about a module.c                 C   sL   	 z| j }W ||S  ty%   | |}|d u rY d S tj|| Y S w N)	find_specAttributeErrorfind_module	importlibutilspec_from_loader)findernamer   loader r   /usr/lib/python3.10/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   


r    c              	   #   s    	 i fdd t | |D ]V}|V  |jrczt|j W n% ty.   |d ur,||j Y q tyA   |d ur>||j n Y qw ttj|j dd pMg }  fdd| D } t	| |jd |E d H  qd S )Nc                 S   s   | |v 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.   
r	   c                 c   st    	 | d u r
t  }nt| trtdtt| }i }|D ]}t||D ]\}}||vr6d||< t|||V  q#qd S )Nz9path must be None or list of paths to look for modules in   )r   
isinstancestr
ValueErrormapr   iter_importer_modulesr   )r6   r7   Z	importersyieldedir   r/   r   r   r   r
   n   s    	

r
   c                 C   s   t | dsg S | |S )Nr
   )hasattrr
   )importerr7   r   r   r   r?      s   

r?   c              	   c   "   | j d u stj | j sd S i }dd l}zt| j }W n ty(   g }Y nw |  |D ]_}||}|dks>||v r?q/tj | j |}d}|s}tj |r}d|vr}|}zt|}	W n tyi   g }	Y nw |	D ]}||}
|
dkr{d} nqlq/|rd|vrd||< || |fV  q/d S Nr   __init__Fr.   Tr:   	r6   osisdirinspectlistdirOSErrorsortgetmodulenamejoin)rC   r7   r@   rJ   	filenamesfnmodnamer6   r/   dircontentssubnamer   r   r   _iter_file_finder_modules   H   

rU   c                   C   sD   t   t dt tdaW d    d S 1 sw   Y  d S )Nignoreimp)warningscatch_warningssimplefilterDeprecationWarningr   import_modulerX   r   r   r   r   _import_imp   s   
"r^   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 Nz[This emulation is deprecated and slated for removal in Python 3.12; use 'importlib' instead)rY   warnr\   r^   r6   )selfr6   r   r   r   rF      s
   
zImpImporter.__init__c                 C   s~   | dd }||kr| jd u rd S | jd u rd }ntj| jg}zt||\}}}W n
 ty7   Y d S w t||||S )Nr.   )splitr6   rH   realpathrX   r   r1   r   )ra   fullnamer6   rT   filefilenameetcr   r   r   r      s   
zImpImporter.find_moduler&   c              	   c   rD   rE   rG   )ra   r7   r@   rJ   rP   rQ   rR   r6   r/   rS   rT   r   r   r   r
      rV   zImpImporter.iter_modulesr   r&   )__name__
__module____qualname__rF   r   r
   r   r   r   r   r      s
    


r   c                   @   sl   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 r_   )rY   r`   r\   r^   rf   rg   re   rh   )ra   re   rf   rg   rh   r   r   r   rF     s   
zImpLoader.__init__c                 C   sJ   |    zt|| j| j| j}W | jr| j  |S | jr$| j  w w r   )_reopenrX   load_modulerf   rg   rh   close)ra   re   modr   r   r   rn     s   
zImpLoader.load_modulec                 C   s6   t |d}| W  d    S 1 sw   Y  d S )Nrb)openr!   )ra   pathnamerf   r   r   r   r   '  s   $zImpLoader.get_datac                 C   sb   | j r+| j jr-| jd }|tjkrt| jd| _ d S |tjtjfv r/t| jd| _ d S d S d S d S )N   rrq   )	rf   closedrh   rX   	PY_SOURCErr   rg   PY_COMPILEDC_EXTENSION)ra   mod_typer   r   r   rm   +  s   

zImpLoader._reopenc                 C   s2   |d u r	| j }|S || j krtd| j |f |S )Nz,Loader for module %s cannot handle module %s)re   r1   ra   re   r   r   r   	_fix_name3  s   
zImpLoader._fix_namec                 C   s   |  |}| jd tjkS Nrt   )r|   rh   rX   PKG_DIRECTORYr{   r   r   r   
is_package;  s   
zImpLoader.is_packagec                 C   s   |  |}| jd u rO| jd }|tjkr$| |}t|| jd| _| jS |tjkrC| 	  zt
| j| _W | j  | jS | j  w |tjkrO|   | _| jS )Nrt   exec)r|   coderh   rX   rw   
get_sourcecompilerg   rx   rm   r   rf   ro   r~   _get_delegateget_code)ra   re   rz   sourcer   r   r   r   ?  s"   




	


zImpLoader.get_codec                 C   s   |  |}| jd u rn| jd }|tjkr.|   z| j | _W | j  | jS | j  w |tj	krbt
j| jd d r_t| jd d d}| | _W d    | jS 1 sZw   Y  | jS |tjkrn|   | _| jS )Nrt   rb   ru   )r|   r   rh   rX   rw   rm   rf   r!   ro   rx   rH   r6   existsrg   rr   r~   r   r   )ra   re   rz   fr   r   r   r   P  s*   







zImpLoader.get_sourcec                 C   s   t | j}t|d}|jS )NrF   )r   rg   r   r   )ra   r   specr   r   r   r   b  s   

zImpLoader._get_delegatec                 C   sH   |  |}| jd }|tjkr|   S |tjtjtjfv r"| j	S d S r}   )
r|   rh   rX   r~   r   get_filenamerw   rx   ry   rg   )ra   re   rz   r   r   r   r   g  s   


zImpLoader.get_filenamer   )rj   rk   rl   r   r   rF   rn   r   rm   r|   r   r   r   r   r   r   r   r   r   r     s    


r   )zipimporterc           	      c   s    t tj| j }| j}t|}i }dd l}|D ]\}||s q||d  t	j
}t|dkrL|d drL|d |vrLd||d < ||d  dfV  t|dkrSq||d }|dkr_q|rtd|vrt||vrtd||< || dfV  qd S )	Nr   rt   r:   z__init__.pyTrF   r.   F)sorted	zipimport_zip_directory_cachearchiver7   lenrJ   
startswithrc   rH   seprN   )	rC   r7   dirlist_prefixZplenr@   rJ   rQ   rR   r   r   r   iter_zipimport_modulesu  s0   
r   c                 C   sj   	 zt j|  }W |S  ty4   t jD ]}z|| }t j| | W  Y |S  ty.   Y qw d }Y |S w r   )r4   path_importer_cacheKeyError
path_hooks
setdefaultr1   )Z	path_itemrC   	path_hookr   r   r   r     s"   
r   c                 c   s    	 |  drd| }t|d| v r-| dd }t|}t|dd }|d u r,d S n	tjE d H  tj	}|D ]}t
|V  q8d S )Nr.   'Relative module name {!r} not supportedr   r*   )r   formatr1   
rpartitionr   r]   r3   r4   	meta_pathr6   r   )re   msgZpkg_namepkgr6   itemr   r   r   r     s"   


r   c                 C   sv   	 | t jv rt j|  } | d u rd S t| tr5| }t|dd }|d ur$|S t|dd d u r.d S |j}t|S | }t|S )N
__loader____spec__)r4   r5   r;   r   r3   rj   r   )Zmodule_or_namemoduler   re   r   r   r   r     s    


r   c                 C   s~   	 |  drd| }t|ztj| }W n ttttfy5 } zd}t|| t	|||d }~ww |d ur=|j
S d S )Nr.   r   z,Error while finding loader for {!r} ({}: {}))r   r   r1   r   r   r   r   	TypeErrorr=   typer   )re   r   r   exr   r   r   r     s   

r   c                 C   s  	 t | ts| S |d }| d d  } |d\}}}|r2ztj| j}W n ttfy1   |  Y S w tj}|D ]}t |t	s?q7t
|}|d urwg }	t|dr]||}
|
d ur\|
jp[g }	nt|dri||\}}	|	D ]}|| vrv| | qktj||}tj|rzt|}W n ty } ztjd||f  W Y d }~q7d }~ww | |D ]}|d}|r|drq| | qW d    n1 sw   Y  q7| S )Nz.pkgr.   r   r   zCan't open %s: %s

#)r;   listr   r4   r5   r*   r   r   r6   r<   r   rB   r   submodule_search_locationsr   appendrH   rO   isfilerr   rL   stderrwriterstripr   )r6   r   Z	sname_pkgZparent_package_Z
final_nameZsearch_pathdirr   portionsr   ZportionZpkgfiler   r   liner   r   r   r     sd   
 






r   c                 C   s   	 t j| }|d u rd S |j}|d u st|dsd S tj| p&t j	|}|d u s0t|ds2d S |
d}|dtj|j tjj| }||S )Nr   __file__/r   )r   r   r   r   rB   r4   r5   get
_bootstrap_loadrc   insertrH   r6   dirnamer   rO   r   )packageZresourcer   r   rp   partsZresource_namer   r   r   r   W  s    


r   c                 C   s  	 t d u rdd l}d}|d| d| d|ja t | }|s'td| | }|drFt	|d }|d	}|rC|
d
ng }n6| 
d
}|d}t	|}|r||d }| d
| }	zt	|	}|d |	}W n	 tyy   Y nw |sW|}
|D ]}t|
|}
q|
S )Nr   z(?!\d)(\w+)(\.(?!\d)(\w+))*z	^(?P<pkg>z)(?P<cln>:(?P<obj>z)?)?$zinvalid format: Zclnr   objr.   )_NAME_PATTERNrer   UNICODEmatchr=   	groupdictr   r   r]   rc   popr1   r3   )r   r   Zdotted_wordsr(   gdrp   r   rR   r'   sresultr   r   r   resolve_name  sF    







r   )Nr&   N)Nr&   ri   ))collectionsr   	functoolsr   Zsimplegenericr   importlib.utilimportlib.machineryrH   Zos.pathr4   typesr   rY   __all__r   __doc__r   r   r	   r
   r?   rU   register	machinery
FileFinderr^   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sV    


9
(Kd

^+