o
    灛i&                     @   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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      t jt ddS )N.tritoncacheospathjoinr   home r   r   V/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/triton/runtime/cache.py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 | _|r)t | _tj| j| j | _tj| jd| _tj| jdd d S |r;t | _tj| j| j | _d S t	dd
 pEt | _| jrgtj| j| j | _tj| jd| _tj| jdd d S td)NlockT)exist_ok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   r8   r!   r   r   r   
_make_pathD   s   zFileCacheManager._make_pathc                 C   s    | j stdtj| |S )Nr6   )r8   r<   r   r   existsr=   r!   r   r   r   has_fileG   s   zFileCacheManager.has_filec                 C   s   |  |r
| |S d S r   )r?   r=   r!   r   r   r   r#   L   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)
r?   r=   openjsonloadgetitemsr   r   r>   )
r   r"   grp_filenamegrp_filepathfgrp_datarB   resultcpr   r   r   r)   R   s    



zFileCacheManager.get_groupr*   c                 C   s6   | j stdtd|i}d| }| j||ddS )Nr6   rB   rA   Fr'   )r8   r<   rD   dumpsr(   r   r"   r*   grp_contentsrH   r   r   r   r+   d   s
   
zFileCacheManager.put_groupTc           
      C   s   | j stdt|t}|st|}| jd usJ | |}tt }t	
 }| d| d| }|r6dnd}t||}	|	| W d    n1 sMw   Y  t	|| |S )Nr6   z	.tmp.pid__wbw)r8   r<   
isinstancebytesr0   r7   r=   uuiduuid4r   getpidrC   writereplace)
r   r&   r"   r'   filepathrnd_idpid	temp_pathmoderJ   r   r   r   r(   k   s    

zFileCacheManager.putNFFr,   )r-   r.   r/   r   r0   r=   boolr?   r   r#   r   r)   r+   r(   r   r   r   r   r1   -   s    
r1   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   re   r   r   r   rF      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__r0   r   r   r   r   rW   rF   r(   r   r   r   r   rd      s     rd   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   environrF   _key_fmtRedisint_redis)r   r   ro   r   r   r   r      s   z RedisRemoteCacheBackend.__init__r"   r    c                 C   s   | j j| j|dS )N)r   r"   )rr   formatrp   r!   r   r   r   _get_key   s   z RedisRemoteCacheBackend._get_keyre   c                    s.    j  fdd|D }dd t||D S )Nc                    s   g | ]}  |qS r   )rw   ).0rJ   r   r   r   
<listcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<listcomp>c                 S   s   i | ]\}}|d ur||qS r   r   )rx   r"   rL   r   r   r   
<dictcomp>   s    z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>)ru   mgetzip)r   re   resultsr   ry   r   rF      s   zRedisRemoteCacheBackend.getr&   c                 C   s   | j | || d S r   )ru   setrw   rf   r   r   r   r(      s   zRedisRemoteCacheBackend.putN)r-   r.   r/   r   r0   rw   r   r   rF   rW   r(   r   r   r   r   rh      s
    	"rh   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   rq   split	importlibimport_modulegetattr_backend	_override_dumpr1   _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 )NTrO   )r   r(   rf   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   rF   lenrG   r   )r   r"   r~   rS   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 )NrO   utf-8)
r   r   r   r(   rV   rW   r0   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 r@   )r   r   r   r)   r#   rC   rD   rE   rF   r   rG   r   )
r   r"   rH   rI   rJ   rK   rB   rL   
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 )NrB   rA   )
r   r   r   r+   rD   rP   sortedlistkeysr(   rQ   r   r   r   r+      s
   
zRemoteCacheManager.put_groupNrb   r,   )r-   r.   r/   r   r0   rW   r   r   r#   r(   r   r)   r+   r   r   r   r   r      s    

r   DEFAULTr    c                 C   sT   dd l }|jdd }|d ur&|tkr&|d\}}t|}t||a|at| S )Nr   TRITON_CACHE_MANAGERr   )	r   rq   rF   __cache_cls_nmer   r   r   r   __cache_cls)r   r   user_cache_managerr   r   r   r   r   r   get_cache_manager   s   

r   c                 C      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   sl   dd |  D }|  dd|  d| d| }|D ]}| d|| }qt|d }|S )Nc                 S   s&   i | ]\}}||d  dkrdn|qS )r   *ptrr   )rx   kvr   r   r   r{     s   & z%make_so_cache_key.<locals>.<dictcomp>-r5   r   )rG   r   valuesrF   hashlibsha256r   	hexdigest)version_hash	signature	constantsidskwargsr   kwr   r   r   make_so_cache_key  s   $r   )r   rD   r   rX   abcr   r   pathlibr   typingr   r   r   r   r   r   r   r   r1   rd   rh   r   r   r   r   r   r   r   r   r   r   r   <module>   s,    UM