ó
    Ð]jç„  ã            	      ó~  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJr  \(       a  S SKrS S	KJr  \" S
5      rO\" S
5      r\" S5      r\R<                  " S5      r\
\ \ /\!4   r"\
\#\ \ 4   /\!4   r$ " S S5      r% " S S\%5      r& " S S\%5      r' " S S\%5      r( " S S\%5      r) " S S\%5      r* " S S\%5      r+ " S S\%5      r, " S S\\\4   5      r- " S S \%5      r.S\%0r/S!\0S"'   S$S%S# jjr1\%\&\*\'\)\(\+\,\.4	 H  r2\1" \25        M     g)&é    )ÚannotationsN)ÚOrderedDict)ÚCallable)ÚFutureÚThreadPoolExecutor)Úgroupby)Ú
itemgetter)ÚTYPE_CHECKINGÚAnyÚClassVarÚGenericÚ
NamedTupleÚTypeVar)Ú	ParamSpecÚPÚTzfsspec.cachingc                  óZ   • \ rS rSr% SrSrS\S'   SS jrSS jrSS jr	SS	 jr
SS
 jrSrg)Ú	BaseCacheé"   a;  Pass-though cache: doesn't keep anything, calls every time

Acts as base class for other cachers

Parameters
----------
blocksize: int
    How far to read ahead in numbers of bytes
fetcher: func
    Function of the form f(start, end) which gets bytes from remote as
    specified
size: int
    How big this file is
ÚnoneúClassVar[str]Únamec                ó`   • Xl         SU l        X l        X0l        SU l        SU l        SU l        g ©Nr   )Ú	blocksizeÚnblocksÚfetcherÚsizeÚ	hit_countÚ
miss_countÚtotal_requested_bytes)Úselfr   r   r   s       ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/fsspec/caching.pyÚ__init__ÚBaseCache.__init__4   s.   € Ø"ŒØˆŒØŒØŒ	ØˆŒØˆŒà%&ˆÕ"ó    c                óv   • Uc  SnUc  U R                   nXR                   :¼  d  X:¼  a  gU R                  X5      $ )Nr   r&   )r   r   ©r"   ÚstartÚstops      r#   Ú_fetchÚBaseCache._fetch>   s:   € Ø‰=ØˆEØ‰<Ø—9‘9ˆDØ—I‘IÓ £ØØ�|‰|˜EÓ(Ð(r&   c                ó.   • SU l         SU l        SU l        g)zAReset hit and miss counts for a more ganular report e.g. by file.r   N)r   r    r!   ©r"   s    r#   Ú_reset_statsÚBaseCache._reset_statsG   s   € àˆŒØˆŒØ%&ˆÕ"r&   c           	     ó²   • U R                   S:X  a  U R                  S:X  a  gSU R                   SU R                    SU R                   SU R                   S3	$ )z2Return a formatted string of the cache statistics.r   Ú z , z: z hits, z	 misses, z total requested bytes)r   r    r   r!   r.   s    r#   Ú
_log_statsÚBaseCache._log_statsM   s^   € à�>‰>˜QÓ 4§?¡?°aÓ#7àØ�T—Y‘Y�K˜r $§.¡.Ð!1°¸¿¹Ð8IÈÐSW×SmÑSmÐRnð  oEð  Fð  	Fr&   c                óÒ   • SU R                   R                   SU R                   SU R                   SU R                   SU R
                   SU R                   SU R                   S3$ )	Nz

        <z:
            block size  :   z
            block count :   z
            file size   :   z
            cache hits  :   z
            cache misses:   z$
            total requested bytes: z
>
        )Ú	__class__Ú__name__r   r   r   r   r    r!   r.   s    r#   Ú__repr__ÚBaseCache.__repr__T   s�   € ð
Ø
�.‰.×
!Ñ
!Ð	"ð #Ø!Ÿ^™^Ð,ð -Ø!Ÿ\™\˜Nð +Ø!ŸY™Y˜Kð (Ø!Ÿ^™^Ð,ð -Ø!Ÿ_™_Ð-ð .$Ø$(×$>Ñ$>Ð#?ð @	ðð 	r&   )r   r   r   r    r   r   r!   N©r   Úintr   ÚFetcherr   r;   ÚreturnÚNone©r)   ú
int | Noner*   r@   r=   Úbytes©r=   r>   )r=   Ústr)r7   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r$   r+   r/   r3   r8   Ú__static_attributes__© r&   r#   r   r   "   s-   ‡ ñð !€Dˆ-Ó ô'ô)ô'ôF÷
r&   r   c                  ó€   ^ • \ rS rSrSrSr   S
             SU 4S jjjrSS jrSS jrSS jr	SS jr
S	rU =r$ )Ú	MMapCacheéa   aŠ  memory-mapped sparse file cache

Opens temporary file, which is filled blocks-wise when data is requested.
Ensure there is enough disc space in the temporary location.

This cache method might only work on posix

Parameters
----------
blocksize: int
    How far to read ahead in numbers of bytes
fetcher: Fetcher
    Function of the form f(start, end) which gets bytes from remote as
    specified
size: int
    How big this file is
location: str
    Where to create the temporary file. If None, a temporary file is
    created using tempfile.TemporaryFile().
blocks: set[int]
    Set of block numbers that have already been fetched. If None, an empty
    set is created.
multi_fetcher: MultiFetcher
    Function of the form f([(start, end)]) which gets bytes from remote
    as specified. This function is used to fetch multiple blocks at once.
    If not specified, the fetcher function is used instead.
Úmmapc                ó�   >• [         TU ]  XU5        Uc
  [        5       OUU l        X@l        X`l        U R                  5       U l        g ©N)Úsuperr$   ÚsetÚblocksÚlocationÚmulti_fetcherÚ	_makefileÚcache)r"   r   r   r   rT   rS   rU   r6   s          €r#   r$   ÚMMapCache.__init__€   s<   ø€ ô 	‰Ñ˜¨TÔ2Ø%™~”c”e°6ˆŒØ ŒØ*ÔØ—^‘^Ó%ˆ�
r&   c                óD  • SS K nSS KnU R                  S:X  a
  [        5       $ U R                  b.  [
        R                  R                  U R                  5      (       dƒ  U R                  c   UR                  5       n[        5       U l
        O[        U R                  S5      nUR                  U R                  S-
  5        UR                  S5        UR                  5         O[        U R                  S5      nUR                   " UR                  5       U R                  5      $ )Nr   zwb+é   ó   1zr+b)rN   Útempfiler   Ú	bytearrayrT   ÚosÚpathÚexistsÚTemporaryFilerR   rS   ÚopenÚseekÚwriteÚflushÚfileno)r"   rN   r\   Úfds       r#   rV   ÚMMapCache._makefile�   sÁ   € ÛÛà�9‰9˜‹>Ü“;Ðð �=‰=Ñ ¬¯©¯©°t·}±}×(EÑ(EØ�}‰}Ñ$Ø×+Ñ+Ó-�Ü!›e�•ä˜$Ÿ-™-¨Ó/�Ø�G‰G�D—I‘I ‘MÔ"Ø�H‰H�TŒNØ�H‰H�Jä�d—m‘m UÓ+ˆBà�yŠy˜Ÿ™› d§i¡iÓ0Ð0r&   c                ó*  ^ • [         R                  SU SU 35        Uc  SnUc  T R                  nUT R                  :¼  d  X:¼  a  gUT R                  -  nUT R                  -  n[	        X4S-   5      nU 4S jU 5       nT =R
                  [        U 4S jU 5       5      -  sl        / n[        [        U5      S S	9 Hò  u  p‰[        [        [        S5      U	5      5      n	U	S   T R                  -  n
[        U	S
   T R                  -  T R                  -   T R                  5      nT =R                  Xº-
  -  sl        [         R                  SU	S    SU	S
    SU
 SU S3	5        UR                  X«45        T R                  R!                  U	5        T =R"                  [%        U	5      -  sl        Mô     U(       d  T R&                  X $ T R(                  (       ak  [         R                  SU 35        [        T R)                  U5      5       H4  u  pÍX|   u  p«[         R                  SU
 SU 35        UT R&                  X«& M6     OCU H=  u  p«[         R                  SU
 SU 35        T R+                  X«5      T R&                  X«& M?     T R&                  X $ )NzMMap cache fetching Ú-r   r&   rZ   c              3  óJ   >#   • U  H  oTR                   ;  d  M  Uv •  M     g 7frP   ©rS   ©Ú.0Úir"   s     €r#   Ú	<genexpr>Ú#MMapCache._fetch.<locals>.<genexpr>±   s   øé € Ð?š;�a°4·;±;Ñ*>—‘š;ùó   ƒ#š	#c              3  óJ   >#   • U  H  oTR                   ;   d  M  S v •  M     g7f)rZ   Nrl   rm   s     €r#   rp   rq   ³   s   øé € ÐIª A¸T¿[¹[Ñ8HŸa™aªùrr   c                ó   • U S   U S   -
  $ )Nr   rZ   rJ   )Úxs    r#   Ú<lambda>Ú"MMapCache._fetch.<locals>.<lambda>¿   s   € ÀÀ1ÁÈÈ!ÉÂr&   )ÚkeyéÿÿÿÿzMMap get blocks z (Ú)zMMap copy block (zMMap get block ()ÚloggerÚdebugr   r   Úranger   Úsumr   Ú	enumerateÚtupleÚmapr	   Úminr!   ÚappendrS   Úupdater    ÚlenrW   rU   r   )r"   r)   ÚendÚstart_blockÚ	end_blockÚblock_rangeÚneedÚrangesÚ_Ú_blocksÚsstartÚsendÚidxÚrs   `             r#   r+   ÚMMapCache._fetch¥   sN  ø€ Ü�‰Ð+¨E¨7°!°C°5Ð9Ô:Ø‰=ØˆEØ‰;Ø—)‘)ˆCØ�D—I‘IÓ £ØØ˜tŸ~™~Ñ-ˆØ˜4Ÿ>™>Ñ)ˆ	Ü˜K°Q©Ó7ˆä?™;Ó?ˆà�Šœ#ÔI©ÓIÓIÑI�àˆô "¤)¨D£/Ñ7LÔM‰JˆAäœC¤
¨1£¨wÓ7Ó8ˆGà˜Q‘Z $§.¡.Ñ0ˆFä�w˜r‘{ T§^¡^Ñ3°d·n±nÑDÀdÇiÁiÓPˆDð ×&Ò&¨$©-Ñ7Õ&Ü�L‰LØ" 7¨1¡: ,¨a°¸±¨}¸B¸v¸hÀaÈÀvÈQÐOôð �M‰M˜6˜.Ô)ð �K‰K×Ñ˜wÔ'à�OŠOœs 7›|Ñ+�Oñ% Nö( Ø—:‘:˜eÐ(Ð(à××Ü�L‰LÐ+¨F¨8Ð4Ô5Ü# D×$6Ñ$6°vÓ$>Ö?‘�Ø%™{‘�Ü—‘Ð0°°¸¸$¸Ð@ÔAØ*+�—
‘
˜6Ò'ò @ó
 !'‘�Ü—‘Ð/°¨x°q¸¸Ð?Ô@Ø*.¯,©,°vÓ*D�—
‘
˜6Ò'ñ !'ð �z‰z˜%Ð$Ð$r&   c                ó@   • U R                   R                  5       nUS	 U$ )NrW   )Ú__dict__Úcopy©r"   Ústates     r#   Ú__getstate__ÚMMapCache.__getstate__ã   s    € Ø—‘×"Ñ"Ó$ˆà�'ˆNØˆr&   c                ód   • U R                   R                  U5        U R                  5       U l        g rP   )r”   r„   rV   rW   r–   s     r#   Ú__setstate__ÚMMapCache.__setstate__é   s"   € à�‰×Ñ˜UÔ#Ø—^‘^Ó%ˆ�
r&   )rS   rW   rT   rU   )NNN)r   r;   r   r<   r   r;   rT   z
str | NonerS   zset[int] | NonerU   zMultiFetcher | Noner=   r>   )r=   zmmap.mmap | bytearray©r)   r@   r†   r@   r=   rA   ©r=   údict[str, Any]©r—   rŸ   r=   r>   )r7   rD   rE   rF   rG   r   r$   rV   r+   r˜   r›   rI   Ú__classcell__©r6   s   @r#   rL   rL   a   s‚   ø† ñð8 €Dð  $Ø"&Ø-1ð&àð&ð ð&ð ð	&ð
 ð&ð  ð&ð +ð&ð 
÷&ð &ô1ô,<%ô|÷&ò &r&   rL   c                  ó>   ^ • \ rS rSrSrSrSU 4S jjrSS jrSrU =r	$ )	ÚReadAheadCacheéï   a  Cache which reads only when we get beyond a block of data

This is a much simpler version of BytesCache, and does not attempt to
fill holes in the cache or keep fragments alive. It is best suited to
many small reads in a sequential order (e.g., reading lines from a file).
Ú	readaheadc                óP   >• [         TU ]  XU5        SU l        SU l        SU l        g )Nr&   r   )rQ   r$   rW   r)   r†   ©r"   r   r   r   r6   s       €r#   r$   ÚReadAheadCache.__init__ù   s'   ø€ Ü‰Ñ˜¨TÔ2ØˆŒ
ØˆŒ
Øˆ�r&   c                óT  • Uc  SnUb  X R                   :”  a  U R                   nXR                   :¼  d  X:¼  a  gX!-
  nXR                  :¼  aK  X R                  ::  a<  U =R                  S-  sl        U R                  XR                  -
  X R                  -
   $ U R                  Us=::  a  U R                  :  aN  O  OKU =R
                  S-  sl        U R                  XR                  -
  S  nU[        U5      -  nU R                  nOU =R
                  S-  sl        Sn[        U R                   X R                  -   5      nU =R                  X!-
  -  sl	        U R                  X5      U l        Xl        U R                  [        U R                  5      -   U l        X@R                  S U -   $ ©Nr   r&   rZ   )r   r)   r†   r   rW   r    r…   r‚   r   r!   r   )r"   r)   r†   ÚlÚparts        r#   r+   ÚReadAheadCache._fetchÿ   sI  € Ø‰=ØˆEØ‰;˜#§	¡	›/Ø—)‘)ˆCØ—I‘IÓ £ØØ‰KˆØ—J‘JÓ 3¯(©(£?à�NŠN˜aÑ�NØ—:‘:˜e§j¡jÑ0°3¿¹Ñ3CÐDÐDØ�Z‰Z˜5Õ+ 4§8¡8Ö+à�OŠO˜qÑ �OØ—:‘:˜e§j¡jÑ0Ð2Ð3ˆDØ”�T“‰NˆAØ—H‘H‰Eð �OŠO˜qÑ �OØˆDÜ�$—)‘)˜S§>¡>Ñ1Ó2ˆØ×"Ò" c¡kÑ1Õ"Ø—\‘\ %Ó-ˆŒ
ØŒ
Ø—:‘:¤ D§J¡J£Ñ/ˆŒØ—j‘j  !�nÑ$Ð$r&   )rW   r†   r)   r:   r�   ©
r7   rD   rE   rF   rG   r   r$   r+   rI   r¡   r¢   s   @r#   r¤   r¤   ï   s   ø† ñð €D÷÷%ò %r&   r¤   c                  ó>   ^ • \ rS rSrSrSrSU 4S jjrSS jrSrU =r	$ )	ÚFirstChunkCachei  z�Caches the first block of a file only

This may be useful for file types where the metadata is stored in the header,
but is randomly accessed.
Úfirstc                óB   >• X:”  a  Un[         TU ]  XU5        S U l        g rP   )rQ   r$   rW   r¨   s       €r#   r$   ÚFirstChunkCache.__init__&  s$   ø€ ØÓàˆIÜ‰Ñ˜¨TÔ2Ø#'ˆ�
r&   c                ól  • U=(       d    SnXR                   :”  a  [        R                  S5        g[        X R                   5      nXR                  :  Ga#  U R
                  c£  U =R                  S-  sl        X R                  :”  a?  U =R                  U-  sl        U R                  SU5      nUS U R                   U l        X1S  $ U R                  SU R                  5      U l        U =R                  U R                  -  sl        U R
                  X nX R                  :”  a?  U =R                  X R                  -
  -  sl        X@R                  U R                  U5      -  nU =R                  S-  sl	        U$ U =R                  S-  sl        U =R                  X!-
  -  sl        U R                  X5      $ )Nr   z,FirstChunkCache: requested start > file sizer&   rZ   )
r   r{   r|   r‚   r   rW   r    r!   r   r   )r"   r)   r†   Údatar­   s        r#   r+   ÚFirstChunkCache._fetch-  sR  € Ø—
˜ˆØ—9‘9ÓÜ�L‰LÐGÔHØä�#—y‘yÓ!ˆà—>‘>Ô!Ø�z‰zÑ!Ø—’ 1Ñ$•ØŸ™Ó'Ø×.Ò.°#Ñ5Õ.ØŸ<™<¨¨3Ó/�DØ!%Ð&6¨¯©Ð!7�D”JØ ˜<Ð'Ø!Ÿ\™\¨!¨T¯^©^Ó<�”
Ø×*Ò*¨d¯n©nÑ<Õ*Ø—:‘:˜eÐ(ˆDØ—^‘^Ó#Ø×*Ò*¨c·N±NÑ.BÑBÕ*ØŸ™ T§^¡^°SÓ9Ñ9�Ø�NŠN˜aÑ�NØˆKà�OŠO˜qÑ �OØ×&Ò&¨#©+Ñ5Õ&Ø—<‘< Ó+Ð+r&   )rW   r:   r�   r¯   r¢   s   @r#   r±   r±     s   ø† ñð €D÷(÷,ò ,r&   r±   c                  óž   ^ • \ rS rSrSrSr S         SU 4S jjjrS rSS jrSS jr	SS jr
SU 4S	 jjr          SS
 jrSrU =r$ )Ú
BlockCacheiK  a   
Cache holding memory as a set of blocks.

Requests are only ever made ``blocksize`` at a time, and are
stored in an LRU cache. The least recently accessed block is
discarded when more than ``maxblocks`` are stored.

Parameters
----------
blocksize : int
    The number of bytes to store in each block.
    Requests are only ever made for ``blocksize``, so this
    should balance the overhead of making a request against
    the granularity of the blocks.
fetcher : Callable
size : int
    The total size of the file being cached.
maxblocks : int
    The maximum number of blocks to cache for. The maximum memory
    use for this cache is then ``blocksize * maxblocks``.
Ú
blockcachec                óÂ   >• [         TU ]  XU5        [        R                  " X1-  5      U l        X@l        [        R                  " U5      " U R                  5      U l	        g rP   )
rQ   r$   ÚmathÚceilr   Ú	maxblocksÚ	functoolsÚ	lru_cacheÚ_fetch_blockÚ_fetch_block_cached©r"   r   r   r   r¾   r6   s        €r#   r$   ÚBlockCache.__init__d  sJ   ø€ ô 	‰Ñ˜¨TÔ2Ü—y’y Ñ!1Ó2ˆŒØ"ŒÜ#,×#6Ò#6°yÔ#AÀ$×BSÑBSÓ#TˆÕ r&   c                ó6   • U R                   R                  5       $ ©zz
The statistics on the block cache.

Returns
-------
NamedTuple
    Returned directly from the LRU Cache used internally.
©rÂ   Ú
cache_infor.   s    r#   rÈ   ÚBlockCache.cache_infol  ó   € ð ×'Ñ'×2Ñ2Ó4Ð4r&   c                ó$   • U R                   nUS	 U$ )NrÂ   ©r”   r–   s     r#   r˜   ÚBlockCache.__getstate__w  s   € Ø—‘ˆØÐ'Ð(Øˆr&   c                ó–   • U R                   R                  U5        [        R                  " US   5      " U R                  5      U l        g )Nr¾   )r”   r„   r¿   rÀ   rÁ   rÂ   r–   s     r#   r›   ÚBlockCache.__setstate__|  s:   € Ø�‰×Ñ˜UÔ#Ü#,×#6Ò#6°u¸[Ñ7IÔ#JØ×Ñó$
ˆÕ r&   c                ó²   • Uc  SnUc  U R                   nXR                   :¼  d  X:¼  a  gU R                  XXR                  -  US-
  U R                  -  5      $ r«   )r   Ú_read_cacher   )r"   r)   r†   s      r#   r+   ÚBlockCache._fetch‚  sY   € Ø‰=ØˆEØ‰;Ø—)‘)ˆCØ—I‘IÓ £Øà×ÑØ˜§¡Ñ/°#¸±'¸d¿n¹nÑ1Ló
ð 	
r&   c                ó8  >• XR                   :”  a  [        SU SU R                    S35      eXR                  -  nX R                  -   nU =R                  X2-
  -  sl        U =R                  S-  sl        [
        R                  SU5        [        TU ]!  X#5      nU$ )ú-
Fetch the block of data for `block_number`.
ú'block_number=ú(' is greater than the number of blocks (rz   rZ   zBlockCache fetching block %d)	r   Ú
ValueErrorr   r!   r    r{   ÚinforQ   r+   )r"   Úblock_numberr)   r†   Úblock_contentsr6   s        €r#   rÁ   ÚBlockCache._fetch_blockŽ  s–   ø€ ð Ÿ,™,Ó&ÜØ   ð /)Ø)-¯©¨°að9óð ð
 Ÿ~™~Ñ-ˆØ—n‘nÑ$ˆØ×"Ò" c¡kÑ1Õ"Ø�Š˜1Ñ�Ü�‰Ð2°LÔAÜ™™¨Ó3ˆØÐr&   c           	     ó²  • XR                   -  nX R                   -  nUS:X  a  U R                   nU =R                  S-  sl        X4:X  a  U R                  U5      nXuU $ U R                  U5      US /nUR                  [	        U R                  [        US-   U5      5      5        UR                  U R                  U5      SU 5        SR                  U5      $ )úº
Read from our block cache.

Parameters
----------
start, end : int
    The start and end byte positions.
start_block_number, end_block_number : int
    The start and end block numbers.
r   rZ   Nr&   ©r   r   rÂ   Úextendr�   r}   rƒ   Újoin©	r"   r)   r†   Ústart_block_numberÚend_block_numberÚ	start_posÚend_posÚblockÚouts	            r#   rÑ   ÚBlockCache._read_cache   sØ   € ð ŸN™NÑ*ˆ	ØŸ™Ñ&ˆØ�a‹<Ø—n‘nˆGà�Š˜!Ñ�ØÓ1Ø×3Ñ3Ð4FÓGˆEØ 7Ð+Ð+ð ×+Ñ+Ð,>Ó?À	À
ÐKÐLˆCð
 �J‰JÜØ×,Ñ,ÜÐ,¨qÑ0Ð2BÓCóôð �J‰J�t×/Ñ/Ð0@ÓAÀ(À7ÐKÔLà—8‘8˜C“=Ð r&   )rÂ   r¾   r   ©é    ©
r   r;   r   r<   r   r;   r¾   r;   r=   r>   rž   r    r�   )rÙ   r;   r=   rA   ©
r)   r;   r†   r;   râ   r;   rã   r;   r=   rA   )r7   rD   rE   rF   rG   r   r$   rÈ   r˜   r›   r+   rÁ   rÑ   rI   r¡   r¢   s   @r#   r¹   r¹   K  sš   ø† ñð, €Dð MOðUØðUØ'.ðUØ69ðUØFIðUà	÷Uð Uò	5ôô

ô

÷ð$(!Øð(!Ø"ð(!Ø8;ð(!ØORð(!à	÷(!ò (!r&   r¹   c                  ól   ^ • \ rS rSr% SrSrS\S'    S
         SU 4S jjjrSS jrSS jr	S	r
U =r$ )Ú
BytesCacheiË  a+  Cache which holds data in a in-memory bytes object

Implements read-ahead by the block size, for semi-random reads progressing
through the file.

Parameters
----------
trim: bool
    As we read more data, whether to discard the start of the buffer when
    we are more than a blocksize ahead of it.
rA   r   r   c                ó\   >• [         TU ]  XU5        SU l        S U l        S U l        X@l        g )Nr&   )rQ   r$   rW   r)   r†   Útrim)r"   r   r   r   rð   r6   s        €r#   r$   ÚBytesCache.__init__Ú  s.   ø€ ô 	‰Ñ˜¨TÔ2ØˆŒ
Ø!%ˆŒ
Ø#ˆŒØ�	r&   c                ó  • Uc  SnUc  U R                   nXR                   :¼  d  X:¼  a  gU R                  bb  XR                  :¼  aS  U R                  bF  X R                  :  a7  XR                  -
  nU =R                  S-  sl        U R                  X3U-   U-
   $ U R
                  (       a#  [        U R                   X R
                  -   5      nOUnXA:X  d  XR                   :”  a  gU R                  b  XR                  :  af  U R                  b  X R                  :”  aJ  U =R                  XA-
  -  sl        U =R                  S-  sl        U R                  X5      U l        Xl        GOÐU R                  c   eU R                  c   eU =R                  S-  sl        XR                  :  a¶  U R                  b  U R                  U-
  U R
                  :”  a5  U =R                  XA-
  -  sl        U R                  X5      U l        Xl        GO/U =R                  U R                  U-
  -  sl        U R                  XR                  5      nXl        XPR                  -   U l        OØU R                  bË  X@R                  :”  a¼  U R                  U R                   :”  a  O¡X R                  -
  U R
                  :”  a4  U =R                  XA-
  -  sl        U R                  X5      U l        Xl        OQU =R                  X@R                  -
  -  sl        U R                  U R                  U5      nU R                  U-   U l        U R                  [        U R                  5      -   U l        XR                  -
  nU R                  X3U-   U-
   nU R                  (       ar  U R                  U R                  -
  U R
                  S-   -  nUS:”  aC  U =R                  U R
                  U-  -  sl        U R                  U R
                  U-  S  U l        U$ r«   )r   r)   r†   r   rW   r   r‚   r!   r    r   r…   rð   )r"   r)   r†   ÚoffsetÚbendÚnewrç   Únums           r#   r+   ÚBytesCache._fetchã  s  € ð ‰=ØˆEØ‰;Ø—)‘)ˆCØ—I‘IÓ £Øà�J‰JÑ"ØŸ™Ó#Ø—‘Ñ$Ø—h‘h“ð ŸZ™ZÑ'ˆFØ�NŠN˜aÑ�NØ—:‘:˜f°¡|°eÑ';Ð<Ð<à�>�>Ü�t—y‘y #¯©Ñ"6Ó7‰DàˆDà‹=˜E§I¡IÓ-Øà�J‰JÑ %¯*©*Ó"4Ø�H‰HÑ §h¡h£ð ×&Ò&¨$©,Ñ6Õ&Ø�OŠO˜qÑ �OØŸ™ eÓ2ˆDŒJØŽJà—:‘:Ñ)Ð)Ð)Ø—8‘8Ñ'Ð'Ð'Ø�OŠO˜qÑ �Oà—z‘zÓ!Ø—8‘8Ñ# t§x¡x°#¡~¸¿¹Ó'FØ×.Ò.°$±,Ñ>Õ.Ø!%§¡¨eÓ!:�D”JØ!&–Jà×.Ò.°$·*±*¸uÑ2DÑDÕ.ØŸ,™, u¯j©jÓ9�CØ!&”JØ!$§z¡zÑ!1�D•JØ—‘Ñ%¨$·±«/Ø—8‘8˜dŸi™iÓ'ØØŸ8™8‘^ d§n¡nÓ4Ø×.Ò.°$±,Ñ>Õ.Ø!%§¡¨eÓ!:�D”JØ!&•Jà×.Ò.°$¿¹±/ÑAÕ.ØŸ,™, t§x¡x°Ó6�CØ!%§¡¨cÑ!1�D”Jà—:‘:¤ D§J¡J£Ñ/ˆŒØŸ™Ñ#ˆØ�j‰j˜¨3¡,°Ñ"6Ð7ˆØ�9�9Ø—8‘8˜dŸj™jÑ(¨d¯n©n¸qÑ.@ÑAˆCØ�Q‹wØ—
’
˜dŸn™n¨sÑ2Ñ2•
Ø!ŸZ™Z¨¯©¸Ñ(<Ð(>Ð?�”
Øˆ
r&   c                ó,   • [        U R                  5      $ rP   )r…   rW   r.   s    r#   Ú__len__ÚBytesCache.__len__,  s   € Ü�4—:‘:‹Ðr&   )rW   r†   r)   rð   )T)
r   r;   r   r<   r   r;   rð   Úboolr=   r>   r�   )r=   r;   )r7   rD   rE   rF   rG   r   rH   r$   r+   rù   rI   r¡   r¢   s   @r#   rî   rî   Ë  s^   ø‡ ñ
ð "€Dˆ-Ó!ð IMðØðØ'.ðØ69ðØAEðà	÷ð ôG÷Rò r&   rî   c                  óh   ^ • \ rS rSr% SrSrS\S'       S	         S
U 4S jjjrSS jrSr	U =r
$ )ÚAllBytesi0  z!Cache entire contents of the fileÚallr   r   c                óØ   >• [         TU ]  XU5        UcP  U =R                  S-  sl        U =R                  U R                  -  sl        U R                  SU R                  5      nX@l        g )NrZ   r   )rQ   r$   r    r!   r   r   r¶   )r"   r   r   r   r¶   r6   s        €r#   r$   ÚAllBytes.__init__5  sU   ø€ ô 	‰Ñ˜¨TÔ2Ø‰<Ø�OŠO˜qÑ �OØ×&Ò&¨$¯)©)Ñ3Õ&Ø—<‘<  4§9¡9Ó-ˆDØ�	r&   c                óH   • U =R                   S-  sl         U R                  X $ )NrZ   )r   r¶   r(   s      r#   r+   ÚAllBytes._fetchC  s   € Ø�Š˜!Ñ�Ø�y‰y˜Ð$Ð$r&   )r¶   )NNNN)
r   r@   r   zFetcher | Noner   r@   r¶   zbytes | Noner=   r>   r?   )r7   rD   rE   rF   rG   r   rH   r$   r+   rI   r¡   r¢   s   @r#   rý   rý   0  sb   ø‡ Ù+à€Dˆ-Óð !%Ø"&ØØ!ðàðð  ðð ð	ð
 ðð 
÷ð ÷%ò %r&   rý   c                  óÐ   ^ • \ rS rSr% SrSrS\S'     S           SU 4S jjjr\S 5       r	\	R                  S 5       r	\S	 5       r\R                  S
 5       rSS jrSrU =r$ )ÚKnownPartsOfAFileiH  aq  
Cache holding known file parts.

Parameters
----------
blocksize: int
    How far to read ahead in numbers of bytes
fetcher: func
    Function of the form f(start, end) which gets bytes from remote as
    specified
size: int
    How big this file is
data: dict
    A dictionary mapping explicit `(start, stop)` file-offset tuples
    with known bytes.
strict: bool, default True
    Whether to fetch reads that go beyond a known byte-range boundary.
    If `False`, any read that ends outside a known part will be zero
    padded. Note that zero padding will not be used for reads that
    begin outside a known byte-range.
Úpartsr   r   c                óÎ  >• [         TU ]  XU5        XPl        U(       aÀ  [        UR	                  5       5      nUS   /nUR                  US   5      /n	USS   Hi  u  p«US   u  pÍX­:X  a%  XË4US'   U	S==   UR                  X«45      -  ss'   M6  UR                  X«45        U	R                  UR                  X«45      5        Mk     [        [        X‰5      5      U l	        g 0 U l	        g )Nr   rZ   ry   )
rQ   r$   ÚstrictÚsortedÚkeysÚpoprƒ   ÚdictÚzipr¶   )r"   r   r   r   r¶   r  rŒ   Úold_offsetsÚoffsetsrS   r)   r*   Ústart0Ústop0r6   s                 €r#   r$   ÚKnownPartsOfAFile.__init__a  sÔ   ø€ ô 	‰Ñ˜¨TÔ2ØŒö Ü  §¡£Ó-ˆKØ" 1‘~Ð&ˆGØ—h‘h˜{¨1™~Ó.Ð/ˆFØ*¨1¨2›‘�Ø '¨¡‘�Ø“>Ø#) .�G˜B‘KØ˜2“J $§(¡(¨E¨=Ó"9Ñ9•Jà—N‘N E =Ô1Ø—M‘M $§(¡(¨E¨=Ó"9Ö:ñ  /ô œS Ó1Ó2ˆD�IàˆD�Ir&   c                ó:   • [        S U R                   5       5      $ )Nc              3  ó6   #   • U  H  oS    US   -
  v •  M     g7f)rZ   r   NrJ   )rn   rŒ   s     r#   rp   Ú)KnownPartsOfAFile.size.<locals>.<genexpr>�  s   é € Ð2ª	 1�Q‘4˜!˜A™$–;ª	ùs   ‚)r~   r¶   r.   s    r#   r   ÚKnownPartsOfAFile.size  s   € äÑ2¨¯	ª	Ó2Ó2Ð2r&   c                ó   • g rP   rJ   ©r"   Úvalues     r#   r   r  ƒ  ó   € àr&   c                ó,   • [        U R                  5      $ rP   )r…   r¶   r.   s    r#   r   ÚKnownPartsOfAFile.nblocks‡  s   € ä�4—9‘9‹~Ðr&   c                ó   • g rP   rJ   r  s     r#   r   r  ‹  r  r&   c                óî  • [         R                  SX5        Uc  SnUc  U R                  nU =R                  X!-
  -  sl        SnSnSn[	        U R
                  5       GHV  u  pgXas=::  a  U:  aE  O  OBXbs=::  a  U::  a6  O  O3X-
  nU =R                  S-  sl        U R
                  Xg4   XˆU-   U-
   s  $ X&::  a    OýU(       a;  Xe:”  a6  U =R                  S-  sl        U R                  (       a  [        eUSXe-
  -  -  nXas=::  a  U:  a7  O  O4U =R                  S-  sl        X-
  nU R
                  Xg4   XˆU-   U-
   nSnOqX:  a-  X':”  a(  U =R                  S-  sl        X0R
                  Xg4   -  nO?Xbs=::  a  U::  a3  O  O0U =R                  S-  sl        X0R
                  Xg4   S X&-
   -   nUs  $ UnGMY     U =R                  S-  sl        U(       a  U R                  (       d  USX%-
  -  -   nU$ [        e)NzKnown parts request %s %sr   r&   FrZ   ó    T)
r{   r|   r   r!   r  r¶   r   r    r  r×   )	r"   r)   r*   rç   ÚstartedÚloc_oldÚloc0Úloc1Úoffs	            r#   r+   ÚKnownPartsOfAFile._fetch�  sÅ  € Ü�‰Ð0°%Ô>Ø‰=ØˆEØ‰<Ø—9‘9ˆDØ×"Ò" d¡lÑ2Õ"ØˆØˆØˆÜ  §¡×+‰JˆDØÕ$ Ö$¨4Õ+?¸4Ö+?à‘l�Ø—’ !Ñ#•Ø—y‘y $ Ñ.¨s¸4±ZÀ%Ñ5GÐHÒHØ‹|ÙÞ˜4›>à—’ 1Ñ$•Ø—;—;Ü$Ð$Ø�w $¡.Ñ1Ñ1�ØÕ#˜tÖ#à—’ !Ñ#•Ø‘l�Ø—i‘i  Ñ-¨c¸$±JÀÑ4FÐG�Ø‘Ø“ $£+à—’ !Ñ#•Ø—y‘y $ Ñ.Ñ.‘ØÕ% Ö%à—’ !Ñ#•ØŸI™I t lÑ3°M°d±kÐBÑB�Ø’
Ø‹Gñ; ,ð< 	�Š˜1Ñ�Þ˜4Ÿ;Ÿ;Ø˜ 4¡>Ñ2Ñ2ˆCØˆJÜÐr&   )r¶   r  )NF)r   r;   r   r<   r   r;   r¶   z#dict[tuple[int, int], bytes] | Noner  rû   rŒ   r   r?   )r7   rD   rE   rF   rG   r   rH   r$   Úpropertyr   Úsetterr   r+   rI   r¡   r¢   s   @r#   r  r  H  sÂ   ø‡ ñð, "€Dˆ-Ó!ð 59Øðàðð ðð ð	ð
 2ðð ðð ÷ð ð< ñ3ó ð3ð 
‡[�[ñó ðð ñó ðð ‡^�^ñó ð÷,ò ,r&   r  c                  ód   • \ rS rSrSr " S S\5      rSSS jjrSS jrSS jr	SS jr
SS	 jrS
rg)ÚUpdatableLRUi¾  z[
Custom implementation of LRU cache that allows updating keys

Used by BackgroudBlockCache
c                  ó>   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	ÚUpdatableLRU.CacheInfoiÅ  r;   ÚhitsÚmissesÚmaxsizeÚcurrsizerJ   N)r7   rD   rE   rF   rH   rI   rJ   r&   r#   Ú	CacheInfor*  Å  s   ‡ Ø‹	Ø‹Ø‹ØŽr&   r/  c                ó    • [         R                  " 5       U l        Xl        X l        SU l        SU l        [        R                  " 5       U l	        g r   )
Úcollectionsr   Ú_cacheÚ_funcÚ	_max_sizeÚ_hitsÚ_missesÚ	threadingÚLockÚ_lock)r"   ÚfuncÚmax_sizes      r#   r$   ÚUpdatableLRU.__init__Ë  s8   € Ü+6×+BÒ+BÓ+DˆŒØŒ
Ø!ŒØˆŒ
ØˆŒÜ—^’^Ó%ˆ�
r&   c                óx  • U(       a  [        SUR                  5        35      eU R                     XR                  ;   aH  U R                  R	                  U5        U =R
                  S-  sl        U R                  U   sS S S 5        $  S S S 5        U R                  " U0 UD6nU R                     X0R                  U'   U =R                  S-  sl        [        U R                  5      U R                  :”  a  U R                  R                  SS9  S S S 5        U$ ! , (       d  f       N–= f! , (       d  f       U$ = f)Nz Got unexpected keyword argument rZ   F©Úlast)Ú	TypeErrorr	  r9  r2  Úmove_to_endr5  r3  r6  r…   r4  Úpopitem)r"   ÚargsÚkwargsÚresults       r#   Ú__call__ÚUpdatableLRU.__call__Ó  sì   € ÞÜÐ>¸v¿{¹{»}¸oÐNÓOÐOØ�Z‹ZØ—{‘{Ó"Ø—‘×'Ñ'¨Ô-Ø—
’
˜a‘•
Ø—{‘{ 4Ñ(÷	 ‰ZØ"÷ ð —’˜TÐ, VÑ,ˆà�Z‹ZØ &�K‰K˜ÑØ�LŠL˜AÑ�LÜ�4—;‘;Ó $§.¡.Ó0Ø—‘×#Ñ#¨Ð#Ñ/÷	 ð ˆ÷ �Zú÷ ŒZð ˆús   °ADÂ/A D*Ä
D'Ä*
D9c                ól   • U R                      XR                  ;   sS S S 5        $ ! , (       d  f       g = frP   )r9  r2  )r"   rC  s     r#   Úis_key_cachedÚUpdatableLRU.is_key_cachedæ  s   € Ø�Z‹ZØŸ;™;Ñ&÷ �Z�Zús   �%¥
3c                óä   • U R                      XR                  U'   [        U R                  5      U R                  :”  a  U R                  R	                  SS9  S S S 5        g ! , (       d  f       g = f)NFr>  )r9  r2  r…   r4  rB  )r"   rE  rC  s      r#   Úadd_keyÚUpdatableLRU.add_keyê  sI   € Ø�Z‹ZØ &�K‰K˜ÑÜ�4—;‘;Ó $§.¡.Ó0Ø—‘×#Ñ#¨Ð#Ñ/÷ �ZŽZús   �AA!Á!
A/c                óÖ   • U R                      U R                  U R                  [        U R                  5      U R
                  U R                  S9sS S S 5        $ ! , (       d  f       g = f)N)r-  r.  r+  r,  )r9  r/  r4  r…   r2  r5  r6  r.   s    r#   rÈ   ÚUpdatableLRU.cache_infoð  sE   € Ø�Z‹ZØ—>‘>ØŸ™Ü˜TŸ[™[Ó)Ø—Z‘ZØ—|‘|ð	 "ð ÷ �Z�Zús   �AAÁ
A()r2  r3  r5  r9  r4  r6  N)é€   )r:  zCallable[P, T]r;  r;   r=   r>   )rC  zP.argsrD  zP.kwargsr=   r   )rC  r   r=   rû   )rE  r   rC  r   r=   r>   ©r=   r*  )r7   rD   rE   rF   rG   r   r/  r$   rF  rI  rL  rÈ   rI   rJ   r&   r#   r(  r(  ¾  s,   † ñô�Jô ö&ôô&'ô0÷r&   r(  c                  ó²   ^ • \ rS rSr% SrSrS\S'    S         SU 4S jjjrSS jrSS jr	SS	 jr
SS
 jrSSU 4S jjjr          SS jrSrU =r$ )ÚBackgroundBlockCacheiú  a/  
Cache holding memory as a set of blocks with pre-loading of
the next block in the background.

Requests are only ever made ``blocksize`` at a time, and are
stored in an LRU cache. The least recently accessed block is
discarded when more than ``maxblocks`` are stored. If the
next block is not in cache, it is loaded in a separate thread
in non-blocking way.

Parameters
----------
blocksize : int
    The number of bytes to store in each block.
    Requests are only ever made for ``blocksize``, so this
    should balance the overhead of making a request against
    the granularity of the blocks.
fetcher : Callable
size : int
    The total size of the file being cached.
maxblocks : int
    The maximum number of blocks to cache for. The maximum memory
    use for this cache is then ``blocksize * maxblocks``.
Ú
backgroundr   r   c                ó  >• [         TU ]  XU5        [        R                  " X1-  5      U l        X@l        [        U R                  U5      U l        [        SS9U l
        S U l        S U l        [        R                  " 5       U l        g )NrZ   ©Úmax_workers)rQ   r$   r¼   r½   r   r¾   r(  rÁ   rÂ   r   Ú_thread_executorÚ_fetch_future_block_numberÚ_fetch_futurer7  r8  Ú_fetch_future_lockrÃ   s        €r#   r$   ÚBackgroundBlockCache.__init__  sm   ø€ ô 	‰Ñ˜¨TÔ2Ü—y’y Ñ!1Ó2ˆŒØ"ŒÜ#/°×0AÑ0AÀ9Ó#MˆÔ ä 2¸qÑ AˆÔØ6:ˆÔ'Ø37ˆÔÜ"+§.¢.Ó"2ˆÕr&   c                ó6   • U R                   R                  5       $ rÆ   rÇ   r.   s    r#   rÈ   ÚBackgroundBlockCache.cache_info#  rÊ   r&   c                ó<   • U R                   nUS	 US	 US	 US	 US	 U$ )NrÂ   rX  rY  rZ  r[  rÌ   r–   s     r#   r˜   Ú!BackgroundBlockCache.__getstate__.  s<   € Ø—‘ˆØÐ'Ð(ØÐ$Ð%ØÐ.Ð/Ø�/Ð"ØÐ&Ð'Øˆr&   c                óâ   • U R                   R                  U5        [        U R                  US   5      U l        [        SS9U l        S U l        S U l        [        R                  " 5       U l        g )Nr¾   rZ   rV  )r”   r„   r(  rÁ   rÂ   r   rX  rY  rZ  r7  r8  r[  r–   s     r#   r›   Ú!BackgroundBlockCache.__setstate__7  sZ   € Ø�‰×Ñ˜UÔ#Ü#/°×0AÑ0AÀ5ÈÑCUÓ#VˆÔ Ü 2¸qÑ AˆÔØ*.ˆÔ'Ø!ˆÔÜ"+§.¢.Ó"2ˆÕr&   c                óì  • Uc  SnUc  U R                   nXR                   :¼  d  X:¼  a  gXR                  -  nX R                  -  nS nS nU R                     U R                  bå  U R                  c   eU R                  R                  5       (       ab  [        R                  S5        U R                  R                  U R                  R                  5       U R                  5        S U l        S U l        OU[        UU R                  s=:*  =(       a    U:*  Os  5      nU(       a&  U R                  nU R                  nS U l        S U l        S S S 5        Ub?  [        R                  S5        U R                  R                  UR                  5       U5        [        X4S-   5       H  nU R                  U5        M     US-   n	U R                     U R                  ca  X�R                  ::  aR  U R                  R                  U	5      (       d2  X�l        U R                  R!                  U R"                  U	S5      U l        S S S 5        U R%                  UUUUS9$ ! , (       d  f       GN= f! , (       d  f       N2= f)Nr   r&   z3BlockCache joined background fetch without waiting.z(BlockCache waiting for background fetch.rZ   Úasync)râ   rã   )r   r   r[  rZ  rY  Údoner{   rØ   rÂ   rL  rE  rû   r}   r   rI  rX  ÚsubmitrÁ   rÑ   )
r"   r)   r†   râ   rã   Úfetch_future_block_numberÚfetch_futureÚ	must_joinrÙ   Úend_block_plus_1s
             r#   r+   ÚBackgroundBlockCache._fetch?  sH  € Ø‰=ØˆEØ‰;Ø—)‘)ˆCØ—I‘IÓ £Øð #§n¡nÑ4ÐØ§.¡.Ñ0Ðà$(Ð!ØˆØ×$Ó$à×!Ñ!Ñ-Ø×6Ñ6ÑBÐBÐBØ×%Ñ%×*Ñ*×,Ñ,Ü—K‘KÐ UÔVØ×,Ñ,×4Ñ4Ø×*Ñ*×1Ñ1Ó3°T×5TÑ5Tôð 7;�DÔ3Ø)-�DÕ&ô !%Ø*Ø×:Ñ:÷,ó ,à+ô,ó!�Iö
 !ð 59×4SÑ4SÐ1Ø'+×'9Ñ'9˜ð ;?˜Ô7Ø-1˜Ô*÷7 %ð< Ñ#Ü�K‰KÐBÔCà×$Ñ$×,Ñ,Ø×#Ñ#Ó%Ð'@ôô
 "Ð"4ÈÑ6JÖKˆLØ×$Ñ$ \Ö2ñ Lð
 ,¨aÑ/ÐØ×$Ó$à×"Ñ"Ñ*Ø$¯©Ó4Ø×0Ñ0×>Ñ>Ð?O×PÑPà2BÔ/Ø%)×%:Ñ%:×%AÑ%AØ×%Ñ%Ð'7¸ó&�Ô"÷ %ð ×ÑØØØ1Ø-ð	  ð 
ð 	
÷o %Ö$ú÷X %Õ$ús   ÁC3IÇ
A/I%É
I"É%
I3c                ó8  >• XR                   :”  a  [        SU SU R                    S35      eXR                  -  nX0R                  -   n[        R	                  SX!5        U =R
                  XC-
  -  sl        U =R                  S-  sl        [        TU ]!  X45      nU$ )rÔ   rÕ   rÖ   rz   z!BlockCache fetching block (%s) %drZ   )	r   r×   r   r{   rØ   r!   r    rQ   r+   )r"   rÙ   Úlog_infor)   r†   rÚ   r6   s         €r#   rÁ   Ú!BackgroundBlockCache._fetch_block‹  s–   ø€ ð Ÿ,™,Ó&ÜØ   ð /)Ø)-¯©¨°að9óð ð
 Ÿ~™~Ñ-ˆØ—n‘nÑ$ˆÜ�‰Ð7¸ÔPØ×"Ò" c¡kÑ1Õ"Ø�Š˜1Ñ�Ü™™¨Ó3ˆØÐr&   c           	     óŽ  • XR                   -  nX R                   -  nU =R                  S-  sl        X4:X  a  U R                  U5      nXuU $ U R                  U5      US /nUR                  [	        U R                  [        US-   U5      5      5        UR                  U R                  U5      SU 5        SR                  U5      $ )rÝ   rZ   Nr&   rÞ   rá   s	            r#   rÑ   Ú BackgroundBlockCache._read_cache�  sÊ   € ð ŸN™NÑ*ˆ	ØŸ™Ñ&ˆð 	�Š˜!Ñ�àÓ1Ø×,Ñ,Ð-?Ó@ˆEØ 7Ð+Ð+ð ×+Ñ+Ð,>Ó?À	À
ÐKÐLˆCð
 �J‰JÜØ×,Ñ,ÜÐ,¨qÑ0Ð2BÓCóôð �J‰J�t×/Ñ/Ð0@ÓAÀ(À7ÐKÔLà—8‘8˜C“=Ð r&   )rÂ   rZ  rY  r[  rX  r¾   r   ré   rë   rQ  rž   rB   r�   )Úsync)rÙ   r;   rm  rC   r=   rA   rì   )r7   rD   rE   rF   rG   r   rH   r$   rÈ   r˜   r›   r+   rÁ   rÑ   rI   r¡   r¢   s   @r#   rS  rS  ú  sŸ   ø‡ ñð2 '€Dˆ-Ó&ð MOð3Øð3Ø'.ð3Ø69ð3ØFIð3à	÷3ð 3ô	5ôô3ôJ
÷Xñ ð$(!Øð(!Ø"ð(!Ø8;ð(!ØORð(!à	÷(!ò (!r&   rS  z!dict[str | None, type[BaseCache]]Úcachesc                ó‚   • U R                   nU(       d#  U[        ;   a  [        SU< S[        U    35      eU [        U'   g)z¹'Register' cache implementation.

Parameters
----------
clobber: bool, optional
    If set to True (default is False) - allow to overwrite existing
    entry.

Raises
------
ValueError
zCache with name z is already known: N)r   rr  r×   )ÚclsÚclobberr   s      r#   Úregister_cacherv  Î  s=   € ð �8‰8€DÞ�tœv“~ÜÐ+¨D©8Ð3FÄvÈdÁ|ÀnÐUÓVÐVØ„Fˆ4‚Lr&   )F)rt  ztype[BaseCache]ru  rû   r=   r>   )3Ú
__future__r   r1  r¿   Úloggingr¼   r^   r7  r   Úcollections.abcr   Úconcurrent.futuresr   r   Ú	itertoolsr   Úoperatorr	   Útypingr
   r   r   r   r   r   rN   Útyping_extensionsr   r   r   Ú	getLoggerr{   r;   rA   r<   ÚlistÚMultiFetcherr   rL   r¤   r±   r¹   rî   rý   r  r(  rS  rr  rH   rv  ÚcrJ   r&   r#   Ú<module>rƒ     sr  ðÞ "ã Û Û Û Û 	Û Ý #Ý $ß 9Ý Ý ß M× MæÛå+á�#‹�Aá�‹€AáˆCƒL€ð 
×	Ò	Ð+Ó	,€à
�C˜�:˜uÐ$Ñ
%€Ø˜˜c 3˜h™Ð(¨%Ð/Ñ0€÷<ñ <ô~K&�	ô K&ô\+%�Yô +%ô\+,�iô +,ô\}!�ô }!ô@b�ô bôJ%ˆyô %ô0s˜	ô sôl9�7˜1˜a˜4‘=ô 9ôxK!˜9ô K!ð` 	ˆ)ð-€Ð)ó öð( ØØØØØØØØó

€Añ �1Öò

r&   