Ë
    S^(h�¬  ã                   ó  — d dl Z d dlmZmZmZmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZmZmZmZ dd
lmZ ddlmZ  ej<                  e«      Z  G d„ de
jB                  «      Z" G d„ de
jB                  «      Z# G d„ de
jB                  «      Z$ G d„ de
jB                  «      Z% G d„ de
jB                  «      Z& G d„ de
jB                  «      Z' G d„ de
jB                  «      Z( G d„ de
jB                  «      Z) G d„ de
jB                  «      Z* G d„ d e
jB                  «      Z+ G d!„ d"e
jB                  «      Z, G d#„ d$e
jB                  «      Z- G d%„ d&e«      Z. G d'„ d(e.«      Z/ G d)„ d*e.e«      Z0y)+é    N)ÚListÚOptionalÚTupleÚUnion)ÚTensorÚdeviceÚnn)ÚCrossEntropyLossé   )ÚACT2FN)ÚGenerationMixin)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentions)ÚPreTrainedModelÚapply_chunking_to_forwardÚ find_pruneable_heads_and_indicesÚprune_linear_layer)Úloggingé   )ÚBlipTextConfigc                   óª   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 d	deej                     deej                     deej                     de	dej                  f
d„Zˆ xZS )
ÚBlipTextEmbeddingsz;Construct the embeddings from word and position embeddings.c                 óP  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j
                  |j                  ¬«      | _
        t        j                  |j                  «      | _        | j                  dt!        j"                  |j                  «      j%                  d«      d¬«       t'        |dd«      | _        || _        y )	N)Úpadding_idx©ÚepsÚposition_ids)r   éÿÿÿÿF)Ú
persistentÚposition_embedding_typeÚabsolute)ÚsuperÚ__init__r	   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpandÚgetattrr!   Úconfig©Úselfr6   Ú	__class__s     €úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/blip/modeling_blip_text.pyr$   zBlipTextEmbeddings.__init__1   sà   ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ ô Ÿ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ô (/¨vÐ7PÐR\Ó']ˆÔ$àˆ�ó    Ú	input_idsr   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 óH  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …|||z   …f   }|€| j                  |«      }|}| j                  dk(  r| j	                  |«      }||z  }| j                  |«      }| j                  |«      }|S )Nr   r   r"   )Úsizer   r)   r!   r+   r,   r0   )	r8   r<   r   r=   r>   Úinput_shapeÚ
seq_lengthÚ
embeddingsr+   s	            r:   ÚforwardzBlipTextEmbeddings.forwardC   sÂ   € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLàÐ Ø ×0Ñ0°Ó;ˆMà"ˆ
à×'Ñ'¨:Ò5Ø"&×":Ñ":¸<Ó"HÐØÐ-Ñ-ˆJØ—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr;   )NNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r   r2   Ú
LongTensorÚFloatTensorÚintr   rE   Ú__classcell__©r9   s   @r:   r   r   .   ss   ø„ ÙEôð( 15Ø37Ø59Ø&'ñà˜E×,Ñ,Ñ-ðð ˜u×/Ñ/Ñ0ðð   × 1Ñ 1Ñ2ð	ð
 !$ðð 
�‰÷r;   r   c                   ó4  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 	 	 	 	 dde	j                  dee	j                     d	ee	j                     d
ee	j                     dee	j                     deeee	j                           dee   dee	j                     fd„Zˆ xZS )ÚBlipTextSelfAttentionc                 ó†  •— t         ‰| �  «        || _        |j                  |j                  z  dk7  r0t        |d«      s$t        d|j                  |j                  fz  «      ‚|j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        t        j                  |j                  | j                  «      | _        |r_t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        n^t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                   |j"                  «      | _        t'        |dd«      | _        | j(                  dk(  s| j(                  dk(  rG|j*                  | _        t        j,                  d|j*                  z  d	z
  | j                  «      | _        y y )
Nr   Úembedding_sizezLThe hidden size (%d) is not a multiple of the number of attention heads (%d)r!   r"   Úrelative_keyÚrelative_key_queryé   r   )r#   r$   r6   r'   Únum_attention_headsÚhasattrÚ
ValueErrorrL   Úattention_head_sizeÚall_head_sizer	   ÚLinearÚqueryÚencoder_hidden_sizeÚkeyÚvaluer.   Úattention_probs_dropout_probr0   r5   r!   r*   r%   Údistance_embedding©r8   r6   Úis_cross_attentionr9   s      €r:   r$   zBlipTextSelfAttention.__init__c   sÇ  ø€ Ü‰ÑÔØˆŒØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ^Ø×%Ñ% v×'AÑ'AÐBñCóð ð
 $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ÙÜ—y‘y ×!;Ñ!;¸T×=OÑ=OÓPˆDŒHÜŸ™ 6×#=Ñ#=¸t×?QÑ?QÓRˆD�Jä—y‘y ×!3Ñ!3°T×5GÑ5GÓHˆDŒHÜŸ™ 6×#5Ñ#5°t×7IÑ7IÓJˆDŒJä—z‘z &×"EÑ"EÓFˆŒÜ'.¨vÐ7PÐR\Ó']ˆÔ$Ø×'Ñ'¨>Ò9¸T×=YÑ=YÐ]qÒ=qØ+1×+IÑ+IˆDÔ(Ü&(§l¡l°1°v×7UÑ7UÑ3UÐXYÑ3YÐ[_×[sÑ[sÓ&tˆDÕ#ð >rr;   c                 ó   — || _         y ©N©Úattn_gradients)r8   rg   s     r:   Úsave_attn_gradientsz)BlipTextSelfAttention.save_attn_gradients~   s
   € Ø,ˆÕr;   c                 ó   — | j                   S re   rf   ©r8   s    r:   Úget_attn_gradientsz(BlipTextSelfAttention.get_attn_gradients�   s   € Ø×"Ñ"Ð"r;   c                 ó   — || _         y re   ©Úattention_map)r8   rn   s     r:   Úsave_attention_mapz(BlipTextSelfAttention.save_attention_map„   s
   € Ø*ˆÕr;   c                 ó   — | j                   S re   rm   rj   s    r:   Úget_attention_mapz'BlipTextSelfAttention.get_attention_map‡   s   € Ø×!Ñ!Ð!r;   c                 ó    — |j                  «       d d | j                  | j                  fz   } |j                  |Ž }|j	                  dddd«      S )Nr   r   rU   r   r   )rA   rV   rY   ÚviewÚpermute)r8   ÚxÚnew_x_shapes      r:   Útranspose_for_scoresz*BlipTextSelfAttention.transpose_for_scoresŠ   sN   € Ø—f‘f“h˜s �m t×'?Ñ'?À×AYÑAYÐ&ZÑZˆØˆA�F‰F�KÐ ˆØ�y‰y˜˜A˜q !Ó$Ð$r;   Úhidden_statesÚattention_maskÚ	head_maskÚencoder_hidden_statesÚencoder_attention_maskÚpast_key_valueÚoutput_attentionsr?   c                 óJ  — | j                  |«      }|d u}	|	rC| j                  | j                  |«      «      }
| j                  | j                  |«      «      }|}n»|�y| j                  | j                  |«      «      }
| j                  | j                  |«      «      }t	        j
                  |d   |
gd¬«      }
t	        j
                  |d   |gd¬«      }n@| j                  | j                  |«      «      }
| j                  | j                  |«      «      }| j                  |«      }|
|f}t	        j                  ||
j                  dd«      «      }| j                  dk(  s| j                  dk(  �rF|j                  «       d   }t	        j                  |t        j                  |j                  ¬	«      j                  dd«      }t	        j                  |t        j                  |j                  ¬	«      j                  dd«      }||z
  }| j                  || j                  z   dz
  «      }|j!                  |j"                  ¬
«      }| j                  dk(  rt	        j$                  d||«      }||z   }nE| j                  dk(  r6t	        j$                  d||«      }t	        j$                  d|
|«      }||z   |z   }|t'        j(                  | j*                  «      z  }|�||j!                  |j                  «      z   } t-        j.                  d¬«      |«      }| j1                  |«      }|�||z  }t	        j                  ||«      }|j3                  dddd«      j5                  «       }|j                  «       d d | j6                  fz   } |j                  |Ž }|r||fn|f}||fz   }|S )Nr   rU   ©Údimr   r   éþÿÿÿrS   rT   )Údtyper   ©rƒ   zbhld,lrd->bhlrzbhrd,lrd->bhlrr   )r\   rw   r^   r_   r2   ÚcatÚmatmulÚ	transposer!   rA   r3   Úlongr   rs   ra   r*   Útorƒ   ÚeinsumÚmathÚsqrtrY   r	   ÚSoftmaxr0   rt   Ú
contiguousrZ   )r8   rx   ry   rz   r{   r|   r}   r~   Úmixed_query_layerrc   Ú	key_layerÚvalue_layerÚquery_layerÚattention_scoresrC   Úposition_ids_lÚposition_ids_rÚdistanceÚpositional_embeddingÚrelative_position_scoresÚrelative_position_scores_queryÚrelative_position_scores_keyÚattention_probsÚattention_probs_droppedÚcontext_layerÚnew_context_layer_shapeÚoutputss                              r:   rE   zBlipTextSelfAttention.forward�   s~  € ð !ŸJ™J }Ó5Ðð
 3¸$Ð>ÐáØ×1Ñ1°$·(±(Ð;PÓ2QÓRˆIØ×3Ñ3°D·J±JÐ?TÓ4UÓVˆKØ3‰NØÐ'Ø×1Ñ1°$·(±(¸=Ó2IÓJˆIØ×3Ñ3°D·J±J¸}Ó4MÓNˆKÜŸ	™	 >°!Ñ#4°iÐ"@ÀaÔHˆIÜŸ)™) ^°AÑ%6¸Ð$DÈ!ÔL‰Kà×1Ñ1°$·(±(¸=Ó2IÓJˆIØ×3Ñ3°D·J±J¸}Ó4MÓNˆKà×/Ñ/Ð0AÓBˆà# [Ð1ˆô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà×'Ñ'¨>Ò9¸T×=YÑ=YÐ]qÓ=qØ&×+Ñ+Ó-¨aÑ0ˆJÜ"Ÿ\™\¨*¼E¿J¹JÈ}×OcÑOcÔd×iÑiÐjlÐnoÓpˆNÜ"Ÿ\™\¨*¼E¿J¹JÈ}×OcÑOcÔd×iÑiÐjkÐmoÓpˆNØ%¨Ñ6ˆHØ#'×#:Ñ#:¸8Àd×FbÑFbÑ;bÐefÑ;fÓ#gÐ Ø#7×#:Ñ#:À×ARÑARÐ#:Ó#SÐ à×+Ñ+¨~Ò=Ü+0¯<©<Ð8HÈ+ÐWkÓ+lÐ(Ø#3Ð6NÑ#NÑ Ø×-Ñ-Ð1EÒEÜ16·±Ð>NÐP[Ð]qÓ1rÐ.Ü/4¯|©|Ð<LÈiÐYmÓ/nÐ,Ø#3Ð6TÑ#TÐWsÑ#sÐ à+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.×2CÑ2CÐDT×D[ÑD[Ó2\Ñ\Ðð -œ"Ÿ*™*¨Ô,Ð-=Ó>ˆð #'§,¡,¨Ó"?Ðð Ð Ø&=À	Ñ&IÐ#äŸ™Ð%<¸kÓJˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆá6G�= /Ñ2ÈmÐM]ˆà˜^Ð-Ñ-ˆØˆr;   ©NNNNNF)rF   rG   rH   r$   rh   rk   ro   rq   rw   r2   r   r   rK   r   ÚboolrE   rM   rN   s   @r:   rP   rP   b   sä   ø„ ôuò6-ò#ò+ò"ò%ð 7;Ø15Ø=AØ>BØDHØ,1ñNà—|‘|ðNð ! ×!2Ñ!2Ñ3ðNð ˜E×-Ñ-Ñ.ð	Nð
  (¨×(9Ñ(9Ñ:ðNð !)¨×):Ñ):Ñ ;ðNð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAðNð $ D™>ðNð 
ˆu�|‰|Ñ	÷Nr;   rP   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚBlipTextSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr   )r#   r$   r	   r[   r'   Údenser,   r-   r.   r/   r0   r7   s     €r:   r$   zBlipTextSelfOutput.__init__â   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r;   rx   Úinput_tensorr?   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S re   ©r¦   r0   r,   ©r8   rx   r§   s      r:   rE   zBlipTextSelfOutput.forwardè   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr;   ©rF   rG   rH   r$   r2   r   rE   rM   rN   s   @r:   r£   r£   á   ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r;   r£   c                   ó  ‡ — e Zd Zdˆ fd„	Zd„ Z	 	 	 	 	 	 ddej                  deej                     deej                     deej                     deej                     dee	e	ej                           d	ee
   d
e	ej                     fd„Zˆ xZS )ÚBlipTextAttentionc                 ó‚   •— t         ‰| �  «        t        ||«      | _        t	        |«      | _        t        «       | _        y re   )r#   r$   rP   r8   r£   ÚoutputÚsetÚpruned_headsrb   s      €r:   r$   zBlipTextAttention.__init__ñ   s3   ø€ Ü‰ÑÔÜ)¨&Ð2DÓEˆŒ	Ü(¨Ó0ˆŒÜ›EˆÕr;   c                 ó>  — t        |«      dk(  ry t        || j                  j                  | j                  j                  | j
                  «      \  }}t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _        t        | j                  j                  |«      | j                  _	        t        | j                  j                  |d¬«      | j                  _        | j                  j                  t        |«      z
  | j                  _        | j                  j                  | j                  j                  z  | j                  _        | j
                  j                  |«      | _        y )Nr   r   r€   )Úlenr   r8   rV   rY   r³   r   r\   r^   r_   r±   r¦   rZ   Úunion)r8   ÚheadsÚindexs      r:   Úprune_headszBlipTextAttention.prune_heads÷   s  € Üˆu‹:˜Š?ØÜ7Ø�4—9‘9×0Ñ0°$·)±)×2OÑ2OÐQU×QbÑQbó
‰ˆˆuô
 -¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ*¨4¯9©9¯=©=¸%Ó@ˆ�	‰	ŒÜ,¨T¯Y©Y¯_©_¸eÓDˆ�	‰	ŒÜ.¨t¯{©{×/@Ñ/@À%ÈQÔOˆ�‰Ôð )-¯	©	×(EÑ(EÌÈEË
Ñ(Rˆ�	‰	Ô%Ø"&§)¡)×"?Ñ"?À$Ç)Á)×B_ÑB_Ñ"_ˆ�	‰	ÔØ ×-Ñ-×3Ñ3°EÓ:ˆÕr;   rx   ry   rz   r{   r|   r}   r~   r?   c           	      óp   — | j                  |||||||«      }| j                  |d   |«      }	|	f|dd  z   }
|
S )Nr   r   )r8   r±   )r8   rx   ry   rz   r{   r|   r}   r~   Úself_outputsÚattention_outputrŸ   s              r:   rE   zBlipTextAttention.forward	  sW   € ð —y‘yØØØØ!Ø"ØØó
ˆð  Ÿ;™; |°A¡¸ÓFÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr;   )Fr    )rF   rG   rH   r$   r¹   r2   r   r   rK   r   r¡   rE   rM   rN   s   @r:   r¯   r¯   ð   sÆ   ø„ õ"ò;ð* 7;Ø15Ø=AØ>BØDHØ,1ñà—|‘|ðð ! ×!2Ñ!2Ñ3ðð ˜E×-Ñ-Ñ.ð	ð
  (¨×(9Ñ(9Ñ:ðð !)¨×):Ñ):Ñ ;ðð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAðð $ D™>ðð 
ˆu�|‰|Ñ	÷r;   r¯   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBlipTextIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y re   )r#   r$   r	   r[   r'   Úintermediate_sizer¦   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr7   s     €r:   r$   zBlipTextIntermediate.__init__#  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r;   rx   r?   c                 óJ   — | j                  |«      }| j                  |«      }|S re   )r¦   rÄ   ©r8   rx   s     r:   rE   zBlipTextIntermediate.forward+  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr;   r¬   rN   s   @r:   r¾   r¾   "  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r;   r¾   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚBlipTextOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r¥   )r#   r$   r	   r[   rÀ   r'   r¦   r,   r-   r.   r/   r0   r7   s     €r:   r$   zBlipTextOutput.__init__3  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r;   rx   r§   r?   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S re   r©   rª   s      r:   rE   zBlipTextOutput.forward9  r«   r;   r¬   rN   s   @r:   rÈ   rÈ   2  r­   r;   rÈ   c                   ó  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 ddej
                  deej                     deej                     deej                     deej                     deeeej                           dee	   d	eej
                     fd
„Z
d„ Zˆ xZS )ÚBlipTextLayerc                 óF  •— t         ‰| �  «        || _        |j                  | _        d| _        t        |«      | _        || _        | j                  j                  r&t        || j                  j                  ¬«      | _	        t        |«      | _        t        |«      | _        y )Nr   )rc   )r#   r$   r6   Úchunk_size_feed_forwardÚseq_len_dimr¯   Ú	attentionÚ	layer_numÚ
is_decoderÚcrossattentionr¾   ÚintermediaterÈ   r±   )r8   r6   rÑ   r9   s      €r:   r$   zBlipTextLayer.__init__A  s}   ø€ Ü‰ÑÔØˆŒØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6Ó2ˆŒØ"ˆŒØ�;‰;×!Ò!Ü"3°FÈtÏ{É{×OeÑOeÔ"fˆDÔÜ0°Ó8ˆÔÜ$ VÓ,ˆ�r;   rx   ry   rz   r{   r|   r}   r~   r?   c                 ó  — |�|d d nd }| j                  |||||¬«      }	|	d   }
|	dd }|	d   }|�$| j                  |
|||||¬«      }|d   }
||dd z   }t        | j                  | j                  | j
                  |
«      }|f|z   }||fz   }|S )NrU   )r~   r}   r   r   r   )r~   )rÐ   rÓ   r   Úfeed_forward_chunkrÎ   rÏ   )r8   rx   ry   rz   r{   r|   r}   r~   Úself_attn_past_key_valueÚself_attention_outputsr¼   rŸ   Úpresent_key_valueÚcross_attention_outputsÚlayer_outputs                  r:   rE   zBlipTextLayer.forwardM  sõ   € ð :HÐ9S >°"°1Ñ#5ÐY]Ð Ø!%§¡ØØØØ/Ø3ð "0ó "
Ðð 2°!Ñ4Ðà(¨¨2Ð.ˆØ2°2Ñ6Ðà Ð,Ø&*×&9Ñ&9Ø ØØØ%Ø&Ø"3ð ':ó 'Ð#ð  7°qÑ9ÐØÐ 7¸¸"Ð =Ñ=ˆGÜ0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð  �/ GÑ+ˆàÐ.Ð0Ñ0ˆàˆr;   c                 óL   — | j                  |«      }| j                  ||«      }|S re   )rÔ   r±   )r8   r¼   Úintermediate_outputrÛ   s       r:   rÖ   z BlipTextLayer.feed_forward_chunky  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr;   r    )rF   rG   rH   r$   r2   r   r   rK   r   r¡   rE   rÖ   rM   rN   s   @r:   rÌ   rÌ   @  sÇ   ø„ ô
-ð 7;Ø15Ø=AØ>BØDHØ,1ñ*à—|‘|ð*ð ! ×!2Ñ!2Ñ3ð*ð ˜E×-Ñ-Ñ.ð	*ð
  (¨×(9Ñ(9Ñ:ð*ð !)¨×):Ñ):Ñ ;ð*ð !  u¨U×->Ñ->Ñ'?Ñ!@ÑAð*ð $ D™>ð*ð 
ˆu�|‰|Ñ	ó*öXr;   rÌ   c                   óD  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 	 	 	 	 ddej
                  deej                     deej                     deej                     deej                     deeeej                           dee	   d	ee	   d
ee	   dee	   de
eej
                     ef   fd„Zˆ xZS )ÚBlipTextEncoderc           	      óÒ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
r#   r$   r6   r	   Ú
ModuleListÚrangeÚnum_hidden_layersrÌ   ÚlayerÚgradient_checkpointing)r8   r6   Úir9   s      €r:   r$   zBlipTextEncoder.__init__�  sP   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄeÈF×LdÑLdÓFeÖ#fÀ¤M°&¸!Õ$<Ò#fÓgˆŒ
Ø&+ˆÕ#ùò $gs   ½A$rx   ry   rz   r{   r|   Úpast_key_valuesÚ	use_cacher~   Úoutput_hidden_statesÚreturn_dictr?   c                 ó˜  — | j                   r%| j                  r|rt        j                  d«       d}|	rdnd }|rdnd }|r| j                  j
                  rdnd }|rdnd }t        | j                  j                  «      D ]™  }| j                  |   }|	r||fz   }|�||   nd }|�||   nd }| j                   r/| j                  r#| j                  |j                  |||||||«      }n ||||||||«      }|d   }|r	||d   fz  }|sŒˆ||d   fz   }||d   fz   }Œ› |	r||fz   }|
st        d„ |||||fD «       «      S t        |||||¬	«      S )
NzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F© r   r   r   rU   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wre   rì   )Ú.0Úvs     r:   ú	<genexpr>z*BlipTextEncoder.forward.<locals>.<genexpr>É  s   è ø€ ò 
àð �=ô ñ
ùs   ‚)Úlast_hidden_staterç   rx   Ú
attentionsÚcross_attentions)rå   ÚtrainingÚloggerÚwarningr6   rÒ   râ   rã   rä   Ú_gradient_checkpointing_funcÚ__call__Útupler   )r8   rx   ry   rz   r{   r|   rç   rè   r~   ré   rê   Úall_hidden_statesÚall_self_attentionsÚall_cross_attentionsÚnext_decoder_cacheræ   Úlayer_moduleÚlayer_head_maskr}   Úlayer_outputss                       r:   rE   zBlipTextEncoder.forward‡  sÍ  € ð ×&Ò&¨4¯=ª=ÙÜ—‘Øpôð "�	Ù"6™B¸DÐÙ$5™b¸4ÐÙ%6¸4¿;¹;×;QÒ;Q™rÐW[Ðá#,™R°$Ðä�t—{‘{×4Ñ4Ó5ò #	RˆAØŸ:™: a™=ˆLÙ#Ø$5¸Ð8HÑ$HÐ!à.7Ð.C˜i¨šlÈˆOØ3BÐ3N˜_¨QÒ/ÐTXˆNà×*Ò*¨t¯}ª}Ø $× AÑ AØ ×)Ñ)Ø!Ø"Ø#Ø)Ø*Ø"Ø%ó	!‘ñ !-Ø!Ø"Ø#Ø)Ø*Ø"Ø%ó!�ð *¨!Ñ,ˆMÙØ" }°RÑ'8Ð&:Ñ:Ð"Ú Ø&9¸]È1Ñ=MÐ<OÑ&OÐ#Ø';¸}ÈQÑ?OÐ>QÑ'QÑ$ðG#	RñJ  Ø 1°]Ð4DÑ DÐáÜñ 
ð "Ø&Ø%Ø'Ø(ðô
ó 
ð 
ô 9Ø+Ø.Ø+Ø*Ø1ô
ð 	
r;   )	NNNNNNFFT)rF   rG   rH   r$   r2   r   r   rK   r   r¡   r   r   rE   rM   rN   s   @r:   rß   rß   €  s  ø„ ô,ð 7;Ø15Ø=AØ>BØEIØ$(Ø,1Ø/4Ø&*ñS
à—|‘|ðS
ð ! ×!2Ñ!2Ñ3ðS
ð ˜E×-Ñ-Ñ.ð	S
ð
  (¨×(9Ñ(9Ñ:ðS
ð !)¨×):Ñ):Ñ ;ðS
ð " %¨¨e×.?Ñ.?Ñ(@Ñ"AÑBðS
ð ˜D‘>ðS
ð $ D™>ðS
ð ' t™nðS
ð ˜d‘^ðS
ð 
ˆu�U—\‘\Ñ"Ð$MÐMÑ	N÷S
r;   rß   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBlipTextPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y re   )r#   r$   r	   r[   r'   r¦   ÚTanhÚ
activationr7   s     €r:   r$   zBlipTextPooler.__init__ß  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r;   rx   r?   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )r¦   r  )r8   rx   Úfirst_token_tensorÚpooled_outputs       r:   rE   zBlipTextPooler.forwardä  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr;   r¬   rN   s   @r:   r  r  Þ  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ r;   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBlipTextPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y r¥   )r#   r$   r	   r[   r'   r¦   rÁ   rÂ   rÃ   r   Útransform_act_fnr,   r-   r7   s     €r:   r$   z(BlipTextPredictionHeadTransform.__init__ï  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�r;   rx   r?   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S re   )r¦   r  r,   rÆ   s     r:   rE   z'BlipTextPredictionHeadTransform.forwardø  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr;   r¬   rN   s   @r:   r
  r
  î  s$   ø„ ôUð U§\¡\ð °e·l±l÷ r;   r
  c                   ó*   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚBlipTextLMPredictionHeadc                 óH  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        t	        j                  t        j                  |j                  «      «      | _        | j                  | j                  _        y )NF)Úbias)r#   r$   r
  Ú	transformr	   r[   r'   r&   ÚdecoderÚ	Parameterr2   Úzerosr  r7   s     €r:   r$   z!BlipTextLMPredictionHead.__init__  sm   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒä—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆŒ	ð !ŸI™Iˆ�‰Õr;   c                 ó:   — | j                   | j                  _         y re   )r  r  rj   s    r:   Ú_tie_weightsz%BlipTextLMPredictionHead._tie_weights  s   € Ø ŸI™Iˆ�‰Õr;   c                 óJ   — | j                  |«      }| j                  |«      }|S re   )r  r  rÆ   s     r:   rE   z BlipTextLMPredictionHead.forward  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr;   )rF   rG   rH   r$   r  rE   rM   rN   s   @r:   r  r     s   ø„ ô&ò&ör;   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBlipTextOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y re   )r#   r$   r  Úpredictionsr7   s     €r:   r$   zBlipTextOnlyMLMHead.__init__  s   ø€ Ü‰ÑÔÜ3°FÓ;ˆÕr;   Úsequence_outputr?   c                 ó(   — | j                  |«      }|S re   )r  )r8   r  Úprediction_scoress      r:   rE   zBlipTextOnlyMLMHead.forward  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð r;   r¬   rN   s   @r:   r  r    s#   ø„ ô<ð! u§|¡|ð !¸¿¹÷ !r;   r  c                   ó"   — e Zd ZdZeZdZg Zd„ Zy)ÚBlipTextPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úbertc                 ó.  — t        |t        j                  t        j                  f«      r<|j                  j
                  j                  d| j                  j                  ¬«       nct        |t        j                  «      rI|j                  j
                  j                  «        |j                  j
                  j                  d«       t        |t        j                  «      r2|j                  �%|j                  j
                  j                  «        yyy)zInitialize the weightsg        )ÚmeanÚstdç      ð?N)rÁ   r	   r[   r%   ÚweightÚdataÚnormal_r6   Úinitializer_ranger,   r  Úzero_Úfill_)r8   Úmodules     r:   Ú_init_weightsz%BlipTextPreTrainedModel._init_weights-  s´   € ä�fœrŸy™y¬"¯,©,Ð7Ô8ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÕSÜ˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÔ)Ü�fœbŸi™iÔ(¨V¯[©[Ð-DØ�K‰K×Ñ×"Ñ"Õ$ð .EÐ(r;   N)	rF   rG   rH   rI   r   Úconfig_classÚbase_model_prefixÚ_no_split_modulesr.  rì   r;   r:   r!  r!  #  s   „ ñð
 "€LØÐØÐó
%r;   r!  c            !       óì  ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zdede	e
   ded	ed
ef
d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deej                     deej                     deej                     deej                     deej                     deeej"                        dee   dee   dee   dee   d	ee   d
ee	ej                     ef   fd„Zˆ xZS )ÚBlipTextModela  
    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
    cross-attention is added between the self-attention layers, following the architecture described in [Attention is
    all you need](https://arxiv.org/abs/1706.03762) by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
    Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin. argument and `is_decoder` set to `True`; an
    `encoder_hidden_states` is then expected as an input to the forward pass.
    c                 óº   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |rt        |«      nd | _        | j                  «        y re   )
r#   r$   r6   r   rD   rß   Úencoderr  ÚpoolerÚ	post_init)r8   r6   Úadd_pooling_layerr9   s      €r:   r$   zBlipTextModel.__init__D  sI   ø€ Ü‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒÙ0A”n VÔ,ÀtˆŒà�‰Õr;   c                 ó.   — | j                   j                  S re   ©rD   r)   rj   s    r:   Úget_input_embeddingsz"BlipTextModel.get_input_embeddingsN  s   € Ø�‰×.Ñ.Ð.r;   c                 ó&   — || j                   _        y re   r:  )r8   r_   s     r:   Úset_input_embeddingsz"BlipTextModel.set_input_embeddingsQ  s   € Ø*/ˆ�‰Õ'r;   c                 ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)Úitemsr5  rä   rÐ   r¹   )r8   Úheads_to_prunerä   r·   s       r:   Ú_prune_headszBlipTextModel._prune_headsU  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr;   ry   rB   r   rÒ   r?   c                 ó  — |j                  «       dk(  r|dd…ddd…dd…f   }�n>|j                  «       dk(  �r|rõ|\  }}t        j                  ||¬«      }|dddd…f   j                  ||d«      |ddd…df   k  }	|	j	                  |j
                  «      }	|	j                  d   |j                  d   k  r[|j                  d   |	j                  d   z
  }
t        j                  t        j                  |||
f||	j
                  ¬«      |	gd¬«      }	|	dd…ddd…dd…f   |dd…dddd…f   z  }n3|dd…dddd…f   }n%t        d	j                  ||j                  «      «      ‚|j	                  | j
                  ¬
«      }d|z
  dz  }|S )a=  
        Makes broadcastable attention and causal masks so that future and masked tokens are ignored.

        Arguments:
            attention_mask (`torch.Tensor`):
                Mask with ones indicating tokens to attend to, zeros for tokens to ignore.
            input_shape (`Tuple[int]`):
                The shape of the input to the model.
            device (`torch.device`):
                The device of the input to the model.

        Returns:
            `torch.Tensor` The extended attention mask, with a the same dtype as `attention_mask.dtype`.
        r   NrU   ©r   r   )r   rƒ   r   )ÚaxiszAWrong shape for input_ids (shape {}) or attention_mask (shape {})r„   r&  g     ˆÃÀ)r�   r2   r3   Úrepeatr‰   rƒ   Úshaper…   ÚonesrX   Úformat)r8   ry   rB   r   rÒ   Úextended_attention_maskÚ
batch_sizerC   Úseq_idsÚcausal_maskÚprefix_seq_lens              r:   Úget_extended_attention_maskz)BlipTextModel.get_extended_attention_mask]  s¸  € ð& ×ÑÓ 1Ò$Ø&4²Q¸ºaÂ°]Ñ&CÒ#Ø×ÑÓ! QÓ&ñ Ø)4Ñ&�
˜JäŸ,™, z¸&ÔA�Ø% d¨D²! mÑ4×;Ñ;¸JÈ
ÐTUÓVÐZaÐbfÒhiÐkoÐboÑZpÑp�ð *Ÿn™n¨^×-AÑ-AÓB�à×$Ñ$ QÑ'¨.×*>Ñ*>¸qÑ*AÒAØ%3×%9Ñ%9¸!Ñ%<¸{×?PÑ?PÐQRÑ?SÑ%S�NÜ"'§)¡)ä!ŸJ™JØ!+¨Z¸Ð HÐQWÐ_j×_pÑ_pôð (ð	ð  ô#�Kð +6²a¸ºqÂ!°mÑ*DÀ~ÒVWÐY]Ð_cÒefÐVfÑGgÑ*gÑ'à*8º¸DÀ$ÊÐ9IÑ*JÑ'äØS×ZÑZØ ×!5Ñ!5óóð ð #:×"<Ñ"<À4Ç:Á:Ð"<Ó"NÐØ#&Ð)@Ñ#@ÀHÑ"LÐØ&Ð&r;   r<   r   rz   r=   Úencoder_embedsr{   r|   rç   rè   r~   ré   rê   c                 óº  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|r|
�|
n| j                   j                  }
nd}
|�|�t        d«      ‚|�4| j                  ||«       |j                  «       }|\  }}|j                  }nY|�%|j                  «       dd }|\  }}|j                  }n2|�%|j                  «       dd }|\  }}|j                  }nt        d«      ‚|	�|	d   d   j                  d   nd}|€)t        j                  |||z   f«      j                  |«      }| j                  ||||«      }|�¬t        |t        «      r|d   j                  «       \  }}}n|j                  «       \  }}}||f}t        |t        «      r|D �cg c]  }| j!                  |«      ‘Œ }}n?|€)t        j                  ||¬«      }| j!                  |«      }n| j!                  |«      }nd}| j#                  || j                   j$                  «      }|€| j'                  ||||¬	«      }n|}| j)                  ||||||	|
|||¬
«
      }|d   }| j*                  �| j+                  |«      nd}|s
||f|dd z   S t-        |||j.                  |j0                  |j2                  |j4                  ¬«      S c c}w )a.  
        encoder_hidden_states  (`torch.FloatTensor`, *optional*):
            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if
            the model is configured as a decoder.
        encoder_attention_mask (`torch.FloatTensor`, *optional*):
            Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in
            the cross-attention if the model is configured as a decoder. Mask values selected in `[0, 1]`:
            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
        past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*):
            Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.
            If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that
            don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all
            `decoder_input_ids` of shape `(batch_size, sequence_length)`.
        use_cache (`bool`, *optional*):
            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see
            `past_key_values`).
        NFzDYou cannot specify both input_ids and inputs_embeds at the same timer   zGYou have to specify either input_ids or inputs_embeds or encoder_embedsr   rU   rC  )r<   r   r=   r>   )	ry   rz   r{   r|   rç   rè   r~   ré   rê   r   )rñ   Úpooler_outputrç   rx   rò   ró   )r6   r~   ré   Úuse_return_dictrè   rX   Ú%warn_if_padding_and_no_attention_maskrA   r   rF  r2   rG  r‰   rN  rÁ   ÚlistÚinvert_attention_maskÚget_head_maskrã   rD   r5  r6  r   rç   rx   rò   ró   )r8   r<   ry   r   rz   r=   rO  r{   r|   rç   rè   r~   ré   rê   rÒ   rB   rJ  rC   r   r>   rI  Úencoder_batch_sizeÚencoder_sequence_lengthÚ_Úencoder_hidden_shapeÚmaskÚencoder_extended_attention_maskÚembedding_outputÚencoder_outputsr  r  s                                  r:   rE   zBlipTextModel.forwardž  sU  € ðF 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆáØ%.Ð%:™	ÀÇÁ×@UÑ@U‰IàˆIàÐ  ]Ð%>ÜÐcÓdÐdØÐ"Ø×6Ñ6°yÀ.ÔQØ#Ÿ.™.Ó*ˆKØ%0Ñ"ˆJ˜
Ø×%Ñ%‰FØÐ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ%0Ñ"ˆJ˜
Ø"×)Ñ)‰FØÐ'Ø(×-Ñ-Ó/°°Ð4ˆKØ%0Ñ"ˆJ˜
Ø#×*Ñ*‰FäÐfÓgÐgð DSÐC^ °Ñ!3°AÑ!6×!<Ñ!<¸QÒ!?ÐdeÐàÐ!Ü"ŸZ™Z¨*°jÐCYÑ6YÐ)ZÓ\×_Ñ_Ð`fÓgˆNð 15×0PÑ0PØ˜K¨°ó1
Ðð !Ð,ÜÐ/´Ô6ØAVÐWXÑAY×A^ÑA^ÓA`Ñ>Ð"Ð$;¹QàAV×A[ÑA[ÓA]Ñ>Ð"Ð$;¸QØ$6Ð8OÐ#PÐ äÐ0´$Ô7Ø`vÖ2wÐX\°4×3MÑ3MÈdÕ3SÐ2wÐ/Ñ2wØ'Ð/Ü).¯©Ð4HÐQWÔ)XÐ&Ø26×2LÑ2LÐMcÓ2dÑ/à26×2LÑ2LÐMcÓ2dÑ/à.2Ð+ð ×&Ñ& y°$·+±+×2OÑ2OÓPˆ	àÐ!Ø#Ÿ™Ø#Ø)Ø+Ø'=ð	  /ó  Ñð  .ÐàŸ,™,ØØ2ØØ"7Ø#BØ+ØØ/Ø!5Ø#ð 'ó 
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáØ# ]Ð3°oÀaÀbÐ6IÑIÐIä;Ø-Ø'Ø+×;Ñ;Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô
ð 	
ùòY 3xs   Æ:K)T)NNNNNNNNNNNNNF)rF   rG   rH   rI   r$   r;  r=  rA  r   r   rL   r   r¡   rN  r   r2   r   rK   r   r   rE   rM   rN   s   @r:   r3  r3  ;  s¤  ø„ ñõò/ò0òCð?'Ø$ð?'Ø38¸±:ð?'ØGMð?'Ø[_ð?'à	ó?'ðF -1Ø15Ø/3Ø,0Ø04Ø15Ø8<Ø9=Ø=AØ$(Ø,0Ø/3Ø&*Ø%*ñI
à˜EŸL™LÑ)ðI
ð ! §¡Ñ.ðI
ð ˜uŸ|™|Ñ,ð	I
ð
 ˜EŸL™LÑ)ðI
ð   §¡Ñ-ðI
ð ! §¡Ñ.ðI
ð  (¨¯©Ñ5ðI
ð !)¨¯©Ñ 6ðI
ð " $ u×'8Ñ'8Ñ"9Ñ:ðI
ð ˜D‘>ðI
ð $ D™>ðI
ð ' t™nðI
ð ˜d‘^ðI
ð ˜T‘NðI
ð  
ˆu�U—\‘\Ñ"Ð$PÐPÑ	Q÷!I
r;   r3  c            %       óð  ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddee	j                     dee	j                     dee	j                     d	ee	j                     d
ee	j                     dee	j                     dee	j                     dee	j                     deee	j                        dee   dee   dee   dee   dee   dee   dee   deee	j                     ef   f"d„Zdd„Zd„ Zˆ xZS )ÚBlipTextLMHeadModelc                 óŠ   •— t         ‰| �  |«       t        |d¬«      | _        t	        |«      | _        |j                  | _        y )NF)r8  )r#   r$   r3  r"  r  ÚclsÚlabel_smoothingr7   s     €r:   r$   zBlipTextLMHeadModel.__init__,  s8   ø€ Ü‰Ñ˜Ô ä! &¸EÔBˆŒ	Ü& vÓ.ˆŒØ%×5Ñ5ˆÕr;   c                 ó6   — | j                   j                  «       S re   )r"  r;  rj   s    r:   r;  z(BlipTextLMHeadModel.get_input_embeddings3  s   € Ø�y‰y×-Ñ-Ó/Ð/r;   c                 ó:   — | j                   j                  |«       y re   )r"  r=  ©r8   Únew_embeddingss     r:   r=  z(BlipTextLMHeadModel.set_input_embeddings6  s   € Ø�	‰	×&Ñ& ~Õ6r;   c                 óB   — | j                   j                  j                  S re   )rb  r  r  rj   s    r:   Úget_output_embeddingsz)BlipTextLMHeadModel.get_output_embeddings9  s   € Ø�x‰x×#Ñ#×+Ñ+Ð+r;   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y re   )rb  r  r  r  rf  s     r:   Úset_output_embeddingsz)BlipTextLMHeadModel.set_output_embeddings<  s,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!r;   r<   ry   r   rz   r=   r{   r|   Úlabelsrç   rè   r~   ré   rê   Úreturn_logitsrÒ   Ú	reductionr?   c                 ó2  — |�|n| j                   j                  }|�d}
| j                  ||||||||	|
||||¬«      }|d   }| j                  |«      }|r|dd…dd…dd…f   j	                  «       S d}|�Ö|dd…dd…dd…f   j	                  «       }|dd…dd…f   j	                  «       j                  |j                  «      }t        || j                  ¬«      } ||j                  d| j                   j                  «      |j                  d«      «      }|dk(  r0|j                  |j                  d«      d«      j                  d«      }|s|f|d	d z   }|�|f|z   S |S t        |||j                  |j                  |j                   |j"                  ¬
«      S )aº  
        encoder_hidden_states (`torch.FloatTensor`, *optional*): Sequence of
            hidden-states at the output of the last layer of the encoder. Used in the cross-attention if the model is
            configured as a decoder.
        encoder_attention_mask (`torch.FloatTensor`, *optional*):
            Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in
            the cross-attention if the model is configured as a decoder. Mask values selected in `[0, 1]`:
            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.
        labels (`torch.LongTensor`, *optional*):
            Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in
            `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are
            ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`
        past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*):
            Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.
            If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that
            don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all
            `decoder_input_ids` of shape `(batch_size, sequence_length)`.
        use_cache (`bool`, *optional*):
            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see
            `past_key_values`).
        NF)ry   r   rz   r=   r{   r|   rç   rè   r~   ré   rê   rÒ   r   r   r   )rn  rc  ÚnonerU   )ÚlossÚlogitsrç   rx   rò   ró   )r6   rR  r"  rb  rŽ   r‰   r   r
   rc  rs   r&   rA   Úsumr   rç   rx   rò   ró   )r8   r<   ry   r   rz   r=   r{   r|   rl  rç   rè   r~   ré   rê   rm  rÒ   rn  rŸ   r  r  Úlm_lossÚshifted_prediction_scoresÚloss_fctr±   s                           r:   rE   zBlipTextLMHeadModel.forward@  sÄ  € ðR &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆØÐØˆIà—)‘)ØØ)Ø%ØØ'Ø"7Ø#9Ø+ØØ/Ø!5Ø#Ø!ð ó 
ˆð  " !™*ˆØ ŸH™H _Ó5ÐáØ$¢Q¨¨¨ªQ YÑ/×:Ñ:Ó<Ð<àˆØÐà(9º!¸S¸b¸SÂ!¸)Ñ(D×(OÑ(OÓ(QÐ%ØšA˜q™r˜E‘]×-Ñ-Ó/×2Ñ2Ð3L×3SÑ3SÓTˆFÜ'°)ÈT×MaÑMaÔbˆHÙÐ8×=Ñ=¸bÀ$Ç+Á+×BXÑBXÓYÐ[a×[fÑ[fÐgiÓ[jÓkˆGØ˜FÒ"Ø!Ÿ,™,Ð'8×'=Ñ'=¸aÓ'@À"ÓE×IÑIÈ!ÓL�áØ'Ð)¨G°A°B¨KÑ7ˆFØ,3Ð,?�W�J Ñ'ÐKÀVÐKä0ØØ$Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r;   c                 ó$  — |j                   }|€|j                  |«      }|�G|d   d   j                   d   }|j                   d   |kD  r|}n|j                   d   dz
  }|d d …|d …f   }||||j                  dd «      |j                  dd «      ddœS )Nr   rU   r   r{   r|   T)r<   ry   rç   r{   r|   rÒ   )rF  Únew_onesÚget)r8   r<   rç   ry   Úmodel_kwargsrB   Úpast_lengthÚremove_prefix_lengths           r:   Úprepare_inputs_for_generationz1BlipTextLMHeadModel.prepare_inputs_for_generationš  sÂ   € ð  —o‘oˆàÐ!Ø&×/Ñ/°Ó<ˆNð Ð&Ø)¨!Ñ,¨QÑ/×5Ñ5°aÑ8ˆKð �‰˜qÑ! KÒ/Ø'2Ñ$ð (1§¡°qÑ'9¸AÑ'=Ð$à!¢!Ð%9Ñ%:Ð":Ñ;ˆIð #Ø,Ø.Ø%1×%5Ñ%5Ð6MÈtÓ%TØ&2×&6Ñ&6Ð7OÐQUÓ&VØñ
ð 	
r;   c                 óJ   ‡— d}|D ]  }|t        ˆfd„|D «       «      fz  }Œ |S )Nrì   c              3   ót   •K  — | ]/  }|j                  d ‰j                  |j                  «      «      –— Œ1 y­w)r   N)Úindex_selectr‰   r   )rî   Ú
past_stateÚbeam_idxs     €r:   rð   z5BlipTextLMHeadModel._reorder_cache.<locals>.<genexpr>¼  s.   øè ø€ ÒnÐU_�j×-Ñ-¨a°·±¸Z×=NÑ=NÓ1O×PÑnùs   ƒ58)rù   )r8   rç   r‚  Úreordered_pastÚ
layer_pasts     `  r:   Ú_reorder_cachez"BlipTextLMHeadModel._reorder_cache¸  s=   ø€ ØˆØ)ò 	ˆJØÜÓnÐcmÔnÓnðñ ‰Nð	ð Ðr;   )NNNNNNNNNNNNNFTr$  )NN)rF   rG   rH   r$   r;  r=  ri  rk  r   r2   r   r   r¡   rÃ   r   r   r   rE   r}  r…  rM   rN   s   @r:   r`  r`  +  sž  ø„ ô6ò0ò7ò,ò8ð -1Ø15Ø/3Ø,0Ø04Ø8<Ø9=Ø)-Ø8<Ø$(Ø,0Ø/3Ø&*Ø(-Ø%)Ø#)ñ#X
à˜EŸL™LÑ)ðX
ð ! §¡Ñ.ðX
ð ˜uŸ|™|Ñ,ð	X
ð
 ˜EŸL™LÑ)ðX
ð   §¡Ñ-ðX
ð  (¨¯©Ñ5ðX
ð !)¨¯©Ñ 6ðX
ð ˜Ÿ™Ñ&ðX
ð " $ u§|¡|Ñ"4Ñ5ðX
ð ˜D‘>ðX
ð $ D™>ðX
ð ' t™nðX
ð ˜d‘^ðX
ð   ‘~ðX
ð  ˜T‘Nð!X
ð" ˜C‘=ð#X
ð$ 
ˆu�U—\‘\Ñ"Ð$EÐEÑ	Fó%X
ót
ö<r;   r`  )1r‹   Útypingr   r   r   r   r2   Útorch.utils.checkpointr   r   r	   Útorch.nnr
   Úactivationsr   Ú
generationr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   r   r   Úutilsr   Úconfiguration_blipr   Ú
get_loggerrF   rõ   ÚModuler   rP   r£   r¯   r¾   rÈ   rÌ   rß   r  r
  r  r  r!  r3  r`  rì   r;   r:   ú<module>r‘     sK  ðó" ß /Ó /ã Û ß $Ñ $Ý %å !Ý )÷ñ ÷
ó õ Ý .ð 
ˆ×	Ñ	˜HÓ	%€ô0˜Ÿ™ô 0ôh{˜BŸI™Iô {ô~˜Ÿ™ô ô.˜Ÿ	™	ô .ôd˜2Ÿ9™9ô ô �R—Y‘Yô ô<�B—I‘Iô <ô@Z
�b—i‘iô Z
ô|�R—Y‘Yô ô  b§i¡iô ô$˜rŸy™yô ô0!˜"Ÿ)™)ô !ô%˜oô %ô0l
Ð+ô l
ô`SÐ1°?õ Sr;   