+
    œ°³j†  ã                   ó0  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^RIHt ^RIH	t	H
t
Ht ^RIHt ^RIHtHt ^RIHt ^R	IHtHt ^R
IHt ^RIHtHt ^RIHt ]P:                  ! ]4      t ! R R]P@                  4      t! ! R R]P@                  4      t" ! R R]PF                  4      t$ ! R R]PF                  4      t% ! R R]4      t&] ! R R]4      4       t' ! R R]'4      t(]! RR7       ! R R]'4      4       t)]! RR7       ! R  R!]']4      4       t*R!R.t+R# )"z/PyTorch TrOCR decoder model (based on RoBERTa).N)Únn)ÚCrossEntropyLoss)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentions)ÚPreTrainedModel)Úauto_docstringÚlogging©ÚTrOCRConfigc                   ó^   a a€ ] tR t^%t oRtV3R lV 3R lltRV3R lV 3R llltRtVtV ;t	# )ÚTrOCRLearnedPositionalEmbeddingzF
This module learns positional embeddings up to a fixed maximum size.
c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )é   Únum_embeddingsÚembedding_dim©Úint)ÚformatÚ__classdict__s   "€Úi/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/trocr/modeling_trocr.pyÚ__annotate__Ú,TrOCRLearnedPositionalEmbedding.__annotate__*   s   ø€ ÷ Fñ F¡sð F¹3ñ Fó    c                óV   <€ ^V n         \        SV `	  WP                   ,           V4       R# ©r   N)ÚoffsetÚsuperÚ__init__)Úselfr   r   Ú	__class__s   &&&€r   r%   Ú(TrOCRLearnedPositionalEmbedding.__init__*   s"   ø€ ð ˆŒÜ‰Ñ˜¯+©+Õ5°}ÖEr    c                ób   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  R,          /# )r   Ú	input_idsÚpast_key_values_lengthÚposition_idsN©ÚtorchÚTensorr   )r   r   s   "€r   r   r   0   s5   ø€ ÷ ;ñ ;ÙŸ™ð;Ù?Bð;ÙV[×VbÑVbÐeiÕViñ;r    c                ó<  <€ Vfi   VP                   R,          w  rE\        P                  ! W"V,           \        P                  V P                  P
                  R7      P                  VR4      pMVP                  ^ 4      p\        SV `%  W0P                  ,           4      # )z3`input_ids' shape is expected to be [bsz x seqlen].:Nr   N)ÚdtypeÚdeviceéÿÿÿÿ)Úshaper.   ÚarangeÚlongÚweightr2   ÚexpandÚ	unsqueezer$   Úforwardr#   )r&   r*   r+   r,   ÚbszÚseq_lenr'   s   &&&&  €r   r:   Ú'TrOCRLearnedPositionalEmbedding.forward0   s   ø€ ð
 ÒØ$Ÿ?™?¨2Õ.‰LˆCÜ Ÿ<š<Ø&ÀÕ(HÔPU×PZÑPZÐcg×cnÑcn×cuÑcuôç‰f�S˜"‹oñ ð (×1Ñ1°!Ó4ˆLä‰w‰˜|¯k©kÕ9Ó:Ð:r    )r#   )é    N©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r:   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r'   r   s   @@r   r   r   %   s%   ù‡ € ñ÷Fó F÷;÷ ;õ ;r    r   c                   ó^   a a€ ] tR t^At oRtRV3R lV 3R llltV3R lV 3R lltRtVtV ;t	# )ÚTrOCRScaledWordEmbeddingzT
This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
c          	      ó@   <€ V ^8„  d   QhRS[ RS[ RS[ RS[R,          /# )r   r   r   Úpadding_idxÚembed_scaleN)r   Úfloat)r   r   s   "€r   r   Ú%TrOCRScaledWordEmbedding.__annotate__F   s0   ø€ ÷ 'ñ '¡sð '¹3ð 'ÉSð 'Ñ_dÐgkÕ_kñ 'r    c                ó4   <€ \         SV `  WV4       W@n        R # ©N)r$   r%   rM   )r&   r   r   rL   rM   r'   s   &&&&&€r   r%   Ú!TrOCRScaledWordEmbedding.__init__F   s   ø€ Ü‰Ñ˜¸ÔDØ&Ör    c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r   r*   )r.   r/   )r   r   s   "€r   r   rO   J   s   ø€ ÷ =ñ =¡§¡ñ =r    c                óD   <€ \         SV `  V4      V P                  ,          # rQ   )r$   r:   rM   )r&   r*   r'   s   &&€r   r:   Ú TrOCRScaledWordEmbedding.forwardJ   s   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<Õ<Ð<r    ©rM   )ç      ð?r?   rH   s   @@r   rJ   rJ   A   s#   ù‡ € ñ÷'õ '÷=÷ =ó =r    rJ   c                   óº   a a€ ] tR t^Nt oRtRV3R lV 3R lllt]RV3R lR ll4       t]P                  ! 4       RV3R lR ll4       t
RV3R lR	 lltR
tVtV ;t# )Ú"TrOCRSinusoidalPositionalEmbeddingzDThis module produces sinusoidal positional embeddings of any length.c                ó:   <€ V ^8„  d   QhRS[ RS[ RS[ R,          /# )r   Únum_positionsr   rL   Nr   )r   r   s   "€r   r   Ú/TrOCRSinusoidalPositionalEmbedding.__annotate__Q   s,   ø€ ÷ Uñ U¡cð U¹#ð UÉCÐRVÍJñ Ur    c                óx   <€ \         SV `  4        ^V n        W n        W0n        V P                  WV4      V n        R# r"   )r$   r%   r#   r   rL   Úget_embeddingÚweights)r&   r[   r   rL   r'   s   &&&&€r   r%   Ú+TrOCRSinusoidalPositionalEmbedding.__init__Q   s5   ø€ Ü‰ÑÔØˆŒØ*ÔØ&ÔØ×)Ñ)¨-ÈÓTˆŽr    c                ó:   <€ V ^8„  d   QhRS[ RS[ RS[ R,          /# )r   r   r   rL   Nr   )r   r   s   "€r   r   r\   Y   s'   ø€ ÷ 1ñ 1¡cð 1¹#ð 1ÉCÐRVÍJñ 1r    c                ó(  € V^,          p\         P                  ! R4      V^,
          ,          p\        P                  ! \        P                  ! V\        P
                  R7      P                  4       V) ,          4      p\        P                  ! V \        P
                  R7      P                  4       P                  ^4      VP                  ^ 4      ,          p\        P                  ! \        P                  ! V4      \        P                  ! V4      .^R7      P                  V R4      pV^,          ^8X  d0   \        P                  ! V\        P                  ! V ^4      .^R7      pVe   ^ WBR3&   VP                  \        P                  ! 4       4      # )z©
Build sinusoidal embeddings. This matches the implementation in tensor2tensor, but differs slightly from the
description in Section 3.5 of "Attention Is All You Need".
i'  )r1   ©ÚdimºNNNr3   )ÚmathÚlogr.   Úexpr5   Úint64rN   r9   ÚcatÚsinÚcosÚviewÚzerosÚtoÚget_default_dtype)r   r   rL   Úhalf_dimÚembs   &&&  r   r^   Ú0TrOCRSinusoidalPositionalEmbedding.get_embeddingX   s  € ð ! AÕ%ˆÜ�hŠh�u‹o ¨A¥Õ.ˆÜ�iŠiœŸš X´U·[±[ÔA×GÑGÓIÈSÈDÕPÓQˆÜ�lŠl˜>´·±Ô=×CÑCÓE×OÑOÐPQÓRÐUX×UbÑUbÐcdÓUeÕeˆÜ�iŠiœŸš 3›¬¯ª°3«Ð8¸aÔ@×EÑEÀnÐVXÓYˆØ˜1Õ Ô!ä—)’)˜S¤%§+¢+¨n¸aÓ"@ÐAÀqÔIˆCØÒ"Ø"#ˆC˜Q�Ñà�v‰v”e×-Ò-Ó/Ó0Ð0r    c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r   r*   r+   r-   )r   r   s   "€r   r   r\   l   s   ø€ ÷ ñ ¡§¡ð Ásñ r    c                ó
  € VP                  4       w  r4V P                  WP                  V4      P                  VP                  4      pV P                  ^,           V,           pV P
                  e    W`P
                  P                  ^ 4      8”  d,   V P                  W`P                  V P                  4      V n        V P
                  P                  ^ VP                  R4      4      P                  W4R4      P                  4       pV# )é   r3   )ÚsizeÚ"create_position_ids_from_input_idsrL   ro   r2   r_   r^   r   Úindex_selectrm   Údetach)r&   r*   r+   r;   r<   r,   Úmax_posÚxs   &&&     r   r:   Ú*TrOCRSinusoidalPositionalEmbedding.forwardk   sÏ   € à —~‘~Ó'‰ˆà×>Ñ>¸y×JZÑJZÐ\rÓs×vÑvØ×Ñó
ˆð
 ×"Ñ" QÕ&¨Õ0ˆØ�<‰<Ò 7¯\©\×->Ñ->¸qÓ-AÔ#Aà×-Ñ-¨g×7IÑ7IÈ4×K[ÑK[Ó\ˆDŒLà�L‰L×%Ñ% a¨×):Ñ):¸2Ó)>Ó?×DÑDÀSÐSUÓV×]Ñ]Ó_ˆàˆr    c                óN   <€ V ^8„  d   QhRS[ P                  RS[RS[R,          /# )r   r*   rL   r+   Nr-   )r   r   s   "€r   r   r\   }   s/   ø€ ÷ 
8ñ 
8ÙŸ™ð
8Ù47ð
8ÙQTÐW[ÕQ[ñ
8r    c                óØ   € VP                  V4      P                  4       p\        P                  ! V^R7      P	                  V4      V,           V,          pVP                  4       V,           # )z¸
Replace non-padding symbols with their position numbers. Position numbers begin at padding_idx+1. Padding
symbols are ignored. This is modified from fairseq's `utils.make_positions`.
rc   )Úner   r.   ÚcumsumÚtype_asr6   )r&   r*   rL   r+   ÚmaskÚincremental_indicess   &&&&  r   rx   ÚETrOCRSinusoidalPositionalEmbedding.create_position_ids_from_input_ids}   sW   € ð �|‰|˜KÓ(×,Ñ,Ó.ˆÜ$Ÿ|š|¨D°aÔ8×@Ñ@ÀÓFÐI_Õ_ÐcgÕgÐØ"×'Ñ'Ó)¨KÕ7Ð7r    )r   r#   rL   r_   rQ   )r>   )r@   rA   rB   rC   rD   r%   Ústaticmethodr^   r.   Úno_gradr:   rx   rE   rF   rG   rH   s   @@r   rY   rY   N   s[   ù‡ € ÙN÷Uõ Uð ÷1ñ 1ó ð1ð$ ‡]‚]ƒ_÷ñ ó ð÷"
8÷ 
8ò 
8r    rY   c                   ó\   a a€ ] tR t^Št oRtRV3R lV 3R llltRV3R lR lltRtVtV ;t	# )	ÚTrOCRAttentionz>Multi-headed attention from 'Attention Is All You Need' paper.c                ó²   <€ V ^8„  d   QhRS[ RS[ RS[ R,          RS[ R,          RS[R,          RS[R,          RS[R,          R	S[R,          R
S[R,          /	# )r   Ú	embed_dimÚ	num_headsÚkdimNÚvdimÚdropoutÚ
is_decoderÚbiasÚis_cross_attentionÚ	layer_idx)r   rN   Úbool)r   r   s   "€r   r   ÚTrOCRAttention.__annotate__�   sŽ   ø€ ÷ !Cñ !Cñ ð!Cñ ð	!Cñ
 �D�jð!Cñ �D�jð!Cñ ˜•ð!Cñ ˜4•Kð!Cñ �T�kð!Cñ ! 4�Kð!Cñ ˜$•;ñ!Cr    c                ój  <€ \         SV `  4        W n        Ve   TMTV n        Ve   TMTV n        W0n        W`n        W#,          V n        V P                  V,          V P                  8X  g   \        RV P                   RV R24      hV P                  R,          V n	        Wpn
        W n        \        P                  ! V P                  W(R7      V n        \        P                  ! V P                  W(R7      V n        \        P                  ! W"VR7      V n        \        P                  ! W"VR7      V n        R # )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).©r‘   g      à¿)r$   r%   r‹   r�   rŽ   rŒ   r�   Úhead_dimÚ
ValueErrorÚscalingr�   r“   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r&   Úconfigr‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r'   s   &&&&&&&&&&&€r   r%   ÚTrOCRAttention.__init__�   sñ   ø€ ô 	‰ÑÔØ"ŒØ Ò,‘D°)ˆŒ	Ø Ò,‘D°)ˆŒ	Ø"ŒØŒØ!Õ.ˆŒØ—‘ 	Õ)¨T¯^©^Ô;ÜØMÈdÏnÉnÐM]ð ^Ø�;˜bð"óð ð —}‘} dÕ*ˆŒØ$ŒØ"Œä—i’i §	¡	¨9Ô@ˆŒÜ—i’i §	¡	¨9Ô@ˆŒÜ—i’i 	¸4Ô@ˆŒäŸ	š	 )¸TÔBˆŽr    c                ó4  <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[R,          RS[ P                  R,          RS[R,          RS[S[ P                  S[ P                  R,          S[S[ P                  ,          R,          3,          /# )r   Úhidden_statesÚkey_value_statesNÚpast_key_valuesÚattention_maskÚoutput_attentionsÚreturn)r.   r/   r   r”   Útuple)r   r   s   "€r   r   r•   °   s”   ø€ ÷ d2ñ d2á—|‘|ðd2ñ  Ÿ,™,¨Õ-ðd2ñ  �ð	d2ñ
 Ÿ™ tÕ+ðd2ñ   $�;ðd2ñ 
‰u�|‰|™UŸ\™\¨DÕ0±%¹¿¹Õ2EÈÕ2LÐLÕ	Mñd2r    c                ó.
  € VRJpVP                  4       w  r‰p
V P                  V4      V P                  ,          pRpVe`   \        V\        4      '       dH   VP
                  P                  V P                  4      pV'       d   VP                  pMVP                  pMTpV'       d   TMTpV'       d\   VeX   V'       dP   XP                  V P                  ,          P                  pVP                  V P                  ,          P                  pMíV P                  V4      pV P                  V4      pVP                  VR
V P                   V P"                  4      P%                  ^^4      pVP                  VR
V P                   V P"                  4      P%                  ^^4      pVeX   XP'                  VVV P                  4      w  ppV'       d0   \        V\        4      '       d   RVP
                  V P                  &   W€P                   ,          R
V P"                  3pVP                  W‰V P                   V P"                  4      P%                  ^^4      pVP(                  ! V!  pVP(                  ! V!  pVP(                  ! V!  pVP                  ^4      p\*        P,                  ! W¿P%                  ^^4      4      pVP                  4       W€P                   ,          V	V38w  d3   \/        RW€P                   ,          V	V3 RVP                  4        24      hVe„   VP                  4       V^V	V38w  d$   \/        RV^V	V3 RVP                  4        24      hVP                  W€P                   V	V4      V,           pVP                  W€P                   ,          V	V4      p\0        P2                  P5                  VR
R7      pV'       dB   VP                  W€P                   V	V4      pVP                  W€P                   ,          V	V4      pMRp\0        P2                  P7                  VV P6                  V P8                  R7      p\*        P,                  ! VV4      pVP                  4       W€P                   ,          W�P"                  38w  d6   \/        R	W€P                   W�P"                  3 RVP                  4        24      hVP                  W€P                   W�P"                  4      pVP%                  ^^4      pVP)                  W‰V
4      pV P;                  V4      pVV3# )z#Input shape: Batch x Time x ChannelNFTz$Attention weights should be of size z	, but is z!Attention mask should be of size rc   ©ÚpÚtrainingz `attn_output` should be of size r3   )rw   rž   rš   Ú
isinstancer   Ú
is_updatedÚgetr“   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrœ   r�   rm   rŒ   r˜   Ú	transposeÚupdateÚreshaper.   Úbmmr™   r   Ú
functionalÚsoftmaxr�   r­   rŸ   )r&   r£   r¤   r¥   r¦   r§   Úkwargsr’   r;   Útgt_lenr‹   Úquery_statesr¯   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs   &&&&&&,                r   r:   ÚTrOCRAttention.forward°   sg  € ð .°TÐ9ÐØ"/×"4Ñ"4Ó"6Ñˆ�ið —{‘{ =Ó1°D·L±LÕ@ˆàˆ
ØÒ&Ü˜/Ô+>×?Ò?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
ß%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$ç-?Ñ)À]ˆß /Ò"=Ç*à-×4Ñ4°T·^±^ÕD×IÑIˆJØ/×6Ñ6°t·~±~ÕF×MÑM‰LàŸ™ ^Ó4ˆJØŸ;™; ~Ó6ˆLØ#Ÿ™¨¨b°$·.±.À$Ç-Á-ÓP×ZÑZÐ[\Ð^_Ó`ˆJØ'×,Ñ,¨S°"°d·n±nÀdÇmÁmÓT×^Ñ^Ð_`ÐbcÓdˆLàÒ*à+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lç%¬*°_ÔFY×*ZÒ*ZØAE�O×.Ñ.¨t¯~©~Ñ>àŸN™NÕ*¨B°·±Ð>ˆ
Ø#×(Ñ(¨°t·~±~ÀtÇ}Á}ÓU×_Ñ_Ð`aÐcdÓeˆØ#×+Ò+¨ZÑ8ˆØ×'Ò'¨Ñ4ˆ
Ø#×+Ò+¨ZÑ8ˆà—/‘/ !Ó$ˆÜ—y’y ×/CÑ/CÀAÀqÓ/IÓJˆà×ÑÓ 3¯©Õ#7¸À'Ð"JÔJÜØ6¸¿n¹nÕ8LÈgÐW^Ð7_Ð6`ð aØ ×%Ñ%Ó'Ð(ð*óð ð
 Ò%Ø×"Ñ"Ó$¨¨a°¸'Ð(BÔBÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ð]k×]pÑ]pÓ]rÐ\sÐtóð ð (×,Ñ,¨S·.±.À'È7ÓSÐVdÕdˆLØ'×,Ñ,¨S·>±>Õ-AÀ7ÈGÓTˆLä—}‘}×,Ñ,¨\¸rÐ,ÓBˆçð
 %1×$5Ñ$5°c¿>¹>È7ÐT[Ó$\Ð!Ø0×5Ñ5°c¿N¹NÕ6JÈGÐU\Ó]‰Là$(Ð!ä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
ä—i’i 
¨LÓ9ˆà×ÑÓ #¯©Õ"6¸ÇÁÐ!OÔOÜØ2°C¿¹È×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¯N©N¸GÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆØ!×)Ñ)¨#¸	ÓBˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r    )r�   r‹   r˜   r�   rœ   r�   r“   rŒ   rŸ   rž   rš   r�   rŽ   )NNg        FTFN)NNNFr?   rH   s   @@r   r‰   r‰   Š   s'   ù‡ € ÙH÷!Cõ !C÷Fd2÷ d2ò d2r    r‰   c                   óX   a a€ ] tR tRt oRV3R lV 3R llltRV3R lR lltRtVtV ;t# )	ÚTrOCRDecoderLayeri  c                ó    <€ V ^8„  d   QhRS[ /# ©r   r    r   )r   r   s   "€r   r   ÚTrOCRDecoderLayer.__annotate__  s   ø€ ÷ "=ñ "=™{ñ "=r    c                ó‚  <€ \         SV `  4        VP                  V n        \	        VV P                  VP
                  VP                  R VR7      V n        VP                  V n        \        VP                  ,          V n        VP                  V n        \        P                  ! V P                  4      V n        VP                   '       dq   \	        VV P                  VP
                  VP"                  VP"                  VP                  R R VR7	      V n        \        P                  ! V P                  4      V n        \        P(                  ! V P                  VP*                  4      V n        \        P(                  ! VP*                  V P                  4      V n        \        P                  ! V P                  4      V n        R# )T)r‹   rŒ   r�   r�   r“   )r‹   rŒ   r�   rŽ   r�   r�   r’   r“   N)r$   r%   Úhidden_sizer‹   r‰   Údecoder_attention_headsÚattention_dropoutÚ	self_attnr�   r   Úactivation_functionÚactivation_fnÚactivation_dropoutr   Ú	LayerNormÚself_attn_layer_normr�   Úcross_attention_hidden_sizeÚencoder_attnÚencoder_attn_layer_normr›   Údecoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm)r&   r    r“   r'   s   &&&€r   r%   ÚTrOCRDecoderLayer.__init__  s@  ø€ Ü‰ÑÔØ×+Ñ+ˆŒä'ØØ—n‘nØ×4Ñ4Ø×,Ñ,ØØô
ˆŒð —~‘~ˆŒÜ# F×$>Ñ$>Õ?ˆÔØ"(×";Ñ";ˆÔä$&§L¢L°·±Ó$@ˆÔ!à××ÐÜ .ØØŸ.™.Ø ×8Ñ8Ø×7Ñ7Ø×7Ñ7Ø×0Ñ0ØØ#'Ø#ô
!ˆDÔô ,.¯<ª<¸¿¹Ó+GˆDÔ(ä—9’9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9’9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¢¨T¯^©^Ó <ˆÖr    c                óè   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[R,          RS[R,          /# )	r   r£   r¦   NÚencoder_hidden_statesÚencoder_attention_maskr¥   r§   Ú	use_cache)r.   r/   r   r”   )r   r   s   "€r   r   rÎ   <  s…   ø€ ÷ Gñ Gá—|‘|ðGñ Ÿ™ tÕ+ðGñ  %Ÿ|™|¨dÕ2ð	Gñ
 !&§¡¨tÕ 3ðGñ  �ðGñ   $�;ðGñ ˜$•;ñGr    c                óF  € Tp	V P                  VVVVR7      w  r\        P                  P                  WP                  V P                  R7      pW‘,           pV P                  V4      pRpVei   Tp	V P                  VVVVVR7      w  r\        P                  P                  WP                  V P                  R7      pW‘,           pV P                  V4      pTp	V P                  V P                  V4      4      p\        P                  P                  WP                  V P                  R7      pV P                  V4      p\        P                  P                  WP                  V P                  R7      pW‘,           pV P                  V4      pV3pV'       d   WÊV3,          pV# )a^  
Args:
    hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
    attention_mask (`torch.FloatTensor`): attention mask of size
        `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
    encoder_hidden_states (`torch.FloatTensor`):
        cross attention input to the layer of shape `(batch, seq_len, embed_dim)`
    encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
        `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
    past_key_values (`Cache`): cached past key and value projection states
    output_attentions (`bool`, *optional*):
        Whether or not to return the attentions tensors of all attention layers. See `attentions` under
        returned tensors for more detail.
)r£   r¥   r¦   r§   r«   N)r£   r¤   r¦   r¥   r§   )rÓ   r   rº   r�   r­   rØ   rÚ   rÛ   rÕ   rÝ   rÖ   rÞ   rß   )r&   r£   r¦   râ   rã   r¥   r§   rä   r¼   ÚresidualÚself_attn_weightsÚcross_attn_weightsÚoutputss   &&&&&&&&,    r   r:   ÚTrOCRDecoderLayer.forward<  s’  € ð2 !ˆð ,0¯>©>Ø'Ø+Ø)Ø/ð	 ,:ó ,
Ñ(ˆô Ÿ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ Õ0ˆØ×1Ñ1°-Ó@ˆð "ÐØ Ò,Ø$ˆHà04×0AÑ0AØ+Ø!6Ø5Ø /Ø"3ð 1Bó 1Ñ-ˆMô ŸM™M×1Ñ1°-Ç<Á<ÐZ^×ZgÑZgÐ1ÓhˆMØ$Õ4ˆMØ ×8Ñ8¸ÓGˆMð !ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆäŸ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ Õ0ˆØ×-Ñ-¨mÓ<ˆà Ð"ˆçØÐ+=Ð>Õ>ˆGàˆr    )rÖ   rÕ   r�   r‹   rÚ   rÛ   rÝ   rÞ   rß   rÓ   rØ   rQ   )NNNNFT©	r@   rA   rB   rC   r%   r:   rE   rF   rG   rH   s   @@r   rË   rË     s"   ù‡ € ÷"=õ "=÷HG÷ Gò Gr    rË   c                   ó:   a € ] tR tRt o RtRtR.tV 3R ltRtV t	R# )ÚTrOCRPreTrainedModeli†  ÚmodelTrË   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # rÍ   r   )r   r   s   "€r   r   Ú!TrOCRPreTrainedModel.__annotate__†  s   ø‡ ‚ áÑò r    © N)
r@   rA   rB   rC   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ__annotate_func__rE   rF   )r   s   @r   rí   rí   †  s#   ø‡ € ð  ÐØ&*Ð#Ø,Ð-Ð÷ ƒ r    rí   c                   óL   a a€ ] tR tRt oRtV3R lV 3R lltRR ltRtVtV ;t	# )ÚTrOCRDecoderiŽ  zˆ
Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`TrOCRDecoderLayer`]

Args:
    config: TrOCRConfig
c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r   )r   r   s   "€r   r   ÚTrOCRDecoder.__annotate__–  s   ø€ ÷ ñ ™{ñ r    c           
     óž  <€ \         SV `  V4       VP                  V n        VP                  V n        VP
                  V n        VP                  '       d!   \        P                  ! VP                  4      MR p\        VP                  VP                  V P                  VR7      V n        VP                  '       d'   \        VP                   VP                  4      V n        MH\%        VP                   V P                  ,           ^,           VP                  V P                  4      V n        VP&                  '       d'   \(        P*                  ! VP                  4      V n        MRV n        \(        P,                  ! \/        VP0                  4       Uu. uF  p\3        WR7      NK  	  up4      V n        RV n        V P9                  4        R# u upi )rW   rV   N)r“   F)r$   r%   r�   Údecoder_layerdropÚ	layerdropÚpad_token_idrL   Úscale_embeddingrf   ÚsqrtrÐ   rJ   Ú
vocab_sizeÚembed_tokensÚuse_learned_position_embeddingsr   Úmax_position_embeddingsÚembed_positionsrY   Úlayernorm_embeddingr   r×   Ú
ModuleListÚrangeÚdecoder_layersrË   r³   Úgradient_checkpointingÚ	post_init)r&   r    rM   Úir'   s   &&  €r   r%   ÚTrOCRDecoder.__init__–  s]  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒØ!×.Ñ.ˆÔØ7=×7M×7MÐ7M”d—i’i × 2Ñ 2Ô3ÐSVˆä4Ø×Ñ˜v×1Ñ1°4×3CÑ3CÐQ\ô
ˆÔð ×1×1Ð1Ü#BÀ6×CaÑCaÐci×cuÑcuÓ#vˆDÕ ä#EØ×.Ñ.°×1AÑ1AÕAÀAÕEØ×"Ñ"Ø× Ñ ó$ˆDÔ ð ×%×%Ð%Ü')§|¢|°F×4FÑ4FÓ'GˆDÕ$à'+ˆDÔ$ä—m’mÔUZÐ[a×[pÑ[pÔUqÓ$rÑUqÐPQÔ%6°v×%KÑUqÑ$rÓsˆŒà&+ˆÔ#à�‰Öùò	 %ss   ÆG
c                ó²  € Ve   TMV P                   P                  pV	e   T	MV P                   P                  p	Ve   TMV P                   P                  pV
e   T
MV P                   P                  p
Ve   Ve   \        R4      hVe'   TpVP                  RVP                  R,          4      pMVe   VR,          pM\        R4      hV P                  '       d2   V P                  '       d    V'       d   \        P                  R4       RpV'       do   Vfk   Vf   V P                   P                  '       d5   \        \        V P                   R7      \        V P                   R7      4      M\        V P                   R7      pVe   VP                  4       M^ pVf   V P!                  V4      pV P                   P"                  '       d   V P%                  WÍR7      pMV P%                  WR7      pVP'                  VP(                  4      pWn,           pV P*                  e   V P+                  V4      p\,        P.                  P1                  WðP0                  V P                  R7      p\3        V P                   VVVR	7      pVe   Ve   \5        V P                   VVVR
7      pV	'       d   RMRpV'       d   RMRpV'       d   Ve   RMRp\7        V P8                  4       F�  w  ppV	'       d   VV3,          pV P                  '       d*   \:        P<                  ! . 4      pVV P>                  8  d   KS  V! VVVVVVVR7      pV^ ,          pV'       g   Ku  VV^,          3,          pVf   KŒ  VV^,          3,          pKŸ  	  V	'       d   VV3,          pV
'       g5   \@        ;QJ d    . R WõVVV3 4       F  NK  	  5# ! R WõVVV3 4       4      # \C        VVVVVR7      # )a  
Args:
    input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
        Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you
        provide it.

        Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
        [`PreTrainedTokenizer.__call__`] for details.

        [What are input IDs?](../glossary#input-ids)
    attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
        Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.

        [What are attention masks?](../glossary#attention-mask)
    encoder_hidden_states (`torch.FloatTensor` of shape `(batch_size, encoder_sequence_length, hidden_size)`, *optional*):
        Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention
        of the decoder.
    encoder_attention_mask (`torch.LongTensor` of shape `(batch_size, encoder_sequence_length)`, *optional*):
        Mask to avoid performing cross-attention on padding tokens indices of encoder input_ids. Mask values
        selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.

        [What are attention masks?](../glossary#attention-mask)
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks and in the
        cross-attention blocks) that can be used (see `past_key_values` input) to speed up sequential decoding.

        If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those
        that don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of
        all `decoder_input_ids` of shape `(batch_size, sequence_length)`.
    inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
        Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
        This is useful if you want more control over how to convert `input_ids` indices into associated vectors
        than the model's internal embedding lookup matrix.
    output_attentions (`bool`, *optional*):
        Whether or not to return the attentions tensors of all attention layers. See `attentions` under
        returned tensors for more detail.
    output_hidden_states (`bool`, *optional*):
        Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
        for more detail.
    return_dict (`bool`, *optional*):
        Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same timezEYou have to specify either decoder_input_ids or decoder_inputs_embedsz^`use_cache = True` is incompatible with gradient checkpointing. Setting `use_cache = False`...F)r    )r+   r«   )r    Úinputs_embedsr¦   r¥   )r    r  r¦   râ   )rã   r¥   r§   rä   c              3   ó2   "  € T F  pVf   K	  Vx € K  	  R # 5irQ   rñ   )Ú.0Úvs   & r   Ú	<genexpr>Ú'TrOCRDecoder.forward.<locals>.<genexpr>[  s   é € ð ár�AØ÷ ’Ûrùs   ‚�
)Úlast_hidden_stater¥   r£   Ú
attentionsÚcross_attentionsr3   )re   re   r3   rñ   )"r    r§   Úoutput_hidden_statesrä   Úreturn_dictr™   rm   r4   r	  r­   ÚloggerÚwarning_onceÚis_encoder_decoderr   r   Úget_seq_lengthr  r  r  ro   r2   r  r   rº   r�   r
   r	   Ú	enumerater³   r.   Úrandrü   r©   r   )r&   r*   r¦   râ   rã   r¥   r  rä   r§   r  r  r¼   Úinputr+   Ú	embed_posr£   Úall_hidden_statesÚall_self_attnsÚall_cross_attentionsÚidxÚdecoder_layerÚdropout_probabilityÚlayer_outputss   &&&&&&&&&&&,           r   r:   ÚTrOCRDecoder.forwardµ  s”  € ð@ 2CÒ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ò$DÑ È$Ï+É+×JjÑJjð 	ð "+Ò!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ò%<‘kÀ$Ç+Á+×BYÑBYˆð Ò  ]Ò%>ÜÐsÓtÐtØÒ"ØˆEØ!Ÿ™ r¨5¯;©;°r­?Ó;‰IØÒ&Ø! (Õ+‰EäÐdÓeÐeà×&×&Ð&¨4¯=¯=¨=ßÜ×#Ñ#Øtôð "�	ç˜Ò0ð )Ò4¸¿¹×8V×8VÐ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð FUÒE` ×!?Ñ!?Ô!AÐfgÐàÒ Ø ×-Ñ-¨iÓ8ˆMà�;‰;×6×6Ð6Ø×,Ñ,¨UÐ,Ób‰Ià×,Ñ,¨YÐ,ÓfˆIØ—L‘L ×!5Ñ!5Ó6ˆ	à%Õ1ˆà×#Ñ#Ò/Ø ×4Ñ4°]ÓCˆMäŸ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-Ódˆä+Ø—;‘;Ø'Ø)Ø+ô	
ˆð !Ò,Ð1GÒ1SÜ%>Ø—{‘{Ø+Ø5Ø&;ô	&Ð"÷ #7™B¸DÐß0™°dˆß&7Ð<QÒ<]™rÐdhÐä"+¨D¯K©KÖ"8ÑˆC�ç#Ø! mÐ%5Õ5Ð!Ø�}�}ˆ}Ü&+§j¢j°£nÐ#Ø&¨¯©Ô7Ùá)ØØØ%Ø'=Ø /Ø"3Ø#ôˆMð *¨!Õ,ˆMç Ñ Ø =°Õ#3Ð"5Õ5�à(Ô4Ø(¨]¸1Õ-=Ð,?Õ?Ò(ñ1 #9÷6  Ø -Ð!1Õ1Ðçß”5ñ à'Ð:KÈ^Ð]qÑró—5ð �5ñ à'Ð:KÈ^Ð]qÑróó ð ô
 9Ø+Ø+Ø+Ø%Ø1ô
ð 	
r    )r�   r  r  r	  rü   r  r³   rL   )
NNNNNNNNNNr?   rH   s   @@r   r÷   r÷   Ž  s    ù‡ € ñ÷ó ÷>q
ô q
r    r÷   a  
    The TrOCR Model with a language modeling head. Can be used for summarization.
    This wrapper class is a helper class to correctly load pretrained checkpoints when the causal language model is
    used in combination with the [`EncoderDecoderModel`] framework.
    )Úcustom_introc                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚTrOCRDecoderWrapperii  c                óf   <€ \         SV `  V4       \        V4      V n        V P	                  4        R # rQ   )r$   r%   r÷   Údecoderr
  ©r&   r    r'   s   &&€r   r%   ÚTrOCRDecoderWrapper.__init__q  s&   ø€ Ü‰Ñ˜Ô Ü# FÓ+ˆŒØ�‰Ör    c                ó&   € V P                   ! V/ VB # rQ   ©r-  )r&   Úargsr¼   s   &*,r   r:   ÚTrOCRDecoderWrapper.forwardv  s   € Ø�|Š|˜TÐ, VÑ,Ð,r    r1  rë   rH   s   @@r   r+  r+  i  s   ù‡ € õ÷
-ò -r    r+  zy
    The TrOCR Decoder with a language modeling head. Can be used as the decoder part of [`EncoderDecoderModel`] and
    c                   ór   a a€ ] tR tRt oRR/tV 3R ltR tR tR tR t	]
RV3R	 lR
 ll4       tRtVtV ;t# )ÚTrOCRForCausalLMiz  zoutput_projection.weightz!model.decoder.embed_tokens.weightc                óæ   <€ R Vn         RVn        \        SV `  V4       \	        V4      V n        \        P                  ! VP                  VP                  RR7      V n
        V P                  4        R# )TFr—   N)r�   r  r$   r%   r+  rî   r   r›   rÐ   r   Úoutput_projectionr
  r.  s   &&€r   r%   ÚTrOCRForCausalLM.__init__‚  sZ   ø€ Ø ˆÔØ$)ˆÔ!Ü‰Ñ˜Ô Ü(¨Ó0ˆŒ
ä!#§¢¨6×+=Ñ+=¸v×?PÑ?PÐW\Ô!]ˆÔð 	�‰Ör    c                óB   € V P                   P                  P                  # rQ   ©rî   r-  r  ©r&   s   &r   Úget_input_embeddingsÚ%TrOCRForCausalLM.get_input_embeddings�  s   € Ø�z‰z×!Ñ!×.Ñ.Ð.r    c                ó:   € WP                   P                  n        R # rQ   r:  )r&   Úvalues   &&r   Úset_input_embeddingsÚ%TrOCRForCausalLM.set_input_embeddings�  s   € Ø*/�
‰
×ÑÖ'r    c                ó   € V P                   # rQ   ©r7  r;  s   &r   Úget_output_embeddingsÚ&TrOCRForCausalLM.get_output_embeddings“  s   € Ø×%Ñ%Ð%r    c                ó   € Wn         R # rQ   rC  )r&   Únew_embeddingss   &&r   Úset_output_embeddingsÚ&TrOCRForCausalLM.set_output_embeddings–  s   € Ø!/Ör    c                ó„  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[ P                  R,          R	S[R,          R
S[R,          RS[R,          RS[R,          RS[S[,          /# )r   r*   Nr¦   râ   rã   r¥   r  Úlabelsrä   r§   r  r  r¨   )r.   Ú
LongTensorr/   ÚFloatTensorr   r”   r©   r   )r   r   s   "€r   r   ÚTrOCRForCausalLM.__annotate__š  së   ø€ ÷ m
ñ m
á×#Ñ# dÕ*ðm
ñ Ÿ™ tÕ+ðm
ñ  %×0Ñ0°4Õ7ð	m
ñ
 !&× 0Ñ 0°4Õ 7ðm
ñ  �ðm
ñ ×(Ñ(¨4Õ/ðm
ñ × Ñ  4Õ'ðm
ñ ˜$•;ðm
ñ   $�;ðm
ñ # T�kðm
ñ ˜D•[ðm
ñ 
Ñ2Õ	2ñm
r    c                ó€  € V	e   T	MV P                   P                  p	V
e   T
MV P                   P                  p
Ve   TMV P                   P                  pV P                  P                  VVVVVVVV	V
VR7
      pV P                  V^ ,          4      pRpVeG   \        4       pV! VP                  RV P                   P                  4      VP                  R4      4      pV'       g"   V3VR,          ,           pVe   V3V,           # T# \        VVVP                  VP                  VP                  VP                  R7      # )a¥  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
    config.vocab_size]` or -100 (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]`.

Example:

```python
>>> from transformers import (
...     TrOCRConfig,
...     TrOCRProcessor,
...     TrOCRForCausalLM,
...     ViTConfig,
...     ViTModel,
...     VisionEncoderDecoderModel,
... )
>>> import httpx
>>> from io import BytesIO
>>> from PIL import Image

>>> # TrOCR is a decoder model and should be used within a VisionEncoderDecoderModel
>>> # init vision2text model with random weights
>>> encoder = ViTModel(ViTConfig())
>>> decoder = TrOCRForCausalLM(TrOCRConfig())
>>> model = VisionEncoderDecoderModel(encoder=encoder, decoder=decoder)

>>> # If you want to start from the pretrained model, load the checkpoint with `VisionEncoderDecoderModel`
>>> processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
>>> model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

>>> # load image from the IAM dataset
>>> url = "https://fki.tic.heia-fr.ch/static/img/a01-122-02.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read())).convert("RGB")
>>> pixel_values = processor(image, return_tensors="pt").pixel_values
>>> text = "industry, ' Mr. Brown commented icily. ' Let us have a"

>>> # training
>>> model.config.decoder_start_token_id = processor.tokenizer.eos_token_id
>>> model.config.pad_token_id = processor.tokenizer.pad_token_id
>>> model.config.vocab_size = model.config.decoder.vocab_size

>>> labels = processor.tokenizer(text, return_tensors="pt").input_ids
>>> outputs = model(pixel_values, labels=labels)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
5.30

>>> # inference
>>> generated_ids = model.generate(pixel_values)
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> generated_text
'industry, " Mr. Brown commented icily. " Let us have a'
```N)
r*   r¦   râ   rã   r¥   r  rä   r§   r  r  :rv   NN)ÚlossÚlogitsr¥   r£   r  r  r3   )r    r§   r  r  rî   r-  r7  r   rm   r   r   r¥   r£   r  r  )r&   r*   r¦   râ   rã   r¥   r  rK  rä   r§   r  r  r¼   ré   rQ  rP  Úloss_fctÚoutputs   &&&&&&&&&&&&,     r   r:   ÚTrOCRForCausalLM.forward™  s@  € ðP 2CÒ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ò$DÑ È$Ï+É+×JjÑJjð 	ð &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆð —*‘*×$Ñ$ØØ)Ø"7Ø#9Ø+Ø'ØØ/Ø!5Ø#ð %ó 
ˆð ×'Ñ'¨°­
Ó3ˆàˆØÒÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDçØ�Y ¨¥Õ,ˆFØ'+Ò'7�D�7˜VÕ#ÐC¸VÐCä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r    )rî   r7  )NNNNNNNNNNN)r@   rA   rB   rC   Ú_tied_weights_keysr%   r<  r@  rD  rH  r   r:   rE   rF   rG   rH   s   @@r   r5  r5  z  sN   ù‡ € ð 5Ð6YÐZÐõ	ò/ò0ò&ò0ð ÷m
ñ m
ó ÷m
ð m
r    r5  ),rD   rf   r.   r   Útorch.nnr   Úactivationsr   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr	   r
   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úutilsr   r   Úconfiguration_trocrr   Ú
get_loggerr@   r  Ú	Embeddingr   rJ   ÚModulerY   r‰   rË   rí   r÷   r+  r5  Ú__all__rñ   r    r   Ú<module>rd     s$  ðñ 6ã ã Ý Ý %å !ß CÑ CÝ )ß JÝ 9ß lÝ -ß ,Ý ,ð 
×	Ò	˜HÓ	%€ô; b§l¡lô ;ô8
=˜rŸ|™|ô 
=ô98¨¯©ô 98ôxJ2�R—Y‘Yô J2ôZlÐ2ô lð^ ô.˜?ó .ó ð.ôX
Ð'ô X
ñv ðôô-Ð.ó -óð-ñ ðôô
H
Ð+¨_ó H
óð
H
ðV Ð5Ð
6‚r    