
    çg&                     ,   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dS )    N)ABCabstractmethod)Path)DictListOptionalc                  f    t           j                            t          j                    dd          S )N.tritoncacheospathjoinr   home     P/var/www/html/ai-engine/env/lib/python3.11/site-packages/triton/runtime/cache.pydefault_cache_dirr      s     7<<	Y888r   c                  f    t           j                            t          j                    dd          S )Nr
   overrider   r   r   r   default_override_dirr      s     7<<	Y
;;;r   c                  f    t           j                            t          j                    dd          S )Nr
   dumpr   r   r   r   default_dump_dirr      s     7<<	Y7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d
S )CacheManagerc                     d S Nr   selfkeys     r   __init__zCacheManager.__init__       r   returnc                     d S r   r   r    filenames     r   get_filezCacheManager.get_file       r   Tc                     d S r   r   r    datar'   binarys       r   putzCacheManager.put    r)   r   r'   c                     d S r   r   r&   s     r   	get_groupzCacheManager.get_group$   r)   r   groupc                     d S 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dS )FileCacheManagerFc                 L   || _         d | _        |rt                      | _        t          j                            | j        | j                   | _        t          j                            | j        d          | _        t	          j        | j        d           d S |rDt                      | _        t          j                            | j        | j                   | _        d S t	          j	        dd          
                                pt                      | _        | j        rvt          j                            | j        | j                   | _        t          j                            | j        d          | _        t	          j        | j        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   s       r   r"   zFileCacheManager.__init__/   sE    	K-//DNW\\$.$(CCDNW\\$.&AADNK666666 	K133DNW\\$.$(CCDNNN  Y'92>>DDFF]J[J]J]DN~ K!#dndh!G!G!#dnf!E!EDNT::::::"#IJJJr   r$   c                 L    t           j                            | j        |          S r   )r   r   r   rB   r&   s     r   
_make_pathzFileCacheManager._make_pathD   s    w||DNH555r   c                     | j         st          d          t          j                            |                     |                    S )Nr@   )rB   rF   r   r   existsrH   r&   s     r   has_filezFileCacheManager.has_fileG   s<    ~ 	GEFFFw~~dooh77888r   c                 Z    |                      |          r|                     |          S d S r   )rK   rH   r&   s     r   r(   zFileCacheManager.get_fileL   s-    =="" 	??8,,,4r   r'   c                    d| }|                      |          sd S |                     |          }t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   |                    dd           }|d S i }|                                D ])\  }}	t          j        	                    |	          r|	||<   *|S 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|44, 	$1y||H	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ll=$774%%'' 	 	DAqw~~a   q	s   A""A&)A&r1   c                     | j         st          d          t          j        d|i          }d| }|                     ||d          S )Nr@   rP   rO   Fr-   )rB   rF   rR   dumpsr.   r    r'   r1   grp_contentsrV   s        r   r3   zFileCacheManager.put_groupd   sU    ~ 	GEFFFz=%"899+++xxl5xAAAr   Tc                    | j         st          d          t          |t                    }|st	          |          }| j        J |                     |          }t	          t          j                              }t          j
                    }| d| d| }|rdnd}t          ||          5 }	|	                    |           d d d            n# 1 swxY w Y   t          j        ||           |S )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.   ~ 	GEFFFD%(( 	t99D~)))??8,,TZ\\""ikk88#8888	&tt3)T"" 	aGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
9h'''s   .CCCNFFr4   )r5   r6   r7   r"   r8   rH   boolrK   r   r(   r   r0   r3   r.   r   r   r   r:   r:   -   s       K K K K*6c 6 6 6 69D 9 9 9 9
HSM    # (4S>*B    $B# Bd38n B B B B B #      r   r:   c                   z    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d
S )RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r!   c                     d S r   r   r   s     r   r"   zRemoteCacheBackend.__init__   r#   r   	filenamesr$   c                     d S r   r   )r    rw   s     r   rT   zRemoteCacheBackend.get   r)   r   r'   r,   c                     d S 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      s         C     T#Y 4U
+;    ^ C u    ^  r   ru   c                   t    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
d	S )
RedisRemoteCacheBackendc           	      0   dd l }|| _        t          j                            dd          | _        |                    t          j                            dd          t          t          j                            dd                              | _        d S )	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__   sy    	
'@B[\\kk 3[AARZ^^$7>>?? " 
 
r   r'   r$   c                 D    | j                             | j        |          S )N)r!   r'   )r   formatr   r&   s     r   _get_keyz RedisRemoteCacheBackend._get_key   s    }##	H#EEEr   rw   c                       j                              fd|D                       }d t          ||          D             S )Nc                 :    g | ]}                     |          S r   )r   ).0rX   r    s     r   
<listcomp>z/RedisRemoteCacheBackend.get.<locals>.<listcomp>   s%    #H#H#HDMM!$4$4#H#H#Hr   c                     i | ]
\  }}|||S r   r   )r   r'   rZ   s      r   
<dictcomp>z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>   s%    ggg%5XvTZTf&TfTfTfr   )r   mgetzip)r    rw   resultss   `  r   rT   zRedisRemoteCacheBackend.get   sK    +""#H#H#H#Hi#H#H#HIIggY9P9Pggggr   r,   c                 b    | j                             |                     |          |           d S r   )r   setr   rz   s      r   r.   zRedisRemoteCacheBackend.put   s*    h//66666r   N)r5   r6   r7   r"   r8   r   r   r   rT   rg   r.   r   r   r   r}   r}      s        
 
 
F F F F F FhT#Y h4S> h h h h7C 7u 7c5j1A 7 7 7 7 7 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dS )RemoteCacheManagerFc                    t           j        d         }|                    d          \  }}t          j        |          }t          ||          } ||          | _        || _        || _        t          |||          | _
        d S )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__   s    !z*GH399#>>W(55"6733((--!
 $4C(QU#V#V#V   r   r'   r,   c                 <    | j                             ||d          S )NTr^   )r   r.   rz   s      r   _materializezRemoteCacheManager._materialize   s     '++D(4+HHHr   r$   c                    | j         s| j        r| j                            |          S | j                            |g          }t          |          dk    rd S |                                \  \  }}|                     ||          S )Nr   )	r   r   r   r(   r   rT   lenrU   r   )r    r'   r   rc   r,   s        r   r(   zRemoteCacheManager.get_file   s    : 	? 	?+44X>>>
 -##XJ//w<<14]]__
	D  4000r   Tc                 (   | j         s| j        r| j                            |||          S t	          |t
                    s"t          |                              d          }| j                            ||           | 	                    ||          S )Nr^   utf-8)
r   r   r   r.   rf   rg   r8   encoder   r   r+   s       r   r.   zRemoteCacheManager.put   s    : 	O 	O+//hv/NNN$&& 	-t99##G,,D(D)))  4000r   c                    | j         s| j        r| j                            |          S d| }|                     |          }|d S t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   |                    dd           }d }|Mi }| j	                            |          
                                D ]\  }}	|                     ||	          ||<   |S 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24, 	$1y||H	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ll=$77 "F$(M$5$5k$B$B$H$H$J$J I I 
D%)%6%6z4%H%Hz""s   A77A;>A;r1   c           	         | j         s| j        r| j                            ||          S t	          j        dt          t          |                                                    i          }d| }| 	                    ||          S )NrP   rO   )
r   r   r   r3   rR   r_   sortedlistkeysr.   r`   s        r   r3   zRemoteCacheManager.put_group   s}    : 	G 	G+55hFFFz=&ejjll9K9K2L2L"MNN+++xxl333r   Nrr   r4   )r5   r6   r7   r"   r8   rg   r   r   r(   r.   r   r0   r3   r   r   r   r   r      s        W W W WIS I I I I I1 1# 1 1 1 11 1# 1s 1 1 1 1# (4S>*B    .4# 4d38n 4 4 4 4 4 4r   r   DEFAULTr$   c                     dd l }|j                            dd           }|I|t          k    r>|                    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      s    III(>EE %*<*O*O177<<W(5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                 V   d |                                 D             }|  dd                    |                                           d| d| }|D ]}| d|                    |           }t	          j        |                    d                                                    }|S )Nc                 6    i | ]\  }}||d          dk    rdn|S )r   *ptrr   )r   kvs      r   r   z%make_so_cache_key.<locals>.<dictcomp>  s.    NNNDAqQqTS[[EEaNNNr   -r?   r   )rU   r   valuesrT   hashlibsha256r   	hexdigest)version_hash	signature	constantsidskwargsr!   kws          r   make_so_cache_keyr     s    NNIOO<M<MNNNI
K
KBGGI$4$4$6$677
K
K)
K
Kc
K
KC ( (''vzz"~~''
.G,,
-
-
7
7
9
9CJr   )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 9 9< < <8 8 8    3   ,R R R R R| R R Rj       "7 7 7 7 70 7 7 7,J4 J4 J4 J4 J4 J4 J4 J4Z l     + + + + +'\ ' ' ' '    r   