
    NgO                        d dl Z d dl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 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 d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&  ej'        e(          Z)da*da+ e,ej-        .                    dd                     d k    Z/g dZ0d Z1d/dZ2d/dZ3	 	 d0dej4        de
e         de
e         fdZ5	 	 	 	 	 d1dej4        de
e         de,de,de
e         de6fdZ7d  Z8d! Z9d" Z:	 	 d0d#e;d$e"fd%Z<	 	 	 	 	 	 	 d2d&ed#e;d'e6de
e         d(e
e         d)e
e         d*e
e         d+e6d,e
e         d-e
ee;                  fd.Z=dS )3    N)deepcopy)AnyCallableDictListOptionalTuple)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_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_cfgc                 8   |                      dd          }|                      dd           }|                      dd           }|                      dd           }|                      dd           }d}d}|dk    rt          d	          r	d}|sJ |}n`|rd}|}t          |t                    sJ nB|rd}|}n;d
}t          r|rt          |          nd
}|s|rt          d	          rd}|}n|rd}|}|dk    r |                      dd           r
|| d         f}||fS )Nsource urlfile
state_dict	hf_hub_idhf-hubT)	necessaryFhf_hub_filename)getr   
isinstancedict_USE_OLD_CACHEr   )	pretrained_cfg
cfg_sourcepretrained_urlpretrained_filepretrained_sdr)   	load_frompretrained_locold_cache_valids	            P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/_builder.py_resolve_pretrained_sourcer:       s   ##Hb11J#''t44N$((66O"&&|T::M"";55I INX*t"<"<"<	"  	0$I*Nnd333333 	0I,NN#O aGU"`"3N"C"C"C[`" 0y 0Z$5O5O5O 0$	!* 0!	!/H!3!34Et!L!L'8I)JJn$$    Tc                 
    | a dS )zA Set download progress for pretrained weights on/off (globally). N)_DOWNLOAD_PROGRESSenables    r9   r   r   M   s      r;   c                 
    | a dS )z= Set hash checking for pretrained weights on/off (globally). N)_CHECK_HASHr>   s    r9   r   r   S   s     KKKr;   modelr1   load_fnc                    |pt          | dd          }|st                              d           dS t          |          \  }}|st                              d           dS |dk    rt                              d           n"|dk    rt	          |t
          t                    }| || |           dS t          | d	          r|                     |           dS t                              d
           dS )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 (dict): Default pretrained model cfg
        load_fn: An external standalone fn that loads weights into provided model, otherwise a fn named
            'laod_pretrained' on the model will be called if it exists
    r1   Nz/Invalid pretrained config, cannot load weights.zHNo pretrained weights exist for this model. Using random initialization.r*   zKHugging Face hub not currently supported for custom load pretrained models.r&   )
check_hashprogressr   zXValid function to load pretrained weights is not available, using random initialization.)	getattr_loggerwarningr:   r   rA   r=   hasattrr   )rB   r1   rC   r6   r7   s        r9   r   r   Y   s   ( $Mwu6F'M'MN IJJJ :> J JI~ bcccHeffff	e		-"'
 
 
 ~&&&&&	)	*	* tn-----rsssssr;        num_classesin_chans	filter_fnstrictc                 	   |pt          | dd          }|st          d          t          |          \  }}|dk    rt                              d           |}n|dk    r\t                              d| d           |                    d	d
          r|                     |           dS t          |          }n|dk    rt                              d| d           |                    d	d
          r3t          |t          t                    }|                     |           dS 	 t          |dt          t          d          }n# t          $ r  t          |dt          t                    }Y nw xY w|dk    rt                              d| d           t          |t          t          f          rK|                    d	d
          }	t          |	t                     r|	dk    rt#          g || R   dS t%          | }n;t%          |d          }n)|                    dd          }
t          d|
 d          |0	  |||           }n"# t          $ r} ||          }Y d}~nd}~ww xY w|                    dd          }||dk    rt          |t                     r|f}|D ]|}|dz   }	 t'          |||                   ||<   t                              d| d| d           C# t(          $ r-}||= d
}t                              d | d!           Y d}~ud}~ww xY w|                    d"d          }|                    d#d$          }|t          |t                     r|f}||d%         k    r:|D ]4}|                    |dz   d           |                    |d&z   d           5d
}nA|d$k    r;|D ]8}||dz            }||d         ||dz   <   ||d&z            }||d         ||d&z   <   9|                     ||'          }|j        r6t                              d(d)                    |j                   d*           |j        r8t                              d+d)                    |j                   d,           dS dS )-a   Load pretrained checkpoint

    Args:
        model (nn.Module) : PyTorch model module
        pretrained_cfg (Optional[Dict]): configuration for pretrained weights / target dataset
        num_classes (int): num_classes for target model
        in_chans (int): in_chans for target model
        filter_fn (Optional[Callable]): state_dict filter fn for load (takes state_dict, model as args)
        strict (bool): strict load of checkpoint

    r1   NzWInvalid pretrained config, cannot load weights. Use `pretrained=False` for random init.r(   z*Loading pretrained weights from state dictr'   z&Loading pretrained weights from file ()custom_loadFr&   z%Loading pretrained weights from url ()rF   rE   cpuT)map_locationrF   rE   weights_only)rU   rF   rE   r*   z2Loading pretrained weights from Hugging Face hub (hf)rV   architecturez
this modelz No pretrained weights exist for z). Use `pretrained=False` for random init.
first_convrL   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   rM   z.bias)rP   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.)rG   RuntimeErrorr:   rH   infor-   r   r   r   r=   rA   r   	TypeErrorr.   listtuplestrr   r   r   NotImplementedErrorrI   popmissing_keysjoinunexpected_keys)rB   r1   rM   rN   rO   rP   r6   r7   r(   rS   
model_nameeinput_convsinput_conv_nameweight_nameclassifiersr[   classifier_nameclassifier_weightclassifier_biasload_results                        r9   r   r      s   & $Mwu6F'M'MN vtuuu :> J JI~L  BCCC#

	f		OnOOOPPPmU33 	9!!.111F(88JJ	e		N^NNNOOOmU33 	1+&  N
 !!.111F5"!&/*!%  

    5"!&/*	  


 
h		[.[[[\\\ntUm44 	T(,,]EBBK+s++ Ft0C0C#;^;U;;;;4nE

0dSSSJJ#''EE
sjsssttt	/":u55JJ 	/ 	/ 	/":..JJJJJJ	/ !$$\488K8q==k3'' 	)&.K* 
	r 
	rO)I5Kr*:8ZP[E\*]*]
;'pOpp[cpppr r r r& r r r{+pOpppr r r r r r r rr !$$\488K!%%na88Lk3'' 	)&.K.777#. @ @:DAAA8$????FFA#. W W$./J$K!:KLMM:Z
?Y67",_w-F"G8G8V
?W455''
6'BBK =<TYY{'?@@ < < <	= 	= 	= " A@		+*E F F @ @ @	A 	A 	A 	A 	AA AsB   +E
 
'E43E4 I 
I,I''I,/:K**
L!4#LL!c                 ^    t          |           } d}|D ]}|                     |d            | S )N)rM   rZ   global_pool)r   rc   )r1   	to_removetrs      r9   r    r      sB    n--N<I % %2t$$$$r;   c                 H    | r|sd S |D ]}|                      |d            d S )N)rc   )kwargsnamesns      r9   _filter_kwargsry     sF        

1d r;   c                    d}|                      dd          r|dz  }|D ]}|dk    rL|                      dd          }|3t          |          dk    sJ |                    ||d	d                    U|d
k    rJ|                      dd          }|1t          |          dk    sJ |                    ||d                    |dk    r;|                      |d          }|"|dk    r|                    || |                    |                      |d          }||                    || |                    t          ||           dS )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__
    )rM   rr   rN   fixed_input_sizeF)img_sizer|   
input_sizeNrL   rN   r   rM   )rw   )r-   len
setdefaultry   )r1   rv   kwargs_filterdefault_kwarg_namesrx   r}   default_vals          r9   _update_default_model_kwargsr     s    E,e44 -},  8 8 
??'++L$??J%:!++++!!!Z_555*__'++L$??J%:!++++!!!Z]333-(,,Q55K&;!+;+;!!!^A%6777(,,Q55K&!!!^A%6777 6//////r;   variantreturnc                    | }d }|r;t          |t                    rt          di |}nt          |t                    r|}d }|s(|rd                    | |g          }t          |          }|s,t                              d| d           t                      }|pi }|j        s|	                    d|            t          j        |fi |}|S )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.rX    )r.   r/   r   ra   re   r   rH   rI   rX   r   dataclassesreplace)r   r1   pretrained_cfg_overlaymodel_with_tagpretrained_tags        r9   r!   r!   @  s!   
 NN "nd++ 	"*<<^<<NN,, 	"+N!N  < 	A XXw&?@@N+N;; )] ] ] ]	^ 	^ 	^ '39r& C)).'BBB (RR;QRRNr;   	model_cls
pretrainedr   	model_cfgfeature_cfgpretrained_strictpretrained_filter_fnr   c
           	         |
                     dd          }d}|pi }t          |||          }|                                }t          ||
|	           |
                     dd          rPd}|                    dd           d|
v r|
                     d          |d<   d|
v r|
                     d          |d<   |	 | di |
}n
 | dd
|i|
}||_        |j        |_        |rt          ||          }|rdn$t          |d|
	                    dd                    }|r)t          ||||
	                    dd          ||           |rd}d|v r|                     d          }t          |t                    r|                                }|dvr|                     dd	           d|v rt          }nO|dk    rt          }nA|dk    rt           }n3|dk    rt"          }n%|dk    r
d}t$          }nJ d|             nt          }t          |dd	          }||s|                    d|            ||fi |}t'          |          |_        |j        |_        |S )a   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 pretrained weights
        pretrained_cfg: model's pretrained weight/task config
        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
        kwargs_filter: kwargs to filter before passing to model
        **kwargs: model args passed through to model __init__
    prunedF)r1   r   features_onlyTout_indices)r         rL      feature_clsNcfgr   rM   rK   rN   rL   )r1   rM   rN   rO   rP   )r/   r_   hookflatten_sequentialr   r_   r/   fxgetterzUnknown feature class 
output_fmtr   )rc   r!   to_dictr   r   r1   default_cfgr   rG   r-   r   r.   ra   lowerr   r   r   r   r   r    )r   r   r   r1   r   r   r   r   r   r   rv   r   featuresrB   num_classes_pretrained
use_getterr   r   s                     r9   r"   r"   c  s   B ZZ%((FH#K ,%5  N $++--N GGG zz/5)) C}o>>>F"")/M)B)BK&F"")/M)B)BK& 	##F##	22i2622)E,E 6%eW55 #+nQQ}fjjYfhlNmNm0n0n 
).ZZ
A..*$	
 	
 	
 	
  !1
K''%//-88K+s++ I)//11 &>>>OO$8$???[(("0KK F**"0KK F**"0KK D(("1KK H,,!%J"2KKH"H;"H"HHHH'I* )KUL$77
!*!""<<<<E11[11:>JJ!0Lr;   )T)NN)NrK   rL   NT)NNNNTNN)>r   loggingoscopyr   typingr   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   timm.models._manipulater   timm.models._pretrainedr   timm.models._pruner   timm.models._registryr   	getLogger__name__rH   r=   rA   intenvironr-   r0   __all__r:   r   r   Moduler   boolr   r    ry   r   ra   r!   r"   r   r;   r9   <module>r      s        				       = = = = = = = = = = = = = = = =       . . . . . . b b b b b b b b b b b b 4 4 4 4 4 4 0 0 0 0 0 0              4 4 4 4 4 4 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4
'
H
%
%  RZ^^$8!<<==A\ \ \*% *% *%Z           *.&*+t +ty+t +t (#+t +t +t +t` *.(,}A }Ay}A }A }A 	}A
 H%}A }A }A }A }A@    &0 &0 &0V #     	       N *.15#'&*"&37.2u uuu u !	u
 !)u C=u d^u  u 'x0u  c
+u u u u u ur;   