
"""simple docstring"""
from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


_a   :      List[Any]       =				{
    """configuration_markuplm""": ["""MARKUPLM_PRETRAINED_CONFIG_ARCHIVE_MAP""", """MarkupLMConfig"""],
    """feature_extraction_markuplm""": ["""MarkupLMFeatureExtractor"""],
    """processing_markuplm""": ["""MarkupLMProcessor"""],
    """tokenization_markuplm""": ["""MarkupLMTokenizer"""],
}

try:
    if not is_tokenizers_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    _a   :      List[str]       =				["""MarkupLMTokenizerFast"""]

try:
    if not is_torch_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    _a   :      Any       =				[
        """MARKUPLM_PRETRAINED_MODEL_ARCHIVE_LIST""",
        """MarkupLMForQuestionAnswering""",
        """MarkupLMForSequenceClassification""",
        """MarkupLMForTokenClassification""",
        """MarkupLMModel""",
        """MarkupLMPreTrainedModel""",
    ]


if TYPE_CHECKING:
    from .configuration_markuplm import MARKUPLM_PRETRAINED_CONFIG_ARCHIVE_MAP, MarkupLMConfig
    from .feature_extraction_markuplm import MarkupLMFeatureExtractor
    from .processing_markuplm import MarkupLMProcessor
    from .tokenization_markuplm import MarkupLMTokenizer

    try:
        if not is_tokenizers_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .tokenization_markuplm_fast import MarkupLMTokenizerFast

    try:
        if not is_torch_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_markuplm import (
            MARKUPLM_PRETRAINED_MODEL_ARCHIVE_LIST,
            MarkupLMForQuestionAnswering,
            MarkupLMForSequenceClassification,
            MarkupLMForTokenClassification,
            MarkupLMModel,
            MarkupLMPreTrainedModel,
        )


else:
    import sys

    _a   :      int       =				_LazyModule(__name__, globals()["""__file__"""], _import_structure)





from __future__ import annotations

import unittest

from transformers import MPNetConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
  import tensorflow as tf

  from transformers.models.mpnet.modeling_tf_mpnet import (
      TFMPNetForMaskedLM,
      TFMPNetForMultipleChoice,
      TFMPNetForQuestionAnswering,
      TFMPNetForSequenceClassification,
      TFMPNetForTokenClassification,
      TFMPNetModel,
  )







class  lowerCamelCase__  :





     def __init__(self						,	UpperCAmelCase						,	UpperCAmelCase=1_3						,	UpperCAmelCase=7						,	UpperCAmelCase=True						,	UpperCAmelCase=True						,	UpperCAmelCase=False						,	UpperCAmelCase=True						,	UpperCAmelCase=9_9						,	UpperCAmelCase=6_4						,	UpperCAmelCase=2						,	UpperCAmelCase=4						,	UpperCAmelCase=6_4						,	UpperCAmelCase="gelu"						,	UpperCAmelCase=0.1						,	UpperCAmelCase=0.1						,	UpperCAmelCase=5_1_2						,	UpperCAmelCase=1_6						,	UpperCAmelCase=2						,	UpperCAmelCase=0.02						,	UpperCAmelCase=3						,	UpperCAmelCase=4						,	UpperCAmelCase=None						,	)	->  Optional[Any]:
      _lowercase				 =parent
      _lowercase				 =batch_size
      _lowercase				 =seq_length
      _lowercase				 =is_training
      _lowercase				 =use_input_mask
      _lowercase				 =use_token_type_ids
      _lowercase				 =use_labels
      _lowercase				 =vocab_size
      _lowercase				 =hidden_size
      _lowercase				 =num_hidden_layers
      _lowercase				 =num_attention_heads
      _lowercase				 =intermediate_size
      _lowercase				 =hidden_act
      _lowercase				 =hidden_dropout_prob
      _lowercase				 =attention_probs_dropout_prob
      _lowercase				 =max_position_embeddings
      _lowercase				 =type_vocab_size
      _lowercase				 =type_sequence_label_size
      _lowercase				 =initializer_range
      _lowercase				 =num_labels
      _lowercase				 =num_choices
      _lowercase				 =scope





     def 	__A   (self			)	->  Union[str, Any]:
      _lowercase				 =ids_tensor([self.batch_size, self.seq_length]						,	self.vocab_size			)

      _lowercase				 =None
      if self.use_input_mask:
       _lowercase				 =random_attention_mask([self.batch_size, self.seq_length]			)

      _lowercase				 =None
      _lowercase				 =None
      _lowercase				 =None
      if self.use_labels:
       _lowercase				 =ids_tensor([self.batch_size]						,	self.type_sequence_label_size			)
       _lowercase				 =ids_tensor([self.batch_size, self.seq_length]						,	self.num_labels			)
       _lowercase				 =ids_tensor([self.batch_size]						,	self.num_choices			)

      _lowercase				 =MPNetConfig(
          vocab_size=self.vocab_size						,	hidden_size=self.hidden_size						,	num_hidden_layers=self.num_hidden_layers						,	num_attention_heads=self.num_attention_heads						,	intermediate_size=self.intermediate_size						,	hidden_act=self.hidden_act						,	hidden_dropout_prob=self.hidden_dropout_prob						,	attention_probs_dropout_prob=self.attention_probs_dropout_prob						,	max_position_embeddings=self.max_position_embeddings						,	initializer_range=self.initializer_range						,	)
      return config, input_ids, input_mask, sequence_labels, token_labels, choice_labels





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  Tuple:
      _lowercase				 =TFMPNetModel(config=UpperCAmelCase			)
      _lowercase				 ={'''input_ids''': input_ids, '''attention_mask''': input_mask}
      _lowercase				 =model(UpperCAmelCase			)
      _lowercase				 =[input_ids, input_mask]
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.last_hidden_state.shape						,	(self.batch_size, self.seq_length, self.hidden_size)			)





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  int:
      _lowercase				 =TFMPNetForMaskedLM(config=UpperCAmelCase			)
      _lowercase				 ={'''input_ids''': input_ids, '''attention_mask''': input_mask}
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.seq_length, self.vocab_size)			)





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  Union[str, Any]:
      _lowercase				 =TFMPNetForQuestionAnswering(config=UpperCAmelCase			)
      _lowercase				 ={
          '''input_ids''': input_ids,
          '''attention_mask''': input_mask,
      }
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.start_logits.shape						,	(self.batch_size, self.seq_length)			)
      self.parent.assertEqual(result.end_logits.shape						,	(self.batch_size, self.seq_length)			)





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  Dict:
      _lowercase				 =self.num_labels
      _lowercase				 =TFMPNetForSequenceClassification(UpperCAmelCase			)
      _lowercase				 ={'''input_ids''': input_ids, '''attention_mask''': input_mask}
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.num_labels)			)





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  List[Any]:
      _lowercase				 =self.num_choices
      _lowercase				 =TFMPNetForMultipleChoice(UpperCAmelCase			)
      _lowercase				 =tf.tile(tf.expand_dims(UpperCAmelCase						,	1			)						,	(1, self.num_choices, 1)			)
      _lowercase				 =tf.tile(tf.expand_dims(UpperCAmelCase						,	1			)						,	(1, self.num_choices, 1)			)
      _lowercase				 ={
          '''input_ids''': multiple_choice_inputs_ids,
          '''attention_mask''': multiple_choice_input_mask,
      }
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.num_choices)			)





     def 	__A   (self						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase						,	UpperCAmelCase			)	->  Dict:
      _lowercase				 =self.num_labels
      _lowercase				 =TFMPNetForTokenClassification(UpperCAmelCase			)
      _lowercase				 ={'''input_ids''': input_ids, '''attention_mask''': input_mask}
      _lowercase				 =model(UpperCAmelCase			)
      self.parent.assertEqual(result.logits.shape						,	(self.batch_size, self.seq_length, self.num_labels)			)





     def 	__A   (self			)	->  List[Any]:
      _lowercase				 =self.prepare_config_and_inputs()
      ((_lowercase) ,       (_lowercase) ,       (_lowercase) ,       (_lowercase) ,       (_lowercase) ,       (_lowercase))				 =config_and_inputs
      _lowercase				 ={'''input_ids''': input_ids, '''attention_mask''': input_mask}
      return config, inputs_dict







@require_tf
class  lowerCamelCase__  (			lowerCAmelCase  ,				lowerCAmelCase  ,				unittest.TestCase):
     SCREAMING_SNAKE_CASE__      =     (
         (
             TFMPNetForMaskedLM,
             TFMPNetForMultipleChoice,
             TFMPNetForQuestionAnswering,
             TFMPNetForSequenceClassification,
             TFMPNetForTokenClassification,
             TFMPNetModel,
         )
         if is_tf_available()
         else ()
     )
     SCREAMING_SNAKE_CASE__      =     (
         {
             '''feature-extraction''': TFMPNetModel,
             '''fill-mask''': TFMPNetForMaskedLM,
             '''question-answering''': TFMPNetForQuestionAnswering,
             '''text-classification''': TFMPNetForSequenceClassification,
             '''token-classification''': TFMPNetForTokenClassification,
             '''zero-shot''': TFMPNetForSequenceClassification,
         }
         if is_tf_available()
         else {}
     )
     SCREAMING_SNAKE_CASE__      =     False
     SCREAMING_SNAKE_CASE__      =     False





     def 	__A   (self			)	->  Union[str, Any]:
      _lowercase				 =TFMPNetModelTester(self			)
      _lowercase				 =ConfigTester(self						,	config_class=UpperCAmelCase						,	hidden_size=3_7			)





     def 	__A   (self			)	->  Optional[Any]:
      self.config_tester.run_common_tests()





     def 	__A   (self			)	->  Tuple:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_model(*UpperCAmelCase			)





     def 	__A   (self			)	->  Tuple:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_for_masked_lm(*UpperCAmelCase			)





     def 	__A   (self			)	->  str:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_for_question_answering(*UpperCAmelCase			)





     def 	__A   (self			)	->  List[str]:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_for_sequence_classification(*UpperCAmelCase			)





     def 	__A   (self			)	->  Any:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_for_multiple_choice(*UpperCAmelCase			)





     def 	__A   (self			)	->  List[str]:
      _lowercase				 =self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_mpnet_for_token_classification(*UpperCAmelCase			)





     @slow
     def 	__A   (self			)	->  Tuple:
      for model_name in ["microsoft/mpnet-base"]:
       _lowercase				 =TFMPNetModel.from_pretrained(UpperCAmelCase			)
       self.assertIsNotNone(UpperCAmelCase			)







@require_tf
class  lowerCamelCase__  (			unittest.TestCase):





     @slow
     def 	__A   (self			)	->  Dict:
      _lowercase				 =TFMPNetModel.from_pretrained('''microsoft/mpnet-base'''			)
      _lowercase				 =tf.constant([[0, 1, 2, 3, 4, 5]]			)
      _lowercase				 =model(UpperCAmelCase			)[0]

      _lowercase				 =[1, 6, 7_6_8]
      self.assertEqual(output.shape						,	UpperCAmelCase			)

      _lowercase				 =tf.constant(
          [
              [
                  [-0.106_7172, 0.0821_6473, 0.002_4543],
                  [-0.0346_5879, 0.835_4118, -0.0325_2288],
                  [-0.0656_9476, -0.1242_4111, -0.049_4436],
              ]
          ]			)
      tf.debugging.assert_near(output[:, :3, :3]						,	UpperCAmelCase						,	atol=1e-4			)

