§
    øÛg  ã                   ó¢   — d Z ddlmZ  G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        ZdS )zÄ
This module contains multithread-safe cache implementations.

All Caches have

    getorbuild(key, builder)
    delentry(key)

methods and allow configuration when instantiating the cache class.
é    )Útimec                   ó<   — e Zd Zdd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd	„ Z	d
S )Ú
BasicCacheé€   c                 óV   — || _         t          ||dz  z
  ¦  «        | _        i | _        d S )Né   )Ú
maxentriesÚintÚprunenumÚ_dict)Úselfr	   s     úH/granary/edev/quantum/lib/python3.11/site-packages/py/_path/cacheutil.pyÚ__init__zBasicCache.__init__   s,   € Ø$ˆŒÝ˜J¨°A©Ñ5Ñ6Ô6ˆŒØˆŒ
ˆ
ˆ
ó    c                 ó8   — | j                              ¦   «          d S ©N)r   Úclear©r   s    r   r   zBasicCache.clear   s   € ØŒ
×ÒÑÔÐÐÐr   c                 ó   — | j         |         S r   )r   )r   Úkeys     r   Ú	_getentryzBasicCache._getentry   s   € ØŒz˜#ŒÐr   c                 óB   — |                       ¦   «          || j        |<   d S r   )Ú_prunelowestweightr   ©r   r   Úentrys      r   Ú	_putentryzBasicCache._putentry   s#   € Ø×ÒÑ!Ô!Ð!ØˆŒ
�3‰ˆˆr   Fc                 ó@   — 	 | j         |= d S # t          $ r |r‚ Y d S w xY wr   )r   ÚKeyError)r   r   Úraisings      r   ÚdelentryzBasicCache.delentry   sI   € ð	Ø”
˜3���øÝð 	ð 	ð 	Øð Øðð ð ð	øøøs   ‚ Œœc                 ó¶   — 	 |                       |¦  «        }n<# t          $ r/ |                      ||¦  «        }|                      ||¦  «         Y nw xY w|j        S r   )r   r   Ú_buildr   Úvalue)r   r   Úbuilderr   s       r   Ú
getorbuildzBasicCache.getorbuild$   sl   € ð	'Ø—N’N 3Ñ'Ô'ˆEˆEøÝð 	'ð 	'ð 	'Ø—K’K  WÑ-Ô-ˆEØ�NŠN˜3 Ñ&Ô&Ð&Ð&Ð&ð	'øøøð Œ{Ðs   ‚ ˜6AÁAc                 ó(  — t          | j        ¦  «        }|| j        k    rnd„ | j                             ¦   «         D ¦   «         }|                     ¦   «          || j        z
  }|dk    r)|d|…         D ] \  }}|                      |d¬¦  «         ŒdS dS dS )z' prune out entries with lowest weight. c                 ó&   — g | ]\  }}|j         |f‘ŒS © )Úweight)Ú.0r   r   s      r   ú
<listcomp>z1BasicCache._prunelowestweight.<locals>.<listcomp>1   s3   € ð >ð >ð >Ù&˜C ð ”l CÐ(ð >ð >ð >r   r   NF)r   )Úlenr   r	   ÚitemsÚsortr   r    )r   Ú
numentriesr-   Úindexr)   r   s         r   r   zBasicCache._prunelowestweight,   s·   € å˜œ‘_”_ˆ
Ø˜œÒ(Ð(ð>ð >Ø*.¬*×*:Ò*:Ñ*<Ô*<ð>ñ >ô >ˆEà�JŠJ‰LŒLˆLØ ¤Ñ.ˆEØ�qŠyˆyØ#(¨¨%¨¤=ð 6ð 6‘K�F˜Cà—M’M #¨u�MÑ5Ô5Ð5Ð5ð )Ð(ð ˆyð6ð 6r   N)r   )F)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r    r%   r   r(   r   r   r   r      s‡   € € € € € ðð ð ð ð
ð ð ðð ð ð ð  ð  ðð ð ð ðð ð ð6ð 6ð 6ð 6ð 6r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚBuildcostAccessCachea‡   A BuildTime/Access-counting cache implementation.
        the weight of a value is computed as the product of

            num-accesses-of-a-value * time-to-build-the-value

        The values with the least such weights are evicted
        if the cache maxentries threshold is superceded.
        For implementation flexibility more than one object
        might be evicted at a time.
    c                 ót   — t          ¦   «         } |¦   «         }t          ¦   «         }t          |||z
  ¦  «        S r   )ÚgettimeÚWeightedCountingEntry)r   r   r$   ÚstartÚvalÚends         r   r"   zBuildcostAccessCache._buildG   s3   € Ý‘	”	ˆØˆg‰iŒiˆÝ‰iŒiˆÝ$ S¨#¨e©)Ñ4Ô4Ð4r   N)r1   r2   r3   Ú__doc__r"   r(   r   r   r5   r5   :   s-   € € € € € ð	ð 	ð5ð 5ð 5ð 5ð 5r   r5   c                   ó0   — e Zd Zd„ Zd„ Z ee¦  «        ZdS )r8   c                 ó0   — || _         |x| _        | _        d S r   )Ú_valuer)   Ú
_oneweight)r   r#   Ú	oneweights      r   r   zWeightedCountingEntry.__init__O   s   € ØˆŒØ(1Ð1ˆŒ�d”o�o�or   c                 ó:   — | xj         | j        z  c_         | j        S r   )r)   r@   r?   r   s    r   r#   zWeightedCountingEntry.valueS   s   € ØˆŒ�t”Ñ&ˆŒØŒ{Ðr   N)r1   r2   r3   r   r#   Úpropertyr(   r   r   r8   r8   N   s;   € € € € € ð2ð 2ð 2ðð ð ð ˆH�U‰OŒO€E€E€Er   r8   c                   ó0   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )Ú
AgingCachez; This cache prunes out cache entries that are too old.
    r   ç      $@c                 óf   •— t          t          | ¦  «                             |¦  «         || _        d S r   )ÚsuperrE   r   Ú
maxseconds)r   r	   rI   Ú	__class__s      €r   r   zAgingCache.__init__[   s,   ø€ Ý�j˜$ÑÔ×(Ò(¨Ñ4Ô4Ð4Ø$ˆŒˆˆr   c                 ó�   — | j         |         }|                     ¦   «         r$|                      |¦  «         t          |¦  «        ‚|S r   )r   Ú	isexpiredr    r   r   s      r   r   zAgingCache._getentry_   sB   € Ø”
˜3”ˆØ�?Š?ÑÔð 	 Ø�MŠM˜#ÑÔÐÝ˜3‘-”-ÐØˆr   c                 ób   —  |¦   «         }t          |t          ¦   «         | j        z   ¦  «        }|S r   )Ú
AgingEntryr7   rI   )r   r   r$   r:   r   s        r   r"   zAgingCache._buildf   s,   € Øˆg‰iŒiˆÝ˜3¥¡	¤	¨D¬OÑ ;Ñ<Ô<ˆØˆr   )r   rF   )r1   r2   r3   r<   r   r   r"   Ú__classcell__)rJ   s   @r   rE   rE   X   se   ø€ € € € € ðð ð%ð %ð %ð %ð %ð %ðð ð ðð ð ð ð ð ð r   rE   c                   ó   — e Zd Zd„ Zd„ ZdS )rN   c                 ó"   — || _         || _        d S r   )r#   r)   )r   r#   Úexpirationtimes      r   r   zAgingEntry.__init__l   s   € ØˆŒ
Ø$ˆŒˆˆr   c                 ó4   — t          ¦   «         }|| j        k    S r   )r7   r)   )r   Úts     r   rL   zAgingEntry.isexpiredp   s   € Ý‰IŒIˆØ�D”KÒÐr   N)r1   r2   r3   r   rL   r(   r   r   rN   rN   k   s2   € € € € € ð%ð %ð %ð ð  ð  ð  ð  r   rN   N)	r<   r   r7   Úobjectr   r5   r8   rE   rN   r(   r   r   ú<module>rV      s   ðð	ð 	ð !Ð  Ð  Ð  Ð  Ð  ð+6ð +6ð +6ð +6ð +6�ñ +6ô +6ð +6ðZ5ð 5ð 5ð 5ð 5˜:ñ 5ô 5ð 5ð(ð ð ð ð ˜Fñ ô ð ðð ð ð ð �ñ ô ð ð& ð  ð  ð  ð  �ñ  ô  ð  ð  ð  r   