Ë
    ÛÓ^j¢Ú  ã                   ó"  — d Z ddlmZ ddlmZ ddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7  e0jp                  e9«      Z: G d„ dejv                  «      Z<	 	 d\dejv                  dejz                  dejz                  dejz                  dejz                  dz  de>dz  de>d e)e.   fd!„Z? G d"„ d#ejv                  «      Z@ G d$„ d%ejv                  «      ZA G d&„ d'ejv                  «      ZB G d(„ d)ejv                  «      ZC G d*„ d+ejv                  «      ZD G d,„ d-ejv                  «      ZE G d.„ d/e«      ZF G d0„ d1ejv                  «      ZG G d2„ d3ejv                  «      ZH G d4„ d5ejv                  «      ZI G d6„ d7ejv                  «      ZJ G d8„ d9ejv                  «      ZK G d:„ d;ejv                  «      ZL G d<„ d=ejv                  «      ZMe/ G d>„ d?e'«      «       ZN e/d@¬A«      e G dB„ dCe-«      «       «       ZO e/dD¬A«       G dE„ dFeN«      «       ZP e/dG¬A«       G dH„ dIeN«      «       ZQ e/dJ¬A«       G dK„ dLeNe«      «       ZRe/ G dM„ dNeN«      «       ZS e/dO¬A«       G dP„ dQeN«      «       ZT e/dR¬A«       G dS„ dTeN«      «       ZUe/ G dU„ dVeN«      «       ZVe/ G dW„ dXeN«      «       ZWe/ G dY„ dZeN«      «       ZXg d[¢ZYy)]zPyTorch BERT model.é    )ÚCallable)Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)	Ú)BaseModelOutputWithPastAndCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚMaskedLMOutputÚMultipleChoiceModelOutputÚNextSentencePredictorOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú
BertConfigc                   óÊ   ‡ — e Zd ZdZˆ fd„Z	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  ded	ej                  fd
„Z
ˆ xZS )ÚBertEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  ¬«      d¬«       y )	N)Úpadding_idx©ÚepsÚposition_ids©r'   éÿÿÿÿF)Ú
persistentÚtoken_type_ids)Údtype)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpandÚzerosr/   ÚsizeÚlong©ÚselfÚconfigÚ	__class__s     €úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/bert/modeling_bert.pyr6   zBertEmbeddings.__init__8   s  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	õ 	
ó    NÚ	input_idsr3   r/   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 óŠ  — |�|j                  «       }n|j                  «       d d }|\  }}|€| j                  d d …|||z   …f   }|€št        | d«      rT| j                  j	                  |j
                  d   d«      }	t        j                  |	d|¬«      }	|	j	                  ||«      }n:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }
||
z   }| j                  |«      }||z   }| j                  |«      }| j                  |«      }|S )Nr1   r3   r   r'   )ÚdimÚindex)r4   Údevice)rJ   r/   Úhasattrr3   rH   ÚshaperF   ÚgatherrI   rK   rY   r;   r?   r=   r@   rD   )rM   rR   r3   r/   rS   rT   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr?   Ú
embeddingsr=   s                rP   ÚforwardzBertEmbeddings.forwardH   sP  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
�JàÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLð
 Ð!Ü�tÐ-Ô.à*.×*=Ñ*=×*DÑ*DÀ\×EWÑEWÐXYÑEZÐ\^Ó*_Ð'Ü*/¯,©,Ð7NÐTUÐ]iÔ*jÐ'Ø!8×!?Ñ!?À
ÈJÓ!W‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ"5Ñ5ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrQ   )NNNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   rF   Ú
LongTensorÚFloatTensorÚintÚTensorrb   Ú__classcell__©rO   s   @rP   r*   r*   5   s‹   ø„ ÙQô
ð$ .2Ø26Ø04Ø26Ø&'ñ(à×#Ñ# dÑ*ð(ð ×(Ñ(¨4Ñ/ð(ð ×&Ñ&¨Ñ-ð	(ð
 ×(Ñ(¨4Ñ/ð(ð !$ð(ð 
�‰÷(rQ   r*   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrD   Úkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr1   ç      à¿é   r	   ©rW   )ÚpÚtrainingr'   )
rJ   rF   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxrD   ry   Ú
contiguous)
rm   rn   ro   rp   rq   rr   rD   rs   Úattn_weightsÚattn_outputs
             rP   Úeager_attention_forwardr�   s   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$rQ   c                   ó–   ‡ — e Zd Zd	ˆ fd„	Z	 	 d
dej
                  dej                  dz  dedz  dee	   de
ej
                     f
d„Zˆ xZS )ÚBertSelfAttentionNc                 ó@  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        | j                  dz  | _
        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                   |j"                  «      | _        |j&                  | _        || _        || _        y ©Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)ru   )r5   r6   r9   Únum_attention_headsrZ   Ú
ValueErrorrN   ri   Úattention_head_sizeÚall_head_sizerr   r   ÚLinearrn   ro   rp   rB   Úattention_probs_dropout_probrD   Ú
is_decoderÚ	is_causalÚ	layer_idx©rM   rN   r�   r�   rO   s       €rP   r6   zBertSelfAttention.__init__�   sP  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð ˆŒà#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà ×+Ñ+ˆŒØ"ˆŒØ"ˆ�rQ   Úhidden_statesrq   Úpast_key_valuesrs   rU   c                 ó   — |j                   d d }g |¢d‘| j                  ‘­} | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      }	|�>|}
t        |t        «      r|j                  }
|
j                  ||	| j                  «      \  }}	t        j                  | j                  j                  t         «      } || |||	|f| j"                  sdn| j$                  j&                  | j(                  dœ|¤Ž\  }} |j*                  g |¢d‘­Ž j-                  «       }||fS )Nr1   r'   rv   ç        ©rD   rr   )r[   rŠ   rn   Úviewr{   ro   rp   Ú
isinstancer   Úself_attention_cacheÚupdater�   r   Úget_interfacerN   Ú_attn_implementationr�   ry   rD   rx   rr   Úreshaper~   )rM   r’   rq   r“   rs   r]   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚcurrent_past_key_valuesÚattention_interfacer€   r   s                 rP   rb   zBertSelfAttention.forward¨   s�  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆð 5�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆØ0�D—H‘H˜]Ó+×0Ñ0°,Ð?×IÑIÈ!ÈQÓOˆ	Ø4�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆàÐ&à&5Ð#Ü˜/Ô+>Ô?Ø*9×*NÑ*NÐ'ð &=×%CÑ%CÀIÈ{Ð\`×\jÑ\jÓ%kÑ"ˆI�{ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,·.±.Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(rQ   ©FN)NN©rc   rd   re   r6   rF   rj   rh   r   r   r!   Útuplerb   rk   rl   s   @rP   rƒ   rƒ   �   sg   ø„ õ#ð6 48Ø(,ñ	')à—|‘|ð')ð ×)Ñ)¨DÑ0ð')ð  ™ð	')ð
 Ð+Ñ,ð')ð 
ˆu�|‰|Ñ	÷')rQ   rƒ   c                   ó¶   ‡ — e Zd Zd
ˆ fd„	Z	 	 	 ddej
                  dej                  dz  dej                  dz  dedz  dee	   de
ej
                     fd	„Zˆ xZS )ÚBertCrossAttentionNc                 ó  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        | j                  dz  | _
        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                   |j"                  «      | _        || _        || _        y r…   )r5   r6   r9   rˆ   rZ   r‰   rN   ri   rŠ   r‹   rr   r   rŒ   rn   ro   rp   rB   r�   rD   r�   r�   r‘   s       €rP   r6   zBertCrossAttention.__init__Ó   sC  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð ˆŒà#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà"ˆŒØ"ˆ�rQ   r’   Úencoder_hidden_statesrq   r“   rs   rU   c                 óf  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }|�%|j
                  j                  | j                  «      nd}	|�]|	r[|j                  j                  | j                     j                  }
|j                  j                  | j                     j                  }nÅg |j                   d d ¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      j                  |«      j	                  dd«      }|�C|j                  j                  |
|| j                  «      \  }
}d|j
                  | j                  <   t        j                   | j"                  j$                  t&        «      } || ||
||f| j(                  sdn| j*                  j,                  | j.                  dœ|¤Ž\  }} |j0                  g |¢d‘­Ž j3                  «       }||fS )Nr1   r'   rv   FTr•   r–   )r[   rŠ   rn   r—   r{   Ú
is_updatedÚgetr�   Úcross_attention_cacheÚlayersÚkeysÚvaluesro   rp   rš   r   r›   rN   rœ   r�   ry   rD   rx   rr   r�   r~   )rM   r’   rª   rq   r“   rs   r]   rž   rŸ   r¬   r    r¡   Úkv_shaper£   r€   r   s                   rP   rb   zBertCrossAttention.forwardê   s  € ð $×)Ñ)¨#¨2Ð.ˆàC˜ÐC bÐC¨$×*BÑ*BÑCˆð —j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆàGVÐGb�_×/Ñ/×3Ñ3°D·N±NÔCÐhmˆ
ØÐ&©:à'×=Ñ=×DÑDÀTÇ^Á^ÑT×YÑYˆIØ)×?Ñ?×FÑFÀtÇ~Á~ÑV×]Ñ]‰KàXÐ.×4Ñ4°S°bÐ9ÐX¸2ÐX¸t×?WÑ?WÑXˆHØŸ™Ð!6Ó7×<Ñ<¸XÓF×PÑPÐQRÐTUÓVˆIØŸ*™*Ð%:Ó;×@Ñ@ÀÓJ×TÑTÐUVÐXYÓZˆKàÐ*à)8×)NÑ)N×)UÑ)UØ˜{¨D¯N©Nó*Ñ&�	˜;ð >B�×*Ñ*¨4¯>©>Ñ:ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,·.±.Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(rQ   r¤   )NNN)rc   rd   re   r6   rF   rj   rh   r   r   r!   r¦   rb   rk   rl   s   @rP   r¨   r¨   Ò   s€   ø„ õ#ð4 ;?Ø37Ø6:ñ1)à—|‘|ð1)ð  %×0Ñ0°4Ñ7ð1)ð ×)Ñ)¨DÑ0ð	1)ð
 -¨tÑ3ð1)ð Ð+Ñ,ð1)ð 
ˆu�|‰|Ñ	÷1)rQ   r¨   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚBertSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr-   )r5   r6   r   rŒ   r9   Údenser@   rA   rB   rC   rD   rL   s     €rP   r6   zBertSelfOutput.__init__  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rQ   r’   Úinput_tensorrU   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S ©N©r·   rD   r@   ©rM   r’   r¸   s      rP   rb   zBertSelfOutput.forward%  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrQ   ©rc   rd   re   r6   rF   rj   rb   rk   rl   s   @rP   r´   r´     ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ rQ   r´   c                   óÖ   ‡ — e Zd Zdˆ fd„	Z	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dee	   d	e
ej
                     fd
„Zˆ xZS )ÚBertAttentionNc                 óŒ   •— t         ‰| �  «        || _        |rt        nt        } ||||¬«      | _        t        |«      | _        y )N©r�   r�   )r5   r6   Úis_cross_attentionr¨   rƒ   rM   r´   Úoutput)rM   rN   r�   r�   rÄ   Úattention_classrO   s         €rP   r6   zBertAttention.__init__-  s=   ø€ Ü‰ÑÔØ"4ˆÔÙ0BÕ,ÔHYˆÙ# F°iÈ9ÔUˆŒ	Ü$ VÓ,ˆ�rQ   r’   rq   rª   Úencoder_attention_maskr“   rs   rU   c                 ó‚   — | j                   s|n|} | j                  |f|||dœ|¤Ž\  }}| j                  ||«      }||fS )N)rª   rq   r“   )rÄ   rM   rÅ   )	rM   r’   rq   rª   rÇ   r“   rs   Úattention_outputr   s	            rP   rb   zBertAttention.forward4  sd   € ð 04×/FÒ/F™ÐLbˆØ)2¨¯©Øð*
à"7Ø)Ø+ñ	*
ð
 ñ*
Ñ&Ð˜,ð  Ÿ;™;Ð'7¸ÓGÐØ Ð-Ð-rQ   )FNF©NNNNr¥   rl   s   @rP   rÁ   rÁ   ,  s—   ø„ õ-ð 48Ø:>Ø;?Ø(,ñ.à—|‘|ð.ð ×)Ñ)¨DÑ0ð.ð  %×0Ñ0°4Ñ7ð	.ð
 !&× 1Ñ 1°DÑ 8ð.ð  ™ð.ð Ð+Ñ,ð.ð 
ˆu�|‰|Ñ	÷.rQ   rÁ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBertIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y rº   )r5   r6   r   rŒ   r9   Úintermediate_sizer·   r˜   Ú
hidden_actÚstrr   Úintermediate_act_fnrL   s     €rP   r6   zBertIntermediate.__init__J  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rQ   r’   rU   c                 óJ   — | j                  |«      }| j                  |«      }|S rº   )r·   rÑ   ©rM   r’   s     rP   rb   zBertIntermediate.forwardR  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrQ   r¾   rl   s   @rP   rÌ   rÌ   I  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ rQ   rÌ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )Ú
BertOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r¶   )r5   r6   r   rŒ   rÎ   r9   r·   r@   rA   rB   rC   rD   rL   s     €rP   r6   zBertOutput.__init__Y  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rQ   r’   r¸   rU   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S rº   r»   r¼   s      rP   rb   zBertOutput.forward_  r½   rQ   r¾   rl   s   @rP   rÕ   rÕ   X  r¿   rQ   rÕ   c                   óÖ   ‡ — e Zd Zdˆ fd„	Z	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dee	   d	ej
                  fd
„Z
d„ Zˆ xZS )Ú	BertLayerNc                 ó„  •— t         ‰| �  «        |j                  | _        d| _        t	        ||j
                  |¬«      | _        |j
                  | _        |j                  | _        | j                  r.| j
                  st        | › d�«      ‚t	        |d|d¬«      | _	        t        |«      | _        t        |«      | _        y )Nr'   rÃ   z> should be used as a decoder model if cross attention is addedFT)r�   r�   rÄ   )r5   r6   Úchunk_size_feed_forwardÚseq_len_dimrÁ   rŽ   Ú	attentionÚadd_cross_attentionr‰   ÚcrossattentionrÌ   ÚintermediaterÕ   rÅ   )rM   rN   r�   rO   s      €rP   r6   zBertLayer.__init__g  s­   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ& v¸×9JÑ9JÐV_Ô`ˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#Ò#Ø—?’?Ü  D 6Ð)gÐ!hÓiÐiÜ"/ØØØ#Ø#'ô	#ˆDÔô -¨VÓ4ˆÔÜ  Ó(ˆ�rQ   r’   rq   rª   rÇ   r“   rs   rU   c                 ó   —  | j                   ||fd|i|¤Ž\  }}|}	| j                  r:|�8t        | d«      st        d| › d�«      ‚ | j                  |d ||fd|i|¤Ž\  }
}|
}	t        | j                  | j                  | j                  |	«      }|S )Nr“   rß   z'If `encoder_hidden_states` are passed, z` has to be instantiated with cross-attention layers by setting `config.add_cross_attention=True`)	rÝ   rŽ   rZ   r‰   rß   r   Úfeed_forward_chunkrÛ   rÜ   )rM   r’   rq   rª   rÇ   r“   rs   Úself_attention_outputÚ_rÉ   Úcross_attention_outputÚlayer_outputs               rP   rb   zBertLayer.forwardz  så   € ð $2 4§>¡>ØØñ$
ð ,ð$
ð ñ	$
Ñ Ð˜qð 1Ðà�?Š?Ð4Ð@Ü˜4Ð!1Ô2Ü Ø=¸d¸Vð DDð Dóð ð
 )<¨×(;Ñ(;Ø%ØØ%Ø&ñ	)ð
 !0ð)ð ñ)Ñ%Ð" Að  6Ðä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð ÐrQ   c                 óL   — | j                  |«      }| j                  ||«      }|S rº   )rà   rÅ   )rM   rÉ   Úintermediate_outputræ   s       rP   râ   zBertLayer.feed_forward_chunk¡  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓIˆØÐrQ   rº   rÊ   )rc   rd   re   r6   rF   rj   rh   r   r   r!   rb   râ   rk   rl   s   @rP   rÙ   rÙ   f  s˜   ø„ õ)ð, 48Ø:>Ø;?Ø(,ñ%à—|‘|ð%ð ×)Ñ)¨DÑ0ð%ð  %×0Ñ0°4Ñ7ð	%ð
 !&× 1Ñ 1°DÑ 8ð%ð  ™ð%ð Ð+Ñ,ð%ð 
�‰ó%öNrQ   rÙ   c                   óæ   ‡ — e Zd Zˆ fd„Z	 	 	 	 	 ddej
                  dej                  dz  dej                  dz  dej                  dz  dedz  dedz  d	e	e
   d
eej
                     ez  fd„Zˆ xZS )ÚBertEncoderc           	      óÆ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        y c c}w )N)r�   )	r5   r6   rN   r   Ú
ModuleListÚrangeÚnum_hidden_layersrÙ   Úlayer)rM   rN   ÚirO   s      €rP   r6   zBertEncoder.__init__¨  sF   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÌEÐRX×RjÑRjÓLkÖ#lÀq¤I¨fÀÖ$BÒ#lÓmˆ�
ùÒ#ls   ½ANr’   rq   rª   rÇ   r“   Ú	use_cachers   rU   c                 ó„   — t        | j                  «      D ]  \  }}	 |	|||f||dœ|¤Ž}Œ t        ||r|¬«      S d ¬«      S )N)rÇ   r“   )Úlast_hidden_stater“   )Ú	enumeraterï   r   )
rM   r’   rq   rª   rÇ   r“   rñ   rs   rð   Úlayer_modules
             rP   rb   zBertEncoder.forward­  sn   € ô  )¨¯©Ó4ò 	‰OˆAˆ|Ù(ØØØ%ðð (>Ø /ñð ñ‰Mð	ô 9Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
rQ   )NNNNN)rc   rd   re   r6   rF   rj   rh   r   Úboolr   r!   r¦   r   rb   rk   rl   s   @rP   rê   rê   §  s¯   ø„ ônð 48Ø:>Ø;?Ø(,Ø!%ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð  %×0Ñ0°4Ñ7ð	
ð
 !&× 1Ñ 1°DÑ 8ð
ð  ™ð
ð ˜$‘;ð
ð Ð+Ñ,ð
ð 
ˆu�|‰|Ñ	ÐHÑ	H÷
rQ   rê   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú
BertPoolerc                 ó²   •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  «       | _        y rº   )r5   r6   r   rŒ   r9   r·   ÚTanhÚ
activationrL   s     €rP   r6   zBertPooler.__init__È  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�rQ   r’   rU   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )r·   rû   )rM   r’   Úfirst_token_tensorÚpooled_outputs       rP   rb   zBertPooler.forwardÍ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrQ   r¾   rl   s   @rP   rø   rø   Ç  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ rQ   rø   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBertPredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y r¶   )r5   r6   r   rŒ   r9   r·   r˜   rÏ   rÐ   r   Útransform_act_fnr@   rA   rL   s     €rP   r6   z$BertPredictionHeadTransform.__init__×  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�rQ   r’   rU   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rº   )r·   r  r@   rÓ   s     rP   rb   z#BertPredictionHeadTransform.forwardà  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrQ   r¾   rl   s   @rP   r   r   Ö  s$   ø„ ôUð U§\¡\ð °e·l±l÷ rQ   r   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBertLMPredictionHeadc                 ó  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  d¬«      | _        t	        j                  t        j                  |j                  «      «      | _        y )NT)Úbias)r5   r6   r   Ú	transformr   rŒ   r9   r8   ÚdecoderÚ	ParameterrF   rI   r  rL   s     €rP   r6   zBertLMPredictionHead.__init__è  s[   ø€ Ü‰ÑÔÜ4°VÓ<ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈTÔRˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆ�	rQ   c                 óJ   — | j                  |«      }| j                  |«      }|S rº   )r  r	  rÓ   s     rP   rb   zBertLMPredictionHead.forwardñ  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrQ   ©rc   rd   re   r6   rb   rk   rl   s   @rP   r  r  ç  s   ø„ ôAörQ   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBertOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y rº   )r5   r6   r  ÚpredictionsrL   s     €rP   r6   zBertOnlyMLMHead.__init__ø  s   ø€ Ü‰ÑÔÜ/°Ó7ˆÕrQ   Úsequence_outputrU   c                 ó(   — | j                  |«      }|S rº   )r  )rM   r  Úprediction_scoress      rP   rb   zBertOnlyMLMHead.forwardü  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rQ   r¾   rl   s   @rP   r  r  ÷  s#   ø„ ô8ð! u§|¡|ð !¸¿¹÷ !rQ   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBertOnlyNSPHeadc                 ól   •— t         ‰| �  «        t        j                  |j                  d«      | _        y ©Nrv   )r5   r6   r   rŒ   r9   Úseq_relationshiprL   s     €rP   r6   zBertOnlyNSPHead.__init__  s'   ø€ Ü‰ÑÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕrQ   c                 ó(   — | j                  |«      }|S rº   )r  )rM   rþ   Úseq_relationship_scores      rP   rb   zBertOnlyNSPHead.forward  s   € Ø!%×!6Ñ!6°}Ó!EÐØ%Ð%rQ   r  rl   s   @rP   r  r    s   ø„ ôAö&rQ   r  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚBertPreTrainingHeadsc                 óŒ   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  d«      | _        y r  )r5   r6   r  r  r   rŒ   r9   r  rL   s     €rP   r6   zBertPreTrainingHeads.__init__  s4   ø€ Ü‰ÑÔÜ/°Ó7ˆÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕrQ   c                 óN   — | j                  |«      }| j                  |«      }||fS rº   )r  r  )rM   r  rþ   r  r  s        rP   rb   zBertPreTrainingHeads.forward  s0   € Ø ×,Ñ,¨_Ó=ÐØ!%×!6Ñ!6°}Ó!EÐØ Ð"8Ð8Ð8rQ   r  rl   s   @rP   r  r    s   ø„ ôAö
9rQ   r  c                   ón   ‡ — e Zd ZeZdZdZdZdZdZ	dZ
eeedœZ ej                   «       ˆ fd„«       Zˆ xZS )ÚBertPreTrainedModelÚbertT)r’   Ú
attentionsÚcross_attentionsc                 ó–  •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       yt        |t        «      ryt	        j                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       t	        j
                  |j                  «       yy)zInitialize the weightsr1   r0   N)r5   Ú_init_weightsr˜   r  ÚinitÚzeros_r  r*   Úcopy_r/   rF   rG   r[   rH   r3   )rM   rm   rO   s     €rP   r%  z!BertPreTrainedModel._init_weights&  s‰   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ2Ô3Ü�K‰K˜Ÿ™Õ$Ü˜¤Ô/Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.ð 0rQ   )rc   rd   re   r(   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendrÙ   rƒ   r¨   Ú_can_record_outputsrF   Úno_gradr%  rk   rl   s   @rP   r   r     sX   ø„ à€LØÐØ&*Ð#ØÐØ€NØÐØ"&Ðà"Ø'Ø.ñÐð €U‡]�]ƒ_ó/ó ô/rQ   r   z0
    Output type of [`BertForPreTraining`].
    )Úcustom_introc                   óæ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   y)ÚBertForPreTrainingOutputa–  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the masked language modeling loss and the next sequence prediction
        (classification) loss.
    prediction_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    seq_relationship_logits (`torch.FloatTensor` of shape `(batch_size, 2)`):
        Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
        before SoftMax).
    NÚlossÚprediction_logitsÚseq_relationship_logitsr’   r"  )rc   rd   re   rf   r5  rF   rh   Ú__annotations__r6  r7  r’   r¦   r"  © rQ   rP   r4  r4  1  s~   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø8<Ð˜U×.Ñ.°Ñ5Ó<Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6rQ   r4  a
  
    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
    cross-attention is added between the self-attention layers, following the architecture described in [Attention is
    all you need](https://huggingface.co/papers/1706.03762) by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
    Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin.

    To behave as an decoder the model needs to be initialized with the `is_decoder` argument of the configuration set
    to `True`. To be used in a Seq2Seq model, the model needs to initialized with both `is_decoder` argument and
    `add_cross_attention` set to `True`; an `encoder_hidden_states` is then expected as an input to the forward pass.
    c                   óˆ  ‡ — e Zd ZddgZdˆ fd„	Zd„ Zd„ Zeee		 	 	 	 	 	 	 	 	 dde
j                  dz  de
j                  dz  d	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  dedz  dee   dee
j                     ez  fd„«       «       «       Zd„ Zˆ xZS )Ú	BertModelr*   rÙ   c                 óÈ   •— t         ‰| �  |«       || _        d| _        t	        |«      | _        t        |«      | _        |rt        |«      nd| _	        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        FN)r5   r6   rN   Úgradient_checkpointingr*   ra   rê   Úencoderrø   ÚpoolerÚ	post_init)rM   rN   Úadd_pooling_layerrO   s      €rP   r6   zBertModel.__init__Y  sU   ø€ ô
 	‰Ñ˜Ô ØˆŒØ&+ˆÔ#ä(¨Ó0ˆŒÜ" 6Ó*ˆŒá,=”j Ô(À4ˆŒð 	�‰ÕrQ   c                 ó.   — | j                   j                  S rº   ©ra   r;   ©rM   s    rP   Úget_input_embeddingszBertModel.get_input_embeddingsj  s   € Ø�‰×.Ñ.Ð.rQ   c                 ó&   — || j                   _        y rº   rC  )rM   rp   s     rP   Úset_input_embeddingszBertModel.set_input_embeddingsm  s   € Ø*/ˆ�‰Õ'rQ   NrR   rq   r3   r/   rS   rª   rÇ   r“   rñ   rs   rU   c
           
      óœ  — |d u |d uz  rt        d«      ‚| j                  j                  r|	�|	n| j                  j                  }	nd}	|	rd|€b|€| j                  j                  r4t        t        | j                  ¬«      t        | j                  ¬«      «      nt        | j                  ¬«      }|�|j                  «       nd}| j                  |||||¬«      }| j                  |||||¬«      \  }} | j                  |f|||||	|dœ|
¤Ž}|j                  }| j                  �| j                  |«      nd }t        |||j                  ¬«      S )	Nz:You must specify exactly one of input_ids or inputs_embedsF)rN   r   )rR   r/   r3   rS   rT   )rq   rÇ   Úembedding_outputrª   r“   )rq   rª   rÇ   r“   rñ   r/   )ró   Úpooler_outputr“   )r‰   rN   rŽ   rñ   Úis_encoder_decoderr   r   Úget_seq_lengthra   Ú_create_attention_masksr>  ró   r?  r   r“   )rM   rR   rq   r3   r/   rS   rª   rÇ   r“   rñ   rs   rT   rI  Úencoder_outputsr  rþ   s                   rP   rb   zBertModel.forwardp  s|  € ð  ˜Ð -°tÐ";Ò<ÜÐYÓZÐZà�;‰;×!Ò!Ø%.Ð%:™	ÀÇÁ×@UÑ@U‰IàˆIá˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð FUÐE` ×!?Ñ!?Ô!AÐfgÐàŸ?™?ØØ%Ø)Ø'Ø#9ð +ó 
Ðð 26×1MÑ1MØ)Ø#9Ø-Ø"7Ø+ð 2Nó 2
Ñ.ˆÐ.ð '˜$Ÿ,™,Øð	
à)Ø"7Ø#9Ø+ØØ%ñ	
ð ñ	
ˆð *×;Ñ;ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä;Ø-Ø'Ø+×;Ñ;ô
ð 	
rQ   c                 óÐ   — | j                   j                  rt        | j                   |||¬«      }nt        | j                   ||¬«      }|�t        | j                   |||¬«      }||fS )N)rN   rS   rq   r“   )rN   rS   rq   )rN   rS   rq   rª   )rN   rŽ   r   r   )rM   rq   rÇ   rI  rª   r“   s         rP   rM  z!BertModel._create_attention_masks´  su   € ð �;‰;×!Ò!Ü/Ø—{‘{Ø.Ø-Ø /ô	‰Nô 7Ø—{‘{Ø.Ø-ôˆNð "Ð-Ü%>Ø—{‘{Ø.Ø5Ø&;ô	&Ð"ð Ð5Ð5Ð5rQ   )T)	NNNNNNNNN)rc   rd   re   Ú_no_split_modulesr6   rE  rG  r%   r&   r"   rF   rj   r   rö   r   r!   r¦   r   rb   rM  rk   rl   s   @rP   r;  r;  J  s.  ø„ ð *¨;Ð7Ðõò"/ò0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø(,Ø!%ñ?
à—<‘< $Ñ&ð?
ð Ÿ™ tÑ+ð?
ð Ÿ™ tÑ+ð	?
ð
 —l‘l TÑ)ð?
ð —|‘| dÑ*ð?
ð  %Ÿ|™|¨dÑ2ð?
ð !&§¡¨tÑ 3ð?
ð  ™ð?
ð ˜$‘;ð?
ð Ð+Ñ,ð?
ð 
ˆu�|‰|Ñ	ÐKÑ	Kò?
ó ó ó  ð?
öB6rQ   r;  z¨
    Bert Model with two heads on top as done during the pretraining: a `masked language modeling` head and a `next
    sentence prediction (classification)` head.
    c                   ó`  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 dde	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dee   dee	j                     ez  fd„«       «       Zˆ xZS )ÚBertForPreTrainingú&bert.embeddings.word_embeddings.weightúcls.predictions.bias©zcls.predictions.decoder.weightzcls.predictions.decoder.biasc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rº   )r5   r6   r;  r!  r  Úclsr@  rL   s     €rP   r6   zBertForPreTraining.__init__á  s4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü'¨Ó/ˆŒð 	�‰ÕrQ   c                 óB   — | j                   j                  j                  S rº   ©rW  r  r	  rD  s    rP   Úget_output_embeddingsz(BertForPreTraining.get_output_embeddingsê  ó   € Ø�x‰x×#Ñ#×+Ñ+Ð+rQ   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y rº   ©rW  r  r	  r  ©rM   Únew_embeddingss     rP   Úset_output_embeddingsz(BertForPreTraining.set_output_embeddingsí  ó,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!rQ   NrR   rq   r3   r/   rS   ÚlabelsÚnext_sentence_labelrs   rU   c           	      ó¨  —  | j                   |f||||ddœ|¤Ž}	|	dd \  }
}| j                  |
|«      \  }}d}|�u|�st        «       } ||j                  d| j                  j
                  «      |j                  d«      «      } ||j                  dd«      |j                  d«      «      }||z   }t        ||||	j                  |	j                  ¬«      S )am  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (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]`
        next_sentence_label (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence
            pair (see `input_ids` docstring) Indices should be in `[0, 1]`:

            - 0 indicates sequence B is a continuation of sequence A,
            - 1 indicates sequence B is a random sequence.

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
        >>> model = BertForPreTraining.from_pretrained("google-bert/bert-base-uncased")

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

        >>> prediction_logits = outputs.prediction_logits
        >>> seq_relationship_logits = outputs.seq_relationship_logits
        ```
        T©rq   r3   r/   rS   Úreturn_dictNrv   r1   )r5  r6  r7  r’   r"  )	r!  rW  r   r—   rN   r8   r4  r’   r"  )rM   rR   rq   r3   r/   rS   rb  rc  rs   Úoutputsr  rþ   r  r  Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_losss                     rP   rb   zBertForPreTraining.forwardñ  s  € ðR �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð *1°°!¨Ñ&ˆ˜Ø48·H±H¸_ÈmÓ4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNÙ!)Ð*@×*EÑ*EÀbÈ!Ó*LÐNa×NfÑNfÐgiÓNjÓ!kÐØ'Ð*<Ñ<ˆJä'ØØ/Ø$:Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rQ   ©NNNNNNN)rc   rd   re   Ú_tied_weights_keysr6   rZ  r`  r$   r"   rF   rj   r   r!   r¦   r4  rb   rk   rl   s   @rP   rR  rR  Õ  s  ø„ ð +SØ(>ñÐô
ò,ò8ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*Ø37ñA
à—<‘< $Ñ&ðA
ð Ÿ™ tÑ+ðA
ð Ÿ™ tÑ+ð	A
ð
 —l‘l TÑ)ðA
ð —|‘| dÑ*ðA
ð —‘˜tÑ#ðA
ð #Ÿ\™\¨DÑ0ðA
ð Ð+Ñ,ðA
ð 
ˆu�|‰|Ñ	Ð7Ñ	7òA
ó ó ôA
rQ   rR  zP
    Bert Model with a `language modeling` head on top for CLM fine-tuning.
    c                   ó¸  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 	 	 dde	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dedz  dedz  dee	j                  z  dee   dee	j                     ez  fd„«       «       Zˆ xZS )ÚBertLMHeadModelrS  rT  rU  c                 óÊ   •— t         ‰| �  |«       |j                  st        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NzLIf you want to use `BertLMHeadModel` as a standalone, add `is_decoder=True.`F©rA  ©
r5   r6   rŽ   ÚloggerÚwarningr;  r!  r  rW  r@  rL   s     €rP   r6   zBertLMHeadModel.__init__B  sL   ø€ Ü‰Ñ˜Ô à× Ò Ü�N‰NÐiÔjä˜f¸Ô>ˆŒ	Ü" 6Ó*ˆŒð 	�‰ÕrQ   c                 óB   — | j                   j                  j                  S rº   rY  rD  s    rP   rZ  z%BertLMHeadModel.get_output_embeddingsN  r[  rQ   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y rº   r]  r^  s     rP   r`  z%BertLMHeadModel.set_output_embeddingsQ  ra  rQ   NrR   rq   r3   r/   rS   rª   rÇ   rb  r“   rñ   Úlogits_to_keeprs   rU   c                 óž  — |�d}
 | j                   |f|||||||	|
ddœ	|¤Ž}|j                  }t        |t        «      rt	        | d«      n|}| j                  |dd…|dd…f   «      }d}|�* | j                  d||| j                  j                  dœ|¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )a¿  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in
            `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are
            ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`
        NFT)	rq   r3   r/   rS   rª   rÇ   r“   rñ   rf  )Úlogitsrb  r8   )r5  ry  r“   r’   r"  r#  r9  )r!  ró   r˜   ri   ÚslicerW  Úloss_functionrN   r8   r   r“   r’   r"  r#  )rM   rR   rq   r3   r/   rS   rª   rÇ   rb  r“   rñ   rw  rs   rg  r’   Úslice_indicesry  r5  s                     rP   rb   zBertLMHeadModel.forwardU  sü   € ð. ÐØˆIà@IÀÇ	Á	ØðA
à)Ø)Ø%Ø'Ø"7Ø#9Ø+ØØñA
ð ñA
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜-ª¨=º!Ð(;Ñ<Ó=ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
rQ   )NNNNNNNNNNr   )rc   rd   re   rm  r6   rZ  r`  r$   r"   rF   rj   r   rö   ri   r   r!   r¦   r   rb   rk   rl   s   @rP   ro  ro  7  sP  ø„ ð +SØ(>ñÐô

ò,ò8ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø&*Ø(,Ø!%Ø-.ñ6
à—<‘< $Ñ&ð6
ð Ÿ™ tÑ+ð6
ð Ÿ™ tÑ+ð	6
ð
 —l‘l TÑ)ð6
ð —|‘| dÑ*ð6
ð  %Ÿ|™|¨dÑ2ð6
ð !&§¡¨tÑ 3ð6
ð —‘˜tÑ#ð6
ð  ™ð6
ð ˜$‘;ð6
ð ˜eŸl™lÑ*ð6
ð Ð+Ñ,ð6
ð 
ˆu�|‰|Ñ	Ð@Ñ	@ò6
ó ó ô6
rQ   ro  c                   ó€  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 dde	j                  dz  d	e	j                  dz  d
e	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dee   dee	j                     ez  fd„«       «       Zˆ xZS )ÚBertForMaskedLMrS  rT  rU  c                 óÊ   •— t         ‰| �  |«       |j                  rt        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NzkIf you want to use `BertForMaskedLM` make sure `config.is_decoder=False` for bi-directional self-attention.Frq  rr  rL   s     €rP   r6   zBertForMaskedLM.__init__—  sR   ø€ Ü‰Ñ˜Ô à×ÒÜ�N‰Nð1ôô
 ˜f¸Ô>ˆŒ	Ü" 6Ó*ˆŒð 	�‰ÕrQ   c                 óB   — | j                   j                  j                  S rº   rY  rD  s    rP   rZ  z%BertForMaskedLM.get_output_embeddings¦  r[  rQ   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y rº   r]  r^  s     rP   r`  z%BertForMaskedLM.set_output_embeddings©  ra  rQ   NrR   rq   r3   r/   rS   rª   rÇ   rb  rs   rU   c	                 ó>  —  | j                   |f||||||ddœ|	¤Ž}
|
d   }| j                  |«      }d}|�Ft        «       } ||j                  d| j                  j
                  «      |j                  d«      «      }t        |||
j                  |
j                  ¬«      S )a¢  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (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]`
        T)rq   r3   r/   rS   rª   rÇ   rf  r   Nr1   ©r5  ry  r’   r"  )	r!  rW  r   r—   rN   r8   r   r’   r"  )rM   rR   rq   r3   r/   rS   rª   rÇ   rb  rs   rg  r  r  rj  ri  s                  rP   rb   zBertForMaskedLM.forward­  s¾   € ð( �$—)‘)Øð

à)Ø)Ø%Ø'Ø"7Ø#9Øñ

ð ñ

ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rQ   )NNNNNNNN)rc   rd   re   rm  r6   rZ  r`  r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   r~  r~  �  s  ø„ ð +SØ(>ñÐô
ò,ò8ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø&*ñ+
à—<‘< $Ñ&ð+
ð Ÿ™ tÑ+ð+
ð Ÿ™ tÑ+ð	+
ð
 —l‘l TÑ)ð+
ð —|‘| dÑ*ð+
ð  %Ÿ|™|¨dÑ2ð+
ð !&§¡¨tÑ 3ð+
ð —‘˜tÑ#ð+
ð Ð+Ñ,ð+
ð 
ˆu�|‰|Ñ	˜~Ñ	-ò+
ó ó ô+
rQ   r~  zT
    Bert Model with a `next sentence prediction (classification)` head on top.
    c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )ÚBertForNextSentencePredictionc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y rº   )r5   r6   r;  r!  r  rW  r@  rL   s     €rP   r6   z&BertForNextSentencePrediction.__init__ã  s4   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	Ü" 6Ó*ˆŒð 	�‰ÕrQ   NrR   rq   r3   r/   rS   rb  rs   rU   c           	      ó  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }
d}|�2t        «       } ||
j                  dd«      |j                  d«      «      }t	        ||
|j
                  |j                  ¬«      S )aº  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
            (see `input_ids` docstring). Indices should be in `[0, 1]`:

            - 0 indicates sequence B is a continuation of sequence A,
            - 1 indicates sequence B is a random sequence.

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
        >>> model = BertForNextSentencePrediction.from_pretrained("google-bert/bert-base-uncased")

        >>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
        >>> next_sentence = "The sky is blue due to the shorter wavelength of blue light."
        >>> encoding = tokenizer(prompt, next_sentence, return_tensors="pt")

        >>> outputs = model(**encoding, labels=torch.LongTensor([1]))
        >>> logits = outputs.logits
        >>> assert logits[0, 0] < logits[0, 1]  # next sentence was random
        ```
        Tre  r'   Nr1   rv   rƒ  )r!  rW  r   r—   r   r’   r"  )rM   rR   rq   r3   r/   rS   rb  rs   rg  rþ   Úseq_relationship_scoresrk  ri  s                rP   rb   z%BertForNextSentencePrediction.forwardì  s­   € ðN �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆà"&§(¡(¨=Ó"9Ðà!ÐØÐÜ'Ó)ˆHÙ!)Ð*A×*FÑ*FÀrÈ1Ó*MÈvÏ{É{Ð[]ËÓ!_Ðä*Ø#Ø*Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rQ   ©NNNNNN)rc   rd   re   r6   r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   r…  r…  Ý  sÑ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ=
à—<‘< $Ñ&ð=
ð Ÿ™ tÑ+ð=
ð Ÿ™ tÑ+ð	=
ð
 —l‘l TÑ)ð=
ð —|‘| dÑ*ð=
ð —‘˜tÑ#ð=
ð Ð+Ñ,ð=
ð 
ˆu�|‰|Ñ	Ð:Ñ	:ò=
ó ó ô=
rQ   r…  zœ
    Bert Model transformer with a sequence classification/regression head on top (a linear layer on top of the pooled
    output) e.g. for GLUE tasks.
    c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )ÚBertForSequenceClassificationc                 ón  •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        |j                  �|j                  n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y rº   )r5   r6   Ú
num_labelsrN   r;  r!  Úclassifier_dropoutrC   r   rB   rD   rŒ   r9   Ú
classifierr@  ©rM   rN   rŽ  rO   s      €rP   r6   z&BertForSequenceClassification.__init__5  s�   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒä˜fÓ%ˆŒ	à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrQ   NrR   rq   r3   r/   rS   rb  rs   rU   c           	      óà  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
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        «       } ||
j                  d| j
                  «      |j                  d«      «      }n,| j                  j                  dk(  rt        «       } ||
|«      }t        ||
|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).
        Tre  r'   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr1   rƒ  )r!  rD   r�  rN   Úproblem_typer�  r4   rF   rK   ri   r   Úsqueezer   r—   r   r   r’   r"  )rM   rR   rq   r3   r/   rS   rb  rs   rg  rþ   ry  r5  ri  s                rP   rb   z%BertForSequenceClassification.forwardD  s©  € ð$ �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? 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Ò'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rQ   r‰  )rc   rd   re   r6   r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   r‹  r‹  .  sÑ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ;
à—<‘< $Ñ&ð;
ð Ÿ™ tÑ+ð;
ð Ÿ™ tÑ+ð	;
ð
 —l‘l TÑ)ð;
ð —|‘| dÑ*ð;
ð —‘˜tÑ#ð;
ð Ð+Ñ,ð;
ð 
ˆu�|‰|Ñ	Ð7Ñ	7ò;
ó ó ô;
rQ   r‹  c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )ÚBertForMultipleChoicec                 ó*  •— t         ‰| �  |«       t        |«      | _        |j                  �|j                  n|j
                  }t        j                  |«      | _        t        j                  |j                  d«      | _        | j                  «        y )Nr'   )r5   r6   r;  r!  rŽ  rC   r   rB   rD   rŒ   r9   r�  r@  r�  s      €rP   r6   zBertForMultipleChoice.__init__†  su   ø€ Ü‰Ñ˜Ô ä˜fÓ%ˆŒ	à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰ÕrQ   NrR   rq   r3   r/   rS   rb  rs   rU   c           	      óì  — |�|j                   d   n|j                   d   }|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�1|j                  d|j                  d«      |j                  d«      «      nd} | j                  |f||||ddœ|¤Ž}	|	d   }
| j	                  |
«      }
| j                  |
«      }|j                  d|«      }d}|�t        «       } |||«      }t        |||	j                  |	j                  ¬«      S )a[  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
            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)
        token_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.max_position_embeddings - 1]`.

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, 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.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
            num_choices-1]` where `num_choices` is the size of the second dimension of the input tensors. (See
            `input_ids` above)
        Nr'   r1   éþÿÿÿTre  rƒ  )
r[   r—   rJ   r!  rD   r�  r   r   r’   r"  )rM   rR   rq   r3   r/   rS   rb  rs   Únum_choicesrg  rþ   ry  Úreshaped_logitsr5  ri  s                  rP   rb   zBertForMultipleChoice.forward“  sž  € ðT -6Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rQ   r‰  )rc   rd   re   r6   r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   r˜  r˜  „  sÛ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñN
à—<‘< $Ñ&ðN
ð Ÿ™ tÑ+ðN
ð Ÿ™ tÑ+ð	N
ð
 —l‘l TÑ)ðN
ð —|‘| dÑ*ðN
ð —‘˜tÑ#ðN
ð Ð+Ñ,ðN
ð 
ˆu�|‰|Ñ	Ð8Ñ	8òN
ó ó ôN
rQ   r˜  c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )ÚBertForTokenClassificationc                 ód  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y ©NFrq  )r5   r6   r�  r;  r!  rŽ  rC   r   rB   rD   rŒ   r9   r�  r@  r�  s      €rP   r6   z#BertForTokenClassification.__init__è  sŠ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜f¸Ô>ˆŒ	à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrQ   NrR   rq   r3   r/   rS   rb  rs   rU   c           	      óH  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
d}|�<t        «       } ||
j	                  d| j
                  «      |j	                  d«      «      }t        ||
|j                  |j                  ¬«      S )zÛ
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        Tre  r   Nr1   rƒ  )	r!  rD   r�  r   r—   r�  r   r’   r"  )rM   rR   rq   r3   r/   rS   rb  rs   rg  r  ry  r5  ri  s                rP   rb   z"BertForTokenClassification.forwardö  s·   € ð  �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rQ   r‰  )rc   rd   re   r6   r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   rŸ  rŸ  æ  sÑ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ'
à—<‘< $Ñ&ð'
ð Ÿ™ tÑ+ð'
ð Ÿ™ tÑ+ð	'
ð
 —l‘l TÑ)ð'
ð —|‘| dÑ*ð'
ð —‘˜tÑ#ð'
ð Ð+Ñ,ð'
ð 
ˆu�|‰|Ñ	Ð4Ñ	4ò'
ó ó ô'
rQ   rŸ  c                   óJ  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ee	   de
ej                     ez  fd„«       «       Zˆ xZS )ÚBertForQuestionAnsweringc                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y r¡  )
r5   r6   r�  r;  r!  r   rŒ   r9   Ú
qa_outputsr@  rL   s     €rP   r6   z!BertForQuestionAnswering.__init__$  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä˜f¸Ô>ˆŒ	ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrQ   NrR   rq   r3   r/   rS   Ústart_positionsÚend_positionsrs   rU   c           	      óÆ  —  | j                   |f||||ddœ|¤Ž}	|	d   }
| j                  |
«      }|j                  dd¬«      \  }}|j                  d«      j	                  «       }|j                  d«      j	                  «       }d }|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   dz  }t        ||||	j                  |	j                  ¬	«      S )
NTre  r   r'   r1   rw   )Úignore_indexrv   )r5  Ústart_logitsÚ
end_logitsr’   r"  )r!  r¦  Úsplitr–  r~   ÚlenrJ   Úclampr   r   r’   r"  )rM   rR   rq   r3   r/   rS   r§  r¨  rs   rg  r  ry  r«  r¬  rh  Úignored_indexri  Ú
start_lossÚend_losss                      rP   rb   z BertForQuestionAnswering.forward.  s€  € ð �$—)‘)Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rQ   rl  )rc   rd   re   r6   r$   r"   rF   rj   r   r!   r¦   r   rb   rk   rl   s   @rP   r¤  r¤  "  sç   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø/3Ø-1ñ3
à—<‘< $Ñ&ð3
ð Ÿ™ tÑ+ð3
ð Ÿ™ tÑ+ð	3
ð
 —l‘l TÑ)ð3
ð —|‘| dÑ*ð3
ð Ÿ™¨Ñ,ð3
ð —|‘| dÑ*ð3
ð Ð+Ñ,ð3
ð 
ˆu�|‰|Ñ	Ð;Ñ	;ò3
ó ó ô3
rQ   r¤  )r~  r˜  r…  rR  r¤  r‹  rŸ  rÙ   ro  r;  r   )Nr•   )Zrf   Úcollections.abcr   Údataclassesr   rF   r   Útorch.nnr   r   r   Ú r
   r&  Úactivationsr   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr    r!   r"   r#   Úutils.genericr$   r%   Úutils.output_capturingr&   Úconfiguration_bertr(   Ú
get_loggerrc   rs  ÚModuler*   rj   Úfloatr�   rƒ   r¨   r´   rÁ   rÌ   rÕ   rÙ   rê   rø   r   r  r  r  r  r   r4  r;  rR  ro  r~  r…  r‹  r˜  rŸ  r¤  Ú__all__r9  rQ   rP   ú<module>rÈ     sƒ  ðñ å $Ý !ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß JÝ 9÷
÷ 
õ 
÷ GÝ &Ý 6ß MÓ Mß IÝ 5Ý *ð 
ˆ×	Ñ	˜HÓ	%€ô;�R—Y‘Yô ;ðH !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô8@)˜Ÿ	™	ô @)ôFI)˜Ÿ™ô I)ôX�R—Y‘Yô ô.�B—I‘Iô .ô:�r—y‘yô ô�—‘ô ô>Ð*ô >ôB
�"—)‘)ô 
ô@�—‘ô ô "§)¡)ô ô"˜2Ÿ9™9ô ô !�b—i‘iô !ô&�b—i‘iô &ô	9˜2Ÿ9™9ô 	9ð ô/˜/ó /ó ð/ñ2 ðôð
 ô7˜{ó 7ó óð7ñ& ð	ôô|6Ð#ó |6óð|6ñ~ ðôôY
Ð,ó Y
óðY
ñx ðôô
Q
Ð)¨?ó Q
óð
Q
ðh ôI
Ð)ó I
ó ðI
ñX ðôô
I
Ð$7ó I
óð
I
ñX ðôôM
Ð$7ó M
óðM
ð` ô^
Ð/ó ^
ó ð^
ðB ô8
Ð!4ó 8
ó ð8
ðv ô@
Ð2ó @
ó ð@
òF�rQ   