L i%ddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z mZddlmZddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd l m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'e rddlm(Z(ejRdZ*Gdde%Z+GddeZ,Gdde,Z-Gdde-Z.GddZ/y)) annotationsN)rmtree) TYPE_CHECKINGAnyCallableClassVar) filesystem)DEFAULT_CALLBACK)compr) BaseCache MMapCache)BlocksizeMismatchError)create_cache_mapper) CacheMetadata)ChainedFileSystem)LocalFileSystem)AbstractBufferedFile) Transaction)infer_compression)AbstractCacheMapperz fsspec.cachedceZdZddZy)WriteCachedTransactioncf|jDcgc]}|j}}|jDcgc]}|j}}|r|jj |||jj d|j_d|j_d|_ycc}wcc}wNF)filespathfnfsputclear_intrans _transaction)selfcommitfrpathslpathss c/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fsspec/implementations/cached.pycompletezWriteCachedTransaction.complete s"&**-Q!&&-- $ +1!$$++  GGKK '  #.+s B)B.NT)__name__ __module__ __qualname__r)r(rrsr/rceZdZUdZdZded<dZ d dfd ZedZ dZ d Z d Z d Z d Zd ZdZddZdZ ddZdZddZdZddZfdZdZdZxZS)CachingFileSystemaSLocally caching filesystem, layer over any other FS This class implements chunk-wise local storage of remote files, for quick access after the initial download. The files are stored in a given directory with hashes of URLs for the filenames. If no directory is given, a temporary one is used, which should be cleaned up by the OS after the process ends. The files themselves are sparse (as implemented in :class:`~fsspec.caching.MMapCache`), so only the data which is accessed takes up space. Restrictions: - the block-size must be the same for each access of a given file, unless all blocks of the file have already been read - caching can only be applied to file-systems which produce files derived from fsspec.spec.AbstractBufferedFile ; LocalFileSystem is also allowed, for testing ) blockcachecachedzClassVar[str | tuple[str, ...]]protocol)foc  Ntd i| | | td|du|duz s td|dk(r9tj} | g} t j j| nt|tr|g} n|} tj| dd| _ |xsi_ |_|_|_| _d_| | td| | _nt)||nd _t|tr|n4t|j*tr |j*n|j*d _t/j_j3||nt5|fij_fd }|_y) a Parameters ---------- target_protocol: str (optional) Target filesystem protocol. Provide either this or ``fs``. cache_storage: str or list(str) Location to store files. If "TMP", this is a temporary directory, and will be cleaned up by the OS when this process ends (or later). If a list, each location will be tried in the order given, but only the last will be considered writable. cache_check: int Number of seconds between reload of cache metadata check_files: bool Whether to explicitly see if the UID of the remote file matches the stored one before using. Warning: some file systems such as HTTP cannot reliably give a unique hash of the contents of some path, so be sure to set this option to False. expiry_time: int The time in seconds after which a local copy is considered useless. Set to falsy to prevent expiry. The default is equivalent to one week. target_options: dict or None Passed to the instantiation of the FS, if fs is None. fs: filesystem instance The target filesystem to run against. Provide this or ``protocol``. same_names: bool (optional) By default, target URLs are hashed using a ``HashCacheMapper`` so that files from different backends with the same basename do not conflict. If this argument is ``true``, a ``BasenameCacheMapper`` is used instead. Other cache mapper options are available by using the ``cache_mapper`` keyword argument. Only one of this and ``cache_mapper`` should be specified. compression: str (optional) To decompress on download. Can be 'infer' (guess from the URL name), one of the entries in ``fsspec.compression.compr``, or None for no decompression. cache_mapper: AbstractCacheMapper (optional) The object use to map from original filenames to cached filenames. Only one of this and ``same_names`` should be specified. Nz9Please provide filesystem instance(fs) or target_protocolz@Both filesystems (fs) and target_protocol may not be both given.TMPTexist_okzMCannot specify both same_names and cache_mapper in CachingFileSystem.__init__Frcjjjtj|SN)r_strip_protocoltype)rr#s r(r=z3CachingFileSystem.__init__.._strip_protocols'77**4:+E+Ed+KL Lr/r.)super__init__ ValueErrortempfilemkdtempweakreffinalize_remove_tempdir isinstancestrosmakedirsstoragekwargs cache_check check_filesexpiry compression _cache_size_mapperrr4target_protocolr _metadata load_cacher rr=)r#rS cache_storagerMrN expiry_timetarget_optionsr same_namesrP cache_mapperrLtempdirrKr= __class__s` r(r@zCachingFileSystem.__init__Bsn "6" :/1K d $67R  E !&&(GiG   T4#7#7 A--(/' GBK$/ $* &&! &    !l&>-   #'DL.(4 %DL /3/ !+BKK!="++2;;q>  't||4 "J,V$++,V M*9r/c: t|y#t$rYywxYwr<)r Exception)r[s r(rFz!CachingFileSystem._remove_tempdirs   7O   s  cLtj|jddy)Nr8Tr9)rIrJrKr#s r(_mkcachezCachingFileSystem._mkcaches DLL$t4r/c|j0|jd}tdj|d|_|jS)zReturn size of cache in bytes. If more than one cache directory is in use, only the size of the last one (the writable cache directory) is returned. r8fileT)withdirs)rQrKr du)r# cache_dirs r( cache_sizezCachingFileSystem.cache_sizesG    # R(I)&144Y4ND r/c|jj|jtj|_y)z#Read set of stored blocks from fileN)rTloadratime last_cacher`s r(rUzCachingFileSystem.load_caches(  ))+r/c|j|jjtj|_d|_y)z#Save set of stored blocks from fileN)rarTsaverjrkrQr`s r( save_cachezCachingFileSystem.save_caches0  ))+r/c|j|jsytj|jz |jkD}t d|j D}|s|s|j yy)z0Reload caches if time elapsed or any disappearedNc3ZK|]#}tjj|%ywr<)rIrexists).0rKs r( z1CachingFileSystem._check_cache..sLGw/Ls)+)rarMrjrkallrKrU)r#timecond existconds r( _check_cachezCachingFileSystem._check_caches^  99;043C3CCLt||LL 9 OO %r/c||j|}|j|jj||S)z Is path in cache and still valid)r=rwrT check_filer#rs r( _check_filezCachingFileSystem._check_files5##D) ~~((t44r/cbt|jd|jd|_y)zRemove all files and metadata from the cache In the case of multiple cache locations, this clears only the last one, which is assumed to be the read/write one. r8N)rrKrUrQr`s r( clear_cachezCachingFileSystem.clear_caches' t||B  r/cV|s |j}|j|jj|\}}|D]7}tj j |s#t j|9|r(t|jd|jd|_ y)aRemove all expired files and metadata from the cache In the case of multiple cache locations, this clears only the last one, which is assumed to be the read/write one. Parameters ---------- expiry_time: int The time in seconds after which a local copy is considered useless. If not defined the default is equivalent to the attribute from the file caching instantiation. r8N) rOrwrT clear_expiredrIrrqremoverrKrUrQ)r#rW expired_fileswritable_cache_emptyrs r(clear_expired_cachez%CachingFileSystem.clear_expired_caches++K .2nn.J.J;.W+ + Bww~~b! "   4<<# $ OO r/c|j|}|jj|}|tj|d|_y)zRemove cached version of given file Deletes local copy of the given (remote) path. If it is found in a cache location which is not the last, it is assumed to be read-only, and raises PermissionError N)r=rTpop_filerIrrQ)r#rrs r(pop_from_cachez CachingFileSystem.pop_from_caches@##D) ^^ $ $T * > IIbMr/c jjjd|vr"jjf||||dSj}|rL|\}}|d|d} } | dur"tj dt ||Stj dnj} tjjjd| }t} | | tjjjd }jj!|tj d |j#d } j%jjf||||d | d | +j&|d <jj!|j(r6j(dk(r t+n j(} t-| dd|vr1|dj.k7r.t1d|ddj.dj.|d<fd} j(rdn| }t3j.j4j&|| |_j8fd_j;S)a!Wrap the target _open If the whole file exists in the cache, just open it locally and return that. Otherwise, open the file on the target FS, and make it have a mmap cache pointing to the location which we determine, in our cache. The ``blocks`` instance is shared, so as the mmap cache instance updates, so does the entry in our ``cached_files`` attribute. We monkey-patch this file, so that when it closes, we call ``close_and_update`` to save the state of the blocks. r)mode block_size autocommit cache_optionsrblocksTOpening local copy of %sz#Opening partially cached copy of %sr8originalrrrjuidz!Creating local sparse file for %ssizenone)rrrr cache_typerNinferrbr blocksizezDCached file must be reopened with same block size as original (old: z, new )c jjgt|z|Dcgc]}|d c}|Dcgc]}|d c}fiScc}wcc}w)Nr)r cat_rangeslen)rangesrrLrr#s r( _fetch_rangesz.CachingFileSystem._open.._fetch_ranges}s^%477%%V$%&!1&%&!1&  &&s A A ) multi_fetcherc(jSr<)close_and_update)closer%r#sr(z)CachingFileSystem._open..s$//59r/)r=r_openr{loggerdebugopenrRrIrjoinrKsetrjukeyrT update_filegetrarrPrr rrr _fetch_rangecacherrn)r#rrrrrrLdetailrhashrrcomprrrr%s`` ` @@r(rzCachingFileSystem._opens*##D)ww&&t, d? 477==%%+    !!$' JFB!$<)9&D~ 7>B~% LL> E<<%Ddll2.5BUF   ww||D) F NN & &tV 4 LL,rcatrheadinforpipetailrisdir__eq__rqisfileto_dictto_json__hash__r@racat_file _cat_filer open_many pipe_file __reduce__rgr get_mapperrU local_file read_blockrn _cat_rangesr{r} commit_manyrwrend_transaction__getattribute___paths_from_pathrstart_transaction_make_local_detailsrcXttj|i|Sr<)getattrr>__get__)rkwitemr#s r(rz4CachingFileSystem.__getattribute__..s0'NwtDz4'@'H'H'N((r/) __reduce_ex__) transaction>_cacher4transaction_typer\__dict__r__self__)AttributeErrorr>rrrobjectrrrinspect isfunctionisdatadescriptorhasattrrr?)r#rdrclsmr\s`` r(rz"CachingFileSystem.__getattribute__s: - - `  $ $ ? ":))11$7 7 = =4:t, , ; :   # #D* 5 UU4  19T7N ^r{{"{{4((r(CT"A""1%)A)A!)DAz*ajj.@yyS))H7+D1 1r/c||uryt|t|sy|j|jk(xr|j|jk(xr|j|jk(xr|j |j k(xrj|j |j k(xrO|j|jk(xr4|j|jk(xr|j|jk(S)zTest for equality.TF) rGr>rKrLrMrNrOrPrRrS)r#others r(rzCachingFileSystem.__eq__s 5=%d, LLEMM ) > u||+ >  E$5$55 >  E$5$55 > u||+  >   E$5$55  >   -  >$$(=(== r/ctt|jtt|jz t|j z t|j z t|jz t|jz t|jz t|jz S)zCalculate hash.) rtuplerKrHrLrMrNrOrPrRrSr`s r(rzCachingFileSystem.__hash__s t||$ %3t{{#$ %4##$ %4##$ %4;;  4##$  % 4<<  !4''( ) r/) Nr7 Fi: NNNNN)rYz bool | NonerZzAbstractCacheMapper | Noner<)rNTN)rrHrrreturnrHr*)r+r,r-__doc__r4__annotations___strip_tokenize_optionsr@ staticmethodrFrargrUrnrwr{r}rrrrrrrrrr __classcell__r\s@r(r1r1+s&1IH-H% "&37o9 o91o9b 5  &   5   <   qf%" "(Q2f "  r/r1c@eZdZdZdZdZdZdZdZdde fd Z d d Z y ) WholeFileCacheFileSystema Caches whole remote files on first access This class is intended as a layer over any other file system, and will make a local copy of each file accessed, so that all subsequent reads are local. This is similar to ``CachingFileSystem``, but without the block-wise functionality and so can work even when sparse files are not allowed. See its docstring for definition of the init arguments. The class still needs access to the remote store for listing files, and may refresh cached files. filecacheTc |Dcgc]}|j}}d|jvr|jnl|Dcgc]`}t|j|f|jt jj |jd|j|d|bc}S|jrt|Dcgc]}|j|}}t||D cgc] \}} | r | } }} t||D cgc]A\}} t jj |jd|j|C} }} t| |D cgc] \} } | r |  } } } | r|jj| | | Dcgc]D}||j|dtj|jj|dF}}t| |D]!\}}|j j#||#|j%d}t|| Dcgc]&\}}t'|r||n||j(c}}Scc}wcc}wcc}wcc} }wcc} }wcc} } wcc}wcc}}w)Nrr8rrTrc0t|tr|dS|S)Nr)rGrrs r( firstpartz5WholeFileCacheFileSystem.open_many..firstpartYs&r512a5 9r 9r/r)rrra LocalTempFilerrIrrKrRrPNotImplementedErrorr{ziprrjrrTrrnr)r# open_filesrLofpathsrspdetailsprdownpathdownfn0rdownfn newdetailrrfn0fn1s r(rz"WholeFileCacheFileSystem.open_many-sX#-.R.. *// ! MMO" GG$ww||DLL$4dll46HI        % %278B4##B'88"%eW"5?$!QQA??E7+ 1 GGLLb)4<<? ;  #&gw"7AQq"AA  GGKK& )%  !%,,t," IIK77<<-  I !$Hi 8 9 f**48 9 OO  :  1 S 33Cjoo F  _/ 9? B $ s=IA%I";I'$ I,/I,AI2 I8(I8A I>.+Jcp|jj|Dcgc]}|jc}|Dcgc]}|jc}|Dcgc]}|j c}|D]"} t j |j$d|_ ycc}wcc}wcc}w#t$rYGwxYwr<) rrrrrrIrnameFileNotFoundErrorrQ)r#rr%s r(rz$WholeFileCacheFileSystem.commit_manybs  :.aQTT.0LA0LM&'q' A  !&&!   /0L' %  s"BB B$1B)) B54B5cL|j|}tjj|jd|}||dt j |j j|d}|jj||tjd||S)Nr8TrCopying %s to local cache) rRrIrrrKrjrrrTrrr)r#rrrrs r(rz,WholeFileCacheFileSystem._make_local_detailsms||D! WW\\$,,r*D 1IIK77<<%   ""40 0$7 r/Fraisec p|j|||jd}g}g}g} i} |jD]t} |j| } | s4|j | } |j | |j | nt | tr| nd| f\} } | j | v|r,|jj|||j|jt|t|| D]>\} } t| d5}|j!| | <ddd|j#d@t |t$rt|dk(r |dur| |d} | S#t$r,}|dk(r|dk(r|| | <|j| Yd}~hd}~wwxYw#1swYxYw) Nmaxdepth) recursiverrrrrFr) expand_pathrcopyr{rappendrGrr^rrrnset_sizerrrreadrelative_updaterH)r#rron_errorcallbackrLrgetpaths storepathsfnsoutr rrer%s r(rzWholeFileCacheFileSystem.cat{s  I :0F!   A ))!,11!4BOOA&%%b)+5fe+D4QW.JFB 2 "  GGKK* - OO #e*%_ (EArb$ "1A "  $ $Q ' ( dC SZ1_e9KeAh-C % w&x'CF Q   " "s%A1E4F,4 F)=!F$$F),F5 c |j|}d|vru|j|}tjj |j d|}|j Dcic] \}}|dvr||}}}t||f||d|S|j|} | r\| \} }| d| d} } | dur:tjd|t||} | jd | _ | Std |d |j|}||d <|j!|j"r|j$j&|fi|5} t|d 5} t)| t*r0t-d| j.j0| j2| _|j"dk(r t5|n |j"}t7|| d} d}|r2t9| dd}| j;|}| j=||r2ddddddn|j$j?|||jA|j'||Scc}}w#1swYVxYw#1swY=xYw)Nrr8rrrrrrTrrz&Attempt to open partially cached file z as a wholly cached filerwbrrrrrP)!r=rRrIrrrKitemsrr{rrrrrrArrarPrrrGrr rfetcherrrr rrwriteget_filern)r#rrrLrrkvuser_specified_kwargsr_rr%f2rdatablocks r(rzWholeFileCacheFileSystem._opensf##D) d?<<%Ddll2.5B#LLN%AqII1% !% !tW$2WAVW W!!$' JFBt fX&6vA~ 7>TN#ZZ 3  E66%=DHHTN # # # GG  T2 & zz$%%i%D # # # #s+'I I$B,II$I! I$$I-Nr) r+r,r-rr4rrrrr rrr.r/r(rrs9 HJ3 j   "! +Z9&r/rceZdZdZdZdZeZfdZdZ dZ dZ dfd Z dd Z d Zdd Zdd Z dd Z ddZddZxZS)SimpleCacheFileSystemaCaches whole remote files on first access This class is intended as a layer over any other file system, and will make a local copy of each file accessed, so that all subsequent reads are local. This implementation only copies whole files, and does not keep any metadata about the download time or file details. It is therefore safer to use in multi-threaded/concurrent situations. This is the only of the caching filesystems that supports write: you will be given a real local open file, and upon close and commit, it will be uploaded to the target filesystem; the writability or the target URL is not checked until that time. simplecacheTc |j}dD]}d||< t|di||jD]9}tj j |r#t j|d;y)N)rMrWrNFTr9r.)rr?r@rKrIrrqrJ)r#rLrkeyrKr\s r(r@zSimpleCacheFileSystem.__init__sg [[]@ CBsG  2|| 4G77>>'* Gd3 4r/c|j|j|}|jD]E}tjj ||}tjj |sC|cSyr<)rwrRrKrIrrrq)r#rsharKrs r(r{z!SimpleCacheFileSystem._check_filesX ll4 || Ggs+Bww~~b!  r/cyr<r.r`s r(rnz SimpleCacheFileSystem.save_cache  r/cyr<r.r`s r(rUz SimpleCacheFileSystem.load_cache r@r/c |jr-|j|d5}|j|dddyt|||y#1swYyxYw)Nr*)r!rr.r?r)r#rvaluerLr%r\s r(rzSimpleCacheFileSystem.pipe_filesP ==4& !   G dE *  s A  Ac |j|}g} |jj|fddi|j}d}|j rK|j ddz}|jjD]}|j|k(r2|j||jxs|jddE|jj|sa|jjd|jdk(r<|j|j|jxs|jdddj|jj!dd|jddz} |j| ddd ||s||r|St#d |DS#t$r }|}Yd}~d}~wwxYw) NrT/rcrrr>rr directoryc3&K|] }|d yw)rNr.)rrr3s r(rsz+SimpleCacheFileSystem.ls..4s1Aai1s)r=rrrrr!rstriprrrrrtell startswithcountrsplitsorted) r#rrrLr exr'path1r%dnames r(rzSimpleCacheFileSystem.lss##D)  dggjj!%+df  B ==KK$s*E%%++ X66T>NN!%qvv/A6RVV&&u-vv||C(EKK,<<%&VVQVV5GqvvxQWX!$c):;QU[[=MPQ=Q)R Sq+'VW X >'H N1111/! B s-F88 GG  Gc |j|jr|jjDcgc]}|jk(s|}}|rT|dj r,t jj|djn|dj}|ddStfd|jjD}|rdddS|jjfi|Scc}w)NrrcrFc3ZK|]"}|jjdz$yw)rEN)rrK)rrr3rs r(rsz-SimpleCacheFileSystem.info..=s$RaAFF%%dSj1Rs(+rG) r=r!rrrrrIgetsizerrJanyrr)r#rrLr3r%rs ` r(rzSimpleCacheFileSystem.info6s##D) == ,,22EqaffnEAE34Q4;;rwwqtww/AaDIIK $dFCCR4;K;K;Q;QRRA $aEEtww||D+F++Fs C5 C5c t|tr$|j|j||fi|yt|tr<|j D](\}}|j|j||fi|*yt d)Nzpath must be str or dict)rGrHrr=dictr,rA)r#rrCrLr0r1s r(rzSimpleCacheFileSystem.pipeBs dC DNN4//5u G G d #  E1t33A6DVD E78 8r/cKtjd||j|}|j|}|j |}|sSt j j|jd|}|jj||fi|d{t|d5}|r|j||dn||jz }|j|cdddS7U#1swYyxYww)Nzasync cat_file %sr8r)rrr=rRr{rIrrrKr _get_filerseekrJr) r#rstartendrLr>rr%rs r(rzSimpleCacheFileSystem._cat_fileKs ($/##D)ll4    d #dll2.4B#$''##D"77 7 7 "d^ qu 2#.D66$<    8  s*BDC2D-;C4( D4C=9Dc*Ktjd|g}t}g} g} |D]} |j| } | u| |vrq|j | } t j j|jd| } | j| |j| | j| |j| | r&|jj| | |d{tj|||f||d|S7$w)Nzasync cat ranges %sr8)r!max_gapr!)rrrr{rRrIrrrKraddr_getrr)r#rstartsendsr_r!rLr'rsetdownloadr&r rr>s r(rz!SimpleCacheFileSystem._cat_ranges[s  *E2u A!!!$Bzatmll1oWW\\$,,r"2C8#  a MM"   '',,vx(,C C C+ ++ FD *1H HN   DsC*D,D-%Dc tjd||Dcgc]}|j|}}t||D cgc] \} }| dus |} } }t||D cgc] \} }| dus | }} }|jj | ||Dcgc]}|j|}}t j|||f||d|Scc}wcc}} wcc}} wcc}w)Nz cat ranges %sFr^)rrr{rrrrr) r#rrbrcr_r!rLr r'lr&s r(rz SimpleCacheFileSystem.cat_rangesss  _e,/45!$""1%55 #FE 2A1a5j!AA #FE 2A1a5j!AA  FF#.34!!!$44+ ++ 64 )08 GM  6AA4s#C CC' C 4C C&c |j|}|j|}d|vrptjj |j d|}|j Dcic] \}}|dvr||}}}t||f||j |d|S|j|}|r t||Stjj |j d|}tjd|||d<|jd|_|jr|j j"|fi|5} t|d5} t%| t&r0t)d| j*j,| j.| _|jd k(r t1|n |j} t3| | d } d } | r2t5| d d} | j7| } | j9| | r2ddddddn|j j;|||j#||Scc}}w#1swYFxYw#1swY-xYw)Nrr8r))rrrrrr*rrrrTrr+)r=rRrIrrrKr,rr!r{rrrrarQrPrrrGrr rr-rrr rrr.r/)r#rrrLr>rr0r1r2r%r4rr5r6s r(rzSimpleCacheFileSystem._opens4##D)ll4  d?dll2.4B#LLN%AqII1% !% !#}},  (    d # D> ! WW\\$,,r*C 0 0$7v    t.v. #!T"d^ #ra!56'177??AFFCAG''72&d+)) $K-#A{I>E66%=DHHTN # # # GG  T2 &zz$%%S%0 # # # #s+'H7> I  B,H=8I =I I  Ir<r*)NN)Nrr7)r+r,r-rr4rrrr@r{rnrUrrrrrrrrrrs@r(r9r9sc HJ-4  +2@ ,9 ";C 2;C  /&r/r9cZeZdZdZd dZdZdZdZdZdZ dZ e d Z dd Z d Zy )rz8A temporary local file, which will be uploaded on commitc ||_t|||_||_|r|jj |||_d|_||_d|_||_ ||_ yr) rrfhrrZrrrrrrL)r#rrrrrrZrLs r(r@zLocalTempFile.__init__sZr4.  GGLL    $ r/ct|j|j|jd|j|j ffS)Nzr+b)rrrrrrJr`s r(rzLocalTempFile.__reduce__s7  WWdii%$))+ N  r/c|jSr<)rkr`s r( __enter__zLocalTempFile.__enter__s wwr/c$|jyr<)r)r#exc_typeexc_valexc_tbs r(__exit__zLocalTempFile.__exit__s  r/c|jry|jjd|_|jr|j yy)NT)rrkrrr$r`s r(rzLocalTempFile.closes5 ;;    ?? KKM r/cv|jjtj|jyr<)rkrrIrrr`s r(discardzLocalTempFile.discards   $''r/c|jj|jg|jgfi|jyr<)rrrrrLr`s r(r$zLocalTempFile.commits-  TWWI {:dkk:r/c|jSr<rr`s r(rzLocalTempFile.names wwr/c d|jS)NzLocalTempFile: )rr`s r(__repr__zLocalTempFile.__repr__s  ,,r/c.t|j|Sr<)rrk)r#rs r( __getattr__zLocalTempFile.__getattr__stww%%r/N)r*Tr)rrH)r+r,r-rr@rrnrsrrvr$propertyrrzr|r.r/r(rrsFB  ; -&r/r)0 __future__rrloggingrIrBrjrDshutilrtypingrrrrfsspecr fsspec.callbacksr fsspec.compressionr fsspec.corer r fsspec.exceptionsr#fsspec.implementations.cache_mapperr%fsspec.implementations.cache_metadatarfsspec.implementations.chainedrfsspec.implementations.localr fsspec.specrfsspec.transactionr fsspec.utilsrr getLoggerrrr1rr9rr.r/r(rs"  99-$,4C?<8,**G   ? + [ n )n bE&0E&PK&4K&\8&8&r/