Ë
    ÜÓ^jkW  ã                   óf  — 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mZ ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlmZ ddlmZ  G d„ dej<                  «      Z G d„ dej<                  «      Z  G d„ dej<                  «      Z!	 d4dej<                  dejD                  dejD                  dejD                  dejD                  dz  de#de#dee   fd„Z$d„ Z%dejD                  d e&d!ejD                  fd"„Z'd#ejD                  d$ejD                  d%ejD                  d&ejD                  d!e(ejD                  ejD                  f   f
d'„Z) G d(„ d)ej<                  «      Z* G d*„ d+e«      Z+ G d,„ d-ej<                  «      Z,e G d.„ d/e«      «       Z- ed0¬1«       G d2„ d3e-«      «       Z.d/d3gZ/y)5é    )ÚCallableNé   )Úinitialization)ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚMLCDVisionConfigc                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMLCDMLPc                 ó  •— t         ‰| �  «        || _        t        |j                     | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y ©N)ÚsuperÚ__init__Úconfigr   Ú
hidden_actÚactivation_fnÚnnÚLinearÚhidden_sizeÚintermediate_sizeÚfc1Úfc2©Úselfr   Ú	__class__s     €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mlcd/modeling_mlcd.pyr   zMLCDMLP.__init__&   sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�ó    Úhidden_statesÚreturnc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r   )r!   r   r"   )r$   r(   s     r&   ÚforwardzMLCDMLP.forward-   s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr'   )Ú__name__Ú
__module__Ú__qualname__r   ÚtorchÚTensorr+   Ú__classcell__©r%   s   @r&   r   r   %   s$   ø„ ôKð U§\¡\ð °e·l±l÷ r'   r   c                   ó†   ‡ — e Zd ZU ej                  ed<   d	dededdfˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )
ÚMLCDRotaryEmbeddingÚinv_freqÚdimÚthetar)   Nc                 óÆ   •— t         ‰| �  «        || _        || _        d|t	        j
                  d|dt        j                  ¬«      |z  z  z  }| j                  d|d¬«       y )Nç      ð?r   é   ©Údtyper5   F©Ú
persistent)r   r   r6   r7   r/   ÚarangeÚfloatÚregister_buffer)r$   r6   r7   r5   r%   s       €r&   r   zMLCDRotaryEmbedding.__init__7   sY   ø€ Ü‰ÑÔØˆŒØˆŒ
Ø˜%¤E§L¡L°°C¸Ä%Ç+Á+Ô$NÐQTÑ$TÑUÑVˆØ×Ñ˜Z¨¸eÐÕDr'   Úposition_idsc                 ó\   — |j                  d«      | j                  z  j                  d«      S )Néÿÿÿÿr   )Ú	unsqueezer5   Úflatten)r$   rB   s     r&   r+   zMLCDRotaryEmbedding.forward>   s'   € Ø×&Ñ& rÓ*¨T¯]©]Ñ:×CÑCÀAÓFÐFr'   )g     ˆÃ@)r,   r-   r.   r/   r0   Ú__annotations__Úintr@   r   r+   r1   r2   s   @r&   r4   r4   4   sI   ø… Ø�l‰lÓñE˜Cð E¨ð E¸Dõ EðG E§L¡Lð G°U·\±\÷ Gr'   r4   c                   óœ   ‡ — e Zd Zdefˆ fd„Zdej                  dededej                  fd„Zdej                  dej                  fd	„Z
ˆ xZS )
ÚMLCDVisionEmbeddingsr   c                 ó|  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  t        j                  | j                  «      «      | _        t        j                  |j                  | j                  | j                  | j                  d¬«      | _        | j
                  | j                  z  dz  | _        | j                  dz   | _        | j#                  dt        j$                  | j                   «      j'                  d«      d¬«       y )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasr:   r   rB   ©r   rD   r=   )r   r   r   r   Ú	embed_dimÚ
image_sizeÚ
patch_sizer   Ú	Parameterr/   ÚrandnÚclass_embeddingÚConv2dÚnum_channelsÚpatch_embeddingÚnum_patchesÚnum_positionsrA   r?   Úexpandr#   s     €r&   r   zMLCDVisionEmbeddings.__init__C   sì   ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿ|™|¬E¯K©K¸¿¹Ó,GÓHˆÔä!Ÿy™yØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øô 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔØ×Ñ˜^¬U¯\©\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÕpr'   Ú
embeddingsÚheightÚwidthr)   c                 óÒ  — |j                   d   dz
  }| j                  j                  j                  d«      }|j                   d   dz
  }t        j
                  j                  «       s%||k(  r ||k(  r| j                  | j                  «      S |dd…dd…f   }|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.

        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   r   NrD   g      à?r   r:   ÚbicubicF)ÚsizeÚmodeÚalign_corners©r6   )ÚshapeÚposition_embeddingÚweightrE   r/   ÚjitÚ
is_tracingrB   rT   r   ÚreshapeÚpermuter   Ú
functionalÚinterpolateÚviewÚcat)r$   r^   r_   r`   r[   rh   r\   Úclass_pos_embedÚpatch_pos_embedr6   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r&   Úinterpolate_pos_encodingz-MLCDVisionEmbeddings.interpolate_pos_encodingX   sv  € ð !×&Ñ& qÑ)¨AÑ-ˆØ!×4Ñ4×;Ñ;×EÑEÀaÓHÐØ*×0Ñ0°Ñ3°aÑ7ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à,ªQ°°°¨UÑ3ˆØ,ªQ°±¨UÑ3ˆà×Ñ˜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˜/¨?Ð;ÀÔCÐCr'   Úpixel_valuesc                 óT  — |j                   d   }| j                  j                  j                  }| j                  |j	                  |¬«      «      }|j                  d«      j                  dd«      }| j                  j                  |dd«      }t        j                  ||gd¬«      }|S )Nr   r;   r:   r   rD   rf   )rg   rZ   ri   r<   ÚtorF   Ú	transposerW   r]   r/   rq   )r$   rx   Ú
batch_sizeÚtarget_dtypeÚpatch_embedsÚclass_embedsr^   s          r&   r+   zMLCDVisionEmbeddings.forward�   s–   € Ø!×'Ñ'¨Ñ*ˆ
Ø×+Ñ+×2Ñ2×8Ñ8ˆà×+Ñ+¨L¯O©OÀ,¨OÓ,OÓPˆØ#×+Ñ+¨AÓ.×8Ñ8¸¸AÓ>ˆà×+Ñ+×2Ñ2°:¸qÀ"ÓEˆÜ—Y‘Y ¨lÐ;ÀÔCˆ
àÐr'   )r,   r-   r.   r   r   r/   r0   rH   rw   ÚFloatTensorr+   r1   r2   s   @r&   rJ   rJ   B   sb   ø„ ðqÐ/õ qð*'D°5·<±<ð 'DÈð 'DÐUXð 'DÐ]b×]iÑ]ió 'DðR
 E×$5Ñ$5ð 
¸%¿,¹,÷ 
r'   rJ   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	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 )Nr:   r   rD   )r6   r<   )ÚpÚtrainingr   )Ú	repeat_kvÚnum_key_value_groupsr/   Úmatmulr{   r   rn   ÚsoftmaxÚfloat32rz   r<   r‡   r‹   Ú
contiguous)r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r&   Úeager_attention_forwardr–   Ž   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r'   c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..NrD   r:   rf   )rg   r/   rq   )ÚxÚx1Úx2s      r&   Úrotate_halfr›   §   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r'   r(   Ún_repr)   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r   N)rg   r]   rl   )r(   rœ   ÚbatchÚnum_key_value_headsÚslenÚhead_dims         r&   rŒ   rŒ   ®   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr'   ÚqÚkÚcosÚsinc                 óŠ  — | j                   }|j                   }| j                  «       |j                  «       }} |j                  d«      j                  «       |j                  d«      j                  «       }}| |z  t        | «      |z  z   }||z  t        |«      |z  z   }|j	                  |«      }|j	                  |«      }||fS )Néþÿÿÿ)r<   r@   rE   r›   rz   )r¢   r£   r¤   r¥   Úorig_q_dtypeÚorig_k_dtypeÚq_embedÚk_embeds           r&   Úapply_rotary_pos_emb_visionr¬   º   s­   € ð —7‘7€LØ—7‘7€LØ�7‰7‹9�a—g‘g“i€q€AØ�}‰}˜RÓ ×&Ñ&Ó(¨#¯-©-¸Ó*;×*AÑ*AÓ*Cˆ€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�j‰j˜Ó&€GØ�j‰j˜Ó&€GØ�GÐÐr'   c                   óæ   ‡ — e Zd ZdZdefˆ fd„Z	 ddej                  deej                  ej                  f   dej                  dz  de	e
   d	eej                  ej                  dz  f   f
d
„Zˆ xZS )ÚMLCDAttentionzÿMulti-headed attention with RoPE. Refer to papers:
    - Attention is all you need:
        https://huggingface.co/papers/1706.03762
    - RoFormer: Enhanced Transformer with Rotary Position Embedding:
        https://huggingface.co/papers/2104.09864
    r   c                 ó¢  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  dz  | _        |j                  | _
        d| _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        |j$                  | _        y )Nç      à¿F)r   r   r   r   rR   Únum_attention_headsÚ	num_headsr¡   ÚscaleÚattention_dropoutr‡   Ú	is_causalr   r   Úk_projÚv_projÚq_projÚout_projr�   r#   s     €r&   r   zMLCDAttention.__init__Ð   sÝ   ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ—]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜŸ	™	 $§.¡.°$·.±.ÓAˆŒØ$*×$?Ñ$?ˆÕ!r'   Nr(   Úposition_embeddingsr…   rˆ   r)   c                 óž  — |j                   dd \  }}| j                  |«      j                  ||| j                  | j                  f«      }| j                  |«      j                  ||| j                  | j                  f«      }| j                  |«      j                  ||| j                  | j                  f«      }	|d   j                  d«      j                  «       }
|d   j                  d«      j                  «       }t        |||
|«      \  }}|j                  dddd«      j                  «       }|j                  dddd«      j                  «       }|	j                  dddd«      j                  «       }	t        j                  | j                  j                  t         «      } || |||	|f| j"                  sdn| j$                  | j&                  | j(                  dœ|¤Ž\  }}|j                  dddd«      j                  «       }|j+                  ||d«      }| j-                  |«      }|j                  ddd«      j                  «       }||fS )	z#Input shape: Batch x Time x ChannelNrD   r   r   r:   r   ç        )r‡   r†   rµ   )rg   r¸   rl   r²   r¡   r¶   r·   rE   r@   r¬   rm   r‘   r
   Úget_interfacer   Ú_attn_implementationr–   r‹   r‡   r³   rµ   rp   r¹   )r$   r(   rº   r…   rˆ   r|   Ú
seq_lengthÚquery_statesr’   r“   r¤   r¥   Úattention_interfacer•   r”   s                  r&   r+   zMLCDAttention.forwardà   s;  € ð "/×!4Ñ!4°S°bÐ!9Ñˆ
�Jð —{‘{ =Ó1×9Ñ9¸:ÀzÐSW×SaÑSaÐcg×cpÑcpÐ:qÓrˆØ—[‘[ Ó/×7Ñ7¸ÀZÐQU×Q_ÑQ_Ðae×anÑanÐ8oÓpˆ
Ø—{‘{ =Ó1×9Ñ9¸:ÀzÐSW×SaÑSaÐcg×cpÑcpÐ:qÓrˆð " !Ñ$×.Ñ.¨qÓ1×7Ñ7Ó9ˆØ! !Ñ$×.Ñ.¨qÓ1×7Ñ7Ó9ˆÜ#>¸|ÈZÐY\Ð^aÓ#bÑ ˆ�jð $×+Ñ+¨A¨q°!°QÓ7×BÑBÓDˆØ×'Ñ'¨¨1¨a°Ó3×>Ñ>Ó@ˆ
Ø#×+Ñ+¨A¨q°!°QÓ7×BÑBÓDˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$·,±,Ø—J‘JØ—n‘nñ
%
ð ñ
%
Ñ!ˆ�\ð "×)Ñ)¨!¨Q°°1Ó5×@Ñ@ÓBˆØ!×&Ñ& z°:¸rÓBˆØ—m‘m KÓ0ˆØ!×)Ñ)¨!¨Q°Ó2×=Ñ=Ó?ˆØ˜LÐ(Ð(r'   r   )r,   r-   r.   Ú__doc__r   r   r/   r0   Útupler   r   r+   r1   r2   s   @r&   r®   r®   È   s�   ø„ ñð@Ð/õ @ð( /3ñ	-)à—|‘|ð-)ð # 5§<¡<°·±Ð#=Ñ>ð-)ð Ÿ™ tÑ+ð	-)ð
 Ð+Ñ,ð-)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷-)r'   r®   c                   óÄ   ‡ — e Zd Zdefˆ fd„Z	 d
dej                  deej                  ej                  f   dej                  dz  dee	   deej                     f
d	„Zˆ xZS )ÚMLCDEncoderLayerr   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y )N©Úeps)r   r   r   rR   r®   Ú	self_attnr   Ú	LayerNormÚlayer_norm_epsÚlayer_norm1r   ÚmlpÚlayer_norm2r#   s     €r&   r   zMLCDEncoderLayer.__init__  sl   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ& vÓ.ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ˜6“?ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÕr'   Nr(   rº   r…   rˆ   r)   c                 óº   — |}| j                  |«      } | j                  d|||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )a¸  
        Args:
            hidden_states (`torch.FloatTensor`):
                Input to the layer of shape `(batch, seq_len, embed_dim)`.
                Represents the hidden states from the previous layer or the input embeddings.
            position_embeddings (`tuple[torch.Tensor, torch.Tensor]`):
                A tuple of two tensors, each of shape `(batch, seq_len, embed_dim)`.
                Represents absolute positional embeddings for the query and key in the attention mechanism.
            attention_mask (`torch.FloatTensor`):
                Attention mask of shape `(batch, 1, q_len, k_v_seq_len)` where padding elements are indicated by very large negative values.
        )r(   rº   r…   © )rÌ   rÉ   rÎ   rÍ   )r$   r(   rº   r…   rˆ   ÚresidualÚ_s          r&   r+   zMLCDEncoderLayer.forward  s…   € ð$ !ˆà×(Ñ(¨Ó7ˆØ)˜4Ÿ>™>ð 
Ø'Ø 3Ø)ñ
ð ñ	
Ñˆ�qð ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆàÐr'   r   )r,   r-   r.   r   r   r/   r0   rÃ   r   r   r€   r+   r1   r2   s   @r&   rÅ   rÅ     s|   ø„ ðSÐ/õ Sð /3ñ	"à—|‘|ð"ð # 5§<¡<°·±Ð#=Ñ>ð"ð Ÿ™ tÑ+ð	"ð
 Ð+Ñ,ð"ð 
ˆu× Ñ Ñ	!÷"r'   rÅ   c                   ó´   ‡ — e Zd ZdZdefˆ fd„Z	 ddej                  deej                  ej                  f   dej                  dz  de
e   d	eez  f
d
„Zˆ xZS )ÚMLCDEncoderz³
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`MLCDEncoderLayer`].

    Args:
        config: MLCDVisionConfig
    r   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        yc c}w )z3Overwrite dummy `MLCDConfig` to `MLCDVisionConfig`.FN)
r   r   r   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÅ   ÚlayersÚgradient_checkpointing)r$   r   rÒ   r%   s      €r&   r   zMLCDEncoder.__init__G  sO   ø€ ä‰ÑÔØˆŒÜ—m‘mÄuÈV×MeÑMeÓGfÖ$gÀ!Ô%5°fÕ%=Ò$gÓhˆŒØ&+ˆÕ#ùò %hs   ½A#NÚinputs_embedsrº   r…   rˆ   r)   c                 óV   — |}| j                   D ]  } ||||fi |¤Ž}Œ t        |¬«      S )a=  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            position_embeddings (`tuple[torch.Tensor, torch.Tensor]`):
                A tuple of two tensors, each of shape `(batch, seq_len, embed_dim)`.
                Represents absolute positional embeddings for the query and key in the attention mechanism.
            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:
                - 1 for tokens that are **not masked**,
                - 0 for tokens that are **masked**.
                [What are attention masks?](../glossary#attention-mask)
        )Úlast_hidden_state)rÙ   r   )r$   rÛ   rº   r…   rˆ   r(   Úencoder_layers          r&   r+   zMLCDEncoder.forwardN  sK   € ð, &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØ#Øñð ñ	‰Mð	ô Ø+ô
ð 	
r'   r   )r,   r-   r.   rÂ   r   r   r/   r€   rÃ   r0   r   r   r   r+   r1   r2   s   @r&   rÔ   rÔ   >  s{   ø„ ñð,Ð/õ ,ð /3ñ	!
à×(Ñ(ð!
ð # 5§<¡<°·±Ð#=Ñ>ð!
ð Ÿ™ tÑ+ð	!
ð
 Ð+Ñ,ð!
ð 
�Ñ	 ÷!
r'   rÔ   c                   ó~   ‡ — e Zd ZU eed<   dZdgZdZdZdZ	dZ
dZdZeedœZ ej"                  «       ˆ fd„«       Zˆ xZS )ÚMLCDPreTrainedModelr   Úvision_modelrÅ   TF)r(   Ú
attentionsc                 ó  •— t         ‰| �  |«       | j                  j                  }t	        |t
        «      rä| j                  j                  }t        j                  |j                  d|j                  dz  |z  ¬«       t        j                  |j                  j                  |j                  j                  |z  ¬«       t        j                  |j                  t        j                   |j                  j"                  d   «      j%                  d«      «       yt	        |t&        «      �r| j                  j                  }|j                  dz  d|j                  j(                  z  dz  z  |z  }|j                  dz  |z  }t        j                  |j*                  j                  |¬«       t        j                  |j,                  j                  |¬«       t        j                  |j.                  j                  |¬«       t        j                  |j0                  j                  |¬«       yt	        |t2        «      rÅ| j                  j                  }|j                  j4                  dz  d|j                  j(                  z  dz  z  |z  }d|j                  j4                  z  dz  |z  }t        j                  |j6                  j                  |¬«       t        j                  |j8                  j                  |¬«       yt	        |t:        «      ro| j                  j                  }|j                  j4                  |j                  j<                  z  dz  dz  |z  }t        j                  |j>                  d|¬«       yt	        |t@        «      rod|jB                  t        j                   d	|jD                  dt        jF                  ¬
«      |jD                  z  z  z  }t        j                  |jH                  |«       yy)zInitialize the weightsr¼   r°   )ÚmeanÚstd)rå   rD   rQ   r:   r9   r   r;   N)%r   Ú_init_weightsr   Úinitializer_factorÚ
isinstancerJ   ÚinitÚnormal_rW   rR   rZ   ri   Úinitializer_rangeÚcopy_rB   r/   r?   rg   r]   r®   rØ   r¸   r¶   r·   r¹   r   r   r!   r"   ÚMLCDVisionModelr±   Úclass_pos_embr4   r7   r6   r@   r5   )	r$   r�   ÚfactorÚin_proj_stdÚout_proj_stdÚfc_stdÚpos_emb_stdr5   r%   s	           €r&   ræ   z!MLCDPreTrainedModel._init_weights‚  sÛ  ø€ ô 	‰Ñ˜fÔ%Ø—‘×/Ñ/ˆÜ�fÔ2Ô3Ø—[‘[×3Ñ3ˆFÜ�L‰L˜×/Ñ/°c¸v×?OÑ?OÐQUÑ?UÐX^Ñ?^Õ_Ü�L‰L˜×/Ñ/×6Ñ6¸F¿M¹M×<[Ñ<[Ð^dÑ<dÕeÜ�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhÜ˜¤Õ.Ø—[‘[×3Ñ3ˆFØ!×+Ñ+¨TÑ1°q¸6¿=¹=×;ZÑ;ZÑ7ZÐ_cÑ6cÑdÐgmÑmˆKØ"×,Ñ,¨dÑ2°fÑ<ˆLÜ�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×-Ñ-°;Õ?Ü�L‰L˜Ÿ™×/Ñ/°\ÖBÜ˜¤Ô(Ø—[‘[×3Ñ3ˆFØ!Ÿ=™=×4Ñ4°dÑ:ÀÀFÇMÁM×DcÑDcÑ@cÐhlÑ?lÑmÐpvÑvˆKØ˜&Ÿ-™-×3Ñ3Ñ3¸Ñ<¸vÑEˆFÜ�L‰L˜Ÿ™×*Ñ*°Õ7Ü�L‰L˜Ÿ™×*Ñ*°Ö<Ü˜¤Ô0Ø—[‘[×3Ñ3ˆFØ!Ÿ=™=×4Ñ4¸¿¹×8YÑ8YÑYÐ]^Ñ^ÐcgÑgÐjpÑpˆKÜ�L‰L˜×-Ñ-°C¸[ÖIÜ˜Ô 3Ô4Ø˜fŸl™l¬u¯|©|¸A¸v¿z¹zÈ1ÔTY×T_ÑT_Ô/`Ðci×cmÑcmÑ/mÑnÑoˆHÜ�J‰J�v—‘¨Õ1ð 5r'   )r,   r-   r.   r   rG   Úbase_model_prefixÚ_no_split_modulesÚsupports_gradient_checkpointingÚaccepts_loss_kwargsÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendrÅ   r®   Ú_can_record_outputsr/   Úno_gradræ   r1   r2   s   @r&   rà   rà   r  se   ø… àÓØ&ÐØ+Ð,ÐØ&*Ð#ØÐØÐØ€NØÐØ"&Ðà)Ø#ñÐð
 €U‡]�]ƒ_ó2ó ô2r'   rà   zN
    The vision model from M_L_C_D without any head or projection on top.
    )Úcustom_introc                   ó¦   ‡ — e Zd ZU eed<   dZdZdZdefˆ fd„Ze	 e
d¬«      e	 ddej                  dz  d	ee   d
eez  fd„«       «       «       Zˆ xZS )rí   r   rx   )ÚimagerZ   c                 ó  •— t         ‰| �  |«       |j                  }t        |«      | _        t        j                  ||j                  ¬«      | _        t        |«      | _
        t        j                  ||j                  ¬«      | _        t        |j                  |j                  z  dz  «      | _        t        j                  t!        j"                  d|j                  |j                  z  dz  «      «      | _        | j'                  «        y )NrÇ   r:   r   )r   r   r   rJ   r^   r   rÊ   rË   Úpre_layrnormrÔ   ÚencoderÚpost_layernormr4   r±   Úvision_rotary_embeddingrU   r/   rV   rî   Ú	post_init)r$   r   rR   r%   s      €r&   r   zMLCDVisionModel.__init__®  sÇ   ø€ Ü‰Ñ˜Ô Ø×&Ñ&ˆ	ä.¨vÓ6ˆŒÜŸL™L¨¸×8MÑ8MÔNˆÔÜ" 6Ó*ˆŒÜ Ÿl™l¨9¸&×:OÑ:OÔPˆÔÜ':¸6×;MÑ;MÐQW×QkÑQkÑ;kÐopÑ;pÓ'qˆÔ$ÜŸ\™\¬%¯+©+°a¸×9KÑ9KÈv×OiÑOiÑ9iÐmnÑ9nÓ*oÓpˆÔØ�‰Õr'   F)Útie_last_hidden_statesNrˆ   r)   c                 óÄ  — |€t        d«      ‚|j                  d   | j                  j                  z  }|j                  d   | j                  j                  z  }t	        j
                  ||j                  ¬«      j                  d«      j                  d|«      }t	        j
                  ||j                  ¬«      j                  d«      j                  |d«      }t	        j                  |j                  «       |j                  «       gd¬«      }| j                  |«      }t	        j                  | j                  |gd¬«      }t	        j                  ||fd¬«      }	|	j                  «       |	j                  «       f}
| j!                  |«      }| j#                  |«      } | j$                  d||
d	œ|¤Ž}|d   }|dd…ddd…f   }| j'                  |«      }t)        ||¬
«      S )aû  
        Example:

        ```python
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> from transformers import AutoProcessor, MLCDVisionModel
        >>> model = MLCDVisionModel.from_pretrained("DeepGlint-AI/mlcd-vit-bigG-patch14-448")
        >>> processor = AutoProcessor.from_pretrained("DeepGlint-AI/mlcd-vit-bigG-patch14-448")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(images=image, return_tensors="pt")

        >>> with torch.no_grad():
        ...     outputs = model(**inputs, output_attentions=True)

        >>> features = outputs.last_hidden_state
        >>> print(f"Extracted features shape: {features.shape}")
        >>> print(f"Number of attention layers: {len(outputs.attentions)}")
        >>> print(f"Attention shape: {outputs.attentions[0].shape}")
        ```Nz You have to specify pixel_valuesr§   rD   )Údevicer   r   rf   )rÛ   rº   )rÝ   Úpooler_outputrÐ   )Ú
ValueErrorrg   r   rT   r/   r?   r	  rE   r]   ÚstackrF   r  rq   rî   r¤   r¥   r^   r  r  r  r	   )r$   rx   rˆ   Únum_patches_heightÚnum_patches_widthÚhpos_idsÚwpos_idsÚpos_idsÚrotary_pos_embÚembrº   r(   Úencoder_outputsrÝ   Úpooled_outputs                  r&   r+   zMLCDVisionModel.forwardº  sÆ  € ð@ ÐÜÐ?Ó@Ð@à)×/Ñ/°Ñ3°t·{±{×7MÑ7MÑMÐØ(×.Ñ.¨rÑ2°d·k±k×6LÑ6LÑLÐä�L‰LÐ+°L×4GÑ4GÔH×RÑRÐSTÓU×\Ñ\Ð]_ÐarÓsð 	ô �L‰LÐ*°<×3FÑ3FÔG×QÑQÐRSÓT×[Ñ[Ð\nÐprÓsð 	ô —+‘+˜x×/Ñ/Ó1°8×3CÑ3CÓ3EÐFÈBÔOˆØ×5Ñ5°gÓ>ˆÜŸ™ D×$6Ñ$6¸Ð#GÈQÔOˆÜ�i‰i˜¨Ð8¸bÔAˆØ"Ÿw™w›y¨#¯'©'«)Ð4ÐàŸ™¨Ó5ˆØ×)Ñ)¨-Ó8ˆà&˜$Ÿ,™,ð 
Ø'Ø 3ñ
ð ñ
ˆð ,¨AÑ.ÐØ)ª!¨Q²¨'Ñ2ˆØ×+Ñ+¨MÓ:ˆä)Ø/Ø'ô
ð 	
r'   r   )r,   r-   r.   r   rG   Úmain_input_nameÚinput_modalitiesÚ_input_embed_layerr   r   r   r   r/   r€   r   r   rÃ   r	   r+   r1   r2   s   @r&   rí   rí   £  sŠ   ø… ð ÓØ$€OØ!ÐØ*Ðð
Ð/õ 
ð  Ù¨EÔ2Øð 26ñ>
à×'Ñ'¨$Ñ.ð>
ð Ð+Ñ,ð>
ð 
Ð+Ñ	+ò	>
ó ó 3ó  ô>
r'   rí   )r¼   )0Úcollections.abcr   r/   Útorch.nnr   Ú r   ré   Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr   r	   Úmodeling_utilsr
   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_mlcdr   ÚModuler   r4   rJ   r0   r@   r–   r›   rH   rŒ   rÃ   r¬   r®   rÅ   rÔ   rà   rí   Ú__all__rÐ   r'   r&   ú<module>r'     sÚ  ðõ( %ã Ý å &Ý !Ý 9ß Kß FÝ &ß BÑ BÝ 7Ý 5Ý 0ôˆb�i‰iô ôG˜"Ÿ)™)ô GôI˜2Ÿ9™9ô Iðf ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ò2(ð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	UðØ‡|�|ðØŸ™ðØ+0¯<©<ðØ>C¿l¹lðà
ˆ5�<‰<˜Ÿ™Ð%Ñ&óôE)�B—I‘Iô E)ôP+Ð1ô +ô\1
�"—)‘)ô 1
ðh ô-2˜/ó -2ó ð-2ñ` ðôô
S
Ð)ó S
óð
S
ðl !Ð"3Ð
4�r'   