
    \jm                        d 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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mZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)  e$d      Z* e	d       G d d             Z+ ejX                  d      Z-h dZ.h dZ/h dZ0 ejX                  d      Z1dddddZ2i Z3 e4e0      D ]  Z5e5e3e5<   e5 de3e5 d<   e5 d e3e5 d!<     ed"e3e6e7#      Z8 e	d       G d$ d%             Z9e:eedz  f   Z;e<ee=e6   f   Z>d&eee=e   f   d'e9fd(Z?d)e@d*e@d'e6fd+ZAd&eee=e   f   d'dfd,ZBd-ed'e:e<e6ef   e<e6e:eef   f   f   fd.ZCd/e6d'e6fd0ZDd-ed1eEd'e:eFe;   e>f   fd2ZGd3e6d4e>d'eeedz  eHgeEf   fd5ZId6eHdz  d7e6d8eHd'eEfd9ZJd:e6d'e:ee;ge:ed;f   f   eEf   fd<ZKd-ed=eFe6   d'e+fd>ZLe*j                  d?g d@A      	 	 	 	 	 dkdCee6dz   e'dD      f   dEeeE e'dF      f   dGeeFe6   dz   e'dHdIdJ      f   dKee8dz   e'dL      f   dMee@dz   e'dN      f   d'dfdO       ZNe*j                  g dPA      	 	 	 dld=eeFe6    e&dQ      f   dCee6dz   e'dD      f   dReeE e'dSdTdU      f   dVeeE e'dW      f   d'df
dX       ZOe*j                  dYdZgA      	 	 	 dldCee6dz   e'dD      f   dReeE e'dSdTdU      f   dVeeE e'dW      f   d'dfd[       ZPe*j                  g d\A      e j                  ddddBdBdfd]ed^e d_e!dCee6dz   e'd`      f   daee6dz   e'db      f   dceeE e'ddde      f   dfeeE e'dgdh      f   die"d'dfdj       ZRy)mzHContains the 'hf cache' command group with cache management subcommands.    N)defaultdict)CallableMapping)	dataclass)Enum)	AnnotatedAny)CLIError   )ANSICachedRepoInfoCachedRevisionInfoCacheNotFoundHFCacheInfo_format_sizeparse_hf_uriscan_cache_dir)parse_duration
parse_size   )	RepoIdArgRepoTypeOptRevisionOptTokenOpt
get_hf_apityper_factory)ArgumentOption)outzManage local cache directory.)helpT)frozenc                   L    e Zd ZU ee   ed<   eeee   f   ed<   e	edf   ed<   y)_DeletionResolution	revisionsselected.missingN)
__name__
__module____qualname__	frozensetstr__annotations__dictr   r   tuple     L/root/.hermes/venv/lib/python3.12/site-packages/huggingface_hub/cli/cache.pyr#   r#   2   s0    ~>9-?#@@AA38_r0   r#   zA^(?P<key>[a-zA-Z_]+)\s*(?P<op>==|!=|>=|<=|>|<|=)\s*(?P<value>.+)$>   <=>!=<=>=>   refssizetypeaccessedmodified>   namer9   r;   r<   z.^(?P<key>[a-zA-Z_]+)(?::(?P<order>asc|desc))?$descasc)r;   r<   r9   r=   z:asc_ascz:desc_descSortOptions)r:   modulec                   0    e Zd ZU dZeed<   eed<   eed<   y)CacheDeletionCountsz>Simple counters summarizing cache deletions for CLI messaging.
repo_countpartial_revision_counttotal_revision_countN)r'   r(   r)   __doc__intr,   r/   r0   r1   rE   rE   Q   s    HOr0   rE   selected_by_reporeturnc                     d}d}d}| j                         D ]H  \  }}|t        |      z  }t        |      t        |j                        k(  s6|dz  }|t        |      z  }J ||z
  }t        |||      S )z(Summarize deletions across repositories.r   r   )itemslenr$   rE   )rK   rF   total_revisionsrevisions_in_full_reposrepor$   rG   s          r1   summarize_deletionsrS   ^   s     JO+113 6i3y>)y>S00!OJ#s9~5#	6 -/FFz+A?SSr0   revision_countincomplete_countc                     g }| r|j                  |  d       |r|j                  | d       dj                  |      S )zMBuild the human-readable summary of what `hf cache prune` is about to delete.z unreferenced revision(s)z incomplete download(s) and )appendjoin)rT   rU   partss      r1   _prune_summaryr[   p   sG    E''@AB())@AB<<r0   c           
         t        | j                         d       D ]  }|j                   d|j                   }t        | |   d       }t	        |      t	        |j
                        k(  rt        j                  d| d       jt        j                  d| d       |D ]\  }dj                  t        |j                              xs d	}t        j                  d
|j                   d| d|j                          ^  y)zBPretty-print selected cache revisions during confirmation prompts.c                 N    | j                   | j                  j                         fS N	repo_typerepo_idlowerrR   s    r1   <lambda>z0print_cache_selected_revisions.<locals>.<lambda>|   s    $..RVR^R^RdRdRfAg r0   key/c                     | j                   S r^   commit_hashrevs    r1   rd   z0print_cache_selected_revisions.<locals>.<lambda>~   
    3?? r0     - z (entire repo): z
(detached)z      z [z] N)sortedkeysr`   ra   rO   r$   r   textrY   r8   rj   size_on_disk_str)rK   rR   repo_keyr$   revisionr8   s         r1   print_cache_selected_revisionsrw   z   s    ',,.4gh 
[nn%Qt||n5+D17RS	y>S00HHtH:^454z#$! 	[H88F8==12BlDHHvh2232dV2h>W>W=XYZ	[
[r0   hf_cache_infoc                     i }i }| j                   D ]Q  }|j                  j                         }|||<   |j                  D ]!  }||f||j                  j                         <   # S ||fS )zPCreate lookup tables so CLI commands can resolve repo ids and revisions quickly.)reposcache_idrb   r$   rj   )rx   repo_lookuprevision_lookuprR   ru   rv   s         r1   build_cache_indexr~      s     .0KLNO## M==&&( $H 	MH=A8<LOH006689	MM
 ''r0   targetc                     | j                  d      s| S t        |       }|j                  st        d      |j                  |j
                  rt        d      |j                   d|j                   S )zCReturn the cache id matching a repo target passed to `hf cache rm`.zhf://z:Only repository hf:// URIs are supported by `hf cache rm`.zBOnly repo-level hf:// URIs are supported by `hf cache rm` for now.rg   )
startswithr   is_repor
   rv   path_in_repor:   id)r   uris     r1   _repo_cache_id_from_targetr      si    W%
v
C;;STT
||3#3#3[\\hhZq!!r0   include_revisionsc          	         g }i }t        | j                  d       }|D ]  }t        |j                  D ch c]  }|j                  D ]  }|  c}}      ||<   |r1t        |j                  d       D ]  }|j                  ||f        o|j                  |df        |r|j                  d        ||fS |j                  d        ||fS c c}}w )z;Flatten cache metadata into rows consumed by `hf cache ls`.c                 N    | j                   | j                  j                         fS r^   r_   rc   s    r1   rd   z'collect_cache_entries.<locals>.<lambda>   s    QUQ]Q]QcQcQe@f r0   re   c                     | j                   S r^   ri   rk   s    r1   rd   z'collect_cache_entries.<locals>.<lambda>   rm   r0   Nc                 N    | d   j                   | d   | d   j                  fS dfS )Nr   r    )r{   rj   entrys    r1   rd   z'collect_cache_entries.<locals>.<lambda>   s6    a!!(-a(<a$$ BD r0   c                      | d   j                   S )Nr   )r{   r   s    r1   rd   z'collect_cache_entries.<locals>.<lambda>   s    uQx'8'8 r0   )rq   rz   r*   r$   r8   rX   sort)rx   r   entriesrepo_refs_mapsorted_reposrR   rv   refs           r1   collect_cache_entriesr      s     !#G!#M---3fgL )'T^^(eW_WdWd(ePS(e(efd"4>>7RS 1h/01 NND$<()  	 	
 M!! 	89M!! )fs   Cexprr   c           
      v  	
 t         j                  | j                               }|st        d|  d      |j	                  d      j                         |j	                  d      |j	                  d      j                         t        vr"t        d d|  dt        t               d	      t        vr"t        d
 d|  dt        t               d	      dk(  rt              

fdS dv r>t        j                               	dt        dt        dz  dt        dt        f	fd}|S dk(  rGj                         dk7  rt        d d      dt        dt        dz  dt        dt        ffd}|S dk7  rt        d d	      dt        dt        dz  dt        dt        ffd}|S )zqConvert a `hf cache ls` filter expression into the yes/no test we apply to each cache entry before displaying it.zInvalid filter expression: 'z'.rf   opvaluezUnsupported operator 'z' in filter ''. Must be one of .zUnsupported filter key '' in 'r9   c                 Z    t        ||j                        S | j                        S r^   )_compare_numericsize_on_disk)rR   rv   _r   size_thresholds      r1   rd   z&compile_cache_filter.<locals>.<lambda>   s7    )9%-%9H!!*
 ?C?P?P*
 r0   >   r;   r<   rR   rv   NnowrL   c                     dk(  r| j                   n||j                  n| j                  }|yt        ||z
        S )Nr;   F)last_accessedlast_modifiedr   )rR   rv   r   	timestamprf   r   secondss       r1   _time_filterz*compile_cache_filter.<locals>._time_filter   sW     *$ "" ' ++''   #C)ORAAr0   r:   r3   z/Only '=' is supported for 'type' filters. Got 'r   c                 >    | j                   j                         k(  S r^   )r`   rb   )rR   rv   r   expecteds      r1   _type_filterz*compile_cache_filter.<locals>._type_filter   s    >>'')X55r0   z.Only '=' is supported for 'refs' filters. Got c                     ||j                   nj                  | t                     }j                         |D cg c]  }|j                          c}v S c c}w r^   )r8   getr*   rb   )rR   rv   r   r8   r   r   	value_raws        r1   _refs_filterz*compile_cache_filter.<locals>._refs_filter   sK    $,$88==m>O>OPTV_Va>bD??$(E(EEE(Es   A)_FILTER_PATTERNmatchstrip
ValueErrorgrouprb   _ALLOWED_OPERATORSlist_FILTER_KEYSr   r   r   r   floatbool)r   r   r   r   r   r   r   rf   r   r   r   r   s    `    @@@@@@r1   compile_cache_filterr      s    !!$**,/E7vR@AA
++e

"
"
$C	T	BG$**,I	##1"]4&HZ[_`r[sZttuvww
,3C5tfDVW[\hWiVjjklmm
f}#I.
 	
 && !23
	B~ 
	B9Kd9R 
	BY^ 
	Bcg 
	B 
f}??$9NrdRTUVV	6~ 	69Kd9R 	6W\ 	6ae 	6  9MbTQRSTT	F~ 	F9Kd9R 	FW\ 	Fae 	F r0   leftr   rightc                 l    | y| |k(  | |k7  | |kD  | |k  | |k\  | |k  d}||vrt        d|       ||   S )z)Evaluate numeric comparisons for filters.F)r3   r5   r4   r2   r7   r6   z)Unsupported numeric comparison operator: )r   )r   r   r   comparisonss       r1   r   r     sd    | U]emE\E\ememK 
DRDIJJr?r0   	sort_expr.c           
         t         j                  | j                         j                               }|st	        d|  d      |j                  d      j                         |j                  d      }t        vr"t	        d d|  dt        t               d      |r|nt           }|d	k(  }d
t        dt        t        df   ffd}||fS )zConvert a `hf cache ls` sort expression into a key function for sorting entries.

    Returns:
        A tuple of (key_function, reverse_flag) where reverse_flag indicates whether
        to sort in descending order (True) or ascending order (False).
    zInvalid sort expression: 'z5'. Expected format: 'key' or 'key:asc' or 'key:desc'.rf   orderzUnsupported sort key 'r   r   r   r>   r   rL   .c                    | \  }}dk(  r|j                   j                         }|fS dk(  r ||j                  }|fS |j                  }|fS dk(  r |j                  |j                  }|fS d}|fS dk(  r?| |j                  |j                  }|fS d}|fS |j                  |j                  nd}|fS t        d       )Nr=   r9   r;   g        r<   zUnsupported sort key: )r{   rb   r   r   r   r   )r   rR   rv   r   rf   s       r1   	_sort_keyz%compile_cache_sort.<locals>._sort_key+  s   h&=,,.E8O&=-5-AH))E8O HLGXGXE8O* +/*<*<*HD&&E8O ORE8O*#2:2H2H2T.. 8O [^ 8O /3.@.@.L**RU8O 1#788r0   )_SORT_PATTERNr   r   rb   r   r   
_SORT_KEYSr   _SORT_DEFAULT_ORDER
CacheEntryr.   r	   )r   r   explicit_orderr   reverser   rf   s         @r1   compile_cache_sortr     s     	 1 7 7 9:E5i[@uvww
++e

"
"
$C[[)N
*1#fYKGYZ^_iZjYkklmnn -N2Ec2JEvoG9 9c3h 9< gr0   targetsc                 (   t        |       \  }}t        t              }t               }g }|D ]  }|j                         }|s|j	                         }	t        j                  d|	      rZ|j                  |	      }
|
|j                  |       b|
\  }}||   j                  |       |j                  |j                         |j                  t        |      j	                               }||j                  |       |j                  D ]1  }||   j                  |       |j                  |j                         3  |j                         D ci c]  \  }}|t        |       }}}t        t        |      |t!        |            S c c}}w )z8Resolve the deletion targets into a deletion resolution.z[0-9a-fA-F]{40})r$   r%   r&   )r~   r   setr   rb   re	fullmatchr   rX   addrj   r   r$   rN   r*   r#   r.   )rx   r   r|   r}   r%   r$   r&   
raw_targetr   loweredr   rR   rv   matched_reporevsfrozen_selecteds                   r1   _resolve_deletion_targetsr   L  st   #4]#C K>I#>NH%IG 0
!!#,,.<<*G4#''0E}z*"ND(TNx(MM(../"'A&'I'O'O'QRNN:&$.. 	0H\"&&x0MM(../	0+02 @H~~?OPttYt_,POPI& g  Qs   Fz	list | ls)zhf cache lszhf cache ls --revisionsz*hf cache ls --filter "size>1GB" --limit 20zhf cache ls --format json)examplesF	cache_dirz9Cache directory to scan (defaults to Hugging Face cache).r$   zCInclude revisions in the output instead of aggregated repositories.filterz-fz--filterzZFilter entries (e.g. 'size>1GB', 'type=model', 'accessed>7d'). Can be used multiple times.r   a  Sort entries by key. Supported keys: 'accessed', 'modified', 'name', 'size'. Append ':asc' or ':desc' to explicitly set the order (e.g., 'modified:asc'). Defaults: 'accessed', 'modified', 'size' default to 'desc' (newest/biggest first); 'name' defaults to 'asc' (alphabetical).limitzSLimit the number of results returned. Returns only the top N entries after sorting.c                 6   	 t        |       }|xs g }t	        ||      \  }}		 |D 
cg c]  }
t        |
|	       }}
t        j                         }|D ]"  }|D cg c]  } ||d   |d   |      s| }}$ |r,	 t        |j                        \  }}|j                  ||       |#|dk  rt        j                  d| d      |d| }|r|D cg c]t  \  }}|m|j                  |j                  |j                   |j"                  t        |j$                        |j&                  |j(                  t+        |j,                        d	v }}}t/        j0                  |g d
dddi       n|D cg c]p  \  }}|j                  |j                  |j                   |j&                  |j2                  xs d|j(                  t+        |	j5                  |t7                           dr }}}t/        j0                  |g ddddi       |r|D ch c]  \  }}|	 }}}t9        |      }|r%t;        d |D              }t;        d |D              }n$t;        d |D              }t;        d |D              }t/        j<                  t?        j@                  d| d| dtC        |       d             |jD                  }|r9t/        jF                  dt9        |       dtC        |jH                         d       yy# t        $ r}t        d|j                         |d}~ww xY wc c}
w # t        $ r$}t        j                  t        |            |d}~ww xY wc c}w # t        $ r$}t        j                  t        |            |d}~ww xY wc c}}w c c}}w c c}}w )z&List cached repositories or revisions.Cache directory not found: N)r   r   r   )rf   r   z&Limit must be a positive integer, got r   )r   ra   r`   rv   snapshot_pathr9   r   r8   )r   rv   r9   r   r8   rv   r9   r   )headersid_key
alignmentsr   )r   ra   r`   r9   r   r   r8   )r   r9   r   r   r8   r   c              3   ,   K   | ]  \  }}|	d  y w)Nr   r/   .0r   rl   s      r1   	<genexpr>zls.<locals>.<genexpr>  s      Lvq#CO Ls   
c              3   @   K   | ]  \  }}|	|j                     y wr^   r   r   s      r1   r   zls.<locals>.<genexpr>  s     W&!SsS--Ws   
c              3   F   K   | ]  }t        |j                          y wr^   )rO   r$   r   rR   s     r1   r   zls.<locals>.<genexpr>  s      NT^^!4 Ns   !c              3   4   K   | ]  }|j                     y wr^   r   r   s     r1   r   zls.<locals>.<genexpr>  s     H4T..H   z
Found z repo(s) for a total of z revision(s) and z	 on disk.zFound z" incomplete download(s) totalling z$. Remove them with 'hf cache prune'.)%r   r   r
   r   r   r   r   clickBadParameterr+   timer   r   r   r{   ra   r`   rj   r   rt   last_modified_strrq   r8   r   tablelast_accessed_strr   r*   rO   sumrs   r   boldr   incomplete_fileshintincomplete_size_on_disk)r   r$   r   r   r   rx   excfiltersr   r   r   
filter_fnsr   fnr   sort_key_fnr   rR   rv   rN   r   unique_reposrF   rT   
total_sizer   s                             r1   lsr   x  s   ^O&y1 lG2=T]^G]4LSTD*4?T
T ))+C N&-MUE!HeAh1L5MMN 	8#5djj#A KLL['L:
 19$$'MeWTU%VWW&5/ #*
 h# mm<<!^^$00!$X%;%;!< 11!)!;!;x}}-	
 
 			G(		
" #
 a mm<<!^^--!%!7!7!=2!%!7!7}00y{CD
 
 			L(		
 ,34q44&
  L LLNWGWWJ  N NNNH<HHJII:,&>~>N O$Z01<	
 %55S)*++MMAABC D11	
 o  O4S]]ODE3NO U 4  S*34
 N  	8$$SX.C7	8
*
( 5sv   K5 L$ LL$ M0M;+M A9N	1A5NN5	L>LLL$ $	M-MM	N"NN)zhf cache rm model/gpt2z-hf cache rm hf://models/openai-community/gpt2zhf cache rm <revision_hash>z hf cache rm model/gpt2 --dry-runzhf cache rm model/gpt2 --yesziOne or more repo IDs (e.g. model/bert-base-uncased), repo-level hf:// URIs, or revision hashes to delete.yesz-yz--yeszSkip confirmation prompt.dry_runz,Preview deletions without removing anything.c           	      L   	 t        |      }t	        ||       }|j
                  r:dj                  d |j
                  D              }t        j                  d|        t        |j                        dk(  r5t        j                  d       t        j                  j                  d       |j                  t!        |j                         }t#        |j$                        }	g }
|	j&                  r|
j)                  |	j&                   d	       |	j*                  r|
j)                  |	j*                   d
       |
s|
j)                  |	j,                   d
       dj                  |
      }t        j                  d| d|j.                   d       t1        |j$                         |r9t        j2                  dd|	j&                  |	j,                  |j.                         yt        j4                  d|       |j7                          t#        |j$                        }	t        j2                  d|	j&                   d|	j,                   d|j.                   d|	j&                  |	j,                  |j.                         y# t        $ r}t        d|j                         |d}~ww xY w)z(Remove cached repositories or revisions.r   N
c              3   &   K   | ]	  }d |   ywrn   Nr/   )r   r   s     r1   r   zrm.<locals>.<genexpr>6  s     Kud5'NK   zCould not find in cache:
r   zNothing to delete.codez repo(s)z revision(s)rW   About to delete z totalling r   Dry run: no files were deleted.T)r   rz   r$   r9   zProceed with deletion?r   Deleted z repo(s) and z revision(s); freed )repos_deletedrevisions_deletedfreed)r   r   r
   r   r   r&   rY   r   warningrO   r$   rs   r   
exceptionsExitdelete_revisionsrq   rS   r%   rF   rX   rG   rH   expected_freed_size_strrw   resultconfirmexecute)r   r   r   r   rx   r   
resolutiondetailsstrategycountssummary_partssummary_texts               r1   rmr    sV   LO&y1 +='BJ))K
8J8JKK0	:;
: A%%&###++-}--vj6J6J/KLH !4!45F!M 1 12(;<$$ = =>lKL ; ;<LIJ<<.LHH~[9Y9Y8ZZ[\]":#6#67

-##1111	
 	KK(c2 !4!45FJJ
6$$%]63N3N2O P2231	6'' 55..U  O4S]]ODE3NOs   I< <	J#JJ#zhf cache prunezhf cache prune --dry-runc           	         	 t        |       }i }t	               }|j
                  D ]>  }t        d |j                  D              }|s"|||<   |j                  d |D               @ |j                  }	t        |      dk(  r|	st        j                  d       y |j                  t        |       }
t        |      }|
j                   |j"                  z   }t%        |j&                  t        |	            }t        j                  d| dt)        |       d	       t+        |       |r7t        j,                  d
d|j&                  t        |	      t)        |             yt        j.                  d|       |
j1                          |	D ]  }	 |j2                  j5                           t        j,                  d| dt)        |       d|j&                  t        |	      t)        |             y# t        $ r}t        d|j                         |d}~ww xY w# t6        $ r Y t8        $ r/}t        j:                  d|j2                   d|        Y d}~d}~ww xY w)zBRemove detached revisions and incomplete downloads from the cache.r   Nc              3   R   K   | ]  }t        |j                        d k(  s| ! yw)r   N)rO   r8   r   rv   s     r1   r   zprune.<locals>.<genexpr>  s!     `(HMMHZ^_H_X`s   ''c              3   4   K   | ]  }|j                     y wr^   ri   r  s     r1   r   zprune.<locals>.<genexpr>  s     G(--Gr   r   zJNo unreferenced revisions or incomplete downloads found. Nothing to prune.r   (z total).r  T)r   r$   
incompleter9   zProceed?r	  z!Could not delete incomplete file z: r
  z; freed r   )r  incomplete_deletedr  )r   r   r
   r   r   rz   r*   r$   updater   rO   r   rs   r  rq   rS   expected_freed_sizer   r[   rH   r   rw   r  r  r  	file_pathunlinkFileNotFoundErrorOSErrorr  )r   r   r   rx   r   r%   r$   rR   detachedr   r  r  total_freedsummaryincomplete_files                  r1   pruner.  c  sA   0O&y1 EGH%I## H`dnn``!GhGGH %55
9~#3]^-}--vi/@AH *F..1V1VVKV88#>N:OPGHHy<+D*EXNO"8,

-11+,k*	
 	KK
$+ `	`%%,,.` JJ
7)8L$=#>a@ 55/0;'	]  O4S]]ODE3NOT ! 	 	`KK;O<U<U;VVXY\X]^__	`s5   G+ 	H+	H4HH	I I(%II)zhf cache verify gpt2z)hf cache verify gpt2 --revision refs/pr/1z.hf cache verify my-dataset --repo-type datasetra   r`   rv   zXCache directory to use when verifying files from cache (defaults to Hugging Face cache).	local_dirz?If set, verify files under this directory instead of the cache.fail_on_missing_filesz--fail-on-missing-filesz?Fail if some files exist on the remote but are missing locally.fail_on_extra_filesz--fail-on-extra-fileszLFail if some files exist locally but are not present on the remote revision.tokenc           
         |7|5t        j                  d       t        j                  j	                  d      t        |      }|j                  | t        |d      r|j                  n
t        |      ||||      }	d}
|	j                  r<d	j                  d
 |	j                  D              }t        j                  d|        d}
|	j                  rj|r=d	j                  d |	j                  D              }t        j                  d|        d}
n+t        j                  t        |	j                         d       |	j                   rj|r=d	j                  d |	j                   D              }t        j                  d|        d}
n+t        j                  t        |	j                          d       |	j"                  }|
dk7  rUt        j                  d|  d|j                   d| d|	j$                          t        j                  j	                  |
      t        j&                  d|	j(                   d|j                   d|  d| |j                  |	j(                  t        |             y)a  Verify checksums for a single repo revision from cache or a local directory.

    Examples:
      - Verify main revision in cache: `hf cache verify gpt2`
      - Verify specific revision: `hf cache verify gpt2 --revision refs/pr/1`
      - Verify dataset: `hf cache verify karpathy/fineweb-edu-100b-shuffle --repo-type dataset`
      - Verify local dir: `hf cache verify deepseek-ai/DeepSeek-OCR --local-dir /path/to/repo`
    NzCCannot pass both --local-dir and --cache-dir. Use one or the other.r   r  )r2  r   )ra   r`   rv   r/  r   r2  r   r  c           
   3   P   K   | ]  }d |d    d|d    d|d    d|d       yw)	rn   pathz: expected r   r!  	algorithmz), got actualNr/   )r   ms     r1   r   zverify.<locals>.<genexpr>  sF      
 1V9+[:r!K.9IQRS[Q\P]^
s   $&u<   ❌ Checksum verification failed for the following file(s):
r   c              3   &   K   | ]	  }d |   ywr  r/   r   ps     r1   r   zverify.<locals>.<genexpr>  s     Iq$qc
Ir  u6   ❌ Missing files (present remotely, absent locally):
zM remote file(s) are missing locally. Use --fail-on-missing-files for details.c              3   &   K   | ]	  }d |   ywr  r/   r:  s     r1   r   zverify.<locals>.<genexpr>	  s     Gq$qc
Gr  u4   ❌ Extra files (present locally, absent remotely):
zV local file(s) do not exist on the remote repo. Use --fail-on-extra-files for details.zVerification failed for 'z' (z) in z.
  Revision: z	Verified z file(s) for z 'z'. All checksums match.)ra   r`   checkedr5  )r   errorr   r  r  r   verify_repo_checksumshasattrr   r+   
mismatchesrY   rs   missing_pathsr  rO   extra_pathsverified_pathrv   r  checked_count)ra   r`   rv   r   r/  r0  r1  r2  apir  	exit_coder  verified_locations                r1   verifyrI    sM   ` !6		WX###++
5
!C&&%,Y%@)//c)n ' F I)) 
&&
 
 	PQXPYZ[	 iiIF4H4HIIGHHNwiXYIKKv++,- .; ;
 iiGF4F4FGGGHHLWIVWIKKv))*+ ,9 9
 ,,A~		'yIOO3DEJ[I\\klrl{l{k|}	
 ###33JJ
F(()y6Gr'Rij//$$"#r0   )NFNNN)NFF)SrI   r   r   collectionsr   collections.abcr   r   dataclassesr   enumr   typingr   r	   r   huggingface_hub.errorsr
   utilsr   r   r   r   r   r   r   r   utils._parsingr   r   
_cli_utilsr   r   r   r   r   r   
_frameworkr   r   _outputr   	cache_clir#   compiler   r   r   r   r   r   _sort_options_dictrq   rf   r+   r'   rB   rE   r.   r   r-   r*   RepoRefsMaprS   rJ   r[   rw   r~   r   r   r   r   r   r   r   r   r   commandr   r  r.  modelrI  r/   r0   r1   <module>r[     s   O 	  # - !  !  +	 	 	 8 ` ` (  >?	 $   "**ab6 ?5


LM    * 6C!s*-d|#d|$+.%u#e}%6
 ="43xP $   >#5#<<=
>9S>12Tni8J.KKLTT$3 # # [W^YWiMj=j5k [pt [((
n	eN$667	78:("
"s 
"s 
"""6:"
4
[()"4>
>)>~1D8%@$FG>B54< S  4 (3# 3%*uSRUX9V0WY]0]*^ 3l&[ &49 &Qd &X    	 	 	 	 	GD
d
L	
	D
 V	
	D
 S	Dm	
	D
* d7	
	+D
< d
f	
	=D
H 
ID
D
N   * 	 	 	5OS	|	
	O d
L	
	O 
,	
	
O* ?	
	+O6 
7OOd -/IJK 	 	 	)Ld
L	
	L 
,	
	
L ?	
	L* 
+L LL^    )..  	 	 	 	=fff f d
k	
		f d
R	
	f  %%R	
	!f. ##_	
	/f< =f> 
?ffr0   