Ë
    T^(h”H ã                  óR  — d 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
Zddl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mZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2  e/jf                  e4«      Z5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZB G d„ d«      ZC G d„ de#jˆ                  jŠ                  «      ZF G d„ d e#jˆ                  jŽ                  «      ZH G d!„ d"e#jˆ                  jŠ                  «      ZIeHeId#œZJ G d$„ d%e#jˆ                  jŠ                  «      ZK G d&„ d'e#jˆ                  jŠ                  «      ZL G d(„ d)e#jˆ                  jŠ                  «      ZM G d*„ d+e#jˆ                  jŠ                  «      ZN G d,„ d-e#jˆ                  jŠ                  «      ZO G d.„ d/e#jˆ                  jŠ                  «      ZP G d0„ d1e#jˆ                  jŠ                  «      ZQ G d2„ d3e#jˆ                  jŠ                  «      ZR G d4„ d5e#jˆ                  jŠ                  «      ZS G d6„ d7e#jˆ                  jŠ                  «      ZT G d8„ d9e#jˆ                  jŠ                  «      ZU G d:„ d;e#jˆ                  jŠ                  «      ZV G d<„ d=e#jˆ                  jŠ                  «      ZW G d>„ d?e#jˆ                  jŠ                  «      ZX G d@„ dAe#jˆ                  jŠ                  «      ZY G dB„ dCe#jˆ                  jŠ                  «      ZZe$ G dD„ dEe#jˆ                  jŠ                  «      «       Z[ G dF„ dGe«      Z\e G dH„ dIe+«      «       Z]dJZ^dKZ_ e-dLe^«       G dM„ dNe\«      «       Z` e-dOe^«       G dP„ dQe\eC«      «       Za e-dRe^«       G dS„ dTe\e«      «       Zb G dU„ dVe#jˆ                  jŠ                  «      Zc e-dWe^«       G dX„ dYe\e«      «       Zd e-dZe^«       G d[„ d\e\e «      «       Ze e-d]e^«       G d^„ d_e\e«      «       Zf e-d`e^«       G da„ dbe\e«      «       Zg e-dce^«       G dd„ dee\e!«      «       Zhg df¢Ziy)gzTF 2.0 MobileBERT model.é    )ÚannotationsN)Ú	dataclass)ÚOptionalÚTupleÚUnioné   )Úget_tf_activation)ÚTFBaseModelOutputÚTFBaseModelOutputWithPoolingÚTFMaskedLMOutputÚTFMultipleChoiceModelOutputÚTFNextSentencePredictorOutputÚTFQuestionAnsweringModelOutputÚTFSequenceClassifierOutputÚTFTokenClassifierOutput)ÚTFMaskedLanguageModelingLossÚTFModelInputTypeÚTFMultipleChoiceLossÚTFNextSentencePredictionLossÚTFPreTrainedModelÚTFQuestionAnsweringLossÚTFSequenceClassificationLossÚTFTokenClassificationLossÚget_initializerÚkerasÚkeras_serializableÚunpack_inputs)Úcheck_embeddings_within_boundsÚ
shape_listÚstable_softmax)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )ÚMobileBertConfigzgoogle/mobilebert-uncasedr(   z"vumichien/mobilebert-finetuned-nerzK['I-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'I-LOC', 'O', 'I-LOC', 'I-LOC']g¸…ëQ¸ž?z%vumichien/mobilebert-uncased-squad-v2z'a nice puppet'g×£p=
×@é   é   zvumichien/emo-mobilebertz'others'z4.72c                  ó   — e Zd ZdZdd„Zy)ÚTFMobileBertPreTrainingLosszø
    Loss function suitable for BERT-like pretraining, that is, the task of pretraining a language model by combining
    NSP + MLM. .. note:: Any label of -100 will be ignored (along with the corresponding logits) in the loss
    computation.
    c                óÊ  — t         j                  j                  dt         j                  j                  j                  ¬«      } |t
        j                  j                  |d   «      |d   ¬«      }t        j                  |d   dk7  |j                  ¬«      }||z  }t        j                  |«      t        j                  |«      z  } |t
        j                  j                  |d   «      |d	   ¬«      }t        j                  |d   dk7  |j                  ¬«      }	||	z  }
t        j                  |
«      t        j                  |	«      z  }t        j                  ||z   d
«      S )NT)Úfrom_logitsÚ	reductionÚlabelsr   )Úy_trueÚy_prediœÿÿÿ©ÚdtypeÚnext_sentence_labelr'   )r'   )r   ÚlossesÚSparseCategoricalCrossentropyÚ	ReductionÚNONEÚtfÚnnÚreluÚcastr4   Ú
reduce_sumÚreshape)Úselfr0   ÚlogitsÚloss_fnÚunmasked_lm_lossesÚlm_loss_maskÚmasked_lm_lossesÚreduced_masked_lm_lossÚunmasked_ns_lossÚns_loss_maskÚmasked_ns_lossÚreduced_masked_ns_losss               ús/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/mobilebert/modeling_tf_mobilebert.pyÚhf_compute_lossz+TFMobileBertPreTrainingLoss.hf_compute_loss_   s-  € Ü—,‘,×<Ñ<ÈÔY^×YeÑYe×YoÑYo×YtÑYtÐ<Óuˆñ %¬B¯E©E¯J©J°v¸hÑ7GÓ,HÐQWÐXYÑQZÔ[Ðô —w‘w˜v hÑ/°4Ñ7Ð?Q×?WÑ?WÔXˆØ-°Ñ<ÐÜ!#§¡Ð/?Ó!@Ä2Ç=Á=ÐQ]ÓC^Ñ!^Ðñ #¬"¯%©%¯*©*°VÐ<QÑ5RÓ*SÐ\bÐcdÑ\eÔfÐÜ—w‘w˜vÐ&;Ñ<ÀÑDÐL\×LbÑLbÔcˆØ)¨LÑ8ˆä!#§¡¨~Ó!>ÄÇÁÈ|ÓA\Ñ!\Ðä�z‰zÐ0Ð3IÑIÈ4ÓPÐPó    N)r0   ú	tf.TensorrA   rN   ÚreturnrN   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   © rM   rK   r,   r,   X   s   „ ñôQrM   r,   c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFMobileBertIntermediatec                ó,  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  d¬«      | _        t        |j                  t        «      r"t        |j                  «      | _        || _        y |j                  | _        || _        y )NÚdense©ÚnamerT   )ÚsuperÚ__init__r   ÚlayersÚDenseÚintermediate_sizerX   Ú
isinstanceÚ
hidden_actÚstrr	   Úintermediate_act_fnÚconfig©r@   rd   ÚkwargsÚ	__class__s      €rK   r\   z!TFMobileBertIntermediate.__init__u   sw   ø€ Ü‰ÑÑ"˜6Ò"ä—\‘\×'Ñ'¨×(@Ñ(@ÀwÐ'ÓOˆŒ
ä�f×'Ñ'¬Ô-Ü'8¸×9JÑ9JÓ'KˆDÔ$ð ˆ�ð (.×'8Ñ'8ˆDÔ$Øˆ�rM   c                óJ   — | j                  |«      }| j                  |«      }|S ©N)rX   rc   ©r@   Úhidden_statess     rK   ÚcallzTFMobileBertIntermediate.call€   s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆàÐrM   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY w©NTrX   )	ÚbuiltÚgetattrr:   Ú
name_scoperX   rZ   Úbuildrd   Útrue_hidden_size©r@   Úinput_shapes     rK   rr   zTFMobileBertIntermediate.build†   s}   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ MØ—
‘
× Ñ  $¨¨d¯k©k×.JÑ.JÐ!KÔL÷Mð Mð 4÷Mð Múó   Á3BÂBri   ©rP   rQ   rR   r\   rl   rr   Ú__classcell__©rg   s   @rK   rV   rV   t   s   ø„ ô	ò÷MrM   rV   c                  ó*   ‡ — e Zd Zˆ fd„Zdˆ fd„	Zˆ xZS )ÚTFLayerNormc                ó2   •— || _         t        ‰| �  |i |¤Ž y ri   )Ú	feat_sizer[   r\   )r@   r}   Úargsrf   rg   s       €rK   r\   zTFLayerNorm.__init__�   s   ø€ Ø"ˆŒÜ‰Ñ˜$Ð) &Ó)rM   c                ó>   •— t         ‰| �  d d | j                  g«       y ri   )r[   rr   r}   ©r@   ru   rg   s     €rK   rr   zTFLayerNorm.build”   s   ø€ Ü‰‰�t˜T 4§>¡>Ð2Õ3rM   ri   )rP   rQ   rR   r\   rr   rx   ry   s   @rK   r{   r{   �   s   ø„ ô*÷4ñ 4rM   r{   c                  ó2   ‡ — e Zd Zdˆ fd„	Zˆ fd„Zdd„Zˆ xZS )ÚTFNoNormc                ó2   •— t        ‰| �  di |¤Ž || _        y )NrT   )r[   r\   r}   )r@   r}   Úepsilonrf   rg   s       €rK   r\   zTFNoNorm.__init__™   s   ø€ Ü‰ÑÑ"˜6Ò"Ø"ˆ�rM   c                ó´   •— | j                  d| j                  gd¬«      | _        | j                  d| j                  gd¬«      | _        t        ‰| �  |«       y )NÚbiasÚzeros)ÚshapeÚinitializerÚweightÚones)Ú
add_weightr}   r†   rŠ   r[   rr   r€   s     €rK   rr   zTFNoNorm.build�   sK   ø€ Ø—O‘O F°4·>±>Ð2BÐPW�OÓXˆŒ	Ø—o‘o h°t·~±~Ð6FÐTZ�oÓ[ˆŒÜ‰‰�kÕ"rM   c                ó:   — || j                   z  | j                  z   S ri   )rŠ   r†   )r@   Úinputss     rK   rl   zTFNoNorm.call¢   s   € Ø˜Ÿ™Ñ# d§i¡iÑ/Ð/rM   ri   )rŽ   rN   )rP   rQ   rR   r\   rr   rl   rx   ry   s   @rK   r‚   r‚   ˜   s   ø„ õ#ô#÷
0rM   r‚   )Ú
layer_normÚno_normc                  ó2   ‡ — e Zd ZdZˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFMobileBertEmbeddingszGConstruct the embeddings from word, position and token_type embeddings.c                óV  •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        || _        |j
                  | _        |j                  | _        |j                  | _        t        j                  j                  |j
                  d¬«      | _        t        |j                     |j
                  |j                  d¬«      | _        t        j                  j!                  |j"                  ¬«      | _        | j                  | j                  r
dz  | _        y dz  | _        y )	NÚembedding_transformationrY   Ú	LayerNorm©r„   rZ   )Úrater   r'   rT   )r[   r\   Útrigram_inputÚembedding_sizerd   Úhidden_sizeÚmax_position_embeddingsÚinitializer_ranger   r]   r^   r”   ÚNORM2FNÚnormalization_typeÚlayer_norm_epsr•   ÚDropoutÚhidden_dropout_probÚdropoutÚembedded_input_sizere   s      €rK   r\   zTFMobileBertEmbeddings.__init__¬   sö   ø€ Ü‰ÑÑ"˜6Ò"à#×1Ñ1ˆÔØ$×3Ñ3ˆÔØˆŒØ!×-Ñ-ˆÔØ'-×'EÑ'EˆÔ$Ø!'×!9Ñ!9ˆÔÜ(-¯©×(:Ñ(:¸6×;MÑ;MÐTnÐ(:Ó(oˆÔ%ô ! ×!:Ñ!:Ñ;Ø×Ñ¨×(=Ñ(=ÀKô
ˆŒô —|‘|×+Ñ+°×1KÑ1KÐ+ÓLˆŒØ#'×#6Ñ#6¸t×?QÒ?Q¸!Ñ#YˆÕ ÐWXÑ#YˆÕ rM   c                óš  — t        j                  d«      5  | j                  d| j                  j                  | j
                  gt        | j                  ¬«      ¬«      | _        d d d «       t        j                  d«      5  | j                  d| j                  j                  | j                  gt        | j                  ¬«      ¬«      | _        d d d «       t        j                  d«      5  | j                  d| j                  | j                  gt        | j                  ¬«      ¬«      | _        d d d «       | j                  ry d| _        t        | d	d «      �Zt        j                  | j                   j"                  «      5  | j                   j%                  d d | j&                  g«       d d d «       t        | d
d «      �Nt        j                  | j(                  j"                  «      5  | j(                  j%                  d «       d d d «       y y # 1 sw Y   �Œ­xY w# 1 sw Y   �ŒOxY w# 1 sw Y   ŒúxY w# 1 sw Y   Œ‹xY w# 1 sw Y   y xY w)NÚword_embeddingsrŠ   )rœ   )rZ   rˆ   r‰   Útoken_type_embeddingsÚ
embeddingsÚposition_embeddingsTr”   r•   )r:   rq   rŒ   rd   Ú
vocab_sizer™   r   rœ   rŠ   Útype_vocab_sizerš   r¦   r›   r¨   ro   rp   r”   rZ   rr   r£   r•   rt   s     rK   rr   zTFMobileBertEmbeddings.build¿   sï  € Ü�]‰]Ð,Ó-ñ 	ØŸ/™/ØØ—{‘{×-Ñ-¨t×/BÑ/BÐCÜ+¸d×>TÑ>TÔUð *ó ˆDŒK÷	ô �]‰]Ð2Ó3ñ 	Ø)-¯©Ø!Ø—{‘{×2Ñ2°D×4DÑ4DÐEÜ+¸d×>TÑ>TÔUð *9ó *ˆDÔ&÷	ô �]‰]Ð0Ó1ñ 	Ø'+§¡Ø!Ø×3Ñ3°T×5EÑ5EÐFÜ+¸d×>TÑ>TÔUð (7ó (ˆDÔ$÷	ð �:Š:ØØˆŒ
Ü�4Ð3°TÓ:ÐFÜ—‘˜t×<Ñ<×AÑAÓBñ \Ø×-Ñ-×3Ñ3°T¸4À×AYÑAYÐ4ZÔ[÷\ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷7	ñ 	ú÷	ñ 	ú÷	ð 	ú÷\ð \ú÷+ð +ús>   –AHÂAHÃ,AH)Æ)H5Ç)IÈHÈH&È)H2È5H>ÉI
c           
     óR  — |€|€J ‚|�At        || j                  j                  «       t        j                  | j
                  |¬«      }t        |«      dd }|€t        j                  |d¬«      }| j                  rTt        j                  t        j                  |dd…dd…f   d«      |t        j                  |dd…dd…f   d«      gd	¬
«      }| j                  s| j                  | j                  k7  r| j                  |«      }|€/t        j                  t        j                  d|d   ¬«      d¬
«      }t        j                  | j                   |¬«      }t        j                  | j"                  |¬«      }||z   |z   }	| j%                  |	¬«      }	| j'                  |	|¬«      }	|	S )z’
        Applies embedding based on inputs tensor.

        Returns:
            final_embeddings (`tf.Tensor`): output embedding tensor.
        N)ÚparamsÚindiceséÿÿÿÿr   )ÚdimsÚvaluer'   )©r   r   )r   r'   r±   )r±   )r'   r   r±   é   ©Úaxis)ÚstartÚlimit)rŽ   )rŽ   Útraining)r   rd   r©   r:   ÚgatherrŠ   r   Úfillr˜   ÚconcatÚpadr™   rš   r”   Úexpand_dimsÚranger¨   r¦   r•   r¢   )
r@   Ú	input_idsÚposition_idsÚtoken_type_idsÚinputs_embedsr·   ru   Úposition_embedsÚtoken_type_embedsÚfinal_embeddingss
             rK   rl   zTFMobileBertEmbeddings.callß   s…  € ð Ð%¨-Ð*?Ð@Ð@àÐ Ü*¨9°d·k±k×6LÑ6LÔMÜŸI™I¨T¯[©[À)ÔLˆMä  Ó/°°Ð4ˆàÐ!ÜŸW™W¨+¸QÔ?ˆNà×Òô ŸI™Iä—F‘F˜=ª¨A©B¨Ñ/Ð1IÓJØ!Ü—F‘F˜=ª¨C¨R¨C¨Ñ0Ð2JÓKðð
 ôˆMð ×Ò ×!4Ñ!4¸×8HÑ8HÒ!HØ ×9Ñ9¸-ÓHˆMàÐÜŸ>™>¬"¯(©(¸À+ÈbÁ/Ô*RÐYZÔ[ˆLäŸ)™)¨4×+CÑ+CÈ\ÔZˆÜŸI™I¨T×-GÑ-GÐQ_Ô`ÐØ(¨?Ñ:Ð=NÑNÐØŸ>™>Ð1A˜>ÓBÐØŸ<™<Ð/?È(˜<ÓSÐàÐrM   ri   )NNNNF)rP   rQ   rR   rS   r\   rr   rl   rx   ry   s   @rK   r’   r’   ©   s   ø„ ÙQôZó&+÷@/ rM   r’   c                  ó6   ‡ — e Zd Zˆ fd„Zd„ Z	 dd„Zdd„Zˆ xZS )ÚTFMobileBertSelfAttentionc                ó²  •— t        ‰| �  di |¤Ž |j                  |j                  z  dk7  r%t	        d|j                  › d|j                  › �«      ‚|j                  | _        |j
                  | _        |j                  |j                  z  dk(  sJ ‚t        |j                  |j                  z  «      | _        | j                  | j                  z  | _	        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j                  | j                  t        |j                  «      d¬«      | _        t        j                  j%                  |j&                  «      | _        || _        y )	Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (Úquery©Úkernel_initializerrZ   Úkeyr°   rT   )r[   r\   rš   Únum_attention_headsÚ
ValueErrorÚoutput_attentionsÚintrs   Úattention_head_sizeÚall_head_sizer   r]   r^   r   rœ   rÈ   rË   r°   r    Úattention_probs_dropout_probr¢   rd   re   s      €rK   r\   z"TFMobileBertSelfAttention.__init__  s–  ø€ Ü‰ÑÑ"˜6Ò"Ø×Ñ × :Ñ :Ñ:¸aÒ?ÜØ# F×$6Ñ$6Ð#7ð 8Ø ×4Ñ4Ð5ð7óð ð
 $*×#=Ñ#=ˆÔ Ø!'×!9Ñ!9ˆÔØ×!Ñ! F×$>Ñ$>Ñ>À!ÒCÐCÐCÜ#& v×'>Ñ'>À×A[ÑA[Ñ'[Ó#\ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔä—\‘\×'Ñ'Ø×Ñ´?À6×C[ÑC[Ó3\Ðcjð (ó 
ˆŒ
ô —<‘<×%Ñ%Ø×Ñ´?À6×C[ÑC[Ó3\Ðchð &ó 
ˆŒô —\‘\×'Ñ'Ø×Ñ´?À6×C[ÑC[Ó3\Ðcjð (ó 
ˆŒ
ô —|‘|×+Ñ+¨F×,OÑ,OÓPˆŒØˆ�rM   c                ó�   — t        j                  ||d| j                  | j                  f«      }t        j                  |g d¢¬«      S )Nr®   ©r   r²   r'   r   ©Úperm)r:   r?   rÌ   rÐ   Ú	transpose)r@   ÚxÚ
batch_sizes      rK   Útranspose_for_scoresz.TFMobileBertSelfAttention.transpose_for_scores-  s8   € ä�J‰J�q˜: r¨4×+CÑ+CÀT×E]ÑE]Ð^Ó_ˆÜ�|‰|˜A¢LÔ1Ð1rM   c                ó  — t        |«      d   }| j                  |«      }	| j                  |«      }
| j                  |«      }| j	                  |	|«      }| j	                  |
|«      }| j	                  ||«      }t        j                  ||d¬«      }t        j                  t        |«      d   |j                  ¬«      }|t
        j                  j                  |«      z  }|�&t        j                  ||j                  ¬«      }||z   }t        |d¬«      }| j                  ||¬«      }|�||z  }t        j                  ||«      }t        j                  |g d¢¬	«      }t        j                  ||d| j                  f«      }|r||f}|S |f}|S )
Nr   T)Útranspose_br®   r3   r³   ©r·   rÔ   rÕ   )r   rÈ   rË   r°   rÚ   r:   Úmatmulr=   r4   ÚmathÚsqrtr    r¢   r×   r?   rÑ   )r@   Úquery_tensorÚ
key_tensorÚvalue_tensorÚattention_maskÚ	head_maskrÎ   r·   rÙ   Úmixed_query_layerÚmixed_key_layerÚmixed_value_layerÚquery_layerÚ	key_layerÚvalue_layerÚattention_scoresÚdkÚattention_probsÚcontext_layerÚoutputss                       rK   rl   zTFMobileBertSelfAttention.call2  sŒ  € ô   Ó/°Ñ2ˆ
Ø ŸJ™J |Ó4ÐØŸ(™( :Ó.ˆØ ŸJ™J |Ó4ÐØ×/Ñ/Ð0AÀ:ÓNˆØ×-Ñ-¨o¸zÓJˆ	Ø×/Ñ/Ð0AÀ:ÓNˆô Ÿ9™9Ø˜°ô
Ðô �W‰W”Z 	Ó*¨2Ñ.Ð6F×6LÑ6LÔMˆØ+¬b¯g©g¯l©l¸2Ó.>Ñ>ÐàÐ%äŸW™W ^Ð;K×;QÑ;QÔRˆNØ/°.Ñ@Ðô )Ð)9ÀÔCˆð Ÿ,™, À˜,ÓJˆð Ð Ø-°	Ñ9ˆOäŸ	™	 /°;Ó?ˆäŸ™ ]ºÔFˆÜŸ
™
Ø˜J¨¨D×,>Ñ,>Ð?ó
ˆñ 7H�= /Ð2ˆàˆð O\ÐM]ˆàˆrM   c                óv  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �‘t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  r| j                  j                  n| j                  j                  g«       d d d «       y y # 1 sw Y   �ŒxY w# 1 sw Y   ŒµxY w# 1 sw Y   y xY w)NTrÈ   rË   r°   )ro   rp   r:   rq   rÈ   rZ   rr   rd   rs   rË   r°   Úuse_bottleneck_attentionrš   rt   s     rK   rr   zTFMobileBertSelfAttention.build_  sW  € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ MØ—
‘
× Ñ  $¨¨d¯k©k×.JÑ.JÐ!KÔL÷Mä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ KØ—‘—‘  d¨D¯K©K×,HÑ,HÐIÔJ÷Kä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 	Ø—
‘
× Ñ àØàŸ;™;×?Ò?ð Ÿ™×4Ò4à!Ÿ[™[×4Ñ4ðô÷	ð 	ð 4÷Mñ Mú÷Kð Kú÷	ð 	ús%   Á3FÂ<3F#Ä-AF/ÆF Æ#F,Æ/F8©Fri   )rP   rQ   rR   r\   rÚ   rl   rr   rx   ry   s   @rK   rÆ   rÆ     s   ø„ ôò62ð nsó+÷ZrM   rÆ   c                  ó.   ‡ — e Zd Zˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFMobileBertSelfOutputc                ó¸  •— t        ‰| �  di |¤Ž |j                  | _        t        j                  j                  |j                  t        |j                  «      d¬«      | _	        t        |j                     |j                  |j                  d¬«      | _        | j                  s.t        j                  j                  |j                  «      | _        || _        y )NrX   rÉ   r•   r–   rT   )r[   r\   Úuse_bottleneckr   r]   r^   rs   r   rœ   rX   r�   rž   rŸ   r•   r    r¡   r¢   rd   re   s      €rK   r\   zTFMobileBertSelfOutput.__init__w  s¯   ø€ Ü‰ÑÑ"˜6Ò"Ø$×3Ñ3ˆÔÜ—\‘\×'Ñ'Ø×#Ñ#¼È×H`ÑH`Ó8aÐhoð (ó 
ˆŒ
ô ! ×!:Ñ!:Ñ;Ø×#Ñ#¨V×-BÑ-BÈô
ˆŒð ×"Ò"Ü Ÿ<™<×/Ñ/°×0JÑ0JÓKˆDŒLØˆ�rM   c                óŽ   — | j                  |«      }| j                  s| j                  ||¬«      }| j                  ||z   «      }|S ©NrÝ   )rX   r÷   r¢   r•   )r@   rk   Úresidual_tensorr·   s       rK   rl   zTFMobileBertSelfOutput.call„  sD   € ØŸ
™
 =Ó1ˆØ×"Ò"Ø ŸL™L¨À˜LÓJˆMØŸ™ }°Ñ'FÓGˆØÐrM   c                óô  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w©NTrX   r•   ©
ro   rp   r:   rq   rX   rZ   rr   rd   rs   r•   rt   s     rK   rr   zTFMobileBertSelfOutput.build‹  óÈ   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ MØ—
‘
× Ñ  $¨¨d¯k©k×.JÑ.JÐ!KÔL÷Mä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷Mð Mú÷+ð +úó   Á3C"Â<C.Ã"C+Ã.C7ró   ri   rw   ry   s   @rK   rõ   rõ   v  s   ø„ ôó÷	+rM   rõ   c                  ó6   ‡ — e Zd Zˆ fd„Zd„ Z	 dd„Zdd„Zˆ xZS )ÚTFMobileBertAttentionc                ól   •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        y )Nr@   rY   ÚoutputrT   )r[   r\   rÆ   r@   rõ   Úmobilebert_outputre   s      €rK   r\   zTFMobileBertAttention.__init__˜  s0   ø€ Ü‰ÑÑ"˜6Ò"Ü-¨f¸6ÔBˆŒ	Ü!7¸ÀXÔ!NˆÕrM   c                ó   — t         ‚ri   ©ÚNotImplementedError)r@   Úheadss     rK   Úprune_headsz!TFMobileBertAttention.prune_heads�  s   € Ü!Ð!rM   c	           	     óv   — | j                  |||||||¬«      }	| j                  |	d   ||¬«      }
|
f|	dd  z   }|S )NrÝ   r   r'   )r@   r  )r@   rá   râ   rã   Úlayer_inputrä   rå   rÎ   r·   Úself_outputsÚattention_outputrð   s               rK   rl   zTFMobileBertAttention.call   s`   € ð —y‘yØ˜* l°NÀIÐO`Ðksð !ó 
ˆð  ×1Ñ1°,¸q±/À;ÐYaÐ1ÓbÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆrM   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr@   r  )ro   rp   r:   rq   r@   rZ   rr   r  rt   s     rK   rr   zTFMobileBertAttention.build³  s·   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4Ð,¨dÓ3Ð?Ü—‘˜t×5Ñ5×:Ñ:Ó;ñ 3Ø×&Ñ&×,Ñ,¨TÔ2÷3ð 3ð @÷&ð &ú÷3ð 3úó   ÁCÂ%CÃCÃC ró   ri   )rP   rQ   rR   r\   r	  rl   rr   rx   ry   s   @rK   r  r  —  s   ø„ ôOò
"ð ó÷&	3rM   r  c                  ó.   ‡ — e Zd Zˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFOutputBottleneckc                óV  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  d¬«      | _        t        |j                     |j
                  |j                  d¬«      | _
        t        j                  j                  |j                  «      | _        || _        y ©NrX   rY   r•   r–   rT   )r[   r\   r   r]   r^   rš   rX   r�   rž   rŸ   r•   r    r¡   r¢   rd   re   s      €rK   r\   zTFOutputBottleneck.__init__À  sƒ   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¨×(:Ñ(:ÀÐ'ÓIˆŒ
Ü  ×!:Ñ!:Ñ;Ø×Ñ¨×(=Ñ(=ÀKô
ˆŒô —|‘|×+Ñ+¨F×,FÑ,FÓGˆŒØˆ�rM   c                óv   — | j                  |«      }| j                  ||¬«      }| j                  ||z   «      }|S rù   )rX   r¢   r•   )r@   rk   rú   r·   Úlayer_outputss        rK   rl   zTFOutputBottleneck.callÉ  s;   € ØŸ
™
 =Ó1ˆØŸ™ ]¸X˜ÓFˆØŸ™ }°Ñ'FÓGˆØÐrM   c                óô  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY wrü   rý   rt   s     rK   rr   zTFOutputBottleneck.buildÏ  rþ   rÿ   ró   ri   rw   ry   s   @rK   r  r  ¿  s   ø„ ôó÷	+rM   r  c                  ó.   ‡ — e Zd Zˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFMobileBertOutputc                óì  •— t        ‰| �  di |¤Ž |j                  | _        t        j                  j                  |j                  t        |j                  «      d¬«      | _	        t        |j                     |j                  |j                  d¬«      | _        | j                  s6t        j                  j                  |j                  «      | _        || _        y t#        |d¬«      | _        || _        y )NrX   rÉ   r•   r–   Ú
bottleneckrY   rT   )r[   r\   r÷   r   r]   r^   rs   r   rœ   rX   r�   rž   rŸ   r•   r    r¡   r¢   r  r  rd   re   s      €rK   r\   zTFMobileBertOutput.__init__Ü  sÈ   ø€ Ü‰ÑÑ"˜6Ò"Ø$×3Ñ3ˆÔÜ—\‘\×'Ñ'Ø×#Ñ#¼È×H`ÑH`Ó8aÐhoð (ó 
ˆŒ
ô ! ×!:Ñ!:Ñ;Ø×#Ñ#¨V×-BÑ-BÈô
ˆŒð ×"Ò"Ü Ÿ<™<×/Ñ/°×0JÑ0JÓKˆDŒLð ˆ�ô 1°¸lÔKˆDŒOØˆ�rM   c                óÞ   — | j                  |«      }| j                  s)| j                  ||¬«      }| j                  ||z   «      }|S | j                  ||z   «      }| j	                  ||«      }|S rù   )rX   r÷   r¢   r•   r  )r@   rk   Úresidual_tensor_1Úresidual_tensor_2r·   s        rK   rl   zTFMobileBertOutput.callë  st   € ØŸ
™
 =Ó1ˆØ×"Ò"Ø ŸL™L¨À˜LÓJˆMØ ŸN™N¨=Ð;LÑ+LÓMˆMð Ðð !ŸN™N¨=Ð;LÑ+LÓMˆMØ ŸO™O¨MÐ;LÓMˆMØÐrM   c                óÀ  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   Œ¿xY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)NTrX   r•   r  )ro   rp   r:   rq   rX   rZ   rr   rd   r_   r•   r  rt   s     rK   rr   zTFMobileBertOutput.buildõ  s  € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ NØ—
‘
× Ñ  $¨¨d¯k©k×.KÑ.KÐ!LÔM÷Nä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ð ,ð 9÷Nð Nú÷+ð +ú÷,ð ,ús$   Á3D<Â<EÄEÄ<EÅEÅEró   ri   rw   ry   s   @rK   r  r  Û  s   ø„ ôó÷,rM   r  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFBottleneckLayerc                óú   •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  d¬«      | _        t        |j                     |j
                  |j                  d¬«      | _
        || _        y r  )r[   r\   r   r]   r^   Úintra_bottleneck_sizerX   r�   rž   rŸ   r•   rd   re   s      €rK   r\   zTFBottleneckLayer.__init__  sg   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¨×(DÑ(DÈ7Ð'ÓSˆŒ
Ü  ×!:Ñ!:Ñ;Ø×(Ñ(°&×2GÑ2GÈkô
ˆŒð ˆ�rM   c                óJ   — | j                  |«      }| j                  |«      }|S ri   ©rX   r•   )r@   rŽ   rk   s      rK   rl   zTFBottleneckLayer.call  s$   € ØŸ
™
 6Ó*ˆØŸ™ }Ó5ˆØÐrM   c                óô  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY wrü   ©
ro   rp   r:   rq   rX   rZ   rr   rd   rš   r•   rt   s     rK   rr   zTFBottleneckLayer.build  óÈ   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷Hð Hú÷+ð +úrÿ   ri   rw   ry   s   @rK   r   r     ó   ø„ ôò÷
	+rM   r   c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFBottleneckc                óÊ   •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        t	        |d¬«      | _        | j                  rt	        |d¬«      | _        y y )NÚinputrY   Ú	attentionrT   )r[   r\   Úkey_query_shared_bottleneckrò   r   Úbottleneck_inputr-  re   s      €rK   r\   zTFBottleneck.__init__  sZ   ø€ Ü‰ÑÑ"˜6Ò"Ø+1×+MÑ+MˆÔ(Ø(.×(GÑ(GˆÔ%Ü 1°&¸wÔ GˆÔØ×+Ò+Ü.¨v¸KÔHˆD�Nð ,rM   c                óš   — | j                  |«      }| j                  r|fdz  S | j                  r| j                  |«      }||||fS ||||fS )Né   )r/  rò   r.  r-  )r@   rk   Úbottlenecked_hidden_statesÚshared_attention_inputs       rK   rl   zTFBottleneck.call'  se   € ð" &*×%:Ñ%:¸=Ó%IÐ"Ø×(Ò(Ø.Ð0°1Ñ4Ð4Ø×-Ò-Ø%)§^¡^°MÓ%BÐ"Ø*Ð,BÀMÐSmÐnÐnà! =°-ÐA[Ð\Ð\rM   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr/  r-  )ro   rp   r:   rq   r/  rZ   rr   r-  rt   s     rK   rr   zTFBottleneck.buildA  sº   € Ø�:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ 2Ø×%Ñ%×+Ñ+¨DÔ1÷2ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷2ð 2ú÷+ð +úr  ri   rw   ry   s   @rK   r*  r*    s   ø„ ôIò]÷4	+rM   r*  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFFFNOutputc                óú   •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  d¬«      | _        t        |j                     |j
                  |j                  d¬«      | _
        || _        y r  )r[   r\   r   r]   r^   rs   rX   r�   rž   rŸ   r•   rd   re   s      €rK   r\   zTFFFNOutput.__init__N  sg   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¨×(?Ñ(?ÀgÐ'ÓNˆŒ
Ü  ×!:Ñ!:Ñ;Ø×#Ñ#¨V×-BÑ-BÈô
ˆŒð ˆ�rM   c                óP   — | j                  |«      }| j                  ||z   «      }|S ri   r$  )r@   rk   rú   s      rK   rl   zTFFFNOutput.callV  s)   € ØŸ
™
 =Ó1ˆØŸ™ }°Ñ'FÓGˆØÐrM   c                óô  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY wrü   )
ro   rp   r:   rq   rX   rZ   rr   rd   r_   r•   rt   s     rK   rr   zTFFFNOutput.build[  sÈ   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ NØ—
‘
× Ñ  $¨¨d¯k©k×.KÑ.KÐ!LÔM÷Nä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷Nð Nú÷+ð +úrÿ   ri   rw   ry   s   @rK   r6  r6  M  r(  rM   r6  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )Ú
TFFFNLayerc                ól   •— t        ‰| �  di |¤Ž t        |d¬«      | _        t	        |d¬«      | _        y )NÚintermediaterY   r  rT   )r[   r\   rV   r=  r6  r  re   s      €rK   r\   zTFFFNLayer.__init__h  s1   ø€ Ü‰ÑÑ"˜6Ò"Ü4°VÀ.ÔQˆÔÜ!,¨V¸(Ô!CˆÕrM   c                óL   — | j                  |«      }| j                  ||«      }|S ri   )r=  r  )r@   rk   Úintermediate_outputr  s       rK   rl   zTFFFNLayer.callm  s,   € Ø"×/Ñ/°Ó>ÐØ×.Ñ.Ð/BÀMÓRˆØÐrM   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr=  r  )ro   rp   r:   rq   r=  rZ   rr   r  rt   s     rK   rr   zTFFFNLayer.buildr  s¿   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ä�4Ð,¨dÓ3Ð?Ü—‘˜t×5Ñ5×:Ñ:Ó;ñ 3Ø×&Ñ&×,Ñ,¨TÔ2÷3ð 3ð @÷.ð .ú÷3ð 3úr  ri   rw   ry   s   @rK   r;  r;  g  s   ø„ ôDò
÷
	3rM   r;  c                  ó.   ‡ — e Zd Zˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFMobileBertLayerc                ó¬  •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        t	        |d¬«      | _        t        |d¬«      | _        t        |d¬«      | _	        | j                  rt        |d¬«      | _        |j                  dkD  r:t        |j                  dz
  «      D �cg c]  }t        |d|› �¬«      ‘Œ c}| _        y y c c}w )	Nr-  rY   r=  r  r  r'   zffn.rT   )r[   r\   r÷   Únum_feedforward_networksr  r-  rV   r=  r  r  r*  r  r½   r;  Úffn©r@   rd   rf   Úirg   s       €rK   r\   zTFMobileBertLayer.__init__  s¸   ø€ Ü‰ÑÑ"˜6Ò"Ø$×3Ñ3ˆÔØ(.×(GÑ(GˆÔ%Ü.¨v¸KÔHˆŒÜ4°VÀ.ÔQˆÔÜ!3°FÀÔ!JˆÔà×ÒÜ*¨6¸ÔEˆDŒOØ×*Ñ*¨QÒ.ÜEJÈ6×KjÑKjÐmnÑKnÓEoÖpÀœ
 6°$°q°c°
Ö;ÒpˆD�Hð /ùÚps   Â0Cc           
     ó¶  — | j                   r| j                  |«      \  }}}}	n|gdz  \  }}}}	| j                  ||||	||||¬«      }
|
d   }|f}| j                  dk7  r+t	        | j
                  «      D ]  \  }} ||«      }||fz  }Œ | j                  |«      }| j                  ||||¬«      }|f|
dd  z   t        j                  d«      ||||	||fz   |z   }|S )Nr1  rÝ   r   r'   )
r÷   r  r-  rD  Ú	enumeraterE  r=  r  r:   Úconstant)r@   rk   rä   rå   rÎ   r·   rá   râ   rã   r  Úattention_outputsr  ÚsrG  Ú
ffn_moduler?  Úlayer_outputrð   s                     rK   rl   zTFMobileBertLayer.callŒ  sD  € Ø×ÒØBFÇ/Á/ÐR_ÓB`Ñ?ˆL˜* l±KàCPÀ/ÐTUÑBUÑ?ˆL˜* l°Kà ŸN™NØØØØØØØØð +ó 	
Ðð -¨QÑ/ÐØÐˆà×(Ñ(¨AÒ-Ü!*¨4¯8©8Ó!4ò )‘��:Ù#-Ð.>Ó#?Ð ØÐ&Ð(Ñ(‘ð)ð #×/Ñ/Ð0@ÓAÐØ×-Ñ-Ð.AÐCSÐUbÐmuÐ-Óvˆð ˆOØ  Ð#ñ$ô —‘˜A“ØØØØØ Ø#ðñ
ð ñð 	ð ˆrM   c                ó(  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   �ŒqxY w# 1 sw Y   �Œ$xY w# 1 sw Y   ŒÖxY w# 1 sw Y   ŒˆxY w# 1 sw Y   Œ{xY w)NTr-  r=  r  r  rE  )ro   rp   r:   rq   r-  rZ   rr   r=  r  r  rE  ©r@   ru   Úlayers      rK   rr   zTFMobileBertLayer.build¹  s©  € Ø�:Š:ØØˆŒ
Ü�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ä�4Ð,¨dÓ3Ð?Ü—‘˜t×5Ñ5×:Ñ:Ó;ñ 3Ø×&Ñ&×,Ñ,¨TÔ2÷3ä�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ Ó%Ð1ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 2÷+ñ +ú÷.ñ .ú÷3ð 3ú÷,ð ,ú÷&ð &ús<   ÁGÂ%G#Ã?G0ÅG<Æ8HÇG Ç#G-Ç0G9Ç<HÈH	ró   ri   rw   ry   s   @rK   rB  rB  ~  s   ø„ ôqó+÷Z&rM   rB  c                  ó0   ‡ — e Zd Zˆ fd„Z	 dd„Zdd„Zˆ xZS )ÚTFMobileBertEncoderc                óÞ   •— t        ‰| �  di |¤Ž |j                  | _        |j                  | _        t	        |j
                  «      D �cg c]  }t        |d|› �¬«      ‘Œ c}| _        y c c}w )Nzlayer_._rY   rT   )r[   r\   rÎ   Úoutput_hidden_statesr½   Únum_hidden_layersrB  rQ  rF  s       €rK   r\   zTFMobileBertEncoder.__init__Ð  s^   ø€ Ü‰ÑÑ"˜6Ò"Ø!'×!9Ñ!9ˆÔØ$*×$?Ñ$?ˆÔ!ÜNSÐTZ×TlÑTlÓNmÖnÈÔ'¨°xÀ¸s°^ÖDÒnˆ�
ùÒns   Á
A*c                ó   — |rdnd }|rdnd }	t        | j                  «      D ].  \  }
}|r||fz   } |||||
   ||¬«      }|d   }|sŒ&|	|d   fz   }	Œ0 |r||fz   }|st        d„ |||	fD «       «      S t        |||	¬«      S )NrT   rÝ   r   r'   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wri   rT   )Ú.0Úvs     rK   ú	<genexpr>z+TFMobileBertEncoder.call.<locals>.<genexpr>ô  s   è ø€ Òh˜qÐZ[ÑZgœÑhùs   ‚Š)Úlast_hidden_staterk   Ú
attentions)rI  rQ  Útupler
   )r@   rk   rä   rå   rÎ   rU  Úreturn_dictr·   Úall_hidden_statesÚall_attentionsrG  Úlayer_moduler  s                rK   rl   zTFMobileBertEncoder.callÖ  sÇ   € ñ #7™B¸DÐÙ0™°dˆÜ(¨¯©Ó4ò 	F‰OˆAˆ|Ù#Ø$5¸Ð8HÑ$HÐ!á(Ø˜~¨y¸©|Ð=NÐYaôˆMð *¨!Ñ,ˆMâ Ø!/°=ÀÑ3CÐ2EÑ!E‘ð	Fñ  Ø 1°]Ð4DÑ DÐáÜÑh ]Ð4EÀ~Ð$VÔhÓhÐhÜ Ø+Ð;LÐYgô
ð 	
rM   c                óô   — | j                   ry d| _         t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒIxY w)NTrQ  )ro   rp   rQ  r:   rq   rZ   rr   rP  s      rK   rr   zTFMobileBertEncoder.buildù  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 4÷&ð &ús   ÁA.Á.A7	ró   ri   rw   ry   s   @rK   rS  rS  Ï  s   ø„ ôoð ó!
÷F&rM   rS  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFMobileBertPoolerc                óö   •— t        ‰| �  di |¤Ž |j                  | _        | j                  rEt        j
                  j                  |j                  t        |j                  «      dd¬«      | _
        || _        y )NÚtanhrX   )rÊ   Ú
activationrZ   rT   )r[   r\   Úclassifier_activationÚdo_activater   r]   r^   rš   r   rœ   rX   rd   re   s      €rK   r\   zTFMobileBertPooler.__init__  sk   ø€ Ü‰ÑÑ"˜6Ò"Ø!×7Ñ7ˆÔØ×ÒÜŸ™×+Ñ+Ø×"Ñ"Ü#2°6×3KÑ3KÓ#LØ!Øð	 ,ó ˆDŒJð ˆ�rM   c                óV   — |d d …df   }| j                   s|S | j                  |«      }|S ©Nr   )rj  rX   )r@   rk   Úfirst_token_tensorÚpooled_outputs       rK   rl   zTFMobileBertPooler.call  s7   € ð +ª1¨a¨4Ñ0ÐØ×ÒØ%Ð%à ŸJ™JÐ'9Ó:ˆMØ Ð rM   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY wrn   )	ro   rp   r:   rq   rX   rZ   rr   rd   rš   rt   s     rK   rr   zTFMobileBertPooler.build  s}   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ HØ—
‘
× Ñ  $¨¨d¯k©k×.EÑ.EÐ!FÔG÷Hð Hð 4÷Hð Húrv   ri   rw   ry   s   @rK   re  re    s   ø„ ô
ò!÷HrM   re  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )Ú#TFMobileBertPredictionHeadTransformc                óš  •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  t        |j                  «      d¬«      | _        t        |j                  t        «      rt        |j                  «      | _        n|j                  | _        t        d   |j
                  |j                  d¬«      | _        || _        y )NrX   rÉ   r�   r•   r–   rT   )r[   r\   r   r]   r^   rš   r   rœ   rX   r`   ra   rb   r	   Útransform_act_fnr�   rŸ   r•   rd   re   s      €rK   r\   z,TFMobileBertPredictionHeadTransform.__init__$  s£   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'Ø×Ñ´?À6×C[ÑC[Ó3\Ðcjð (ó 
ˆŒ
ô �f×'Ñ'¬Ô-Ü$5°f×6GÑ6GÓ$HˆDÕ!à$*×$5Ñ$5ˆDÔ!Ü  Ñ.¨v×/AÑ/AÈ6×K`ÑK`ÐgrÔsˆŒØˆ�rM   c                ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ri   )rX   rs  r•   rj   s     rK   rl   z(TFMobileBertPredictionHeadTransform.call0  s4   € ØŸ
™
 =Ó1ˆØ×-Ñ-¨mÓ<ˆØŸ™ }Ó5ˆØÐrM   c                óô  — | j                   ry d| _         t        | dd «      �dt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY wrü   r&  rt   s     rK   rr   z)TFMobileBertPredictionHeadTransform.build6  r'  rÿ   ri   rw   ry   s   @rK   rq  rq  #  s   ø„ ô
ò÷	+rM   rq  c                  óD   ‡ — e Zd Zˆ fd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )	ÚTFMobileBertLMPredictionHeadc                óV   •— t        ‰| �  di |¤Ž t        |d¬«      | _        || _        y )NÚ	transformrY   rT   )r[   r\   rq  ry  rd   re   s      €rK   r\   z%TFMobileBertLMPredictionHead.__init__C  s(   ø€ Ü‰ÑÑ"˜6Ò"Ü<¸VÈ+ÔVˆŒØˆ�rM   c                ó–  — | j                  | j                  j                  fddd¬«      | _        | j                  | j                  j                  | j                  j
                  z
  | j                  j                  fddd¬«      | _        | j                  | j                  j                  | j                  j
                  fddd¬«      | _        | j                  ry d| _        t        | dd «      �Nt        j                  | j                  j                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)Nr‡   Tr†   )rˆ   r‰   Ú	trainablerZ   zdense/weightzdecoder/weightry  )rŒ   rd   r©   r†   rš   r™   rX   Údecoderro   rp   r:   rq   ry  rZ   rr   rt   s     rK   rr   z"TFMobileBertLMPredictionHead.buildH  s  € Ø—O‘O¨4¯;©;×+AÑ+AÐ*CÐQXÐdhÐou�OÓvˆŒ	Ø—_‘_Ø—;‘;×*Ñ*¨T¯[©[×-GÑ-GÑGÈÏÉ×I_ÑI_Ð`ØØØð	 %ó 
ˆŒ
ð —‘Ø—;‘;×)Ñ)¨4¯;©;×+EÑ+EÐFØØØ!ð	 'ó 
ˆŒð �:Š:ØØˆŒ
Ü�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ð +ð 8÷+ð +ús   ÄD?Ä?Ec                ó   — | S ri   rT   ©r@   s    rK   Úget_output_embeddingsz2TFMobileBertLMPredictionHead.get_output_embeddings^  s   € ØˆrM   c                óL   — || _         t        |«      d   | j                  _        y rl  )r|  r   rd   r©   ©r@   r°   s     rK   Úset_output_embeddingsz2TFMobileBertLMPredictionHead.set_output_embeddingsa  s   € ØˆŒÜ!+¨EÓ!2°1Ñ!5ˆ�‰ÕrM   c                ó   — d| j                   iS )Nr†   )r†   r~  s    rK   Úget_biasz%TFMobileBertLMPredictionHead.get_biase  s   € Ø˜Ÿ	™	Ð"Ð"rM   c                óX   — |d   | _         t        |d   «      d   | j                  _        y )Nr†   r   )r†   r   rd   r©   r�  s     rK   Úset_biasz%TFMobileBertLMPredictionHead.set_biash  s'   € Ø˜&‘MˆŒ	Ü!+¨E°&©MÓ!:¸1Ñ!=ˆ�‰ÕrM   c                óî   — | j                  |«      }t        j                  |t        j                  t        j                  | j
                  «      | j                  gd¬«      «      }|| j                  z   }|S )Nr   r³   )ry  r:   rÞ   rº   r×   r|  rX   r†   rj   s     rK   rl   z!TFMobileBertLMPredictionHead.calll  sY   € ØŸ™ }Ó5ˆÜŸ	™	 -´·±¼B¿L¹LÈÏÉÓ<VÐX\×XbÑXbÐ;cÐjkÔ1lÓmˆØ%¨¯	©	Ñ1ˆØÐrM   ri   )rP   rQ   rR   r\   rr   r  r‚  r„  r†  rl   rx   ry   s   @rK   rw  rw  B  s&   ø„ ôó
+ò,ò6ò#ò>örM   rw  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )ÚTFMobileBertMLMHeadc                óH   •— t        ‰| �  di |¤Ž t        |d¬«      | _        y )NÚpredictionsrY   rT   )r[   r\   rw  r‹  re   s      €rK   r\   zTFMobileBertMLMHead.__init__t  s"   ø€ Ü‰ÑÑ"˜6Ò"Ü7¸À]ÔSˆÕrM   c                ó(   — | j                  |«      }|S ri   ©r‹  )r@   Úsequence_outputÚprediction_scoress      rK   rl   zTFMobileBertMLMHead.callx  s   € Ø ×,Ñ,¨_Ó=ÐØ Ð rM   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTr‹  )ro   rp   r:   rq   r‹  rZ   rr   rt   s     rK   rr   zTFMobileBertMLMHead.build|  sm   € Ø�:Š:ØØˆŒ
Ü�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ð -ð :÷-ð -úó   ÁA1Á1A:ri   rw   ry   s   @rK   r‰  r‰  s  s   ø„ ôTò!÷-rM   r‰  c                  ód   ‡ — e Zd ZeZdˆ fd„	Zd„ Zd„ Zd„ Ze		 	 	 	 	 	 	 	 	 	 dd„«       Z
d	d„Zˆ xZS )
ÚTFMobileBertMainLayerc                ó:  •— t        ‰| �  di |¤Ž || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        t        |d¬«      | _	        t        |d¬«      | _        |rt        |d¬«      | _        y d | _        y )Nr§   rY   ÚencoderÚpoolerrT   )r[   r\   rd   rV  rÎ   rU  Úuse_return_dictr_  r’   r§   rS  r•  re  r–  )r@   rd   Úadd_pooling_layerrf   rg   s       €rK   r\   zTFMobileBertMainLayer.__init__‰  s†   ø€ Ü‰ÑÑ"˜6Ò"àˆŒØ!'×!9Ñ!9ˆÔØ!'×!9Ñ!9ˆÔØ$*×$?Ñ$?ˆÔ!Ø!×1Ñ1ˆÔä0°¸lÔKˆŒÜ*¨6¸	ÔBˆŒÙCTÔ(¨°hÔ?ˆ�ÐZ^ˆ�rM   c                ó   — | j                   S ri   )r§   r~  s    rK   Úget_input_embeddingsz*TFMobileBertMainLayer.get_input_embeddings–  s   € Ø�‰ÐrM   c                ó`   — || j                   _        t        |«      d   | j                   _        y rl  )r§   rŠ   r   r©   r�  s     rK   Úset_input_embeddingsz*TFMobileBertMainLayer.set_input_embeddings™  s$   € Ø!&ˆ�‰ÔÜ%/°Ó%6°qÑ%9ˆ�‰Õ"rM   c                ó   — t         ‚)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        r  )r@   Úheads_to_prunes     rK   Ú_prune_headsz"TFMobileBertMainLayer._prune_heads�  s
   € ô
 "Ð!rM   c           	     ó`  — |�|�t        d«      ‚|�t        |«      }n|�t        |«      d d }nt        d«      ‚|€t        j                  |d«      }|€t        j                  |d«      }| j	                  |||||
¬«      }t        j
                  ||d   dd|d   f«      }t        j                  ||j                  ¬«      }t        j                  d|j                  ¬«      }t        j                  d	|j                  ¬«      }t        j                  t        j                  ||«      |«      }|�t        ‚d g| j                  z  }| j                  ||||||	|
¬«      }|d   }| j                  �| j                  |«      nd }|	s
||f|dd  z   S t        |||j                   |j"                  ¬
«      S )NzDYou cannot specify both input_ids and inputs_embeds at the same timer®   z5You have to specify either input_ids or inputs_embedsr'   r   rÝ   r3   g      ð?g     ˆÃÀ)r\  Úpooler_outputrk   r]  )rÍ   r   r:   r¹   r§   r?   r=   r4   rJ  ÚmultiplyÚsubtractr  rV  r•  r–  r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r·   ru   Úembedding_outputÚextended_attention_maskÚone_cstÚten_thousand_cstÚencoder_outputsrŽ  rn  s                      rK   rl   zTFMobileBertMainLayer.call¤  sÞ  € ð Ð  ]Ð%>ÜÐcÓdÐdØÐ"Ü$ YÓ/‰KØÐ&Ü$ ]Ó3°C°RÐ8‰KäÐTÓUÐUàÐ!ÜŸW™W [°!Ó4ˆNàÐ!ÜŸW™W [°!Ó4ˆNàŸ?™?¨9°lÀNÐTaÐlt˜?ÓuÐô #%§*¡*¨^¸kÈ!¹nÈaÐQRÐT_Ð`aÑTbÐ=cÓ"dÐô #%§'¡'Ð*AÐIY×I_ÑI_Ô"`ÐÜ—+‘+˜cÐ)9×)?Ñ)?Ô@ˆÜŸ;™; xÐ7G×7MÑ7MÔNÐÜ"$§+¡+¬b¯k©k¸'ÐCZÓ.[Ð]mÓ"nÐð Ð Ü%Ð%à˜ ×!7Ñ!7Ñ7ˆIàŸ,™,ØØ#ØØØ ØØð 'ó 
ˆð *¨!Ñ,ˆØ8<¿¹Ð8O˜Ÿ™ OÔ4ÐUYˆáàØðð    Ð#ñ$ð $ô
 ,Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1ô	
ð 	
rM   c                ó’  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   Œ¿xY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)NTr§   r•  r–  )	ro   rp   r:   rq   r§   rZ   rr   r•  r–  rt   s     rK   rr   zTFMobileBertMainLayer.buildø  s  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ (Ø—‘×!Ñ! $Ô'÷(ð (ð 5÷,ð ,ú÷)ð )ú÷(ð (úó$   ÁD%Â%D1Ã?D=Ä%D.Ä1D:Ä=E)T©
NNNNNNNNNFri   )rP   rQ   rR   r(   Úconfig_classr\   rš  rœ  rŸ  r   rl   rr   rx   ry   s   @rK   r“  r“  …  sY   ø„ à#€Lõ_òò:ò"ð ð ØØØØØØØ!ØØòQ
ó ðQ
÷f(rM   r“  c                  ó   — e Zd ZdZeZdZy)ÚTFMobileBertPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Ú
mobilebertN)rP   rQ   rR   rS   r(   r¬  Úbase_model_prefixrT   rM   rK   r®  r®    s   „ ñð
 $€LØ$ÑrM   r®  c                  óX   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	ded
<   y)Ú TFMobileBertForPreTrainingOutputaE  
    Output type of [`TFMobileBertForPreTraining`].

    Args:
        prediction_logits (`tf.Tensor` 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 (`tf.Tensor` of shape `(batch_size, 2)`):
            Prediction scores of the next sequence prediction (classification) head (scores of True/False continuation
            before SoftMax).
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each layer) of shape
            `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
    Nztf.Tensor | NoneÚlosszOptional[tf.Tensor]Úprediction_logitsÚseq_relationship_logitszTuple[tf.Tensor] | Nonerk   r]  )
rP   rQ   rR   rS   r³  Ú__annotations__r´  rµ  rk   r]  rT   rM   rK   r²  r²    sB   … ñð, "€DÐ
Ó!Ø-1ÐÐ*Ó1Ø37ÐÐ0Ó7Ø-1€MÐ*Ó1Ø*.€JÐ'Ô.rM   r²  a€	  

    This model inherits from [`TFPreTrainedModel`]. Check the superclass documentation for the generic methods the
    library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
    etc.)

    This model is also a [keras.Model](https://www.tensorflow.org/api_docs/python/tf/keras/Model) subclass. Use it
    as a regular TF 2.0 Keras Model and refer to the TF 2.0 documentation for all matter related to general usage and
    behavior.

    <Tip>

    TensorFlow models and layers in `transformers` accept two formats as input:

    - having all inputs as keyword arguments (like PyTorch models), or
    - having all inputs as a list, tuple or dict in the first positional argument.

    The reason the second format is supported is that Keras methods prefer this format when passing inputs to models
    and layers. Because of this support, when using methods like `model.fit()` things should "just work" for you - just
    pass your inputs and labels in any format that `model.fit()` supports! If, however, you want to use the second
    format outside of Keras methods like `fit()` and `predict()`, such as when creating your own layers or models with
    the Keras `Functional` API, there are three possibilities you can use to gather all the input Tensors in the first
    positional argument:

    - a single Tensor with `input_ids` only and nothing else: `model(input_ids)`
    - a list of varying length with one or several input Tensors IN THE ORDER given in the docstring:
    `model([input_ids, attention_mask])` or `model([input_ids, attention_mask, token_type_ids])`
    - a dictionary with one or several input Tensors associated to the input names given in the docstring:
    `model({"input_ids": input_ids, "token_type_ids": token_type_ids})`

    Note that when creating models and layers with
    [subclassing](https://keras.io/guides/making_new_layers_and_models_via_subclassing/) then you don't need to worry
    about any of this, as you can just pass inputs like you would to any other Python function!

    </Tip>

    Parameters:
        config ([`MobileBertConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a•  
    Args:
        input_ids (`Numpy array` or `tf.Tensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

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

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`Numpy array` or `tf.Tensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        token_type_ids (`Numpy array` or `tf.Tensor` of shape `({0})`, *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 (`Numpy array` or `tf.Tensor` of shape `({0})`, *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)
        head_mask (`Numpy array` or `tf.Tensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        inputs_embeds (`tf.Tensor` of shape `({0}, 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.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail. This argument can be used only in eager mode, in graph mode the value in the
            config will be used instead.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail. This argument can be used only in eager mode, in graph mode the value in the config will be
            used instead.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple. This argument can be used in
            eager mode, in graph mode the value will always be set to True.
        training (`bool`, *optional*, defaults to `False`):
            Whether or not to use the model in training mode (some modules like dropout modules have different
            behaviors between training and evaluation).
zdThe bare MobileBert Model transformer outputting raw hidden-states without any specific head on top.c                  óÈ   ‡ — e Zd Zˆ fd„Ze eej                  d«      «       ee	e
e¬«      	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zdd„Zˆ xZS )	ÚTFMobileBertModelc                óP   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        y )Nr¯  rY   )r[   r\   r“  r¯  ©r@   rd   rŽ   rf   rg   s       €rK   r\   zTFMobileBertModel.__init__—  s(   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3Ü/°¸\ÔJˆ�rM   úbatch_size, sequence_length©Ú
checkpointÚoutput_typer¬  c                ó<   — | j                  |||||||||	|
¬«
      }|S )N)
r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r·   )r¯  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r·   rð   s               rK   rl   zTFMobileBertModel.call›  s<   € ð( —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð ˆrM   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTr¯  )ro   rp   r:   rq   r¯  rZ   rr   rt   s     rK   rr   zTFMobileBertModel.build¾  si   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ð ,ð 9÷,ð ,úr‘  r«  )r¾   úTFModelInputType | Nonerä   únp.ndarray | tf.Tensor | NonerÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   úOptional[bool]rU  rÃ  r_  rÃ  r·   rÃ  rO   z*Union[Tuple, TFBaseModelOutputWithPooling]ri   )rP   rQ   rR   r\   r   r$   ÚMOBILEBERT_INPUTS_DOCSTRINGÚformatr"   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCrl   rr   rx   ry   s   @rK   r¸  r¸  ’  sß   ø„ ô
Kð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙØ&Ø0Ø$ôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø#(ðà*ðð 6ðð 6ð	ð
 4ðð 1ðð 5ðð *ðð -ðð $ðð !ðð 
4òóó nó ð÷8,rM   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                  óä   ‡ — e Zd Zˆ fd„Zd„ Zd„ Ze eej                  d«      «       e
ee¬«      	 	 	 	 	 	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„«       «       «       Zdd„Zd„ Zˆ xZS )ÚTFMobileBertForPreTrainingc                ó˜   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        t	        |d¬«      | _        t        |d¬«      | _        y )Nr¯  rY   Úpredictions___clsÚseq_relationship___cls)r[   r\   r“  r¯  r‰  r‹  ÚTFMobileBertOnlyNSPHeadÚseq_relationshiprº  s       €rK   r\   z#TFMobileBertForPreTraining.__init__Ï  sH   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3Ü/°¸\ÔJˆŒÜ.¨vÐ<OÔPˆÔÜ 7¸ÐE]Ô ^ˆÕrM   c                ó.   — | j                   j                   S ri   r�  r~  s    rK   Úget_lm_headz&TFMobileBertForPreTraining.get_lm_headÕ  ó   € Ø×Ñ×+Ñ+Ð+rM   c                óÊ   — t        j                  dt        «       | j                  dz   | j                  j                  z   dz   | j                  j                  j                  z   S ©NzMThe method get_prefix_bias_name is deprecated. Please use `get_bias` instead.ú/)ÚwarningsÚwarnÚFutureWarningrZ   r‹  r~  s    rK   Úget_prefix_bias_namez/TFMobileBertForPreTraining.get_prefix_bias_nameØ  sM   € Ü�‰ÐeÔgtÔuØ�y‰y˜3‰ ×!1Ñ!1×!6Ñ!6Ñ6¸Ñ<¸t×?OÑ?O×?[Ñ?[×?`Ñ?`Ñ`Ð`rM   r»  ©r¾  r¬  c                óH  — | j                  |||||||||	|¬«
      }|dd \  }}| j                  |«      }| j                  |«      }d}|
� |�d|
i}||d<   | j                  |||f¬«      }|	s||f|dd z   }|�|f|z   S |S t	        ||||j
                  |j                  ¬«      S )a9  
        Return:

        Examples:

        ```python
        >>> import tensorflow as tf
        >>> from transformers import AutoTokenizer, TFMobileBertForPreTraining

        >>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
        >>> model = TFMobileBertForPreTraining.from_pretrained("google/mobilebert-uncased")
        >>> input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute"))[None, :]  # Batch size 1
        >>> outputs = model(input_ids)
        >>> prediction_scores, seq_relationship_scores = outputs[:2]
        ```©	rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r·   Nr²   r0   r5   ©r0   rA   )r³  r´  rµ  rk   r]  )r¯  r‹  rÎ  rL   r²  rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r0   r5   r·   rð   rŽ  rn  r�  Úseq_relationship_scoreÚ
total_lossÚd_labelsr  s                        rK   rl   zTFMobileBertForPreTraining.callÜ  s  € ðB —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð *1°°!¨Ñ&ˆ˜Ø ×,Ñ,¨_Ó=ÐØ!%×!6Ñ!6°}Ó!EÐàˆ
ØÐÐ"5Ð"AØ  &Ð)ˆHØ.AˆHÐ*Ñ+Ø×-Ñ-°XÐGXÐZpÐFqÐ-ÓrˆJáØ'Ð)?Ð@À7È1È2À;ÑNˆFØ/9Ð/E�Z�M FÑ*ÐQÈ6ÐQä/ØØ/Ø$:Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rM   c                ó’  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   Œ¿xY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)NTr¯  r‹  rÎ  )	ro   rp   r:   rq   r¯  rZ   rr   r‹  rÎ  rt   s     rK   rr   z TFMobileBertForPreTraining.build   s
  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ä�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ 2Ø×%Ñ%×+Ñ+¨DÔ1÷2ð 2ð ?÷,ð ,ú÷-ð -ú÷2ð 2úrª  c                ó   — |dk(  r|dfS |fS ©Nzcls.predictions.decoder.weightz,mobilebert.embeddings.word_embeddings.weightrT   ©r@   Ú	tf_weights     rK   Útf_to_pt_weight_renamez1TFMobileBertForPreTraining.tf_to_pt_weight_rename.  ó   € ØÐ8Ò8ØÐLÐLÐLà�<ÐrM   ©NNNNNNNNNNNF)r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r0   rÂ  r5   rÂ  r·   rÃ  rO   z.Union[Tuple, TFMobileBertForPreTrainingOutput]ri   )rP   rQ   rR   r\   rÐ  rØ  r   r$   rÄ  rÅ  r&   r²  rÇ  rl   rr   rå  rx   ry   s   @rK   rÉ  rÉ  Ç  s  ø„ ô_ò,òað Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙÐ+KÐZiÔjð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø04Ø=AØ#(ð?
à*ð?
ð 6ð?
ð 6ð	?
ð
 4ð?
ð 1ð?
ð 5ð?
ð *ð?
ð -ð?
ð $ð?
ð .ð?
ð ;ð?
ð !ð?
ð 
8ò?
ó kó nó ð?
óB2ö rM   rÉ  z8MobileBert Model with a `language modeling` head on top.c            	      óì   ‡ — e Zd Zg d¢Zˆ fd„Zd„ Zd„ Ze ee	j                  d«      «       eeeedd¬«      	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„«       «       «       Zdd
„Zd„ Zˆ xZS )ÚTFMobileBertForMaskedLM)r–  rÌ  úcls.seq_relationshipc                óv   •— t        ‰| �  |g|¢­i |¤Ž t        |dd¬«      | _        t	        |d¬«      | _        y )NFr¯  ©r˜  rZ   rË  rY   )r[   r\   r“  r¯  r‰  r‹  rº  s       €rK   r\   z TFMobileBertForMaskedLM.__init__>  s;   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä/°È%ÐVbÔcˆŒÜ.¨vÐ<OÔPˆÕrM   c                ó.   — | j                   j                   S ri   r�  r~  s    rK   rÐ  z#TFMobileBertForMaskedLM.get_lm_headD  rÑ  rM   c                óÊ   — t        j                  dt        «       | j                  dz   | j                  j                  z   dz   | j                  j
                  j                  z   S rÓ  )rÕ  rÖ  r×  rZ   Úmlmr‹  r~  s    rK   rØ  z,TFMobileBertForMaskedLM.get_prefix_bias_nameG  sG   € Ü�‰ÐeÔgtÔuØ�y‰y˜3‰ §¡§¡Ñ.°Ñ4°t·x±x×7KÑ7K×7PÑ7PÑPÐPrM   r»  z'paris'g=
×£p=â?©r½  r¾  r¬  Úexpected_outputÚexpected_lossc                ó  — | j                  |||||||||	|¬«
      }|d   }| j                  ||¬«      }|
€dn| j                  |
|«      }|	s|f|dd z   }|�|f|z   S |S t        |||j                  |j
                  ¬«      S )az  
        labels (`tf.Tensor` 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
        rÛ  r   rÝ   Nr²   ©r³  rA   rk   r]  )r¯  r‹  rL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r0   r·   rð   rŽ  r�  r³  r  s                    rK   rl   zTFMobileBertForMaskedLM.callK  sÁ   € ð: —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð " !™*ˆØ ×,Ñ,¨_ÀxÐ,ÓPÐà�~‰t¨4×+?Ñ+?ÀÐHYÓ+ZˆáØ'Ð)¨G°A°B¨KÑ7ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEäØØ$Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rM   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr¯  r‹  )ro   rp   r:   rq   r¯  rZ   rr   r‹  rt   s     rK   rr   zTFMobileBertForMaskedLM.build„  s¹   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ð -ð :÷,ð ,ú÷-ð -úr  c                ó   — |dk(  r|dfS |fS râ  rT   rã  s     rK   rå  z.TFMobileBertForMaskedLM.tf_to_pt_weight_rename�  ræ  rM   ©NNNNNNNNNNF)r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r0   rÂ  r·   rÃ  rO   zUnion[Tuple, TFMaskedLMOutput]ri   )rP   rQ   rR   Ú"_keys_to_ignore_on_load_unexpectedr\   rÐ  rØ  r   r$   rÄ  rÅ  r"   rÆ  r   rÇ  rl   rr   rå  rx   ry   s   @rK   ré  ré  5  s  ø„ ò*Ð&ôQò,òQð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙØ&Ø$Ø$Ø!Øôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø04Ø#(ð.
à*ð.
ð 6ð.
ð 6ð	.
ð
 4ð.
ð 1ð.
ð 5ð.
ð *ð.
ð -ð.
ð $ð.
ð .ð.
ð !ð.
ð 
(ò.
óó nó ð.
ó`	-ö rM   ré  c                  ó,   ‡ — e Zd Zˆ fd„Zd„ Zdd„Zˆ xZS )rÍ  c                ó~   •— t        ‰| �  di |¤Ž t        j                  j	                  dd¬«      | _        || _        y )Nr²   rÎ  rY   rT   )r[   r\   r   r]   r^   rÎ  rd   re   s      €rK   r\   z TFMobileBertOnlyNSPHead.__init__—  s7   ø€ Ü‰ÑÑ"˜6Ò"Ü %§¡× 2Ñ 2°1Ð;MÐ 2Ó NˆÔØˆ�rM   c                ó(   — | j                  |«      }|S ri   )rÎ  )r@   rn  rÝ  s      rK   rl   zTFMobileBertOnlyNSPHead.callœ  s   € Ø!%×!6Ñ!6°}Ó!EÐØ%Ð%rM   c                ó(  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   y xY w)NTrÎ  )	ro   rp   r:   rq   rÎ  rZ   rr   rd   rš   rt   s     rK   rr   zTFMobileBertOnlyNSPHead.build   s„   € Ø�:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ SØ×%Ñ%×+Ñ+¨T°4¸¿¹×9PÑ9PÐ,QÔR÷Sð Sð ?÷Sð Súrv   ri   rw   ry   s   @rK   rÍ  rÍ  –  s   ø„ ôò
&÷SrM   rÍ  zPMobileBert Model with a `next sentence prediction (classification)` head on top.c                  óÔ   ‡ — e Zd ZddgZˆ fd„Ze eej                  d«      «       e	e
e¬«      	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )Ú%TFMobileBertForNextSentencePredictionrË  úcls.predictionsc                ót   •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        t	        |d¬«      | _        y )Nr¯  rY   rÌ  )r[   r\   r“  r¯  rÍ  Úclsrº  s       €rK   r\   z.TFMobileBertForNextSentencePrediction.__init__±  s7   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä/°¸\ÔJˆŒÜ*¨6Ð8PÔQˆ�rM   r»  rÙ  c                ó  — | j                  |||||||||	|¬«
      }|d   }| j                  |«      }|
€dn| j                  |
|¬«      }|	s|f|dd z   }|�|f|z   S |S t        |||j                  |j
                  ¬«      S )a÷  
        Return:

        Examples:

        ```python
        >>> import tensorflow as tf
        >>> from transformers import AutoTokenizer, TFMobileBertForNextSentencePrediction

        >>> tokenizer = AutoTokenizer.from_pretrained("google/mobilebert-uncased")
        >>> model = TFMobileBertForNextSentencePrediction.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="tf")

        >>> logits = model(encoding["input_ids"], token_type_ids=encoding["token_type_ids"])[0]
        ```rÛ  r'   NrÜ  r²   rô  )r¯  r  rL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r5   r·   rð   rn  Úseq_relationship_scoresÚnext_sentence_lossr  s                    rK   rl   z*TFMobileBertForNextSentencePrediction.call·  sÎ   € ðF —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð   ™
ˆØ"&§(¡(¨=Ó"9Ðð #Ð*ñ à×%Ñ%Ð-@ÐI`Ð%Óað 	ñ Ø-Ð/°'¸!¸"°+Ñ=ˆFØ7IÐ7UÐ'Ð)¨FÑ2ÐaÐ[aÐaä,Ø#Ø*Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rM   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr¯  r  )ro   rp   r:   rq   r¯  rZ   rr   r  rt   s     rK   rr   z+TFMobileBertForNextSentencePrediction.buildú  s±   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ %Ø—‘—‘˜tÔ$÷%ð %ð 2÷,ð ,ú÷%ð %úr  r÷  )r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r5   rÂ  r·   rÃ  rO   z+Union[Tuple, TFNextSentencePredictorOutput]ri   )rP   rQ   rR   rø  r\   r   r$   rÄ  rÅ  r&   r   rÇ  rl   rr   rx   ry   s   @rK   rþ  rþ  ©  s÷   ø„ ð +?Ð@RÐ)SÐ&ôRð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙÐ+HÐWfÔgð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø=AØ#(ð>
à*ð>
ð 6ð>
ð 6ð	>
ð
 4ð>
ð 1ð>
ð 5ð>
ð *ð>
ð -ð>
ð $ð>
ð ;ð>
ð !ð>
ð 
5ò>
ó hó nó ð>
÷@	%rM   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g d¢ZdgZˆ fd„Ze eej                  d«      «       e
eeeee¬«      	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )Ú%TFMobileBertForSequenceClassification©rË  rÌ  rÿ  rê  r¢   c                ó˜  •— t        ‰| �  |g|¢­i |¤Ž |j                  | _        t        |d¬«      | _        |j
                  �|j
                  n|j                  }t        j                  j                  |«      | _
        t        j                  j                  |j                  t        |j                  «      d¬«      | _        || _        y )Nr¯  rY   Ú
classifierrÉ   ©r[   r\   Ú
num_labelsr“  r¯  Úclassifier_dropoutr¡   r   r]   r    r¢   r^   r   rœ   r
  rd   ©r@   rd   rŽ   rf   r  rg   s        €rK   r\   z.TFMobileBertForSequenceClassification.__init__  s­   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3Ø ×+Ñ+ˆŒä/°¸\ÔJˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —|‘|×+Ñ+Ð,>Ó?ˆŒÜŸ,™,×,Ñ,Ø×Ñ´/À&×BZÑBZÓ2[Ðbnð -ó 
ˆŒð ˆ�rM   r»  rð  c                ó&  — | j                  |||||||||	|¬«
      }|d   }| j                  ||¬«      }| j                  |«      }|
€dn| j                  |
|«      }|	s|f|dd z   }|�|f|z   S |S t	        |||j
                  |j                  ¬«      S )a†  
        labels (`tf.Tensor` 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).
        rÛ  r'   rÝ   Nr²   rô  )r¯  r¢   r
  rL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r0   r·   rð   rn  rA   r³  r  s                    rK   rl   z*TFMobileBertForSequenceClassification.call%  sÉ   € ð: —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð   ™
ˆàŸ™ ]¸X˜ÓFˆØ—‘ Ó/ˆà�~‰t¨4×+?Ñ+?ÀÈÓ+OˆáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä)ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rM   c                óô  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY w©NTr¯  r
  ©
ro   rp   r:   rq   r¯  rZ   rr   r
  rd   rš   rt   s     rK   rr   z+TFMobileBertForSequenceClassification.build`  óË   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4·;±;×3JÑ3JÐ&KÔL÷Mð Mð 9÷,ð ,ú÷Mð Múó   ÁC"Â%3C.Ã"C+Ã.C7r÷  )r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r0   rÂ  r·   rÃ  rO   z(Union[Tuple, TFSequenceClassifierOutput]ri   )rP   rQ   rR   rø  Ú_keys_to_ignore_on_load_missingr\   r   r$   rÄ  rÅ  r"   Ú'_CHECKPOINT_FOR_SEQUENCE_CLASSIFICATIONr   rÇ  Ú_SEQ_CLASS_EXPECTED_OUTPUTÚ_SEQ_CLASS_EXPECTED_LOSSrl   rr   rx   ry   s   @rK   r  r    s  ø„ ò*Ð&ð (2 lÐ#ôð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙØ:Ø.Ø$Ø2Ø.ôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø04Ø#(ð0
à*ð0
ð 6ð0
ð 6ð	0
ð
 4ð0
ð 1ð0
ð 5ð0
ð *ð0
ð -ð0
ð $ð0
ð .ð0
ð !ð0
ð 
2ò0
óó nó ð0
÷d	MrM   r  zã
    MobileBert Model with a span classification head on top for extractive question-answering tasks like SQuAD (a
    linear layers on top of the hidden-states output to compute `span start logits` and `span end logits`).
    c                  óä   ‡ — e Zd Zg d¢Zˆ fd„Ze eej                  d«      «       e	e
eeeeee¬«      	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zd	d„Zˆ xZS )
Ú TFMobileBertForQuestionAnswering©r–  rË  rÌ  rÿ  rê  c                ó
  •— t        ‰| �  |g|¢­i |¤Ž |j                  | _        t        |dd¬«      | _        t
        j                  j                  |j                  t        |j                  «      d¬«      | _
        || _        y )NFr¯  rì  Ú
qa_outputsrÉ   )r[   r\   r  r“  r¯  r   r]   r^   r   rœ   r  rd   rº  s       €rK   r\   z)TFMobileBertForQuestionAnswering.__init__}  su   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3Ø ×+Ñ+ˆŒä/°È%ÐVbÔcˆŒÜŸ,™,×,Ñ,Ø×Ñ´/À&×BZÑBZÓ2[Ðbnð -ó 
ˆŒð ˆ�rM   r»  )r½  r¾  r¬  Úqa_target_start_indexÚqa_target_end_indexrñ  rò  c                ó¨  — | j                  |||||||||	|¬«
      }|d   }| j                  |«      }t        j                  |dd¬«      \  }}t        j                  |d¬«      }t        j                  |d¬«      }d}|
�|�|
|dœ}| j                  |||f«      }|	s||f|dd z   }|�|f|z   S |S t        ||||j                  |j                  ¬«      S )	aõ  
        start_positions (`tf.Tensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the start of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        end_positions (`tf.Tensor` of shape `(batch_size,)`, *optional*):
            Labels for position (index) of the end of the labelled span for computing the token classification loss.
            Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
            are not taken into account for computing the loss.
        rÛ  r   r²   r®   r³   N)Ústart_positionÚend_position)r³  Ústart_logitsÚ
end_logitsrk   r]  )	r¯  r  r:   ÚsplitÚsqueezerL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  Ústart_positionsÚend_positionsr·   rð   rŽ  rA   r#  r$  r³  r0   r  s                        rK   rl   z%TFMobileBertForQuestionAnswering.call‡  s  € ðH —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð " !™*ˆà—‘ Ó1ˆÜ#%§8¡8¨F°A¸BÔ#?Ñ ˆ�jÜ—z‘z ,°RÔ8ˆÜ—Z‘Z 
°Ô4ˆ
àˆØÐ&¨=Ð+DØ(7ÈÑWˆFØ×'Ñ'¨°¸zÐ0JÓKˆDáØ" JÐ/°'¸!¸"°+Ñ=ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä-ØØ%Ø!Ø!×/Ñ/Ø×)Ñ)ô
ð 	
rM   c                óô  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY w)NTr¯  r  )
ro   rp   r:   rq   r¯  rZ   rr   r  rd   rš   rt   s     rK   rr   z&TFMobileBertForQuestionAnswering.buildÏ  r  r  rç  )r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r'  rÂ  r(  rÂ  r·   rÃ  rO   z,Union[Tuple, TFQuestionAnsweringModelOutput]ri   )rP   rQ   rR   rø  r\   r   r$   rÄ  rÅ  r"   Ú_CHECKPOINT_FOR_QAr   rÇ  Ú_QA_TARGET_START_INDEXÚ_QA_TARGET_END_INDEXÚ_QA_EXPECTED_OUTPUTÚ_QA_EXPECTED_LOSSrl   rr   rx   ry   s   @rK   r  r  l  s  ø„ ò*Ð&ôð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙØ%Ø2Ø$Ø4Ø0Ø+Ø'ôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø9=Ø7;Ø#(ð;
à*ð;
ð 6ð;
ð 6ð	;
ð
 4ð;
ð 1ð;
ð 5ð;
ð *ð;
ð -ð;
ð $ð;
ð 7ð;
ð 5ð;
ð !ð;
ð 
6ò;
óó nó ð;
÷z	MrM   r  z«
    MobileBert Model with a multiple choice classification head on top (a linear layer on top of the pooled output and
    a softmax) e.g. for RocStories/SWAG tasks.
    c                  óÜ   ‡ — e Zd Zg d¢ZdgZˆ fd„Ze eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )ÚTFMobileBertForMultipleChoicer  r¢   c                ó.  •— t        ‰| �  |g|¢­i |¤Ž t        |d¬«      | _        t        j
                  j                  |j                  «      | _        t        j
                  j                  dt        |j                  «      d¬«      | _        || _        y )Nr¯  rY   r'   r
  rÉ   )r[   r\   r“  r¯  r   r]   r    r¡   r¢   r^   r   rœ   r
  rd   rº  s       €rK   r\   z&TFMobileBertForMultipleChoice.__init__ì  s{   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3ä/°¸\ÔJˆŒÜ—|‘|×+Ñ+¨F×,FÑ,FÓGˆŒÜŸ,™,×,Ñ,Ø¤/°&×2JÑ2JÓ"KÐR^ð -ó 
ˆŒð ˆ�rM   z(batch_size, num_choices, sequence_lengthr¼  c                óþ  — |�t        |«      d   }t        |«      d   }nt        |«      d   }t        |«      d   }|�t        j                  |d|f«      nd}|�t        j                  |d|f«      nd}|�t        j                  |d|f«      nd}|�t        j                  |d|f«      nd}|�%t        j                  |d|t        |«      d   f«      nd}| j                  |||||||||	|¬«
      }|d   }| j	                  ||¬«      }| j                  |«      }t        j                  |d|f«      }|
€dn| j                  |
|«      }|	s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  ¬«      S )	a5  
        labels (`tf.Tensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the multiple choice classification loss. Indices should be in `[0, ..., num_choices]`
            where `num_choices` is the size of the second dimension of the input tensors. (See `input_ids` above)
        Nr'   r²   r®   r   )r_  r·   rÝ   rô  )
r   r:   r?   r¯  r¢   r
  rL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r0   r·   Únum_choicesÚ
seq_lengthÚflat_input_idsÚflat_attention_maskÚflat_token_type_idsÚflat_position_idsÚflat_inputs_embedsrð   rn  rA   Úreshaped_logitsr³  r  s                            rK   rl   z"TFMobileBertForMultipleChoice.callö  sÌ  € ð8 Ð Ü$ YÓ/°Ñ2ˆKÜ# IÓ.¨qÑ1‰Jä$ ]Ó3°AÑ6ˆKÜ# MÓ2°1Ñ5ˆJàDMÐDYœŸ™ I°°JÐ/?Ô@Ð_cˆØN\ÐNhœbŸj™j¨¸"¸jÐ9IÔJÐnrÐØN\ÐNhœbŸj™j¨¸"¸jÐ9IÔJÐnrÐØJVÐJbœBŸJ™J |°b¸*Ð5EÔFÐhlÐð Ð(ô �J‰J�} r¨:´zÀ-Ó7PÐQRÑ7SÐ&TÔUàð 	ð
 —/‘/ØØØØØØØØ Ø#Øð "ó 
ˆð   ™
ˆØŸ™ ]¸X˜ÓFˆØ—‘ Ó/ˆÜŸ*™* V¨b°+Ð->Ó?ˆà�~‰t¨4×+?Ñ+?ÀÈÓ+XˆáØ%Ð'¨'°!°"¨+Ñ5ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä*ØØ"Ø!×/Ñ/Ø×)Ñ)ô	
ð 	
rM   c                óô  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY wr  r  rt   s     rK   rr   z#TFMobileBertForMultipleChoice.build@  r  r  r÷  )r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r0   rÂ  r·   rÃ  rO   z)Union[Tuple, TFMultipleChoiceModelOutput]ri   )rP   rQ   rR   rø  r  r\   r   r$   rÄ  rÅ  r"   rÆ  r   rÇ  rl   rr   rx   ry   s   @rK   r0  r0  Û  s  ø„ ò*Ð&ð (2 lÐ#ôð Ù*Ø#×*Ñ*Ð+UÓVóñ  Ø&Ø/Ø$ôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø04Ø#(ð?
à*ð?
ð 6ð?
ð 6ð	?
ð
 4ð?
ð 1ð?
ð 5ð?
ð *ð?
ð -ð?
ð $ð?
ð .ð?
ð !ð?
ð 
3ò?
óóó ð?
÷B	MrM   r0  z©
    MobileBert Model with a token classification head on top (a linear layer on top of the hidden-states output) e.g.
    for Named-Entity-Recognition (NER) tasks.
    c            	      óà   ‡ — e Zd Zg d¢ZdgZˆ fd„Ze eej                  d«      «       e
eeeee¬«      	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )Ú"TFMobileBertForTokenClassificationr  r¢   c                óš  •— t        ‰| �  |g|¢­i |¤Ž |j                  | _        t        |dd¬«      | _        |j
                  �|j
                  n|j                  }t        j                  j                  |«      | _
        t        j                  j                  |j                  t        |j                  «      d¬«      | _        || _        y )NFr¯  rì  r
  rÉ   r  r  s        €rK   r\   z+TFMobileBertForTokenClassification.__init__^  s°   ø€ Ü‰Ñ˜Ð3 &Ò3¨FÒ3Ø ×+Ñ+ˆŒä/°È%ÐVbÔcˆŒà)/×)BÑ)BÐ)NˆF×%Ò%ÐTZ×TnÑTnð 	ô —|‘|×+Ñ+Ð,>Ó?ˆŒÜŸ,™,×,Ñ,Ø×Ñ´/À&×BZÑBZÓ2[Ðbnð -ó 
ˆŒð ˆ�rM   r»  rð  c                ó&  — | j                  |||||||||	|¬«
      }|d   }| j                  ||¬«      }| j                  |«      }|
€dn| j                  |
|«      }|	s|f|dd z   }|�|f|z   S |S t	        |||j
                  |j                  ¬«      S )zÔ
        labels (`tf.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
        rÛ  r   rÝ   Nr²   rô  )r¯  r¢   r
  rL   r   rk   r]  )r@   r¾   rä   rÀ   r¿   rå   rÁ   rÎ   rU  r_  r0   r·   rð   rŽ  rA   r³  r  s                    rK   rl   z'TFMobileBertForTokenClassification.calll  sÉ   € ð6 —/‘/ØØ)Ø)Ø%ØØ'Ø/Ø!5Ø#Øð "ó 
ˆð " !™*ˆàŸ,™, À˜,ÓJˆØ—‘ Ó1ˆà�~‰t¨4×+?Ñ+?ÀÈÓ+OˆáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä&ØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
rM   c                óô  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y # 1 sw Y   Œ|xY w# 1 sw Y   y xY wr  r  rt   s     rK   rr   z(TFMobileBertForTokenClassification.build¥  r  r  r÷  )r¾   rÁ  rä   rÂ  rÀ   rÂ  r¿   rÂ  rå   rÂ  rÁ   rÂ  rÎ   rÃ  rU  rÃ  r_  rÃ  r0   rÂ  r·   rÃ  rO   z%Union[Tuple, TFTokenClassifierOutput]ri   )rP   rQ   rR   rø  r  r\   r   r$   rÄ  rÅ  r"   Ú$_CHECKPOINT_FOR_TOKEN_CLASSIFICATIONr   rÇ  Ú_TOKEN_CLASS_EXPECTED_OUTPUTÚ_TOKEN_CLASS_EXPECTED_LOSSrl   rr   rx   ry   s   @rK   r=  r=  L  s  ø„ ò*Ð&ð (2 lÐ#ôð Ù*Ð+F×+MÑ+MÐNkÓ+lÓmÙØ7Ø+Ø$Ø4Ø0ôð .2Ø8<Ø8<Ø6:Ø37Ø7;Ø,0Ø/3Ø&*Ø04Ø#(ð.
à*ð.
ð 6ð.
ð 6ð	.
ð
 4ð.
ð 1ð.
ð 5ð.
ð *ð.
ð -ð.
ð $ð.
ð .ð.
ð !ð.
ð 
/ò.
óó nó ð.
÷`	MrM   r=  )
ré  r0  rþ  rÉ  r  r  r=  r“  r¸  r®  )jrS   Ú
__future__r   rÕ  Údataclassesr   Útypingr   r   r   ÚnumpyÚnpÚ
tensorflowr:   Úactivations_tfr	   Úmodeling_tf_outputsr
   r   r   r   r   r   r   r   Úmodeling_tf_utilsr   r   r   r   r   r   r   r   r   r   r   r   Útf_utilsr   r   r    Úutilsr!   r"   r#   r$   r%   r&   Úconfiguration_mobilebertr(   Ú
get_loggerrP   ÚloggerrÆ  rÇ  rA  rB  rC  r*  r-  r.  r+  r,  r  r  r  r,   r]   ÚLayerrV   ÚLayerNormalizationr{   r‚   r�   r’   rÆ   rõ   r  r  r  r   r*  r6  r;  rB  rS  re  rq  rw  r‰  r“  r®  r²  ÚMOBILEBERT_START_DOCSTRINGrÄ  r¸  rÉ  ré  rÍ  rþ  r  r  r0  r=  Ú__all__rT   rM   rK   ú<module>rV     sŸ  ðñ  å "ã Ý !ß )Ñ )ã Û å /÷	÷ 	ó 	÷÷ ÷ ó ÷ SÑ R÷÷ õ 7ð 
ˆ×	Ñ	˜HÓ	%€à1Ð Ø$€ð (LÐ $ØlÐ Ø!Ð ð =Ð Ø'Ð ØÐ ØÐ ØÐ ð +EÐ 'Ø'Ð Ø!Ð ÷Qñ Qô8M˜uŸ|™|×1Ñ1ô Mô64�%—,‘,×1Ñ1ô 4ô0ˆu�|‰|×!Ñ!ô 0ð %°Ñ
:€ôe ˜UŸ\™\×/Ñ/ô e ôPb §¡× 2Ñ 2ô bôJ+˜UŸ\™\×/Ñ/ô +ôB%3˜EŸL™L×.Ñ.ô %3ôP+˜Ÿ™×+Ñ+ô +ô8&,˜Ÿ™×+Ñ+ô &,ôR+˜Ÿ™×*Ñ*ô +ô4,+�5—<‘<×%Ñ%ô ,+ô^+�%—,‘,×$Ñ$ô +ô43�—‘×#Ñ#ô 3ô.N&˜Ÿ™×*Ñ*ô N&ôb1&˜%Ÿ,™,×,Ñ,ô 1&ôhH˜Ÿ™×+Ñ+ô Hô@+¨%¯,©,×*<Ñ*<ô +ô>. 5§<¡<×#5Ñ#5ô .ôb-˜%Ÿ,™,×,Ñ,ô -ð$ ô~(˜EŸL™L×.Ñ.ó ~(ó ð~(ôB%Ð"3ô %ð ô/ {ó /ó ð/ð<(Ð ðT5Ð ñp ØjØóô.,Ð3ó .,ó	ð.,ñb ðð óôd Ð!<Ð>Yó d óðd ñN ÐTÐVpÓqô] Ð9Ð;Wó ] ó rð] ô@S˜eŸl™l×0Ñ0ô Sñ& ØZØóôV%Ð,GÐIeó V%ó	ðV%ñr ðð óô\MÐ,GÐIeó \Móð\Mñ~ ðð óôeMÐ'BÐD[ó eMóðeMñP ðð óôgMÐ$?ÐAUó gMóðgMñT ðð óô[MÐ)DÐF_ó [Móð[Mò|�rM   