


'''simple docstring'''

import random
import unittest

import torch

from diffusers import IFSuperResolutionPipeline
from diffusers.utils import floats_tensor
from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import skip_mps, torch_device

from ..pipeline_params import TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS, TEXT_GUIDED_IMAGE_VARIATION_PARAMS
from ..test_pipelines_common import PipelineTesterMixin
from . import IFPipelineTesterMixin





@skip_mps
class 					snake_case   (   lowercase      ,						lowercase      ,						unittest.TestCase      ):





  """simple docstring"""




  _lowerCamelCase		   =  IFSuperResolutionPipeline
  _lowerCamelCase		   =  TEXT_GUIDED_IMAGE_VARIATION_PARAMS - {"width", "height"}
  _lowerCamelCase		   =  TEXT_GUIDED_IMAGE_VARIATION_BATCH_PARAMS
  _lowerCamelCase		   =  PipelineTesterMixin.required_optional_params - {"latents"}






  def   snake_case		(   self					):







   """simple docstring"""
   return self._get_superresolution_dummy_components()






  def   snake_case		(   self      ,  UpperCamelCase      ,  UpperCamelCase=0					):







   """simple docstring"""
   if str(UpperCamelCase					).startswith("mps"					):
    lowerCamelCase_								=  torch.manual_seed(UpperCamelCase					)
   else:
    lowerCamelCase_								=  torch.Generator(device=UpperCamelCase					).manual_seed(UpperCamelCase					)

   lowerCamelCase_								=  floats_tensor((1, 3, 32, 32)      ,  rng=random.Random(UpperCamelCase					)					).to(UpperCamelCase					)

   lowerCamelCase_								=  {
       "prompt": "A painting of a squirrel eating a burger",
       "image": image,
       "generator": generator,
       "num_inference_steps": 2,
       "output_type": "numpy",
   }

   return inputs






  @unittest.skipIf(
      torch_device != "cuda" or not is_xformers_available()      ,  reason="XFormers attention is only available with CUDA and `xformers` installed"      ,  )
  def   snake_case		(   self					):







   """simple docstring"""
   self._test_xformers_attention_forwardGenerator_pass(expected_max_diff=1e-3					)






  def   snake_case		(   self					):







   """simple docstring"""
   self._test_save_load_optional_components()






  @unittest.skipIf(torch_device != "cuda"      ,  reason="float16 requires CUDA"					)
  def   snake_case		(   self					):







   """simple docstring"""
   # Due to non-determinism in save load of the hf-internal-testing/tiny-random-t5 text encoder
   super().test_save_load_floataa(expected_max_diff=1e-1					)






  def   snake_case		(   self					):







   """simple docstring"""
   self._test_attention_slicing_forward_pass(expected_max_diff=1e-2					)






  def   snake_case		(   self					):







   """simple docstring"""
   self._test_save_load_local()







  def   snake_case		(   self					):







   """simple docstring"""
   self._test_inference_batch_single_identical(
       expected_max_diff=1e-2      ,  )







'''simple docstring'''

from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


a_  :    Optional[Any]      =			logging.get_logger(__name__)

a_  :    Tuple      =			{
    """google/electra-small-generator""": """https://huggingface.co/google/electra-small-generator/resolve/main/config.json""",
    """google/electra-base-generator""": """https://huggingface.co/google/electra-base-generator/resolve/main/config.json""",
    """google/electra-large-generator""": """https://huggingface.co/google/electra-large-generator/resolve/main/config.json""",
    """google/electra-small-discriminator""": (
        """https://huggingface.co/google/electra-small-discriminator/resolve/main/config.json"""
    ),
    """google/electra-base-discriminator""": (
        """https://huggingface.co/google/electra-base-discriminator/resolve/main/config.json"""
    ),
    """google/electra-large-discriminator""": (
        """https://huggingface.co/google/electra-large-discriminator/resolve/main/config.json"""
    ),
}





class 					snake_case   (   lowercase      ):





  """simple docstring"""




  _lowerCamelCase		   =  "electra"






  def __init__(   self      ,  UpperCamelCase=3_0522      ,  UpperCamelCase=128      ,  UpperCamelCase=256      ,  UpperCamelCase=12      ,  UpperCamelCase=4      ,  UpperCamelCase=1024      ,  UpperCamelCase="gelu"      ,  UpperCamelCase=0.1      ,  UpperCamelCase=0.1      ,  UpperCamelCase=512      ,  UpperCamelCase=2      ,  UpperCamelCase=0.02      ,  UpperCamelCase=1e-12      ,  UpperCamelCase="first"      ,  UpperCamelCase=True      ,  UpperCamelCase="gelu"      ,  UpperCamelCase=0.1      ,  UpperCamelCase=0      ,  UpperCamelCase="absolute"      ,  UpperCamelCase=True      ,  UpperCamelCase=None      ,  **UpperCamelCase      ,  ):







   """simple docstring"""
   super().__init__(pad_token_id=UpperCamelCase      ,  **UpperCamelCase					)

   lowerCamelCase_								=  vocab_size
   lowerCamelCase_								=  embedding_size
   lowerCamelCase_								=  hidden_size
   lowerCamelCase_								=  num_hidden_layers
   lowerCamelCase_								=  num_attention_heads
   lowerCamelCase_								=  intermediate_size
   lowerCamelCase_								=  hidden_act
   lowerCamelCase_								=  hidden_dropout_prob
   lowerCamelCase_								=  attention_probs_dropout_prob
   lowerCamelCase_								=  max_position_embeddings
   lowerCamelCase_								=  type_vocab_size
   lowerCamelCase_								=  initializer_range
   lowerCamelCase_								=  layer_norm_eps

   lowerCamelCase_								=  summary_type
   lowerCamelCase_								=  summary_use_proj
   lowerCamelCase_								=  summary_activation
   lowerCamelCase_								=  summary_last_dropout
   lowerCamelCase_								=  position_embedding_type
   lowerCamelCase_								=  use_cache
   lowerCamelCase_								=  classifier_dropout





class 					snake_case   (   lowercase      ):





  """simple docstring"""




  @property
  def   snake_case		(   self					):







   """simple docstring"""
   if self.task == "multiple-choice":
    lowerCamelCase_								=  {0: "batch", 1: "choice", 2: "sequence"}
   else:
    lowerCamelCase_								=  {0: "batch", 1: "sequence"}
   return OrderedDict(
       [
           ("input_ids", dynamic_axis),
           ("attention_mask", dynamic_axis),
           ("token_type_ids", dynamic_axis),
       ]					)



