Ë
    ÜÓ^j¼6  ã                   óf  — d Z ddlZddlZddlmZmZ ddl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j0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z G d„ dej0                  «      Z e G d„ de«      «       Z!e G d„ de!«      «       Z" ed ¬!«       G d"„ d#e!«      «       Z#g d$¢Z$y)%zPyTorch RegNet model.é    N)ÚTensorÚnné   )Úinitialization)ÚACT2FN)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚRegNetConfigc                   óN   ‡ — e Zd Z	 	 	 	 d
dededededededz  fˆ fd„Zd	„ Zˆ xZS )ÚRegNetConvLayerÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚgroupsÚ
activationNc           	      óò   •— t         ‰| �  «        t        j                  |||||dz  |d¬«      | _        t        j
                  |«      | _        |�t        |   | _	        y t        j                  «       | _	        y )Né   F)r   r   Úpaddingr   Úbias)
ÚsuperÚ__init__r   ÚConv2dÚconvolutionÚBatchNorm2dÚnormalizationr   ÚIdentityr   )Úselfr   r   r   r   r   r   Ú	__class__s          €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/regnet/modeling_regnet.pyr   zRegNetConvLayer.__init__%   sk   ø€ ô 	‰ÑÔÜŸ9™9ØØØ#ØØ 1Ñ$ØØô
ˆÔô  Ÿ^™^¨LÓ9ˆÔØ0:Ð0Fœ& Ñ,ˆ�ÌBÏKÉKËMˆ�ó    c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)r   r!   r   ©r#   Úhidden_states     r%   ÚforwardzRegNetConvLayer.forward;   s6   € Ø×'Ñ'¨Ó5ˆØ×)Ñ)¨,Ó7ˆØ—‘ |Ó4ˆØÐr&   )r   r   r   Úrelu)Ú__name__Ú
__module__Ú__qualname__ÚintÚstrr   r+   Ú__classcell__©r$   s   @r%   r   r   $   s`   ø„ ð
 ØØØ!'ñZàðZð ðZð ð	Zð
 ðZð ðZð ˜$‘Jõ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                  | _        y )Nr   r   )r   r   r   )r   r   r   Únum_channelsÚembedding_sizeÚ
hidden_actÚembedder©r#   r6   r$   s     €r%   r   zRegNetEmbeddings.__init__G   sH   ø€ Ü‰ÑÔÜ'Ø×Ñ ×!6Ñ!6ÀAÈaÐ\b×\mÑ\mô
ˆŒð #×/Ñ/ˆÕr&   c                 óz   — |j                   d   }|| j                  k7  rt        d«      ‚| j                  |«      }|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.forwardN   sF   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜØwóð ð —}‘} \Ó2ˆØÐr&   )r-   r.   r/   Ú__doc__r   r   r+   r2   r3   s   @r%   r5   r5   B   s   ø„ ñð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   c                 ó”   •— t         ‰| �  «        t        j                  ||d|d¬«      | _        t        j
                  |«      | _        y )Nr   F)r   r   r   )r   r   r   r   r   r    r!   )r#   r   r   r   r$   s       €r%   r   zRegNetShortCut.__init___   s:   ø€ Ü‰ÑÔÜŸ9™9 [°,ÈAÐV\ÐchÔiˆÔÜŸ^™^¨LÓ9ˆÕr&   ÚinputÚreturnc                 óJ   — | j                  |«      }| j                  |«      }|S r(   )r   r!   )r#   rE   r*   s      r%   r+   zRegNetShortCut.forwardd   s(   € Ø×'Ñ'¨Ó.ˆØ×)Ñ)¨,Ó7ˆØÐr&   )r   )	r-   r.   r/   rA   r0   r   r   r+   r2   r3   s   @r%   rC   rC   Y   s5   ø„ ññ
: 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           	      ó0  •— t         ‰| �  «        t        j                  d«      | _        t        j
                  t        j                  ||d¬«      t        j                  «       t        j                  ||d¬«      t        j                  «       «      | _	        y )N©r   r   r   )r   )
r   r   r   ÚAdaptiveAvgPool2dÚpoolerÚ
Sequentialr   ÚReLUÚSigmoidÚ	attention)r#   r   rJ   r$   s      €r%   r   zRegNetSELayer.__init__o   sd   ø€ Ü‰ÑÔä×*Ñ*¨6Ó2ˆŒÜŸ™Ü�I‰I�kÐ#3ÀÔCÜ�G‰G‹IÜ�I‰IÐ&¨ÀÔCÜ�J‰J‹Ló	
ˆ�r&   c                 óT   — | j                  |«      }| j                  |«      }||z  }|S r(   )rN   rR   )r#   r*   ÚpooledrR   s       r%   r+   zRegNetSELayer.forwardz   s.   € à—‘˜\Ó*ˆØ—N‘N 6Ó*ˆ	Ø# iÑ/ˆØÐr&   )r-   r.   r/   rA   r0   r   r+   r2   r3   s   @r%   rI   rI   j   s    ø„ ñð	
 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.
    r6   r   r   r   c           
      óž  •— t         ‰| �  «        ||k7  xs |dk7  }t        d||j                  z  «      }|rt	        |||¬«      nt        j                  «       | _        t        j                  t        ||d|j                  ¬«      t        |||||j                  ¬«      t        ||dd ¬«      «      | _        t        |j                     | _        y )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»   ø€ Ü‰ÑÔØ +¨|Ñ ;Ò J¸vÈ¹{ÐÜ�Q˜¨×(;Ñ(;Ñ;Ó<ˆáH]ŒN˜;¨¸VÕDÔce×cnÑcnÓcpð 	Œô —]‘]Ü˜K¨À1ÐQW×QbÑQbÔcÜ˜L¨,¸vÈfÐag×arÑarÔsÜ˜L¨,ÀAÐRVÔWó
ˆŒ
ô
 ! ×!2Ñ!2Ñ3ˆ�r&   c                 óz   — |}| j                  |«      }| j                  |«      }||z  }| j                  |«      }|S r(   ©r^   r]   r   ©r#   r*   Úresiduals      r%   r+   zRegNetXLayer.forward•   óA   € ØˆØ—z‘z ,Ó/ˆØ—=‘= Ó*ˆØ˜Ñ ˆØ—‘ |Ó4ˆØÐr&   ©r   ©	r-   r.   r/   rA   r   r0   r   r+   r2   r3   s   @r%   rV   rV   ‚   s/   ø„ ññ4˜|ð 4¸#ð 4ÈSð 4ÐZ]õ 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.
    r6   r   r   r   c                 óà  •— t         ‰| �  «        ||k7  xs |dk7  }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                     | _        y )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Ô   ø€ Ü‰ÑÔØ +¨|Ñ ;Ò J¸vÈ¹{ÐÜ�Q˜¨×(;Ñ(;Ñ;Ó<ˆáH]ŒN˜;¨¸VÕDÔce×cnÑcnÓcpð 	Œô —]‘]Ü˜K¨À1ÐQW×QbÑQbÔcÜ˜L¨,¸vÈfÐag×arÑarÔsÜ˜,¼¼UÀ;ÐQRÁ?Ó=SÓ9TÔUÜ˜L¨,ÀAÐRVÔWó	
ˆŒ
ô ! ×!2Ñ!2Ñ3ˆ�r&   c                 óz   — |}| j                  |«      }| j                  |«      }||z  }| j                  |«      }|S r(   rb   rc   s      r%   r+   zRegNetYLayer.forward²   re   r&   rf   rg   r3   s   @r%   ri   ri   ž   s/   ø„ ññ4˜|ð 4¸#ð 4ÈSð 4ÐZ]õ 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.
    r6   r   r   r   Údepthc                 óð   •— t         ‰| �  «        |j                  dk(  rt        nt        }t        j                   |||||¬«      gt        |dz
  «      D �cg c]  } ||||«      ‘Œ c}¢­Ž | _        y c c}w )NÚxrX   r   )	r   r   Ú
layer_typerV   ri   r   rO   ÚrangeÚlayers)	r#   r6   r   r   r   rp   r^   Ú_r$   s	           €r%   r   zRegNetStage.__init__À   sw   ø€ ô 	‰ÑÔà &× 1Ñ 1°SÒ 8•¼lˆä—m‘máØØØØô	ð	
ô BGÀuÈqÁyÓAQÖR¸A‰e�F˜L¨,Õ7ÒRò	
ˆ�ùò Ss   ÁA3
c                 ó(   — | j                  |«      }|S r(   )ru   r)   s     r%   r+   zRegNetStage.forward×   s   € Ø—{‘{ <Ó0ˆØÐr&   )r   r   rg   r3   s   @r%   ro   ro   »   sJ   ø„ ñð Øñ
àð
ð ð
ð ð	
ð
 ð
ð õ
ö.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                  j                  t        ||j                  |j                  d   |j                  rdnd|j                  d   ¬«      «       t        |j                  |j                  dd  «      }t        ||j                  dd  «      D ]0  \  \  }}}| j                  j                  t        ||||¬«      «       Œ2 y )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Ù   ø€ Ü‰ÑÔÜ—m‘m BÓ'ˆŒà�‰×ÑÜØØ×%Ñ%Ø×#Ñ# AÑ&Ø"×<Ò<‘qÀ!Ø—m‘m AÑ&ôô	
ô ˜f×1Ñ1°6×3FÑ3FÀqÀrÐ3JÓKˆÜ25°oÀvÇ}Á}ÐUVÐUWÐGXÓ2Yò 	\Ñ.Ñ'ˆ[˜,¨Ø�K‰K×Ñœ{¨6°;ÀÐTYÔZÕ[ñ	\r&   r*   Ú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 )N© c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr(   r†   )Ú.0Úvs     r%   ú	<genexpr>z(RegNetEncoder.forward.<locals>.<genexpr>ý   s   è ø€ ÒS˜qÀQÁ]œÑSùs   ‚Š)Úlast_hidden_stateÚhidden_states)r|   Útupler   )r#   r*   rƒ   r„   rŒ   Ústage_modules         r%   r+   zRegNetEncoder.forwardî   sq   € ñ 3™¸ˆà ŸK™Kò 	6ˆLÙ#Ø -°°Ñ ?�á'¨Ó5‰Lð		6ñ  Ø)¨\¨OÑ;ˆMáÜÑS \°=Ð$AÔSÓSÐSä-ÀÐ\iÔjÐjr&   )FT)
r-   r.   r/   r   r   r   Úboolr   r+   r2   r3   s   @r%   ry   ry   Ü   sB   ø„ ð\˜|õ \ð$ ]añkØ"ðkØ:>ðkØUYðkà	'÷kr&   ry   c                   ó`   ‡ — e Zd ZU eed<   dZdZdgZ ej                  «       ˆ fd„«       Z
ˆ xZS )ÚRegNetPreTrainedModelr6   Úregnetr@   ri   c                 óD  •— t        |t        j                  «      r#t        j                  |j
                  dd¬«       y t        |t        j                  «      r¹t        j                  |j
                  t        j                  d«      ¬«       |j                  �xt        j                  j                  j                  |j
                  «      \  }}|dkD  rdt        j                  |«      z  nd}t        j                  |j                  | |«       y y t        ‰| �=  |«       y )NÚfan_outr,   )ÚmodeÚnonlinearityé   )Úar   r   )Ú
isinstancer   r   ÚinitÚkaiming_normal_ÚweightÚLinearÚkaiming_uniform_ÚmathÚsqrtr   ÚtorchÚ_calculate_fan_in_and_fan_outÚuniform_r   Ú_init_weights)r#   ÚmoduleÚfan_inrv   Úboundr$   s        €r%   r¤   z#RegNetPreTrainedModel._init_weights	  sÀ   ø€ ä�fœbŸi™iÔ(Ü× Ñ  §¡°YÈVÖTä˜¤§	¡	Ô*Ü×!Ñ! &§-¡-´4·9±9¸Q³<Õ@Ø�{‰{Ð&Ü!ŸH™HŸM™M×GÑGÈÏÉÓV‘	�˜Ø17¸!²˜œDŸI™I fÓ-Ò-À�Ü—‘˜fŸk™k¨E¨6°5Õ9ð 'ô
 ‰GÑ! &Õ)r&   )r-   r.   r/   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚ_no_split_modulesr¡   Úno_gradr¤   r2   r3   s   @r%   r‘   r‘     s7   ø… àÓØ ÐØ$€OØ'Ð(Ðà€U‡]�]ƒ_ó*ó ô*r&   r‘   c            
       óR   ‡ — e Zd Zˆ fd„Ze	 	 ddededz  dedz  defd„«       Zˆ xZ	S )	ÚRegNetModelc                 óÆ   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        j                  d«      | _	        | j                  «        y )NrL   )r   r   r6   r5   r;   ry   Úencoderr   rM   rN   Ú	post_initr<   s     €r%   r   zRegNetModel.__init__  sK   ø€ Ü‰Ñ˜Ô ØˆŒÜ(¨Ó0ˆŒÜ$ VÓ,ˆŒÜ×*Ñ*¨6Ó2ˆŒà�‰Õr&   Nr@   rƒ   r„   rF   c                 ó(  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |«      }| j	                  |||¬«      }|d   }| j                  |«      }|s
||f|dd  z   S t        |||j                  ¬«      S )N©rƒ   r„   r   r   )r‹   Úpooler_outputrŒ   )r6   rƒ   r„   r;   r°   rN   r	   rŒ   )	r#   r@   rƒ   r„   ÚkwargsÚembedding_outputÚencoder_outputsr‹   Úpooled_outputs	            r%   r+   zRegNetModel.forward$  s³   € ð %9Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàŸ=™=¨Ó6ÐàŸ,™,ØÐ3GÐU`ð 'ó 
ˆð ,¨AÑ.ÐàŸ™Ð$5Ó6ˆáØ% }Ð5¸ÈÈÐ8KÑKÐKä7Ø/Ø'Ø)×7Ñ7ô
ð 	
r&   )NN)
r-   r.   r/   r   r   r   r�   r	   r+   r2   r3   s   @r%   r®   r®     sR   ø„ ôð ð -1Ø#'ñ	
àð
ð # T™kð
ð ˜D‘[ð	
ð 
2ò
ó ô
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j                  dz  dej                  dz  dedz  dedz  de	f
d„«       Z
ˆ xZS )
ÚRegNetForImageClassificationc                 ó|  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  t        j                  «       |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       «      | _        | j                  «        y )Nr   éÿÿÿÿ)r   r   Ú
num_labelsr®   r’   r   rO   ÚFlattenr�   r~   r"   Ú
classifierr±   r<   s     €r%   r   z%RegNetForImageClassification.__init__M  s‡   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ! &Ó)ˆŒäŸ-™-Ü�J‰J‹LØEK×EVÑEVÐYZÒEZŒB�I‰I�f×)Ñ)¨"Ñ-¨v×/@Ñ/@ÔAÔ`b×`kÑ`kÓ`mó
ˆŒð
 	�‰Õr&   Nr@   Úlabelsrƒ   r„   rF   c                 óB  — |�|n| j                   j                  }| j                  |||¬«      }|r|j                  n|d   }| j	                  |«      }d}	|�| j                  ||| j                   «      }	|s|f|dd z   }
|	�|	f|
z   S |
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„   rµ   Úoutputsr¸   rÄ   rÃ   Úoutputs              r%   r+   z$RegNetForImageClassification.forwardY  s¶   € ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—+‘+˜lÐAUÐcn�+Óoˆá1<˜×-Ò-À'È!Á*ˆà—‘ Ó/ˆàˆàÐØ×%Ñ% f¨f°d·k±kÓBˆDáØ�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä3¸ÀfÐ\c×\qÑ\qÔrÐrr&   )NNNN)r-   r.   r/   r   r   r¡   ÚFloatTensorÚ
LongTensorr�   r
   r+   r2   r3   s   @r%   r»   r»   E  s   ø„ ô
ð ð 26Ø*.Ø,0Ø#'ñsà×'Ñ'¨$Ñ.ðsð × Ñ  4Ñ'ðsð # T™kð	sð
 ˜D‘[ðsð 
.òsó ôsr&   r»   )r»   r®   r‘   )%rA   rŸ   r¡   r   r   Ú r   rš   Úactivationsr   Úmodeling_outputsr   r	   r
   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_regnetr   Ú
get_loggerr-   ÚloggerÚModuler   r5   rC   rI   rV   ri   ro   ry   r‘   r®   r»   Ú__all__r†   r&   r%   ú<module>rÔ      s0  ðñ ã ã ß å &Ý !÷ñ õ
 .ß ,Ý .ð 
ˆ×	Ñ	˜HÓ	%€ô�b—i‘iô ô<�r—y‘yô ô.�R—Y‘Yô ô"�B—I‘Iô ô0�2—9‘9ô ô8�2—9‘9ô ô:�"—)‘)ô ôB#k�B—I‘Iô #kðL ô*˜Oó *ó ð*ð* ô(
Ð'ó (
ó ð(
ñV ðôô,sÐ#8ó ,sóð,sò^ S�r&   