§
    ‚Štj¾Æ  ã                   ó´  — 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%j-        e.¦  «        Z/ G d„ dej0        ¦  «        Z1ej2        e1dœZ3 G d„ dej0        ¦  «        Z4	 	 d`dej0        dej5        dej5        dej5        dej5        dz  de6dz  de6d e e#         fd!„Z7 G d"„ d#ej0        ¦  «        Z8 G d$„ d%ej0        ¦  «        Z9 G d&„ d'ej0        ¦  «        Z: G d(„ d)ej0        ¦  «        Z; G d*„ d+ej0        ¦  «        Z< G d,„ d-ej0        ¦  «        Z= G d.„ d/ej0        ¦  «        Z> G d0„ d1ej0        ¦  «        Z? G d2„ d3ej0        ¦  «        Z@ G d4„ d5ej0        ¦  «        ZA G d6„ d7e¦  «        ZB G d8„ d9ej0        ¦  «        ZC G d:„ d;ej0        ¦  «        ZD G d<„ d=ej0        ¦  «        ZE G d>„ d?ej0        ¦  «        ZF G d@„ dAej0        ¦  «        ZG G dB„ dCej0        ¦  «        ZHe$ G dD„ dEe¦  «        ¦   «         ZI e$dF¬G¦  «        e G dH„ dIe"¦  «        ¦   «         ¦   «         ZJe$ G dJ„ dKeI¦  «        ¦   «         ZK e$dL¬G¦  «         G dM„ dNeI¦  «        ¦   «         ZLe$ G dO„ dPeI¦  «        ¦   «         ZM G dQ„ dRej0        ¦  «        ZN e$dS¬G¦  «         G dT„ dUeI¦  «        ¦   «         ZO e$dV¬G¦  «         G dW„ dXeI¦  «        ¦   «         ZPe$ G dY„ dZeI¦  «        ¦   «         ZQe$ G d[„ d\eI¦  «        ¦   «         ZRe$ G d]„ d^eI¦  «        ¦   «         ZSg d_¢ZTdS )aé    )Ú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                   óD   ‡ — e Zd Zdˆ fd„	Zdej        dej        fd„Zˆ xZS )ÚNoNormNc                 óô   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        t          j        t	          j        |¦  «        ¦  «        | _        d S ©N)	ÚsuperÚ__init__r   Ú	ParameterÚtorchÚzerosÚbiasÚonesÚweight)ÚselfÚ	feat_sizeÚepsÚ	__class__s      €úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/mobilebert/modeling_mobilebert.pyr'   zNoNorm.__init__8   sS   ø€ Ý‰Œ×ÒÑÔÐÝ”L¥¤¨YÑ!7Ô!7Ñ8Ô8ˆŒ	Ý”l¥5¤:¨iÑ#8Ô#8Ñ9Ô9ˆŒˆˆó    Úinput_tensorÚreturnc                 ó&   — || j         z  | j        z   S r%   )r-   r+   )r.   r4   s     r2   ÚforwardzNoNorm.forward=   s   € Ø˜dœkÑ)¨D¬IÑ5Ð5r3   r%   ©Ú__name__Ú
__module__Ú__qualname__r'   r)   ÚTensorr7   Ú__classcell__©r1   s   @r2   r#   r#   7   sc   ø€ € € € € ð:ð :ð :ð :ð :ð :ð
6 E¤Lð 6°U´\ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð 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                 óæ  •— 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        ¦  «        | _        |                      dt/          j        |j
        ¦  «                             d¦  «        d¬¦  «         d S )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ˆÔØ$Ô3ˆÔØ!Ô-ˆÔå!œ|¨FÔ,=¸vÔ?TÐbhÔbuÐvÑvÔvˆÔÝ#%¤<°Ô0NÐPVÔPbÑ#cÔ#cˆÔ Ý%'¤\°&Ô2HÈ&ÔJ\Ñ%]Ô%]ˆÔ"à$(Ô$6Ð=˜q˜q¸AÐØ"Ô1Ð4HÑHÐÝ(*¬	Ð2EÀvÔGYÑ(ZÔ(ZˆÔ%å  Ô!:Ô;¸FÔ<NÑOÔOˆŒÝ”z &Ô"<Ñ=Ô=ˆŒð 	×ÒØ�EœL¨Ô)GÑHÔH×OÒOÐPWÑXÔXÐejð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r3   NÚ	input_idsÚtoken_type_idsrE   Úinputs_embedsr5   c           
      ó6  — |�|                      ¦   «         }n|                      ¦   «         d d…         }|d         }|€| j        d d …d |…f         }|€+t          j        |t          j        | j        j        ¬¦  «        }|€|                      |¦  «        }| j        rut          j        t          j
                             |d d …dd …f         g d¢d¬¦  «        |t          j
                             |d d …d d…f         g d¢d¬¦  «        gd¬	¦  «        }| j        s| j        | j        k    r|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   |z   }	|                      |	¦  «        }	|                      |	¦  «        }	|	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ˆKà'×,Ò,Ñ.Ô.¨s°¨sÔ3ˆKà  ”^ˆ
àÐØÔ,¨Q¨Q¨Q°°°¨^Ô<ˆLàÐ!Ý"œ[¨½E¼JÈtÔO`ÔOgÐhÑhÔhˆNØÐ Ø ×0Ò0°Ñ;Ô;ˆMàÔð 	õ "œIå”M×%Ò% m°A°A°A°q°r°r°EÔ&:Ð<NÐ<NÐ<NÐVYÐ%ÑZÔZØ!Ý”M×%Ò% m°A°A°A°s¸°s°FÔ&;Ð=OÐ=OÐ=OÐWZÐ%Ñ[Ô[ðð
 ðñ ô ˆMð Ôð 	I Ô!4¸Ô8HÒ!HÐ!HØ ×9Ò9¸-ÑHÔHˆMð #×6Ò6°|ÑDÔDÐØ $× :Ò :¸>Ñ JÔ 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ÐQð
ð 
ð 
ð 
ð 
ð0 .2Ø26Ø04Ø26ð0ð 0àÔ# dÑ*ð0ð Ô(¨4Ñ/ð0ð Ô&¨Ñ-ð	0ð
 Ô(¨4Ñ/ð0ð 
Œð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r3   rB   rh   ÚmoduleÚqueryÚkeyri   Úattention_maskÚscalingr[   Úkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|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Ô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                 ó4  •— 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| _        d S )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[Ñ'[Ñ#\Ô#\ˆÔ Ø!Ô5¸Ô8PÑPˆÔØÔ/°Ñ5ˆŒå”Y˜vÔ6¸Ô8JÑKÔKˆŒ
Ý”9˜VÔ4°dÔ6HÑIÔIˆŒÝ”YØ'-Ô'FÐ^ˆFÔ#Ð#ÈFÔL^Ð`dÔ`rñ
ô 
ˆŒ
õ ”z &Ô"EÑFÔFˆŒàˆŒˆˆr3   NÚquery_tensorÚ
key_tensorÚvalue_tensorr{   r}   r5   c                 óJ  — |j         d d…         }g |¢d‘| j        ‘R } |                      |¦  «        j        |Ž                      dd¦  «        } |                      |¦  «        j        |Ž                      dd¦  «        }	 |                      |¦  «        j        |Ž                      dd¦  «        }
t          j        | j	        j
        t          ¦  «        } || ||	|
|f| j        sdn| j        j        | j        dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }||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¿   s]  € ð #Ô(¨¨"¨Ô-ˆØC˜ÐC bÐC¨$Ô*BÐCÐCˆð 4�d—j’j Ñ.Ô.Ô3°\ÐB×LÒLÈQÐPQÑRÔRˆØ-�D—H’H˜ZÑ(Ô(Ô-¨|Ð<×FÒFÀqÈ!ÑLÔLˆ	Ø3�d—j’j Ñ.Ô.Ô3°\ÐB×LÒLÈQÐPQÑRÔRˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}Ð@�C�C°$´,´.Ø”Lð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ˜LÐ(Ð(r3   r%   ©r9   r:   r;   r'   r)   r<   rw   r   r   Útupler7   r=   r>   s   @r2   rŠ   rŠ   ­   s«   ø€ € € € € ðð ð ð ð ð, 48ð)ð )à”lð)ð ”Lð)ð ”lð	)ð
 Ô)¨DÑ0ð)ð Ð+Ô,ð)ð 
ˆuŒ|Ô	ð)ð )ð )ð )ð )ð )ð )ð )r3   rŠ   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚMobileBertSelfOutputc                 óL  •— t          ¦   «                              ¦   «          |j        | _        t          j        |j        |j        ¦  «        | _        t          |j                 |j        |j	        ¬¦  «        | _
        | j        s t          j        |j        ¦  «        | _        d S d S ©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ˆÔÝ”Y˜vÔ6¸Ô8OÑPÔPˆŒ
Ý  Ô!:Ô;¸FÔ<SÐY_ÔYnÐoÑoÔoˆŒØÔ"ð 	BÝœ: fÔ&@ÑAÔAˆDŒLˆLˆLð	Bð 	Br3   Úhidden_statesÚresidual_tensorr5   c                 ó˜   — |                       |¦  «        }| j        s|                      |¦  «        }|                      ||z   ¦  «        }|S r%   )r«   rª   r[   rX   ©r.   r­   r®   Úlayer_outputss       r2   r7   zMobileBertSelfOutput.forwardê   sK   € ØŸ
š
 =Ñ1Ô1ˆØÔ"ð 	8Ø ŸLšL¨Ñ7Ô7ˆMØŸš }°Ñ'FÑGÔGˆØÐr3   r8   r>   s   @r2   r¦   r¦   á   sn   ø€ € € € € ðBð Bð Bð Bð Bð U¤\ð ÀEÄLð ÐUZÔ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                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r%   )r&   r'   rŠ   r.   r¦   Úoutputr”   s     €r2   r'   zMobileBertAttention.__init__ó   s;   ø€ Ý‰Œ×ÒÑÔÐÝ+¨FÑ3Ô3ˆŒ	Ý*¨6Ñ2Ô2ˆŒˆˆr3   Nr•   r–   r—   Úlayer_inputr{   r}   r5   c                 ó^   —  | j         ||||fi |¤Ž\  }}|                      ||¦  «        }||fS r%   )r.   rµ   )	r.   r•   r–   r—   r¶   r{   r}   Úattention_outputr†   s	            r2   r7   zMobileBertAttention.forwardø   sZ   € ð *3¨¬ØØØØð	*
ð *
ð
 ð*
ð *
Ñ&Ð˜,ð  Ÿ;š;Ð'7¸ÑEÔEÐØ Ð-Ð-r3   r%   r£   r>   s   @r2   r³   r³   ò   s·   ø€ € € € € ð3ð 3ð 3ð 3ð 3ð 48ð.ð .à”lð.ð ”Lð.ð ”lð	.ð
 ”\ð.ð Ô)¨DÑ0ð.ð Ð+Ô,ð.ð 
ˆuŒ|Ô	ð.ð .ð .ð .ð .ð .ð .ð .r3   r³   c                   óB   ‡ — 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                 | _        d S |j        | _        d S r%   )r&   r'   r   rT   rŽ   Úintermediate_sizer«   Ú
isinstanceÚ
hidden_actÚstrr   Úintermediate_act_fnr”   s     €r2   r'   zMobileBertIntermediate.__init__  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ6¸Ô8PÑQÔQˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r3   r­   r5   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r%   )r«   rÀ   ©r.   r­   s     r2   r7   zMobileBertIntermediate.forward  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr3   r8   r>   s   @r2   rº   rº     s^   ø€ € € € € ð9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r3   rº   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚOutputBottleneckc                 ó"  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j                 |j        |j	        ¬¦  «        | _
        t          j        |j        ¦  «        | _        d S r¨   )r&   r'   r   rT   rŽ   rK   r«   rV   rW   r¬   rX   rY   rZ   r[   r”   s     €r2   r'   zOutputBottleneck.__init__  sm   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ6¸Ô8JÑKÔKˆŒ
Ý  Ô!:Ô;¸FÔ<NÐTZÔTiÐjÑjÔjˆŒÝ”z &Ô"<Ñ=Ô=ˆŒˆˆr3   r­   r®   r5   c                 óŠ   — |                       |¦  «        }|                      |¦  «        }|                      ||z   ¦  «        }|S r%   )r«   r[   rX   r°   s       r2   r7   zOutputBottleneck.forward$  s@   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØŸš }°Ñ'FÑGÔGˆØÐr3   r8   r>   s   @r2   rÄ   rÄ     si   ø€ € € € € ð>ð >ð >ð >ð >ð U¤\ð ÀEÄLð ÐUZÔ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                 óf  •— t          ¦   «                              ¦   «          |j        | _        t          j        |j        |j        ¦  «        | _        t          |j	                 |j        ¦  «        | _
        | j        s t          j        |j        ¦  «        | _        d S t          |¦  «        | _        d S 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ˆÔÝ”Y˜vÔ7¸Ô9PÑQÔQˆŒ
Ý  Ô!:Ô;¸FÔ<SÑTÔTˆŒØÔ"ð 	7Ýœ: fÔ&@ÑAÔAˆDŒLˆLˆLå.¨vÑ6Ô6ˆDŒOˆOˆOr3   Úintermediate_statesÚresidual_tensor_1Úresidual_tensor_2r5   c                 óö   — |                       |¦  «        }| j        s.|                      |¦  «        }|                      ||z   ¦  «        }n.|                      ||z   ¦  «        }|                      ||¦  «        }|S r%   )r«   rª   r[   rX   rÊ   )r.   rË   rÌ   rÍ   Úlayer_outputs        r2   r7   zMobileBertOutput.forward6  s}   € ð —z’zÐ"5Ñ6Ô6ˆØÔ"ð 	LØŸ<š<¨Ñ5Ô5ˆLØŸ>š>¨,Ð9JÑ*JÑKÔKˆLˆLàŸ>š>¨,Ð9JÑ*JÑKÔKˆLØŸ?š?¨<Ð9JÑKÔKˆLØÐr3   r8   r>   s   @r2   rÈ   rÈ   +  su   ø€ € € € € ð7ð 7ð 7ð 7ð 7ð
Ø#(¤<ð
ØDIÄLð
ØejÔeqð
à	Œð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   rÈ   c                   óB   ‡ — 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	        ¬¦  «        | _
        d S r¨   )r&   r'   r   rT   rK   Úintra_bottleneck_sizer«   rV   rW   r¬   rX   r”   s     €r2   r'   zBottleneckLayer.__init__D  sY   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3OÑPÔPˆŒ
Ý  Ô!:Ô;¸FÔ<XÐ^dÔ^sÐtÑtÔtˆŒˆˆr3   r­   r5   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S r%   ©r«   rX   )r.   r­   r¶   s      r2   r7   zBottleneckLayer.forwardI  s*   € Ø—j’j Ñ/Ô/ˆØ—n’n [Ñ1Ô1ˆØÐr3   r8   r>   s   @r2   rÑ   rÑ   C  sc   ø€ € € € € ðuð uð uð uð uð
 U¤\ð °e´lð ð ð ð ð ð ð ð r3   rÑ   c                   óN   ‡ — 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	          |¦  «        | _        d S d S r%   )r&   r'   Úkey_query_shared_bottleneckr‘   rÑ   ÚinputÚ	attentionr”   s     €r2   r'   zBottleneck.__init__P  sf   ø€ Ý‰Œ×ÒÑÔÐØ+1Ô+MˆÔ(Ø(.Ô(GˆÔ%Ý$ VÑ,Ô,ˆŒ
ØÔ+ð 	5Ý,¨VÑ4Ô4ˆDŒNˆNˆNð	5ð 	5r3   r­   r5   c                 ó–   — |                       |¦  «        }| j        r|fdz  S | j        r|                      |¦  «        }||||fS ||||fS )Né   )rÚ   r‘   rÙ   rÛ   )r.   r­   Úbottlenecked_hidden_statesÚshared_attention_inputs       r2   r7   zBottleneck.forwardX  so   € ð" &*§Z¢Z°Ñ%>Ô%>Ð"ØÔ(ð 	]Ø.Ð0°1Ñ4Ð4ØÔ-ð 	]Ø%)§^¢^°MÑ%BÔ%BÐ"Ø*Ð,BÀMÐSmÐnÐnà! =°-ÐA[Ð\Ð\r3   ©	r9   r:   r;   r'   r)   r<   r¤   r7   r=   r>   s   @r2   r×   r×   O  sm   ø€ € € € € ð5ð 5ð 5ð 5ð 5ð] U¤\ð ]°e¸E¼LÔ6Ið ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]r3   r×   c                   óP   ‡ — e Zd Zˆ fd„Zdej        dej        dej        fd„Zˆ xZS )Ú	FFNOutputc                 óæ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j                 |j        |j	        ¬¦  «        | _
        d S r¨   )r&   r'   r   rT   r¼   rŽ   r«   rV   rW   r¬   rX   r”   s     €r2   r'   zFFNOutput.__init__t  sY   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9PÑQÔQˆŒ
Ý  Ô!:Ô;¸FÔ<SÐY_ÔYnÐoÑoÔoˆŒˆˆr3   r­   r®   r5   c                 ó`   — |                       |¦  «        }|                      ||z   ¦  «        }|S r%   rÕ   r°   s       r2   r7   zFFNOutput.forwardy  s/   € ØŸ
š
 =Ñ1Ô1ˆØŸš }°Ñ'FÑGÔGˆØÐr3   r8   r>   s   @r2   râ   râ   s  sn   ø€ € € € € ðpð pð pð pð pð
 U¤\ð ÀEÄLð ÐUZÔUað ð ð ð ð ð ð ð r3   râ   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚFFNLayerc                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S r%   )r&   r'   rº   Úintermediaterâ   rµ   r”   s     €r2   r'   zFFNLayer.__init__€  s<   ø€ Ý‰Œ×ÒÑÔÐÝ2°6Ñ:Ô:ˆÔÝ Ñ'Ô'ˆŒˆˆr3   r­   r5   c                 ó\   — |                       |¦  «        }|                      ||¦  «        }|S r%   )rè   rµ   )r.   r­   Úintermediate_outputr±   s       r2   r7   zFFNLayer.forward…  s0   € Ø"×/Ò/°Ñ>Ô>ÐØŸšÐ$7¸ÑGÔGˆØÐr3   r8   r>   s   @r2   ræ   ræ     s^   ø€ € € € € ð(ð (ð (ð (ð (ð
 U¤\ð °e´lð ð ð ð ð ð ð ð r3   ræ   c            	       ój   ‡ — 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k    r<t          j        ˆfd„t          ‰j        dz
  ¦  «        D ¦   «         ¦  «        | _        d S d S )Nr    c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS © )ræ   ©Ú.0Ú_r_   s     €r2   ú
<listcomp>z,MobileBertLayer.__init__.<locals>.<listcomp>—  s!   ø€ Ð%kÐ%kÐ%k¸1¥h¨vÑ&6Ô&6Ð%kÐ%kÐ%kr3   )r&   r'   rª   Únum_feedforward_networksr³   rÛ   rº   rè   rÈ   rµ   r×   rÊ   r   Ú
ModuleListÚrangeÚffnr”   s    `€r2   r'   zMobileBertLayer.__init__Œ  sÉ   øø€ Ý‰Œ×ÒÑÔÐØ$Ô3ˆÔØ(.Ô(GˆÔ%å,¨VÑ4Ô4ˆŒÝ2°6Ñ:Ô:ˆÔÝ& vÑ.Ô.ˆŒØÔð 	1Ý(¨Ñ0Ô0ˆDŒOØÔ*¨QÒ.Ð.Ý”}Ð%kÐ%kÐ%kÐ%kÅÀfÔFeÐhiÑFiÑ@jÔ@jÐ%kÑ%kÔ%kÑlÔlˆDŒHˆHˆHð /Ð.r3   Nr­   r{   r}   r5   c                 ó&  — | j         r|                      |¦  «        \  }}}}n|gdz  \  }}}} | j        |||||fi |¤Ž\  }}	|}
| j        dk    r| j        D ]} ||
¦  «        }
Œ|                      |
¦  «        }|                      ||
|¦  «        }|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é   € ð Ôð 	VØBFÇ/Â/ÐR_ÑB`ÔB`Ñ?ˆL˜* l°K°KàCPÀ/ÐTUÑBUÑ?ˆL˜* l°Kà#1 4¤>ØØØØØð$
ð $
ð ð$
ð $
Ñ Ð˜qð 1ÐàÔ(¨AÒ-Ð-Ø"œhð @ð @�
Ø#- :Ð.>Ñ#?Ô#?Ð Ð à"×/Ò/Ð0@ÑAÔAÐØ—{’{Ð#6Ð8HÈ-ÑXÔXˆØÐr3   r%   )r9   r:   r;   r'   r)   r<   rw   r   r   r7   r=   r>   s   @r2   rì   rì   ‹  s“   ø€ € € € € ðmð mð mð mð mð  48ðð à”|ðð Ô)¨DÑ0ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r3   rì   c            
       óf   ‡ — 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        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS rï   )rì   rð   s     €r2   ró   z.MobileBertEncoder.__init__.<locals>.<listcomp>º  s!   ø€ Ð#eÐ#eÐ#eÀ¥O°FÑ$;Ô$;Ð#eÐ#eÐ#er3   )r&   r'   r   rõ   rö   Únum_hidden_layersÚlayerr”   s    `€r2   r'   zMobileBertEncoder.__init__¸  sO   øø€ Ý‰Œ×ÒÑÔÐÝ”]Ð#eÐ#eÐ#eÐ#eÅUÈ6ÔKcÑEdÔEdÐ#eÑ#eÔ#eÑfÔfˆŒ
ˆ
ˆ
r3   Nr­   r{   r}   r5   c                 ój   — 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¼  s\   € õ  )¨¬Ñ4Ô4ð 	ð 	‰OˆAˆ|Ø(˜LØØðð ð ðð ˆMˆMõ
 °Ð?Ñ?Ô?Ð?r3   r%   )r9   r:   r;   r'   r)   r<   rw   r   r   r¤   r   r7   r=   r>   s   @r2   rü   rü   ·  s£   ø€ € € € € ðgð gð gð gð gð 48ð@ð @à”|ð@ð Ô)¨DÑ0ð@ð Ð+Ô,ð	@ð
 
�Ñ	 ð@ð @ð @ð @ð @ð @ð @ð @r3   rü   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚMobileBertPoolerc                 óº   •— t          ¦   «                              ¦   «          |j        | _        | j        r&t	          j        |j        |j        ¦  «        | _        d S d S r%   )r&   r'   Úclassifier_activationÚdo_activater   rT   rK   r«   r”   s     €r2   r'   zMobileBertPooler.__init__Ì  sY   ø€ Ý‰Œ×ÒÑÔÐØ!Ô7ˆÔØÔð 	KÝœ 6Ô#5°vÔ7IÑJÔJˆDŒJˆJˆJð	Kð 	Kr3   r­   r5   c                 ó‚   — |d d …df         }| j         s|S |                      |¦  «        }t          j        |¦  «        }|S )Nr   )r
  r«   r)   Útanh)r.   r­   Úfirst_token_tensorÚpooled_outputs       r2   r7   zMobileBertPooler.forwardÒ  sO   € ð +¨1¨1¨1¨a¨4Ô0ÐØÔð 	!Ø%Ð%à ŸJšJÐ'9Ñ:Ô:ˆMÝ!œJ }Ñ5Ô5ˆMØ Ð r3   r8   r>   s   @r2   r  r  Ë  sc   ø€ € € € € ðKð Kð Kð Kð Kð	! U¤\ð 	!°e´lð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!r3   r  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )Ú!MobileBertPredictionHeadTransformc                 óX  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _
        n|j        | _
        t          d         |j        |j        ¬¦  «        | _        d S )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˜vÔ1°6Ô3EÑFÔFˆŒ
Ý�fÔ'­Ñ-Ô-ð 	6Ý$*¨6Ô+<Ô$=ˆDÔ!Ð!à$*Ô$5ˆDÔ!Ý  Ô.¨vÔ/AÀvÔG\Ð]Ñ]Ô]ˆŒˆˆr3   r­   r5   c                 ó„   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|S r%   )r«   r  rX   rÂ   s     r2   r7   z)MobileBertPredictionHeadTransform.forwardè  s=   € ØŸ
š
 =Ñ1Ô1ˆØ×-Ò-¨mÑ<Ô<ˆØŸš }Ñ5Ô5ˆØÐr3   r8   r>   s   @r2   r  r  Þ  sc   ø€ € € € € ð^ð ^ð ^ð ^ð ^ð U¤\ð °e´lð ð ð ð ð ð ð ð r3   r  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚMobileBertLMPredictionHeadc                 óx  •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          j        |j        |j        |j        z
  d¬¦  «        | _	        t	          j        |j        |j        d¬¦  «        | _
        t	          j        t          j        |j        ¦  «        ¦  «        | _        d S )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ÔBˆŒõ ”Y˜vÔ0°&Ô2DÀvÔG\Ñ2\ÐchÐiÑiÔiˆŒ
Ý”y Ô!6¸Ô8IÐPTÐUÑUÔUˆŒÝ”L¥¤¨VÔ->Ñ!?Ô!?Ñ@Ô@ˆŒ	ˆ	ˆ	r3   r­   r5   c                 óð   — |                       |¦  «        }|                     t          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ù  sh   € ØŸš }Ñ5Ô5ˆØ%×,Ò,­U¬Y¸¼Ô8K×8MÒ8MÑ8OÔ8OÐQUÔQ[ÔQbÐ7cÐijÐ-kÑ-kÔ-kÑlÔlˆØ˜œÔ*Ñ*ˆØÐr3   r8   r>   s   @r2   r  r  ï  sc   ø€ € € € € ðAð Að Að Að Að U¤\ð °e´lð ð ð ð ð ð ð ð r3   r  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚMobileBertOnlyMLMHeadc                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r%   )r&   r'   r  Úpredictionsr”   s     €r2   r'   zMobileBertOnlyMLMHead.__init__  s/   ø€ Ý‰Œ×ÒÑÔÐÝ5°fÑ=Ô=ˆÔÐÐr3   Úsequence_outputr5   c                 ó0   — |                       |¦  «        }|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                   ó\   ‡ — 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¦  «        | _        d S ©Nrj   )r&   r'   r  r  r   rT   rK   Úseq_relationshipr”   s     €r2   r'   z#MobileBertPreTrainingHeads.__init__  sF   ø€ Ý‰Œ×ÒÑÔÐÝ5°fÑ=Ô=ˆÔÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐr3   r  r  r5   c                 ó^   — |                       |¦  «        }|                      |¦  «        }||fS r%   )r  r&  )r.   r  r  r!  Úseq_relationship_scores        r2   r7   z"MobileBertPreTrainingHeads.forward  s6   € Ø ×,Ò,¨_Ñ=Ô=ÐØ!%×!6Ò!6°}Ñ!EÔ!EÐØ Ð"8Ð8Ð8r3   rà   r>   s   @r2   r#  r#  
  st   ø€ € € € € ðAð Að Að Að Að
9 u¤|ð 9ÀEÄLð 9ÐUZÐ[`Ô[gÔUhð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r3   r#  c                   óv   ‡ — 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          ¦  «        r4t	          j        |j        ¦  «         t	          j        |j        ¦  «         dS t          |t          ¦  «        rt	          j        |j        ¦  «         dS t          |t          ¦  «        rQt	          j        |j        t          j        |j        j        d         ¦  «                             d¦  «        ¦  «         dS dS )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Ñ%Ô%ð 	iÝŒK˜œÑ$Ô$Ð$ÝŒJ�v”}Ñ%Ô%Ð%Ð%Ð%Ý˜Õ :Ñ;Ô;ð 	iÝŒK˜œÑ$Ô$Ð$Ð$Ð$Ý˜Õ 4Ñ5Ô5ð 	iÝŒJ�vÔ*­E¬L¸Ô9LÔ9RÐSUÔ9VÑ,WÔ,W×,^Ò,^Ð_fÑ,gÔ,gÑhÔhÐhÐhÐhð	ið 	ir3   )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*    s™   ø€ € € € € € àÐÐÑØ$ÐØ&*Ð#ØÐØ€NØÐØ"&Ðà(Ø-ðð Ðð
 €U„]�_„_ð	ið 	ið 	ið 	iñ „_ð	ið 	ið 	ið 	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<   dS )Ú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   r3  r@  rA  r­   r¤   r,  rï   r3   r2   r>  r>  1  s¢   € € € € € € ð	ð 	ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø8<Ð˜UÔ.°Ñ5Ð<Ð<Ñ<Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð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
    Tc                 ó  •— t          ¦   «                              |¦  «         || _        d| _        t	          |¦  «        | _        t          |¦  «        | _        |rt          |¦  «        nd| _	        |  
                    ¦   «          dS )zv
        add_pooling_layer (bool, *optional*, defaults to `True`):
            Whether to add a pooling layer
        FN)r&   r'   r_   Úgradient_checkpointingrB   rt   rü   Úencoderr  ÚpoolerÚ	post_init)r.   r_   Úadd_pooling_layerr1   s      €r2   r'   zMobileBertModel.__init__P  s|   ø€ õ
 	‰Œ×Ò˜Ñ Ô Ð ØˆŒØ&+ˆÔ#å.¨vÑ6Ô6ˆŒÝ(¨Ñ0Ô0ˆŒà2CÐMÕ& vÑ.Ô.Ð.ÈˆŒð 	�ŠÑÔÐÐÐr3   c                 ó   — | j         j        S r%   ©rt   rO   ©r.   s    r2   Úget_input_embeddingsz$MobileBertModel.get_input_embeddingsa  s   € ØŒÔ.Ð.r3   c                 ó   — || j         _        d S r%   rK  )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¦  «        ‚|                      ||||¬¦  «        }t          | j        ||¬¦  «        } | j        |fd|i|¤Ž}|d         }	| 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_   rF  rG  r   )r.   rb   r{   rc   rE   rd   r}   Úembedding_outputÚencoder_outputsr  r  s              r2   r7   zMobileBertModel.forwardg  sç   € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàŸ?š?ØØ%Ø)Ø'ð	 +ñ 
ô 
Ðõ 3Ø”;Ø*Ø)ð
ñ 
ô 
ˆð '˜$œ,Øð
ð 
à)ð
ð ð
ð 
ˆð
 *¨!Ô,ˆØ8<¼Ð8O˜Ÿš OÑ4Ô4Ð4ÐUYˆå)Ø-Ø'ð
ñ 
ô 
ð 	
r3   )T)NNNNN)r9   r:   r;   ru   r'   rM  rO  r   r   r   r)   rv   rw   r   r   r¤   r   r7   r=   r>   s   @r2   rC  rC  J  s(  ø€ € € € € ðð ðð ð ð ð ð ð"/ð /ð /ð0ð 0ð 0ð  ØØð .2Ø37Ø26Ø04Ø26ð$
ð $
àÔ# dÑ*ð$
ð Ô)¨DÑ0ð$
ð Ô(¨4Ñ/ð	$
ð
 Ô&¨Ñ-ð$
ð Ô(¨4Ñ/ð$
ð Ð+Ô,ð$
ð 
Ð+Ñ	+ð$
ð $
ð $
ñ „^ñ „_ñ  Ôð$
ð $
ð $
ð $
ð $
r3   rC  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                   ó8  ‡ — 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	          |¦  «        | _        |                      ¦   «          d S r%   )r&   r'   rC  r+  r#  ÚclsrH  r”   s     €r2   r'   z!MobileBertForPreTraining.__init__�  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý)¨&Ñ1Ô1ˆŒÝ-¨fÑ5Ô5ˆŒð 	�ŠÑÔÐÐÐr3   c                 ó$   — | j         j        j        S r%   ©r[  r  r  rL  s    r2   Úget_output_embeddingsz.MobileBertForPreTraining.get_output_embeddings¥  ó   € ØŒxÔ#Ô+Ð+r3   c                 óT   — || j         j        _        |j        | j         j        _        d S r%   ©r[  r  r  r+   ©r.   Únew_embeddingss     r2   Úset_output_embeddingsz.MobileBertForPreTraining.set_output_embeddings¨  ó%   € Ø'5ˆŒÔÔ$Ø$2Ô$7ˆŒÔÔ!Ð!Ð!r3   NÚnew_num_tokensr5   c                 ó´   •— |                       | j        j        j        |d¬¦  «        | j        j        _        t	          ¦   «                              |¬¦  «        S ©NT)rf  Ú
transposed)rf  ©Ú_get_resized_lm_headr[  r  r«   r&   Úresize_token_embeddings©r.   rf  r1   s     €r2   rl  z0MobileBertForPreTraining.resize_token_embeddings¬  sR   ø€ à%)×%>Ò%>ØŒHÔ Ô&°~ÐRVð &?ñ &
ô &
ˆŒÔÔ"õ ‰wŒw×.Ò.¸nÐ.ÑMÔMÐMr3   rb   r{   rc   rE   rd   ÚlabelsÚnext_sentence_labelr}   c           	      óÄ  —  | j         |f||||ddœ|¤Ž}	|	dd…         \  }
}|                      |
|¦  «        \  }}d}|�…|�ƒt          ¦   «         } ||                     d| j        j        ¦  «        |                     d¦  «        ¦  «        } ||                     dd¦  «        |                     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@  rA  r­   r,  )	r+  r[  r   rš   r_   rM   r>  r­   r,  )r.   rb   r{   rc   rE   rd   rn  ro  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\Ô4\Ñ1ÐÐ1àˆ
ØÐÐ"5Ð"AÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNØ!) Ð*@×*EÒ*EÀbÈ!Ñ*LÔ*LÐNa×NfÒNfÐgiÑNjÔNjÑ!kÔ!kÐØ'Ð*<Ñ<ˆJå-ØØ/Ø$:Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r3   r%   ©NNNNNNN)r9   r:   r;   Ú_tied_weights_keysr'   r^  rd  r�   r   rL   rl  r   r   r)   rv   rw   r   r   r¤   r>  r7   r=   r>   s   @r2   rV  rV  ‘  s   ø€ € € € € ð )?Ø*Xðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ðNð N°c¸D±jð NÈBÌLð Nð Nð Nð Nð Nð Nð Øð .2Ø37Ø26Ø04Ø26Ø*.Ø7;ð@
ð @
àÔ# dÑ*ð@
ð Ô)¨DÑ0ð@
ð Ô(¨4Ñ/ð	@
ð
 Ô&¨Ñ-ð@
ð Ô(¨4Ñ/ð@
ð Ô  4Ñ'ð@
ð #Ô-°Ñ4ð@
ð Ð+Ô,ð@
ð 
Ð/Ñ	/ð@
ð @
ð @
ñ „^ñ Ôð@
ð @
ð @
ð @
ð @
r3   rV  c                   ó"  ‡ — 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 )ÚMobileBertForMaskedLMrW  rX  rY  c                 óÔ   •— t          ¦   «                              |¦  «         t          |d¬¦  «        | _        t	          |¦  «        | _        || _        |                      ¦   «          d S ©NF)rI  )r&   r'   rC  r+  r  r[  r_   rH  r”   s     €r2   r'   zMobileBertForMaskedLM.__init__   s]   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý)¨&ÀEÐJÑJÔJˆŒÝ(¨Ñ0Ô0ˆŒØˆŒð 	�ŠÑÔÐÐÐr3   c                 ó$   — | j         j        j        S r%   r]  rL  s    r2   r^  z+MobileBertForMaskedLM.get_output_embeddings	  r_  r3   c                 óT   — || j         j        _        |j        | j         j        _        d S r%   ra  rb  s     r2   rd  z+MobileBertForMaskedLM.set_output_embeddings  re  r3   Nrf  r5   c                 ó´   •— |                       | j        j        j        |d¬¦  «        | j        j        _        t	          ¦   «                              |¬¦  «        S rh  rj  rm  s     €r2   rl  z-MobileBertForMaskedLM.resize_token_embeddings  sR   ø€ à%)×%>Ò%>ØŒHÔ Ô&°~ÐRVð &?ñ &
ô &
ˆŒÔÔ"õ ‰wŒw×.Ò.¸nÐ.ÑMÔMÐMr3   rb   r{   rc   rE   rd   rn  r}   c           	      ó<  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
d}|�Kt          ¦   «         } ||
                     d| j        j        ¦  «        |                     d¦  «        ¦  «        }t          ||
|j        |j        ¬¦  «        S )a¢  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
            config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
            loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
        Trq  r   NrG   ©r?  Úlogitsr­   r,  )	r+  r[  r   rš   r_   rM   r   r­   r,  )r.   rb   r{   rc   rE   rd   rn  r}   rs  r  r!  rv  ru  s                r2   r7   zMobileBertForMaskedLM.forward  sÐ   € ð$ "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð " !œ*ˆØ ŸHšH _Ñ5Ô5ÐàˆØÐÝ'Ñ)Ô)ˆHØ%˜XÐ&7×&<Ò&<¸RÀÄÔAWÑ&XÔ&XÐZ`×ZeÒZeÐfhÑZiÔZiÑjÔjˆNåØØ$Ø!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r3   r%   ©NNNNNN)r9   r:   r;   ry  r'   r^  rd  r�   r   rL   rl  r   r   r)   rv   rw   r   r   r¤   r   r7   r=   r>   s   @r2   r{  r{  ù  sx  ø€ € € € € ð )?Ø*Xðð Ðð
ð ð ð ð ð,ð ,ð ,ð8ð 8ð 8ðNð N°c¸D±jð NÈBÌLð Nð Nð Nð Nð Nð Nð Øð .2Ø37Ø26Ø04Ø26Ø*.ð'
ð '
àÔ# dÑ*ð'
ð Ô)¨DÑ0ð'
ð Ô(¨4Ñ/ð	'
ð
 Ô&¨Ñ-ð'
ð Ô(¨4Ñ/ð'
ð Ô  4Ñ'ð'
ð Ð+Ô,ð'
ð 
�Ñ	ð'
ð '
ð '
ñ „^ñ Ôð'
ð '
ð '
ð '
ð '
r3   r{  c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚMobileBertOnlyNSPHeadc                 ó†   •— t          ¦   «                              ¦   «          t          j        |j        d¦  «        | _        d S r%  )r&   r'   r   rT   rK   r&  r”   s     €r2   r'   zMobileBertOnlyNSPHead.__init__D  s6   ø€ Ý‰Œ×ÒÑÔÐÝ "¤	¨&Ô*<¸aÑ @Ô @ˆÔÐÐr3   r  r5   c                 ó0   — |                       |¦  «        }|S r%   )r&  )r.   r  r(  s      r2   r7   zMobileBertOnlyNSPHead.forwardH  s   € Ø!%×!6Ò!6°}Ñ!EÔ!EÐØ%Ð%r3   r8   r>   s   @r2   r†  r†  C  sc   ø€ € € € € ðAð Að Að Að Að& U¤\ð &°e´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	          |¦  «        | _        |                      ¦   «          d S r%   )r&   r'   rC  r+  r†  r[  rH  r”   s     €r2   r'   z,MobileBertForNextSentencePrediction.__init__S  sQ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å)¨&Ñ1Ô1ˆŒÝ(¨Ñ0Ô0ˆŒð 	�ŠÑÔÐÐÐr3   Nrb   r{   rc   rE   rd   rn  r}   r5   c           	      ó(  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }
d}|�At          ¦   «         } ||
                     dd¦  «        |                     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
        ```Trq  r    NrG   rj   r‚  )r+  r[  r   rš   r   r­   r,  )r.   rb   r{   rc   rE   rd   rn  r}   rs  r  r(  rw  ru  s                r2   r7   z+MobileBertForNextSentencePrediction.forward\  sÉ   € ðL "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆØ!%§¢¨-Ñ!8Ô!8Ðà!ÐØÐÝ'Ñ)Ô)ˆHØ!) Ð*@×*EÒ*EÀbÈ!Ñ*LÔ*LÈfÏkÊkÐZ\ÉoÌ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                 ód  •— t          ¦   «                              |¦  «         |j        | _        || _        t	          |¦  «        | _        |j        �|j        n|j        }t          j	        |¦  «        | _
        t          j        |j        |j        ¦  «        | _        |                      ¦   «          d S r%   )r&   r'   Ú
num_labelsr_   rC  r+  Úclassifier_dropoutrZ   r   rY   r[   rT   rK   Ú
classifierrH  ©r.   r_   r‘  r1   s      €r2   r'   z,MobileBertForSequenceClassification.__init__¤  sœ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒØˆŒå)¨&Ñ1Ô1ˆŒà)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr3   Nrb   r{   rc   rE   rd   rn  r}   r5   c           	      ó†  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|��Z| j        j        €f| j        dk    rd| j        _        nN| j        dk    r7|j        t          j        k    s|j        t          j	        k    rd| j        _        nd| j        _        | j        j        dk    rWt          ¦   «         }| j        dk    r1 ||
                     ¦   «         |                     ¦   «         ¦  «        }nŽ ||
|¦  «        }n�| j        j        dk    rGt          ¦   «         } ||
                     d| j        ¦  «        |                     d¦  «        ¦  «        }n*| j        j        dk    rt          ¦   «         } ||
|¦  «        }t          ||
|j        |j        ¬	¦  «        S )
a�  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Trq  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   rn  r}   rs  r  rƒ  r?  ru  s                r2   r7   z+MobileBertForSequenceClassification.forward³  sÛ  € ð$ "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆàˆØÑØŒ{Ô'Ð/Ø”? aÒ'Ð'Ø/;�D”KÔ,Ð,Ø”_ qÒ(Ð(¨f¬l½e¼jÒ.HÐ.HÈFÌLÕ\aÔ\eÒLeÐLeØ/L�D”KÔ,Ð,à/K�D”KÔ,àŒ{Ô'¨<Ò7Ð7Ý"™9œ9�Ø”? aÒ'Ð'Ø#˜8 F§N¢NÑ$4Ô$4°f·n²nÑ6FÔ6FÑGÔG�D�Dà#˜8 F¨FÑ3Ô3�D�DØ”Ô)Ð-JÒJÐJÝ+Ñ-Ô-�Ø�x §¢¨B°´Ñ @Ô @À&Ç+Â+ÈbÁ/Ä/ÑRÔR��Ø”Ô)Ð-IÒIÐIÝ,Ñ.Ô.�Ø�x ¨Ñ/Ô/�å'ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
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 TÑ)ð;
ð ”| dÑ*ð;
ð ”˜tÑ#ð;
ð Ð+Ô,ð;
ð 
ˆuŒ|Ô	Ð7Ñ	7ð;
ð ;
ð ;
ñ „^ñ Ôð;
ð ;
ð ;
ð ;
ð ;
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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        ¦  «        | _        |  	                    ¦   «          d S r}  )
r&   r'   r�  rC  r+  r   rT   rK   Ú
qa_outputsrH  r”   s     €r2   r'   z'MobileBertForQuestionAnswering.__init__ö  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå)¨&ÀEÐJÑJÔJˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr3   Nrb   r{   rc   rE   rd   Ústart_positionsÚend_positionsr}   r5   c           	      óF  —  | j         |f||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }|                     dd¬¦  «        \  }}|                     d¦  «                             ¦   «         }|                     d¦  «                             ¦   «         }d }|�ç|�åt          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }t          |                     ¦   «         ¦  «        dk    r|                     d¦  «        }|                     d¦  «        }|                     d|¦  «        }|                     d|¦  «        }t          |¬¦  «        } |||¦  «        } |||¦  «        }||z   dz  }t          ||||	j
        |	j        ¬	¦  «        S )
NTrq  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}   rs  r  rƒ  r¢  r£  rt  Úignored_indexru  Ú
start_lossÚend_losss                      r2   r7   z&MobileBertForQuestionAnswering.forward   sÏ  € ð "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð " !œ*ˆà—’ Ñ1Ô1ˆØ#)§<¢<°°r <Ñ#:Ô#:Ñ ˆ�jØ#×+Ò+¨BÑ/Ô/×:Ò:Ñ<Ô<ˆØ×'Ò'¨Ñ+Ô+×6Ò6Ñ8Ô8ˆ
àˆ
ØÐ&¨=Ð+Då�?×'Ò'Ñ)Ô)Ñ*Ô*¨QÒ.Ð.Ø"1×"9Ò"9¸"Ñ"=Ô"=�Ý�=×%Ò%Ñ'Ô'Ñ(Ô(¨1Ò,Ð,Ø -× 5Ò 5°bÑ 9Ô 9�à(×-Ò-¨aÑ0Ô0ˆMØ-×3Ò3°A°}ÑEÔEˆOØ)×/Ò/°°=ÑAÔAˆMå'°]ÐCÑCÔCˆHØ!˜ ,°Ñ@Ô@ˆJØ�x 
¨MÑ:Ô:ˆHØ$ xÑ/°1Ñ4ˆJå+ØØ%Ø!Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r3   rx  )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
à”< $Ñ&ð3
ð œ tÑ+ð3
ð œ tÑ+ð	3
ð
 ”l TÑ)ð3
ð ”| dÑ*ð3
ð œ¨Ñ,ð3
ð ”| dÑ*ð3
ð Ð+Ô,ð3
ð 
ˆuŒ|Ô	Ð;Ñ	;ð3
ð 3
ð 3
ñ „^ñ Ôð3
ð 3
ð 3
ð 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                 ó4  •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _        t          j	        |j
        d¦  «        | _        |                      ¦   «          d S )Nr    )r&   r'   rC  r+  r‘  rZ   r   rY   r[   rT   rK   r’  rH  r“  s      €r2   r'   z$MobileBertForMultipleChoice.__init__;  sˆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å)¨&Ñ1Ô1ˆŒà)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ñ:Ô:ˆŒð 	�ŠÑÔÐÐÐr3   Nrb   r{   rc   rE   rd   rn  r}   r5   c           	      óR  — |�|j         d         n|j         d         }|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�)|                     d|                     d¦  «        ¦  «        nd}|�=|                     d|                     d¦  «        |                     d¦  «        ¦  «        nd} | j        |f||||ddœ|¤Ž}	|	d         }
|                      |
¦  «        }
|                      |
¦  «        }|                     d|¦  «        }d}|�t          ¦   «         } |||¦  «        }t          |||	j        |	j	        ¬¦  «        S )a[  
        input_ids (`torch.LongTensor` of shape `(batch_size, num_choices, sequence_length)`):
            Indices of input sequence tokens in the vocabulary.

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

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

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

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

            [What are position IDs?](../glossary#position-ids)
        inputs_embeds (`torch.FloatTensor` of shape `(batch_size, num_choices, sequence_length, hidden_size)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
            model's internal embedding lookup matrix.
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
            num_choices-1]` where `num_choices` is the size of the second dimension of the input tensors. (See
            `input_ids` above)
        Nr    rG   éþÿÿÿTrq  r‚  )
r™   rš   rm   r+  r[   r’  r   r   r­   r,  )r.   rb   r{   rc   rE   rd   rn  r}   Únum_choicesrs  r  rƒ  Úreshaped_logitsr?  ru  s                  r2   r7   z#MobileBertForMultipleChoice.forwardH  sé  € ðT -6Ð,A�i”o aÔ(Ð(À}ÔGZÐ[\ÔG]ˆà>GÐ>S�I—N’N 2 y§~¢~°bÑ'9Ô'9Ñ:Ô:Ð:ÐY]ˆ	ØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØM[ÐMg˜×,Ò,¨R°×1DÒ1DÀRÑ1HÔ1HÑIÔIÐIÐmqˆØGSÐG_�|×(Ò(¨¨\×->Ò->¸rÑ-BÔ-BÑCÔCÐCÐeiˆð Ð(ð ×Ò˜r =×#5Ò#5°bÑ#9Ô#9¸=×;MÒ;MÈbÑ;QÔ;QÑRÔRÐRàð 	ð "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð   œ
ˆàŸš ]Ñ3Ô3ˆØ—’ Ñ/Ô/ˆØ Ÿ+š+ b¨+Ñ6Ô6ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜O¨VÑ4Ô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
à”< $Ñ&ðN
ð œ tÑ+ðN
ð œ tÑ+ð	N
ð
 ”l TÑ)ðN
ð ”| dÑ*ðN
ð ”˜tÑ#ðN
ð Ð+Ô,ðN
ð 
ˆuŒ|Ô	Ð8Ñ	8ðN
ð N
ð N
ñ „^ñ ÔðN
ð N
ð N
ð 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                 óZ  •— t          ¦   «                              |¦  «         |j        | _        t          |d¬¦  «        | _        |j        �|j        n|j        }t          j        |¦  «        | _	        t          j
        |j        |j        ¦  «        | _        |                      ¦   «          d S r}  )r&   r'   r�  rC  r+  r‘  rZ   r   rY   r[   rT   rK   r’  rH  r“  s      €r2   r'   z)MobileBertForTokenClassification.__init__ž  sš   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø Ô+ˆŒå)¨&ÀEÐJÑJÔJˆŒà)/Ô)BÐ)NˆFÔ%Ð%ÐTZÔTnð 	õ ”zÐ"4Ñ5Ô5ˆŒÝœ) FÔ$6¸Ô8IÑJÔJˆŒð 	�ŠÑÔÐÐÐr3   Nrb   r{   rc   rE   rd   rn  r}   r5   c           	      ó\  —  | j         |f||||ddœ|¤Ž}|d         }	|                      |	¦  «        }	|                      |	¦  «        }
d}|�Ft          ¦   «         } ||
                     d| j        ¦  «        |                     d¦  «        ¦  «        }t          ||
|j        |j        ¬¦  «        S )zÛ
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        Trq  r   NrG   r‚  )	r+  r[   r’  r   rš   r�  r   r­   r,  )r.   rb   r{   rc   rE   rd   rn  r}   rs  r  rƒ  r?  ru  s                r2   r7   z(MobileBertForTokenClassification.forward¬  sÔ   € ð  "�$”/Øð
à)Ø)Ø%Ø'Øð
ð 
ð ð
ð 
ˆð " !œ*ˆàŸ,š, Ñ7Ô7ˆØ—’ Ñ1Ô1ˆàˆØÐÝ'Ñ)Ô)ˆHØ�8˜FŸKšK¨¨D¬OÑ<Ô<¸f¿kºkÈ"¹o¼oÑNÔ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 TÑ)ð'
ð ”| dÑ*ð'
ð ”˜tÑ#ð'
ð Ð+Ô,ð'
ð 
ˆuŒ|Ô	Ð4Ñ	4ð'
ð '
ð '
ñ „^ñ Ôð'
ð '
ð '
ð '
ð '
r3   r²  )
r{  r«  rŠ  rV  r›  rŽ  r²  rì   rC  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>  rC  rV  r{  r†  rŠ  rŽ  r›  r«  r²  Ú__all__rï   r3   r2   ú<module>rÈ     sÄ  ðð. %Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð GÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6ð 
ˆÔ	˜HÑ	%Ô	%€ð6ð 6ð 6ð 6ð 6ˆRŒYñ 6ô 6ð 6ð œ°&Ð
9Ð
9€ðIð Ið Ið Ið I˜2œ9ñ Iô Ið Iðf !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð81)ð 1)ð 1)ð 1)ð 1)˜bœiñ 1)ô 1)ð 1)ðhð ð ð ð ˜2œ9ñ ô ð ð".ð .ð .ð .ð .˜"œ)ñ .ô .ð .ð8ð ð ð ð ˜RœYñ ô ð ðð ð ð ð �r”yñ ô ð ðð ð ð ð �r”yñ ô ð ð0	ð 	ð 	ð 	ð 	�b”iñ 	ô 	ð 	ð!]ð !]ð !]ð !]ð !]�”ñ !]ô !]ð !]ðH	ð 	ð 	ð 	ð 	�”	ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆrŒyñ 	ô 	ð 	ð)ð )ð )ð )ð )Ð0ñ )ô )ð )ðX@ð @ð @ð @ð @˜œ	ñ @ô @ð @ð(!ð !ð !ð !ð !�r”yñ !ô !ð !ð&ð ð ð ð ¨¬	ñ ô ð ð"ð ð ð ð  ¤ñ ô ð ð"!ð !ð !ð !ð !˜BœIñ !ô !ð !ð	9ð 	9ð 	9ð 	9ð 	9 ¤ñ 	9ô 	9ð 	9ð ðið ið ið ið i ñ iô iñ „ðið4 €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 [ñ 7ô 7ñ „ñô ð7ð& ðC
ð C
ð C
ð C
ð C
Ð/ñ C
ô C
ñ „ðC
ðL €ððñ ô ð_
ð _
ð _
ð _
ð _
Ð8ñ _
ô _
ñô ð_
ðD ðF
ð F
ð F
ð F
ð F
Ð5ñ F
ô F
ñ „ðF
ðR&ð &ð &ð &ð &˜BœIñ &ô &ð &ð €ððñ ô ð
G
ð G
ð G
ð G
ð G
Ð*Cñ G
ô G
ñô ð
G
ðT €ððñ ô ðM
ð M
ð M
ð M
ð M
Ð*Cñ M
ô M
ñô ðM
ð` ð@
ð @
ð @
ð @
ð @
Ð%>ñ @
ô @
ñ „ð@
ðF ð^
ð ^
ð ^
ð ^
ð ^
Ð";ñ ^
ô ^
ñ „ð^
ðB ð8
ð 8
ð 8
ð 8
ð 8
Ð'@ñ 8
ô 8
ñ „ð8
ðvð ð €€€r3   