
    ZiXm                     4
   d Z 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 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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)m*Z*  e*d          Z+ ed           G d d                      Z, ej-        d          Z.h dZ/h dZ0h dZ1 ej-        d          Z2dddddZ3i Z4 e5e1          D ]Z6e6e4e6<   e6 de4e6 d<   e6 de4e6 d<    e
de4e7e8           Z9 ed           G d! d"                      Z:eeee         f         Z;eee<e7         f         Z=d#eee<e         f         d$e:fd%Z>d#eee<e         f         d$dfd&Z?d'ed$eee7ef         ee7eeef         f         f         fd(Z@d'ed)eAd$eee;         e=f         fd*ZBd+e7d,e=d$eeee         eCgeAf         fd-ZDd.ee;         d)eAd,e=d$eee7ef                  fd/ZEd.ee;         d)eAd,e=d$dfd0ZFd.ee;         d)eAd,e=d$dfd1ZGd2eeC         d3e7d4eCd$eAfd5ZHd6e7d$eIee;geIed7f         f         eAf         fd8ZJd'ed9eKe7         d$e,fd:ZLe+M                    g d;<          dd=de$jN        d=ddfd>eee7          ejO        d?          f         d@eeA ejO        dA          f         dBeeeKe7                   ejO        dCdDdE          f         dFee$ ejO        dG          f         dHeeA ejO        dIdJdK          f         dLeee9          ejO        dM          f         dNeeeP          ejO        dO          f         d$dfdP            ZQe+M                    g dQ<          	 	 	 dld9eeKe7          ejR        dR          f         d>eee7          ejO        d?          f         dSeeA ejO        dTdUdV          f         dWeeA ejO        dX          f         d$df
dY            ZSe+M                    dZd[g<          	 	 	 dld>eee7          ejO        d?          f         dSeeA ejO        dTdUdV          f         dWeeA ejO        dX          f         d$dfd\            ZTe+M                    g d]<          e&jU        dddd=d=dfd^e%d_e&d`e'd>eee7          ejO        da          f         dbeee7          ejO        dc          f         ddeeA ejO        dedf          f         dgeeA ejO        dhdi          f         dje(d$dfdk            ZVdS )mzHContains the 'hf cache' command group with cache management subcommands.    N)defaultdict)	dataclass)Enum)	AnnotatedAnyCallableDictListMappingOptionalTuple)CLIError   )ANSICachedRepoInfoCachedRevisionInfoCacheNotFoundHFCacheInfo_format_sizescan_cache_dirtabulate)parse_duration
parse_size   )OutputFormat	RepoIdArgRepoTypeOptRevisionOptTokenOpt
get_hf_apityper_factoryzManage local cache directory.)helpT)frozenc                   f    e Zd ZU ee         ed<   eeee         f         ed<   e	edf         ed<   dS )_DeletionResolution	revisionsselected.missingN)
__name__
__module____qualname__	frozensetstr__annotations__dictr   r   tuple     T/root/projects/butler/venv/lib/python3.11/site-packages/huggingface_hub/cli/cache.pyr%   r%   :   sR         ~>9-?#@@AAAA38_r2   r%   zA^(?P<key>[a-zA-Z_]+)\s*(?P<op>==|!=|>=|<=|>|<|=)\s*(?P<value>.+)$>   <=>!=<=>=>   refssizetypeaccessedmodified>   namer;   r=   r>   z.^(?P<key>[a-zA-Z_]+)(?::(?P<order>asc|desc))?$descasc)r=   r>   r;   r?   z:asc_ascz:desc_descSortOptions)r<   modulec                   2    e Zd ZU dZeed<   eed<   eed<   dS )CacheDeletionCountsz>Simple counters summarizing cache deletions for CLI messaging.
repo_countpartial_revision_counttotal_revision_countN)r)   r*   r+   __doc__intr.   r1   r2   r3   rG   rG   Y   s9         HHOOOr2   rG   selected_by_reporeturnc                 
   d}d}d}|                                  D ]S\  }}|t          |          z  }t          |          t          |j                  k    r|dz  }|t          |          z  }T||z
  }t          |||          S )z(Summarize deletions across repositories.r   r   )itemslenr&   rG   )rM   rH   total_revisionsrevisions_in_full_reposrepor&   rI   s          r3   summarize_deletionsrU   f   s     JO+1133 6 6i3y>>)y>>S0000!OJ#s9~~5#,/FFz+A?SSSr2   c           
         t          |                                 d           D ]}|j         d|j         }t          | |         d           }t	          |          t	          |j                  k    rt          d| d           dt          d| d           |D ]M}d                    t          |j                            pd	}t          d
|j	         d| d|j
                    NdS )zBPretty-print selected cache revisions during confirmation prompts.c                 B    | j         | j                                        fS N	repo_typerepo_idlowerrT   s    r3   <lambda>z0print_cache_selected_revisions.<locals>.<lambda>z   s    $.RVR^RdRdRfRfAg r2   key/c                     | j         S rX   commit_hashrevs    r3   r^   z0print_cache_selected_revisions.<locals>.<lambda>|       3? r2     - z (entire repo): z
(detached)z      z [z] N)sortedkeysrZ   r[   rQ   r&   printjoinr:   rd   size_on_disk_str)rM   rT   repo_keyr&   revisionr:   s         r3   print_cache_selected_revisionsrr   x   s)   ',,..4g4ghhh 
X 
Xn55t|55+D17R7RSSS	y>>S00001111222 X   !!!! 	X 	XH88F8=1122BlDV8/VV4VV8;TVVWWWW	X
X 
Xr2   hf_cache_infoc                     i }i }| j         D ]H}|j                                        }|||<   |j        D ] }||f||j                                        <   !I||fS )zPCreate lookup tables so CLI commands can resolve repo ids and revisions quickly.)reposcache_idr\   r&   rd   )rs   repo_lookuprevision_lookuprT   rp   rq   s         r3   build_cache_indexry      s     .0KLNO# M M=&&(( $H 	M 	MH=A8<LOH0668899	M''r2   include_revisionsc                   g }i }t          | j        d           }|D ]n}t          d |j        D                       ||<   |r2t          |j        d           D ]}|                    ||f           W|                    |df           o|r|                    d            n|                    d            ||fS )z;Flatten cache metadata into rows consumed by `hf cache ls`.c                 B    | j         | j                                        fS rX   rY   r]   s    r3   r^   z'collect_cache_entries.<locals>.<lambda>   s    QUQ]QcQcQeQe@f r2   r_   c                 &    h | ]}|j         D ]}|S r1   )r:   ).0rq   refs      r3   	<setcomp>z(collect_cache_entries.<locals>.<setcomp>   s*    (e(e(eW_Wd(e(ePS(e(e(e(er2   c                     | j         S rX   rc   re   s    r3   r^   z'collect_cache_entries.<locals>.<lambda>   rg   r2   Nc                 J    | d         j         | d         | d         j        ndfS )Nr   r    )rv   rd   entrys    r3   r^   z'collect_cache_entries.<locals>.<lambda>   s+    a!(-a(<a$$" r2   c                     | d         j         S )Nr   )rv   r   s    r3   r^   z'collect_cache_entries.<locals>.<lambda>   s    uQx'8 r2   )rk   ru   r,   r&   appendsort)rs   rz   entriesrepo_refs_mapsorted_reposrT   rq   s          r3   collect_cache_entriesr      s    !#G!#M--3f3fgggL ) )'(e(eT^(e(e(effd 	)"4>7R7RSSS 1 1h/00001 NND$<(((( :  	 	
 	
 	
 	
 	88999M!!r2   exprr   c           
      `  	
 t                               |                                           }|st          d|  d          |                    d                                          |                    d          |                    d                                          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 rRt                                                    	dt          dt          t                   dt          dt          f	fd}|S dk    r\                                dk    rt          d d          dt          dt          t                   dt          dt          ffd}|S dk    rt          d d	          dt          dt          t                   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'.r`   opvaluezUnsupported operator 'z' in filter ''. Must be one of .zUnsupported filter key '' in 'r;   c                 B    t          ||j        n| j                  S rX   )_compare_numericsize_on_disk)rT   rq   _r   size_thresholds      r3   r^   z&compile_cache_filter.<locals>.<lambda>   s+    )9%-%9H!!t?P*
 *
 r2   >   r=   r>   rT   rq   nowrN   c                 n    dk    r| j         n||j        n| j        }|dS t          ||z
            S )Nr=   F)last_accessedlast_modifiedr   )rT   rq   r   	timestampr`   r   secondss       r3   _time_filterz*compile_cache_filter.<locals>._time_filter   s\     *$$ "" ' ++'   u#C)ORAAAr2   r<   r5   z/Only '=' is supported for 'type' filters. Got 'r   c                 >    | j                                         k    S rX   )rZ   r\   )rT   rq   r   expecteds      r3   _type_filterz*compile_cache_filter.<locals>._type_filter   s    >''))X55r2   z.Only '=' is supported for 'refs' filters. Got c                     ||j         n!                    | t                                }                                d |D             v S )Nc                 6    g | ]}|                                 S r1   )r\   )r~   r   s     r3   
<listcomp>z>compile_cache_filter.<locals>._refs_filter.<locals>.<listcomp>   s     (E(E(E(E(E(Er2   )r:   getr,   r\   )rT   rq   r   r:   r   	value_raws       r3   _refs_filterz*compile_cache_filter.<locals>._refs_filter   sO    $,$88==m>O>OPTV_VaVa>b>bD??$$(E(E(E(E(EEEr2   )_FILTER_PATTERNmatchstrip
ValueErrorgroupr\   _ALLOWED_OPERATORSlist_FILTER_KEYSr   r   r   r   r   floatbool)r   r   r   r   r   r   r   r`   r   r   r   r   s    `    @@@@@@r3   compile_cache_filterr      s    !!$**,,//E B@@@@AAA
++e


"
"
$
$C	T		BG$$**,,I	###v"vv4vv[_`r[s[svvvwww
,lClltllW[\hWiWilllmmm
f}}#I..
 
 
 
 
 	
 &&& !2!233
	B~ 
	BBT9U 
	B\a 
	Bfj 
	B 
	B 
	B 
	B 
	B 
	B 
	B 
	B 
f}}??$$99UrUUUVVV	6~ 	6BT9U 	6Z_ 	6dh 	6 	6 	6 	6 	6 	6  99SbSSSTTT	F~ 	FBT9U 	FZ_ 	Fdh 	F 	F 	F 	F 	F 	F 	F r2   r   c                   g }| D ]\  }}|rQ|
|j         |j        |j        t          |j                  |j        |j        |j        t          |j	                  d}nO|j         |j        |j        |j        |j        t          |
                    |t                                          d}|                    |           |S )zGNormalize cache entries into serializable records for JSON/CSV exports.N)r[   rZ   rq   snapshot_pathr   r   r   r:   )r[   rZ   r   r   r   r:   )r[   rZ   rd   r-   r   r   r   r   rk   r:   r   r,   r   )r   rz   r   payloadrT   rq   records          r3   _build_cache_export_payloadr      s     %'G!  h 	<!^$0!$X%;!<!< ( 5!%!3!)!7x}--	& 	&FF  <!^ $ 1!%!3!%!3}00y{{CCDD F 	vNr2   c                8   | s|rdnd}t          |           dS |rg d}d | D             }ng d}fd| D             }t          t          ||                     d	 | D             }t          |          }|r3t          d
 | D                       }t          d | D                       }	n2t          d |D                       }t          d |D                       }	d| d| dt	          |	           d}
t          t          j        |
                     dS )zBRender cache entries as a table and show a human-readable summary.zNo cached revisions found.zNo cached repositories found.N)IDREVISIONSIZELAST_MODIFIEDREFSc                     g | ]Z\  }}||j         |j        |j                            d          |j        d                    t          |j                            g[S )N   rj   )rv   rd   ro   rjustlast_modified_strrn   rk   r:   )r~   rT   rq   s      r3   r   z-print_cache_entries_table.<locals>.<listcomp>  sp     

 

 

 h# $)//22*..// $##r2   )r   r   LAST_ACCESSEDr   r   c                     g | ]u\  }}|j         |j                            d           |j        pd|j        d                    t                              |t                                                    gvS )r   r   rj   )	rv   ro   r   last_accessed_strr   rn   rk   r   r,   )r~   rT   r   r   s      r3   r   z-print_cache_entries_table.<locals>.<listcomp>+  s     	
 	
 	
 a %++A..&,"& 1 1$	 D DEEFF	
 	
 	
r2   )headersc                     h | ]\  }}|S r1   r1   )r~   rT   r   s      r3   r   z,print_cache_entries_table.<locals>.<setcomp>8  s    000WT1D000r2   c              3   $   K   | ]\  }}|dV  d S )Nr   r1   r~   r   rq   s      r3   	<genexpr>z,print_cache_entries_table.<locals>.<genexpr>;  s+      RR;1hX=QQ=Q=Q=Q=QRRr2   c              3   .   K   | ]\  }}||j         V  d S rX   r   r   s      r3   r   z,print_cache_entries_table.<locals>.<genexpr><  s.      bb;1hXMa.MaMaMaMabbr2   c              3   >   K   | ]}t          |j                  V  d S rX   )rQ   r&   r~   rT   s     r3   r   z,print_cache_entries_table.<locals>.<genexpr>>  s,      JJTS00JJJJJJr2   c              3   $   K   | ]}|j         V  d S rX   r   r   s     r3   r   z,print_cache_entries_table.<locals>.<genexpr>?  s%      DDt*DDDDDDr2   z
Found z repo(s) for a total of z revision(s) and z	 on disk.)rm   r   rQ   sumr   r   bold)r   rz   r   messager   
table_rowsunique_reposrH   revision_count
total_sizesummarys     `        r3   print_cache_entries_tabler     s     2Ch..Ihg 
EEE

 

 #*

 

 



 KJJ	
 	
 	
 	
 #	
 	
 	

 
(:w
/
/
/00000000L\""J ERR'RRRRRbb'bbbbb

JJ\JJJJJDD|DDDDD
 B  B  B^  B  B^jku^v^v  B  B  BG	$)G

r2   c                    t          | ||          }t          j        |t          j        d           t          j                            d           dS )z7Dump cache entries as JSON for scripting or automation.rz   r   r   )indent
N)r   jsondumpsysstdoutwrite)r   rz   r   r   s       r3   print_cache_entries_jsonr   E  sO     *'EVfstttGIgsz!,,,,JTr2   leftr   rightc                     | dS | |k    | |k    | |k    | |k     | |k    | |k    d}||vrt          d|           ||         S )z)Evaluate numeric comparisons for filters.NF)r5   r7   r6   r4   r9   r8   z)Unsupported numeric comparison operator: )r   )r   r   r   comparisonss       r3   r   r   N  sr    |u U]emE\E\emem K 
IRIIJJJr?r2   	sort_expr.c           
         t                               |                                                                           }|st	          d|  d          |                    d                                          |                    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'.r`   orderzUnsupported sort key 'r   r   r   r@   r   rN   .c                 2   | \  }}dk    r|j                                         }|fS dk    r||j        n|j        }|fS dk    r|j        |j        nd}|fS dk    r&||j        |j        nd}n|j        |j        nd}|fS t          d           )Nr?   r;   r=   g        r>   zUnsupported sort key: )rv   r\   r   r   r   r   )r   rT   rq   r   r`   s       r3   	_sort_keyz%compile_cache_sort.<locals>._sort_keyw  s    h&==,,..E8O&==-5-AH))tGXE8O* +/*<*HD&&cE8O*#2:2H2T..Z].2.@.L**RU8O 7#77888r2   )_SORT_PATTERNr   r   r\   r   r   
_SORT_KEYSr   _SORT_DEFAULT_ORDER
CacheEntryr0   r   )r   r   explicit_orderr   reverser   r`   s         @r3   compile_cache_sortr   b  s    	 1 1 7 7 9 9::E xvivvvwww
++e


"
"
$
$C[[))N
*m#mmYmmZ^_iZjZjmmmnnn -JNN2Ec2JEvoG9 9c3h 9 9 9 9 9 9< gr2   targetsc                 8   t          |           \  }}t          t                    }t                      }g }|D ]}|                                }|s|                                }	t          j        d|	          rh|                    |	          }
|
|                    |           p|
\  }}||         	                    |           |	                    |j
                   |                    |	          }||                    |           |j        D ]7}||         	                    |           |	                    |j
                   8d |                                D             }t          t          |          |t          |                    S )z8Resolve the deletion targets into a deletion resolution.z[0-9a-fA-F]{40}Nc                 4    i | ]\  }}|t          |          S r1   )r,   )r~   rT   revss      r3   
<dictcomp>z-_resolve_deletion_targets.<locals>.<dictcomp>  s$    PPPttYt__PPPr2   r&   r'   r(   )ry   r   setr   r\   re	fullmatchr   r   addrd   r&   rP   r%   r,   r0   )rs   r   rw   rx   r'   r&   r(   
raw_targettargetloweredr   rT   rq   matched_repofrozen_selecteds                  r3   _resolve_deletion_targetsr    s   #4]#C#C K>I#>N>NH%%IG 0 0
!!## 	,,..<*G44 	#''00E}z***"ND(TNx(((MM(.///"w//NN:&&&$. 	0 	0H\"&&x000MM(.////	0 QPx~~?O?OPPPOI&& g   r2   )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.formatzOutput format.quietz-qz--quietz-Print only IDs (repo IDs or revision hashes).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                 f   	 t          |           }n*# t          $ r}t          d|j                   |d}~ww xY w|pg }	t	          ||          \  }
	 fd|	D             }n4# t
          $ r'}t          j        t          |                    |d}~ww xY wt          j	                    |D ]fd|
D             }
|rd	 t          |j                  \  }}|
                    ||           n4# t
          $ r'}t          j        t          |                    |d}~ww xY w|(|dk     rt          j        d| d	          |
d|         }
|r'|
D ]"\  }}t          ||j        n|j                   #dS t           j        t$          t           j        t(          i} ||         |
|
          S )z&List cached repositories or revisions.Cache directory not found: N)rz   c                 0    g | ]}t          |          S r1   )r   )r~   r   r   s     r3   r   zls.<locals>.<listcomp>	  s$    TTTD*4??TTTr2   c                 F    g | ]} |d          |d                   |S )r   r   r1   )r~   r   fnr   s     r3   r   zls.<locals>.<listcomp>  s4    MMMUE!HeAh1L1LM5MMMr2   )r`   r   r   z&Limit must be a positive integer, got r   r   )r   r   r   r  r   r   typerBadParameterr-   timer   r   r   rm   rd   rv   r   tabler   r   r   )r  r&   r  r  r  r   r  rs   excfiltersr   
filter_fnssort_key_fnr   rT   rq   
formattersr  r   r   s                    @@@r3   lsr    s;   xO&y11 O O ODS]DDEE3NO lG2=T]^^^G]4TTTTGTTT

 4 4 4 S**34 )++C N NMMMMMgMMM  8	8#5dj#A#A KLL['L:::: 	8 	8 	8$SXX..C7	8 199$%Ve%V%V%VWWW&5&/ % 	S 	SND((*>(&&DMRRRR 	53J :fgR_````s@    
<7<A' '
B1"BB.C4 4
D%>"D  D%)zhf cache rm model/gpt2zhf cache rm <revision_hash>z hf cache rm model/gpt2 --dry-runzhf cache rm model/gpt2 --yeszQOne or more repo IDs (e.g. model/bert-base-uncased) or revision hashes to delete.yesz-yz--yeszSkip confirmation prompt.dry_runz,Preview deletions without removing anything.c           	      J   	 t          |          }n*# t          $ r}t          d|j                   |d}~ww xY wt	          ||           }|j        r+t          d           |j        D ]}t          d|            t          |j                  dk    r$t          d           t          j
        d           |j        t          |j                   }t          |j                  }	g }
|	j        r|
                    |	j         d           |	j        r|
                    |	j         d	           |
s|
                    |	j         d	           d
                    |
          }t          d| d|j         d           t+          |j                   |rt          d           dS |s't          j        dd          st          d           dS |                                 t          |j                  }	t          d|	j         d|	j         d|j         d           dS )z(Remove cached repositories or revisions.r
  Nz2Could not find the following targets in the cache:rh   r   zNothing to delete.codez repo(s)z revision(s)z and About to delete z totalling r   Dry run: no files were deleted.zProceed with deletion?F)defaultzDeletion cancelled.Deleted z repo(s) and z revision(s); freed )r   r   r   r  r  r(   rm   rQ   r&   r  Exitdelete_revisionsrk   rU   r'   rH   r   rI   rJ   rn   expected_freed_size_strrr   confirmexecute)r   r  r  r  rs   r  
resolutionr   strategycountssummary_partssummary_texts               r3   rmr+  +  s   JO&y11 O O ODS]DDEE3NO +='BBJ "BCCC' 	" 	"E...!!!!
:  A%%"###ja    -}-vj6J/K/KLH !455F!M = 1;;;<<<$ M =KKKLLL K ;IIIJJJ<<..L	
Y\
Y
Yh6V
Y
Y
YZZZ":#6777 /000 u}%=uMMM #$$$ !455F	 	H6$  	H  	H63N  	H  	Hdl  eE  	H  	H  	H        
949zhf cache prunezhf cache prune --dry-runc                 P   	 t          |           }n*# t          $ r}t          d|j                   |d}~ww xY wi }t	                      }|j        D ]G}t          d |j        D                       }|s#|||<   |                    d |D                        Ht          |          dk    rt          d           dS t          t          |          |d          }	 |j        t          |	j                   }
t          |          }t          d	|j         d
|
j         d           t#          |           |rt          d           dS |s%t%          j        d          st          d           dS |
                                 t          d|j         d|
j         d           dS )z)Remove detached revisions from the cache.r
  Nc              3   J   K   | ]}t          |j                  d k    |V  dS )r   N)rQ   r:   r~   rq   s     r3   r   zprune.<locals>.<genexpr>  s7      ``(HMHZHZ^_H_H_XH_H_H_H_``r2   c              3   $   K   | ]}|j         V  d S rX   rc   r/  s     r3   r   zprune.<locals>.<genexpr>  s%      GG(-GGGGGGr2   r   z2No unreferenced revisions found. Nothing to prune.r1   r   r  z unreferenced revision(s) (z total).r  zProceed?zPruning cancelled.r   z! unreferenced revision(s); freed r   )r   r   r   r  r   ru   r,   r&   updaterQ   rm   r%   r"  rk   rU   rJ   r#  rr   r  r$  r%  )r  r  r  rs   r  r'   r&   rT   detachedr&  r'  r(  s               r3   pruner3  ~  s   0O&y11 O O ODS]DDEE3NO EGH%%I# H H``dn````` 	!GGhGGGGGGG
9~~BCCC$I&&  J
 .}-vj6J/K/KLH **F	}66}}S[Ss}}}   #8,,, /000 u}Z00 "###	
vV0
v
vS[Ss
v
v
vwwwwwr,  )zhf cache verify gpt2z)hf cache verify gpt2 --revision refs/pr/1z.hf cache verify my-dataset --repo-type datasetr[   rZ   rq   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                 V   |&|$t          d           t          j        d          t          |          }|                    | t          |d          r|j        nt          |          ||||          }	d}
t          |	j	                  }|rNt          d	           |	j	        D ]5}t          d
|d          d|d          d|d          d|d                     6d}
|	j
        rY|r.t          d           |	j
        D ]}t          d
|            d}
n)t          |	j
                   d}t          d|            |	j        rY|r.t          d           |	j        D ]}t          d
|            d}
n)t          |	j                   d}t          d|            |	j        }|
dk    rJt          d|  d|j         d| d           t          d|	j                    t          j        |
          t          d|	j         d|  d|j         d|            t          d           dS ) 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  )r7  r   )r[   rZ   rq   r4  r  r7  r   u;   ❌ Checksum verification failed for the following file(s):rh   pathz: expected r   z (	algorithmz), got actualr   z1Missing files (present remotely, absent locally):zM remote file(s) are missing locally. Use --fail-on-missing-files for details.u   ⚠️  z/Extra files (present locally, absent remotely):zV local file(s) do not exist on the remote repo. Use --fail-on-extra-files for details.u   ❌ Verification failed for 'z' (z) in r   z  Revision: u   ✅ Verified z file(s) for 'z  All checksums match.)rm   r  r!  r    verify_repo_checksumshasattrr   r-   r   
mismatchesmissing_pathsrQ   extra_pathsverified_pathrq   checked_count)r[   rZ   rq   r  r4  r5  r6  r7  apiresult	exit_codehas_mismatchesmpwarningverified_locations                   r3   verifyrK    s   ` !6STTTja    
5
!
!
!C&&%,Y%@%@T)//c)nn '  F I&+,,N KLLL" 	f 	fAd6ddq}dd+ddWXYaWbddeeee	 (  
	(EFFF) " "jQjj!!!!II v+,, ; ; ;  &W&&''' ( 
	(CDDD' " "jQjj!!!!II v)** 9 9 9  &W&&''',A~~dgdd)/ddPadddeee.V_..///ji((((	
s&.
s
sg
s
s)/
s
s`q
s
sttt	
"#####r2   )NFF)WrK   r   r   r   r  collectionsr   dataclassesr   enumr   typingr   r   r   r	   r
   r   r   r   r  huggingface_hub.errorsr   utilsr   r   r   r   r   r   r   r   utils._parsingr   r   
_cli_utilsr   r   r   r   r   r    r!   	cache_clir%   compiler   r   r   r   r   r   _sort_options_dictrk   r`   r-   r)   rD   rG   r   r,   RepoRefsMaprU   rr   ry   r   r   r   r   r   r   r   r   r0   r   r   r  commandr  OptionrL   r  Argumentr+  r3  modelrK  r1   r2   r3   <module>r\     s   O N  				 



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