o
     JAf,                     @   s(  	 d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ 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 Zdd Zd#ddZd#ddZedd Zdd Zdd Zdd ZG dd  d ejZG d!d" d"eZdS )$   )Loader)module_from_spec)_resolve_name)spec_from_loader)
_find_spec)MAGIC_NUMBER)_RAW_MAGIC_NUMBER)cache_from_source)decode_source)source_from_cache)spec_from_file_location    )contextmanagerNc                 C   s   	 t t| S N)_impsource_hashr   )source_bytes r   %/usr/lib/python3.10/importlib/util.pyr      s   r   c                 C   s^   	 |  ds| S |stdt|  dd}| D ]}|dkr  n|d7 }qt| |d  ||S )N.zno package specified for z% (required for relative module names)r   r   )
startswithImportErrorreprr   )namepackagelevel	characterr   r   r   resolve_name   s   

r   c                 C   sp   	 | t jvrt| |S t j|  }|d u rd S z|j}W n ty*   td| d w |d u r6td| |S )N{}.__spec__ is not set{}.__spec__ is None)sysmodulesr   __spec__AttributeError
ValueErrorformat)r   pathmodulespecr   r   r   _find_spec_from_path*   s   



r)   c           	   
   C   s   	 |  drt| |n| }|tjvrH|dd }|rAt|dgd}z|j}W n ty@ } ztd|d||d|d }~ww d }t	||S tj| }|d u rSd S z|j
}W n tyg   td| d w |d u rstd	| |S )
Nr   r   __path__)fromlistz __path__ attribute not found on z while trying to find )r   r   r   )r   r   r    r!   
rpartition
__import__r*   r#   ModuleNotFoundErrorr   r"   r$   r%   )	r   r   fullnameparent_nameparentparent_pather'   r(   r   r   r   	find_specI   s@   




r4   c                 c   s    | t jv }t j| }|stt | }d|_|t j| < z-z|V  W n ty=   |s;zt j| = W n	 ty:   Y nw Y nw W d|_d S W d|_d S d|_w )NTF)r    r!   gettype__initializing__	ExceptionKeyError)r   	is_reloadr'   r   r   r   _module_to_loadv   s,   



 r;   c                       	 t   fdd}|S )Nc                     sV   t jdtdd  | i |}t|dd d u r)|j|_t|ds)|jdd |_|S )NkThe import system now takes care of this automatically; this decorator is slated for removal in Python 3.12   
stacklevel__package__r*   r   r   )warningswarnDeprecationWarninggetattr__name__rA   hasattrr,   )argskwargsr'   fxnr   r   set_package_wrapper   s   
z(set_package.<locals>.set_package_wrapper	functoolswraps)rK   rL   r   rJ   r   set_package   s   
rP   c                    r<   )Nc                    s@   t jdtdd  | g|R i |}t|dd d u r| |_|S )Nr=   r>   r?   
__loader__)rB   rC   rD   rE   rQ   )selfrH   rI   r'   rJ   r   r   set_loader_wrapper   s   z&set_loader.<locals>.set_loader_wrapperrM   )rK   rS   r   rJ   r   
set_loader   s   rT   c                    s,   	 t jdtdd t  fdd}|S )Nr=   r>   r?   c              
      s   t |8}| |_z| |}W n ttfy   Y nw |r!||_n|dd |_ | |g|R i |W  d    S 1 s?w   Y  d S )Nr   r   )r;   rQ   
is_packager   r#   rA   r,   )rR   r/   rH   rI   r'   rU   rJ   r   r   module_for_loader_wrapper   s   
$z4module_for_loader.<locals>.module_for_loader_wrapper)rB   rC   rD   rN   rO   )rK   rV   r   rJ   r   module_for_loader   s   rW   c                   @   s   e Zd Z	 dd Zdd ZdS )_LazyModulec                 C   s   	 t j| _| jj}| jjd }| j}i }| D ]\}}||vr%|||< qt|| t|| kr5|||< q| jj	
|  |tjv rUt| ttj| krUtd|d| j| t| |S )N__dict__zmodule object for z. substituted in sys.modules during a lazy load)types
ModuleType	__class__r"   r   loader_staterY   itemsidloaderexec_moduler    r!   r$   updaterE   )rR   attroriginal_name
attrs_then	attrs_nowattrs_updatedkeyvaluer   r   r   __getattribute__   s$   


z_LazyModule.__getattribute__c                 C   s   	 |  | t| | d S r   )rj   delattr)rR   rc   r   r   r   __delattr__  s   
z_LazyModule.__delattr__N)rF   
__module____qualname__rj   rl   r   r   r   r   rX      s    "rX   c                   @   s>   e Zd Z	 edd Zedd Zdd Zdd Zd	d
 Z	dS )
LazyLoaderc                 C   s   t | ds	tdd S )Nra   z loader must define exec_module())rG   	TypeError)r`   r   r   r   __check_eager_loader  s   
zLazyLoader.__check_eager_loaderc                    s   	     fddS )Nc                     s    | i |S r   r   )rH   rI   clsr`   r   r   <lambda>  s    z$LazyLoader.factory.<locals>.<lambda>)_LazyLoader__check_eager_loaderrr   r   rr   r   factory  s   
zLazyLoader.factoryc                 C   s   |  | || _d S r   )ru   r`   )rR   r`   r   r   r   __init__  s   

zLazyLoader.__init__c                 C   s   | j |S r   )r`   create_module)rR   r(   r   r   r   rx     s   zLazyLoader.create_modulec                 C   sB   	 | j |j_ | j |_i }|j |d< |j|d< ||j_t|_d S )NrY   r\   )r`   r"   rQ   rY   copyr\   r]   rX   )rR   r'   r]   r   r   r   ra   "  s   


zLazyLoader.exec_moduleN)
rF   rm   rn   staticmethodru   classmethodrv   rw   rx   ra   r   r   r   r   ro     s    

ro   r   ) _abcr   
_bootstrapr   r   r   r   _bootstrap_externalr   r   r	   r
   r   r   
contextlibr   r   rN   r    rZ   rB   r   r   r)   r4   r;   rP   rT   rW   r[   rX   ro   r   r   r   r   <module>   s:    

-
(.