
"""simple docstring"""


from binascii import hexlify
from hashlib import shaaaa
from os import urandom

# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for
# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526

_lowercase							      = {
    # 1536-bit
    5: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 2048-bit
    14: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AACAA68FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 3072-bit
    15: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 4096-bit
    16: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199'''
            + '''FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 6144-bit
    17: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08'''
            + '''8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B'''
            + '''302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9'''
            + '''A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6'''
            + '''49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8'''
            + '''FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C'''
            + '''180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718'''
            + '''3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D'''
            + '''04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D'''
            + '''B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226'''
            + '''1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC'''
            + '''E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26'''
            + '''99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB'''
            + '''04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2'''
            + '''233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127'''
            + '''D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406'''
            + '''AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918'''
            + '''DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151'''
            + '''2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03'''
            + '''F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F'''
            + '''BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B'''
            + '''B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632'''
            + '''387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E'''
            + '''6DCC4024FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
    # 8192-bit
    18: {
        '''prime''': int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD'''
            + '''F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831'''
            + '''179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B'''
            + '''DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF'''
            + '''5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6'''
            + '''D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3'''
            + '''23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328'''
            + '''06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C'''
            + '''DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE'''
            + '''12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4'''
            + '''38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300'''
            + '''741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568'''
            + '''3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9'''
            + '''22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B'''
            + '''4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A'''
            + '''062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36'''
            + '''4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1'''
            + '''B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92'''
            + '''4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47'''
            + '''9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71'''
            + '''60C980DD98EDD3DFFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        '''generator''': 2,
    },
}







class  lowerCAmelCase_ :



						'''simple docstring'''


						def __init__(       self   :					str     ,A_   :					int = 14					)   ->      None:
							if group not in primes:
								raise ValueError('Unsupported Group'					)
							A        =      primes[group]['prime']
							A        =      primes[group]['generator']

							A        =      int(hexlify(urandom(32					)					)     ,base=16					)


						def   _SCREAMING_SNAKE_CASE					(       self   :					int					)   ->      str:
							return hex(self.__private_key					)[2:]


						def   _SCREAMING_SNAKE_CASE					(       self   :					List[Any]					)   ->      str:
							A        =      pow(self.generator     ,self.__private_key     ,self.prime					)
							return hex(A_					)[2:]


						def   _SCREAMING_SNAKE_CASE					(       self   :					Optional[Any]     ,A_   :					int					)   ->      bool:
							# check if the other public key is valid based on NIST SP800-56
							return (
							    2 <= key <= self.prime - 2
							    and pow(A_     ,(self.prime - 1) // 2     ,self.prime					) == 1
							)


						def   _SCREAMING_SNAKE_CASE					(       self   :					Dict     ,A_   :					str					)   ->      str:
							A        =      int(A_     ,base=16					)
							if not self.is_valid_public_key(A_					):
								raise ValueError('Invalid public key'					)
							A        =      pow(A_     ,self.__private_key     ,self.prime					)
							return shaaaa(str(A_					).encode()					).hexdigest()


						@staticmethod
						def   _SCREAMING_SNAKE_CASE					(       A_   :					int     ,A_   :					int					)   ->      bool:
							# check if the other public key is valid based on NIST SP800-56
							return (
							    2 <= remote_public_key_str <= prime - 2
							    and pow(A_     ,(prime - 1) // 2     ,A_					) == 1
							)




						@staticmethod
						def   _SCREAMING_SNAKE_CASE					(       A_   :					str     ,A_   :					str     ,A_   :					int = 14					)   ->      str:
							A        =      int(A_     ,base=16					)
							A        =      int(A_     ,base=16					)
							A        =      primes[group]['prime']
							if not DiffieHellman.is_valid_public_key_static(A_     ,A_					):
								raise ValueError('Invalid public key'					)
							A        =      pow(A_     ,A_     ,A_					)
							return shaaaa(str(A_					).encode()					).hexdigest()


if __name__ == "__main__":
		import doctest

		doctest.testmod()

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


_UpperCAmelCase					: List[Any]      =       logging.get_logger(__name__)

_UpperCAmelCase					: Optional[Any]      =       {
    "Helsinki-NLP/opus-mt-en-de": "https://huggingface.co/Helsinki-NLP/opus-mt-en-de/resolve/main/config.json",
    # See all Marian models at https://huggingface.co/models?filter=marian
}


class 				lowercase					(		_SCREAMING_SNAKE_CASE   ):
		__lowercase       :       int	     =				"marian"
		__lowercase       :       List[str]	     =				["past_key_values"]
		__lowercase       :       Any	     =				{"num_attention_heads": "encoder_attention_heads", "hidden_size": "d_model"}



		def __init__( self				,      A_=58_101				,      A_=None				,      A_=1_024				,      A_=12				,      A_=4_096				,      A_=16				,      A_=12				,      A_=4_096				,      A_=16				,      A_=0.0				,      A_=0.0				,      A_=True				,      A_=True				,      A_="gelu"				,      A_=1_024				,      A_=0.1				,      A_=0.0				,      A_=0.0				,      A_=0.02				,      A_=58_100				,      A_=False				,      A_=58_100				,      A_=0				,      A_=0				,      A_=True				,      **A_				,      )  ->					Optional[int]:
				"""simple docstring"""
				UpperCamelCase		=     vocab_size
				UpperCamelCase		=     decoder_vocab_size or vocab_size
				UpperCamelCase		=     max_position_embeddings
				UpperCamelCase		=     d_model
				UpperCamelCase		=     encoder_ffn_dim
				UpperCamelCase		=     encoder_layers
				UpperCamelCase		=     encoder_attention_heads
				UpperCamelCase		=     decoder_ffn_dim
				UpperCamelCase		=     decoder_layers
				UpperCamelCase		=     decoder_attention_heads
				UpperCamelCase		=     dropout
				UpperCamelCase		=     attention_dropout
				UpperCamelCase		=     activation_dropout
				UpperCamelCase		=     activation_function
				UpperCamelCase		=     init_std
				UpperCamelCase		=     encoder_layerdrop
				UpperCamelCase		=     decoder_layerdrop
				UpperCamelCase		=     use_cache
				UpperCamelCase		=     encoder_layers
				UpperCamelCase		=     scale_embedding  # scale factor will be sqrt(d_model) if True
				UpperCamelCase		=     share_encoder_decoder_embeddings
				super().__init__(
				    pad_token_id=A_				,      eos_token_id=A_				,      is_encoder_decoder=A_				,      decoder_start_token_id=A_				,      forced_eos_token_id=A_				,      **A_				,      )






class 				lowercase					(		_SCREAMING_SNAKE_CASE   ):



		@property
		# Copied from transformers.models.bart.configuration_bart.BartOnnxConfig.inputs
		def __UpperCamelCase ( self       )  ->					Mapping[str, Mapping[int, str]]:
				"""simple docstring"""
				if self.task in ["default", "seq2seq-lm"]:
						UpperCamelCase		=     OrderedDict(
						    [
						        ('input_ids', {0: 'batch', 1: 'encoder_sequence'}),
						        ('attention_mask', {0: 'batch', 1: 'encoder_sequence'}),
						    ]       )

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

						if self.use_past:
								self.fill_with_past_key_values_(A_				,      direction='inputs'       )
				elif self.task == "causal-lm":
						# TODO: figure this case out.
						UpperCamelCase		=     OrderedDict(
						    [
						        ('input_ids', {0: 'batch', 1: 'encoder_sequence'}),
						        ('attention_mask', {0: 'batch', 1: 'encoder_sequence'}),
						    ]       )
						if self.use_past:
								UpperCamelCase	,  UpperCamelCase		=     self.num_layers
								for i in range(A_       ):
										UpperCamelCase		=     {0: 'batch', 2: 'past_sequence + sequence'}
										UpperCamelCase		=     {0: 'batch', 2: 'past_sequence + sequence'}
				else:
						UpperCamelCase		=     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
		# Copied from transformers.models.bart.configuration_bart.BartOnnxConfig.outputs
		def __UpperCamelCase ( self       )  ->					Mapping[str, Mapping[int, str]]:
				"""simple docstring"""
				if self.task in ["default", "seq2seq-lm"]:
						UpperCamelCase		=     super().outputs
				else:
						UpperCamelCase		=     super(A_				,      self       ).outputs
						if self.use_past:
								UpperCamelCase	,  UpperCamelCase		=     self.num_layers
								for i in range(A_       ):
										UpperCamelCase		=     {0: 'batch', 2: 'past_sequence + sequence'}
										UpperCamelCase		=     {0: 'batch', 2: 'past_sequence + sequence'}
				return common_outputs



		def __UpperCamelCase ( self				,      A_				,      A_ = -1				,      A_ = -1				,      A_ = False				,      A_ = None				,      )  ->					Mapping[str, Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._generate_dummy_inputs_for_encoder_and_decoder(
				    A_				,      A_				,      A_				,      A_				,      A_       )

				# Generate decoder inputs
				UpperCamelCase		=     seq_length if not self.use_past else 1
				UpperCamelCase		=     self._generate_dummy_inputs_for_encoder_and_decoder(
				    A_				,      A_				,      A_				,      A_				,      A_       )
				UpperCamelCase		=     {F'''decoder_{name}''': tensor for name, tensor in decoder_inputs.items()}
				UpperCamelCase		=     dict(**A_				,      **A_       )

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

						UpperCamelCase		=     torch.cat(
						    [common_inputs['decoder_attention_mask'], torch.ones(A_				,      A_       )]				,      dim=1       )

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

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



		def __UpperCamelCase ( self				,      A_				,      A_ = -1				,      A_ = -1				,      A_ = False				,      A_ = None				,      )  ->					Mapping[str, Any]:
				"""simple docstring"""
				UpperCamelCase		=     self._generate_dummy_inputs_for_encoder_and_decoder(
				    A_				,      A_				,      A_				,      A_				,      A_       )

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

						UpperCamelCase		=     common_inputs['attention_mask'].dtype
						UpperCamelCase		=     torch.cat(
						    [common_inputs['attention_mask'], torch.ones(A_				,      A_				,      dtype=A_       )]				,      dim=1       )
						UpperCamelCase		=     [
						    (torch.zeros(A_       ), torch.zeros(A_       )) for _ in range(A_       )
						]
				return common_inputs



		def __UpperCamelCase ( self				,      A_				,      A_ = -1				,      A_ = -1				,      A_ = False				,      A_ = None				,      )  ->					Mapping[str, Any]:
				"""simple docstring"""
				# Copied from OnnxConfig.generate_dummy_inputs
				# Did not use super(OnnxConfigWithPast, self).generate_dummy_inputs for code clarity.
				# If dynamic axis (-1) we forward with a fixed dimension of 2 samples to avoid optimizations made by ONNX
				UpperCamelCase		=     compute_effective_axis_dimension(
				    A_				,      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
				UpperCamelCase		=     tokenizer.num_special_tokens_to_add(A_       )
				UpperCamelCase		=     compute_effective_axis_dimension(
				    A_				,      fixed_dimension=OnnxConfig.default_fixed_sequence				,      num_token_to_add=A_       )

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



		def __UpperCamelCase ( self				,      A_				,      A_ = -1				,      A_ = -1				,      A_ = False				,      A_ = None				,      )  ->					Mapping[str, Any]:
				"""simple docstring"""
				if self.task in ["default", "seq2seq-lm"]:
						UpperCamelCase		=     self._generate_dummy_inputs_for_default_and_seqaseq_lm(
						    A_				,      batch_size=A_				,      seq_length=A_				,      is_pair=A_				,      framework=A_       )

				else:
						UpperCamelCase		=     self._generate_dummy_inputs_for_causal_lm(
						    A_				,      batch_size=A_				,      seq_length=A_				,      is_pair=A_				,      framework=A_       )

				return common_inputs



		def __UpperCamelCase ( self				,      A_				,      A_				,      A_				,      A_       )  ->					int:
				"""simple docstring"""
				if self.task in ["default", "seq2seq-lm"]:
						UpperCamelCase		=     super()._flatten_past_key_values_(A_				,      A_				,      A_				,      A_       )
				else:
						UpperCamelCase		=     super(A_				,      self       )._flatten_past_key_values_(
						    A_				,      A_				,      A_				,      A_       )



		@property
		def __UpperCamelCase ( self       )  ->					float:
				"""simple docstring"""
				return 1e-4
