Ë
    	êñi'  ã                  ó  — d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ er4d dlZd dlmZmZmZmZmZ d dlmZ ej(                  d	k\  rd d
lmZ nd d
lmZ  e	d«      Z e	d«      Z e	d«      Z G d„ deeef   «      Zy)é    )Úannotations)ÚOrderedDict)ÚMutableMapping)ÚTYPE_CHECKINGÚAnyÚTypeVarÚoverload)Ú
NO_DEFAULTN)Ú	ItemsViewÚIterableÚIteratorÚKeysViewÚ
ValuesView)Ú	NoDefault)é   é   )ÚSelfÚDÚKÚVc                  ó  — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zd d
„Zed!d"d„«       Zed#d$d„«       Zd!d%d„Zed&d„«       Zd'd„Zd(d„Zedd„«       Zej*                  d)d„«       Zefd*d„Zd+d„Zd,d„Zy)-ÚLRUCachec                ó0   — t        «       | _        || _        y)aý  
        Initialize an LRU (Least Recently Used) cache with a specified maximum size.

        Parameters
        ----------
        maxsize : int
            The maximum number of items the cache can hold.

        Examples
        --------
        >>> from polars._utils.cache import LRUCache
        >>> cache = LRUCache[str, int](maxsize=3)
        >>> cache["a"] = 1
        >>> cache["b"] = 2
        >>> cache["c"] = 3
        >>> cache["d"] = 4  # evicts the least recently used item ("a"), as maxsize=3
        >>> print(cache["b"])  # accessing "b" marks it as recently used
        2
        >>> print(list(cache.keys()))  # show the current keys in LRU order
        ['c', 'd', 'b']
        >>> cache.get("xyz", "not found")
        'not found'
        N)r   Ú_itemsÚmaxsize)Úselfr   s     úU/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/polars/_utils/cache.pyÚ__init__zLRUCache.__init__   s   € ô0 *5«ˆŒØˆ�ó    c                ó,   — t        | j                  «      S )z8Returns True if the cache is not empty, False otherwise.)Úboolr   ©r   s    r   Ú__bool__zLRUCache.__bool__5   s   € ä�D—K‘KÓ Ð r   c                ó   — || j                   v S )z!Check if the key is in the cache.©r   )r   Úkeys     r   Ú__contains__zLRUCache.__contains__9   s   € à�d—k‘kÐ!Ð!r   c                óZ   — || j                   vr|›d�}t        |«      ‚| j                   |= y)z6Remove the item with the specified key from the cache.ú not found in cacheN)r   ÚKeyError©r   r&   Úmsgs      r   Ú__delitem__zLRUCache.__delitem__=   s1   € à�d—k‘kÑ!Ø�GÐ.Ð/ˆCÜ˜3“-ÐØ�K‰K˜Ñr   c                ó’   — || j                   vr|›d�}t        |«      ‚| j                   j                  |«       | j                   |   S )z(Raises KeyError if the key is not found.r)   )r   r*   Úmove_to_endr+   s      r   Ú__getitem__zLRUCache.__getitem__D   sH   € à�d—k‘kÑ!Ø�GÐ.Ð/ˆCÜ˜3“-Ðð 	�‰×Ñ Ô$Ø�{‰{˜3ÑÐr   c              #  ó8   K  — | j                   E d{  –—†  y7 Œ­w)z#Iterate over the keys in the cache.Nr%   r"   s    r   Ú__iter__zLRUCache.__iter__N   s   è ø€ à—;‘;×Òús   ‚’“c                ó,   — t        | j                  «      S )zNumber of items in the cache.)Úlenr   r"   s    r   Ú__len__zLRUCache.__len__R   s   € ä�4—;‘;ÓÐr   c                ó  — | j                   dk(  ryt        | «      | j                   k\  r)| j                  «        t        | «      | j                   k\  rŒ)|| v r| j                  j	                  |«       || j                  |<   y)zInsert a value into the cache.r   N)Ú	_max_sizer4   Úpopitemr   r/   )r   r&   Úvalues      r   Ú__setitem__zLRUCache.__setitem__V   sc   € à�>‰>˜QÒØÜ�$‹i˜4Ÿ>™>Ò)Ø�L‰LŒNô �$‹i˜4Ÿ>™>Ó)à�$‰;à�K‰K×#Ñ# CÔ(Ø ˆ�‰�CÒr   c           	     ót  — t        | j                  j                  «       «      }t        | «      dkD  r;dj	                  d„ |dd D «       «      dz   dj	                  d„ |dd D «       «      z   }ndj	                  d	„ |D «       «      }| j
                  j                  › d
|› d| j                  › dt        | «      › d�S )z,Return a string representation of the cache.é   z, c              3  ó0   K  — | ]  \  }}|›d |›�–— Œ y­w©z: N© ©Ú.0ÚkÚvs      r   ú	<genexpr>z$LRUCache.__repr__.<locals>.<genexpr>f   s   è ø€ ÒD©d¨a°˜Q˜E  A 5œ/ÑDùó   ‚Né   z ..., c              3  ó0   K  — | ]  \  }}|›d |›�–— Œ y­wr>   r?   r@   s      r   rD   z$LRUCache.__repr__.<locals>.<genexpr>h   s   è ø€ ÒG±°°1˜q˜e 2 a UœOÑGùrE   éþÿÿÿc              3  ó0   K  — | ]  \  }}|›d |›�–— Œ y­wr>   r?   r@   s      r   rD   z$LRUCache.__repr__.<locals>.<genexpr>k   s   è ø€ ÒD±$°!°Q   R¨ uœoÑDùrE   z({z}, maxsize=z, currsize=ú))Úlistr   Úitemsr4   ÚjoinÚ	__class__Ú__name__r7   )r   Ú	all_itemsrL   s      r   Ú__repr__zLRUCache.__repr__a   s¶   € ä˜Ÿ™×*Ñ*Ó,Ó-ˆ	Üˆt‹9�qŠ=à—	‘	ÑD°iÀÀ°mÔDÓDØñà—)‘)ÑG¸	À"À#¸ÔGÓGñHñ ð —I‘IÑD¸)ÔDÓDˆEØ—.‘.×)Ñ)Ð*¨#¨e¨W°LÀÇÁÐ@PÐP[Ô\_Ð`dÓ\eÐ[fÐfgÐhÐhr   c                ó8   — | j                   j                  «        y)z$Clear the cache, removing all items.N)r   Úclearr"   s    r   rS   zLRUCache.clearn   s   € à�‰×ÑÕr   Nc                 ó   — y ©Nr?   ©r   r&   Údefaults      r   ÚgetzLRUCache.getr   s   € Ø=@r   c                 ó   — y rU   r?   rV   s      r   rX   zLRUCache.getu   s   € Ø69r   c                ób   — || v r*| j                   j                  |«       | j                   |   S |S )zJReturn value associated with `key` if present, otherwise return `default`.)r   r/   rV   s      r   rX   zLRUCache.getx   s/   € à�$‰;à�K‰K×#Ñ# CÔ(Ø—;‘;˜sÑ#Ð#Øˆr   c               ó.   —  | |«      }|D ]  }|||<   Œ	 |S )zGInitialize cache with keys from an iterable, all set to the same value.r?   )Úclsr   Úkeysr9   Úcacher&   s         r   ÚfromkeyszLRUCache.fromkeys€   s*   € ñ �G“ˆØò 	ˆCØˆE�#ŠJð	àˆr   c                ó6   — | j                   j                  «       S )z?Return an iterable view of the cache's items (keys and values).)r   rL   r"   s    r   rL   zLRUCache.itemsˆ   s   € à�{‰{× Ñ Ó"Ð"r   c                ó6   — | j                   j                  «       S )z,Return an iterable view of the cache's keys.)r   r]   r"   s    r   r]   zLRUCache.keysŒ   s   € à�{‰{×ÑÓ!Ð!r   c                ó   — | j                   S rU   )r7   r"   s    r   r   zLRUCache.maxsize�   s   € à�~‰~Ðr   c                ó–   — |dk  rd|› �}t        |«      ‚t        | «      |kD  r| j                  «        t        | «      |kD  rŒ|| _        y)zASet new maximum cache size; cache is trimmed if value is smaller.r   z$`maxsize` cannot be negative; found N)Ú
ValueErrorr4   r8   r7   )r   Únr,   s      r   r   zLRUCache.maxsize”   sI   € ð ˆqŠ5Ø8¸¸Ð<ˆCÜ˜S“/Ð!Ü�$‹i˜!ŠmØ�L‰LŒNô �$‹i˜!‹màˆ�r   c                ón   — | j                   j                  ||«      x}t        u r|›d�}t        |«      ‚|S )zÃ
        Remove specified key from the cache and return the associated value.

        If the key is not found, `default` is returned (if given).
        Otherwise, a KeyError is raised.
        r)   )r   Úpopr
   r*   )r   r&   rW   Úitemr,   s        r   rg   zLRUCache.popž   s<   € ð —K‘K—O‘O C¨Ó1Ð1ˆD´jÑ@Ø�GÐ.Ð/ˆCÜ˜3“-ÐØˆr   c                ó:   — | j                   j                  d¬«      S )zHRemove the least recently used value; raises KeyError if cache is empty.F)Úlast)r   r8   r"   s    r   r8   zLRUCache.popitemª   s   € à�{‰{×"Ñ"¨Ð"Ó.Ð.r   c                ó6   — | j                   j                  «       S )z.Return an iterable view of the cache's values.)r   Úvaluesr"   s    r   rl   zLRUCache.values®   s   € à�{‰{×!Ñ!Ó#Ð#r   )r   ÚintÚreturnÚNone)rn   r!   )r&   r   rn   r!   )r&   r   rn   ro   )r&   r   rn   r   )rn   zIterator[K])rn   rm   )r&   r   r9   r   rn   ro   )rn   Ústr)rn   ro   rU   )r&   r   rW   ro   rn   zV | None).)r&   r   rW   r   rn   úV | D)r&   r   rW   zD | V | Nonern   zV | D | None)r   rm   r]   zIterable[K]r9   r   rn   r   )rn   zItemsView[K, V])rn   zKeysView[K])re   rm   rn   ro   )r&   r   rW   zD | NoDefaultrn   rq   )rn   ztuple[K, V])rn   zValuesView[V])rO   Ú
__module__Ú__qualname__r   r#   r'   r-   r0   r2   r5   r:   rQ   rS   r	   rX   Úclassmethodr_   rL   r]   Úpropertyr   Úsetterr
   rg   r8   rl   r?   r   r   r   r      s¶   „ óó6!ó"óó óó ó	!óióð Û@ó Ø@àÛ9ó Ø9ôð òó ðó#ó"ð òó ðð ‡^�^òó ðð 4>ô 
ó/ô$r   r   )Ú
__future__r   Úcollectionsr   Úcollections.abcr   Útypingr   r   r   r	   Úpolars._utils.variousr
   Úsysr   r   r   r   r   r   Úversion_infor   Útyping_extensionsr   r   r   r   r?   r   r   ú<module>r      sl   ðÝ "å #Ý *ß 8Ó 8å ,áÛßSÕSå/à
×Ñ˜7Ò"Þå*áˆCƒL€ÙˆCƒL€ÙˆCƒL€ôW$ˆ~˜a ˜dÑ#õ W$r   