
"""simple docstring"""





import gc
import tempfile
import unittest

import numpy as np
import torch

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


_a								=						False






class        _UpperCAmelCase(       unittest.TestCase      ):
		pass






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



		def 		UpperCAmelCase				(   self)			->			Dict:






							'''simple docstring'''
							# clean up the VRAM after each test
							super().tearDown()
							gc.collect()
							torch.cuda.empty_cache()



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






							'''simple docstring'''
							_UpperCamelCase									=    VersatileDiffusionPipeline.from_pretrained('''shi-labs/versatile-diffusion'''							,						torch_dtype=torch.floataa)
							pipe.to(__a)
							pipe.set_progress_bar_config(disable=__a)

							_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.dual_guided(
							    prompt='''first prompt'''							,						image=__a							,						text_to_image_strength=0.75							,						generator=__a							,						guidance_scale=7.5							,						num_inference_steps=2							,						output_type='''numpy'''							,						).images

							with tempfile.TemporaryDirectory() as tmpdirname:
												pipe.save_pretrained(__a)
												_UpperCamelCase									=    VersatileDiffusionPipeline.from_pretrained(__a							,						torch_dtype=torch.floataa)
							pipe.to(__a)
							pipe.set_progress_bar_config(disable=__a)

							_UpperCamelCase									=    generator.manual_seed(0)
							_UpperCamelCase									=    pipe.dual_guided(
							    prompt='''first prompt'''							,						image=__a							,						text_to_image_strength=0.75							,						generator=__a							,						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)			->			List[str]:






							'''simple docstring'''
							_UpperCamelCase									=    VersatileDiffusionPipeline.from_pretrained('''shi-labs/versatile-diffusion'''							,						torch_dtype=torch.floataa)
							pipe.to(__a)
							pipe.set_progress_bar_config(disable=__a)

							_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.dual_guided(
							    prompt=__a							,						image=__a							,						text_to_image_strength=0.75							,						generator=__a							,						guidance_scale=7.5							,						num_inference_steps=50							,						output_type='''numpy'''							,						).images

							_UpperCamelCase									=    image[0, 2_53:2_56, 2_53:2_56, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							_UpperCamelCase									=    np.array([0.1448, 0.1619, 0.1741, 0.1086, 0.1147, 0.1128, 0.1199, 0.1165, 0.1001])

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

							_UpperCamelCase									=    '''A painting of a squirrel eating a burger '''
							_UpperCamelCase									=    torch.manual_seed(0)
							_UpperCamelCase									=    pipe.text_to_image(
							    prompt=__a							,						generator=__a							,						guidance_scale=7.5							,						num_inference_steps=50							,						output_type='''numpy''').images

							_UpperCamelCase									=    image[0, 2_53:2_56, 2_53:2_56, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							_UpperCamelCase									=    np.array([0.3367, 0.3169, 0.2656, 0.3870, 0.4790, 0.3796, 0.4009, 0.4878, 0.4778])

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

							_UpperCamelCase									=    pipe.image_variation(__a							,						generator=__a							,						output_type='''numpy''').images

							_UpperCamelCase									=    image[0, 2_53:2_56, 2_53:2_56, -1]

							assert image.shape == (1, 5_12, 5_12, 3)
							_UpperCamelCase									=    np.array([0.3076, 0.3123, 0.3284, 0.3782, 0.3770, 0.3894, 0.4297, 0.4331, 0.4456])

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








"""simple docstring"""





from datasets.utils.patching import _PatchedModuleObj, patch_submodule

from . import _test_patching



def  lowerCamelCase__						(     )				->						List[str]:


					"""simple docstring"""





					import os as original_os
					from os import path as original_path
					from os import rename as original_rename
					from os.path import dirname as original_dirname
					from os.path import join as original_join

					assert _test_patching.os is original_os
					assert _test_patching.path is original_path
					assert _test_patching.join is original_join

					assert _test_patching.renamed_os is original_os
					assert _test_patching.renamed_path is original_path
					assert _test_patching.renamed_join is original_join

					_UpperCamelCase									=    '''__test_patch_submodule_mock__'''
					with patch_submodule(_test_patching,	'''os.path.join''',	__snake_case      ):
										# Every way to access os.path.join must be patched, and the rest must stay untouched

										# check os.path.join
										assert isinstance(_test_patching.os,	_PatchedModuleObj      )
										assert isinstance(_test_patching.os.path,	_PatchedModuleObj      )
										assert _test_patching.os.path.join is mock

										# check path.join
										assert isinstance(_test_patching.path,	_PatchedModuleObj      )
										assert _test_patching.path.join is mock

										# check join
										assert _test_patching.join is mock

										# check that the other attributes are untouched
										assert _test_patching.os.rename is original_rename
										assert _test_patching.path.dirname is original_dirname
										assert _test_patching.os.path.dirname is original_dirname

										# Even renamed modules or objects must be patched

										# check renamed_os.path.join
										assert isinstance(_test_patching.renamed_os,	_PatchedModuleObj      )
										assert isinstance(_test_patching.renamed_os.path,	_PatchedModuleObj      )
										assert _test_patching.renamed_os.path.join is mock

										# check renamed_path.join
										assert isinstance(_test_patching.renamed_path,	_PatchedModuleObj      )
										assert _test_patching.renamed_path.join is mock

										# check renamed_join
										assert _test_patching.renamed_join is mock

										# check that the other attributes are untouched
										assert _test_patching.renamed_os.rename is original_rename
										assert _test_patching.renamed_path.dirname is original_dirname
										assert _test_patching.renamed_os.path.dirname is original_dirname

					# check that everthing is back to normal when the patch is over

					assert _test_patching.os is original_os
					assert _test_patching.path is original_path
					assert _test_patching.join is original_join

					assert _test_patching.renamed_os is original_os
					assert _test_patching.renamed_path is original_path
					assert _test_patching.renamed_join is original_join



def  lowerCamelCase__						(     )				->						List[str]:


					"""simple docstring"""





					assert _test_patching.open is open

					_UpperCamelCase									=    '''__test_patch_submodule_builtin_mock__'''
					# _test_patching has "open" in its globals
					assert _test_patching.open is open
					with patch_submodule(_test_patching,	'''open''',	__snake_case      ):
										assert _test_patching.open is mock

					# check that everthing is back to normal when the patch is over

					assert _test_patching.open is open



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


					"""simple docstring"""





					_UpperCamelCase									=    '''__test_patch_submodule_missing_mock__'''
					with patch_submodule(_test_patching,	'''pandas.read_csv''',	__snake_case      ):
										pass



def  lowerCamelCase__						(     )				->						Dict:


					"""simple docstring"""





					_UpperCamelCase									=    '''__test_patch_submodule_missing_builtin_mock__'''
					# _test_patching doesn't have "len" in its globals
					assert getattr(_test_patching,	'''len''',	__snake_case      ) is None
					with patch_submodule(_test_patching,	'''len''',	__snake_case      ):
										assert _test_patching.len is mock
					assert _test_patching.len is len



def  lowerCamelCase__						(     )				->						Tuple:


					"""simple docstring"""





					_UpperCamelCase									=    '''__test_patch_submodule_start_and_stop_mock__'''
					_UpperCamelCase									=    patch_submodule(_test_patching,	'''open''',	__snake_case      )
					assert _test_patching.open is open
					patch.start()
					assert _test_patching.open is mock
					patch.stop()
					assert _test_patching.open is open



def  lowerCamelCase__						(     )				->						Optional[int]:


					"""simple docstring"""





					from os import rename as original_rename
					from os.path import dirname as original_dirname
					from os.path import join as original_join

					_UpperCamelCase									=    '''__test_patch_submodule_successive_join__'''
					_UpperCamelCase									=    '''__test_patch_submodule_successive_dirname__'''
					_UpperCamelCase									=    '''__test_patch_submodule_successive_rename__'''
					assert _test_patching.os.path.join is original_join
					assert _test_patching.os.path.dirname is original_dirname
					assert _test_patching.os.rename is original_rename

					with patch_submodule(_test_patching,	'''os.path.join''',	__snake_case      ):
										with patch_submodule(_test_patching,	'''os.rename''',	__snake_case      ):
															with patch_submodule(_test_patching,	'''os.path.dirname''',	__snake_case      ):
																				assert _test_patching.os.path.join is mock_join
																				assert _test_patching.os.path.dirname is mock_dirname
																				assert _test_patching.os.rename is mock_rename

    # try another order
					with patch_submodule(_test_patching,	'''os.rename''',	__snake_case      ):
										with patch_submodule(_test_patching,	'''os.path.join''',	__snake_case      ):
															with patch_submodule(_test_patching,	'''os.path.dirname''',	__snake_case      ):
																				assert _test_patching.os.path.join is mock_join
																				assert _test_patching.os.path.dirname is mock_dirname
																				assert _test_patching.os.rename is mock_rename

					assert _test_patching.os.path.join is original_join
					assert _test_patching.os.path.dirname is original_dirname
					assert _test_patching.os.rename is original_rename



def  lowerCamelCase__						(     )				->						str:


					"""simple docstring"""





					_UpperCamelCase									=    '''__test_patch_submodule_doesnt_exist_mock__'''
					with patch_submodule(_test_patching,	'''__module_that_doesn_exist__.__attribute_that_doesn_exist__''',	__snake_case      ):
										pass
					with patch_submodule(_test_patching,	'''os.__attribute_that_doesn_exist__''',	__snake_case      ):
										pass






