




import random
import unittest

import numpy as np

from diffusers import (
    DPMSolverMultistepScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    LMSDiscreteScheduler,
    OnnxStableDiffusionImgaImgPipeline,
    PNDMScheduler,
)
from diffusers.utils import floats_tensor
from diffusers.utils.testing_utils import (
    is_onnx_available,
    load_image,
    nightly,
    require_onnxruntime,
    require_torch_gpu,
)

from ..test_pipelines_onnx_common import OnnxPipelineTesterMixin


if is_onnx_available():
     import onnxruntime as ort





class 			__lowerCamelCase	(   UpperCamelCase__     ,    unittest.TestCase   ):




    """simple docstring"""

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


    def        a				(	self					:					List[str]       ,     SCREAMING_SNAKE_CASE__					:					str=0       )				->	Any:
         lowerCAmelCase__          =			floats_tensor((1, 3, 128, 128)       ,     rng=random.Random(SCREAMING_SNAKE_CASE__       )       )
         lowerCAmelCase__          =			np.random.RandomState(SCREAMING_SNAKE_CASE__       )
         lowerCAmelCase__          =			{
             "prompt": "A painting of a squirrel eating a burger",
             "image": image,
             "generator": generator,
             "num_inference_steps": 3,
             "strength": 0.75,
             "guidance_scale": 7.5,
             "output_type": "numpy",
         }
         return inputs


    def        a				(	self					:					List[str]       )				->	Any:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.69_643, 0.58_484, 0.50_314, 0.58_760, 0.55_368, 0.59_643, 0.51_529, 0.41_217, 0.49_087]       )
         assert np.abs(image_slice - expected_slice       ).max() < 1e-1


    def        a				(	self					:					Union[str, Any]       )				->	Tuple:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         lowerCAmelCase__          =			PNDMScheduler.from_config(pipe.scheduler.config       ,     skip_prk_steps=SCREAMING_SNAKE_CASE__       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.61_737, 0.54_642, 0.53_183, 0.54_465, 0.52_742, 0.60_525, 0.49_969, 0.40_655, 0.48_154]       )

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


    def        a				(	self					:					Tuple       )				->	int:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         lowerCAmelCase__          =			LMSDiscreteScheduler.from_config(pipe.scheduler.config       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

         # warmup pass to apply optimizations
         lowerCAmelCase__          =			pipe(**self.get_dummy_inputs()       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.52_761, 0.59_977, 0.49_033, 0.49_619, 0.54_282, 0.50_311, 0.47_600, 0.40_918, 0.45_203]       )

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


    def        a				(	self					:					List[str]       )				->	Optional[Any]:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         lowerCAmelCase__          =			EulerDiscreteScheduler.from_config(pipe.scheduler.config       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.52_911, 0.60_004, 0.49_229, 0.49_805, 0.54_502, 0.50_680, 0.47_777, 0.41_028, 0.45_304]       )

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


    def        a				(	self					:					List[str]       )				->	Optional[Any]:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         lowerCAmelCase__          =			EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.52_911, 0.60_004, 0.49_229, 0.49_805, 0.54_502, 0.50_680, 0.47_777, 0.41_028, 0.45_304]       )

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


    def        a				(	self					:					List[str]       )				->	Dict:
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(self.hub_checkpoint       ,     provider="CPUExecutionProvider"       )
         lowerCAmelCase__          =			DPMSolverMultistepScheduler.from_config(pipe.scheduler.config       )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

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

         assert image.shape == (1, 128, 128, 3)
         lowerCAmelCase__          =			np.array([0.65_331, 0.58_277, 0.48_204, 0.56_059, 0.53_665, 0.56_235, 0.50_969, 0.40_009, 0.46_552]       )

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






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




    """simple docstring"""

    @property
    def        a				(	self					:					List[Any]       )				->	Dict:
         return (
             "CUDAExecutionProvider",
             {
                 "gpu_mem_limit": "15000000000",  # 15GB
                 "arena_extend_strategy": "kSameAsRequested",
             },
         )


    @property
    def        a				(	self					:					str       )				->	str:
         lowerCAmelCase__          =			ort.SessionOptions()
         lowerCAmelCase__          =			False
         return options


    def        a				(	self					:					List[str]       )				->	Union[str, Any]:
         lowerCAmelCase__          =			load_image(
             "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
             "/img2img/sketch-mountains-input.jpg"       )
         lowerCAmelCase__          =			init_image.resize((768, 512)       )
         # using the PNDM scheduler by default
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(
             "CompVis/stable-diffusion-v1-4"       ,     revision="onnx"       ,     safety_checker=SCREAMING_SNAKE_CASE__       ,     feature_extractor=SCREAMING_SNAKE_CASE__       ,     provider=self.gpu_provider       ,     sess_options=self.gpu_options       ,     )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

         lowerCAmelCase__          =			"A fantasy landscape, trending on artstation"

         lowerCAmelCase__          =			np.random.RandomState(0       )
         lowerCAmelCase__          =			pipe(
             prompt=SCREAMING_SNAKE_CASE__       ,     image=SCREAMING_SNAKE_CASE__       ,     strength=0.75       ,     guidance_scale=7.5       ,     num_inference_steps=10       ,     generator=SCREAMING_SNAKE_CASE__       ,     output_type="np"       ,     )
         lowerCAmelCase__          =			output.images
         lowerCAmelCase__          =			images[0, 255:258, 383:386, -1]

         assert images.shape == (1, 512, 768, 3)
         lowerCAmelCase__          =			np.array([0.4_909, 0.5_059, 0.5_372, 0.4_623, 0.4_876, 0.5_049, 0.4_820, 0.4_956, 0.5_019]       )
         # TODO: lower the tolerance after finding the cause of onnxruntime reproducibility issues

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


    def        a				(	self					:					Union[str, Any]       )				->	Union[str, Any]:
         lowerCAmelCase__          =			load_image(
             "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"
             "/img2img/sketch-mountains-input.jpg"       )
         lowerCAmelCase__          =			init_image.resize((768, 512)       )
         lowerCAmelCase__          =			LMSDiscreteScheduler.from_pretrained(
             "runwayml/stable-diffusion-v1-5"       ,     subfolder="scheduler"       ,     revision="onnx"       )
         lowerCAmelCase__          =			OnnxStableDiffusionImgaImgPipeline.from_pretrained(
             "runwayml/stable-diffusion-v1-5"       ,     revision="onnx"       ,     scheduler=SCREAMING_SNAKE_CASE__       ,     safety_checker=SCREAMING_SNAKE_CASE__       ,     feature_extractor=SCREAMING_SNAKE_CASE__       ,     provider=self.gpu_provider       ,     sess_options=self.gpu_options       ,     )
         pipe.set_progress_bar_config(disable=SCREAMING_SNAKE_CASE__       )

         lowerCAmelCase__          =			"A fantasy landscape, trending on artstation"

         lowerCAmelCase__          =			np.random.RandomState(0       )
         lowerCAmelCase__          =			pipe(
             prompt=SCREAMING_SNAKE_CASE__       ,     image=SCREAMING_SNAKE_CASE__       ,     strength=0.75       ,     guidance_scale=7.5       ,     num_inference_steps=20       ,     generator=SCREAMING_SNAKE_CASE__       ,     output_type="np"       ,     )
         lowerCAmelCase__          =			output.images
         lowerCAmelCase__          =			images[0, 255:258, 383:386, -1]

         assert images.shape == (1, 512, 768, 3)
         lowerCAmelCase__          =			np.array([0.8_043, 0.926, 0.9_581, 0.8_119, 0.8_954, 0.913, 0.7_209, 0.7_463, 0.7_431]       )
         # TODO: lower the tolerance after finding the cause of onnxruntime reproducibility issues

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






from maths.prime_factors import prime_factors



def 							_A       (						lowerCAmelCase_					: int      ):
     """simple docstring"""

     if not isinstance(lowerCAmelCase_       ,    lowerCAmelCase_      ):
          lowerCAmelCase__          =			F'Input value of [number={number}] must be an integer'
          raise TypeError(lowerCAmelCase_      )
     if number < 1:
          raise ValueError("Input must be a positive integer"      )
     return -1 if len(prime_factors(lowerCAmelCase_      )      ) % 2 else 1


if __name__ == "__main__":
     import doctest

     doctest.testmod()
