§
    ‚Štjª£  ã                   óh  — d dl mZmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dl
m	c 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#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,  e"d¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z- e"d¬¦  «        e G d„ de ¦  «        ¦   «         ¦   «         Z. G d„ de	j/        ¦  «        Z0 G d„ de	j/        ¦  «        Z1 G d„ de	j/        ¦  «        Z2de3d e3d!ej4        fd"„Z5 G d#„ d$e	j/        ¦  «        Z6	 	 	 dTd&e	j/        d'ej4        d(ej4        d)ej4        d*ej4        dz  d+e7e3z  d,e7dz  d-e7dz  d!e8ej4        ej4        f         fd.„Z9d/ej4        d0e3d!ej4        fd1„Z: G d2„ d3e	j/        ¦  «        Z; G d4„ d5e	j<        ¦  «        Z= G d6„ d7e	j/        ¦  «        Z> G d8„ d9e¦  «        Z?e" G d:„ d;e¦  «        ¦   «         Z@ e"d<¬¦  «         G d=„ d>e@¦  «        ¦   «         ZAd?ZB G d@„ dAe	j/        ¦  «        ZCdUdDejD        d e3dEe7fdF„ZE e"dG¬¦  «         G dH„ dIe@¦  «        ¦   «         ZF e"dJ¬¦  «         G dK„ dLe@¦  «        ¦   «         ZG e"dM¬¦  «         G dN„ dOe@¦  «        ¦   «         ZH e"dP¬¦  «         G dQ„ dRe@¦  «        ¦   «         ZIg dS¢ZJdS )Vé    )ÚCallableÚIterable)Ú	dataclass)ÚAnyNé   )Úinitialization)ÚACT2FN)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚVideoPrismConfigÚVideoPrismTextConfigÚVideoPrismVisionConfigzFBase class for model outputs that include spatial and temporal states.)Úcustom_introc                   óP   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dS )Ú+BaseModelOutputWithSpatialAndTemporalStatesa™  
    last_temporal_hidden_state (`torch.FloatTensor`, *optional*):
        The last hidden state of the temporal encoder, typically of shape
        `(batch_size * num_patches, num_frames, hidden_size)`.
    last_spatial_hidden_state (`torch.FloatTensor`, *optional*):
        The last hidden state of the spatial encoder, typically of shape
        `(batch_size * num_frames, num_patches, hidden_size)`.
    NÚlast_temporal_hidden_stateÚlast_spatial_hidden_state)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    ÚtorchÚFloatTensorÚ__annotations__r!   © ó    úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/videoprism/modeling_videoprism.pyr   r   +   sQ   € € € € € € ðð ð <@Ð Ô 1°DÑ 8Ð?Ð?Ñ?Ø:>Ð˜uÔ0°4Ñ7Ð>Ð>Ñ>Ð>Ð>r*   r   z+Base class for VideoPrismClipModel outputs.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j        dz  ed<   dZeed<   dZeed<   dZej        dz  ed	<   d
ee         fd„ZdS )ÚVideoPrismClipOutputa¼  
    logits_per_video (`torch.FloatTensor` of shape `(video_batch_size, text_batch_size)`):
        The scaled dot product scores between `video_embeds` and `text_embeds`. This represents the video-text
        similarity scores.
    logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, video_batch_size)`):
        The scaled dot product scores between `text_embeds` and `video_embeds`. This represents the text-video
        similarity scores.
    video_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)`):
        The video embeddings obtained by applying the projection layer to the pooled output of [`VideoPrismVideoModel`].
    text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`VideoPrismTextModel`].
    video_model_output (`BaseModelOutputWithPooling`):
        The output of [`VideoPrismVideoModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`VideoPrismTextModel`].
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
        Contrastive loss for video-text similarity.
    NÚlogits_per_videoÚlogits_per_textÚvideo_embedsÚtext_embedsÚvideo_model_outputÚtext_model_outputÚlossÚreturnc                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ót   •K  — | ]2}|d vr‰|         n!t          ‰|¦  «                             ¦   «         V — Œ3dS ))r3   r2   N)ÚgetattrÚto_tuple)Ú.0ÚkÚselfs     €r+   ú	<genexpr>z0VideoPrismClipOutput.to_tuple.<locals>.<genexpr>\   sc   øè è € ð 
ð 
àð Ð KÐKÐKˆD�ŒGˆGÕQXÐY]Ð_`ÑQaÔQa×QjÒQjÑQlÔQlð
ð 
ð 
ð 
ð 
ð 
r*   )ÚtupleÚkeys©r<   s   `r+   r9   zVideoPrismClipOutput.to_tuple[   sC   ø€ Ýð 
ð 
ð 
ð 
à—Y’Y‘[”[ð
ñ 
ô 
ñ 
ô 
ð 	
r*   )r"   r#   r$   r%   r.   r&   r'   r(   r/   r0   r1   r2   r   r3   r4   r>   r   r9   r)   r*   r+   r-   r-   ;   sÞ   € € € € € € ð
ð ð& 26Ð�eÔ'¨$Ñ.Ð5Ð5Ñ5Ø04€O�UÔ&¨Ñ-Ð4Ð4Ñ4Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ø59ÐÐ2Ð9Ð9Ñ9Ø48ÐÐ1Ð8Ð8Ñ8Ø%)€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)ð
˜% œ*ð 
ð 
ð 
ð 
ð 
ð 
r*   r-   c                   óR   ‡ — e Zd ZdZdefˆ fd„Zd	dej        dedej        fd„Z	ˆ xZ
S )
ÚVideoPrismTubeletEmbeddingsañ  
    VideoPrism Tubelet Embeddings.

    The authors of Videoprism use the Factorized Encoder architecture, i.e. "Model 2", introduced in the VIVIT paper (https://huggingface.co/papers/2103.15691).
    This differs from Vivit by using a convolution of `tubelet_size=(1, 18, 18)`, which is essentially a 2d convolution in the spatial dimension.
    The temporal dimension is also merged with the `batch_size` in order to make sure the image embeddings have no temporal component, unlike Vivit.
    Úconfigc                 ó˜  •— t          ¦   «                              ¦   «          |j        }|j        }t	          |t
          ¦  «        r|n||f}|| _        t          j        |j        |j	        ||¬¦  «        | _
        | j        d         |d         z  | j        d         |d         z  g| _        | j        d         | j        d         z  | _        d S )N)Úkernel_sizeÚstrider   r   é   )ÚsuperÚ__init__Útubelet_sizeÚ
image_sizeÚ
isinstancer   ÚnnÚConv3dÚnum_channelsÚhidden_sizeÚ
projectionÚpos_emb_shapeÚnum_patches)r<   rC   rJ   rK   Ú	__class__s       €r+   rI   z$VideoPrismTubeletEmbeddings.__init__k   sÌ   ø€ Ý‰Œ×ÒÑÔÐØÔ*ˆØÔ&ˆ
Ý#-¨j½(Ñ#CÔ#CÐa�Z�ZÈ*ÐV`ÐIaˆ
Ø$ˆŒÝœ)ØÔ Ô!3ÀÐVbð
ñ 
ô 
ˆŒð #œo¨aÔ0°LÀ´OÑCÀTÄ_ÐUVÔEWÐ[gÐhiÔ[jÑEjÐkˆÔØÔ-¨aÔ0°4Ô3EÀaÔ3HÑHˆÔÐÐr*   FÚpixel_values_videosÚinterpolate_pos_encodingr5   c                 óÄ  — |j         \  }}}}}|sT|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d�	¦  «        ‚|                     dd¦  «        }|                      |¦  «        }|                     d¦  «                             dddd¦  «        }|j         \  }}}	}
|                     ||z  |	|
¦  «        }|S )	Nr   r   zImage size (Ú*z) doesn't match model (z[). Set interpolate_pos_encoding=True to automatically resize the model position embeddings.rG   r   )ÚshaperK   Ú
ValueErrorÚ	transposerQ   ÚflattenÚpermuteÚreshape)r<   rU   rV   Ú
batch_sizeÚ
num_framesrO   ÚheightÚwidthÚhidden_statesrS   rP   s              r+   Úforwardz#VideoPrismTubeletEmbeddings.forwardw   s/  € Ø>QÔ>WÑ;ˆ
�J ¨f°eØ'ð 	¨V°t´ÀqÔ7IÒ-IÐ-IÈUÐVZÔVeÐfgÔVhÒMhÐMhÝð K˜vð  Kð  K¨ð  Kð  KÀdÄoÐVWÔFXð  Kð  KÐ[_Ô[jÐklÔ[mð  Kð  Kð  Kñô ð ð 2×;Ò;¸A¸qÑAÔAÐØŸšÐ(;Ñ<Ô<ˆà%×-Ò-¨aÑ0Ô0×8Ò8¸¸A¸qÀ!ÑDÔDˆà;HÔ;NÑ8ˆ
�J ¨[Ø%×-Ò-¨j¸:Ñ.EÀ{ÐT_Ñ`Ô`ˆàÐr*   ©F)r"   r#   r$   r%   r   rI   r&   ÚTensorÚboolrd   Ú__classcell__©rT   s   @r+   rB   rB   b   s‹   ø€ € € € € ðð ð
IÐ5ð 
Ið 
Ið 
Ið 
Ið 
Ið 
Iðð ¨5¬<ð ÐSWð ÐdiÔdpð ð ð ð ð ð ð ð r*   rB   c                   ó†   ‡ — e Zd ZdZdefˆ fd„Zdej        dededej        fd„Z		 dd
ej        de
dz  dej        fd„Zˆ xZS )ÚVideoPrismSpatialEmbeddingszY
    Construct the CLS token, position and tubelet patch embeddings for video input.
    rC   c                 óP  •— t          ¦   «                              ¦   «          t          |¦  «        | _        | j        j        }t          j        t          j        d||j	        ¦  «        ¦  «        | _
        t          j        |j        ¦  «        | _        |j        dd …         | _        d S ©Nr   )rH   rI   rB   Úpatch_embeddingsrS   rM   Ú	Parameterr&   ÚzerosrP   Úposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutrJ   Ú
patch_size)r<   rC   rS   rT   s      €r+   rI   z$VideoPrismSpatialEmbeddings.__init__Ž   s‚   ø€ Ý‰Œ×ÒÑÔÐÝ ;¸FÑ CÔ CˆÔØÔ+Ô7ˆÝ#%¤<µ´¸A¸{ÈFÔL^Ñ0_Ô0_Ñ#`Ô#`ˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒà Ô-¨a¨b¨bÔ1ˆŒˆˆr*   Ú
embeddingsra   rb   r5   c                 ó2  — |j         d         }| j        j         d         }t          j                             ¦   «         s||k    r||k    r| j        S |j         d         }|| j        d         z  }|| j        d         z  }t          |dz  ¦  «        }	| j                             d|	|	|¦  «        }
|
                     dddd¦  «        }
t          j
                             |
||fdd¬	¦  «        }
|
                     dddd¦  «                             dd|¦  «        }
|
S )
á   
        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   ç      à?r   rG   ÚbilinearT©ÚsizeÚmodeÚ	antialias)rY   rq   r&   ÚjitÚ
is_tracingru   r   r^   r]   rM   Ú
functionalÚinterpolateÚview)r<   rv   ra   rb   rS   Únum_positionsÚdimÚnum_row_patchesÚnum_col_patchesÚsqrt_num_positionsÚpatch_pos_embeds              r+   rV   z4VideoPrismSpatialEmbeddings.interpolate_pos_encoding—   s1  € ð !Ô& qÔ)ˆØÔ0Ô6°qÔ9ˆõ Œy×#Ò#Ñ%Ô%ð 	,¨+¸Ò*FÐ*FÈ6ÐUZÊ?È?ØÔ+Ð+àÔ˜rÔ"ˆà  D¤O°AÔ$6Ñ6ˆØ 4¤?°1Ô#5Ñ5ˆå& }°cÑ'9Ñ:Ô:ÐØÔ2×:Ò:¸1Ð>PÐRdÐfiÑjÔjˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆõ œ-×3Ò3ØØ! ?Ð3ØØð	 4ñ 
ô 
ˆð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆØÐr*   FrU   rV   Nc                 óÄ   — |j         \  }}}}}|                      ||¦  «        }|r||                      |||¦  «        z   }n
|| j        z   }|                      |¦  «        }|S ©N)rY   rn   rV   rq   rt   )	r<   rU   rV   ÚbatchÚframesÚchannelra   rb   rv   s	            r+   rd   z#VideoPrismSpatialEmbeddings.forward½   s}   € ð
 1DÔ0IÑ-ˆˆv�w ¨Ø×*Ò*Ð+>Ð@XÑYÔYˆ
ð $ð 	?Ø# d×&CÒ&CÀJÐPVÐX]Ñ&^Ô&^Ñ^ˆJˆJà# dÔ&>Ñ>ˆJà—\’\ *Ñ-Ô-ˆ
àÐr*   re   )r"   r#   r$   r%   r   rI   r&   rf   ÚintrV   rg   rd   rh   ri   s   @r+   rk   rk   ‰   sÉ   ø€ € € € € ðð ð2Ð5ð 2ð 2ð 2ð 2ð 2ð 2ð$°5´<ð $Èð $ÐUXð $Ð]bÔ]ið $ð $ð $ð $ðR 16ðð à"œ\ðð #'¨¡+ðð 
Œð	ð ð ð ð ð ð ð r*   rk   c            	       óŒ   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        fd„Z	 ddej        d	ej	        d
e
dz  dej        fd„Zˆ xZS )ÚVideoPrismTemporalEmbeddingszÍ
    VideoPrism Temporal Embeddings.

    Receives embeddings from spatial encoder, reshapes the hidden state to
    (batch_size * num_patches, num_frames, hidden_size) and adds positional embeddings.
    rC   c                 óò   •— t          ¦   «                              ¦   «          t          j        t	          j        d|j        |j        ¦  «        ¦  «        | _        t          j	        |j
        ¦  «        | _        d S rm   )rH   rI   rM   ro   r&   rp   r`   rP   rq   rr   rs   rt   ©r<   rC   rT   s     €r+   rI   z%VideoPrismTemporalEmbeddings.__init__Ø   sX   ø€ Ý‰Œ×ÒÑÔÐÝ#%¤<µ´¸A¸vÔ?PÐRXÔRdÑ0eÔ0eÑ#fÔ#fˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr*   rv   r5   c                 ó\  — |j         d         }| j        j         d         }t          j                             ¦   «         s||k    r| j        S | j        }|j         d         }|                     d¦  «        }t          j                             |||fdd¬¦  «        }| 	                    d¦  «        S )rx   r   ry   r{   Tr|   )
rY   rq   r&   r€   r�   Ú	unsqueezerM   r‚   rƒ   Úsqueeze)r<   rv   Útarget_emb_lengthÚsource_emb_lengthÚ
source_embr†   s         r+   rV   z5VideoPrismTemporalEmbeddings.interpolate_pos_encodingÝ   s»   € ð 'Ô,¨QÔ/ÐØ Ô4Ô:¸1Ô=Ðõ Œy×#Ò#Ñ%Ô%ð 	,Ð*;Ð?PÒ*PÐ*PØÔ+Ð+àÔ-ˆ
ØÔ˜rÔ"ˆØ×)Ò)¨!Ñ,Ô,ˆ
Ý”]×.Ò.ØØ# SÐ)ØØð	 /ñ 
ô 
ˆ
ð ×!Ò! !Ñ$Ô$Ð$r*   FrU   Úinput_shaperV   Nc                 ó4  — |�|\  }}}}}|j         \  }	}
}|                     |||
|¦  «        }|                     dd¦  «        }|                     ||
z  ||¦  «        }|r||                      |¦  «        z   }n
|| j        z   }|                      |¦  «        }|S )NrG   r   )rY   r„   r[   r^   rV   rq   rt   )r<   rU   r›   rV   r�   rŽ   r�   ra   rb   Ú_Úfeaturesr†   rc   rv   s                 r+   rd   z$VideoPrismTemporalEmbeddings.forwardù   s»   € ð Ð"Ø4?Ñ1ˆE�6˜7 F¨EØ.Ô4Ñˆˆ8�SØ+×0Ò0°¸ÀÈ#ÑNÔNˆØ%×/Ò/°°1Ñ5Ô5ˆØ"×*Ò*¨5°8Ñ+;¸VÀSÑIÔIˆ
ð $ð 	?Ø# d×&CÒ&CÀJÑ&OÔ&OÑOˆJˆJà# dÔ&>Ñ>ˆJØ—\’\ *Ñ-Ô-ˆ
ØÐr*   re   )r"   r#   r$   r%   r   rI   r&   rf   rV   ÚSizerg   rd   rh   ri   s   @r+   r’   r’   Ð   sÄ   ø€ € € € € ðð ð>Ð5ð >ð >ð >ð >ð >ð >ð
%°5´<ð %ÀEÄLð %ð %ð %ð %ð@ 16ð	ð à"œ\ðð ”Zðð #'¨¡+ð	ð
 
Œðð ð ð ð ð ð ð r*   r’   Únum_posr†   r5   c                 ó€  — ddt          j        d|dt           j        ¬¦  «        |z  z  z  }t          j        dt          j        | t           j        ¬¦  «                             ¦   «         |¦  «                             ¦   «         }t          j        t          j        |¦  «        t          j        |¦  «        fd¬¦  «        S )	Nç      ð?i'  r   rG   ©Údtypezi , j -> i jr   ©r†   )r&   ÚarangeÚint64ÚeinsumÚfloatÚcatÚsinÚcos)r    r†   Úinv_freqÚsinusoid_inps       r+   Úcreate_sinusoidal_positionsr¯     s–   € Ø�e¥¤¨Q°°Q½e¼kÐ JÑ JÔ JÈSÑ PÑQÑR€HÝ”< µ´¸WÍEÌKÐ0XÑ0XÔ0X×0^Ò0^Ñ0`Ô0`ÐbjÑkÔk×qÒqÑsÔs€LÝŒ9•e”i Ñ-Ô-­u¬y¸Ñ/FÔ/FÐGÈQÐOÑOÔOÐOr*   c            	       ó~   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej        dz  dej        dz  dej        dz  dej        fd„Z	ˆ xZ
S )
ÚVideoPrismTextEmbeddingsrC   c                 ó   •— t          ¦   «                              ¦   «          || _        |j        }t	          j        |j        |¦  «        | _        |                      dt          |j
        |j        ¦  «        ¦  «         |                      dt          j        |j
        ¦  «                             d¦  «        ¦  «         t	          j        t          j        dd|j        ¦  «        ¦  «        | _        |j        dz  | _        d S )NÚposition_embeddingÚposition_ids©r   ry   r   rz   )rH   rI   rC   rP   rM   Ú	EmbeddingÚ
vocab_sizeÚtoken_embeddingÚregister_bufferr¯   Úmax_position_embeddingsr&   r¦   Úexpandro   rp   Úcls_embÚscaling)r<   rC   Ú	embed_dimrT   s      €r+   rI   z!VideoPrismTextEmbeddings.__init__  s×   ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ&ˆ	Ý!œ|¨FÔ,=¸yÑIÔIˆÔØ×ÒØ Õ"=¸fÔ>\Ð^dÔ^pÑ"qÔ"qñ	
ô 	
ð 	
ð 	×Ò˜^­U¬\¸&Ô:XÑ-YÔ-Y×-`Ò-`ÐahÑ-iÔ-iÑjÔjÐjÝ”|¥E¤K°°1°fÔ6HÑ$IÔ$IÑJÔJˆŒØÔ)¨3Ñ.ˆŒˆˆr*   NÚ	input_idsr´   Úinputs_embedsr5   c                 óp  — |€|                       |¦  «        }|€| j        d d …d |j        d         …f         }|| j        z  }| j        |                              |j        ¬¦  «        }||z   }| j        | j        z  }|                     |j        d         dd¦  «        }t          j
        ||fd¬¦  «        }|S )Nr   r£   r   ry   r¥   )r¸   r´   rY   r½   r³   Útor¤   r¼   r»   r&   rª   )r<   r¿   r´   rÀ   rq   rv   r¼   s          r+   rd   z VideoPrismTextEmbeddings.forward"  sÊ   € ð Ð Ø ×0Ò0°Ñ;Ô;ˆMàÐØÔ,¨Q¨Q¨QÐ0H°-Ô2EÀaÔ2HÐ0HÐ-HÔIˆLà%¨¬Ñ4ˆØ"Ô5°lÔC×FÒFÈ]ÔM`ÐFÑaÔaÐØ"Ð%8Ñ8ˆ
à”, ¤Ñ-ˆØ—.’. Ô!1°!Ô!4°b¸"Ñ=Ô=ˆÝ”Y 
¨GÐ4¸!Ð<Ñ<Ô<ˆ
ØÐr*   )NNN)r"   r#   r$   r   rI   r&   Ú
LongTensorr'   rf   rd   rh   ri   s   @r+   r±   r±     s©   ø€ € € € € ð
/Ð3ð 
/ð 
/ð 
/ð 
/ð 
/ð 
/ð .2Ø04Ø26ð	ð àÔ# dÑ*ðð Ô&¨Ñ-ðð Ô(¨4Ñ/ð	ð
 
Œðð ð ð ð ð ð ð r*   r±   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskrt   r½   Úsoftcapc                 ól  — |€
| j         dz  }t          || j        ¦  «        }	t          || j        ¦  «        }
t          j        ||	                     dd¦  «        ¦  «        |z  }|�||z  }t          j        |¦  «        }||z  }|�||z   }t          j         	                    |dt          j
        ¬¦  «                             |j        ¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||
¦  «        }|                     dd¦  «                             ¦   «         }||fS )Nç      à¿rG   r   ry   )r†   r¤   )ÚpÚtrainingr   )Úhead_dimÚ	repeat_kvÚnum_key_value_groupsr&   Úmatmulr[   ÚtanhrM   r‚   ÚsoftmaxÚfloat32rÂ   r¤   rt   rÎ   Ú
contiguous)rÅ   rÆ   rÇ   rÈ   rÉ   rt   r½   rÊ   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs                r+   Úeager_attention_forwardrÜ   8  s%  € ð €Ø”/ 4Ñ'ˆå˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LàÐØ# gÑ-ˆÝ”z ,Ñ/Ô/ˆØ# gÑ-ˆØÐ!Ø# nÑ4ˆõ ”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€KØ˜Ð$Ð$r*   rc   Ún_repc                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||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)rY   r»   r^   )rc   rÝ   r�   Únum_key_value_headsÚslenrÏ   s         r+   rÐ   rÐ   Z  s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr*   c                   ó�   ‡ — e Zd Zdeez  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 )
ÚVideoPrismAttentionrC   c                 ó”  •— t          ¦   «                              ¦   «          || _        t          |d|j        |j        z  ¦  «        | _        |j        | _        | j        dz  | _	        d| _
        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        | j        z  |j        d¬¦  «        | _        d| _        |j        | _        d S )NrÏ   rÌ   F©ÚbiasTr¢   )rH   rI   rC   r8   rP   Únum_attention_headsrÏ   Úattention_probs_dropout_probÚattention_dropoutr½   Ú	is_causalrM   ÚLinearÚqkv_biasÚq_projÚk_projÚv_projÚo_projrÑ   Úattn_logit_softcappingr”   s     €r+   rI   zVideoPrismAttention.__init__g  s  ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ!'Ô!DˆÔØ”} dÑ*ˆŒØˆŒå”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^ÐeiÐjÑjÔjˆŒØ$'ˆÔ!Ø&,Ô&CˆÔ#Ð#Ð#r*   Nrc   rÉ   r×   r5   c                 ó¸  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        }	 |	| ||||f| j        sdn| j        | j        | j        dœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )Nry   r   rG   rÄ   )rt   r½   rÊ   )rY   rÏ   rì   r„   r[   rí   rî   r   Úget_interfacerC   Ú_attn_implementationrÜ   rÎ   rè   r½   rð   r^   rÖ   rï   )r<   rc   rÉ   r×   r›   Úhidden_shapeÚquery_statesrØ   rÙ   Úattention_interfacerÛ   rÚ   s               r+   rd   zVideoPrismAttention.forwardv  s}  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}ÐH�C�C°$Ô2HØ”LØÔ/ð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r*   rŒ   )r"   r#   r$   r   r   rI   r&   rf   r   r   r>   rd   rh   ri   s   @r+   râ   râ   f  s³   ø€ € € € € ðDÐ5Ð8LÑLð Dð Dð Dð Dð Dð Dð$ /3ð)ð )à”|ð)ð œ tÑ+ð)ð Ð+Ô,ð	)ð
 
ˆuŒ|˜Uœ\Ð)Ô	*ð)ð )ð )ð )ð )ð )ð )ð )r*   râ   c                   ó2   — e Zd Zdej        dej        fd„ZdS )ÚVideoPrismLayerNormrc   r5   c                 ó`   — t          j        || j        | j        dz   | j        | j        ¦  «        S )Nr¢   )ÚFÚ
layer_normÚnormalized_shapeÚweightrå   Úeps©r<   rc   s     r+   rd   zVideoPrismLayerNorm.forward™  s/   € õ Œ|˜M¨4Ô+@À$Ä+ÐPSÑBSÐUYÔU^Ð`dÔ`hÑiÔiÐir*   N)r"   r#   r$   r&   rf   rd   r)   r*   r+   rø   rø   ˜  sB   € € € € € ðj U¤\ð j°e´lð jð jð jð jð jð jr*   rø   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚVideoPrismMLPrC   c                 ó  •— t          ¦   «                              ¦   «          || _        t          |j                 | _        t          j        |j        |j	        ¦  «        | _
        t          j        |j	        |j        ¦  «        | _        d S rŒ   )rH   rI   rC   r	   Ú
hidden_actÚactivation_fnrM   rê   rP   Úintermediate_sizeÚfc1Úfc2r”   s     €r+   rI   zVideoPrismMLP.__init__¡  sf   ø€ Ý‰Œ×ÒÑÔÐØˆŒÝ# FÔ$5Ô6ˆÔÝ”9˜VÔ/°Ô1IÑJÔJˆŒÝ”9˜VÔ5°vÔ7IÑJÔJˆŒˆˆr*   rc   r5   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S rŒ   )r  r  r  rÿ   s     r+   rd   zVideoPrismMLP.forward¨  s=   € ØŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆØŸš Ñ/Ô/ˆàÐr*   )	r"   r#   r$   r   rI   r&   rf   rd   rh   ri   s   @r+   r  r     sr   ø€ € € € € ðKÐ/ð Kð Kð Kð Kð Kð Kð U¤\ð °e´lð ð ð ð ð ð ð ð r*   r  c            	       óv   ‡ — e Zd Zdeez  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 )
ÚVideoPrismLayerrC   c                 óT  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |j        |j        ¬¦  «        | _        t	          |j        |j        ¬¦  «        | _        t          |¦  «        | _
        t          j        |j        ¦  «        | _        d S ©N©rþ   )rH   rI   râ   Ú	attentionrø   rP   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterr  ÚmlprM   rr   rs   rt   r”   s     €r+   rI   zVideoPrismLayer.__init__±  s…   ø€ Ý‰Œ×ÒÑÔÐÝ,¨VÑ4Ô4ˆŒÝ 3°FÔ4FÈFÔLaÐ bÑ bÔ bˆÔÝ2°6Ô3EÈ6ÔK`ÐaÑaÔaˆÔÝ  Ñ(Ô(ˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr*   Nrc   rÉ   r×   r5   c                 ó  — |}|                       |¦  «        } | j        ||fi |¤Ž\  }}|                      |¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   }|S rŒ   )r  r  rt   r  r  )r<   rc   rÉ   r×   Úresidualr�   s         r+   rd   zVideoPrismLayer.forward¹  s£   € ð !ˆØ×-Ò-¨mÑ<Ô<ˆØ)˜4œ>¨-¸ÐRÐRÈ6ÐRÐRÑˆ�qØŸš ]Ñ3Ô3ˆØ%¨Ñ0ˆð !ˆØ×,Ò,¨]Ñ;Ô;ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3ˆØ%¨Ñ0ˆàÐr*   rŒ   )r"   r#   r$   r   r   rI   r&   rf   r   r   rd   rh   ri   s   @r+   r
  r
  °  s    ø€ € € € € ð>Ð5Ð8LÑLð >ð >ð >ð >ð >ð >ð /3ðð à”|ðð œ tÑ+ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r*   r
  c                   óŠ   ‡ — e Zd ZU eed<   dZdZdZdZg d¢Z	dZ
dZdZdZdZeedœZ ej        ¦   «         ˆ fd	„¦   «         Zˆ xZS )
ÚVideoPrismPreTrainedModelrC   ÚmodelrU   )ÚvideoÚtextT)rk   r’   r
  r±   Ú'VideoPrismMultiheadAttentionPoolingHeadF)rc   Ú
attentionsc                 ó  •— t          ¦   «                              |¦  «         t          |t          j        t          j        f¦  «        rt          j        |j        ¦  «         dS t          |t          ¦  «        rt          j        |j
        ¦  «         dS t          |t          ¦  «        rt          j        |j
        ¦  «         dS t          |t          ¦  «        r4t          j        |j        ¦  «         t          j        |j        ¦  «         dS t          |t           ¦  «        rt          j        |j        ¦  «         dS t          |t"          ¦  «        r¸t%          |j        j        |j        j        ¦  «                             |j        j        |j        j        ¬¦  «        }t          j        |j        |¦  «         t          j        |j        t9          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS t          |t@          ¦  «        rat          j!        |j"        j#        j        |j        j        dz  ¬¦  «         t          j!        |j"        j$        |j        j        dz  ¬¦  «         dS dS )zInitialize the weights©Údevicer¤   ry   rµ   rÌ   )ÚstdN)%rH   Ú_init_weightsrL   rM   rê   rN   ÚinitÚlecun_normal_rý   rk   rq   r’   r  Úzeros_Úper_dim_scaleÚpooling_attention_queryrø   r±   r¯   rC   rº   rP   rÂ   r³   r  r¤   Úcopy_r´   r&   r¦   rY   r»   ÚVideoPrismTextModelÚnormal_rv   r¸   r¼   )r<   rÅ   r³   rT   s      €r+   r   z'VideoPrismPreTrainedModel._init_weightsê  s:  ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�rœy­"¬)Ð4Ñ5Ô5ð 	YÝÔ˜vœ}Ñ-Ô-Ð-Ð-Ð-å˜Õ ;Ñ<Ô<ð 	YÝÔ˜vÔ9Ñ:Ô:Ð:Ð:Ð:å˜Õ <Ñ=Ô=ð 	YÝÔ˜vÔ9Ñ:Ô:Ð:Ð:Ð:å˜Õ GÑHÔHð 	YÝŒK˜Ô,Ñ-Ô-Ð-ÝÔ˜vÔ=Ñ>Ô>Ð>Ð>Ð>å˜Õ 3Ñ4Ô4ð 	YÝŒK˜œÑ&Ô&Ð&Ð&Ð&å˜Õ 8Ñ9Ô9ð 		YÝ!<Ø”Ô5°v´}Ô7Pñ"ô "çŠb˜Ô1Ô8ÀÔ@YÔ@_ˆbÑ`Ô`ð õ ŒJ�vÔ0Ð2DÑEÔEÐEÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhå˜Õ 3Ñ4Ô4ð 	YÝŒL˜Ô*Ô:ÔAÀvÄ}ÔG`ÐbfÑGfÐgÑgÔgÐgÝŒL˜Ô*Ô2¸¼Ô8QÐSWÑ8WÐXÑXÔXÐXÐXÐXð	Yð 	Yr*   )r"   r#   r$   r   r(   Ú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_outputsr&   Úno_gradr   rh   ri   s   @r+   r  r  Ð  s¾   ø€ € € € € € àÐÐÑØÐØ+€OØ(ÐØ&*Ð#ðð ð Ðð €NØÐØÐØ"&ÐØ!Ðà(Ø)ðð Ðð
 €U„]�_„_ðYð Yð Yð Yñ „_ðYð Yð Yð Yð Yr*   r  z¬
    The bare VideoPrism vision encoder outputting raw hidden-states without any specific head on top. This model is the backbone encoder used in VideoPrismVideoModel.
    c                   óÔ   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej	        fd„Z
dej	        fd„Zeee	 	 ddej        d	z  ded	z  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚVideoPrismVisionModelrC   ©r  r  c                 ó   •‡— t          ¦   «                              ‰¦  «         t          ‰j        ‰j        ¬¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t          ‰¦  «        | _        t          ‰¦  «        | _
        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )Nr  c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   ©r
  ©r:   r�   rC   s     €r+   ú
<listcomp>z2VideoPrismVisionModel.__init__.<locals>.<listcomp>  s!   ø€ Ð,oÐ,oÐ,oÈ­_¸VÑ-DÔ-DÐ,oÐ,oÐ,or*   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   r:  r;  s     €r+   r<  z2VideoPrismVisionModel.__init__.<locals>.<listcomp>  s!   ø€ Ð-qÐ-qÐ-qÈ!­o¸fÑ.EÔ.EÐ-qÐ-qÐ-qr*   )rH   rI   rø   rP   r  Ú
layernorm1Ú
layernorm2rk   Úspatial_embeddingsr’   Útemporal_embeddingsrM   Ú
ModuleListÚrangeÚnum_spatial_layersÚspatial_layersÚnum_temporal_layersÚtemporal_layersÚ	post_initr”   s    `€r+   rI   zVideoPrismVisionModel.__init__  sì   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý-¨fÔ.@ÀfÔF[Ð\Ñ\Ô\ˆŒÝ-¨fÔ.@ÀfÔF[Ð\Ñ\Ô\ˆŒÝ"=¸fÑ"EÔ"EˆÔÝ#?ÀÑ#GÔ#GˆÔ Ý œmÐ,oÐ,oÐ,oÐ,oÍeÐTZÔTmÑNnÔNnÐ,oÑ,oÔ,oÑpÔpˆÔÝ!œ}Ð-qÐ-qÐ-qÐ-qÍuÐU[ÔUoÑOpÔOpÐ-qÑ-qÔ-qÑrÔrˆÔØ�ŠÑÔÐÐÐr*   r5   c                 ó   — | j         j        S rŒ   ©r@  rn   r@   s    r+   Úget_input_embeddingsz*VideoPrismVisionModel.get_input_embeddings  s   € ØÔ&Ô7Ð7r*   rÈ   c                 ó   — || j         _        d S rŒ   rJ  ©r<   rÈ   s     r+   Úset_input_embeddingsz*VideoPrismVisionModel.set_input_embeddings!  s   € Ø38ˆÔÔ0Ð0Ð0r*   NFrU   rV   r×   c                 óN  — |€t          d¦  «        ‚|j        }|                      ||¦  «        }|}| j        D ]} ||fi |¤Ž}Œ|                      |¦  «        }|                      |||¦  «        }	|	}
| j        D ]} ||
fi |¤Ž}
Œ|                      |
¦  «        }|j        \  }}}|                     |d         d||¦  «         	                    dd¦  «         
                    ¦   «         }|j        \  }}}}|                     |d         ||z  d¦  «        }t          ||
|¬¦  «        S )Nz'You have to specify pixel_values_videosr   ry   r   rG   )Úlast_hidden_stater    r!   )rZ   rY   r@  rE  r>  rA  rG  r?  r„   r[   rÖ   r   )r<   rU   rV   r×   r›   Úspatial_embedsÚspatial_hidden_statesÚspatial_layerrž   Útemporal_embedsÚtemporal_hidden_statesÚtemporal_layerr�   r`   r†   rS   s                   r+   rd   zVideoPrismVisionModel.forward$  s{  € ð Ð&ÝÐFÑGÔGÐGà)Ô/ˆð ×0Ò0Ð1DÐF^Ñ_Ô_ˆØ .ÐØ!Ô0ð 	Sð 	SˆMØ$1 MÐ2GÐ$RÐ$RÈ6Ð$RÐ$RÐ!Ð!Ø—?’?Ð#8Ñ9Ô9ˆð ×2Ò2°8¸[ÐJbÑcÔcˆØ!0ÐØ"Ô2ð 	Vð 	VˆNØ%3 ^Ð4JÐ%UÐ%UÈfÐ%UÐ%UÐ"Ð"Ø—?’?Ð#9Ñ:Ô:ˆð &œ^Ñˆˆ:�sØ—=’= ¨Q¤°°ZÀÑEÔE×OÒOÐPQÐSTÑUÔU×`Ò`ÑbÔbˆØ*2¬.Ñ'ˆˆ:�{ CØ—=’= ¨Q¤°¸kÑ1IÈ2ÑNÔNˆå:Ø&Ø'=Ø&;ð
ñ 
ô 
ð 	
r*   ©NF)r"   r#   r$   r   r(   r+  r)  rI   rM   ÚModulerK  rN  r   r   r   r&   r'   rg   r   r   r   rd   rh   ri   s   @r+   r6  r6  
  s  ø€ € € € € € ð #Ð"Ð"Ñ"Ø!ÐØÐðÐ5ð ð ð ð ð ð ð8 b¤ið 8ð 8ð 8ð 8ð9¨"¬)ð 9ð 9ð 9ð 9ð  ØØð 9=Ø05ð#
ð #
à"Ô.°Ñ5ð#
ð #'¨¡+ð#
ð Ð+Ô,ð	#
ð
 
5ð#
ð #
ð #
ñ „^ñ „_ñ  Ôð#
ð #
ð #
ð #
ð #
r*   r6  g^$3eG÷?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 )
r  rC   c                 ó2  •— t          ¦   «                              ¦   «          || _        |j        |j        z  | _        |j        | _        t          | j        dz  z  | _	        d| _
        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        |j        | j        z  |j        ¬¦  «        | _        t          j        |j        | j        z  |j        d¬¦  «        | _        d| _        t          j        t+          j        | j        ¦  «        ¦  «        | _        t          j        t+          j        dd|j        ¦  «        ¦  «        | _        d S )Nrz   Frä   Tr¢   r   )rH   rI   rC   r  ræ   rÏ   rç   rè   Ú_R_SOFTPLUS_0r½   ré   rM   rê   rP   rë   rì   rí   rî   rï   rÑ   ro   r&   rp   r$  r%  r”   s     €r+   rI   z0VideoPrismMultiheadAttentionPoolingHead.__init__Q  sM  ø€ Ý‰Œ×ÒÑÔÐØˆŒØÔ0°FÔ4NÑNˆŒØ!'Ô!DˆÔÝ$¨¬°sÑ(:Ñ;ˆŒØˆŒå”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô 2°FÔ4NÐQUÔQ^Ñ4^ÐekÔetÐuÑuÔuˆŒÝ”i Ô :¸T¼]Ñ JÈFÔL^ÐeiÐjÑjÔjˆŒØ$'ˆÔ!Ýœ\­%¬+°d´mÑ*DÔ*DÑEÔEˆÔÝ')¤|µE´KÀÀ1ÀfÔFXÑ4YÔ4YÑ'ZÔ'ZˆÔ$Ð$Ð$r*   Nrc   rÉ   r×   r5   c                 ó|  — |j         d d…         }g |¢d‘| j        ‘R }| j                             |d         dd¦  «        } |                      |¦  «        j        g |j         d d…         ¢d‘| j        ‘R Ž                      dd¦  «        }|| j        z  t          j	         
                    | j        ¦  «        z  }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
t          j        | j        j        t$          ¦  «        } || ||	|
|fd| j        sdn| j        d dœ|¤Ž\  }} |j        g |j         d d…         ¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nry   r   r   rG   r¢   rÄ   )r½   rt   rÊ   )rY   rÏ   r%  r»   rì   r„   r[   r½   rM   r‚   Úsoftplusr$  rí   rî   r   rò   rC   ró   rÜ   rÎ   rè   r^   rÖ   rï   )r<   rc   rÉ   r×   r›   rô   rÆ   Úquery_layerrõ   rØ   rÙ   rö   rÛ   rÚ   s                 r+   rd   z/VideoPrismMultiheadAttentionPoolingHead.forwarda  sâ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆàÔ,×3Ò3°KÀ´NÀBÈÑKÔKˆØ-�d—k’k %Ñ(Ô(Ô-ÐS¨u¬{¸3¸B¸3Ô/?ÐSÀÐSÀTÄ]ÐSÐSÐS×]Ò]Ð^_ÐabÑcÔcˆØ" T¤\Ñ1µB´M×4JÒ4JÈ4ÔK]Ñ4^Ô4^Ñ^ˆà—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð Ø#œ}ÐH�C�C°$Ô2HØð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð@¨5¬;°s¸°sÔ+;Ð@¸RÐ@Ð@Ð@×KÒKÑMÔMˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r*   rŒ   )r"   r#   r$   r   rI   r&   r'   rÃ   r   r   r>   rd   rh   ri   s   @r+   r  r  P  s±   ø€ € € € € ð[Ð5ð [ð [ð [ð [ð [ð [ð& 37ð")ð ")àÔ(ð")ð Ô(¨4Ñ/ð")ð Ð+Ô,ð	")ð
 
ˆuÔ  %Ô"3Ð3Ô	4ð")ð ")ð ")ð ")ð ")ð ")ð ")ð ")r*   r  ry   ç�íµ ÷Æ°>Úxrþ   c                 ój   — t          j        | | z                       |d¬¦  «        |z   ¦  «        }| |z  S )zUThis function is intended to align with the l2norm implementation in the FLA library.T)r†   Úkeepdim)r&   ÚrsqrtÚsum)r`  r†   rþ   Úinv_norms       r+   Úl2normrf  †  s4   € åŒ{˜A ™EŸ;š;¨3¸˜;Ñ=Ô=ÀÑCÑDÔD€HØˆx‰<Ðr*   z•
    The bare VideoPrism text encoder outputting last hidden states without any specific head on top. This model is used in VideoPrismClipModel.
    c                   óî   ‡ — e Zd ZU eed<   dZdZdZddgZdZ	defˆ fd„Z
eee	 	 	 	 ddej        d	z  d
ej        d	z  dej        d	z  dej        d	z  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )r'  rC   )r  r  r¿   r±   r
  r¸   c                 óJ  •‡— t          ¦   «                              ‰¦  «         t          ‰¦  «        | _        t	          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j
        ‰j        ¬¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   r:  r;  s     €r+   r<  z0VideoPrismTextModel.__init__.<locals>.<listcomp>œ  s!   ø€ Ð$fÐ$fÐ$fÀ¥_°VÑ%<Ô%<Ð$fÐ$fÐ$fr*   r  )rH   rI   r±   rv   rM   rB  rC  Únum_hidden_layersÚlayersrø   rP   r  Ú	layernormrH  r”   s    `€r+   rI   zVideoPrismTextModel.__init__™  sŒ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý2°6Ñ:Ô:ˆŒÝ”mÐ$fÐ$fÐ$fÐ$fÅeÈFÔLdÑFeÔFeÐ$fÑ$fÔ$fÑgÔgˆŒÝ,¨VÔ-?ÀVÔEZÐ[Ñ[Ô[ˆŒØ�ŠÑÔÐÐÐr*   NrÉ   rÀ   r´   r×   r5   c                 óæ  — |d u |d uz  rt          d¦  «        ‚|                      |||¬¦  «        }|�]t          j        |j        d         d|j        |j        ¬¦  «        }t          j        ||fd¬¦  «        }t          | j	        ||d ¬¦  «        }| j
        D ]} |||fi |¤Ž}Œ|                      |¦  «        }|d d …df         }	| j	        j        rt          |	d¬¦  «        }	t          ||	¬	¦  «        S )
Nz:You must specify exactly one of input_ids or inputs_embeds)r¿   r´   rÀ   r   r   r  r¥   )rC   rÀ   rÉ   Úpast_key_valuesry   )rP  Úpooler_output)rZ   rv   r&   ÚonesrY   r  r¤   rª   r
   rC   rk  rl  Úapply_l2normrf  r   )
r<   r¿   rÉ   rÀ   r´   r×   rc   Úcls_paddingÚlayerÚtext_embeddingss
             r+   rd   zVideoPrismTextModel.forward   s9  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàŸš°)È,Ðfs˜ÑtÔtˆàÐ%Ýœ*ØÔ# AÔ&¨°.Ô2GÈ~ÔOcðñ ô ˆKõ #œY¨¸Ð'DÈ!ÐLÑLÔLˆNÝ/Ø”{Ø+Ø-Ø $ð	ñ ô ˆNð ”[ð 	Kð 	KˆEØ!˜E -°ÐJÐJÀ6ÐJÐJˆMˆMØŸš }Ñ5Ô5ˆà'¨¨¨¨2¨Ô.ˆØŒ;Ô#ð 	>Ý$ _¸"Ð=Ñ=Ô=ˆOå)¸MÐYhÐiÑiÔiÐir*   )NNNN)r"   r#   r$   r   r(   r+  r)  r*  r-  Ú_input_embed_layerrI   r   r   r   r&   rÃ   rf   r   r   r   rd   rh   ri   s   @r+   r'  r'  Œ  s,  ø€ € € € € € ð !Ð Ð Ñ Ø ÐØÐØ!€OØ3Ð5FÐGÐØ*ÐðÐ3ð ð ð ð ð ð ð  ØØð .2Ø.2Ø-1Ø,0ð!jð !jàÔ# dÑ*ð!jð œ tÑ+ð!jð ”| dÑ*ð	!jð
 ”l TÑ)ð!jð Ð+Ô,ð!jð 
$ð!jð !jð !jñ „^ñ „_ñ  Ôð!jð !jð !jð !jð !jr*   r'  z¹
    VideoPrism video model consisting of the vision encoder backbone with auxiliary encoder layers and an attention pooling head on top. This model is used in VideoPrismClipModel.
    c                   ó´   ‡ — e Zd ZU eed<   defˆ fd„Zdej        fd„Zdej        fd„Z	e
e	 ddej        d	ed
z  dee         defd„¦   «         ¦   «         Zˆ xZS )ÚVideoPrismVideoModelrC   c                 óˆ  •‡— t          ¦   «                              ‰¦  «         t                               ‰¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _	        t          ‰¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   r:  r;  s     €r+   r<  z1VideoPrismVideoModel.__init__.<locals>.<listcomp>Ò  s!   ø€ Ð.sÐ.sÐ.sÈ1­¸vÑ/FÔ/FÐ.sÐ.sÐ.sr*   r  )rH   rI   r6  Ú_from_configÚvision_modelrM   rB  rC  Únum_auxiliary_layersÚauxiliary_layersr  Úheadrø   rP   r  Úhead_layernormrH  r”   s    `€r+   rI   zVideoPrismVideoModel.__init__Ï  s¦   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý1×>Ò>¸vÑFÔFˆÔÝ "¤Ð.sÐ.sÐ.sÐ.sÕPUÐV\ÔVqÑPrÔPrÐ.sÑ.sÔ.sÑ tÔ tˆÔÝ;¸FÑCÔCˆŒ	Ý1°&Ô2DÈ&ÔJ_Ð`Ñ`Ô`ˆÔØ�ŠÑÔÐÐÐr*   r5   c                 ó4   — | j                              ¦   «         S rŒ   ©r{  rK  r@   s    r+   rK  z)VideoPrismVideoModel.get_input_embeddings×  ó   € ØÔ ×5Ò5Ñ7Ô7Ð7r*   rÈ   c                 ó:   — | j                              |¦  «         d S rŒ   ©r{  rN  rM  s     r+   rN  z)VideoPrismVideoModel.set_input_embeddingsÚ  ó   € ØÔ×.Ò.¨uÑ5Ô5Ð5Ð5Ð5r*   FrU   rV   Nr×   c                 ó  —  | j         d||dœ|¤Ž}|j        }| j        D ]} ||fi |¤Ž}Œ | j        |fi |¤Ž}|                      |d         ¦  «        }| j        j        rt          |d¬¦  «        }t          |||j	        |j
        ¬¦  «        S )N©rU   rV   r   ry   r¥   )rP  ro  rc   r  r)   )r{  rP  r}  r~  r  rC   rq  rf  r   rc   r  )	r<   rU   rV   r×   Úvision_model_outputsÚauxiliary_hidden_statesrs  Úhead_outputÚvideo_embeddingss	            r+   rd   zVideoPrismVideoModel.forwardÝ  sé   € ð  1˜tÔ0ð  
Ø 3ÐNfð 
ð  
Øjpð 
ð  
Ðð #7Ô"HÐØÔ*ð 	Oð 	OˆEØ&+ eÐ,CÐ&NÐ&NÀvÐ&NÐ&NÐ#Ð#à�d”iÐ 7ÐBÐB¸6ÐBÐBˆØ×.Ò.¨{¸1¬~Ñ>Ô>ÐØŒ;Ô#ð 	@Ý%Ð&6¸BÐ?Ñ?Ô?Ðå)Ø5Ø*Ø.Ô<Ø+Ô6ð	
ñ 
ô 
ð 	
r*   re   )r"   r#   r$   r   r(   rI   rM   rX  rK  rN  r   r   r&   r'   rg   r   r   r   rd   rh   ri   s   @r+   rw  rw  Ç  s÷   ø€ € € € € € ð #Ð"Ð"Ñ"ðÐ5ð ð ð ð ð ð ð8 b¤ið 8ð 8ð 8ð 8ð6¨"¬)ð 6ð 6ð 6ð 6ð Øð 16ð
ð 
à"Ô.ð
ð #'¨¡+ð
ð Ð+Ô,ð	
ð
 
$ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r*   rw  zÆ
    VideoPrism model for video-text contrastive learning. This model consists of a VideoPrismVideoModel and a VideoPrismTextModel, and computes similarity scores between video and text inputs.
    c                   óª  ‡ — e Zd Zdefˆ fd„Zdej        fd„Zdej        fd„Ze	e
	 ddej        d	ej        dz  d
ee         deez  fd„¦   «         ¦   «         Ze	e
	 ddej        dedz  d
ee         deez  fd„¦   «         ¦   «         Ze	e
	 	 	 	 ddej        dej        d	ej        dz  dedz  dedz  dedz  d
ee         defd„¦   «         ¦   «         Zˆ xZS )ÚVideoPrismClipModelrC   c                 ó  •— t          ¦   «                              |¦  «         t                               |j        ¦  «        | _        t                               |j        ¦  «        | _        |  	                    ¦   «          d S rŒ   )
rH   rI   rw  rz  Úvision_configÚvideo_modelr'  Útext_configÚ
text_modelrH  r”   s     €r+   rI   zVideoPrismClipModel.__init__ÿ  sb   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý/×<Ò<¸VÔ=QÑRÔRˆÔÝ-×:Ò:¸6Ô;MÑNÔNˆŒØ�ŠÑÔÐÐÐr*   r5   c                 ó4   — | j                              ¦   «         S rŒ   )r’  rK  r@   s    r+   rK  z(VideoPrismClipModel.get_input_embeddings  s   € ØŒ×3Ò3Ñ5Ô5Ð5r*   rÈ   c                 ó:   — | j                              |¦  «         d S rŒ   )r’  rN  rM  s     r+   rN  z(VideoPrismClipModel.set_input_embeddings  s   € ØŒ×,Ò,¨UÑ3Ô3Ð3Ð3Ð3r*   Nr¿   rÉ   r×   c                 ó"   —  | j         d||dœ|¤ŽS )a  
        Examples:

        ```python
        >>> from transformers import AutoTokenizer, VideoPrismClipModel

        >>> model = VideoPrismClipModel.from_pretrained("google/videoprism-lvt-base-f16r288")
        >>> tokenizer = AutoTokenizer.from_pretrained("google/videoprism-lvt-base-f16r288")

        >>> inputs = tokenizer(["a video of a cat.", "a video of a dog."], padding="max_length", return_tensors="pt")
        >>> with torch.no_grad():
        ...     text_features = model.get_text_features(**inputs)
        ```©r¿   rÉ   r)   )r’  )r<   r¿   rÉ   r×   s       r+   Úget_text_featuresz%VideoPrismClipModel.get_text_features  s$   € ð* ˆtŒÐ\¨À>Ð\Ð\ÐU[Ð\Ð\Ð\r*   FrU   rV   c                 ó"   —  | j         d||dœ|¤ŽS )a÷  
        Examples:

        ```python
        >>> from transformers import VideoPrismProcessor, VideoPrismClipModel

        >>> model = VideoPrismClipModel.from_pretrained("google/videoprism-lvt-base-f16r288")
        >>> processor = VideoPrismProcessor.from_pretrained("google/videoprism-lvt-base-f16r288")

        >>> inputs = processor(videos="path/to/video.mp4", return_tensors="pt")
        >>> with torch.no_grad():
        ...     video_features = model.get_video_features(**inputs)
        ```r‡  r)   )r�  )r<   rU   rV   r×   s       r+   Úget_video_featuresz&VideoPrismClipModel.get_video_features"  s5   € ð*  ˆtÔð 
Ø 3Ø%=ð
ð 
ð ð
ð 
ð 	
r*   ÚtemperatureÚreturn_lossc           	      ó4  —  | j         d||dœ|¤Ž} | j        d||dœ|¤Ž}	|j        }
|	j        }|
j        d         }|j        d         }|
                     d|¦  «        }|                     d|¦  «        }t          j        ||j        ¦  «        }|�||z  }t          j        |¦  «        }|j        }|t          j	        |dd¬¦  «        z  }|t          j	        |dd¬¦  «        z  }d}|r›t          j
        |                     d¦  «        |j        ¬¦  «        }t          j        |¦  «         d	|z  z   }t
          j        j                             ||z  ¦  «        }t          j	        |d¬
¦  «         }|                     ¦   «         }t%          ||||||	|¬¦  «        S )a  
        temperature (`float`, *optional*):
            A temperature scalar to scale the similarity scores. If not provided, no scaling is applied.
        return_loss (`bool`, *optional*):
            Whether or not to return the contrastive loss.
        r‡  r–  ry   Nr   T)r†   Úkeepdims)r  rG   r¥   )r.   r/   r0   r1   r2   r3   r4   r)   )r™  r—  ro  rY   r^   r&   rÒ   ÚTÚexprd  Úeyer}   r  Ú	ones_likerM   r‚   Ú
logsigmoidÚmeanr-   )r<   rU   r¿   rÉ   rV   rš  r›  r×   Úvideo_model_outputsÚtext_model_outputsr‹  rt  Úvideo_emb_dimÚtext_emb_dimr0   r1   Úsimilarity_matrixr.   r/   r4   r   Úm1_diag1ÚloglikÚnlls                           r+   rd   zVideoPrismClipModel.forward=  sÞ  € ð& 6˜dÔ5ð 
Ø 3ÐNfð
ð 
Øjpð
ð 
Ðð 4˜TÔ3Ðq¸iÐXfÐqÐqÐjpÐqÐqÐà.Ô<ÐØ,Ô:ˆØ(Ô.¨rÔ2ˆØ&Ô,¨RÔ0ˆà'×/Ò/°°MÑBÔBˆØ%×-Ò-¨b°,Ñ?Ô?ˆÝ!œL¨°{´}ÑEÔEÐàÐ"Ø Ñ,Ðå œ9Ð%6Ñ7Ô7ÐØ*Ô,ˆØ+­e¬iÐ8HÈaÐZ^Ð._Ñ._Ô._Ñ_ÐØ)­E¬I°oÈ1ÐW[Ð,\Ñ,\Ô,\Ñ\ˆð ˆØð 	å”)˜O×0Ò0°Ñ3Ô3¸OÔ<RÐSÑSÔSˆCÝœ¨Ñ8Ô8Ð8¸1¸s¹7ÑBˆHÝ”XÔ(×3Ò3°H¸Ñ4NÑOÔOˆFÝ”9˜V¨Ð,Ñ,Ô,Ð,ˆCØ—8’8‘:”:ˆDå#Ø-Ø+Ø%Ø#Ø2Ø0Øð
ñ 
ô 
ð 	
r*   rŒ   re   )NFNN)r"   r#   r$   r   rI   rM   rX  rK  rN  r   r   r&   rf   r   r   r>   r   r—  r'   rg   r™  r©   r-   rd   rh   ri   s   @r+   r�  r�  ù  s  ø€ € € € € ðÐ/ð ð ð ð ð ð ð6 b¤ið 6ð 6ð 6ð 6ð4¨"¬)ð 4ð 4ð 4ð 4ð Øð /3ð]ð ]à”<ð]ð œ tÑ+ð]ð Ð+Ô,ð	]ð
 
Ð+Ñ	+ð]ð ]ð ]ñ „^ñ Ôð]ð* Øð 16ð
ð 
à"Ô.ð
ð #'¨¡+ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ñ Ôð
ð2 Øð
 /3Ø05Ø$(Ø#'ð9
ð 9
à"Ô.ð9
ð ”<ð9
ð œ tÑ+ð	9
ð
 #'¨¡+ð9
ð ˜T‘\ð9
ð ˜D‘[ð9
ð Ð+Ô,ð9
ð 
ð9
ð 9
ð 9
ñ „^ñ Ôð9
ð 9
ð 9
ð 9
ð 9
r*   r�  z
    VideoPrism Model transformer with a video classification head on top (a linear layer on top of the attention pooler).
    c                   óÒ   ‡ — e Zd ZU eed<   dZdZdefˆ fd„Zdej	        fd„Z
dej	        fd„Zee	 	 ddej        dej        d	z  ded	z  dee         def
d„¦   «         ¦   «         Zˆ xZS )Ú VideoPrismForVideoClassificationrC   r7  r  c                 ó`  •— t          ¦   «                              |¦  «         t                               |¦  «        | _        t          |¦  «        | _        t          |j        |j	        ¬¦  «        | _
        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S r  )rH   rI   r6  rz  r{  r  r~  rø   rP   r  r  rM   rê   Ú
num_labelsÚ
classifierrH  r”   s     €r+   rI   z)VideoPrismForVideoClassification.__init__…  sŠ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý1×>Ò>¸vÑFÔFˆÔÝ;¸FÑCÔCˆŒ	Ý1°&Ô2DÈ&ÔJ_Ð`Ñ`Ô`ˆÔÝœ) FÔ$6¸Ô8IÑJÔJˆŒØ�ŠÑÔÐÐÐr*   r5   c                 ó4   — | j                              ¦   «         S rŒ   r�  r@   s    r+   rK  z5VideoPrismForVideoClassification.get_input_embeddings�  r‚  r*   rÈ   c                 ó:   — | j                              |¦  «         d S rŒ   r„  rM  s     r+   rN  z5VideoPrismForVideoClassification.set_input_embeddings�  r…  r*   NFrU   ÚlabelsrV   r×   c                 ó  —  | j         d||dœ|¤Ž}|j        }|                       | j        |fi |¤Žd         ¦  «        }|                      |¦  «        }d }	|� | j        ||| j        fi |¤Ž}	t          |	||j        |j	        ¬¦  «        S )Nr‡  r   )r4   Úlogitsrc   r  r)   )
r{  rP  r  r~  r°  Úloss_functionrC   r   rc   r  )
r<   rU   r³  rV   r×   rˆ  Úsequence_outputÚpooled_outputrµ  r4   s
             r+   rd   z(VideoPrismForVideoClassification.forward“  sÍ   € ð  1˜tÔ0ð  
Ø 3ÐNfð 
ð  
Øjpð 
ð  
Ðð /Ô@ˆØ×+Ò+¨I¨D¬I°oÐ,PÐ,PÈÐ,PÐ,PÐQRÔ,SÑTÔTˆØ—’ Ñ/Ô/ˆØˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå$ØØØ.Ô<Ø+Ô6ð	
ñ 
ô 
ð 	
r*   rW  )r"   r#   r$   r   r(   r+  r)  rI   rM   rX  rK  rN  r   r   r&   r'   rÃ   rg   r   r   r   rd   rh   ri   s   @r+   r­  r­  {  s  ø€ € € € € € ð #Ð"Ð"Ñ"Ø!ÐØÐðÐ5ð ð ð ð ð ð ð8 b¤ið 8ð 8ð 8ð 8ð6¨"¬)ð 6ð 6ð 6ð 6ð Øð +/Ø05ð	
ð 
à"Ô.ð
ð Ô  4Ñ'ð
ð #'¨¡+ð	
ð
 Ð+Ô,ð
ð 
ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r*   r­  )r6  r  rw  r'  r�  r­  )rÄ   NN)ry   r_  )KÚcollections.abcr   r   Údataclassesr   Útypingr   r&   Útorch.nnrM   Útorch.nn.functionalr‚   rú   Ú r   r!  Úactivationsr	   Úmasking_utilsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_videoprismr   r   r   r   r-   rX  rB   rk   r’   r�   rf   r¯   r±   r©   r>   rÜ   rÐ   râ   Ú	LayerNormrø   r  r
  r  r6  r[  r  r'   rf  r'  rw  r�  r­  Ú__all__r)   r*   r+   ú<module>rË     sü  ðð, /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bÐ bØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dð €ÐiÐjÑjÔjØ
ð?ð ?ð ?ð ?ð ?°/ñ ?ô ?ñ „ñ kÔjð?ð €ØBðñ ô ð ð 
ð  
ð  
ð  
ð  
˜;ñ  
ô  
ñ „ñô ð 
ðF$ð $ð $ð $ð $ "¤)ñ $ô $ð $ðNDð Dð Dð Dð D "¤)ñ Dô Dð DðN<ð <ð <ð <ð < 2¤9ñ <ô <ð <ð~P¨ð P°3ð P¸5¼<ð Pð Pð Pð Pð ð  ð  ð  ð  ˜rœyñ  ô  ð  ðR Ø Ø ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �S‰[ð%ð �T‰\ð%ð �T‰\ð%ð ˆ5Œ<˜œÐ%Ô&ð%ð %ð %ð %ðD	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð/)ð /)ð /)ð /)ð /)˜"œ)ñ /)ô /)ð /)ðdjð jð jð jð j˜"œ,ñ jô jð jðð ð ð ð �B”Iñ ô ð ð ð ð ð ð Ð0ñ ô ð ð@ ð6Yð 6Yð 6Yð 6Yð 6Y ñ 6Yô 6Yñ „ð6Yðr €ððñ ô ð
;
ð ;
ð ;
ð ;
ð ;
Ð5ñ ;
ô ;
ñô ð
;
ð| €ð3)ð 3)ð 3)ð 3)ð 3)¨b¬iñ 3)ô 3)ð 3)ðlð ˆeÔð  cð °Uð ð ð ð ð €ððñ ô ð
3jð 3jð 3jð 3jð 3jÐ3ñ 3jô 3jñô ð
3jðl €ððñ ô ð
*
ð *
ð *
ð *
ð *
Ð4ñ *
ô *
ñô ð
*
ðZ €ððñ ô ð
z
ð z
ð z
ð z
ð z
Ð3ñ z
ô z
ñô ð
z
ðz €ððñ ô ð
+
ð +
ð +
ð +
ð +
Ð'@ñ +
ô +
ñô ð
+
ð\ð ð €€€r*   