o
    g `                     @   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   =/Users/admin/.pyenv/versions/3.10.0/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   	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} q}qlq/|rd|vrd||< || |fV  q/d S Nr   __init__Fr.   Tr:   	r6   osisdirinspectlistdirOSErrorsortgetmodulenamejoin)rD   r7   rA   rK   	filenamesfnmodnamer6   r/   dircontentssubnamer   r   r   _iter_file_finder_modules   H   

rV   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_modulerY   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)rZ   warnr]   r_   r6   )selfr6   r   r   r   rG      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   rI   realpathrY   r   r1   r   )rb   fullnamer6   rU   filefilenameetcr   r   r   r      s   
zImpImporter.find_moduler&   c              	   c   rE   rF   rH   )rb   r7   rA   rK   rQ   rR   rS   r6   r/   rT   rU   r   r   r   r
      rW   zImpImporter.iter_modulesr   r&   )__name__
__module____qualname__rG   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`   )rZ   ra   r]   r_   rg   rh   rf   ri   )rb   rf   rg   rh   ri   r   r   r   rG     s   
zImpLoader.__init__c                 C   sJ   |    zt|| j| j| j}W | jr| j  |S | jr$| j  w w r   )_reopenrY   load_modulerg   rh   ri   close)rb   rf   modr   r   r   ro     s   
zImpLoader.load_modulec                 C   s6   t |d}| W  d    S 1 sw   Y  d S )Nrb)openr!   )rb   pathnamerg   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   rrr   )	rg   closedri   rY   	PY_SOURCErs   rh   PY_COMPILEDC_EXTENSION)rb   mod_typer   r   r   rn   +  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)rf   r1   rb   rf   r   r   r   	_fix_name3  s   
zImpLoader._fix_namec                 C   s   |  |}| jd tjkS Nru   )r}   ri   rY   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 )Nru   exec)r}   coderi   rY   rx   
get_sourcecompilerh   ry   rn   r   rg   rp   r   _get_delegateget_code)rb   rf   r{   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 )Nru   rc   rv   )r}   r   ri   rY   rx   rn   rg   r!   rp   ry   rI   r6   existsrh   rs   r   r   r   )rb   rf   r{   fr   r   r   r   P  s*   







zImpLoader.get_sourcec                 C   s   t | j}t|d}|jS )NrG   )r   rh   r   r   )rb   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}   ri   rY   r   r   get_filenamerx   ry   rz   rh   )rb   rf   r{   r   r   r   r   g  s   


zImpLoader.get_filenamer   )rk   rl   rm   r   r   rG   ro   r   rn   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   ru   r:   z__init__.pyTrG   r.   F)sorted	zipimport_zip_directory_cachearchiver7   lenrK   
startswithrd   rI   seprO   )	rD   r7   dirlist_prefixplenrA   rK   rR   rS   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   )	path_itemrD   	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   )rf   msg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   rk   r   )module_or_namemoduler   rf   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   )rf   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    q71 sw   Y  q7| S )Nz.pkgr.   r   r   zCan't open %s: %s

#)r;   listr   r4   r5   r*   r   r   r6   r<   r   rC   r   submodule_search_locationsr   appendrI   rP   isfilers   rM   stderrwriterstripr   )r6   r   	sname_pkgparent_package_
final_namesearch_pathdirr   portionsr   portion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   rC   r4   r5   get
_bootstrap_loadrd   insertrI   r6   dirnamer   rP   r   )packageresourcer   r   rq   parts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 q|w |sW|}
|D ]}t|
|}
q|
S )Nr   z(?!\d)(\w+)(\.(?!\d)(\w+))*z	^(?P<pkg>z)(?P<cln>:(?P<obj>z)?)?$zinvalid format: clnr   objr.   )_NAME_PATTERNrer   UNICODEmatchr=   	groupdictr   r   r^   rd   popr1   r3   )r   r   dotted_wordsr(   gdrq   r   rS   r'   sresultr   r   r   resolve_name  sF    







r   )Nr&   N)Nr&   rj   ))collectionsr   	functoolsr   simplegenericr   importlib.utilimportlib.machineryrI   Zos.pathr4   typesr   rZ   __all__r   __doc__r   r   r	   r
   r?   rV   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

^+