Ë
    -Œ:j¥ì  ã            
       ó4  — U d dl Z d dlZd dl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 d dlmZ d dlmZ d d	lmZmZ d d
lmZmZmZ d dlmZmZ d dlZd dlZd dlmZm Z m!Z! d dl"m#Z# d dl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC e G d„ d«      «       ZDe G d„ deD«      «       ZEe G d„ deD«      «       ZF eGej�                  «      ZIeeJd<    G d„ deI«      ZK G d „ d!ej�                  eK¬"«      ZL G d#„ d$ejš                  jœ                  «      ZO G d%„ d&ejš                  jœ                  «      ZPd'eQd(eQfd)„ZRd*eQd(eQfd+„ZSd,eQd-eTdz  d(efd.„ZUd/eLd,eQd0eQd1eVd2eQf
d3„ZWd4„ ZX eL«       ZYy)5é    N)Údeque)ÚIterableÚIterator)Ú	ExitStack)Údeepcopy)Ú	dataclassÚfield)Údatetime)Úchain)ÚPathÚPurePosixPath)ÚAnyÚNoReturnÚUnion)ÚquoteÚunquote)Ú_DEFAULT_CALLBACKÚNoOpCallbackÚTqdmCallback)Úapply_config)Ú
isfilelikeé   )Ú	constants)ÚCommitOperationCopyÚCommitOperationDelete)ÚBucketNotFoundErrorÚEntryNotFoundErrorÚHfHubHTTPErrorÚRepositoryNotFoundErrorÚRevisionNotFoundError)Ú
hf_hub_urlÚhttp_get)ÚSPECIAL_REFS_REVISION_REGEXÚ
BucketFileÚBucketFolderÚHfApiÚLastCommitInfoÚRepoFileÚ
RepoFolder)ÚHFValidationErrorÚhf_raise_for_statusÚhttp_backoffÚhttp_stream_backoffÚparse_hf_uri)Úmd5c                   ó2   — e Zd ZU dZeed<   eed<   defd„Zy)ÚHfFileSystemResolvedPathz_Top level Data structure containing information about a resolved Hugging Face file system path.ÚrootÚpathÚreturnc                 óV   — | j                   › d| j                  › �j                  d«      S )Nú/)r2   r3   Úrstrip©Úselfs    ú`/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/huggingface_hub/hf_file_system.pyÚ	unresolvez"HfFileSystemResolvedPath.unresolve+   s&   € Ø—)‘)�˜A˜dŸi™i˜[Ð)×0Ñ0°Ó5Ð5ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r;   © r<   r:   r1   r1   $   s   … áià
ƒIØ
ƒIð6˜3ô 6r<   r1   c                   óœ   — e Zd ZU dZeed<   eed<   eed<   eed<    ed¬«      Zeed<    ed¬«      Zeed	<    ed
d¬«      Z	ed
z  ed<   d„ Z
y
)Ú"HfFileSystemResolvedRepositoryPathzLData structure containing information about a resolved path in a repository.Ú	repo_typeÚrepo_idÚrevisionÚpath_in_repoF©Úinitr2   r3   N)ÚdefaultÚreprÚ_raw_revisionc                 ób  — t         j                  j                  | j                  d«      | j                  z   }| j
                  r|› d| j
                  › �| _        nD| j                  t         j                  k7  r |› dt        | j                  «      › �| _        n|| _        | j                  | _        y )NÚ ú@)r   ÚREPO_TYPES_URL_PREFIXESÚgetrF   rG   rN   r2   rH   ÚDEFAULT_REVISIONÚsafe_revisionrI   r3   )r9   Ú	repo_paths     r:   Ú__post_init__z0HfFileSystemResolvedRepositoryPath.__post_init__=   sŽ   € Ü×5Ñ5×9Ñ9¸$¿.¹.È"ÓMÐPT×P\ÑP\Ñ\ˆ	Ø×ÒØ$˜+ Q t×'9Ñ'9Ð&:Ð;ˆD�IØ�]‰]œi×8Ñ8Ò8Ø$˜+ Q¤}°T·]±]Ó'CÐ&DÐEˆD�Ià!ˆDŒIØ×%Ñ%ˆ�	r<   )r=   r>   r?   r@   rA   rB   r	   r2   r3   rN   rW   rC   r<   r:   rE   rE   /   sT   … áVàƒNØƒLØƒMØÓÙ˜5Ô!€Dˆ#Ó!Ù˜5Ô!€Dˆ#Ó!ñ !&¨d¸Ô ?€M�3˜‘:Ó?ó&r<   rE   c                   ó>   — e Zd ZU dZeed<    ed¬«      Zeed<   d„ Zy)ÚHfFileSystemResolvedBucketPathzHData structure containing information about a resolved path in a bucket.Ú	bucket_idFrJ   r2   c                 ó,   — d| j                   z   | _        y )Nzbuckets/)rZ   r2   r8   s    r:   rW   z,HfFileSystemResolvedBucketPath.__post_init__O   s   € Ø §¡Ñ/ˆ�	r<   N)	r=   r>   r?   r@   rA   rB   r	   r2   rW   rC   r<   r:   rY   rY   H   s   … áRàƒNÙ˜5Ô!€Dˆ#Ó!ó0r<   rY   Ú_cached_basec                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú_Cachedaò  
    Metaclass for caching HfFileSystem instances according to the args.

    This creates an additional reference to the filesystem, which prevents the
    filesystem from being garbage collected when all *user* references go away.
    A call to the :meth:`AbstractFileSystem.clear_instance_cache` must *also*
    be made for a filesystem instance to be garbage collected.

    This is a slightly modified version of `fsspec.spec._Cached` to improve it.
    In particular in `_tokenize` the pid isn't taken into account for the
    `fs_token` used to identify cached instances. The `fs_token` logic is also
    robust to defaults values and the order of the args. Finally new instances
    reuse the states from sister instances in the main thread.
    c                 ó2   •— t        ‰| �  |i |¤Ž i | _        y ©N)ÚsuperÚ__init__Ú_cache)ÚclsÚargsÚkwargsÚ	__class__s      €r:   rb   z_Cached.__init__g   s   ø€ ä‰Ñ˜$Ð) &Ò)ð ˆ�
r<   c                 ó¾  — t        | |«      }|j                  dd«      } | j                  | t        j                  «       g|¢­i |¤Ž} | j                  | t        j
                  «       j                  g|¢­i |¤Ž}|s0| j                  r$|| j                  v r|| _	        | j                  |   S t        j                  | g|¢­i |¤Ž}|s\| j                  rP|| j                  v rB| j                  |   j                  «       }|j                  «       D ]  \  }}	t        |||	«       Œ ||_        ||_        ||_        | j                  r|s|| _	        || j                  |<   |S )NÚskip_instance_cacheF)r   ÚpopÚ	_tokenizeÚ	threadingÚ	get_identÚmain_threadÚidentÚcachablerc   Ú_latestÚtypeÚ__call__Ú_get_instance_stateÚitemsÚsetattrÚ
_fs_token_Ústorage_argsÚstorage_options)
rd   re   rf   ÚskipÚfs_tokenÚfs_token_main_threadÚobjÚinstance_stateÚattrÚstate_values
             r:   rs   z_Cached.__call__o   sH  € ô ˜c 6Ó*ˆØ�z‰zÐ/°Ó7ˆØ �3—=‘= ¤i×&9Ñ&9Ó&;ÐM¸dÒMÀfÑMˆØ,˜sŸ}™}¨S´)×2GÑ2GÓ2I×2OÑ2OÐaÐRVÒaÐZ`ÑaÐÙ˜Ÿš¨°S·Z±ZÑ)?à"ˆCŒKØ—:‘:˜hÑ'Ð'ô —-‘- Ð5 dÒ5¨fÑ5ˆCÙ˜CŸLšLÐ-AÀSÇZÁZÑ-Oà!$§¡Ð,@Ñ!A×!UÑ!UÓ!W�Ø)7×)=Ñ)=Ó)?ò 4Ñ%�D˜+Ü˜C  {Õ3ð4à%ˆCŒNØ#ˆCÔØ"(ˆCÔØ�|Š|¡DØ&�”Ø'*�—
‘
˜8Ñ$ØˆJr<   )r=   r>   r?   r@   rb   rs   Ú__classcell__©rg   s   @r:   r^   r^   W   s   ø„ ñôör<   r^   c                   óŽ  ‡ — e Zd ZdZdZdZdddddœdedz  deez  dz  dedz  d	edz  fˆ fd
„Z	e
dedefd„«       Zdedededz  deeedz  f   fd„Zdedeeedz  f   fd„Z	 d6dededz  deez  fd„Zd6dedz  ddfd„Z	 	 	 d7dedededz  dedz  ded   f
d„Zd6dededz  ddfd„Z	 	 	 d8dedededz  dedz  ddf
d„Z	 d9dededededz  deeeeef   z     f
d „Z	 	 	 	 	 d:dededededz  d	edz  dedz  fd!„Zded"ededeeez     fd#„Z dede!eeee   ee   f      fˆ fd$„Z"d6dededz  dee   fˆ fd%„Z#	 	 	 	 	 d;dededz  d&ededededz  dee   eeeeef   f   z  fd'„Z$d6d(ed)ededz  ddfd*„Z%dede&fd+„Z'd<dedededz  deeef   fd,„Z(d-„ Z)d.„ Z*d/„ Z+dedefd0„Z,e-dfd=ˆ fd1„Z.e/d2„ «       Z0d3„ Z1d4„ Z2d5„ Z3ˆ xZ4S )>ÚHfFileSystemaz
  
    Access a remote Hugging Face Hub repository as if were a local file system.

    > [!WARNING]
    > [`HfFileSystem`] provides fsspec compatibility, which is useful for libraries that require it (e.g., reading
    >     Hugging Face datasets directly with `pandas`). However, it introduces additional overhead due to this compatibility
    >     layer. For better performance and reliability, it's recommended to use `HfApi` methods when possible.

    The file system supports paths for the `hf://` protocol, which follows those URL schemes:

    * Models, Datasets and Spaces repositories:

        ```
        hf://<repo-id>[@<revision>]/<path/in/repo>
        hf://datasets/<repo-id>[@<revision>]/<path/in/repo>
        hf://spaces/<repo-id>[@<revision>]/<path/in/repo>
        ```

    * Buckets (generic storage):

        ```
        hf://buckets/<bucket-id>/<path/in/bucket>
        ```

    Note: when using the [`HfFileSystem`] directly, passing the `hf://` protocol prefix is optional in paths.

    Args:
        endpoint (`str`, *optional*):
                Endpoint of the Hub. Defaults to <https://huggingface.co>.
        token (`bool` or `str`, *optional*):
            A valid user access token (string). Defaults to the locally saved
            token, which is the recommended method for authentication (see
            https://huggingface.co/docs/huggingface_hub/quick-start#authentication).
            To disable authentication, pass `False`.
        block_size (`int`, *optional*):
            Block size for reading and writing files.
        expand_info (`bool`, *optional*):
            Whether to expand the information of the files.
        **storage_options (`dict`, *optional*):
            Additional options for the filesystem. See [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.__init__).

    Usage:

    ```python
    >>> from huggingface_hub import hffs

    >>> # List files
    >>> hffs.glob("my-username/my-model/*.bin")
    ['my-username/my-model/pytorch_model.bin']
    >>> hffs.ls("datasets/my-username/my-dataset", detail=False)
    ['datasets/my-username/my-dataset/.gitattributes', 'datasets/my-username/my-dataset/README.md', 'datasets/my-username/my-dataset/data.json']

    >>> # Read/write files
    >>> with hffs.open("my-username/my-model/pytorch_model.bin") as f:
    ...     data = f.read()
    >>> with hffs.open("my-username/my-model/pytorch_model.bin", "wb") as f:
    ...     f.write(data)
    ```

    Specify a token for authentication:
    ```python
    >>> from huggingface_hub import HfFileSystem
    >>> hffs = HfFileSystem(token=token)
    ```
    rP   ÚhfN)ÚendpointÚtokenÚ
block_sizeÚexpand_infor†   r‡   rˆ   r‰   c                óÎ   •— t        ‰| �  |i |¤Ž |xs t        j                  | _        || _        t        ||¬«      | _        || _        || _	        i | _
        i | _        i | _        y )N)r†   r‡   )ra   rb   r   ÚENDPOINTr†   r‡   r&   Ú_apirˆ   r‰   Ú_repo_and_revision_exists_cacheÚ_bucket_exists_cacheÚdircache)r9   r†   r‡   rˆ   r‰   re   ry   rg   s          €r:   rb   zHfFileSystem.__init__Ò   sj   ø€ ô 	‰Ñ˜$Ð2 /Ò2Ø Ò6¤I×$6Ñ$6ˆŒØˆŒ
Ü 8°5Ô9ˆŒ	Ø$ˆŒØ&ˆÔð rtˆÔ,àNPˆÔ!ð :<ˆ�r<   Úthreading_identr4   c                 ó(  — |j                  d«      xs t        j                  |d<   |j                  d«      |d<   t        |«      D �ci c]  }|||   “Œ
 }}| |||f}t	        t        |«      j                  «       «      }|j                  «       S c c}w )zDeterministic token for cachingr†   r‡   )rS   r   r‹   Úsortedr/   rA   ÚencodeÚ	hexdigest)rd   r�   re   rf   ÚkeyÚtokenize_argsÚhs          r:   rk   zHfFileSystem._tokenizeë   s‹   € ð $ŸZ™Z¨
Ó3ÒI´y×7IÑ7IˆˆzÑØ Ÿ*™* WÓ-ˆˆw‰Ü.4°V«nÖ= s�#�v˜c‘{Ñ"Ð=ˆÐ=à˜o¨t°VÐ<ˆÜ”�MÓ"×)Ñ)Ó+Ó,ˆØ�{‰{‹}Ðùò	 >s   ÁBrF   rG   rH   c                 óâ  — |||f| j                   vrR	 | j                  j                  |||t        j                  ¬«       d| j                   |||f<   d| j                   ||d f<   | j                   |||f   S # t
        t        f$ r2}d|f| j                   |||f<   d|f| j                   ||d f<   Y d }~ŒNd }~wt        $ r0}d|f| j                   |||f<   d| j                   ||d f<   Y d }~Œ…d }~ww xY w)N)rH   rF   Útimeout©TNF)r�   rŒ   Ú	repo_infor   ÚHF_HUB_ETAG_TIMEOUTr   r*   r    )r9   rF   rG   rH   Úes        r:   Ú_repo_and_revision_existz%HfFileSystem._repo_and_revision_exist÷   s!  € ð �w Ð)°×1UÑ1UÑUð^Ø—	‘	×#Ñ#Ø h¸)ÌY×MjÑMjð $ô ð Xb�×4Ñ4°iÀÈ(Ð5SÑTØS]�×4Ñ4°iÀÈ$Ð5OÑPØ×3Ñ3°YÀÈÐ4RÑSÐSøô ,Ô->Ð?ò \ØW\Ð^_ÐW_�×4Ñ4°iÀÈ(Ð5SÑTØSXÐZ[ÐS[�×4Ñ4°iÀÈ$Ð5OÖPûÜ(ò ^ØW\Ð^_ÐW_�×4Ñ4°iÀÈ(Ð5SÑTØS]�×4Ñ4°iÀÈ$Ð5OÖPûð^ús#   “-A6 Á6C.Â(B2Â2C.Â>&C)Ã)C.rZ   c                 óà   — || j                   vr+	 | j                  j                  |«       d| j                   |<   | j                   |   S # t        $ r}d|f| j                   |<   Y d }~Œ.d }~ww xY w)Nrš   F)rŽ   rŒ   Úbucket_infor   )r9   rZ   r�   s      r:   Ú_bucket_existszHfFileSystem._bucket_exists
  st   € Ø˜D×5Ñ5Ñ5ðBØ—	‘	×%Ñ% iÔ0ð 8B�×)Ñ)¨)Ñ4Ø×(Ñ(¨Ñ3Ð3øô	 'ò @Ø7<¸a°x�×)Ñ)¨)Ö4ûð@ús   �A	 Á		A-ÁA(Á(A-r3   c                 ó˜  — | j                  |«      }|st        d«      ‚|j                  d«      dk(  rt        d|› d�«      ‚t	        t
        j                  › |› �«      }|j                  rM| j                  |j                  «      \  }}|st        ||«       t        |j                  |j                  ¬«      S |�ò|j                  �æ|j                  |k7  r×|j                  d«      d   t
        j                  v r|j                  dd«      d   n|}|j                  d	d«      \  }}d|v r|j                  dd«      n|d
f\  }	}
t!        |	«      }||k7  rt        d|› d|› d�«      ‚| j#                  |j$                  ||«      \  }}|st        ||«       t'        |j$                  |||
|	¬«      S |j                  �|€|j                  }| j#                  |j$                  |j                  |«      \  }}|st        ||«       d}d	|v r†|j                  �z|j                  d«      d   t
        j                  v r|j                  dd«      d   n|}|j                  d	d«      d   }|j                  r|dt)        |j                  «      dz     n|}|�|nt
        j*                  }t'        |j$                  |j                  ||j                  |¬«      S )a€  
        Resolve a Hugging Face file system path into its components.

        Args:
            path (`str`):
                Path to resolve.
            revision (`str`, *optional*):
                The revision of the repo to resolve. Defaults to the revision specified in the path.

        Returns:
            [`HfFileSystemResolvedPath`]: Resolved path information containing `repo_type`, `repo_id`, `revision` and `path_in_repo`.

        Raises:
            `ValueError`:
                If path contains conflicting revision information.
            `NotImplementedError`:
                If trying to list repositories.
        z<Access to buckets and repositories lists is not implemented.r6   r   z-Repository id must be 'namespace/name', got 'z<'. Single-segment ids (e.g. 'gpt2') are no longer supported.)rZ   r3   Nr   rQ   rP   zRevision specified in path ("z ") and in `revision` argument ("z") are not the same.)rN   )Ú_strip_protocolÚNotImplementedErrorÚcountÚ
ValueErrorr.   r   ÚHF_PROTOCOLÚ	is_bucketr¡   ÚidÚ_raise_file_not_foundrY   rI   rH   ÚsplitÚHF_URI_TYPE_PREFIXESr   rž   rr   rE   ÚlenrT   )r9   r3   rH   ÚparsedÚbucket_existsÚerrÚpath_without_typerG   Úafter_atÚrevision_in_pathrI   Úrevision_in_path_decodedÚrepo_and_revision_existÚraw_revisionÚraw_after_ats                  r:   Úresolve_pathzHfFileSystem.resolve_path  sä  € ð* ×#Ñ# DÓ)ˆÙÜ%Ð&dÓeÐeØ�:‰:�c‹?˜aÒÜØ?À¸vð  FBð  Cóð ô ¤×!6Ñ!6Ð 7¸°vÐ>Ó?ˆð ×ÒØ!%×!4Ñ!4°V·Y±YÓ!?ÑˆM˜3Ù Ü% d¨CÔ0Ü1¸F¿I¹IÈF×L_ÑL_Ô`Ð`ð Ð F§O¡OÐ$?ÀFÇOÁOÐW_ÒD_ð
 :>¿¹ÀC»ÈÑ9KÌy×OmÑOmÑ9m §
¡
¨3°Ó 2°1Ò 5ÐswÐØ 1× 7Ñ 7¸¸QÓ ?ÑˆG�XØGJÈhÁ¨X¯^©^¸CÀÔ-CÐ]eÐgiÐ\jÑ*Ð˜lÜ'.Ð/?Ó'@Ð$Ø'¨8Ò3Ü Ø3Ð4LÐ3MÐMmÐnvÐmwð  xLð  Móð ð ,0×+HÑ+HÈÏÉÐV]Ð_gÓ+hÑ(Ð# SÙ*Ü% d¨CÔ0Ü5Ø—‘˜W h°ÐL\ôð ð �?‰?Ð&¨8Ð+;Ø—‘ˆHà'+×'DÑ'DÀVÇ[Á[ÐRX×R[ÑR[Ð]eÓ'fÑ$Ð Ù&Ü! $¨Ô,ð $(ˆØ�$‰;˜6Ÿ?™?Ð6Ø9=¿¹ÀC»ÈÑ9KÌy×OmÑOmÑ9m §
¡
¨3°Ó 2°1Ò 5ÐswÐØ,×2Ñ2°3¸Ó:¸1Ñ=ˆLØNT×NaÒNa˜<Ð(I¬C°×0CÑ0CÓ,DÀqÑ,HÐ*IÑJÐgsˆLà'Ð3‘8¼×9SÑ9SˆÜ1Ø�K‰K˜Ÿ™ H¨f×.AÑ.AÐQ]ô
ð 	
r<   c                 ó€  — |s5| j                   j                  «        | j                  j                  «        y| j                  |«      }|j	                  «       }|r0| j                   j                  |d«       | j                  |«      }|rŒ0|j                  s¨t        |t        «      rq| j                  j                  |j                  |j                  dfd«       | j                  j                  |j                  |j                  |j                  fd«       y| j                  j                  |j                  d«       yy)ac  
        Clear the cache for a given path.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.invalidate_cache).

        Args:
            path (`str`, *optional*):
                Path to clear from cache. If not provided, clear the entire cache.

        N)r�   Úclearr�   r¸   r;   rj   Ú_parentr3   Ú
isinstancerE   rF   rG   rH   rŽ   rZ   )r9   r3   Úresolved_paths      r:   Úinvalidate_cachezHfFileSystem.invalidate_cachec  s  € ñ Ø�M‰M×ÑÔ!Ø×0Ñ0×6Ñ6Õ8à ×-Ñ-¨dÓ3ˆMØ ×*Ñ*Ó,ˆDÙØ—‘×!Ñ! $¨Ô-Ø—|‘| DÓ)�ò ð
 !×%Ò%Ü˜mÔ-OÔPØ×8Ñ8×<Ñ<Ø&×0Ñ0°-×2GÑ2GÈÐNÐPTôð ×8Ñ8×<Ñ<Ø&×0Ñ0°-×2GÑ2GÈ×I_ÑI_Ð`Ðbfõð ×-Ñ-×1Ñ1°-×2IÑ2IÈ4ÕPð &r<   Úmode)ÚHfFileSystemFileÚHfFileSystemStreamFilec                 ó˜   — |�|n| j                   }|�||d<   d|v rt        d«      ‚|dk(  rt        | |f||dœ|¤ŽS t        | |f||dœ|¤ŽS )Nrˆ   Úaz/Appending to remote files is not yet supported.r   )r¿   rH   )rˆ   r¤   rÁ   rÀ   )r9   r3   r¿   rˆ   rH   rf   s         r:   Ú_openzHfFileSystem._open„  sr   € ð $.Ð#9‘Z¸t¿¹ˆ
ØÐ!Ø#-ˆF�<Ñ Ø�$‰;Ü%Ð&WÓXÐXØ˜Š?Ü)¨$°Ð]¸4È(Ñ]ÐV\Ñ]Ð]ä# D¨$ÐW°TÀHÑWÐPVÑWÐWr<   c                 óÔ  — | j                  ||¬«      }t        |t        «      r3| j                  j	                  |j
                  |j                  g¬«       nr| j                  j                  |j                  |j                  | j                  |j                  |j                  |j                  d«      |j                  d«      ¬«       | j                  |j                  «       ¬«       y )N©rH   ©ÚdeleteÚcommit_messageÚcommit_description)rI   rG   r‡   rF   rH   rÉ   rÊ   ©r3   )r¸   r¼   rY   rŒ   Úbatch_bucket_filesrZ   r3   Údelete_filerI   rG   r‡   rF   rH   rS   r¾   r;   )r9   r3   rH   rf   r½   s        r:   Ú_rmzHfFileSystem._rm–  sÀ   € Ø×)Ñ)¨$¸Ð)ÓBˆÜ�mÔ%CÔDØ�I‰I×(Ñ(¨×)@Ñ)@È-×J\ÑJ\ÐI]Ð(Õ^à�I‰I×!Ñ!Ø*×7Ñ7Ø%×-Ñ-Ø—j‘jØ'×1Ñ1Ø&×/Ñ/Ø%Ÿz™zÐ*:Ó;Ø#)§:¡:Ð.BÓ#Cð "ô ð 	×Ñ =×#:Ñ#:Ó#<ÐÕ=r<   Ú	recursiveÚmaxdepthc                 óF  — | j                  ||¬«      }| j                  ||||¬«      }t        |t        «      rb|D �cg c]/  }| j	                  |«      rŒ| j                  |«      j
                  ‘Œ1 }}| j                  j                  |j                  |¬«       nØ|D �cg c]/  }| j	                  |«      rŒ| j                  |«      j
                  ‘Œ1 }	}|	D �
cg c]  }
t        |
¬«      ‘Œ }}
d› d�}||rdndz  }||�d
|› d�ndz  }| j                  j                  |j                  |j                  | j                  ||j                  |j                  d|«      |j                  d«      ¬«       | j!                  |j#                  «       ¬«       y	c c}w c c}w c c}
w )aÔ  
        Delete files from a repository.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.rm).

        > [!WARNING]
        > Note: When possible, use `HfApi.delete_file()` for better performance.

        Args:
            path (`str`):
                Path to delete.
            recursive (`bool`, *optional*):
                If True, delete directory and all its contents. Defaults to False.
            maxdepth (`int`, *optional*):
                Maximum number of subdirectories to visit when deleting recursively.
            revision (`str`, *optional*):
                The git revision to delete from.

        rÆ   )rÏ   rÐ   rH   rÇ   )rI   zDelete ú zrecursively rP   Nzup to depth rÉ   rÊ   )rG   rF   r‡   Ú
operationsrH   rÉ   rÊ   rË   )r¸   Úexpand_pathr¼   rY   Úisdirr3   rŒ   rÌ   rZ   r   Úcreate_commitrG   rF   r‡   rH   rS   r¾   r;   )r9   r3   rÏ   rÐ   rH   rf   r½   ÚpathsrÈ   Úpaths_in_reporI   rÓ   rÉ   s                r:   ÚrmzHfFileSystem.rm¦  s‘  € ð6 ×)Ñ)¨$¸Ð)ÓBˆØ× Ñ  °ÀXÐX`Ð ÓaˆÜ�mÔ%CÔDØ?DÖ]°tÈDÏJÉJÐW[ÕL\�d×'Ñ'¨Ó-×2Ó2Ð]ˆFÐ]Ø�I‰I×(Ñ(¨×)@Ñ)@ÈÐ(ÕPàFKÖd¸dÐSW×S]ÑS]Ð^bÕSc˜T×.Ñ.¨tÓ4×9Ó9ÐdˆMÐdØ_lÖmÈ|Ô/¸\ÖJÐmˆJÐmØ& t f¨AÐ.ˆNØ±	™n¸rÑAˆNØ¸HÐ<P ¨X¨J°aÑ8ÐVXÑXˆNà�I‰I×#Ñ#Ø%×-Ñ-Ø'×1Ñ1Ø—j‘jØ%Ø&×/Ñ/Ø%Ÿz™zÐ*:¸NÓKØ#)§:¡:Ð.BÓ#Cð $ô ð 	×Ñ =×#:Ñ#:Ó#<ÐÕ=ùò% ^ùò eùÚms   ½FÁFÂFÂ6FÃFÚdetailÚrefreshc                 óÜ  — | j                  ||¬«      }|j                  «       }	  | j                  |f||dœ|¤Ž}|r|S |D �cg c]  }|d   ‘Œ	 c}S # t        $ r‹ |j                  st        |d«       	  | j                  | j                  |«      f||dœ|¤Ž}n# t        $ r g }Y nw xY w|D �cg c]  }|d   |k(  sŒ|‘Œ nc c}w }}t        |«      dk(  rt        |d«       Y Œªw xY wc c}w )a×  
        List the contents of a directory.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.ls).

        > [!WARNING]
        > Note: When possible, use `HfApi.list_repo_tree()` for better performance.

        Args:
            path (`str`):
                Path to the directory.
            detail (`bool`, *optional*):
                If True, returns a list of dictionaries containing file information. If False,
                returns a list of file paths. Defaults to True.
            refresh (`bool`, *optional*):
                If True, bypass the cache and fetch the latest data. Defaults to False.
            revision (`str`, *optional*):
                The git revision to list from.

        Returns:
            `list[Union[str, dict[str, Any]]]`: List of file paths (if detail=False) or list of file information
            dictionaries (if detail=True).
        rÆ   )rÛ   rH   NÚnamer   )r¸   r;   Ú_ls_treer   r3   rª   r»   r­   )	r9   r3   rÚ   rÛ   rH   rf   r½   ÚoutÚos	            r:   ÚlszHfFileSystem.lsØ  s  € ð4 ×)Ñ)¨$¸Ð)ÓBˆØ×&Ñ&Ó(ˆð	2Ø�$—-‘- ÐS¨gÀÑSÈFÑSˆCñ ˆsÐ:°cÖ":° 1 V£9Ò":Ð:øô "ò 
	2à ×%Ò%Ü% d¨DÔ1ðØ#�d—m‘m D§L¡L°Ó$6ÐeÀÐRZÑeÐ^dÑe‘øÜ%ò Ø’ðúà!Ö7˜ Q v¡Y°$Ó%6’1Ñ7ùÒ7ˆCÐ7Ü�3‹x˜1Š}Ü% d¨DÔ1ùð
	2üò #;sM   ¥A ÁC)Á!C&Á4%BÂC&ÂB(Â%C&Â'B(Â(C&Â/CÂ=CÃ"C&Ã%C&c           
      óœ	  — |�|n| j                   �| j                   nd}| j                  ||¬«      }|j                  «       }|j                  }|r|nd}g }	|| j                  v �rh|�se| j                  |   }
|	j                  |
«       g }|rºd}t        |
D �cg c]  }|d   dk(  sŒ||f‘Œ c}«      }|r’|j                  «       \  }}|�||k  ru|d   | j                  vr|j                  |d   «       nO| j                  |d      }
|	j                  |
«       |j                  |
D �cg c]  }|d   dk(  r|dz   |f‘Œ c}«       |rŒ’g }|r7t        |t        «      r'|	D �cg c]  }|d   �Œ	| j                  |d   «      ‘Œ }}|r|s|�rC|�r@t        j                  j                  ||z   «      }|j                  d	«      s||k(  s|t!        ||«      v r|j#                  d	«      n| j                  |«      }|�"|t%        |«      d  j'                  d	«      }||z  }|	D �cg c]  }|d   j)                  |d	z   «      rŒ|‘Œ }	}t+        | j                  «      D ]3  }|j)                  |d	z   «      sŒ| j                  j-                  |d «       Œ5 | j                  j-                  |d «       |	j                  | j/                  ||d
|||¬«      «       |	S t        |t0        «      r)| j3                  |j4                  |j                  |¬«      }nI| j6                  j9                  |j:                  |j                  |||j<                  |j>                  ¬«      }|D �]c  }|d	z   |j                  z   }t        |t@        «      rH||jB                  d|jD                  |jF                  |jH                  |jJ                  |jL                  dœ}n€t        |tN        «      r2||jB                  d|jH                  |jP                  |jR                  dœ}n>t        |tT        «      r|dd|jV                  |jJ                  dœ}n|dd|jR                  dœ}| j                  |d   «      }| j                  jY                  |g «      j                  |«       |t%        |«      d  j'                  d	«      }|�||k  s�ŒS|	j                  |«       �Œf |	S c c}w c c}w c c}w c c}w )NFrÆ   r   é   rr   Ú	directoryrÝ   Úlast_commitr6   T)rÏ   rÛ   rH   r‰   rÐ   )ÚprefixrÏ   )rÏ   ÚexpandrH   rF   Úfile©rÝ   Úsizerr   Úblob_idÚlfsÚxet_hashrå   Úsecurity)rÝ   rê   rr   rí   ÚmtimeÚuploaded_atr   ©rÝ   rê   rr   Útree_idrå   )rÝ   rê   rr   rð   )-r‰   r¸   r;   r2   r�   Úextendr   ÚpopleftÚappendr¼   rE   r»   Úosr3   ÚcommonprefixÚendswithr   r7   r­   r¥   Ú
startswithÚlistrj   rÞ   rY   Ú_list_bucket_tree_with_foldersrZ   rŒ   Úlist_repo_treerG   rH   rF   r(   rê   rë   rì   rí   rå   rî   r$   rï   rð   r)   rò   Ú
setdefault)r9   r3   rÏ   rÛ   rH   r‰   rÐ   r½   Ú	root_pathrß   Úcached_path_infosÚdirs_not_in_dircacheÚdepthÚ	path_infoÚdirs_to_visitÚdir_infoÚdirs_not_expandedrà   Úcommon_prefixÚcommon_pathÚcommon_path_depthÚcached_pathÚtreeÚ
cache_pathÚcache_path_infoÚparent_paths                             r:   rÞ   zHfFileSystem._ls_tree  s  € ð 'Ð2‰KÈT×M]ÑM]ÐMi¸×9IÒ9IÐotð 	ð ×)Ñ)¨$¸Ð)ÓBˆØ×&Ñ&Ó(ˆØ!×&Ñ&ˆ	Ù(‘8¨aˆàˆØ�4—=‘=Ò ªØ $§¡¨dÑ 3ÐØ�J‰JÐ(Ô)Ø#%Ð Ùð �Ü %Ø9JÖo¨IÈiÐX^ÑN_ÐcnÓNn�e˜YÒ'Òoó!�ñ $Ø&3×&;Ñ&;Ó&=‘O�E˜8ØÐ'¨5°HÒ+<Ø# FÑ+°4·=±=Ñ@Ø0×7Ñ7¸ÀÑ8HÕIà04·±¸hÀvÑ>NÑ0OÐ-ØŸJ™JÐ'8Ô9Ø)×0Ñ0ð 6Gö!"à(1Ø'0°Ñ'8¸KÒ'Gð &+¨Q¡Y°	Ò$:ò!"ôò $ð  !#ÐÙœz¨-Ô9[Ô\àFIÖ$fÀÈQÈ}ÑM]ÑMe T§\¡\°!°F±)Õ%<Ð$fÐ!Ð$fáÑ2ºÒHYô !#§¡× 4Ñ 4Ð5IÐL]Ñ5]Ó ^�ð %×-Ñ-¨cÔ2Ø$¨	Ò1Ø$¬Ð.BÐDUÓ(VÑVð "×(Ñ(¨Ô-ð Ÿ™ mÓ4ð ð Ð'Ø(3´C¸³I°KÐ(@×(FÑ(FÀsÓ(KÐ%ØÐ 1Ñ1�HØ"%ÖU˜Q¨Q¨v©Y×-AÑ-AÀ+ÐPSÑBSÕ-T’qÐU�ÐUÜ#'¨¯©Ó#6ò =�KØ"×-Ñ-¨k¸CÑ.?Õ@ØŸ™×)Ñ)¨+°tÕ<ð=ð —‘×!Ñ! +¨tÔ4Ø—
‘
Ø—M‘MØ#Ø"+Ø $Ø!)Ø$/Ø!)ð "ó ô	ðJ ˆ
ôs ˜-Ô)GÔHØ×:Ñ:Ø!×+Ñ+Ø(×-Ñ-Ø'ð ;ó ‘ð —y‘y×/Ñ/Ø!×)Ñ)Ø!×&Ñ&Ø'Ø&Ø*×3Ñ3Ø+×5Ñ5ð 0ó �ð "ó )0�	Ø&¨™_¨y¯~©~Ñ=�
Ü˜i¬Ô2à *Ø )§¡Ø &Ø#,×#4Ñ#4Ø(Ÿ}™}Ø$-×$6Ñ$6Ø'0×'<Ñ'<Ø$-×$6Ñ$6ñ	'‘Oô   	¬:Ô6à *Ø )§¡Ø &Ø$-×$6Ñ$6Ø!*§¡Ø'0×'<Ñ'<ñ'‘Oô   	¬:Ô6à *Ø !Ø +Ø#,×#4Ñ#4Ø'0×'<Ñ'<ñ'‘Oð !+Ø !Ø +Ø'0×'<Ñ'<ñ	'�Oð #Ÿl™l¨?¸6Ñ+BÓC�Ø—‘×(Ñ(¨°bÓ9×@Ñ@ÀÔQØ"¤3 t£9 ;Ð/×5Ñ5°cÓ:�ØÐ# u°Ô'8Ø—J‘J˜Ö/ðS)0ðT ˆ
ùòa pùò!"ùò %gùò" Vs*   ÂR:Â%R:Ä&R?Å
SÅ)SÈS	È8S	ræ   c                 ó†  — | j                   j                  |||¬«      }i }|rd|j                  d«      z   nd}g }|D ]í  }|j                  |«       |sŒt	        t        |j                  «      j                  «      d| dz
   D ]¥  }	t        dt        |	«      |j                  ¬«      }
|
j                  |vr!|j                  |
«       |
||
j                  <   ŒS|
j                  €Œ`||
j                     }|j                  �|j                  |
j                  k  sŒ•|
j                  |_
        Œ§ Œï |st        d|› d	|› d
�«      ‚|S )z<Same as `HfApi.list_bucket_tree` but always includes folders)rÏ   r   r6   r   Nrä   )rr   r3   rð   zFile not found in bucket 'z': 'ú')rŒ   Úlist_bucket_treer¥   rõ   rú   r   r3   Úparentsr%   rA   rð   r   )r9   rZ   ræ   rÏ   Úbucket_filesÚbucket_foldersÚ	min_depthrß   Úbucket_entryÚparent_bucket_folder_strÚparent_bucket_folderÚbucket_folders               r:   rû   z+HfFileSystem._list_bucket_tree_with_folders�  sg  € ð —y‘y×1Ñ1°)¸VÈyÐ1ÓYˆØ24ˆÙ-3�A˜Ÿ™ SÓ)Ò)¸ˆ	Ø/1ˆà(ò 	UˆLØ�J‰J�|Ô$ñ Øô -1´¸|×?PÑ?PÓ1Q×1YÑ1YÓ,ZÐ[kÐ^gÐ]gÐjkÑ]kÐ,lò UÐ(Ü'3Ø$¬3Ð/GÓ+HÐVb×VnÑVnô(Ð$ð
 (×,Ñ,°NÑBØ—J‘JÐ3Ô4Ø@T�NÐ#7×#<Ñ#<Ñ=Øð (×3Ñ3Ñ?Ø$2Ð3G×3LÑ3LÑ$M�MØ$×0Ñ0Ð8Ø%×1Ñ1Ð4H×4TÑ4TÓTà4H×4TÑ4T˜Õ1ñ#Uð	Uñ6 Ü$Ð'AÀ)ÀÈDÐQWÐPXÐXYÐ%ZÓ[Ð[Øˆ
r<   c              /   ó¨   •K  — | j                  ||j                  d«      ¬«      j                  «       }t        ‰| �  |g|¢­i |¤ŽE d{  –—†  y7 Œ­w)aÁ  
        Return all files below the given path.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.walk).

        Args:
            path (`str`):
                Root path to list files from.

        Returns:
            `Iterator[tuple[str, list[str], list[str]]]`: An iterator of (path, list of directory names, list of file names) tuples.
        rH   rÆ   N)r¸   rS   r;   ra   Úwalk)r9   r3   re   rf   rg   s       €r:   r  zHfFileSystem.walk¸  sL   øè ø€ ð × Ñ  °·
±
¸:Ó0FÐ ÓG×QÑQÓSˆÜ‘7‘< Ð6 tÒ6¨vÑ6×6Ò6ús   ƒAAÁ
AÁAc                 óˆ   •— | j                  ||j                  d«      ¬«      j                  «       }t        ‰| �  |fd|i|¤ŽS )aã  
        Find files by glob-matching.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.glob).

        Args:
            path (`str`):
                Path pattern to match.
            maxdepth (`int`, *optional*):
                Maximum depth to descend into directories. By default, no limit.

        Returns:
            `list[str]`: List of paths matching the pattern.
        rH   rÆ   rÐ   )r¸   rS   r;   ra   Úglob)r9   r3   rÐ   rf   rg   s       €r:   r  zHfFileSystem.globÈ  sE   ø€ ð × Ñ  °·
±
¸:Ó0FÐ ÓG×QÑQÓSˆÜ‰w‰|˜DÑ>¨8Ð>°vÑ>Ð>r<   Úwithdirsc                 ó*  — |�|dk  rt        d«      ‚| j                  ||¬«      }|j                  «       }	  | j                  |fd||dœ|¤Ž}	|s|	D �
cg c]  }
|
d   dk7  sŒ|
‘Œ }	}
n# | j                  |fi |¤Ž}|d   dk(  r|g|	z   n|	}	|	D �
ci c]  }
|
d   |
“Œ
 }	}
t        |	«      }|s|S |D �ci c]  }||	|   “Œ
 c}S c c}
w c c}
w # t
        $ r8 	  | j                  |fd	|i|¤Žd   d
k(  r|i i}	ni }	n# t        $ r i }	Y nw xY wY Œmw xY wc c}w )aÕ  
        List all files below path.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.find).

        Args:
            path (`str`):
                Root path to list files from.
            maxdepth (`int`, *optional*):
                Maximum depth to descend into subdirectories.
            withdirs (`bool`, *optional*):
                Include directory paths in the output. Defaults to False.
            detail (`bool`, *optional*):
                If True, returns a dict mapping paths to file information. Defaults to False.
            refresh (`bool`, *optional*):
                If True, bypass the cache and fetch the latest data. Defaults to False.
            revision (`str`, *optional*):
                The git revision to list from.

        Returns:
            `Union[list[str], dict[str, dict[str, Any]]]`: List of paths or dict of file information.
        r   zmaxdepth must be at least 1rÆ   T)rÏ   rÛ   rÐ   rr   rä   rÝ   rH   rè   )r¦   r¸   r;   rÞ   Úinfor   ÚFileNotFoundErrorr’   )r9   r3   rÐ   r  rÚ   rÛ   rH   rf   r½   rß   rà   r  ÚnamesrÝ   s                 r:   ÚfindzHfFileSystem.findÚ  sh  € ð@ Ð H¨q¢LÜÐ:Ó;Ð;Ø×)Ñ)¨$¸Ð)ÓBˆØ×&Ñ&Ó(ˆð	.Ø�$—-‘- Ðc°¸gÐPXÑcÐ\bÑcˆCñ Ø"%ÖB˜Q¨¨6©°kÓ)A’qÐB�ÑBð &˜DŸI™I dÑ5¨fÑ5�	Ø+4°VÑ+<ÀÒ+K�y�k CÒ'ÐQT�Ø),Ö- A�1�V‘9˜a‘<Ð-ˆCÐ-Ü�s“ˆÙØˆLà05Ö6¨�D˜#˜d™)‘OÒ6Ð6ùò Cùò
 .øô! "ò 	ðØ�4—9‘9˜TÑ?¨HÐ?¸Ñ?ÀÑGÈ6ÒQØ ˜*‘Cà�CùÜ$ò Ø’ðüð	üò* 7sM   ·C ÁCÁ"CÂCÂ2DÃ	DÃ"C9Ã8DÃ9DÄDÄDÄDÄDÚpath1Úpath2c                 ó6  — | j                  ||¬«      }| j                  ||¬«      }t        |t        «      st        |t        «      rt        d«      ‚|j                  |j                  k(  xr |j
                  |j
                  k(  }|r“d|› d|› �}| j                  j                  |j
                  |j                  |j                  |j                  d|«      |j                  dd«      t        |j                  |j                  |j                  ¬«      g¬	«       n³| j                  |d
|j                  ¬«      5 }	|	j                  «       }
ddd«       d|› d|› �}| j                  j                  
|j                  |j
                  | j                  |j                  |j                  |j                  d|«      |j                  d«      ¬«       | j!                  |j#                  «       ¬«       | j!                  |j#                  «       ¬«       y# 1 sw Y   ŒÆxY w)aš  
        Copy a file within or between repositories.

        > [!WARNING]
        > Note: When possible, use `HfApi.upload_file()` for better performance.

        Args:
            path1 (`str`):
                Source path to copy from.
            path2 (`str`):
                Destination path to copy to.
            revision (`str`, *optional*):
                The git revision to copy from.

        rÆ   z)Copy from/to buckets is not available yetzCopy z to rÉ   rÊ   rP   )Úsrc_path_in_reporI   Úsrc_revision)rG   rF   rH   rÉ   rÊ   rÓ   ÚrbN©Úpath_or_fileobjrI   rG   r‡   rF   rH   rÉ   rÊ   rË   )r¸   r¼   rY   r¤   rF   rG   rŒ   rÖ   rH   rS   r   rI   ÚopenÚreadÚupload_filer‡   r¾   r;   )r9   r#  r$  rH   rf   Úresolved_path1Úresolved_path2Ú	same_reporÉ   ÚfÚcontents              r:   Úcp_filezHfFileSystem.cp_file  sû  € ð  ×*Ñ*¨5¸8Ð*ÓDˆØ×*Ñ*¨5¸8Ð*ÓDˆÜ�nÔ&DÔEÌØÔ:ôJ
ô &Ð&QÓRÐRð ×$Ñ$¨×(@Ñ(@Ñ@ÒuÀ^×E[ÑE[Ð_m×_uÑ_uÑEuð 	ñ Ø$ U G¨4°¨wÐ7ˆNØ�I‰I×#Ñ#Ø&×.Ñ.Ø(×2Ñ2Ø'×0Ñ0Ø%Ÿz™zÐ*:¸NÓKØ#)§:¡:Ð.BÀBÓ#Gä'Ø)7×)DÑ)DØ%3×%@Ñ%@Ø%3×%<Ñ%<ôðð $õ ð —‘˜5 $°×1HÑ1H�ÓIð #ÈQØŸ&™&›(�÷#à$ U G¨4°¨wÐ7ˆNØ�I‰I×!Ñ!Ø 'Ø+×8Ñ8Ø&×.Ñ.Ø—j‘jØ(×2Ñ2Ø'×0Ñ0Ø%Ÿz™zÐ*:¸NÓKØ#)§:¡:Ð.BÓ#Cð "ô 	ð 	×Ñ >×#;Ñ#;Ó#=ÐÔ>Ø×Ñ >×#;Ñ#;Ó#=ÐÕ>÷#ð #ús   Ä9HÈHc                 óÞ   —  | j                   |fi i |¥ddi¥¤Ž}d|v r#|d   €t        d|› d�«      ‚|d   j                  S d|v r
|d   r|d   S d|v r
|d   r|d   S t        d|› d	|› d
�«      ‚)ak  
        Get the last modified time of a file.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.modified).

        Args:
            path (`str`):
                Path to the file.

        Returns:
            `datetime`: Last modified time of the file.
        r‰   Trå   z9'modified' is not implemented for repository paths like 'r  rï   rð   z'Cannot determined 'modified' for path 'z	' (info: ú))r  r¤   Údate)r9   r3   rf   r  s       r:   ÚmodifiedzHfFileSystem.modifiedS  s³   € ð ˆt�y‰y˜ÑAÐ!@ FÐ!@¨M¸4Ñ!@ÑAˆØ˜DÑ Ø�MÑ"Ð*Ü)Ð,eÐfjÐekÐklÐ*mÓnÐnØ˜Ñ&×+Ñ+Ð+Ø˜‰_  g¢Ø˜‘=Ð Ø˜dÑ" t¨MÒ':Ø˜Ñ&Ð&ä%Ð(OÐPTÈvÐU^Ð_cÐ^dÐdeÐ&fÓgÐgr<   c           	      ó¨  — | j                  ||¬«      }|j                  «       }|j                  d| j                  �| j                  nd«      }|j                  s£|dddœ}t        |t        «      rd|d<   t        |t        «      �r¹|�r¶| j                  j                  |j                  |j                  |j                  ¬	«      d
   }i |¥dt        |j                  |j                  |j                  ¬«      dœ¥}�nBt        |t         «      r^| j#                  |«      }	| j%                  |	|¬«       | j&                  |	   D �
cg c]  }
|
d   |k(  sŒ|
‘Œ }}
|st)        |d«       |d   }�nÔd}| j#                  |«      }	|s|	| j&                  vr| j%                  |	«       |	| j&                  v r8| j&                  |	   D �
cg c]  }
|
d   |k(  sŒ|
‘Œ }}
|st)        |d«       |d   }|s|�|�rS|�rP|d   �€J| j                  j+                  |j                  |j,                  ||j                  |j                  ¬«      }|st)        |d«       |d   }t        |j                  |j                  |j                  d|j.                  ¬«      j                  «       }t        |t0        «      rX|dz   |j                  z   |j2                  d|j4                  |j6                  |j8                  |j:                  |j<                  dœ}n,|dz   |j                  z   dd|j>                  |j:                  dœ}|sdD �ci c]  }|||   “Œ
 }}|€J ‚|S c c}
w c c}
w c c}w )aS  
        Get information about a file or directory.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.info).

        > [!WARNING]
        > Note: When possible, use `HfApi.get_paths_info()` or `HfApi.repo_info()`  for better performance
        > (or `HfApi.get_bucket_paths_info()` or `HfApi.bucket_info()` for buckets)

        Args:
            path (`str`):
                Path to get info for.
            refresh (`bool`, *optional*):
                If True, bypass the cache and fetch the latest data. Defaults to False.
            revision (`str`, *optional*):
                The git revision to get info from.

        Returns:
            `dict[str, Any]`: Dictionary containing file information (type, size, commit info, etc.).

        rÆ   r‰   NFr   rä   )rÝ   rê   rr   rå   )rF   rH   éÿÿÿÿ)ÚoidÚtitler6  )rò   rå   )rÛ   rÝ   )rç   rH   rF   rP   )rI   rN   r6   rè   ré   rñ   ) r¸   r;   rS   r‰   r3   r¼   rE   rŒ   Úlist_repo_commitsrG   rF   rH   r'   Ú	commit_idr;  Ú
created_atrY   r»   rá   r�   rª   Úget_paths_inforI   rN   r(   rê   rë   rì   rí   rå   rî   rò   )r9   r3   rÛ   rH   rf   r½   r‰   rß   rå   r  rà   Úout1Ú
paths_infor  rþ   Úks                   r:   r  zHfFileSystem.infol  sX  € ð, ×)Ñ)¨$¸Ð)ÓBˆØ×&Ñ&Ó(ˆØ—j‘jØ¨t×/?Ñ/?Ð/K˜4×+Ò+ÐQVó
ˆð ×!Ò!ð ØØ#ñˆCô
 ˜-Ô)KÔLØ%)��MÑ"Ü˜-Ô)KÕLÒQ\Ø"Ÿi™i×9Ñ9Ø!×)Ñ)°]×5LÑ5LÐWd×WmÑWmð :ó àñ�ðØðà#Ü#1Ø'×1Ñ1¸×9JÑ9JÐQ\×QgÑQgô$ò’ô ˜Ô'EÔFØŸ,™, tÓ,ˆKà�G‰G�K¨ˆGÔ1Ø#Ÿ}™}¨[Ñ9ÖO˜!¸Q¸v¹YÈ$Ó=N’AÐOˆDÐOÙÜ% d¨DÔ1Ø�q‘'ŠCàˆCØŸ,™, tÓ,ˆKÙ ;°d·m±mÑ#Cà—‘˜Ô$Ø˜dŸm™mÑ+à#'§=¡=°Ñ#=ÖS˜aÀÀ6ÁÈdÓARšÐS�ÐSÙÜ)¨$°Ô5Ø˜1‘g�Ù˜#˜+ª+º#À#ÀmÑBTÑB\Ø!ŸY™Y×5Ñ5Ø!×)Ñ)Ø!×.Ñ.Ø&Ø*×3Ñ3Ø+×5Ñ5ð 6ó �
ñ "Ü)¨$°Ô5Ø& q™M�	Ü>Ø!×+Ñ+Ø!×)Ñ)Ø!×*Ñ*Ø!#Ø"/×"=Ñ"=ô÷ ‘)“+ð ô ˜i¬Ô2à )¨C¡°)·.±.Ñ @Ø )§¡Ø &Ø#,×#4Ñ#4Ø(Ÿ}™}Ø$-×$6Ñ$6Ø'0×'<Ñ'<Ø$-×$6Ñ$6ñ	‘Cð !*¨C¡°)·.±.Ñ @Ø !Ø +Ø#,×#4Ñ#4Ø'0×'<Ñ'<ñ�Cñ #Ø.FÖG¨˜1˜c !™f™9ÐG�CÐGØˆÐˆØˆ
ùòq Pùò TùòT Hs   ÅMÅMÆ>M
ÇM
Ì0Mc                 ó�   — 	 |j                  dd«      r| j                  |«        | j                  |fi |¤Ž y# t        $ r Y yw xY w)aÁ  
        Check if a file exists.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.exists).

        > [!WARNING]
        > Note: When possible, use `HfApi.file_exists()` for better performance.

        Args:
            path (`str`):
                Path to check.

        Returns:
            `bool`: True if file exists, False otherwise.
        rÛ   FT)rS   r¾   r  ÚOSError)r9   r3   rf   s      r:   ÚexistszHfFileSystem.existsÚ  sK   € ð 	Ø�z‰z˜) UÔ+Ø×%Ñ% dÔ+àˆD�I‰I�dÑ%˜fÒ%ØøÜò 	Ùð	ús   ‚69 ¹	AÁAc                 óP   — 	 | j                  |«      d   dk(  S # t        $ r Y yw xY w)ai  
        Check if a path is a directory.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.isdir).

        Args:
            path (`str`):
                Path to check.

        Returns:
            `bool`: True if path is a directory, False otherwise.
        rr   rä   F©r  rD  ©r9   r3   s     r:   rÕ   zHfFileSystem.isdiró  s1   € ð	Ø—9‘9˜T“? 6Ñ*¨kÑ9Ð9øÜò 	Ùð	úó   ‚ ™	%¤%c                 óP   — 	 | j                  |«      d   dk(  S # t        $ r Y yw xY w)a`  
        Check if a path is a file.

        For more details, refer to [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.isfile).

        Args:
            path (`str`):
                Path to check.

        Returns:
            `bool`: True if path is a file, False otherwise.
        rr   rè   FrG  rH  s     r:   ÚisfilezHfFileSystem.isfile  s1   € ð	Ø—9‘9˜T“? 6Ñ*¨fÑ4Ð4øÜò 	Ùð	úrI  c                 óx  — | j                  |«      }t        |t        «      r2| j                  › d|j                  › dt        |j                  «      › �}nBt        |j                  |j                  |j                  |j                  | j                  ¬«      }| j                  |«      r|j                  ddd«      }|S )zÝ
        Get the HTTP URL of the given path.

        Args:
            path (`str`):
                Path to get URL for.

        Returns:
            `str`: HTTP URL to access the file or directory on the Hub.
        z	/buckets/z	/resolve/)rF   rH   r†   z/tree/r   )r¸   r¼   rY   r†   rZ   r   r3   r!   rG   rI   rF   rH   rÕ   Úreplace)r9   r3   r½   Úurls       r:   rN  zHfFileSystem.url  s§   € ð ×)Ñ)¨$Ó/ˆÜ�mÔ%CÔDØ—]‘]�O 9¨]×-DÑ-DÐ,EÀYÌuÐUb×UgÑUgÓOhÐNiÐj‰CäØ×%Ñ%Ø×*Ñ*Ø'×1Ñ1Ø&×/Ñ/ØŸ™ôˆCð �:‰:�dÔØ—+‘+˜k¨8°QÓ7ˆCØˆ
r<   c                 óÌ  •— |j                  d«      }t        |j                  «       «      dhz
  }t        |t        t
        f«      rt        |«      dkD  rt        ‰| �   ||f||dœ|¤ŽS t        |«      r|}n)| j                  |«      rt        j                  |d¬«       yt        |t        t        f«      r4t        j                  t        j                  j!                  |«      d¬«       d}|€t#        |d«      }d}|j%                  «       }	| j'                  ||¬	«      }
| j)                  ||¬	«      d
   }|j+                  |«       	 t-        | j/                  |
j1                  «       «      |||d| j2                  j5                  «       t        |t
        «      r|j6                  nd¬«       |j9                  |	«       |r|j;                  «        yy# |r|j;                  «        w w xY w)ad  
        Copy single remote file to local.

        > [!WARNING]
        > Note: When possible, use `HfApi.hf_hub_download()` or `HfApi.download_bucket_files` for better performance.

        Args:
            rpath (`str`):
                Remote path to download from.
            lpath (`str`):
                Local path to download to.
            callback (`Callback`, *optional*):
                Optional callback to track download progress. Defaults to no callback.
            outfile (`IO`, *optional*):
                Optional file-like object to write to. If provided, `lpath` is ignored.

        rH   r   )ÚcallbackÚoutfileT)Úexist_okNFÚwbrÆ   rê   )rN  Ú	temp_fileÚdisplayed_filenameÚexpected_sizeÚresume_sizeÚheadersÚ	_tqdm_bar)rS   ÚsetÚkeysr¼   r   r   r­   ra   Úget_filer   rÕ   rö   ÚmakedirsrA   r   r3   Údirnamer+  Útellr¸   r  Úset_sizer"   rN  r;   rŒ   Ú_build_hf_headersÚtqdmÚseekÚclose)r9   ÚrpathÚlpathrP  rQ  rf   rH   Úunhandled_kwargsÚ
close_fileÚinitial_posÚresolve_remote_pathrV  rg   s               €r:   r\  zHfFileSystem.get_file1  s¨  ø€ ð$ —:‘:˜jÓ)ˆÜ˜vŸ{™{›}Ó-°°Ñ<ÐÜ˜(¤\´<Ð$@ÔAÄSÐIYÓEZÐ]^ÒE^ô ‘7Ñ# E¨5Ð_¸8ÈWÑ_ÐX^Ñ_Ð_ô �eÔØ‰GØ�Z‰Z˜ÔÜ�K‰K˜¨Õ-Øä�eœc¤4˜[Ô)Ü�K‰KœŸ™Ÿ™¨Ó.¸Õ>ð ˆ
Øˆ?Ü˜5 $Ó'ˆGØˆJØ—l‘l“nˆð #×/Ñ/°ÀÐ/ÓIÐØŸ	™	 %°(˜	Ó;¸FÑCˆØ×Ñ˜-Ô(ð	 ÜØ—H‘HÐ0×:Ñ:Ó<Ó=Ø!Ø#(Ø+ØØŸ	™	×3Ñ3Ó5Ü+5°hÄÔ+M˜(Ÿ-š-ÐSWõð �L‰L˜Ô%ñ Ø—‘•ð ø‰zØ—‘•ð ús   ÅA4G ÇG#c                 ó   — t        d«      ‚)z½A context within which files are committed together upon exit

        Requires the file class to implement `.commit()` and `.discard()`
        for the normal and exception cases.
        ú(Transactional commits are not supported.©r¤   r8   s    r:   ÚtransactionzHfFileSystem.transactiono  s   € ô "Ð"LÓMÐMr<   c                 ó   — t        d«      ‚)z@Begin write transaction for deferring files, non-context versionrl  rm  r8   s    r:   Ústart_transactionzHfFileSystem.start_transactionz  s   € ô "Ð"LÓMÐMr<   c                 óp   — t         t        | «      | j                  | j                  | j	                  «       ffS r`   )Úmake_instancerr   rx   ry   rt   r8   s    r:   Ú
__reduce__zHfFileSystem.__reduce__€  s9   € äÜ�‹JØ×ÑØ× Ñ Ø×$Ñ$Ó&ð	
ð 
ð 	
r<   c                 ó€   — t        | j                  «      t        | j                  «      t        | j                  «      dœS )N)r�   r�   rŽ   )r   r�   r�   rŽ   r8   s    r:   rt   z HfFileSystem._get_instance_state‰  s4   € ä  §¡Ó/Ü/7¸×8\Ñ8\Ó/]Ü$,¨T×-FÑ-FÓ$Gñ
ð 	
r<   r`   )r(  NN)FNN)TFN)FFNNN)NFFFN)FN©r4   N)5r=   r>   r?   r@   Úroot_markerÚprotocolrA   ÚboolÚintrb   Úclassmethodrk   ÚtupleÚ	Exceptionrž   r¡   rE   rY   r¸   r¾   r   rÄ   rÎ   rÙ   rú   Údictr   rá   rÞ   r   r$   r%   rû   r   r  r  r"  r3  r
   r7  r  rE  rÕ   rK  rN  r   r\  Úpropertyrn  rp  rs  rt   r�   r‚   s   @r:   r„   r„   Œ   sh  ø„ ñ@ðD €KØ€Hð
  $Ø#'Ø!%Ø#'ò<ð ˜‘*ð<ð �c‰z˜DÑ ð	<ð
 ˜$‘Jð<ð ˜D‘[õ<ð2 ð	¨ð 	Àò 	ó ð	ðTØðTØ'*ðTØ69¸D±jðTà	ˆt�Y Ñ%Ð%Ñ	&óTð&4¨ð 4°°d¸IÈÑ<LÐ6LÑ0Mó 4ð 15ñM
ØðM
Ø#&¨¡:ðM
à	+Ð.LÑ	LóM
ñ^Q S¨4¡Zð Q¸4ó QðH Ø!%Ø#ñXàðXð ðXð ˜$‘Jð	Xð
 ˜‘*ðXð 
Ð;Ñ	<óXñ$>˜ð > s¨T¡zð >Àtó >ð&  Ø#Ø#ñ0>àð0>ð ð0>ð ˜‘*ð	0>ð
 ˜‘*ð0>ð 
ó0>ðf ]añ);Øð);Ø!%ð);Ø7;ð);ØORÐUYÉzð);à	ˆc�D˜˜c˜‘NÑ"Ñ	#ó);ð\  ØØ#Ø#'Ø#ñKàðKð ðKð ð	Kð
 ˜‘*ðKð ˜D‘[ðKð ˜‘*óKðZ&Øð&Ø&)ð&Ø6:ð&à	�*˜|Ñ+Ñ	,ó&ðP7˜ð 7°(¸5ÀÀdÈ3ÁiÐQUÐVYÑQZÐAZÑ;[Ñ2\õ 7ñ ?˜ð ?¨¨d©
ð ?ÈÈSÉ	õ ?ð*  $ØØØØ#ñ;7àð;7ð ˜‘*ð;7ð ð	;7ð
 ð;7ð ð;7ð ˜‘*ð;7ð 
ˆc‰�T˜#˜t C¨ H™~Ð-Ñ.Ñ	.ó;7ñz:?˜Sð :?¨ð :?¸¸d¹
ð :?ÐX\ó :?ðxh˜Sð h¨xó hñ2l˜ð l tð l¸sÀT¹zð lÐ_cÐdgÐilÐdlÑ_mó lò\ò2ò$ð$˜ð  ó ð4 /@Èö < ð| ñNó ðNòNò
ö
r<   r„   )Ú	metaclassc                   ó„   ‡ — e Zd Zddedededz  fˆ fd„Zˆ fd„Zdeded	efd
„Z	dd„Z
dded	dfd„Zdˆ fd„	Zd	efd„Zˆ xZS )rÀ   NÚfsr3   rH   c                 óø   •— 	 |j                  ||¬«      | _        t	        ‰| �  || j                  j                  «       fi |¤Ž |  y # t        $ r)}d|j                  dd«      v rt        |› d�«      |‚‚ d }~ww xY w)NrÆ   Úwr¿   rP   úB.
Make sure the repository and revision exist before writing data.)r¸   r½   r   rS   ra   rb   r;   )r9   r�  r3   rH   rf   r�   rg   s         €r:   rb   zHfFileSystemFile.__init__’  sŠ   ø€ ð	Ø!#§¡°À Ó!IˆDÔô 	‰Ñ˜˜T×/Ñ/×9Ñ9Ó;ÑF¸vÒFÚøô !ò 	Ø�f—j‘j ¨Ó,Ñ,Ü'Ø�cÐ\Ð]óàðð ûð	ús   ƒA Á	A9Á$A4Á4A9c                 ó:   •— t        | d«      sy t        ‰| �	  «       S ©Nr½   )Úhasattrra   Ú__del__©r9   rg   s    €r:   rˆ  zHfFileSystemFile.__del__ž  s   ø€ Ü�t˜_Ô-àÜ‰w‰Ó Ð r<   ÚstartÚendr4   c                 óì   — dd|› d|dz
  › �i| j                   j                  j                  «       ¥}| j                  «       }t	        d||t
        j                  ¬«      }t        |«       |j                  S )NÚrangeúbytes=ú-r   ÚGET©rX  r™   )	r�  rŒ   ra  rN  r,   r   ÚHF_HUB_DOWNLOAD_TIMEOUTr+   r2  )r9   rŠ  r‹  rX  rN  Úrs         r:   Ú_fetch_rangezHfFileSystemFile._fetch_range¤  sm   € à�v˜e˜W A c¨A¡g YÐ/ð
à�g‰g�l‰l×,Ñ,Ó.ð
ˆð �h‰h‹jˆÜ˜ ¨W¼i×>_Ñ>_Ô`ˆÜ˜AÔØ�y‰yÐr<   c                 ó<   — t        j                  dd¬«      | _        y )Nzhffs-F)ræ   rÈ   )ÚtempfileÚNamedTemporaryFilerT  r8   s    r:   Ú_initiate_uploadz!HfFileSystemFile._initiate_upload®  s   € Ü!×4Ñ4¸GÈEÔRˆ�r<   Úfinalc                 óJ  — | j                   j                  d«       | j                   j                  «       }| j                  j	                  |«       |�rÐ| j                  j                  «        t        | j                  t        «      rg| j                  j                  j                  | j                  j                  | j                  j                  | j                  j                  fg¬«       n×| j                  j                  j                  | j                  j                  | j                  j                   | j                  j"                  | j                  j$                  | j                  j&                  | j                  j(                  | j*                  j-                  d«      | j*                  j-                  d«      ¬«       t/        j0                  | j                  j                  «       | j                  j3                  | j                  j5                  «       ¬«       y y )Nr   )ÚaddrÉ   rÊ   r)  rË   )Úbufferrc  r,  rT  Úwriterd  r¼   r½   rY   r�  rŒ   rÌ   rZ   rÝ   r3   r-  rI   rG   r‡   rF   rH   rf   rS   rö   Úremover¾   r;   )r9   r™  Úblocks      r:   Ú_upload_chunkzHfFileSystemFile._upload_chunk±  s  € Ø�‰×Ñ˜ÔØ—‘× Ñ Ó"ˆØ�‰×Ñ˜UÔ#ÚØ�N‰N× Ñ Ô"Ü˜$×,Ñ,Ô.LÔMØ—‘—‘×/Ñ/Ø×&Ñ&×0Ñ0¸¿¹×8KÑ8KÈT×M_ÑM_×MdÑMdÐ7eÐ6fð 0õ ð —‘—‘×(Ñ(Ø$(§N¡N×$7Ñ$7Ø!%×!3Ñ!3×!@Ñ!@Ø ×.Ñ.×6Ñ6ØŸ'™'Ÿ-™-Ø"×0Ñ0×:Ñ:Ø!×/Ñ/×8Ñ8Ø#'§;¡;§?¡?Ð3CÓ#DØ'+§{¡{§¡Ð7KÓ'Lð )ô 	ô �I‰I�d—n‘n×)Ñ)Ô*Ø�G‰G×$Ñ$Ø×'Ñ'×1Ñ1Ó3ð %õ ð% r<   c                 óH  •— | j                   dk(  rx|�|dk(  rq| j                  dk(  rb| j                  j                  | j                  dd¬«      5 }|j                  «       }| xj                  t        |«      z  c_        |cddd«       S t        ‰| �  |«      S # 1 sw Y   ŒxY w)züRead remote file.

        If `length` is not provided or is -1, the entire file is downloaded and read. On POSIX systems the file is
        loaded in memory directly. Otherwise, the file is downloaded to a temporary file and read from there.
        r(  Nr9  r   )rˆ   )r¿   Úlocr�  r+  r3   r,  r­   ra   )r9   Úlengthr1  rß   rg   s       €r:   r,  zHfFileSystemFile.readË  s�   ø€ ð �9‰9˜Ò & .°F¸b²LÀdÇhÁhÐRSÂmØ—‘—‘˜dŸi™i¨¸!�Ó<ð ÀØ—f‘f“h�Ø—’œC ›HÑ$•Ø÷ñ ô ‰w‰|˜FÓ#Ð#÷	ð ús   Á0BÂB!c                 óL   — | j                   j                  | j                  «      S r`   ©r�  rN  r3   r8   s    r:   rN  zHfFileSystemFile.urlØ  ó   € Ø�w‰w�{‰{˜4Ÿ9™9Ó%Ð%r<   r`   ru  )F©r9  )r=   r>   r?   r„   rA   rb   rˆ  ry  Úbytesr”  r˜  rx  r   r,  rN  r�   r‚   s   @r:   rÀ   rÀ   ‘  sj   ø„ ñ
˜<ð 
¨sð 
¸cÀD¹jõ 
ô!ð #ð ¨Cð °Eó óSñ 4ð °Dó õ4$ð&�S÷ &r<   rÀ   c                   ó¦   ‡ — e Zd Z	 	 	 	 ddededededz  dedefˆ fd„Zdd	ed
efd„Zddefd„Zdde	e
   dede
fd„Zdefd„Zˆ fd„Zd„ Zd„ Zˆ xZS )rÁ   Nr�  r3   r¿   rH   rˆ   Ú
cache_typec                 ó  •— |dk7  rt        d|› �«      ‚|dk7  rt        d|› �«      ‚d|v rt        d|› d�«      ‚	 |j                  ||¬«      | _        | j                  j                  «       d dœ| _        t        ‰	| �   || j                  j                  «       f|||dœ|¤Ž d | _	        |  t        «       | _        d | _        t        «       | _        y # t        $ r-}d|j	                  d	d
«      v rt        |› d�«      |‚Y d }~Œ¯d }~ww xY w)Nr   z:HfFileSystemStreamFile only supports block_size=0 but got Únonez?HfFileSystemStreamFile only supports cache_type='none' but got rƒ  z;HfFileSystemStreamFile only supports reading but got mode='r  rÆ   r¿   rP   r„  )rÝ   rê   ©r¿   rˆ   rª  )r¦   r¸   r½   r   rS   r;   Údetailsra   rb   Úresponser   Ú_exit_stackÚ_stream_iteratorÚ	bytearrayÚ_stream_buffer)
r9   r�  r3   r¿   rH   rˆ   rª  rf   r�   rg   s
            €r:   rb   zHfFileSystemStreamFile.__init__Ý  s7  ø€ ð ˜Š?ÜÐYÐZdÐYeÐfÓgÐgØ˜ÒÜÐ^Ð_iÐ^jÐkÓlÐlØ�$‰;ÜÐZÐ[_ÐZ`Ð`aÐbÓcÐcð	Ø!#§¡°À Ó!IˆDÔð !%× 2Ñ 2× <Ñ <Ó >ÈÑMˆŒÜ‰ÑØ�×"Ñ"×,Ñ,Ó.ð	
Ø59ÀjÐ]gñ	
Økqò	
ð 04ˆŒÙÜ$›;ˆÔà8<ˆÔÜ'›kˆÕøô !ò 	Ø�f—j‘j ¨Ó,Ñ,Ü'Ø�cÐ\Ð]óàðô -ûð	ús   ¼C Ã	DÃ#DÄDr¢  Úwhencec                 óX   — |dk(  r|dk(  ry || j                   k(  r|dk(  ry t        d«      ‚)Nr   r   zCannot seek streaming HF file)r¢  r¦   )r9   r¢  r´  s      r:   rc  zHfFileSystemStreamFile.seek   s2   € Ø�!Š8˜ !šØØ�$—(‘(Š?˜v¨š{ØÜÐ8Ó9Ð9r<   r£  c                 ó‚  — | j                   €| j                  «        d}	 	 | j                   �| j                  €y| j                  | j                  |«      }| xj                  t        |«      z  c_        |S # t        $ r> | j                   �| j                   j                  «        |r‚ | j                  «        d}Y nw xY wŒ¡)zÞRead the remote file.

        If the file is already open, we reuse the connection.
        Otherwise, open a new connection and read from it.

        If reading the stream fails, we retry with a new connection.
        FTr<   )r¯  Ú_open_connectionr±  Ú_read_from_streamr¢  r­   r|  rd  )r9   r£  Úretried_oncerß   s       r:   r,  zHfFileSystemStreamFile.read  s³   € ð �=‰=Ð Ø×!Ñ!Ô#àˆØð$Ø—=‘=Ð(¨D×,AÑ,AÐ,IØØ×,Ñ,¨T×-BÑ-BÀFÓK�Ø—’œC ›HÑ$•Ø�
øÜò $Ø—=‘=Ð,Ø—M‘M×'Ñ'Ô)ÙØà×%Ñ%Ô'Ø#’ð$úð s   ¡A6 º;A6 Á6AB=Â<B=Úiteratorr4   c                 ó–  — |dk(  ry|dk  rRt        | j                  «      }| j                  j                  «        |D ]  }|j                  |«       Œ t	        |«      S |t        | j                  «      k  r)t	        | j                  d| «      }| j                  d|…= |S t        | j                  «      }| j                  j                  «        |D ]m  }|t        |«      z
  }|t        |«      kD  r|j                  |«       Œ1|j                  |d| «       | j                  j                  ||d «        t	        |«      S  t	        |«      S )z°Read up to `length` bytes from stream buffer and stream.

        If length < 0, read until EOF.

        If EOF is reached before length, fewer bytes may be returned.
        r   r<   N)r²  r³  rº   ró   r¨  r­   )r9   rº  r£  ÚbufÚchunkÚresultÚneeds          r:   r¸  z(HfFileSystemStreamFile._read_from_stream#  s9  € ð �QŠ;Øà�AŠ:Ü˜D×/Ñ/Ó0ˆCØ×Ñ×%Ñ%Ô'Ø!ò "�Ø—
‘
˜5Õ!ð"ä˜“:Ðà”S˜×,Ñ,Ó-Ò-Ü˜4×.Ñ.¨w°Ð7Ó8ˆFØ×#Ñ# G V GÐ,ØˆMä˜×+Ñ+Ó,ˆØ×Ñ×!Ñ!Ô#Øò 	ˆEØœC ›HÑ$ˆDØ”c˜%“jÒ Ø—
‘
˜5Õ!à—
‘
˜5  $˜<Ô(Ø×#Ñ#×*Ñ*¨5°°¨<Ô8ØÜ�S‹zÐð	ô �S‹zÐr<   c                 óL   — | j                   j                  | j                  «      S r`   r¥  r8   s    r:   rN  zHfFileSystemStreamFile.urlE  r¦  r<   c                 ón   •— t        | d«      sy | j                  j                  «        t        ‰| �  «       S r†  )r‡  r°  rd  ra   rˆ  r‰  s    €r:   rˆ  zHfFileSystemStreamFile.__del__H  s/   ø€ Ü�t˜_Ô-àØ×Ñ×ÑÔ Ü‰w‰Ó Ð r<   c                 ó”   — t         | j                  | j                  | j                  | j                  | j
                  j                  ffS r`   )Úreopenr�  r3   r¿   Ú	blocksizeÚcacherÝ   r8   s    r:   rs  z!HfFileSystemStreamFile.__reduce__O  s0   € Ü˜Ÿ™ §¡¨D¯I©I°t·~±~ÀtÇzÁzÇÁÐWÐWÐWr<   c                 ó@  — | j                   j                  «        d| _        | j                  «       }| j                  j
                  j                  «       }| j                  dkD  rd| j                  › d�|d<   | j                  j                  t        d||t        j                  ¬«      «      | _        	 t        | j                  «       | j                  j#                  «       | _        y# t        $ r+}|j                  j                   dk(  rd| _        Y d}~y‚ d}~ww xY w)	z%Open a connection to the remote file.Nr   rŽ  r�  ÚRanger�  r‘  i   )r³  rº   r±  rN  r�  rŒ   ra  r¢  r°  Úenter_contextr-   r   r’  r¯  r+   r   Ústatus_codeÚ
iter_bytes)r9   rN  rX  r�   s       r:   r·  z'HfFileSystemStreamFile._open_connectionR  sì   € ð 	×Ñ×!Ñ!Ô#Ø $ˆÔà�h‰h‹jˆØ—'‘'—,‘,×0Ñ0Ó2ˆØ�8‰8�aŠ<Ø!'¨¯© z°Ð3ˆG�GÑØ×(Ñ(×6Ñ6ÜØØØÜ!×9Ñ9ô	ó
ˆŒð	Ü §¡Ô.ð !%§¡× 8Ñ 8Ó :ˆÕøô ò 	Ø�z‰z×%Ñ%¨Ò,à $�”ÜØûð	ús   Â4C) Ã)	DÃ2 DÄDÄD)r(  Nr   r¬  )r   r§  )r=   r>   r?   r„   rA   ry  rb   rc  r,  r   r¨  r¸  rN  rˆ  rs  r·  r�   r‚   s   @r:   rÁ   rÁ   Ü  s°   ø„ ð
 Ø#ØØ ñ!*àð!*ð ð!*ð ð	!*ð
 ˜‘*ð!*ð ð!*ð õ!*ñF:˜ð : Só :ñ$˜3ó $ñ8 ¨(°5©/ð  À3ð  ÐPUó  ðD&�Só &ô!òXö;r<   rÁ   rH   r4   c                 óF   — t        j                  | «      r| S t        | «      S r`   )r#   ÚmatchÚ
safe_quoterÆ   s    r:   rU   rU   q  s    € Ü2×8Ñ8¸ÔBˆ8Ð\Ì
ÐS[ÓH\Ð\r<   Úsc                 ó   — t        | d¬«      S )NrP   )Úsafe)r   )rÎ  s    r:   rÍ  rÍ  u  s   € Ü�˜ÔÐr<   r3   r°   c                 ó    — | }t        |t        «      r| › d�}n+t        |t        «      r| › d�}nt        |t        «      r| › d�}t	        |«      |‚)Nz (repository not found)z (revision not found)z (invalid repository id))r¼   r   r    r*   r   )r3   r°   Úmsgs      r:   rª   rª   y  s\   € Ø
€CÜ�#Ô.Ô/Ø�Ð-Ð.‰Ü	�CÔ.Ô	/Ø�Ð+Ð,‰Ü	�CÔ*Ô	+Ø�Ð.Ð/ˆÜ
˜CÓ
  cÐ)r<   r�  r¿   rˆ   rª  c                 ó,   — | j                  ||||¬«      S )Nr­  )r+  )r�  r3   r¿   rˆ   rª  s        r:   rÃ  rÃ  „  s   € Ø�7‰7�4˜d¨zÀjˆ7ÓQÐQr<   c                 ó`   —  | |i |¤Ž}|j                  «       D ]  \  }}t        |||«       Œ |S r`   )ru   rv   )rd   re   rf   r~   r�  r   r€   s          r:   rr  rr  ˆ  s?   € Ù	ˆdÐ	�fÑ	€BØ+×1Ñ1Ó3ò 'ÑˆˆkÜ��D˜+Õ&ð'à€Ir<   )Zrö   r–  rl   Úcollectionsr   Úcollections.abcr   r   Ú
contextlibr   Úcopyr   Údataclassesr   r	   r
   Ú	itertoolsr   Úpathlibr   r   Útypingr   r   r   Úurllib.parser   r   ÚfsspecÚhttpxÚfsspec.callbacksr   r   r   Úfsspec.configr   Úfsspec.utilsr   rP   r   Ú_commit_apir   r   Úerrorsr   r   r   r   r    Úfile_downloadr!   r"   Úhf_apir#   r$   r%   r&   r'   r(   r)   Úutilsr*   r+   r,   r-   r.   Úutils.insecure_hashlibr/   r1   rE   rY   rr   ÚAbstractFileSystemr\   rB   r^   r„   ÚspecÚAbstractBufferedFilerÀ   rÁ   rA   rU   rÍ  r|  rª   ry  rÃ  rr  ÚhffsrC   r<   r:   ú<module>rí     s«  ðÜ 	Û Û Ý ß .Ý  Ý ß (Ý Ý ß 'ß 'Ñ 'ß 'ã Û ß JÑ JÝ &Ý #å ß C÷õ ÷ 0ß v× vÑ vß jÕ jÝ 'ð ÷6ð 6ó ð6ð ô&Ð)Aó &ó ð&ð0 ô0Ð%=ó 0ó ð0ñ ˜×2Ñ2Ó3€ˆcÓ 3ô2ˆlô 2ôjB
�6×,Ñ,¸õ B
ôJ H&�v—{‘{×7Ñ7ô H&ôVR;˜VŸ[™[×=Ñ=ô R;ðj]˜Cð ] Có ]ð�#ð ˜#ó ð* ð *¨)°dÑ*:ð *¸xó *ðRˆ|ð R 3ð R¨cð R¸sð RÐPSó Ròñ ƒ~�r<   