


"""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   __A  :





							'''simple docstring'''

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



														"""simple docstring"""



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



							def 		lowerCAmelCase							(					self				:   Any							)       ->Tuple:



														"""simple docstring"""



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

														snake_case_     							=		self.get_config()

														return (config, input_ids)



							def 		lowerCAmelCase							(					self				:   Optional[int]							)       ->Dict:



														"""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 		lowerCAmelCase							(					self				:   Tuple		,							UpperCAmelCase_				:   str		,							UpperCAmelCase_				:   Dict		,							*UpperCAmelCase_				:   List[Any]							)       ->Tuple:



														"""simple docstring"""



														snake_case_     							=		CpmAntModel(config=UpperCAmelCase_							)
														model.to(UpperCAmelCase_							)
														model.eval()

														snake_case_     							=		model(**UpperCAmelCase_							).last_hidden_state

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



							def 		lowerCAmelCase							(					self				:   List[str]		,							UpperCAmelCase_				:   Dict		,							UpperCAmelCase_				:   List[str]		,							*UpperCAmelCase_				:   Tuple							)       ->Optional[int]:



														"""simple docstring"""



														snake_case_     							=		CpmAntForCausalLM(UpperCAmelCase_							)
														model.to(UpperCAmelCase_							)
														snake_case_     							=		input_ids["""input_ids"""].to(UpperCAmelCase_							)
														model.eval()

														snake_case_     							=		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 		lowerCAmelCase							(					self				:   str							)       ->Any:



														"""simple docstring"""



														snake_case_							,    snake_case_     							=		self.prepare_config_and_inputs()
														return config, inputs_dict





@require_torch
class   __A  (snake_case__    ,		snake_case__    ,		unittest.TestCase):





							'''simple docstring'''

							__lowercase:		List[Any]				   =     (CpmAntModel, CpmAntForCausalLM) if is_torch_available() else ()
							__lowercase:		Union[str, Any]				   =     (
							    {"""feature-extraction""": CpmAntModel, """text-generation""": CpmAntForCausalLM} if is_torch_available() else {}
							)

							__lowercase:		int				   =     False
							__lowercase:		Any				   =     False
							__lowercase:		Union[str, Any]				   =     False
							__lowercase:		Dict				   =     False
							__lowercase:		List[Any]				   =     False



							def 		lowerCAmelCase							(					self				:   Optional[Any]							)       ->List[Any]:



														"""simple docstring"""



														snake_case_     							=		CpmAntModelTester(self							)
														snake_case_     							=		ConfigTester(self		,							config_class=UpperCAmelCase_							)



							def 		lowerCAmelCase							(					self				:   List[Any]							)       ->List[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 		lowerCAmelCase							(					self				:   Dict							)       ->List[Any]:



														"""simple docstring"""



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



							def 		lowerCAmelCase							(					self				:   Union[str, Any]							)       ->List[Any]:



														"""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 		lowerCAmelCase							(					self				:   Optional[int]							)       ->int:



														"""simple docstring"""



														snake_case_							,    snake_case_     							=		self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_cpmant_model(UpperCAmelCase_		,							UpperCAmelCase_							)



							def 		lowerCAmelCase							(					self				:   Optional[int]							)       ->Optional[int]:



														"""simple docstring"""



														snake_case_							,    snake_case_     							=		self.model_tester.prepare_config_and_inputs()
														self.model_tester.create_and_check_lm_head_model(UpperCAmelCase_		,							UpperCAmelCase_							)





@require_torch
class   __A  (unittest.TestCase):





							'''simple docstring'''

							@tooslow
							def 		lowerCAmelCase							(					self				:   str							)       ->List[str]:



														"""simple docstring"""



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

														snake_case_     							=		torch.tensor(
														    [[[6.1_708, 5.9_244, 1.0_835], [6.5_207, 6.2_893, -11.3_324], [-1.0_107, -0.0_576, -5.9_577]]]		,							)
														self.assertTrue(torch.allclose(hidden_states[:, :3, :3]		,							UpperCAmelCase_		,							atol=1E-2							)							)





@require_torch
class   __A  (unittest.TestCase):





							'''simple docstring'''

							@tooslow
							def 		lowerCAmelCase							(					self				:   str							)       ->Optional[Any]:



														"""simple docstring"""



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

														snake_case_     							=		torch.tensor(
														    [[[-6.4_267, -6.4_083, -6.3_958], [-5.8_802, -5.9_447, -5.7_811], [-5.3_896, -5.4_820, -5.4_295]]]		,							)
														self.assertTrue(torch.allclose(hidden_states[:, :3, :3]		,							UpperCAmelCase_		,							atol=1E-2							)							)



							@tooslow
							def 		lowerCAmelCase							(					self				:   List[Any]							)       ->Optional[int]:



														"""simple docstring"""



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



							@tooslow
							def 		lowerCAmelCase							(					self				:   List[Any]							)       ->Union[str, Any]:



														"""simple docstring"""



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







"""simple docstring"""
from collections import OrderedDict
from typing import Any, Mapping, Optional

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import TensorType, is_torch_available, logging


__SCREAMING_SNAKE_CASE				:     int		=     logging.get_logger(__name__)

__SCREAMING_SNAKE_CASE				:     str		=     {
    'google/bigbird-pegasus-large-arxiv': (
        'https://huggingface.co/google/bigbird-pegasus-large-arxiv/resolve/main/config.json'
    ),
    'google/bigbird-pegasus-large-pubmed': (
        'https://huggingface.co/google/bigbird-pegasus-large-pubmed/resolve/main/config.json'
    ),
    'google/bigbird-pegasus-large-bigpatent': (
        'https://huggingface.co/google/bigbird-pegasus-large-bigpatent/resolve/main/config.json'
    ),
    # See all BigBirdPegasus models at https://huggingface.co/models?filter=bigbird_pegasus
}





class   __A  (snake_case__):





							'''simple docstring'''

							__lowercase:		str				   =     """bigbird_pegasus"""
							__lowercase:		Any				   =     ["""past_key_values"""]
							__lowercase:		Optional[Any]				   =     {
							    """num_attention_heads""": """encoder_attention_heads""",
							    """hidden_size""": """d_model""",
							    """attention_probs_dropout_prob""": """attention_dropout""",
							}



							def __init__(					self				:   Optional[int]		,							UpperCAmelCase_				:   List[Any]=96_103		,							UpperCAmelCase_				:   List[str]=4_096		,							UpperCAmelCase_				:   Optional[Any]=16		,							UpperCAmelCase_				:   str=4_096		,							UpperCAmelCase_				:   Optional[int]=16		,							UpperCAmelCase_				:   List[Any]=16		,							UpperCAmelCase_				:   Optional[int]=4_096		,							UpperCAmelCase_				:   List[str]=16		,							UpperCAmelCase_				:   Tuple=0.0		,							UpperCAmelCase_				:   Union[str, Any]=0.0		,							UpperCAmelCase_				:   str=True		,							UpperCAmelCase_				:   Dict=True		,							UpperCAmelCase_				:   List[str]="gelu_new"		,							UpperCAmelCase_				:   Tuple=1_024		,							UpperCAmelCase_				:   int=0.1		,							UpperCAmelCase_				:   Union[str, Any]=0.0		,							UpperCAmelCase_				:   str=0.0		,							UpperCAmelCase_				:   str=0.02		,							UpperCAmelCase_				:   Tuple=2		,							UpperCAmelCase_				:   int=0.0		,							UpperCAmelCase_				:   str=True		,							UpperCAmelCase_				:   Any=0		,							UpperCAmelCase_				:   Dict=2		,							UpperCAmelCase_				:   List[str]=1		,							UpperCAmelCase_				:   Optional[int]="block_sparse"		,							UpperCAmelCase_				:   Tuple=64		,							UpperCAmelCase_				:   List[str]=3		,							UpperCAmelCase_				:   Optional[int]=False		,							**UpperCAmelCase_				:   str		,							)       ->List[str]:



														"""simple docstring"""



														snake_case_     							=		vocab_size
														snake_case_     							=		max_position_embeddings
														snake_case_     							=		d_model
														snake_case_     							=		encoder_ffn_dim
														snake_case_     							=		encoder_layers
														snake_case_     							=		encoder_attention_heads
														snake_case_     							=		decoder_ffn_dim
														snake_case_     							=		decoder_layers
														snake_case_     							=		decoder_attention_heads
														snake_case_     							=		dropout
														snake_case_     							=		attention_dropout
														snake_case_     							=		activation_dropout
														snake_case_     							=		activation_function
														snake_case_     							=		init_std
														snake_case_     							=		encoder_layerdrop
														snake_case_     							=		decoder_layerdrop
														snake_case_     							=		classifier_dropout
														snake_case_     							=		use_cache
														snake_case_     							=		encoder_layers
														snake_case_     							=		scale_embedding  # scale factor will be sqrt(d_model) if True

														# extra config
														snake_case_     							=		attention_type
														snake_case_     							=		block_size
														snake_case_     							=		num_random_blocks
														snake_case_     							=		use_bias

														super().__init__(
														    pad_token_id=UpperCAmelCase_		,							bos_token_id=UpperCAmelCase_		,							eos_token_id=UpperCAmelCase_		,							is_encoder_decoder=UpperCAmelCase_		,							decoder_start_token_id=UpperCAmelCase_		,							**UpperCAmelCase_		,							)





class   __A  (snake_case__):





							'''simple docstring'''

							@property
							def 		lowerCAmelCase							(					self				:   List[str]							)       ->Mapping[str, Mapping[int, str]]:



														"""simple docstring"""



														if self.task in ["default", "seq2seq-lm"]:
																					snake_case_     							=		OrderedDict(
																					    [
																					        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
																					        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
																					    ]							)

																					if self.use_past:
																												snake_case_     							=		{0: """batch"""}
																												snake_case_     							=		{0: """batch""", 1: """past_decoder_sequence + sequence"""}
																					else:
																												snake_case_     							=		{0: """batch""", 1: """decoder_sequence"""}
																												snake_case_     							=		{0: """batch""", 1: """decoder_sequence"""}

																					if self.use_past:
																												self.fill_with_past_key_values_(UpperCAmelCase_		,							direction="""inputs"""							)
														elif self.task == "causal-lm":
																					# TODO: figure this case out.
																					snake_case_     							=		OrderedDict(
																					    [
																					        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
																					        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
																					    ]							)
																					if self.use_past:
																												snake_case_							,    snake_case_     							=		self.num_layers
																												for i in range(UpperCAmelCase_							):
																																			snake_case_     							=		{0: """batch""", 2: """past_sequence + sequence"""}
																																			snake_case_     							=		{0: """batch""", 2: """past_sequence + sequence"""}
														else:
																					snake_case_     							=		OrderedDict(
																					    [
																					        ("""input_ids""", {0: """batch""", 1: """encoder_sequence"""}),
																					        ("""attention_mask""", {0: """batch""", 1: """encoder_sequence"""}),
																					        ("""decoder_input_ids""", {0: """batch""", 1: """decoder_sequence"""}),
																					        ("""decoder_attention_mask""", {0: """batch""", 1: """decoder_sequence"""}),
																					    ]							)

														return common_inputs



							@property
							def 		lowerCAmelCase							(					self				:   Dict							)       ->Mapping[str, Mapping[int, str]]:



														"""simple docstring"""



														if self.task in ["default", "seq2seq-lm"]:
																					snake_case_     							=		super().outputs
														else:
																					snake_case_     							=		super(UpperCAmelCase_		,							self							).outputs
																					if self.use_past:
																												snake_case_							,    snake_case_     							=		self.num_layers
																												for i in range(UpperCAmelCase_							):
																																			snake_case_     							=		{0: """batch""", 2: """past_sequence + sequence"""}
																																			snake_case_     							=		{0: """batch""", 2: """past_sequence + sequence"""}
														return common_outputs



							def 		lowerCAmelCase							(					self				:   int		,							UpperCAmelCase_				:   PreTrainedTokenizer		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   bool = False		,							UpperCAmelCase_				:   Optional[TensorType] = None		,							)       ->Mapping[str, Any]:



														"""simple docstring"""



														snake_case_     							=		self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
														    UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_							)

														# Generate decoder inputs
														snake_case_     							=		seq_length if not self.use_past else 1
														snake_case_     							=		self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
														    UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_							)
														snake_case_     							=		{F"""decoder_{name}""": tensor for name, tensor in decoder_inputs.items()}
														snake_case_     							=		dict(**UpperCAmelCase_		,							**UpperCAmelCase_							)

														if self.use_past:
																					if not is_torch_available():
																												raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""							)
																					else:
																												import torch
																					snake_case_							,    snake_case_     							=		common_inputs["""input_ids"""].shape
																					snake_case_     							=		common_inputs["""decoder_input_ids"""].shape[1]
																					snake_case_							,    snake_case_     							=		self.num_attention_heads
																					snake_case_     							=		(
																					    batch,
																					    num_encoder_attention_heads,
																					    encoder_seq_length,
																					    self._config.hidden_size // num_encoder_attention_heads,
																					)
																					snake_case_     							=		decoder_seq_length + 3
																					snake_case_     							=		(
																					    batch,
																					    num_decoder_attention_heads,
																					    decoder_past_length,
																					    self._config.hidden_size // num_decoder_attention_heads,
																					)

																					snake_case_     							=		torch.cat(
																					    [common_inputs["""decoder_attention_mask"""], torch.ones(UpperCAmelCase_		,							UpperCAmelCase_							)]		,							dim=1							)

																					snake_case_     							=		[]
																					# If the number of encoder and decoder layers are present in the model configuration, both are considered
																					snake_case_							,    snake_case_     							=		self.num_layers
																					snake_case_     							=		min(UpperCAmelCase_		,							UpperCAmelCase_							)
																					snake_case_     							=		max(UpperCAmelCase_		,							UpperCAmelCase_							) - min_num_layers
																					snake_case_     							=		"""encoder""" if num_encoder_layers > num_decoder_layers else """decoder"""

																					for _ in range(UpperCAmelCase_							):
																												common_inputs["past_key_values"].append(
																												    (
																												        torch.zeros(UpperCAmelCase_							),
																												        torch.zeros(UpperCAmelCase_							),
																												        torch.zeros(UpperCAmelCase_							),
																												        torch.zeros(UpperCAmelCase_							),
																												    )							)
																					# TODO: test this.
																					snake_case_     							=		encoder_shape if remaining_side_name == """encoder""" else decoder_shape
																					for _ in range(UpperCAmelCase_		,							UpperCAmelCase_							):
																												common_inputs["past_key_values"].append((torch.zeros(UpperCAmelCase_							), torch.zeros(UpperCAmelCase_							))							)
														return common_inputs



							def 		lowerCAmelCase							(					self				:   Union[str, Any]		,							UpperCAmelCase_				:   PreTrainedTokenizer		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   bool = False		,							UpperCAmelCase_				:   Optional[TensorType] = None		,							)       ->Mapping[str, Any]:



														"""simple docstring"""



														snake_case_     							=		self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
														    UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_							)

														if self.use_past:
																					if not is_torch_available():
																												raise ValueError("""Cannot generate dummy past_keys inputs without PyTorch installed."""							)
																					else:
																												import torch
																					snake_case_							,    snake_case_     							=		common_inputs["""input_ids"""].shape
																					# Not using the same length for past_key_values
																					snake_case_     							=		seqlen + 2
																					snake_case_							,    snake_case_     							=		self.num_layers
																					snake_case_							,    snake_case_     							=		self.num_attention_heads
																					snake_case_     							=		(
																					    batch,
																					    num_encoder_attention_heads,
																					    past_key_values_length,
																					    self._config.hidden_size // num_encoder_attention_heads,
																					)

																					snake_case_     							=		common_inputs["""attention_mask"""].dtype
																					snake_case_     							=		torch.cat(
																					    [common_inputs["""attention_mask"""], torch.ones(UpperCAmelCase_		,							UpperCAmelCase_		,							dtype=UpperCAmelCase_							)]		,							dim=1							)
																					snake_case_     							=		[
																					    (torch.zeros(UpperCAmelCase_							), torch.zeros(UpperCAmelCase_							)) for _ in range(UpperCAmelCase_							)
																					]
														return common_inputs



							def 		lowerCAmelCase							(					self				:   Dict		,							UpperCAmelCase_				:   PreTrainedTokenizer		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   bool = False		,							UpperCAmelCase_				:   Optional[TensorType] = None		,							)       ->Mapping[str, Any]:



														"""simple docstring"""



														snake_case_     							=		compute_effective_axis_dimension(
														    UpperCAmelCase_		,							fixed_dimension=OnnxConfig.default_fixed_batch		,							num_token_to_add=0							)

														# If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
														snake_case_     							=		tokenizer.num_special_tokens_to_add(UpperCAmelCase_							)
														snake_case_     							=		compute_effective_axis_dimension(
														    UpperCAmelCase_		,							fixed_dimension=OnnxConfig.default_fixed_sequence		,							num_token_to_add=UpperCAmelCase_							)

														# Generate dummy inputs according to compute batch and sequence
														snake_case_     							=		[""" """.join([tokenizer.unk_token]							) * seq_length] * batch_size
														snake_case_     							=		dict(tokenizer(UpperCAmelCase_		,							return_tensors=UpperCAmelCase_							)							)
														return common_inputs



							def 		lowerCAmelCase							(					self				:   str		,							UpperCAmelCase_				:   PreTrainedTokenizer		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   int = -1		,							UpperCAmelCase_				:   bool = False		,							UpperCAmelCase_				:   Optional[TensorType] = None		,							)       ->Mapping[str, Any]:



														"""simple docstring"""



														if self.task in ["default", "seq2seq-lm"]:
																					snake_case_     							=		self._generate_dummy_inputs_for_default_and_seqaseq_lm(
																					    UpperCAmelCase_		,							batch_size=UpperCAmelCase_		,							seq_length=UpperCAmelCase_		,							is_pair=UpperCAmelCase_		,							framework=UpperCAmelCase_							)

														elif self.task == "causal-lm":
																					snake_case_     							=		self._generate_dummy_inputs_for_causal_lm(
																					    UpperCAmelCase_		,							batch_size=UpperCAmelCase_		,							seq_length=UpperCAmelCase_		,							is_pair=UpperCAmelCase_		,							framework=UpperCAmelCase_							)
														else:
																					snake_case_     							=		self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
																					    UpperCAmelCase_		,							batch_size=UpperCAmelCase_		,							seq_length=UpperCAmelCase_		,							is_pair=UpperCAmelCase_		,							framework=UpperCAmelCase_							)

														return common_inputs



							def 		lowerCAmelCase							(					self				:   Union[str, Any]		,							UpperCAmelCase_				:   Any		,							UpperCAmelCase_				:   Union[str, Any]		,							UpperCAmelCase_				:   Any		,							UpperCAmelCase_				:   Any							)       ->Tuple:



														"""simple docstring"""



														if self.task in ["default", "seq2seq-lm"]:
																					snake_case_     							=		super()._flatten_past_key_values_(UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_							)
														else:
																					snake_case_     							=		super(UpperCAmelCase_		,							self							)._flatten_past_key_values_(
																					    UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_		,							UpperCAmelCase_							)



