Ë
    ÜÓ^j	 ã                   ó  — d Z ddl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mZmZmZmZmZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z% ddl&m'Z'  e$jP                  e)«      Z*dejV                  de,de,fd„Z- G d„ dej\                  «      Z/ G d„ dej`                  «      Z1 G d„ de«      Z2 G d„ de«      Z3 G d„ dej`                  «      Z4 G d„ d ej`                  «      Z5e# G d!„ d"e!«      «       Z6 G d#„ d$e6«      Z7 G d%„ d&e6«      Z8e# G d'„ d(e6«      «       Z9 e#d)¬*«       G d+„ d,e6e«      «       Z: e#d-¬*«       G d.„ d/e6«      «       Z;e# G d0„ d1e6«      «       Z< G d2„ d3e6«      Z= G d4„ d5e6e«      Z>g d6¢Z?y)7zPyTorch MVP model.é    N)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚ)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚSeq2SeqLMOutputÚSeq2SeqModelOutputÚ#Seq2SeqQuestionAnsweringModelOutputÚSeq2SeqSequenceClassifierOutput)ÚPreTrainedModel)Úauto_docstringÚloggingÚtorch_compilable_checké   )Ú	MvpConfigÚ	input_idsÚpad_token_idÚdecoder_start_token_idc                 óÖ   — | j                  | j                  «      }| dd…dd…f   j                  «       |dd…dd…f<   ||dd…df<   |€t        d«      ‚|j	                  |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       úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mvp/modeling_mvp.pyÚshift_tokens_rightr*   .   s}   € ð "×+Ñ+¨I¯O©OÓ<ÐØ(ª¨C¨R¨C¨Ñ0×6Ñ6Ó8Ð’a˜™�eÑØ4Ð’a˜�dÑàÐÜÐLÓMÐMà×"Ñ"Ð#4¸Ñ#<¸lÔKàÐó    c                   óv   ‡ — e Zd ZdZdedefˆ fd„Z	 d
dej                  dedej                  dz  fˆ fd	„Zˆ xZ	S )ÚMvpLearnedPositionalEmbeddingzN
    This module learns positional embeddings up to a fixed maximum size.
    Únum_embeddingsÚembedding_dimc                 óN   •— d| _         t        ‰| �	  || j                   z   |«       y ©Né   )ÚoffsetÚsuperÚ__init__)Úselfr.   r/   Ú	__class__s      €r)   r5   z&MvpLearnedPositionalEmbedding.__init__D   s$   ø€ ð ˆŒÜ‰Ñ˜¨$¯+©+Ñ5°}ÕEr+   Nr   Úpast_key_values_lengthÚposition_idsc                 ó$  •— |€a|j                   dd \  }}t        j                  |||z   t        j                  | j                  j
                  ¬«      j                  |d«      }n|j                  d«      }t        ‰| �%  || j                  z   «      S )z3`input_ids' shape is expected to be [bsz x seqlen].Nr2   )ÚdtypeÚdevicer"   r   )r$   ÚtorchÚarangeÚlongÚweightr<   ÚexpandÚ	unsqueezer4   Úforwardr3   )r6   r   r8   r9   ÚbszÚseq_lenr7   s         €r)   rC   z%MvpLearnedPositionalEmbedding.forwardJ   sˆ   ø€ ð
 ÐØ$Ÿ?™?¨2¨AÐ.‰LˆC�Ü Ÿ<™<Ø&Ð(>ÀÑ(HÔPU×PZÑPZÐcg×cnÑcn×cuÑcuôç‰f�S˜"‹oñ ð (×1Ñ1°!Ó4ˆLä‰w‰˜|¨d¯k©kÑ9Ó:Ð:r+   )r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr5   r=   ÚTensorrC   Ú__classcell__©r7   s   @r)   r-   r-   ?   sW   ø„ ñðF sð F¸3õ Fð mqñ;ØŸ™ð;Ø?Bð;ØV[×VbÑVbÐeiÑVi÷;ñ ;r+   r-   c                   óP  ‡ — e Zd ZdZ	 	 	 	 ddedededz  dedz  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j                  dz  dedeej                  ej                  dz  eej                     dz  f   fd„Zˆ xZS )ÚMvpAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚ	embed_dimÚ	num_headsÚdropoutÚ
is_decoderÚbiasÚ	layer_idxc                 óü  •— t         ‰| �  «        || _        || _        || _        ||z  | _        | j
                  |z  | j                  k7  rt        d| j                  › d|› d�«      ‚| j
                  dz  | _        || _        || _	        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        t        j                  |||¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿©rT   )r4   r5   rP   rQ   rR   Úhead_dimr&   ÚscalingrS   rU   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r6   rP   rQ   rR   rS   rT   rU   r7   s          €r)   r5   zMvpAttention.__init__]   sÝ   ø€ ô 	‰ÑÔØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒà�M‰M˜IÑ%¨$¯.©.Ò8ÜØMÈdÏnÉnÐM]Ø$ Y K¨rð3óð ð —}‘} dÑ*ˆŒØ$ˆŒØ"ˆŒä—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜ—i‘i 	¨9¸4Ô@ˆŒÜŸ	™	 )¨Y¸TÔBˆ�r+   Úhidden_statesÚkey_value_statesÚpast_key_valuesÚattention_maskÚattn_promptÚoutput_attentionsÚreturnc                 ó  — |du}|j                  «       \  }	}
}| j                  |«      | j                  z  }d}|�St        |t        «      rA|j
                  j                  | j                  «      }|r|j                  }n|j                  }n|}|r|n|}|rK|�I|rGj                  | j                     j                  }|j                  | j                     j                  }nß| j                  |«      }| j                  |«      }|j                  |	d| j                   | j"                  «      j%                  dd«      }|j                  |	d| j                   | j"                  «      j%                  dd«      }|�Kj'                  ||| j                  «      \  }}|r)t        |t        «      rd|j
                  | j                  <   |�ºt)        j*                  |d   j-                  |	ddd«      |gd¬«      }t)        j*                  |d   j-                  |	ddd«      |gd¬«      }|�\t)        j.                  |	d|
|d   j                  d«      «      j1                  |j2                  «      }t)        j*                  ||gd¬«      }|	| j                   z  d| j"                  f}|j                  |	|
| j                   | j"                  «      j%                  dd«      } |j4                  |Ž } |j4                  |Ž } |j4                  |Ž }|j                  d«      }t)        j6                  ||j%                  dd«      «      }|j                  «       |	| j                   z  |
|fk7  r/t9        d	|	| j                   z  |
|f› d
|j                  «       › �«      ‚|�{|j                  «       |	d|
|fk7  r#t9        d|	d|
|f› d
|j                  «       › �«      ‚|j                  |	| j                   |
|«      |z   }|j                  |	| j                   z  |
|«      }t:        j<                  j?                  |d¬«      }|r?|j                  |	| j                   |
|«      }|j                  |	| j                   z  |
|«      }nd}t:        j<                  jA                  || j@                  | jB                  ¬«      }t)        j6                  ||«      }|j                  «       |	| j                   z  |
| j"                  fk7  r7t9        d|	| j                   |
| j"                  f› d
|j                  «       › �«      ‚|j                  |	| j                   |
| j"                  «      }|j%                  dd«      }|j5                  |	|
| jD                  «      }| jG                  |«      }||fS )z#Input shape: Batch x Time x ChannelNFr"   r   r2   Tr   ©Údimz$Attention weights should be of size z	, but is z!Attention mask should be of size ©ÚpÚtrainingz `attn_output` should be of size )$Úsizer]   rY   Ú
isinstancer   Ú
is_updatedÚgetrU   Úcross_attention_cacheÚself_attention_cacheÚlayersÚkeysÚvaluesr[   r\   ÚviewrQ   rX   Ú	transposeÚupdater=   ÚcatrA   ÚzerosÚtor<   ÚreshapeÚbmmr&   r   Ú
functionalÚsoftmaxrR   rk   rP   r^   )r6   r_   r`   ra   rb   rc   rd   ÚkwargsÚis_cross_attentionrD   Útgt_lenÚ_Úquery_statesrn   Úcurr_past_key_valuesÚcurrent_statesÚ
key_statesÚvalue_statesÚprompt_maskÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                            r)   rC   zMvpAttention.forwardz   s;  € ð .°TÐ9Ðà'×,Ñ,Ó.‰ˆˆW�að —{‘{ =Ó1°D·L±LÑ@ˆàˆ
ØÐ&Ü˜/Ô+>Ô?Ø,×7Ñ7×;Ñ;¸D¿N¹NÓK�
Ù%à+:×+PÑ+PÑ(à+:×+OÑ+OÑ(à'6Ð$á-?Ñ)À]ˆÙ /Ð"=Á*à-×4Ñ4°T·^±^ÑD×IÑIˆJØ/×6Ñ6°t·~±~ÑF×MÑM‰LàŸ™ ^Ó4ˆJØŸ;™; ~Ó6ˆLØ#Ÿ™¨¨b°$·.±.À$Ç-Á-ÓP×ZÑZÐ[\Ð^_Ó`ˆJØ'×,Ñ,¨S°"°d·n±nÀdÇmÁmÓT×^Ñ^Ð_`ÐbcÓdˆLàÐ*à+?×+FÑ+FÀzÐS_Ðae×aoÑaoÓ+pÑ(�
˜Lá%¬*°_ÔFYÔ*ZØAE�O×.Ñ.¨t¯~©~Ñ>àÐ"ÜŸ™ K°¡N×$9Ñ$9¸#¸rÀ2ÀrÓ$JÈJÐ#WÐ]^Ô_ˆJÜ Ÿ9™9 k°!¡n×&;Ñ&;¸CÀÀRÈÓ&LÈlÐ%[ÐabÔcˆLØÐ)Ü#Ÿk™k¨#¨q°'¸;Àq¹>×;NÑ;NÈqÓ;QÓR×UÑUÐVd×VkÑVkÓl�Ü!&§¡¨K¸Ð+HÈrÔ!S�à˜DŸN™NÑ*¨B°·±Ð>ˆ
Ø#×(Ñ(¨¨g°t·~±~ÀtÇ}Á}ÓU×_Ñ_Ð`aÐcdÓeˆØ+�|×+Ñ+¨ZÐ8ˆØ'�Z×'Ñ'¨Ð4ˆ
Ø+�|×+Ñ+¨ZÐ8ˆà—/‘/ !Ó$ˆÜ—y‘y ¨z×/CÑ/CÀAÀqÓ/IÓJˆà×ÑÓ 3¨¯©Ñ#7¸À'Ð"JÒJÜØ6¸¸d¿n¹nÑ8LÈgÐW^Ð7_Ð6`ð aØ ×%Ñ%Ó'Ð(ð*óð ð
 Ð%Ø×"Ñ"Ó$¨¨a°¸'Ð(BÒBÜ Ø7¸¸aÀÈ'Ð8RÐ7SÐS\Ð]k×]pÑ]pÓ]rÐ\sÐtóð ð (×,Ñ,¨S°$·.±.À'È7ÓSÐVdÑdˆLØ'×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLä—}‘}×,Ñ,¨\¸rÐ,ÓBˆáð
 %1×$5Ñ$5°c¸4¿>¹>È7ÐT[Ó$\Ð!Ø0×5Ñ5°c¸D¿N¹NÑ6JÈGÐU\Ó]‰Là$(Ð!ä—]‘]×*Ñ*¨<¸4¿<¹<ÐRV×R_ÑR_Ð*Ó`ˆ
ä—i‘i 
¨LÓ9ˆà×ÑÓ #¨¯©Ñ"6¸ÀÇÁÐ!OÒOÜØ2°C¸¿¹ÈÐRV×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¨D¯N©N¸GÀTÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆð "×)Ñ)¨#¨w¸¿¹ÓGˆà—m‘m KÓ0ˆàÐ1Ð1Ð1r+   )g        FTN)NNNNF)rF   rG   rH   rI   rJ   ÚfloatÚboolr5   r=   rK   r
   ÚtuplerC   rL   rM   s   @r)   rO   rO   Z   s  ø„ ÙGð !$Ø"'Ø Ø!%ñCàðCð ðCð ˜‘ð	Cð
 ˜4‘KðCð �T‰kðCð ˜$‘;õCð@ 15Ø(,Ø.2Ø+/Ø"'ñp2à—|‘|ðp2ð  Ÿ,™,¨Ñ-ðp2ð  ™ð	p2ð
 Ÿ™ tÑ+ðp2ð —\‘\ DÑ(ðp2ð  ðp2ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷p2r+   rO   c                   ó¾   ‡ — e Zd Zdefˆ fd„Z	 d
dej                  dej                  dej                  dedz  deej                  ej                  dz  f   f
d	„Z	ˆ xZ
S )ÚMvpEncoderLayerÚconfigc                 óf  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  ¬«      | _        t        j                  | j                  «      | _
        |j                  | _        t        |j                     | _        |j                  | _        t        j                   | j                  |j"                  «      | _        t        j                   |j"                  | j                  «      | _        t        j                  | j                  «      | _        y )N)rP   rQ   rR   )r4   r5   Úd_modelrP   rO   Úencoder_attention_headsÚattention_dropoutÚ	self_attnr   Ú	LayerNormÚself_attn_layer_normrR   r	   Úactivation_functionÚactivation_fnÚactivation_dropoutrZ   Úencoder_ffn_dimÚfc1Úfc2Úfinal_layer_norm©r6   r”   r7   s     €r)   r5   zMvpEncoderLayer.__init__î   sÎ   ø€ Ü‰ÑÔØŸ™ˆŒÜ%Ø—n‘nØ×4Ñ4Ø×,Ñ,ô
ˆŒô
 %'§L¡L°·±Ó$@ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔØ"(×";Ñ";ˆÔÜ—9‘9˜TŸ^™^¨V×-CÑ-CÓDˆŒÜ—9‘9˜V×3Ñ3°T·^±^ÓDˆŒÜ "§¡¨T¯^©^Ó <ˆÕr+   r_   rb   Úself_attn_promptrd   Nre   c                 óJ  — |}| j                  ||||¬«      \  }}t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|}| j                  | j                  |«      «      }t        j                  j                  || j                  | j                  ¬«      }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|j                  t        j                  k(  rht        j                  |«      j                  «       sEt        j                   |j                  «      j"                  dz
  }t        j$                  || |¬«      }||fS )a­  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            self_attn_prompt (`torch.FloatTensor`): prompt of self attention of shape
                `(2, encoder_attention_heads, pro_len, head_dim)`.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )r_   rb   rc   rd   ri   iè  )ÚminÚmax)r™   r   r}   rR   rk   r›   r�   r    rž   r¡   r¢   r;   r=   Úfloat16ÚisfiniteÚallÚfinfor§   Úclamp)r6   r_   rb   r¤   rd   Úresidualr‹   Úclamp_values           r)   rC   zMvpEncoderLayer.forwardþ   sg  € ð$ !ˆØ&*§n¡nØ'Ø)Ø(Ø/ð	 '5ó '
Ñ#ˆ�|ô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×1Ñ1°-Ó@ˆà ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×-Ñ-¨mÓ<ˆà×Ñ¤%§-¡-Ò/¼¿¹À}Ó8U×8YÑ8YÔ8[ÜŸ+™+ m×&9Ñ&9Ó:×>Ñ>ÀÑEˆKÜ!ŸK™K¨¸K¸<È[ÔYˆMà˜lÐ*Ð*r+   ©F)rF   rG   rH   r   r5   r=   ÚFloatTensorr�   r‘   rC   rL   rM   s   @r)   r“   r“   í   sz   ø„ ð=˜yõ =ð* */ñ)+à×(Ñ(ð)+ð ×)Ñ)ð)+ð  ×+Ñ+ð	)+ð
   $™;ð)+ð 
ˆu× Ñ  %×"3Ñ"3°dÑ":Ð:Ñ	;÷)+r+   r“   c                   óf  ‡ — e Zd Zdde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j                  dz  d	ej                  dz  d
edz  dedz  dedz  de	ej                  e	ej                  ej                  f   dz  f   fd„Zˆ xZS )ÚMvpDecoderLayerNr”   c                 ó  •— t         ‰| �  «        |j                  | _        t	        | j                  |j
                  |j                  d|¬«      | _        |j                  | _        t        |j                     | _        |j                  | _        t        j                  | j                  «      | _        t	        | j                  |j
                  |j                  d|¬«      | _        t        j                  | j                  «      | _        t        j$                  | j                  |j&                  «      | _        t        j$                  |j&                  | j                  «      | _        t        j                  | j                  «      | _        y )NT)rP   rQ   rR   rS   rU   )rR   rS   rU   )r4   r5   r–   rP   rO   Údecoder_attention_headsr˜   r™   rR   r	   rœ   r�   rž   r   rš   r›   Úencoder_attnÚencoder_attn_layer_normrZ   Údecoder_ffn_dimr    r¡   r¢   )r6   r”   rU   r7   s      €r)   r5   zMvpDecoderLayer.__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¯^©^Ó <ˆÕr+   r_   rb   Úencoder_hidden_statesÚencoder_attention_maskr¤   Úcross_attn_promptra   rd   Ú	use_cachere   c
                 ó.  — |}| j                  |||||¬«      \  }}t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }d}|�h|}| j                  ||||||¬«      \  }}t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|}| j                  | j                  |«      «      }t        j                  j                  || j                  | j                  ¬«      }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }||z   }| j                  |«      }|f}|r|||fz  }|S )aú  
        Args:
            hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
            attention_mask (`torch.FloatTensor`): attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            encoder_hidden_states (`torch.FloatTensor`):
                cross attention input to the layer of shape `(batch, seq_len, embed_dim)`
            encoder_attention_mask (`torch.FloatTensor`): encoder attention mask of size
                `(batch, 1, tgt_len, src_len)` where padding elements are indicated by very large negative values.
            self_attn_prompt (`torch.FloatTensor`): prompt of self attention of shape
                `(2, decoder_attention_heads, pro_len, head_dim)`.
            cross_attn_prompt (`torch.FloatTensor`): prompt of cross attention of shape
                `(2, decoder_attention_heads, pro_len, head_dim)`.
            past_key_values (`Cache`): cached past key and value projection states
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
        )r_   ra   rb   rc   rd   ri   N)r_   r`   rb   rc   ra   rd   )r™   r   r}   rR   rk   r›   rµ   r¶   r�   r    rž   r¡   r¢   )r6   r_   rb   r¸   r¹   r¤   rº   ra   rd   r»   r   r­   Úself_attn_weightsÚcross_attn_weightsÚoutputss                  r)   rC   zMvpDecoderLayer.forwardG  s¯  € ð> !ˆð ,0¯>©>Ø'Ø+Ø)Ø(Ø/ð ,:ó ,
Ñ(ˆÐ(ô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×1Ñ1°-Ó@ˆð "ÐØ Ð,Ø$ˆHà04×0AÑ0AØ+Ø!6Ø5Ø-Ø /Ø"3ð 1Bó 1Ñ-ˆMÐ-ô ŸM™M×1Ñ1°-À4Ç<Á<ÐZ^×ZgÑZgÐ1ÓhˆMØ$ }Ñ4ˆMØ ×8Ñ8¸ÓGˆMð !ˆØ×*Ñ*¨4¯8©8°MÓ+BÓCˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆØ×-Ñ-¨mÓ<ˆà Ð"ˆáØÐ)Ð+=Ð>Ñ>ˆGàˆr+   ©N)NNNNNNFT)rF   rG   rH   r   r5   r=   rK   r
   r�   r‘   r°   rC   rL   rM   s   @r)   r²   r²   *  s  ø„ ñ=˜yõ =ð> /3Ø59Ø6:Ø04Ø15Ø(,Ø).Ø!%ñLà—|‘|ðLð Ÿ™ tÑ+ðLð  %Ÿ|™|¨dÑ2ð	Lð
 !&§¡¨tÑ 3ðLð  Ÿ,™,¨Ñ-ðLð !Ÿ<™<¨$Ñ.ðLð  ™ðLð   $™;ðLð ˜$‘;ðLð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷Lr+   r²   c                   ól   ‡ — e Zd ZdZdedededefˆ fd„Zdej                  dej                  fd	„Z	ˆ xZ
S )
ÚMvpClassificationHeadz-Head for sentence-level classification tasks.Ú	input_dimÚ	inner_dimÚnum_classesÚpooler_dropoutc                 óÄ   •— t         ‰| �  «        t        j                  ||«      | _        t        j
                  |¬«      | _        t        j                  ||«      | _        y )N©rj   )r4   r5   r   rZ   ÚdenseÚDropoutrR   r^   )r6   rÃ   rÄ   rÅ   rÆ   r7   s        €r)   r5   zMvpClassificationHead.__init__š  sD   ø€ ô 	‰ÑÔÜ—Y‘Y˜y¨)Ó4ˆŒ
Ü—z‘z NÔ3ˆŒÜŸ	™	 )¨[Ó9ˆ�r+   r_   re   c                 ó¸   — | j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j	                  |«      }|S rÀ   )rR   rÉ   r=   Útanhr^   )r6   r_   s     r)   rC   zMvpClassificationHead.forward¦  sN   € ØŸ™ ]Ó3ˆØŸ
™
 =Ó1ˆÜŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ mÓ4ˆØÐr+   )rF   rG   rH   rI   rJ   r�   r5   r=   rK   rC   rL   rM   s   @r)   rÂ   rÂ   —  sL   ø„ Ù7ð
:àð
:ð ð
:ð ð	
:ð
 õ
:ð U§\¡\ð °e·l±l÷ r+   rÂ   c                   ó`   ‡ — e Zd ZdZˆ fd„Zdej                  deej                     fd„Zˆ xZ	S )Ú	MvpPromptz)Layer-wise prompt for encoder or decoder.c           	      ó8  •— t         ‰| �  «        |j                  | _        || _        || _        |j
                  |z  | _        t        j                  |j                  ¬«      | _	        t        j                  |j                  |j
                  «      | _        t        j                  t        j                  |j
                  |j                  «      t        j                  «       t        j                  |j                  |dz  |j
                  z  «      «      | _        y )NrÈ   r2   )r4   r5   Úprompt_lengthÚ
num_layersrQ   r–   rX   r   rÊ   rR   Ú	EmbeddingÚprompt_embeddingÚ
SequentialrZ   Úprompt_mid_dimÚGELUÚprompt_trans)r6   r”   rÑ   rQ   r7   s       €r)   r5   zMvpPrompt.__init__²  s¾   ø€ Ü‰ÑÔØ#×1Ñ1ˆÔØ$ˆŒØ"ˆŒØŸ™¨)Ñ3ˆŒÜ—z‘z F§N¡NÔ3ˆŒÜ "§¡¨V×-AÑ-AÀ6Ç>Á>Ó RˆÔÜŸM™MÜ�I‰I�f—n‘n f×&;Ñ&;Ó<Ü�G‰G‹IÜ�I‰I�f×+Ñ+¨Z¸!©^¸f¿n¹nÑ-LÓMó
ˆÕr+   Ú
prompt_idsre   c                 ó*  — | j                  | j                  |«      «      }|j                  | j                  | j                  dz  | j
                  | j                  «      }| j                  |«      }|j                  g d¢«      j                  d«      }|S )Nr2   )r   r2   r   r   )
r×   rÓ   ru   rÐ   rÑ   rQ   rX   rR   ÚpermuteÚsplit)r6   rØ   Úprompts      r)   rC   zMvpPrompt.forwardÀ  sw   € Ø×"Ñ" 4×#8Ñ#8¸Ó#DÓEˆØ—‘˜T×/Ñ/°·±À1Ñ1DÀdÇnÁnÐVZ×VcÑVcÓdˆØ—‘˜fÓ%ˆØ—‘¢Ó-×3Ñ3°AÓ6ˆØˆr+   )
rF   rG   rH   rI   r5   r=   rK   r‘   rC   rL   rM   s   @r)   rÎ   rÎ   ¯  s+   ø„ Ù3ô
ð %§,¡,ð °5¸¿¹Ñ3F÷ r+   rÎ   c                   óB   ‡ — e Zd ZU eed<   dZdZˆ fd„Zed„ «       Z	ˆ xZ
S )ÚMvpPreTrainedModelr”   ÚmodelTc                 ó„   •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       y y rÀ   )r4   Ú_init_weightsrm   ÚMvpForConditionalGenerationÚinitÚzeros_Úfinal_logits_bias)r6   Úmoduler7   s     €r)   rá   z MvpPreTrainedModel._init_weightsÎ  s2   ø€ Ü‰Ñ˜fÔ%Ü�fÔ9Ô:Ü�K‰K˜×0Ñ0Õ1ð ;r+   c                 ó®   — | j                   j                  }t        j                  g d¢dddd|gg| j                  ¬«      }|j                  |«      |dœ}|S )N)r   é   é
   é   r2   r   é   é   r2   ©r<   )rb   r   )r”   r   r=   Útensorr<   Úne)r6   Ú	pad_tokenr   Údummy_inputss       r)   rñ   zMvpPreTrainedModel.dummy_inputsÓ  sW   € à—K‘K×,Ñ,ˆ	Ü—L‘LÒ"2°Q¸¸2¸qÀ)Ð4LÐ!MÐVZ×VaÑVaÔbˆ	à'Ÿl™l¨9Ó5Ø"ñ
ˆð Ðr+   )rF   rG   rH   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingrá   Úpropertyrñ   rL   rM   s   @r)   rÞ   rÞ   È  s.   ø… àÓØÐØ&*Ð#ô2ð
 ñó ôr+   rÞ   c                   óê   ‡ — e Zd ZdZddedej                  dz  dedz  fˆ fd„Z	 	 	 	 	 	 d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dz  deez  fd„Zˆ xZS )Ú
MvpEncodera  
    Transformer encoder consisting of *config.encoder_layers* self attention layers. Each layer is a
    [`MvpEncoderLayer`].

    Args:
        config: MvpConfig
        embed_tokens (nn.Embedding): output embedding
        use_prompt (bool): whether to use prompt
    Nr”   Úembed_tokensÚ
use_promptc                 ó  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  }|j                  | _        |j                  | _	        |j                  rt        j                  |«      nd| _        t        j                  |j                   || j                  «      | _        t%        |j                  |«      | _        t        j(                  t+        |j,                  «      D �cg c]  }t/        |«      ‘Œ c}«      | _        t        j2                  |«      | _        || _        |r7|j8                  | _        t;        ||j,                  |j<                  «      | _        d| _         | jC                  «        y c c}w )Nç      ð?F)"r4   r5   rR   Úencoder_layerdropÚ	layerdropr–   r   Úpadding_idxÚmax_position_embeddingsÚmax_source_positionsÚscale_embeddingÚmathÚsqrtÚembed_scaler   rÒ   Ú
vocab_sizerø   r-   Úembed_positionsÚ
ModuleListÚrangeÚencoder_layersr“   rr   rš   Úlayernorm_embeddingrù   rÐ   rÎ   r—   r¤   Úgradient_checkpointingÚ	post_init)r6   r”   rø   rù   rP   r‚   r7   s         €r)   r5   zMvpEncoder.__init__é  s4  ø€ Ü‰Ñ˜Ô à—~‘~ˆŒØ×1Ñ1ˆŒà—N‘Nˆ	Ø!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø39×3IÒ3Iœ4Ÿ9™9 YÔ/ÈsˆÔäŸL™L¨×):Ñ):¸IÀt×GWÑGWÓXˆÔä<Ø×*Ñ*Øó 
ˆÔô —m‘mÄeÈF×LaÑLaÓFbÖ$cÀ¤_°VÕ%<Ò$cÓdˆŒÜ#%§<¡<°	Ó#:ˆÔ à$ˆŒÙØ!'×!5Ñ!5ˆDÔÜ$-ØØ×%Ñ%Ø×.Ñ.ó%ˆDÔ!ð ',ˆÔ#à�‰Õùò %ds   Ã:F
r   rb   Úinputs_embedsrd   Úoutput_hidden_statesÚreturn_dictre   c                 óÄ  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|�|�t	        d«      ‚|�$|}|j
                  }	|j                  d|	d   «      }n-|� |j                  «       dd }	|dd…dd…df   }nt	        d«      ‚|€| j                  |«      | j                  z  }| j                  |«      }
||
z   }| j                  |«      }t        j                  j                  || j                  | j                  ¬«      }| j                   rIt#        j$                  | j&                  «      j)                  | j*                  «      }| j-                  |«      }|�t/        | j                   ||¬«      }|rdnd}|rdnd}t1        | j2                  «      D ]t  \  }}|r||fz   }d}| j                  r&t#        j4                  g «      }|| j6                  k  rd	}|rd
}n" |||| j                   r|   nd|¬«      }|d   }|sŒl||d   fz   }Œv |r||fz   }|st9        d„ |||fD «       «      S t;        |||¬«      S )a8  
        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you
                provide it.

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

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

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

                [What are attention masks?](../glossary#attention-mask)
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        NzDYou cannot specify both input_ids and inputs_embeds at the same timer"   z5You have to specify either input_ids or inputs_embedsri   )r”   r  rb   © FT)NN)r¤   rd   r   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrÀ   r  ©Ú.0Úvs     r)   ú	<genexpr>z%MvpEncoder.forward.<locals>.<genexpr>{  s   è ø€ Òe˜qÐWXÑWdœÑeùs   ‚Š©Úlast_hidden_stater_   Ú
attentions)r”   rd   r  r  r&   r$   ru   rl   rø   r  r  r
  r   r}   rR   rk   rù   r=   r>   rÐ   rz   r<   r¤   r   Ú	enumeraterr   Úrandrý   r‘   r   )r6   r   rb   r  rd   r  r  r   ÚinputÚinput_shapeÚ	embed_posr_   rØ   r¤   Úencoder_statesÚall_attentionsÚidxÚencoder_layerÚto_dropÚdropout_probabilityÚlayer_outputss                        r)   rC   zMvpEncoder.forward
  s–  € ðP 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð  ]Ð%>ÜÐcÓdÐdØÐ"ØˆEØŸ+™+ˆKØ!Ÿ™ r¨;°r©?Ó;‰IØÐ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ!¢!¢Q¨ (Ñ+‰EäÐTÓUÐUàÐ Ø ×-Ñ-¨iÓ8¸4×;KÑ;KÑKˆMà×(Ñ(¨Ó/ˆ	à%¨	Ñ1ˆØ×0Ñ0°Ó?ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆð �?Š?ÜŸ™ d×&8Ñ&8Ó9×<Ñ<¸T¿[¹[ÓIˆJØ#×4Ñ4°ZÓ@Ðð Ð%Ü6Ø—{‘{Ø+Ø-ôˆNñ  4™¸ˆÙ0™°dˆä"+¨D¯K©KÓ"8ò 	FÑˆC�Ù#Ø!/°=Ð2BÑ!B�àˆGØ�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Ø"�GáØ ,‘á -Ø!Ø"Ø?C¿ºÐ&6°sÒ&;ÐTXØ&7ô	!�ð !.¨aÑ 0�â Ø!/°=ÀÑ3CÐ2EÑ!E‘ð/	Fñ2  Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜØ+¸>ÐVdô
ð 	
r+   ©NF)NNNNNN)rF   rG   rH   rI   r   r   rÒ   r�   r5   r=   Ú
LongTensorrK   r°   r‘   r   rC   rL   rM   s   @r)   r÷   r÷   Þ  sÈ   ø„ ññ˜yð ¸¿¹ÀtÑ8Kð Ð`dÐgkÑ`kõ ðF .2Ø.2Ø26Ø)-Ø,0Ø#'ñt
à×#Ñ# dÑ*ðt
ð Ÿ™ tÑ+ðt
ð ×(Ñ(¨4Ñ/ð	t
ð
   $™;ðt
ð # T™kðt
ð ˜D‘[ðt
ð 
�Ñ	 ÷t
r+   r÷   c                   ó$  ‡ — e Zd ZdZddededz  fˆ fd„Z	 	 	 	 	 	 	 	 	 	 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dz  dedz  dedz  deez  fd„Zˆ xZS )Ú
MvpDecoderzû
    Transformer decoder consisting of *config.decoder_layers* layers. Each layer is a [`MvpDecoderLayer`]

    Args:
        config: MvpConfig
        embed_tokens (nn.Embedding): output embedding
        use_prompt (bool): whether to use prompt
    r”   rù   Nc           	      ó¦  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  rt        j                  |j                  «      nd| _        t        j                  |j                   |j                  | j                  «      | _        t%        |j                  |j                  «      | _        t        j(                  t+        |j,                  «      D �cg c]  }t/        ||¬«      ‘Œ c}«      | _        t        j2                  |j                  «      | _        || _        |r]|j8                  | _        t;        ||j,                  |j<                  «      | _        t;        ||j,                  |j<                  «      | _         d| _!        | jE                  «        y c c}w )Nrû   )rU   F)#r4   r5   rR   Údecoder_layerdroprý   r   rþ   rÿ   Úmax_target_positionsr  r  r  r–   r  r   rÒ   r  rø   r-   r  r  r  Údecoder_layersr²   rr   rš   r
  rù   rÐ   rÎ   r´   r¤   rº   r  r  )r6   r”   rù   Úir7   s       €r)   r5   zMvpDecoder.__init__‹  sd  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×1Ñ1ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø8>×8NÒ8Nœ4Ÿ9™9 V§^¡^Ô4ÐTWˆÔäŸL™L¨×):Ñ):¸F¿N¹NÈD×L\ÑL\Ó]ˆÔÜ<Ø×*Ñ*Ø�N‰Nó 
ˆÔô —m‘mÔSXÐY_×YnÑYnÓSoÖ$pÈa¤_°VÀqÖ%IÒ$pÓqˆŒÜ#%§<¡<°·±Ó#?ˆÔ à$ˆŒÙØ!'×!5Ñ!5ˆDÔÜ$-ØØ×%Ñ%Ø×.Ñ.ó%ˆDÔ!ô
 &/ØØ×%Ñ%Ø×.Ñ.ó&ˆDÔ"ð ',ˆÔ#à�‰Õùò' %qs   ÄGr   rb   r¸   r¹   ra   r  r»   rd   r  r  re   c                 óö  — |�|n| j                   j                  }|	�|	n| j                   j                  }	|�|n| j                   j                  }|
�|
n| j                   j                  }
|�|�t        d«      ‚|�$|}|j                  }|j                  d|d   «      }n-|� |j                  «       dd }|dd…dd…df   }nt        d«      ‚|€| j                  |«      | j                  z  }| j                  r%| j                  r|rt        j                  d«       d}|rd|€b|€| j                   j                  r4t!        t#        | j                   ¬«      t#        | j                   ¬«      «      nt#        | j                   ¬«      }|�|j%                  «       nd}t'        | j                   |||¬	«      }|�|�t)        | j                   |||¬
«      }| j+                  ||«      }||z   }| j-                  |«      }t.        j0                  j3                  || j2                  | j                  ¬«      }| j4                  rZt7        j8                  | j:                  «      j=                  | j>                  «      }| jA                  |«      }| jC                  |«      }|	rdnd}|rdnd}|r|�dnd}tE        | jF                  «      D ]Ž  \  }}|	r||fz  }| j                  r%t7        jH                  g «      }|| jJ                  k  rŒ? |||||| j4                  r|   nd| j4                  r|   nd|||¬«	      }|d   }|sŒz||d   fz  }|€Œ†||d   fz  }Œ� |	r||fz  }|
stM        d„ |||||fD «       «      S tO        |||||¬«      S )aU  
        Args:
            input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
                Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you
                provide it.

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

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

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

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

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

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

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

                If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those
                that don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of
                all `decoder_input_ids` of shape `(batch_size, sequence_length)`.
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        NzTYou cannot specify both decoder_input_ids and decoder_inputs_embeds at the same timer"   zEYou have to specify either decoder_input_ids or decoder_inputs_embedszZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...F)r”   r   )r”   r  rb   ra   )r”   r  rb   r¸   ri   r  )r¹   r¤   rº   ra   rd   r»   r   r2   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wrÀ   r  r  s     r)   r  z%MvpDecoder.forward.<locals>.<genexpr>W  s   è ø€ ò àØ�=ô ñùs   ‚)r  ra   r_   r  Úcross_attentions)(r”   rd   r  r»   r  r&   r$   ru   rl   rø   r  r  rk   ÚloggerÚwarning_onceÚis_encoder_decoderr   r   Úget_seq_lengthr   r   r  r
  r   r}   rR   rù   r=   r>   rÐ   rz   r<   r¤   rº   r  rr   r  rý   r‘   r   )r6   r   rb   r¸   r¹   ra   r  r»   rd   r  r  r   r  r  r8   Ú	positionsr_   rØ   r¤   rº   Úall_hidden_statesÚall_self_attnsÚall_cross_attentionsr!  Údecoder_layerr$  r%  s                              r)   rC   zMvpDecoder.forward­  sÍ  € ð@ 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆð Ð  ]Ð%>ÜÐsÓtÐtØÐ"ØˆEØ#Ÿ/™/ˆKØ!Ÿ™ r¨;°r©?Ó;‰IØÐ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ!¢!¢Q¨ (Ñ+‰EäÐdÓeÐeàÐ Ø ×-Ñ-¨iÓ8¸4×;KÑ;KÑKˆMà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	á˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð FUÐE` ×!?Ñ!?Ô!AÐfgÐä+Ø—;‘;Ø'Ø)Ø+ô	
ˆð !Ð,Ð1GÐ1SÜ%>Ø—{‘{Ø+Ø5Ø&;ô	&Ð"ð ×(Ñ(¨Ð0FÓGˆ	à%¨	Ñ1ˆØ×0Ñ0°Ó?ˆäŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆð �?Š?ÜŸ™ d×&8Ñ&8Ó9×<Ñ<¸T¿[¹[ÓIˆJØ#×4Ñ4°ZÓ@ÐØ $× 6Ñ 6°zÓ BÐñ #7™B¸DÐÙ0™°dˆÙ&7Ð<QÐ<]™rÐdhÐä"+¨D¯K©KÓ"8ò 	@ÑˆC�á#Ø! mÐ%5Ñ5Ð!Ø�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øá)ØØØ%Ø'=Ø;?¿?º?Ð"2°3Ò"7ÐPTØ=A¿_º_Ð#4°SÒ#9ÐRVØ /Ø"3Ø#ô
ˆMð *¨!Ñ,ˆMÚ Ø =°Ñ#3Ð"5Ñ5�à(Ñ4Ø(¨]¸1Ñ-=Ð,?Ñ?Ñ(ð3	@ñ8  Ø -Ð!1Ñ1ÐáÜñ à'¨Ð:KÈ^Ð]qÐrôó ð ô
 9Ø+Ø+Ø+Ø%Ø1ô
ð 	
r+   r¯   )
NNNNNNNNNN)rF   rG   rH   rI   r   r�   r5   r=   r'  rK   r°   r
   r‘   r   rC   rL   rM   s   @r)   r)  r)  �  s  ø„ ññ ˜yð  °d¸T±kõ  ðH .2Ø.2Ø:>Ø:>Ø(,Ø26Ø!%Ø)-Ø,0Ø#'ñu
à×#Ñ# dÑ*ðu
ð Ÿ™ tÑ+ðu
ð  %×0Ñ0°4Ñ7ð	u
ð
 !&× 0Ñ 0°4Ñ 7ðu
ð  ™ðu
ð ×(Ñ(¨4Ñ/ðu
ð ˜$‘;ðu
ð   $™;ðu
ð # T™kðu
ð ˜D‘[ðu
ð 
Ð:Ñ	:÷u
r+   r)  c                   ó†  ‡ — e Zd ZdgZdddœZdefˆ fd„Zd„ Zd„ Zd„ Z	e
	 	 	 	 	 	 	 	 	 	 	 	 dd
ej                  d	z  dej                  d	z  dej                  d	z  dej                  d	z  deej                     d	z  ded	z  dej                  d	z  dej                  d	z  ded	z  ded	z  ded	z  ded	z  deez  fd„«       Zˆ xZS )ÚMvpModelrå   zshared.weight)zencoder.embed_tokens.weightzdecoder.embed_tokens.weightr”   c                 óN  •— t         ‰| �  |«       |j                  |j                  }}|j                  | _        t        j                  ||j                  |«      | _        t        ||j                  «      | _
        t        ||j                  «      | _        | j                  «        y rÀ   )r4   r5   r   r  rù   r   rÒ   r–   Úsharedr÷   Úencoderr)  Údecoderr  )r6   r”   rþ   r  r7   s       €r)   r5   zMvpModel.__init__m  s~   ø€ Ü‰Ñ˜Ô à"(×"5Ñ"5°v×7HÑ7H�ZˆØ ×+Ñ+ˆŒÜ—l‘l :¨v¯~©~¸{ÓKˆŒä! &¨&×*;Ñ*;Ó<ˆŒÜ! &¨&×*;Ñ*;Ó<ˆŒð 	�‰Õr+   c                 ó   — | j                   S rÀ   )r>  ©r6   s    r)   Úget_input_embeddingszMvpModel.get_input_embeddingsz  s   € Ø�{‰{Ðr+   c                 ó~   — || _         | j                   | j                  _        | j                   | j                  _        y rÀ   )r>  r?  rø   r@  ©r6   Úvalues     r)   Úset_input_embeddingszMvpModel.set_input_embeddings}  s)   € ØˆŒØ$(§K¡Kˆ�‰Ô!Ø$(§K¡Kˆ�‰Õ!r+   c                 ó*  — | j                   sJ d«       ‚| j                  d«       | j                  j                  j                  d«       | j                  j                  j                  d«       | j                  j
                  j                  d«       y )NzHIf you want to use lightweight tuning, make sure that `use_prompt=True`.FT)rù   Úrequires_grad_r?  r¤   r@  rº   rB  s    r)   Úset_lightweight_tuningzMvpModel.set_lightweight_tuning‚  sj   € Ø�ŠÐjÐ jÓjˆà×Ñ˜EÔ"Ø�‰×%Ñ%×4Ñ4°TÔ:Ø�‰×%Ñ%×4Ñ4°TÔ:Ø�‰×&Ñ&×5Ñ5°dÕ;r+   Nr   rb   Údecoder_input_idsÚdecoder_attention_maskÚencoder_outputsra   r  Údecoder_inputs_embedsr»   rd   r  r  re   c                 ó4  — |€D|€B|€t        d«      ‚t        || j                  j                  | j                  j                  «      }|
�|
n| j                  j
                  }
|�|n| j                  j                  }|	�|	n| j                  j                  }	|�|n| j                  j                  }|€| j                  ||||
||¬«      }nI|rGt        |t        «      s7t        |d   t        |«      dkD  r|d   ndt        |«      dkD  r|d   nd¬«      }| j                  |||d   ||||	|
||¬«
      }|s||z   S t        |j                  |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)

            Mvp 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_mvp._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   rb   r  rd   r  r  r   r   r2   r  ©
r   rb   r¸   r¹   ra   r  r»   rd   r  r  )r  ra   Údecoder_hidden_statesÚdecoder_attentionsr1  Úencoder_last_hidden_stater¸   Úencoder_attentions)r&   r*   r”   r   r    rd   r  r»   r  r?  rm   r   Úlenr@  r   r  ra   r_   r  r1  )r6   r   rb   rK  rL  rM  ra   r  rN  r»   rd   r  r  r   Údecoder_outputss                  r)   rC   zMvpModel.forwardŠ  sÍ  € ðT Ð$Ð)>Ð)FØÐ Ü ðUóð ô !3Ø˜4Ÿ;™;×3Ñ3°T·[±[×5WÑ5Wó!Ðð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐ"Ø"Ÿl™lØ#Ø-Ø+Ø"3Ø%9Ø'ð +ó ‰Oñ ¤¨O¼_Ô!MÜ-Ø"1°!Ñ"4Ü47¸Ó4HÈ1Ò4L˜o¨aÒ0ÐRVÜ14°_Ó1EÈÒ1I˜?¨1Ò-ÈtôˆOð Ÿ,™,Ø'Ø1Ø"1°!Ñ"4Ø#1Ø+Ø/ØØ/Ø!5Ø#ð 'ó 
ˆñ Ø" _Ñ4Ð4ä!Ø-×?Ñ?Ø+×;Ñ;Ø"1×"?Ñ"?Ø.×9Ñ9Ø,×=Ñ=Ø&5×&GÑ&GØ"1×"?Ñ"?Ø.×9Ñ9ô	
ð 		
r+   ©NNNNNNNNNNNN)rF   rG   rH   Ú"_keys_to_ignore_on_load_unexpectedÚ_tied_weights_keysr   r5   rC  rG  rJ  r   r=   r'  rK   Úlistr°   r
   r�   r‘   r   rC   rL   rM   s   @r)   r<  r<  e  sh  ø„ à*=Ð)>Ð&à'6Ø'6ñÐð
˜yõ òò0ò
<ð ð .2Ø.2Ø59Ø:>Ø:>Ø(,Ø26Ø:>Ø!%Ø)-Ø,0Ø#'ñg
à×#Ñ# dÑ*ðg
ð Ÿ™ tÑ+ðg
ð !×+Ñ+¨dÑ2ð	g
ð
 !&× 0Ñ 0°4Ñ 7ðg
ð ˜e×/Ñ/Ñ0°4Ñ7ðg
ð  ™ðg
ð ×(Ñ(¨4Ñ/ðg
ð  %×0Ñ0°4Ñ7ðg
ð ˜$‘;ðg
ð   $™;ðg
ð # T™kðg
ð ˜D‘[ðg
ð 
Ð#Ñ	#òg
ó ôg
r+   r<  ze
    The MVP Model with a language modeling head. Can be used for various text generation tasks.
    )Úcustom_introc                   óü  ‡ — e Zd ZddiZdefˆ fd„Z	 ddededz  ded	ej                  fˆ fd
„Z
ded	dfd„Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                   dz  dej                  dz  dej                  dz  deej$                     dz  dedz  dej$                  dz  dej$                  dz  dej                  dz  dedz  dedz  dedz  dedz  d	eez  fd„«       Zdej                   fd„Zˆ xZS )râ   úlm_head.weightzmodel.shared.weightr”   c                 óx  •— t         ‰| �  |«       t        |«      | _        | j	                  dt        j                  d| j                  j                  j                  f«      «       t        j                  |j                  | j                  j                  j                  d¬«      | _        | j                  «        y )Nrå   r   FrW   )r4   r5   r<  rß   Úregister_bufferr=   ry   r>  r.   r   rZ   r–   Úlm_headr  r£   s     €r)   r5   z$MvpForConditionalGeneration.__init__ÿ  s€   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ
Ø×ÑÐ0´%·+±+¸qÀ$Ç*Á*×BSÑBS×BbÑBbÐ>cÓ2dÔeÜ—y‘y §¡°·±×1BÑ1B×1QÑ1QÐX]Ô^ˆŒð 	�‰Õr+   NÚnew_num_tokensÚpad_to_multiple_ofÚmean_resizingre   c                 óL   •— t         ‰| �  |||«      }| j                  |«       |S rÀ   )r4   Úresize_token_embeddingsÚ_resize_final_logits_bias)r6   ra  rb  rc  Únew_embeddingsr7   s        €r)   re  z3MvpForConditionalGeneration.resize_token_embeddings  s.   ø€ ô ™Ñ8¸ÐI[Ð]jÓkˆØ×&Ñ& ~Ô6ØÐr+   c                 ó6  — | j                   j                  d   }||k  r| j                   d d …d |…f   }nSt        j                  d||z
  f| j                   j                  ¬«      }t        j
                  | j                   |gd¬«      }| j                  d|«       y )Nr"   r   rí   rg   rå   )rå   r$   r=   ry   r<   rx   r_  )r6   ra  Úold_num_tokensÚnew_biasÚ
extra_biass        r)   rf  z5MvpForConditionalGeneration._resize_final_logits_bias  sŒ   € Ø×/Ñ/×5Ñ5°bÑ9ˆØ˜^Ò+Ø×-Ñ-ªa°°.°Ð.@ÑA‰HäŸ™ a¨¸.Ñ)HÐ%IÐRV×RhÑRh×RoÑRoÔpˆJÜ—y‘y $×"8Ñ"8¸*Ð!EÈ1ÔMˆHØ×ÑÐ0°(Õ;r+   c                 ón   — | j                   j                  «        | j                  j                  d«       y r&  ©rß   rJ  r`  rI  rB  s    r)   rJ  z2MvpForConditionalGeneration.set_lightweight_tuning  ó$   € Ø�
‰
×)Ñ)Ô+Ø�‰×#Ñ# EÕ*r+   r   rb   rK  rL  rM  ra   r  rN  Úlabelsr»   rd   r  r  c                 óÌ  — |�|n| j                   j                  }|	�R|
rt        j                  d«       d}
|€7|€5t	        |	| j                   j
                  | j                   j                  «      }| j                  |||||||||
|||¬«      }| j                  |d   «      | j                  z   }d}|	�Ft        «       } ||j                  d| j                   j                  «      |	j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  ¬«	      S )	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)

            Mvp 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_mvp._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 of summarization:

        Fine-tuning a model
        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, MvpForConditionalGeneration

        >>> tokenizer = AutoTokenizer.from_pretrained("RUCAIBox/mvp")
        >>> model = MvpForConditionalGeneration.from_pretrained("RUCAIBox/mvp")

        >>> inputs = tokenizer(
        ...     "Summarize: You may want to stick it to your boss and leave your job, but don't do it if these are your reasons.",
        ...     return_tensors="pt",
        ... )
        >>> labels = tokenizer("Bad Reasons To Quit Your Job", return_tensors="pt")["input_ids"]

        >>> loss = model(**inputs, labels=labels).loss
        >>> loss.backward()
        ```

        Inference after the model fine-tuned
        ```python
        >>> with torch.no_grad():
        ...     generated_ids = model.generate(**inputs)

        >>> generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
        ```
        NzJThe `use_cache` argument is changed to `False` since `labels` is provided.F)rb   rK  rM  rL  ra   r  rN  r»   rd   r  r  r   r"   r   ©	ÚlossÚlogitsra   rQ  rR  r1  rS  r¸   rT  )r”   r  r2  Úwarningr*   r   r    rß   r`  rå   r   ru   r  r   ra   rQ  rR  r1  rS  r¸   rT  )r6   r   rb   rK  rL  rM  ra   r  rN  ro  r»   rd   r  r  r   r¿   Ú	lm_logitsÚmasked_lm_lossÚloss_fctÚoutputs                       r)   rC   z#MvpForConditionalGeneration.forward  s�  € ðR &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆàÐÙÜ—‘ÐkÔlØˆIØ Ð(Ð-BÐ-JÜ$6Ø˜DŸK™K×4Ñ4°d·k±k×6XÑ6Xó%Ð!ð —*‘*ØØ)Ø/Ø+Ø#9Ø+Ø'Ø"7ØØ/Ø!5Ø#ð ó 
ˆð —L‘L ¨¡Ó,¨t×/EÑ/EÑEˆ	àˆØÐÜ'Ó)ˆHÙ% i§n¡n°R¸¿¹×9OÑ9OÓ&PÐRX×R]ÑR]Ð^`ÓRaÓbˆNáØ�\ G¨A¨B KÑ/ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYäØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r+   c                 ól   — t        || j                  j                  | j                  j                  «      S rÀ   )r*   r”   r   r    )r6   ro  s     r)   Ú%prepare_decoder_input_ids_from_labelszAMvpForConditionalGeneration.prepare_decoder_input_ids_from_labels•  s%   € Ü! &¨$¯+©+×*BÑ*BÀDÇKÁK×DfÑDfÓgÐgr+   )NT©NNNNNNNNNNNNN)rF   rG   rH   rY  r   r5   rJ   r�   r   rÒ   re  rf  rJ  r   r=   r'  rK   rZ  r°   r
   r‘   r   rC   rz  rL   rM   s   @r)   râ   râ   õ  sÉ  ø„ ð 	Ð/ðÐð˜yõ ð aeñØ!ðØ7:¸T±zðØY]ðà	�‰õð<¸ð <Àó <ò+ð ð .2Ø.2Ø59Ø:>Ø:>Ø(,Ø26Ø:>Ø*.Ø!%Ø)-Ø,0Ø#'ñv
à×#Ñ# dÑ*ðv
ð Ÿ™ tÑ+ðv
ð !×+Ñ+¨dÑ2ð	v
ð
 !&× 0Ñ 0°4Ñ 7ðv
ð ˜e×/Ñ/Ñ0°4Ñ7ðv
ð  ™ðv
ð ×(Ñ(¨4Ñ/ðv
ð  %×0Ñ0°4Ñ7ðv
ð × Ñ  4Ñ'ðv
ð ˜$‘;ðv
ð   $™;ðv
ð # T™kðv
ð ˜D‘[ðv
ð  
�Ñ	 ò!v
ó ðv
ðph¸E¿L¹L÷ hr+   râ   z„
    Mvp model with a sequence classification/head on top (a linear layer on top of the pooled output) e.g. for GLUE
    tasks.
    c                   ó~  ‡ — e Zd Zdefˆ fd„Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  d	e
ej                     dz  d
ej                  dz  dej                  dz  dej                  dz  dedz  dedz  dedz  dedz  deez  fd„«       Zˆ xZS )ÚMvpForSequenceClassificationr”   c                 óÜ   •— t        ‰| �  |fi |¤Ž t        |«      | _        t	        |j
                  |j
                  |j                  |j                  «      | _        | j                  «        y rÀ   )
r4   r5   r<  rß   rÂ   r–   Ú
num_labelsÚclassifier_dropoutÚclassification_headr  )r6   r”   r   r7   s      €r)   r5   z%MvpForSequenceClassification.__init__   sZ   ø€ Ü‰Ñ˜Ñ* 6Ò*Ü˜fÓ%ˆŒ
Ü#8Ø�N‰NØ�N‰NØ×ÑØ×%Ñ%ó	$
ˆÔ ð 	�‰Õr+   c                 ón   — | j                   j                  «        | j                  j                  d«       y r&  )rß   rJ  r�  rI  rB  s    r)   rJ  z3MvpForSequenceClassification.set_lightweight_tuning­  s&   € Ø�
‰
×)Ñ)Ô+Ø× Ñ ×/Ñ/°Õ6r+   Nr   rb   rK  rL  rM  r  rN  ro  r»   rd   r  r  re   c                 ó  — |�|n| j                   j                  }|�d}	|€$|�"t        d| j                  j                  › �«      ‚| j                  ||||||||	|
||¬«      }|d   }|j                  | j                   j                  «      j                  |j                  «      }t        t        j                  |j                  d«      «      j                  «       dk(  d«       ||dd…f   }t        |j                  d   |j                  d   z  dk\  d«       |j!                  |j#                  d«      d	|j#                  d	«      «      dd…d	dd…f   }| j%                  |«      }d}|��¯| j                   j&                  €¡| j                   j(                  dk(  rd
| j                   _        nv| j                   j(                  dkD  rL|j*                  t        j,                  k(  s|j*                  t        j.                  k(  rd| j                   _        nd| j                   _        | j                   j&                  d
k(  rSt1        «       }| j                   j(                  dk(  r& ||j3                  «       |j3                  «       «      }n– |||«      }nŒ| j                   j&                  dk(  rGt5        «       } ||j!                  d	| j                   j(                  «      |j!                  d	«      «      }n,| j                   j&                  dk(  rt7        «       } |||«      }|s|f|dd z   }|�|f|z   S |S t9        |||j:                  |j<                  |j>                  |j@                  |jB                  |jD                  |jF                  ¬«	      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)

            Mvp 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_mvp._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).

        Example of single-label classification:

        Fine-tuning a model on `num_labels` classes
        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, MvpForSequenceClassification

        >>> num_labels = 2  # for example, this is a binary classification task
        >>> tokenizer = AutoTokenizer.from_pretrained("RUCAIBox/mvp")
        >>> model = MvpForSequenceClassification.from_pretrained("RUCAIBox/mvp", num_labels=num_labels)

        >>> inputs = tokenizer("Classify: Hello, my dog is cute", return_tensors="pt")
        >>> labels = torch.tensor(1)  # the real label for inputs

        >>> loss = model(**inputs, labels=labels).loss
        >>> loss.backward()
        ```

        Inference after the model fine-tuned
        ```python
        >>> with torch.no_grad():
        ...     logits = model(**inputs).logits

        >>> predicted_class_id = logits.argmax()
        ```
        NFz8Passing input embeddings is currently not supported for ©
rb   rK  rL  rM  r  rN  r»   rd   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_classificationrq  )$r”   r  ÚNotImplementedErrorr7   rF   rß   ÚeqÚeos_token_idrz   r<   r   r=   Úunique_consecutiveÚsumÚnumelr$   ru   rl   r�  Úproblem_typer  r;   r?   rJ   r   Úsqueezer   r   r   ra   rQ  rR  r1  rS  r¸   rT  )r6   r   rb   rK  rL  rM  r  rN  ro  r»   rd   r  r  r   r¿   r_   Úeos_maskÚselectedÚsentence_representationrs  rr  rw  rx  s                          r)   rC   z$MvpForSequenceClassification.forward±  s6  € ðJ &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØÐØˆIàÐ Ð!:Ü%ØJÈ4Ï>É>×KbÑKbÐJcÐdóð ð —*‘*ØØ)Ø/Ø#9Ø+Ø'Ø"7ØØ/Ø!5Ø#ð ó 
ˆð   ™
ˆà—<‘< §¡× 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ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—;‘;×)Ñ)¨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Ü,Ó.�Ù ¨Ó/�ÙØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä.ØØØ#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô

ð 
	
r+   rW  )rF   rG   rH   r   r5   rJ  r   r=   r'  rK   rZ  r°   r�   r‘   r   rC   rL   rM   s   @r)   r}  r}  ™  sN  ø„ ð˜yõ ò7ð ð .2Ø.2Ø59Ø:>Ø:>Ø26Ø:>Ø*.Ø!%Ø)-Ø,0Ø#'ñN
à×#Ñ# dÑ*ðN
ð Ÿ™ tÑ+ðN
ð !×+Ñ+¨dÑ2ð	N
ð
 !&× 0Ñ 0°4Ñ 7ðN
ð ˜e×/Ñ/Ñ0°4Ñ7ðN
ð ×(Ñ(¨4Ñ/ðN
ð  %×0Ñ0°4Ñ7ðN
ð × Ñ  4Ñ'ðN
ð ˜$‘;ðN
ð   $™;ðN
ð # T™kðN
ð ˜D‘[ðN
ð 
Ð0Ñ	0òN
ó ôN
r+   r}  c                   ó˜  ‡ — e Zd Zˆ fd„Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  de	e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dz  dedz  dedz  deez  fd„«       Zˆ xZS )ÚMvpForQuestionAnsweringc                 óò   •— t         ‰| �  |«       d|_        |j                  | _        t        |«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r1   )
r4   r5   r  r<  rß   r   rZ   Úhidden_sizeÚ
qa_outputsr  r£   s     €r)   r5   z MvpForQuestionAnswering.__init__E  s[   ø€ Ü‰Ñ˜Ô àˆÔØ ×+Ñ+ˆŒä˜fÓ%ˆŒ
ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr+   c                 ón   — | j                   j                  «        | j                  j                  d«       y r&  )rß   rJ  r—  rI  rB  s    r)   rJ  z.MvpForQuestionAnswering.set_lightweight_tuningQ  s$   € Ø�
‰
×)Ñ)Ô+Ø�‰×&Ñ& uÕ-r+   Nr   rb   rK  rL  rM  Ústart_positionsÚend_positionsr  rN  r»   rd   r  r  re   c                 ó¦  — |�|n| j                   j                  }|�|�d}
| j                  |||||||	|
|||¬«      }|d   }| j                  |«      }|j	                  dd¬«      \  }}|j                  d«      j                  «       }|j                  d«      j                  «       }d}|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   d	z  }|s||f|dd z   }|�|f|z   S |S 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)

            Mvp 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_mvp._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.

        Example:

        Fine-tuning a model for extrative question answering, and our model also supports generative question answering
        using `BartForConditionalGeneration`
        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, MvpForQuestionAnswering

        >>> tokenizer = AutoTokenizer.from_pretrained("RUCAIBox/mvp")
        >>> model = MvpForQuestionAnswering.from_pretrained("RUCAIBox/mvp")

        >>> inputs = tokenizer(
        ...     "Answer the following question: Who was Jim Henson? [SEP] Jim Henson was a nice puppet",
        ...     return_tensors="pt",
        ... )
        >>> target_start_index = torch.tensor([18])
        >>> target_end_index = torch.tensor([19])

        >>> loss = model(**inputs, start_positions=target_start_index, end_positions=target_end_index).loss
        >>> loss.backward()
        ```

        Inference after the model fine-tuned
        ```python
        >>> with torch.no_grad():
        ...     outputs = model(**inputs)

        >>> answer_start_index = outputs.start_logits.argmax()
        >>> answer_end_index = outputs.end_logits.argmax()

        >>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
        >>> predict_answer = tokenizer.decode(predict_answer_tokens)
        ```
        NFr„  r   r   r"   rg   )Úignore_indexr2   )
rr  Ústart_logitsÚ
end_logitsra   rQ  rR  r1  rS  r¸   rT  )r”   r  rß   r—  rÛ   r�  Ú
contiguousrU  rl   r¬   r   r   ra   rQ  rR  r1  rS  r¸   rT  )r6   r   rb   rK  rL  rM  r™  rš  r  rN  r»   rd   r  r  r   r¿   Úsequence_outputrs  r�  rž  Ú
total_lossÚignored_indexrw  Ú
start_lossÚend_lossrx  s                             r)   rC   zMvpForQuestionAnswering.forwardU  s  € ðV &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆØÐ&¨=Ð+DØˆIà—*‘*ØØ)Ø/Ø#9Ø+Ø'Ø"7ØØ/Ø!5Ø#ð ó 
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJáàØðð ˜˜�ñˆFð 0:Ð/E�Z�M FÑ*ÐQÈ6ÐQä2ØØ%Ø!Ø#×3Ñ3Ø")×"?Ñ"?Ø&×9Ñ9Ø$×5Ñ5Ø&-×&GÑ&GØ")×"?Ñ"?Ø&×9Ñ9ô
ð 	
r+   r{  )rF   rG   rH   r5   rJ  r   r=   rK   r'  rZ  r°   r�   r‘   r   rC   rL   rM   s   @r)   r”  r”  C  s^  ø„ ô
ò.ð ð *.Ø.2Ø59Ø:>Ø:>Ø37Ø15Ø26Ø:>Ø!%Ø)-Ø,0Ø#'ñF
à—<‘< $Ñ&ðF
ð Ÿ™ tÑ+ðF
ð !×+Ñ+¨dÑ2ð	F
ð
 !&× 0Ñ 0°4Ñ 7ðF
ð ˜e×/Ñ/Ñ0°4Ñ7ðF
ð ×)Ñ)¨DÑ0ðF
ð ×'Ñ'¨$Ñ.ðF
ð ×(Ñ(¨4Ñ/ðF
ð  %×0Ñ0°4Ñ7ðF
ð ˜$‘;ðF
ð   $™;ðF
ð # T™kðF
ð ˜D‘[ðF
ð  
Ð4Ñ	4ò!F
ó ôF
r+   r”  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚMvpDecoderWrapperz½
    This wrapper class is a helper class to correctly load pretrained checkpoints when the causal language model is
    used in combination with the [`EncoderDecoderModel`] framework.
    c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y rÀ   )r4   r5   r)  r@  r  r£   s     €r)   r5   zMvpDecoderWrapper.__init__æ  s&   ø€ Ü‰Ñ˜Ô Ü! &Ó)ˆŒØ�‰Õr+   c                 ó&   —  | j                   |i |¤ŽS rÀ   )r@  )r6   Úargsr   s      r)   rC   zMvpDecoderWrapper.forwardë  s   € Øˆt�|‰|˜TÐ, VÑ,Ð,r+   )rF   rG   rH   rI   r5   rC   rL   rM   s   @r)   r¦  r¦  à  s   ø„ ñô
ö
-r+   r¦  c                   ór  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zd„ Ze	 	 	 	 	 	 	 	 	 	 	 	 dde	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  dedz  de	j                  dz  de	j                  dz  dedz  dedz  dedz  dedz  dee	j                  z  deez  fd„«       Zˆ xZS )ÚMvpForCausalLMr]  z!model.decoder.embed_tokens.weightc                 óâ   •— d|_         d|_        t        ‰| �  |«       t	        |«      | _        t        j                  |j                  |j                  d¬«      | _
        | j                  «        y )NTFrW   )rS   r4  r4   r5   r¦  rß   r   rZ   r–  r  r`  r  r£   s     €r)   r5   zMvpForCausalLM.__init__ò  sX   ø€ Ø ˆÔØ$)ˆÔ!Ü‰Ñ˜Ô Ü& vÓ.ˆŒ
ä—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr+   c                 óB   — | j                   j                  j                  S rÀ   ©rß   r@  rø   rB  s    r)   rC  z#MvpForCausalLM.get_input_embeddingsý  s   € Ø�z‰z×!Ñ!×.Ñ.Ð.r+   c                 ó:   — || j                   j                  _        y rÀ   r®  rE  s     r)   rG  z#MvpForCausalLM.set_input_embeddings   s   € Ø*/ˆ�
‰
×ÑÕ'r+   c                 ón   — | j                   j                  «        | j                  j                  d«       y r&  rm  rB  s    r)   rJ  z%MvpForCausalLM.set_lightweight_tuning  rn  r+   Nr   rb   r¸   r¹   ra   r  ro  r»   rd   r  r  Úlogits_to_keepre   c                 ó–  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }| j                  j                  ||||||||	|
|¬«
      }|d   }t        |t        «      rt        | d«      n|}| j                  |dd…|dd…f   «      }d}|�Ft        «       } ||j                  d| j                   j                  «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                   |j"                  ¬«      S )ap  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("RUCAIBox/mvp")
        >>> model = MvpForCausalLM.from_pretrained("RUCAIBox/mvp")

        >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
        >>> outputs = model(**inputs)

        >>> logits = outputs.logits
        >>> list(logits.shape)
        [1, 8, 50267]
        ```NrP  r   r"   r   )rr  rs  ra   r_   r  r1  )r”   rd   r  r  rß   r@  rm   rJ   Úslicer`  r   ru   r  r   ra   r_   r  r1  )r6   r   rb   r¸   r¹   ra   r  ro  r»   rd   r  r  r±  r   r¿   r_   Úslice_indicesrs  rr  rw  rx  s                        r)   rC   zMvpForCausalLM.forward  sl  € ðN 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆð —*‘*×$Ñ$ØØ)Ø"7Ø#9Ø+Ø'ØØ/Ø!5Ø#ð %ó 
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯K©K×,BÑ,BÓCÀVÇ[Á[ÐQSÃ_ÓUˆDáØ�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r+   )NNNNNNNNNNNr   )rF   rG   rH   rY  r5   rC  rG  rJ  r   r=   r'  rK   r°   r
   r�   rJ   r‘   r   rC   rL   rM   s   @r)   r«  r«  ï  sO  ø„ Ø*Ð,OÐPÐô	ò/ò0ò+ð ð .2Ø.2Ø:>Ø;?Ø(,Ø26Ø*.Ø!%Ø)-Ø,0Ø#'Ø-.ñO
à×#Ñ# dÑ*ðO
ð Ÿ™ tÑ+ðO
ð  %×0Ñ0°4Ñ7ð	O
ð
 !&× 1Ñ 1°DÑ 8ðO
ð  ™ðO
ð ×(Ñ(¨4Ñ/ðO
ð × Ñ  4Ñ'ðO
ð ˜$‘;ðO
ð   $™;ðO
ð # T™kðO
ð ˜D‘[ðO
ð ˜eŸl™lÑ*ðO
ð 
Ð2Ñ	2òO
ó ôO
r+   r«  )r«  râ   r”  r}  r<  rÞ   )@rI   r  r=   r   Útorch.nnr   r   r   Ú r   rã   Úactivationsr	   Úcache_utilsr
   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   Úconfiguration_mvpr   Ú
get_loggerrF   r2  rK   rJ   r*   rÒ   r-   ÚModulerO   r“   r²   rÂ   rÎ   rÞ   r÷   r)  r<  râ   r}  r”  r¦  r«  Ú__all__r  r+   r)   ú<module>rÃ     sÙ  ðñ ã ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß JÝ 9÷÷ ñ õ .ß DÑ DÝ (ð 
ˆ×	Ñ	˜HÓ	%€ð %§,¡,ð ¸cð Ð[^ó ô"; B§L¡Lô ;ô6P2�2—9‘9ô P2ôf:+Ð0ô :+ôziÐ0ô iôZ˜BŸI™Iô ô0�—	‘	ô ð2 ô˜ó ó ðô*`
Ð#ô `
ôFa
Ð#ô a
ðH ôL
Ð!ó L
ó ðL
ñ^ ðôô
\hÐ"4°oó \hóð
\hñ~ ðôôa
Ð#5ó a
óða
ðH ôX
Ð0ó X
ó ðX
ôx-Ð*ô -ôh
Ð'¨ô h
òV�r+   