


'''simple docstring'''






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 						a__							(				a__							,							unittest.TestCase    ):





							'''simple docstring'''






							lowercase__     :  Dict      		= "hf-internal-testing/tiny-random-OnnxStableDiffusionPipeline"







							def     __SCREAMING_SNAKE_CASE				(						self   ,       lowerCamelCase_=0  )			->				Tuple:
														lowerCAmelCase__			  =      np.random.RandomState(lowerCamelCase_  )
														lowerCAmelCase__			  =      {
														    '''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     __SCREAMING_SNAKE_CASE				(						self  )			->				List[str]:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.65_072, 0.58_492, 0.48_219, 0.55_521, 0.53_180, 0.55_939, 0.50_697, 0.39_800, 0.46_455]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Optional[int]:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														lowerCAmelCase__			  =      PNDMScheduler.from_config(pipe.scheduler.config   ,       skip_prk_steps=lowerCamelCase_  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.65_863, 0.59_425, 0.49_326, 0.56_313, 0.53_875, 0.56_627, 0.51_065, 0.39_777, 0.46_330]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[Any]:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														lowerCAmelCase__			  =      LMSDiscreteScheduler.from_config(pipe.scheduler.config  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.53_755, 0.60_786, 0.47_402, 0.49_488, 0.51_869, 0.49_819, 0.47_985, 0.38_957, 0.44_279]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Dict:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														lowerCAmelCase__			  =      EulerDiscreteScheduler.from_config(pipe.scheduler.config  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.53_755, 0.60_786, 0.47_402, 0.49_488, 0.51_869, 0.49_819, 0.47_985, 0.38_957, 0.44_279]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Optional[int]:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														lowerCAmelCase__			  =      EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.53_817, 0.60_812, 0.47_384, 0.49_530, 0.51_894, 0.49_814, 0.47_984, 0.38_958, 0.44_271]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				int:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														lowerCAmelCase__			  =      DPMSolverMultistepScheduler.from_config(pipe.scheduler.config  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 1_28, 1_28, 3)
														lowerCAmelCase__			  =      np.array([0.53_895, 0.60_808, 0.47_933, 0.49_608, 0.51_886, 0.49_950, 0.48_053, 0.38_957, 0.44_200]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				int:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

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

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

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

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

														lowerCAmelCase__			  =      prompt_embeds

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

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				str:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(self.hub_checkpoint   ,       provider='''CPUExecutionProvider'''  )
														pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

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

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

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

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

														lowerCAmelCase__  ,   lowerCAmelCase__			  =      embeds

														# forward
														lowerCAmelCase__			  =      pipe(**lowerCamelCase_  )
														lowerCAmelCase__			  =      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 						a__							(				unittest.TestCase    ):





							'''simple docstring'''






							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				str:
														return (
														    "CUDAExecutionProvider",
														    {
														        "gpu_mem_limit": "15000000000",  # 15GB
														        "arena_extend_strategy": "kSameAsRequested",
														    },
														)







							@property
							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[Any]:
														lowerCAmelCase__			  =      ort.SessionOptions()
														lowerCAmelCase__			  =      False
														return options







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Optional[int]:
														# using the PNDM scheduler by default
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(
														    '''CompVis/stable-diffusion-v1-4'''   ,       revision='''onnx'''   ,       safety_checker=lowerCamelCase_   ,       feature_extractor=lowerCamelCase_   ,       provider=self.gpu_provider   ,       sess_options=self.gpu_options   ,       )
														sd_pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

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

														assert image.shape == (1, 5_12, 5_12, 3)
														lowerCAmelCase__			  =      np.array([0.0_452, 0.0_390, 0.0_087, 0.0_350, 0.0_617, 0.0_364, 0.0_544, 0.0_523, 0.0_720]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Any:
														lowerCAmelCase__			  =      DDIMScheduler.from_pretrained(
														    '''runwayml/stable-diffusion-v1-5'''   ,       subfolder='''scheduler'''   ,       revision='''onnx'''  )
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(
														    '''runwayml/stable-diffusion-v1-5'''   ,       revision='''onnx'''   ,       scheduler=lowerCamelCase_   ,       safety_checker=lowerCamelCase_   ,       feature_extractor=lowerCamelCase_   ,       provider=self.gpu_provider   ,       sess_options=self.gpu_options   ,       )
														sd_pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 5_12, 5_12, 3)
														lowerCAmelCase__			  =      np.array([0.2_867, 0.1_974, 0.1_481, 0.7_294, 0.7_251, 0.6_667, 0.4_194, 0.5_642, 0.6_486]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				Dict:
														lowerCAmelCase__			  =      LMSDiscreteScheduler.from_pretrained(
														    '''runwayml/stable-diffusion-v1-5'''   ,       subfolder='''scheduler'''   ,       revision='''onnx'''  )
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(
														    '''runwayml/stable-diffusion-v1-5'''   ,       revision='''onnx'''   ,       scheduler=lowerCamelCase_   ,       safety_checker=lowerCamelCase_   ,       feature_extractor=lowerCamelCase_   ,       provider=self.gpu_provider   ,       sess_options=self.gpu_options   ,       )
														sd_pipe.set_progress_bar_config(disable=lowerCamelCase_  )

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

														assert image.shape == (1, 5_12, 5_12, 3)
														lowerCAmelCase__			  =      np.array([0.2_306, 0.1_959, 0.1_593, 0.6_549, 0.6_394, 0.5_408, 0.5_065, 0.6_010, 0.6_161]  )

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				int:
														lowerCAmelCase__			  =      0

														def test_callback_fn(lowerCamelCase_   ,       lowerCamelCase_   ,       lowerCamelCase_  ) -> None:
																					lowerCAmelCase__			  =      True
																					nonlocal number_of_steps
																					number_of_steps += 1
																					if step == 0:
																												assert latents.shape == (1, 4, 64, 64)
																												lowerCAmelCase__			  =      latents[0, -3:, -3:, -1]
																												lowerCAmelCase__			  =      np.array(
																												    [-0.6_772, -0.3_835, -1.2_456, 0.1_905, -1.0_974, 0.6_967, -1.9_353, 0.0_178, 1.0_167]  )

																												assert np.abs(latents_slice.flatten() - expected_slice  ).max() < 1e-3
																					elif step == 5:
																												assert latents.shape == (1, 4, 64, 64)
																												lowerCAmelCase__			  =      latents[0, -3:, -3:, -1]
																												lowerCAmelCase__			  =      np.array(
																												    [-0.3_351, 0.2_241, -0.1_837, -0.2_325, -0.6_577, 0.3_393, -0.0_241, 0.5_899, 1.3_875]  )

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

														lowerCAmelCase__			  =      False

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

														lowerCAmelCase__			  =      '''Andromeda galaxy in a bottle'''

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







							def     __SCREAMING_SNAKE_CASE				(						self  )			->				List[Any]:
														lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(
														    '''runwayml/stable-diffusion-v1-5'''   ,       revision='''onnx'''   ,       safety_checker=lowerCamelCase_   ,       feature_extractor=lowerCamelCase_   ,       provider=self.gpu_provider   ,       sess_options=self.gpu_options   ,       )
														assert isinstance(lowerCamelCase_   ,       lowerCamelCase_  )
														assert pipe.safety_checker is None

														lowerCAmelCase__			  =      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(lowerCamelCase_  )
																					lowerCAmelCase__			  =      OnnxStableDiffusionPipeline.from_pretrained(lowerCamelCase_  )

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



from math import factorial

class     A__   :







    """simple docstring"""

    def __init__(			self     ,   __snake_case     ,   __snake_case       ):
         snake_case											=							real
         if isinstance(__snake_case     ,   __snake_case       ):
              snake_case											=							[1] * rank
         else:
              snake_case											=							rank
    def __repr__(			self       ):
         return (
             F'''{self.real}+'''
             F'''{"+".join(str(__snake_case       )+"E"+str(n+1       )for n,dual in enumerate(self.duals       )       )}'''
         )
    def 						a_     (			self       ):
         snake_case											=							self.duals.copy()
         while cur[-1] == 0:
              cur.pop(-1       )
         return Dual(self.real     ,   __snake_case       )
    def __add__(			self     ,   __snake_case       ):
         if not isinstance(__snake_case     ,   __snake_case       ):
              return Dual(self.real + other     ,   self.duals       )
         snake_case											=							self.duals.copy()
         snake_case											=							other.duals.copy()
         if len(__snake_case       ) > len(__snake_case       ):
              o_dual.extend([1] * (len(__snake_case       ) - len(__snake_case       ))       )
         elif len(__snake_case       ) < len(__snake_case       ):
              s_dual.extend([1] * (len(__snake_case       ) - len(__snake_case       ))       )
         snake_case											=							[]
         for i in range(len(__snake_case       )       ):
              new_duals.append(s_dual[i] + o_dual[i]       )
         return Dual(self.real + other.real     ,   __snake_case       )

    __magic_name__         =						__add__
    def __sub__(			self     ,   __snake_case       ):
         return self + other * -1
    def __mul__(			self     ,   __snake_case       ):
         if not isinstance(__snake_case     ,   __snake_case       ):
              snake_case											=							[]
              for i in self.duals:
                   new_duals.append(i * other       )
              return Dual(self.real * other     ,   __snake_case       )
         snake_case											=							[0] * (len(self.duals       ) + len(other.duals       ) + 1)
         for i, item in enumerate(self.duals       ):
              for j, jtem in enumerate(other.duals       ):
                   new_duals[i + j + 1] += item * jtem
         for k in range(len(self.duals       )       ):
              new_duals[k] += self.duals[k] * other.real
         for index in range(len(other.duals       )       ):
              new_duals[index] += other.duals[index] * self.real
         return Dual(self.real * other.real     ,   __snake_case       )

    __magic_name__         =						__mul__
    def __truediv__(			self     ,   __snake_case       ):
         if not isinstance(__snake_case     ,   __snake_case       ):
              snake_case											=							[]
              for i in self.duals:
                   new_duals.append(i / other       )
              return Dual(self.real / other     ,   __snake_case       )
         raise ValueError
    def __floordiv__(			self     ,   __snake_case       ):
         if not isinstance(__snake_case     ,   __snake_case       ):
              snake_case											=							[]
              for i in self.duals:
                   new_duals.append(i // other       )
              return Dual(self.real // other     ,   __snake_case       )
         raise ValueError




    def __pow__(			self     ,   __snake_case       ):
         if n < 0 or isinstance(__snake_case     ,   __snake_case       ):
              raise ValueError('''power must be a positive integer'''       )
         if n == 0:
              return 1
         if n == 1:
              return self
         snake_case											=							self
         for _ in range(n - 1       ):
              x *= self
         return x






def      UpperCAmelCase__		(UpperCamelCase_				,UpperCamelCase_				,UpperCamelCase_							):



     """simple docstring"""






     if not callable(UpperCamelCase_							):
          raise ValueError('''differentiate() requires a function as input for func'''							)
     if not isinstance(UpperCamelCase_				,(float, int)							):
          raise ValueError('''differentiate() requires a float as input for position'''							)
     if not isinstance(UpperCamelCase_				,UpperCamelCase_							):
          raise ValueError('''differentiate() requires an int as input for order'''							)
     snake_case											=							Dual(UpperCamelCase_				,1							)
     snake_case											=							func(UpperCamelCase_							)
     if order == 0:
          return result.real
     return result.duals[order - 1] * factorial(UpperCamelCase_							)


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 def      UpperCAmelCase__		(UpperCamelCase_							):



      """simple docstring"""






      return y**2 * y**4

 print(differentiate(f, 9, 2))




