Ë
    ÛÓ^jdn  ã                   ój  — 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jJ                  «      Z& G d„ dejJ                  «      Z'	 	 d9dejJ                  dejP                  dejP                  dejP                  dejP                  dz  de)dz  de)dee   fd„Z* G d„ d ejJ                  «      Z+ G d!„ d"ejJ                  «      Z, G d#„ d$e«      Z-e G d%„ d&e«      «       Z. G d'„ d(ejJ                  «      Z/e G d)„ d*e.«      «       Z0 ed+¬,«       G d-„ d.e.«      «       Z1 ed/¬,«       G d0„ d1e.«      «       Z2 ed2¬,«      e G d3„ d4e«      «       «       Z3 ed5¬,«       G d6„ d7e.«      «       Z4g d8¢Z5y):é    )Ú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                   ó`   ‡ — 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                  ||¬«      | _        y )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       €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/deit/modeling_deit.pyr"   zDeiTPatchEmbeddings.__init__/   sº   ø€ Ü‰ÑÔØ×&Ñ&ˆ
Ø×&Ñ&ˆ
Ü#-¨j¼(Ô#C‘ZÈ*ÐV`ÐIaˆ
Ü#-¨j¼(Ô#C‘ZÈ*ÐV`ÐIaˆ
à& q™M¨Z¸©]Ñ:¸zÈ!¹}ÐPZÐ[\ÑP]Ñ?]Ñ^ˆÔØ$ˆŒØ$ˆŒØ"×/Ñ/ˆÔÜŸ)™) F×$7Ñ$7¸×9KÑ9KÐYcÐlvÔwˆ�ó    Úpixel_valuesÚreturnc                 óÖ   — |j                   d   }|| j                  k7  rt        d| j                  › d|› d�«      ‚| j                  |«      j	                  d«      j                  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<   su   € Ø#×)Ñ)¨!Ñ,ˆØ˜4×,Ñ,Ò,ÜðØ!×.Ñ.Ð/¨y¸¸ÀaðIóð ð �‰˜|Ó,×4Ñ4°QÓ7×AÑAÀ!ÀQÓGÐGr.   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   ÚtorchÚTensorr8   Ú__classcell__©r,   s   @r-   r   r   (   s4   ø„ ñðx˜zõ xðH E§L¡Lð H°U·\±\÷ 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.
    r   Úuse_mask_tokenr0   Nc                 óä  •— t         ‰| �  «        t        j                  t	        j
                  dd|j                  «      «      | _        |r4t        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                  «      «      | _        y )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¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒÙQ_œ"Ÿ,™,¤u§{¡{°1°a¸×9KÑ9KÓ'LÔMÐeiˆŒÜ 3°FÓ ;ˆÔØ×+Ñ+×7Ñ7ˆä#%§<¡<´·±¸A¸{ÈQ¹ÐPV×PbÑPbÓ0cÓ#dˆÔ Ü—z‘z &×"<Ñ"<Ó=ˆŒØ ×+Ñ+ˆŒØ×/Ñ/×:Ñ:ˆŒÜ"$§,¡,¬u¯{©{¸1¸aÀ×ASÑASÓ/TÓ"UˆÕr.   Ú
embeddingsÚheightÚwidthc                 ó¦  — |j                   d   dz
  }| j                  j                   d   dz
  }t        j                  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  «      }|j                  d|||«      }|j                  dddd«      }t        j                  j                  ||	|
fdd	¬
«      }|j                  dddd«      j                  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^   sb  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à#'×#;Ñ#;ºA¸rÀ¸r¸EÑ#BÐ Ø×2Ñ2²1°a±b°5Ñ9ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰yÐ2°OÐDÈ!ÔLÐLr.   r/   Úbool_masked_posri   c                 óÒ  — |j                   \  }}}}| j                  |«      }|j                  «       \  }}	}|�K| j                  j	                  ||	d«      }
|j                  d«      j                  |
«      }|d|z
  z  |
|z  z   }| j                  j	                  |dd«      }| j                  j	                  |dd«      }t        j                  |||fd¬«      }|r|| j                  |||«      z   }ne|| j                  d   k7  s|| j                  d   k7  r2t        d|› d|› d| j                  d   › d| j                  d   › d	�	«      ‚|| j                  z   }| j                  |«      }|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Ñ0Ñˆˆ1ˆf�eØ×*Ñ*¨<Ó8ˆ
à$.§O¡OÓ$5Ñ!ˆ
�J àÐ&ØŸ/™/×0Ñ0°¸ZÈÓLˆKà"×,Ñ,¨RÓ0×8Ñ8¸ÓEˆDØ# s¨T¡zÑ2°[À4Ñ5GÑGˆJà—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ø"×5Ñ5×<Ñ<¸ZÈÈRÓPÐÜ—Y‘Y 
Ð,?ÀÐLÐRSÔTˆ
á#Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^‰Jà˜Ÿ™¨Ñ+Ò+¨u¸¿¹ÈÑ8JÒ/JÜ Ø(¨¨°°%°ð 9ØŸ™¨Ñ+Ð,¨A¨d¯o©o¸aÑ.@Ð-AÀð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˜zð V¸4ð VÈDõ Vð&M°5·<±<ð &MÈð &MÐUXð &MÐ]b×]iÑ]ió &MðV 48Ø).ñ	 à—l‘lð ð ×)Ñ)¨DÑ0ð ð #'ð	 ð
 
�‰÷ r.   rB   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrM   Úkwargsc                 óì  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |dt        j                  ¬«      j                  |j                  «      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )NrS   ç      à¿r3   r   )rZ   Údtype)ÚpÚtrainingr   )rV   r=   Úmatmulr7   r   r_   ÚsoftmaxÚfloat32Útorƒ   rM   r…   Ú
contiguous)
rz   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×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ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¬«      | _        y )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Ñ4FÈ&×JdÑJdÑ4dÓeˆŒØ!'×!DÑ!DˆÔØ—}‘} dÑ*ˆŒØˆŒä—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^Ðek×etÑetÔuˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^Ðek×etÑetÔuˆŒÜ—i‘i × 2Ñ 2°F×4NÑ4NÐQU×Q^ÑQ^Ñ4^Ðek×etÑetÔuˆŒÜ—i‘i × :Ñ :¸T¿]¹]Ñ JÈF×L^ÑL^ÐeiÔjˆ�r.   NÚhidden_statesr~   r€   r0   c                 óš  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  | j                  dœ|¤Ž\  }
} |
j                  g |¢d‘­Ž j!                  «       }
| j#                  |
«      }
|
|fS )NrS   r   r3   ç        )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Ô   sK  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆà˜LÐ(Ð(r.   ©N)r9   r:   r;   r   r"   r=   r>   r   r   Útupler8   r?   r@   s   @r-   r�   r�   Å   sf   ø„ ðk˜zõ kð" /3ñ)à—|‘|ð)ð Ÿ™ tÑ+ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷)r.   r�   c                   ó\   ‡ — 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                  «      | _        y rª   )r!   r"   r   r	   Ú
hidden_actÚactivation_fnr   r˜   r)   Úintermediate_sizeÚfc1Úfc2rž   s     €r-   r"   zDeiTMLP.__init__÷   sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r.   rŸ   r0   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rª   )r²   r°   r³   )r+   rŸ   s     r-   r8   zDeiTMLP.forwardþ   s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆàÐr.   ©	r9   r:   r;   r   r"   r=   r>   r8   r?   r@   s   @r-   r­   r­   ö   s,   ø„ ðK˜zõ Kð U§\¡\ð °e·l±l÷ r.   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j                  fd„Z	ˆ xZ
S )
Ú	DeiTLayerr   c                 ój  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  ¬«      | _        t	        j
                  |j                  |j                  ¬«      | _	        t        |«      | _        t	        j                  |j                  «      | _        y )N©Úeps)r!   r"   r�   Ú	attentionr   Ú	LayerNormr)   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr­   ÚmlprK   rL   rM   rž   s     €r-   r"   zDeiTLayer.__init__  sy   ø€ Ü‰ÑÔÜ& vÓ.ˆŒÜ "§¡¨V×-?Ñ-?ÀV×EZÑEZÔ [ˆÔÜ!Ÿ|™|¨F×,>Ñ,>ÀF×DYÑDYÔZˆÔÜ˜6“?ˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r.   NrŸ   r~   r€   r0   c                 óú   — |}| j                  |«      } | j                  ||fi |¤Ž\  }}| j                  |«      }||z   }|}| j                  |«      }| j	                  |«      }| j                  |«      }||z   }|S rª   )r¾   r»   rM   r¿   rÀ   )r+   rŸ   r~   r€   Úresidualrp   s         r-   r8   zDeiTLayer.forward  s�   € ð !ˆØ×-Ñ-¨mÓ<ˆØ)˜4Ÿ>™>¨-¸ÑRÈ6ÑRÑˆ�qØŸ™ ]Ó3ˆØ%¨Ñ0ˆð !ˆØ×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØŸ™ ]Ó3ˆØ%¨Ñ0ˆàÐr.   rª   )r9   r:   r;   r   r"   r=   r>   r   r   r8   r?   r@   s   @r-   r·   r·     sV   ø„ ð>˜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j0                  z  ddfˆ fd„«       Zˆ xZS )ÚDeiTPreTrainedModelr   Údeitr/   )ÚimageTrB   r·   )rŸ   Ú
attentionsrI   rz   r0   Nc                 ó¾  •— t         ‰| �  |«       t        |t        «      r£|j                  �6t        j                  |j                  d| j                  j                  ¬«       t        j                  |j                  d| j                  j                  ¬«       |j                  �t        j                  |j                  «       t        |t        «      rŠt        j                  |j                  «       t        j                  |j                  «       t        j                  |j                  «       |j                  � t        j                  |j                  «       yyy)zInitialize the weightsNr¡   )ÚmeanÚstd)r!   Ú_init_weightsr%   rB   rJ   ÚinitÚtrunc_normal_r   Úinitializer_rangerG   rH   Úzeros_rN   )r+   rz   r,   s     €r-   rË   z!DeiTPreTrainedModel._init_weights9  sò   ø€ ô 	‰Ñ˜fÔ%Ü�fœnÔ-Ø×)Ñ)Ð5Ü×"Ñ" 6×#=Ñ#=ÀCÈTÏ[É[×MjÑMjÕkÜ×Ñ˜v×/Ñ/°c¸t¿{¹{×?\Ñ?\Õ]Ø× Ñ Ð,Ü—‘˜F×-Ñ-Ô.Ü�fœnÔ-Ü�K‰K˜×(Ñ(Ô)Ü�K‰K˜×2Ñ2Ô3Ü�K‰K˜×1Ñ1Ô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¡I°·	±	Ñ$9¸B¿L¹LÑ$Hð /ÈTô /ó ô/r.   rÄ   c                   ó\   ‡ — 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                     | _	        y rª   )
r!   r"   r   r˜   r)   Úpooler_output_sizeÚdenser	   Ú
pooler_actÚ
activationrž   s     €r-   r"   zDeiTPooler.__init__L  s>   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3LÑ3LÓMˆŒ
Ü  ×!2Ñ!2Ñ3ˆ�r.   rŸ   r0   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )râ   rä   )r+   rŸ   Úfirst_token_tensorÚpooled_outputs       r-   r8   zDeiTPooler.forwardQ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr.   rµ   r@   s   @r-   rß   rß   K  s*   ø„ ð4˜zõ 4ð
 U§\¡\ð °e·l±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 )Ú	DeiTModelFr   Úadd_pooling_layerrC   c                 ó�  •— t         ‰| �  |«       || _        t        ||¬«      | _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _
        t        j                  |j                  |j                  ¬«      | _        |rt        |«      nd| _        | j#                  «        yc c}w )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   r¹   N)r!   r"   r   rB   rO   r   Ú
ModuleListÚrangeÚnum_hidden_layersr·   Úlayersr¼   r)   r½   Ú	layernormrß   ÚpoolerÚ	post_init)r+   r   rê   rC   rp   r,   s        €r-   r"   zDeiTModel.__init__\  s�   ø€ ô 	‰Ñ˜Ô ØˆŒÜ(¨ÀÔOˆŒÜ—m‘mÄÀf×F^ÑF^Ó@_Ö$`¸1¤Y¨vÕ%6Ò$`ÓaˆŒÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÙ,=”j Ô(À4ˆŒà�‰Õùò	 %as   ÁC)Útie_last_hidden_statesNr/   rj   ri   r~   r€   r0   c                 ó¶  — | j                   j                  j                  j                  j                  }|j                  |k7  r|j                  |«      }| j                  |||¬«      }t        | j                  ||¬«      }|}| j                  D ]  }	 |	||fi |¤Ž}Œ | j                  |«      }
| j                  �| 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Ñ9×DÑD×KÑK×QÑQˆØ×Ñ Ò/Ø'Ÿ?™?¨>Ó:ˆLàŸ?™?Ø¨/ÐTlð +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð
 )ˆØ—[‘[ò 	KˆEÙ! -°ÑJÀ6ÑJ‰Mð	Kð Ÿ.™.¨Ó7ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä)¸OÐ[hÔ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Øð -1Ø37Ø04Ø.2ñ jà—l‘l TÑ)ð jð ×)Ñ)¨DÑ0ð jð #'¨¡+ð	 jð
 Ÿ™ tÑ+ð jð Ð+Ñ,ð jð 
$ò jó ó 3ó  ô 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                 óN  •— t         ‰| �  |«       t        |dd¬«      | _        t	        j
                  t	        j                  |j                  |j                  dz  |j                  z  d¬«      t	        j                  |j                  «      «      | _        | j                  «        y )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ˆŒ	ä—}‘}Ü�I‰IØ"×.Ñ.Ø#×2Ñ2°AÑ5¸×8KÑ8KÑKØôô
 �O‰O˜F×1Ñ1Ó2ó
ˆŒð 	�‰Õr.   Nr/   rj   ri   r~   r€   r0   c                 óh  —  | j                   |f|||dœ|¤Ž}|j                  }|dd…dd…f   }|j                  \  }}	}
t        |	dz  «      x}}|j	                  ddd«      j                  ||
||«      }| j                  |«      }d}|��| j                  j                  | j                  j                  z  }|j                  d||«      }|j                  | j                  j                  d«      j                  | j                  j                  d«      j                  d«      j                  «       }t        j                  j                  ||d¬	«      }||z  j!                  «       |j!                  «       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©iØð/
à+Ø%=Ø)ñ	/
ð
 ñ/
ˆð "×3Ñ3ˆð *ª!¨Q©R¨%Ñ0ˆØ4C×4IÑ4IÑ1ˆ
�O \Ü˜_¨cÑ1Ó2Ð2ˆ�Ø)×1Ñ1°!°Q¸Ó:×BÑBÀ:È|Ð]cÐejÓkˆð &*§\¡\°/Ó%BÐ"àˆØÑ&Ø—;‘;×)Ñ)¨T¯[©[×-CÑ-CÑCˆDØ-×5Ñ5°b¸$ÀÓEˆOà×1Ñ1°$·+±+×2HÑ2HÈ!ÓLß"Ñ" 4§;¡;×#9Ñ#9¸1Ó=ß‘˜1“ß‘“ð	 ô #%§-¡-×"7Ñ"7¸ÐF`ÐlrÐ"7Ó"sÐØ1°DÑ8×=Ñ=Ó?À4Ç8Á8Ã:ÐPTÑCTÑUÐX\×XcÑXc×XpÑ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
à—l‘l TÑ)ðJ
ð ×)Ñ)¨DÑ0ðJ
ð #'ð	J
ð
 Ÿ™ tÑ+ð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kD  r*t        j                  |j                  |j                  «      nt        j                  «       | _	        | j                  «        y ©NF)rê   r   )r!   r"   Ú
num_labelsré   rÅ   r   r˜   r)   ÚIdentityÚ
classifierrò   rž   s     €r-   r"   z#DeiTForImageClassification.__init__  ss   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ˜f¸Ô>ˆŒ	ð OU×N_ÑN_ÐbcÒNcœ"Ÿ)™) F×$6Ñ$6¸×8IÑ8IÔJÔik×itÑitÓivˆŒð 	�‰Õr.   Nr/   Úlabelsri   r~   r€   r0   c                 ó  —  | j                   |f||dœ|¤Ž}|j                  }|dd…ddd…f   }| j                  |«      }	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©iØð/
à%=Ø)ñ/
ð ñ	/
ˆð "×3Ñ3ˆØ'ª¨1ªa¨Ñ0ˆØ—‘ Ó/ˆàˆØÐØ%�4×%Ñ% f¨f°d·k±kÑLÀVÑ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‘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<   y)Ú+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"  B  s}   … ñ	ð (,€FˆE×Ñ Ñ$Ó+Ø+/€J�×!Ñ! DÑ(Ó/Ø48Ð˜×*Ñ*¨TÑ1Ó8Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô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kD  r*t        j                  |j                  |j                  «      nt        j                  «       | _	        |j                  dkD  r*t        j                  |j                  |j                  «      nt        j                  «       | _
        | j                  «        y 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Ñ@QÐTUÒ@UŒB�I‰I�f×(Ñ(¨&×*;Ñ*;Ô<Ô[]×[fÑ[fÓ[hð 	Ôð AG×@QÑ@QÐTUÒ@UŒB�I‰I�f×(Ñ(¨&×*;Ñ*;Ô<Ô[]×[fÑ[fÓ[hð 	Ô$ð
 	�‰Õr.   r/   ri   r~   r€   c                 ó
  —  | j                   |f||dœ|¤Ž}|j                  }| j                  |d d …dd d …f   «      }| j                  |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©iØð/
à%=Ø)ñ/
ð ñ	/
ˆð "×3Ñ3ˆà×(Ñ(¨º¸Aºq¸Ñ)AÓBˆ
Ø"×:Ñ:¸?Ê1ÈaÒQRÈ7Ñ;SÓ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‘l TÑ)ð
ð #'ð
ð Ÿ™ tÑ+ð	
ð
 Ð+Ñ,ð
ð 
5ò
ó ó ô
r.   r(  )r  r(  r   ré   rÄ   )Nr¡   )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Ý 9ß lÑ lß FÝ &ß OÓ Oß IÝ 5Ý *ôH˜"Ÿ)™)ô Hô<`�R—Y‘Yô `ðR !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô8.)�B—I‘Iô .)ôbˆb�i‰iô ô Ð*ô ð@ ô!/˜/ó !/ó ð!/ôH�—‘ô ð ô4jÐ#ó 4jó ð4jñn ð	ôô^
Ð!4ó ^
óð^
ñB ðôô2
Ð!4ó 2
óð2
ñj ðôð
 ô7°+ó 7ó óð7ñ& ðô
ô0
Ð,?ó 0
ó
ð0
òf�r.   