

'''simple docstring'''






import gc
import unittest

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

from diffusers import (
    AutoencoderKL,
    DDIMScheduler,
    StableDiffusionSAGPipeline,
    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     lowercase_			(lowerCamelCase__       , lowerCamelCase__       , unittest.TestCase   ):




  """simple docstring"""




  SCREAMING_SNAKE_CASE					:						str           =    StableDiffusionSAGPipeline
  SCREAMING_SNAKE_CASE					:						Optional[Any]           =    TEXT_TO_IMAGE_PARAMS
  SCREAMING_SNAKE_CASE					:						int           =    TEXT_TO_IMAGE_BATCH_PARAMS
  SCREAMING_SNAKE_CASE					:						Optional[Any]           =    TEXT_TO_IMAGE_IMAGE_PARAMS
  SCREAMING_SNAKE_CASE					:						Tuple           =    TEXT_TO_IMAGE_IMAGE_PARAMS
  SCREAMING_SNAKE_CASE					:						List[str]           =    False






  def       SCREAMING_SNAKE_CASE   (   self     :  Optional[int]    ):
   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      ,)
   __lowercase													=				DDIMScheduler(
       beta_start=0.0_0_0_8_5      ,beta_end=0.0_1_2      ,beta_schedule='''scaled_linear'''      ,clip_sample=lowercase__      ,set_alpha_to_one=lowercase__      ,)
   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      ,)
   torch.manual_seed(0    )
   __lowercase													=				CLIPTextConfig(
       bos_token_id=0      ,eos_token_id=2      ,hidden_size=3_2      ,intermediate_size=3_7      ,layer_norm_eps=1e-0_5      ,num_attention_heads=4      ,num_hidden_layers=5      ,pad_token_id=1      ,vocab_size=1_0_0_0      ,)
   __lowercase													=				CLIPTextModel(lowercase__    )
   __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       SCREAMING_SNAKE_CASE   (   self     :  Dict      ,lowercase__     :  Dict      ,lowercase__     :  str=0    ):
   if str(lowercase__    ).startswith('''mps'''    ):
    __lowercase													=				torch.manual_seed(lowercase__    )
   else:
    __lowercase													=				torch.Generator(device=lowercase__    ).manual_seed(lowercase__    )
   __lowercase													=				{
       '''prompt''': '''.''',
       '''generator''': generator,
       '''num_inference_steps''': 2,
       '''guidance_scale''': 1.0,
       '''sag_scale''': 1.0,
       '''output_type''': '''numpy''',
   }
   return inputs






  def       SCREAMING_SNAKE_CASE   (   self     :  Dict    ):
   super().test_inference_batch_single_identical(expected_max_diff=3e-3    )






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




  """simple docstring"""




  def       SCREAMING_SNAKE_CASE   (   self     :  List[str]    ):
   # clean up the VRAM after each test
   super().tearDown()
   gc.collect()
   torch.cuda.empty_cache()






  def       SCREAMING_SNAKE_CASE   (   self     :  List[str]    ):
   __lowercase													=				StableDiffusionSAGPipeline.from_pretrained('''CompVis/stable-diffusion-v1-4'''    )
   __lowercase													=				sag_pipe.to(lowercase__    )
   sag_pipe.set_progress_bar_config(disable=lowercase__    )

   __lowercase													=				'''.'''
   __lowercase													=				torch.manual_seed(0    )
   __lowercase													=				sag_pipe(
       [prompt]      ,generator=lowercase__      ,guidance_scale=7.5      ,sag_scale=1.0      ,num_inference_steps=2_0      ,output_type='''np'''    )

   __lowercase													=				output.images

   __lowercase													=				image[0, -3:, -3:, -1]

   assert image.shape == (1, 5_1_2, 5_1_2, 3)
   __lowercase													=				np.array([0.1_5_6_8, 0.1_7_3_8, 0.1_6_9_5, 0.1_6_9_3, 0.1_5_0_7, 0.1_7_0_5, 0.1_5_4_7, 0.1_7_5_1, 0.1_9_4_9]    )

   assert np.abs(image_slice.flatten() - expected_slice    ).max() < 5e-2






  def       SCREAMING_SNAKE_CASE   (   self     :  str    ):
   __lowercase													=				StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''    )
   __lowercase													=				sag_pipe.to(lowercase__    )
   sag_pipe.set_progress_bar_config(disable=lowercase__    )

   __lowercase													=				'''.'''
   __lowercase													=				torch.manual_seed(0    )
   __lowercase													=				sag_pipe(
       [prompt]      ,generator=lowercase__      ,guidance_scale=7.5      ,sag_scale=1.0      ,num_inference_steps=2_0      ,output_type='''np'''    )

   __lowercase													=				output.images

   __lowercase													=				image[0, -3:, -3:, -1]

   assert image.shape == (1, 5_1_2, 5_1_2, 3)
   __lowercase													=				np.array([0.3_4_5_9, 0.2_8_7_6, 0.2_5_3_7, 0.3_0_0_2, 0.2_6_7_1, 0.2_1_6_0, 0.3_0_2_6, 0.2_2_6_2, 0.2_3_7_1]    )

   assert np.abs(image_slice.flatten() - expected_slice    ).max() < 5e-2






  def       SCREAMING_SNAKE_CASE   (   self     :  str    ):
   __lowercase													=				StableDiffusionSAGPipeline.from_pretrained('''stabilityai/stable-diffusion-2-1-base'''    )
   __lowercase													=				sag_pipe.to(lowercase__    )
   sag_pipe.set_progress_bar_config(disable=lowercase__    )

   __lowercase													=				'''.'''
   __lowercase													=				torch.manual_seed(0    )
   __lowercase													=				sag_pipe(
       [prompt]      ,width=7_6_8      ,height=5_1_2      ,generator=lowercase__      ,guidance_scale=7.5      ,sag_scale=1.0      ,num_inference_steps=2_0      ,output_type='''np'''      ,)

   __lowercase													=				output.images

   assert image.shape == (1, 5_1_2, 7_6_8, 3)




'''simple docstring'''






import argparse

from transformers import TaConfig, TaForConditionalGeneration, load_tf_weights_in_ta
from transformers.utils import logging


logging.set_verbosity_info()


def 	_A  (					A__  ,       A__  ,       A__   ):






 """simple docstring"""



 __lowercase													=				TaConfig.from_json_file(A__   )
 print(F"Building PyTorch model from configuration: {config}"   )
 __lowercase													=				TaForConditionalGeneration(A__   )

 # Load weights from tf checkpoint
 load_tf_weights_in_ta(A__  ,       A__  ,       A__   )

 # Save pytorch-model
 print(F"Save PyTorch model to {pytorch_dump_path}"   )
 model.save_pretrained(A__   )


if __name__ == "__main__":
 lowerCAmelCase__      		=			argparse.ArgumentParser()
 # Required parameters
 parser.add_argument(
     '''--tf_checkpoint_path''', default=None, type=str, required=True, help='''Path to the TensorFlow checkpoint path.'''
 )
 parser.add_argument(
     '''--config_file''',
     default=None,
     type=str,
     required=True,
     help=(
         '''The config json file corresponding to the pre-trained T5 model. \nThis specifies the model architecture.'''
     ),
 )
 parser.add_argument(
     '''--pytorch_dump_path''', default=None, type=str, required=True, help='''Path to the output PyTorch model.'''
 )
 lowerCAmelCase__      		=			parser.parse_args()
 convert_tf_checkpoint_to_pytorch(args.tf_checkpoint_path, args.config_file, args.pytorch_dump_path)

