o
    fqi-                     @   s   d Z d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m	Z	m
Z
mZmZmZ ddlmZ ddlmZ G d	d
 d
eZdd ZdddZdddZdddZdejdfddZddejdfddZdS )z?`functools.lru_cache` compatible memoizing function decorators.)
fifo_cache	lfu_cache	lru_cacherr_cache	ttl_cache    N)	Condition   )	FIFOCacheLFUCacheLRUCacheRRCacheTTLCache)cached)keysc                   @   s    e Zd Zdd Zedd ZdS )_UnboundTTLCachec                 C   s   t | tj|| d S N)r   __init__mathinf)selfttltimer r   V/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/cachetools/func.pyr      s   z_UnboundTTLCache.__init__c                 C   s   d S r   r   )r   r   r   r   maxsize   s   z_UnboundTTLCache.maxsizeN)__name__
__module____qualname__r   propertyr   r   r   r   r   r      s    r   c                    s    fdd}|S )Nc                    s:   rt jnt j}t |t dd| }fdd|_|S )NT)cachekey	conditioninfoc                      s
    dS )Nr   typedr   r   r#   r   r   <lambda>   s   
 z+_cache.<locals>.decorator.<locals>.<lambda>)r   ZtypedkeyZhashkeyr   r   cache_parameters)funcr    wrapperr   r   r$   r   r   	decorator   s   z_cache.<locals>.decoratorr   )r   r   r$   r*   r   r)   r   _cache   s   r+      Fc                 C   @   | du r
t i d|S t| rt tdd|| S t t| | |S )zDecorator to wrap a function with a memoizing callable that saves
    up to `maxsize` results based on a First In First Out (FIFO)
    algorithm.

    Nr,   )r+   callabler	   r#   r   r   r   r   #   
   r   c                 C   r-   )zDecorator to wrap a function with a memoizing callable that saves
    up to `maxsize` results based on a Least Frequently Used (LFU)
    algorithm.

    Nr,   )r+   r.   r
   r#   r   r   r   r   1   r/   r   c                 C   r-   )zDecorator to wrap a function with a memoizing callable that saves
    up to `maxsize` results based on a Least Recently Used (LRU)
    algorithm.

    Nr,   )r+   r.   r   r#   r   r   r   r   ?   r/   r   c                 C   sD   | du r
t i d|S t| rt td|d|| S t t| || |S )zDecorator to wrap a function with a memoizing callable that saves
    up to `maxsize` results based on a Random Replacement (RR)
    algorithm.

    Nr,   )r+   r.   r   )r   choicer$   r   r   r   r   M   s
   r   iX  c                 C   sN   | du rt t||d|S t| rt td||d|| S t t| ||| |S )zDecorator to wrap a function with a memoizing callable that saves
    up to `maxsize` results based on a Least Recently Used (LRU)
    algorithm with a per-item time-to-live (TTL) value.

    Nr,   )r+   r   r.   r   )r   r   r   r$   r   r   r   r   [   s
   r   )r,   F)__doc____all__	functoolsr   randomtime	threadingr    r	   r
   r   r   r   r   r   r   r+   r   r   r   r0   r   	monotonicr   r   r   r   r   <module>   s"    	



