
    |Ig              
          d dl Z d dlZd dlZd dlZd dlmZ d dlmZ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 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jl                  dejn                        Z8e G d d             Z9 G d dejt                        Z; G d dejx                  jz                        Z> G d dejx                  jz                        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(ZF e j                  e;e j                  )      D ]j  \  ZIZJ eKejt                  eId      ZLeLeLj                  *eLj                  ZNeNj                  d*d+      ZNeNj                  d,d-      ZNd.eI d/d0z   eNz   eJ_M        l y)1    N)deque)	dataclassfield)datetime)chain)Path)AnyDict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                   j    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	y)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                  | j                  d      | j                  z   }| j
                  r-| d| j
                   d| j                   j                  d      S | j                  t         j                  k7  r6| dt        | j                         d| j                   j                  d      S | d| j                   j                  d      S )N @/)r   REPO_TYPES_URL_PREFIXESgetr(   r)   r.   r+   rstripr*   DEFAULT_REVISIONsafe_revision)self	repo_paths     [/var/www/html/answerous/venv/lib/python3.12/site-packages/huggingface_hub/hf_file_system.py	unresolvez"HfFileSystemResolvedPath.unresolve5   s    5599$.."MPTP\P\\	[$"4"4!5Qt7H7H6IJQQRUVV]]i888[-">!?qARAR@ST[[\_``[$"3"3!45<<SAA    )
__name__
__module____qualname____doc__str__annotations__r   r.   r   r<    r=   r;   r'   r'   )   s?    _NLM $)E#BM8C=BB3 Br=   r'   c                       e Zd ZdZdZdZddddee   dee	edf   f fdZ
d	ed
edee   dee	ee   f   fdZd.dedee   defdZd.dee   ddfdZ	 	 	 d/dededee   dee   ddf
dZd.dedee   ddfdZ	 	 	 d0dede	dee   dee   ddf
dZ	 d1dede	de	dee   deeeeeef   f      f
dZ	 	 	 	 d2dede	de	dee   de	f
dZ fdZ fdZ	 	 	 	 	 d3d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 fd!Zd.d"ed#edee   ddfd$Zdedefd%Zd4d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d5 fd+Z&e'd,        Z(d- Z) xZ*S )6HfFileSystemaF  
    Access a remote Hugging Face Hub repository as if were a local file system.

    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`.

    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)
    ```
    r1   hfNendpointtokenrI   rJ   c                    t        |   |i | |xs t        j                  | _        || _        t        ||      | _        i | _        y )NrH   )	super__init__r   ENDPOINTrI   rJ   r    _api_repo_and_revision_exists_cache)r9   rI   rJ   argsstorage_options	__class__s        r;   rM   zHfFileSystem.__init__b   sK     	$2/2 6I$6$6
859	  	,r=   r(   r)   r*   r/   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)r*   r(   timeout)TNF)rP   rO   	repo_infor   HF_HUB_ETAG_TIMEOUTr   r#   r   )r9   r(   r)   r*   es        r;   _repo_and_revision_existz%HfFileSystem._repo_and_revision_existt   s!    w)1U1UU^		##h)YMjMj $  Xb44i(5STS]44i$5OP33Y4RSS ,->? \W\^_W_44i(5STSXZ[S[44i$5OP( ^W\^_W_44i(5STS]44i$5OP^s#   -A6 6C.(B22C.>&C))C.pathc                    dt         t           dt         t           dt         t           fd}| j                  |      }|st        d      |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  rd	|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#                  |||      \  }	}
|	st)        |
t*        t,        f      r)|}|}| j#                  |||      \  }	}|	sot%        ||
       nbt%        ||
       nU|}d
}d	|v r(|j	                  d	d      \  }} |t!        |      |      }nd }| j#                  |||      \  }	}|	st        d      ||nt
        j.                  }t1        |||||      S )Nrevision_in_pathr*   r/   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\   r*   s     r;   %_align_revision_in_path_with_revisionzHHfFileSystem.resolve_path.<locals>._align_revision_in_path_with_revision   sU     ##/4D4P$78H7IIijris t- -  O ,Or=   z0Access to repositories lists is not implemented.r3   r   r   r2   r1      )r.   )r   rB   _strip_protocolNotImplementedErrorsplitr   r4   valuesREPO_TYPES_MAPPINGREPO_TYPE_MODELcountSPECIAL_REFS_REVISION_REGEXsearchgroupsublstripr   rY   _raise_file_not_foundjoin
isinstancer   r#   r7   r'   )r9   rZ   r*   r_   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)%&XYYZZ_Q#%)J)J)Q)Q)SS$)*\]]"jja0OIt!44Y?I!11I::c?Qd{,0JJsA,>))**7>>?OPE(X$9N-N'B'F'FrK['\'c'cdg'h+0;;=(9I9O9OPSUV9W6(,#%L@IYAZ\de/3/L/LYX_ai/j,'.)$4#' ),$**S/"12E)F&.1hhtzz#qr7J.K+,0JJsOA,>)14$**S/!":M1N.0:/3/L/LYX_ai/j,'.!#(?AR'ST";'E595R5RS\^ego5p2/61$<-dC8GLd{,0JJsA,>))@IYAZ\de#' )-)F)FyRY[c)d&#Q*)*\]]'389S9S'	7Hlbrssr=   c                    |s5| j                   j                          | j                  j                          y | j                  |      j	                         }|r1| j                   j                  |d        | j                  |      }|r0y y N)dircacheclearrP   rx   r<   pop_parentr9   rZ   s     r;   invalidate_cachezHfFileSystem.invalidate_cache   sj    MM!00668$$T*446D!!$-||D) r=   mode
block_sizeHfFileSystemFilec                 n    d|v rt        d      |dk(  rt        | |f|||d|S t        | |f|||d|S )Naz/Appending to remote files is not yet supported.r   )r   r*   r   )rb   HfFileSystemStreamFiler   )r9   rZ   r   r*   r   kwargss         r;   _openzHfFileSystem._open   sX     $;%&WXX?)$t4(_itmstt#D$nTHYcngmnnr=   c                 N   | j                  ||      }| j                  j                  |j                  |j                  | j
                  |j                  |j                  |j                  d      |j                  d             | j                  |j                                y )Nr*   commit_messagecommit_description)r+   r)   rJ   r(   r*   r   r   rZ   )rx   rO   delete_filer+   r)   rJ   r(   r*   r5   r   r<   )r9   rZ   r*   r   resolved_paths        r;   _rmzHfFileSystem._rm   s    ))$)B		&33!))**#--"++!::&67%zz*>? 	 	
 	=#:#:#<=r=   	recursivemaxdepthc                 X   | j                  ||      }| j                  ||||      }|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 )Nr   )r   r   r*   )r+   zDelete  zrecursively r1   zup to depth r   r   )r)   r(   rJ   
operationsr*   r   r   r   )rx   expand_pathisdirr+   r   rO   create_commitr)   r(   rJ   r*   r5   r   r<   )r9   rZ   r   r   r*   r   r   pathspaths_in_repor+   r   r   s               r;   rmzHfFileSystem.rm   s3    ))$)B  XX` aJOh$W[WaWabfWg**40==hh[hi<+Fi
i"4&*I.2=8LL
!4RTT		!))#--**!"++!::&6G%zz*>? 	  	
 	=#:#:#<= iis   D"D"'D'detailrefreshc                    | j                  ||      }|j                         }d|i|}	  | j                  |f||d|}|r|S |D cg c]  }|d   	 c}S # t        $ rx |j                  st        |d        | j                  | j                  |      f||d|}|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 )z!List the contents of a directory.r   expand_info)r   r*   Nnamer   )rx   r<   _ls_treer   r+   rm   r~   len)	r9   rZ   r   r   r*   r   r   outos	            r;   lszHfFileSystem.ls  s     ))$)B&&(262		2$--SgSFSC s:c":1V9":: " 	2 --%dD1$--T 2aGhaZ`aC!7QvY$%6177C73x1}%dD1	2 #;s*   A 	CA
C"B50B54"CCr   c           	         | j                  ||      }|j                         }t        |j                  |j                  |j
                  d|j                        j                         }g }|| j                  v r|s| j                  |   }	|j                  |	       g }
|rt        |	D cg c]  }|d   dk(  s| c}      }|r|j                         }|d   | j                  vr|
j                  |d          nK| j                  |d      }	|j                  |	       |j                  |	D cg c]  }|d   dk(  s| c}       |rg }|r'|D cg c]  }|d   	| j                  |d          }}|r|
s|r|rt        j                  j                  |
|z         }|j!                  d      s||k(  s|t#        |
|      v r|j%                  d      n| j                  |      }|D cg c]  }|d   j'                  |dz         r| }}| j                  D ]3  }|j'                  |dz         s| j                  j)                  |d        5 | j                  j)                  |d        |j                  | j+                  ||d	||
             |S | j,                  j/                  |j                  |j0                  |||j
                  |j                        }|D ]  }t3        |t4              rM|dz   |j                  z   |j6                  d|j8                  |j:                  |j<                  |j>                  d}n,|dz   |j                  z   dd|j@                  |j<                  d}| j                  |d         }| j                  jC                  |g       j                  |       |j                  |        |S c c}w c c}w c c}w c c}w )Nr   r1   r+   r.   type	directoryr   last_commitr3   T)r   r   r*   r   )r   expandr*   r(   filer   sizer   blob_idlfsr   securityr   r   r   r   tree_idr   )"rx   r<   r'   r(   r)   r*   r.   r{   extendr   popleftappendr~   osrZ   commonprefixendswithr   r6   
startswithr}   r   rO   list_repo_treer+   ro   r"   r   r   r   r   r   r   
setdefault)r9   rZ   r   r   r*   r   r   	root_pathr   cached_path_infosdirs_not_in_dircache	path_infodirs_to_visitdir_infodirs_not_expandedr   common_prefixcommon_pathcached_pathtreecache_path_infoparent_paths                         r;   r   zHfFileSystem._ls_tree'  s    ))$)B&&(,##!!""'55
 )+ 	 4==  $d 3JJ()#%  !&0Af9YvEVZeEeYf! $,446H't}}<,33HV4DE,0MM(6:J,K)

#45%,,8In9YW]M^bmMmYn $ !#FI$fQ}M]MeT\\!F)%<$f!$f2HY !# 4 45IL]5] ^ %--c2$	1$.BDU(VV "((- m4  #&UQQvY-A-A+PSBS-TqUU#'== =K"--kC.?@))+t<= !!+t4

MM#"+ $!)$/ " P 
= 99++%%**#"&//'11 , D " ,	i2 )C).. @ ) &#,#4#4(}}'0'<'<$-$6$6'O !*C).. @ ! +#,#4#4'0'<'<'O #ll?6+BC((b9@@Q

?++,, 
W g o %g Vs0   +N>9N>.O<O
OO+OOc              /      K   d|j                  dd      i|}| j                  ||j                  d            j                         }t        |   |g|i |E d {    y 7 wNr   r   Fr*   r   )r5   rx   r<   rL   walk)r9   rZ   rQ   r   rS   s       r;   r   zHfFileSystem.walk  sd     He!<GG  

:0F GQQS7<6t6v666s   AA( A&!A(c                     d|j                  dd      i|}| j                  ||j                  d            j                         }t        |   |fi |S r   )r5   rx   r<   rL   glob)r9   rZ   r   rS   s      r;   r   zHfFileSystem.glob  sX    He!<GG  

:0F GQQSw|D+F++r=   withdirsc           	      J   |rt        |   |f|||||d|S | j                  ||      }|j                         }d|i|}	  | j                  |fd||j
                  d|}	|s|	D 
cg c]  }
|
d   dk7  s|
 }	}
n/ | j                  |fd|j
                  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        $ r%  | j                  |fd|i|d   d
k(  r|i i}	ni }	Y Zw xY wc c}w )N)r   r   r   r   r*   r   r   T)r   r   r*   r   r   r*   r   r   )	rL   findrx   r<   r   r*   infor   sorted)r9   rZ   r   r   r   r   r*   r   r   r   r   r   namesr   rS   s                 r;   r   zHfFileSystem.find  s    7<'(6SZemqw  ))$)B&&(262	.$--qgP]PfPfqjpqC "%BQ6k)AqBB &DIIdV]5K5KVvV	+4V+<+KykC'QT),-A1V9a<-C-sL056D#d)O66 C
 . " 	tyy;;F;FCvMRj	$ 7s*   !C/ +C%9C%3C*D /+DDpath1path2c                    | j                  ||      }| j                  ||      }|j                  |j                  k(  xr |j                  |j                  k(  }|rd| 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)Nr   zCopy z to r   r   r1   )src_path_in_repor+   src_revision)r)   r(   r*   r   r   r   rbpath_or_fileobjr+   r)   rJ   r(   r*   r   r   r   )rx   r(   r)   rO   r   r*   r5   r   r+   openreadupload_filerJ   r   r<   )r9   r   r   r*   r   resolved_path1resolved_path2	same_repor   fcontents              r;   cp_filezHfFileSystem.cp_file  s   **58*D**58*D $$(@(@@u^E[E[_m_u_uEu 	 $UG4w7NII##&..(22'00%zz*:NK#)::.BB#G')7)D)D%3%@%@%3%<%< $  5$1H1HI #Q&&(#$UG4w7NII!! '+88&..jj(22'00%zz*:NK#)::.B#C " 	 	>#;#;#=>>#;#;#=># #s   G$$G-c                 8     | j                   |fi |}|d   d   S )Nr   dater   )r9   rZ   r   r   s       r;   modifiedzHfFileSystem.modified  s'    tyy((M"6**r=   c                 4   | j                  ||      }|j                         }|j                  dd      }|j                  s}|ddd}|r?| j                  j                  |j                  |j                  |j                        d   }i |d t        |j                  |j                  |j                  	      d
}nd }| j                  |      }	|s!|	| j                  vr| j                  |	d       |	| j                  v r8| j                  |	   D 
cg c]  }
|
d   |k(  s|
 }}
|st!        |d        |d   }|s||rH|rE|d   ?| j                  j#                  |j                  |j                  ||j                  |j                        }|st!        |d        |d   }t%        |j                  |j                  |j                  d|j&                        j                         }t)        |t*              rM|dz   |j,                  z   |j.                  d|j0                  |j2                  |j4                  |j6                  d}n,|dz   |j,                  z   dd|j8                  |j4                  d}|sdD ci c]  }|||   
 }}|J |S c c}
w c c}w )Nr   r   Tr   r   )r   r   r   )r(   r*   )oidtitler   )r   r   Fr   r   r   )r   r*   r(   r1   r   r3   r   r   r   )rx   r<   r5   r+   rO   list_repo_commitsr)   r(   r*   r!   	commit_idr   
created_atr~   r{   r   rm   get_paths_infor'   r.   ro   r"   rZ   r   r   r   r   r   r   )r9   rZ   r   r*   r   r   r   r   r   r   r   out1
paths_infor   r   ks                   r;   r   zHfFileSystem.info  s   ))$)B&&(jj4
 )) #C
 "ii99!))]5L5LWdWmWm : ##1'119J9JQ\QgQg$ C,,t,K;dmm#C7dmm+#'==#=Sa6dARSS)$51g#++##mBTB\!YY55!))!..&*33+55 6 
 ")$5&qM	4!++!))!**!#"/"="= )+  i2 )C).. @ ) &#,#4#4(}}'0'<'<$-$6$6C !*C).. @ ! +#,#4#4'0'<'<C #.FG1c!f9GCG
W TR Hs   J"J;Jc                 F    	  | j                   |fi i |ddi y#  Y yxY w)z!Is there a file at the given pathr   FTr   )r9   rZ   r   s      r;   existszHfFileSystem.exists<  s4    	DIId?>>>?	s     c                 T    	 | j                  |d      d   dk(  S # t        $ r Y yw xY w)zIs this entry directory-like?Fr   r   r   )r   OSErrorr   s     r;   r   zHfFileSystem.isdirE  s6    	99Tu95f=LL 		s    	''c                 D    	 | j                  |d      d   dk(  S #  Y yxY w)zIs this entry file-like?Fr   r   r   r   r   s     r;   isfilezHfFileSystem.isfileL  s.    	99Tu95f=GG	s    c                     | j                  |      }t        |j                  |j                  |j                  |j
                  | j                        }| j                  |      r|j                  ddd      }|S )z"Get the HTTP URL of the given path)r(   r*   rI   z	/resolve/z/tree/r   )	rx   r   r)   r+   r(   r*   rI   r   replace)r9   rZ   r   urls       r;   r   zHfFileSystem.urlS  sl    ))$/!!&&#--"++]]
 ::d++k8Q7C
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-        t/        |
j0                  |
j2                  |
j4                  |
j6                  | j8                        |||d| j:                  j=                         t        |t
              r|j>                  nd       |jA                  |	       |r|jC                          yy# |r|jC                          w w xY w)z!Copy single remote file to local.r*   r   )callbackoutfileT)exist_okNFwbr   r   r)   r*   filenamer(   rI   )r   	temp_filedisplayed_filenameexpected_sizeresume_sizeheaders	_tqdm_bar)"r5   setkeysro   r   r   r   rL   get_filer   r   r   makedirsrB   r   rZ   dirnamer   tellrx   r   set_sizer   r   r)   r*   r+   r(   rI   rO   _build_hf_headerstqdmseekclose)r9   rpathlpathr   r  r   r*   unhandled_kwargs
close_fileinitial_posresolve_remote_pathr  rS   s               r;   r  zHfFileSystem.get_filea  s   ::j)v{{}-<(\<$@ASIYEZ]^E^ 7#E5_8W_X^__ eGZZKK-ec4[)KK.> 
?5$'GJlln #///I		%(	;FC-(	 /770990==1;;!]] "#(+		335+5h+M(--SW LL%  z s   BG1 1H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.rb   r9   s    r;   transactionzHfFileSystem.transaction  s     ""LMMr=   c                     t        d      )z@Begin write transaction for deferring files, non-context versionr  r  r   s    r;   start_transactionzHfFileSystem.start_transaction  s     ""LMMr=   rz   )r   NN)FNN)TFN)FFNT)NFFFN)FNr/   N)+r>   r?   r@   rA   root_markerprotocolr   rB   r   boolrM   r   	ExceptionrY   r'   rx   r   intr   r   r   r   r
   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  propertyr!  r#  __classcell__rS   s   @r;   rF   rF   ?   s]   > KH
 #'(,	 3- T3_%	$TT'*T6>smT	tXi((	)T&Jt Jt JtIa JtX*Xc] *d * "&$(oo o 3-	o
 SMo 
o> >x} >$ >   "&"&>> > 3-	>
 3-> 
>8 `d;;!%;7;;OWX[};	eCc3h'(	);,  "& ff f 	f
 3-f fP7, #'"&%7%7 3-%7 	%7
 %7 %7 3-%7 
tCy$sDcN233	4%7N'?S '? '? '?[_ '?R+S +x +K Kt Kx} Kbfgjlogobp KZ   /@ 2 h N NNr=   rF   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fsrZ   r*   c                    	 |j                  ||      | _        |j                  dd      dk(  r0|j	                  | j                  j                         d      | _        t        |    || j                  j                         fi | |  y # t        $ r)}d|j                  dd      v rt        | d      | d }~ww xY w)	Nr   wr   r1   B.
Make sure the repository and revision exist before writing data.r   Fr   )	rx   r   FileNotFoundErrorr5   r   r<   detailsrL   rM   )r9   r.  rZ   r*   r   rX   rS   s         r;   rM   zHfFileSystemFile.__init__  s    	!#!ID ::fd#t+774#5#5#?#?#Au7UDLT//99;FvF ! 	fjj,,'c\] 	s   B 	B>$B99B>c                 :    t        | d      sy t        | 	         S Nr   hasattrrL   __del__r9   rS   s    r;   r8  zHfFileSystemFile.__del__      t_-w  r=   startendr/   c                    dd| d|dz
   i| j                   j                  j                         }t        | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                   j                        }t        d||dt        j                        }t        |       |j                  S )	Nrangezbytes=-r   r  GETi  i  i  i  )r
  retry_on_status_codesrU   )r.  rO   r  r   r   r)   r*   r+   r(   rI   r%   r   HF_HUB_DOWNLOAD_TIMEOUTr$   r   )r9   r;  r<  r
  r   rs         r;   _fetch_rangezHfFileSystemFile._fetch_range  s    veWAcAgY/
ggll,,.
 &&..''00''44((22WW%%
 "655
 	Ayyr=   c                 <    t        j                  dd      | _        y )Nzhffs-F)prefixdelete)tempfileNamedTemporaryFiler  r   s    r;   _initiate_uploadz!HfFileSystemFile._initiate_upload  s    !44GERr=   finalc                 H   | j                   j                  d       | j                   j                         }| j                  j	                  |       |rO| j                  j                          | j                  j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                   j#                  d      | j                   j#                  d             t%        j&                  | j                  j                         | j                  j)                  | j                  j+                                y y )Nr   r   r   r   r   )bufferr  r   r  writer  r.  rO   r   r   r   r+   r)   rJ   r(   r*   r   r5   r   remover   r<   )r9   rL  blocks      r;   _upload_chunkzHfFileSystemFile._upload_chunk  s"     "U#NN  "GGLL$$ $ 3 3!//<<**22ggmm,,66++44#{{/?@#';;??3G#H % 	 IIdnn))*GG$$''113 %  r=   c                    | j                   dk(  rX||dk(  rQ| j                  dk(  rB| j                  j                  | j                  dd      5 }|j                         cddd       S t        |   |      S # 1 sw Y   xY w)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   )r   )r   locr.  r   rZ   r   rL   )r9   lengthr   rS   s      r;   r   zHfFileSystemFile.read  st     99&.FbLdhhRSmdii!<  vvx   w|F##   s   A88Bc                 L    | j                   j                  | j                        S rz   r.  r   rZ   r   s    r;   r   zHfFileSystemFile.url      ww{{499%%r=   rz   r$  )Fr   )r>   r?   r@   rF   rB   r   rM   r8  r)  bytesrE  rK  r'  rR  r   r   r+  r,  s   @r;   r   r     sj    < s hsm !# C E ,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.  rZ   r   r*   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 | _	        |  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 r0  z;HfFileSystemStreamFile only supports reading but got mode=''r   r   r1   r1  )r   r   r   r   r\  )
r^   rx   r   r2  r5   r<   r3  rL   rM   response)
r9   r.  rZ   r   r*   r   r\  r   rX   rS   s
            r;   rM   zHfFileSystemStreamFile.__init__  s    ?YZdYefgg^_i^jkll$;Z[_Z``abcc	!#!ID !% 2 2 < < >M"",,.	
59j]g	
kq	
 -1 ! 	fjj,,'c\] -	s   B- -	C#6#CC#rT  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)rT  r^   )r9   rT  rb  s      r;   r  zHfFileSystemStreamFile.seek  s2    !8!$((?v{899r=   rU  c           	      L   |dk\  r|fnd}| j                   $| j                   j                  j                         rt        | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                        }t        d|| j                  j                  j                         ddt        j                        | _         t!        | j                          	  | j                   j                  j"                  | }| xj(                  t+        |      z  c_        |S # t$        $ rK | j                   j'                          t        | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                        }t        d|dd	| j(                  z  i| j                  j                  j                         ddt        j                        | _         t!        | j                          	  | j                   j                  j"                  | }n(# t$        $ r | j                   j'                           w xY wY tw xY w)
Nr   rD   r  r@  rA  T)r
  rB  streamrU   Rangez	bytes=%d-)ra  rawisclosedr   r   r)   r*   r+   r(   r.  rI   r%   rO   r  r   rC  r$   r   r(  r  rT  r   )r9   rU  	read_argsr   r   s        r;   r   zHfFileSystemStreamFile.read"  s   !'1VI"	== DMM$5$5$>$>$@**22++44++88,,66))C )668&:!99DM  .	($--##(()4C4 	CH
5  	MM! **22++44++88,,66))C ) +"8]DGGLL<Z<Z<\]&:!99DM  .,dmm'',,i8 ##% +	s+   #E DJ##I76J#7%JJ#"J#r/   c                 L    | j                   j                  | j                        S rz   rW  r   s    r;   r   zHfFileSystemStreamFile.urlS  rX  r=   c                 :    t        | d      sy t        | 	         S r5  r6  r9  s    r;   r8  zHfFileSystemStreamFile.__del__V  r:  r=   c                     t         | j                  | j                  | j                  | j                  | j
                  j                  ffS rz   )reopenr.  rZ   r   	blocksizecacher   r   s    r;   
__reduce__z!HfFileSystemStreamFile.__reduce__\  s0    DIIt~~tzzWWWr=   )r   Nr   r^  )r   rY  )r>   r?   r@   rF   rB   r   r)  rM   r  r   r   r8  rp  r+  r,  s   @r;   r   r     s    
 "&   	
 3-  >: :S :/3 /b&S &!Xr=   r   r*   r/   c                 F    t         j                  |       r| S t        |       S rz   )rh   rp   
safe_quoter   s    r;   r8   r8   `  s     288B8\
S[H\\r=   sc                     t        | d      S )Nr1   )safe)r   )rs  s    r;   rr  rr  d  s    r=   rZ   rr   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))ro   r   r   r#   r2  )rZ   rr   msgs      r;   rm   rm   h  s\    
C#./-.	C.	/+,	C*	+./
C
 c)r=   r.  r   r   r\  c                 ,    | j                  ||||      S )Nr`  )r   )r.  rZ   r   r   r\  s        r;   rm  rm  s  s    774dzj7QQr=   )	predicatezParameters
        ----------
zArgs:
zReturns
        -------
zReturn:
z
_Docstring taken from [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.spec.AbstractFileSystem.z)._z

)Pinspectr   rerI  collectionsr   dataclassesr   r   r   	itertoolsr   pathlibr   typingr	   r
   r   r   r   r   r   urllib.parser   r   fsspecfsspec.callbacksr   r   r   fsspec.utilsr   requestsr   r1   r   _commit_apir   r   errorsr   r   r   file_downloadr   r   hf_apir    r!   r"   utilsr#   r$   r%   compileVERBOSErh   r'   AbstractFileSystemrF   specAbstractBufferedFiler   r   rB   r8   rr  r(  rm   r)  rm  
getmembers
isfunctionr   functiongetattrparentrA   
parent_docr   rD   r=   r;   <module>r     s    	 	   (    D D D '  J J #   C V V / 3 3  )bjj
 JJ  B B B*e	N6,, e	NPQ&v{{77 Q&hbXV[[== bXJ]C ]C ]# # * *(9*= *( *R| R3 Rc Rs RPS R
 )g((ASAST 
ND(V..d;Ffnn8^^
''(JIV
''(DkR
C DH  CI  ILM 	
  	
r=   