





"""simple docstring"""


import unittest

from transformers import ErnieMConfig, is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
   import torch

   from transformers import (
       ErnieMForInformationExtraction,
       ErnieMForMultipleChoice,
       ErnieMForQuestionAnswering,
       ErnieMForSequenceClassification,
       ErnieMForTokenClassification,
       ErnieMModel,
   )
   from transformers.models.ernie_m.modeling_ernie_m import ERNIE_M_PRETRAINED_MODEL_ARCHIVE_LIST



class   lowercase_					:

       def __init__(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE=13 ,       __SCREAMING_SNAKE_CASE=7 ,       __SCREAMING_SNAKE_CASE=True ,       __SCREAMING_SNAKE_CASE=True ,       __SCREAMING_SNAKE_CASE=True ,       __SCREAMING_SNAKE_CASE=99 ,       __SCREAMING_SNAKE_CASE=32 ,       __SCREAMING_SNAKE_CASE=5 ,       __SCREAMING_SNAKE_CASE=4 ,       __SCREAMING_SNAKE_CASE=37 ,       __SCREAMING_SNAKE_CASE="gelu" ,       __SCREAMING_SNAKE_CASE=0.1 ,       __SCREAMING_SNAKE_CASE=0.1 ,       __SCREAMING_SNAKE_CASE=512 ,       __SCREAMING_SNAKE_CASE=16 ,       __SCREAMING_SNAKE_CASE=2 ,       __SCREAMING_SNAKE_CASE=0.02 ,       __SCREAMING_SNAKE_CASE=3 ,       __SCREAMING_SNAKE_CASE=4 ,       __SCREAMING_SNAKE_CASE=None ,       ):






        '''simple docstring'''

        snake_case__     				=					parent
        snake_case__     				=					batch_size
        snake_case__     				=					seq_length
        snake_case__     				=					is_training
        snake_case__     				=					use_input_mask
        snake_case__     				=					use_labels
        snake_case__     				=					vocab_size
        snake_case__     				=					hidden_size
        snake_case__     				=					num_hidden_layers
        snake_case__     				=					num_attention_heads
        snake_case__     				=					intermediate_size
        snake_case__     				=					hidden_act
        snake_case__     				=					hidden_dropout_prob
        snake_case__     				=					attention_probs_dropout_prob
        snake_case__     				=					max_position_embeddings
        snake_case__     				=					type_vocab_size
        snake_case__     				=					type_sequence_label_size
        snake_case__     				=					initializer_range
        snake_case__     				=					num_labels
        snake_case__     				=					num_choices
        snake_case__     				=					scope

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        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
        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__     				=					ids_tensor([self.batch_size] ,       self.num_choices  )

        snake_case__     				=					self.get_config()

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

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        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__     				=					self.get_config()

        return config, input_ids, input_mask

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        return ErnieMConfig(
            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 ,       initializer_range=self.initializer_range ,       )

       def 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					ErnieMModel(config=__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        snake_case__     				=					model(__SCREAMING_SNAKE_CASE ,       return_dict=__SCREAMING_SNAKE_CASE  )
        self.parent.assertEqual(result.last_hidden_state.shape ,       (self.batch_size, self.seq_length, self.hidden_size)  )

       def 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					ErnieMForQuestionAnswering(config=__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        snake_case__     				=					model(
            __SCREAMING_SNAKE_CASE ,       attention_mask=__SCREAMING_SNAKE_CASE ,       start_positions=__SCREAMING_SNAKE_CASE ,       end_positions=__SCREAMING_SNAKE_CASE ,       )
        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 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					ErnieMForInformationExtraction(config=__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        snake_case__     				=					torch.ones_like(__SCREAMING_SNAKE_CASE ,       dtype=torch.floataa  )
        snake_case__     				=					model(
            __SCREAMING_SNAKE_CASE ,       attention_mask=__SCREAMING_SNAKE_CASE ,       start_positions=__SCREAMING_SNAKE_CASE ,       end_positions=__SCREAMING_SNAKE_CASE ,       )
        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 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					self.num_labels
        snake_case__     				=					ErnieMForSequenceClassification(__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        snake_case__     				=					model(__SCREAMING_SNAKE_CASE ,       attention_mask=__SCREAMING_SNAKE_CASE ,       labels=__SCREAMING_SNAKE_CASE  )
        self.parent.assertEqual(result.logits.shape ,       (self.batch_size, self.num_labels)  )

       def 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					self.num_labels
        snake_case__     				=					ErnieMForTokenClassification(config=__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        input_ids.to(__SCREAMING_SNAKE_CASE  )
        input_mask.to(__SCREAMING_SNAKE_CASE  )
        token_labels.to(__SCREAMING_SNAKE_CASE  )

        snake_case__     				=					model(__SCREAMING_SNAKE_CASE ,       attention_mask=__SCREAMING_SNAKE_CASE ,       labels=__SCREAMING_SNAKE_CASE  )

        self.parent.assertEqual(result.logits.shape ,       (self.batch_size, self.seq_length, self.num_labels)  )

       def 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        snake_case__     				=					self.num_choices
        snake_case__     				=					ErnieMForMultipleChoice(config=__SCREAMING_SNAKE_CASE  )
        model.to(__SCREAMING_SNAKE_CASE  )
        model.eval()
        snake_case__     				=					input_ids.unsqueeze(1  ).expand(-1 ,       self.num_choices ,       -1  ).contiguous()
        snake_case__     				=					input_mask.unsqueeze(1  ).expand(-1 ,       self.num_choices ,       -1  ).contiguous()
        snake_case__     				=					model(
            __SCREAMING_SNAKE_CASE ,       attention_mask=__SCREAMING_SNAKE_CASE ,       labels=__SCREAMING_SNAKE_CASE ,       )
        self.parent.assertEqual(result.logits.shape ,       (self.batch_size, self.num_choices)  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.prepare_config_and_inputs()
        (
            (
            snake_case__
        )				, (
            snake_case__
        )				, (
            snake_case__
        )				, (
            snake_case__
        )				, (
            snake_case__
        )				, (
            snake_case__
        )				, 
        )     				=					config_and_inputs
        snake_case__     				=					{"input_ids": input_ids, "attention_mask": input_mask}
        return config, inputs_dict



@require_torch
class   lowercase_					(  __lowerCAmelCase					,__lowerCAmelCase					,unittest.TestCase				):
       snake_case__					:				Optional[Any]									=  (
           (
               ErnieMModel,
               ErnieMForMultipleChoice,
               ErnieMForQuestionAnswering,
               ErnieMForSequenceClassification,
               ErnieMForTokenClassification,
           )
           if is_torch_available()
           else ()
       )
       snake_case__					:				List[Any]									=  ()
       snake_case__					:				Dict									=  (
           {
               """feature-extraction""": ErnieMModel,
               """question-answering""": ErnieMForQuestionAnswering,
               """text-classification""": ErnieMForSequenceClassification,
               """token-classification""": ErnieMForTokenClassification,
               """zero-shot""": ErnieMForSequenceClassification,
           }
           if is_torch_available()
           else {}
       )
       snake_case__					:				Optional[Any]									=  False

       def 		_SCREAMING_SNAKE_CASE(      self ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE ,       __SCREAMING_SNAKE_CASE  ):






        '''simple docstring'''

        if pipeline_test_casse_name == "QAPipelineTests":
         return True

        return False

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					ErnieMModelTester(self  )
        snake_case__     				=					ConfigTester(self ,       config_class=__SCREAMING_SNAKE_CASE ,       hidden_size=37  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        self.config_tester.run_common_tests()

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_model(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        for type in ["absolute", "relative_key", "relative_key_query"]:
         snake_case__     				=					type
         self.model_tester.create_and_check_model(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_multiple_choice(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_question_answering(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_sequence_classification(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_information_extraction(*__SCREAMING_SNAKE_CASE  )

       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					self.model_tester.prepare_config_and_inputs()
        self.model_tester.create_and_check_for_token_classification(*__SCREAMING_SNAKE_CASE  )

       @slow
       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        for model_name in ERNIE_M_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
         snake_case__     				=					ErnieMModel.from_pretrained(__SCREAMING_SNAKE_CASE  )
         self.assertIsNotNone(__SCREAMING_SNAKE_CASE  )



@require_torch
class   lowercase_					(  unittest.TestCase				):

       @slow
       def 		_SCREAMING_SNAKE_CASE(      self  ):






        '''simple docstring'''

        snake_case__     				=					ErnieMModel.from_pretrained("susnato/ernie-m-base_pytorch"  )
        model.eval()
        snake_case__     				=					torch.tensor([[0, 1, 2, 3, 4, 5]]  )
        snake_case__     				=					model(__SCREAMING_SNAKE_CASE  )[0]

        # TODO Replace vocab size
        snake_case__     				=					768

        snake_case__     				=					torch.Size((1, 6, hidden_size)  )
        self.assertEqual(output.shape ,       __SCREAMING_SNAKE_CASE  )

        snake_case__     				=					torch.tensor(
            [[[-0.0012, 0.1245, -0.0214], [-0.0742, 0.0244, -0.0771], [-0.0333, 0.1164, -0.1554]]]  )

        self.assertTrue(torch.allclose(output[:, :3, :3] ,       __SCREAMING_SNAKE_CASE ,       atol=1e-3  )  )








"""simple docstring"""


def 				a__      (	_UpperCAmelCase						)     ->	int:

 '''simple docstring'''






 snake_case__     				=					0
 for plain_chr in plain_text:
  snake_case__     				=					(
      ord(_UpperCAmelCase						) + (hash_value << 6) + (hash_value << 1_6) - hash_value
  )
 return hash_value

