o
    h$                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
Z
d dlZddlm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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)DictListOptional   )knobsc                   @   s   e Zd Zd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 )CacheManagerFc                 C      d S N selfkeyoverridedumpr   r   Z/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/triton/runtime/cache.py__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FF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 | _|r*tjj| _tj| j| j | _tj| jd| _tj	| jdd d S |r=tjj
| _tj| j| j | _d S tjj| _| jrbtj| j| j | _tj| jd| _tj	| jdd d S td)NlockTexist_ok$Could not create or locate cache dir)r   	lock_pathr   cacheZdump_dir	cache_dirospathjoinmakedirsZoverride_dirdirRuntimeErrorr   r   r   r   r   $   s    


zFileCacheManager.__init__r   c                 C   s   t j| j|S r   )r/   r0   r1   r.   r   r   r   r   
_make_path9   s   zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr+   )r.   r4   r/   r0   existsr5   r   r   r   r   has_file<   s   zFileCacheManager.has_filec                 C   s   |  |r
| |S d S r   )r7   r5   r   r   r   r   r   A   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)
r7   r5   openjsonloadgetitemsr/   r0   r6   )
r   r   grp_filenamegrp_filepathfgrp_datar:   resultcpr   r   r   r   G   s    



zFileCacheManager.get_groupr   c                 C   s6   | j stdtd|i}d| }| j||ddS )Nr+   r:   r9   Fr   )r.   r4   r<   dumpsr   r   r   r   Zgrp_contentsr@   r   r   r   r    Y   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__Tr)   wbw)r.   r4   
isinstancebytesr&   r,   r5   uuiduuid4r/   getpidr0   r1   r2   r;   writereplace
removedirs)r   r   r   r   filepathZrnd_idpidtemp_dirZ	temp_pathmoderB   r   r   r   r   `   s&   


zFileCacheManager.putNr!   r"   )r#   r$   r%   r   r&   r5   boolr7   r   r   r   r   r    r   r   r   r   r   r'   "   s    
r'   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      r   zRemoteCacheBackend.__init__	filenamesr   c                 C   r
   r   r   )r   r[   r   r   r   r>      r   zRemoteCacheBackend.getr   r   c                 C   r
   r   r   r   r   r   r   r   r   r      r   zRemoteCacheBackend.putN)r#   r$   r%   __doc__r&   r   r   r   r   rN   r>   r   r   r   r   r   rZ   {   s     rZ   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   s:   dd l }|| _tjj j| _|jtjj jtjj jd| _	d S )Nr   )hostport)
redis_keyr   r-   Z
key_format_key_fmtZRedisr_   r`   _redis)r   r   ra   r   r   r   r      s   z RedisRemoteCacheBackend.__init__r   r   c                 C   s   | j j| j|dS )N)r   r   )rc   formatrb   r   r   r   r   _get_key   s   z RedisRemoteCacheBackend._get_keyr[   c                    s.    j  fdd|D }dd t||D S )Nc                    s   g | ]}  |qS r   )rf   ).0rB   r   r   r   
<listcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r   r   )rg   r   rD   r   r   r   
<dictcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)rd   Zmgetzip)r   r[   resultsr   rh   r   r>      s   zRedisRemoteCacheBackend.getr   c                 C   s   | j | || d S r   )rd   setrf   r\   r   r   r   r      s   zRedisRemoteCacheBackend.putN)r#   r$   r%   r   r&   rf   r   r   r>   rN   r   r   r   r   r   r^      s
    	"r^   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   s>   t jj}|s
td||| _|| _|| _t|||d| _d S )NzdUnable to instantiate RemoteCacheManager, TRITON_REMOTE_CACHE_BACKEND doesn't point to a valid class)r   r   )	r   r-   Zremote_manager_classr4   _backend	_override_dumpr'   _file_cache_manager)r   r   r   r   Zremote_cache_clsr   r   r   r      s   
zRemoteCacheManager.__init__r   r   c                 C   s   | j j||ddS )NTrG   )rr   r   r\   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   )	rq   rp   rr   r   ro   r>   lenr?   rs   )r   r   rl   rJ   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 )NrG   utf-8)
rq   rp   rr   r   rM   rN   r&   encodero   rs   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 r8   )rq   rp   rr   r   r   r;   r<   r=   r>   ro   r?   rs   )
r   r   r@   rA   rB   rC   r:   rD   Z
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 )Nr:   r9   )
rq   rp   rr   r    r<   rH   sortedlistkeysr   rI   r   r   r   r       s
   
zRemoteCacheManager.put_groupNr!   r"   )r#   r$   r%   r   r&   rN   rs   r   r   r   r   r   r    r   r   r   r   rn      s    

rn   c                 C   s   t t| ddS )Nru   =)base64	b32encoderN   fromhexdecoderstrip)r   r   r   r   _base32   s   r   r   c                 C   s   t jjpt}|t| S r   r   r-   Zmanager_classr'   r   r   clsr   r   r   get_cache_manager   s   r   c                 C      t jjpt}|t| ddS )NT)r   r   r   r   r   r   get_override_manager      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   *Zptrr   )rg   kvr   r   r   rj     s   & z%make_so_cache_key.<locals>.<dictcomp>- ru   )	r?   r1   valuesr>   hashlibsha256rv   	hexdigestr   )Zversion_hash	signature	constantsZidskwargsr   kwr   r   r   make_so_cache_key  s   $r   )r<   r/   rO   abcr   r   typingr   r   r   r{   r   r   r   r	   r'   rZ   r^   rn   r   r   r   r   r   r   r   r   r   <module>   s$    YM