
    <hzS                        S r SSKrSSKJrJr  SSKrSSK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Jr  SS	KJr  SS
KJrJr  SSKJr  \R2                  " \5      rS\S\4S jrS,S\\\4   S\4S jjr  " S S\RB                  5      r" " S S\RF                  5      r$ " S S\RB                  5      r% " S S\RB                  5      r& " S S\RB                  5      r' " S S\RB                  5      r( " S S \RB                  5      r) " S! S"\RB                  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 EfficientNet model.    N)OptionalUnion)nn)BCEWithLogitsLossCrossEntropyLossMSELoss   )ACT2FN)BaseModelOutputWithNoAttention(BaseModelOutputWithPoolingAndNoAttention$ImageClassifierOutputWithNoAttention)PreTrainedModel)auto_docstringlogging   )EfficientNetConfigconfignum_channelsc                     U R                   nXR                  -  n[        U[        XS-  -   5      U-  U-  5      nUSU-  :  a  X2-  n[        U5      $ )z4
Round number of filters based on depth multiplier.
   g?)depth_divisorwidth_coefficientmaxint)r   r   divisornew_dims       n/var/www/html/shao/venv/lib/python3.13/site-packages/transformers/models/efficientnet/modeling_efficientnet.pyround_filtersr   '   s`     ""G,,,L'3|k9:gEOPG |##w<    kernel_sizeadjustc                     [        U [        5      (       a  X 4n U S   S-  U S   S-  4nU(       a  US   S-
  US   US   S-
  US   4$ US   US   US   US   4$ )a.  
Utility function to get the tuple padding value for the depthwise convolution.

Args:
    kernel_size (`int` or `tuple`):
        Kernel size of the convolution layers.
    adjust (`bool`, *optional*, defaults to `True`):
        Adjusts padding value to apply to right and bottom sides of the input.
r   r   r   )
isinstancer   )r    r!   corrects      r   correct_padr%   6   s~     +s##"01~"KNa$78G
Q
GAJNGAJGG
GAJ
GAJ??r   c                   n   ^  \ rS rSrSrS\4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	EfficientNetEmbeddingsJ   zD
A module that corresponds to the stem module of the original work.
r   c           	      |  > [         TU ]  5         [        US5      U l        [        R
                  " SS9U l        [        R                  " UR                  U R                  SSSSS9U l	        [        R                  " U R                  UR                  UR                  S	9U l        [        UR                     U l        g )
N    )r   r   r   r   paddingr	   r   validFr    strider,   bias)epsmomentum)super__init__r   out_dimr   	ZeroPad2dr,   Conv2dr   convolutionBatchNorm2dbatch_norm_epsbatch_norm_momentum	batchnormr
   
hidden_act
activationselfr   	__class__s     r   r4   EfficientNetEmbeddings.__init__O   s    $VR0||L9991QPW^c
 &:O:OZ`ZtZtu !2!23r   pixel_valuesreturnc                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ N)r,   r8   r<   r>   )r@   rC   featuress      r   forwardEfficientNetEmbeddings.forwardZ   sA    <<-##H->>(+??8,r   )r>   r<   r8   r5   r,   )__name__
__module____qualname____firstlineno____doc__r   r4   torchTensorrH   __static_attributes____classcell__rA   s   @r   r'   r'   J   s5    	41 	4ELL U\\  r   r'   c                   :   ^  \ rS rSr       SU 4S jjrSrU =r$ )EfficientNetDepthwiseConv2dc   c	                 8   > X-  n	[         T
U ]  UU	UUUUUUUS9	  g )N)	in_channelsout_channelsr    r/   r,   dilationgroupsr0   padding_mode)r3   r4   )r@   rX   depth_multiplierr    r/   r,   rZ   r0   r\   rY   rA   s             r   r4   $EfficientNetDepthwiseConv2d.__init__d   s:     #5#%#% 	 
	
r    )r   r	   r   r   r   Tzeros)rJ   rK   rL   rM   r4   rQ   rR   rS   s   @r   rU   rU   c   s$     
 
r   rU   c                   z   ^  \ rS rSrSrS\S\S\S\4U 4S jjrS\R                  S	\R                  4S
 jrSrU =r$ )EfficientNetExpansionLayer}   zW
This corresponds to the expansion phase of each block in the original implementation.
r   in_dimr5   r/   c                    > [         TU ]  5         [        R                  " UUSSSS9U l        [        R
                  " X1R                  S9U l        [        UR                     U l
        g )Nr   sameFrX   rY   r    r,   r0   )num_featuresr1   )r3   r4   r   r7   expand_convr9   r:   	expand_bnr
   r=   
expand_act)r@   r   rd   r5   r/   rA   s        r   r4   #EfficientNetExpansionLayer.__init__   sX    99 
 WBWBWX !2!23r   hidden_statesrD   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ rF   )ri   rj   rk   r@   rm   s     r   rH   "EfficientNetExpansionLayer.forward   s4    ((7}56r   )rk   rj   ri   )rJ   rK   rL   rM   rN   r   r   r4   rO   FloatTensorrP   rH   rQ   rR   rS   s   @r   rb   rb   }   sM    
41 
43 
4 
4VY 
4U%6%6 5<<  r   rb   c            
       ~   ^  \ rS rSrSrS\S\S\S\S\4
U 4S jjrS	\	R                  S
\	R                  4S jrSrU =r$ )EfficientNetDepthwiseLayer   zc
This corresponds to the depthwise convolution phase of each block in the original implementation.
r   rd   r/   r    adjust_paddingc                 F  > [         TU ]  5         X0l        U R                  S:X  a  SOSn[        XES9n[        R
                  " US9U l        [        X$X6SS9U l        [        R                  " X!R                  UR                  S9U l        [        UR                     U l        g )	Nr   r-   rf   )r!   r+   Fr.   rh   r1   r2   )r3   r4   r/   r%   r   r6   depthwise_conv_padrU   depthwise_convr9   r:   r;   depthwise_normr
   r=   depthwise_act)	r@   r   rd   r/   r    ru   conv_padr,   rA   s	           r   r4   #EfficientNetDepthwiseLayer.__init__   s     	"kkQ.7FkA"$,,w"?9FSX
 !nn%:%:VE_E_
 $F$5$56r   rm   rD   c                     U R                   S:X  a  U R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU$ )Nr   )r/   rx   ry   rz   r{   ro   s     r   rH   "EfficientNetDepthwiseLayer.forward   sT    ;;! 33MBM++M:++M:**=9r   )r{   ry   rx   rz   r/   rJ   rK   rL   rM   rN   r   r   boolr4   rO   rq   rP   rH   rQ   rR   rS   s   @r   rs   rs      s_    7"7 7 	7
 7 7,	U%6%6 	5<< 	 	r   rs   c            	       ~   ^  \ rS rSrSrSS\S\S\S\4U 4S jjjrS\	R                  S	\	R                  4S
 jrSrU =r$ )EfficientNetSqueezeExciteLayer   zd
This corresponds to the Squeeze and Excitement phase of each block in the original implementation.
r   rd   
expand_dimexpandc                   > [         TU ]  5         U(       a  UOUU l        [        S[	        X!R
                  -  5      5      U l        [        R                  " SS9U l	        [        R                  " U R                  U R                  SSS9U l        [        R                  " U R                  U R                  SSS9U l        [        UR                     U l        [        R                   " 5       U l        g )Nr   )output_sizerf   )rX   rY   r    r,   )r3   r4   dimr   r   squeeze_expansion_ratiodim_ser   AdaptiveAvgPool2dsqueezer7   reducer   r
   r=   
act_reduceSigmoid
act_expand)r@   r   rd   r   r   rA   s        r   r4   'EfficientNetSqueezeExciteLayer.__init__   s    !':V!S*H*H!HIJ++:ii	
 ii	
 !!2!23**,r   rm   rD   c                     UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      n[
        R                  " X!5      nU$ rF   )r   r   r   r   r   rO   mul)r@   rm   inputss      r   rH   &EfficientNetSqueezeExciteLayer.forward   sa    ]3M26M26		&8r   )r   r   r   r   r   r   r   )Fr   rS   s   @r   r   r      sR    '1 '3 'C 'Y] ' '*
U%6%6 
5<< 
 
r   r   c                      ^  \ rS rSrSrS\S\S\S\S\S\4U 4S	 jjr	S
\
R                  S\
R                  S\
R                  4S jrSrU =r$ )EfficientNetFinalBlockLayer   zS
This corresponds to the final phase of each block in the original implementation.
r   rd   r5   r/   	drop_rateid_skipc                   > [         TU ]  5         US:H  =(       a    U(       + U l        [        R                  " UUSSSS9U l        [        R                  " X1R                  UR                  S9U l	        [        R                  " US9U l        g )Nr   rf   Frg   rw   p)r3   r4   apply_dropoutr   r7   project_convr9   r:   r;   
project_bnDropoutdropout)r@   r   rd   r5   r/   r   r   rA   s          r   r4   $EfficientNetFinalBlockLayer.__init__   sx     	#q[8[II 
 .. &;&;fF`F`
 zzI.r   
embeddingsrm   rD   c                     U R                  U5      nU R                  U5      nU R                  (       a  U R                  U5      nX!-   nU$ rF   )r   r   r   r   )r@   r   rm   s      r   rH   #EfficientNetFinalBlockLayer.forward   sE    ))-86 LL7M)6Mr   )r   r   r   r   rJ   rK   rL   rM   rN   r   r   floatr   r4   rO   rq   rP   rH   rQ   rR   rS   s   @r   r   r      so    /(/25/@C/MP/]b/mq/"%"3"3 EDUDU Z_ZfZf  r   r   c                      ^  \ rS rSrSrS\S\S\S\S\S\S	\S
\S\4U 4S jjr	S\
R                  S\
R                  4S jrSrU =r$ )EfficientNetBlocki  aA  
This corresponds to the expansion and depthwise convolution phase of each block in the original implementation.

Args:
    config ([`EfficientNetConfig`]):
        Model configuration class.
    in_dim (`int`):
        Number of input channels.
    out_dim (`int`):
        Number of output channels.
    stride (`int`):
        Stride size to be used in convolution layers.
    expand_ratio (`int`):
        Expand ratio to set the output dimensions for the expansion and squeeze-excite layers.
    kernel_size (`int`):
        Kernel size for the depthwise convolution layer.
    drop_rate (`float`):
        Dropout rate to be used in the final phase of each block.
    id_skip (`bool`):
        Whether to apply dropout and sum the final hidden states with the input embeddings during the final phase
        of each block. Set to `True` for the first block of each stage.
    adjust_padding (`bool`):
        Whether to apply padding to only right and bottom side of the input kernel before the depthwise convolution
        operation, set to `True` for inputs with odd input sizes.
r   rd   r5   r/   expand_ratior    r   r   ru   c
           	      f  > [         TU ]  5         XPl        U R                  S:g  U l        X%-  n
U R                  (       a  [	        XXS9U l        [        UU R                  (       a  U
OUUUU	S9U l        [        XXR                  S9U l	        [        UU R                  (       a  U
OUUUUUS9U l        g )Nr   )r   rd   r5   r/   )r   rd   r/   r    ru   )r   rd   r   r   )r   rd   r5   r/   r   r   )r3   r4   r   r   rb   	expansionrs   ry   r   squeeze_exciter   
projection)r@   r   rd   r5   r/   r   r    r   r   ru   expand_in_dimrA   s              r   r4   EfficientNetBlock.__init__!  s     	(''1,-;;7mDN 9$(KK=V#)
 =];;
 6$(KK=V
r   rm   rD   c                     UnU R                   S:w  a  U R                  U5      nU R                  U5      nU R                  U5      nU R	                  X!5      nU$ )Nr   )r   r   ry   r   r   )r@   rm   r   s      r   rH   EfficientNetBlock.forwardJ  sY    "
! NN=9M++M: ++M:
Br   )ry   r   r   r   r   r   r   rS   s   @r   r   r     s    4'
"'
 '
 	'

 '
 '
 '
 '
 '
 '
R
U%6%6 
5<< 
 
r   r   c            	       v   ^  \ rS rSrSrS\4U 4S jjr  SS\R                  S\	\
   S\	\
   S\4S	 jjrS
rU =r$ )EfficientNetEncoderiW  z
Forward propagates the embeddings through each EfficientNet block.

Args:
    config ([`EfficientNetConfig`]):
        Model configuration class.
r   c                   >^ ^ [         TT ]  5         UT l        UR                  T l        U 4S jm[	        UR
                  5      n[        U4S jUR                   5       5      nSn/ n[        U5       H  n[        XR
                  U   5      n[        XR                  U   5      nUR                  U   n	UR                  U   n
UR                  U   n[        T" UR                  U   5      5       Hc  nUS:H  nUS:  a  SOU	n	US:  a  UOUnXAR                  ;  nUR                  U-  U-  n[!        UUUU	U
UUUUS9	nUR#                  U5        US-  nMe     M     [$        R&                  " U5      T l        [$        R*                  " W[        US5      SSSS	9T l        [$        R.                  " UR0                  UR2                  UR4                  S
9T l        [8        UR:                     T l        g )Nc                 \   > [        [        R                  " TR                  U -  5      5      $ rF   )r   mathceildepth_coefficient)repeatsr@   s    r   round_repeats3EfficientNetEncoder.__init__.<locals>.round_repeatse  s"    tyy!7!7'!ABCCr   c              3   2   >#    U H  nT" U5      v   M     g 7frF   r_   ).0nr   s     r   	<genexpr>/EfficientNetEncoder.__init__.<locals>.<genexpr>j  s     L3Kaq))3Ks   r   r   )	r   rd   r5   r/   r    r   r   r   ru   i   rf   Frg   rw   )r3   r4   r   r   lenrX   sumnum_block_repeatsranger   rY   strideskernel_sizesexpand_ratiosdepthwise_paddingdrop_connect_rater   appendr   
ModuleListblocksr7   top_convr9   
hidden_dimr:   r;   top_bnr
   r=   top_activation)r@   r   num_base_blocks
num_blockscurr_block_numr   ird   r5   r/   r    r   jr   ru   r   blockr   rA   s   `                @r   r4   EfficientNetEncoder.__init__`  s   !'!9!9	D f001L63K3KLL
'A"6+=+=a+@AF#F,?,?,BCG^^A&F --a0K!//2L=)A)A!)DEFq&!e$%Ev!/7O7O!O"44~E
R	)!!#! +!-'##1
 e$!#' G (8 mmF+		&vt4
 nn**0E0EPVPjPj
 %V%6%67r   rm   output_hidden_statesreturn_dictrD   c                    U(       a  U4OS nU R                    H  nU" U5      nU(       d  M  XA4-  nM     U R                  U5      nU R                  U5      nU R                  U5      nU(       d  [	        S X4 5       5      $ [        UUS9$ )Nc              3   ,   #    U H  oc  M  Uv   M     g 7frF   r_   )r   vs     r   r   .EfficientNetEncoder.forward.<locals>.<genexpr>  s     X$Fq$Fs   	)last_hidden_staterm   )r   r   r   r   tupler   )r@   rm   r   r   all_hidden_statesr   s         r   rH   EfficientNetEncoder.forward  s     1E],$[[E!-0M##!%55! !
 m4M2++M:X]$FXXX-++
 	
r   )r   r   r   r   r   r   )FT)rJ   rK   rL   rM   rN   r   r4   rO   rq   r   r   r   rH   rQ   rR   rS   s   @r   r   r   W  s\    581 58t 05&*	
((
 'tn
 d^	

 
(
 
r   r   c                   N    \ rS rSr% \\S'   SrSr/ rS\	R                  4S jrSrg)	EfficientNetPreTrainedModeli  r   efficientnetrC   modulec                 V   [        U[        R                  [        R                  [        R                  45      (       ak  UR
                  R                  R                  SU R                  R                  S9  UR                  b%  UR                  R                  R                  5         ggg)zInitialize the weightsg        )meanstdN)r#   r   Linearr7   r9   weightdatanormal_r   initializer_ranger0   zero_)r@   r   s     r   _init_weights)EfficientNetPreTrainedModel._init_weights  sv    fryy"))R^^DEE MM&&CT[[5R5R&S{{&  &&( '	 Fr   r_   N)rJ   rK   rL   rM   r   __annotations__base_model_prefixmain_input_name_no_split_modulesr   Moduler   rQ   r_   r   r   r   r     s)    &$O)BII )r   r   c                      ^  \ rS rSrS\4U 4S jjr\   S
S\\R                     S\\
   S\\
   S\\\4   4S jj5       rS	rU =r$ )EfficientNetModeli  r   c                   > [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        UR                  S:X  a%  [        R                  " UR                  SS9U l        OMUR                  S:X  a%  [        R                  " UR                  SS9U l        O[        SUR                   35      eU R                  5         g )Nr   T)	ceil_moder   z2config.pooling must be one of ['mean', 'max'] got )r3   r4   r   r'   r   r   encoderpooling_typer   	AvgPool2dr   pooler	MaxPool2d
ValueErrorpooling	post_initr?   s     r   r4   EfficientNetModel.__init__  s     08*62 &(,,v'8'8DIDK  E),,v'8'8DIDKQRXR`R`Qabcc 	r   rC   r   r   rD   c                    Ub  UOU R                   R                  nUb  UOU R                   R                  nUc  [        S5      eU R	                  U5      nU R                  UUUS9nUS   nU R                  U5      nUR                  UR                  S S 5      nU(       d	  Xg4USS  -   $ [        UUUR                  S9$ )Nz You have to specify pixel_valuesr   r   r   r   r   )r   pooler_outputrm   )r   r   use_return_dictr  r   r   r   reshapeshaper   rm   )r@   rC   r   r   embedding_outputencoder_outputsr   pooled_outputs           r   rH   EfficientNetModel.forward  s     %9$D $++JjJj 	 &1%<k$++B]B]?@@??<8,,!5# ' 
 ,A.$56%--m.A.A"1.EF%58KKK7/')77
 	
r   )r   r   r   r   )NNN)rJ   rK   rL   rM   r   r4   r   r   rO   rq   r   r   r   r   rH   rQ   rR   rS   s   @r   r   r     ss    1 "  59/3&*	"
u001"
 'tn"
 d^	"

 
u>>	?"
 "
r   r   z
    EfficientNet 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   4
S jj5       rS	rU =r$ )"EfficientNetForImageClassificationi  c                   > [         TU ]  U5        UR                  U l        Xl        [	        U5      U l        [        R                  " UR                  S9U l	        U R                  S:  a+  [        R                  " UR                  U R                  5      O[        R                  " 5       U l        U R                  5         g )Nr   r   )r3   r4   
num_labelsr   r   r   r   r   dropout_rater   r   r   Identity
classifierr  r?   s     r   r4   +EfficientNetForImageClassification.__init__  s      ++-f5zzF$7$78KO??]^K^"))F$5$5tGdfdododq 	r   rC   labelsr   r   rD   c                 T   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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
$ [#        UUUR$                  S	9$ )
ab  
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 regression loss is computed (Mean-Square loss), If
    `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
Nr  r   
regressionsingle_label_classificationmulti_label_classificationr   )losslogitsrm   )r   r	  r   r  r   r  problem_typer  dtyperO   longr   r   r   r   viewr   r   rm   )r@   rC   r  r   r   outputsr  r   r  loss_fctoutputs              r   rH   *EfficientNetForImageClassification.forward  s    &1%<k$++B]B]##Lit#u1<--'!*]3/{{''/??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)-)9TGf$EvE3!//
 	
r   )r  r   r   r   r  )NNNN)rJ   rK   rL   rM   r4   r   r   rO   rq   
LongTensorr   r   r   r   rH   rQ   rR   rS   s   @r   r  r    s    
  59-1/3&*4
u0014
 ))*4
 'tn	4

 d^4
 
u::	;4
 4
r   r  )r  r   r   )T)/rN   r   typingr   r   rO   torch.utils.checkpointr   torch.nnr   r   r   activationsr
   modeling_outputsr   r   r   modeling_utilsr   utilsr   r   configuration_efficientnetr   
get_loggerrJ   loggerr   r   r   r   r%   r   r'   r7   rU   rb   rs   r   r   r   r   r   r   r  __all__r_   r   r   <module>r5     so   "  "    A A ! 
 . , : 
		H	%, C @U3:. @ @(RYY 2
")) 
4 4$ $N$RYY $N")) BN		 NbW
")) W
t )/ ) )  5
3 5
 5
p B
)D B
B
J er   