o
    1< i
  ã                   @   s4   d dl Z d dlmZ d dlmZ G dd„ deƒZdS )é    N)ÚMutableMapping)Ú	lru_cachec                   @   s`   e Zd ZdZ			d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S )ÚDirCachea–  
    Caching of directory listings, in a structure like::

        {"path0": [
            {"name": "path0/file0",
             "size": 123,
             "type": "file",
             ...
            },
            {"name": "path0/file1",
            },
            ...
            ],
         "path1": [...]
        }

    Parameters to this class control listing expiry or indeed turn
    caching off
    TNc                    s@   i ˆ _ i ˆ _|rt|d ƒ‡ fdd„ƒˆ _|ˆ _|ˆ _|ˆ _dS )a  

        Parameters
        ----------
        use_listings_cache: bool
            If False, this cache never returns items, but always reports KeyError,
            and setting items has no effect
        listings_expiry_time: int or float (optional)
            Time in seconds that a listing is considered valid. If None,
            listings do not expire.
        max_paths: int (optional)
            The number of most recent listings that are considered valid; 'recent'
            refers to when the entry was set.
        é   c                    s   ˆ j  | d ¡S ©N)Ú_cacheÚpop)Úkey©Úself© úJ/home/app/PyTorch/.pytorch/lib/python3.10/site-packages/fsspec/dircache.pyÚ<lambda>3   s    z#DirCache.__init__.<locals>.<lambda>N)r   Ú_timesr   Ú_qÚuse_listings_cacheÚlistings_expiry_timeÚ	max_paths)r   r   r   r   Úkwargsr   r
   r   Ú__init__   s   
zDirCache.__init__c                 C   sJ   | j d ur| j |d¡t ¡  | j  k r| j|= | jr |  |¡ | j| S )Nr   )r   r   ÚgetÚtimer   r   r   ©r   Úitemr   r   r   Ú__getitem__8   s   


zDirCache.__getitem__c                 C   s   | j  ¡  d S r   )r   Úclearr
   r   r   r   r   @   s   zDirCache.clearc                 C   s
   t | jƒS r   )Úlenr   r
   r   r   r   Ú__len__C   s   
zDirCache.__len__c                 C   s$   z| |  W dS  t y   Y dS w )NTF)ÚKeyErrorr   r   r   r   Ú__contains__F   s   ÿzDirCache.__contains__c                 C   sD   | j sd S | jr|  |¡ || j|< | jd ur t ¡ | j|< d S d S r   )r   r   r   r   r   r   r   )r   r	   Úvaluer   r   r   Ú__setitem__M   s   


ÿzDirCache.__setitem__c                 C   s   | j |= d S r   )r   )r   r	   r   r   r   Ú__delitem__V   s   zDirCache.__delitem__c                    s   t ˆ jƒ}‡ fdd„|D ƒS )Nc                 3   s    | ]	}|ˆ v r|V  qd S r   r   )Ú.0Úkr
   r   r   Ú	<genexpr>\   s   € z$DirCache.__iter__.<locals>.<genexpr>)Úlistr   )r   Úentriesr   r
   r   Ú__iter__Y   s   
zDirCache.__iter__c                 C   s   t | j| j| jffS r   )r   r   r   r   r
   r   r   r   Ú
__reduce__^   s   þzDirCache.__reduce__)TNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r!   r"   r(   r)   r   r   r   r   r      s    
ü	r   )r   Úcollections.abcr   Ú	functoolsr   r   r   r   r   r   Ú<module>   s    