
import warnings
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


__snake_case								=  logging.get_logger(__name__)

__snake_case								=  {
    """facebook/bart-large""": """https://huggingface.co/facebook/bart-large/resolve/main/config.json""",
    # See all BART models at https://huggingface.co/models?filter=bart
}




class 						lowercase__  (						_UpperCAmelCase  ):
	A__    :   str				       ="""bart"""
	A__    :   Optional[int]				       =["""past_key_values"""]
	A__    :   Optional[Any]				       ={"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}
	def __init__(			self							:   List[Any]       ,   UpperCAmelCase_							:   Tuple=50265       ,   UpperCAmelCase_							:   Dict=1024       ,   UpperCAmelCase_							:   Any=12       ,   UpperCAmelCase_							:   List[Any]=4096       ,   UpperCAmelCase_							:   Optional[int]=16       ,   UpperCAmelCase_							:   Union[str, Any]=12       ,   UpperCAmelCase_							:   List[Any]=4096       ,   UpperCAmelCase_							:   int=16       ,   UpperCAmelCase_							:   List[str]=0.0       ,   UpperCAmelCase_							:   int=0.0       ,   UpperCAmelCase_							:   Union[str, Any]="gelu"       ,   UpperCAmelCase_							:   Any=1024       ,   UpperCAmelCase_							:   Tuple=0.1       ,   UpperCAmelCase_							:   int=0.0       ,   UpperCAmelCase_							:   Any=0.0       ,   UpperCAmelCase_							:   Tuple=0.02       ,   UpperCAmelCase_							:   List[str]=0.0       ,   UpperCAmelCase_							:   Union[str, Any]=False       ,   UpperCAmelCase_							:   Union[str, Any]=True       ,   UpperCAmelCase_							:   Tuple=3       ,   UpperCAmelCase_							:   Dict=1       ,   UpperCAmelCase_							:   List[str]=0       ,   UpperCAmelCase_							:   Union[str, Any]=2       ,   UpperCAmelCase_							:   List[Any]=True       ,   UpperCAmelCase_							:   Dict=2       ,   UpperCAmelCase_							:   Optional[int]=2       ,   **UpperCAmelCase_							:   Union[str, Any]       ,   ):
						SCREAMING_SNAKE_CASE__													= vocab_size
						SCREAMING_SNAKE_CASE__													= max_position_embeddings
						SCREAMING_SNAKE_CASE__													= d_model
						SCREAMING_SNAKE_CASE__													= encoder_ffn_dim
						SCREAMING_SNAKE_CASE__													= encoder_layers
						SCREAMING_SNAKE_CASE__													= encoder_attention_heads
						SCREAMING_SNAKE_CASE__													= decoder_ffn_dim
						SCREAMING_SNAKE_CASE__													= decoder_layers
						SCREAMING_SNAKE_CASE__													= decoder_attention_heads
						SCREAMING_SNAKE_CASE__													= dropout
						SCREAMING_SNAKE_CASE__													= attention_dropout
						SCREAMING_SNAKE_CASE__													= activation_dropout
						SCREAMING_SNAKE_CASE__													= activation_function
						SCREAMING_SNAKE_CASE__													= init_std
						SCREAMING_SNAKE_CASE__													= encoder_layerdrop
						SCREAMING_SNAKE_CASE__													= decoder_layerdrop
						SCREAMING_SNAKE_CASE__													= classifier_dropout
						SCREAMING_SNAKE_CASE__													= use_cache
						SCREAMING_SNAKE_CASE__													= encoder_layers
						SCREAMING_SNAKE_CASE__													= scale_embedding  # scale factor will be sqrt(d_model) if True

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

						# ensure backward compatibility for BART CNN models
						if self.forced_bos_token_id is None and kwargs.get('force_bos_token_to_be_generated'       ,   UpperCAmelCase_							):
											SCREAMING_SNAKE_CASE__													= self.bos_token_id
											warnings.warn(
											    F'Please make sure the config includes `forced_bos_token_id={self.bos_token_id}` in future versions. '
											    'The config can simply be saved and uploaded again to be fixed.'							)





class 						lowercase__  (						_UpperCAmelCase  ):
	@property
	def      A_				(			self							:   List[Any]							):
						if self.task in ["default", "seq2seq-lm"]:
											SCREAMING_SNAKE_CASE__													= OrderedDict(
											    [
											        ('input_ids', {0: 'batch', 1: 'encoder_sequence'}),
											        ('attention_mask', {0: 'batch', 1: 'encoder_sequence'}),
											    ]							)

											if self.use_past:
																SCREAMING_SNAKE_CASE__													= {0: 'batch'}
																SCREAMING_SNAKE_CASE__													= {0: 'batch', 1: 'past_decoder_sequence + sequence'}
											else:
																SCREAMING_SNAKE_CASE__													= {0: 'batch', 1: 'decoder_sequence'}
																SCREAMING_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.
											SCREAMING_SNAKE_CASE__													= OrderedDict(
											    [
											        ('input_ids', {0: 'batch', 1: 'encoder_sequence'}),
											        ('attention_mask', {0: 'batch', 1: 'encoder_sequence'}),
											    ]							)
											if self.use_past:
																SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_layers
																for i in range(UpperCAmelCase_							):
																					SCREAMING_SNAKE_CASE__													= {0: 'batch', 2: 'past_sequence + sequence'}
																					SCREAMING_SNAKE_CASE__													= {0: 'batch', 2: 'past_sequence + sequence'}
						else:
											SCREAMING_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      A_				(			self							:   Tuple							):
						if self.task in ["default", "seq2seq-lm"]:
											SCREAMING_SNAKE_CASE__													= super().outputs
						else:
											SCREAMING_SNAKE_CASE__													= super(UpperCAmelCase_       ,   self							).outputs
											if self.use_past:
																SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_layers
																for i in range(UpperCAmelCase_							):
																					SCREAMING_SNAKE_CASE__													= {0: 'batch', 2: 'past_sequence + sequence'}
																					SCREAMING_SNAKE_CASE__													= {0: 'batch', 2: 'past_sequence + sequence'}
						return common_outputs
	def      A_				(			self							:   Optional[Any]       ,   UpperCAmelCase_							:   PreTrainedTokenizer       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   bool = False       ,   UpperCAmelCase_							:   Optional[TensorType] = None       ,   ):
						SCREAMING_SNAKE_CASE__													= self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
						    UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_							)

						# Generate decoder inputs
						SCREAMING_SNAKE_CASE__													= seq_length if not self.use_past else 1
						SCREAMING_SNAKE_CASE__													= self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
						    UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_							)
						SCREAMING_SNAKE_CASE__													= {F'decoder_{name}': tensor for name, tensor in decoder_inputs.items()}
						SCREAMING_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
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= common_inputs['input_ids'].shape
											SCREAMING_SNAKE_CASE__													= common_inputs['decoder_input_ids'].shape[1]
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_attention_heads
											SCREAMING_SNAKE_CASE__													= (
											    batch,
											    num_encoder_attention_heads,
											    encoder_seq_length,
											    self._config.hidden_size // num_encoder_attention_heads,
											)
											SCREAMING_SNAKE_CASE__													= decoder_seq_length + 3
											SCREAMING_SNAKE_CASE__													= (
											    batch,
											    num_decoder_attention_heads,
											    decoder_past_length,
											    self._config.hidden_size // num_decoder_attention_heads,
											)

											SCREAMING_SNAKE_CASE__													= torch.cat(
											    [common_inputs['decoder_attention_mask'], torch.ones(UpperCAmelCase_       ,   UpperCAmelCase_							)]       ,   dim=1							)

											SCREAMING_SNAKE_CASE__													= []
											# If the number of encoder and decoder layers are present in the model configuration, both are considered
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_layers
											SCREAMING_SNAKE_CASE__													= min(UpperCAmelCase_       ,   UpperCAmelCase_							)
											SCREAMING_SNAKE_CASE__													= max(UpperCAmelCase_       ,   UpperCAmelCase_							) - min_num_layers
											SCREAMING_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.
											SCREAMING_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      A_				(			self							:   Tuple       ,   UpperCAmelCase_							:   PreTrainedTokenizer       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   bool = False       ,   UpperCAmelCase_							:   Optional[TensorType] = None       ,   ):
						SCREAMING_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
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= common_inputs['input_ids'].shape
											# Not using the same length for past_key_values
											SCREAMING_SNAKE_CASE__													= seqlen + 2
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_layers
											SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= self.num_attention_heads
											SCREAMING_SNAKE_CASE__													= (
											    batch,
											    num_encoder_attention_heads,
											    past_key_values_length,
											    self._config.hidden_size // num_encoder_attention_heads,
											)

											SCREAMING_SNAKE_CASE__													= common_inputs['attention_mask'].dtype
											SCREAMING_SNAKE_CASE__													= torch.cat(
											    [common_inputs['attention_mask'], torch.ones(UpperCAmelCase_       ,   UpperCAmelCase_       ,   dtype=UpperCAmelCase_							)]       ,   dim=1							)
											SCREAMING_SNAKE_CASE__													= [
											    (torch.zeros(UpperCAmelCase_							), torch.zeros(UpperCAmelCase_							)) for _ in range(UpperCAmelCase_							)
											]
						return common_inputs
	def      A_				(			self							:   List[Any]       ,   UpperCAmelCase_							:   PreTrainedTokenizer       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   bool = False       ,   UpperCAmelCase_							:   Optional[TensorType] = None       ,   ):
						# 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
						SCREAMING_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
						SCREAMING_SNAKE_CASE__													= tokenizer.num_special_tokens_to_add(UpperCAmelCase_							)
						SCREAMING_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
						SCREAMING_SNAKE_CASE__													= [' '.join([tokenizer.unk_token]							) * seq_length] * batch_size
						SCREAMING_SNAKE_CASE__													= dict(tokenizer(UpperCAmelCase_       ,   return_tensors=UpperCAmelCase_							)							)
						return common_inputs
	def      A_				(			self							:   Optional[int]       ,   UpperCAmelCase_							:   PreTrainedTokenizer       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   int = -1       ,   UpperCAmelCase_							:   bool = False       ,   UpperCAmelCase_							:   Optional[TensorType] = None       ,   ):
						if self.task in ["default", "seq2seq-lm"]:
											SCREAMING_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":
											SCREAMING_SNAKE_CASE__													= self._generate_dummy_inputs_for_causal_lm(
											    UpperCAmelCase_       ,   batch_size=UpperCAmelCase_       ,   seq_length=UpperCAmelCase_       ,   is_pair=UpperCAmelCase_       ,   framework=UpperCAmelCase_							)
						else:
											SCREAMING_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      A_				(			self							:   List[str]       ,   UpperCAmelCase_							:   List[str]       ,   UpperCAmelCase_							:   Union[str, Any]       ,   UpperCAmelCase_							:   Tuple       ,   UpperCAmelCase_							:   Tuple							):
						if self.task in ["default", "seq2seq-lm"]:
											SCREAMING_SNAKE_CASE__													= super()._flatten_past_key_values_(UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_							)
						else:
											SCREAMING_SNAKE_CASE__													= super(UpperCAmelCase_       ,   self							)._flatten_past_key_values_(
											    UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_       ,   UpperCAmelCase_							)







import os
from math import logaa






def 							_lowercase							(     UpperCamelCase_ = "base_exp.txt"		)		->		int:
					'''simple docstring'''


					SCREAMING_SNAKE_CASE__													= 0
					SCREAMING_SNAKE_CASE__													= 0
					for i, line in enumerate(open(os.path.join(os.path.dirname(UpperCamelCase_		)	,	UpperCamelCase_		)		)		):
										SCREAMING_SNAKE_CASE__						, SCREAMING_SNAKE_CASE__													= list(map(UpperCamelCase_	,	line.split(','		)		)		)
										if x * logaa(UpperCamelCase_		) > largest:
															SCREAMING_SNAKE_CASE__													= x * logaa(UpperCamelCase_		)
															SCREAMING_SNAKE_CASE__													= i + 1
					return result


if __name__ == "__main__":
				print(solution())





