
    fTh;                     |   S r SSKrSSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
Jr  SSKJr  SSKJrJrJr  SS	KJr  SS
KJrJr  SSKJr  \R2                  " \5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r  " S S\R8                  5      r! " S S\R8                  5      r" " S S\R8                  5      r# " S S\R8                  5      r$\ " S S\5      5       r%\ " S S \%5      5       r&\" S!S"9 " S# S$\%5      5       r'/ S%Qr(g)&zPyTorch RegNet model.    N)Optional)Tensornn)BCEWithLogitsLossCrossEntropyLossMSELoss   )ACT2FN)BaseModelOutputWithNoAttention(BaseModelOutputWithPoolingAndNoAttention$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringlogging   )RegNetConfigc                   \   ^  \ rS rSr    SS\S\S\S\S\S\\   4U 4S jjjrS	 rS
r	U =r
$ )RegNetConvLayer'   in_channelsout_channelskernel_sizestridegroups
activationc           
         > [         TU ]  5         [        R                  " UUUUUS-  USS9U l        [        R
                  " U5      U l        Ub  [        U   U l	        g [        R                  " 5       U l	        g )N   F)r   r   paddingr   bias)
super__init__r   Conv2dconvolutionBatchNorm2dnormalizationr
   Identityr   )selfr   r   r   r   r   r   	__class__s          b/var/www/auris/envauris/lib/python3.13/site-packages/transformers/models/regnet/modeling_regnet.pyr!   RegNetConvLayer.__init__(   sk     	99#1$
  ^^L90:0F&,BKKM    c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)r#   r%   r   r'   hidden_states     r)   forwardRegNetConvLayer.forward>   s6    ''5)),7|4r+   )r   r#   r%   )r	   r   r   relu)__name__
__module____qualname____firstlineno__intr   strr!   r0   __static_attributes____classcell__r(   s   @r)   r   r   '   sk    
 $*ZZ Z 	Z
 Z Z SMZ Z, r+   r   c                   :   ^  \ rS rSrSrS\4U 4S jjrS rSrU =r	$ )RegNetEmbeddingsE   zG
RegNet Embeddings (stem) composed of a single aggressive convolution.
configc                    > [         TU ]  5         [        UR                  UR                  SSUR
                  S9U l        UR                  U l        g )Nr	   r   )r   r   r   )r    r!   r   num_channelsembedding_size
hidden_actembedderr'   r?   r(   s     r)   r!   RegNetEmbeddings.__init__J   sH    '!6!6Aa\b\m\m
 #//r+   c                 z    UR                   S   nX R                  :w  a  [        S5      eU R                  U5      nU$ )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)shaperA   
ValueErrorrD   )r'   pixel_valuesrA   r/   s       r)   r0   RegNetEmbeddings.forwardQ   sD    #))!,,,,w  }}\2r+   )rD   rA   )
r3   r4   r5   r6   __doc__r   r!   r0   r9   r:   r;   s   @r)   r=   r=   E   s    0| 0 r+   r=   c                   R   ^  \ rS rSrSrSS\S\S\4U 4S jjjrS\S\4S	 jrS
r	U =r
$ )RegNetShortCut\   z
RegNet shortcut, used to project the residual features to the correct size. If needed, it is also used to
downsample the input using `stride=2`.
r   r   r   c                    > [         TU ]  5         [        R                  " XSUSS9U l        [        R
                  " U5      U l        g )Nr   F)r   r   r   )r    r!   r   r"   r#   r$   r%   )r'   r   r   r   r(   s       r)   r!   RegNetShortCut.__init__b   s8    99[AV\chi^^L9r+   inputreturnc                 J    U R                  U5      nU R                  U5      nU$ r-   r#   r%   )r'   rR   r/   s      r)   r0   RegNetShortCut.forwardg   s(    ''.)),7r+   rU   )r   )r3   r4   r5   r6   rL   r7   r!   r   r0   r9   r:   r;   s   @r)   rN   rN   \   s?    
:C :s :C : :
V   r+   rN   c                   >   ^  \ rS rSrSrS\S\4U 4S jjrS rSrU =r	$ )RegNetSELayerm   zt
Squeeze and Excitation layer (SE) proposed in [Squeeze-and-Excitation Networks](https://arxiv.org/abs/1709.01507).
r   reduced_channelsc           
      ,  > [         TU ]  5         [        R                  " S5      U l        [        R
                  " [        R                  " XSS9[        R                  " 5       [        R                  " X!SS9[        R                  " 5       5      U l	        g )Nr   r   r   )r   )
r    r!   r   AdaptiveAvgPool2dpooler
Sequentialr"   ReLUSigmoid	attention)r'   r   rZ   r(   s      r)   r!   RegNetSELayer.__init__r   s_    **62IIkCGGIII&CJJL	
r+   c                 R    U R                  U5      nU R                  U5      nX-  nU$ r-   )r^   rb   )r'   r/   pooledrb   s       r)   r0   RegNetSELayer.forward}   s,    \*NN6*	#/r+   )rb   r^   )
r3   r4   r5   r6   rL   r7   r!   r0   r9   r:   r;   s   @r)   rX   rX   m   s%    	
C 	
3 	
 r+   rX   c            	       J   ^  \ rS rSrSrS
S\S\S\S\4U 4S jjjrS rS	r	U =r
$ )RegNetXLayer   zl
RegNet's layer composed by three `3x3` convolutions, same as a ResNet bottleneck layer with reduction = 1.
r?   r   r   r   c                   > [         TU ]  5         X#:g  =(       d    US:g  n[        SX1R                  -  5      nU(       a
  [	        X#US9O[
        R                  " 5       U l        [
        R                  " [        X#SUR                  S9[        X3XFUR                  S9[        X3SS S95      U l        [        UR                     U l        g )Nr   r   r   r   r   r   r   )r    r!   maxgroups_widthrN   r   r&   shortcutr_   r   rC   layerr
   r   r'   r?   r   r   r   should_apply_shortcutr   r(   s          r)   r!   RegNetXLayer.__init__   s     + ; Jv{Q(;(;;<H]N;VDcecncncp 	 ]]K1QWQbQbcLvagararsLARVW


 !!2!23r+   c                 x    UnU R                  U5      nU R                  U5      nX-  nU R                  U5      nU$ r-   rq   rp   r   r'   r/   residuals      r)   r0   RegNetXLayer.forward   ?    zz,/==* |4r+   r   rq   rp   r   r3   r4   r5   r6   rL   r   r7   r!   r0   r9   r:   r;   s   @r)   rh   rh      s9    4| 4# 4S 4Z] 4 4 r+   rh   c            	       J   ^  \ rS rSrSrS
S\S\S\S\4U 4S jjjrS rS	r	U =r
$ )RegNetYLayer   z;
RegNet's Y layer: an X layer with Squeeze and Excitation.
r?   r   r   r   c                   > [         TU ]  5         X#:g  =(       d    US:g  n[        SX1R                  -  5      nU(       a
  [	        X#US9O[
        R                  " 5       U l        [
        R                  " [        X#SUR                  S9[        X3XFUR                  S9[        U[        [        US-  5      5      S9[        X3SS S95      U l        [        UR                     U l        g )Nr   rk   rl   rm      )rZ   )r    r!   rn   ro   rN   r   r&   rp   r_   r   rC   rX   r7   roundrq   r
   r   rr   s          r)   r!   RegNetYLayer.__init__   s     + ; Jv{Q(;(;;<H]N;VDcecncncp 	 ]]K1QWQbQbcLvagarars,U;QR?=S9TULARVW	

 !!2!23r+   c                 x    UnU R                  U5      nU R                  U5      nX-  nU R                  U5      nU$ r-   rv   rw   s      r)   r0   RegNetYLayer.forward   rz   r+   r{   r|   r}   r;   s   @r)   r   r      s9    4| 4# 4S 4Z] 4 4 r+   r   c                   R   ^  \ rS rSrSr  SS\S\S\S\S\4
U 4S jjjrS	 rS
r	U =r
$ )RegNetStage   z,
A RegNet stage composed by stacked layers.
r?   r   r   r   depthc                    > [         TU ]  5         UR                  S:X  a  [        O[        n[
        R                  " U" UUUUS9/[        US-
  5       Vs/ s H  ov" XU5      PM     snQ76 U l        g s  snf )Nxrk   r   )	r    r!   
layer_typerh   r   r   r_   rangelayers)	r'   r?   r   r   r   r   rq   _r(   s	           r)   r!   RegNetStage.__init__   s{     	 & 1 1S 8lmm		
 BGuqyAQRAQAeF,7AQR	
 Ss   A3
c                 (    U R                  U5      nU$ r-   r   r.   s     r)   r0   RegNetStage.forward   s    {{<0r+   r   )r   r   r}   r;   s   @r)   r   r      sT     

 
 	

 
 
 
. r+   r   c            	       P   ^  \ rS rSrS\4U 4S jjr S
S\S\S\S\4S jjr	S	r
U =r$ )RegNetEncoder   r?   c           
        > [         TU ]  5         [        R                  " / 5      U l        U R                  R                  [        UUR                  UR                  S   UR                  (       a  SOSUR                  S   S95        [        UR                  UR                  SS  5      n[        X!R                  SS  5       H+  u  u  p4nU R                  R                  [        XXES95        M-     g )Nr   r   r   )r   r   )r   )r    r!   r   
ModuleListstagesappendr   rB   hidden_sizesdownsample_in_first_stagedepthszip)r'   r?   in_out_channelsr   r   r   r(   s         r)   r!   RegNetEncoder.__init__   s    mmB'%%##A&"<<q!mmA&	
 f1163F3Fqr3JK25o}}UVUWGX2Y.'[KK{6Z[ 3Zr+   r/   output_hidden_statesreturn_dictrS   c                     U(       a  SOS nU R                    H  nU(       a  XA4-   nU" U5      nM     U(       a  XA4-   nU(       d  [        S X4 5       5      $ [        XS9$ )N c              3   .   #    U  H  oc  M  Uv   M     g 7fr-   r   ).0vs     r)   	<genexpr>(RegNetEncoder.forward.<locals>.<genexpr>   s     S$Aq$As   	)last_hidden_statehidden_states)r   tupler   )r'   r/   r   r   r   stage_modules         r)   r0   RegNetEncoder.forward   sc     3 KKL# - ?'5L	 (  )O;MS\$ASSS-jjr+   )r   )FT)r3   r4   r5   r6   r   r!   r   boolr   r0   r9   r:   r;   s   @r)   r   r      sH    \| \$ ]ak"k:>kUYk	'k kr+   r   c                   ,    \ rS rSr\rSrSrS/rS r	Sr
g)RegNetPreTrainedModeli  regnetrJ   r   c                 b   [        U[        R                  5      (       a*  [        R                  R	                  UR
                  SSS9  g [        U[        R                  5      (       a  [        R                  R                  UR
                  [        R                  " S5      S9  UR                  by  [        R                  R                  UR
                  5      u  p#US:  a  S[        R                  " U5      -  OSn[        R                  R                  UR                  U* U5        g g [        U[        R                  [        R                  45      (       aU  [        R                  R                  UR
                  S5        [        R                  R                  UR                  S5        g g )Nfan_outr2   )modenonlinearity   )ar   r   )
isinstancer   r"   initkaiming_normal_weightLinearkaiming_uniform_mathsqrtr   _calculate_fan_in_and_fan_outuniform_r$   	GroupNorm	constant_)r'   modulefan_inr   bounds        r)   _init_weights#RegNetPreTrainedModel._init_weights  s   fbii((GG##FMM	PV#W		**GG$$V]]diil$C{{&GGAA&--P	17!DIIf--  ufe< '  >??GGfmmQ/GGfkk1- @r+   r   N)r3   r4   r5   r6   r   config_classbase_model_prefixmain_input_name_no_split_modulesr   r9   r   r+   r)   r   r     s     L $O'(.r+   r   c            
       ^   ^  \ rS rSrU 4S jr\ S	S\S\\   S\\   S\	4S jj5       r
SrU =r$ )
RegNetModeli  c                    > [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        [        R                  " S5      U l	        U R                  5         g )Nr\   )r    r!   r?   r=   rD   r   encoderr   r]   r^   	post_initrE   s     r)   r!   RegNetModel.__init__  sI     (0$V,**62r+   rJ   r   r   rS   c                 &   Ub  UOU R                   R                  nUb  UOU R                   R                  nU R                  U5      nU R	                  XBUS9nUS   nU R                  U5      nU(       d	  Xg4USS  -   $ [        UUUR                  S9$ )Nr   r   r   r   )r   pooler_outputr   )r?   r   use_return_dictrD   r   r^   r   r   )r'   rJ   r   r   embedding_outputencoder_outputsr   pooled_outputs           r)   r0   RegNetModel.forward(  s    
 %9$D $++JjJj 	 &1%<k$++B]B]==6,,U` ' 
 ,A.$56%58KKK7/')77
 	
r+   )r?   rD   r   r^   )NN)r3   r4   r5   r6   r!   r   r   r   r   r   r0   r9   r:   r;   s   @r)   r   r     sI     os
"
:B4.
^fgk^l
	1
 
r+   r   z
    RegNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )custom_introc                      ^  \ rS rSrU 4S jr\    S
S\\R                     S\\R                     S\\
   S\\
   S\4
S jj5       rS	rU =r$ )RegNetForImageClassificationiE  c                   > [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " [
        R                  " 5       UR                  S:  a.  [
        R                  " UR                  S   UR                  5      O[
        R                  " 5       5      U l        U R                  5         g )Nr   )r    r!   
num_labelsr   r   r   r_   Flattenr   r   r&   
classifierr   rE   s     r)   r!   %RegNetForImageClassification.__init__M  s      ++!&)--JJLEKEVEVYZEZBIIf))"-v/@/@A`b`k`k`m

 	r+   rJ   labelsr   r   rS   c                 0   Ub  UOU R                   R                  nU R                  XUS9nU(       a  UR                  OUS   nU R	                  U5      nSnUGb  U R                   R
                  c  U R                  S:X  a  SU R                   l        OoU R                  S:  aN  UR                  [        R                  :X  d  UR                  [        R                  :X  a  SU R                   l        OSU R                   l        U R                   R
                  S:X  aI  [        5       n	U R                  S:X  a&  U	" UR                  5       UR                  5       5      nOU	" Xr5      nOU R                   R
                  S:X  a=  [        5       n	U	" UR                  SU R                  5      UR                  S5      5      nO,U R                   R
                  S:X  a  [        5       n	U	" Xr5      nU(       d  U4USS -   n
Ub  U4U
-   $ U
$ [!        XUR"                  S	9$ )
a  
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
    Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
    config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
Nr   r   
regressionsingle_label_classificationmulti_label_classificationr   r   )losslogitsr   )r?   r   r   r   r   problem_typer   dtypetorchlongr7   r   squeezer   viewr   r   r   )r'   rJ   r   r   r   outputsr   r   r   loss_fctoutputs              r)   r0   $RegNetForImageClassification.forwardY  s    &1%<k$++B]B]++lcn+o1<--'!*/{{''/??a'/;DKK,__q(fllejj.HFLL\a\e\eLe/LDKK,/KDKK,{{''<7"9??a'#FNN$4fnn6FGD#F3D))-JJ+-B @&++b/R))-II,./Y,F'+'7D7V#CVC3\c\q\qrrr+   )r   r   r   )NNNN)r3   r4   r5   r6   r!   r   r   r   FloatTensor
LongTensorr   r   r0   r9   r:   r;   s   @r)   r   r   E  s    
  59-1/3&*/su001/s ))*/s 'tn	/s
 d^/s 
./s /sr+   r   )r   r   r   ))rL   r   typingr   r   torch.utils.checkpointr   r   torch.nnr   r   r   activationsr
   modeling_outputsr   r   r   modeling_utilsr   utilsr   r   configuration_regnetr   
get_loggerr3   loggerModuler   r=   rN   rX   rh   r   r   r   r   r   r   __all__r   r+   r)   <module>r     s7         A A ! 
 . , . 
		H	%bii <ryy .RYY "BII 0299 8299 :")) B#kBII #kL .O . ., $
' $
 $
N =s#8 =s=s@ Sr+   