Ë
    S^(h“¸  ã                   ó˜  — d Z ddlZddlmZmZm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 dd
lmZmZ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!  ejD                  e#«      Z$dZ%dZ& G d„ dejN                  «      Z( G d„ dejN                  «      Z) G d„ dejT                  «      Z+ G d„ de+«      Z,e+e,dœZ- G d„ dejT                  «      Z. G d„ de«      Z/dZ0dZ1 ed e0«       G d!„ d"e/«      «       Z2 ed#e0«       G d$„ d%e/e«      «       Z3 ed&e0«       G d'„ d(e/«      «       Z4 ed)e0«       G d*„ d+e/«      «       Z5g d,¢Z6y)-zPyTorch BioGPT model.é    N)ÚOptionalÚTupleÚUnion)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )ÚACT2FN)ÚGenerationMixin)Ú!_prepare_4d_causal_attention_maskÚ*_prepare_4d_causal_attention_mask_for_sdpa)Ú)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚ SequenceClassifierOutputWithPastÚTokenClassifierOutput)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingé   )ÚBioGptConfigzmicrosoft/biogptr   c                   óV   ‡ — e Zd ZdZdedefˆ fd„Zddej                  defˆ fd„Zˆ xZ	S )	Ú BioGptLearnedPositionalEmbeddingzN
    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      €úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/biogpt/modeling_biogpt.pyr"   z)BioGptLearnedPositionalEmbedding.__init__9   s$   ø€ ð ˆŒÜ‰Ñ˜¨$¯+©+Ñ5°}ÕEó    Úattention_maskÚpast_key_values_lengthc                 óæ   •— |j                  «       }t        j                  |d¬«      j                  |«      |z  j                  «       dz
  }|dd…|d…f   }t        ‰| �  || j                  z   «      S )z3`input_ids_shape` is expected to be [bsz x seqlen].r   ©ÚdimN)ÚlongÚtorchÚcumsumÚtype_asr!   Úforwardr    )r#   r'   r(   Ú	positionsr$   s       €r%   r0   z(BioGptLearnedPositionalEmbedding.forward?   sp   ø€ à'×,Ñ,Ó.ˆô —\‘\ .°aÔ8×@Ñ@ÀÓPÐSaÑa×gÑgÓiÐlmÑmˆ	ð šaÐ!7Ñ!8Ð8Ñ9ˆ	ä‰w‰˜y¨4¯;©;Ñ6Ó7Ð7r&   )r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr"   r-   Ú
LongTensorr0   Ú__classcell__©r$   s   @r%   r   r   4   s=   ø„ ñðF sð F¸3õ Fñ
8 e×&6Ñ&6ð 
8ÐPS÷ 
8ñ 
8r&   r   c            
       ó`   ‡ — e Zd ZdZd	dedededee   fˆ fd„Zdej                  fˆ fd„Z
ˆ xZS )
ÚBioGptScaledWordEmbeddingz\
    This module overrides nn.Embeddings' forward by multiplying with embeddings scale.
    r   r   Úpadding_idxÚembed_scalec                 ó6   •— t         ‰| �  |||«       || _        y ©N)r!   r"   r=   )r#   r   r   r<   r=   r$   s        €r%   r"   z"BioGptScaledWordEmbedding.__init__R   s   ø€ Ü‰Ñ˜¨¸ÔDØ&ˆÕr&   Ú	input_idsc                 ó<   •— t         ‰| �  |«      | j                  z  S r?   )r!   r0   r=   )r#   r@   r$   s     €r%   r0   z!BioGptScaledWordEmbedding.forwardV   s   ø€ Ü‰w‰˜yÓ)¨D×,<Ñ,<Ñ<Ð<r&   )ç      ð?)r2   r3   r4   r5   r6   r   Úfloatr"   r-   ÚTensorr0   r8   r9   s   @r%   r;   r;   M   sE   ø„ ññ' sð '¸3ð 'ÈSð 'Ð_gÐhmÑ_nõ 'ð= §¡÷ =ñ =r&   r;   c                   ó†  ‡ — e Zd ZdZ	 	 	 	 	 ddededededededee   fˆ fd	„Z	d
e
j                  dedefd„Z	 	 	 	 	 dde
j                  dee
j                     deee
j                        dee
j                     dee
j                     dedee
j                  ee
j                     eee
j                        f   fd„Zˆ xZS )ÚBioGptAttentionz=Multi-headed attention from 'Attention Is All You Need' paperÚ	embed_dimÚ	num_headsÚdropoutÚ
is_decoderÚbiasÚ	is_causalÚconfigc                 ó
  •— 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      à¿©rK   )r!   r"   rG   rH   rI   Úhead_dimrM   Ú
ValueErrorÚscalingrJ   rL   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)	r#   rG   rH   rI   rJ   rK   rL   rM   r$   s	           €r%   r"   zBioGptAttention.__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&   ÚtensorÚseq_lenÚbszc                 óŽ   — |j                  ||| j                  | j                  «      j                  dd«      j	                  «       S )Nr   r   )ÚviewrH   rP   Ú	transposeÚ
contiguous)r#   rX   rY   rZ   s       r%   Ú_shapezBioGptAttention._shape}   s7   € Ø�{‰{˜3 ¨¯©¸¿¹ÓG×QÑQÐRSÐUVÓW×bÑbÓdÐdr&   Úhidden_statesÚkey_value_statesÚpast_key_valuer'   Úlayer_head_maskÚoutput_attentionsÚreturnc                 ó
  — |du}|j                  «       \  }}	}
| j                  |«      | j                  z  }|r0|�.|d   j                  d   |j                  d   k(  r|d   }|d   }�n
|rE| j	                  | j                  |«      d|«      }| j	                  | j                  |«      d|«      }nÃ|�}| j	                  | j                  |«      d|«      }| j	                  | j                  |«      d|«      }t        j                  |d   |gd¬«      }t        j                  |d   |gd¬«      }nD| j	                  | j                  |«      d|«      }| j	                  | j                  |«      d|«      }| j                  r||f}|| j                  z  d| j                  f} | j	                  ||	|«      j                  |Ž } |j                  |Ž } |j                  |Ž }|j                  d«      }t        j                  ||j                  dd«      «      }|j                  «       || j                  z  |	|fk7  r/t!        d|| j                  z  |	|f› d|j                  «       › �«      ‚|�{|j                  «       |d|	|fk7  r#t!        d	|d|	|f› d|j                  «       › �«      ‚|j                  || j                  |	|«      |z   }|j                  || j                  z  |	|«      }t"        j$                  j'                  |d¬«      }|�›|j                  «       | j                  fk7  r*t!        d
| j                  f› d|j                  «       › �«      ‚|j                  dddd«      |j                  || j                  |	|«      z  }|j                  || j                  z  |	|«      }|r?|j                  || j                  |	|«      }|j                  || j                  z  |	|«      }nd}t"        j$                  j)                  || j(                  | j*                  ¬«      }t        j                  ||«      }|j                  «       || j                  z  |	| j                  fk7  r9t!        d|| j                  z  |	| j                  f› d|j                  «       › �«      ‚|j                  || j                  |	| j                  «      }|j                  dd«      }|j                  ||	| j,                  «      }| j/                  |«      }|||fS )ú#Input shape: Batch x Time x ChannelNr   r   r   éÿÿÿÿr*   z$Attention weights should be of size ú	, but is z!Attention mask should be of size z/Head mask for a single layer should be of size ©ÚpÚtrainingú `attn_output` should be of size )ÚsizerV   rR   Úshaper_   rT   rU   r-   ÚcatrJ   rH   rP   r\   ÚreshapeÚbmmr]   rQ   r   Ú
functionalÚsoftmaxrI   rl   rG   rW   )r#   r`   ra   rb   r'   rc   rd   Úis_cross_attentionrZ   Útgt_lenÚ_Úquery_statesÚ
key_statesÚvalue_statesÚ
proj_shapeÚsrc_lenÚattn_weightsÚattn_weights_reshapedÚ
attn_probsÚattn_outputs                       r%   r0   zBioGptAttention.forward€   s  € ð .°TÐ9Ðà'×,Ñ,Ó.‰ˆˆW�að —{‘{ =Ó1°D·L±LÑ@ˆñ ØÐ*Ø˜qÑ!×'Ñ'¨Ñ*Ð.>×.DÑ.DÀQÑ.GÒGð (¨Ñ*ˆJØ)¨!Ñ,ŠLÙàŸ™ T§[¡[Ð1AÓ%BÀBÈÓLˆJØŸ;™; t§{¡{Ð3CÓ'DÀbÈ#ÓN‰LØÐ'àŸ™ T§[¡[°Ó%?ÀÀSÓIˆJØŸ;™; t§{¡{°=Ó'AÀ2ÀsÓKˆLÜŸ™ N°1Ñ$5°zÐ#BÈÔJˆJÜ Ÿ9™9 n°QÑ&7¸Ð%FÈAÔN‰Lð Ÿ™ T§[¡[°Ó%?ÀÀSÓIˆJØŸ;™; t§{¡{°=Ó'AÀ2ÀsÓKˆLà�?Š?ð )¨,Ð7ˆNà˜DŸN™NÑ*¨B°·±Ð>ˆ
ØC�t—{‘{ <°¸#Ó>×CÑCÀZÐPˆØ'�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ˆàÐ&Ø×#Ñ#Ó%¨$¯.©.Ð):Ò:Ü ØEÀtÇ~Á~ÐFWÐEXð YØ'×,Ñ,Ó.Ð/ð1óð ð +×/Ñ/°°2°q¸!Ó<¸|×?PÑ?PÐQTÐVZ×VdÑVdÐfmÐovÓ?wÑwˆLØ'×,Ñ,¨S°4·>±>Ñ-AÀ7ÈGÓTˆLáð
 %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¸$¿.¹.Ñ4HÈ'ÐSW×S`ÑS`Ð3aÐ2bð cØ×$Ñ$Ó&Ð'ð)óð ð
 "×&Ñ& s¨D¯N©N¸GÀTÇ]Á]ÓSˆØ!×+Ñ+¨A¨qÓ1ˆð "×)Ñ)¨#¨w¸¿¹ÓGˆà—m‘m KÓ0ˆàÐ1°>ÐAÐAr&   )ç        FTFN©NNNNF)r2   r3   r4   r5   r6   rC   Úboolr   r   r"   r-   rD   r_   r   r0   r8   r9   s   @r%   rF   rF   [   sM  ø„ ÙGð Ø ØØØ)-ñCàðCð ðCð ð	Cð
 ðCð ðCð ðCð ˜Ñ&õCð>e˜UŸ\™\ð e°Cð e¸có eð 48Ø8<Ø15Ø26Ø"'ñvBà—|‘|ðvBð # 5§<¡<Ñ0ðvBð !  u§|¡|Ñ!4Ñ5ð	vBð
 ! §¡Ñ.ðvBð " %§,¡,Ñ/ðvBð  ðvBð 
ˆu�|‰|˜X e§l¡lÑ3°X¸eÀEÇLÁLÑ>QÑ5RÐRÑ	S÷vBr&   rF   c                   ó$  ‡ — e Zd Z	 	 	 	 	 d	dej                  deej                     deeej                        deej                     deej                     dedeej                  eej                     eeej                        f   fˆ fd„Zˆ xZ	S )
ÚBioGptSdpaAttentionr`   ra   rb   r'   rc   rd   re   c                 óz  •— |s|�*t         j                  d«       t        ‰| �  ||||||¬«      S |du}|j	                  «       \  }}	}
| j                  |«      }|r0|�.|d   j                  d   |j                  d   k(  r|d   }|d   }�n
|rE| j                  | j                  |«      d|«      }| j                  | j                  |«      d|«      }nÃ|�}| j                  | j                  |«      d|«      }| j                  | j                  |«      d|«      }t        j                  |d   |gd¬«      }t        j                  |d   |gd¬«      }nD| j                  | j                  |«      d|«      }| j                  | j                  |«      d|«      }| j                  r||f}| j                  ||	|«      }| j                  r	|€|	dkD  rd	nd
}t        j                  j                  j!                  ||||| j"                  r| j$                  nd|¬«      }|j	                  «       || j&                  |	| j(                  fk7  r7t+        d|| j&                  |	| j(                  f› d|j	                  «       › �«      ‚|j-                  dd«      }|j/                  ||	| j0                  «      }| j3                  |«      }|d|fS )rg   Na§  BioGptModel is using BioGptSdpaAttention, but `torch.nn.functional.scaled_dot_product_attention` does not support `output_attentions=True` or `layer_head_mask` not None. Falling back to the manual attention implementation, but specifying the manual implementation will be required from Transformers version v5.0.0 onwards. This warning can be removed using the argument `attn_implementation="eager"` when loading the model.)ra   rb   r'   rc   rd   r   r   r   rh   r*   TFr�   )Ú	attn_maskÚ	dropout_prL   rm   ri   )ÚloggerÚwarning_oncer!   r0   rn   rV   ro   r_   rT   rU   r-   rp   rJ   rL   r   rs   Úscaled_dot_product_attentionrl   rI   rH   rP   rQ   r]   rq   rG   rW   )r#   r`   ra   rb   r'   rc   rd   ru   rZ   rv   rw   rx   ry   rz   rL   r€   r$   s                   €r%   r0   zBioGptSdpaAttention.forwardû   sÕ  ø€ ñ  Ð ;ä×Ñðlôô ‘7‘?ØØ!1Ø-Ø-Ø /Ø"3ð #ó ð ð .°TÐ9Ðà'×,Ñ,Ó.‰ˆˆW�að —{‘{ =Ó1ˆñ ØÐ*Ø˜qÑ!×'Ñ'¨Ñ*Ð.>×.DÑ.DÀQÑ.GÒGð (¨Ñ*ˆJØ)¨!Ñ,ŠLÙàŸ™ T§[¡[Ð1AÓ%BÀBÈÓLˆJØŸ;™; t§{¡{Ð3CÓ'DÀbÈ#ÓN‰LØÐ'àŸ™ T§[¡[°Ó%?ÀÀSÓIˆJØŸ;™; t§{¡{°=Ó'AÀ2ÀsÓKˆLÜŸ™ N°1Ñ$5°zÐ#BÈÔJˆJÜ Ÿ9™9 n°QÑ&7¸Ð%FÈAÔN‰Lð Ÿ™ T§[¡[°Ó%?ÀÀSÓIˆJØŸ;™; t§{¡{°=Ó'AÀ2ÀsÓKˆLà�?Š?ð )¨,Ð7ˆNà—{‘{ <°¸#Ó>ˆð
 !ŸNšN¨~Ð/EÈ'ÐTUÊ+‘DÐ[`ˆ	ô —h‘h×)Ñ)×FÑFØØØØ$Ø&*§m¢m�d—l’l¸Øð Gó 
ˆð ×ÑÓ # t§~¡~°wÀÇÁÐ!NÒNÜØ2°C¸¿¹ÈÐRV×R_ÑR_Ð3`Ð2að bØ×$Ñ$Ó&Ð'ð)óð ð
 "×+Ñ+¨A¨qÓ1ˆð "×)Ñ)¨#¨w¸¿¹ÓGˆà—m‘m KÓ0ˆà˜D .Ð0Ð0r&   r‚   )
r2   r3   r4   r-   rD   r   r   rƒ   r0   r8   r9   s   @r%   r…   r…   ú   s¿   ø„ ð 48Ø8<Ø15Ø26Ø"'ñf1à—|‘|ðf1ð # 5§<¡<Ñ0ðf1ð !  u§|¡|Ñ!4Ñ5ð	f1ð
 ! §¡Ñ.ðf1ð " %§,¡,Ñ/ðf1ð  ðf1ð 
ˆu�|‰|˜X e§l¡lÑ3°X¸eÀEÇLÁLÑ>QÑ5RÐRÑ	S÷f1ñ f1r&   r…   )ÚeagerÚsdpac                   ó  ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 ddej                  deej                     deej                     deeej                        dee	   dee	   d	eej                  eeej                  ej                  f      f   fd
„Zˆ xZS )ÚBioGptDecoderLayerrM   c                 ó„  •— t         ‰| �  «        |j                  | _        t	        |j
                     | j                  |j                  |j                  dd¬«      | _        |j                  | _
        t        |j                     | _        |j                  | _        t        j                   | j                  «      | _        t        j$                  | j                  |j&                  «      | _        t        j$                  |j&                  | j                  «      | _        t        j                   | j                  «      | _        y )NT)rG   rH   rI   rJ   rL   )r!   r"   Úhidden_sizerG   ÚBIOGPT_ATTENTION_CLASSESÚ_attn_implementationÚnum_attention_headsÚattention_probs_dropout_probÚ	self_attnÚhidden_dropout_probrI   r   Ú
hidden_actÚactivation_fnÚactivation_dropoutr   Ú	LayerNormÚself_attn_layer_normrS   Úintermediate_sizeÚfc1Úfc2Úfinal_layer_norm©r#   rM   r$   s     €r%   r"   zBioGptDecoderLayer.__init__k  sã   ø€ Ü‰ÑÔØ×+Ñ+ˆŒä1°&×2MÑ2MÑNØ—n‘nØ×0Ñ0Ø×7Ñ7ØØô
ˆŒð ×1Ñ1ˆŒÜ# F×$5Ñ$5Ñ6ˆÔØ"(×";Ñ";ˆÔä$&§L¡L°·±Ó$@ˆÔ!ä—9‘9˜TŸ^™^¨V×-EÑ-EÓFˆŒÜ—9‘9˜V×5Ñ5°t·~±~ÓFˆŒÜ "§¡¨T¯^©^Ó <ˆÕr&   r`   r'   rc   rb   rd   Ú	use_cachere   c                 ó|  — |}| j                  |«      }|�|dd nd}| j                  |||||¬«      \  }}	}
t        j                  j	                  || j                  | j
                  ¬«      }||z   }|}| j                  |«      }| j                  |«      }| j                  |«      }t        j                  j	                  || j                  | j
                  ¬«      }| j                  |«      }t        j                  j	                  || j                  | j
                  ¬«      }||z   }|f}|r||	fz  }|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.
            layer_head_mask (`torch.FloatTensor`): mask for attention heads in a given layer of size
                `(encoder_attention_heads,)`.
            past_key_value (`Tuple(torch.FloatTensor)`): 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.
            use_cache (`bool`, *optional*):
                If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
                (see `past_key_values`).
        Nr   )r`   rb   r'   rc   rd   rj   )rœ   r–   r   rs   rI   rl   r    rž   r™   rš   rŸ   )r#   r`   r'   rc   rb   rd   r¢   ÚresidualÚself_attn_past_key_valueÚself_attn_weightsÚpresent_key_valueÚoutputss               r%   r0   zBioGptDecoderLayer.forward€  sY  € ð0 !ˆà×1Ñ1°-Ó@ˆð :HÐ9S >°"°1Ñ#5ÐY]Ð à>B¿n¹nØ'Ø3Ø)Ø+Ø/ð ?Mó ?
Ñ;ˆÐ(Ð*;ô Ÿ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆð !ˆØ×-Ñ-¨mÓ<ˆØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆÜŸ™×-Ñ-¨m¸t×?VÑ?VÐae×anÑanÐ-ÓoˆØŸ™ Ó/ˆÜŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-ÓdˆØ  =Ñ0ˆà Ð"ˆáØÐ)Ð+Ñ+ˆGáØÐ)Ð+Ñ+ˆGàˆr&   )NNNFT)r2   r3   r4   r   r"   r-   rD   r   r   rƒ   ÚFloatTensorr0   r8   r9   s   @r%   r�   r�   j  sÀ   ø„ ð=˜|õ =ð0 26Ø26Ø8<Ø,1Ø$(ñ<à—|‘|ð<ð ! §¡Ñ.ð<ð " %§,¡,Ñ/ð	<ð
 !  u§|¡|Ñ!4Ñ5ð<ð $ D™>ð<ð ˜D‘>ð<ð 
ˆu× Ñ  (¨5°×1BÑ1BÀE×DUÑDUÐ1UÑ+VÑ"WÐWÑ	X÷<r&   r�   c                   ó&   — e Zd ZdZeZdZdZdZd„ Z	y)ÚBioGptPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚbiogptTc                 ó  — t        |t        j                  «      rm|j                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rz|j                  j                  j                  d| j                  j                  ¬«       |j                  �2|j                  j                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yy)zInitialize the weightsr�   )ÚmeanÚstdNrB   )Ú
isinstancer   rS   ÚweightÚdataÚnormal_rM   Úinitializer_rangerK   Úzero_Ú	Embeddingr<   r›   Úfill_)r#   Úmodules     r%   Ú_init_weightsz#BioGptPreTrainedModel._init_weightsÊ  s  € ä�fœbŸi™iÔ(ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)ð .r&   N)
r2   r3   r4   r5   r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_sdpar¹   © r&   r%   r«   r«   ¿  s$   „ ñð
  €LØ ÐØ&*Ð#Ø€Nó*r&   r«   aJ  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`~BioGptConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a»  
    Args:
        input_ids (`torch.LongTensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

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

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.FloatTensor` of shape `({0})`, *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)
        head_mask (`torch.FloatTensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        inputs_embeds (`torch.FloatTensor` of shape `({0}, 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.
        past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
            Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape
            `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape
            `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`.

            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.
        use_cache (`bool`, *optional*):
            If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see
            `past_key_values`).
        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.
z`The bare BioGPT Model transformer outputting raw hidden-states without any specific head on top.c                   ót  ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Z eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 ddeej                      deej"                     d	eej"                     d
eej"                     deeeej&                           dee   dee   dee   dee   deeef   fd„«       «       Zˆ xZS )ÚBioGptModelrM   c                 óò  •— t         ‰| �  |«       || _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  rt        j                  |j                  «      nd}t        |j                  | j                  | j                  |¬«      | _        t!        |j"                  | j                  «      | _        t'        j(                  t+        |j,                  «      D �cg c]  }t/        |«      ‘Œ c}«      | _        t'        j2                  | j                  «      | _        d| _        |j8                  dk(  | _        | j=                  «        y c c}w )NrB   )r=   Fr�   )r!   r"   rM   Ú	layerdropr—   rI   r‘   rG   Úpad_token_idr<   Úscale_embeddingÚmathÚsqrtr;   Ú
vocab_sizeÚembed_tokensr   Úmax_position_embeddingsÚembed_positionsr   Ú
ModuleListÚrangeÚnum_hidden_layersr�   Úlayersr›   Ú
layer_normÚgradient_checkpointingr“   Ú	_use_sdpaÚ	post_init)r#   rM   r=   rw   r$   s       €r%   r"   zBioGptModel.__init__"  s  ø€ Ü‰Ñ˜Ô ØˆŒØ×)Ñ)ˆŒØ×1Ñ1ˆŒØ×+Ñ+ˆŒØ!×.Ñ.ˆÔØ7=×7MÒ7M”d—i‘i × 2Ñ 2Ô3ÐSVˆä5Ø×Ñ˜tŸ~™~¨t×/?Ñ/?È[ô
ˆÔô  @À×@^Ñ@^Ð`d×`nÑ`nÓoˆÔä—m‘mÌÈv×OgÑOgÓIhÖ$iÀAÔ%7¸Õ%?Ò$iÓjˆŒÜŸ,™, t§~¡~Ó6ˆŒà&+ˆÔ#Ø×4Ñ4¸Ñ>ˆŒà�‰Õùò %js   ÄE4c                 ó   — | j                   S r?   ©rÈ   ©r#   s    r%   Úget_input_embeddingsz BioGptModel.get_input_embeddings8  s   € Ø× Ñ Ð r&   c                 ó   — || _         y r?   rÔ   ©r#   Úvalues     r%   Úset_input_embeddingsz BioGptModel.set_input_embeddings;  s
   € Ø!ˆÕr&   úbatch_size, sequence_length©Ú
checkpointÚoutput_typerº   r@   r'   Ú	head_maskÚinputs_embedsÚpast_key_valuesr¢   rd   Úoutput_hidden_statesÚreturn_dictre   c
           
      ó¢  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|	�|	n| j                   j                  }	|�|�t        d«      ‚|�|}|j                  «       }n-|� |j                  «       d d }|d d …d d …df   }nt        d«      ‚|�|d   d   j                  d   nd}|€| j                  |«      }|€Pt        j                  |j                  d   |j                  d   |z   ft        j                  |j                  ¬«      }n=|j                  d   ||d   z   k7  r%t        d|j                  d   › d	||d   z   › d
�«      ‚| j                  ||«      }| j                  r|s|€t        ||||«      }nt!        ||||«      }||z   }t"        j$                  j'                  || j&                  | j(                  ¬«      }| j*                  r%| j(                  r|rt,        j/                  d«       d}|rdnd }|rdnd }d }|rdnd }t1        | j2                  «      D ]½  \  }}|r||fz  }| j(                  r%t        j4                  g «      }|| j6                  k  rŒ?|�||   nd }| j*                  r5| j(                  r)| j9                  |j:                  |||�||   nd d ||«      }n ||||�||   nd |||¬«      }|d   }|r|||rdnd   fz  }|sŒµ||d   fz  }Œ¿ |r||fz  }| j=                  |«      }|r|nd }|	st?        d„ |||||fD «       «      S tA        |||||¬«      S )NzDYou cannot specify both input_ids and inputs_embeds at the same timerh   z5You have to specify either input_ids or inputs_embedsr   r   r   )ÚdtypeÚdevicez'The provided attention mask has length z, but its length should be z0 (sum of the lengths of current and past inputs)rj   zZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...Fr¾   )r'   rc   rb   rd   r¢   c              3   ó$   K  — | ]  }|�|–— Œ
 y ­wr?   r¾   )Ú.0Úvs     r%   ú	<genexpr>z&BioGptModel.forward.<locals>.<genexpr>Ä  s   è ø€ ò àØ�=ô ñùs   ‚)Úlast_hidden_staterá   r`   Ú
attentionsÚcross_attentions)!rM   rd   râ   r¢   Úuse_return_dictrQ   rn   ro   rÈ   r-   Úonesrƒ   ræ   rÊ   rÑ   r   r   r   rs   rI   rl   rÐ   r‰   rŠ   Ú	enumeraterÎ   ÚrandrÂ   Ú_gradient_checkpointing_funcÚ__call__rÏ   Útupler   )r#   r@   r'   rß   rà   rá   r¢   rd   râ   rã   ÚkwargsÚinputÚinput_shaper(   r1   r`   Úall_hidden_statesÚall_self_attnsÚall_cross_attentionsÚnext_decoder_cacheÚidxÚdecoder_layerÚdropout_probabilityrb   Úlayer_outputsÚ
next_caches                             r%   r0   zBioGptModel.forward>  s  € ð& 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆð Ð  ]Ð%>ÜÐcÓdÐdØÐ"ØˆEØŸ*™*›,‰KØÐ&Ø'×,Ñ,Ó.¨s°Ð3ˆKØ!¢!¢Q¨ (Ñ+‰EäÐTÓUÐUð DSÐC^ °Ñ!3°AÑ!6×!<Ñ!<¸QÒ!?ÐdeÐàÐ Ø ×-Ñ-¨eÓ4ˆMàÐ!Ü"ŸZ™ZØ×$Ñ$ QÑ'¨×)<Ñ)<¸QÑ)?ÐBXÑ)XÐYÜ—j‘jØ$×+Ñ+ô‰Nð
 ×!Ñ! !Ñ$Ð(>ÀÈQÁÑ(OÒOÜØ9¸.×:NÑ:NÈqÑ:QÐ9RÐRmØ)¨K¸©NÑ:Ð;Ð;kðmóð ð ×(Ñ(¨Ð9OÓPˆ	à�>Š>Ñ"3¸	Ð8Iô HØ ¨]Ð<Ró‰Nô ?Ø ¨]Ð<RóˆNð &¨	Ñ1ˆäŸ™×-Ñ-¨m¸t¿|¹|ÐVZ×VcÑVcÐ-Ódˆà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	á"6™B¸DÐÙ0™°dˆØ#ÐÙ#,™R°$Ðä"+¨D¯K©KÓ"8ò %	6ÑˆC�á#Ø! mÐ%5Ñ5Ð!Ø�}Š}Ü&+§j¡j°£nÐ#Ø&¨¯©Ò7Øà5DÐ5P˜_¨SÒ1ÐVZˆNà×*Ò*¨t¯}ª}Ø $× AÑ AØ!×*Ñ*Ø!Ø"Ø&/Ð&;�I˜c’NÀØØ%Øó!‘ñ !.Ø!Ø#1Ø7@Ð7L Y¨s¢^ÐRVØ#1Ø&7Ø'ô!�ð *¨!Ñ,ˆMáØ" }Ñ:K±QÐQRÑ'SÐ&UÑUÐ"â Ø =°Ñ#3Ð"5Ñ5‘ðK%	6ñP  Ø -Ð!1Ñ1ÐàŸ™¨Ó6ˆá+4Ñ'¸$ˆ
áÜñ à'¨Ð5FÈÐXlÐmôó ð ô
 9Ø+Ø&Ø+Ø%Ø1ô
ð 	
r&   )	NNNNNNNNN)r2   r3   r4   r   r"   rÖ   rÚ   r   ÚBIOGPT_INPUTS_DOCSTRINGÚformatr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCr   r-   r7   r©   r   rD   rƒ   r   r0   r8   r9   s   @r%   rÀ   rÀ     s;  ø„ ð
˜|õ ò,!ò"ñ +Ð+B×+IÑ+IÐJgÓ+hÓiÙØ&Ø=Ø$ôð 15Ø6:Ø15Ø59Ø@DØ$(Ø,0Ø/3Ø&*ñK
à˜E×,Ñ,Ñ-ðK
ð ! ×!2Ñ!2Ñ3ðK
ð ˜E×-Ñ-Ñ.ð	K
ð
   × 1Ñ 1Ñ2ðK
ð " %¨¨e¯l©lÑ(;Ñ"<Ñ=ðK
ð ˜D‘>ðK
ð $ D™>ðK
ð ' t™nðK
ð ˜d‘^ðK
ð 
ˆuÐ?Ð?Ñ	@òK
óó jôK
r&   rÀ   zHBioGPT Model with a `language modeling` head on top for CLM fine-tuning.c                   ó¤  ‡ — e Zd ZdgZˆ fd„Zd„ Zd„ Z eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 	 ddeej                      deej"                     d	eej"                     d
eej"                     deeeej&                           deej                      dee   dee   dee   dee   deeef   fd„«       «       Zed„ «       Zˆ xZS )ÚBioGptForCausalLMzoutput_projection.weightc                 óÆ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        | j                  «        y ©NFrO   )
r!   r"   rÀ   r¬   r   rS   r‘   rÇ   Úoutput_projectionrÒ   r¡   s     €r%   r"   zBioGptForCausalLM.__init__Ø  sJ   ø€ Ü‰Ñ˜Ô ä! &Ó)ˆŒÜ!#§¡¨6×+=Ñ+=¸v×?PÑ?PÐW\Ô!]ˆÔð 	�‰Õr&   c                 ó   — | j                   S r?   ©r	  rÕ   s    r%   Úget_output_embeddingsz'BioGptForCausalLM.get_output_embeddingsá  s   € Ø×%Ñ%Ð%r&   c                 ó   — || _         y r?   r  )r#   Únew_embeddingss     r%   Úset_output_embeddingsz'BioGptForCausalLM.set_output_embeddingsä  s
   € Ø!/ˆÕr&   rÛ   rÜ   r@   r'   rß   rà   rá   Úlabelsr¢   rd   râ   rã   re   c                 óŽ  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }d}|�* | j                  ||fd| j                   j
                  i|¤Ž}|
s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  |j                  ¬«      S )a³  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        N)r'   rß   rà   rá   r¢   rd   râ   rã   r   rÇ   r   )ÚlossÚlogitsrá   r`   rì   rí   )rM   rî   r¬   r	  Úloss_functionrÇ   r   rá   r`   rì   rí   )r#   r@   r'   rß   rà   rá   r  r¢   rd   râ   rã   rõ   r¨   Úsequence_outputÚprediction_scoresÚlm_lossÚoutputs                    r%   r0   zBioGptForCausalLM.forwardç  s  € ð4 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—+‘+ØØ)ØØ'Ø+ØØ/Ø!5Ø#ð ó 

ˆð " !™*ˆØ ×2Ñ2°?ÓCÐàˆØÐØ(�d×(Ñ(Ø!Øñð  Ÿ;™;×1Ñ1ðð ñ	ˆGñ Ø'Ð)¨G°A°B¨KÑ7ˆFØ,3Ð,?�W�J Ñ'ÐKÀVÐKä0ØØ$Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
r&   c                 óJ   ‡— d}| D ]  }|t        ˆfd„|D «       «      fz  }Œ |S )Nr¾   c              3   ót   •K  — | ]/  }|j                  d ‰j                  |j                  «      «      –— Œ1 y­w)r   N)Úindex_selectÚtoræ   )rè   Ú
past_stateÚbeam_idxs     €r%   rê   z3BioGptForCausalLM._reorder_cache.<locals>.<genexpr>-  s.   øè ø€ ÒnÐU_�j×-Ñ-¨a°·±¸Z×=NÑ=NÓ1O×PÑnùs   ƒ58)rô   )rá   r  Úreordered_pastÚ
layer_pasts    `  r%   Ú_reorder_cachez BioGptForCausalLM._reorder_cache(  s=   ø€ àˆØ)ò 	ˆJØÜÓnÐcmÔnÓnðñ ‰Nð	ð Ðr&   ©
NNNNNNNNNN)r2   r3   r4   Ú_tied_weights_keysr"   r  r  r   r  r  r   r  r   r  r   r-   r7   r©   r   rD   rƒ   r   r0   Ústaticmethodr!  r8   r9   s   @r%   r  r  Ò  s`  ø„ ð 5Ð5Ðôò&ò0ñ +Ð+B×+IÑ+IÐJgÓ+hÓiÙØ&Ø5Ø$ôð 15Ø6:Ø15Ø59Ø@DØ-1Ø$(Ø,0Ø/3Ø&*ñ9
à˜E×,Ñ,Ñ-ð9
ð ! ×!2Ñ!2Ñ3ð9
ð ˜E×-Ñ-Ñ.ð	9
ð
   × 1Ñ 1Ñ2ð9
ð " %¨¨e¯l©lÑ(;Ñ"<Ñ=ð9
ð ˜×)Ñ)Ñ*ð9
ð ˜D‘>ð9
ð $ D™>ð9
ð ' t™nð9
ð ˜d‘^ð9
ð 
ˆuÐ7Ð7Ñ	8ò9
óó jð9
ðv ñó ôr&   r  z¥
    BioGPT Model with a token classification head on top (a linear layer on top of the hidden-states output) e.g. for
    Named-Entity-Recognition (NER) tasks.
    c                   ó„  ‡ — e Zd Zˆ fd„Z ee«       eeee	¬«      	 	 	 	 	 	 	 	 	 	 	 dde
ej                     de
ej                     de
ej                     de
ej                     de
eeej                           de
ej                     d	e
ej                     d
e
e   de
e   de
e   de
e   deeef   fd„«       «       Zˆ xZS )ÚBioGptForTokenClassificationc                 óz  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        |d«      r|j                  �|j                  }n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y )NÚclassifier_dropout)r!   r"   Ú
num_labelsrÀ   r¬   Úhasattrr(  r—   r   ÚDropoutrI   rS   r‘   Ú
classifierrÒ   )r#   rM   r(  r$   s      €r%   r"   z%BioGptForTokenClassification.__init__:  s�   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä! &Ó)ˆŒÜ�6Ð/Ô0°V×5NÑ5NÐ5ZØ!'×!:Ñ!:Ñà!'×!;Ñ!;ÐÜ—z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒà�‰Õr&   rÜ   r@   Útoken_type_idsr'   rß   rá   rà   r  r¢   rd   râ   rã   re   c                 óÄ  — |�|n| j                   j                  }| j                  |||||||	|
|¬«	      }|d   }| j                  |«      }| j	                  |«      }d}|�Êt        «       }|�Œ|j                  d«      dk(  }|j                  d| j                  «      }t        j                  ||j                  d«      t        j                  |j                  «      j                  |«      «      } |||«      }n2 ||j                  d| j                  «      |j                  d«      «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )á�  
        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).
        N©rá   r'   rß   rà   r¢   rd   râ   rã   r   rh   r   r   )r  r  r`   rì   )rM   rî   r¬   rI   r,  r   r\   r)  r-   ÚwhererX   Úignore_indexr/   r   r`   rì   )r#   r@   r-  r'   rß   rá   rà   r  r¢   rd   râ   rã   Útransformer_outputsr`   r  r  Úloss_fctÚactive_lossÚactive_logitsÚactive_labelsr  s                        r%   r0   z$BioGptForTokenClassification.forwardH  so  € ð4 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà"Ÿk™kØØ+Ø)ØØ'ØØ/Ø!5Ø#ð *ó 

Ðð ,¨AÑ.ˆØŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÐÜ'Ó)ˆHàÐ)Ø,×1Ñ1°"Ó5¸Ñ:�Ø &§¡¨B°·±Ó @�Ü %§¡Ø §¡¨R£´%·,±,¸x×?TÑ?TÓ2U×2]Ñ2]Ð^dÓ2eó!�ñ   ¨}Ó=‘á §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR�áØ�YÐ!4°Q°RÐ!8Ñ8ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä$ØØØ-×;Ñ;Ø*×5Ñ5ô	
ð 	
r&   )NNNNNNNNNNN)r2   r3   r4   r"   r   r  r   r  r   r  r   r-   r7   r©   r   rD   rƒ   r   r0   r8   r9   s   @r%   r&  r&  2  sB  ø„ ôñ +Ð+BÓCÙØ&Ø)Ø$ôð 15Ø59Ø6:Ø15Ø@DØ59Ø-1Ø$(Ø,0Ø/3Ø&*ñ=
à˜E×,Ñ,Ñ-ð=
ð ! ×!1Ñ!1Ñ2ð=
ð ! ×!2Ñ!2Ñ3ð	=
ð
 ˜E×-Ñ-Ñ.ð=
ð " %¨¨e¯l©lÑ(;Ñ"<Ñ=ð=
ð   × 1Ñ 1Ñ2ð=
ð ˜×)Ñ)Ñ*ð=
ð ˜D‘>ð=
ð $ D™>ð=
ð ' t™nð=
ð ˜d‘^ð=
ð 
ˆuÐ+Ð+Ñ	,ò=
óó Dô=
r&   r&  aÛ  
    The BioGpt Model transformer with a sequence classification head on top (linear layer).

    [`BioGptForSequenceClassification`] 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 is required 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).
    c                   óv  ‡ — e Zd Zdefˆ fd„Z ee«       eee	e
¬«      	 	 	 	 	 	 	 	 	 	 ddeej                     deej                     deej                     deeeej                            deej                     d	eej                     d
ee   dee   dee   dee   deee	f   fd„«       «       Zd„ Zd„ Zˆ xZS )ÚBioGptForSequenceClassificationrM   c                 óè   •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  |j                  | j                  d¬«      | _        | j                  «        y r  )
r!   r"   r)  rÀ   r¬   r   rS   r‘   ÚscorerÒ   r¡   s     €r%   r"   z(BioGptForSequenceClassification.__init__ž  sS   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ! &Ó)ˆŒÜ—Y‘Y˜v×1Ñ1°4·?±?ÈÔOˆŒ
ð 	�‰Õr&   rÜ   r@   r'   rß   rá   rà   r  r¢   rd   râ   rã   re   c                 ó  — |
�|
n| j                   j                  }
| j                  ||||||||	|
¬«	      }|d   }| j                  |«      }|�|j                  dd \  }}n|j                  dd \  }}| j                   j
                  €d}n†|�Vt        j                  || j                   j
                  «      j                  d«      dz
  j                  |j                  «      }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=t/        «       } ||j1                  d| j"                  «      |j1                  d«      «      }n,| j                   j                   dk(  rt3        «       } |||«      }|
s|f|dd z   }|�|f|z   S |S t5        |||j6                  |j8                  |j:                  ¬«      S )r/  Nr0  r   r   rh   r   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_classification)r  r  rá   r`   rì   )rM   rî   r¬   r;  ro   rÃ   r-   ÚneÚsumr  ræ   r‰   rŠ   r$   r2   ÚarangeÚproblem_typer)  rå   r,   r6   r	   Úsqueezer   r\   r   r   rá   r`   rì   )r#   r@   r'   rß   rá   rà   r  r¢   rd   râ   rã   r3  r`   r  Ú
batch_sizeÚsequence_lengthÚpooled_logitsr  r4  r  s                       r%   r0   z'BioGptForSequenceClassification.forward§  sÇ  € ð2 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà"Ÿk™kØØ+Ø)ØØ'ØØ/Ø!5Ø#ð *ó 

Ðð ,¨AÑ.ˆØ—‘˜MÓ*ˆàÐ Ø*3¯/©/¸"¸1Ð*=Ñ'ˆJ™à*7×*=Ñ*=¸b¸qÐ*AÑ'ˆJ˜à�;‰;×#Ñ#Ð+Ø ‰OàÐ$Ü#(§8¡8¨I°t·{±{×7OÑ7OÓ#P×#TÑ#TÐUWÓ#XÐ[\Ñ#\×"`Ñ"`Ðag×anÑanÓ"o‘à"$�Ü×#Ñ#Ø—~‘~×.Ñ.Ð/ð 0^ð ^ôð
 œuŸ|™|¨J¸v¿}¹}ÔMÈÐ^Ñ_ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? 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�ÙØ#Ð%Ð(;¸A¸BÐ(?Ñ?ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä/ØØ Ø/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r&   c                 ó.   — | j                   j                  S r?   ©r¬   rÈ   rÕ   s    r%   rÖ   z4BioGptForSequenceClassification.get_input_embeddings  s   € Ø�{‰{×'Ñ'Ð'r&   c                 ó&   — || j                   _        y r?   rI  rØ   s     r%   rÚ   z4BioGptForSequenceClassification.set_input_embeddings  s   € Ø#(ˆ�‰Õ r&   r"  )r2   r3   r4   r   r"   r   r  r   r  r   r  r   r-   r7   r©   r   rD   rƒ   r   r0   rÖ   rÚ   r8   r9   s   @r%   r9  r9  Ž  sI  ø„ ð ˜|õ ñ +Ð+BÓCÙØ&Ø4Ø$ôð 15Ø6:Ø15Ø@DØ59Ø-1Ø$(Ø,0Ø/3Ø&*ñV
à˜E×,Ñ,Ñ-ðV
ð ! ×!2Ñ!2Ñ3ðV
ð ˜E×-Ñ-Ñ.ð	V
ð
 " %¨¨e¯l©lÑ(;Ñ"<Ñ=ðV
ð   × 1Ñ 1Ñ2ðV
ð ˜×)Ñ)Ñ*ðV
ð ˜D‘>ðV
ð $ D™>ðV
ð ' t™nðV
ð ˜d‘^ðV
ð 
ˆuÐ6Ð6Ñ	7òV
óó DðV
òp(ö)r&   r9  )r  r&  r9  rÀ   r«   )7r5   rÅ   Útypingr   r   r   r-   Útorch.utils.checkpointr   Útorch.nnr   r   r	   Úactivationsr   Ú
generationr   Úmodeling_attn_mask_utilsr   r   Úmodeling_outputsr   r   r   r   Úmodeling_utilsr   Úutilsr   r   r   r   Úconfiguration_biogptr   Ú
get_loggerr2   r‰   r  r  r¶   r   r;   ÚModulerF   r…   r’   r�   r«   ÚBIOGPT_START_DOCSTRINGr  rÀ   r  r&  r9  Ú__all__r¾   r&   r%   ú<module>rY     s©  ðñ ã ß )Ñ )ã Û Ý ß AÑ Aå !Ý )ß u÷ó õ .÷ó õ /ð 
ˆ×	Ñ	˜HÓ	%€à(Ð Ø €ô
8 r§|¡|ô 8ô2
= §¡ô 
=ô[B�b—i‘iô [Bô~g1˜/ô g1ðV ØñÐ ôR˜Ÿ™ô Rôj*˜Oô *ð8	Ð ð4Ð ñn ØfØóôn
Ð'ó n
ó	ðn
ñb ØRÐTjóôZÐ-¨ó ZóðZñz ðð óôR
Ð#8ó R
óðR
ñj ðð óôl)Ð&;ó l)óðl)ò^�r&   