import os
import sys
import unittest


_UpperCAmelCase            =		os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(os.path.join(git_repo_path, """utils"""))

import get_test_info  # noqa: E402
from get_test_info import (  # noqa: E402
    get_model_to_test_mapping,
    get_model_to_tester_mapping,
    get_test_to_tester_mapping,
)


_UpperCAmelCase            =		os.path.join("""tests""", """models""", """bert""", """test_modeling_bert.py""")
_UpperCAmelCase            =		os.path.join("""tests""", """models""", """blip""", """test_modeling_blip.py""")





class UpperCAmelCase						( unittest.TestCase  ):


				'''simple docstring'''






				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						A_		:    Union[str, Any]         =				get_test_to_tester_mapping(lowercase )
						A_		:    Dict         =				get_test_to_tester_mapping(lowercase )

						A_		:    Optional[int]         =				{'BertModelTest': 'BertModelTester'}

						A_		:    Tuple         =				{
						    'BlipModelTest': 'BlipModelTester',
						    'BlipTextImageModelTest': 'BlipTextImageModelsModelTester',
						    'BlipTextModelTest': 'BlipTextModelTester',
						    'BlipTextRetrievalModelTest': 'BlipTextRetrievalModelTester',
						    'BlipVQAModelTest': 'BlipVQAModelTester',
						    'BlipVisionModelTest': 'BlipVisionModelTester',
						}

						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )
						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						A_		:    Any         =				get_model_to_test_mapping(lowercase )
						A_		:    int         =				get_model_to_test_mapping(lowercase )

						A_		:    Union[str, Any]         =				{
						    'BertForMaskedLM': ['BertModelTest'],
						    'BertForMultipleChoice': ['BertModelTest'],
						    'BertForNextSentencePrediction': ['BertModelTest'],
						    'BertForPreTraining': ['BertModelTest'],
						    'BertForQuestionAnswering': ['BertModelTest'],
						    'BertForSequenceClassification': ['BertModelTest'],
						    'BertForTokenClassification': ['BertModelTest'],
						    'BertLMHeadModel': ['BertModelTest'],
						    'BertModel': ['BertModelTest'],
						}

						A_		:    str         =				{
						    'BlipForConditionalGeneration': ['BlipTextImageModelTest'],
						    'BlipForImageTextRetrieval': ['BlipTextRetrievalModelTest'],
						    'BlipForQuestionAnswering': ['BlipVQAModelTest'],
						    'BlipModel': ['BlipModelTest'],
						    'BlipTextModel': ['BlipTextModelTest'],
						    'BlipVisionModel': ['BlipVisionModelTest'],
						}

						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )
						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )







				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						A_		:    Optional[int]         =				get_model_to_tester_mapping(lowercase )
						A_		:    Dict         =				get_model_to_tester_mapping(lowercase )

						A_		:    str         =				{
						    'BertForMaskedLM': ['BertModelTester'],
						    'BertForMultipleChoice': ['BertModelTester'],
						    'BertForNextSentencePrediction': ['BertModelTester'],
						    'BertForPreTraining': ['BertModelTester'],
						    'BertForQuestionAnswering': ['BertModelTester'],
						    'BertForSequenceClassification': ['BertModelTester'],
						    'BertForTokenClassification': ['BertModelTester'],
						    'BertLMHeadModel': ['BertModelTester'],
						    'BertModel': ['BertModelTester'],
						}

						A_		:    Any         =				{
						    'BlipForConditionalGeneration': ['BlipTextImageModelsModelTester'],
						    'BlipForImageTextRetrieval': ['BlipTextRetrievalModelTester'],
						    'BlipForQuestionAnswering': ['BlipVQAModelTester'],
						    'BlipModel': ['BlipModelTester'],
						    'BlipTextModel': ['BlipTextModelTester'],
						    'BlipVisionModel': ['BlipVisionModelTester'],
						}

						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )
						self.assertEqual(get_test_info.to_json(lowercase )		,     lowercase )







import unittest

import numpy as np
import torch
from transformers import CLIPTextConfig, CLIPTextModel

from diffusers import DDIMScheduler, LDMPipeline, UNetaDModel, VQModel
from diffusers.utils.testing_utils import enable_full_determinism, require_torch, slow, torch_device


enable_full_determinism()





class UpperCAmelCase						( unittest.TestCase  ):


				'''simple docstring'''






				@property
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						torch.manual_seed(0 )
						A_		:    int         =				UNetaDModel(
						    block_out_channels=(3_2, 6_4)		,     layers_per_block=2		,     sample_size=3_2		,     in_channels=3		,     out_channels=3		,     down_block_types=('DownBlock2D', 'AttnDownBlock2D')		,     up_block_types=('AttnUpBlock2D', 'UpBlock2D')		,     )
						return model
				@property
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						torch.manual_seed(0 )
						A_		:    Optional[Any]         =				VQModel(
						    block_out_channels=[3_2, 6_4]		,     in_channels=3		,     out_channels=3		,     down_block_types=['DownEncoderBlock2D', 'DownEncoderBlock2D']		,     up_block_types=['UpDecoderBlock2D', 'UpDecoderBlock2D']		,     latent_channels=3		,     )
						return model
				@property
				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						torch.manual_seed(0 )
						A_		:    List[Any]         =				CLIPTextConfig(
						    bos_token_id=0		,     eos_token_id=2		,     hidden_size=3_2		,     intermediate_size=3_7		,     layer_norm_eps=1E-05		,     num_attention_heads=4		,     num_hidden_layers=5		,     pad_token_id=1		,     vocab_size=1_0_0_0		,     )
						return CLIPTextModel(lowercase )







				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						A_		:    Optional[int]         =				self.dummy_uncond_unet
						A_		:    List[Any]         =				DDIMScheduler()
						A_		:    Any         =				self.dummy_vq_model

						A_		:    int         =				LDMPipeline(unet=lowercase		,     vqvae=lowercase		,     scheduler=lowercase )
						ldm.to(lowercase )
						ldm.set_progress_bar_config(disable=lowercase )

						A_		:    Any         =				torch.manual_seed(0 )
						A_		:    Dict         =				ldm(generator=lowercase		,     num_inference_steps=2		,     output_type='numpy' ).images

						A_		:    Any         =				torch.manual_seed(0 )
						A_		:    List[str]         =				ldm(generator=lowercase		,     num_inference_steps=2		,     output_type='numpy'		,     return_dict=lowercase )[0]

						A_		:    Union[str, Any]         =				image[0, -3:, -3:, -1]
						A_		:    int         =				image_from_tuple[0, -3:, -3:, -1]

						assert image.shape == (1, 6_4, 6_4, 3)
						A_		:    List[str]         =				np.array([0.8512, 0.818, 0.6411, 0.6808, 0.4465, 0.5618, 0.46, 0.6231, 0.5172] )
						A_		:    str         =				1E-2 if torch_device != 'mps' else 3E-2

						assert np.abs(image_slice.flatten() - expected_slice ).max() < tolerance
						assert np.abs(image_from_tuple_slice.flatten() - expected_slice ).max() < tolerance





@slow
@require_torch
class UpperCAmelCase						( unittest.TestCase  ):


				'''simple docstring'''






				def   lowerCAmelCase_       (						self ):



						"""simple docstring"""





						A_		:    List[Any]         =				LDMPipeline.from_pretrained('CompVis/ldm-celebahq-256' )
						ldm.to(lowercase )
						ldm.set_progress_bar_config(disable=lowercase )

						A_		:    Any         =				torch.manual_seed(0 )
						A_		:    List[str]         =				ldm(generator=lowercase		,     num_inference_steps=5		,     output_type='numpy' ).images

						A_		:    List[Any]         =				image[0, -3:, -3:, -1]

						assert image.shape == (1, 2_5_6, 2_5_6, 3)
						A_		:    Tuple         =				np.array([0.4399, 0.4_4975, 0.4_6825, 0.474, 0.4359, 0.4581, 0.4_5095, 0.4341, 0.4447] )
						A_		:    Dict         =				1E-2 if torch_device != 'mps' else 3E-2

						assert np.abs(image_slice.flatten() - expected_slice ).max() < tolerance






