o
    oh(                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlZd dlZdd Zdd Zd	d
 Zdd ZG dd deZG dd deZG dd dZG dd deZG dd deZeadadd ZdefddZdefddZdefdd Zd!d" ZdS )#    N)ABCabstractmethod)Path)DictListOptionalc                   C   s   t dt S )NTRITON_HOME)osgetenvr   home r   r   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/triton/runtime/cache.pyget_home_dir      r   c                   C      t jt ddS )N.tritoncacher	   pathjoinr   r   r   r   r   default_cache_dir      r   c                   C   r   )Nr   overrider   r   r   r   r   default_override_dir   r   r   c                   C   r   )Nr   dumpr   r   r   r   r   default_dump_dir   r   r   c                   @   s~   e Zd Zdd Zedee fddZeddefddZed	edee	eef  fd
dZ
ed	ede	eef fddZdS )CacheManagerc                 C      d S Nr   selfkeyr   r   r   __init__      zCacheManager.__init__returnc                 C   r   r   r   r    filenamer   r   r   get_file!      zCacheManager.get_fileTc                 C   r   r   r   r    datar&   binaryr   r   r   put%   r(   zCacheManager.putr&   c                 C   r   r   r   r%   r   r   r   	get_group)   r(   zCacheManager.get_groupgroupc                 C   r   r   r   )r    r&   r.   r   r   r   	put_group-   r(   zCacheManager.put_groupNT)__name__
__module____qualname__r"   r   r   strr'   r,   r   r-   r/   r   r   r   r   r      s      r   c                   @   s   e Zd ZdddZdefddZdefddZdee fd	d
Z	dedee
eef  fddZdede
eef defddZddefddZdS )FileCacheManagerFc                 C   s   || _ d | _|r1tdd pt | _tj| j| j | _tj| jd| _tj	| jdd d S |rKtdd p=t
 | _tj| j| j | _d S tdd pUt | _| jrwtj| j| j | _tj| jd| _tj	| jdd d S td)	NTRITON_DUMP_DIR lockTexist_okTRITON_OVERRIDE_DIRTRITON_CACHE_DIR$Could not create or locate cache dir)r!   	lock_pathr	   r
   stripr   	cache_dirr   r   makedirsr   r   RuntimeError)r    r!   r   r   r   r   r   r"   4   s    zFileCacheManager.__init__r$   c                 C   s   t j| j|S r   )r	   r   r   r@   r%   r   r   r   
_make_pathI   r   zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr=   )r@   rB   r	   r   existsrC   r%   r   r   r   has_fileL   s   zFileCacheManager.has_filec                 C   s   |  |r
| |S d S r   )rE   rC   r%   r   r   r   r'   Q   s   

zFileCacheManager.get_filer&   c           
      C   s   d| }|  |sd S | |}t|}t|}W d    n1 s%w   Y  |dd }|d u r6d S i }| D ]\}}	tj	|	rJ|	||< q<|S N__grp__child_paths)
rE   rC   openjsonloadgetitemsr	   r   rD   )
r    r&   grp_filenamegrp_filepathfgrp_datarH   resultcpr   r   r   r-   W   s    



zFileCacheManager.get_groupr.   c                 C   s6   | j stdtd|i}d| }| j||ddS )Nr=   rH   rG   Fr+   )r@   rB   rJ   dumpsr,   r    r&   r.   grp_contentsrN   r   r   r   r/   i   s
   
zFileCacheManager.put_groupTc                 C   s   | j stdt|t}|st|}| jd usJ | |}tt }t	
 }t	j| j d| d| }t	j|dd t	j||}|rHdnd}	t||	}
|
| W d    n1 s_w   Y  t	|| t	| |S )Nr=   ztmp.pid__Tr9   wbw)r@   rB   
isinstancebytesr4   r>   rC   uuiduuid4r	   getpidr   r   rA   rI   writereplace
removedirs)r    r*   r&   r+   filepathrnd_idpidtemp_dir	temp_pathmoderP   r   r   r   r,   p   s&   


zFileCacheManager.putNFFr0   )r1   r2   r3   r"   r4   rC   boolrE   r   r'   r   r-   r/   r,   r   r   r   r   r5   2   s    
r5   c                   @   sV   e Zd ZdZdefddZedee deee	f fddZ
ed	ed
e	fddZdS )RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r!   c                 C   r   r   r   r   r   r   r   r"      r#   zRemoteCacheBackend.__init__	filenamesr$   c                 C   r   r   r   )r    rm   r   r   r   rL      r(   zRemoteCacheBackend.getr&   r*   c                 C   r   r   r   r    r&   r*   r   r   r   r,      r(   zRemoteCacheBackend.putN)r1   r2   r3   __doc__r4   r"   r   r   r   r]   rL   r,   r   r   r   r   rl      s     rl   c                   @   sb   e Zd Zdd ZdedefddZdee deeef fdd	Zded
e	deee	f fddZ
dS )RedisRemoteCacheBackendc                 C   sJ   dd l }|| _tjdd| _|jtjddttjddd| _d S )	Nr   TRITON_REDIS_KEY_FORMATztriton:{key}:{filename}TRITON_REDIS_HOST	localhostTRITON_REDIS_PORTi  )hostport)	redis_keyr	   environrL   _key_fmtRedisint_redis)r    r!   rw   r   r   r   r"      s   z RedisRemoteCacheBackend.__init__r&   r$   c                 C   s   | j j| j|dS )N)r!   r&   )rz   formatrx   r%   r   r   r   _get_key   r   z RedisRemoteCacheBackend._get_keyrm   c                    s.    j  fdd|D }dd t||D S )Nc                    s   g | ]}  |qS r   )r   ).0rP   r    r   r   
<listcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r   r   )r   r&   rR   r   r   r   
<dictcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)r}   mgetzip)r    rm   resultsr   r   r   rL      s   zRedisRemoteCacheBackend.getr*   c                 C   s   | j | || d S r   )r}   setr   rn   r   r   r   r,      s   zRedisRemoteCacheBackend.putN)r1   r2   r3   r"   r4   r   r   r   rL   r]   r,   r   r   r   r   rp      s
    	"rp   c                   @   s   e Zd ZdddZdedefddZdedee fd	d
ZddedefddZ	dedee
eef  fddZdede
eef fddZdS )RemoteCacheManagerFc           	      C   sV   t jd }|d\}}t|}t||}||| _|| _|| _t	|||d| _
d S )NTRITON_REMOTE_CACHE_BACKEND:)r   r   )r	   ry   split	importlibimport_modulegetattr_backend	_override_dumpr5   _file_cache_manager)	r    r!   r   r   remote_cache_managermodule_pathclz_nmemoduleremote_cache_clsr   r   r   r"      s   



zRemoteCacheManager.__init__r&   r*   c                 C   s   | j j||ddS )NTrU   )r   r,   rn   r   r   r   _materialize   s   zRemoteCacheManager._materializer$   c                 C   sP   | j s| jr| j|S | j|g}t|dkrd S | \\}}| ||S )Nr   )	r   r   r   r'   r   rL   lenrM   r   )r    r&   r   rY   r*   r   r   r   r'      s   zRemoteCacheManager.get_fileTc                 C   sP   | j s| jr| jj|||dS t|tst|d}| j|| | 	||S )NrU   utf-8)
r   r   r   r,   r\   r]   r4   encoder   r   r)   r   r   r   r,      s   
zRemoteCacheManager.putc           
      C   s   | j s| jr| j|S d| }| |}|d u rd S t|}t|}W d    n1 s0w   Y  |dd }d }|d urXi }| j	|
 D ]\}}	| ||	||< qK|S rF   )r   r   r   r-   r'   rI   rJ   rK   rL   r   rM   r   )
r    r&   rN   rO   rP   rQ   rH   rR   
child_pathr*   r   r   r   r-      s    


zRemoteCacheManager.get_groupr.   c                 C   sJ   | j s| jr| j||S tdtt| i}d| }| 	||S )NrH   rG   )
r   r   r   r/   rJ   rV   sortedlistkeysr,   rW   r   r   r   r/      s
   
zRemoteCacheManager.put_groupNrj   r0   )r1   r2   r3   r"   r4   r]   r   r   r'   r,   r   r-   r/   r   r   r   r   r      s    

r   DEFAULTc                 C   s   t t| ddS )Nr   =)base64	b32encoder]   fromhexdecoderstripr!   r   r   r   _base32  s   r   r$   c                 C   sX   dd l }|jdd }|d ur&|tkr&|d\}}t|}t||a|att	| S )Nr   TRITON_CACHE_MANAGERr   )
r	   ry   rL   __cache_cls_nmer   r   r   r   __cache_clsr   )r!   r	   user_cache_managerr   r   r   r   r   r   get_cache_manager  s   

r   c                 C      t t| ddS )NT)r   r   r   r   r   r   r   get_override_manager  r   r   c                 C   r   )NT)r   r   r   r   r   r   get_dump_manager  r   r   c                 K   sp   dd |  D }|  dd|  d| d| }|D ]}| d|| }qt|d }t|S )Nc                 S   s&   i | ]\}}||d  dkrdn|qS )r   *ptrr   )r   kvr   r   r   r   "  s   & z%make_so_cache_key.<locals>.<dictcomp>-r7   r   )	rM   r   valuesrL   hashlibsha256r   	hexdigestr   )version_hash	signature	constantsidskwargsr!   kwr   r   r   make_so_cache_key   s   $r   )r   rJ   r	   r^   abcr   r   pathlibr   typingr   r   r   r   r   r   r   r   r   r   r5   rl   rp   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s2    YM