§
    }ŠtjÓ  ã                   óª  — U 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
  ej        e¦  «        ZdZi Zeedf         ed<    ej        ¦   «         Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Zdeeef         defd„Zdededefd„Zdedefd„Zdededeeef         dz  fd„Zdedeeef         dz  fd„Zdededeeef         ddfd„ZdS )a5  On-disk cache for repository tree listings.

A tree listing is the set of files (with their download metadata) contained in a repo at a given commit. Because a
commit hash is immutable, its tree listing never changes and can be cached forever without any invalidation logic.

The listing is stored as a human-readable JSON file under `<tree_cache_folder>/trees/<commit_hash>.json`. The
folder depends on the download target: the per-repo `storage_folder` for `cache_dir` downloads, or
`local_dir/.cache/huggingface/` for `local_dir` downloads (see `tree_cache_folder_for_local_dir`).

```json
{
  "format_version": 1,
  "files": {
    "config.json": {"size": 519, "blob_id": "<git sha1>"},
    "model.safetensors": {"size": 1234, "blob_id": "...", "lfs_sha256": "<sha256>", "lfs_size": 1234, "xet_hash": "..."}
  }
}
```
é    N)Ú	dataclassé   )Úlogging)Úis_valid_xet_hashzdict[str, TreeCacheEntry]Ú_IN_MEMORY_TREE_CACHET)Úfrozenc                   ó�   — e Zd ZU dZeed<   eed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   de
fd	„Zed
e
dd fd„¦   «         ZdS )ÚTreeCacheEntryz^Raw metadata of a single file in a cached tree listing, mirroring the `/tree` endpoint fields.ÚsizeÚblob_idNÚ
lfs_sha256Úlfs_sizeÚxet_hashÚreturnc                 ó|   — | j         | j        dœ}| j        �| j        |d<   | j        |d<   | j        �
| j        |d<   |S )N)r   r   r   r   r   ©r   r   r   r   r   )ÚselfÚinfos     úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/huggingface_hub/_tree_cache.pyÚto_jsonzTreeCacheEntry.to_json?   sL   € Ø"œi°D´LÐAÐAˆØŒ?Ð&Ø!%¤ˆD�ÑØ#œ}ˆD�ÑØŒ=Ð$Ø#œ}ˆD�ÑØˆó    r   c           	      ó¬   —  | |d         |d         |                      d¦  «        |                      d¦  «        |                      d¦  «        ¬¦  «        S )Nr   r   r   r   r   r   )Úget)Úclsr   s     r   Ú	from_jsonzTreeCacheEntry.from_jsonH   sV   € àˆsØ�f”Ø˜”OØ—x’x Ñ-Ô-Ø—X’X˜jÑ)Ô)Ø—X’X˜jÑ)Ô)ð
ñ 
ô 
ð 	
r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Ústrr   r   r   Údictr   Úclassmethodr   © r   r   r
   r
   5   s´   € € € € € € àhÐhà
€I€I�IØ€L€L�LØ!€J��d‘
Ð!Ð!Ñ!Ø€Hˆc�D‰jÐÐÑØ€Hˆc�D‰jÐÐÑð˜ð ð ð ð ð ð
˜Tð 
Ð&6ð 
ð 
ð 
ñ „[ð
ð 
ð 
r   r
   Úentriesr   c                 óX   — t          d„ |                      ¦   «         D ¦   «         ¦  «        S )z<Return whether all Xet hashes in the tree listing are valid.c              3   óP   K  — | ]!}|j         d u pt          |j         ¦  «        V — Œ"d S )N)r   r   )Ú.0Úentrys     r   ú	<genexpr>z(is_valid_tree_entries.<locals>.<genexpr>U   s9   è è € ÐiÐiÈuˆuŒ~ Ð%ÐJÕ):¸5¼>Ñ)JÔ)JÐiÐiÐiÐiÐiÐir   )ÚallÚvalues)r&   s    r   Úis_valid_tree_entriesr.   S   s,   € åÐiÐiÐX_×XfÒXfÑXhÔXhÐiÑiÔiÑiÔiÐir   Útree_cache_folderÚcommit_hashc                 óJ   — t           j                             | d|› d�¦  «        S )NÚtreesz.json©ÚosÚpathÚjoin)r/   r0   s     r   Ú_tree_cache_pathr7   X   s$   € ÝŒ7�<Š<Ð)¨7°{Ð4IÐ4IÐ4IÑJÔJÐJr   Ú	local_dirc                 óD   — t           j                             | dd¦  «        S )zGFolder under which the `trees/` cache lives for a `local_dir` download.z.cacheÚhuggingfacer3   )r8   s    r   Útree_cache_folder_for_local_dirr;   \   s   € åŒ7�<Š<˜	 8¨]Ñ;Ô;Ð;r   c                 óf  — t          | |¦  «        }t          5  |t          v r,t          |         }t          |¦  «        r|ndcddd¦  «         S 	 ddd¦  «         n# 1 swxY w Y   t	          |¦  «        }|�t          |¦  «        sdS t          5  |t          |<   ddd¦  «         n# 1 swxY w Y   |S )zbReturn the cached tree listing for a commit hash, or `None` if not cached, invalid, or unreadable.N)r7   Ú_IN_MEMORY_TREE_CACHE_LOCKr   r.   Ú_read_tree_cache_from_disk)r/   r0   r5   Úcached_entriesr&   s        r   Úread_tree_cacher@   a   sm  € åÐ-¨{Ñ;Ô;€DÝ	#ð Uð UØÕ(Ð(Ð(Ý2°4Ô8ˆNÝ%:¸>Ñ%JÔ%JÐT�>�>ÐPTðUð Uð Uð Uñ Uô Uð Uð UØ(ðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uõ )¨Ñ.Ô.€GØ€Õ3°GÑ<Ô<€ØˆtÝ	#ð .ð .Ø&-Õ˜dÑ#ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .à€Ns#   ˜)AÁAÁ"AÂB&Â&B*Â-B*r5   c                 ó´  — 	 t          | d¬¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   |                     d¦  «        t          k    rd S d„ |d                              ¦   «         D ¦   «         S # t          $ r Y d S t          t          t          t          f$ r+}t                               d| › d|› �¦  «         Y d }~d S d }~ww xY w)Núutf-8©ÚencodingÚformat_versionc                 óJ   — i | ] \  }}|t                                |¦  «        “Œ!S r%   )r
   r   )r)   Ú	file_pathr   s      r   ú
<dictcomp>z._read_tree_cache_from_disk.<locals>.<dictcomp>w   s,   € ÐgÐgÐg¹o¸iÈ�	�>×3Ò3°DÑ9Ô9ÐgÐgÐgr   Úfilesz#Ignoring corrupted tree cache file ú: )ÚopenÚjsonÚloadr   ÚTREE_CACHE_FORMAT_VERSIONÚitemsÚFileNotFoundErrorÚOSErrorÚ
ValueErrorÚKeyErrorÚ	TypeErrorÚloggerÚwarning)r5   ÚfÚdataÚes       r   r>   r>   p   s/  € ðÝ�$ Ð)Ñ)Ô)ð 	 ¨QÝ”9˜Q‘<”<ˆDð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 à�8Š8Ð$Ñ%Ô%Õ)BÒBÐBà�4ØgÐgÐQUÐV]ÔQ^×QdÒQdÑQfÔQfÐgÑgÔgÐgøÝð ð ð ØˆtˆtÝ•Z¥­9Ð5ð ð ð Ý�ŠÐH¸TÐHÐHÀQÐHÐHÑIÔIÐIØˆtˆtˆtˆtˆtøøøøðøøøs>   ‚B “4¨B ´8¸B »8¼!B Á#B Â
CÂCÂ, CÃCc                 óú  ‡— t          ‰¦  «        sdS t          | |¦  «        }t          ˆfd„t          ‰¦  «        D ¦   «         dœ}	 t	          j        t          j                             |¦  «        d¬¦  «         t          j	        t          j                             |¦  «        d¬¦  «        \  }}t	          j
        |dd	¬
¦  «        5 }t          j        ||d¬¦  «         ddd¦  «         n# 1 swxY w Y   t	          j        ||¦  «         n8# t          $ r+}t                               d|› d|› �¦  «         Y d}~dS d}~ww xY wt"          5  t%          ‰¦  «        t&          |<   ddd¦  «         dS # 1 swxY w Y   dS )zTWrite a valid tree listing to the cache (ignoring invalid entries and any failures).Nc                 óF   •— i | ]}|‰|                               ¦   «         “ŒS r%   )r   )r)   rG   r&   s     €r   rH   z$write_tree_cache.<locals>.<dictcomp>‡   s,   ø€ Ð[Ð[Ð[¸i�)˜W YÔ/×7Ò7Ñ9Ô9Ð[Ð[Ð[r   )rE   rI   T)Úexist_okz.tmp)ÚdirÚsuffixÚwrB   rC   r   )Úindentz,Ignored error while writing tree cache file rJ   )r.   r7   rN   Úsortedr4   Úmakedirsr5   ÚdirnameÚtempfileÚmkstempÚfdopenrL   ÚdumpÚreplacerQ   rU   rV   r=   r#   r   )	r/   r0   r&   r5   rX   Útmp_fdÚtmp_pathrW   rY   s	     `      r   Úwrite_tree_cacherk      s  ø€ å  Ñ)Ô)ð ØˆåÐ-¨{Ñ;Ô;€Då3Ø[Ð[Ð[Ð[Í6ÐRYÉ?Ì?Ð[Ñ[Ô[ðð €DðÝ
Œ•B”G—O’O DÑ)Ô)°DÐ9Ñ9Ô9Ð9Ý#Ô+µ´·²ÀÑ0EÔ0EÈfÐUÑUÔUÑˆ�ÝŒY�v˜s¨WÐ5Ñ5Ô5ð 	)¸ÝŒI�d˜A aÐ(Ñ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)å
Œ
�8˜TÑ"Ô"Ð"Ð"øÝð ð ð Ý�ŠÐQÀdÐQÐQÈaÐQÐQÑRÔRÐRØˆˆˆˆˆøøøøðøøøõ
 
$ð 4ð 4Ý&*¨7¡m¤mÕ˜dÑ#ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4ð 4ð 4sO   ÁB D ÃC+ÃD Ã+C/Ã/D Ã2C/Ã3D Ä
EÄ D<Ä<EÅE0Å0E4Å7E4)r   rL   r4   rd   Ú	threadingÚdataclassesr   Úutilsr   Ú
utils._xetr   Ú
get_loggerr   rU   rN   r   r#   r"   r!   ÚLockr=   r
   Úboolr.   r7   r;   r@   r>   rk   r%   r   r   ú<module>rs      s3  ððð ð ð( €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )ð 
ˆÔ	˜HÑ	%Ô	%€àÐ ð ACÐ �t˜CÐ!<Ð<Ô=Ð BÐ BÑ BØ+˜Yœ^Ñ-Ô-Ð ð €�$ÐÑÔð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ Ôð
ð:j 4¨¨^Ð(;Ô#<ð jÀð jð jð jð jð
K¨ð K¸#ð KÀ#ð Kð Kð Kð Kð<¨sð <°sð <ð <ð <ð <ð
 sð ¸ð ÀÀcÈ>ÐFYÔAZÐ]aÑAað ð ð ð ð Sð ¨T°#°~Ð2EÔ-FÈÑ-Mð ð ð ð ð4¨ð 4¸#ð 4ÈÈSÐR`ÐM`ÔHað 4Ðfjð 4ð 4ð 4ð 4ð 4ð 4r   