Ë
    ÛÓ^jÂy  ã                   óH  — d dl Z d dlZd dlmZ d dlmZ ddlmZ ddlm	Z	 ddl
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)  e"jT                  e+«      Z, G d„ dejZ                  «      Z. G d„ dejZ                  «      Z/ G d„ dejZ                  «      Z0 G d„ dejZ                  «      Z1 G d„ dejZ                  «      Z2 G d„ dejZ                  «      Z3 G d „ d!e«      Z4 G d"„ d#ejZ                  «      Z5 G d$„ d%ejZ                  «      Z6 G d&„ d'ejZ                  «      Z7 G d(„ d)ejZ                  «      Z8 G d*„ d+ejZ                  «      Z9 G d,„ d-e«      Z: G d.„ d/e:«      Z; G d0„ d1e:e«      Z<g d2¢Z=y)3é    N)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentions)ÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚTransformersKwargsÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚBlipTextConfigc                   óª   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 d
dej                  dz  dej                  dz  dej                  dz  dedej                  f
d	„Z
ˆ xZS )ÚBlipTextEmbeddingsz;Construct the embeddings from word and position embeddings.c                 ó,  •— 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¬«       || _        y )N)Úpadding_idx©ÚepsÚposition_ids©r   éÿÿÿÿF)Ú
persistent)Ú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Úconfig©Úselfr9   Ú	__class__s     €úv/var/www/ramen.bs-engineer-server.com/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ð 	ô 	
ð ˆ�ó    NÚ	input_idsr#   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 ó*  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …|||z   …f   }|€| j                  |«      }|}| j                  |«      }||z  }| j	                  |«      }| j                  |«      }|S )Nr%   r   )Úsizer#   r-   r/   r0   r4   )	r;   r?   r#   r@   rA   Úinput_shapeÚ
seq_lengthÚ
embeddingsr/   s	            r=   ÚforwardzBlipTextEmbeddings.forward@   s´   € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLàÐ Ø ×0Ñ0°Ó;ˆMà"ˆ
à"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr>   )NNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r6   Ú
LongTensorÚFloatTensorÚintÚTensorrH   Ú__classcell__©r<   s   @r=   r   r   .   ss   ø„ ÙEôð" .2Ø04Ø26Ø&'ñà×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 !$ðð 
�‰÷r>   r   c                   ó  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Zd„ Z	 	 	 	 ddej                  dej                  dz  d	ej                  dz  d
ej                  dz  dedz  dee   deej                  ej                  f   fd„Zˆ xZS )ÚBlipTextSelfAttentionNc                 ó¦  •— 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$                  «      | _        y )Nr   Úembedding_sizezLThe hidden size (%d) is not a multiple of the number of attention heads (%d))r'   r(   r9   r+   Únum_attention_headsÚhasattrÚ
ValueErrorrO   Úattention_head_sizeÚall_head_sizeÚ	layer_idxr   ÚLinearÚqueryÚencoder_hidden_sizeÚkeyÚvaluer2   Úattention_probs_dropout_probr4   ©r;   r9   Úis_cross_attentionr\   r<   s       €r=   r(   zBlipTextSelfAttention.__init__`   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ˆ�r>   c                 ó   — || _         y ©N©Úattn_gradients)r;   rh   s     r=   Úsave_attn_gradientsz)BlipTextSelfAttention.save_attn_gradientsx   s
   € Ø,ˆÕr>   c                 ó   — | j                   S rf   rg   ©r;   s    r=   Úget_attn_gradientsz(BlipTextSelfAttention.get_attn_gradients{   s   € Ø×"Ñ"Ð"r>   c                 ó   — || _         y rf   ©Úattention_map)r;   ro   s     r=   Úsave_attention_mapz(BlipTextSelfAttention.save_attention_map~   s
   € Ø*ˆÕr>   c                 ó   — | j                   S rf   rn   rk   s    r=   Úget_attention_mapz'BlipTextSelfAttention.get_attention_map�   s   € Ø×!Ñ!Ð!r>   Úhidden_statesÚattention_maskÚencoder_hidden_statesÚencoder_attention_maskÚpast_key_valuesÚkwargsrB   c                 óª  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	|d u}
|
r|n|}d}|�St        |t        «      rA|j                  j                  | j                  «      }|
r|j                  }n|j                  }n|}|
r|n|}|
rK|�I|rGj                  | j                     j                  }|j                  | j                     j                  }nÍg |j                   d d ¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j!                  |«      j                  |«      j	                  dd«      }|�Kj#                  ||| j                  «      \  }}|
r)t        |t        «      rd|j                  | j                  <   t%        j&                  |	|j	                  dd«      «      }|t)        j*                  | j                  «      z  }|�||j-                  |j.                  «      z   } t1        j2                  d¬«      |«      }| j5                  |«      }t%        j&                  ||«      }|j7                  dddd	«      j9                  «       }|j;                  «       d d | j<                  fz   } |j                  |Ž }||fS )
Nr%   r   é   FTéþÿÿÿ)Údimr   r   )ÚshaperZ   r^   ÚviewÚ	transposeÚ
isinstancer
   Ú
is_updatedÚgetr\   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr`   ra   Úupdater6   ÚmatmulÚmathÚsqrtÚtoÚdevicer   ÚSoftmaxr4   ÚpermuteÚ
contiguousrD   r[   )r;   rs   rt   ru   rv   rw   rx   rE   Úhidden_shapeÚquery_layerrd   r�   Úcurr_past_key_valuesÚcurrent_statesÚ	key_layerÚvalue_layerÚkv_shapeÚattention_scoresÚattention_probsÚattention_probs_droppedÚcontext_layerÚnew_context_layer_shapes                         r=   rH   zBlipTextSelfAttention.forward„   s»  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆð
 3¸$Ð>ÐÙ3EÑ/È>ˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á2DÑ.È-ˆÙ /Ð"=Á*à,×3Ñ3°D·N±NÑC×HÑHˆIØ.×5Ñ5°d·n±nÑE×LÑL‰KàQ˜×-Ñ-¨c¨rÐ2ÐQ°BÐQ¸×8PÑ8PÑQˆHØŸ™ Ó0×5Ñ5°hÓ?×IÑIÈ!ÈQÓOˆIØŸ*™* ^Ó4×9Ñ9¸(ÓC×MÑMÈaÐQRÓSˆKàÐ*Ø)=×)DÑ)DÀYÐP[Ð]a×]kÑ]kÓ)lÑ&�	˜;á%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.×2CÑ2CÐDT×D[ÑD[Ó2\Ñ\Ðð -œ"Ÿ*™*¨Ô,Ð-=Ó>ˆð #'§,¡,¨Ó"?ÐäŸ™Ð%<¸kÓJˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ*˜×*Ñ*Ð,CÐDˆà˜oÐ-Ð-r>   rf   ©NNNN)rI   rJ   rK   r(   ri   rl   rp   rr   r6   rP   rN   r   r   r   ÚtuplerH   rQ   rR   s   @r=   rT   rT   _   s½   ø„ õGò0-ò#ò+ò"ð 48Ø:>Ø;?Ø(,ñD.à—|‘|ðD.ð ×)Ñ)¨DÑ0ðD.ð  %×0Ñ0°4Ñ7ð	D.ð
 !&× 1Ñ 1°DÑ 8ðD.ð  ™ðD.ð Ð+Ñ,ðD.ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷D.r>   rT   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+   Údenser0   r1   r2   r3   r4   r:   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>   rs   Úinput_tensorrB   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rf   ©r£   r4   r0   ©r;   rs   r¤   s      r=   rH   zBlipTextSelfOutput.forwardÓ   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr>   ©rI   rJ   rK   r(   r6   rP   rH   rQ   rR   s   @r=   r    r    Ì   ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r>   r    c                   óÎ   ‡ — e Zd Zd
ˆ fd„	Z	 	 	 ddej
                  dej                  dz  dej                  dz  dedz  dee	   de
ej
                  ej
                  f   fd	„Zˆ xZS )ÚBlipTextAttentionNc                 óh   •— t         ‰| �  «        t        |||¬«      | _        t	        |«      | _        y )N©r\   )r'   r(   rT   r;   r    Úoutputrc   s       €r=   r(   zBlipTextAttention.__init__Ü   s,   ø€ Ü‰ÑÔÜ)¨&Ð2DÐPYÔZˆŒ	Ü(¨Ó0ˆ�r>   rs   rt   ru   rw   rx   rB   c                 ó^   — | j                  ||||¬«      \  }}| j                  ||«      }||fS )N©rt   ru   rw   )r;   r¯   )	r;   rs   rt   ru   rw   rx   r›   r™   Úattention_outputs	            r=   rH   zBlipTextAttention.forwardá   sF   € ð *.¯©ØØ)Ø"7Ø+ð	 *3ó *
Ñ&ˆ�ð  Ÿ;™; }°mÓDÐØ Ð0Ð0r>   )FN)NNN)rI   rJ   rK   r(   r6   rP   rN   r   r   r   rž   rH   rQ   rR   s   @r=   r¬   r¬   Û   sˆ   ø„ õ1ð 48Ø:>Ø(,ñ1à—|‘|ð1ð ×)Ñ)¨DÑ0ð1ð  %×0Ñ0°4Ñ7ð	1ð
  ™ð1ð Ð+Ñ,ð1ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷1r>   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 rf   )r'   r(   r   r]   r+   Úintermediate_sizer£   r€   Ú
hidden_actÚstrr   Úintermediate_act_fnr:   s     €r=   r(   zBlipTextIntermediate.__init__õ   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r>   rs   rB   c                 óJ   — | j                  |«      }| j                  |«      }|S rf   )r£   r¹   ©r;   rs   s     r=   rH   zBlipTextIntermediate.forwardý   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr>   r©   rR   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£   r0   r1   r2   r3   r4   r:   s     €r=   r(   zBlipTextOutput.__init__  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r>   rs   r¤   rB   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rf   r¦   r§   s      r=   rH   zBlipTextOutput.forward  r¨   r>   r©   rR   s   @r=   r½   r½     rª   r>   r½   c                   óÔ   ‡ — e Zd Zˆ fd„Z	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dee	   d	ej
                  fd
„Z
d„ Zˆ xZS )ÚBlipTextLayerc                 óL  •— t         ‰| �  «        || _        |j                  | _        d| _        t        ||¬«      | _        || _        | j                  j                  r't        || j                  j                  |¬«      | _	        t        |«      | _        t        |«      | _        y )Nr   r®   )rd   r\   )r'   r(   r9   Úchunk_size_feed_forwardÚseq_len_dimr¬   Ú	attentionÚ	layer_numÚ
is_decoderÚcrossattentionr´   Úintermediater½   r¯   )r;   r9   rÆ   r<   s      €r=   r(   zBlipTextLayer.__init__  s†   ø€ Ü‰ÑÔØˆŒØ'-×'EÑ'EˆÔ$ØˆÔÜ*¨6¸YÔGˆŒØ"ˆŒØ�;‰;×!Ò!Ü"3Ø¨4¯;©;×+AÑ+AÈYô#ˆDÔô 1°Ó8ˆÔÜ$ VÓ,ˆ�r>   Nrs   ru   rt   rv   rw   rx   rB   c                 óÀ   — | j                  |||¬«      \  }}|�| j                  ||||¬«      \  }}t        | j                  | j                  | j
                  |«      }	|	S )N)rt   rw   r±   )rÅ   rÈ   r   Úfeed_forward_chunkrÃ   rÄ   )
r;   rs   ru   rt   rv   rw   rx   r²   Ú_Úlayer_outputs
             r=   rH   zBlipTextLayer.forward!  s…   € ð #Ÿn™nØØ)Ø+ð -ó 
ÑÐ˜!ð !Ð,Ø"&×"5Ñ"5Ø Ø5Ø&;Ø /ð	 #6ó #ÑÐ˜aô 1Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð Ðr>   c                 óL   — | j                  |«      }| j                  ||«      }|S rf   )rÉ   r¯   )r;   r²   Úintermediate_outputrÍ   s       r=   rË   z BlipTextLayer.feed_forward_chunk<  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr>   r�   )rI   rJ   rK   r(   r6   rP   rN   r   r   r   rH   rË   rQ   rR   s   @r=   rÁ   rÁ     s—   ø„ ô-ð" ;?Ø37Ø;?Ø(,ñà—|‘|ðð  %×0Ñ0°4Ñ7ðð ×)Ñ)¨DÑ0ð	ð
 !&× 1Ñ 1°DÑ 8ðð  ™ðð Ð+Ñ,ðð 
�‰óö6r>   rÁ   c                   óÆ   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dedz  d	e	e
   d
e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(   r9   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÁ   ÚlayerÚgradient_checkpointing)r;   r9   Úir<   s      €r=   r(   zBlipTextEncoder.__init__D  sP   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄeÈF×LdÑLdÓFeÖ#fÀ¤M°&¸!Õ$<Ò#fÓgˆŒ
Ø&+ˆÕ#ùò $gs   ½A$Nrs   rt   ru   rv   rw   Ú	use_cacherx   rB   c                 óŽ  — | j                   r%| j                  r|rt        j                  d«       d}|rgt	        |t
        «      r!t        |t        | j                  ¬«      «      }n6|€4t        t        | j                  ¬«      t        | j                  ¬«      «      }| j                  D ]  } |||f|||dœ|¤Ž}Œ t        ||¬«      S )NzZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)r9   )rt   rv   rw   )Úlast_hidden_staterw   )
r×   ÚtrainingÚloggerÚwarningr€   r	   r
   r9   rÖ   r   )	r;   rs   rt   ru   rv   rw   rÙ   rx   Úlayer_modules	            r=   rH   zBlipTextEncoder.forwardJ  sÎ   € ð ×&Ò&¨4¯=ª=ÙÜ—‘Øpôð "�	áô ˜/¬<Ô8Ü"5°oÄ|Ð[_×[fÑ[fÔGgÓ"h‘Ø Ð(Ü"5Ü ¨¯©Ô4´lÈ$Ï+É+Ô6Vó#�ð !ŸJ™Jò 	ˆLÙ(ØØ%ðð  .Ø'=Ø /ñð ñ‰Mð	ô 9Ø+Ø+ô
ð 	
r>   )NNNNN)rI   rJ   rK   r(   r6   rP   rN   r   Úboolr   r   r   rH   rQ   rR   s   @r=   rÑ   rÑ   C  sŸ   ø„ ô,ð 48Ø:>Ø;?Ø(,Ø!%ñ(
à—|‘|ð(
ð ×)Ñ)¨DÑ0ð(
ð  %×0Ñ0°4Ñ7ð	(
ð
 !&× 1Ñ 1°DÑ 8ð(
ð  ™ð(
ð ˜$‘;ð(
ð Ð+Ñ,ð(
ð 
3÷(
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 rf   )r'   r(   r   r]   r+   r£   ÚTanhÚ
activationr:   s     €r=   r(   zBlipTextPooler.__init__w  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�r>   rs   rB   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )r£   rå   )r;   rs   Úfirst_token_tensorÚpooled_outputs       r=   rH   zBlipTextPooler.forward|  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐr>   r©   rR   s   @r=   râ   râ   v  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_fnr0   r1   r:   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>   rs   rB   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rf   )r£   rì   r0   r»   s     r=   rH   z'BlipTextPredictionHeadTransform.forward�  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr>   r©   rR   s   @r=   rê   rê   †  s$   ø„ ôUð U§\¡\ð °e·l±l÷ r>   rê   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBlipTextLMPredictionHeadc                 ó  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        t	        j                  t        j                  |j                  «      «      | _        y )NT)Úbias)r'   r(   rê   Ú	transformr   r]   r+   r*   ÚdecoderÚ	Parameterr6   Úzerosrñ   r:   s     €r=   r(   z!BlipTextLMPredictionHead.__init__™  s[   ø€ Ü‰ÑÔÜ8¸Ó@ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈTÔRˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆ�	r>   c                 óJ   — | j                  |«      }| j                  |«      }|S rf   )rò   ró   r»   s     r=   rH   z BlipTextLMPredictionHead.forward¢  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐr>   )rI   rJ   rK   r(   rH   rQ   rR   s   @r=   rï   rï   ˜  s   ø„ ôAö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 rf   )r'   r(   rï   Úpredictionsr:   s     €r=   r(   zBlipTextOnlyMLMHead.__init__ª  s   ø€ Ü‰ÑÔÜ3°FÓ;ˆÕr>   Úsequence_outputrB   c                 ó(   — | j                  |«      }|S rf   )rú   )r;   rû   Úprediction_scoress      r=   rH   zBlipTextOnlyMLMHead.forward®  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð r>   r©   rR   s   @r=   rø   rø   ©  s#   ø„ ô<ð! u§|¡|ð !¸¿¹÷ !r>   rø   c                   ój   ‡ — e Zd ZU dZeed<   dZg Ze e	e
dd¬«      g e	e
dd¬«      gdœZˆ fd	„Zˆ xZS )
ÚBlipTextPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    r9   Úbertr   z.attention.)ÚindexÚ
layer_namez.crossattention.)rs   Ú
attentionsÚcross_attentionsc                 óø   •— t         ‰| �  |«       t        |t        «      rZt	        j
                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       y y )Nr%   r$   )r'   Ú_init_weightsr€   r   ÚinitÚcopy_r#   r6   r7   r}   r8   )r;   Úmoduler<   s     €r=   r  z%BlipTextPreTrainedModel._init_weightsÇ  s[   ø€ Ü‰Ñ˜fÔ%Ü�fÔ0Ô1Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 2r>   )rI   rJ   rK   rL   r   Ú__annotations__Úbase_model_prefixÚ_no_split_modulesrÁ   r   rT   Ú_can_record_outputsr  rQ   rR   s   @r=   rÿ   rÿ   ´  sZ   ø… ñð
 ÓØÐØÐà&áÐ0¸ÀmÔTð
ñ Ð0¸ÐFXÔYð
ñÐ÷ið ir>   rÿ   c                   ó`  ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Z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	j                  dz  de	j                  dz  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 )Ú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://huggingface.co/papers/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 rf   )
r'   r(   r9   r   rG   rÑ   Úencoderrâ   ÚpoolerÚ	post_init)r;   r9   Úadd_pooling_layerr<   s      €r=   r(   zBlipTextModel.__init__×  sI   ø€ Ü‰Ñ˜Ô ØˆŒä,¨VÓ4ˆŒÜ& vÓ.ˆŒÙ0A”n VÔ,ÀtˆŒà�‰Õr>   c                 ó.   — | j                   j                  S rf   ©rG   r-   rk   s    r=   Úget_input_embeddingsz"BlipTextModel.get_input_embeddingsá  s   € Ø�‰×.Ñ.Ð.r>   c                 ó&   — || j                   _        y rf   r  )r;   ra   s     r=   Úset_input_embeddingsz"BlipTextModel.set_input_embeddingsä  s   € Ø*/ˆ�‰Õ'r>   Nr?   rt   r#   r@   Úencoder_embedsru   rv   rw   rÙ   rÇ   rx   rB   c           	      ó  — |
sd}	|�|�t        d«      ‚|�|j                  «       nd}|€| j                  ||||¬«      }n|}|
rt        | j                  |||¬«      }nt        | j                  ||¬«      }|�t        | j                  |||¬«      } | j                  |f|||||	d	œ|¤Ž}|j                  }| j                  �| j                  |«      nd}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**.
        past_key_values (`Cache`, *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`).
        FNzDYou cannot specify both input_ids and inputs_embeds at the same timer   )r?   r#   r@   rA   )r9   r@   rt   rw   )r9   r@   rt   )r9   r@   rt   ru   )rt   ru   rv   rw   rÙ   )rÛ   Úpooler_outputrw   rs   r  r  )rY   Úget_seq_lengthrG   r   r9   r   r  rÛ   r  r   rw   rs   r  r  )r;   r?   rt   r#   r@   r  ru   rv   rw   rÙ   rÇ   rx   rA   Úembedding_outputÚencoder_outputsrû   rè   s                    r=   rH   zBlipTextModel.forwardç  sX  € ñD ØˆIàÐ  ]Ð%>ÜÐcÓdÐdàETÐE` ×!?Ñ!?Ô!AÐfgÐàÐ!Ø#Ÿ™Ø#Ø)Ø+Ø'=ð	  /ó  Ñð  .ÐáÜ/Ø—{‘{Ø.Ø-Ø /ô	‰Nô 7Ø—{‘{Ø.Ø-ôˆNð "Ð-Ü%>Ø—{‘{Ø.Ø5Ø&;ô	&Ð"ð FRÀTÇ\Á\ØðF
à)Ø"7Ø#9Ø+ØñF
ð ñF
ˆð *×;Ñ;ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä;Ø-Ø'Ø+×;Ñ;Ø)×7Ñ7Ø&×1Ñ1Ø,×=Ñ=ô
ð 	
r>   )T)
NNNNNNNNNF)rI   rJ   rK   rL   r(   r  r  r   r   r6   rP   r   rà   r   r   r   rH   rQ   rR   s   @r=   r  r  Î  s(  ø„ ñõò/ò0ð  Øð *.Ø.2Ø,0Ø-1Ø.2Ø59Ø6:Ø(,Ø!%Ø"'ñ[
à—<‘< $Ñ&ð[
ð Ÿ™ tÑ+ð[
ð —l‘l TÑ)ð	[
ð
 —|‘| dÑ*ð[
ð Ÿ™ tÑ+ð[
ð  %Ÿ|™|¨dÑ2ð[
ð !&§¡¨tÑ 3ð[
ð  ™ð[
ð ˜$‘;ð[
ð ˜4‘Kð[
ð Ð+Ñ,ð[
ð 
6ò[
ó ó  ô[
r>   r  c                    óª  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 	 	 	 dd
e
j                  d	z  de
j                  d	z  de
j                  d	z  de
j                  d	z  de
j                  d	z  de
j                  d	z  de
j                  d	z  ded	z  ded	z  ded	z  ded	z  ded	z  dee
j                  z  dee   defd„«       Zdˆ fd„	Zˆ xZS )ÚBlipTextLMHeadModelzcls.predictions.biasz&bert.embeddings.word_embeddings.weight)zcls.predictions.decoder.biaszcls.predictions.decoder.weightc                 óª   •— t         ‰| �  |«       t        |d¬«      | _        t	        |«      | _        |j                  | _        | j                  «        y )NF)r  )r'   r(   r  r   rø   ÚclsÚlabel_smoothingr  r:   s     €r=   r(   zBlipTextLMHeadModel.__init__N  sB   ø€ Ü‰Ñ˜Ô ä! &¸EÔBˆŒ	Ü& vÓ.ˆŒØ%×5Ñ5ˆÔà�‰Õr>   c                 ó6   — | j                   j                  «       S rf   )r   r  rk   s    r=   r  z(BlipTextLMHeadModel.get_input_embeddingsW  s   € Ø�y‰y×-Ñ-Ó/Ð/r>   c                 ó:   — | j                   j                  |«       y rf   )r   r  ©r;   Únew_embeddingss     r=   r  z(BlipTextLMHeadModel.set_input_embeddingsZ  s   € Ø�	‰	×&Ñ& ~Õ6r>   c                 óB   — | j                   j                  j                  S rf   )r#  rú   ró   rk   s    r=   Úget_output_embeddingsz)BlipTextLMHeadModel.get_output_embeddings]  s   € Ø�x‰x×#Ñ#×+Ñ+Ð+r>   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y rf   )r#  rú   ró   rñ   r'  s     r=   Úset_output_embeddingsz)BlipTextLMHeadModel.set_output_embeddings`  s,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!r>   Nr?   rt   r#   r@   ru   rv   Úlabelsrw   rÙ   Úreturn_logitsrÇ   Ú	reductionÚlogits_to_keeprx   rB   c                 ó0  — |�d}	 | j                   |f|||||||	|dœ|¤Ž}|j                  }t        |t        «      rt	        | d«      n|}| j                  |dd…|dd…f   «      }|
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«      }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 (`Cache`, *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)rt   r#   r@   ru   rv   rw   rÙ   rÇ   r%   r   )r/  r$  Únoner   )ÚlossÚlogitsrw   rs   r  r  )r   rÛ   r€   rO   Úslicer#  r�   rŒ   r�   r   r$  r~   r9   r*   rD   Úsumr   rw   rs   r  r  )r;   r?   rt   r#   r@   ru   rv   r-  rw   rÙ   r.  rÇ   r/  r0  rx   Úoutputsrs   Úslice_indicesrý   Úlm_lossÚshifted_prediction_scoresÚloss_fcts                         r=   rH   zBlipTextLMHeadModel.forwardd  s­  € ðP ÐØˆIà@IÀÇ	Á	ØðA
à)Ø%Ø'Ø"7Ø#9Ø+ØØ!ñA
ð ñA
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ ŸH™H ]²1°mÂQÐ3FÑ%GÓHÐáØ$¢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�ä0ØØ$Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r>   c                 ó8   •— t        ‰| �  |f||dœ|¤Ž}d|d<   |S )N)rw   rt   TrÇ   )r'   Úprepare_inputs_for_generation)r;   r?   rw   rt   Úmodel_kwargsÚmodel_inputsr<   s         €r=   r=  z1BlipTextLMHeadModel.prepare_inputs_for_generation·  s>   ø€ ô ‘wÑ<Øð
à+Ø)ñ
ð ñ	
ˆð &*ˆ�\Ñ"àÐr>   )NNNNNNNNNFTÚmeanr   )NN)rI   rJ   rK   Ú_tied_weights_keysr(   r  r  r*  r,  r   r6   rP   r   rà   r¸   rO   r   r   r   rH   r=  rQ   rR   s   @r=   r!  r!  H  sy  ø„ à(>Ø*RñÐô
ò0ò7ò,ò8ð ð *.Ø.2Ø,0Ø-1Ø59Ø6:Ø&*Ø(,Ø!%Ø%*Ø"&Ø &Ø-.ñP
à—<‘< $Ñ&ðP
ð Ÿ™ tÑ+ðP
ð —l‘l TÑ)ð	P
ð
 —|‘| dÑ*ðP
ð  %Ÿ|™|¨dÑ2ðP
ð !&§¡¨tÑ 3ðP
ð —‘˜tÑ#ðP
ð  ™ðP
ð ˜$‘;ðP
ð ˜d‘{ðP
ð ˜4‘KðP
ð ˜‘:ðP
ð ˜eŸl™lÑ*ðP
ð Ð+Ñ,ðP
ð  
+ò!P
ó ðP
÷dñ r>   r!  )r  r!  rÿ   )>rŠ   r6   r   Útorch.nnr   Ú r   r  Úactivationsr   Úcache_utilsr   r	   r
   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   r   Úconfiguration_blipr   Ú
get_loggerrI   rÝ   ÚModuler   rT   r    r¬   r´   r½   rÁ   rÑ   râ   rê   rï   rø   rÿ   r  r!  Ú__all__© r>   r=   ú<module>rU     s[  ðó  ã Ý Ý %å &Ý !ß CÑ CÝ )ß JÝ 9÷ñ õ
 .Ý &Ý 6ß BÑ BÝ 7ß EÝ .ð 
ˆ×	Ñ	˜HÓ	%€ô-˜Ÿ™ô -ôbi.˜BŸI™Iô i.ôZ˜Ÿ™ô ô1˜Ÿ	™	ô 1ô2˜2Ÿ9™9ô ô �R—Y‘Yô ô-Ð.ô -ôb/
�b—i‘iô /
ôf�R—Y‘Yô ô  b§i¡iô ô$˜rŸy™yô ô"!˜"Ÿ)™)ô !ôi˜oô iô4v
Ð+ô v
ôtzÐ1°?ô zòz N�r>   