Ë
    ÛÓ^j‡ô  ã                   ó  — 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/jn                  e8«      Z9 G d„ dejt                  «      Z;	 	 dZdejt                  dejx                  dejx                  dejx                  dejx                  dz  de=dz  de=de(e-   fd„Z> G d „ d!ejt                  «      Z? G d"„ d#ejt                  «      Z@ G d$„ d%ejt                  «      ZA G d&„ d'ejt                  «      ZB G d(„ d)ejt                  «      ZC G d*„ d+ejt                  «      ZD G d,„ d-e«      ZE G d.„ d/ejt                  «      ZF G d0„ d1ejt                  «      ZG G d2„ d3ejt                  «      ZH G d4„ d5ejt                  «      ZIe. G d6„ d7e&«      «       ZJ e.d8¬9«       G d:„ d;eJ«      «       ZK e.d<¬9«      e G d=„ d>e,«      «       «       ZL G d?„ d@ejt                  «      ZM e.dA¬9«       G dB„ dCeJ«      «       ZN G dD„ dEejt                  «      ZO e.dF¬9«       G dG„ dHeJe«      «       ZPe. G dI„ dJeJ«      «       ZQ G dK„ dLejt                  «      ZR e.dM¬9«       G dN„ dOeJ«      «       ZS e.dP¬9«       G dQ„ dReJ«      «       ZTe. G dS„ dTeJ«      «       ZUe. G dU„ dVeJ«      «       ZVe. G dW„ dXeJ«      «       ZWg dY¢ZXy)[é    )Ú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                 ó´  •— t         ‰| �  «        t        j                  |j                  |j
                  |j                  ¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        | j#                  dt%        j&                  |j                  «      j)                  d«      d¬«       | j#                  dt%        j*                  | j,                  j/                  «       t$        j0                  ¬«      d¬«       |j2                  | _        |j2                  r0t        j                  |j4                  |j
                  «      | _        y y )	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     €ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/ernie/modeling_ernie.pyr5   zErnieEmbeddings.__init__<   sX  ø€ Ü‰ÑÔÜ!Ÿ|™|¨F×,=Ñ,=¸v×?QÑ?QÐ_e×_rÑ_rÔsˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"äŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒà×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	ô 	
ð 	×ÑØœeŸk™k¨$×*;Ñ*;×*@Ñ*@Ó*BÌ%Ï*É*ÔUÐbgð 	ô 	
ð "×-Ñ-ˆÔØ×ÒÜ(*¯©°V×5PÑ5PÐRX×RdÑRdÓ(eˆDÕ%ð ó    NÚ	input_idsr2   Útask_type_idsr.   Úinputs_embedsÚpast_key_values_lengthÚreturnc                 ó|  — |�|j                  «       }n|j                  «       d d }|\  }}	|€| j                  d d …||	|z   …f   }|€št        | d«      rT| j                  j	                  |j
                  d   d«      }
t        j                  |
d|¬«      }
|
j	                  ||	«      }n:t        j                  |t        j                  | j                  j                  ¬«      }|€| j                  |«      }| j                  |«      }|j                  |j                  «      }||z   }| j                  |«      }||z   }| j                  rR|€:t        j                  |t        j                  | j                  j                  ¬«      }| j!                  |«      }||z  }| j#                  |«      }| j%                  |«      }|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à'×,Ñ,Ó.¨s°Ð3ˆKà!,Ñˆ
�JàÐØ×,Ñ,ªQÐ0FÈÐVlÑIlÐ0lÐ-lÑmˆLð
 Ð!Ü�tÐ-Ô.à*.×*=Ñ*=×*DÑ*DÀ\×EWÑEWÐXYÑEZÐ\^Ó*_Ð'Ü*/¯,©,Ð7NÐTUÐ]iÔ*jÐ'Ø!8×!?Ñ!?À
ÈJÓ!W‘ä!&§¡¨[ÄÇ
Á
ÐSW×SdÑSd×SkÑSkÔ!l�àÐ Ø ×0Ñ0°Ó;ˆMØ $× :Ñ :¸>Ó JÐð &×(Ñ(Ð)>×)EÑ)EÓFˆØ"Ð%:Ñ:ˆ
à"×6Ñ6°|ÓDÐØÐ"5Ñ5ˆ
ð ×ÒØÐ$Ü %§¡¨K¼u¿z¹zÐRV×RcÑRc×RjÑRjÔ 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ôfð, .2Ø26Ø15Ø04Ø26Ø&'ñ3à×#Ñ# dÑ*ð3ð ×(Ñ(¨4Ñ/ð3ð ×'Ñ'¨$Ñ.ð	3ð
 ×&Ñ&¨Ñ-ð3ð ×(Ñ(¨4Ñ/ð3ð !$ð3ð 
�‰÷3rT   r)   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingrD   Úkwargsc                 óœ  — |€|j                  d«      dz  }t        j                  ||j                  dd«      «      |z  }|�||z   }t        j
                  j                  |d¬«      }t        j
                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nr0   ç      à¿é   r   ©r[   )ÚpÚtrainingr&   )
rJ   rF   ÚmatmulÚ	transposer6   Ú
functionalÚsoftmaxrD   r~   Ú
contiguous)
rr   rs   rt   ru   rv   rw   rD   rx   Úattn_weightsÚattn_outputs
             rS   Úeager_attention_forwardr†   †   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ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 )ÚErnieSelfAttentionNc                 ó@  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        | j                  dz  | _
        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                   |j"                  «      | _        |j&                  | _        || _        || _        y ©Nr   Úembedding_sizezThe hidden size (z6) is not a multiple of the number of attention heads (ú)rz   )r4   r5   r9   Únum_attention_headsr^   Ú
ValueErrorrQ   rn   Úattention_head_sizeÚall_head_sizerw   r6   ÚLinearrs   rt   ru   rB   Úattention_probs_dropout_probrD   Ú
is_decoderÚ	is_causalÚ	layer_idx©rP   rQ   r”   r•   rR   s       €rS   r5   zErnieSelfAttention.__init__£   sP  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð ˆŒà#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà ×+Ñ+ˆŒØ"ˆŒØ"ˆ�rT   Úhidden_statesrv   Úpast_key_valuesrx   rY   c                 ó   — |j                   d d }g |¢d‘| j                  ‘­} | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      }	|�>|}
t        |t        «      r|j                  }
|
j                  ||	| j                  «      \  }}	t        j                  | j                  j                  t         «      } || |||	|f| j"                  sdn| j$                  j&                  | j(                  dœ|¤Ž\  }} |j*                  g |¢d‘­Ž j-                  «       }||fS )Nr0   r&   r{   ç        ©rD   rw   )r_   r�   rs   Úviewr€   rt   ru   Ú
isinstancer   Úself_attention_cacheÚupdater•   r   Úget_interfacerQ   Ú_attn_implementationr†   r~   rD   r}   rw   Úreshaperƒ   )rP   r—   rv   r˜   rx   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Ñ*BÑCˆð 5�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆØ0�D—H‘H˜]Ó+×0Ñ0°,Ð?×IÑIÈ!ÈQÓOˆ	Ø4�d—j‘j Ó/×4Ñ4°lÐC×MÑMÈaÐQRÓSˆàÐ&à&5Ð#Ü˜/Ô+>Ô?Ø*9×*NÑ*NÐ'ð &=×%CÑ%CÀIÈ{Ð\`×\jÑ\jÓ%kÑ"ˆI�{ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,·.±.Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(rT   ©FN)NN©rh   ri   rj   r5   rF   ro   rm   r   r   r    Útuplerg   rp   rq   s   @rS   rˆ   rˆ   ¢   sg   ø„ õ#ð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 )ÚErnieCrossAttentionNc                 ó  •— t         ‰| �  «        |j                  |j                  z  dk7  r2t	        |d«      s&t        d|j                  › d|j                  › d�«      ‚|| _        |j                  | _        t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        | j                  dz  | _
        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  | j                  «      | _        t        j                   |j"                  «      | _        || _        || _        y rŠ   )r4   r5   r9   r�   r^   rŽ   rQ   rn   r�   r�   rw   r6   r‘   rs   rt   ru   rB   r’   rD   r”   r•   r–   s       €rS   r5   zErnieCrossAttention.__init__æ   sC  ø€ Ü‰ÑÔØ×Ñ × :Ñ :Ñ:¸aÒ?ÌÐPVÐXhÔHiÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5°Qð8óð ð ˆŒà#)×#=Ñ#=ˆÔ Ü#& v×'9Ñ'9¸F×<VÑ<VÑ'VÓ#WˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
Ü—9‘9˜V×/Ñ/°×1CÑ1CÓDˆŒÜ—Y‘Y˜v×1Ñ1°4×3EÑ3EÓFˆŒ
ä—z‘z &×"EÑ"EÓFˆŒà"ˆŒØ"ˆ�rT   r—   Úencoder_hidden_statesrv   r˜   rx   rY   c                 óf  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }|�%|j
                  j                  | j                  «      nd}	|�]|	r[|j                  j                  | j                     j                  }
|j                  j                  | j                     j                  }nÅg |j                   d d ¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      j                  |«      j	                  dd«      }|�C|j                  j                  |
|| j                  «      \  }
}d|j
                  | j                  <   t        j                   | j"                  j$                  t&        «      } || ||
||f| j(                  sdn| j*                  j,                  | j.                  dœ|¤Ž\  }} |j0                  g |¢d‘­Ž j3                  «       }||fS )Nr0   r&   r{   FTrš   r›   )r_   r�   rs   rœ   r€   Ú
is_updatedÚgetr•   Úcross_attention_cacheÚlayersÚkeysÚvaluesrt   ru   rŸ   r   r    rQ   r¡   r†   r~   rD   r}   rw   r¢   rƒ   )rP   r—   r¯   rv   r˜   rx   rb   r£   r¤   r±   r¥   r¦   Úkv_shaper¨   r…   r„   s                   rS   rg   zErnieCrossAttention.forwardý   s  € ð $×)Ñ)¨#¨2Ð.ˆàC˜ÐC bÐC¨$×*BÑ*BÑCˆð —j‘j Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆàGVÐGb�_×/Ñ/×3Ñ3°D·N±NÔCÐhmˆ
ØÐ&©:à'×=Ñ=×DÑDÀTÇ^Á^ÑT×YÑYˆIØ)×?Ñ?×FÑFÀtÇ~Á~ÑV×]Ñ]‰KàXÐ.×4Ñ4°S°bÐ9ÐX¸2ÐX¸t×?WÑ?WÑXˆHØŸ™Ð!6Ó7×<Ñ<¸XÓF×PÑPÐQRÐTUÓVˆIØŸ*™*Ð%:Ó;×@Ñ@ÀÓJ×TÑTÐUVÐXYÓZˆKàÐ*à)8×)NÑ)N×)UÑ)UØ˜{¨D¯N©Nó*Ñ&�	˜;ð >B�×*Ñ*¨4¯>©>Ñ:ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,·.±.Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(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)ð  %×0Ñ0°4Ñ7ð1)ð ×)Ñ)¨DÑ0ð	1)ð
 -¨tÑ3ð1)ð Ð+Ñ,ð1)ð 
ˆu�|‰|Ñ	÷1)rT   r­   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚErnieSelfOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  ¬«      | _        t        j                  |j                  «      | _
        y ©Nr,   )r4   r5   r6   r‘   r9   Údenser@   rA   rB   rC   rD   rO   s     €rS   r5   zErnieSelfOutput.__init__2  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rT   r—   Úinput_tensorrY   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S ©N©r¼   rD   r@   ©rP   r—   r½   s      rS   rg   zErnieSelfOutput.forward8  ó7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°|Ñ'CÓDˆØÐrT   ©rh   ri   rj   r5   rF   ro   rg   rp   rq   s   @rS   r¹   r¹   1  ó1   ø„ ô>ð U§\¡\ð ÀÇÁð ÐRW×R^Ñ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 )ÚErnieAttentionNc                 óŒ   •— t         ‰| �  «        || _        |rt        nt        } ||||¬«      | _        t        |«      | _        y )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[ˆÙ# F°iÈ9ÔUˆŒ	Ü% fÓ-ˆ�rT   r—   rv   r¯   Úencoder_attention_maskr˜   rx   rY   c                 ó‚   — | j                   s|n|} | j                  |f|||dœ|¤Ž\  }}| j                  ||«      }||fS )N)r¯   rv   r˜   )rÉ   rP   rÊ   )	rP   r—   rv   r¯   rÌ   r˜   rx   Úattention_outputr„   s	            rS   rg   zErnieAttention.forwardG  sd   € ð 04×/FÒ/F™ÐLbˆØ)2¨¯©Øð*
à"7Ø)Ø+ñ	*
ð
 ñ*
Ñ&Ð˜,ð  Ÿ;™;Ð'7¸ÓGÐØ Ð-Ð-rT   )FNF©NNNNrª   rq   s   @rS   rÆ   rÆ   ?  s—   ø„ õ.ð 48Ø:>Ø;?Ø(,ñ.à—|‘|ð.ð ×)Ñ)¨DÑ0ð.ð  %×0Ñ0°4Ñ7ð	.ð
 !&× 1Ñ 1°DÑ 8ð.ð  ™ð.ð Ð+Ñ,ð.ð 
ˆu�|‰|Ñ	÷.rT   rÆ   c                   óV   ‡ — 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                     | _        y |j                  | _        y r¿   )r4   r5   r6   r‘   r9   Úintermediate_sizer¼   r�   Ú
hidden_actÚstrr
   Úintermediate_act_fnrO   s     €rS   r5   zErnieIntermediate.__init__]  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3KÑ3KÓLˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$rT   r—   rY   c                 óJ   — | j                  |«      }| j                  |«      }|S r¿   )r¼   rÖ   ©rP   r—   s     rS   rg   zErnieIntermediate.forwarde  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐrT   rÃ   rq   s   @rS   rÑ   rÑ   \  s#   ø„ ô9ð U§\¡\ð °e·l±l÷ rT   rÑ   c                   ón   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  fd„Zˆ xZS )ÚErnieOutputc                 ó(  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        j                  |j
                  |j                  ¬«      | _        t        j                  |j                  «      | _        y r»   )r4   r5   r6   r‘   rÓ   r9   r¼   r@   rA   rB   rC   rD   rO   s     €rS   r5   zErnieOutput.__init__l  s`   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9KÑ9KÓLˆŒ
ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�rT   r—   r½   rY   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||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                  r.| j
                  st        | › d�«      ‚t	        |d|d¬«      | _	        t        |«      | _        t        |«      | _        y )Nr&   rÈ   z> should be used as a decoder model if cross attention is addedFT)r”   r•   rÉ   )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Ñ'EˆÔ$ØˆÔÜ'¨¸&×:KÑ:KÐW`ÔaˆŒØ ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ Ø×#Ò#Ø—?’?Ü  D 6Ð)gÐ!hÓiÐiÜ"0ØØØ#Ø#'ô	#ˆDÔô .¨fÓ5ˆÔÜ! &Ó)ˆ�rT   r—   rv   r¯   rÌ   r˜   rx   rY   c                 ó   —  | j                   ||fd|i|¤Ž\  }}|}	| j                  r:|�8t        | d«      st        d| › d�«      ‚ | j                  |d ||fd|i|¤Ž\  }
}|
}	t        | j                  | j                  | j                  |	«      }|S )Nr˜   rä   z'If `encoder_hidden_states` are passed, z` has to be instantiated with cross-attention layers by setting `config.add_cross_attention=True`)	râ   r“   r^   rŽ   rä   r   Úfeed_forward_chunkrà   rá   )rP   r—   rv   r¯   rÌ   r˜   rx   Úself_attention_outputÚ_rÎ   Úcross_attention_outputÚlayer_outputs               rS   rg   zErnieLayer.forward�  så   € ð $2 4§>¡>ØØñ$
ð ,ð$
ð ñ	$
Ñ Ð˜qð 1Ðà�?Š?Ð4Ð@Ü˜4Ð!1Ô2Ü Ø=¸d¸Vð DDð Dóð ð
 )<¨×(;Ñ(;Ø%ØØ%Ø&ñ	)ð
 !0ð)ð ñ)Ñ%Ð" Að  6Ðä0Ø×#Ñ# T×%AÑ%AÀ4×CSÑCSÐUeó
ˆð ÐrT   c                 óL   — | j                  |«      }| j                  ||«      }|S r¿   )rå   rÊ   )rP   rÎ   Úintermediate_outputrë   s       rS   rç   zErnieLayer.feed_forward_chunk´  s,   € Ø"×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÓ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Ñ0°4Ñ7ð	%ð
 !&× 1Ñ 1°DÑ 8ð%ð  ™ð%ð Ð+Ñ,ð%ð 
�‰ó%öNrT   rÞ   c                   óV   ‡ — 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                  «       | _        y r¿   )r4   r5   r6   r‘   r9   r¼   ÚTanhÚ
activationrO   s     €rS   r5   zErniePooler.__init__»  s9   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
ÜŸ'™'›)ˆ�rT   r—   rY   c                 ó\   — |d d …df   }| j                  |«      }| j                  |«      }|S )Nr   )r¼   rò   )rP   r—   Úfirst_token_tensorÚpooled_outputs       rS   rg   zErniePooler.forwardÀ  s6   € ð +ª1¨a¨4Ñ0ÐØŸ
™
Ð#5Ó6ˆØŸ™¨Ó6ˆØÐrT   rÃ   rq   s   @rS   rï   rï   º  s#   ø„ ô$ð
 U§\¡\ð °e·l±l÷ rT   rï   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚErniePredictionHeadTransformc                 óh  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        j                  |j                  |j                  ¬«      | _        y r»   )r4   r5   r6   r‘   r9   r¼   r�   rÔ   rÕ   r
   Útransform_act_fnr@   rA   rO   s     €rS   r5   z%ErniePredictionHeadTransform.__init__Ê  s{   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!ÜŸ™ f×&8Ñ&8¸f×>SÑ>SÔTˆ�rT   r—   rY   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r¿   )r¼   rù   r@   rØ   s     rS   rg   z$ErniePredictionHeadTransform.forwardÓ  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrT   rÃ   rq   s   @rS   r÷   r÷   É  s$   ø„ ôUð U§\¡\ð °e·l±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                  «      «      | _        y )NT)Úbias)r4   r5   r÷   Ú	transformr6   r‘   r9   r8   ÚdecoderÚ	ParameterrF   rI   rþ   rO   s     €rS   r5   zErnieLMPredictionHead.__init__Û  s[   ø€ Ü‰ÑÔÜ5°fÓ=ˆŒô —y‘y ×!3Ñ!3°V×5FÑ5FÈTÔRˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆ�	rT   c                 óJ   — | j                  |«      }| j                  |«      }|S r¿   )rÿ   r   rØ   s     rS   rg   zErnieLMPredictionHead.forwardä  s$   € ØŸ™ }Ó5ˆØŸ™ ]Ó3ˆØÐrT   ©rh   ri   rj   r5   rg   rp   rq   s   @rS   rü   rü   Ú  s   ø„ ô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                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        y c c}w )N)r•   )	r4   r5   rQ   r6   Ú
ModuleListÚrangeÚnum_hidden_layersrÞ   Úlayer)rP   rQ   ÚirR   s      €rS   r5   zErnieEncoder.__init__ë  sF   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÌUÐSY×SkÑSkÓMlÖ#mÈ¤J¨vÀÖ$CÒ#mÓnˆ�
ùÒ#ms   ½ANr—   rv   r¯   rÌ   r˜   Ú	use_cacherx   rY   c                 ó„   — t        | j                  «      D ]  \  }}	 |	|||f||dœ|¤Ž}Œ t        ||r|¬«      S d ¬«      S )N)rÌ   r˜   )Úlast_hidden_stater˜   )Ú	enumerater
  r   )
rP   r—   rv   r¯   rÌ   r˜   r  rx   r  Úlayer_modules
             rS   rg   zErnieEncoder.forwardð  sn   € ô  )¨¯©Ó4ò 	‰OˆAˆ|Ù(ØØØ%ðð (>Ø /ñð ñ‰Mð	ô 9Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
rT   )NNNNN)rh   ri   rj   r5   rF   ro   rm   r   Úboolr   r    r«   r   rg   rp   rq   s   @rS   r  r  ê  s¯   ø„ ôoð 48Ø:>Ø;?Ø(,Ø!%ñ
à—|‘|ð
ð ×)Ñ)¨DÑ0ð
ð  %×0Ñ0°4Ñ7ð	
ð
 !&× 1Ñ 1°DÑ 8ð
ð  ™ð
ð ˜$‘;ð
ð Ð+Ñ,ð
ð 
ˆu�|‰|Ñ	ÐHÑ	H÷
rT   r  c                   ón   ‡ — e Zd ZeZdZdZdZdZdZ	dZ
eeedœZ ej                   «       ˆ fd„«       Zˆ xZS )ÚErniePreTrainedModelÚernieT)r—   Ú
attentionsÚcross_attentionsc                 ó–  •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       yt        |t        «      ryt	        j                  |j                  t        j                  |j                  j                  d   «      j                  d«      «       t	        j
                  |j                  «       yy)zInitialize the weightsr0   r/   N)r4   Ú_init_weightsr�   rü   ÚinitÚzeros_rþ   r)   Úcopy_r.   rF   rG   r_   rH   r2   )rP   rr   rR   s     €rS   r  z"ErniePreTrainedModel._init_weights  s‰   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ3Ô4Ü�K‰K˜Ÿ™Õ$Ü˜¤Ô0Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÔhÜ�K‰K˜×-Ñ-Õ.ð 1rT   )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  
  sX   ø„ à€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                   ó¦  ‡ — 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Þ   c                 óÈ   •— t         ‰| �  |«       || _        d| _        t	        |«      | _        t        |«      | _        |rt        |«      nd| _	        | j                  «        y)zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        FN)r4   r5   rQ   Úgradient_checkpointingr)   rf   r  Úencoderrï   ÚpoolerÚ	post_init)rP   rQ   Úadd_pooling_layerrR   s      €rS   r5   zErnieModel.__init__3  sU   ø€ ô
 	‰Ñ˜Ô ØˆŒØ&+ˆÔ#ä)¨&Ó1ˆŒÜ# FÓ+ˆŒá->”k &Ô)ÀDˆŒð 	�‰ÕrT   c                 ó.   — | j                   j                  S r¿   ©rf   r;   ©rP   s    rS   Úget_input_embeddingszErnieModel.get_input_embeddingsD  s   € Ø�‰×.Ñ.Ð.rT   c                 ó&   — || j                   _        y r¿   r/  )rP   ru   s     rS   Úset_input_embeddingszErnieModel.set_input_embeddingsG  s   € Ø*/ˆ�‰Õ'rT   NrU   rv   r2   rV   r.   rW   r¯   rÌ   r˜   r  rx   rY   c           
      ó�  — |du |duz  rt        d«      ‚| j                  j                  r|
�|
n| j                  j                  }
nd}
|
rd|	€b|€| j                  j                  r4t        t        | j                  ¬«      t        | j                  ¬«      «      nt        | j                  ¬«      }	|	�|	j                  «       nd}| j                  ||||||¬«      }| j                  |||||	¬«      \  }} | j                  |f||||	|
|dœ|¤Ž}|d   }| j                  �| 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   )rv   rÌ   Úembedding_outputr¯   r˜   )rv   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   rv   r2   rV   r.   rW   r¯   rÌ   r˜   r  rx   rX   r6  Úencoder_outputsÚsequence_outputrõ   s                    rS   rg   zErnieModel.forwardJ  s~  € ð0 ˜Ð -°tÐ";Ò<ÜÐYÓZÐZà�;‰;×!Ò!Ø%.Ð%:™	ÀÇÁ×@UÑ@U‰IàˆIá˜Ð0ð )Ð4¸¿¹×8VÒ8Vô $¤L¸¿¹Ô$DÄlÐZ^×ZeÑZeÔFfÔgä!¨¯©Ô5ð ð FUÐE` ×!?Ñ!?Ô!AÐfgÐØŸ?™?ØØ%Ø)à'Ø'Ø#9ð +ó 
Ðð 26×1MÑ1MØ)Ø#9Ø-Ø"7Ø+ð 2Nó 2
Ñ.ˆÐ.ð '˜$Ÿ,™,Øð	
à)Ø"7Ø#9Ø+ØØ%ñ	
ð ñ	
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä;Ø-Ø'Ø+×;Ñ;ô
ð 	
rT   c                 óÐ   — | j                   j                  rt        | j                   |||¬«      }nt        | j                   ||¬«      }|�t        | j                   |||¬«      }||fS )N)rQ   rW   rv   r˜   )rQ   rW   rv   )rQ   rW   rv   r¯   )rQ   r“   r   r   )rP   rv   rÌ   r6  r¯   r˜   s         rS   r:  z"ErnieModel._create_attention_masks—  su   € ð �;‰;×!Ò!Ü/Ø—{‘{Ø.Ø-Ø /ô	‰Nô 7Ø—{‘{Ø.Ø-ôˆNð "Ð-Ü%>Ø—{‘{Ø.Ø5Ø&;ô	&Ð"ð Ð5Ð5Ð5rT   )T)
NNNNNNNNNN)rh   ri   rj   Ú_no_split_modulesr5   r1  r3  r$   r%   r!   rF   ro   r   r  r   r    r«   r   rg   r:  rp   rq   s   @rS   r'  r'  $  sO  ø„ ð &˜Ðõò"/ò0ð  ØØð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø(,Ø!%ñH
à—<‘< $Ñ&ðH
ð Ÿ™ tÑ+ðH
ð Ÿ™ tÑ+ð	H
ð
 —|‘| dÑ*ðH
ð —l‘l TÑ)ðH
ð —|‘| dÑ*ðH
ð  %Ÿ|™|¨dÑ2ðH
ð !&§¡¨tÑ 3ðH
ð  ™ðH
ð ˜$‘;ðH
ð Ð+Ñ,ðH
ð 
ˆu�|‰|Ñ	ÐKÑ	KòH
ó ó ó  ðH
öT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<   y)Ú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   rA  rF   rm   Ú__annotations__rB  rC  r—   r«   r  © rT   rS   r@  r@  ¸  s~   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø8<Ð˜U×.Ñ.°Ñ5Ó<Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6rT   r@  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚErniePreTrainingHeadsc                 óŒ   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  d«      | _        y ©Nr{   )r4   r5   rü   Úpredictionsr6   r‘   r9   Úseq_relationshiprO   s     €rS   r5   zErniePreTrainingHeads.__init__Ò  s4   ø€ Ü‰ÑÔÜ0°Ó8ˆÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕrT   c                 óN   — | j                  |«      }| j                  |«      }||fS r¿   )rJ  rK  )rP   r<  rõ   Úprediction_scoresÚseq_relationship_scores        rS   rg   zErniePreTrainingHeads.forward×  s0   € Ø ×,Ñ,¨_Ó=ÐØ!%×!6Ñ!6°}Ó!EÐØ Ð"8Ð8Ð8rT   r  rq   s   @rS   rG  rG  Ñ  s   ø„ ôAö
9rT   rG  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	        |«      | _        | j                  «        y r¿   )r4   r5   r'  r  rG  Úclsr,  rO   s     €rS   r5   zErnieForPreTraining.__init__é  s4   ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
Ü(¨Ó0ˆŒð 	�‰ÕrT   c                 óB   — | j                   j                  j                  S r¿   ©rW  rJ  r   r0  s    rS   Úget_output_embeddingsz)ErnieForPreTraining.get_output_embeddingsò  ó   € Ø�x‰x×#Ñ#×+Ñ+Ð+rT   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r¿   ©rW  rJ  r   rþ   ©rP   Únew_embeddingss     rS   Úset_output_embeddingsz)ErnieForPreTraining.set_output_embeddingsõ  ó,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!rT   NrU   rv   r2   rV   r.   rW   ÚlabelsÚnext_sentence_labelrx   rY   c	           
      óª  —  | j                   |f|||||ddœ|	¤Ž}
|
dd \  }}| j                  ||«      \  }}d}|�u|�st        «       } ||j                  d| j                  j
                  «      |j                  d«      «      } ||j                  dd«      |j                  d«      «      }||z   }t        ||||
j                  |
j                  ¬«      S )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©rv   r2   rV   r.   rW   Úreturn_dictNr{   r0   )rA  rB  rC  r—   r  )	r  rW  r   rœ   rQ   r8   r@  r—   r  )rP   rU   rv   r2   rV   r.   rW   rb  rc  rx   Úoutputsr<  rõ   rM  rN  Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_losss                      rS   rg   zErnieForPreTraining.forwardù  s  € ð^ �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð *1°°!¨Ñ&ˆ˜Ø48·H±H¸_ÈmÓ4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNÙ!)Ð*@×*EÑ*EÀbÈ!Ó*LÐNa×NfÑNfÐgiÓNjÓ!kÐØ'Ð*<Ñ<ˆJä(ØØ/Ø$:Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rT   ©NNNNNNNN)rh   ri   rj   Ú_tied_weights_keysr5   rZ  r`  r#   r!   rF   ro   r   r    r«   r@  rg   rp   rq   s   @rS   rP  rP  Ý  s#  ø„ ð )?Ø*SñÐô
ò,ò8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø&*Ø37ñH
à—<‘< $Ñ&ðH
ð Ÿ™ tÑ+ðH
ð Ÿ™ tÑ+ð	H
ð
 —|‘| dÑ*ðH
ð —l‘l TÑ)ðH
ð —|‘| dÑ*ðH
ð —‘˜tÑ#ðH
ð #Ÿ\™\¨DÑ0ðH
ð Ð+Ñ,ðH
ð 
ˆu�|‰|Ñ	Ð8Ñ	8òH
ó ó ôH
rT   rP  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚErnieOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y r¿   )r4   r5   rü   rJ  rO   s     €rS   r5   zErnieOnlyMLMHead.__init__G  s   ø€ Ü‰ÑÔÜ0°Ó8ˆÕrT   r<  rY   c                 ó(   — | j                  |«      }|S r¿   )rJ  )rP   r<  rM  s      rS   rg   zErnieOnlyMLMHead.forwardK  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rT   rÃ   rq   s   @rS   ro  ro  F  s#   ø„ ô9ð! u§|¡|ð !¸¿¹÷ !rT   ro  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 )ÚErnieForCausalLMrR  rQ  )rU  rT  c                 óÊ   •— t         ‰| �  |«       |j                  st        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NzMIf you want to use `ErnieForCausalLM` as a standalone, add `is_decoder=True.`F©r-  ©
r4   r5   r“   ÚloggerÚwarningr'  r  ro  rW  r,  rO   s     €rS   r5   zErnieForCausalLM.__init__[  sL   ø€ Ü‰Ñ˜Ô à× Ò Ü�N‰NÐjÔkä ¸%Ô@ˆŒ
Ü# FÓ+ˆŒð 	�‰ÕrT   c                 óB   — | j                   j                  j                  S r¿   rY  r0  s    rS   rZ  z&ErnieForCausalLM.get_output_embeddingsg  r[  rT   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r¿   r]  r^  s     rS   r`  z&ErnieForCausalLM.set_output_embeddingsj  ra  rT   NrU   rv   r2   rV   r.   rW   r¯   rÌ   rb  r˜   r  Úlogits_to_keeprx   rY   c                 ó   — |	�d} | j                   |f||||||||
|ddœ
|¤Ž}|j                  }t        |t        «      rt	        | d«      n|}| j                  |dd…|dd…f   «      }d}|	�* | j                  d||	| j                  j                  dœ|¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )a�  
        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)
rv   r2   rV   r.   rW   r¯   rÌ   r˜   r  rf  )Úlogitsrb  r8   )rA  r}  r˜   r—   r  r  rE  )r  r  r�   rn   ÚslicerW  Úloss_functionrQ   r8   r   r˜   r—   r  r  )rP   rU   rv   r2   rV   r.   rW   r¯   rÌ   rb  r˜   r  r{  rx   rg  r—   Úslice_indicesr}  rA  s                      rS   rg   zErnieForCausalLM.forwardn  sÿ   € ð: ÐØˆIà@JÀÇ
Á
ØðA
à)Ø)Ø'Ø%Ø'Ø"7Ø#9Ø+ØØñA
ð ñA
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜-ª¨=º!Ð(;Ñ<Ó=ˆàˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä0ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø$×5Ñ5ô
ð 	
rT   )NNNNNNNNNNNr   )rh   ri   rj   rm  r5   rZ  r`  r#   r!   rF   ro   Úlistr  rn   r   r    r«   r   rg   rp   rq   s   @rS   rs  rs  P  sp  ø„ ð +TØ(>ñÐô

ò,ò8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø&*Ø59Ø!%Ø-.ñ=
à—<‘< $Ñ&ð=
ð Ÿ™ tÑ+ð=
ð Ÿ™ tÑ+ð	=
ð
 —|‘| dÑ*ð=
ð —l‘l TÑ)ð=
ð —|‘| dÑ*ð=
ð  %Ÿ|™|¨dÑ2ð=
ð !&§¡¨tÑ 3ð=
ð —‘˜tÑ#ð=
ð ˜eŸl™lÑ+¨dÑ2ð=
ð ˜$‘;ð=
ð ˜eŸl™lÑ*ð=
ð Ð+Ñ,ð=
ð 
ˆu�|‰|Ñ	Ð@Ñ	@ò=
ó ó ô=
rT   rs  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   dee	j                     ez  fd„«       «       Zˆ xZS )ÚErnieForMaskedLMrQ  rR  rS  c                 óÊ   •— t         ‰| �  |«       |j                  rt        j	                  d«       t        |d¬«      | _        t        |«      | _        | j                  «        y )NzlIf you want to use `ErnieForMaskedLM` make sure `config.is_decoder=False` for bi-directional self-attention.Fru  rv  rO   s     €rS   r5   zErnieForMaskedLM.__init__·  sR   ø€ Ü‰Ñ˜Ô à×ÒÜ�N‰Nð1ôô
   ¸%Ô@ˆŒ
Ü# FÓ+ˆŒð 	�‰ÕrT   c                 óB   — | j                   j                  j                  S r¿   rY  r0  s    rS   rZ  z&ErnieForMaskedLM.get_output_embeddingsÆ  r[  rT   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r¿   r]  r^  s     rS   r`  z&ErnieForMaskedLM.set_output_embeddingsÉ  ra  rT   NrU   rv   r2   rV   r.   rW   r¯   rÌ   rb  rx   rY   c
                 ó@  —  | j                   |f|||||||ddœ|
¤Ž}|d   }| j                  |«      }d}|	�Ft        «       } ||j                  d| j                  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)rv   r2   rV   r.   rW   r¯   rÌ   rf  r   Nr0   ©rA  r}  r—   r  )	r  rW  r   rœ   rQ   r8   r   r—   r  )rP   rU   rv   r2   rV   r.   rW   r¯   rÌ   rb  rx   rg  r<  rM  rj  ri  s                   rS   rg   zErnieForMaskedLM.forwardÍ  sÁ   € ð4 �$—*‘*Øð
à)Ø)Ø'Ø%Ø'Ø"7Ø#9Øñ
ð ñ
ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rT   )	NNNNNNNNN)rh   ri   rj   rm  r5   rZ  r`  r#   r!   rF   ro   r   r    r«   r   rg   rp   rq   s   @rS   rƒ  rƒ  °  s,  ø„ ð )?Ø*SñÐô
ò,ò8ð Øð *.Ø.2Ø.2Ø-1Ø,0Ø-1Ø59Ø6:Ø&*ñ2
à—<‘< $Ñ&ð2
ð Ÿ™ tÑ+ð2
ð Ÿ™ tÑ+ð	2
ð
 —|‘| dÑ*ð2
ð —l‘l TÑ)ð2
ð —|‘| dÑ*ð2
ð  %Ÿ|™|¨dÑ2ð2
ð !&§¡¨tÑ 3ð2
ð —‘˜tÑ#ð2
ð Ð+Ñ,ð2
ð 
ˆu�|‰|Ñ	˜~Ñ	-ò2
ó ó ô2
rT   rƒ  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚErnieOnlyNSPHeadc                 ól   •— t         ‰| �  «        t        j                  |j                  d«      | _        y rI  )r4   r5   r6   r‘   r9   rK  rO   s     €rS   r5   zErnieOnlyNSPHead.__init__  s'   ø€ Ü‰ÑÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕrT   c                 ó(   — | j                  |«      }|S r¿   )rK  )rP   rõ   rN  s      rS   rg   zErnieOnlyNSPHead.forward	  s   € Ø!%×!6Ñ!6°}Ó!EÐØ%Ð%rT   r  rq   s   @rS   rŠ  rŠ    s   ø„ ôAö&rT   rŠ  zU
    Ernie Model with a `next sentence prediction (classification)` head on top.
    c                   óJ  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ee	   de
ej                     ez  fd„«       «       Zˆ xZS )ÚErnieForNextSentencePredictionc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r¿   )r4   r5   r'  r  rŠ  rW  r,  rO   s     €rS   r5   z'ErnieForNextSentencePrediction.__init__  s4   ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
Ü# FÓ+ˆŒð 	�‰ÕrT   NrU   rv   r2   rV   r.   rW   rb  rx   rY   c           
      ó  —  | j                   |f|||||ddœ|¤Ž}	|	d   }
| j                  |
«      }d}|�2t        «       } ||j                  d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,)`, *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
        ```
        Tre  r&   Nr0   r{   rˆ  )r  rW  r   rœ   r   r—   r  )rP   rU   rv   r2   rV   r.   rW   rb  rx   rg  rõ   Úseq_relationship_scoresrk  ri  s                 rS   rg   z&ErnieForNextSentencePrediction.forward  s°   € ðZ �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð   ™
ˆà"&§(¡(¨=Ó"9Ðà!ÐØÐÜ'Ó)ˆHÙ!)Ð*A×*FÑ*FÀrÈ1Ó*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
ð Ÿ™ tÑ+ðD
ð Ÿ™ tÑ+ð	D
ð
 —|‘| dÑ*ðD
ð —l‘l TÑ)ðD
ð —|‘| dÑ*ðD
ð —‘˜tÑ#ðD
ð Ð+Ñ,ðD
ð 
ˆu�|‰|Ñ	Ð:Ñ	:ò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                   óJ  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ee	   de
ej                     ez  fd„«       «       Zˆ xZS )ÚErnieForSequenceClassificationc                 ón  •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        |j                  �|j                  n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y 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Ñ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrT   NrU   rv   r2   rV   r.   rW   rb  rx   rY   c           
      óâ  —  | j                   |f|||||ddœ|¤Ž}	|	d   }
| j                  |
«      }
| j                  |
«      }d}|��‡| j                  j                  €�| j
                  dk(  rd| j                  _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                  _        nd| j                  _        | j                  j                  dk(  rIt        «       }| j
                  dk(  r& ||j                  «       |j                  «       «      }nŒ |||«      }n‚| j                  j                  dk(  r=t        «       } ||j                  d| j
                  «      |j                  d«      «      }n,| j                  j                  dk(  rt        «       } |||«      }t        |||	j                   |	j"                  ¬	«      S )
a^  
        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).
        Tre  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   rv   r2   rV   r.   rW   rb  rx   rg  rõ   r}  rA  ri  s                 rS   rg   z&ErnieForSequenceClassification.forward|  s¬  € ð0 �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
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
ð Ÿ™ tÑ+ðB
ð Ÿ™ tÑ+ð	B
ð
 —|‘| dÑ*ðB
ð —l‘l TÑ)ðB
ð —|‘| dÑ*ðB
ð —‘˜tÑ#ðB
ð Ð+Ñ,ðB
ð 
ˆu�|‰|Ñ	Ð7Ñ	7òB
ó ó ôB
rT   r”  c                   óJ  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ee	   de
ej                     ez  fd„«       «       Zˆ xZS )ÚErnieForMultipleChoicec                 ó*  •— t         ‰| �  |«       t        |«      | _        |j                  �|j                  n|j
                  }t        j                  |«      | _        t        j                  |j                  d«      | _        | j                  «        y )Nr&   )r4   r5   r'  r  r—  rC   r6   rB   rD   r‘   r9   r˜  r,  r™  s      €rS   r5   zErnieForMultipleChoice.__init__Å  su   ø€ Ü‰Ñ˜Ô ä Ó'ˆŒ
à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰ÕrT   NrU   rv   r2   rV   r.   rW   rb  rx   rY   c           
      óî  — |�|j                   d   n|j                   d   }	|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�1|j                  d|j                  d«      |j                  d«      «      nd} | j                  |f|||||ddœ|¤Ž}
|
d   }| j	                  |«      }| j                  |«      }|j                  d|	«      }d}|�t        «       } |||«      }t        |||
j                  |
j                  ¬«      S )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   éþÿÿÿTre  rˆ  )
r_   rœ   rJ   r  rD   r˜  r   r   r—   r  )rP   rU   rv   r2   rV   r.   rW   rb  rx   Únum_choicesrg  rõ   r}  Úreshaped_logitsrA  ri  s                   rS   rg   zErnieForMultipleChoice.forwardÒ  s¡  € ð` -6Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
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
ð Ÿ™ tÑ+ðU
ð Ÿ™ tÑ+ð	U
ð
 —|‘| dÑ*ðU
ð —l‘l TÑ)ðU
ð —|‘| dÑ*ðU
ð —‘˜tÑ#ðU
ð Ð+Ñ,ðU
ð 
ˆu�|‰|Ñ	Ð8Ñ	8òU
ó ó ôU
rT   r¡  c                   óJ  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
ee	   de
ej                     ez  fd„«       «       Zˆ xZS )ÚErnieForTokenClassificationc                 ód  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y ©NFru  )r4   r5   r–  r'  r  r—  rC   r6   rB   rD   r‘   r9   r˜  r,  r™  s      €rS   r5   z$ErnieForTokenClassification.__init__.  sŠ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä ¸%Ô@ˆŒ
à)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrT   NrU   rv   r2   rV   r.   rW   rb  rx   rY   c           
      óJ  —  | j                   |f|||||ddœ|¤Ž}	|	d   }
| j                  |
«      }
| j                  |
«      }d}|�<t        «       } ||j	                  d| j
                  «      |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]`.
        Tre  r   Nr0   rˆ  )	r  rD   r˜  r   rœ   r–  r   r—   r  )rP   rU   rv   r2   rV   r.   rW   rb  rx   rg  r<  r}  rA  ri  s                 rS   rg   z#ErnieForTokenClassification.forward<  sº   € ð, �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓ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‘l TÑ)ð.
ð —|‘| dÑ*ð.
ð —‘˜tÑ#ð.
ð Ð+Ñ,ð.
ð 
ˆu�|‰|Ñ	Ð4Ñ	4ò.
ó ó ô.
rT   r¨  c                   ój  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ej                  dz  d
e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                  «      | _        | j                  «        y rª  )
r4   r5   r–  r'  r  r6   r‘   r9   Ú
qa_outputsr,  rO   s     €rS   r5   z"ErnieForQuestionAnswering.__init__q  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä ¸%Ô@ˆŒ
ÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰ÕrT   NrU   rv   r2   rV   r.   rW   Ústart_positionsÚend_positionsrx   rY   c	           
      óÈ  —  | j                   |f|||||ddœ|	¤Ž}
|
d   }| j                  |«      }|j                  dd¬«      \  }}|j                  d«      j	                  «       }|j                  d«      j	                  «       }d}|�·|�µt        |j                  «       «      dkD  r|j                  d«      }t        |j                  «       «      dkD  r|j                  d«      }|j                  d«      }|j                  d|«      }|j                  d|«      }t        |¬«      } |||«      } |||«      }||z   d	z  }t        ||||
j                  |
j                  ¬
«      S )r5  Tre  r   r&   r0   r|   N)Úignore_indexr{   )rA  Ústart_logitsÚ
end_logitsr—   r  )r  r¯  ÚsplitrŸ  rƒ   ÚlenrJ   Úclampr   r   r—   r  )rP   rU   rv   r2   rV   r.   rW   r°  r±  rx   rg  r<  r}  r´  rµ  rh  Úignored_indexri  Ú
start_lossÚend_losss                       rS   rg   z!ErnieForQuestionAnswering.forward{  sƒ  € ð* �$—*‘*Øð	
à)Ø)Ø'Ø%Ø'Øñ	
ð ñ	
ˆð " !™*ˆà—‘ Ó1ˆØ#)§<¡<°°r <Ó#:Ñ ˆ�jØ#×+Ñ+¨BÓ/×:Ñ:Ó<ˆØ×'Ñ'¨Ó+×6Ñ6Ó8ˆ
àˆ
ØÐ&¨=Ð+Dä�?×'Ñ'Ó)Ó*¨QÒ.Ø"1×"9Ñ"9¸"Ó"=�Ü�=×%Ñ%Ó'Ó(¨1Ò,Ø -× 5Ñ 5°bÓ 9�à(×-Ñ-¨aÓ0ˆMØ-×3Ñ3°A°}ÓEˆOØ)×/Ñ/°°=ÓAˆMä'°]ÔCˆHÙ! ,°Ó@ˆJÙ 
¨MÓ:ˆHØ$ xÑ/°1Ñ4ˆJä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rT   rl  )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‘l TÑ)ð<
ð —|‘| dÑ*ð<
ð Ÿ™¨Ñ,ð<
ð —|‘| dÑ*ð<
ð Ð+Ñ,ð<
ð 
ˆu�|‰|Ñ	Ð;Ñ	;ò<
ó ó ô<
rT   r­  )
rs  rƒ  r¡  rŽ  rP  r­  r”  r¨  r'  r  )Nrš   )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   rw  ÚModuler)   ro   Úfloatr†   rˆ   r­   r¹   rÆ   rÑ   rÚ   rÞ   rï   r÷   rü   r  r  r'  r@  rG  rP  ro  rs  rƒ  rŠ  rŽ  r”  r¡  r¨  r­  Ú__all__rE  rT   rS   ú<module>rÑ     s‚  ðõ* %Ý !ã Ý ß AÑ Aå &Ý !ß CÑ CÝ )ß JÝ 9÷
÷ 
õ 
÷ GÝ &Ý 6ß MÓ Mß IÝ 5Ý ,ð 
ˆ×	Ñ	˜HÓ	%€ôJ�b—i‘iô Jðf !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô8@)˜Ÿ™ô @)ôFI)˜"Ÿ)™)ô I)ôX�b—i‘iô ô.�R—Y‘Yô .ô:˜Ÿ	™	ô ô�"—)‘)ô ô>Ð+ô >ôB�"—)‘)ô ô 2§9¡9ô ô"˜BŸI™Iô ô 
�2—9‘9ô 
ð@ ô/˜?ó /ó ð/ñ2 ð	ôôE6Ð%ó E6óðE6ñP ðôð
 ô7 ó 7ó óð7ô&	9˜BŸI™Iô 	9ñ ðôô`
Ð.ó `
óð`
ôF!�r—y‘yô !ñ ðôô
X
Ð+¨_ó X
óð
X
ðv ôP
Ð+ó P
ó ðP
ôf&�r—y‘yô &ñ ðôô
P
Ð%9ó P
óð
P
ñf ðôôT
Ð%9ó T
óðT
ðn ôe
Ð1ó e
ó ðe
ðP ô?
Ð"6ó ?
ó ð?
ðD ôI
Ð 4ó I
ó ðI
òX�rT   