a
    öDf$                     @   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 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edddZedddZedddZdS )    N)ABCabstractmethod)Path)DictListOptionalc                   C   s   t jt ddS )N.tritoncacheospathjoinr   home r   r   a/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/triton/runtime/cache.pydefault_cache_dir   s    r   c                   C   s   t jt ddS )Nr   overrider
   r   r   r   r   default_override_dir   s    r   c                   C   s   t jt ddS )Nr   dumpr
   r   r   r   r   default_dump_dir   s    r   c                   @   sz   e Zd Zdd Zeee dddZededddZeeee	eef  d	d
dZ
eee	eef dddZdS )CacheManagerc                 C   s   d S Nr   selfkeyr   r   r   __init__   s    zCacheManager.__init__returnc                 C   s   d S r   r   r   filenamer   r   r   get_file   s    zCacheManager.get_fileTc                 C   s   d S r   r   r   datar   binaryr   r   r   put    s    zCacheManager.putr   r   c                 C   s   d S r   r   r   r   r   r   	get_group$   s    zCacheManager.get_groupr   groupc                 C   s   d S r   r   )r   r   r(   r   r   r   	put_group(   s    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edddZedddZee dd	d
Z	eee
eef  dddZee
eef edddZdedddZdS )FileCacheManagerFc                 C   s   || _ d | _|rPt | _tj| j| j | _tj| jd| _tj| jdd n|rrt | _tj| j| j | _n^t	dd
 pt | _| jrtj| j| j | _tj| jd| _tj| jdd ntdd S )NlockT)exist_okZTRITON_CACHE_DIR $Could not create or locate cache dir)r   	lock_pathr   	cache_dirr   r   r   makedirsr   getenvstripr   RuntimeError)r   r   r   r   r   r   r   r   /   s     zFileCacheManager.__init__r   c                 C   s   t j| j|S r   )r   r   r   r4   r   r   r   r   
_make_pathD   s    zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr2   )r4   r8   r   r   existsr9   r   r   r   r   	_has_fileG   s    zFileCacheManager._has_filec                 C   s   |  |r| |S d S d S r   )r;   r9   r   r   r   r   r    L   s    

zFileCacheManager.get_filer%   c           
      C   s   d| }|  |sd S | |}t|}t|}W d    n1 sJ0    Y  |dd }|d u rld S i }|D ]"}| |}	tj|	rt|	||< qt|S N__grp__child_paths)	r;   r9   openjsonloadgetr   r   r:   )
r   r   grp_filenamegrp_filepathfgrp_datar>   resultcpr   r   r   r&   R   s    



(

zFileCacheManager.get_group)r   r(   r   c                 C   sB   | j stdtdtt| i}d| }| j||ddS )Nr2   r>   r=   Fr#   )r4   r8   r@   dumpssortedlistkeysr$   r   r   r(   Zgrp_contentsrC   r   r   r   r)   e   s
    
zFileCacheManager.put_groupTc           
      C   s   | j stdt|t}|s$t|}| jd us2J | |}tdd}t	
 }| d| d| }|rldnd}t||}	|	| W d    n1 s0    Y  t	|| |S )Nr2   r   i@B z	.tmp.pid__wbw)r4   r8   
isinstancebytesr-   r3   r9   randomrandintr   getpidr?   writereplace)
r   r"   r   r#   filepathZrnd_idpidZ	temp_pathmoderE   r   r   r   r$   l   s    

(zFileCacheManager.putN)FF)T)r*   r+   r,   r   r-   r9   boolr;   r   r    r   r&   r)   r$   r   r   r   r   r.   -   s   
r.   c                   @   sR   e Zd ZdZedddZeee eee	f dddZ
eee	dd	d
ZdS )RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r   c                 C   s   d S r   r   r   r   r   r   r      s    zRemoteCacheBackend.__init__	filenamesr   c                 C   s   d S r   r   )r   ra   r   r   r   rB      s    zRemoteCacheBackend.getr   r"   c                 C   s   d S r   r   r   r   r"   r   r   r   r$      s    zRemoteCacheBackend.putN)r*   r+   r,   __doc__r-   r   r   r   r   rT   rB   r$   r   r   r   r   r^      s   r^   c                   @   sZ   e Zd Zdd ZeedddZee eeef dddZee	eee	f d	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   ZTRITON_REDIS_KEY_FORMATztriton:{key}:{filename}ZTRITON_REDIS_HOST	localhostZTRITON_REDIS_PORTi  )hostport)	redis_keyr   environrB   _key_fmtZRedisint_redis)r   r   ri   r   r   r   r      s    z RedisRemoteCacheBackend.__init__r%   c                 C   s   | j j| j|dS )N)r   r   )rl   formatrj   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   )rp   ).0rE   r   r   r   
<listcomp>       z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r   r   )rq   r   rG   r   r   r   
<dictcomp>   rt   z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)rn   Zmgetzip)r   ra   resultsr   rr   r   rB      s    zRedisRemoteCacheBackend.get)r   r"   r   c                 C   s   | j | || d S r   )rn   setrp   rc   r   r   r   r$      s    zRedisRemoteCacheBackend.putN)r*   r+   r,   r   r-   rp   r   r   rB   rT   r$   r   r   r   r   re      s   	re   c                   @   s   e Zd ZdddZeedddZeee ddd	ZdeedddZ	eee
eef  dddZee
eef dddZdS )RemoteCacheManagerFc           	      C   sV   t jd }|d\}}t|}t||}||| _|| _|| _t	|||d| _
d S )NZTRITON_REMOTE_CACHE_BACKEND:)r   r   )r   rk   split	importlibimport_modulegetattr_backend	_override_dumpr.   _file_cache_manager)	r   r   r   r   Zremote_cache_managermodule_pathclz_nmemoduleZremote_cache_clsr   r   r   r      s    



zRemoteCacheManager.__init__rb   c                 C   s   | j j||ddS )NTrJ   )r   r$   rc   r   r   r   _materialize   s    zRemoteCacheManager._materializer%   c                 C   sP   | j s| jr| j|S | j|g}t|dkr6d S | \\}}| ||S )Nr   )	r   r   r   r    r   rB   lenitemsr   )r   r   rw   rP   r"   r   r   r   r       s    zRemoteCacheManager.get_fileTc                 C   sP   | j s| jr| jj|||dS t|ts6t|d}| j|| | 	||S )NrJ   zutf-8)
r   r   r   r$   rS   rT   r-   encoder   r   r!   r   r   r   r$      s    
zRemoteCacheManager.putc           
      C   s   | j s| jr| j|S d| }| |}|d u r8d S t|}t|}W d    n1 s`0    Y  |dd }d }|d uri }| j	|
 D ]\}}	| ||	||< q|S r<   )r   r   r   r&   r    r?   r@   rA   rB   r   r   r   )
r   r   rC   rD   rE   rF   r>   rG   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>   r=   )
r   r   r   r)   r@   rK   rL   rM   rN   r$   rO   r   r   r   r)      s
    
zRemoteCacheManager.put_groupN)FF)T)r*   r+   r,   r   r-   rT   r   r   r    r$   r   r&   r)   r   r   r   r   ry      s   

ry   DEFAULTr   c                 C   sT   dd l }|jdd }|d urL|tkrL|d\}}t|}t||a|at| S )Nr   ZTRITON_CACHE_MANAGERrz   )	r   rk   rB   __cache_cls_nmer{   r|   r}   r~   __cache_cls)r   r   Zuser_cache_managerr   r   r   r   r   r   get_cache_manager   s    

r   c                 C   s   t | ddS )NT)r   r   r_   r   r   r   get_override_manager  s    r   c                 C   s   t | ddS )NT)r   r   r_   r   r   r   get_dump_manager  s    r   )r|   r@   r   rU   abcr   r   pathlibr   typingr   r   r   hashlibr   r   r   r   r.   r^   re   ry   r   r   r   r   r   r   r   r   r   <module>   s(   VM