o
    i                     @   sn   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mZ dZ	dd Z
G dd deZG d	d
 d
ZdS )    N)defaultdict)getattr_staticg?c                    s    fdd}|S )Nc                    s    | dkr|\}  | d S d S )Nexec)
assimilate)eventobjcodeself T/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/codefind/registry.py
watch_exec   s   z#_make_audithook.<locals>.watch_execr   )r
   r   r   r	   r   _make_audithook   s   r   c                   @   s   e Zd ZdS )ConformExceptionN)__name__
__module____qualname__r   r   r   r   r      s    r   c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd ZdddZ	dd Z
ddddddZdddZdS )CodeRegistryc                 C   s0   i | _ i | _tt| _tt| _d| _d| _d S )Nr   F)codes	currcodesr   set	backcodes	functions	last_costalways_use_cacher	   r   r   r   __init__   s   


zCodeRegistry.__init__c                 C   s   |    tt|  d S N)collect_allsysaddaudithookr   r	   r   r   r   setup%   s   zCodeRegistry.setupc              	   C   s   g }t  D ]9}z.t|tjr|||jf nt|dd d ur5t |D ]}t|tj	r4|||f q%W q t
y?   Y qw |D ]0\}}tt|dd  }trjdd |dd d D }| ||jg|R  | j| | qBd S )N__conform__r   c                 S   s   g | ]}|d kr|qS )z<locals>r   ).0partr   r   r   
<listcomp>9   s    z,CodeRegistry.collect_all.<locals>.<listcomp>.)gcget_objects
isinstancetypesFunctionTypeappend__code__r   get_referentsCodeTypeReferenceErrorgetattrstrsplitr   co_filenamer   add)r
   resultsr   xcoqualqualpathr   r   r   r   )   s*   zCodeRegistry.collect_allc                 C   s6   |D ]}| j || || j|< q| j| | d S r   )r   
setdefaultr   r   update)r
   pathsr   pr   r   r   _setcodepaths?   s   zCodeRegistry._setcodepathsr   c                 C   s   |j dkr|r|d |jkr|j}nd }n|j drd }n|j dr&d S |j }|rEg ||R }| g ||jR g |d R g| |jD ]}t|tjrV| 	|| qHd S )Nz<module>r&   z<generic parameters of<)
co_namer4   
startswithr?   co_firstlineno	co_constsr)   r*   r/   r   )r
   r   pathnamectr   r   r   r   E   s*   

zCodeRegistry.assimilatec                 C   s<   t   }dd t|D }t|| j|< t   | | _|S )Nc                 S   s&   g | ]}t |tjst|d r|qS )r!   )r)   r*   r+   hasattr)r"   fnr   r   r   r$   c   s    
z/CodeRegistry._get_functions.<locals>.<listcomp>)timer'   get_referrersr   r   r   )r
   r   tr6   r   r   r   _get_functionsa   s   zCodeRegistry._get_functionsFc                 C   s8   |p	| j p	| jtk}|r| j|  }rt|S | |S r   )r   r   MAX_TIMEr   listrM   )r
   r   	use_cacher6   r   r   r   get_functionsl   s
   
zCodeRegistry.get_functionsc                 C   s6   | j | | | j | | | | j| | d S r   )r   discardr5   r?   r   )r
   r   old_codenew_coder   r   r   update_cache_entryu   s   zCodeRegistry.update_cache_entryN)filenamemodulelinenoc                G   sF   |d ur|d u s
J t |j}|d usJ |g||R }| j| S r   )	importlibimport_module__file__r   )r
   rV   rW   rX   rE   r   r   r   	find_codez   s   
zCodeRegistry.find_codec                 C   s  t |dr|| d S t|tjr$| j||dD ]}| || qd S t|tjr;| ||j |j	|_	|j
|_
d S t|tjrz|jj}|j}||krmd|j d| d| d}d|p]dv d|pbdv A ri|d	7 }t|| ||j| ||_d S |d u rd S td
| d| )Nr!   )rP   zCannot replace closure `z.` because the free variables changed. Before: z	; after: r%   	__class__r   z@ Note: The use of `super` entails the `__class__` free variable.zCannot conform z with )rH   r!   r)   r*   r/   rQ   conformr+   r-   __defaults____kwdefaults__co_freevarsr   r   rU   )r
   obj1obj2rP   rI   fv1fv2msgr   r   r   r^      s8   


zCodeRegistry.conform)r   )F)r   r   r   r   r    r   r?   r   rM   rQ   rU   r\   r^   r   r   r   r   r      s    

	r   )r'   rY   r   rJ   r*   collectionsr   inspectr   rN   r   	Exceptionr   r   r   r   r   r   <module>   s    