





from collections import OrderedDict
from typing import Any, Mapping, Optional

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


_a						=   logging.get_logger(__name__)

_a						=   {
    "facebook/blenderbot_small-90M": "https://huggingface.co/facebook/blenderbot_small-90M/resolve/main/config.json",
    # See all BlenderbotSmall models at https://huggingface.co/models?filter=blenderbot_small
}






class       __A					(					lowerCAmelCase				):

			'''simple docstring'''







			lowerCAmelCase_							  =		"""blenderbot-small"""
			lowerCAmelCase_							  =		["""past_key_values"""]
			lowerCAmelCase_							  =		{"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}





			def __init__(					self ,						__lowerCAmelCase=5_0_2_6_5 ,						__lowerCAmelCase=5_1_2 ,						__lowerCAmelCase=8 ,						__lowerCAmelCase=2_0_4_8 ,						__lowerCAmelCase=1_6 ,						__lowerCAmelCase=8 ,						__lowerCAmelCase=2_0_4_8 ,						__lowerCAmelCase=1_6 ,						__lowerCAmelCase=0.0 ,						__lowerCAmelCase=0.0 ,						__lowerCAmelCase=True ,						__lowerCAmelCase=True ,						__lowerCAmelCase="gelu" ,						__lowerCAmelCase=5_1_2 ,						__lowerCAmelCase=0.1 ,						__lowerCAmelCase=0.0 ,						__lowerCAmelCase=0.0 ,						__lowerCAmelCase=0.02 ,						__lowerCAmelCase=1 ,						__lowerCAmelCase=False ,						__lowerCAmelCase=0 ,						__lowerCAmelCase=1 ,						__lowerCAmelCase=2 ,						__lowerCAmelCase=2 ,						**__lowerCAmelCase ,						):



				'''simple docstring'''







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

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






class       __A					(					lowerCAmelCase				):

			'''simple docstring'''







			@property
			def 	__lowerCamelCase       (					self							):



				'''simple docstring'''







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

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

					if self.use_past:
						self.fill_with_past_key_values_(__lowerCAmelCase ,						direction='''inputs'''							)
				elif self.task == "causal-lm":
					# TODO: figure this case out.
					lowerCamelCase__              =	OrderedDict(
					    [
					        ('''input_ids''', {0: '''batch''', 1: '''encoder_sequence'''}),
					        ('''attention_mask''', {0: '''batch''', 1: '''encoder_sequence'''}),
					    ]							)
					if self.use_past:
						lowerCamelCase__       ,			lowerCamelCase__              =	self.num_layers
						for i in range(__lowerCAmelCase							):
							lowerCamelCase__              =	{0: '''batch''', 2: '''past_sequence + sequence'''}
							lowerCamelCase__              =	{0: '''batch''', 2: '''past_sequence + sequence'''}
				else:
					lowerCamelCase__              =	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							):



				'''simple docstring'''







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





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = False ,						__lowerCAmelCase = None ,						):



				'''simple docstring'''







				lowerCamelCase__              =	self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
				    __lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							)

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

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

					lowerCamelCase__              =	torch.cat(
					    [common_inputs['''decoder_attention_mask'''], torch.ones(__lowerCAmelCase ,						__lowerCAmelCase							)] ,						dim=1							)

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

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





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = False ,						__lowerCAmelCase = None ,						):



				'''simple docstring'''







				lowerCamelCase__              =	self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
				    __lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							)

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

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





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = False ,						__lowerCAmelCase = None ,						):



				'''simple docstring'''







				lowerCamelCase__              =	compute_effective_axis_dimension(
				    __lowerCAmelCase ,						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
				lowerCamelCase__              =	tokenizer.num_special_tokens_to_add(__lowerCAmelCase							)
				lowerCamelCase__              =	compute_effective_axis_dimension(
				    __lowerCAmelCase ,						fixed_dimension=OnnxConfig.default_fixed_sequence ,						num_token_to_add=__lowerCAmelCase							)

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





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = -1 ,						__lowerCAmelCase = False ,						__lowerCAmelCase = None ,						):



				'''simple docstring'''







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

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

				return common_inputs





			def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



				'''simple docstring'''







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










import warnings

from ...utils import logging
from .image_processing_segformer import SegformerImageProcessor


_a						=   logging.get_logger(__name__)






class       __A					(					lowerCAmelCase				):

			'''simple docstring'''







			def __init__(					self ,						*__lowerCAmelCase ,						**__lowerCAmelCase							):



				'''simple docstring'''







				warnings.warn(
				    '''The class SegformerFeatureExtractor is deprecated and will be removed in version 5 of Transformers.'''
				    ''' Please use SegformerImageProcessor instead.''' ,						__lowerCAmelCase ,						)
				super().__init__(*__lowerCAmelCase ,						**__lowerCAmelCase							)



