+
    –°³jß  ã                   ó0  a € R t0 t R t^ RIt^ RIt^ RIt^ RIt^ RIHt ^RIH	t	 ^RI
Ht ^RIHt ]	P                  ! ]4      t^t/ t] ^ k ]P&                  ! 4       t]! RR7       ! R R	4      4       tR
 R ltR R ltR R ltR R ltR R ltR R ltR# )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)Úas_extended_path)Úis_valid_xet_hashT)Úfrozenc                   ój   a € ] tR t^6t o RtRtRtRtV 3R lR lt]	V 3R lR l4       t
V 3R ltRtV tR# )	ÚTreeCacheEntryz^Raw metadata of a single file in a cached tree listing, mirroring the `/tree` endpoint fields.Nc                ó    <€ V ^8„  d   QhRS[ /# )é   Úreturn©Údict)ÚformatÚ__classdict__s   "€Ú\/home/luca/screen-checking/.venv/lib/python3.14/site-packages/huggingface_hub/_tree_cache.pyÚ__annotate__ÚTreeCacheEntry.__annotate__@   s   ø€ ÷ ñ ™ñ ó    c                óÌ   € R V P                   RV P                  /pV P                  e   V P                  VR&   V P                  VR&   V P                  e   V P                  VR&   V# ©ÚsizeÚblob_idÚ
lfs_sha256Úlfs_sizeÚxet_hashr   )ÚselfÚinfos   & r   Úto_jsonÚTreeCacheEntry.to_json@   s[   € Ø˜dŸi™i¨°D·L±LÐAˆØ�?‰?Ò&Ø!%§¡ˆD�ÑØ#Ÿ}™}ˆD�ÑØ�=‰=Ò$Ø#Ÿ}™}ˆD�ÑØˆr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r
   r   r   r   r   )r   r   s   "€r   r   r   J   s   ø€ ÷ 
ñ 
™Tð 
Ð&6ñ 
r   c           	     ó’   € V ! VR ,          VR,          VP                  R4      VP                  R4      VP                  R4      R7      # )r   r   r   r   r   r   )Úget)Úclsr   s   &&r   Ú	from_jsonÚTreeCacheEntry.from_jsonI   sA   € áØ�f•Ø˜•OØ—x‘x Ó-Ø—X‘X˜jÓ)Ø—X‘X˜jÓ)ô
ð 	
r   c                ó€   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[R,          ;R&   S[ R,          ;R&   S[R,          ;R&   # )r
   r   r   Nr   r   r   )ÚintÚstr)r   r   s   "€r   r   r   6   sP   ø‡ ‚ ñ �Iñ	 ñ
 �Lñ ñ �d•
Ñ!ñ ñ �D�jÑñ ñ �D�jÑò r   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r   Úclassmethodr#   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r   6   s>   ø‡ € áhð "€JØ€HØ€H÷ð ð ÷
ó ð
÷) ƒ r   r   c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# )r
   Úentriesr   )r   r'   r   Úbool)r   s   "r   r   r   T   s(   € ÷ jñ j¤4¬¬^Ð(;Õ#<ð jÄñ jr   c                ó¢   € \         ;QJ d*    R V P                  4        4       F  '       d   K   R# 	  R# ! R V P                  4        4       4      # )z<Return whether all Xet hashes in the tree listing are valid.c              3   óv   "  € T F/  qP                   R J ;'       g    \        VP                   4      x € K1  	  R # 5i)N)r   r   )Ú.0Úentrys   & r   Ú	<genexpr>Ú(is_valid_tree_entries.<locals>.<genexpr>V   s.   é € ÐiÑXhÈu�~‰~ Ð%×JÐJÔ):¸5¿>¹>Ó)JÔJÓXhùs   ‚9›9FT)ÚallÚvalues)r3   s   &r   Úis_valid_tree_entriesr=   T   s?   € ç‹3ÑiÐX_×XfÑXfÔXhÓi�3Œ3ÐiŠ3Ðiˆ3ÑiÐX_×XfÑXfÔXhÓiÓiÐir   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r
   Útree_cache_folderÚcommit_hashr   ©r'   )r   s   "r   r   r   Y   s&   € ÷ ]ñ ]¬ð ]¼#ð ]Ä#ñ ]r   c                 ó\   € \        \        P                  P                  V R V R24      4      # )Útreesz.json)r   ÚosÚpathÚjoin)r?   r@   s   &&r   Ú_tree_cache_pathrG   Y   s)   € ô œBŸG™GŸL™LÐ):¸GÈÀ}ÐTYÐEZÓ[Ó\Ð\r   c                ó0   € V ^8„  d   QhR\         R\         /# )r
   Ú	local_dirr   rA   )r   s   "r   r   r   _   s   € ÷ <ñ <¬sð <´sñ <r   c                óD   € \         P                  P                  V RR4      # )zGFolder under which the `trees/` cache lives for a `local_dir` download.z.cacheÚhuggingface)rD   rE   rF   )rI   s   &r   Útree_cache_folder_for_local_dirrL   _   s   € ä�7‰7�<‰<˜	 8¨]Ó;Ð;r   c                ól   € V ^8„  d   QhR\         R\         R\        \         \        3,          R,          /# )r
   r?   r@   r   N©r'   r   r   )r   s   "r   r   r   d   s1   € ÷ ñ ¤sð ¼ð ÄÄcÌ>ÐFYÕAZÐ]aÕAañ r   c                óŒ  € \        W4      p\        ;_uu_ 4        V\        9   d-   \        V,          p\        V4      '       d   TMRuuRRR4       #  RRR4       \	        V4      pVe   \        V4      '       g   R# \        ;_uu_ 4        V\        V&   RRR4       V#   + '       g   i     LT; i  + '       g   i     T# ; i)zbReturn the cached tree listing for a commit hash, or `None` if not cached, invalid, or unreadable.N)rG   Ú_IN_MEMORY_TREE_CACHE_LOCKÚ_IN_MEMORY_TREE_CACHEr=   Ú_read_tree_cache_from_disk)r?   r@   rE   Úcached_entriesr3   s   &&   r   Úread_tree_cacherT   d   s—   € äÐ-Ó;€Dß	#Ö	#ØÔ(Ô(Ü2°4Õ8ˆNÜ%:¸>×%JÒ%J‘>ÐPT÷ 
$Ò	#Ø(÷ 
$ô )¨Ó.€GØ‚Ô3°G×<Ò<Ùß	#Ö	#Ø&-Ô˜dÑ#÷ 
$à€N÷ 
$×	#ú÷ 
$Ö	#à€Nús   š-BÂ
B2ÂB/	Â2C	c                ó`   € V ^8„  d   QhR\         R\        \         \        3,          R,          /# )r
   rE   r   NrN   )r   s   "r   r   r   s   s)   € ÷ ñ ¤Sð ¬T´#´~Ð2EÕ-FÈÕ-Mñ r   c                 óö  €  \        V R R7      ;_uu_ 4       p\        P                  ! V4      pRRR4       XP                  R4      \        8w  d   R# VR,          P                  4        UUu/ uF  w  r4V\        P                  V4      bK  	  upp#   + '       g   i     Lk; iu uppi   \         d     R# \        \        \        \        3 d'   p\        P                  RT  RT 24        Rp?R# Rp?ii ; i)úutf-8©ÚencodingNÚformat_versionÚfilesz#Ignoring corrupted tree cache file ú: )ÚopenÚjsonÚloadr!   ÚTREE_CACHE_FORMAT_VERSIONÚitemsr   r#   ÚFileNotFoundErrorÚOSErrorÚ
ValueErrorÚKeyErrorÚ	TypeErrorÚloggerÚwarning)rE   ÚfÚdataÚ	file_pathr   Úes   &     r   rR   rR   s   sÅ   € ðÜ�$ ×)Õ)¨QÜ—9’9˜Q“<ˆD÷ *à�8‰8Ð$Ó%Ô)BÔBáØQUÐV]ÕQ^×QdÑQdÔQfÔgÑQf¹o¸i�	œ>×3Ñ3°DÓ9Ò9ÑQfÒgÐg÷ *×)üó
 høÜô ÚÜ”Z¤¬9Ð5ô Ü�‰Ð<¸T¸FÀ"ÀQÀCÐHÔIÝûðúsK   ‚B* —B®"B* ÁB* Á,!B$ÂB* ÂB!	ÂB* Â*C8Â8C8ÃC8ÃC3Ã3C8c                ób   € V ^8„  d   QhR\         R\         R\        \         \        3,          RR/# )r
   r?   r@   r3   r   NrN   )r   s   "r   r   r   ‚   s4   € ÷ 4ñ 4¬ð 4¼#ð 4ÌÌSÔR`ÐM`ÕHað 4Ðfjñ 4r   c           	     óL  € \        V4      '       g   R# \        W4      pR\        R\        V4       Uu/ uF  qDW$,          P	                  4       bK  	  up/p \
        P                  ! \
        P                  P                  V4      RR7       \        P                  ! \
        P                  P                  V4      RR7      w  rg\
        P                  ! VRR	R
7      ;_uu_ 4       p\        P                  ! WX^R7       RRR4       \
        P                  ! Ws4       \$        ;_uu_ 4        \'        T4      \(        T&   RRR4       R# u upi   + '       g   i     LV; i  \         d'   p	\         P#                  RT RT	 24        Rp	?	R# Rp	?	ii ; i  + '       g   i     R# ; i)zTWrite a valid tree listing to the cache (ignoring invalid entries and any failures).NrZ   r[   T)Úexist_okz.tmp)ÚdirÚsuffixÚwrW   rX   )Úindentz,Ignored error while writing tree cache file r\   )r=   rG   r`   Úsortedr   rD   ÚmakedirsrE   ÚdirnameÚtempfileÚmkstempÚfdopenr^   ÚdumpÚreplacerc   rg   rh   rP   r   rQ   )
r?   r@   r3   rE   rk   rj   Útmp_fdÚtmp_pathri   rl   s
   &&&       r   Úwrite_tree_cacher~   ‚   s.  € ä  ×)Ò)ÙäÐ-Ó;€DàÔ3ØÌ6ÐRYÌ?Ó[É?¸i˜WÕ/×7Ñ7Ó9Ò9É?Ñ[ð€DðÜ
�Š”B—G‘G—O‘O DÓ)°DÕ9Ü#×+Ò+´·±·±ÀÓ0EÈfÔUÑˆÜ�YŠY�v˜s¨W×5Õ5¸Ü�IŠI�d aÕ(÷ 6ä
�
Š
�8Ô"÷ 
$Ö	#Ü&*¨7£mÔ˜dÑ#÷ 
$Ñ	#ùò \÷
 6×5ûô ô Ü�‰ÐEÀdÀVÈ2ÈaÈSÐQÔRÝûðú÷
 
$×	#Ð	#úsB   ³E
ÁBE Ã$EÃ=E Ä)FÅE	ÅE ÅFÅ)F
Æ
FÆF#	c                óZ   € V ^8„  d   Qh/ ^ \         9   d   \        \        R3,          ;R&   # )r
   zdict[str, TreeCacheEntry]rQ   )Ú__conditional_annotations__r   r'   )r   s   "r   r   r      s,   € ÷ ñ ÷H CÒ B”tœCÐ!<Ð<Õ=Ñ BòIr   )r€   r-   r^   rD   rw   Ú	threadingÚdataclassesr   Úutilsr   Úutils._pathsr   Ú
utils._xetr   Ú
get_loggerr)   rg   r`   rQ   ÚLockrP   r   r=   rG   rL   rT   rR   r~   r   )r€   s   @r   Ú<module>rˆ      s•   øðöó( Û 	Û Û Ý !å Ý *Ý )ð 
×	Ò	˜HÓ	%€àÐ ð ACÐ Ó BØ&Ÿ^š^Ó-Ð ñ �$Ô÷
ð 
ó ð
õ:jõ
]õ<õ
õ÷4r   