
    khU                        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m	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ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& d dl'm(Z( d dl)m*Z* d dl+m,Z,  ejZ                  e.      Z/da0da1 e2ejf                  ji                  dd             d kD  Z5g dZ6 edejn                        Z8de
e9ef   dee9e9f   fdZ:d4de;ddfdZ<d4de;ddfdZ=	 	 	 d5dejn                  dee
e9ef      dee	   deee9ef      ddf
dZ>	 	 	 	 	 	 d6dejn                  dee
e9ef      de2de2d ee	   d!e;deee9ef      ddfd"Z?de
e9ef   de
e9ef   fd#Z@d$e
e9ef   d%ee9   ddfd&ZAd7d'ZB	 	 d8d(e9deee9e
e9ef   f      d)ee
e9ef      de(fd*ZC	 	 	 	 	 	 	 	 d9d+eee8   e	d,e8f   f   d(e9d-e;dee
   d)ee
   d.ee   d/ee
   d0e;d1ee	   deee9ef      d2eee9      de8fd3ZDy):    N)deepcopy)Path)	AnyCallableDictListOptionalTupleTypeTypeVarUnion)nn)load_state_dict_from_url)FeatureListNetFeatureDictNetFeatureHookNetFeatureGetterNet)FeatureGraphNet)load_state_dict)
has_hf_hubdownload_cached_filecheck_cached_fileload_state_dict_from_hfload_state_dict_from_pathload_custom_from_hf)adapt_input_conv)PretrainedCfg)adapt_model_from_file)get_pretrained_cfgFTIMM_USE_OLD_CACHE) set_pretrained_download_progressset_pretrained_check_hashload_custom_pretrainedload_pretrainedpretrained_cfg_for_featuresresolve_pretrained_cfgbuild_model_with_cfgModelT)boundpretrained_cfgreturnc                    | j                  dd      }| j                  dd       }| j                  dd       }| j                  dd       }| j                  dd       }d}d}|dk(  rt        d	      r	d}|sJ |}n[|d
k(  rd
}|}nQ|rd}|}t        |t              s;J |rd}|}n2d}t        r|rt        |      nd}|s|rt        d	      rd}|}n|rd}|}|dk(  r| j                  dd       r|| d   f}||fS )Nsource urlfile
state_dict	hf_hub_idhf-hubT)	necessary	local-dirFhf_hub_filename)getr   
isinstancedict_USE_OLD_CACHEr   )	r*   
cfg_sourcepretrained_urlpretrained_filepretrained_sdr2   	load_frompretrained_locold_cache_valids	            P/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/_builder.py_resolve_pretrained_sourcerC   +   s5   ##Hb1J#''t4N$((6O"&&|T:M"";5I INX*t"<	y"	{	"	( $I*Nnd333I,N#OGU"3N"C[`"yZ$5O$	!*!	!/H!3!34Et!L'8I)JJn$$    enablec                     | a y)zA Set download progress for pretrained weights on/off (globally). N)_DOWNLOAD_PROGRESSrE   s    rB   r!   r!   [   s
      rD   c                     | a y)z= Set hash checking for pretrained weights on/off (globally). N)_CHECK_HASHrH   s    rB   r"   r"   a   s	     KrD   modelload_fn	cache_dirc                    |xs t        | dd      }|st        j                  d       yt        |      \  }}|st        j                  d       y|dk(  rt        j                  d       n|dk(  rt	        |t
        t        |      }|
 || |       yt        | d	      r| j                  |       yt        j                  d
       y)a$  Loads a custom (read non .pth) weight file

    Downloads checkpoint file into cache-dir like torch.hub based loaders, but calls
    a passed in custom load fun, or the `load_pretrained` model member fn.

    If the object is already present in `model_dir`, it's deserialized and returned.
    The default value of `model_dir` is ``<hub_dir>/checkpoints`` where
    `hub_dir` is the directory returned by :func:`~torch.hub.get_dir`.

    Args:
        model: The instantiated model to load weights into
        pretrained_cfg: Default pretrained model cfg
        load_fn: An external standalone fn that loads weights into provided model, otherwise a fn named
            'load_pretrained' on the model will be called if it exists
        cache_dir: Override model checkpoint cache dir for this load
    r*   Nz/Invalid pretrained config, cannot load weights.zHNo pretrained weights exist for this model. Using random initialization.r3   zKHugging Face hub not currently supported for custom load pretrained models.r/   )
check_hashprogressrM   r$   zXValid function to load pretrained weights is not available, using random initialization.)	getattr_loggerwarningrC   r   rJ   rG   hasattrr$   )rK   r*   rL   rM   r?   r@   s         rB   r#   r#   g   s    , $Mwu6F'MNIJ :> JI~bcHef	e	-"'	
 ~&	)	*n-rsrD   num_classesin_chans	filter_fnstrictc                 `   |xs t        | dd      }|st        d      t        |      \  }}|dk(  rt        j	                  d       |}	n|dk(  rJt        j	                  d| d       |j                  d	d
      r| j                  |       yt        |      }	no|dk(  rot        j	                  d| d       |j                  d	d
      r)t        |t        t        |      }| j                  |       y	 t        |dt        t        d|      }	n|dk(  rt        j	                  d| d       t        |t        t        f      rD|j                  d	d
      }
t        |
t               r|
dk(  rt#        g || d|i yt%        |d|i}	nt%        |d|      }	nt|dk(  rNt        j	                  d| d       t'        |      }|j)                         rt+        |      }	n/t        d|       |j                  dd      }t        d| d      |
	  ||	|       }	|j                  dd      }|S|dk7  rNt        |t               r|f}|D ]6  }|d z   }	 t-        ||	|         |	|<   t        j	                  d!| d"| d#       8 |j                  d&d      }|j                  d'd(      }|t        |t               r|f}||d)   k7  r4|D ],  }|	j3                  |d z   d       |	j3                  |d*z   d       . d
}n2|d(kD  r-|D ](  }|	|d z      }||d |	|d z   <   |	|d*z      }||d |	|d*z   <   * | j                  |	|+      }|j4                  r2t        j	                  d,d-j7                  |j4                         d.       |j8                  r3t        j1                  d/d-j7                  |j8                         d0       yy# t        $ r t        |dt        t        |      }	Y w xY w# t        $ r} ||	      }	Y d}~d}~ww xY w# t.        $ r)}|	|= d
}t        j1                  d$| d%       Y d}~d}~ww xY w)1a   Load pretrained checkpoint

    Args:
        model: PyTorch module
        pretrained_cfg: Configuration for pretrained weights / target dataset
        num_classes: Number of classes for target model. Will adapt pretrained if different.
        in_chans: Number of input chans for target model. Will adapt pretrained if different.
        filter_fn: state_dict filter fn for load (takes state_dict, model as args)
        strict: Strict load of checkpoint
        cache_dir: Override model checkpoint cache dir for this load
    r*   NzWInvalid pretrained config, cannot load weights. Use `pretrained=False` for random init.r1   z*Loading pretrained weights from state dictr0   z&Loading pretrained weights from file ()custom_loadFr/   z%Loading pretrained weights from url ()rP   rO   rM   cpuT)map_locationrP   rO   weights_only	model_dir)r]   rP   rO   r_   r3   z2Loading pretrained weights from Hugging Face hub (hfrM   )r^   rM   r5   z1Loading pretrained weights from local directory (z#Specified path is not a directory: architecturez
this modelz No pretrained weights exist for z). Use `pretrained=False` for random init.
first_conv   z.weightzConverted input conv z pretrained weights from 3 to z channel(s)zUnable to convert pretrained z+ weights, using random init for this layer.
classifierlabel_offsetr   rU   z.bias)rX   zMissing keys (z, zZ) discovered while loading pretrained weights. This is expected if model is being adapted.zUnexpected keys (zY) found while loading pretrained weights. This may be expected if model is being adapted.)rQ   RuntimeErrorrC   rR   infor7   r$   r   r   rG   rJ   r   	TypeErrorr8   listtuplestrr   r   r   is_dirr   r   NotImplementedErrorrS   popmissing_keysjoinunexpected_keys)rK   r*   rU   rV   rW   rX   rM   r?   r@   r1   r[   pretrained_path
model_nameeinput_convsinput_conv_nameweight_nameclassifiersre   classifier_nameclassifier_weightclassifier_biasload_results                          rB   r$   r$      s   ( $Mwu6F'MNtuu :> JI~L AC#
	f	=n=MQOPmU3!!.1(8J	e	<^<LANOmU31+&#	N !!.15"!&/*!%'
  
h	I.IYYZ[\ntUm4(,,]EBK+s+t0C#P^PUPiP4nZPYZ
0d^ghJ	k	!HHXXYZ[~.!!#2?CJ!D^DTUVV#''E
=j\Irstt	/":u5J
 !$$\48K8q=k3'&.K* 
	rO)I5Kr*:8ZP[E\*]
;'+O+<<Z[cZddopr	
	r !$$\48K!%%na8Lk3'&.K.77#. @:DA8$?@ FA#. W$./J$K!:KLM:Z
?Y67",_w-F"G8G8V
?W45W ''
6'BKTYY{'?'?@A B; <	= ""		+*E*E FG H? @	A #[  5"!&/*'
B  	/":.J	/ ' r{+3O3DDopr rrsB   4N4 	O .O;4!OO	O8%O33O8;	P-P((P-c                 R    t        |       } d}|D ]  }| j                  |d         | S )N)rU   rd   global_pool)r   rn   )r*   	to_removetrs      rB   r%   r%   #  s6    n-N<I %2t$%rD   kwargsnamesc                 @    | r|sy |D ]  }| j                  |d         y )N)rn   )r   r   ns      rB   _filter_kwargsr   ,  s'     

1drD   c                    d}| j                  dd      r|dz  }|D ]  }|dk(  r;| j                  dd      }|t        |      dk(  sJ |j                  ||d	d        C|d
k(  r;| j                  dd      }|]t        |      dk(  sJ |j                  ||d          |dk(  r1| j                  |d      }||dk\  s|j                  || |          | j                  |d      }||j                  || |           t        ||       y)a&   Update the default_cfg and kwargs before passing to model

    Args:
        pretrained_cfg: input pretrained cfg (updated in-place)
        kwargs: keyword args passed to model build fn (updated in-place)
        kwargs_filter: keyword arg keys that must be removed before model __init__
    )rU   r~   rV   fixed_input_sizeF)img_sizer   
input_sizeNrc   rV   r   rU   )r   )r7   len
setdefaultr   )r*   r   kwargs_filterdefault_kwarg_namesr   r   default_vals          rB   _update_default_model_kwargsr   3  s9    E,e4},  8 
?'++L$?J%:!+++!!!Z_5*_'++L$?J%:!+++!!!Z]3-(,,Q5K&;!+;!!!^A%67(,,Q5K&!!!^A%67+80 6/rD   variantpretrained_cfg_overlayc                 t   | }d}|r0t        |t              rt        di |}nt        |t              r|}d}|s |rdj	                  | |g      }t        |      }|s#t        j                  d| d       t               }|xs i }|j                  s|j                  d|        t        j                  |fi |}|S )z6Resolve pretrained configuration from various sources.N.z*No pretrained configuration specified for ze model. Using a default. Please add a config to the model pretrained_cfg registry or pass explicitly.ra    )r8   r9   r   rk   rp   r   rR   rS   ra   r   dataclassesreplace)r   r*   r   model_with_tagpretrained_tags        rB   r&   r&   \  s     NNnd+*<^<N,+N!N  XXw&?@N+N;88H I\ ]	^ '39r&&)).'B ((R;QRNrD   	model_cls.
pretrained	model_cfgfeature_cfgpretrained_strictpretrained_filter_fnr   c           	         |j                  dd      }d}|xs i }t        |||      }|j                         }t        |||
       |j                  dd      rDd}|j	                  dd       d|v r|j                  d      |d<   d|v r|j                  d      |d<   |	 | di |}n
 | dd
|i|}||_        |j
                  |_        |rt        ||      }|rdnt        |d|j                  dd            }|r"t        ||||j                  dd      |||	       |rd}d|v r|j                  d      }t        |t              rs|j                         }|dvr|j                  dd	       d|v rt        }nB|dk(  rt        }n6|dk(  rt         }n*|dk(  rt"        }n|dk(  r	d}t$        }nJ d|        t        }t        |dd	      }||s|j	                  d|        ||fi |}t'        |      |_        |j
                  |_        |S )aH   Build model with specified default_cfg and optional model_cfg

    This helper fn aids in the construction of a model including:
      * handling default_cfg and associated pretrained weight loading
      * passing through optional model_cfg for models with config based arch spec
      * features_only model adaptation
      * pruning config / model adaptation

    Args:
        model_cls: Model class
        variant: Model variant name
        pretrained: Load the pretrained weights
        pretrained_cfg: Model's pretrained weight/task config
        pretrained_cfg_overlay: Entries that will override those in pretrained_cfg
        model_cfg: Model's architecture config
        feature_cfg: Feature extraction adapter config
        pretrained_strict: Load pretrained weights strictly
        pretrained_filter_fn: Filter callable for pretrained weights
        cache_dir: Override model cache dir for Hugging Face Hub and Torch checkpoints
        kwargs_filter: Kwargs keys to filter (remove) before passing to model
        **kwargs: Model args passed through to model __init__
    prunedF)r*   r   features_onlyTout_indices)r         rc      feature_clsNcfgr   rU     rV   rc   )r*   rU   rV   rW   rX   rM   )r9   ri   hookflatten_sequentialr   ri   r9   fxgetterzUnknown feature class 
output_fmtr   )rn   r&   to_dictr   r   r*   default_cfgr   rQ   r7   r$   r8   rk   lowerr   r   r   r   r   r%   )r   r   r   r*   r   r   r   r   r   rM   r   r   r   featuresrK   num_classes_pretrained
use_getterr   r   s                      rB   r'   r'     sM   H ZZ%(FH#K ,%5N
 $++-N G zz/5)}o>F")/M)BK&F")/M)BK& #F#2i262)E,,E%eW5 #+Q}fjjYfhlNm0n).ZZ
A.*$	
 
K'%//-8K+s+)//1 &>>OO$8$?[("0K F*"0K F*"0K D("1K H,!%J"2KH$:;-"HH5(KUL$7
!*""<<E1[1:>J!00LrD   )T)NNN)Nr   rc   NTN)r+   N)NN)NNNNTNNN)Er   loggingoscopyr   pathlibr   typingr   r   r   r   r	   r
   r   r   r   torchr   	torch.hubr   timm.models._featuresr   r   r   r   timm.models._features_fxr   timm.models._helpersr   timm.models._hubr   r   r   r   r   r   timm.models._manipulater   timm.models._pretrainedr   timm.models._pruner   timm.models._registryr   	getLogger__name__rR   rG   rJ   intenvironr7   r:   __all__Moduler(   rk   rC   boolr!   r"   r#   r$   r%   r   r   r&   r'   r   rD   rB   <module>r      su     	   S S S  . b b 4 03 3 4 1 4 4
'

H
%  RZZ^^$8!<=A 
	+-%tCH~ -%%S/ -%` T  T  d d  48&*04	.tyy.t c3h0.t (#.t E#t),-	.t
 
.tf 48(,04HAyyHA c3h0HA HA 	HA
 H%HA HA E#t),-HA 
HAVS#X 4S> 4S> $s)  &0V @D;?!! sDcN':!;<! !)c3h 8! 	!P *.15#'&*"&3704.2wfxV'<<=ww w !	w
 !)w C=w d^w  w 'x0w E#t),-w  c
+w wrD   