§
    ‚Štjÿb  ã                   óp  — d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
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 ed¬¦  «        e G d„ d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! 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' ed-¬¦  «         G d.„ d/e%¦  «        ¦   «         Z(g d0¢Z)dS )1zPyTorch LeViT model.é    N)Ú	dataclass)Únné   )Úinitialization)ÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttentionÚModelOutput)ÚPreTrainedModel)Úauto_docstringÚloggingé   )ÚLevitConfigzD
    Output type of [`LevitForImageClassificationWithTeacher`].
    )Úcustom_introc                   ó˜   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
eej                 dz  ed<   dS )Ú,LevitForImageClassificationWithTeacherOutputan  
    logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
        Prediction scores as the average of the `cls_logits` and `distillation_logits`.
    cls_logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
        Prediction scores of the classification head (i.e. the linear layer on top of the final hidden state of the
        class token).
    distillation_logits (`torch.FloatTensor` of shape `(batch_size, config.num_labels)`):
        Prediction scores of the distillation head (i.e. the linear layer on top of the final hidden state of the
        distillation token).
    NÚlogitsÚ
cls_logitsÚdistillation_logitsÚhidden_states)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r   r   Útuple© ó    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/levit/modeling_levit.pyr   r   %   s„   € € € € € € ð	ð 	ð (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ð9Ð9r    r   c                   ó,   ‡ — e Zd ZdZ	 dˆ fd„	Zd„ Zˆ xZS )ÚLevitConvEmbeddingsz[
    LeViT Conv Embeddings with Batch Norm, used in the initial patch embedding layer.
    r   c	           
      ó¼   •— t          ¦   «                              ¦   «          t          j        |||||||d¬¦  «        | _        t          j        |¦  «        | _        d S )NF)ÚdilationÚgroupsÚbias)ÚsuperÚ__init__r   ÚConv2dÚconvolutionÚBatchNorm2dÚ
batch_norm)
ÚselfÚin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingr%   r&   Úbn_weight_initÚ	__class__s
            €r!   r)   zLevitConvEmbeddings.__init__B   s^   ø€ õ 	‰Œ×ÒÑÔÐÝœ9Ø˜ {°F¸GÈhÐ_eÐlqð
ñ 
ô 
ˆÔõ œ.¨Ñ6Ô6ˆŒˆˆr    c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S ©N)r+   r-   )r.   Ú
embeddingss     r!   ÚforwardzLevitConvEmbeddings.forwardK   s,   € Ø×%Ò% jÑ1Ô1ˆ
Ø—_’_ ZÑ0Ô0ˆ
ØÐr    )r   r   r   ©r   r   r   r   r)   r9   Ú__classcell__©r5   s   @r!   r#   r#   =   s]   ø€ € € € € ðð ð
 mnð7ð 7ð 7ð 7ð 7ð 7ðð ð ð ð ð ð r    r#   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚLevitPatchEmbeddingsz�
    LeViT patch embeddings, for final embeddings to be passed to transformer blocks. It consists of multiple
    `LevitConvEmbeddings`.
    c                 óð  •— t          ¦   «                              ¦   «          t          |j        |j        d         dz  |j        |j        |j        ¦  «        | _        t          j
        ¦   «         | _        t          |j        d         dz  |j        d         dz  |j        |j        |j        ¦  «        | _        t          j
        ¦   «         | _        t          |j        d         dz  |j        d         dz  |j        |j        |j        ¦  «        | _        t          j
        ¦   «         | _        t          |j        d         dz  |j        d         |j        |j        |j        ¦  «        | _        |j        | _        d S )Nr   é   é   é   )r(   r)   r#   Únum_channelsÚhidden_sizesr1   r2   r3   Úembedding_layer_1r   Ú	HardswishÚactivation_layer_1Úembedding_layer_2Úactivation_layer_2Úembedding_layer_3Úactivation_layer_3Úembedding_layer_4©r.   Úconfigr5   s     €r!   r)   zLevitPatchEmbeddings.__init__W   sU  ø€ Ý‰Œ×ÒÑÔÐÝ!4ØÔ Ô!4°QÔ!7¸1Ñ!<¸fÔ>PÐRXÔR_ÐagÔaoñ"
ô "
ˆÔõ #%¤,¡.¤.ˆÔå!4ØÔ Ô" aÑ'¨Ô)<¸QÔ)?À1Ñ)DÀfÔFXÐZ`ÔZgÐioÔiwñ"
ô "
ˆÔõ #%¤,¡.¤.ˆÔå!4ØÔ Ô" aÑ'¨Ô)<¸QÔ)?À1Ñ)DÀfÔFXÐZ`ÔZgÐioÔiwñ"
ô "
ˆÔõ #%¤,¡.¤.ˆÔå!4ØÔ Ô" aÑ'¨Ô)<¸QÔ)?ÀÔASÐU[ÔUbÐdjÔdrñ"
ô "
ˆÔð #Ô/ˆÔÐÐr    c                 óÈ  — |j         d         }|| j        k    rt          d¦  «        ‚|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|  	                    |¦  «        }| 
                    d¦  «                             dd¦  «        S )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.rB   )ÚshaperC   Ú
ValueErrorrE   rG   rH   rI   rJ   rK   rL   ÚflattenÚ	transpose)r.   Úpixel_valuesrC   r8   s       r!   r9   zLevitPatchEmbeddings.forwardm   sÝ   € Ø#Ô)¨!Ô,ˆØ˜4Ô,Ò,Ð,ÝØwñô ð ð ×+Ò+¨LÑ9Ô9ˆ
Ø×,Ò,¨ZÑ8Ô8ˆ
Ø×+Ò+¨JÑ7Ô7ˆ
Ø×,Ò,¨ZÑ8Ô8ˆ
Ø×+Ò+¨JÑ7Ô7ˆ
Ø×,Ò,¨ZÑ8Ô8ˆ
Ø×+Ò+¨JÑ7Ô7ˆ
Ø×!Ò! !Ñ$Ô$×.Ò.¨q°!Ñ4Ô4Ð4r    r:   r<   s   @r!   r>   r>   Q   sQ   ø€ € € € € ðð ð
0ð 0ð 0ð 0ð 0ð,5ð 5ð 5ð 5ð 5ð 5ð 5r    r>   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚMLPLayerWithBNr   c                 ó²   •— t          ¦   «                              ¦   «          t          j        ||d¬¦  «        | _        t          j        |¦  «        | _        d S )NF)Úin_featuresÚout_featuresr'   )r(   r)   r   ÚLinearÚlinearÚBatchNorm1dr-   )r.   Ú	input_dimÚ
output_dimr4   r5   s       €r!   r)   zMLPLayerWithBN.__init__~   sG   ø€ Ý‰Œ×ÒÑÔÐÝ”i¨IÀJÐUZÐ[Ñ[Ô[ˆŒÝœ.¨Ñ4Ô4ˆŒˆˆr    c                 ó¨   — |                       |¦  «        }|                      |                     dd¦  «        ¦  «                             |¦  «        }|S )Nr   r   )r[   r-   rR   Ú
reshape_as©r.   Úhidden_states     r!   r9   zMLPLayerWithBN.forwardƒ   sH   € Ø—{’{ <Ñ0Ô0ˆØ—’ |×';Ò';¸A¸qÑ'AÔ'AÑBÔB×MÒMÈlÑ[Ô[ˆØÐr    )r   ©r   r   r   r)   r9   r;   r<   s   @r!   rV   rV   }   sL   ø€ € € € € ð5ð 5ð 5ð 5ð 5ð 5ð
ð ð ð ð ð ð r    rV   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLevitSubsamplec                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S r7   )r(   r)   r2   Ú
resolution)r.   r2   rg   r5   s      €r!   r)   zLevitSubsample.__init__Š   s+   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ$ˆŒˆˆr    c                 óÀ   — |j         \  }}}|                     || j        | j        |¦  «        d d …d d | j        …d d | j        …f                              |d|¦  «        }|S )Néÿÿÿÿ)rP   Úviewrg   r2   Úreshape)r.   rb   Ú
batch_sizeÚ_Úchannelss        r!   r9   zLevitSubsample.forward�   sn   € Ø".Ô"4Ñˆ
�A�xØ#×(Ò(¨°T´_ÀdÄoÐW_Ñ`Ô`ØˆAˆAˆ~ˆ~�$”+ˆ~˜~˜~ $¤+˜~Ð-ô
ç
Š'�*˜b (Ñ
+Ô
+ð 	ð Ðr    rc   r<   s   @r!   re   re   ‰   sG   ø€ € € € € ð%ð %ð %ð %ð %ð
ð ð ð ð ð ð r    re   c                   ó`   ‡ — e Zd Zˆ fd„Z ej        ¦   «         dˆ fd„	¦   «         Zd„ Zd„ Zˆ xZ	S )ÚLevitAttentionc                 ó"  •— t          ¦   «                              ¦   «          || _        |dz  | _        || _        || _        ||z  |z  ||z  dz  z   | _        ||z  |z  | _        t          || j        ¦  «        | _	        t          j        ¦   «         | _        t          | j        |d¬¦  «        | _        t          t          j        t#          |¦  «        t#          |¦  «        ¦  «        ¦  «        }t%          |¦  «        }|| _        i g }	}|D ]t}
|D ]o}t)          |
d         |d         z
  ¦  «        t)          |
d         |d         z
  ¦  «        f}||vrt%          |¦  «        ||<   |	                     ||         ¦  «         ŒpŒu|	| _        i | _        t0          j
                             t1          j        |t%          |¦  «        ¦  «        ¦  «        | _        |                      dt1          j        |	¦  «                             ||¦  «        d¬¦  «         d S )	Nç      à¿rB   r   )r4   r   Úattention_bias_idxsF©Ú
persistent)r(   r)   Únum_attention_headsÚscaleÚkey_dimÚattention_ratioÚout_dim_keys_valuesÚout_dim_projectionrV   Úqueries_keys_valuesr   rF   Ú
activationÚ
projectionÚlistÚ	itertoolsÚproductÚrangeÚlenÚ
len_pointsÚabsÚappendÚindicesÚattention_bias_cacher   Ú	ParameterÚzerosÚattention_biasesÚregister_bufferÚ
LongTensorrj   )r.   rD   rx   rv   ry   rg   Úpointsr„   Úattention_offsetsr‡   Úp1Úp2Úoffsetr5   s                €r!   r)   zLevitAttention.__init__˜   s  ø€ Ý‰Œ×ÒÑÔÐØ#6ˆÔ Ø˜d‘]ˆŒ
ØˆŒØ.ˆÔØ#2°WÑ#<Ð?RÑ#RÐU\Ð_rÑUrÐuvÑUvÑ#vˆÔ Ø"1°GÑ";Ð>QÑ"QˆÔå#1°,ÀÔ@XÑ#YÔ#YˆÔ Ýœ,™.œ.ˆŒÝ(¨Ô)@À,Ð_`ÐaÑaÔaˆŒå•iÔ'­¨jÑ(9Ô(9½5ÀÑ;LÔ;LÑMÔMÑNÔNˆÝ˜‘[”[ˆ
Ø$ˆŒØ%'¨˜7ÐØð 	:ð 	:ˆBØð :ð :�Ý˜b œe b¨¤e™mÑ,Ô,­c°"°Q´%¸"¸Q¼%±-Ñ.@Ô.@ÐA�ØÐ!2Ð2Ð2Ý03Ð4EÑ0FÔ0FÐ% fÑ-Ø—’Ð0°Ô8Ñ9Ô9Ð9Ð9ð	:ð
 ˆŒà$&ˆÔ!Ý %¤× 2Ò 2µ5´;Ð?RÕTWÐXiÑTjÔTjÑ3kÔ3kÑ lÔ lˆÔØ×ÒØ!¥5Ô#3°GÑ#<Ô#<×#AÒ#AÀ*ÈjÑ#YÔ#YÐfkð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r    Tc                 ór   •— t          ¦   «                              |¦  «         |r| j        ri | _        d S d S d S r7   ©r(   Útrainrˆ   ©r.   Úmoder5   s     €r!   r•   zLevitAttention.train·   óM   ø€ å‰Œ�Š�dÑÔÐØð 	+�DÔ-ð 	+Ø(*ˆDÔ%Ð%Ð%ð	+ð 	+ð 	+ð 	+r    c                 óÂ   — | j         r| j        d d …| j        f         S t          |¦  «        }|| j        vr| j        d d …| j        f         | j        |<   | j        |         S r7   ©Útrainingr‹   rs   Ústrrˆ   ©r.   ÚdeviceÚ
device_keys      r!   Úget_attention_biasesz#LevitAttention.get_attention_biases½   óo   € ØŒ=ð 	9ØÔ(¨¨¨¨DÔ,DÐ)DÔEÐEå˜V™œˆJØ Ô!:Ð:Ð:Ø8<Ô8MÈaÈaÈaÐQUÔQiÐNiÔ8j�Ô)¨*Ñ5ØÔ,¨ZÔ8Ð8r    c                 óÐ  — |j         \  }}}|                      |¦  «        }|                     ||| j        d¦  «                             | j        | j        | j        | j        z  gd¬¦  «        \  }}}|                     dddd¦  «        }|                     dddd¦  «        }|                     dddd¦  «        }||                     dd¦  «        z  | j	        z  |  
                    |j        ¦  «        z   }	|	                     d¬¦  «        }	|	|z                       dd¦  «                             ||| j        ¦  «        }|                      |                      |¦  «        ¦  «        }|S ©Nri   r   ©Údimr   rB   r   éþÿÿÿ)rP   r|   rj   rv   Úsplitrx   ry   ÚpermuterS   rw   r    rž   Úsoftmaxrk   r{   r~   r}   )
r.   rb   rl   Ú
seq_lengthrm   r|   ÚqueryÚkeyÚvalueÚ	attentions
             r!   r9   zLevitAttention.forwardÆ   s`  € Ø$0Ô$6Ñ!ˆ
�J Ø"×6Ò6°|ÑDÔDÐØ/×4Ò4°ZÀÈTÔMeÐgiÑjÔj×pÒpØŒ\˜4œ<¨Ô)=ÀÄÑ)LÐMÐSTð qñ 
ô 
Ñˆˆs�Eð —’˜a  A qÑ)Ô)ˆØ�kŠk˜!˜Q  1Ñ%Ô%ˆØ—’˜a  A qÑ)Ô)ˆà˜CŸMšM¨"¨bÑ1Ô1Ñ1°D´JÑ>À×AZÒAZÐ[gÔ[nÑAoÔAoÑoˆ	Ø×%Ò%¨"Ð%Ñ-Ô-ˆ	Ø! EÑ)×4Ò4°Q¸Ñ:Ô:×BÒBÀ:ÈzÐ[_Ô[rÑsÔsˆØ—’ t§¢°|Ñ'DÔ'DÑEÔEˆØÐr    ©T©
r   r   r   r)   r   Úno_gradr•   r    r9   r;   r<   s   @r!   rp   rp   —   sˆ   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð> €U„]�_„_ð+ð +ð +ð +ð +ñ „_ð+ð
9ð 9ð 9ðð ð ð ð ð ð r    rp   c                   ó`   ‡ — e Zd Zˆ fd„Z ej        ¦   «         dˆ fd„	¦   «         Zd„ Zd„ Zˆ xZ	S )ÚLevitAttentionSubsamplec	                 óX  •— t          ¦   «                              ¦   «          || _        |dz  | _        || _        || _        ||z  |z  ||z  z   | _        ||z  |z  | _        || _        t          || j        ¦  «        | _
        t          ||¦  «        | _        t          |||z  ¦  «        | _        t          j        ¦   «         | _        t          | j        |¦  «        | _        i | _        t'          t)          j        t-          |¦  «        t-          |¦  «        ¦  «        ¦  «        }	t'          t)          j        t-          |¦  «        t-          |¦  «        ¦  «        ¦  «        }
t/          |	¦  «        t/          |
¦  «        }}|| _        || _        i g }}|
D ]Ž}|	D ]‰}d}t5          |d         |z  |d         z
  |dz
  dz  z   ¦  «        t5          |d         |z  |d         z
  |dz
  dz  z   ¦  «        f}||vrt/          |¦  «        ||<   |                     ||         ¦  «         ŒŠŒ�|| _        t:          j                             t;          j        |t/          |¦  «        ¦  «        ¦  «        | _         |  !                    dt;          j"        |¦  «         #                    ||¦  «        d¬¦  «         d S )Nrr   r   r   rB   rs   Frt   )$r(   r)   rv   rw   rx   ry   rz   r{   Úresolution_outrV   Úkeys_valuesre   Úqueries_subsampleÚqueriesr   rF   r}   r~   rˆ   r   r€   r�   r‚   rƒ   Úlen_points_r„   r…   r†   r‡   r   r‰   rŠ   r‹   rŒ   r�   rj   )r.   r]   r^   rx   rv   ry   r2   Úresolution_inrµ   rŽ   Úpoints_r„   r¹   r�   r‡   r�   r‘   Úsizer’   r5   s                      €r!   r)   z LevitAttentionSubsample.__init__Ø   s¤  ø€ õ 	‰Œ×ÒÑÔÐØ#6ˆÔ Ø˜d‘]ˆŒ
ØˆŒØ.ˆÔØ#2°WÑ#<Ð?RÑ#RÐU\Ð_rÑUrÑ#rˆÔ Ø"1°GÑ";Ð>QÑ"QˆÔØ,ˆÔå)¨)°TÔ5MÑNÔNˆÔÝ!/°¸Ñ!FÔ!FˆÔÝ% i°Ð;NÑ1NÑOÔOˆŒÝœ,™.œ.ˆŒÝ(¨Ô)@À*ÑMÔMˆŒà$&ˆÔ!å•iÔ'­¨mÑ(<Ô(<½eÀMÑ>RÔ>RÑSÔSÑTÔTˆÝ•yÔ(­¨~Ñ)>Ô)>ÅÀnÑ@UÔ@UÑVÔVÑWÔWˆÝ"% f¡+¤+­s°7©|¬|�Kˆ
Ø&ˆÔØ$ˆŒØ%'¨˜7ÐØð 	:ð 	:ˆBØð :ð :�Ø�Ý˜b œe f™n¨r°!¬uÑ4¸¸q¹ÀA±~ÑEÑFÔFÍÈBÈqÌEÐTZÉNÐ]_Ð`aÔ]bÑLbÐfjÐmnÑfnÐrsÑesÑLsÑHtÔHtÐu�ØÐ!2Ð2Ð2Ý03Ð4EÑ0FÔ0FÐ% fÑ-Ø—’Ð0°Ô8Ñ9Ô9Ð9Ð9ð:ð ˆŒå %¤× 2Ò 2µ5´;Ð?RÕTWÐXiÑTjÔTjÑ3kÔ3kÑ lÔ lˆÔØ×ÒØ!¥5Ô#3°GÑ#<Ô#<×#AÒ#AÀ+ÈzÑ#ZÔ#ZÐglð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r    Tc                 ór   •— t          ¦   «                              |¦  «         |r| j        ri | _        d S d S d S r7   r”   r–   s     €r!   r•   zLevitAttentionSubsample.train  r˜   r    c                 óÂ   — | j         r| j        d d …| j        f         S t          |¦  «        }|| j        vr| j        d d …| j        f         | j        |<   | j        |         S r7   rš   r�   s      r!   r    z,LevitAttentionSubsample.get_attention_biases  r¡   r    c                 ó^  — |j         \  }}}|                      |¦  «                             ||| j        d¦  «                             | j        | j        | j        z  gd¬¦  «        \  }}|                     dddd¦  «        }|                     dddd¦  «        }|                      |  	                    |¦  «        ¦  «        }|                     || j
        dz  | j        | j        ¦  «                             dddd¦  «        }||                     dd¦  «        z  | j        z  |                      |j        ¦  «        z   }|                     d¬¦  «        }||z                       dd¦  «                             |d| j        ¦  «        }|                      |                      |¦  «        ¦  «        }|S r£   )rP   r¶   rj   rv   r§   rx   ry   r¨   r¸   r·   rµ   rS   rw   r    rž   r©   rk   r{   r~   r}   )	r.   rb   rl   rª   rm   r¬   r­   r«   r®   s	            r!   r9   zLevitAttentionSubsample.forward  s’  € Ø$0Ô$6Ñ!ˆ
�J à×Ò˜\Ñ*Ô*ßŠT�*˜j¨$Ô*BÀBÑGÔGßŠU�D”L $Ô"6¸¼Ñ"EÐFÈAˆUÑNÔNñ 	ˆˆUð
 �kŠk˜!˜Q  1Ñ%Ô%ˆØ—’˜a  A qÑ)Ô)ˆà—’˜T×3Ò3°LÑAÔAÑBÔBˆØ—
’
˜: tÔ':¸AÑ'=¸tÔ?WÐY]ÔYeÑfÔf×nÒnØˆq�!�Qñ
ô 
ˆð ˜CŸMšM¨"¨bÑ1Ô1Ñ1°D´JÑ>À×AZÒAZÐ[gÔ[nÑAoÔAoÑoˆ	Ø×%Ò%¨"Ð%Ñ-Ô-ˆ	Ø! EÑ)×4Ò4°Q¸Ñ:Ô:×BÒBÀ:ÈrÐSWÔSjÑkÔkˆØ—’ t§¢°|Ñ'DÔ'DÑEÔEˆØÐr    r¯   r°   r<   s   @r!   r³   r³   ×   s‰   ø€ € € € € ð.
ð .
ð .
ð .
ð .
ð` €U„]�_„_ð+ð +ð +ð +ð +ñ „_ð+ð
9ð 9ð 9ðð ð ð ð ð ð r    r³   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚLevitMLPLayerzE
    MLP Layer with `2X` expansion in contrast to ViT with `4X`.
    c                 óÌ   •— t          ¦   «                              ¦   «          t          ||¦  «        | _        t	          j        ¦   «         | _        t          ||¦  «        | _        d S r7   )r(   r)   rV   Ú	linear_upr   rF   r}   Úlinear_down)r.   r]   Ú
hidden_dimr5   s      €r!   r)   zLevitMLPLayer.__init__2  sO   ø€ Ý‰Œ×ÒÑÔÐÝ'¨	°:Ñ>Ô>ˆŒÝœ,™.œ.ˆŒÝ)¨*°iÑ@Ô@ˆÔÐÐr    c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r7   )rÃ   r}   rÄ   ra   s     r!   r9   zLevitMLPLayer.forward8  s=   € Ø—~’~ lÑ3Ô3ˆØ—’ |Ñ4Ô4ˆØ×'Ò'¨Ñ5Ô5ˆØÐr    r:   r<   s   @r!   rÁ   rÁ   -  sV   ø€ € € € € ðð ðAð Að Að Að Aðð ð ð ð ð ð r    rÁ   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚLevitResidualLayerz"
    Residual Block for LeViT
    c                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S r7   )r(   r)   ÚmoduleÚ	drop_rate)r.   rÊ   rË   r5   s      €r!   r)   zLevitResidualLayer.__init__D  s+   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒˆˆr    c                 ó‚  — | j         rŸ| j        dk    r”t          j        |                     d¦  «        dd|j        ¬¦  «        }|                     | j        ¦  «                             d| j        z
  ¦  «                             ¦   «         }||  	                    |¦  «        |z  z   }|S ||  	                    |¦  «        z   }|S )Nr   r   )rž   )
r›   rË   r   Úrandr¼   rž   Úge_ÚdivÚdetachrÊ   )r.   rb   Úrnds      r!   r9   zLevitResidualLayer.forwardI  s²   € ØŒ=ð 	 ˜Tœ^¨aÒ/Ð/Ý”*˜\×.Ò.¨qÑ1Ô1°1°aÀÔ@SÐTÑTÔTˆCØ—'’'˜$œ.Ñ)Ô)×-Ò-¨a°$´.Ñ.@ÑAÔA×HÒHÑJÔJˆCØ'¨$¯+ª+°lÑ*CÔ*CÀcÑ*IÑIˆLØÐà'¨$¯+ª+°lÑ*CÔ*CÑCˆLØÐr    r:   r<   s   @r!   rÈ   rÈ   ?  sQ   ø€ € € € € ðð ð#ð #ð #ð #ð #ð
 ð  ð  ð  ð  ð  ð  r    rÈ   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú
LevitStagezP
    LeViT Stage consisting of `LevitMLPLayer` and `LevitAttention` layers.
    c                 ó  •— t          ¦   «                              ¦   «          g | _        || _        |
| _        t          |¦  «        D ]�}| j                             t          t          |||||
¦  «        | j        j	        ¦  «        ¦  «         |dk    rE||z  }| j                             t          t          ||¦  «        | j        j	        ¦  «        ¦  «         Œ‘|	d         dk    rÿ| j        dz
  |	d         z  dz   | _        | j                             t          | j        j        ||dz   …         |	d         |	d         |	d         |	d         |
| j        dœŽ¦  «         | j        | _        |	d         dk    rq| j        j        |dz            |	d         z  }| j                             t          t          | j        j        |dz            |¦  «        | j        j	        ¦  «        ¦  «         t          j        | j        ¦  «        | _        d S )	Nr   Ú	Subsampler   é   rB   r   )rx   rv   ry   r2   rº   rµ   rA   )r(   r)   ÚlayersrN   rº   r‚   r†   rÈ   rp   Údrop_path_raterÁ   rµ   r³   rD   r   Ú
ModuleList)r.   rN   ÚidxrD   rx   Údepthsrv   ry   Ú	mlp_ratioÚdown_opsrº   rm   rÅ   r5   s                €r!   r)   zLevitStage.__init__Y  s  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØˆŒØ*ˆÔå�v‘”ð 	ð 	ˆAØŒK×ÒÝ"Ý" <°Ð:MÈÐ`mÑnÔnØ”KÔ.ñô ñô ð ð ˜1Š}ˆ}Ø)¨IÑ5�
Ø”×"Ò"Ý&¥}°\À:Ñ'NÔ'NÐPTÔP[ÔPjÑkÔkñô ð øð �AŒ;˜+Ò%Ð%Ø#'Ô#5¸Ñ#9¸hÀq¼kÑ"IÈAÑ"MˆDÔØŒK×ÒÝ'Ø”[Ô-¨c°C¸!±G¨mÔ<Ø$ QœKØ(0°¬Ø$,¨Q¤KØ# Aœ;Ø"/Ø#'Ô#6ðð ð ñ
ô 
ð 
ð "&Ô!4ˆDÔØ˜Œ{˜QŠˆØ!œ[Ô5°c¸A±gÔ>ÀÈ!ÄÑL�
Ø”×"Ò"Ý&Ý% d¤kÔ&>¸sÀQ¹wÔ&GÈÑTÔTÐVZÔVaÔVpñô ñô ð õ ”m D¤KÑ0Ô0ˆŒˆˆr    c                 ó   — | j         S r7   )rº   )r.   s    r!   Úget_resolutionzLevitStage.get_resolution�  s   € ØÔ!Ð!r    c                 ó0   — | j         D ]} ||¦  «        }Œ|S r7   )r×   )r.   rb   Úlayers      r!   r9   zLevitStage.forward“  s*   € Ø”[ð 	/ð 	/ˆEØ ˜5 Ñ.Ô.ˆLˆLØÐr    )r   r   r   r   r)   rß   r9   r;   r<   s   @r!   rÓ   rÓ   T  sa   ø€ € € € € ðð ð51ð 51ð 51ð 51ð 51ðn"ð "ð "ðð ð ð ð ð ð r    rÓ   c                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )ÚLevitEncoderzC
    LeViT Encoder consisting of multiple `LevitStage` stages.
    c                 ó€  •— t          ¦   «                              ¦   «          || _        | j        j        | j        j        z  }g | _        | j        j                             dg¦  «         t          t          |j
        ¦  «        ¦  «        D ]•}t          |||j        |         |j        |         |j
        |         |j        |         |j        |         |j        |         |j        |         |¦
  «
        }|                     ¦   «         }| j                             |¦  «         Œ–t%          j        | j        ¦  «        | _        d S )NÚ )r(   r)   rN   Ú
image_sizeÚ
patch_sizeÚstagesrÝ   r†   r‚   rƒ   rÛ   rÓ   rD   rx   rv   ry   rÜ   rß   r   rÙ   )r.   rN   rg   Ú	stage_idxÚstager5   s        €r!   r)   zLevitEncoder.__init__ž  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ”[Ô+¨t¬{Ô/EÑEˆ
ØˆŒØŒÔ×#Ò# R DÑ)Ô)Ð)å�s 6¤=Ñ1Ô1Ñ2Ô2ð 	&ð 	&ˆIÝØØØÔ# IÔ.Ø”˜yÔ)Ø”˜iÔ(ØÔ*¨9Ô5ØÔ& yÔ1ØÔ  Ô+Ø” 	Ô*Øñô ˆEð ×-Ò-Ñ/Ô/ˆJØŒK×Ò˜uÑ%Ô%Ð%Ð%å”m D¤KÑ0Ô0ˆŒˆˆr    FTc                 ó´   — |rdnd }| j         D ]}|r||fz   } ||¦  «        }Œ|r||fz   }|st          d„ ||fD ¦   «         ¦  «        S t          ||¬¦  «        S )Nr   c              3   ó   K  — | ]}|®|V — Œ	d S r7   r   )Ú.0Úvs     r!   ú	<genexpr>z'LevitEncoder.forward.<locals>.<genexpr>Â  s"   è è € ÐWÐW˜qÈÈ˜ÈÈÈÈÐWÐWr    )Úlast_hidden_stater   )rè   r   r   )r.   rb   Úoutput_hidden_statesÚreturn_dictÚall_hidden_statesrê   s         r!   r9   zLevitEncoder.forward·  sŸ   € Ø"6Ð@˜B˜B¸DÐà”[ð 	/ð 	/ˆEØ#ð HØ$5¸¸Ñ$GÐ!Ø ˜5 Ñ.Ô.ˆLˆLàð 	DØ 1°\°OÑ CÐØð 	XÝÐWÐW \Ð3DÐ$EÐWÑWÔWÑWÔWÐWå-ÀÐ\mÐnÑnÔnÐnr    )FTr:   r<   s   @r!   rã   rã   ™  s^   ø€ € € € € ðð ð1ð 1ð 1ð 1ð 1ð2oð oð oð oð oð oð oð or    rã   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚLevitClassificationLayerz$
    LeViT Classification Layer
    c                 ó®   •— t          ¦   «                              ¦   «          t          j        |¦  «        | _        t          j        ||¦  «        | _        d S r7   )r(   r)   r   r\   r-   rZ   r[   )r.   r]   r^   r5   s      €r!   r)   z!LevitClassificationLayer.__init__Ì  sA   ø€ Ý‰Œ×ÒÑÔÐÝœ.¨Ñ3Ô3ˆŒÝ”i 	¨:Ñ6Ô6ˆŒˆˆr    c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r7   )r-   r[   )r.   rb   r   s      r!   r9   z LevitClassificationLayer.forwardÑ  s)   € Ø—’ |Ñ4Ô4ˆØ—’˜\Ñ*Ô*ˆØˆr    r:   r<   s   @r!   rõ   rõ   Ç  sQ   ø€ € € € € ðð ð7ð 7ð 7ð 7ð 7ð
ð ð ð ð ð ð r    rõ   c                   ó<   ‡ — e Zd ZU eed<   dZdZdZdgZˆ fd„Z	ˆ xZ
S )ÚLevitPreTrainedModelrN   ÚlevitrT   )ÚimagerÈ   c                 óâ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rQt	          j        |j        t          j        |j	        ¦  «         
                    |j        |j        ¦  «        ¦  «         d S t          |t          ¦  «        rQt	          j        |j        t          j        |j	        ¦  «         
                    |j        |j        ¦  «        ¦  «         d S d S r7   )r(   Ú_init_weightsÚ
isinstancerp   ÚinitÚcopy_rs   r   r�   r‡   rj   r„   r³   r¹   )r.   rÊ   r5   s     €r!   rý   z"LevitPreTrainedModel._init_weightsß  sá   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�nÑ-Ô-ð 	ÝŒJØÔ*­EÔ,<¸V¼^Ñ,LÔ,L×,QÒ,QÐRXÔRcÐekÔevÑ,wÔ,wñô ð ð ð õ ˜Õ 7Ñ8Ô8ð 	ÝŒJØÔ*ÝÔ  ¤Ñ0Ô0×5Ò5°fÔ6HÈ&ÔJ[Ñ\Ô\ñô ð ð ð ð	ð 	r    )r   r   r   r   r   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesrý   r;   r<   s   @r!   rù   rù   ×  s`   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ-Ð.Ðð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r    rù   c                   óp   ‡ — e Zd Zˆ 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 )	Ú
LevitModelc                 óÐ   •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r7   )r(   r)   rN   r>   Úpatch_embeddingsrã   ÚencoderÚ	post_initrM   s     €r!   r)   zLevitModel.__init__î  sW   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ 4°VÑ <Ô <ˆÔÝ# FÑ+Ô+ˆŒà�ŠÑÔÐÐÐr    NrT   rñ   rò   Úreturnc                 óJ  — |�|n| j         j        }|�|n| j         j        }|€t          d¦  «        ‚|                      |¦  «        }|                      |||¬¦  «        }|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   )	rN   rñ   rò   rQ   r  r	  Úmeanr   r   )	r.   rT   rñ   rò   Úkwargsr8   Úencoder_outputsrð   Úpooled_outputs	            r!   r9   zLevitModel.forwardö  sä   € ð %9Ð$DÐ Ð È$Ì+ÔJjð 	ð &1Ð%<�k�kÀ$Ä+ÔBYˆàÐÝÐ?Ñ@Ô@Ð@à×*Ò*¨<Ñ8Ô8ˆ
ØŸ,š,ØØ!5Ø#ð 'ñ 
ô 
ˆð ,¨AÔ.Ðð *×.Ò.°1Ð.Ñ5Ô5ˆàð 	LØ% }Ð5¸ÈÈÈÔ8KÑKÐKå7Ø/Ø'Ø)Ô7ð
ñ 
ô 
ð 	
r    ©NNN)r   r   r   r)   r   r   r   Úboolr   r   r9   r;   r<   s   @r!   r  r  ì  s¤   ø€ € € € € ðð ð ð ð ð ð 26Ø,0Ø#'ð	"
ð "
àÔ'¨$Ñ.ð"
ð # T™kð"
ð ˜D‘[ð	"
ð 
Ð9Ñ	9ð"
ð "
ð "
ñ „^ð"
ð "
ð "
ð "
ð "
r    r  z…
    Levit Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                   ó†   ‡ — 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 )
ÚLevitForImageClassificationc                 ó\  •— t          ¦   «                              |¦  «         || _        |j        | _        t	          |¦  «        | _        |j        dk    r t          |j        d         |j        ¦  «        nt          j	         
                    ¦   «         | _        |                      ¦   «          d S ©Nr   ri   )r(   r)   rN   Ú
num_labelsr  rú   rõ   rD   r   r   ÚIdentityÚ
classifierr
  rM   s     €r!   r)   z$LevitForImageClassification.__init__#  s˜   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ Ô+ˆŒÝ Ñ'Ô'ˆŒ
ð
 Ô  1Ò$Ð$õ % VÔ%8¸Ô%<¸fÔ>OÑPÔPÐPå”×"Ò"Ñ$Ô$ð 	Œð 	�ŠÑÔÐÐÐr    NrT   Úlabelsrñ   rò   r  c                 óX  — |�|n| j         j        }|                      |||¬¦  «        }|d         }|                     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   rB   )Úlossr   r   )rN   rò   rú   r  r  Úloss_functionr	   r   )r.   rT   r  rñ   rò   r  ÚoutputsÚsequence_outputr   r  Úoutputs              r!   r9   z#LevitForImageClassification.forward3  sØ   € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà—*’*˜\Ð@TÐbm�*ÑnÔnˆà! !œ*ˆØ)×.Ò.¨qÑ1Ô1ˆØ—’ Ñ1Ô1ˆàˆØÐØ×%Ò% f¨f°d´kÑBÔBˆDàð 	FØ�Y ¨¨¨¤Ñ,ˆFØ)-Ð)9�T�G˜fÑ$Ð$¸vÐEå3ØØØ!Ô/ð
ñ 
ô 
ð 	
r    )NNNN)r   r   r   r)   r   r   r   r�   r  r   r	   r9   r;   r<   s   @r!   r  r    s¹   ø€ € € € € ðð ð ð ð ð  ð 26Ø*.Ø,0Ø#'ð"
ð "
àÔ'¨$Ñ.ð"
ð Ô  4Ñ'ð"
ð # T™kð	"
ð
 ˜D‘[ð"
ð 
Ð5Ñ	5ð"
ð "
ð "
ñ „^ð"
ð "
ð "
ð "
ð "
r    r  ap  
    LeViT Model transformer with image classification heads on top (a linear layer on top of the final hidden state and
    a linear layer on top of the final hidden state of the distillation token) e.g. for ImageNet. .. warning::
           This model supports inference-only. Fine-tuning with distillation (i.e. with a teacher) is not yet
           supported.
    c                   óp   ‡ — e Zd Zˆ 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 )	Ú&LevitForImageClassificationWithTeacherc                 óø  •— t          ¦   «                              |¦  «         || _        |j        | _        t	          |¦  «        | _        |j        dk    r t          |j        d         |j        ¦  «        nt          j	         
                    ¦   «         | _        |j        dk    r t          |j        d         |j        ¦  «        nt          j	         
                    ¦   «         | _        |                      ¦   «          d S r  )r(   r)   rN   r  r  rú   rõ   rD   r   r   r  r  Úclassifier_distillr
  rM   s     €r!   r)   z/LevitForImageClassificationWithTeacher.__init__b  sÞ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ Ô+ˆŒÝ Ñ'Ô'ˆŒ
ð
 Ô  1Ò$Ð$õ % VÔ%8¸Ô%<¸fÔ>OÑPÔPÐPå”×"Ò"Ñ$Ô$ð 	Œð Ô  1Ò$Ð$õ % VÔ%8¸Ô%<¸fÔ>OÑPÔPÐPå”×"Ò"Ñ$Ô$ð 	Ôð 	�ŠÑÔÐÐÐr    NrT   rñ   rò   r  c                 óH  — |�|n| j         j        }|                      |||¬¦  «        }|d         }|                     d¦  «        }|                      |¦  «        |                      |¦  «        }}||z   dz  }	|s|	||f|dd …         z   }
|
S t          |	|||j        ¬¦  «        S )Nr  r   r   rB   )r   r   r   r   )rN   rò   rú   r  r  r&  r   r   )r.   rT   rñ   rò   r  r   r!  r   Údistill_logitsr   r"  s              r!   r9   z.LevitForImageClassificationWithTeacher.forwardw  sË   € ð &1Ð%<�k�kÀ$Ä+ÔBYˆà—*’*˜\Ð@TÐbm�*ÑnÔnˆà! !œ*ˆØ)×.Ò.¨qÑ1Ô1ˆØ%)§_¢_°_Ñ%EÔ%EÀt×G^ÒG^Ð_nÑGoÔGo�Nˆ
Ø˜~Ñ-°Ñ2ˆàð 	Ø˜j¨.Ð9¸GÀAÀBÀB¼KÑGˆFØˆMå;ØØ!Ø .Ø!Ô/ð	
ñ 
ô 
ð 	
r    r  )r   r   r   r)   r   r   r   r  r   r   r9   r;   r<   s   @r!   r$  r$  Y  s¤   ø€ € € € € ðð ð ð ð ð* ð 26Ø,0Ø#'ð	
ð 
àÔ'¨$Ñ.ð
ð # T™kð
ð ˜D‘[ð	
ð 
Ð=Ñ	=ð
ð 
ð 
ñ „^ð
ð 
ð 
ð 
ð 
r    r$  )r  r$  r  rù   )*r   r€   Údataclassesr   r   r   rå   r   rÿ   Úmodeling_outputsr   r   r	   r
   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_levitr   Ú
get_loggerr   Úloggerr   ÚModuler#   r>   rV   re   rp   r³   rÁ   rÈ   rÓ   rã   rõ   rù   r  r  r$  Ú__all__r   r    r!   ú<module>r2     sg  ðð Ð à Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð:ð :ð :ð :ð :°;ñ :ô :ñ „ñô ð:ð$ð ð ð ð ˜"œ)ñ ô ð ð()5ð )5ð )5ð )5ð )5˜2œ9ñ )5ô )5ð )5ðX	ð 	ð 	ð 	ð 	�R”Yñ 	ô 	ð 	ðð ð ð ð �R”Yñ ô ð ð=ð =ð =ð =ð =�R”Yñ =ô =ð =ð@Sð Sð Sð Sð S˜bœiñ Sô Sð Sðlð ð ð ð �B”Iñ ô ð ð$ ð  ð  ð  ð  ˜œñ  ô  ð  ð*Bð Bð Bð Bð B�”ñ Bô Bð BðJ+oð +oð +oð +oð +o�2”9ñ +oô +oð +oð\ð ð ð ð ˜rœyñ ô ð ð  ðð ð ð ð ˜?ñ ô ñ „ðð( ð,
ð ,
ð ,
ð ,
ð ,
Ð%ñ ,
ô ,
ñ „ð,
ð^ €ððñ ô ð4
ð 4
ð 4
ð 4
ð 4
Ð"6ñ 4
ô 4
ñô ð4
ðn €ððñ ô ð0
ð 0
ð 0
ð 0
ð 0
Ð-Añ 0
ô 0
ñô ð0
ðfð ð €€€r    