§
    dŠtjÙ‡  ã            	      óÒ  — U d dl m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 d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ erd dlZd d	lmZ  ed
¦  «        Zn ed
¦  «        Z ed¦  «        Z ej        d¦  «        Ze
e e ge!f         Z"e
e#e e f         ge!f         Z$ G d„ d¦  «        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, G d„ deeef         ¦  «        Z- G d„ d e%¦  «        Z.de%iZ/d!e0d"<   d+d,d*„Z1e%e&e*e'e)e(e+e,e.f	D ]Z2 e1e2¦  «         ŒdS )-é    )ÚannotationsN)ÚOrderedDict)ÚCallable)ÚFutureÚThreadPoolExecutor)Úgroupby)Ú
itemgetter)ÚTYPE_CHECKINGÚAnyÚClassVarÚGenericÚ
NamedTupleÚTypeVar)Ú	ParamSpecÚPÚTzfsspec.cachingc                  óJ   — e Zd ZU dZdZded<   dd„Zdd„Zdd„Zdd„Z	dd„Z
dS )Ú	BaseCacheag  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]ÚnameÚ	blocksizeÚintÚfetcherÚFetcherÚsizeÚreturnÚNonec                óh   — || _         d| _        || _        || _        d| _        d| _        d| _        d S ©Nr   )r   Únblocksr   r   Ú	hit_countÚ
miss_countÚtotal_requested_bytes)Úselfr   r   r   s       úL/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/fsspec/caching.pyÚ__init__zBaseCache.__init__4   s:   € Ø"ˆŒØˆŒØˆŒØˆŒ	ØˆŒØˆŒà%&ˆÔ"Ð"Ð"ó    Ústartú
int | NoneÚstopÚbytesc                ón   — |€d}|€| j         }|| j         k    s||k    rdS |                      ||¦  «        S )Nr   r(   )r   r   ©r%   r)   r+   s      r&   Ú_fetchzBaseCache._fetch>   sF   € Øˆ=ØˆEØˆ<Ø”9ˆDØ�D”IÒÐ ¨$¢ Ø�3Ø�|Š|˜E 4Ñ(Ô(Ð(r(   c                ó0   — d| _         d| _        d| _        dS )zAReset hit and miss counts for a more ganular report e.g. by file.r   N)r"   r#   r$   ©r%   s    r&   Ú_reset_statszBaseCache._reset_statsG   s   € àˆŒØˆŒØ%&ˆÔ"Ð"Ð"r(   Ústrc           	     óx   — | j         dk    r| j        dk    rdS d| j        › d| j         › d| j        › d| j        › d�	S )z2Return a formatted string of the cache statistics.r   Ú z , z: z hits, z	 misses, z total requested bytes)r"   r#   r   r$   r1   s    r&   Ú
_log_statszBaseCache._log_statsM   st   € àŒ>˜QÒÐ 4¤?°aÒ#7Ð#7à�2ð F�T”Yð  Fð  F $¤.ð  Fð  F¸¼ð  Fð  FÐSWÔSmð  Fð  Fð  Fð  	Fr(   c                ó‚   — d| j         j        › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d�S )	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$   r1   s    r&   Ú__repr__zBaseCache.__repr__T   sˆ   € ðØ
Œ.Ô
!ðð à!œ^ðð ð "œ\ðð ð "œYð	ð ð
 "œ^ðð ð "œ_ðð ð %)Ô$>ðð ð ð 	r(   N©r   r   r   r   r   r   r   r   ©r)   r*   r+   r*   r   r,   ©r   r   )r   r3   )r9   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r'   r/   r2   r6   r:   © r(   r&   r   r   "   s›   € € € € € € ðð ð !€DÐ Ð Ð Ñ ð'ð 'ð 'ð 'ð)ð )ð )ð )ð'ð 'ð 'ð 'ðFð Fð Fð Fð
ð 
ð 
ð 
ð 
ð 
r(   r   c                  óP   ‡ — e Zd ZdZdZ	 	 	 ddˆ fd„Zdd„Zd d„Zd!d„Zd"d„Z	ˆ xZ
S )#Ú	MMapCacheaæ  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.
    ÚmmapNr   r   r   r   r   Úlocationú
str | NoneÚblocksúset[int] | NoneÚmulti_fetcherúMultiFetcher | Noner   r   c                óÊ   •— t          ¦   «                              |||¦  «         |€t          ¦   «         n|| _        || _        || _        |                      ¦   «         | _        d S ©N)Úsuperr'   ÚsetrH   rF   rJ   Ú	_makefileÚcache)r%   r   r   r   rF   rH   rJ   r8   s          €r&   r'   zMMapCache.__init__€   sX   ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2Ø%˜~•c‘e”e�e°6ˆŒØ ˆŒØ*ˆÔØ—^’^Ñ%Ô%ˆŒ
ˆ
ˆ
r(   úmmap.mmap | bytearrayc                ó*  — dd l }dd l}| j        dk    rt          ¦   «         S | j        �$t
          j                             | j        ¦  «        s‹| j        €(|                     ¦   «         }t          ¦   «         | _
        nt          | j        d¦  «        }|                     | j        dz
  ¦  «         |                     d¦  «         |                     ¦   «          nt          | j        d¦  «        } |j         |                     ¦   «         | j        ¦  «        S )Nr   zwb+é   ó   1zr+b)rE   Útempfiler   Ú	bytearrayrF   ÚosÚpathÚexistsÚTemporaryFilerO   rH   ÚopenÚseekÚwriteÚflushÚfileno)r%   rE   rV   Úfds       r&   rP   zMMapCache._makefile�   sä   € ØˆˆˆØˆˆˆàŒ9˜Š>ˆ>Ý‘;”;Ðð Œ=Ð ­¬¯ª°t´}Ñ(EÔ(EÐ ØŒ}Ð$Ø×+Ò+Ñ-Ô-�Ý!™eœe�”�å˜$œ-¨Ñ/Ô/�Ø�GŠG�D”I ‘MÑ"Ô"Ð"Ø�HŠH�T‰NŒNˆNØ�HŠH‰JŒJˆJˆJå�d”m UÑ+Ô+ˆBàˆtŒy˜Ÿš™œ d¤iÑ0Ô0Ð0r(   r)   r*   Úendr,   c                óX  ‡ — t                                d|› d|› �¦  «         |€d}|€‰ j        }|‰ j        k    s||k    rdS |‰ j        z  }|‰ j        z  }t	          ||dz   ¦  «        }ˆ fd„|D ¦   «         }‰ xj        t          ˆ fd„|D ¦   «         ¦  «        z  c_        g }t          t          |¦  «        d„ ¬	¦  «        D ]þ\  }}	t          t          t          d¦  «        |	¦  «        ¦  «        }	|	d         ‰ j        z  }
t          |	d
         ‰ j        z  ‰ j        z   ‰ j        ¦  «        }‰ xj        ||
z
  z  c_        t                                d|	d         › d|	d
         › d|
› d|› d�	¦  «         |                     |
|f¦  «         ‰ j                             |	¦  «         ‰ xj        t%          |	¦  «        z  c_        Œÿ|s‰ j        ||…         S ‰ j        r}t                                d|› �¦  «         t          ‰                      |¦  «        ¦  «        D ]<\  }}||         \  }
}t                                d|
› d|› �¦  «         |‰ j        |
|…<   Œ=nH|D ]E\  }
}t                                d|
› d|› �¦  «         ‰                      |
|¦  «        ‰ j        |
|…<   ŒF‰ j        ||…         S )NzMMap cache fetching ú-r   r(   rT   c              3  ó.   •K  — | ]}|‰j         v¯|V — Œd S rM   ©rH   ©Ú.0Úir%   s     €r&   ú	<genexpr>z#MMapCache._fetch.<locals>.<genexpr>±   s/   øè è € Ð?Ð?�a¨!°4´;Ð*>Ð*>�Ð*>Ð*>Ð*>Ð*>Ð?Ð?r(   c              3  ó.   •K  — | ]}|‰j         v ¯d V — ŒdS )rT   Nrf   rg   s     €r&   rj   z#MMapCache._fetch.<locals>.<genexpr>³   s/   øè è € ÐIÐI A¸¸T¼[Ð8HÐ8H˜aÐ8HÐ8HÐ8HÐ8HÐIÐIr(   c                ó$   — | d         | d         z
  S )Nr   rT   rB   )Úxs    r&   ú<lambda>z"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$   ÚappendrH   Úupdater#   ÚlenrQ   rJ   r   )r%   r)   rb   Ústart_blockÚ	end_blockÚblock_rangeÚneedÚrangesÚ_Ú_blocksÚsstartÚsendÚidxÚrs   `             r&   r/   zMMapCache._fetch¥   s  ø€ Ý�ŠÐ9¨EÐ9Ð9°CÐ9Ð9Ñ:Ô:Ð:Øˆ=ØˆEØˆ;Ø”)ˆCØ�D”IÒÐ ¨#¢ Ø�3Ø˜tœ~Ñ-ˆØ˜4œ>Ñ)ˆ	Ý˜K¨°Q©Ñ7Ô7ˆà?Ð?Ð?Ð?˜;Ð?Ñ?Ô?ˆàˆŒ�#ÐIÐIÐIÐI¨ÐIÑIÔIÑIÔIÑIˆŒàˆõ "¥)¨D¡/¤/Ð7LÐ7LÐMÑMÔMð 	,ð 	,‰JˆAˆwå�C¥
¨1¡¤¨wÑ7Ô7Ñ8Ô8ˆGà˜Q”Z $¤.Ñ0ˆFå�w˜r”{ T¤^Ñ3°d´nÑDÀdÄiÑPÔPˆDð Ð&Ô&¨$°©-Ñ7Ð&Ô&Ý�LŠLØO 7¨1¤:ÐOÐO°¸´ÐOÐO¸vÐOÐOÈÐOÐOÐOñô ð ð �MŠM˜6 4˜.Ñ)Ô)Ð)ð ŒK×Ò˜wÑ'Ô'Ð'àˆOŒO�s 7™|œ|Ñ+ˆOŒOˆOàð 	)Ø”:˜e C˜iÔ(Ð(àÔð 		EÝ�LŠLÐ4¨FÐ4Ð4Ñ5Ô5Ð5Ý# D×$6Ò$6°vÑ$>Ô$>Ñ?Ô?ð ,ð ,‘��QØ% cœ{‘�˜Ý—’Ð@°Ð@Ð@¸$Ð@Ð@ÑAÔAÐAØ*+�”
˜6 $˜;Ñ'Ð'ð,ð
 !'ð Eð E‘�˜Ý—’Ð?°Ð?Ð?¸Ð?Ð?Ñ@Ô@Ð@Ø*.¯,ª,°v¸tÑ*DÔ*D�”
˜6 $˜;Ñ'Ð'àŒz˜% ˜)Ô$Ð$r(   údict[str, Any]c                ó>   — | j                              ¦   «         }|d= |S )NrQ   )Ú__dict__Úcopy©r%   Ústates     r&   Ú__getstate__zMMapCache.__getstate__ã   s!   € Ø”×"Ò"Ñ$Ô$ˆà�'ˆNØˆr(   r�   c                ól   — | j                              |¦  «         |                      ¦   «         | _        d S rM   )rŠ   r{   rP   rQ   rŒ   s     r&   Ú__setstate__zMMapCache.__setstate__é   s-   € àŒ×Ò˜UÑ#Ô#Ð#Ø—^’^Ñ%Ô%ˆŒ
ˆ
ˆ
r(   )NNN)r   r   r   r   r   r   rF   rG   rH   rI   rJ   rK   r   r   )r   rR   ©r)   r*   rb   r*   r   r,   ©r   rˆ   ©r�   rˆ   r   r   )r9   r>   r?   r@   r   r'   rP   r/   rŽ   r�   Ú__classcell__©r8   s   @r&   rD   rD   a   s¯   ø€ € € € € ðð ð8 €Dð  $Ø"&Ø-1ð&ð &ð &ð &ð &ð &ð &ð1ð 1ð 1ð 1ð,<%ð <%ð <%ð <%ð|ð ð ð ð&ð &ð &ð &ð &ð &ð &ð &r(   rD   c                  ó0   ‡ — e Zd ZdZdZdˆ fd
„Zdd„Zˆ xZS )ÚReadAheadCachea!  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).
    Ú	readaheadr   r   r   r   r   r   r   c                óx   •— t          ¦   «                              |||¦  «         d| _        d| _        d| _        d S )Nr(   r   )rN   r'   rQ   r)   rb   ©r%   r   r   r   r8   s       €r&   r'   zReadAheadCache.__init__ù   s8   ø€ Ý‰Œ×Ò˜ G¨TÑ2Ô2Ð2ØˆŒ
ØˆŒ
ØˆŒˆˆr(   r)   r*   rb   r,   c                óÐ  — |€d}|�|| j         k    r| j         }|| j         k    s||k    rdS ||z
  }|| j        k    r:|| j        k    r/| xj        dz  c_        | j        || j        z
  || j        z
  …         S | j        |cxk    r| j        k     rDn nA| xj        dz  c_        | j        || j        z
  d …         }|t          |¦  «        z  }| j        }n| xj        dz  c_        d}t          | j         || j        z   ¦  «        }| xj	        ||z
  z  c_	        |  
                    ||¦  «        | _        || _        | j        t          | j        ¦  «        z   | _        || j        d |…         z   S ©Nr   r(   rT   )r   r)   rb   r"   rQ   r#   r|   ry   r   r$   r   )r%   r)   rb   ÚlÚparts        r&   r/   zReadAheadCache._fetchÿ   s�  € Øˆ=ØˆEØˆ;˜# ¤	š/˜/Ø”)ˆCØ�D”IÒÐ ¨#¢ Ø�3Ø�%‰KˆØ�D”JÒÐ 3¨$¬(¢? ?àˆNŒN˜aÑˆNŒNØ”:˜e d¤jÑ0°3¸¼Ñ3CÐCÔDÐDØŒZ˜5Ð+Ð+Ò+Ð+ 4¤8Ò+Ð+Ð+Ð+Ð+àˆOŒO˜qÑ ˆOŒOØ”:˜e d¤jÑ0Ð2Ð2Ô3ˆDØ•�T‘”‰NˆAØ”HˆEˆEð ˆOŒO˜qÑ ˆOŒOØˆDÝ�$”)˜S 4¤>Ñ1Ñ2Ô2ˆØÐ"Ô" c¨E¡kÑ1Ð"Ô"Ø—\’\ %¨Ñ-Ô-ˆŒ
ØˆŒ
Ø”:¥ D¤J¡¤Ñ/ˆŒØ�d”j  ! ”nÑ$Ð$r(   r;   r‘   ©r9   r>   r?   r@   r   r'   r/   r”   r•   s   @r&   r—   r—   ï   sb   ø€ € € € € ðð ð €Dðð ð ð ð ð ð%ð %ð %ð %ð %ð %ð %ð %r(   r—   c                  ó0   ‡ — e Zd ZdZdZdˆ fd
„Zdd„Zˆ xZS )ÚFirstChunkCachez›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.
    Úfirstr   r   r   r   r   r   r   c                ól   •— ||k    r|}t          ¦   «                              |||¦  «         d | _        d S rM   )rN   r'   rQ   rš   s       €r&   r'   zFirstChunkCache.__init__&  s:   ø€ Ø�tÒÐàˆIÝ‰Œ×Ò˜ G¨TÑ2Ô2Ð2Ø#'ˆŒ
ˆ
ˆ
r(   r)   r*   rb   r,   c                ó  — |pd}|| j         k    rt                               d¦  «         dS |€| j         }t          || j         ¦  «        }|| j        k     rý| j        €”| xj        dz  c_        || j        k    rD| xj        |z  c_        |                      d|¦  «        }|d | j        …         | _        ||d …         S |                      d| j        ¦  «        | _        | xj        | j        z  c_        | j        ||…         }|| j        k    r6| xj        || j        z
  z  c_        ||                      | j        |¦  «        z  }| xj	        dz  c_	        |S | xj        dz  c_        | xj        ||z
  z  c_        |                      ||¦  «        S )Nr   z,FirstChunkCache: requested start > file sizer(   rT   )
r   rr   rs   ry   r   rQ   r#   r$   r   r"   )r%   r)   rb   Údatarž   s        r&   r/   zFirstChunkCache._fetch-  s˜  € Ø�
˜ˆØ�4”9ÒÐÝ�LŠLÐGÑHÔHÐHØ�3àˆ;Ø”)ˆCÝ�#�t”yÑ!Ô!ˆà�4”>Ò!Ð!ØŒzÐ!Ø�” 1Ñ$�”Ø˜œÒ'Ð'ØÐ.Ô.°#Ñ5Ð.Ô.ØŸ<š<¨¨3Ñ/Ô/�DØ!%Ð&6¨¬Ð&6Ô!7�D”JØ   œ<Ð'Ø!Ÿ\š\¨!¨T¬^Ñ<Ô<�”
ØÐ*Ô*¨d¬nÑ<Ð*Ô*Ø”:˜e C˜iÔ(ˆDØ�T”^Ò#Ð#ØÐ*Ô*¨c°D´NÑ.BÑBÐ*Ô*Ø˜Ÿš T¤^°SÑ9Ô9Ñ9�ØˆNŒN˜aÑˆNŒNØˆKàˆOŒO˜qÑ ˆOŒOØÐ&Ô&¨#°©+Ñ5Ð&Ô&Ø—<’<  sÑ+Ô+Ð+r(   r;   r‘   rŸ   r•   s   @r&   r¡   r¡     sb   ø€ € € € € ðð ð €Dð(ð (ð (ð (ð (ð (ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r(   r¡   c                  ó^   ‡ — e Zd ZdZdZ	 ddˆ fd„Zd„ Zdd„Zdd„Zd d„Z	d!ˆ fd„Z
d"d„Zˆ xZS )#Ú
BlockCacheaè  
    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``.
    Ú
blockcacheé    r   r   r   r   r   Ú	maxblocksr   r   c                óâ   •— t          ¦   «                              |||¦  «         t          j        ||z  ¦  «        | _        || _         t          j        |¦  «        | j        ¦  «        | _	        d S rM   )
rN   r'   ÚmathÚceilr!   rª   Ú	functoolsÚ	lru_cacheÚ_fetch_blockÚ_fetch_block_cached©r%   r   r   r   rª   r8   s        €r&   r'   zBlockCache.__init__f  sd   ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2Ý”y ¨	Ñ!1Ñ2Ô2ˆŒØ"ˆŒØ#A¥9Ô#6°yÑ#AÔ#AÀ$ÔBSÑ#TÔ#TˆÔ Ð Ð r(   c                ó4   — | j                              ¦   «         S ©zª
        The statistics on the block cache.

        Returns
        -------
        NamedTuple
            Returned directly from the LRU Cache used internally.
        ©r±   Ú
cache_infor1   s    r&   r¶   zBlockCache.cache_infon  ó   € ð Ô'×2Ò2Ñ4Ô4Ð4r(   rˆ   c                ó   — | j         }|d= |S )Nr±   ©rŠ   rŒ   s     r&   rŽ   zBlockCache.__getstate__y  s   € Ø”ˆØÐ'Ð(Øˆr(   r�   c                ó”   — | j                              |¦  «          t          j        |d         ¦  «        | j        ¦  «        | _        d S )Nrª   )rŠ   r{   r®   r¯   r°   r±   rŒ   s     r&   r�   zBlockCache.__setstate__~  sH   € ØŒ×Ò˜UÑ#Ô#Ð#Ø#J¥9Ô#6°u¸[Ô7IÑ#JÔ#JØÔñ$
ô $
ˆÔ Ð Ð r(   r)   r*   rb   r,   c                ó®   — |€d}|�|| j         k    r| j         }|| j         k    s||k    rdS |                      |||| j        z  |dz
  | j        z  ¦  «        S rœ   )r   Ú_read_cacher   )r%   r)   rb   s      r&   r/   zBlockCache._fetch„  so   € Øˆ=ØˆEØˆ;˜# ¤	š/˜/Ø”)ˆCØ�D”IÒÐ ¨#¢ Ø�3à×ÒØ�3˜ ¤Ñ/°#¸±'¸d¼nÑ1Lñ
ô 
ð 	
r(   Úblock_numberc                ó<  •— || j         k    rt          d|› d| j         › d�¦  «        ‚|| j        z  }|| j        z   }| xj        ||z
  z  c_        | xj        dz  c_        t
                               d|¦  «         t          ¦   «                              ||¦  «        }|S )ú=
        Fetch the block of data for `block_number`.
        ú'block_number=ú(' is greater than the number of blocks (rq   rT   zBlockCache fetching block %d)	r!   Ú
ValueErrorr   r$   r#   rr   ÚinforN   r/   )r%   r½   r)   rb   Úblock_contentsr8   s        €r&   r°   zBlockCache._fetch_block�  s½   ø€ ð ˜$œ,Ò&Ð&Ýð9 ð 9ð 9Ø)-¬ð9ð 9ð 9ñô ð ð
 ˜tœ~Ñ-ˆØ�d”nÑ$ˆØÐ"Ô" c¨E¡kÑ1Ð"Ô"ØˆŒ˜1ÑˆŒÝ�ŠÐ2°LÑAÔAÐAÝ™œŸš¨¨sÑ3Ô3ˆØÐr(   Ústart_block_numberÚend_block_numberc           	     óæ  — || j         z  }|| j         z  }|dk    r| j         }| xj        dz  c_        ||k    r|                      |¦  «        }|||…         S |                      |¦  «        |d…         g}|                     t	          | j        t          |dz   |¦  «        ¦  «        ¦  «         |                     |                      |¦  «        d|…         ¦  «         d                     |¦  «        S )úú
        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   rT   Nr(   ©r   r"   r±   Úextendrx   rt   rz   Újoin©	r%   r)   rb   rÅ   rÆ   Ú	start_posÚend_posÚblockÚouts	            r&   r¼   zBlockCache._read_cache¢  s	  € ð ˜DœNÑ*ˆ	Ø˜œÑ&ˆØ�aŠ<ˆ<Ø”nˆGàˆŒ˜!ÑˆŒØÐ!1Ò1Ð1Ø×3Ò3Ð4FÑGÔGˆEØ˜ 7Ð*Ô+Ð+ð ×+Ò+Ð,>Ñ?Ô?À	À
À
ÔKÐLˆCð
 �JŠJÝØÔ,ÝÐ,¨qÑ0Ð2BÑCÔCñô ñô ð ð �JŠJ�t×/Ò/Ð0@ÑAÔAÀ(À7À(ÔKÑLÔLÐLà—8’8˜C‘=”=Ð r(   ©r©   ©
r   r   r   r   r   r   rª   r   r   r   r’   r“   r‘   )r½   r   r   r,   ©
r)   r   rb   r   rÅ   r   rÆ   r   r   r,   )r9   r>   r?   r@   r   r'   r¶   rŽ   r�   r/   r°   r¼   r”   r•   s   @r&   r§   r§   M  sÞ   ø€ € € € € ðð ð, €Dð MOðUð Uð Uð Uð Uð Uð Uð	5ð 	5ð 	5ðð ð ð ð

ð 
ð 
ð 
ð

ð 

ð 

ð 

ðð ð ð ð ð ð$(!ð (!ð (!ð (!ð (!ð (!ð (!ð (!r(   r§   c                  óH   ‡ — e Zd ZU dZdZded<   	 ddˆ fd„Zdd„Zdd„Zˆ xZ	S )Ú
BytesCacheaK  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.
    r,   r   r   Tr   r   r   r   r   ÚtrimÚboolr   r   c                ó†   •— t          ¦   «                              |||¦  «         d| _        d | _        d | _        || _        d S )Nr(   )rN   r'   rQ   r)   rb   rÖ   )r%   r   r   r   rÖ   r8   s        €r&   r'   zBytesCache.__init__Ü  sA   ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2ØˆŒ
Ø!%ˆŒ
Ø#ˆŒØˆŒ	ˆ	ˆ	r(   r)   r*   rb   c                óV  — |€d}|€| j         }|| j         k    s||k    rdS | j        �L|| j        k    rA| j        �:|| j        k     r/|| j        z
  }| xj        dz  c_        | j        |||z   |z
  …         S | j        rt          | j         || j        z   ¦  «        }n|}||k    s|| j         k    rdS | j        �|| j        k     rY| j        �|| j        k    rG| xj        ||z
  z  c_        | xj        dz  c_        |  	                    ||¦  «        | _        || _        �nu| j        €J ‚| j        €J ‚| xj        dz  c_        || j        k     rš| j        �| j        |z
  | j        k    r6| xj        ||z
  z  c_        |  	                    ||¦  «        | _        || _        nø| xj        | j        |z
  z  c_        |  	                    || j        ¦  «        }|| _        || j        z   | _        n®| j        �§|| j        k    rœ| j        | j         k    rn‹|| j        z
  | j        k    r6| xj        ||z
  z  c_        |  	                    ||¦  «        | _        || _        nB| xj        || j        z
  z  c_        |  	                    | j        |¦  «        }| j        |z   | _        | j        t          | j        ¦  «        z   | _        || j        z
  }| j        |||z   |z
  …         }| j        rT| j        | j        z
  | j        dz   z  }|dk    r4| xj        | j        |z  z  c_        | j        | j        |z  d …         | _        |S rœ   )r   r)   rb   r"   rQ   r   ry   r$   r#   r   r|   rÖ   )r%   r)   rb   ÚoffsetÚbendÚnewrÐ   Únums           r&   r/   zBytesCache._fetchå  sa  € ð ˆ=ØˆEØˆ;Ø”)ˆCØ�D”IÒÐ ¨#¢ Ø�3àŒJÐ"Ø˜œÒ#Ð#Ø”Ð$Ø�d”h’�ð ˜TœZÑ'ˆFØˆNŒN˜aÑˆNŒNØ”:˜f v°¡|°eÑ';Ð;Ô<Ð<àŒ>ð 	Ý�t”y #¨¬Ñ"6Ñ7Ô7ˆDˆDàˆDà�5Š=ˆ=˜E D¤IÒ-Ð-Ø�3àŒJÐ %¨$¬*Ò"4Ð"4ØŒHÐ  d¤h¢ ð Ð&Ô&¨$°©,Ñ6Ð&Ô&ØˆOŒO˜qÑ ˆOŒOØŸš e¨TÑ2Ô2ˆDŒJØˆDŒJ‰Jà”:Ð)Ð)Ð)Ø”8Ð'Ð'Ð'ØˆOŒO˜qÑ ˆOŒOà�t”zÒ!Ð!Ø”8Ð# t¤x°#¡~¸¼Ò'FÐ'FØÐ.Ô.°$¸±,Ñ>Ð.Ô.Ø!%§¢¨e°TÑ!:Ô!:�D”JØ!&�D”J�JàÐ.Ô.°$´*¸uÑ2DÑDÐ.Ô.ØŸ,š, u¨d¬jÑ9Ô9�CØ!&�D”JØ!$ t¤zÑ!1�D”J�JØ”Ð%¨$°´ª/¨/Ø”8˜dœiÒ'Ð'ØØ˜4œ8‘^ d¤nÒ4Ð4ØÐ.Ô.°$¸±,Ñ>Ð.Ô.Ø!%§¢¨e°TÑ!:Ô!:�D”JØ!&�D”J�JàÐ.Ô.°$¸¼±/ÑAÐ.Ô.ØŸ,š, t¤x°Ñ6Ô6�CØ!%¤¨cÑ!1�D”Jà”:¥ D¤J¡¤Ñ/ˆŒØ˜œÑ#ˆØŒj˜ &¨3¡,°Ñ"6Ð6Ô7ˆØŒ9ð 	@Ø”8˜dœjÑ(¨d¬n¸qÑ.@ÑAˆCØ�QŠwˆwØ�
”
˜dœn¨sÑ2Ñ2�
”
Ø!œZ¨¬¸Ñ(<Ð(>Ð(>Ô?�”
Øˆ
r(   c                ó*   — t          | j        ¦  «        S rM   )r|   rQ   r1   s    r&   Ú__len__zBytesCache.__len__.  s   € Ý�4”:‰ŒÐr(   )T)
r   r   r   r   r   r   rÖ   r×   r   r   r‘   )r   r   )
r9   r>   r?   r@   r   rA   r'   r/   rß   r”   r•   s   @r&   rÕ   rÕ   Í  s•   ø€ € € € € € ð
ð 
ð "€DÐ!Ð!Ð!Ñ!ð IMðð ð ð ð ð ð ðGð Gð Gð GðRð ð ð ð ð ð ð r(   rÕ   c                  óF   ‡ — e Zd ZU dZdZded<   	 	 	 	 ddˆ fd„Zdd„Zˆ xZS )ÚAllBytesz!Cache entire contents of the fileÚallr   r   Nr   r*   r   úFetcher | Noner   r¥   úbytes | Noner   r   c                óà   •— t          ¦   «                              |||¦  «         |€@| xj        dz  c_        | xj        | j        z  c_        |                      d| j        ¦  «        }|| _        d S )NrT   r   )rN   r'   r#   r$   r   r   r¥   )r%   r   r   r   r¥   r8   s        €r&   r'   zAllBytes.__init__7  sl   ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2Øˆ<ØˆOŒO˜qÑ ˆOŒOØÐ&Ô&¨$¬)Ñ3Ð&Ô&Ø—<’<  4¤9Ñ-Ô-ˆDØˆŒ	ˆ	ˆ	r(   r)   r+   r,   c                ó@   — | xj         dz  c_         | j        ||…         S )NrT   )r"   r¥   r.   s      r&   r/   zAllBytes._fetchE  s#   € ØˆŒ˜!ÑˆŒØŒy˜˜t˜Ô$Ð$r(   )NNNN)
r   r*   r   rã   r   r*   r¥   rä   r   r   r<   )	r9   r>   r?   r@   r   rA   r'   r/   r”   r•   s   @r&   rá   rá   2  s}   ø€ € € € € € Ø+Ð+à€DÐÐÐÑð !%Ø"&ØØ!ðð ð ð ð ð ð ð%ð %ð %ð %ð %ð %ð %ð %r(   rá   c                  ó®   ‡ — e Zd ZU dZdZded<   	 	 ddˆ fd„Zed„ ¦   «         Zej	        d„ ¦   «         Zed„ ¦   «         Z
e
j	        d„ ¦   «         Z
dd„Zˆ xZS ) ÚKnownPartsOfAFilea½  
    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   NFr   r   r   r   r   r¥   ú#dict[tuple[int, int], bytes] | NoneÚstrictr×   r‚   r   c                ó`  •— t          ¦   «                              |||¦  «         || _        |rùt          |                     ¦   «         ¦  «        }|d         g}|                     |d         ¦  «        g}	|dd …         D ]„\  }
}|d         \  }}|
|k    r-||f|d<   |	dxx         |                     |
|f¦  «        z  cc<   ŒC|                     |
|f¦  «         |	                     |                     |
|f¦  «        ¦  «         Œ…t          t          ||	¦  «        ¦  «        | _	        d S i | _	        d S )Nr   rT   rp   )
rN   r'   rë   ÚsortedÚkeysÚpoprz   ÚdictÚzipr¥   )r%   r   r   r   r¥   rë   r‚   Úold_offsetsÚoffsetsrH   r)   r+   Ústart0Ústop0r8   s                 €r&   r'   zKnownPartsOfAFile.__init__c  s4  ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2ØˆŒð ð 	Ý  §¢¡¤Ñ-Ô-ˆKØ" 1”~Ð&ˆGØ—h’h˜{¨1œ~Ñ.Ô.Ð/ˆFØ*¨1¨2¨2œð ;ð ;‘��tØ '¨¤‘�˜Ø˜E’>�>Ø#)¨4 .�G˜B‘KØ˜2�J�J”J $§(¢(¨E°4¨=Ñ"9Ô"9Ñ9�J�J‘J�Jà—N’N E¨4 =Ñ1Ô1Ð1Ø—M’M $§(¢(¨E°4¨=Ñ"9Ô"9Ñ:Ô:Ð:Ð:å�S ¨&Ñ1Ô1Ñ2Ô2ˆDŒIˆIˆIàˆDŒIˆIˆIr(   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó8   K  — | ]}|d          |d         z
  V — ŒdS )rT   r   NrB   )rh   r‚   s     r&   rj   z)KnownPartsOfAFile.size.<locals>.<genexpr>ƒ  s.   è è € Ð2Ð2 1�1�Q”4˜!˜Aœ$‘;Ð2Ð2Ð2Ð2Ð2Ð2r(   )ru   r¥   r1   s    r&   r   zKnownPartsOfAFile.size�  s!   € åÐ2Ð2¨¬	Ð2Ñ2Ô2Ñ2Ô2Ð2r(   c                ó   — d S rM   rB   ©r%   Úvalues     r&   r   zKnownPartsOfAFile.size…  ó   € àˆr(   c                ó*   — t          | j        ¦  «        S rM   )r|   r¥   r1   s    r&   r!   zKnownPartsOfAFile.nblocks‰  s   € å�4”9‰~Œ~Ðr(   c                ó   — d S rM   rB   rù   s     r&   r!   zKnownPartsOfAFile.nblocks�  rû   r(   r)   r*   r+   r   r,   c                ó   — t                                d||¦  «         |€d}|€| j        }| xj        ||z
  z  c_        d}d}d}t	          | j        ¦  «        D �]J\  }}||cxk    r|k     rGn nD||cxk    r|k    r7n n4||z
  }| xj        dz  c_        | j        ||f         |||z   |z
  …         c S ||k    r nê|r/||k    r)| xj        dz  c_        | j        rt          ‚|d||z
  z  z  }||cxk    r|k     r8n n5| xj        dz  c_        ||z
  }| j        ||f         |||z   |z
  …         }d}np||k     r)||k    r#| xj        dz  c_        || j        ||f         z  }nA||cxk    r|k    r4n n1| xj        dz  c_        || j        ||f         d ||z
  …         z   }|c S |}�ŒL| xj        dz  c_        |r| j        s|d||z
  z  z   }|S t          ‚)NzKnown parts request %s %sr   r(   FrT   ó    T)
rr   rs   r   r$   rí   r¥   r"   r#   rë   rÂ   )	r%   r)   r+   rÐ   ÚstartedÚloc_oldÚloc0Úloc1Úoffs	            r&   r/   zKnownPartsOfAFile._fetch‘  sŠ  € Ý�ŠÐ0°%¸Ñ>Ô>Ð>Øˆ=ØˆEØˆ<Ø”9ˆDØÐ"Ô" d¨U¡lÑ2Ð"Ô"ØˆØˆØˆÝ  ¤Ñ+Ô+ð 	ñ 	‰JˆD�$Ø˜Ð$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$¨4°4Ð+?Ð+?Ò+?Ð+?¸4Ò+?Ð+?Ð+?Ð+?Ð+?à˜d‘l�Ø�” !Ñ#�”Ø”y $¨ Ô.¨s°S¸4±ZÀ%Ñ5GÐ/GÔHÐHÐHÐHØ�tŠ|ˆ|Ø�Øð 2˜4 'š>˜>à�” 1Ñ$�”Ø”;ð %Ý$Ð$Ø�w $¨¡.Ñ1Ñ1�Ø�uÐ#Ð#Ò#Ð#˜tÒ#Ð#Ð#Ð#Ð#à�” !Ñ#�”Ø˜d‘l�Ø”i  t Ô-¨c°C¸$±JÀÑ4FÐ.FÔG�Ø��Ø˜’� $¨¢+ +à�” !Ñ#�”Ø�t”y $¨ Ô.Ñ.��Ø˜Ð%Ð%Ò%Ð% Ò%Ð%Ð%Ð%Ð%à�” !Ñ#�”Ø˜DœI t¨T lÔ3°M°d¸T±k°MÔBÑB�Ø�
�
�
ØˆG‰GØˆŒ˜1ÑˆŒØð 	˜4œ;ð 	Ø˜ 4¨'¡>Ñ2Ñ2ˆCØˆJÝÐr(   )NF)r   r   r   r   r   r   r¥   rê   rë   r×   r‚   r   r<   )r9   r>   r?   r@   r   rA   r'   Úpropertyr   Úsetterr!   r/   r”   r•   s   @r&   rè   rè   J  sí   ø€ € € € € € ðð ð, "€DÐ!Ð!Ð!Ñ!ð 59Øðð ð ð ð ð ð ð< ð3ð 3ñ „Xð3ð 
„[ðð ñ „[ðð ðð ñ „Xðð „^ðð ñ „^ðð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r(   rè   c                  óX   — e Zd ZdZ G d„ de¦  «        Zddd„Zdd„Zdd„Zdd„Z	dd„Z
dS ) ÚUpdatableLRUzh
    Custom implementation of LRU cache that allows updating keys

    Used by BackgroundBlockCache
    c                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )úUpdatableLRU.CacheInfor   ÚhitsÚmissesÚmaxsizeÚcurrsizeN)r9   r>   r?   rA   rB   r(   r&   Ú	CacheInfor
  Ç  s4   € € € € € € Øˆ	ˆ	‰	Øˆˆ‰Øˆˆ‰Øˆˆ‰ˆˆr(   r  é€   ÚfuncúCallable[P, T]Úmax_sizer   r   r   c                óž   — t          j        ¦   «         | _        || _        || _        d| _        d| _        t          j        ¦   «         | _	        d S r    )
Úcollectionsr   Ú_cacheÚ_funcÚ	_max_sizeÚ_hitsÚ_missesÚ	threadingÚLockÚ_lock)r%   r  r  s      r&   r'   zUpdatableLRU.__init__Í  sA   € Ý+6Ô+BÑ+DÔ+DˆŒØˆŒ
Ø!ˆŒØˆŒ
ØˆŒÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
r(   ÚargsúP.argsÚkwargsúP.kwargsr   c                ó&  — |r$t          d|                     ¦   «         › �¦  «        ‚| j        5  || j        v rC| j                             |¦  «         | xj        dz  c_        | j        |         cd d d ¦  «         S 	 d d d ¦  «         n# 1 swxY w Y    | j        |i |¤Ž}| j        5  || j        |<   | xj        dz  c_        t          | j        ¦  «        | j	        k    r| j         
                    d¬¦  «         d d d ¦  «         n# 1 swxY w Y   |S )Nz Got unexpected keyword argument rT   F©Úlast)Ú	TypeErrorrî   r  r  Úmove_to_endr  r  r  r|   r  Úpopitem)r%   r  r   Úresults       r&   Ú__call__zUpdatableLRU.__call__Õ  s¶  € Øð 	PÝÐN¸v¿{º{¹}¼}ÐNÐNÑOÔOÐOØŒZð 	)ð 	)Ø�t”{Ð"Ð"Ø”×'Ò'¨Ñ-Ô-Ð-Ø�
”
˜a‘�
”
Ø”{ 4Ô(ð		)ð 	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)Ø"ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð �”˜TÐ, VÐ,Ð,ˆàŒZð 	0ð 	0Ø &ˆDŒK˜ÑØˆLŒL˜AÑˆLŒLÝ�4”;ÑÔ $¤.Ò0Ð0Ø”×#Ò#¨Ð#Ñ/Ô/Ð/ð		0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð ˆs%   ®A BÂBÂBÂ'ADÄD
ÄD
r   r×   c                óV   — | j         5  || j        v cd d d ¦  «         S # 1 swxY w Y   d S rM   )r  r  )r%   r  s     r&   Úis_key_cachedzUpdatableLRU.is_key_cachedè  sx   € ØŒZð 	'ð 	'Ø˜4œ;Ð&ð	'ð 	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's   ˆ	ž"¥"r(  c                óÊ   — | j         5  || j        |<   t          | j        ¦  «        | j        k    r| j                             d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NFr#  )r  r  r|   r  r'  )r%   r(  r  s      r&   Úadd_keyzUpdatableLRU.add_keyì  sª   € ØŒZð 	0ð 	0Ø &ˆDŒK˜ÑÝ�4”;ÑÔ $¤.Ò0Ð0Ø”×#Ò#¨Ð#Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   ˆAAÁAÁAr
  c                ó¸   — | j         5  |                      | j        t          | j        ¦  «        | j        | j        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )N)r  r  r  r  )r  r  r  r|   r  r  r  r1   s    r&   r¶   zUpdatableLRU.cache_infoò  s    € ØŒZð 	ð 	Ø—>’>ØœÝ˜Tœ[Ñ)Ô)Ø”ZØ”|ð	 "ñ ô ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆ:AÁAÁAN)r  )r  r  r  r   r   r   )r  r  r   r!  r   r   )r  r   r   r×   )r(  r   r  r   r   r   ©r   r
  )r9   r>   r?   r@   r   r  r'   r)  r+  r-  r¶   rB   r(   r&   r  r  À  s±   € € € € € ðð ðð ð ð ð �Jñ ô ð ð&ð &ð &ð &ð &ðð ð ð ð&'ð 'ð 'ð 'ð0ð 0ð 0ð 0ðð ð ð ð ð r(   r  c                  óv   ‡ — e Zd ZU dZdZded<   	 d"d#ˆ fd„Zd$d„Zd%d„Zd&d„Z	d%d„Z
d'd„Zd(d)ˆ fd„Zd*d!„Zˆ xZS )+ÚBackgroundBlockCacheaƒ  
    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   r©   r   r   r   r   r   rª   r   r   c                óL  •— t          ¦   «                              |||¦  «         t          j        ||z  ¦  «        | _        || _        t          | j        |¦  «        | _        t          d¬¦  «        | _
        d | _        d | _        t          j        ¦   «         | _        d| _        d S )NrT   ©Úmax_workersF)rN   r'   r¬   r­   r!   rª   r  r°   r±   r   Ú_thread_executorÚ_fetch_future_block_numberÚ_fetch_futurer  r  Ú_fetch_future_lockÚ_closedr²   s        €r&   r'   zBackgroundBlockCache.__init__  s‘   ø€ õ 	‰Œ×Ò˜ G¨TÑ2Ô2Ð2Ý”y ¨	Ñ!1Ñ2Ô2ˆŒØ"ˆŒÝ#/°Ô0AÀ9Ñ#MÔ#MˆÔ å 2¸qÐ AÑ AÔ AˆÔØ6:ˆÔ'Ø37ˆÔÝ"+¤.Ñ"2Ô"2ˆÔØˆŒˆˆr(   r
  c                ó4   — | j                              ¦   «         S r´   rµ   r1   s    r&   r¶   zBackgroundBlockCache.cache_info&  r·   r(   c                ó  — | j         5  | j        r	 ddd¦  «         dS d| _        | j        }d| _        d| _        ddd¦  «         n# 1 swxY w Y   |�|                     ¦   «          | j                             dd¬¦  «         | `dS )z8Cancel pending work and shut down the background worker.NT)ÚwaitÚcancel_futures)r9  r:  r8  r7  Úcancelr6  Úshutdownr±   )r%   Úfutures     r&   ÚclosezBackgroundBlockCache.close1  sõ   € àÔ$ð 	3ð 	3ØŒ|ð Øð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð  ˆDŒLØÔ'ˆFØ!%ˆDÔØ.2ˆDÔ+ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð ÐØ�MŠM‰OŒOˆOØÔ×&Ò&¨DÀÐ&ÑFÔFÐFð Ð$Ð$Ð$s   ˆ	AžAÁA
ÁA
rˆ   c                ó2   — | j         }|d= |d= |d= |d= |d= |S )Nr±   r6  r7  r8  r9  r¹   rŒ   s     r&   rŽ   z!BackgroundBlockCache.__getstate__B  s:   € Ø”ˆØÐ'Ð(ØÐ$Ð%ØÐ.Ð/Ø�/Ð"ØÐ&Ð'Øˆr(   c                óþ   — | j                              |¦  «         t          | j        |d         ¦  «        | _        t          d¬¦  «        | _        d | _        d | _        t          j
        ¦   «         | _        d| _        d S )Nrª   rT   r4  F)rŠ   r{   r  r°   r±   r   r6  r7  r8  r  r  r9  r:  rŒ   s     r&   r�   z!BackgroundBlockCache.__setstate__K  sp   € ØŒ×Ò˜UÑ#Ô#Ð#Ý#/°Ô0AÀ5ÈÔCUÑ#VÔ#VˆÔ Ý 2¸qÐ AÑ AÔ AˆÔØ*.ˆÔ'Ø!ˆÔÝ"+¤.Ñ"2Ô"2ˆÔØˆŒˆˆr(   r)   r*   rb   r,   c                ól  — |€d}|�|| j         k    r| j         }|| j         k    s||k    rdS || j        z  }|| j        z  }d }d }| j        5  | j        �Â| j        €J ‚| j                             ¦   «         r`t                               d¦  «         | j         	                    | j         
                    ¦   «         | j        ¦  «         d | _        d | _        n@t          || j        cxk    o|k    nc ¦  «        }|r| j        }| j        }d | _        d | _        d d d ¦  «         n# 1 swxY w Y   |�Gt                               d¦  «         | j         	                    | 
                    ¦   «         |¦  «         t          ||dz   ¦  «        D ]}|                      |¦  «         Œ|dz   }	| j        5  | j        €R|	| j        k    rG| j                             |	¦  «        s-|	| _        | j                             | j        |	d¦  «        | _        d d d ¦  «         n# 1 swxY w Y   |                      ||||¬¦  «        S )Nr   r(   z3BlockCache joined background fetch without waiting.z(BlockCache waiting for background fetch.rT   Úasync)rÅ   rÆ   )r   r   r9  r8  r7  Údonerr   rÃ   r±   r-  r(  r×   rt   r!   r+  r6  Úsubmitr°   r¼   )
r%   r)   rb   rÅ   rÆ   Úfetch_future_block_numberÚfetch_futureÚ	must_joinr½   Úend_block_plus_1s
             r&   r/   zBackgroundBlockCache._fetchT  s6  € Øˆ=ØˆEØˆ;˜# ¤	š/˜/Ø”)ˆCØ�D”IÒÐ ¨#¢ Ø�3ð # d¤nÑ4ÐØ $¤.Ñ0Ðà$(Ð!ØˆØÔ$ð 	2ð 	2àÔ!Ð-ØÔ6ÐBÐBÐBØÔ%×*Ò*Ñ,Ô,ð 2Ý—K’KÐ UÑVÔVÐVØÔ,×4Ò4ØÔ*×1Ò1Ñ3Ô3°TÔ5Tñô ð ð 7;�DÔ3Ø)-�DÔ&Ð&õ !%Ø*ØÔ:ð,ð ,ò ,ð ,à+ò,ð ,ð ,ð ,ñ!ô !�Ið
 !ð 2ð 59Ô4SÐ1Ø'+Ô'9˜ð ;?˜Ô7Ø-1˜Ô*ð7	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð< Ð#Ý�KŠKÐBÑCÔCÐCàÔ$×,Ò,Ø×#Ò#Ñ%Ô%Ð'@ñô ð õ
 "Ð"4Ð6FÈÑ6JÑKÔKð 	3ð 	3ˆLØ×$Ò$ \Ñ2Ô2Ð2Ð2ð ,¨aÑ/ÐØÔ$ð 		ð 		àÔ"Ð*Ø$¨¬Ò4Ð4ØÔ0×>Ò>Ð?OÑPÔPð 5ð 3C�Ô/Ø%)Ô%:×%AÒ%AØÔ%Ð'7¸ñ&ô &�Ô"ð		ð 		ð 		ñ 		ô 		ð 		ð 		ð 		ð 		ð 		ð 		øøøð 		ð 		ð 		ð 		ð ×ÒØØØ1Ø-ð	  ñ 
ô 
ð 	
s&   ÁC
D!Ä!D%Ä(D%Æ,AHÈHÈHÚsyncr½   Úlog_infor3   c                ó>  •— || j         k    rt          d|› d| j         › d�¦  «        ‚|| j        z  }|| j        z   }t                               d||¦  «         | xj        ||z
  z  c_        | xj        dz  c_        t          ¦   «                              ||¦  «        }|S )r¿   rÀ   rÁ   rq   z!BlockCache fetching block (%s) %drT   )	r!   rÂ   r   rr   rÃ   r$   r#   rN   r/   )r%   r½   rN  r)   rb   rÄ   r8   s         €r&   r°   z!BackgroundBlockCache._fetch_block   s¿   ø€ ð ˜$œ,Ò&Ð&Ýð9 ð 9ð 9Ø)-¬ð9ð 9ð 9ñô ð ð
 ˜tœ~Ñ-ˆØ�d”nÑ$ˆÝ�ŠÐ7¸À<ÑPÔPÐPØÐ"Ô" c¨E¡kÑ1Ð"Ô"ØˆŒ˜1ÑˆŒÝ™œŸš¨¨sÑ3Ô3ˆØÐr(   rÅ   rÆ   c           	     óÌ  — || j         z  }|| j         z  }| xj        dz  c_        ||k    r|                      |¦  «        }|||…         S |                      |¦  «        |d…         g}|                     t	          | j        t          |dz   |¦  «        ¦  «        ¦  «         |                     |                      |¦  «        d|…         ¦  «         d                     |¦  «        S )rÈ   rT   Nr(   rÉ   rÌ   s	            r&   r¼   z BackgroundBlockCache._read_cache²  sû   € ð ˜DœNÑ*ˆ	Ø˜œÑ&ˆð 	ˆŒ˜!ÑˆŒàÐ!1Ò1Ð1Ø×,Ò,Ð-?Ñ@Ô@ˆEØ˜ 7Ð*Ô+Ð+ð ×+Ò+Ð,>Ñ?Ô?À	À
À
ÔKÐLˆCð
 �JŠJÝØÔ,ÝÐ,¨qÑ0Ð2BÑCÔCñô ñô ð ð �JŠJ�t×/Ò/Ð0@ÑAÔAÀ(À7À(ÔKÑLÔLÐLà—8’8˜C‘=”=Ð r(   rÑ   rÒ   r/  r=   r’   r‘   )rM  )r½   r   rN  r3   r   r,   rÓ   )r9   r>   r?   r@   r   rA   r'   r¶   rB  rŽ   r�   r/   r°   r¼   r”   r•   s   @r&   r1  r1  ü  s  ø€ € € € € € ðð ð2 '€DÐ&Ð&Ð&Ñ&ð MOðð ð ð ð ð ð ð	5ð 	5ð 	5ð 	5ð%ð %ð %ð %ð"ð ð ð ðð ð ð ðJ
ð J
ð J
ð J
ðXð ð ð ð ð ð ð$(!ð (!ð (!ð (!ð (!ð (!ð (!ð (!r(   r1  z!dict[str | None, type[BaseCache]]ÚcachesFÚclsútype[BaseCache]Úclobberr×   r   r   c                ó~   — | j         }|s)|t          v r t          d|›dt          |         › �¦  «        ‚| t          |<   dS )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   rQ  rÂ   )rR  rT  r   s      r&   Úregister_cacherV  ã  sL   € ð Œ8€DØð W�t�v�~�~ÝÐU¨DÐUÐUÅvÈdÄ|ÐUÐUÑVÔVÐVØ…Fˆ4�L€L€Lr(   )F)rR  rS  rT  r×   r   r   )3Ú
__future__r   r  r®   Úloggingr¬   rX   r  r   Úcollections.abcr   Úconcurrent.futuresr   r   Ú	itertoolsr   Úoperatorr	   Útypingr
   r   r   r   r   r   rE   Útyping_extensionsr   r   r   Ú	getLoggerrr   r   r,   r   ÚlistÚMultiFetcherr   rD   r—   r¡   r§   rÕ   rá   rè   r  r1  rQ  rA   rV  ÚcrB   r(   r&   ú<module>rc     sÚ  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Màð Ø€K€K€Kà+Ð+Ð+Ð+Ð+Ð+àˆ	�#‰Œ€A€Aàˆ�‰Œ€Aà€GˆC�L„L€ð 
ˆÔ	Ð+Ñ	,Ô	,€à
�C˜�:˜uÐ$Ô
%€Ø˜˜c 3˜hœÐ(¨%Ð/Ô0€ð<ð <ð <ð <ð <ñ <ô <ð <ð~K&ð K&ð K&ð K&ð K&�	ñ K&ô K&ð K&ð\+%ð +%ð +%ð +%ð +%�Yñ +%ô +%ð +%ð\-,ð -,ð -,ð -,ð -,�iñ -,ô -,ð -,ð`}!ð }!ð }!ð }!ð }!�ñ }!ô }!ð }!ð@bð bð bð bð b�ñ bô bð bðJ%ð %ð %ð %ð %ˆyñ %ô %ð %ð0sð sð sð sð s˜	ñ sô sð sðl9ð 9ð 9ð 9ð 9�7˜1˜a˜4”=ñ 9ô 9ð 9ðx^!ð ^!ð ^!ð ^!ð ^!˜9ñ ^!ô ^!ð ^!ðF 	ˆ)ð-€ð ð ð ñ ðð ð ð ð ð( ØØØØØØØØð

ð ð €Að €N�1ÑÔÐÐðð r(   