§
    ‚ŠtjDÙ  ã                   ó˜  — d Z ddl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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7  e/j8        e9¦  «        Z:dej;        de<de<fd„Z= G d„ dej>        ¦  «        Z? G d„ dej>        ¦  «        Z@	 	 dKdejA        d ej;        d!ej;        d"ej;        d#ej;        dz  d$eBdz  d%eBd&e)e+         fd'„ZC G d(„ d)ejA        ¦  «        ZD G d*„ d+e¦  «        ZE G d,„ d-e¦  «        ZF G d.„ d/ejA        ¦  «        ZGe, G d0„ d1e'¦  «        ¦   «         ZH G d2„ d3eH¦  «        ZI G d4„ d5eH¦  «        ZJ G d6„ d7eH¦  «        ZK G d8„ d9eH¦  «        ZLe, G d:„ d;eH¦  «        ¦   «         ZM e,d<¬=¦  «         G d>„ d?eHe¦  «        ¦   «         ZN e,d@¬=¦  «         G dA„ dBeH¦  «        ¦   «         ZOe, G dC„ dDeH¦  «        ¦   «         ZP G dE„ dFeH¦  «        ZQ e,dG¬=¦  «         G dH„ dIeHe¦  «        ¦   «         ZRg dJ¢ZSdS )LzPyTorch BART 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_torchdynamo_compilingÚloggingÚtorch_compilable_check)Úmerge_with_config_defaults)ÚOutputRecorderÚcapture_outputsé   )Ú
BartConfigÚ	input_idsÚpad_token_idÚdecoder_start_token_idc                 óô   — |                       | j        ¦  «        }| dd…dd…f                              ¦   «         |dd…dd…f<   ||dd…df<   |€t          d¦  «        ‚|                     |dk    |¦  «         |S )z1
    Shift input ids one token to the right.
    Néÿÿÿÿr&   r   z1self.model.config.pad_token_id has to be defined.iœÿÿÿ)Ú	new_zerosÚshapeÚcloneÚ
ValueErrorÚmasked_fill_)r(   r)   r*   Úshifted_input_idss       úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/bart/modeling_bart.pyÚshift_tokens_rightr4   :   s˜   € ð "×+Ò+¨I¬OÑ<Ô<ÐØ(¨¨¨¨C¨R¨C¨Ô0×6Ò6Ñ8Ô8Ð�a�a�a˜˜˜�eÑØ4Ð�a�a�a˜�dÑàÐÝÐLÑMÔMÐMà×"Ò"Ð#4¸Ò#<¸lÑKÔKÐKàÐó    c                   ób   ‡ — 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 )ÚBartLearnedPositionalEmbeddingzN
    This module learns positional embeddings up to a fixed maximum size.
    Únum_embeddingsÚembedding_dimc                 ój   •— d| _         t          ¦   «                              || j         z   |¦  «         d S ©Né   )ÚoffsetÚsuperÚ__init__)Úselfr8   r9   Ú	__class__s      €r3   r?   z'BartLearnedPositionalEmbedding.__init__O   s3   ø€ ð ˆŒÝ‰Œ×Ò˜¨$¬+Ñ5°}ÑEÔEÐEÐEÐEr5   r   Nr(   Úpast_key_values_lengthÚposition_idsc                 ó0  •— |€V|j         dd…         \  }}t          j        |||z   t          j        | j        j        ¬¦  «                             |d¦  «        }n|                     d¦  «        }t          ¦   «          	                    || j
        z   ¦  «        S )z3`input_ids' shape is expected to be [bsz x seqlen].Nr<   )ÚdtypeÚdevicer,   r   )r.   ÚtorchÚarangeÚlongÚweightrF   ÚexpandÚ	unsqueezer>   Úforwardr=   )r@   r(   rB   rC   ÚbszÚseq_lenrA   s         €r3   rM   z&BartLearnedPositionalEmbedding.forwardU   s“   ø€ ð
 ÐØ$œ?¨2¨A¨2Ô.‰LˆC�Ý œ<Ø&Ð(>ÀÑ(HÕPUÔPZÐcgÔcnÔcuðñ ô çŠf�S˜"‰oŒoð ˆLð (×1Ò1°!Ñ4Ô4ˆLå‰wŒw�Š˜|¨d¬kÑ9Ñ:Ô:Ð:r5   )r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr?   rG   ÚTensorrM   Ú__classcell__©rA   s   @r3   r7   r7   J   sª   ø€ € € € € ðð ðF sð F¸3ð Fð Fð Fð Fð Fð Fð mqð;ð ;Øœð;Ø?Bð;ØV[ÔVbÐeiÑVið;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r5   r7   c            
       óV   ‡ — 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 )ÚBartScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    ç      ð?r8   r9   Úpadding_idxÚembed_scaleNc                 ó\   •— t          ¦   «                              |||¦  «         || _        d S ©N)r>   r?   r\   )r@   r8   r9   r[   r\   rA   s        €r3   r?   z BartScaledWordEmbedding.__init__j   s-   ø€ Ý‰Œ×Ò˜¨¸ÑDÔDÐDØ&ˆÔÐÐr5   r(   c                 óV   •— t          ¦   «                              |¦  «        | j        z  S r^   )r>   rM   r\   )r@   r(   rA   s     €r3   rM   zBartScaledWordEmbedding.forwardn   s!   ø€ Ý‰wŒw�Š˜yÑ)Ô)¨DÔ,<Ñ<Ð<r5   )rZ   ©rP   rQ   rR   rS   rT   Úfloatr?   rG   rU   rM   rV   rW   s   @r3   rY   rY   e   s–   ø€ € € € € ðð ð'ð ' sð '¸3ð 'ÈSð 'Ð_dÐgkÑ_kð 'ð 'ð 'ð 'ð 'ð 'ð= ¤ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =r5   rY   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr,   ç      à¿r<   r   ©Údim©ÚpÚtrainingr&   )
ÚsizerG   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxri   rq   Ú
contiguous)
rc   rd   re   rf   rg   rh   ri   rj   Úattn_weightsÚattn_outputs
             r3   Úeager_attention_forwardrz   s   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r5   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 )ÚBartAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrb   FTNÚ	embed_dimÚ	num_headsri   Ú
is_decoderÚbiasÚ	is_causalÚconfigÚ	layer_idxc	                 óz  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        || _        |€/| j	        r(t                               d| j        j        › d�¦  «         t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        t!          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).rl   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€   )r>   r?   r}   r~   ri   Úhead_dimr‚   r0   rh   r   r�   rƒ   ÚloggerÚwarning_oncerA   rP   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)
r@   r}   r~   ri   r   r€   r�   r‚   rƒ   rA   s
            €r3   r?   zBartAttention.__init__’   sY  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒØ"ˆŒØÐ ¤ÐÝ×Òð,¨4¬>Ô+Bð ,ð ,ð ,ñô ð õ ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr5   Úhidden_statesÚkey_value_statesÚpast_key_valuesrg   rj   Úreturnc                 óŽ  — |du}|j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }	d}
|�Ht          |t          ¦  «        r1|j                             | j	        ¦  «        }
|r|j
        }n
|j        }n|}|r|n|}|r3|�1|
r/|j        | j	                 j        }|j        | j	                 j        }nÞ|                      |¦  «        }|                      |¦  «        }g |j         dd…         ¢d‘| j        ‘R }|                     |¦  «                             dd¦  «        }|                     |¦  «                             dd¦  «        }|�E|                     ||| j	        ¦  «        \  }}|r$t          |t          ¦  «        rd|j        | j	        <   t%          j        | j        j        t,          ¦  «        } || |	|||f| j        sdn| j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )	z#Input shape: Batch x Time x ChannelNr,   r&   r<   FTrb   )ri   rh   )r.   r†   rŒ   Úviewrt   Ú
isinstancer   Ú
is_updatedÚgetrƒ   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesrŠ   r‹   Úupdater   Úget_interfacer‚   Ú_attn_implementationrz   rq   ri   rh   Úreshaperw   r�   )r@   rŽ   r�   r�   rg   rj   Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesr•   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚkv_shapeÚattention_interfacery   rx   s                      r3   rM   zBartAttention.forward¹   s¨  € ð .°TÐ9Ðð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð —{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆàˆ
ØÐ&Ý˜/Õ+>Ñ?Ô?ð 7Ø,Ô7×;Ò;¸D¼NÑKÔK�
Ø%ð Pà+:Ô+PÐ(Ð(à+:Ô+OÐ(Ð(à'6Ð$à-?ÐRÐ)Ð)À]ˆØð 	F /Ð"=À*Ð"=à-Ô4°T´^ÔDÔIˆJØ/Ô6°t´~ÔFÔMˆLˆLàŸš ^Ñ4Ô4ˆJØŸ;š; ~Ñ6Ô6ˆLØF˜Ô-¨c¨r¨cÔ2ÐF°BÐF¸¼ÐFÐFˆHØ#Ÿš¨Ñ2Ô2×<Ò<¸QÀÑBÔBˆJØ'×,Ò,¨XÑ6Ô6×@Ò@ÀÀAÑFÔFˆLàÐ*Ø+?×+FÒ+FÀzÐS_ÐaeÔaoÑ+pÔ+pÑ(�
˜Là%ð F­*°_ÕFYÑ*ZÔ*Zð FØAE�OÔ.¨t¬~Ñ>å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r5   )rb   FTFNN©NNN)rP   rQ   rR   rS   rT   ra   Úboolr'   r?   rG   rU   r   r   r   ÚtuplerM   rV   rW   s   @r3   r|   r|   �   s]  ø€ € € € € ØGÐGð Ø ØØØ$(Ø $ð%Cð %Càð%Cð ð%Cð ð	%Cð
 ð%Cð ð%Cð ð%Cð ˜TÑ!ð%Cð ˜‘:ð%Cð %Cð %Cð %Cð %Cð %CðT 15Ø(,Ø.2ðH)ð H)à”|ðH)ð  œ,¨Ñ-ðH)ð  ™ð	H)ð
 œ tÑ+ðH)ð Ð-Ô.ðH)ð 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ðH)ð H)ð H)ð H)ð H)ð H)ð H)ð H)r5   r|   c                   ór   ‡ — e Zd Zd
dededz  fˆ fd„Zdej        dej        dee	         dej
        fd	„Zˆ xZS )ÚBartEncoderLayerNr‚   rƒ   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        t	          | j        |j        |j        ||¬¦  «        | _        t          j	        | j        ¦  «        | _
        |j        | _        t          |j                 | _        |j        | _        t          j        | j        |j        ¦  «        | _        t          j        |j        | j        ¦  «        | _        t          j	        | j        ¦  «        | _        d S )N)r}   r~   ri   r‚   rƒ   )r>   r?   Úd_modelr}   r|   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normri   r
   Úactivation_functionÚactivation_fnÚactivation_dropoutr‰   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©r@   r‚   rƒ   rA   s      €r3   r?   zBartEncoderLayer.__init__  sÓ   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå&Ø”nØÔ4ØÔ,ØØð
ñ 
ô 
ˆŒõ %'¤L°´Ñ$@Ô$@ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔÝ”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr5   rŽ   rg   rj   r‘   c                 ó  — |} | j         |fd|i|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |                      |¦  «        ¦  «        }t          j                             || j        | j        ¬¦  «        }|  	                    |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|  
                    |¦  «        }|j        t          j        k    r_t          j        |¦  «                             ¦   «         s9t          j        |j        ¦  «        j        dz
  }t          j        || |¬¦  «        }|S )Nrg   ro   iè  )ÚminÚmax)r³   r   ru   ri   rq   rµ   r·   rº   r¸   r»   r¼   rE   rG   Úfloat16ÚisfiniteÚallÚfinforÀ   Úclamp)r@   rŽ   rg   rj   ÚresidualÚ_Úclamp_values          r3   rM   zBartEncoderLayer.forward  sv  € ð !ˆØ)˜4œ>Øð
ð 
à)ð
ð ð
ð 
Ñˆ�qõ
 œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆà ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÔ¥%¤-Ò/Ð/½¼À}Ñ8UÔ8U×8YÒ8YÑ8[Ô8[Ð/Ýœ+ mÔ&9Ñ:Ô:Ô>ÀÑEˆKÝ!œK¨¸K¸<È[ÐYÑYÔYˆMàÐr5   r^   )rP   rQ   rR   r'   rT   r?   rG   ÚFloatTensorr   r   rU   rM   rV   rW   s   @r3   r®   r®     sœ   ø€ € € € € ð=ð =˜zð =°c¸D±jð =ð =ð =ð =ð =ð =ð&àÔ(ðð Ô)ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r5   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 )ÚBartDecoderLayerNr‚   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        ¦  «        | _        d S )NT)r}   r~   ri   r   r�   r‚   rƒ   )ri   r   r‚   rƒ   )r>   r?   r°   r}   r|   Údecoder_attention_headsr²   r³   ri   r
   r¶   r·   r¸   r   r´   rµ   Úencoder_attnÚencoder_attn_layer_normr‰   Údecoder_ffn_dimrº   r»   r¼   r½   s      €r3   r?   zBartDecoderLayer.__init__8  s   ø€ Ý‰Œ×ÒÑÔÐØœˆŒå&Ø”nØÔ4ØÔ,ØØØØð
ñ 
ô 
ˆŒð ”~ˆŒÝ# FÔ$>Ô?ˆÔØ"(Ô";ˆÔå$&¤L°´Ñ$@Ô$@ˆÔ!Ý)ØŒNØÔ*ØÔ,ØØØð
ñ 
ô 
ˆÔõ (*¤|°D´NÑ'CÔ'CˆÔ$Ý”9˜Tœ^¨VÔ-CÑDÔDˆŒÝ”9˜VÔ3°T´^ÑDÔDˆŒÝ "¤¨T¬^Ñ <Ô <ˆÔÐÐr5   TrŽ   rg   Úencoder_hidden_statesÚencoder_attention_maskr�   Ú	use_cacherj   r‘   c                 óÞ  — |} | j         |f||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|�]|} | j        |f|||dœ|¤Ž\  }}	t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|}|                      |  	                    |¦  «        ¦  «        }t          j                             || j
        | j        ¬¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z   }|                      |¦  «        }|S )N)r�   rg   ro   )r�   rg   r�   )r³   r   ru   ri   rq   rµ   rÎ   rÏ   r·   rº   r¸   r»   r¼   )
r@   rŽ   rg   rÑ   rÒ   r�   rÓ   rj   rÆ   rÇ   s
             r3   rM   zBartDecoderLayer.forwardW  s§  € ð !ˆð *˜4œ>Øð
à+Ø)ð
ð 
ð ð	
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×1Ò1°-Ñ@Ô@ˆð !Ð,Ø$ˆHà0˜tÔ0Øð à!6Ø5Ø /ð	 ð  ð
 ð ð  ÑˆM˜1õ œM×1Ò1°-À4Ä<ÐZ^ÔZgÐ1ÑhÔhˆMØ$ }Ñ4ˆMØ ×8Ò8¸ÑGÔGˆMð !ˆØ×*Ò*¨4¯8ª8°MÑ+BÔ+BÑCÔCˆÝœ×-Ò-¨m¸tÔ?VÐaeÔanÐ-ÑoÔoˆØŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆØ×-Ò-¨mÑ<Ô<ˆàÐr5   r^   )NNNNT)rP   rQ   rR   r'   rT   r?   rG   rU   r   r«   r   r   rM   rV   rW   s   @r3   rË   rË   7  sô   ø€ € € € € ð=ð =˜zð =°c¸D±jð =ð =ð =ð =ð =ð =ðD /3Ø59Ø6:Ø(,Ø!%ð/ð /à”|ð/ð œ tÑ+ð/ð  %œ|¨dÑ2ð	/ð
 !&¤¨tÑ 3ð/ð  ™ð/ð ˜$‘;ð/ð Ð+Ô,ð/ð 
Œð/ð /ð /ð /ð /ð /ð /ð /r5   rË   c                   óX   ‡ — 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 )
ÚBartClassificationHeadz-Head for sentence-level classification tasks.Ú	input_dimÚ	inner_dimÚnum_classesÚpooler_dropoutc                 óä   •— t          ¦   «                              ¦   «          t          j        ||¦  «        | _        t          j        |¬¦  «        | _        t          j        ||¦  «        | _        d S )N)rp   )r>   r?   r   r‰   ÚdenseÚDropoutri   r�   )r@   r×   rØ   rÙ   rÚ   rA   s        €r3   r?   zBartClassificationHead.__init__Œ  sY   ø€ õ 	‰Œ×ÒÑÔÐÝ”Y˜y¨)Ñ4Ô4ˆŒ
Ý”z NÐ3Ñ3Ô3ˆŒÝœ	 )¨[Ñ9Ô9ˆŒˆˆr5   rŽ   r‘   c                 óÖ   — |                       |¦  «        }|                      |¦  «        }t          j        |¦  «        }|                       |¦  «        }|                      |¦  «        }|S r^   )ri   rÜ   rG   Útanhr�   )r@   rŽ   s     r3   rM   zBartClassificationHead.forward˜  s[   € ØŸš ]Ñ3Ô3ˆØŸ
š
 =Ñ1Ô1ˆÝœ
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš mÑ4Ô4ˆØÐr5   r`   rW   s   @r3   rÖ   rÖ   ‰  s�   ø€ € € € € Ø7Ð7ð
:àð
:ð ð
:ð ð	
:ð
 ð
:ð 
:ð 
:ð 
:ð 
:ð 
:ð U¤\ð °e´lð ð ð ð ð ð ð ð r5   rÖ   c                   ón   ‡ — e Zd ZU eed<   dZdZddgZddgZdgZ	dZ
dZdZdZˆ fd	„Zed
„ ¦   «         Zˆ xZS )ÚBartPreTrainedModelr‚   ÚmodelTzencoder.versionzdecoder.versionr®   rË   r�   c                 óª   •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         d S d S r^   )r>   Ú_init_weightsr”   ÚBartForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)r@   rc   rA   s     €r3   rä   z!BartPreTrainedModel._init_weights¯  sQ   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ:Ñ;Ô;ð 	2ÝŒK˜Ô0Ñ1Ô1Ð1Ð1Ð1ð	2ð 	2r5   c                 ó–   — | j         j        }t          j        g d¢dddd|gg| j        ¬¦  «        }|                     |¦  «        |dœ}|S )N)r   é   é
   é   r<   r   é   é   r<   ©rF   )rg   r(   )r‚   r)   rG   ÚtensorrF   Úne)r@   Ú	pad_tokenr(   Údummy_inputss       r3   ró   z BartPreTrainedModel.dummy_inputs´  sa   € à”KÔ,ˆ	Ý”LÐ"2Ð"2Ð"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZÔVaÐbÑbÔbˆ	à'Ÿlšl¨9Ñ5Ô5Ø"ð
ð 
ˆð Ðr5   )rP   rQ   rR   r'   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ"_keys_to_ignore_on_load_unexpectedÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphrä   Úpropertyró   rV   rW   s   @r3   rá   rá   ¡  s¥   ø€ € € € € € àÐÐÑØÐØ&*Ð#Ø*;Ð=NÐ)OÐ&Ø,Ð.AÐBÐØ#4Ð"5ÐØÐØ€NØÐà!Ðð2ð 2ð 2ð 2ð 2ð
 ðð ñ „Xðð ð ð ð r5   rá   c                   ó   — e Zd Zd„ ZdS )ÚPretrainedBartModelc                 ó:   — t          j        dt          ¦  «         d S ©Nz_The class `PretrainedBartModel` has been depreciated, please use `BartPreTrainedModel` instead.©ÚwarningsÚwarnÚFutureWarning©r@   s    r3   Ú__init_subclass__z%PretrainedBartModel.__init_subclass__À  ó&   € ÝŒØmÝñ	
ô 	
ð 	
ð 	
ð 	
r5   N©rP   rQ   rR   r  © r5   r3   r   r   ¿  ó#   € € € € € ð
ð 
ð 
ð 
ð 
r5   r   c                   ó   — e Zd Zd„ ZdS )ÚBartPretrainedModelc                 ó:   — t          j        dt          ¦  «         d S r  r  r  s    r3   r  z%BartPretrainedModel.__init_subclass__È  r	  r5   Nr
  r  r5   r3   r  r  Ç  r  r5   r  c                   óÂ   ‡ — e Zd ZdZeedœZdefˆ fd„Ze	e
e	 	 	 ddej        dz  dej        dz  dej        dz  d	ee         d
ef
d„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBartEncoderzà
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`BartEncoderLayer`].

    Args:
        config: BartConfig
        embed_tokens (nn.Embedding): output embedding
    )rŽ   Ú
attentionsr‚   c                 óB  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        }‰j        | _        ‰j        | _	        ‰j
        rt          j        |¦  «        nd}t          ‰j        || j        |¬¦  «        | _        t!          ‰j        |¦  «        | _        t%          j        ˆfd„t)          ‰j        ¦  «        D ¦   «         ¦  «        | _        t%          j        |¦  «        | _        d| _        |                      ¦   «          d S )NrZ   ©r\   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ©)rƒ   )r®   ©Ú.0Úir‚   s     €r3   ú
<listcomp>z(BartEncoder.__init__.<locals>.<listcomp>ñ  ó'   ø€ Ð$qÐ$qÐ$qÈqÕ%5°fÈÐ%JÑ%JÔ%JÐ$qÐ$qÐ$qr5   F)r>   r?   ri   Úencoder_layerdropÚ	layerdropr°   r)   r[   Úmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtrY   Ú
vocab_sizeÚembed_tokensr7   Úembed_positionsr   Ú
ModuleListÚrangeÚencoder_layersr™   r´   Úlayernorm_embeddingÚgradient_checkpointingÚ	post_init)r@   r‚   r}   r\   rA   s    `  €r3   r?   zBartEncoder.__init__Þ  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð à”~ˆŒØÔ1ˆŒà”Nˆ	Ø!Ô.ˆÔØ$*Ô$BˆÔ!Ø.4Ô.DÐM•d”i 	Ñ*Ô*Ð*È#ˆå3ØÔ˜y¨$Ô*:Èð
ñ 
ô 
ˆÔõ  >ØÔ*Øñ 
ô  
ˆÔõ ”mÐ$qÐ$qÐ$qÐ$qÕTYÐZ`ÔZoÑTpÔTpÐ$qÑ$qÔ$qÑrÔrˆŒÝ#%¤<°	Ñ#:Ô#:ˆÔ à&+ˆÔ#à�ŠÑÔÐÐÐr5   Nr(   rg   Úinputs_embedsrj   r‘   c                 óR  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|                      |d d …d d …df         ¦  «        }|                     |j        ¦  «        }||z   }|                      |¦  «        }t          j                             || j        | j	        ¬¦  «        }t          | j        ||¬¦  «        }t          | j        ¦  «        D ];\  }}d}	| j	        r!t          j        g ¦  «        }
|
| j        k     rd}	|	s
 |||fi |¤Ž}Œ<t#          |¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsr,   ro   )r‚   r,  rg   FT)Úlast_hidden_state)r0   r$  r%  ÚtorF   r)  r   ru   ri   rq   r   r‚   Ú	enumerater™   rG   Úrandr  r   )r@   r(   rg   r,  rj   Ú	embed_posrŽ   ÚidxÚencoder_layerÚto_dropÚdropout_probabilitys              r3   rM   zBartEncoder.forwardø  sv  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMà×(Ò(¨°q°q°q¸!¸!¸!¸R°xÔ)@ÑAÔAˆ	Ø—L’L Ô!5Ñ6Ô6ˆ	à%¨	Ñ1ˆØ×0Ò0°Ñ?Ô?ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå2Ø”;Ø'Ø)ð
ñ 
ô 
ˆõ
 #,¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àˆGØŒ}ð #Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Ø"�Gàð Ø - Ø!Ø"ð!ð !ð ð!ð !�øõ Ø+ð
ñ 
ô 
ð 	
r5   rª   )rP   rQ   rR   rS   r®   r|   Ú_can_record_outputsr'   r?   r#   r%   r   rG   Ú
LongTensorrU   rÉ   r   r   r   rM   rV   rW   s   @r3   r  r  Ï  sõ   ø€ € € € € ðð ð *Ø#ðð Ðð
˜zð ð ð ð ð ð ð4  ØØð .2Ø.2Ø26ð	*
ð *
àÔ# dÑ*ð*
ð œ tÑ+ð*
ð Ô(¨4Ñ/ð	*
ð
 Ð+Ô,ð*
ð 
ð*
ð *
ð *
ñ „^ñ „_ñ  Ôð*
ð *
ð *
ð *
ð *
r5   r  c                   ó8  ‡ — 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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fd„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚBartDecoderzÌ
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`BartDecoderLayer`]

    Args:
        config: BartConfig
        embed_tokens (nn.Embedding): output embedding
    r&   r³   )ÚindexÚ
layer_namerÎ   )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        ˆfd„t)          ‰j        ¦  «        D ¦   «         ¦  «        | _        t%          j        ‰j        ¦  «        | _        d| _        |                      ¦   «          d S )NrZ   r  c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS r  )rË   r  s     €r3   r  z(BartDecoder.__init__.<locals>.<listcomp>G  r  r5   F)r>   r?   ri   Údecoder_layerdropr  r)   r[   r  Úmax_target_positionsr   r!  r"  r°   rY   r#  r$  r7   r%  r   r&  r'  Údecoder_layersr™   r´   r)  r*  r+  )r@   r‚   r\   rA   s    ` €r3   r?   zBartDecoder.__init__7  s  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ1ˆŒØ!Ô.ˆÔØ$*Ô$BˆÔ!Ø39Ô3IÐR•d”i ¤Ñ/Ô/Ð/Èsˆå3ØÔ˜vœ~¨tÔ/?È[ð
ñ 
ô 
ˆÔõ  >ØÔ*ØŒNñ 
ô  
ˆÔõ ”mÐ$qÐ$qÐ$qÐ$qÕTYÐZ`ÔZoÑTpÔTpÐ$qÑ$qÔ$qÑrÔrˆŒå#%¤<°´Ñ#?Ô#?ˆÔ à&+ˆÔ#à�ŠÑÔÐÐÐr5   Nr(   rg   rÑ   rÒ   r�   r,  rÓ   rj   r‘   c                 ót  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|r[|€Y|€| j        j        r6t	          t          | j        ¬¦  «        t          | j        ¬¦  «        ¦  «        nt          | j        ¬¦  «        }|                     ¦   «         d d…         \  }	}
|�|                     ¦   «         nd}t          j	        |
|j
        ¬¦  «        |z   }|€/t          ¦   «         s!||
z   }t          j        |	||j
        ¬¦  «        }t          |t          ¦  «        r|j        n|}t          | j        |||¬¦  «        }t!          | j        |||¬¦  «        }|                      |||¬¦  «        }|                     |j
        ¦  «        }||z   }|                      |¦  «        }t(          j                             || j        | j        ¬	¦  «        }t1          | j        ¦  «        D ];\  }}| j        r t          j        g ¦  «        }|| j        k     rŒ, ||||f|||d
œ|¤Ž}Œ<t9          ||¬¦  «        S )NzJYou must specify exactly one of decoder_input_ids or decoder_inputs_embeds)r‚   r,   r   rï   )r‚   r,  rg   r�   )r‚   r,  rg   rÑ   )rC   ro   )rÒ   r�   rÓ   )r.  r�   )r0   r$  r‚   Úis_encoder_decoderr   r   rr   Úget_seq_lengthrG   rH   rF   r    Úonesr”   r˜   r   r   r%  r/  r)  r   ru   ri   rq   r0  r™   r1  r  r   )r@   r(   rg   rÑ   rÒ   r�   r,  rÓ   rj   Ú
batch_sizeÚ
seq_lengthrB   rC   Úmask_seq_lengthÚself_attn_cacheÚ	positionsrŽ   r3  Údecoder_layerr6  s                       r3   rM   zBartDecoder.forwardO  s·  € ð ˜Ð -°tÐ";Ñ<ð 	kÝÐiÑjÔjÐjàÐ Ø ×-Ò-¨iÑ8Ô8ˆMð ð 	˜Ð0ð )Ð4¸¼Ô8VÐ4õ $¥L¸¼Ð$DÑ$DÔ$DÅlÐZ^ÔZeÐFfÑFfÔFfÑgÔgÐgå!¨¬Ð5Ñ5Ô5ð ð "/×!3Ò!3Ñ!5Ô!5°c°r°cÔ!:Ñˆ
�JØETÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐÝ”| J°}Ô7KÐLÑLÔLÐOeÑeˆàÐ!Õ*BÑ*DÔ*DÐ!à4°zÑAˆOÝ"œZ¨
°OÈMÔL`ÐaÑaÔaˆNõ ˜/Õ+>Ñ?Ô?ð!ˆOÔ0Ð0à ð 	õ ,Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
ˆõ ";Ø”;Ø'Ø1Ø"7ð	"
ñ "
ô "
Ðð ×(Ò(¨Ð4JÐYeÐ(ÑfÔfˆ	Ø—L’L Ô!5Ñ6Ô6ˆ	à%¨	Ñ1ˆØ×0Ò0°Ñ?Ô?ˆåœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆå"+¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àŒ}ð Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Øà)˜MØØØ%ðð (>Ø /Ø#ðð ð ðð ˆMˆMõ 9Ø+Ø+ð
ñ 
ô 
ð 	
r5   )NNNNNNN)rP   rQ   rR   rS   rË   r$   r|   r7  r'   r?   r#   r%   r   rG   r8  rU   rÉ   r   r«   r   r   r   rM   rV   rW   s   @r3   r:  r:  (  sx  ø€ € € € € ðð ð *Ø$�n ]¸!ÈÐTÑTÔTØ*˜N¨=ÀÈnÐ]Ñ]Ô]ðð Ðð˜zð ð ð ð ð ð ð0  ØØð .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%ðR
ð R
àÔ# dÑ*ðR
ð œ tÑ+ðR
ð  %Ô0°4Ñ7ð	R
ð
 !&Ô 0°4Ñ 7ðR
ð  ™ðR
ð Ô(¨4Ñ/ðR
ð ˜$‘;ðR
ð Ð+Ô,ðR
ð 
3ðR
ð R
ð R
ñ „^ñ „_ñ  ÔðR
ð R
ð R
ð R
ð R
r5   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
j                 dz  de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 )Ú	BartModelzshared.weight)zdecoder.embed_tokens.weightzencoder.embed_tokens.weightr‚   c                 ó\  •— t          ¦   «                              |¦  «         |j        |j        }}|j        rt          j        |j        ¦  «        nd}t          ||j        ||¬¦  «        | _	        t          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )NrZ   r  )r>   r?   r)   r#  r   r!  r"  r°   rY   Úsharedr  Úencoderr:  Údecoderr+  )r@   r‚   r[   r#  r\   rA   s        €r3   r?   zBartModel.__init__®  s™   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à"(Ô"5°vÔ7H�ZˆØ39Ô3IÐR•d”i ¤Ñ/Ô/Ð/ÈsˆÝ-¨j¸&¼.È+ÐcnÐoÑoÔoˆŒå" 6Ñ*Ô*ˆŒÝ" 6Ñ*Ô*ˆŒð 	�ŠÑÔÐÐÐr5   c                 ó   — | j         S r^   )rP  r  s    r3   Úget_input_embeddingszBartModel.get_input_embeddings»  s
   € ØŒ{Ðr5   c                 óX   — || _         | j         | j        _        | j         | j        _        d S r^   )rP  rQ  r$  rR  ©r@   rf   s     r3   Úset_input_embeddingszBartModel.set_input_embeddings¾  s'   € ØˆŒØ$(¤KˆŒÔ!Ø$(¤KˆŒÔ!Ð!Ð!r5   Nr(   rg   Údecoder_input_idsÚdecoder_attention_maskÚencoder_outputsr�   r,  Údecoder_inputs_embedsrÓ   rj   r‘   c
                 ó  — |€8|€6|€t          d¦  «        ‚t          || j        j        | j        j        ¦  «        }|€ | j        d
|||dœ|
¤Ž}nct          |t          ¦  «        sNt          |d         t          |¦  «        dk    r|d         ndt          |¦  «        dk    r|d         nd¬¦  «        } | j	        d
|||d         ||||	dœ|
¤Ž}t          |j        |j        |j        |j        |j        |j        |j        |j        ¬	¦  «        S )áË  
        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.
        Nz°If no `decoder_input_ids` or `decoder_inputs_embeds` are passed, `input_ids` cannot be `None`. Please pass either `input_ids` or `decoder_input_ids` or `decoder_inputs_embeds`.)r(   rg   r,  r   r&   r<   )r.  rŽ   r  ©r(   rg   rÑ   rÒ   r�   r,  rÓ   )r.  r�   Údecoder_hidden_statesÚdecoder_attentionsr=  Úencoder_last_hidden_staterÑ   Úencoder_attentionsr  )r0   r4   r‚   r)   r*   rQ  r”   r   ÚlenrR  r   r.  r�   rŽ   r  r=  )r@   r(   rg   rX  rY  rZ  r�   r,  r[  rÓ   rj   Údecoder_outputss               r3   rM   zBartModel.forwardÃ  sŽ  € ðP Ð$Ð)>Ð)FØÐ Ý ðUñô ð õ !3Ø˜4œ;Ô3°T´[Ô5Wñ!ô !Ðð Ð"Ø/;¨t¬|ð 0Ø#Ø-Ø+ð0ð 0ð ð	0ð 0ˆOˆOõ ˜O­_Ñ=Ô=ð 	Ý-Ø"1°!Ô"4Ý47¸Ñ4HÔ4HÈ1Ò4LÐ4L˜o¨aÔ0Ð0ÐRVÝ14°_Ñ1EÔ1EÈÒ1IÐ1I˜?¨1Ô-Ð-Ètðñ ô ˆOð FRÀTÄ\ð 	F
Ø'Ø1Ø"1°!Ô"4Ø#1Ø+Ø/Øð	F
ð 	F
ð ð	F
ð 	F
ˆõ "Ø-Ô?Ø+Ô;Ø"1Ô"?Ø.Ô9Ø,Ô=Ø&5Ô&GØ"1Ô"?Ø.Ô9ð	
ñ 	
ô 	
ð 		
r5   ©	NNNNNNNNN)rP   rQ   rR   Ú_tied_weights_keysr'   r?   rT  rW  r   r   rG   r8  rU   ÚlistrÉ   r   r«   r   r   r¬   r   rM   rV   rW   s   @r3   rN  rN  §  s”  ø€ € € € € ð (7Ø'6ðð Ðð
˜zð ð ð ð ð ð ðð ð ð0ð 0ð 0ð
 Øð .2Ø.2Ø59Ø:>Ø:>Ø(,Ø26Ø:>Ø!%ðT
ð T
àÔ# dÑ*ðT
ð œ tÑ+ðT
ð !Ô+¨dÑ2ð	T
ð
 !&Ô 0°4Ñ 7ðT
ð ˜eÔ/Ô0°4Ñ7ðT
ð  ™ðT
ð Ô(¨4Ñ/ðT
ð  %Ô0°4Ñ7ðT
ð ˜$‘;ðT
ð Ð+Ô,ðT
ð 
Ð#Ñ	#ðT
ð T
ð T
ñ „^ñ ÔðT
ð T
ð T
ð T
ð T
r5   rN  zV
    The BART Model with a language modeling head. Can be used for summarization.
    )Úcustom_introc                   ó¤  ‡ — e Zd ZdZddiZdg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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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dej        fd„Zˆ xZS )rå   râ   úlm_head.weightzmodel.shared.weightrè   r‚   c                 ól  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      dt          j        d| j        j        j        f¦  «        ¦  «         t          j
        |j        | j        j        j        d¬¦  «        | _        |                      ¦   «          d S )Nrè   r&   Fr…   )r>   r?   rN  râ   Úregister_bufferrG   ÚzerosrP  r8   r   r‰   r°   Úlm_headr+  ©r@   r‚   rA   s     €r3   r?   z%BartForConditionalGeneration.__init__(  s“   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜vÑ&Ô&ˆŒ
Ø×ÒÐ0µ%´+¸qÀ$Ä*ÔBSÔBbÐ>cÑ2dÔ2dÑeÔeÐeÝ”y ¤°´Ô1BÔ1QÐX]Ð^Ñ^Ô^ˆŒð 	�ŠÑÔÐÐÐr5   NTÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingr‘   c                 ó˜   •— t          ¦   «                              |||¦  «        }|                      |j        j        d         ¦  «         |S )Nr   )r>   Úresize_token_embeddingsÚ_resize_final_logits_biasrJ   r.   )r@   rp  rq  rr  Únew_embeddingsrA   s        €r3   rt  z4BartForConditionalGeneration.resize_token_embeddings1  sG   ø€ õ ™œ×8Ò8¸ÐI[Ð]jÑkÔkˆØ×&Ò& ~Ô'<Ô'BÀ1Ô'EÑFÔFÐFØÐr5   c                 ó  — | j         j        d         }||k    r| j         d d …d |…f         }nBt          j        d||z
  f| j         j        ¬¦  «        }t          j        | j         |gd¬¦  «        }|                      d|¦  «         d S )Nr,   r&   rï   rm   rè   )rè   r.   rG   rm  rF   Úcatrl  )r@   rp  Úold_num_tokensÚnew_biasÚ
extra_biass        r3   ru  z6BartForConditionalGeneration._resize_final_logits_bias8  s—   € ØÔ/Ô5°bÔ9ˆØ˜^Ò+Ð+ØÔ-¨a¨a¨a°°.°Ð.@ÔAˆHˆHåœ a¨¸.Ñ)HÐ%IÐRVÔRhÔRoÐpÑpÔpˆJÝ”y $Ô"8¸*Ð!EÈ1ÐMÑMÔMˆHØ×ÒÐ0°(Ñ;Ô;Ð;Ð;Ð;r5   r(   rg   rX  rY  rZ  r�   r,  r[  ÚlabelsrÓ   rj   c                 ó„  — |	�G|
rt                                d¦  «         d}
|€'|€%t          |	| j        j        | j        j        ¦  «        } | j        |f||||||||
dœ|¤Ž}|                      |d         ¦  «        }|| j         	                    |j
        ¦  «        z   }d}|	�e|	 	                    |j
        ¦  «        }	t          ¦   «         } ||                     d| j        j        ¦  «        |	                     d¦  «        ¦  «        }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.
        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 summarization:

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

        >>> model = BartForConditionalGeneration.from_pretrained("facebook/bart-large-cnn")
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large-cnn")

        >>> ARTICLE_TO_SUMMARIZE = (
        ...     "PG&E stated it scheduled the blackouts in response to forecasts for high winds "
        ...     "amid dry conditions. The aim is to reduce the risk of wildfires. Nearly 800 thousand customers were "
        ...     "scheduled to be affected by the shutoffs which were expected to last through at least midday tomorrow."
        ... )
        >>> inputs = tokenizer([ARTICLE_TO_SUMMARIZE], max_length=1024, return_tensors="pt")

        >>> # Generate Summary
        >>> summary_ids = model.generate(inputs["input_ids"], num_beams=2, min_length=0, max_length=20)
        >>> tokenizer.batch_decode(summary_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        'PG&E scheduled the blackouts in response to forecasts for high winds amid dry conditions'
        ```

        Mask filling example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/bart-base")
        >>> model = BartForConditionalGeneration.from_pretrained("facebook/bart-base")

        >>> TXT = "My friends are <mask> but they eat too many carbs."
        >>> input_ids = tokenizer([TXT], 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()
        ['not', 'good', 'healthy', 'great', 'very']
        ```
        NzJThe `use_cache` argument is changed to `False` since `labels` is provided.F)rg   rX  rZ  rY  r�   r,  r[  rÓ   r   r,   ©	ÚlossÚlogitsr�   r_  r`  r=  ra  rÑ   rb  )r‡   Úwarningr4   r‚   r)   r*   râ   rn  rè   r/  rF   r   r“   r#  r   r�   r_  r`  r=  ra  rÑ   rb  )r@   r(   rg   rX  rY  rZ  r�   r,  r[  r|  rÓ   rj   ÚoutputsÚ	lm_logitsÚmasked_lm_lossÚloss_fcts                   r3   rM   z$BartForConditionalGeneration.forwardA  sw  € ðh ÐØð mÝ—’ÐkÑlÔlÐlØˆIØ Ð(Ð-BÐ-JÝ$6Ø˜DœKÔ4°d´kÔ6Xñ%ô %Ð!ð '1 d¤jØð'
à)Ø/Ø+Ø#9Ø+Ø'Ø"7Øð'
ð '
ð ð'
ð '
ˆð —L’L ¨¤Ñ,Ô,ˆ	Ø Ô 6× 9Ò 9¸)Ô:JÑ KÔ KÑKˆ	àˆØÐØ—Y’Y˜yÔ/Ñ0Ô0ˆFÝ'Ñ)Ô)ˆHØ%˜X i§n¢n°R¸¼Ô9OÑ&PÔ&PÐRX×R]ÒR]Ð^`ÑRaÔRaÑbÔbˆNåØØØ#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð

ñ 

ô 

ð 
	
r5   c                 óL   — t          || j        j        | j        j        ¦  «        S r^   )r4   r‚   r)   r*   )r@   r|  s     r3   Ú%prepare_decoder_input_ids_from_labelszBBartForConditionalGeneration.prepare_decoder_input_ids_from_labelsÀ  s   € Ý! &¨$¬+Ô*BÀDÄKÔDfÑgÔgÐgr5   )NT©
NNNNNNNNNN)rP   rQ   rR   rõ   rf  Ú_keys_to_ignore_on_load_missingr'   r?   rT   r«   r   Ú	Embeddingrt  ru  r   r   rG   r8  rU   rg  rÉ   r   r   r   r¬   r   rM   r‡  rV   rW   s   @r3   rå   rå     s,  ø€ € € € € ð  ÐàÐ/ðÐð (;Ð&;Ð#ð˜zð ð ð ð ð ð ð aeðð Ø!ðØ7:¸T±zðØY]ðà	Œðð ð ð ð ð ð<¸ð <Àð <ð <ð <ð <ð Øð .2Ø.2Ø59Ø:>Ø:>Ø(,Ø26Ø:>Ø*.Ø!%ð{
ð {
àÔ# dÑ*ð{
ð œ tÑ+ð{
ð !Ô+¨dÑ2ð	{
ð
 !&Ô 0°4Ñ 7ð{
ð ˜eÔ/Ô0°4Ñ7ð{
ð  ™ð{
ð Ô(¨4Ñ/ð{
ð  %Ô0°4Ñ7ð{
ð Ô  4Ñ'ð{
ð ˜$‘;ð{
ð Ð+Ô,ð{
ð 
�Ñ	 ð{
ð {
ð {
ñ „^ñ Ôð{
ðzh¸E¼Lð hð hð hð hð hð hð hð hr5   rå   z…
    Bart model with a sequence classification/head on top (a linear layer on top of the pooled output) e.g. for GLUE
    tasks.
    c                   ó0  ‡ — 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 )ÚBartForSequenceClassificationr‚   c                 óâ   •—  t          ¦   «         j        |fi |¤Ž t          |¦  «        | _        t	          |j        |j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r^   )
r>   r?   rN  râ   rÖ   r°   Ú
num_labelsÚclassifier_dropoutÚclassification_headr+  )r@   r‚   rj   rA   s      €r3   r?   z&BartForSequenceClassification.__init__Ë  sq   ø€ Ø�‰ŒÔ˜Ð*Ð* 6Ð*Ð*Ð*Ý˜vÑ&Ô&ˆŒ
Ý#9ØŒNØŒNØÔØÔ%ñ	$
ô $
ˆÔ ð 	�ŠÑÔÐÐÐr5   Nr(   rg   rX  rY  rZ  r,  r[  r|  rÓ   rj   r‘   c
                 óJ  — |�d}	|€|�t          d| j        j        › �¦  «        ‚ | j        |f|||||||	dœ|
¤Ž}|d         }|                     | j        j        ¦  «                             |j        ¦  «        }t          t          j        |                     d¦  «        ¦  «                             ¦   «         dk    d¦  «         ||dd…f         }t          |j        d         |j        d         z  dk    d¦  «         |                     |                     d¦  «        d	|                     d	¦  «        ¦  «        dd…d	dd…f         }|                      |¦  «        }d}|��ˆ|                     |j        ¦  «        }| j        j        €p| j        j        dk    rd
| j        _        nS| j        j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j        _        nd| j        _        | j        j        d
k    r\t/          ¦   «         }| j        j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }n“ |||¦  «        }n†| j        j        dk    rLt3          ¦   «         } ||                     d	| j        j        ¦  «        |                     d	¦  «        ¦  «        }n*| j        j        dk    rt5          ¦   «         } |||¦  «        }t7          |||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.
        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 ©rg   rX  rY  rZ  r,  r[  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_classificationr~  )#ÚNotImplementedErrorrA   rP   râ   Úeqr‚   Úeos_token_idr/  rF   r"   rG   Úunique_consecutiveÚsumÚnumelr.   r“   rr   r�  Úproblem_typerŽ  rE   rI   rT   r   Úsqueezer   r   r   r�   r_  r`  r=  ra  rÑ   rb  )r@   r(   rg   rX  rY  rZ  r,  r[  r|  rÓ   rj   r‚  rŽ   Úeos_maskÚselectedÚsentence_representationr€  r  r…  s                      r3   rM   z%BartForSequenceClassification.forwardØ  sH  € ðR ÐØˆIàÐ Ð!:Ý%ØdÈ4Ì>ÔKbÐdÐdñô ð ð '1 d¤jØð
'
à)Ø/Ø#9Ø+Ø'Ø"7Øð
'
ð 
'
ð ð
'
ð 
'
ˆð   œ
ˆà—<’< ¤Ô 8Ñ9Ô9×<Ò<¸]Ô=QÑRÔRˆåÝÔ$ X§\¢\°!¡_¤_Ñ5Ô5×;Ò;Ñ=Ô=ÀÒBØEñ	
ô 	
ð 	
ð ! ¨1¨1¨1 Ô-ˆÝØŒN˜1Ô Ô!4°QÔ!7Ñ7¸1Ò<ØAñ	
ô 	
ð 	
ð #+§-¢-°×0BÒ0BÀ1Ñ0EÔ0EÀrÈ=×K]ÒK]Ð^`ÑKaÔKaÑ"bÔ"bÐcdÐcdÐcdÐfhÐjkÐjkÐjkÐckÔ"lÐØ×)Ò)Ð*AÑBÔBˆàˆØÑØ—Y’Y˜vœ}Ñ-Ô-ˆFØŒ{Ô'Ð/Ø”;Ô)¨QÒ.Ð.Ø/;�D”KÔ,Ð,Ø”[Ô+¨aÒ/Ð/°V´\ÅUÄZÒ5OÐ5OÐSYÔS_ÕchÔclÒSlÐSlØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”;Ô)¨QÒ.Ð.Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ô0FÑ GÔ GÈÏÊÐUWÉÌÑYÔY��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�å.ØØØ#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð

ñ 

ô 

ð 
	
r5   re  )rP   rQ   rR   r'   r?   r   r   rG   r8  rU   rg  rÉ   r«   r   r   r¬   r   rM   rV   rW   s   @r3   rŒ  rŒ  Ä  se  ø€ € € € € ð˜zð ð ð ð ð ð ð Øð .2Ø.2Ø59Ø:>Ø:>Ø26Ø:>Ø*.Ø!%ðl
ð l
àÔ# dÑ*ðl
ð œ tÑ+ðl
ð !Ô+¨dÑ2ð	l
ð
 !&Ô 0°4Ñ 7ðl
ð ˜eÔ/Ô0°4Ñ7ðl
ð Ô(¨4Ñ/ðl
ð  %Ô0°4Ñ7ðl
ð Ô  4Ñ'ðl
ð ˜$‘;ðl
ð Ð+Ô,ðl
ð 
Ð0Ñ	0ðl
ð l
ð l
ñ „^ñ Ôðl
ð l
ð l
ð l
ð l
r5   rŒ  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 )ÚBartForQuestionAnsweringc                 ó  •— t          ¦   «                              |¦  «         d|_        |j        | _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r;   )
r>   r?   rŽ  rN  râ   r   r‰   Úhidden_sizeÚ
qa_outputsr+  ro  s     €r3   r?   z!BartForQuestionAnswering.__init__K  sm   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆÔØ Ô+ˆŒå˜vÑ&Ô&ˆŒ
Ýœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr5   Nr(   rg   rX  rY  rZ  Ústart_positionsÚend_positionsr,  r[  rÓ   rj   r‘   c                 ó’  — |�|�d}
 | j         |f||||||	|
dœ|¤Ž}|d         }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d}|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «        }|                     d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   d	z  }t          ||||j
        |j        |j        |j        |j        |j        |j        ¬
¦
  «
        S )r]  NFr’  r   r&   r,   rm   )Úignore_indexr<   )
r  Ústart_logitsÚ
end_logitsr�   r_  r`  r=  ra  rÑ   rb  )râ   r¥  Úsplitr�  rw   rc  rr   rÅ   r   r   r�   r_  r`  r=  ra  rÑ   rb  )r@   r(   rg   rX  rY  rZ  r¦  r§  r,  r[  rÓ   rj   r‚  Úsequence_outputr€  rª  r«  Ú
total_lossÚignored_indexr…  Ú
start_lossÚend_losss                         r3   rM   z BartForQuestionAnswering.forwardW  s  € ðN Ð&¨=Ð+DØˆIà&0 d¤jØð
'
à)Ø/Ø#9Ø+Ø'Ø"7Øð
'
ð 
'
ð ð
'
ð 
'
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå2ØØ%Ø!Ø#Ô3Ø")Ô"?Ø&Ô9Ø$Ô5Ø&-Ô&GØ")Ô"?Ø&Ô9ð
ñ 
ô 
ð 	
r5   rˆ  )rP   rQ   rR   r?   r   r   rG   rU   r8  rg  rÉ   r«   r   r   r¬   r   rM   rV   rW   s   @r3   r¢  r¢  I  sn  ø€ € € € € ð
ð 
ð 
ð 
ð 
ð Øð *.Ø.2Ø59Ø:>Ø:>Ø37Ø15Ø26Ø:>Ø!%ðW
ð W
à”< $Ñ&ðW
ð œ tÑ+ðW
ð !Ô+¨dÑ2ð	W
ð
 !&Ô 0°4Ñ 7ðW
ð ˜eÔ/Ô0°4Ñ7ðW
ð Ô)¨DÑ0ðW
ð Ô'¨$Ñ.ðW
ð Ô(¨4Ñ/ðW
ð  %Ô0°4Ñ7ðW
ð ˜$‘;ðW
ð Ð+Ô,ðW
ð 
Ð4Ñ	4ðW
ð W
ð W
ñ „^ñ ÔðW
ð W
ð W
ð W
ð W
r5   r¢  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚBartDecoderWrapperz½
    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                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S r^   )r>   r?   r:  rR  r+  ro  s     €r3   r?   zBartDecoderWrapper.__init__¹  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒØ�ŠÑÔÐÐÐr5   c                 ó   —  | j         |i |¤ŽS r^   )rR  )r@   Úargsrj   s      r3   rM   zBartDecoderWrapper.forward¾  s   € ØˆtŒ|˜TÐ, VÐ,Ð,Ð,r5   )rP   rQ   rR   rS   r?   rM   rV   rW   s   @r3   r³  r³  ³  sQ   ø€ € € € € ðð ð
ð ð ð ð ð
-ð -ð -ð -ð -ð -ð -r5   r³  zu
    BART decoder with a language modeling head on top (linear layer with weights tied to the input embeddings).
    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 )ÚBartForCausalLMrj  z!model.decoder.embed_tokens.weightc                 ó  •— d|_         d|_        t          ¦   «                              |¦  «         t	          |¦  «        | _        t          j        |j        |j	        d¬¦  «        | _
        |                      ¦   «          d S )NTFr…   )r   rD  r>   r?   r³  râ   r   r‰   r¤  r#  rn  r+  ro  s     €r3   r?   zBartForCausalLM.__init__Ì  sp   ø€ Ø ˆÔØ$)ˆÔ!Ý‰Œ×Ò˜Ñ Ô Ð Ý'¨Ñ/Ô/ˆŒ
å”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr5   c                 ó$   — | j         j        j        S r^   ©râ   rR  r$  r  s    r3   rT  z$BartForCausalLM.get_input_embeddings×  s   € ØŒzÔ!Ô.Ð.r5   c                 ó(   — || j         j        _        d S r^   r»  rV  s     r3   rW  z$BartForCausalLM.set_input_embeddingsÚ  s   € Ø*/ˆŒ
ÔÔ'Ð'Ð'r5   Nr   r(   rg   rÑ   rÒ   r�   r,  r|  rÓ   Úlogits_to_keeprj   r‘   c
                 óþ  —  | j         j        d|||||||dœ|
¤Ž}|d         }t          |	t          ¦  «        rt	          |	 d¦  «        n|	}|                      |dd…|dd…f         ¦  «        }d}|�e|                     |j        ¦  «        }t          ¦   «         } || 	                    d| j
        j        ¦  «        | 	                    d¦  «        ¦  «        }t          |||j        |j        |j        |j        ¬¦  «        S )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, BartForCausalLM

        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/bart-base")
        >>> model = BartForCausalLM.from_pretrained("facebook/bart-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
        ```r^  r   Nr,   )r  r€  r�   rŽ   r  r=  r  )râ   rR  r”   rT   Úslicern  r/  rF   r   r“   r‚   r#  r   r�   rŽ   r  r=  )r@   r(   rg   rÑ   rÒ   r�   r,  r|  rÓ   r½  rj   r‚  rŽ   Úslice_indicesr€  r  r…  s                    r3   rM   zBartForCausalLM.forwardÝ  s)  € ðL >P¸T¼ZÔ=Oð 	>
ØØ)Ø"7Ø#9Ø+Ø'Øð	>
ð 	>
ð ð	>
ð 	>
ˆð   œ
ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ—Y’Y˜vœ}Ñ-Ô-ˆFÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬KÔ,BÑCÔCÀVÇ[Â[ÐQSÁ_Ä_ÑUÔUˆDå0ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
r5   )	NNNNNNNNr   )rP   rQ   rR   rf  r?   rT  rW  r   r   rG   r8  rU   rÉ   r   r«   rT   r   r   r¬   r   rM   rV   rW   s   @r3   r¸  r¸  Â  s}  ø€ € € € € ð 	Ð=ðÐð	ð 	ð 	ð 	ð 	ð/ð /ð /ð0ð 0ð 0ð Øð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø-.ðA
ð A
àÔ# dÑ*ðA
ð œ tÑ+ðA
ð  %Ô0°4Ñ7ð	A
ð
 !&Ô 1°DÑ 8ðA
ð  ™ðA
ð Ô(¨4Ñ/ðA
ð Ô  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eœlÑ*ðA
ð Ð+Ô,ðA
ð 
Ð2Ñ	2ðA
ð A
ð A
ñ „^ñ ÔðA
ð A
ð A
ð A
ð A
r5   r¸  )r¸  rå   r¢  rŒ  rN  rá   r  r   )Nrb   )TrS   r!  r  Úcollections.abcr   rG   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"   Úutils.genericr#   Úutils.output_capturingr$   r%   Úconfiguration_bartr'   Ú
get_loggerrP   r‡   rU   rT   r4   rŠ  r7   rY   ÚModulera   rz   r|   r®   rË   rÖ   rá   r   r  r  r:  rN  rå   rŒ  r¢  r³  r¸  Ú__all__r  r5   r3   ú<module>rÔ     s¹  ðð Ð à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ *Ð *Ð *Ð *Ð *Ð *ð 
ˆÔ	˜HÑ	%Ô	%€ð %¤,ð ¸cð Ð[^ð ð ð ð ð ;ð ;ð ;ð ;ð ; R¤\ñ ;ô ;ð ;ð6
=ð 
=ð 
=ð 
=ð 
=˜bœlñ 
=ô 
=ð 
=ð( !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8r)ð r)ð r)ð r)ð r)�B”Iñ r)ô r)ð r)ðj0ð 0ð 0ð 0ð 0Ð1ñ 0ô 0ð 0ðfOð Oð Oð Oð OÐ1ñ Oô Oð Oðdð ð ð ð ˜RœYñ ô ð ð0 ðð ð ð ð ˜/ñ ô ñ „ðð:
ð 
ð 
ð 
ð 
Ð-ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
Ð-ñ 
ô 
ð 
ðV
ð V
ð V
ð V
ð V
Ð%ñ V
ô V
ð V
ðr|
ð |
ð |
ð |
ð |
Ð%ñ |
ô |
ð |
ð~ ðq
ð q
ð q
ð q
ð q
Ð#ñ q
ô q
ñ „ðq
ðh €ððñ ô ð
`hð `hð `hð `hð `hÐ#6¸ñ `hô `hñô ð
`hðF €ððñ ô ð|
ð |
ð |
ð |
ð |
Ð$7ñ |
ô |
ñô ð|
ð~ ðf
ð f
ð f
ð f
ð f
Ð2ñ f
ô f
ñ „ðf
ðR-ð -ð -ð -ð -Ð,ñ -ô -ð -ð €ððñ ô ð
Y
ð Y
ð Y
ð Y
ð Y
Ð)¨?ñ Y
ô Y
ñô ð
Y
ðx	ð 	ð 	€€€r5   