
"""simple docstring"""

import unittest

import numpy as np
import torch
from torch import nn
from transformers import (
    CLIPImageProcessor,
    CLIPTextConfig,
    CLIPTextModelWithProjection,
    CLIPTokenizer,
    CLIPVisionConfig,
    CLIPVisionModelWithProjection,
)

from diffusers import KandinskyVaaPriorPipeline, PriorTransformer, UnCLIPScheduler
from diffusers.utils import torch_device
from diffusers.utils.testing_utils import enable_full_determinism, skip_mps

from ..test_pipelines_common import PipelineTesterMixin


enable_full_determinism()

class __lowerCAmelCase		(				__SCREAMING_SNAKE_CASE      ,  unittest.TestCase      ):
     lowercase						       =						KandinskyVaaPriorPipeline
     lowercase						       =						["prompt"]
     lowercase						       =						["prompt", "negative_prompt"]
     lowercase						       =						[
         "num_images_per_prompt",
         "generator",
         "num_inference_steps",
         "latents",
         "negative_prompt",
         "guidance_scale",
         "output_type",
         "return_dict",
     ]
     lowercase						       =						False





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      return 32





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      return 32





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      return self.time_input_dim





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      return self.time_input_dim * 4





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      return 100





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	CLIPTokenizer.from_pretrained('hf-internal-testing/tiny-random-clip'				)
      return tokenizer





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      torch.manual_seed(0				)
      __UpperCamelCase      =	CLIPTextConfig(
          bos_token_id=0     ,					eos_token_id=2     ,					hidden_size=self.text_embedder_hidden_size     ,					projection_dim=self.text_embedder_hidden_size     ,					intermediate_size=37     ,					layer_norm_eps=1E-05     ,					num_attention_heads=4     ,					num_hidden_layers=5     ,					pad_token_id=1     ,					vocab_size=1000     ,					)
      return CLIPTextModelWithProjection(__UpperCAmelCase				)





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      torch.manual_seed(0				)

      __UpperCamelCase      =	{
          'num_attention_heads': 2,
          'attention_head_dim': 12,
          'embedding_dim': self.text_embedder_hidden_size,
          'num_layers': 1,
      }

      __UpperCamelCase      =	PriorTransformer(**__UpperCAmelCase				)
      # clip_std and clip_mean is initialized to be 0 so PriorTransformer.post_process_latents will always return 0 - set clip_std to be 1 so it won't return 0
      __UpperCamelCase      =	nn.Parameter(torch.ones(model.clip_std.shape				)				)
      return model





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      torch.manual_seed(0				)
      __UpperCamelCase      =	CLIPVisionConfig(
          hidden_size=self.text_embedder_hidden_size     ,					image_size=224     ,					projection_dim=self.text_embedder_hidden_size     ,					intermediate_size=37     ,					num_attention_heads=4     ,					num_channels=3     ,					num_hidden_layers=5     ,					patch_size=14     ,					)

      __UpperCamelCase      =	CLIPVisionModelWithProjection(__UpperCAmelCase				)
      return model





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	CLIPImageProcessor(
          crop_size=224     ,					do_center_crop=__UpperCAmelCase     ,					do_normalize=__UpperCAmelCase     ,					do_resize=__UpperCAmelCase     ,					image_mean=[0.4_8_1_4_5_4_6_6, 0.4_5_7_8_2_7_5, 0.4_0_8_2_1_0_7_3]     ,					image_std=[0.2_6_8_6_2_9_5_4, 0.2_6_1_3_0_2_5_8, 0.2_7_5_7_7_7_1_1]     ,					resample=3     ,					size=224     ,					)

      return image_processor





     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	self.dummy_prior
      __UpperCamelCase      =	self.dummy_image_encoder
      __UpperCamelCase      =	self.dummy_text_encoder
      __UpperCamelCase      =	self.dummy_tokenizer
      __UpperCamelCase      =	self.dummy_image_processor

      __UpperCamelCase      =	UnCLIPScheduler(
          variance_type='fixed_small_log'     ,					prediction_type='sample'     ,					num_train_timesteps=1000     ,					clip_sample=__UpperCAmelCase     ,					clip_sample_range=1_0.0     ,					)

      __UpperCamelCase      =	{
          'prior': prior,
          'image_encoder': image_encoder,
          'text_encoder': text_encoder,
          'tokenizer': tokenizer,
          'scheduler': scheduler,
          'image_processor': image_processor,
      }

      return components





     def 						UpperCAmelCase (     self     ,					__UpperCAmelCase     ,					__UpperCAmelCase=0				):

      '''simple docstring'''




      if str(__UpperCAmelCase				).startswith('mps'				):
       __UpperCamelCase      =	torch.manual_seed(__UpperCAmelCase				)
      else:
       __UpperCamelCase      =	torch.Generator(device=__UpperCAmelCase				).manual_seed(__UpperCAmelCase				)
      __UpperCamelCase      =	{
          'prompt': 'horse',
          'generator': generator,
          'guidance_scale': 4.0,
          'num_inference_steps': 2,
          'output_type': 'np',
      }
      return inputs





     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	'cpu'

      __UpperCamelCase      =	self.get_dummy_components()

      __UpperCamelCase      =	self.pipeline_class(**__UpperCAmelCase				)
      __UpperCamelCase      =	pipe.to(__UpperCAmelCase				)

      pipe.set_progress_bar_config(disable=__UpperCAmelCase				)

      __UpperCamelCase      =	pipe(**self.get_dummy_inputs(__UpperCAmelCase				)				)
      __UpperCamelCase      =	output.image_embeds

      __UpperCamelCase      =	pipe(
          **self.get_dummy_inputs(__UpperCAmelCase				)     ,					return_dict=__UpperCAmelCase     ,					)[0]

      __UpperCamelCase      =	image[0, -10:]
      __UpperCamelCase      =	image_from_tuple[0, -10:]

      assert image.shape == (1, 32)

      __UpperCamelCase      =	np.array(
          [-0.0_5_3_2, 1.7_1_2_0, 0.3_6_5_6, -1.0_8_5_2, -0.8_9_4_6, -1.1_7_5_6, 0.4_3_4_8, 0.2_4_8_2, 0.5_1_4_6, -0.1_1_5_6]				)

      assert np.abs(image_slice.flatten() - expected_slice				).max() < 1E-2
      assert np.abs(image_from_tuple_slice.flatten() - expected_slice				).max() < 1E-2





     @skip_mps
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	torch_device == 'cpu'
      __UpperCamelCase      =	True
      __UpperCamelCase      =	False

      self._test_inference_batch_single_identical(
          test_max_difference=__UpperCAmelCase     ,					relax_max_difference=__UpperCAmelCase     ,					test_mean_pixel_difference=__UpperCAmelCase     ,					)







     @skip_mps
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




      __UpperCamelCase      =	torch_device == 'cpu'
      __UpperCamelCase      =	False

      self._test_attention_slicing_forward_pass(
          test_max_difference=__UpperCAmelCase     ,					test_mean_pixel_difference=__UpperCAmelCase     ,					)





"""simple docstring"""

from collections import OrderedDict
from typing import Mapping

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


UpperCamelCase     :    Union[str, Any]       =			logging.get_logger(__name__)

UpperCamelCase     :    int       =			{
    "distilbert-base-uncased": "https://huggingface.co/distilbert-base-uncased/resolve/main/config.json",
    "distilbert-base-uncased-distilled-squad": (
        "https://huggingface.co/distilbert-base-uncased-distilled-squad/resolve/main/config.json"
    ),
    "distilbert-base-cased": "https://huggingface.co/distilbert-base-cased/resolve/main/config.json",
    "distilbert-base-cased-distilled-squad": (
        "https://huggingface.co/distilbert-base-cased-distilled-squad/resolve/main/config.json"
    ),
    "distilbert-base-german-cased": "https://huggingface.co/distilbert-base-german-cased/resolve/main/config.json",
    "distilbert-base-multilingual-cased": (
        "https://huggingface.co/distilbert-base-multilingual-cased/resolve/main/config.json"
    ),
    "distilbert-base-uncased-finetuned-sst-2-english": (
        "https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english/resolve/main/config.json"
    ),
}

class __lowerCAmelCase		(				__SCREAMING_SNAKE_CASE      ):
     lowercase						       =						"distilbert"
     lowercase						       =						{
         "hidden_size": "dim",
         "num_attention_heads": "n_heads",
         "num_hidden_layers": "n_layers",
     }





     def __init__(     self     ,					__UpperCAmelCase=3_0522     ,					__UpperCAmelCase=512     ,					__UpperCAmelCase=False     ,					__UpperCAmelCase=6     ,					__UpperCAmelCase=12     ,					__UpperCAmelCase=768     ,					__UpperCAmelCase=4 * 768     ,					__UpperCAmelCase=0.1     ,					__UpperCAmelCase=0.1     ,					__UpperCAmelCase="gelu"     ,					__UpperCAmelCase=0.0_2     ,					__UpperCAmelCase=0.1     ,					__UpperCAmelCase=0.2     ,					__UpperCAmelCase=0     ,					**__UpperCAmelCase     ,					):

      '''simple docstring'''




      __UpperCamelCase      =	vocab_size
      __UpperCamelCase      =	max_position_embeddings
      __UpperCamelCase      =	sinusoidal_pos_embds
      __UpperCamelCase      =	n_layers
      __UpperCamelCase      =	n_heads
      __UpperCamelCase      =	dim
      __UpperCamelCase      =	hidden_dim
      __UpperCamelCase      =	dropout
      __UpperCamelCase      =	attention_dropout
      __UpperCamelCase      =	activation
      __UpperCamelCase      =	initializer_range
      __UpperCamelCase      =	qa_dropout
      __UpperCamelCase      =	seq_classif_dropout
      super().__init__(**__UpperCAmelCase     ,					pad_token_id=__UpperCAmelCase				)


class __lowerCAmelCase		(				__SCREAMING_SNAKE_CASE      ):





     @property
     def 						UpperCAmelCase (     self				):

      '''simple docstring'''




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



