
    _jh                        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&  e$d          Z' e	d           G d d                      Z( ej)        d          Z*h dZ+h dZ,h dZ- ej)        d          Z.dddddZ/i Z0 e1e-          D ]Z2e2e0e2<   e2 de0e2 d<   e2 de0e2 d <    ed!e0e3e4"          Z5 e	d           G d# d$                      Z6e7eedz  f         Z8e9ee:e3         f         Z;d%eee:e         f         d&e6fd'Z<d%eee:e         f         d&dfd(Z=d)ed&e7e9e3ef         e9e3e7eef         f         f         fd*Z>d+e3d&e3fd,Z?d)ed-e@d&e7eAe8         e;f         fd.ZBd/e3d0e;d&eeedz  eCge@f         fd1ZDd2eCdz  d3e3d4eCd&e@fd5ZEd6e3d&e7ee8ge7ed7f         f         e@f         fd8ZFd)ed9eAe3         d&e(fd:ZGe'H                    d;g d<=          	 	 	 	 	 dgd?ee3dz   ejI        d@          f         dAee@ ejI        dB          f         dCeeAe3         dz   ejI        dDdEdF          f         dGee5dz   ejI        dH          f         dIeeJdz   ejI        dJ          f         d&dfdK            ZKe'H                    g dL=          	 	 	 dhd9eeAe3          ejL        dM          f         d?ee3dz   ejI        d@          f         dNee@ ejI        dOdPdQ          f         dRee@ ejI        dS          f         d&df
dT            ZMe'H                    dUdVg=          	 	 	 dhd?ee3dz   ejI        d@          f         dNee@ ejI        dOdPdQ          f         dRee@ ejI        dS          f         d&dfdW            ZNe'H                    g dX=          e jO        dddd>d>dfdYedZe d[e!d?ee3dz   ejI        d\          f         d]ee3dz   ejI        d^          f         d_ee@ ejI        d`da          f         dbee@ ejI        dcdd          f         dee"d&dfdf            ZPdS )izHContains 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)outz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     V/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/huggingface_hub/cli/cache.pyr!   r!   1   sR         ~>9-?#@@AAAA38_r.   r!   zA^(?P<key>[a-zA-Z_]+)\s*(?P<op>==|!=|>=|<=|>|<|=)\s*(?P<value>.+)$>   <=>!=<=>=>   refssizetypeaccessedmodified>   namer7   r9   r:   z.^(?P<key>[a-zA-Z_]+)(?::(?P<order>asc|desc))?$descasc)r9   r:   r7   r;   z:asc_ascz:desc_descSortOptions)r8   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*   r-   r.   r/   rC   rC   P   s9         HHOOOr.   rC   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"   rC   )rI   rD   total_revisionsrevisions_in_full_reposrepor"   rE   s          r/   summarize_deletionsrQ   ]   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Sr.   c           
         t          |                                 d           D ]}|j         d|j         }t          | |         d           }t	          |          t	          |j                  k    rt          j        d| d           it          j        d| d           |D ]R}d                    t          |j	                            pd	}t          j        d
|j
         d| d|j                    SdS )zBPretty-print selected cache revisions during confirmation prompts.c                 B    | j         | j                                        fS N	repo_typerepo_idlowerrP   s    r/   <lambda>z0print_cache_selected_revisions.<locals>.<lambda>q   s    $.RVR^RdRdRfRfAg r.   key/c                     | j         S rT   commit_hashrevs    r/   rZ   z0print_cache_selected_revisions.<locals>.<lambda>s       3? r.     - z (entire repo): z
(detached)z      z [z] N)sortedkeysrV   rW   rM   r"   r   textjoinr6   r`   size_on_disk_str)rI   rP   repo_keyr"   revisionr6   s         r/   print_cache_selected_revisionsrn   o   s/   ',,..4g4ghhh 
[ 
[n55t|55+D17R7RSSS	y>>S0000H4H444555####$$$! 	[ 	[H88F8=1122BlDHYh2YYdYYh>WYYZZZZ	[
[ 
[r.   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_idrX   r"   r`   )ro   repo_lookuprevision_lookuprP   rl   rm   s         r/   build_cache_indexru   ~   s     .0KLNO# M M=&&(( $H 	M 	MH=A8<LOH0668899	M''r.   targetc                     |                      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`.NzBOnly repo-level hf:// URIs are supported by `hf cache rm` for now.r]   )
startswithr   is_repor
   rm   path_in_repor8   id)rv   uris     r/   _repo_cache_id_from_targetr}      s{    W%% 
v

C; USTTT
|3#3[\\\h!!!!!r.   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 rT   rU   rY   s    r/   rZ   z'collect_cache_entries.<locals>.<lambda>   s    QUQ]QcQcQeQe@f r.   r[   c                 &    h | ]}|j         D ]}|S r-   )r6   ).0rm   refs      r/   	<setcomp>z(collect_cache_entries.<locals>.<setcomp>   s*    (e(e(eW_Wd(e(ePS(e(e(e(er.   c                     | j         S rT   r_   ra   s    r/   rZ   z'collect_cache_entries.<locals>.<lambda>   rc   r.   Nc                 J    | d         j         | d         | d         j        ndfS )Nr   r    )rr   r`   entrys    r/   rZ   z'collect_cache_entries.<locals>.<lambda>   s+    a!(-a(<a$$" r.   c                     | d         j         S )Nr   )rr   r   s    r/   rZ   z'collect_cache_entries.<locals>.<lambda>   s    uQx'8 r.   )rg   rq   r(   r"   appendsort)ro   r~   entriesrepo_refs_mapsorted_reposrP   rm   s          r/   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!!r.   exprr   c           
      0  	
 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 rJt                                                    	dt          dt          dz  dt          dt          f	fd}|S dk    rT                                dk    rt          d d          dt          dt          dz  dt          dt          ffd}|S dk    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'.r\   opvaluezUnsupported operator 'z' in filter ''. Must be one of .zUnsupported filter key '' in 'r7   c                 B    t          ||j        n| j                  S rT   )_compare_numericsize_on_disk)rP   rm   _r   size_thresholds      r/   rZ   z&compile_cache_filter.<locals>.<lambda>   s+    )9%-%9H!!t?P*
 *
 r.   >   r9   r:   rP   rm   NnowrJ   c                 n    dk    r| j         n||j        n| j        }|dS t          ||z
            S )Nr9   F)last_accessedlast_modifiedr   )rP   rm   r   	timestampr\   r   secondss       r/   _time_filterz*compile_cache_filter.<locals>._time_filter   s\     *$$ "" ' ++'   u#C)ORAAAr.   r8   r1   z/Only '=' is supported for 'type' filters. Got 'r   c                 >    | j                                         k    S rT   )rV   rX   )rP   rm   r   expecteds      r/   _type_filterz*compile_cache_filter.<locals>._type_filter   s    >''))X55r.   z.Only '=' is supported for 'refs' filters. Got c                     ||j         n!                    | t                                }                                d |D             v S )Nc                 6    g | ]}|                                 S r-   )rX   )r   r   s     r/   
<listcomp>z>compile_cache_filter.<locals>._refs_filter.<locals>.<listcomp>   s     (E(E(E(E(E(Er.   )r6   getr(   rX   )rP   rm   r   r6   r   	value_raws       r/   _refs_filterz*compile_cache_filter.<locals>._refs_filter   sO    $,$88==m>O>OPTV_VaVa>b>bD??$$(E(E(E(E(EEEr.   )_FILTER_PATTERNmatchstrip
ValueErrorgrouprX   _ALLOWED_OPERATORSlist_FILTER_KEYSr   r   r   r   floatbool)r   r   r   r   r   r   r   r\   r   r   r   r   s    `    @@@@@@r/   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9Kd9R 
	BY^ 
	Bcg 
	B 
	B 
	B 
	B 
	B 
	B 
	B 
	B 
f}}??$$99UrUUUVVV	6~ 	69Kd9R 	6W\ 	6ae 	6 	6 	6 	6 	6 	6  99SbSSSTTT	F~ 	F9Kd9R 	FW\ 	Fae 	F 	F 	F 	F 	F 	F 	F r.   leftr   rightc                     | dS | |k    | |k    | |k    | |k     | |k    | |k    d}||vrt          d|           ||         S )z)Evaluate numeric comparisons for filters.NF)r1   r3   r2   r0   r5   r4   z)Unsupported numeric comparison operator: )r   )r   r   r   comparisonss       r/   r   r      sr    |u U]emE\E\emem K 
IRIIJJJr?r.   	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   rJ   .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;   r7   r9   g        r:   zUnsupported sort key: )rr   rX   r   r   r   r   )r   rP   rm   r   r\   s       r/   	_sort_keyz%compile_cache_sort.<locals>._sort_key   s    h&==,,..E8O&==-5-AH))tGXE8O* +/*<*HD&&cE8O*#2:2H2T..Z].2.@.L**RU8O 7#77888r.   )_SORT_PATTERNr   r   rX   r   r   
_SORT_KEYSr   _SORT_DEFAULT_ORDER
CacheEntryr,   r	   )r   r   explicit_orderr   reverser   r\   s         @r/   compile_cache_sortr     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r.   targetsc                 v   t          |           \  }}t          t                    }t                      }g }|D ]6}|                                }|s|                                }	t          j        d|	          rh|                    |	          }
|
|                    |           p|
\  }}||         	                    |           |	                    |j
                   |                    t          |                                                    }||                    |           |j        D ]7}||         	                    |           |	                    |j
                   88d |                                D             }t          t          |          |t!          |                    S )z8Resolve the deletion targets into a deletion resolution.z[0-9a-fA-F]{40}Nc                 4    i | ]\  }}|t          |          S r-   )r(   )r   rP   revss      r/   
<dictcomp>z-_resolve_deletion_targets.<locals>.<dictcomp>b  s$    PPPttYt__PPPr.   r"   r#   r$   )ru   r   setr   rX   re	fullmatchr   r   addr`   r}   r"   rL   r!   r(   r,   )ro   r   rs   rt   r#   r"   r$   
raw_targetrv   loweredr   rP   rm   matched_repofrozen_selecteds                  r/   _resolve_deletion_targetsr   A  s   #4]#C#C K>I#>N>NH%%IG 0 0
!!## 	,,..<*G44 	#''00E}z***"ND(TNx(((MM(.///"'A&'I'I'O'O'Q'QRRNN:&&&$. 	0 	0H\"&&x000MM(.////	0 QPx~~?O?OPPPOI&& g   r.   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                    	 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
 |D             }t          j        |g ddddi           n*fd|D             }t          j        |g ddddi           |rd |D             }t          |          }|r3t!          d |D                       }t!          d |D                       }n2t!          d |D                       }t!          d |D                       }t          j        t%          j        d| d| dt)          |           d                     dS dS )z&List cached repositories or revisions.Cache directory not found: N)r~   c                 0    g | ]}t          |          S r-   )r   )r   r   r   s     r/   r   zls.<locals>.<listcomp>  s$    TTTD*4??TTTr.   c                 F    g | ]} |d          |d                   |S )r   r   r-   )r   r   fnr   s     r/   r   zls.<locals>.<listcomp>  s4    MMMUE!HeAh1L1LM5MMMr.   )r\   r   r   z&Limit must be a positive integer, got r   c                     g | ]T\  }}||j         |j        |j        |j        t	          |j                  |j        |j        t          |j	                  dUS )N)r{   rW   rV   rm   snapshot_pathr7   r   r6   )
rr   rW   rV   r`   r)   r   rk   last_modified_strrg   r6   )r   rP   rm   s      r/   r   zls.<locals>.<listcomp>  ss     
 
 
 h# m<!^$0!$X%;!<!< 1!)!;x}--	 	 $##r.   )r{   rm   r7   r   r6   rm   r7   r   )headersid_key
alignmentsc                     g | ]\\  }}|j         |j        |j        |j        |j        pd |j        t                              |t                                          d]S )r   )r{   rW   rV   r7   r   r   r6   )	rr   rW   rV   rk   last_accessed_strr   rg   r   r(   )r   rP   r   r   s      r/   r   zls.<locals>.<listcomp>  s{     
 
 
 a m<!^-!%!7!=2!%!7}00y{{CCDD 
 
 
r.   )r{   r7   r   r   r6   r{   c                     h | ]\  }}|S r-   r-   )r   rP   r   s      r/   r   zls.<locals>.<setcomp>  s    444q444r.   c              3   $   K   | ]\  }}|dV  d S )Nr   r-   r   r   rb   s      r/   	<genexpr>zls.<locals>.<genexpr>  s&       L Lvq#COOOOO L Lr.   c              3   .   K   | ]\  }}||j         V  d S rT   r   r   s      r/   r   zls.<locals>.<genexpr>  s)      WW&!SsS-WWr.   c              3   >   K   | ]}t          |j                  V  d S rT   )rM   r"   r   rP   s     r/   r   zls.<locals>.<genexpr>  s,       N NT^!4!4 N N N N N Nr.   c              3   $   K   | ]}|j         V  d S rT   r   r   s     r/   r   zls.<locals>.<genexpr>  s%      HH4T.HHHHHHr.   z
Found z repo(s) for a total of z revision(s) and z	 on disk.)r   r   r
   r   r   r   typerBadParameterr)   timer   r   r   r   tablerM   sumri   r   boldr   )r   r"   r   r   r   ro   excfiltersr   
filter_fnssort_key_fnr   rL   unique_reposrD   revision_count
total_sizer   r   r   s                    @@@r/   lsr   m  s   ^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&/ '

 
 #*
 
 
 		GGG(		
 	
 	
 	
 	

 
 
 
 #
 
 
 		LLL(		
 	
 	
 	
  
44G444&&
 	I  L L L L LLLNWWGWWWWWJJ  N N N N NNNNHH<HHHHHJI<: < <~ < <$Z00< < < 	
 	
 	
 	
 	

 
s@    
<7<A' '
B1"BB.C4 4
D%>"D  D%)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           	         	 t          |          }n*# t          $ r}t          d|j                   |d}~ww xY wt	          ||           }|j        r;d                    d |j        D                       }t          j        d|            t          |j
                  dk    r)t          j        d           t          j        d           |j        t          |j
                   }t!          |j                  }	g }
|	j        r|
                    |	j         d	           |	j        r|
                    |	j         d
           |
s|
                    |	j         d
           d                    |
          }t          j        d| d|j         d           t/          |j                   |r*t          j        dd|	j        |	j        |j                   dS t          j        d|           |                                 t!          |j                  }	t          j        d|	j         d|	j         d|j         d|	j        |	j        |j                   dS )z(Remove cached repositories or revisions.r   N
c              3       K   | ]	}d | V  
dS rd   Nr-   )r   r   s     r/   r   zrm.<locals>.<genexpr>#  s(      KKuN5NNKKKKKKr.   zCould not find in cache:
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.T)r   rq   r"   r7   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$   rj   r   warningrM   r"   ri   r   Exitdelete_revisionsrg   rQ   r#   rD   r   rE   rF   expected_freed_size_strrn   resultconfirmexecute)r   r   r   r   ro   r   
resolutiondetailsstrategycountssummary_partssummary_texts               r/   rmr    s   LO&y11 O O ODS]DDEE3NO +='BBJ <))KK
8JKKKKK:::;;;
:  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H\\\9Y\\\]]]":#6777 
-#11	
 	
 	
 	
 	K(c2222 !455FJ	66$ 	6 	663N 	6 	62	6 	6 	6' 5.         
949zhf cache prunezhf cache prune --dry-runc                    	 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          j        d           dS t          t          |          |d          }	 |j        t          |	j                   }
t          |          }t          j        d	|j         d
|
j         d           t%          |           |r$t          j        dd|j        |
j                   dS t          j        d|           |
                                 t          j        d|j         d|
j         d|j        |
j                   dS )z)Remove detached revisions from the cache.r   Nc              3   J   K   | ]}t          |j                  d k    |V  dS )r   N)rM   r6   r   rm   s     r/   r   zprune.<locals>.<genexpr>p  s7      ``(HMHZHZ^_H_H_XH_H_H_H_``r.   c              3   $   K   | ]}|j         V  d S rT   r_   r  s     r/   r   zprune.<locals>.<genexpr>t  s%      GG(-GGGGGGr.   r   z2No unreferenced revisions found. Nothing to prune.r-   r   r  z unreferenced revision(s) (z total).r  T)r   r"   r7   zProceed?r	  r
  z! unreferenced revision(s); freed r   )r  r  )r   r   r
   r   r   rq   r(   r"   updaterM   r   ri   r!   r  rg   rQ   rF   r  rn   r  r  r  )r   r   r   ro   r   r#   r"   rP   detachedr  r  r  s               r/   pruner#  P  s6   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~~EFFF$I&&  J
 .}-vj6J/K/KLH **FH}66}}S[Ss}}}   #8,,, 
-11		
 	
 	
 	
 	K
$$$$Jt6.ttQYQqttt 5.     r  )zhf cache verify gpt2z)hf cache verify gpt2 --revision refs/pr/1z.hf cache verify my-dataset --repo-type datasetrW   rV   rm   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           
      j   |+|)t          j        d           t          j        d          t	          |          }|                    | t          |d          r|j        nt          |          ||||          }	d}
|	j	        r=d	
                    d
 |	j	        D                       }t          j        d|            d}
|	j        ri|r>d	
                    d |	j        D                       }t          j        d|            d}
n)t          j        t          |	j                   d           |	j        ri|r>d	
                    d |	j        D                       }t          j        d|            d}
n)t          j        t          |	j                   d           |	j        }|
dk    r?t          j        d|  d|j         d| d|	j                    t          j        |
          t          j        d|	j         d|j         d|  d| |j        |	j        t          |                     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  )r'  r   )rW   rV   rm   r$  r   r'  r   r  c           
   3   b   K   | ]*}d |d          d|d          d|d          d|d          V  +dS )	rd   pathz: expected r   z (	algorithmz), got actualNr-   )r   ms     r/   r   zverify.<locals>.<genexpr>  sj       
 
 _1V9^^:^^!K.^^QRS[Q\^^
 
 
 
 
 
r.   u<   ❌ Checksum verification failed for the following file(s):
r   c              3       K   | ]	}d | V  
dS r  r-   r   ps     r/   r   zverify.<locals>.<genexpr>  s(      IIq
q

IIIII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 | V  
dS r  r-   r/  s     r/   r   zverify.<locals>.<genexpr>  s(      GGq
q

GGGGG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.)rW   rV   checkedr*  )r   errorr   r  r   verify_repo_checksumshasattrr   r)   
mismatchesrj   ri   missing_pathsr  rM   extra_pathsverified_pathrm   r  checked_count)rW   rV   rm   r   r$  r%  r&  r'  apir  	exit_coder  verified_locations                r/   verifyr>    s   ` !6	WXXXja    
5
!
!
!C&&%,Y%@%@T)//c)nn '  F I )) 
 
&
 
 
 
 
 	ZQXZZ[[[	 	  	iiIIF4HIIIIIGHXwXXYYYIIKv+,, ; ; ;  
  	 	iiGGF4FGGGGGGHVWVVWWWIIKv)** 9 9 9  
 ,A~~	}}}IO}}J[}}lrl{}}	
 	
 	
 ji((((JjF(jjyjj'jjj/$"##     r.   )NFNNN)NFF)QrG   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   _outputr   	cache_clir!   compiler   r   r   r   r   r   _sort_options_dictrg   r\   r)   r%   r@   rC   r,   r   r+   r(   RepoRefsMaprQ   rn   ru   r}   r   r   r   r   r   r   r   r   commandOptionrH   r   Argumentr  r#  modelr>  r-   r.   r/   <module>rQ     sQ
   O N 				  # # # # # # - - - - - - - - ! ! ! ! ! !       ! ! ! ! ! ! ! !  + + + + + +	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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 $        >#5#<<=
>9S>12Tni8J.KKLTT T T T$[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 3 3 3l&[ &49 &Qd & & & &X       	 	 	 	 	G|
 |
d
L	
 	
 	
	|
 V	
 	
 	
	|
 S	Dm	
 	
 	
	|
* d7	
 	
 	
	+|
< d
f	
 	
 	
	=|
H 
I|
 |
 |
 |
~      * 	 	 	5O OS	|	
 	
 	
	O d
L	
 	
 	
	O 
,	
 	
 	
	
O* ?	
 	
 	
	+O6 
7O O O Od -/IJKK 	 	 	)F Fd
L	
 	
 	
	F 
,	
 	
 	
	
F ?	
 	
 	
	F* 
+F F F LKFR       ).  	 	 	 	=f fff f d
k	
 	
 	
		f d
R	
 	
 	
	f  %%R	
 	
 	
	!f. ##_	
 	
 	
	/f< =f> 
?f f f f f fr.   