Ë
    ÛÓ^j*®  ã                   ó  — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlm	Z
 ddlmZ dd	lmZ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mZ ddlmZmZ ddl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.  e&j^                  e0«      Z1 e%d¬«      e G d„ de#«      «       «       Z2 G d„ dejf                  «      Z4 G d„ dejf                  «      Z5 G d„ dejf                  «      Z6d e5iZ7 G d!„ d"ejf                  «      Z8 G d#„ d$ejf                  «      Z9 G d%„ d&ejf                  «      Z: G d'„ d(e«      Z; G d)„ d*ejf                  «      Z<e% G d+„ d,e«      «       Z= G d-„ d.ejf                  «      Z> G d/„ d0ejf                  «      Z?	 dMd1ejf                  d2ej€                  d3ej€                  d4ej€                  d5ej€                  dz  d6eAd7eAfd8„ZB G d9„ d:ejf                  «      ZC G d;„ d<e«      ZD G d=„ d>ejf                  «      ZE G d?„ d@ejf                  «      ZF e%dA¬«       G dB„ dCe=«      «       ZG G dD„ dEejf                  «      ZH e%dF¬«       G dG„ dHe=«      «       ZI e%dI¬«       G dJ„ dKe=e«      «       ZJg dL¢ZKy)NzPyTorch GIT model.é    N)ÚCallable)Ú	dataclass)Únné   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚloggingÚ	torch_int)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú	GitConfigÚGitVisionConfigz}
    Base class for vision model's outputs that also contains image embeddings of the pooling of the last hidden states.
    )Úcustom_introc                   óÆ   — 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
ej                  df   dz  ed<   dZe
ej                  df   dz  ed<   y)ÚGitVisionModelOutputzø
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim)` *optional* returned when model is initialized with `with_projection=True`):
        The image embeddings obtained by applying the projection layer to the pooler_output.
    NÚimage_embedsÚlast_hidden_state.Úhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   ÚtorchÚFloatTensorÚ__annotations__r$   r%   Útupler&   © ó    úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/git/modeling_git.pyr"   r"   6   sr   … ñð
 .2€L�%×#Ñ# dÑ*Ó1Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ô;r0   r"   c                   óª   ‡ — 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 )ÚGitEmbeddingsz;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_bufferr+   ÚarangeÚexpand©ÚselfÚconfigÚ	__class__s     €r1   r>   zGitEmbeddings.__init__L   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ð 	õ 	
r0   NÚ	input_idsr8   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 ó,  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …|||z   …f   }|€| j                  |«      }n|}| j                  |«      }||z  }| j	                  |«      }| j                  |«      }|S )Nr:   r   )Úsizer8   rC   rE   rF   rJ   )	rO   rR   r8   rS   rT   Úinput_shapeÚ
seq_lengthÚ
embeddingsrE   s	            r1   ÚforwardzGitEmbeddings.forwardX   s´   € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLàÐ Ø×-Ñ-¨iÓ8‰Jà&ˆJà"×6Ñ6°|ÓDÐØÐ)Ñ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr0   )NNNr   )r'   r(   r)   r*   r>   r+   Ú
LongTensorr,   ÚintÚTensorr[   Ú__classcell__©rQ   s   @r1   r3   r3   I   ss   ø„ ÙEô

ð .2Ø04Ø26Ø&'ñà×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 !$ðð 
�‰÷r0   r3   c                   ó–   ‡ — e Zd Zd	ˆ fd„	Z	 	 d
dej
                  dej                  dz  dedz  dee	   de
ej
                     f
d„Zˆ xZS )ÚGitSelfAttentionNc                 ó  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |€-t        j                  d| j                  j                  › d�«       |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _        t        |j                  j                  |j                  j                   z  dz  d	z   «      | _        |j$                  �| xj"                  |j$                  z  c_        t'        j(                  |j                  | j                  «      | _        t'        j(                  |j                  | j                  «      | _        t'        j(                  |j                  | j                  «      | _        t'        j0                  |j2                  «      | _        y )
Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)zInstantiating z¹ without passing a `layer_idx` is not recommended and will lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` when creating this class.é   r   )r=   r>   rA   Únum_attention_headsÚhasattrÚ
ValueErrorÚ	layer_idxÚloggerÚwarning_oncerQ   r'   r]   Úattention_head_sizeÚall_head_sizeÚvision_configÚ
image_sizeÚ
patch_sizeÚimage_patch_tokensÚnum_image_with_embeddingr   ÚLinearÚqueryÚkeyÚvaluerH   Úattention_probs_dropout_probrJ   ©rO   rP   rj   rQ   s      €r1   r>   zGitSelfAttention.__init__w   s®  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð #ˆŒØÐÜ×ÑØ  §¡×!8Ñ!8Ð 9ð :,ð ,ôð $*×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔÜ"% v×';Ñ';×'FÑ'FÈ×I]ÑI]×IhÑIhÑ'hÐmnÑ&nÐqrÑ&rÓ"sˆÔØ×*Ñ*Ð6Ø×#Ò# v×'FÑ'FÑFÕ#ä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆ�r0   r%   Úattention_maskÚpast_key_valuesÚkwargsrU   c                 óˆ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	|� |j                  ||	| j                  «      \  }}	t        j                  ||j	                  dd«      «      }
|
t        j                  | j                  «      z  }
|�|
|z   }
t        j                  j                  |
d¬«      }| j!                  |«      }t        j                  ||	«      }|j#                  dddd«      j%                  «       }|j'                  «       d d | j(                  fz   }|j                  |«      }||fS )Nr:   r   rf   éþÿÿÿ©Údimr   r   )Úshaperm   ru   ÚviewÚ	transposerv   rw   Úupdaterj   r+   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxrJ   ÚpermuteÚ
contiguousrW   rn   )rO   r%   rz   r{   r|   rX   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes                 r1   r[   zGitSelfAttention.forward“   s°  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆØ—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆà—H‘H˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆ	Ø—j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆØÐ&Ø%4×%;Ñ%;¸IÀ{ÐTX×TbÑTbÓ%cÑ"ˆI�{ô !Ÿ<™<¨°Y×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐØÐ%à/°.Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÓIˆð Ÿ,™, Ó7ˆäŸ™ _°kÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆà˜oÐ-Ð-r0   ©N©NN©r'   r(   r)   r>   r+   r^   r,   r	   r   r   r.   r[   r_   r`   s   @r1   rb   rb   v   sh   ø„ õGð> 48Ø(,ñ	%.à—|‘|ð%.ð ×)Ñ)¨DÑ0ð%.ð  ™ð	%.ð
 Ð+Ñ,ð%.ð 
ˆu�|‰|Ñ	÷%.r0   rb   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚGitSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr6   )r=   r>   r   rt   rA   ÚdenserF   rG   rH   rI   rJ   rN   s     €r1   r>   zGitSelfOutput.__init__½   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r0   r%   Úinput_tensorrU   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r”   ©r›   rJ   rF   ©rO   r%   rœ   s      r1   r[   zGitSelfOutput.forwardÃ   ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐr0   ©r'   r(   r)   r>   r+   r^   r[   r_   r`   s   @r1   r˜   r˜   ¼   ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ r0   r˜   Úeagerc                   ó–   ‡ — e Zd Zd	ˆ fd„	Z	 	 d
dej
                  dej                  dz  dedz  dee	   de
ej
                     f
d„Zˆ xZS )ÚGitAttentionNc                 ó€   •— t         ‰| �  «        t        |j                     ||¬«      | _        t        |«      | _        y )N©rj   )r=   r>   ÚGIT_SELF_ATTENTION_CLASSESÚ_attn_implementationrO   r˜   Úoutputry   s      €r1   r>   zGitAttention.__init__Ð   s4   ø€ Ü‰ÑÔÜ.¨v×/JÑ/JÑKÈFÐ^gÔhˆŒ	Ü# FÓ+ˆ�r0   r%   rz   r{   r|   rU   c                 óZ   —  | j                   |||fi |¤Ž\  }}| j                  ||«      }|S r”   )rO   rª   )rO   r%   rz   r{   r|   Úattn_outputÚ_Úattention_outputs           r1   r[   zGitAttention.forwardÕ   sD   € ð #˜Ÿ™ØØØñ
ð ñ	
‰ˆ�Qð  Ÿ;™; {°MÓBÐØÐr0   r”   r•   r–   r`   s   @r1   r¥   r¥   Ï   sg   ø„ õ,ð 48Ø(,ñ	 à—|‘|ð ð ×)Ñ)¨DÑ0ð ð  ™ð	 ð
 Ð+Ñ,ð ð 
ˆu�|‰|Ñ	÷ r0   r¥   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚGitIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r”   )r=   r>   r   rt   rA   Úintermediate_sizer›   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnrN   s     €r1   r>   zGitIntermediate.__init__è   s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r0   r%   rU   c                 óJ   — | j                  |«      }| j                  |«      }|S r”   )r›   r¶   ©rO   r%   s     r1   r[   zGitIntermediate.forwardð   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr0   r¡   r`   s   @r1   r°   r°   ç   s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r0   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 )Ú	GitOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y rš   )r=   r>   r   rt   r²   rA   r›   rF   rG   rH   rI   rJ   rN   s     €r1   r>   zGitOutput.__init__ø   s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r0   r%   rœ   rU   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r”   rž   rŸ   s      r1   r[   zGitOutput.forwardþ   r    r0   r¡   r`   s   @r1   rº   rº   ÷   r¢   r0   rº   c                   óœ   ‡ — e Zd Zd
ˆ fd„	Z	 	 ddej
                  dej                  dz  dedz  dee	   de
ej
                     f
d„Zd	„ Zˆ xZS )ÚGitLayerNc                 ó¶   •— t         ‰| �  «        |j                  | _        d| _        t	        ||¬«      | _        t        |«      | _        t        |«      | _	        y )Nr   r§   )
r=   r>   Úchunk_size_feed_forwardÚseq_len_dimr¥   Ú	attentionr°   Úintermediaterº   rª   ry   s      €r1   r>   zGitLayer.__init__  sK   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ% f¸	ÔBˆŒÜ+¨FÓ3ˆÔÜ Ó'ˆ�r0   r%   rz   r{   r|   rU   c                 óŠ   —  | j                   ||fd|i|¤Ž}t        | j                  | j                  | j                  |«      }|S )Nr{   )rÂ   r   Úfeed_forward_chunkrÀ   rÁ   )rO   r%   rz   r{   r|   r®   Úlayer_outputs          r1   r[   zGitLayer.forward  s_   € ð *˜4Ÿ>™>ØØñ
ð ,ð
ð ñ	
Ðô 1Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð Ðr0   c                 óL   — | j                  |«      }| j                  ||«      }|S r”   )rÃ   rª   )rO   r®   Úintermediate_outputrÆ   s       r1   rÅ   zGitLayer.feed_forward_chunk!  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐr0   r”   r•   )r'   r(   r)   r>   r+   r^   r,   r	   r   r   r.   r[   rÅ   r_   r`   s   @r1   r¾   r¾     sl   ø„ õ(ð 48Ø(,ñ	à—|‘|ðð ×)Ñ)¨DÑ0ðð  ™ð	ð
 Ð+Ñ,ðð 
ˆu�|‰|Ñ	óö&r0   r¾   c                   ó†   ‡ — e Zd Zˆ fd„Z	 	 	 d
dej
                  dej                  dz  dedz  dedz  de	e
   defd	„Zˆ xZS )Ú
GitEncoderc           	      óÒ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        d| _	        y c c}w ©NF)
r=   r>   rP   r   Ú
ModuleListÚrangeÚnum_hidden_layersr¾   ÚlayerÚgradient_checkpointing)rO   rP   ÚirQ   s      €r1   r>   zGitEncoder.__init__(  sP   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÄÀv×G_ÑG_ÓA`Ö#a¸A¤H¨V°QÕ$7Ò#aÓbˆŒ
Ø&+ˆÕ#ùò $bs   ½A$Nr%   rz   r{   Ú	use_cacher|   rU   c                 óT   — | j                   D ]  } ||||fi |¤Ž}Œ t        ||¬«      S )N©r$   r{   )rÐ   r   )rO   r%   rz   r{   rÓ   r|   Úlayer_modules          r1   r[   zGitEncoder.forward.  sI   € ð !ŸJ™Jò 	ˆLÙ(ØØØñð ñ	‰Mð	ô 'Ø+Ø+ô
ð 	
r0   )NNN)r'   r(   r)   r>   r+   r^   r,   r	   Úboolr   r   r   r[   r_   r`   s   @r1   rÊ   rÊ   '  so   ø„ ô,ð 48Ø(,Ø!%ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð  ™ð	
ð
 ˜$‘;ð
ð Ð+Ñ,ð
ð 
!÷
r0   rÊ   c                   ó^   ‡ — e Zd ZU eed<   dZdZdZ ej                  «       ˆ fd„«       Z
ˆ xZS )ÚGitPreTrainedModelrP   Úgit)ÚimageÚtextTc                 ó4  •— t         ‰| �  |«       t        |t        «      �rt	        j
                  |j                  d| j                  j                  ¬«       t	        j
                  |j                  j                  | j                  j                  ¬«       t	        j
                  |j                  j                  | j                  j                  ¬«       t	        j                  |j                  t        j                  |j                  j                   d   «      j#                  d«      «       t        |t$        «      rZt	        j                  |j                  t        j                  |j                  j                   d   «      j#                  d«      «       yy)zInitialize the weightsç        )ÚmeanÚstd)rà   r:   r9   N)r=   Ú_init_weightsr³   ÚGitVisionEmbeddingsÚinitÚnormal_Úclass_embeddingrP   Úinitializer_rangeÚpatch_embeddingÚweightÚposition_embeddingÚcopy_r8   r+   rL   r�   rM   r3   )rO   ÚmodulerQ   s     €r1   rá   z GitPreTrainedModel._init_weightsK  s
  ø€ ô 	‰Ñ˜fÔ%Ü�fÔ1Õ2Ü�L‰L˜×/Ñ/°c¸t¿{¹{×?\Ñ?\Õ]Ü�L‰L˜×/Ñ/×6Ñ6¸D¿K¹K×<YÑ<YÕZÜ�L‰L˜×2Ñ2×9Ñ9¸t¿{¹{×?\Ñ?\Õ]Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�fœmÔ,Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð -r0   )r'   r(   r)   r   r-   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingr+   Úno_gradrá   r_   r`   s   @r1   rÙ   rÙ   D  s7   ø… àÓØÐØ(ÐØ&*Ð#à€U‡]�]ƒ_ó	ió ô	ir0   rÙ   c                   óž   ‡ — e 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j                  fd	„Z
ˆ xZS )râ   rP   c                 óÚ  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        t        j                  t        j                  | j                  «      «      | _        t        j                  |j                  | j                  | j                  | j                  d¬«      | _        | j
                  | j                  z  dz  | _        | j                  dz   | _        t        j"                  | j                   | j                  «      | _        | j'                  dt        j(                  | j                   «      j+                  d«      d¬«       y )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasrf   r   r8   r9   r;   )r=   r>   rP   rA   Ú	embed_dimrp   rq   r   Ú	Parameterr+   Úrandnrå   ÚConv2dÚnum_channelsrç   Únum_patchesÚnum_positionsr?   ré   rK   rL   rM   rN   s     €r1   r>   zGitVisionEmbeddings.__init__Z  s	  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿ|™|¬E¯K©K¸¿¹Ó,GÓHˆÔä!Ÿy™yØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øô 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔÜ"$§,¡,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔØ×Ñ˜^¬U¯\©\¸$×:LÑ:LÓ-M×-TÑ-TÐU\Ó-]ÐjoÐÕpr0   rZ   ÚheightÚwidthrU   c                 óÒ  — |j                   d   dz
  }| j                  j                  j                  d«      }|j                   d   dz
  }t        j
                  j                  «       s%||k(  r ||k(  r| j                  | j                  «      S |dd…dd…f   }|dd…dd…f   }|j                   d   }	|| j                  z  }
|| j                  z  }t        |dz  «      }|j                  d|||	«      }|j                  dddd«      }t        j                  j                  ||
|fdd	¬
«      }|j                  dddd«      j                  dd|	«      }t	        j                   ||fd¬«      S )a   
        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   Nr:   g      à?r   rf   ÚbicubicF)rW   ÚmodeÚalign_cornersr   )r�   ré   rè   Ú	unsqueezer+   ÚjitÚ
is_tracingr8   rq   r   ÚreshaperŠ   r   rˆ   Úinterpolater‚   Úcat)rO   rZ   rþ   rÿ   rü   ré   rý   Úclass_pos_embedÚpatch_pos_embedr€   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r1   Úinterpolate_pos_encodingz,GitVisionEmbeddings.interpolate_pos_encodingp  sv  € ð !×&Ñ& qÑ)¨AÑ-ˆØ!×4Ñ4×;Ñ;×EÑEÀaÓHÐØ*×0Ñ0°Ñ3°aÑ7ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à,ªQ°°°¨UÑ3ˆØ,ªQ°±¨UÑ3ˆà×Ñ˜rÑ"ˆà˜tŸ™Ñ.ˆ
Ø˜TŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰y˜/¨?Ð;ÀÔCÐCr0   Úpixel_valuesc                 ó`  — |j                   \  }}}}|sJ|| j                  k7  s|| j                  k7  r,t        d|› d|› d| j                  › d| j                  › d�	«      ‚| j                  j                  j
                  }| j                  |j                  |¬«      «      }|j                  d«      j                  dd«      }| j                  j                  |dd«      }	t        j                  |	|gd¬	«      }
|r|
| j                  |
||«      z   }
|
S |
| j                  | j                  «      z   }
|
S )
NzInput image size (Ú*z) doesn't match model (ú).©Údtyperf   r   r:   r   )r�   rp   ri   rç   rè   r  ÚtoÚflattenrƒ   rå   rM   r+   r	  r  ré   r8   )rO   r  r  Ú
batch_sizer­   rþ   rÿ   Útarget_dtypeÚpatch_embedsÚclass_embedsrZ   s              r1   r[   zGitVisionEmbeddings.forward™  s6  € Ø'3×'9Ñ'9Ñ$ˆ
�A�v˜uÙ'¨V°t·±Ò-FÈ%ÐSW×SbÑSbÒJbÜØ$ V H¨A¨e¨WÐ4KÈDÏOÉOÐK\Ð\]Ð^b×^mÑ^mÐ]nÐnpÐqóð ð ×+Ñ+×2Ñ2×8Ñ8ˆØ×+Ñ+¨L¯O©OÀ,¨OÓ,OÓPˆØ#×+Ñ+¨AÓ.×8Ñ8¸¸AÓ>ˆà×+Ñ+×2Ñ2°:¸qÀ"ÓEˆÜ—Y‘Y ¨lÐ;ÀÔCˆ
Ù#Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJð Ðð $ d×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJØÐr0   )F)r'   r(   r)   r   r>   r+   r^   r]   r  r,   r[   r_   r`   s   @r1   râ   râ   Y  sd   ø„ ðq˜õ qð,'D°5·<±<ð 'DÈð 'DÐUXð 'DÐ]b×]iÑ]ió 'DñR E×$5Ñ$5ð ÐZ_×ZfÑZf÷ r0   râ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚGitVisionMLPc                 ó  •— t         ‰| �  «        || _        t        |j                     | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y r”   )r=   r>   rP   r   r´   Úactivation_fnr   rt   rA   r²   Úfc1Úfc2rN   s     €r1   r>   zGitVisionMLP.__init__­  sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r0   r%   rU   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r”   )r   r  r!  r¸   s     r1   r[   zGitVisionMLP.forward´  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr0   r¡   r`   s   @r1   r  r  ¬  s$   ø„ ôKð U§\¡\ð °e·l±l÷ r0   r  rë   ru   rv   rw   rz   ÚscalingrJ   c                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr:   r~   )r€   r  )ÚpÚtrainingr   rf   )r+   r…   rƒ   r   rˆ   r‰   Úfloat32r  r  rJ   r&  r‹   )
rë   ru   rv   rw   rz   r#  rJ   r|   Úattn_weightsr¬   s
             r1   Úeager_attention_forwardr)  ¼  sº   € ô —<‘<  s§}¡}°R¸Ó'<Ó=ÀÑG€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r0   c                   óª   ‡ — e Zd ZdZˆ fd„Z	 d	dej                  dej                  dz  dee   de	ej                  ej                  dz  f   fd„Z
ˆ xZS )
ÚGitVisionAttentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _        d| _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  «      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: r  g      à¿F)r=   r>   rP   rA   r÷   rg   Ú	num_headsÚhead_dimri   ÚscaleÚattention_dropoutrJ   Ú	is_causalr   rt   Úk_projÚv_projÚq_projÚout_projrN   s     €r1   r>   zGitVisionAttention.__init__Ö  s  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜ—i‘i §¡°·±Ó?ˆŒÜŸ	™	 $§.¡.°$·.±.ÓAˆ�r0   Nr%   rz   r|   rU   c                 ó°  — |j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  | j                  | j                  sdn| j                  dœ|¤Ž\  }
} |
j                   g |¢d‘­Ž j#                  «       }
| j%                  |
«      }
|
|fS )z#Input shape: Batch x Time x ChannelNr:   r   rf   rÞ   )r1  r#  rJ   )r�   r.  r4  r‚   rƒ   r2  r3  r   Úget_interfacerP   r©   r)  r1  r/  r&  rJ   r  r‹   r5  )rO   r%   rz   r|   rX   rŒ   ÚqueriesÚkeysÚvaluesÚattention_interfacer¬   r(  s               r1   r[   zGitVisionAttention.forwardê  sM  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆØ—+‘+˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆØ�{‰{˜=Ó)×.Ñ.¨|Ó<×FÑFÀqÈ!ÓLˆØ—‘˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð —n‘nØ—J‘JØ#Ÿ}š}‘C°$·,±,ñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆØ˜LÐ(Ð(r0   r”   )r'   r(   r)   r*   r>   r+   r^   r   r   r.   r[   r_   r`   s   @r1   r+  r+  Ó  sf   ø„ ÙGôBð. /3ñ)à—|‘|ð)ð Ÿ™ tÑ+ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)r0   r+  c                   ó~   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dee   dej                  fd„Z
ˆ xZS )ÚGitVisionEncoderLayerrP   c                 óD  •— t         ‰| �  «        |j                  | _        t	        |«      | _        t        j                  | j                  |j                  ¬«      | _	        t        |«      | _        t        j                  | j                  |j                  ¬«      | _        y rš   )r=   r>   rA   r÷   r+  Ú	self_attnr   rF   rG   Úlayer_norm1r  ÚmlpÚlayer_norm2rN   s     €r1   r>   zGitVisionEncoderLayer.__init__  sm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ+¨FÓ3ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÔÜ Ó'ˆŒÜŸ<™<¨¯©¸F×<QÑ<QÔRˆÕr0   r%   rz   r|   rU   c                 ó¸   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r%   rz   r/   )r@  r?  rB  rA  )rO   r%   rz   r|   Úresidualr­   s         r1   r[   zGitVisionEncoderLayer.forward  s‚   € ð !ˆà×(Ñ(¨Ó7ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qð
 ! =Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ  =Ñ0ˆàÐr0   )r'   r(   r)   r   r>   r+   r^   r   r   r,   r[   r_   r`   s   @r1   r=  r=    sP   ø„ ðS˜õ Sðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	÷r0   r=  c                   ó`   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dz  dee	   de
fd„Zˆ xZS )
ÚGitVisionEncoderz·
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`GitVisionEncoderLayer`].

    Args:
        config: GitVisionConfig
    rP   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w rÌ   )
r=   r>   rP   r   rÍ   rÎ   rÏ   r=  ÚlayersrÑ   )rO   rP   r­   rQ   s      €r1   r>   zGitVisionEncoder.__init__8  sP   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌEÐRX×RjÑRjÓLkÖ$lÀqÔ%:¸6Õ%BÒ$lÓmˆŒØ&+ˆÕ#ùò %ms   ½A#Nrz   r|   rU   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N©r$   )rH  r   )rO   rS   rz   r|   r%   Úencoder_layers         r1   r[   zGitVisionEncoder.forward>  sH   € ð &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð ñ‰Mð	ô Ø+ô
ð 	
r0   r”   )r'   r(   r)   r*   r   r>   r+   r^   r   r   r   r[   r_   r`   s   @r1   rF  rF  /  sK   ø„ ñð,˜õ ,ð /3ñ
ð Ÿ™ tÑ+ð
ð Ð+Ñ,ð	
ð
 
÷
r0   rF  c            
       ór   ‡ — e Zd Zdefˆ fd„Ze	 	 d	dej                  dz  dedz  de	e
   defd„«       Zˆ xZS )
ÚGitVisionTransformerrP   c                 ó   •— t         ‰| �  «        || _        |j                  }t	        |«      | _        t        j                  ||j                  ¬«      | _	        t        |«      | _        t        j                  ||j                  ¬«      | _        y rš   )r=   r>   rP   rA   râ   rZ   r   rF   rG   Úpre_layrnormrF  ÚencoderÚpost_layernorm)rO   rP   r÷   rQ   s      €r1   r>   zGitVisionTransformer.__init__R  sj   ø€ Ü‰ÑÔØˆŒØ×&Ñ&ˆ	ä-¨fÓ5ˆŒÜŸL™L¨¸×8MÑ8MÔNˆÔÜ'¨Ó/ˆŒÜ Ÿl™l¨9¸&×:OÑ:OÔPˆÕr0   Nr  r  r|   rU   c                 óÞ   — |€t        d«      ‚| j                  ||¬«      }| j                  |«      } | j                  dd|i|¤Ž}|j                  }| j                  |«      }t        |¬«      S )Nz You have to specify pixel_values©r  rS   rJ  r/   )ri   rZ   rO  rP  r$   rQ  r   )rO   r  r  r|   r%   Úencoder_outputsr$   s          r1   r[   zGitVisionTransformer.forward\  s‰   € ð ÐÜÐ?Ó@Ð@àŸ™¨ÐOg˜ÓhˆØ×)Ñ)¨-Ó8ˆà&˜$Ÿ,™,ñ 
Ø'ð
àñ
ˆð
 ,×=Ñ=Ðà ×/Ñ/Ð0AÓBÐäØ/ô
ð 	
r0   rÌ   )r'   r(   r)   r   r>   r   r+   r,   r×   r   r   r   r[   r_   r`   s   @r1   rM  rM  Q  sh   ø„ ðQ˜õ Qð ð 26Ø05ñ
à×'Ñ'¨$Ñ.ð
ð #'¨¡+ð
ð Ð+Ñ,ð	
ð
 
ò
ó ô
r0   rM  zY
    The vision model from CLIP, used in GIT, without any head or projection on top.
    c                   óÒ   ‡ — e Zd ZU eed<   dZdZeedœZ	defˆ fd„Z
dej                  fd„Ze ed¬	«      e	 	 ddej$                  d
z  dedee   deez  fd„«       «       «       Zˆ xZS )ÚGitVisionModelrP   r  )rÛ   ©r%   r&   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r”   )r=   r>   rM  Úvision_modelÚ	post_initrN   s     €r1   r>   zGitVisionModel.__init__…  s'   ø€ Ü‰Ñ˜Ô Ü0°Ó8ˆÔà�‰Õr0   rU   c                 óB   — | j                   j                  j                  S r”   )rY  rZ   rç   ©rO   s    r1   Úget_input_embeddingsz#GitVisionModel.get_input_embeddings‹  s   € Ø× Ñ ×+Ñ+×;Ñ;Ð;r0   F)Útie_last_hidden_statesNr  r|   c                 ó,   —  | j                   d||dœ|¤ŽS )aÌ  
        Examples:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, GitVisionModel

        >>> processor = AutoProcessor.from_pretrained("microsoft/git-base")
        >>> model = GitVisionModel.from_pretrained("microsoft/git-base")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        ```)r  r  r/   )rY  )rO   r  r  r|   s       r1   r[   zGitVisionModel.forwardŽ  s.   € ð< !ˆt× Ñ ð 
Ø%Ø%=ñ
ð ñ
ð 	
r0   rÌ   )r'   r(   r)   r   r-   Úmain_input_namerí   r=  r+  Ú_can_record_outputsr>   r   ÚModuler]  r   r   r   r+   r,   r×   r   r   r.   r   r[   r_   r`   s   @r1   rV  rV  w  s­   ø… ð ÓØ$€OØ!Ðà.Ø(ñÐð
˜õ ð< b§i¡ió <ð  Ù¨EÔ2Øð 26Ø).ñ
à×'Ñ'¨$Ñ.ð
ð #'ð
ð Ð+Ñ,ð	
ð
 
�Ñ	 ò
ó ó 3ó  ô
r0   rV  c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚGitProjectionrP   c                 ó0  •— t         ‰| �  «        || _        t        j                  t        j
                  |j                  j                  |j                  «      t        j                  |j                  |j                  j                  ¬«      «      | _
        y rš   )r=   r>   rP   r   Ú
Sequentialrt   ro   rA   rF   rG   Úvisual_projectionrN   s     €r1   r>   zGitProjection.__init__´  sf   ø€ Ü‰ÑÔØˆŒÜ!#§¡Ü�I‰I�f×*Ñ*×6Ñ6¸×8JÑ8JÓKÜ�L‰L˜×+Ñ+°×1EÑ1E×1TÑ1TÔUó"
ˆÕr0   rZ   rU   c                 ó$   — | j                  |«      S r”   )rg  )rO   rZ   s     r1   r[   zGitProjection.forward¼  s   € Ø×%Ñ% jÓ1Ð1r0   )	r'   r(   r)   r   r>   r+   r^   r[   r_   r`   s   @r1   rd  rd  ³  s*   ø„ ð
˜yõ 
ð2 %§,¡,ð 2°5·<±<÷ 2r0   rd  zy
    The bare GIT Model transformer consisting of a CLIP image encoder and text decoder outputting raw hidden-states
    c                   óH  ‡ — e Zd ZeedœZˆ fd„Zd„ Z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j                  dz  dedz  dedz  dedee   deej                     ez  fd„«       «       «       Zˆ xZS )ÚGitModelrW  c                 ól  •‡— t         ‰| �  ‰«       ‰| _        t        ‰«      | _        t        ‰j                  «      | _        t        ‰«      | _	        t        ‰«      | _        ‰j                  �6t        j                  ˆfd„t        ‰j                  «      D «       «      | _        | j#                  «        y )Nc              3   óš   •K  — | ]B  }t        j                  t        j                  d d ‰j                  j
                  «      «      –— ŒD y­w)r   N)r   rø   r+   Úzerosro   rA   )Ú.0r­   rP   s     €r1   ú	<genexpr>z$GitModel.__init__.<locals>.<genexpr>Ö  s;   øè ø€ ò ;àô —‘œUŸ[™[¨¨A¨v×/CÑ/C×/OÑ/OÓP×Qñ;ùs   ƒAA)r=   r>   rP   r3   rZ   rV  ro   Úimage_encoderrÊ   rP  rd  rg  rs   r   ÚParameterListrÎ   Úimg_temporal_embeddingrZ  rN   s    `€r1   r>   zGitModel.__init__Ë  s’   ù€ Ü‰Ñ˜Ô ØˆŒä'¨Ó/ˆŒÜ+¨F×,@Ñ,@ÓAˆÔÜ! &Ó)ˆŒä!.¨vÓ!6ˆÔà×*Ñ*Ð6Ü*,×*:Ñ*:ó ;ä˜v×>Ñ>Ó?ô;ó +ˆDÔ'ð 	�‰Õr0   c                 ó.   — | j                   j                  S r”   ©rZ   rC   r\  s    r1   r]  zGitModel.get_input_embeddingsÞ  s   € Ø�‰×.Ñ.Ð.r0   c                 ó&   — || j                   _        y r”   rt  )rO   rw   s     r1   Úset_input_embeddingszGitModel.set_input_embeddingsá  s   € Ø*/ˆ�‰Õ'r0   NrR   rz   r8   r  rS   r{   rÓ   r  r|   rU   c	           	      ó"  — |du |duz  rt        d«      ‚|r|€t        | j                  ¬«      }d}
|�0t        |t        «      s|j                  «       n|j                  «       }
|€|�|j                  d   dk(  r||
z   }| j                  ||||
¬«      }t        j                  |t        j                  ¬«      d   }|��¡|j                  d	k(  r| j                  ||¬
«      j                  }nž|j                  dk(  r„g }t        |j                  d   «      D ]O  }| j                  |dd…|dd…dd…f   |¬
«      j                  }|| j                  |   z  }|j!                  |«       ŒQ t        j"                  |d¬«      }nt        d«      ‚| j%                  |«      }|j'                  |j)                  d«      |j)                  d«      z  dd«      }t        j"                  ||fd¬«      }t        j*                  ||j,                  ¬«      d   }t        j"                  ||gd¬«      }|�´t        j"                  t        j*                  ||j,                  ¬«      |gd¬«      }n{|�y|j                  d   dk(  rgt        j.                  |j                  d   |
|j                  d   z
  dz   f|j,                  |j0                  ¬«      }t        j"                  ||gd¬«      }t        j2                  g |j)                  «       dd ¢d|j0                  ¬«      }|�t        j4                  |dk(  dd«      }| j                  j7                  «       |||||dœ}t9        di |¤Ž}|} | j:                  |f|||dœ|	¤Ž}t=        |j                  |j>                  ¬«      S )a   
        Examples:

        ```python
        >>> from transformers import AutoProcessor, AutoModel
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> processor = AutoProcessor.from_pretrained("microsoft/git-base")
        >>> model = AutoModel.from_pretrained("microsoft/git-base")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> text = "this is an image of two cats"

        >>> inputs = processor(images=image, text=text, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        ```Nz:You must specify exactly one of input_ids or inputs_embeds)rP   r   r   )rR   r8   rS   rT   r  ).r   é   rS  é   r   z#pixel_values must be of rank 4 or 5r:   )r  Údevice)rz  )rP   rS   rz   r{   r8   Úblock_sequence_ids)rz   r{   rÓ   rÕ   r/   ) ri   r
   rP   r³   r	   Úget_seq_lengthr�   rZ   r+   Ú
zeros_liker]   Úndimrp  r$   rÎ   rr  Úappendr	  rg  ÚrepeatrW   Ú	ones_liker  Úonesrz  ÚfullÚwhereÚget_text_configr   rP  r   r{   )rO   rR   rz   r8   r  rS   r{   rÓ   r  r|   rT   Úembedding_outputÚtoken_type_idsÚvisual_featuresÚ	frame_idxÚvisual_features_frameÚprojected_visual_featuresÚimage_token_type_idsÚextended_attention_maskÚ	group_idsÚmask_kwargsÚcausal_maskr%   rT  s                           r1   r[   zGitModel.forwardä  sã  € ðL ˜Ð -°tÐ";Ò<ÜÐYÓZÐZá˜Ð0Ü*°$·+±+Ô>ˆOð "#ÐØÐ&ô " /´5Ô9ð  ×.Ñ.Ô0à$×3Ñ3Ó5ð #ð Ð OÐ$?ÀIÇOÁOÐTUÑDVÐZ[ÒD[Ø'Ð*@Ñ@ˆLàŸ?™?ØØ%Ø'Ø#9ð	 +ó 
Ðô ×)Ñ)Ð*:Ä%Ç)Á)ÔLÈVÑTˆàÑ#Ø× Ñ  AÒ%à"&×"4Ñ"4Ø Ð;Sð #5ó #ç#Ñ#ñ  ð ×"Ñ" aÒ'à"$�Ü!& |×'9Ñ'9¸!Ñ'<Ó!=ò B�IØ,0×,>Ñ,>Ø$¢Q¨	²1²aÐ%7Ñ8ÐSkð -?ó -ç'Ñ'ð *ð *¨T×-HÑ-HÈÑ-SÑSÐ)Ø#×*Ñ*Ð+@ÕAðBô #(§)¡)¨OÀÔ"C‘ô !Ð!FÓGÐGà(,×(>Ñ(>¸Ó(OÐ%ð )B×(HÑ(HØ ×%Ñ% aÓ(Ð,E×,JÑ,JÈ1Ó,MÑMÈqÐRSó)Ð%ô
  %Ÿy™yÐ*CÐEUÐ)VÐ\]Ô^ÐÜ#(§?¡?Ð3LÐTb×ThÑThÔ#iÐjpÑ#qÐ Ü"ŸY™YÐ(<¸nÐ'MÐSUÔVˆNØÐ)Ü!&§¡Ü—_‘_Ð%9À×AUÑAUÔVÐXfÐgÐmoô"‘ð Ð(¨Y¯_©_¸QÑ-?À1Ò-Dô ',§j¡jØ×%Ñ% aÑ(Ð*@À>×CWÑCWÐXYÑCZÑ*ZÐ]^Ñ*^Ð_Ø$×*Ñ*Ø%×,Ñ,ô'Ð#ô
 #ŸY™YÐ(?ÀÐ'PÐVXÔYˆNô —J‘JÐ>Ð!1×!6Ñ!6Ó!8¸¸"Ð!=Ð>ÀÐK[×KbÑKbÔcˆ	ØÐ%äŸ™ N°aÑ$7¸¸BÓ?ˆIð —k‘k×1Ñ1Ó3Ø-Ø,Ø.Ø(Ø"+ñ
ˆô )Ñ7¨;Ñ7ˆà(ˆà3?°4·<±<Øð4
à&Ø+Øñ	4
ð
 ñ4
ˆô 'Ø-×?Ñ?Ø+×;Ñ;ô
ð 	
r0   )NNNNNNNF)r'   r(   r)   r¾   rb   ra  r>   r]  rv  r   r   r   r+   r^   r	   r×   r   r   r.   r   r[   r_   r`   s   @r1   rj  rj  À  s  ø„ ð "Ø&ñÐô
ò&/ò0ð  ØØð *.Ø.2Ø,0Ø,0Ø-1Ø(,Ø!%Ø).ñN
à—<‘< $Ñ&ðN
ð Ÿ™ tÑ+ðN
ð —l‘l TÑ)ð	N
ð
 —l‘l TÑ)ðN
ð —|‘| dÑ*ðN
ð  ™ðN
ð ˜$‘;ðN
ð #'ðN
ð Ð+Ñ,ðN
ð 
ˆu�|‰|Ñ	Ð9Ñ	9òN
ó ó ó  ôN
r0   rj  z`
    GIT Model with a `language modeling` head on top for autoregressive language modeling.
    c                   óœ  ‡ — e Zd ZddiZˆ fd„Zd„ Z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
j                  dz  de
j                  dz  dedz  dedz  dedee
j                  z  dee   dee
j                     ez  fd„«       «       «       Z	 	 	 	 	 dˆ fd„	Zˆ xZS )ÚGitForCausalLMzoutput.weightz%git.embeddings.word_embeddings.weightc                 óÂ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  «      | _        | j                  «        y r”   )
r=   r>   rj  rÚ   r   rt   rA   r@   rª   rZ  rN   s     €r1   r>   zGitForCausalLM.__init__€  sF   ø€ Ü‰Ñ˜Ô ä˜FÓ#ˆŒÜ—i‘i × 2Ñ 2°F×4EÑ4EÓFˆŒð 	�‰Õr0   c                 ó   — | j                   S r”   ©rª   r\  s    r1   Úget_output_embeddingsz$GitForCausalLM.get_output_embeddings‰  s   € Ø�{‰{Ðr0   c                 ó   — || _         y r”   r•  )rO   Únew_embeddingss     r1   Úset_output_embeddingsz$GitForCausalLM.set_output_embeddingsŒ  s	   € Ø$ˆ�r0   NrR   rz   r8   r  rS   Úlabelsr{   rÓ   r  Úlogits_to_keepr|   rU   c                 óÖ  — |�d} | j                   |f|||||||	dœ|¤Ž}|j                  }t        |
t        «      rt	        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�Ó| j                   j                  j                  d   j                  j                  j                  }|dd…|d…dd…f   j                  «       }|dd…dd…f   j                  «       } | j                  |j                  d| j                  j                  «      |j                  d«      fd| j                  j                  i|¤Ž}t!        |||j"                  |j$                  |j&                  ¬«      S )	a0  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *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]`

        Examples:

        Image captioning example:

        ```python
        >>> from transformers import AutoProcessor, AutoModelForCausalLM
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image

        >>> processor = AutoProcessor.from_pretrained("microsoft/git-base-coco")
        >>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-coco")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> pixel_values = processor(images=image, return_tensors="pt").pixel_values

        >>> generated_ids = model.generate(pixel_values=pixel_values, max_length=50)
        >>> generated_caption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
        >>> print(generated_caption)
        two cats sleeping on a pink blanket next to remotes.
        ```

        Visual question answering (VQA) example:

        ```python
        >>> from transformers import AutoProcessor, AutoModelForCausalLM
        >>> from huggingface_hub import hf_hub_download
        >>> from PIL import Image

        >>> processor = AutoProcessor.from_pretrained("microsoft/git-base-textvqa")
        >>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-textvqa")

        >>> file_path = hf_hub_download(repo_id="nielsr/textvqa-sample", filename="bus.png", repo_type="dataset")
        >>> image = Image.open(file_path).convert("RGB")

        >>> pixel_values = processor(images=image, return_tensors="pt").pixel_values

        >>> question = "what does the front of the bus say at the top?"

        >>> input_ids = processor(text=question, add_special_tokens=False).input_ids
        >>> input_ids = [processor.tokenizer.cls_token_id] + input_ids
        >>> input_ids = torch.tensor(input_ids).unsqueeze(0)

        >>> generated_ids = model.generate(pixel_values=pixel_values, input_ids=input_ids, max_length=50)
        >>> print(processor.batch_decode(generated_ids, skip_special_tokens=True))
        ['what does the front of the bus say at the top? special']
        ```

        Video captioning example:

        ```python
        >>> import av
        >>> import numpy as np
        >>> from PIL import Image
        >>> from huggingface_hub import hf_hub_download
        >>> from transformers import AutoProcessor, AutoModelForCausalLM

        >>> processor = AutoProcessor.from_pretrained("microsoft/git-base-vatex")
        >>> model = AutoModelForCausalLM.from_pretrained("microsoft/git-base-vatex")

        >>> # set seed for reproducibility
        >>> np.random.seed(45)


        >>> def read_video_pyav(container, indices):
        ...     '''
        ...     Decode the video with PyAV decoder.
        ...     Args:
        ...         container (`av.container.input.InputContainer`): PyAV container.
        ...         indices (`list[int]`): List of frame indices to decode.
        ...     Returns:
        ...         result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
        ...     '''
        ...     frames = []
        ...     container.seek(0)
        ...     start_index = indices[0]
        ...     end_index = indices[-1]
        ...     for i, frame in enumerate(container.decode(video=0)):
        ...         if i > end_index:
        ...             break
        ...         if i >= start_index and i in indices:
        ...             frames.append(frame)
        ...     return np.stack([x.to_ndarray(format="rgb24") for x in frames])


        >>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
        ...     '''
        ...     Sample a given number of frame indices from the video.
        ...     Args:
        ...         clip_len (`int`): Total number of frames to sample.
        ...         frame_sample_rate (`int`): Sample every n-th frame.
        ...         seg_len (`int`): Maximum allowed index of sample's last frame.
        ...     Returns:
        ...         indices (`list[int]`): List of sampled frame indices
        ...     '''
        ...     converted_len = int(clip_len * frame_sample_rate)
        ...     end_idx = np.random.randint(converted_len, seg_len)
        ...     start_idx = end_idx - converted_len
        ...     indices = np.linspace(start_idx, end_idx, num=clip_len)
        ...     indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
        ...     return indices


        >>> # load video
        >>> file_path = hf_hub_download(
        ...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
        ... )
        >>> container = av.open(file_path)

        >>> # sample frames
        >>> num_frames = model.config.num_image_with_embedding
        >>> indices = sample_frame_indices(
        ...     clip_len=num_frames, frame_sample_rate=4, seg_len=container.streams.video[0].frames
        ... )
        >>> frames = read_video_pyav(container, indices)

        >>> pixel_values = processor(images=list(frames), return_tensors="pt").pixel_values

        >>> generated_ids = model.generate(pixel_values=pixel_values, max_length=50)

        >>> print("Generated caption:", processor.batch_decode(generated_ids, skip_special_tokens=True))
        Generated caption: ['a woman is sitting at a table and she is talking about the food she is holding.']
        ```
        NF)rz   r8   r  rS   r{   rÓ   r  r   r:   r   r@   )ÚlossÚlogitsr{   r%   r&   )rÚ   r$   r³   r]   Úslicerª   rP  rÐ   rÂ   rO   rr   r‹   Úloss_functionr‚   rP   r@   r   r{   r%   r&   )rO   rR   rz   r8   r  rS   rš  r{   rÓ   r  r›  r|   Úoutputsr%   Úslice_indicesrž  r�  Únum_image_tokensÚshifted_logitss                      r1   r[   zGitForCausalLM.forward�  s~  € ðl ÐØˆIà+3¨4¯8©8Øð
,
à)Ø%Ø%Ø'Ø+ØØ%=ñ
,
ð ñ
,
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜]ª1¨mºQÐ+>Ñ?Ó@ˆàˆØÐà#Ÿx™x×/Ñ/×5Ñ5°aÑ8×BÑB×GÑG×ZÑZÐØ#¢AÐ'7¸Ð':ºAÐ$=Ñ>×IÑIÓKˆNØšA˜q™r˜E‘]×-Ñ-Ó/ˆFØ%�4×%Ñ%Ø×#Ñ# B¨¯©×(>Ñ(>Ó?Ø—‘˜B“ñð  Ÿ;™;×1Ñ1ðð ñ	ˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r0   c                 óD   •— t        ‰	| �  |f||||dœ|¤Ž}|s|s||d<   |S )N)r{   rz   rÓ   Úis_first_iterationr  )r=   Úprepare_inputs_for_generation)
rO   rR   r{   r  rz   rÓ   r¦  r|   Úmodel_inputsrQ   s
            €r1   r§  z,GitForCausalLM.prepare_inputs_for_generationN  sI   ø€ ô ‘wÑ<Øð
à+Ø)ØØ1ñ
ð ñ
ˆñ ¡YØ+7ˆL˜Ñ(àÐr0   )
NNNNNNNNFr   )NNNNF)r'   r(   r)   Ú_tied_weights_keysr>   r–  r™  r   r   r   r+   r^   r	   r×   r]   r   r   r.   r   r[   r§  r_   r`   s   @r1   r’  r’  x  s`  ø„ ð *Ð+RÐSÐôòò%ð  ØØð *.Ø.2Ø,0Ø,0Ø-1Ø&*Ø(,Ø!%Ø).Ø-.ñz
à—<‘< $Ñ&ðz
ð Ÿ™ tÑ+ðz
ð —l‘l TÑ)ð	z
ð
 —l‘l TÑ)ðz
ð —|‘| dÑ*ðz
ð —‘˜tÑ#ðz
ð  ™ðz
ð ˜$‘;ðz
ð #'ðz
ð ˜eŸl™lÑ*ðz
ð Ð+Ñ,ðz
ð 
ˆu�|‰|Ñ	Ð5Ñ	5òz
ó ó ó  ðz
ð~ ØØØØ ÷ñ r0   r’  )r’  rj  rÙ   rV  )rÞ   )Lr*   r†   Úcollections.abcr   Údataclassesr   r+   r   Ú r   rã   Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_gitr   r   Ú
get_loggerr'   rk   r"   rb  r3   rb   r˜   r¨   r¥   r°   rº   r¾   rÊ   rÙ   râ   r  r^   Úfloatr)  r+  r=  rF  rM  rV  rd  rj  r’  Ú__all__r/   r0   r1   ú<module>r½     s§  ðñ ã Ý $Ý !ã Ý å &Ý !ß .Ý )Ý /Ý 9÷ó ÷ GÝ &Ý 6÷õ õ 8Ý 5ß 9ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô	<˜;ó 	<ó óð	<ô*�B—I‘Iô *ôZB.�r—y‘yô B.ôL�B—I‘Iô ð ÐðÐ ô
 �2—9‘9ô  ô0�b—i‘iô ô �—	‘	ô ôÐ)ô ôD
�—‘ô 
ð: ôi˜ó ió ðiô(P˜"Ÿ)™)ô Pôf�2—9‘9ô ð. ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.6)˜Ÿ™ô 6)ôtÐ6ô ôD
�r—y‘yô 
ôD#
˜2Ÿ9™9ô #
ñL ðôô
4
Ð'ó 4
óð
4
ôn
2�B—I‘Iô 
2ñ ðôô
p
Ð!ó p
óð
p
ñf ðôô
iÐ'¨ó ióð
iòX Q�r0   