




"""simple docstring"""

import gc
import unittest

from transformers import CTRLConfig, is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
							import torch

							from transformers import (
							    CTRL_PRETRAINED_MODEL_ARCHIVE_LIST,
							    CTRLForSequenceClassification,
							    CTRLLMHeadModel,
							    CTRLModel,
							)
class 	lowerCamelCase__			:


			def __init__(   self ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE=14 ,       SCREAMING_SNAKE_CASE=7 ,       SCREAMING_SNAKE_CASE=True ,       SCREAMING_SNAKE_CASE=True ,       SCREAMING_SNAKE_CASE=True ,       SCREAMING_SNAKE_CASE=True ,       SCREAMING_SNAKE_CASE=True ,       SCREAMING_SNAKE_CASE=99 ,       SCREAMING_SNAKE_CASE=32 ,       SCREAMING_SNAKE_CASE=5 ,       SCREAMING_SNAKE_CASE=4 ,       SCREAMING_SNAKE_CASE=37 ,       SCREAMING_SNAKE_CASE="gelu" ,       SCREAMING_SNAKE_CASE=0.1 ,       SCREAMING_SNAKE_CASE=0.1 ,       SCREAMING_SNAKE_CASE=512 ,       SCREAMING_SNAKE_CASE=16 ,       SCREAMING_SNAKE_CASE=2 ,       SCREAMING_SNAKE_CASE=0.02 ,       SCREAMING_SNAKE_CASE=3 ,       SCREAMING_SNAKE_CASE=4 ,       SCREAMING_SNAKE_CASE=None ,       ):



					"""simple docstring"""







					snake_case						:  List[Any]    	= parent
					snake_case						:  List[str]    	= batch_size
					snake_case						:  List[Any]    	= seq_length
					snake_case						:  Tuple    	= is_training
					snake_case						:  Dict    	= use_token_type_ids
					snake_case						:  int    	= use_input_mask
					snake_case						:  Any    	= use_labels
					snake_case						:  Tuple    	= use_mc_token_ids
					snake_case						:  List[Any]    	= vocab_size
					snake_case						:  str    	= hidden_size
					snake_case						:  int    	= num_hidden_layers
					snake_case						:  Dict    	= num_attention_heads
					snake_case						:  Optional[int]    	= intermediate_size
					snake_case						:  Dict    	= hidden_act
					snake_case						:  List[str]    	= hidden_dropout_prob
					snake_case						:  Any    	= attention_probs_dropout_prob
					snake_case						:  Dict    	= max_position_embeddings
					snake_case						:  Tuple    	= type_vocab_size
					snake_case						:  Optional[int]    	= type_sequence_label_size
					snake_case						:  List[str]    	= initializer_range
					snake_case						:  Any    	= num_labels
					snake_case						:  str    	= num_choices
					snake_case						:  Optional[Any]    	= scope
					snake_case						:  Tuple    	= self.vocab_size - 1


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  Union[str, Any]    	= ids_tensor([self.batch_size, self.seq_length] ,       self.vocab_size							)

					snake_case						:  Union[str, Any]    	= None
					if self.use_input_mask:
							snake_case						:  List[str]    	= random_attention_mask([self.batch_size, self.seq_length]							)

					snake_case						:  Tuple    	= None
					if self.use_token_type_ids:
							snake_case						:  Union[str, Any]    	= ids_tensor([self.batch_size, self.seq_length] ,       self.type_vocab_size							)

					snake_case						:  int    	= None
					if self.use_mc_token_ids:
							snake_case						:  str    	= ids_tensor([self.batch_size, self.num_choices] ,       self.seq_length							)

					snake_case						:  int    	= None
					snake_case						:  Dict    	= None
					snake_case						:  Optional[Any]    	= None
					if self.use_labels:
							snake_case						:  str    	= ids_tensor([self.batch_size] ,       self.type_sequence_label_size							)
							snake_case						:  int    	= ids_tensor([self.batch_size, self.seq_length] ,       self.num_labels							)
							snake_case						:  str    	= ids_tensor([self.batch_size] ,       self.num_choices							)

					snake_case						:  str    	= self.get_config()

					snake_case						:  Union[str, Any]    	= ids_tensor([self.num_hidden_layers, self.num_attention_heads] ,       2							)

					return (
					    config,
					    input_ids,
					    input_mask,
					    head_mask,
					    token_type_ids,
					    mc_token_ids,
					    sequence_labels,
					    token_labels,
					    choice_labels,
					)


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					return CTRLConfig(
					    vocab_size=self.vocab_size ,       n_embd=self.hidden_size ,       n_layer=self.num_hidden_layers ,       n_head=self.num_attention_heads ,       n_positions=self.max_position_embeddings ,       pad_token_id=self.pad_token_id ,       )


			def 							lowerCamelCase_ (   self ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       *SCREAMING_SNAKE_CASE							):



					"""simple docstring"""







					snake_case						:  str    	= CTRLModel(config=A__							)
					model.to(A__							)
					model.eval()

					model(A__ ,       token_type_ids=A__ ,       head_mask=A__							)
					model(A__ ,       token_type_ids=A__							)
					snake_case						:  int    	= model(A__							)
					self.parent.assertEqual(result.last_hidden_state.shape ,       (self.batch_size, self.seq_length, self.hidden_size)							)
					self.parent.assertEqual(len(result.past_key_values							) ,       config.n_layer							)


			def 							lowerCamelCase_ (   self ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       *SCREAMING_SNAKE_CASE							):



					"""simple docstring"""







					snake_case						:  Union[str, Any]    	= CTRLLMHeadModel(A__							)
					model.to(A__							)
					model.eval()

					snake_case						:  str    	= model(A__ ,       token_type_ids=A__ ,       labels=A__							)
					self.parent.assertEqual(result.loss.shape ,       ()							)
					self.parent.assertEqual(result.logits.shape ,       (self.batch_size, self.seq_length, self.vocab_size)							)


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  Tuple    	= self.prepare_config_and_inputs()

					(
					    (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, (
					    snake_case						
					)	, 						
					)						:  Tuple    	= config_and_inputs

					snake_case						:  Optional[int]    	= {"input_ids": input_ids, "token_type_ids": token_type_ids, "head_mask": head_mask}

					return config, inputs_dict



			def 							lowerCamelCase_ (   self ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       *SCREAMING_SNAKE_CASE							):



					"""simple docstring"""







					snake_case						:  List[str]    	= self.num_labels
					snake_case						:  Optional[int]    	= CTRLForSequenceClassification(A__							)
					model.to(A__							)
					model.eval()
					snake_case						:  Any    	= ids_tensor([self.batch_size] ,       self.type_sequence_label_size							)
					snake_case						:  str    	= model(A__ ,       token_type_ids=A__ ,       labels=A__							)
					self.parent.assertEqual(result.logits.shape ,       (self.batch_size, self.num_labels)							)







@require_torch
class 	lowerCamelCase__			(     SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__ ,     SCREAMING_SNAKE_CASE__ ,     unittest.TestCase	):
			a__       :					List[Any]	    =   (CTRLModel, CTRLLMHeadModel, CTRLForSequenceClassification) if is_torch_available() else ()
			a__       :					Optional[Any]	    =   (CTRLLMHeadModel,) if is_torch_available() else ()
			a__       :					Dict	    =   (
			    {
			        '''feature-extraction''': CTRLModel,
			        '''text-classification''': CTRLForSequenceClassification,
			        '''text-generation''': CTRLLMHeadModel,
			        '''zero-shot''': CTRLForSequenceClassification,
			    }
			    if is_torch_available()
			    else {}
			)
			a__       :					Any	    =   True
			a__       :					Tuple	    =   False
			a__       :					List[Any]	    =   False


			def 							lowerCamelCase_ (   self ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE ,       SCREAMING_SNAKE_CASE							):



					"""simple docstring"""







					if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
							# Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
							# `CTRLConfig` was never used in pipeline tests, either because of a missing checkpoint or because a tiny
							# config could not be created.
							return True

					return False


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  List[Any]    	= CTRLModelTester(self							)
					snake_case						:  List[str]    	= ConfigTester(self ,       config_class=A__ ,       n_embd=37							)


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					super().tearDown()
					# clean-up as much as possible GPU memory occupied by PyTorch
					gc.collect()
					torch.cuda.empty_cache()


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					self.config_tester.run_common_tests()


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  str    	= self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_ctrl_model(*A__							)


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  Optional[int]    	= self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_lm_head_model(*A__							)


			@unittest.skip("Will be fixed soon by reducing the size of the model used for common tests."							)
			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					pass


			@slow
			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					for model_name in CTRL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							snake_case						:  List[Any]    	= CTRLModel.from_pretrained(A__							)
							self.assertIsNotNone(A__							)



			@unittest.skip("The model doesn\'t support left padding"							)  # and it's not used enough to be worth fixing :)
			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					pass







@require_torch
class 	lowerCamelCase__			(     unittest.TestCase	):


			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					super().tearDown()
					# clean-up as much as possible GPU memory occupied by PyTorch
					gc.collect()
					torch.cuda.empty_cache()



			@slow
			def 							lowerCamelCase_ (   self							):



					"""simple docstring"""







					snake_case						:  Any    	= CTRLLMHeadModel.from_pretrained("ctrl"							)
					model.to(A__							)
					snake_case						:  str    	= torch.tensor(
					    [[11_859, 0, 1_611, 8]] ,       dtype=torch.long ,       device=A__							)  # Legal the president is
					snake_case						:  int    	= [
					    11_859,
					    0,
					    1_611,
					    8,
					    5,
					    150,
					    26_449,
					    2,
					    19,
					    348,
					    469,
					    3,
					    2_595,
					    48,
					    20_740,
					    246_533,
					    246_533,
					    19,
					    30,
					    5,
					]  # Legal the president is a good guy and I don't want to lose my job. \n \n I have a

					snake_case						:  Union[str, Any]    	= model.generate(A__ ,       do_sample=A__							)
					self.assertListEqual(output_ids[0].tolist() ,       A__							)



import gc
import random
import unittest

import numpy as np
import torch
from transformers import XLMRobertaTokenizer

from diffusers import (
    AltDiffusionImgaImgPipeline,
    AutoencoderKL,
    PNDMScheduler,
    UNetaDConditionModel,
)
from diffusers.image_processor import VaeImageProcessor
from diffusers.pipelines.alt_diffusion.modeling_roberta_series import (
    RobertaSeriesConfig,
    RobertaSeriesModelWithTransformation,
)
from diffusers.utils import floats_tensor, load_image, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu


enable_full_determinism()







class 				lowercase		(					unittest.TestCase		):




							def  A__      (				self):
												# clean up the VRAM after each test
												super().tearDown()
												gc.collect()
												torch.cuda.empty_cache()




							@property
							def  A__      (				self):
												lowercase							=						1
												lowercase							=						3
												lowercase							=						(3_2, 3_2)

												lowercase							=						floats_tensor((batch_size, num_channels) + sizes   ,rng=random.Random(0)).to(A__)
												return image




							@property
							def  A__      (				self):
												torch.manual_seed(0)
												lowercase							=						UNetaDConditionModel(
												    block_out_channels=(3_2, 6_4)   ,layers_per_block=2   ,sample_size=3_2   ,in_channels=4   ,out_channels=4   ,down_block_types=('''DownBlock2D''', '''CrossAttnDownBlock2D''')   ,up_block_types=('''CrossAttnUpBlock2D''', '''UpBlock2D''')   ,cross_attention_dim=3_2   ,)
												return model




							@property
							def  A__      (				self):
												torch.manual_seed(0)
												lowercase							=						AutoencoderKL(
												    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=4   ,)
												return model




							@property
							def  A__      (				self):
												torch.manual_seed(0)
												lowercase							=						RobertaSeriesConfig(
												    hidden_size=3_2   ,project_dim=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=5_0_0_6   ,)
												return RobertaSeriesModelWithTransformation(A__)




							@property
							def  A__      (				self):
												def extract(*A__   ,**A__):







																	class 				lowercase		:




																								def __init__(				self):
																													lowercase							=						torch.ones([0])





																								def  A__      (				self   ,A__):
																													self.pixel_values.to(A__)
																													return self


																	return Out()

												return extract




							def  A__      (				self):
												lowercase							=						'''cpu'''  # ensure determinism for the device-dependent torch.Generator
												lowercase							=						self.dummy_cond_unet
												lowercase							=						PNDMScheduler(skip_prk_steps=A__)
												lowercase							=						self.dummy_vae
												lowercase							=						self.dummy_text_encoder
												lowercase							=						XLMRobertaTokenizer.from_pretrained('''hf-internal-testing/tiny-xlm-roberta''')
												lowercase							=						7_7

												lowercase							=						self.dummy_image.to(A__)
												lowercase							=						init_image / 2 + 0.5

												# make sure here that pndm scheduler skips prk
												lowercase							=						AltDiffusionImgaImgPipeline(
												    unet=A__   ,scheduler=A__   ,vae=A__   ,text_encoder=A__   ,tokenizer=A__   ,safety_checker=A__   ,feature_extractor=self.dummy_extractor   ,)
												lowercase							=						VaeImageProcessor(vae_scale_factor=alt_pipe.vae_scale_factor   ,do_normalize=A__)
												lowercase							=						alt_pipe.to(A__)
												alt_pipe.set_progress_bar_config(disable=A__)

												lowercase							=						'''A painting of a squirrel eating a burger'''
												lowercase							=						torch.Generator(device=A__).manual_seed(0)
												lowercase							=						alt_pipe(
												    [prompt]   ,generator=A__   ,guidance_scale=6.0   ,num_inference_steps=2   ,output_type='''np'''   ,image=A__   ,)

												lowercase							=						output.images

												lowercase							=						torch.Generator(device=A__).manual_seed(0)
												lowercase							=						alt_pipe(
												    [prompt]   ,generator=A__   ,guidance_scale=6.0   ,num_inference_steps=2   ,output_type='''np'''   ,image=A__   ,return_dict=A__   ,)[0]

												lowercase							=						image[0, -3:, -3:, -1]
												lowercase							=						image_from_tuple[0, -3:, -3:, -1]

												assert image.shape == (1, 3_2, 3_2, 3)
												lowercase							=						np.array([0.4427, 0.3731, 0.4249, 0.4941, 0.4546, 0.4148, 0.4193, 0.4666, 0.4499])

												assert np.abs(image_slice.flatten() - expected_slice).max() < 5E-3
												assert np.abs(image_from_tuple_slice.flatten() - expected_slice).max() < 5E-3




							@unittest.skipIf(torch_device != '''cuda'''   ,'''This test requires a GPU''')
							def  A__      (				self):
												lowercase							=						self.dummy_cond_unet
												lowercase							=						PNDMScheduler(skip_prk_steps=A__)
												lowercase							=						self.dummy_vae
												lowercase							=						self.dummy_text_encoder
												lowercase							=						XLMRobertaTokenizer.from_pretrained('''hf-internal-testing/tiny-xlm-roberta''')
												lowercase							=						7_7

												lowercase							=						self.dummy_image.to(A__)

												# put models in fp16
												lowercase							=						unet.half()
												lowercase							=						vae.half()
												lowercase							=						bert.half()

												# make sure here that pndm scheduler skips prk
												lowercase							=						AltDiffusionImgaImgPipeline(
												    unet=A__   ,scheduler=A__   ,vae=A__   ,text_encoder=A__   ,tokenizer=A__   ,safety_checker=A__   ,feature_extractor=self.dummy_extractor   ,)
												lowercase							=						VaeImageProcessor(vae_scale_factor=alt_pipe.vae_scale_factor   ,do_normalize=A__)
												lowercase							=						alt_pipe.to(A__)
												alt_pipe.set_progress_bar_config(disable=A__)

												lowercase							=						'''A painting of a squirrel eating a burger'''
												lowercase							=						torch.manual_seed(0)
												lowercase							=						alt_pipe(
												    [prompt]   ,generator=A__   ,num_inference_steps=2   ,output_type='''np'''   ,image=A__   ,).images

												assert image.shape == (1, 3_2, 3_2, 3)





							@unittest.skipIf(torch_device != '''cuda'''   ,'''This test requires a GPU''')
							def  A__      (				self):
												lowercase							=						load_image(
												    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
												    '''/img2img/sketch-mountains-input.jpg''')
												# resize to resolution that is divisible by 8 but not 16 or 32
												lowercase							=						init_image.resize((7_6_0, 5_0_4))

												lowercase							=						'''BAAI/AltDiffusion'''
												lowercase							=						AltDiffusionImgaImgPipeline.from_pretrained(
												    A__   ,safety_checker=A__   ,)
												pipe.to(A__)
												pipe.set_progress_bar_config(disable=A__)
												pipe.enable_attention_slicing()

												lowercase							=						'''A fantasy landscape, trending on artstation'''

												lowercase							=						torch.manual_seed(0)
												lowercase							=						pipe(
												    prompt=A__   ,image=A__   ,strength=0.75   ,guidance_scale=7.5   ,generator=A__   ,output_type='''np'''   ,)
												lowercase							=						output.images[0]

												lowercase							=						image[2_5_5:2_5_8, 3_8_3:3_8_6, -1]

												assert image.shape == (5_0_4, 7_6_0, 3)
												lowercase							=						np.array([0.9358, 0.9397, 0.9599, 0.9901, 1.0000, 1.0000, 0.9882, 1.0000, 1.0000])

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







@slow
@require_torch_gpu
class 				lowercase		(					unittest.TestCase		):




							def  A__      (				self):
												# clean up the VRAM after each test
												super().tearDown()
												gc.collect()
												torch.cuda.empty_cache()





							def  A__      (				self):
												lowercase							=						load_image(
												    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main'''
												    '''/img2img/sketch-mountains-input.jpg''')
												lowercase							=						init_image.resize((7_6_8, 5_1_2))
												lowercase							=						load_numpy(
												    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/img2img/fantasy_landscape_alt.npy''')

												lowercase							=						'''BAAI/AltDiffusion'''
												lowercase							=						AltDiffusionImgaImgPipeline.from_pretrained(
												    A__   ,safety_checker=A__   ,)
												pipe.to(A__)
												pipe.set_progress_bar_config(disable=A__)
												pipe.enable_attention_slicing()

												lowercase							=						'''A fantasy landscape, trending on artstation'''

												lowercase							=						torch.manual_seed(0)
												lowercase							=						pipe(
												    prompt=A__   ,image=A__   ,strength=0.75   ,guidance_scale=7.5   ,generator=A__   ,output_type='''np'''   ,)
												lowercase							=						output.images[0]

												assert image.shape == (5_1_2, 7_6_8, 3)
												# img2img is flaky across GPUs even in fp32, so using MAE here
												assert np.abs(expected_image - image).max() < 1E-2




