ó
    ‡Ž¡j­  ã                   óð  • S r SSKrSSKJr  SSKJr  SSKrSSKJr  SSKJ	r
  SSKJr  SS	KJrJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJrJr  SSKJrJr  SSKJr  SSK J!r!  SSK"J#r#J$r$J%r%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-J.r.  \&R^                  " \05      r1\%" SS9\ " S S\#5      5       5       r2 " S S\Rf                  5      r4 " S S\Rf                  5      r5 " S S\Rf                  5      r6S \50r7 " S! S"\Rf                  5      r8 " S# S$\Rf                  5      r9 " S% S&\Rf                  5      r: " S' S(\5      r; " S) S*\Rf                  5      r<\% " S+ S,\5      5       r= " S- S.\Rf                  5      r> " S/ S0\Rf                  5      r? SMS1\Rf                  S2\R€                  S3\R€                  S4\R€                  S5\R€                  S-  S6\AS7\A4S8 jjrB " S9 S:\Rf                  5      rC " S; S<\5      rD " S= S>\Rf                  5      rE " S? S@\Rf                  5      rF\%" SAS9 " SB SC\=5      5       rG " SD SE\Rf                  5      rH\%" SFS9 " SG SH\=5      5       rI\%" SIS9 " SJ SK\=\5      5       rJ/ SLQrKg)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                   óÎ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                  S4   S-  \S'   Sr\\R                  S4   S-  \S'   S	rg)
ÚGitVisionModelOutputé6   zì
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__Ú__firstlineno__Ú__doc__r$   ÚtorchÚFloatTensorÚ__annotations__r%   r&   Útupler'   Ú__static_attributes__r(   ó    Ú²C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\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Ö;r3   r"   c                   ó¸   ^ • \ rS rSrSrU 4S jr    SS\R                  S-  S\R                  S-  S\R                  S-  S\	S	\R                  4
S
 jjrSrU =r$ )ÚGitEmbeddingséI   z;Construct the embeddings from word and position embeddings.c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR
                  UR                  S9U l        [        R                  " UR                  UR
                  5      U l	        [        R                  " UR
                  UR                  S9U l
        [        R                  " UR                  5      U l        [        R                  " [         R"                  " UR                  5      R%                  S5      SS9U l        g )N)Úpadding_idx©Úeps©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ÚBufferr.   ÚarangeÚexpandÚposition_ids©ÚselfÚconfigÚ	__class__s     €r4   rA   Ú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 &×"<Ñ"<Ó=ˆŒäŸIšI¤e§l¢l°6×3QÑ3QÓ&R×&YÑ&YÐZaÓ&bÐotÑuˆÕr3   NÚ	input_idsrQ   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 ó.  • Ub  UR                  5       nOUR                  5       S S nUS   nUc  U R                  S S 2XFU-   24   nUc  U R                  U5      nOUnU R                  U5      nXx-  nU R	                  U5      nU R                  U5      nU$ )Nr=   r   )ÚsizerQ   rF   rH   rI   rM   )	rS   rW   rQ   rX   rY   Úinput_shapeÚ
seq_lengthÚ
embeddingsrH   s	            r4   ÚforwardÚGitEmbeddings.forwardV   s¯   € ð Ñ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÑØ×,Ñ,ªQÐ0FÐVlÑIlÐ0lÐ-lÑmˆLàÑ Ø×-Ñ-¨iÓ8‰Jà&ˆJà"×6Ñ6°|ÓDÐØÑ)ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr3   )rI   rM   rH   rQ   rF   )NNNr   )r)   r*   r+   r,   r-   rA   r.   Ú
LongTensorr/   ÚintÚTensorr`   r2   Ú__classcell__©rU   s   @r4   r6   r6   I   sy   ø† ÙEõvð .2Ø04Ø26Ø&'ñà×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 !$ðð 
�‰÷ó r3   r6   c                   ó¦   ^ • \ rS rSrSU 4S jjr  SS\R                  S\R                  S-  S\S-  S\	\
   S\\R                     4
S	 jjrS
rU =r$ )ÚGitSelfAttentionét   Nc                 ó&  >• [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eX l        Uc-  [        R                  SU R                  R                   S35        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l        [        UR                  R                  UR                  R                   -  S-  S	-   5      U l        UR$                  b  U =R"                  UR$                  -  sl        [&        R(                  " UR                  U R                  5      U l        [&        R(                  " UR                  U R                  5      U l        [&        R(                  " UR                  U R                  5      U l        [&        R0                  " UR2                  5      U l        g )
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@   rA   rD   Únum_attention_headsÚhasattrÚ
ValueErrorÚ	layer_idxÚloggerÚwarning_oncerU   r)   rc   Úattention_head_sizeÚall_head_sizeÚvision_configÚ
image_sizeÚ
patch_sizeÚimage_patch_tokensÚnum_image_with_embeddingr   ÚLinearÚqueryÚkeyÚvaluerK   Úattention_probs_dropout_probrM   ©rS   rT   rq   rU   s      €r4   rA   ÚGitSelfAttention.__init__u   s¯  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÓ?ÌÐPVÐXh×HiÑ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ˆ�r3   r&   Úattention_maskÚpast_key_valuesÚkwargsrZ   c                 ó€  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n	Ub  UR                  X‰U R                  5      u  p‰[        R                  " XxR	                  SS5      5      n
U
[        R                  " U R                  5      -  n
Ub  X¢-   n
[        R                  R                  U
SS9nU R!                  U5      n[        R                  " X¹5      nUR#                  SSSS5      R%                  5       nUR'                  5       S S U R(                  4-   nUR                  U5      nXË4$ )Nr=   r   rm   éþÿÿÿ©Údimr   r   )Úshapert   r|   ÚviewÚ	transposer}   r~   Úupdaterq   r.   ÚmatmulÚmathÚsqrtr   Ú
functionalÚsoftmaxrM   ÚpermuteÚ
contiguousr\   ru   )rS   r&   r‚   rƒ   r„   r]   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚattention_probsÚcontext_layerÚnew_context_layer_shapes                 r4   r`   Ú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ô !Ÿ<š<¨×5HÑ5HÈÈRÓ5PÓQÐà+¬d¯iªi¸×8PÑ8PÓ.QÑQÐØÑ%à/Ñ@Ðô Ÿ-™-×/Ñ/Ð0@ÀbÐ/ÐIˆð Ÿ,™, Ó7ˆäŸš _ÓBˆà%×-Ñ-¨a°°A°qÓ9×DÑDÓFˆØ"/×"4Ñ"4Ó"6°s¸Ð";¸t×?QÑ?QÐ>SÑ"SÐØ%×*Ñ*Ð+BÓCˆàÐ-Ð-r3   )	ru   rt   rM   ry   r}   rq   rn   r|   r~   ©N©NN)r)   r*   r+   r,   rA   r.   rd   r/   r	   r   r   r1   r`   r2   re   rf   s   @r4   rh   rh   t   sm   ø† ÷Gð> 48Ø(,ñ	%.à—|‘|ð%.ð ×)Ñ)¨DÑ0ð%.ð  ™ð	%.ð
 Ð+Ñ,ð%.ð 
ˆu�|‰|Ñ	÷%.ó %.r3   rh   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚGitSelfOutputéº   c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  5      U l
        g ©Nr:   )r@   rA   r   r{   rD   ÚdenserI   rJ   rK   rL   rM   rR   s     €r4   rA   ÚGitSelfOutput.__init__»   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r3   r&   Úinput_tensorrZ   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ r�   ©r¤   rM   rI   ©rS   r&   r¦   s      r4   r`   ÚGitSelfOutput.forwardÁ   ó5   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }Ñ'CÓDˆØÐr3   ©rI   r¤   rM   ©
r)   r*   r+   r,   rA   r.   rd   r`   r2   re   rf   s   @r4   r    r    º   ó6   ø† õ>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò r3   r    Úeagerc                   ó    ^ • \ rS rSrSU 4S jjr  SS\R                  S\R                  S-  S\S-  S\	\
   S\R                  4
S	 jjrS
rU =r$ )ÚGitAttentionéÍ   Nc                 óz   >• [         TU ]  5         [        UR                     " XS9U l        [        U5      U l        g )N©rq   )r@   rA   ÚGIT_SELF_ATTENTION_CLASSESÚ_attn_implementationrS   r    Úoutputr€   s      €r4   rA   ÚGitAttention.__init__Î   s1   ø€ Ü‰ÑÔÜ.¨v×/JÑ/JÒKÈFÑhˆŒ	Ü# FÓ+ˆ�r3   r&   r‚   rƒ   r„   rZ   c                 óV   • U R                   " UUU40 UD6u  pVU R                  XQ5      nU$ r�   )rS   r·   )rS   r&   r‚   rƒ   r„   Úattn_outputÚ_Úattention_outputs           r4   r`   ÚGitAttention.forwardÓ   s>   € ð ŸšØØØñ
ð ñ	
‰ˆð  Ÿ;™; {ÓBÐØÐr3   )r·   rS   r�   rž   )r)   r*   r+   r,   rA   r.   rd   r/   r	   r   r   r`   r2   re   rf   s   @r4   r±   r±   Í   sg   ø† ÷,ð 48Ø(,ñ	 à—|‘|ð ð ×)Ñ)¨DÑ0ð ð  ™ð	 ð
 Ð+Ñ,ð ð 
�‰÷ ó  r3   r±   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚGitIntermediateéå   c                 ó  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g r�   )r@   rA   r   r{   rD   Úintermediate_sizer¤   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnrR   s     €r4   rA   ÚGitIntermediate.__init__æ   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r3   r&   rZ   c                 óJ   • U R                  U5      nU R                  U5      nU$ r�   ©r¤   rÆ   ©rS   r&   s     r4   r`   ÚGitIntermediate.forwardî   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr3   rÉ   r­   rf   s   @r4   r¿   r¿   å   s(   ø† õ9ð U§\¡\ð °e·l±l÷ ò r3   r¿   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )Ú	GitOutputéõ   c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        g r£   )r@   rA   r   r{   rÂ   rD   r¤   rI   rJ   rK   rL   rM   rR   s     €r4   rA   ÚGitOutput.__init__ö   s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�r3   r&   r¦   rZ   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ r�   r¨   r©   s      r4   r`   ÚGitOutput.forwardü   r«   r3   r¬   r­   rf   s   @r4   rÍ   rÍ   õ   r®   r3   rÍ   c                   ó¦   ^ • \ rS rSrSU 4S jjr  SS\R                  S\R                  S-  S\S-  S\	\
   S\R                  4
S	 jjrS
 rSrU =r$ )ÚGitLayeri  Nc                 ó®   >• [         TU ]  5         UR                  U l        SU l        [	        XS9U l        [        U5      U l        [        U5      U l	        g )Nr   r´   )
r@   rA   Úchunk_size_feed_forwardÚseq_len_dimr±   Ú	attentionr¿   ÚintermediaterÍ   r·   r€   s      €r4   rA   ÚGitLayer.__init__  sI   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ% fÑBˆŒÜ+¨FÓ3ˆÔÜ Ó'ˆ�r3   r&   r‚   rƒ   r„   rZ   c                 óŠ   • U R                   " UU4SU0UD6n[        U R                  U R                  U R                  U5      nU$ )Nrƒ   )rØ   r   Úfeed_forward_chunkrÖ   r×   )rS   r&   r‚   rƒ   r„   r¼   Úlayer_outputs          r4   r`   ÚGitLayer.forward  s]   € ð  Ÿ>š>ØØñ
ð ,ð
ð ñ	
Ðô 1Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð Ðr3   c                 óJ   • U R                  U5      nU R                  X!5      nU$ r�   )rÙ   r·   )rS   r¼   Úintermediate_outputrÝ   s       r4   rÜ   ÚGitLayer.feed_forward_chunk  s)   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6ÓIˆØÐr3   )rØ   rÖ   rÙ   r·   r×   r�   rž   )r)   r*   r+   r,   rA   r.   rd   r/   r	   r   r   r`   rÜ   r2   re   rf   s   @r4   rÔ   rÔ     sl   ø† ÷(ð 48Ø(,ñ	à—|‘|ðð ×)Ñ)¨DÑ0ðð  ™ð	ð
 Ð+Ñ,ðð 
�‰õ÷&ð r3   rÔ   c                   ó”   ^ • \ rS rSrU 4S jr   SS\R                  S\R                  S-  S\S-  S\	S-  S\
\   S	\4S
 jjrSrU =r$ )Ú
GitEncoderi%  c           	      óÖ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        X5      PM     sn5      U l        SU l	        g s  snf ©NF)
r@   rA   rT   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÔ   ÚlayerÚgradient_checkpointing)rS   rT   ÚirU   s      €r4   rA   ÚGitEncoder.__init__&  sR   ø€ Ü‰ÑÔØŒÜ—]’]ÄÀv×G_ÑG_ÔA`Ó#aÒA`¸A¤H¨VÖ$7ÑA`Ñ#aÓbˆŒ
Ø&+ˆÕ#ùò $bó   ½A&Nr&   r‚   rƒ   Ú	use_cacher„   rZ   c                 óR   • U R                    H  nU" UUU40 UD6nM     [        UUS9$ )N©r%   rƒ   )ré   r   )rS   r&   r‚   rƒ   rî   r„   Úlayer_modules          r4   r`   ÚGitEncoder.forward,  sD   € ð !ŸJœJˆLÙ(ØØØñð ñ	ŠMñ 'ô 'Ø+Ø+ñ
ð 	
r3   )rT   rê   ré   )NNN)r)   r*   r+   r,   rA   r.   rd   r/   r	   Úboolr   r   r   r`   r2   re   rf   s   @r4   rã   rã   %  st   ø† õ,ð 48Ø(,Ø!%ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð  ™ð	
ð
 ˜$‘;ð
ð Ð+Ñ,ð
ð 
!÷
ó 
r3   rã   c                   óh   ^ • \ rS rSr% \\S'   SrSrSr\	R                  " 5       U 4S j5       rSrU =r$ )ÚGitPreTrainedModeliB  rT   Úgit)ÚimageÚtextTc                 óD  >• [         TU ]  U5        [        U[        5      (       Ga	  [        R
                  " UR                  SU R                  R                  S9  [        R
                  " UR                  R                  U R                  R                  S9  [        R
                  " UR                  R                  U R                  R                  S9  [        R                  " UR                  [        R                  " UR                  R                   S   5      R#                  S5      5        [        U[$        5      (       a\  [        R                  " UR                  [        R                  " UR                  R                   S   5      R#                  S5      5        gg)zInitialize the weightsç        )ÚmeanÚstd)rü   r=   r<   N)r@   Ú_init_weightsrÃ   ÚGitVisionEmbeddingsÚinitÚnormal_Úclass_embeddingrT   Úinitializer_rangeÚpatch_embeddingÚweightÚposition_embeddingÚcopy_rQ   r.   rO   r‰   rP   r6   )rS   ÚmodulerU   s     €r4   rý   Ú GitPreTrainedModel._init_weightsI  s  ø€ ô 	‰Ñ˜fÔ%Ü�fÔ1×2Ò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ð -r3   r(   )r)   r*   r+   r,   r   r0   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingr.   Úno_gradrý   r2   re   rf   s   @r4   rõ   rõ   B  s5   ø‡ àÓØÐØ(ÐØ&*Ð#à
‡]‚]ƒ_ô	ió ö	ir3   rõ   c                   ó°   ^ • \ rS rSrS\4U 4S jjrS\R                  S\S\S\R                  4S jr	SS	\R                  S\R                  4S
 jjrSrU =r$ )rþ   iW  rT   c                 óè  >• [         TU ]  5         Xl        UR                  U l        UR
                  U l        UR                  U l        [        R                  " [        R                  " U R                  5      5      U l        [        R                  " UR                  U R                  U R                  U R                  SS9U l        U R
                  U R                  -  S-  U l        U R                  S-   U l        [        R"                  " U R                   U R                  5      U l        [        R&                  " [        R(                  " U R                   5      R+                  S5      SS9U l        g )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbiasrm   r   r<   r>   )r@   rA   rT   rD   Ú	embed_dimrw   rx   r   Ú	Parameterr.   Úrandnr  ÚConv2dÚnum_channelsr  Únum_patchesÚnum_positionsrB   r  rN   rO   rP   rQ   rR   s     €r4   rA   ÚGitVisionEmbeddings.__init__X  s  ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ ×+Ñ+ˆŒä!Ÿ|š|¬E¯KªK¸¿¹Ó,GÓHˆÔä!ŸyšyØ×+Ñ+ØŸ™ØŸ™Ø—?‘?Øñ 
ˆÔð !ŸO™O¨t¯©Ñ>À1ÑDˆÔØ!×-Ñ-°Ñ1ˆÔÜ"$§,¢,¨t×/AÑ/AÀ4Ç>Á>Ó"RˆÔÜŸIšI¤e§l¢l°4×3EÑ3EÓ&F×&MÑ&MÈgÓ&VÐchÑiˆÕr3   r_   ÚheightÚwidthrZ   c                 óÈ  • UR                   S   S-
  nU R                  R                  R                  S5      nUR                   S   S-
  n[        R
                  R                  5       (       d%  XF:X  a   X#:X  a  U R                  U R                  5      $ USS2SS24   nUSS2SS24   nUR                   S   n	X R                  -  n
X0R                  -  n[        US-  5      nUR                  SXÌU	5      nUR                  SSSS5      n[        R                  R                  UX«4SS	S
9nUR                  SSSS5      R                  SSU	5      n[        R                   " Xx4SS9$ )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   rm   ÚbicubicF)r\   ÚmodeÚalign_cornersr‡   )r‰   r  r  Ú	unsqueezer.   ÚjitÚ
is_tracingrQ   rx   r   Úreshaper’   r   r�   ÚinterpolaterŠ   Úcat)rS   r_   r  r  r  r  r  Úclass_pos_embedÚpatch_pos_embedrˆ   Ú
new_heightÚ	new_widthÚsqrt_num_positionss                r4   Úinterpolate_pos_encodingÚ,GitVisionEmbeddings.interpolate_pos_encodingn  si  € ð !×&Ñ& qÑ)¨AÑ-ˆØ!×4Ñ4×;Ñ;×EÑEÀaÓHÐØ*×0Ñ0°Ñ3°aÑ7ˆô �y‰y×#Ñ#×%Ñ%¨+Ó*FÈ6Ë?Ø×*Ñ*¨4×+<Ñ+<Ó=Ð=à,ªQ°°°¨UÑ3ˆØ,ªQ°±¨UÑ3ˆà×Ñ˜rÑ"ˆàŸ™Ñ.ˆ
ØŸ_™_Ñ,ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐ]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØÐ(ØØð	 4ð 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�yŠy˜/Ð;ÀÑCÐCr3   Úpixel_valuesc                 ó^  • UR                   u  p4pVU(       dJ  XPR                  :w  d  X`R                  :w  a,  [        SU SU SU R                   SU R                   S3	5      eU R                  R                  R
                  nU R                  UR                  US95      nUR                  S5      R                  SS5      nU R                  R                  USS5      n	[        R                  " X˜/SS	9n
U(       a  X R                  X¥U5      -   n
U
$ X R                  U R                  5      -   n
U
$ )
NzInput image size (Ú*z) doesn't match model (ú).©Údtyperm   r   r=   r‡   )r‰   rw   rp   r  r  r4  ÚtoÚflattenr‹   r  rP   r.   r'  r-  r  rQ   )rS   r/  r-  Ú
batch_sizer»   r  r  Útarget_dtypeÚpatch_embedsÚclass_embedsr_   s              r4   r`   ÚGitVisionEmbeddings.forward—  s$  € Ø'3×'9Ñ'9Ñ$ˆ
�vÞ'¨V·±Ó-FÈ%×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 Ð;ÀÑCˆ
Þ#Ø#×&CÑ&CÀJÐX]Ó&^Ñ^ˆJð Ðð $×&=Ñ&=¸d×>OÑ>OÓ&PÑPˆJØÐr3   )
r  rT   r  rw   r  r  r  rx   r  rQ   )F)r)   r*   r+   r,   r   rA   r.   rd   rc   r-  r/   r`   r2   re   rf   s   @r4   rþ   rþ   W  si   ø† ðj˜÷ jð,'D°5·<±<ð 'DÈð 'DÐUXð 'DÐ]b×]iÑ]iô 'DñR E×$5Ñ$5ð ÐZ_×ZfÑZf÷ ó r3   rþ   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚGitVisionMLPiª  c                 ó  >• [         TU ]  5         Xl        [        UR                     U l        [        R                  " UR                  UR                  5      U l
        [        R                  " UR                  UR                  5      U l        g r�   )r@   rA   rT   r   rÄ   Úactivation_fnr   r{   rD   rÂ   Úfc1Úfc2rR   s     €r4   rA   ÚGitVisionMLP.__init__«  sb   ø€ Ü‰ÑÔØŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9’9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9’9˜V×5Ñ5°v×7IÑ7IÓJˆ�r3   r&   rZ   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r�   )r@  r?  rA  rÊ   s     r4   r`   ÚGitVisionMLP.forward²  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr3   )r?  rT   r@  rA  r­   rf   s   @r4   r=  r=  ª  s)   ø† õKð U§\¡\ð °e·l±l÷ ò r3   r=  r  r|   r}   r~   r‚   ÚscalingrM   c                 ó°  • [         R                  " XR                  SS5      5      U-  nUb  X„-   n[        R                  R                  US[         R                  S9R                  UR                  5      n[        R                  R                  X†U R                  S9n[         R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )Nr=   r†   )rˆ   r4  )ÚpÚtrainingr   rm   )r.   r�   r‹   r   r�   r‘   Úfloat32r5  r4  rM   rH  r“   )
r  r|   r}   r~   r‚   rE  rM   r„   Úattn_weightsrº   s
             r4   Úeager_attention_forwardrK  º  s°   € ô —<’< §}¡}°R¸Ó'<Ó=ÀÑG€LØÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÐS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r3   c                   ó¸   ^ • \ rS rSrSrU 4S jr SS\R                  S\R                  S-  S\\	   S\
\R                  \R                  S-  4   4S	 jjrS
rU =r$ )ÚGitVisionAttentioniÑ  z=Multi-headed attention from 'Attention Is All You Need' paperc                 ó   >• [         TU ]  5         Xl        UR                  U l        UR
                  U l        U R                  U R                  -  U l        U R                  U R                  -  U R                  :w  a&  [        SU R                   SU R                   S35      eU R                  S-  U l	        UR                  U l        SU l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        [        R                  " U R                  U R                  5      U l        g )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: r2  g      à¿F)r@   rA   rT   rD   r  rn   Ú	num_headsÚhead_dimrp   ÚscaleÚattention_dropoutrM   Ú	is_causalr   r{   Úk_projÚv_projÚq_projÚout_projrR   s     €r4   rA   ÚGitVisionAttention.__init__Ô  s  ø€ Ü‰ÑÔØŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ó;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒä—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜ—i’i §¡°·±Ó?ˆŒÜŸ	š	 $§.¡.°$·.±.ÓAˆ�r3   Nr&   r‚   r„   rZ   c                 ó¸  • UR                   SS n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      nU R                  U5      R                  U5      R	                  SS5      n[        R                  " U R                  R                  [        5      n	U	" U UUUU4U R                  U R                  U R                  (       d  SOU R                  S.UD6u  p«U
R                   " / UQSP76 R#                  5       n
U R%                  U
5      n
X«4$ )z#Input shape: Batch x Time x ChannelNr=   r   rm   rú   )rS  rE  rM   )r‰   rP  rV  rŠ   r‹   rT  rU  r   Úget_interfacerT   r¶   rK  rS  rQ  rH  rM   r%  r“   rW  )rS   r&   r‚   r„   r]   r”   ÚqueriesÚkeysÚvaluesÚattention_interfacerº   rJ  s               r4   r`   ÚGitVisionAttention.forwardè  sG  € ð $×)Ñ)¨#¨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°$·,±,ñ
%
ð ñ
%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆØÐ(Ð(r3   )rT   rM   r  rP  rS  rT  rO  rW  rV  rQ  rU  r�   )r)   r*   r+   r,   r-   rA   r.   rd   r   r   r1   r`   r2   re   rf   s   @r4   rM  rM  Ñ  sk   ø† ÙGõBð. /3ñ)à—|‘|ð)ð Ÿ™ tÑ+ð)ð Ð+Ñ,ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)ó )r3   rM  c                   óŒ   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  S\\	   S\R                  4S jrS	rU =r$ )
ÚGitVisionEncoderLayeri  rT   c                 ó<  >• [         TU ]  5         UR                  U l        [	        U5      U l        [        R                  " U R                  UR                  S9U l	        [        U5      U l        [        R                  " U R                  UR                  S9U l        g r£   )r@   rA   rD   r  rM  Ú	self_attnr   rI   rJ   Úlayer_norm1r=  ÚmlpÚlayer_norm2rR   s     €r4   rA   ÚGitVisionEncoderLayer.__init__  sm   ø€ Ü‰ÑÔØ×+Ñ+ˆŒÜ+¨FÓ3ˆŒÜŸ<š<¨¯©¸F×<QÑ<QÑRˆÔÜ Ó'ˆŒÜŸ<š<¨¯©¸F×<QÑ<QÑRˆÕr3   r&   r‚   r„   rZ   c                 ó²   • UnU R                  U5      nU R                  " SUUS.UD6u  pXA-   nUnU R                  U5      nU R                  U5      nXA-   nU$ )N)r&   r‚   r(   )rd  rc  rf  re  )rS   r&   r‚   r„   Úresidualr»   s         r4   r`   ÚGitVisionEncoderLayer.forward  sz   € ð !ˆà×(Ñ(¨Ó7ˆØŸ>š>ð 
Ø'Ø)ñ
ð ñ
Ñˆð
 !Ñ0ˆà ˆØ×(Ñ(¨Ó7ˆØŸ™ Ó/ˆØ Ñ0ˆàÐr3   )r  rd  rf  re  rc  )r)   r*   r+   r,   r   rA   r.   rd   r   r   r/   r`   r2   re   rf   s   @r4   ra  ra    sU   ø† ðS˜÷ Sðà—|‘|ðð Ÿ™ðð Ð+Ñ,ð	ð
 
×	Ñ	÷ò r3   ra  c                   óp   ^ • \ rS rSrSrS\4U 4S jjr SS\R                  S-  S\	\
   S\4S	 jjrS
rU =r$ )ÚGitVisionEncoderi-  z£
Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
[`GitVisionEncoderLayer`].

Args:
    config: GitVisionConfig
rT   c                 óÖ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l        SU l	        g s  snf rå   )
r@   rA   rT   r   ræ   rç   rè   ra  Úlayersrê   )rS   rT   r»   rU   s      €r4   rA   ÚGitVisionEncoder.__init__6  sT   ø€ Ü‰ÑÔØŒÜ—m’mÌEÐRX×RjÑRjÔLkÓ$lÒLkÀqÔ%:¸6Ö%BÑLkÑ$lÓmˆŒØ&+ˆÕ#ùò %mrí   Nr‚   r„   rZ   c                 óR   • UnU R                    H  nU" UU40 UD6nM     [        US9$ )N©r%   )rn  r   )rS   rX   r‚   r„   r&   Úencoder_layers         r4   r`   ÚGitVisionEncoder.forward<  sC   € ð &ˆØ!Ÿ[œ[ˆMÙ)ØØñð ñŠMñ )ô Ø+ñ
ð 	
r3   )rT   rê   rn  r�   )r)   r*   r+   r,   r-   r   rA   r.   rd   r   r   r   r`   r2   re   rf   s   @r4   rl  rl  -  sP   ø† ñð,˜÷ ,ð /3ñ
ð Ÿ™ tÑ+ð
ð Ð+Ñ,ð	
ð
 
÷
ó 
r3   rl  c            
       ó‚   ^ • \ rS rSrS\4U 4S jjr\  SS\R                  S-  S\	S-  S\
\   S\4S	 jj5       rS
rU =r$ )ÚGitVisionTransformeriO  rT   c                 ó  >• [         TU ]  5         Xl        UR                  n[	        U5      U l        [        R                  " X!R                  S9U l	        [        U5      U l        [        R                  " X!R                  S9U l        g r£   )r@   rA   rT   rD   rþ   r_   r   rI   rJ   Úpre_layrnormrl  ÚencoderÚpost_layernorm)rS   rT   r  rU   s      €r4   rA   ÚGitVisionTransformer.__init__P  sd   ø€ Ü‰ÑÔØŒØ×&Ñ&ˆ	ä-¨fÓ5ˆŒÜŸLšL¨×8MÑ8MÑNˆÔÜ'¨Ó/ˆŒÜ Ÿlšl¨9×:OÑ:OÑPˆÕr3   Nr/  r-  r„   rZ   c                 óÒ   • Uc  [        S5      eU R                  XS9nU R                  U5      nU R                  " SSU0UD6nUR                  nU R                  U5      n[        US9$ )Nz You have to specify pixel_values©r-  rX   rq  r(   )rp   r_   rw  rx  r%   ry  r   )rS   r/  r-  r„   r&   Úencoder_outputsr%   s          r4   r`   ÚGitVisionTransformer.forwardZ  s„   € ð ÑÜÐ?Ó@Ð@àŸ™¨˜ÐhˆØ×)Ñ)¨-Ó8ˆàŸ,š,ñ 
Ø'ð
àñ
ˆð
 ,×=Ñ=Ðà ×/Ñ/Ð0AÓBÐäØ/ñ
ð 	
r3   )rT   r_   rx  ry  rw  rå   )r)   r*   r+   r,   r   rA   r   r.   r/   ró   r   r   r   r`   r2   re   rf   s   @r4   ru  ru  O  sh   ø† ðQ˜÷ Qð ð 26Ø05ñ
à×'Ñ'¨$Ñ.ð
ð #'¨¡+ð
ð Ð+Ñ,ð	
ð
 
ô
ó ö
r3   ru  zY
    The vision model from CLIP, used in GIT, without any head or projection on top.
    c                   óÞ   ^ • \ rS rSr% \\S'   SrSr\\	S.r
S\4U 4S jjrS\R                  4S jr\\" S	S
9\  SS\R&                  S-  S\S\\   S\\-  4S jj5       5       5       rSrU =r$ )ÚGitVisionModeliu  rT   r/  )r÷   ©r&   r'   c                 ód   >• [         TU ]  U5        [        U5      U l        U R	                  5         g r�   )r@   rA   ru  Úvision_modelÚ	post_initrR   s     €r4   rA   ÚGitVisionModel.__init__ƒ  s'   ø€ Ü‰Ñ˜Ô Ü0°Ó8ˆÔà�‰Õr3   rZ   c                 óB   • U R                   R                  R                  $ r�   )rƒ  r_   r  ©rS   s    r4   Úget_input_embeddingsÚ#GitVisionModel.get_input_embeddings‰  s   € Ø× Ñ ×+Ñ+×;Ñ;Ð;r3   F)Útie_last_hidden_statesNr-  r„   c                 ó,   • U R                   " SUUS.UD6$ )aT  
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(   ©rƒ  )rS   r/  r-  r„   s       r4   r`   ÚGitVisionModel.forwardŒ  s,   € ð< × Ò ð 
Ø%Ø%=ñ
ð ñ
ð 	
r3   rŒ  rå   )r)   r*   r+   r,   r   r0   Úmain_input_namer
  ra  rM  Ú_can_record_outputsrA   r   ÚModulerˆ  r   r   r   r.   r/   ró   r   r   r1   r   r`   r2   re   rf   s   @r4   r€  r€  u  s­   ø‡ ð ÓØ$€OØ!Ðà.Ø(ñÐð
˜÷ ð< b§i¡iô <ð  Ù¨EÑ2Øð 26Ø).ñ
à×'Ñ'¨$Ñ.ð
ð #'ð
ð Ð+Ñ,ð	
ð
 
�Ñ	 ô
ó ó 3ó  ö
r3   r€  c                   ój   ^ • \ rS rSrS\4U 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )ÚGitProjectioni±  rT   c                 ó.  >• [         TU ]  5         Xl        [        R                  " [        R
                  " UR                  R                  UR                  5      [        R                  " UR                  UR                  R                  S95      U l
        g r£   )r@   rA   rT   r   Ú
Sequentialr{   rv   rD   rI   rJ   Úvisual_projectionrR   s     €r4   rA   ÚGitProjection.__init__²  sd   ø€ Ü‰ÑÔØŒÜ!#§¢Ü�IŠI�f×*Ñ*×6Ñ6¸×8JÑ8JÓKÜ�LŠL˜×+Ñ+°×1EÑ1E×1TÑ1TÑUó"
ˆÕr3   r_   rZ   c                 ó$   • U R                  U5      $ r�   )r•  )rS   r_   s     r4   r`   ÚGitProjection.forwardº  s   € Ø×%Ñ% jÓ1Ð1r3   )rT   r•  )r)   r*   r+   r,   r   rA   r.   rd   r`   r2   re   rf   s   @r4   r’  r’  ±  s/   ø† ð
˜y÷ 
ð2 %§,¡,ð 2°5·<±<÷ 2ò 2r3   r’  zy
    The bare GIT Model transformer consisting of a CLIP image encoder and text decoder outputting raw hidden-states
    c                   óV  ^ • \ rS rSr\\S.rU 4S jrS rS r	\
\\        SS\R                  S-  S\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\S-  S\S-  S\S\\   S\\R                     \-  4S jj5       5       5       rSrU =r$ )ÚGitModeli¾  r�  c                 ór  >^• [         TU ]  T5        TU l        [        T5      U l        [        TR                  5      U l        [        T5      U l	        [        T5      U l        TR                  b8  [        R                  " U4S j[        TR                  5       5       5      U l        U R#                  5         g )Nc              3   ó¤   >#   • U  HE  n[         R                  " [        R                  " S S TR                  R
                  5      5      v •  MG     g7f)r   N)r   r  r.   Úzerosrv   rD   )Ú.0r»   rT   s     €r4   Ú	<genexpr>Ú$GitModel.__init__.<locals>.<genexpr>Ô  s=   øé € ð ;â?�Aô —’œUŸ[š[¨¨A¨v×/CÑ/C×/OÑ/OÓP×QÐQÚ?ùs   ƒAA)r@   rA   rT   r6   r_   r€  rv   Úimage_encoderrã   rx  r’  r•  rz   r   ÚParameterListrç   Úimg_temporal_embeddingr„  rR   s    `€r4   rA   ÚGitModel.__init__É  s’   ù€ Ü‰Ñ˜Ô ØˆŒä'¨Ó/ˆŒÜ+¨F×,@Ñ,@ÓAˆÔÜ! &Ó)ˆŒä!.¨vÓ!6ˆÔà×*Ñ*Ñ6Ü*,×*:Ò*:ô ;ä˜v×>Ñ>Ô?ó;ó +ˆDÔ'ð 	�‰Õr3   c                 ó.   • U R                   R                  $ r�   ©r_   rF   r‡  s    r4   rˆ  ÚGitModel.get_input_embeddingsÜ  s   € Ø�‰×.Ñ.Ð.r3   c                 ó$   • XR                   l        g r�   r¦  )rS   r~   s     r4   Úset_input_embeddingsÚGitModel.set_input_embeddingsß  s   € Ø*/�‰Õ'r3   NrW   r‚   rQ   r/  rX   rƒ   rî   r-  r„   rZ   c	           	      ó   • USL USL-  (       a  [        S5      eU(       a  Uc  [        U R                  S9nSn
Ub5  [        U[        5      (       d  UR                  5       OUR                  5       n
Ub  UR                  S   OUR                  S   nUc  Ub
  US:X  a  X:-   nU R                  UUUU
S9n[        R                  " U[        R                  S9S   nUGb“  UR                  S	:X  a  U R                  XHS
9R                  nOœUR                  S:X  a�  / n[        UR                  S   5       HM  nU R                  USS2USS2SS24   US
9R                  nUU R                  U   -  nUR!                  U5        MO     [        R"                  " USS9nO[        S5      eU R%                  U5      nUR'                  UR)                  S5      UR)                  S5      -  SS5      n[        R"                  " UU4SS9n[        R*                  " UUR,                  S9S   n[        R"                  " UU/SS9nUb4  [        R"                  " [        R*                  " UUR,                  S9U/SS9nOkUbh  US:X  ab  [        R.                  " UR                  S   X¢R                  S   -
  S-   4UR,                  UR0                  S9n[        R"                  " UU/SS9n[        R2                  " / UR)                  5       SS QSUR0                  S9nUb  [        R4                  " US:H  SS5      nU R                  R7                  5       UUUUUS.n[9        S0 UD6nUnU R:                  " U4UUUS.U	D6n[=        UR                  UR>                  S9$ )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)rT   r   r   )rW   rQ   rX   rY   r3  ).r   é   r|  é   r‡   z#pixel_values must be of rank 4 or 5r=   )r4  Údevice)r®  )rT   rX   r‚   rƒ   rQ   Úblock_sequence_ids)r‚   rƒ   rî   rð   r(   ) rp   r
   rT   rÃ   r	   Úget_seq_lengthr‰   r_   r.   Ú
zeros_likerc   Úndimr¡  r%   rç   r£  Úappendr'  r•  Úrepeatr\   Ú	ones_liker4  Úonesr®  ÚfullÚwhereÚget_text_configr   rx  r   rƒ   )rS   rW   r‚   rQ   r/  rX   rƒ   rî   r-  r„   rY   Úseq_lenÚ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&   r}  s                            r4   r`   ÚGitModel.forwardâ  sá  € ðL ˜Ð -°tÐ";×<ÜÐYÓZÐZæ˜Ñ0Ü*°$·+±+Ñ>ˆOð "#ÐØÑ&ô " /´5×9Ñ9ð  ×.Ñ.Ô0à$×3Ñ3Ó5ð #ð )2Ñ(=�)—/‘/ !Ò$À=×CVÑCVÐWXÑCYˆØÑ OÑ$?ÀGÈqÃLØ'Ñ@ˆLàŸ?™?ØØ%Ø'Ø#9ð	 +ð 
Ðô ×)Ò)Ð*:Ä%Ç)Á)ÑLÈVÑTˆàÒ#Ø× Ñ  AÓ%à"&×"4Ñ"4Ø ð #5ð #ç#Ñ#ñ  ð ×"Ñ" aÓ'à"$�Ü!& |×'9Ñ'9¸!Ñ'<Ö!=�IØ,0×,>Ñ,>Ø$¢Q¨	²1²aÐ%7Ñ8ÐSkð -?ð -ç'Ñ'ð *ð *¨T×-HÑ-HÈÑ-SÑSÐ)Ø#×*Ñ*Ð+@ÖAñ ">ô #(§)¢)¨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ñ"�øð Ñ(¨W¸«\ô ',§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ˆà(ˆà37·<²<Øð4
à&Ø+Øñ	4
ð
 ñ4
ˆô 'Ø-×?Ñ?Ø+×;Ñ;ñ
ð 	
r3   )rT   r_   rx  r¡  r£  r•  )NNNNNNNF)r)   r*   r+   r,   rÔ   rh   r�  rA   rˆ  r©  r   r   r   r.   rd   r	   ró   r   r   r1   r   r`   r2   re   rf   s   @r4   rš  rš  ¾  s  ø† ð "Ø&ñÐõ
ò&/ò0ð  ØØð *.Ø.2Ø,0Ø,0Ø-1Ø(,Ø!%Ø).ñO
à—<‘< $Ñ&ðO
ð Ÿ™ tÑ+ðO
ð —l‘l TÑ)ð	O
ð
 —l‘l TÑ)ðO
ð —|‘| dÑ*ðO
ð  ™ðO
ð ˜$‘;ðO
ð #'ðO
ð Ð+Ñ,ðO
ð 
ˆu�|‰|Ñ	Ð9Ñ	9ôO
ó ó ó  öO
r3   rš  z`
    GIT Model with a `language modeling` head on top for autoregressive language modeling.
    c                   ó”  ^ • \ rS rSrSS0rU 4S jrS rS r\\	\
          SS\R                  S-  S	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\S-  S\S-  S\S\\R                  -  S\\   S\\R                     \-  4S jj5       5       5       rSrU =r$ )ÚGitForCausalLMiw  zoutput.weightz%git.embeddings.word_embeddings.weightc                 óÄ   >• [         TU ]  U5        [        U5      U l        [        R
                  " UR                  UR                  5      U l        U R                  5         g r�   )
r@   rA   rš  rö   r   r{   rD   rC   r·   r„  rR   s     €r4   rA   ÚGitForCausalLM.__init__  sF   ø€ Ü‰Ñ˜Ô ä˜FÓ#ˆŒÜ—i’i × 2Ñ 2°F×4EÑ4EÓFˆŒð 	�‰Õr3   c                 ó   • U R                   $ r�   ©r·   r‡  s    r4   Úget_output_embeddingsÚ$GitForCausalLM.get_output_embeddingsˆ  s   € Ø�{‰{Ðr3   c                 ó   • Xl         g r�   rÌ  )rS   Únew_embeddingss     r4   Úset_output_embeddingsÚ$GitForCausalLM.set_output_embeddings‹  s   € Ø$�r3   NrW   r‚   rQ   r/  rX   Úlabelsrƒ   rî   r-  Úlogits_to_keepr„   rZ   c                 óÞ  • Ub  SnU R                   " U4UUUUUUU	S.UD6nUR                  n[        U
[        5      (       a  [	        U
* S5      OU
nU R                  USS2USS24   5      nSnUR                  SS5      nUbÁ  U R                   R                  R                  S   R                  R                  R                  nUc6  USS2US2SS24   R                  5       nUSS2SS24   R                  5       nOUSS2US2SS24   R                  5       nU R                  " S
USU R                  R                  US.UD6n[!        UUUR"                  UR$                  UR&                  S	9$ )aù  
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 in `[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)r‚   rQ   r/  rX   rƒ   rî   r-  Úshift_labelsr   r=   r   )ÚlogitsrÓ  rC   rÖ  )Úlossr×  rƒ   r&   r'   r(   )rö   r%   rÃ   rc   Úslicer·   Úpoprx  ré   rØ   rS   ry   r“   Úloss_functionrT   rC   r   rƒ   r&   r'   )rS   rW   r‚   rQ   r/  rX   rÓ  rƒ   rî   r-  rÔ  r„   Úoutputsr&   Úslice_indicesr×  rØ  rÖ  Únum_image_tokensÚshifted_logitss                       r4   r`   ÚGitForCausalLM.forwardŽ  s•  € ðl ÑØˆIà+/¯8ª8Øð
,
à)Ø%Ø%Ø'Ø+ØØ%=ñ
,
ð ñ
,
ˆð  ×1Ñ1ˆä8BÀ>ÔSV×8WÑ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜]ª1¨mºQÐ+>Ñ?Ó@ˆàˆð —z‘z .°$Ó7ˆØÑØ#Ÿx™x×/Ñ/×5Ñ5°aÑ8×BÑB×GÑG×ZÑZÐØÑ#à!'ªÐ+;¸BÐ+>ÂÐ(AÑ!B×!MÑ!MÓ!O�Ø%¢a¨© e™}×7Ñ7Ó9‘à!'ªÐ+;Ñ+<ºaÐ(?Ñ!@×!KÑ!KÓ!M�Ø×%Ò%ð Ø%ØØŸ;™;×1Ñ1Ø)ñ	ð
 ñˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ñ
ð 	
r3   )rö   r·   )
NNNNNNNNFr   )r)   r*   r+   r,   Ú_tied_weights_keysrA   rÍ  rÑ  r   r   r   r.   rd   r	   ró   rc   r   r   r1   r   r`   r2   re   rf   s   @r4   rÈ  rÈ  w  sD  ø† ð *Ð+RÐSÐõòò%ð  ØØð *.Ø.2Ø,0Ø,0Ø-1Ø&*Ø(,Ø!%Ø).Ø-.ñA
à—<‘< $Ñ&ðA
ð Ÿ™ tÑ+ðA
ð —l‘l TÑ)ð	A
ð
 —l‘l TÑ)ðA
ð —|‘| dÑ*ðA
ð —‘˜tÑ#ðA
ð  ™ðA
ð ˜$‘;ðA
ð #'ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
ˆu�|‰|Ñ	Ð5Ñ	5ôA
ó ó ó  öA
r3   rÈ  )rÈ  rš  rõ   r€  )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)   rr   r"   r�  r6   rh   r    rµ   r±   r¿   rÍ   rÔ   rã   rõ   rþ   r=  rd   ÚfloatrK  rM  ra  rl  ru  r€  r’  rš  rÈ  Ú__all__r(   r3   r4   Ú<module>rõ     s¥  ðñ ã Ý $Ý !ã Ý å &Ý !ß .Ý )Ý /Ý 9÷ó ÷ GÝ &Ý 6÷õ õ 8Ý 5ß 9ð 
×	Ò	˜HÓ	%€ñ ðñð
 ô	<˜;ó 	<ó óð	<ô(�B—I‘Iô (ôV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ñ ðñô
q
Ð!ó q
óð
q
ñh ðñô
V
Ð'¨ó V
óð
V
òr Q�r3   