Ë
    ÜÓ^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 dd
lmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,  e%jZ                  e.«      Z/ G d„ dej`                  «      Z1ejd                  e1dœZ3 G d„ dej`                  «      Z4	 	 d_dej`                  dejj                  dejj                  dejj                  dejj                  dz  de6dz  de6de e#   fd „Z7 G d!„ d"ej`                  «      Z8 G d#„ d$ej`                  «      Z9 G d%„ d&ej`                  «      Z: G d'„ d(ej`                  «      Z; G d)„ d*ej`                  «      Z< G d+„ d,ej`                  «      Z= G d-„ d.ej`                  «      Z> G d/„ d0ej`                  «      Z? G d1„ d2ej`                  «      Z@ G d3„ d4ej`                  «      ZA G d5„ d6e«      ZB G d7„ d8ej`                  «      ZC G d9„ d:ej`                  «      ZD G d;„ d<ej`                  «      ZE G d=„ d>ej`                  «      ZF G d?„ d@ej`                  «      ZG G dA„ dBej`                  «      ZHe$ G dC„ dDe«      «       ZI e$dE¬F«      e G dG„ dHe"«      «       «       ZJe$ G dI„ dJeI«      «       ZK e$dK¬F«       G dL„ dMeI«      «       ZLe$ G dN„ dOeI«      «       ZM G dP„ dQej`                  «      ZN e$dR¬F«       G dS„ dTeI«      «       ZO e$dU¬F«       G dV„ dWeI«      «       ZPe$ G dX„ dYeI«      «       ZQe$ G dZ„ d[eI«      «       ZRe$ G d\„ d]eI«      «       ZSg d^¢ZTy)`é    )ÚCallable)Ú	dataclassN)Únn)ÚBCEWithLogitsLossÚCrossEntropyLossÚMSELossé   )Úinitialization)ÚACT2FN)Úcreate_bidirectional_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutputÚMultipleChoiceModelOutputÚNextSentencePredictorOutputÚQuestionAnsweringModelOutputÚSequenceClassifierOutputÚTokenClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚMobileBertConfigc                   óX   ‡ — e Zd Zdˆ fd„	Zdej
                  dej
                  fd„Zˆ xZS )ÚNoNormc                 óÖ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        t        j                  t	        j                  |«      «      | _        y ©N)	ÚsuperÚ__init__r   Ú	ParameterÚtorchÚzerosÚbiasÚonesÚweight)ÚselfÚ	feat_sizeÚepsÚ	__class__s      €ú}/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/mobilebert/modeling_mobilebert.pyr'   zNoNorm.__init__8   s@   ø€ Ü‰ÑÔÜ—L‘L¤§¡¨YÓ!7Ó8ˆŒ	Ü—l‘l¤5§:¡:¨iÓ#8Ó9ˆ�ó    Úinput_tensorÚreturnc                 ó:   — || j                   z  | j                  z   S r%   )r-   r+   )r.   r4   s     r2   ÚforwardzNoNorm.forward=   s   € Ø˜dŸk™kÑ)¨D¯I©IÑ5Ð5r3   r%   ©Ú__name__Ú
__module__Ú__qualname__r'   r)   ÚTensorr7   Ú__classcell__©r1   s   @r2   r#   r#   7   s#   ø„ õ:ð
6 E§L¡Lð 6°U·\±\÷ 6r3   r#   )Ú
layer_normÚno_normc                   óÄ   ‡ — 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                  f
d	„Z	ˆ xZ
S )ÚMobileBertEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                 óX  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        j                  |j                  |j                  |j                  ¬«      | _	        t        j                  |j                  |j                  «      | _        t        j                  |j                  |j                  «      | _        | j                  rdnd}| j                  |z  }t        j                  ||j                  «      | _        t!        |j"                     |j                  «      | _        t        j&                  |j(                  «      | _        | j-                  dt/        j0                  |j                  «      j3                  d«      d¬«       y )N)Úpadding_idxr	   r    Úposition_ids©r    éÿÿÿÿF)Ú
persistent)r&   r'   Útrigram_inputÚembedding_sizeÚhidden_sizer   Ú	EmbeddingÚ
vocab_sizeÚpad_token_idÚword_embeddingsÚmax_position_embeddingsÚposition_embeddingsÚtype_vocab_sizeÚtoken_type_embeddingsÚLinearÚembedding_transformationÚNORM2FNÚnormalization_typeÚ	LayerNormÚDropoutÚhidden_dropout_probÚdropoutÚregister_bufferr)   ÚarangeÚexpand)r.   ÚconfigÚembed_dim_multiplierÚembedded_input_sizer1   s       €r2   r'   zMobileBertEmbeddings.__init__G   sF  ø€ Ü‰ÑÔØ#×1Ñ1ˆÔØ$×3Ñ3ˆÔØ!×-Ñ-ˆÔä!Ÿ|™|¨F×,=Ñ,=¸v×?TÑ?TÐbh×buÑbuÔvˆÔÜ#%§<¡<°×0NÑ0NÐPV×PbÑPbÓ#cˆÔ Ü%'§\¡\°&×2HÑ2HÈ&×J\ÑJ\Ó%]ˆÔ"à$(×$6Ò$6™q¸AÐØ"×1Ñ1Ð4HÑHÐÜ(*¯	©	Ð2EÀv×GYÑGYÓ(ZˆÔ%ä  ×!:Ñ!:Ñ;¸F×<NÑ<NÓOˆŒÜ—z‘z &×"<Ñ"<Ó=ˆŒð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
r3   NÚ	input_idsÚtoken_type_idsrE   Úinputs_embedsr5   c           
      ó$  — |�|j                  «       }n|j                  «       d d }|d   }|€| j                  d d …d |…f   }|€:t        j                  |t        j                  | j                  j
                  ¬«      }|€| j                  |«      }| j                  rpt        j                  t        j                  j                  |d d …dd …f   g d¢d¬«      |t        j                  j                  |d d …d d…f   g d¢d¬«      gd¬	«      }| j                  s| j                  | j                  k7  r| j                  |«      }| j                  |«      }| j!                  |«      }||z   |z   }	| j#                  |	«      }	| j%                  |	«      }	|	S )
NrG   r    )ÚdtypeÚdevice)r   r   r   r    r   r   ç        )Úvalue)r   r   r    r   r   r   é   ©Údim)ÚsizerE   r)   r*   Úlongrg   rO   rI   Úcatr   Ú
functionalÚpadrJ   rK   rU   rQ   rS   rX   r[   )
r.   rb   rc   rE   rd   Úinput_shapeÚ
seq_lengthrQ   rS   Ú
embeddingss
             r2   r7   zMobileBertEmbeddings.forward]   s‰  € ð Ð Ø#Ÿ.™.Ó*‰Kà'×,Ñ,Ó.¨s°Ð3ˆKà  ‘^ˆ
àÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÐ!Ü"Ÿ[™[¨¼E¿J¹JÈt×O`ÑO`×OgÑOgÔhˆNØÐ Ø ×0Ñ0°Ó;ˆMà×Òô "ŸI™Iä—M‘M×%Ñ% m²A°q±r°EÑ&:Ò<NÐVYÐ%ÓZØ!Ü—M‘M×%Ñ% m²A°s¸°s°FÑ&;Ò=OÐWZÐ%Ó[ðð
 ôˆMð ×Ò ×!4Ñ!4¸×8HÑ8HÒ!HØ ×9Ñ9¸-ÓHˆMð #×6Ñ6°|ÓDÐØ $× :Ñ :¸>Ó JÐØ"Ð%8Ñ8Ð;PÑPˆ
Ø—^‘^ JÓ/ˆ
Ø—\‘\ *Ó-ˆ
ØÐr3   )NNNN)r9   r:   r;   Ú__doc__r'   r)   Ú
LongTensorÚFloatTensorr<   r7   r=   r>   s   @r2   rB   rB   D   s~   ø„ ÙQô
ð0 .2Ø26Ø04Ø26ñ0à×#Ñ# dÑ*ð0ð ×(Ñ(¨4Ñ/ð0ð ×&Ñ&¨Ñ-ð	0ð
 ×(Ñ(¨4Ñ/ð0ð 
�‰÷0r3   rB   ÚmoduleÚqueryÚkeyri   Úattention_maskÚscalingr[   Ú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 )NrG   ç      à¿rj   r	   rk   )ÚpÚtrainingr    )
rm   r)   ÚmatmulÚ	transposer   rp   Úsoftmaxr[   r�   Ú
contiguous)
rx   ry   rz   ri   r{   r|   r[   r}   Úattn_weightsÚattn_outputs
             r2   Úeager_attention_forwardrˆ   ‘   s»   € ð €Ø—*‘*˜R“. DÑ(ˆô —<‘<  s§}¡}°Q¸Ó':Ó;¸gÑE€LàÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r3   c                   ó¸   ‡ — e Zd Zˆ fd„Z	 d
dej
                  dej
                  dej
                  dej                  dz  dee   de	ej
                     fd	„Z
ˆ xZS )ÚMobileBertSelfAttentionc                 ó¤  •— t         ‰| �  «        || _        |j                  | _        t	        |j
                  |j                  z  «      | _        | j                  | j                  z  | _        | j                  dz  | _        t        j                  |j
                  | j                  «      | _        t        j                  |j
                  | j                  «      | _        t        j                  |j                  r|j
                  n|j                  | j                  «      | _        t        j                   |j"                  «      | _        d| _        y )Nr   F)r&   r'   r_   Únum_attention_headsÚintÚtrue_hidden_sizeÚattention_head_sizeÚall_head_sizer|   r   rT   ry   rz   Úuse_bottleneck_attentionrK   ri   rY   Úattention_probs_dropout_probr[   Ú	is_causal©r.   r_   r1   s     €r2   r'   z MobileBertSelfAttention.__init__®   sù   ø€ Ü‰ÑÔØˆŒØ#)×#=Ñ#=ˆÔ Ü#& v×'>Ñ'>À×A[ÑA[Ñ'[Ó#\ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×/Ñ/°Ñ5ˆŒä—Y‘Y˜v×6Ñ6¸×8JÑ8JÓKˆŒ
Ü—9‘9˜V×4Ñ4°d×6HÑ6HÓIˆŒÜ—Y‘YØ'-×'FÒ'FˆF×#Ò#ÈF×L^ÑL^Ð`d×`rÑ`ró
ˆŒ
ô —z‘z &×"EÑ"EÓFˆŒàˆ�r3   NÚquery_tensorÚ
key_tensorÚvalue_tensorr{   r}   r5   c                 ó€  — |j                   d d }g |¢d‘| j                  ‘­} | j                  |«      j                  |Ž j	                  dd«      } | j                  |«      j                  |Ž j	                  dd«      }	 | j                  |«      j                  |Ž j	                  dd«      }
t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                  j                  | j                  dœ|¤Ž\  }} |j                   g |¢d‘­Ž j#                  «       }||fS )NrG   r    rj   rh   )r[   r|   )Úshaper�   ry   Úviewrƒ   rz   ri   r   Úget_interfacer_   Ú_attn_implementationrˆ   r�   r[   r€   r|   Úreshaper…   )r.   r•   r–   r—   r{   r}   rr   Úhidden_shapeÚquery_layerÚ	key_layerÚvalue_layerÚattention_interfacer‡   r†   s                 r2   r7   zMobileBertSelfAttention.forward¿   sH  € ð #×(Ñ(¨¨"Ð-ˆØC˜ÐC bÐC¨$×*BÑ*BÑCˆð 4�d—j‘j Ó.×3Ñ3°\ÐB×LÑLÈQÐPQÓRˆØ-�D—H‘H˜ZÓ(×-Ñ-¨|Ð<×FÑFÀqÈ!ÓLˆ	Ø3�d—j‘j Ó.×3Ñ3°\ÐB×LÑLÈQÐPQÓRˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$·,±,·.±.Ø—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ˜LÐ(Ð(r3   r%   ©r9   r:   r;   r'   r)   r<   rw   r   r   Útupler7   r=   r>   s   @r2   rŠ   rŠ   ­   sr   ø„ ôð, 48ñ)à—l‘lð)ð —L‘Lð)ð —l‘lð	)ð
 ×)Ñ)¨DÑ0ð)ð Ð+Ñ,ð)ð 
ˆu�|‰|Ñ	÷)r3   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 )ÚMobileBertSelfOutputc                 ój  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  |j
                  «      | _        t        |j                     |j
                  |j                  ¬«      | _
        | j                  s%t        j                  |j                  «      | _        y y ©N©r0   )r&   r'   Úuse_bottleneckr   rT   rŽ   ÚdenserV   rW   Úlayer_norm_epsrX   rY   rZ   r[   r”   s     €r2   r'   zMobileBertSelfOutput.__init__â   s„   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔÜ—Y‘Y˜v×6Ñ6¸×8OÑ8OÓPˆŒ
Ü  ×!:Ñ!:Ñ;¸F×<SÑ<SÐY_×YnÑYnÔoˆŒØ×"Ò"ÜŸ:™: f×&@Ñ&@ÓAˆD�Lð #r3   Úhidden_statesÚresidual_tensorr5   c                 óŠ   — | j                  |«      }| j                  s| j                  |«      }| j                  ||z   «      }|S r%   )r«   rª   r[   rX   ©r.   r­   r®   Úlayer_outputss       r2   r7   zMobileBertSelfOutput.forwardê   s@   € ØŸ
™
 =Ó1ˆØ×"Ò"Ø ŸL™L¨Ó7ˆMØŸ™ }°Ñ'FÓGˆØÐr3   r8   r>   s   @r2   r¦   r¦   á   s2   ø„ ôBð U§\¡\ð ÀEÇLÁLð ÐUZ×UaÑUa÷ r3   r¦   c                   óÐ   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej
                  dej
                  dej
                  dej                  dz  dee   d	e	ej
                     fd
„Z
ˆ xZS )ÚMobileBertAttentionc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y r%   )r&   r'   rŠ   r.   r¦   Úoutputr”   s     €r2   r'   zMobileBertAttention.__init__ó   s&   ø€ Ü‰ÑÔÜ+¨FÓ3ˆŒ	Ü*¨6Ó2ˆ�r3   Nr•   r–   r—   Úlayer_inputr{   r}   r5   c                 ó`   —  | j                   ||||fi |¤Ž\  }}| j                  ||«      }||fS r%   )r.   rµ   )	r.   r•   r–   r—   r¶   r{   r}   Úattention_outputr†   s	            r2   r7   zMobileBertAttention.forwardø   sO   € ð *3¨¯©ØØØØñ	*
ð
 ñ*
Ñ&Ð˜,ð  Ÿ;™;Ð'7¸ÓEÐØ Ð-Ð-r3   r%   r£   r>   s   @r2   r³   r³   ò   s€   ø„ ô3ð 48ñ.à—l‘lð.ð —L‘Lð.ð —l‘lð	.ð
 —\‘\ð.ð ×)Ñ)¨DÑ0ð.ð Ð+Ñ,ð.ð 
ˆu�|‰|Ñ	÷.r3   r³   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMobileBertIntermediatec                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                  t        «      rt        |j                     | _        y |j                  | _        y r%   )r&   r'   r   rT   rŽ   Úintermediate_sizer«   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr”   s     €r2   r'   zMobileBertIntermediate.__init__  s]   ø€ Ü‰ÑÔÜ—Y‘Y˜v×6Ñ6¸×8PÑ8PÓQˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÕ$à'-×'8Ñ'8ˆDÕ$r3   r­   r5   c                 óJ   — | j                  |«      }| j                  |«      }|S r%   )r«   rÀ   ©r.   r­   s     r2   r7   zMobileBertIntermediate.forward  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr3   r8   r>   s   @r2   rº   rº     s#   ø„ ô9ð U§\¡\ð °e·l±l÷ r3   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 )ÚOutputBottleneckc                 ó.  •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                     |j
                  |j                  ¬«      | _
        t        j                  |j                  «      | _        y r¨   )r&   r'   r   rT   rŽ   rK   r«   rV   rW   r¬   rX   rY   rZ   r[   r”   s     €r2   r'   zOutputBottleneck.__init__  sh   ø€ Ü‰ÑÔÜ—Y‘Y˜v×6Ñ6¸×8JÑ8JÓKˆŒ
Ü  ×!:Ñ!:Ñ;¸F×<NÑ<NÐTZ×TiÑTiÔjˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r3   r­   r®   r5   c                 ór   — | j                  |«      }| j                  |«      }| j                  ||z   «      }|S r%   )r«   r[   rX   r°   s       r2   r7   zOutputBottleneck.forward$  s7   € ØŸ
™
 =Ó1ˆØŸ™ ]Ó3ˆØŸ™ }°Ñ'FÓGˆØÐr3   r8   r>   s   @r2   rÄ   rÄ     s1   ø„ ô>ð U§\¡\ð ÀEÇLÁLð ÐUZ×UaÑUa÷ r3   rÄ   c                   ó†   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  dej
                  dej
                  fd„Zˆ xZS )ÚMobileBertOutputc                 ór  •— t         ‰| �  «        |j                  | _        t        j                  |j
                  |j                  «      | _        t        |j                     |j                  «      | _
        | j                  s%t        j                  |j                  «      | _        y t        |«      | _        y r%   )r&   r'   rª   r   rT   r¼   rŽ   r«   rV   rW   rX   rY   rZ   r[   rÄ   Ú
bottleneckr”   s     €r2   r'   zMobileBertOutput.__init__,  s‚   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔÜ—Y‘Y˜v×7Ñ7¸×9PÑ9PÓQˆŒ
Ü  ×!:Ñ!:Ñ;¸F×<SÑ<SÓTˆŒØ×"Ò"ÜŸ:™: f×&@Ñ&@ÓAˆD�Lä.¨vÓ6ˆD�Or3   Úintermediate_statesÚresidual_tensor_1Úresidual_tensor_2r5   c                 óÚ   — | j                  |«      }| j                  s'| j                  |«      }| j                  ||z   «      }|S | j                  ||z   «      }| j	                  ||«      }|S r%   )r«   rª   r[   rX   rÊ   )r.   rË   rÌ   rÍ   Úlayer_outputs        r2   r7   zMobileBertOutput.forward6  ss   € ð —z‘zÐ"5Ó6ˆØ×"Ò"ØŸ<™<¨Ó5ˆLØŸ>™>¨,Ð9JÑ*JÓKˆLð Ðð  Ÿ>™>¨,Ð9JÑ*JÓKˆLØŸ?™?¨<Ð9JÓKˆLØÐr3   r8   r>   s   @r2   rÈ   rÈ   +  s?   ø„ ô7ð
Ø#(§<¡<ð
ØDIÇLÁLð
Øej×eqÑeqð
à	�‰÷
r3   rÈ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚBottleneckLayerc                 óæ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                     |j
                  |j                  ¬«      | _
        y r¨   )r&   r'   r   rT   rK   Úintra_bottleneck_sizer«   rV   rW   r¬   rX   r”   s     €r2   r'   zBottleneckLayer.__init__D  sR   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3OÑ3OÓPˆŒ
Ü  ×!:Ñ!:Ñ;¸F×<XÑ<XÐ^d×^sÑ^sÔtˆ�r3   r­   r5   c                 óJ   — | j                  |«      }| j                  |«      }|S r%   ©r«   rX   )r.   r­   r¶   s      r2   r7   zBottleneckLayer.forwardI  s$   € Ø—j‘j Ó/ˆØ—n‘n [Ó1ˆØÐr3   r8   r>   s   @r2   rÑ   rÑ   C  s$   ø„ ôuð
 U§\¡\ð °e·l±l÷ r3   rÑ   c                   ó\   ‡ — e Zd Zˆ fd„Zdej
                  deej
                     fd„Zˆ xZS )Ú
Bottleneckc                 óÀ   •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        | j                  rt	        |«      | _        y y r%   )r&   r'   Úkey_query_shared_bottleneckr‘   rÑ   ÚinputÚ	attentionr”   s     €r2   r'   zBottleneck.__init__P  sP   ø€ Ü‰ÑÔØ+1×+MÑ+MˆÔ(Ø(.×(GÑ(GˆÔ%Ü$ VÓ,ˆŒ
Ø×+Ò+Ü,¨VÓ4ˆD�Nð ,r3   r­   r5   c                 óš   — | j                  |«      }| j                  r|fdz  S | j                  r| j                  |«      }||||fS ||||fS )Né   )rÚ   r‘   rÙ   rÛ   )r.   r­   Úbottlenecked_hidden_statesÚshared_attention_inputs       r2   r7   zBottleneck.forwardX  sc   € ð" &*§Z¡Z°Ó%>Ð"Ø×(Ò(Ø.Ð0°1Ñ4Ð4Ø×-Ò-Ø%)§^¡^°MÓ%BÐ"Ø*Ð,BÀMÐSmÐnÐnà! =°-ÐA[Ð\Ð\r3   ©	r9   r:   r;   r'   r)   r<   r¤   r7   r=   r>   s   @r2   r×   r×   O  s+   ø„ ô5ð] U§\¡\ð ]°e¸E¿L¹LÑ6I÷ ]r3   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 )Ú	FFNOutputc                 óæ   •— t         ‰| �  «        t        j                  |j                  |j
                  «      | _        t        |j                     |j
                  |j                  ¬«      | _
        y r¨   )r&   r'   r   rT   r¼   rŽ   r«   rV   rW   r¬   rX   r”   s     €r2   r'   zFFNOutput.__init__t  sR   ø€ Ü‰ÑÔÜ—Y‘Y˜v×7Ñ7¸×9PÑ9PÓQˆŒ
Ü  ×!:Ñ!:Ñ;¸F×<SÑ<SÐY_×YnÑYnÔoˆ�r3   r­   r®   r5   c                 óP   — | j                  |«      }| j                  ||z   «      }|S r%   rÕ   r°   s       r2   r7   zFFNOutput.forwardy  s)   € ØŸ
™
 =Ó1ˆØŸ™ }°Ñ'FÓGˆØÐr3   r8   r>   s   @r2   râ   râ   s  s2   ø„ ôpð
 U§\¡\ð ÀEÇLÁLð ÐUZ×UaÑUa÷ r3   râ   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚFFNLayerc                 ób   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        y r%   )r&   r'   rº   Úintermediaterâ   rµ   r”   s     €r2   r'   zFFNLayer.__init__€  s'   ø€ Ü‰ÑÔÜ2°6Ó:ˆÔÜ Ó'ˆ�r3   r­   r5   c                 óL   — | j                  |«      }| j                  ||«      }|S r%   )rè   rµ   )r.   r­   Úintermediate_outputr±   s       r2   r7   zFFNLayer.forward…  s*   € Ø"×/Ñ/°Ó>ÐØŸ™Ð$7¸ÓGˆØÐr3   r8   r>   s   @r2   ræ   ræ     s#   ø„ ô(ð
 U§\¡\ð °e·l±l÷ r3   ræ   c            	       ó‚   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   dej
                  fd„Z	ˆ xZ
S )	ÚMobileBertLayerc                 ó¶  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        |«      | _        t        |«      | _        t        |«      | _	        | j                  rt        |«      | _        |j                  dkD  rHt        j                  t        |j                  dz
  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y y c c}w ©Nr    )r&   r'   rª   Únum_feedforward_networksr³   rÛ   rº   rè   rÈ   rµ   r×   rÊ   r   Ú
ModuleListÚrangeræ   Úffn©r.   r_   Ú_r1   s      €r2   r'   zMobileBertLayer.__init__Œ  s«   ø€ Ü‰ÑÔØ$×3Ñ3ˆÔØ(.×(GÑ(GˆÔ%ä,¨VÓ4ˆŒÜ2°6Ó:ˆÔÜ& vÓ.ˆŒØ×ÒÜ(¨Ó0ˆDŒOØ×*Ñ*¨QÒ.Ü—}‘}ÄÀf×FeÑFeÐhiÑFiÓ@jÖ%k¸1¤h¨vÕ&6Ò%kÓlˆD�Hð /ùÚ%ks   Â6CNr­   r{   r}   r5   c                 ó2  — | j                   r| j                  |«      \  }}}}n|gdz  \  }}}} | j                  |||||fi |¤Ž\  }}	|}
| j                  dk7  r| j                  D ]
  } ||
«      }
Œ | j                  |
«      }| j                  ||
|«      }|S )NrÝ   r    )rª   rÊ   rÛ   rï   rò   rè   rµ   )r.   r­   r{   r}   r•   r–   r—   r¶   Úself_attention_outputrô   r¸   Ú
ffn_modulerê   rÏ   s                 r2   r7   zMobileBertLayer.forward™  sÏ   € ð ×ÒØBFÇ/Á/ÐR_ÓB`Ñ?ˆL˜* l±KàCPÀ/ÐTUÑBUÑ?ˆL˜* l°Kà#1 4§>¡>ØØØØØñ$
ð ñ$
Ñ Ð˜qð 1Ðà×(Ñ(¨AÒ-Ø"Ÿh™hò @�
Ù#-Ð.>Ó#?Ñ ð@ð #×/Ñ/Ð0@ÓAÐØ—{‘{Ð#6Ð8HÈ-ÓXˆØÐr3   r%   )r9   r:   r;   r'   r)   r<   rw   r   r   r7   r=   r>   s   @r2   rì   rì   ‹  sR   ø„ ômð  48ñà—|‘|ðð ×)Ñ)¨DÑ0ðð Ð+Ñ,ð	ð
 
�‰÷r3   rì   c            
       ót   ‡ — e Zd Zˆ fd„Z	 ddej
                  dej                  dz  dee   de	e
z  fd„Zˆ xZS )	ÚMobileBertEncoderc                 ó´   •— t         ‰| �  «        t        j                  t	        |j
                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        y c c}w r%   )r&   r'   r   rð   rñ   Únum_hidden_layersrì   Úlayerró   s      €r2   r'   zMobileBertEncoder.__init__¸  s<   ø€ Ü‰ÑÔÜ—]‘]ÄUÈ6×KcÑKcÓEdÖ#eÀ¤O°FÕ$;Ò#eÓfˆ�
ùÒ#es   ¶ANr­   r{   r}   r5   c                 óh   — t        | j                  «      D ]  \  }} |||fi |¤Ž}Œ t        |¬«      S )N)Úlast_hidden_state)Ú	enumeraterü   r   )r.   r­   r{   r}   ÚiÚlayer_modules         r2   r7   zMobileBertEncoder.forward¼  sG   € ô  )¨¯©Ó4ò 	‰OˆAˆ|Ù(ØØñð ñ‰Mð	ô °Ô?Ð?r3   r%   )r9   r:   r;   r'   r)   r<   rw   r   r   r¤   r   r7   r=   r>   s   @r2   rù   rù   ·  sX   ø„ ôgð 48ñ@à—|‘|ð@ð ×)Ñ)¨DÑ0ð@ð Ð+Ñ,ð	@ð
 
�Ñ	 ÷@r3   rù   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMobileBertPoolerc                 ó¼   •— t         ‰| �  «        |j                  | _        | j                  r0t	        j
                  |j                  |j                  «      | _        y y r%   )r&   r'   Úclassifier_activationÚdo_activater   rT   rK   r«   r”   s     €r2   r'   zMobileBertPooler.__init__Ì  sH   ø€ Ü‰ÑÔØ!×7Ñ7ˆÔØ×ÒÜŸ™ 6×#5Ñ#5°v×7IÑ7IÓJˆD�Jð r3   r­   r5   c                 ó€   — |d d …df   }| j                   s|S | j                  |«      }t        j                  |«      }|S )Nr   )r  r«   r)   Útanh)r.   r­   Úfirst_token_tensorÚpooled_outputs       r2   r7   zMobileBertPooler.forwardÒ  sE   € ð +ª1¨a¨4Ñ0ÐØ×ÒØ%Ð%à ŸJ™JÐ'9Ó:ˆMÜ!ŸJ™J }Ó5ˆMØ Ð r3   r8   r>   s   @r2   r  r  Ë  s$   ø„ ôKð	! U§\¡\ð 	!°e·l±l÷ 	!r3   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )Ú!MobileBertPredictionHeadTransformc                 óZ  •— t         ‰| �  «        t        j                  |j                  |j                  «      | _        t        |j                  t        «      rt        |j                     | _
        n|j                  | _
        t        d   |j                  |j                  ¬«      | _        y )Nr?   r©   )r&   r'   r   rT   rK   r«   r½   r¾   r¿   r   Útransform_act_fnrV   r¬   rX   r”   s     €r2   r'   z*MobileBertPredictionHeadTransform.__init__ß  s|   ø€ Ü‰ÑÔÜ—Y‘Y˜v×1Ñ1°6×3EÑ3EÓFˆŒ
Ü�f×'Ñ'¬Ô-Ü$*¨6×+<Ñ+<Ñ$=ˆDÕ!à$*×$5Ñ$5ˆDÔ!Ü  Ñ.¨v×/AÑ/AÀv×G\ÑG\Ô]ˆ�r3   r­   r5   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r%   )r«   r  rX   rÂ   s     r2   r7   z)MobileBertPredictionHeadTransform.forwardè  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐr3   r8   r>   s   @r2   r  r  Þ  s$   ø„ ô^ð U§\¡\ð °e·l±l÷ r3   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMobileBertLMPredictionHeadc                 óŽ  •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  |j                  |j                  z
  d¬«      | _	        t	        j
                  |j                  |j                  d¬«      | _
        t	        j                  t        j                  |j                  «      «      | _        y )NF)r+   T)r&   r'   r  Ú	transformr   rT   rM   rK   rJ   r«   Údecoderr(   r)   r*   r+   r”   s     €r2   r'   z#MobileBertLMPredictionHead.__init__ð  sˆ   ø€ Ü‰ÑÔÜ:¸6ÓBˆŒô —Y‘Y˜v×0Ñ0°&×2DÑ2DÀv×G\ÑG\Ñ2\ÐchÔiˆŒ
Ü—y‘y ×!6Ñ!6¸×8IÑ8IÐPTÔUˆŒÜ—L‘L¤§¡¨V×->Ñ->Ó!?Ó@ˆ�	r3   r­   r5   c                 ó  — | j                  |«      }|j                  t        j                  | j                  j
                  j                  «       | j                  j
                  gd¬«      «      }|| j                  j                  z  }|S )Nr   rk   )	r  r‚   r)   ro   r  r-   Útr«   r+   rÂ   s     r2   r7   z"MobileBertLMPredictionHead.forwardù  sk   € ØŸ™ }Ó5ˆØ%×,Ñ,¬U¯Y©Y¸¿¹×8KÑ8K×8MÑ8MÓ8OÐQU×Q[ÑQ[×QbÑQbÐ7cÐijÔ-kÓlˆØ˜Ÿ™×*Ñ*Ñ*ˆØÐr3   r8   r>   s   @r2   r  r  ï  s$   ø„ ôAð U§\¡\ð °e·l±l÷ r3   r  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMobileBertOnlyMLMHeadc                 óB   •— t         ‰| �  «        t        |«      | _        y r%   )r&   r'   r  Úpredictionsr”   s     €r2   r'   zMobileBertOnlyMLMHead.__init__  s   ø€ Ü‰ÑÔÜ5°fÓ=ˆÕr3   Úsequence_outputr5   c                 ó(   — | j                  |«      }|S r%   )r  )r.   r  Úprediction_scoress      r2   r7   zMobileBertOnlyMLMHead.forward  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð r3   r8   r>   s   @r2   r  r     s#   ø„ ô>ð! u§|¡|ð !¸¿¹÷ !r3   r  c                   ót   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  deej
                     fd„Zˆ xZS )ÚMobileBertPreTrainingHeadsc                 óŒ   •— t         ‰| �  «        t        |«      | _        t	        j
                  |j                  d«      | _        y ©Nrj   )r&   r'   r  r  r   rT   rK   Úseq_relationshipr”   s     €r2   r'   z#MobileBertPreTrainingHeads.__init__  s4   ø€ Ü‰ÑÔÜ5°fÓ=ˆÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕr3   r  r
  r5   c                 óN   — | j                  |«      }| j                  |«      }||fS r%   )r  r"  )r.   r  r
  r  Úseq_relationship_scores        r2   r7   z"MobileBertPreTrainingHeads.forward  s0   € Ø ×,Ñ,¨_Ó=ÐØ!%×!6Ñ!6°}Ó!EÐØ Ð"8Ð8Ð8r3   rà   r>   s   @r2   r  r  
  s8   ø„ ôAð
9 u§|¡|ð 9ÀEÇLÁLð 9ÐUZÐ[`×[gÑ[gÑUh÷ 9r3   r  c                   ót   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
eedœZ ej                  «       ˆ fd„«       Zˆ xZS )ÚMobileBertPreTrainedModelr_   Ú
mobilebertT)r­   Ú
attentionsc                 óö  •— t         ‰| �  |«       t        |t        «      r?t	        j
                  |j                  «       t	        j                  |j                  «       yt        |t        «      r t	        j
                  |j                  «       yt        |t        «      rZt	        j                  |j                  t        j                  |j                  j                  d   «      j!                  d«      «       yy)zInitialize the weightsrG   rF   N)r&   Ú_init_weightsr½   r#   ÚinitÚzeros_r+   Úones_r-   r  rB   Úcopy_rE   r)   r]   r™   r^   )r.   rx   r1   s     €r2   r*  z'MobileBertPreTrainedModel._init_weights$  s¢   ø€ ô 	‰Ñ˜fÔ%Ü�fœfÔ%Ü�K‰K˜Ÿ™Ô$Ü�J‰J�v—}‘}Õ%Ü˜Ô :Ô;Ü�K‰K˜Ÿ™Õ$Ü˜Ô 4Ô5Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 6r3   )r9   r:   r;   r!   Ú__annotations__Úbase_model_prefixÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_attention_backendrì   rŠ   Ú_can_record_outputsr)   Úno_gradr*  r=   r>   s   @r2   r&  r&    sX   ø… àÓØ$ÐØ&*Ð#ØÐØ€NØÐØ"&Ðà(Ø-ñÐð
 €U‡]�]ƒ_ó	ió ô	ir3   r&  z6
    Output type of [`MobileBertForPreTraining`].
    )Úcustom_introc                   óæ   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
eej                     dz  ed<   dZeej                     dz  ed<   y)ÚMobileBertForPreTrainingOutputa–  
    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(  )r9   r:   r;   ru   r;  r)   rw   r/  r<  r=  r­   r¤   r(  © r3   r2   r:  r:  1  s~   … ñ	ð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø26Ð�u×(Ñ(¨4Ñ/Ó6Ø8<Ð˜U×.Ñ.°Ñ5Ó<Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ô6r3   r:  c                   ó  ‡ — e Zd Zd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e   deez  fd„«       «       «       Zˆ xZS )ÚMobileBertModelz2
    https://huggingface.co/papers/2004.02984
    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)r&   r'   r_   Úgradient_checkpointingrB   rt   rù   Úencoderr  ÚpoolerÚ	post_init)r.   r_   Úadd_pooling_layerr1   s      €r2   r'   zMobileBertModel.__init__P  sV   ø€ ô
 	‰Ñ˜Ô ØˆŒØ&+ˆÔ#ä.¨vÓ6ˆŒÜ(¨Ó0ˆŒá2CÔ& vÔ.ÈˆŒð 	�‰Õr3   c                 ó.   — | j                   j                  S r%   ©rt   rO   ©r.   s    r2   Úget_input_embeddingsz$MobileBertModel.get_input_embeddingsa  s   € Ø�‰×.Ñ.Ð.r3   c                 ó&   — || j                   _        y r%   rH  )r.   ri   s     r2   Úset_input_embeddingsz$MobileBertModel.set_input_embeddingsd  s   € Ø*/ˆ�‰Õ'r3   Nrb   r{   rc   rE   rd   r}   r5   c                 ó  — |d u |d uz  rt        d«      ‚| j                  ||||¬«      }t        | j                  ||¬«      } | j                  |fd|i|¤Ž}|d   }	| j
                  �| j                  |	«      nd }
t        |	|
¬«      S )Nz:You must specify exactly one of input_ids or inputs_embeds)rb   rE   rc   rd   )r_   rd   r{   r{   r   )rþ   Úpooler_output)Ú
ValueErrorrt   r   r_   rC  rD  r   )r.   rb   r{   rc   rE   rd   r}   Úembedding_outputÚencoder_outputsr  r
  s              r2   r7   zMobileBertModel.forwardg  s»   € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàŸ?™?ØØ%Ø)Ø'ð	 +ó 
Ðô 3Ø—;‘;Ø*Ø)ô
ˆð '˜$Ÿ,™,Øñ
à)ð
ð ñ
ˆð
 *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆä)Ø-Ø'ô
ð 	
r3   )T)NNNNN)r9   r:   r;   ru   r'   rJ  rL  r   r   r   r)   rv   rw   r   r   r¤   r   r7   r=   r>   s   @r2   r@  r@  J  sÓ   ø„ ñõò"/ò0ð  ØØð .2Ø37Ø26Ø04Ø26ñ$
à×#Ñ# dÑ*ð$
ð ×)Ñ)¨DÑ0ð$
ð ×(Ñ(¨4Ñ/ð	$
ð
 ×&Ñ&¨Ñ-ð$
ð ×(Ñ(¨4Ñ/ð$
ð Ð+Ñ,ð$
ð 
Ð+Ñ	+ò$
ó ó ó  ô$
r3   r@  z®
    MobileBert Model with two heads on top as done during the pretraining: a `masked language modeling` head and a
    `next sentence prediction (classification)` head.
    c                   óv  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zddedz  d	ej                  fˆ 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z  fd„«       «       Zˆ xZS )ÚMobileBertForPreTrainingúcls.predictions.biasú,mobilebert.embeddings.word_embeddings.weight©zcls.predictions.decoder.biaszcls.predictions.decoder.weightc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r%   )r&   r'   r@  r'  r  ÚclsrE  r”   s     €r2   r'   z!MobileBertForPreTraining.__init__�  s4   ø€ Ü‰Ñ˜Ô Ü)¨&Ó1ˆŒÜ-¨fÓ5ˆŒð 	�‰Õr3   c                 óB   — | j                   j                  j                  S r%   ©rX  r  r  rI  s    r2   Úget_output_embeddingsz.MobileBertForPreTraining.get_output_embeddings¥  ó   € Ø�x‰x×#Ñ#×+Ñ+Ð+r3   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r%   ©rX  r  r  r+   ©r.   Únew_embeddingss     r2   Úset_output_embeddingsz.MobileBertForPreTraining.set_output_embeddings¨  ó,   € Ø'5ˆ�‰×ÑÔ$Ø$2×$7Ñ$7ˆ�‰×ÑÕ!r3   NÚnew_num_tokensr5   c                 óº   •— | j                  | j                  j                  j                  |d¬«      | j                  j                  _        t        ‰| �  |¬«      S ©NT)rc  Ú
transposed)rc  ©Ú_get_resized_lm_headrX  r  r«   r&   Úresize_token_embeddings©r.   rc  r1   s     €r2   ri  z0MobileBertForPreTraining.resize_token_embeddings¬  sR   ø€ à%)×%>Ñ%>Ø�H‰H× Ñ ×&Ñ&°~ÐRVð &?ó &
ˆ�‰×ÑÔ"ô ‰wÑ.¸nÐ.ÓMÐMr3   rb   r{   rc   rE   rd   ÚlabelsÚnext_sentence_labelr}   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®  
        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.

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
        >>> model = MobileBertForPreTraining.from_pretrained("google/mobilebert-uncased")

        >>> input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)
        >>> # Batch size 1
        >>> outputs = model(input_ids)

        >>> prediction_logits = outputs.prediction_logits
        >>> seq_relationship_logits = outputs.seq_relationship_logits
        ```T©r{   rc   rE   rd   Úreturn_dictNrj   rG   )r;  r<  r=  r­   r(  )	r'  rX  r   rš   r_   rM   r:  r­   r(  )r.   rb   r{   rc   rE   rd   rk  rl  r}   Úoutputsr  r
  r  r$  Ú
total_lossÚloss_fctÚmasked_lm_lossÚnext_sentence_losss                     r2   r7   z MobileBertForPreTraining.forward´  s  € ðR "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð *1°°!¨Ñ&ˆ˜Ø48·H±H¸_ÈmÓ4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNÙ!)Ð*@×*EÑ*EÀbÈ!Ó*LÐNa×NfÑNfÐgiÓNjÓ!kÐØ'Ð*<Ñ<ˆJä-ØØ/Ø$:Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r3   r%   ©NNNNNNN)r9   r:   r;   Ú_tied_weights_keysr'   r[  ra  r�   r   rL   ri  r   r   r)   rv   rw   r   r   r¤   r:  r7   r=   r>   s   @r2   rS  rS  ‘  s/  ø„ ð )?Ø*XñÐô
ò,ò8ñN°c¸D±jð NÈBÏLÉLõ Nð Øð .2Ø37Ø26Ø04Ø26Ø*.Ø7;ñ@
à×#Ñ# dÑ*ð@
ð ×)Ñ)¨DÑ0ð@
ð ×(Ñ(¨4Ñ/ð	@
ð
 ×&Ñ&¨Ñ-ð@
ð ×(Ñ(¨4Ñ/ð@
ð × Ñ  4Ñ'ð@
ð #×-Ñ-°Ñ4ð@
ð Ð+Ñ,ð@
ð 
Ð/Ñ	/ò@
ó ó ô@
r3   rS  c                   óV  ‡ — e Zd ZdddœZˆ fd„Zd„ Zd„ Zddedz  d	ej                  fˆ fd
„Z
ee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dee   d	eez  fd„«       «       Zˆ xZS )ÚMobileBertForMaskedLMrT  rU  rV  c                 ó–   •— t         ‰| �  |«       t        |d¬«      | _        t	        |«      | _        || _        | j                  «        y ©NF)rF  )r&   r'   r@  r'  r  rX  r_   rE  r”   s     €r2   r'   zMobileBertForMaskedLM.__init__   s=   ø€ Ü‰Ñ˜Ô Ü)¨&ÀEÔJˆŒÜ(¨Ó0ˆŒØˆŒð 	�‰Õr3   c                 óB   — | j                   j                  j                  S r%   rZ  rI  s    r2   r[  z+MobileBertForMaskedLM.get_output_embeddings	  r\  r3   c                 ó„   — || j                   j                  _        |j                  | j                   j                  _        y r%   r^  r_  s     r2   ra  z+MobileBertForMaskedLM.set_output_embeddings  rb  r3   Nrc  r5   c                 óº   •— | j                  | j                  j                  j                  |d¬«      | j                  j                  _        t        ‰| �  |¬«      S re  rg  rj  s     €r2   ri  z-MobileBertForMaskedLM.resize_token_embeddings  sR   ø€ à%)×%>Ñ%>Ø�H‰H× Ñ ×&Ñ&°~ÐRVð &?ó &
ˆ�‰×ÑÔ"ô ‰wÑ.¸nÐ.ÓMÐMr3   rb   r{   rc   rE   rd   rk  r}   c           	      ó:  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }
d}|�Ft        «       } ||
j                  d| j                  j
                  «      |j                  d«      «      }t        ||
|j                  |j                  ¬«      S )a¢  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        Trn  r   NrG   ©r;  Úlogitsr­   r(  )	r'  rX  r   rš   r_   rM   r   r­   r(  )r.   rb   r{   rc   rE   rd   rk  r}   rp  r  r  rs  rr  s                r2   r7   zMobileBertForMaskedLM.forward  s¸   € ð$ "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆØ ŸH™H _Ó5ÐàˆØÐÜ'Ó)ˆHÙ%Ð&7×&<Ñ&<¸RÀÇÁ×AWÑAWÓ&XÐZ`×ZeÑZeÐfhÓZiÓjˆNäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r%   ©NNNNNN)r9   r:   r;   rv  r'   r[  ra  r�   r   rL   ri  r   r   r)   rv   rw   r   r   r¤   r   r7   r=   r>   s   @r2   rx  rx  ù  s  ø„ ð )?Ø*XñÐô
ò,ò8ñN°c¸D±jð NÈBÏLÉLõ Nð Øð .2Ø37Ø26Ø04Ø26Ø*.ñ'
à×#Ñ# dÑ*ð'
ð ×)Ñ)¨DÑ0ð'
ð ×(Ñ(¨4Ñ/ð	'
ð
 ×&Ñ&¨Ñ-ð'
ð ×(Ñ(¨4Ñ/ð'
ð × Ñ  4Ñ'ð'
ð Ð+Ñ,ð'
ð 
�Ñ	ò'
ó ó ô'
r3   rx  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMobileBertOnlyNSPHeadc                 ól   •— t         ‰| �  «        t        j                  |j                  d«      | _        y r!  )r&   r'   r   rT   rK   r"  r”   s     €r2   r'   zMobileBertOnlyNSPHead.__init__D  s'   ø€ Ü‰ÑÔÜ "§	¡	¨&×*<Ñ*<¸aÓ @ˆÕr3   r
  r5   c                 ó(   — | j                  |«      }|S r%   )r"  )r.   r
  r$  s      r2   r7   zMobileBertOnlyNSPHead.forwardH  s   € Ø!%×!6Ñ!6°}Ó!EÐØ%Ð%r3   r8   r>   s   @r2   rƒ  rƒ  C  s$   ø„ ôAð& U§\¡\ð &°e·l±l÷ &r3   rƒ  zZ
    MobileBert Model with a `next sentence prediction (classification)` head on top.
    c                   ó  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	e	e
   d
eez  fd„«       «       Zˆ xZS )Ú#MobileBertForNextSentencePredictionc                 ó„   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        | j                  «        y r%   )r&   r'   r@  r'  rƒ  rX  rE  r”   s     €r2   r'   z,MobileBertForNextSentencePrediction.__init__S  s4   ø€ Ü‰Ñ˜Ô ä)¨&Ó1ˆŒÜ(¨Ó0ˆŒð 	�‰Õr3   Nrb   r{   rc   rE   rd   rk  r}   r5   c           	      ó  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }
d}|�2t        «       } ||
j                  dd«      |j                  d«      «      }t	        ||
|j
                  |j                  ¬«      S )aŠ  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the next sequence prediction (classification) loss. Input should be a sequence pair
            (see `input_ids` docstring) Indices should be in `[0, 1]`.

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

        Examples:

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

        >>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
        >>> model = MobileBertForNextSentencePrediction.from_pretrained("google/mobilebert-uncased")

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

        >>> outputs = model(**encoding, labels=torch.LongTensor([1]))
        >>> loss = outputs.loss
        >>> logits = outputs.logits
        ```Trn  r    NrG   rj   r  )r'  rX  r   rš   r   r­   r(  )r.   rb   r{   rc   rE   rd   rk  r}   rp  r
  r$  rt  rr  s                r2   r7   z+MobileBertForNextSentencePrediction.forward\  s­   € ðL "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆØ!%§¡¨-Ó!8Ðà!ÐØÐÜ'Ó)ˆHÙ!)Ð*@×*EÑ*EÀbÈ!Ó*LÈfÏkÉkÐZ\ËoÓ!^Ðä*Ø#Ø)Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r�  )r9   r:   r;   r'   r   r   r)   rv   rw   r   r   r¤   r   r7   r=   r>   s   @r2   r‡  r‡  M  sÔ   ø„ ôð Øð .2Ø37Ø26Ø04Ø26Ø*.ñ;
à×#Ñ# dÑ*ð;
ð ×)Ñ)¨DÑ0ð;
ð ×(Ñ(¨4Ñ/ð	;
ð
 ×&Ñ&¨Ñ-ð;
ð ×(Ñ(¨4Ñ/ð;
ð × Ñ  4Ñ'ð;
ð Ð+Ñ,ð;
ð 
Ð,Ñ	,ò;
ó ó ô;
r3   r‡  z¢
    MobileBert Model transformer with a sequence classification/regression head on top (a linear layer on top of the
    pooled output) e.g. for GLUE tasks.
    c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )Ú#MobileBertForSequenceClassificationc                 ón  •— t         ‰| �  |«       |j                  | _        || _        t	        |«      | _        |j                  �|j                  n|j                  }t        j                  |«      | _
        t        j                  |j                  |j                  «      | _        | j                  «        y r%   )r&   r'   Ú
num_labelsr_   r@  r'  Úclassifier_dropoutrZ   r   rY   r[   rT   rK   Ú
classifierrE  ©r.   r_   rŽ  r1   s      €r2   r'   z,MobileBertForSequenceClassification.__init__¤  s�   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØˆŒä)¨&Ó1ˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr3   Nrb   r{   rc   rE   rd   rk  r}   r5   c           	      óà  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
d}|��‡| j                  j                  €�| j
                  dk(  rd| j                  _        nl| j
                  dkD  rL|j                  t        j                  k(  s|j                  t        j                  k(  rd| j                  _        nd| j                  _        | j                  j                  dk(  rIt        «       }| j
                  dk(  r& ||
j                  «       |j                  «       «      }nŒ ||
|«      }n‚| j                  j                  dk(  r=t        «       } ||
j                  d| j
                  «      |j                  d«      «      }n,| j                  j                  dk(  rt        «       } ||
|«      }t        ||
|j                   |j"                  ¬	«      S )
a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Trn  r    NÚ
regressionÚsingle_label_classificationÚmulti_label_classificationrG   r  )r'  r[   r�  r_   Úproblem_typer�  rf   r)   rn   r�   r   Úsqueezer   rš   r   r   r­   r(  )r.   rb   r{   rc   rE   rd   rk  r}   rp  r
  r€  r;  rr  s                r2   r7   z+MobileBertForSequenceClassification.forward³  s©  € ð$ "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆàˆØÑØ�{‰{×'Ñ'Ð/Ø—?‘? aÒ'Ø/;�D—K‘KÕ,Ø—_‘_ qÒ(¨f¯l©l¼e¿j¹jÒ.HÈFÏLÉLÔ\a×\eÑ\eÒLeØ/L�D—K‘KÕ,à/K�D—K‘KÔ,à�{‰{×'Ñ'¨<Ò7Ü"›9�Ø—?‘? aÒ'Ù# F§N¡NÓ$4°f·n±nÓ6FÓG‘Dá# F¨FÓ3‘DØ—‘×)Ñ)Ð-JÒJÜ+Ó-�Ù §¡¨B°·±Ó @À&Ç+Á+ÈbÃ/ÓR‘Ø—‘×)Ñ)Ð-IÒIÜ,Ó.�Ù ¨Ó/�ä'ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r�  )r9   r:   r;   r'   r   r   r)   r<   r   r   r¤   r   r7   r=   r>   s   @r2   r‹  r‹  œ  sÑ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ;
à—<‘< $Ñ&ð;
ð Ÿ™ tÑ+ð;
ð Ÿ™ tÑ+ð	;
ð
 —l‘l TÑ)ð;
ð —|‘| dÑ*ð;
ð —‘˜tÑ#ð;
ð Ð+Ñ,ð;
ð 
ˆu�|‰|Ñ	Ð7Ñ	7ò;
ó ó ô;
r3   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 )ÚMobileBertForQuestionAnsweringc                 óè   •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        t        j                  |j                  |j                  «      | _        | j                  «        y rz  )
r&   r'   r�  r@  r'  r   rT   rK   Ú
qa_outputsrE  r”   s     €r2   r'   z'MobileBertForQuestionAnswering.__init__ö  sU   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä)¨&ÀEÔJˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr3   Nrb   r{   rc   rE   rd   Ústart_positionsÚend_positionsr}   r5   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 )
NTrn  r   r    rG   rk   )Úignore_indexrj   )r;  Ústart_logitsÚ
end_logitsr­   r(  )r'  rš  Úsplitr–  r…   Úlenrm   Úclampr   r   r­   r(  )r.   rb   r{   rc   rE   rd   r›  rœ  r}   rp  r  r€  rŸ  r   rq  Úignored_indexrr  Ú
start_lossÚend_losss                      r2   r7   z&MobileBertForQuestionAnswering.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ä+ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r3   ru  )r9   r:   r;   r'   r   r   r)   r<   r   r   r¤   r   r7   r=   r>   s   @r2   r˜  r˜  ó  sç   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø/3Ø-1ñ3
à—<‘< $Ñ&ð3
ð Ÿ™ tÑ+ð3
ð Ÿ™ tÑ+ð	3
ð
 —l‘l TÑ)ð3
ð —|‘| dÑ*ð3
ð Ÿ™¨Ñ,ð3
ð —|‘| dÑ*ð3
ð Ð+Ñ,ð3
ð 
ˆu�|‰|Ñ	Ð;Ñ	;ò3
ó ó ô3
r3   r˜  c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )ÚMobileBertForMultipleChoicec                 ó*  •— t         ‰| �  |«       t        |«      | _        |j                  �|j                  n|j
                  }t        j                  |«      | _        t        j                  |j                  d«      | _        | j                  «        y rî   )r&   r'   r@  r'  rŽ  rZ   r   rY   r[   rT   rK   r�  rE  r�  s      €r2   r'   z$MobileBertForMultipleChoice.__init__;  su   ø€ Ü‰Ñ˜Ô ä)¨&Ó1ˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸Ó:ˆŒð 	�‰Õr3   Nrb   r{   rc   rE   rd   rk  r}   r5   c           	      óì  — |�|j                   d   n|j                   d   }|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�!|j                  d|j                  d«      «      nd}|�1|j                  d|j                  d«      |j                  d«      «      nd} | j                  |f||||ddœ|¤Ž}	|	d   }
| j	                  |
«      }
| j                  |
«      }|j                  d|«      }d}|�t        «       } |||«      }t        |||	j                  |	j                  ¬«      S )a[  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        token_type_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

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

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

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
            model's internal embedding lookup matrix.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
            num_choices-1]` where `num_choices` is the size of the second dimension of the input tensors. (See
            `input_ids` above)
        Nr    rG   éþÿÿÿTrn  r  )
r™   rš   rm   r'  r[   r�  r   r   r­   r(  )r.   rb   r{   rc   rE   rd   rk  r}   Únum_choicesrp  r
  r€  Úreshaped_logitsr;  rr  s                  r2   r7   z#MobileBertForMultipleChoice.forwardH  sž  € ðT -6Ð,A�i—o‘o aÒ(À}×GZÑGZÐ[\ÑG]ˆà>GÐ>S�I—N‘N 2 y§~¡~°bÓ'9Ô:ÐY]ˆ	ØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØM[ÐMg˜×,Ñ,¨R°×1DÑ1DÀRÓ1HÔIÐmqˆØGSÐG_�|×(Ñ(¨¨\×->Ñ->¸rÓ-BÔCÐeiˆð Ð(ð ×Ñ˜r =×#5Ñ#5°bÓ#9¸=×;MÑ;MÈbÓ;QÔRàð 	ð "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð   ™
ˆàŸ™ ]Ó3ˆØ—‘ Ó/ˆØ Ÿ+™+ b¨+Ó6ˆàˆØÐÜ'Ó)ˆHÙ˜O¨VÓ4ˆDä(ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r�  )r9   r:   r;   r'   r   r   r)   r<   r   r   r¤   r   r7   r=   r>   s   @r2   r¨  r¨  8  sÛ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñN
à—<‘< $Ñ&ðN
ð Ÿ™ tÑ+ðN
ð Ÿ™ tÑ+ð	N
ð
 —l‘l TÑ)ðN
ð —|‘| dÑ*ðN
ð —‘˜tÑ#ðN
ð Ð+Ñ,ðN
ð 
ˆu�|‰|Ñ	Ð8Ñ	8òN
ó ó ôN
r3   r¨  c                   ó*  ‡ — e Zd Zˆ fd„Zee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  dej                  dz  d	ee	   d
e
ej                     ez  fd„«       «       Zˆ xZS )Ú MobileBertForTokenClassificationc                 ód  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  |«      | _	        t        j                  |j                  |j                  «      | _        | j                  «        y rz  )r&   r'   r�  r@  r'  rŽ  rZ   r   rY   r[   rT   rK   r�  rE  r�  s      €r2   r'   z)MobileBertForTokenClassification.__init__ž  sŠ   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒä)¨&ÀEÔJˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —z‘zÐ"4Ó5ˆŒÜŸ)™) F×$6Ñ$6¸×8IÑ8IÓJˆŒð 	�‰Õr3   Nrb   r{   rc   rE   rd   rk  r}   r5   c           	      óH  —  | j                   |f||||ddœ|¤Ž}|d   }	| j                  |	«      }	| j                  |	«      }
d}|�<t        «       } ||
j	                  d| j
                  «      |j	                  d«      «      }t        ||
|j                  |j                  ¬«      S )zÛ
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        Trn  r   NrG   r  )	r'  r[   r�  r   rš   r�  r   r­   r(  )r.   rb   r{   rc   rE   rd   rk  r}   rp  r  r€  r;  rr  s                r2   r7   z(MobileBertForTokenClassification.forward¬  s·   € ð  "�$—/‘/Øð
à)Ø)Ø%Ø'Øñ
ð ñ
ˆð " !™*ˆàŸ,™, Ó7ˆØ—‘ Ó1ˆàˆØÐÜ'Ó)ˆHÙ˜FŸK™K¨¨D¯O©OÓ<¸f¿k¹kÈ"»oÓNˆDä$ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r3   r�  )r9   r:   r;   r'   r   r   r)   r<   r   r   r¤   r   r7   r=   r>   s   @r2   r¯  r¯  ›  sÑ   ø„ ôð Øð *.Ø.2Ø.2Ø,0Ø-1Ø&*ñ'
à—<‘< $Ñ&ð'
ð Ÿ™ tÑ+ð'
ð Ÿ™ tÑ+ð	'
ð
 —l‘l TÑ)ð'
ð —|‘| dÑ*ð'
ð —‘˜tÑ#ð'
ð Ð+Ñ,ð'
ð 
ˆu�|‰|Ñ	Ð4Ñ	4ò'
ó ó ô'
r3   r¯  )
rx  r¨  r‡  rS  r˜  r‹  r¯  rì   r@  r&  )Nrh   )UÚcollections.abcr   Údataclassesr   r)   r   Útorch.nnr   r   r   Ú r
   r+  Úactivationsr   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   r   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_mobilebertr!   Ú
get_loggerr9   ÚloggerÚModuler#   rX   rV   rB   r<   Úfloatrˆ   rŠ   r¦   r³   rº   rÄ   rÈ   rÑ   r×   râ   ræ   rì   rù   r  r  r  r  r  r&  r:  r@  rS  rx  rƒ  r‡  r‹  r˜  r¨  r¯  Ú__all__r>  r3   r2   ú<module>rÅ     s¢  ðõ. %Ý !ã Ý ß AÑ Aå &Ý !Ý 6Ý 9÷	÷ 	ó 	÷ GÝ &ß MÓ Mß IÝ 5Ý 6ð 
ˆ×	Ñ	˜HÓ	%€ô6ˆR�Y‰Yô 6ð Ÿ™°&Ñ
9€ôI˜2Ÿ9™9ô Iðf !Øñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ñ(ó%ô81)˜bŸi™iô 1)ôh˜2Ÿ9™9ô ô".˜"Ÿ)™)ô .ô8˜RŸY™Yô ô�r—y‘yô ô�r—y‘yô ô0	�b—i‘iô 	ô!]�—‘ô !]ôH	�—	‘	ô 	ô	ˆr�y‰yô 	ô)Ð0ô )ôX@˜Ÿ	™	ô @ô(!�r—y‘yô !ô&¨¯	©	ô ô" §¡ô ô"!˜BŸI™Iô !ô	9 §¡ô 	9ð ôi ó ió ðiñ4 ðôð
 ô7 [ó 7ó óð7ð& ôC
Ð/ó C
ó ðC
ñL ðôô_
Ð8ó _
óð_
ðD ôF
Ð5ó F
ó ðF
ôR&˜BŸI™Iô &ñ ðôô
G
Ð*Có G
óð
G
ñT ðôôM
Ð*Có M
óðM
ð` ô@
Ð%>ó @
ó ð@
ðF ô^
Ð";ó ^
ó ð^
ðB ô8
Ð'@ó 8
ó ð8
òv�r3   