
     `iV7                     n   d Z ddlZddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ dd	lmZmZ d
dlmZ  ej        e          Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Ze G d de                      Z e G d de                       Z! ed !           G d" d#e                       Z"g d$Z#dS )%zPyTorch RegNet model.    N)Optional)Tensornn   )ACT2FN)BaseModelOutputWithNoAttention(BaseModelOutputWithPoolingAndNoAttention$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringlogging   )RegNetConfigc                   T     e Zd Z	 	 	 	 ddededededed	ee         f fd
Zd Z xZS )RegNetConvLayerr   r   reluin_channelsout_channelskernel_sizestridegroups
activationc           	         t                                                       t          j        |||||dz  |d          | _        t          j        |          | _        |t          |         nt          j                    | _	        d S )N   F)r   r   paddingr   bias)
super__init__r   Conv2dconvolutionBatchNorm2dnormalizationr   Identityr   )selfr   r   r   r   r   r   	__class__s          ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/models/regnet/modeling_regnet.pyr   zRegNetConvLayer.__init__&   s     	9#1$
 
 
  ^L990:0F&,,BKMM    c                     |                      |          }|                     |          }|                     |          }|S N)r    r"   r   r$   hidden_states     r&   forwardzRegNetConvLayer.forward<   s?    ''55)),77|44r'   )r   r   r   r   )	__name__
__module____qualname__intr   strr   r,   __classcell__r%   s   @r&   r   r   %   s        
 $*Z ZZ Z 	Z
 Z Z SMZ Z Z Z Z Z,      r'   r   c                   .     e Zd ZdZdef fdZd Z xZS )RegNetEmbeddingszO
    RegNet Embeddings (stem) composed of a single aggressive convolution.
    configc                     t                                                       t          |j        |j        dd|j                  | _        |j        | _        d S )Nr   r   )r   r   r   )r   r   r   num_channelsembedding_size
hidden_actembedderr$   r6   r%   s     r&   r   zRegNetEmbeddings.__init__H   sW    '!6Aa\b\m
 
 
 #/r'   c                 ~    |j         d         }|| j        k    rt          d          |                     |          }|S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)shaper8   
ValueErrorr;   )r$   pixel_valuesr8   r+   s       r&   r,   zRegNetEmbeddings.forwardO   sK    #)!,4,,,w   }}\22r'   )r-   r.   r/   __doc__r   r   r,   r2   r3   s   @r&   r5   r5   C   s]         0| 0 0 0 0 0 0      r'   r5   c                   B     e Zd ZdZd
dededef fdZdedefd	Z xZS )RegNetShortCutz
    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   r   c                     t                                                       t          j        ||d|d          | _        t          j        |          | _        d S )Nr   F)r   r   r   )r   r   r   r   r    r!   r"   )r$   r   r   r   r%   s       r&   r   zRegNetShortCut.__init__`   sP    9[,AV\chiii^L99r'   inputreturnc                 Z    |                      |          }|                     |          }|S r)   )r    r"   )r$   rE   r+   s      r&   r,   zRegNetShortCut.forwarde   s.    ''..)),77r'   )r   )	r-   r.   r/   rA   r0   r   r   r,   r2   r3   s   @r&   rC   rC   Z   s         
: :C :s :C : : : : : :
V         r'   rC   c                   2     e Zd ZdZdedef fdZd Z xZS )RegNetSELayerz
    Squeeze and Excitation layer (SE) proposed in [Squeeze-and-Excitation Networks](https://huggingface.co/papers/1709.01507).
    r   reduced_channelsc           	      J   t                                                       t          j        d          | _        t          j        t          j        ||d          t          j                    t          j        ||d          t          j                              | _	        d S )Nr   r   r   )r   )
r   r   r   AdaptiveAvgPool2dpooler
Sequentialr   ReLUSigmoid	attention)r$   r   rJ   r%   s      r&   r   zRegNetSELayer.__init__p   s~    *622Ik#3CCCGIII&CCCJLL	
 
r'   c                 d    |                      |          }|                     |          }||z  }|S r)   )rN   rR   )r$   r+   pooledrR   s       r&   r,   zRegNetSELayer.forward{   s4    \**NN6**	#i/r'   )r-   r.   r/   rA   r0   r   r,   r2   r3   s   @r&   rI   rI   k   sd         	
C 	
3 	
 	
 	
 	
 	
 	
      r'   rI   c            	       <     e Zd ZdZd	dedededef fdZd Z xZS )
RegNetXLayerzt
    RegNet's layer composed by three `3x3` convolutions, same as a ResNet bottleneck layer with reduction = 1.
    r   r6   r   r   r   c           
         t                                                       ||k    p|dk    }t          d||j        z            }|rt	          |||          nt          j                    | _        t          j        t          ||d|j
                  t          |||||j
                  t          ||dd                     | _        t          |j
                 | _        d S )Nr   r   r   r   r   r   r   )r   r   maxgroups_widthrC   r   r#   shortcutrO   r   r:   layerr   r   r$   r6   r   r   r   should_apply_shortcutr   r%   s          r&   r   zRegNetXLayer.__init__   s     +| ; Jv{Q(;;<<H]pN;VDDDDcecncpcp 	 ]K1QWQbcccL,vfagarsssL,ARVWWW
 


 !!23r'   c                     |}|                      |          }|                     |          }||z  }|                     |          }|S r)   r^   r]   r   r$   r+   residuals      r&   r,   zRegNetXLayer.forward   J    zz,//==** |44r'   r   	r-   r.   r/   rA   r   r0   r   r,   r2   r3   s   @r&   rV   rV      sx         4 4| 4# 4S 4Z] 4 4 4 4 4 4      r'   rV   c            	       <     e Zd ZdZd	dedededef fdZd Z xZS )
RegNetYLayerzC
    RegNet's Y layer: an X layer with Squeeze and Excitation.
    r   r6   r   r   r   c                 "   t                                                       ||k    p|dk    }t          d||j        z            }|rt	          |||          nt          j                    | _        t          j        t          ||d|j
                  t          |||||j
                  t          |t          t          |dz                                t          ||dd                     | _        t          |j
                 | _        d S )Nr   rX   rY   rZ      )rJ   )r   r   r[   r\   rC   r   r#   r]   rO   r   r:   rI   r0   roundr^   r   r   r_   s          r&   r   zRegNetYLayer.__init__   s    +| ; Jv{Q(;;<<H]pN;VDDDDcecncpcp 	 ]K1QWQbcccL,vfagarsss,U;QR?=S=S9T9TUUUL,ARVWWW	
 

 !!23r'   c                     |}|                      |          }|                     |          }||z  }|                     |          }|S r)   rb   rc   s      r&   r,   zRegNetYLayer.forward   re   r'   rf   rg   r3   s   @r&   ri   ri      sx         4 4| 4# 4S 4Z] 4 4 4 4 4 4      r'   ri   c                   D     e Zd ZdZ	 	 d
dededededef
 fdZd	 Z xZS )RegNetStagez4
    A RegNet stage composed by stacked layers.
    r   r6   r   r   r   depthc                    t                                                       j        dk    rt          nt          t          j         ||          gfdt          |dz
            D             R  | _        d S )NxrX   c                 *    g | ]}           S  rt   ).0_r6   r^   r   s     r&   
<listcomp>z(RegNetStage.__init__.<locals>.<listcomp>   s'    RRRAeeFL,77RRRr'   r   )	r   r   
layer_typerV   ri   r   rO   rangelayers)r$   r6   r   r   r   rp   r^   r%   s    ` `  @r&   r   zRegNetStage.__init__   s     	 & 1S 8 8lmE	  	
 SRRRRRuqyAQAQRRR	
 	
 	
r'   c                 0    |                      |          }|S r)   )rz   r*   s     r&   r,   zRegNetStage.forward   s    {{<00r'   )r   r   rg   r3   s   @r&   ro   ro      s          
 

 
 	

 
 
 
 
 
 
 
.      r'   ro   c            	       @     e Zd Zdef fdZ	 d
dedededefd	Z xZ	S )RegNetEncoderr6   c           
          t                                                       t          j        g           | _        | j                            t          ||j        |j        d         |j	        rdnd|j
        d                              t          |j        |j        dd                    }t          ||j
        dd                    D ]3\  \  }}}| j                            t          ||||                     4d S )Nr   r   r   )r   rp   )rp   )r   r   r   
ModuleListstagesappendro   r9   hidden_sizesdownsample_in_first_stagedepthszip)r$   r6   in_out_channelsr   r   rp   r%   s         r&   r   zRegNetEncoder.__init__   s   mB''%#A&"<Cqq!mA&  	
 	
 	
 f163Fqrr3JKK25ov}UVUWUWGX2Y2Y 	\ 	\.'[,K{6;TYZZZ[[[[	\ 	\r'   FTr+   output_hidden_statesreturn_dictrF   c                     |rdnd }| j         D ]}|r||fz   } ||          }|r||fz   }|st          d ||fD                       S t          ||          S )Nrt   c              3      K   | ]}||V  	d S r)   rt   )ru   vs     r&   	<genexpr>z(RegNetEncoder.forward.<locals>.<genexpr>   s"      SSqQ]]]]]SSr'   )last_hidden_statehidden_states)r   tupler   )r$   r+   r   r   r   stage_modules         r&   r,   zRegNetEncoder.forward   s     3< K 	6 	6L# @ - ?'<55LL 	<)\O;M 	TSS\=$ASSSSSS-\ijjjjr'   )FT)
r-   r.   r/   r   r   r   boolr   r,   r2   r3   s   @r&   r}   r}      s        \| \ \ \ \ \ \$ ]ak k"k:>kUYk	'k k k k k k k kr'   r}   c                   .    e Zd ZU eed<   dZdZdgZd ZdS )RegNetPreTrainedModelr6   regnetr@   ri   c                    t          |t          j                  r)t          j                            |j        dd           d S t          |t          j                  rt          j                            |j        t          j	        d                     |j
        ot          j                            |j                  \  }}|dk    rdt          j	        |          z  nd}t          j                            |j
        | |           d S d S t          |t          j        t          j        f          rLt          j                            |j        d           t          j                            |j
        d           d S d S )Nfan_outr   )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_inrv   bounds        r&   _init_weightsz#RegNetPreTrainedModel._init_weights  sF   fbi(( 	.G##FM	PV#WWWWW	** 	.G$$V]dill$CCC{&GAA&-PP	17!DIf----  ufe<<<<< '&  >?? 	.GfmQ///Gfk1-----	. 	.r'   N)	r-   r.   r/   r   __annotations__base_model_prefixmain_input_name_no_split_modulesr   rt   r'   r&   r   r     sE          $O'(. . . . .r'   r   c            
       b     e Zd Z fdZe	 ddedee         dee         defd            Z	 xZ
S )	RegNetModelc                    t                                          |           || _        t          |          | _        t          |          | _        t          j        d          | _	        | 
                                 d S )NrL   )r   r   r6   r5   r;   r}   encoderr   rM   rN   	post_initr<   s     r&   r   zRegNetModel.__init__  sh       (00$V,,*622r'   Nr@   r   r   rF   c                 &   ||n| j         j        }||n| j         j        }|                     |          }|                     |||          }|d         }|                     |          }|s||f|dd          z   S t          |||j                  S )Nr   r   r   r   )r   pooler_outputr   )r6   r   use_return_dictr;   r   rN   r	   r   )r$   r@   r   r   embedding_outputencoder_outputsr   pooled_outputs           r&   r,   zRegNetModel.forward&  s    
 %9$D  $+Jj 	 &1%<kk$+B]==66,,3GU` ' 
 
 ,A.$566 	L%}58KKK7/')7
 
 
 	
r'   )NN)r-   r.   r/   r   r   r   r   r   r	   r,   r2   r3   s   @r&   r   r     s             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                        e Zd Z fdZe	 	 	 	 d	deej                 deej                 dee	         dee	         de
f
d            Z xZS )
RegNetForImageClassificationc                    t                                          |           |j        | _        t          |          | _        t          j        t          j                    |j        dk    r%t          j        |j	        d         |j                  nt          j
                              | _        |                                  d S )Nr   )r   r   
num_labelsr   r   r   rO   Flattenr   r   r#   
classifierr   r<   s     r&   r   z%RegNetForImageClassification.__init__K  s        +!&))-JLLEKEVYZEZEZBIf)"-v/@AAA`b`k`m`m
 

 	r'   Nr@   labelsr   r   rF   c                 @   ||n| j         j        }|                     |||          }|r|j        n|d         }|                     |          }d}||                     ||| j                   }|s|f|dd         z   }	||f|	z   n|	S t          |||j                  S )a0  
        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   r   )losslogitsr   )r6   r   r   r   r   loss_functionr
   r   )
r$   r@   r   r   r   outputsr   r   r   outputs
             r&   r,   z$RegNetForImageClassification.forwardW  s     &1%<kk$+B]++lAUcn+oo1<L--'!*//%%ffdkBBD 	DY,F'+'7D7V##VC3f\c\qrrrrr'   )NNNN)r-   r.   r/   r   r   r   torchFloatTensor
LongTensorr   r
   r,   r2   r3   s   @r&   r   r   C  s        
 
 
 
 
  59-1/3&*s su01s )*s 'tn	s
 d^s 
.s s s ^s s s s sr'   r   )r   r   r   )$rA   r   typingr   r   r   r   activationsr   modeling_outputsr   r	   r
   modeling_utilsr   utilsr   r   configuration_regnetr   
get_loggerr-   loggerModuler   r5   rC   rI   rV   ri   ro   r}   r   r   r   __all__rt   r'   r&   <module>r      s"                     ! ! ! ! ! !         
 . - - - - - , , , , , , , , . . . . . . 
	H	%	%    bi   <    ry   .    RY   "    BI   0    29   8    29   :    ")   B#k #k #k #k #kBI #k #k #kL . . . . .O . . ., $
 $
 $
 $
 $
' $
 $
 $
N   +s +s +s +s +s#8 +s +s +s\ S
R
Rr'   