a
    "h9,                     @   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jZ dS )%   )abc)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   6/opt/python-3.9.21/usr/lib/python3.9/importlib/util.pyr      s    r   c                 C   s\   |  ds| S |s&tdt|  dd}| D ]}|dkr> qH|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   sv   | t jvrt| |S t j|  }|d u r*d S z
|j}W n" tyV   td| d Y n0 |d u rntd| |S 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r|dd }|rt|dgd}z
|j}W q ty } z&td|d||d|W Y d }~qd }~0 0 nd }t	||S tj| }|d u rd S z
|j
}W n" ty   td| d Y n0 |d u rtd	| |S 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   s8    




r4   c                 c   s   | t jv }t j| }|s6tt | }d|_|t j| < zLz
|V  W n6 tyx   |stzt j| = W n tyr   Y n0 Y n0 W d|_nd|_0 d S )NTF)r    r!   gettype__initializing__	ExceptionKeyError)r   	is_reloadr'   r   r   r   _module_to_loadv   s    


r;   c                    s   t   fdd}|S )Nc                     sV   t jdtdd  | i |}t|dd d u rR|j|_t|dsR|jdd |_|S )N7The import system now takes care of this automatically.   
stacklevel__package__r*   r   r   )warningswarnDeprecationWarninggetattr__name__r@   hasattrr,   )argskwargsr'   fxnr   r   set_package_wrapper   s    
z(set_package.<locals>.set_package_wrapper	functoolswraps)rJ   rK   r   rI   r   set_package   s    	rO   c                    s   t   fdd}|S )Nc                    s@   t jdtdd  | g|R i |}t|dd d u r<| |_|S )Nr<   r=   r>   
__loader__)rA   rB   rC   rD   rP   )selfrG   rH   r'   rI   r   r   set_loader_wrapper   s    z&set_loader.<locals>.set_loader_wrapperrL   )rJ   rR   r   rI   r   
set_loader   s    rS   c                    s*   t jdtdd t  fdd}|S )Nr<   r=   r>   c              
      s   t |p}| |_z| |}W n ttfy4   Y n0 |rB||_n|dd |_ | |g|R i |W  d    S 1 s~0    Y  d S )Nr   r   )r;   rP   
is_packager   r#   r@   r,   )rQ   r/   rG   rH   r'   rT   rI   r   r   module_for_loader_wrapper   s    
z4module_for_loader.<locals>.module_for_loader_wrapper)rA   rB   rC   rM   rN   )rJ   rU   r   rI   r   module_for_loader   s    rV   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jd }| j}i }| D ]:\}}||vrT|||< q:t|| t|| kr:|||< q:| jj	
|  |tjv rt| ttj| krtd|d| j| t| |S )N__dict__	__class__zmodule object for z. substituted in sys.modules during a lazy load)types
ModuleTyperY   r"   r   loader_staterX   itemsidloaderexec_moduler    r!   r$   updaterD   )	rQ   attroriginal_name
attrs_thenoriginal_type	attrs_nowattrs_updatedkeyvaluer   r   r   __getattribute__   s"    


z_LazyModule.__getattribute__c                 C   s   |  | t| | d S r   )rj   delattr)rQ   rb   r   r   r   __delattr__  s    
z_LazyModule.__delattr__N)rE   
__module____qualname__rj   rl   r   r   r   r   rW      s   #rW   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 )Nr`   z loader must define exec_module())rF   	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   )rG   rH   clsr_   r   r   <lambda>      z$LazyLoader.factory.<locals>.<lambda>)_LazyLoader__check_eager_loaderrr   r   rr   r   factory  s    
zLazyLoader.factoryc                 C   s   |  | || _d S r   )rv   r_   )rQ   r_   r   r   r   __init__  s    
zLazyLoader.__init__c                 C   s   | j |S r   )r_   create_module)rQ   r(   r   r   r   ry     s    zLazyLoader.create_modulec                 C   s@   | j |j_ | j |_i }|j |d< |j|d< ||j_t|_d S )NrX   rY   )r_   r"   rP   rX   copyrY   r\   rW   )rQ   r'   r\   r   r   r   r`      s    

zLazyLoader.exec_moduleN)
rE   rm   rn   staticmethodrv   classmethodrw   rx   ry   r`   r   r   r   r   ro   
  s   

ro   )N)N)! r   
_bootstrapr   r   r   r   _bootstrap_externalr   r   r	   r
   r   r   
contextlibr   r   rM   r    rZ   rA   r   r   r)   r4   r;   rO   rS   rV   r[   rW   Loaderro   r   r   r   r   <module>   s6   

-
'/