

from __future__ import annotations

import unittest

from transformers import DebertaConfig, 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 import (
        TFDebertaForMaskedLM,
        TFDebertaForQuestionAnswering,
        TFDebertaForSequenceClassification,
        TFDebertaForTokenClassification,
        TFDebertaModel,
    )







class  __lowerCamelCase				:







      def __init__(     self							,  lowerCamelCase							,  lowerCamelCase=13							,  lowerCamelCase=7							,  lowerCamelCase=True							,  lowerCamelCase=True							,  lowerCamelCase=True							,  lowerCamelCase=True							,  lowerCamelCase=99							,  lowerCamelCase=32							,  lowerCamelCase=2							,  lowerCamelCase=4							,  lowerCamelCase=37							,  lowerCamelCase="gelu"							,  lowerCamelCase=0.1							,  lowerCamelCase=0.1							,  lowerCamelCase=512							,  lowerCamelCase=16							,  lowerCamelCase=2							,  lowerCamelCase=0.02							,  lowerCamelCase=3							,  lowerCamelCase=4							,  lowerCamelCase=None							,  )						->       Tuple:
        snake_case_       						=      parent
        snake_case_       						=      13
        snake_case_       						=      7
        snake_case_       						=      True
        snake_case_       						=      True
        snake_case_       						=      True
        snake_case_       						=      True
        snake_case_       						=      99
        snake_case_       						=      32
        snake_case_       						=      2
        snake_case_       						=      4
        snake_case_       						=      37
        snake_case_       						=      """gelu"""
        snake_case_       						=      0.1
        snake_case_       						=      0.1
        snake_case_       						=      512
        snake_case_       						=      16
        snake_case_       						=      False
        snake_case_       						=      -1
        snake_case_       						=      True
        snake_case_       						=      2
        snake_case_       						=      0.02
        snake_case_       						=      3
        snake_case_       						=      4
        snake_case_       						=      None







      def 	lowerCAmelCase_    (     self   )						->       Dict:
        snake_case_       						=      ids_tensor([self.batch_size, self.seq_length]							,  self.vocab_size   )

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

        snake_case_       						=      None
        if self.use_token_type_ids:
          snake_case_       						=      ids_tensor([self.batch_size, self.seq_length]							,  self.type_vocab_size   )

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

        snake_case_       						=      DebertaConfig(
            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							,  type_vocab_size=self.type_vocab_size							,  relative_attention=self.relative_attention							,  max_relative_positions=self.max_relative_positions							,  position_biased_input=self.position_biased_input							,  initializer_range=self.initializer_range							,  return_dict=lowerCamelCase							,  )

        return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       str:
        snake_case_       						=      TFDebertaModel(config=lowerCamelCase   )
        snake_case_       						=      {"""input_ids""": input_ids, """attention_mask""": input_mask, """token_type_ids""": token_type_ids}

        snake_case_       						=      [input_ids, input_mask]
        snake_case_       						=      model(lowerCamelCase   )

        snake_case_       						=      model(lowerCamelCase   )

        self.parent.assertEqual(result.last_hidden_state.shape							,  (self.batch_size, self.seq_length, self.hidden_size)   )







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       Tuple:
        snake_case_       						=      TFDebertaForMaskedLM(config=lowerCamelCase   )
        snake_case_       						=      {
            """input_ids""": input_ids,
            """attention_mask""": input_mask,
            """token_type_ids""": token_type_ids,
        }
        snake_case_       						=      model(lowerCamelCase   )
        self.parent.assertEqual(result.logits.shape							,  (self.batch_size, self.seq_length, self.vocab_size)   )







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       Union[str, Any]:
        snake_case_       						=      self.num_labels
        snake_case_       						=      TFDebertaForSequenceClassification(config=lowerCamelCase   )
        snake_case_       						=      {
            """input_ids""": input_ids,
            """attention_mask""": input_mask,
            """token_type_ids""": token_type_ids,
        }

        snake_case_       						=      model(lowerCamelCase   )
        self.parent.assertEqual(result.logits.shape							,  (self.batch_size, self.num_labels)   )







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       List[Any]:
        snake_case_       						=      self.num_labels
        snake_case_       						=      TFDebertaForTokenClassification(config=lowerCamelCase   )
        snake_case_       						=      {
            """input_ids""": input_ids,
            """attention_mask""": input_mask,
            """token_type_ids""": token_type_ids,
        }
        snake_case_       						=      model(lowerCamelCase   )
        self.parent.assertEqual(result.logits.shape							,  (self.batch_size, self.seq_length, self.num_labels)   )







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       int:
        snake_case_       						=      TFDebertaForQuestionAnswering(config=lowerCamelCase   )
        snake_case_       						=      {
            """input_ids""": input_ids,
            """attention_mask""": input_mask,
            """token_type_ids""": token_type_ids,
        }

        snake_case_       						=      model(lowerCamelCase   )
        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 	lowerCAmelCase_    (     self   )						->       List[Any]:
        snake_case_       						=      self.prepare_config_and_inputs()
        (
            (
            snake_case_
        )						,				(
            snake_case_
        )						,				(
            snake_case_
        )						,				(
            snake_case_
        )						,				(
            snake_case_
        )						,				(
            snake_case_
        )						,				(
            snake_case_
        )						,				
        )       						=      config_and_inputs
        snake_case_       						=      {"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": input_mask}
        return config, inputs_dict







@require_tf
class  __lowerCamelCase				(	__snake_case  ,							__snake_case  ,							unittest.TestCase	):
      lowerCamelCase_	:      Optional[Any]          =					(
          (
              TFDebertaModel,
              TFDebertaForMaskedLM,
              TFDebertaForQuestionAnswering,
              TFDebertaForSequenceClassification,
              TFDebertaForTokenClassification,
          )
          if is_tf_available()
          else ()
      )
      lowerCamelCase_	:      Any          =					(
          {
              'feature-extraction': TFDebertaModel,
              'fill-mask': TFDebertaForMaskedLM,
              'question-answering': TFDebertaForQuestionAnswering,
              'text-classification': TFDebertaForSequenceClassification,
              'token-classification': TFDebertaForTokenClassification,
              'zero-shot': TFDebertaForSequenceClassification,
          }
          if is_tf_available()
          else {}
      )

      lowerCamelCase_	:      List[str]          =					False
      lowerCamelCase_	:      Tuple          =					False







      def 	lowerCAmelCase_    (     self   )						->       int:
        snake_case_       						=      TFDebertaModelTester(self   )
        snake_case_       						=      ConfigTester(self							,  config_class=lowerCamelCase							,  hidden_size=37   )







      def 	lowerCAmelCase_    (     self   )						->       Union[str, Any]:
        self.config_tester.run_common_tests()







      def 	lowerCAmelCase_    (     self   )						->       Union[str, Any]:
        snake_case_       						=      self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_model(*lowerCamelCase   )







      def 	lowerCAmelCase_    (     self   )						->       Optional[Any]:
        snake_case_       						=      self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_masked_lm(*lowerCamelCase   )







      def 	lowerCAmelCase_    (     self   )						->       int:
        snake_case_       						=      self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_question_answering(*lowerCamelCase   )







      def 	lowerCAmelCase_    (     self   )						->       List[str]:
        snake_case_       						=      self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_sequence_classification(*lowerCamelCase   )







      def 	lowerCAmelCase_    (     self   )						->       Optional[Any]:
        snake_case_       						=      self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_token_classification(*lowerCamelCase   )







      @slow
      def 	lowerCAmelCase_    (     self   )						->       Optional[int]:
        snake_case_       						=      TFDebertaModel.from_pretrained("""kamalkraj/deberta-base"""   )
        self.assertIsNotNone(lowerCamelCase   )







@require_tf
class  __lowerCamelCase				(	unittest.TestCase	):







      @unittest.skip(reason="""Model not available yet"""   )
      def 	lowerCAmelCase_    (     self   )						->       Optional[Any]:
        pass







      @slow
      def 	lowerCAmelCase_    (     self   )						->       Optional[Any]:
        snake_case_       						=      TFDebertaModel.from_pretrained("""kamalkraj/deberta-base"""   )
        snake_case_       						=      tf.constant([[0, 31414, 232, 328, 740, 1140, 12695, 69, 46078, 1588, 2]]   )
        snake_case_       						=      tf.constant([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]   )
        snake_case_       						=      model(lowerCamelCase							,  attention_mask=lowerCamelCase   )[0]

        snake_case_       						=      tf.constant(
            [
                [
                    [-0.5985_5896, -0.8055_2566, -0.846_2135],
                    [1.448_4025, -0.9348_3794, -0.8059_3085],
                    [0.312_2741, 0.0031_6059, -1.413_1377],
                ]
            ]   )
        tf.debugging.assert_near(output[:, 1:4, 1:4]							,  lowerCamelCase							,  atol=1e-4   )


import unittest

import pytest

from transformers import (
    MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING,
    MBartaaTokenizerFast,
    MBartConfig,
    MBartForConditionalGeneration,
    TranslationPipeline,
    pipeline,
)
from transformers.testing_utils import is_pipeline_test, require_tf, require_torch, slow

from .test_pipelines_common import ANY







@is_pipeline_test
class  __lowerCamelCase				(	unittest.TestCase	):
      lowerCamelCase_	:      Tuple          =					MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING
      lowerCamelCase_	:      int          =					TF_MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase							,  lowerCamelCase   )						->       Any:
        if isinstance(model.config							,  lowerCamelCase   ):
          snake_case_						,				snake_case_       						=      list(tokenizer.lang_code_to_id.keys()   )[:2]
          snake_case_       						=      TranslationPipeline(model=lowerCamelCase							,  tokenizer=lowerCamelCase							,  src_lang=lowerCamelCase							,  tgt_lang=lowerCamelCase   )
        else:
          snake_case_       						=      TranslationPipeline(model=lowerCamelCase							,  tokenizer=lowerCamelCase   )
        return translator, ["Some string", "Some other text"]







      def 	lowerCAmelCase_    (     self							,  lowerCamelCase							,  lowerCamelCase   )						->       List[str]:
        snake_case_       						=      translator("""Some string"""   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": ANY(lowerCamelCase   )}]   )

        snake_case_       						=      translator(["""Some string"""]   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": ANY(lowerCamelCase   )}]   )

        snake_case_       						=      translator(["""Some string""", """other string"""]   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": ANY(lowerCamelCase   )}, {"""translation_text""": ANY(lowerCamelCase   )}]   )







      @require_torch
      def 	lowerCAmelCase_    (     self   )						->       List[Any]:
        snake_case_       						=      pipeline("""translation_en_to_ro"""							,  model="""patrickvonplaten/t5-tiny-random"""							,  framework="""pt"""   )
        snake_case_       						=      translator("""This is a test string"""							,  max_length=20   )
        self.assertEqual(
            lowerCamelCase							,  [
                {
                    """translation_text""": (
                        """Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide"""
                        """ Beide Beide"""
                    )
                }
            ]							,  )







      @require_tf
      def 	lowerCAmelCase_    (     self   )						->       Optional[Any]:
        snake_case_       						=      pipeline("""translation_en_to_ro"""							,  model="""patrickvonplaten/t5-tiny-random"""							,  framework="""tf"""   )
        snake_case_       						=      translator("""This is a test string"""							,  max_length=20   )
        self.assertEqual(
            lowerCamelCase							,  [
                {
                    """translation_text""": (
                        """Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide Beide"""
                        """ Beide Beide"""
                    )
                }
            ]							,  )







      @require_torch
      def 	lowerCAmelCase_    (     self   )						->       Union[str, Any]:
        snake_case_       						=      pipeline("""translation_en_to_de"""							,  model="""patrickvonplaten/t5-tiny-random"""							,  framework="""pt"""   )
        snake_case_       						=      translator("""This is a test string"""							,  max_length=20   )
        self.assertEqual(
            lowerCamelCase							,  [
                {
                    """translation_text""": (
                        """monoton monoton monoton monoton monoton monoton monoton monoton monoton monoton urine urine"""
                        """ urine urine urine urine urine urine urine"""
                    )
                }
            ]							,  )







      @require_tf
      def 	lowerCAmelCase_    (     self   )						->       List[Any]:
        snake_case_       						=      pipeline("""translation_en_to_de"""							,  model="""patrickvonplaten/t5-tiny-random"""							,  framework="""tf"""   )
        snake_case_       						=      translator("""This is a test string"""							,  max_length=20   )
        self.assertEqual(
            lowerCamelCase							,  [
                {
                    """translation_text""": (
                        """monoton monoton monoton monoton monoton monoton monoton monoton monoton monoton urine urine"""
                        """ urine urine urine urine urine urine urine"""
                    )
                }
            ]							,  )







class  __lowerCamelCase				(	unittest.TestCase	):







      @require_torch
      @slow
      def 	lowerCAmelCase_    (     self   )						->       Tuple:
        # We don't provide a default for this pair
        with self.assertRaises(lowerCamelCase   ):
          pipeline(task="""translation_cn_to_ar"""   )

        # but we do for this one
        snake_case_       						=      pipeline(task="""translation_en_to_de"""   )
        self.assertEqual(translator._preprocess_params["""src_lang"""]							,  """en"""   )
        self.assertEqual(translator._preprocess_params["""tgt_lang"""]							,  """de"""   )







      @require_torch
      @slow
      def 	lowerCAmelCase_    (     self   )						->       int:
        snake_case_       						=      MBartForConditionalGeneration.from_pretrained("""facebook/mbart-large-50-many-to-many-mmt"""   )
        snake_case_       						=      MBartaaTokenizerFast.from_pretrained("""facebook/mbart-large-50-many-to-many-mmt"""   )

        snake_case_       						=      pipeline(task="""translation"""							,  model=lowerCamelCase							,  tokenizer=lowerCamelCase   )
        # Missing src_lang, tgt_lang
        with self.assertRaises(lowerCamelCase   ):
          translator("""This is a test"""   )

        snake_case_       						=      translator("""This is a test"""							,  src_lang="""en_XX"""							,  tgt_lang="""ar_AR"""   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": """هذا إختبار"""}]   )

        snake_case_       						=      translator("""This is a test"""							,  src_lang="""en_XX"""							,  tgt_lang="""hi_IN"""   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": """यह एक परीक्षण है"""}]   )

        # src_lang, tgt_lang can be defined at pipeline call time
        snake_case_       						=      pipeline(task="""translation"""							,  model=lowerCamelCase							,  tokenizer=lowerCamelCase							,  src_lang="""en_XX"""							,  tgt_lang="""ar_AR"""   )
        snake_case_       						=      translator("""This is a test"""   )
        self.assertEqual(lowerCamelCase							,  [{"""translation_text""": """هذا إختبار"""}]   )







      @require_torch
      def 	lowerCAmelCase_    (     self   )						->       int:
        snake_case_       						=      """patrickvonplaten/t5-tiny-random"""
        snake_case_       						=      pipeline(task="""translation_cn_to_ar"""							,  model=lowerCamelCase   )
        self.assertEqual(translator._preprocess_params["""src_lang"""]							,  """cn"""   )
        self.assertEqual(translator._preprocess_params["""tgt_lang"""]							,  """ar"""   )







      @require_torch
      def 	lowerCAmelCase_    (     self   )						->       List[str]:
        snake_case_       						=      """patrickvonplaten/t5-tiny-random"""
        with pytest.warns(lowerCamelCase							,  match=r""".*translation_en_to_de.*"""   ):
          snake_case_       						=      pipeline(task="""translation"""							,  model=lowerCamelCase   )
        self.assertEqual(translator.task							,  """translation_en_to_de"""   )
        self.assertEqual(translator._preprocess_params["""src_lang"""]							,  """en"""   )
        self.assertEqual(translator._preprocess_params["""tgt_lang"""]							,  """de"""   )







      @require_torch
      def 	lowerCAmelCase_    (     self   )						->       Any:
        with self.assertRaises(lowerCamelCase   ):
          pipeline(task="""translation"""   )