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   O/var/www/html/scripts/venv/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   cachedump_dir	cache_dirospathjoinmakedirsoverride_dirdirRuntimeErrorr   r   r   r   r   $   s    


zFileCacheManager.__init__r   c                 C   s   t j| j|S r   )r0   r1   r2   r/   r   r   r   r   
_make_path9   s   zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr+   )r/   r6   r0   r1   existsr7   r   r   r   r   has_file<   s   zFileCacheManager.has_filec                 C   s   |  |r
| |S d S r   )r9   r7   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)
r9   r7   openjsonloadgetitemsr0   r1   r8   )
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<   r;   Fr   )r/   r6   r>   dumpsr   r   r   r   grp_contentsrB   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/   r6   
isinstancebytesr&   r,   r7   uuiduuid4r0   getpidr1   r2   r3   r=   writereplace
removedirs)r   r   r   r   filepathrnd_idpidtemp_dir	temp_pathmoderD   r   r   r   r   `   s&   


zFileCacheManager.putNr!   r"   )r#   r$   r%   r   r&   r7   boolr9   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   rQ   r@   r   r   r   r   r   r_   {   s     r_   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-   
key_format_key_fmtRedisrd   re   _redis)r   r   rf   r   r   r   r      s   z RedisRemoteCacheBackend.__init__r   r   c                 C   s   | j j| j|dS )N)r   r   )ri   formatrg   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   )rm   ).0rD   r   r   r   
<listcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r   r   )rn   r   rF   r   r   r   
<dictcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)rk   mgetzip)r   r`   resultsr   ro   r   r@      s   zRedisRemoteCacheBackend.getr   c                 C   s   | j | || d S r   )rk   setrm   ra   r   r   r   r      s   zRedisRemoteCacheBackend.putN)r#   r$   r%   r   r&   rm   r   r   r@   rQ   r   r   r   r   r   rc      s
    	"rc   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-   remote_manager_classr6   _backend	_override_dumpr'   _file_cache_manager)r   r   r   r   remote_cache_clsr   r   r   r      s   
zRemoteCacheManager.__init__r   r   c                 C   s   | j j||ddS )NTrI   )r{   r   ra   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   )	rz   ry   r{   r   rx   r@   lenrA   r}   )r   r   rt   rM   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 )NrI   utf-8)
rz   ry   r{   r   rP   rQ   r&   encoderx   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 r:   )rz   ry   r{   r   r   r=   r>   r?   r@   rx   rA   r}   )
r   r   rB   rC   rD   rE   r<   rF   
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<   r;   )
rz   ry   r{   r    r>   rJ   sortedlistkeysr   rK   r   r   r   r       s
   
zRemoteCacheManager.put_groupNr!   r"   )r#   r$   r%   r   r&   rQ   r}   r   r   r   r   r   r    r   r   r   r   rv      s    

rv   c                 C   s   t t| ddS )Nr   =)base64	b32encoderQ   fromhexdecoderstrip)r   r   r   r   _base32   s   r   r   c                 C   s   t jjpt}|t| S r   r   r-   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   *ptrr   )rn   kvr   r   r   rq     s   & z%make_so_cache_key.<locals>.<dictcomp>- r   )	rA   r2   valuesr@   hashlibsha256r   	hexdigestr   )version_hash	signature	constantsidskwargsr   kwr   r   r   make_so_cache_key  s   $r   )r>   r0   rR   abcr   r   typingr   r   r   r   r   r   r   r	   r'   r_   rc   rv   r   r   r   r   r   r   r   r   r   <module>   s$    YM