


'''simple docstring'''

import unittest

from transformers.testing_utils import is_torch_available, require_torch, tooslow

from ...generation.test_utils import torch_device
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
     import torch

     from transformers import (
         CpmAntConfig,
         CpmAntForCausalLM,
         CpmAntModel,
         CpmAntTokenizer,
     )
@require_torch
class   __lowerCAmelCase						:





      '''simple docstring'''






      def __init__(self   :   Optional[Any]       ,						UpperCamelCase   :   Union[str, Any]       ,						UpperCamelCase   :   Optional[Any]=2       ,						UpperCamelCase   :   Dict=8       ,						UpperCamelCase   :   Optional[int]=True       ,						UpperCamelCase   :   str=False       ,						UpperCamelCase   :   Tuple=False       ,						UpperCamelCase   :   Union[str, Any]=False       ,						UpperCamelCase   :   str=False       ,						UpperCamelCase   :   Union[str, Any]=99       ,						UpperCamelCase   :   List[str]=32       ,						UpperCamelCase   :   Tuple=3       ,						UpperCamelCase   :   Optional[Any]=4       ,						UpperCamelCase   :   Tuple=37       ,						UpperCamelCase   :   List[Any]=32       ,						UpperCamelCase   :   Tuple=128       ,						UpperCamelCase   :   Dict=8       ,						UpperCamelCase   :   Dict=8       ,						UpperCamelCase   :   List[str]=8       ,						UpperCamelCase   :   Dict=1.0       ,						UpperCamelCase   :   List[Any]=True       ,						):

             '''simple docstring'''







             lowercase__				      =			parent
             lowercase__				      =			batch_size
             lowercase__				      =			seq_length
             lowercase__				      =			is_training
             lowercase__				      =			use_token_type_ids
             lowercase__				      =			use_input_mask
             lowercase__				      =			use_labels
             lowercase__				      =			use_mc_token_ids
             lowercase__				      =			vocab_size
             lowercase__				      =			hidden_size
             lowercase__				      =			num_hidden_layers
             lowercase__				      =			num_attention_heads
             lowercase__				      =			intermediate_size
             lowercase__				      =			num_buckets
             lowercase__				      =			max_distance
             lowercase__				      =			prompt_length
             lowercase__				      =			prompt_types
             lowercase__				      =			segment_types
             lowercase__				      =			init_std
             lowercase__				      =			return_dict



      def 				UpperCamelCase__		(self   :   List[Any]			):

             '''simple docstring'''







             lowercase__				      =			{}
             lowercase__				      =			ids_tensor([self.batch_size, self.seq_length]       ,						self.vocab_size			).type(torch.intaa			)
             lowercase__				      =			False

             lowercase__				      =			self.get_config()

             return (config, input_ids)



      def 				UpperCamelCase__		(self   :   Any			):

             '''simple docstring'''







             return CpmAntConfig(
                 vocab_size=self.vocab_size       ,						hidden_size=self.hidden_size       ,						num_hidden_layers=self.num_hidden_layers       ,						num_attention_heads=self.num_attention_heads       ,						dim_ff=self.intermediate_size       ,						position_bias_num_buckets=self.num_buckets       ,						position_bias_max_distance=self.max_distance       ,						prompt_types=self.prompt_types       ,						prompt_length=self.prompt_length       ,						segment_types=self.segment_types       ,						use_cache=UpperCamelCase       ,						init_std=self.init_std       ,						return_dict=self.return_dict       ,						)



      def 				UpperCamelCase__		(self   :   Optional[Any]       ,						UpperCamelCase   :   str       ,						UpperCamelCase   :   Tuple       ,						*UpperCamelCase   :   int			):

             '''simple docstring'''







             lowercase__				      =			CpmAntModel(config=UpperCamelCase			)
             model.to(UpperCamelCase			)
             model.eval()

             lowercase__				      =			model(**UpperCamelCase			).last_hidden_state

             self.parent.assertEqual(hidden_states.shape       ,						(self.batch_size, self.seq_length, config.hidden_size)			)



      def 				UpperCamelCase__		(self   :   Optional[int]       ,						UpperCamelCase   :   List[str]       ,						UpperCamelCase   :   int       ,						*UpperCamelCase   :   Union[str, Any]			):

             '''simple docstring'''







             lowercase__				      =			CpmAntForCausalLM(UpperCamelCase			)
             model.to(UpperCamelCase			)
             lowercase__				      =			input_ids["input_ids"].to(UpperCamelCase			)
             model.eval()

             lowercase__				      =			model(**UpperCamelCase			)
             self.parent.assertEqual(
                 model_output.logits.shape       ,						(self.batch_size, self.seq_length, config.vocab_size + config.prompt_types * config.prompt_length)       ,						)






      def 				UpperCamelCase__		(self   :   List[str]			):

             '''simple docstring'''







             lowercase__				      =			self.prepare_config_and_inputs()
             return config, inputs_dict






@require_torch
class   __lowerCAmelCase						(lowerCamelCase_  ,					lowerCamelCase_  ,					unittest.TestCase					):





      '''simple docstring'''






      lowerCAmelCase__ :					Optional[int]   =							(CpmAntModel, CpmAntForCausalLM) if is_torch_available() else ()
      lowerCAmelCase__ :					List[str]   =							(
          {"""feature-extraction""": CpmAntModel, """text-generation""": CpmAntForCausalLM} if is_torch_available() else {}
      )

      lowerCAmelCase__ :					List[Any]   =							False
      lowerCAmelCase__ :					Any   =							False
      lowerCAmelCase__ :					Any   =							False
      lowerCAmelCase__ :					Optional[Any]   =							False
      lowerCAmelCase__ :					Optional[int]   =							False



      def 				UpperCamelCase__		(self   :   List[Any]			):

             '''simple docstring'''







             lowercase__				      =			CpmAntModelTester(self			)
             lowercase__				      =			ConfigTester(self       ,						config_class=UpperCamelCase			)



      def 				UpperCamelCase__		(self   :   Union[str, Any]			):

             '''simple docstring'''







             self.config_tester.create_and_test_config_common_properties()
             self.config_tester.create_and_test_config_to_json_string()
             self.config_tester.create_and_test_config_to_json_file()
             self.config_tester.create_and_test_config_from_and_save_pretrained()
             self.config_tester.check_config_can_be_init_without_params()
             self.config_tester.check_config_arguments_init()



      def 				UpperCamelCase__		(self   :   Optional[Any]			):

             '''simple docstring'''







             unittest.skip('''CPMAnt doesn\'t support input_embeds.'''			)(self.test_inputs_embeds			)



      def 				UpperCamelCase__		(self   :   str			):

             '''simple docstring'''







             unittest.skip(
                 '''CPMAnt doesn\'t support retain grad in hidden_states or attentions, because prompt management will peel off the output.hidden_states from graph.\
                 So is attentions. We strongly recommand you use loss to tune model.'''			)(self.test_retain_grad_hidden_states_attentions			)



      def 				UpperCamelCase__		(self   :   Dict			):

             '''simple docstring'''







             lowercase__				      =			self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_cpmant_model(UpperCamelCase       ,						UpperCamelCase			)






      def 				UpperCamelCase__		(self   :   Dict			):

             '''simple docstring'''







             lowercase__				      =			self.model_tester.prepare_config_and_inputs()
             self.model_tester.create_and_check_lm_head_model(UpperCamelCase       ,						UpperCamelCase			)






@require_torch
class   __lowerCAmelCase						(unittest.TestCase					):





      '''simple docstring'''






      @tooslow
      def 				UpperCamelCase__		(self   :   Optional[Any]			):

             '''simple docstring'''







             lowercase__				      =			"今天天气真好！"
             lowercase__				      =			"openbmb/cpm-ant-10b"
             lowercase__				      =			CpmAntModel.from_pretrained(UpperCamelCase			)
             lowercase__				      =			CpmAntTokenizer.from_pretrained(UpperCamelCase			)
             lowercase__				      =			tokenizer(UpperCamelCase       ,						return_tensors='''pt'''			)
             lowercase__				      =			model(**UpperCamelCase			).last_hidden_state

             lowercase__				      =			torch.tensor(
                 [[[6.17_08, 5.92_44, 1.08_35], [6.52_07, 6.28_93, -11.33_24], [-1.01_07, -0.05_76, -5.95_77]]]       ,						)
             self.assertTrue(torch.allclose(hidden_states[:, :3, :3]       ,						UpperCamelCase       ,						atol=1E-2			)			)






@require_torch
class   __lowerCAmelCase						(unittest.TestCase					):





      '''simple docstring'''






      @tooslow
      def 				UpperCamelCase__		(self   :   Any			):

             '''simple docstring'''







             lowercase__				      =			"今天天气真好！"
             lowercase__				      =			"openbmb/cpm-ant-10b"
             lowercase__				      =			CpmAntForCausalLM.from_pretrained(UpperCamelCase			)
             lowercase__				      =			CpmAntTokenizer.from_pretrained(UpperCamelCase			)
             lowercase__				      =			tokenizer(UpperCamelCase       ,						return_tensors='''pt'''			)
             lowercase__				      =			model(**UpperCamelCase			).logits

             lowercase__				      =			torch.tensor(
                 [[[-6.42_67, -6.40_83, -6.39_58], [-5.88_02, -5.94_47, -5.78_11], [-5.38_96, -5.48_20, -5.42_95]]]       ,						)
             self.assertTrue(torch.allclose(hidden_states[:, :3, :3]       ,						UpperCamelCase       ,						atol=1E-2			)			)



      @tooslow
      def 				UpperCamelCase__		(self   :   int			):

             '''simple docstring'''







             lowercase__				      =			"openbmb/cpm-ant-10b"
             lowercase__				      =			CpmAntForCausalLM.from_pretrained(UpperCamelCase			)
             lowercase__				      =			CpmAntTokenizer.from_pretrained(UpperCamelCase			)
             lowercase__				      =			"今天天气不错，"
             lowercase__				      =			"今天天气不错，阳光明媚，我和妈妈一起去超市买东西。\n在超市里，我看到了一个很好玩的玩具，它的名字叫“机器人”。它有一个圆圆的脑袋，两只圆圆的眼睛，还有一个圆圆的"
             lowercase__				      =			tokenizer(UpperCamelCase       ,						return_tensors='''pt'''			)
             lowercase__				      =			model.generate(**UpperCamelCase			)
             lowercase__				      =			tokenizer.batch_decode(UpperCamelCase			)
             self.assertEqual(UpperCamelCase       ,						UpperCamelCase			)






      @tooslow
      def 				UpperCamelCase__		(self   :   List[str]			):

             '''simple docstring'''







             lowercase__				      =			"openbmb/cpm-ant-10b"
             lowercase__				      =			CpmAntForCausalLM.from_pretrained(UpperCamelCase			)
             lowercase__				      =			CpmAntTokenizer.from_pretrained(UpperCamelCase			)
             lowercase__				      =			["今天天气不错，", "新年快乐，万事如意！"]
             lowercase__				      =			[
                 "今天天气不错，阳光明媚，我和妈妈一起去超市买东西。\n在超市里，我看到了一个很好玩的玩具，它的名字叫“机器人”。它有一个圆圆的脑袋，两只圆圆的眼睛，还有一个圆圆的",
                 "新年快乐，万事如意！在这辞旧迎新的美好时刻，我谨代表《农村新技术》杂志社全体同仁，向一直以来关心、支持《农村新技术》杂志发展的各级领导、各界朋友和广大读者致以最诚挚的",
             ]
             lowercase__				      =			tokenizer(UpperCamelCase       ,						return_tensors='''pt'''       ,						padding=UpperCamelCase			)
             lowercase__				      =			model.generate(**UpperCamelCase			)
             lowercase__				      =			tokenizer.batch_decode(UpperCamelCase			)
             self.assertEqual(UpperCamelCase       ,						UpperCamelCase			)








'''simple docstring'''

def _SCREAMING_SNAKE_CASE				(A	)	->	int:






       """simple docstring"""







       return 1 if input_a == 0 else 0

def _SCREAMING_SNAKE_CASE				()	->	None:






       """simple docstring"""







       assert not_gate(0	) == 1
       assert not_gate(1	) == 0


if __name__ == "__main__":
 print(not_gate(0))
 print(not_gate(1))




