


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


lowercase_							 =       logging.get_logger(__name__)

lowercase_							 =       {
    """facebook/mbart-large-cc25""": """https://huggingface.co/facebook/mbart-large-cc25/resolve/main/config.json""",
    # See all MBART models at https://huggingface.co/models?filter=mbart
}







class       __a	(   UpperCamelCase__       ):
				lowerCamelCase    :					Any 					="""mbart"""
				lowerCamelCase    :					Union[str, Any] 					=["""past_key_values"""]
				lowerCamelCase    :					List[str] 					={"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}







				def __init__(   self			,  UpperCAmelCase=5_0265			,  UpperCAmelCase=1024			,  UpperCAmelCase=12			,  UpperCAmelCase=4096			,  UpperCAmelCase=16			,  UpperCAmelCase=12			,  UpperCAmelCase=4096			,  UpperCAmelCase=16			,  UpperCAmelCase=0.0			,  UpperCAmelCase=0.0			,  UpperCAmelCase=True			,  UpperCAmelCase=True			,  UpperCAmelCase="gelu"			,  UpperCAmelCase=1024			,  UpperCAmelCase=0.1			,  UpperCAmelCase=0.0			,  UpperCAmelCase=0.0			,  UpperCAmelCase=0.0_2			,  UpperCAmelCase=0.0			,  UpperCAmelCase=False			,  UpperCAmelCase=1			,  UpperCAmelCase=0			,  UpperCAmelCase=2			,  UpperCAmelCase=2			,  **UpperCAmelCase			,  ):

							'''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_			       = classifier_dropout
							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__			,  forced_eos_token_id=lowerCAmelCase__			,  **lowerCAmelCase__			,  )







class       __a	(   UpperCamelCase__       ):







				@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_			       = 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_			       = 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			,  UpperCAmelCase			,  UpperCAmelCase = -1			,  UpperCAmelCase = -1			,  UpperCAmelCase = False			,  UpperCAmelCase = 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_			       = common_inputs["input_ids"].shape
										lowerCAmelCase_			       = common_inputs["decoder_input_ids"].shape[1]
										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_			       = 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			,  UpperCAmelCase			,  UpperCAmelCase = -1			,  UpperCAmelCase = -1			,  UpperCAmelCase = False			,  UpperCAmelCase = 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_			       = common_inputs["input_ids"].shape
										# Not using the same length for past_key_values
										lowerCAmelCase_			       = seqlen + 2
										lowerCAmelCase_			       = self.num_layers
										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			,  UpperCAmelCase			,  UpperCAmelCase = -1			,  UpperCAmelCase = -1			,  UpperCAmelCase = False			,  UpperCAmelCase = 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			,  UpperCAmelCase			,  UpperCAmelCase = -1			,  UpperCAmelCase = -1			,  UpperCAmelCase = False			,  UpperCAmelCase = 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			,  UpperCAmelCase			,  UpperCAmelCase			,  UpperCAmelCase			,  UpperCAmelCase      ):

							'''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__      )



"""simple docstring"""



from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Union

import numpy as np
import PIL
from PIL import Image

from ...utils import BaseOutput, is_torch_available, is_transformers_available







@dataclass
class       __a	(   __snake_case       ):
				lowerCamelCase    :					int 					={
				    'sld_warmup_steps': 15,
				    'sld_guidance_scale': 20,
				    'sld_threshold': 0.0,
				    'sld_momentum_scale': 0.0,
				    'sld_mom_beta': 0.0,
				}
				lowerCamelCase    :					Optional[Any] 					={
				    'sld_warmup_steps': 10,
				    'sld_guidance_scale': 1000,
				    'sld_threshold': 0.01,
				    'sld_momentum_scale': 0.3,
				    'sld_mom_beta': 0.4,
				}
				lowerCamelCase    :					List[str] 					={
				    'sld_warmup_steps': 7,
				    'sld_guidance_scale': 2000,
				    'sld_threshold': 0.025,
				    'sld_momentum_scale': 0.5,
				    'sld_mom_beta': 0.7,
				}
				lowerCamelCase    :					Any 					={
				    'sld_warmup_steps': 0,
				    'sld_guidance_scale': 5000,
				    'sld_threshold': 1.0,
				    'sld_momentum_scale': 0.5,
				    'sld_mom_beta': 0.7,
				}







@dataclass
class       __a	(   __snake_case       ):
				lowerCamelCase    :					Union[List[PIL.Image.Image], np.ndarray]
				lowerCamelCase    :					Optional[List[bool]]
				lowerCamelCase    :					Optional[Union[List[PIL.Image.Image], np.ndarray]]
				lowerCamelCase    :					Optional[str]


if is_transformers_available() and is_torch_available():
		from .pipeline_stable_diffusion_safe import StableDiffusionPipelineSafe
		from .safety_checker import SafeStableDiffusionSafetyChecker