Ë
    ÜÓ^jáK  ã                   óÀ  — d Z ddl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 ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZ ddlmZ  ej@                  e!«      Z"d„ Z# G d„ dejH                  «      Z%d„ Z&d.d„Z'	 d/dejH                  dejP                  dejP                  dejP                  dejP                  dz  de)de)fd„Z* G d„ d ejH                  «      Z+ G d!„ d"ejH                  «      Z, G d#„ d$ejH                  «      Z- G d%„ d&e
«      Z. G d'„ d(ejH                  «      Z/e G d)„ d*e«      «       Z0d+„ Z1e G d,„ d-e0«      «       Z2d-d*gZ3y)0zPyTorch Pixtral model.é    )ÚCallable)ÚOptionalN)Únné   )ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutput)Údynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úis_flash_attention_requestedÚmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚPixtralVisionConfigc                 ó’  — g }| D ]¬  }|j                   dd  \  }}t        j                  t        j                  |«      t        j                  |«      d¬«      }t        j                  |d¬«      j                  dd«      j                  dd«      \  }}||z  |z   }	|j                  |	d d …df   «       Œ® t        j                  |«      S )NéþÿÿÿÚij)Úindexingéÿÿÿÿ©Údimé   r   )	ÚshapeÚtorchÚmeshgridÚarangeÚstackÚreshapeÚchunkÚappendÚcat)
Úpatch_embeds_listÚ	max_widthÚ	positionsÚpatchÚheightÚwidthÚmeshÚh_gridÚv_gridÚidss
             úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/pixtral/modeling_pixtral.pyÚposition_ids_in_meshgridr3   %   s³   € Ø€IØ"ò $ˆØŸ™ B CÐ(‰ˆ�Ü�~‰~œeŸl™l¨6Ó2´E·L±LÀÓ4GÐRVÔWˆÜŸ™ T¨rÔ2×:Ñ:¸2¸qÓA×GÑGÈÈ2ÓN‰ˆ�Ø�yÑ  6Ñ)ˆØ×Ñ˜šQ ˜T™Õ#ð$ô �9‰9�YÓÐó    c                   óÈ   ‡ — e Zd ZU dZej
                  ed<   ddefˆ fd„Ze		 	 	 ddedz  de
d   dedz  d	ed
ef   fd„«       Z ej                  «       ed„ «       «       Zˆ xZS )ÚPixtralRotaryEmbeddinga  
    The key with pixtral embedding is just that you have a frequency for each pixel positions.
    If you have height x width pixels (or embedding pixels), then the frequency used for ROPE
    is given by indexing the pre_computed frequency on the width and height.

    What you output is of dimension (batch, height * width, dim) with dim the embed dim.

    This simply means that for each image hidden state, you are going to add
    a corresponding positional embedding, based on its index in the grid.
    Úinv_freqNÚconfigc                 ó˜  •— t         ‰| �  «        || _        | j                  j                  d   | _        | j
                  }| j                  dk7  r/t        | j                  j                  › d| j                  › d�«      ‚ || j                  |«      \  }}| j                  d|d¬«       | j                  d|j                  «       d¬«       y )	NÚ	rope_typeÚdefaultz7 does not support non-default RoPE, but got `rope_type=ú`r7   F)Ú
persistentÚoriginal_inv_freq)ÚsuperÚ__init__r8   Úrope_parametersr:   Úcompute_default_rope_parametersÚ
ValueErrorÚ	__class__Ú__name__Úregister_bufferÚclone)Úselfr8   ÚdeviceÚ
layer_typeÚrope_init_fnr7   Úattention_scalingrD   s          €r2   r@   zPixtralRotaryEmbedding.__init__>   s¾   ø€ Ü‰ÑÔàˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&ÜØ—>‘>×*Ñ*Ð+Ð+bÐcg×cqÑcqÐbrÐrsÐtóð ñ '3°4·;±;ÀÓ&GÑ#ˆÐ#Ø×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr4   rI   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 óü  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}| j                  | j
                  z  }t        j                  |«      }t        j                  |«      }d|t        j                  d|d«      j                  «       |z  z  z  }	t        j                  ||	ddd…   «      j                  «       }
t        j                  ||	ddd…   «      j                  «       }t        j                  |
dd…ddd…f   j                  d|d«      |ddd…dd…f   j                  |dd«      gd¬	«      j                  d|dz  «      }t        j                  ||fd¬	«      }||fS )
a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNg      ð?r   r   r   r   r   )rA   ÚgetattrÚhidden_sizeÚnum_attention_headsÚ
image_sizeÚ
patch_sizer    r"   ÚfloatÚouterr'   Úrepeatr$   )r8   rI   rM   Úbaser   Úattention_factorÚmax_patches_per_sideÚhÚwÚfreqsÚfreqs_hÚfreqs_wr7   s                r2   rB   z6PixtralRotaryEmbedding.compute_default_rope_parametersN   so  € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð  &×0Ñ0°F×4EÑ4EÑEÐÜ�L‰LÐ-Ó.ˆÜ�L‰LÐ-Ó.ˆà�t¤§¡¨Q°°QÓ 7× =Ñ =Ó ?À#Ñ EÑFÑGˆÜ—+‘+˜a ¡s¨ s¡Ó,×2Ñ2Ó4ˆÜ—+‘+˜a  q t¨! t¡Ó-×3Ñ3Ó5ˆÜ—9‘9àš˜4¢˜
Ñ#×*Ñ*¨1Ð.BÀAÓFØ˜ša¢˜
Ñ#×*Ñ*Ð+?ÀÀAÓFðð ô
÷ ‰'�"�c˜Q‘hÓ
ð 	ô —9‘9˜h¨Ð1°rÔ:ˆØÐ)Ð)Ð)r4   c                 óÂ  — | j                   |   }t        |j                  j                  t        «      r/|j                  j                  dk7  r|j                  j                  nd}t        |d¬«      5  |}|j                  «       }|j                  «       }d d d «       j                  |j                  ¬«      j                  |j                  ¬«      fS # 1 sw Y   ŒAxY w)NÚmpsÚcpuF)Údevice_typeÚenabled©Údtype)
r7   Ú
isinstancerI   ÚtypeÚstrr   ÚcosÚsinÚtorh   )rH   ÚxÚposition_idsr_   re   Úembrl   rm   s           r2   ÚforwardzPixtralRotaryEmbedding.forward{   s¨   € ð —‘˜lÑ+ˆÜ'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	ØˆCØ—'‘'“)ˆCØ—'‘'“)ˆC÷	ð
 �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	ð 	ús   Á2#CÃC©NN)NNN)rE   Ú
__module__Ú__qualname__Ú__doc__r    ÚTensorÚ__annotations__r   r@   Ústaticmethodr   ÚintÚtuplerW   rB   Úno_gradr
   rr   Ú__classcell__©rD   s   @r2   r6   r6   0   s¡   ø… ñ	ð �l‰lÓñVÐ2õ Vð  à-1Ø+/Ø"ñ**Ø# dÑ*ð**à˜Ñ(ð**ð �t‘ð**ð 
ˆ~˜uÐ$Ñ	%ò	**ó ð**ðX €U‡]�]ƒ_Øñ<ó ó ô<r4   r6   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..Nr   r   r   )r   r    r'   )ro   Úx1Úx2s      r2   Úrotate_halfr‚   ‰   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r4   c                 óž   — |j                  |«      }|j                  |«      }| |z  t        | «      |z  z   }||z  t        |«      |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezer‚   )ÚqÚkrl   rm   Úunsqueeze_dimÚq_embedÚk_embeds          r2   Úapply_rotary_pos_embrŠ   �   sY   € ð$ �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr4   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óÀ  — 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   )r   rh   )ÚpÚtrainingr   r   )r    ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32rn   rh   r‘   r”   Ú
contiguous)
r‹   rŒ   r�   rŽ   r�   r�   r‘   ÚkwargsÚattn_weightsÚattn_outputs
             r2   Úeager_attention_forwardrž   ª   sº   € ô —<‘<  s§}¡}°R¸Ó'<Ó=ÀÑG€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r4   c                   óè   ‡ — e Zd ZdZˆ fd„Z	 	 d
dej                  dej                  dz  deej                  ej                  f   dz  dee	   deej                  ej                  dz  f   f
d	„Z
ˆ xZS )ÚPixtralAttentionzI
    Multi-headed attention compatible with ALL_ATTENTION_FUNCTIONS.
    c                 óž  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        d| _        | j                  dz  | _	        d| _        |j                  | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        y )NFg      à¿©Úbias)r?   r@   r8   rS   Ú	embed_dimrT   Ú	num_headsrQ   Ú	is_causalr�   Úattention_dropoutr‘   r   ÚLinearÚk_projÚv_projÚq_projÚo_proj©rH   r8   rD   s     €r2   r@   zPixtralAttention.__init__Æ   sÞ   ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØˆŒà—}‘} dÑ*ˆŒØˆŒà×/Ñ/ˆŒä—i‘i §¡°·±ÀUÔKˆŒÜ—i‘i §¡°·±ÀUÔKˆŒÜ—i‘i §¡°·±ÀUÔKˆŒÜ—i‘i §¡°·±ÀUÔKˆ�r4   NÚhidden_statesr�   Úposition_embeddingsr›   rN   c                 óB  — |j                  «       \  }}}| j                  |«      }| j                  |«      }	| j                  |«      }
|j	                  ||| j
                  | j                  «      j                  dd«      }|	j	                  ||| j
                  | j                  «      j                  dd«      }	|
j	                  ||| j
                  | j                  «      j                  dd«      }
|\  }}t        ||	||d¬«      \  }}	t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                  | j                   dœ|¤Ž\  }}|j#                  ||d«      j%                  «       }| j'                  |«      }||fS )z#Input shape: Batch x Time x Channelr   r   r   )r‡   ç        )r‘   r�   r   )Úsizer«   r©   rª   Úviewr¥   rQ   r–   rŠ   r   Úget_interfacer8   Ú_attn_implementationrž   r”   r‘   r�   r$   rš   r¬   )rH   r®   r�   r¯   r›   Ú
batch_sizeÚpatchesÚ_Úquery_statesÚ
key_statesÚvalue_statesrl   rm   Úattention_interfacer�   rœ   s                   r2   rr   zPixtralAttention.forwardØ   s‹  € ð "/×!3Ñ!3Ó!5Ñˆ
�G˜Qà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà#×(Ñ(¨°W¸d¿n¹nÈdÏmÉmÓ\×fÑfÐghÐjkÓlˆØ—_‘_ Z°¸$¿.¹.È$Ï-É-ÓX×bÑbÐcdÐfgÓhˆ
Ø#×(Ñ(¨°W¸d¿n¹nÈdÏmÉmÓ\×fÑfÐghÐjkÓlˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÐjkÔ#lÑ ˆ�jä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð "×)Ñ)¨*°g¸rÓB×MÑMÓOˆØ—k‘k +Ó.ˆà˜LÐ(Ð(r4   rs   )rE   rt   ru   rv   r@   r    rw   r{   r   r   rr   r}   r~   s   @r2   r    r    Á   sŒ   ø„ ñôLð* /3ØHLñ	()à—|‘|ð()ð Ÿ™ tÑ+ð()ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	()ð
 Ð+Ñ,ð()ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷()r4   r    c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
PixtralMLPc                 óÊ  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _	        t        |j                     | _        y )NFr¢   )r?   r@   r8   rS   Úintermediate_sizer   r¨   Ú	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fnr­   s     €r2   r@   zPixtralMLP.__init__  s¦   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRWÔXˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPUÔVˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRWÔXˆŒÜ˜V×.Ñ.Ñ/ˆ�r4   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S ©N)rÃ   rÅ   rÁ   rÂ   )rH   ro   rÃ   s      r2   rr   zPixtralMLP.forward  s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr4   )rE   rt   ru   r@   rr   r}   r~   s   @r2   r¾   r¾     s   ø„ ô0ör4   r¾   c                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚPixtralRMSNormÚepsrN   Nc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z=
        PixtralRMSNorm is equivalent to T5LayerNorm
        N)r?   r@   r   Ú	Parameterr    ÚonesÚweightÚvariance_epsilon)rH   rS   rÊ   rD   s      €r2   r@   zPixtralRMSNorm.__init__  s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr4   r®   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Nr   r   T)Úkeepdim)	rh   rn   r    r™   ÚpowÚmeanÚrsqrtrÏ   rÎ   )rH   r®   Úinput_dtypeÚvariances       r2   rr   zPixtralRMSNorm.forward  sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r4   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)r{   rÎ   r   rÏ   ©rH   s    r2   Ú
extra_reprzPixtralRMSNorm.extra_repr%  s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr4   )g�íµ ÷Æ°>)
rE   rt   ru   rW   r@   r    rw   rr   rÙ   r}   r~   s   @r2   rÉ   rÉ     s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr4   rÉ   c                   ó¸   ‡ — e Zd Zˆ fd„Z	 d	dej
                  dej
                  deej
                  ej
                  f   dz  dee   dej
                  f
d„Z	ˆ xZ
S )
ÚPixtralAttentionLayerc                 óÒ   •— t         ‰| �  «        t        |j                  d¬«      | _        t        |«      | _        t        |«      | _        t        |j                  d¬«      | _	        y )Nçñhãˆµøä>©rÊ   )
r?   r@   rÉ   rS   Úattention_normr¾   Úfeed_forwardr    Ú	attentionÚffn_normr­   s     €r2   r@   zPixtralAttentionLayer.__init__*  sP   ø€ Ü‰ÑÔÜ,¨V×-?Ñ-?ÀTÔJˆÔÜ& vÓ.ˆÔÜ)¨&Ó1ˆŒÜ& v×'9Ñ'9¸tÔDˆ�r4   Nr®   r�   r¯   r›   rN   c                 óº   — |}| j                  |«      } | j                  d|||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )aR  
        Args:
            hidden_states (`torch.FloatTensor`):
                Input to the layer of shape `(batch, seq_len, embed_dim)`.
            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à   )rH   r®   r�   r¯   r›   Úresidualr¸   s          r2   rr   zPixtralAttentionLayer.forward1  s…   € ð !ˆà×+Ñ+¨MÓ:ˆØ)˜4Ÿ>™>ð 
Ø'Ø)Ø 3ñ
ð ñ	
Ñˆ�qð ! =Ñ0ˆà ˆØŸ™ mÓ4ˆØ×)Ñ)¨-Ó8ˆØ  =Ñ0ˆàÐr4   rÇ   )rE   rt   ru   r@   r    rw   r{   r   r   rr   r}   r~   s   @r2   rÛ   rÛ   )  sn   ø„ ôEð IMñ	à—|‘|ðð Ÿ™ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	ð
 Ð+Ñ,ðð 
�‰÷r4   rÛ   c            
       óš   ‡ — e Zd Zˆ fd„Z	 	 ddej
                  dz  deej
                  ej
                  f   dz  dee   dee	z  fd„Z
ˆ xZS )	ÚPixtralTransformerc                 ó   •— t         ‰| �  «        || _        t        j                  j                  «       | _        t        |j                  «      D ]&  }| j                  j                  t        |«      «       Œ( d| _        y )NF)r?   r@   r8   r    r   Ú
ModuleListÚlayersÚrangeÚnum_hidden_layersr&   rÛ   Úgradient_checkpointing)rH   r8   r¸   rD   s      €r2   r@   zPixtralTransformer.__init__S  sc   ø€ Ü‰ÑÔØˆŒÜ—h‘h×)Ñ)Ó+ˆŒÜ�v×/Ñ/Ó0ò 	>ˆAØ�K‰K×ÑÔ4°VÓ<Õ=ð	>à&+ˆÕ#r4   Nr�   r¯   r›   rN   c                 óX   — |}| j                   D ]  } |||fd|i|¤Ž}Œ t        |¬«      S )aI  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Embeddings which serve as input to the Transformer.
            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)
        r¯   )Úlast_hidden_state)rê   r	   )rH   Úinputs_embedsr�   r¯   r›   r®   Úencoder_layers          r2   rr   zPixtralTransformer.forward[  sM   € ð& &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð %8ðð ñ	‰Mð	ô °Ô?Ð?r4   rs   )rE   rt   ru   r@   r    rw   r{   r   r   r	   rr   r}   r~   s   @r2   rç   rç   R  sm   ø„ ô,ð /3ØHLñ	@ð Ÿ™ tÑ+ð@ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	@ð
 Ð+Ñ,ð@ð 
�Ñ	 ÷@r4   rç   c                   óH   — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZdZdgZeedœZy)	ÚPixtralPreTrainedModelr8   ÚmodelÚpixel_values)ÚimageTrÛ   )r®   Ú
attentionsN)rE   rt   ru   r   rx   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_attention_backendÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_no_split_modulesrÛ   r    Ú_can_record_outputsrä   r4   r2   ró   ró   z  sM   … àÓØÐØ$€OØ!ÐØ&*Ð#Ø"&ÐØÐØ€NØÐØ0Ð1Ðà.Ø&ñÑr4   ró   c                 óü  — |j                   }|j                  }|j                  d   }t        j                  |«      j
                  }t        j                  ||f|||¬«      }t        j                  | «      j                  d«      }t        j                  dg| d d z   «      j                  d«      }t        ||«      D ]  \  }	}
d||	|
…|	|
…f<   Œ |d d d d …d d …f   j                  |j                  d   ddd«      }|S )Nr   )Ú
fill_valuerh   rI   r   r   )rh   rI   r   r    ÚfinfoÚminÚfullÚtensorÚcumsumÚzipÚexpand)r(   r  rh   rI   rM   Úd_minÚcausal_maskÚblock_end_idxÚblock_start_idxÚstartÚends              r2   Úgenerate_block_attention_maskr  Œ  sö   € Ø�L‰L€EØ�]‰]€FØ�l‰l˜1‰o€GÜ�K‰K˜Ó×"Ñ"€EÜ—*‘*˜g wÐ/¸EÈÐW]Ô^€Kä—L‘LÐ!2Ó3×:Ñ:¸2Ó>€MÜ—l‘l A 3Ð):¸3¸BÐ)?Ñ#?Ó@×GÑGÈÓK€OÜ˜/¨=Ó9ò .‰
ˆˆsØ,-ˆ�E˜#�I˜u S˜yÐ(Ò)ð.ð ˜d Dª!ªQÐ.Ñ/×6Ñ6°v·|±|ÀA±ÈÈ2ÈrÓR€KØÐr4   c                   óœ   ‡ — e Zd ZdZˆ fd„Zd„ Zeee	 d
de	j                  de	j                  dz  dee   deez  fd	„«       «       «       Zˆ xZS )ÚPixtralVisionModelÚvision_encoderc                 óz  •— t         ‰| �  |«       || _        t        j                  |j
                  |j                  |j                  |j                  d¬«      | _        |j                  | _        t        |j                  d¬«      | _
        t        |«      | _        t        |«      | _        | j                  «        y )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrider£   rÝ   rÞ   )r?   r@   r8   r   ÚConv2dÚnum_channelsrS   rV   Ú
patch_convrÉ   Úln_prerç   Útransformerr6   Úpatch_positional_embeddingÚ	post_initr­   s     €r2   r@   zPixtralVisionModel.__init__   s•   ø€ Ü‰Ñ˜Ô ØˆŒÜŸ)™)Ø×+Ñ+Ø×+Ñ+Ø×)Ñ)Ø×$Ñ$Øô
ˆŒð !×+Ñ+ˆŒÜ$ V×%7Ñ%7¸TÔBˆŒÜ-¨fÓ5ˆÔÜ*@ÀÓ*HˆÔ'à�‰Õr4   c                 ó   — | j                   S rÇ   )r  rØ   s    r2   Úget_input_embeddingsz'PixtralVisionModel.get_input_embeddings±  s   € Ø�‰Ðr4   Nrõ   Úimage_sizesr›   rN   c           
      óâ  — |€|j                   \  }}}}||fg|z  }| j                  j                  j                  }| j                  |j	                  |¬«      «      }	t        |	|«      D �
�cg c]1  \  }
}|
dd |d   | j                  z  …d |d   | j                  z  …f   ‘Œ3 }}
}t        j                  |D �cg c]  }|j                  d«      j                  ‘Œ c}d¬«      j                  d«      }	| j                  |	«      }	t        || j                  j                  | j                  j                  z  ¬«      }|j                  d«      j	                  |	j                   d¬«      |d	<   | j#                  |	|«      }t%        | j                  «      rd }n7t'        |D �cg c]!  }|j                   d
   |j                   d   z  ‘Œ# c}|	«      } | j(                  |	f||dœ|¤ŽS c c}}
w c c}w c c}w )Nrg   .r   r   r   )r)   T)Únon_blockingrp   r   r   )r�   r¯   )r   r  rÎ   rh   rn   r	  rV   r    r'   ÚflattenÚTr„   r  r3   r8   rU   rI   r  r   r  r  )rH   rõ   r#  r›   r¶   r¸   r,   r-   Útarget_dtypeÚpatch_embedsÚembedr²   r(   r“   rp   r¯   r�   s                    r2   rr   zPixtralVisionModel.forward´  sì  € ð ÐØ+7×+=Ñ+=Ñ(ˆJ˜˜6 5Ø" E˜?Ð+¨jÑ8ˆKð —‘×-Ñ-×3Ñ3ˆØ—‘ |§¡¸\ Ó'JÓKˆô  # <°Ó=÷
á��tð �#Ð5˜$˜q™' T§_¡_Ñ4Ð5Ð7U¸$¸q¹'ÀTÇ_Á_Ñ:TÐ7UÐUÓVð
Ðñ 
ô —y‘yÐ:KÖ!L°Q !§)¡)¨A£,§.£.Ò!LÐRSÔT×^Ñ^Ð_`ÓaˆØ—{‘{ <Ó0ˆô 0Ø¨¯©×)?Ñ)?À4Ç;Á;×CYÑCYÑ)Yô
ˆð ".×!7Ñ!7¸Ó!:×!=Ñ!=¸l×>QÑ>QÐ`dÐ!=Ó!eˆˆ~Ñà"×=Ñ=¸lÈLÓYÐä'¨¯©Ô4à!‰Nä:Ø4EÖF¨q�—‘˜‘˜qŸw™w r™{Ó*ÒFÈóˆNð  ˆt×ÑØð
à)Ø 3ñ
ð ñ	
ð 	
ùó3
ùò "Mùò  Gs   Á,6G!Â8"G'Æ&G,rÇ   )rE   rt   ru   rø   r@   r"  r   r   r   r    rw   r   r   r{   r	   rr   r}   r~   s   @r2   r  r  œ  sz   ø„ à(Ðôò"ð  ØØð ,0ñ+
à—l‘lð+
ð —\‘\ DÑ(ð+
ð Ð+Ñ,ð	+
ð
 
�Ñ	 ò+
ó ó ó  ô+
r4   r  )r   )r±   )4rv   Úcollections.abcr   Útypingr   r    r   Úactivationsr   Úmodeling_layersr   Úmodeling_outputsr	   Úmodeling_rope_utilsr
   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   r   Úutils.output_capturingr   Úconfiguration_pixtralr   Ú
get_loggerrE   Úloggerr3   ÚModuler6   r‚   rŠ   rw   rW   rž   r    r¾   rÉ   rÛ   rç   ró   r  r  Ú__all__rä   r4   r2   ú<module>r;     sw  ðñ å $Ý ã Ý å !Ý 9Ý /Ý 6ß FÝ &ß @Ñ @ß eÑ eÝ 5Ý 6ð 
ˆ×	Ñ	˜HÓ	%€ò ôU<˜RŸY™Yô U<òr(óðB ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.?)�r—y‘yô ?)ôF�—‘ô ô"J�R—Y‘Yô Jô(&Ð6ô &ôR%@˜Ÿ™ô %@ðP ô˜_ó ó ðò"ð  ôE
Ð/ó E
ó ðE
ðP  Ð!9Ð
:�r4   