o
    H!i                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
mZ d dlZeeejddZejdeZeedZeedZeedZd	d
 Zdd ZdddZG dd dZe ZdS )    N)Path~z.paddlexZPADDLE_PDX_CACHE_HOMEZfunc_retlockstempc                  O   s.   t jtdd t jtdd t jtdd dS )zcreate cache dirT)exist_okN)osmakedirs	CACHE_DIRFUNC_CACHE_DIRFILE_LOCK_DIRargskwargs r   _/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddlex/utils/cache.pycreate_cache_dir#   s   r   c                  O   s   t S )zget cache dir)r	   r   r   r   r   get_cache_dir,   s   r   c                    sH   d t ttfdu rdd dd fdd fd	d
}|S )persistzpersist_{key}.pklNc                 S   s   | d uS Nr   )retr   r   r   <lambda>;   s    zpersist.<locals>.<lambda>c                 S   s   t | dS )Nzutf-8)strencode)objr   r   r   	_to_bytes=   s   zpersist.<locals>._to_bytesc                    s   t  }|tt|  || j |j	 D ](\}}t
| s8tt| d| dt| d|| || q| }|S )Nz: z, z' is unhashable or not a supported type.)hashlibmd5updateosprealpathinspectgetsourcefile__name__	argumentsitems
isinstance	TypeErrorreprtype	hexdigest)funcbnd_argsmkvhash_)SUPPORTED_ARG_TYPESr   r   r   	_make_key@   s   
zpersist.<locals>._make_keyc                    s    t   fdd}|S )Nc            	   	      sB  t }|j| i |}|  |}tt jt|d}t	
tt| d}|g t|rQt|d}t|}W d    n1 sKw   Y  n6| i |}|rt|d}t|| W d    n 1 srw   Y  W d    |S W d    |S W d    |S W d    |S 1 sw   Y  |S )N)keyz.lockrbwb)r    	signaturebindapply_defaultsr   joinr
   formatr   filelockZFileLockr   existsopenpickleloaddump)	r   r   sigr+   r2   Zcache_file_pathlockfr   )FILENAME_PATTERNr1   condr*   r   r   _wrapperR   s@   



	
	
	
		z(persist.<locals>._deco.<locals>._wrapper)	functoolswraps)r*   rE   )rC   r1   rD   )r*   r   _decoQ   s   zpersist.<locals>._deco)r   intfloat)rD   rH   r   )rC   r0   r1   r   rD   r   r   2   s   
r   c                   @   s:   e Zd Zdd Zdd Zdd ZG dd dZd	d
 ZdS )TempFileManagerc                 C   s(   g | _ ttjddd t| j d S )NT)parentsr   )
temp_filesr   TEMP_DIRmkdiratexitregistercleanupselfr   r   r   __init__m   s   zTempFileManager.__init__c                 K   s&   t jddtd|}| j| |S )NF)deletedirr   )tempfileNamedTemporaryFilerN   rM   append)rT   r   	temp_filer   r   r   create_temp_filer   s   z TempFileManager.create_temp_filec              	   C   s@   | j D ]}z|  t|j W q ty   Y qw g | _ d S r   )rM   closer   removenameFileNotFoundError)rT   r[   r   r   r   rR   w   s   

zTempFileManager.cleanupc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z&TempFileManager.TempFileContextManagerc                 K   s   || _ || _d | _d S r   )managerr   r[   )rT   ra   r   r   r   r   rU      s   
z/TempFileManager.TempFileContextManager.__init__c                 C   s   | j jdi | j| _| jS )Nr   )ra   r\   r   r[   rS   r   r   r   	__enter__   s   z0TempFileManager.TempFileContextManager.__enter__c                 C   s   | j r
| j   d S d S r   )r[   r]   )rT   exc_type	exc_value	tracebackr   r   r   __exit__   s   z/TempFileManager.TempFileContextManager.__exit__N)r"   
__module____qualname__rU   rb   rf   r   r   r   r   TempFileContextManager   s    ri   c                 K   s   | j | fi |S r   )ri   )rT   r   r   r   r   temp_file_context   s   z!TempFileManager.temp_file_contextN)r"   rg   rh   rU   r\   rR   ri   rj   r   r   r   r   rK   l   s    	rK   r   )rP   rF   r   r    r   Zos.pathpathr   r=   rX   pathlibr   r:   abspathr8   
expanduserZDEFAULT_CACHE_DIRenvirongetr	   r
   r   rN   r   r   r   rK   Ztemp_file_managerr   r   r   r   <module>   s(   	
:
&