§
    ‚ŠtjÄß  ã                   óø  — 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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$ 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  e0j8        e9¦  «        Z: G d„ dej;        ¦  «        Z<	 	 dWdej;        dej=        dej=        dej=        dej=        dz  de>dz  d e>d!e)e.         fd"„Z? G d#„ d$ej;        ¦  «        Z@ G d%„ d&ej;        ¦  «        ZA G d'„ d(ej;        ¦  «        ZB G d)„ d*ej;        ¦  «        ZC G d+„ d,ej;        ¦  «        ZD G d-„ d.ej;        ¦  «        ZE G d/„ d0e¦  «        ZF G d1„ d2ej;        ¦  «        ZG G d3„ d4ej;        ¦  «        ZH G d5„ d6ej;        ¦  «        ZIe/ G d7„ d8e'¦  «        ¦   «         ZJ e/d9¬:¦  «        e G d;„ d<e-¦  «        ¦   «         ¦   «         ZKe/ G d=„ d>eJ¦  «        ¦   «         ZL G d?„ d@ej;        ¦  «        ZM G dA„ dBej;        ¦  «        ZN e/dC¬:¦  «         G dD„ dEeJ¦  «        ¦   «         ZO e/dF¬:¦  «         G dG„ dHeJ¦  «        ¦   «         ZP e/dI¬:¦  «         G dJ„ dKeJ¦  «        ¦   «         ZQ e/dL¬:¦  «         G dM„ dNeJ¦  «        ¦   «         ZRe/ G dO„ dPeJ¦  «        ¦   «         ZSe/ G dQ„ dReJ¦  «        ¦   «         ZT e/dS¬:¦  «         G dT„ dUeJe¦  «        ¦   «         ZUg dV¢ZVdS )Xz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                   ó˜   ‡ — 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 )ÚElectraEmbeddingszGConstruct 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        ¦  «        | _        |                      dt%          j        |j        ¦  «                             d¦  «        d¬¦  «         |                      dt%          j        | j                             ¦   «         t$          j        ¬¦  «        d¬¦  «         d S )	N)Úpadding_idx©ÚepsÚposition_ids©r'   éÿÿÿÿF)Ú
persistentÚtoken_type_ids©Ú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Úregister_bufferÚtorchÚarangeÚexpandÚzerosr/   ÚsizeÚlong©ÚselfÚconfigÚ	__class__s     €új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/electra/modeling_electra.pyr7   zElectraEmbeddings.__init__;   s5  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?TÐbhÔbuÐvÑvÔvˆÔÝ#%¤<°Ô0NÐPVÔPeÑ#fÔ#fˆÔ Ý%'¤\°&Ô2HÈ&ÔJ_Ñ%`Ô%`ˆÔ"åœ fÔ&;ÀÔAVÐWÑWÔWˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    Nr   Ú	input_idsr3   r/   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 ó²  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|\  }}|€| j        d d …|||z   …f         }|€�t          | d¦  «        rT| j                             |j        d         d¦  «        }	t          j        |	d|¬¦  «        }	|	                     ||¦  «        }n+t          j        |t          j	        | j        j
        ¬¦  «        }|€|                      |¦  «        }|                      |¦  «        }
||
z   }|                      |¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }|S )Nr1   r3   r   r'   )ÚdimÚindex)r5   Údevice)rK   r/   Úhasattrr3   rI   ÚshaperG   ÚgatherrJ   rL   rZ   r<   r@   r>   rA   rE   )rN   rS   r3   r/   rT   rU   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr@   Ú
embeddingsr>   s                rQ   ÚforwardzElectraEmbeddings.forwardM   su  € ð Ð Ø#Ÿ.š.Ñ*Ô*ˆKˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà!,Ñˆ
�JàÐØÔ,¨Q¨Q¨QÐ0FÈÐVlÑIlÐ0lÐ-lÔmˆLð
 Ð!Ý�tÐ-Ñ.Ô.ð mà*.Ô*=×*DÒ*DÀ\ÔEWÐXYÔEZÐ\^Ñ*_Ô*_Ð'Ý*/¬,Ð7NÐTUÐ]iÐ*jÑ*jÔ*jÐ'Ø!8×!?Ò!?À
ÈJÑ!WÔ!W��å!&¤¨[ÅÄ
ÐSWÔSdÔSkÐ!lÑ!lÔ!l�àÐ Ø ×0Ò0°Ñ;Ô;ˆMØ $× :Ò :¸>Ñ JÔ JÐØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ"5Ñ5ˆ
à—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐrR   )NNNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   rG   Ú
LongTensorÚFloatTensorÚintÚTensorrc   Ú__classcell__©rP   s   @rQ   r*   r*   8   sÄ   ø€ € € € € ØQÐQð
ð 
ð 
ð 
ð 
ð( .2Ø26Ø04Ø26Ø&'ð(ð (àÔ# dÑ*ð(ð Ô(¨4Ñ/ð(ð Ô&¨Ñ-ð	(ð
 Ô(¨4Ñ/ð(ð !$ð(ð 
Œð(ð (ð (ð (ð (ð (ð (ð (rR   r*   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrE   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr1   ç      à¿é   r	   ©rX   )ÚpÚtrainingr'   )
rK   rG   ÚmatmulÚ	transposer   Ú
functionalÚsoftmaxrE   r{   Ú
contiguous)
ro   rp   rq   rr   rs   rt   rE   ru   Úattn_weightsÚattn_outputs
             rQ   Úeager_attention_forwardrƒ   y   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$rR   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 )ÚElectraSelfAttentionFNc                 óÄ  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |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        | _        || _        || _        d S ©Nr   r:   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)rw   )r6   r7   Úhidden_sizeÚnum_attention_headsr[   Ú
ValueErrorrO   rj   Úattention_head_sizeÚall_head_sizert   r   ÚLinearrp   rq   rr   rC   Úattention_probs_dropout_probrE   Ú
is_decoderÚ	is_causalÚ	layer_idx©rN   rO   r‘   r’   rP   s       €rQ   r7   zElectraSelfAttention.__init__—   sG  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð8 FÔ$6ð 8ð 8Ø Ô4ð8ð 8ð 8ñô ð ð ˆŒà#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØÔ/°Ñ5ˆŒå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
å”z &Ô"EÑFÔFˆŒà Ô+ˆŒØ"ˆŒØ"ˆŒˆˆrR   Úhidden_statesrs   Úpast_key_valuesru   rV   c                 óÈ  — |j         d d…         }g |¢d‘| j        ‘R } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }	|�=|}
t          |t          ¦  «        r|j	        }
|
 
                    ||	| j        ¦  «        \  }}	t          j        | j        j        t           ¦  «        } || |||	|f| j        sdn| j        j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }||fS )Nr1   r'   rx   rn   ©rE   rt   )r\   rŒ   rp   Úviewr}   rq   rr   Ú
isinstancer   Úself_attention_cacheÚupdater’   r   Úget_interfacerO   Ú_attn_implementationrƒ   r{   rE   rz   rt   Úreshaper€   )rN   r”   rs   r•   ru   r^   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚcurrent_past_key_valuesÚattention_interfacer‚   r�   s                 rQ   rc   zElectraSelfAttention.forward¯   s¨  € ð $Ô)¨#¨2¨#Ô.ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆð 5�d—j’j Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆØ0�D—H’H˜]Ñ+Ô+Ô0°,Ð?×IÒIÈ!ÈQÑOÔOˆ	Ø4�d—j’j Ñ/Ô/Ô4°lÐC×MÒMÈaÐQRÑSÔSˆàÐ&à&5Ð#Ý˜/Õ+>Ñ?Ô?ð OØ*9Ô*NÐ'ð &=×%CÒ%CÀIÈ{Ð\`Ô\jÑ%kÔ%kÑ"ˆI�{å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð@�C�C°$´,´.Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(rR   ©FN)NN©rd   re   rf   r7   rG   rk   ri   r   r   r!   Útuplerc   rl   rm   s   @rQ   r…   r…   –   s©   ø€ € € € € ð#ð #ð #ð #ð #ð #ð6 48Ø(,ð	')ð ')à”|ð')ð Ô)¨DÑ0ð')ð  ™ð	')ð
 Ð+Ô,ð')ð 
ˆuŒ|Ô	ð')ð ')ð ')ð ')ð ')ð ')ð ')ð ')rR   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 )ÚElectraCrossAttentionFNc                 ó¬  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |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        ¦  «        | _        || _        || _        d S r‡   )r6   r7   r‰   rŠ   r[   r‹   rO   rj   rŒ   r�   rt   r   rŽ   rp   rq   rr   rC   r�   rE   r‘   r’   r“   s       €rQ   r7   zElectraCrossAttention.__init__Û   s=  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð8 FÔ$6ð 8ð 8Ø Ô4ð8ð 8ð 8ñô ð ð ˆŒà#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØÔ/°Ñ5ˆŒå”Y˜vÔ1°4Ô3EÑFÔFˆŒ
Ý”9˜VÔ/°Ô1CÑDÔDˆŒÝ”Y˜vÔ1°4Ô3EÑFÔFˆŒ
å”z &Ô"EÑFÔFˆŒà"ˆŒØ"ˆŒˆˆrR   r”   Úencoder_hidden_statesrs   r•   ru   rV   c                 óì  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|�|j                             | j        ¦  «        nd}	|�;|	r9|j        j	        | j                 j
        }
|j        j	        | j                 j        }nÈg |j         d d…         ¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }
|                      |¦  «                             |¦  «                             dd¦  «        }|�3|j                             |
|| j        ¦  «        \  }
}d|j        | j        <   t          j        | j        j        t&          ¦  «        } || ||
||f| j        sdn| j        j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }||fS )Nr1   r'   rx   FTrn   r—   )r\   rŒ   rp   r˜   r}   Ú
is_updatedÚgetr’   Úcross_attention_cacheÚlayersÚkeysÚvaluesrq   rr   r›   r   rœ   rO   r�   rƒ   r{   rE   rz   rt   rž   r€   )rN   r”   r«   rs   r•   ru   r^   rŸ   r    r­   r¡   r¢   Úkv_shaper¤   r‚   r�   s                   rQ   rc   zElectraCrossAttention.forwardò   s-  € ð $Ô)¨#¨2¨#Ô.ˆàC˜ÐC bÐC¨$Ô*BÐCÐCˆð —j’j Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆàGVÐGb�_Ô/×3Ò3°D´NÑCÔCÐCÐhmˆ
ØÐ&¨:Ð&à'Ô=ÔDÀTÄ^ÔTÔYˆIØ)Ô?ÔFÀtÄ~ÔVÔ]ˆKˆKàXÐ.Ô4°S°b°SÔ9ÐX¸2ÐX¸tÔ?WÐXÐXˆHØŸšÐ!6Ñ7Ô7×<Ò<¸XÑFÔF×PÒPÐQRÐTUÑVÔVˆIØŸ*š*Ð%:Ñ;Ô;×@Ò@ÀÑJÔJ×TÒTÐUVÐXYÑZÔZˆKàÐ*à)8Ô)N×)UÒ)UØ˜{¨D¬Nñ*ô *Ñ&�	˜;ð >B�Ô*¨4¬>Ñ:å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð@�C�C°$´,´.Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(rR   r¥   )NNN)rd   re   rf   r7   rG   rk   ri   r   r   r!   r§   rc   rl   rm   s   @rQ   r©   r©   Ú   s¿   ø€ € € € € ð#ð #ð #ð #ð #ð #ð4 ;?Ø37Ø6:ð1)ð 1)à”|ð1)ð  %Ô0°4Ñ7ð1)ð Ô)¨DÑ0ð	1)ð
 -¨tÑ3ð1)ð Ð+Ô,ð1)ð 
ˆuŒ|Ô	ð1)ð 1)ð 1)ð 1)ð 1)ð 1)ð 1)ð 1)rR   r©   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚElectraSelfOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr-   )r6   r7   r   rŽ   r‰   ÚdenserA   rB   rC   rD   rE   rM   s     €rQ   r7   zElectraSelfOutput.__init__(  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrR   r”   Úinput_tensorrV   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S ©N©r¸   rE   rA   ©rN   r”   r¹   s      rQ   rc   zElectraSelfOutput.forward.  ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐrR   ©rd   re   rf   r7   rG   rk   rc   rl   rm   s   @rQ   rµ   rµ   '  ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð rR   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 )ÚElectraAttentionFNc                 óÄ   •— t          ¦   «                              ¦   «          || _        |rt          nt          } ||||¬¦  «        | _        t          |¦  «        | _        d S )N©r‘   r’   )r6   r7   Úis_cross_attentionr©   r…   rN   rµ   Úoutput)rN   rO   r‘   r’   rÅ   Úattention_classrP   s         €rQ   r7   zElectraAttention.__init__7  s]   ø€ Ý‰Œ×ÒÑÔÐØ"4ˆÔØ3EÐ_Õ/Ð/ÕK_ˆØ#�O F°iÈ9ÐUÑUÔUˆŒ	Ý'¨Ñ/Ô/ˆŒˆˆrR   r”   rs   r«   Úencoder_attention_maskr•   ru   rV   c                 óv   — | j         s|n|} | j        |f|||dœ|¤Ž\  }}|                      ||¦  «        }||fS )N)r«   rs   r•   )rÅ   rN   rÆ   )	rN   r”   rs   r«   rÈ   r•   ru   Úattention_outputr�   s	            rQ   rc   zElectraAttention.forward>  sq   € ð 04Ô/FÐb˜˜ÐLbˆØ)2¨¬Øð*
à"7Ø)Ø+ð	*
ð *
ð
 ð*
ð *
Ñ&Ð˜,ð  Ÿ;š;Ð'7¸ÑGÔGÐØ Ð-Ð-rR   )FNF©NNNNr¦   rm   s   @rQ   rÂ   rÂ   6  sÓ   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð 0ð 48Ø:>Ø;?Ø(,ð.ð .à”|ð.ð Ô)¨DÑ0ð.ð  %Ô0°4Ñ7ð	.ð
 !&Ô 1°DÑ 8ð.ð  ™ð.ð Ð+Ô,ð.ð 
ˆuŒ|Ô	ð.ð .ð .ð .ð .ð .ð .ð .rR   rÂ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚElectraIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r»   )r6   r7   r   rŽ   r‰   Úintermediate_sizer¸   r™   Ú
hidden_actÚstrr   Úintermediate_act_fnrM   s     €rQ   r7   zElectraIntermediate.__init__U  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$rR   r”   rV   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r»   )r¸   rÒ   )rN   r”   s     rQ   rc   zElectraIntermediate.forward]  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐrR   r¿   rm   s   @rQ   rÍ   rÍ   T  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð rR   rÍ   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚElectraOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S r·   )r6   r7   r   rŽ   rÏ   r‰   r¸   rA   rB   rC   rD   rE   rM   s     €rQ   r7   zElectraOutput.__init__e  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrR   r”   r¹   rV   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r»   r¼   r½   s      rQ   rc   zElectraOutput.forwardk  r¾   rR   r¿   rm   s   @rQ   rÕ   rÕ   d  rÀ   rR   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 )ÚElectraLayerNc                 ó–  •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          ||j        |¬¦  «        | _        |j        | _        |j        | _        | j        r1| j        st          | › d�¦  «        ‚t	          |d|d¬¦  «        | _	        t          |¦  «        | _        t          |¦  «        | _        d S )Nr'   rÄ   z> should be used as a decoder model if cross attention is addedFT)r‘   r’   rÅ   )r6   r7   Úchunk_size_feed_forwardÚseq_len_dimrÂ   r�   Ú	attentionÚadd_cross_attentionr‹   ÚcrossattentionrÍ   ÚintermediaterÕ   rÆ   )rN   rO   r’   rP   s      €rQ   r7   zElectraLayer.__init__t  sÐ   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ)¨&¸FÔ<MÐYbÐcÑcÔcˆŒØ Ô+ˆŒØ#)Ô#=ˆÔ ØÔ#ð 	Ø”?ð jÝ  DÐ!hÐ!hÐ!hÑiÔiÐiÝ"2ØØØ#Ø#'ð	#ñ #ô #ˆDÔõ 0°Ñ7Ô7ˆÔÝ# FÑ+Ô+ˆŒˆˆrR   r”   rs   r«   rÈ   r•   ru   rV   c                 óü   —  | j         ||fd|i|¤Ž\  }}|}	| j        r=|�;t          | 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�   r[   r‹   rß   r   Úfeed_forward_chunkrÛ   rÜ   )rN   r”   rs   r«   rÈ   r•   ru   Úself_attention_outputÚ_rÊ   Úcross_attention_outputÚlayer_outputs               rQ   rc   zElectraLayer.forward‡  s  € ð $2 4¤>ØØð$
ð $
ð ,ð$
ð ð	$
ð $
Ñ Ð˜qð 1ÐàŒ?ð 	6Ð4Ð@Ý˜4Ð!1Ñ2Ô2ð Ý ðD¸dð Dð Dð Dñô ð ð
 )<¨Ô(;Ø%ØØ%Ø&ð	)ð )ð
 !0ð)ð ð)ð )Ñ%Ð" Að  6Ðå0ØÔ# TÔ%AÀ4ÔCSÐUeñ
ô 
ˆð ÐrR   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r»   )rà   rÆ   )rN   rÊ   Úintermediate_outputræ   s       rQ   râ   zElectraLayer.feed_forward_chunk®  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐrR   r»   rË   )rd   re   rf   r7   rG   rk   ri   r   r   r!   rc   râ   rl   rm   s   @rQ   rÙ   rÙ   s  sÞ   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð ,ð, 48Ø:>Ø;?Ø(,ð%ð %à”|ð%ð Ô)¨DÑ0ð%ð  %Ô0°4Ñ7ð	%ð
 !&Ô 1°DÑ 8ð%ð  ™ð%ð Ð+Ô,ð%ð 
Œð%ð %ð %ð %ðNð ð ð ð ð ð rR   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 )ÚElectraEncoderc                 óÆ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r’   )rÙ   )Ú.0ÚirO   s     €rQ   ú
<listcomp>z+ElectraEncoder.__init__.<locals>.<listcomp>¹  s&   ø€ Ð#oÐ#oÐ#oÈ!¥L°À1Ð$EÑ$EÔ$EÐ#oÐ#oÐ#orR   )r6   r7   rO   r   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerrM   s    `€rQ   r7   zElectraEncoder.__init__¶  sW   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#oÐ#oÐ#oÐ#oÍuÐU[ÔUmÑOnÔOnÐ#oÑ#oÔ#oÑpÔpˆŒ
ˆ
ˆ
rR   Nr”   rs   r«   rÈ   r•   Ú	use_cacheru   rV   c                 ó|   — t          | j        ¦  «        D ]\  }}	 |	|||f||dœ|¤Ž}Œt          ||r|nd ¬¦  «        S )N)rÈ   r•   ©Úlast_hidden_stater•   )Ú	enumerateró   r   )
rN   r”   rs   r«   rÈ   r•   rô   ru   rî   Úlayer_modules
             rQ   rc   zElectraEncoder.forward»  s�   € õ  )¨¬Ñ4Ô4ð 	ð 	‰OˆAˆ|Ø(˜LØØØ%ðð (>Ø /ðð ð ðð ˆMˆMõ 9Ø+Ø/8ÐB˜O˜O¸dð
ñ 
ô 
ð 	
rR   )NNNNN)rd   re   rf   r7   rG   rk   ri   r   Úboolr   r!   r§   r   rc   rl   rm   s   @rQ   rê   rê   µ  sê   ø€ € € € € ðqð qð qð qð qð 48Ø:>Ø;?Ø(,Ø!%ð
ð 
à”|ð
ð Ô)¨DÑ0ð
ð  %Ô0°4Ñ7ð	
ð
 !&Ô 1°DÑ 8ð
ð  ™ð
ð ˜$‘;ð
ð Ð+Ô,ð
ð 
ˆuŒ|Ô	ÐHÑ	Hð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rR   rê   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚElectraDiscriminatorPredictionszEPrediction module for the discriminator, made up of two dense layers.c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        ¦  «        | _        t          j        |j        d¦  «        | _	        || _
        d S ©Nr'   )r6   r7   r   rŽ   r‰   r¸   r   rÐ   Ú
activationÚdense_predictionrO   rM   s     €rQ   r7   z(ElectraDiscriminatorPredictions.__init__Ø  sf   ø€ Ý‰Œ×ÒÑÔÐå”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý(¨Ô):Ñ;Ô;ˆŒÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔØˆŒˆˆrR   c                 óª   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «                             d¦  «        }|S )Nr1   )r¸   rÿ   r   Úsqueeze)rN   Údiscriminator_hidden_statesr”   Úlogitss       rQ   rc   z'ElectraDiscriminatorPredictions.forwardà  sK   € ØŸ
š
Ð#>Ñ?Ô?ˆØŸš¨Ñ6Ô6ˆØ×&Ò& }Ñ5Ô5×=Ò=¸bÑAÔAˆàˆrR   ©rd   re   rf   rg   r7   rc   rl   rm   s   @rQ   rü   rü   Õ  sM   ø€ € € € € ØOÐOðð ð ð ð ðð ð ð ð ð ð rR   rü   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚElectraGeneratorPredictionszAPrediction module for the generator, made up of two dense layers.c                 ó  •— t          ¦   «                              ¦   «          t          d¦  «        | _        t	          j        |j        |j        ¬¦  «        | _        t	          j        |j	        |j        ¦  «        | _
        d S )NÚgelur-   )r6   r7   r   rÿ   r   rA   r:   rB   rŽ   r‰   r¸   rM   s     €rQ   r7   z$ElectraGeneratorPredictions.__init__ë  sa   ø€ Ý‰Œ×ÒÑÔÐå(¨Ñ0Ô0ˆŒÝœ fÔ&;ÀÔAVÐWÑWÔWˆŒÝ”Y˜vÔ1°6Ô3HÑIÔIˆŒ
ˆ
ˆ
rR   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r»   )r¸   rÿ   rA   )rN   Úgenerator_hidden_statesr”   s      rQ   rc   z#ElectraGeneratorPredictions.forwardò  s<   € ØŸ
š
Ð#:Ñ;Ô;ˆØŸš¨Ñ6Ô6ˆØŸš }Ñ5Ô5ˆàÐrR   r  rm   s   @rQ   r  r  è  sR   ø€ € € € € ØKÐKðJð Jð Jð Jð Jðð ð ð ð ð ð rR   r  c                   óF   ‡ — e Zd ZeZdZdZdZdZdZ	dZ
eeedœZˆ fd„Zˆ xZS )ÚElectraPreTrainedModelÚelectraT)r”   Ú
attentionsÚcross_attentionsc                 óH  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rjt	          j        |j        t          j        |j        j	        d         ¦  «         
                    d¦  «        ¦  «         t	          j        |j        ¦  «         d S d S )Nr1   r0   )r6   Ú_init_weightsr™   r*   ÚinitÚcopy_r/   rG   rH   r\   rI   Úzeros_r3   )rN   ro   rP   s     €rQ   r  z$ElectraPreTrainedModel._init_weights	  s‹   ø€ Ý‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ/Ñ0Ô0ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/rR   )rd   re   rf   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  rl   rm   s   @rQ   r  r  ú  sv   ø€ € € € € à €LØ!ÐØ&*Ð#ØÐØ€NØÐØ"&Ðà%Ø*Ø1ðð Ðð/ð /ð /ð /ð /ð /ð /ð /ð /rR   r  z3
    Output type of [`ElectraForPreTraining`].
    )Ú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
ej                 dz  ed<   dZe
ej                 dz  ed<   dS )ÚElectraForPreTrainingOutputa+  
    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  )rd   re   rf   rg   r!  rG   ri   Ú__annotations__r  r”   r§   r  © rR   rQ   r   r     sˆ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6rR   r   c                   ób  ‡ — e Zd Zˆ 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e	j                 dz  dedz  dee         dee	j
                 ez  fd„¦   «         ¦   «         ¦   «         Zd„ Zˆ xZS )ÚElectraModelc                 óF  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        |j        k    r$t          j        |j        |j        ¦  «        | _        t          |¦  «        | _
        || _        d| _        |                      ¦   «          d S )NF)r6   r7   r*   rb   r:   r‰   r   rŽ   Úembeddings_projectrê   ÚencoderrO   Úgradient_checkpointingÚ	post_initrM   s     €rQ   r7   zElectraModel.__init__&  s‰   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý+¨FÑ3Ô3ˆŒàÔ  FÔ$6Ò6Ð6Ý&(¤i°Ô0EÀvÔGYÑ&ZÔ&ZˆDÔ#å% fÑ-Ô-ˆŒØˆŒØ&+ˆÔ#à�ŠÑÔÐÐÐrR   c                 ó   — | j         j        S r»   ©rb   r<   ©rN   s    rQ   Úget_input_embeddingsz!ElectraModel.get_input_embeddings3  s   € ØŒÔ.Ð.rR   c                 ó   — || j         _        d S r»   r,  )rN   rr   s     rQ   Úset_input_embeddingsz!ElectraModel.set_input_embeddings6  s   € Ø*/ˆŒÔ'Ð'Ð'rR   NrS   rs   r3   r/   rT   r«   rÈ   r•   rô   ru   rV   c
           
      ór  — |d u |d uz  rt          d¦  «        ‚| j        j        r|	�|	n| j        j        }	nd}	|	r[|€Y|€| j        j        r6t          t          | j        ¬¦  «        t          | j        ¬¦  «        ¦  «        nt          | j        ¬¦  «        }|�|                     ¦   «         nd}|                      |||||¬¦  «        }t          | d¦  «        r|  
                    |¦  «        }|                      |||||¬¦  «        \  }} | j        |f|||||	|dœ|
¤Ž}t          |j        |j        ¬	¦  «        S )
Nz:You must specify exactly one of input_ids or inputs_embedsF)rO   r   )rS   r/   r3   rT   rU   r'  )rs   rÈ   Úembedding_outputr«   r•   )rs   r«   rÈ   r•   rô   r/   rö   )r‹   rO   r�   rô   Úis_encoder_decoderr   r   Úget_seq_lengthrb   r[   r'  Ú_create_attention_masksr(  r   r÷   r•   )rN   rS   rs   r3   r/   rT   r«   rÈ   r•   rô   ru   rU   r2  Úencoder_outputss                 rQ   rc   zElectraModel.forward9  s»  € ð  ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàŒ;Ô!ð 	Ø%.Ð%:˜	˜	ÀÄÔ@UˆIˆIàˆIàð 	˜Ð0ð )Ð4¸¼Ô8VÐ4õ $¥L¸¼Ð$DÑ$DÔ$DÅlÐZ^ÔZeÐFfÑFfÔFfÑgÔgÐgå!¨¬Ð5Ñ5Ô5ð ð FUÐE` ×!?Ò!?Ñ!AÔ!AÐ!AÐfgÐàŸ?š?ØØ%Ø)Ø'Ø#9ð +ñ 
ô 
Ðõ �4Ð-Ñ.Ô.ð 	IØ#×6Ò6Ð7GÑHÔHÐà15×1MÒ1MØ)Ø#9Ø-Ø"7Ø+ð 2Nñ 2
ô 2
Ñ.ˆÐ.ð '˜$œ,Øð	
à)Ø"7Ø#9Ø+ØØ%ð	
ð 	
ð ð	
ð 	
ˆõ 9Ø-Ô?Ø+Ô;ð
ñ 
ô 
ð 	
rR   c                 ó¶   — | j         j        rt          | j         |||¬¦  «        }nt          | j         ||¬¦  «        }|�t          | j         |||¬¦  «        }||fS )N)rO   rT   rs   r•   )rO   rT   rs   )rO   rT   rs   r«   )rO   r�   r   r   )rN   rs   rÈ   r2  r«   r•   s         rQ   r5  z$ElectraModel._create_attention_masks}  s�   € ð Œ;Ô!ð 	Ý/Ø”{Ø.Ø-Ø /ð	ñ ô ˆNˆNõ 7Ø”{Ø.Ø-ðñ ô ˆNð "Ð-Ý%>Ø”{Ø.Ø5Ø&;ð	&ñ &ô &Ð"ð Ð5Ð5Ð5rR   )	NNNNNNNNN)rd   re   rf   r7   r.  r0  r%   r&   r"   rG   rk   Úlistri   rú   r   r!   r§   r   rc   r5  rl   rm   s   @rQ   r%  r%  $  s~  ø€ € € € € ðð ð ð ð ð/ð /ð /ð0ð 0ð 0ð  ØØð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø:>Ø!%ð>
ð >
à”< $Ñ&ð>
ð œ tÑ+ð>
ð œ tÑ+ð	>
ð
 ”l TÑ)ð>
ð ”| dÑ*ð>
ð  %œ|¨dÑ2ð>
ð !&¤¨tÑ 3ð>
ð ˜eÔ/Ô0°4Ñ7ð>
ð ˜$‘;ð>
ð Ð+Ô,ð>
ð 
ˆuŒ|Ô	ÐAÑ	Að>
ð >
ð >
ñ „^ñ „_ñ  Ôð>
ðB6ð 6ð 6ð 6ð 6ð 6ð 6rR   r%  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚElectraClassificationHeadz-Head for sentence-level classification tasks.c                 ó\  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        |j        �|j        n|j        }t          d¦  «        | _	        t          j
        |¦  «        | _        t          j        |j        |j        ¦  «        | _        d S )Nr	  )r6   r7   r   rŽ   r‰   r¸   Úclassifier_dropoutrD   r   rÿ   rC   rE   Ú
num_labelsÚout_proj©rN   rO   r<  rP   s      €rQ   r7   z"ElectraClassificationHead.__init__¡  sŽ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
à)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ )¨Ñ0Ô0ˆŒÝ”zÐ"4Ñ5Ô5ˆŒÝœ	 &Ô"4°fÔ6GÑHÔHˆŒˆˆrR   c                 óö   — |d d …dd d …f         }|                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                       |¦  «        }|                      |¦  «        }|S )Nr   )rE   r¸   rÿ   r>  )rN   Úfeaturesru   Úxs       rQ   rc   z!ElectraClassificationHead.forward«  sn   € Ø�Q�Q�Q˜˜1˜1˜1�WÔˆØ�LŠL˜‰OŒOˆØ�JŠJ�q‰MŒMˆØ�OŠO˜AÑÔˆØ�LŠL˜‰OŒOˆØ�MŠM˜!ÑÔˆØˆrR   r  rm   s   @rQ   r:  r:  ž  sR   ø€ € € € € Ø7Ð7ðIð Ið Ið Ið Iðð ð ð ð ð ð rR   r:  c                   ód   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dej        dz  dej        fd„Z	ˆ xZ
S )
ÚElectraSequenceSummaryaÏ  
    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.
    rO   c                 óV  •— t          ¦   «                              ¦   «          t          |dd¦  «        | _        | j        dk    rt          ‚t          j        ¦   «         | _        t          |d¦  «        rW|j	        rPt          |d¦  «        r|j
        r|j        dk    r|j        }n|j        }t          j        |j        |¦  «        | _        t          |dd ¦  «        }|rt          |¦  «        nt          j        ¦   «         | _        t          j        ¦   «         | _        t          |d¦  «        r)|j        dk    rt          j        |j        ¦  «        | _        t          j        ¦   «         | _        t          |d	¦  «        r+|j        dk    r"t          j        |j        ¦  «        | _        d S d S d S )
NÚsummary_typeÚlastÚattnÚsummary_use_projÚsummary_proj_to_labelsr   Úsummary_activationÚsummary_first_dropoutÚsummary_last_dropout)r6   r7   ÚgetattrrF  ÚNotImplementedErrorr   ÚIdentityÚsummaryr[   rI  rJ  r=  r‰   rŽ   r   rÿ   Úfirst_dropoutrL  rC   Úlast_dropoutrM  )rN   rO   Únum_classesÚactivation_stringrP   s       €rQ   r7   zElectraSequenceSummary.__init__Ð  sœ  ø€ Ý‰Œ×ÒÑÔÐå# F¨N¸FÑCÔCˆÔØÔ Ò&Ð&õ &Ð%å”{‘}”}ˆŒÝ�6Ð-Ñ.Ô.ð 	F°6Ô3Jð 	FÝ�vÐ7Ñ8Ô8ð 1¸VÔ=Zð 1Ð_eÔ_pÐstÒ_tÐ_tØ$Ô/��à$Ô0�Ýœ9 VÔ%7¸ÑEÔEˆDŒLå# FÐ,@À$ÑGÔGÐØIZÐ$m¥NÐ3DÑ$EÔ$EÐ$EÕ`bÔ`kÑ`mÔ`mˆŒåœ[™]œ]ˆÔÝ�6Ð2Ñ3Ô3ð 	J¸Ô8TÐWXÒ8XÐ8XÝ!#¤¨FÔ,HÑ!IÔ!IˆDÔåœK™MœMˆÔÝ�6Ð1Ñ2Ô2ð 	H°vÔ7RÐUVÒ7VÐ7VÝ "¤
¨6Ô+FÑ GÔ GˆDÔÐÐð	Hð 	HÐ7VÐ7VrR   Nr”   Ú	cls_indexrV   c                 ó:  — | j         dk    r|dd…df         }�n-| j         dk    r|dd…df         }�n| j         dk    r|                     d¬¦  «        }nò| j         d	k    rÕ|€=t          j        |d
dd…dd…f         |j        d         dz
  t          j        ¬¦  «        }nl|                     d¦  «                             d¦  «        }|                     d|                     ¦   «         dz
  z  | 	                    d¦  «        fz   ¦  «        }| 
                    d|¦  «                             d¦  «        }n| j         dk    rt          ‚|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S )ak  
        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.
        rG  Nr1   Úfirstr   Úmeanr'   ry   rV  .éþÿÿÿr4   )r1   rH  )rF  rY  rG   Ú	full_liker\   rL   Ú	unsqueezerI   rX   rK   r]   r  rO  rR  rQ  rÿ   rS  )rN   r”   rV  rÆ   s       rQ   rc   zElectraSequenceSummary.forwardí  sª  € ð Ô Ò&Ð&Ø" 1 1 1 b 5Ô)ˆF‰FØÔ 'Ò)Ð)Ø" 1 1 1 a 4Ô(ˆF‰FØÔ &Ò(Ð(Ø"×'Ò'¨AÐ'Ñ.Ô.ˆFˆFØÔ +Ò-Ð-ØÐ Ý!œOØ! # r¨ r¨1¨1¨1 *Ô-Ø!Ô'¨Ô+¨aÑ/Ýœ*ðñ ô �	�	ð &×/Ò/°Ñ3Ô3×=Ò=¸bÑAÔA�	Ø%×,Ò,¨U°i·m²m±o´oÈÑ6IÑ-JÈm×N`ÒN`ÐacÑNdÔNdÐMfÑ-fÑgÔg�	à"×)Ò)¨"¨iÑ8Ô8×@Ò@ÀÑDÔDˆFˆFØÔ &Ò(Ð(Ý%Ð%à×#Ò# FÑ+Ô+ˆØ—’˜fÑ%Ô%ˆØ—’ Ñ(Ô(ˆØ×"Ò" 6Ñ*Ô*ˆàˆrR   r»   )rd   re   rf   rg   r(   r7   rG   ri   rh   rc   rl   rm   s   @rQ   rD  rD  ¶  s›   ø€ € € € € ðð ð2H˜}ð Hð Hð Hð Hð Hð Hð< VZð)ð )Ø"Ô.ð)Ø;@Ô;KÈdÑ;Rð)à	Ô	ð)ð )ð )ð )ð )ð )ð )ð )rR   rD  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                   óü   ‡ — 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 )Ú ElectraForSequenceClassificationc                 óè   •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S r»   )	r6   r7   r=  rO   r%  r  r:  Ú
classifierr*  rM   s     €rQ   r7   z)ElectraForSequenceClassification.__init__   sb   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒÝ# FÑ+Ô+ˆŒÝ3°FÑ;Ô;ˆŒð 	�ŠÑÔÐÐÐrR   NrS   rs   r3   r/   rT   Úlabelsru   rV   c           	      ó\  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
d}|��Z| j        j        €f| j        dk    rd| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j        k    rd| j        _        nd| j        _        | j        j        dk    rWt          ¦   «         }| j        dk    r1 ||
 
                    ¦   «         | 
                    ¦   «         ¦  «        }nŽ ||
|¦  «        }n�| j        j        dk    rGt          ¦   «         } ||
                     d	| 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).
        T©rs   r3   r/   rT   Úreturn_dictr   Nr'   Ú
regressionÚsingle_label_classificationÚmulti_label_classificationr1   ©r!  r  r”   r  )r  r`  rO   Úproblem_typer=  r5   rG   rL   rj   r   r  r   r˜   r   r   r”   r  )rN   rS   rs   r3   r/   rT   ra  ru   r  Úsequence_outputr  r!  Úloss_fcts                rQ   rc   z(ElectraForSequenceClassification.forward*  sÌ  € ð$ '3 d¤lØð'
à)Ø)Ø%Ø'Øð'
ð '
ð ð'
ð '
Ð#ð 6°aÔ8ˆØ—’ Ñ1Ô1ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ñ @Ô @À&Ç+Â+ÈbÁ/Ä/ÑRÔR��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�å'ØØØ5ÔCØ2Ô=ð	
ñ 
ô 
ð 	
rR   ©NNNNNN)rd   re   rf   r7   r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   r^  r^    s  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ð9
ð 9
à”< $Ñ&ð9
ð œ tÑ+ð9
ð œ tÑ+ð	9
ð
 ”l TÑ)ð9
ð ”| dÑ*ð9
ð ”˜tÑ#ð9
ð Ð+Ô,ð9
ð 
ˆuŒ|Ô	Ð7Ñ	7ð9
ð 9
ð 9
ñ „^ñ Ôð9
ð 9
ð 9
ð 9
ð 9
rR   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                   óü   ‡ — 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 )ÚElectraForPreTrainingc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r»   )r6   r7   r%  r  rü   Údiscriminator_predictionsr*  rM   s     €rQ   r7   zElectraForPreTraining.__init__p  sP   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å# FÑ+Ô+ˆŒÝ)HÈÑ)PÔ)PˆÔ&à�ŠÑÔÐÐÐrR   NrS   rs   r3   r/   rT   ra  ru   rV   c           	      ó0  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
d}|�Åt          j        ¦   «         }|�s|                     d|	j        d         ¦  «        dk    }|
                     d|	j        d         ¦  «        |         }||         } |||                     ¦   «         ¦  «        }n= ||
                     d|	j        d         ¦  «        |                     ¦   «         ¦  «        }t          ||
|j        |j	        ¬¦  «        S )am  
        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]
        ```Trc  r   Nr1   r'   rh  )
r  rp  r   r   r˜   r\   Úfloatr   r”   r  )rN   rS   rs   r3   r/   rT   ra  ru   r  Údiscriminator_sequence_outputr  r!  rk  Úactive_lossÚactive_logitsÚactive_labelss                   rQ   rc   zElectraForPreTraining.forwardx  sP  € ðV '3 d¤lØð'
à)Ø)Ø%Ø'Øð'
ð '
ð ð'
ð '
Ð#ð )DÀAÔ(FÐ%à×/Ò/Ð0MÑNÔNˆàˆØÐÝÔ+Ñ-Ô-ˆHØÐ)Ø,×1Ò1°"Ð6SÔ6YÐZ[Ô6\Ñ]Ô]ÐabÒb�Ø &§¢¨BÐ0MÔ0SÐTUÔ0VÑ WÔ WÐXcÔ d�Ø & {Ô 3�Ø�x ¨}×/BÒ/BÑ/DÔ/DÑEÔE��à�x §¢¨BÐ0MÔ0SÐTUÔ0VÑ WÔ WÐY_×YeÒYeÑYgÔYgÑhÔh�å*ØØØ5ÔCØ2Ô=ð	
ñ 
ô 
ð 	
rR   rl  )rd   re   rf   r7   r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   rn  rn  h  s  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ðF
ð F
à”< $Ñ&ðF
ð œ tÑ+ðF
ð œ tÑ+ð	F
ð
 ”l TÑ)ðF
ð ”| dÑ*ðF
ð ”˜tÑ#ðF
ð Ð+Ô,ðF
ð 
ˆuŒ|Ô	Ð:Ñ	:ðF
ð F
ð F
ñ „^ñ ÔðF
ð F
ð F
ð F
ð F
rR   rn  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                   ó  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 dde	j
        dz  de	j
        dz  d	e	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 )ÚElectraForMaskedLMúgenerator_lm_head.weightú)electra.embeddings.word_embeddings.weightc                 ó
  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          j        |j        |j	        ¦  «        | _
        |                      ¦   «          d S r»   )r6   r7   r%  r  r  Úgenerator_predictionsr   rŽ   r:   r9   Úgenerator_lm_headr*  rM   s     €rQ   r7   zElectraForMaskedLM.__init__Î  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å# FÑ+Ô+ˆŒÝ%@ÀÑ%HÔ%HˆÔ"å!#¤¨6Ô+@À&ÔBSÑ!TÔ!TˆÔà�ŠÑÔÐÐÐrR   c                 ó   — | j         S r»   ©r}  r-  s    rQ   Úget_output_embeddingsz(ElectraForMaskedLM.get_output_embeddingsØ  ó   € ØÔ%Ð%rR   c                 ó   — || _         d S r»   r  )rN   r<   s     rQ   Úset_output_embeddingsz(ElectraForMaskedLM.set_output_embeddingsÛ  s   € Ø!0ˆÔÐÐrR   NrS   rs   r3   r/   rT   ra  ru   rV   c           	      óp  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
|                      |
¦  «        }
d}|�Pt          j        ¦   «         } ||
                     d| 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]`
        Trc  r   Nr1   rh  )r  r|  r}  r   r   r˜   rO   r9   r   r”   r  )rN   rS   rs   r3   r/   rT   ra  ru   r  Úgenerator_sequence_outputÚprediction_scoresr!  rk  s                rQ   rc   zElectraForMaskedLM.forwardÞ  sî   € ð$ #/ $¤,Øð#
à)Ø)Ø%Ø'Øð#
ð #
ð ð#
ð #
Ðð %<¸AÔ$>Ð!à ×6Ò6Ð7PÑQÔQÐØ ×2Ò2Ð3DÑEÔEÐàˆàÐÝÔ*Ñ,Ô,ˆHØ�8Ð-×2Ò2°2°t´{Ô7MÑNÔNÐPV×P[ÒP[Ð\^ÑP_ÔP_Ñ`Ô`ˆDåØØ$Ø1Ô?Ø.Ô9ð	
ñ 
ô 
ð 	
rR   rl  )rd   re   rf   Ú_tied_weights_keysr7   r€  rƒ  r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   rx  rx  Ã  s2  ø€ € € € € ð 5Ð6aÐbÐðð ð ð ð ð&ð &ð &ð1ð 1ð 1ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ð)
ð )
à”< $Ñ&ð)
ð œ tÑ+ð)
ð œ tÑ+ð	)
ð
 ”l TÑ)ð)
ð ”| dÑ*ð)
ð ”˜tÑ#ð)
ð Ð+Ô,ð)
ð 
ˆuŒ|Ô	˜~Ñ	-ð)
ð )
ð )
ñ „^ñ Ôð)
ð )
ð )
ð )
ð )
rR   rx  z‰
    Electra model with a token classification head on top.

    Both the discriminator and generator may be loaded into this model.
    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 )ÚElectraForTokenClassificationc                 óV  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _	        t          j
        |j        |j        ¦  «        | _        |                      ¦   «          d S r»   )r6   r7   r=  r%  r  r<  rD   r   rC   rE   rŽ   r‰   r`  r*  r?  s      €rQ   r7   z&ElectraForTokenClassification.__init__  s“   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå# FÑ+Ô+ˆŒà)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒà�ŠÑÔÐÐÐrR   NrS   rs   r3   r/   rT   ra  ru   rV   c           	      ó\  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|�Ft          ¦   «         } ||
                     d| 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]`.
        Trc  r   Nr1   rh  )	r  rE   r`  r   r˜   r=  r   r”   r  )rN   rS   rs   r3   r/   rT   ra  ru   r  rs  r  r!  rk  s                rQ   rc   z%ElectraForTokenClassification.forward!  sÛ   € ð  '3 d¤lØð'
à)Ø)Ø%Ø'Øð'
ð '
ð ð'
ð '
Ð#ð )DÀAÔ(FÐ%à(,¯ªÐ5RÑ(SÔ(SÐ%Ø—’Ð!>Ñ?Ô?ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDå$ØØØ5ÔCØ2Ô=ð	
ñ 
ô 
ð 	
rR   rl  )rd   re   rf   r7   r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   r‰  r‰    s  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ð&
ð &
à”< $Ñ&ð&
ð œ tÑ+ð&
ð œ tÑ+ð	&
ð
 ”l TÑ)ð&
ð ”| dÑ*ð&
ð ”˜tÑ#ð&
ð Ð+Ô,ð&
ð 
ˆuŒ|Ô	Ð4Ñ	4ð&
ð &
ð &
ñ „^ñ Ôð&
ð &
ð &
ð &
ð &
rR   r‰  c                   ó  ‡ — e Zd Z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 )ÚElectraForQuestionAnsweringr  c                 óú   •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r»   )
r6   r7   r=  r%  r  r   rŽ   r‰   Ú
qa_outputsr*  rM   s     €rQ   r7   z$ElectraForQuestionAnswering.__init__Q  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå# FÑ+Ô+ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrR   NrS   rs   r3   r/   rT   Ústart_positionsÚend_positionsru   rV   c           	      óF  —  | j         |f||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d }|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «        }|                     d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t          ||||	j
        |	j        ¬	¦  «        S )
NTrc  r   r'   r1   ry   )Úignore_indexrx   )r!  Ústart_logitsÚ
end_logitsr”   r  )r  r�  Úsplitr  r€   ÚlenrK   Úclampr   r   r”   r  )rN   rS   rs   r3   r/   rT   r�  r‘  ru   r  rj  r  r”  r•  Ú
total_lossÚignored_indexrk  Ú
start_lossÚend_losss                      rQ   rc   z#ElectraForQuestionAnswering.forward[  sÑ  € ð '3 d¤lØð'
à)Ø)Ø%Ø'Øð'
ð '
ð ð'
ð '
Ð#ð 6°aÔ8ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø5ÔCØ2Ô=ð
ñ 
ô 
ð 	
rR   )NNNNNNN)rd   re   rf   r(   r  r  r7   r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   r�  r�  L  s&  ø€ € € € € à €LØ!Ððð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø/3Ø-1ð3
ð 3
à”< $Ñ&ð3
ð œ tÑ+ð3
ð œ tÑ+ð	3
ð
 ”l TÑ)ð3
ð ”| dÑ*ð3
ð œ¨Ñ,ð3
ð ”| dÑ*ð3
ð Ð+Ô,ð3
ð 
ˆuŒ|Ô	Ð;Ñ	;ð3
ð 3
ð 3
ñ „^ñ Ôð3
ð 3
ð 3
ð 3
ð 3
rR   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 )ÚElectraForMultipleChoicec                 ó   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        t          j        |j        d¦  «        | _	        |  
                    ¦   «          d S rþ   )r6   r7   r%  r  rD  Úsequence_summaryr   rŽ   r‰   r`  r*  rM   s     €rQ   r7   z!ElectraForMultipleChoice.__init__•  sh   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å# FÑ+Ô+ˆŒÝ 6°vÑ >Ô >ˆÔÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐrR   NrS   rs   r3   r/   rT   ra  ru   rV   c           	      óR  — |�|j         d         n|j         d         }|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�=|                     d|                     d¦  «        |                     d¦  «        ¦  «        nd} | j        |f||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }|                      |¦  «        }|                     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   rZ  Trc  r   rh  )
r\   r˜   rK   r  r   r`  r   r   r”   r  )rN   rS   rs   r3   r/   rT   ra  ru   Únum_choicesr  rj  Úpooled_outputr  Úreshaped_logitsr!  rk  s                   rQ   rc   z ElectraForMultipleChoice.forwardŸ  sí  € ðT -6Ð,A�i”o aÔ(Ð(À}ÔGZÐ[\ÔG]ˆà>GÐ>S�I—N’N 2 y§~¢~°bÑ'9Ô'9Ñ:Ô:Ð:ÐY]ˆ	ØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØGSÐG_�|×(Ò(¨¨\×->Ò->¸rÑ-BÔ-BÑCÔCÐCÐeiˆð Ð(ð ×Ò˜r =×#5Ò#5°bÑ#9Ô#9¸=×;MÒ;MÈbÑ;QÔ;QÑRÔRÐRàð 	ð '3 d¤lØð'
à)Ø)Ø%Ø'Øð'
ð '
ð ð'
ð '
Ð#ð 6°aÔ8ˆà×-Ò-¨oÑ>Ô>ˆØ—’ Ñ/Ô/ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô4ˆDå(ØØ"Ø5ÔCØ2Ô=ð	
ñ 
ô 
ð 	
rR   rl  )rd   re   rf   r7   r$   r"   rG   rk   r   r!   r§   r   rc   rl   rm   s   @rQ   rž  rž  “  s  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ðN
ð N
à”< $Ñ&ðN
ð œ tÑ+ðN
ð œ tÑ+ð	N
ð
 ”l TÑ)ðN
ð ”| dÑ*ðN
ð ”˜tÑ#ðN
ð Ð+Ô,ðN
ð 
ˆuŒ|Ô	Ð8Ñ	8ðN
ð N
ð N
ñ „^ñ ÔðN
ð N
ð N
ð N
ð N
rR   rž  zS
    ELECTRA Model with a `language modeling` head on top for CLM fine-tuning.
    c                   ój  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 	 	 dde	j
        dz  d	e	j
        dz  d
e	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 )ÚElectraForCausalLMry  rz  c                 óL  •— t          ¦   «                              |¦  «         |j        st                               d¦  «         t          |¦  «        | _        t          |¦  «        | _        t          j
        |j        |j        ¦  «        | _        |                      ¦   «          d S )NzOIf you want to use `ElectraForCausalLM` as a standalone, add `is_decoder=True.`)r6   r7   r�   ÚloggerÚwarningr%  r  r  r|  r   rŽ   r:   r9   r}  r*  rM   s     €rQ   r7   zElectraForCausalLM.__init__ú  s‰   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ ð 	nÝ�NŠNÐlÑmÔmÐmå# FÑ+Ô+ˆŒÝ%@ÀÑ%HÔ%HˆÔ"Ý!#¤¨6Ô+@À&ÔBSÑ!TÔ!TˆÔà�ŠÑÔÐÐÐrR   c                 ó   — | j         S r»   r  r-  s    rQ   r€  z(ElectraForCausalLM.get_output_embeddings  r�  rR   c                 ó   — || _         d S r»   r  )rN   Únew_embeddingss     rQ   rƒ  z(ElectraForCausalLM.set_output_embeddings	  s   € Ø!/ˆÔÐÐrR   Nr   rS   rs   r3   r/   rT   r«   rÈ   ra  r•   rô   Úlogits_to_keepru   rV   c                 ó’  — |�d}
 | j         |f|||||||	|
ddœ	|¤Ž}|j        }t          |t          ¦  «        rt	          | d¦  «        n|}|                      |                      |dd…|dd…f         ¦  «        ¦  «        }d}|� | j        d||| j        j	        dœ|¤Ž}t          |||j        |j        |j        |j        ¬¦  «        S )a3  
        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)	rs   r3   r/   rT   r«   rÈ   r•   rô   rd  )r  ra  r9   )r!  r  r•   r”   r  r  r#  )r  r÷   r™   rj   Úslicer}  r|  Úloss_functionrO   r9   r   r•   r”   r  r  )rN   rS   rs   r3   r/   rT   r«   rÈ   ra  r•   rô   r­  ru   Úoutputsr”   Úslice_indicesr  r!  s                     rQ   rc   zElectraForCausalLM.forward  s)  € ðN ÐØˆIà=I¸T¼\Øð>
à)Ø)Ø%Ø'Ø"7Ø#9Ø+ØØð>
ð >
ð ð>
ð >
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ×'Ò'¨×(BÒ(BÀ=ÐQRÐQRÐQRÐTaÐcdÐcdÐcdÐQdÔCeÑ(fÔ(fÑgÔgˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå0ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
rR   )NNNNNNNNNNr   )rd   re   rf   r‡  r7   r€  rƒ  r$   r"   rG   rk   r   rú   rj   r   r!   r§   r   rc   rl   rm   s   @rQ   r¦  r¦  ò  s§  ø€ € € € € ð 5Ð6aÐbÐð
ð 
ð 
ð 
ð 
ð&ð &ð &ð0ð 0ð 0ð Øð *.Ø.2Ø.2Ø,0Ø-1Ø59Ø6:Ø&*Ø(,Ø!%Ø-.ðF
ð F
à”< $Ñ&ðF
ð œ tÑ+ðF
ð œ tÑ+ð	F
ð
 ”l TÑ)ðF
ð ”| dÑ*ðF
ð  %œ|¨dÑ2ðF
ð !&¤¨tÑ 3ðF
ð ”˜tÑ#ðF
ð  ™ðF
ð ˜$‘;ðF
ð ˜eœlÑ*ðF
ð Ð+Ô,ðF
ð 
ˆuŒ|Ô	Ð@Ñ	@ðF
ð F
ð F
ñ „^ñ ÔðF
ð F
ð F
ð F
ð F
rR   r¦  )	r¦  rx  rž  rn  r�  r^  r‰  r%  r  )Nrn   )Wrg   Úcollections.abcr   Údataclassesr   rG   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_loggerrd   r¨  ÚModuler*   rk   rr  rƒ   r…   r©   rµ   rÂ   rÍ   rÕ   rÙ   rê   rü   r  r  r   r%  r:  rD  r^  rn  rx  r‰  r�  rž  r¦  Ú__all__r#  rR   rQ   ú<module>rÇ     s  ðð Ð à $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ )Ð )Ð )Ð )Ð )Ð )Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 9Ð 9Ð 9Ð 9Ð 9Ð 9ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð JÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð=ð =ð =ð =ð =˜œ	ñ =ô =ð =ðN !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:@)ð @)ð @)ð @)ð @)˜2œ9ñ @)ô @)ð @)ðHI)ð I)ð I)ð I)ð I)˜BœIñ I)ô I)ð I)ðZð ð ð ð ˜œ	ñ ô ð ð.ð .ð .ð .ð .�r”yñ .ô .ð .ð<ð ð ð ð ˜"œ)ñ ô ð ð ð ð ð ð �B”Iñ ô ð ð>ð >ð >ð >ð >Ð-ñ >ô >ð >ðD
ð 
ð 
ð 
ð 
�R”Yñ 
ô 
ð 
ð@ð ð ð ð  b¤iñ ô ð ð&ð ð ð ð  "¤)ñ ô ð ð$ ð/ð /ð /ð /ð /˜_ñ /ô /ñ „ð/ð* €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 +ñ 7ô 7ñ „ñô ð7ð ðv6ð v6ð v6ð v6ð v6Ð)ñ v6ô v6ñ „ðv6ðrð ð ð ð  ¤	ñ ô ð ð0`ð `ð `ð `ð `˜RœYñ `ô `ð `ðF €ððñ ô ðF
ð F
ð F
ð F
ð F
Ð'=ñ F
ô F
ñô ðF
ðR €ððñ ô ðQ
ð Q
ð Q
ð Q
ð Q
Ð2ñ Q
ô Q
ñô ðQ
ðh €ððñ ô ð>
ð >
ð >
ð >
ð >
Ð/ñ >
ô >
ñô ð>
ðB €ððñ ô ð6
ð 6
ð 6
ð 6
ð 6
Ð$:ñ 6
ô 6
ñô ð6
ðr ðC
ð C
ð C
ð C
ð C
Ð"8ñ C
ô C
ñ „ðC
ðL ð[
ð [
ð [
ð [
ð [
Ð5ñ [
ô [
ñ „ð[
ð| €ððñ ô ð
]
ð ]
ð ]
ð ]
ð ]
Ð/°ñ ]
ô ]
ñô ð
]
ð@
ð 
ð 
€€€rR   