"""simple docstring"""

from collections import namedtuple

__lowercase    =				namedtuple('''from_to''', '''from_ to''')

__lowercase    =				{
    '''millimeter''': '''mm''',
    '''centimeter''': '''cm''',
    '''meter''': '''m''',
    '''kilometer''': '''km''',
    '''inch''': '''in''',
    '''inche''': '''in''',  # Trailing 's' has been stripped off
    '''feet''': '''ft''',
    '''foot''': '''ft''',
    '''yard''': '''yd''',
    '''mile''': '''mi''',
}

__lowercase    =				{
    '''mm''': from_to(0.0_01, 1_000),
    '''cm''': from_to(0.01, 100),
    '''m''': from_to(1, 1),
    '''km''': from_to(1_000, 0.0_01),
    '''in''': from_to(0.02_54, 39.37_01),
    '''ft''': from_to(0.30_48, 3.2_80_84),
    '''yd''': from_to(0.91_44, 1.0_93_61),
    '''mi''': from_to(16_09.34, 0.0_00_62_13_71),
}


def    lowerCAmelCase			(__UpperCamelCase							:    float							,					__UpperCamelCase							:    str							,					__UpperCamelCase							:    str			):
							"""simple docstring"""


							__UpperCamelCase							=from_type.lower().rstrip('''s'''			)
							__UpperCamelCase							=TYPE_CONVERSION.get(__UpperCamelCase							,					__UpperCamelCase			)
							__UpperCamelCase							=to_type.lower().rstrip('''s'''			)
							__UpperCamelCase							=TYPE_CONVERSION.get(__UpperCamelCase							,					__UpperCamelCase			)
							if new_from not in METRIC_CONVERSION:
														__UpperCamelCase							=(
														    F"""Invalid 'from_type' value: {from_type!r}.\n"""
														    F"""Conversion abbreviations are: {", ".join(__UpperCamelCase			)}"""
														)
														raise ValueError(__UpperCamelCase			)
							if new_to not in METRIC_CONVERSION:
														__UpperCamelCase							=(
														    F"""Invalid 'to_type' value: {to_type!r}.\n"""
														    F"""Conversion abbreviations are: {", ".join(__UpperCamelCase			)}"""
														)
														raise ValueError(__UpperCamelCase			)
							return value * METRIC_CONVERSION[new_from].from_ * METRIC_CONVERSION[new_to].to


if __name__ == "__main__":
				import doctest

				doctest.testmod()




"""simple docstring"""

import gc
import tempfile
import unittest

import numpy as np
import torch

from diffusers import VersatileDiffusionDualGuidedPipeline
from diffusers.utils.testing_utils import load_image, nightly, require_torch_gpu, torch_device


__lowercase    =				False






@nightly
@require_torch_gpu
class 		_lowercase (						unittest.TestCase      ):



						"""simple docstring"""




						def   UpperCAmelCase_ (				self							:    List[str]				)				->				List[Any]:
													'''simple docstring'''



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





						def   UpperCAmelCase_ (				self							:    List[Any]				)				->				List[Any]:
													'''simple docstring'''



													__UpperCamelCase							=VersatileDiffusionDualGuidedPipeline.from_pretrained('''shi-labs/versatile-diffusion'''				)
													# remove text_unet
													pipe.remove_unused_weights()
													pipe.to(UpperCamelCase__				)
													pipe.set_progress_bar_config(disable=UpperCamelCase__				)

													__UpperCamelCase							=load_image(
													    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/versatile_diffusion/benz.jpg'''				)

													__UpperCamelCase							=torch.manual_seed(0				)
													__UpperCamelCase							=pipe(
													    prompt='''first prompt'''     , image=UpperCamelCase__     , text_to_image_strength=0.75     , generator=UpperCamelCase__     , guidance_scale=7.5     , num_inference_steps=2     , output_type='''numpy'''     , ).images

													with tempfile.TemporaryDirectory() as tmpdirname:
																				pipe.save_pretrained(UpperCamelCase__				)
																				__UpperCamelCase							=VersatileDiffusionDualGuidedPipeline.from_pretrained(UpperCamelCase__				)

													pipe.to(UpperCamelCase__				)
													pipe.set_progress_bar_config(disable=UpperCamelCase__				)

													__UpperCamelCase							=generator.manual_seed(0				)
													__UpperCamelCase							=pipe(
													    prompt='''first prompt'''     , image=UpperCamelCase__     , text_to_image_strength=0.75     , generator=UpperCamelCase__     , guidance_scale=7.5     , num_inference_steps=2     , output_type='''numpy'''     , ).images

													assert np.abs(image - new_image				).sum() < 1E-5, "Models don't have the same forward pass"





						def   UpperCAmelCase_ (				self							:    Optional[int]				)				->				Optional[int]:
													'''simple docstring'''



													__UpperCamelCase							=VersatileDiffusionDualGuidedPipeline.from_pretrained('''shi-labs/versatile-diffusion'''				)
													pipe.remove_unused_weights()
													pipe.to(UpperCamelCase__				)
													pipe.set_progress_bar_config(disable=UpperCamelCase__				)

													__UpperCamelCase							='''cyberpunk 2077'''
													__UpperCamelCase							=load_image(
													    '''https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/versatile_diffusion/benz.jpg'''				)
													__UpperCamelCase							=torch.manual_seed(0				)
													__UpperCamelCase							=pipe(
													    prompt=UpperCamelCase__     , image=UpperCamelCase__     , text_to_image_strength=0.75     , generator=UpperCamelCase__     , guidance_scale=7.5     , num_inference_steps=50     , output_type='''numpy'''     , ).images

													__UpperCamelCase							=image[0, 253:256, 253:256, -1]

													assert image.shape == (1, 512, 512, 3)
													__UpperCamelCase							=np.array([0.07_87, 0.08_49, 0.08_26, 0.08_12, 0.08_07, 0.07_95, 0.08_18, 0.07_98, 0.07_79]				)

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



