Ë
    ÜÓ^j‰ï  ã                   ó   — d Z ddlZddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7  e-«       r	  e/jp                  e9«      Z:dejv                  de<fd„Z= G d„ dej|                  «      Z? G d„ dej|                  «      Z@	 	 dDdej‚                  dejv                  dejv                  d ejv                  d!ejv                  dz  d"eBdz  d#eBd$e(e*   fd%„ZC G d&„ d'ej‚                  «      ZD G d(„ d)e«      ZE G d*„ d+e«      ZF G d,„ d-ej‚                  «      ZGe+ G d.„ d/e&«      «       ZH G d0„ d1eH«      ZI G d2„ d3eH«      ZJe+ G d4„ d5eH«      «       ZK e+d6¬7«       G d8„ d9eHe«      «       ZL e+d:¬7«       G d;„ d<eH«      «       ZMe+ G d=„ d>eH«      «       ZN G d?„ d@eH«      ZO G dA„ dBeHe«      ZPg dC¢ZQy)EzPyTorch MBART model.é    N)ÚCallable)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutputÚ#Seq2SeqQuestionAnsweringModelOutputÚSeq2SeqSequenceClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torch_flex_attn_availableÚis_torchdynamo_compilingÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚMBartConfigÚ	input_idsÚpad_token_idc                 óf  — | j                  «       }|€t        d«      ‚|j                  |dk(  |«       |j                  |«      j	                  d¬«      dz
  j                  d«      }|j                  d|«      j                  «       }|dd…dd…f   j                  «       |dd…dd…f<   ||dd…df<   |S )zÎ
    Shift input ids one token to the right, and wrap the last non pad token (the <LID> token) Note that MBart does not
    have a single `decoder_start_token_id` in contrast to other Bart-like models.
    Nz1self.model.config.pad_token_id has to be defined.iœÿÿÿr'   ©Údiméÿÿÿÿr   )ÚcloneÚ
ValueErrorÚmasked_fill_ÚneÚsumÚ	unsqueezeÚgatherÚsqueeze)r)   r*   Úprev_output_tokensÚindex_of_eosÚdecoder_start_tokenss        ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mbart/modeling_mbart.pyÚshift_tokens_rightr;   @   sÀ   € ð
 #Ÿ™Ó*ÐàÐÜÐLÓMÐMà×#Ñ#Ð$6¸$Ñ$>ÀÔMà&×)Ñ)¨,Ó7×;Ñ;ÀÐ;ÓBÀQÑF×QÑQÐRTÓU€LØ-×4Ñ4°Q¸ÓE×MÑMÓOÐØ 2²1°c°r°c°6Ñ :× @Ñ @Ó BÐ’q˜!™"�uÑØ3Ð’q˜!�tÑàÐó    c                   óv   ‡ — e Zd ZdZdedefˆ fd„Z	 d
dej                  dedej                  dz  fˆ fd	„Zˆ xZ	S )ÚMBartLearnedPositionalEmbeddingzN
    This module learns positional embeddings up to a fixed maximum size.
    Únum_embeddingsÚembedding_dimc                 óN   •— d| _         t        ‰| �	  || j                   z   |«       y ©Né   )ÚoffsetÚsuperÚ__init__)Úselfr?   r@   Ú	__class__s      €r:   rF   z(MBartLearnedPositionalEmbedding.__init__Z   s$   ø€ ð ˆŒÜ‰Ñ˜¨$¯+©+Ñ5°}ÕEr<   Nr)   Úpast_key_values_lengthÚposition_idsc                 ó$  •— |€a|j                   dd \  }}t        j                  |||z   t        j                  | j                  j
                  ¬«      j                  |d«      }n|j                  d«      }t        ‰| �%  || j                  z   «      S )z3`input_ids' shape is expected to be [bsz x seqlen].NrC   )ÚdtypeÚdevicer.   r   )ÚshapeÚtorchÚarangeÚlongÚweightrM   Úexpandr4   rE   ÚforwardrD   )rG   r)   rI   rJ   ÚbszÚseq_lenrH   s         €r:   rT   z'MBartLearnedPositionalEmbedding.forward`   sˆ   ø€ ð
 ÐØ$Ÿ?™?¨2¨AÐ.‰LˆC�Ü Ÿ<™<Ø&Ð(>ÀÑ(HÔPU×PZÑPZÐcg×cnÑcn×cuÑcuôç‰f�S˜"‹oñ ð (×1Ñ1°!Ó4ˆLä‰w‰˜|¨d¯k©kÑ9Ó:Ð:r<   )r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintrF   rO   ÚTensorrT   Ú__classcell__©rH   s   @r:   r>   r>   U   sW   ø„ ñðF sð F¸3õ Fð mqñ;ØŸ™ð;Ø?Bð;ØV[×VbÑVbÐeiÑVi÷;ñ ;r<   r>   c            
       ó`   ‡ — e Zd ZdZd
dededededz  fˆ fd„Zdej                  fˆ fd	„Z	ˆ xZ
S )ÚMBartScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    r?   r@   Úpadding_idxÚembed_scaleNc                 ó6   •— t         ‰| �  |||«       || _        y ©N)rE   rF   rb   )rG   r?   r@   ra   rb   rH   s        €r:   rF   z!MBartScaledWordEmbedding.__init__v   s   ø€ Ü‰Ñ˜¨¸ÔDØ&ˆÕr<   r)   c                 ó<   •— t         ‰| �  |«      | j                  z  S rd   )rE   rT   rb   )rG   r)   rH   s     €r:   rT   z MBartScaledWordEmbedding.forwardz   s   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<Ñ<Ð<r<   )ç      ð?©rW   rX   rY   rZ   r[   ÚfloatrF   rO   r\   rT   r]   r^   s   @r:   r`   r`   q   sE   ø„ ññ' sð '¸3ð 'ÈSð 'Ð_dÐgkÑ_kõ 'ð= §¡÷ =ñ =r<   r`   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr.   ç      à¿rC   r   r,   ©ÚpÚtrainingr'   )
ÚsizerO   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxro   ru   Ú
contiguous)
ri   rj   rk   rl   rm   rn   ro   rp   Úattn_weightsÚattn_outputs
             r:   Úeager_attention_forwardr~      s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r<   c                   ó  ‡ — e Zd ZdZ	 	 	 	 	 	 ddedededededed	edz  d
edz  fˆ fd„Z	 	 	 dde	j                  de	j                  dz  dedz  de	j                  dz  dee   dee	j                  e	j                  dz  f   fd„Zˆ xZS )ÚMBartAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsro   Ú
is_decoderÚbiasÚ	is_causalÚconfigÚ	layer_idxc	                 óŽ  •— t         ‰	| �  «        || _        || _        || _        ||z  | _        || _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _	        || _
        || _        |€9| j                  r-t        j                  d| j                  j                  › d�«       t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        t!        j"                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rr   zInstantiating a decoder z¸ without passing `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„   )rE   rF   r�   r‚   ro   Úhead_dimr†   r0   rn   rƒ   r…   r‡   ÚloggerÚwarning_oncerH   rW   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
rG   r�   r‚   ro   rƒ   r„   r…   r†   r‡   rH   s
            €r:   rF   zMBartAttention.__init__Ÿ   s$  ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒØ"ˆŒØÐ §¢Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôô —i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r<   Úhidden_statesÚkey_value_statesÚpast_key_valuesrm   rp   Úreturnc                 óØ  — |du}|j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }	d}
|�St        |t        «      rA|j                  j                  | j                  «      }
|r|j                  }n|j                  }n|}|r|n|}|rK|�I|
rGj                  | j                     j                  }|j                  | j                     j                  }nÑ| j                  |«      }| j!                  |«      }g |j                   dd ¢d‘| j                  ‘­}|j                  |«      j	                  dd«      }|j                  |«      j	                  dd«      }|�Kj#                  ||| j                  «      \  }}|r)t        |t        «      rd|j                  | j                  <   t%        j&                  | j(                  j*                  t,        «      } || |	|||f| j.                  sdn| j0                  | j2                  dœ|¤Ž\  }} |j4                  g |¢d‘­Ž j7                  «       }| j9                  |«      }||fS )	z#Input shape: Batch x Time x ChannelNr.   r'   rC   FTç        )ro   rn   )rN   rŠ   r�   Úviewrx   Ú
isinstancer   Ú
is_updatedÚgetr‡   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrŽ   r�   Úupdater   Úget_interfacer†   Ú_attn_implementationr~   ru   ro   rn   Úreshaper{   r‘   )rG   r’   r“   r”   rm   rp   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesrš   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacer}   r|   s                      r:   rT   zMBartAttention.forwardÆ   sd  € ð .°TÐ9Ðð $×)Ñ)¨#¨2Ð.ˆà8˜Ð8 bÐ8¨$¯-©-Ñ8ˆð —{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×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ØF˜×-Ñ-¨c¨rÐ2ÐF°BÐF¸¿¹ÑFˆHØ#Ÿ™¨Ó2×<Ñ<¸QÀÓBˆJØ'×,Ñ,¨XÓ6×@Ñ@ÀÀAÓFˆLàÐ*Ø+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r<   )r—   FTFNN©NNN)rW   rX   rY   rZ   r[   rh   Úboolr(   rF   rO   r\   r   r   r   ÚtuplerT   r]   r^   s   @r:   r€   r€   œ   s  ø„ ÙGð Ø ØØØ%)Ø $ñ%Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ˜dÑ"ð%Cð ˜‘:õ%CðT 15Ø(,Ø.2ñH)à—|‘|ðH)ð  Ÿ,™,¨Ñ-ðH)ð  ™ð	H)ð
 Ÿ™ tÑ+ðH)ð Ð-Ñ.ðH)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷H)r<   r€   c                   ó~   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  dee   dej                  fd„Z	ˆ xZ
S )ÚMBartEncoderLayerr†   c                 óh  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  |¬«      | _        t        j                  | j                  «      | _
        |j                  | _        t        |j                     | _        |j                  | _        t        j                   | j                  |j"                  «      | _        t        j                   |j"                  | j                  «      | _        t        j                  | j                  «      | _        y )N)r�   r‚   ro   r†   )rE   rF   Úd_modelr�   r€   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normro   r
   Úactivation_functionÚactivation_fnÚactivation_dropoutr�   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©rG   r†   rH   s     €r:   rF   zMBartEncoderLayer.__init__  sÑ   ø€ Ü‰ÑÔØŸ™ˆŒä'Ø—n‘nØ×4Ñ4Ø×,Ñ,Øô	
ˆŒô %'§L¡L°·±Ó$@ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔÜ—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr<   r’   rm   rp   r•   c                 ó   — |}| j                  |«      } | j                  d||dœ|¤Ž\  }}t        j                  j	                  || j                  | j
                  ¬«      }||z   }|}| j                  |«      }| j                  | j                  |«      «      }t        j                  j	                  || j                  | j
                  ¬«      }| j                  |«      }t        j                  j	                  || j                  | j
                  ¬«      }||z   }|j                  t        j                  k(  rEt        j                  |j                  «      j                  dz
  }t        j                   || |¬«      }|S )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.
        )r’   rm   rs   iè  )ÚminÚmax© )rº   r¸   r   ry   ro   ru   rÁ   r¼   r¿   r½   rÀ   rL   rO   Úfloat16ÚfinforÅ   Úclamp)rG   r’   rm   rp   ÚresidualÚ_Úclamp_values          r:   rT   zMBartEncoderLayer.forward$  sT  € ð !ˆØ×1Ñ1°-Ó@ˆØ)˜4Ÿ>™>ð 
Ø'Ø)ñ
ð ñ
Ñˆ�qô
 Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆà ˆØ×-Ñ-¨mÓ<ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆà×Ñ¤%§-¡-Ò/ÜŸ+™+ m×&9Ñ&9Ó:×>Ñ>ÀÑEˆKÜ!ŸK™K¨¸K¸<È[ÔYˆMàÐr<   )rW   rX   rY   r(   rF   rO   r\   r   r   rT   r]   r^   s   @r:   r³   r³     sL   ø„ ð=˜{õ =ð$"à—|‘|ð"ð Ÿ™ð"ð Ð+Ñ,ð	"ð
 
�‰÷"r<   r³   c                   óì   ‡ — e Zd Zddededz  fˆ fd„Z	 	 	 	 	 ddej                  dej                  dz  dej                  dz  dej                  dz  d	edz  d
e	dz  de
e   dej                  fd„Zˆ xZS )ÚMBartDecoderLayerNr†   r‡   c           	      ó  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  dd||¬«      | _        |j                  | _        t        |j                     | _        |j                  | _        t        j                  | j                  «      | _        t	        | j                  |j
                  |j                  d||¬«      | _        t        j                  | j                  «      | _        t        j$                  | j                  |j&                  «      | _        t        j$                  |j&                  | j                  «      | _        t        j                  | j                  «      | _        y )NT)r�   r‚   ro   rƒ   r…   r†   r‡   )ro   rƒ   r†   r‡   )rE   rF   rµ   r�   r€   Údecoder_attention_headsr·   r¸   ro   r
   r»   r¼   r½   r   r¹   rº   Úencoder_attnÚencoder_attn_layer_normr�   Údecoder_ffn_dimr¿   rÀ   rÁ   )rG   r†   r‡   rH   s      €r:   rF   zMBartDecoderLayer.__init__J  s   ø€ Ü‰ÑÔØŸ™ˆŒä'Ø—n‘nØ×4Ñ4Ø×,Ñ,ØØØØô
ˆŒð —~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔä$&§L¡L°·±Ó$@ˆÔ!Ü*Ø�N‰NØ×*Ñ*Ø×,Ñ,ØØØô
ˆÔô (*§|¡|°D·N±NÓ'CˆÔ$Ü—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr<   r’   rm   Úencoder_hidden_statesÚencoder_attention_maskr”   Ú	use_cacherp   r•   c                 ó  — |}| j                  |«      } | j                  d|||dœ|¤Ž\  }}	t        j                  j	                  || j                  | j
                  ¬«      }||z   }|�h|}| j                  |«      } | j                  d||||dœ|¤Ž\  }}	t        j                  j	                  || j                  | j
                  ¬«      }||z   }|}| j                  |«      }| j                  | j                  |«      «      }t        j                  j	                  || j                  | j
                  ¬«      }| j                  |«      }t        j                  j	                  || j                  | j
                  ¬«      }||z   }|S )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
        )r’   r”   rm   rs   )r’   r“   rm   r”   rÆ   )rº   r¸   r   ry   ro   ru   rÒ   rÑ   rÁ   r¼   r¿   r½   rÀ   )
rG   r’   rm   rÔ   rÕ   r”   rÖ   rp   rÊ   rË   s
             r:   rT   zMBartDecoderLayer.forwardi  s—  € ð* !ˆØ×1Ñ1°-Ó@ˆð *˜4Ÿ>™>ð 
Ø'Ø+Ø)ñ
ð ñ	
Ñˆ�qô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆð !Ð,Ø$ˆHØ ×8Ñ8¸ÓGˆMà0˜t×0Ñ0ð  Ø+Ø!6Ø5Ø /ñ	 ð
 ñ ÑˆM˜1ô ŸM™M×1Ñ1°-À4Ç<Á<ÐZ^×ZgÑZgÐ1ÓhˆMØ$ }Ñ4ˆMð !ˆØ×-Ñ-¨mÓ<ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆàÐr<   rd   )NNNNT)rW   rX   rY   r(   r[   rF   rO   r\   r   r°   r   r   rT   r]   r^   s   @r:   rÎ   rÎ   I  s°   ø„ ñ=˜{ð =°s¸T±zõ =ðD /3Ø59Ø6:Ø(,Ø!%ñ:à—|‘|ð:ð Ÿ™ tÑ+ð:ð  %Ÿ|™|¨dÑ2ð	:ð
 !&§¡¨tÑ 3ð:ð  ™ð:ð ˜$‘;ð:ð Ð+Ñ,ð:ð 
�‰÷:r<   rÎ   c                   ól   ‡ — e Zd ZdZdedededefˆ fd„Zdej                  dej                  fd	„Z	ˆ xZ
S )
ÚMBartClassificationHeadz-Head for sentence-level classification tasks.Ú	input_dimÚ	inner_dimÚnum_classesÚpooler_dropoutc                 óÄ   •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |¬«      | _        t        j                  ||«      | _        y )N)rt   )rE   rF   r   r�   ÚdenseÚDropoutro   r‘   )rG   rÚ   rÛ   rÜ   rÝ   rH   s        €r:   rF   z MBartClassificationHead.__init__ª  sD   ø€ ô 	‰ÑÔÜ—Y‘Y˜y¨)Ó4ˆŒ
Ü—z‘z NÔ3ˆŒÜŸ	™	 )¨[Ó9ˆ�r<   r’   r•   c                 ó¸   — | j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j	                  |«      }|S rd   )ro   rß   rO   Útanhr‘   )rG   r’   s     r:   rT   zMBartClassificationHead.forward¶  sN   € ØŸ™ ]Ó3ˆØŸ
™
 =Ó1ˆÜŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ mÓ4ˆØÐr<   rg   r^   s   @r:   rÙ   rÙ   §  sL   ø„ Ù7ð
:àð
:ð ð
:ð ð	
:ð
 õ
:ð U§\¡\ð °e·l±l÷ r<   rÙ   c                   óZ   ‡ — e Zd ZU eed<   dZdZg d¢ZdZdZ	dZ
dZˆ fd„Zed„ «       Zˆ xZS )ÚMBartPreTrainedModelr†   ÚmodelT)rÎ   r³   r€   c                 ó„   •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       y y rd   )rE   Ú_init_weightsr™   ÚMBartForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)rG   ri   rH   s     €r:   rç   z"MBartPreTrainedModel._init_weightsÊ  s2   ø€ Ü‰Ñ˜fÔ%Ü�fÔ;Ô<Ü�K‰K˜×0Ñ0Õ1ð =r<   c                 ó®   — | j                   j                  }t        j                  g d¢dddd|gg| j                  ¬«      }|j                  |«      |dœ}|S )N)r   é   é
   é   rC   r   é   é   rC   ©rM   )rm   r)   )r†   r*   rO   ÚtensorrM   r2   )rG   Ú	pad_tokenr)   Údummy_inputss       r:   rõ   z!MBartPreTrainedModel.dummy_inputsÏ  sW   € à—K‘K×,Ñ,ˆ	Ü—L‘LÒ"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZ×VaÑVaÔbˆ	à'Ÿl™l¨9Ó5Ø"ñ
ˆð Ðr<   )rW   rX   rY   r(   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphrç   Úpropertyrõ   r]   r^   s   @r:   rä   rä   ¿  sK   ø… àÓØÐØ&*Ð#ÚTÐØÐØ€NØÐØ!Ðô2ð
 ñó ôr<   rä   c                   óÜ   ‡ — e Zd ZdZe eedd¬«      dœZdefˆ fd„Z	d„ Z
ee	 	 	 dd
ej                  d	z  dej                  d	z  dej                   d	z  dee   deez  f
d„«       «       Zˆ xZS )ÚMBartEncoderzâ
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`MBartEncoderLayer`].

    Args:
        config: MBartConfig
        embed_tokens (nn.Embedding): output embedding
    r'   r¸   ©ÚindexÚ
layer_name)r’   Ú
attentionsr†   c                 óÚ  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  }|j                  | _        |j                  | _	        |j                  rt        j                  |«      nd}t        |j                  || j                  |¬«      | _        t!        |j                  |«      | _        t%        j&                  t)        |j*                  «      D �cg c]  }t-        |«      ‘Œ c}«      | _        || _        t%        j2                  |«      | _        t%        j2                  |j
                  «      | _        d| _        | j;                  «        y c c}w )Nrf   ©rb   F)rE   rF   ro   Úencoder_layerdropÚ	layerdroprµ   r*   ra   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtr`   Ú
vocab_sizeÚembed_tokensr>   Úembed_positionsr   Ú
ModuleListÚrangeÚencoder_layersr³   rž   r†   r¹   Úlayernorm_embeddingÚ
layer_normÚgradient_checkpointingÚ	post_init)rG   r†   r�   rb   rË   rH   s        €r:   rF   zMBartEncoder.__init__é  s  ø€ Ü‰Ñ˜Ô à—~‘~ˆŒØ×1Ñ1ˆŒà—N‘Nˆ	Ø!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø.4×.DÒ.D”d—i‘i 	Ô*È#ˆä4Ø×Ñ˜y¨$×*:Ñ*:Èô
ˆÔô  ?Ø×*Ñ*Øó 
ˆÔô —m‘mÌÈf×NcÑNcÓHdÖ$eÀ1Ô%6°vÕ%>Ò$eÓfˆŒØˆŒÜ#%§<¡<°	Ó#:ˆÔ ÜŸ,™, v§~¡~Ó6ˆŒà&+ˆÔ#à�‰Õùò %fs   Ã-E(c                 ón   — | j                   r)t        | j                  dd«      r| j                  «        y y y )Nr  F)rø   Úgetattrr†   Úgradient_checkpointing_enable©rG   s    r:   Ú._backward_compatibility_gradient_checkpointingz;MBartEncoder._backward_compatibility_gradient_checkpointing  s1   € à×/Ò/´G¸D¿K¹KÐIaÐchÔ4iØ×.Ñ.Õ0ð 5jÐ/r<   Nr)   rm   Úinputs_embedsrp   r•   c                 óh  — |du |duz  rt        d«      ‚|€| j                  |«      }| j                  |d   «      }||j                  |j                  «      z   }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }t        | j                  ||¬«      }t        | j                  «      D ]F  \  }}d}	| j                  r&t        j                  g «      }
|
| j                   k  rd}	|	rŒ= |||fi |¤Ž}ŒH | j#                  |«      }t%        |¬«      S )	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)
            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.
        Nz:You must specify exactly one of input_ids or inputs_embeds).r.   rs   )r†   r  rm   FT)Úlast_hidden_state)r0   r  r  ÚtorM   r  r   ry   ro   ru   r   r†   Ú	enumeraterž   rO   Úrandr  r  r   )rG   r)   rm   r  rp   Ú	embed_posr’   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys              r:   rT   zMBartEncoder.forward
  s5  € ð> ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8ˆMà×(Ñ(¨°wÑ)?Ó@ˆ	à%¨	¯©°]×5IÑ5IÓ(JÑJˆØ×0Ñ0°Ó?ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆä2Ø—;‘;Ø'Ø)ô
ˆô #,¨D¯K©KÓ"8ò 	ÑˆC�àˆGØ�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Ø"�GâÙ -Ø!Ø"ñ!ð ñ!‘ð	ð Ÿ™¨Ó6ˆä°Ô?Ð?r<   r¯   )rW   rX   rY   rZ   r³   r%   r€   Ú_can_record_outputsr(   rF   r  r$   r&   rO   Ú
LongTensorr\   ÚFloatTensorr   r   r±   r   rT   r]   r^   s   @r:   r   r   Ú  sÁ   ø„ ñð +Ù$ ^¸1ÈÔUñÐð
˜{õ ò81ð
  Øð .2Ø.2Ø26ñ	@@à×#Ñ# dÑ*ð@@ð Ÿ™ tÑ+ð@@ð ×(Ñ(¨4Ñ/ð	@@ð
 Ð+Ñ,ð@@ð 
�Ñ	 ò@@ó ó  ô@@r<   r   c                   óB  ‡ — e Zd ZdZe eedd¬«       eedd¬«      dœZdefˆ fd„Z	e
e	 	 	 	 	 	 	 dd
ej                  d	z  dej                  d	z  dej                  d	z  dej                  d	z  ded	z  dej                  d	z  ded	z  dee   deez  fd„«       «       Zˆ xZS )ÚMBartDecoderzÎ
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`MBartDecoderLayer`]

    Args:
        config: MBartConfig
        embed_tokens (nn.Embedding): output embedding
    r'   r¸   r  rÑ   )r’   r  Úcross_attentionsr†   c           	      ó  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  rt        j                  |j                  «      nd}t        |j                  |j                  | j                  |¬«      | _        t!        |j                  |j                  «      | _        t%        j&                  t)        |j*                  «      D �cg c]  }t-        ||¬«      ‘Œ c}«      | _        || _        t%        j2                  |j                  «      | _        t%        j2                  |j                  «      | _        d| _        | j;                  «        y c c}w )Nrf   r  )r‡   F)rE   rF   ro   Údecoder_layerdropr  r*   ra   r	  Úmax_target_positionsr  r  r  rµ   r`   r  r  r>   r  r   r  r  Údecoder_layersrÎ   rž   r†   r¹   r  r  r  r  )rG   r†   rb   ÚirH   s       €r:   rF   zMBartDecoder.__init__^  s   ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø39×3IÒ3I”d—i‘i §¡Ô/Èsˆä4Ø×Ñ˜vŸ~™~¨t×/?Ñ/?È[ô
ˆÔô  ?Ø×*Ñ*Ø�N‰Nó 
ˆÔô —m‘mÔUZÐ[a×[pÑ[pÓUqÖ$rÐPQÔ%6°vÈÖ%KÒ$rÓsˆŒØˆŒä#%§<¡<°·±Ó#?ˆÔ ÜŸ,™, v§~¡~Ó6ˆŒà&+ˆÔ#à�‰Õùò %ss   Ã?FNr)   rm   rÔ   rÕ   r”   r  rÖ   rp   r•   c                 ó¦  — |du |duz  rt        d«      ‚|€| j                  |«      }|rd|€b|€| j                  j                  r4t	        t        | j                  ¬«      t        | j                  ¬«      «      nt        | j                  ¬«      }|j                  «       dd \  }	}
|�|j                  «       nd}t        j                  |
|j                  ¬«      |z   }|€1t        «       s'||
z   }t        j                  |	||j                  ¬«      }t        |t        «      r|j                  n|}t        | j                  |||¬«      }t!        | j                  |||¬«      }| j#                  |||¬	«      }||j%                  |j                  «      z   }| j'                  |«      }t(        j*                  j-                  || j,                  | j.                  ¬
«      }t1        | j2                  «      D ]E  \  }}| j.                  r%t        j4                  g «      }|| j6                  k  rŒ7 ||||f|||dœ|¤Ž}ŒG | j9                  |«      }t;        ||¬«      S )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.
        NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same time)r†   r.   r   rò   )r†   r  rm   r”   )r†   r  rm   rÔ   )rJ   rs   )rÕ   r”   rÖ   )r  r”   )r0   r  r†   Úis_encoder_decoderr   r   rv   Úget_seq_lengthrO   rP   rM   r!   Úonesr™   r�   r   r   r  r   r  r   ry   ro   ru   r!  rž   r"  r  r  r   )rG   r)   rm   rÔ   rÕ   r”   r  rÖ   rp   Ú
batch_sizeÚ
seq_lengthrI   rJ   Úmask_seq_lengthÚself_attn_cacheÚcausal_maskr’   r$  Údecoder_layerr'  s                       r:   rT   zMBartDecoder.forwardx  sZ  € ðn ˜Ð -°tÐ";Ò<ÜÐsÓtÐtàÐ Ø ×-Ñ-¨iÓ8ˆMñ ˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð "/×!3Ñ!3Ó!5°c°rÐ!:Ñˆ
�JØETÐE` ×!?Ñ!?Ô!AÐfgÐÜ—|‘| J°}×7KÑ7KÔLÐOeÑeˆàÐ!Ô*BÔ*Dà4°zÑAˆOÜ"ŸZ™Z¨
°OÈM×L`ÑL`ÔaˆNô ˜/Ô+>Ô?ð ×0Ò0à ð 	ô )Ø—;‘;Ø'Ø)Ø+ô	
ˆô ";Ø—;‘;Ø'Ø1Ø"7ô	"
Ðð ×+Ñ+¨IÐ7MÐ\hÐ+Óiˆà%¨¯©¸×8LÑ8LÓ(MÑMˆØ×0Ñ0°Ó?ˆäŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆä"+¨D¯K©KÓ"8ò 	ÑˆC�à�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øá)ØØØ%ðð (>Ø /Ø#ñð ñ‰Mð	ð" Ÿ™¨Ó6ˆä8Ø+Ø+ô
ð 	
r<   )NNNNNNN)rW   rX   rY   rZ   rÎ   r%   r€   r(  r(   rF   r$   r&   rO   r)  r\   r*  r   r°   r   r   r±   r   rT   r]   r^   s   @r:   r,  r,  O  s  ø„ ñð +Ù$ ^¸1ÈÔUÙ*¨>ÀÈ~Ô^ñÐð˜{õ ð4  Øð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ñ}
à×#Ñ# dÑ*ð}
ð Ÿ™ tÑ+ð}
ð  %×0Ñ0°4Ñ7ð	}
ð
 !&× 0Ñ 0°4Ñ 7ð}
ð  ™ð}
ð ×(Ñ(¨4Ñ/ð}
ð ˜$‘;ð}
ð Ð+Ñ,ð}
ð 
Ð:Ñ	:ò}
ó ó  ô}
r<   r,  c                   ó–  ‡ — e Zd ZdddœZdefˆ fd„Zd„ Zd„ Zee		 	 	 	 	 	 	 	 	 	 dde
j                  dz  d	e
j                  dz  d
e
j                  dz  de
j                  dz  deee
j                        dz  dedz  de
j                  dz  de
j                  dz  dedz  dedz  dee   deee
j                     z  fd„«       «       Zˆ xZS )Ú
MBartModelzshared.weight)zdecoder.embed_tokens.weightzencoder.embed_tokens.weightr†   c                 óJ  •— t         ‰| �  |«       |j                  |j                  }}|j                  rt        j                  |j                  «      nd}t        ||j                  ||¬«      | _	        t        |«      | _        t        |«      | _        | j                  «        y )Nrf   r  )rE   rF   r*   r  r  r  r  rµ   r`   Úsharedr   Úencoderr,  Údecoderr  )rG   r†   ra   r  rb   rH   s        €r:   rF   zMBartModel.__init__  s|   ø€ Ü‰Ñ˜Ô à"(×"5Ñ"5°v×7HÑ7H�ZˆØ39×3IÒ3I”d—i‘i §¡Ô/ÈsˆÜ.¨z¸6¿>¹>È;ÐdoÔpˆŒä# FÓ+ˆŒÜ# FÓ+ˆŒð 	�‰Õr<   c                 ó   — | j                   S rd   )r@  r  s    r:   Úget_input_embeddingszMBartModel.get_input_embeddings  s   € Ø�{‰{Ðr<   c                 ó~   — || _         | j                   | j                  _        | j                   | j                  _        y rd   )r@  rA  r  rB  ©rG   rl   s     r:   Úset_input_embeddingszMBartModel.set_input_embeddings  s)   € ØˆŒØ$(§K¡Kˆ�‰Ô!Ø$(§K¡Kˆ�‰Õ!r<   Nr)   rm   Údecoder_input_idsÚdecoder_attention_maskÚencoder_outputsr”   r  Údecoder_inputs_embedsrÖ   Úreturn_dictrp   r•   c                 óT  — |
�|
n| j                   j                  }
|€"|€ t        || j                   j                  «      }|€ | j                  d	||||
dœ|¤Ž}nI|
rGt        |t        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      } | j                  d	|||d   ||||	|
dœ|¤Ž}|
s||z   S t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  ¬«      S )
a5  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            MBart uses a specific language id token as the starting token for `decoder_input_ids` generation that
            varies according to source and target language, *e.g.* 25004 for *en_XX*, and 25003 for *de_DE*. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        N)r)   rm   r  rL  r   r'   rC   )r  r’   r  )r)   rm   rÔ   rÕ   r”   r  rÖ   rL  )r  r”   Údecoder_hidden_statesÚdecoder_attentionsr-  Úencoder_last_hidden_staterÔ   Úencoder_attentionsrÆ   )r†   rL  r;   r*   rA  r™   r   ÚlenrB  r   r  r”   r’   r  r-  )rG   r)   rm   rH  rI  rJ  r”   r  rK  rÖ   rL  rp   Údecoder_outputss                r:   rT   zMBartModel.forward  sa  € ðJ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð$Ð)>Ð)FÜ 2°9¸d¿k¹k×>VÑ>VÓ WÐàÐ"Ø*˜dŸl™lð Ø#Ø-Ø+Ø'ñ	ð
 ñ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð '˜$Ÿ,™,ð 

Ø'Ø1Ø"1°!Ñ"4Ø#1Ø+Ø/ØØ#ñ

ð ñ

ˆñ Ø" _Ñ4Ð4ä!Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r<   ©
NNNNNNNNNN)rW   rX   rY   Ú_tied_weights_keysr(   rF   rD  rG  r   r   rO   r)  r\   r±   r*  r   r°   r   r   r   rT   r]   r^   s   @r:   r>  r>  ú  s`  ø„ ð (7Ø'6ñÐð
˜{õ òò0ð
 Øð .2Ø.2Ø59Ø:>ØBFØ(,Ø26Ø:>Ø!%Ø#'ñS
à×#Ñ# dÑ*ðS
ð Ÿ™ tÑ+ðS
ð !×+Ñ+¨dÑ2ð	S
ð
 !&× 0Ñ 0°4Ñ 7ðS
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ðS
ð  ™ðS
ð ×(Ñ(¨4Ñ/ðS
ð  %×0Ñ0°4Ñ7ðS
ð ˜$‘;ðS
ð ˜D‘[ðS
ð Ð+Ñ,ðS
ð 
˜e E×$5Ñ$5Ñ6Ñ	6òS
ó ó ôS
r<   r>  z€
    The MBART Model with a language modeling head. Can be used for summarization, after fine-tuning the pretrained models.
    )Úcustom_introc                   ó  ‡ — e Zd ZdZdgZddiZdefˆ fd„Z	 dded	edz  d
e	de
j                  fˆ fd„Zdeddfd„Ze	 	 	 	 	 	 	 	 	 	 	 ddej                   dz  dej"                  dz  dej                   dz  dej                   dz  deeej&                        dz  dedz  dej&                  dz  dej&                  dz  dej                   dz  de	dz  de	dz  dee   deeej&                     z  fd„«       Zdej"                  fd„Zˆ xZS )rè   rå   rë   úlm_head.weightzmodel.shared.weightr†   c                 óx  •— t         ‰| �  |«       t        |«      | _        | j	                  dt        j                  d| j                  j                  j                  f«      «       t        j                  |j                  | j                  j                  j                  d¬«      | _        | j                  «        y )Nrë   r'   Fr‰   )rE   rF   r>  rå   Úregister_bufferrO   Úzerosr@  r?   r   r�   rµ   Úlm_headr  rÂ   s     €r:   rF   z&MBartForConditionalGeneration.__init__x  s€   ø€ Ü‰Ñ˜Ô Ü Ó'ˆŒ
Ø×ÑÐ0´%·+±+¸qÀ$Ç*Á*×BSÑBS×BbÑBbÐ>cÓ2dÔeÜ—y‘y §¡°·±×1BÑ1B×1QÑ1QÐX]Ô^ˆŒð 	�‰Õr<   NÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingr•   c                 óz   •— t         ‰| �  |||«      }| j                  |j                  j                  d   «       |S )Nr   )rE   Úresize_token_embeddingsÚ_resize_final_logits_biasrR   rN   )rG   r]  r^  r_  Únew_embeddingsrH   s        €r:   ra  z5MBartForConditionalGeneration.resize_token_embeddings�  s?   ø€ ô ™Ñ8¸ÐI[Ð]jÓkˆØ×&Ñ& ~×'<Ñ'<×'BÑ'BÀ1Ñ'EÔFØÐr<   c                 ó6  — | j                   j                  d   }||k  r| j                   d d …d |…f   }nSt        j                  d||z
  f| j                   j                  ¬«      }t        j
                  | j                   |gd¬«      }| j                  d|«       y )Nr.   r'   rò   r,   rë   )rë   rN   rO   r[  rM   ÚcatrZ  )rG   r]  Úold_num_tokensÚnew_biasÚ
extra_biass        r:   rb  z7MBartForConditionalGeneration._resize_final_logits_biasˆ  sŒ   € Ø×/Ñ/×5Ñ5°bÑ9ˆØ˜^Ò+Ø×-Ñ-ªa°°.°Ð.@ÑA‰HäŸ™ a¨¸.Ñ)HÐ%IÐRV×RhÑRh×RoÑRoÔpˆJÜ—y‘y $×"8Ñ"8¸*Ð!EÈ1ÔMˆHØ×ÑÐ0°(Õ;r<   r)   rm   rH  rI  rJ  r”   r  rK  ÚlabelsrÖ   rL  rp   c                 ó¢  — |�|n| j                   j                  }|	�=|
rt        j                  d«       d}
|€"|€ t	        |	| j                   j
                  «      } | j                  |f||||||||
|dœ	|¤Ž}| j                  |d   «      | j                  z   }d}|	�Ft        «       } ||j                  d| j                   j                  «      |	j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  ¬«	      S )	u6  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            MBart uses a specific language id token as the starting token for `decoder_input_ids` generation that
            varies according to source and target language, *e.g.* 25004 for *en_XX*, and 25003 for *de_DE*. If
            `past_key_values` is used, optionally only the last `decoder_input_ids` have to be input (see
            `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.
        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 Translation:

        ```python
        >>> from transformers import AutoTokenizer, MBartForConditionalGeneration

        >>> model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-en-ro")
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/mbart-large-en-ro")

        >>> example_english_phrase = "42 is the answer"
        >>> inputs = tokenizer(example_english_phrase, return_tensors="pt")

        >>> # Translate
        >>> generated_ids = model.generate(**inputs, num_beams=4, max_length=5)
        >>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        '42 este rÄƒspuns'
        ```

        Mask filling example:

        ```python
        >>> from transformers import AutoTokenizer, MBartForConditionalGeneration

        >>> model = MBartForConditionalGeneration.from_pretrained("facebook/mbart-large-cc25")
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/mbart-large-cc25")

        >>> # de_DE is the language symbol id <LID> for German
        >>> TXT = "</s> Meine Freunde sind <mask> nett aber sie essen zu viel Kuchen. </s> de_DE"

        >>> input_ids = tokenizer([TXT], add_special_tokens=False, return_tensors="pt")["input_ids"]
        >>> logits = model(input_ids).logits

        >>> masked_index = (input_ids[0] == tokenizer.mask_token_id).nonzero().item()
        >>> probs = logits[0, masked_index].softmax(dim=0)
        >>> values, predictions = probs.topk(5)

        >>> tokenizer.decode(predictions).split()
        ['nett', 'sehr', 'ganz', 'nicht', 'so']
        ```
        NzJThe `use_cache` argument is changed to `False` since `labels` is provided.F)	rm   rH  rJ  rI  r”   r  rK  rÖ   rL  r   r.   r'   ©	ÚlossÚlogitsr”   rN  rO  r-  rP  rÔ   rQ  )r†   rL  r‹   Úwarningr;   r*   rå   r\  rë   r   r˜   r  r   r”   rN  rO  r-  rP  rÔ   rQ  )rG   r)   rm   rH  rI  rJ  r”   r  rK  ri  rÖ   rL  rp   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fctÚoutputs                     r:   rT   z%MBartForConditionalGeneration.forward‘  sv  € ð` &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÙÜ—‘ÐkÔlØˆIØ Ð(Ð-BÐ-JÜ$6°v¸t¿{¹{×?WÑ?WÓ$XÐ!à�$—*‘*Øð
à)Ø/Ø+Ø#9Ø+Ø'Ø"7ØØ#ñ
ð ñ
ˆð —L‘L ¨¡Ó,¨t×/EÑ/EÑEˆ	àˆØÐÜ'Ó)ˆHÙ% i§n¡n°R¸¿¹×9OÑ9OÓ&PÐRX×R]ÑR]Ð^`ÓRaÓbˆNáØ�\ G¨A¨B KÑ/ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r<   c                 óB   — t        || j                  j                  «      S rd   )r;   r†   r*   )rG   ri  s     r:   Ú%prepare_decoder_input_ids_from_labelszCMBartForConditionalGeneration.prepare_decoder_input_ids_from_labels  s   € Ü! &¨$¯+©+×*BÑ*BÓCÐCr<   )NT)NNNNNNNNNNN)rW   rX   rY   r÷   Ú_keys_to_ignore_on_load_missingrU  r(   rF   r[   r°   r   Ú	Embeddingra  rb  r   rO   r)  r\   r±   r*  r   r   r   r   rT   ru  r]   r^   s   @r:   rè   rè   n  sÎ  ø„ ð  ÐØ':Ð&;Ð#Ø*Ð,AÐBÐð˜{õ ð aeñØ!ðØ7:¸T±zðØY]ðà	�‰õð<¸ð <Àó <ð ð .2Ø.2Ø59Ø:>ØBFØ(,Ø26Ø:>Ø*.Ø!%Ø#'ñz
à×#Ñ# dÑ*ðz
ð Ÿ™ tÑ+ðz
ð !×+Ñ+¨dÑ2ð	z
ð
 !&× 0Ñ 0°4Ñ 7ðz
ð ˜u U×%6Ñ%6Ñ7Ñ8¸4Ñ?ðz
ð  ™ðz
ð ×(Ñ(¨4Ñ/ðz
ð  %×0Ñ0°4Ñ7ðz
ð × Ñ  4Ñ'ðz
ð ˜$‘;ðz
ð ˜D‘[ðz
ð Ð+Ñ,ðz
ð 
˜5 ×!2Ñ!2Ñ3Ñ	3òz
ó ðz
ðxD¸E¿L¹L÷ Dr<   rè   z†
    MBart model with a sequence classification/head on top (a linear layer on top of the pooled output) e.g. for GLUE
    tasks.
    c                   óh  ‡ — e Zd Zdefˆ fd„Zee	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  de
ej                     dz  d	ej                  dz  d
ej                  dz  dej                  dz  dedz  dee   deez  fd„«       «       Zˆ xZS )ÚMBartForSequenceClassificationr†   c                 óÜ   •— t        ‰| �  |fi |¤Ž t        |«      | _        t	        |j
                  |j
                  |j                  |j                  «      | _        | j                  «        y rd   )
rE   rF   r>  rå   rÙ   rµ   Ú
num_labelsÚclassifier_dropoutÚclassification_headr  )rG   r†   rp   rH   s      €r:   rF   z'MBartForSequenceClassification.__init__  sZ   ø€ Ü‰Ñ˜Ñ* 6Ò*Ü Ó'ˆŒ
Ü#:Ø�N‰NØ�N‰NØ×ÑØ×%Ñ%ó	$
ˆÔ ð 	�‰Õr<   Nr)   rm   rH  rI  rJ  r  rK  ri  rÖ   rp   r•   c
                 óä  — |�d}	|€$|�"t        d| j                  j                  › �«      ‚ | j                  |f|||||||	dœ|
¤Ž}|d   }|j	                  | j
                  j                  «      j                  |j                  «      }t        t        j                  |j                  d«      «      j                  «       dk(  d«       ||dd…f   }t        |j                  d   |j                  d   z  dk\  d«       |j                  |j!                  d«      d	|j!                  d	«      «      dd…d	dd…f   }| j#                  |«      }d}|��Ê|j                  |j                  «      }| j
                  j$                  €¡| j
                  j&                  dk(  rd
| j
                  _        nv| j
                  j&                  dkD  rL|j(                  t        j*                  k(  s|j(                  t        j,                  k(  rd| j
                  _        nd| j
                  _        | j
                  j$                  d
k(  rSt/        «       }| j
                  j&                  dk(  r& ||j1                  «       |j1                  «       «      }n– |||«      }nŒ| j
                  j$                  dk(  rGt3        «       } ||j                  d	| j
                  j&                  «      |j                  d	«      «      }n,| j
                  j$                  dk(  rt5        «       } |||«      }t7        |||j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  ¬«	      S )aõ  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            Bart uses the `eos_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.

            If you want to change padding behavior, you should read [`modeling_bart._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        NFz8Passing input embeddings is currently not supported for ©rm   rH  rI  rJ  r  rK  rÖ   r   r'   z7All examples must have the same number of <eos> tokens.z3Each example must contain at least one <eos> token.r.   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrk  )#ÚNotImplementedErrorrH   rW   rå   Úeqr†   Úeos_token_idr   rM   r#   rO   Úunique_consecutiver3   ÚnumelrN   r˜   rv   r}  Úproblem_typer{  rL   rQ   r[   r   r6   r   r   r   r”   rN  rO  r-  rP  rÔ   rQ  )rG   r)   rm   rH  rI  rJ  r  rK  ri  rÖ   rp   ro  r’   Úeos_maskÚselectedÚsentence_representationrm  rl  rr  s                      r:   rT   z&MBartForSequenceClassification.forward&  s	  € ðT ÐØˆIàÐ Ð!:Ü%ØJÈ4Ï>É>×KbÑKbÐJcÐdóð ð '1 d§j¡jØð
'
à)Ø/Ø#9Ø+Ø'Ø"7Øñ
'
ð ñ
'
ˆð   ™
ˆà—<‘< §¡× 8Ñ 8Ó9×<Ñ<¸]×=QÑ=QÓRˆäÜ×$Ñ$ X§\¡\°!£_Ó5×;Ñ;Ó=ÀÑBØEô	
ð ! ª1 Ñ-ˆÜØ�N‰N˜1Ñ ×!4Ñ!4°QÑ!7Ñ7¸1Ñ<ØAô	
ð #+§-¡-°×0BÑ0BÀ1Ó0EÀrÈ=×K]ÑK]Ð^`ÓKaÓ"bÒcdÐfhÒjkÐckÑ"lÐØ×)Ñ)Ð*AÓBˆàˆØÑØ—Y‘Y˜vŸ}™}Ó-ˆFØ�{‰{×'Ñ'Ð/Ø—;‘;×)Ñ)¨QÒ.Ø/;�D—K‘KÕ,Ø—[‘[×+Ñ+¨aÒ/°V·\±\ÄUÇZÁZÒ5OÐSY×S_ÑS_Ôch×clÑclÒSlØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—;‘;×)Ñ)¨QÒ.Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±×0FÑ0FÓ GÈÏÉÐUWËÓY‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ä.ØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r<   )	NNNNNNNNN)rW   rX   rY   r(   rF   r   r   rO   r)  r\   Úlistr*  r°   r   r   r±   r   rT   r]   r^   s   @r:   ry  ry    s,  ø„ ð˜{õ ð Øð .2Ø.2Ø59Ø:>Ø:>Ø26Ø:>Ø*.Ø!%ñl
à×#Ñ# dÑ*ðl
ð Ÿ™ tÑ+ðl
ð !×+Ñ+¨dÑ2ð	l
ð
 !&× 0Ñ 0°4Ñ 7ðl
ð ˜e×/Ñ/Ñ0°4Ñ7ðl
ð ×(Ñ(¨4Ñ/ðl
ð  %×0Ñ0°4Ñ7ðl
ð × Ñ  4Ñ'ðl
ð ˜$‘;ðl
ð Ð+Ñ,ðl
ð 
Ð0Ñ	0òl
ó ó ôl
r<   ry  c                   ó‚  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  de	ej                     dz  dej                  dz  d	ej                  dz  d
ej                  dz  dej                  dz  dedz  dee   deez  fd„«       «       Zˆ xZS )ÚMBartForQuestionAnsweringc                 óò   •— t         ‰| �  |«       d|_        |j                  | _        t        |«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y rB   )
rE   rF   r{  r>  rå   r   r�   Úhidden_sizeÚ
qa_outputsr  rÂ   s     €r:   rF   z"MBartForQuestionAnswering.__init__š  s[   ø€ Ü‰Ñ˜Ô àˆÔØ ×+Ñ+ˆŒä Ó'ˆŒ
ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr<   Nr)   rm   rH  rI  rJ  Ústart_positionsÚend_positionsr  rK  rÖ   rp   r•   c                 óD  — |�|�d}
 | j                   |f||||||	|
dœ|¤Ž}|d   }| j                  |«      }|j                  dd¬«      \  }}|j                  d«      j	                  «       }|j                  d«      j	                  «       }d}|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   d	z  }t        ||||j                  |j                  |j                  |j                  |j                  |j                  |j                   ¬
«
      S )aË  
        decoder_input_ids (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Indices of decoder input sequence tokens in the vocabulary.

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

            [What are decoder input IDs?](../glossary#decoder-input-ids)

            Bart uses the `eos_token_id` as the starting token for `decoder_input_ids` generation. If `past_key_values`
            is used, optionally only the last `decoder_input_ids` have to be input (see `past_key_values`).

            For translation and summarization training, `decoder_input_ids` should be provided. If no
            `decoder_input_ids` is provided, the model will create this tensor by shifting the `input_ids` to the right
            for denoising pre-training following the paper.
        decoder_attention_mask (`torch.LongTensor` of shape `(batch_size, target_sequence_length)`, *optional*):
            Default behavior: generate a tensor that ignores pad tokens in `decoder_input_ids`. Causal mask will also
            be used by default.

            If you want to change padding behavior, you should read [`modeling_bart._prepare_decoder_attention_mask`]
            and modify to your needs. See diagram 1 in [the paper](https://huggingface.co/papers/1910.13461) for more
            information on the default strategy.
        NFr  r   r'   r.   r,   )Úignore_indexrC   )
rl  Ústart_logitsÚ
end_logitsr”   rN  rO  r-  rP  rÔ   rQ  )rå   r‘  Úsplitr6   r{   rR  rv   rÉ   r   r   r”   rN  rO  r-  rP  rÔ   rQ  )rG   r)   rm   rH  rI  rJ  r’  r“  r  rK  rÖ   rp   ro  Úsequence_outputrm  r–  r—  Ú
total_lossÚignored_indexrr  Ú
start_lossÚend_losss                         r:   rT   z!MBartForQuestionAnswering.forward¦  sÄ  € ðP Ð&¨=Ð+DØˆIà&0 d§j¡jØð
'
à)Ø/Ø#9Ø+Ø'Ø"7Øñ
'
ð ñ
'
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä2ØØ%Ø!Ø#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô
ð 	
r<   rT  )rW   rX   rY   rF   r   r   rO   r\   r)  rŒ  r*  r°   r   r   r±   r   rT   r]   r^   s   @r:   rŽ  rŽ  ˜  s<  ø„ ô
ð Øð *.Ø.2Ø59Ø:>Ø:>Ø37Ø15Ø26Ø:>Ø!%ñW
à—<‘< $Ñ&ðW
ð Ÿ™ tÑ+ðW
ð !×+Ñ+¨dÑ2ð	W
ð
 !&× 0Ñ 0°4Ñ 7ðW
ð ˜e×/Ñ/Ñ0°4Ñ7ðW
ð ×)Ñ)¨DÑ0ðW
ð ×'Ñ'¨$Ñ.ðW
ð ×(Ñ(¨4Ñ/ðW
ð  %×0Ñ0°4Ñ7ðW
ð ˜$‘;ðW
ð Ð+Ñ,ðW
ð 
Ð4Ñ	4òW
ó ó ôW
r<   rŽ  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚMBartDecoderWrapperz½
    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.
    c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rd   )rE   rF   r,  rB  r  rÂ   s     €r:   rF   zMBartDecoderWrapper.__init__
  s&   ø€ Ü‰Ñ˜Ô Ü# FÓ+ˆŒØ�‰Õr<   c                 ó&   —  | j                   |i |¤ŽS rd   )rB  )rG   Úargsrp   s      r:   rT   zMBartDecoderWrapper.forward  s   € Øˆt�|‰|˜TÐ, VÑ,Ð,r<   )rW   rX   rY   rZ   rF   rT   r]   r^   s   @r:   rŸ  rŸ    s   ø„ ñô
ö
-r<   rŸ  c                   ó\  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 dde	j                  dz  de	j                  dz  d	e	j                  dz  d
e	j                  dz  dedz  de	j                  dz  de	j                  dz  dedz  dee	j                  z  dee   deez  fd„«       «       Zˆ xZS )ÚMBartForCausalLMrX  z!model.decoder.embed_tokens.weightc                 óâ   •— d|_         d|_        t        ‰| �  |«       t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        | j                  «        y )NTFr‰   )rƒ   r4  rE   rF   rŸ  rå   r   r�   r�  r  r\  r  rÂ   s     €r:   rF   zMBartForCausalLM.__init__  sX   ø€ Ø ˆÔØ$)ˆÔ!Ü‰Ñ˜Ô Ü(¨Ó0ˆŒ
ä—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr<   c                 óB   — | j                   j                  j                  S rd   ©rå   rB  r  r  s    r:   rD  z%MBartForCausalLM.get_input_embeddings$  s   € Ø�z‰z×!Ñ!×.Ñ.Ð.r<   c                 ó:   — || j                   j                  _        y rd   r§  rF  s     r:   rG  z%MBartForCausalLM.set_input_embeddings'  s   € Ø*/ˆ�
‰
×ÑÕ'r<   Nr)   rm   rÔ   rÕ   r”   r  ri  rÖ   Úlogits_to_keeprp   r•   c
                 ó  —  | j                   j                  d|||||||dœ|
¤Ž}|d   }t        |	t        «      rt	        |	 d«      n|	}| j                  |dd…|dd…f   «      }d}|�a|j                  |j                  «      }t        «       } ||j                  d| j                  j                  «      |j                  d«      «      }t        |||j                  |j                  |j                  |j                   ¬«      S )aP  
        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 AutoTokenizer, MBartForCausalLM

        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/mbart-large-cc25")
        >>> model = MBartForCausalLM.from_pretrained("facebook/mbart-large-cc25")
        >>> assert model.config.is_decoder, f"{model.__class__} has to be configured as a decoder."
        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> expected_shape = [1, inputs.input_ids.shape[-1], model.config.vocab_size]
        >>> list(logits.shape) == expected_shape
        True
        ```)r)   rm   rÔ   rÕ   r”   r  rÖ   r   Nr.   )rl  rm  r”   r’   r  r-  rÆ   )rå   rB  r™   r[   Úslicer\  r   rM   r   r˜   r†   r  r   r”   r’   r  r-  )rG   r)   rm   rÔ   rÕ   r”   r  ri  rÖ   r©  rp   ro  r’   Úslice_indicesrm  rl  rr  s                    r:   rT   zMBartForCausalLM.forward*  s  € ðL >P¸T¿Z¹Z×=OÑ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øñ	>
ð ñ	>
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ—Y‘Y˜vŸ}™}Ó-ˆFÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r<   )	NNNNNNNNr   )rW   rX   rY   rU  rF   rD  rG  r   r   rO   r)  r\   r*  r   r°   r[   r   r   r±   r   rT   r]   r^   s   @r:   r¤  r¤    s/  ø„ àÐ=ðÐô	ò/ò0ð Øð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø-.ñA
à×#Ñ# dÑ*ðA
ð Ÿ™ tÑ+ðA
ð  %×0Ñ0°4Ñ7ð	A
ð
 !&× 1Ñ 1°DÑ 8ðA
ð  ™ðA
ð ×(Ñ(¨4Ñ/ðA
ð × Ñ  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
Ð2Ñ	2òA
ó ó ôA
r<   r¤  )r¤  rè   rŽ  ry  r>  rä   )Nr—   )RrZ   r  Úcollections.abcr   rO   r   Útorch.nnr   r   r   Ú r	   ré   Úactivationsr
   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r    r!   r"   r#   Úutils.genericr$   Úutils.output_capturingr%   r&   Úconfiguration_mbartr(   Ú
get_loggerrW   r‹   r\   r[   r;   rw  r>   r`   ÚModulerh   r~   r€   r³   rÎ   rÙ   rä   r   r,  r>  rè   ry  rŽ  rŸ  r¤  Ú__all__rÆ   r<   r:   ú<module>rÀ     sy  ðñ ã Ý $ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß Jõõ :÷÷ ñ ÷ GÝ &÷÷ ñ õ 8ß EÝ ,ñ  Ô!Øð 
ˆ×	Ñ	˜HÓ	%€ð %§,¡,ð ¸có ô*; b§l¡lô ;ô8
=˜rŸ|™|ô 
=ð( !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô:r)�R—Y‘Yô r)ôj5Ð2ô 5ôpZÐ2ô Zô|˜bŸi™iô ð0 ô˜?ó ó ðô4r@Ð'ô r@ôjh
Ð'ô h
ðV ôp
Ð%ó p
ó ðp
ñf ðôô
\DÐ$8¸/ó \Dóð
\Dñ~ ðôô}
Ð%9ó }
óð}
ð@ ôg
Ð 4ó g
ó ðg
ôV-Ð.ô -ô Y
Ð+¨_ô Y
òx�r<   