




from __future__ import annotations

import unittest

from transformers import OpenAIGPTConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
				import tensorflow as tf

				from transformers.models.openai.modeling_tf_openai import (
				    TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFOpenAIGPTDoubleHeadsModel,
				    TFOpenAIGPTForSequenceClassification,
				    TFOpenAIGPTLMHeadModel,
				    TFOpenAIGPTModel,
				)





class 		A__				:






	def __init__(	self				,     lowerCamelCase				,     )      ->   List[Any]:




						"""simple docstring"""






						__magic_name__					:							Optional[int]		   =							parent
						__magic_name__					:							int		   =							13
						__magic_name__					:							List[str]		   =							7
						__magic_name__					:							Union[str, Any]		   =							True
						__magic_name__					:							Tuple		   =							True
						__magic_name__					:							int		   =							True
						__magic_name__					:							List[Any]		   =							True
						__magic_name__					:							List[Any]		   =							True
						__magic_name__					:							Dict		   =							99
						__magic_name__					:							List[Any]		   =							32
						__magic_name__					:							Tuple		   =							2
						__magic_name__					:							Union[str, Any]		   =							4
						__magic_name__					:							int		   =							37
						__magic_name__					:							Any		   =							'''gelu'''
						__magic_name__					:							Any		   =							0.1
						__magic_name__					:							str		   =							0.1
						__magic_name__					:							List[str]		   =							512
						__magic_name__					:							str		   =							16
						__magic_name__					:							Optional[int]		   =							2
						__magic_name__					:							Optional[int]		   =							0.0_2
						__magic_name__					:							Optional[Any]		   =							3
						__magic_name__					:							Union[str, Any]		   =							4
						__magic_name__					:							Dict		   =							None
						__magic_name__					:							Union[str, Any]		   =							self.vocab_size - 1






	def  lowercase      (	self						)      ->   List[Any]:




						"""simple docstring"""






						__magic_name__					:							Dict		   =							ids_tensor([self.batch_size, self.seq_length]				,     self.vocab_size						)

						__magic_name__					:							str		   =							None
						if self.use_input_mask:
											__magic_name__					:							Optional[int]		   =							random_attention_mask([self.batch_size, self.seq_length]						)

						__magic_name__					:							List[str]		   =							None
						if self.use_token_type_ids:
											__magic_name__					:							Optional[int]		   =							ids_tensor([self.batch_size, self.seq_length]				,     self.type_vocab_size						)

						__magic_name__					:							Any		   =							None
						if self.use_mc_token_ids:
											__magic_name__					:							List[Any]		   =							ids_tensor([self.batch_size, self.num_choices]				,     self.seq_length						)

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

						__magic_name__					:							List[Any]		   =							OpenAIGPTConfig(
						    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				,     )

						__magic_name__					:							Dict		   =							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  lowercase      (	self				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     *lowerCamelCase						)      ->   Any:




						"""simple docstring"""






						__magic_name__					:							Optional[Any]		   =							TFOpenAIGPTModel(config=lowerCamelCase__						)
						__magic_name__					:							int		   =							{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
						__magic_name__					:							Union[str, Any]		   =							model(lowerCamelCase__						)

						__magic_name__					:							List[Any]		   =							[input_ids, input_mask]
						__magic_name__					:							List[str]		   =							model(lowerCamelCase__						)

						__magic_name__					:							Optional[int]		   =							model(lowerCamelCase__						)

						self.parent.assertEqual(result.last_hidden_state.shape				,     (self.batch_size, self.seq_length, self.hidden_size)						)






	def  lowercase      (	self				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     *lowerCamelCase						)      ->   str:




						"""simple docstring"""






						__magic_name__					:							Dict		   =							TFOpenAIGPTLMHeadModel(config=lowerCamelCase__						)
						__magic_name__					:							Union[str, Any]		   =							{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
						__magic_name__					:							str		   =							model(lowerCamelCase__						)
						self.parent.assertEqual(result.logits.shape				,     (self.batch_size, self.seq_length, self.vocab_size)						)






	def  lowercase      (	self				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     *lowerCamelCase						)      ->   List[Any]:




						"""simple docstring"""






						__magic_name__					:							Optional[Any]		   =							TFOpenAIGPTDoubleHeadsModel(config=lowerCamelCase__						)

						__magic_name__					:							Union[str, Any]		   =							tf.tile(tf.expand_dims(lowerCamelCase__				,     1						)				,     (1, self.num_choices, 1)						)
						__magic_name__					:							List[Any]		   =							tf.tile(tf.expand_dims(lowerCamelCase__				,     1						)				,     (1, self.num_choices, 1)						)
						__magic_name__					:							str		   =							tf.tile(tf.expand_dims(lowerCamelCase__				,     1						)				,     (1, self.num_choices, 1)						)

						__magic_name__					:							List[Any]		   =							{
						    '''input_ids''': multiple_choice_inputs_ids,
						    '''mc_token_ids''': mc_token_ids,
						    '''attention_mask''': multiple_choice_input_mask,
						    '''token_type_ids''': multiple_choice_token_type_ids,
						}
						__magic_name__					:							Any		   =							model(lowerCamelCase__						)
						self.parent.assertEqual(
						    result.logits.shape				,     (self.batch_size, self.num_choices, self.seq_length, self.vocab_size)						)
						self.parent.assertEqual(result.mc_logits.shape				,     (self.batch_size, self.num_choices)						)






	def  lowercase      (	self				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     *lowerCamelCase						)      ->   Optional[Any]:




						"""simple docstring"""






						__magic_name__					:							Optional[Any]		   =							self.num_labels
						__magic_name__					:							Any		   =							ids_tensor([self.batch_size]				,     self.type_sequence_label_size						)
						__magic_name__					:							List[str]		   =							{
						    '''input_ids''': input_ids,
						    '''attention_mask''': input_mask,
						    '''token_type_ids''': token_type_ids,
						    '''labels''': sequence_labels,
						}
						__magic_name__					:							Optional[Any]		   =							TFOpenAIGPTForSequenceClassification(lowerCamelCase__						)
						__magic_name__					:							Optional[Any]		   =							model(lowerCamelCase__						)
						self.parent.assertEqual(result.logits.shape				,     (self.batch_size, self.num_labels)						)






	def  lowercase      (	self						)      ->   List[str]:




						"""simple docstring"""






						__magic_name__					:							Union[str, Any]		   =							self.prepare_config_and_inputs()

						(
						    (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , (
						    __magic_name__
						)   , 
						)					:							Any		   =							config_and_inputs

						__magic_name__					:							List[str]		   =							{'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': input_mask}
						return config, inputs_dict





@require_tf
class 		A__				(   __A		,     __A		,     unittest.TestCase ):
	lowerCamelCase__		: int				    =(
	    (TFOpenAIGPTModel, TFOpenAIGPTLMHeadModel, TFOpenAIGPTDoubleHeadsModel, TFOpenAIGPTForSequenceClassification)
	    if is_tf_available()
	    else ()
	)
	lowerCamelCase__		: List[str]				    =(
	    (TFOpenAIGPTLMHeadModel,) if is_tf_available() else ()
	)  # TODO (PVP): Add Double HeadsModel when generate() function is changed accordingly
	lowerCamelCase__		: List[Any]				    =(
	    {
	        """feature-extraction""": TFOpenAIGPTModel,
	        """text-classification""": TFOpenAIGPTForSequenceClassification,
	        """text-generation""": TFOpenAIGPTLMHeadModel,
	        """zero-shot""": TFOpenAIGPTForSequenceClassification,
	    }
	    if is_tf_available()
	    else {}
	)
	lowerCamelCase__		: Dict				    =False
	lowerCamelCase__		: Any				    =False






	def  lowercase      (	self				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase				,     lowerCamelCase						)      ->   Union[str, Any]:




						"""simple docstring"""






						if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
											# Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
											# `OpenAIGPTConfig` 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  lowercase      (	self						)      ->   int:




						"""simple docstring"""






						__magic_name__					:							List[str]		   =							TFOpenAIGPTModelTester(self						)
						__magic_name__					:							List[Any]		   =							ConfigTester(self				,     config_class=lowerCamelCase__				,     n_embd=37						)






	def  lowercase      (	self						)      ->   Union[str, Any]:




						"""simple docstring"""






						self.config_tester.run_common_tests()






	def  lowercase      (	self						)      ->   int:




						"""simple docstring"""






						__magic_name__					:							Optional[Any]		   =							self.model_tester.prepare_config_and_inputs()
						self.model_tester.create_and_check_openai_gpt_model(*lowerCamelCase__						)






	def  lowercase      (	self						)      ->   List[Any]:




						"""simple docstring"""






						__magic_name__					:							str		   =							self.model_tester.prepare_config_and_inputs()
						self.model_tester.create_and_check_openai_gpt_lm_head(*lowerCamelCase__						)






	def  lowercase      (	self						)      ->   int:




						"""simple docstring"""






						__magic_name__					:							List[Any]		   =							self.model_tester.prepare_config_and_inputs()
						self.model_tester.create_and_check_openai_gpt_double_head(*lowerCamelCase__						)






	def  lowercase      (	self						)      ->   str:




						"""simple docstring"""






						__magic_name__					:							List[str]		   =							self.model_tester.prepare_config_and_inputs()
						self.model_tester.create_and_check_openai_gpt_for_sequence_classification(*lowerCamelCase__						)






	@slow
	def  lowercase      (	self						)      ->   List[str]:




						"""simple docstring"""






						for model_name in TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
											__magic_name__					:							Optional[int]		   =							TFOpenAIGPTModel.from_pretrained(lowerCamelCase__						)
											self.assertIsNotNone(lowerCamelCase__						)





@require_tf
class 		A__				(   unittest.TestCase ):






	@slow
	def  lowercase      (	self						)      ->   Any:




						"""simple docstring"""






						__magic_name__					:							Dict		   =							TFOpenAIGPTLMHeadModel.from_pretrained('''openai-gpt'''						)
						__magic_name__					:							str		   =							tf.convert_to_tensor([[481, 4735, 544]]				,     dtype=tf.intaa						)  # the president is
						__magic_name__					:							List[str]		   =							[
						    481,
						    4735,
						    544,
						    246,
						    963,
						    870,
						    762,
						    239,
						    244,
						    40477,
						    244,
						    249,
						    719,
						    881,
						    487,
						    544,
						    240,
						    244,
						    603,
						    481,
						]  # the president is a very good man. " \n " i\'m sure he is, " said the

						__magic_name__					:							List[Any]		   =							model.generate(lowerCamelCase__				,     do_sample=lowerCamelCase__						)
						self.assertListEqual(output_ids[0].numpy().tolist()				,     lowerCamelCase__						)









'''simple docstring'''
import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMParallelScheduler,
    DDPMParallelScheduler,
    StableDiffusionParadigmsPipeline,
    UNetaDConditionModel,
)
from diffusers.utils import slow, torch_device
from diffusers.utils.testing_utils import (
    enable_full_determinism,
    require_torch_gpu,
)

from ..pipeline_params import TEXT_TO_IMAGE_BATCH_PARAMS, TEXT_TO_IMAGE_IMAGE_PARAMS, TEXT_TO_IMAGE_PARAMS
from ..test_pipelines_common import PipelineLatentTesterMixin, PipelineTesterMixin


enable_full_determinism()






class        SCREAMING_SNAKE_CASE(				__A   ,      __A   ,      unittest.TestCase     ):
       snake_case_ :     str    =					StableDiffusionParadigmsPipeline
       snake_case_ :     Optional[Any]    =					TEXT_TO_IMAGE_PARAMS
       snake_case_ :     Tuple    =					TEXT_TO_IMAGE_BATCH_PARAMS
       snake_case_ :     Optional[Any]    =					TEXT_TO_IMAGE_IMAGE_PARAMS
       snake_case_ :     str    =					TEXT_TO_IMAGE_IMAGE_PARAMS

       def     snake_case__			(    self     )    ->					int:

           """simple docstring"""



           torch.manual_seed(0     )
           __lowercase							=						UNetaDConditionModel(
               block_out_channels=(32, 64)					,		layers_per_block=2					,		sample_size=32					,		in_channels=4					,		out_channels=4					,		down_block_types=("""DownBlock2D""", """CrossAttnDownBlock2D""")					,		up_block_types=("""CrossAttnUpBlock2D""", """UpBlock2D""")					,		cross_attention_dim=32					,		attention_head_dim=(2, 4)					,		use_linear_projection=lowerCamelCase__					,		)
           __lowercase							=						DDIMParallelScheduler(
               beta_start=0.0_00_85					,		beta_end=0.0_12					,		beta_schedule="""scaled_linear"""					,		clip_sample=lowerCamelCase__					,		set_alpha_to_one=lowerCamelCase__					,		)
           torch.manual_seed(0     )
           __lowercase							=						AutoencoderKL(
               block_out_channels=[32, 64]					,		in_channels=3					,		out_channels=3					,		down_block_types=["""DownEncoderBlock2D""", """DownEncoderBlock2D"""]					,		up_block_types=["""UpDecoderBlock2D""", """UpDecoderBlock2D"""]					,		latent_channels=4					,		sample_size=128					,		)
           torch.manual_seed(0     )
           __lowercase							=						CLIPTextConfig(
               bos_token_id=0					,		eos_token_id=2					,		hidden_size=32					,		intermediate_size=37					,		layer_norm_eps=1E-0_5					,		num_attention_heads=4					,		num_hidden_layers=5					,		pad_token_id=1					,		vocab_size=1000					,		hidden_act="""gelu"""					,		projection_dim=512					,		)
           __lowercase							=						CLIPTextModel(lowerCamelCase__     )
           __lowercase							=						CLIPTokenizer.from_pretrained("""hf-internal-testing/tiny-random-clip"""     )

           __lowercase							=						{
               """unet""": unet,
               """scheduler""": scheduler,
               """vae""": vae,
               """text_encoder""": text_encoder,
               """tokenizer""": tokenizer,
               """safety_checker""": None,
               """feature_extractor""": None,
           }
           return components

       def     snake_case__			(    self					,		lowerCamelCase__					,		lowerCamelCase__=0     )    ->					Any:

           """simple docstring"""



           if str(lowerCamelCase__     ).startswith("""mps"""     ):
               __lowercase							=						torch.manual_seed(lowerCamelCase__     )
           else:
               __lowercase							=						torch.Generator(device=lowerCamelCase__     ).manual_seed(lowerCamelCase__     )
           __lowercase							=						{
               """prompt""": """a photograph of an astronaut riding a horse""",
               """generator""": generator,
               """num_inference_steps""": 10,
               """guidance_scale""": 6.0,
               """output_type""": """numpy""",
               """parallel""": 3,
               """debug""": True,
           }
           return inputs

       def     snake_case__			(    self     )    ->					List[str]:

           """simple docstring"""



           __lowercase							=						"""cpu"""  # ensure determinism for the device-dependent torch.Generator
           __lowercase							=						self.get_dummy_components()
           __lowercase							=						StableDiffusionParadigmsPipeline(**lowerCamelCase__     )
           __lowercase							=						sd_pipe.to(lowerCamelCase__     )
           sd_pipe.set_progress_bar_config(disable=lowerCamelCase__     )

           __lowercase							=						self.get_dummy_inputs(lowerCamelCase__     )
           __lowercase							=						sd_pipe(**lowerCamelCase__     ).images
           __lowercase							=						image[0, -3:, -3:, -1]
           assert image.shape == (1, 64, 64, 3)

           __lowercase							=						np.array([0.47_73, 0.54_17, 0.47_23, 0.49_25, 0.56_31, 0.47_52, 0.52_40, 0.49_35, 0.50_23]     )

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

       def     snake_case__			(    self     )    ->					str:

           """simple docstring"""



           __lowercase							=						"""cpu"""  # ensure determinism for the device-dependent torch.Generator
           __lowercase							=						self.get_dummy_components()
           torch.manual_seed(0     )
           __lowercase							=						DDPMParallelScheduler()
           torch.manual_seed(0     )
           __lowercase							=						StableDiffusionParadigmsPipeline(**lowerCamelCase__     )
           __lowercase							=						sd_pipe.to(lowerCamelCase__     )
           sd_pipe.set_progress_bar_config(disable=lowerCamelCase__     )

           __lowercase							=						self.get_dummy_inputs(lowerCamelCase__     )
           __lowercase							=						sd_pipe(**lowerCamelCase__     ).images
           __lowercase							=						image[0, -3:, -3:, -1]
           assert image.shape == (1, 64, 64, 3)

           __lowercase							=						np.array([0.35_73, 0.44_20, 0.49_60, 0.47_99, 0.37_96, 0.38_79, 0.48_19, 0.43_65, 0.44_68]     )

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

       def     snake_case__			(    self     )    ->					Any:

           """simple docstring"""



           super().test_inference_batch_consistent(batch_sizes=[1, 2]     )

       def     snake_case__			(    self     )    ->					Optional[Any]:

           """simple docstring"""



           super().test_inference_batch_single_identical(batch_size=2					,		expected_max_diff=3E-3     )




       def     snake_case__			(    self     )    ->					str:

           """simple docstring"""



           __lowercase							=						"""cpu"""  # ensure determinism for the device-dependent torch.Generator
           __lowercase							=						self.get_dummy_components()
           __lowercase							=						StableDiffusionParadigmsPipeline(**lowerCamelCase__     )
           __lowercase							=						sd_pipe.to(lowerCamelCase__     )
           sd_pipe.set_progress_bar_config(disable=lowerCamelCase__     )

           __lowercase							=						self.get_dummy_inputs(lowerCamelCase__     )
           __lowercase							=						"""french fries"""
           __lowercase							=						sd_pipe(**lowerCamelCase__					,		negative_prompt=lowerCamelCase__     )
           __lowercase							=						output.images
           __lowercase							=						image[0, -3:, -3:, -1]

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

           __lowercase							=						np.array([0.47_71, 0.54_20, 0.46_83, 0.49_18, 0.56_36, 0.47_25, 0.52_30, 0.49_23, 0.50_15]     )

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






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

       def     snake_case__			(    self     )    ->					str:

           """simple docstring"""



           super().tearDown()
           gc.collect()
           torch.cuda.empty_cache()

       def     snake_case__			(    self					,		lowerCamelCase__=0     )    ->					int:

           """simple docstring"""



           __lowercase							=						torch.Generator(device=lowerCamelCase__     ).manual_seed(lowerCamelCase__     )
           __lowercase							=						{
               """prompt""": """a photograph of an astronaut riding a horse""",
               """generator""": generator,
               """num_inference_steps""": 10,
               """guidance_scale""": 7.5,
               """output_type""": """numpy""",
               """parallel""": 3,
               """debug""": True,
           }
           return inputs




       def     snake_case__			(    self     )    ->					Optional[Any]:

           """simple docstring"""



           __lowercase							=						"""stabilityai/stable-diffusion-2-base"""
           __lowercase							=						DDIMParallelScheduler.from_pretrained(lowerCamelCase__					,		subfolder="""scheduler"""     )
           __lowercase							=						StableDiffusionParadigmsPipeline.from_pretrained(lowerCamelCase__					,		scheduler=lowerCamelCase__					,		safety_checker=lowerCamelCase__     )
           pipe.to(lowerCamelCase__     )
           pipe.set_progress_bar_config(disable=lowerCamelCase__     )
           pipe.enable_attention_slicing()

           __lowercase							=						self.get_inputs()
           __lowercase							=						pipe(**lowerCamelCase__     ).images
           __lowercase							=						image[0, -3:, -3:, -1].flatten()

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

           __lowercase							=						np.array([0.96_22, 0.96_02, 0.97_48, 0.95_91, 0.96_30, 0.96_91, 0.96_61, 0.96_31, 0.97_41]     )

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




