o
    0jVf                     @   s  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 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dZ&e	ddG dd dZ'e(dZ)h dZ*h dZ+h dZ,e(dZ-dddddZ.i Z/e0e,D ]Z1e1e/e1< e1 de/e1 d< e1 de/e1 d < qed!e/e2e3d"Z4e	ddG d#d$ d$Z5e6eedB f Z7e8ee9e2 f Z:d%eee9e f d&e5fd'd(Z;d%eee9e f d&dfd)d*Z<d+ed&e6e8e2ef e8e2e6eef f f fd,d-Z=d+ed.e>d&e6e?e7 e:f fd/d0Z@d1e2d2e:d&eeedB eAge>f fd3d4ZBd5eAdB d6e2d7eAd&e>fd8d9ZCd:e2d&e6ee7ge6ed;f f e>f fd<d=ZDd+ed>e?e2 d&e'fd?d@ZEe&jFdAg dBdC		D			dqdEee2dB ejGdFdf dGee>ejGdHdf dIee?e2 dB ejGdJdKdLdf dMee4dB ejGdNdf dOeeHdB ejGdPdf d&dfdQdRZIe&jFg dSdC		D	Ddrd>ee?e2 ejJdTdf dEee2dB ejGdFdf dUee>ejGdVdWdXdf dYee>ejGdZdf d&df
d[d\ZKe&jFd]d^gdC		D	DdrdEee2dB ejGdFdf dUee>ejGdVdWdXdf dYee>ejGdZdf d&dfd_d`ZLe&jFg dadCejMddddDdDdfdbedcedde dEee2dB ejGdedf dfee2dB ejGdgdf dhee>ejGdidjdf dkee>ejGdldmdf dne!d&dfdodpZNdS )szHContains 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scan_cache_dir)parse_duration
parse_size   )	RepoIdArgRepoTypeOptRevisionOptTokenOpt
get_hf_apityper_factory)outzManage local cache directory.)helpT)frozenc                   @   s>   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 r*   r*   Z/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/huggingface_hub/cli/cache.pyr   (   s   
 r   zA^(?P<key>[a-zA-Z_]+)\s*(?P<op>==|!=|>=|<=|>|<|=)\s*(?P<value>.+)$>   =<>!=>=<=>   accessedmodifiedrefssizetype>   r5   r3   r2   namez.^(?P<key>[a-zA-Z_]+)(?::(?P<order>asc|desc))?$descasc)r2   r3   r5   r7   z:ascZ_ascz:descZ_descSortOptions)r6   modulec                   @   s*   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*   r+   r<   G   s
   
 r<   selected_by_reporeturnc                 C   sd   d}d}d}|   D ]\}}|t|7 }t|t|jkr'|d7 }|t|7 }q
|| }t|||S )z(Summarize deletions across repositories.r   r   )itemslenr   r<   )rB   r=   Ztotal_revisionsZrevisions_in_full_reposrepor   r>   r*   r*   r+   summarize_deletionsT   s   rG   c              
   C   s   t |  dd dD ]P}|j d|j }t | | dd d}t|t|jkr2td| d q
td| d |D ]}d	t |j	pHd
}td|j
 d| d|j  q=q
dS )zBPretty-print selected cache revisions during confirmation prompts.c                 S      | j | j fS N	repo_typerepo_idlowerrF   r*   r*   r+   <lambda>h       z0print_cache_selected_revisions.<locals>.<lambda>key/c                 S      | j S rI   commit_hashrevr*   r*   r+   rO   j         - z (entire repo): z
(detached)z      z [z] N)sortedkeysrK   rL   rE   r   r   textjoinr4   rV   size_on_disk_str)rB   rF   repo_keyr   revisionr4   r*   r*   r+   print_cache_selected_revisionsf   s   "rd   hf_cache_infoc                 C   sL   i }i }| j D ]}|j }|||< |jD ]}||f||j < qq||fS )zPCreate lookup tables so CLI commands can resolve repo ids and revisions quickly.)reposcache_idrM   r   rV   )re   repo_lookuprevision_lookuprF   rb   rc   r*   r*   r+   build_cache_indexu   s   


rj   include_revisionsc                C   s   g }i }t | jdd d}|D ]+}tdd |jD ||< |r3t |jdd dD ]	}|||f q(q||df q|rI|jdd d ||fS |jd	d d ||fS )
z;Flatten cache metadata into rows consumed by `hf cache ls`.c                 S   rH   rI   rJ   rN   r*   r*   r+   rO      rP   z'collect_cache_entries.<locals>.<lambda>rQ   c                 S   s   h | ]
}|j D ]}|qqS r*   )r4   ).0rc   refr*   r*   r+   	<setcomp>   s    z(collect_cache_entries.<locals>.<setcomp>c                 S   rT   rI   rU   rW   r*   r*   r+   rO      rY   Nc                 S   s&   | d j | d d ur| d jfS dfS )Nr   r    )rg   rV   entryr*   r*   r+   rO      s
   c                 S   s
   | d j S )Nr   )rg   rp   r*   r*   r+   rO      s   
 )r]   rf   r%   r   appendsort)re   rk   entriesrepo_refs_mapZsorted_reposrF   rc   r*   r*   r+   collect_cache_entries   s"   rv   exprru   c                    s  t |  }|std|  d|d |d|d tvr8td d|  dtt d	tvrLtd
 d|  dtt d	dkr[t	fddS dv rzt
 dtdtdB dtdtffdd}|S dkr  dkrtd ddtdtdB dtdtf fdd}|S dkrtd d	dtdtdB dtdtffd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'.rR   opvaluezUnsupported operator 'z' in filter ''. Must be one of .zUnsupported filter key '' in 'r5   c                    s"   t |d ur|j S | j S rI   )_compare_numericsize_on_diskrF   rc   _)rx   size_thresholdr*   r+   rO      s    z&compile_cache_filter.<locals>.<lambda>>   r3   r2   rF   rc   NnowrC   c                    s>    dkr| j n	|d ur|jn| j}|d u rdS t|| S )Nr2   F)last_accessedlast_modifiedr}   )rF   rc   r   	timestamp)rR   rx   secondsr*   r+   _time_filter   s   z*compile_cache_filter.<locals>._time_filterr6   r,   z/Only '=' is supported for 'type' filters. Got 'r   c                    s   | j   kS rI   )rK   rM   r   )expectedr*   r+   _type_filter   s   z*compile_cache_filter.<locals>._type_filterz.Only '=' is supported for 'refs' filters. Got c                    s2   |d ur|j n | t } dd |D v S )Nc                 S   s   g | ]}|  qS r*   )rM   )rl   rm   r*   r*   r+   
<listcomp>       z>compile_cache_filter.<locals>._refs_filter.<locals>.<listcomp>)r4   getr%   rM   )rF   rc   r   r4   )ru   	value_rawr*   r+   _refs_filter   s   z*compile_cache_filter.<locals>._refs_filter)_FILTER_PATTERNmatchstrip
ValueErrorgrouprM   _ALLOWED_OPERATORSlist_FILTER_KEYSr   r   r   r   floatbool)rw   ru   r   r   r   r   r*   )r   rR   rx   ru   r   r   r   r+   compile_cache_filter   s6   
  &"$r   leftrx   rightc                 C   sT   | du rdS | |k| |k| |k| |k | |k| |kd}||vr&t d| || S )z)Evaluate numeric comparisons for filters.NF)r,   r/   r.   r-   r0   r1   z)Unsupported numeric comparison operator: )r   )r   rx   r   Zcomparisonsr*   r*   r+   r}      s   	r}   	sort_expr.c                    s   t |   }|std|  d|d  |d} tvr3td  d|  dtt d|r7|nt  }|d	k}d
t	dt
tdf f fd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'.rR   orderzUnsupported sort key 'r|   rz   r{   r8   rq   rC   .c                    s   | \}} dkr|j  }|fS  dkr$|d ur|j}|fS |j}|fS  dkr8|jd ur3|j}|fS d}|fS  dkr]|d urP|jd urK|j}|fS d}|fS |jd urX|jnd}|fS td  )Nr7   r5   r2   g        r3   zUnsupported sort key: )rg   rM   r~   r   r   r   )rq   rF   rc   ry   rQ   r*   r+   	_sort_key
  s.   
z%compile_cache_sort.<locals>._sort_key)_SORT_PATTERNr   r   rM   r   r   
_SORT_KEYSr   _SORT_DEFAULT_ORDER
CacheEntryr)   r   )r   r   Zexplicit_orderr   reverser   r*   rQ   r+   compile_cache_sort   s   
 r   targetsc                 C   s   t | \}}tt}t }g }|D ]V}| }|sq| }	td|	rE||	}
|
du r3|| q|
\}}|| 	| |	|j
 q||	}|du rT|| q|jD ]}|| 	| |	|j
 qWqdd | D }tt||t|dS )z8Resolve the deletion targets into a deletion resolution.z[0-9a-fA-F]{40}Nc                 S   s   i | ]	\}}|t |qS r*   )r%   )rl   rF   revsr*   r*   r+   
<dictcomp>L  s    z-_resolve_deletion_targets.<locals>.<dictcomp>r   r    r!   )rj   r   setr   rM   re	fullmatchr   rr   addrV   r   rD   r   r%   r)   )re   r   rh   ri   r    r   r!   Z
raw_targettargetZloweredr   rF   rc   Zmatched_repoZfrozen_selectedr*   r*   r+   _resolve_deletion_targets+  s@   




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)Z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.rs   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                    s&  zt | }W n ty } z	td|j |d}~ww |pg }t||d\}zfdd|D }	W n tyG } ztt||d}~ww t		 |	D ]  fdd|D }qN|rzt
|j\}
}|j|
|d W n ty } ztt||d}~ww |dur|dk rtd	| d
|d| }|rdd |D }tj|g ddddid nfdd|D }tj|g ddddid |rdd |D }t|}|rtdd |D }tdd |D }ntdd |D }tdd |D }ttd| d| dt| d dS dS )z&List cached repositories or revisions.Cache directory not found: N)rk   c                    s   g | ]}t | qS r*   )r   )rl   rw   ru   r*   r+   r     s    zls.<locals>.<listcomp>c                    s$   g | ]} |d  |d r|qS )r   r   r*   rl   rq   )fnr   r*   r+   r     s   $ )rR   r   r   z&Limit must be a positive integer, got r{   c                 S   sF   g | ]\}}|d ur|j |j|j|jt|j|j|jt|j	dqS )N)idrL   rK   rc   snapshot_pathr5   r   r4   )
rg   rL   rK   rV   r&   r   ra   last_modified_strr]   r4   )rl   rF   rc   r*   r*   r+   r     s    )r   rc   r5   r   r4   rc   r5   r   )headersZid_keyZ
alignmentsc                    sB   g | ]\}}|j |j|j|j|jpd |jt |t dqS )ro   )r   rL   rK   r5   r   r   r4   )	rg   rL   rK   ra   Zlast_accessed_strr   r]   r   r%   rl   rF   r   r   r*   r+   r     s    
)r   r5   r   r   r4   r   c                 S   s   h | ]\}}|qS r*   r*   r   r*   r*   r+   rn     r   zls.<locals>.<setcomp>c                 s   s     | ]\}}|d urdV  qd S )Nr   r*   rl   r   rX   r*   r*   r+   	<genexpr>  s    zls.<locals>.<genexpr>c                 s   s"    | ]\}}|d ur|j V  qd S rI   r~   r   r*   r*   r+   r          c                 s   s    | ]}t |jV  qd S rI   )rE   r   rl   rF   r*   r*   r+   r         c                 s       | ]}|j V  qd S rI   r   r   r*   r*   r+   r         z
Found z repo(s) for a total of z revision(s) and z	 on disk.)r   r   r	   r   rv   r   typerZBadParameterr&   timer   ry   rs   r   tablerE   sumr_   r   boldr   )r   r   r   rs   r   re   excfiltersrt   Z
filter_fnsZsort_key_fnr   rD   Zunique_reposr=   Zrevision_countZ
total_sizer*   )r   r   ru   r+   lsW  s   /

r   )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              
   C   s  zt |}W n ty } z	td|j |d}~ww t|| }|jr7ddd |jD }td|  t	|j
dkrItd tjdd	|jt|j
 }t|j}	g }
|	jrd|
|	j d
 |	jrp|
|	j d |
s{|
|	j d d|
}td| d|j d t|j |rtjdd|	j|	j|jd dS tjd|d |  t|j}	tjd|	j d|	j d|j d|	j|	j|jd dS )z(Remove cached repositories or revisions.r   N
c                 s       | ]}d | V  qdS rZ   Nr*   r   r*   r*   r+   r     r   zrm.<locals>.<genexpr>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   rf   r   r5   zProceed with deletion?r   Deleted z repo(s) and z revision(s); freed )Zrepos_deletedrevisions_deletedfreed)r   r   r	   r   r   r!   r`   r   warningrE   r   r_   r   Exitdelete_revisionsr]   rG   r    r=   rr   r>   r?   expected_freed_size_strrd   resultconfirmexecute)r   r   r   r   re   r   
resolutiondetailsstrategycountsZsummary_partsZsummary_textr*   r*   r+   rm  sZ   %






r   zhf cache prunezhf cache prune --dry-runc              
   C   sJ  zt | }W n ty } z	td|j |d}~ww i }t }|jD ]}tdd |jD }|s3q$|||< |dd |D  q$t	|dkrOt
d dS tt||dd	}	|jt|	j }
t|}t
d
|j d|
j d t| |rt
jdd|j|
jd dS t
jd|d |
  t
jd|j d|
j d|j|
jd dS )z)Remove detached revisions from the cache.r   Nc                 s   s"    | ]}t |jd kr|V  qdS )r   N)rE   r4   rl   rc   r*   r*   r+   r   Y  r   zprune.<locals>.<genexpr>c                 s   r   rI   rU   r   r*   r*   r+   r   ]  r   r   z2No unreferenced revisions found. Nothing to prune.r*   r   r   z unreferenced revision(s) (z total).r   T)r   r   r5   zProceed?r   r   z! unreferenced revision(s); freed r{   )r   r   )r   r   r	   r   r   rf   r%   r   updaterE   r   r_   r   r   r]   rG   r?   r   rd   r   r   r   )r   r   r   re   r   r    r   rF   Zdetachedr   r   r   r*   r*   r+   prune9  sV   


r   )zhf cache verify gpt2z)hf cache verify gpt2 --revision refs/pr/1z.hf cache verify my-dataset --repo-type datasetrL   rK   rc   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              
   C   s  |dur|durt d tjddt|d}|j| t|dr#|jnt|||||d}	d}
|	j	rGd	
d
d |	j	D }t d|  d}
|	jrm|rbd	
dd |	jD }t d|  d}
nt t|	j d |	jr|rd	
dd |	jD }t d|  d}
nt t|	j d |	j}|
dkrt d|  d|j d| d|	j  tj|
dt jd|	j d|j d|  d| |j|	j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   )r   ry   )rL   rK   rc   r   r   r   r   r   c              
   s   s<    | ]}d |d  d|d  d|d  d|d  V  qdS )	rZ   pathz: expected r   z (	algorithmz), got actualNr*   )rl   mr*   r*   r+   r     s
    *
zverify.<locals>.<genexpr>u<   ❌ Checksum verification failed for the following file(s):
r   c                 s   r   r   r*   rl   pr*   r*   r+   r     r   u6   ❌ Missing files (present remotely, absent locally):
zM remote file(s) are missing locally. Use --fail-on-missing-files for details.c                 s   r   r   r*   r   r*   r*   r+   r     r   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.)rL   rK   checkedr   )r   errorr   r   r   Zverify_repo_checksumshasattrry   r&   Z
mismatchesr`   r_   Zmissing_pathsr   rE   Zextra_pathsZverified_pathrc   r   Zchecked_count)rL   rK   rc   r   r   r   r   r   apir   	exit_coder   Zverified_locationr*   r*   r+   verify  s`   0

	

r   )NFNNN)NFF)Or@   r   r   collectionsr   collections.abcr   r   dataclassesr   enumr   typingr   r   r   Zhuggingface_hub.errorsr	   utilsr   r   r   r   r   r   r   Zutils._parsingr   r   Z
_cli_utilsr   r   r   r   r   r   _outputr   Z	cache_clir   compiler   r   r   r   r   r   Z_sort_options_dictr]   rR   r&   r"   r:   r<   r)   r   r(   r%   ZRepoRefsMaprG   rd   rj   r   r   rv   r   r   r}   r   r   commandOptionrA   r   ZArgumentr   r   modelr   r*   r*   r*   r+   <module>   s  $ 








A,6,	
$RI	
