o
    ni(                     @   s   U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
 i Zeed< daeed< e Zded	efd
dZde
eef deded	dfddZdede	e d	dfddZdddZded	dfddZG dd dZG dd dZdS )aH  Implements a post-import hook mechanism.

Styled as per PEP-369. Note that it doesn't cope with modules being reloaded.

Note: This file is based on
https://github.com/GrahamDumpleton/wrapt/blob/1.12.1/src/wrapt/importer.py
and manual backports of later patches up to 1.15.0 in the wrapt repository
(with slight modifications).
    N)	find_spec)AnyCallableDictOptionalUnion_post_import_hooksF_post_import_hooks_initnamereturnc                    s   dt dtf fdd}|S )Nmoduler   c                    sF     d\}}| d}t| tj| }|D ]}t||}q|| S )N:.)split
__import__sysmodulesgetattr)r   module_namefunctionattrscallbackattrr
    X/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/import_hooks.pyimport_hook#   s   

z4_create_import_hook_from_string.<locals>.import_hook)r   r   )r
   r   r   r   r   _create_import_hook_from_string"   s   	r   hookhook_idc                 C   s   t | tfr
t| } t* tsdatjdt  tj	
|d }|d u r/t|i || i W d    n1 s9w   Y  |d urH| | d S d S )NTr   )
isinstancestrr   _post_import_hooks_lockr	   r   	meta_pathinsertImportHookFinderr   getr   
setdefaultupdate)r   r   r
   r   r   r   r   register_post_import_hook/   s   r)   c                 C   s   t 5 t| }|d ur'|d ur||d  |st| = nt| = W d    d S W d    d S W d    d S 1 s:w   Y  d S N)r"   r   r&   pop)r
   r   hooksr   r   r   unregister_post_import_hookS   s   
" r-   c                   C   s2   t  t  W d    d S 1 sw   Y  d S r*   )r"   r   clearr   r   r   r    unregister_all_post_import_hooksb   s   
"r/   r   c                 C   sZ   t | dd }t t|i }W d    n1 sw   Y  | D ]}|r*||  q"d S )N__name__)r   r"   r   r+   values)r   r
   r,   r   r   r   r   notify_module_loadedm   s   r2   c                   @   sf   e Zd ZdeddfddZdeddfddZd	edefd
dZdedefddZdeddfddZ	dS )_ImportHookChainedLoaderloaderr   Nc                 C   sD   || _ t|dr| j| _t|dr| j| _t|dr | j| _d S d S )Nload_modulecreate_moduleexec_module)r4   hasattr_load_moduler5   _create_moduler6   _exec_moduler7   )selfr4   r   r   r   __init__   s   


z!_ImportHookChainedLoader.__init__r   c                 C   sz   G dd d}t |d|d | fv r!z| j|_W n	 ty    Y nw t |dd d ur9t |jdd | u r;| j|j_d S d S d S )Nc                   @   s   e Zd ZdS )z7_ImportHookChainedLoader._set_loader.<locals>.UNDEFINEDN)r0   
__module____qualname__r   r   r   r   	UNDEFINED   s    r@   
__loader____spec__r4   )r   r4   rA   AttributeErrorrB   )r<   r   r@   r   r   r   _set_loader   s   z$_ImportHookChainedLoader._set_loaderfullnamec                 C   s"   | j |}| | t| |S r*   )r4   r5   rD   r2   )r<   rE   r   r   r   r   r9      s   
z%_ImportHookChainedLoader._load_modulespecc                 C   s   | j |S r*   )r4   r6   )r<   rF   r   r   r   r:      s   z'_ImportHookChainedLoader._create_modulec                 C   s"   |  | | j| t| d S r*   )rD   r4   r7   r2   )r<   r   r   r   r   r;      s   
z%_ImportHookChainedLoader._exec_module)
r0   r>   r?   r   r=   rD   r!   r9   r:   r;   r   r   r   r   r3      s    

r3   c                	   @   sZ   e Zd ZdddZ	ddedee ded fdd	Z	ddedee d
edefddZdS )r%   r   Nc                 C   s
   i | _ d S r*   )in_progress)r<   r   r   r   r=      s   
zImportHookFinder.__init__rE   pathr3   c                 C   s   t  |tvr	 W d    d S W d    n1 sw   Y  || jv r&d S d| j|< z&tt|dd }|rDt|tsKt|W | j|= S W | j|= d S W | j|= d S | j|= w NTr4   )r"   r   rG   r   r   r    r3   )r<   rE   rH   r4   r   r   r   find_module   s$   	


zImportHookFinder.find_moduletargetc                 C   s   t  |tvr	 W d    d S W d    n1 sw   Y  || jv r&d S d| j|< z#t|}t|dd }|rHt|tsH|d usCJ t||_|W | j|= S | j|= w rI   )r"   r   rG   r   r   r    r3   r4   )r<   rE   rH   rK   rF   r4   r   r   r   r      s"   


zImportHookFinder.find_specr   Nr*   )NN)	r0   r>   r?   r=   r!   r   rJ   r   r   r   r   r   r   r%      s(    

,r%   rL   )__doc__r   	threadingimportlib.utilr   typingr   r   r   r   r   r   __annotations__r	   boolRLockr"   r!   r   r)   r-   r/   r2   r3   r%   r   r   r   r   <module>   s.    



$
9