Ë
    ðmxi5S  ã                   ó¨  — d Z dZdZddlZ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
  G d„ d«      Z G d	„ d
ej                  j                  «      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 G d„ de«      Z G d„ de«      Z ej,                  dg d¢«      Ze
j0                  dddfd„Ze
j4                  ddfd„Zy)z0Extensible memoizing collections and decorators.)	ÚCacheÚ	FIFOCacheÚLFUCacheÚLRUCacheÚRRCacheÚ	TLRUCacheÚTTLCacheÚcachedÚcachedmethodz6.2.5é    Né   )Úkeysc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú_DefaultSize© c                  ó   — y©Nr   r   ©ÚselfÚ_keys     úJ/home/htdocs/ttos/venv/lib/python3.12/site-packages/cachetools/__init__.pyÚ__getitem__z_DefaultSize.__getitem__   ó   € Øó    c                  ó   — y ©Nr   )r   r   Ú_values      r   Ú__setitem__z_DefaultSize.__setitem__!   s   € Ør   c                  ó   — yr   r   r   s     r   Úpopz_DefaultSize.pop$   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r   r   r   r   r   r   r      s   „ Ø€Iòòór   r   c                   ó®   — e Zd ZdZ e«       Z e«       Zdd„Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zdd„Zefd„Zdd„Zed„ «       Zed„ «       Zed„ «       Zy)r   z?Mutable mapping to serve as a simple cache or cache base class.Nc                 ó¦   — |r|| _         | j                   t        j                   urt        «       | _        t        «       | _        d| _        || _        y ©Nr   )Ú	getsizeofr   ÚdictÚ_Cache__sizeÚ_Cache__dataÚ_Cache__currsizeÚ_Cache__maxsize©r   Úmaxsizer'   s      r   Ú__init__zCache.__init__/   s<   € ÙØ&ˆDŒNØ�>‰>¤§¡Ñ0Ü›&ˆDŒKÜ“fˆŒØˆŒØ ˆ�r   c                 ó’   — t        | «      j                  ›dt        | j                  «      ›d| j                  ›d| j
                  ›d�S )Nú(z
, maxsize=z, currsize=ú))Útyper    Úreprr*   r,   r+   ©r   s    r   Ú__repr__zCache.__repr__8   s3   € ä�‹J×ÓÜ�—‘ÕØ�N‹NØ�O‹Oð	
ð 	
r   c                 ób   — 	 | j                   |   S # t        $ r | j                  |«      cY S w xY wr   )r*   ÚKeyErrorÚ__missing__©r   Úkeys     r   r   zCache.__getitem__@   s6   € ð	)Ø—;‘;˜sÑ#Ð#øÜò 	)Ø×#Ñ# CÓ(Ò(ð	)ús   ‚ ‘.­.c                 ó´  — | j                   }| j                  |«      }||kD  rt        d«      ‚|| j                  vs| j                  |   |k  r5| j
                  |z   |kD  r#| j                  «        | j
                  |z   |kD  rŒ#|| j                  v r|| j                  |   z
  }n|}|| j                  |<   || j                  |<   | xj
                  |z  c_        y )Nzvalue too large)r,   r'   Ú
ValueErrorr*   r)   r+   Úpopitem)r   r;   Úvaluer.   ÚsizeÚdiffsizes         r   r   zCache.__setitem__F   sÃ   € Ø—.‘.ˆØ�~‰~˜eÓ$ˆØ�'Š>ÜÐ.Ó/Ð/Ø�d—k‘kÑ! T§[¡[°Ñ%5¸Ò%<Ø—/‘/ DÑ(¨7Ò2Ø—‘”ð —/‘/ DÑ(¨7Ó2à�$—+‘+ÑØ˜dŸk™k¨#Ñ.Ñ.‰HàˆHØ ˆ�‰�CÑØˆ�‰�CÑØ�Š˜8Ñ#Žr   c                 ó~   — | j                   j                  |«      }| j                  |= | xj                  |z  c_        y r   )r)   r   r*   r+   )r   r;   r@   s      r   Ú__delitem__zCache.__delitem__V   s.   € Ø�{‰{�‰˜sÓ#ˆØ�K‰K˜ÐØ�Š˜4ÑŽr   c                 ó   — || j                   v S r   )r*   r:   s     r   Ú__contains__zCache.__contains__[   s   € Ø�d—k‘kÐ!Ð!r   c                 ó   — t        |«      ‚r   )r8   r:   s     r   r9   zCache.__missing__^   s   € Ü�s‹mÐr   c                 ó,   — t        | j                  «      S r   )Úiterr*   r5   s    r   Ú__iter__zCache.__iter__a   s   € Ü�D—K‘KÓ Ð r   c                 ó,   — t        | j                  «      S r   )Úlenr*   r5   s    r   Ú__len__zCache.__len__d   s   € Ü�4—;‘;ÓÐr   c                 ó   — || v r| |   S |S r   r   )r   r;   Údefaults      r   Úgetz	Cache.getm   s   € Ø�$‰;Ø˜‘9ÐàˆNr   c                 óX   — || v r
| |   }| |= |S || j                   u rt        |«      ‚|}|S r   )Ú_Cache__markerr8   ©r   r;   rN   r?   s       r   r   z	Cache.pops   sB   € Ø�$‰;Ø˜‘IˆEØ�S�	ð
 ˆð	 ˜Ÿ™Ñ%Ü˜3“-ÐàˆEØˆr   c                 ó*   — || v r| |   }|S |x| |<   }|S r   r   rR   s       r   Ú
setdefaultzCache.setdefault}   s.   € Ø�$‰;Ø˜‘IˆEð ˆð !(Ð'ˆD�‰I˜Øˆr   c                 ó   — | j                   S )zThe maximum size of the cache.)r,   r5   s    r   r.   zCache.maxsize„   s   € ð �~‰~Ðr   c                 ó   — | j                   S )zThe current size of the cache.)r+   r5   s    r   ÚcurrsizezCache.currsize‰   s   € ð �‰Ðr   c                  ó   — y)z+Return the size of a cache element's value.r   r   )r?   s    r   r'   zCache.getsizeofŽ   s   € ð r   r   )r    r!   r"   Ú__doc__ÚobjectrQ   r   r)   r/   r6   r   r   rC   rE   r9   rI   rL   rO   r   rT   Úpropertyr.   rW   Ústaticmethodr'   r   r   r   r   r   (   s�   „ ÙIá‹x€Há‹^€Fó!ò
ò)ò$ò  ò
"òò!ò óð  (ó óð ñó ðð ñó ðð ñó ñr   r   c                   óZ   — e Zd ZdZdd„Zej                  fd„Zej                  fd„Zd„ Zy)r   z/First In First Out (FIFO) cache implementation.Nc                 ód   — t         j                  | ||«       t        j                  «       | _        y r   )r   r/   ÚcollectionsÚOrderedDictÚ_FIFOCache__orderr-   s      r   r/   zFIFOCache.__init__—   ó"   € Ü�‰�t˜W iÔ0Ü"×.Ñ.Ó0ˆ�r   c                 óŠ   —  || ||«       || j                   v r| j                   j                  |«       y d | j                   |<   y r   )ra   Úmove_to_end©r   r;   r?   Úcache_setitems       r   r   zFIFOCache.__setitem__›   s:   € Ù�d˜C Ô'Ø�$—,‘,ÑØ�L‰L×$Ñ$ SÕ)à $ˆD�L‰L˜Òr   c                 ó0   —  || |«       | j                   |= y r   )ra   ©r   r;   Úcache_delitems      r   rC   zFIFOCache.__delitem__¢   ó   € Ù�d˜CÔ Ø�L‰L˜Ñr   c                 óÄ   — 	 t        t        | j                  «      «      }|| j                  |«      fS # t        $ r# t        dt        | «      j                  z  «      d‚w xY w)z9Remove and return the `(key, value)` pair first inserted.ú%s is emptyN)ÚnextrH   ra   r   ÚStopIterationr8   r3   r    r:   s     r   r>   zFIFOCache.popitem¦   ó^   € ð	(Ü”t˜DŸL™LÓ)Ó*ˆCð ˜Ÿ™ #›Ð'Ð'øô ò 	JÜ˜=¬4°«:×+>Ñ+>Ñ>Ó?ÀTÐIð	Júó	   ‚3 ³,Ar   )	r    r!   r"   rY   r/   r   r   rC   r>   r   r   r   r   r   ”   s/   „ Ù9ó1ð 5:×4EÑ4Eó %ð .3×->Ñ->ó ó(r   r   c                   ó’   — e Zd ZdZ G d„ d«      Zdd„Zej                  fd„Zej                  fd„Zej                  fd„Z	d	„ Z
d
„ Zy)r   z1Least Frequently Used (LFU) cache implementation.c                   ó   — e Zd ZdZd„ Zd„ Zy)úLFUCache._Link)Úcountr   rm   Úprevc                 ó0   — || _         t        «       | _        y r   )rt   Úsetr   )r   rt   s     r   r/   zLFUCache._Link.__init__¶   s   € ØˆDŒJÜ›ˆD�Ir   c                 óP   — | j                   }| j                  }||_         ||_        y r   ©rm   ru   ©r   rm   ru   s      r   ÚunlinkzLFUCache._Link.unlinkº   ó"   € Ø—9‘9ˆDØ—9‘9ˆDØˆDŒIØˆD�Ir   N)r    r!   r"   r#   r/   r{   r   r   r   Ú_Linkrs   ³   s   „ Ø5ˆ	ò	ó	r   r}   Nc                 ó”   — t         j                  | ||«       t        j                  d«      x| _        }|x|_        |_        i | _        y r&   )r   r/   r   r}   Ú_LFUCache__rootru   rm   Ú_LFUCache__links)r   r.   r'   Úroots       r   r/   zLFUCache.__init__À   s<   € Ü�‰�t˜W iÔ0Ü%Ÿ^™^¨AÓ.Ð.ˆŒ�dØ $Ð$ˆŒ	�D”IØˆ�r   c                 óB   —  || |«      }|| v r| j                  |«       |S r   )Ú_LFUCache__touch©r   r;   Úcache_getitemr?   s       r   r   zLFUCache.__getitem__Æ   ó&   € Ù˜d CÓ(ˆØ�$‰;Ø�L‰L˜ÔØˆr   c                 ó„  —  || ||«       || j                   v r| j                  |«       y | j                  }|j                  }|j                  dk7  rEt
        j                  d«      }|j                  |_        |x|_        |j                  _        ||_        |j                  j                  |«       || j                   |<   y r   )
r€   rƒ   r   rm   rt   r   r}   ru   r   Úadd)r   r;   r?   rf   r�   Úlinks         r   r   zLFUCache.__setitem__Ì   s–   € Ù�d˜C Ô'Ø�$—,‘,ÑØ�L‰L˜ÔØØ�{‰{ˆØ�y‰yˆØ�:‰:˜Š?Ü—>‘> !Ó$ˆDØŸ	™	ˆDŒIØ)-Ð-ˆDŒI˜Ÿ	™	œØˆDŒIØ�	‰	�‰�cÔØ ˆ�‰�SÒr   c                 ó¼   —  || |«       | j                   j                  |«      }|j                  j                  |«       |j                  s|j	                  «        y y r   )r€   r   r   Úremover{   ©r   r;   ri   r‰   s       r   rC   zLFUCache.__delitem__Û   sG   € Ù�d˜CÔ Ø�|‰|×Ñ Ó$ˆØ�	‰	×Ñ˜ÔØ�yŠyØ�K‰K�Mð r   c                 óà   — | j                   }|j                  }||u r"t        dt        | «      j                  z  «      d‚t        t        |j                  «      «      }|| j                  |«      fS )z@Remove and return the `(key, value)` pair least frequently used.rl   N)r   rm   r8   r3   r    rH   r   r   )r   r�   Úcurrr;   s       r   r>   zLFUCache.popitemâ   s\   € à�{‰{ˆØ�y‰yˆØ�4‰<Ü˜=¬4°«:×+>Ñ+>Ñ>Ó?ÀTÐIÜ”4˜Ÿ	™	“?Ó#ˆØ�T—X‘X˜c“]Ð#Ð#r   c                 ó4  — | j                   |   }|j                  }|j                  |j                  dz   k7  r€t        |j                  «      dk(  r|xj                  dz  c_        yt
        j                  |j                  dz   «      }|j                  |_        |x|_        |j                  _        ||_        |j                  j                  |«       |j                  j                  |«       |j                  s|j                  «        || j                   |<   y)zIncrement use countr   N)r€   rm   rt   rK   r   r   r}   ru   rˆ   r‹   r{   )r   r;   r‰   rŽ   s       r   Ú__touchzLFUCache.__touchë   sÇ   € à�|‰|˜CÑ ˆØ�y‰yˆØ�:‰:˜Ÿ™ a™Ò'Ü�4—9‘9‹~ Ò"Ø—
’
˜a‘•
ØÜ—>‘> $§*¡*¨q¡.Ó1ˆDØŸ	™	ˆDŒIØ)-Ð-ˆDŒI˜Ÿ	™	œØˆDŒIØ�	‰	�‰�cÔØ�	‰	×Ñ˜ÔØ�yŠyØ�K‰KŒMØ ˆ�‰�SÒr   r   )r    r!   r"   rY   r}   r/   r   r   r   rC   r>   rƒ   r   r   r   r   r   °   sN   „ Ù;÷ñ óð .3×->Ñ->ó ð 5:×4EÑ4Eó !ð .3×->Ñ->ó ò$ó!r   r   c                   ó~   — e Zd ZdZd	d„Zej                  fd„Zej                  fd„Zej                  fd„Zd„ Z	d„ Z
y)
r   z/Least Recently Used (LRU) cache implementation.Nc                 ód   — t         j                  | ||«       t        j                  «       | _        y r   )r   r/   r_   r`   Ú_LRUCache__orderr-   s      r   r/   zLRUCache.__init__  rb   r   c                 óB   —  || |«      }|| v r| j                  |«       |S r   ©Ú_LRUCache__touchr„   s       r   r   zLRUCache.__getitem__  r†   r   c                 ó:   —  || ||«       | j                  |«       y r   r•   re   s       r   r   zLRUCache.__setitem__  s   € Ù�d˜C Ô'Ø�‰�SÕr   c                 ó0   —  || |«       | j                   |= y r   )r“   rh   s      r   rC   zLRUCache.__delitem__  rj   r   c                 óÄ   — 	 t        t        | j                  «      «      }|| j                  |«      fS # t        $ r# t        dt        | «      j                  z  «      d‚w xY w)z>Remove and return the `(key, value)` pair least recently used.rl   N)rm   rH   r“   r   rn   r8   r3   r    r:   s     r   r>   zLRUCache.popitem  ro   rp   c                 óx   — 	 | j                   j                  |«       y# t        $ r d| j                   |<   Y yw xY w)zMark as recently usedN)r“   rd   r8   r:   s     r   r�   zLRUCache.__touch  s6   € ð	%Ø�L‰L×$Ñ$ SÕ)øÜò 	%Ø $ˆD�L‰L˜Óð	%ús   ‚ ž9¸9r   )r    r!   r"   rY   r/   r   r   r   rC   r>   r–   r   r   r   r   r   þ   sD   „ Ù9ó1ð .3×->Ñ->ó ð 5:×4EÑ4Eó ð .3×->Ñ->ó ò(ó%r   r   c                   ó‚   — e Zd ZdZej
                  dfd„Zed„ «       Zej                  fd„Z	ej                  fd„Z
d„ Zy)r   z-Random Replacement (RR) cache implementation.Nc                 ó\   — t         j                  | ||«       || _        i | _        g | _        y r   )r   r/   Ú_RRCache__choiceÚ_RRCache__indexÚ_RRCache__keys)r   r.   Úchoicer'   s       r   r/   zRRCache.__init__'  s'   € Ü�‰�t˜W iÔ0ØˆŒØˆŒØˆ�r   c                 ó   — | j                   S )z(The `choice` function used by the cache.)r�   r5   s    r   r    zRRCache.choice-  s   € ð �}‰}Ðr   c                 ó°   —  || ||«       || j                   vr>t        | j                  «      | j                   |<   | j                  j                  |«       y y r   )rž   rK   rŸ   Úappendre   s       r   r   zRRCache.__setitem__2  sH   € Ù�d˜C Ô'Ø�d—l‘lÑ"Ü # D§K¡KÓ 0ˆD�L‰L˜ÑØ�K‰K×Ñ˜sÕ#ð #r   c                 ó  —  || |«       | j                   j                  |«      }|t        | j                  «      dz
  k7  r-| j                  d   }|| j                  |<   || j                   |<   | j                  j                  «        y )Nr   éÿÿÿÿ)rž   r   rK   rŸ   )r   r;   ri   ÚindexÚlasts        r   rC   zRRCache.__delitem__8  sm   € Ù�d˜CÔ Ø—‘× Ñ  Ó%ˆØ”C˜Ÿ™Ó$ qÑ(Ò(Ø—;‘;˜r‘?ˆDØ!%ˆD�K‰K˜ÑØ!&ˆD�L‰L˜ÑØ�‰�‰Õr   c                 ó¾   — 	 | j                  | j                  «      }|| j                  |«      fS # t        $ r# t	        dt        | «      j                  z  «      d‚w xY w)z/Remove and return a random `(key, value)` pair.rl   N)r�   rŸ   r   Ú
IndexErrorr8   r3   r    r:   s     r   r>   zRRCache.popitemA  s]   € ð	(Ø—-‘- §¡Ó,ˆCð ˜Ÿ™ #›Ð'Ð'øô ò 	JÜ˜=¬4°«:×+>Ñ+>Ñ>Ó?ÀTÐIð	Jús	   ‚0 °,A)r    r!   r"   rY   Úrandomr    r/   r[   r   r   rC   r>   r   r   r   r   r   $  sL   „ Ù7à'-§}¡}Àó ð ñó ðð 5:×4EÑ4Eó $ð .3×->Ñ->ó ó(r   r   c                   óÄ   ‡ — e Zd ZdZ G d„ d«      Zej                  dfd„Zej                  fd„Z	ej                  fd„Z
eˆ fd„«       Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zˆ xZS )Ú_TimedCachez0Base class for time aware cache implementations.c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ú_TimedCache._Timerc                 ó    — || _         d| _        y r&   )Ú_Timer__timerÚ_Timer__nesting)r   Útimers     r   r/   z_TimedCache._Timer.__init__O  s   € Ø ˆDŒLØˆD�Nr   c                 óX   — | j                   dk(  r| j                  «       S | j                  S r&   ©r±   r°   Ú_Timer__timer5   s    r   Ú__call__z_TimedCache._Timer.__call__S  s$   € Ø�~‰~ Ò"Ø—|‘|“~Ð%à—{‘{Ð"r   c                 ó–   — | j                   dk(  r| j                  «       x| _        }n| j                  }| xj                   dz  c_         |S )Nr   r   r´   ©r   Útimes     r   Ú	__enter__z_TimedCache._Timer.__enter__Y  s<   € Ø�~‰~ Ò"Ø%)§\¡\£^Ð3�”™dà—{‘{�Ø�NŠN˜aÑ�NØˆKr   c                 ó.   — | xj                   dz  c_         y r   )r±   )r   Úexcs     r   Ú__exit__z_TimedCache._Timer.__exit__a  s   € Ø�NŠN˜aÑŽNr   c                 ó<   — t         j                  | j                  ffS r   )r¬   Ú_Timerr°   r5   s    r   Ú
__reduce__z_TimedCache._Timer.__reduce__d  s   € Ü×%Ñ%¨¯© Ð6Ð6r   c                 ó.   — t        | j                  |«      S r   )Úgetattrr°   )r   Únames     r   Ú__getattr__z_TimedCache._Timer.__getattr__g  s   € Ü˜4Ÿ<™<¨Ó.Ð.r   N)	r    r!   r"   r/   r¶   rº   r½   rÀ   rÄ   r   r   r   r¿   r®   N  s    „ ò	ò	#ò	ò	 ò	7ó	/r   r¿   Nc                 óf   — t         j                  | ||«       t        j                  |«      | _        y r   )r   r/   r¬   r¿   Ú_TimedCache__timer)r   r.   r²   r'   s       r   r/   z_TimedCache.__init__j  s$   € Ü�‰�t˜W iÔ0Ü"×)Ñ)¨%Ó0ˆ�r   c                 óx   — | j                   5 }| j                  |«        || «      cd d d «       S # 1 sw Y   y xY wr   ©rÆ   Úexpire)r   Ú
cache_reprr¹   s      r   r6   z_TimedCache.__repr__n  s4   € Ø�\‰\ð 	$˜TØ�K‰K˜ÔÙ˜dÓ#÷	$÷ 	$ò 	$úó   �0°9c                 óx   — | j                   5 }| j                  |«        || «      cd d d «       S # 1 sw Y   y xY wr   rÈ   )r   Ú	cache_lenr¹   s      r   rL   z_TimedCache.__len__s  s3   € Ø�\‰\ð 	#˜TØ�K‰K˜ÔÙ˜T“?÷	#÷ 	#ò 	#úrË   c                 ó~   •— | j                   5 }| j                  |«       t        ‰| �  cd d d «       S # 1 sw Y   y xY wr   )rÆ   rÉ   ÚsuperrW   )r   r¹   Ú	__class__s     €r   rW   z_TimedCache.currsizex  s5   ø€ à�\‰\ð 	$˜TØ�K‰K˜ÔÜ‘7Ñ#÷	$÷ 	$ò 	$ús   Ž3³<c                 ó   — | j                   S )z%The timer function used by the cache.)rÆ   r5   s    r   r²   z_TimedCache.timer~  s   € ð �|‰|Ðr   c                 ó’   — | j                   5 }| j                  |«       t        j                  | «       d d d «       y # 1 sw Y   y xY wr   )rÆ   rÉ   r   Úclearr¸   s     r   rÓ   z_TimedCache.clearƒ  s8   € Ø�\‰\ð 	˜TØ�K‰K˜ÔÜ�K‰K˜Ô÷	÷ 	ñ 	ús	   �'=½Ac                 óx   — | j                   5  t        j                  | g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY wr   )rÆ   r   rO   ©r   ÚargsÚkwargss      r   rO   z_TimedCache.getˆ  ó4   € Ø�\‰\ñ 	4Ü—9‘9˜TÐ3 DÒ3¨FÑ3÷	4÷ 	4ò 	4úrË   c                 óx   — | j                   5  t        j                  | g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY wr   )rÆ   r   r   rÕ   s      r   r   z_TimedCache.popŒ  rØ   rË   c                 óx   — | j                   5  t        j                  | g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY wr   )rÆ   r   rT   rÕ   s      r   rT   z_TimedCache.setdefault�  s6   € Ø�\‰\ñ 	;Ü×#Ñ# DÐ:¨4Ò:°6Ñ:÷	;÷ 	;ò 	;úrË   )r    r!   r"   rY   r¿   r¹   Ú	monotonicr/   r   r6   rL   r[   rW   r²   rÓ   rO   r   rT   Ú__classcell__)rÐ   s   @r   r¬   r¬   K  sx   ø„ Ù:÷/ñ /ð8 '+§n¡nÀó 1ð #(§.¡.ó $ð
 !&§¡ó #ð
 ó$ó ð$ð
 ñó ðòò
4ò4ö;r   r¬   c                   óÔ   — e Zd ZdZ G d„ d«      Zej                  dfd„Zd„ Ze	j                  fd„Z
e	j                  fd„Ze	j                  fd	„Zd
„ Zd„ Zed„ «       Zdd„Zd„ Zd„ Zy)r   z@LRU Cache implementation with per-item time-to-live (TTL) value.c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)úTTLCache._Link)r;   Úexpiresrm   ru   Nc                 ó    — || _         || _        y r   )r;   rà   ©r   r;   rà   s      r   r/   zTTLCache._Link.__init__›  s   € ØˆDŒHØ"ˆD�Lr   c                 óR   — t         j                  | j                  | j                  ffS r   )r   r}   r;   rà   r5   s    r   rÀ   zTTLCache._Link.__reduce__Ÿ  s   € Ü—>‘> D§H¡H¨d¯l©lÐ#;Ð;Ð;r   c                 óP   — | j                   }| j                  }||_         ||_        y r   ry   rz   s      r   r{   zTTLCache._Link.unlink¢  r|   r   ©NN)r    r!   r"   r#   r/   rÀ   r{   r   r   r   r}   rß   ˜  s   „ Ø6ˆ	ó	#ò	<ó	r   r}   Nc                 óÆ   — t         j                  | |||«       t        j                  «       x| _        }|x|_        |_        t        j                  «       | _	        || _
        y r   )r¬   r/   r   r}   Ú_TTLCache__rootru   rm   r_   r`   Ú_TTLCache__linksÚ_TTLCache__ttl)r   r.   Úttlr²   r'   r�   s         r   r/   zTTLCache.__init__¨  sN   € Ü×Ñ˜T 7¨E°9Ô=Ü%Ÿ^™^Ó-Ð-ˆŒ�dØ $Ð$ˆŒ	�D”IÜ"×.Ñ.Ó0ˆŒØˆ�
r   c                 óz   — 	 | j                   |   }| j                  «       |j                  k  S # t        $ r Y yw xY w©NF)rè   r²   rà   r8   )r   r;   r‰   s      r   rE   zTTLCache.__contains__¯  ó@   € ð	/Ø—<‘< Ñ$ˆDð —:‘:“< $§,¡,Ñ.Ð.øô ò 	Ùð	úó   ‚. ®	:¹:c                 ó¼   — 	 | j                  |«      }| j                  «       |j                  k   }|r| j	                  |«      S  || |«      S # t        $ r d}Y Œ)w xY wrì   )Ú_TTLCache__getlinkr²   rà   r8   r9   )r   r;   r…   r‰   Úexpireds        r   r   zTTLCache.__getitem__·  óe   € ð	8Ø—>‘> #Ó&ˆDð  Ÿ:™:›<¨$¯,©,Ñ6Ð7ˆGÙØ×#Ñ# CÓ(Ð(á   sÓ+Ð+øô ò 	ØŠGð	úó   ‚A ÁAÁAc                 ó¶  — | j                   5 }| j                  |«        || ||«       d d d «       	 | j                  |«      }|j                  «        | j                  z   |_	        | j                  x|_        }|j                  x|_        }|x|_        |_        y # 1 sw Y   ŒtxY w# t        $ r' t
        j                  |«      x| j                  |<   }Y Œ„w xY wr   )r²   rÉ   rð   r{   r8   r   r}   rè   ré   rà   rç   rm   ru   )r   r;   r?   rf   r¹   r‰   r�   ru   s           r   r   zTTLCache.__setitem__Ã  sÀ   € Ø�Z‰Zð 	,˜4Ø�K‰K˜ÔÙ˜$  UÔ+÷	,ð	Ø—>‘> #Ó&ˆDð �K‰KŒMØ˜dŸj™jÑ(ˆŒØŸ;™;Ð&ˆŒ	�DØŸ9™9Ð$ˆŒ	�DØ $Ð$ˆŒ	�D•I÷	,ð 	,ûô
 ò 	;Ü'/§~¡~°cÓ':Ð:ˆD�L‰L˜Ñ¢ð	;ús   �B²B( ÂB%Â(-CÃCc                 ó¼   —  || |«       | j                   j                  |«      }|j                  «        | j                  «       |j                  k  st        |«      ‚y r   )rè   r   r{   r²   rà   r8   rŒ   s       r   rC   zTTLCache.__delitem__Ò  sJ   € Ù�d˜CÔ Ø�|‰|×Ñ Ó$ˆØ�‰ŒØ—
‘
“˜tŸ|™|Ò+Ü˜3“-Ðð ,r   c              #   óä   K  — | j                   }|j                  }||urD| j                  5 }||j                  k  r|j                  –— d d d «       |j                  }||urŒCy y # 1 sw Y   ŒxY w­wr   )rç   rm   r²   rà   r;   )r   r�   rŽ   r¹   s       r   rI   zTTLCache.__iter__Ù  sg   è ø€ Ø�{‰{ˆØ�y‰yˆØ˜$Ñà—‘ð #˜tØ˜$Ÿ,™,Ò&ØŸ(™(’N÷#ð —9‘9ˆDð ˜$Ô÷#ð #üs"   ‚)A0«A$Á	A0Á"A0Á$A-Á)A0c                 óR  — | j                   j                  |«       | j                  }|x|_        |_        t        | j                  j                  «       d„ ¬«      D ]*  }||_        |j                  x|_        }|x|_        |_        Œ, | j                  | j                  «       «       y )Nc                 ó   — | j                   S r   ©rà   )Úobjs    r   ú<lambda>z'TTLCache.__setstate__.<locals>.<lambda>ç  s
   € À#Ç+Á+€ r   )r;   )
Ú__dict__Úupdaterç   ru   rm   Úsortedrè   ÚvaluesrÉ   r²   )r   Ústater�   r‰   ru   s        r   Ú__setstate__zTTLCache.__setstate__ã  sˆ   € Ø�‰×Ñ˜UÔ#Ø�{‰{ˆØ $Ð$ˆŒ	�D”IÜ˜4Ÿ<™<×.Ñ.Ó0Ñ6MÔNò 	)ˆDØˆDŒIØ#Ÿy™yÐ(ˆDŒI˜Ø$(Ð(ˆDŒI˜�	ð	)ð 	�‰�D—J‘J“LÕ!r   c                 ó   — | j                   S )z,The time-to-live value of the cache's items.)ré   r5   s    r   rê   zTTLCache.ttlí  ó   € ð �z‰zÐr   c                 óÜ  — |€| j                  «       }| j                  }|j                  }| j                  }g }t        j
                  }t        j                  }||ur�||j                  k  s€|j                  |j                   || |j                  «      f«        || |j                  «       ||j                  = |j                  }|j                  «        |}||ur||j                  k  sŒ€|S )úqRemove expired items from the cache and return an iterable of the
        expired `(key, value)` pairs.

        )r²   rç   rm   rè   r   rC   r   rà   r£   r;   r{   )	r   r¹   r�   rŽ   Úlinksrñ   ri   r…   rm   s	            r   rÉ   zTTLCache.expireò  sÉ   € ð
 ˆ<Ø—:‘:“<ˆDØ�{‰{ˆØ�y‰yˆØ—‘ˆØˆÜ×)Ñ)ˆÜ×)Ñ)ˆØ˜$Ñ¨¨t¯|©|Ò(;Ø�N‰N˜DŸH™H¡m°D¸$¿(¹(Ó&CÐDÔEÙ˜$ §¡Ô)Ø�d—h‘h�Ø—9‘9ˆDØ�K‰KŒMØˆDð ˜$Ñ¨¨t¯|©|Ó(;ð ˆr   c                 ó*  — | j                   5 }| j                  |«       	 t        t        | j                  «      «      }|| j                  |«      fcddd«       S # t        $ r# t        dt        | «      j                  z  «      d‚w xY w# 1 sw Y   yxY w©zmRemove and return the `(key, value)` pair least recently used that
        has not already expired.

        Nrl   )
r²   rÉ   rm   rH   rè   r   rn   r8   r3   r    ©r   r¹   r;   s      r   r>   zTTLCache.popitem  óŒ   € ð
 �Z‰Zð 	,˜4Ø�K‰K˜Ôð,Üœ4 §¡Ó-Ó.�ð ˜TŸX™X c›]Ð+÷	,ñ 	,øô !ò NÜ˜}¬t°D«z×/BÑ/BÑBÓCÈÐMðNú÷		,ð 	,úó!   �B	 A¾B	Á,BÂB	Â	Bc                 óZ   — | j                   |   }| j                   j                  |«       |S r   )rè   rd   ©r   r;   r?   s      r   Ú	__getlinkzTTLCache.__getlink  ó'   € Ø—‘˜SÑ!ˆØ�‰× Ñ  Ô%Øˆr   r   )r    r!   r"   rY   r}   r¹   rÛ   r/   rE   r   r   r   rC   rI   r  r[   rê   rÉ   r>   rð   r   r   r   r   r   •  s�   „ ÙJ÷ñ ð  ,0¯>©>ÀTó ò/ð .3×->Ñ->ó 
,ð 5:×4EÑ4Eó %ð .3×->Ñ->ó  òò"ð ñó ðóò,,ór   r   c                   óì   — e Zd ZdZej
                   G d„ d«      «       Zej                  dfd„Z	d„ Z
ej                  fd„Zej                  fd„Zej                  fd	„Zd
„ Zed„ «       Zdd„Zd„ Zd„ Zy)r   z;Time aware Least Recently Used (TLRU) cache implementation.c                   ó   — e Zd ZdZdd„Zd„ Zy)úTLRUCache._Item©r;   rà   ÚremovedNc                 ó.   — || _         || _        d| _        y rì   r  râ   s      r   r/   zTLRUCache._Item.__init__#  s   € ØˆDŒHØ"ˆDŒLØ ˆD�Lr   c                 ó4   — | j                   |j                   k  S r   rù   )r   Úothers     r   Ú__lt__zTLRUCache._Item.__lt__(  s   € Ø—<‘< %§-¡-Ñ/Ð/r   rå   )r    r!   r"   r#   r/   r  r   r   r   Ú_Itemr    s   „ à1ˆ	ó	!ó
	0r   r  Nc                 ó‚   — t         j                  | |||«       t        j                  «       | _        g | _        || _        y r   )r¬   r/   r_   r`   Ú_TLRUCache__itemsÚ_TLRUCache__orderÚ_TLRUCache__ttu)r   r.   Úttur²   r'   s        r   r/   zTLRUCache.__init__+  s4   € Ü×Ñ˜T 7¨E°9Ô=Ü"×.Ñ.Ó0ˆŒØˆŒØˆ�
r   c                 óz   — 	 | j                   |   }| j                  «       |j                  k  S # t        $ r Y yw xY wrì   )r  r²   rà   r8   )r   r;   Úitems      r   rE   zTLRUCache.__contains__1  rí   rî   c                 ó¼   — 	 | j                  |«      }| j                  «       |j                  k   }|r| j	                  |«      S  || |«      S # t        $ r d}Y Œ)w xY wrì   )Ú_TLRUCache__getitemr²   rà   r8   r9   )r   r;   r…   r   rñ   s        r   r   zTLRUCache.__getitem__9  rò   ró   c                 ó–  — | j                   5 }| j                  |||«      }||k  s
	 d d d «       y | j                  |«        || ||«       d d d «       	 d| j                  |«      _        t        j                  |«      x| j                  |<   }t        j                  | j                  |«       y # 1 sw Y   ŒfxY w# t
        $ r Y Œ]w xY w©NT)r²   r  rÉ   r"  r  r8   r   r  r  ÚheapqÚheappushr  )r   r;   r?   rf   r¹   rà   r   s          r   r   zTLRUCache.__setitem__E  s»   € Ø�Z‰Zð 	,˜4Ø—j‘j  e¨TÓ2ˆGØ˜7’NØ÷	,ð 	,ð �K‰K˜ÔÙ˜$  UÔ+÷	,ð	Ø*.ˆD�N‰N˜3ÓÔ'ô $-§?¡?°3¸Ó#@Ð@ˆ�‰�SÑ˜DÜ�‰�t—|‘| TÕ*÷	,ð 	,ûô ò 	Ùð	ús"   �B0°B0ÁB< Â0B9Â<	CÃCc                 óÐ   — | j                   5 } || |«       d d d «       | j                  j                  |«      }d|_        |j                  k  st        |«      ‚y # 1 sw Y   ŒFxY wr$  )r²   r  r   r  rà   r8   )r   r;   ri   r¹   r   s        r   rC   zTLRUCache.__delitem__U  sb   € Ø�Z‰Zð 	%˜4á˜$ Ô$÷	%ð �|‰|×Ñ Ó$ˆØˆŒØ�t—|‘|Ò#Ü˜3“-Ðð $÷	%ð 	%ús   �
AÁA%c              #   óÂ   K  — | j                   D ]@  }| j                  5 }||j                  k  r|j                  s|j                  –— d d d «       ŒB y # 1 sw Y   ŒMxY w­wr   )r  r²   rà   r  r;   )r   rŽ   r¹   s      r   rI   zTLRUCache.__iter__^  sV   è ø€ Ø—L‘Lò 	#ˆDà—‘ð #˜tØ˜$Ÿ,™,Ò&¨t¯|ª|ØŸ(™(’N÷#ð #ñ	#÷#ð #üs   ‚Až*AÁAÁA	ÁAc                 ó   — | j                   S )z1The local time-to-use function used by the cache.)r  r5   s    r   r  zTLRUCache.ttue  r  r   c                 ó¼  — |€| j                  «       }| j                  }| j                  }t        |«      t        |«      dz  kD  r9|D �cg c]  }|j                  rŒ|‘Œ c}x| _        }t        j                  |«       g }t        j                  }t        j                  }|rµ|d   j                  s||d   j                  k  s”t        j                  |«      }|j                  sN|j                  |j                   || |j                  «      f«        || |j                  «       ||j                  = |r#|d   j                  rŒ�||d   j                  k  sŒ”|S c c}w )r  é   r   )r²   r  r  rK   r  r%  Úheapifyr   rC   r   rà   Úheappopr£   r;   )r   r¹   ÚitemsÚorderr   rñ   ri   r…   s           r   rÉ   zTLRUCache.expirej  s  € ð
 ˆ<Ø—:‘:“<ˆDØ—‘ˆØ—‘ˆäˆu‹:œ˜E›
 Q™Ò&Ø5:Ö#O¨TÀ$Ç,Ã,¢DÒ#OÐOˆDŒL˜5Ü�M‰M˜%Ô ØˆÜ×)Ñ)ˆÜ×)Ñ)ˆÙ˜˜q™×)Ò)°$¸¸q¹×9IÑ9IÒ2IÜ—=‘= Ó'ˆDØ—<’<Ø—‘ §¡©-¸¸d¿h¹hÓ*GÐHÔIÙ˜d D§H¡HÔ-Ø˜$Ÿ(™(�Oñ ˜˜q™×)Ó)°$¸¸q¹×9IÑ9IÓ2Ið ˆùò $Ps   Á	EÁEc                 ó*  — | j                   5 }| j                  |«       	 t        t        | j                  «      «      }|| j                  |«      fcddd«       S # t        $ r# t        dt        | «      j                  z  «      d‚w xY w# 1 sw Y   yxY wr  )
r²   rÉ   rm   rH   r  r   rn   r8   r3   r    r	  s      r   r>   zTLRUCache.popitem‚  r
  r  c                 óZ   — | j                   |   }| j                   j                  |«       |S r   )r  rd   r  s      r   Ú	__getitemzTLRUCache.__getitem�  r  r   r   )r    r!   r"   rY   Ú	functoolsÚtotal_orderingr  r¹   rÛ   r/   rE   r   r   r   rC   rI   r[   r  rÉ   r>   r"  r   r   r   r   r     s�   „ ÙEà×Ñ÷	0ð 	0ó ð	0ð ,0¯>©>ÀTó ò/ð .3×->Ñ->ó 
,ð 5:×4EÑ4Eó +ð  .3×->Ñ->ó  ò#ð ñó ðóò0,ór   r   Ú	CacheInfo)ÚhitsÚmissesr.   rW   Fc                 ó„   ‡ ‡‡‡‡‡— ddl mŠ t        ‰t        «      rddlm}  |dt        d¬«       ‰ŠdŠˆˆ ˆˆˆˆfd	„}|S )
z_Decorator to wrap a function with a memoizing callable that saves
    results in a cache.

    r   ©Ú_wrapperr   )Úwarnz4passing `info` as positional parameter is deprecatedr+  )Ú
stacklevelNc                 óÂ   •— ‰rQt        ‰t        «      rˆfd„}n-t        ‰t        j                  j                  «      rˆfd„}nd„ } ‰| ‰‰‰‰|¬«      S  ‰| ‰‰‰‰«      S )Nc                 óH   •— t        | |‰j                  ‰j                  «      S r   )Ú
_CacheInfor.   rW   ©r6  r7  Úcaches     €r   Ú	make_infoz,cached.<locals>.decorator.<locals>.make_info±  s   ø€ Ü% d¨F°E·M±MÀ5Ç>Á>ÓRÐRr   c                 ó2   •— t        | |d t        ‰«      «      S r   )r?  rK   r@  s     €r   rB  z,cached.<locals>.decorator.<locals>.make_info¶  s   ø€ Ü% d¨F°D¼#¸e»*ÓEÐEr   c                 ó   — t        | |dd«      S r&   )r?  )r6  r7  s     r   rB  z,cached.<locals>.decorator.<locals>.make_info»  s   € Ü% d¨F°A°qÓ9Ð9r   )Úinfo)Ú
isinstancer   r_   ÚabcÚMapping)ÚfuncrB  r:  rA  Ú	conditionrE  r;   Úlocks     €€€€€€r   Ú	decoratorzcached.<locals>.decorator­  sa   ø€ ÙÜ˜%¤Ô'õSô ˜E¤;§?¡?×#:Ñ#:Ô;õFò
:ñ ˜D %¨¨d°IÀIÔNÐNá˜D %¨¨d°IÓ>Ð>r   )Ú_cachedr:  rF  ÚboolÚwarningsr;  ÚDeprecationWarning)rA  r;   rK  rJ  rE  r;  rL  r:  s   `````  @r   r	   r	   ›  sD   ý€ õ
 "ä�)œTÔ"Ý!áØBÜØõ	
ð
 ˆØˆ	÷?ñ ?ð* Ðr   c                 ó.   ‡ ‡‡‡‡— ddl mŠ ˆˆ ˆˆˆfd„}|S )zoDecorator to wrap a class or instance method with a memoizing
    callable that saves results in a cache.

    r   r9  c                 ó   •—  ‰| ‰‰‰‰«      S r   r   )Úmethodr:  rA  rJ  r;   rK  s    €€€€€r   rL  zcachedmethod.<locals>.decoratorÌ  s   ø€ Ù˜  s¨D°)Ó<Ð<r   )Ú_cachedmethodr:  )rA  r;   rK  rJ  rL  r:  s   ```` @r   r
   r
   Å  s   ü€ õ
 (÷=ð =ð Ðr   )rY   Ú__all__Ú__version__r_   Úcollections.abcr3  r%  rª   r¹   Ú r   r   rG  ÚMutableMappingr   r   r   r   r   r¬   r   r   Ú
namedtupler?  Úhashkeyr	   Ú	methodkeyr
   r   r   r   ú<module>r]     sñ   ðÙ 6ð
€ð €ã Û Û Û Û Û å ÷
ñ 
ôiˆK�O‰O×*Ñ*ô iôX(�ô (ô8K!ˆuô K!ô\#%ˆuô #%ôL$(ˆeô $(ôNG;�%ô G;ôTDˆ{ô DôNw�ô wðt $ˆ[×#Ñ#ØÒ:ó€
ð
 —l‘l¨¸ÀEó 'ðT !ŸN™N°Àô 
r   