U
    yÊ¹j^  ã                   @   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 d dlm	Z	m
Z
 dd„ ZG dd„ deƒZG d	d
„ d
eƒZeadaedœdd„ZdS )é    N)ÚABCÚabstractmethod)ÚPath)ÚDictÚOptionalc                   C   s   t j t ¡ dd¡S )Nz.tritonÚcache)ÚosÚpathÚjoinr   Úhome© r   r   úS/var/www/html/bwave/python/venv/lib/python3.8/site-packages/triton/runtime/cache.pyÚdefault_cache_dir	   s    r   c                   @   sŒ   e Zd Zdd„ Zeee dœdd„ƒZ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_filec                 C   s   d S r   r   r   r   r   r   Úhas_file   s    zCacheManager.has_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   Úboolr   r   r   r   r"   r   r   r   r   r      s   r   c                   @   s€   e Zd Zdd„ Zedœd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f dœdd„Zdedœdd„ZdS )ÚFileCacheManagerc                 C   s^   || _ d | _tj dtƒ ¡| _| jrZtj | j| j ¡| _tj | jd¡| _tj	| jdd� d S )NZTRITON_CACHE_DIRÚlockT)Úexist_ok)
r   Ú	lock_pathr   ÚenvironÚgetr   Ú	cache_dirr	   r
   Úmakedirsr   r   r   r   r   '   s    zFileCacheManager.__init__r   c                 C   s   t j | j|¡S r   )r   r	   r
   r.   r   r   r   r   Ú
_make_path1   s    zFileCacheManager._make_pathc                 C   s   | j s
dS tj |  |¡¡S )NF)r.   r   r	   Úexistsr0   r   r   r   r   r   4   s    zFileCacheManager.has_filec                 C   s   |   |¡r|  |¡S d S d S r   )r   r0   r   r   r   r   r   9   s    

zFileCacheManager.get_filer   c           
   	   C   sž   d|› �}|   |¡sd S |  |¡}t|ƒ�}t |¡}W 5 Q R X | dd ¡}|d krXd S i }|D ]8}|  |¡}	tj |	¡s�t	d|	› d|› d�ƒ‚|	||< q`|S )NÚ__grp__Úchild_pathszGroup file z does not exist from group ú )
r   r0   ÚopenÚjsonÚloadr-   r   r	   r1   Ú	Exception)
r   r   Úgrp_filenameZgrp_filepathÚfZgrp_datar3   ÚresultÚcÚpr   r   r   r   ?   s     





zFileCacheManager.get_groupr    c                 C   s>   | j s
d S t dtt| ¡ ƒƒi¡}d|› �}| j||dd�S )Nr3   r2   F)r   )r.   r6   ÚdumpsÚsortedÚlistÚkeysr   )r   r   r!   Zgrp_contentsr9   r   r   r   r"   S   s
    
zFileCacheManager.put_groupTc           
   	   C   sœ   | j s
d S t|tƒ}|s t|ƒ}| jd k	s.t‚|  |¡}t dd¡}t	 
¡ }|› d|› d|› �}|rhdnd}t||ƒ�}	|	 |¡ W 5 Q R X t	 ||¡ |S )Nr   i@B z	.tmp.pid_Ú_ÚwbÚw)r.   Ú
isinstanceÚbytesr&   r+   ÚAssertionErrorr0   ÚrandomÚrandintr   Úgetpidr5   ÚwriteÚreplace)
r   r   r   r   ÚfilepathZrnd_idÚpidZ	temp_pathÚmoder:   r   r   r   r   Z   s    

zFileCacheManager.putN)T)r#   r$   r%   r   r&   r0   r   r   r   r   r   r"   r   r   r   r   r   r(   &   s   
r(   ÚDEFAULTr   c                 C   s\   dd l }|j dd ¡}|d k	rT|tkrTdd l}| d¡\}}| |¡}t||ƒa|at| ƒS )Nr   ZTRITON_CACHE_MANAGERú:)	r   r,   r-   Ú__cache_cls_nmeÚ	importlibÚsplitÚimport_moduleÚgetattrÚ__cache_cls)r   r   Zuser_cache_managerrS   Úmodule_pathZclz_nmeÚmoduler   r   r   Úget_cache_manageru   s    

rZ   )r6   r   rH   Úabcr   r   Úpathlibr   Útypingr   r   r   r   r(   rW   rR   rZ   r   r   r   r   Ú<module>   s   K