§
    ‚Štj‡ô  ã                   ól  — d dl mZ d dlmZ d dlZd dlmZ d dlmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6  e/j7        e8¦  «        Z9 G d„ dej:        ¦  «        Z;	 	 d[d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:        ¦  «        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¦  «        ZE G d/„ d0ej:        ¦  «        ZF G d1„ d2ej:        ¦  «        ZG G d3„ d4ej:        ¦  «        ZH G d5„ d6ej:        ¦  «        ZIe. G d7„ d8e&¦  «        ¦   «         ZJ e.d9¬:¦  «         G d;„ d<eJ¦  «        ¦   «         ZK e.d=¬:¦  «        e G d>„ d?e,¦  «        ¦   «         ¦   «         ZL G d@„ dAej:        ¦  «        ZM e.dB¬:¦  «         G dC„ dDeJ¦  «        ¦   «         ZN G dE„ dFej:        ¦  «        ZO e.dG¬:¦  «         G dH„ dIeJe¦  «        ¦   «         ZPe. G dJ„ dKeJ¦  «        ¦   «         ZQ G dL„ dMej:        ¦  «        ZR e.dN¬:¦  «         G dO„ dPeJ¦  «        ¦   «         ZS e.dQ¬:¦  «         G dR„ dSeJ¦  «        ¦   «         ZTe. G dT„ dUeJ¦  «        ¦   «         ZUe. G dV„ dWeJ¦  «        ¦   «         ZVe. G dX„ dYeJ¦  «        ¦   «         ZWg dZ¢ZXdS )\é    )ÚCallable)Ú	dataclassN)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCacheÚEncoderDecoderCache)ÚGenerationMixin)Úcreate_bidirectional_maskÚcreate_causal_mask)ÚGradientCheckpointingLayer)	Ú)BaseModelOutputWithPastAndCrossAttentionsÚ,BaseModelOutputWithPoolingAndCrossAttentionsÚ!CausalLMOutputWithCrossAttentionsÚMaskedLMOutputÚMultipleChoiceModelOutputÚNextSentencePredictorOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)Úapply_chunking_to_forward)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚErnieConfigc                   ó®   ‡ — 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j        dz  d
edej	        fd„Z
ˆ xZS )ÚErnieEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óD  •— 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¬¦  «         |j        | _        |j        r&t          j        |j        |j        ¦  «        | _        d S d S )	N)Úpadding_idx©ÚepsÚposition_ids©r&   éÿÿÿÿF)Ú
persistentÚtoken_type_ids)Údtype)ÚsuperÚ__init__ÚnnÚ	EmbeddingÚ
vocab_sizeÚhidden_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚ	LayerNormÚlayer_norm_epsÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferÚtorchÚarangeÚexpandÚzerosr.   ÚsizeÚlongÚuse_task_idÚtask_type_vocab_sizeÚtask_type_embeddings©ÚselfÚconfigÚ	__class__s     €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/ernie/modeling_ernie.pyr5   zErnieEmbeddings.__init__<   so  ø€ Ý‰Œ×ÒÑÔÐÝ!œ|¨FÔ,=¸vÔ?QÐ_eÔ_rÐsÑsÔsˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"åœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒà×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	×ÒØ�eœk¨$Ô*;×*@Ò*@Ñ*BÔ*BÍ%Ì*ÐUÑUÔUÐbgð 	ñ 	
ô 	
ð 	
ð "Ô-ˆÔØÔð 	fÝ(*¬°VÔ5PÐRXÔRdÑ(eÔ(eˆDÔ%Ð%Ð%ð	fð 	fó    Nr   Ú	input_idsr2   Útask_type_idsr.   Ú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
        ¬¦  «        }|€|                      |¦  «        }|                      |¦  «        }|                     |j
        ¦  «        }||z   }|                      |¦  «        }||z   }| j        rG|€+t          j        |t          j	        | j        j
        ¬¦  «        }|                      |¦  «        }||z  }|                      |¦  «        }|                      |¦  «        }|S )Nr0   r2   r   r&   )ÚdimÚindex)r3   Údevice)rJ   r.   Úhasattrr2   rH   ÚshaperF   ÚgatherrI   rK   r]   r;   r?   Útor=   rL   rN   r@   rD   )rP   rU   r2   rV   r.   rW   rX   Úinput_shapeÚ
batch_sizeÚ
seq_lengthÚbuffered_token_type_idsr?   Ú
embeddingsr=   rN   s                  rS   ÚforwardzErnieEmbeddings.forwardP   sß  € ð Ð Ø#Ÿ.š.Ñ*Ô*ˆ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Ðð &×(Ò(Ð)>Ô)EÑFÔFˆØ"Ð%:Ñ:ˆ
à"×6Ò6°|ÑDÔDÐØÐ"5Ñ5ˆ
ð Ôð 	/ØÐ$Ý %¤¨K½u¼zÐRVÔRcÔRjÐ kÑ kÔ k�Ø#'×#<Ò#<¸]Ñ#KÔ#KÐ ØÐ.Ñ.ˆJà—^’^ JÑ/Ô/ˆ
Ø—\’\ *Ñ-Ô-ˆ
ØÐrT   )NNNNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   rF   Ú
LongTensorÚFloatTensorÚintÚTensorrg   Ú__classcell__©rR   s   @rS   r)   r)   9   sÞ   ø€ € € € € ØQÐQðfð fð fð fð fð, .2Ø26Ø15Ø04Ø26Ø&'ð3ð 3àÔ# dÑ*ð3ð Ô(¨4Ñ/ð3ð Ô'¨$Ñ.ð	3ð
 Ô&¨Ñ-ð3ð Ô(¨4Ñ/ð3ð !$ð3ð 
Œð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3rT   r)   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrD   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )Nr0   ç      à¿é   r   ©r[   )ÚpÚtrainingr&   )
rJ   rF   ÚmatmulÚ	transposer6   Ú
functionalÚsoftmaxrD   r   Ú
contiguous)
rs   rt   ru   rv   rw   rx   rD   ry   Úattn_weightsÚattn_outputs
             rS   Úeager_attention_forwardr‡   †   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$rT   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 )ÚErnieSelfAttentionFNc                 óÄ  •— 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   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)r{   )r4   r5   r9   Únum_attention_headsr^   Ú
ValueErrorrQ   rn   Úattention_head_sizeÚall_head_sizerx   r6   ÚLinearrt   ru   rv   rB   Úattention_probs_dropout_probrD   Ú
is_decoderÚ	is_causalÚ	layer_idx©rP   rQ   r•   r–   rR   s       €rS   r5   zErnieSelfAttention.__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ˆŒà Ô+ˆŒØ"ˆŒØ"ˆŒˆˆrT   Úhidden_statesrw   Úpast_key_valuesry   rY   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 )Nr0   r&   r|   rr   ©rD   rx   )r_   r�   rt   Úviewr�   ru   rv   Ú
isinstancer   Úself_attention_cacheÚupdater–   r   Úget_interfacerQ   Ú_attn_implementationr‡   r   rD   r~   rx   Úreshaper„   )rP   r˜   rw   r™   ry   rb   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚcurrent_past_key_valuesÚattention_interfacer†   r…   s                 rS   rg   zErnieSelfAttention.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Ð(Ð(rT   ©FN)NN©rh   ri   rj   r5   rF   ro   rm   r   r   r    Útuplerg   rp   rq   s   @rS   r‰   r‰   ¢   s©   ø€ € € € € ð#ð #ð #ð #ð #ð #ð6 48Ø(,ð	')ð ')à”|ð')ð Ô)¨DÑ0ð')ð  ™ð	')ð
 Ð+Ô,ð')ð 
ˆuŒ|Ô	ð')ð ')ð ')ð ')ð ')ð ')ð ')ð ')rT   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 )ÚErnieCrossAttentionFNc                 ó¬  •— 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‹   )r4   r5   r9   rŽ   r^   r�   rQ   rn   r�   r‘   rx   r6   r’   rt   ru   rv   rB   r“   rD   r•   r–   r—   s       €rS   r5   zErnieCrossAttention.__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ˆŒà"ˆŒØ"ˆŒˆˆrT   r˜   Úencoder_hidden_statesrw   r™   ry   rY   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 )Nr0   r&   r|   FTrr   r›   )r_   r�   rt   rœ   r�   Ú
is_updatedÚgetr–   Úcross_attention_cacheÚlayersÚkeysÚvaluesru   rv   rŸ   r   r    rQ   r¡   r‡   r   rD   r~   rx   r¢   r„   )rP   r˜   r¯   rw   r™   ry   rb   r£   r¤   r±   r¥   r¦   Úkv_shaper¨   r†   r…   s                   rS   rg   zErnieCrossAttention.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Ð(Ð(rT   r©   )NNN)rh   ri   rj   r5   rF   ro   rm   r   r   r    r«   rg   rp   rq   s   @rS   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)rT   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 )ÚErnieSelfOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j        |j	        ¦  «        | _
        d S ©Nr,   )r4   r5   r6   r’   r9   Údenser@   rA   rB   rC   rD   rO   s     €rS   r5   zErnieSelfOutput.__init__2  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrT   r˜   Úinput_tensorrY   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S ©N©r¼   rD   r@   ©rP   r˜   r½   s      rS   rg   zErnieSelfOutput.forward8  ó@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°|Ñ'CÑDÔDˆØÐrT   ©rh   ri   rj   r5   rF   ro   rg   rp   rq   s   @rS   r¹   r¹   1  ói   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð rT   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 )ÚErnieAttentionFNc                 óÄ   •— t          ¦   «                              ¦   «          || _        |rt          nt          } ||||¬¦  «        | _        t          |¦  «        | _        d S )N©r•   r–   )r4   r5   Úis_cross_attentionr­   r‰   rP   r¹   Úoutput)rP   rQ   r•   r–   rÉ   Úattention_classrR   s         €rS   r5   zErnieAttention.__init__@  s]   ø€ Ý‰Œ×ÒÑÔÐØ"4ˆÔØ1CÐ[Õ-Ð-ÕI[ˆØ#�O F°iÈ9ÐUÑUÔUˆŒ	Ý% fÑ-Ô-ˆŒˆˆrT   r˜   rw   r¯   Úencoder_attention_maskr™   ry   rY   c                 óv   — | j         s|n|} | j        |f|||dœ|¤Ž\  }}|                      ||¦  «        }||fS )N)r¯   rw   r™   )rÉ   rP   rÊ   )	rP   r˜   rw   r¯   rÌ   r™   ry   Úattention_outputr…   s	            rS   rg   zErnieAttention.forwardG  sq   € ð 04Ô/FÐb˜˜ÐLbˆØ)2¨¬Øð*
à"7Ø)Ø+ð	*
ð *
ð
 ð*
ð *
Ñ&Ð˜,ð  Ÿ;š;Ð'7¸ÑGÔGÐØ Ð-Ð-rT   )FNF©NNNNrª   rq   s   @rS   rÆ   rÆ   ?  sÓ   ø€ € € € € ð.ð .ð .ð .ð .ð .ð 48Ø:>Ø;?Ø(,ð.ð .à”|ð.ð Ô)¨DÑ0ð.ð  %Ô0°4Ñ7ð	.ð
 !&Ô 1°DÑ 8ð.ð  ™ð.ð Ð+Ô,ð.ð 
ˆuŒ|Ô	ð.ð .ð .ð .ð .ð .ð .ð .rT   rÆ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚErnieIntermediatec                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S r¿   )r4   r5   r6   r’   r9   Úintermediate_sizer¼   r�   Ú
hidden_actÚstrr
   Úintermediate_act_fnrO   s     €rS   r5   zErnieIntermediate.__init__]  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$rT   r˜   rY   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r¿   )r¼   rÖ   ©rP   r˜   s     rS   rg   zErnieIntermediate.forwarde  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐrT   rÃ   rq   s   @rS   rÑ   rÑ   \  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð rT   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 )ÚErnieOutputc                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        |j        ¬¦  «        | _        t          j	        |j
        ¦  «        | _        d S r»   )r4   r5   r6   r’   rÓ   r9   r¼   r@   rA   rB   rC   rD   rO   s     €rS   r5   zErnieOutput.__init__l  sf   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆrT   r˜   r½   rY   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r¿   rÀ   rÁ   s      rS   rg   zErnieOutput.forwardr  rÂ   rT   rÃ   rq   s   @rS   rÚ   rÚ   k  rÄ   rT   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 )Ú
ErnieLayerNc                 ó–  •— 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É   )r4   r5   Úchunk_size_feed_forwardÚseq_len_dimrÆ   r”   Ú	attentionÚadd_cross_attentionr�   ÚcrossattentionrÑ   ÚintermediaterÚ   rÊ   )rP   rQ   r–   rR   s      €rS   r5   zErnieLayer.__init__z  sÐ   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ'¨¸&Ô:KÐW`ÐaÑaÔaˆŒØ Ô+ˆŒØ#)Ô#=ˆÔ ØÔ#ð 	Ø”?ð jÝ  DÐ!hÐ!hÐ!hÑiÔiÐiÝ"0ØØØ#Ø#'ð	#ñ #ô #ˆDÔõ .¨fÑ5Ô5ˆÔÝ! &Ñ)Ô)ˆŒˆˆrT   r˜   rw   r¯   rÌ   r™   ry   rY   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á   )rP   r˜   rw   r¯   rÌ   r™   ry   Úself_attention_outputÚ_rÎ   Úcross_attention_outputÚlayer_outputs               rS   rg   zErnieLayer.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ñ
ô 
ˆð ÐrT   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r¿   )rå   rÊ   )rP   rÎ   Úintermediate_outputrë   s       rS   rç   zErnieLayer.feed_forward_chunk´  s2   € Ø"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÑIÔIˆØÐrT   r¿   rÏ   )rh   ri   rj   r5   rF   ro   rm   r   r   r    rg   rç   rp   rq   s   @rS   rÞ   rÞ   y  sÞ   ø€ € € € € ð*ð *ð *ð *ð *ð *ð, 48Ø:>Ø;?Ø(,ð%ð %à”|ð%ð Ô)¨DÑ0ð%ð  %Ô0°4Ñ7ð	%ð
 !&Ô 1°DÑ 8ð%ð  ™ð%ð Ð+Ô,ð%ð 
Œð%ð %ð %ð %ðNð ð ð ð ð ð rT   rÞ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚErniePoolerc                 óÀ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        ¦   «         | _        d S r¿   )r4   r5   r6   r’   r9   r¼   ÚTanhÚ
activationrO   s     €rS   r5   zErniePooler.__init__»  sC   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ýœ'™)œ)ˆŒˆˆrT   r˜   rY   c                 ór   — |d d …df         }|                       |¦  «        }|                      |¦  «        }|S )Nr   )r¼   rò   )rP   r˜   Úfirst_token_tensorÚpooled_outputs       rS   rg   zErniePooler.forwardÀ  s@   € ð +¨1¨1¨1¨a¨4Ô0ÐØŸ
š
Ð#5Ñ6Ô6ˆØŸš¨Ñ6Ô6ˆØÐrT   rÃ   rq   s   @rS   rï   rï   º  s^   ø€ € € € € ð$ð $ð $ð $ð $ð
 U¤\ð °e´lð ð ð ð ð ð ð ð rT   rï   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚErniePredictionHeadTransformc                 óV  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _
        n|j        | _
        t          j        |j        |j        ¬¦  «        | _        d S r»   )r4   r5   r6   r’   r9   r¼   r�   rÔ   rÕ   r
   Útransform_act_fnr@   rA   rO   s     €rS   r5   z%ErniePredictionHeadTransform.__init__Ê  s…   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý�fÔ'­Ñ-Ô-ð 	6Ý$*¨6Ô+<Ô$=ˆDÔ!Ð!à$*Ô$5ˆDÔ!Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒˆˆrT   r˜   rY   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r¿   )r¼   rù   r@   rØ   s     rS   rg   z$ErniePredictionHeadTransform.forwardÓ  s=   € ØŸ
š
 =Ñ1Ô1ˆØ×-Ò-¨mÑ<Ô<ˆØŸš }Ñ5Ô5ˆØÐrT   rÃ   rq   s   @rS   r÷   r÷   É  sc   ø€ € € € € ðUð Uð Uð Uð Uð U¤\ð °e´lð ð ð ð ð ð ð ð rT   r÷   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚErnieLMPredictionHeadc                 ó  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        t	          j	        t          j        |j        ¦  «        ¦  «        | _        d S )NT)Úbias)r4   r5   r÷   Ú	transformr6   r’   r9   r8   ÚdecoderÚ	ParameterrF   rI   rþ   rO   s     €rS   r5   zErnieLMPredictionHead.__init__Û  sj   ø€ Ý‰Œ×ÒÑÔÐÝ5°fÑ=Ô=ˆŒõ ”y Ô!3°VÔ5FÈTÐRÑRÔRˆŒÝ”L¥¤¨VÔ->Ñ!?Ô!?Ñ@Ô@ˆŒ	ˆ	ˆ	rT   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r¿   )rÿ   r   rØ   s     rS   rg   zErnieLMPredictionHead.forwardä  s*   € ØŸš }Ñ5Ô5ˆØŸš ]Ñ3Ô3ˆØÐrT   ©rh   ri   rj   r5   rg   rp   rq   s   @rS   rü   rü   Ú  sL   ø€ € € € € ðAð Að Að Að Aðð ð ð ð ð ð rT   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 )ÚErnieEncoderc                 óÆ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))r–   )rÞ   )Ú.0ÚirQ   s     €rS   ú
<listcomp>z)ErnieEncoder.__init__.<locals>.<listcomp>î  s&   ø€ Ð#mÐ#mÐ#mÈ¥J¨vÀÐ$CÑ$CÔ$CÐ#mÐ#mÐ#mrT   )r4   r5   rQ   r6   Ú
ModuleListÚrangeÚnum_hidden_layersÚlayerrO   s    `€rS   r5   zErnieEncoder.__init__ë  sW   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#mÐ#mÐ#mÐ#mÍUÐSYÔSkÑMlÔMlÐ#mÑ#mÔ#mÑnÔnˆŒ
ˆ
ˆ
rT   Nr˜   rw   r¯   rÌ   r™   Ú	use_cachery   rY   c                 ó|   — t          | j        ¦  «        D ]\  }}	 |	|||f||dœ|¤Ž}Œt          ||r|nd ¬¦  «        S )N)rÌ   r™   )Úlast_hidden_stater™   )Ú	enumerater  r   )
rP   r˜   rw   r¯   rÌ   r™   r  ry   r	  Úlayer_modules
             rS   rg   zErnieEncoder.forwardð  s�   € õ  )¨¬Ñ4Ô4ð 	ð 	‰OˆAˆ|Ø(˜LØØØ%ðð (>Ø /ðð ð ðð ˆMˆMõ 9Ø+Ø/8ÐB˜O˜O¸dð
ñ 
ô 
ð 	
rT   )NNNNN)rh   ri   rj   r5   rF   ro   rm   r   Úboolr   r    r«   r   rg   rp   rq   s   @rS   r  r  ê  sê   ø€ € € € € ðoð oð oð oð oð 48Ø:>Ø;?Ø(,Ø!%ð
ð 
à”|ð
ð Ô)¨DÑ0ð
ð  %Ô0°4Ñ7ð	
ð
 !&Ô 1°DÑ 8ð
ð  ™ð
ð ˜$‘;ð
ð Ð+Ô,ð
ð 
ˆuŒ|Ô	ÐHÑ	Hð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rT   r  c                   óp   ‡ — e Zd ZeZdZdZdZdZdZ	dZ
eeedœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚErniePreTrainedModelÚernieT)r˜   Ú
attentionsÚcross_attentionsc                 ó¨  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         dS t          |t          ¦  «        rjt	          j        |j	        t          j        |j	        j        d         ¦  «                             d¦  «        ¦  «         t	          j        |j        ¦  «         dS dS )zInitialize the weightsr0   r/   N)r4   Ú_init_weightsr�   rü   ÚinitÚzeros_rþ   r)   Úcopy_r.   rF   rG   r_   rH   r2   )rP   rs   rR   s     €rS   r  z"ErniePreTrainedModel._init_weights  s·   ø€ õ 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ3Ñ4Ô4ð 	/ÝŒK˜œÑ$Ô$Ð$Ð$Ð$Ý˜¥Ñ0Ô0ð 	/ÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÝŒK˜Ô-Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/rT   )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_outputsrF   Úno_gradr  rp   rq   s   @rS   r  r  
  sŠ   ø€ € € € € à€LØÐØ&*Ð#ØÐØ€NØÐØ"&Ðà#Ø(Ø/ðð Ðð €U„]�_„_ð/ð /ð /ð /ñ „_ð/ð /ð /ð /ð /rT   r  a
  
    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
    cross-attention is added between the self-attention layers, following the architecture described in [Attention is
    all you need](https://huggingface.co/papers/1706.03762) by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
    Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin.

    To behave as an decoder the model needs to be initialized with the `is_decoder` argument of the configuration set
    to `True`. To be used in a Seq2Seq model, the model needs to initialized with both `is_decoder` argument and
    `add_cross_attention` set to `True`; an `encoder_hidden_states` is then expected as an input to the forward pass.
    )Úcustom_introc                   ój  ‡ — e Zd ZdgZdˆ fd„	Zd„ Zd„ Zeee		 	 	 	 	 	 	 	 	 	 dde
j        dz  de
j        dz  d	e
j        dz  d
e
j        dz  de
j        dz  de
j        dz  de
j        dz  de
j        dz  dedz  dedz  dee         dee
j                 ez  fd„¦   «         ¦   «         ¦   «         Zd„ Zˆ xZS )Ú
ErnieModelrÞ   Tc                 ó  •— t          ¦   «                              |¦  «         || _        d| _        t	          |¦  «        | _        t          |¦  «        | _        |rt          |¦  «        nd| _	        |  
                    ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        FN)r4   r5   rQ   Úgradient_checkpointingr)   rf   r  Úencoderrï   ÚpoolerÚ	post_init)rP   rQ   Úadd_pooling_layerrR   s      €rS   r5   zErnieModel.__init__3  s{   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒØ&+ˆÔ#å)¨&Ñ1Ô1ˆŒÝ# FÑ+Ô+ˆŒà->ÐH•k &Ñ)Ô)Ð)ÀDˆŒð 	�ŠÑÔÐÐÐrT   c                 ó   — | j         j        S r¿   ©rf   r;   ©rP   s    rS   Úget_input_embeddingszErnieModel.get_input_embeddingsD  s   € ØŒÔ.Ð.rT   c                 ó   — || j         _        d S r¿   r2  )rP   rv   s     rS   Úset_input_embeddingszErnieModel.set_input_embeddingsG  s   € Ø*/ˆŒÔ'Ð'Ð'rT   NrU   rw   r2   rV   r.   rW   r¯   rÌ   r™   r  ry   rY   c           
      ón  — |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}|                      ||||||¬¦  «        }|  	                    |||||	¬¦  «        \  }} | j
        |f||||	|
|dœ|¤Ž}|d         }| j        �|                      |¦  «        nd}t          |||j        ¬	¦  «        S )
áÚ  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        Nz:You must specify exactly one of input_ids or inputs_embedsF)rQ   r   )rU   r.   r2   rV   rW   rX   )rw   rÌ   Úembedding_outputr¯   r™   )rw   r¯   rÌ   r™   r  r.   )r  Úpooler_outputr™   )r�   rQ   r”   r  Úis_encoder_decoderr   r   Úget_seq_lengthrf   Ú_create_attention_masksr-  r.  r   r™   )rP   rU   rw   r2   rV   r.   rW   r¯   rÌ   r™   r  ry   rX   r9  Úencoder_outputsÚsequence_outputrõ   s                    rS   rg   zErnieModel.forwardJ  s½  € ð0 ˜Ð -°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ð +ñ 
ô 
Ðð 26×1MÒ1MØ)Ø#9Ø-Ø"7Ø+ð 2Nñ 2
ô 2
Ñ.ˆÐ.ð '˜$œ,Øð	
à)Ø"7Ø#9Ø+ØØ%ð	
ð 	
ð ð	
ð 	
ˆð *¨!Ô,ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆå;Ø-Ø'Ø+Ô;ð
ñ 
ô 
ð 	
rT   c                 ó¶   — | j         j        rt          | j         |||¬¦  «        }nt          | j         ||¬¦  «        }|�t          | j         |||¬¦  «        }||fS )N)rQ   rW   rw   r™   )rQ   rW   rw   )rQ   rW   rw   r¯   )rQ   r”   r   r   )rP   rw   rÌ   r9  r¯   r™   s         rS   r=  z"ErnieModel._create_attention_masks—  s�   € ð Œ;Ô!ð 	Ý/Ø”{Ø.Ø-Ø /ð	ñ ô ˆNˆNõ 7Ø”{Ø.Ø-ðñ ô ˆNð "Ð-Ý%>Ø”{Ø.Ø5Ø&;ð	&ñ &ô &Ð"ð Ð5Ð5Ð5rT   )T)
NNNNNNNNNN)rh   ri   rj   Ú_no_split_modulesr5   r4  r6  r$   r%   r!   rF   ro   r   r  r   r    r«   r   rg   r=  rp   rq   s   @rS   r*  r*  $  s©  ø€ € € € € ð &˜Ððð ð ð ð ð ð"/ð /ð /ð0ð 0ð 0ð  ØØð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø(,Ø!%ðH
ð H
à”< $Ñ&ðH
ð œ tÑ+ðH
ð œ tÑ+ð	H
ð
 ”| dÑ*ðH
ð ”l TÑ)ðH
ð ”| dÑ*ðH
ð  %œ|¨dÑ2ðH
ð !&¤¨tÑ 3ðH
ð  ™ðH
ð ˜$‘;ðH
ð Ð+Ô,ðH
ð 
ˆuŒ|Ô	ÐKÑ	KðH
ð H
ð H
ñ „^ñ „_ñ  ÔðH
ðT6ð 6ð 6ð 6ð 6ð 6ð 6rT   r*  z1
    Output type of [`ErnieForPreTraining`].
    c                   óÂ   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	ej        dz  ed<   dZ
eej                 dz  ed<   dZeej                 dz  ed<   dS )ÚErnieForPreTrainingOutputa–  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the masked language modeling loss and the next sequence prediction
        (classification) loss.
    prediction_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    seq_relationship_logits (`torch.FloatTensor` of shape `(batch_size, 2)`):
        Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
        before SoftMax).
    NÚlossÚprediction_logitsÚseq_relationship_logitsr˜   r  )rh   ri   rj   rk   rD  rF   rm   Ú__annotations__rE  rF  r˜   r«   r  © rT   rS   rC  rC  ¸  s¢   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø8<Ð˜UÔ.°Ñ5Ð<Ð<Ñ<Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6rT   rC  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚErniePreTrainingHeadsc                 ó®   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        d¦  «        | _        d S ©Nr|   )r4   r5   rü   Úpredictionsr6   r’   r9   Úseq_relationshiprO   s     €rS   r5   zErniePreTrainingHeads.__init__Ò  sF   ø€ Ý‰Œ×ÒÑÔÐÝ0°Ñ8Ô8ˆÔÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐrT   c                 ó^   — |                       |¦  «        }|                      |¦  «        }||fS r¿   )rM  rN  )rP   r?  rõ   Úprediction_scoresÚseq_relationship_scores        rS   rg   zErniePreTrainingHeads.forward×  s6   € Ø ×,Ò,¨_Ñ=Ô=ÐØ!%×!6Ò!6°}Ñ!EÔ!EÐØ Ð"8Ð8Ð8rT   r  rq   s   @rS   rJ  rJ  Ñ  sL   ø€ € € € € ðAð Að Að Að Að
9ð 9ð 9ð 9ð 9ð 9ð 9rT   rJ  z©
    Ernie Model with two heads on top as done during the pretraining: a `masked language modeling` head and a `next
    sentence prediction (classification)` head.
    c                   ó>  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 dde	j
        dz  d	e	j
        dz  d
e	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  dee         dee	j
                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForPreTrainingúcls.predictions.biasú'ernie.embeddings.word_embeddings.weight©úcls.predictions.decoder.biasúcls.predictions.decoder.weightc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r¿   )r4   r5   r*  r  rJ  Úclsr/  rO   s     €rS   r5   zErnieForPreTraining.__init__é  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
Ý(¨Ñ0Ô0ˆŒð 	�ŠÑÔÐÐÐrT   c                 ó$   — | j         j        j        S r¿   ©rZ  rM  r   r3  s    rS   Úget_output_embeddingsz)ErnieForPreTraining.get_output_embeddingsò  ó   € ØŒxÔ#Ô+Ð+rT   c                 óT   — || j         j        _        |j        | j         j        _        d S r¿   ©rZ  rM  r   rþ   ©rP   Únew_embeddingss     rS   Úset_output_embeddingsz)ErnieForPreTraining.set_output_embeddingsõ  ó%   € Ø'5ˆŒÔÔ$Ø$2Ô$7ˆŒÔÔ!Ð!Ð!rT   NrU   rw   r2   rV   r.   rW   ÚlabelsÚnext_sentence_labelry   rY   c	           
      óÆ  —  | j         |f|||||ddœ|	¤Ž}
|
dd…         \  }}|                      ||¦  «        \  }}d}|�…|�ƒt          ¦   «         } ||                     d| j        j        ¦  «        |                     d¦  «        ¦  «        } ||                     dd¦  «        |                     d¦  «        ¦  «        }||z   }t          ||||
j        |
j        ¬¦  «        S )a:  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked),
            the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        next_sentence_label (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence
            pair (see `input_ids` docstring) Indices should be in `[0, 1]`:

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

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("nghuyong/ernie-1.0-base-zh")
        >>> model = ErnieForPreTraining.from_pretrained("nghuyong/ernie-1.0-base-zh")

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

        >>> prediction_logits = outputs.prediction_logits
        >>> seq_relationship_logits = outputs.seq_relationship_logits
        ```
        T©rw   r2   rV   r.   rW   Úreturn_dictNr|   r0   )rD  rE  rF  r˜   r  )	r  rZ  r   rœ   rQ   r8   rC  r˜   r  )rP   rU   rw   r2   rV   r.   rW   re  rf  ry   Úoutputsr?  rõ   rP  rQ  Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_losss                      rS   rg   zErnieForPreTraining.forwardù  s,  € ð^ �$”*Øð	
à)Ø)Ø'Ø%Ø'Øð	
ð 	
ð ð	
ð 	
ˆð *1°°!°¬Ñ&ˆ˜Ø48·H²H¸_ÈmÑ4\Ô4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNØ!) Ð*@×*EÒ*EÀbÈ!Ñ*LÔ*LÐNa×NfÒNfÐgiÑNjÔNjÑ!kÔ!kÐØ'Ð*<Ñ<ˆJå(ØØ/Ø$:Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rT   ©NNNNNNNN)rh   ri   rj   Ú_tied_weights_keysr5   r]  rc  r#   r!   rF   ro   r   r    r«   rC  rg   rp   rq   s   @rS   rS  rS  Ý  su  ø€ € € € € ð )?Ø*Sðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*Ø37ðH
ð H
à”< $Ñ&ðH
ð œ tÑ+ðH
ð œ tÑ+ð	H
ð
 ”| dÑ*ðH
ð ”l TÑ)ðH
ð ”| dÑ*ðH
ð ”˜tÑ#ðH
ð #œ\¨DÑ0ðH
ð Ð+Ô,ðH
ð 
ˆuŒ|Ô	Ð8Ñ	8ðH
ð H
ð H
ñ „^ñ ÔðH
ð H
ð H
ð H
ð H
rT   rS  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚErnieOnlyMLMHeadc                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r¿   )r4   r5   rü   rM  rO   s     €rS   r5   zErnieOnlyMLMHead.__init__G  s/   ø€ Ý‰Œ×ÒÑÔÐÝ0°Ñ8Ô8ˆÔÐÐrT   r?  rY   c                 ó0   — |                       |¦  «        }|S r¿   )rM  )rP   r?  rP  s      rS   rg   zErnieOnlyMLMHead.forwardK  s   € Ø ×,Ò,¨_Ñ=Ô=ÐØ Ð rT   rÃ   rq   s   @rS   rr  rr  F  s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð! u¤|ð !¸¼ð !ð !ð !ð !ð !ð !ð !ð !rT   rr  zQ
    Ernie Model with a `language modeling` head on top for CLM fine-tuning.
    c                    ó˜  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 	 	 	 dd	e	j
        dz  d
e	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  dee	j
                 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 )ÚErnieForCausalLMrU  rT  )rX  rW  c                 ó  •— t          ¦   «                              |¦  «         |j        st                               d¦  «         t          |d¬¦  «        | _        t          |¦  «        | _        |  	                    ¦   «          d S )NzMIf you want to use `ErnieForCausalLM` as a standalone, add `is_decoder=True.`F©r0  ©
r4   r5   r”   ÚloggerÚwarningr*  r  rr  rZ  r/  rO   s     €rS   r5   zErnieForCausalLM.__init__[  su   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔ ð 	lÝ�NŠNÐjÑkÔkÐkå ¸%Ð@Ñ@Ô@ˆŒ
Ý# FÑ+Ô+ˆŒð 	�ŠÑÔÐÐÐrT   c                 ó$   — | j         j        j        S r¿   r\  r3  s    rS   r]  z&ErnieForCausalLM.get_output_embeddingsg  r^  rT   c                 óT   — || j         j        _        |j        | j         j        _        d S r¿   r`  ra  s     rS   rc  z&ErnieForCausalLM.set_output_embeddingsj  rd  rT   Nr   rU   rw   r2   rV   r.   rW   r¯   rÌ   re  r™   r  Úlogits_to_keepry   rY   c                 ón  — |	�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 )a�  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in
            `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are
            ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`
        NFT)
rw   r2   rV   r.   rW   r¯   rÌ   r™   r  ri  )Úlogitsre  r8   )rD  r€  r™   r˜   r  r  rH  )r  r  r�   rn   ÚslicerZ  Úloss_functionrQ   r8   r   r™   r˜   r  r  )rP   rU   rw   r2   rV   r.   rW   r¯   rÌ   re  r™   r  r~  ry   rj  r˜   Úslice_indicesr€  rD  s                      rS   rg   zErnieForCausalLM.forwardn  s  € ð: ÐØˆIà@JÀÄ
ØðA
à)Ø)Ø'Ø%Ø'Ø"7Ø#9Ø+ØØðA
ð A
ð ðA
ð A
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜-¨¨¨¨=¸!¸!¸!Ð(;Ô<Ñ=Ô=ˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå0ØØØ#Ô3Ø!Ô/ØÔ)Ø$Ô5ð
ñ 
ô 
ð 	
rT   )NNNNNNNNNNNr   )rh   ri   rj   rp  r5   r]  rc  r#   r!   rF   ro   Úlistr  rn   r   r    r«   r   rg   rp   rq   s   @rS   rv  rv  P  sµ  ø€ € € € € ð +TØ(>ðð Ðð

ð 
ð 
ð 
ð 
ð,ð ,ð ,ð8ð 8ð 8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø&*Ø59Ø!%Ø-.ð=
ð =
à”< $Ñ&ð=
ð œ tÑ+ð=
ð œ tÑ+ð	=
ð
 ”| dÑ*ð=
ð ”l TÑ)ð=
ð ”| dÑ*ð=
ð  %œ|¨dÑ2ð=
ð !&¤¨tÑ 3ð=
ð ”˜tÑ#ð=
ð ˜eœlÔ+¨dÑ2ð=
ð ˜$‘;ð=
ð ˜eœlÑ*ð=
ð Ð+Ô,ð=
ð 
ˆuŒ|Ô	Ð@Ñ	@ð=
ð =
ð =
ñ „^ñ Ôð=
ð =
ð =
ð =
ð =
rT   rv  c                   óT  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zee	 	 	 	 	 	 	 	 	 dde	j
        dz  d	e	j
        dz  d
e	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  dee         dee	j
                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForMaskedLMrT  rU  rV  c                 ó  •— t          ¦   «                              |¦  «         |j        rt                               d¦  «         t          |d¬¦  «        | _        t          |¦  «        | _        |  	                    ¦   «          d S )NzlIf you want to use `ErnieForMaskedLM` make sure `config.is_decoder=False` for bi-directional self-attention.Frx  ry  rO   s     €rS   r5   zErnieForMaskedLM.__init__·  s~   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àÔð 	Ý�NŠNð1ñô ð õ
   ¸%Ð@Ñ@Ô@ˆŒ
Ý# FÑ+Ô+ˆŒð 	�ŠÑÔÐÐÐrT   c                 ó$   — | j         j        j        S r¿   r\  r3  s    rS   r]  z&ErnieForMaskedLM.get_output_embeddingsÆ  r^  rT   c                 óT   — || j         j        _        |j        | j         j        _        d S r¿   r`  ra  s     rS   rc  z&ErnieForMaskedLM.set_output_embeddingsÉ  rd  rT   NrU   rw   r2   rV   r.   rW   r¯   rÌ   re  ry   rY   c
                 óB  —  | j         |f|||||||ddœ|
¤Ž}|d         }|                      |¦  «        }d}|	�Kt          ¦   «         } ||                     d| j        j        ¦  «        |	                     d¦  «        ¦  «        }t          |||j        |j        ¬¦  «        S )as  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        T)rw   r2   rV   r.   rW   r¯   rÌ   ri  r   Nr0   ©rD  r€  r˜   r  )	r  rZ  r   rœ   rQ   r8   r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   r¯   rÌ   re  ry   rj  r?  rP  rm  rl  s                   rS   rg   zErnieForMaskedLM.forwardÍ  sÙ   € ð4 �$”*Øð
à)Ø)Ø'Ø%Ø'Ø"7Ø#9Øð
ð 
ð ð
ð 
ˆð " !œ*ˆØ ŸHšH _Ñ5Ô5ÐàˆØÐÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNåØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rT   )	NNNNNNNNN)rh   ri   rj   rp  r5   r]  rc  r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r†  r†  °  su  ø€ € € € € ð )?Ø*Sðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø&*ð2
ð 2
à”< $Ñ&ð2
ð œ tÑ+ð2
ð œ tÑ+ð	2
ð
 ”| dÑ*ð2
ð ”l TÑ)ð2
ð ”| dÑ*ð2
ð  %œ|¨dÑ2ð2
ð !&¤¨tÑ 3ð2
ð ”˜tÑ#ð2
ð Ð+Ô,ð2
ð 
ˆuŒ|Ô	˜~Ñ	-ð2
ð 2
ð 2
ñ „^ñ Ôð2
ð 2
ð 2
ð 2
ð 2
rT   r†  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚErnieOnlyNSPHeadc                 ó†   •— t          ¦   «                              ¦   «          t          j        |j        d¦  «        | _        d S rL  )r4   r5   r6   r’   r9   rN  rO   s     €rS   r5   zErnieOnlyNSPHead.__init__  s6   ø€ Ý‰Œ×ÒÑÔÐÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐrT   c                 ó0   — |                       |¦  «        }|S r¿   )rN  )rP   rõ   rQ  s      rS   rg   zErnieOnlyNSPHead.forward	  s   € Ø!%×!6Ò!6°}Ñ!EÔ!EÐØ%Ð%rT   r  rq   s   @rS   r�  r�    sL   ø€ € € € € ðAð Að Að Að Að&ð &ð &ð &ð &ð &ð &rT   r�  zU
    Ernie Model with a `next sentence prediction (classification)` head on top.
    c                   ó  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej        dz  dej        dz  dej        dz  dej        dz  dej        dz  dej        dz  d	ej        dz  d
ee	         de
ej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForNextSentencePredictionc                 óÂ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |                      ¦   «          d S r¿   )r4   r5   r*  r  r�  rZ  r/  rO   s     €rS   r5   z'ErnieForNextSentencePrediction.__init__  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
Ý# FÑ+Ô+ˆŒð 	�ŠÑÔÐÐÐrT   NrU   rw   r2   rV   r.   rW   re  ry   rY   c           
      ó*  —  | j         |f|||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }d}|�At          ¦   «         } ||                     dd¦  «        |                     d¦  «        ¦  «        }t	          |||	j        |	j        ¬¦  «        S )a‡  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
            (see `input_ids` docstring). Indices should be in `[0, 1]`:

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

        Example:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("nghuyong/ernie-1.0-base-zh")
        >>> model = ErnieForNextSentencePrediction.from_pretrained("nghuyong/ernie-1.0-base-zh")

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

        >>> outputs = model(**encoding, labels=torch.LongTensor([1]))
        >>> logits = outputs.logits
        >>> assert logits[0, 0] < logits[0, 1]  # next sentence was random
        ```
        Trh  r&   Nr0   r|   r‹  )r  rZ  r   rœ   r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   re  ry   rj  rõ   Úseq_relationship_scoresrn  rl  s                 rS   rg   z&ErnieForNextSentencePrediction.forward  sÌ   € ðZ �$”*Øð	
à)Ø)Ø'Ø%Ø'Øð	
ð 	
ð ð	
ð 	
ˆð   œ
ˆà"&§(¢(¨=Ñ"9Ô"9Ðà!ÐØÐÝ'Ñ)Ô)ˆHØ!) Ð*A×*FÒ*FÀrÈ1Ñ*MÔ*MÈvÏ{Ê{Ð[]ÉÌÑ!_Ô!_Ðå*Ø#Ø*Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rT   ©NNNNNNN)rh   ri   rj   r5   r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r‘  r‘    s-  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*ðD
ð D
à”< $Ñ&ðD
ð œ tÑ+ðD
ð œ tÑ+ð	D
ð
 ”| dÑ*ðD
ð ”l TÑ)ðD
ð ”| dÑ*ðD
ð ”˜tÑ#ðD
ð Ð+Ô,ðD
ð 
ˆuŒ|Ô	Ð:Ñ	:ðD
ð D
ð D
ñ „^ñ ÔðD
ð D
ð D
ð D
ð D
rT   r‘  z�
    Ernie 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j        dz  d
ee	         de
ej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForSequenceClassificationc                 ód  •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        |j        �|j        n|j        }t          j	        |¦  «        | _
        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S r¿   )r4   r5   Ú
num_labelsrQ   r*  r  Úclassifier_dropoutrC   r6   rB   rD   r’   r9   Ú
classifierr/  ©rP   rQ   rš  rR   s      €rS   r5   z'ErnieForSequenceClassification.__init__m  sœ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒå Ñ'Ô'ˆŒ
à)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrT   NrU   rw   r2   rV   r.   rW   re  ry   rY   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^  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        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).
        Trh  r&   NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationr0   r‹  )r  rD   r›  rQ   Úproblem_typer™  r3   rF   rK   rn   r   Úsqueezer   rœ   r   r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   re  ry   rj  rõ   r€  rD  rl  s                 rS   rg   z&ErnieForSequenceClassification.forward|  sÞ  € ð0 �$”*Øð	
à)Ø)Ø'Ø%Ø'Øð	
ð 	
ð ð	
ð 	
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? 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 ¨Ñ/Ô/�å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rT   r•  )rh   ri   rj   r5   r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r—  r—  f  s-  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*ðB
ð B
à”< $Ñ&ðB
ð œ tÑ+ðB
ð œ tÑ+ð	B
ð
 ”| dÑ*ðB
ð ”l TÑ)ðB
ð ”| dÑ*ðB
ð ”˜tÑ#ðB
ð Ð+Ô,ðB
ð 
ˆuŒ|Ô	Ð7Ñ	7ðB
ð B
ð B
ñ „^ñ ÔðB
ð B
ð B
ð B
ð B
rT   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j        dz  d
ee	         de
ej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForMultipleChoicec                 ó4  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _        t          j	        |j
        d¦  «        | _        |                      ¦   «          d S )Nr&   )r4   r5   r*  r  rš  rC   r6   rB   rD   r’   r9   r›  r/  rœ  s      €rS   r5   zErnieForMultipleChoice.__init__Å  sˆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å Ñ'Ô'ˆŒ
à)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐrT   NrU   rw   r2   rV   r.   rW   re  ry   rY   c           
      óT  — |�|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 )a9	  
        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)
        task_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        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&   r0   éþÿÿÿTrh  r‹  )
r_   rœ   rJ   r  rD   r›  r   r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   re  ry   Únum_choicesrj  rõ   r€  Úreshaped_logitsrD  rl  s                   rS   rg   zErnieForMultipleChoice.forwardÒ  sì  € ð` -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Ô3ˆØ—’ Ñ/Ô/ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô4ˆDå(ØØ"Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rT   r•  )rh   ri   rj   r5   r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r¤  r¤  Ã  s-  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*ðU
ð U
à”< $Ñ&ðU
ð œ tÑ+ðU
ð œ tÑ+ð	U
ð
 ”| dÑ*ðU
ð ”l TÑ)ðU
ð ”| dÑ*ðU
ð ”˜tÑ#ðU
ð Ð+Ô,ðU
ð 
ˆuŒ|Ô	Ð8Ñ	8ðU
ð U
ð U
ñ „^ñ ÔðU
ð U
ð U
ð U
ð U
rT   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j        dz  d
ee	         de
ej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForTokenClassificationc                 óZ  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _	        t          j
        |j        |j        ¦  «        | _        |                      ¦   «          d S ©NFrx  )r4   r5   r™  r*  r  rš  rC   r6   rB   rD   r’   r9   r›  r/  rœ  s      €rS   r5   z$ErnieForTokenClassification.__init__.  sš   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå ¸%Ð@Ñ@Ô@ˆŒ
à)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrT   NrU   rw   r2   rV   r.   rW   re  ry   rY   c           
      ó^  —  | j         |f|||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }d}|�Ft          ¦   «         } ||                     d| j        ¦  «        |                     d¦  «        ¦  «        }t          |||	j        |	j        ¬¦  «        S )a¬  
        task_type_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Task type embedding is a special embedding to represent the characteristic of different tasks, such as
            word-aware pre-training task, structure-aware pre-training task and semantic-aware pre-training task. We
            assign a `task_type_id` to each task and the `task_type_id` is in the range `[0,
            config.task_type_vocab_size-1]
        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]`.
        Trh  r   Nr0   r‹  )	r  rD   r›  r   rœ   r™  r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   re  ry   rj  r?  r€  rD  rl  s                 rS   rg   z#ErnieForTokenClassification.forward<  s×   € ð, �$”*Øð	
à)Ø)Ø'Ø%Ø'Øð	
ð 	
ð ð	
ð 	
ˆð " !œ*ˆàŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔNˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
rT   r•  )rh   ri   rj   r5   r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r«  r«  ,  s  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*ð.
ð .
à”< $Ñ&ð.
ð œ tÑ+ð.
ð œ tÑ+ð	.
ð
 ”| dÑ*ð.
ð ”l TÑ)ð.
ð ”| dÑ*ð.
ð ”˜tÑ#ð.
ð Ð+Ô,ð.
ð 
ˆuŒ|Ô	Ð4Ñ	4ð.
ð .
ð .
ñ „^ñ Ôð.
ð .
ð .
ð .
ð .
rT   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j        dz  d
ej        dz  dee	         de
ej                 ez  fd„¦   «         ¦   «         Zˆ xZS )ÚErnieForQuestionAnsweringc                 óþ   •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        t          j        |j        |j        ¦  «        | _        |  	                    ¦   «          d S r­  )
r4   r5   r™  r*  r  r6   r’   r9   Ú
qa_outputsr/  rO   s     €rS   r5   z"ErnieForQuestionAnswering.__init__q  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå ¸%Ð@Ñ@Ô@ˆŒ
Ýœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐrT   NrU   rw   r2   rV   r.   rW   Ústart_positionsÚend_positionsry   rY   c	           
      óH  —  | 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 )r8  Trh  r   r&   r0   r}   N)Úignore_indexr|   )rD  Ústart_logitsÚ
end_logitsr˜   r  )r  r²  Úsplitr¢  r„   ÚlenrJ   Úclampr   r   r˜   r  )rP   rU   rw   r2   rV   r.   rW   r³  r´  ry   rj  r?  r€  r·  r¸  rk  Úignored_indexrl  Ú
start_lossÚend_losss                       rS   rg   z!ErnieForQuestionAnswering.forward{  sÒ  € ð* �$”*Øð	
à)Ø)Ø'Ø%Ø'Øð	
ð 	
ð ð	
ð 	
ˆð " !œ*ˆà—’ Ñ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å+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
rT   ro  )rh   ri   rj   r5   r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   r°  r°  o  s/  ø€ € € € € ðð ð ð ð ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø/3Ø-1ð<
ð <
à”< $Ñ&ð<
ð œ tÑ+ð<
ð œ tÑ+ð	<
ð
 ”| dÑ*ð<
ð ”l TÑ)ð<
ð ”| dÑ*ð<
ð œ¨Ñ,ð<
ð ”| dÑ*ð<
ð Ð+Ô,ð<
ð 
ˆuŒ|Ô	Ð;Ñ	;ð<
ð <
ð <
ñ „^ñ Ôð<
ð <
ð <
ð <
ð <
rT   r°  )
rv  r†  r¤  r‘  rS  r°  r—  r«  r*  r  )Nrr   )YÚcollections.abcr   Údataclassesr   rF   Útorch.nnr6   r   r   r   Ú r	   r  Úactivationsr
   Úcache_utilsr   r   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úpytorch_utilsr   Úutilsr   r    r!   r"   Úutils.genericr#   r$   Úutils.output_capturingr%   Úconfiguration_ernier'   Ú
get_loggerrh   rz  ÚModuler)   ro   Úfloatr‡   r‰   r­   r¹   rÆ   rÑ   rÚ   rÞ   rï   r÷   rü   r  r  r*  rC  rJ  rS  rr  rv  r†  r�  r‘  r—  r¤  r«  r°  Ú__all__rH  rT   rS   ú<module>rÔ     s–  ðð* %Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 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Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ðJð Jð Jð Jð J�b”iñ Jô Jð Jðf !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð8@)ð @)ð @)ð @)ð @)˜œñ @)ô @)ð @)ðFI)ð I)ð I)ð I)ð I)˜"œ)ñ I)ô I)ð I)ðXð ð ð ð �b”iñ ô ð ð.ð .ð .ð .ð .�R”Yñ .ô .ð .ð:ð ð ð ð ˜œ	ñ ô ð ðð ð ð ð �"”)ñ ô ð ð>ð >ð >ð >ð >Ð+ñ >ô >ð >ðBð ð ð ð �"”)ñ ô ð ðð ð ð ð  2¤9ñ ô ð ð"ð ð ð ð ˜BœIñ ô ð ð 
ð 
ð 
ð 
ð 
�2”9ñ 
ô 
ð 
ð@ ð/ð /ð /ð /ð /˜?ñ /ô /ñ „ð/ð2 €ð	ðñ ô ðE6ð E6ð E6ð E6ð E6Ð%ñ E6ô E6ñô ðE6ðP €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ñ 7ô 7ñ „ñô ð7ð&	9ð 	9ð 	9ð 	9ð 	9˜BœIñ 	9ô 	9ð 	9ð €ððñ ô ð`
ð `
ð `
ð `
ð `
Ð.ñ `
ô `
ñô ð`
ðF!ð !ð !ð !ð !�r”yñ !ô !ð !ð €ððñ ô ð
X
ð X
ð X
ð X
ð X
Ð+¨_ñ X
ô X
ñô ð
X
ðv ðP
ð P
ð P
ð P
ð P
Ð+ñ P
ô P
ñ „ðP
ðf&ð &ð &ð &ð &�r”yñ &ô &ð &ð €ððñ ô ð
P
ð P
ð P
ð P
ð P
Ð%9ñ P
ô P
ñô ð
P
ðf €ððñ ô ðT
ð T
ð T
ð T
ð T
Ð%9ñ T
ô T
ñô ðT
ðn ðe
ð e
ð e
ð e
ð e
Ð1ñ e
ô e
ñ „ðe
ðP ð?
ð ?
ð ?
ð ?
ð ?
Ð"6ñ ?
ô ?
ñ „ð?
ðD ðI
ð I
ð I
ð I
ð I
Ð 4ñ I
ô I
ñ „ðI
ðXð ð €€€rT   