Ë
    BêñiEñ  ã            
       ó0  — 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@ ddlAmBZB e G d„ d«      «       ZCe G d„ deC«      «       ZDe G d„ deC«      «       ZE eFejŽ                  «      ZHeeId<    G d„ deH«      ZJ G d „ d!ejŽ                  eJ¬"«      ZK G d#„ d$ej˜                  jš                  «      ZN G d%„ d&ej˜                  jš                  «      ZOd'ePd(ePfd)„ZQd*ePd(ePfd+„ZRd,ePd-eSdz  d(efd.„ZTd/eKd,ePd0ePd1eUd2ePf
d3„ZVd4„ ZW eK«       ZXy)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)Ú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ú/)r1   r2   Úrstrip©Úselfs    ú`/var/www/pod-logistic/pod-ai/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;   r9   r0   r0   $   s   … áià
ƒIØ
ƒIð6˜3ô 6r;   r0   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©Úinitr1   r2   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ÚgetrE   rF   rM   r1   rG   ÚDEFAULT_REVISIONÚsafe_revisionrH   r2   )r8   Ú	repo_paths     r9   Ú__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?   r@   rA   r	   r1   r2   rM   rV   rB   r;   r9   rD   rD   /   sT   … áVàƒNØƒLØƒMØÓÙ˜5Ô!€Dˆ#Ó!Ù˜5Ô!€Dˆ#Ó!ñ !&¨d¸Ô ?€M�3˜‘:Ó?ó&r;   rD   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_idFrI   r1   c                 ó,   — d| j                   z   | _        y )Nzbuckets/)rY   r1   r7   s    r9   rV   z,HfFileSystemResolvedBucketPath.__post_init__O   s   € Ø §¡Ñ/ˆ�	r;   N)	r<   r=   r>   r?   r@   rA   r	   r1   rV   rB   r;   r9   rX   rX   H   s   … áRàƒNÙ˜5Ô!€Dˆ#Ó!ó0r;   rX   Ú_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      €r9   ra   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Úcachablerb   Ú_latestÚtypeÚ__call__Ú_get_instance_stateÚitemsÚsetattrÚ
_fs_token_Ústorage_argsÚstorage_options)
rc   rd   re   ÚskipÚfs_tokenÚfs_token_main_threadÚobjÚinstance_stateÚattrÚstate_values
             r9   rr   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?   ra   rr   Ú__classcell__©rf   s   @r9   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)
    ```
    rO   Ú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†   )r`   ra   r   ÚENDPOINTr…   r†   r&   Ú_apir‡   rˆ   Ú_repo_and_revision_exists_cacheÚ_bucket_exists_cacheÚdircache)r8   r…   r†   r‡   rˆ   rd   rx   rf   s          €r9   ra   zHfFileSystem.__init__Ò   sj   ø€ ô 	‰Ñ˜$Ð2 /Ò2Ø Ò6¤I×$6Ñ$6ˆŒØˆŒ
Ü 8°5Ô9ˆŒ	Ø$ˆŒØ&ˆÔð rtˆÔ,àNPˆÔ!ð :<ˆ�r;   Úthreading_identr3   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†   )rR   r   rŠ   Úsortedr.   r@   ÚencodeÚ	hexdigest)rc   r�   rd   re   ÚkeyÚtokenize_argsÚhs          r9   rj   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rE   rF   rG   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)rG   rE   Útimeout©TNF)rŒ   r‹   Ú	repo_infor   ÚHF_HUB_ETAG_TIMEOUTr   r*   r    )r8   rE   rF   rG   Úes        r9   Ú_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.rY   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   )r8   rY   rœ   s      r9   Ú_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-r2   c                 óX  — dt         dz  dt         dz  dt         dz  fd„}| j                  |«      }|st        d«      ‚|j                  d«      d   d	k(  rudj	                  |j                  d«      d
d «      }dj	                  |j                  d«      dd «      }| j                  |«      \  }}|st        ||«       t        ||¬«      S |j                  d«      d   dz   t        j                  j                  «       v r8d|vrt        d«      ‚|j                  dd
«      \  }}t        j                  |   }nt        j                  }|j                  d«      dkD  �r×ddj	                  |j                  d«      dd «      v rË|j                  dd
«      \  }}	d|	v rwt        j                  |	«      }
|
�J|d|
j!                  «       fv r6t        j"                  d|	«      j%                  d«      }|
j!                  «       }	n|	j                  dd
«      \  }	}nd} |t'        |	«      |«      }| j)                  |||«      \  }}|�sJt        ||«       �n<d}	dj	                  |j                  d«      dd «      }dj	                  |j                  d«      dd «      }|j                  d«      d   }dj	                  |j                  d«      d
d «      }|}|}| j)                  |||«      \  }}|s¡t+        |t,        t.        f«      r)|}|}| j)                  |||«      \  }}|sot        ||«       nbt        ||«       nU|}d}d|v r(|j                  dd
«      \  }}	 |t'        |	«      |«      }nd}	| j)                  |||«      \  }}|st        d«      ‚|�|nt        j0                  }t3        |||||	¬«      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.
        Úrevision_in_pathNrG   r3   c                 óD   — |�| �| |k7  rt        d| › d|› d�«      ‚|S | }|S )NzRevision specified in path ("z ") and in `revision` argument ("z") are not the same.)Ú
ValueError)r¢   rG   s     r9   Ú%_align_revision_in_path_with_revisionzHHfFileSystem.resolve_path.<locals>._align_revision_in_path_with_revision*  sS   € ØÐ#Ø#Ð/Ð4DÈÒ4PÜ$Ø7Ð8HÐ7IÐIiÐjrÐisð t-ð -óð ð ˆOð ,�ØˆOr;   z<Access to buckets and repositories lists is not implemented.r5   r   Úbucketsr   é   )rY   r2   z0Access to repositories lists is not implemented.rP   é   rO   )rM   )r@   Ú_strip_protocolÚNotImplementedErrorÚsplitÚjoinr    Ú_raise_file_not_foundrX   r   rQ   ÚvaluesÚREPO_TYPES_MAPPINGÚREPO_TYPE_MODELÚcountr#   ÚsearchÚgroupÚsubÚlstripr   r�   Ú
isinstancer   r*   rS   rD   )r8   r2   rG   r¥   rY   Úbucket_existsÚerrrE   rF   r¢   ÚmatchrH   Úrepo_and_revision_existÚrepo_id_with_namespaceÚpath_in_repo_with_namespaceÚrepo_id_without_namespaceÚpath_in_repo_without_namespaceÚ_s                     r9   Úresolve_pathzHfFileSystem.resolve_path  s·  € ð,		ÄCÈ$ÁJð 		ÔZ]Ð`dÑZdð 		ÔilÐosÑisó 		ð ×#Ñ# DÓ)ˆÙä%Ð&dÓeÐeØ�Z‰Z˜‹_˜QÑ 9Ò,ØŸ™ §¡¨C£°°1Ð!5Ó6ˆIØ—8‘8˜DŸJ™J s›O¨A¨BÐ/Ó0ˆDØ!%×!4Ñ!4°YÓ!?ÑˆM˜3Ù Ü% d¨CÔ0Ü1¸IÈDÔQÐQØ�Z‰Z˜‹_˜QÑ #Ñ%¬×)JÑ)J×)QÑ)QÓ)SÑSØ˜$‰ä)Ð*\Ó]Ð]Ø"Ÿj™j¨¨aÓ0‰OˆI�tÜ!×4Ñ4°YÑ?‰Iä!×1Ñ1ˆIØ�:‰:�c‹?˜QÓØ�c—h‘h˜tŸz™z¨#›¨r°Ð2Ó3Ñ3Ø,0¯J©J°s¸AÓ,>Ñ)�Ð)ØÐ*Ñ*Ü7×>Ñ>Ð?OÓP�EØÐ(¨X¸$ÀÇÁÃÐ9NÑ-Nä'B×'FÑ'FÀrÐK[Ó'\×'cÑ'cÐdgÓ'h˜Ø+0¯;©;«=Ñ(à9I×9OÑ9OÐPSÐUVÓ9WÑ6Ð(©,à#%�LÙ@ÄÐIYÓAZÐ\dÓe�Ø/3×/LÑ/LÈYÐX_ÐaiÓ/jÑ,Ð'¨Ú.Ü)¨$°Ö4à#'Ð Ø),¯©°$·*±*¸S³/À"À1Ð2EÓ)FÐ&Ø.1¯h©h°t·z±zÀ#³ÀqÀrÐ7JÓ.KÐ+Ø,0¯J©J°s«O¸AÑ,>Ð)Ø14·±¸$¿*¹*ÀS»/È!È"Ð:MÓ1NÐ.Ø0�Ø:�Ø/3×/LÑ/LÈYÐX_ÐaiÓ/jÑ,Ð'¨Ù.Ü! #Ô(?ÔARÐ'SÔTØ";˜Ø'E˜Ø59×5RÑ5RÐS\Ð^eÐgoÓ5pÑ2Ð/°Ù6Ü1°$¸Õ<ä-¨d°CÕ8àˆGØˆLØ�d‰{Ø,0¯J©J°s¸AÓ,>Ñ)�Ð)Ù@ÄÐIYÓAZÐ\dÓe‘à#'Ð Ø)-×)FÑ)FÀyÐRYÐ[cÓ)dÑ&Ð# QÙ*Ü)Ð*\Ó]Ð]à'Ð3‘8¼×9SÑ9SˆÜ1Ø�w ¨,ÐFVô
ð 	
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:   ri   Ú_parentr2   r¶   rD   rE   rF   rG   r�   rY   )r8   r2   Úresolved_paths      r9   Úinvalidate_cachezHfFileSystem.invalidate_cache|  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Æ   rG   )r‡   rª   rÈ   rÇ   )r8   r2   rÆ   r‡   rG   re   s         r9   Ú_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©rG   ©ÚdeleteÚcommit_messageÚcommit_description)rH   rF   r†   rE   rG   rÐ   rÑ   ©r2   )rÀ   r¶   rX   r‹   Úbatch_bucket_filesrY   r2   Údelete_filerH   rF   r†   rE   rG   rR   rÅ   r:   )r8   r2   rG   re   rÄ   s        r9   Ú_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×   rG   rÎ   )rH   zDelete ú zrecursively rO   Nzup to depth rÐ   rÑ   )rF   rE   r†   Ú
operationsrG   rÐ   rÑ   rÒ   )rÀ   Úexpand_pathr¶   rX   Úisdirr2   r‹   rÓ   rY   r   Úcreate_commitrF   rE   r†   rG   rR   rÅ   r:   )r8   r2   rÖ   r×   rG   re   rÄ   ÚpathsrÏ   Úpaths_in_reporH   rÚ   rÐ   s                r9   Ú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â   rG   NÚnamer   )rÀ   r:   Ú_ls_treer   r2   r­   rÃ   Úlen)	r8   r2   rá   râ   rG   re   rÄ   ÚoutÚos	            r9   Ú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   r¨   rq   Ú	directoryrä   Úlast_commitr5   T)rÖ   râ   rG   rˆ   r×   )ÚprefixrÖ   )rÖ   ÚexpandrG   rE   Úfile©rä   Úsizerq   Úblob_idÚlfsÚxet_hashrì   Úsecurity)rä   rñ   rq   rô   ÚmtimeÚuploaded_atr   ©rä   rñ   rq   Útree_idrì   )rä   rñ   rq   r÷   )-rˆ   rÀ   r:   r1   rŽ   Úextendr   ÚpopleftÚappendr¶   rD   rÃ   Úosr2   ÚcommonprefixÚendswithr   r6   ræ   r±   Ú
startswithÚlistri   rå   rX   Ú_list_bucket_tree_with_foldersrY   r‹   Úlist_repo_treerF   rG   rE   r(   rñ   rò   ró   rô   rì   rõ   r$   rö   r÷   r)   rù   Ú
setdefault)r8   r2   rÖ   râ   rG   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                             r9   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   r5   r   Nrë   )rq   r2   r÷   zFile not found in bucket 'z': 'ú')r‹   Úlist_bucket_treer±   rü   r  r   r2   Úparentsr%   r@   r÷   r   )r8   rY   rí   rÖ   Úbucket_filesÚbucket_foldersÚ	min_depthrç   Úbucket_entryÚparent_bucket_folder_strÚparent_bucket_folderÚbucket_folders               r9   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.
        rG   rÍ   N)rÀ   rR   r:   r`   Úwalk)r8   r2   rd   re   rf   s       €r9   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 )ah  
        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.

        Returns:
            `list[str]`: List of paths matching the pattern.
        rG   rÍ   r×   )rÀ   rR   r:   r`   Úglob)r8   r2   r×   re   rf   s       €r9   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×   rq   rë   rä   rG   rï   )r¤   rÀ   r:   rå   Úinfor   ÚFileNotFoundErrorr‘   )r8   r2   r×   r$  rá   râ   rG   re   rÄ   rç   rè   r	  Únamesrä   s                 r9   Ú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Ñ   rO   )Úsrc_path_in_reporH   Úsrc_revision)rF   rE   rG   rÐ   rÑ   rÚ   ÚrbN©Úpath_or_fileobjrH   rF   r†   rE   rG   rÐ   rÑ   rÒ   )rÀ   r¶   rX   rª   rE   rF   r‹   rÝ   rG   rR   r   rH   ÚopenÚreadÚupload_filer†   rÅ   r:   )r8   r*  r+  rG   re   Úresolved_path1Úresolved_path2Ú	same_reporÐ   ÚfÚcontents              r9   Ú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)r8   r2   re   r&  s       r9   ÚmodifiedzHfFileSystem.modifiedj  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ñ   rq   rì   )rE   rG   éÿÿÿÿ)ÚoidÚtitler=  )rù   rì   )râ   rä   )rî   rG   rE   rO   )rH   rM   r5   rï   rð   rø   ) rÀ   r:   rR   rˆ   r2   r¶   rD   r‹   Úlist_repo_commitsrF   rE   rG   r'   Ú	commit_idrB  Ú
created_atrX   rÃ   ré   rŽ   r­   Úget_paths_inforH   rM   r(   rñ   rò   ró   rô   rì   rõ   rù   )r8   r2   râ   rG   re   rÄ   rˆ   rç   rì   r  rè   Úout1Ú
paths_infor	  r  Úks                   r9   r&  zHfFileSystem.infoƒ  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)rR   rÅ   r&  ÚOSError)r8   r2   re   s      r9   Ú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.
        rq   rë   F©r&  rK  ©r8   r2   s     r9   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.
        rq   rï   FrN  rO  s     r9   ÚisfilezHfFileSystem.isfile  s1   € ð	Ø—9‘9˜T“? 6Ñ*¨fÑ4Ð4øÜò 	Ùð	úrP  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/)rE   rG   r…   z/tree/r   )rÀ   r¶   rX   r…   rY   r   r2   r!   rF   rH   rE   rG   rÜ   Úreplace)r8   r2   rÄ   Úurls       r9   rU  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.

        rG   r   )ÚcallbackÚoutfileT)Úexist_okNFÚwbrÍ   rñ   )rU  Ú	temp_fileÚdisplayed_filenameÚexpected_sizeÚresume_sizeÚheadersÚ	_tqdm_bar)rR   ÚsetÚkeysr¶   r   r   ræ   r`   Úget_filer   rÜ   rý   Úmakedirsr@   r   r2   Údirnamer2  ÚtellrÀ   r&  Úset_sizer"   rU  r:   r‹   Ú_build_hf_headersÚtqdmÚseekÚclose)r8   ÚrpathÚlpathrW  rX  re   rG   Úunhandled_kwargsÚ
close_fileÚinitial_posÚresolve_remote_pathr]  rf   s               €r9   rc  zHfFileSystem.get_fileH  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ª   r7   s    r9   ÚtransactionzHfFileSystem.transaction†  s   € ô "Ð"LÓMÐMr;   c                 ó   — t        d«      ‚)z@Begin write transaction for deferring files, non-context versionrs  rt  r7   s    r9   Ústart_transactionzHfFileSystem.start_transaction‘  s   € ô "Ð"LÓMÐMr;   c                 óp   — t         t        | «      | j                  | j                  | j	                  «       ffS r_   )Úmake_instancerq   rw   rx   rs   r7   s    r9   Ú
__reduce__zHfFileSystem.__reduce__—  s9   € äÜ�‹JØ×ÑØ× Ñ Ø×$Ñ$Ó&ð	
ð 
ð 	
r;   c                 ó€   — t        | j                  «      t        | j                  «      t        | j                  «      dœS )N)rŽ   rŒ   r�   )r   rŽ   rŒ   r�   r7   s    r9   rs   z HfFileSystem._get_instance_state   s4   € ä  §¡Ó/Ü/7¸×8\Ñ8\Ó/]Ü$,¨T×-FÑ-FÓ$Gñ
ð 	
r;   r_   )r/  NN)FNN)TFN)FFNNN)NFFFN)FN©r3   N)5r<   r=   r>   r?   Úroot_markerÚprotocolr@   ÚboolÚintra   Úclassmethodrj   ÚtupleÚ	Exceptionr�   r    rD   rX   rÀ   rÅ   r   rË   rÕ   rà   r  Údictr   ré   rå   r   r$   r%   r  r   r!  r#  r)  r:  r
   r>  r&  rL  rÜ   rR  rU  r   rc  Úpropertyru  rw  rz  rs   r€   r�   s   @r9   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ñf
Øðf
Ø#&¨¡:ðf
à	+Ð.LÑ	Lóf
ñP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Úfsr2   rG   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Æ   rO   úB.
Make sure the repository and revision exist before writing data.)rÀ   rÄ   r'  rR   r`   ra   r:   )r8   rˆ  r2   rG   re   rœ   rf   s         €r9   ra   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Ä   )Úhasattrr`   Ú__del__©r8   rf   s    €r9   r�  zHfFileSystemFile.__del__µ  s   ø€ Ü�t˜_Ô-àÜ‰w‰Ó Ð r;   ÚstartÚendr3   c                 óì   — dd|› d|dz
  › �i| j                   j                  j                  «       ¥}| j                  «       }t	        d||t
        j                  ¬«      }t        |«       |j                  S )NÚrangeúbytes=ú-r   ÚGET©r_  r˜   )	rˆ  r‹   rh  rU  r,   r   ÚHF_HUB_DOWNLOAD_TIMEOUTr+   r9  )r8   r‘  r’  r_  rU  Úrs         r9   Ú_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ÚNamedTemporaryFiler[  r7   s    r9   Ú_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Ñ   r0  rÒ   )Úbufferrj  r3  r[  Úwriterk  r¶   rÄ   rX   rˆ  r‹   rÓ   rY   rä   r2   r4  rH   rF   r†   rE   rG   re   rR   rý   ÚremoverÅ   r:   )r8   r   Úblocks      r9   Ú_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/  Nr@  r   )r‡   )rÆ   Úlocrˆ  r2  r2   r3  ræ   r`   )r8   Úlengthr8  rç   rf   s       €r9   r3  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ˆ  rU  r2   r7   s    r9   rU  zHfFileSystemFile.urlï  ó   € Ø�w‰w�{‰{˜4Ÿ9™9Ó%Ð%r;   r_   r|  )F©r@  )r<   r=   r>   rƒ   r@   ra   r�  r€  Úbytesr›  rŸ  r  r§  r3  rU  r€   r�   s   @r9   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ˆ  r2   rÆ   rG   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Æ   rO   r‹  )rä   rñ   ©rÆ   r‡   r±  )r¤   rÀ   rÄ   r'  rR   r:   Údetailsr`   ra   Úresponser   Ú_exit_stackÚ_stream_iteratorÚ	bytearrayÚ_stream_buffer)
r8   rˆ  r2   rÆ   rG   r‡   r±  re   rœ   rf   s
            €r9   ra   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¤   )r8   r©  r»  s      r9   rj  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ƒ  rk  )r8   rª  Úretried_oncerç   s       r9   r3  zHfFileSystemStreamFile.read  s³   € ð �=‰=Ð Ø×!Ñ!Ô#àˆØð$Ø—=‘=Ð(¨D×,AÑ,AÐ,IØØ×,Ñ,¨T×-BÑ-BÀFÓK�Ø—’œC ›HÑ$•Ø�
øÜò $Ø—=‘=Ð,Ø—M‘M×'Ñ'Ô)ÙØà×%Ñ%Ô'Ø#’ð$úð s   ¡A6 º;A6 Á6AB=Â<B=Úiteratorr3   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æ   )r8   rÁ  rª  ÚbufÚchunkÚresultÚneeds          r9   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¬  r7   s    r9   rU  zHfFileSystemStreamFile.url\  r­  r;   c                 ón   •— t        | d«      sy | j                  j                  «        t        ‰| �  «       S r�  )rŽ  r·  rk  r`   r�  r�  s    €r9   r�  zHfFileSystemStreamFile.__del___  s/   ø€ Ü�t˜_Ô-àØ×Ñ×ÑÔ Ü‰w‰Ó Ð r;   c                 ó”   — t         | j                  | j                  | j                  | j                  | j
                  j                  ffS r_   )Úreopenrˆ  r2   rÆ   Ú	blocksizeÚcacherä   r7   s    r9   rz  z!HfFileSystemStreamFile.__reduce__f  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¸  rU  rˆ  r‹   rh  r©  r·  Úenter_contextr-   r   r™  r¶  r+   r   Ústatus_codeÚ
iter_bytes)r8   rU  r_  rœ   s       r9   r¾  z'HfFileSystemStreamFile._open_connectioni  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ƒ   r@   r€  ra   rj  r3  r   r¯  r¿  rU  r�  rz  r¾  r€   r�   s   @r9   rÈ   rÈ   ó  s°   ø„ ð
 Ø#ØØ ñ!*àð!*ð ð!*ð ð	!*ð
 ˜‘*ð!*ð ð!*ð õ!*ñF:˜ð : Só :ñ$˜3ó $ñ8 ¨(°5©/ð  À3ð  ÐPUó  ðD&�Só &ô!òXö;r;   rÈ   rG   r3   c                 óF   — t        j                  | «      r| S t        | «      S r_   )r#   r¹   Ú
safe_quoterÍ   s    r9   rT   rT   ˆ  s    € Ü2×8Ñ8¸ÔBˆ8Ð\Ì
ÐS[ÓH\Ð\r;   Úsc                 ó   — t        | d¬«      S )NrO   )Úsafe)r   )rÔ  s    r9   rÓ  rÓ  Œ  s   € Ü�˜ÔÐr;   r2   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'  )r2   r¸   Úmsgs      r9   r­   r­   �  s\   € Ø
€CÜ�#Ô.Ô/Ø�Ð-Ð.‰Ü	�CÔ.Ô	/Ø�Ð+Ð,‰Ü	�CÔ*Ô	+Ø�Ð.Ð/ˆÜ
˜CÓ
  cÐ)r;   rˆ  rÆ   r‡   r±  c                 ó,   — | j                  ||||¬«      S )Nr´  )r2  )rˆ  r2   rÆ   r‡   r±  s        r9   rÊ  rÊ  ›  s   € Ø�7‰7�4˜d¨zÀjˆ7ÓQÐQr;   c                 ó`   —  | |i |¤Ž}|j                  «       D ]  \  }}t        |||«       Œ |S r_   )rt   ru   )rc   rd   re   r}   rˆ  r~   r   s          r9   ry  ry  Ÿ  s?   € Ù	ˆdÐ	�fÑ	€BØ+×1Ñ1Ó3ò 'ÑˆˆkÜ��D˜+Õ&ð'à€Ir;   )Yrý   r�  rk   Ú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   rO   r   Ú_commit_apir   r   Úerrorsr   r   r   r   r    Úfile_downloadr!   r"   Úhf_apir#   r$   r%   r&   r'   r(   r)   Úutilsr*   r+   r,   r-   Úutils.insecure_hashlibr.   r0   rD   rX   rq   ÚAbstractFileSystemr[   rA   r]   rƒ   ÚspecÚAbstractBufferedFilerÇ   rÈ   r@   rT   rÓ  rƒ  r­   r€  rÊ  ry  ÚhffsrB   r;   r9   ú<module>ró     s«  ðÜ 	Û Û Ý ß .Ý  Ý ß (Ý Ý ß 'ß 'Ñ 'ß 'ã Û ß JÑ JÝ &Ý #å ß C÷õ ÷ 0ß v× vÑ vß \Ó \Ý 'ð ÷6ð 6ó ð6ð ô&Ð)Aó &ó ð&ð0 ô0Ð%=ó 0ó ð0ñ ˜×2Ñ2Ó3€ˆcÓ 3ô2ˆlô 2ôjY
�6×,Ñ,¸õ Y
ôx 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;   