§
    ‚Štjpu  ã                   óè  — d 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mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddl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$ ddl%m&Z& ddl'm(Z( ddl)m*Z*  e$j+        e,¦  «        Z- G d„ dej.        ¦  «        Z/	 d3dej0        dej1        dej1        dej1        dej1        dz  de2de2fd„Z3 G d „ d!ej0        ¦  «        Z4 G d"„ d#e¦  «        Z5e" G d$„ d%e¦  «        ¦   «         Z6 G d&„ d'e6¦  «        Z7e" G d(„ d)e6¦  «        ¦   «         Z8 G d*„ d+e6e¦  «        Z9 e"d,¬-¦  «         G d.„ d/e6¦  «        ¦   «         Z:e" G d0„ d1e6¦  «        ¦   «         Z;g d2¢Z<dS )4zPyTorch OPT model.é    )ÚCallableN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPastÚQuestionAnsweringModelOutputÚ SequenceClassifierOutputWithPast)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )Ú	OPTConfigc                   ód   ‡ — 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 )ÚOPTLearnedPositionalEmbeddingzN
    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__)Úselfr!   r"   Ú	__class__s      €úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/opt/modeling_opt.pyr(   z&OPTLearnedPositionalEmbedding.__init__2   s3   ø€ ð ˆŒÝ‰Œ×Ò˜¨$¬+Ñ5°}ÑEÔEÐEÐEÐEó    r   NÚattention_maskÚpast_key_values_lengthÚposition_idsc                 óÖ   •— |€>t          j        |d¬¦  «        }||z  dz
                       ¦   «         }|dd…|d…f         }t          ¦   «                              || j        z   ¦  «        S )z3`input_ids_shape` is expected to be [bsz x seqlen].Nr   ©Údim)ÚtorchÚcumsumÚlongr'   Úforwardr&   )r)   r-   r.   r/   r*   s       €r+   r6   z%OPTLearnedPositionalEmbedding.forward8   sq   ø€ ð ÐÝ œ<¨¸AÐ>Ñ>Ô>ˆLØ(¨>Ñ9¸AÑ=×CÒCÑEÔEˆLà'¨¨¨Ð+AÐ+BÐ+BÐ(BÔCˆLå‰wŒw�Š˜|¨d¬kÑ9Ñ:Ô:Ð:r,   )r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr(   r3   Ú
LongTensorr6   Ú__classcell__©r*   s   @r+   r    r    -   s¯   ø€ € € € € ðð ðF sð F¸3ð Fð Fð Fð Fð Fð Fð '(Ø04ð	;ð ;àÔ(ð;ð !$ð;ð Ô&¨Ñ-ð	;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r,   r    ç        ÚmoduleÚqueryÚkeyÚvaluer-   ÚscalingÚdropoutc                 óÀ  — t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |dt           j        ¬¦  «                             |j        ¦  «        }t          j         	                    ||| j
        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «                             ¦   «         }	|	|fS )Néÿÿÿÿéþÿÿÿ)r2   Údtype©ÚpÚtrainingr   r%   )r3   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32ÚtorI   rE   rL   Ú
contiguous)
r@   rA   rB   rC   r-   rD   rE   ÚkwargsÚattn_weightsÚattn_outputs
             r+   Úeager_attention_forwardrW   J   sÃ   € õ ”<  s§}¢}°R¸Ñ'<Ô'<Ñ=Ô=ÀÑG€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r,   c                   ó¬   ‡ — e Zd ZdZ	 ddededz  fˆ fd„Z	 	 	 ddej        de	dz  d	ej        dz  d
e
deej        ej        dz  e	dz  f         f
d„Zˆ xZS )ÚOPTAttentionz=Multi-headed attention from 'Attention Is All You Need' paperNÚconfigÚ	layer_idxc                 ó4  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        |j	        | _	        || _
        |€(t                               d| j        j        › d�¦  «         | j        | j        z  | _        d| _        | j        | j        z  | j        k    r t#          d| j        › d| j        › d�¦  «        ‚| j        dz  | _        t'          j        | j        | j        | j	        ¬¦  «        | _        t'          j        | j        | j        | j	        ¬¦  «        | _        t'          j        | j        | j        | j	        ¬¦  «        | _        t'          j        | j        | j        | j	        ¬¦  «        | _        d S )	NzInstantiating z¹ without passing a `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.Tz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿©Úbias)r'   r(   rZ   Úhidden_sizeÚ	embed_dimÚnum_attention_headsÚ	num_headsÚattention_dropoutrE   Úenable_biasr[   ÚloggerÚwarning_oncer*   r7   Úhead_dimÚ	is_causalÚ
ValueErrorrD   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r)   rZ   r[   rT   r*   s       €r+   r(   zOPTAttention.__init__d   sƒ  ø€ õ 	‰Œ×ÒÑÔÐØˆŒØÔ+ˆŒØÔ3ˆŒØÔ/ˆŒØ!Ô-ˆÔØ"ˆŒØÐÝ×Òð, ¤Ô!8ð ,ð ,ð ,ñô ð ð œ¨$¬.Ñ8ˆŒØˆŒàŒM˜DœNÑ*¨t¬~Ò=Ð=Ýð8ÈdÌnð 8ð 8Ø%)¤^ð8ð 8ð 8ñô ð ð ”} dÑ*ˆŒå”i ¤°´ÀTÔEUÐVÑVÔVˆŒÝ”i ¤°´ÀTÔEUÐVÑVÔVˆŒÝ”i ¤°´ÀTÔEUÐVÑVÔVˆŒÝœ	 $¤.°$´.ÀtÔGWÐXÑXÔXˆŒˆˆr,   FÚhidden_statesÚpast_key_valuesr-   Úoutput_attentionsÚreturnc                 óT  — |                      ¦   «         \  }}}|                      |¦  «        | j        z  }	|	                     |d| j        | j        ¦  «                             dd¦  «        }	|                      |¦  «        }
|                      |¦  «        }|
                     |d| j        | j        ¦  «                             dd¦  «        }
|                     |d| j        | j        ¦  «                             dd¦  «        }|�| 	                    |
|| j
        ¦  «        \  }
}t          j        | j        j        t          ¦  «        } || |	|
||f| j        sdn| j        ddœ|¤Ž\  }}|                     ||d¦  «                             ¦   «         }|                      |¦  «        }||fS )z#Input shape: Batch x Time x ChannelrG   r   r%   Nr?   g      ð?)rE   rD   )Úsizerm   rD   Úviewrb   rg   rN   rk   rl   Úupdater[   r   Úget_interfacerZ   Ú_attn_implementationrW   rL   rE   ÚreshaperS   rn   )r)   ro   rp   r-   rq   rT   ÚbszÚtgt_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerV   rU   s                  r+   r6   zOPTAttention.forward‡   s¸  € ð (×,Ò,Ñ.Ô.‰ˆˆW�að —{’{ =Ñ1Ô1°D´LÑ@ˆØ#×(Ò(¨¨b°$´.À$Ä-ÑPÔP×ZÒZÐ[\Ð^_Ñ`Ô`ˆà—[’[ Ñ/Ô/ˆ
Ø—{’{ =Ñ1Ô1ˆØ—_’_ S¨"¨d¬n¸d¼mÑLÔL×VÒVÐWXÐZ[Ñ\Ô\ˆ
Ø#×(Ò(¨¨b°$´.À$Ä-ÑPÔP×ZÒZÐ[\Ð^_Ñ`Ô`ˆàÐ&à'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð>�C�C°$´,Øð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð "×)Ò)¨#¨w¸Ñ;Ô;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜LÐ(Ð(r,   ©N)NNF)r7   r8   r9   r:   r   r;   r(   r3   ÚTensorr
   ÚboolÚtupler6   r=   r>   s   @r+   rY   rY   a   sç   ø€ € € € € ØGÐGð
 !%ð!Yð !Yàð!Yð ˜‘:ð!Yð !Yð !Yð !Yð !Yð !YðL )-Ø.2Ø"'ð.)ð .)à”|ð.)ð  ™ð.)ð œ tÑ+ð	.)ð
  ð.)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸$±,Ð>Ô	?ð.)ð .)ð .)ð .)ð .)ð .)ð .)ð .)r,   rY   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dz  d	e	dz  d
ej
        dz  dee         dej        fd„Zˆ xZS )ÚOPTDecoderLayerNrZ   r[   c                 ó*  •— t          ¦   «                              ¦   «          |j        | _        t	          ||¬¦  «        | _        |j        | _        |j        | _        t          |j	                 | _
        t          j        | j        |j        ¬¦  «        | _        t          j        | j        |j        |j        ¬¦  «        | _        t          j        |j        | j        |j        ¬¦  «        | _        t          j        | j        |j        ¬¦  «        | _        d S )N)rZ   r[   ©Úelementwise_affiner]   )r'   r(   r_   r`   rY   Ú	self_attnÚdo_layer_norm_beforerE   r	   Úactivation_functionÚactivation_fnr   Ú	LayerNormÚlayer_norm_elementwise_affineÚself_attn_layer_normrj   Úffn_dimrd   Úfc1Úfc2Úfinal_layer_norm)r)   rZ   r[   r*   s      €r+   r(   zOPTDecoderLayer.__init__¹   sá   ø€ Ý‰Œ×ÒÑÔÐØÔ+ˆŒå%¨V¸yÐIÑIÔIˆŒà$*Ô$?ˆÔ!Ø”~ˆŒÝ# FÔ$>Ô?ˆÔå$&¤LØŒN¨vÔ/Sð%
ñ %
ô %
ˆÔ!õ ”9˜Tœ^¨V¬^À&ÔBTÐUÑUÔUˆŒÝ”9˜Vœ^¨T¬^À&ÔBTÐUÑUÔUˆŒÝ "¤¨T¬^ÐPVÔPtÐ uÑ uÔ uˆÔÐÐr,   Fro   r-   rp   Ú	use_cacher/   rT   rr   c                 óà  — |}| j         r|                      |¦  «        } | j        d||||dœ|¤Ž\  }}t          j                             || j        | j        ¬¦  «        }||z   }| j         s|                      |¦  «        }|j        }	|                     d| 	                    d¦  «        ¦  «        }|}| j         r|  
                    |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t          j                             || j        | j        ¬¦  «        }||z                        |	¦  «        }| j         s|  
                    |¦  «        }|S )N)ro   rp   r/   r-   rJ   rG   © )r‹   r�   rŠ   r   rO   rE   rL   Úshapery   rt   r”   r’   r�   r“   ru   )
r)   ro   r-   rp   r•   r/   rT   Úresidualr|   Úhidden_states_shapes
             r+   r6   zOPTDecoderLayer.forwardÊ   sž  € ð !ˆð Ô$ð 	EØ ×5Ò5°mÑDÔDˆMð *˜4œ>ð 
Ø'Ø+Ø%Ø)ð	
ð 
ð
 ð
ð 
Ñˆ�qõ œ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆØ  =Ñ0ˆð Ô(ð 	EØ ×5Ò5°mÑDÔDˆMð ,Ô1ÐØ%×-Ò-¨b°-×2DÒ2DÀRÑ2HÔ2HÑIÔIˆØ ˆð Ô$ð 	AØ ×1Ò1°-Ñ@Ô@ˆMàŸš Ñ/Ô/ˆØ×*Ò*¨=Ñ9Ô9ˆàŸš Ñ/Ô/ˆÝœ×-Ò-¨m¸t¼|ÐVZÔVcÐ-ÑdÔdˆà! MÑ1×7Ò7Ð8KÑLÔLˆð Ô(ð 	AØ ×1Ò1°-Ñ@Ô@ˆMàÐr,   r�   )NNFN)r7   r8   r9   r   r;   r(   r3   r‚   r
   rƒ   r<   r   r   r6   r=   r>   s   @r+   r†   r†   ¸   sé   ø€ € € € € ðvð v˜yð v°S¸4±Zð vð vð vð vð vð vð( /3Ø(,Ø!&Ø04ð3ð 3à”|ð3ð œ tÑ+ð3ð  ™ð	3ð
 ˜$‘;ð3ð Ô&¨Ñ-ð3ð Ð-Ô.ð3ð 
Œð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r,   r†   c                   óF   — e Zd ZU eed<   dZdZdgZdZdZ	dZ
dZdZeedœZdS )ÚOPTPreTrainedModelrZ   ÚmodelTr†   )ro   Ú
attentionsN)r7   r8   r9   r   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_attention_backendÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphr†   rY   Ú_can_record_outputsr—   r,   r+   rœ   rœ      sc   € € € € € € àÐÐÑØÐØ&*Ð#Ø*Ð+ÐØ"&ÐØÐØ€NØÐØ!Ðà(Ø"ðð ÐÐÐr,   rœ   c                   óæ   ‡ — e Zd ZdZdefˆ fd„Zeee	 	 	 	 	 	 d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	j
        dz  dee         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú
OPTDecoderz—
    Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`OPTDecoderLayer`]

    Args:
        config: OPTConfig
    rZ   c                 óh  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        ‰j        | _        ‰j        | _        ‰j        | _        t          j
        ‰j        ‰j        | j        ¦  «        | _        t          ‰j        ‰j        ¦  «        | _        ‰j        ‰j        k    r't          j        ‰j        ‰j        d¬¦  «        | _        nd | _        ‰j        ‰j        k    r't          j        ‰j        ‰j        d¬¦  «        | _        nd | _        ‰j        r-‰j        s&t          j        ‰j        ‰j        ¬¦  «        | _        nd | _        t          j        ˆfd„t3          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        |                      ¦   «          d S )NFr]   rˆ   c                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r[   )r†   )Ú.0ÚirZ   s     €r+   ú
<listcomp>z'OPTDecoder.__init__.<locals>.<listcomp>8  s&   ø€ Ð$sÐ$sÐ$sÈa¥_°VÀqÐ%IÑ%IÔ%IÐ$sÐ$sÐ$sr,   )r'   r(   rE   Ú	layerdropÚpad_token_idÚpadding_idxÚmax_position_embeddingsÚmax_target_positionsÚ
vocab_sizer   Ú	EmbeddingÚword_embed_proj_dimÚembed_tokensr    r_   Úembed_positionsrj   Úproject_outÚ
project_inr‹   Ú_remove_final_layer_normrŽ   r�   r”   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayersÚgradient_checkpointingÚ	post_init©r)   rZ   r*   s    `€r+   r(   zOPTDecoder.__init__  s–  øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø”~ˆŒØÔ)ˆŒØ!Ô.ˆÔØ$*Ô$BˆÔ!Ø Ô+ˆŒåœL¨Ô):¸FÔ<VÐX\ÔXhÑiÔiˆÔÝ<¸VÔ=[Ð]cÔ]oÑpÔpˆÔàÔ%¨Ô);Ò;Ð;Ý!œy¨Ô);¸VÔ=WÐ^cÐdÑdÔdˆDÔÐà#ˆDÔàÔ%¨Ô);Ò;Ð;Ý œi¨Ô(BÀFÔDVÐ]bÐcÑcÔcˆDŒOˆOà"ˆDŒOð
 Ô&ð 	)¨vÔ/Nð 	)Ý$&¤LØÔ"°vÔ7[ð%ñ %ô %ˆDÔ!Ð!ð %)ˆDÔ!å”mÐ$sÐ$sÐ$sÐ$sÕSXÐY_ÔYqÑSrÔSrÐ$sÑ$sÔ$sÑtÔtˆŒà&+ˆÔ#à�ŠÑÔÐÐÐr,   NÚ	input_idsr-   rp   Úinputs_embedsr•   r/   rT   rr   c           	      óü  — |d u |d uz  rt          d¦  «        ‚|�!|                     d|j        d         ¦  «        }|€|                      |¦  «        }|r|€t	          | j        ¬¦  «        }|�|                     ¦   «         nd}|€7||j        d         z   }	t          j        |j        d         |	|j	        ¬¦  «        }|€>t          j
        |d¬¦  «        }||z  dz
                       ¦   «         }|d d …|d …f         }t          | j        |||¬¦  «        }
|                      |||¬	¦  «        }| j        �|                      |¦  «        }||                     |j	        ¦  «        z   }t!          | j        ¦  «        D ]:\  }}| j        r t          j        g ¦  «        }|| j        k     rŒ, ||f|
|||d
œ|¤Ž}Œ;| j        �|                      |¦  «        }| j        �|                      |¦  «        }t/          ||¬¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsrG   )rZ   r   r   ©Údevicer1   )rZ   rÅ   r-   rp   )r/   )r-   r/   rp   r•   )Úlast_hidden_staterp   )ri   ru   r˜   r¸   r   rZ   Úget_seq_lengthr3   ÚonesrÈ   r4   r5   r   r¹   r»   rR   Ú	enumeraterÀ   rL   Úrandr°   r”   rº   r   )r)   rÄ   r-   rp   rÅ   r•   r/   rT   Úpast_seen_tokensÚ
seq_lengthÚcausal_maskÚ
pos_embedsro   ÚidxÚdecoder_layerÚdropout_probabilitys                   r+   r6   zOPTDecoder.forward>  sr  € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø!Ÿš r¨9¬?¸2Ô+>Ñ?Ô?ˆIàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOà?NÐ?Z˜?×9Ò9Ñ;Ô;Ð;Ð`aÐàÐ!Ø)¨MÔ,?ÀÔ,BÑBˆJÝ"œZ¨Ô(;¸AÔ(>À
ÐS`ÔSgÐhÑhÔhˆNð ÐÝ œ<¨¸AÐ>Ñ>Ô>ˆLØ(¨>Ñ9¸AÑ=×CÒCÑEÔEˆLà'¨¨¨Ð+;Ð+<Ð+<Ð(<Ô=ˆLå(Ø”;Ø'Ø)Ø+ð	
ñ 
ô 
ˆð ×)Ò)¨.Ð:JÐYeÐ)ÑfÔfˆ
àŒ?Ð&Ø ŸOšO¨MÑ:Ô:ˆMà%¨
¯ª°mÔ6JÑ(KÔ(KÑKˆõ #,¨D¬KÑ"8Ô"8ð 	ð 	ÑˆC�àŒ}ð Ý&+¤j°¡n¤nÐ#Ø&¨¬Ò7Ð7Øà)˜MØðà*Ø)Ø /Ø#ðð ð ðð ˆMˆMð Ô Ð,Ø ×1Ò1°-Ñ@Ô@ˆMàÔÐ'Ø ×,Ò,¨]Ñ;Ô;ˆMå&Ø+Ø+ð
ñ 
ô 
ð 	
r,   ©NNNNNN)r7   r8   r9   r:   r   r(   r   r   r   r3   r<   r‚   r
   ÚFloatTensorrƒ   r   r   r   r6   r=   r>   s   @r+   rª   rª     s)  ø€ € € € € ðð ð#˜yð #ð #ð #ð #ð #ð #ðJ  ØØð .2Ø.2Ø(,Ø26Ø!%Ø04ðK
ð K
àÔ# dÑ*ðK
ð œ tÑ+ðK
ð  ™ð	K
ð
 Ô(¨4Ñ/ðK
ð ˜$‘;ðK
ð Ô&¨Ñ-ðK
ð Ð+Ô,ðK
ð 
!ðK
ð K
ð K
ñ „^ñ „_ñ  ÔðK
ð K
ð K
ð K
ð K
r,   rª   c                   óÞ   ‡ — e Z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dz  d	e	j        dz  d
edz  de	j
        dz  dee         defd„¦   «         ¦   «         Zˆ xZS )ÚOPTModelrZ   c                 óš   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |                      ¦   «          d S r�   )r'   r(   rª   ÚdecoderrÂ   rÃ   s     €r+   r(   zOPTModel.__init__‘  s@   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ñ)Ô)ˆŒà�ŠÑÔÐÐÐr,   c                 ó   — | j         j        S r�   ©rÚ   r¸   ©r)   s    r+   Úget_input_embeddingszOPTModel.get_input_embeddings—  s   € ØŒ|Ô(Ð(r,   c                 ó   — || j         _        d S r�   rÜ   ©r)   rC   s     r+   Úset_input_embeddingszOPTModel.set_input_embeddingsš  s   € Ø$)ˆŒÔ!Ð!Ð!r,   NrÄ   r-   rp   rÅ   r•   r/   rT   rr   c           
      óx   —  | j         d||||||dœ|¤Ž}t          |j        |j        |j        |j        ¬¦  «        S )N©rÄ   r-   r/   rp   rÅ   r•   )rÉ   rp   ro   rž   r—   )rÚ   r   rÉ   rp   ro   rž   )	r)   rÄ   r-   rp   rÅ   r•   r/   rT   Údecoder_outputss	            r+   r6   zOPTModel.forward�  so   € ð 4@°4´<ð 4
ØØ)Ø%Ø+Ø'Øð4
ð 4
ð ð4
ð 4
ˆõ 'Ø-Ô?Ø+Ô;Ø)Ô7Ø&Ô1ð	
ñ 
ô 
ð 	
r,   rÕ   )r7   r8   r9   r   r(   rÞ   rá   r   r   r3   r<   r‚   r
   rÖ   rƒ   r   r   r   r6   r=   r>   s   @r+   rØ   rØ   �  s!  ø€ € € € € ð˜yð ð ð ð ð ð ð)ð )ð )ð*ð *ð *ð Øð .2Ø.2Ø(,Ø26Ø!%Ø04ð
ð 
àÔ# dÑ*ð
ð œ tÑ+ð
ð  ™ð	
ð
 Ô(¨4Ñ/ð
ð ˜$‘;ð
ð Ô&¨Ñ-ð
ð Ð+Ô,ð
ð 
!ð
ð 
ð 
ñ „^ñ Ôð
ð 
ð 
ð 
ð 
r,   rØ   c                   ó  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 dde	j
        dz  d	e	j        dz  d
edz  de	j        dz  de	j
        dz  dedz  de	j
        dz  dee	j        z  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚOPTForCausalLMzlm_head.weightz!model.decoder.embed_tokens.weightc                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S ©NFr]   )
r'   r(   rØ   r�   r   rj   r·   rµ   Úlm_headrÂ   rÃ   s     €r+   r(   zOPTForCausalLM.__init__¾  sc   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜fÑ%Ô%ˆŒ
õ ”y Ô!;¸VÔ=NÐUZÐ[Ñ[Ô[ˆŒð 	�ŠÑÔÐÐÐr,   c                 ó$   — | j         j        j        S r�   ©r�   rÚ   r¸   rÝ   s    r+   rÞ   z#OPTForCausalLM.get_input_embeddingsÈ  ó   € ØŒzÔ!Ô.Ð.r,   c                 ó(   — || j         j        _        d S r�   rë   rà   s     r+   rá   z#OPTForCausalLM.set_input_embeddingsË  ó   € Ø*/ˆŒ
ÔÔ'Ð'Ð'r,   Nr   rÄ   r-   rp   rÅ   Úlabelsr•   r/   Úlogits_to_keeprT   rr   c	           
      ó~  —  | j         j        d||||||dœ|	¤Ž}
|
j        }t          |t          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «                             ¦   «         }d}|� | j        d||| j	        j
        dœ|	¤Ž}t          |||
j        |
j        |
j        ¬¦  «        S )an  
        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, OPTForCausalLM

        >>> model = OPTForCausalLM.from_pretrained("facebook/opt-350m")
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious. I'm just a little bit of a weirdo."
        ```rã   N)Úlogitsrï   rµ   ©Úlossrò   rp   ro   rž   r—   )r�   rÚ   rÉ   Ú
isinstancer;   Úsliceré   rS   Úloss_functionrZ   rµ   r   rp   ro   rž   )r)   rÄ   r-   rp   rÅ   rï   r•   r/   rð   rT   Úoutputsro   Úslice_indicesrò   rô   s                  r+   r6   zOPTForCausalLM.forwardÎ  s  € ðJ ,>¨4¬:Ô+=ð ,
ØØ)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔA×LÒLÑNÔNˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå%ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r,   )NNNNNNNr   )r7   r8   r9   Ú_tied_weights_keysr(   rÞ   rá   r   r   r3   r<   r‚   r
   rÖ   rƒ   r;   r   r   r„   r   r6   r=   r>   s   @r+   ræ   ræ   »  sP  ø€ € € € € Ø*Ð,OÐPÐðð ð ð ð ð/ð /ð /ð0ð 0ð 0ð Øð .2Ø.2Ø(,Ø26Ø*.Ø!%Ø04Ø-.ð<
ð <
àÔ# dÑ*ð<
ð œ tÑ+ð<
ð  ™ð	<
ð
 Ô(¨4Ñ/ð<
ð Ô  4Ñ'ð<
ð ˜$‘;ð<
ð Ô&¨Ñ-ð<
ð ˜eœlÑ*ð<
ð Ð+Ô,ð<
ð 
Ð'Ñ	'ð<
ð <
ð <
ñ „^ñ Ôð<
ð <
ð <
ð <
ð <
r,   ræ   aÒ  
    The OPT Model transformer with a sequence classification head on top (linear layer).

    [`OPTForSequenceClassification`] uses the last token in order to do the classification, as other causal models
    (e.g. GPT-2) do.

    Since it does classification on the last token, it requires to know the position of the last token. If a
    `pad_token_id` is defined in the configuration, it finds the last token that is not a padding token in each row. If
    no `pad_token_id` is defined, it simply takes the last value in each row of the batch. Since it cannot guess the
    padding tokens when `inputs_embeds` are passed instead of `input_ids`, it does the same (take the last value in
    each row of the batch).
    )Úcustom_introc                   óú   ‡ — 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
dz  dej	        dz  dej        dz  d	edz  d
ej        dz  dee         deez  fd„¦   «         ¦   «         Zd„ Zd„ Zˆ xZS )ÚOPTForSequenceClassificationrZ   c                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        | j        d¬¦  «        | _        |  	                    ¦   «          d S rè   )
r'   r(   Ú
num_labelsrØ   r�   r   rj   r·   ÚscorerÂ   rÃ   s     €r+   r(   z%OPTForSequenceClassification.__init__  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒÝ˜fÑ%Ô%ˆŒ
Ý”Y˜vÔ9¸4¼?ÐQVÐWÑWÔWˆŒ
ð 	�ŠÑÔÐÐÐr,   NrÄ   r-   rp   rÅ   rï   r•   r/   rT   rr   c           	      óª  —  | j         |f|||||dœ|¤Ž}	|	j        }
|                      |
¦  «        }|�|j        dd…         \  }}n|j        dd…         \  }}| j        j        €|dk    rt          d¦  «        ‚| j        j        €d}n¨|�}|| j        j        k                         |j        t          j
        ¦  «        }t          j        |j        d         |j        t          j
        ¬¦  «        }||z                       d¦  «        }n)d}t                               | j        j        › d�¦  «         |t          j        ||j        ¬	¦  «        |f         }d}|��Z| j        j        €f| j        dk    rd
| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j        _        nd| j        _        | j        j        d
k    rWt-          ¦   «         }| j        dk    r1 ||                     ¦   «         |                     ¦   «         ¦  «        }nŽ |||¦  «        }n�| j        j        dk    rGt1          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt5          ¦   «         } |||¦  «        }t7          |||	j        |	j        |	j        ¬¦  «        S )a�  
        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 regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        ©rp   r-   r/   rÅ   r•   Nr%   r   z=Cannot handle batch sizes > 1 if no padding token is defined.rG   )rÈ   rI   zŠ will not detect padding tokens in `inputs_embeds`. Results may be unexpected if using padding tokens in conjunction with `inputs_embeds.`rÇ   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationró   )r�   rÉ   r   r˜   rZ   r±   ri   rR   rÈ   r3   Úint32ÚarangeÚargmaxre   rf   r*   r7   Úproblem_typerÿ   rI   r5   r;   r   Úsqueezer   ru   r   r   rp   ro   rž   )r)   rÄ   r-   rp   rÅ   rï   r•   r/   rT   Útransformer_outputsro   rò   Ú
batch_sizeÚsequence_lengthÚlast_non_pad_tokenÚnon_pad_maskÚtoken_indicesÚpooled_logitsrô   Úloss_fcts                       r+   r6   z$OPTForSequenceClassification.forward'  s  € ð& 8B°t´zØð8
à+Ø)Ø%Ø'Øð8
ð 8
ð ð8
ð 8
Ðð ,Ô=ˆØ—’˜MÑ*Ô*ˆàÐ Ø*3¬/¸"¸1¸"Ô*=Ñ'ˆJ˜˜à*7Ô*=¸b¸q¸bÔ*AÑ'ˆJ˜àŒ;Ô#Ð+°
¸a²°ÝÐ\Ñ]Ô]Ð]ØŒ;Ô#Ð+Ø!#ÐÐØÐ"à%¨¬Ô)AÒA×EÒEÀfÄmÕUZÔU`ÑaÔaˆLÝ!œL¨¬¸Ô)<ÀVÄ]ÕZ_ÔZeÐfÑfÔfˆMØ"/°,Ñ">×!FÒ!FÀrÑ!JÔ!JÐÐà!#ÐÝ×ÒØ”>Ô*ð Zð Zð Zñô ð ð
 �uœ|¨J¸v¼}ÐMÑMÔMÐOaÐaÔbˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 M×$9Ò$9Ñ$;Ô$;¸V¿^º^Ñ=MÔ=MÑNÔN�D�Dà#˜8 M°6Ñ:Ô:�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x × 2Ò 2°2°t´Ñ GÔ GÈÏÊÐUWÉÌÑYÔY��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨vÑ6Ô6�å/ØØ Ø/Ô?Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r,   c                 ó$   — | j         j        j        S r�   rë   rÝ   s    r+   rÞ   z1OPTForSequenceClassification.get_input_embeddings|  rì   r,   c                 ó(   — || j         j        _        d S r�   rë   rà   s     r+   rá   z1OPTForSequenceClassification.set_input_embeddings  rî   r,   )NNNNNNN)r7   r8   r9   r   r(   r   r   r3   r<   rÖ   r
   rƒ   r   r   r„   r   r6   rÞ   rá   r=   r>   s   @r+   rý   rý     sL  ø€ € € € € ð˜yð ð ð ð ð ð ð Øð .2Ø37Ø(,Ø26Ø*.Ø!%Ø04ðQ
ð Q
àÔ# dÑ*ðQ
ð Ô)¨DÑ0ðQ
ð  ™ð	Q
ð
 Ô(¨4Ñ/ðQ
ð Ô  4Ñ'ðQ
ð ˜$‘;ðQ
ð Ô&¨Ñ-ðQ
ð Ð+Ô,ðQ
ð 
Ð1Ñ	1ðQ
ð Q
ð Q
ñ „^ñ ÔðQ
ðf/ð /ð /ð0ð 0ð 0ð 0ð 0ð 0ð 0r,   rý   c                   ó  ‡ — 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
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e         deez  fd„¦   «         ¦   «         Zd„ Zd„ Zˆ xZS )ÚOPTForQuestionAnsweringrZ   c                 óØ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        d¦  «        | _        |                      ¦   «          d S r$   )	r'   r(   rØ   r�   r   rj   r·   Ú
qa_outputsrÂ   rÃ   s     €r+   r(   z OPTForQuestionAnswering.__init__…  sX   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý˜fÑ%Ô%ˆŒ
Ýœ) FÔ$>ÀÑBÔBˆŒð 	�ŠÑÔÐÐÐr,   NrÄ   r-   rp   rÅ   Ústart_positionsÚend_positionsr•   r/   rT   rr   c	           	      ó¨  —  | j         |f|||||dœ|	¤Ž}
|
j        }|                      |¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d}|��|��t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «         	                    |j
        ¦  «        }|                     d|¦  «         	                    |j
        ¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t          ||||
j        |
j        ¬	¦  «        S )
aÆ  
        Example:

        ```python
        >>> from transformers import AutoTokenizer, OPTForQuestionAnswering
        >>> import torch

        >>> torch.manual_seed(4)  # doctest: +IGNORE_RESULT
        >>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")

        >>> # note: we are loading a OPTForQuestionAnswering from the hub here,
        >>> # so the head will be randomly initialized, hence the predictions will be random
        >>> model = OPTForQuestionAnswering.from_pretrained("facebook/opt-350m")

        >>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"

        >>> inputs = tokenizer(question, text, return_tensors="pt")
        >>> with torch.no_grad():
        ...     outputs = model(**inputs)

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

        >>> answer_offset = len(tokenizer(question)[0])

        >>> predict_answer_tokens = inputs.input_ids[
        ...     0, answer_offset + answer_start_index : answer_offset + answer_end_index + 1
        ... ]
        >>> predicted = tokenizer.decode(predict_answer_tokens)
        >>> predicted
        ' a nice puppet'
        ```r  r   rG   r1   Nr   )Úignore_indexr%   )rô   Ústart_logitsÚ
end_logitsro   rž   )r�   rÉ   r  Úsplitr
  rS   Úlenrt   ÚclamprR   rÈ   r   r   ro   rž   )r)   rÄ   r-   rp   rÅ   r  r  r•   r/   rT   r  ro   rò   r  r  Ú
total_lossÚignored_indexr  Ú
start_lossÚend_losss                       r+   r6   zOPTForQuestionAnswering.forward�  sñ  € ð\ 8B°t´zØð8
à+Ø)Ø%Ø'Øð8
ð 8
ð ð8
ð 8
Ðð ,Ô=ˆà—’ Ñ/Ô/ˆØ#)§<¢<°°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×HÒHÈÌÑWÔWˆOØ)×/Ò/°°=ÑAÔA×DÒDÀVÄ]ÑSÔSˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø-Ô;Ø*Ô5ð
ñ 
ô 
ð 	
r,   c                 ó$   — | j         j        j        S r�   rë   rÝ   s    r+   rÞ   z,OPTForQuestionAnswering.get_input_embeddingsâ  rì   r,   c                 ó(   — || j         j        _        d S r�   rë   rà   s     r+   rá   z,OPTForQuestionAnswering.set_input_embeddingså  rî   r,   )NNNNNNNN)r7   r8   r9   r   r(   r   r   r3   r<   rÖ   r
   rƒ   r   r   r„   r   r6   rÞ   rá   r=   r>   s   @r+   r  r  ƒ  sb  ø€ € € € € ð˜yð ð ð ð ð ð ð Øð .2Ø37Ø(,Ø26Ø37Ø15Ø!%Ø04ðQ
ð Q
àÔ# dÑ*ðQ
ð Ô)¨DÑ0ðQ
ð  ™ð	Q
ð
 Ô(¨4Ñ/ðQ
ð Ô)¨DÑ0ðQ
ð Ô'¨$Ñ.ðQ
ð ˜$‘;ðQ
ð Ô&¨Ñ-ðQ
ð Ð+Ô,ðQ
ð 
Ð-Ñ	-ðQ
ð Q
ð Q
ñ „^ñ ÔðQ
ðf/ð /ð /ð0ð 0ð 0ð 0ð 0ð 0ð 0r,   r  )ræ   rØ   rœ   rý   r  )r?   )=r:   Úcollections.abcr   r3   r   Útorch.nnr   r   r   Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_optr   Ú
get_loggerr7   re   r¶   r    ÚModuler‚   ÚfloatrW   rY   r†   rœ   rª   rØ   ræ   rý   r  Ú__all__r—   r,   r+   ú<module>r;     s,  ðð Ð à $Ð $Ð $Ð $Ð $Ð $à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø (Ð (Ð (Ð (Ð (Ð (ð 
ˆÔ	˜HÑ	%Ô	%€ð;ð ;ð ;ð ;ð ; B¤Lñ ;ô ;ð ;ðH ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð %ð %ð %ð.T)ð T)ð T)ð T)ð T)�2”9ñ T)ô T)ð T)ðnEð Eð Eð Eð EÐ0ñ Eô Eð EðP ðð ð ð ð ˜ñ ô ñ „ðð {
ð {
ð {
ð {
ð {
Ð#ñ {
ô {
ð {
ð| ð(
ð (
ð (
ð (
ð (
Ð!ñ (
ô (
ñ „ð(
ðVQ
ð Q
ð Q
ð Q
ð Q
Ð'¨ñ Q
ô Q
ð Q
ðh €ððñ ô ðc0ð c0ð c0ð c0ð c0Ð#5ñ c0ô c0ñô ðc0ðL ðb0ð b0ð b0ð b0ð b0Ð0ñ b0ô b0ñ „ðb0ðJð ð €€€r,   