ó
    ‡Ž¡jŠß  ã                   óŽ  • S r SSKJr  SSKJr  SSKrSSKJr  SSKJrJ	r	J
r
  SSKJr  SS	KJrJr  SS
KJrJrJr  SSKJr  SSKJrJr  SSKJr  SSKJrJrJrJ r J!r!J"r"J#r#J$r$  SSK%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-J.r.J/r/J0r0  SSK1J2r2J3r3  SSK4J5r5  SSK6J7r7  \0Rp                  " \95      r: " S S\Rv                  5      r<  SVS\Rv                  S\Rz                  S\Rz                  S\Rz                  S\Rz                  S-  S\>S-  S\>S \)\.   4S! jjr? " S" S#\Rv                  5      r@ " S$ S%\Rv                  5      rA " S& S'\Rv                  5      rB " S( S)\Rv                  5      rC " S* S+\Rv                  5      rD " S, S-\Rv                  5      rE " S. S/\5      rF " S0 S1\Rv                  5      rG " S2 S3\Rv                  5      rH " S4 S5\Rv                  5      rI\/ " S6 S7\'5      5       rJ\/" S8S99\ " S: S;\-5      5       5       rK\/ " S< S=\J5      5       rL " S> S?\Rv                  5      rM " S@ SA\Rv                  5      rN\/" SBS99 " SC SD\J5      5       rO\/" SES99 " SF SG\J5      5       rP\/" SHS99 " SI SJ\J5      5       rQ\/" SKS99 " SL SM\J5      5       rR\/ " SN SO\J5      5       rS\/ " SP SQ\J5      5       rT\/" SRS99 " SS ST\J\5      5       rU/ SUQrVg)WzPyTorch ELECTRA model.é    )ÚCallable)Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FNÚget_activation)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)Ú"BaseModelOutputWithCrossAttentionsÚ)BaseModelOutputWithPastAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚMaskedLMOutputÚMultipleChoiceModelOutputÚ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é   )ÚElectraConfigc                   óØ   ^ • \ rS rSrSrU 4S jr     SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\	S
\R                  4S jjrSrU =r$ )ÚElectraEmbeddingsé8   zGConstruct the embeddings from word, position and token_type embeddings.c                 ó.  >• [         TU ]  5         [        R                  " UR                  UR
                  UR                  S9U l        [        R                  " UR                  UR
                  5      U l	        [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        [        R"                  " [$        R&                  " UR                  5      R)                  S5      SS9U l        [        R"                  " [$        R,                  " U R*                  R/                  5       [$        R0                  S9SS9U l        g )N)Úpadding_idx©Úeps©r'   éÿÿÿÿF)Ú
persistent©Údtype)ÚsuperÚ__init__r   Ú	EmbeddingÚ
vocab_sizeÚembedding_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ÚBufferÚtorchÚarangeÚexpandÚposition_idsÚzerosÚsizeÚlongÚtoken_type_ids©ÚselfÚconfigÚ	__class__s     €ÚºC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/electra/modeling_electra.pyr6   ÚElectraEmbeddings.__init__;   s  ø€ Ü‰ÑÔÜ!Ÿ|š|¨F×,=Ñ,=¸v×?TÑ?TÐbh×buÑbuÑvˆÔÜ#%§<¢<°×0NÑ0NÐPV×PeÑPeÓ#fˆÔ Ü%'§\¢\°&×2HÑ2HÈ&×J_ÑJ_Ó%`ˆÔ"äŸš f×&;Ñ&;À×AVÑAVÑWˆŒÜ—z’z &×"<Ñ"<Ó=ˆŒô ŸIšI¤e§l¢l°6×3QÑ3QÓ&R×&YÑ&YÐZaÓ&bÐotÑuˆÔÜ Ÿiši¬¯ª°D×4EÑ4E×4JÑ4JÓ4LÔTY×T^ÑT^Ñ(_ÐlqÑrˆÕó    NÚ	input_idsrM   rI   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 óŠ  • Ub  UR                  5       nOUR                  5       S S nUu  pxUc  U R                  S S 2XXU-   24   nUcš  [        U S5      (       aQ  U R                  R	                  UR
                  S   S5      n	[        R                  " U	SUS9n	U	R	                  Xx5      nO8[        R                  " U[        R                  U R                  R                  S9nUc  U R                  U5      nU R                  U5      n
XJ-   nU R                  U5      nX¼-   nU R                  U5      nU R                  U5      nU$ )Nr1   rM   r   r'   )ÚdimÚindex)r4   Údevice)rK   rI   ÚhasattrrM   rH   ÚshaperF   ÚgatherrJ   rL   r\   r;   r?   r=   r@   rD   )rO   rU   rM   rI   rV   rW   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr?   Ú
embeddingsr=   s                rR   ÚforwardÚElectraEmbeddings.forwardI   sG  € ð Ñ Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
àÑØ×,Ñ,ªQÐ0FÐVlÑIlÐ0lÐ-lÑmˆLð
 Ñ!Ü�tÐ-×.Ñ.à*.×*=Ñ*=×*DÑ*DÀ\×EWÑEWÐXYÑEZÐ\^Ó*_Ð'Ü*/¯,ª,Ð7NÐTUÐ]iÑ*jÐ'Ø!8×!?Ñ!?À
Ó!W‘ä!&§¢¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÑ!l�àÑ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐØ"Ñ:ˆ
à"×6Ñ6°|ÓDÐØÑ5ˆ
à—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐrT   )r@   rD   r=   rI   r?   rM   r;   )NNNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r6   rF   Ú
LongTensorÚFloatTensorÚintÚTensorre   Ú__static_attributes__Ú__classcell__©rQ   s   @rR   r*   r*   8   s‘   ø† ÙQõsð  .2Ø26Ø04Ø26Ø&'ñ(à×#Ñ# dÑ*ð(ð ×(Ñ(¨4Ñ/ð(ð ×&Ñ&¨Ñ-ð	(ð
 ×(Ñ(¨4Ñ/ð(ð !$ð(ð 
�‰÷(ó (rT   r*   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrD   Úkwargsc                 óŽ  • Uc  UR                  S5      S-  n[        R                  " XR                  SS5      5      U-  nUb  X„-   n[        R
                  R                  USS9n[        R
                  R                  X†U R                  S9n[        R                  " Xƒ5      n	U	R                  SS5      R                  5       n	X˜4$ )Nr1   ç      à¿é   r	   ©rZ   )ÚpÚtrainingr'   )
rK   rF   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxrD   r   Ú
contiguous)
rs   rt   ru   rv   rw   rx   rD   ry   Úattn_weightsÚattn_outputs
             rR   Úeager_attention_forwardr‡   u   s±   € ð �Ø—*‘*˜R“. DÑ(ˆô —<’< §}¡}°Q¸Ó':Ó;¸gÑE€LàÑ!Ø#Ñ4ˆä—=‘=×(Ñ(¨¸2Ð(Ð>€LÜ—=‘=×(Ñ(¨È6Ï?É?Ð(Ð[€Lä—,’,˜|Ó3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€KàÐ$Ð$rT   c                   ó¦   ^ • \ rS rSrSU 4S jjr  SS\R                  S\R                  S-  S\S-  S\	\
   S\\R                     4
S	 jjrS
rU =r$ )ÚElectraSelfAttentioné’   Nc                 óN  >• [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eXl        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l	        U R                  S-  U l
        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                   " UR"                  5      U l        UR&                  U l        X l        X0l        g ©Nr   r9   zThe hidden size (z6) is not a multiple of the number of attention heads (Ú)r{   )r5   r6   Úhidden_sizeÚnum_attention_headsr]   Ú
ValueErrorrP   rn   Úattention_head_sizeÚall_head_sizerx   r   ÚLinearrt   ru   rv   rB   Úattention_probs_dropout_probrD   Ú
is_decoderÚ	is_causalÚ	layer_idx©rO   rP   r–   r—   rQ   s       €rR   r6   ÚElectraSelfAttention.__init__“   sM  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÓ?ÌÐPVÐXh×HiÑ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ˆŒà ×+Ñ+ˆŒØ"ŒØ"�rT   Úhidden_statesrw   Úpast_key_valuesry   rX   c                 ó  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  " U6 R	                  SS5      nU R                  U5      R                  " U6 R	                  SS5      nU R                  U5      R                  " U6 R	                  SS5      n	UbA  Un
[        U[        5      (       a  UR                  n
U
R                  X‰U R                  5      u  p‰[        R                  " U R                  R                  [         5      nU" U UUU	U4U R"                  (       d  SOU R$                  R&                  U R(                  S.UD6u  pÍUR*                  " / UQSP76 R-                  5       nXÍ4$ )Nr1   r'   r|   ç        ©rD   rx   )r^   r‘   rt   Úviewr�   ru   rv   Ú
isinstancer   Úself_attention_cacheÚupdater—   r   Úget_interfacerP   Ú_attn_implementationr‡   r   rD   r~   rx   Úreshaper„   )rO   rš   rw   r›   ry   r`   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚcurrent_past_key_valuesÚattention_interfacer†   r…   s                 rR   re   ÚElectraSelfAttention.forward«   s€  € ð $×)Ñ)¨#¨2Ð.ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆð —j‘j Ó/×4Ò4°lÐC×MÑMÈaÐQRÓSˆØ—H‘H˜]Ó+×0Ò0°,Ð?×IÑIÈ!ÈQÓOˆ	Ø—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ñ	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØÐ(Ð(rT   )r’   r‘   rP   rD   r–   r•   ru   r—   r�   rt   rx   rv   ©FN)NN©rg   rh   ri   rj   r6   rF   ro   rm   r   r   r!   Útuplere   rp   rq   rr   s   @rR   r‰   r‰   ’   sl   ø† ÷#ð6 48Ø(,ñ	')à—|‘|ð')ð ×)Ñ)¨DÑ0ð')ð  ™ð	')ð
 Ð+Ñ,ð')ð 
ˆu�|‰|Ñ	÷')ó ')rT   r‰   c                   óÆ   ^ • \ rS rSrSU 4S jjr   SS\R                  S\R                  S-  S\R                  S-  S\S-  S\	\
   S	\\R                     4S
 jjrSrU =r$ )ÚElectraCrossAttentionéÖ   Nc                 ó,  >• [         TU ]  5         UR                  UR                  -  S:w  a7  [	        US5      (       d&  [        SUR                   SUR                   S35      eXl        UR                  U l        [        UR                  UR                  -  5      U l        U R                  U R                  -  U l	        U R                  S-  U l
        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                  " UR                  U R                  5      U l        [        R                   " UR"                  5      U l        X l        X0l        g rŒ   )r5   r6   rŽ   r�   r]   r�   rP   rn   r‘   r’   rx   r   r“   rt   ru   rv   rB   r”   rD   r–   r—   r˜   s       €rR   r6   ÚElectraCrossAttention.__init__×   s@  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÓ?ÌÐPVÐXh×HiÑ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ˆŒà"ŒØ"�rT   rš   Úencoder_hidden_statesrw   r›   ry   rX   c                 óz  • UR                   S S n/ UQSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      nUb%  UR
                  R                  U R                  5      OSn	Ubb  U	(       a[  UR                  R                  U R                     R                  n
UR                  R                  U R                     R                  nOÄ/ UR                   S S QSPU R                  P7nU R                  U5      R                  U5      R	                  SS5      n
U R                  U5      R                  U5      R	                  SS5      nUbA  UR                  R                  X«U R                  5      u  p«SUR
                  U R                  '   [        R                   " U R"                  R$                  [&        5      nU" U UU
UU4U R(                  (       d  SOU R*                  R,                  U R.                  S.UD6u  pïUR0                  " / UQSP76 R3                  5       nXï4$ )Nr1   r'   r|   FTr�   rž   )r^   r‘   rt   rŸ   r�   Ú
is_updatedÚgetr—   Úcross_attention_cacheÚlayersÚkeysÚvaluesru   rv   r¢   r   r£   rP   r¤   r‡   r   rD   r~   rx   r¥   r„   )rO   rš   rµ   rw   r›   ry   r`   r¦   r§   r·   r¨   r©   Úkv_shaper«   r†   r…   s                   rR   re   ÚElectraCrossAttention.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ñ	%
ð ñ	%
Ñ!ˆð "×)Ò)Ð;¨;Ð;¸Ò;×FÑFÓHˆØÐ(Ð(rT   )r’   r‘   rP   rD   r–   ru   r—   r�   rt   rx   rv   r­   )NNN)rg   rh   ri   rj   r6   rF   ro   rm   r   r   r!   r¯   re   rp   rq   rr   s   @rR   r±   r±   Ö   s…   ø† ÷#ð4 ;?Ø37Ø6:ñ1)à—|‘|ð1)ð  %×0Ñ0°4Ñ7ð1)ð ×)Ñ)¨DÑ0ð	1)ð
 -¨tÑ3ð1)ð Ð+Ñ,ð1)ð 
ˆu�|‰|Ñ	÷1)ó 1)rT   r±   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚElectraSelfOutputi#  c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  5      U l
        g ©Nr.   )r5   r6   r   r“   rŽ   Údenser@   rA   rB   rC   rD   rN   s     €rR   r6   ÚElectraSelfOutput.__init__$  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�rT   rš   Úinput_tensorrX   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ ©N©rÃ   rD   r@   ©rO   rš   rÅ   s      rR   re   ÚElectraSelfOutput.forward*  ó5   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }Ñ'CÓDˆØÐrT   ©r@   rÃ   rD   ©
rg   rh   ri   rj   r6   rF   ro   re   rp   rq   rr   s   @rR   rÀ   rÀ   #  ó6   ø† õ>ð U§\¡\ð ÀÇÁð ÐRW×R^ÑR^÷ ò rT   rÀ   c                   óæ   ^ • \ rS rSrSU 4S jjr    SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S\S-  S	\	\
   S
\\R                     4S jjrSrU =r$ )ÚElectraAttentioni2  Nc                 óŒ   >• [         TU ]  5         X@l        U(       a  [        O[        nU" XUS9U l        [        U5      U l        g )N©r–   r—   )r5   r6   Úis_cross_attentionr±   r‰   rO   rÀ   Úoutput)rO   rP   r–   r—   rÓ   Úattention_classrQ   s         €rR   r6   ÚElectraAttention.__init__3  s9   ø€ Ü‰ÑÔØ"4ÔÞ3EÕ/ÔK_ˆÙ# FÈ9ÑUˆŒ	Ü'¨Ó/ˆ�rT   rš   rw   rµ   Úencoder_attention_maskr›   ry   rX   c                 ó†   • U R                   (       d  UOUnU R                  " U4UUUS.UD6u  pxU R                  Xq5      nXx4$ )N)rµ   rw   r›   )rÓ   rO   rÔ   )	rO   rš   rw   rµ   r×   r›   ry   Úattention_outputr…   s	            rR   re   ÚElectraAttention.forward:  s\   € ð 04×/F×/F™ÐLbˆØ)-¯ªØð*
à"7Ø)Ø+ñ	*
ð
 ñ*
Ñ&Ðð  Ÿ;™;Ð'7ÓGÐØÐ-Ð-rT   )rÓ   rÔ   rO   )FNF©NNNNr®   rr   s   @rR   rÐ   rÐ   2  sœ   ø† ÷0ð 48Ø:>Ø;?Ø(,ñ.à—|‘|ð.ð ×)Ñ)¨DÑ0ð.ð  %×0Ñ0°4Ñ7ð	.ð
 !&× 1Ñ 1°DÑ 8ð.ð  ™ð.ð Ð+Ñ,ð.ð 
ˆu�|‰|Ñ	÷.ó .rT   rÐ   c                   ób   ^ • \ rS rSrU 4S jrS\R                  S\R                  4S jrSrU =r	$ )ÚElectraIntermediateiP  c                 ó  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        UR                  [        5      (       a  [        UR                     U l        g UR                  U l        g rÇ   )r5   r6   r   r“   rŽ   Úintermediate_sizerÃ   r    Ú
hidden_actÚstrr   Úintermediate_act_fnrN   s     €rR   r6   ÚElectraIntermediate.__init__Q  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬×-Ñ-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rT   rš   rX   c                 óJ   • U R                  U5      nU R                  U5      nU$ rÇ   ©rÃ   râ   )rO   rš   s     rR   re   ÚElectraIntermediate.forwardY  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrT   rå   rÍ   rr   s   @rR   rÝ   rÝ   P  s(   ø† õ9ð U§\¡\ð °e·l±l÷ ò rT   rÝ   c                   óz   ^ • \ rS rSrU 4S jrS\R                  S\R                  S\R                  4S jrSrU =r	$ )ÚElectraOutputi`  c                 ó(  >• [         TU ]  5         [        R                  " UR                  UR
                  5      U l        [        R                  " UR
                  UR                  S9U l        [        R                  " UR                  5      U l        g rÂ   )r5   r6   r   r“   rß   rŽ   rÃ   r@   rA   rB   rC   rD   rN   s     €rR   r6   ÚElectraOutput.__init__a  s`   ø€ Ü‰ÑÔÜ—Y’Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸš f×&8Ñ&8¸f×>SÑ>SÑTˆŒÜ—z’z &×"<Ñ"<Ó=ˆ�rT   rš   rÅ   rX   c                 óp   • U R                  U5      nU R                  U5      nU R                  X-   5      nU$ rÇ   rÈ   rÉ   s      rR   re   ÚElectraOutput.forwardg  rË   rT   rÌ   rÍ   rr   s   @rR   rè   rè   `  rÎ   rT   rè   c                   óæ   ^ • \ rS rSrSU 4S jjr    SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S\S-  S	\	\
   S
\R                  4S jjrS rSrU =r$ )ÚElectraLayerio  Nc                 óŠ  >• [         TU ]  5         UR                  U l        SU l        [	        XR
                  US9U l        UR
                  U l        UR                  U l        U R                  (       a0  U R
                  (       d  [        U  S35      e[	        USUSS9U l	        [        U5      U l        [        U5      U l        g )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Ô   )rO   rP   r—   rQ   s      €rR   r6   ÚElectraLayer.__init__p  s«   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ)¨&×<MÑ<MÐYbÑcˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#×#Ø—?—?Ü  D 6Ð)gÐ!hÓiÐiÜ"2ØØØ#Ø#'ñ	#ˆDÔô 0°Ó7ˆÔÜ# FÓ+ˆ�rT   rš   rw   rµ   r×   r›   ry   rX   c                 ó2  • U R                   " UU4SU0UD6u  pxUn	U R                  (       a?  Ub<  [        U S5      (       d  [        SU  S35      eU R                  " US UU4SU0UD6u  p¨U
n	[        U R                  U R                  U R                  U	5      nU$ )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•   r]   r�   rô   r   Úfeed_forward_chunkrð   rñ   )rO   rš   rw   rµ   r×   r›   ry   Úself_attention_outputÚ_rÙ   Úcross_attention_outputÚlayer_outputs               rR   re   ÚElectraLayer.forwardƒ  sà   € ð $(§>¢>ØØñ$
ð ,ð$
ð ñ	$
Ñ Ðð 1Ðà�?�?Ð4Ñ@Ü˜4Ð!1×2Ñ2Ü Ø=¸d¸Vð DDð Dóð ð
 )-×(;Ò(;Ø%ØØ%Ø&ñ	)ð
 !0ð)ð ñ)Ñ%Ð"ð  6Ðä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð ÐrT   c                 óJ   • U R                  U5      nU R                  X!5      nU$ rÇ   )rõ   rÔ   )rO   rÙ   Úintermediate_outputrü   s       rR   rø   ÚElectraLayer.feed_forward_chunkª  s)   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6ÓIˆØÐrT   )ró   rò   rð   rô   rõ   r•   rÔ   rñ   rÇ   rÛ   )rg   rh   ri   rj   r6   rF   ro   rm   r   r   r!   re   rø   rp   rq   rr   s   @rR   rî   rî   o  s�   ø† ÷,ð, 48Ø:>Ø;?Ø(,ñ%à—|‘|ð%ð ×)Ñ)¨DÑ0ð%ð  %×0Ñ0°4Ñ7ð	%ð
 !&× 1Ñ 1°DÑ 8ð%ð  ™ð%ð Ð+Ñ,ð%ð 
�‰õ%÷Nð rT   rî   c                   óô   ^ • \ rS rSrU 4S jr     SS\R                  S\R                  S-  S\R                  S-  S\R                  S-  S\S-  S	\	S-  S
\
\   S\\R                     \-  4S jjrSrU =r$ )ÚElectraEncoderi±  c           
      óÄ   >• [         TU ]  5         Xl        [        R                  " [        UR                  5       Vs/ s H  n[        XS9PM     sn5      U l        g s  snf )N)r—   )	r5   r6   rP   r   Ú
ModuleListÚrangeÚnum_hidden_layersrî   Úlayer)rO   rP   ÚirQ   s      €rR   r6   ÚElectraEncoder.__init__²  sH   ø€ Ü‰ÑÔØŒÜ—]’]ÌuÐU[×UmÑUmÔOnÓ#oÒOnÈ!¤L°Ô$EÑOnÑ#oÓpˆ�
ùÒ#os   ½ANrš   rw   rµ   r×   r›   Ú	use_cachery   rX   c                 ó„   • [        U R                  5       H  u  p‰U	" UUU4UUS.UD6nM     [        UU(       a  US9$ S S9$ )N)r×   r›   ©Úlast_hidden_stater›   )Ú	enumerater  r   )
rO   rš   rw   rµ   r×   r›   r
  ry   r  Úlayer_modules
             rR   re   ÚElectraEncoder.forward·  sg   € ô  )¨¯©Ö4‰OˆAÙ(ØØØ%ðð (>Ø /ñð ñŠMñ  5ô 9Ø+Þ/8˜Oñ
ð 	
à>Bñ
ð 	
rT   )rP   r  )NNNNN)rg   rh   ri   rj   r6   rF   ro   rm   r   Úboolr   r!   r¯   r   re   rp   rq   rr   s   @rR   r  r  ±  s´   ø† õqð 48Ø:>Ø;?Ø(,Ø!%ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð  %×0Ñ0°4Ñ7ð	
ð
 !&× 1Ñ 1°DÑ 8ð
ð  ™ð
ð ˜$‘;ð
ð Ð+Ñ,ð
ð 
ˆu�|‰|Ñ	ÐHÑ	H÷
ó 
rT   r  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚElectraDiscriminatorPredictionsiÑ  zEPrediction module for the discriminator, made up of two dense layers.c                 ó  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        [        UR                  5      U l        [        R                  " UR                  S5      U l	        Xl
        g ©Nr'   )r5   r6   r   r“   rŽ   rÃ   r   rà   Ú
activationÚdense_predictionrP   rN   s     €rR   r6   Ú(ElectraDiscriminatorPredictions.__init__Ô  s\   ø€ Ü‰ÑÔä—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü(¨×):Ñ):Ó;ˆŒÜ "§	¢	¨&×*<Ñ*<¸aÓ @ˆÔØ�rT   c                 óŠ   • U R                  U5      nU R                  U5      nU R                  U5      R                  S5      nU$ )Nr1   )rÃ   r  r  Úsqueeze)rO   Údiscriminator_hidden_statesrš   Úlogitss       rR   re   Ú'ElectraDiscriminatorPredictions.forwardÜ  s?   € ØŸ
™
Ð#>Ó?ˆØŸ™¨Ó6ˆØ×&Ñ& }Ó5×=Ñ=¸bÓAˆàˆrT   )r  rP   rÃ   r  ©	rg   rh   ri   rj   rk   r6   re   rp   rq   rr   s   @rR   r  r  Ñ  s   ø† ÙOõ÷ð rT   r  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚElectraGeneratorPredictionsiä  zAPrediction module for the generator, made up of two dense layers.c                 óþ   >• [         TU ]  5         [        S5      U l        [        R
                  " UR                  UR                  S9U l        [        R                  " UR                  UR                  5      U l
        g )NÚgelur.   )r5   r6   r   r  r   r@   r9   rA   r“   rŽ   rÃ   rN   s     €rR   r6   Ú$ElectraGeneratorPredictions.__init__ç  sV   ø€ Ü‰ÑÔä(¨Ó0ˆŒÜŸš f×&;Ñ&;À×AVÑAVÑWˆŒÜ—Y’Y˜v×1Ñ1°6×3HÑ3HÓIˆ�
rT   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ rÇ   )rÃ   r  r@   )rO   Úgenerator_hidden_statesrš   s      rR   re   Ú#ElectraGeneratorPredictions.forwardî  s3   € ØŸ
™
Ð#:Ó;ˆØŸ™¨Ó6ˆØŸ™ }Ó5ˆàÐrT   )r@   r  rÃ   r  rr   s   @rR   r   r   ä  s   ø† ÙKõJ÷ð rT   r   c                   óP   ^ • \ rS rSr\rSrSrSrSr	Sr
Sr\\\S.rU 4S jrSrU =r$ )ÚElectraPreTrainedModeliö  ÚelectraT)rš   Ú
attentionsÚcross_attentionsc                 óF  >• [         TU ]  U5        [        U[        5      (       a|  [        R
                  " UR                  [        R                  " UR                  R                  S   5      R                  S5      5        [        R                  " UR                  5        g g )Nr1   r0   )r5   Ú_init_weightsr    r*   ÚinitÚcopy_rI   rF   rG   r^   rH   Úzeros_rM   )rO   rs   rQ   s     €rR   r-  Ú$ElectraPreTrainedModel._init_weights  sp   ø€ Ü‰Ñ˜fÔ%Ü�fÔ/×0Ñ0Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�KŠK˜×-Ñ-Õ.ð 1rT   © )rg   rh   ri   rj   r(   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendrî   r‰   r±   Ú_can_record_outputsr-  rp   rq   rr   s   @rR   r(  r(  ö  sF   ø† à €LØ!ÐØ&*Ð#ØÐØ€NØÐØ"&Ðà%Ø*Ø1ñÐ÷/ó /rT   r(  z3
    Output type of [`ElectraForPreTraining`].
    )Úcustom_introc                   óÆ   • \ rS rSr% SrSr\R                  S-  \S'   Sr	\R                  S-  \S'   Sr
\\R                     S-  \S'   Sr\\R                     S-  \S'   Srg)	ÚElectraForPreTrainingOutputi  a  
loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
    Total loss of the ELECTRA objective.
logits (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
    Prediction scores of the head (scores for each token before SoftMax).
NÚlossr  rš   r*  r2  )rg   rh   ri   rj   rk   r>  rF   rm   Ú__annotations__r  rš   r¯   r*  rp   r2  rT   rR   r=  r=    sg   ‡ ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ö6rT   r=  c                   ó¦  ^ • \ rS rSrU 4S jrS rS r\\\	         SS\
R                  S-  S\
R                  S-  S\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\
R                  S-  S\\
R                     S-  S\S-  S\\   S\\
R                     \-  4S jj5       5       5       rS rSrU =r$ )ÚElectraModeli   c                 ó2  >• [         TU ]  U5        [        U5      U l        UR                  UR
                  :w  a0  [        R                  " UR                  UR
                  5      U l        [        U5      U l
        Xl        SU l        U R                  5         g )NF)r5   r6   r*   rd   r9   rŽ   r   r“   Úembeddings_projectr  ÚencoderrP   Úgradient_checkpointingÚ	post_initrN   s     €rR   r6   ÚElectraModel.__init__"  sr   ø€ Ü‰Ñ˜Ô Ü+¨FÓ3ˆŒà× Ñ  F×$6Ñ$6Ó6Ü&(§i¢i°×0EÑ0EÀv×GYÑGYÓ&ZˆDÔ#ä% fÓ-ˆŒØŒØ&+ˆÔ#à�‰ÕrT   c                 ó.   • U R                   R                  $ rÇ   ©rd   r;   ©rO   s    rR   Úget_input_embeddingsÚ!ElectraModel.get_input_embeddings/  s   € Ø�‰×.Ñ.Ð.rT   c                 ó$   • XR                   l        g rÇ   rI  )rO   rv   s     rR   Úset_input_embeddingsÚ!ElectraModel.set_input_embeddings2  s   € Ø*/�‰Õ'rT   NrU   rw   rM   rI   rV   rµ   r×   r›   r
  ry   rX   c
           
      ó¦  • US L US L-  (       a  [        S5      eU R                  R                  (       a  U	b  U	OU R                  R                  n	OSn	U	(       ab  Uc_  Uc  U R                  R                  (       a.  [        [        U R                  S9[        U R                  S95      O[        U R                  S9nUb  UR                  5       OSnU R                  UUUUUS9n[        U S5      (       a  U R                  U5      nU R                  UUUUUS9u  p'U R                  " U4UUUUU	US.U
D6n[        UR                  UR                  S	9$ )
Nz:You must specify exactly one of input_ids or inputs_embedsF)rP   r   )rU   rI   rM   rV   rW   rC  )rw   r×   Úembedding_outputrµ   r›   )rw   rµ   r×   r›   r
  rI   r  )r�   rP   r•   r
  Úis_encoder_decoderr   r   Úget_seq_lengthrd   r]   rC  Ú_create_attention_masksrD  r   r  r›   )rO   rU   rw   rM   rI   rV   rµ   r×   r›   r
  ry   rW   rQ  Úencoder_outputss                 rR   re   ÚElectraModel.forward5  su  € ð  ˜Ð -°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ð +ð 
Ðô �4Ð-×.Ñ.Ø#×6Ñ6Ð7GÓHÐà15×1MÑ1MØ)Ø#9Ø-Ø"7Ø+ð 2Nð 2
Ñ.ˆð Ÿ,š,Øð	
à)Ø"7Ø#9Ø+ØØ%ñ	
ð ñ	
ˆô 9Ø-×?Ñ?Ø+×;Ñ;ñ
ð 	
rT   c                 óÈ   • U R                   R                  (       a  [        U R                   UUUS9nO[        U R                   UUS9nUb  [        U R                   UUUS9nX4$ )N)rP   rV   rw   r›   )rP   rV   rw   )rP   rV   rw   rµ   )rP   r•   r   r   )rO   rw   r×   rQ  rµ   r›   s         rR   rT  Ú$ElectraModel._create_attention_masksy  sr   € ð �;‰;×!×!Ü/Ø—{‘{Ø.Ø-Ø /ñ	‰Nô 7Ø—{‘{Ø.Ø-ñˆNð "Ñ-Ü%>Ø—{‘{Ø.Ø5Ø&;ñ	&Ð"ð Ð5Ð5rT   )rP   rd   rC  rD  rE  )	NNNNNNNNN)rg   rh   ri   rj   r6   rK  rN  r%   r&   r"   rF   ro   Úlistrm   r  r   r!   r¯   r   re   rT  rp   rq   rr   s   @rR   rA  rA     s2  ø† õò/ò0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø:>Ø!%ñ>
à—<‘< $Ñ&ð>
ð Ÿ™ tÑ+ð>
ð Ÿ™ tÑ+ð	>
ð
 —l‘l TÑ)ð>
ð —|‘| dÑ*ð>
ð  %Ÿ|™|¨dÑ2ð>
ð !&§¡¨tÑ 3ð>
ð ˜e×/Ñ/Ñ0°4Ñ7ð>
ð ˜$‘;ð>
ð Ð+Ñ,ð>
ð 
ˆu�|‰|Ñ	ÐAÑ	Aô>
ó ó ó  ð>
÷B6ð 6rT   rA  c                   ó2   ^ • \ rS rSrSrU 4S jrS rSrU =r$ )ÚElectraClassificationHeadiš  z-Head for sentence-level classification tasks.c                 ó‚  >• [         TU ]  5         [        R                  " UR                  UR                  5      U l        UR                  b  UR                  OUR                  n[        S5      U l	        [        R                  " U5      U l        [        R                  " UR                  UR                  5      U l        g )Nr"  )r5   r6   r   r“   rŽ   rÃ   Úclassifier_dropoutrC   r   r  rB   rD   Ú
num_labelsÚout_proj©rO   rP   r]  rQ   s      €rR   r6   Ú"ElectraClassificationHead.__init__�  s‹   ø€ Ü‰ÑÔÜ—Y’Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
à)/×)BÑ)BÑ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô )¨Ó0ˆŒÜ—z’zÐ"4Ó5ˆŒÜŸ	š	 &×"4Ñ"4°f×6GÑ6GÓHˆ�rT   c                 óÈ   • US S 2SS S 24   nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ )Nr   )rD   rÃ   r  r_  )rO   Úfeaturesry   Úxs       rR   re   Ú!ElectraClassificationHead.forward§  sZ   € Ø’Q˜š1�WÑˆØ�L‰L˜‹OˆØ�J‰J�q‹MˆØ�O‰O˜AÓˆØ�L‰L˜‹OˆØ�M‰M˜!ÓˆØˆrT   )r  rÃ   rD   r_  r  rr   s   @rR   r[  r[  š  s   ø† Ù7õI÷ð rT   r[  c                   ó’   ^ • \ rS rSrSrS\4U 4S jjr SS\R                  S\R                  S-  S\R                  4S	 jjr
S
rU =r$ )ÚElectraSequenceSummaryi²  aƒ  
Compute a single vector summary of a sequence hidden states.

Args:
    config ([`ElectraConfig`]):
        The config used by the model. Relevant arguments in the config class of the model are (refer to the actual
        config class of your model for the default values it uses):

        - **summary_type** (`str`) -- The method to use to make this summary. Accepted values are:

            - `"last"` -- Take the last token hidden state (like XLNet)
            - `"first"` -- Take the first token hidden state (like Bert)
            - `"mean"` -- Take the mean of all tokens hidden states
            - `"cls_index"` -- Supply a Tensor of classification token position (GPT/GPT-2)
            - `"attn"` -- Not implemented now, use multi-head attention

        - **summary_use_proj** (`bool`) -- Add a projection after the vector extraction.
        - **summary_proj_to_labels** (`bool`) -- If `True`, the projection outputs to `config.num_labels` classes
          (otherwise to `config.hidden_size`).
        - **summary_activation** (`Optional[str]`) -- Set to `"tanh"` to add a tanh activation to the output,
          another string or `None` will add no activation.
        - **summary_first_dropout** (`float`) -- Optional dropout probability before the projection and activation.
        - **summary_last_dropout** (`float`)-- Optional dropout probability after the projection and activation.
rP   c                 óÂ  >• [         TU ]  5         [        USS5      U l        U R                  S:X  a  [        e[
        R                  " 5       U l        [        US5      (       a‚  UR                  (       aq  [        US5      (       a.  UR                  (       a  UR                  S:”  a  UR                  nOUR                  n[
        R                  " UR                  U5      U l        [        USS 5      nU(       a  [        U5      O[
        R                  " 5       U l        [
        R                  " 5       U l        [        US5      (       a5  UR"                  S:”  a%  [
        R$                  " UR"                  5      U l        [
        R                  " 5       U l        [        US	5      (       a7  UR(                  S:”  a&  [
        R$                  " UR(                  5      U l        g g g )
NÚsummary_typeÚlastÚattnÚsummary_use_projÚsummary_proj_to_labelsr   Úsummary_activationÚsummary_first_dropoutÚsummary_last_dropout)r5   r6   Úgetattrri  ÚNotImplementedErrorr   ÚIdentityÚsummaryr]   rl  rm  r^  rŽ   r“   r   r  Úfirst_dropoutro  rB   Úlast_dropoutrp  )rO   rP   Únum_classesÚactivation_stringrQ   s       €rR   r6   ÚElectraSequenceSummary.__init__Ì  sa  ø€ Ü‰ÑÔä# F¨N¸FÓCˆÔØ×Ñ Ó&ô &Ð%ä—{’{“}ˆŒÜ�6Ð-×.Ñ.°6×3J×3JÜ�vÐ7×8Ñ8¸V×=Z×=ZÐ_e×_pÑ_pÐstÓ_tØ$×/Ñ/‘à$×0Ñ0�ÜŸ9š9 V×%7Ñ%7¸ÓEˆDŒLä# FÐ,@À$ÓGÐÞIZ¤NÐ3DÔ$EÔ`b×`kÒ`kÓ`mˆŒäŸ[š[›]ˆÔÜ�6Ð2×3Ñ3¸×8TÑ8TÐWXÓ8XÜ!#§¢¨F×,HÑ,HÓ!IˆDÔäŸKšK›MˆÔÜ�6Ð1×2Ñ2°v×7RÑ7RÐUVÓ7VÜ "§
¢
¨6×+FÑ+FÓ GˆDÕð 8WÐ2rT   Nrš   Ú	cls_indexrX   c                 óþ  • U R                   S:X  a  USS2S4   nGOU R                   S:X  a  USS2S4   nGOU R                   S:X  a  UR                  SS9nOâU R                   S	:X  a¼  Uc?  [        R                  " US
SS2SS24   UR                  S   S-
  [        R
                  S9nOXUR                  S5      R                  S5      nUR                  SUR                  5       S-
  -  UR                  S5      4-   5      nUR                  SU5      R                  S5      nOU R                   S:X  a  [        eU R                  W5      nU R                  U5      nU R                  U5      nU R!                  U5      nU$ )a#  
Compute a single vector summary of a sequence hidden states.

Args:
    hidden_states (`torch.FloatTensor` of shape `[batch_size, seq_len, hidden_size]`):
        The hidden states of the last layer.
    cls_index (`torch.LongTensor` of shape `[batch_size]` or `[batch_size, ...]` where ... are optional leading dimensions of `hidden_states`, *optional*):
        Used if `summary_type == "cls_index"` and takes the last token of the sequence as classification token.

Returns:
    `torch.FloatTensor`: The summary of the sequence hidden states.
rj  Nr1   Úfirstr   Úmeanr'   r}   rz  .éþÿÿÿr3   )r1   rk  )ri  r}  rF   Ú	full_liker^   rL   Ú	unsqueezerH   rZ   rK   r_   r  rr  ru  rt  r  rv  )rO   rš   rz  rÔ   s       rR   re   ÚElectraSequenceSummary.forwardé  sn  € ð ×Ñ Ó&Ø"¢1 b 5Ñ)ŠFØ×Ñ 'Ó)Ø"¢1 a 4Ñ(ŠFØ×Ñ &Ó(Ø"×'Ñ'¨AÐ'Ð.‰FØ×Ñ +Ó-ØÑ Ü!ŸOšOØ! # r¨ rª1 *Ñ-Ø!×'Ñ'¨Ñ+¨aÑ/ÜŸ*™*ñ‘	ð &×/Ñ/°Ó3×=Ñ=¸bÓA�	Ø%×,Ñ,¨U°i·m±m³oÈÑ6IÑ-JÈm×N`ÑN`ÐacÓNdÐMfÑ-fÓg�	à"×)Ñ)¨"¨iÓ8×@Ñ@ÀÓD‰FØ×Ñ &Ó(Ü%Ð%à×#Ñ# FÓ+ˆØ—‘˜fÓ%ˆØ—‘ Ó(ˆØ×"Ñ" 6Ó*ˆàˆrT   )r  ru  rv  rt  ri  rÇ   )rg   rh   ri   rj   rk   r(   r6   rF   rm   rl   re   rp   rq   rr   s   @rR   rg  rg  ²  sV   ø† ñð2H˜}÷ Hð< VZñ)Ø"×.Ñ.ð)Ø;@×;KÑ;KÈdÑ;Rð)à	×	Ñ	÷)ó )rT   rg  zŸ
    ELECTRA 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                   ó8  ^ • \ rS rSrU 4S jr\\      SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\	\
   S\\R                     \-  4S jj5       5       rSrU =r$ )Ú ElectraForSequenceClassificationi  c                 ó²   >• [         TU ]  U5        UR                  U l        Xl        [	        U5      U l        [        U5      U l        U R                  5         g rÇ   )	r5   r6   r^  rP   rA  r)  r[  Ú
classifierrF  rN   s     €rR   r6   Ú)ElectraForSequenceClassification.__init__  sF   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØŒÜ# FÓ+ˆŒÜ3°FÓ;ˆŒð 	�‰ÕrT   NrU   rw   rM   rI   rV   Úlabelsry   rX   c           	      óÈ  • U R                   " U4UUUUSS.UD6nUS   n	U R                  U	5      n
SnUGbŽ  U R                  R                  c‘  U R                  S:X  a  SU R                  l        OoU R                  S:”  aN  UR
                  [        R                  :X  d  UR
                  [        R                  :X  a  SU R                  l        OSU R                  l        U R                  R                  S:X  aI  [        5       nU R                  S:X  a&  U" U
R                  5       UR                  5       5      nOŒU" X¦5      nOƒU R                  R                  S:X  a=  [        5       nU" U
R                  S	U R                  5      UR                  S	5      5      nO,U R                  R                  S:X  a  [        5       nU" X¦5      n[        UU
UR                  UR                   S
9$ )ae  
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).
T©rw   rM   rI   rV   Úreturn_dictr   Nr'   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr1   ©r>  r  rš   r*  )r)  r…  rP   Úproblem_typer^  r4   rF   rL   rn   r   r  r   rŸ   r   r   rš   r*  )rO   rU   rw   rM   rI   rV   r‡  ry   r  Úsequence_outputr  r>  Úloss_fcts                rR   re   Ú(ElectraForSequenceClassification.forward&  s—  € ð$ '+§l¢lØð'
à)Ø)Ø%Ø'Øñ'
ð ñ'
Ð#ð 6°aÑ8ˆØ—‘ Ó1ˆàˆØÒØ�{‰{×'Ñ'Ñ/Ø—?‘? 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Ó3‘DØ—‘×)Ñ)Ð-JÓJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÓIÜ,Ó.�Ù Ó/�ä'ØØØ5×CÑCØ2×=Ñ=ñ	
ð 	
rT   )r…  rP   r)  r^  ©NNNNNN)rg   rh   ri   rj   r6   r$   r"   rF   ro   r   r!   r¯   r   re   rp   rq   rr   s   @rR   rƒ  rƒ    sÑ   ø† õð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ9
à—<‘< $Ñ&ð9
ð Ÿ™ tÑ+ð9
ð Ÿ™ tÑ+ð	9
ð
 —l‘l TÑ)ð9
ð —|‘| dÑ*ð9
ð —‘˜tÑ#ð9
ð Ð+Ñ,ð9
ð 
ˆu�|‰|Ñ	Ð7Ñ	7ô9
ó ó ö9
rT   rƒ  zÊ
    Electra model with a binary classification head on top as used during pretraining for identifying generated tokens.

    It is recommended to load the discriminator checkpoint into that model.
    c                   ó8  ^ • \ rS rSrU 4S jr\\      SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\	\
   S\\R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForPreTrainingid  c                 ó„   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        U R                  5         g rÇ   )r5   r6   rA  r)  r  Údiscriminator_predictionsrF  rN   s     €rR   r6   ÚElectraForPreTraining.__init__l  s3   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒÜ)HÈÓ)PˆÔ&à�‰ÕrT   NrU   rw   rM   rI   rV   r‡  ry   rX   c           	      ó   • U R                   " U4UUUUSS.UD6nUS   n	U R                  U	5      n
SnUb«  [        R                  " 5       nUb_  UR	                  SU	R
                  S   5      S:H  nU
R	                  SU	R
                  S   5      U   nXm   nU" XïR                  5       5      nO4U" U
R	                  SU	R
                  S   5      UR                  5       5      n[        UU
UR                  UR                  S9$ )a½  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for computing the ELECTRA loss. Input should be a sequence of tokens (see `input_ids` docstring)
    Indices should be in `[0, 1]`:

    - 0 indicates the token is an original token,
    - 1 indicates the token was replaced.

Examples:

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

>>> discriminator = ElectraForPreTraining.from_pretrained("google/electra-base-discriminator")
>>> tokenizer = AutoTokenizer.from_pretrained("google/electra-base-discriminator")

>>> sentence = "The quick brown fox jumps over the lazy dog"
>>> fake_sentence = "The quick brown fox fake over the lazy dog"

>>> fake_tokens = tokenizer.tokenize(fake_sentence, add_special_tokens=True)
>>> fake_inputs = tokenizer.encode(fake_sentence, return_tensors="pt")
>>> discriminator_outputs = discriminator(fake_inputs)
>>> predictions = torch.round((torch.sign(discriminator_outputs[0]) + 1) / 2)

>>> fake_tokens
['[CLS]', 'the', 'quick', 'brown', 'fox', 'fake', 'over', 'the', 'lazy', 'dog', '[SEP]']

>>> predictions.squeeze().tolist()
[0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]
```Tr‰  r   Nr1   r'   rŽ  )
r)  r—  r   r   rŸ   r^   Úfloatr=  rš   r*  )rO   rU   rw   rM   rI   rV   r‡  ry   r  Údiscriminator_sequence_outputr  r>  r‘  Úactive_lossÚactive_logitsÚactive_labelss                   rR   re   ÚElectraForPreTraining.forwardt  s)  € ðV '+§l¢lØð'
à)Ø)Ø%Ø'Øñ'
ð ñ'
Ð#ð )DÀAÑ(FÐ%à×/Ñ/Ð0MÓNˆàˆØÑÜ×+Ò+Ó-ˆHØÑ)Ø,×1Ñ1°"Ð6S×6YÑ6YÐZ[Ñ6\Ó]ÐabÑb�Ø &§¡¨BÐ0M×0SÑ0SÐTUÑ0VÓ WÐXcÑ d�Ø &Ñ 3�Ù ×/BÑ/BÓ/DÓE‘á §¡¨BÐ0M×0SÑ0SÐTUÑ0VÓ WÐY_×YeÑYeÓYgÓh�ä*ØØØ5×CÑCØ2×=Ñ=ñ	
ð 	
rT   )r—  r)  r“  )rg   rh   ri   rj   r6   r$   r"   rF   ro   r   r!   r¯   r=  re   rp   rq   rr   s   @rR   r•  r•  d  sÛ   ø† õð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñF
à—<‘< $Ñ&ðF
ð Ÿ™ tÑ+ðF
ð Ÿ™ tÑ+ð	F
ð
 —l‘l TÑ)ðF
ð —|‘| dÑ*ðF
ð —‘˜tÑ#ðF
ð Ð+Ñ,ðF
ð 
ˆu�|‰|Ñ	Ð:Ñ	:ôF
ó ó öF
rT   r•  zý
    Electra model with a language modeling head on top.

    Even though both the discriminator and generator may be loaded into this model, the generator is the only model of
    the two to have been trained for the masked language modeling task.
    c                   óL  ^ • \ rS rSrSS0rU 4S jrS rS r\\	      SS\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\
R                  S-  S\
R                  S-  S\\   S\\
R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForMaskedLMi¿  úgenerator_lm_head.weightú)electra.embeddings.word_embeddings.weightc                 óä   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        [        R                  " UR                  UR                  5      U l
        U R                  5         g rÇ   )r5   r6   rA  r)  r   Úgenerator_predictionsr   r“   r9   r8   Úgenerator_lm_headrF  rN   s     €rR   r6   ÚElectraForMaskedLM.__init__Ê  sR   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒÜ%@ÀÓ%HˆÔ"ä!#§¢¨6×+@Ñ+@À&×BSÑBSÓ!TˆÔà�‰ÕrT   c                 ó   • U R                   $ rÇ   ©r¦  rJ  s    rR   Úget_output_embeddingsÚ(ElectraForMaskedLM.get_output_embeddingsÔ  ó   € Ø×%Ñ%Ð%rT   c                 ó   • Xl         g rÇ   r©  )rO   r;   s     rR   Úset_output_embeddingsÚ(ElectraForMaskedLM.set_output_embeddings×  s   € Ø!0ÕrT   NrU   rw   rM   rI   rV   r‡  ry   rX   c           	      ón  • U R                   " U4UUUUSS.UD6nUS   n	U R                  U	5      n
U R                  U
5      n
SnUbQ  [        R                  " 5       nU" U
R                  SU R                  R                  5      UR                  S5      5      n[        UU
UR                  UR                  S9$ )az  
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]`
Tr‰  r   Nr1   rŽ  )r)  r¥  r¦  r   r   rŸ   rP   r8   r   rš   r*  )rO   rU   rw   rM   rI   rV   r‡  ry   r%  Úgenerator_sequence_outputÚprediction_scoresr>  r‘  s                rR   re   ÚElectraForMaskedLM.forwardÚ  sÔ   € ð$ #'§,¢,Øð#
à)Ø)Ø%Ø'Øñ#
ð ñ#
Ðð %<¸AÑ$>Ð!à ×6Ñ6Ð7PÓQÐØ ×2Ñ2Ð3DÓEÐàˆàÑÜ×*Ò*Ó,ˆHÙÐ-×2Ñ2°2°t·{±{×7MÑ7MÓNÐPV×P[ÑP[Ð\^ÓP_Ó`ˆDäØØ$Ø1×?Ñ?Ø.×9Ñ9ñ	
ð 	
rT   ©r)  r¦  r¥  r“  )rg   rh   ri   rj   Ú_tied_weights_keysr6   rª  r®  r$   r"   rF   ro   r   r!   r¯   r   re   rp   rq   rr   s   @rR   r¡  r¡  ¿  sè   ø† ð 5Ð6aÐbÐõò&ò1ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ)
à—<‘< $Ñ&ð)
ð Ÿ™ tÑ+ð)
ð Ÿ™ tÑ+ð	)
ð
 —l‘l TÑ)ð)
ð —|‘| dÑ*ð)
ð —‘˜tÑ#ð)
ð Ð+Ñ,ð)
ð 
ˆu�|‰|Ñ	˜~Ñ	-ô)
ó ó ö)
rT   r¡  z‰
    Electra model with a token classification head on top.

    Both the discriminator and generator may be loaded into this model.
    c                   ó8  ^ • \ rS rSrU 4S jr\\      SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\	\
   S\\R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForTokenClassificationi  c                 óf  >• [         TU ]  U5        UR                  U l        [        U5      U l        UR
                  b  UR
                  OUR                  n[        R                  " U5      U l	        [        R                  " UR                  UR                  5      U l        U R                  5         g rÇ   )r5   r6   r^  rA  r)  r]  rC   r   rB   rD   r“   rŽ   r…  rF  r`  s      €rR   r6   Ú&ElectraForTokenClassification.__init__  s†   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä# FÓ+ˆŒà)/×)BÑ)BÑ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z’zÐ"4Ó5ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒà�‰ÕrT   NrU   rw   rM   rI   rV   r‡  ry   rX   c           	      óD  • U R                   " U4UUUUSS.UD6nUS   n	U R                  U	5      n	U R                  U	5      n
SnUb<  [        5       nU" U
R	                  SU R
                  5      UR	                  S5      5      n[        UU
UR                  UR                  S9$ )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]`.
Tr‰  r   Nr1   rŽ  )	r)  rD   r…  r   rŸ   r^  r   rš   r*  )rO   rU   rw   rM   rI   rV   r‡  ry   r  r›  r  r>  r‘  s                rR   re   Ú%ElectraForTokenClassification.forward  s¼   € ð  '+§l¢lØð'
à)Ø)Ø%Ø'Øñ'
ð ñ'
Ð#ð )DÀAÑ(FÐ%à(,¯©Ð5RÓ(SÐ%Ø—‘Ð!>Ó?ˆàˆØÑÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ5×CÑCØ2×=Ñ=ñ	
ð 	
rT   )r…  rD   r)  r^  r“  )rg   rh   ri   rj   r6   r$   r"   rF   ro   r   r!   r¯   r   re   rp   rq   rr   s   @rR   r·  r·    sÑ   ø† õð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ&
à—<‘< $Ñ&ð&
ð Ÿ™ tÑ+ð&
ð Ÿ™ tÑ+ð	&
ð
 —l‘l TÑ)ð&
ð —|‘| dÑ*ð&
ð —‘˜tÑ#ð&
ð Ð+Ñ,ð&
ð 
ˆu�|‰|Ñ	Ð4Ñ	4ô&
ó ó ö&
rT   r·  c                   ó`  ^ • \ rS rSr\rSrU 4S jr\\	       SS\
R                  S-  S\
R                  S-  S\
R                  S-  S\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\\   S\\
R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForQuestionAnsweringiH  r)  c                 óæ   >• [         TU ]  U5        UR                  U l        [        U5      U l        [
        R                  " UR                  UR                  5      U l        U R                  5         g rÇ   )
r5   r6   r^  rA  r)  r   r“   rŽ   Ú
qa_outputsrF  rN   s     €rR   r6   Ú$ElectraForQuestionAnswering.__init__M  sS   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä# FÓ+ˆŒÜŸ)š) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrT   NrU   rw   rM   rI   rV   Ústart_positionsÚend_positionsry   rX   c           	      ó¶  • U R                   " U4UUUUSS.UD6n	U	S   n
U R                  U
5      nUR                  SSS9u  pÍUR                  S5      R	                  5       nUR                  S5      R	                  5       nS nUbµ  Ub²  [        UR                  5       5      S:”  a  UR                  S5      n[        UR                  5       5      S:”  a  UR                  S5      nUR                  S5      nUR                  SU5      nUR                  SU5      n[        US9nU" XÆ5      nU" X×5      nUU-   S-  n[        UUUU	R                  U	R                  S	9$ )
NTr‰  r   r'   r1   r}   )Úignore_indexr|   )r>  Ústart_logitsÚ
end_logitsrš   r*  )r)  r¿  Úsplitr  r„   ÚlenrK   Úclampr   r   rš   r*  )rO   rU   rw   rM   rI   rV   rÁ  rÂ  ry   r  r�  r  rÅ  rÆ  Ú
total_lossÚignored_indexr‘  Ú
start_lossÚend_losss                      rR   re   Ú#ElectraForQuestionAnswering.forwardW  sz  € ð '+§l¢lØð'
à)Ø)Ø%Ø'Øñ'
ð ñ'
Ð#ð 6°aÑ8ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ð#:Ñ ˆØ#×+Ñ+¨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Ù 
Ó:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø5×CÑCØ2×=Ñ=ñ
ð 	
rT   )r)  r^  r¿  )NNNNNNN)rg   rh   ri   rj   r(   r3  r4  r6   r$   r"   rF   ro   r   r!   r¯   r   re   rp   rq   rr   s   @rR   r½  r½  H  sò   ø† à €LØ!Ðõð Øð *.Ø.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
rT   r½  c                   ó8  ^ • \ rS rSrU 4S jr\\      SS\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S\R                  S-  S	\R                  S-  S
\	\
   S\\R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForMultipleChoicei�  c                 óÐ   >• [         TU ]  U5        [        U5      U l        [	        U5      U l        [        R                  " UR                  S5      U l	        U R                  5         g r  )r5   r6   rA  r)  rg  Úsequence_summaryr   r“   rŽ   r…  rF  rN   s     €rR   r6   Ú!ElectraForMultipleChoice.__init__‘  sM   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒÜ 6°vÓ >ˆÔÜŸ)š) F×$6Ñ$6¸Ó:ˆŒð 	�‰ÕrT   NrU   rw   rM   rI   rV   r‡  ry   rX   c           	      óò  • Ub  UR                   S   OUR                   S   nUb!  UR                  SUR                  S5      5      OSnUb!  UR                  SUR                  S5      5      OSnUb!  UR                  SUR                  S5      5      OSnUb!  UR                  SUR                  S5      5      OSnUb1  UR                  SUR                  S5      UR                  S5      5      OSnU R                  " U4UUUUSS.UD6n	U	S   n
U R	                  U
5      nU R                  U5      nUR                  SU5      nSnUb  [        5       nU" XÖ5      n[        UUU	R                  U	R                  S9$ )	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   r~  Tr‰  r   rŽ  )
r^   rŸ   rK   r)  rÒ  r…  r   r   rš   r*  )rO   rU   rw   rM   rI   rV   r‡  ry   Únum_choicesr  r�  Úpooled_outputr  Úreshaped_logitsr>  r‘  s                   rR   re   Ú ElectraForMultipleChoice.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àð 	ð '+§l¢lØð'
à)Ø)Ø%Ø'Øñ'
ð ñ'
Ð#ð 6°aÑ8ˆà×-Ñ-¨oÓ>ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÑÜ'Ó)ˆHÙ˜OÓ4ˆDä(ØØ"Ø5×CÑCØ2×=Ñ=ñ	
ð 	
rT   )r…  r)  rÒ  r“  )rg   rh   ri   rj   r6   r$   r"   rF   ro   r   r!   r¯   r   re   rp   rq   rr   s   @rR   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
rT   rÐ  zS
    ELECTRA Model with a `language modeling` head on top for CLM fine-tuning.
    c                   óÄ  ^ • \ rS rSrSS0rU 4S jrS rS r\\	           SS\
R                  S-  S	\
R                  S-  S
\
R                  S-  S\
R                  S-  S\
R                  S-  S\
R                  S-  S\
R                  S-  S\
R                  S-  S\S-  S\S-  S\\
R                  -  S\\   S\\
R                     \-  4S jj5       5       rSrU =r$ )ÚElectraForCausalLMiî  r¢  r£  c                 ó0  >• [         TU ]  U5        UR                  (       d  [        R	                  S5        [        U5      U l        [        U5      U l        [        R                  " UR                  UR                  5      U l        U R                  5         g )NzOIf you want to use `ElectraForCausalLM` as a standalone, add `is_decoder=True.`)r5   r6   r•   ÚloggerÚwarningrA  r)  r   r¥  r   r“   r9   r8   r¦  rF  rN   s     €rR   r6   ÚElectraForCausalLM.__init__ö  sh   ø€ Ü‰Ñ˜Ô à× × Ü�N‰NÐlÔmä# FÓ+ˆŒÜ%@ÀÓ%HˆÔ"Ü!#§¢¨6×+@Ñ+@À&×BSÑBSÓ!TˆÔà�‰ÕrT   c                 ó   • U R                   $ rÇ   r©  rJ  s    rR   rª  Ú(ElectraForCausalLM.get_output_embeddings  r¬  rT   c                 ó   • Xl         g rÇ   r©  )rO   Únew_embeddingss     rR   r®  Ú(ElectraForCausalLM.set_output_embeddings  s   € Ø!/ÕrT   NrU   rw   rM   rI   rV   rµ   r×   r‡  r›   r
  Úlogits_to_keepry   rX   c                 óÂ  • Ub  Sn
U R                   " U4UUUUUUU	U
SS.	UD6nUR                  n[        U[        5      (       a  [	        U* S5      OUnU R                  U R                  USS2USS24   5      5      nSnUb)  U R                  " SUX€R                  R                  S.UD6n[        UUUR                  UR                  UR                  UR                  S9$ )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 in `[0, ..., config.vocab_size]`

Example:

```python
>>> from transformers import AutoTokenizer, ElectraForCausalLM, ElectraConfig
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("google/electra-base-generator")
>>> config = ElectraConfig.from_pretrained("google/electra-base-generator")
>>> config.is_decoder = True
>>> model = ElectraForCausalLM.from_pretrained("google/electra-base-generator", config=config)

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

>>> prediction_logits = outputs.logits
```NFT)	rw   rM   rI   rV   rµ   r×   r›   r
  rŠ  )r  r‡  r8   )r>  r  r›   rš   r*  r+  r2  )r)  r  r    rn   Úslicer¦  r¥  Úloss_functionrP   r8   r   r›   rš   r*  r+  )rO   rU   rw   rM   rI   rV   rµ   r×   r‡  r›   r
  rä  ry   Úoutputsrš   Úslice_indicesr  r>  s                     rR   re   ÚElectraForCausalLM.forward  s  € ðN ÑØˆIà=A¿\º\Øð>
à)Ø)Ø%Ø'Ø"7Ø#9Ø+ØØñ>
ð ñ>
ˆð  ×1Ñ1ˆä8BÀ>ÔSV×8WÑ8Wœ˜~˜o¨tÔ4Ð]kˆØ×'Ñ'¨×(BÑ(BÀ=ÒQRÐTaÒcdÐQdÑCeÓ(fÓgˆàˆØÑØ×%Ò%Ðp¨V¸FÏ{É{×OeÑOeÑpÐioÑpˆDä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ñ
ð 	
rT   r´  )NNNNNNNNNNr   )rg   rh   ri   rj   rµ  r6   rª  r®  r$   r"   rF   ro   r   r  rn   r   r!   r¯   r   re   rp   rq   rr   s   @rR   rÚ  rÚ  î  s\  ø† ð 5Ð6aÐbÐõ
ò&ò0ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø&*Ø(,Ø!%Ø-.ñF
à—<‘< $Ñ&ðF
ð Ÿ™ tÑ+ðF
ð Ÿ™ tÑ+ð	F
ð
 —l‘l TÑ)ðF
ð —|‘| dÑ*ðF
ð  %Ÿ|™|¨dÑ2ðF
ð !&§¡¨tÑ 3ðF
ð —‘˜tÑ#ðF
ð  ™ðF
ð ˜$‘;ðF
ð ˜eŸl™lÑ*ðF
ð Ð+Ñ,ðF
ð 
ˆu�|‰|Ñ	Ð@Ñ	@ôF
ó ó öF
rT   rÚ  )	rÚ  r¡  rÐ  r•  r½  rƒ  r·  rA  r(  )Nr�   )Wrk   Úcollections.abcr   Údataclassesr   rF   r   Útorch.nnr   r   r   Ú r
   r.  Úactivationsr   r   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   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_electrar(   Ú
get_loggerrg   rÜ  ÚModuler*   ro   rš  r‡   r‰   r±   rÀ   rÐ   rÝ   rè   rî   r  r  r   r(  r=  rA  r[  rg  rƒ  r•  r¡  r·  r½  rÐ  rÚ  Ú__all__r2  rT   rR   Ú<module>rÿ     sH  ðñ å $Ý !ã Ý ß AÑ Aå &ß 1ß CÑ CÝ )ß JÝ 9÷	÷ 	ó 	÷ GÝ &Ý 6÷ó ÷ JÝ 5Ý 0ð 
×	Ò	˜HÓ	%€ô9˜Ÿ	™	ô 9ðF !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(õ%ô:@)˜2Ÿ9™9ô @)ôHI)˜BŸI™Iô I)ôZ˜Ÿ	™	ô ô.�r—y‘yô .ô<˜"Ÿ)™)ô ô �B—I‘Iô ô>Ð-ô >ôD
�R—Y‘Yô 
ô@ b§i¡iô ô& "§)¡)ô ð$ ô/˜_ó /ó ð/ñ* ðñð
 ô7 +ó 7ó óð7ð ôv6Ð)ó v6ó ðv6ôr §	¡	ô ô0`˜RŸY™Yô `ñF ðñôF
Ð'=ó F
óðF
ñR ðñôQ
Ð2ó Q
óðQ
ñh ðñô>
Ð/ó >
óð>
ñB ðñô6
Ð$:ó 6
óð6
ðr ôC
Ð"8ó C
ó ðC
ðL ô[
Ð5ó [
ó ð[
ñ| ðñô
]
Ð/°ó ]
óð
]
ò@
�rT   