§
    ‚Štjdn  ã                   ó˜  — d dl mZm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 ddlmZ dd	lmZ dd
lmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZ ddlmZm Z  ddl!m"Z" ddl#m$Z$  G d„ dej%        ¦  «        Z& G d„ dej%        ¦  «        Z'	 	 d:dej%        dej(        dej(        dej(        dej(        dz  de)dz  de)dee         fd„Z* G d „ d!ej%        ¦  «        Z+ G d"„ d#ej%        ¦  «        Z, G d$„ d%e¦  «        Z-e G d&„ d'e¦  «        ¦   «         Z. G d(„ d)ej%        ¦  «        Z/e G d*„ d+e.¦  «        ¦   «         Z0 ed,¬-¦  «         G d.„ d/e.¦  «        ¦   «         Z1 ed0¬-¦  «         G d1„ d2e.¦  «        ¦   «         Z2 ed3¬-¦  «        e G d4„ d5e¦  «        ¦   «         ¦   «         Z3 ed6¬-¦  «         G d7„ d8e.¦  «        ¦   «         Z4g d9¢Z5dS );é    )ÚCallableÚIterable)Ú	dataclassN)Únné   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPoolingÚImageClassifierOutputÚMaskedImageModelingOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
DeiTConfigc                   ó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 )ÚDeiTPatchEmbeddingszì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    Úconfigc                 ó¢  •— t          ¦   «                              ¦   «          |j        }|j        }t	          |t
          ¦  «        r|n||f}t	          |t
          ¦  «        r|n||f}|d         |d         z  |d         |d         z  z  | _        || _        || _        |j        | _        t          j	        |j        |j
        ||¬¦  «        | _        d S )Nr   r   )Úkernel_sizeÚstride)ÚsuperÚ__init__Ú
image_sizeÚ
patch_sizeÚ
isinstancer   Únum_patchesÚnum_channelsr   ÚConv2dÚhidden_sizeÚ
projection)Úselfr   r#   r$   Ú	__class__s       €úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/deit/modeling_deit.pyr"   zDeiTPatchEmbeddings.__init__/   sÎ   ø€ Ý‰Œ×ÒÑÔÐØÔ&ˆ
ØÔ&ˆ
Ý#-¨j½(Ñ#CÔ#CÐa�Z�ZÈ*ÐV`ÐIaˆ
Ý#-¨j½(Ñ#CÔ#CÐa�Z�ZÈ*ÐV`ÐIaˆ
à& qœM¨Z¸¬]Ñ:¸zÈ!¼}ÐPZÐ[\ÔP]Ñ?]Ñ^ˆÔØ$ˆŒØ$ˆŒØ"Ô/ˆÔÝœ) FÔ$7¸Ô9KÐYcÐlvÐwÑwÔwˆŒˆˆó    Úpixel_valuesÚreturnc                 óà   — |j         d         }|| j        k    rt          d| j        › d|› d�¦  «        ‚|                      |¦  «                             d¦  «                             dd¦  «        S )Nr   zoMake sure that the channel dimension of the pixel values match with the one set in the configuration. Expected z	 but got ú.é   )Úshaper'   Ú
ValueErrorr*   ÚflattenÚ	transpose)r+   r/   r'   s      r-   ÚforwardzDeiTPatchEmbeddings.forward<   sŽ   € Ø#Ô)¨!Ô,ˆØ˜4Ô,Ò,Ð,ÝðIØ!Ô.ðIð IØ9EðIð Ið Iñô ð ð �Š˜|Ñ,Ô,×4Ò4°QÑ7Ô7×AÒAÀ!ÀQÑGÔGÐGr.   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   ÚtorchÚTensorr8   Ú__classcell__©r,   s   @r-   r   r   (   s…   ø€ € € € € ðð ðx˜zð xð xð xð xð xð xðH E¤Lð H°U´\ð Hð Hð Hð Hð Hð Hð Hð Hr.   r   c            	       ó    ‡ — e Zd ZdZddededdfˆ fd„Zdej        d	e	d
e	dej        fd„Z
	 	 ddej        dej        dz  dedej        fd„Zˆ xZS )ÚDeiTEmbeddingsaÇ  
    Construct the CLS token, distillation token, position and patch embeddings. Optionally, also the mask token.

    Differences from ViTEmbeddings:
    - Adds a distillation token (for distillation pre-training).
    - Position embeddings include +2 slots (CLS + distillation) instead of +1.
    - interpolate_pos_encoding handles 2 special tokens instead of 1.
    - forward concatenates distillation token and handles position encoding for both.
    Fr   Úuse_mask_tokenr0   Nc                 óœ  •— t          ¦   «                              ¦   «          t          j        t	          j        dd|j        ¦  «        ¦  «        | _        |r-t          j        t	          j        dd|j        ¦  «        ¦  «        nd | _        t          |¦  «        | _
        | j
        j        }t          j        t	          j        d|dz   |j        ¦  «        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        | j
        j        | _        t          j        t	          j        dd|j        ¦  «        ¦  «        | _        d S )Nr   r3   )r!   r"   r   Ú	Parameterr=   Úzerosr)   Ú	cls_tokenÚ
mask_tokenr   Úpatch_embeddingsr&   Úposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr$   r#   Údistillation_token)r+   r   rC   r&   r,   s       €r-   r"   zDeiTEmbeddings.__init__Q   sÿ   ø€ Ý‰Œ×ÒÑÔÐÝœ¥e¤k°!°Q¸Ô8JÑ&KÔ&KÑLÔLˆŒØQ_Ði�"œ,¥u¤{°1°a¸Ô9KÑ'LÔ'LÑMÔMÐMÐeiˆŒÝ 3°FÑ ;Ô ;ˆÔØÔ+Ô7ˆå#%¤<µ´¸A¸{ÈQ¹ÐPVÔPbÑ0cÔ0cÑ#dÔ#dˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒØ Ô+ˆŒØÔ/Ô:ˆŒÝ"$¤,­u¬{¸1¸aÀÔASÑ/TÔ/TÑ"UÔ"UˆÔÐÐr.   Ú
embeddingsÚheightÚwidthc                 ó”  — |j         d         dz
  }| j        j         d         dz
  }t          j                             ¦   «         s||k    r||k    r| j        S | j        dd…dd…f         }| j        dd…dd…f         }|j         d         }|| j        z  }	|| j        z  }
t          |dz  ¦  «        }|                     d|||¦  «        }|                     dddd¦  «        }t          j
                             ||	|
fdd	¬
¦  «        }|                     dddd¦  «                             dd|¦  «        }t          j        ||fd¬¦  «        S )a  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing and 2 class embeddings.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   r3   Néÿÿÿÿç      à?r   r   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údim)r4   rJ   r=   ÚjitÚ
is_tracingr$   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚviewÚcat)r+   rO   rP   rQ   r&   Únum_positionsÚclass_and_dist_pos_embedÚpatch_pos_embedrZ   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r-   Úinterpolate_pos_encodingz'DeiTEmbeddings.interpolate_pos_encoding^   st  € ð !Ô& qÔ)¨AÑ-ˆØÔ0Ô6°qÔ9¸AÑ=ˆõ Œy×#Ò#Ñ%Ô%ð 	,¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?ØÔ+Ð+à#'Ô#;¸A¸A¸A¸rÀ¸r¸EÔ#BÐ ØÔ2°1°1°1°a°b°b°5Ô9ˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å& }°cÑ'9Ñ:Ô:ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆåœ-×3Ò3ØØ˜iÐ(ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒyÐ2°OÐDÈ!ÐLÑLÔLÐLr.   r/   Úbool_masked_posri   c                 óâ  — |j         \  }}}}|                      |¦  «        }|                     ¦   «         \  }}	}|�R| j                             ||	d¦  «        }
|                     d¦  «                             |
¦  «        }|d|z
  z  |
|z  z   }| j                             |dd¦  «        }| j                             |dd¦  «        }t          j
        |||fd¬¦  «        }|r||                      |||¦  «        z   }n^|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d	�	¦  «        ‚|| j        z   }|                      |¦  «        }|S )
NrS   g      ð?r   rY   r   zInput image size (Ú*z) doesn't match model (z).)r4   rI   rV   rH   ÚexpandÚ	unsqueezeÚtype_asrG   rN   r=   rb   ri   r#   r5   rJ   rM   )r+   r/   rj   ri   Ú_rP   rQ   rO   Ú
batch_sizeÚ
seq_lengthÚmask_tokensÚmaskÚ
cls_tokensÚdistillation_tokenss                 r-   r8   zDeiTEmbeddings.forward†   s¾  € ð +Ô0Ñˆˆ1ˆf�eØ×*Ò*¨<Ñ8Ô8ˆ
à$.§O¢OÑ$5Ô$5Ñ!ˆ
�J àÐ&Øœ/×0Ò0°¸ZÈÑLÔLˆKà"×,Ò,¨RÑ0Ô0×8Ò8¸ÑEÔEˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJà”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ø"Ô5×<Ò<¸ZÈÈRÑPÔPÐÝ”Y 
Ð,?ÀÐLÐRSÐTÑTÔTˆ
à#ð 	?Ø# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà˜œ¨Ô+Ò+Ð+¨u¸¼ÈÔ8JÒ/JÐ/JÝ ðE¨ð Eð E°%ð Eð EØœ¨Ô+ðEð EØ.2¬o¸aÔ.@ðEð Eð Eñô ð ð $ dÔ&>Ñ>ˆJà—\’\ *Ñ-Ô-ˆ
ØÐr.   )F)NF)r9   r:   r;   r<   r   Úboolr"   r=   r>   Úintri   Ú
BoolTensorr8   r?   r@   s   @r-   rB   rB   F   sþ   ø€ € € € € ðð ðVð V˜zð V¸4ð VÈDð Vð Vð Vð Vð Vð Vð&M°5´<ð &MÈð &MÐUXð &MÐ]bÔ]ið &Mð &Mð &Mð &MðV 48Ø).ð	 ð  à”lð ð Ô)¨DÑ0ð ð #'ð	 ð
 
Œð ð  ð  ð  ð  ð  ð  ð  r.   rB   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrM   Úkwargsc                 óô  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt          j        ¬¦  «                             |j	        ¦  «        }t          j         
                    ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )NrS   ç      à¿r3   r   )rZ   Údtype)ÚpÚtrainingr   )rV   r=   Úmatmulr7   r   r_   ÚsoftmaxÚfloat32Útor„   rM   r†   Ú
contiguous)
r{   r|   r}   r~   r   r€   rM   r�   Úattn_weightsÚattn_outputs
             r-   Úeager_attention_forwardrŽ   ©   sÞ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r.   c                   óŠ   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee         de	ej        ej        f         fd„Z
ˆ xZS )
ÚDeiTAttentionr   c                 ó†  •— t          ¦   «                              ¦   «          || _        |j        | _        t	          |d|j        |j        z  ¦  «        | _        |j        | _        | j        dz  | _	        d| _
        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        | j        z  |j        d¬¦  «        | _        d S )NÚhead_dimrƒ   F)ÚbiasT)r!   r"   r   Únum_attention_headsÚgetattrr)   r’   Úattention_probs_dropout_probÚattention_dropoutr€   Ú	is_causalr   ÚLinearÚqkv_biasÚq_projÚk_projÚv_projÚo_proj©r+   r   r,   s     €r-   r"   zDeiTAttention.__init__Æ   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ#)Ô#=ˆÔ Ý ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ!'Ô!DˆÔØ”} dÑ*ˆŒØˆŒå”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^ÐeiÐjÑjÔjˆŒˆˆr.   NÚhidden_statesr   r�   r0   c                 ó¬  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )NrS   r   r3   rz   )rM   r€   )r4   r’   r›   ra   r7   rœ   r�   r   Úget_interfacer   Ú_attn_implementationrŽ   r†   r—   r€   r]   r‹   rž   )r+   r    r   r�   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfacer�   rŒ   s               r-   r8   zDeiTAttention.forwardÔ   sw  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØ”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆà˜LÐ(Ð(r.   ©N)r9   r:   r;   r   r"   r=   r>   r   r   Útupler8   r?   r@   s   @r-   r�   r�   Å   s¬   ø€ € € € € ðk˜zð kð kð kð kð kð kð" /3ð)ð )à”|ð)ð œ tÑ+ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð)ð )ð )ð )ð )ð )ð )ð )r.   r�   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚDeiTMLPr   c                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S rª   )r!   r"   r   r	   Ú
hidden_actÚactivation_fnr   r™   r)   Úintermediate_sizeÚfc1Úfc2rŸ   s     €r-   r"   zDeiTMLP.__init__÷   sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr.   r    r0   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rª   )r²   r°   r³   )r+   r    s     r-   r8   zDeiTMLP.forwardþ   s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆàÐr.   ©	r9   r:   r;   r   r"   r=   r>   r8   r?   r@   s   @r-   r­   r­   ö   sq   ø€ € € € € ðK˜zð Kð Kð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r.   r­   c            	       óp   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee         dej        fd„Z	ˆ xZ
S )
Ú	DeiTLayerr   c                 óh  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        |j        ¬¦  «        | _        t	          j        |j        |j        ¬¦  «        | _	        t          |¦  «        | _        t	          j        |j        ¦  «        | _        d S )N©Úeps)r!   r"   r�   Ú	attentionr   Ú	LayerNormr)   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr­   ÚmlprK   rL   rM   rŸ   s     €r-   r"   zDeiTLayer.__init__  s‡   ø€ Ý‰Œ×ÒÑÔÐÝ& vÑ.Ô.ˆŒÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ!œ|¨FÔ,>ÀFÔDYÐZÑZÔZˆÔÝ˜6‘?”?ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr.   Nr    r   r�   r0   c                 ó  — |}|                       |¦  «        } | j        ||fi |¤Ž\  }}|                      |¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   }|S rª   )r¾   r»   rM   r¿   rÀ   )r+   r    r   r�   Úresidualrp   s         r-   r8   zDeiTLayer.forward  s£   € ð !ˆØ×-Ò-¨mÑ<Ô<ˆØ)˜4œ>¨-¸ÐRÐRÈ6ÐRÐRÑˆ�qØŸš ]Ñ3Ô3ˆØ%¨Ñ0ˆð !ˆØ×,Ò,¨]Ñ;Ô;ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3ˆØ%¨Ñ0ˆàÐr.   rª   )r9   r:   r;   r   r"   r=   r>   r   r   r8   r?   r@   s   @r-   r·   r·     s™   ø€ € € € € ð>˜zð >ð >ð >ð >ð >ð >ð /3ðð à”|ðð œ tÑ+ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r.   r·   c                   óÂ   ‡ — e Zd ZU eed<   dZdZdZdZddgZ	dZ
dZdZdZdZeedœZd	Z ej        ¦   «         d
ej        ej        z  ej        z  ddfˆ fd„¦   «         Zˆ xZS )ÚDeiTPreTrainedModelr   Údeitr/   )ÚimageTrB   r·   )r    Ú
attentionsrI   r{   r0   Nc                 ób  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rs|j        �&t          j        |j        d| j        j        ¬¦  «         t          j        |j	        d| j        j        ¬¦  «         |j
        �t          j        |j
        ¦  «         t          |t          ¦  «        rmt          j        |j	        ¦  «         t          j        |j        ¦  «         t          j        |j        ¦  «         |j
        �t          j        |j
        ¦  «         dS dS dS )zInitialize the weightsNrz   )ÚmeanÚstd)r!   Ú_init_weightsr%   rB   rJ   ÚinitÚtrunc_normal_r   Úinitializer_rangerG   rH   Úzeros_rN   )r+   r{   r,   s     €r-   rË   z!DeiTPreTrainedModel._init_weights9  s  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�nÑ-Ô-ð 	/ØÔ)Ð5ÝÔ" 6Ô#=ÀCÈTÌ[ÔMjÐkÑkÔkÐkÝÔ˜vÔ/°c¸t¼{Ô?\Ð]Ñ]Ô]Ð]ØÔ Ð,Ý”˜FÔ-Ñ.Ô.Ð.Ý�f�nÑ-Ô-ð 	/ÝŒK˜Ô(Ñ)Ô)Ð)ÝŒK˜Ô2Ñ3Ô3Ð3ÝŒK˜Ô1Ñ2Ô2Ð2ØÔ Ð,Ý”˜FÔ-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/ð -Ð,r.   )r9   r:   r;   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendÚ_can_compile_fullgraphr·   r�   Ú_can_record_outputsÚ_input_embed_layerr=   Úno_gradr   r™   r(   r¼   rË   r?   r@   s   @r-   rÄ   rÄ   &  sÕ   ø€ € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø)¨;Ð7ÐØ€NØÐØÐØ"&ÐØ!Ðà"Ø#ðð Ðð ,Ðà€U„]�_„_ð/ B¤I°´	Ñ$9¸B¼LÑ$Hð /ÈTð /ð /ð /ð /ð /ñ „_ð/ð /ð /ð /ð /r.   rÄ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )Ú
DeiTPoolerr   c                 ó¾   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j                 | _	        d S rª   )
r!   r"   r   r™   r)   Úpooler_output_sizeÚdenser	   Ú
pooler_actÚ
activationrŸ   s     €r-   r"   zDeiTPooler.__init__L  sE   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3LÑMÔMˆŒ
Ý  Ô!2Ô3ˆŒˆˆr.   r    r0   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )râ   rä   )r+   r    Úfirst_token_tensorÚpooled_outputs       r-   r8   zDeiTPooler.forwardQ  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐr.   rµ   r@   s   @r-   rß   rß   K  sj   ø€ € € € € ð4˜zð 4ð 4ð 4ð 4ð 4ð 4ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r.   rß   c                   óÞ   ‡ — e Zd Zddededefˆ fd„Ze ed¬¦  «        e	 	 	 	 dd	e	j
        dz  d
e	j        dz  dedz  de	j
        dz  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú	DeiTModelTFr   Úadd_pooling_layerrC   c                 ó–  •‡— t          ¦   «                              ‰¦  «         ‰| _        t          ‰|¬¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _	        t          j
        ‰j        ‰j        ¬¦  «        | _        |rt          ‰¦  «        nd| _        |                      ¦   «          dS )zû
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        use_mask_token (`bool`, *optional*, defaults to `False`):
            Whether to use a mask token for masked image modeling.
        )rC   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )r·   )Ú.0rp   r   s     €r-   ú
<listcomp>z&DeiTModel.__init__.<locals>.<listcomp>f  s!   ø€ Ð$`Ð$`Ð$`¸1¥Y¨vÑ%6Ô%6Ð$`Ð$`Ð$`r.   r¹   N)r!   r"   r   rB   rO   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersr¼   r)   r½   Ú	layernormrß   ÚpoolerÚ	post_init)r+   r   rê   rC   r,   s    `  €r-   r"   zDeiTModel.__init__\  sµ   øø€ õ 	‰Œ×Ò˜Ñ Ô Ð ØˆŒÝ(¨ÀÐOÑOÔOˆŒÝ”mÐ$`Ð$`Ð$`Ð$`ÅÀfÔF^Ñ@_Ô@_Ð$`Ñ$`Ô$`ÑaÔaˆŒÝœ fÔ&8¸fÔ>SÐTÑTÔTˆŒØ,=ÐG•j Ñ(Ô(Ð(À4ˆŒà�ŠÑÔÐÐÐr.   )Útie_last_hidden_statesNr/   rj   ri   r   r�   r0   c                 óŠ  — | j         j        j        j        j        }|j        |k    r|                     |¦  «        }|                       |||¬¦  «        }t          | j        ||¬¦  «        }|}| j        D ]}	 |	||fi |¤Ž}Œ|  	                    |¦  «        }
| j
        �|  
                    |
¦  «        nd}t          |
|¬¦  «        S )zË
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
        )rj   ri   )r   Úinputs_embedsr   N)Úlast_hidden_stateÚpooler_output)rO   rI   r*   Úweightr„   rŠ   r
   r   ró   rô   rõ   r   )r+   r/   rj   ri   r   r�   Úexpected_dtypeÚembedding_outputr    ÚlayerÚsequence_outputrç   s               r-   r8   zDeiTModel.forwardl  sð   € ð  œÔ9ÔDÔKÔQˆØÔ Ò/Ð/Ø'Ÿ?š?¨>Ñ:Ô:ˆLàŸ?š?Ø¨/ÐTlð +ñ 
ô 
Ðõ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð
 )ˆØ”[ð 	Kð 	KˆEØ!˜E -°ÐJÐJÀ6ÐJÐJˆMˆMàŸ.š.¨Ñ7Ô7ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆå)¸OÐ[hÐiÑiÔiÐir.   )TF©NNNN)r9   r:   r;   r   rw   r"   r   r   r   r=   r>   ry   r   r   r   r8   r?   r@   s   @r-   ré   ré   Z  s  ø€ € € € € ðð ˜zð ¸dð Ð[_ð ð ð ð ð ð ð   Ø€_¨EÐ2Ñ2Ô2Øð -1Ø37Ø04Ø.2ð jð  jà”l TÑ)ð jð Ô)¨DÑ0ð jð #'¨¡+ð	 jð
 œ tÑ+ð jð Ð+Ô,ð jð 
$ð jð  jð  jñ „^ñ 3Ô2ñ  Ôð jð  jð  jð  jð  jr.   ré   ad  
    DeiT Model with a decoder on top for masked image modeling, as proposed in [SimMIM](https://huggingface.co/papers/2111.09886).

    <Tip>

    Note that we provide a script to pre-train this model on custom data in our [examples
    directory](https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-pretraining).

    </Tip>
    )Úcustom_introc                   óª   ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 ddej        dz  dej	        dz  de
dej        dz  d	ee         d
efd„¦   «         ¦   «         Zˆ xZS )ÚDeiTForMaskedImageModelingr   c                 óV  •— t          ¦   «                              |¦  «         t          |dd¬¦  «        | _        t	          j        t	          j        |j        |j        dz  |j	        z  d¬¦  «        t	          j
        |j        ¦  «        ¦  «        | _        |                      ¦   «          d S )NFT)rê   rC   r3   r   )Úin_channelsÚout_channelsr   )r!   r"   ré   rÅ   r   Ú
Sequentialr(   r)   Úencoder_strider'   ÚPixelShuffleÚdecoderrö   rŸ   s     €r-   r"   z#DeiTForMaskedImageModeling.__init__Ÿ  sž   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å˜f¸ÈdÐSÑSÔSˆŒ	å”}ÝŒIØ"Ô.Ø#Ô2°AÑ5¸Ô8KÑKØðñ ô õ
 ŒO˜FÔ1Ñ2Ô2ñ
ô 
ˆŒð 	�ŠÑÔÐÐÐr.   NFr/   rj   ri   r   r�   r0   c                 ó6  —  | j         |f|||dœ|¤Ž}|j        }|dd…dd…f         }|j        \  }}	}
t          |	dz  ¦  «        x}}|                     ddd¦  «                             ||
||¦  «        }|                      |¦  «        }d}|�ñ| j        j        | j        j	        z  }|                     d||¦  «        }| 
                    | j        j	        d¦  «         
                    | j        j	        d¦  «                             d¦  «                             ¦   «         }t          j                             ||d¬	¦  «        }||z                       ¦   «         |                     ¦   «         d
z   z  | j        j        z  }t%          |||j        |j        ¬¦  «        S )a;  
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, DeiTForMaskedImageModeling
        >>> import torch
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> image_processor = AutoImageProcessor.from_pretrained("facebook/deit-base-distilled-patch16-224")
        >>> model = DeiTForMaskedImageModeling.from_pretrained("facebook/deit-base-distilled-patch16-224")

        >>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
        >>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
        >>> # create random boolean mask of shape (batch_size, num_patches)
        >>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

        >>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
        >>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
        >>> list(reconstructed_pixel_values.shape)
        [1, 3, 224, 224]
        ```)rj   ri   r   Nr3   rT   r   r   rS   Únone)Ú	reductiongñhãˆµøä>)ÚlossÚreconstructionr    rÇ   )rÅ   rú   r4   rx   r^   r]   r  r   r#   r$   Úrepeat_interleavern   r‹   r   r_   Úl1_lossÚsumr'   r   r    rÇ   )r+   r/   rj   ri   r   r�   Úoutputsr   rq   Úsequence_lengthr'   rP   rQ   Úreconstructed_pixel_valuesÚmasked_im_lossrV   rt   Úreconstruction_losss                     r-   r8   z"DeiTForMaskedImageModeling.forward°  s¼  € ðL /8¨d¬iØð/
à+Ø%=Ø)ð	/
ð /
ð
 ð/
ð /
ˆð "Ô3ˆð *¨!¨!¨!¨Q¨R¨R¨%Ô0ˆØ4CÔ4IÑ1ˆ
�O \Ý˜_¨cÑ1Ñ2Ô2Ð2ˆ�Ø)×1Ò1°!°Q¸Ñ:Ô:×BÒBÀ:È|Ð]cÐejÑkÔkˆð &*§\¢\°/Ñ%BÔ%BÐ"àˆØÐ&Ø”;Ô)¨T¬[Ô-CÑCˆDØ-×5Ò5°b¸$ÀÑEÔEˆOà×1Ò1°$´+Ô2HÈ!ÑLÔLß"Ò" 4¤;Ô#9¸1Ñ=Ô=ß’˜1‘”ß’‘”ð	 õ #%¤-×"7Ò"7¸ÐF`ÐlrÐ"7Ñ"sÔ"sÐØ1°DÑ8×=Ò=Ñ?Ô?À4Ç8Â8Á:Ä:ÐPTÑCTÑUÐX\ÔXcÔXpÑpˆNå(ØØ5Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r.   )NNFN)r9   r:   r;   r   r"   r   r   r=   r>   ry   rw   r   r   r   r8   r?   r@   s   @r-   r  r  ’  sç   ø€ € € € € ð˜zð ð ð ð ð ð ð" Øð -1Ø37Ø).Ø.2ðJ
ð J
à”l TÑ)ðJ
ð Ô)¨DÑ0ðJ
ð #'ð	J
ð
 œ tÑ+ðJ
ð Ð+Ô,ðJ
ð 
#ðJ
ð J
ð J
ñ „^ñ ÔðJ
ð J
ð J
ð J
ð J
r.   r  aâ  
    DeiT Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.

    <Tip>

        Note that it's possible to fine-tune DeiT on higher resolution images than the ones it has been trained on, by
        setting `interpolate_pos_encoding` to `True` in the forward of the model. This will interpolate the pre-trained
        position embeddings to the higher resolution.

    </Tip>
    c                   ó°   ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 ddej        dz  dej        dz  de	dz  dej        dz  de
e         d	efd
„¦   «         ¦   «         Zˆ xZS )ÚDeiTForImageClassificationr   c                 ó:  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        dk    rt          j        |j        |j        ¦  «        nt          j        ¦   «         | _	        |  
                    ¦   «          d S ©NF)rê   r   )r!   r"   Ú
num_labelsré   rÅ   r   r™   r)   ÚIdentityÚ
classifierrö   rŸ   s     €r-   r"   z#DeiTForImageClassification.__init__  s‹   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð>Ñ>Ô>ˆŒ	ð OUÔN_ÐbcÒNcÐNc�"œ) FÔ$6¸Ô8IÑJÔJÐJÕikÔitÑivÔivˆŒð 	�ŠÑÔÐÐÐr.   Nr/   Úlabelsri   r   r�   r0   c                 óæ   —  | j         |f||dœ|¤Ž}|j        }|dd…ddd…f         }|                      |¦  «        }	d}
|� | j        ||	| j        fi |¤Ž}
t          |
|	|j        |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).
        ©ri   r   Nr   )r  Úlogitsr    rÇ   )rÅ   rú   r  Úloss_functionr   r   r    rÇ   )r+   r/   r   ri   r   r�   r  r   rç   r#  r  s              r-   r8   z"DeiTForImageClassification.forward  s»   € ð" /8¨d¬iØð/
à%=Ø)ð/
ð /
ð ð	/
ð /
ˆð "Ô3ˆØ'¨¨¨¨1¨a¨a¨a¨Ô0ˆØ—’ Ñ/Ô/ˆàˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r.   r  )r9   r:   r;   r   r"   r   r   r=   r>   rw   r   r   r   r8   r?   r@   s   @r-   r  r  ÿ  sÛ   ø€ € € € € ð
˜zð 
ð 
ð 
ð 
ð 
ð 
ð Øð -1Ø&*Ø04Ø.2ð#
ð #
à”l TÑ)ð#
ð ”˜tÑ#ð#
ð #'¨¡+ð	#
ð
 œ tÑ+ð#
ð Ð+Ô,ð#
ð 
ð#
ð #
ð #
ñ „^ñ Ôð#
ð #
ð #
ð #
ð #
r.   r  zC
    Output type of [`DeiTForImageClassificationWithTeacher`].
    c                   óÂ   — 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Zeej                 dz  ed<   dS )Ú+DeiTForImageClassificationWithTeacherOutputaj  
    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).
    Nr#  Ú
cls_logitsÚdistillation_logitsr    rÇ   )r9   r:   r;   r<   r#  r=   ÚFloatTensorrÐ   r'  r(  r    r«   rÇ   rí   r.   r-   r&  r&  B  s¡   € € € € € € ð	ð 	ð (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø+/€J�Ô! DÑ(Ð/Ð/Ñ/Ø48Ð˜Ô*¨TÑ1Ð8Ð8Ñ8Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r.   r&  aˆ  
    DeiT Model transformer with image classification heads on top (a linear layer on top of the final hidden state of
    the [CLS] token 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                   ó˜   ‡ — e Zd Zdeddfˆ fd„Zee	 	 	 ddej        dz  de	dej        dz  d	e
e         def
d
„¦   «         ¦   «         Zˆ xZS )Ú%DeiTForImageClassificationWithTeacherr   r0   Nc                 ó¾  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        dk    rt          j        |j        |j        ¦  «        nt          j        ¦   «         | _	        |j        dk    rt          j        |j        |j        ¦  «        nt          j        ¦   «         | _
        |                      ¦   «          d S r  )r!   r"   r  ré   rÅ   r   r™   r)   r  Úcls_classifierÚdistillation_classifierrö   rŸ   s     €r-   r"   z.DeiTForImageClassificationWithTeacher.__init__g  sÍ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ˜f¸Ð>Ñ>Ô>ˆŒ	ð AGÔ@QÐTUÒ@UÐ@U�BŒI�fÔ(¨&Ô*;Ñ<Ô<Ð<Õ[]Ô[fÑ[hÔ[hð 	Ôð AGÔ@QÐTUÒ@UÐ@U�BŒI�fÔ(¨&Ô*;Ñ<Ô<Ð<Õ[]Ô[fÑ[hÔ[hð 	Ô$ð
 	�ŠÑÔÐÐÐr.   Fr/   ri   r   r�   c                 ó  —  | j         |f||dœ|¤Ž}|j        }|                      |d d …dd d …f         ¦  «        }|                      |d d …dd d …f         ¦  «        }||z   dz  }	t	          |	|||j        |j        ¬¦  «        S )Nr"  r   r   r3   )r#  r'  r(  r    rÇ   )rÅ   rú   r-  r.  r&  r    rÇ   )
r+   r/   ri   r   r�   r  r   r'  r(  r#  s
             r-   r8   z-DeiTForImageClassificationWithTeacher.forwardx  sÌ   € ð /8¨d¬iØð/
à%=Ø)ð/
ð /
ð ð	/
ð /
ˆð "Ô3ˆà×(Ò(¨¸¸¸¸A¸q¸q¸q¸Ô)AÑBÔBˆ
Ø"×:Ò:¸?È1È1È1ÈaÐQRÐQRÐQRÈ7Ô;SÑTÔTÐð Ð2Ñ2°aÑ7ˆå:ØØ!Ø 3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r.   )NFN)r9   r:   r;   r   r"   r   r   r=   r>   rw   r   r   r&  r8   r?   r@   s   @r-   r+  r+  [  sÊ   ø€ € € € € ð˜zð ¨dð ð ð ð ð ð ð" Øð -1Ø).Ø.2ð	
ð 
à”l TÑ)ð
ð #'ð
ð œ tÑ+ð	
ð
 Ð+Ô,ð
ð 
5ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r.   r+  )r  r+  r  ré   rÄ   )Nrz   )6Úcollections.abcr   r   Údataclassesr   r=   r   Ú r   rÌ   Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_deitr   ÚModuler   rB   r>   ÚfloatrŽ   r�   r­   r·   rÄ   rß   ré   r  r  r&  r+  Ú__all__rí   r.   r-   ú<module>r@     s¾  ðð* /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *ðHð Hð Hð Hð H˜"œ)ñ Hô Hð Hð<`ð `ð `ð `ð `�R”Yñ `ô `ð `ðR !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8.)ð .)ð .)ð .)ð .)�B”Iñ .)ô .)ð .)ðbð ð ð ð ˆbŒiñ ô ð ð ð ð ð ð Ð*ñ ô ð ð@ ð!/ð !/ð !/ð !/ð !/˜/ñ !/ô !/ñ „ð!/ðHð ð ð ð �”ñ ô ð ð ð4jð 4jð 4jð 4jð 4jÐ#ñ 4jô 4jñ „ð4jðn €ð	ðñ ô ð^
ð ^
ð ^
ð ^
ð ^
Ð!4ñ ^
ô ^
ñô ð^
ðB €ððñ ô ð2
ð 2
ð 2
ð 2
ð 2
Ð!4ñ 2
ô 2
ñô ð2
ðj €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7°+ñ 7ô 7ñ „ñô ð7ð& €ðð
ñ 
ô 
ð0
ð 0
ð 0
ð 0
ð 0
Ð,?ñ 0
ô 0
ñ
ô 
ð0
ðfð ð €€€r.   