Ë
    ÜÓ^jpu  ã                   óÜ  — 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$jV                  e,«      Z- G d„ dej\                  «      Z/	 d2dej`                  dejb                  dejb                  dejb                  dejb                  dz  de2de2fd„Z3 G d„ d ej`                  «      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 d/„ d0e6«      «       Z;g d1¢Z<y)3z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                   óx   ‡ — 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                 óN   •— d| _         t        ‰| �	  || j                   z   |«       y ©Né   )ÚoffsetÚsuperÚ__init__)Úselfr!   r"   Ú	__class__s      €úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/opt/modeling_opt.pyr(   z&OPTLearnedPositionalEmbedding.__init__2   s$   ø€ ð ˆŒÜ‰Ñ˜¨$¯+©+Ñ5°}ÕEó    NÚattention_maskÚpast_key_values_lengthÚposition_idsc                 ó°   •— |€8t        j                  |d¬«      }||z  dz
  j                  «       }|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   s^   ø€ ð ÐÜ Ÿ<™<¨¸AÔ>ˆLØ(¨>Ñ9¸AÑ=×CÑCÓEˆLà'ªÐ+AÑ+BÐ(BÑCˆLä‰w‰˜|¨d¯k©kÑ9Ó:Ð:r,   )r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr(   r3   Ú
LongTensorr6   Ú__classcell__©r*   s   @r+   r    r    -   s]   ø„ ñðF sð F¸3õ Fð '(Ø04ñ	;à×(Ñ(ð;ð !$ð;ð ×&Ñ&¨Ñ-÷	;ñ ;r,   r    ÚmoduleÚqueryÚkeyÚvaluer-   ÚscalingÚdropoutc                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Néÿÿÿÿéþÿÿÿ)r2   Údtype©ÚpÚtrainingr   r%   )r3   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxÚfloat32ÚtorH   rD   rK   Ú
contiguous)
r?   r@   rA   rB   r-   rC   rD   ÚkwargsÚattn_weightsÚattn_outputs
             r+   Úeager_attention_forwardrV   J   sº   € ô —<‘<  s§}¡}°R¸Ó'<Ó=ÀÑG€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ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                 ó  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _	        || _
        |€-t        j                  d| j                  j                  › d�«       | j                  | j                  z  | _        d| _        | j                  | j                  z  | j                  k7  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                  ¬«      | _        y )	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(   rY   Úhidden_sizeÚ	embed_dimÚnum_attention_headsÚ	num_headsÚattention_dropoutrD   Úenable_biasrZ   ÚloggerÚwarning_oncer*   r7   Úhead_dimÚ	is_causalÚ
ValueErrorrC   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)r)   rY   rZ   rS   r*   s       €r+   r(   zOPTAttention.__init__d   s  ø€ ô 	‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØ×/Ñ/ˆŒØ!×-Ñ-ˆÔØ"ˆŒØÐÜ×ÑØ  §¡×!8Ñ!8Ð 9ð :,ð ,ôð Ÿ™¨$¯.©.Ñ8ˆŒØˆŒà�M‰M˜DŸN™NÑ*¨t¯~©~Ò=ÜØMÈdÏnÉnÐM]Ø$ T§^¡^Ð$4°Bð8óð ð —}‘} dÑ*ˆŒä—i‘i §¡°·±ÀT×EUÑEUÔVˆŒÜ—i‘i §¡°·±ÀT×EUÑEUÔVˆŒÜ—i‘i §¡°·±ÀT×EUÑEUÔVˆŒÜŸ	™	 $§.¡.°$·.±.Àt×GWÑGWÔXˆ�r,   Úhidden_statesÚpast_key_valuesr-   Úoutput_attentionsÚreturnc                 ó\  — |j                  «       \  }}}| j                  |«      | j                  z  }	|	j                  |d| j                  | j
                  «      j                  dd«      }	| j                  |«      }
| j                  |«      }|
j                  |d| j                  | j
                  «      j                  dd«      }
|j                  |d| j                  | j
                  «      j                  dd«      }|� |j                  |
|| j                  «      \  }
}t        j                  | j                  j                  t        «      } || |	|
||f| j                   sdn| j"                  ddœ|¤Ž\  }}|j%                  ||d«      j'                  «       }| j)                  |«      }||fS )z#Input shape: Batch x Time x ChannelrF   r   r%   ç        g      ð?)rD   rC   )Úsizerl   rC   Úviewra   rf   rM   rj   rk   ÚupdaterZ   r   Úget_interfacerY   Ú_attn_implementationrV   rK   rD   ÚreshaperR   rm   )r)   rn   ro   r-   rp   rS   ÚbszÚtgt_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesÚattention_interfacerU   rT   s                  r+   r6   zOPTAttention.forward‡   s”  € ð (×,Ñ,Ó.‰ˆˆW�að —{‘{ =Ó1°D·L±LÑ@ˆØ#×(Ñ(¨¨b°$·.±.À$Ç-Á-ÓP×ZÑZÐ[\Ð^_Ó`ˆà—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆØ—_‘_ S¨"¨d¯n©n¸d¿m¹mÓL×VÑVÐWXÐZ[Ó\ˆ
Ø#×(Ñ(¨¨b°$·.±.À$Ç-Á-ÓP×ZÑZÐ[\Ð^_Ó`ˆàÐ&à'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,Øñ	%
ð ñ	%
Ñ!ˆ�\ð "×)Ñ)¨#¨w¸Ó;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r,   ©N)NNF)r7   r8   r9   r:   r   r;   r(   r3   ÚTensorr
   ÚboolÚtupler6   r=   r>   s   @r+   rX   rX   a   s˜   ø„ ÙGð
 !%ñ!Yàð!Yð ˜‘:õ!YðL )-Ø.2Ø"'ñ.)à—|‘|ð.)ð  ™ð.)ð Ÿ™ tÑ+ð	.)ð
  ð.)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸$±,Ð>Ñ	?÷.)r,   rX   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 )ÚOPTDecoderLayerNrY   rZ   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                  ¬«      | _        y )N)rY   rZ   ©Úelementwise_affiner\   )r'   r(   r^   r_   rX   Ú	self_attnÚdo_layer_norm_beforerD   r	   Úactivation_functionÚactivation_fnr   Ú	LayerNormÚlayer_norm_elementwise_affineÚself_attn_layer_normri   Úffn_dimrc   Úfc1Úfc2Úfinal_layer_norm)r)   rY   rZ   r*   s      €r+   r(   zOPTDecoderLayer.__init__¹   sÙ   ø€ Ü‰ÑÔØ×+Ñ+ˆŒä%¨V¸yÔIˆŒà$*×$?Ñ$?ˆÔ!Ø—~‘~ˆŒÜ# F×$>Ñ$>Ñ?ˆÔä$&§L¡LØ�N‰N¨v×/SÑ/Sô%
ˆÔ!ô —9‘9˜TŸ^™^¨V¯^©^À&×BTÑBTÔUˆŒÜ—9‘9˜VŸ^™^¨T¯^©^À&×BTÑBTÔUˆŒÜ "§¡¨T¯^©^ÐPV×PtÑPtÔ uˆÕr,   rn   r-   ro   Ú	use_cacher/   rS   rq   c                 óô  — |}| j                   r| j                  |«      } | j                  d||||dœ|¤Ž\  }}t        j                  j                  || j
                  | j                  ¬«      }||z   }| j                   s| j                  |«      }|j                  }	|j                  d|j                  d«      «      }|}| j                   r| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j                  || j
                  | j                  ¬«      }||z   j                  |	«      }| j                   s| j                  |«      }|S )N)rn   ro   r/   r-   rI   rF   © )r‹   r�   rŠ   r   rN   rD   rK   Úshapery   rt   r”   r’   r�   r“   ru   )
r)   rn   r-   ro   r•   r/   rS   Úresidualr|   Úhidden_states_shapes
             r+   r6   zOPTDecoderLayer.forwardÊ   sw  € ð !ˆð ×$Ò$Ø ×5Ñ5°mÓDˆMð *˜4Ÿ>™>ð 
Ø'Ø+Ø%Ø)ñ	
ð
 ñ
Ñˆ�qô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆð ×(Ò(Ø ×5Ñ5°mÓDˆMð ,×1Ñ1ÐØ%×-Ñ-¨b°-×2DÑ2DÀRÓ2HÓIˆØ ˆð ×$Ò$Ø ×1Ñ1°-Ó@ˆMàŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆàŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆà! MÑ1×7Ñ7Ð8KÓLˆð ×(Ò(Ø ×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˜yð v°S¸4±Zõ vð( /3Ø(,Ø!&Ø04ñ3à—|‘|ð3ð Ÿ™ tÑ+ð3ð  ™ð	3ð
 ˜$‘;ð3ð ×&Ñ&¨Ñ-ð3ð Ð-Ñ.ð3ð 
�‰÷3r,   r†   c                   óD   — 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y)ÚOPTPreTrainedModelrY   ÚmodelTr†   )rn   Ú
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†   rX   Ú_can_record_outputsr—   r,   r+   rœ   rœ      sH   … àÓØÐØ&*Ð#Ø*Ð+ÐØ"&ÐØÐØ€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
    rY   c           	      ó8  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        t        j                  |j                  |j                  | j
                  «      | _        t        |j                  |j                  «      | _        |j                  |j                  k7  r2t        j                   |j                  |j                  d¬«      | _        nd | _        |j                  |j                  k7  r2t        j                   |j                  |j                  d¬«      | _        nd | _        |j&                  r=|j(                  s1t        j*                  |j                  |j,                  ¬«      | _        nd | _        t        j0                  t3        |j4                  «      D �cg c]  }t7        ||¬«      ‘Œ c}«      | _        d| _        | j=                  «        y c c}w )NFr\   rˆ   )rZ   )r'   r(   rD   Ú	layerdropÚpad_token_idÚpadding_idxÚmax_position_embeddingsÚmax_target_positionsÚ
vocab_sizer   Ú	EmbeddingÚword_embed_proj_dimÚembed_tokensr    r^   Úembed_positionsri   Úproject_outÚ
project_inr‹   Ú_remove_final_layer_normrŽ   r�   r”   Ú
ModuleListÚrangeÚnum_hidden_layersr†   ÚlayersÚgradient_checkpointingÚ	post_init)r)   rY   Úir*   s      €r+   r(   zOPTDecoder.__init__  s•  ø€ Ü‰Ñ˜Ô Ø—~‘~ˆŒØ×)Ñ)ˆŒØ!×.Ñ.ˆÔØ$*×$BÑ$BˆÔ!Ø ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<VÑ<VÐX\×XhÑXhÓiˆÔÜ<¸V×=[Ñ=[Ð]c×]oÑ]oÓpˆÔà×%Ñ%¨×);Ñ);Ò;Ü!Ÿy™y¨×);Ñ);¸V×=WÑ=WÐ^cÔdˆDÕà#ˆDÔà×%Ñ%¨×);Ñ);Ò;Ü Ÿi™i¨×(BÑ(BÀF×DVÑDVÐ]bÔcˆD�Oà"ˆDŒOð
 ×&Ò&¨v×/NÒ/NÜ$&§L¡LØ×"Ñ"°v×7[Ñ7[ô%ˆDÕ!ð %)ˆDÔ!ä—m‘mÔSXÐY_×YqÑYqÓSrÖ$sÈa¤_°VÀqÖ%IÒ$sÓtˆŒà&+ˆÔ#à�‰Õùò	 %ts   ÇHNÚ	input_idsr-   ro   Úinputs_embedsr•   r/   rS   rq   c           	      óþ  — |d u |d uz  rt        d«      ‚|�|j                  d|j                  d   «      }|€| j                  |«      }|r|€t	        | j
                  ¬«      }|�|j                  «       nd}|€A||j                  d   z   }	t        j                  |j                  d   |	|j                  ¬«      }|€8t        j                  |d¬«      }||z  dz
  j                  «       }|d d …|d …f   }t        | j
                  |||¬«      }
| j                  |||¬	«      }| j                  �| j                  |«      }||j                  |j                  «      z   }t!        | j"                  «      D ]D  \  }}| j$                  r%t        j&                  g «      }|| j(                  k  rŒ7 ||f|
|||d
œ|¤Ž}ŒF | j*                  �| j+                  |«      }| j,                  �| j-                  |«      }t/        ||¬«      S )Nz:You must specify exactly one of input_ids or inputs_embedsrF   )rY   r   r   ©Údevicer1   )rY   rÁ   r-   ro   )r/   )r-   r/   ro   r•   )Úlast_hidden_statero   )rh   ru   r˜   r´   r   rY   Úget_seq_lengthr3   ÚonesrÄ   r4   r5   r   rµ   r·   rQ   Ú	enumerater¼   rK   Úrandr¬   r”   r¶   r   )r)   rÀ   r-   ro   rÁ   r•   r/   rS   Úpast_seen_tokensÚ
seq_lengthÚcausal_maskÚ
pos_embedsrn   ÚidxÚdecoder_layerÚdropout_probabilitys                   r+   r6   zOPTDecoder.forward>  s$  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø!Ÿ™ r¨9¯?©?¸2Ñ+>Ó?ˆIàÐ Ø ×-Ñ-¨iÓ8ˆMá˜Ð0Ü*°$·+±+Ô>ˆOà?NÐ?Z˜?×9Ñ9Ô;Ð`aÐàÐ!Ø)¨M×,?Ñ,?ÀÑ,BÑBˆJÜ"ŸZ™Z¨×(;Ñ(;¸AÑ(>À
ÐS`×SgÑSgÔhˆNð ÐÜ Ÿ<™<¨¸AÔ>ˆLØ(¨>Ñ9¸AÑ=×CÑCÓEˆLà'ªÐ+;Ñ+<Ð(<Ñ=ˆLä(Ø—;‘;Ø'Ø)Ø+ô	
ˆð ×)Ñ)¨.Ð:JÐYeÐ)Ófˆ
à�?‰?Ð&Ø ŸO™O¨MÓ:ˆMà%¨
¯©°m×6JÑ6JÓ(KÑKˆô #,¨D¯K©KÓ"8ò 	ÑˆC�à�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øá)Øðà*Ø)Ø /Ø#ñð ñ‰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
à×#Ñ# dÑ*ðK
ð Ÿ™ tÑ+ðK
ð  ™ð	K
ð
 ×(Ñ(¨4Ñ/ð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 )ÚOPTModelrY   c                 ód   •— t         ‰| �  |«       t        |«      | _        | j	                  «        y r�   )r'   r(   rª   Údecoderr¾   ©r)   rY   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                   _        y r�   rÙ   ©r)   rB   s     r+   Úset_input_embeddingszOPTModel.set_input_embeddingsš  s   € Ø$)ˆ�‰Õ!r,   NrÀ   r-   ro   rÁ   r•   r/   rS   rq   c           
      ó¢   —  | j                   d||||||dœ|¤Ž}t        |j                  |j                  |j                  |j
                  ¬«      S )N©rÀ   r-   r/   ro   rÁ   r•   )rÅ   ro   rn   rž   r—   )rÖ   r   rÅ   ro   rn   rž   )	r)   rÀ   r-   ro   rÁ   r•   r/   rS   Údecoder_outputss	            r+   r6   zOPTModel.forward�  si   € ð 4@°4·<±<ð 4
ØØ)Ø%Ø+Ø'Øñ4
ð ñ4
ˆô 'Ø-×?Ñ?Ø+×;Ñ;Ø)×7Ñ7Ø&×1Ñ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¬«      | _        | j                  «        y ©NFr\   )
r'   r(   rÔ   r�   r   ri   r³   r±   Úlm_headr¾   r×   s     €r+   r(   zOPTForCausalLM.__init__¾  sK   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ
ô —y‘y ×!;Ñ!;¸V×=NÑ=NÐUZÔ[ˆŒð 	�‰Õr,   c                 óB   — | j                   j                  j                  S r�   ©r�   rÖ   r´   rÚ   s    r+   rÛ   z#OPTForCausalLM.get_input_embeddingsÈ  ó   € Ø�z‰z×!Ñ!×.Ñ.Ð.r,   c                 ó:   — || j                   j                  _        y r�   rè   rÝ   s     r+   rÞ   z#OPTForCausalLM.set_input_embeddingsË  ó   € Ø*/ˆ�
‰
×ÑÕ'r,   NrÀ   r-   ro   rÁ   Úlabelsr•   r/   Úlogits_to_keeprS   rq   c	           
      ó¨  —  | j                   j                  d||||||dœ|	¤Ž}
|
j                  }t        |t        «      rt        | d«      n|}| j                  |dd…|dd…f   «      j                  «       }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ï   ro   rn   rž   r—   )r�   rÖ   rÅ   Ú
isinstancer;   Úsliceræ   rR   Úloss_functionrY   r±   r   ro   rn   rž   )r)   rÀ   r-   ro   rÁ   rì   r•   r/   rí   rS   Úoutputsrn   Úslice_indicesrï   rñ   s                  r+   r6   zOPTForCausalLM.forwardÎ  sé   € ðJ ,>¨4¯:©:×+=Ñ+=ð ,
ØØ)Ø%Ø+Ø'Øñ,
ð ñ,
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓA×LÑLÓNˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä%ØØØ#×3Ñ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ã   »  s  ø„ Ø*Ð,OÐPÐôò/ò0ð Øð .2Ø.2Ø(,Ø26Ø*.Ø!%Ø04Ø-.ñ<
à×#Ñ# dÑ*ð<
ð Ÿ™ tÑ+ð<
ð  ™ð	<
ð
 ×(Ñ(¨4Ñ/ð<
ð × Ñ  4Ñ'ð<
ð ˜$‘;ð<
ð ×&Ñ&¨Ñ-ð<
ð ˜eŸl™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 )ÚOPTForSequenceClassificationrY   c                 óè   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  | j                  d¬«      | _        | j                  «        y rå   )
r'   r(   Ú
num_labelsrÔ   r�   r   ri   r³   Úscorer¾   r×   s     €r+   r(   z%OPTForSequenceClassification.__init__  sT   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ˜fÓ%ˆŒ
Ü—Y‘Y˜v×9Ñ9¸4¿?¹?ÐQVÔWˆŒ
ð 	�‰Õr,   NrÀ   r-   ro   rÁ   rì   r•   r/   rS   rq   c           	      ó€  —  | j                   |f|||||dœ|¤Ž}	|	j                  }
| j                  |
«      }|�|j                  dd \  }}n|j                  dd \  }}| j                  j
                  €|dk7  rt        d«      ‚| j                  j
                  €d}nÃ|�“|| j                  j
                  k7  j                  |j                  t        j                  «      }t        j                  |j                  d   |j                  t        j                  ¬«      }||z  j                  d«      }n.d}t        j                  | j                  j                   › d�«       |t        j                  ||j                  ¬	«      |f   }d}|��‡| j                  j"                  €�| j$                  dk(  rd
| j                  _        nl| j$                  dkD  rL|j&                  t        j(                  k(  s|j&                  t        j*                  k(  rd| j                  _        nd| j                  _        | j                  j"                  d
k(  rIt-        «       }| j$                  dk(  r& ||j/                  «       |j/                  «       «      }nŒ |||«      }n‚| j                  j"                  dk(  r=t1        «       } ||j3                  d| j$                  «      |j3                  d«      «      }n,| j                  j"                  dk(  rt5        «       } |||«      }t7        |||	j8                  |	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).
        ©ro   r-   r/   rÁ   r•   Nr%   r   z=Cannot handle batch sizes > 1 if no padding token is defined.rF   )rÄ   rH   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˜   rY   r­   rh   rQ   rÄ   r3   Úint32ÚarangeÚargmaxrd   re   r*   r7   Úproblem_typerü   rH   r5   r;   r   Úsqueezer   ru   r   r   ro   rn   rž   )r)   rÀ   r-   ro   rÁ   rì   r•   r/   rS   Útransformer_outputsrn   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±zØð8
à+Ø)Ø%Ø'Øñ8
ð ñ8
Ðð ,×=Ñ=ˆØ—‘˜MÓ*ˆàÐ Ø*3¯/©/¸"¸1Ð*=Ñ'ˆJ™à*7×*=Ñ*=¸b¸qÐ*AÑ'ˆJ˜à�;‰;×#Ñ#Ð+°
¸a²ÜÐ\Ó]Ð]Ø�;‰;×#Ñ#Ð+Ø!#ÑØÐ"à%¨¯©×)AÑ)AÑA×EÑEÀfÇmÁmÔUZ×U`ÑU`ÓaˆLÜ!ŸL™L¨¯©¸Ñ)<ÀVÇ]Á]ÔZ_×ZeÑZeÔfˆMØ"/°,Ñ">×!FÑ!FÀrÓ!JÑà!#ÐÜ×ÑØ—>‘>×*Ñ*Ð+ð ,Zð Zôð
 œuŸ|™|¨J¸v¿}¹}ÔMÐOaÐaÑbˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# M×$9Ñ$9Ó$;¸V¿^¹^Ó=MÓN‘Dá# M°6Ó:‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù × 2Ñ 2°2°t·±Ó GÈÏÉÐUWËÓY‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨vÓ6�ä/ØØ Ø/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r,   c                 óB   — | j                   j                  j                  S r�   rè   rÚ   s    r+   rÛ   z1OPTForSequenceClassification.get_input_embeddings|  ré   r,   c                 ó:   — || j                   j                  _        y 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ú     sû   ø„ ð˜yõ ð Øð .2Ø37Ø(,Ø26Ø*.Ø!%Ø04ñQ
à×#Ñ# dÑ*ðQ
ð ×)Ñ)¨DÑ0ðQ
ð  ™ð	Q
ð
 ×(Ñ(¨4Ñ/ðQ
ð × Ñ  4Ñ'ðQ
ð ˜$‘;ðQ
ð ×&Ñ&¨Ñ-ðQ
ð Ð+Ñ,ðQ
ð 
Ð1Ñ	1òQ
ó ó ðQ
òf/ö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 )ÚOPTForQuestionAnsweringrY   c                 ó®   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  d«      | _        | j                  «        y r$   )	r'   r(   rÔ   r�   r   ri   r³   Ú
qa_outputsr¾   r×   s     €r+   r(   z OPTForQuestionAnswering.__init__…  s@   ø€ Ü‰Ñ˜Ô Ü˜fÓ%ˆŒ
ÜŸ)™) F×$>Ñ$>ÀÓBˆŒð 	�‰Õr,   NrÀ   r-   ro   rÁ   Ústart_positionsÚend_positionsr•   r/   rS   rq   c	           	      ó8  —  | j                   |f|||||dœ|	¤Ž}
|
j                  }| 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                  |j                  «      }|j                  d|«      j                  |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   rF   r1   Nr   )Úignore_indexr%   )rñ   Ústart_logitsÚ
end_logitsrn   rž   )r�   rÅ   r  Úsplitr  rR   Úlenrt   ÚclamprQ   rÄ   r   r   rn   rž   )r)   rÀ   r-   ro   rÁ   r  r  r•   r/   rS   r  rn   rï   r  r  Ú
total_lossÚignored_indexr  Ú
start_lossÚend_losss                       r+   r6   zOPTForQuestionAnswering.forward�  s£  € ð\ 8B°t·z±zØð8
à+Ø)Ø%Ø'Øñ8
ð ñ8
Ðð ,×=Ñ=ˆà—‘ Ó/ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+DÜ�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�Ø(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓE×HÑHÈÏÉÓWˆOØ)×/Ñ/°°=ÓA×DÑDÀVÇ]Á]ÓSˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r,   c                 óB   — | j                   j                  j                  S r�   rè   rÚ   s    r+   rÛ   z,OPTForQuestionAnswering.get_input_embeddingsâ  ré   r,   c                 ó:   — || j                   j                  _        y 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  ƒ  s  ø„ ð˜yõ ð Øð .2Ø37Ø(,Ø26Ø37Ø15Ø!%Ø04ñQ
à×#Ñ# dÑ*ðQ
ð ×)Ñ)¨DÑ0ðQ
ð  ™ð	Q
ð
 ×(Ñ(¨4Ñ/ðQ
ð ×)Ñ)¨DÑ0ðQ
ð ×'Ñ'¨$Ñ.ðQ
ð ˜$‘;ðQ
ð ×&Ñ&¨Ñ-ðQ
ð Ð+Ñ,ðQ
ð 
Ð-Ñ	-òQ
ó ó ðQ
òf/ö0r,   r  )rã   rÔ   rœ   rú   r  )rs   )=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   rd   r²   r    ÚModuler‚   ÚfloatrV   rX   r†   rœ   rª   rÔ   rã   rú   r  Ú__all__r—   r,   r+   ú<module>r8     s¥  ðñ å $ã Ý ß AÑ Aå !ß .Ý )Ý /Ý BÝ 9÷ó ÷ GÝ &ß RÓ RÝ 7Ý 5Ý (ð 
ˆ×	Ñ	˜HÓ	%€ô; B§L¡Lô ;ðH ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.T)�2—9‘9ô T)ônEÐ0ô EðP ô˜ó ó ðô {
Ð#ô {
ð| ô(
Ð!ó (
ó ð(
ôVQ
Ð'¨ô Q
ñh ðôôc0Ð#5ó c0óðc0ðL ôb0Ð0ó b0ó ðb0òJ�r,   