
    wiҼ              
       p   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 d dlmZmZmZmZmZmZmZmZ d dlmZm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* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5  ej6        dej7                  Z8e G d d                      Z9 G d dej:                  Z; G d dej<        j=                  Z> G d dej<        j=                  Z?de@de@fdZAde@de@fd ZBd!e@d"eeC         defd#ZDd$e;d!e@d%e@d&eEd'e@f
d(ZFd) ZGdS )*    N)deque)	dataclassfield)datetime)chain)Path)AnyDictIteratorListNoReturnOptionalTupleUnion)quoteunquote)_DEFAULT_CALLBACKNoOpCallbackTqdmCallback)
isfilelike)Response   )	constants)CommitOperationCopyCommitOperationDelete)EntryNotFoundErrorRepositoryNotFoundErrorRevisionNotFoundError)
hf_hub_urlhttp_get)HfApiLastCommitInfoRepoFile)HFValidationErrorhf_raise_for_statushttp_backoffzy
    (^refs\/convert\/\w+)     # `refs/convert/parquet` revisions
    |
    (^refs\/pr\/\d+)          # PR revisions
    c                   x    e Zd ZU dZeed<   eed<   eed<   eed<    edd          Zee         ed	<   d
efdZ	dS )HfFileSystemResolvedPathzUData structure containing information about a resolved Hugging Face file system path.	repo_typerepo_idrevisionpath_in_repoNF)defaultrepr_raw_revisionreturnc                    t           j                            | j        d          | j        z   }| j        r'| d| j         d| j                             d          S | j        t           j	        k    r4| dt          | j                   d| j                             d          S | d| j                             d          S )N @/)r   REPO_TYPES_URL_PREFIXESgetr)   r*   r/   r,   rstripr+   DEFAULT_REVISIONsafe_revision)self	repo_paths     v/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/huggingface_hub/hf_file_system.py	unresolvez"HfFileSystemResolvedPath.unresolve0   s    599$."MMPTP\\	 	BJJ$"4JJt7HJJQQRUVVV]i888TT-">">TTARTT[[\_```55$"355<<SAAA    )
__name__
__module____qualname____doc__str__annotations__r   r/   r   r=    r>   r<   r(   r(   $   s         __NNNLLLMMM $)5E#B#B#BM8C=BBBB3 B B B B B Br>   r(   c                       e Zd ZdZdZdZdddddee         dee	edf         dee
         f fd	Zd
ededee         dee	ee         f         fdZd2dedee         defdZd2dee         ddfdZ	 	 	 d3dededee         dee
         ddf
dZd2dedee         ddfdZ	 	 	 d4dede	dee
         dee         ddf
dZ	 d5dede	de	dee         deeeeeef         f                  f
dZ	 	 	 	 	 d6dede	de	dee         de	dee
         fd Zdedeeeee         ee         f                  f fd!Zdedee         f fd"Z	 	 	 	 	 d7dedee
         d#e	de	de	dee         deee         eeeeef         f         f         fd$Zd2d%ed&edee         ddfd'Zdedefd(Z d8dede	dee         deeef         fd)Z!d* Z"d+ Z#d, Z$dedefd-Z%e&dfd9 fd.Z'e(d/             Z)d0 Z*d1 Z+ xZ,S ):HfFileSystema%  
    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.

    Args:
        token (`str` or `bool`, *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`.
        endpoint (`str`, *optional*):
            Endpoint of the Hub. Defaults to <https://huggingface.co>.
    Usage:

    ```python
    >>> from huggingface_hub import HfFileSystem

    >>> fs = HfFileSystem()

    >>> # List files
    >>> fs.glob("my-username/my-model/*.bin")
    ['my-username/my-model/pytorch_model.bin']
    >>> fs.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 fs.open("my-username/my-model/pytorch_model.bin") as f:
    ...     data = f.read()
    >>> with fs.open("my-username/my-model/pytorch_model.bin", "wb") as f:
    ...     f.write(data)
    ```
    r2   hfN)endpointtoken
block_sizerI   rJ   rK   c                     t                      j        |i | |pt          j        | _        || _        t          ||          | _        || _        i | _	        i | _
        d S )N)rI   rJ   )super__init__r   ENDPOINTrI   rJ   r!   _apirK   _repo_and_revision_exists_cachedircache)r:   rI   rJ   rK   argsstorage_options	__class__s         r<   rN   zHfFileSystem.__init__c   sl     	$2/222 6I$6
85999	$  	, :<r>   r)   r*   r+   r0   c                    |||f| j         vr	 | j                            |||t          j                   d| j         |||f<   d| j         ||d f<   nj# t
          t          f$ r(}d|f| j         |||f<   d|f| j         ||d f<   Y d }~n6d }~wt          $ r&}d|f| j         |||f<   d| j         ||d f<   Y d }~nd }~ww xY w| j         |||f         S )N)r+   r)   timeout)TNF)rQ   rP   	repo_infor   HF_HUB_ETAG_TIMEOUTr   r$   r   )r:   r)   r*   r+   es        r<   _repo_and_revision_existz%HfFileSystem._repo_and_revision_existy   sT    w)1UUU^	##h)YMj $    Xb4i(5STS]4i$5OPP ,->? \ \ \W\^_W_4i(5STSXZ[S[4i$5OPPPPPP( ^ ^ ^W\^_W_4i(5STS]4i$5OPPPPPP^ 3Y4RSSs#   (A B8"BB8B33B8pathc                 h   dt           t                   dt           t                   dt           t                   fd}|                     |          }|st          d          |                    d          d         dz   t
          j                                        v r?d|vrt          d          |                    dd          \  }}t
          j        |         }nt
          j	        }|
                    d          dk    r&d	|v r|                    d	d          \  }}d|v rt                              |          }|[|d
|                                fv rCt                              d|                              d          }|                                }n|                    dd          \  }}nd} |t!          |          |          }|                     |||          \  }	}
|	st%          ||
           nd
}d                    |                    d          d
d                   }d                    |                    d          dd
                   }|                    d          d         }d                    |                    d          dd
                   }|}|}|                     |||          \  }	}
|	s]t)          |
t*          t,          f          r1|}|}|                     |||          \  }	}|	st%          ||
           nyt%          ||
           nh|}d}d	|v r3|                    d	d          \  }} |t!          |          |          }nd
}|                     |||          \  }	}|	st          d          ||nt
          j        }t1          |||||          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_pathr+   r0   c                 L    || | |k    rt          d|  d| d          n| }|S )NzRevision specified in path ("z ") and in `revision` argument ("z") are not the same.)
ValueError)r^   r+   s     r<   %_align_revision_in_path_with_revisionzHHfFileSystem.resolve_path.<locals>._align_revision_in_path_with_revision   s^     ##/4D4P4P$-8H - -jr - - -  
 ,Or>   z0Access to repositories lists is not implemented.r4   r   r   r3   Nr2      )r/   )r   rC   _strip_protocolNotImplementedErrorsplitr   r5   valuesREPO_TYPES_MAPPINGREPO_TYPE_MODELcountSPECIAL_REFS_REVISION_REGEXsearchgroupsublstripr   r[   _raise_file_not_foundjoin
isinstancer   r$   r8   r(   )r:   r\   r+   ra   r)   r*   r^   matchr,   repo_and_revision_existerrrepo_id_with_namespacepath_in_repo_with_namespacerepo_id_without_namespacepath_in_repo_without_namespace_s                   r<   resolve_pathzHfFileSystem.resolve_path   s   (	&sm	7?}	c]	 	 	 	 ##D)) 
	2%&XYYYZZ__Q#%)J)Q)Q)S)SSS$)*\]]]"jja00OIt!4Y?II!1I::c??Qd{{,0JJsA,>,>))***7>>?OPPE(X$9N-N-N'B'F'FrK['\'\'c'cdg'h'h+0;;==((9I9O9OPSUV9W9W6(,,#%L@@IYAZAZ\dee/3/L/LYX_ai/j/j,'. 5)$444#' ),$**S//"1"2E)F)F&.1hhtzz#qrr7J.K.K+,0JJsOOA,>)14$**S//!"":M1N1N.0:/3/L/LYX_ai/j/j,'. 9!#(?AR'STT 9";'E595R5RS\^ego5p5p2/6 =1$<<<-dC888GLd{{,0JJsA,>,>))@@IYAZAZ\dee#' )-)F)FyRY[c)d)d&#Q* ^)*\]]]'3889S'	7Hlbrssssr>   c                    |s4| j                                          | j                                         dS |                     |          }|                                }|r2| j                             |d           |                     |          }|2|j        sW| j                            |j        |j	        dfd           | j                            |j        |j	        |j
        fd           dS dS )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)rR   clearrQ   rz   r=   pop_parentr,   r)   r*   r+   )r:   r\   resolved_paths      r<   invalidate_cachezHfFileSystem.invalidate_cache   s     	M!!!06688888 --d33M **,,D *!!$---||D))  *
 !- 488-:QS`Shjn9oquvvv488",m.C]E[\^b     r>   rbmodeHfFileSystemFilec                     ||n| j         }|||d<   d|v rt          d          |dk    rt          | |f||d|S t          | |f||d|S )NrK   az/Appending to remote files is not yet supported.r   )r   r+   )rK   rd   HfFileSystemStreamFiler   )r:   r\   r   r+   rK   kwargss         r<   _openzHfFileSystem._open  s     $.#9ZZt
!#-F< $;;%&WXXX??)$]4(]]V\]]]#D$WTHWWPVWWWr>   c                 D   |                      ||          }| j                            |j        |j        | j        |j        |j        |                    d          |                    d                     | 	                    |
                                           d S )Nr+   commit_messagecommit_description)r,   r*   rJ   r)   r+   r   r   r\   )rz   rP   delete_filer,   r*   rJ   r)   r+   r6   r   r=   )r:   r\   r+   r   r   s        r<   _rmzHfFileSystem._rm  s    ))$)BB	&3!)*#-"+!::&677%zz*>?? 	 	
 	
 	
 	=#:#:#<#<=====r>   F	recursivemaxdepthc                                           ||          }                     ||||          } fd|D             }d |D             }	d| d}
|
|rdndz  }
|
|d
| dndz  }
 j                            |j        |j         j        |	|j        |                    d|
          |                    d                      	                    |
                                           d	S )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   r+   c                 n    g | ]1}                     |                              |          j        2S rE   )isdirrz   r,   ).0r\   r:   s     r<   
<listcomp>z#HfFileSystem.rm.<locals>.<listcomp>C  s?    hhh$W[WaWabfWgWgh**400=hhhr>   c                 .    g | ]}t          |           S ))r,   )r   )r   r,   s     r<   r   z#HfFileSystem.rm.<locals>.<listcomp>D  s$    iii<+FFFiiir>   zDelete  zrecursively r2   Nzup to depth r   r   )r*   r)   rJ   
operationsr+   r   r   r   )rz   expand_pathrP   create_commitr*   r)   rJ   r+   r6   r   r=   )r:   r\   r   r   r+   r   r   pathspaths_in_repor   r   s   `          r<   rmzHfFileSystem.rm&  s1   6 ))$)BB  XX` aahhhh%hhhii[hiii
*4***I=..2=8L44444RTT	!)#-*!"+!::&6GG%zz*>?? 	  	
 	
 	
 	=#:#:#<#<=====r>   Tdetailrefreshc                    |                      |          }|                                	  | j        f||d|}n|# t          $ ro |j        st          d            | j        |                               f||d|}fd|D             }t          |          dk    rt          d           Y nw xY w|r|nd |D             S )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   r+   Nc                 ,    g | ]}|d          k    |S namerE   r   or\   s     r<   r   z#HfFileSystem.ls.<locals>.<listcomp>w  s'    777QvY$%6%61%6%6%6r>   r   c                     g | ]
}|d          S r   rE   r   r   s     r<   r   z#HfFileSystem.ls.<locals>.<listcomp>z  s    ":":":1V9":":":r>   )rz   r=   _ls_treer   r,   ro   r~   len)r:   r\   r   r   r+   r   r   outs    `      r<   lszHfFileSystem.lsT  s   4 ))$)BB&&((		2$-SgSSFSSCC! 	2 	2 	2 - 2%dD111$-T 2 2aGhaaZ`aaC7777c777C3xx1}}%dD111	2 :ss":":c":":"::s   A   A6B98B9expand_infoc           
                                ||          }|                                }t          |j        |j        |j        d|j                                                  }g }	| j        v rF|sC j        |         }
|	                    |
           g }|rdt          fd|
D                       }|r|
                                \  }||k    rt|d          j        vr|                    |d                    nI j        |d                  }
|	                    |
           |                    fd|
D                        |g }|r fd|	D             }|r|s|rN|rKt          j                            ||z             }|                    d	          s||k    s|t!          ||          v r|                    d	          n                     |          |/t'          |          d                              d	          }||z  }fd
|	D             }	t+           j                  D ]5}|                    d	z             r j                            |d            6 j                            d            |	                                         |d|||                     n! j                            |j        |j        |||j        |j                  }|D ]}|d	z   |j        z   }t9          |t:                    r$||j        d|j        |j         |j!        |j"        d}n|dd|j#        |j!        d}                     |d                   } j        $                    |g                               |           |t'          |          d                              d	          ||k    r|	                    |           |	S )Nr   r2   r,   r/   rb   c                 0    g | ]}|d          dk    |fS type	directoryrE   r   	path_infodepths     r<   r   z)HfFileSystem._ls_tree.<locals>.<listcomp>  s/    oooIiX^N_cnNnNneY'NnNnNnr>   r   c                 6    g | ]}|d          dk    dz   |fS )r   r   r   rE   r   s     r<   r   z)HfFileSystem._ls_tree.<locals>.<listcomp>  s<     !" !" !"(1'0'8K'G'G &+QY	$:'G'G'Gr>   c                 V    g | ]%}|d          
                     |d                   &S )last_commitNr   )r~   )r   r   r:   s     r<   r   z)HfFileSystem._ls_tree.<locals>.<listcomp>  s3    $f$f$fQ}M]MeT\\!F)%<%<MeMeMer>   r4   c                 P    g | ]"}|d                               dz              |#S )r   r4   )
startswith)r   r   common_paths     r<   r   z)HfFileSystem._ls_tree.<locals>.<listcomp>  s6    UUUQQvY-A-A+PSBS-T-TUqUUUr>   T)r   r   r+   r   r   )r   expandr+   r)   filer   sizer   blob_idlfsr   securityr   r   r   r   r   tree_idr   )%rz   r=   r(   r)   r*   r+   r/   rR   extendr   popleftappendosr\   commonprefixendswithr   r7   r~   r   ri   listr   r}   r   rP   list_repo_treer,   rq   r#   r   r   r   r   r   r   
setdefault)r:   r\   r   r   r+   r   r   r   	root_pathr   cached_path_infosdirs_not_in_dircachedirs_to_visitdir_infodirs_not_expandedcommon_prefixcommon_path_depthcached_pathtreer   
cache_pathcache_path_infoparent_pathr   r   s   `                      @@r<   r   zHfFileSystem._ls_tree|  s    ))$)BB&&((,#!"'5
 
 
 )++ 	 4=    $d 3JJ()))#%    %oooo9Jooo! ! $ &3&;&;&=&=OE8'5H+<+<#F+4=@@0778HIIII04hv>N0O-JJ'8999)00!" !" !" !"5F!" !" !"   $   !# g$f$f$f$fc$f$f$f! 2  HY  !# 4 45IL]5] ^ ^ %--c225$	11$.BDU(V(VVV "((--- m44  '(3CIIKK(@(F(Fs(K(K% 11HUUUU#UUU#'#6#6 = =K"--kC.?@@ =))+t<<<!!+t444

MM#"+ $!)$/!) "  	 	 	 9++%*#"&/'1 ,  D " 0 0	&_y~=
i22  * ) &#,#4(}'0'<$-$6' 'OO !+ ! +#,#4'0'<' 'O #ll?6+BCC((b99@@QQQ"3t99;;/55c::#u'8'8JJ///
r>   c              /      K   |                      ||                    d                                                    } t                      j        |g|R i |E d{V  dS )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.
        r+   r   N)rz   r6   r=   rM   walk)r:   r\   rS   r   rU   s       r<   r   zHfFileSystem.walk  sw         

:0F0F GGQQSS577<6t666v66666666666r>   c                     |                      ||                    d                                                    } t                      j        |f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.
        r+   r   )rz   r6   r=   rM   glob)r:   r\   r   rU   s      r<   r   zHfFileSystem.glob  sS       

:0F0F GGQQSSuww|D++F+++r>   withdirsc                    ||dk     rt          d          |                     ||          }|                                }	  | j        |fd||j        |d||sd D             n) | j        |fd|j        i|}	|	d	         d
k    r|	gz   nd D             nE# 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 nw xY wt                    }
|s|
S fd|
D             S )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.
        Nr   zmaxdepth must be at least 1r   T)r   r   r+   r   c                 *    g | ]}|d          dk    |S r   rE   r   s     r<   r   z%HfFileSystem.find.<locals>.<listcomp>E  s&    BBBQ6k)A)Aq)A)A)Ar>   r+   r   r   c                      i | ]}|d          |S r   rE   r   s     r<   
<dictcomp>z%HfFileSystem.find.<locals>.<dictcomp>J  s    ---A1V9a---r>   r   c                 "    i | ]}||         S rE   rE   )r   r   r   s     r<   r   z%HfFileSystem.find.<locals>.<dictcomp>O  s    666D#d)666r>   )	r`   rz   r=   r   r+   infor   FileNotFoundErrorsorted)r:   r\   r   r   r   r   r+   r   r   r   namesr   s              @r<   findzHfFileSystem.find  s   @ HqLL:;;;))$)BB&&((	.$- $g@Vai ms C  UBB#BBB &DIdVV]5KVvVV	+4V+<+K+KykC''QT-----CC! " 	 	 	49T??H???G6QQ*CCC$   	" s 	7L66666666s6   B" "
C$-!CC$CC$CC$#C$path1path2c                    |                      ||          }|                      ||          }|j        |j        k    o|j        |j        k    }|rd| d| }| j                            |j        |j        |j        |                    d|          |                    dd          t          |j        |j        |j                  g           n| 	                    |d	|j                  5 }	|	
                                }
d
d
d
           n# 1 swxY w Y   d| d| }| j                            |
|j        |j        | j        |j        |j        |                    d|          |                    d                     |                     |                                           |                     |                                           d
S )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 z to r   r   r2   )src_path_in_repor,   src_revision)r*   r)   r+   r   r   r   r   Npath_or_fileobjr,   r*   rJ   r)   r+   r   r   r   )rz   r)   r*   rP   r   r+   r6   r   r,   openreadupload_filerJ   r   r=   )r:   r   r   r+   r   resolved_path1resolved_path2	same_repor   fcontents              r<   cp_filezHfFileSystem.cp_fileQ  s<     **58*DD**58*DD $(@@u^E[_m_uEu 	  	7U7777NI##&.(2'0%zz*:NKK#)::.BB#G#G')7)D%3%@%3%<   $     5$1HII #Q&&((# # # # # # # # # # # # # # #7U7777NI!! '+8&.j(2'0%zz*:NKK#)::.B#C#C " 	 	 	 	>#;#;#=#=>>>>#;#;#=#=>>>>>s   .DDDc                 F     | j         |fi i |ddi}|d         d         S )ai  
        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 commit date of the file.
        r   Tr   dater   )r:   r\   r   r   s       r<   modifiedzHfFileSystem.modified  s=     tyAA!@F!@M4!@!@AAM"6**r>   c                 f   |                      |          }|                                |                    dd          }|j        sedddd|rZ| j                            |j        |j        |j                  d	         }i dt          |j
        |j        |j        
          dn}d|                               }|s|| j        vr|                     |           || j        v r3fd| j        |         D             }	|	st!          d           |	d         |s|rr d         | j                            |j        |j        ||j        |j                  }
|
st!          d           |
d         }t%          |j        |j        |j        d|j                                                  }t)          |t*                    r/|dz   |j        z   |j        d|j        |j        |j        |j        dn|dz   |j        z   dd|j        |j        d|sfddD             J S )a   
        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.

        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   Fr   r   N)r   r   r   r   )r)   r+   )oidtitler   )r   r   c                 ,    g | ]}|d          k    |S r   rE   r   s     r<   r   z%HfFileSystem.info.<locals>.<listcomp>  s'    SSSa6dARARARARARr>   r   )r   r+   r)   r2   r   r4   r   r   r   c                 "    i | ]}||         S rE   rE   )r   kr   s     r<   r   z%HfFileSystem.info.<locals>.<dictcomp>  s    GGG1c!fGGGr>   )r   r   r   )rz   r=   r6   r,   rP   list_repo_commitsr*   r)   r+   r"   	commit_idr  
created_atr~   rR   r   ro   get_paths_infor(   r/   rq   r#   r\   r   r   r   r   r   r   )r:   r\   r   r+   r   r   r   r   r   out1
paths_infor   r   r   s    `           @r<   r   zHfFileSystem.info  s   * ))$)BB&&((jj5
 
 ) D	H ##	 C  
"i99!)]5LWdWm :  ##1'19JQ\Qg$ $ $   C,,t,,K %;dm#C#C$$$dm++SSSS4=#=SSS 6)$5551g %H#+++#+#mBTB\!Y55!)!.&*3+5 6  
 " 6)$555&qM	4!+!)!*!#"/"=   )++  i22  )C). @ ) &#,#4(}'0'<$-$6 CC !*C). @ ! +#,#4'0'< C # HGGGG.FGGGC
r>   c                     	 |                     dd          r|                     |            | j        |fi | dS #  Y dS 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)r6   r   r   )r:   r\   r   s      r<   existszHfFileSystem.exists  s`     	zz)U++ ,%%d+++DId%%f%%%4	55s	   9= Ac                 d    	 |                      |          d         dk    S # t          $ r Y dS 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.
        r   r   F)r   OSErrorr:   r\   s     r<   r   zHfFileSystem.isdir  sC    	99T??6*k99 	 	 	55	s   ! 
//c                 R    	 |                      |          d         dk    S #  Y dS 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.
        r   r   Fr   r  s     r<   isfilezHfFileSystem.isfile&  s1    	99T??6*f44	55s   ! &c                     |                      |          }t          |j        |j        |j        |j        | j                  }|                     |          r|                    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.
        )r)   r+   rI   z	/resolve/z/tree/r   )	rz   r   r*   r,   r)   r+   rI   r   replace)r:   r\   r   urls       r<   r  zHfFileSystem.url8  sx     ))$//!&#-"+]
 
 
 ::d 	8++k8Q77C
r>   c                    |                     d          }t          |                                          dhz
  }t          |t          t
          f          rt          |          dk    r t                      j        ||f||d|S t          |          r|}n-| 
                    |          rt          j        |d           dS t          |t          t          f          r3t          j        t          j                            |          d           d}|t#          |d          }d}|                                }	|                     ||	          }
|                     ||	          d
         }|                    |           	 t-          t/          |
j        |
j        |
j        |
j        | j                  |||d| j                                        t          |t
                    r|j        nd           |                     |	           |r|!                                 dS dS # |r|!                                 w w xY w)aC  
        Copy single remote file to local.

        > [!WARNING]
        > Note: When possible, use `HfApi.hf_hub_download()` 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.

        r+   r   )callbackoutfileT)exist_okNFwbr   r   r*   r+   filenamer)   rI   )r  	temp_filedisplayed_filenameexpected_sizeresume_sizeheaders	_tqdm_bar)"r6   setkeysrq   r   r   r   rM   get_filer   r   r   makedirsrC   r   r\   dirnamer   tellrz   r   set_sizer    r   r*   r+   r,   r)   rI   rP   _build_hf_headerstqdmseekclose)r:   rpathlpathr  r  r   r+   unhandled_kwargs
close_fileinitial_posresolve_remote_pathr  rU   s               r<   r%  zHfFileSystem.get_fileO  s[   $ ::j))v{{}}--<(\<$@AA 	`SIYEZEZ]^E^E^ $577#E5_8W__X^___ e 	GGZZ 	K----4ec4[)) 	?K..>>>> 
?5$''GJllnn #///II		%(	;;FC-(((	 /7090=1;!]   "#(+	3355+5h+M+MW(--SW    LL%%%      z   s   B	H. .Ic                      t          d          )zA 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.rd   r:   s    r<   transactionzHfFileSystem.transaction  s     ""LMMMr>   c                      t          d          )z@Begin write transaction for deferring files, non-context versionr5  r6  r7  s    r<   start_transactionzHfFileSystem.start_transaction  s     ""LMMMr>   c                 d    t           t          |           | j        | j        | j        | j        dffS )N)rR   rQ   )make_instancer   storage_argsrT   rR   rQ   r7  s    r<   
__reduce__zHfFileSystem.__reduce__  s>    JJ  M373W 	
 
 	
r>   N)r   NN)FNN)TFN)FFNFN)NFFFN)FNr0   N)-r?   r@   rA   rB   root_markerprotocolr   rC   r   boolintrN   r   	Exceptionr[   r(   rz   r   r   r   r   r   r
   r	   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r%  propertyr8  r:  r>  __classcell__rU   s   @r<   rG   rG   :   s       # #J KH
 #'(,$(< < < 3-< T3_%	<
 SM< < < < < <,TT'*T6>smT	tXi((	)T T T T&]t ]t ]t ]tIa ]t ]t ]t ]t~ Xc] d    > "&$(X XX X 3-	X
 SMX 
X X X X$> > >x} >$ > > > >   "&"&,> ,>,> ,> 3-	,>
 3-,> 
,> ,> ,> ,>^ `d&; &;&;!%&;7;&;OWX[}&;	eCc3h'(	)&; &; &; &;V  "&!"&t tt t 	t
 3-t t 3-t t t tl7 7(5d3iQUVYQZAZ;[2\ 7 7 7 7 7 7 , ,49 , , , , , ,& #'"&=7 =7=7 3-=7 	=7
 =7 =7 3-=7 
tCy$sDcN233	4=7 =7 =7 =7~6? 6?S 6? 6? 6?[_ 6? 6? 6? 6?p+S +x + + + + ` ` `t `x} `bfgjlogobp ` ` ` `D  2  $  $     . /@ B  B  B  B  B  B  B H N N XNN N N

 

 

 

 

 

 

r>   rG   c                        e Zd Zddededee         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fsr\   r+   c                 (   	 |                     ||          | _        n># t          $ r1}d|                    dd          v rt          | d          | d }~ww xY w t	                      j        || j                                        fi | |  d S )Nr   wr   r2   B.
Make sure the repository and revision exist before writing data.)rz   r   r   r6   rM   rN   r=   )r:   rJ  r\   r+   r   rZ   rU   s         r<   rN   zHfFileSystemFile.__init__  s    	!#!I!ID  	 	 	fjj,,,,']]]  	 	T/99;;FFvFFFs     
A,AAc                 h    t          | d          sd S t                                                      S Nr   hasattrrM   __del__r:   rU   s    r<   rR  zHfFileSystemFile.__del__  .    t_-- 	Fww   r>   startendr0   c                 J   dd| d|dz
   i| j         j                                        }t          | j        j        | j        j        | j        j        | j        j        | j         j	                  }t          d||t          j                  }t          |           |j        S )Nrangezbytes=-r   r  GET)r!  rW   )rJ  rP   r*  r   r   r*   r+   r,   r)   rI   r&   r   HF_HUB_DOWNLOAD_TIMEOUTr%   r   )r:   rU  rV  r!  r  rs         r<   _fetch_rangezHfFileSystemFile._fetch_range  s    /e//cAg//
gl,,..
 &.'0'4(2W%
 
 
 Wi>_```Ayr>   c                 <    t          j        dd          | _        d S )Nzhffs-F)prefixdelete)tempfileNamedTemporaryFiler  r7  s    r<   _initiate_uploadz!HfFileSystemFile._initiate_upload  s    !4GERRRr>   Ffinalc                    | j                             d           | j                                         }| j                            |           |r| j                                         | j        j                            | j        j	        | j
        j        | j
        j        | j        j        | j
        j        | j
        j        | j                            d          | j                            d                     t%          j        | j        j	                   | j                            | j
                                                   d S d S )Nr   r   r   r   r   )bufferr,  r   r  writer-  rJ  rP   r   r   r   r,   r*   rJ   r)   r+   r   r6   r   remover   r=   )r:   rd  blocks      r<   _upload_chunkzHfFileSystemFile._upload_chunk  s1     ""U### 	N  """GL$$ $ 3!/<*2gm,6+4#{/?@@#';??3G#H#H % 	 	 	 Idn)***G$$'1133 %     	 	r>   r   c                 \   | j         dk    r||dk    rx| j        dk    rm| j                            | j        dd          5 }|                                }| xj        t          |          z  c_        |cddd           S # 1 swxY w Y   t                                          |          S )a)  Read remote file.

        If `length` is not provided or is -1, the entire file is downloaded and read. On POSIX systems and if
        `hf_transfer` is not enabled, the file is loaded in memory directly. Otherwise, the file is downloaded to a
        temporary file and read from there.
        r   Nr   r   )rK   )r   locrJ  r   r\   r   r   rM   )r:   lengthr   r   rU   s       r<   r   zHfFileSystemFile.read  s     9&.FbLLdhRSmmdi!<< ffhhCHH$                ww||F###s   3BB	Bc                 @    | j                             | j                  S r?  rJ  r  r\   r7  s    r<   r  zHfFileSystemFile.url      w{{49%%%r>   r?  r@  )Fr   )r?   r@   rA   rG   rC   r   rN   rR  rD  bytesr]  rc  rC  rj  r   r  rG  rH  s   @r<   r   r     s       
 
< 
s 
hsm 
 
 
 
 
 
! ! ! ! !# C E     S S S S 4 D    *$ $ $ $ $ $&S & & & & & & & &r>   r   c                        e Zd Z	 	 	 	 ddedededee         d	ed
ef fdZddedefdZddefdZ	defdZ
 fdZd Z xZS )r   r   Nr   nonerJ  r\   r   r+   rK   
cache_typec                    |dk    rt          d|           |dk    rt          d|           d|v rt          d| d          	 |                    ||          | _        nB# t          $ r5}d|                    d	d
          v rt          | d          |Y d }~nd }~ww xY w| j                                        d d| _         t                      j        || j                                        f|||d| d | _	        |  d S )Nr   z:HfFileSystemStreamFile only supports block_size=0 but got rt  z?HfFileSystemStreamFile only supports cache_type='none' but got rL  z;HfFileSystemStreamFile only supports reading but got mode=''r   r   r2   rM  )r   r   r   rK   ru  )
r`   rz   r   r   r6   r=   detailsrM   rN   response)
r:   rJ  r\   r   r+   rK   ru  r   rZ   rU   s
            r<   rN   zHfFileSystemStreamFile.__init__  su    ??fZdffgggk_ikklll$;;b[_bbbccc	!#!I!ID  	 	 	fjj,,,,']]]  -,,,,	 !% 2 < < > >MM",,..	
59j]g	
 	
kq	
 	
 	
 -1s   
A' '
B&1+B!!B&rl  whencec                 b    |dk    r|dk    rd S || j         k    r|dk    rd S t          d          )Nr   r   zCannot seek streaming HF file)rl  r`   )r:   rl  r{  s      r<   r,  zHfFileSystemStreamFile.seek  s?    !88!F$(??v{{F8999r>   r   rm  c                 "   |dk    r|fnd}| j         t          | j        j        | j        j        | j        j        | j        j        | j        j                  }t          d|| j        j
                                        dt          j                  | _         t          | j                    	 d| j         j        _         | j         j        j        | }n# t$          $ r | j                                          t          | j        j        | j        j        | j        j        | j        j        | j        j                  }t          d|dd| j        z  i| j        j
                                        dt          j                  | _         t          | j                    	 d| j         j        _         | j         j        j        | }n(# t$          $ r | j                                           w xY wY nw xY w| xj        t+          |          z  c_        |S )	Nr   rE   r  rZ  T)r!  streamrW   Rangez	bytes=%d-)rz  r   r   r*   r+   r,   r)   rJ  rI   r&   rP   r*  r   r[  r%   rawdecode_contentr   rE  r-  rl  r   )r:   rm  	read_argsr  r   s        r<   r   zHfFileSystemStreamFile.read%  s   !'1VII"	= *2+4+8,6)  C )6688!9  DM  ...	/3DM,($-#()4CC 	 	 	M!!! *2+4+8,6)  C ) +"8]DGL<Z<Z<\<\]!9  DM  ...37!0,dm',i8   ##%%% +	2 	CHH
s+   -%C C	G/%GG/%G))G/.G/r0   c                 @    | j                             | j                  S r?  ro  r7  s    r<   r  zHfFileSystemStreamFile.urlV  rp  r>   c                 h    t          | d          sd S t                                                      S rO  rP  rS  s    r<   rR  zHfFileSystemStreamFile.__del__Y  rT  r>   c                 Z    t           | j        | j        | j        | j        | j        j        ffS r?  )reopenrJ  r\   r   	blocksizecacher   r7  s    r<   r>  z!HfFileSystemStreamFile.__reduce___  s$    DIt~tzWWWr>   )r   Nr   rt  )r   rq  )r?   r@   rA   rG   rC   r   rD  rN   r,  r   r  rR  r>  rG  rH  s   @r<   r   r     s        
 "&    	
 3-       >: : :S : : : :/ /3 / / / /b&S & & & &! ! ! ! !X X X X X X Xr>   r   r+   r0   c                 X    t                               |           r| nt          |           S r?  )rj   rr   
safe_quoter   s    r<   r9   r9   c  s(    288BB\88
S[H\H\\r>   sc                 $    t          | d          S )Nr2   )safe)r   )r  s    r<   r  r  g  s    r>   r\   rt   c                     | }t          |t                    r|  d}n5t          |t                    r|  d}nt          |t                    r|  d}t	          |          |)Nz (repository not found)z (revision not found)z (invalid repository id))rq   r   r   r$   r   )r\   rt   msgs      r<   ro   ro   k  s~    
C#.// 0...	C.	/	/ 0,,,	C*	+	+ 0///
C
 
 c)r>   rJ  r   rK   ru  c                 4    |                      ||||          S )Nrx  )r   )rJ  r\   r   rK   ru  s        r<   r  r  v  s    774dzj7QQQr>   c                 l     | |i |}|                                 D ]\  }}t          |||           |S r?  )itemssetattr)clsrS   r   instance_cache_attributes_dictrJ  attrcached_values          r<   r<  r<  z  sP    	d	f		B<BBDD ( (lD,''''Ir>   )Hr   rera  collectionsr   dataclassesr   r   r   	itertoolsr   pathlibr   typingr	   r
   r   r   r   r   r   r   urllib.parser   r   fsspecfsspec.callbacksr   r   r   fsspec.utilsr   requestsr   r2   r   _commit_apir   r   errorsr   r   r   file_downloadr   r    hf_apir!   r"   r#   utilsr$   r%   r&   compileVERBOSErj   r(   AbstractFileSystemrG   specAbstractBufferedFiler   r   rC   r9   r  rE  ro   rD  r  r<  rE   r>   r<   <module>r     s   				 				        ( ( ( ( ( ( ( (                   N N N N N N N N N N N N N N N N N N N N ' ' ' ' ' ' ' '  J J J J J J J J J J # # # # # #             C C C C C C C C V V V V V V V V V V / / / / / / / / 3 3 3 3 3 3 3 3 3 3 G G G G G G G G G G )bj
 J   B B B B B B B B*t
 t
 t
 t
 t
6, t
 t
 t
nJ& J& J& J& J&v{7 J& J& J&ZbX bX bX bX bXV[= bX bX bXJ]C ]C ] ] ] ]# #    * *(9*= *( * * * *R| R3 Rc Rs RPS R R R R    r>   