
    kh"L                     j   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 d dlZd dlmZmZmZ 	 d dlmZ 	 d dlZd	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) d dl*m+Z+  ee&de       Z&d	Z, ejZ                  e.      Z/g dZ0dZ1dZ2dZ3dZ4dJde5fdZ6	 	 	 dKdee5ee5   ee5e5f   f   de7de7deee5ef      fdZ8	 	 dLdee5ee5   ee5e5f   f   de7deee5ef      fdZ9dMde7fd Z:d!e5fd"Z;d#ee5ef   fd$Z<	 dNd%e5d&e5deee5ef      fd'Z=d(ee5ef   d)ee5ef   d*eee5ef   e5ee5ef   f   fd+Z>	 dNd%e5deee5ef      fd,Z?d-ee5ef   fd.Z@e1d
dfd%e5d&e5d/e7deee5ef      fd0ZAd1ZBd2ZC	 dMd3e5d/e7fd4ZD	 dNd%e5d&e5d5ej                  j                  deee5ef      fd6ZG	 	 dOd5ej                  j                  d7e5d8eeH   d9eeH   fd:ZI	 	 	 dPd5ej                  j                  d;e5d8eeH   d9eeH   d<ee7ed=   f   f
d>ZJ	 	 	 	 	 	 	 	 	 dQd5ej                  j                  d?e5d@e5dAee5   dBee5   dCe7dDe7d8eeH   dEeeH   d9eeH   d<ee7ed=   f   fdFZKdEeHdGe5fdHZLd&e5d*ee5   fdIZMy# e$ r
 d dlmZ Y 7w xY w# e$ r d
ZY >w xY w# e$ r
 d dlmZ Y Iw xY w# e$ r dZ&d
Z,Y )w xY w)R    N)partial)Path)TemporaryDirectory)AnyDictIterableListOptionalTupleUnion)
HASH_REGEXdownload_url_to_fileurlparse)get_dir)_get_torch_homeTF)Literal)__version__)filter_pretrained_cfg)create_repoget_hf_file_metadatahf_hub_download
hf_hub_urlrepo_type_and_id_from_hf_idupload_folder)EntryNotFoundErrortimm)library_namelibrary_version)get_cache_dirdownload_cached_file
has_hf_hubhf_splitload_model_config_from_hfload_state_dict_from_hfsave_for_hfpush_to_hf_hubpytorch_model.binmodel.safetensorsopen_clip_pytorch_model.binopen_clip_model.safetensors	child_dirc                     t        j                  d      rt        j                  d       t	               }| sdn| f} t        j
                  j                  |dg|  }t        j                  |d       |S )zf
    Returns the location of the directory where models are cached (and creates it if necessary).
    TORCH_MODEL_ZOOz@TORCH_MODEL_ZOO is deprecated, please use env TORCH_HOME instead checkpointsTexist_ok)osgetenv_loggerwarningr   pathjoinmakedirs)r+   hub_dir	model_dirs      L/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/_hub.pyr   r   8   s]    
 
yy"#Z[iG#)IWm@i@IKK	D)    url
check_hashprogress	cache_dirc                 0   t        | t        t        f      r| \  } }n4t        |       }t        j
                  j                  |j
                        }|rt	        j                  |d       n
t               }t        j
                  j                  ||      }t        j
                  j                  |      sbt        j                  dj                  | |             d }|r*t        j                  |      }|r|j!                  d      nd }t#        | |||       |S )NTr0   zDownloading: "{}" to {}
   )r?   )
isinstancelisttupler   r2   r6   basenamer8   r   r7   existsr4   infoformatr   searchgroupr   )	r=   r>   r?   r@   filenamepartscached_filehash_prefixrs	            r;   r    r    G   s     #e}%X77##EJJ/
I-!O	'',,y(3K77>>+&077[IJ!!(+A()!''!*tKS+{XNr<   c                 v   t        | t        t        f      r| \  } }n4t        |       }t        j
                  j                  |j
                        }|s
t               }t        j
                  j                  ||      }t        j
                  j                  |      r|rt        j                  |      }|r|j                  d      nd }|rct        |d      5 }t        j                  |j!                               j#                         }	|	d t%        |       |k7  r
	 d d d        y	 d d d        yyy# 1 sw Y   yxY w)NrB   rbFT)rC   rD   rE   r   r2   r6   rF   r   r7   rG   r   rJ   rK   openhashlibsha256read	hexdigestlen)
r=   r>   r@   rL   rM   rN   rP   rO   fhds
             r;   check_cached_filer[   a   s    
 #e}%X77##EJJ/!O	'',,y(3K	ww~~k"!!(+A()!''!*tK+t, % 1;;=B+3{+,;$% %;% % s   AD//D8	necessaryc                 4    t         s| rt        d      t         S )Nz^Hugging Face hub model specified but package not installed. Run `pip install huggingface_hub`.)_has_hf_hubRuntimeError)r\   s    r;   r!   r!   {   s    9ln 	nr<   hf_idc                     | j                  d      }dt        |      cxk  rdk  sJ d        J d       |d   }t        |      dkD  r|d   nd }||fS )N@r      zChf_hub id should only contain one @ character to identify revision.rB   )splitrX   )r`   	rev_splithf_model_idhf_revisions       r;   r"   r"      sc    C Is9~""i$ii"i$ii"A,K#&y>A#5)B-4K##r<   	json_filec                     t        | dd      5 }|j                         }d d d        t        j                        S # 1 sw Y   xY w)NrP   zutf-8)encoding)rS   rV   jsonloads)ri   readertexts      r;   load_cfg_from_jsonrp      s?    	iw	/ 6{{}::d s	   =Amodel_idrL   c                 <    t        |       \  }}t        ||||      S )N)revisionr@   )r"   r   )rq   rL   r@   rg   rh   s        r;   download_from_hfrt      s,    
  (1K	 r<   cfgextra_fieldsreturnc                 d   d| vr?| }|j                  d      |j                  dd      |d} d|v r|j                  d      |d<   | d   }|j                  |       d| v r| d   |d<   d| v r| j                  d      |d<   d	| v r| j                  d	      |d	<   | j                  d
i       }| d   }|||fS ) pretrained_cfgarchitecturenum_featuresN)r{   r|   rz   labelslabel_namesnum_classeslabel_descriptions
model_args)popupdateget)ru   rv   rz   r   
model_names        r;   _parse_model_cfgr      s     s"*..~>*..~tD,

 ~%,:,>,>x,HN=))*N,' (+M(:}%(+(>}%s"/2ww7K/L+,r*J^$J:z11r<   c                 l    t        d      sJ t        | d|      }t        |      }t        || dd      S )u>   Original HF‑Hub loader (unchanged download, shared parsing).Tconfig.json)r@   zhf-hub)	hf_hub_idsource)r!   rt   rp   r   )rq   r@   cfg_pathru   s       r;   r#   r#      s<    
 d-9MH
X
&CCx8!LMMr<   
model_pathc                     t        |       } | dz  }|j                         st        d|       t        |      }t	        |       dd}t        ||      S )z?Load from ``<model_path>/config.json`` on the local filesystem.r   zConfig file not found: z	local-dir)filer   )rv   )r   is_fileFileNotFoundErrorrp   strr   )r   cfg_fileru   rv   s       r;   load_model_config_from_pathr      s\     j!JM)H"9( DEE
X
&C
O{CLCl;;r<   weights_onlyc           
         t        d      sJ t        |       \  }}t        rat        |      D ]S  }	 t	        ||||      }t
        j                  d|  d| d| d       t        j                  j                  |d      c S  t	        ||||	      }t
        j                  d|  d
| d       	 t        j                  |d|      }	|	S # t        $ r Y w xY w# t        $ r t        j                  |d      }	Y |	S w xY w)NT)repo_idrL   rs   r@   [z"] Safe alternative available for 'z' (as 'z&'). Loading weights using safetensors.cpu)devicerL   rs   r@   z"] Safe alternative not found for 'z)'. Loading weights using default pytorch.map_locationr   r   )r!   r"   _has_safetensors_get_safe_alternativesr   r4   rH   safetensorstorch	load_filer   debugload	TypeError)
rq   rL   r   r@   rg   rh   safe_filenamecached_safe_filerN   
state_dicts
             r;   r$   r$      s9    d'1K 3H= 	M#2'*('	$  z!CH: N)?*PRS #((223CE2RR	  "	K MMAhZA(KtuvAZZ%l[
  &   AZZ%@
As$   AC	/C 		CC C<;C<)r(   r'   zpytorch_model.pthz	model.pthr*   z#open_clip_pytorch_model.safetensorsr)   zopen_clip_pytorch_model.pth).safetensorsz.pthz.pth.tar.binr6   c                    d }t         D ]=  }| |z  }|j                         st        j                  d|j                          |} n t
        D ]h  }t        | j                  d|             }|s#t        |      dkD  r3t        j                  d| d|  dt         d|d   j                   d		       |d   }j |st        d
|  d      	 t        j                  |d|      }|S # t        $ r t        j                  |d      }Y |S w xY w)NzFound preferred checkpoint: *rB   z	Multiple z checkpoints in : z	. Using 'r   z'.z!No suitable checkpoints found in .r   r   r   )_PREFERRED_FILESrG   loggingrH   name_EXT_PRIORITYsortedglobrX   r5   namesr_   r   r   r   )r6   r   
found_filefnamepextfilesr   s           r;   load_state_dict_from_pathr     s*    J! 5L88:LL7x@AJ  "tyy1SE+,5zA~u$4TF"UG D#Ahmm_B0 qJ" >tfAFGG@ZZ
\Z
   @ZZ
?
@s   C& & D
	D
modelc                 x    t        d      sJ t        |       \  }}t        ||||      }|j                  |      S )NTr   )r!   r"   r   load_pretrained)rq   rL   r   r@   rg   rh   rN   s          r;   load_custom_from_hfr   .  sJ     d'1K!	K   --r<   config_pathmodel_configr   c                 <   |xs i }i }t        | j                  dd      }|j                  d      |d<   |j                  d| j                        |d<   |j                  d| j                        |d<   |j                  dt        | dd             }t        |t              r|r||d<   d|v r6t        j                  d       |j                  d	|j                  d             |j                  d	d       }|r"t        |t        t        t        f      sJ ||d	<   |j                  d
d       }|rt        |t              sJ ||d
<   |r||d<   ||d<   |j                  |       |j                  d      5 }	t!        j"                  ||	d       d d d        y # 1 sw Y   y xY w)NT)remove_sourceremove_nullr{   r   r|   global_poolr}   z'labels' as a config field for is deprecated. Please use 'label_names' and 'label_descriptions'. Renaming provided 'labels' field to 'label_names'.r~   r   r   rz   wrc   )indent)r   rz   r   r   r|   getattrrC   r   r4   r5   
setdefaultdictrD   rE   r   rS   rl   dump)
r   r   r   r   	hf_configrz   global_pool_typer~   r   rY   s
             r;   save_config_for_hfr   ?  s     %2LI*5+?+?taefN . 2 2> BIn+//u?P?PQIm !- 0 0ASAS TIn#''wumUY7Z["C(-=#3	-  <B	C 	|/?/?/IJ""=$7K+dE':;;; $/	- %))*>E,d333*<	&'",	,"0I\"			#	 *!		)Qq)* * *s   0FFsave_directorysafe_serializationbothc                 h   t        d      sJ t        |      }|j                  dd       | j                         }|du s|dk(  r4t        sJ d       t
        j                  j                  ||t        z         |du s|dk(  rt        j                  ||t        z         |dz  }t        | |||       y )NT)r1   parentsr   z-`pip install safetensors` to use .safetensorsFr   )r   r   )r!   r   mkdirr   r   r   r   	save_fileHF_SAFE_WEIGHTS_NAMEsaveHF_WEIGHTS_NAMEr   )r   r   r   r   r   tensorsr   s          r;   r%   r%   p  s     d.)N$5  GT!%76%AP!PP##G^>R-RSU"&8F&B

7N_<= =0K!	r<   r   commit_messagetokenrs   private	create_pr
model_cardc                    t        |||d      }t        |      \  }}}| d| }	 t        t        |d|             d}t               5 }t        | |||	|
       |sE|xs i }|j                  d      d   }t        |      dz  }t        ||      }|j                  |       t        |||||	      cd
d
d
       S # t        $ r d}Y w xY w# 1 sw Y   y
xY w)a5  
    Arguments:
        (...)
        safe_serialization (`bool` or `"both"`, *optional*, defaults to `False`):
            Whether to save the model using `safetensors` or the traditional PyTorch way (that uses `pickle`).
            Can be set to `"both"` in order to push both safe and unsafe weights.
    T)r   r   r1   /z	README.md)r   rL   rs   F)r   r   r   rd   )r   folder_pathrs   r   r   N)r   r   r   r   r   r   r%   re   r   generate_readme
write_textr   )r   r   r   r   rs   r   r   r   r   r   r   repo_url_
repo_owner	repo_name
has_readmetmpdirr   readme_pathreadme_texts                       r;   r&   r&     s   * 7%4PH  ;8DAz9Ai[)GZ+X`ab

 
	 
%!1	
 #)rJ s+B/Jv,4K)*jAK"";/ )
'
 
	  

 
s   B; 
A'C;C	C	Cr   c                 .   | j                  dd       xs g d}d}|r|dz  }|D ]  }|d| dz  } |d| j                  dd	       dz  }|d
| j                  dd       dz  }d| v r|d| j                  d       dz  }d| v r|d| j                  d       dz  }d| v rd| d   v r|dz  }t        | d   d   t        t        f      r%| d   d   D ]  }|d|j	                          dz  } n|d| d   d   j	                          dz  }d| d   v r^t        | d   d   t        t        f      r%| d   d   D ]  }|d|j	                          dz  } n|d| d   d   j	                          dz  }|dz  }|d| dz  }d| v r|d| d    dz  }d| v r|dz  }| d   j                         D ]  \  }}t        |t        t        f      r|d| dz  }|D ]  }|d| dz  } 6t        |t              r.|d| dz  }|j                         D ]  \  }	}|d|	 d| dz  } t|d| d| dz  } d| v r|dz  }|| d   z  }|dz  }d| v r|d z  }|| d   z  }|dz  }d!| v r:|d"z  }t        | d!   t        t        f      s| d!   g}
n| d!   }
|
D ]  }|d#| d$z  } |S )%Ntags)zimage-classificationr   transformersz---
ztags:
z- 
zlibrary_name: r   r   z	license: licensez
apache-2.0license_namezlicense_name: license_linkzlicense_link: detailsDatasetz
datasets:
zPretrain Datasetz# Model card for descriptionz
## Model Details
z- **z:**
z  - r   z:** usagez
## Model Usage

comparisonz
## Model Comparison
citationz
## Citation
z
```bibtex
z
```
)r   rC   rE   rD   loweritemsr   )r   r   r   r   tdkvviki	citationscs               r;   r   r     s   >>&$'[+[DKy  	&ARs":%K	&^JNN>6$J#K2NNKYz~~iFGrJJK#
~(F'GrJJ#
~(F'GrJJJ9
90E#E}$j+I6F	*95 2AGGI;b112 R
9 5i @ F F HILLKI!66*Y/0BCeT]S#I./AB 6AR	{"#55K6 Jy$9:L$M$S$S$U#VVXYY7K&zl"55K
"J}56b99J-.y)//1 
	3DAq!dE]+aS. 1BT"R=0K1At$aS.ggi 7FBT"Rt2#66K7 aSQCr22
	3 *+,z'**tz!01z,//tZ)*Z04-@#J/0I":.I 	4A[733K	4r<   c              #      K   | t         k(  rt         | t        k(  rt         | t         t        fvr| j	                  d      r| dd dz    yyyw)aI  Returns potential safetensors alternatives for a given filename.

    Use case:
        When downloading a model from the Huggingface Hub, we first look if a .safetensors file exists and if yes, we use it.
        Main use case is filename "pytorch_model.bin" => check for "model.safetensors" or "pytorch_model.safetensors".
    r   Nr   )r   r   HF_OPEN_CLIP_WEIGHTS_NAMEHF_OPEN_CLIP_SAFE_WEIGHTS_NAMEendswith)rL   s    r;   r   r     s\      ?""",,,,)BCCHYHYZ`Hasmn,, IbCs   AA)ry   )TFN)TN)F)N)NN)NNF)	z	Add modelNNFFNNNr   )NrT   rl   r   r2   	functoolsr   pathlibr   tempfiler   typingr   r   r   r	   r
   r   r   r   	torch.hubr   r   r   r   ImportErrorr   safetensors.torchr   r   r   typing_extensionsr   r   timm.models._pretrainedr   huggingface_hubr   r   r   r   r   r   huggingface_hub.utilsr   r^   	getLogger__name__r4   __all__r   r   r  r  r   r   boolr    r[   r!   r"   rp   rt   r   r#   r   r$   r   r   r   nnModuler   r   r   r%   r&   r   r   r.   r<   r;   <module>r     s      	   ' D D D  @ @5!*  9
4 4 9oFT_`OK
 '

H
%G &* 9 !> S "  04	3S	5c?23  E#t),-	8  043S	5c?23 E#t),-4$ $C $%T	"2  15 E#t),-2#s(^238n2 4S>3S#X./2D 15NNE#t),-N
<#t)$
< ("04	&&& & E#t),-	&R	  = #J 15	... xx. E#t),-	.( (,%)	.*xx.*.* tn.* TN	.*h (,%);@xx tn TN	
 "$"78> *#"&'+%)%);A=
xx=
=
 =
 }	=

 3-=
 =
 =
 tn=
 TN=
 TN=
 "$"78=
@= =# =@-S -Xc] -{  5445  
  *))*  OKsH   I3 J J %#J% 3JJJJJ"!J"%	J21J2