§
    ‚Štj¬O  ã                   ó’  — d Z ddlZddlZddl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dedefd„Zd,deez  defd„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 EfficientNet model.é    N)Únné   )Úinitialization)ÚACT2FN)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚEfficientNetConfigÚconfigÚnum_channelsc                 ó°   — | j         }|| j        z  }t          |t          ||dz  z   ¦  «        |z  |z  ¦  «        }|d|z  k     r||z  }t          |¦  «        S )z<
    Round number of filters based on depth multiplier.
    é   gÍÌÌÌÌÌì?)Údepth_divisorÚwidth_coefficientÚmaxÚint)r   r   ÚdivisorÚnew_dims       út/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/efficientnet/modeling_efficientnet.pyÚround_filtersr   $   sk   € ð Ô"€GØ�FÔ,Ñ,€LÝ�'�3˜|¨g¸©kÑ9Ñ:Ô:¸gÑEÈÑOÑPÔP€Gð ��|Ñ#Ò#Ð#Ø�7Ñˆåˆw‰<Œ<Ðó    TÚkernel_sizeÚadjustc                 óè   — t          | t          ¦  «        r| | f} | d         dz  | d         dz  f}|r$|d         dz
  |d         |d         dz
  |d         fS |d         |d         |d         |d         fS )aJ  
    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!   3   s‹   € õ �+�sÑ#Ô#ð 1Ø" KÐ0ˆà˜1Œ~ Ñ" K°¤N°aÑ$7Ð8€GØð @Ø˜”
˜Q‘ ¨¤
¨G°A¬J¸©N¸GÀA¼JÐGÐGà˜”
˜G AœJ¨°¬
°G¸A´JÐ?Ð?r   c                   óL   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚEfficientNetEmbeddingszL
    A module that corresponds to the stem module of the original work.
    r   c                 ó|  •— t          ¦   «                              ¦   «          t          |d¦  «        | _        t	          j        d¬¦  «        | _        t	          j        |j        | j        dddd¬¦  «        | _	        t	          j
        | j        |j        |j        ¬	¦  «        | _        t          |j                 | _        d S )
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   r/   zEfficientNetEmbeddings.__init__L   s¡   ø€ Ý‰Œ×ÒÑÔÐå$ V¨RÑ0Ô0ˆŒÝ”|¨LÐ9Ñ9Ô9ˆŒÝœ9ØÔ ¤¸1ÀQÐPWÐ^cð
ñ 
ô 
ˆÔõ œ¨¬¸&Ô:OÐZ`ÔZtÐuÑuÔuˆŒÝ  Ô!2Ô3ˆŒˆˆr   Úpixel_valuesÚreturnc                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ©N)r'   r3   r7   r9   )r;   r=   Úfeaturess      r   ÚforwardzEfficientNetEmbeddings.forwardW   sM   € Ø—<’< Ñ-Ô-ˆØ×#Ò# HÑ-Ô-ˆØ—>’> (Ñ+Ô+ˆØ—?’? 8Ñ,Ô,ˆàˆr   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r/   ÚtorchÚTensorrB   Ú__classcell__©r<   s   @r   r#   r#   G   su   ø€ € € € € ðð ð	4Ð1ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð E¤Lð °U´\ð ð ð ð ð ð ð ð r   r#   c                   ó.   ‡ — e Zd Z	 	 	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚEfficientNetDepthwiseConv2dr   r   r   TÚzerosc	                 óf   •— ||z  }	t          ¦   «                              ||	|||||||¬¦	  «	         d S )N)	Úin_channelsÚout_channelsr   r*   r'   ÚdilationÚgroupsr+   Úpadding_mode)r.   r/   )r;   rO   Údepth_multiplierr   r*   r'   rQ   r+   rS   rP   r<   s             €r   r/   z$EfficientNetDepthwiseConv2d.__init__a   sV   ø€ ð #Ð%5Ñ5ˆÝ‰Œ×ÒØ#Ø%Ø#ØØØØØØ%ð 	ñ 
	
ô 
	
ð 
	
ð 
	
ð 
	
r   )r   r   r   r   r   TrM   )rC   rD   rE   r/   rI   rJ   s   @r   rL   rL   `   sT   ø€ € € € € ð ØØØØØØð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rL   c                   óX   ‡ — e Zd ZdZdedededefˆ fd„Zdej        dej	        fd	„Z
ˆ xZS )
ÚEfficientNetExpansionLayerz_
    This corresponds to the expansion phase of each block in the original implementation.
    r   Úin_dimr0   r*   c                 óò   •— t          ¦   «                              ¦   «          t          j        ||ddd¬¦  «        | _        t          j        ||j        ¬¦  «        | _        t          |j	                 | _
        d S )Nr   ÚsameF©rO   rP   r   r'   r+   )Únum_featuresr,   )r.   r/   r   r2   Úexpand_convr4   r5   Ú	expand_bnr   r8   Ú
expand_act)r;   r   rW   r0   r*   r<   s        €r   r/   z#EfficientNetExpansionLayer.__init__   so   ø€ Ý‰Œ×ÒÑÔÐÝœ9ØØ ØØØð
ñ 
ô 
ˆÔõ œ°WÀ&ÔBWÐXÑXÔXˆŒÝ  Ô!2Ô3ˆŒˆˆr   Úhidden_statesr>   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r@   )r\   r]   r^   ©r;   r_   s     r   rB   z"EfficientNetExpansionLayer.forward‹   s=   € à×(Ò(¨Ñ7Ô7ˆØŸš }Ñ5Ô5ˆØŸš¨Ñ6Ô6ˆàÐr   )rC   rD   rE   rF   r   r   r/   rG   ÚFloatTensorrH   rB   rI   rJ   s   @r   rV   rV   z   sŒ   ø€ € € € € ðð ð
4Ð1ð 
4¸3ð 
4Èð 
4ÐVYð 
4ð 
4ð 
4ð 
4ð 
4ð 
4ð UÔ%6ð ¸5¼<ð ð ð ð ð ð ð ð r   rV   c            
       ó\   ‡ — e Zd ZdZdededededef
ˆ fd„Zdej	        d	ej
        fd
„Zˆ xZS )ÚEfficientNetDepthwiseLayerzk
    This corresponds to the depthwise convolution phase of each block in the original implementation.
    r   rW   r*   r   Úadjust_paddingc                 óv  •— t          ¦   «                              ¦   «          || _        | j        dk    rdnd}t          ||¬¦  «        }t	          j        |¬¦  «        | _        t          ||||d¬¦  «        | _        t	          j	        ||j
        |j        ¬¦  «        | _        t          |j                 | _        d S )	Nr   r(   rY   )r   r&   Fr)   ©r[   r,   r-   )r.   r/   r*   r!   r   r1   Údepthwise_conv_padrL   Údepthwise_convr4   r5   r6   Údepthwise_normr   r8   Údepthwise_act)	r;   r   rW   r*   r   re   Úconv_padr'   r<   s	           €r   r/   z#EfficientNetDepthwiseLayer.__init__™   sÁ   ø€ õ 	‰Œ×ÒÑÔÐØˆŒØ"œk¨QÒ.Ð.�7�7°FˆÝ˜k°.ÐAÑAÔAˆå"$¤,°wÐ"?Ñ"?Ô"?ˆÔÝ9Ø °FÀHÐSXð
ñ 
ô 
ˆÔõ !œnØ VÔ%:ÀVÔE_ð
ñ 
ô 
ˆÔõ $ FÔ$5Ô6ˆÔÐÐr   r_   r>   c                 óÄ   — | j         dk    r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S )Nr   )r*   rh   ri   rj   rk   ra   s     r   rB   z"EfficientNetDepthwiseLayer.forward¯   sa   € àŒ;˜!ÒÐØ ×3Ò3°MÑBÔBˆMà×+Ò+¨MÑ:Ô:ˆØ×+Ò+¨MÑ:Ô:ˆØ×*Ò*¨=Ñ9Ô9ˆàÐr   ©rC   rD   rE   rF   r   r   Úboolr/   rG   rb   rH   rB   rI   rJ   s   @r   rd   rd   ”   sž   ø€ € € € € ðð ð7à"ð7ð ð7ð ð	7ð
 ð7ð ð7ð 7ð 7ð 7ð 7ð 7ð,	 UÔ%6ð 	¸5¼<ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rd   c            	       óZ   ‡ — e Zd ZdZddedededefˆ fd„Zdej	        d	ej
        fd
„Zˆ xZS )ÚEfficientNetSqueezeExciteLayerzl
    This corresponds to the Squeeze and Excitement phase of each block in the original implementation.
    Fr   rW   Ú
expand_dimÚexpandc                 óà  •— t          ¦   «                              ¦   «          |r|n|| _        t          dt	          ||j        z  ¦  «        ¦  «        | _        t          j        d¬¦  «        | _	        t          j
        | j        | j        dd¬¦  «        | _        t          j
        | j        | j        dd¬¦  «        | _        t          |j                 | _        t          j        ¦   «         | _        d S )Nr   )Úoutput_sizerY   )rO   rP   r   r'   )r.   r/   Údimr   r   Úsqueeze_expansion_ratioÚdim_ser   ÚAdaptiveAvgPool2dÚsqueezer2   Úreducers   r   r8   Ú
act_reduceÚSigmoidÚ
act_expand)r;   r   rW   rr   rs   r<   s        €r   r/   z'EfficientNetSqueezeExciteLayer.__init__À   sÓ   ø€ Ý‰Œ×ÒÑÔÐØ!'Ð3�:�:¨VˆŒÝ˜!�S ¨&Ô*HÑ!HÑIÔIÑJÔJˆŒåÔ+¸Ð:Ñ:Ô:ˆŒÝ”iØœØœØØð	
ñ 
ô 
ˆŒõ ”iØœØœØØð	
ñ 
ô 
ˆŒõ ! Ô!2Ô3ˆŒÝœ*™,œ,ˆŒˆˆr   r_   r>   c                 ó  — |}|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t          j        ||¦  «        }|S r@   )rz   r{   r|   rs   r~   rG   Úmul)r;   r_   Úinputss      r   rB   z&EfficientNetSqueezeExciteLayer.forwardÕ   ss   € ØˆØŸš ]Ñ3Ô3ˆØŸš MÑ2Ô2ˆØŸš¨Ñ6Ô6ˆàŸš MÑ2Ô2ˆØŸš¨Ñ6Ô6ˆÝœ	 &¨-Ñ8Ô8ˆàÐr   )Frn   rJ   s   @r   rq   rq   »   s‘   ø€ € € € € ðð ð'ð 'Ð1ð '¸3ð 'ÈCð 'ÐY]ð 'ð 'ð 'ð 'ð 'ð 'ð*
 UÔ%6ð 
¸5¼<ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rq   c                   ón   ‡ — e Zd ZdZdedededededefˆ fd„Zd	e	j
        d
e	j
        de	j        fd„Zˆ xZS )ÚEfficientNetFinalBlockLayerz[
    This corresponds to the final phase of each block in the original implementation.
    r   rW   r0   r*   Ú	drop_rateÚid_skipc                 ó   •— t          ¦   «                              ¦   «          |dk    o| | _        t          j        ||ddd¬¦  «        | _        t          j        ||j        |j        ¬¦  «        | _	        t          j
        |¬¦  «        | _        d S )Nr   rY   FrZ   rg   ©Úp)r.   r/   Úapply_dropoutr   r2   Úproject_convr4   r5   r6   Ú
project_bnÚDropoutÚdropout)r;   r   rW   r0   r*   r„   r…   r<   s          €r   r/   z$EfficientNetFinalBlockLayer.__init__ç   s—   ø€ õ 	‰Œ×ÒÑÔÐØ# qš[Ð8°¨[ˆÔÝœIØØ ØØØð
ñ 
ô 
ˆÔõ œ.Ø  fÔ&;ÀfÔF`ð
ñ 
ô 
ˆŒõ ”z IÐ.Ñ.Ô.ˆŒˆˆr   Ú
embeddingsr_   r>   c                 óœ   — |                       |¦  «        }|                      |¦  «        }| j        r|                      |¦  «        }||z   }|S r@   )rŠ   r‹   r‰   r�   )r;   rŽ   r_   s      r   rB   z#EfficientNetFinalBlockLayer.forwardø   sR   € Ø×)Ò)¨-Ñ8Ô8ˆØŸš¨Ñ6Ô6ˆàÔð 	7Ø ŸLšL¨Ñ7Ô7ˆMØ)¨JÑ6ˆMàÐr   ©rC   rD   rE   rF   r   r   Úfloatro   r/   rG   rb   rH   rB   rI   rJ   s   @r   rƒ   rƒ   â   sª   ø€ € € € € ðð ð/Ø(ð/Ø25ð/Ø@Cð/ØMPð/Ø]bð/Ømqð/ð /ð /ð /ð /ð /ð" %Ô"3ð ÀEÔDUð ÐZ_ÔZfð ð ð ð ð ð ð ð r   rƒ   c                   ól   ‡ — e Zd ZdZdededededededed	ed
efˆ fd„Zde	j
        de	j        fd„Zˆ xZS )ÚEfficientNetBlocka�  
    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   rW   r0   r*   Úexpand_ratior   r„   r…   re   c
                 ó‚  •— t          ¦   «                              ¦   «          || _        | j        dk    | _        ||z  }
| j        rt	          |||
|¬¦  «        | _        t          || j        r|
n||||	¬¦  «        | _        t          |||
| j        ¬¦  «        | _	        t          || j        r|
n|||||¬¦  «        | _        d S )Nr   )r   rW   r0   r*   )r   rW   r*   r   re   )r   rW   rr   rs   )r   rW   r0   r*   r„   r…   )r.   r/   r”   rs   rV   Ú	expansionrd   ri   rq   Úsqueeze_exciterƒ   Ú
projection)r;   r   rW   r0   r*   r”   r   r„   r…   re   Úexpand_in_dimr<   s              €r   r/   zEfficientNetBlock.__init__  sõ   ø€ õ 	‰Œ×ÒÑÔÐØ(ˆÔØÔ'¨1Ò,ˆŒØ Ñ-ˆàŒ;ð 	Ý7Ø f°mÈFðñ ô ˆDŒNõ 9ØØ$(¤KÐ;�=�=°VØØ#Ø)ð
ñ 
ô 
ˆÔõ =Ø &°]È4Ì;ð
ñ 
ô 
ˆÔõ 6ØØ$(¤KÐ;�=�=°VØØØØð
ñ 
ô 
ˆŒˆˆr   r_   r>   c                 óÊ   — |}| j         dk    r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }|S )Nr   )r”   r–   ri   r—   r˜   )r;   r_   rŽ   s      r   rB   zEfficientNetBlock.forwardG  sg   € Ø"ˆ
àÔ Ò!Ð!Ø ŸNšN¨=Ñ9Ô9ˆMØ×+Ò+¨MÑ:Ô:ˆð ×+Ò+¨MÑ:Ô:ˆØŸš¨
°MÑBÔBˆØÐr   r�   rJ   s   @r   r“   r“     sÇ   ø€ € € € € ðð ð4'
à"ð'
ð ð'
ð ð	'
ð
 ð'
ð ð'
ð ð'
ð ð'
ð ð'
ð ð'
ð '
ð '
ð '
ð '
ð '
ðR
 UÔ%6ð 
¸5¼<ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   r“   c            	       ó\   ‡ — e Zd ZdZdefˆ fd„Z	 	 ddej        dedz  d	edz  d
e	fd„Z
ˆ xZS )ÚEfficientNetEncoderz§
    Forward propagates the embeddings through each EfficientNet block.

    Args:
        config ([`EfficientNetConfig`]):
            Model configuration class.
    r   c                 óè  •‡ ‡— t          ¦   «                              ¦   «          |‰ _        |j        ‰ _        ˆ fd„Št	          |j        ¦  «        }t          ˆfd„|j        D ¦   «         ¦  «        }d}g }t          |¦  «        D ]ç}t          ||j        |         ¦  «        }t          ||j
        |         ¦  «        }|j        |         }	|j        |         }
|j        |         }t           ‰|j        |         ¦  «        ¦  «        D ]d}|dk    }|dk    rdn|	}	|dk    r|n|}||j        v}|j        |z  |z  }t!          ||||	|
||||¬¦	  «	        }|                     |¦  «         |dz  }ŒeŒèt%          j        |¦  «        ‰ _        t%          j        |t          |d¦  «        ddd¬	¦  «        ‰ _        t%          j        |j        |j        |j        ¬
¦  «        ‰ _        t8          |j                 ‰ _        d S )Nc                 óV   •— t          t          j        ‰j        | z  ¦  «        ¦  «        S r@   )r   ÚmathÚceilÚdepth_coefficient)Úrepeatsr;   s    €r   Úround_repeatsz3EfficientNetEncoder.__init__.<locals>.round_repeatsb  s#   ø€ å•t”y Ô!7¸'Ñ!AÑBÔBÑCÔCÐCr   c              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r@   © )Ú.0Únr£   s     €r   ú	<genexpr>z/EfficientNetEncoder.__init__.<locals>.<genexpr>g  s-   øè è € ÐLÐL¨a˜˜ qÑ)Ô)ÐLÐLÐLÐLÐLÐLr   r   r   )	r   rW   r0   r*   r   r”   r„   r…   re   i   rY   FrZ   rg   )r.   r/   r   r¡   ÚlenrO   ÚsumÚnum_block_repeatsÚranger   rP   ÚstridesÚkernel_sizesÚexpand_ratiosÚdepthwise_paddingÚdrop_connect_rater“   Úappendr   Ú
ModuleListÚblocksr2   Útop_convr4   Ú
hidden_dimr5   r6   Útop_bnr   r8   Útop_activation)r;   r   Únum_base_blocksÚ
num_blocksÚcurr_block_numr´   ÚirW   r0   r*   r   r”   Újr…   re   r„   Úblockr£   r<   s   `                @€r   r/   zEfficientNetEncoder.__init__]  sE  øøø€ Ý‰Œ×ÒÑÔÐØˆŒØ!'Ô!9ˆÔð	Dð 	Dð 	Dð 	Dð 	Dõ ˜fÔ0Ñ1Ô1ˆÝÐLÐLÐLÐL°6Ô3KÐLÑLÔLÑLÔLˆ
àˆØˆÝ�Ñ'Ô'ð 	$ð 	$ˆAÝ" 6¨6Ô+=¸aÔ+@ÑAÔAˆFÝ# F¨FÔ,?ÀÔ,BÑCÔCˆGØ”^ AÔ&ˆFØ Ô-¨aÔ0ˆKØ!Ô/°Ô2ˆLå˜=˜=¨Ô)AÀ!Ô)DÑEÔEÑFÔFð $ð $�Ø˜qš&�Ø !še˜e˜˜¨�Ø$%¨¢E E˜˜¨v�Ø!/°vÔ7OÐ!O�Ø"Ô4°~ÑEÈ
ÑR�	å)Ø!Ø!Ø#Ø!Ø +Ø!-Ø'Ø#Ø#1ð
ñ 
ô 
�ð —’˜eÑ$Ô$Ð$Ø !Ñ#��ð'$õ* ”m FÑ+Ô+ˆŒÝœ	ØÝ& v¨tÑ4Ô4ØØØð
ñ 
ô 
ˆŒõ ”nØÔ*°Ô0EÐPVÔPjð
ñ 
ô 
ˆŒõ % VÔ%6Ô7ˆÔÐÐr   FTr_   Úoutput_hidden_statesNÚreturn_dictr>   c                 ó$  — |r|fnd }| j         D ]} ||¦  «        }|r||fz  }Œ|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|st	          d„ ||fD ¦   «         ¦  «        S t          ||¬¦  «        S )Nc              3   ó   K  — | ]}|®|V — Œ	d S r@   r¥   )r¦   Úvs     r   r¨   z.EfficientNetEncoder.forward.<locals>.<genexpr>¦  s"   è è € ÐXÐX˜qÈ!È-˜È-È-È-È-ÐXÐXr   )Úlast_hidden_stater_   )r´   rµ   r·   r¸   Útupler   )r;   r_   r¿   rÀ   Úall_hidden_statesr¾   s         r   rB   zEfficientNetEncoder.forward”  sÍ   € ð 1EÐN˜]Ð,Ð,È$Ðà”[ð 	6ð 	6ˆEØ!˜E -Ñ0Ô0ˆMØ#ð 6Ø! mÐ%5Ñ5Ð!øàŸš mÑ4Ô4ˆØŸš MÑ2Ô2ˆØ×+Ò+¨MÑ:Ô:ˆàð 	YÝÐXÐX ]Ð4EÐ$FÐXÑXÔXÑXÔXÐXå-Ø+Ø+ð
ñ 
ô 
ð 	
r   )FT)rC   rD   rE   rF   r   r/   rG   rb   ro   r   rB   rI   rJ   s   @r   rœ   rœ   T  s¢   ø€ € € € € ðð ð58Ð1ð 58ð 58ð 58ð 58ð 58ð 58ðt -2Ø#'ð	
ð 
àÔ(ð
ð # T™kð
ð ˜D‘[ð	
ð
 
(ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rœ   c                   óv   ‡ — e Zd ZU eed<   dZdZdZdgZ e	j
        ¦   «         dej        fˆ fd„¦   «         Zˆ xZS )ÚEfficientNetPreTrainedModelr   Úefficientnetr=   )Úimager“   Úmodulec                 óø  •— t          ¦   «                              |¦  «         t          |t          j        t          j        t          j        f¦  «        r¤t          j        |j	        d| j
        j        ¬¦  «         |j        �t          j        |j        ¦  «         t          |dd¦  «        �Ot          j        |j        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         dS dS dS )zInitialize the weightsg        )ÚmeanÚstdNÚrunning_mean)r.   Ú_init_weightsr   r   ÚLinearr2   r4   ÚinitÚnormal_Úweightr   Úinitializer_ranger+   Úzeros_ÚgetattrrÏ   Úones_Úrunning_varÚnum_batches_tracked)r;   rË   r<   s     €r   rÐ   z)EfficientNetPreTrainedModel._init_weights¶  sØ   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)µR´^ÐDÑEÔEð 	8ÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ý�v˜~¨tÑ4Ô4Ð@Ý”˜FÔ/Ñ0Ô0Ð0Ý”
˜6Ô-Ñ.Ô.Ð.Ý”˜FÔ6Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8ð AÐ@r   )rC   rD   rE   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesrG   Úno_gradr   ÚModulerÐ   rI   rJ   s   @r   rÈ   rÈ   ®  s€   ø€ € € € € € àÐÐÑØ&ÐØ$€OØ!ÐØ,Ð-Ðà€U„]�_„_ð
8 B¤Ið 
8ð 
8ð 
8ð 
8ð 
8ñ „_ð
8ð 
8ð 
8ð 
8ð 
8r   rÈ   c                   óv   ‡ — e Zd Zdefˆ fd„Ze	 	 	 d	dej        dz  dedz  dedz  de	e
z  fd„¦   «         Zˆ xZS )
ÚEfficientNetModelr   c                 ó®  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |j        dk    r!t          j	        |j
        d¬¦  «        | _        nC|j        dk    r!t          j        |j
        d¬¦  «        | _        nt          d|j        › �¦  «        ‚|                      ¦   «          d S )NrÍ   T)Ú	ceil_moder   z2config.pooling must be one of ['mean', 'max'] got )r.   r/   r   r#   rŽ   rœ   ÚencoderÚpooling_typer   Ú	AvgPool2dr¶   ÚpoolerÚ	MaxPool2dÚ
ValueErrorÚpoolingÚ	post_initr:   s     €r   r/   zEfficientNetModel.__init__Æ  sÇ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ0°Ñ8Ô8ˆŒÝ*¨6Ñ2Ô2ˆŒð Ô &Ò(Ð(Ýœ, vÔ'8ÀDÐIÑIÔIˆDŒKˆKØÔ  EÒ)Ð)Ýœ, vÔ'8ÀDÐIÑIÔIˆDŒKˆKåÐbÐRXÔR`ÐbÐbÑcÔcÐcð 	�ŠÑÔÐÐÐr   Nr=   r¿   rÀ   r>   c                 óŒ  — |�|n| j         j        }|�|n| j         j        }|€t          d¦  «        ‚|                      |¦  «        }|                      |||¬¦  «        }|d         }|                      |¦  «        }|                     |j        d d…         ¦  «        }|s||f|dd …         z   S t          |||j
        ¬¦  «        S )Nz You have to specify pixel_values©r¿   rÀ   r   r   r   )rÄ   Úpooler_outputr_   )r   r¿   rÀ   rë   rŽ   ræ   ré   ÚreshapeÚshaper   r_   )	r;   r=   r¿   rÀ   ÚkwargsÚembedding_outputÚencoder_outputsrÄ   Úpooled_outputs	            r   rB   zEfficientNetModel.forward×  sü   € ð %9Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐÝÐ?Ñ@Ô@Ð@àŸ?š?¨<Ñ8Ô8ÐàŸ,š,ØØ!5Ø#ð 'ñ 
ô 
ˆð ,¨AÔ.ÐØŸšÐ$5Ñ6Ô6ˆà%×-Ò-¨mÔ.AÀ"À1À"Ô.EÑFÔFˆàð 	LØ% }Ð5¸ÈÈÈÔ8KÑKÐKå7Ø/Ø'Ø)Ô7ð
ñ 
ô 
ð 	
r   )NNN)rC   rD   rE   r   r/   r   rG   rb   ro   rÅ   r   rB   rI   rJ   s   @r   rã   rã   Ä  s±   ø€ € € € € ðÐ1ð ð ð ð ð ð ð" ð 26Ø,0Ø#'ð	#
ð #
àÔ'¨$Ñ.ð#
ð # T™kð#
ð ˜D‘[ð	#
ð 
Ð9Ñ	9ð#
ð #
ð #
ñ „^ð#
ð #
ð #
ð #
ð #
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                   ó†   ‡ — 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	e
z  f
d„¦   «         Zˆ xZS )
Ú"EfficientNetForImageClassificationc                 ó‚  •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        t          j        |j        ¬¦  «        | _	        | j        dk    rt          j
        |j        | j        ¦  «        nt          j        ¦   «         | _        |                      ¦   «          d S )Nr‡   r   )r.   r/   Ú
num_labelsr   rã   rÉ   r   rŒ   Údropout_rater�   rÑ   r¶   ÚIdentityÚ
classifierrí   r:   s     €r   r/   z+EfficientNetForImageClassification.__init__  sŸ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒÝ-¨fÑ5Ô5ˆÔå”z FÔ$7Ð8Ñ8Ô8ˆŒØKOÌ?Ð]^ÒK^ÐK^�"œ) FÔ$5°t´ÑGÔGÐGÕdfÔdoÑdqÔdqˆŒð 	�ŠÑÔÐÐÐr   Nr=   Úlabelsr¿   rÀ   r>   c                 ój  — |�|n| j         j        }|                      |||¬¦  «        }|r|j        n|d         }|                      |¦  «        }|                      |¦  «        }d}	|�|                      ||| j         ¦  «        }	|s|f|dd…         z   }
|	�|	f|
z   n|
S t          |	||j        ¬¦  «        S )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 regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nrï   r   r   )ÚlossÚlogitsr_   )	r   rÀ   rÉ   rð   r�   rþ   Úloss_functionr	   r_   )r;   r=   rÿ   r¿   rÀ   ró   Úoutputsrö   r  r  Úoutputs              r   rB   z*EfficientNetForImageClassification.forward  sæ   € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà×#Ò# LÐG[ÐitÐ#ÑuÔuˆà1<ÐL˜Ô-Ð-À'È!Ä*ˆØŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå3ØØØ!Ô/ð
ñ 
ô 
ð 	
r   )NNNN)rC   rD   rE   r/   r   rG   rb   Ú
LongTensorro   rÅ   r	   rB   rI   rJ   s   @r   rù   rù   þ  s¹   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð ð 26Ø*.Ø,0Ø#'ð"
ð "
àÔ'¨$Ñ.ð"
ð Ô  4Ñ'ð"
ð # T™kð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ð"
ð "
ð "
ñ „^ð"
ð "
ð "
ð "
ð "
r   rù   )rù   rã   rÈ   )T)*rF   rŸ   rG   r   Ú r   rÒ   Úactivationsr   Úmodeling_outputsr   r   r	   Úmodeling_utilsr
   Úutilsr   r   Úconfiguration_efficientnetr   Ú
get_loggerrC   Úloggerr   r   rÅ   ro   r!   rá   r#   r2   rL   rV   rd   rq   rƒ   r“   rœ   rÈ   rã   rù   Ú__all__r¥   r   r   ú<module>r     st  ðð "Ð !à €€€à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð
 .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø :Ð :Ð :Ð :Ð :Ð :ð 
ˆÔ	˜HÑ	%Ô	%€ðÐ,ð ¸Cð ð ð ð ð@ð @˜S 5™[ð @°$ð @ð @ð @ð @ð(ð ð ð ð ˜RœYñ ô ð ð2
ð 
ð 
ð 
ð 
 "¤)ñ 
ô 
ð 
ð4ð ð ð ð  ¤ñ ô ð ð4$ð $ð $ð $ð $ ¤ñ $ô $ð $ðN$ð $ð $ð $ð $ R¤Yñ $ô $ð $ðNð ð ð ð  "¤)ñ ô ð ðBNð Nð Nð Nð N˜œ	ñ Nô Nð NðbW
ð W
ð W
ð W
ð W
˜"œ)ñ W
ô W
ð W
ðt ð8ð 8ð 8ð 8ð 8 /ñ 8ô 8ñ „ð8ð* ð6
ð 6
ð 6
ð 6
ð 6
Ð3ñ 6
ô 6
ñ „ð6
ðr €ððñ ô ð0
ð 0
ð 0
ð 0
ð 0
Ð)Dñ 0
ô 0
ñô ð0
ðf eÐ
dÐ
d€€€r   