
    sg&                        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 Zd Zd Z G d d	e      Z G d
 de      Z G d d      Z G d de      Z G d de      ZeadadefdZdefdZdefdZd Zy)    N)ABCabstractmethod)Path)DictListOptionalc                  h    t         j                  j                  t        j                         dd      S )N.tritoncacheospathjoinr   home     G/var/www/html/venv/lib/python3.12/site-packages/triton/runtime/cache.pydefault_cache_dirr      s    77<<		Y88r   c                  h    t         j                  j                  t        j                         dd      S )Nr
   overrider   r   r   r   default_override_dirr      s    77<<		Y
;;r   c                  h    t         j                  j                  t        j                         dd      S )Nr
   dumpr   r   r   r   default_dump_dirr      s    77<<		Y77r   c                       e Zd Zd Zedee   fd       Zed
defd       Zededee	eef      fd       Z
edede	eef   fd       Zy	)CacheManagerc                      y Nr   selfkeys     r   __init__zCacheManager.__init__       r   returnc                      y r   r   r    filenames     r   get_filezCacheManager.get_file       r   c                      y r   r   r    datar'   binarys       r   putzCacheManager.put    r)   r   r'   c                      y r   r   r&   s     r   	get_groupzCacheManager.get_group$   r)   r   groupc                      y r   r   )r    r'   r1   s      r   	put_groupzCacheManager.put_group(   r)   r   NT)__name__
__module____qualname__r"   r   r   strr(   r.   r   r0   r3   r   r   r   r   r      s     HSM   #   # (4S>*B   # d38n  r   r   c                       e Zd ZddZdefdZdefdZdee   fdZ	dedee
eef      fdZdede
eef   defd	Zddefd
Zy)FileCacheManagerc                    || _         d | _        |rt               | _        t        j
                  j                  | j                  | j                         | _        t        j
                  j                  | j                  d      | _        t	        j                  | j                  d       y |rIt               | _        t        j
                  j                  | j                  | j                         | _        y t	        j                  dd      j                         xs
 t               | _        | j                  rt        j
                  j                  | j                  | j                         | _        t        j
                  j                  | j                  d      | _        t	        j                  | j                  d       y 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   s       r   r"   zFileCacheManager.__init__/   s   -/DNWW\\$..$((CDNWW\\$..&ADNKK613DNWW\\$..$((CDN  YY'92>DDF]J[J]DN~~!#dnndhh!G!#dnnf!EDNNT:"#IJJr   r$   c                 V    t         j                  j                  | j                  |      S r   )r   r   r   rB   r&   s     r   
_make_pathzFileCacheManager._make_pathD   s    ww||DNNH55r   c                     | j                   st        d      t        j                  j	                  | j                  |            S )Nr@   )rB   rF   r   r   existsrH   r&   s     r   has_filezFileCacheManager.has_fileG   s1    ~~EFFww~~dooh788r   c                 H    | j                  |      r| j                  |      S y r   )rK   rH   r&   s     r   r(   zFileCacheManager.get_fileL   s     =="??8,,r   r'   c                 h   d| }| j                  |      sy | j                  |      }t        |      5 }t        j                  |      }d d d        j                  dd       }|y i }|j                         D ]*  \  }}	t        j                  j                  |	      s&|	||<   , |S # 1 sw Y   _xY wN__grp__child_paths)
rK   rH   openjsonloadgetitemsr   r   rJ   )
r    r'   grp_filenamegrp_filepathfgrp_datarP   resultcps
             r   r0   zFileCacheManager.get_groupR   s     
+}}\*|4, 	$1yy|H	$ll=$7%%' 	DAqww~~a q		 	$ 	$s   B((B1r1   c                     | j                   st        d      t        j                  d|i      }d| }| j	                  ||d      S )Nr@   rP   rO   Fr-   )rB   rF   rR   dumpsr.   r    r'   r1   grp_contentsrV   s        r   r3   zFileCacheManager.put_groupd   sI    ~~EFFzz=%"89 
+xxl5xAAr   c                    | j                   st        d      t        |t              }|st	        |      }| j
                  J | j                  |      }t	        t        j                               }t        j                         }| d| d| }|rdnd}t        ||      5 }	|	j                  |       d d d        t        j                  ||       |S # 1 sw Y   !xY w)Nr@   z	.tmp.pid__wbw)rB   rF   
isinstancebytesr8   rA   rH   uuiduuid4r   getpidrQ   writereplace)
r    r,   r'   r-   filepathrnd_idpid	temp_pathmoderX   s
             r   r.   zFileCacheManager.putk   s    ~~EFFD%(t9D~~)))??8,TZZ\"iikj	#ax8	t3)T" 	aGGDM	 	

9h'	 	s   !CCNFFr4   )r5   r6   r7   r"   r8   rH   boolrK   r   r(   r   r0   r3   r.   r   r   r   r:   r:   -   s    K*6c 69D 9
HSM # (4S>*B $B# Bd38n B B# r   r:   c                   `    e Zd ZdZdefdZedee   deee	f   fd       Z
edede	fd	       Zy
)RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r!   c                      y r   r   r   s     r   r"   zRemoteCacheBackend.__init__   r#   r   	filenamesr$   c                      y r   r   )r    rw   s     r   rT   zRemoteCacheBackend.get   r)   r   r'   r,   c                      y r   r   r    r'   r,   s      r   r.   zRemoteCacheBackend.put   r)   r   N)r5   r6   r7   __doc__r8   r"   r   r   r   rg   rT   r.   r   r   r   ru   ru      sd    C  T#Y 4U
+;   C u  r   ru   c                   `    e Zd Zd ZdedefdZdee   deeef   fdZdede	deee	f   fdZ
y	)
RedisRemoteCacheBackendc           	         dd l }|| _        t        j                  j	                  dd      | _        |j                  t        j                  j	                  dd      t        t        j                  j	                  dd                  | _        y )	Nr   TRITON_REDIS_KEY_FORMATztriton:{key}:{filename}TRITON_REDIS_HOST	localhostTRITON_REDIS_PORTi  )hostport)	redis_keyr   environrT   _key_fmtRedisint_redis)r    r!   r   s      r   r"   z RedisRemoteCacheBackend.__init__   sd    	

'@B[\kk 3[ARZZ^^$7>? " 
r   r'   r$   c                 P    | j                   j                  | j                  |      S )N)r!   r'   )r   formatr   r&   s     r   _get_keyz RedisRemoteCacheBackend._get_key   s     }}##		H#EEr   rw   c                     | j                   j                  |D cg c]  }| j                  |       c}      }t        ||      D ci c]  \  }}|	|| c}}S c c}w c c}}w r   )r   mgetr   zip)r    rw   rX   resultsr'   rZ   s         r   rT   zRedisRemoteCacheBackend.get   s[    ++""i#HDMM!$4#HI9<Y9Pg%5XvTZTf& gg $Igs   A
A!A!r,   c                 Z    | j                   j                  | j                  |      |       y r   )r   setr   rz   s      r   r.   zRedisRemoteCacheBackend.put   s    h/6r   N)r5   r6   r7   r"   r8   r   r   r   rT   rg   r.   r   r   r   r}   r}      sb    
F F FhT#Y h4S> h7C 7u 7c5j1A 7r   r}   c                       e Zd ZddZdedefdZdedee   fdZddedefdZ	dedee
eef      fdZded	e
eef   fd
Zy)RemoteCacheManagerc                     t         j                  d   }|j                  d      \  }}t        j                  |      }t        ||      } ||      | _        || _        || _        t        |||      | _
        y )NTRITON_REMOTE_CACHE_BACKEND:)r   r   )r   r   split	importlibimport_modulegetattr_backend	_override_dumpr:   _file_cache_manager)	r    r!   r   r   remote_cache_managermodule_pathclz_nmemoduleremote_cache_clss	            r   r"   zRemoteCacheManager.__init__   sr    !zz*GH399#>W((5"673(-!
 $4C(QU#V r   r'   r,   c                 >    | j                   j                  ||d      S )NTr^   )r   r.   rz   s      r   _materializezRemoteCacheManager._materialize   s     ''++D(4+HHr   r$   c                    | j                   s| j                  r| j                  j                  |      S | j                  j                  |g      }t        |      dk(  ry |j                         \  \  }}| j                  ||      S )Nr   )	r   r   r   r(   r   rT   lenrU   r   )r    r'   r   rc   r,   s        r   r(   zRemoteCacheManager.get_file   sq    ::++44X>>
 --##XJ/w<1]]_
	D  400r   c                    | j                   s| j                  r| j                  j                  |||      S t	        |t
              st        |      j                  d      }| j                  j                  ||       | j                  ||      S )Nr^   utf-8)
r   r   r   r.   rf   rg   r8   encoder   r   r+   s       r   r.   zRemoteCacheManager.put   sr    ::++//hv/NN$&t9##G,D(D)  400r   c                    | j                   s| j                  r| j                  j                  |      S d| }| j	                  |      }|y t        |      5 }t        j                  |      }d d d        j                  dd       }d }|Hi }| j                  j                  |      j                         D ]  \  }}	| j                  ||	      ||<    |S # 1 sw Y   ixY wrN   )r   r   r   r0   r(   rQ   rR   rS   rT   r   rU   r   )
r    r'   rV   rW   rX   rY   rP   rZ   
child_pathr,   s
             r   r0   zRemoteCacheManager.get_group   s    ::++55h?? 
+}}\2, 	$1yy|H	$ll=$7 "F$(MM$5$5k$B$H$H$J I 
D%)%6%6z4%Hz"I 	$ 	$s   CCr1   c           	         | j                   s| j                  r| j                  j                  ||      S t	        j
                  dt        t        |j                                     i      }d| }| j                  ||      S )NrP   rO   )
r   r   r   r3   rR   r_   sortedlistkeysr.   r`   s        r   r3   zRemoteCacheManager.put_group   sh    ::++55hFFzz=&ejjl9K2L"MN 
+xxl33r   Nrr   r4   )r5   r6   r7   r"   r8   rg   r   r   r(   r.   r   r0   r3   r   r   r   r   r      s    WIS I I1 1# 11# 1s 1# (4S>*B .4# 4d38n 4r   r   DEFAULTr$   c                     dd l }|j                  j                  dd       }|@|t        k7  r7|j	                  d      \  }}t        j                  |      }t        ||      a|at        |       S )Nr   TRITON_CACHE_MANAGERr   )	r   r   rT   __cache_cls_nmer   r   r   r   __cache_cls)r!   r   user_cache_managerr   r   r   s         r   get_cache_managerr      sl    (>E %*<*O177<W((5fg.,sr   c                     t        | d      S )NT)r   r   r!   s    r   get_override_managerr   
  s    sT**r   c                     t        | d      S )NT)r   r   r   s    r   get_dump_managerr     s    s&&r   c                 ^   |j                         D ci c]  \  }}||d   dk(  rdn| }}}|  ddj                  |j                                d| d| }|D ]  }| d|j                  |       } t	        j
                  |j                  d            j                         }|S c c}}w )Nr   *ptr-r?   r   )rU   r   valuesrT   hashlibsha256r   	hexdigest)	version_hash	signature	constantsidskwargskvr!   kws	            r   make_so_cache_keyr     s    <EOO<MNDAqQqTS[Ea/NINN!BGGI$4$4$678)AcU
KC (Qvzz"~&'(
..G,
-
7
7
9CJ Os   B))r   rR   r   rh   abcr   r   pathlibr   typingr   r   r   r   r   r   r   r   r:   ru   r}   r   r   r   r   r   r   r   r   r   r   <module>r      s      	  #  ' ' 9<83 ,R| Rj "70 7,J4 J4Z l  + +'\ 'r   