ó
    ˆŽ¡j¾  ã                   óð  • S SK r S SKJr  S SKrS SKJr  S SKJrJrJr  SSK	J
r  SSKJr  SSKJrJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJrJrJrJrJ r J!r!  SSK"J#r#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,J-r-  SSK.J/r/  SSK0J1r1J2r2  SSK3J4r4  \,Rj                  " \65      r7 " S S\Rp                  5      r9\) " S S\$5      5       r: " S S\Rp                  5      r;  SBS\Rx                  S\Rz                  S\Rz                  S\Rz                  S\Rz                  S-  S \>S-  S!\>S"\&\(   4S# jjr? " S$ S%\Rx                  5      r@ " S& S'\5      rA " S( S)\:5      rB " S* S+\5      rC " S, S-\:5      rDS.\Rz                  S/\E4S0 jrF\) " S1 S2\:5      5       rG\)" S3S49 " S5 S6\:\5      5       rH " S7 S8\Rx                  5      rI\)" S9S49 " S: S;\:5      5       rJ " S< S=\:5      rK\)" S>S49 " S? S@\:\5      5       rL/ SAQrMg)Cé    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ÚSeq2SeqSequenceClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_torchdynamo_compilingÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )ÚPLBartConfigc            
       ór   ^ • \ rS rSrSrSS\S\S\S\S-  4U 4S jjjrS	\R                  4U 4S
 jjr
SrU =r$ )ÚPLBartScaledWordEmbeddingé=   zT
This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
Únum_embeddingsÚembedding_dimÚpadding_idxÚembed_scaleNc                 ó2   >• [         TU ]  XU5        X@l        g ©N)ÚsuperÚ__init__r-   )Úselfr*   r+   r,   r-   Ú	__class__s        €Ú¸C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/plbart/modeling_plbart.pyr1   Ú"PLBartScaledWordEmbedding.__init__B   s   ø€ Ü‰Ñ˜¸ÔDØ&Õó    Ú	input_idsc                 ó<   >• [         TU ]  U5      U R                  -  $ r/   )r0   Úforwardr-   )r2   r7   r3   s     €r4   r9   Ú!PLBartScaledWordEmbedding.forwardF   s   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<Ñ<Ð<r6   ©r-   )ç      ð?©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚfloatr1   ÚtorchÚTensorr9   Ú__static_attributes__Ú__classcell__©r3   s   @r4   r(   r(   =   sJ   ø† ññ' sð '¸3ð 'ÈSð 'Ð_dÐgkÑ_k÷ 'ð 'ð= §¡÷ =õ =r6   r(   c                   óP   ^ • \ rS rSr% \\S'   SrSrSS/rSr	Sr
SrU 4S jrSrU =r$ )	ÚPLBartPreTrainedModeléJ   ÚconfigÚmodelTÚPLBartDecoderLayerÚPLBartEncoderLayerc                 ó�   >• [         TU ]  U5        [        U[        5      (       a!  [        R
                  " UR                  5        g g r/   )r0   Ú_init_weightsÚ
isinstanceÚPLBartForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)r2   Úmoduler3   s     €r4   rR   Ú#PLBartPreTrainedModel._init_weightsT   s5   ø€ Ü‰Ñ˜fÔ%Ü�fÔ<×=Ñ=Ü�KŠK˜×0Ñ0Õ1ð >r6   © )r>   r?   r@   rA   r&   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnrR   rG   rH   rI   s   @r4   rK   rK   J   s<   ø‡ àÓØÐØ&*Ð#Ø-Ð/CÐDÐØÐØ€NØÐ÷2ó 2r6   rK   c                   óˆ   ^ • \ rS rSrSrS\S\4U 4S jjr SS\R                  S\S	\R                  S-  4U 4S
 jjjr	Sr
U =r$ )Ú PLBartLearnedPositionalEmbeddingéZ   zF
This module learns positional embeddings up to a fixed maximum size.
r*   r+   c                 óL   >• SU l         [        TU ]	  XR                   -   U5        g )Né   )Úoffsetr0   r1   )r2   r*   r+   r3   s      €r4   r1   Ú)PLBartLearnedPositionalEmbedding.__init___   s"   ø€ ð ˆŒÜ‰Ñ˜¯+©+Ñ5°}ÕEr6   Nr7   Úpast_key_values_lengthÚposition_idsc                 ó  >• Uc]  UR                   SS u  pE[        R                  " X"U-   [        R                  U R                  R
                  S9R                  US5      nOUR                  S5      n[        TU ]%  X0R                  -   5      $ )z3`input_ids' shape is expected to be [bsz x seqlen].Nrf   )ÚdtypeÚdeviceéÿÿÿÿr   )ÚshaperE   ÚarangeÚlongÚweightrm   ÚexpandÚ	unsqueezer0   r9   rg   )r2   r7   ri   rj   ÚbszÚseq_lenr3   s         €r4   r9   Ú(PLBartLearnedPositionalEmbedding.forwarde   s�   ø€ ð
 ÑØ$Ÿ?™?¨2¨AÐ.‰LˆCÜ Ÿ<š<Ø&ÀÑ(HÔPU×PZÑPZÐcg×cnÑcn×cuÑcuñç‰f�S˜"‹oñ ð (×1Ñ1°!Ó4ˆLä‰w‰˜|¯k©kÑ9Ó:Ð:r6   )rg   )r   N)r>   r?   r@   rA   rB   rC   r1   rE   rF   r9   rG   rH   rI   s   @r4   rc   rc   Z   sW   ø† ñðF sð F¸3÷ Fð mqñ;ØŸ™ð;Ø?Bð;ØV[×VbÑVbÐeiÑVi÷;ö ;r6   rc   rX   ÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 óŽ  • Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X„-   n[        R
                  R                  USS9n[        R
                  R                  X†U R                  S9n[        R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )Nrn   ç      à¿rf   r   ©Údim©ÚpÚtrainingr%   )
ÚsizerE   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr}   r…   Ú
contiguous)
rX   rx   ry   rz   r{   r|   r}   r~   Úattn_weightsÚattn_outputs
             r4   Úeager_attention_forwardrŽ   u   s±   € ð �Ø—*‘*˜R“. DÑ(ˆô —<’< §}¡}°Q¸Ó':Ó;¸gÑE€LàÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2Ð(Ð>€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$r6   c                   ó$  ^ • \ rS rSrSr      SS\S\S\S\S\S	\S
\S-  S\S-  4U 4S jjjr	   SS\
R                  S\
R                  S-  S\S-  S\
R                  S-  S\\   S\\
R                  \
R                  S-  4   4S jjrSrU =r$ )ÚPLBartAttentioné‘   z=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsr}   Ú
is_decoderÚbiasÚ	is_causalrM   Ú	layer_idxc	                 ót  >• [         T	U ]  5         Xl        X l        X0l        X-  U l        Xpl        U R
                  U-  U R                  :w  a  [        SU R                   SU S35      eU R
                  S-  U l        X@l	        X`l
        X€l        Uc>  U R                  (       a-  [        R                  SU R                  R                   S35        [         R"                  " XUS9U l        [         R"                  " XUS9U l        [         R"                  " XUS9U l        [         R"                  " XUS9U l        g )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).r€   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•   )r0   r1   r’   r“   r}   Úhead_dimrM   Ú
ValueErrorr|   r”   r–   r—   ÚloggerÚwarning_oncer3   r>   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
r2   r’   r“   r}   r”   r•   r–   rM   r—   r3   s
            €r4   r1   ÚPLBartAttention.__init__”   s  ø€ ô 	‰ÑÔØ"ŒØ"ŒØŒØ!Ñ.ˆŒØŒà�M‰M˜IÑ%¨$¯.©.Ó8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ŒØ"ŒØ"ŒØÑ §§Ü×ÑØ*¨4¯>©>×+BÑ+BÐ*Cð D,ð ,ôô —i’i 	¸4Ñ@ˆŒÜ—i’i 	¸4Ñ@ˆŒÜ—i’i 	¸4Ñ@ˆŒÜŸ	š	 )¸TÑBˆ�r6   Úhidden_statesÚkey_value_statesÚpast_key_valuesr{   r~   Úreturnc                 ó,  • USLnUR                   SS n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      n	Sn
Ub]  [        U[        5      (       aF  UR                  R                  U R                  5      n
U(       a  UR                  nOUR                  nOUnU(       a  UOUnU(       aQ  UbN  U
(       aG  WR                  U R                     R                  nUR                  U R                     R                  nOÚU R                  U5      nU R!                  U5      n/ UR                   SS QSPU R                  P7nUR                  U5      R	                  SS5      nUR                  U5      R	                  SS5      nUbS  WR#                  XÞU R                  5      u  pÞU(       a.  [        U[        5      (       a  SUR                  U R                  '   [$        R&                  " U R(                  R*                  [,        5      nU" U U	UUU4U R.                  (       d  SOU R0                  U R2                  S.UD6u  nnUR4                  " / UQSP76 R7                  5       nU R9                  U5      nUU4$ )	z#Input shape: Batch x Time x ChannelNrn   r%   rf   FTç        )r}   r|   )ro   rš   r¡   Úviewrˆ   rS   r   Ú
is_updatedÚgetr—   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrŸ   r    Úupdater   Úget_interfacerM   Ú_attn_implementationrŽ   r…   r}   r|   Úreshaper‹   r¢   )r2   r¤   r¥   r¦   r{   r~   Ú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                      r4   r9   ÚPLBartAttention.forward»   sc  € ð .°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Ðae×aoÑaoÓ+pÑ(�
æ%¬*°_ÔFY×*ZÑ*ZØAE�O×.Ñ.¨t¯~©~Ñ>ä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}Ÿ}‘C°$·,±,Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r6   )rM   r}   r’   rš   r–   r”   rŸ   r—   r“   r¢   r¡   r|   r    )r©   FTFNN©NNN)r>   r?   r@   rA   rB   rC   rD   Úboolr&   r1   rE   rF   r   r   r   Útupler9   rG   rH   rI   s   @r4   r�   r�   ‘   s  ø† ÙGð Ø ØØØ&*Ø $ñ%Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ˜tÑ#ð%Cð ˜‘:÷%Cð %CðT 15Ø(,Ø.2ñH)à—|‘|ðH)ð  Ÿ,™,¨Ñ-ðH)ð  ™ð	H)ð
 Ÿ™ tÑ+ðH)ð Ð-Ñ.ðH)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷H)ó H)r6   r�   c                   óš   ^ • \ rS rSrSS\S\S-  4U 4S jjjrS\R                  S\R                  S\	\
   S	\R                  4S
 jrSrU =r$ )rP   i  NrM   r—   c                 ól  >• [         TU ]  5         UR                  U l        [	        U R                  UR
                  UR                  UUS9U l        [        R                  " U R                  5      U l
        UR                  U l        [        UR                     U l        UR                  U l        [        R                   " U R                  UR"                  5      U l        [        R                   " UR"                  U R                  5      U l        [        R                  " U R                  5      U l        g )N)r’   r“   r}   rM   r—   )r0   r1   Úd_modelr’   r�   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normr}   r
   Úactivation_functionÚactivation_fnÚactivation_dropoutrž   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©r2   rM   r—   r3   s      €r4   r1   ÚPLBartEncoderLayer.__init__  sÔ   ø€ Ü‰ÑÔØŸ™ˆŒä(Ø—n‘nØ×4Ñ4Ø×,Ñ,ØØñ
ˆŒô %'§L¢L°·±Ó$@ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔÜ—9’9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9’9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¢¨T¯^©^Ó <ˆÕr6   r¤   r{   r~   r§   c                 ó2  • UnU R                   " U4SU0UD6u  p[        R                  R                  XR                  U R                  S9nXA-   nU R                  U5      nUnU R                  U R                  U5      5      n[        R                  R                  XR                  U R                  S9nU R                  U5      n[        R                  R                  XR                  U R                  S9nXA-   nU R                  U5      nUR                  [        R                  :X  al  [        R                  " U5      R                  5       (       dC  [        R                   " UR                  5      R"                  S-
  n[        R$                  " X* US9nU$ )Nr{   rƒ   iè  )ÚminÚmax)rÉ   r   r‰   r}   r…   rË   rÍ   rÐ   rÎ   rÑ   rÒ   rl   rE   Úfloat16ÚisfiniteÚallÚfinfor×   Úclamp)r2   r¤   r{   r~   ÚresidualÚ_Úclamp_values          r4   r9   ÚPLBartEncoderLayer.forward  s[  € ð !ˆØŸ>š>Øñ
à)ð
ð ñ
Ñˆô
 Ÿ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÐdˆØ Ñ0ˆØ×1Ñ1°-Ó@ˆà ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m×?VÑ?VÐae×anÑanÐ-ÐoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÐdˆØ Ñ0ˆØ×-Ñ-¨mÓ<ˆà×Ñ¤%§-¡-Ó/¼¿ºÀ}Ó8U×8YÑ8Y×8[Ñ8[ÜŸ+š+ m×&9Ñ&9Ó:×>Ñ>ÀÑEˆKÜ!ŸKšK¨¸<È[ÑYˆMàÐr6   )	rÎ   rÍ   r}   r’   rÐ   rÑ   rÒ   rÉ   rË   r/   )r>   r?   r@   rA   r&   rC   r1   rE   ÚFloatTensorr   r   rF   r9   rG   rH   rI   s   @r4   rP   rP     se   ø† ñ=˜|ð =¸¸d¹
÷ =ð =ð&à×(Ñ(ðð ×)Ñ)ðð Ð+Ñ,ð	ð
 
�‰÷ò r6   rP   c                   óØ   ^ • \ rS rSrSr\\S.rS\4U 4S jjr	\
\\   SS\R                  S-  S\R                  S-  S	\R                   S-  S
\\   S\4
S jj5       5       5       rSrU =r$ )ÚPLBartEncoderi9  zÌ
Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
[`PLBartEncoderLayer`].

Args:
    config: PLBartConfig
    embed_tokens (nn.Embedding): output embedding
)r¤   Ú
attentionsrM   c           
      óŽ  >• [         TU ]  U5        UR                  U l        UR                  U l        UR
                  nUR                  U l        UR                  U l	        UR                  (       a  [        R                  " U5      OSn[        UR                  X R                  US9U l        [!        UR                  U5      U l        [$        R&                  " [)        UR*                  5       Vs/ s H  n[-        XS9PM     sn5      U l        [$        R0                  " U5      U l        SU l        U R7                  5         g s  snf ©Nr<   r;   )r—   F)r0   r1   r}   Úencoder_layerdropÚ	layerdroprÆ   Úpad_token_idr,   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtr(   Ú
vocab_sizeÚembed_tokensrc   Úembed_positionsr   Ú
ModuleListÚrangeÚencoder_layersrP   r¯   rÊ   Úlayernorm_embeddingÚgradient_checkpointingÚ	post_init)r2   rM   r’   r-   Úir3   s        €r4   r1   ÚPLBartEncoder.__init__H  s  ø€ Ü‰Ñ˜Ô à—~‘~ˆŒØ×1Ñ1ˆŒà—N‘Nˆ	Ø!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø.4×.D×.D”d—i’i 	Ô*È#ˆä5Ø×Ñ˜y×*:Ñ*:Èñ
ˆÔô  @Ø×*Ñ*Øó 
ˆÔô —m’mÔV[Ð\b×\qÑ\qÔVrÓ$sÒVrÐQRÔ%7¸Ô%LÑVrÑ$sÓtˆŒÜ#%§<¢<°	Ó#:ˆÔ à&+ˆÔ#à�‰Õùò %ts   Ã0ENr7   r{   Úinputs_embedsr~   r§   c                 óh  • US L US L-  (       a  [        S5      eUc  U R                  U5      nU R                  US S 2S S 2S4   5      nUR                  UR                  5      nX5-   nU R                  U5      n[        R                  R                  X`R                  U R                  S9n[        U R                  UUS9n[        U R                  5       HR  u  pxSn	U R                  (       a'  [        R                  " / 5      n
X R                   :  a  Sn	U	(       a  MH  U" UU40 UD6nMT     [#        US9$ )Nz:You must specify exactly one of input_ids or inputs_embedsrn   rƒ   )rM   rú   r{   FT)Úlast_hidden_state)r›   rð   rñ   Útorm   rõ   r   r‰   r}   r…   r   rM   Ú	enumerater¯   rE   Úrandrè   r   )r2   r7   r{   rú   r~   Ú	embed_posr¤   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys              r4   r9   ÚPLBartEncoder.forwardb  s,  € ð ˜Ð -°tÐ";×<ÜÐYÓZÐZàÑ Ø ×-Ñ-¨iÓ8ˆMà×(Ñ(¨²qº!¸R°xÑ)@ÓAˆ	Ø—L‘L ×!5Ñ!5Ó6ˆ	à%Ñ1ˆØ×0Ñ0°Ó?ˆÜŸ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-Ðdˆä2Ø—;‘;Ø'Ø)ñ
ˆô
 #,¨D¯K©KÖ"8ÑˆCàˆGØ�}�}Ü&+§j¢j°£nÐ#Ø&¯©Ó7Ø"�Gç�7Ù -Ø!Ø"ñ!ð ñ!’ñ #9ô Ø+ñ
ð 	
r6   )	r}   rñ   rð   rö   rè   rõ   r¯   rë   r,   rÁ   )r>   r?   r@   rA   rB   rP   r�   Ú_can_record_outputsr&   r1   r"   r$   r   rE   Ú
LongTensorrF   rá   r   r   r   r9   rG   rH   rI   s   @r4   rã   rã   9  s¨   ø† ñð ,Ø%ñÐð
˜|÷ ð4  ØØð .2Ø.2Ø26ñ	*
à×#Ñ# dÑ*ð*
ð Ÿ™ tÑ+ð*
ð ×(Ñ(¨4Ñ/ð	*
ð
 Ð+Ñ,ð*
ð 
ô*
ó ó ó  ö*
r6   rã   c                   óþ   ^ • \ rS rSrSS\S\S-  4U 4S jjjr     SS\R                  S\R                  S-  S\R                  S-  S	\R                  S-  S
\	S-  S\
S-  S\\   S\R                  4S jjrSrU =r$ )rO   i’  NrM   r—   c           
      ó  >• [         TU ]  5         UR                  U l        [	        U R                  UR
                  UR                  SSUUS9U l        UR                  U l        [        UR                     U l        UR                  U l        [        R                  " U R                  5      U l        [	        U R                  UR
                  UR                  SUUS9U l        [        R                  " U R                  5      U l        [        R$                  " U R                  UR&                  5      U l        [        R$                  " UR&                  U R                  5      U l        [        R                  " U R                  5      U l        g )NT)r’   r“   r}   r”   r–   rM   r—   )r}   r”   rM   r—   )r0   r1   rÆ   r’   r�   Údecoder_attention_headsrÈ   rÉ   r}   r
   rÌ   rÍ   rÎ   r   rÊ   rË   Úencoder_attnÚencoder_attn_layer_normrž   Údecoder_ffn_dimrÐ   rÑ   rÒ   rÓ   s      €r4   r1   ÚPLBartDecoderLayer.__init__“  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¯^©^Ó <ˆÕr6   r¤   r{   Úencoder_hidden_statesÚencoder_attention_maskr¦   Ú	use_cacher~   r§   c                 óê  • UnU R                   " U4UUS.UD6u  p[        R                  R                  XR                  U R                  S9nX�-   nU R                  U5      nUbb  UnU R                  " U4UUUS.UD6u  p[        R                  R                  XR                  U R                  S9nX�-   nU R                  U5      nUnU R                  U R                  U5      5      n[        R                  R                  XR                  U R                  S9nU R                  U5      n[        R                  R                  XR                  U R                  S9nX�-   nU R                  U5      nU$ )N)r¦   r{   rƒ   )r¥   r{   r¦   )rÉ   r   r‰   r}   r…   rË   r  r  rÍ   rÐ   rÎ   rÑ   rÒ   )
r2   r¤   r{   r  r  r¦   r  r~   rÝ   rÞ   s
             r4   r9   ÚPLBartDecoderLayer.forward²  s�  € ð !ˆð  Ÿ>š>Øð
à+Ø)ñ
ð ñ	
Ñˆô Ÿ™×-Ñ-¨m¿|¹|ÐVZ×VcÑVcÐ-ÐdˆØ Ñ0ˆØ×1Ñ1°-Ó@ˆð !Ñ,Ø$ˆHà#×0Ò0Øð à!6Ø5Ø /ñ	 ð
 ñ Ñˆ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Ó<ˆàÐr6   )rÎ   rÍ   r}   r’   r  r  rÐ   rÑ   rÒ   rÉ   rË   r/   )NNNNT)r>   r?   r@   rA   r&   rC   r1   rE   rF   r   rÂ   r   r   r9   rG   rH   rI   s   @r4   rO   rO   ’  sº   ø† ñ=˜|ð =¸¸d¹
÷ =ð =ðD /3Ø59Ø6:Ø(,Ø!%ñ/à—|‘|ð/ð Ÿ™ tÑ+ð/ð  %Ÿ|™|¨dÑ2ð	/ð
 !&§¡¨tÑ 3ð/ð  ™ð/ð ˜$‘;ð/ð Ð+Ñ,ð/ð 
�‰÷/ó /r6   rO   c                   óJ  ^ • \ rS rSrSr\\" \SSS9\" \SSS9S.rS\	4U 4S	 jjr
\\\       SS\R                  S
-  S\R                   S
-  S\R"                  S
-  S\R                  S
-  S\S
-  S\R"                  S
-  S\S
-  S\\   S\4S jj5       5       5       rSrU =r$ )ÚPLBartDecoderiä  z¼
Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`PLBartDecoderLayer`]

Args:
    config: PLBartConfig
    embed_tokens (nn.Embedding): output embedding
r%   rÉ   )ÚindexÚ
layer_namer  )r¤   rä   Úcross_attentionsrM   c           
      óÈ  >• [         TU ]  U5        UR                  U l        UR                  U l        UR
                  U l        UR                  U l        UR                  (       a   [        R                  " UR                  5      OSn[        UR                  UR                  U R                  US9U l        [!        UR                  UR                  5      U l        [$        R&                  " [)        UR*                  5       Vs/ s H  n[-        XS9PM     sn5      U l        [$        R0                  " UR                  5      U l        SU l        U R7                  5         g s  snf ræ   )r0   r1   r}   Údecoder_layerdroprè   ré   r,   rê   Úmax_target_positionsrì   rí   rî   rÆ   r(   rï   rð   rc   rñ   r   rò   ró   Údecoder_layersrO   r¯   rÊ   rõ   rö   r÷   )r2   rM   r-   rø   r3   s       €r4   r1   ÚPLBartDecoder.__init__ó  s
  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø39×3I×3I”d—i’i §¡Ô/Èsˆä5Ø×Ñ˜vŸ~™~¨t×/?Ñ/?È[ñ
ˆÔô  @Ø×*Ñ*Ø�N‰Nó 
ˆÔô —m’mÔV[Ð\b×\qÑ\qÔVrÓ$sÒVrÐQRÔ%7¸Ô%LÑVrÑ$sÓtˆŒä#%§<¢<°·±Ó#?ˆÔ à&+ˆÔ#à�‰Õùò %ts   ÄENr7   r{   r  r  r¦   rú   r  r~   r§   c                 ó”  • US L US L-  (       a  [        S5      eUc  U R                  U5      nU(       ab  Uc_  Uc  U R                  R                  (       a.  [	        [        U R                  S9[        U R                  S95      O[        U R                  S9nUR                  5       S S u  pšUb  UR                  5       OSn[        R                  " X¦R                  S9U-   nUc2  [        5       (       d#  Xº-   n[        R                  " X�UR                  S9n[        U[        5      (       a  UR                  OUn[        U R                  UUUS9n[!        U R                  UUUS9nU R#                  XUS9nUR%                  UR                  5      nXo-   nU R'                  U5      n[(        R*                  R-                  UU R,                  U R.                  S	9n[1        U R2                  5       HN  u  nnU R.                  (       a(  [        R4                  " / 5      nUU R6                  :  a  M?  U" UUU4UUUS
.UD6nMP     [9        UUS9$ )NzJYou must specify exactly one of decoder_input_ids or decoder_inputs_embeds)rM   rn   r   ©rm   )rM   rú   r{   r¦   )rM   rú   r{   r  )rj   rƒ   )r  r¦   r  )rü   r¦   )r›   rð   rM   Úis_encoder_decoderr   r   r†   Úget_seq_lengthrE   rp   rm   r   ÚonesrS   r®   r   r   rñ   rý   rõ   r   r‰   r}   r…   rþ   r¯   rÿ   rè   r   )r2   r7   r{   r  r  r¦   rú   r  r~   Ú
batch_sizeÚ
seq_lengthri   rj   Úmask_seq_lengthÚself_attn_cacheÚ	positionsr¤   r  Údecoder_layerr  s                       r4   r9   ÚPLBartDecoder.forward  sD  € ð ˜Ð -°tÐ";×<ÜÐiÓjÐjàÑ Ø ×-Ñ-¨iÓ8ˆMö ˜Ñ0ð )Ñ4¸¿¹×8V×8Vô $¤L¸¿¹Ñ$DÄlÐZ^×ZeÑZeÑFfÔgä!¨¯©Ñ5ð ð "/×!3Ñ!3Ó!5°c°rÐ!:Ñˆ
ØETÑE` ×!?Ñ!?Ô!AÐfgÐÜ—|’| J×7KÑ7KÑLÐOeÑeˆàÑ!Ô*B×*DÑ*Dà4ÑAˆOÜ"ŸZšZ¨
ÈM×L`ÑL`ÑaˆNô ˜/Ô+>×?Ñ?ð ×0Ò0à ð 	ô ,Ø—;‘;Ø'Ø)Ø+ñ	
ˆô ";Ø—;‘;Ø'Ø1Ø"7ñ	"
Ðð ×(Ñ(¨ÐYeÐ(Ðfˆ	Ø—L‘L ×!5Ñ!5Ó6ˆ	à%Ñ1ˆØ×0Ñ0°Ó?ˆäŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ðdˆä"+¨D¯K©KÖ"8ÑˆC�à�}�}Ü&+§j¢j°£nÐ#Ø&¨¯©Ó7Ùá)ØØØ%ðð (>Ø /Ø#ñð ñŠMñ #9ô" 9Ø+Ø+ñ
ð 	
r6   )	r}   rñ   rð   rö   rè   rõ   r¯   r  r,   )NNNNNNN)r>   r?   r@   rA   rB   rO   r#   r�   r  r&   r1   r"   r$   r   rE   r  rF   rá   r   rÂ   r   r   r   r9   rG   rH   rI   s   @r4   r  r  ä  s  ø† ñð ,Ù$ _¸AÈ+ÑVÙ*¨?À!ÐP^Ñ_ñÐð˜|÷ ð0  ØØð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ñR
à×#Ñ# dÑ*ðR
ð Ÿ™ tÑ+ðR
ð  %×0Ñ0°4Ñ7ð	R
ð
 !&× 0Ñ 0°4Ñ 7ðR
ð  ™ðR
ð ×(Ñ(¨4Ñ/ðR
ð ˜$‘;ðR
ð Ð+Ñ,ðR
ð 
3ôR
ó ó ó  öR
r6   r  r7   ré   c                 ó`  • U R                  5       nUc  [        S5      eUR                  US:H  U5        UR                  U5      R	                  SS9S-
  R                  S5      nUR                  SU5      R                  5       nUSS2SS24   R                  5       USS2SS24'   XBSS2S4'   U$ )zÃ
Shift input ids one token to the right, and wrap the last non pad token (the <LID> token) Note that PLBart 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%   r�   rn   r   )Úcloner›   Úmasked_fill_ÚneÚsumrt   ÚgatherÚsqueeze)r7   ré   Úprev_output_tokensÚindex_of_eosÚdecoder_start_tokenss        r4   Úshift_tokens_rightr4  c  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ÑàÐr6   c                   óž  ^ • \ rS rSrSSS.rS\4U 4S jjrS rS r\	\
\         SS	\R                  S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\\R                      S-  S\S-  S\R                   S-  S\R                   S-  S\S-  S\\   S\\R                     \-  4S jj5       5       5       rSrU =r$ )ÚPLBartModeliw  zshared.weight)zencoder.embed_tokens.weightzdecoder.embed_tokens.weightrM   c                 óJ  >• [         TU ]  U5        UR                  UR                  p2UR                  (       a   [
        R                  " UR                  5      OSn[        X1R                  X$S9U l	        [        U5      U l        [        U5      U l        U R                  5         g )Nr<   r;   )r0   r1   ré   rï   rì   rí   rî   rÆ   r(   Úsharedrã   Úencoderr  Údecoderr÷   )r2   rM   r,   rï   r-   r3   s        €r4   r1   ÚPLBartModel.__init__~  ss   ø€ Ü‰Ñ˜Ô à"(×"5Ñ"5°v×7HÑ7H�ZØ39×3I×3I”d—i’i §¡Ô/ÈsˆÜ/°
¿N¹NÈKÑqˆŒä$ VÓ,ˆŒÜ$ VÓ,ˆŒà�‰Õr6   c                 ó   • U R                   $ r/   )r8  ©r2   s    r4   Úget_input_embeddingsÚ PLBartModel.get_input_embeddingsŠ  s   € Ø�{‰{Ðr6   c                 ó|   • Xl         U R                   U R                  l        U R                   U R                  l        g r/   )r8  r9  rð   r:  ©r2   rz   s     r4   Úset_input_embeddingsÚ PLBartModel.set_input_embeddings�  s'   € ØŒØ$(§K¡Kˆ�‰Ô!Ø$(§K¡Kˆ�‰Õ!r6   Nr7   r{   Údecoder_input_idsÚdecoder_attention_maskÚencoder_outputsr¦   rú   Údecoder_inputs_embedsr  r~   r§   c
                 ó  • Uc"  Uc  [        XR                  R                  5      nUc  U R                  " S	UUUS.U
D6nOK[	        U[
        5      (       d6  [        US   [        U5      S:”  a  US   OS[        U5      S:”  a  US   OSS9nU R                  " S	UUUS   UUUU	S.U
D6n[        UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  S9$ )
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`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
    See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

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

    PLBart 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.* 50003 for *en_XX*, and 50001 for *java*. 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 (:
    obj:*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)r7   r{   rú   r   r%   rf   )rü   r¤   rä   ©r7   r{   r  r  r¦   rú   r  )rü   r¦   Údecoder_hidden_statesÚdecoder_attentionsr  Úencoder_last_hidden_stater  Úencoder_attentionsrZ   )r4  rM   ré   r9  rS   r   Úlenr:  r   rü   r¦   r¤   rä   r  )r2   r7   r{   rD  rE  rF  r¦   rú   rG  r  r~   Údecoder_outputss               r4   r9   ÚPLBartModel.forward’  s0  € ðP Ñ$Ð)>Ñ)FÜ 2°9¿k¹k×>VÑ>VÓ WÐàÑ"Ø/3¯|ª|ð 0Ø#Ø-Ø+ñ0ð ñ	0‰Oô ˜O¬_×=Ñ=Ü-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ó4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÓ1I˜?¨1Ò-ÈtñˆOð Ÿ,š,ð 	
Ø'Ø1Ø"1°!Ñ"4Ø#1Ø+Ø/Øñ	
ð ñ	
ˆô "Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ñ	
ð 		
r6   )r:  r9  r8  ©	NNNNNNNNN)r>   r?   r@   rA   Ú_tied_weights_keysr&   r1   r>  rB  r"   r$   r   rE   r  rF   Úlistrá   r   rÂ   r   r   rÃ   r   r9   rG   rH   rI   s   @r4   r6  r6  w  sP  ø† ð (7Ø'6ñÐð

˜|÷ 
òò0ð
  ØØð .2Ø26Ø59Ø6:Ø:>Ø(,Ø26Ø:>Ø!%ñJ
à×#Ñ# dÑ*ðJ
ð ×(Ñ(¨4Ñ/ðJ
ð !×+Ñ+¨dÑ2ð	J
ð
 !&§¡¨tÑ 3ðJ
ð ˜e×/Ñ/Ñ0°4Ñ7ðJ
ð  ™ðJ
ð ×(Ñ(¨4Ñ/ðJ
ð  %×0Ñ0°4Ñ7ðJ
ð ˜$‘;ðJ
ð Ð+Ñ,ðJ
ð 
ˆu�|‰|Ñ	Ð1Ñ	1ôJ
ó ó ó  öJ
r6   r6  zv
    The PLBART Model with a language modeling head. Can be used for code-to-text, text-to-code and code-to-code.
    )Úcustom_introc                   ó.  ^ • \ rS rSrSrS/rSS0rS\4U 4S jjr SS	\	S
\	S-  S\
S\R                  4U 4S jjjrS	\	SS4S jr\\\          SS\R&                  S-  S\R&                  S-  S\R&                  S-  S\R(                  S-  S\\R,                     S-  S\S-  S\R,                  S-  S\R,                  S-  S\R(                  S-  S\
S-  S\\   S\\R(                     \-  4S jj5       5       5       rS\R(                  4S jrSrU =r$ )rT   iâ  rN   rW   úlm_head.weightzmodel.shared.weightrM   c                 óˆ  >• [         TU ]  U5        [        U5      U l        [        R
                  " [        R                  " SU R                  R                  R                  45      5      U l
        [        R                  " UR                  U R                  R                  R                  SS9U l        U R                  5         g )Nr%   Fr™   )r0   r1   r6  rN   r   ÚBufferrE   Úzerosr8  r*   rW   rž   rÆ   Úlm_headr÷   ©r2   rM   r3   s     €r4   r1   Ú'PLBartForConditionalGeneration.__init__î  s~   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ü!#§¢¬5¯;ª;¸¸4¿:¹:×;LÑ;L×;[Ñ;[Ð7\Ó+]Ó!^ˆÔÜ—y’y §¡°·±×1BÑ1B×1QÑ1QÐX]Ñ^ˆŒà�‰Õr6   NÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingr§   c                 óx   >• [         TU ]  XU5      nU R                  UR                  R                  S   5        U$ )Nr   )r0   Úresize_token_embeddingsÚ_resize_final_logits_biasrr   ro   )r2   r]  r^  r_  Únew_embeddingsr3   s        €r4   ra  Ú6PLBartForConditionalGeneration.resize_token_embeddingsö  s<   ø€ ô ™Ñ8¸Ð]jÓkˆØ×&Ñ& ~×'<Ñ'<×'BÑ'BÀ1Ñ'EÔFØÐr6   c                 ó>  • U R                   R                  S   nX::  a  U R                   S S 2S U24   nON[        R                  " SX-
  4U R                   R                  S9n[        R
                  " U R                   U/SS9n[        R                  " U5      U l         g )Nrn   r%   r  r�   )rW   ro   rE   rY  rm   Úcatr   rX  )r2   r]  Úold_num_tokensÚnew_biasÚ
extra_biass        r4   rb  Ú8PLBartForConditionalGeneration._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Ü!#§¢¨8Ó!4ˆÕr6   r7   r{   rD  rE  rF  r¦   rú   rG  Úlabelsr  r~   c                 óR  • U	b%  Uc"  Uc  [        X�R                  R                  5      nU R                  " U4UUUUUUUU
S.UD6nU R	                  UR
                  5      nXÐR                  R                  UR                  5      -   nSnU	bF  [        5       nU" UR                  SU R                  R                  5      U	R                  S5      5      n[        UUUR                  UR                  UR                  UR                   UR"                  UR$                  UR&                  S9	$ )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`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
    See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

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

    PLBart 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.* 50003 for *en_XX*, and 50001 for *java*. 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 (:
    obj:*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 Mask-filling:

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

>>> model = PLBartForConditionalGeneration.from_pretrained("uclanlp/plbart-base")
>>> tokenizer = AutoTokenizer.from_pretrained("uclanlp/plbart-base")

>>> # en_XX is the language symbol id <LID> for English
>>> TXT = "<s> Is 0 the <mask> Fibonacci number ? </s> en_XX"
>>> 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()
['first', 'same', 'highest', 'result', 'number']
```
N)r{   rD  rF  rE  r¦   rú   rG  r  rn   ©	ÚlossÚlogitsr¦   rJ  rK  r  rL  r  rM  )r4  rM   ré   rN   rZ  rü   rW   rý   rm   r   rª   rï   r   r¦   rJ  rK  r  rL  r  rM  )r2   r7   r{   rD  rE  rF  r¦   rú   rG  rk  r  r~   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r4   r9   Ú&PLBartForConditionalGeneration.forward  s,  € ð@ ÑØ Ñ(Ð-BÑ-JÜ$6°v¿{¹{×?WÑ?WÓ$XÐ!à&*§j¢jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øñ'
ð ñ'
ˆð —L‘L ×!:Ñ!:Ó;ˆ	Ø× 6Ñ 6× 9Ñ 9¸)×:JÑ:JÓ KÑKˆ	àˆØÑÜ'Ó)ˆHÙ% i§n¡n°R¸¿¹×9OÑ9OÓ&PÐRX×R]ÑR]Ð^`ÓRaÓbˆNäØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ñ

ð 
	
r6   c                 ó@   • [        XR                  R                  5      $ r/   )r4  rM   ré   )r2   rk  s     r4   Ú%prepare_decoder_input_ids_from_labelsÚDPLBartForConditionalGeneration.prepare_decoder_input_ids_from_labelsj  s   € Ü! &¯+©+×*BÑ*BÓCÐCr6   )rW   rZ  rN   )NT)
NNNNNNNNNN) r>   r?   r@   rA   r\   Ú_keys_to_ignore_on_load_missingrR  r&   r1   rC   rÂ   r   Ú	Embeddingra  rb  r"   r$   r   rE   r  rF   rS  rá   r   r   r   rÃ   r   r9   rv  rG   rH   rI   s   @r4   rT   rT   â  sÐ  ø† ð  ÐØ':Ð&;Ð#àÐ/ðÐð˜|÷ ð aeñØ!ðØ7:¸T±zðØY]ðà	�‰÷ð ð5¸ð 5Àô 5ð  ØØð .2Ø26Ø59Ø6:Ø:>Ø(,Ø26Ø:>Ø&*Ø!%ñ_
à×#Ñ# dÑ*ð_
ð ×(Ñ(¨4Ñ/ð_
ð !×+Ñ+¨dÑ2ð	_
ð
 !&§¡¨tÑ 3ð_
ð ˜e×/Ñ/Ñ0°4Ñ7ð_
ð  ™ð_
ð ×(Ñ(¨4Ñ/ð_
ð  %×0Ñ0°4Ñ7ð_
ð —‘˜tÑ#ð_
ð ˜$‘;ð_
ð Ð+Ñ,ð_
ð 
ˆu�|‰|Ñ	˜Ñ	.ô_
ó ó ó  ð_
ðBD¸E¿L¹L÷ Dò Dr6   rT   c                   óz   ^ • \ rS rSrSrS\S\S\S\4U 4S jjrS\R                  S	\R                  4S
 jr
SrU =r$ )ÚPLBartClassificationHeadin  z-Head for sentence-level classification tasks.Ú	input_dimÚ	inner_dimÚnum_classesÚpooler_dropoutc                 óÀ   >• [         TU ]  5         [        R                  " X5      U l        [        R
                  " US9U l        [        R                  " X#5      U l        g )N)r„   )r0   r1   r   rž   ÚdenseÚDropoutr}   r¢   )r2   r|  r}  r~  r  r3   s        €r4   r1   Ú!PLBartClassificationHead.__init__q  s@   ø€ ô 	‰ÑÔÜ—Y’Y˜yÓ4ˆŒ
Ü—z’z NÑ3ˆŒÜŸ	š	 )Ó9ˆ�r6   r¤   r§   c                 óº   • U R                  U5      nU R                  U5      n[        R                  " U5      nU R                  U5      nU R	                  U5      nU$ r/   )r}   r�  rE   Útanhr¢   )r2   r¤   s     r4   r9   Ú PLBartClassificationHead.forward}  sN   € ØŸ™ ]Ó3ˆØŸ
™
 =Ó1ˆÜŸ
š
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ mÓ4ˆØÐr6   )r�  r}   r¢   r=   rI   s   @r4   r{  r{  n  sQ   ø† Ù7ð
:àð
:ð ð
:ð ð	
:ð
 ÷
:ð U§\¡\ð °e·l±l÷ ò r6   r{  z‡
    PLBart model with a sequence classification/head on top (a linear layer on top of the pooled output) e.g.
    for GLUE tasks.
    c                   óx  ^ • \ rS rSrS\4U 4S jjr\\         SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\\R                     S-  S
\R                  S-  S\R                  S-  S\R                  S-  S\S-  S\\   S\\-  4S jj5       5       rSrU =r$ )ÚPLBartForSequenceClassificationi†  rM   c                 óÞ   >• [         TU ]  " U40 UD6  [        U5      U l        [	        UR
                  UR
                  UR                  UR                  5      U l        U R                  5         g r/   )
r0   r1   r6  rN   r{  rÆ   Ú
num_labelsÚclassifier_dropoutÚclassification_headr÷   )r2   rM   r~   r3   s      €r4   r1   Ú(PLBartForSequenceClassification.__init__�  sZ   ø€ Ü‰Ò˜Ñ* 6Ò*Ü  Ó(ˆŒ
Ü#;Ø�N‰NØ�N‰NØ×ÑØ×%Ñ%ó	$
ˆÔ ð 	�‰Õr6   Nr7   r{   rD  rE  rF  rú   rG  rk  r  r~   r§   c
                 óø  • Ub  Sn	Uc%  Ub"  [        SU R                  R                   35      eU R                  " U4UUUUUUU	S.U
D6nUS   nUR	                  U R
                  R                  5      R                  UR                  5      n[        [        R                  " UR                  S5      5      R                  5       S:H  S5        XÍSS24   n[        UR                  S   UR                  S   -  S:¬  S5        UR                  UR!                  S5      S	UR!                  S	5      5      SS2S	SS24   nU R#                  U5      nSnUGbÓ  UR                  UR                  5      nU R
                  R$                  c¥  U R
                  R&                  S:X  a  S
U R
                  l        OyU R
                  R&                  S:”  aN  UR(                  [        R*                  :X  d  UR(                  [        R,                  :X  a  SU R
                  l        OSU R
                  l        U R
                  R$                  S
:X  aT  [/        5       nU R
                  R&                  S:X  a&  U" UR1                  5       UR1                  5       5      nO˜U" UU5      nOŽU R
                  R$                  S:X  aG  [3        5       nU" UR                  S	U R
                  R&                  5      UR                  S	5      5      nO-U R
                  R$                  S:X  a  [5        5       nU" UU5      n[7        UUUR8                  UR:                  UR<                  UR>                  UR@                  URB                  URD                  S9	$ )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`] or [`PLBartMultiTokenizer`] depending on the checkpoint.
    See [`PreTrainedTokenizer.encode`] and [`PreTrainedTokenizer.__call__`] for details.

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

    PLBart 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.* 50003 for *en_XX*, and 50001 for *java*. 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 (:
    obj:*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,)`, *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 )r{   rD  rE  rF  rú   rG  r  r   r%   z7All examples must have the same number of <eos> tokens.z3Each example must contain at least one <eos> token.rn   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationrm  )#ÚNotImplementedErrorr3   r>   rN   ÚeqrM   Úeos_token_idrý   rm   r!   rE   Úunique_consecutiver.  Únumelro   rª   r†   rŒ  Úproblem_typerŠ  rl   rq   rC   r   r0  r   r   r   r¦   rJ  rK  r  rL  r  rM  )r2   r7   r{   rD  rE  rF  rú   rG  rk  r  r~   rp  r¤   Úeos_maskÚselectedÚsentence_representationro  rn  rs  s                      r4   r9   Ú'PLBartForSequenceClassification.forwardš  s  € ðP ÑØˆIàÑ Ñ!:Ü%ØJÈ4Ï>É>×KbÑKbÐJcÐ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ñ

ð 
	
r6   )rŒ  rN   rQ  )r>   r?   r@   rA   r&   r1   r   r   rE   r  rF   rS  rá   rÂ   r   r   rÃ   r   r9   rG   rH   rI   s   @r4   rˆ  rˆ  †  s,  ø† ð˜|÷ ð Øð .2Ø.2Ø59Ø:>Ø:>Ø26Ø:>Ø*.Ø!%ñk
à×#Ñ# dÑ*ðk
ð Ÿ™ tÑ+ðk
ð !×+Ñ+¨dÑ2ð	k
ð
 !&× 0Ñ 0°4Ñ 7ðk
ð ˜e×/Ñ/Ñ0°4Ñ7ðk
ð ×(Ñ(¨4Ñ/ðk
ð  %×0Ñ0°4Ñ7ðk
ð × Ñ  4Ñ'ðk
ð ˜$‘;ðk
ð Ð+Ñ,ðk
ð 
Ð0Ñ	0ôk
ó ó ök
r6   rˆ  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚPLBartDecoderWrapperi
  z±
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U ]  U5        [        U5      U l        U R	                  5         g r/   )r0   r1   r  r:  r÷   r[  s     €r4   r1   ÚPLBartDecoderWrapper.__init__  s&   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆŒØ�‰Õr6   c                 ó&   • U R                   " U0 UD6$ r/   ©r:  )r2   Úargsr~   s      r4   r9   ÚPLBartDecoderWrapper.forward  s   € Ø�|Š|˜TÐ, VÑ,Ð,r6   r¡  )	r>   r?   r@   rA   rB   r1   r9   rG   rH   rI   s   @r4   r�  r�  
  s   ø† ñõ
÷
-ð -r6   r�  zw
    PLBART decoder with a language modeling head on top (linear layer with weights tied to the input embeddings).
    c                   ój  ^ • \ rS rSrSS0rU 4S jrS rS r\\	         SS\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\S-  S\
R                  S-  S\
R                  S-  S\S-  S\\
R                  -  S\\   S\\-  4S jj5       5       rSrU =r$ )ÚPLBartForCausalLMi  rV  z!model.decoder.embed_tokens.weightc                 óÞ   >• SUl         SUl        [        TU ]  U5        [	        U5      U l        [        R                  " UR                  UR                  SS9U l
        U R                  5         g )NTFr™   )r”   r   r0   r1   r�  rN   r   rž   Úhidden_sizerï   rZ  r÷   r[  s     €r4   r1   ÚPLBartForCausalLM.__init__#  sX   ø€ Ø ˆÔØ$)ˆÔ!Ü‰Ñ˜Ô Ü)¨&Ó1ˆŒ
ä—y’y ×!3Ñ!3°V×5FÑ5FÈUÑSˆŒð 	�‰Õr6   c                 óB   • U R                   R                  R                  $ r/   ©rN   r:  rð   r=  s    r4   r>  Ú&PLBartForCausalLM.get_input_embeddings.  s   € Ø�z‰z×!Ñ!×.Ñ.Ð.r6   c                 ó8   • XR                   R                  l        g r/   rª  rA  s     r4   rB  Ú&PLBartForCausalLM.set_input_embeddings1  s   € Ø*/�
‰
×ÑÕ'r6   Nr7   r{   r  r  r¦   rú   rk  r  Úlogits_to_keepr~   r§   c
                 ó
  • U R                   R                  " SUUUUUUUS.U
D6nUS   n[        U	[        5      (       a  [	        U	* S5      OU	nU R                  USS2USS24   5      nSnUba  UR                  UR                  5      n[        5       nU" UR                  SU R                  R                  5      UR                  S5      5      n[        UUUR                  UR                  UR                  UR                   S9$ )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 AutoTokenizer, PLBartForCausalLM

>>> tokenizer = AutoTokenizer.from_pretrained("uclanlp/plbart-base")
>>> model = PLBartForCausalLM.from_pretrained("uclanlp/plbart-base")
>>> 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
```rI  r   Nrn   )rn  ro  r¦   r¤   rä   r  rZ   )rN   r:  rS   rC   ÚslicerZ  rý   rm   r   rª   rM   rï   r   r¦   r¤   rä   r  )r2   r7   r{   r  r  r¦   rú   rk  r  r®  r~   rp  r¤   Úslice_indicesro  rn  rs  s                    r4   r9   ÚPLBartForCausalLM.forward4  s  € ðL >B¿Z¹Z×=OÒ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øñ	>
ð ñ	>
ˆð   ™
ˆä8BÀ>ÔSV×8WÑ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ñ
ð 	
r6   )rZ  rN   )	NNNNNNNNr   )r>   r?   r@   rA   rR  r1   r>  rB  r   r   rE   r  rF   rá   r   rÂ   rC   r   r   rÃ   r   r9   rG   rH   rI   s   @r4   r¥  r¥    s1  ø† ð 	Ð=ðÐõ	ò/ò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
r6   r¥  )r¥  rT   rˆ  r6  rK   )Nr©   )Nrí   Úcollections.abcr   rE   r   Útorch.nnr   r   r   Ú r	   rU   Úactivationsr
   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r    r!   Úutils.genericr"   Úutils.output_capturingr#   r$   Úconfiguration_plbartr&   Ú
get_loggerr>   rœ   ry  r(   rK   rc   ÚModulerF   rD   rŽ   r�   rP   rã   rO   r  rC   r4  r6  rT   r{  rˆ  r�  r¥  Ú__all__rZ   r6   r4   Ú<module>rÆ     sT  ðó* Ý $ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß JÝ BÝ 9÷÷ ÷ GÝ &÷÷ õ 8ß EÝ .ð 
×	Ò	˜HÓ	%€ô
= §¡ô 
=ð ô2˜Oó 2ó ð2ô; r§|¡|ô ;ðB !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(õ%ô8r)�b—i‘iô r)ôj0Ð3ô 0ôfV
Ð)ô V
ôrOÐ3ô Oôd|
Ð)ô |
ð~ %§,¡,ð ¸cô ð( ôg
Ð'ó g
ó ðg
ñT ðñô
DDÐ%:¸Oó DDóð
DDôN˜rŸy™yô ñ0 ðñô{
Ð&;ó {
óð{
ô|-Ð0ô -ñ ðñô
Y
Ð-¨ó Y
óð
Y
òx�r6   