
import tempfile
import unittest

import numpy as np

from diffusers import (
    DDIMScheduler,
    DPMSolverMultistepScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    LMSDiscreteScheduler,
    OnnxStableDiffusionPipeline,
    PNDMScheduler,
)
from diffusers.utils.testing_utils import is_onnx_available, nightly, require_onnxruntime, require_torch_gpu

from ..test_pipelines_onnx_common import OnnxPipelineTesterMixin


if is_onnx_available():
				import onnxruntime as ort






class 				SCREAMING_SNAKE_CASE__			(							SCREAMING_SNAKE_CASE_      ,						unittest.TestCase			):

							"""simple docstring"""






							_snake_case   						=     """hf-internal-testing/tiny-random-OnnxStableDiffusionPipeline"""



							def 			A__						(     self   ,		SCREAMING_SNAKE_CASE_=0	)->      Union[str, Any]:





													'''simple docstring'''






													__UpperCamelCase        =	np.random.RandomState(__UpperCAmelCase	)
													__UpperCamelCase        =	{
													    'prompt': 'A painting of a squirrel eating a burger',
													    'generator': generator,
													    'num_inference_steps': 2,
													    'guidance_scale': 7.5,
													    'output_type': 'numpy',
													}
													return inputs



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





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.6_5_0_7_2, 0.5_8_4_9_2, 0.4_8_2_1_9, 0.5_5_5_2_1, 0.5_3_1_8_0, 0.5_5_9_3_9, 0.5_0_6_9_7, 0.3_9_8_0_0, 0.4_6_4_5_5]	)

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



							def 			A__						(     self	)->      str:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													__UpperCamelCase        =	PNDMScheduler.from_config(pipe.scheduler.config   ,		skip_prk_steps=__UpperCAmelCase	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.6_5_8_6_3, 0.5_9_4_2_5, 0.4_9_3_2_6, 0.5_6_3_1_3, 0.5_3_8_7_5, 0.5_6_6_2_7, 0.5_1_0_6_5, 0.3_9_7_7_7, 0.4_6_3_3_0]	)

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



							def 			A__						(     self	)->      str:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													__UpperCamelCase        =	LMSDiscreteScheduler.from_config(pipe.scheduler.config	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.5_3_7_5_5, 0.6_0_7_8_6, 0.4_7_4_0_2, 0.4_9_4_8_8, 0.5_1_8_6_9, 0.4_9_8_1_9, 0.4_7_9_8_5, 0.3_8_9_5_7, 0.4_4_2_7_9]	)

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



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





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													__UpperCamelCase        =	EulerDiscreteScheduler.from_config(pipe.scheduler.config	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.5_3_7_5_5, 0.6_0_7_8_6, 0.4_7_4_0_2, 0.4_9_4_8_8, 0.5_1_8_6_9, 0.4_9_8_1_9, 0.4_7_9_8_5, 0.3_8_9_5_7, 0.4_4_2_7_9]	)

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



							def 			A__						(     self	)->      Optional[int]:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													__UpperCamelCase        =	EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.5_3_8_1_7, 0.6_0_8_1_2, 0.4_7_3_8_4, 0.4_9_5_3_0, 0.5_1_8_9_4, 0.4_9_8_1_4, 0.4_7_9_8_4, 0.3_8_9_5_8, 0.4_4_2_7_1]	)

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



							def 			A__						(     self	)->      Dict:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													__UpperCamelCase        =	DPMSolverMultistepScheduler.from_config(pipe.scheduler.config	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	).images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 128, 128, 3)
													__UpperCamelCase        =	np.array([0.5_3_8_9_5, 0.6_0_8_0_8, 0.4_7_9_3_3, 0.4_9_6_0_8, 0.5_1_8_8_6, 0.4_9_9_5_0, 0.4_8_0_5_3, 0.3_8_9_5_7, 0.4_4_2_0_0]	)

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



							def 			A__						(     self	)->      Any:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	3 * [inputs['prompt']]

													# forward
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	)
													__UpperCamelCase        =	output.images[0, -3:, -3:, -1]

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	3 * [inputs.pop('''prompt'''	)]

													__UpperCamelCase        =	pipe.tokenizer(
													    __UpperCAmelCase   ,		padding='''max_length'''   ,		max_length=pipe.tokenizer.model_max_length   ,		truncation=__UpperCAmelCase   ,		return_tensors='''np'''   ,		)
													__UpperCamelCase        =	text_inputs['input_ids']

													__UpperCamelCase        =	pipe.text_encoder(input_ids=text_inputs.astype(np.intaa	)	)[0]

													__UpperCamelCase        =	prompt_embeds

													# forward
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	)
													__UpperCamelCase        =	output.images[0, -3:, -3:, -1]

													assert np.abs(image_slice_a.flatten() - image_slice_a.flatten()	).max() < 1E-4



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





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,		provider='''CPUExecutionProvider'''	)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	3 * ['this is a negative prompt']
													__UpperCamelCase        =	negative_prompt
													__UpperCamelCase        =	3 * [inputs['prompt']]

													# forward
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	)
													__UpperCamelCase        =	output.images[0, -3:, -3:, -1]

													__UpperCamelCase        =	self.get_dummy_inputs()
													__UpperCamelCase        =	3 * [inputs.pop('''prompt'''	)]

													__UpperCamelCase        =	[]
													for p in [prompt, negative_prompt]:
																			__UpperCamelCase        =	pipe.tokenizer(
																			    __UpperCAmelCase   ,		padding='''max_length'''   ,		max_length=pipe.tokenizer.model_max_length   ,		truncation=__UpperCAmelCase   ,		return_tensors='''np'''   ,		)
																			__UpperCamelCase        =	text_inputs['input_ids']

																			embeds.append(pipe.text_encoder(input_ids=text_inputs.astype(np.intaa	)	)[0]	)

													__UpperCamelCase        =	embeds

													# forward
													__UpperCamelCase        =	pipe(**__UpperCAmelCase	)
													__UpperCamelCase        =	output.images[0, -3:, -3:, -1]

													assert np.abs(image_slice_a.flatten() - image_slice_a.flatten()	).max() < 1E-4






@nightly
@require_onnxruntime
@require_torch_gpu
class 				SCREAMING_SNAKE_CASE__			(							unittest.TestCase			):

							"""simple docstring"""






							@property
							def 			A__						(     self	)->      Tuple:





													'''simple docstring'''






													return (
													    "CUDAExecutionProvider",
													    {
													        "gpu_mem_limit": "15000000000",  # 15GB
													        "arena_extend_strategy": "kSameAsRequested",
													    },
													)



							@property
							def 			A__						(     self	)->      List[str]:





													'''simple docstring'''






													__UpperCamelCase        =	ort.SessionOptions()
													__UpperCamelCase        =	False
													return options



							def 			A__						(     self	)->      Optional[int]:





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(
													    '''CompVis/stable-diffusion-v1-4'''   ,		revision='''onnx'''   ,		safety_checker=__UpperCAmelCase   ,		feature_extractor=__UpperCAmelCase   ,		provider=self.gpu_provider   ,		sess_options=self.gpu_options   ,		)
													sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	'A painting of a squirrel eating a burger'
													np.random.seed(0	)
													__UpperCamelCase        =	sd_pipe([prompt]   ,		guidance_scale=6.0   ,		num_inference_steps=10   ,		output_type='''np'''	)
													__UpperCamelCase        =	output.images

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

													assert image.shape == (1, 512, 512, 3)
													__UpperCamelCase        =	np.array([0.0_4_5_2, 0.0_3_9_0, 0.0_0_8_7, 0.0_3_5_0, 0.0_6_1_7, 0.0_3_6_4, 0.0_5_4_4, 0.0_5_2_3, 0.0_7_2_0]	)

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



							def 			A__						(     self	)->      Dict:





													'''simple docstring'''






													__UpperCamelCase        =	DDIMScheduler.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		subfolder='''scheduler'''   ,		revision='''onnx'''	)
													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		revision='''onnx'''   ,		scheduler=__UpperCAmelCase   ,		safety_checker=__UpperCAmelCase   ,		feature_extractor=__UpperCAmelCase   ,		provider=self.gpu_provider   ,		sess_options=self.gpu_options   ,		)
													sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	'open neural network exchange'
													__UpperCamelCase        =	np.random.RandomState(0	)
													__UpperCamelCase        =	sd_pipe([prompt]   ,		guidance_scale=7.5   ,		num_inference_steps=10   ,		generator=__UpperCAmelCase   ,		output_type='''np'''	)
													__UpperCamelCase        =	output.images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 512, 512, 3)
													__UpperCamelCase        =	np.array([0.2_8_6_7, 0.1_9_7_4, 0.1_4_8_1, 0.7_2_9_4, 0.7_2_5_1, 0.6_6_6_7, 0.4_1_9_4, 0.5_6_4_2, 0.6_4_8_6]	)

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



							def 			A__						(     self	)->      int:





													'''simple docstring'''






													__UpperCamelCase        =	LMSDiscreteScheduler.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		subfolder='''scheduler'''   ,		revision='''onnx'''	)
													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		revision='''onnx'''   ,		scheduler=__UpperCAmelCase   ,		safety_checker=__UpperCAmelCase   ,		feature_extractor=__UpperCAmelCase   ,		provider=self.gpu_provider   ,		sess_options=self.gpu_options   ,		)
													sd_pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	'open neural network exchange'
													__UpperCamelCase        =	np.random.RandomState(0	)
													__UpperCamelCase        =	sd_pipe([prompt]   ,		guidance_scale=7.5   ,		num_inference_steps=10   ,		generator=__UpperCAmelCase   ,		output_type='''np'''	)
													__UpperCamelCase        =	output.images
													__UpperCamelCase        =	image[0, -3:, -3:, -1]

													assert image.shape == (1, 512, 512, 3)
													__UpperCamelCase        =	np.array([0.2_3_0_6, 0.1_9_5_9, 0.1_5_9_3, 0.6_5_4_9, 0.6_3_9_4, 0.5_4_0_8, 0.5_0_6_5, 0.6_0_1_0, 0.6_1_6_1]	)

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



							def 			A__						(     self	)->      str:





													'''simple docstring'''






													__UpperCamelCase        =	0

													def test_callback_fn(SCREAMING_SNAKE_CASE_   ,		SCREAMING_SNAKE_CASE_   ,		SCREAMING_SNAKE_CASE_	) -> None:
																			__UpperCamelCase        =	True
																			nonlocal number_of_steps
																			number_of_steps += 1
																			if step == 0:
																									assert latents.shape == (1, 4, 64, 64)
																									__UpperCamelCase        =	latents[0, -3:, -3:, -1]
																									__UpperCamelCase        =	np.array(
																									    [-0.6_7_7_2, -0.3_8_3_5, -1.2_4_5_6, 0.1_9_0_5, -1.0_9_7_4, 0.6_9_6_7, -1.9_3_5_3, 0.0_1_7_8, 1.0_1_6_7]	)

																									assert np.abs(latents_slice.flatten() - expected_slice	).max() < 1E-3
																			elif step == 5:
																									assert latents.shape == (1, 4, 64, 64)
																									__UpperCamelCase        =	latents[0, -3:, -3:, -1]
																									__UpperCamelCase        =	np.array(
																									    [-0.3_3_5_1, 0.2_2_4_1, -0.1_8_3_7, -0.2_3_2_5, -0.6_5_7_7, 0.3_3_9_3, -0.0_2_4_1, 0.5_8_9_9, 1.3_8_7_5]	)

																									assert np.abs(latents_slice.flatten() - expected_slice	).max() < 1E-3

													__UpperCamelCase        =	False

													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		revision='''onnx'''   ,		safety_checker=__UpperCAmelCase   ,		feature_extractor=__UpperCAmelCase   ,		provider=self.gpu_provider   ,		sess_options=self.gpu_options   ,		)
													pipe.set_progress_bar_config(disable=__UpperCAmelCase	)

													__UpperCamelCase        =	'Andromeda galaxy in a bottle'

													__UpperCamelCase        =	np.random.RandomState(0	)
													pipe(
													    prompt=__UpperCAmelCase   ,		num_inference_steps=5   ,		guidance_scale=7.5   ,		generator=__UpperCAmelCase   ,		callback=__UpperCAmelCase   ,		callback_steps=1   ,		)
													assert test_callback_fn.has_been_called
													assert number_of_steps == 6



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





													'''simple docstring'''






													__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(
													    '''runwayml/stable-diffusion-v1-5'''   ,		revision='''onnx'''   ,		safety_checker=__UpperCAmelCase   ,		feature_extractor=__UpperCAmelCase   ,		provider=self.gpu_provider   ,		sess_options=self.gpu_options   ,		)
													assert isinstance(__UpperCAmelCase   ,		__UpperCAmelCase	)
													assert pipe.safety_checker is None

													__UpperCamelCase        =	pipe('''example prompt'''   ,		num_inference_steps=2	).images[0]
													assert image is not None

													# check that there's no error when saving a pipeline with one of the models being None
													with tempfile.TemporaryDirectory() as tmpdirname:
																			pipe.save_pretrained(__UpperCAmelCase	)
																			__UpperCamelCase        =	OnnxStableDiffusionPipeline.from_pretrained(__UpperCAmelCase	)

													# sanity check that the pipeline still works
													assert pipe.safety_checker is None
													__UpperCamelCase        =	pipe('''example prompt'''   ,		num_inference_steps=2	).images[0]
													assert image is not None











"""simple docstring"""





import argparse

import torch

from transformers import BertConfig, BertForPreTraining, load_tf_weights_in_bert
from transformers.utils import logging


logging.set_verbosity_info()
def  __A   (_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			)					->Dict:





  """simple docstring"""


  lowerCAmelCase__			:str											=							BertConfig.from_json_file(_SCREAMING_SNAKE_CASE			)
  print(F"Building PyTorch model from configuration: {config}"			)
  lowerCAmelCase__			:int											=							BertForPreTraining(_SCREAMING_SNAKE_CASE			)

  # Load weights from tf checkpoint
  load_tf_weights_in_bert(_SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE     ,   _SCREAMING_SNAKE_CASE			)

  # Save pytorch-model
  print(F"Save PyTorch model to {pytorch_dump_path}"			)
  torch.save(model.state_dict()     ,   _SCREAMING_SNAKE_CASE			)


if __name__ == "__main__":
  __A											=		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(
      """--bert_config_file""",
      default=None,
      type=str,
      required=True,
      help=(
          """The config json file corresponding to the pre-trained BERT model. \n"""
          """This specifies the model architecture."""
      ),
  )
  parser.add_argument(
      """--pytorch_dump_path""", default=None, type=str, required=True, help="""Path to the output PyTorch model."""
  )
  __A											=		parser.parse_args()
  convert_tf_checkpoint_to_pytorch(args.tf_checkpoint_path, args.bert_config_file, args.pytorch_dump_path)
