§
    ‚Štjá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j$        ¦  «        Z%d„ Z&d/d„Z'	 d0dej$        dej(        dej(        dej(        dej(        dz  de)de)fd„Z* G d „ d!ej$        ¦  «        Z+ G d"„ d#ej$        ¦  «        Z, G d$„ d%ej$        ¦  «        Z- G d&„ d'e
¦  «        Z. G d(„ d)ej$        ¦  «        Z/e G d*„ d+e¦  «        ¦   «         Z0d,„ Z1e G d-„ d.e0¦  «        ¦   «         Z2d.d+gZ3dS )1z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¬¦  «                             dd¦  «                             dd¦  «        \  }}||z  |z   }	|                     |	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
             új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/pixtral/modeling_pixtral.pyÚposition_ids_in_meshgridr3   %   sÏ   € Ø€IØ"ð $ð $ˆØœ B C CÔ(‰ˆ�ÝŒ~�eœl¨6Ñ2Ô2µE´LÀÑ4GÔ4GÐRVÐWÑWÔWˆÝœ T¨rÐ2Ñ2Ô2×:Ò:¸2¸qÑAÔA×GÒGÈÈ2ÑNÔN‰ˆ�Ø�yÑ  6Ñ)ˆØ×Ò˜˜Q˜Q˜Q ˜TœÑ#Ô#Ð#Ð#ÝŒ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k    r$t          | j        j        › d| j        › d�¦  «        ‚ || j        |¦  «        \  }}|  	                    d|d¬¦  «         |  	                    d| 
                    ¦   «         d¬¦  «         d S )	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°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&ÝØ”>Ô*ÐtÐtÐcgÔcqÐtÐtÐtñô ð ð '3 l°4´;ÀÑ&GÔ&GÑ#ˆÐ#Ø×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr4   rI   ztorch.deviceÚseq_lenÚreturnztorch.Tensorc                 ó  — | j         d         }t          | dd¦  «        p| j        | j        z  }d}| j        | j        z  }t          j        |¦  «        }t          j        |¦  «        }d|t          j        d|d¦  «                             ¦   «         |z  z  z  }	t          j	        ||	ddd…         ¦  «                             ¦   «         }
t          j	        ||	ddd…         ¦  «                             ¦   «         }t          j
        |
dd…ddd…f                              d|d¦  «        |ddd…dd…f                              |dd¦  «        gd¬	¦  «                             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   s˜  € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð  &Ô0°FÔ4EÑEÐÝŒLÐ-Ñ.Ô.ˆÝŒLÐ-Ñ.Ô.ˆà�t¥¤¨Q°°QÑ 7Ô 7× =Ò =Ñ ?Ô ?À#Ñ EÑFÑGˆÝ”+˜a  s s¨ s¤Ñ,Ô,×2Ò2Ñ4Ô4ˆÝ”+˜a  q t¨! t¤Ñ-Ô-×3Ò3Ñ5Ô5ˆÝ”9à˜˜˜˜4   ˜
Ô#×*Ò*¨1Ð.BÀAÑFÔFØ˜˜a˜a˜a   ˜
Ô#×*Ò*Ð+?ÀÀAÑFÔFðð ð
ñ 
ô 
÷ Š'�"�c˜Q‘hÑ
Ô
ð 	õ ”9˜h¨Ð1°rÐ:Ñ:Ô:ˆØÐ)Ð)Ð)r4   c                 ó¨  — | j         |         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |}|                     ¦   «         }|                     ¦   «         }d d d ¦  «         n# 1 swxY w Y   |                     |j	        ¬¦  «        |                     |j	        ¬¦  «        fS )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Ô'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	ð 	ØˆCØ—'’'‘)”)ˆCØ—'’'‘)”)ˆCð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   Á+BÂBÂB©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ÐÐÑðVð VÐ2ð Vð Vð Vð Vð Vð 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‚   ‰   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r4   c                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |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Š   �   sc   € ð$ �-Š-˜Ñ
&Ô
&€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        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|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ÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô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                 ó0  •— 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¬¦  «        | _        d S )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ˆŒØœ¨$¬.Ñ8ˆŒØˆŒà”} dÑ*ˆŒØˆŒàÔ/ˆŒå”i ¤°´ÀUÐKÑKÔKˆŒÝ”i ¤°´ÀUÐKÑKÔKˆŒÝ”i ¤°´ÀUÐKÑKÔKˆŒÝ”i ¤°´ÀUÐKÑKÔKˆŒˆˆr4   NÚhidden_statesr�   Úposition_embeddingsrœ   rN   c                 óD  — |                      ¦   «         \  }}}|                      |¦  «        }|                      |¦  «        }	|                      |¦  «        }
|                     ||| j        | j        ¦  «                             dd¦  «        }|	                     ||| j        | j        ¦  «                             dd¦  «        }	|
                     ||| j        | j        ¦  «                             dd¦  «        }
|\  }}t          ||	||d¬¦  «        \  }}	t          j
        | j        j        t          ¦  «        } || ||	|
|f| j        sdn| j        | j        dœ|¤Ž\  }}|                     ||d¦  «                             ¦   «         }|                      |¦  «        }||fS )z#Input shape: Batch x Time x Channelr   r   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Ô!5Ñˆ
�G˜Qà—{’{ =Ñ1Ô1ˆØ—[’[ Ñ/Ô/ˆ
Ø—{’{ =Ñ1Ô1ˆà#×(Ò(¨°W¸d¼nÈdÌmÑ\Ô\×fÒfÐghÐjkÑlÔlˆØ—_’_ Z°¸$¼.È$Ì-ÑXÔX×bÒbÐcdÐfgÑhÔhˆ
Ø#×(Ò(¨°W¸d¼nÈdÌmÑ\Ô\×fÒfÐghÐjkÑlÔlˆà&‰ˆˆSÝ#7¸ÀjÐRUÐWZÐjkÐ#lÑ#lÔ#lÑ ˆ�jå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨*°g¸rÑBÔB×MÒMÑOÔ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ð Lð Lð Lð 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                 | _        d S )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ˆÔÝœ 4Ô#3°TÔ5KÐRWÐXÑXÔXˆŒÝ”y Ô!1°4Ô3IÐPUÐVÑVÔVˆŒÝœ 4Ô#9¸4Ô;KÐRWÐXÑXÔXˆŒÝ˜VÔ.Ô/ˆŒˆˆr4   c                 ó¨   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|S ©N)rÃ   rÅ   rÁ   rÂ   )rH   ro   rÃ   s      r2   rr   zPixtralMLP.forward  sA   € Ø—N’N 4§;¢;¨t¯~ª~¸aÑ/@Ô/@Ñ#AÔ#AÀDÇLÂLÐQRÁOÄOÑ#SÑTÔTˆ	ØÐr4   )rE   rt   ru   r@   rr   r}   r~   s   @r2   r¾   r¾     sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ðð ð ð ð ð ð r4   r¾   c                   óT   ‡ — 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        |¦  «        ¦  «        | _        || _        dS )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__  sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐr4   r¯   c                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| 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  s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r4   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)r{   rÏ   r   rÐ   ©rH   s    r2   Ú
extra_reprzPixtralRMSNorm.extra_repr%  s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr4   )rÊ   )
rE   rt   ru   rW   r@   r    rw   rr   rÚ   r}   r~   s   @r2   rÉ   rÉ     sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð 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¬¦  «        | _	        d S )Nçñhãˆµøä>©rË   )
r?   r@   rÉ   rS   Úattention_normr¾   Úfeed_forwardr¡   Ú	attentionÚffn_normr®   s     €r2   r@   zPixtralAttentionLayer.__init__*  sk   ø€ Ý‰Œ×ÒÑÔÐÝ,¨VÔ-?ÀTÐJÑJÔJˆÔÝ& vÑ.Ô.ˆÔÝ)¨&Ñ1Ô1ˆŒÝ& vÔ'9¸tÐDÑDÔDˆŒˆˆr4   Nr¯   r�   r°   rœ   rN   c                 óÈ   — |}|                       |¦  «        } | j        d|||dœ|¤Ž\  }}||z   }|}|                      |¦  «        }|                      |¦  «        }||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Ô4ˆØ×)Ò)¨-Ñ8Ô8ˆØ  =Ñ0ˆàÐr4   rÇ   )rE   rt   ru   r@   r    rw   r{   r   r   rr   r}   r~   s   @r2   rÜ   rÜ   )  s¬   ø€ € € € € ðEð Eð Eð Eð 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                             ¦   «         | _        t          |j        ¦  «        D ])}| j         	                    t          |¦  «        ¦  «         Œ*d| _        d S )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  s   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”h×)Ò)Ñ+Ô+ˆŒÝ�vÔ/Ñ0Ô0ð 	>ð 	>ˆAØŒK×ÒÕ4°VÑ<Ô<Ñ=Ô=Ð=Ð=Ø&+ˆÔ#Ð#Ð#r4   Nr�   r°   rœ   rN   c                 óR   — |}| 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[  s_   € ð& &ˆØ!œ[ð 	ð 	ˆMØ)˜MØØðð ð %8ðð ð	ð ˆMˆMõ °Ð?Ñ?Ô?Ð?r4   rs   )rE   rt   ru   r@   r    rw   r{   r   r   r	   rr   r}   r~   s   @r2   rè   rè   R  s³   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð /3ØHLð	@ð @ð œ tÑ+ð@ð # 5¤<°´Ð#=Ô>ÀÑEð	@ð
 Ð+Ô,ð@ð 
�Ñ	 ð@ð @ð @ð @ð @ð @ð @ð @r4   rè   c                   óJ   — 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dS )	Ú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  sh   € € € € € € àÐÐÑØÐØ$€OØ!ÐØ&*Ð#Ø"&ÐØÐØ€NØÐØ0Ð1Ðà.Ø&ðð ÐÐÐr4   rô   c                 óú  — |j         }|j        }|j        d         }t          j        |¦  «        j        }t          j        ||f|||¬¦  «        }t          j        | ¦  «                             d¦  «        }t          j        dg| d d…         z   ¦  «                             d¦  «        }t          ||¦  «        D ]\  }	}
d||	|
…|	|
…f<   Œ|d d d d …d d …f          
                    |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€EØŒ]€FØŒl˜1Œo€GÝŒK˜ÑÔÔ"€EÝ”*˜g wÐ/¸EÈÐW]Ð^Ñ^Ô^€Kå”LÐ!2Ñ3Ô3×:Ò:¸2Ñ>Ô>€MÝ”l A 3Ð):¸3¸B¸3Ô)?Ñ#?Ñ@Ô@×GÒGÈÑKÔK€OÝ˜/¨=Ñ9Ô9ð .ð .‰
ˆˆsØ,-ˆ�E˜#�I˜u S˜yÐ(Ñ)Ð)à˜d D¨!¨!¨!¨Q¨Q¨QÐ.Ô/×6Ò6°v´|ÀA´ÈÈ2ÈrÑ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                 ó‚  •— t          ¦   «                              |¦  «         || _        t          j        |j        |j        |j        |j        d¬¦  «        | _        |j        | _        t          |j        d¬¦  «        | _
        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )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¸TÐBÑBÔBˆŒÝ-¨fÑ5Ô5ˆÔÝ*@ÀÑ*HÔ*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        }‰                      |                     |¬¦  «        ¦  «        }	ˆ fd„t          |	|¦  «        D ¦   «         }
t          j        d„ |
D ¦   «         d¬¦  «                             d¦  «        }	‰  	                    |	¦  «        }	t          |
‰ j        j        ‰ j        j        z  ¬¦  «        }|                     d¦  «                             |	j        d¬¦  «        |d	<   ‰                      |	|¦  «        }t!          ‰ j        ¦  «        rd }nt#          d
„ |
D ¦   «         |	¦  «        } ‰ j        |	f||dœ|¤ŽS )Nrg   c                 ól   •— g | ]0\  }}|d d|d         ‰j         z  …d|d         ‰j         z  …f         ‘Œ1S ).Nr   r   )rV   )Ú.0Úembedr²   rH   s      €r2   ú
<listcomp>z.PixtralVisionModel.forward.<locals>.<listcomp>Ä  s[   ø€ ð 
ð 
ð 
á��tð �#Ð5˜$˜qœ' T¤_Ñ4Ð5Ð7U¸$¸q¼'ÀTÄ_Ñ:TÐ7UÐUÔVð
ð 
ð 
r4   c                 óB   — g | ]}|                      d ¦  «        j        ‘ŒS ©r   )ÚflattenÚT©r'  r”   s     r2   r)  z.PixtralVisionModel.forward.<locals>.<listcomp>Ê  s$   € Ð!LÐ!LÐ!L°Q !§)¢)¨A¡,¤,¤.Ð!LÐ!LÐ!Lr4   r   r   )r)   T)Únon_blockingrp   c                 óD   — g | ]}|j         d          |j         d         z  ‘ŒS )r   r   )r   r.  s     r2   r)  z.PixtralVisionModel.forward.<locals>.<listcomp>Ú  s)   € ÐFÐFÐF¨q�”˜”˜qœw rœ{Ñ*ÐFÐFÐFr4   )r�   r°   )r   r  rÏ   rh   rn   r
  r    r'   r„   r  r3   r8   rU   rV   rI   r   r   r  r  )rH   rö   r$  rœ   r¶   r¸   r,   r-   Útarget_dtypeÚpatch_embedsr(   rp   r°   r�   s   `             r2   rr   zPixtralVisionModel.forward´  s¸  ø€ ð ÐØ+7Ô+=Ñ(ˆJ˜˜6 5Ø" E˜?Ð+¨jÑ8ˆKð ”Ô-Ô3ˆØ—’ |§¢¸\ Ñ'JÔ'JÑKÔKˆð
ð 
ð 
ð 
å" <°Ñ=Ô=ð
ñ 
ô 
Ðõ ”yÐ!LÐ!LÐ:KÐ!LÑ!LÔ!LÐRSÐTÑTÔT×^Ò^Ð_`ÑaÔaˆØ—{’{ <Ñ0Ô0ˆõ 0Ø¨¬Ô)?À4Ä;ÔCYÑ)Yð
ñ 
ô 
ˆð ".×!7Ò!7¸Ñ!:Ô!:×!=Ò!=¸lÔ>QÐ`dÐ!=Ñ!eÔ!eˆˆ~Ñà"×=Ò=¸lÈLÑYÔYÐå'¨¬Ñ4Ô4ð 	à!ˆNˆNå:ØFÐFÐ4EÐFÑFÔFÈñô ˆNð  ˆtÔØð
à)Ø 3ð
ð 
ð ð	
ð 
ð 	
r4   rÇ   )rE   rt   ru   rù   r@   r#  r   r   r   r    rw   r   r   r{   r	   rr   r}   r~   s   @r2   r  r  œ  sÆ   ø€ € € € € à(Ððð ð ð ð ð"ð ð ð  ØØð ,0ð+
ð +
à”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>rC     s�  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø /Ð /Ð /Ð /Ð /Ð /Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð 
ˆÔ	˜HÑ	%Ô	%€ð ð  ð  ðU<ð U<ð U<ð U<ð U<˜RœYñ U<ô U<ð U<ðr(ð (ð (ðð ð ð ðB ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.?)ð ?)ð ?)ð ?)ð ?)�r”yñ ?)ô ?)ð ?)ðFð ð ð ð �”ñ ô ð ð"Jð Jð Jð Jð J�R”Yñ Jô Jð Jð(&ð &ð &ð &ð &Ð6ñ &ô &ð &ðR%@ð %@ð %@ð %@ð %@˜œñ %@ô %@ð %@ðP ðð ð ð ð ˜_ñ ô ñ „ðð"ð ð ð  ðE
ð E
ð E
ð E
ð E
Ð/ñ E
ô E
ñ „ðE
ðP  Ð!9Ð
:€€€r4   