
    AF[iq                        d Z ddl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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(  e(d      Z) G d de*e      Z+ e	d       G d d             Z, ejZ                  d      Z.h dZ/h dZ0h dZ1 ejZ                  d      Z2dddddZ3i Z4 e5e1      D ]  Z6e6e4e6<   e6 de4e6 d<   e6 de4e6 d<     ed e4e*e7!      Z8 e	d       G d" d#             Z9eeee   f   Z:eee;e*   f   Z<d$eee;e   f   d%e9fd&Z=d$eee;e   f   d%dfd'Z>d(ed%eee*ef   ee*eeef   f   f   fd)Z?d(ed*e@d%eee:   e<f   fd+ZAd,e*d-e<d%eeee   eBge@f   fd.ZCd/ee:   d*e@d-e<d%eee*ef      fd0ZDd/ee:   d*e@d-e<d%dfd1ZEd/ee:   d*e@d-e<d%dfd2ZFd/ee:   d*e@d-e<d%dfd3ZGd4eeB   d5e*d6eBd%e@fd7ZHd8e*d%eIee:geIed9f   f   e@f   fd:ZJd(ed;eKe*   d%e,fd<ZLe)j                         dd=de+j                  d=ddfd>eee*    ej                  d?      f   d@ee@ ej                  dA      f   dBeeeKe*       ej                  dCdDdE      f   dFee+ ej                  dG      f   dHee@ ej                  dIdJdK      f   dLeee8    ej                  dM      f   dNeeeP    ej                  dO      f   d%dfdP       ZQe)j                         	 	 	 dhd;eeKe*    ej                  dQ      f   d>eee*    ej                  d?      f   dRee@ ej                  dSdTdU      f   dVee@ ej                  dW      f   d%df
dX       ZSe)j                         	 	 	 dhd>eee*    ej                  d?      f   dRee@ ej                  dSdTdU      f   dVee@ ej                  dW      f   d%dfdY       ZTe)j                         e$j                  dddd=d=dfdZe#d[e$d\e%d>eee*    ej                  d]      f   d^eee*    ej                  d_      f   d`ee@ ej                  dadb      f   dcee@ ej                  ddde      f   dfe&d%dfdg       ZVy)izHContains the 'hf cache' command group with cache management subcommands.    N)defaultdict)	dataclass)Enum)	AnnotatedAnyCallableDictListMappingOptionalTuple   )ANSICachedRepoInfoCachedRevisionInfoCacheNotFoundHFCacheInfo_format_sizescan_cache_dirtabulate)parse_duration
parse_size   )	RepoIdArgRepoTypeOptRevisionOptTokenOpt
get_hf_apityper_factoryzManage local cache directory.)helpc                       e Zd ZdZdZdZy)OutputFormattablejsoncsvN)__name__
__module____qualname__r#   r$   r%        b/var/www/html/chatbot/moweb-chatbot/venv/lib/python3.12/site-packages/huggingface_hub/cli/cache.pyr"   r"   1   s    ED
Cr*   r"   T)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)
r&   r'   r(   	frozensetstr__annotations__dictr   r   tupler)   r*   r+   r.   r.   7   s0    ~>9-?#@@AA38_r*   r.   zA^(?P<key>[a-zA-Z_]+)\s*(?P<op>==|!=|>=|<=|>|<|=)\s*(?P<value>.+)$>   <=>!=<=>=>   refssizetypeaccessedmodified>   namer>   r@   rA   z.^(?P<key>[a-zA-Z_]+)(?::(?P<order>asc|desc))?$descasc)r@   rA   r>   rB   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__intr4   r)   r*   r+   rJ   rJ   V   s    HOr*   rJ   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/   rJ   )rP   rK   total_revisionsrevisions_in_full_reposrepor/   rL   s          r+   summarize_deletionsrX   c   s     JO+113 6i3y>)y>S00!OJ#s9~5#	6 -/FFz+A?SSr*   c           
         t        | j                         d       D ]  }|j                   d|j                   }t        | |   d       }t	        |      t	        |j
                        k(  rt        d| d       `t        d| d       |D ]R  }dj                  t        |j                              xs d	}t        d
|j                   d| d|j                          T  y)zBPretty-print selected cache revisions during confirmation prompts.c                 N    | j                   | j                  j                         fS N	repo_typerepo_idlowerrW   s    r+   <lambda>z0print_cache_selected_revisions.<locals>.<lambda>w   s    $..RVR^R^RdRdRfAg r*   key/c                     | j                   S r[   commit_hashrevs    r+   ra   z0print_cache_selected_revisions.<locals>.<lambda>y   
    3?? r*     - z (entire repo): z
(detached)z      z [z] N)sortedkeysr]   r^   rT   r/   printjoinr=   rg   size_on_disk_str)rP   rW   repo_keyr/   revisionr=   s         r+   print_cache_selected_revisionsru   u   s    ',,.4gh 
Xnn%Qt||n5+D17RS	y>S00D
.12XJa !! 	XH88F8==12BlDF8//04&8;T;T:UVW	X
Xr*   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_idr_   r/   rg   )rv   repo_lookuprevision_lookuprW   rs   rt   s         r+   build_cache_indexr|      s     .0KLNO## M==&&( $H 	MH=A8<LOH006689	MM
 ''r*   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\   r`   s    r+   ra   z'collect_cache_entries.<locals>.<lambda>   s    QUQ]Q]QcQcQe@f r*   rb   c                     | j                   S r[   rf   rh   s    r+   ra   z'collect_cache_entries.<locals>.<lambda>   rj   r*   Nc                 N    | d   j                   | d   | d   j                  fS dfS )Nr   r    )ry   rg   entrys    r+   ra   z'collect_cache_entries.<locals>.<lambda>   s6    a!!(-a(<a$$ BD r*   c                      | d   j                   S )Nr   )ry   r   s    r+   ra   z'collect_cache_entries.<locals>.<lambda>   s    uQx'8'8 r*   )rn   rx   r2   r/   r=   appendsort)rv   r}   entriesrepo_refs_mapsorted_reposrW   rt   refs           r+   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           
        	
 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 rBt        j                               	dt        dt        t           dt        dt        f	fd}|S dk(  rKj                         dk7  rt        d d      dt        dt        t           dt        dt        ffd}|S dk7  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'.rc   opvaluezUnsupported operator 'z' in filter ''. Must be one of .zUnsupported filter key '' in 'r>   c                 Z    t        ||j                        S | j                        S r[   )_compare_numericsize_on_disk)rW   rt   _r   size_thresholds      r+   ra   z&compile_cache_filter.<locals>.<lambda>   s7    )9%-%9H!!*
 ?C?P?P*
 r*   >   r@   rA   rW   rt   nowrQ   c                     dk(  r| j                   n||j                  n| j                  }|yt        ||z
        S )Nr@   F)last_accessedlast_modifiedr   )rW   rt   r   	timestamprc   r   secondss       r+   _time_filterz*compile_cache_filter.<locals>._time_filter   sW     *$ "" ' ++''   #C)ORAAr*   r?   r8   z/Only '=' is supported for 'type' filters. Got 'r   c                 >    | j                   j                         k(  S r[   )r]   r_   )rW   rt   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j                  | t                     }j                         |D cg c]  }|j                          c}v S c c}w r[   )r=   getr2   r_   )rW   rt   r   r=   r   r   	value_raws        r+   _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groupr_   _ALLOWED_OPERATORSlist_FILTER_KEYSr   r   r   r   r   floatbool)r   r   r   r   r   r   r   rc   r   r   r   r   s    `    @@@@@@r+   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BT9U 
	B\a 
	Bfj 
	B 
f}??$9NrdRTUVV	6~ 	6BT9U 	6Z_ 	6dh 	6  9MbTQRSTT	F~ 	FBT9U 	FZ_ 	Fdh 	F r*   r   c                   g }| D ]  \  }}|rq||j                   |j                  |j                  t        |j                        |j
                  |j                  |j                  t        |j                        d}n\|j                   |j                  |j
                  |j                  |j                  t        |j                  |t                           d}|j                  |        |S )zGNormalize cache entries into serializable records for JSON/CSV exports.r^   r]   rt   snapshot_pathr   r   r   r=   r^   r]   r   r   r   r=   )r^   r]   rg   r3   r   r   r   r   rn   r=   r   r2   r   )r   r}   r   payloadrW   rt   records          r+   _build_cache_export_payloadr      s     %'G! h<<!^^$00!$X%;%;!< ( 5 5!%!3!3!)!7!7x}}-	&F  <<!^^ $ 1 1!%!3!3!%!3!3}00y{CDF 	v/0 Nr*   c                   | s|rdnd}t        |       y|ryg d}| D cg c]g  \  }}|`|j                  |j                  |j                  j	                  d      |j
                  dj                  t        |j                              gi }}}ng d}| D cg c]w  \  }}|j                  |j                  j	                  d      |j                  xs d|j
                  dj                  t        |j                  |t                                 gy }}}t        t        ||	             | D ch c]  \  }}|	 }	}}t        |	      }
|r%t        d
 | D              }t        d | D              }n$t        d |	D              }t        d |	D              }d|
 d| dt        |       d}t        t!        j"                  |             yc c}}w c c}}w c c}}w )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REFS   rm   )r   r   LAST_ACCESSEDr   r   r   )headersc              3   ,   K   | ]  \  }}|	d  y w)Nr   r)   .0r   rt   s      r+   	<genexpr>z,print_cache_entries_table.<locals>.<genexpr>8  s     R;1hX=QQRs   
c              3   @   K   | ]  \  }}|	|j                     y wr[   r   r   s      r+   r   z,print_cache_entries_table.<locals>.<genexpr>9  s     b;1hXMa..bs   
c              3   F   K   | ]  }t        |j                          y wr[   )rT   r/   r   rW   s     r+   r   z,print_cache_entries_table.<locals>.<genexpr>;  s     JTS0Js   !c              3   4   K   | ]  }|j                     y wr[   r   r   s     r+   r   z,print_cache_entries_table.<locals>.<genexpr><  s     Dt**D   z
Found z repo(s) for a total of z revision(s) and z	 on disk.)rp   ry   rg   rr   rjustlast_modified_strrq   rn   r=   last_accessed_strr   r2   r   rT   sumr   r   bold)r   r}   r   messager   rW   rt   
table_rowsr   unique_reposrK   revision_count
total_sizesummarys                 r+   print_cache_entries_tabler     s    2C.IhgE #*

 h# $$))//2**./


 

 K #	
 a %%++A.&&,"&& 1 1$	 DEF	

 	
 
(:w
/0(/0WT1D0L0\"JR'RRb'bb
J\JJD|DD
$<^<LL]^jku^v]w  xA  BG	$))G
I

	
 1s   A,GA<G3Gc                    t        | ||      }t        j                  |t        j                  d       t        j                  j                  d       y)z7Dump cache entries as JSON for scripting or automation.r}   r   r   )indent
N)r   r$   dumpsysstdoutwrite)r   r}   r   r   s       r+   print_cache_entries_jsonr   B  s:     *'EVfstGIIgszz!,JJTr*   c                   t        | ||      }t        j                  t        j                        }|rg d}ng d}|j                  |       |sy|D ]  }|d   }|r|j                  dd      |j                  dd      |j                  d	d      |j                  d
d      |j                  d      |j                  d      |j                  d      |rdj                  |      ndg}nh|j                  dd      |j                  dd      |j                  d      |j                  d      |j                  d      |rdj                  |      ndg}|j                  |        y)z@Export cache entries as CSV rows with the shared payload format.r   r   r   Nr=   r^   r   r]   rt   r   r   r   r   rm   )r   r%   writerr   r   writerowr   rq   )	r   r}   r   recordsr   r   r   r=   rows	            r+   print_cache_entries_csvr   K  s;   )'EVfstGZZ

#F	
 e
OOG f~

9b)

;+

:r*

?B/

>*

?+

?+"&B	C 

9b)

;+

>*

?+

?+"&BC 	-r*   leftr   rightc                 l    | y| |k(  | |k7  | |kD  | |k  | |k\  | |k  d}||vrt        d|       ||   S )z)Evaluate numeric comparisons for filters.F)r8   r:   r9   r7   r<   r;   z)Unsupported numeric comparison operator: )r   )r   r   r   comparisonss       r+   r   r   |  sd    | U]emE\E\ememK 
DRDIJJr?r*   	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'.rc   orderzUnsupported sort key 'r   r   r   rC   r   rQ   .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       )NrB   r>   r@   g        rA   zUnsupported sort key: )ry   r_   r   r   r   r   )r   rW   rt   r   rc   s       r+   	_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8r*   )_SORT_PATTERNr   r   r_   r   r   
_SORT_KEYSr   _SORT_DEFAULT_ORDER
CacheEntryr6   r   )r   r   explicit_orderr   reverser   rc   s         @r+   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r*   targetsc                    t        |       \  }}t        t              }t               }g }|D ]  }|j                         }|s|j	                         }	t        j                  d|	      rZ|j                  |	      }
|
|j                  |       a|
\  }}||   j                  |       |j                  |j                         |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/   r0   r1   )r|   r   setr   r_   re	fullmatchr   r   addrg   r/   rS   r2   r.   r6   )rv   r   rz   r{   r0   r/   r1   
raw_targettargetloweredr   rW   rt   matched_reporevsfrozen_selecteds                   r+   _resolve_deletion_targetsr    se   #4]#C K>I#>NH%IG 0
!!#,,.<<*G4#''0E}z*"ND(TNx(MM(../"w/NN:&$.. 	0H\"&&x0MM(../	0+02 @H~~?OPttYt_,POPI& g  Qs   <E5F	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           	         	 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 ](  \  }}t        ||j                  n|j                          * yt"        j$                  t&        t"        j(                  t*        t"        j,                  t.        i} ||   |
||
      S # t        $ r=}t        dt        |j                                t        j                  d      |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)z&List cached repositories or revisions.Cache directory not found: r   codeN)r}   r   )rc   r   z&Limit must be a positive integer, got r   r   )r   r   rp   r3   r  typerExitr   r   r   BadParametertimer   r   r   rg   ry   r"   r#   r   r$   r   r%   r   )r  r/   r  r  r  r   r	  rv   excfiltersr   r   r   
filter_fnsr   fnr   sort_key_fnr   rW   rt   
formatterss                         r+   lsr    s   j*&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/% 	SND((*>(&&DMMR	S 	531J
 :fgR_``Q  *+C,>+?@Ajja c)* U 4  S*34
 N  	8$$SX.C7	8sb   E F FF G0G;+G
 	F8FFF 	GF==G
	G7G22G7zQOne 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           	         	 t        |      }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!                  |	j                   d	       |	j"                  r|
j!                  |	j"                   d
       |
s|
j!                  |	j$                   d
       dj'                  |
      }t        d| d|j(                   d       t+        |j                         |rt        d       y|s#t        j,                  dd      st        d       y|j/                          t        |j                        }	t        d|	j                   d|	j$                   d|j(                   d       y# t        $ r<}t        dt        |j                                t        j                  d      d}~ww xY w)z(Remove cached repositories or revisions.r  r   r  Nz2Could not find the following targets in the cache:rk   r   zNothing to delete.z 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   rp   r3   r  r  r  r  r1   rT   r/   delete_revisionsrn   rX   r0   rK   r   rL   rM   rq   expected_freed_size_strru   confirmexecute)r   r  r  r  rv   r  
resolutionr   strategycountssummary_partssummary_texts               r+   rmr)  T  s'   <!&y1
 +='BJBC'' 	"ED.!	" : A%"#jja  -}--vj6J6J/KLH !4!45F!M 1 12(;<$$ = =>lKL ; ;<LIJ<<.L	\N+h6V6V5WWX
YZ":#6#67/0u}}%=uM#$ !4!45F	
6$$%]63N3N2OOcdl  eE  eE  dF  FG  	HQ  !+C,>+?@Ajja  !s   H 	I7IIc                 J   	 t        |       }i }t               }|j                  D ]>  }t        d |j                  D              }|s"|||<   |j                  d |D               @ t        |      dk(  rt        d       yt        t        |      |d	
      }	 |j                  t        |	j                         }
t!        |      }t        d|j"                   d|
j$                   d       t'        |       |rt        d       y|s!t        j(                  d      st        d       y|
j+                          t        d|j"                   d|
j$                   d       y# t        $ r<}t        dt        |j                                t        j                  d      d}~ww xY w)z)Remove detached revisions from the cache.r  r   r  Nc              3   R   K   | ]  }t        |j                        d k(  s| ! yw)r   N)rT   r=   r   rt   s     r+   r   zprune.<locals>.<genexpr>  s!     `(HMMHZ^_H_X`s   ''c              3   4   K   | ]  }|j                     y wr[   rf   r,  s     r+   r   zprune.<locals>.<genexpr>  s     G(--Gr   r   z2No unreferenced revisions found. Nothing to prune.r)   r   r  z unreferenced revision(s) (z total).r  zProceed?zPruning cancelled.r  z! unreferenced revision(s); freed r   )r   r   rp   r3   r  r  r  r   rx   r2   r/   updaterT   r.   r   rn   rX   rM   r!  ru   r"  r#  )r  r  r  rv   r  r0   r/   rW   detachedr$  r%  r&  s               r+   pruner0    s   0!&y1
 EGH%I## H`dnn``!GhGGH 9~BC$I&J
 .}--vj6J6J/KLH *F	
66677RS[SsSsRtt|} #8,/0u}}Z0"#	HV0011RS[SsSsRttu
vwO  !+C,>+?@Ajja  !s   E 	F"&7FF"r^   r]   rt   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                 6   |#|!t        d       t        j                  d      t        |      }|j	                  | t        |d      r|j                  n
t        |      ||||      }	d}
t        |	j                        }|rAt        d	       |	j                  D ]%  }t        d
|d    d|d    d|d    d|d           ' d}
|	j                  rU|r-t        d       |	j                  D ]  }t        d
|         d}
n&t        |	j                         d}t        d|        |	j                  rU|r-t        d       |	j                  D ]  }t        d
|         d}
n&t        |	j                         d}t        d|        |	j                  }|
dk7  rMt        d|  d|j                   d| d       t        d|	j                          t        j                  |
      t        d|	j                   d|  d|j                   d|        t        d       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  )r4  r   )r^   r]   rt   r1  r  r4  r   u;   ❌ Checksum verification failed for the following file(s):rk   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.)rp   r  r  r   verify_repo_checksumshasattrr   r3   r   
mismatchesmissing_pathsrT   extra_pathsverified_pathrt   checked_count)r^   r]   rt   r  r1  r2  r3  r4  apiresult	exit_codehas_mismatchesmpwarningverified_locations                   r+   verifyrH    sV   T !6STjja  
5
!C&&%,Y%@)//c)n ' F I&++,NKL"" 	fAD6;q}oR+?OwWXYaWbVcde	f	 EF)) "QCj!"I v++,- .; ;  HWI&'CD'' "QCj!"I v))*+ ,9 9  HWI&',,A~-gYc)//9J%PaObbcdeV__-./jji((	M&../~gYc)//IZZ_`q_r
st	
"#r*   )NFF)WrN   r%   r$   r   r   r  collectionsr   dataclassesr   enumr   typingr   r   r   r	   r
   r   r   r   r  utilsr   r   r   r   r   r   r   r   utils._parsingr   r   
_cli_utilsr   r   r   r   r   r   	cache_clir3   r"   r.   compiler   r   r   r   r   r   _sort_options_dictrn   rc   r&   rG   rJ   r   r2   RepoRefsMaprX   ru   r|   r   r   r   r   r   r   r   r   r   r6   r   r   r  commandr#   OptionrO   r  Argumentr)  r0  modelrH  r)   r*   r+   <module>rX     s   O 
  	 
  # !  Q Q Q 	 	 	 8 ` ` >?	3  $   "**ab6 ?5


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